@ditojs/admin 2.11.1 → 2.11.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/dito-admin.umd.js
CHANGED
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
`))},notifyErrors(e){this.notify({type:"error",title:"Validation Errors",text:e||"Please correct the highlighted errors."})},resetData(){Object.assign(this.data,Ct(this.schema,{},this)),this.clearErrors()},setData(e){for(const t in e)if(t in this.data&&!c.equals(this.data[t],e[t])){this.data[t]=e[t];for(const o of this.getComponentsByName(t))o.markDirty()}},filterData(e){const t={};for(const[o,s]of Object.entries(e))(c.isArray(s)||c.isObject(s))&&this.getComponentsByName(o).some(i=>i.providesData)||(t[o]=s);return t},processData({target:e="clipboard",schemaOnly:t=!0}={}){return bo(this.schema,this.sourceSchema,this.data,this.dataPath,{rootData:this.rootData,component:this,schemaOnly:t,target:e})},_register(e){var t;(t=this.$schemaParentComponent())==null||t._registerSchemaComponent(this,e)},_registerComponent(e,t){var o;this._registerEntry(this.componentsRegistry,e,t),(o=this.parentSchemaComponent)==null||o._registerComponent(e,t)},_registerPane(e,t){this._registerEntry(this.panesRegistry,e,t)},_registerPanel(e,t){this._registerEntry(this.panelsRegistry,e,t)},_registerEntry(e,t,o){const s=t.$uid;o?e[s]=t:delete e[s]},_listEntriesByDataPath(e){return Object.values(e).reduce((t,o)=>{const{dataPath:s}=o;return(t[s]||(t[s]=[])).push(o),t},{})},_getEntries(e,t){return c.normalizeDataPath(t).startsWith(this.dataPath)?this._getEntriesByDataPath(e,t):this._getEntriesByName(e,t)},_getEntriesByDataPath(e,t){return e[c.normalizeDataPath(t)]||[]},_getEntriesByName(e,t){return e[T(this.dataPath,t)]||[]}}}),Ma=y(ja,[["render",_a]]);function Ia(e,t,o,s,a,i){const r=n.resolveComponent("DitoEditButtons"),l=n.resolveComponent("DitoSchema");return n.openBlock(),n.createBlock(l,{class:n.normalizeClass(["dito-schema-inlined",{"dito-schema-compact":e.isCompact}]),schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,label:e.isCompact?null:e.label,padding:e.padding??"inlined",inlined:!0,disabled:e.disabled,collapsed:e.collapsed,collapsible:e.collapsible,generateLabels:!e.isCompact,labelNode:e.labelNode,accumulatedBasis:e.accumulatedBasis},{"edit-buttons":n.withCtx(()=>[e.deletable||e.draggable||e.editable?(n.openBlock(),n.createBlock(r,{key:0,schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,disabled:e.disabled,deletable:e.deletable,draggable:e.draggable,editable:e.editable,editPath:e.editPath,onDelete:t[0]||(t[0]=d=>e.$emit("delete"))},null,8,["schema","dataPath","data","meta","store","disabled","deletable","draggable","editable","editPath"])):n.createCommentVNode("",!0)]),_:1},8,["class","schema","dataPath","data","meta","store","label","padding","disabled","collapsed","collapsible","generateLabels","labelNode","accumulatedBasis"])}const Ah="",Ra=C.component("DitoSchemaInlined",{emits:["delete"],props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},label:{type:[String,Object],default:null},padding:{type:String,default:null},disabled:{type:Boolean,required:!0},collapsed:{type:Boolean,default:!1},collapsible:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},editable:{type:Boolean,default:!1},deletable:{type:Boolean,default:!1},editPath:{type:String,default:null},labelNode:{type:HTMLElement,default:null},accumulatedBasis:{type:Number,default:null}},computed:{isCompact(){return ft(this.schema)},hasLabel(){return!this.isCompact&&!!this.label}}}),za=y(Ra,[["render",Ia]]),qa={key:0,class:"dito-break"},Ua={key:2,class:"dito-break"};function Aa(e,t,o,s,a,i){const r=n.resolveComponent("DitoContainer"),l=n.resolveDirective("resize");return e.isPopulated&&e.componentSchemas.length>0?n.withDirectives((n.openBlock(),n.createElementBlock("div",{key:0,class:n.normalizeClass(["dito-pane",e.classes])},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.componentSchemas,({schema:d,dataPath:h,nestedDataPath:u,nested:p,store:m},g)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[d.break==="before"?(n.openBlock(),n.createElementBlock("span",qa)):n.createCommentVNode("",!0),e.shouldRenderSchema(d)?(n.openBlock(),n.createBlock(r,{ref_for:!0,ref:"containers",key:u,"data-index":g,schema:d,dataPath:h,data:e.data,meta:e.meta,store:m,single:e.isSingleComponent,nested:p,disabled:e.disabled,generateLabels:e.generateLabels,verticalLabels:e.isInLabeledRow(g),accumulatedBasis:e.accumulatedBasis},null,8,["data-index","schema","dataPath","data","meta","store","single","nested","disabled","generateLabels","verticalLabels","accumulatedBasis"])):n.createCommentVNode("",!0),d.break==="after"?(n.openBlock(),n.createElementBlock("span",Ua)):n.createCommentVNode("",!0)],64))),256))],2)),[[l,e.onResizePane]]):n.createCommentVNode("",!0)}const Hh="",Ha=C.component("DitoPane",{provide(){return{$tabComponent:()=>this.tabComponent}},props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:Object,default:null},meta:{type:Object,required:!0},store:{type:Object,required:!0},tab:{type:String,default:null},padding:{type:String,default:null},single:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},generateLabels:{type:Boolean,default:!1},accumulatedBasis:{type:Number,default:null}},data(){return{positions:[]}},computed:{classes(){return{"dito-pane--single":this.isSingleComponent,[`dito-pane--padding-${this.padding}`]:!!this.padding}},tabComponent(){return this.tab?this:this.$tabComponent()},componentSchemas(){var t,o;const e=(t=this.sourceSchema)==null?void 0:t.wrapPrimitives;return Object.entries(((o=this.schema)==null?void 0:o.components)||{}).map(([s,a])=>{a.name=s;const i=gt(a),r=T(this.dataPath,s);return{schema:a,dataPath:i&&!e?r:this.dataPath,nestedDataPath:r,nested:i,store:this.getChildStore(s)}})},isSingleComponent(){return this.single&&this.componentSchemas.length===1},verticalLabelsByIndices(){const{positions:e}=this,t=r=>e[r]&&(r===e.length-1||o(r).top>e[r].top),o=r=>{for(let l=r+1;l<e.length;l++)if(e[l])return e[l];return 0},s=[];let a=[];for(let r=0;r<e.length;r++)a.push(r),t(r)&&(s.push(a),a=[]);a.length>0&&s.push(a);const i=[];for(const r of s){let l=!1;for(const d of r){const h=this.positions[d];if((h==null?void 0:h.height)>2&&(h.node.matches(":has(> .dito-label)")||h.node.closest(".dito-container").matches(".dito-container--label-vertical"))){l=!0;break}}for(const d of r)i[d]=l}return i}},watch:{"componentSchemas.length"(e){this.positions.length=e}},created(){this._register(!0)},unmounted(){this._register(!1)},methods:{_register(e){this.schemaComponent._registerPane(this,e)},focus(){if(this.tab)return this.$router.push({hash:`#${this.tab}`})},onResizePane(){this.$nextTick(()=>{for(const e of this.$refs.containers){const t=e.$el,o=+t.dataset.index,s=t.getBoundingClientRect(),a=getComputedStyle(t),i=parseFloat(a.padding),r=parseFloat(a.fontSize),l=s.height-2*i;this.positions[o]=l<=0?null:{top:s.y,height:l/r,node:t}}})},isInLabeledRow(e){return!!this.verticalLabelsByIndices[e]}}}),Wa=y(Ha,[["render",Aa]]);function Ka(e){const t=c.isString(e)&&e.match(/^\s*([+-]?\d+)\s*\/\s*([+-]?\d+)\s*$/);if(t){const[,o,s]=t;return parseFloat(o)/parseFloat(s)}else return parseFloat(e)}function Ya(e,t,o,s,a,i){const r=n.resolveComponent("DitoPanels"),l=n.resolveComponent("DitoLabel"),d=n.resolveComponent("DitoErrors");return n.withDirectives((n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["dito-container",e.containerClasses]),style:n.normalizeStyle(e.containerStyles)},[e.isMounted&&e.panelEntries.length>0?(n.openBlock(),n.createBlock(n.Teleport,{key:0,to:".dito-sidebar__teleport"},[n.createVNode(r,{panels:e.panelEntries,data:e.data,meta:e.meta,store:e.store,disabled:e.disabled},null,8,["panels","data","meta","store","disabled"])])):n.createCommentVNode("",!0),e.hasLabel?(n.openBlock(),n.createBlock(l,{key:1,class:n.normalizeClass(e.layoutClasses),label:e.label,dataPath:e.labelDataPath,info:e.info},null,8,["class","label","dataPath","info"])):n.createCommentVNode("",!0),(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.typeComponent),{class:n.normalizeClass(["dito-component",e.componentClasses]),ref:"component",schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,width:e.width,label:e.label,single:e.single,nested:e.nested,disabled:e.componentDisabled,accumulatedBasis:e.combinedBasis,onErrors:e.onErrors},null,40,["class","schema","dataPath","data","meta","store","width","label","single","nested","disabled","accumulatedBasis","onErrors"])),n.createVNode(d,{errors:e.errors},null,8,["errors"])],6)),[[n.vShow,e.componentVisible]])}const Wh="",Ja=C.component("DitoContainer",{props:{schema:{type:Object,required:!0},dataPath:{type:String,default:""},data:{type:[Object,Array],required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},single:{type:Boolean,default:!1},nested:{type:Boolean,default:!0},disabled:{type:Boolean,required:!0},generateLabels:{type:Boolean,default:!1},verticalLabels:{type:Boolean,default:!1},accumulatedBasis:{type:Number,default:null}},data(){return{errors:null}},computed:{context(){return new w(this,{nested:this.nested})},typeComponent(){return le(this.schema.type)},hasLabel(){return fo(this.schema,this.generateLabels)},label(){return this.hasLabel?this.getLabel(this.schema):null},labelDataPath(){return this.nested?this.dataPath:null},info:b("info",{type:String,default:null}),width:b("width",{type:[String,Number],default(){var e;return(e=this.typeComponent)==null?void 0:e.defaultWidth},get(e){return e===void 0?1:c.isString(e)?e.match(/^\s*[<>]?\s*(.*)$/)[1]:e}}),widthOperator:b("width",{type:String,get(e){return c.isString(e)&&e.match(/^\s*([<>]?)/)[1]||null}}),componentVisible:b("visible",{type:Boolean,default(){var e;return(e=this.typeComponent)==null?void 0:e.defaultVisible}}),componentDisabled:b("disabled",{type:Boolean,default:!1,get(e){return e||this.disabled}}),flexGrow(){return this.widthOperator===">"||this.width==="fill"},flexShrink(){return this.widthOperator==="<"},flexBasis(){const e=this.width;return[null,"auto","fill"].includes(e)?"auto":/%$/.test(e)?parseFloat(e)/100:/[a-z]/.test(e)?e:Ka(e)},combinedBasis(){const{accumulatedBasis:e,flexBasis:t}=this;return c.isNumber(e)&&c.isNumber(t)?e*t:null},containerClasses(){const{class:e}=this.schema,t="dito-container";return{[`${t}--single`]:this.single,"dito-disabled":this.componentDisabled,"dito-has-errors":!!this.errors,[`${t}--label-vertical`]:this.verticalLabels,[`${t}--omit-spacing`]:go(this.schema),...c.isString(e)?{[e]:!0}:e}},containerStyles(){const{flexBasis:e,combinedBasis:t}=this;return{"--grow":this.flexGrow?1:0,"--shrink":this.flexShrink?1:0,"--basis":c.isNumber(e)?`${e*100}%`:e,"--basis-mobile":c.isNumber(t)&&t<=.25?`${e*200}%`:null}},componentClasses(){return{"dito-single":this.single,...this.layoutClasses}},layoutClasses(){return{"dito-width-fill":this.width==="fill"||this.flexBasis!=="auto","dito-width-grow":this.flexGrow,"dito-width-shrink":this.flexShrink}},panelEntries(){return yo(this.api,this.schema,this.dataPath,this.$refs.component,this.tabComponent)}},methods:{onErrors(e){this.errors=e}}}),Ga=y(Ja,[["render",Ya]]),Qa={class:"dito-tabs"},Xa=["onClick"];function Za(e,t,o,s,a,i){return n.openBlock(),n.createElementBlock("div",Qa,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.tabs,(r,l)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.shouldRenderSchema(r)?(n.openBlock(),n.createElementBlock("a",{class:n.normalizeClass(["dito-link",{"dito-active":e.modelValue===l}]),key:l,onClick:d=>e.$emit("update:modelValue",l)},n.toDisplayString(e.getLabel(r,l)),11,Xa)):n.createCommentVNode("",!0)],64))),256))])}const Kh="",va=C.component("DitoTabs",{emits:["update:modelValue"],props:{tabs:{type:Object,default:null},modelValue:{type:String,default:null}}}),xa=y(va,[["render",Za]]);function er(e,t,o,s,a,i){const r=n.resolveComponent("DitoButtons"),l=n.resolveComponent("DitoSchema");return e.shouldRenderSchema(e.panelSchema)?n.withDirectives((n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.panelTag),{key:0,class:"dito-panel",onSubmit:t[0]||(t[0]=n.withModifiers(()=>{},["prevent"]))},{default:n.withCtx(()=>[n.createVNode(l,{class:"dito-panel__schema",schema:e.panelSchema,dataPath:e.panelDataPath,data:e.panelData,meta:e.meta,store:e.store,padding:"nested",disabled:e.disabled,hasOwnData:e.hasOwnData,generateLabels:""},{before:n.withCtx(()=>[n.createElementVNode("h2",{class:n.normalizeClass(["dito-panel__header",{"dito-panel__header--sticky":e.sticky}])},[n.createElementVNode("span",null,n.toDisplayString(e.getLabel(e.schema)),1),n.createVNode(r,{class:"dito-buttons-small",buttons:e.panelButtonSchemas,dataPath:e.panelDataPath,data:e.panelData,meta:e.meta,store:e.store,disabled:e.disabled},null,8,["buttons","dataPath","data","meta","store","disabled"])],2)]),buttons:n.withCtx(()=>[n.createVNode(r,{buttons:e.buttonSchemas,dataPath:e.panelDataPath,data:e.panelData,meta:e.meta,store:e.store,disabled:e.disabled},null,8,["buttons","dataPath","data","meta","store","disabled"])]),_:1},8,["schema","dataPath","data","meta","store","disabled","hasOwnData"])]),_:1},544)),[[n.vShow,e.visible&&(!e.panelTabComponent||e.panelTabComponent.visible)]]):n.createCommentVNode("",!0)}const Yh="",tr=C.component("DitoPanel",{mixins:[Ut],provide(){return{$panelComponent:()=>this,$tabComponent:()=>this.panelTabComponent}},props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},disabled:{type:Boolean,required:!0},panelTabComponent:{type:Object,default:null}},data(){return{ownData:null}},computed:{panelComponent(){return this},tabComponent(){return this.panelTabComponent},buttonSchemas(){return ee(this.schema.buttons)},panelButtonSchemas(){return ee(this.schema.panelButtons)},hasOwnData(){return!!this.ownData},panelData(){return this.ownData||this.data},panelSchema(){if(this.hasOwnData)return this.schema;{const{data:e,...t}=this.schema;return t}},panelTag(){return this.hasOwnData?"form":"div"},panelDataPath(){return this.hasOwnData?this.dataPath:this.schemaComponent.dataPath},visible:b("visible",{type:Boolean,default:!0}),sticky:b("sticky",{type:Boolean,default:!1})},created(){this._register(!0);const{data:e}=this.schema;e&&(this.ownData=c.isFunction(e)?e(this.context):e)},unmounted(){this._register(!1)},methods:{_register(e){this.schemaComponent._registerPanel(this,e)}}}),nr=y(tr,[["render",er]]),or={key:0,class:"dito-panels"};function sr(e,t,o,s,a,i){const r=n.resolveComponent("DitoPanel");return e.panels.length>0?(n.openBlock(),n.createElementBlock("div",or,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.panels,({schema:l,dataPath:d,tabComponent:h})=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.shouldRenderSchema(l)?(n.openBlock(),n.createBlock(r,{key:e.getPanelKey(d,h),schema:l,dataPath:d,data:e.data,meta:e.meta,store:e.getChildStore(l.name),disabled:l.disabled??e.disabled,panelTabComponent:h},null,8,["schema","dataPath","data","meta","store","disabled","panelTabComponent"])):n.createCommentVNode("",!0)],64))),256))])):n.createCommentVNode("",!0)}const Jh="",ar=C.component("DitoPanels",{props:{panels:{type:Array,default:null},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},disabled:{type:Boolean,required:!0}},methods:{getPanelKey(e,t){return t?`${t.tab}_${e}`:e}}}),rr=y(ar,[["render",sr]]),ir={key:0,class:"dito-buttons"},lr={key:0,class:"dito-container"};function dr(e,t,o,s,a,i){var d,h;const r=n.resolveComponent("DitoContainer"),l=n.resolveComponent("DitoVnode");return e.buttonSchemas||e.hasSlotContent(e.$slots.default)?(n.openBlock(),n.createElementBlock("div",ir,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.buttonSchemas,(u,p)=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.shouldRenderSchema(u)?(n.openBlock(),n.createBlock(r,{key:p,schema:u,dataPath:p,data:e.data,meta:e.meta,store:e.getChildStore(u.name),disabled:e.disabled},null,8,["schema","dataPath","data","meta","store","disabled"])):n.createCommentVNode("",!0)],64))),256)),(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList((h=(d=e.$slots).default)==null?void 0:h.call(d),u=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.hasVNodeContent(u)?(n.openBlock(),n.createElementBlock("div",lr,[n.createVNode(l,{vnode:u},null,8,["vnode"])])):n.createCommentVNode("",!0)],64))),256))])):n.createCommentVNode("",!0)}const Gh="",cr=C.component("DitoButtons",{provide:{$tabComponent:()=>null},props:{buttons:{type:Object,default:null},dataPath:{type:String,default:""},data:{type:[Object,Array],default:null},meta:{type:Object,default:()=>({})},store:{type:Object,default:()=>({})},disabled:{type:Boolean,default:!1}},computed:{buttonSchemas(){const{dataPath:e,buttons:t}=this;return t?Object.values(t).reduce((o,s)=>(o[T(e,s.name)]=s,o),{}):null}},methods:{hasSlotContent:Ns,hasVNodeContent:zt}}),hr=y(cr,[["render",dr]]),ur=["disabled"];function pr(e,t,o,s,a,i){const r=n.resolveComponent("RouterLink"),l=n.resolveComponent("DitoCreateButton"),d=n.resolveComponent("DitoButtons");return n.openBlock(),n.createBlock(d,{class:"dito-edit-buttons dito-buttons-round",buttons:e.buttons,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,onClick:t[1]||(t[1]=n.withModifiers(()=>{},["stop"]))},{default:n.withCtx(()=>[e.draggable?(n.openBlock(),n.createElementBlock("a",n.mergeProps({key:0,class:["dito-button",{"dito-disabled":e.isDraggableDisabled}]},e.getButtonAttributes(e.verbs.drag)),null,16)):n.createCommentVNode("",!0),e.editable?(n.openBlock(),n.createBlock(r,n.mergeProps({key:1,class:["dito-button",{"dito-disabled":e.isEditableDisabled}],to:e.editPath?{path:e.editPath}:{}},e.getButtonAttributes(e.verbs.edit)),null,16,["class","to"])):n.createCommentVNode("",!0),e.creatable?(n.openBlock(),n.createBlock(l,{key:2,schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,path:e.createPath,verb:e.verbs.create,text:e.createButtonText,disabled:e.isCreatableDisabled},null,8,["schema","dataPath","data","meta","store","path","verb","text","disabled"])):n.createCommentVNode("",!0),e.deletable?(n.openBlock(),n.createElementBlock("button",n.mergeProps({key:3,class:"dito-button",type:"button",disabled:e.isDeletableDisabled},e.getButtonAttributes(e.verbs.delete),{onClick:t[0]||(t[0]=h=>e.$emit("delete"))}),null,16,ur)):n.createCommentVNode("",!0)]),_:1},8,["buttons","dataPath","data","meta","store"])}const Qh="",mr=C.component("DitoEditButtons",{emits:["delete"],props:{buttons:{type:Object,default:null},schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Object,Array],default:null},meta:{type:Object,required:!0},store:{type:Object,required:!0},disabled:{type:Boolean,required:!0},draggable:{type:Boolean,default:!1},editable:{type:Boolean,default:!1},creatable:{type:Boolean,default:!1},deletable:{type:Boolean,default:!1},editPath:{type:String,default:null},createPath:{type:String,default:null}},computed:{formLabel(){return this.getLabel(this.schema.form)},isDraggableDisabled(){return this.disabled||!this.hasSchemaOption("draggable")},isDeletableDisabled(){return this.disabled||!this.hasSchemaOption("deletable")},isEditableDisabled(){return this.disabled||!this.editPath||!this.hasSchemaOption("editable")},isCreatableDisabled(){return this.disabled||!this.createPath||!this.hasSchemaOption("creatable")},createButtonText(){var e;return((e=this.schema.creatable)==null?void 0:e.label)||this.formLabel&&`${c.capitalize(this.verbs.create)} ${this.formLabel}`||null}},methods:{hasSchemaOption(e){return this.getSchemaValue(e,{type:Boolean,default:!0})}}}),fr=y(mr,[["render",pr]]),gr={class:"dito-create-button"},br=["type","disabled"],yr=["disabled"],kr=["onMousedown","onMouseup"];function Cr(e,t,o,s,a,i){return n.openBlock(),n.createElementBlock("div",gr,[e.creatableForm?(n.openBlock(),n.createElementBlock("button",n.mergeProps({key:0,class:"dito-button",type:e.isInlined?"button":"submit",disabled:e.disabled},e.getButtonAttributes(e.verb),{onClick:t[0]||(t[0]=r=>e.createItem(e.creatableForm))}),n.toDisplayString(e.text),17,br)):e.creatableForms?(n.openBlock(),n.createElementBlock(n.Fragment,{key:1},[n.createElementVNode("button",n.mergeProps({class:"dito-button",type:"button",disabled:e.disabled},e.getButtonAttributes(e.verb),{onMousedown:t[1]||(t[1]=n.withModifiers(r=>e.onPulldownMouseDown(),["stop"]))}),n.toDisplayString(e.text),17,yr),n.createElementVNode("ul",{class:n.normalizeClass(["dito-pulldown",{"dito-open":e.pulldown.open}])},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.creatableForms,(r,l)=>(n.openBlock(),n.createElementBlock("li",null,[n.withDirectives(n.createElementVNode("a",{class:n.normalizeClass(e.getFormClass(r,l)),onMousedown:n.withModifiers(d=>e.onPulldownMouseDown(l),["stop"]),onMouseup:d=>e.onPulldownMouseUp(l)},n.toDisplayString(e.getLabel(r)),43,kr),[[n.vShow,e.shouldShowSchema(r)]])]))),256))],2)],64)):n.createCommentVNode("",!0)])}const Xh="",$r=C.component("DitoCreateButton",{mixins:[Kt],props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Object,Array],default:null},meta:{type:Object,required:!0},store:{type:Object,required:!0},path:{type:String,required:!0},verb:{type:String,required:!0},text:{type:String,default:null},disabled:{type:Boolean,required:!0}},computed:{forms(){return K(this.schema,this.context)},creatableForms(){const e=Object.entries(this.forms).filter(([,t])=>this.isFormCreatable(t));return e.length>0?Object.fromEntries(e):null},creatableForm(){const e=this.creatableForms;return e&&Object.keys(e).length===1&&e.default||null},isInlined(){return je(this.schema)}},methods:{isFormCreatable(e){return this.shouldRenderSchema(e)&&this.getSchemaValue("creatable",{type:Boolean,default:!0,schema:e})},createItem(e,t=null){if(!this.shouldDisableSchema(e))this.isInlined?this.sourceComponent.createItem(e,t):this.$router.push({path:`${this.path}/create`,query:{type:t}});else throw new Error("Not allowed to create item for given form")},getFormClass(e,t){return{[`dito-type-${t}`]:!0,"dito-disabled":this.shouldDisableSchema(e)}},onPulldownSelect(e){this.createItem(this.forms[e],e),this.setPulldownOpen(!1)}}}),Dr=y($r,[["render",Cr]]),Br={key:0,class:"dito-clipboard dito-buttons dito-buttons-round"},wr=["disabled"],Sr=["disabled"];function Vr(e,t,o,s,a,i){return e.clipboard?(n.openBlock(),n.createElementBlock("div",Br,[n.createElementVNode("button",{class:"dito-button dito-button-copy",ref:"copyData",type:"button",title:"Copy Data",disabled:!e.copyEnabled,onClick:t[0]||(t[0]=(...r)=>e.onCopy&&e.onCopy(...r))},null,8,wr),n.createElementVNode("button",{class:"dito-button dito-button-paste",type:"button",title:"Paste Data",disabled:!e.pasteEnabled,onClick:t[1]||(t[1]=(...r)=>e.onPaste&&e.onPaste(...r))},null,8,Sr)])):n.createCommentVNode("",!0)}const Zh="",Pr=C.component("DitoClipboard",{mixins:[H],props:{clipboard:{type:[Boolean,Object],required:!0},schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Object,Array],default:null}},data(){return{copyEnabled:!1,pasteEnabled:!1}},computed:{clipboardOptions(){return c.isObject(this.clipboard)?this.clipboard:{}},copyData(){const{copy:e}=this.clipboardOptions;return e?t=>e.call(this,new w(this,{clipboardData:t})):t=>c.clone(t)},pasteData(){const{paste:e}=this.clipboardOptions;return e?t=>e.call(this,new w(this,{clipboardData:t})):t=>t}},watch:{"parentComponent.hasData":{immediate:!0,handler:"updateCopy"},"appState.clipboardData":{immediate:!0,handler:"updatePaste"}},mounted(){this.domOn(document,{copy:this.updatePaste}),this.domOn(window,{focus:this.updatePaste})},methods:{checkClipboardData(e){const{$schema:t,...o}=e||{};return t===this.schema.name?o:null},async getClipboardData(e){var o,s;let{clipboardData:t}=this.appState;try{const a=await((s=(o=navigator.clipboard)==null?void 0:o.readText)==null?void 0:s.call(o));a&&(t=JSON.parse(a))}catch(a){e&&(console.error(a,a.name,a.message),a.name==="SyntaxError"&&alert(c.deindent`
|
|
3
3
|
The data in the clipboard appears to be malformed:
|
|
4
4
|
${a.message}
|
|
5
|
-
`))}return this.checkClipboardData(t)},updateCopy(){this.copyEnabled=this.parentComponent.hasData},async updatePaste(){if(this.pasteEnabled=!!this.checkClipboardData(this.appState.clipboardData),!this.pasteEnabled&&this.appState.agent.chrome){const e=await this.getClipboardData(!1);this.pasteEnabled=!!e}},async onCopy(){var t,o;let e=this.parentComponent.clipboardData;try{e&&(e={$schema:this.schema.name,...this.copyData(e)}),this.appState.clipboardData=e,this.pasteEnabled=!0;try{const s=JSON.stringify(e,null,2);await((o=(t=navigator.clipboard)==null?void 0:t.writeText)==null?void 0:o.call(t,s))}catch(s){console.error(s,s.name,s.message)}}catch(s){console.error(s),alert(s.message)}},async onPaste(){let e=await this.getClipboardData(!0);try{e=e&&this.pasteData(e),e&&(this.parentComponent.clipboardData=e)}catch(t){console.error(t),alert(t.message)}}}}),Er=y(Pr,[["render",Vr]]),Yt={data(){return{isLoading:!1}},methods:{setLoading(e,{updateRoot:t=!1,updateView:o=!1}={}){!this.isLoading^!e&&(this.isLoading=!!e,t&&this.rootComponent.registerLoading(e),o&&this.viewComponent.setLoading(this.isLoading))}}},Jt={mixins:[ke,Yt],provide(){return{$resourceComponent:()=>this,$verbs:()=>this.verbs,$isPopulated:()=>this.hasData}},data(){return{loadedData:null,abortController:null}},computed:{resourceComponent(){return this},resource(){return this.getResource()},providesData(){return!!this.resource},linksToView(){return!1},isTransient(){const e=this.formComponent;return!this.providesData&&!this.linksToView||e&&(e.isTransient||e.isCreating)},transientNote(){return this.isTransient&&"<b>Note</b>: the parent still needs to be saved in order to persist this change."},shouldLoad(){return!this.isTransient&&!this.isLoading},hasData(){return!!this.loadedData},verbs(){return this.getVerbs()},paginationRange(){const{paginate:e}=this.sourceSchema;if(this.isListSource&&e){const{page:t=0}=this.query||{},o=t*e;return[o,o+e-1]}return null},queryParams(){const e=this.paginationRange,{page:t,...o}=this.query||{};return{...o,...e&&{range:e.join(",")}}}},created(){(this.providesData||this.isCreating)&&this.setupData()},methods:{getResource(){var e,t;return _((e=this.sourceSchema)==null?void 0:e.resource,{type:"collection",parent:((t=this.parentFormComponent)==null?void 0:t.resource)??null})},getVerbs(){const e=this.$verbs();return this.isTransient?{...e,create:"add",created:"added",save:"apply",saved:"applied",delete:"remove",deleted:"removed"}:e},clearData(){this.loadedData=null},setData(e){this.loadedData=e},setupData(){this.ensureData()},ensureData(){this.shouldLoad&&(this.hasData?this.reloadData():this.loadData(!0))},reloadData(){this.loadData(!1)},loadData(e){this.isTransient||(e&&this.clearData(),this.requestData())},createData(e,t){return Ct(e,t?{type:t}:{},this)},requestData(){const e=this.queryParams;this.handleRequest({method:"get",query:e},(t,o)=>{var s;if(t){if(o){const{data:a}=o;if((a==null?void 0:a.type)==="FilterValidation"&&((s=this.onFilterErrors)!=null&&s.call(this,a.errors)))return!0;if(this.isUnauthorizedError(o))return!0}}else this.setData(o.data),this.emitSchemaEvent("load")})},isValidationError(e){return(e==null?void 0:e.status)===400},isUnauthorizedError(e){return(e==null?void 0:e.status)===401},async handleRequest({method:e,resource:t=this.resource,query:o,data:s},a){var h;const i={updateRoot:!0,updateView:this.isInView};(h=this.abortController)==null||h.abort();const r=new AbortController;this.abortController=r;const{signal:l}=r,d={method:e,resource:t,query:o,data:s,signal:l};this.setLoading(!0,i);try{const u=await this.sendRequest(d);a(null,u)}catch(u){const{response:p}=u;if(!a(u,p)){const m=p==null?void 0:p.data,g=c.isString(m==null?void 0:m.type)?c.labelize(m.type):"Error",f=(m==null?void 0:m.message)??u;this.notify({type:"error",title:g,text:f})}}this.abortController===r&&(this.abortController=null,this.setLoading(!1,i))},getPayloadData(e,t){return["post","put","patch"].includes(t)&&(e.getSchemaValue(["resource","data"])||e.processedItem)},async submit(e){const t=_(e.schema.resource,{parent:this.resource});if(t){const{method:o}=t,s=this.getPayloadData(e,o);return this.submitResource(e,t,o,s)}return!1},async submitResource(e,t,o,s,{setData:a=!1,onSuccess:i,onError:r,notifySuccess:l=()=>this.notify({type:"success",title:"Request Successful",text:"Request was successfully sent."}),notifyError:d=h=>this.notify({type:"error",title:"Request Error",text:[`Unable to send request${h?":":""}`,(h==null?void 0:h.message)||h]})}={}){return new Promise(h=>{this.handleRequest({method:o,resource:t,data:s},async(u,p)=>{const m=p==null?void 0:p.data;if(u){const g=this.isValidationError(p)&&m.errors;if(g)await this.showValidationErrors(g,!0);else{const f=c.isObject(m)?m:u;r==null||r(f),await this.emitButtonEvent(e,"error",{notify:d,error:f})}h(!1)}else a&&m&&this.setData(m),i==null||i(),await this.emitButtonEvent(e,"success",{notify:l}),h(!0)})})},async emitButtonEvent(e,t,{notify:o,error:s}){const a=new w(e,{nested:!1,data:this.data,itemLabel:this.itemLabel,error:s}),i=await e.emitEvent(t,{context:a});return o&&i===void 0&&!a.wasNotified&&o(s),i}}};function Nr(e){return new URL(`file:${e}`).pathname}const Or=["data-resource"],Tr={type:"submit",disabled:""};function Fr(e,t,o,s,a,i){const r=n.resolveComponent("RouterView"),l=n.resolveComponent("DitoButtons"),d=n.resolveComponent("DitoSchema");return n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["dito-form dito-scroll-parent",{"dito-form-nested":e.isNestedRoute}]),"data-resource":e.sourceSchema.path},[e.isLastUnnestedRoute||e.isNestedRoute?n.createCommentVNode("",!0):n.withDirectives((n.openBlock(),n.createBlock(r,{key:0},null,512)),[[n.vShow,!e.isActive]]),n.withDirectives((n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.isNestedRoute?"div":"form"),{class:n.normalizeClass({"dito-scroll-parent":e.isRootForm}),onSubmit:t[0]||(t[0]=n.withModifiers(()=>{},["prevent"]))},{default:n.withCtx(()=>[n.withDirectives(n.createElementVNode("button",Tr,null,512),[[n.vShow,!1]]),n.createVNode(d,{schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,padding:e.isNestedRoute?"nested":"root",disabled:e.isLoading,scrollable:e.isRootForm,generateLabels:""},{buttons:n.withCtx(()=>[n.createVNode(l,{class:n.normalizeClass(["dito-buttons-round dito-buttons-large dito-buttons-main",{"dito-buttons-sticky":e.isRootForm}]),buttons:e.buttonSchemas,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,disabled:e.isLoading},null,8,["class","buttons","dataPath","data","meta","store","disabled"])]),_:1},8,["schema","dataPath","data","meta","store","padding","disabled","scrollable"])]),_:1},40,["class"])),[[n.vShow,e.isActive]])],10,Or)}const Lr=C.component("DitoForm",{mixins:[At,Jt],data(){return{createdData:null,clonedData:void 0,sourceKey:null,isForm:!0}},computed:{verbs(){const e=this.getVerbs(),{isCreating:t,providesData:o}=this;return{...e,submit:t?e.create:e.save,submitted:t?e.created:e.saved,cancel:o?e.cancel:e.close,cancelled:o?e.cancelled:e.closed}},schema(){return this.getItemFormSchema(this.sourceSchema,this.data||{type:this.type},this.context)||{}},buttonSchemas(){return ee(c.assignDeeply({cancel:{type:"button",events:{click:()=>this.cancel()}},submit:!this.isMutating&&{type:"submit",closeForm:!0,events:{click:({component:e})=>e.submit()}}},this.schema.buttons))},isRootForm(){return this.dataPath===""&&!this.isNestedRoute},isActive(){return this.isLastRoute||this.isLastUnnestedRoute},isTransient(){return!this.providesData},isCreating(){return this.param==="create"},isDirty(){var e;return!this.isMutating&&!!((e=this.mainSchemaComponent)!=null&&e.isDirty)},isMutating(){return!!this.sourceSchema.mutate},selectedTab(){var e;return((e=this.mainSchemaComponent)==null?void 0:e.selectedTab)||null},type(){return this.$route.query.type},itemId(){return this.isCreating?null:this.param??null},method(){return this.isCreating?"post":"patch"},resource(){const e=this.getResource();return Re(this.itemId,e)||e},breadcrumbPrefix(){return c.capitalize(this.isCreating?this.verbs.create:this.verbs.edit)},data(){return this.createdData||this.loadedData||this.inheritedData||null},dataPath(){return this.getDataPathFrom(this.dataComponent)},sourceData(){let e=this.routeRecord?this.parentRouteComponent.data:null;if(e){const t=c.parseDataPath(this.getDataPathFrom(this.parentRouteComponent)),o=this.routeRecord.path.split("/"),s=o.slice(o.length-t.length);this.sourceKey=null;const a=t[t.length-1];te(this.sourceSchema)&&a==="create"&&t.length--;for(let i=0,r=t.length;i<r&&e;i++){const l=t[i],d=/^:id/.test(s[i])?l==="create"?null:this.findItemIdIndex(this.sourceSchema,e,l):l;i===r-1?this.sourceKey=d:e=e[d]}}return e},inheritedData(){if(this.isTransient&&this.clonedData===void 0&&this.sourceData&&this.sourceKey!==null){let e=this.sourceData[this.sourceKey];return this.isMutating||(this.clonedData=e=c.clone(e)),e===null&&!this.isCreating&&te(this.sourceSchema)&&this.$router.push({path:`${this.path}/create`}),e}return this.clonedData},hasData(){return!!this.data},itemLabel(){return this.getItemLabel(this.sourceSchema,this.data,{extended:!0})}},watch:{$route:{flush:"post",handler(e,t){var s;const o=(s=this.meta)==null?void 0:s.param;o&&this.providesData&&t.matched[0].path===e.matched[0].path&&t.params[o]!=="create"&&e.params[o]!==t.params[o]&&this.loadData(!0)}},sourceData:"clearClonedData",create:"setupData"},methods:{emitSchemaEvent(e,t){return this.mainSchemaComponent.emitEvent(e,t)},getDataPathFrom(e){return this.api.denormalizePath(this.path.slice((e.isView?0:e.path.length)+1))},setupData(){this.isCreating?this.createdData||(this.createdData=this.createData(this.schema,this.type)):this.ensureData()},setSourceData(e){if(this.sourceData&&this.sourceKey!==null){const{mainSchemaComponent:t}=this;return this.sourceData[this.sourceKey]=t.filterData(e),t.onChange(),!0}return!1},addSourceData(e){var t;return te(this.sourceSchema)?this.setSourceData(e):!!((t=this.sourceData)!=null&&t.push(e))},clearData(){this.setData(null)},setData(e){this.isTransient?this.setSourceData(e):(this.createdData=null,this.loadedData=e)},clearClonedData(e,t){e!==t&&(this.clonedData=void 0)},async cancel(){return this.close()},async close(){return this.navigate(this.parentRouteComponent.path)},getSubmitVerb(e=!0){return this.isCreating?e?"create":"created":e?"submit":"submitted"},async submit(e,{validate:t=!0,closeForm:o=!1}={}){if(t&&!this.validateAll())return!1;const s=h=>this.verbs[this.getSubmitVerb(h)],a=_(e.schema.resource,{parent:this.resource}),i=a||this.resource,r=(i==null?void 0:i.method)||this.method,l=this.getPayloadData(e,r);let d;if(!a&&this.isTransient?d=await this.submitTransient(e,i,r,l,{onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:h=>this.emitSchemaEvent("error",{context:{error:h}}),notifySuccess:()=>{const h=s(!1);this.notify({type:"info",title:this.isCreating?`Item ${c.capitalize(h)}`:`Change ${c.capitalize(h)}`,text:[this.isCreating?`${this.itemLabel} was ${h}.`:`Changes to ${this.itemLabel} were ${h}.`,this.transientNote]})},notifyError:()=>{const h=s(!0);this.notify({type:"error",title:"Request Error",text:`Unable to ${h} ${this.itemLabel}.`})}}):d=await this.submitResource(e,i,r,l,{setData:!0,onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:h=>this.emitSchemaEvent("error",{context:{error:h}}),notifySuccess:()=>{const h=s(!1);this.notify({type:"success",title:`Successfully ${c.capitalize(h)}`,text:`${this.itemLabel} was ${h}.`})},notifyError:h=>{const u=s(!0);this.notify({type:"error",title:"Request Error",text:[`Unable to ${u} ${this.itemLabel}${h?":":""}`,(h==null?void 0:h.message)||h]})}}),d){if(this.resetValidation(),o||e.closeForm)this.close();else if(this.isCreating){const h=this.getItemId(this.schema,this.data);this.$router.replace({path:Nr(`${this.path}/../${h}`),hash:this.$route.hash})}}return d},async submitTransient(e,t,o,s,{onSuccess:a,onError:i,notifySuccess:r,notifyError:l}){const d=this.isCreating?this.addSourceData(s):this.setSourceData(s);if(d)a==null||a(),await this.emitButtonEvent(e,"success",{notify:r});else{const h="Could not submit transient item";i==null||i(h),await this.emitButtonEvent(e,"error",{notify:l,error:h})}return d}}}),Gt=y(Lr,[["render",Fr]]),vh="",_r=C.component("DitoFormNested",{extends:Gt}),jr={key:0,class:"dito-errors"};function Mr(e,t,o,s,a,i){return e.errors?(n.openBlock(),n.createElementBlock("div",jr,[n.createElementVNode("ul",null,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.errors,r=>(n.openBlock(),n.createElementBlock("li",null,n.toDisplayString(r),1))),256))])])):n.createCommentVNode("",!0)}const xh="",Ir=C.component("DitoErrors",{props:{errors:{type:Array,default:null}},data(){return{tip:null}},watch:{errors(){this.$nextTick(this.updateErrors)}},unmounted(){var e;(e=this.tip)==null||e.destroy()},methods:{updateErrors(){let{tip:e}=this;e==null||e.hide(),this.errors&&(e=this.tip??(this.tip=n.markRaw(Qe(this.$el.closest(".dito-container")))),e.setProps({content:this.errors.join(`
|
|
5
|
+
`))}return this.checkClipboardData(t)},updateCopy(){this.copyEnabled=this.parentComponent.hasData},async updatePaste(){if(this.pasteEnabled=!!this.checkClipboardData(this.appState.clipboardData),!this.pasteEnabled&&this.appState.agent.chrome){const e=await this.getClipboardData(!1);this.pasteEnabled=!!e}},async onCopy(){var t,o;let e=this.parentComponent.clipboardData;try{e&&(e={$schema:this.schema.name,...this.copyData(e)}),this.appState.clipboardData=e,this.pasteEnabled=!0;try{const s=JSON.stringify(e,null,2);await((o=(t=navigator.clipboard)==null?void 0:t.writeText)==null?void 0:o.call(t,s))}catch(s){console.error(s,s.name,s.message)}}catch(s){console.error(s),alert(s.message)}},async onPaste(){let e=await this.getClipboardData(!0);try{e=e&&this.pasteData(e),e&&(this.parentComponent.clipboardData=e)}catch(t){console.error(t),alert(t.message)}}}}),Er=y(Pr,[["render",Vr]]),Yt={data(){return{isLoading:!1}},methods:{setLoading(e,{updateRoot:t=!1,updateView:o=!1}={}){!this.isLoading^!e&&(this.isLoading=!!e,t&&this.rootComponent.registerLoading(e),o&&this.viewComponent.setLoading(this.isLoading))}}},Jt={mixins:[ke,Yt],provide(){return{$resourceComponent:()=>this,$verbs:()=>this.verbs,$isPopulated:()=>this.hasData}},data(){return{loadedData:null,abortController:null}},computed:{resourceComponent(){return this},resource(){return this.getResource()},providesData(){return!!this.resource},linksToView(){return!1},isTransient(){const e=this.formComponent;return!this.providesData&&!this.linksToView||e&&(e.isTransient||e.isCreating)},transientNote(){return this.isTransient&&"<b>Note</b>: the parent still needs to be saved in order to persist this change."},shouldLoad(){return!this.isTransient&&!this.isLoading},hasData(){return!!this.loadedData},verbs(){return this.getVerbs()},paginationRange(){const{paginate:e}=this.sourceSchema;if(this.isListSource&&e){const{page:t=0}=this.query||{},o=t*e;return[o,o+e-1]}return null},queryParams(){const e=this.paginationRange,{page:t,...o}=this.query||{};return{...o,...e&&{range:e.join(",")}}}},created(){(this.providesData||this.isCreating)&&this.setupData()},methods:{getResource(){var e,t;return _((e=this.sourceSchema)==null?void 0:e.resource,{type:"collection",parent:((t=this.parentFormComponent)==null?void 0:t.resource)??null})},getVerbs(){const e=this.$verbs();return this.isTransient?{...e,create:"add",created:"added",save:"apply",saved:"applied",delete:"remove",deleted:"removed"}:e},clearData(){this.loadedData=null},setData(e){this.loadedData=e},setupData(){this.ensureData()},ensureData(){this.shouldLoad&&(this.hasData?this.reloadData():this.loadData(!0))},reloadData(){this.loadData(!1)},loadData(e){this.isTransient||(e&&this.clearData(),this.requestData())},createData(e,t){return Ct(e,t?{type:t}:{},this)},requestData(){const e=this.queryParams;this.handleRequest({method:"get",query:e},(t,o)=>{var s;if(t){if(o){const{data:a}=o;if((a==null?void 0:a.type)==="FilterValidation"&&((s=this.onFilterErrors)!=null&&s.call(this,a.errors)))return!0;if(this.isUnauthorizedError(o))return!0}}else this.setData(o.data),this.emitSchemaEvent("load")})},isValidationError(e){return(e==null?void 0:e.status)===400},isUnauthorizedError(e){return(e==null?void 0:e.status)===401},async handleRequest({method:e,resource:t=this.resource,query:o,data:s},a){var h;const i={updateRoot:!0,updateView:this.isInView};(h=this.abortController)==null||h.abort();const r=new AbortController;this.abortController=r;const{signal:l}=r,d={method:e,resource:t,query:o,data:s,signal:l};this.setLoading(!0,i);try{const u=await this.sendRequest(d);a(null,u)}catch(u){if(u.name!=="AbortError"){const{response:p}=u;if(!a(u,p)){const m=p==null?void 0:p.data,g=c.isString(m==null?void 0:m.type)?c.labelize(m.type):"Error",f=(m==null?void 0:m.message)??u;this.notify({type:"error",title:g,text:f})}}}this.abortController===r&&(this.abortController=null,this.setLoading(!1,i))},getPayloadData(e,t){return["post","put","patch"].includes(t)&&(e.getSchemaValue(["resource","data"])||e.processedItem)},async submit(e){const t=_(e.schema.resource,{parent:this.resource});if(t){const{method:o}=t,s=this.getPayloadData(e,o);return this.submitResource(e,t,o,s)}return!1},async submitResource(e,t,o,s,{setData:a=!1,onSuccess:i,onError:r,notifySuccess:l=()=>this.notify({type:"success",title:"Request Successful",text:"Request was successfully sent."}),notifyError:d=h=>this.notify({type:"error",title:"Request Error",text:[`Unable to send request${h?":":""}`,(h==null?void 0:h.message)||h]})}={}){return new Promise(h=>{this.handleRequest({method:o,resource:t,data:s},async(u,p)=>{const m=p==null?void 0:p.data;if(u){const g=this.isValidationError(p)&&m.errors;if(g)await this.showValidationErrors(g,!0);else{const f=c.isObject(m)?m:u;r==null||r(f),await this.emitButtonEvent(e,"error",{notify:d,error:f})}h(!1)}else a&&m&&this.setData(m),i==null||i(),await this.emitButtonEvent(e,"success",{notify:l}),h(!0)})})},async emitButtonEvent(e,t,{notify:o,error:s}){const a=new w(e,{nested:!1,data:this.data,itemLabel:this.itemLabel,error:s}),i=await e.emitEvent(t,{context:a});return o&&i===void 0&&!a.wasNotified&&o(s),i}}};function Nr(e){return new URL(`file:${e}`).pathname}const Or=["data-resource"],Tr={type:"submit",disabled:""};function Fr(e,t,o,s,a,i){const r=n.resolveComponent("RouterView"),l=n.resolveComponent("DitoButtons"),d=n.resolveComponent("DitoSchema");return n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["dito-form dito-scroll-parent",{"dito-form-nested":e.isNestedRoute}]),"data-resource":e.sourceSchema.path},[e.isLastUnnestedRoute||e.isNestedRoute?n.createCommentVNode("",!0):n.withDirectives((n.openBlock(),n.createBlock(r,{key:0},null,512)),[[n.vShow,!e.isActive]]),n.withDirectives((n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.isNestedRoute?"div":"form"),{class:n.normalizeClass({"dito-scroll-parent":e.isRootForm}),onSubmit:t[0]||(t[0]=n.withModifiers(()=>{},["prevent"]))},{default:n.withCtx(()=>[n.withDirectives(n.createElementVNode("button",Tr,null,512),[[n.vShow,!1]]),n.createVNode(d,{schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,padding:e.isNestedRoute?"nested":"root",disabled:e.isLoading,scrollable:e.isRootForm,generateLabels:""},{buttons:n.withCtx(()=>[n.createVNode(l,{class:n.normalizeClass(["dito-buttons-round dito-buttons-large dito-buttons-main",{"dito-buttons-sticky":e.isRootForm}]),buttons:e.buttonSchemas,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,disabled:e.isLoading},null,8,["class","buttons","dataPath","data","meta","store","disabled"])]),_:1},8,["schema","dataPath","data","meta","store","padding","disabled","scrollable"])]),_:1},40,["class"])),[[n.vShow,e.isActive]])],10,Or)}const Lr=C.component("DitoForm",{mixins:[At,Jt],data(){return{createdData:null,clonedData:void 0,sourceKey:null,isForm:!0}},computed:{verbs(){const e=this.getVerbs(),{isCreating:t,providesData:o}=this;return{...e,submit:t?e.create:e.save,submitted:t?e.created:e.saved,cancel:o?e.cancel:e.close,cancelled:o?e.cancelled:e.closed}},schema(){return this.getItemFormSchema(this.sourceSchema,this.data||{type:this.type},this.context)||{}},buttonSchemas(){return ee(c.assignDeeply({cancel:{type:"button",events:{click:()=>this.cancel()}},submit:!this.isMutating&&{type:"submit",closeForm:!0,events:{click:({component:e})=>e.submit()}}},this.schema.buttons))},isRootForm(){return this.dataPath===""&&!this.isNestedRoute},isActive(){return this.isLastRoute||this.isLastUnnestedRoute},isTransient(){return!this.providesData},isCreating(){return this.param==="create"},isDirty(){var e;return!this.isMutating&&!!((e=this.mainSchemaComponent)!=null&&e.isDirty)},isMutating(){return!!this.sourceSchema.mutate},selectedTab(){var e;return((e=this.mainSchemaComponent)==null?void 0:e.selectedTab)||null},type(){return this.$route.query.type},itemId(){return this.isCreating?null:this.param??null},method(){return this.isCreating?"post":"patch"},resource(){const e=this.getResource();return Re(this.itemId,e)||e},breadcrumbPrefix(){return c.capitalize(this.isCreating?this.verbs.create:this.verbs.edit)},data(){return this.createdData||this.loadedData||this.inheritedData||null},dataPath(){return this.getDataPathFrom(this.dataComponent)},sourceData(){let e=this.routeRecord?this.parentRouteComponent.data:null;if(e){const t=c.parseDataPath(this.getDataPathFrom(this.parentRouteComponent)),o=this.routeRecord.path.split("/"),s=o.slice(o.length-t.length);this.sourceKey=null;const a=t[t.length-1];te(this.sourceSchema)&&a==="create"&&t.length--;for(let i=0,r=t.length;i<r&&e;i++){const l=t[i],d=/^:id/.test(s[i])?l==="create"?null:this.findItemIdIndex(this.sourceSchema,e,l):l;i===r-1?this.sourceKey=d:e=e[d]}}return e},inheritedData(){if(this.isTransient&&this.clonedData===void 0&&this.sourceData&&this.sourceKey!==null){let e=this.sourceData[this.sourceKey];return this.isMutating||(this.clonedData=e=c.clone(e)),e===null&&!this.isCreating&&te(this.sourceSchema)&&this.$router.push({path:`${this.path}/create`}),e}return this.clonedData},hasData(){return!!this.data},itemLabel(){return this.getItemLabel(this.sourceSchema,this.data,{extended:!0})}},watch:{$route:{flush:"post",handler(e,t){var s;const o=(s=this.meta)==null?void 0:s.param;o&&this.providesData&&t.matched[0].path===e.matched[0].path&&t.params[o]!=="create"&&e.params[o]!==t.params[o]&&this.loadData(!0)}},sourceData:"clearClonedData",create:"setupData"},methods:{emitSchemaEvent(e,t){return this.mainSchemaComponent.emitEvent(e,t)},getDataPathFrom(e){return this.api.denormalizePath(this.path.slice((e.isView?0:e.path.length)+1))},setupData(){this.isCreating?this.createdData||(this.createdData=this.createData(this.schema,this.type)):this.ensureData()},setSourceData(e){if(this.sourceData&&this.sourceKey!==null){const{mainSchemaComponent:t}=this;return this.sourceData[this.sourceKey]=t.filterData(e),t.onChange(),!0}return!1},addSourceData(e){var t;return te(this.sourceSchema)?this.setSourceData(e):!!((t=this.sourceData)!=null&&t.push(e))},clearData(){this.setData(null)},setData(e){this.isTransient?this.setSourceData(e):(this.createdData=null,this.loadedData=e)},clearClonedData(e,t){e!==t&&(this.clonedData=void 0)},async cancel(){return this.close()},async close(){return this.navigate(this.parentRouteComponent.path)},getSubmitVerb(e=!0){return this.isCreating?e?"create":"created":e?"submit":"submitted"},async submit(e,{validate:t=!0,closeForm:o=!1}={}){if(t&&!this.validateAll())return!1;const s=h=>this.verbs[this.getSubmitVerb(h)],a=_(e.schema.resource,{parent:this.resource}),i=a||this.resource,r=(i==null?void 0:i.method)||this.method,l=this.getPayloadData(e,r);let d;if(!a&&this.isTransient?d=await this.submitTransient(e,i,r,l,{onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:h=>this.emitSchemaEvent("error",{context:{error:h}}),notifySuccess:()=>{const h=s(!1);this.notify({type:"info",title:this.isCreating?`Item ${c.capitalize(h)}`:`Change ${c.capitalize(h)}`,text:[this.isCreating?`${this.itemLabel} was ${h}.`:`Changes to ${this.itemLabel} were ${h}.`,this.transientNote]})},notifyError:()=>{const h=s(!0);this.notify({type:"error",title:"Request Error",text:`Unable to ${h} ${this.itemLabel}.`})}}):d=await this.submitResource(e,i,r,l,{setData:!0,onSuccess:()=>this.emitSchemaEvent(this.getSubmitVerb()),onError:h=>this.emitSchemaEvent("error",{context:{error:h}}),notifySuccess:()=>{const h=s(!1);this.notify({type:"success",title:`Successfully ${c.capitalize(h)}`,text:`${this.itemLabel} was ${h}.`})},notifyError:h=>{const u=s(!0);this.notify({type:"error",title:"Request Error",text:[`Unable to ${u} ${this.itemLabel}${h?":":""}`,(h==null?void 0:h.message)||h]})}}),d){if(this.resetValidation(),o||e.closeForm)this.close();else if(this.isCreating){const h=this.getItemId(this.schema,this.data);this.$router.replace({path:Nr(`${this.path}/../${h}`),hash:this.$route.hash})}}return d},async submitTransient(e,t,o,s,{onSuccess:a,onError:i,notifySuccess:r,notifyError:l}){const d=this.isCreating?this.addSourceData(s):this.setSourceData(s);if(d)a==null||a(),await this.emitButtonEvent(e,"success",{notify:r});else{const h="Could not submit transient item";i==null||i(h),await this.emitButtonEvent(e,"error",{notify:l,error:h})}return d}}}),Gt=y(Lr,[["render",Fr]]),vh="",_r=C.component("DitoFormNested",{extends:Gt}),jr={key:0,class:"dito-errors"};function Mr(e,t,o,s,a,i){return e.errors?(n.openBlock(),n.createElementBlock("div",jr,[n.createElementVNode("ul",null,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.errors,r=>(n.openBlock(),n.createElementBlock("li",null,n.toDisplayString(r),1))),256))])])):n.createCommentVNode("",!0)}const xh="",Ir=C.component("DitoErrors",{props:{errors:{type:Array,default:null}},data(){return{tip:null}},watch:{errors(){this.$nextTick(this.updateErrors)}},unmounted(){var e;(e=this.tip)==null||e.destroy()},methods:{updateErrors(){let{tip:e}=this;e==null||e.hide(),this.errors&&(e=this.tip??(this.tip=n.markRaw(Qe(this.$el.closest(".dito-container")))),e.setProps({content:this.errors.join(`
|
|
6
6
|
`),theme:"error",trigger:"manual",appendTo:"parent",placement:"bottom-start",animation:"shift-away-subtle",popperOptions:{modifiers:[{name:"flip",enabled:!1}]},interactive:!0,hideOnClick:!1,offset:[3,3],zIndex:""}),e.popper.addEventListener("mousedown",()=>e.hide()),e.show())}}}),Rr=y(Ir,[["render",Mr]]),zr={class:"dito-scopes"},qr=["title","onClick"];function Ur(e,t,o,s,a,i){const r=n.resolveComponent("RouterLink");return n.openBlock(),n.createElementBlock("div",zr,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.scopes,(l,d)=>(n.openBlock(),n.createBlock(r,{key:d,to:e.getScopeLink(l),custom:""},{default:n.withCtx(({navigate:h})=>[n.createElementVNode("button",{class:n.normalizeClass(["dito-button",{"dito-selected":l.name===e.query.scope}]),type:"button",title:l.hint||e.getLabel(l),onClick:h},n.toDisplayString(e.getLabel(l)),11,qr)]),_:2},1032,["to"]))),128))])}const eu="",Ar=C.component("DitoScopes",{props:{query:{type:Object,required:!0},scopes:{type:Object,required:!0}},methods:{getScopeLink(e){const t={...this.query,scope:e.name};return t.page&&(t.page=0),this.getQueryLink(t)}}}),Hr=y(Ar,[["render",Ur]]);function Wr(e,t,o,s,a,i){const r=n.resolveComponent("Pagination");return n.openBlock(),n.createBlock(r,{page:e.page,"onUpdate:page":t[0]||(t[0]=l=>e.page=l),pageSize:e.limit,total:e.total},null,8,["page","pageSize","total"])}const Kr=C.component("DitoPagination",{components:{Pagination:Cs},props:{query:{type:Object,required:!0},limit:{type:Number,required:!0},total:{type:Number,required:!0}},computed:{page:{get(){return(+this.query.page||0)+1},set(e){this.page!==e&&this.$router.push(this.getQueryLink({...this.query,page:e-1}))}}}}),Yr=y(Kr,[["render",Wr]]),Ke={data(){return{isDragging:!1}},methods:{getDraggableOptions(e=!1){const t="dito-draggable";return{animation:150,handle:".dito-button-drag",dragClass:`${t}__drag`,chosenClass:`${t}__chosen`,ghostClass:`${t}__ghost`,fallbackClass:`${t}__fallback`,forceFallback:e,onStart:this.onStartDrag,onEnd:this.onEndDrag}},onStartDrag(){this.isDragging=!0},onEndDrag({oldIndex:e,newIndex:t}){this.isDragging=!1,e!==t&&this.onChange()},updateOrder(e,t,o){const{orderKey:s}=e;if(s){const a=(o==null?void 0:o[0])||0;for(let i=0;i<t.length;i++)t[i][s]=i+a}return t}}},Jr=["id"],Gr={key:0,class:"dito-tree-header"},Qr=["innerHTML"],Xr={key:1,class:"dito-tree-info"},Zr={key:1,class:"dito-tree-leaf"},vr=["innerHTML"],xr={key:2,class:"dito-buttons dito-buttons-small"},ei={key:1,class:"dito-properties"};function ti(e,t,o,s,a,i){const r=n.resolveComponent("DitoLabel"),l=n.resolveComponent("DitoTableCell"),d=n.resolveComponent("DitoTreeItem",!0),h=n.resolveComponent("DitoDraggable");return n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["dito-tree-item",{"dito-dragging":e.isDragging,"dito-active":e.active}]),id:e.dataPath,style:n.normalizeStyle(e.level>0&&{"--level":e.level})},[e.label?(n.openBlock(),n.createElementBlock("div",Gr,[e.numEntries?(n.openBlock(),n.createElementBlock("div",{key:0,class:"dito-tree-branch",onClick:t[0]||(t[0]=n.withModifiers(u=>e.opened=!e.opened,["stop"]))},[e.numEntries?(n.openBlock(),n.createElementBlock("div",{key:0,class:n.normalizeClass(["dito-chevron",{"dito-open":e.opened}])},null,2)):n.createCommentVNode("",!0),n.createElementVNode("div",{class:"dito-tree-label",innerHTML:e.label},null,8,Qr),e.details?(n.openBlock(),n.createElementBlock("div",Xr,n.toDisplayString(e.details),1)):n.createCommentVNode("",!0)])):(n.openBlock(),n.createElementBlock("div",Zr,[n.createElementVNode("div",{class:"dito-tree-label",innerHTML:e.label},null,8,vr)])),e.hasEditButtons?(n.openBlock(),n.createElementBlock("div",xr,[e.draggable?(n.openBlock(),n.createElementBlock("a",n.mergeProps({key:0,class:"dito-button"},e.getButtonAttributes(e.verbs.drag)),null,16)):n.createCommentVNode("",!0),e.editable?(n.openBlock(),n.createElementBlock("button",n.mergeProps({key:1,class:"dito-button",type:"button"},e.getButtonAttributes(e.verbs.edit),{onClick:t[1]||(t[1]=(...u)=>e.onEdit&&e.onEdit(...u))}),null,16)):n.createCommentVNode("",!0),e.deletable?(n.openBlock(),n.createElementBlock("button",n.mergeProps({key:2,class:"dito-button",type:"button"},e.getButtonAttributes(e.verbs.delete),{onClick:t[2]||(t[2]=(...u)=>e.onDelete&&e.onDelete(...u))}),null,16)):n.createCommentVNode("",!0)])):n.createCommentVNode("",!0)])):n.createCommentVNode("",!0),e.properties?n.withDirectives((n.openBlock(),n.createElementBlock("table",ei,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.properties,u=>(n.openBlock(),n.createElementBlock("tr",null,[n.createElementVNode("td",null,[u.label!==!1?(n.openBlock(),n.createBlock(r,{key:0,dataPath:e.getPropertyDataPath(u),label:e.getLabel(u)},null,8,["dataPath","label"])):n.createCommentVNode("",!0)]),n.createVNode(l,{cell:u,schema:u,dataPath:e.getPropertyDataPath(u),data:e.data,meta:e.nestedMeta,store:e.store,disabled:e.disabled},null,8,["cell","schema","dataPath","data","meta","store","disabled"])]))),256))],512)),[[n.vShow,e.opened]]):n.createCommentVNode("",!0),e.childrenSchema?n.withDirectives((n.openBlock(),n.createBlock(h,{key:2,modelValue:e.updateOrder(e.childrenSchema,e.childrenList),options:e.getDraggableOptions(!0),draggable:e.childrenDraggable,"onUpdate:modelValue":t[3]||(t[3]=u=>e.childrenList=u)},{default:n.withCtx(()=>[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.childrenItems,(u,p)=>(n.openBlock(),n.createBlock(d,{key:e.getItemUid(e.childrenSchema,u.data),schema:e.childrenSchema,dataPath:e.getItemDataPath(e.childrenSchema,p),data:u.data,path:u.path,open:u.open,active:u.active,draggable:e.childrenDraggable,label:e.getItemLabel(e.childrenSchema,u.data,{index:p}),level:e.level+1},null,8,["schema","dataPath","data","path","open","active","draggable","label","level"]))),128))]),_:1},8,["modelValue","options","draggable"])),[[n.vShow,e.opened]]):n.createCommentVNode("",!0)],14,Jr)}const tu="",ni=C.component("DitoTreeItem",{mixins:[ke,Ke],inject:["container"],props:{schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:[Array,Object],default:null},path:{type:String,default:""},open:{type:Boolean,default:!1},active:{type:Boolean,default:!1},draggable:{type:Boolean,default:!1},label:{type:String,default:null},level:{type:Number,default:0}},data(){return{opened:this.open||this.schema.open}},computed:{meta(){return this.container.meta},store(){return this.container.store},disabled(){return this.container.disabled},nestedMeta(){return{...this.meta,schema:this.schema}},properties(){return Y(this.schema.properties)},childrenSchema(){return this.schema.children},childrenList(){var t;const e=(t=this.childrenSchema)==null?void 0:t.name;return e&&this.data[e]},childrenDraggable(){var e;return((e=this.childrenList)==null?void 0:e.length)>1&&this.getSchemaValue("draggable",{type:Boolean,default:!1,schema:this.childrenSchema})},numChildren(){var e;return((e=this.childrenList)==null?void 0:e.length)||0},numProperties(){var e;return((e=this.properties)==null?void 0:e.length)||0},numEntries(){return this.numProperties+this.numChildren},childrenItems(){const{childrenSchema:e,childrenList:t}=this;if(e&&t){const{editPath:o}=this.container,s=!this.path&&e.open;return this.updateOrder(e,t.map((a,i)=>{const r=e.path&&`${this.path}/${e.path}/${i}`,l=s||o.startsWith(r)&&r.length<o.length;return{data:a,path:r,open:l,active:o===r}}))}return[]},details(){const{numChildren:e}=this;return e&&`${e} ${e===1?"item":"items"}`},hasEditButtons(){return this.draggable||this.editable||this.deletable},creatable:b("creatable",{type:Boolean,default:!1,get(e){return e&&A(this.schema)}}),editable:b("editable",{type:Boolean,default:!1,get(e){return e&&A(this.schema)}}),deletable:b("deletable",{type:Boolean,default:!1})},methods:{getPropertyDataPath(e){return T(this.dataPath,e.name)},onEdit(){this.$router.push({path:`${this.container.path}${this.path}`,query:this.$route.query})},onDelete(){},onChange(){this.container.onChange()}}}),oi=y(ni,[["render",ti]]),si={class:"dito-table-head"},ai=["onClick"],ri=n.createElementVNode("div",{class:"dito-order-arrows"},null,-1),ii={key:1},li={key:0},di=[n.createElementVNode("span",null,null,-1)];function ci(e,t,o,s,a,i){const r=n.resolveComponent("RouterLink");return n.openBlock(),n.createElementBlock("thead",si,[n.createElementVNode("tr",null,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.columns,l=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.shouldRenderSchema(l)?(n.openBlock(),n.createElementBlock("th",{key:0,class:n.normalizeClass(e.getColumnClass(l))},[l.sortable?(n.openBlock(),n.createBlock(r,{key:0,to:e.getSortLink(l),custom:""},{default:n.withCtx(({navigate:d})=>[n.createElementVNode("button",{class:n.normalizeClass(["dito-button",e.getSortClass(l)]),type:"button",onClick:d},[ri,n.createElementVNode("span",null,n.toDisplayString(e.getLabel(l)),1)],10,ai)]),_:2},1032,["to"])):(n.openBlock(),n.createElementBlock("span",ii,n.toDisplayString(e.getLabel(l)),1))],2)):n.createCommentVNode("",!0)],64))),256)),e.hasEditButtons?(n.openBlock(),n.createElementBlock("th",li,di)):n.createCommentVNode("",!0)])])}const ou="",hi=C.component("DitoTableHead",{props:{query:{type:Object,required:!0},columns:{type:Object,required:!0},hasEditButtons:{type:Boolean,required:!0}},computed:{sort(){const e=(this.query.order||"").split(/\s+/);return{name:e[0],order:e[1]}}},methods:{getColumnClass(e){return`dito-column-${c.hyphenate(e.name)}`},getSortClass(e){return this.sort.name===e.name?`dito-selected dito-order-${this.sort.order}`:null},getSortLink(e){const t=this.sort.name===e.name&&this.sort.order==="asc"?"desc":"asc";return this.getQueryLink({...this.query,order:`${e.name} ${t}`})}}}),ui=y(hi,[["render",ci]]),pi=["innerHTML"];function mi(e,t,o,s,a,i){return n.openBlock(),n.createElementBlock("td",{class:n.normalizeClass(e.cell.class),style:n.normalizeStyle(e.cell.style)},[e.cell.component?(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.cell.component),{key:0,schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,nested:e.nested,disabled:e.disabled},null,8,["schema","dataPath","data","meta","store","nested","disabled"])):(n.openBlock(),n.createElementBlock("span",{key:1,innerHTML:e.renderCell(e.data)},null,8,pi))],6)}const fi=C.component("DitoTableCell",{props:{cell:{type:Object,required:!0},schema:{type:Object,required:!0},dataPath:{type:String,required:!0},data:{type:Object,required:!0},meta:{type:Object,required:!0},store:{type:Object,required:!0},nested:{type:Boolean,default:!0},disabled:{type:Boolean,default:!1}},methods:{renderCell(e){const{name:t,render:o}=this.cell,s=e[t];return o?o.call(this,new w(this,{name:t,value:s,data:e,dataPath:T(this.dataPath,t)})):c.escapeHtml(s)}}}),gi=y(fi,[["render",mi]]),bi={class:"dito-upload-file"},yi={class:"dito-thumbnail__inner"},ki=["src"],Ci={key:1,class:"dito-thumbnail__type"};function $i(e,t,o,s,a,i){return n.openBlock(),n.createElementBlock("div",bi,[e.thumbnail?(n.openBlock(),n.createElementBlock("div",{key:0,class:n.normalizeClass(["dito-thumbnail",`dito-thumbnail--${e.thumbnail}`])},[n.createElementVNode("div",yi,[e.source?(n.openBlock(),n.createElementBlock("img",{key:0,src:e.source,crossorigin:"anonymous"},null,8,ki)):(n.openBlock(),n.createElementBlock("div",Ci,[n.createElementVNode("span",null,n.toDisplayString(e.type),1)]))])],2)):n.createCommentVNode("",!0),n.createElementVNode("span",null,n.toDisplayString(e.file.name),1)])}const su="",Di=C.component("DitoUploadFile",{props:{file:{type:Object,required:!0},thumbnail:{type:String,default:null},thumbnailUrl:{type:String,default:null}},data(){return{uploadUrl:null}},computed:{type(){return Bi[this.file.type]||this.file.name.split(".").pop().toUpperCase()},source(){return this.uploadUrl||this.thumbnailUrl}},watch:{"file.upload.file":{immediate:!0,handler(e){if(this.thumbnail&&(e!=null&&e.type.startsWith("image/"))){const t=new FileReader;t.onload=()=>{this.uploadUrl=t.result},t.readAsDataURL(e)}else this.uploadUrl=null}}}}),Bi={"text/plain":"TXT","text/html":"HTML","text/css":"CSS","text/javascript":"JS","image/jpeg":"JPG","image/png":"PNG","image/gif":"GIF","image/svg+xml":"SVG","movie/mp4":"MP4","audio/mpeg":"MP3","application/json":"JSON","application/xml":"XML","application/pdf":"PDF","application/zip":"ZIP"},wi=y(Di,[["render",$i]]);var Si=Object.defineProperty,Ce=Object.getOwnPropertySymbols,Qt=Object.prototype.hasOwnProperty,Xt=Object.prototype.propertyIsEnumerable,Zt=(e,t,o)=>t in e?Si(e,t,{enumerable:!0,configurable:!0,writable:!0,value:o}):e[t]=o,vt=(e,t)=>{for(var o in t||(t={}))Qt.call(t,o)&&Zt(e,o,t[o]);if(Ce)for(var o of Ce(t))Xt.call(t,o)&&Zt(e,o,t[o]);return e},Vi=(e,t)=>{var o={};for(var s in e)Qt.call(e,s)&&t.indexOf(s)<0&&(o[s]=e[s]);if(e!=null&&Ce)for(var s of Ce(e))t.indexOf(s)<0&&Xt.call(e,s)&&(o[s]=e[s]);return o};function Pi(e,t,o={}){let s;const a=o,{document:i=q.defaultDocument}=a,r=Vi(a,["document"]),l={onUpdate:p=>{Ei(t,p.oldIndex,p.newIndex)}},d=()=>{const p=typeof e=="string"?i==null?void 0:i.querySelector(e):q.unrefElement(e);p&&(s=new hn(p,vt(vt({},l),r)))},h=()=>s==null?void 0:s.destroy(),u=(p,m)=>{if(m!==void 0)s==null||s.option(p,m);else return s==null?void 0:s.option(p)};return q.tryOnMounted(d),q.tryOnScopeDispose(h),{stop:h,start:d,option:u}}function Ei(e,t,o){const s=q.toValue(e);if(o>=0&&o<s.length){const a=s.splice(t,1)[0];F.nextTick(()=>s.splice(o,0,a))}}const Ni=F.defineComponent({name:"UseSortable",model:{prop:"modelValue",event:"update:modelValue"},props:{modelValue:{type:Array,required:!0},tag:{type:String,default:"div"},options:{type:Object,required:!0}},setup(e,{slots:t}){const o=q.useVModel(e,"modelValue"),s=F.ref(),a=F.reactive(Pi(s,o,e.options));return()=>{if(t.default)return F.h(e.tag,{ref:s},t.default(a))}}});function Oi(e,t,o,s,a,i){const r=n.resolveComponent("UseSortable");return e.draggable?(n.openBlock(),n.createBlock(r,{key:0,class:n.normalizeClass(["dito-draggable",{"dito-draggable--dragging":e.isDragging}]),tag:e.tag,modelValue:e.modelValue,options:{...e.options,onStart:e.onStart,onEnd:e.onEnd},"onUpdate:modelValue":t[0]||(t[0]=l=>e.$emit("update:modelValue",l))},{default:n.withCtx(()=>[n.renderSlot(e.$slots,"default")]),_:3},8,["class","tag","modelValue","options"])):(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.tag),{key:1},{default:n.withCtx(()=>[n.renderSlot(e.$slots,"default")]),_:3}))}const au="",Ti=C.component("DitoDraggable",{mixins:[H],components:{UseSortable:Ni},emits:["update:modelValue"],props:{modelValue:{type:Array,required:!0},tag:{type:String,default:"div"},options:{type:Object,required:!0},draggable:{type:Boolean,default:!0}},data(){return{mouseEvents:null,isDragging:!1}},methods:{onStart(e){var t,o,s;(o=(t=this.options).onStart)==null||o.call(t,e),this.isDragging=!0,(s=this.mouseEvents)==null||s.remove()},onEnd(e){var t,o;(o=(t=this.options).onEnd)==null||o.call(t,e),this.mouseEvents=this.domOn(document,{mousedown:this.onMouse,mousemove:this.onMouse,mouseleave:this.onMouse})},onMouse(){var e;this.isDragging=!1,(e=this.mouseEvents)==null||e.remove(),this.mouseEvents=null}}}),Fi=y(Ti,[["render",Oi]]),Li=[n.createElementVNode("div",{class:"dito-spinner__pulse dito-spinner__pulse1"},null,-1),n.createElementVNode("div",{class:"dito-spinner__pulse dito-spinner__pulse2"},null,-1),n.createElementVNode("div",{class:"dito-spinner__pulse dito-spinner__pulse3"},null,-1)];function _i(e,t,o,s,a,i){return n.withDirectives((n.openBlock(),n.createElementBlock("div",{class:"dito-spinner",style:n.normalizeStyle({"--color":e.color,"--size":e.size,"--margin":e.margin})},Li,4)),[[n.vShow,e.loading]])}const du="",ji=C.component("DitoSpinner",{props:{loading:{type:Boolean,default:!0},color:{type:String,default:null},size:{type:String,default:null},margin:{type:String,default:null}}}),Mi=y(ji,[["render",_i]]);function xt({vnode:e}){return e}xt.props={vnode:{type:Object,required:!0}};const Ii=C.component("DitoVnode",xt),Ri=Object.freeze(Object.defineProperty({__proto__:null,DitoAccount:Ba,DitoButtons:hr,DitoClipboard:Er,DitoContainer:Ga,DitoCreateButton:Dr,DitoDialog:Wt,DitoDraggable:Fi,DitoEditButtons:fr,DitoElement:Va,DitoErrors:Rr,DitoForm:Gt,DitoFormNested:_r,DitoHeader:oa,DitoLabel:Fa,DitoMenu:Js,DitoNavigation:ia,DitoNotifications:pa,DitoPagination:Yr,DitoPane:Wa,DitoPanel:nr,DitoPanels:rr,DitoRoot:We,DitoSchema:Ma,DitoSchemaInlined:za,DitoScopes:Hr,DitoSidebar:ya,DitoSpinner:Mi,DitoTableCell:gi,DitoTableHead:ui,DitoTabs:xa,DitoTrail:vs,DitoTreeItem:oi,DitoUploadFile:wi,DitoVNode:Ii,DitoView:Ht},Symbol.toStringTag,{value:"Module"})),B={extends:C,mixins:[Z],nativeField:!1,textField:!1,defaultValue:null,defaultNested:!0,defaultVisible:!0,generateLabel:!0,excludeValue:!1,ignoreMissingValue:null,omitSpacing:!1,component:C.component,get:le,register(e,t={}){e=c.asArray(e);const o=this.component(`DitoType${c.camelize(e[0],!0)}`,t);for(const s of e)eo(s,o);return o}},zi=["id","type","title"],qi={key:0,class:"dito-button__text"},Ui=["data-info"];function Ai(e,t,o,s,a,i){return n.openBlock(),n.createElementBlock("button",n.mergeProps({class:["dito-button",e.buttonClass],id:e.dataPath,ref:"element",type:e.type,title:e.title},e.attributes),[e.text?(n.openBlock(),n.createElementBlock("div",qi,n.toDisplayString(e.text),1)):n.createCommentVNode("",!0),!e.label&&e.info?(n.openBlock(),n.createElementBlock("div",{key:1,class:"dito-info","data-info":e.info},null,8,Ui)):n.createCommentVNode("",!0)],16,zi)}const cu="",Hi=B.register(["button","submit"],{defaultValue:()=>{},excludeValue:!0,defaultWidth:"auto",generateLabel:!1,computed:{verb(){return this.verbs[this.name]},buttonClass(){return this.verb?`dito-button-${this.verb}`:null},text:b("text",{type:String}),title(){return this.text||c.labelize(this.verb)},info:b("info",{type:String,default:null}),closeForm:b("closeForm",{type:Boolean,default:!1})},methods:{getEvents(){const{onFocus:e,onBlur:t,onClick:o}=this;return{onFocus:e,onBlur:t,onClick:o}},async submit(e){var t;return(t=this.resourceComponent)==null?void 0:t.submit(this,e)},async onClick(){await this.emitEvent("click",{parent:this.schemaComponent})===void 0&&Nt(this.schema)&&await this.submit()}}}),Wi=y(Hi,[["render",Ai]]),Ki={class:"dito-checkbox"},Yi=["id"];function Ji(e,t,o,s,a,i){return n.openBlock(),n.createElementBlock("div",Ki,[n.withDirectives(n.createElementVNode("input",n.mergeProps({id:e.dataPath,ref:"element","onUpdate:modelValue":t[0]||(t[0]=r=>e.value=r),type:"checkbox"},e.attributes),null,16,Yi),[[n.vModelCheckbox,e.value]])])}const hu="",Gi=B.register("checkbox",{nativeField:!0}),Qi=y(Gi,[["render",Ji]]),en={mixins:[Yt],data(){return{isLoading:!1,asyncDataEntries:{}}},methods:{handleDataSchema(e,t,o){var r,l;c.isObject(e)||(e={data:e});let{data:s=void 0,dataPath:a=null}=e;const i=(r=this.asyncDataEntries)[t]||(r[t]=n.reactive({dependencyFunction:null,resolvedData:void 0,resolving:!1,resolved:!1}));if((l=i.dependencyFunction)==null||l.call(i,this.context),i.resolved){const{resolvedData:d}=i;return i.resolvedData=void 0,i.resolved=!1,d}if(i.resolving)s=null;else if(s){if(c.isFunction(s)){const d=s(this.context);c.isFunction(d)?(i.dependencyFunction=s,s=d(this.context)):s=d}c.isPromise(s)&&(i.resolving=!0,this.resolveData(s,o).then(d=>{i.resolvedData=d,i.resolving=!1,i.resolved=!0}).catch(d=>{console.error(d),i.resolving=!1}),s=null)}else a&&(s=c.getValueAtDataPath(this.rootData,c.normalizeDataPath(`${this.dataPath}/${a}`)));return s},async resolveData(e,t={}){const o=setTimeout(()=>this.setLoading(!0,t),0);let s=null;try{s=await(c.isFunction(e)?e():e)}catch(a){this.addError(a.message||a)}return clearTimeout(o),this.setLoading(!1,t),s}}},$e={mixins:[en],data(){return{hasOptions:!1}},computed:{selectedValue:{get(){const e=o=>this.relate?this.hasOption(o)?this.getValueForOption(o):null:o,t=c.isArray(this.value)?this.value.map(e).filter(o=>o!==null):e(this.value);return this.relate&&this.hasOptions&&(t===null&&this.value!==null||Hn(this.value))&&(this.selectedValue=t),t},set(e){const t=o=>this.relate?this.getOptionForValue(o):o;this.value=c.isArray(e)?e.map(t):t(e)}},selectedOption(){return this.getOptionForValue(this.selectedValue)},options(){const e=this.handleDataSchema(this.schema.options,"options")??[];if(!c.isArray(e))throw new Error(`Invalid options data, should be array: ${e}`);return this.hasOptions=e.length>0,this.processOptions(e)},activeOptions(){return this.options},relate:b("relate",{type:Boolean,default:!1,callback:!1}),groupBy:b("groupBy",{type:String,default:null}),optionLabel:b("options.label",{type:[String,Function],default:null,get(e){return e||this.getOptionKey("label")||null}}),optionValue:b("options.value",{type:[String,Function],default:null,get(e){return e||this.relate&&"id"||this.getOptionKey("value")||null}}),searchFilter:b("search",{type:[Object,Function],default:null,get(e){if(e){const{filter:t,debounce:o}=c.isFunction(e)?{filter:e}:e;return o?c.debounceAsync(t,o):t}}}),editable:b("editable",{type:Boolean,default:!1,get(e){return e&&mo(this.schema,this.context)}}),editPath(){return this.editable&&this.selectedValue?pt(this.schema,this.selectedValue,this.context):null},groupByLabel(){return this.groupBy?"label":null},groupByOptions(){return this.groupBy?"options":null}},methods:{getOptionKey(e){const[t]=this.activeOptions;return c.isObject(t)&&e in t?e:null},processOptions(e){if(e.length){if(this.relate)for(const t of e)"id"in t||An(t,"id");if(this.groupBy){const t={};e=e.reduce((o,s)=>{const a=s[this.groupBy];let i=t[a];return i||(i=t[a]={[this.groupByLabel]:a,[this.groupByOptions]:[]},o.push(i)),i.options.push(s),o},[])}}return e},hasOption(e){return!!this.getOptionForValue(this.getValueForOption(e))},getOptionForValue(e){const t=(o,s,a)=>{for(const i of o)if(a){const r=t(i.options,s,null);if(r)return r}else if(s===this.getValueForOption(i))return i};return this.optionValue?t(this.activeOptions,e,this.groupBy):e},getValueForOption(e){const{optionValue:t}=this;return c.isString(t)?e==null?void 0:e[t]:c.isFunction(t)?t(new w(this,{option:e})):e},getLabelForOption(e){const{optionLabel:t}=this;return c.isString(t)?e==null?void 0:e[t]:c.isFunction(t)?t(new w(this,{option:e})):c.labelize(`${e}`)}},processValue(e,t,o,s){var a;if(e.relate){const i=(a=e.options)==null?void 0:a.dataPath,r=i?c.normalizeDataPath(`${o}/${i}`):null;s.addRelation(o,r,e),r&&s.setSourceRelated(r);const l=d=>d&&{id:d.id};t=c.isArray(t)?t.map(l):l(t)}return t}},Xi=["id"],Zi={class:"dito-checkbox"},vi=["value"];function xi(e,t,o,s,a,i){return n.openBlock(),n.createElementBlock("ul",{class:n.normalizeClass(["dito-checkboxes",`dito-layout-${e.schema.layout||"vertical"}`]),id:e.dataPath},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.options,r=>(n.openBlock(),n.createElementBlock("li",null,[n.createElementVNode("label",null,[n.createElementVNode("div",Zi,[n.withDirectives(n.createElementVNode("input",n.mergeProps({ref_for:!0,ref:"element","onUpdate:modelValue":t[0]||(t[0]=l=>e.selectedOptions=l),type:"checkbox",value:e.getValueForOption(r)},e.attributes),null,16,vi),[[n.vModelCheckbox,e.selectedOptions]]),n.createElementVNode("span",null,n.toDisplayString(e.getLabelForOption(r)),1)])])]))),256))],10,Xi)}const uu="",el=B.register("checkboxes",{mixins:[$e],nativeField:!0,defaultValue:[],defaultWidth:"auto",computed:{selectedOptions:{get(){return(this.selectedValue||[]).filter(e=>e)},set(e){this.selectedValue=e||[]}}}}),tl=y(el,[["render",xi]]),nl=["id"];function ol(e,t,o,s,a,i){return n.openBlock(),n.createElementBlock("div",{class:"dito-code",id:e.dataPath,ref:"code",style:n.normalizeStyle(e.style)},null,12,nl)}const pu="",sl=B.register("code",{mixins:[H],computed:{lines(){return this.schema.lines||3},style(){return`height: calc(${this.lines}em * var(--line-height))`}},mounted(){const e=new un(this.$refs.code,{language:this.schema.language||"javascript",tabSize:this.schema.indentSize||2,lineNumbers:!1});let t=!1,o=!1,s=!1;const a=()=>{!this.focused&&t&&(t=!1,this.onChange())},i=()=>this.onFocus(),r=()=>{this.onBlur(),a()};this.domOn(this.$refs.code.querySelector("textarea"),{focus:i,blur:r});const l=h=>{h!==e.code&&(s=!0,e.updateCode(h))},d=h=>{h!==this.value&&(o=!0,this.value=h,t=!0,a())};e.onUpdate(h=>{s?s=!1:d(h)}),this.$watch("value",h=>{o?o=!1:l(h||"")}),l(this.value||"")},methods:{focusElement(){var e;(e=this.$el.querySelector("textarea"))==null||e.focus()},blurElement(){var e;(e=this.$el.querySelector("textarea"))==null||e.focus()}}}),al=y(sl,[["render",ol]]),rl=["id"],il={key:0,class:"dito-color-preview dito-inherit-focus"},ll=["disabled"];function dl(e,t,o,s,a,i){const r=n.resolveComponent("SketchPicker"),l=n.resolveComponent("Trigger");return n.openBlock(),n.createBlock(l,{class:"dito-color",show:e.showPopup,"onUpdate:show":t[3]||(t[3]=d=>e.showPopup=d),trigger:"focus"},{trigger:n.withCtx(()=>[n.createElementVNode("div",{class:n.normalizeClass(["dito-input",{"dito-focus":e.showPopup}])},[n.withDirectives(n.createElementVNode("input",n.mergeProps({id:e.dataPath,ref:"element","onUpdate:modelValue":t[0]||(t[0]=d=>e.hexValue=d),type:"input",size:"8"},e.attributes),null,16,rl),[[n.vModelText,e.hexValue]]),e.value?(n.openBlock(),n.createElementBlock("div",il,[n.createElementVNode("div",{style:n.normalizeStyle({background:`#${e.hexValue||"00000000"}`})},null,4)])):n.createCommentVNode("",!0),e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:1,class:"dito-button-clear dito-button-overlay",disabled:e.disabled,onClick:t[1]||(t[1]=n.withModifiers((...d)=>e.clear&&e.clear(...d),["stop"]))},null,8,ll)):n.createCommentVNode("",!0)],2)]),popup:n.withCtx(()=>[n.createVNode(r,{class:"dito-color-picker",modelValue:e.colorValue,"onUpdate:modelValue":t[2]||(t[2]=d=>e.colorValue=d),disableAlpha:!e.alpha,disableFields:!e.inputs,presetColors:e.presets},null,8,["modelValue","disableAlpha","disableFields","presetColors"])]),_:1},8,["show"])}const mu="",cl=B.register("color",{components:{Trigger:He,SketchPicker:pn.Sketch},data(){return{showPopup:!1,convertedHexValue:null}},computed:{colorValue:{get(){return this.value||{}},set(e){const t=this.colorFormat,o={hex:(e==null?void 0:e.a)<1?"hex8":"hex",rgb:"rgba"}[t]||t;o?this.value=e[o]:this.value=Xe(e).toString(t),this.onChange()}},hexValue:{get(){if(this.value==null)this.convertedHexValue=null;else if(!this.focused||this.$refs.element.hasAttribute("readonly")){const e=Xe(this.value);e.isValid()&&(this.convertedHexValue=e.toString(e.getAlpha()<1?"hex8":"hex6").slice(1).toUpperCase())}return this.convertedHexValue},set(e){this.convertedHexValue=e}},colorFormat:b("format",{type:String,default:"hex"}),alpha:b("alpha",{type:Boolean,default:!1}),inputs:b("inputs",{type:Boolean,default:!0}),presets:b("presets",{type:Array,default:["#ffffff","#c3c3c3","#7f7f7f","#000000","#880015","#ed1c24","#ff7f27","#fff200","#22b14c","#00a2e8","#3f48cc","#a349a4","#b97a57","#ffaec9","#ffc90e","#00000000"]})}}),hl=y(cl,[["render",dl]]);function ul(e,t,o,s,a,i){return n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.schema.component),n.normalizeProps(n.guardReactiveProps(e.$props)),null,16)}const pl=B.register("component",{defaultValue:()=>{},ignoreMissingValue:e=>!("default"in e),async processSchema(e,t){await he(t)}}),ml=y(pl,[["render",ul]]),fl=["id","name","value","disabled"];function gl(e,t,o,s,a,i){return n.openBlock(),n.createElementBlock("input",{class:"dito-text dito-input",id:e.dataPath,ref:"element",name:e.name,type:"text",value:e.value,disabled:e.disabled,readonly:!0},null,8,fl)}const bl=B.register(["computed","data","hidden"],{mixins:[en],defaultValue:()=>{},defaultVisible:!1,computed:{value:{get(){const{schema:e}=this;if(e.data||e.dataPath){const t=this.handleDataSchema(e,"schema");this.data[this.name]=t}return Z.computed.value.get.call(this)},set(e){Z.computed.value.set.call(this,e)}}}}),yl=y(bl,[["render",gl]]),kl={class:"dito-date"},Cl=["disabled"];function $l(e,t,o,s,a,i){return n.openBlock(),n.createElementBlock("div",kl,[(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.getComponent(e.type)),n.mergeProps({id:e.dataPath,ref:"element",modelValue:e.dateValue,"onUpdate:modelValue":t[2]||(t[2]=r=>e.dateValue=r),locale:e.locale,format:e.formats},e.attributes),{after:n.withCtx(()=>[e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button-clear dito-button-overlay",disabled:e.disabled,onClick:t[0]||(t[0]=n.withModifiers((...r)=>e.clear&&e.clear(...r),["stop"])),onMousedown:t[1]||(t[1]=n.withModifiers(()=>{},["stop"]))},null,40,Cl)):n.createCommentVNode("",!0)]),_:1},16,["id","modelValue","locale","format"]))])}const Dl=B.register(["date","datetime","time"],{components:{DatePicker:jt,TimePicker:Mt,DateTimePicker:ps},nativeField:!0,textField:!0,computed:{dateValue:{get(){const{value:e}=this;return e&&new Date(e)},set(e){this.value=e}},formats:b("formats",{type:Object,default:null,get(e){const{date:t,time:o}=c.assignDeeply({},this.api.formats,e);return{date:["date","datetime"].includes(this.type)?t:null,time:["time","datetime"].includes(this.type)?o:null}}})},methods:{getComponent(e){return{date:"date-picker",time:"time-picker",datetime:"date-time-picker"}[e]}},processValue(e,t){return c.isDate(t)?t.toISOString():t}}),Bl=y(Dl,[["render",$l]]);function tn(e){const t=e?c.isArray(e)?e:Object.entries(e):[];return new URLSearchParams(t.reduce((o,[s,a])=>{for(const i of c.asArray(a))o.push([s,i]);return o},[])).toString().replaceAll(/%(?:21|24|28|29|2C|2F|3A|3B|3D|3F|40)/g,decodeURIComponent)}function wl({path:e,query:t,hash:o}){history.replaceState(history.state,null,`${location.origin}${e??location.pathname}?${t?tn(t):location.search.slice(1)}${o??location.hash}`)}const Q={mixins:[ke,Jt,qt],defaultValue(e){return ne(e)?[]:null},provide(){return{$sourceComponent:()=>this}},data(){return{wrappedPrimitives:null,unwrappingPrimitives:!1}},computed:{sourceComponent(){return this},isObjectSource(){return te(this.type)},isListSource(){return ne(this.type)},hasData(){return!!this.value},isReady(){return this.hasData||!this.providesData},isInView(){return!!this.viewComponent},wrapPrimitives(){return this.schema.wrapPrimitives},listData:{get(){let e=this.value;this.isObjectSource?e=e!=null?[e]:[]:e=this.unwrapListData(e)||e,e||(e=[]);const{wrapPrimitives:t}=this;return t?(this.unwrappingPrimitives?this.unwrappingPrimitives=!1:this.wrappedPrimitives=e.map(o=>({[t]:o})),this.wrappedPrimitives):e},set(e){this.wrapPrimitives?this.wrappedPrimitives=e:this.value=this.isObjectSource?e&&e.length>0?e[0]:null:e}},objectData:{get(){return this.listData[0]||null},set(e){this.listData=e?[e]:[]}},sourceSchema(){return this.schema},path(){return this.routeComponent.getChildPath(this.schema.path)},defaultQuery(){const{defaultOrder:e}=this;return e?{order:e}:{}},query:Pe("query",{get(e){return{...this.defaultQuery,...e}},set(e){var s;const{scope:t=(s=this.defaultScope)==null?void 0:s.name,page:o=this.schema.page}=this.query;return e={...this.query,...t!=null&&{scope:t},...o!=null&&{page:o},...e},c.equals(e,this.$route.query)||wl({query:e}),e}}),total:Pe("total"),columns(){return Y(this.schema.columns)},scopes(){return Y(this.schema.scopes)},defaultScope(){let e=null;if(this.scopes)for(const t of Object.values(this.scopes)){if(t.defaultScope)return t;e||(e=t)}return e},defaultOrder(){if(this.columns)for(const e of Object.values(this.columns)){const{defaultSort:t}=e;if(t){const o=c.isString(t)?t:"asc";return`${e.name} ${o}`}}return null},nestedMeta(){return{...this.meta,schema:this.schema}},forms(){return Object.values(K(this.schema,this.context))},view(){return Le(this.schema,this.context)},linksToView(){return!!this.view},buttonSchemas(){return ee(this.schema.buttons)},isCompact(){return this.forms.every(ft)},isInlined(){return je(this.schema)},paginate:b("paginate",{type:Number}),render:b("render",{type:Function,default:null}),creatable:b("creatable",{type:Boolean,default:!1,get(e){return e&&A(this.schema)?this.isObjectSource?!this.value:!0:!1}}),editable:b("editable",{type:Boolean,default:!1,get(e){return e&&!this.isInlined}}),deletable:b("deletable",{type:Boolean,default:!1}),draggable:b("draggable",{type:Boolean,default:!1,get(e){return this.isListSource&&this.listData.length>1&&e}}),collapsible:b("collapsible",{type:Boolean,default:null,get(e){return this.isInlined&&!!(e??this.collapsed!==null)}}),collapsed:b("collapsed",{type:Boolean,default:null})},watch:{$route:{flush:"post",handler(e,t){this.providesData&&t.path===e.path&&t.hash===e.hash&&(this.query=e.query,this.loadData(!1))}},wrappedPrimitives:{deep:!0,handler(e,t){const{wrapPrimitives:o}=this;o&&t!==null&&(this.unwrappingPrimitives=!0,this.value=e.map(s=>s[o]))}}},methods:{setupData(){this.query=this.$route.query,this.ensureData()},clearData(){this.total=0,this.value=null},setData(e){!e||this.isListSource&&c.isArray(e)||this.isObjectSource&&c.isObject(e)?this.value=e:this.unwrapListData(e)||c.isObject(e)&&this.isInView&&this.viewComponent.setData(e)},unwrapListData(e){if(this.isListSource&&c.isObject(e)&&c.isNumber(e.total)&&c.isArray(e.results))return this.total=e.total,this.value=e.results,this.value},createItem(e,t){const o=this.createData(e,t);return this.isObjectSource?this.objectData=o:this.listData.push(o),this.collapsible&&this.$nextTick(()=>this.openSchemaComponent(-1)),this.onChange(),o},removeItem(e,t){let o=!1;if(this.isObjectSource)this.objectData=null,o=!0;else{const{listData:s}=this;t>=0&&(s.splice(t,1),o=!0)}o&&(this.removeItemStore(this.schema,e,t),this.onChange())},deleteItem(e,t){const o=e&&this.getItemLabel(this.schema,e,{index:t,extended:!0}),s=()=>this.notify({type:this.isTransient?"info":"success",title:"Successfully Removed",text:[`${o} was ${this.verbs.deleted}.`,this.transientNote]});if(e&&window.confirm(`Do you really want to ${this.verbs.delete} ${o}?`))if(this.isTransient)this.removeItem(e,t),s();else{const a=this.getItemId(this.schema,e,t),i=Re(a,this.resource);i&&this.handleRequest({method:"delete",resource:i},r=>{r||(this.removeItem(e,t),s()),this.reloadData()})}},getSchemaComponent(e){const{schemaComponents:t}=this,{length:o}=t;return t[(e%o+o)%o]},openSchemaComponent(e){const t=this.getSchemaComponent(e);t&&(t.opened=!0)},async navigateToComponent(e,t){if(this.collapsible){const o=e.startsWith(this.dataPath)?this.isListSource?c.parseDataPath(e.slice(this.dataPath.length+1))[0]??null:0:null;if(o!==null&&c.isNumber(+o)){const s=this.getSchemaComponent(+o);if(s){const{opened:a}=s;a||(s.opened=!0,await this.$nextTick());const i=s.getComponentsByDataPath(e);if(i.length>0&&((t==null?void 0:t(i))??!0))return!0;s.opened=a}}}return this.navigateToRouteComponent(e,t)},navigateToRouteComponent(e,t){return new Promise((o,s)=>{const a=()=>{const{routeComponents:r}=this.appState,l=r[r.length-1];o((t==null?void 0:t([l]))??!0)},i=c.parseDataPath(e);for(;i.length>0;){const r=this.routeComponent.getChildPath(this.api.normalizePath(c.normalizeDataPath(i))),{matched:l}=this.$router.resolve(r);l.length&&l[0].name!=="catch-all"&&(this.$route.path===r?a():this.$router.push({path:r}).catch(s).then(()=>{this.$nextTick(a)})),i.pop()}o(!1)})}},async processSchema(e,t,o,s,a,i=!1,r=!1,l=null){dt(e,t,o);const d=je(t);if(d&&t.resource)throw new Error(`Nested ${this.isListSource?"lists":this.isObjectSource?"objects":"schema"} cannot load data from their own resources`);const h=`id${a+1}`,u={api:e,schema:t},p={...u,flatten:r,nested:i,param:h},m=await co(e,t,a);if(l&&await l(m,a+1),A(t)&&!d){const g=($,S)=>S?$?`${$}/:${S}`:`:${S}`:$,f=a===0?"":t.path,k={path:g(f,ne(t)&&h),component:C.component(i?"DitoFormNested":"DitoForm"),meta:p};te(t)&&s.push({...k,path:g(f,h)}),f&&s.push({path:f,redirect:".",meta:u});const[P,V]=m.reduce(($,S)=>($[S.meta.flatten?0:1].push(S),$),[[],[]]);if(V.length&&(k.children=V),s.push(k),P.length)for(const $ of P)s.push({...$.redirect?$:k,path:`${k.path}/${$.path}`,meta:{...$.meta,flatten:r}})}},processValue(e,t,o,s){return s.addSource(o,e),t}},Ye={text(e){const t=[{label:"contains",value:"contains"},{label:"equals",value:"equals"},{label:"starts with",value:"starts-with"},{label:"ends with",value:"ends-with"}];return{operator:e.operators?{type:"select",width:"2/5",options:c.isArray(e.operators)?t.filter(o=>e.operators.includes(o.value)):t,clearable:!0}:null,text:{type:"text",width:e.operators?"3/5":"fill",clearable:!0}}},"date-range"(){const e={type:"datetime",width:"1/2",formats:{date:{day:"2-digit",month:"2-digit",year:"numeric"}},clearable:!0};return{from:e,to:e}}};function Sl(e,t,o,s){const{sticky:a,...i}=t,r={type:"panel",label:"Filters",name:"$filters",disabled:!1,sticky:a,data(){return Nl(r,s.value)},components:Pl(i),buttons:nn(!1),panelButtons:nn(!0),events:{change(){this.applyFilters()}},computed:{filters(){return El(this.schema,this.data)},hasFilters(){return this.filters.length>0}},methods:{applyFilters(){s.value={...s.value,filter:this.filters,page:void 0}},clearFilters(){this.resetData(),this.applyFilters()}}};return lt(e,r),r}function nn(e){return{clear:{type:"button",text:e?null:"Clear",disabled:({schemaComponent:t})=>!t.hasFilters,events:{click({schemaComponent:t}){t.clearFilters()}}},submit:{type:"submit",text:e?null:"Filter",visible:!e,events:{click({schemaComponent:t}){t.applyFilters()}}}}}function Vl(e){return`$${e}`}function on(e){return e.startsWith("$")?e.slice(1):null}function Pl(e){var o;const t={};for(const s of Object.values(Y(e)||{})){const{filter:a,width:i,...r}=s,l=a?(o=Ye[a])==null?void 0:o.call(Ye,s):s.components;if(l){r.type="form",r.components={};for(const[d,h]of Object.entries(l))if(h){const u=h.label||c.labelize(h.name||d);r.components[d]={...h,label:!1,placeholder:u}}t[Vl(s.name)]={label:r.label??c.labelize(s.name),type:"object",width:i,default:()=>({}),form:r,inlined:!0}}else throw new Error(`Invalid filter '${s.name}': Unknown filter type '${a}'.`)}return t}function sn(e,t){var s;const o=e.components[t];return(s=o==null?void 0:o.form)==null?void 0:s.components}function El(e,t){const o=[];for(const s in t){const a=t[s];if(a){const i=Object.keys(sn(e,s)).map(r=>a[r]??null);i.some(r=>r!==null)&&o.push(`${on(s)}:${i.map(JSON.stringify).join(",")}`)}}return o}function Nl(e,t){const o={};if(t)for(const a of c.asArray(t.filter)){const[,i,r]=a.match(/^(\w+):(.*)$/);try{o[i]=c.asArray(JSON.parse(`[${r}]`))}catch{}}const s={};for(const a in e.components){const i={},r=o[on(a)];if(r){const l=sn(e,a);if(l){let d=0;for(const h in l)i[h]=r[d++]}}s[a]=i}return s}const Ol=["id"],Tl={key:0,class:"dito-list__header"},Fl={key:1,class:"dito-spacer"},Ll=["id"],_l={key:1},jl=["innerHTML"],Ml=["innerHTML"],Il={key:2,class:"dito-cell-edit-buttons"},Rl={key:1},zl=["colspan"];function ql(e,t,o,s,a,i){const r=n.resolveComponent("DitoScopes"),l=n.resolveComponent("DitoPagination"),d=n.resolveComponent("DitoTableHead"),h=n.resolveComponent("DitoTableCell"),u=n.resolveComponent("DitoSchemaInlined"),p=n.resolveComponent("DitoEditButtons"),m=n.resolveComponent("DitoDraggable");return e.isReady?(n.openBlock(),n.createElementBlock("div",{key:0,class:"dito-list",id:e.dataPath},[e.scopes||e.hasPagination?(n.openBlock(),n.createElementBlock("div",Tl,[e.scopes?(n.openBlock(),n.createBlock(r,{key:0,query:e.query,scopes:e.scopes},null,8,["query","scopes"])):e.hasPagination?(n.openBlock(),n.createElementBlock("div",Fl)):n.createCommentVNode("",!0),e.hasPagination?(n.openBlock(),n.createBlock(l,{key:2,query:e.query,limit:e.paginate,total:e.total||0},null,8,["query","limit","total"])):n.createCommentVNode("",!0)])):n.createCommentVNode("",!0),n.createElementVNode("table",{class:n.normalizeClass(["dito-table",{"dito-table-separators":e.isInlined,"dito-table-larger-padding":e.hasEditButtons&&!e.isInlined,"dito-table-alternate-colors":!e.isInlined,"dito-table-even-count":e.hasEvenCount}])},[e.columns?(n.openBlock(),n.createBlock(d,{key:0,query:e.query,columns:e.columns,hasEditButtons:e.hasEditButtons},null,8,["query","columns","hasEditButtons"])):n.createCommentVNode("",!0),n.createVNode(m,{tag:"tbody",modelValue:e.updateOrder(e.sourceSchema,e.listData,e.paginationRange),options:e.getDraggableOptions(),draggable:e.draggable,"onUpdate:modelValue":t[0]||(t[0]=g=>e.listData=g)},{default:n.withCtx(()=>[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.listData,(g,f)=>(n.openBlock(),n.createElementBlock("tr",{id:e.getDataPath(f),key:e.getItemUid(e.schema,g)},[e.columns?(n.openBlock(!0),n.createElementBlock(n.Fragment,{key:0},n.renderList(e.columns,k=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.shouldRenderSchema(k)?(n.openBlock(),n.createBlock(h,{key:k.name,class:n.normalizeClass(e.getCellClass(k)),cell:k,schema:e.schema,dataPath:e.getDataPath(f),data:g,meta:e.nestedMeta,store:e.store,nested:!1,disabled:e.disabled||e.isLoading},null,8,["class","cell","schema","dataPath","data","meta","store","disabled"])):n.createCommentVNode("",!0)],64))),256)):(n.openBlock(),n.createElementBlock("td",_l,[e.isInlined?(n.openBlock(),n.createBlock(u,{key:0,label:e.getItemLabel(e.schema,g,{index:f,asObject:!0}),schema:e.getItemFormSchema(e.schema,g,e.context),dataPath:e.getDataPath(f),data:g,meta:e.nestedMeta,store:e.getItemStore(e.schema,g,f),disabled:e.disabled||e.isLoading,collapsed:e.collapsed,collapsible:e.collapsible,deletable:e.deletable,draggable:e.draggable,editable:e.editable,editPath:e.getEditPath(g,f),onDelete:k=>e.deleteItem(g,f)},null,8,["label","schema","dataPath","data","meta","store","disabled","collapsed","collapsible","deletable","draggable","editable","editPath","onDelete"])):e.schema.component?(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.schema.component),{key:1,dataPath:e.getDataPath(f),data:g,nested:!1},null,8,["dataPath","data"])):e.render?(n.openBlock(),n.createElementBlock("span",{key:2,innerHTML:e.render(e.getContext(g,f))},null,8,jl)):(n.openBlock(),n.createElementBlock("span",{key:3,innerHTML:e.getItemLabel(e.schema,g,{index:f})},null,8,Ml))])),e.hasCellEditButtons?(n.openBlock(),n.createElementBlock("td",Il,[n.createVNode(p,{schema:e.getItemFormSchema(e.schema,g,e.context),dataPath:e.getDataPath(f),data:g,meta:e.nestedMeta,store:e.getItemStore(e.schema,g,f),disabled:e.disabled||e.isLoading,deletable:e.deletable,draggable:e.draggable,editable:e.editable,editPath:e.getEditPath(g,f),onDelete:k=>e.deleteItem(g,f)},null,8,["schema","dataPath","data","meta","store","disabled","deletable","draggable","editable","editPath","onDelete"])])):n.createCommentVNode("",!0)],8,Ll))),128))]),_:1},8,["modelValue","options","draggable"]),e.hasListButtons&&!e.single?(n.openBlock(),n.createElementBlock("tfoot",Rl,[n.createElementVNode("tr",null,[n.createElementVNode("td",{class:"dito-cell-edit-buttons",colspan:e.numColumns},[n.createVNode(p,{buttons:e.buttonSchemas,schema:e.schema,dataPath:e.dataPath,data:e.listData,meta:e.meta,store:e.store,disabled:e.disabled||e.isLoading,creatable:e.creatable,createPath:e.path},null,8,["buttons","schema","dataPath","data","meta","store","disabled","creatable","createPath"])],8,zl)])])):n.createCommentVNode("",!0)],2),e.hasListButtons&&e.single?(n.openBlock(),n.createBlock(p,{key:1,class:"dito-buttons-large dito-buttons-main dito-buttons-sticky",buttons:e.buttonSchemas,schema:e.schema,dataPath:e.dataPath,data:e.listData,meta:e.meta,store:e.store,disabled:e.disabled||e.isLoading,creatable:e.creatable,createPath:e.path},null,8,["buttons","schema","dataPath","data","meta","store","disabled","creatable","createPath"])):n.createCommentVNode("",!0)],8,Ol)):n.createCommentVNode("",!0)}const fu="",Ul=B.register("list",{mixins:[Q,Ke],getSourceType(e){return e},getPanelSchema(e,t,o,s){const{filters:a}=t;if(a)return Sl(e,a,o,n.computed({get(){return s.query},set(i){const r=l=>c.pickBy(l,d=>d!==void 0);c.equals(r(i),r(s.query))||(s.query=i,s.loadData(!1))}}))},computed:{hasPagination(){return this.paginate&&this.total>this.paginate},hasListButtons(){return!!(this.buttonSchemas||this.creatable)},hasEditButtons(){const{listData:e}=this;return e.length>0&&(this.editable||this.deletable||this.draggable)},hasCellEditButtons(){return!this.isInlined&&this.hasEditButtons},hasEvenCount(){return!(this.listData.length%2)},numColumns(){return(this.columns?Object.keys(this.columns).length:1)+(this.hasCellEditButtons?1:0)}},methods:{getDataPath(e){return T(this.dataPath,e)},getEditPath(e,t){if(this.editable){const o=this.getItemId(this.schema,e,t);return pt(this.schema,o,this.context)||`${this.path}/${o}`}return null},getCellClass(e){return`dito-cell-${c.hyphenate(e.name)}`},getContext(e,t){return new w(this,{data:e,value:e,index:t,dataPath:this.getDataPath(t)})},onFilterErrors(e){const t=T(this.dataPath,"$filters"),o=this.schemaComponent.getPanelByDataPath(t);if(o)return o.showValidationErrors(e,!0),!0}},async processSchema(e,t,o,s,a,i=!1,r=!1,l=null){await Promise.all([he(t),rt(t.columns),Q.processSchema(e,t,o,s,a,i,r,l)])}}),Al=y(Ul,[["render",ql]]);function Hl(e,t,o,s,a,i){const r=n.resolveComponent("DitoLabel");return n.openBlock(),n.createBlock(r,{class:"dito-label-component",label:e.value,dataPath:e.dataPath},null,8,["label","dataPath"])}const gu="",Wl=B.register("label",{excludeValue:!0,generateLabel:!1}),Kl=y(Wl,[["render",Hl]]),Yl=["id"],Jl={key:0,class:"dito-buttons dito-buttons-toolbar"},Gl={class:"dito-button-group"},Ql=["onClick"];function Xl(e,t,o,s,a,i){const r=n.resolveComponent("Icon"),l=n.resolveComponent("EditorContent");return n.openBlock(),n.createElementBlock("div",{class:"dito-markup",id:e.dataPath},[e.groupedButtons.length>0?(n.openBlock(),n.createElementBlock("div",Jl,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.groupedButtons,d=>(n.openBlock(),n.createElementBlock("div",Gl,[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(d,({name:h,icon:u,isActive:p,onClick:m})=>(n.openBlock(),n.createElementBlock("button",{class:n.normalizeClass(["dito-button",{"dito-active":p}]),key:h,onClick:m},[n.createVNode(r,{name:u},null,8,["name"])],10,Ql))),128))]))),256))])):n.createCommentVNode("",!0),n.createVNode(l,{class:"dito-markup-editor",ref:"editor",editor:e.editor,style:n.normalizeStyle(e.styles)},null,8,["editor","style"]),e.resizable?(n.openBlock(),n.createElementBlock("div",{key:1,class:"dito-resize",onMousedown:t[0]||(t[0]=n.withModifiers((...d)=>e.onDragResize&&e.onDragResize(...d),["stop","prevent"]))},null,32)):n.createCommentVNode("",!0)],8,Yl)}const bu="",Zl=B.register("markup",{mixins:[H],components:{EditorContent:re.EditorContent,Icon:ge},data(){return{editor:null,height:null}},computed:{lines(){return this.schema.lines||10},styles(){return{height:this.height||`calc(${this.lines}em * var(--line-height))`}},markButtons(){return this.getButtons("marks",{bold:!0,italic:!0,underline:!0,strike:!0,small:!0,code:!0,link:{onClick:e=>this.onClickLink(e)}})},basicNodeButtons(){return this.getButtons("nodes",{paragraph:{command:"setParagraph"},heading:{attribute:"level",values:[1,2,3,4,5,6]}})},advancedNodeButtons(){return this.getButtons("nodes",{bulletList:!0,orderedList:!0,blockquote:!0,codeBlock:!0})},toolButtons(){return this.getButtons("tools",{undo:!0,redo:!0})},groupedButtons(){return[this.markButtons,this.basicNodeButtons,this.advancedNodeButtons,this.toolButtons].filter(e=>e.length>0)},parseOptions(){return{preserveWhitespace:{collapse:!1,preserve:!0,"preserve-all":"full"}[this.whitespace]}},editorOptions(){return{editable:!this.readyonly,autoFocus:this.autofocus,disableInputRules:!this.enableRules.input,disablePasteRules:!this.enableRules.paste,parseOptions:this.parseOptions}},resizable:b("resizable",{type:Boolean,default:!1}),whitespace:b("whitespace",{type:String,default:"collapse"}),enableRules:b("enableRules",{type:[Object,Boolean],default:!1,get(e){return c.isObject(e)?e:{input:!!e,paste:!!e}}})},watch:{readyonly:"updateEditorOptions",autofocus:"updateEditorOptions",enableRules:"updateEditorOptions"},created(){let e=!1,t=!1;const o=()=>{!this.focused&&e&&(e=!1,this.onChange())},s=()=>this.onFocus(),a=()=>{this.onBlur(),o()},i=c.debounce(l=>{t=!0,this.value=l.getHTML(),e=!0,o()},100),r=({editor:l})=>{i(l),this.onInput()};this.$watch("value",l=>{t?t=!1:this.editor.setContent(l,!1,this.parseOptions)}),this.editor=new re.Editor({...this.editorOptions,onFocus:s,onBlur:a,onUpdate:r,extensions:this.getExtensions(),content:this.value||""})},unmounted(){this.editor.destroy()},methods:{onDragResize(e){const t=({clientX:r,clientY:l})=>({x:r,y:l});let o=t(e).y,s=parseFloat(getComputedStyle(this.$refs.editor.$el).height);const a=r=>{const{y:l}=t(r);s+=l-o,o=l,this.height=`${Math.max(s,0)}px`},i=this.domOn(document,{mousemove:a,mouseup(r){a(r),i.remove()}})},updateEditorOptions(){this.editor.setOptions(this.editorOptions)},async onClickLink(e){const t=await this.rootComponent.showDialog({components:{href:{type:"url",label:"Link",autofocus:!0},title:{type:"text",label:"Title"}},buttons:{cancel:{},apply:{type:"submit"},remove:{events:{click({dialogComponent:o}){o.resolve(null)}}}},data:re.getMarkAttributes(this.editor.state,"link")});if(t){let{href:o,title:s}=t;if(o)try{new URL(o)}catch{o=`https://${o}`}e.commands.setLink({href:o,title:s})}else t===null&&e.commands.unsetLink()},getExtensions(){const{marks:e={},nodes:t={},tools:o={}}=this.schema;return[mn.Document,fn.Text,Vn.Paragraph,e.bold&&gn.Bold,e.italic&&yn.Italic,e.underline&&$n.Underline,e.strike&&Cn.Strike,e.small&&vl,e.code&&bn.Code,e.link&&xl,t.blockquote&&Dn.Blockquote,t.codeBlock&&Bn.CodeBlock,wn.HardBreak,t.heading&&Sn.Heading.configure({levels:t.heading}),t.horizontalRule&&Pn.HorizontalRule,(t.orderedList||t.bulletList)&&On.ListItem,t.bulletList&&Nn.BulletList,t.orderedList&&En.OrderedList,o.history&&Tn.History].filter(s=>!!s)},getButtons(e,t){const o=[],{commands:s}=this.editor,a=({name:r,icon:l,command:d,attributes:h,onClick:u})=>{o.push({name:r,icon:l,isActive:this.editor.isActive(r,h),onClick:()=>{d??(d=r in s?r:`toggle${c.camelize(r,!0)}`),d in s&&(u?u(this.editor,h):(m=>this.editor.chain()[d](m).focus().run())(h))}})},i=this.schema[e];if(i)for(const[r,l]of Object.entries(t)){const d=["undo","redo"].includes(r)?"history":r,h=i[d],u=c.hyphenate(r);if(h){if(l===!0)a({name:r,icon:u});else if(c.isObject(l)){const{command:p,attribute:m,values:g,onClick:f}=l;if(m){if(c.isArray(g)&&c.isArray(h))for(const k of g)h.includes(k)&&a({name:r,icon:`${u}-${k}`,command:p,attributes:{[m]:k},onClick:f})}else a({name:r,icon:u,command:p,onClick:f})}}}return o},focusElement(){this.editor.commands.focus()},blurElement(){this.editor.commands.blur()}}}),vl=re.Mark.create({name:"small",parseHTML(){return[{tag:"small"}]},renderHTML(){return["small",0]},addCommands(){return{setSmall:e=>({commands:t})=>t.setMark(this.name,e),toggleSmall:e=>({commands:t})=>t.toggleMark(this.name,e),unsetSmall:()=>({commands:e})=>e.unsetMark(this.name)}}}),xl=kn.Link.extend({inclusive:!1,schema:{attrs:{href:{default:null},title:{default:null}},parseHTML(){return[{tag:"a",getAttrs:e=>({href:e.getAttribute("href"),title:e.getAttribute("title")})}]},renderHTML(e){return["a",e.attrs,0]}}}),ed=y(Zl,[["render",Xl]]),td={class:"dito-multiselect"},nd={class:"dito-multiselect__inner"},od=["disabled"];function sd(e,t,o,s,a,i){const r=n.resolveComponent("VueMultiselect"),l=n.resolveComponent("DitoEditButtons");return n.openBlock(),n.createElementBlock("div",td,[n.createElementVNode("div",nd,[n.createVNode(r,n.mergeProps({ref:"element",modelValue:e.selectedOptions,"onUpdate:modelValue":t[0]||(t[0]=d=>e.selectedOptions=d),class:{"multiselect--multiple":e.multiple,"multiselect--loading":e.isLoading,"multiselect--highlight":e.showHighlight},showLabels:!1,placeholder:e.placeholder,tagPlaceholder:"Press enter to add new tag",options:e.populate&&e.activeOptions||[],customLabel:e.getLabelForOption,trackBy:e.optionValue,groupLabel:e.groupByLabel,groupValues:e.groupByOptions,multiple:e.multiple,taggable:e.taggable,searchable:e.searchable,internalSearch:!e.searchFilter,preserveSearch:!!e.searchFilter,clearOnSelect:!e.searchFilter,closeOnSelect:!e.stayOpen,loading:e.isLoading},e.attributes,{onOpen:e.onOpen,onClose:e.onClose,onTag:e.onAddTag,onSearchChange:e.onSearchChange}),null,16,["modelValue","class","placeholder","options","customLabel","trackBy","groupLabel","groupValues","multiple","taggable","searchable","internalSearch","preserveSearch","clearOnSelect","closeOnSelect","loading","onOpen","onClose","onTag","onSearchChange"]),e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button-clear dito-button-overlay",type:"button",disabled:e.disabled,onClick:t[1]||(t[1]=(...d)=>e.clear&&e.clear(...d))},null,8,od)):n.createCommentVNode("",!0)]),e.editable?(n.openBlock(),n.createBlock(l,{key:0,schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,disabled:!1,editable:e.editable,editPath:e.editPath},null,8,["schema","dataPath","data","meta","store","editable","editPath"])):n.createCommentVNode("",!0)])}const yu="",ad=B.register("multiselect",{mixins:[$e],components:{VueMultiselect:Fn},data(){return{searchedOptions:null,populate:!1}},computed:{selectedOptions:{get(){return this.multiple?(this.selectedValue||[]).map(e=>this.getOptionForValue(e)||this.addTagOption(e)).filter(Boolean):this.selectedOption},set(e){this.selectedValue=this.multiple?(e||[]).map(t=>this.getValueForOption(t)):this.getValueForOption(e),this.onChange()}},activeOptions(){return this.searchedOptions||this.options},multiple:b("multiple",{type:Boolean,default:!1}),searchable:b("searchable",{type:Boolean,default:!1}),taggable:b("taggable",{type:Boolean,default:!1}),stayOpen:b("stayOpen",{type:Boolean,default:!1}),placeholder(){let{placeholder:e,searchable:t,taggable:o}=this.schema;return c.isBoolean(e)&&(e=e?void 0:null),e===void 0?t&&o?`Search or add a ${this.label}`:t?`Select or search ${this.label}`:void 0:e},showHighlight(){return this.isMounted&&this.$refs.element.pointerDirty}},mounted(){this.autofocus&&this.focus()},methods:{addTagOption(e){if(this.taggable){const{optionLabel:t,optionValue:o}=this,s=t&&o?{[t]:e,[o]:e}:e;return this.options.push(s),s}},focusElement(){this.$refs.element.activate()},blurElement(){this.$refs.element.deactivate()},onOpen(){this.populate=!0},onClose(){this.focused&&this.onBlur()},onBlur(){this.$refs.element.isOpen||Z.methods.onBlur.call(this)},onAddTag(e){const t=this.addTagOption(e);t&&this.value.push(this.getValueForOption(t))},async onSearchChange(e){this.searchFilter&&(e?(this.searchedOptions=[],this.searchedOptions=await this.resolveData(()=>this.searchFilter(new w(this,{query:e})))):this.searchedOptions=null)}}}),rd=y(ad,[["render",sd]]),Je={computed:{inputValue:{get(){return this.value!==null?this.value:""},set(e){this.value=e!==""?this.isInteger?parseInt(e,10):parseFloat(e):null}},isInteger(){return!1},stepValue(){return this.clearable?null:this.step==null&&!this.isInteger?"any":this.step},decimals:b("decimals",{type:Number}),step:b("step",{type:Number,get(e){return this.isInteger&&e!=null?Math.ceil(e):e}}),min:b("min",{type:Number,get(e){var t;return e=e===void 0?(t=this.getSchemaValue("range",{type:Array}))==null?void 0:t[0]:e,this.isInteger&&e!=null?Math.floor(e):e}}),max:b("max",{type:Number,get(e){var t;return e=e===void 0?(t=this.getSchemaValue("range",{type:Array}))==null?void 0:t[1]:e,this.isInteger&&e!=null?Math.ceil(e):e}}),range:b("range",{type:Array,get(){const{min:e,max:t}=this;return e!=null&&t!=null?[e,t]:void 0},set(e){c.isArray(e)&&([this.min,this.max]=e)}})},methods:{getValidations(){const e={},{range:t,min:o,max:s,decimals:a,step:i}=this;if(t?e.range=t:(o!=null&&(e.min=o),s!=null&&(e.max=s)),a!=null)e.decimals=a;else if(i){const r=(`${i}`.split(".")[1]||"").length;r>0?e.decimals=r:e.integer=!0}return this.isInteger&&(e.integer=!0),e}}},id=["disabled"];function ld(e,t,o,s,a,i){const r=n.resolveComponent("InputField");return n.openBlock(),n.createBlock(r,n.mergeProps({class:"dito-number",id:e.dataPath,ref:"element",modelValue:e.inputValue,"onUpdate:modelValue":t[1]||(t[1]=l=>e.inputValue=l),type:"number"},e.attributes,{min:e.min,max:e.max,step:e.stepValue}),{after:n.withCtx(()=>[e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button-clear dito-button-overlay",disabled:e.disabled,onClick:t[0]||(t[0]=n.withModifiers((...l)=>e.clear&&e.clear(...l),["stop"]))},null,8,id)):n.createCommentVNode("",!0)]),_:1},16,["id","modelValue","min","max","step"])}const ku="",dd=B.register(["number","integer"],{mixins:[Je],components:{InputField:J},nativeField:!0,textField:!0,computed:{isInteger(){return this.type==="integer"}}}),cd=y(dd,[["render",ld]]),hd=["id"],ud={key:0,class:"dito-object-content"},pd=["innerHTML"],md=["innerHTML"];function fd(e,t,o,s,a,i){const r=n.resolveComponent("DitoSchemaInlined"),l=n.resolveComponent("DitoEditButtons");return e.isReady?(n.openBlock(),n.createElementBlock("div",{key:0,class:"dito-object",id:e.dataPath},[e.objectData?(n.openBlock(),n.createElementBlock("div",ud,[e.isInlined?(n.openBlock(),n.createBlock(r,{key:0,label:e.objectLabel,schema:e.getItemFormSchema(e.schema,e.objectData,e.context),dataPath:e.dataPath,data:e.objectData,meta:e.nestedMeta,store:e.store,disabled:e.disabled||e.isLoading,collapsed:e.collapsed,collapsible:e.collapsible,deletable:e.objectData&&e.deletable,editable:e.objectData&&e.editable,editPath:e.path,accumulatedBasis:e.accumulatedBasis,onDelete:t[0]||(t[0]=d=>e.deleteItem(e.objectData))},null,8,["label","schema","dataPath","data","meta","store","disabled","collapsed","collapsible","deletable","editable","editPath","accumulatedBasis"])):e.schema.component?(n.openBlock(),n.createBlock(n.resolveDynamicComponent(e.schema.component),{key:1,dataPath:e.dataPath,data:e.objectData,nested:!1},null,8,["dataPath","data"])):e.render?(n.openBlock(),n.createElementBlock("span",{key:2,innerHTML:e.render(e.getContext())},null,8,pd)):(n.openBlock(),n.createElementBlock("span",{key:3,innerHTML:e.getItemLabel(e.schema,e.objectData)},null,8,md))])):n.createCommentVNode("",!0),n.createVNode(l,{buttons:e.buttonSchemas,schema:e.schema,dataPath:e.dataPath,data:e.objectData,path:e.path,meta:e.meta,store:e.store,disabled:e.disabled||e.isLoading,creatable:e.creatable,createPath:e.path},null,8,["buttons","schema","dataPath","data","path","meta","store","disabled","creatable","createPath"])],8,hd)):n.createCommentVNode("",!0)}const Cu="",gd=B.register("object",{mixins:[Q],getSourceType(e){return e},computed:{objectLabel(){return this.collapsible?this.getItemLabel(this.schema,this.objectData,{asObject:!0}):null}},methods:{getContext(){return new w(this,{data:this.objectData})}},async processSchema(e,t,o,s,a,i=!1,r=!1,l=null){await Promise.all([he(t),Q.processSchema(e,t,o,s,a,i,r,l)])}}),bd=y(gd,[["render",fd]]),yd=B.register("panel",{defaultValue:()=>{},excludeValue:!0,generateLabel:!1,omitSpacing:!0,getPanelSchema(e,t){const{name:o,...s}=t;return s}}),kd=["id","value","max"];function Cd(e,t,o,s,a,i){return n.openBlock(),n.createElementBlock("progress",n.mergeProps({class:"dito-progress",id:e.dataPath,ref:"element",value:e.progressValue,max:e.progressMax},e.attributes),null,16,kd)}const $d=B.register("progress",{mixins:[Je],computed:{progressValue(){let{value:e,range:t,step:o}=this;return e!==null?(t&&(e-=t[0]),o&&(e=Math.round(e/o)*o)):e="",e},progressMax(){const{range:e}=this;return e?e[1]-e[0]:null}}}),Dd=y($d,[["render",Cd]]),Bd=["id"],wd=["value"];function Sd(e,t,o,s,a,i){return n.openBlock(),n.createElementBlock("ul",{class:n.normalizeClass(["dito-radio-buttons",`dito-layout-${e.schema.layout||"vertical"}`]),id:e.dataPath},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(e.options,r=>(n.openBlock(),n.createElementBlock("li",null,[n.createElementVNode("label",null,[n.withDirectives(n.createElementVNode("input",n.mergeProps({class:"dito-radio-button",ref_for:!0,ref:"element","onUpdate:modelValue":t[0]||(t[0]=l=>e.selectedValue=l),type:"radio",value:e.getValueForOption(r)},e.attributes),null,16,wd),[[n.vModelRadio,e.selectedValue]]),n.createTextVNode(n.toDisplayString(e.getLabelForOption(r)),1)])]))),256))],10,Bd)}const $u="",Vd=B.register("radio",{mixins:[$e],nativeField:!0,defaultWidth:"auto"}),Pd=y(Vd,[["render",Sd]]);function Ed(e,t,o,s,a,i){const r=n.resolveComponent("DitoSchemaInlined");return n.openBlock(),n.createElementBlock("div",{class:n.normalizeClass(["dito-section",{"dito-section--labelled":e.hasLabel}])},[n.createVNode(r,{class:"dito-section__schema",label:e.label,schema:e.getItemFormSchema(e.schema,e.item,e.context),dataPath:e.dataPath,data:e.item,meta:e.meta,store:e.store,padding:e.hasLabel?"nested":"inlined",disabled:e.disabled,collapsed:e.collapsed,collapsible:e.collapsible,labelNode:e.labelNode},null,8,["label","schema","dataPath","data","meta","store","padding","disabled","collapsed","collapsible","labelNode"])],2)}const Du="",Nd=B.register("section",{defaultValue:()=>{},ignoreMissingValue:e=>!e.nested&&!("default"in e),defaultNested:!1,generateLabel:!1,computed:{item(){return this.nested?this.value:this.data},hasLabel(){return!!this.schema.label},collapsible:b("collapsible",{type:Boolean,default:null,get(e){return!!(e??this.collapsed!==null)}}),collapsed:b("collapsed",{type:Boolean,default:null})},methods:{getItemFormSchema:_e},async processSchema(e,t,o,s,a){await x(e,t,s,a)}}),Od=y(Nd,[["render",Ed]]),Td={class:"dito-select"},Fd={class:"dito-select__inner"},Ld=["id"],_d=["label"],jd=["value"],Md=["value"],Id=["value"],Rd=["disabled"];function zd(e,t,o,s,a,i){const r=n.resolveComponent("DitoEditButtons");return n.openBlock(),n.createElementBlock("div",Td,[n.createElementVNode("div",Fd,[n.withDirectives(n.createElementVNode("select",n.mergeProps({id:e.dataPath,ref:"element","onUpdate:modelValue":t[0]||(t[0]=l=>e.selectedValue=l)},e.attributes,{onMousedown:t[1]||(t[1]=l=>e.populate=!0),onFocus:t[2]||(t[2]=l=>e.populate=!0)}),[e.populate?(n.openBlock(!0),n.createElementBlock(n.Fragment,{key:0},n.renderList(e.options,l=>(n.openBlock(),n.createElementBlock(n.Fragment,null,[e.groupBy?(n.openBlock(),n.createElementBlock("optgroup",{key:0,label:l[e.groupByLabel]},[(n.openBlock(!0),n.createElementBlock(n.Fragment,null,n.renderList(l[e.groupByOptions],d=>(n.openBlock(),n.createElementBlock("option",{value:e.getValueForOption(d)},n.toDisplayString(e.getLabelForOption(d)),9,jd))),256))],8,_d)):(n.openBlock(),n.createElementBlock("option",{key:1,value:e.getValueForOption(l)},n.toDisplayString(e.getLabelForOption(l)),9,Md))],64))),256)):e.selectedOption?(n.openBlock(),n.createElementBlock("option",{key:1,value:e.selectedValue},n.toDisplayString(e.getLabelForOption(e.selectedOption)),9,Id)):n.createCommentVNode("",!0)],16,Ld),[[n.vModelSelect,e.selectedValue]]),e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button-clear dito-button-overlay",disabled:e.disabled,onClick:t[3]||(t[3]=(...l)=>e.clear&&e.clear(...l))},null,8,Rd)):n.createCommentVNode("",!0)]),e.editable?(n.openBlock(),n.createBlock(r,{key:0,schema:e.schema,dataPath:e.dataPath,data:e.data,meta:e.meta,store:e.store,disabled:!1,editable:e.editable,editPath:e.editPath},null,8,["schema","dataPath","data","meta","store","editable","editPath"])):n.createCommentVNode("",!0)])}const Bu="",qd=B.register("select",{mixins:[$e],nativeField:!0,data(){return{populate:!0}}}),Ud=y(qd,[["render",zd]]),Ad={class:"dito-slider"},Hd=["id","min","max","step"];function Wd(e,t,o,s,a,i){const r=n.resolveComponent("InputField");return n.openBlock(),n.createElementBlock("div",Ad,[n.withDirectives(n.createElementVNode("input",n.mergeProps({class:"dito-range",id:e.dataPath,ref:"element","onUpdate:modelValue":t[0]||(t[0]=l=>e.inputValue=l),type:"range"},e.attributes,{min:e.min,max:e.max,step:e.stepValue}),null,16,Hd),[[n.vModelText,e.inputValue]]),e.input?(n.openBlock(),n.createBlock(r,n.mergeProps({key:0,class:"dito-number",modelValue:e.inputValue,"onUpdate:modelValue":t[1]||(t[1]=l=>e.inputValue=l),type:"number"},e.attributes,{min:e.min,max:e.max,step:e.stepValue}),null,16,["modelValue","min","max","step"])):n.createCommentVNode("",!0)])}const wu="",Kd=B.register("slider",{mixins:[Je],components:{InputField:J},nativeField:!0,computed:{input:b("input",{type:Boolean,default:!0})}}),Yd=y(Kd,[["render",Wd]]);function Jd(e,t,o,s,a,i){const r=n.resolveComponent("SwitchButton");return n.openBlock(),n.createBlock(r,n.mergeProps({class:"dito-switch",id:e.dataPath,ref:"element",modelValue:e.value,"onUpdate:modelValue":t[0]||(t[0]=l=>e.value=l),labels:e.labels},e.attributes),null,16,["id","modelValue","labels"])}const Su="",Gd=B.register("switch",{defaultValue:!1,defaultWidth:"auto",components:{SwitchButton:Vs},computed:{labels(){return this.schema.labels}}}),Qd=y(Gd,[["render",Jd]]),an={computed:{trim:b("trim",{type:Boolean,default:!1})},processValue(e,t){return e.trim&&t!=null&&c.isString(t)&&(t=t.trim()),t===""&&(t=Me(e)),t}},Xd=["disabled"];function Zd(e,t,o,s,a,i){const r=n.resolveComponent("InputField");return n.openBlock(),n.createBlock(r,n.mergeProps({class:"dito-text",id:e.dataPath,ref:"element",modelValue:e.inputValue,"onUpdate:modelValue":t[1]||(t[1]=l=>e.inputValue=l),type:e.inputType},e.attributes),{after:n.withCtx(()=>[e.showClearButton?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button-clear dito-button-overlay",disabled:e.disabled,onClick:t[0]||(t[0]=n.withModifiers((...l)=>e.clear&&e.clear(...l),["stop"]))},null,8,Xd)):n.createCommentVNode("",!0)]),_:1},16,["id","modelValue","type"])}const vd="****************",xd=B.register(["text","email","url","hostname","domain","tel","password","creditcard"],{mixins:[an],components:{InputField:J},nativeField:!0,textField:!0,ignoreMissingValue:e=>e.type==="password",computed:{inputType(){return{creditcard:"text",hostname:"text",domain:"text"}[this.type]||this.type},inputValue:{get(){return this.type==="password"&&this.value===void 0&&!this.focused?vd:this.value},set(e){this.value=e}}},methods:{getValidations(){const e={email:"email",url:"url",hostname:"hostname",domain:"domain",password:"password",creditcard:"creditcard"}[this.type];return e?{[e]:!0}:{}}}}),ec=y(xd,[["render",Zd]]),tc=["id","rows"];function nc(e,t,o,s,a,i){return n.withDirectives((n.openBlock(),n.createElementBlock("textarea",n.mergeProps({class:"dito-textarea dito-input",id:e.dataPath,ref:"element","onUpdate:modelValue":t[0]||(t[0]=r=>e.value=r)},e.attributes,{rows:e.lines,class:{"dito-resizable":e.resizable}}),null,16,tc)),[[n.vModelText,e.value]])}const Vu="",oc=B.register("textarea",{mixins:[an],nativeField:!0,textField:!0,computed:{lines(){return this.schema.lines||4},resizable:b("resizable",{type:Boolean,default:!1})}}),sc=y(oc,[["render",nc]]),ac={class:"dito-tree-list"},rc={class:"dito-tree-panel"},ic={key:0,class:"dito-tree-form-container"};function lc(e,t,o,s,a,i){const r=n.resolveComponent("DitoScopes"),l=n.resolveComponent("DitoTreeItem"),d=n.resolveComponent("RouterView");return n.openBlock(),n.createElementBlock("div",ac,[e.scopes?(n.openBlock(),n.createBlock(r,{key:0,query:e.query,scopes:e.scopes},null,8,["query","scopes"])):n.createCommentVNode("",!0),n.createElementVNode("div",rc,[n.createVNode(l,{schema:e.treeSchema,dataPath:e.treeDataPath,data:e.treeData,draggable:e.draggable,open:!0},null,8,["schema","dataPath","data","draggable"]),e.hasEditableForms?(n.openBlock(),n.createElementBlock("div",ic,[n.createVNode(d)])):n.createCommentVNode("",!0)])])}const Pu="",dc=B.register(["tree-list","tree-object"],{mixins:[Q],provide(){return{container:this}},getSourceType(e){return e==="tree-object"?"object":"list"},computed:{path(){var e;return(e=this.formComponent)==null?void 0:e.path},editPath(){var e;return this.$route.path.slice((e=this.path)==null?void 0:e.length)},treeData(){return this.isListSource?{[this.name]:this.value}:this.value},treeDataPath(){return this.isListSource?this.dataPath.slice(0,this.dataPath.length-this.name.length):this.dataPath},treeSchema(){return this.isListSource?{children:{name:this.name,...this.schema}}:this.schema},hasEditableForms(){const e=t=>A(t)&&(this.getSchemaValue("editable",{type:Boolean,default:!1,schema:t})||t.children&&e(t.children));return e(this.schema)}},async processSchema(e,t,o,s,a,i=!0,r=!1,l=null){await Promise.all([rt(t.properties),Q.processSchema(e,t,o,s,a,i,r,(d,h)=>{const{children:u}=t;if(u)return u.type="tree-list",this.processSchema(e,u,u.name,d,h,i,!0,l)})])},getFormSchemasForProcessing(e,t){const{children:o}=e;return K(e,t,o?s=>({...s,components:{...s.components,[o.name]:o}}):null)}}),cc=y(dc,[["render",lc]]);function rn(e){return _n.filesize(e,{base:10})}const hc={class:"dito-upload"},uc={class:"dito-table dito-table-separators dito-table-background"},pc=n.createElementVNode("thead",{class:"dito-table-head"},[n.createElementVNode("tr",null,[n.createElementVNode("th",null,[n.createElementVNode("span",null,"File")]),n.createElementVNode("th",null,[n.createElementVNode("span",null,"Size")]),n.createElementVNode("th",null,[n.createElementVNode("span",null,"Status")]),n.createElementVNode("th",null,[n.createElementVNode("span")])])],-1),mc=["innerHTML"],fc={key:1},gc=["download","href","onClick"],bc={key:2},yc={class:"dito-upload__size"},kc={class:"dito-upload__status"},Cc={class:"dito-cell-edit-buttons"},$c={class:"dito-buttons dito-buttons-round"},Dc=["title"],Bc=["onClick"],wc={key:0},Sc={colspan:4},Vc={class:"dito-upload-footer"},Pc=["value"],Ec={class:"dito-buttons dito-buttons-round"},Nc=["title"];function Oc(e,t,o,s,a,i){var h;const r=n.resolveComponent("VueUpload"),l=n.resolveComponent("DitoUploadFile"),d=n.resolveComponent("DitoDraggable");return n.openBlock(),n.createElementBlock("div",hc,[n.createVNode(r,{class:"dito-upload__input",ref:"upload",modelValue:e.uploads,"onUpdate:modelValue":t[0]||(t[0]=u=>e.uploads=u),inputId:e.dataPath,name:e.dataPath,disabled:e.disabled,postAction:e.uploadPath,extensions:e.extensions,accept:e.accept,multiple:e.multiple,size:e.maxSize,drop:(h=e.$el)==null?void 0:h.closest(".dito-container"),dropDirectory:!0,onInputFilter:e.onInputFilter,onInputFile:e.onInputFile},null,8,["modelValue","inputId","name","disabled","postAction","extensions","accept","multiple","size","drop","onInputFilter","onInputFile"]),n.createElementVNode("table",uc,[pc,n.createVNode(d,{modelValue:e.files,"onUpdate:modelValue":t[2]||(t[2]=u=>e.files=u),tag:"tbody",options:e.getDraggableOptions(),draggable:e.draggable},{default:n.withCtx(()=>[e.multiple||!e.isUploadActive?(n.openBlock(!0),n.createElementBlock(n.Fragment,{key:0},n.renderList(e.files,(u,p)=>(n.openBlock(),n.createElementBlock("tr",{key:u.name},[e.render?(n.openBlock(),n.createElementBlock("td",{key:0,innerHTML:e.renderFile(u,p)},null,8,mc)):e.downloadUrls[p]?(n.openBlock(),n.createElementBlock("td",fc,[n.createElementVNode("a",{download:u.name,href:e.downloadUrls[p],target:"_blank",onClick:n.withModifiers(m=>e.onClickDownload(u,p),["prevent"])},[n.createVNode(l,{file:u,thumbnail:e.thumbnails,thumbnailUrl:e.thumbnailUrls[p]},null,8,["file","thumbnail","thumbnailUrl"])],8,gc)])):(n.openBlock(),n.createElementBlock("td",bc,[n.createVNode(l,{file:u,thumbnail:e.thumbnails,thumbnailUrl:e.thumbnailUrls[p]},null,8,["file","thumbnail","thumbnailUrl"])])),n.createElementVNode("td",yc,n.toDisplayString(e.formatFileSize(u.size)),1),n.createElementVNode("td",kc,[u.upload?(n.openBlock(),n.createElementBlock(n.Fragment,{key:0},[u.upload.error?(n.openBlock(),n.createElementBlock(n.Fragment,{key:0},[n.createTextVNode("Error: "+n.toDisplayString(u.upload.error),1)],64)):u.upload.active?(n.openBlock(),n.createElementBlock(n.Fragment,{key:1},[n.createTextVNode("Uploading...")],64)):u.upload.success?(n.openBlock(),n.createElementBlock(n.Fragment,{key:2},[n.createTextVNode("Uploaded")],64)):n.createCommentVNode("",!0)],64)):(n.openBlock(),n.createElementBlock(n.Fragment,{key:1},[n.createTextVNode("Stored")],64))]),n.createElementVNode("td",Cc,[n.createElementVNode("div",$c,[e.multiple?n.createCommentVNode("",!0):(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button dito-button-upload",title:e.uploadTitle,onClick:t[1]||(t[1]=(...m)=>e.onClickUpload&&e.onClickUpload(...m))},null,8,Dc)),e.draggable?(n.openBlock(),n.createElementBlock("a",n.mergeProps({key:1,class:"dito-button"},e.getButtonAttributes(e.verbs.drag)),null,16)):n.createCommentVNode("",!0),e.deletable?(n.openBlock(),n.createElementBlock("button",n.mergeProps({key:2,class:"dito-button",type:"button"},e.getButtonAttributes(e.verbs.delete),{onClick:m=>e.deleteFile(u,p)}),null,16,Bc)):n.createCommentVNode("",!0)])])]))),128)):n.createCommentVNode("",!0)]),_:1},8,["modelValue","options","draggable"]),e.multiple||e.isUploadActive||!e.hasFiles?(n.openBlock(),n.createElementBlock("tfoot",wc,[n.createElementVNode("tr",null,[n.createElementVNode("td",Sc,[n.createElementVNode("div",Vc,[e.isUploadActive?(n.openBlock(),n.createElementBlock("progress",{key:0,class:"dito-progress",value:e.uploadProgress,max:"100"},null,8,Pc)):n.createCommentVNode("",!0),n.createElementVNode("div",Ec,[e.isUploadActive?(n.openBlock(),n.createElementBlock("button",{key:0,class:"dito-button",type:"button",onClick:t[3]||(t[3]=n.withModifiers(u=>e.upload.active=!1,["prevent"]))},"Cancel")):n.createCommentVNode("",!0),e.multiple||!e.hasFiles?(n.openBlock(),n.createElementBlock("button",{key:1,class:"dito-button dito-button-upload",title:e.uploadTitle,onClick:t[4]||(t[4]=(...u)=>e.onClickUpload&&e.onClickUpload(...u))},null,8,Nc)):n.createCommentVNode("",!0)])])])])])):n.createCommentVNode("",!0)])])}const Eu="",Tc=B.register("upload",{mixins:[Ke],components:{VueUpload:jn},data(){return{uploads:[]}},computed:{upload(){return this.$refs.upload},uploadTitle(){return this.multiple?"Upload Files":"Upload File"},files(){return ln(this.value)},downloadUrls(){return this.files.map((e,t)=>this.getDownloadUrl(e,t))},thumbnailUrls(){return this.files.map((e,t)=>this.getThumbnailUrl(e,t))},multiple:b("multiple",{type:Boolean,default:!1,callback:!1}),extensions:b("extensions",{type:[Array,String,RegExp]}),accept:b("accept",{type:Array,get(e){return c.isArray(e)?e.join(","):e}}),maxSize:b("maxSize",{type:[String,Number],get(e){return e?Ln(e):void 0}}),draggable:b("draggable",{type:Boolean,default:!1,get(e){return e&&this.files.length>1}}),deletable:b("deletable",{type:Boolean,default:!1}),render:b("render",{type:Function,default:null}),thumbnails:b("thumbnails",{type:[Boolean,String],default(e){return e??!!this.schema.thumbnailUrl},get(e){return e===!0?"medium":e||null}}),hasFiles(){return this.files.length>0},hasUploads(){return this.uploads.length>0},isUploadReady(){return this.hasUploads&&!(this.upload.active||this.upload.uploaded)},isUploadActive(){return this.hasUploads&&this.upload.active},uploadProgress(){return this.uploads.reduce((e,t)=>e+ +t.progress,0)/this.uploads.length},uploadPath(){return this.getResourceUrl({type:"upload",path:this.api.normalizePath(this.dataPath)})}},watch:{isUploadReady(e){e&&this.$nextTick(()=>{this.upload.active=!0})}},methods:{formatFileSize:rn,getFileContext(e,t){return this.multiple?new w(this,{value:e,data:this.files,index:t,dataPath:T(this.dataPath,t)}):this.context},renderFile(e,t){return this.render(this.getFileContext(e,t))},getDownloadUrl(e,t){return e.url?e.url:!e.upload||e.upload.success?this.getSchemaValue("downloadUrl",{type:"String",default:null,context:this.getFileContext(e,t)}):null},getThumbnailUrl(e,t){return!e.upload||e.upload.success?this.getSchemaValue("thumbnailUrl",{type:"String",default:null,context:this.getFileContext(e,t)})||(e.type.startsWith("image/")?e.url:null):null},deleteFile(e,t){const{name:o}=e;e&&window.confirm(`Do you really want to ${this.verbs.remove} ${o}?`)&&(this.multiple?this.value.splice(t,1):this.value=null,e.upload&&this.upload.remove(e.upload),this.onChange(),this.notify({type:"info",title:"Successfully Removed",text:`${o} was ${this.verbs.deleted}.`}))},getFileIndex(e){return this.multiple&&this.value?this.value.findIndex(t=>t.id===e.id):-1},addFile(e){this.multiple?this.value?this.value.push(e):this.value=[e]:this.value=e},replaceFile(e,t){if(this.multiple){const o=this.getFileIndex(e);o>=0&&(t?this.value[o]=t:this.value.splice(o,1))}else this.value=t},removeFile(e){this.replaceFile(e,null)},onInputFile(e,t){if(e&&!t){const{id:o,name:s,size:a}=e;this.addFile({id:o,name:s,size:a,upload:e})}if(e&&t){const{success:o,error:s}=e;if(o){this.onChange();const a=e.response[0];a?(a.upload=e,this.replaceFile(e,a)):this.removeFile(e)}else if(s){this.removeFile(e);const a={abort:"Upload aborted",denied:"Upload denied",extension:`Unsupported file-type: ${e.name}`,network:"Network error encountered during upload",server:"Server error occurred during upload",size:`File is too large: ${rn(e.size)}`,timeout:"Timeout occurred during upload"}[s]||`Unknown File Upload Error: '${s}'`;this.notify({type:"error",title:"File Upload Error",text:a})}}},onInputFilter(e){var o;const t=e==null?void 0:e.xhr;(o=this.api.cors)!=null&&o.credentials&&t&&!t.withCredentials&&(t.withCredentials=!0)},async onClickDownload(e,t){try{const s=await(await fetch(this.downloadUrls[t])).blob();this.download({filename:e.name,url:URL.createObjectURL(s)})}catch(o){console.error(o)}},onClickUpload(e){this.upload.$el.querySelector("input").dispatchEvent(new e.constructor(e.type,e))}},processValue(e,t){const o=ln(t).map(({upload:s,...a})=>!s||s.success?a:null).filter(s=>s);return e.multiple?o:o[0]||null}});function ln(e){return e?c.asArray(e):[]}const Fc=Object.freeze(Object.defineProperty({__proto__:null,DitoDitoTypeComponent:ml,DitoTypeButton:Wi,DitoTypeCheckbox:Qi,DitoTypeCheckboxes:tl,DitoTypeCode:al,DitoTypeColor:hl,DitoTypeComputed:yl,DitoTypeDate:Bl,DitoTypeLabel:Kl,DitoTypeList:Al,DitoTypeMarkup:ed,DitoTypeMultiselect:rd,DitoTypeNumber:cd,DitoTypeObject:bd,DitoTypePanel:yd,DitoTypeProgress:Dd,DitoTypeRadio:Pd,DitoTypeSection:Od,DitoTypeSelect:Ud,DitoTypeSlider:Yd,DitoTypeSwitch:Qd,DitoTypeText:ec,DitoTypeTextarea:sc,DitoTypeTreeList:cc,DitoTypeUpload:y(Tc,[["render",Oc]])},Symbol.toStringTag,{value:"Module"})),Lc={mounted(e,t){_c(e,t.value,t.arg)},unmounted(e,t){jc(e,t.value,t.arg)}};function _c(e,t,o){De.getObserver(o).observe(e,t)}function jc(e,t,o){De.getObserver(o).unobserve(e,t)}const Mc=typeof ResizeObserver<"u",se={};class De{constructor(t,o){this.key=t,this.options=o,this.observer=Mc?new ResizeObserver(s=>this.handle(s)):null,this.handlersByNode=new WeakMap,this.nodeCount=0}observe(t,o){var a;let s=this.handlersByNode.get(t);s||(s=new Set,this.handlersByNode.set(t,s),(a=this.observer)==null||a.observe(t,this.options),this.nodeCount++),s.add(o)}unobserve(t,o){var a;const s=this.handlersByNode.get(t);s!=null&&s.delete(o)&&s.size===0&&(this.handlersByNode.delete(t),(a=this.observer)==null||a.unobserve(t),--this.nodeCount===0&&delete se[this.key])}handle(t){for(const o of t){const s=this.handlersByNode.get(o.target);if(s){const a={target:o.target,contentRect:o.contentRect,borderBoxSize:c.asArray(o.borderBoxSize),contentBoxSize:c.asArray(o.contentBoxSize),devicePixelContentBoxSize:c.asArray(o.devicePixelContentBoxSize)};for(const i of s)i(a)}}}static getObserver({box:t="content-box"}={}){const o={box:t},s=JSON.stringify(o);return se[s]||(se[s]=new De(s,o)),se[s]}}const Ic=["create","created","save","saved","apply","applied","submit","submitted","delete","deleted","remove","removed","clear","cleared","edit","edited","close","closed","cancel","cancelled","drag","dragged","login","logged in"].reduce((e,t)=>(e[t]=t,e),{});class Rc{constructor(t,{dito:o={},api:s,views:a={},...i}={}){this.el=t,this.api=s=c.assignDeeply({base:"/"},o.api,s),this.options=i,s.locale||(s.locale="en-US"),s.formats=c.assignDeeply({},c.defaultFormats,s.formats),s.request||(s.request=d=>qc(s,d)),s.getApiUrl||(s.getApiUrl=d=>Ac(s,d)),s.isApiUrl||(s.isApiUrl=d=>Uc(s,d)),s.normalizePath||(s.normalizePath=s.normalizePaths?c.hyphenate:d=>d),s.denormalizePath||(s.denormalizePath=s.normalizePaths?c.camelize:d=>d),s.defaults||(s.defaults={});const r=_(s.users,{type:"collection"})||{};r.login=_(r.login||"login",{method:"post",parent:r}),r.logout=_(r.logout||"logout",{method:"post",parent:r}),r.session=_(r.session||"session",{method:"get",parent:r}),s.users=r,s.resources={any(d){const h=this[d==null?void 0:d.type]||this.default;return d&&h.call(this,d)},default(d){const h=this.any(d.parent);return h?`${h}/${d.path}`:d.path},collection(d){return this.default(d)},member(d){return`${d.path}/${d.id}`},upload(d){return`${this.collection(d.parent)}/upload/${d.path}`},...s.resources},s.headers={"Content-Type":"application/json",...s.headers},c.isString(t)&&(t=document.querySelector(t));const l=this.app=n.createApp({components:{DitoRoot:We,VueNotifications:M,...Ri,...Fc},provide:{api:s,$verbs:()=>Ic,$views:()=>{},$isPopulated:()=>!0,$parentComponent:()=>null,$schemaComponent:()=>null,$schemaParentComponent:()=>null,$routeComponent:()=>null,$dataComponent:()=>null,$sourceComponent:()=>null,$resourceComponent:()=>null,$dialogComponent:()=>null,$panelComponent:()=>null,$tabComponent:()=>null},render:()=>n.h(We,{ref:"root",class:o.settings.rootClass,unresolvedViews:a,options:i})});l.config.errorHandler=console.error,l.use(M,{componentName:"VueNotifications",name:"notify"}),l.directive("resize",Lc),l.use(O.createRouter({routes:[{name:"catch-all",path:"/:_(.*)",components:{}}],history:O.createWebHistory(o.base),linkActiveClass:"",linkExactActiveClass:""})),t.classList.add("dito-app"),l.mount(t)}register(t,o){return B.register(t,o)}}class zc extends Error{constructor(t){super(`Request failed with status code: ${t.status} (${t.statusText})`),this.response=t}}async function qc(e,{url:t,method:o="get",params:s=null,query:a=s||null,headers:i=null,data:r=null,signal:l=null}){var u,p;s&&c.deprecate("request.params is deprecated. Use action.method and action.path instead.");const d=e.isApiUrl(t),h=await fetch(e.getApiUrl({url:t,query:a}),{method:o.toUpperCase(),...r&&{body:JSON.stringify(r)},headers:{...d&&e.headers,...i},credentials:d&&((u=e.cors)!=null&&u.credentials)?"include":"same-origin",signal:l});if((p=h.headers.get("Content-Type"))!=null&&p.includes("application/json")&&(h.data=await h.json()),!h.ok)throw new zc(h);return h}function Uc(e,t){return!c.isAbsoluteUrl(t)||t.startsWith(e.url)}function Ac(e,{url:t,query:o}){!t.startsWith(e.url)&&!c.isAbsoluteUrl(t)&&(t=Hc(e.url,t));const s=tn(o);return s?`${t}${t.includes("?")?"&":"?"}${s}`:t}function Hc(e,t){return`${e.replace(/\/+$/,"")}/${t.replace(/^\/+/,"")}`}return Rc});
|
|
7
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi51bWQuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy9hZ2VudC5qcyIsIi4uL3NyYy9hcHBTdGF0ZS5qcyIsIi4uL3NyYy91dGlscy9kYXRhLmpzIiwiLi4vc3JjL0RpdG9Db250ZXh0LmpzIiwiLi4vc3JjL21peGlucy9FbWl0dGVyTWl4aW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2NyZWRpdGNhcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RlY2ltYWxzLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19kb21haW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2VtYWlsLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19ob3N0bmFtZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faW50ZWdlci5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWF4LmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19taW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3Bhc3N3b3JkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yYW5nZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmVxdWlyZWQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3VybC5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdGlvbk1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2FjY2Vzc29yLmpzIiwiLi4vc3JjL21peGlucy9UeXBlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvdWlkLmpzIiwiLi4vc3JjL3V0aWxzL1NjaGVtYUdyYXBoLmpzIiwiLi4vc3JjL3V0aWxzL3R5cGUuanMiLCIuLi9zcmMvdXRpbHMvc2NoZW1hLmpzIiwiLi4vc3JjL3V0aWxzL3Jlc291cmNlLmpzIiwiLi4vc3JjL21peGlucy9EaXRvTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvb3B0aW9ucy5qcyIsIi4uL3NyYy9EaXRvQ29tcG9uZW50LmpzIiwiLi4vLi4vdWkvc3JjL3V0aWxzL2RhdGUuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9DYWxlbmRhci52dWUiLCIuLi8uLi91aS9zcmMvdXRpbHMvZXZlbnQuanMiLCIuLi8uLi91aS9zcmMvdXRpbHMvdHJpZ2dlci5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1RyaWdnZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvSW5wdXRGaWVsZC52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JY29uLnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy9zZWxlY3Rpb24uanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9EYXRlUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1RpbWVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvRGF0ZVRpbWVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvUGFnaW5hdGlvbi52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9Td2l0Y2hCdXR0b24udnVlIiwiLi4vLi4vdWkvc3JjL3RyYW5zaXRpb25zL1RyYW5zaXRpb25IZWlnaHQudnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL3Z1ZS5qcyIsIi4uL3NyYy9taXhpbnMvRG9tTWl4aW4uanMiLCIuLi9zcmMvRGl0b1VzZXIuanMiLCIuLi9zcmMvbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzIiwiLi4vc3JjL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUm91dGVNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVldXNlL2ludGVncmF0aW9ucy91c2VGb2N1c1RyYXAvY29tcG9uZW50Lm1qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9EaWFsb2cudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b01lbnUudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyYWlsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9IZWFkZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b05hdmlnYXRpb24udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b05vdGlmaWNhdGlvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NpZGViYXIudnVlIiwiLi4vc3JjL21peGlucy9QdWxsZG93bk1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0FjY291bnQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VsZW1lbnQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0xhYmVsLnZ1ZSIsIi4uL3NyYy9taXhpbnMvSXRlbU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hSW5saW5lZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZS52dWUiLCIuLi9zcmMvdXRpbHMvbWF0aC5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Db250YWluZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbHMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0J1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DcmVhdGVCdXR0b24udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NsaXBib2FyZC52dWUiLCIuLi9zcmMvbWl4aW5zL0xvYWRpbmdNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9wYXRoLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm1OZXN0ZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NvcGVzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYWdpbmF0aW9uLnZ1ZSIsIi4uL3NyYy9taXhpbnMvU29ydGFibGVNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUNlbGwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1VwbG9hZEZpbGUudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZVNvcnRhYmxlL2NvbXBvbmVudC5tanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRHJhZ2dhYmxlLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TcGlubmVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WTm9kZS52dWUiLCIuLi9zcmMvRGl0b1R5cGVDb21wb25lbnQuanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVCdXR0b24udnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ2hlY2tib3gudnVlIiwiLi4vc3JjL21peGlucy9EYXRhTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL09wdGlvbnNNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNoZWNrYm94ZXMudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29kZS52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb2xvci52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb21wb25lbnQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29tcHV0ZWQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlRGF0ZS52dWUiLCIuLi9zcmMvdXRpbHMvcm91dGUuanMiLCIuLi9zcmMvbWl4aW5zL1NvdXJjZU1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2ZpbHRlci5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUxpc3QudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTGFiZWwudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTWFya3VwLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU11bHRpc2VsZWN0LnZ1ZSIsIi4uL3NyYy9taXhpbnMvTnVtYmVyTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVOdW1iZXIudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlT2JqZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVBhbmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVByb2dyZXNzLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVJhZGlvLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNlY3Rpb24udnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlU2VsZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNsaWRlci52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTd2l0Y2gudnVlIiwiLi4vc3JjL21peGlucy9UZXh0TWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVUZXh0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVRleHRhcmVhLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVRyZWVMaXN0LnZ1ZSIsIi4uL3NyYy91dGlscy91bml0cy5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVVwbG9hZC52dWUiLCIuLi9zcmMvZGlyZWN0aXZlcy9yZXNpemUuanMiLCIuLi9zcmMvdmVyYnMuanMiLCIuLi9zcmMvRGl0b0FkbWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgdXNlci1hZ2VudCBwYXJzZXIgd2FzIGxpZnRlZCBmcm9tIFBhcGVyLmpzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3BhcGVyanMvcGFwZXIuanMvYmxvYi9jYzE1Njk2NzUwMDM1YWIwMGUwMGM2NGM3Yzk1ZGFhMmM4NWVmZTAxL3NyYy9jb3JlL1BhcGVyU2NvcGUuanMjTDc1LUwxMDdcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVXNlckFnZW50KHVzZXJBZ2VudCA9ICcnKSB7XG4gIGNvbnN0IGFnZW50ID0ge31cbiAgLy8gVXNlIHJlcGxhY2UoKSB0byBnZXQgYWxsIG1hdGNoZXMsIGFuZCBkZWFsIHdpdGggQ2hyb21lL1dlYmtpdCBvdmVybGFwOlxuICBjb25zdCB1YSA9IHVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IFtvc10gPVxuICAgIC8oaXBob25lfGlwYWR8bGludXg7IGFuZHJvaWR8ZGFyd2lufHdpbnxtYWN8bGludXh8ZnJlZWJzZHxzdW5vcykvLmV4ZWMoXG4gICAgICB1YVxuICAgICkgfHwgW11cbiAgY29uc3QgcGxhdGZvcm0gPSAoXG4gICAge1xuICAgICAgJ2Rhcndpbic6ICdtYWMnLFxuICAgICAgJ2lwaG9uZSc6ICdpb3MnLFxuICAgICAgJ2lwYWQnOiAnaW9zJyxcbiAgICAgICdsaW51eDsgYW5kcm9pZCc6ICdhbmRyb2lkJ1xuICAgIH1bb3NdIHx8XG4gICAgb3NcbiAgKVxuICBpZiAocGxhdGZvcm0pIHtcbiAgICBhZ2VudC5wbGF0Zm9ybSA9IHBsYXRmb3JtXG4gICAgYWdlbnRbcGxhdGZvcm1dID0gdHJ1ZVxuICB9XG4gIHVhLnJlcGxhY2UoXG4gICAgLyhvcGVyYXxjaHJvbWV8c2FmYXJpfHdlYmtpdHxmaXJlZm94fG1zaWV8dHJpZGVudClcXC8/XFxzKihbLlxcZF0rKSg/Oi4qdmVyc2lvblxcLyhbLlxcZF0rKSk/KD86Lipydjp2PyhbLlxcZF0rKSk/L2csXG4gICAgKG1hdGNoLCBicm93c2VyLCB2MSwgdjIsIHJ2KSA9PiB7XG4gICAgICAvLyBEbyBub3Qgc2V0IGFkZGl0aW9uYWwgYnJvd3NlcnMgb25jZSBjaHJvbWUgaXMgZGV0ZWN0ZWQuXG4gICAgICBpZiAoIWFnZW50LmNocm9tZSkge1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gcnYgfHwgdjIgfHwgdjFcbiAgICAgICAgaWYgKCFhZ2VudC52ZXJzaW9uIHx8IGJyb3dzZXIgIT09ICdzYWZhcmknKSB7XG4gICAgICAgICAgLy8gVXNlIHRoZSB2ZXJzaW9uIHdlIGdldCBmb3Igd2Via2l0IGZvciBTYWZhcmksIHdoaWNoIGlzIGFjdHVhbGx5XG4gICAgICAgICAgLy8gVGhlIFNhZmFyaSB2ZXJzaW9uLCBlLmcuIDE2LjBcbiAgICAgICAgICBhZ2VudC52ZXJzaW9uID0gdmVyc2lvblxuICAgICAgICAgIGFnZW50LnZlcnNpb25OdW1iZXIgPSBwYXJzZUZsb2F0KHZlcnNpb24pXG4gICAgICAgIH1cbiAgICAgICAgYWdlbnQuYnJvd3NlciA9IGJyb3dzZXJcbiAgICAgICAgYWdlbnRbYnJvd3Nlcl0gPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICApXG4gIGlmIChhZ2VudC5jaHJvbWUpIHtcbiAgICAvLyBDYW4ndCBoYXZlIGl0IGJvdGggd2F5cywgQ2hyb21lLlxuICAgIGRlbGV0ZSBhZ2VudC53ZWJraXRcbiAgfVxuICByZXR1cm4gYWdlbnRcbn1cbiIsImltcG9ydCB7IHJlYWN0aXZlIH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgcGFyc2VVc2VyQWdlbnQgfSBmcm9tICcuL3V0aWxzL2FnZW50J1xuXG5leHBvcnQgZGVmYXVsdCByZWFjdGl2ZSh7XG4gIHRpdGxlOiAnJyxcbiAgcm91dGVDb21wb25lbnRzOiBbXSxcbiAgdXNlcjogbnVsbCxcbiAgYWdlbnQ6IHBhcnNlVXNlckFnZW50KG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJycpLFxuICBsb2FkQ2FjaGU6IHt9LCAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICBhY3RpdmVMYWJlbDogbnVsbCxcbiAgY2xpcGJvYXJkRGF0YTogbnVsbFxufSlcbiIsImltcG9ydCB7XG4gIGlzSW50ZWdlcixcbiAgcGFyc2VEYXRhUGF0aCxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKSB7XG4gIHJldHVybiBkYXRhUGF0aFxuICAgID8gYCR7ZGF0YVBhdGh9LyR7dG9rZW59YFxuICAgIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHBhdGg/LnBvcCgpXG4gIHJldHVybiBwYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5lc3RlZCA/IHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIDogcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICBpZiAocGF0aCkge1xuICAgIC8vIFJlbW92ZSB0aGUgcGFyZW50IHRva2VuLiBJZiBpdCdzIGEgbnVtYmVyLCB0aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBhblxuICAgIC8vIGFycmF5IGFuZCBuZWVkIHRvIHJlbW92ZSBtb3JlIHRva2VucyB1bnRpbCB3ZSBtZWV0IHRoZSBhY3R1YWwgcGFyZW50OlxuICAgIGxldCB0b2tlblxuICAgIGRvIHtcbiAgICAgIHRva2VuID0gcGF0aC5wb3AoKVxuICAgIH0gd2hpbGUgKHRva2VuICE9IG51bGwgJiYgaXNJbnRlZ2VyKCt0b2tlbikpXG4gICAgLy8gSWYgdGhlIHJlbW92ZWQgdG9rZW4gaXMgdmFsaWQsIHdlIGNhbiBnZXQgdGhlIHBhcmVudCBkYXRhOlxuICAgIGlmICh0b2tlbiAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gcGF0aFxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtKHJvb3RJdGVtLCBkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIHJldHVybiBwYXRoID8gZ2V0VmFsdWVBdERhdGFQYXRoKHJvb3RJdGVtLCBwYXRoKSA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHJldHVybiBwYXRoW3BhdGgubGVuZ3RoIC0gMV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aE5hbWUoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgcmV0dXJuIHRva2VuID09IG51bGwgfHwgaXNJbnRlZ2VyKCt0b2tlbikgPyBudWxsIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aEluZGV4KGRhdGFQYXRoKSB7XG4gIGNvbnN0IHRva2VuID0gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpXG4gIGNvbnN0IGluZGV4ID0gdG9rZW4gPT0gbnVsbCA/IG51bGwgOiArdG9rZW5cbiAgcmV0dXJuIGlzSW50ZWdlcihpbmRleCkgPyBpbmRleCA6IG51bGxcbn1cblxubGV0IHRlbXBvcmFyeUlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIHNldFRlbXBvcmFyeUlkKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICAvLyBUZW1wb3JhcnkgaWRzIGFyZSBtYXJrZWQgd2l0aCBhICdAJyBhdCB0aGUgYmVnaW5uaW5nLlxuICBkYXRhW2lkS2V5XSA9IGBAJHsrK3RlbXBvcmFyeUlkfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcG9yYXJ5SWQoaWQpIHtcbiAgcmV0dXJuIC9eQC8udGVzdChpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmZXJlbmNlKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICAvLyBSZXR1cm5zIHRydWUgaWYgdmFsdWUgaXMgYW4gb2JqZWN0IHRoYXQgaG9sZHMgbm90aGluZyBtb3JlIHRoYW4gYW4gaWQuXG4gIHJldHVybiBkYXRhPy5baWRLZXldICE9IG51bGwgJiYgT2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoID09PSAxXG59XG4iLCJpbXBvcnQgeyB0b1JhdyB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbURhdGFQYXRoLFxuICBnZXRQYXJlbnRJdGVtRGF0YVBhdGgsXG4gIGdldFBhcmVudEl0ZW0sXG4gIGdldEl0ZW0sXG4gIGdldExhc3REYXRhUGF0aE5hbWUsXG4gIGdldExhc3REYXRhUGF0aEluZGV4XG59IGZyb20gJy4vdXRpbHMvZGF0YS5qcydcblxuY29uc3QgeyBoYXNPd25Qcm9wZXJ0eSB9ID0gT2JqZWN0LnByb3RvdHlwZVxuXG4vLyBgRGl0b0NvbnRleHRgIGluc3RhbmNlcyBhcmUgYSB0aGluIHdyYXBwZXIgYXJvdW5kIHJhdyBgY29udGV4dGAgb2JqZWN0cyxcbi8vIHdoaWNoIHRoZW1zZWx2ZXMgYWN0dWFsbHkgaW5oZXJpdCBmcm9tIHRoZSBsaW5rZWQgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvXG4vLyB0aGF0IHRoZXkgb25seSBuZWVkIHRvIHByb3ZpZGUgdGhlIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBkaWZmZXJlbnQgdGhhblxuLy8gaW4gdGhlIHVuZGVybHlpbmcgY29tcG9uZW50LiBJbiBvcmRlciB0byBub3QgZXhwb3NlIGFsbCBmaWVsZHMgZnJvbSB0aGVcbi8vIGNvbXBvbmVudCwgdGhlIHdyYXBwZXIgaXMgaW50cm9kdWNlZDpcbi8vIFVzZSBXZWFrTWFwIGZvciB0aGUgcmF3IGBjb250ZXh0YCBvYmplY3RzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBvbGx1dGUgdGhlXG4vLyBhY3R1YWwgYERpdG9Db250ZXh0YCBpbnN0YW5jZSB3aXRoIGl0LlxuY29uc3QgY29udGV4dHMgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIGdldChjb250ZXh0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICBjb25zdCBvYmplY3QgPSBjb250ZXh0cy5nZXQodG9SYXcoY29udGV4dCkpXG4gIGNvbnN0IHZhbHVlID0ga2V5IGluIG9iamVjdCA/IG9iamVjdFtrZXldIDogdW5kZWZpbmVkXG4gIC8vIElmIGBvYmplY3RgIGV4cGxpY2l0bHkgc2V0cyB0aGUga2V5IHRvIGB1bmRlZmluZWRgLCByZXR1cm4gaXQuXG4gIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkIHx8IGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpXG4gICAgPyB2YWx1ZVxuICAgIDogaXNGdW5jdGlvbihkZWZhdWx0VmFsdWUpXG4gICAgICA/IGRlZmF1bHRWYWx1ZSgpXG4gICAgICA6IGRlZmF1bHRWYWx1ZVxufVxuXG5mdW5jdGlvbiBzZXQoY29udGV4dCwga2V5LCB2YWx1ZSkge1xuICBjb250ZXh0cy5nZXQodG9SYXcoY29udGV4dCkpW2tleV0gPSB2YWx1ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYW1zIG9iamVjdCAvIGZ1bmN0aW9uLCBvciBjcmVhdGUgYSBuZXcgb25lOlxuICAgIGNvbnRleHQgPSBjb250ZXh0XG4gICAgICA/IGlzRnVuY3Rpb24oY29udGV4dClcbiAgICAgICAgPyBjb250ZXh0KClcbiAgICAgICAgOiB7IC4uLmNvbnRleHQgfVxuICAgICAgOiB7fVxuICAgIC8vIElmIG5vdCBleHBsaWNpdGx5IHNldCAodG8gZmFsc2UpLCBkZWZhdWx0IHRvIHRydWUgc28gd2UgZG9uJ3QgZmFsbCBiYWNrXG4gICAgLy8gdG8gYGNvbXBvbmVudGAgZm9yIGl0cyB2YWx1ZS5cbiAgICBjb250ZXh0Lm5lc3RlZCA/Pz0gdHJ1ZVxuICAgIGNvbnRleHQuY29tcG9uZW50ID0gY29tcG9uZW50XG4gICAgLy8gSGF2ZSBgb2JqZWN0YCBpbmhlcml0IGZyb20gdGhlIGBjb21wb25lbnRgIGluc3RhbmNlLCBzbyBpdCBjYW4gb3ZlcnJpZGVcbiAgICAvLyBpdHMgdmFsdWVzIGFuZCBzdGlsbCByZXRyaWV2ZSBmcm9tIGl0LCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggYHRoaXNgXG4gICAgLy8gdGhyb3VnaCBgY29udGV4dHNgIG1hcDpcbiAgICBjb25zdCBvYmplY3QgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YoY29udGV4dCwgY29tcG9uZW50KVxuICAgIC8vIE5vIG5lZWQgZm9yIGB0b1Jhdyh0aGlzKWAgaGVyZSBhcyBpdCdzIGFsd2F5cyByYXcgaW5zaWRlIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICBjb250ZXh0cy5zZXQodGhpcywgb2JqZWN0KVxuICB9XG5cbiAgc3RhdGljIGdldChjb21wb25lbnQsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dCBpbnN0YW5jZW9mIERpdG9Db250ZXh0XG4gICAgICA/IGNvbnRleHRcbiAgICAgIDogbmV3IERpdG9Db250ZXh0KGNvbXBvbmVudCwgY29udGV4dClcbiAgfVxuXG4gIC8vIGBuZXN0ZWRgIGlzIGB0cnVlYCB3aGVuIHRoZSBkYXRhLXBhdGggcG9pbnRzIGEgdmFsdWUgaW5zaWRlIGFuIGl0ZW0sIGFuZFxuICAvLyBgZmFsc2VgIHdoZW4gaXQgcG9pbnRzIHRvIHRoZSBpdGVtIGl0c2VsZi5cbiAgZ2V0IG5lc3RlZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICduZXN0ZWQnLCB0cnVlKVxuICB9XG5cbiAgZ2V0IHNjaGVtYSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzY2hlbWEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZhbHVlJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IGRhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RhdGFQYXRoJywgJycpXG4gIH1cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICduYW1lJywgKCkgPT4gZ2V0TGFzdERhdGFQYXRoTmFtZSh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdpbmRleCcsICgpID0+IGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuZGF0YVBhdGgpKVxuICB9XG5cbiAgZ2V0IGl0ZW1EYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0SXRlbURhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1EYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0UGFyZW50SXRlbURhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICB9XG5cbiAgZ2V0IGl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5pdGVtRGF0YVBhdGgpXG4gIH1cblxuICBnZXQgcGFyZW50SXRlbUluZGV4KCkge1xuICAgIHJldHVybiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLnBhcmVudEl0ZW1EYXRhUGF0aClcbiAgfVxuXG4gIC8vIE5PVEU6IFdoaWxlIGludGVybmFsbHksIHdlIHNwZWFrIG9mIGBkYXRhYCwgaW4gdGhlIEFQSSBzdXJmYWNlIHRoZVxuICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzOlxuICAvLyBJZiBgZGF0YWAgaXNuJ3QgcHJvdmlkZWQsIHdlIGNhbiBkZXRlcm1pbmUgaXQgZnJvbSByb290RGF0YSAmIGRhdGFQYXRoOlxuICBnZXQgaXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkYXRhJywgKCkgPT5cbiAgICAgIGdldEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgKVxuICB9XG5cbiAgLy8gTk9URTogYHBhcmVudEl0ZW1gIGlzbid0IHRoZSBjbG9zZXN0IGRhdGEgcGFyZW50IHRvIGBpdGVtYCwgaXQncyB0aGVcbiAgLy8gY2xvc2VzdCBwYXJlbnQgdGhhdCBpc24ndCBhbiBhcnJheSwgZS5nLiBmb3IgcmVsYXRpb25zIG9yIG5lc3RlZCBKU09OIGRhdGEuXG4gIC8vIFRoaXMgaXMgd2h5IHRoZSB0ZXJtIGBpdGVtYCB3YXMgY2hvc2VuIG92ZXIgYGRhdGFgLCBlLmcuIFZTIHRoZSB1c2Ugb2ZcbiAgLy8gYHBhcmVudERhdGFgIGluIHNlcnZlci1zaWRlZCB2YWxpZGF0aW9uLCB3aGljaCBpcyB0aGUgY2xvc2VzdCBwYXJlbnQuIElmXG4gIC8vIG5lZWRlZCwgd2UgY291bGQgZXhwb3NlIHRoaXMgZGF0YSBoZXJlIHRvbywgYXMgd2UgY2FuIGRvIGFsbCBzb3J0cyBvZiBkYXRhXG4gIC8vIHByb2Nlc3Npbmcgd2l0aCBgcm9vdERhdGFgIGFuZCBgZGF0YVBhdGhgLlxuICBnZXQgcGFyZW50SXRlbSgpIHtcbiAgICBjb25zdCBpdGVtID0gKFxuICAgICAgZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZCkgfHxcbiAgICAgIG51bGxcbiAgICApXG4gICAgcmV0dXJuIGl0ZW0gIT09IHRoaXMuaXRlbSA/IGl0ZW0gOiBudWxsXG4gIH1cblxuICBnZXQgcm9vdEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncm9vdERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncHJvY2Vzc2VkRGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgY2xpcGJvYXJkSXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjbGlwYm9hcmREYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCB1c2VyKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3VzZXInLCBudWxsKVxuICB9XG5cbiAgZ2V0IGFwaSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdhcGknLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdzKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZpZXdzJywgbnVsbClcbiAgfVxuXG4gIGdldCBmbGF0dGVuZWRWaWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmbGF0dGVuZWRWaWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBOT1RFOiBMaWtlICdvcHRpb25zJywgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LCBlLmcuXG4gIC8vIGluIG5lc3RlZCBmb3JtcyBkdXJpbmcgYHByb2Nlc3NEYXRhKClgLiBCdXQgYHNjaGVtYWAgaXMgZ3VhcmFudGVlZCB0b1xuICAvLyBhbHdheXMgYmUgYXZhaWxhYmxlLlxuICBnZXQgY29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBBZGQgYGNvbXBvbmVudFNjaGVtYWAgZ2V0dGVyIGZvciB0aGUgc2NoZW1hIG9mIHRoZSBjdXJyZW50IGNvbXBvbmVudCxcbiAgLy8gZXZlbiB3aGVuIHRoZSBjb21wb25lbnQgaXNuJ3QgYWN0dWFsbHkgaW5zdGFudGlhdGVkLiBDb25zaWRlciBhZGRpbmdcbiAgLy8gYHNvdXJjZVNjaGVtYWAgYXMgd2VsbD9cblxuICAvLyBUT0RPOiBGaXggdW5jbGVhciBuYW1pbmc6IFdoaWNoIHNjaGVtYSBpcyB0aGlzLCB0aGF0IG9mIHRoZSBjb21wb25lbnQgb3Igb2ZcbiAgLy8gaXRzIHBhcmVudD8gSXNuJ3QgZXhwb3NpbmcgYGZvcm1Db21wb25lbnRgIGFuZCBgdmlld0NvbXBvbmVudGAgZW5vdWdoLCBvbmNlXG4gIC8vIHdlIG9mZmVyIGFjY2VzcyB0byB0aGVpciBjb21wb25lbnRzIHRoZXJlIHRocm91Z2ggYGdldENvbXBvbmVudCgpYCAmIGNvLiBvblxuICAvLyBgRGl0b01peGluYCBwZXJoYXBzPyAgQWxzbywgdGhlcmUgY291bGQgYmUgYSBgdGFiQ29tcG9uZW50YCBnZXR0ZXIgZm9yXG4gIC8vIHNjaGVtYXMgaW4gdGFicz9cbiAgZ2V0IHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzY2hlbWFDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGZvcm1Db21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZm9ybUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgdmlld0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3Q29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGlhbG9nQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBwYW5lbENvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwYW5lbENvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncmVzb3VyY2VDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzb3VyY2VDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gV2hlbiB1c2VkIGluIE9wdGlvbnNNaXhpbiBmb3IgYHNjaGVtYS5vcHRpb25zLnZhbHVlKClgLFxuICAvLyBgc2NoZW1hLm9wdGlvbnMubGFiZWwoKWAgYW5kICBgc2NoZW1hLnNlYXJjaC5maWx0ZXIoKWAgY2FsbGJhY2tzOlxuICBnZXQgb3B0aW9uKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wdGlvbicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wdGlvbnMnLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcGVuJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdGVuZXJzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBBc3luYyBvbigpIGFuZCAkb2ZmKCkgbWV0aG9kcyB0aGF0IGtlZXAgdHJhY2sgb2YgdGhlIGV2ZW50cyBhZGRlZCAvXG4gICAgLy8gcmVtb3ZlZCwgYW5kIHByb3ZpZGUgYSBoYXNMaXN0ZW5lcnMoKSBtZXRob2QgdGhhdCBjaGVja3MgaWYgdGhlIGNvbXBvbmVudFxuICAgIC8vIGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQuXG5cbiAgICAvLyBBbHNvIGFkZHMgcHJvcGVyIGhhbmRsaW5nIG9mIGFzeW5jIGV2ZW50cywgaW5jbHVkaW5nIGEgYXN5bmMgZW1pdCgpIHRoYXRcbiAgICAvLyBkZWFscyB3aXRoIHByb3BlciBldmVudCBxdWV1ZWluZy5cbiAgICBvbihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vbihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gKHRoaXMubGlzdGVuZXJzIHx8PSBPYmplY3QuY3JlYXRlKG51bGwpKVxuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gKGxpc3RlbmVyc1tldmVudF0gfHw9IHtcbiAgICAgICAgICBjYWxsYmFja3M6IFtdLFxuICAgICAgICAgIHF1ZXVlOiBbXVxuICAgICAgICB9KVxuICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG9uY2UoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBvbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHRoaXMub2ZmKGV2ZW50LCBvbilcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9XG4gICAgICBvbi5jYWxsYmFjayA9IGNhbGxiYWNrIC8vIE5lZWRlZCBmb3IgYG9mZigpYCwgc2VlIGJlbG93LlxuICAgICAgcmV0dXJuIHRoaXMub24oZXZlbnQsIG9uKVxuICAgIH0sXG5cbiAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBldmVudHNcbiAgICAgICAgZGVsZXRlIHRoaXMubGlzdGVuZXJzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgaGFuZGxlcnMgZm9yIHRoaXMgZXZlbnRcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxpc3RlbmVyc1tldmVudF1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGEgc3BlY2lmaWMgaGFuZGxlcjogZmluZCB0aGUgaW5kZXggaW4gY2FsbGJhY2tzXG4gICAgICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2FsbGJhY2tzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgLy8gTWF0Y2ggYGNiLmNhbGxiYWNrYCBhbHNvLCBhcyB1c2VkIGJ5IGBvbmNlKClgLCBzZWUgIGFib3ZlOlxuICAgICAgICAgICAgICBjYiA9PiBjYiA9PT0gY2FsbGJhY2sgfHwgY2IuY2FsbGJhY2sgPT09IGNhbGxiYWNrXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAvLyBPbmx5IHF1ZXVlIGV2ZW50IGlmIHRoZXJlIGFjdHVhbGx5IGFyZSBsaXN0ZW5lcnMgZm9yIGl0LlxuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLFxuICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCB0eXBlOlxuICAgIGhhc0xpc3RlbmVycyhldmVudCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKGV2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5sZW5ndGggPiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISF0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZShldmVudCwgdGFyZ2V0KSB7XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUoZXYsIHRhcmdldClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vbihldmVudCwgKC4uLmFyZ3MpID0+IHRhcmdldC5lbWl0KGV2ZW50LCAuLi5hcmdzKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzQ3JlZGl0Q2FyZCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBjcmVkaXRjYXJkID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNDcmVkaXRDYXJkKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIGludmFsaWQnXG59XG4iLCJleHBvcnQgY29uc3QgZGVjaW1hbHMgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIGRlY2ltYWxzKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSBkZWNpbWFscyA9PT0gJyonID8gJysnIDogYHsxLCR7ZGVjaW1hbHN9fWBcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXlstK10/XFxcXGQqKFxcXFwuXFxcXGQke21hdGNofSk/JGApLnRlc3QodmFsdWUpXG4gIH0sXG5cbiAgbWVzc2FnZTogKHZhbHVlLCBkZWNpbWFscykgPT5cbiAgICBgbXVzdCBiZSBudW1lcmljIGFuZCBtYXkgY29udGFpbiAke1xuICAgICAgIWRlY2ltYWxzIHx8IGRlY2ltYWxzID09PSAnKicgPyAnJyA6IGRlY2ltYWxzXG4gICAgfSBkZWNpbWFsIHBvaW50c2Bcbn1cbiIsImltcG9ydCB7IGlzRG9tYWluIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGRvbWFpbiA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRG9tYWluKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGRvbWFpbidcbn1cbiIsImltcG9ydCB7IGlzRW1haWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZW1haWwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0VtYWlsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgYSB2YWxpZCBlbWFpbCdcbn1cbiIsImltcG9ydCB7IGlzSG9zdG5hbWUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgaG9zdG5hbWUgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0hvc3RuYW1lKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGhvc3QgbmFtZSdcbn1cbiIsImltcG9ydCB7IGlzSW50ZWdlciB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBpbnRlZ2VyID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNJbnRlZ2VyKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgd2hvbGUgbnVtYmVyJ1xufVxuIiwiZXhwb3J0IGNvbnN0IG1heCA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWF4KSA9PiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIG1heCkge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21heH0gb3IgbGVzc2BcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IG1pbiA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWluKSA9PiB2YWx1ZSA+PSBtaW4sXG4gIG1lc3NhZ2UodmFsdWUsIG1pbikge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21pbn0gb3IgbW9yZWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHBhc3N3b3JkID0ge1xuICAvLyBBbGxvdyBhbnkgdmFsdWUuIEZvciBub3cgdGhpcyBpcyBvbmx5IHVzZWQgYXMgYSBtYXJrZXIsIHRvIGFsbG93IHRoZVxuICAvLyByZXF1aXJlZCB2YWxpZGF0aW9uIHRvIGhhbmRsZSB1bmNoYW5nZWQgcGFzc3dvcmRzIHNlcGFyYXRlbHkuXG4gIHZhbGlkYXRlOiAoKSA9PiB0cnVlXG59XG4iLCJleHBvcnQgY29uc3QgcmFuZ2UgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIFttaW4sIG1heF0pID0+IHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIFttaW4sIG1heF0pIHtcbiAgICByZXR1cm4gYG11c3QgYmUgYmV0d2VlbiAke21pbn0gYW5kICR7bWF4fWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHJlcXVpcmVkID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBzZXR0aW5ncywgeyBwYXNzd29yZCB9KSA9PiAoXG4gICAgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09ICcnKSB8fFxuICAgIC8vIFBhc3N3b3JkIGZpZWxkcyB1c2UgYHVuZGVmaW5lZGAgYXMgb3Bwb3NlZCB0byBgbnVsbGAgd2hlbiB0aGV5J3JlIHNldFxuICAgIC8vIGJ1dCB1bmNoYW5nZWQsIGFsbG93IHRoaXMgdG8gcGFzcyB0aHJvdWdoOlxuICAgIChwYXNzd29yZCAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICApLFxuICBtZXNzYWdlOiAnaXMgcmVxdWlyZWQnLFxuICBudWxsaXNoOiB0cnVlXG59XG4iLCJpbXBvcnQgeyBpc1VybCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCB1cmwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc1VybCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSB2YWxpZCBVUkwnXG59XG4iLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCAqIGFzIHZhbGlkYXRpb25zIGZyb20gJy4uL3ZhbGlkYXRpb25zL2luZGV4LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWydlcnJvcnMnXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc1RvdWNoZWQ6IGZhbHNlLFxuICAgICAgaXNEaXJ0eTogZmFsc2UsXG4gICAgICBpc1ZhbGlkYXRlZDogZmFsc2UsXG4gICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGhhc0Vycm9ycygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZXJyb3JzXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHZhbGlkYXRlKG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZScsIHRoaXMuZGF0YVBhdGgsIHZhbHVlLCB0aGlzLnZhbGlkYXRpb25zKVxuICAgICAgZm9yIChjb25zdCBbcnVsZSwgc2V0dGluZ10gb2YgT2JqZWN0LmVudHJpZXModGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uYW1lc3BhY2VcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdmFsaWRhdGlvbnNbcnVsZV1cbiAgICAgICAgaWYgKHZhbGlkYXRvciAmJiAodmFsaWRhdG9yLm51bGxpc2ggfHwgdmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbGlkYXRlLCBtZXNzYWdlIH0gPSB2YWxpZGF0b3JcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlKHZhbHVlLCBzZXR0aW5nLCB0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNGdW5jdGlvbihtZXNzYWdlKVxuICAgICAgICAgICAgICAgID8gbWVzc2FnZSh2YWx1ZSwgc2V0dGluZywgdGhpcylcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvciwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IHRydWVcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gaXNWYWxpZFxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoZmFsc2UpXG4gICAgfSxcblxuICAgIG1hcmtUb3VjaGVkKCkge1xuICAgICAgdGhpcy5pc1RvdWNoZWQgPSB0cnVlXG4gICAgICAvLyBDbGVhciBjdXJyZW50bHkgZGlzcGxheWVkIGVycm9ycyB3aGVuIGZvY3VzaW5nIGlucHV0LlxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIG1hcmtEaXJ0eSgpIHtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIG9uIG5ldyBpbnB1dC5cbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBhZGRFcnJvcihlcnJvciwgYWRkTGFiZWwgPSBmYWxzZSkge1xuICAgICAgdGhpcy5lcnJvcnMgfHw9IFtdXG4gICAgICBpZiAoYWRkTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsIHx8IHRoaXMucGxhY2Vob2xkZXIgfHwgdGhpcy5uYW1lXG4gICAgICAgIGVycm9yID0gYFRoZSAke2xhYmVsfSBmaWVsZCAke2Vycm9yfS5gXG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIC8vIENvbnZlcnQgZnJvbSBBSlYgZXJyb3JzIG9iamVjdHMgdG8gYW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHRoaXMuZXJyb3JzID0gW11cbiAgICAgIGZvciAoY29uc3QgeyBtZXNzYWdlIH0gb2YgZXJyb3JzKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IobWVzc2FnZSwgdHJ1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLnNjcm9sbEludG9WaWV3KClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGdldEVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVycm9ycyA/IFsuLi50aGlzLmVycm9yc10gOiBudWxsXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5lcnJvcnMgPSBudWxsXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyaW5nLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hQWNjZXNzb3IoXG4gIGtleU9yRGF0YVBhdGgsXG4gIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBnZXQsIHNldCwgY2FsbGJhY2sgPSB0cnVlIH0gPSB7fVxuKSB7XG4gIC8vIGBrZXlPckRhdGFQYXRoYCBjYW4gYmUgYSBzaW1wbGUgcHJvcGVydHkga2V5LFxuICAvLyBvciBhIGRhdGEtcGF0aCBpbnRvIHN1Yi1wcm9wZXJ0aWVzLCBib3RoIGluIGFycmF5IG9yIHN0cmluZyBmb3JtYXQuXG4gIGlmIChpc1N0cmluZyhrZXlPckRhdGFQYXRoKSAmJiBrZXlPckRhdGFQYXRoLmluY2x1ZGVzKCcuJykpIHtcbiAgICBrZXlPckRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICB9XG4gIC8vIFVzZSB0aGUgbm9ybWFsaXplZCBkYXRhIHBhdGggZm9yIHRoZSBoYW5kbGluZyBvdmVycmlkZXNcbiAgY29uc3QgbmFtZSA9IG5vcm1hbGl6ZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgLy8gT25seSBkZXRlcm1pbmUgc2NoZW1hIHZhbHVlIGlmIHdlIGhhdmUgbm8gZ2V0dGVyLCBvciB0aGUgZ2V0dGVyXG4gICAgICAvLyB3YW50cyB0byByZWNlaXZlIHRoZSB2YWx1ZSBhbmQgcHJvY2VzcyBpdCBmdXJ0aGVyOlxuICAgICAgY29uc3QgdmFsdWUgPVxuICAgICAgICAhZ2V0IHx8IGdldC5sZW5ndGggPiAwXG4gICAgICAgICAgPyAvLyBOT1RFOiBCZWNhdXNlIGBzY2hlbWFgIG9iamVjdHMgYXJlIHJldHJpZXZlZCBmcm9tIGBtZXRhYCwgdGhleVxuICAgICAgICAgICAgLy8gZG9uJ3Qgc2VlbSB0byBiZSByZWFjdGl2ZS4gVG8gYWxsb3cgY2hhbmdlZCBpbiBgc2NoZW1hYCB2YWx1ZXMsXG4gICAgICAgICAgICAvLyBgc2V0KClgIHN0b3JlcyBjaGFuZ2VkIHZhbHVlcyBpbiB0aGUgc2VwYXJhdGUgYG92ZXJyaWRlc2Agb2JqZWN0LlxuICAgICAgICAgICAgdGhpcy5vdmVycmlkZXMgJiYgbmFtZSBpbiB0aGlzLm92ZXJyaWRlc1xuICAgICAgICAgICAgPyB0aGlzLm92ZXJyaWRlc1tuYW1lXVxuICAgICAgICAgICAgOiB0aGlzLmdldFNjaGVtYVZhbHVlKGtleU9yRGF0YVBhdGgsIHtcbiAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZixcbiAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICByZXR1cm4gZ2V0ID8gZ2V0LmNhbGwodGhpcywgdmFsdWUpIDogdmFsdWVcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICBpZiAoc2V0KSB7XG4gICAgICAgIHNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdmVycmlkZXMgfHw9IHt9XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0b3JlQWNjZXNzb3IobmFtZSwgeyBkZWZhdWx0OiBkZWYsIGdldCwgc2V0IH0gPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zOlxuICAgICAgICB2YWx1ZSA9IGlzRnVuY3Rpb24oZGVmKSA/IGRlZi5jYWxsKHRoaXMpIDogZGVmXG4gICAgICAgIC8vIFRyaWdnZXIgc2V0dGVyIGJ5IHNldHRpbmcgdmFsdWUgYW5kIGFjY2Vzc29yIHRvIGRlZmF1bHQ6XG4gICAgICAgIHRoaXNbbmFtZV0gPSB2YWx1ZVxuICAgICAgICAvLyBOb3cgYWNjZXNzIHN0b3JlIGFnYWluLCBmb3IgcmVhY3Rpdml0eSB0cmFja2luZ1xuICAgICAgICB0aGlzLmdldFN0b3JlKG5hbWUpXG4gICAgICB9XG4gICAgICAvLyBBbGxvdyB0aGUgcHJvdmlkZWQgZ2V0dGVyIHRvIGZ1cnRoZXIgY2hhbmdlIG9yIHByb2Nlc3MgdGhlIHZhbHVlXG4gICAgICAvLyByZXRyaWV2ZWQgZnJvbSB0aGUgc3RvcmU6XG4gICAgICByZXR1cm4gZ2V0ID8gZ2V0LmNhbGwodGhpcywgdmFsdWUpIDogdmFsdWVcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICAvLyBBbGxvdyB0aGUgcHJvdmlkZWQgc2V0dGVyIHRvIHJldHVybiBhIG5ldyB2YWx1ZSB0byBzZXQsIG9yIGRvIHRoZVxuICAgICAgLy8gc2V0dGluZyBpdHNlbGYsIGFuZCB0aGVuIHJldHVybiBgdW5kZWZpbmVkYDpcbiAgICAgIGlmICghc2V0IHx8ICh2YWx1ZSA9IHNldC5jYWxsKHRoaXMsIHZhbHVlKSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnNldFN0b3JlKG5hbWUsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFZhbGlkYXRpb25NaXhpbiBmcm9tICcuL1ZhbGlkYXRpb25NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBjb21wdXRlVmFsdWUgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRJdGVtLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGFzQXJyYXksIGNhbWVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdGlvbk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gTk9URTogV2hpbGUgYGRhdGFQYXRoYCBwb2ludHMgdG8gdGhlIGFjdHVhbCBgdmFsdWVgLCBgZGF0YWAgcmVwcmVzZW50c1xuICAgIC8vIHRoZSBgaXRlbWAgaW4gd2hpY2ggdGhlIGB2YWx1ZWAgaXMgY29udGFpbmVkLCB1bmRlciB0aGUga2V5IGBuYW1lYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHdpZHRoOiB7IHR5cGU6IFtOdW1iZXIsIFN0cmluZ10sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlZFZhbHVlOiB1bmRlZmluZWQsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnR5cGVcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZVZhbHVlKFxuICAgICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICB7IGNvbXBvbmVudDogdGhpcyB9XG4gICAgICAgIClcbiAgICAgICAgY29uc3QgeyBmb3JtYXQgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIHJldHVybiBmb3JtYXRcbiAgICAgICAgICA/IGZvcm1hdChuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyBwYXJzZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgaWYgKHBhcnNlKSB7XG4gICAgICAgICAgdmFsdWUgPSBwYXJzZShuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhcnNlZFZhbHVlID0gdmFsdWVcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1tdXRhdGluZy1wcm9wc1xuICAgICAgICB0aGlzLmRhdGFbdGhpcy5uYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhcmVudERhdGEoKSB7XG4gICAgICBjb25zdCBkYXRhID0gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICAgIHJldHVybiBkYXRhICE9PSB0aGlzLmRhdGEgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgLy8gV2UgY2FuIG9ubHkgZ2V0IHRoZSBwcm9jZXNzZWQgZGF0YSB0aHJvdWdoIHRoZSBzY2hlbWFDb21wb25lbnQsIGJ1dFxuICAgICAgLy8gdGhhdCdzIG5vdCBuZWNlc3NhcmlseSB0aGUgaXRlbSByZXByZXNlbnRlZCBieSB0aGlzIGNvbXBvbmVudC5cbiAgICAgIC8vIFNvbHV0aW9uOiBGaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGFuZCB0aGUgcHJvY2Vzc2VkIHN1Yi1pdGVtIGZyb20gdGhlcmU6XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGdldEl0ZW0oXG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5wcm9jZXNzZWREYXRhLFxuICAgICAgICAvLyBHZXQgdGhlIGRhdGFQYXRoIHJlbGF0aXZlIHRvIHRoZSBzY2hlbWFDb21wb25lbnQncyBkYXRhOlxuICAgICAgICB0aGlzLmRhdGFQYXRoLnNsaWNlKHNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aC5sZW5ndGgpLFxuICAgICAgICB0aGlzLm5lc3RlZFxuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50RGF0YVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWREYXRhXG4gICAgfSxcblxuICAgIGxhYmVsTm9kZSgpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmlzTW91bnRlZCA/IHRoaXMuJGVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgOiBudWxsXG4gICAgICByZXR1cm4gbm9kZT8ubWF0Y2hlcygnLmRpdG8tbGFiZWwnKSA/IG5vZGUgOiBudWxsXG4gICAgfSxcblxuICAgIHZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRvcHRpb25zLmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYGV4Y2x1ZGVkYCBmb3IgY29uc2lzdGVudCBuYW1pbmc/XG4gICAgZXhjbHVkZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4Y2x1ZGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHJlcXVpcmVkOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVxdWlyZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IE1vdmUgdGhlc2UgdG8gYSBzdWItY2xhc3MgY29tcG9uZW50IHVzZWQgZm9yIGFsbCBpbnB1dCBjb21wb25lbnRzP1xuICAgIHJlYWRvbmx5OiBnZXRTY2hlbWFBY2Nlc3NvcigncmVhZG9ubHknLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGF1dG9mb2N1czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9mb2N1cycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVG8gYmUgdXNlZCBmb3Igc2VsZWN0cyBhbmQgaW5wdXRzIG9ubHk/XG4gICAgY2xlYXJhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY2xlYXJhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BsYWNlaG9sZGVyJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICBhdXRvY29tcGxldGU6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvY29tcGxldGUnLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGV2ZW50cygpIHtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMuZ2V0RXZlbnRzKClcbiAgICAgIC8vIFJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgYWxsIHByb3ZpZGVzIG5vbi1yZWNvZ25pemVkIGV2ZW50cyxcbiAgICAgIC8vIGFzc3VtaW5nIHRoZXkgYXJlIG5hdGl2ZSBldmVudHMuXG4gICAgICAvLyBUT0RPOiBNb3ZlIHRvIHZ1ZTMtc3R5bGUgYG9uW0EtWl1gIGV2ZW50IGhhbmRsZXJzIG5hbWluZyB0aGF0IGFyZW4ndFxuICAgICAgLy8gbmFtZXNwYWNlZCBpbiBgc2NoZW1hLmV2ZW50c2Agb25jZSB0aGUgdHJhbnNpdGlvbiBpcyBjb21wbGV0ZS5cbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgT2JqZWN0LmtleXModGhpcy5zY2hlbWEuZXZlbnRzIHx8IHt9KSkge1xuICAgICAgICBldmVudHNbYG9uJHtjYW1lbGl6ZShldmVudCwgdHJ1ZSl9YF0gPz89ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmVtaXRFdmVudChldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGV2ZW50c1xuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBuYXRpdmVGaWVsZCwgdGV4dEZpZWxkIH0gPSB0aGlzLiRvcHRpb25zXG5cbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIC4uLnRoaXMuZXZlbnRzLFxuICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuXG4gICAgICBpZiAobmF0aXZlRmllbGQpIHtcbiAgICAgICAgYXR0cmlidXRlcy5uYW1lID0gdGhpcy5uYW1lXG4gICAgICAgIGlmICh0aGlzLmxhYmVsKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy50aXRsZSA9IHRoaXMubGFiZWxcbiAgICAgICAgfVxuICAgICAgICBhdHRyaWJ1dGVzLnJlYWRvbmx5ID0gdGhpcy5yZWFkb25seVxuICAgICAgICBhdHRyaWJ1dGVzLmF1dG9mb2N1cyA9IHRoaXMuYXV0b2ZvY3VzXG4gICAgICAgIGlmICh0ZXh0RmllbGQpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlclxuICAgICAgICAgIGF0dHJpYnV0ZXMuYXV0b2NvbXBsZXRlID0gdGhpcy5hdXRvY29tcGxldGVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH0sXG5cbiAgICB2YWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0geyAuLi50aGlzLmdldFZhbGlkYXRpb25zKCkgfVxuICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMucmVxdWlyZWQgPSB0cnVlXG4gICAgICB9XG4gICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgZGVmYXVsdCBydWxlcyBhbmQgYWRkIGFueSBuZXcgb25lczpcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLnJ1bGVzIHx8IHt9KSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRlbGV0ZSB2YWxpZGF0aW9uc1trZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnNba2V5XSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH0sXG5cbiAgICBzaG93Q2xlYXJCdXR0b24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGVhcmFibGUgJiYgdGhpcy52YWx1ZSAhPSBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICB0aGlzLnNldHVwU2NoZW1hRmllbGRzKClcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFByZXZlbnQgdW5uZXN0ZWQgdHlwZSBjb21wb25lbnRzIGZyb20gb3ZlcnJpZGluZyBwYXJlbnQgZGF0YSBwYXRoc1xuICAgICAgaWYgKHRoaXMubmVzdGVkKSB7XG4gICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlckNvbXBvbmVudCh0aGlzLCBhZGQpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldEV2ZW50cygpIHtcbiAgICAgIGNvbnN0IHsgb25Gb2N1cywgb25CbHVyLCBvbklucHV0LCBvbkNoYW5nZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHsgb25Gb2N1cywgb25CbHVyLCBvbklucHV0LCBvbkNoYW5nZSB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgYXN5bmMgc2Nyb2xsSW50b1ZpZXcoKSB7XG4gICAgICBhd2FpdCB0aGlzLmZvY3VzU2NoZW1hKClcbiAgICAgIHRoaXMuZ2V0Rm9jdXNFbGVtZW50KCk/LnNjcm9sbEludG9WaWV3Py4oe1xuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgIGJsb2NrOiAnY2VudGVyJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy5nZXRGb2N1c0VsZW1lbnQoKT8uZm9jdXM/LigpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGJsdXJFbGVtZW50KCkge1xuICAgICAgdGhpcy5nZXRGb2N1c0VsZW1lbnQoKT8uYmx1cj8uKClcbiAgICB9LFxuXG4gICAgZ2V0Rm9jdXNFbGVtZW50KCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGFzQXJyYXkodGhpcy4kcmVmcy5lbGVtZW50KVswXSA/PyB0aGlzXG4gICAgICByZXR1cm4gZWxlbWVudC4kZWwgPz8gZWxlbWVudFxuICAgIH0sXG5cbiAgICBhc3luYyBmb2N1c1NjaGVtYSgpIHtcbiAgICAgIC8vIEFsc28gZm9jdXMgdGhpcyBjb21wb25lbnQncyBzY2hlbWEgYW5kIHBhbmVsIGluIGNhc2UgaXQncyBhIHRhYi5cbiAgICAgIGF3YWl0IHRoaXMuc2NoZW1hQ29tcG9uZW50LmZvY3VzKClcbiAgICAgIGF3YWl0IHRoaXMudGFiQ29tcG9uZW50Py5mb2N1cygpXG4gICAgfSxcblxuICAgIGFzeW5jIGZvY3VzKCkge1xuICAgICAgYXdhaXQgdGhpcy5mb2N1c1NjaGVtYSgpXG4gICAgICB0aGlzLnNjcm9sbEludG9WaWV3KClcbiAgICAgIHRoaXMuZm9jdXNFbGVtZW50KClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuYmx1ckVsZW1lbnQoKVxuICAgIH0sXG5cbiAgICBjbGVhcigpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICB0aGlzLmJsdXIoKVxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgfSxcblxuICAgIG9uRm9jdXMoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlXG4gICAgICB0aGlzLm1hcmtUb3VjaGVkKClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdmb2N1cycpXG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlXG4gICAgICB0aGlzLnZhbGlkYXRlKClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdibHVyJylcbiAgICB9LFxuXG4gICAgb25JbnB1dCgpIHtcbiAgICAgIHRoaXMubWFya0RpcnR5KClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdpbnB1dCcpXG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScsIHtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIC8vIFByZXZlbnQgZW5kbGVzcyBwYXJzZSByZWN1cnNpb246XG4gICAgICAgICAgdmFsdWU6IHRoaXMucGFyc2VkVmFsdWUgIT09IHVuZGVmaW5lZCA/IHRoaXMucGFyc2VkVmFsdWUgOiB0aGlzLnZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIC8vIFBhc3MgYHNjaGVtYUNvbXBvbmVudGAgYXMgcGFyZW50LCBzbyBjaGFuZ2UgZXZlbnRzIGNhbiBwcm9wYWdhdGUgdXAuXG4gICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyB0b1JhdyB9IGZyb20gJ3Z1ZSdcblxuY29uc3QgdWlkTWFwID0gbmV3IFdlYWtNYXAoKVxuXG4vLyBHZW5lcmF0ZWQgYW5kIHJlbWVtYmVycyB1bmlxdWUgaWRzIHBlciBwYXNzZWQgb2JqZWN0IHVzaW5nIGEgd2VhayBtYXAuXG5sZXQgdWlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIGdldFVpZChpdGVtLCBnZXRJdGVtSWQgPSBudWxsKSB7XG4gIGNvbnN0IHJhdyA9IHRvUmF3KGl0ZW0pXG4gIGxldCBpZCA9IHVpZE1hcC5nZXQocmF3KVxuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBnZXRJdGVtSWQ/LihpdGVtKSB8fCBgQCR7Kyt1aWR9YFxuICAgIHVpZE1hcC5zZXQocmF3LCBpZClcbiAgfVxuICByZXR1cm4gaWRcbn1cbiIsImltcG9ydCB7IGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc0ludGVnZXIsXG4gIGFzQXJyYXksXG4gIHBhcnNlRGF0YVBhdGgsXG4gIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJ1xuXG4vLyBTY2hlbWFHcmFwaCBpcyBhIGNsYXNzIHRvIGNvbGxlY3Qgc2NoZW1hIGdyYXBoIG1ldGEgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG9cbi8vIHByb2Nlc3Mgc291cmNlcyBhbmQgcmVsYXRpb25zIGZvciB0aGUgZ2l2ZW4gdGFyZ2V0cyAnc2VydmVyJyBhbmQgJ2NsaXBib2FyZCcsXG4vLyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZTpcbi8vXG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VydmVyICAgIHwgY2xpcGJvYXJkIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiBmYWxzZSAgICAgICAgICAgfCBrZWVwIGlkICAgfCBrZWVwIGlkICAgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUsIHRlbXBvcmFyeSB8IHJlZiwgI3JlZiB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UsIHRlbXBvcmFyeSAgIHwgcmVmLCAjaWQgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUgICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI2lkICB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlLCB0ZW1wb3JhcnkgICAgfCByZWYsICNpZCAgfCByZWYsICNpZCAgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcblxuZXhwb3J0IGNsYXNzIFNjaGVtYUdyYXBoIHtcbiAgZ3JhcGggPSB7fVxuICByZWZlcmVuY2VzID0ge31cblxuICBzZXQoZGF0YVBhdGgsIHNldHRpbmdzLCBkZWZhdWx0cykge1xuICAgIGRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBsZXQgc3ViR3JhcGggPSB0aGlzLmdyYXBoXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGRhdGFQYXRoKSB7XG4gICAgICBjb25zdCBrZXkgPSBpc0ludGVnZXIoK3BhcnQpID8gJyonIDogcGFydFxuICAgICAgc3ViR3JhcGggPSBzdWJHcmFwaFtrZXldID8/PSB7fVxuICAgIH1cbiAgICBzdWJHcmFwaC4kc2V0dGluZ3MgPSB7XG4gICAgICAuLi5kZWZhdWx0cywgLy8gU2VlIGBhZGRTb3VyY2UoZGF0YVBhdGgpYFxuICAgICAgLi4uc3ViR3JhcGguJHNldHRpbmdzLFxuICAgICAgLi4uc2V0dGluZ3NcbiAgICB9XG4gIH1cblxuICBhZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIC8vIE9ubHkgc2V0IGByZWxhdGVkOiBmYWxzZWAgdGhyb3VnaCB0aGUgZGVmYXVsdHMsIGFzIGBzZXRTb3VyY2VSZWxhdGVkKClgXG4gICAgLy8gbWF5IGJlIGNhbGxlZCBiZWZvcmUgYGFkZFNvdXJjZSgpYCwgZGVwZW5kaW5nIG9uIHRoZSBncmFwaCBzdHJ1Y3R1cmUuXG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHsgdHlwZTogJ3NvdXJjZScsIHNjaGVtYSB9LCB7IHJlbGF0ZWQ6IGZhbHNlIH0pXG4gIH1cblxuICBzZXRTb3VyY2VSZWxhdGVkKGRhdGFQYXRoKSB7XG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHtcbiAgICAgIHJlbGF0ZWQ6IHRydWUsXG4gICAgICByZWZlcmVuY2U6IHRoaXMuZ2V0UmVmZXJlbmNlUHJlZml4KGRhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBhZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgdHlwZTogJ3JlbGF0aW9uJyxcbiAgICAgIHNjaGVtYSxcbiAgICAgIGludGVybmFsOiAhIXJlbGF0ZWREYXRhUGF0aCxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgocmVsYXRlZERhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBnZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpIHtcbiAgICByZXR1cm4gZGF0YVBhdGhcbiAgICAgID8gKHRoaXMucmVmZXJlbmNlc1tkYXRhUGF0aF0gPz89IG5hbm9pZCg2KSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgZmxhdHRlbigpIHtcbiAgICBjb25zdCBmbGF0dGVuID0gZ3JhcGggPT4ge1xuICAgICAgY29uc3QgZW50cmllcyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHsgJHNldHRpbmdzLCAuLi5zdWJHcmFwaCB9XSBvZiBPYmplY3QuZW50cmllcyhncmFwaCkpIHtcbiAgICAgICAgaWYgKCRzZXR0aW5ncykge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCAkc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3N1YktleSwgc2V0dGluZ3NdIG9mIGZsYXR0ZW4oc3ViR3JhcGgpKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtgJHtrZXl9LyR7c3ViS2V5fWAsIHNldHRpbmdzXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdHRlbih0aGlzLmdyYXBoKVxuICB9XG5cbiAgcHJvY2Vzcyhzb3VyY2VTY2hlbWEsIGRhdGEsIHsgdGFyZ2V0IH0pIHtcbiAgICBjb25zdCBjbGlwYm9hcmQgPSB0YXJnZXQgPT09ICdjbGlwYm9hcmQnXG4gICAgaWYgKGNsaXBib2FyZCkge1xuICAgICAgZGVsZXRlIGRhdGFbc291cmNlU2NoZW1hLmlkS2V5IHx8ICdpZCddXG4gICAgfVxuICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBzZXR0aW5nc10gb2YgdGhpcy5mbGF0dGVuKCkpIHtcbiAgICAgIGNvbnN0IHsgdHlwZSwgc2NoZW1hLCBpbnRlcm5hbCwgcmVsYXRlZCwgcmVmZXJlbmNlIH0gPSBzZXR0aW5nc1xuICAgICAgY29uc3Qgc291cmNlID0gdHlwZSA9PT0gJ3NvdXJjZSdcbiAgICAgIGNvbnN0IHJlbGF0aW9uID0gdHlwZSA9PT0gJ3JlbGF0aW9uJ1xuICAgICAgaWYgKHNvdXJjZSB8fCByZWxhdGlvbiAmJiBpbnRlcm5hbCkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoZGF0YSwgZGF0YVBhdGgsICgpID0+IG51bGwpXG4gICAgICAgIGNvbnN0IHJlbW92ZUlkID0gY2xpcGJvYXJkICYmIHNvdXJjZSAmJiAhcmVsYXRlZFxuICAgICAgICBjb25zdCByZWZlcmVuY2VJZCA9IChcbiAgICAgICAgICBjbGlwYm9hcmQgJiYgKFxuICAgICAgICAgICAgcmVsYXRpb24gJiYgaW50ZXJuYWwgfHxcbiAgICAgICAgICAgIHNvdXJjZSAmJiByZWxhdGVkXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYXNBcnJheSh2YWx1ZXMpLmZsYXQoKSkge1xuICAgICAgICAgIGNvbnN0IGlkS2V5ID0gKFxuICAgICAgICAgICAgc291cmNlICYmIHNjaGVtYS5pZEtleSB8fFxuICAgICAgICAgICAgcmVsYXRpb24gJiYgc2NoZW1hLnJlbGF0ZUJ5IHx8XG4gICAgICAgICAgICAnaWQnXG4gICAgICAgICAgKVxuICAgICAgICAgIGxldCBpZCA9IHZhbHVlPy5baWRLZXldXG4gICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChyZW1vdmVJZCkge1xuICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlSWQgfHwgaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgaWYgKGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBpZC5zbGljZSgxKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJlZktleSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgID8gLy8gQ2xpcGJvYXJkIGp1c3QgbmVlZHMgdGVtcG9yYXJ5IGlkcyB1bmRlciB0aGUgYWN0dWFsIGBpZEtleWBcbiAgICAgICAgICAgICAgICAgIGlkS2V5XG4gICAgICAgICAgICAgICAgOiAvLyBTZXJ2ZXIgd2FudHMgT2JqZWN0aW9uLXN0eWxlICcjaWQnIC8gJyNyZWYnIHBhaXJzLlxuICAgICAgICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgICAgICA/ICcjaWQnXG4gICAgICAgICAgICAgICAgICA6ICcjcmVmJ1xuICAgICAgICAgICAgICBjb25zdCByZXZWYWx1ZSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgID8gYEAke2lkfWBcbiAgICAgICAgICAgICAgICA6IC8vIEtlZXAgdGhlIGlkcyB1bmlxdWUgaW4gcmVmZXJlbmNlIGdyb3Vwcywgc2luY2UgdGhleVxuICAgICAgICAgICAgICAgICAgLy8gcmVmZXJlbmNlIGFjcm9zcyB0aGUgZnVsbCBncmFwaC5cbiAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgICAgPyBgJHtyZWZlcmVuY2V9LSR7aWR9YFxuICAgICAgICAgICAgICAgICAgOiBpZCAvLyBBIHRlbXBvcmFyeSBpZCB3aXRob3V0IGEgcmVsYXRlZCwganVzdCBwcmVzZXJ2ZSBpdC5cbiAgICAgICAgICAgICAgdmFsdWVbcmVmS2V5XSA9IHJldlZhbHVlXG4gICAgICAgICAgICAgIGlmIChyZWZLZXkgIT09IGlkS2V5KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2lkS2V5XVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhXG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzQXJyYXksXG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNCb29sZWFuLFxuICBpc051bWJlcixcbiAgaXNGdW5jdGlvbixcbiAgaXNEYXRlLFxuICBpc1JlZ0V4cCxcbiAgYXNBcnJheVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCB0eXBlQ2hlY2tlcnMgPSB7XG4gIEJvb2xlYW46IGlzQm9vbGVhbixcbiAgTnVtYmVyOiBpc051bWJlcixcbiAgU3RyaW5nOiBpc1N0cmluZyxcbiAgRGF0ZTogaXNEYXRlLFxuICBBcnJheTogaXNBcnJheSxcbiAgT2JqZWN0OiBpc09iamVjdCxcbiAgUmVnRXhwOiBpc1JlZ0V4cCxcbiAgRnVuY3Rpb246IGlzRnVuY3Rpb25cbn1cblxuLy8gRGVjbGFyZSB0aGVzZSBzZXBhcmF0ZWx5IGZyb20gdGhlIGB0eXBlQ29udmVydGVyc2Agb2JqZWN0LCB0byBwcmV2ZW50XG4vLyBCYWJlbCBpc3N1ZXMgd2l0aCBgT2JqZWN0YCBvdmVycmlkaW5nIHRoZSBnbG9iYWwgYE9iamVjdGA6XG5jb25zdCB0b0Jvb2xlYW4gPSB2YWx1ZSA9PiAhIXZhbHVlXG5jb25zdCB0b051bWJlciA9IHZhbHVlID0+ICt2YWx1ZVxuY29uc3QgdG9TdHJpbmcgPSB2YWx1ZSA9PiBTdHJpbmcodmFsdWUpXG5cbmNvbnN0IHRvRGF0ZSA9IHZhbHVlID0+XG4gIGlzRGF0ZSh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+XG4gIGlzQXJyYXkodmFsdWUpXG4gICAgPyB2YWx1ZVxuICAgIDogaXNTdHJpbmcodmFsdWUpXG4gICAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICAgIDogYXNBcnJheSh2YWx1ZSlcblxuY29uc3QgdG9PYmplY3QgPSB2YWx1ZSA9PlxuICBpc09iamVjdCh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiAvLyBJZiBhIE9iamVjdCBpcyBleHBlY3RlZCBidXQgYSBCb29sZWFuIHByb3ZpZGUsIGNvbnZlcnQgdG8gYW4gZW1wdHlcbiAgICAgIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICAgICAgdmFsdWUgPT09IHRydWVcbiAgICAgID8ge31cbiAgICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+XG4gIGlzUmVnRXhwKHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6IG5ldyBSZWdFeHAodmFsdWUpXG5cbmNvbnN0IHR5cGVDb252ZXJ0ZXJzID0ge1xuICBCb29sZWFuOiB0b0Jvb2xlYW4sXG4gIE51bWJlcjogdG9OdW1iZXIsXG4gIFN0cmluZzogdG9TdHJpbmcsXG4gIERhdGU6IHRvRGF0ZSxcbiAgQXJyYXk6IHRvQXJyYXksXG4gIE9iamVjdDogdG9PYmplY3QsXG4gIFJlZ0V4cDogdG9SZWdFeHBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkge1xuICAvLyBTZWUgaWYgYW55IG9mIHRoZSBleHBlY3QgdHlwZXMgbWF0Y2gsIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGV5IGRvOlxuICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKHR5cGVDaGVja2Vyc1t0eXBlLm5hbWVdPy4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGUodHlwZSwgdmFsdWUpIHtcbiAgY29uc3QgY29udmVydGVyID0gdHlwZSAmJiB0eXBlQ29udmVydGVyc1t0eXBlLm5hbWUgfHwgdHlwZV1cbiAgcmV0dXJuIGNvbnZlcnRlciA/IGNvbnZlcnRlcih2YWx1ZSkgOiB2YWx1ZVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERpdG9NaXhpbiBmcm9tICcuLi9taXhpbnMvRGl0b01peGluLmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0VWlkIH0gZnJvbSAnLi91aWQuanMnXG5pbXBvcnQgeyBTY2hlbWFHcmFwaCB9IGZyb20gJy4vU2NoZW1hR3JhcGguanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7IGlzTWF0Y2hpbmdUeXBlLCBjb252ZXJ0VHlwZSB9IGZyb20gJy4vdHlwZS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNBcnJheSxcbiAgaXNGdW5jdGlvbixcbiAgaXNQcm9taXNlLFxuICBpc01vZHVsZSxcbiAgYXNBcnJheSxcbiAgY2xvbmUsXG4gIGNhbWVsaXplLFxuICBhc3NpZ25EZWVwbHksXG4gIG1hcENvbmN1cnJlbnRseSxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBtYXJrUmF3IH0gZnJvbSAndnVlJ1xuXG5jb25zdCB0eXBlQ29tcG9uZW50cyA9IHt9XG5jb25zdCB1bmtub3duVHlwZVJlcG9ydGVkID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpIHtcbiAgdHlwZUNvbXBvbmVudHNbdHlwZV0gPSBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wb25lbnQodHlwZSwgYWxsb3dOdWxsID0gZmFsc2UpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gdHlwZUNvbXBvbmVudHNbdHlwZV0gfHwgbnVsbFxuICBpZiAoIWNvbXBvbmVudCAmJiAhYWxsb3dOdWxsICYmICF1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdKSB7XG4gICAgLy8gUmVwb3J0IGVhY2ggbWlzc2luZyB0eXBlIG9ubHkgb25jZSwgdG8gYXZvaWQgZmxvb2RpbmcgdGhlIGNvbnNvbGU6XG4gICAgdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSA9IHRydWVcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gRGl0byBjb21wb25lbnQgdHlwZTogJyR7dHlwZX0nYClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWFzLCBjYWxsYmFjaykge1xuICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgaWYgKGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpKSB7XG4gICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhzY2hlbWEuY29tcG9uZW50LCBzY2hlbWEubmFtZSwgMClcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1NjaGVtYShzY2hlbWEpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYS5jb21wb25lbnRzIHx8IHt9KSkge1xuICAgICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUsIDEpXG4gICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhbc2NoZW1hLCAuLi5nZXRUYWJTY2hlbWFzKHNjaGVtYSldLCBjYWxsYmFjaylcbiAgICA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZE5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiAoXG4gICAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoXG4gICAgICBzY2hlbWEsXG4gICAgICBjb21wb25lbnQgPT4gKGNhbGxiYWNrKGNvbXBvbmVudCkgPyBjb21wb25lbnQgOiB1bmRlZmluZWQpXG4gICAgKSA/PyBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gKFxuICAgIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKFxuICAgICAgc2NoZW1hLFxuICAgICAgY29tcG9uZW50ID0+IChjYWxsYmFjayhjb21wb25lbnQpID8gdHJ1ZSA6IHVuZGVmaW5lZClcbiAgICApID8/IGZhbHNlXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5TmVzdGVkU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIChcbiAgICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbXBvbmVudCA9PiAoY2FsbGJhY2soY29tcG9uZW50KSA/IHVuZGVmaW5lZCA6IGZhbHNlKVxuICAgICkgPz8gdHJ1ZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSkge1xuICByZXR1cm4gc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsICgpID0+IHRydWUpID8/IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NjaGVtYShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYSkgJiYgaXNTdHJpbmcoc2NoZW1hLnR5cGUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zvcm0oc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAnZm9ybSdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICd2aWV3J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUYWIoc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAndGFiJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYW5lbChzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdwYW5lbCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWVudShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdtZW51J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHNjaGVtYSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWEoc2NoZW1hLCB1bndyYXBNb2R1bGUgPSBmYWxzZSkge1xuICBpZiAoaXNGdW5jdGlvbihzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gc2NoZW1hKClcbiAgfVxuICBpZiAoaXNQcm9taXNlKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBhd2FpdCBzY2hlbWFcbiAgfVxuICBpZiAoaXNNb2R1bGUoc2NoZW1hKSkge1xuICAgIC8vIENvcHkgdG8gY29udmVydCBmcm9tIG1vZHVsZSB0byBvYmplY3Q6XG4gICAgc2NoZW1hID0geyAuLi5zY2hlbWEgfVxuICAgIC8vIFVud3JhcCBkZWZhdWx0IG9yIG5hbWVkIHNjaGVtYVxuICAgIGlmICghc2NoZW1hLm5hbWUgJiYgKHVud3JhcE1vZHVsZSB8fCBzY2hlbWEuZGVmYXVsdCkpIHtcbiAgICAgIC8vIEZpbHRlciBvdXQgaW50ZXJuYWwga2V5IGFkZGVkIGJ5IHZpdGUgLyB2dWUgMyBwbHVnaW4gd2hlbiBjaGFuZ2luZ1xuICAgICAgLy8gY29kZSBpbiBhIGR5bmFtaWNhbGx5IGltcG9ydGVkIHZ1ZSBjb21wb25lbnQsIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92aXRlanMvdml0ZS1wbHVnaW4tdnVlL2Jsb2IvYWJkZjVmNGYzMmQwMmFmNjQxZTVmNjA4NzFiZGUxNDUzNTU2OWIxZS9wYWNrYWdlcy9wbHVnaW4tdnVlL3NyYy9tYWluLnRzI0wxMzNcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEpLmZpbHRlcihrZXkgPT4ga2V5ICE9PSAnX3JlcmVuZGVyX29ubHknKVxuICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBrZXlzWzBdXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVtuYW1lXVxuICAgICAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYXMoXG4gIHVucmVzb2x2ZWRTY2hlbWFzLFxuICByZXNvbHZlSXRlbSA9IHJlc29sdmVTY2hlbWFcbikge1xuICBsZXQgc2NoZW1hcyA9IGlzRnVuY3Rpb24odW5yZXNvbHZlZFNjaGVtYXMpXG4gICAgPyB1bnJlc29sdmVkU2NoZW1hcygpXG4gICAgOiB1bnJlc29sdmVkU2NoZW1hc1xuICBzY2hlbWFzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWFzLCBmYWxzZSlcbiAgaWYgKGlzQXJyYXkoc2NoZW1hcykpIHtcbiAgICAvLyBUcmFuc2xhdGUgYW4gYXJyYXkgb2YgZHluYW1pYyBpbXBvcnQsIGVhY2ggaW1wb3J0aW5nIG9uZSBuYW1lZCBzY2hlbWFcbiAgICAvLyBtb2R1bGUgdG8gYW4gb2JqZWN0IHdpdGggbmFtZWQgZW50cmllcy5cbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgYXdhaXQgbWFwQ29uY3VycmVudGx5KFxuICAgICAgICBzY2hlbWFzLFxuICAgICAgICBhc3luYyBpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBbc2NoZW1hLm5hbWUsIHNjaGVtYV1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIGlmIChpc09iamVjdChzY2hlbWFzKSkge1xuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICBhc3luYyAoW2tleSwgaXRlbV0pID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgIH1cbiAgICAgIClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHNjaGVtYXNcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVWaWV3cyh1bnJlc29sdmVkVmlld3MpIHtcbiAgcmV0dXJuIHJlc29sdmVTY2hlbWFzKHVucmVzb2x2ZWRWaWV3cywgYXN5bmMgKHNjaGVtYSwgdW53cmFwTW9kdWxlKSA9PiB7XG4gICAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHVud3JhcE1vZHVsZSlcbiAgICBpZiAoIXNjaGVtYS5uYW1lICYmIGlzTWVudShzY2hlbWEpKSB7XG4gICAgICAvLyBHZW5lcmF0ZSBhIG5hbWUgZm9yIHN1Yi1tZW51cyBmcm9tIHRoZWlyIGxhYmVsIGlmIGl0J3MgbWlzc2luZy5cbiAgICAgIC8vIE5PVEU6IFRoaXMgaXMgbmV2ZXIgYWN0dWFsbHkgcmVmZXJlbmNlZCBmcm9tIGFueXdoZXJlLCBidXQgdGhleSBuZWVkXG4gICAgICAvLyBhIG5hbWUgYnkgd2hpY2ggdGhleSdyZSBzdG9yZWQgaW4gdGhlIHBhcmVudCBvYmplY3QuXG4gICAgICBzY2hlbWEubmFtZSA9IGNhbWVsaXplKHNjaGVtYS5sYWJlbClcbiAgICAgIHNjaGVtYS5pdGVtcyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKHNjaGVtYS5pdGVtcylcbiAgICB9XG4gICAgcmV0dXJuIHNjaGVtYVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlblZpZXdzKHZpZXdzKSB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXModmlld3MpLnJlZHVjZShcbiAgICAgIChlbnRyaWVzLCBba2V5LCBzY2hlbWFdKSA9PiB7XG4gICAgICAgIGlmIChpc01lbnUoc2NoZW1hKSkge1xuICAgICAgICAgIGVudHJpZXMucHVzaCguLi5PYmplY3QuZW50cmllcyhzY2hlbWEuaXRlbXMpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCBzY2hlbWFdKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgICB9LFxuICAgICAgW11cbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSB7XG4gIC8vIFJlc29sdmVzIGFzeW5jIHNjaGVtYSBjb21wb25lbnRzIGFuZCBhZGRzIERpdG9NaXhpbiBhbmQgVHlwZU1peGluIHRvIHRoZW0uXG4gIGxldCB7IGNvbXBvbmVudCB9ID0gc2NoZW1hXG4gIGlmIChjb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQgPSBhd2FpdCByZXNvbHZlU2NoZW1hKGNvbXBvbmVudCwgdHJ1ZSlcbiAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAvLyBQcmV2ZW50IHdhcm5pbmc6IFwiVnVlIHJlY2VpdmVkIGEgQ29tcG9uZW50IHdoaWNoIHdhcyBtYWRlIGEgcmVhY3RpdmVcbiAgICAgIC8vIG9iamVjdC4gVGhpcyBjYW4gbGVhZCB0byB1bm5lY2Vzc2FyeSBwZXJmb3JtYW5jZSBvdmVyaGVhZCwgYW5kIHNob3VsZFxuICAgICAgLy8gYmUgYXZvaWRlZCBieSBtYXJraW5nIHRoZSBjb21wb25lbnQgd2l0aCBgbWFya1Jhd2BcIjpcbiAgICAgIHNjaGVtYS5jb21wb25lbnQgPSBtYXJrUmF3KHtcbiAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICBtaXhpbnM6IFtEaXRvTWl4aW4sIFR5cGVNaXhpbiwgLi4uKGNvbXBvbmVudC5taXhpbnMgfHwgW10pXVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYXMpIHtcbiAgLy8gYHNjaGVtYXNgIGFyZSBvZiB0aGUgc2FtZSBwb3NzaWJsZSBmb3JtcyBhcyBwYXNzZWQgdG8gYGdldE5hbWVkU2NoZW1hcygpYFxuICBhd2FpdCBtYXBDb25jdXJyZW50bHkoT2JqZWN0LnZhbHVlcyhzY2hlbWFzIHx8IHt9KSwgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudClcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKFxuICBhcGksXG4gIHNjaGVtYSxcbiAgcm91dGVzID0gbnVsbCxcbiAgbGV2ZWwgPSAwXG4pIHtcbiAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICBjb25zdCBwcm9jZXNzID0gKGNvbXBvbmVudCwgbmFtZSwgcmVsYXRpdmVMZXZlbCkgPT4ge1xuICAgIHByb21pc2VzLnB1c2goXG4gICAgICBwcm9jZXNzU2NoZW1hQ29tcG9uZW50KFxuICAgICAgICBhcGksXG4gICAgICAgIGNvbXBvbmVudCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcm91dGVzLFxuICAgICAgICBsZXZlbCArIHJlbGF0aXZlTGV2ZWxcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEsIHByb2Nlc3MpXG4gIGl0ZXJhdGVTY2hlbWFDb21wb25lbnRzKGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpLCBwcm9jZXNzKVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudChcbiAgYXBpLFxuICBzY2hlbWEsXG4gIG5hbWUsXG4gIHJvdXRlcyA9IG51bGwsXG4gIGxldmVsID0gMFxuKSB7XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcblxuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgLy8gQWxzbyBwcm9jZXNzIG5lc3RlZCBwYW5lbCBzY2hlbWFzLlxuICAgIG1hcENvbmN1cnJlbnRseShcbiAgICAgIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpLFxuICAgICAgcGFuZWwgPT4gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBwYW5lbCwgcm91dGVzLCBsZXZlbClcbiAgICApLFxuICAgIC8vIERlbGVnYXRlIHNjaGVtYSBwcm9jZXNzaW5nIHRvIHRoZSBhY3R1YWwgdHlwZSBjb21wb25lbnRzLlxuICAgIGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LnByb2Nlc3NTY2hlbWE/LihcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYSxcbiAgICAgIG5hbWUsXG4gICAgICByb3V0ZXMsXG4gICAgICBsZXZlbFxuICAgIClcbiAgXSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NWaWV3KGNvbXBvbmVudCwgYXBpLCBzY2hlbWEsIG5hbWUsIGZ1bGxQYXRoID0gJycpIHtcbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuICBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUsIGZ1bGxQYXRoKVxuICBsZXQgY2hpbGRyZW4gPSBbXVxuICBpZiAoaXNWaWV3KHNjaGVtYSkpIHtcbiAgICBhd2FpdCBwcm9jZXNzTmVzdGVkU2NoZW1hcyhhcGksIHNjaGVtYSlcbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgY2hpbGRyZW4pXG4gIH0gZWxzZSBpZiAoaXNNZW51KHNjaGVtYSkpIHtcbiAgICBjaGlsZHJlbiA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgT2JqZWN0LmVudHJpZXMoc2NoZW1hLml0ZW1zKS5tYXAoYXN5bmMgKFtuYW1lLCBpdGVtXSkgPT5cbiAgICAgICAgcHJvY2Vzc1ZpZXcoY29tcG9uZW50LCBhcGksIGl0ZW0sIG5hbWUsIHNjaGVtYS5mdWxsUGF0aClcbiAgICAgIClcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZpZXcgc2NoZW1hOiAnJHtnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSl9J2ApXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBzY2hlbWEuZnVsbFBhdGgsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50LFxuICAgIG1ldGE6IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKSB7XG4gIGxldCBkZWZhdWx0cyA9IGFwaS5kZWZhdWx0c1tzY2hlbWEudHlwZV1cbiAgaWYgKGRlZmF1bHRzKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZGVmYXVsdHMpKSB7XG4gICAgICBkZWZhdWx0cyA9IGRlZmF1bHRzKHNjaGVtYSlcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KGRlZmF1bHRzKSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGVmYXVsdHMpKSB7XG4gICAgICAgIGlmIChzY2hlbWFba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NoZW1hW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjaGVtYVtrZXldID0gYXNzaWduRGVlcGx5KHZhbHVlLCBzY2hlbWFba2V5XSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc05lc3RlZFNjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKSB7XG4gIC8vIFByb2Nlc3MgZGVmYXVsdHMgZm9yIG5lc3RlZCBzY2hlbWFzLiBOb3RlIHRoYXQgdGhpcyBpcyBhbHNvIGRvbmUgd2hlblxuICAvLyBjYWxsaW5nIGBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cygpYCwgYnV0IHRoYXQgZnVuY3Rpb24gaXMgYXN5bmMsIGFuZCB3ZVxuICAvLyBuZWVkIGEgc3luYyB2ZXJzaW9uIHRoYXQgb25seSBoYW5kbGVzIHRoZSBkZWZhdWx0cyBmb3IgZmlsdGVycywgc2VlXG4gIC8vIGBnZXRGaWx0ZXJzUGFuZWwoKWAuXG4gIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSwgY29tcG9uZW50ID0+IHtcbiAgICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBjb21wb25lbnQpXG4gICAgY29uc3QgZm9ybXMgPSBnZXRGb3JtU2NoZW1hcyhjb21wb25lbnQpXG4gICAgZm9yIChjb25zdCBmb3JtIG9mIE9iamVjdC52YWx1ZXMoZm9ybXMpKSB7XG4gICAgICBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMoYXBpLCBmb3JtKVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgZnVsbFBhdGggPSBudWxsKSB7XG4gIC8vIFVzZWQgZm9yIHZpZXcgYW5kIHNvdXJjZSBzY2hlbWFzLCBzZWUgU291cmNlTWl4aW4uXG4gIHNjaGVtYS5uYW1lID8/PSBuYW1lXG4gIHNjaGVtYS5wYXRoID8/PSBhcGkubm9ybWFsaXplUGF0aChuYW1lKVxuICBpZiAoZnVsbFBhdGggIT09IG51bGwpIHtcbiAgICBzY2hlbWEuZnVsbFBhdGggPSBgJHtmdWxsUGF0aH0vJHtzY2hlbWEucGF0aH1gXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpIHtcbiAgLy8gRmlyc3QgcmVzb2x2ZSB0aGUgZm9ybXMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGJhY2sgb24gdGhlIHNjaGVtYS5cbiAgbGV0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMgfSA9IHNjaGVtYVxuICBpZiAoZm9ybXMpIHtcbiAgICBmb3JtcyA9IHNjaGVtYS5mb3JtcyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKGZvcm1zLCBmb3JtID0+XG4gICAgICBwcm9jZXNzRm9ybShhcGksIGZvcm0pXG4gICAgKVxuICB9IGVsc2UgaWYgKGZvcm0pIHtcbiAgICBmb3JtID0gc2NoZW1hLmZvcm0gPSBhd2FpdCBwcm9jZXNzRm9ybShhcGksIGZvcm0pXG4gIH0gZWxzZSBpZiAoaXNPYmplY3QoY29tcG9uZW50cykpIHtcbiAgICAvLyBOT1RFOiBQcm9jZXNzaW5nIGZvcm1zIGluIGNvbXB1dGVkIGNvbXBvbmVudHMgaXMgbm90IHN1cHBvcnRlZCwgc2luY2UgaXRcbiAgICAvLyBvbmx5IGNhbiBiZSBjb21wdXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGFjdHVhbCBkYXRhLlxuICAgIGZvcm0gPSB7XG4gICAgICB0eXBlOiAnZm9ybScsXG4gICAgICBjb21wb25lbnRzXG4gICAgfVxuICB9XG5cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9IC8vIE9ubHkgdXNlZCBmb3IgcHJvY2VzcyBsb29wIGJlbG93LlxuICBjb25zdCBjaGlsZHJlbiA9IFtdXG4gIGZvciAoY29uc3QgZm9ybSBvZiBPYmplY3QudmFsdWVzKGZvcm1zKSkge1xuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgZm9ybSwgY2hpbGRyZW4sIGxldmVsKVxuICB9XG4gIHJldHVybiBjaGlsZHJlblxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zvcm0oYXBpLCBzY2hlbWEpIHtcbiAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHRydWUpXG4gIGlmICghaXNGb3JtKHNjaGVtYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZm9ybSBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIGF3YWl0IHByb2Nlc3NOZXN0ZWRTY2hlbWFzKGFwaSwgc2NoZW1hKVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzVGFiKGFwaSwgc2NoZW1hKSB7XG4gIHNjaGVtYSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hLCB0cnVlKVxuICBpZiAoIWlzVGFiKHNjaGVtYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGFiIHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1BhbmVsKGFwaSwgc2NoZW1hKSB7XG4gIHNjaGVtYSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hLCB0cnVlKVxuICBpZiAoIWlzUGFuZWwoc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYW5lbCBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NOZXN0ZWRTY2hlbWFzKGFwaSwgc2NoZW1hKSB7XG4gIGNvbnN0IHsgdGFicywgcGFuZWxzIH0gPSBzY2hlbWFcbiAgaWYgKHRhYnMpIHtcbiAgICBzY2hlbWEudGFicyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKFxuICAgICAgdGFicyxcbiAgICAgIHRhYiA9PiBwcm9jZXNzVGFiKGFwaSwgdGFiKVxuICAgIClcbiAgfVxuICBpZiAocGFuZWxzKSB7XG4gICAgc2NoZW1hLnBhbmVscyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKFxuICAgICAgcGFuZWxzLFxuICAgICAgcGFuZWwgPT4gcHJvY2Vzc1BhbmVsKGFwaSwgcGFuZWwpXG4gICAgKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNGb3JtU2NoZW1hKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGJvdGggc2luZ2xlIGZvcm0gYW5kIG11bHRpcGxlIGZvcm1zIG5vdGF0aW9uLCBhcyB3ZWxsIGFzIGlubGluZWRcbiAgLy8gY29tcG9uZW50cy5cbiAgcmV0dXJuIChcbiAgICBpc1NjaGVtYShzY2hlbWEpICYmXG4gICAgaXNPYmplY3Qoc2NoZW1hLmZvcm0gfHwgc2NoZW1hLmZvcm1zIHx8IHNjaGVtYS5jb21wb25lbnRzKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gKFxuICAgIGlzU2NoZW1hKHNjaGVtYSkgJiZcbiAgICBPYmplY3Qua2V5cyhzY2hlbWE/LmZvcm1zIHx8IHt9KS5sZW5ndGggPiAxXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIChcbiAgICBpc1ZpZXcoc2NoZW1hKSAmJlxuICAgIGlzT2JqZWN0KHNjaGVtYS5jb21wb25lbnQpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCB7IHZpZXcgfSA9IHNjaGVtYVxuICBjb25zdCB2aWV3U2NoZW1hID0gdmlldyAmJiBjb250ZXh0LmZsYXR0ZW5lZFZpZXdzW3ZpZXddXG4gIHJldHVybiB2aWV3U2NoZW1hXG4gICAgPyAvLyBOT1RFOiBWaWV3cyBjYW4gaGF2ZSB0YWJzLCBpbiB3aGljaCBjYXNlIHRoZSB2aWV3IGNvbXBvbmVudCBpcyBuZXN0ZWRcbiAgICAgIC8vIGluIG9uZSBvZiB0aGUgdGFicywgZ28gZmluZCBpdC5cbiAgICAgIGZpbmROZXN0ZWRTY2hlbWFDb21wb25lbnQodmlld1NjaGVtYSwgaGFzRm9ybVNjaGVtYSkgfHwgbnVsbFxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgICA/IGNvbnRleHQuZmxhdHRlbmVkVmlld3Nbc2NoZW1hLnZpZXddXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICByZXR1cm4gISFnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdFZGl0UGF0aChzY2hlbWEsIGlkLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZpZXcgPSBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgaWYgKHZpZXcpIHtcbiAgICBjb25zdCBwYXRoID0gaXNTaW5nbGVDb21wb25lbnRWaWV3KHZpZXcpXG4gICAgICA/IHZpZXcuZnVsbFBhdGhcbiAgICAgIDogYCR7dmlldy5mdWxsUGF0aH0vJHt2aWV3LnBhdGh9YFxuICAgIHJldHVybiBgJHtwYXRofS8ke2lkfWBcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0LCBtb2RpZnlGb3JtKSB7XG4gIGNvbnN0IHZpZXdTY2hlbWEgPSBjb250ZXh0ICYmIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgaWYgKHZpZXdTY2hlbWEpIHtcbiAgICBzY2hlbWEgPSB2aWV3U2NoZW1hXG4gIH0gZWxzZSBpZiAoc2NoZW1hLnZpZXcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdmlldzogJyR7c2NoZW1hLnZpZXd9J2ApXG4gIH1cblxuICBsZXQgeyBmb3JtLCBmb3JtcyB9ID0gc2NoZW1hXG4gIGlmICghZm9ybSAmJiAhZm9ybXMpIHtcbiAgICBjb25zdCB7IG5hbWUsIGNvbXBhY3QsIGNsaXBib2FyZCwgdGFicywgY29tcG9uZW50cyB9ID0gc2NoZW1hXG4gICAgaWYgKGNvbXBvbmVudHMgfHwgdGFicykge1xuICAgICAgLy8gQ29udmVydCBpbmxpbmVkIGZvcm1zIHRvIHN0YW5kLWFsb25lIGZvcm1zLCBzdXBwb3J0aW5nIGBuYW1lYCxcbiAgICAgIC8vIGBjb21wYWN0YCwgYGNsaXBib2FyZGAsIGB0YWJzYCBhbmQgYGNvbXBvbmVudHNgIHNldHRpbmdzLlxuICAgICAgZm9ybSA9IHsgdHlwZTogJ2Zvcm0nLCBuYW1lLCBjb21wYWN0LCBjbGlwYm9hcmQsIHRhYnMsIGNvbXBvbmVudHMgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBgZm9ybXNgLCBgZm9ybWAgb3IgYGNvbXBvbmVudHNgLCByZXR1cm4gYW5kIGVtcHR5IGBmb3Jtc2Agb2JqZWN0LlxuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuICB9XG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGZvcm1zKS5tYXAoKFt0eXBlLCBmb3JtXSkgPT4ge1xuICAgICAgLy8gU3VwcG9ydCBgc2NoZW1hLmNvbXBvbmVudHNgIGNhbGxiYWNrcyB0byBjcmVhdGUgY29tcG9uZW50cyBvbiB0aGUgZmx5LlxuICAgICAgaWYgKGNvbnRleHQgJiYgaXNGdW5jdGlvbihmb3JtLmNvbXBvbmVudHMpKSB7XG4gICAgICAgIGZvcm0gPSB7XG4gICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICBjb21wb25lbnRzOiBmb3JtLmNvbXBvbmVudHMoY29udGV4dClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFt0eXBlLCBtb2RpZnlGb3JtPy4oZm9ybSkgPz8gZm9ybV1cbiAgICB9KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSkge1xuICByZXR1cm4gZm9ybXNbaXRlbT8udHlwZV0gfHwgZm9ybXMuZGVmYXVsdCB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCksIGl0ZW0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBhY3Qoc2NoZW1hKSB7XG4gIHJldHVybiAhIXNjaGVtYS5jb21wYWN0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lubGluZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShzY2hlbWEuaW5saW5lZCB8fCBzY2hlbWEuY29tcG9uZW50cylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmVzdGVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoc2NoZW1hLm5lc3RlZCB8fCBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0TmVzdGVkID09PSB0cnVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTGFiZWwoc2NoZW1hLCBnZW5lcmF0ZUxhYmVscykge1xuICBjb25zdCB7IGxhYmVsIH0gPSBzY2hlbWFcbiAgcmV0dXJuIChcbiAgICBsYWJlbCAhPT0gZmFsc2UgJiYgKFxuICAgICAgISFsYWJlbCB8fFxuICAgICAgZ2VuZXJhdGVMYWJlbHMgJiYgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZ2VuZXJhdGVMYWJlbFxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb21pdFNwYWNpbmcoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFR5cGVPcHRpb25zKHNjaGVtYSk/Lm9taXRTcGFjaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFWYWx1ZShcbiAga2V5T3JEYXRhUGF0aCxcbiAgeyB0eXBlLCBzY2hlbWEsIGNhbGxiYWNrID0gdHJ1ZSwgZGVmYXVsdDogZGVmLCBjb250ZXh0IH0gPSB7fVxuKSB7XG4gIGNvbnN0IHR5cGVzID0gdHlwZSAmJiBhc0FycmF5KHR5cGUpXG4gIC8vIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBkYXRhLXBhdGhzIGluIGBrZXlPckRhdGFQYXRoYCBjYW4gb25seSBiZVxuICAvLyBwcm92aWRlZCBpbiBpbiBhcnJheSBmb3JtYXQgaGVyZTpcbiAgbGV0IHZhbHVlID0gc2NoZW1hXG4gICAgPyBpc0FycmF5KGtleU9yRGF0YVBhdGgpXG4gICAgICA/IGdldFZhbHVlQXREYXRhUGF0aChzY2hlbWEsIGtleU9yRGF0YVBhdGgsICgpID0+IHVuZGVmaW5lZClcbiAgICAgIDogc2NoZW1hW2tleU9yRGF0YVBhdGhdXG4gICAgOiB1bmRlZmluZWRcblxuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGRlZikgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCBkZWYpKSB7XG4gICAgICAvLyBTdXBwb3J0IGBkZWZhdWx0KClgIGZ1bmN0aW9ucyBmb3IgYW55IHR5cGUgZXhjZXB0IGBGdW5jdGlvbmA6XG4gICAgICBkZWYgPSBkZWYoY29udGV4dClcbiAgICB9XG4gICAgcmV0dXJuIGRlZlxuICB9XG5cbiAgaWYgKGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuICAvLyBBbnkgc2NoZW1hIHZhbHVlIGhhbmRsZWQgdGhyb3VnaCBgZ2V0U2NoZW1hVmFsdWUoKWAgY2FuIHByb3ZpZGVcbiAgLy8gYSBmdW5jdGlvbiB0aGF0J3MgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsdWUgaXMgZXZhbHVhdGVkOlxuICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICB2YWx1ZSA9IHZhbHVlKGNvbnRleHQpXG4gIH1cbiAgLy8gTm93IGZpbmFsbHkgc2VlIGlmIHdlIGNhbiBjb252ZXJ0IHRvIHRoZSBleHBlY3QgdHlwZXMuXG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBjb25zdCBjb252ZXJ0ZWQgPSBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSlcbiAgICAgIGlmIChjb252ZXJ0ZWQgIT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBjb252ZXJ0ZWRcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRSZW5kZXJTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIHJldHVybiAoXG4gICAgZ2V0U2NoZW1hVmFsdWUoJ2lmJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbnRleHQsXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSkgJiYgKFxuICAgICAgIWhhc05lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hKSB8fFxuICAgICAgc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNvbXBvbmVudCA9PlxuICAgICAgICBzaG91bGRSZW5kZXJTY2hlbWEoY29tcG9uZW50LCBjb250ZXh0KVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGRlZmF1bHQgdmFsdWVzIGJvdGggb24gc2NoZW1hIGFuZCBvbiBjb21wb25lbnQgbGV2ZWwuXG4gIC8vIE5PVEU6IEF0IHRoZSB0aW1lIG9mIGNyZWF0aW9uLCBjb21wb25lbnRzIG1heSBub3QgYmUgaW5zdGFudGlhdGVkLCAoZS5nLiBpZlxuICAvLyBlbnRyaWVzIGFyZSBjcmVhdGVkIHRocm91Z2ggbmVzdGVkIGZvcm1zLCB0aGUgcGFyZW50IGZvcm0gaXNuJ3QgbW91bnRlZCkgc29cbiAgLy8gd2UgY2FuJ3QgdXNlIGBkYXRhUGF0aGAgdG8gZ2V0IHRvIGNvbXBvbmVudHMsIGFuZCB0aGUgYGRlZmF1bHRWYWx1ZWAgZnJvbVxuICAvLyB0aGVyZS4gVGhhdCdzIHdoeSBgZGVmYXVsdFZhbHVlYCBpcyBkZWZpbmVkIHN0YXRpY2FsbHkgaW4gdGhlIGNvbXBvbmVudHM6XG4gIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHNjaGVtYS5kZWZhdWx0XG4gIGNvbnN0IHZhbHVlID1cbiAgICBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgPyBkZWZhdWx0VmFsdWVcbiAgICAgIDogZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdFZhbHVlXG4gIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgID8gdmFsdWUoc2NoZW1hKVxuICAgIDogY2xvbmUodmFsdWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSB7XG4gIGNvbnN0IHR5cGVPcHRpb25zID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKVxuICByZXR1cm4gISEoXG4gICAgdHlwZU9wdGlvbnM/LmV4Y2x1ZGVWYWx1ZSB8fCB0eXBlT3B0aW9ucz8uaWdub3JlTWlzc2luZ1ZhbHVlPy4oc2NoZW1hKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0VmFsdWVzKHNjaGVtYSwgZGF0YSA9IHt9LCBjb21wb25lbnQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YTogZGF0YSB9XG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUpID0+IHtcbiAgICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgICAgZGF0YVtuYW1lXSA9IGdldERlZmF1bHRWYWx1ZShzY2hlbWEpXG4gICAgfVxuICB9XG5cbiAgLy8gU2V0cyB1cCBhIGRhdGEgb2JqZWN0IHRoYXQgaGFzIGtleXMgd2l0aCBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsXG4gIC8vIGZvcm0gZmllbGRzLCBzbyB0aGV5IGNhbiBiZSBjb3JyZWN0bHkgd2F0Y2hlZCBmb3IgY2hhbmdlcy5cbiAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhLFxuICAgIG51bGwsXG4gICAgbnVsbCxcbiAgICBwcm9jZXNzQmVmb3JlLFxuICAgIG51bGwsXG4gICAgb3B0aW9uc1xuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQgPSBudWxsLFxuICByb290RGF0YSA9IGNvbXBvbmVudD8ucm9vdERhdGFcbn0gPSB7fSkge1xuICBjb25zdCB7IGNvbXB1dGUgfSA9IHNjaGVtYVxuICBpZiAoY29tcHV0ZSkge1xuICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZShcbiAgICAgIG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICAvLyBPdmVycmlkZSB2YWx1ZSB0byBwcmV2ZW50IGVuZGxlc3MgcmVjdXJzaW9uIHRocm91Z2ggY2FsbGluZyB0aGVcbiAgICAgICAgLy8gZ2V0dGVyIGZvciBgdGhpcy52YWx1ZWAgaW4gYERpdG9Db250ZXh0YDpcbiAgICAgICAgdmFsdWU6IGRhdGFbbmFtZV0sXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICByb290RGF0YVxuICAgICAgfSlcbiAgICApXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEFjY2VzcyBgZGF0YVtuYW1lXWAgZGlyZWN0bHkgdG8gdXBkYXRlIHRoZSB2YWx1ZSB3aXRob3V0IGNhbGxpbmdcbiAgICAgIC8vIHBhcnNlKCk6XG4gICAgICBkYXRhW25hbWVdID0gdmFsdWVcbiAgICB9XG4gIH1cbiAgLy8gSWYgdGhlIHZhbHVlIGlzIHN0aWxsIG1pc3NpbmcgYWZ0ZXIgY29tcHV0ZSwgc2V0IHRoZSBkZWZhdWx0IGZvciBpdDpcbiAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkpIHtcbiAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSlcbiAgfVxuICAvLyBOb3cgYWNjZXNzIHRoZSB2YWx1ZS4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHJlYWN0aXZpdHkgYW5kIG5lZWRzIHRvXG4gIC8vIGhhcHBlbiBhZnRlciBhbGwgcHJpb3IgbWFuaXB1bGF0aW9uIG9mIGBkYXRhW25hbWVdYCwgc2VlIGFib3ZlOlxuICByZXR1cm4gZGF0YVtuYW1lXVxufVxuXG5mdW5jdGlvbiBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBpdGVtLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnNjaGVtYU9ubHkpIHtcbiAgICBjb25zdCBjb3B5ID0ge31cbiAgICBjb25zdCB7IGlkS2V5ID0gJ2lkJywgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgIGNvbnN0IGlkID0gaXRlbVtpZEtleV1cbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29weVtpZEtleV0gPSBpZFxuICAgIH1cbiAgICAvLyBDb3B5IG92ZXIgdHlwZSBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICBpZiAoaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzb3VyY2VTY2hlbWEpKSB7XG4gICAgICBjb3B5LnR5cGUgPSBpdGVtLnR5cGVcbiAgICB9XG4gICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICBjb3B5W29yZGVyS2V5XSA9IGl0ZW1bb3JkZXJLZXldXG4gICAgfVxuICAgIHJldHVybiBjb3B5XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NEYXRhKHNjaGVtYSwgc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQsXG4gIHJvb3REYXRhLFxuICBzY2hlbWFPbmx5LCAvLyB3aGV0aGVyIHRvIG9ubHkgaW5jbHVkZSBkYXRhIGNvdmVyZWQgYnkgdGhlIHNjaGVtYSwgb3IgYWxsIGRhdGFcbiAgdGFyZ2V0XG59ID0ge30pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YSwgc2NoZW1hT25seSwgdGFyZ2V0IH1cbiAgY29uc3QgcHJvY2Vzc2VkRGF0YSA9IGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGRhdGEsIG9wdGlvbnMpXG4gIGNvbnN0IGdyYXBoID0gbmV3IFNjaGVtYUdyYXBoKClcblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBsZXQgdmFsdWUgPSBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgb3B0aW9ucylcbiAgICAvLyBUaGUgc2NoZW1hIGV4cGVjdHMgdGhlIGB3cmFwUHJpbWl0aXZlc2AgdHJhbnNmb3JtYXRpb25zIHRvIGJlIHByZXNlbnQgb25cbiAgICAvLyB0aGUgZGF0YSB0aGF0IGl0IGlzIGFwcGxpZWQgb24sIHNvIHdhcnAgYmVmb3JlIGFuZCB1bndyYXAgYWZ0ZXIuXG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBvcmRlcktleSwgaWRLZXkgPSAnaWQnIH0gPSBzY2hlbWFcbiAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcChlbnRyeSA9PiAoe1xuICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IGVudHJ5XG4gICAgICAgIH0pKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWx3YXlzIHNoYWxsb3ctY2xvbmUgYXJyYXkgdmFsdWVzOlxuICAgICAgICB2YWx1ZSA9IFsuLi52YWx1ZV1cbiAgICAgIH1cbiAgICAgIGlmIChvcmRlcktleSAmJiB0YXJnZXQgPT09ICdjbGlwYm9hcmQnKSB7XG4gICAgICAgIC8vIFNvcnQgdGhlIGRhdGEgYmFjayBpbnRvIHRoZSBuYXR1cmFsIHNlcXVlbmNlIGFzIGRlZmluZWQgYnkgdGhlaXIgaWRzLFxuICAgICAgICAvLyBzbyBjb3B5LXBhc3RpbmcgYmV0d2VlbiBzZXJ2ZXJzIChlLmcuIG5lc3RlZCBmb250LWN1dHMgb24gTGluZXRvKVxuICAgICAgICAvLyBuYXR1cmFsbHkgZ2V0cyBtYXBwZWQgdG8gdGhlIHNhbWUgZW50cmllcyBpbiB0aGUgZ3JhcGguXG4gICAgICAgIHZhbHVlLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBjb25zdCBpZDEgPSBhPy5baWRLZXldXG4gICAgICAgICAgY29uc3QgaWQyID0gYj8uW2lkS2V5XVxuICAgICAgICAgIHJldHVybiBpZDEgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMSlcbiAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgOiBpZDIgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMilcbiAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICA6IGlkMSAtIGlkMlxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgfVxuXG4gIGNvbnN0IHByb2Nlc3NBZnRlciA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgZXhjbHVkZSwgcHJvY2VzcyB9ID0gc2NoZW1hXG4gICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YVtuYW1lXVxuXG4gICAgY29uc3QgdHlwZU9wdGlvbnMgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpXG5cbiAgICAvLyBOT1RFOiBXZSBkb24ndCBjYWNoZSB0aGlzIGNvbnRleHQsIHNpbmNlIGB2YWx1ZWAgaXMgY2hhbmdpbmcuXG4gICAgY29uc3QgZ2V0Q29udGV4dCA9ICgpID0+XG4gICAgICBuZXcgRGl0b0NvbnRleHQoY29tcG9uZW50LCB7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICByb290RGF0YTogb3B0aW9ucy5yb290RGF0YSxcbiAgICAgICAgLy8gUGFzcyB0aGUgYWxyZWFkeSBwcm9jZXNzZWQgZGF0YSB0byBgcHJvY2VzcygpYCwgc28gaXQgY2FuIGJlIG1vZGlmaWVkXG4gICAgICAgIC8vIHRocm91Z2ggYHByb2Nlc3NlZEl0ZW1gIGZyb20gdGhlcmUuXG4gICAgICAgIHByb2Nlc3NlZERhdGFcbiAgICAgIH0pXG5cbiAgICAvLyBGaXJzdCB1bndyYXAgdGhlIHdyYXBwZWQgcHJpbWl0aXZlcyBhZ2FpbiwgdG8gYnJpbmcgdGhlIGRhdGEgYmFjayBpbnRvXG4gICAgLy8gaXRzIG5hdGl2ZSBmb3JtLiBTZSBgcHJvY2Vzc0JlZm9yZSgpYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgfVxuXG4gICAgLy8gRWFjaCBjb21wb25lbnQgdHlwZSBjYW4gcHJvdmlkZSBpdHMgb3duIHN0YXRpYyBgcHJvY2Vzc1ZhbHVlKClgIG1ldGhvZFxuICAgIC8vIHRvIGNvbnZlcnQgdGhlIGRhdGEgZm9yIHN0b3JhZ2UuXG4gICAgY29uc3QgcHJvY2Vzc1ZhbHVlID0gdHlwZU9wdGlvbnM/LnByb2Nlc3NWYWx1ZVxuICAgIGlmIChwcm9jZXNzVmFsdWUpIHtcbiAgICAgIHZhbHVlID0gcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaClcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIHVzZXIncyBgcHJvY2VzcygpYCBjYWxsYmFjayBuZXh0LCBpZiBvbmUgaXMgcHJvdmlkZWQsIHNvIHRoYXRcbiAgICAvLyBpdCBjYW4gbW9kaWZ5IGRhdGEgaW4gYHByb2Nlc3NlZERhdGFgIGV2ZW4gaWYgaXQgcHJvdmlkZXMgYGV4Y2x1ZGU6IHRydWVgXG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIHZhbHVlID0gcHJvY2VzcyhnZXRDb250ZXh0KCkpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdHlwZU9wdGlvbnM/LmV4Y2x1ZGVWYWx1ZSB8fFxuICAgICAgLy8gU3VwcG9ydCBmdW5jdGlvbnMgbmV4dCB0byBib29sZWFucyBmb3IgYHNjaGVtYS5leGNsdWRlYDpcbiAgICAgIGV4Y2x1ZGUgPT09IHRydWUgfHxcbiAgICAgIGlzRnVuY3Rpb24oZXhjbHVkZSkgJiYgZXhjbHVkZShnZXRDb250ZXh0KCkpXG4gICAgKSB7XG4gICAgICBkZWxldGUgcHJvY2Vzc2VkRGF0YVtuYW1lXVxuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICBzY2hlbWEsXG4gICAgZGF0YSxcbiAgICBkYXRhUGF0aCxcbiAgICBwcm9jZXNzZWREYXRhLFxuICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgcHJvY2Vzc0FmdGVyLFxuICAgIG9wdGlvbnNcbiAgKVxuXG4gIHJldHVybiBncmFwaC5wcm9jZXNzKHNvdXJjZVNjaGVtYSwgcHJvY2Vzc2VkRGF0YSwgb3B0aW9ucylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFEYXRhKFxuICBzY2hlbWEsXG4gIGRhdGEsXG4gIGRhdGFQYXRoLFxuICBwcm9jZXNzZWREYXRhLFxuICBwcm9jZXNzQmVmb3JlLFxuICBwcm9jZXNzQWZ0ZXIsXG4gIG9wdGlvbnNcbikge1xuICBjb25zdCBwcm9jZXNzQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgPT4ge1xuICAgIGNvbnN0IGdldERhdGFQYXRoID0gKGRhdGFQYXRoLCB0b2tlbikgPT5cbiAgICAgIGRhdGFQYXRoICE9IG51bGxcbiAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pXG4gICAgICAgIDogbnVsbFxuXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKCFpc05lc3RlZChjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIHVubmVzdGVkIGNvbXBvbmVudHMuXG4gICAgICAgICAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhLFxuICAgICAgICAgICAgcHJvY2Vzc0JlZm9yZSxcbiAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50RGF0YVBhdGggPSBnZXREYXRhUGF0aChkYXRhUGF0aCwgbmFtZSlcblxuICAgICAgICAgIGNvbnN0IHByb2Nlc3NJdGVtID0gKGl0ZW0sIGluZGV4ID0gbnVsbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbURhdGFQYXRoID1cbiAgICAgICAgICAgICAgaW5kZXggIT09IG51bGxcbiAgICAgICAgICAgICAgICA/IGdldERhdGFQYXRoKGNvbXBvbmVudERhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICAgICAgICA6IGNvbXBvbmVudERhdGFQYXRoXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KG9wdGlvbnMuY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIHNjaGVtYTogY29tcG9uZW50U2NoZW1hLFxuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBkYXRhUGF0aDogY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY29uc3QgZ2V0Rm9ybXMgPSAoXG4gICAgICAgICAgICAgIGdldFR5cGVPcHRpb25zKGNvbXBvbmVudFNjaGVtYSk/LmdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyB8fFxuICAgICAgICAgICAgICBnZXRGb3JtU2NoZW1hc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgZm9ybXMgPSBnZXRGb3Jtcyhjb21wb25lbnRTY2hlbWEsIGNvbnRleHQpXG4gICAgICAgICAgICBjb25zdCBmb3JtID0gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZm9ybXMsIGl0ZW0pXG4gICAgICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgICBjb25zdCBwcm9jZXNzZWRJdGVtID0gcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgICAgICAgID8gY2xvbmVJdGVtKGNvbXBvbmVudFNjaGVtYSwgaXRlbSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgICAgICAgICAgICAgIGZvcm0sXG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBpdGVtRGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEl0ZW1zIHdpdGhvdXQgZm9ybXMgc3RpbGwgZ2V0IGZ1bGx5IChidXQgc2hhbGxvd2x5KSBjbG9uZWQuXG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgb3V0IG9mIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkIC8gdXNlZCBhdCBhbGw/XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NCZWZvcmU/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YSA/IHByb2Nlc3NlZERhdGFbbmFtZV0gOiBkYXRhW25hbWVdXG4gICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgaGFzRm9ybVNjaGVtYShjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gbmVzdGVkIGZvcm0gaXRlbXMuXG4gICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgLy8gT3B0aW1pemF0aW9uOiBObyBuZWVkIHRvIGNvbGxlY3QgdmFsdWVzIGlmIHdlJ3JlIG5vdCBjbG9uaW5nIVxuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlLmZvckVhY2gocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NJdGVtKHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3NlZERhdGEpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJvY2Vzc0FmdGVyPy4oXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGNvbXBvbmVudERhdGFQYXRoLFxuICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKVxuICBmb3IgKGNvbnN0IHRhYiBvZiBnZXRUYWJTY2hlbWFzKHNjaGVtYSkpIHtcbiAgICBwcm9jZXNzQ29tcG9uZW50cyh0YWIuY29tcG9uZW50cylcbiAgfVxuICBmb3IgKGNvbnN0IHBhbmVsIG9mIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpKSB7XG4gICAgcHJvY2Vzc0NvbXBvbmVudHMocGFuZWwuY29tcG9uZW50cylcbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzZWREYXRhIHx8IGRhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWVkU2NoZW1hcyhzY2hlbWFzLCBkZWZhdWx0cykge1xuICBjb25zdCB0b09iamVjdCA9IChhcnJheSwgdG9TY2hlbWEpID0+IHtcbiAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgPyBhcnJheS5yZWR1Y2UoKG9iamVjdCwgdmFsdWUpID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0b1NjaGVtYSh2YWx1ZSlcbiAgICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgICBvYmplY3Rbc2NoZW1hLm5hbWVdID1cbiAgICAgICAgICAgICAgc2NoZW1hICYmIGRlZmF1bHRzXG4gICAgICAgICAgICAgICAgPyB7IC4uLmRlZmF1bHRzLCAuLi5zY2hlbWEgfVxuICAgICAgICAgICAgICAgIDogc2NoZW1hXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgICAgfSwge30pXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBpc0FycmF5KHNjaGVtYXMpXG4gICAgPyB0b09iamVjdChzY2hlbWFzLCB2YWx1ZSA9PlxuICAgICAgICBpc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIG5hbWU6IGNhbWVsaXplKHZhbHVlLCBmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgIClcbiAgICA6IGlzT2JqZWN0KHNjaGVtYXMpXG4gICAgICA/IHRvT2JqZWN0KFxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgaXNPYmplY3QodmFsdWUpXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgIC4uLnZhbHVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IGlzU3RyaW5nKHZhbHVlKVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdmFsdWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgKVxuICAgICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXR0b25TY2hlbWFzKGJ1dHRvbnMpIHtcbiAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyhcbiAgICBidXR0b25zLFxuICAgIHsgdHlwZTogJ2J1dHRvbicgfSAvLyBEZWZhdWx0c1xuICApXG59XG5cbmZ1bmN0aW9uIGdldFR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBpc09iamVjdChzY2hlbWFPclR5cGUpID8gc2NoZW1hT3JUeXBlLnR5cGUgOiBzY2hlbWFPclR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0VHlwZUNvbXBvbmVudChnZXRUeXBlKHNjaGVtYU9yVHlwZSksIHRydWUpID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiAoXG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKT8uZ2V0U291cmNlVHlwZT8uKGdldFR5cGUoc2NoZW1hT3JUeXBlKSkgPz9cbiAgICBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsRW50cnkoc2NoZW1hLCBkYXRhUGF0aCA9IG51bGwsIHRhYkNvbXBvbmVudCA9IG51bGwpIHtcbiAgcmV0dXJuIHNjaGVtYVxuICAgID8ge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIG5hbWUsIGFwcGVuZCBpdCB0byB0aGUgZGF0YVBhdGguXG4gICAgICAgIC8vIFRoaXMgaXMgdXNlZCBlLmcuIGZvciAkZmlsdGVycyBwYW5lbHMuXG4gICAgICAgIGRhdGFQYXRoOlxuICAgICAgICAgIGRhdGFQYXRoICE9IG51bGwgJiYgc2NoZW1hLm5hbWVcbiAgICAgICAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNjaGVtYS5uYW1lKVxuICAgICAgICAgICAgOiBkYXRhUGF0aCxcbiAgICAgICAgdGFiQ29tcG9uZW50XG4gICAgICB9XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbEVudHJpZXMoXG4gIHBhbmVsU2NoZW1hcyxcbiAgZGF0YVBhdGggPSBudWxsLFxuICB0YWJDb21wb25lbnQgPSBudWxsLFxuICBwYW5lbEVudHJpZXMgPSBbXVxuKSB7XG4gIGlmIChwYW5lbFNjaGVtYXMpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMocGFuZWxTY2hlbWFzKSkge1xuICAgICAgY29uc3QgZW50cnkgPSBnZXRQYW5lbEVudHJ5KFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGRhdGFQYXRoICE9IG51bGwgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwga2V5KSA6IG51bGwsXG4gICAgICAgIHRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIHBhbmVsRW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxFbnRyaWVzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJTY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hPy50YWJzID8gT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicykgOiBbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hPy5wYW5lbHMgPyBPYmplY3QudmFsdWVzKHNjaGVtYS5wYW5lbHMpIDogW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbFBhbmVsRW50cmllcyhcbiAgYXBpLFxuICBzY2hlbWEsXG4gIGRhdGFQYXRoID0gbnVsbCxcbiAgY29tcG9uZW50ID0gbnVsbCxcbiAgdGFiQ29tcG9uZW50ID0gbnVsbFxuKSB7XG4gIGNvbnN0IHBhbmVsU2NoZW1hID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZ2V0UGFuZWxTY2hlbWE/LihcbiAgICBhcGksXG4gICAgc2NoZW1hLFxuICAgIGRhdGFQYXRoLFxuICAgIGNvbXBvbmVudFxuICApXG4gIGNvbnN0IHBhbmVsRW50cmllcyA9IHBhbmVsU2NoZW1hXG4gICAgPyBbZ2V0UGFuZWxFbnRyeShwYW5lbFNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCldXG4gICAgOiBbXVxuICAvLyBBbGxvdyBlYWNoIGNvbXBvbmVudCB0byBwcm92aWRlIGl0cyBvd24gc2V0IG9mIHBhbmVscywgaW5cbiAgLy8gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgb25lIChlLmcuIGdldEZpbHRlcnNQYW5lbCgpLCAkZmlsdGVycyk6XG4gIGdldFBhbmVsRW50cmllcyhzY2hlbWE/LnBhbmVscywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxFbnRyaWVzKVxuICByZXR1cm4gcGFuZWxFbnRyaWVzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ29iamVjdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGlzdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ2xpc3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIGNvbnN0IGlkID0gaXRlbVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgcmV0dXJuIGlkICE9IG51bGwgPyBTdHJpbmcoaWQpIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtVWlkKHNvdXJjZVNjaGVtYSwgaXRlbSkge1xuICAvLyBUcnkgdG8gdXNlIHRoZSBpdGVtIGlkIGFzIHRoZSB1aWQsIGZhbGxpbmcgYmFjayBvbiBhdXRvLWdlbmVyYXRlZCBpZHMsIGJ1dFxuICAvLyBlaXRoZXIgd2F5LCBwYXNzIHRocm91Z2ggYGdldFVpZCgpYCBzbyB0aGF0IHRoZSBpZHMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGVcbiAgLy8gaXRlbSB0aHJvdWdoIGEgd2VhayBtYXAsIGFzIHRoZSBpZHMgY2FuIGJlIGZpbHRlcmVkIG91dCBpbiBgcHJvY2Vzc0RhdGEoKWBcbiAgLy8gd2hpbGUgdGhlIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIHVpZHMgYXMga2V5IGFyZSBzdGlsbCB2aXNpYmxlLlxuICByZXR1cm4gZ2V0VWlkKGl0ZW0sIGl0ZW0gPT4gZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSkpXG59XG4iLCJpbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIHBpY2tCeSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSZXNvdXJjZShzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0UmVzb3VyY2Uoc2NoZW1hLnJlc291cmNlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzb3VyY2UocmVzb3VyY2UsIGRlZmF1bHRzID0ge30pIHtcbiAgY29uc3QgeyBwYXJlbnQsIC4uLmRlZnMgfSA9IGRlZmF1bHRzXG4gIHJlc291cmNlID0gaXNPYmplY3QocmVzb3VyY2UpXG4gICAgPyB7IC4uLmRlZnMsIC4uLnJlc291cmNlIH1cbiAgICA6IGlzU3RyaW5nKHJlc291cmNlKVxuICAgICAgPyB7IC4uLmRlZnMsIHBhdGg6IHJlc291cmNlIH1cbiAgICAgIDogbnVsbFxuICAvLyBPbmx5IHNldCBwYXJlbnQgaWYgcGF0aCBkb2Vzbid0IHN0YXJ0IHdpdGggJy8nLCBzbyByZWxhdGl2ZSBVUkxzIGFyZVxuICAvLyBkZWFsdCB3aXRoIGNvcnJlY3RseS5cbiAgaWYgKFxuICAgIHJlc291cmNlICYmXG4gICAgcGFyZW50ICE9PSB1bmRlZmluZWQgJiZcbiAgICByZXNvdXJjZS5wYXJlbnQgPT09IHVuZGVmaW5lZCAmJlxuICAgICFyZXNvdXJjZS5wYXRoPy5zdGFydHNXaXRoKCcvJylcbiAgKSB7XG4gICAgcmVzb3VyY2UucGFyZW50ID0gcGFyZW50XG4gICAgaWYgKCFyZXNvdXJjZS5wYXRoKSB7XG4gICAgICByZXNvdXJjZS5wYXRoID0gJy4nXG4gICAgfVxuICB9XG4gIHJldHVybiByZXNvdXJjZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVtYmVyUmVzb3VyY2UoaWQsIHJlc291cmNlKSB7XG4gIHJldHVybiBpZCAhPSBudWxsICYmIHJlc291cmNlPy50eXBlID09PSAnY29sbGVjdGlvbidcbiAgICA/IHtcbiAgICAgICAgdHlwZTogJ21lbWJlcicsXG4gICAgICAgIC4uLnBpY2tCeShcbiAgICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgICAodmFsdWUsIGtleSkgPT4gWydtZXRob2QnLCAncGF0aCcsICdwYXJlbnQnXS5pbmNsdWRlcyhrZXkpXG4gICAgICAgICksXG4gICAgICAgIGlkOiBgJHtpZH1gXG4gICAgICB9XG4gICAgOiBudWxsXG59XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNTdHJpbmcsXG4gIGlzRnVuY3Rpb24sXG4gIGVxdWFscyxcbiAgbGFiZWxpemUsXG4gIGh5cGhlbmF0ZSxcbiAgZm9ybWF0XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgYXBwU3RhdGUgZnJvbSAnLi4vYXBwU3RhdGUuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRW1pdHRlck1peGluIGZyb20gJy4vRW1pdHRlck1peGluLmpzJ1xuaW1wb3J0IHtcbiAgZmxhdHRlblZpZXdzLFxuICBnZXRTY2hlbWFWYWx1ZSxcbiAgc2hvdWxkUmVuZGVyU2NoZW1hXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgY29tcHV0ZWQsIHJlYWN0aXZlIH0gZnJvbSAndnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtFbWl0dGVyTWl4aW5dLFxuXG4gIGluamVjdDogW1xuICAgICdhcGknLFxuICAgICckdmVyYnMnLFxuICAgICckdmlld3MnLFxuICAgICckaXNQb3B1bGF0ZWQnLFxuICAgICckcGFyZW50Q29tcG9uZW50JyxcbiAgICAnJHNjaGVtYUNvbXBvbmVudCcsXG4gICAgJyRyb3V0ZUNvbXBvbmVudCcsXG4gICAgJyRkYXRhQ29tcG9uZW50JyxcbiAgICAnJHNvdXJjZUNvbXBvbmVudCcsXG4gICAgJyRyZXNvdXJjZUNvbXBvbmVudCcsXG4gICAgJyRkaWFsb2dDb21wb25lbnQnLFxuICAgICckcGFuZWxDb21wb25lbnQnLFxuICAgICckdGFiQ29tcG9uZW50J1xuICBdLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgY29uc3Qgc2VsZiA9ICgpID0+IHRoaXNcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGFcbiAgICAgID8ge1xuICAgICAgICAgICRwYXJlbnRDb21wb25lbnQ6IHNlbGYsXG4gICAgICAgICAgJGRhdGFDb21wb25lbnQ6IHNlbGZcbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgJHBhcmVudENvbXBvbmVudDogc2VsZlxuICAgICAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwU3RhdGUsXG4gICAgICBpc01vdW50ZWQ6IGZhbHNlLFxuICAgICAgb3ZlcnJpZGVzOiBudWxsIC8vIFNlZSBhY2Nlc3Nvci5qc1xuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIE5PVEU6IFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiBSZXNvdXJjZU1peGluLCB1c2VkIGJ5IGxpc3RzLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIHNvdXJjZVNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGE/LnNjaGVtYVxuICAgIH0sXG5cbiAgICB1c2VyKCkge1xuICAgICAgcmV0dXJuIGFwcFN0YXRlLnVzZXJcbiAgICB9LFxuXG4gICAgLy8gJHZlcmJzLCAkdmVyYnMgYW5kICRpc1BvcHVsYXRlZCBhcmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMsIHRvIHByZXNlcnZlXG4gICAgLy8gcmVhY3RpdmVuZXNzIGFjcm9zcyBwcm92aWRlL2luamVjdC5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvaXNzdWVzLzcwMTcjaXNzdWVjb21tZW50LTQ4MDkwNjY5MVxuICAgIHZlcmJzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHZlcmJzKClcbiAgICB9LFxuXG4gICAgdmlld3MoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdmlld3MoKVxuICAgIH0sXG5cbiAgICBmbGF0dGVuZWRWaWV3cygpIHtcbiAgICAgIHJldHVybiBmbGF0dGVuVmlld3ModGhpcy52aWV3cylcbiAgICB9LFxuXG4gICAgaXNQb3B1bGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kaXNQb3B1bGF0ZWQoKVxuICAgIH0sXG5cbiAgICBsb2NhbGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcGkubG9jYWxlXG4gICAgfSxcblxuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiBmYWxzZSB9KVxuICAgIH0sXG5cbiAgICByb290Q29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvb3QuJHJlZnMucm9vdFxuICAgIH0sXG5cbiAgICAvLyBVc2UgY29tcHV0ZWQgcHJvcGVydGllcyBhcyBsaW5rcyB0byBpbmplY3RzLCBzbyBEaXRvU2NoZW1hIGNhblxuICAgIC8vIG92ZXJyaWRlIHRoZSBwcm9wZXJ0eSBhbmQgcmV0dXJuIGB0aGlzYCBpbnN0ZWFkIG9mIHRoZSBwYXJlbnQuXG4gICAgcGFyZW50Q29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHBhcmVudENvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzY2hlbWFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGZvcm1Db21wb25lbnQoKSB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLnJvdXRlQ29tcG9uZW50XG4gICAgICByZXR1cm4gY29tcG9uZW50Py5pc0Zvcm0gPyBjb21wb25lbnQgOiBudWxsXG4gICAgfSxcblxuICAgIHZpZXdDb21wb25lbnQoKSB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLnJvdXRlQ29tcG9uZW50XG4gICAgICByZXR1cm4gY29tcG9uZW50Py5pc1ZpZXcgPyBjb21wb25lbnQgOiBudWxsXG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGZpcnN0IHJvdXRlIGNvbXBvbmVudCBpbiB0aGUgY2hhaW4gb2YgcGFyZW50cywgaW5jbHVkaW5nXG4gICAgLy8gdGhpcyBjdXJyZW50IGNvbXBvbmVudCwgdGhhdCBpcyBsaW5rZWQgdG8gYSByZXNvdXJjZSAoYW5kIHRodXMgbG9hZHMgaXRzXG4gICAgLy8gb3duIGRhdGEgYW5kIGRvZXNuJ3QgaG9sZCBuZXN0ZWQgZGF0YSkuXG4gICAgZGF0YUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVzRGF0YSA/IHRoaXMgOiB0aGlzLiRkYXRhQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHNvdXJjZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlc291cmNlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGRpYWxvZ0NvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHBhbmVsQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHBhbmVsQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHRhYkNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHBhcmVudFNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudD8ucGFyZW50Q29tcG9uZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYXJlbnRSb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50Py5wYXJlbnRDb21wb25lbnQucm91dGVDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFyZW50Rm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LnBhcmVudENvbXBvbmVudC5mb3JtQ29tcG9uZW50XG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGRhdGEgb2YgdGhlIGZpcnN0IHJvdXRlIGNvbXBvbmVudCBpbiB0aGUgY2hhaW4gb2YgcGFyZW50c1xuICAgIC8vIHRoYXQgbG9hZHMgaXRzIG93biBkYXRhIGZyb20gYW4gYXNzb2NpYXRlZCBBUEkgcmVzb3VyY2UuXG4gICAgcm9vdERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhQ29tcG9uZW50Py5kYXRhXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5pc01vdW50ZWQgPSB0cnVlXG4gIH0sXG5cbiAgYmVmb3JlQ3JlYXRlKCkge1xuICAgIGNvbnN0IHVpZCA9IG5leHRVaWQrK1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnJHVpZCcsIHsgZ2V0OiAoKSA9PiB1aWQgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbGFiZWxpemUsXG5cbiAgICAvLyBUaGUgc3RhdGUgb2YgY29tcG9uZW50cyBpcyBvbmx5IGF2YWlsYWJsZSBkdXJpbmcgdGhlIGxpZmUtY3ljbGUgb2YgYVxuICAgIC8vIGNvbXBvbmVudC4gU29tZSBpbmZvcm1hdGlvbiB3ZSBuZWVkIGF2YWlsYWJsZSBsb25nZXIgdGhhbiB0aGF0LCBlLmcuXG4gICAgLy8gYHF1ZXJ5YCAmIGB0b3RhbGAgb24gVHlwZUxpc3QsIHNvIHRoYXQgd2hlbiB0aGUgdXNlciBuYXZpZ2F0ZXMgYmFjayBmcm9tXG4gICAgLy8gZWRpdGluZyBhbiBpdGVtIGluIHRoZSBsaXN0LCB0aGUgc3RhdGUgb2YgdGhlIGxpc3QgaXMgc3RpbGwgdGhlIHNhbWUuXG4gICAgLy8gV2UgY2FuJ3Qgc3RvcmUgdGhpcyBpbiBgZGF0YWAsIGFzIHRoaXMgaXMgYWxyZWFkeSB0aGUgcHVyZSBkYXRhIGZyb20gdGhlXG4gICAgLy8gQVBJIHNlcnZlci4gVGhhdCdzIHdoYXQgdGhlIGBzdG9yZWAgaXMgZm9yOiBNZW1vcnkgdGhhdCdzIGF2YWlsYWJsZSBhc1xuICAgIC8vIGxvbmcgYXMgdGhlIGN1cnJlbnQgZWRpdGluZyBwYXRoIGlzIHN0aWxsIHZhbGlkLiBGb3IgdHlwZSBjb21wb25lbnRzLFxuICAgIC8vIHRoaXMgbWVtb3J5IGlzIHByb3ZpZGVkIGJ5IHRoZSBwYXJlbnQsIHNlZSBSb3V0ZU1peGluIGFuZCBEaXRvUGFuZS5cbiAgICBnZXRTdG9yZShrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlW2tleV1cbiAgICB9LFxuXG4gICAgc2V0U3RvcmUoa2V5LCB2YWx1ZSkge1xuICAgICAgdGhpcy5zdG9yZVtrZXldID0gdmFsdWVcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICByZW1vdmVTdG9yZShrZXkpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLnN0b3JlW2tleV1cbiAgICB9LFxuXG4gICAgZ2V0U3RvcmVLZXlCeUluZGV4KGluZGV4KSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZS4ka2V5c0J5SW5kZXg/LltpbmRleF1cbiAgICB9LFxuXG4gICAgc2V0U3RvcmVLZXlCeUluZGV4KGluZGV4LCBrZXkpIHtcbiAgICAgIHRoaXMuc3RvcmUuJGtleXNCeUluZGV4ID8/PSB7fVxuICAgICAgdGhpcy5zdG9yZS4ka2V5c0J5SW5kZXhbaW5kZXhdID0ga2V5XG4gICAgfSxcblxuICAgIGdldENoaWxkU3RvcmUoa2V5LCBpbmRleCkge1xuICAgICAgbGV0IHN0b3JlID0gdGhpcy5nZXRTdG9yZShrZXkpXG4gICAgICBpZiAoIXN0b3JlICYmIGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgLy8gV2hlbiBzdG9yaW5nLCB0ZW1wb3JhcnkgaWRzIGNoYW5nZSB0byBwZXJtYW5lbnQgb25lcyBhbmQgdGh1cyB0aGUga2V5XG4gICAgICAgIC8vIGNhbiBjaGFuZ2UuIFRvIHN0aWxsIGZpbmQgdGhlIHN0b3JlLCB3ZSByZWZlcmVuY2UgYnkgaW5kZXggYXMgd2VsbCxcbiAgICAgICAgLy8gdG8gYmUgYWJsZSB0byBmaW5kIHRoZSBzdG9yZSBhZ2FpbiBhZnRlciB0aGUgaXRlbSB3YXMgc2F2ZWQuXG4gICAgICAgIGNvbnN0IG9sZEtleSA9IHRoaXMuZ2V0U3RvcmVLZXlCeUluZGV4KGluZGV4KVxuICAgICAgICBzdG9yZSA9IHRoaXMuZ2V0U3RvcmUob2xkS2V5KVxuICAgICAgICBpZiAoc3RvcmUpIHtcbiAgICAgICAgICB0aGlzLnNldFN0b3JlKGtleSwgc3RvcmUpXG4gICAgICAgICAgdGhpcy5yZW1vdmVTdG9yZShvbGRLZXkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghc3RvcmUpIHtcbiAgICAgICAgc3RvcmUgPSB0aGlzLnNldFN0b3JlKGtleSwgcmVhY3RpdmUoe30pKVxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuc2V0U3RvcmVLZXlCeUluZGV4KGluZGV4LCBrZXkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdG9yZVxuICAgIH0sXG5cbiAgICByZW1vdmVDaGlsZFN0b3JlKGtleSwgaW5kZXgpIHtcbiAgICAgIC8vIEdFdCB0aGUgY2hpbGQtc3RvcmUgZmlyc3QsIHNvIHRoYXQgaW5kaWNlcyBjYW4gYmUgdHJhbnNmZXJyZWQgb3ZlclxuICAgICAgLy8gdGVtcG9yYXJ5IGlkIGNoYW5nZXMgZHVyaW5nIHBlcnNpc3RlbmNlLlxuICAgICAgdGhpcy5nZXRDaGlsZFN0b3JlKGtleSwgaW5kZXgpXG4gICAgICB0aGlzLnJlbW92ZVN0b3JlKGtleSlcbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hVmFsdWUoXG4gICAgICBrZXlPckRhdGFQYXRoLFxuICAgICAge1xuICAgICAgICB0eXBlLFxuICAgICAgICBkZWZhdWx0OiBkZWYsXG4gICAgICAgIHNjaGVtYSA9IHRoaXMuc2NoZW1hLFxuICAgICAgICBjb250ZXh0ID0gdGhpcy5jb250ZXh0LFxuICAgICAgICBjYWxsYmFjayA9IHRydWVcbiAgICAgIH0gPSB7fVxuICAgICkge1xuICAgICAgcmV0dXJuIGdldFNjaGVtYVZhbHVlKGtleU9yRGF0YVBhdGgsIHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgZGVmYXVsdDogaXNGdW5jdGlvbihkZWYpID8gKCkgPT4gZGVmLmNhbGwodGhpcykgOiBkZWZcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldExhYmVsKHNjaGVtYSwgbmFtZSkge1xuICAgICAgcmV0dXJuIHNjaGVtYVxuICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2xhYmVsJywgeyB0eXBlOiBTdHJpbmcsIHNjaGVtYSB9KSB8fFxuICAgICAgICAgIGxhYmVsaXplKG5hbWUgfHwgc2NoZW1hLm5hbWUpXG4gICAgICAgIDogbGFiZWxpemUobmFtZSkgfHwgJydcbiAgICB9LFxuXG4gICAgZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGFzczogYGRpdG8tYnV0dG9uLSR7dmVyYn1gLFxuICAgICAgICB0aXRsZTogbGFiZWxpemUodmVyYilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVE9ETzogUmVuYW1lICpMaW5rKCkgdG8gKlJvdXRlKCkuXG4gICAgZ2V0UXVlcnlMaW5rKHF1ZXJ5KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgLy8gUHJlc2VydmUgaGFzaCBmb3IgdGFiczpcbiAgICAgICAgaGFzaDogdGhpcy4kcm91dGUuaGFzaFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG91bGRSZW5kZXJTY2hlbWEoc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEsIHRoaXMuY29udGV4dClcbiAgICB9LFxuXG4gICAgc2hvdWxkU2hvd1NjaGVtYShzY2hlbWEgPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTY2hlbWFWYWx1ZSgndmlzaWJsZScsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgc2NoZW1hXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzaG91bGREaXNhYmxlU2NoZW1hKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNjaGVtYVZhbHVlKCdkaXNhYmxlZCcsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgIHNjaGVtYVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKSB7XG4gICAgICByZXNvdXJjZSA9IGdldFJlc291cmNlKHJlc291cmNlKVxuICAgICAgLy8gUmVzb3VyY2VzIHdpdGhvdXQgYSBwYXJlbnQgaW5oZXJpdCB0aGUgb25lIGZyb20gYGRhdGFDb21wb25lbnRgXG4gICAgICAvLyBhdXRvbWF0aWNhbGx5LlxuICAgICAgaWYgKHJlc291cmNlLnBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc291cmNlLnBhcmVudCA9IHRoaXMuZGF0YUNvbXBvbmVudD8ucmVzb3VyY2VcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmFwaS5yZXNvdXJjZXMuYW55KGdldFJlc291cmNlKHJlc291cmNlKSlcbiAgICB9LFxuXG4gICAgZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpIHtcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKVxuICAgICAgcmV0dXJuIHVybCA/IHRoaXMuYXBpLmdldEFwaVVybCh7IHVybCwgcXVlcnk6IHJlc291cmNlLnF1ZXJ5IH0pIDogbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kUmVxdWVzdCh7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIHF1ZXJ5LFxuICAgICAgZGF0YSxcbiAgICAgIHNpZ25hbCxcbiAgICAgIGludGVybmFsXG4gICAgfSkge1xuICAgICAgdXJsIHx8PSB0aGlzLmdldFJlc291cmNlVXJsKHJlc291cmNlKVxuICAgICAgbWV0aG9kIHx8PSByZXNvdXJjZT8ubWV0aG9kXG4gICAgICBjb25zdCBjaGVja1VzZXIgPSAhaW50ZXJuYWwgJiYgdGhpcy5hcGkuaXNBcGlVcmwodXJsKVxuICAgICAgaWYgKGNoZWNrVXNlcikge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZW5zdXJlVXNlcigpXG4gICAgICB9XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXBpLnJlcXVlc3Qoe1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIHVybCxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHNpZ25hbFxuICAgICAgfSlcbiAgICAgIC8vIERldGVjdCBjaGFuZ2Ugb2YgdGhlIG93biB1c2VyLCBhbmQgZmV0Y2ggaXQgYWdhaW4gaWYgaXQgd2FzIGNoYW5nZWQuXG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrVXNlciAmJlxuICAgICAgICBtZXRob2QgPT09ICdwYXRjaCcgJiZcbiAgICAgICAgZXF1YWxzKHJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLnVzZXIuaWQsIHRoaXMuYXBpLnVzZXJzKSlcbiAgICAgICkge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZmV0Y2hVc2VyKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH0sXG5cbiAgICBzaG93RGlhbG9nKHsgY29tcG9uZW50cywgYnV0dG9ucywgZGF0YSwgc2V0dGluZ3MgfSkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdENvbXBvbmVudC5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgc2V0dGluZ3NcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHJlcXVlc3QoeyBjYWNoZSwgLi4ub3B0aW9ucyB9KSB7XG4gICAgICAvLyBBbGxvdyBjYWNoaW5nIG9mIGxvYWRlZCBkYXRhIG9uIHR3byBsZXZlbHM6XG4gICAgICAvLyAtICdnbG9iYWwnOiBjYWNoZSBnbG9iYWxseSwgZm9yIHRoZSBlbnRpcmUgYWRtaW4gc2Vzc2lvblxuICAgICAgLy8gLSAnbG9jYWwnOiBjYWNoZSBsb2NhbGx5IHdpdGhpbiB0aGUgY2xvc2VzdCByb3V0ZSBjb21wb25lbnQgdGhhdCBpc1xuICAgICAgLy8gICAgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UgYW5kIGxvYWRzIGl0cyBvd24gZGF0YS5cbiAgICAgIGNvbnN0IGNhY2hlUGFyZW50ID0gKFxuICAgICAgICBjYWNoZSAmJlxuICAgICAgICB7XG4gICAgICAgICAgZ2xvYmFsOiB0aGlzLmFwcFN0YXRlLFxuICAgICAgICAgIGxvY2FsOiB0aGlzLmRhdGFDb21wb25lbnRcbiAgICAgICAgfVtjYWNoZV1cbiAgICAgIClcbiAgICAgIGNvbnN0IGxvYWRDYWNoZSA9IGNhY2hlUGFyZW50Py5sb2FkQ2FjaGVcbiAgICAgIC8vIEJ1aWxkIGEgY2FjaGUga2V5IGZyb20gdGhlIGNvbmZpZzpcbiAgICAgIGNvbnN0IGNhY2hlS2V5ID0gKFxuICAgICAgICBsb2FkQ2FjaGUgJiZcbiAgICAgICAgYCR7XG4gICAgICAgICAgb3B0aW9ucy5tZXRob2QgfHwgJ2dldCdcbiAgICAgICAgfSAke1xuICAgICAgICAgIG9wdGlvbnMudXJsXG4gICAgICAgIH0gJHtcbiAgICAgICAgICAvLyBUT0RPOiBgcmVxdWVzdC5wYXJhbXNgIHdhcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBgcXVlcnlgIG9uXG4gICAgICAgICAgLy8gMjAyMi0xMS0wMSwgcmVtb3ZlIG9uY2Ugbm90IGluIHVzZSBhbnl3aGVyZSBhbnkgbW9yZS5cbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLnF1ZXJ5IHx8IG9wdGlvbnMucGFyYW1zIHx8ICcnKVxuICAgICAgICB9ICR7XG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5kYXRhIHx8ICcnKVxuICAgICAgICB9YFxuICAgICAgKVxuICAgICAgaWYgKGxvYWRDYWNoZSAmJiAoY2FjaGVLZXkgaW4gbG9hZENhY2hlKSkge1xuICAgICAgICByZXR1cm4gbG9hZENhY2hlW2NhY2hlS2V5XVxuICAgICAgfVxuICAgICAgLy8gTk9URTogTm8gYXdhaXQgaGVyZSwgcmVzIGlzIGEgcHJvbWlzZSB0aGF0IHdlIGNhbiBlYXNpbHkgY2FjaGUuXG4gICAgICAvLyBUaGF0J3MgZmluZSBiZWNhdXNlIHByb21pc2VzIGNhbiBiZSByZXNvbHZlZCBvdmVyIGFuZCBvdmVyIGFnYWluLlxuICAgICAgY29uc3QgcmVzID0gdGhpcy5zZW5kUmVxdWVzdChvcHRpb25zKVxuICAgICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5kYXRhKVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIC8vIENvbnZlcnQgYXhpb3MgZXJyb3JzIHRvIG5vcm1hbCBlcnJvcnNcbiAgICAgICAgICBjb25zdCBkYXRhID0gZXJyb3IucmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICB0aHJvdyBkYXRhXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGRhdGEubWVzc2FnZSksIGRhdGEpXG4gICAgICAgICAgICA6IGVycm9yXG4gICAgICAgIH0pXG4gICAgICBpZiAobG9hZENhY2hlKSB7XG4gICAgICAgIGxvYWRDYWNoZVtjYWNoZUtleV0gPSByZXNcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9LFxuXG4gICAgZm9ybWF0KHZhbHVlLCB7XG4gICAgICBsb2NhbGUgPSB0aGlzLmFwaS5sb2NhbGUsXG4gICAgICBkZWZhdWx0cyA9IHRoaXMuYXBpLmZvcm1hdHMsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gZm9ybWF0KHZhbHVlLCB7XG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlKGxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVyLnB1c2gobG9jYXRpb24pXG4gICAgfSxcblxuICAgIGRvd25sb2FkKG9wdGlvbnMgPSB7fSkge1xuICAgICAgaWYgKGlzU3RyaW5nKG9wdGlvbnMpKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7IHVybDogb3B0aW9ucyB9XG4gICAgICB9XG4gICAgICAvLyBTZWU6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80OTkxNzA2Ni8xMTYzNzA4XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gICAgICBhLmhyZWYgPSBvcHRpb25zLnVybD8uc3RhcnRzV2l0aCgnYmxvYjonKVxuICAgICAgICA/IG9wdGlvbnMudXJsXG4gICAgICAgIDogdGhpcy5hcGkuZ2V0QXBpVXJsKG9wdGlvbnMpXG4gICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5maWxlbmFtZSA/PyBudWxsXG4gICAgICBjb25zdCB7IGJvZHkgfSA9IGRvY3VtZW50XG4gICAgICBib2R5LmFwcGVuZENoaWxkKGEpXG4gICAgICBhLmNsaWNrKClcbiAgICAgIGJvZHkucmVtb3ZlQ2hpbGQoYSlcbiAgICB9LFxuXG4gICAgbm90aWZ5KG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5ub3RpZnkob3B0aW9ucylcbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50LmNsb3NlTm90aWZpY2F0aW9ucygpXG4gICAgfSxcblxuICAgIHNldHVwU2NoZW1hRmllbGRzKCkge1xuICAgICAgdGhpcy5zZXR1cE1ldGhvZHMoKVxuICAgICAgdGhpcy5zZXR1cENvbXB1dGVkKClcbiAgICAgIHRoaXMuc2V0dXBFdmVudHMoKVxuICAgIH0sXG5cbiAgICBzZXR1cE1ldGhvZHMoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5tZXRob2RzIHx8IHt9KSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgbWV0aG9kIGRlZmluaXRpb246ICR7a2V5fTogJHt2YWx1ZX1gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldHVwQ29tcHV0ZWQoKSB7XG4gICAgICBjb25zdCBnZXRDb21wdXRlZEFjY2Vzc29yID0gKHsgZ2V0LCBzZXQgfSkgPT4ge1xuICAgICAgICBjb25zdCBnZXR0ZXIgPSBjb21wdXRlZCgoKSA9PiBnZXQuY2FsbCh0aGlzKSlcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBnZXQ6ICgpID0+IGdldHRlci52YWx1ZSxcbiAgICAgICAgICBzZXQ6IHNldCA/IHZhbHVlID0+IHNldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgaXRlbV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEuY29tcHV0ZWQgfHwge30pKSB7XG4gICAgICAgIGNvbnN0IGFjY2Vzc29yID0gaXNGdW5jdGlvbihpdGVtKVxuICAgICAgICAgID8gZ2V0Q29tcHV0ZWRBY2Nlc3Nvcih7IGdldDogaXRlbSB9KVxuICAgICAgICAgIDogaXNPYmplY3QoaXRlbSkgJiYgaXNGdW5jdGlvbihpdGVtLmdldClcbiAgICAgICAgICAgID8gZ2V0Q29tcHV0ZWRBY2Nlc3NvcihpdGVtKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChhY2Nlc3Nvcikge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIGFjY2Vzc29yKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgSW52YWxpZCBjb21wdXRlZCBwcm9wZXJ0eSBkZWZpbml0aW9uOiAke2tleX06ICR7aXRlbX1gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldHVwRXZlbnRzKCkge1xuICAgICAgY29uc3QgeyB3YXRjaCwgZXZlbnRzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgaWYgKHdhdGNoKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJzID0gaXNGdW5jdGlvbih3YXRjaCkgPyB3YXRjaC5jYWxsKHRoaXMpIDogd2F0Y2hcbiAgICAgICAgaWYgKGlzT2JqZWN0KGhhbmRsZXJzKSkge1xuICAgICAgICAgIC8vIEluc3RhbGwgdGhlIHdhdGNoIGhhbmRsZXJzIGluIHRoZSBuZXh0IHRpY2ssIHNvIGFsbCBjb21wb25lbnRzIGFyZVxuICAgICAgICAgIC8vIGluaXRpYWxpemVkIGFuZCB3ZSBjYW4gY2hlY2sgYWdhaW5zdCB0aGVpciBuYW1lcy5cbiAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGNhbGxiYWNrXSBvZiBPYmplY3QuZW50cmllcyhoYW5kbGVycykpIHtcbiAgICAgICAgICAgICAgLy8gRXhwYW5kIHByb3BlcnR5IG5hbWVzIHRvICdkYXRhLnByb3BlcnR5JzpcbiAgICAgICAgICAgICAgY29uc3QgZXhwciA9IHRoaXMuc2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5TmFtZShrZXkpXG4gICAgICAgICAgICAgICAgPyBgZGF0YS4ke2tleX1gXG4gICAgICAgICAgICAgICAgOiBrZXlcbiAgICAgICAgICAgICAgdGhpcy4kd2F0Y2goZXhwciwgY2FsbGJhY2spXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBhZGRFdmVudCA9IChrZXksIGV2ZW50LCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcbiAgICAgICAgICB0aGlzLm9uKGh5cGhlbmF0ZShldmVudCksIGNhbGxiYWNrKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgZXZlbnQgZGVmaW5pdGlvbjogJHtrZXl9OiAke2NhbGxiYWNrfWApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50cykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhldmVudHMpKSB7XG4gICAgICAgICAgYWRkRXZlbnQoa2V5LCBrZXksIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBBbHNvIHNjYW4gc2NoZW1hIGZvciBgb25bQS1aXWAtc3R5bGUgY2FsbGJhY2tzIGFuZCBhZGQgdGhlbVxuICAgICAgLy8gVE9ETzogRGVwcmVjYXRlIG9uZSBmb3JtYXQgb3IgdGhlIG90aGVyLCBpbiBmYXZvdXIgb2Ygb25seSBvbmUgd2F5IG9mXG4gICAgICAvLyBkb2luZyB0aGluZ3MuIERlY2lkZSB3aGljaCBvbmUgdG8gcmVtb3ZlLlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEpKSB7XG4gICAgICAgIGlmICgvXm9uW0EtWl0vLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LnNsaWNlKDIpLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0RXZlbnQoZXZlbnQsIHtcbiAgICAgIGNvbnRleHQgPSBudWxsLFxuICAgICAgcGFyZW50ID0gbnVsbFxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgaGFzTGlzdGVuZXJzID0gdGhpcy5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBjb25zdCBwYXJlbnRIYXNMaXN0ZW5lcnMgPSBwYXJlbnQ/Lmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGlmIChoYXNMaXN0ZW5lcnMgfHwgcGFyZW50SGFzTGlzdGVuZXJzKSB7XG4gICAgICAgIC8vIFRoZSBlZmZlY3RzIG9mIHNvbWUgZXZlbnRzIG5lZWQgc29tZSB0aW1lIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIFZ1ZS5cbiAgICAgICAgLy8gVXNlICRuZXh0VGljaygpIHRvIG1ha2Ugc3VyZSBvdXIgaGFuZGxlcnMgc2VlIHRoZXNlIGNoYW5nZXMuXG4gICAgICAgIC8vIEZvciBleGFtcGxlLCBgcHJvY2Vzc2VkSXRlbWAgaXMgb25seSBjb3JyZWN0IGFmdGVyIGNvbXBvbmVudHMgdGhhdFxuICAgICAgICAvLyBhcmUgbmV3bHkgcmVuZGVyZWQgZHVlIHRvIGRhdGEgY2hhbmdlcyBoYXZlIHJlZ2lzdGVyZWQgdGhlbXNlbHZlcy5cbiAgICAgICAgaWYgKFsnbG9hZCcsICdjaGFuZ2UnXS5pbmNsdWRlcyhldmVudCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gKGNvbnRleHQgPSBEaXRvQ29udGV4dC5nZXQodGhpcywgY29udGV4dCkpXG4gICAgICAgIGNvbnN0IHJlcyA9IGhhc0xpc3RlbmVyc1xuICAgICAgICAgID8gYXdhaXQgdGhpcy5lbWl0KGV2ZW50LCBnZXRDb250ZXh0KCkpXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgLy8gRG9uJ3QgYnViYmxlIHRvIHBhcmVudCBpZiBoYW5kbGVkIGV2ZW50IHJldHVybmVkIGBmYWxzZWBcbiAgICAgICAgaWYgKHBhcmVudEhhc0xpc3RlbmVycyAmJiByZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcGFyZW50LmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfVxuICB9XG59XG5cbmxldCBuZXh0VWlkID0gMFxuIiwiLy8gQSBtaW5pLXJlcGxpY2F0aW9uIG9mIHZ1ZSdzIGludGVybmFsIGByZXNvbHZlTWVyZ2VkT3B0aW9ucygpYCBidXQgb25seVxuLy8gaGFuZGxpbmcgb3VyIG93biBhZGRlZCBvcHRpb25zIHByb3BlcnRpZXMgYW5kIG1lcmdpbmcgdGhlbSBlYXJseSBpbnN0ZWFkXG4vLyBvZiBsYXppbHkuXG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTWVyZ2VkT3B0aW9ucyhvcHRpb25zKSB7XG4gIGNvbnN0IHsgbWl4aW5zIH0gPSBvcHRpb25zXG4gIHJldHVybiBtaXhpbnMgfHwgb3B0aW9ucy5leHRlbmRzXG4gICAgPyBtZXJnZU9wdGlvbnMoXG4gICAgICAgIHsgLi4ub3B0aW9ucyB9LFxuICAgICAgICBvcHRpb25zXG4gICAgICApXG4gICAgOiBvcHRpb25zXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU9wdGlvbnModG8sIGZyb20pIHtcbiAgaWYgKGZyb20uZXh0ZW5kcykge1xuICAgIG1lcmdlT3B0aW9ucyh0bywgZnJvbS5leHRlbmRzKVxuICB9XG4gIGlmIChmcm9tLm1peGlucykge1xuICAgIGZvciAoY29uc3QgbWl4aW4gb2YgZnJvbS5taXhpbnMpIHtcbiAgICAgIG1lcmdlT3B0aW9ucyh0bywgbWl4aW4pXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3Qga2V5IG9mIGRpdG9PcHRpb25LZXlzKSB7XG4gICAgaWYgKGtleSBpbiBmcm9tKSB7XG4gICAgICB0b1trZXldID0gZnJvbVtrZXldXG4gICAgfVxuICB9XG4gIHJldHVybiB0b1xufVxuXG5jb25zdCBkaXRvT3B0aW9uS2V5cyA9IFtcbiAgJ2RlZmF1bHRWYWx1ZScsXG4gICdkZWZhdWx0TmVzdGVkJyxcbiAgJ2RlZmF1bHRWaXNpYmxlJyxcbiAgJ2dlbmVyYXRlTGFiZWwnLFxuICAnZXhjbHVkZVZhbHVlJyxcbiAgJ2lnbm9yZU1pc3NpbmdWYWx1ZScsXG4gICdvbWl0U3BhY2luZycsXG4gICdwcm9jZXNzVmFsdWUnLFxuICAncHJvY2Vzc1NjaGVtYScsXG4gICdnZXRQYW5lbFNjaGVtYScsXG4gICdnZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3NpbmcnLFxuICAvLyBWdWUgMyAvIFZ1ZS1yb3V0ZXIgNCBmb3JnZXRzIHRoZXNlLlxuICAvLyBUT0RPOiBDcmVhdGUgYnVnLXJlcG9ydD9cbiAgJ2JlZm9yZVJvdXRlVXBkYXRlJyxcbiAgJ2JlZm9yZVJvdXRlTGVhdmUnXG5dXG4iLCJpbXBvcnQgRGl0b01peGluIGZyb20gJy4vbWl4aW5zL0RpdG9NaXhpbi5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHJlc29sdmVNZXJnZWRPcHRpb25zIH0gZnJvbSAnLi91dGlscy9vcHRpb25zLmpzJ1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IGNvbXBvbmVudHMgPSB7fVxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEaXRvTWl4aW5dLFxuICAvLyBNYWtlIHN1cmUgdGhhdCByZWdpc3RlcmVkIGNvbXBvbmVudHMgYXJlIHByZXNlbnQgaW4gYWxsIERpdG9Db21wb25lbnQuXG4gIGNvbXBvbmVudHMsXG5cbiAgY29tcG9uZW50KG5hbWUsIGRlZmluaXRpb24pIHtcbiAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgZGVmaW5pdGlvbiA9IHJlc29sdmVNZXJnZWRPcHRpb25zKHtcbiAgICAgICAgICBleHRlbmRzOiB0aGlzLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgLi4uZGVmaW5pdGlvblxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY29tcG9uZW50c1tuYW1lXSA9IGRlZmluaXRpb25cbiAgICB9XG4gICAgaWYgKCEobmFtZSBpbiBjb21wb25lbnRzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgXCIke25hbWV9XCIgbm90IHJlZ2lzdGVyZWRgKVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRUeXBlQ29tcG9uZW50XG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBkZXNjcmliZURhdGUoZGF0ZSkge1xuICByZXR1cm4ge1xuICAgIHllYXI6IGRhdGU/LmdldEZ1bGxZZWFyKCkgPz8gMCxcbiAgICBtb250aDogZGF0ZT8uZ2V0TW9udGgoKSA/PyAwLFxuICAgIGRheTogZGF0ZT8uZ2V0RGF0ZSgpID8/IDAsXG4gICAgaG91cjogZGF0ZT8uZ2V0SG91cnMoKSA/PyAwLFxuICAgIG1pbnV0ZTogZGF0ZT8uZ2V0TWludXRlcygpID8/IDAsXG4gICAgc2Vjb25kOiBkYXRlPy5nZXRTZWNvbmRzKCkgPz8gMCxcbiAgICBtaWxsaXNlY29uZDogZGF0ZT8uZ2V0TWlsbGlzZWNvbmRzKCkgPz8gMFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbHRlckRhdGUoZGF0ZSwgb3ZlcnJpZGVzID0ge30pIHtcbiAgcmV0dXJuIG5ldyBEYXRlKC4uLk9iamVjdC52YWx1ZXMoeyAuLi5kZXNjcmliZURhdGUoZGF0ZSksIC4uLm92ZXJyaWRlcyB9KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZShzdHJpbmcsIHtcbiAgbG9jYWxlID0gJ2VuLVVTJyxcbiAgZGF0ZSA9IHRydWUsXG4gIHRpbWUgPSB0cnVlXG59ID0ge30pIHtcbiAgY29uc3QgdGltZURlZmF1bHQgPSB0aW1lID8gbnVsbCA6IDBcbiAgbGV0IFtcbiAgICBkYXksXG4gICAgc2VwMSxcbiAgICBtb250aCxcbiAgICBzZXAyLFxuICAgIHllYXIsXG4gICAgLFxuICAgIGhvdXIgPSB0aW1lRGVmYXVsdCxcbiAgICAsXG4gICAgbWludXRlID0gdGltZURlZmF1bHQsXG4gICAgLFxuICAgIHNlY29uZCA9IHRpbWVEZWZhdWx0LFxuICAgICxcbiAgICBtaWxsaXNlY29uZCA9IHRpbWVEZWZhdWx0XG4gIF0gPSBnZXREYXRlUGFydHMoc3RyaW5nLCB7IGRhdGUsIHRpbWUgfSlcbiAgaWYgKHllYXIgJiYgeWVhci5sZW5ndGggPj0gNCkge1xuICAgIGlmIChsb2NhbGUgPT09ICdlbi1VUycgJiYgc2VwMSA9PT0gJy8nICYmIHNlcDIgPT09ICcvJykge1xuICAgICAgLy8gQW1lcmljYW4gZm9ybWF0OiBNTS9ERC9ZWVlZXG4gICAgICA7W2RheSwgbW9udGhdID0gW21vbnRoLCBkYXldXG4gICAgfVxuICAgIG1vbnRoID0gZ2V0TW9udGhJbmRleChtb250aCwgeyBsb2NhbGUgfSlcbiAgICBjb25zdCBpc1ZhbGlkVGltZVBhcnQgPSBwYXJ0ID0+IHBhcnQgPT09IG51bGwgfHwgcGFydC5sZW5ndGggPT09IDJcbiAgICBpZiAoXG4gICAgICBtb250aCAhPT0gbnVsbCAmJiAoXG4gICAgICAgICF0aW1lIHx8IChcbiAgICAgICAgICBpc1ZhbGlkVGltZVBhcnQoaG91cikgJiZcbiAgICAgICAgICBpc1ZhbGlkVGltZVBhcnQobWludXRlKSAmJlxuICAgICAgICAgIGlzVmFsaWRUaW1lUGFydChzZWNvbmQpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShcbiAgICAgICAgK3llYXIsXG4gICAgICAgICttb250aCxcbiAgICAgICAgK2RheSxcbiAgICAgICAgK2hvdXIsXG4gICAgICAgICttaW51dGUsXG4gICAgICAgICtzZWNvbmQsXG4gICAgICAgICttaWxsaXNlY29uZFxuICAgICAgKVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uKHN0cmluZywgcG9zaXRpb24sIHtcbiAgbG9jYWxlID0gJ2VuLVVTJyxcbiAgZGF0ZSA9IHRydWUsXG4gIHRpbWUgPSB0cnVlXG59ID0ge30pIHtcbiAgY29uc3QgcGFydHMgPSBnZXREYXRlUGFydHMoc3RyaW5nLCB7IGRhdGUsIHRpbWUgfSlcblxuICBjb25zdCBnZXRQb3NpdGlvbiA9IChwb3NpdGlvbiwgbGVuZ3RoID0gcGFydHMubGVuZ3RoKSA9PiB7XG4gICAgbGV0IHBvcyA9IDBcbiAgICBsZXQgaW5kZXggPSAwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICB3aGlsZSAoKHBvc2l0aW9uID09PSBudWxsIHx8IHBvcyA8PSBwb3NpdGlvbikgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHBvcyArPSBwYXJ0c1tpbmRleCsrXT8ubGVuZ3RoID8/IDBcbiAgICB9XG4gICAgcmV0dXJuIHsgcG9zaXRpb246IHBvcywgaW5kZXggfVxuICB9XG5cbiAgLy8gVGltZSBzdGFydHMgYXQgaW5kZXggNiwgZHVlIHRvIHRoZSBzZXBhcmF0b3IgYWZ0ZXIgdGhlIGRhdGUuXG4gIGNvbnN0IG9mZnNldCA9ICFkYXRlID8gZ2V0UG9zaXRpb24obnVsbCwgNikucG9zaXRpb24gOiAwXG4gIHBvc2l0aW9uICs9IG9mZnNldFxuXG4gIGxldCB7IGluZGV4IH0gPSBnZXRQb3NpdGlvbihwb3NpdGlvbilcblxuICBjb25zdCBpc1VTID0gbG9jYWxlID09PSAnZW4tVVMnXG4gIGNvbnN0IHZhbHVlcyA9IFtcbiAgICBpc1VTID8gJ21vbnRoJyA6ICdkYXknLFxuICAgIG51bGwsXG4gICAgaXNVUyA/ICdkYXknIDogJ21vbnRoJyxcbiAgICBudWxsLFxuICAgICd5ZWFyJyxcbiAgICBudWxsLFxuICAgICdob3VyJyxcbiAgICBudWxsLFxuICAgICdtaW51dGUnLFxuICAgIG51bGwsXG4gICAgJ3NlY29uZCcsXG4gICAgbnVsbCxcbiAgICAnbWlsbGlzZWNvbmQnXG4gIF1cbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICBpZiAodmFsdWVzW2luZGV4XSkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBnZXRQb3NpdGlvbihudWxsLCBpbmRleCkucG9zaXRpb24gLSBvZmZzZXRcbiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgcGFydHNbaW5kZXhdLmxlbmd0aFxuICAgICAgcmV0dXJuIHsgbmFtZTogdmFsdWVzW2luZGV4XSwgc3RhcnQsIGVuZCB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGdldERhdGVQYXJ0cyhzdHJpbmcsIHsgZGF0ZSA9IHRydWUsIHRpbWUgPSB0cnVlIH0gPSB7fSkge1xuICBjb25zdCBwYXJ0cyA9IHN0cmluZz8uc3BsaXQoLyhbXFxzLiw6L10rKS8pIHx8IFtdXG4gIGlmICghZGF0ZSkge1xuICAgIC8vIEFkZCBkdW1teSBkYXRlIHBhcnRzIHRvIG1ha2Ugc3VyZSB3ZSBnZXQgYSB0aW1lLW9ubHkgZGF0ZS5cbiAgICBwYXJ0cy51bnNoaWZ0KCcxJywgJy4nLCAnMScsICcuJywgJzIwMDAnLCAnICcpXG4gIH1cbiAgaWYgKCF0aW1lICYmIHBhcnRzLmxlbmd0aCA+IDUpIHtcbiAgICBwYXJ0cy5sZW5ndGggPSA1XG4gIH1cbiAgcmV0dXJuIHBhcnRzXG59XG5cbmZ1bmN0aW9uIGdldE1vbnRoSW5kZXgobW9udGgsIHsgbG9jYWxlID0gJ2VuLVVTJyB9ID0ge30pIHtcbiAgY29uc3QgdmFsdWUgPSArbW9udGhcbiAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUgLSAxXG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBtb250aC50cmltKCkudG9Mb3dlckNhc2UoKVxuICBpZiAobWF0Y2gubGVuZ3RoIDwgMykgcmV0dXJuIG51bGxcbiAgY29uc3Qgc2hvcnRGb3JtYXQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUsIHsgbW9udGg6ICdzaG9ydCcgfSlcbiAgY29uc3QgbG9uZ0Zvcm1hdCA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgeyBtb250aDogJ2xvbmcnIH0pXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgyMDAwLCBpLCAxKVxuICAgIGlmIChcbiAgICAgIHNob3J0Rm9ybWF0LmZvcm1hdChkYXRlKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobWF0Y2gpIHx8XG4gICAgICBsb25nRm9ybWF0LmZvcm1hdChkYXRlKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobWF0Y2gpXG4gICAgKSB7XG4gICAgICByZXR1cm4gaVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jYWxlbmRhclxuICAuZGl0by1jYWxlbmRhci1wb3B1cFxuICAgIC5kaXRvLWNhbGVuZGFyLWlubmVyXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cImN1cnJlbnRNb2RlID09PSAnZGF5J1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogdHJ1ZSB9KSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC1tb250aChcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgnbW9udGgnKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgbW9udGg6IHRydWUgfSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItd2Vla2RheXNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwid2Vla2RheSBpbiB3ZWVrZGF5TmFtZXNcIlxuICAgICAgICAgICAgKSB7eyB3ZWVrZGF5LnNob3J0IH19XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItZGF0ZXNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwiZGF0ZSBpbiBkYXRlUmFuZ2VcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJkYXRlLnN0YXRlICYmIGBkaXRvLWNhbGVuZGFyLWl0ZW0tJHtkYXRlLnN0YXRlfWBcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJkYXRlLnN0YXRlICE9PSAnZGlzYWJsZWQnICYmIHNlbGVjdERhdGUoZGF0ZS5kYXRlKVwiXG4gICAgICAgICAgICApIHt7IGRhdGUudGV4dCB9fVxuICAgICAgICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LW5vdyhcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOnRpdGxlPVwiZGF0ZVRvU3RyaW5nKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdERhdGUobmV3IERhdGUoKSlcIlxuICAgICAgICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ21vbnRoJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogdHJ1ZSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItbW9udGhzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cIihtb250aCwgaW5kZXgpIGluIG1vbnRoTmFtZXNcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRNb250aENsYXNzKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdE1vbnRoKGluZGV4KVwiXG4gICAgICAgICAgICApIHt7IG1vbnRoLnNob3J0IH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICd5ZWFyJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW4ge3sgZGVjYWRlVG9TdHJpbmcoY3VycmVudFZhbHVlKSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ5ZWFyIGluIHllYXJSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldFllYXJDbGFzcyh5ZWFyKVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFllYXIoeWVhcilcIlxuICAgICAgICAgICAgKSB7eyB5ZWFyIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZGVzY3JpYmVEYXRlLCBhbHRlckRhdGUgfSBmcm9tICcuLi91dGlscy9kYXRlLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ3NlbGVjdCddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBtb2RlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2RheScgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyB3ZWVrZGF5TmFtZXMsIG1vbnRoTmFtZXMgfSA9IGdldExvY2FsZU5hbWVzKHRoaXMubG9jYWxlKVxuICAgIHJldHVybiB7XG4gICAgICB3ZWVrZGF5TmFtZXMsXG4gICAgICBtb250aE5hbWVzLFxuICAgICAgZGF0ZVJhbmdlOiBbXSxcbiAgICAgIHllYXJSYW5nZTogW10sXG4gICAgICBjdXJyZW50VmFsdWU6IChcbiAgICAgICAgdGhpcy5tb2RlbFZhbHVlIHx8XG4gICAgICAgIC8vIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCB1c2UgY3VycmVudCBkYXRlIGJ1dCBjbGVhciB0aW1lIGZpZWxkczpcbiAgICAgICAgYWx0ZXJEYXRlKG5ldyBEYXRlKCksIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAsIG1pbGxpc2Vjb25kOiAwIH0pXG4gICAgICApLFxuICAgICAgY3VycmVudE1vZGU6IHRoaXMubW9kZVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG8gfHwgbmV3IERhdGUoKVxuICAgICAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkaXNhYmxlZERhdGU6ICd1cGRhdGVEYXRlUmFuZ2UnLFxuXG4gICAgbW9kZShtb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb2RlID0gbW9kZVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0TW9udGhDbGFzcyhtb250aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUnOiAoXG4gICAgICAgICAgdGhpcy5tb2RlbFZhbHVlICYmXG4gICAgICAgICAgbW9udGggPT09IHRoaXMubW9kZWxWYWx1ZS5nZXRNb250aCgpICYmXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSA9PT0gdGhpcy5tb2RlbFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgKSxcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50JzogbW9udGggPT09IHRoaXMuY3VycmVudFZhbHVlLmdldE1vbnRoKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0WWVhckNsYXNzKHllYXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlJzogKFxuICAgICAgICAgIHRoaXMubW9kZWxWYWx1ZSAmJiB5ZWFyID09PSB0aGlzLm1vZGVsVmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgICApLFxuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQnOiB5ZWFyID09PSB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldERhdGUob3ZlcnJpZGVzLCB1cGRhdGUgPSBmYWxzZSkge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBhbHRlckRhdGUodGhpcy5jdXJyZW50VmFsdWUsIG92ZXJyaWRlcylcbiAgICAgIGlmICh1cGRhdGUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RlcERlY2FkZShzdGVwKSB7XG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcCAqIDEwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzZXRNb2RlKG1vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vZGUgPSBtb2RlXG4gICAgfSxcblxuICAgIHN0ZXBNb250aChzdGVwKSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgY29uc3QgeyB5ZWFyLCBtb250aCB9ID0gdGhpcy5nZXRZZWFyTW9udGgoXG4gICAgICAgIGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKSArIHN0ZXBcbiAgICAgIClcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIG1vbnRoLFxuICAgICAgICBkYXk6IE1hdGgubWluKFxuICAgICAgICAgIHRoaXMuZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpLFxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlLmdldERhdGUoKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzdGVwWWVhcihzdGVwKSB7XG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2VsZWN0RGF0ZShkYXRlKSB7XG4gICAgICB0aGlzLnNldERhdGUoZGVzY3JpYmVEYXRlKGRhdGUpLCB0cnVlKVxuICAgICAgdGhpcy4kZW1pdCgnc2VsZWN0JylcbiAgICB9LFxuXG4gICAgc2VsZWN0TW9udGgobW9udGgpIHtcbiAgICAgIHRoaXMuc2V0TW9kZSgnZGF5JylcbiAgICAgIC8vIFNldCBkYXkgdG8gMSB0byBhdm9pZCBzZWxlY3RpbmcgYSBkYXRlIHRoYXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGVcbiAgICAgIC8vIG5ldyBtb250aCwgZS5nLiBGZWIgMzEgLT4gTWFyIDMuXG4gICAgICB0aGlzLnNldERhdGUoeyBtb250aCwgZGF5OiAxIH0sIHRydWUpXG4gICAgfSxcblxuICAgIHNlbGVjdFllYXIoeWVhcikge1xuICAgICAgdGhpcy5zZXRNb2RlKCdtb250aCcpXG4gICAgICB0aGlzLnNldERhdGUoeyB5ZWFyIH0sIHRydWUpXG4gICAgfSxcblxuICAgIGdldFllYXJNb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgaWYgKG1vbnRoID4gMTEpIHtcbiAgICAgICAgeWVhcisrXG4gICAgICAgIG1vbnRoID0gMFxuICAgICAgfSBlbHNlIGlmIChtb250aCA8IDApIHtcbiAgICAgICAgeWVhci0tXG4gICAgICAgIG1vbnRoID0gMTFcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHllYXIsIG1vbnRoIH1cbiAgICB9LFxuXG4gICAgZGF0ZVRvU3RyaW5nKFxuICAgICAgZGF0ZSxcbiAgICAgIHsgeWVhciwgbW9udGgsIGRheSB9ID0geyB5ZWFyOiB0cnVlLCBtb250aDogdHJ1ZSwgZGF5OiB0cnVlIH1cbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRlLnRvTG9jYWxlU3RyaW5nKHRoaXMubG9jYWxlLCB7XG4gICAgICAgIHllYXI6IHllYXIgJiYgJ251bWVyaWMnLFxuICAgICAgICBtb250aDogbW9udGggJiYgJ2xvbmcnLFxuICAgICAgICBkYXk6IGRheSAmJiAnbnVtZXJpYydcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGRlY2FkZVRvU3RyaW5nKGRhdGUpIHtcbiAgICAgIGNvbnN0IHllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKGRhdGUuZ2V0RnVsbFllYXIoKSlcbiAgICAgIHJldHVybiBgJHt5ZWFyfSDigJMgJHt5ZWFyICsgOX1gXG4gICAgfSxcblxuICAgIGdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGggKyAxLCAwKS5nZXREYXRlKClcbiAgICB9LFxuXG4gICAgZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcikge1xuICAgICAgY29uc3QgeWVhclN0ciA9IHllYXIudG9TdHJpbmcoKVxuICAgICAgcmV0dXJuICtgJHt5ZWFyU3RyLnNsaWNlKDAsIC0xKX0wYFxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZSh7IHN0ZXAsIGVudGVyLCBtb2RlID0gdGhpcy5jdXJyZW50TW9kZSwgdXBkYXRlID0gZmFsc2UgfSkge1xuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICB0aGlzLnNldERhdGUoeyBkYXk6IGN1cnJlbnRWYWx1ZS5nZXREYXRlKCkgKyBzdGVwIH0sIHVwZGF0ZSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKHsgbW9udGg6IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpICsgc3RlcCB9LCB1cGRhdGUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKHsgeWVhcjogY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwIH0sIHVwZGF0ZSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gZWxzZSBpZiAoZW50ZXIpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmN1cnJlbnRNb2RlKSB7XG4gICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0ZShjdXJyZW50VmFsdWUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgIHRoaXMuc2V0TW9kZSgnZGF5JylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICB0aGlzLnNldE1vZGUoJ21vbnRoJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlRGF0ZVJhbmdlKCkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2UgPSBbXVxuICAgICAgdGhpcy55ZWFyUmFuZ2UgPSBbXVxuXG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgY29uc3QgeWVhciA9IGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICBjb25zdCBtb250aCA9IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpXG4gICAgICBjb25zdCBzdGFydFllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKHllYXIpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICAgICAgdGhpcy55ZWFyUmFuZ2UucHVzaChzdGFydFllYXIgKyBpKVxuICAgICAgfVxuICAgICAgY29uc3QgY3Vyck1vbnRoRmlyc3REYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSlcbiAgICAgIGxldCBmaXJzdERheVdlZWsgPSBjdXJyTW9udGhGaXJzdERheS5nZXREYXkoKSArIDFcbiAgICAgIGlmIChmaXJzdERheVdlZWsgPT09IDApIHtcbiAgICAgICAgZmlyc3REYXlXZWVrID0gN1xuICAgICAgfVxuICAgICAgY29uc3QgbnVtRGF5cyA9IHRoaXMuZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpXG4gICAgICBpZiAoZmlyc3REYXlXZWVrID4gMSkge1xuICAgICAgICBjb25zdCBwcmV2TW9udGggPSB0aGlzLmdldFllYXJNb250aCh5ZWFyLCBtb250aCAtIDEpXG4gICAgICAgIGNvbnN0IHByZXZNb250aE51bURheXMgPSB0aGlzLmdldERheXNJbk1vbnRoKFxuICAgICAgICAgIHByZXZNb250aC55ZWFyLFxuICAgICAgICAgIHByZXZNb250aC5tb250aFxuICAgICAgICApXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZmlyc3REYXlXZWVrOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXkgPSBwcmV2TW9udGhOdW1EYXlzIC0gZmlyc3REYXlXZWVrICsgaSArIDFcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUocHJldk1vbnRoLnllYXIsIHByZXZNb250aC5tb250aCwgZGF5KVxuICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgICAgdGV4dDogZGF5LFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKClcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG51bURheXM7IGkrKykge1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGkpXG4gICAgICAgIGNvbnN0IGlzRGF5ID0gZGF0ZSA9PiAoXG4gICAgICAgICAgZGF0ZSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpID09PSBpICYmXG4gICAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmXG4gICAgICAgICAgZGF0ZS5nZXRNb250aCgpID09PSBtb250aFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHN0YXRlID0gaXNEYXkodGhpcy5tb2RlbFZhbHVlKVxuICAgICAgICAgID8gJ2FjdGl2ZSdcbiAgICAgICAgICA6IGlzRGF5KG5vdylcbiAgICAgICAgICAgID8gJ3RvZGF5J1xuICAgICAgICAgICAgOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKVxuICAgICAgICAgICAgICA/ICdkaXNhYmxlZCdcbiAgICAgICAgICAgICAgOiBpc0RheShjdXJyZW50VmFsdWUpXG4gICAgICAgICAgICAgICAgPyAnY3VycmVudCdcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICBkYXRlLFxuICAgICAgICAgIHN0YXRlXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRNb250aE5lZWQgPSA0MiAtIHRoaXMuZGF0ZVJhbmdlLmxlbmd0aFxuICAgICAgaWYgKG5leHRNb250aE5lZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoICsgMSlcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbmV4dE1vbnRoTmVlZDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKG5leHRNb250aC55ZWFyLCBuZXh0TW9udGgubW9udGgsIGkpXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGxvY2FsZU5hbWVzID0ge31cblxuLy8gQ2FsbGluZyBgdG9Mb2NhbGVTdHJpbmcoKWAgdGhpcyBtdWNoIGFwcGVhcnMgdG8gYmUgZXhwZW5zaXZlLCBzbyBjYWNoZSBpdDpcbmZ1bmN0aW9uIGdldExvY2FsZU5hbWVzKGxvY2FsZSkge1xuICBsZXQgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdXG4gIGlmICghbmFtZXMpIHtcbiAgICBjb25zdCB3ZWVrZGF5TmFtZXMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgMCwgaSlcbiAgICAgIHdlZWtkYXlOYW1lcy5wdXNoKHtcbiAgICAgICAgbG9uZzogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTI7IGkrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDAsIGksIDApXG4gICAgICBtb250aE5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdzaG9ydCcgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIG5hbWVzID0gbG9jYWxlTmFtZXNbbG9jYWxlXSA9IHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXNcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5hbWVzXG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jYWxlbmRhciB7XG4gIG1pbi13aWR0aDogMjQwcHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5kaXRvLWNhbGVuZGFyLXBvcHVwIHtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgei1pbmRleDogJHotaW5kZXgtcG9wdXA7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWJvZHkge1xuICBwYWRkaW5nOiAwIDAuNWVtO1xuXG4gIHNwYW4ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogY2FsYygxMDAlIC8gNyk7XG4gICAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICAgIGxpbmUtaGVpZ2h0OiBjYWxjKCN7JGlucHV0LWhlaWdodH0gLSAycHgpO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tdG9kYXkge1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlO1xuICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUge1xuICAgICYsXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWQsXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZ3JheSB7XG4gICAgY29sb3I6ICM5OTk5OTk7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItbW9udGhzLFxuLmRpdG8tY2FsZW5kYXIteWVhcnMge1xuICBzcGFuIHtcbiAgICB3aWR0aDogY2FsYygxMDAlIC8gNCk7XG4gICAgbWFyZ2luOiAwLjVlbSAwO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW4ge1xuICB3aWR0aDogY2FsYygxMDAlIC8gNSk7XG59XG5cbi5kaXRvLWNhbGVuZGFyIGEsXG4uZGl0by1jYWxlbmRhci1kYXRlcyBzcGFuLFxuLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW4sXG4uZGl0by1jYWxlbmRhci15ZWFycyBzcGFuIHtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uZGl0by1jYWxlbmRhci1oZWFkZXIgc3BhbiB7XG4gIGN1cnNvcjogZGVmYXVsdDtcblxuICBhIHtcbiAgICBwYWRkaW5nOiAwIDAuMmVtO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLWRhdGVzIHNwYW46aG92ZXIsXG4uZGl0by1jYWxlbmRhci1tb250aHMgc3Bhbjpob3Zlcixcbi5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW46aG92ZXIsXG4uZGl0by1jYWxlbmRhcjpub3QoOmhvdmVyKSAuZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQge1xuICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0O1xufVxuXG4uZGl0by1jYWxlbmRhci13ZWVrZGF5cyBzcGFuIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xufVxuXG4uZGl0by1jYWxlbmRhci1oZWFkZXIsXG4uZGl0by1jYWxlbmRhci1mb290ZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbn1cblxuLmRpdG8tY2FsZW5kYXItZm9vdGVyIHtcbiAgYm9yZGVyLXRvcDogJGJvcmRlci1zdHlsZTtcbn1cblxuLmRpdG8tY2FsZW5kYXItaGVhZGVyIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGU7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgPiBzcGFuIHtcbiAgICBtYXJnaW46IGF1dG87XG4gICAgcGFkZGluZzogMCAwLjVlbTtcbiAgfVxuXG4gIGEge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LFxuLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogNSU7XG4gIG1pbi13aWR0aDogMmVtO1xuICBtYXgtd2lkdGg6IDNlbTtcblxuICAmOjphZnRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgZm9udC1zaXplOiAxLjI1ZW07XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2IHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfigLknO1xuICB9XG5cbiAgJi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfCqyc7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0IHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfigLonO1xuICB9XG5cbiAgJi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfCuyc7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc2VsZWN0LW5vdyB7XG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnTm93JztcbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkRXZlbnRzKHRhcmdldHMsIGV2ZW50cykge1xuICB0YXJnZXRzID1cbiAgICB0YXJnZXRzIGluc3RhbmNlb2YgTm9kZUxpc3RcbiAgICAgID8gQXJyYXkuZnJvbSh0YXJnZXRzKVxuICAgICAgOiBhc0FycmF5KHRhcmdldHMpXG5cbiAgZm9yIChjb25zdCBbdHlwZSwgaGFuZGxlcl0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgZm9yIChjb25zdCBbdHlwZSwgaGFuZGxlcl0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVFdmVudHMoLi4uZXZlbnRzKSB7XG4gIHJldHVybiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgZXZlbnQucmVtb3ZlKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleShldmVudCkge1xuICByZXR1cm4ge1xuICAgIDM3OiAnbGVmdCcsXG4gICAgMzg6ICd1cCcsXG4gICAgMzk6ICdyaWdodCcsXG4gICAgNDA6ICdkb3duJyxcbiAgICAxMzogJ2VudGVyJ1xuICB9W2V2ZW50Py5rZXlDb2RlXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5TmF2aWdhdGlvbihldmVudCkge1xuICBjb25zdCBrZXkgPSBnZXRLZXkoZXZlbnQpXG4gIHJldHVybiB7XG4gICAgaG9yOiB7IGxlZnQ6IC0xLCByaWdodDogMSB9W2tleV0gfHwgMCxcbiAgICB2ZXI6IHsgdXA6IC0xLCBkb3duOiAxIH1ba2V5XSB8fCAwLFxuICAgIGVudGVyOiBrZXkgPT09ICdlbnRlcidcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFyZ2V0KGNvbXBvbmVudCkge1xuICBjb25zdCB0YXJnZXQgPSBpc1N0cmluZyhjb21wb25lbnQudGFyZ2V0KVxuICAgID8gY29tcG9uZW50LiRyZWZzW2NvbXBvbmVudC50YXJnZXRdXG4gICAgOiBjb21wb25lbnQudGFyZ2V0XG4gIHJldHVybiB0YXJnZXQ/LiRlbCA/PyB0YXJnZXRcbn1cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWlmPVwiYWx3YXlzU2hvd1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnY2xpY2snXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnZm9jdXMnIHx8IHRyaWdnZXIgPT09ICdhbHdheXMnXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICBUcmFuc2l0aW9uKDpuYW1lPVwiYGRpdG8tJHt0cmFuc2l0aW9ufWBcIilcbiAgICAuZGl0by1wb3B1cChcbiAgICAgIHYtaWY9XCJ0cmlnZ2VyID09PSAnaG92ZXInXCJcbiAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICByZWY9XCJwb3B1cFwiXG4gICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgKVxuICAgIC5kaXRvLXBvcHVwKFxuICAgICAgdi1lbHNlXG4gICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzLCBjb21iaW5lRXZlbnRzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5pbXBvcnQgeyBnZXRUYXJnZXQgfSBmcm9tICcuLi91dGlscy90cmlnZ2VyJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTpzaG93J10sXG5cbiAgcHJvcHM6IHtcbiAgICB0cmlnZ2VyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2NsaWNrJyB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbScgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3VzdG9tQ2xhc3M6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgekluZGV4OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIGtlZXBJblZpZXc6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhpZGVXaGVuQ2xpY2tPdXRzaWRlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBhbHdheXNTaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY292ZXI6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBoaWRlRGVsYXk6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIHBvcHVwUGxhY2VtZW50OiB0aGlzLnBsYWNlbWVudCxcbiAgICAgIGZvY3VzRXZlbnRzOiBudWxsLFxuICAgICAgY2xvc2VFdmVudHM6IG51bGwsXG4gICAgICBwb3B1cEV2ZW50czogbnVsbCxcbiAgICAgIGJsdXJUaW1lcjogbnVsbCxcbiAgICAgIG1vdXNlTGVhdmVUaW1lcjogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRyaWdnZXJDbGFzcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXRyaWdnZXItZGlzYWJsZWQnOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBvcHVwQ2xhc3MoKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgICBbYGRpdG8tcG9wdXAtJHtoeXBoZW5hdGUodGhpcy5wbGFjZW1lbnQpfWBdOiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jdXN0b21DbGFzcykge1xuICAgICAgICBjbGFzc2VzW3RoaXMuY3VzdG9tQ2xhc3NdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXNcbiAgICB9LFxuXG4gICAgcG9wdXBTdHlsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnpJbmRleCA/IGB6LWluZGV4OiAke3RoaXMuekluZGV4fWAgOiAnJ1xuICAgIH0sXG5cbiAgICB0cmlnZ2VyVGFyZ2V0KCkge1xuICAgICAgcmV0dXJuIGdldFRhcmdldCh0aGlzKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93IHx8IHRoaXMuYWx3YXlzU2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCB0bylcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy5vblNob3dQb3B1cCh0bykpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdmb2N1cycpIHtcbiAgICAgIHRoaXMuZm9jdXNFdmVudHMgPSB0aGlzLmFkZEZvY3VzRXZlbnRzKHRoaXMudHJpZ2dlclRhcmdldCA/PyB0cmlnZ2VyKVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhpZGVXaGVuQ2xpY2tPdXRzaWRlICYmICF0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIC8vIFVzZSAnbW91c2V1cCcgaW5zdGVhZCBvZiAnY2xpY2snLCBzaW5jZSBjbGljayBhcHBlYXJzIHRvIGhhcHBlbiBhZnRlclxuICAgICAgLy8gdGhlIERPTSBpbnNpZGUgb2YgcG9wdXBzIGNvdWxkIGNoYW5nZSBpbiBhIHdheSBzbyB0aGF0IHRoZSBjaGVja1xuICAgICAgLy8gYHBvcHVwLmNvbnRhaW5zKGV2ZW50LnRhcmdldClgIHdvdWxkIGZhaWw6XG4gICAgICB0aGlzLmNsb3NlRXZlbnRzID0gYWRkRXZlbnRzKHdpbmRvdywge1xuICAgICAgICBtb3VzZXVwOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgJiZcbiAgICAgICAgICAgICFwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdHJpZ2dlci5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdGhpcy50cmlnZ2VyVGFyZ2V0Py5jb250YWlucyhldmVudC50YXJnZXQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWx3YXlzU2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5zaG93UG9wdXAgPSB0aGlzLnNob3dcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5mb2N1c0V2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLmNsb3NlRXZlbnRzPy5yZW1vdmUoKVxuICAgIHRoaXMucG9wdXBFdmVudHM/LnJlbW92ZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHVwZGF0ZVBvc2l0aW9uKCkge1xuICAgICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgICAgaWYgKHRoaXMuc2hvdyAmJiBwb3B1cC5vZmZzZXRXaWR0aCA9PT0gMCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlUG9zaXRpb24oKSwgMClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMudHJpZ2dlclRhcmdldCA/PyB0cmlnZ2VyXG4gICAgICAvLyBBY3R1YWxseSByZXNpemUgdGhlIHBvcHVwJ3MgZmlyc3QgY2hpbGQsIHNvIHRoZXkgY2FuIHNldCBzaXplIGxpbWl0cy5cbiAgICAgIGNvbnN0IGVsID0gdGhpcy50YXJnZXQgPT09ICdwb3B1cCcgPyB0cmlnZ2VyIDogcG9wdXAuZmlyc3RFbGVtZW50Q2hpbGRcbiAgICAgIGlmIChlbCkge1xuICAgICAgICBlbC5zdHlsZS53aWR0aCA9IGdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS53aWR0aFxuICAgICAgfVxuXG4gICAgICBjb25zdCBib3VuZHMgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IHRyaWdnZXJMZWZ0ID0gYm91bmRzLmxlZnQgKyB3aW5kb3cuc2Nyb2xsWFxuICAgICAgY29uc3QgdHJpZ2dlclRvcCA9IGJvdW5kcy50b3AgKyB3aW5kb3cuc2Nyb2xsWVxuICAgICAgY29uc3QgdHJpZ2dlcldpZHRoID0gYm91bmRzLndpZHRoXG4gICAgICBjb25zdCB0cmlnZ2VySGVpZ2h0ID0gYm91bmRzLmhlaWdodFxuICAgICAgY29uc3QgcG9wdXBXaWR0aCA9IHBvcHVwLm9mZnNldFdpZHRoXG4gICAgICBjb25zdCBwb3B1cEhlaWdodCA9IHBvcHVwLm9mZnNldEhlaWdodFxuXG4gICAgICBsZXQgW3BhcnQxLCBwYXJ0Ml0gPSB0aGlzLnBvcHVwUGxhY2VtZW50LnNwbGl0KCctJykgfHwgW11cbiAgICAgIGlmICh0aGlzLmtlZXBJblZpZXcpIHtcbiAgICAgICAgY29uc3Qgd2luV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgICAgICBjb25zdCB3aW5IZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICAgICAgaWYgKHBhcnQxID09PSAndG9wJykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyVG9wIDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ2JvdHRvbSdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgaWYgKHdpbkhlaWdodCAtIHRyaWdnZXJUb3AgLSB0cmlnZ2VySGVpZ2h0IDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ3RvcCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdsZWZ0Jykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyTGVmdCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmICh3aW5XaWR0aCAtIHRyaWdnZXJMZWZ0IC0gdHJpZ2dlcldpZHRoIDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDEgPSAnbGVmdCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydDIgPT09ICd0b3AnKSB7XG4gICAgICAgICAgaWYgKHdpbkhlaWdodCAtIHRyaWdnZXJUb3AgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDIgPSAnYm90dG9tJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlclRvcCArIHRyaWdnZXJIZWlnaHQgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDIgPSAndG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHdpbldpZHRoIC0gdHJpZ2dlckxlZnQgPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdyaWdodCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlckxlZnQgKyB0cmlnZ2VyV2lkdGggPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdsZWZ0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgbGVmdCA9IDBcbiAgICAgIGxldCB0b3AgPSAwXG4gICAgICBzd2l0Y2ggKHBhcnQxKSB7XG4gICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgdG9wIC09IHBvcHVwSGVpZ2h0XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgbGVmdCAtPSBwb3B1cFdpZHRoXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgIGxlZnQgKz0gdHJpZ2dlcldpZHRoXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICB0b3AgKz0gdHJpZ2dlckhlaWdodFxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHBhcnQyKSB7XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICBsZWZ0IC09IHBvcHVwV2lkdGggLSB0cmlnZ2VyV2lkdGhcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIHRvcCAtPSBwb3B1cEhlaWdodCAtIHRyaWdnZXJIZWlnaHRcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY292ZXIpIHtcbiAgICAgICAgaWYgKHBhcnQxID09PSAndG9wJykge1xuICAgICAgICAgIHRvcCArPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgdG9wIC09IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRhcmdldCAhPT0gdHJpZ2dlcikge1xuICAgICAgICBjb25zdCB0cmlnZ2VyQm91bmRzID0gdHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICBsZWZ0ICs9IHRyaWdnZXJMZWZ0IC0gdHJpZ2dlckJvdW5kcy5sZWZ0XG4gICAgICAgIHRvcCArPSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckJvdW5kcy50b3BcbiAgICAgIH1cbiAgICAgIHBvcHVwLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YFxuICAgICAgcG9wdXAuc3R5bGUudG9wID0gYCR7dG9wfXB4YFxuICAgIH0sXG5cbiAgICBhZGRGb2N1c0V2ZW50cyhwYXJlbnQpIHtcbiAgICAgIGNvbnN0IHRhcmdldHMgPSBwYXJlbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsIHRleHRhcmVhJylcbiAgICAgIGxldCBpbnB1dFxuXG4gICAgICByZXR1cm4gY29tYmluZUV2ZW50cyhcbiAgICAgICAgYWRkRXZlbnRzKHRhcmdldHMsIHtcbiAgICAgICAgICBmb2N1czogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZXIpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIFVzZSB0aW1lb3V0IHRvIGFsbG93IGNsaWNrZWQgaW5wdXRzIHRvIGdyYWIgZm9jdXNcbiAgICAgICAgICAgIHRoaXMuYmx1clRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghdGhpcy4kcmVmcy5wb3B1cC5tYXRjaGVzKCc6Zm9jdXMtd2l0aGluJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDApXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcblxuICAgICAgICBhZGRFdmVudHMocGFyZW50LCB7XG4gICAgICAgICAgbW91c2Vkb3duOiBldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKCdpbnB1dCwgdGV4dGFyZWEsIGJ1dHRvbicpKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0Lm1hdGNoZXMoJy5kaXRvLWJ1dHRvbi1jbGVhcicpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRyaWdnZXIgPSB0aGlzLnRyaWdnZXJUYXJnZXQgPz8gdGhpcy4kcmVmcy50cmlnZ2VyXG4gICAgICAgICAgICAgIC8vIE1hcmsgdHJpZ2dlciBpbnB1dCBhcyByZWFkb25seSBzbyBpdCBjYW4ndCBsb29zZSBmb2N1cyB3aGlsZVxuICAgICAgICAgICAgICAvLyB1c2VyIGRvZXMgb3RoZXIgbW91c2UtYWN0aXZpdGllcyBpbiBwb3B1cC5cbiAgICAgICAgICAgICAgaW5wdXQgPSB0cmlnZ2VyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0LCB0ZXh0YXJlYScpXG4gICAgICAgICAgICAgIGlmIChpbnB1dCAmJiAhaW5wdXQuaGFzQXR0cmlidXRlKCdyZWFkb25seScpKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdyZWFkb25seScsICd0cnVlJylcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG51bGxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBtb3VzZXVwOiBldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAgICAgLy8gR2l2ZSBzb21lIHRpbWUgZm9yIG90aGVyIGV2ZW50cyB0byB1cGRhdGUgaW5wdXQgYmVmb3JlIGl0XG4gICAgICAgICAgICAgIC8vIGJlY29tZXMgZWRpdGFibGUgYW5kIHN0aWxsIGZvY3VzZWQgYWdhaW4uXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlucHV0LnJlbW92ZUF0dHJpYnV0ZSgncmVhZG9ubHknKVxuICAgICAgICAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0Lm1hdGNoZXMoJ2lucHV0LCB0ZXh0YXJlYSwgYnV0dG9uJykpIHtcbiAgICAgICAgICAgICAgICAgIGlucHV0LmZvY3VzKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBudWxsXG4gICAgICAgICAgICAgIH0sIDApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBvblNob3dQb3B1cChzaG93KSB7XG4gICAgICBpZiAoc2hvdykge1xuICAgICAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnZm9jdXMnKSB7XG4gICAgICAgICAgdGhpcy5wb3B1cEV2ZW50cyA9IHRoaXMuYWRkRm9jdXNFdmVudHModGhpcy4kcmVmcy5wb3B1cClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucG9wdXBFdmVudHM/LnJlbW92ZSgpXG4gICAgICAgIHRoaXMucG9wdXBFdmVudHMgPSBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2xpY2soKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uSG92ZXIoZW50ZXIpIHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tb3VzZUxlYXZlVGltZXIpXG4gICAgICAgIGlmIChlbnRlcikge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmhpZGVEZWxheSkge1xuICAgICAgICAgICAgdGhpcy5tb3VzZUxlYXZlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgICAgfSwgdGhpcy5oaWRlRGVsYXkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5AaW1wb3J0ICcuLi9zdHlsZXMvdHJhbnNpdGlvbnMvaW5kZXguc2Nzcyc7XG5cbi5kaXRvLXRyaWdnZXItY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uZGl0by10cmlnZ2VyLWRpc2FibGVkIHtcbiAgY29sb3I6ICRjb2xvci1kaXNhYmxlZDtcbiAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG5cbiAgKiB7XG4gICAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgICAmOmZvY3VzIHtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLXBvcHVwIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6ICR6LWluZGV4LXBvcHVwO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1pbnB1dCg6Y2xhc3M9XCJjbGFzc2VzXCIpXG4gIHNsb3QobmFtZT1cImJlZm9yZVwiKVxuICBpbnB1dChcbiAgICA6aWQ9XCJpZFwiXG4gICAgcmVmPVwiaW5wdXRcIlxuICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgIDp0eXBlPVwidHlwZVwiXG4gICAgOm5hbWU9XCJuYW1lXCJcbiAgICA6dGl0bGU9XCJ0aXRsZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpyZWFkb25seT1cInJlYWRvbmx5XCJcbiAgICA6YXV0b2ZvY3VzPVwiYXV0b2ZvY3VzXCJcbiAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgOmF1dG9jb21wbGV0ZT1cImF1dG9jb21wbGV0ZVwiXG4gICAgOmFyaWEtbGFiZWw9XCJ0aXRsZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIClcbiAgc2xvdChuYW1lPVwiYWZ0ZXJcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0eXBlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3RleHQnIH0sXG4gICAgaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0aXRsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHJlYWRvbmx5OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYXV0b2ZvY3VzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYXV0b2NvbXBsZXRlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ29mZicgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgaG92ZXJpbmc6IGZhbHNlLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGF0dHJzLmNsYXNzXG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBfLCAuLi5hdHRyaWJ1dGVzIH0gPSB0aGlzLiRhdHRyc1xuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNcbiAgICB9LFxuXG4gICAgaW5wdXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy5pbnB1dFxuICAgIH0sXG5cbiAgICBzaXplKCkge1xuICAgICAgLy8gRGV0ZXJtaW5lIHNpemUgYmFzZWQgb24gbWluICYgbWF4IHNldHRpbmdzLCBpZiB0aGV5J3JlIHByb3ZpZGVkLlxuICAgICAgY29uc3QgeyBzaXplLCBtaW4sIG1heCB9ID0gdGhpcy4kYXR0cnNcbiAgICAgIGNvbnN0IGdldExlbmd0aCA9IHZhbHVlID0+ICh2YWx1ZSAhPSBudWxsID8gYCR7dmFsdWV9YC5sZW5ndGggOiAwKVxuICAgICAgcmV0dXJuIHNpemUgfHwgZ2V0TGVuZ3RoKG1pbikgfHwgZ2V0TGVuZ3RoKG1heCkgfHwgdW5kZWZpbmVkXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKGN1cnJlbnRWYWx1ZSkge1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPT0gdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1pbnB1dCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcblxuICBAZXh0ZW5kICVpbnB1dDtcblxuICBpbnB1dCB7XG4gICAgLy8gSW5oZXJpdCBhbGwgc3R5bGluZyBmcm9tIC5kaXRvLWlucHV0XG4gICAgYWxsOiBpbmhlcml0O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3JkZXI6IDA7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuaS5kaXRvLWljb24oXG4gIDpjbGFzcz1ge1xuICAgIFsnZGl0by1pY29uLS0nICsgbmFtZV06IHRydWUsXG4gICAgJ2RpdG8taWNvbi0tZGlzYWJsZWQnOiBkaXNhYmxlZFxuICB9YFxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgZGlzYWJsZWQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLy8gYHlhcm4gYnVpbGQ6aWNvbnNgIGNvbnZlcnRzIHRoZSBpY29uIFNWRyBmaWxlcyB0byBzaWxlbnQgY2xhc3NlcyBpbnNpZGVcbi8vIGBzcmMvc3R5bGVzL21peGlucy9faWNvbnMuc2Nzc2AsIG1ha2luZyB0aGVtIGF2YWlsYWJsZSB0byBhbGwgb3RoZXIgc2Fzc1xuLy8gY29kZSB0aHJvdWdoIGBfaW1wb3J0c2AuXG4vLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHVzZSB0aGVtIGFzIG5vcm1hbCBDU1MgY2xhc3NlcywgY29udmVydCB0aGVtIGhlcmU6XG5AZWFjaCAkbmFtZSBpbiAkaWNvbnMge1xuICAuZGl0by1pY29uLS0jeyRuYW1lfSB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgQGV4dGVuZCAlaWNvbi0jeyRuYW1lfTtcblxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIH1cbiAgfVxufVxuXG4uZGl0by1pY29uIHtcbiAgQGF0LXJvb3QgLmRpdG8taW5wdXQgJiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAkYm9yZGVyLXdpZHRoO1xuICAgIGxlZnQ6IHVuc2V0O1xuICAgIHdpZHRoOiAyZW07XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGNvbG9yOiAkY29sb3ItZ3JleTtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG5cbiAgICAmLS1kaXNhYmxlZCB7XG4gICAgICBjb2xvcjogJGNvbG9yLWxpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIEBhdC1yb290IC5kaXRvLWlucHV0OmZvY3VzLXdpdGhpbiAmIHtcbiAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsImV4cG9ydCBmdW5jdGlvbiBzZXRTZWxlY3Rpb24oaW5wdXQsIHsgc3RhcnQsIGVuZCB9KSB7XG4gIGlmIChpbnB1dD8uc2V0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICBpbnB1dC5mb2N1cygpXG4gICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKGlucHV0KSB7XG4gIHJldHVybiBpbnB1dCAmJiAnc2VsZWN0aW9uU3RhcnQnIGluIGlucHV0XG4gICAgPyB7IHN0YXJ0OiBpbnB1dC5zZWxlY3Rpb25TdGFydCwgZW5kOiBpbnB1dC5zZWxlY3Rpb25FbmQgfVxuICAgIDogbnVsbFxufVxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5UcmlnZ2VyLmRpdG8tZGF0ZS1waWNrZXIoXG4gIHJlZj1cInRyaWdnZXJcIlxuICB2LW1vZGVsOnNob3c9XCJzaG93UG9wdXBcIlxuICB0cmlnZ2VyPVwiZm9jdXNcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgc2xvdChcbiAgICAgIHYtaWY9XCIkc2xvdHMudHJpZ2dlclwiXG4gICAgICBuYW1lPVwidHJpZ2dlclwiXG4gICAgKVxuICAgIElucHV0RmllbGQuZGl0by1kYXRlLXBpY2tlci1pbnB1dChcbiAgICAgIHYtZWxzZVxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIlxuICAgICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQsIC4uLiRhdHRycyB9XCJcbiAgICAgIEBmb2N1cz1cIm9uRm9jdXModHJ1ZSlcIlxuICAgICAgQGJsdXI9XCJvbkZvY3VzKGZhbHNlKVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvbk1vdXNlRG93bihmYWxzZSlcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCNiZWZvcmUpXG4gICAgICAgIHNsb3QobmFtZT1cImJlZm9yZVwiKVxuICAgICAgdGVtcGxhdGUoI2FmdGVyKVxuICAgICAgICBJY29uKFxuICAgICAgICAgIG5hbWU9XCJjYWxlbmRhclwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIEBtb3VzZWRvd24ucHJldmVudD1cIm9uTW91c2VEb3duKHRydWUpXCJcbiAgICAgICAgKVxuICAgICAgICBzbG90KG5hbWU9XCJhZnRlclwiKVxuICB0ZW1wbGF0ZSgjcG9wdXApXG4gICAgQ2FsZW5kYXIuZGl0by1kYXRlLXBpY2tlci1wb3B1cChcbiAgICAgIHJlZj1cImNhbGVuZGFyXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1iaW5kPVwieyBsb2NhbGUsIGRpc2FibGVkRGF0ZSB9XCJcbiAgICAgIEBzZWxlY3Q9XCJzaG93UG9wdXAgPSBmYWxzZVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGZvcm1hdCwgZGVmYXVsdEZvcm1hdHMgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IFRyaWdnZXIgZnJvbSAnLi9UcmlnZ2VyLnZ1ZSdcbmltcG9ydCBDYWxlbmRhciBmcm9tICcuL0NhbGVuZGFyLnZ1ZSdcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQgSWNvbiBmcm9tICcuL0ljb24udnVlJ1xuaW1wb3J0IHsgcGFyc2VEYXRlLCBnZXREYXRlUGFydEF0UG9zaXRpb24gfSBmcm9tICcuLi91dGlscy9kYXRlLmpzJ1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uLCBzZXRTZWxlY3Rpb24gfSBmcm9tICcuLi91dGlscy9zZWxlY3Rpb24uanMnXG5pbXBvcnQgeyBnZXRLZXlOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5pbXBvcnQgeyBnZXRUYXJnZXQgfSBmcm9tICcuLi91dGlscy90cmlnZ2VyLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgQ2FsZW5kYXIsIElucHV0RmllbGQsIEljb24gfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAndXBkYXRlOnNob3cnLCAnY2hhbmdlJywgJ2ZvY3VzJywgJ2JsdXInXSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbS1sZWZ0JyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6ICd0cmlnZ2VyJyB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6ICgpID0+ICh7XG4gICAgICAgIGRhdGU6IGRlZmF1bHRGb3JtYXRzLmRhdGUsXG4gICAgICAgIHRpbWU6IGZhbHNlXG4gICAgICB9KVxuICAgIH0sXG4gICAgZGlzYWJsZWREYXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd1BvcHVwXG4gICAgfSxcblxuICAgIGlucHV0KCkge1xuICAgICAgcmV0dXJuIGdldFRhcmdldCh0aGlzKT8ucXVlcnlTZWxlY3RvcignaW5wdXQnKVxuICAgIH0sXG5cbiAgICBmb3JtYXRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgLi4udGhpcy5mb3JtYXRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKSB8fCAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBwYXJzZURhdGUodmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucylcbiAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKHZhbHVlKSB7XG4gICAgICBpZiAoK3ZhbHVlICE9PSArdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdmFsdWUpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCB0bylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KHRvID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRm9jdXMoZm9jdXMpIHtcbiAgICAgIHRoaXMuaW5wdXRGb2N1c2VkID0gZm9jdXNcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gZm9jdXNcbiAgICB9LFxuXG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBjb25zdCB7IHZlcjogc3RlcCwgZW50ZXIgfSA9IGdldEtleU5hdmlnYXRpb24oZXZlbnQpXG4gICAgICBpZiAoc3RlcCB8fCBlbnRlcikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRTZWxlY3Rpb24odGhpcy5pbnB1dCk/LnN0YXJ0XG4gICAgICAgIGNvbnN0IGdldERhdGVQYXJ0ID0gcG9zaXRpb24gPT5cbiAgICAgICAgICBnZXREYXRlUGFydEF0UG9zaXRpb24odGhpcy5jdXJyZW50VGV4dCwgcG9zaXRpb24sIHRoaXMuZm9ybWF0T3B0aW9ucylcblxuICAgICAgICBpZiAoc3RlcCAmJiAhdGhpcy5zaG93UG9wdXApIHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB7IGNhbGVuZGFyIH0gPSB0aGlzLiRyZWZzXG4gICAgICAgICAgaWYgKGNhbGVuZGFyKSB7XG4gICAgICAgICAgICBjb25zdCB7IG5hbWU6IG1vZGUsIHN0YXJ0IH0gPSBnZXREYXRlUGFydChwb3NpdGlvbikgfHwge31cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgbW9kZSAmJlxuICAgICAgICAgICAgICBjYWxlbmRhci5uYXZpZ2F0ZSh7IHN0ZXAsIGVudGVyLCBtb2RlLCB1cGRhdGU6IHRydWUgfSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24odGhpcy5pbnB1dCwgZ2V0RGF0ZVBhcnQoc3RhcnQpKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Nb3VzZURvd24odG9nZ2xlKSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9ICF0aGlzLmRpc2FibGVkICYmICghdG9nZ2xlIHx8ICF0aGlzLnNob3dQb3B1cClcbiAgICAgIGlmICh0aGlzLnNob3dQb3B1cCkge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kYXRlLXBpY2tlciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1pbi13aWR0aDogOGVtO1xuICB9XG59XG5cbi5kaXRvLWRhdGUtcGlja2VyLXBvcHVwIHtcbiAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luO1xufVxuPC9zdHlsZT5cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuVHJpZ2dlci5kaXRvLXRpbWUtcGlja2VyKFxuICByZWY9XCJ0cmlnZ2VyXCJcbiAgdi1tb2RlbDpzaG93PVwic2hvd1BvcHVwXCJcbiAgdHJpZ2dlcj1cImZvY3VzXCJcbiAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4pXG4gIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgIHNsb3QoXG4gICAgICB2LWlmPVwiJHNsb3RzLnRyaWdnZXJcIlxuICAgICAgbmFtZT1cInRyaWdnZXJcIlxuICAgIClcbiAgICBJbnB1dEZpZWxkLmRpdG8tdGltZS1waWNrZXItaW5wdXQoXG4gICAgICB2LWVsc2VcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VGV4dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkLCAuLi4kYXR0cnMgfVwiXG4gICAgICBAZm9jdXM9XCJvbkZvY3VzKHRydWUpXCJcbiAgICAgIEBibHVyPVwib25Gb2N1cyhmYWxzZSlcIlxuICAgICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25Nb3VzZURvd24oZmFsc2UpXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjYmVmb3JlKVxuICAgICAgICBzbG90KG5hbWU9XCJiZWZvcmVcIilcbiAgICAgIHRlbXBsYXRlKCNhZnRlcilcbiAgICAgICAgSWNvbihcbiAgICAgICAgICBuYW1lPVwiY2xvY2tcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICBAbW91c2Vkb3duLnByZXZlbnQ9XCJvbk1vdXNlRG93bih0cnVlKVwiXG4gICAgICAgIClcbiAgICAgICAgc2xvdChuYW1lPVwiYWZ0ZXJcIilcbiAgdGVtcGxhdGUoI3BvcHVwKVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwXG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLWhvdXIocmVmPVwiaG91clwiKVxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiAyNFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbGkoXG4gICAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRIb3VyKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBob3VyID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cImhvdXIgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItbWludXRlKHJlZj1cIm1pbnV0ZVwiKVxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbGkoXG4gICAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRNaW51dGUoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IG1pbnV0ZSA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJtaW51dGUgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItc2Vjb25kKHJlZj1cInNlY29uZFwiKVxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbGkoXG4gICAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRTZWNvbmQoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IHNlY29uZCA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWNvbmQgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBmb3JtYXQsIGRlZmF1bHRGb3JtYXRzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBUcmlnZ2VyIGZyb20gJy4vVHJpZ2dlci52dWUnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IEljb24gZnJvbSAnLi9JY29uLnZ1ZSdcbmltcG9ydCB7IGFsdGVyRGF0ZSwgcGFyc2VEYXRlLCBnZXREYXRlUGFydEF0UG9zaXRpb24gfSBmcm9tICcuLi91dGlscy9kYXRlLmpzJ1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uLCBzZXRTZWxlY3Rpb24gfSBmcm9tICcuLi91dGlscy9zZWxlY3Rpb24uanMnXG5pbXBvcnQgeyBnZXRLZXlOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5pbXBvcnQgeyBnZXRUYXJnZXQgfSBmcm9tICcuLi91dGlscy90cmlnZ2VyLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgSW5wdXRGaWVsZCwgSWNvbiB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICd1cGRhdGU6c2hvdycsICdjaGFuZ2UnLCAnZm9jdXMnLCAnYmx1ciddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tLWxlZnQnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogJ3RyaWdnZXInIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogKCkgPT4gKHtcbiAgICAgICAgdGltZTogZGVmYXVsdEZvcm1hdHMudGltZSxcbiAgICAgICAgZGF0ZTogZmFsc2VcbiAgICAgIH0pXG4gICAgfSxcbiAgICBkaXNhYmxlZEhvdXI6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH0sXG4gICAgZGlzYWJsZWRNaW51dGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH0sXG4gICAgZGlzYWJsZWRTZWNvbmQ6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgaW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGlnbm9yZU5leHRDaGFuZ2U6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dQb3B1cFxuICAgIH0sXG5cbiAgICBpbnB1dCgpIHtcbiAgICAgIHJldHVybiBnZXRUYXJnZXQodGhpcyk/LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JylcbiAgICB9LFxuXG4gICAgZm9ybWF0T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgIC4uLnRoaXMuZm9ybWF0XG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQodGhpcy5jdXJyZW50VmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucykgfHwgJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBkYXRlID0gcGFyc2VEYXRlKHZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudERhdGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSB8fFxuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgRGF0ZSgpIG9iamVjdCB3aXRoIHRoZSB0aW1lIHNldCB0byAwLCB0byBiZSB1c2VkIHdoZW5cbiAgICAgICAgLy8gZmlyc3Qgc2V0dGluZyBhbnkgb2YgdGhlIHRpbWVzLCBmb3IgbWVhbmluZ2Z1bCBkYXRlcyBpbiBjYXNlIHRoZVxuICAgICAgICAvLyBvYmplY3QgaXMgc2hhcmVkIHdpdGggYSBEYXRlUGlja2VyLCBlLmcuIHRocm91Z2ggRGF0ZVRpbWVQaWNrZXIuXG4gICAgICAgIGFsdGVyRGF0ZShuZXcgRGF0ZSgpLCB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBtaWxsaXNlY29uZDogMCB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBob3VyOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldEhvdXJzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChob3VyKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IGhvdXIgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWludXRlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldE1pbnV0ZXMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KG1pbnV0ZSkge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBtaW51dGUgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2Vjb25kOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldFNlY29uZHMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KHNlY29uZCkge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBzZWNvbmQgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICAgIHRoaXMuc2Nyb2xsQWxsKHRydWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh2YWx1ZSkge1xuICAgICAgaWYgKCt2YWx1ZSAhPT0gK3RoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHZhbHVlKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSlcbiAgICAgICAgdGhpcy5zY3JvbGxBbGwodHJ1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQoKSB7XG4gICAgICBjb25zdCB7IGlucHV0IH0gPSB0aGlzXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBnZXRTZWxlY3Rpb24oaW5wdXQpXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuZm9jdXNlZCAmJlxuICAgICAgICAhdGhpcy5pZ25vcmVOZXh0Q2hhbmdlICYmXG4gICAgICAgIHNlbGVjdGlvbi5zdGFydCA9PT0gc2VsZWN0aW9uLmVuZFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHNldFNlbGVjdGlvbihpbnB1dCwgc2VsZWN0aW9uKSlcbiAgICAgIH1cbiAgICAgIHRoaXMuaWdub3JlTmV4dENoYW5nZSA9IGZhbHNlXG4gICAgfSxcblxuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsQWxsKGZhbHNlKVxuICAgICAgfVxuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIHRvKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQodG8gPyAnZm9jdXMnIDogJ2JsdXInKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbGVmdFBhZCh2YWx1ZSkge1xuICAgICAgcmV0dXJuICgnMCcgKyB2YWx1ZSkuc2xpY2UoLTIpXG4gICAgfSxcblxuICAgIHNldFRpbWUob3ZlcnJpZGVzKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGFsdGVyRGF0ZSh0aGlzLmN1cnJlbnREYXRlLCB7XG4gICAgICAgIC4uLm92ZXJyaWRlcyxcbiAgICAgICAgbWlsbGlzZWNvbmQ6IDBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNjcm9sbEFsbChzbW9vdGgpIHtcbiAgICAgIGNvbnN0IHNjcm9sbCA9IChyZWYsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuJHJlZnNbcmVmXVxuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgY29uc3QgbGluZUhlaWdodCA9IChcbiAgICAgICAgICAgIHRhcmdldC5zY3JvbGxIZWlnaHQgL1xuICAgICAgICAgICAgLy8gRmlyc3QgYW5kIGxhc3Qgb25lIGFkZCAzIHRpbWVzIHRoZSBtYXJnaW4uXG4gICAgICAgICAgICAodGFyZ2V0LmNoaWxkRWxlbWVudENvdW50ICsgNilcbiAgICAgICAgICApXG4gICAgICAgICAgY29uc3QgdG9wID0gTWF0aC5yb3VuZCh2YWx1ZSAqIGxpbmVIZWlnaHQpXG4gICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLmFicyh0YXJnZXQuc2Nyb2xsVG9wIC0gdG9wKVxuICAgICAgICAgIHRhcmdldC5zY3JvbGxUbyh7XG4gICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICBiZWhhdmlvcjogc21vb3RoICYmIGRpc3RhbmNlIDwgMTAwID8gJ3Ntb290aCcgOiAnYXV0bydcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHNjcm9sbCgnaG91cicsIHRoaXMuaG91cilcbiAgICAgICAgc2Nyb2xsKCdtaW51dGUnLCB0aGlzLm1pbnV0ZSlcbiAgICAgICAgc2Nyb2xsKCdzZWNvbmQnLCB0aGlzLnNlY29uZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRm9jdXMoZm9jdXMpIHtcbiAgICAgIHRoaXMuaW5wdXRGb2N1c2VkID0gZm9jdXNcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gZm9jdXNcbiAgICB9LFxuXG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBjb25zdCB7IGlucHV0IH0gPSB0aGlzXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBnZXRTZWxlY3Rpb24oaW5wdXQpXG4gICAgICBjb25zdCB7IHZlcjogc3RlcCwgZW50ZXIgfSA9IGdldEtleU5hdmlnYXRpb24oZXZlbnQpXG4gICAgICBpZiAoc3RlcCB8fCBlbnRlcikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAgICAgY29uc3QgZ2V0RGF0ZVBhcnQgPSBwb3NpdGlvbiA9PlxuICAgICAgICAgIGdldERhdGVQYXJ0QXRQb3NpdGlvbih0aGlzLmN1cnJlbnRUZXh0LCBwb3NpdGlvbiwgdGhpcy5mb3JtYXRPcHRpb25zKVxuXG4gICAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLnNob3dQb3B1cCkge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmFtZSwgc3RhcnQgfSA9IGdldERhdGVQYXJ0KHNlbGVjdGlvbi5zdGFydCkgfHwge31cbiAgICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1tuYW1lXSArIHN0ZXBcbiAgICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLiRyZWZzW25hbWVdLmNoaWxkRWxlbWVudENvdW50XG4gICAgICAgICAgICAgIHRoaXNbbmFtZV0gPVxuICAgICAgICAgICAgICAgIHZhbHVlIDwgMFxuICAgICAgICAgICAgICAgICAgPyB2YWx1ZSArIGNvdW50XG4gICAgICAgICAgICAgICAgICA6IHZhbHVlID49IGNvdW50XG4gICAgICAgICAgICAgICAgICAgID8gdmFsdWUgLSBjb3VudFxuICAgICAgICAgICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgICAgICAgIHRoaXMuaWdub3JlTmV4dENoYW5nZSA9IHRydWVcbiAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKGlucHV0LCBnZXREYXRlUGFydChzdGFydCkpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlbnRlcikge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb24uc3RhcnQgPT09IHNlbGVjdGlvbi5lbmQpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gaW5wdXRcbiAgICAgICAgbGV0IHBvcyA9IHNlbGVjdGlvbi5zdGFydFxuXG4gICAgICAgIGNvbnN0IGlzRGlnaXQgPSBjaGFyID0+ICFpc05hTihwYXJzZUludChjaGFyLCAxMCkpXG5cbiAgICAgICAgaWYgKGV2ZW50LmtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBpZiAoaXNEaWdpdChldmVudC5rZXkpICYmIHBvcyA8IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB2YWx1ZVtwb3NdID09PSAnOicgJiZcbiAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3MgLSAxXSkgJiZcbiAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3MgLSAyXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBwb3MrK1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVtb3ZlIG5leHQgZGlnaXQgc28gdGhlIGV2ZW50IG92ZXJyaWRlcyBpdCBpbnN0ZWFkIG9mIGluc2VydGluZ1xuICAgICAgICAgICAgLy8gbmV3IGNoYXJzLlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3Bvc10pICYmIChcbiAgICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3BvcyArIDFdKSB8fFxuICAgICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zIC0gMV0pXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IChcbiAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZSgwLCBwb3MpICtcbiAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZShwb3MgKyAxKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHNldFNlbGVjdGlvbihpbnB1dCwgeyBzdGFydDogcG9zLCBlbmQ6IHBvcyB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSBmb3JtYXQodGhpcy5jdXJyZW50VmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucykubGVuZ3RoXG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBsZW5ndGgpXG4gICAgICAgICAgICAgIHNldFNlbGVjdGlvbihpbnB1dCwgc2VsZWN0aW9uKVxuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBwb3MgPT09IDEgfHxcbiAgICAgICAgICAgIFsnICcsICc6J10uaW5jbHVkZXModmFsdWVbcG9zIC0gMl0pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHBvcyA9PT0gdmFsdWUubGVuZ3RoIHx8XG4gICAgICAgICAgICAgIHZhbHVlW3Bvc10gPT09ICc6J1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHBvcy0tXG4gICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gKFxuICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKDAsIHBvcykgK1xuICAgICAgICAgICAgICAgICgodmFsdWVbcG9zIC0gMV0gPz8gJycpICsgJzAwJykgK1xuICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKHBvcyArIDEpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCB7IHN0YXJ0OiBwb3MsIGVuZDogcG9zIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3Bvc10pICYmXG4gICAgICAgICAgICAgICFpc0RpZ2l0KCt2YWx1ZVtwb3MgKyAxXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAvLyBXaGVuIHJlbW92aW5nIHRoZSBmaXJzdCBvZiB0d28gZGlnaXRzLCByZXBsYWNlIHdpdGggMFxuICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIHBvcykgKyAnMCcgKyB2YWx1ZS5zbGljZShwb3MpXG4gICAgICAgICAgICAgIHNldFNlbGVjdGlvbihpbnB1dCwgeyBzdGFydDogcG9zLCBlbmQ6IHBvcyB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbk1vdXNlRG93bih0b2dnbGUpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gIXRoaXMuZGlzYWJsZWQgJiYgKCF0b2dnbGUgfHwgIXRoaXMuc2hvd1BvcHVwKVxuICAgICAgaWYgKHRoaXMuc2hvd1BvcHVwKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRpbWUtcGlja2VyIHtcbiAgLmRpdG8taW5wdXQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1pbi13aWR0aDogNmVtO1xuICB9XG59XG5cbi5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIHtcbiAgbWF4LXdpZHRoOiAxNjBweDtcbiAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luO1xufVxuXG4kdGltZS1waWNrZXItbGluZS1oZWlnaHQ6IDI0cHg7XG5cbi5kaXRvLXRpbWUtcGlja2VyIHtcbiAgLmRpdG8taW5wdXQge1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLmRpdG8tdGltZS1waWNrZXItcG9wdXAge1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uZGl0by10aW1lLXBpY2tlci1wb3B1cCAuZGl0by10aW1lLXBpY2tlci1wYW5lbCB7XG4gIGZsb2F0OiBsZWZ0O1xuICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gIGJvcmRlci13aWR0aDogMCAxcHggMDtcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLyAzICsgMXB4KTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAmOmxhc3QtY2hpbGQge1xuICAgIGJvcmRlci1yaWdodDogMDtcbiAgfVxuXG4gIHVsIHtcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbjogMDtcbiAgICAvLyBIaWRlIHNjcm9sbGJhcjpcbiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgICBwYWRkaW5nOiAwIDE3cHggMCAwO1xuICAgIGhlaWdodDogNyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcblxuICAgICYgPiBsaSB7XG4gICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICBsaW5lLWhlaWdodDogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tdG9wOiAzICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAzICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodDtcbiAgICAgIH1cblxuICAgICAgJi5zZWxlY3RlZCxcbiAgICAgICYuc2VsZWN0ZWQ6aG92ZXIge1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICB9XG5cbiAgICAgICYuZGlzYWJsZWQge1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItZGlzYWJsZWQ7XG4gICAgICB9XG5cbiAgICAgICYuZGlzYWJsZWQ6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZGF0ZS10aW1lLXBpY2tlcihyZWY9XCJwaWNrZXJcIilcbiAgLmRpdG8tZGF0ZS10aW1lLXBpY2tlcl9faW5uZXIoOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiKVxuICAgIElucHV0RmllbGQuZGl0by1kYXRlLXRpbWUtcGlja2VyX19pbnB1dChcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VGV4dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkLCAuLi4kYXR0cnMgfVwiXG4gICAgICBAZm9jdXM9XCJvbkZvY3VzKHRydWUpXCJcbiAgICAgIEBibHVyPVwib25Gb2N1cyhmYWxzZSlcIlxuICAgICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25Nb3VzZURvd24oZmFsc2UpXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjYmVmb3JlKVxuICAgICAgICBzbG90KG5hbWU9XCJiZWZvcmVcIilcbiAgICAgIHRlbXBsYXRlKCNhZnRlcilcbiAgICAgICAgSWNvbihcbiAgICAgICAgICBuYW1lPVwiY2FsZW5kYXJcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICBAbW91c2Vkb3duLnByZXZlbnQ9XCJvbk1vdXNlRG93bih0cnVlKVwiXG4gICAgICAgIClcbiAgICAgICAgc2xvdChuYW1lPVwiYWZ0ZXJcIilcbiAgICBEYXRlUGlja2VyKFxuICAgICAgcmVmPVwiZGF0ZVwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtbW9kZWw6c2hvdz1cInNob3dEYXRlXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgICAgIC8vLSBJbnRlbnRpb25hbGx5IGVtcHR5XG4gICAgVGltZVBpY2tlcihcbiAgICAgIHJlZj1cInRpbWVcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICB2LW1vZGVsOnNob3c9XCJzaG93VGltZVwiXG4gICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxuICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICAgICAgLy8tIEludGVudGlvbmFsbHkgZW1wdHlcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBmb3JtYXQsIGRlZmF1bHRGb3JtYXRzLCBhc3NpZ25EZWVwbHkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCBEYXRlUGlja2VyIGZyb20gJy4vRGF0ZVBpY2tlci52dWUnXG5pbXBvcnQgVGltZVBpY2tlciBmcm9tICcuL1RpbWVQaWNrZXIudnVlJ1xuaW1wb3J0IEljb24gZnJvbSAnLi9JY29uLnZ1ZSdcbmltcG9ydCB7IHBhcnNlRGF0ZSB9IGZyb20gJy4uL3V0aWxzL2RhdGUuanMnXG5pbXBvcnQgeyBnZXRTZWxlY3Rpb24sIHNldFNlbGVjdGlvbiB9IGZyb20gJy4uL3V0aWxzL3NlbGVjdGlvbi5qcydcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQsIERhdGVQaWNrZXIsIFRpbWVQaWNrZXIsIEljb24gfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAnY2hhbmdlJywgJ2ZvY3VzJywgJ2JsdXInXSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZm9ybWF0OiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBzaG93RGF0ZTogZmFsc2UsXG4gICAgICBzaG93VGltZTogZmFsc2UsXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgZGF0ZUZvY3VzZWQ6IGZhbHNlLFxuICAgICAgdGltZUZvY3VzZWQ6IGZhbHNlLFxuICAgICAgY2xvc2VkTW9kZTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IHRyYW5zaXRpb24sIGRpc2FibGVkLCBsb2NhbGUsIGZvcm1hdE9wdGlvbnM6IGZvcm1hdCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHsgdHJhbnNpdGlvbiwgZGlzYWJsZWQsIGxvY2FsZSwgZm9ybWF0IH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dEYXRlIHx8IHRoaXMuc2hvd1RpbWVcbiAgICB9LFxuXG4gICAgaW5wdXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy5pbnB1dC5pbnB1dFxuICAgIH0sXG5cbiAgICBmb3JtYXRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIGFzc2lnbkRlZXBseShcbiAgICAgICAge1xuICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgICAgdGltZTogZGVmYXVsdEZvcm1hdHMudGltZSxcbiAgICAgICAgICBkYXRlOiBkZWZhdWx0Rm9ybWF0cy5kYXRlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICBtb250aDogJ3Nob3J0JyxcbiAgICAgICAgICAgIGZvcm1hdDogKHZhbHVlLCB0eXBlLCBvcHRpb25zKSA9PlxuICAgICAgICAgICAgICB0eXBlID09PSAnbGl0ZXJhbCcgJiYgL1xcYmF0XFxiLy50ZXN0KHZhbHVlKVxuICAgICAgICAgICAgICAgID8gJywgJ1xuICAgICAgICAgICAgICAgIDogdGhpcy5mb3JtYXQ/LmRhdGU/LmZvcm1hdD8uKHZhbHVlLCB0eXBlLCBvcHRpb25zKSA/PyB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5mb3JtYXRcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdGltZUluZGV4KCkge1xuICAgICAgY29uc3QgdGV4dCA9IHRoaXMuY3VycmVudFRleHRcbiAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSB0ZXh0Lm1hdGNoKC8oW1xcU10rXFxzKikkLyk/LlsxXVxuICAgICAgICBpZiAodGltZSkge1xuICAgICAgICAgIHJldHVybiB0ZXh0Lmxlbmd0aCAtIHRpbWUubGVuZ3RoXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQodGhpcy5jdXJyZW50VmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucykgfHwgJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBkYXRlID0gcGFyc2VEYXRlKHZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQpXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQsIHNlbGVjdGlvbikpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh2YWx1ZSkge1xuICAgICAgaWYgKCt2YWx1ZSAhPT0gK3RoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHZhbHVlKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KHRvID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRm9jdXMoZm9jdXMpIHtcbiAgICAgIHRoaXMuaW5wdXRGb2N1c2VkID0gZm9jdXNcbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLnVwZGF0ZVBvcHVwcygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dEYXRlID0gZmFsc2VcbiAgICAgICAgdGhpcy5zaG93VGltZSA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uTW91c2VEb3duKHRvZ2dsZSkge1xuICAgICAgaWYgKHRvZ2dsZSAmJiAodGhpcy5zaG93RGF0ZSB8fCB0aGlzLnNob3dUaW1lKSkge1xuICAgICAgICB0aGlzLnNob3dEYXRlID0gZmFsc2VcbiAgICAgICAgdGhpcy5zaG93VGltZSA9IGZhbHNlXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy51cGRhdGVQb3B1cHMoKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBjb25zdCBtb2RlID0gdGhpcy5nZXRNb2RlKGV2ZW50KVxuICAgICAgdGhpcy4kcmVmc1ttb2RlXS5vbktleURvd24oZXZlbnQpXG4gICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICB0aGlzLmNsb3NlZE1vZGUgPSBtb2RlXG4gICAgICB9IGVsc2UgaWYgKG1vZGUgIT09IHRoaXMuY2xvc2VkTW9kZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVBvcHVwcyhtb2RlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRNb2RlKGV2ZW50ID0gbnVsbCkge1xuICAgICAgY29uc3QgeyBzdGFydCB9ID0gZ2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQpXG4gICAgICBjb25zdCB7IGhvcjogc3RlcCB9ID0gZ2V0S2V5TmF2aWdhdGlvbihldmVudClcbiAgICAgIHJldHVybiB0aGlzLnRpbWVJbmRleCA9PT0gbnVsbCB8fCBzdGFydCArIHN0ZXAgPCB0aGlzLnRpbWVJbmRleFxuICAgICAgICA/ICdkYXRlJ1xuICAgICAgICA6ICd0aW1lJ1xuICAgIH0sXG5cbiAgICB1cGRhdGVQb3B1cHMobW9kZSA9IHRoaXMuZ2V0TW9kZSgpKSB7XG4gICAgICBpZiAobW9kZSkge1xuICAgICAgICB0aGlzLmNsb3NlZE1vZGUgPSBudWxsXG4gICAgICB9XG4gICAgICB0aGlzLnNob3dEYXRlID0gbW9kZSA9PT0gJ2RhdGUnXG4gICAgICB0aGlzLnNob3dUaW1lID0gbW9kZSA9PT0gJ3RpbWUnXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGF0ZS10aW1lLXBpY2tlciB7XG4gICZfX2lubmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICB9XG5cbiAgJl9faW5wdXQge1xuICAgIGZsZXg6IDE7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICBtaW4td2lkdGg6IDEyZW07XG4gIH1cblxuICAuZGl0by1kYXRlLXBpY2tlcixcbiAgLmRpdG8tdGltZS1waWNrZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjwhLS0gZXNsaW50LWRpc2FibGUgdnVlL25vLXRlbXBsYXRlLXNoYWRvdyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1wYWdpbmF0aW9uXG4gIC5kaXRvLXBhZ2luYXRpb24tdG90YWwoXG4gICAgdi1pZj1cInNob3dUb3RhbFwiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJ0b3RhbCA+IDBcIlxuICAgICkge3sgZmlyc3QgfX0g4oCTIHt7IGxhc3QgfX1cbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZWxzZVxuICAgICkgMFxuICAgIHwgLyB7eyB0b3RhbCB9fVxuICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtZm9yPVwicGFnZSBpbiBwYWdlUmFuZ2VcIlxuICAgICAgOmNsYXNzPVwiZ2V0UGFnZUNsYXNzKHBhZ2UpXCJcbiAgICAgIDpkaXNhYmxlZD1cInBhZ2UuZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrPVwib25DbGlja1BhZ2UocGFnZSlcIlxuICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtaWY9XCJwYWdlLnRleHRcIlxuICAgICAgKSB7eyBwYWdlLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTpwYWdlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBwYWdlOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMSB9LFxuICAgIHBhZ2VTaXplOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMTAgfSxcbiAgICBzaG93VG90YWw6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZVJhbmdlOiBbXSxcbiAgICAgIHNob3dQcmV2OiB0cnVlLFxuICAgICAgc2hvd05leHQ6IHRydWUsXG4gICAgICBudW1QYWdlczogMCxcbiAgICAgIGN1cnJlbnRQYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLnBhZ2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmaXJzdCgpIHtcbiAgICAgIHJldHVybiAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5jdXJyZW50UGFnZVNpemUgKyAxXG4gICAgfSxcblxuICAgIGxhc3QoKSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4odGhpcy5maXJzdCArIHRoaXMuY3VycmVudFBhZ2VTaXplIC0gMSwgdGhpcy50b3RhbClcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB0b3RhbDogJ3VwZGF0ZVBhZ2VSYW5nZScsXG4gICAgc2hvd1ByZXY6ICd1cGRhdGVQYWdlUmFuZ2UnLFxuICAgIHNob3dOZXh0OiAndXBkYXRlUGFnZVJhbmdlJyxcblxuICAgIHBhZ2UocGFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2VcbiAgICB9LFxuXG4gICAgcGFnZVNpemUocGFnZVNpemUpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VTaXplID0gcGFnZVNpemVcbiAgICB9LFxuXG4gICAgY3VycmVudFBhZ2VTaXplKGN1cnJlbnRQYWdlU2l6ZSkge1xuICAgICAgdGhpcy5udW1QYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gY3VycmVudFBhZ2VTaXplKVxuICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiB0aGlzLm51bVBhZ2VzKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLm51bVBhZ2VzXG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVBhZ2VSYW5nZSgpXG4gICAgfSxcblxuICAgIGN1cnJlbnRQYWdlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgdGhpcy51cGRhdGVQYWdlUmFuZ2UoKVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6cGFnZScsIHRvKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VcbiAgICB0aGlzLmN1cnJlbnRQYWdlU2l6ZSA9IHRoaXMucGFnZVNpemVcbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMudXBkYXRlUGFnZVJhbmdlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25DbGlja1BhZ2UocGFnZSkge1xuICAgICAgaWYgKHBhZ2UuaW5kZXggJiYgIXBhZ2UuZGlzYWJsZWQgJiYgcGFnZS5pbmRleCAhPT0gdGhpcy5jdXJyZW50UGFnZSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZS5pbmRleFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRQYWdlQ2xhc3MocGFnZSkge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IHtcbiAgICAgICAgJ2RpdG8tc2VsZWN0ZWQnOiBwYWdlLmFjdGl2ZVxuICAgICAgfVxuICAgICAgaWYgKHBhZ2UudHlwZSkge1xuICAgICAgICBjbGFzc2VzW2BkaXRvLWJ1dHRvbi0ke3BhZ2UudHlwZX1gXSA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc2VzXG4gICAgfSxcblxuICAgIHVwZGF0ZVBhZ2VSYW5nZSgpIHtcbiAgICAgIGNvbnN0IHsgc2hvd1ByZXYsIHNob3dOZXh0LCB0b3RhbCwgY3VycmVudFBhZ2VTaXplLCBjdXJyZW50UGFnZSB9ID0gdGhpc1xuICAgICAgY29uc3Qgc2hvd0xlbmd0aCA9IHNob3dQcmV2ICsgc2hvd05leHQgKyAxXG4gICAgICBjb25zdCBudW1QYWdlcyA9ICh0aGlzLm51bVBhZ2VzID0gTWF0aC5jZWlsKHRvdGFsIC8gY3VycmVudFBhZ2VTaXplKSlcblxuICAgICAgbGV0IHN0YXJ0ID0gMVxuICAgICAgbGV0IGVuZCA9IDFcbiAgICAgIGlmIChudW1QYWdlcyA8PSBzaG93TGVuZ3RoKSB7XG4gICAgICAgIGVuZCA9IG51bVBhZ2VzXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlIDw9IHNob3dQcmV2ICsgMSkge1xuICAgICAgICBlbmQgPSBzaG93TGVuZ3RoXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlID49IG51bVBhZ2VzIC0gc2hvd05leHQpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgICAgc3RhcnQgPSBudW1QYWdlcyAtIHNob3dMZW5ndGggKyAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydCA9IGN1cnJlbnRQYWdlIC0gc2hvd1ByZXZcbiAgICAgICAgZW5kID0gY3VycmVudFBhZ2UgKyBzaG93TmV4dFxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWdlUmFuZ2UgPSBbXVxuICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgLSAxLFxuICAgICAgICB0eXBlOiAncHJldicsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA8PSAxXG4gICAgICB9KVxuICAgICAgaWYgKHN0YXJ0ID49IDIpIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goeyBpbmRleDogMSwgdGV4dDogMSB9KVxuICAgICAgfVxuICAgICAgaWYgKHN0YXJ0ID4gMikge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWF4KDEsIGN1cnJlbnRQYWdlIC0gMTApLFxuICAgICAgICAgIHR5cGU6ICdlbGxpcHNpcy1wcmV2J1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGFjdGl2ZTogaSA9PT0gY3VycmVudFBhZ2VcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPCBudW1QYWdlcyAtIDEpIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBNYXRoLm1pbihudW1QYWdlcywgY3VycmVudFBhZ2UgKyAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLW5leHQnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoZW5kIDw9IG51bVBhZ2VzIC0gMSkge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7IGluZGV4OiBudW1QYWdlcywgdGV4dDogbnVtUGFnZXMgfSlcbiAgICAgIH1cbiAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgaW5kZXg6IGN1cnJlbnRQYWdlICsgMSxcbiAgICAgICAgdHlwZTogJ25leHQnLFxuICAgICAgICBkaXNhYmxlZDogY3VycmVudFBhZ2UgPj0gbnVtUGFnZXNcbiAgICAgIH0pXG5cbiAgICAgIHRoaXMucGFnZVJhbmdlID0gcGFnZVJhbmdlXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYWdpbmF0aW9uIHtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsIHtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgIG1hcmdpbjogMCAwLjVlbTtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbiB7XG4gICAgdHJhbnNpdGlvbjpcbiAgICAgIGFsbCAwLjNzIGVhc2UsXG4gICAgICBjb2xvciAwcyxcbiAgICAgIGJhY2tncm91bmQgMHMsXG4gICAgICBib3JkZXIgMHM7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICBwYWRkaW5nOiAwIDAuNWVtO1xuXG4gICAgJi1wcmV2LFxuICAgICYtbmV4dCB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWFycm93O1xuICAgICAgfVxuICAgIH1cblxuICAgICYtcHJldjo6YmVmb3JlIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbiAgICB9XG5cbiAgICAmLWVsbGlwc2lzLXByZXYsXG4gICAgJi1lbGxpcHNpcy1uZXh0IHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIEBleHRlbmQgJWljb24tZWxsaXBzaXM7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXI6OmJlZm9yZSB7XG4gICAgICAgIEBleHRlbmQgJWljb24tY2hldnJvbnM7XG4gICAgICB9XG5cbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgICB9XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLWVsbGlwc2lzLXByZXY6OmJlZm9yZSB7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXN3aXRjaChcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4pXG4gIC5kaXRvLXN3aXRjaC1wYW5lXG4gICAgaW5wdXQoXG4gICAgICA6aWQ9XCJpZFwiXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtbW9kZWw9XCJjaGVja2VkXCJcbiAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICA6bmFtZT1cIm5hbWVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgc3Bhbi5kaXRvLXN3aXRjaC1sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbHNcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJjaGVja2VkXCJcbiAgICAgICAgbmFtZT1cImNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMuY2hlY2tlZCB8fCAnb24nIH19XG4gICAgICBzbG90KFxuICAgICAgICB2LWVsc2VcbiAgICAgICAgbmFtZT1cInVuY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy51bmNoZWNrZWQgfHwgJ29mZicgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ2NoYW5nZSddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGlkOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbHM6IHsgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjaGVja2VkOiB0aGlzLm1vZGVsVmFsdWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy4kYXR0cnMuY2xhc3MsXG4gICAgICAgIHtcbiAgICAgICAgICAnZGl0by1jaGVja2VkJzogdGhpcy5jaGVja2VkLFxuICAgICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5kaXNhYmxlZFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWxzOiB7IGNoZWNrZWQsIHVuY2hlY2tlZCB9ID0ge30gfSA9IHRoaXNcbiAgICAgIC8vIENhbGN1bGF0ZSBgLS1zd2l0Y2gtd2lkdGhgIGluIGByZW1gLCBiYXNlZCBvbiBsYWJlbCBsZW5ndGguXG4gICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1heCgwLCBjaGVja2VkPy5sZW5ndGgsIHVuY2hlY2tlZD8ubGVuZ3RoKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJy0tc3dpdGNoLXdpZHRoJzogbGVuZ3RoID8gYCR7bGVuZ3RoICogMS41fXJlbWAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBfLCAuLi5hdHRyaWJ1dGVzIH0gPSB0aGlzLiRhdHRyc1xuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKG1vZGVsVmFsdWUpIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IG1vZGVsVmFsdWVcbiAgICB9LFxuXG4gICAgY2hlY2tlZChjaGVja2VkKSB7XG4gICAgICBpZiAoY2hlY2tlZCAhPT0gdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgY2hlY2tlZClcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgY2hlY2tlZClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zd2l0Y2gge1xuICAvLyBVc2Ugd2hvbGUgbXVsdGlwbGVzIG9mIGByZW1gIGZvciBzaXplcyBhbmQgYHB4YCBtYXJnaW5zL3BhZGRpbmcgYWxvbmdcbiAgLy8gd2l0aCBgY2FsYygpYCB0byBlbmQgdXAgd2l0aCBldmVuIHBpeGVsIHNpemVzLlxuICAtLXN3aXRjaC13aWR0aDogNGVtO1xuICAtLXN3aXRjaC1oZWlnaHQ6IDJlbTtcbiAgLS1zd2l0Y2gtbWFyZ2luOiAycHg7XG4gIC0tc3dpdGNoLXBhZGRpbmc6IDNweDtcbiAgLS1zd2l0Y2gtc3BlZWQ6IDMwMG1zO1xuICAtLWxhYmVsLW1hcmdpbjogMC41ZW07XG4gIC0td2lkdGg6IGNhbGModmFyKC0tc3dpdGNoLXdpZHRoKSAtIDIgKiB2YXIoLS1zd2l0Y2gtbWFyZ2luKSk7XG4gIC0taGVpZ2h0OiBjYWxjKHZhcigtLXN3aXRjaC1oZWlnaHQpIC0gMiAqIHZhcigtLXN3aXRjaC1tYXJnaW4pKTtcbiAgLS1vZmZzZXQ6IGNhbGModmFyKC0td2lkdGgpIC0gdmFyKC0taGVpZ2h0KSk7XG5cbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogdmFyKC0tc3dpdGNoLWhlaWdodCk7XG4gIC8vIFRvIG1ha2UgaW5saW5lIGxhYmVscyBhcHBlYXIgb24gY29uc2lzdGVudCBiYXNlbGluZTpcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgLmRpdG8tc3dpdGNoLXBhbmUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogdmFyKC0td2lkdGgpO1xuICAgIGhlaWdodDogdmFyKC0taGVpZ2h0KTtcbiAgfVxuXG4gIC5kaXRvLXN3aXRjaC1wYW5lLFxuICAuZGl0by1zd2l0Y2gtbGFiZWwge1xuICAgIHRvcDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgfVxuXG4gIGlucHV0IHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYm9yZGVyLXJhZGl1czogMWVtO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodDtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgYm9yZGVyLWNvbG9yIDAuM3MsXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtYnV0dG9uIHtcbiAgICAtLXNpemU6IGNhbGModmFyKC0taGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtcGFkZGluZykpO1xuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpO1xuICAgIGxlZnQ6IHZhcigtLXN3aXRjaC1wYWRkaW5nKTtcbiAgICB3aWR0aDogdmFyKC0tc2l6ZSk7XG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplKTtcbiAgICBib3JkZXItcmFkaXVzOiBjYWxjKHZhcigtLXNpemUpIC8gMik7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLXN3aXRjaC1zcGVlZCk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLWJ1dHRvbixcbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuXG4gIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiB2YXIoLS1sYWJlbC1tYXJnaW4pO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgfVxuXG4gICYuZGl0by1jaGVja2VkIHtcbiAgICBpbnB1dCB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cblxuICAgIC5kaXRvLXN3aXRjaC1idXR0b24ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHZhcigtLW9mZnNldCkpO1xuICAgIH1cblxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgICBsZWZ0OiB2YXIoLS1sYWJlbC1tYXJnaW4pO1xuICAgICAgcmlnaHQ6IHVuc2V0O1xuICAgIH1cbiAgfVxuXG4gICYuZGl0by1kaXNhYmxlZCB7XG4gICAgQGV4dGVuZCAlYnV0dG9uLWRpc2FibGVkO1xuICB9XG5cbiAgJjpmb2N1cy13aXRoaW46bm90KDpob3Zlcikge1xuICAgIC5kaXRvLXN3aXRjaC1idXR0b24ge1xuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy1mb2N1cztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IHsgaCBhcyBjcmVhdGVFbGVtZW50LCBUcmFuc2l0aW9uIH0gZnJvbSAndnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZnVuY3Rpb24gVHJhbnNpdGlvbkhlaWdodCh7IGVuYWJsZWQgfSwgeyBzbG90cyB9KSB7XG4gIHJldHVybiBlbmFibGVkXG4gICAgPyBjcmVhdGVFbGVtZW50KFRyYW5zaXRpb24sIHByb3BzLCBzbG90cylcbiAgICA6IHNsb3RzLmRlZmF1bHQoKVxufVxuXG5UcmFuc2l0aW9uSGVpZ2h0LnByb3BzID0ge1xuICBlbmFibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUcmFuc2l0aW9uSGVpZ2h0XG5cbmNvbnN0IHNldFN0eWxlID0gKGVsZW1lbnQsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKVxuXG5jb25zdCBuZXh0VGltZW91dCA9IGNhbGxiYWNrID0+IHNldFRpbWVvdXQoY2FsbGJhY2ssIDApXG5cbi8vIEZvcmNlIHJlcGFpbnQgdG8gbWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgdHJpZ2dlcmVkIGNvcnJlY3RseS5cbmNvbnN0IGZvcmNlUmVwYWludCA9IGVsZW1lbnQgPT4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHRcblxuY29uc3QgcHJvcHMgPSB7XG4gIG5hbWU6ICdkaXRvLWhlaWdodCcsXG5cbiAgb25BZnRlckVudGVyKGVsZW1lbnQpIHtcbiAgICAvLyBBIHRpbWVvdXQgYmVmb3JlIHNldHRpbmcgc3R5bGUgaXMgb25seSByZWFsbHkgbmVlZGVkIGFmdGVyIGNhbGxzIHRvXG4gICAgLy8gYGZvcmNlUmVwYWludCgpYCwgYnV0IHVzaW5nIG9uZSBoZXJlIHRvbyBwcmVzZXJ2ZXMgZXhlY3V0aW9uIHNlcXVlbmNlIHNvXG4gICAgLy8gdGhhdCB0aGUgY2FsbCBmcm9tIGBlbnRlcigpYCBjYW4gbmV2ZXIgb3V0cnVuIHRoZSBvbmUgZnJvbSBgYWZ0ZXJFbnRlcigpYFxuICAgIG5leHRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiBudWxsIH0pKVxuICB9LFxuXG4gIG9uRW50ZXIoZWxlbWVudCkge1xuICAgIC8vIEZvciBzb21lIHJlYXNvbiB3ZSdyZSBnZXR0aW5nIHR3byBgb25FbnRlcigpYCBjYWxscyBwZXIgdHJhbnNpdGlvbixcbiAgICAvLyBzbyB3ZSBuZWVkIHRvIGlnbm9yZSB0aGUgc2Vjb25kIG9uZS4gVGhpcyBtaWdodCBiZSBsaW5rZWQgdG8gdGhlIHVzZVxuICAgIC8vIG9mIGBuZXh0VGltZW91dCgpYCwgd2hpY2ggaXMgcmVxdWlyZWQgdG8gZ2V0IHRoZSBjb3JyZWN0IHZhbHVlIGZvclxuICAgIC8vIGBoZWlnaHRgLCBiYXNlZCBvbiBgJi0tbGFiZWwtdmVydGljYWxgIGNhbGN1bGF0aW9ucy5cbiAgICBjb25zdCB7IHdpZHRoIH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwge1xuICAgICAgd2lkdGgsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgICAgaGVpZ2h0OiAnYXV0bydcbiAgICB9KVxuICAgIG5leHRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgICBzZXRTdHlsZShlbGVtZW50LCB7XG4gICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICBwb3NpdGlvbjogbnVsbCxcbiAgICAgICAgdmlzaWJpbGl0eTogbnVsbCxcbiAgICAgICAgaGVpZ2h0OiAwXG4gICAgICB9KVxuICAgICAgZm9yY2VSZXBhaW50KGVsZW1lbnQpXG4gICAgICBuZXh0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodCB9KSlcbiAgICB9KVxuICB9LFxuXG4gIG9uTGVhdmUoZWxlbWVudCkge1xuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBuZXh0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodDogMCB9KSlcbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuJGR1cmF0aW9uOiAwLjE1cztcblxuLmRpdG8taGVpZ2h0LWVudGVyLWFjdGl2ZSxcbi5kaXRvLWhlaWdodC1sZWF2ZS1hY3RpdmUge1xuICB0cmFuc2l0aW9uOiBoZWlnaHQgJGR1cmF0aW9uICRlYXNlLW91dC1xdWFydDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmRpdG8taGVpZ2h0LWVudGVyLWFjdGl2ZSB7XG4gIGFuaW1hdGlvbjogZGl0by1zbGlkZS1lbnRlciAkZHVyYXRpb24gJGVhc2Utb3V0LXF1YXJ0O1xufVxuXG4uZGl0by1oZWlnaHQtbGVhdmUtYWN0aXZlIHtcbiAgYW5pbWF0aW9uOiBkaXRvLXNsaWRlLWxlYXZlICRkdXJhdGlvbiAkZWFzZS1vdXQtcXVhcnQ7XG59XG5cbi5kaXRvLWhlaWdodC1lbnRlci1mcm9tLFxuLmRpdG8taGVpZ2h0LWxlYXZlLXRvIHtcbiAgaGVpZ2h0OiAwO1xufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IHVzZVNsb3RzLCBDb21tZW50IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgaXNTdHJpbmcsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzVk5vZGVDb250ZW50KHZub2RlKSB7XG4gIHJldHVybiB2bm9kZSAmJiBhc0FycmF5KHZub2RlKS5zb21lKHZub2RlID0+IHZub2RlLnR5cGUgIT09IENvbW1lbnQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNTbG90Q29udGVudChzbG90LCBwcm9wcyA9IHt9KSB7XG4gIHNsb3QgPSBpc1N0cmluZyhzbG90KSA/IHVzZVNsb3RzKClbc2xvdF0gOiBzbG90XG4gIHJldHVybiBoYXNWTm9kZUNvbnRlbnQoc2xvdD8uKHByb3BzKSlcbn1cbiIsImltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkb21IYW5kbGVyczogW11cbiAgICB9XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIGZvciAoY29uc3QgeyByZW1vdmUgfSBvZiB0aGlzLmRvbUhhbmRsZXJzKSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgICB0aGlzLmRvbUhhbmRsZXJzID0gW11cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZG9tT24oZWxlbWVudCwgdHlwZSwgaGFuZGxlcikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYWRkRXZlbnRzKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBpc09iamVjdCh0eXBlKSA/IHR5cGUgOiB7IFt0eXBlXTogaGFuZGxlciB9XG4gICAgICApXG4gICAgICB0aGlzLmRvbUhhbmRsZXJzLnB1c2gocmVzdWx0KVxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b1VzZXIge1xuICBoYXNSb2xlKC4uLnJvbGVzKSB7XG4gICAgaWYgKHRoaXMucm9sZXMpIHtcbiAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlcykge1xuICAgICAgICBpZiAodGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1hQ29tcG9uZW50czogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtYWluU2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50c1swXVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGBEaXRvU2NoZW1hLmNyZWF0ZWQoKS91bm1vdW50ZWQoKWAgb24gaXRzXG4gICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnRgLCBpZiB0aGUgcGFyZW50IHVzZXMgdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHNjaGVtYUNvbXBvbmVudCwgYWRkKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50cy5wdXNoKHNjaGVtYUNvbXBvbmVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMuc3BsaWNlKHNjaGVtYUNvbXBvbmVudHMuaW5kZXhPZihzY2hlbWFDb21wb25lbnQpLCAxKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFNjaGVtYVBhcmVudE1peGluIGZyb20gJy4vU2NoZW1hUGFyZW50TWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1NjaGVtYVBhcmVudE1peGluXSxcblxuICBjb21wdXRlZDoge1xuICAgIGVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZmxhdE1hcCgoeyBlcnJvcnMgfSkgPT4gZXJyb3JzIHx8IFtdKVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5zb21lKGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQudmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSkpXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52ZXJpZnlBbGwobWF0Y2gpKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5yZXNldFZhbGlkYXRpb24oKSlcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5jbGVhckVycm9ycygpKVxuICAgIH0sXG5cbiAgICBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChcbiAgICAgICAgaXQgPT4gaXQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cylcbiAgICAgIClcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRDb21tb25QcmVmaXggfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtWYWxpZGF0b3JNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbG9hZDogZmFsc2UsXG4gICAgICAvLyBFYWNoIHJvdXRlLWNvbXBvbmVudCBkZWZpbmVzIGEgc3RvcmUgdGhhdCBnZXRzIHBhc3NlZCBvbiB0byBpdHNcbiAgICAgIC8vIGNoaWxkIGNvbXBvbmVudHMsIHNvIHRoZXkgY2FuIHN0b3JlIHZhbHVlcyBpbiB0aGVtIHRoYXQgbGl2ZSBiZXlvbmRcbiAgICAgIC8vIHRoZWlyIGxpZmUtY3ljbGUuIFNlZTogRGl0b1BhbmUsIFNvdXJjZU1peGluXG4gICAgICBzdG9yZToge30sXG4gICAgICBsb2FkQ2FjaGU6IHt9IC8vIFNlZSBUeXBlTWl4aW4ubG9hZCgpXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyByb3V0ZUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcm91dGVMZXZlbCgpIHtcbiAgICAgIGxldCBsZXZlbCA9IDBcbiAgICAgIGxldCByb3V0ZUNvbXBvbmVudCA9IHRoaXNcbiAgICAgIHdoaWxlICgocm91dGVDb21wb25lbnQgPSByb3V0ZUNvbXBvbmVudC5wYXJlbnRDb21wb25lbnQucm91dGVDb21wb25lbnQpKSB7XG4gICAgICAgIGxldmVsKytcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZXZlbFxuICAgIH0sXG5cbiAgICByb3V0ZVJlY29yZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5tYXRjaGVkW3RoaXMucm91dGVMZXZlbF1cbiAgICB9LFxuXG4gICAgaXNMYXN0Um91dGUoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGlzIHJvdXRlciBjb21wb25lbnQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3V0ZS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkID09PSBtYXRjaGVkW21hdGNoZWQubGVuZ3RoIC0gMV1cbiAgICB9LFxuXG4gICAgaXNMYXN0VW5uZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJvdXRlIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlIHRoYXRcbiAgICAgIC8vIG5lZWRzIGl0cyBvd24gcm91dGVyLXZpZXcgKD0gaXMgbm90IG5lc3RlZCkuXG4gICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlXG4gICAgICBmb3IgKGxldCBpID0gbWF0Y2hlZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBtYXRjaGVkW2ldXG4gICAgICAgIGlmICghcmVjb3JkLm1ldGEubmVzdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IHJlY29yZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgaXNOZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEubmVzdGVkXG4gICAgfSxcblxuICAgIGlzVmlldygpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQ/Lm1ldGFcbiAgICB9LFxuXG4gICAgcGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJvdXRlUGF0aCh0aGlzLnJvdXRlUmVjb3JkPy5wYXRoKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iKCkge1xuICAgICAgY29uc3QgeyBicmVhZGNydW1iIH0gPSB0aGlzLnNjaGVtYSB8fCB7fVxuICAgICAgcmV0dXJuIGJyZWFkY3J1bWIgfHwgYCR7dGhpcy5icmVhZGNydW1iUHJlZml4fSAke3RoaXMubGFiZWx9YFxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfSxcblxuICAgIHBhcmFtKCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdnVlLXJvdXRlciBub3QgYmVpbmcgYWJsZSB0byBtYXAgbXVsdGlwbGUgdXJsIHBhcmFtZXRlcnNcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgbmFtZSB0byBtdWx0aXBsZSBjb21wb25lbnRzLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhcmFtc1t0aGlzLm1ldGE/LnBhcmFtXSB8fCBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZSwgc2VlIERpdG9Gb3JtXG4gICAgaXNNdXRhdGluZygpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVSb3V0ZVVwZGF0ZSh0bywgZnJvbSwgbmV4dCkge1xuICAgIHRoaXM/LmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlTGVhdmUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzPy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIEtlZXAgYSBzaGFyZWQgc3RhY2sgb2Ygcm9vdCBjb21wb25lbnRzIGZvciBEaXRvVHJhaWwgdG8gdXNlIHRvIHJlbmRlclxuICAgIC8vIGxhYmVscy4gQ2FuJ3QgcmVseSBvbiAkcm91dGUubWF0Y2hlZFtpXS5pbnN0YW5jZXMuZGVmYXVsdCB1bmZvcnR1bmF0ZWx5LFxuICAgIC8vIGFzIGluc3RhbmNlcyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmVhZHksIGFuZCBpbnN0YW5jZXMgaXMgbm90IHJlYWN0aXZlLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLnB1c2godGhpcylcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICByb3V0ZUNvbXBvbmVudHMuc3BsaWNlKHJvdXRlQ29tcG9uZW50cy5pbmRleE9mKHRoaXMpLCAxKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBiZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dCkge1xuICAgICAgbGV0IG9rID0gdHJ1ZVxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gKFxuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0aGlzIHJvdXRlIGNoYW5nZSBpZiB0aGUgZm9ybSBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlXG4gICAgICAgIC8vIGBmcm9tYCByb3V0ZSwgYnV0IGluY2x1ZGUgcGFyZW50IGZvcm1zIG9mIGNsb3NpbmcgbmVzdGVkIGZvcm1zIGFzIGFzXG4gICAgICAgIC8vIHdlbGwsIGJ5IG1hdGNoaW5nIHRoZSB0aGUgc3RhcnQgb2YgZnJvbS90byBwYXRoIGFnYWluc3QgYHRoaXMucGF0aGA6XG4gICAgICAgIGZyb20ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgIXRvLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgIC8vIEV4Y2x1ZGUgaGFzaCBjaGFuZ2VzIG9ubHkgKD0gdGFiIGNoYW5nZXMpOlxuICAgICAgICBmcm9tLnBhdGggIT09IHRvLnBhdGggJiYgKFxuICAgICAgICAgIHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHx8XG4gICAgICAgICAgLy8gRGVjaWRlIGlmIHdlJ3JlIG1vdmluZyB0b3dhcmRzIGEgbmV3IG5lc3RlZCBmb3JtLCBvciBjbG9zaW5nIC9cbiAgICAgICAgICAvLyByZXBsYWNpbmcgYW4gYWxyZWFkeSBvcGVuIG9uZSBieSBjb21wYXJpbmcgcGF0aCBsZW5ndGhzLlxuICAgICAgICAgIC8vIFRoZSBjYXNlIG9mIGA9YCBtYXRjaGVzIHRoZSByZXBsYWNpbmcgb2YgYW4gYWxyZWFkeSBvcGVuIG9uZS5cbiAgICAgICAgICB0by5wYXRoLmxlbmd0aCA8PSBmcm9tLnBhdGgubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIGlmIChpc0Nsb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNdXRhdGluZykge1xuICAgICAgICAgIC8vIEZvciBhY3RpdmUgZGlyZWN0bHkgbXV0YXRpbmcgKG5lc3RlZCkgZm9ybXMgdGhhdCB3ZXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgICAvLyB5ZXQsIHZhbGlkYXRlIHRoZW0gb25jZS4gSWYgdGhlIHVzZXIgdGhlbiBzdGlsbCB3YW50cyB0byBsZWF2ZVxuICAgICAgICAgIC8vIHRoZW0sIHRoZXkgY2FuIGNsaWNrIGNsb3NlIC8gbmF2aWdhdGUgYXdheSBhZ2Fpbi5cbiAgICAgICAgICBvayA9IChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgfHxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGwoKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGUgZm9ybSBkb2Vzbid0IGRpcmVjdGx5IG11dGF0ZSBkYXRhLiBJZiBpdCBpcyBkaXJ0eSwgYXNrIGlmIHVzZXJcbiAgICAgICAgICAvLyB3YW50cyB0byBwZXJzaXN0IGRhdGEgZmlyc3QuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgICAgICAgb2sgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICAgICAgYFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHJlYWxseSB3YW50IHRvICR7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJicy5jYW5jZWxcbiAgICAgICAgICAgICAgfT9gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KG9rKVxuICAgIH0sXG5cbiAgICBnZXRSb3V0ZVBhdGgocmVjb3JkUGF0aCkge1xuICAgICAgLy8gTWFwcyB0aGUgcm91dGUncyBhY3R1YWwgcGF0aCB0byB0aGUgbWF0Y2hlZCByb3V0ZXMgYnkgY291bnRpbmcgaXRzXG4gICAgICAvLyBwYXJ0cyBzZXBhcmF0ZWQgYnkgJy8nLCBzcGxpdHRpbmcgdGhlIHBhdGggaW50byB0aGUgbWFwcGVkIHBhcnRzXG4gICAgICAvLyBjb250YWluaW5nIGFjdHVhbCBwYXJhbWV0ZXJzLlxuICAgICAgY29uc3QgeyBwYXRoIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgcmV0dXJuIHJlY29yZFBhdGhcbiAgICAgICAgPyBwYXRoXG4gICAgICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAgICAgLnNsaWNlKDAsIHJlY29yZFBhdGguc3BsaXQoJy8nKS5sZW5ndGgpXG4gICAgICAgICAgICAuam9pbignLycpXG4gICAgICAgIDogcGF0aFxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHtcbiAgICAgIC8vIFRoZSByb3V0ZSBwYXRoIGlzIHRoZSBwYXRoIHVwIHRvIHRoZSBmaXJzdCAvIChleGNsdWRpbmcgdGhlIGluaXRpYWwgLyk6XG4gICAgICBjb25zdCByb290UGF0aCA9IHRoaXMucGF0aC5tYXRjaCgvXihcXC9bXi9dKikvKVsxXVxuICAgICAgcmV0dXJuICFnZXRDb21tb25QcmVmaXgodG8ucGF0aCwgZnJvbS5wYXRoKS5zdGFydHNXaXRoKHJvb3RQYXRoKVxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRlbXBsYXRlKFxuICB2LWlmPVwidXNlclwiXG4pXG4gIC8vLSBPbmx5IHJlbmRlciBEaXRvVmlldyB3aGVuIGl0IGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIGEgbm9ybWFsIHJvdXRlci12aWV3XG4gIC8vLSBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbiAgLy8tIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuICAvLy0gdXNlZCB0byBhbHdheXMgcmVuZGVyIGZvcm1zIGV2ZW4gd2hlbiBvdGhlciBuZXN0ZWQgZm9ybXMgYXJlIHByZXNlbnQuXG4gIFJvdXRlclZpZXcoXG4gICAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gICAgOmtleT1cIm5hbWVcIlxuICApXG4gIC5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICAgIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlclNjaGVtYSh2aWV3U2NoZW1hKVwiXG4gICAgOmRhdGEtcmVzb3VyY2U9XCJzb3VyY2VTY2hlbWEucGF0aFwiXG4gIClcbiAgICBEaXRvU2NoZW1hKFxuICAgICAgOmtleT1cIm5hbWVcIlxuICAgICAgOnNjaGVtYT1cInZpZXdTY2hlbWFcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKG5hbWUpXCJcbiAgICAgIHBhZGRpbmc9XCJyb290XCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICBzY3JvbGxhYmxlXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCB7XG4gIGlzU2luZ2xlQ29tcG9uZW50VmlldyxcbiAgc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudFxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9WaWV3Jywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIC8vIFJlZGlyZWN0ICRzb3VyY2VDb21wb25lbnQgYW5kICRyZXNvdXJjZUNvbXBvbmVudCB0byB0aGUgbWFpbiBjb21wb25lbnQ6XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8uc291cmNlQ29tcG9uZW50IHx8IG51bGwsXG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8ucmVzb3VyY2VDb21wb25lbnQgfHwgbnVsbFxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBVcGRhdGVkIGZyb20gTG9hZGluZ01peGluIHRocm91Z2ggYHNldExvYWRpbmcoaXNMb2FkaW5nKWA6XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgLy8gTk9URTogRGF0YSBpcyBzaGFyZWQgYWNyb3NzIGFsbCB2aWV3cyBiZWNhdXNlIHRoZSByb3V0ZXIgcmVjeWNsZXMgdGhlXG4gICAgICAvLyBEaXRvVmlldyBjb21wb25lbnQuXG4gICAgICBkYXRhOiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEuc2NoZW1hXG4gICAgfSxcblxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICBpc1ZpZXcoKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudFZpZXcoKSB7XG4gICAgICByZXR1cm4gaXNTaW5nbGVDb21wb25lbnRWaWV3KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBtYWluQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKHRoaXMubmFtZSlcbiAgICB9LFxuXG4gICAgdmlld1NjaGVtYSgpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50LCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAvLyBUcmFuc2xhdGUgc2luZ2xlLWNvbXBvbmVudCBzY2hlbWFzIGludG8gbXVsdGktY29tcG9uZW50IHNjaGVtYXMsXG4gICAgICAvLyBzbyB0aGV5IGNhbiBiZSByZW5kZXJlZCBkaXJlY3RseSB0aHJvdWdoIERpdG9TY2hlbWEgYWxzbzpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgICAgW3NjaGVtYS5uYW1lXToge1xuICAgICAgICAgICAgICAgIG5hbWU6IHNjaGVtYS5uYW1lLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAuLi5jb21wb25lbnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgOiBzY2hlbWFcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgcmV0dXJuIHNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnQodGhpcy52aWV3U2NoZW1hLCBoYXNSZXNvdXJjZSlcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGU6IHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8zMzkzI2lzc3VlY29tbWVudC0xMTU4NDcwMTQ5XG4gICAgICBmbHVzaDogJ3Bvc3QnLFxuICAgICAgaGFuZGxlcih0bywgZnJvbSkge1xuICAgICAgICAvLyBTZWUgaWYgdGhlIHJvdXRlIGNoYW5nZXMgY29tcGxldGVseSwgYW5kIGNsZWFyIHRoZSBkYXRhIGlmIGl0IGRvZXMuXG4gICAgICAgIGlmICh0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSkge1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICB0aGlzLmRhdGEgPSB7fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRQYXRoKHBhdGgpIHtcbiAgICAgIC8vIExpc3RzIGluc2lkZSBzaW5nbGUtY29tcG9uZW50IHZpZXdzIHVzZSB0aGUgdmlldydzIHBhdGggZm9yIHN1Yi1wYXRoczpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHRoaXMucGF0aFxuICAgICAgICA6IGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGRlZmluZUNvbXBvbmVudCwgcmVmLCB3YXRjaCwgb25TY29wZURpc3Bvc2UsIGggfSBmcm9tICd2dWUtZGVtaSc7XG5pbXBvcnQgeyBjcmVhdGVGb2N1c1RyYXAgfSBmcm9tICdmb2N1cy10cmFwJztcbmltcG9ydCB7IHVucmVmRWxlbWVudCB9IGZyb20gJ0B2dWV1c2UvY29yZSc7XG5cbmNvbnN0IFVzZUZvY3VzVHJhcCA9IC8qIEBfX1BVUkVfXyAqLyAvKiAjX19QVVJFX18gKi8gZGVmaW5lQ29tcG9uZW50KHtcbiAgbmFtZTogXCJVc2VGb2N1c1RyYXBcIixcbiAgcHJvcHM6IFtcImFzXCIsIFwib3B0aW9uc1wiXSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMgfSkge1xuICAgIGxldCB0cmFwO1xuICAgIGNvbnN0IHRhcmdldCA9IHJlZigpO1xuICAgIGNvbnN0IGFjdGl2YXRlID0gKCkgPT4gdHJhcCAmJiB0cmFwLmFjdGl2YXRlKCk7XG4gICAgY29uc3QgZGVhY3RpdmF0ZSA9ICgpID0+IHRyYXAgJiYgdHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgd2F0Y2goXG4gICAgICAoKSA9PiB1bnJlZkVsZW1lbnQodGFyZ2V0KSxcbiAgICAgIChlbCkgPT4ge1xuICAgICAgICBpZiAoIWVsKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdHJhcCA9IGNyZWF0ZUZvY3VzVHJhcChlbCwgcHJvcHMub3B0aW9ucyB8fCB7fSk7XG4gICAgICAgIGFjdGl2YXRlKCk7XG4gICAgICB9LFxuICAgICAgeyBmbHVzaDogXCJwb3N0XCIgfVxuICAgICk7XG4gICAgb25TY29wZURpc3Bvc2UoKCkgPT4gZGVhY3RpdmF0ZSgpKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHNsb3RzLmRlZmF1bHQpXG4gICAgICAgIHJldHVybiBoKHByb3BzLmFzIHx8IFwiZGl2XCIsIHsgcmVmOiB0YXJnZXQgfSwgc2xvdHMuZGVmYXVsdCgpKTtcbiAgICB9O1xuICB9XG59KTtcblxuZXhwb3J0IHsgVXNlRm9jdXNUcmFwIH07XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZGlhbG9nKFxuICByZWY9XCJkaWFsb2dcIlxuICByb2xlPVwiZGlhbG9nXCJcbiAgYXJpYS1leHBhbmRlZD1cInRydWVcIlxuICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gIDpzdHlsZT1cInsgJy0td2lkdGgnOiBzZXR0aW5ncy53aWR0aCA/IGAke3NldHRpbmdzLndpZHRofXB4YCA6IG51bGwgfVwiXG4gIEBtb3VzZXVwPVwib25Nb3VzZVVwXCJcbilcbiAgVXNlRm9jdXNUcmFwLmRpdG8tZGlhbG9nX19mb2N1cy10cmFwKDpvcHRpb25zPVwiZm9jdXNUcmFwT3B0aW9uc1wiKVxuICAgIGZvcm0uZGl0by1zY3JvbGwtcGFyZW50KFxuICAgICAgQHN1Ym1pdC5wcmV2ZW50PVwic3VibWl0XCJcbiAgICApXG4gICAgICAvLyBBZGQgYW4gaW52aXNpYmxlIGJ1dHRvbiB0aGF0IHByZXZlbnRzIHRoZSBjbGVhcmFibGUgYnV0dG9ucyBmcm9tIGJlaW5nXG4gICAgICAvLyBwcmVzc2VkIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyB0aGUgRW50ZXIga2V5OlxuICAgICAgYnV0dG9uKFxuICAgICAgICB2LXNob3c9XCJmYWxzZVwiXG4gICAgICApXG4gICAgICBEaXRvU2NoZW1hKFxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICAgICAgcGFkZGluZz1cInJvb3RcIlxuICAgICAgICBzY3JvbGxhYmxlXG4gICAgICAgIGdlbmVyYXRlTGFiZWxzXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKCNidXR0b25zKVxuICAgICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBVc2VGb2N1c1RyYXAgfSBmcm9tICdAdnVldXNlL2ludGVncmF0aW9ucy91c2VGb2N1c1RyYXAvY29tcG9uZW50J1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9EaWFsb2cnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcbiAgY29tcG9uZW50czogeyBVc2VGb2N1c1RyYXAgfSxcbiAgZW1pdHM6IFsncmVtb3ZlJ10sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGRpYWxvZ0NvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIGNvbXBvbmVudHM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHByb21pc2U6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc2V0dGluZ3M6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6ICgpID0+ICh7XG4gICAgICAgIHdpZHRoOiA0ODAsXG4gICAgICAgIGNsaWNrVG9DbG9zZTogZmFsc2VcbiAgICAgIH0pXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgLy8gTWFrZSBzdXJlIGRpYWxvZyBkYXRhIGNvbnRhaW5zIGFsbCB0aGUgZXhwZWN0ZWQga2V5c1xuICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSBjbG9uZSh0aGlzLmRhdGEpXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gZGlhbG9nRGF0YSkpIHtcbiAgICAgICAgZGlhbG9nRGF0YVtrZXldID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZGlhbG9nRGF0YVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdkaWFsb2cnLFxuICAgICAgICBjb21wb25lbnRzOiB0aGlzLmNvbXBvbmVudHNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGdldEJ1dHRvblNjaGVtYXModGhpcy5idXR0b25zKSkubWFwKFxuICAgICAgICAgIC8vIFByb2Nlc3MgdGhlIGJ1dHRvbiBzY2hlbWFzIHRvIGFkZCBkZWZhdWx0IGNsaWNrIGV2ZW50c1xuICAgICAgICAgIC8vIGZvciBib3RoICdzdWJtaXQnIGFuZCAnY2FuY2VsJyBidXR0b25zOlxuICAgICAgICAgIChba2V5LCBzY2hlbWFdKSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnY2FuY2VsJyAmJiAhc2NoZW1hLmV2ZW50cykge1xuICAgICAgICAgICAgICBzY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuY2FuY2VsKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGZvY3VzVHJhcE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICAgIGZhbGxiYWNrRm9jdXM6ICgpID0+IHRoaXMuJHJlZnMuZGlhbG9nLFxuICAgICAgICBvbkRlYWN0aXZhdGU6IHRoaXMuY2FuY2VsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGhhc0J1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5idXR0b25TY2hlbWFzKS5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIGhhc0NhbmNlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuYnV0dG9uU2NoZW1hcy5jYW5jZWxcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLmRvbU9uKHdpbmRvdywge1xuICAgICAga2V5dXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKCh0aGlzLmhhc0NhbmNlbCB8fCAhdGhpcy5oYXNCdXR0b25zKSAmJiBldmVudC5rZXlDb2RlID09PSAyNykge1xuICAgICAgICAgIHRoaXMuY2FuY2VsKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbW92ZSgpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ3JlbW92ZScpXG4gICAgfSxcblxuICAgIHJlc29sdmUodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvbWlzZS5yZXNvbHZlKHZhbHVlKVxuICAgICAgdGhpcy5yZW1vdmUoKVxuICAgIH0sXG5cbiAgICByZWplY3QodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvbWlzZS5yZWplY3QodmFsdWUpXG4gICAgICB0aGlzLnJlbW92ZSgpXG4gICAgfSxcblxuICAgIHN1Ym1pdCgpIHtcbiAgICAgIHRoaXMucmVzb2x2ZSh0aGlzLmRpYWxvZ0RhdGEpXG4gICAgfSxcblxuICAgIGNhbmNlbCgpIHtcbiAgICAgIC8vIFdoZW4gY2FuY2VsbGluZywgcmVzb2x2ZSBhcyBgdW5kZWZpbmVkYCBzbyB3ZSBjYW4gaGF2ZSBkaWFsb2dzXG4gICAgICAvLyByZXR1cm5pbmcgbnVsbCBhcyBhIGRlZmluZWQgdmFsdWUgYXMgd2VsbC5cbiAgICAgIHRoaXMucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgfSxcblxuICAgIGNsb3NlKCkge1xuICAgICAgdGhpcy5jYW5jZWwoKVxuICAgIH0sXG5cbiAgICBvbk1vdXNlVXAoKSB7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5jbGlja1RvQ2xvc2UpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGlhbG9nIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBkaXNwbGF5OiBmbGV4O1xuICBpbnNldDogMDtcbiAgei1pbmRleDogJHotaW5kZXgtZGlhbG9nO1xuICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgLy8gUHJldmVudCBzY3JvbGxpbmcgb2YgdGhlIHBhZ2UgYmVoaW5kIHRoZSBkaWFsb2c6XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTtcblxuICAmX19mb2N1cy10cmFwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gIH1cblxuICAvLyBUT0RPOiBgJl9faW5uZXJgXG4gIGZvcm0ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgbWF4LXdpZHRoOiB2YXIoLS13aWR0aCwgNDgwcHgpO1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gICAgYm94LXNoYWRvdzogMCAyMHB4IDYwcHggLTJweCByZ2JhKDI3LCAzMywgNTgsIDAuNCk7XG4gIH1cbn1cblxuLmRpdG8tZGlhbG9nLWVudGVyLWFjdGl2ZSxcbi5kaXRvLWRpYWxvZy1sZWF2ZS1hY3RpdmUge1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzO1xuXG4gIGZvcm0ge1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjI1cztcbiAgfVxufVxuXG4uZGl0by1kaWFsb2ctZW50ZXItZnJvbSxcbi5kaXRvLWRpYWxvZy1sZWF2ZS10byB7XG4gIG9wYWNpdHk6IDA7XG5cbiAgZm9ybSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMHB4KTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1yb290KFxuICA6ZGF0YS1hZ2VudC1icm93c2VyPVwiYXBwU3RhdGUuYWdlbnQuYnJvd3NlclwiXG4gIDpkYXRhLWFnZW50LXBsYXRmb3JtPVwiYXBwU3RhdGUuYWdlbnQucGxhdGZvcm1cIlxuICA6ZGF0YS1hZ2VudC12ZXJzaW9uPVwiYXBwU3RhdGUuYWdlbnQudmVyc2lvbk51bWJlclwiXG4pXG4gIFRyYW5zaXRpb24obmFtZT1cImRpdG8tZHJhZ1wiKVxuICAgIC5kaXRvLWRyYWctb3ZlcmxheShcbiAgICAgIHYtaWY9XCJpc0RyYWdnaW5nRmlsZXNcIlxuICAgIClcbiAgVHJhbnNpdGlvbkdyb3VwKG5hbWU9XCJkaXRvLWRpYWxvZ1wiKVxuICAgIERpdG9EaWFsb2coXG4gICAgICB2LWZvcj1cIihkaWFsb2csIGtleSkgaW4gZGlhbG9nc1wiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDpjb21wb25lbnRzPVwiZGlhbG9nLmNvbXBvbmVudHNcIlxuICAgICAgOmJ1dHRvbnM9XCJkaWFsb2cuYnV0dG9uc1wiXG4gICAgICA6cHJvbWlzZT1cImRpYWxvZy5wcm9taXNlXCJcbiAgICAgIDpkYXRhPVwiZGlhbG9nLmRhdGFcIlxuICAgICAgOnNldHRpbmdzPVwiZGlhbG9nLnNldHRpbmdzXCJcbiAgICAgIEByZW1vdmU9XCJyZW1vdmVEaWFsb2coa2V5KVwiXG4gICAgKVxuICBEaXRvTmF2aWdhdGlvblxuICBtYWluLmRpdG8tcGFnZS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gICAgdi1yZXNpemU9XCJvblJlc2l6ZVBhZ2VcIlxuICAgIDpjbGFzcz1cInBhZ2VDbGFzc2VzXCJcbiAgKVxuICAgIERpdG9IZWFkZXIoXG4gICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICApXG4gICAgUm91dGVyVmlld1xuICBEaXRvU2lkZWJhclxuICAgIERpdG9BY2NvdW50KFxuICAgICAgdi1pZj1cInVzZXJcIlxuICAgIClcbiAgICBhLmRpdG8tbG9naW4oXG4gICAgICB2LWVsc2UtaWY9XCJhbGxvd0xvZ2luXCJcbiAgICAgIEBjbGljaz1cInJvb3RDb21wb25lbnQubG9naW4oKVwiXG4gICAgKVxuICAgICAgc3BhbiBMb2dpblxuICBEaXRvTm90aWZpY2F0aW9ucyhyZWY9XCJub3RpZmljYXRpb25zXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZGVsZWdhdGUgYXMgdGlwcHlEZWxlZ2F0ZSB9IGZyb20gJ3RpcHB5LmpzJ1xuaW1wb3J0IHsgbWFwQ29uY3VycmVudGx5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERpdG9EaWFsb2cgZnJvbSAnLi9EaXRvRGlhbG9nLnZ1ZSdcbmltcG9ydCB7XG4gIHByb2Nlc3NWaWV3LFxuICByZXNvbHZlVmlld3MsXG4gIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUm9vdCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IERpdG9EaWFsb2cgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdmlld3M6ICgpID0+IHRoaXMucmVzb2x2ZWRWaWV3c1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHVucmVzb2x2ZWRWaWV3czogeyB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbiwgUHJvbWlzZV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgb3B0aW9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkVmlld3M6IHt9LFxuICAgICAgcmVtb3ZlUm91dGVzOiBudWxsLFxuICAgICAgZGlhbG9nczoge30sXG4gICAgICBwYWdlV2lkdGg6IDAsXG4gICAgICBsb2FkaW5nQ291bnQ6IDAsXG4gICAgICBhbGxvd0xvZ2luOiBmYWxzZSxcbiAgICAgIGlzRHJhZ2dpbmdGaWxlczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBub3RpZmljYXRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNNb3VudGVkICYmIHRoaXMuJHJlZnMubm90aWZpY2F0aW9uc1xuICAgIH0sXG5cbiAgICBpc0xvYWRpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwXG4gICAgfSxcblxuICAgIHBhZ2VDbGFzc2VzKCkge1xuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tcGFnZSdcbiAgICAgIC8vIE5PVEU6IEtlZXAgc3luY2VkIHdpdGggJGNvbnRlbnQtd2lkdGggaW4gU0NTUzpcbiAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IDkwMFxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy5hcHBTdGF0ZS5wYWdlQ2xhc3MsXG4gICAgICAgIHtcbiAgICAgICAgICBbYCR7cHJlZml4fS0td2lkdGgtODBgXTogdGhpcy5wYWdlV2lkdGggPD0gY29udGVudFdpZHRoICogMC44LFxuICAgICAgICAgIFtgJHtwcmVmaXh9LS13aWR0aC02MGBdOiB0aGlzLnBhZ2VXaWR0aCA8PSBjb250ZW50V2lkdGggKiAwLjZcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuYXBwU3RhdGUudGl0bGUgPSBkb2N1bWVudC50aXRsZSB8fCAnRGl0by5qcyBBZG1pbidcbiAgICAvLyBXaXRoIGhvdC1yZWxvYWRpbmcsIGl0IGxvb2tzIGxpa2UgZGVzdHJveWVkIGhvb2tzIGFyZW4ndCBhbHdheXMgY2FsbGVkXG4gICAgLy8gZm9yIHJvdXRlIGNvbXBvbmVudHMgc28gcmVzZXQgdGhlIGFycmF5IG9mIHJlZ2lzdGVyZWQgY29tcG9uZW50cyBpbnN0ZWFkLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzID0gW11cbiAgfSxcblxuICBhc3luYyBtb3VudGVkKCkge1xuICAgIHRoaXMuc2V0dXBEcmFnQW5kRHJvcCgpXG5cbiAgICB0aXBweURlbGVnYXRlKHRoaXMuJGVsLCB7XG4gICAgICB0YXJnZXQ6ICcuZGl0by1pbmZvJyxcbiAgICAgIHRoZW1lOiAnaW5mbycsXG4gICAgICBhcHBlbmRUbzogbm9kZSA9PiBub2RlLmNsb3Nlc3QoJy5kaXRvLXBhbmUnKSxcbiAgICAgIGFuaW1hdGlvbjogJ3NoaWZ0LWF3YXktc3VidGxlJyxcbiAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgZGVsYXk6IDI1MCxcbiAgICAgIHpJbmRleDogJycsXG4gICAgICBvbkNyZWF0ZShpbnN0YW5jZSkge1xuICAgICAgICBpbnN0YW5jZS5zZXRDb250ZW50KGluc3RhbmNlLnJlZmVyZW5jZS5kYXRhc2V0LmluZm8pXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIENsZWFyIHRoZSBsYWJlbCBtYXJrZWQgYXMgYWN0aXZlIG9uIGFsbCBtb3VzZSBhbmQga2V5Ym9hcmQgZXZlbnRzLCBleGNlcHRcbiAgICAvLyB0aGUgb25lcyB0aGF0IERpdG9MYWJlbCBpdHNlbGYgaW50ZXJjZXB0cy5cbiAgICB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICBjbGljazogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5jbG9zZXN0KCcuZGl0by1sYWJlbCcpKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAga2V5dXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdUYWInKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gZmFsc2VcbiAgICAgIGlmIChhd2FpdCB0aGlzLmZldGNoVXNlcigpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzb2x2ZVZpZXdzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgfVxuICAgIHRoaXMuYWxsb3dMb2dpbiA9IHRydWVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0dXBEcmFnQW5kRHJvcCgpIHtcbiAgICAgIC8vIFRoaXMgY29kZSBvbmx5IGhhcHBlbnMgdGhlIHZpc3VhbCBlZmZlY3RzIGFyb3VuZCBkcmFnZ2luZyBhbmQgZHJvcHBpbmdcbiAgICAgIC8vIGZpbGVzIGludG8gYSBgRGl0b1R5cGVVcGxvYWRgIGNvbXBvbmVudC4gVGhlIGFjdHVhbCB1cGxvYWRpbmcgaXNcbiAgICAgIC8vIGhhbmRsZWQgYnkgdGhlIGBEaXRvVHlwZVVwbG9hZGAgY29tcG9uZW50IGl0c2VsZi5cblxuICAgICAgbGV0IGRyYWdDb3VudCA9IDBcbiAgICAgIGxldCB1cGxvYWRzID0gW11cblxuICAgICAgY29uc3QgdG9nZ2xlRHJvcFRhcmdldENsYXNzID0gZW5hYmxlZCA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgdXBsb2FkIG9mIHVwbG9hZHMpIHtcbiAgICAgICAgICB1cGxvYWRcbiAgICAgICAgICAgIC5jbG9zZXN0KCcuZGl0by1jb250YWluZXInKVxuICAgICAgICAgICAgLmNsYXNzTGlzdC50b2dnbGUoJ2RpdG8tZHJvcC10YXJnZXQnLCBlbmFibGVkKVxuICAgICAgICB9XG4gICAgICAgIGlmICghZW5hYmxlZCkge1xuICAgICAgICAgIHVwbG9hZHMgPSBbXVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNldERyYWdnaW5nRmlsZXMgPSBlbmFibGVkID0+IHtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nRmlsZXMgPSBlbmFibGVkXG4gICAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgICAgdG9nZ2xlRHJvcFRhcmdldENsYXNzKHRydWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0b2dnbGVEcm9wVGFyZ2V0Q2xhc3MoZmFsc2UpLCAxNTApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgICBkcmFnZW50ZXI6IGV2ZW50ID0+IHtcbiAgICAgICAgICBpZiAoIWRyYWdDb3VudCAmJiBldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgICAgIHVwbG9hZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZGl0by11cGxvYWQnKVxuICAgICAgICAgICAgY29uc3QgaGFzVXBsb2FkcyA9IHVwbG9hZHMubGVuZ3RoID4gMFxuICAgICAgICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSBoYXNVcGxvYWRzID8gJ2NvcHknIDogJ25vbmUnXG4gICAgICAgICAgICBpZiAoaGFzVXBsb2Fkcykge1xuICAgICAgICAgICAgICBzZXREcmFnZ2luZ0ZpbGVzKHRydWUpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBkcmFnQ291bnQrK1xuICAgICAgICB9LFxuXG4gICAgICAgIGRyYWdsZWF2ZTogZXZlbnQgPT4ge1xuICAgICAgICAgIGRyYWdDb3VudC0tXG4gICAgICAgICAgaWYgKCFkcmFnQ291bnQgJiYgZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICAgICAgICBzZXREcmFnZ2luZ0ZpbGVzKGZhbHNlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBkcmFnb3ZlcjogZXZlbnQgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbkRyb3AgPSBldmVudC50YXJnZXQuY2xvc2VzdChcbiAgICAgICAgICAgICAgJy5kaXRvLWNvbnRhaW5lcjpoYXMoLmRpdG8tdXBsb2FkKSdcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gY2FuRHJvcCA/ICdjb3B5JyA6ICdub25lJ1xuICAgICAgICAgICAgaWYgKCFjYW5Ecm9wKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZHJvcDogZXZlbnQgPT4ge1xuICAgICAgICAgIGRyYWdDb3VudCA9IDBcbiAgICAgICAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICAgICAgICBzZXREcmFnZ2luZ0ZpbGVzKGZhbHNlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgbm90aWZ5KHsgdHlwZSA9ICdpbmZvJywgdGl0bGUsIHRleHQgfSA9IHt9KSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnMubm90aWZ5KHsgdHlwZSwgdGl0bGUsIHRleHQgfSlcbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRlc3Ryb3lBbGwoKVxuICAgIH0sXG5cbiAgICByZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmxvYWRpbmdDb3VudCArPSBpc0xvYWRpbmcgPyAxIDogLTFcbiAgICB9LFxuXG4gICAgc2hvd0RpYWxvZyh7IGNvbXBvbmVudHMsIGJ1dHRvbnMsIGRhdGEsIHNldHRpbmdzIH0pIHtcbiAgICAgIC8vIFNob3dzIGEgZGl0by1kaWFsb2cgY29tcG9uZW50IGFuZCB3cmFwcyBpdCBpbiBhIHByb21pc2Ugc28gdGhhdCB0aGVcbiAgICAgIC8vIGJ1dHRvbnMgaW4gdGhlIGRpYWxvZyBjYW4gdXNlIGBkaWFsb2cucmVzb2x2ZSgpYCBhbmQgYGRpYWxvZy5yZWplY3QoKWBcbiAgICAgIC8vIHRvIGNsb3NlIHRoZSBtb2RhbCBkaWFsb2cgYW5kIHJlc29sdmUgLyByZWplY3QgdGhlIHByb21pc2UgYXQgb25jZS5cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWFzeW5jLXByb21pc2UtZXhlY3V0b3JcbiAgICAgICAgYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIC8vIFByb2Nlc3MgY29tcG9uZW50cyB0byByZXNvbHZlIGFzeW5jIHNjaGVtYXMuXG4gICAgICAgICAgY29uc3Qgcm91dGVzID0gW11cbiAgICAgICAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhcbiAgICAgICAgICAgIHRoaXMuYXBpLFxuICAgICAgICAgICAgeyB0eXBlOiAnZGlhbG9nJywgY29tcG9uZW50cyB9LFxuICAgICAgICAgICAgcm91dGVzLFxuICAgICAgICAgICAgMFxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAocm91dGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ0RpYWxvZ3MgZG8gbm90IHN1cHBvcnQgY29tcG9uZW50cyB0aGF0IHByb2R1Y2Ugcm91dGVzJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBrZXkgPSBgZGlhbG9nLSR7KytkaWFsb2dJZH1gXG4gICAgICAgICAgdGhpcy5kaWFsb2dzW2tleV0gPSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBzZXR0aW5ncyxcbiAgICAgICAgICAgIHByb21pc2U6IHsgcmVzb2x2ZSwgcmVqZWN0IH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgcmVtb3ZlRGlhbG9nKGtleSkge1xuICAgICAgZGVsZXRlIHRoaXMuZGlhbG9nc1trZXldXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ2luKCkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gdHJ1ZVxuICAgICAgY29uc3Qge1xuICAgICAgICBhZGRpdGlvbmFsQ29tcG9uZW50cyxcbiAgICAgICAgcmVkaXJlY3RBZnRlckxvZ2luXG4gICAgICB9ID0gdGhpcy5vcHRpb25zLmxvZ2luIHx8IHt9XG4gICAgICBjb25zdCBsb2dpbkRhdGEgPSBhd2FpdCB0aGlzLnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgdXNlcm5hbWU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFzc3dvcmQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdwYXNzd29yZCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLmFkZGl0aW9uYWxDb21wb25lbnRzXG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHtcbiAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgdGV4dDogJ0NhbmNlbCdcbiAgICAgICAgICAgIC8vIE5PVEU6IFRoZSBjbGljayBldmVudCBpcyBhZGRlZCBpbiBEaXRvRGlhbG9nLmJ1dHRvblNjaGVtYXMoKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBsb2dpbjoge1xuICAgICAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICB0ZXh0OiAnTG9naW4nXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGxvZ2luRGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9naW4sXG4gICAgICAgICAgICBkYXRhOiBsb2dpbkRhdGEsXG4gICAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHJlZGlyZWN0QWZ0ZXJMb2dpbikge1xuICAgICAgICAgICAgbG9jYXRpb24ucmVwbGFjZShyZWRpcmVjdEFmdGVyTG9naW4pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXNlcihyZXNwb25zZS5kYXRhLnVzZXIpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZT8uZGF0YT8uZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0OiBlcnJvciB8fCBlcnJcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIucmVzcG9uc2UpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9naW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG5hdmlnYXRlSG9tZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9nb3V0KCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9nb3V0LFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLnNldFVzZXIobnVsbClcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlSG9tZSgpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hVc2VyKCkge1xuICAgICAgbGV0IHVzZXIgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5zZXNzaW9uLFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIHVzZXIgPSByZXNwb25zZS5kYXRhLnVzZXIgfHwgbnVsbFxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgIHRleHQ6IGVyclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRVc2VyKHVzZXIpXG4gICAgICByZXR1cm4gdXNlclxuICAgIH0sXG5cbiAgICBzZXRVc2VyKHVzZXIpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUudXNlciA9IChcbiAgICAgICAgdXNlciAmJlxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodXNlciwgRGl0b1VzZXIucHJvdG90eXBlKVxuICAgICAgKVxuICAgICAgLy8gQ2xlYXIgcmVzb2x2ZWQgdmlld3Mgd2hlbiB1c2VyIGlzIGxvZ2dlZCBvdXQuXG4gICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0ge31cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbnN1cmVVc2VyKCkge1xuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVWaWV3cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IGF3YWl0IHJlc29sdmVWaWV3cyh0aGlzLnVucmVzb2x2ZWRWaWV3cylcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghZXJyb3IucmVxdWVzdCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgICAgLy8gQ29sbGVjdCBhbGwgcm91dGVzIGZyb20gdGhlIHJvb3Qgc2NoZW1hIGNvbXBvbmVudHNcbiAgICAgIGNvbnN0IHJvdXRlcyA9IGF3YWl0IG1hcENvbmN1cnJlbnRseShcbiAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvbHZlZFZpZXdzKSxcbiAgICAgICAgKFtuYW1lLCBzY2hlbWFdKSA9PiBwcm9jZXNzVmlldyhEaXRvVmlldywgdGhpcy5hcGksIHNjaGVtYSwgbmFtZSlcbiAgICAgIClcbiAgICAgIC8vIE5vdyB0aGF0IHRoZSByb3V0ZXMgYXJlIGxvYWRlZCwgcmVwbGFjZSBhbGwgZXhpc3Rpbmcgcm91dGVzIHdpdGggdGhlXG4gICAgICAvLyBuZXcgcm91dGVzLCBhbmQgcmVzdG9yZSB0aGUgY3VycmVudCBwYXRoLlxuICAgICAgY29uc3QgeyBmdWxsUGF0aCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHRoaXMucmVtb3ZlUm91dGVzPy4oKVxuICAgICAgdGhpcy5yZW1vdmVSb3V0ZXMgPSBhZGRSb3V0ZXModGhpcy4kcm91dGVyLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncm9vdCcsXG4gICAgICAgICAgcGF0aDogJy8nLFxuICAgICAgICAgIGNvbXBvbmVudHM6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLnJvdXRlcy5mbGF0KClcbiAgICAgIF0pXG4gICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZShmdWxsUGF0aClcbiAgICB9LFxuXG4gICAgb25SZXNpemVQYWdlKHsgY29udGVudFJlY3Q6IHsgd2lkdGggfSB9KSB7XG4gICAgICB0aGlzLnBhZ2VXaWR0aCA9IHdpZHRoXG4gICAgfVxuICB9XG59KVxuXG5sZXQgZGlhbG9nSWQgPSAwXG5cbmZ1bmN0aW9uIGFkZFJvdXRlcyhyb3V0ZXIsIHJvdXRlcykge1xuICBjb25zdCByZW1vdmVycyA9IFtdXG4gIGZvciAoY29uc3Qgcm91dGUgb2Ygcm91dGVzKSB7XG4gICAgY29uc3QgcmVtb3ZlID0gcm91dGVyLmFkZFJvdXRlKHJvdXRlKVxuICAgIHJlbW92ZXJzLnB1c2gocmVtb3ZlKVxuICB9XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IHJlbW92ZSBvZiByZW1vdmVycykge1xuICAgICAgcmVtb3ZlKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9zdHlsZSc7XG5cbi5kaXRvLWFwcCxcbi5kaXRvLXJvb3Qge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xufVxuXG4uZGl0by1wYWdlIHtcbiAgLS1tYXgtY29udGVudC13aWR0aDogI3skY29udGVudC13aWR0aH07XG4gIC0tbWF4LXBhZ2Utd2lkdGg6IGNhbGModmFyKC0tbWF4LWNvbnRlbnQtd2lkdGgpICsgMiAqICN7JGNvbnRlbnQtcGFkZGluZ30pO1xuXG4gIGZsZXg6IDAgMSB2YXIoLS1tYXgtcGFnZS13aWR0aCk7XG4gIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gIG1pbi13aWR0aDogMCU7XG4gIG1heC13aWR0aDogdmFyKC0tbWF4LXBhZ2Utd2lkdGgpO1xuICBvdmVyZmxvdzogdmlzaWJsZTsgLy8gRm9yIC5kaXRvLWhlYWRlciBmdWxsLXdpZHRoIGJhY2tncm91bmQuXG5cbiAgJi0td2lkZSB7XG4gICAgLS1tYXgtY29udGVudC13aWR0aDogI3skY29udGVudC13aWR0aC13aWRlfTtcbiAgfVxufVxuXG4uZGl0by1hY2NvdW50LFxuLmRpdG8tbG9naW4ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5kaXRvLWRyYWctb3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB6LWluZGV4OiAkei1pbmRleC1kcmFnLW92ZXJsYXk7XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoOHB4KTtcbn1cblxuLmRpdG8tZHJvcC10YXJnZXQge1xuICAtLXNoYWRvdy1hbHBoYTogMC4yNTtcblxuICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgei1pbmRleDogJHotaW5kZXgtZHJhZy1vdmVybGF5ICsgMTtcbiAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDRweCA4cHggcmdiYSgwLCAwLCAwLCB2YXIoLS1zaGFkb3ctYWxwaGEpKSk7XG59XG5cbi5kaXRvLWRyYWctZW50ZXItYWN0aXZlLFxuLmRpdG8tZHJhZy1sZWF2ZS1hY3RpdmUge1xuICAkZHVyYXRpb246IDAuMTVzO1xuXG4gIHRyYW5zaXRpb246XG4gICAgb3BhY2l0eSAkZHVyYXRpb24sXG4gICAgYmFja2Ryb3AtZmlsdGVyICRkdXJhdGlvbjtcblxuICB+ICogLmRpdG8tZHJvcC10YXJnZXQge1xuICAgIHRyYW5zaXRpb246IGZpbHRlciAkZHVyYXRpb247XG4gIH1cbn1cblxuLmRpdG8tZHJhZy1lbnRlci1mcm9tLFxuLmRpdG8tZHJhZy1sZWF2ZS10byB7XG4gIG9wYWNpdHk6IDA7XG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cigwKTtcblxuICB+ICogLmRpdG8tZHJvcC10YXJnZXQge1xuICAgIC0tc2hhZG93LWFscGhhOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnVsLmRpdG8tbWVudShcbiAgdi1yZXNpemU9XCJvblJlc2l6ZVwiXG4gIDpzdHlsZT1cInsgJy0td2lkdGgnOiB3aWR0aCA/IGAke3dpZHRofXB4YCA6IG51bGwgfVwiXG4pXG4gIGxpKFxuICAgIHYtZm9yPVwiaXRlbSBpbiBpdGVtc1wiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoaXRlbSlcIlxuICAgIClcbiAgICAgIGEuZGl0by1saW5rKFxuICAgICAgICA6aHJlZj1cImdldEl0ZW1IcmVmKGl0ZW0pXCJcbiAgICAgICAgOmNsYXNzPVwiZ2V0SXRlbUNsYXNzKGl0ZW0sICdkaXRvLXN1Yi1tZW51LWxpbmsnKVwiXG4gICAgICAgIEBjbGljay5wcmV2ZW50LnN0b3A9XCJvbkNsaWNrSXRlbShpdGVtKVwiXG4gICAgICApIHt7IGdldExhYmVsKGl0ZW0pIH19XG4gICAgICBEaXRvTWVudShcbiAgICAgICAgdi1pZj1cIml0ZW0uaXRlbXNcIlxuICAgICAgICA6Y2xhc3M9XCJnZXRJdGVtQ2xhc3MoaXRlbSwgJ2RpdG8tc3ViLW1lbnUnKVwiXG4gICAgICAgIDppdGVtcz1cIml0ZW0uaXRlbXNcIlxuICAgICAgICA6cGF0aD1cImdldEl0ZW1QYXRoKGl0ZW0sIGZhbHNlKVwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvTWVudScsIHtcbiAgcHJvcHM6IHtcbiAgICBpdGVtczoge1xuICAgICAgdHlwZTogW09iamVjdCwgQXJyYXldLFxuICAgICAgZGVmYXVsdDogKCkgPT4gW11cbiAgICB9LFxuICAgIHBhdGg6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiAwXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblJlc2l6ZSh7IGNvbnRlbnRSZWN0OiB7IHdpZHRoIH0gfSkge1xuICAgICAgaWYgKHdpZHRoKSB7XG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRJdGVtQ2xhc3MoaXRlbSwgc3ViTWVudUNsYXNzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbc3ViTWVudUNsYXNzXTogISFpdGVtLml0ZW1zLFxuICAgICAgICAnZGl0by1hY3RpdmUnOiB0aGlzLmlzQWN0aXZlSXRlbShpdGVtKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRJdGVtUGF0aChpdGVtLCBmaXJzdENoaWxkKSB7XG4gICAgICBjb25zdCBwYXRoID0gaXRlbS5wYXRoID8gYCR7dGhpcy5wYXRofS8ke2l0ZW0ucGF0aH1gIDogbnVsbFxuICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQgJiYgcGF0aCAmJiBpdGVtLml0ZW1zXG4gICAgICAgID8gYCR7cGF0aH0ke3RoaXMuZ2V0SXRlbVBhdGgoT2JqZWN0LnZhbHVlcyhpdGVtLml0ZW1zKVswXSwgZmFsc2UpfWBcbiAgICAgICAgOiBwYXRoXG4gICAgfSxcblxuICAgIGdldEl0ZW1IcmVmKGl0ZW0pIHtcbiAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmdldEl0ZW1QYXRoKGl0ZW0sIHRydWUpXG4gICAgICByZXR1cm4gcGF0aCA/IHRoaXMuJHJvdXRlci5yZXNvbHZlKHBhdGgpLmhyZWYgOiBudWxsXG4gICAgfSxcblxuICAgIGlzQWN0aXZlSXRlbShpdGVtKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLiRyb3V0ZS5wYXRoLnN0YXJ0c1dpdGgodGhpcy5nZXRJdGVtUGF0aChpdGVtLCBmYWxzZSkpIHx8XG4gICAgICAgIGl0ZW0uaXRlbXMgJiYgT2JqZWN0LnZhbHVlcyhpdGVtLml0ZW1zKS5zb21lKHRoaXMuaXNBY3RpdmVJdGVtKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBvbkNsaWNrSXRlbShpdGVtKSB7XG4gICAgICBjb25zdCBwYXRoID0gdGhpcy5nZXRJdGVtUGF0aChpdGVtLCB0cnVlKVxuICAgICAgaWYgKHBhdGgpIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBwYXRoLCBmb3JjZTogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkB1c2UgJ3Nhc3M6Y29sb3InO1xuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbWVudSB7XG4gICRpdGVtLWhlaWdodDogJG1lbnUtZm9udC1zaXplICsgMiAqICRtZW51LXBhZGRpbmctdmVyO1xuXG4gIGJvcmRlci1yaWdodDogJGJvcmRlci1zdHlsZTtcbiAgcGFkZGluZzogMCAkbWVudS1zcGFjaW5nO1xuXG4gIGxpIHtcbiAgICAmOmhhcyguZGl0by1zdWItbWVudTpub3QoLmRpdG8tYWN0aXZlKSkge1xuICAgICAgLy8gUG9wLW91dCBzdWItbWVudXMgb24gaG92ZXI6XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgLmRpdG8tc3ViLW1lbnUtbGluayB7XG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgLmRpdG8tc3ViLW1lbnUge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB3aWR0aDogdmFyKC0td2lkdGgpO1xuICAgICAgICAgIHotaW5kZXg6ICR6LWluZGV4LWhlYWRlcjtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoY2FsYyh2YXIoLS13aWR0aCkgKyAyICogJG1lbnUtc3BhY2luZykpXG4gICAgICAgICAgICB0cmFuc2xhdGVZKC0kaXRlbS1oZWlnaHQpO1xuXG4gICAgICAgICAgbGk6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgLmRpdG8tbGluayB7XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIC8vIEZpbGwgdGhlIGdhcCB0byBub3QgbG9vc2UgdGhlIGhvdmVyIHdoZW4gbW92aW5nIG92ZXIgaXQuXG4gICAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgIGxlZnQ6IC0yICogJG1lbnUtc3BhY2luZztcbiAgICAgICAgICAgIHdpZHRoOiAyICogJG1lbnUtc3BhY2luZztcbiAgICAgICAgICAgIGhlaWdodDogJGl0ZW0taGVpZ2h0O1xuICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAuZGl0by1zdWItbWVudS1saW5rLFxuICAgICAgICAuZGl0by1zdWItbWVudSB7XG4gICAgICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGl0by1saW5rIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nO1xuICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBtYXJnaW4tdG9wOiAkbWVudS1zcGFjaW5nO1xuXG4gICAgJjpmb2N1czpub3QoOmFjdGl2ZSwgLmRpdG8tYWN0aXZlKSB7XG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzO1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICAgIH1cblxuICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tc3ViLW1lbnUtbGluayB7XG4gICAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiBjb2xvci5hZGp1c3QoJGNvbG9yLWFjdGl2ZSwgJGFscGhhOiAtMC4zKTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1zdWItbWVudSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlc3Q7XG5cbiAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10cmFpbFxuICB1bFxuICAgIGxpKFxuICAgICAgdi1mb3I9XCJjb21wb25lbnQgaW4gdHJhaWxcIlxuICAgIClcbiAgICAgIGEuZGl0by1saW5rKFxuICAgICAgICA6Y2xhc3M9XCJnZXRMaW5rQ2xhc3MoY29tcG9uZW50KVwiXG4gICAgICAgIDpocmVmPVwiZ2V0Q29tcG9uZW50SHJlZihjb21wb25lbnQpXCJcbiAgICAgICAgQGNsaWNrLnByZXZlbnQuc3RvcD1cIm9uQ2xpY2tDb21wb25lbnQoY29tcG9uZW50KVwiXG4gICAgICApXG4gICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0U3BhbkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UcmFpbCcsIHtcbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmFpbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5maWx0ZXIoXG4gICAgICAgIGNvbXBvbmVudCA9PiAhIWNvbXBvbmVudC5yb3V0ZVJlY29yZFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29tcG9uZW50UGF0aChjb21wb25lbnQpIHtcbiAgICAgIC8vIERvIHRoZSBzYW1lIGFzIGluIGBEaXRvTWVudWA6IExpbmsgbWVudSBpdGVtcyB0byB0aGUgZmlyc3QgY2hpbGRyZW4uXG4gICAgICBjb25zdCB7IHNjaGVtYSB9ID0gY29tcG9uZW50XG4gICAgICByZXR1cm4gc2NoZW1hLnR5cGUgPT09ICdtZW51J1xuICAgICAgICA/IE9iamVjdC52YWx1ZXMoc2NoZW1hLml0ZW1zKVswXS5mdWxsUGF0aFxuICAgICAgICA6IGNvbXBvbmVudC5wYXRoXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEhyZWYoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVyLnJlc29sdmUodGhpcy5nZXRDb21wb25lbnRQYXRoKGNvbXBvbmVudCkpLmhyZWZcbiAgICB9LFxuXG4gICAgb25DbGlja0NvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgcGF0aDogdGhpcy5nZXRDb21wb25lbnRQYXRoKGNvbXBvbmVudCksXG4gICAgICAgIGZvcmNlOiB0cnVlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRMaW5rQ2xhc3MoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1hY3RpdmUnOiBjb21wb25lbnQucGF0aCA9PT0gdGhpcy4kcm91dGUucGF0aFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRTcGFuQ2xhc3MoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1kaXJ0eSc6IGNvbXBvbmVudC5pc0RpcnR5XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdHJhaWwge1xuICBkaXNwbGF5OiBmbGV4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBoZWlnaHQ6IDNlbTtcblxuICB1bCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgfVxuXG4gIGxpIHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgYSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBzcGFuIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci1saWdodDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsaTpub3QoOmxhc3QtY2hpbGQpIGEge1xuICAgICRhbmdsZTogMzNkZWc7XG5cbiAgICAmOjpiZWZvcmUsXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICB3aWR0aDogMXB4O1xuICAgICAgaGVpZ2h0OiAwLjc1ZW07XG4gICAgICByaWdodDogLTAuMjVlbTtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICB9XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgdG9wOiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgkYW5nbGUpO1xuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wO1xuICAgIH1cblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGJvdHRvbTogNTAlO1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLSRhbmdsZSk7XG4gICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b207XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbm5hdi5kaXRvLWhlYWRlclxuICBEaXRvVHJhaWxcbiAgICBEaXRvU3Bpbm5lcihcbiAgICAgIHYtaWY9XCJpc0xvYWRpbmdcIlxuICAgICAgOnNpemU9XCJzcGlubmVyPy5zaXplXCJcbiAgICAgIDpjb2xvcj1cInNwaW5uZXI/LmNvbG9yXCJcbiAgICApXG4gIC8vLSBUZWxlcG9ydCB0YXJnZXQgZm9yIGAuZGl0by1zY2hlbWEtaGVhZGVyYDpcbiAgLmRpdG8taGVhZGVyX190ZWxlcG9ydFxuICBzbG90XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvSGVhZGVyJywge1xuICBwcm9wczoge1xuICAgIHNwaW5uZXI6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9LFxuICAgIGlzTG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8taGVhZGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBiYWNrZ3JvdW5kOiAkY29sb3ItYmxhY2s7XG4gIGZvbnQtc2l6ZTogJGhlYWRlci1mb250LXNpemU7XG4gIGxpbmUtaGVpZ2h0OiAkaGVhZGVyLWxpbmUtaGVpZ2h0O1xuICB6LWluZGV4OiAkei1pbmRleC1oZWFkZXI7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICY6OmFmdGVyIHtcbiAgICAvLyBTZXQgdGhlIGZ1bGwtd2lkdGggaGVhZGVyIGJhY2tncm91bmQgdG8gdGhlIGhlYWRlciBjb2xvci5cbiAgICBjb250ZW50OiAnJztcbiAgICBpbnNldDogMDtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gICAgei1pbmRleDogLTE7XG4gIH1cblxuICBzcGFuIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgcGFkZGluZzogJGhlYWRlci1wYWRkaW5nO1xuICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG5cbiAgICAmOmVtcHR5IHtcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJ1xcMjAwYic7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tZGlydHkge1xuICAgICY6OmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgd2lkdGg6IDhweDtcbiAgICAgIGhlaWdodDogOHB4O1xuICAgICAgbWFyZ2luOiAycHg7XG4gICAgICBtYXJnaW4tbGVmdDogMC41ZW07XG4gICAgICBib3JkZXItcmFkaXVzOiAxMDAlO1xuICAgIH1cbiAgfVxuXG4gICZfX3RlbGVwb3J0IHtcbiAgICAvLyBBbGlnbiB0aGUgdGVsZXBvcnRlZCBzY2hlbWEgaGVhZGVycyBvbiB0b3Agb2YgdG8gdGhlIGhlYWRlciBtZW51LlxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBpbnNldDogMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgcGFkZGluZzogMCAkaGVhZGVyLXBhZGRpbmctaG9yO1xuICAgIC8vIFR1cm4gb2ZmIHBvaW50ZXIgZXZlbnRzIHNvIHRoYXQgRGl0b1RyYWlsIGtlZXBzIHJlY2VpdmluZyBldmVudHMuLi5cbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAvLyAuLi5idXQgbW92ZSB0aGVtIHRvIHRoZSBjaGlsZHJlbi5cbiAgICA+ICoge1xuICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgfVxuXG4gICAgLmRpdG8tYnV0dG9uIHtcbiAgICAgIG1hcmdpbjogMCAwICR0YWItbWFyZ2luICR0YWItbWFyZ2luO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5uYXYuZGl0by1uYXZpZ2F0aW9uLmRpdG8tc2Nyb2xsLXBhcmVudFxuICBoMVxuICAgIFJvdXRlckxpbmsuZGl0by1saW5rKHRvPVwiL1wiKSB7eyBhcHBTdGF0ZS50aXRsZSB9fVxuICBEaXRvTWVudS5kaXRvLXNjcm9sbCg6aXRlbXM9XCJ2aWV3c1wiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b05hdmlnYXRpb24nLCB7fSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLW5hdmlnYXRpb24ge1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICBmbGV4OiAwIDAgbWluLWNvbnRlbnQ7XG4gIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlcjtcblxuICBoMSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbGluZS1oZWlnaHQ6ICRoZWFkZXItbGluZS1oZWlnaHQ7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtlcjtcbiAgICBib3JkZXItcmlnaHQ6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWRhcmtlc3Q7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcblxuICAgIC5kaXRvLWxpbmsge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwYWRkaW5nOiAkaGVhZGVyLXBhZGRpbmc7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLW5vdGlmaWNhdGlvbnNcbiAgLmRpdG8taGVhZGVyXG4gICAgc3BhblxuICAuZGl0by1ub3RpZmljYXRpb25zX19pbm5lclxuICAgIFZ1ZU5vdGlmaWNhdGlvbnMoXG4gICAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICAgIGNsYXNzZXM9XCJkaXRvLW5vdGlmaWNhdGlvblwiXG4gICAgICBwb3NpdGlvbj1cIlwiXG4gICAgICB3aWR0aD1cIlwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhc0FycmF5LCBzdHJpcFRhZ3MgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Ob3RpZmljYXRpb25zJywge1xuICBub3RpZmljYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmlzTW91bnRlZCAmJiB0aGlzLiRyZWZzLm5vdGlmaWNhdGlvbnNcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbm90aWZ5KHsgdHlwZSA9ICdpbmZvJywgdGl0bGUsIHRleHQgfSA9IHt9KSB7XG4gICAgICB0aXRsZSB8fD0gKFxuICAgICAgICB7XG4gICAgICAgICAgd2FybmluZzogJ1dhcm5pbmcnLFxuICAgICAgICAgIGVycm9yOiAnRXJyb3InLFxuICAgICAgICAgIGluZm86ICdJbmZvcm1hdGlvbicsXG4gICAgICAgICAgc3VjY2VzczogJ1N1Y2Nlc3MnXG4gICAgICAgIH1bdHlwZV0gfHxcbiAgICAgICAgJ05vdGlmaWNhdGlvbidcbiAgICAgIClcbiAgICAgIHRleHQgPSBgPHA+JHtcbiAgICAgICAgYXNBcnJheSh0ZXh0KS5qb2luKCc8L3A+IDxwPicpXG4gICAgICB9PC9wPmAucmVwbGFjZSgvXFxufFxcclxcbnxcXHIvZywgJzxicj4nKVxuICAgICAgY29uc3QgbG9nID0gKFxuICAgICAgICB7XG4gICAgICAgICAgd2FybmluZzogJ3dhcm4nLFxuICAgICAgICAgIGVycm9yOiAnZXJyb3InLFxuICAgICAgICAgIGluZm86ICdsb2cnLFxuICAgICAgICAgIHN1Y2Nlc3M6ICdsb2cnXG4gICAgICAgIH1bdHlwZV0gfHxcbiAgICAgICAgJ2Vycm9yJ1xuICAgICAgKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGVbbG9nXShzdHJpcFRhZ3ModGV4dCkpXG4gICAgICBjb25zdCB7IG5vdGlmaWNhdGlvbnMgPSB0cnVlIH0gPSB0aGlzLmFwaVxuICAgICAgaWYgKG5vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGRpc3BsYXktZHVyYXRpb24gZm9yIHRoZSBub3RpZmljYXRpb24gYmFzZWQgb24gaXRzIGNvbnRlbnRcbiAgICAgICAgLy8gYW5kIHRoZSBzZXR0aW5nIG9mIHRoZSBgZHVyYXRpb25GYWN0b3JgIGNvbmZpZ3VyYXRpb24uIEl0IGRlZmluZXMgdGhlXG4gICAgICAgIC8vIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgbXVsdGlwbGllZCB3aXRoIHRoZSBhbW91bnQgb2YgY2hhcmFjdGVyc1xuICAgICAgICAvLyBkaXNwbGF5ZWQgaW4gdGhlIG5vdGlmaWNhdGlvbiwgcGx1cyA0MCAoNDAgKyB0aXRsZSArIG1lc3NhZ2UpOlxuICAgICAgICBjb25zdCB7IGR1cmF0aW9uRmFjdG9yID0gMjAgfSA9IG5vdGlmaWNhdGlvbnNcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoNDAgKyB0ZXh0Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCkgKiBkdXJhdGlvbkZhY3RvclxuICAgICAgICB0aGlzLiRub3RpZnkoeyB0eXBlLCB0aXRsZSwgdGV4dCwgZHVyYXRpb24gfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVzdHJveUFsbCgpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5kZXN0cm95QWxsKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AdXNlICdzYXNzOmNvbG9yJztcbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbkBtaXhpbiB0eXBlKCRiYWNrZ3JvdW5kKSB7XG4gIGJhY2tncm91bmQ6IGNvbG9yLmFkanVzdCgkYmFja2dyb3VuZCwgJGxpZ2h0bmVzczogNSUpO1xuICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICBib3JkZXItbGVmdDogMTJweCBzb2xpZCBjb2xvci5hZGp1c3QoJGJhY2tncm91bmQsICRsaWdodG5lc3M6IC0xMCUpO1xufVxuXG4uZGl0by1ub3RpZmljYXRpb25zIHtcbiAgJG5vdGlmaWNhdGlvbi13aWR0aDogMzAwcHg7XG5cbiAgZmxleDogMTtcbiAgei1pbmRleDogJHotaW5kZXgtbm90aWZpY2F0aW9ucztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmc7XG4gIC8vIEZvciB0aGUgYEBjb250YWluZXJgIHJ1bGUgdG8gd29yazpcbiAgY29udGFpbmVyLXR5cGU6IGlubGluZS1zaXplO1xuXG4gIC5kaXRvLWhlYWRlciB7XG4gICAgc3BhbiB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgIH1cbiAgfVxuXG4gICZfX2lubmVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cblxuICAudnVlLW5vdGlmaWNhdGlvbi1ncm91cCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAkbm90aWZpY2F0aW9uLXdpZHRoO1xuXG4gICAgQGNvbnRhaW5lciAod2lkdGggPCAjeyRub3RpZmljYXRpb24td2lkdGggKyAkY29udGVudC1wYWRkaW5nfSkge1xuICAgICAgbGVmdDogdW5zZXQ7XG4gICAgICByaWdodDogJGNvbnRlbnQtcGFkZGluZztcbiAgICB9XG4gIH1cblxuICAudnVlLW5vdGlmaWNhdGlvbi13cmFwcGVyIHtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgfVxuXG4gIC5kaXRvLW5vdGlmaWNhdGlvbiB7XG4gICAgcGFkZGluZzogOHB4O1xuICAgIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZyAwO1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuXG4gICAgLm5vdGlmaWNhdGlvbi10aXRsZSB7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA4cHg7XG4gICAgfVxuXG4gICAgLm5vdGlmaWNhdGlvbi1jb250ZW50IHtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG5cbiAgICAgIHAge1xuICAgICAgICBtYXJnaW46IDA7XG5cbiAgICAgICAgJiArIHAge1xuICAgICAgICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICYsXG4gICAgJi5pbmZvIHtcbiAgICAgIEBpbmNsdWRlIHR5cGUoJGNvbG9yLWFjdGl2ZSk7XG4gICAgfVxuXG4gICAgJi5zdWNjZXNzIHtcbiAgICAgIEBpbmNsdWRlIHR5cGUoJGNvbG9yLXN1Y2Nlc3MpO1xuICAgIH1cblxuICAgICYud2FybmluZyB7XG4gICAgICBAaW5jbHVkZSB0eXBlKCRjb2xvci13YXJuaW5nKTtcbiAgICB9XG5cbiAgICAmLmVycm9yIHtcbiAgICAgIEBpbmNsdWRlIHR5cGUoJGNvbG9yLWVycm9yKTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuYXNpZGUuZGl0by1zaWRlYmFyLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgdi1yZXNpemU9XCJvblJlc2l6ZVNpZGViYXJcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbilcbiAgbmF2LmRpdG8taGVhZGVyXG4gICAgc2xvdFxuICAuZGl0by1zaWRlYmFyX190ZWxlcG9ydC5kaXRvLXNjcm9sbFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1NpZGViYXInLCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNpZGViYXJXaWR0aDogMFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSAnZGl0by1zaWRlYmFyJ1xuICAgICAgLy8gTk9URTogS2VlcCBzeW5jZWQgd2l0aCAkc2lkZWJhci1tYXgtd2lkdGggaW4gU0NTUzpcbiAgICAgIGNvbnN0IHNpZGViYXJXaWR0aCA9IDM2MFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Ake3ByZWZpeH0tLXdpZHRoLTk5YF06IHRoaXMuc2lkZWJhcldpZHRoIDwgc2lkZWJhcldpZHRoLFxuICAgICAgICBbYCR7cHJlZml4fS0td2lkdGgtNjBgXTogdGhpcy5zaWRlYmFyV2lkdGggPD0gc2lkZWJhcldpZHRoICogMC42XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblJlc2l6ZVNpZGViYXIoeyBjb250ZW50UmVjdDogeyB3aWR0aCB9IH0pIHtcbiAgICAgIHRoaXMuc2lkZWJhcldpZHRoID0gd2lkdGhcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zaWRlYmFyIHtcbiAgZmxleDogMCAxICRzaWRlYmFyLW1heC13aWR0aDtcbiAgbWF4LXdpZHRoOiAkc2lkZWJhci1tYXgtd2lkdGg7XG4gIG1pbi13aWR0aDogJHNpZGViYXItbWluLXdpZHRoO1xufVxuPC9zdHlsZT5cbiIsImltcG9ydCBEb21NaXhpbiBmcm9tICcuL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHVsbGRvd246IHtcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICAgIHN0YXJ0VGltZTogMCxcbiAgICAgICAgY2hlY2tUaW1lOiB0cnVlLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBtb3VzZWRvd246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBtb3VzZXVwOiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vblB1bGxkb3duTW91c2VVcCgpKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZXJzOiBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblB1bGxkb3duTW91c2VEb3duKHZhbHVlID0gbnVsbCkge1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKHRydWUpXG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGVja1RpbWUgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duTW91c2VVcCh2YWx1ZSA9IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgc3RhcnRUaW1lIH0gPSB0aGlzLnB1bGxkb3duXG4gICAgICBpZiAoIXRoaXMuY2hlY2tUaW1lIHx8IHN0YXJ0VGltZSAmJiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+IDI1MCkpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMub25QdWxsZG93blNlbGVjdCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KC8qIHZhbHVlICovKSB7XG4gICAgICAvLyBOT1RFOiBUbyBiZSBvdmVycmlkZGVuLlxuICAgIH0sXG5cbiAgICBzZXRQdWxsZG93bk9wZW4ob3Blbikge1xuICAgICAgdGhpcy5wdWxsZG93bi5vcGVuID0gb3BlblxuICAgICAgdGhpcy5wdWxsZG93bi5zdGFydFRpbWUgPSBvcGVuID8gRGF0ZS5ub3coKSA6IDBcbiAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB0aGlzLnB1bGxkb3duLmV2ZW50cylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1hY2NvdW50XG4gIGEoXG4gICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgKVxuICAgIHNwYW4ge3sgdXNlci51c2VybmFtZSB9fVxuICB1bC5kaXRvLXB1bGxkb3duKDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiKVxuICAgIGxpKFxuICAgICAgdi1mb3I9XCIobGFiZWwsIHZhbHVlKSBvZiBpdGVtc1wiXG4gICAgKVxuICAgICAgYShcbiAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSlcIlxuICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKVwiXG4gICAgICApIHt7IGxhYmVsIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9BY2NvdW50Jywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczoge1xuICAgICAgICBzZXR0aW5nczogJ1NldHRpbmdzJyxcbiAgICAgICAgbG9nb3V0OiAnTG9nb3V0J1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93blNlbGVjdCh2YWx1ZSkge1xuICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICBjYXNlICdsb2dvdXQnOlxuICAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5sb2dvdXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3NldHRpbmdzJzpcbiAgICAgICAgICBjb25zb2xlLmluZm8oJ1RPRE86IEltcGxlbWVudCBTZXR0aW5ncycpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1hY2NvdW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cbiAgLmRpdG8tcHVsbGRvd24ge1xuICAgIHRvcDogJHB1bGxkb3duLXBhZGRpbmctdmVyO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmNvbXBvbmVudChcbiAgdi1pZj1cIm9wdGlvbnM/LnRleHQgIT0gbnVsbFwiXG4gIDppcz1cInRhZ05hbWVcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbikge3sgb3B0aW9ucy50ZXh0IH19XG5jb21wb25lbnQoXG4gIHYtZWxzZS1pZj1cIm9wdGlvbnM/Lmh0bWwgIT0gbnVsbFwiXG4gIDppcz1cInRhZ05hbWVcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbiAgdi1odG1sPVwib3B0aW9ucy5odG1sXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRWxlbWVudCcsIHtcbiAgcHJvcHM6IHtcbiAgICB0YWc6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc3BhbicgfSxcbiAgICBjb250ZW50OiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IHsgY29udGVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGNvbnRlbnQgIT0gbnVsbFxuICAgICAgICA/IGlzT2JqZWN0KGNvbnRlbnQpXG4gICAgICAgICAgPyBjb250ZW50XG4gICAgICAgICAgOiB7IHRleHQ6IGNvbnRlbnQgfVxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgdGFnTmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGFnIHx8IHRoaXMudGFnXG4gICAgfSxcblxuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hc09iamVjdCh0aGlzLiRhdHRycy5jbGFzcyksXG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMub3B0aW9ucy5jbGFzcylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy4kYXR0cnMuc3R5bGUpLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuc3R5bGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5mdW5jdGlvbiBhc09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gYXNBcnJheSh2YWx1ZSkucmVkdWNlKChvYmplY3QsIGVudHJ5KSA9PiB7XG4gICAgaWYgKGlzU3RyaW5nKGVudHJ5KSkge1xuICAgICAgb2JqZWN0W2VudHJ5XSA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGVudHJ5KSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmplY3QsIGVudHJ5KVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0XG4gIH0sIHt9KVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuY29tcG9uZW50LmRpdG8tbGFiZWwoXG4gIHYtaWY9XCJ0ZXh0IHx8IGNvbGxhcHNpYmxlXCJcbiAgOmlzPVwidGFnXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4pXG4gIC5kaXRvLWNoZXZyb24oXG4gICAgdi1pZj1cImNvbGxhcHNpYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiAhY29sbGFwc2VkIH1cIlxuICApXG4gIC5kaXRvLWxhYmVsX19pbm5lcihcbiAgICB2LWlmPVwidGV4dCB8fCBwcmVmaXhlcy5sZW5ndGggPiAwIHx8IHN1ZmZpeGVzLmxlbmd0aCA+IDBcIlxuICApXG4gICAgRGl0b0VsZW1lbnQuZGl0by1sYWJlbF9fcHJlZml4KFxuICAgICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgICAgOmtleT1cImBwcmVmaXgtJHtpbmRleH1gXCJcbiAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICAgIClcbiAgICBsYWJlbChcbiAgICAgIHYtaWY9XCJ0ZXh0XCJcbiAgICAgIDpmb3I9XCJkYXRhUGF0aFwiXG4gICAgICB2LWh0bWw9XCJ0ZXh0XCJcbiAgICApXG4gICAgRGl0b0VsZW1lbnQuZGl0by1sYWJlbF9fc3VmZml4KFxuICAgICAgdi1mb3I9XCIoc3VmZml4LCBpbmRleCkgb2Ygc3VmZml4ZXNcIlxuICAgICAgOmtleT1cImBzdWZmaXgtJHtpbmRleH1gXCJcbiAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgOmNvbnRlbnQ9XCJzdWZmaXhcIlxuICAgIClcbiAgICAuZGl0by1pbmZvKFxuICAgICAgdi1pZj1cImluZm9cIlxuICAgICAgOmRhdGEtaW5mbz1cImluZm9cIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9MYWJlbCcsIHtcbiAgZW1pdHM6IFsnb3BlbiddLFxuXG4gIHByb3BzOiB7XG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaW5mbzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdGFnKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sbGFwc2libGUgPyAnYScgOiAnZGl2J1xuICAgIH0sXG5cbiAgICB0ZXh0KCkge1xuICAgICAgY29uc3QgeyBsYWJlbCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KGxhYmVsKSA/IGxhYmVsPy50ZXh0IDogbGFiZWxcbiAgICB9LFxuXG4gICAgcHJlZml4ZXMoKSB7XG4gICAgICByZXR1cm4gYXNBcnJheSh0aGlzLmxhYmVsPy5wcmVmaXgpXG4gICAgfSxcblxuICAgIHN1ZmZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8uc3VmZml4KVxuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sbGFwc2libGUgPyB7IG9uQ2xpY2s6IHRoaXMub25DbGljayB9IDoge31cbiAgICB9LFxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9PT0gdGhpc1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25DbGljaygpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSB0aGlzXG4gICAgICB0aGlzLiRlbWl0KCdvcGVuJywgdGhpcy5jb2xsYXBzZWQpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbGFiZWwge1xuICAkc2VsZjogJjtcblxuICAvLyBGb3IgYnV0dG9ucyBhbmQgY2hldnJvbiB0byBhbGlnbiByaWdodDpcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvLyBWZXJ0aWNhbGx5IGNlbnRlciBhbGwgaXRlbXMgaW4gdGhlIGxhYmVsLCBlLmcuIGNoZXZyb24sIGVkaXQtYnV0dG9ucy5cbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWluLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nLWhhbGY7IC8vIFdoZW4gaW5saW5lZC5cblxuICAmOmhhcyguZGl0by1zY2hlbWEtaGVhZGVyKSB7XG4gICAgLy8gVGhlIGNvbnRhaW5lcidzIGxhYmVsIGlzIHVzZWQgYXMgdGVsZXBvcnQgZm9yIGEgbmVzdGVkIHNlY3Rpb24gb3Igb2JqZWN0XG4gICAgLy8gbGFiZWwuIEhpZGUgYCZfX2lubmVyYCwgYXMgaXQgaXMgYmUgZHVwbGljYXRlZCBpbnNpZGUgdGhlIG5lc3RlZCBsYWJlbC5cbiAgICA+ICN7JHNlbGZ9X19pbm5lciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gICY6bm90KDpoYXMoKyAuZGl0by10YWJzKSkge1xuICAgIC8vIFRha2UgZnVsbCB3aWR0aCBidXQgb25seSBpZiB0aGVyZSBhcmVuJ3QgYWxzbyB0YWJzIHRvIGJlIGNlbnRlcmVkLlxuICAgIGZsZXg6IDE7XG4gIH1cblxuICAmX19pbm5lciB7XG4gICAgZmxleDogMSAwIDAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgbGFiZWwge1xuICAgIGN1cnNvcjogaW5oZXJpdDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIGxhYmVsLFxuICAmX19wcmVmaXgsXG4gICZfX3N1ZmZpeCB7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG4gICAgQGluY2x1ZGUgZWxsaXBzaXM7XG5cbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICB9XG5cbiAgJl9fcHJlZml4ICsgbGFiZWwsXG4gIGxhYmVsICsgJl9fc3VmZml4IHtcbiAgICAmOjpiZWZvcmUge1xuICAgICAgY29udGVudDogJ1xcYTAnOyAvLyAmbmJzcDtcbiAgICB9XG4gIH1cblxuICAuZGl0by1idXR0b25zIHtcbiAgICAvLyBNb3ZlIHRoZSBsYWJlbCBwYWRkaW5nIGluc2lkZSAuZGl0by1idXR0b25zLCBzbyB0aGF0IGl0IGNhcHR1cmVzIGFsbFxuICAgIC8vIG5lYXIgbW91c2UgZXZlbnRzOlxuICAgIG1hcmdpbjogY2FsYygtMSAqIHZhcigtLWxhYmVsLXBhZGRpbmcpKTtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgICBwYWRkaW5nOiB2YXIoLS1sYWJlbC1wYWRkaW5nKTtcbiAgfVxuXG4gICYuZGl0by13aWR0aC1maWxsIHtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgIC8vIEluIG9yZGVyIGZvciBlbGxpcHNpcyB0byB3b3JrIG9uIGxhYmVscyB3aXRob3V0IGFmZmVjdGluZyBvdGhlciBsYXlvdXQsXG4gICAgLy8gd2UgbmVlZCB0byBwb3NpdGlvbiBpdCBhYnNvbHV0ZWx5IGluc2lkZSBpdHMgY29udGFpbmVyLiBCdXQgd2UgY2FuIG9ubHlcbiAgICAvLyBkbyBzbyBpZiB0aGVyZSBpcyd0IGFsc28gYSBjaGV2cm9uIG9yIG90aGVyIFVYIGVsZW1lbnRzIGJlc2lkZXMgaXQuXG4gICAgJjpoYXMoPiAjeyRzZWxmfV9faW5uZXI6b25seS1jaGlsZCkge1xuICAgICAgZmxleDogMTsgLy8gV2hlbiBpbiBgLmRpdG8tc2NoZW1hLWhlYWRlcmAuXG5cbiAgICAgID4gI3skc2VsZn1fX2lubmVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICAvLyBTaW5jZSA8bGFiZWw+IHVzZXMgYHBvc2l0aW9uOiBhYnNvbHV0ZWAsIHNldCBjb250ZW50IHRvIGEgemVyby13aWR0aFxuICAgICAgLy8gc3BhY2Ugb24gaXRzIHBhcmVudCB0byBlbmZvcmNlIHRoZSByaWdodCB0ZXh0IGhlaWdodCBpbiB0aGUgY29udGFpbmVyXG4gICAgICBjb250ZW50OiAnXFwyMDBiJzsgLy8gemVyby13aWR0aCBzcGFjZTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1pbmZvIHtcbiAgICBtYXJnaW4tbGVmdDogMC4zNWVtO1xuICB9XG59XG5cbmEuZGl0by1sYWJlbCB7XG4gICY6aG92ZXIge1xuICAgIC5kaXRvLWNoZXZyb24ge1xuICAgICAgY29sb3I6ICRjb2xvci1kYXJrZXI7XG4gICAgfVxuICB9XG5cbiAgJjpmb2N1czpub3QoOmFjdGl2ZSwgLmRpdG8tYWN0aXZlKSB7XG4gICAgLmRpdG8tY2hldnJvbiB7XG4gICAgICAtd2Via2l0LXRleHQtc3Ryb2tlOiAkYm9yZGVyLXdpZHRoICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICAgIC8vIERpc3BsYXkgbGFiZWxzIGluIGNvbXBhY3Qgc2NoZW1hIGFzIGlubGluZS1ibG9ja3MsIHRvIGFsbG93IGNvbXBhY3RcbiAgICAvLyBsYXlvdXRzIHdpdGggYHdpZHRoOiAnYXV0bydgIGVsZW1lbnRzOlxuICAgIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGNvbnRyb2wgdGhpcyBiZWhhdmlvci5cbiAgfVxufVxuXG4uZGl0by1zY2hlbWEtY29tcGFjdCB7XG4gID4gLmRpdG8tc2NoZW1hLWNvbnRlbnQge1xuICAgID4gLmRpdG8tcGFuZSB7XG4gICAgICA+IC5kaXRvLWNvbnRhaW5lcjpub3QoLmRpdG8tY29udGFpbmVyLS1sYWJlbC12ZXJ0aWNhbCkge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7XG4gIGdldEl0ZW1Gb3JtU2NoZW1hLFxuICBnZXRJdGVtSWQsXG4gIGdldEl0ZW1VaWQsXG4gIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWEsXG5cbiAgICBnZXRJdGVtVWlkLFxuXG4gICAgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXggPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudCAmJiBpbmRleCAhPT0gbnVsbFxuICAgICAgICA/IFN0cmluZyhpbmRleClcbiAgICAgICAgOiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKVxuICAgIH0sXG5cbiAgICBnZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkge1xuICAgICAgbGV0IHsgZGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGlmIChzb3VyY2VTY2hlbWEgIT09IHRoaXMuc2NoZW1hKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNvdXJjZVNjaGVtYS5uYW1lKVxuICAgICAgfVxuICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgaW5kZXgpXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgZ2V0SXRlbVN0b3JlKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENoaWxkU3RvcmUodGhpcy5nZXRJdGVtVWlkKHNvdXJjZVNjaGVtYSwgaXRlbSksIGluZGV4KVxuICAgIH0sXG5cbiAgICByZW1vdmVJdGVtU3RvcmUoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCkge1xuICAgICAgdGhpcy5yZW1vdmVDaGlsZFN0b3JlKHRoaXMuZ2V0SXRlbVVpZChzb3VyY2VTY2hlbWEsIGl0ZW0pLCBpbmRleClcbiAgICB9LFxuXG4gICAgZmluZEl0ZW1JZEluZGV4KHNvdXJjZVNjaGVtYSwgZGF0YSwgaXRlbUlkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyAvLyBGb3IgdHJhbnNpZW50IGRhdGEsIHRoZSBpbmRleCBpcyB1c2VkIGFzIHRoZSBpZFxuICAgICAgICAgIGl0ZW1JZFxuICAgICAgICA6IGRhdGE/LmZpbmRJbmRleChcbiAgICAgICAgICAgIChpdGVtLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICB0aGlzLmdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSA9PT0gaXRlbUlkXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgcmV0dXJuIGluZGV4ICE9PSAtMSA/IGluZGV4IDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRJdGVtTGFiZWwoc291cmNlU2NoZW1hLCBpdGVtLCB7XG4gICAgICBpbmRleCA9IG51bGwsXG4gICAgICBleHRlbmRlZCA9IGZhbHNlLFxuICAgICAgYXNPYmplY3QgPSBmYWxzZVxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgeyBpdGVtTGFiZWwgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKCFpdGVtIHx8ICFleHRlbmRlZCAmJiBpdGVtTGFiZWwgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhUGF0aFxuICAgICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoKSA9PlxuICAgICAgICAoZGF0YVBhdGggfHw9IHRoaXMuZ2V0SXRlbURhdGFQYXRoKHNvdXJjZVNjaGVtYSwgaW5kZXgpKVxuXG4gICAgICBsZXQgZm9ybUxhYmVsXG4gICAgICBjb25zdCBnZXRGb3JtTGFiZWwgPSAoKSA9PlxuICAgICAgICAoZm9ybUxhYmVsIHx8PSB0aGlzLmdldExhYmVsKFxuICAgICAgICAgIGdldEl0ZW1Gb3JtU2NoZW1hKHNvdXJjZVNjaGVtYSwgaXRlbSwgdGhpcy5jb250ZXh0KVxuICAgICAgICApKVxuXG4gICAgICBsZXQgdGV4dFxuICAgICAgbGV0IHByZWZpeFxuICAgICAgbGV0IHN1ZmZpeFxuICAgICAgaWYgKGlzRnVuY3Rpb24oaXRlbUxhYmVsKSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1MYWJlbC5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIG5lc3RlZDogZmFsc2UsXG4gICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgICAgICBpbmRleCxcblxuICAgICAgICAgICAgZ2V0IGRhdGFQYXRoKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0RGF0YVBhdGgoKVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZ2V0IGZvcm1MYWJlbCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEZvcm1MYWJlbCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICBpZiAoaXNPYmplY3QobGFiZWwpKSB7XG4gICAgICAgICAgOyh7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gPSBsYWJlbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gbGFiZWxcbiAgICAgICAgfVxuICAgICAgICAvLyBJdCdzIHVwIHRvIGBpdGVtTGFiZWwoKWAgZW50aXJlbHkgdG8gcHJvZHVjZSB0aGUgbGFiZWw6XG4gICAgICAgIGV4dGVuZGVkID0gZmFsc2VcbiAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiAhKGl0ZW1MYWJlbCBpbiBpdGVtKSkge1xuICAgICAgICAvLyBgaXRlbUxhYmVsYCBjYW4gYmUgYm90aCBhIGtleSwgb3Igc2ltcGx5IGEgbGFiZWwuXG4gICAgICAgIHRleHQgPSBpdGVtTGFiZWxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvb2sgdXAgdGhlIG5hbWUgb24gdGhlIGl0ZW0sIGJ5IHRoZXNlIHJ1bGVzOlxuICAgICAgICAvLyAxLiBJZiBgaXRlbUxhYmVsYCBpcyBhIHN0cmluZywgdXNlIGl0IGFzIHRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgY29sdW1ucywgdXNlIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBzZWUgaWYgdGhlIGl0ZW0gaGFzIGEgcHJvcGVydHkgbmFtZWQgJ25hbWUnXG4gICAgICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gc291cmNlU2NoZW1hXG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICBpc1N0cmluZyhpdGVtTGFiZWwpICYmIGl0ZW1MYWJlbCB8fFxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGNvbHVtbnMgJiYgT2JqZWN0LmtleXMoY29sdW1ucylbMF0gfHxcbiAgICAgICAgICAnbmFtZSdcbiAgICAgICAgKVxuICAgICAgICB0ZXh0ID0gaXRlbVtrZXldXG4gICAgICB9XG4gICAgICBjb25zdCBoYWRMYWJlbCA9ICEhdGV4dFxuICAgICAgLy8gSWYgbm8gbGFiZWwgd2FzIGZvdW5kIHNvIGZhciwgdHJ5IHRvIHByb2R1Y2Ugb25lIGZyb20gdGhlIGluZGV4LlxuICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICAvLyBBbHdheXMgdXNlIGV4dGVuZGVkIHN0eWxlIHdoZW4gYXV0by1nZW5lcmF0aW5nIGxhYmVscyBmcm9tIGluZGV4L2lkOlxuICAgICAgICBleHRlbmRlZCA9IHRydWVcbiAgICAgICAgdGV4dCA9XG4gICAgICAgICAgaXNMaXN0U291cmNlKHNvdXJjZVNjaGVtYSkgJiYgaW5kZXggIT09IG51bGxcbiAgICAgICAgICAgID8gKHRleHQgPSBgJHtpbmRleCArIDF9YClcbiAgICAgICAgICAgIDogJydcbiAgICAgIH1cbiAgICAgIGlmIChleHRlbmRlZCkge1xuICAgICAgICBjb25zdCBmb3JtTGFiZWwgPSBnZXRGb3JtTGFiZWwoKVxuICAgICAgICBpZiAoZm9ybUxhYmVsKSB7XG4gICAgICAgICAgLy8gSWYgYSBsYWJlbCB3YXMgcHJvdmlkZWQsIHB1dCBpbiBxdW90ZXMgd2hlbiBwcmVmaXhlZCB3aXRoIHRoZVxuICAgICAgICAgIC8vIGZvcm0gbGFiZWwgZm9yIHRoZSBleHRlbmRlZCBzdHlsZTpcbiAgICAgICAgICB0ZXh0ID0gYCR7Zm9ybUxhYmVsfSAke2hhZExhYmVsID8gYCcke3RleHR9J2AgOiB0ZXh0fWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzT2JqZWN0XG4gICAgICAgID8gdGV4dCB8fCBwcmVmaXggfHwgc3VmZml4XG4gICAgICAgICAgPyB7IHRleHQsIHByZWZpeCwgc3VmZml4IH1cbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgOiB0ZXh0XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4uZGl0by1zY2hlbWEoXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2Nyb2xsLXBhcmVudCc6IHNjcm9sbGFibGUsICdkaXRvLXNjaGVtYS0tb3Blbic6IG9wZW5lZCB9XCJcbiAgdi1iaW5kPVwiJGF0dHJzXCJcbilcbiAgVGVsZXBvcnQoXG4gICAgdi1pZj1cImlzUG9wdWxhdGVkICYmIHBhbmVsRW50cmllcy5sZW5ndGggPiAwXCJcbiAgICB0bz1cIi5kaXRvLXNpZGViYXJfX3RlbGVwb3J0XCJcbiAgKVxuICAgIERpdG9QYW5lbHMoXG4gICAgICA6cGFuZWxzPVwicGFuZWxFbnRyaWVzXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgVGVsZXBvcnQoXG4gICAgdi1pZj1cImhhc0hlYWRlclwiXG4gICAgOnRvPVwiaGVhZGVyVGVsZXBvcnRcIlxuICAgIDpkaXNhYmxlZD1cIiFoZWFkZXJUZWxlcG9ydFwiXG4gIClcbiAgICAuZGl0by1zY2hlbWEtaGVhZGVyXG4gICAgICBEaXRvTGFiZWwoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgQG9wZW49XCJvbk9wZW5cIlxuICAgICAgKVxuICAgICAgVHJhbnNpdGlvbihcbiAgICAgICAgdi1pZj1cInRhYnNcIlxuICAgICAgICBuYW1lPVwiZGl0by1mYWRlXCJcbiAgICAgIClcbiAgICAgICAgRGl0b1RhYnMoXG4gICAgICAgICAgdi1pZj1cIm9wZW5lZFwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVGFiXCJcbiAgICAgICAgICA6dGFicz1cInRhYnNcIlxuICAgICAgICApXG4gICAgICBEaXRvQ2xpcGJvYXJkKFxuICAgICAgICB2LWlmPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgOmNsaXBib2FyZD1cImNsaXBib2FyZFwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICApXG4gICAgICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbiAgVHJhbnNpdGlvbkhlaWdodCg6ZW5hYmxlZD1cImlubGluZWRcIilcbiAgICAuZGl0by1zY2hlbWEtY29udGVudChcbiAgICAgIHYtaWY9XCJvcGVuZWRcIlxuICAgICAgcmVmPVwiY29udGVudFwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjcm9sbCc6IHNjcm9sbGFibGUgfVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJoYXNUYWJzXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1mb3I9XCIodGFiU2NoZW1hLCB0YWIpIGluIHRhYnNcIlxuICAgICAgICAgIDprZXk9XCJ0YWJcIlxuICAgICAgICApXG4gICAgICAgICAgLy8tIFRPRE86IFN3aXRjaCB0byB2LWlmIGluc3RlYWQgb2Ygdi1zaG93LCBvbmNlIHZhbGlkYXRpb24gaXNcbiAgICAgICAgICAvLy0gZGVjb3VwbGVkIGZyb20gY29tcG9uZW50cy5cbiAgICAgICAgICBEaXRvUGFuZS5kaXRvLXBhbmVfX3RhYihcbiAgICAgICAgICAgIHYtc2hvdz1cInNlbGVjdGVkVGFiID09PSB0YWJcIlxuICAgICAgICAgICAgcmVmPVwidGFic1wiXG4gICAgICAgICAgICA6dGFiPVwidGFiXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJ0YWJTY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICA6cGFkZGluZz1cInBhZGRpbmdcIlxuICAgICAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNNYWluUGFuZVwiXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICAgICAgICA6YWNjdW11bGF0ZWRCYXNpcz1cImFjY3VtdWxhdGVkQmFzaXNcIlxuICAgICAgICAgIClcbiAgICAgIERpdG9QYW5lLmRpdG8tcGFuZV9fbWFpbihcbiAgICAgICAgdi1pZj1cImhhc01haW5QYW5lXCJcbiAgICAgICAgcmVmPVwiY29tcG9uZW50c1wiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnBhZGRpbmc9XCJwYWRkaW5nXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNUYWJzXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICAgIDphY2N1bXVsYXRlZEJhc2lzPVwiYWNjdW11bGF0ZWRCYXNpc1wiXG4gICAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwiIWlubGluZWQgJiYgaXNQb3B1bGF0ZWRcIlxuICAgICAgICBuYW1lPVwiYnV0dG9uc1wiXG4gICAgICApXG4gIHNsb3QoXG4gICAgdi1pZj1cImlubGluZWQgJiYgIWhhc0hlYWRlclwiXG4gICAgbmFtZT1cImVkaXQtYnV0dG9uc1wiXG4gIClcbnNsb3QobmFtZT1cImFmdGVyXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb24sXG4gIGlzUmVnRXhwLFxuICBlcXVhbHMsXG4gIHBhcnNlRGF0YVBhdGgsXG4gIG5vcm1hbGl6ZURhdGFQYXRoLFxuICBsYWJlbGl6ZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgVHJhbnNpdGlvbkhlaWdodCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0l0ZW1NaXhpbi5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7XG4gIGdldE5hbWVkU2NoZW1hcyxcbiAgZ2V0UGFuZWxFbnRyaWVzLFxuICBzZXREZWZhdWx0VmFsdWVzLFxuICBwcm9jZXNzRGF0YVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciwgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TY2hlbWEnLCB7XG4gIG1peGluczogW0l0ZW1NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVHJhbnNpdGlvbkhlaWdodCB9LFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJyRzY2hlbWFQYXJlbnRDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhZGRpbmc6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgaW5saW5lZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBzY3JvbGxhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaGFzT3duRGF0YTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbGFiZWxOb2RlOiB7IHR5cGU6IEhUTUxFbGVtZW50LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDEgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLnNjaGVtYVxuICAgIHJldHVybiB7XG4gICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gcHJvdmlkZSBtb3JlIGRhdGEgdGhyb3VnaCBgc2NoZW1hLmRhdGFgLCB2dWUtc3R5bGU6XG4gICAgICAuLi4oXG4gICAgICAgIGRhdGEgJiYgaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICAgID8gZGF0YSh0aGlzLmNvbnRleHQpXG4gICAgICAgICAgOiBkYXRhXG4gICAgICApLFxuICAgICAgY3VycmVudFRhYjogbnVsbCxcbiAgICAgIGNvbXBvbmVudHNSZWdpc3RyeToge30sXG4gICAgICBwYW5lc1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVsc1JlZ2lzdHJ5OiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHNjaGVtYUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gRG9uJ3QgcmV0dXJuIHRoZSBhY3R1YWwgcGFyZW50IHNjaGVtYSBpcyB0aGlzIHNjaGVtYSBoYW5kbGVzIGl0cyBvd25cbiAgICAgIC8vIGRhdGEuIFRoaXMgcHJldmVudHMgZGVsZWdhdGluZyBldmVudHMgdG8gdGhlIHBhcmVudCwgYW5kIHJlZ2lzdGVyaW5nXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggdGhlIHBhcmVudCB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIHNldCBpc0RpcnR5IGZsYWdzLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IG51bGwgOiB0aGlzLnBhcmVudENvbXBvbmVudC5zY2hlbWFDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFuZWxFbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIGdldFBhbmVsRW50cmllcyh0aGlzLnNjaGVtYS5wYW5lbHMsICcnKVxuICAgIH0sXG5cbiAgICB0YWJzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS50YWJzKVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYjoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VGFiIHx8IHRoaXMuZGVmYXVsdFRhYiB8fCBudWxsXG4gICAgICB9LFxuXG4gICAgICBzZXQoc2VsZWN0ZWRUYWIpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VGFiID0gc2VsZWN0ZWRUYWJcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVmYXVsdFRhYigpIHtcbiAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgIGlmICh0aGlzLnRhYnMpIHtcbiAgICAgICAgY29uc3QgdGFicyA9IE9iamVjdC52YWx1ZXModGhpcy50YWJzKS5maWx0ZXIodGhpcy5zaG91bGRSZW5kZXJTY2hlbWEpXG4gICAgICAgIGZvciAoY29uc3QgeyBuYW1lLCBkZWZhdWx0VGFiIH0gb2YgdGFicykge1xuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGRlZmF1bHRUYWIpID8gZGVmYXVsdFRhYih0aGlzLmNvbnRleHQpIDogZGVmYXVsdFRhYikge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWVcbiAgICAgICAgICB9XG4gICAgICAgICAgZmlyc3QgPz89IG5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZpcnN0XG4gICAgfSxcblxuICAgIGNsaXBib2FyZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYT8uY2xpcGJvYXJkID8/IG51bGxcbiAgICB9LFxuXG4gICAgaGFzSGVhZGVyKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzTGFiZWwgfHwgdGhpcy5oYXNUYWJzIHx8ICEhdGhpcy5jbGlwYm9hcmRcbiAgICB9LFxuXG4gICAgaGVhZGVyVGVsZXBvcnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1Jvb3RTY2hlbWFcbiAgICAgICAgPyAnLmRpdG8taGVhZGVyX190ZWxlcG9ydCdcbiAgICAgICAgOiB0aGlzLmxhYmVsTm9kZVxuICAgIH0sXG5cbiAgICBwYXJlbnREYXRhKCkge1xuICAgICAgY29uc3QgZGF0YSA9IGdldFBhcmVudEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgICByZXR1cm4gZGF0YSAhPT0gdGhpcy5kYXRhID8gZGF0YSA6IG51bGxcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnc2VydmVyJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmREYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnY2xpcGJvYXJkJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgc2ltaWxhciB0byBgRGl0b0NvbnRleHRgXG4gICAgLy8gcHJvcGVydGllcywgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZXNlIG9uIGB0aGlzYCBhcyB3ZWxsOlxuICAgIC8vIE5PVEU6IFdoaWxlIGludGVybmFsbHksIHdlIHNwZWFrIG9mIGBkYXRhYCwgaW4gdGhlIEFQSSBzdXJmYWNlIHRoZVxuICAgIC8vIHRlcm0gYGl0ZW1gIGlzIHVzZWQgZm9yIHRoZSBkYXRhIHRoYXQgcmVsYXRlcyB0byBlZGl0aW5nIG9iamVjdHMuXG4gICAgLy8gTk9URTogVGhpcyBzaG91bGQgYWx3YXlzIHJldHVybiB0aGUgc2FtZSBhczpcbiAgICAvLyByZXR1cm4gZ2V0SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50RGF0YVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWREYXRhXG4gICAgfSxcblxuICAgIGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGlwYm9hcmREYXRhXG4gICAgfSxcblxuICAgIGZvcm1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKFxuICAgICAgICB0aGlzLmdldEl0ZW1Gb3JtU2NoZW1hKHRoaXMuc291cmNlU2NoZW1hLCB0aGlzLmRhdGEsIHRoaXMuY29udGV4dClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNSb290U2NoZW1hKCkge1xuICAgICAgLy8gU2VjdGlvbiBzY2hlbWFzIGNhbiBzaGFyZSB0aGUgcm9vdCBkYXRhUGF0aCBidXQgdGhleSBhcmUgaW5saW5lZC5cbiAgICAgIHJldHVybiB0aGlzLmRhdGFQYXRoID09PSAnJyAmJiAhdGhpcy5pbmxpbmVkXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkYXRlZClcbiAgICB9LFxuXG4gICAgaGFzRXJyb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5oYXNFcnJvcnMpXG4gICAgfSxcblxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmxhYmVsIHx8IHRoaXMuY29sbGFwc2libGVcbiAgICB9LFxuXG4gICAgaGFzVGFicygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudGFic1xuICAgIH0sXG5cbiAgICBoYXNNYWluVGFicygpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc1RhYnMgJiYgdGhpcy5pc1Jvb3RTY2hlbWFcbiAgICB9LFxuXG4gICAgaGFzTWFpblBhbmUoKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gISFjb21wb25lbnRzICYmIE9iamVjdC5rZXlzKGNvbXBvbmVudHMpLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgb3BlbmVkOiBnZXRTdG9yZUFjY2Vzc29yKCdvcGVuZWQnLCB7XG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuY29sbGFwc2VkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICB3aWRlOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAnJHJvdXRlLmhhc2gnOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMzM5MyNpc3N1ZWNvbW1lbnQtMTE1ODQ3MDE0OVxuICAgICAgZmx1c2g6ICdwb3N0JyxcbiAgICAgIGhhbmRsZXIoaGFzaCkge1xuICAgICAgICAvLyBSZW1lbWJlciB0aGUgY3VycmVudCBwYXRoIHRvIGtub3cgaWYgdGFiIGNoYW5nZXMgc2hvdWxkIHN0aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQsIGJ1dCByZW1vdmUgdGhlIHRyYWlsaW5nIGAvY3JlYXRlYCBvciBgLzppZGAgZnJvbSBpdCBzbyB0aGF0XG4gICAgICAgIC8vIHRhYnMgaW5mb3JtcyB0aGF0IHN0YXkgb3BlbiBhZnRlciBjcmVhdGlvbiBzdGlsbCB3b3JrLlxuICAgICAgICBpZiAodGhpcy5oYXNNYWluVGFicykge1xuICAgICAgICAgIHRoaXMuY3VycmVudFRhYiA9IGhhc2g/LnNsaWNlKDEpIHx8IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAnc2VsZWN0ZWRUYWInKHNlbGVjdGVkVGFiKSB7XG4gICAgICBpZiAodGhpcy5oYXNNYWluVGFicykge1xuICAgICAgICBjb25zdCB0YWIgPSB0aGlzLnNob3VsZFJlbmRlclNjaGVtYSh0aGlzLnRhYnNbc2VsZWN0ZWRUYWJdKVxuICAgICAgICAgID8gc2VsZWN0ZWRUYWJcbiAgICAgICAgICA6IHRoaXMuZGVmYXVsdFRhYlxuICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IGhhc2g6IHRhYiA/IGAjJHt0YWJ9YCA6IG51bGwgfSlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmhhc0Vycm9ycykge1xuICAgICAgICB0aGlzLnJlcG9zaXRpb25FcnJvcnMoKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gICAgLy8gRGVsZWdhdGUgY2hhbmdlIGV2ZW50cyB0aHJvdWdoIHRvIHBhcmVudCBzY2hlbWE6XG4gICAgdGhpcy5kZWxlZ2F0ZSgnY2hhbmdlJywgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQpXG4gICAgdGhpcy5lbWl0RXZlbnQoJ2luaXRpYWxpemUnKSAvLyBOb3QgYCdjcmVhdGUnYCwgc2luY2UgdGhhdCdzIGZvciBkYXRhLlxuICAgIGlmICh0aGlzLnNjcm9sbGFibGUgJiYgdGhpcy53aWRlKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLnBhZ2VDbGFzcyA9ICdkaXRvLXBhZ2UtLXdpZGUnXG4gICAgfVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLmVtaXRFdmVudCgnZGVzdHJveScpXG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gICAgaWYgKHRoaXMuc2Nyb2xsYWJsZSAmJiB0aGlzLndpZGUpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUucGFnZUNsYXNzID0gbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlEYXRhUGF0aChkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50c0J5TmFtZShkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeU5hbWUodGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5TmFtZShuYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudChkYXRhUGF0aE9yTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSlbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxCeURhdGFQYXRoKGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSlcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWwoZGF0YVBhdGhPck5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSlbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBzb21lQ29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuc29tZShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgZXZlcnlDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5ldmVyeShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgb25PcGVuKG9wZW4pIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdvcGVuJywgeyBjb250ZXh0OiB7IG9wZW4gfSB9KVxuICAgICAgLy8gUHJldmVudCBjbG9zaW5nIHRoZSBzY2hlbWEgd2l0aCBpbnZhbGlkIGRhdGEsIHNpbmNlIHRoZSBpbi1jb21wb25lbnRcbiAgICAgIC8vIHZhbGlkYXRpb24gd2lsbCBub3QgYmUgZXhlY3V0ZWQgb25jZSBpdCdzIGNsb3NlZC5cblxuICAgICAgLy8gVE9ETzogTW92ZSB2YWxpZGF0aW9uIG91dCBvZiBjb21wb25lbnRzLCB0byBzY2hlbWEsIGp1c3QgbGlrZVxuICAgICAgLy8gcHJvY2Vzc2luZywgYW5kIHVzZSBgc2hvd1ZhbGlkYXRpb25FcnJvcnMoKWAgZm9yIHRoZSByZXN1bHRpbmcgZXJyb3JzLFxuICAgICAgLy8gdGhlbiByZW1vdmUgdGhpcyByZXF1aXJlbWVudCwgc2luY2Ugd2UgY2FuIHZhbGlkYXRlIGNsb3NlZCBmb3JtcyBhbmRcbiAgICAgIC8vIHNjaGVtYXMgdGhlbi5cbiAgICAgIGlmICghdGhpcy5vcGVuZWQgfHwgb3BlbiB8fCB0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgdGhpcy5vcGVuZWQgPSBvcGVuXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVwb3NpdGlvbkVycm9ycygpIHtcbiAgICAgIC8vIEZpcmUgYSBmYWtlIHNjcm9sbCBldmVudCB0byBmb3JjZSB0aGUgcmVwb3NpdGlvbmluZyBvZiBlcnJvciB0b29sdGlwcyxcbiAgICAgIC8vIGFzIG90aGVyd2lzZSB0aGV5IHNvbWV0aW1lcyBkb24ndCBzaG93IHVwIGluIHRoZSByaWdodCBwbGFjZSBpbml0aWFsbHlcbiAgICAgIC8vIHdoZW4gY2hhbmdpbmcgdGFicy5cbiAgICAgIGNvbnN0IHNjcm9sbENvbnRhaW5lciA9IHRoaXMuJHJlZnMuY29udGVudC5jbG9zZXN0KCcuZGl0by1zY3JvbGwnKVxuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoKSA9PiBzY3JvbGxDb250YWluZXIuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Njcm9sbCcpKVxuICAgICAgZGlzcGF0Y2goKVxuICAgICAgLy8gVGhpcyBpcyByZXF1aXJlZCB0byBoYW5kbGUgYCYtLWxhYmVsLXZlcnRpY2FsYCBiYXNlZCBsYXlvdXQgY2hhbmdlcy5cbiAgICAgIHNldFRpbWVvdXQoZGlzcGF0Y2gsIDApXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5vcGVuZWQgPSB0cnVlXG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/LmZvY3VzKClcbiAgICB9LFxuXG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50c0J5RGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGxldCBkYXRhUGF0aHNcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBjaGVjayA9IGlzRnVuY3Rpb24obWF0Y2gpXG4gICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgIDogaXNSZWdFeHAobWF0Y2gpXG4gICAgICAgICAgICA/IGZpZWxkID0+IG1hdGNoLnRlc3QoZmllbGQpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgZGF0YVBhdGhzID0gY2hlY2tcbiAgICAgICAgICA/IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKS5maWx0ZXIoY2hlY2spXG4gICAgICAgICAgOiBpc0FycmF5KG1hdGNoKVxuICAgICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgICAgOiBbbWF0Y2hdXG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBkYXRhUGF0aHMgfHw9IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKVxuICAgICAgZm9yIChjb25zdCBkYXRhUGF0aCBvZiBkYXRhUGF0aHMpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoIWNvbXBvbmVudC52YWxpZGF0ZShub3RpZnkpKSB7XG4gICAgICAgICAgICAvLyBGb2N1cyBmaXJzdCBlcnJvciBmaWVsZFxuICAgICAgICAgICAgaWYgKG5vdGlmeSAmJiBmaXJzdCkge1xuICAgICAgICAgICAgICBjb21wb25lbnQuc2Nyb2xsSW50b1ZpZXcoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5ICYmICFpc1ZhbGlkKSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1ZhbGlkXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBbGwobWF0Y2gsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGNvbnN0IHVubWF0Y2hlZCA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgZXJyc10gb2YgT2JqZWN0LmVudHJpZXMoZXJyb3JzKSkge1xuICAgICAgICAvLyBJZiB0aGUgc2NoZW1hIGlzIGEgZGF0YS1yb290LCBwcmVmaXggaXRzIG93biBkYXRhUGF0aCB0byBhbGwgZXJyb3JzLFxuICAgICAgICAvLyBzaW5jZSB0aGUgZGF0YSB0aGF0IGl0IHNlbmRzIGFuZCB2YWxpZGF0ZXMgd2lsbCBiZSB1bnByZWZpeGVkLlxuICAgICAgICBjb25zdCBmdWxsRGF0YVBhdGggPSB0aGlzLmhhc093bkRhdGFcbiAgICAgICAgICA/IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgICAgICAgIDogZGF0YVBhdGhcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcywgdGhpcy5kYXRhUGF0aCwgdGhpcy5oYXNPd25EYXRhLCBmdWxsRGF0YVBhdGgpXG4gICAgICAgIC8vIENvbnZlcnQgZnJvbSBKYXZhU2NyaXB0IHByb3BlcnR5IGFjY2VzcyBub3RhdGlvbiwgdG8gb3VyIG93biBmb3JtXG4gICAgICAgIC8vIG9mIHJlbGF0aXZlIEpTT04gcG9pbnRlcnMgYXMgZGF0YS1wYXRoczpcbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZnVsbERhdGFQYXRoKVxuICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cykpIHtcbiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgLy8gQ291bGRuJ3QgZmluZCBhIGNvbXBvbmVudCBpbiBhbiBhY3RpdmUgZm9ybSBmb3IgdGhlIGdpdmVuIGRhdGFQYXRoLlxuICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIGNvbXBvbmVudCBzZXJ2aW5nIGEgcGFydCBvZiB0aGUgZGF0YVBhdGgsXG4gICAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgYXdhaXQgY29tcG9uZW50Lm5hdmlnYXRlVG9Db21wb25lbnQ/LihcbiAgICAgICAgICAgICAgICAgIGZ1bGxEYXRhUGF0aCxcbiAgICAgICAgICAgICAgICAgIHN1YkNvbXBvbmVudHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBzdWJDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJycyA9IGVycm9yc1tjb21wb25lbnQuZGF0YVBhdGhdXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJycyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKVxuICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gRm91bmQgYSBuZXN0ZWQgZm9ybSB0byBkaXNwbGF5IGF0IGxlYXN0IHBhcnRzIGZvIHRoZSBlcnJvcnMuXG4gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc2hvdyBhbGwgZXJyb3JzIGF0IG9uY2UsIHNvIHdlJ3JlIGRvbmUuIERvbid0IGNhbGxcbiAgICAgICAgICAgICAgICAvLyBgbm90aWZ5RXJyb3JzKClgIHlldCwgYXMgd2UgY2FuIG9ubHkgZGlzcGxheSBpdCBvbmNlXG4gICAgICAgICAgICAgICAgLy8gYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIHdhcyBjYWxsZWQgZnJvbSBgRGl0b0Zvcm0ubW91bnRlZCgpYFxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdGlsbCBoZXJlLCBzbyBrZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBXaGVuIHRoZSBlcnJvciBjYW4ndCBiZSBtYXRjaGVkLCBhZGQgaXQgdG8gYSBsaXN0IG9mIHVubWF0Y2hlZFxuICAgICAgICAgIC8vIGVycm9ycyB3aXRoIGRlY2VudCBtZXNzYWdlLCB0byByZXBvcnQgYXQgdGhlIGVuZC5cbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGxhYmVsaXplKHByb3BlcnR5KVxuICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IGZpZWxkXG4gICAgICAgICAgICAgID8gYFRoZSBmaWVsZCAke2ZpZWxkfWBcbiAgICAgICAgICAgICAgOiBgVGhlICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICAgICAgdW5tYXRjaGVkLnB1c2goYCR7cHJlZml4fSAke2Vyci5tZXNzYWdlfWApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgIH1cbiAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnModW5tYXRjaGVkLmpvaW4oJ1xcbicpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBub3RpZnlFcnJvcnMobWVzc2FnZSkge1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICB0aXRsZTogJ1ZhbGlkYXRpb24gRXJyb3JzJyxcbiAgICAgICAgdGV4dDogbWVzc2FnZSB8fCAnUGxlYXNlIGNvcnJlY3QgdGhlIGhpZ2hsaWdodGVkIGVycm9ycy4nXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXNldERhdGEoKSB7XG4gICAgICAvLyBXZSBjYW4ndCBzZXQgYHRoaXMuZGF0YSA9IC4uLmAgYmVjYXVzZSBpdCdzIGEgcHJvcGVydHksIGJ1dCB3ZSBjYW4gc2V0XG4gICAgICAvLyBhbGwga25vd24gcHJvcGVydGllcyBvbiBpdCB0byB0aGUgdmFsdWVzIHJldHVybmVkIGJ5XG4gICAgICAvLyBgc2V0RGVmYXVsdFZhbHVlcygpYCwgYXMgdGhleSBhcmUgYWxsIHJlYWN0aXZlIGFscmVhZHkgZnJvbSB0aGUgc3RhcnRzOlxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmRhdGEsIHNldERlZmF1bHRWYWx1ZXModGhpcy5zY2hlbWEsIHt9LCB0aGlzKSlcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgICAgIGlmIChuYW1lIGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tbXV0YXRpbmctcHJvcHNcbiAgICAgICAgICBpZiAoIWVxdWFscyh0aGlzLmRhdGFbbmFtZV0sIGRhdGFbbmFtZV0pKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLW11dGF0aW5nLXByb3BzXG4gICAgICAgICAgICB0aGlzLmRhdGFbbmFtZV0gPSBkYXRhW25hbWVdXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSkpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50Lm1hcmtEaXJ0eSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZpbHRlckRhdGEoZGF0YSkge1xuICAgICAgLy8gRmlsdGVycyBvdXQgYXJyYXlzIGFuZCBvYmplY3RzIHRoYXQgYXJlIGJhY2sgYnkgZGF0YSByZXNvdXJjZXNcbiAgICAgIC8vIHRoZW1zZWx2ZXMsIGFzIHRob3NlIGFyZSBhbHJlYWR5IHRha2luZyBjYXJlIG9mIHRocm91Z2ggdGhlaXIgb3duIEFQSVxuICAgICAgLy8gcmVzb3VyY2UgZW5kLXBvaW50cyBhbmQgc2hvdWxkbid0IGJlIHNldC5cbiAgICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpXG4gICAgICAgICAgaWYgKGNvbXBvbmVudHMuc29tZShjb21wb25lbnQgPT4gY29tcG9uZW50LnByb3ZpZGVzRGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvcHlbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvcHlcbiAgICB9LFxuXG4gICAgcHJvY2Vzc0RhdGEoeyB0YXJnZXQgPSAnY2xpcGJvYXJkJywgc2NoZW1hT25seSA9IHRydWUgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc0RhdGEoXG4gICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICB0aGlzLmRhdGFQYXRoLFxuICAgICAgICB7XG4gICAgICAgICAgLy8gTmVlZGVkIGZvciBEaXRvQ29udGV4dCBoYW5kbGluZyBpbnNpZGUgYHByb2Nlc3NEYXRhYCBhbmRcbiAgICAgICAgICAvLyBgcHJvY2Vzc1NjaGVtYURhdGEoKWA6XG4gICAgICAgICAgcm9vdERhdGE6IHRoaXMucm9vdERhdGEsXG4gICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgIHNjaGVtYU9ubHksXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnQoKWAgaXMgb25seSBzZXQgaWYgb25lIG9mIHRoZSBhbmNlc3RvcnMgdXNlc1xuICAgICAgLy8gdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgICB0aGlzLiRzY2hlbWFQYXJlbnRDb21wb25lbnQoKT8uX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5LCBjb21wb25lbnQsIGFkZClcbiAgICAgIC8vIE9ubHkgcmVnaXN0ZXIgd2l0aCB0aGUgcGFyZW50IGlmIHNjaGVtYSBzaGFyZXMgZGF0YSB3aXRoIGl0LlxuICAgICAgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/Ll9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZShwYW5lLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lc1JlZ2lzdHJ5LCBwYW5lLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmVsKHBhbmVsLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lbHNSZWdpc3RyeSwgcGFuZWwsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyRW50cnkocmVnaXN0cnksIGVudHJ5LCBhZGQpIHtcbiAgICAgIGNvbnN0IHVpZCA9IGVudHJ5LiR1aWRcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgcmVnaXN0cnlbdWlkXSA9IGVudHJ5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgcmVnaXN0cnlbdWlkXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfbGlzdEVudHJpZXNCeURhdGFQYXRoKHJlZ2lzdHJ5KSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZWdpc3RyeSkucmVkdWNlKChlbnRyaWVzQnlEYXRhUGF0aCwgZW50cnkpID0+IHtcbiAgICAgICAgLy8gTXVsdGlwbGUgZW50cmllcyBjYW4gYmUgbGlua2VkIHRvIHRoZSBzYW1lIGRhdGEtcGF0aCwgZS5nLiB3aGVuXG4gICAgICAgIC8vIHRoZXJlIGFyZSB0YWJzLiBMaW5rIGVhY2ggZGF0YS1wYXRoIHRvIGFuIGFycmF5IG9mIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IHsgZGF0YVBhdGggfSA9IGVudHJ5XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSAoZW50cmllc0J5RGF0YVBhdGhbZGF0YVBhdGhdIHx8PSBbXSlcbiAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgICByZXR1cm4gZW50cmllc0J5RGF0YVBhdGhcbiAgICAgIH0sIHt9KVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllcyhlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCkuc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICA/IHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICAgICAgOiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIGVudHJpZXNCeURhdGFQYXRoW25vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKV0gfHwgW11cbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIG5hbWUpIHtcbiAgICAgIHJldHVybiBlbnRyaWVzQnlEYXRhUGF0aFthcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKV0gfHwgW11cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zY2hlbWEge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXG4gID4gLmRpdG8tc2NoZW1hLWhlYWRlciArIC5kaXRvLXNjaGVtYS1jb250ZW50ID4gLmRpdG8tcGFuZSB7XG4gICAgbWFyZ2luLXRvcDogJGZvcm0tc3BhY2luZy1oYWxmO1xuICB9XG5cbiAgJjpoYXMoPiAuZGl0by1zY2hlbWEtY29udGVudCArIC5kaXRvLWVkaXQtYnV0dG9ucykge1xuICAgIC8vIERpc3BsYXkgdGhlIGlubGluZWQgZWRpdCBidXR0b25zIHRvIHRoZSByaWdodCBvZiB0aGUgc2NoZW1hOlxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcblxuICAgID4gLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgICAgIGZsZXg6IDEgMCAwJTtcbiAgICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nO1xuICAgIH1cbiAgfVxuXG4gID4gLmRpdG8tc2NoZW1hLWNvbnRlbnQge1xuICAgIGZsZXg6IDAgMSAxMDAlO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAvLyBTbyB0aGF0IHNjaGVtYSBidXR0b25zIGNhbiBiZSBzdGlja3kgdG8gdGhlIGJvdHRvbS5cbiAgICAvLyBOT1RFOiBXZSBhbHNvIG5lZWQgZ3JpZCBmb3IgYFRyYW5zaXRpb25IZWlnaHRgIHRvIHdvcmsgd2VsbC4gU3dpdGNoaW5nXG4gICAgLy8gdG8gZmxleCBib3ggaGVyZSBjYXVzZXMganVtcHkgY29sbGFwc2luZyB0cmFuc2l0aW9ucy5cbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxMDAlO1xuXG4gICAgPiA6b25seS1jaGlsZCB7XG4gICAgICBncmlkLXJvdy1lbmQ6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLXNjaGVtYS1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgLmRpdG8taGVhZGVyICYge1xuICAgIC8vIFdoZW4gdGVsZXBvcnRlZCBpbnRvIG1haW4gaGVhZGVyLlxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgfVxuXG4gIC5kaXRvLWxhYmVsICYge1xuICAgIC8vIFdoZW4gdGVsZXBvcnRlZCBpbnRvIGNvbnRhaW5lciBsYWJlbC5cbiAgICBmbGV4OiAxO1xuICB9XG5cbiAgPiAuZGl0by1sYWJlbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxuXG4gID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgbWFyZ2luLWxlZnQ6IHZhcigtLWJ1dHRvbi1tYXJnaW4sIDApO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbkRpdG9TY2hlbWEuZGl0by1zY2hlbWEtaW5saW5lZChcbiAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtY29tcGFjdCc6IGlzQ29tcGFjdCB9XCJcbiAgOnNjaGVtYT1cInNjaGVtYVwiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICA6bGFiZWw9XCJpc0NvbXBhY3QgPyBudWxsIDogbGFiZWxcIlxuICA6cGFkZGluZz1cInBhZGRpbmcgPz8gJ2lubGluZWQnXCJcbiAgOmlubGluZWQ9XCJ0cnVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICA6Z2VuZXJhdGVMYWJlbHM9XCIhaXNDb21wYWN0XCJcbiAgOmxhYmVsTm9kZT1cImxhYmVsTm9kZVwiXG4gIDphY2N1bXVsYXRlZEJhc2lzPVwiYWNjdW11bGF0ZWRCYXNpc1wiXG4pXG4gIC8vLSBSZW5kZXIgZGl0by1lZGl0LWJ1dHRvbnMgZm9yIGlubGluZWQgc2NoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gIC8vLSBvdGhlcnMgaW4gYFR5cGVMaXN0YCBhcyBhIHNjb3BlLCBmb3IgYmV0dGVyIGhhbmRsaW5nIG9mIGxheW91dC5cbiAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICB2LWlmPVwiZGVsZXRhYmxlIHx8IGRyYWdnYWJsZSB8fCBlZGl0YWJsZVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgICAgIEBkZWxldGU9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNDb21wYWN0IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2NoZW1hSW5saW5lZCcsIHtcbiAgZW1pdHM6IFsnZGVsZXRlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhZGRpbmc6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbGFiZWxOb2RlOiB7IHR5cGU6IEhUTUxFbGVtZW50LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIGlzQ29tcGFjdCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNDb21wYWN0ICYmICEhdGhpcy5sYWJlbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNjaGVtYS1pbmxpbmVkIHtcbiAgLy8gVXNlIGdyaWQgbGF5b3V0IGZvciB0d28gcmVhc29uczogRm9yIGBUcmFuc2l0aW9uSGVpZ2h0YCB0byB3b3JrIHNtb290aGx5LFxuICAvLyBhbmQgdG8gYWxpZ24gdGhlIGhlYWRlciBhYm92ZSB0aGUgY29udGVudCB3aGVuIHRoZSBoZWFkZXIgaXMgbm90IHRlbGVwb3J0ZWRcbiAgLy8gb3V0c2lkZSBvZiB0aGUgc2NoZW1hLlxuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50O1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDEwMCU7XG5cbiAgJjpub3QoOmhvdmVyLCAuZGl0by1zY2hlbWEtLW9wZW4pIHtcbiAgICA+IC5kaXRvLXNjaGVtYS1oZWFkZXIge1xuICAgICAgPiAuZGl0by1jbGlwYm9hcmQge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjwhLS0gZXNsaW50LWRpc2FibGUgdnVlL25vLXRlbXBsYXRlLXNoYWRvdyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1wYW5lKFxuICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgdi1yZXNpemU9XCJvblJlc2l6ZVBhbmVcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9YHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICBuZXN0ZWQsXG4gICAgICBzdG9yZVxuICAgIH0sIGluZGV4IGluIGNvbXBvbmVudFNjaGVtYXNgXG4gIClcbiAgICAvLyAtVXNlIDxzcGFuPiBmb3IgLmRpdG8tYnJlYWsgc28gd2UgY2FuIHVzZSBgLmRpdG8tY29udGFpbmVyOmZpcnN0LW9mLXR5cGVgXG4gICAgLy8gc2VsZWN0b3IuXG4gICAgc3Bhbi5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgIClcbiAgICBEaXRvQ29udGFpbmVyKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEpXCJcbiAgICAgIHJlZj1cImNvbnRhaW5lcnNcIlxuICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgIDpkYXRhLWluZGV4PVwiaW5kZXhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCJpc1NpbmdsZUNvbXBvbmVudFwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgIDp2ZXJ0aWNhbExhYmVscz1cImlzSW5MYWJlbGVkUm93KGluZGV4KVwiXG4gICAgICA6YWNjdW11bGF0ZWRCYXNpcz1cImFjY3VtdWxhdGVkQmFzaXNcIlxuICAgIClcbiAgICBzcGFuLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYWZ0ZXInXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzTmVzdGVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9QYW5lJywge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwYWRkaW5nOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY2N1bXVsYXRlZEJhc2lzOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb25zOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1wYW5lLS1zaW5nbGUnOiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50LFxuICAgICAgICBbYGRpdG8tcGFuZS0tcGFkZGluZy0ke3RoaXMucGFkZGluZ31gXTogISF0aGlzLnBhZGRpbmdcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMudGFiID8gdGhpcyA6IHRoaXMuJHRhYkNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGNvbXBvbmVudFNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgY29tcG9uZW50cyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5c1xuICAgICAgLy8gYW5kIGFkZHMgdGhlIGtleSBhcyB0aGUgbmFtZSB0byBlYWNoIGNvbXBvbmVudCwgdXNlZCBmb3IgbGFiZWxzLCBldGMuXG4gICAgICAvLyBOT1RFOiBzY2hlbWEgY2FuIGJlIG51bGwgd2hpbGUgbXVsdGktZm9ybSBsaXN0cyBsb2FkIHRoZWlyIGRhdGEsXG4gICAgICAvLyBiZWNhdXNlIG9ubHkgdGhlIGF2YWlsYWJsZSBkYXRhIHdpbGwgZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGZvcm0uXG4gICAgICAvLyBXaGVuIGVkaXRpbmcgcHJpbWl0aXZlIHZhbHVlcyB0aHJvdWdoIGEgZm9ybSwgZG8gbm90IGFwcGVuZCAnbmFtZScgdG9cbiAgICAgIC8vIHRoZSBjb21wb25lbnQncyBkYXRhUGF0aCBzbyBpdCBjYW4gYmUgbWFwcGVkIHRvIGZyb20gdmFsaWRhdGlvbiBlcnJvcnMuXG4gICAgICAvLyBOT1RFOiBOb3QgYWxsIHNjaGVtYXMgLyBjb21wb25lbnRzIGhhdmUgYSBzb3VyY2VTY2hlbWEsIGUuZy4gZGlhbG9ncy5cbiAgICAgIGNvbnN0IHdyYXBQcmltaXRpdmVzID0gdGhpcy5zb3VyY2VTY2hlbWE/LndyYXBQcmltaXRpdmVzXG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWE/LmNvbXBvbmVudHMgfHwge30pLm1hcChcbiAgICAgICAgKFtuYW1lLCBzY2hlbWFdKSA9PiB7XG4gICAgICAgICAgLy8gQWx3YXlzIGFkZCBuYW1lIHRvIGNvbXBvbmVudCBzY2hlbWEuXG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgICAgLy8gU2hhcmUgZGF0YVBhdGggYW5kIHN0b3JlIHdpdGggcGFyZW50IGlmIG5vdCBuZXN0ZWQ6XG4gICAgICAgICAgY29uc3QgbmVzdGVkID0gaXNOZXN0ZWQoc2NoZW1hKVxuICAgICAgICAgIGNvbnN0IG5lc3RlZERhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgZGF0YVBhdGg6XG4gICAgICAgICAgICAgIG5lc3RlZCAmJiAhd3JhcFByaW1pdGl2ZXNcbiAgICAgICAgICAgICAgICA/IG5lc3RlZERhdGFQYXRoXG4gICAgICAgICAgICAgICAgOiB0aGlzLmRhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgICBzdG9yZTogdGhpcy5nZXRDaGlsZFN0b3JlKG5hbWUpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2luZ2xlICYmIHRoaXMuY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPT09IDFcbiAgICB9LFxuXG4gICAgdmVydGljYWxMYWJlbHNCeUluZGljZXMoKSB7XG4gICAgICBjb25zdCB7IHBvc2l0aW9ucyB9ID0gdGhpc1xuXG4gICAgICBjb25zdCBpc0xhc3RJblJvdyA9IGluZGV4ID0+IChcbiAgICAgICAgcG9zaXRpb25zW2luZGV4XSAmJiAoXG4gICAgICAgICAgaW5kZXggPT09IHBvc2l0aW9ucy5sZW5ndGggLSAxIHx8XG4gICAgICAgICAgZmluZE5leHRQb3NpdGlvbihpbmRleCkudG9wID4gcG9zaXRpb25zW2luZGV4XS50b3BcbiAgICAgICAgKVxuICAgICAgKVxuXG4gICAgICBjb25zdCBmaW5kTmV4dFBvc2l0aW9uID0gaW5kZXggPT4ge1xuICAgICAgICBmb3IgKGxldCBpID0gaW5kZXggKyAxOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHBvc2l0aW9uc1tpXSkgcmV0dXJuIHBvc2l0aW9uc1tpXVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJvd3MgPSBbXVxuICAgICAgbGV0IHJvdyA9IFtdXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcG9zaXRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICByb3cucHVzaChpbmRleClcbiAgICAgICAgaWYgKGlzTGFzdEluUm93KGluZGV4KSkge1xuICAgICAgICAgIHJvd3MucHVzaChyb3cpXG4gICAgICAgICAgcm93ID0gW11cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJvdy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJvd3MucHVzaChyb3cpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzID0gW11cblxuICAgICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgICBsZXQgaGFzTGFiZWxzSW5Sb3cgPSBmYWxzZVxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIHJvdykge1xuICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbnNbaW5kZXhdXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcG9zaXRpb24/LmhlaWdodCA+IDIgJiYgKFxuICAgICAgICAgICAgICBwb3NpdGlvbi5ub2RlLm1hdGNoZXMoJzpoYXMoPiAuZGl0by1sYWJlbCknKSB8fFxuICAgICAgICAgICAgICBwb3NpdGlvbi5ub2RlXG4gICAgICAgICAgICAgICAgLmNsb3Nlc3QoJy5kaXRvLWNvbnRhaW5lcicpXG4gICAgICAgICAgICAgICAgLm1hdGNoZXMoJy5kaXRvLWNvbnRhaW5lci0tbGFiZWwtdmVydGljYWwnKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gVE9ETzogSGFuZGxlIG5lc3RlZCBzY2hlbWFzLCBlLmcuICdzZWN0aW9uJyBvciAnb2JqZWN0JyBhbmRcbiAgICAgICAgICAgIC8vIGRldGVjdCBsYWJlbHMgdGhlcmUgdG9vLlxuICAgICAgICAgICAgaGFzTGFiZWxzSW5Sb3cgPSB0cnVlXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIHJvdykge1xuICAgICAgICAgIHZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzW2luZGV4XSA9IGhhc0xhYmVsc0luUm93XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJ2NvbXBvbmVudFNjaGVtYXMubGVuZ3RoJyhsZW5ndGgpIHtcbiAgICAgIHRoaXMucG9zaXRpb25zLmxlbmd0aCA9IGxlbmd0aFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lKHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICBpZiAodGhpcy50YWIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlci5wdXNoKHsgaGFzaDogYCMke3RoaXMudGFifWAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25SZXNpemVQYW5lKCkge1xuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbnRhaW5lciBvZiB0aGlzLiRyZWZzLmNvbnRhaW5lcnMpIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gY29udGFpbmVyLiRlbFxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gK25vZGUuZGF0YXNldC5pbmRleFxuICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgICBjb25zdCBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUobm9kZSlcbiAgICAgICAgICBjb25zdCBwYWRkaW5nID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nKVxuICAgICAgICAgIGNvbnN0IGZvbnRTaXplID0gcGFyc2VGbG9hdChzdHlsZS5mb250U2l6ZSlcbiAgICAgICAgICBjb25zdCBoZWlnaHQgPSBib3VuZHMuaGVpZ2h0IC0gMiAqIHBhZGRpbmdcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uc1tpbmRleF0gPVxuICAgICAgICAgICAgaGVpZ2h0IDw9IDBcbiAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgdG9wOiBib3VuZHMueSxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0IC8gZm9udFNpemUsXG4gICAgICAgICAgICAgICAgICBub2RlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBpc0luTGFiZWxlZFJvdyhpbmRleCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52ZXJ0aWNhbExhYmVsc0J5SW5kaWNlc1tpbmRleF1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYW5lIHtcbiAgJHNlbGY6ICY7XG4gICRyb290LXBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmcgLSAkZm9ybS1zcGFjaW5nLWhhbGY7XG5cbiAgLS1wYW5lLXBhZGRpbmc6IDBweDtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAvLyBSZW1vdmUgdGhlIHBhZGRpbmcgYWRkZWQgYnkgYC5kaXRvLWNvbnRhaW5lcmAgaW5zaWRlIGAuZGl0by1wYW5lYDpcbiAgbWFyZ2luOiAtJGZvcm0tc3BhY2luZy1oYWxmO1xuICBwYWRkaW5nOiB2YXIoLS1wYW5lLXBhZGRpbmcpO1xuICAvLyBVc2UgYGZsZXg6IDAlYCBmb3IgYWxsIGAuZGl0by1wYW5lYCBleGNlcHQgYC5kaXRvLXBhbmVfX21haW5gLFxuICAvLyBzbyB0aGF0IHRoZSBgLmRpdG8tYnV0dG9ucy1tYWluYCBjYW4gYmUgbW92ZWQgYWxsIHRoZSB3YXkgdG8gdGhlIGJvdHRvbS5cbiAgZmxleDogMCU7XG5cbiAgJl9fbWFpbiB7XG4gICAgZmxleDogMTAwJTtcbiAgfVxuXG4gICYtLXBhZGRpbmctcm9vdCB7XG4gICAgLy8gQSByb290LWxldmVsIHBhbmUgaW5zaWRlIGEgc2Nyb2xsIHZpZXcuIENsZWFyIG5lZ2F0aXZlIG1hcmdpbiBmcm9tIGFib3ZlLlxuICAgIG1hcmdpbjogMDtcbiAgICAvLyBNb3ZlIHRoZSBuZWdhdGl2ZSBtYXJnaW4gdXNlZCB0byByZW1vdmUgdGhlIHBhZGRpbmcgYWRkZWQgYnlcbiAgICAvLyBgLmRpdG8tY29udGFpbmVyYCBpbnNpZGUgYC5kaXRvLXBhbmVgIHRvIHRoZSBwYWRkaW5nOlxuICAgIC0tcGFuZS1wYWRkaW5nOiAjeyRyb290LXBhZGRpbmd9O1xuXG4gICAgJiN7JHNlbGZ9LS1zaW5nbGUge1xuICAgICAgLS1wYW5lLXBhZGRpbmc6ICN7JGNvbnRlbnQtcGFkZGluZ307XG4gICAgfVxuXG4gICAgJjpoYXMoPiAuZGl0by1jb250YWluZXItLWxhYmVsLXZlcnRpY2FsOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgIC8vIFJlZHVjZSB0b3Agc3BhY2luZyB3aGVuIHRoZSBmaXJzdCByb3cgaGFzIGxhYmVscy5cbiAgICAgIG1hcmdpbi10b3A6IC0kZm9ybS1zcGFjaW5nLWhhbGY7XG4gICAgfVxuXG4gICAgLy8gRGlzcGxheSBhIHJ1bGVyIGJldHdlZW4gdGFiYmVkIGNvbXBvbmVudHMgYW5kIHRvd2FyZHMgdGhlIC5kaXRvLWJ1dHRvbnNcbiAgICAmX190YWIgKyAmX19tYWluIHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIC8vIFVzZSBhIHBzZXVkbyBlbGVtZW50IHRvIGRpc3BsYXkgYSBydWxlciB3aXRoIHByb3BlciBtYXJnaW5zXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGU7XG4gICAgICAgIC8vIFNoaWZ0IHJ1bGVyIHVwIGJ5ICRyb290LXBhZGRpbmcgdG8gZXhjbHVkZSByZW1vdmVkICRmb3JtLXNwYWNpbmctaGFsZlxuICAgICAgICBtYXJnaW46ICgtJHJvb3QtcGFkZGluZykgJGZvcm0tc3BhY2luZy1oYWxmICRyb290LXBhZGRpbmc7XG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19tYWluICsgLmRpdG8tYnV0dG9ucy1tYWluIHtcbiAgICAgIC8vIE5lZWRlZCBmb3JtcyB3aXRoIHN0aWNreSBtYWluIGJ1dHRvbnMuXG4gICAgICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmc7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbiAgfVxuXG4gICYtLXBhZGRpbmctaW5saW5lZCB7XG4gICAgLS1wYW5lLXBhZGRpbmc6IDBweDtcbiAgfVxuXG4gICYtLXBhZGRpbmctbmVzdGVkIHtcbiAgICAtLXBhbmUtcGFkZGluZzogI3skZm9ybS1zcGFjaW5nfTtcblxuICAgICY6aGFzKD4gLmRpdG8tY29udGFpbmVyLS1sYWJlbC12ZXJ0aWNhbDpmaXJzdC1vZi10eXBlKSB7XG4gICAgICAvLyBSZWR1Y2UgdG9wIHNwYWNpbmcgd2hlbiB0aGUgZmlyc3Qgcm93IGhhcyBsYWJlbHMuXG4gICAgICBwYWRkaW5nLXRvcDogJGZvcm0tc3BhY2luZy1oYWxmO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWJyZWFrIHtcbiAgICAvLyBgLmRpdG8tYnJlYWtgIGlzIHJlbmRlcmVkIGFzIDxzcGFuPiBzbyB3ZSBjYW4gdXNlIHRoZVxuICAgIC8vIGAuZGl0by1jb250YWluZXI6Zmlyc3Qtb2YtdHlwZWAgc2VsZWN0b3IgdG8gbWF0Y2ggdGhlIGZpcnN0IGNvbnRhaW5lclxuICAgIC8vIGV2ZW4gaWYgaXQgaGFzIGEgYnJlYWsgYmVmb3JlIGl0LlxuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZsZXg6IDEwMCU7XG4gICAgaGVpZ2h0OiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcmFjdGlvbih2YWx1ZSkge1xuICBjb25zdCBtYXRjaCA9IChcbiAgICBpc1N0cmluZyh2YWx1ZSkgJiZcbiAgICB2YWx1ZS5tYXRjaCgvXlxccyooWystXT9cXGQrKVxccypcXC9cXHMqKFsrLV0/XFxkKylcXHMqJC8pXG4gIClcbiAgaWYgKG1hdGNoKSB7XG4gICAgY29uc3QgWywgZGl2aWRlbmQsIGRpdmlzb3JdID0gbWF0Y2hcbiAgICByZXR1cm4gcGFyc2VGbG9hdChkaXZpZGVuZCkgLyBwYXJzZUZsb2F0KGRpdmlzb3IpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpXG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jb250YWluZXIoXG4gIHYtc2hvdz1cImNvbXBvbmVudFZpc2libGVcIlxuICA6Y2xhc3M9XCJjb250YWluZXJDbGFzc2VzXCJcbiAgOnN0eWxlPVwiY29udGFpbmVyU3R5bGVzXCJcbilcbiAgVGVsZXBvcnQoXG4gICAgdi1pZj1cImlzTW91bnRlZCAmJiBwYW5lbEVudHJpZXMubGVuZ3RoID4gMFwiXG4gICAgdG89XCIuZGl0by1zaWRlYmFyX190ZWxlcG9ydFwiXG4gIClcbiAgICBEaXRvUGFuZWxzKFxuICAgICAgOnBhbmVscz1cInBhbmVsRW50cmllc1wiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gIERpdG9MYWJlbChcbiAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgIDpjbGFzcz1cImxheW91dENsYXNzZXNcIlxuICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICA6ZGF0YVBhdGg9XCJsYWJlbERhdGFQYXRoXCJcbiAgICA6aW5mbz1cImluZm9cIlxuICApXG4gIGNvbXBvbmVudC5kaXRvLWNvbXBvbmVudChcbiAgICA6aXM9XCJ0eXBlQ29tcG9uZW50XCJcbiAgICByZWY9XCJjb21wb25lbnRcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzZXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDp3aWR0aD1cIndpZHRoXCJcbiAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgOnNpbmdsZT1cInNpbmdsZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiY29tcG9uZW50RGlzYWJsZWRcIlxuICAgIDphY2N1bXVsYXRlZEJhc2lzPVwiY29tYmluZWRCYXNpc1wiXG4gICAgQGVycm9ycz1cIm9uRXJyb3JzXCJcbiAgKVxuICBEaXRvRXJyb3JzKDplcnJvcnM9XCJlcnJvcnNcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc1N0cmluZywgaXNOdW1iZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQge1xuICBnZXRBbGxQYW5lbEVudHJpZXMsXG4gIGdldFR5cGVDb21wb25lbnQsXG4gIGhhc0xhYmVsLFxuICBvbWl0U3BhY2luZ1xufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBwYXJzZUZyYWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvbWF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQ29udGFpbmVyJywge1xuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB2ZXJ0aWNhbExhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGFjY3VtdWxhdGVkQmFzaXM6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogdGhpcy5uZXN0ZWQgfSlcbiAgICB9LFxuXG4gICAgdHlwZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiBnZXRUeXBlQ29tcG9uZW50KHRoaXMuc2NoZW1hLnR5cGUpXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuIGhhc0xhYmVsKHRoaXMuc2NoZW1hLCB0aGlzLmdlbmVyYXRlTGFiZWxzKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0xhYmVsID8gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSkgOiBudWxsXG4gICAgfSxcblxuICAgIGxhYmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBVbm5lc3RlZCB0eXBlcyBkb24ndCBoYXZlIGEgZGF0YVBhdGggZm9yIHRoZW1zZWx2ZXMsIGRvbid0IHVzZSBpdDpcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMuZGF0YVBhdGggOiBudWxsXG4gICAgfSxcblxuICAgIGluZm86IGdldFNjaGVtYUFjY2Vzc29yKCdpbmZvJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgd2lkdGg6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlQ29tcG9uZW50Py5kZWZhdWx0V2lkdGhcbiAgICAgIH0sXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgLy8gVXNlIDEwMCUgPT0gMS4wIGFzIGRlZmF1bHQgd2lkdGggd2hlbiBub3RoaW5nIGlzIHNldDpcbiAgICAgICAgcmV0dXJuIHdpZHRoID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IDEuMFxuICAgICAgICAgIDogaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKls8Pl0/XFxzKiguKikkLylbMV0gLy8gUmVtb3ZlIHdpZHRoIG9wZXJhdG9yXG4gICAgICAgICAgICA6IHdpZHRoXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB3aWR0aE9wZXJhdG9yOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqKFs8Pl0/KS8pWzFdIHx8IG51bGxcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudFZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVDb21wb25lbnQ/LmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnREaXNhYmxlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Rpc2FibGVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiBkaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBmbGV4R3JvdygpIHtcbiAgICAgIC8vIEludGVycHJldCAnPjUwJScgYXMgJzUwJSwgZmxleC1ncm93OiAxYFxuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy53aWR0aE9wZXJhdG9yID09PSAnPicgfHxcbiAgICAgICAgdGhpcy53aWR0aCA9PT0gJ2ZpbGwnXG4gICAgICApXG4gICAgfSxcblxuICAgIGZsZXhTaHJpbmsoKSB7XG4gICAgICAvLyBJbnRlcnByZXQgJzw1MCUnIGFzICc1MCUsIGZsZXgtc2hyaW5rOiAxYFxuICAgICAgcmV0dXJuIHRoaXMud2lkdGhPcGVyYXRvciA9PT0gJzwnXG4gICAgfSxcblxuICAgIGZsZXhCYXNpcygpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy53aWR0aFxuICAgICAgLy8gJ2F1dG8nID0gbm8gZml0dGluZzpcbiAgICAgIHJldHVybiBbbnVsbCwgJ2F1dG8nLCAnZmlsbCddLmluY2x1ZGVzKHdpZHRoKVxuICAgICAgICA/ICdhdXRvJ1xuICAgICAgICA6IC8lJC8udGVzdCh3aWR0aClcbiAgICAgICAgICA/IHBhcnNlRmxvYXQod2lkdGgpIC8gMTAwIC8vIHBlcmNlbnRhZ2UgLT4gZnJhY3Rpb25cbiAgICAgICAgICA6IC9bYS16XS8udGVzdCh3aWR0aClcbiAgICAgICAgICAgID8gd2lkdGggLy8gbmF0aXZlIHVuaXRzXG4gICAgICAgICAgICA6IHBhcnNlRnJhY3Rpb24od2lkdGgpIC8vIGZyYWN0aW9uXG4gICAgfSxcblxuICAgIGNvbWJpbmVkQmFzaXMoKSB7XG4gICAgICBjb25zdCB7IGFjY3VtdWxhdGVkQmFzaXMsIGZsZXhCYXNpcyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzTnVtYmVyKGFjY3VtdWxhdGVkQmFzaXMpICYmIGlzTnVtYmVyKGZsZXhCYXNpcylcbiAgICAgICAgPyBhY2N1bXVsYXRlZEJhc2lzICogZmxleEJhc2lzXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBjb250YWluZXJDbGFzc2VzKCkge1xuICAgICAgY29uc3QgeyBjbGFzczogY2xhc3NlcyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGNvbnN0IHByZWZpeCA9ICdkaXRvLWNvbnRhaW5lcidcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtgJHtwcmVmaXh9LS1zaW5nbGVgXTogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5jb21wb25lbnREaXNhYmxlZCxcbiAgICAgICAgJ2RpdG8taGFzLWVycm9ycyc6ICEhdGhpcy5lcnJvcnMsXG4gICAgICAgIFtgJHtwcmVmaXh9LS1sYWJlbC12ZXJ0aWNhbGBdOiB0aGlzLnZlcnRpY2FsTGFiZWxzLFxuICAgICAgICBbYCR7cHJlZml4fS0tb21pdC1zcGFjaW5nYF06IG9taXRTcGFjaW5nKHRoaXMuc2NoZW1hKSxcbiAgICAgICAgLi4uKGlzU3RyaW5nKGNsYXNzZXMpID8geyBbY2xhc3Nlc106IHRydWUgfSA6IGNsYXNzZXMpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbnRhaW5lclN0eWxlcygpIHtcbiAgICAgIGNvbnN0IHsgZmxleEJhc2lzLCBjb21iaW5lZEJhc2lzIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1ncm93JzogdGhpcy5mbGV4R3JvdyA/IDEgOiAwLFxuICAgICAgICAnLS1zaHJpbmsnOiB0aGlzLmZsZXhTaHJpbmsgPyAxIDogMCxcbiAgICAgICAgJy0tYmFzaXMnOiBpc051bWJlcihmbGV4QmFzaXMpID8gYCR7ZmxleEJhc2lzICogMTAwfSVgIDogZmxleEJhc2lzLFxuICAgICAgICAnLS1iYXNpcy1tb2JpbGUnOlxuICAgICAgICAgIGlzTnVtYmVyKGNvbWJpbmVkQmFzaXMpICYmIGNvbWJpbmVkQmFzaXMgPD0gMC4yNVxuICAgICAgICAgICAgPyBgJHtmbGV4QmFzaXMgKiAyMDB9JWBcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRDbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgIC4uLnRoaXMubGF5b3V0Q2xhc3Nlc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBsYXlvdXRDbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8td2lkdGgtZmlsbCc6IHRoaXMud2lkdGggPT09ICdmaWxsJyB8fCB0aGlzLmZsZXhCYXNpcyAhPT0gJ2F1dG8nLFxuICAgICAgICAnZGl0by13aWR0aC1ncm93JzogdGhpcy5mbGV4R3JvdyxcbiAgICAgICAgJ2RpdG8td2lkdGgtc2hyaW5rJzogdGhpcy5mbGV4U2hyaW5rXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhbmVsRW50cmllcygpIHtcbiAgICAgIHJldHVybiBnZXRBbGxQYW5lbEVudHJpZXMoXG4gICAgICAgIHRoaXMuYXBpLFxuICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgdGhpcy4kcmVmcy5jb21wb25lbnQsXG4gICAgICAgIHRoaXMudGFiQ29tcG9uZW50XG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkVycm9ycyhlcnJvcnMpIHtcbiAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY29udGFpbmVyIHtcbiAgLS1ncm93OiAwO1xuICAtLXNocmluazogMTtcbiAgLS1iYXNpczogYXV0bztcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXg6IHZhcigtLWdyb3cpIHZhcigtLXNocmluaykgdmFyKC0tYmFzaXMpO1xuICBmbGV4LWZsb3c6IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC8vIFRvIHByZXZlbnQgbGlzdCB0YWJsZXMgZnJvbSBibG93aW5nIG91dCBvZiB0aGVpciBmbGV4IGJveCBjb250YWluZXJzLlxuICBtYXgtd2lkdGg6IDEwMCU7XG4gIC8vIENhbm5vdCB1c2UgbWFyZ2luIGhlcmUgYXMgaXQgbmVlZHMgdG8gYmUgcGFydCBvZiBib3gtc2l6aW5nIGZvclxuICAvLyBwZXJjZW50YWdlcyBpbiBmbGV4LWJhc2lzIHRvIHdvcmsuXG4gIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZjtcblxuICAuZGl0by1wYW5lID4gJiB7XG4gICAgLmRpdG8tcGFnZS0td2lkdGgtODAgJiB7XG4gICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICBmbGV4LWJhc2lzOiB2YXIoLS1iYXNpcy1tb2JpbGUsIHZhcigtLWJhc2lzKSk7XG4gICAgICAvLyBERUJVRzogYmFja2dyb3VuZDogeWVsbG93O1xuICAgIH1cblxuICAgIC5kaXRvLXBhZ2UtLXdpZHRoLTYwICYge1xuICAgICAgZmxleC1iYXNpczogY2FsYygyICogdmFyKC0tYmFzaXMpKTtcbiAgICAgIC8vIERFQlVHOiBiYWNrZ3JvdW5kOiBvcmFuZ2U7XG4gICAgfVxuXG4gICAgLmRpdG8tc2lkZWJhci0td2lkdGgtOTkgJiB7XG4gICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAvLyBERUJVRzogYmFja2dyb3VuZDogeWVsbG93O1xuICAgIH1cblxuICAgIC5kaXRvLXNpZGViYXItLXdpZHRoLTYwICYge1xuICAgICAgZmxleC1iYXNpczogY2FsYygyICogdmFyKC0tYmFzaXMpKTtcbiAgICAgIC8vIERFQlVHOiBiYWNrZ3JvdW5kOiBvcmFuZ2U7XG4gICAgfVxuICB9XG5cbiAgJjplbXB0eSB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuXG4gICYtLXNpbmdsZSB7XG4gICAgaGVpZ2h0OiAxMDAlOyAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IGF0IHRoZSBib3R0b207XG4gICAgLy8gSnVzdCBsaWtlIG9uIERpdG9QYW5lLCBjbGVhciBzZXR0aW5ncyBmcm9tIGFib3ZlLlxuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICAmLS1sYWJlbC12ZXJ0aWNhbCB7XG4gICAgLy8gRm9yIHBsYWluIGNvbXBvbmVudHMgd2l0aG91dCBsYWJlbHMgaW4gcm93cyB3aXRoIG90aGVyIGNvbXBvbmVudHMgdGhhdFxuICAgIC8vIGhhdmUgbGFiZWxzLCBhZGQgc29tZSBzcGFjaW5nIHRvIHRoZSB0b3AgdG8gYWxpZ24gd2l0aCB0aGUgb3RoZXJcbiAgICAvLyBjb21wb25lbnRzIChlLmcuICBidXR0b25zKTpcbiAgICA+IC5kaXRvLWNvbXBvbmVudDpmaXJzdC1jaGlsZDpub3QoLmRpdG8tc2VjdGlvbiwgLmRpdG8tbGlzdCwgLmRpdG8tb2JqZWN0KSB7XG4gICAgICBtYXJnaW4tdG9wOiAkaW5wdXQtaGVpZ2h0O1xuICAgIH1cbiAgfVxuXG4gICYtLW9taXQtc3BhY2luZyB7XG4gICAgcGFkZGluZzogMDtcblxuICAgID4gLmRpdG8tbGFiZWwge1xuICAgICAgbWFyZ2luOiAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZy1oYWxmIDA7XG4gICAgfVxuICB9XG59XG5cbi8vIE5PVEU6IFRoaXMgaXMgbm90IG5lc3RlZCBpbnNpZGUgYC5kaXRvLWNvbnRhaW5lcmAgc28gdGhhdCBvdGhlclxuLy8gdHlwZSBjb21wb25lbnRzIGNhbiBvdmVycmlkZSBgLmRpdG8td2lkdGgtZmlsbGAgY2xhc3MgKGZpbHRlciBwcmVjZWRlbmNlKS5cbi5kaXRvLWNvbXBvbmVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAmLmRpdG8tY2hlY2tib3gsXG4gICAgJi5kaXRvLXJhZGlvLWJ1dHRvbiB7XG4gICAgICAvLyBXZWJLaXQgZG9lc24ndCBsaWtlIGNoYW5nZWQgd2lkdGggb24gY2hlY2tib3hlcyBhbmQgcmFkaW9zLCBvdmVycmlkZTpcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10YWJzXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwga2V5KSBpbiB0YWJzXCJcbiAgKVxuICAgIGEuZGl0by1saW5rKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYSh0YWJTY2hlbWEpXCJcbiAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBtb2RlbFZhbHVlID09PSBrZXkgfVwiXG4gICAgICBAY2xpY2s9XCIkZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBrZXkpXCJcbiAgICApIHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RhYnMnLCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG4gIHByb3BzOiB7XG4gICAgdGFiczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AdXNlICdzYXNzOmNvbG9yJztcbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRhYnMge1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5kaXRvLWxpbmsge1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgIH1cblxuICAgIC8vIFdoZW4gaW4gbWFpbiBoZWFkZXI6XG4gICAgLmRpdG8taGVhZGVyICYge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0O1xuICAgICAgcGFkZGluZzogJHRhYi1wYWRkaW5nLXZlciAkdGFiLXBhZGRpbmctaG9yO1xuICAgICAgbWFyZ2luLWxlZnQ6ICR0YWItbWFyZ2luO1xuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHRhYi1yYWRpdXM7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXM7XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0O1xuICAgICAgfVxuXG4gICAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdoZW4gaW5zaWRlIGEgaW5saW5lIHNjaGVtYTpcbiAgICAuZGl0by1zY2hlbWEtaW5saW5lZCAmLFxuICAgIC5kaXRvLWxhYmVsICYge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXI7XG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgICAgIG1hcmdpbi1sZWZ0OiAtJGJvcmRlci13aWR0aDtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkdGFiLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJHRhYi1yYWRpdXM7XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkdGFiLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuICAgICAgfVxuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyO1xuICAgICAgfVxuXG4gICAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBjb2xvci5hZGp1c3QoJGNvbG9yLWFjdGl2ZSwgJGxpZ2h0bmVzczogLTEwJSk7XG4gICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tc2NoZW1hICYge1xuICAgIC8vIFB1c2ggY2xpcGJvYXJkIHRvIHRoZSByaWdodCBpbiB0aGUgZmxleCBsYXlvdXQsIHNlZTpcbiAgICAvLyBodHRwczovL2NvZGVwZW4uaW8vdGhvbGV4L3Blbi9odmVCeC9cbiAgICBtYXJnaW4tbGVmdDogYXV0bztcblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBPbmx5IHNob3cgcGFuZWxzIGluIHRhYnMgd2hlbiB0aGUgdGFicyBhcmUgYWxzbyB2aXNpYmxlLlxuY29tcG9uZW50LmRpdG8tcGFuZWwoXG4gIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEocGFuZWxTY2hlbWEpXCJcbiAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgOmlzPVwicGFuZWxUYWdcIlxuICBAc3VibWl0LnByZXZlbnRcbilcbiAgRGl0b1NjaGVtYS5kaXRvLXBhbmVsX19zY2hlbWEoXG4gICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgcGFkZGluZz1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gICAgZ2VuZXJhdGVMYWJlbHNcbiAgKVxuICAgIHRlbXBsYXRlKCNiZWZvcmUpXG4gICAgICBoMi5kaXRvLXBhbmVsX19oZWFkZXIoOmNsYXNzPVwieyAnZGl0by1wYW5lbF9faGVhZGVyLS1zdGlja3knOiBzdGlja3kgfVwiKVxuICAgICAgICBzcGFuIHt7IGdldExhYmVsKHNjaGVtYSkgfX1cbiAgICAgICAgRGl0b0J1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKFxuICAgICAgICAgIDpidXR0b25zPVwicGFuZWxCdXR0b25TY2hlbWFzXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICApXG4gICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICBEaXRvQnV0dG9ucyhcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9QYW5lbCcsIHtcbiAgbWl4aW5zOiBbVmFsaWRhdG9yTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMucGFuZWxUYWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYW5lbFRhYkNvbXBvbmVudDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG93bkRhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICBwYW5lbEJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5wYW5lbEJ1dHRvbnMpXG4gICAgfSxcblxuICAgIGhhc093bkRhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLm93bkRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMub3duRGF0YSB8fCB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWEoKSB7XG4gICAgICBpZiAodGhpcy5oYXNPd25EYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIGBkYXRhYCBmcm9tIHRoZSBzY2hlbWEsIHNvIHRoYXQgRGl0b1NjaGVtYSBpc24ndCB1c2luZyBpdCB0b1xuICAgICAgICAvLyBwcm9kdWNlIGl0cyBvd24gZGF0YS4gU2VlICRmaWx0ZXJzIHBhbmVsIGZvciBtb3JlIGRldGFpbHMgb24gZGF0YS5cbiAgICAgICAgY29uc3QgeyBkYXRhLCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFuZWxUYWcoKSB7XG4gICAgICAvLyBQYW5lbHMgdGhhdCBwcm92aWRlIHRoZWlyIG93biBkYXRhIG5lZWQgdGhlaXIgb3duIGZvcm0uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gJ2Zvcm0nIDogJ2RpdidcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIGRhdGEsIHRoZW4gaXQgbmVlZHMgdG8gcHJlZml4IGFsbFxuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIGl0cyBkYXRhLXBhdGgsIGJ1dCBpZiBpdCBzaGFyZXMgZGF0YSB3aXRoIHRoZSBzY2hlbWFcbiAgICAgIC8vIGNvbXBvbmVudCwgdGhlbiBpdCBzaG91bGQgc2hhcmUgdGhlIGRhdGEtcGF0aCBuYW1lIHNwYWNlIHRvby5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyB0aGlzLmRhdGFQYXRoIDogdGhpcy5zY2hlbWFDb21wb25lbnQuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pLFxuXG4gICAgc3RpY2t5OiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RpY2t5Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgLy8gTk9URTogVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgYHNjaGVtYS5kYXRhYCBoYW5kbGluZyBpbiBEaXRvU2NoZW1hLFxuICAgIC8vIHdoZXJlIHRoZSBkYXRhIGlzIGFkZGVkIHRvIHRoZSBhY3R1YWwgY29tcG9uZW50LlxuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5vd25EYXRhID0gaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICA/IGRhdGEodGhpcy5jb250ZXh0KVxuICAgICAgICA6IGRhdGFcbiAgICB9XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBSZWdpc3RlciB0aGUgcGFuZWxzIHNvIHRoYXQgb3RoZXIgY29tcG9uZW50cyBjYW4gZmluZCB0aGVtIGJ5IHRoZWlyXG4gICAgICAvLyBkYXRhLXBhdGgsIGUuZy4gaW4gVHlwZUxpc3Qub25GaWx0ZXJFcnJvcnMoKVxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZWwodGhpcywgYWRkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhbmVsIHtcbiAgJjpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkY29udGVudC1wYWRkaW5nO1xuICB9XG5cbiAgJl9faGVhZGVyIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgICBiYWNrZ3JvdW5kOiAkYnV0dG9uLWNvbG9yO1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG5cbiAgICAmLS1zdGlja3kge1xuICAgICAgJG1hcmdpbjogJGlucHV0LWhlaWdodC1mYWN0b3IgKiAkbGluZS1oZWlnaHQgKiAkZm9udC1zaXplLXNtYWxsICtcbiAgICAgICAgJGZvcm0tc3BhY2luZztcblxuICAgICAgcG9zaXRpb246IHN0aWNreTtcbiAgICAgIHRvcDogJGNvbnRlbnQtcGFkZGluZztcbiAgICAgIG1hcmdpbi1ib3R0b206ICRtYXJnaW47XG4gICAgICB6LWluZGV4OiAxO1xuXG4gICAgICAmICsgKiB7XG4gICAgICAgIG1hcmdpbi10b3A6IC0kbWFyZ2luO1xuICAgICAgfVxuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGhlaWdodDogJGNvbnRlbnQtcGFkZGluZztcbiAgICAgICAgdG9wOiAtJGNvbnRlbnQtcGFkZGluZztcbiAgICAgICAgbWFyZ2luOiAtJGJvcmRlci13aWR0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1idXR0b25zIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiAkaW5wdXQtcGFkZGluZy12ZXI7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICB9XG4gIH1cblxuICAmX19zY2hlbWEge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcblxuICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnQge1xuICAgICAgLmRpdG8tb2JqZWN0IHtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgfVxuXG4gICAgICA+IC5kaXRvLWJ1dHRvbnMge1xuICAgICAgICAtLWJ1dHRvbi1tYXJnaW46ICN7JGZvcm0tc3BhY2luZ307XG5cbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZztcblxuICAgICAgICAuZGl0by1jb250YWluZXIge1xuICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1sYWJlbCB7XG4gICAgICBsYWJlbCB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhbmVscyhcbiAgdi1pZj1cInBhbmVscy5sZW5ndGggPiAwXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gIClcbiAgICBEaXRvUGFuZWwoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSlcIlxuICAgICAgOmtleT1cImdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKHNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJzY2hlbWEuZGlzYWJsZWQgPz8gZGlzYWJsZWRcIlxuICAgICAgOnBhbmVsVGFiQ29tcG9uZW50PVwidGFiQ29tcG9uZW50XCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFuZWxzJywge1xuICBwcm9wczoge1xuICAgIHBhbmVsczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgICAgIC8vIEFsbG93IHNlcGFyYXRlIHRhYnMgdG8gdXNlIHBhbmVscyBvZiB0aGUgc2FtZSBuYW1lLCBieVxuICAgICAgLy8gcHJlZml4aW5nIHRoZWlyIGtleSB3aXRoIHRoZSB0YWIgbmFtZS5cbiAgICAgIHJldHVybiB0YWJDb21wb25lbnQgPyBgJHt0YWJDb21wb25lbnQudGFifV8ke2RhdGFQYXRofWAgOiBkYXRhUGF0aFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhbmVscyB7XG4gIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZztcbiAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmc7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWJ1dHRvbnMoXG4gIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8IGhhc1Nsb3RDb250ZW50KCRzbG90cy5kZWZhdWx0KVwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwiKGJ1dHRvblNjaGVtYSwgYnV0dG9uRGF0YVBhdGgpIGluIGJ1dHRvblNjaGVtYXNcIlxuICApXG4gICAgRGl0b0NvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoYnV0dG9uU2NoZW1hKVwiXG4gICAgICA6a2V5PVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwidm5vZGUgb2YgJHNsb3RzLmRlZmF1bHQ/LigpXCJcbiAgKVxuICAgIC8vLSBSZW5kZXIgZWFjaCBub2RlIGluIHRoZSBkZWZhdWx0IHNsb3QgdGhyb3VnaCBgZGl0by12bm9kZWAsXG4gICAgLy8tIHNvIGl0IGNhbiBiZSB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gICAgLmRpdG8tY29udGFpbmVyKFxuICAgICAgdi1pZj1cImhhc1ZOb2RlQ29udGVudCh2bm9kZSlcIlxuICAgIClcbiAgICAgIERpdG9Wbm9kZSg6dm5vZGU9XCJ2bm9kZVwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBoYXNTbG90Q29udGVudCwgaGFzVk5vZGVDb250ZW50IH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0J1dHRvbnMnLCB7XG4gIHByb3ZpZGU6IHtcbiAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBidXR0b25zIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzLlxuICAgICAgY29uc3QgeyBkYXRhUGF0aCwgYnV0dG9ucyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGJ1dHRvbnNcbiAgICAgICAgPyBPYmplY3QudmFsdWVzKGJ1dHRvbnMpLnJlZHVjZSgoc2NoZW1hcywgYnV0dG9uKSA9PiB7XG4gICAgICAgICAgICBzY2hlbWFzW2FwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBidXR0b24ubmFtZSldID0gYnV0dG9uXG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hc1xuICAgICAgICAgIH0sIHt9KVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc1Nsb3RDb250ZW50LFxuICAgIGhhc1ZOb2RlQ29udGVudFxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tYnV0dG9ucyB7XG4gID4gLmRpdG8tY29udGFpbmVyIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBTZXQgYEBjbGljay5zdG9wYCB0byBwcmV2ZW50IGNsaWNrIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIGRpdG8tbGFiZWwuXG5EaXRvQnV0dG9ucy5kaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gIDpidXR0b25zPVwiYnV0dG9uc1wiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICBAY2xpY2suc3RvcFxuKVxuICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICBhLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tZGlzYWJsZWQnOiBpc0RyYWdnYWJsZURpc2FibGVkIH1cIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICApXG4gIFJvdXRlckxpbmsuZGl0by1idXR0b24oXG4gICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWRpc2FibGVkJzogaXNFZGl0YWJsZURpc2FibGVkIH1cIlxuICAgIDp0bz1cImVkaXRQYXRoID8geyBwYXRoOiBlZGl0UGF0aCB9IDoge31cIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICApXG4gIERpdG9DcmVhdGVCdXR0b24oXG4gICAgdi1pZj1cImNyZWF0YWJsZVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOnBhdGg9XCJjcmVhdGVQYXRoXCJcbiAgICA6dmVyYj1cInZlcmJzLmNyZWF0ZVwiXG4gICAgOnRleHQ9XCJjcmVhdGVCdXR0b25UZXh0XCJcbiAgICA6ZGlzYWJsZWQ9XCJpc0NyZWF0YWJsZURpc2FibGVkXCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgOmRpc2FibGVkPVwiaXNEZWxldGFibGVEaXNhYmxlZFwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9FZGl0QnV0dG9ucycsIHtcbiAgZW1pdHM6IFsnZGVsZXRlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjcmVhdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjcmVhdGVQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYS5mb3JtKVxuICAgIH0sXG5cbiAgICBpc0RyYWdnYWJsZURpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuaGFzU2NoZW1hT3B0aW9uKCdkcmFnZ2FibGUnKVxuICAgIH0sXG5cbiAgICBpc0RlbGV0YWJsZURpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuaGFzU2NoZW1hT3B0aW9uKCdkZWxldGFibGUnKVxuICAgIH0sXG5cbiAgICBpc0VkaXRhYmxlRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmRpc2FibGVkIHx8XG4gICAgICAgICF0aGlzLmVkaXRQYXRoIHx8XG4gICAgICAgICF0aGlzLmhhc1NjaGVtYU9wdGlvbignZWRpdGFibGUnKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0NyZWF0YWJsZURpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5kaXNhYmxlZCB8fFxuICAgICAgICAhdGhpcy5jcmVhdGVQYXRoIHx8XG4gICAgICAgICF0aGlzLmhhc1NjaGVtYU9wdGlvbignY3JlYXRhYmxlJylcbiAgICAgIClcbiAgICB9LFxuXG4gICAgY3JlYXRlQnV0dG9uVGV4dCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBjcmVhdGUgYnV0dG9uIHRocm91Z2ggY3JlYXRhYmxlIG9iamVjdDpcbiAgICAgICAgdGhpcy5zY2hlbWEuY3JlYXRhYmxlPy5sYWJlbCB8fCAoXG4gICAgICAgICAgLy8gQXV0by1nZW5lcmF0ZSBjcmVhdGUgYnV0dG9uIGxhYmVscyBmcm9tIGZyb20gbGFiZWxzIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcyB3aXRoIG9ubHkgb25lIGZvcm06XG4gICAgICAgICAgdGhpcy5mb3JtTGFiZWwgJiZcbiAgICAgICAgICBgJHtjYXBpdGFsaXplKHRoaXMudmVyYnMuY3JlYXRlKX0gJHt0aGlzLmZvcm1MYWJlbH1gXG4gICAgICAgICkgfHxcbiAgICAgICAgbnVsbFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFzU2NoZW1hT3B0aW9uKG5hbWUpIHtcbiAgICAgIC8vIEFsbCBvcHRpb25zIGNhbiBiZSBkaXNhYmxlZCBvbiBhIHBlci1mb3JtIGJhc2lzIGJ5IHNldHRpbmdcbiAgICAgIC8vIGBzY2hlbWFbbmFtZV1gIHRvIGBmYWxzZWAgb3IgYSBjYWxsYmFjayByZXR1cm5pbmcgYGZhbHNlYC5cbiAgICAgIHJldHVybiB0aGlzLmdldFNjaGVtYVZhbHVlKG5hbWUsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1lZGl0LWJ1dHRvbnMge1xuICAvLyBPdmVycmlkZSBjdXJzb3IgZnJvbSBjb2xsYXBzaWJsZSBkaXRvLWxhYmVsOlxuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIGZsZXg6IG5vbmU7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNyZWF0ZS1idXR0b25cbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJjcmVhdGFibGVGb3JtXCJcbiAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmIpXCJcbiAgICBAY2xpY2s9XCJjcmVhdGVJdGVtKGNyZWF0YWJsZUZvcm0pXCJcbiAgKSB7eyB0ZXh0IH19XG4gIHRlbXBsYXRlKFxuICAgIHYtZWxzZS1pZj1cImNyZWF0YWJsZUZvcm1zXCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJiKVwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgICkge3sgdGV4dCB9fVxuICAgIHVsLmRpdG8tcHVsbGRvd24oOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCIpXG4gICAgICBsaShcbiAgICAgICAgdi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gY3JlYXRhYmxlRm9ybXNcIlxuICAgICAgKVxuICAgICAgICBhKFxuICAgICAgICAgIHYtc2hvdz1cInNob3VsZFNob3dTY2hlbWEoZm9ybSlcIlxuICAgICAgICAgIDpjbGFzcz1cImdldEZvcm1DbGFzcyhmb3JtLCB0eXBlKVwiXG4gICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh0eXBlKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwoZm9ybSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRGb3JtU2NoZW1hcywgaXNJbmxpbmVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9DcmVhdGVCdXR0b24nLCB7XG4gIG1peGluczogW1B1bGxkb3duTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBUaGUgbmV4dCBmb3VyIHByb3BzIGFyZSB0aGVyZSBmb3IgYERpdG9Db250ZXh0YCBhbmQgdGhlIGBjb250ZXh0KClgXG4gICAgLy8gZ2V0dGVyIGluIGBEaXRvTWl4aW5gLlxuICAgIC8vIFRPRE86IFNob3VsZCB0aGV5IGJlIG1vdmVkIHRvIHNoYXJlZCBtaXhpbiB0aGF0IGRlZmluZXMgdGhlbSBhcyByZXF1aXJlZFxuICAgIC8vIGFuZCBhbHNvIHByb3ZpZGVzIHRoZSBgY29udGV4dCgpYCBnZXR0ZXIsIHBlcmhhcHMgYENvbnRleHRNaXhpbmA/XG4gICAgLy8gYHNjaGVtYWAgY291bGQgYmUgaW5jbHVkZWQgYXMgd2VsbCwgYW5kIGBDb250ZXh0TWl4aW5gIGNvdWxkIGJlIHVzZWQgaW5cbiAgICAvLyBgRGl0b0Zvcm1gLCBgRGl0b1ZpZXdgLCBgRGl0b1BhbmVsYCwgYERpdG9TY2hlbWFgLCBgRGl0b0VkaXRCdXR0b25zYCxcbiAgICAvLyBldGM/IEJ1dCB0aGUgcHJvYmxlbSB3aXRoIHRoZSByb290IGNvbXBvbmVudHMgaXMgdGhhdCB0aGV5IGRvbid0IGhhdmVcbiAgICAvLyB0aGVzZSBwcm9wcy4gV2UgY291bGQgYWRkIGEgYGNvbnRleHRBdHRyaWJ1dGVzKClgIGdldHRlciBmb3IgZWFzeSBwYXNzaW5nXG4gICAgLy8gb24gYXMgYHYtYmluZD1cImNvbnRleHRBdHRyaWJ1dGVzXCJgLlxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB2ZXJiOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0ZXh0OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGNyZWF0YWJsZUZvcm1zKCkge1xuICAgICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuZm9ybXMpLmZpbHRlcihcbiAgICAgICAgKFssIGZvcm1dKSA9PiB0aGlzLmlzRm9ybUNyZWF0YWJsZShmb3JtKVxuICAgICAgKVxuICAgICAgcmV0dXJuIGVudHJpZXMubGVuZ3RoID4gMFxuICAgICAgICA/IE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzKVxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgY3JlYXRhYmxlRm9ybSgpIHtcbiAgICAgIGNvbnN0IGZvcm1zID0gdGhpcy5jcmVhdGFibGVGb3Jtc1xuICAgICAgcmV0dXJuIGZvcm1zICYmIE9iamVjdC5rZXlzKGZvcm1zKS5sZW5ndGggPT09IDEgJiYgZm9ybXMuZGVmYXVsdCB8fCBudWxsXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBpc0Zvcm1DcmVhdGFibGUoZm9ybSkge1xuICAgICAgLy8gRm9ybXMgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGxpc3QgYnkgcHJvdmlkaW5nIGBpZjogZmFsc2VgIG9yXG4gICAgICAvLyBgY3JlYXRhYmxlOiBmYWxzZWAuXG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnNob3VsZFJlbmRlclNjaGVtYShmb3JtKSAmJlxuICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdjcmVhdGFibGUnLCB7XG4gICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgIHNjaGVtYTogZm9ybVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKGZvcm0sIHR5cGUgPSBudWxsKSB7XG4gICAgICBpZiAoIXRoaXMuc2hvdWxkRGlzYWJsZVNjaGVtYShmb3JtKSkge1xuICAgICAgICBpZiAodGhpcy5pc0lubGluZWQpIHtcbiAgICAgICAgICB0aGlzLnNvdXJjZUNvbXBvbmVudC5jcmVhdGVJdGVtKGZvcm0sIHR5cGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICAgICAgcGF0aDogYCR7dGhpcy5wYXRofS9jcmVhdGVgLFxuICAgICAgICAgICAgcXVlcnk6IHsgdHlwZSB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYWxsb3dlZCB0byBjcmVhdGUgaXRlbSBmb3IgZ2l2ZW4gZm9ybScpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEZvcm1DbGFzcyhmb3JtLCB0eXBlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbYGRpdG8tdHlwZS0ke3R5cGV9YF06IHRydWUsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5zaG91bGREaXNhYmxlU2NoZW1hKGZvcm0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25TZWxlY3QodHlwZSkge1xuICAgICAgdGhpcy5jcmVhdGVJdGVtKHRoaXMuZm9ybXNbdHlwZV0sIHR5cGUpXG4gICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1jcmVhdGUtYnV0dG9uIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC5kaXRvLXB1bGxkb3duIHtcbiAgICByaWdodDogMDtcblxuICAgIC5kaXRvLWJ1dHRvbnMtc3RpY2t5ICYge1xuICAgICAgdG9wOiB1bnNldDtcbiAgICAgIHJpZ2h0OiB1bnNldDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICB2LWlmPVwiY2xpcGJvYXJkXCJcbilcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgcmVmPVwiY29weURhdGFcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uQ29weVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25QYXN0ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc09iamVjdCwgY2xvbmUsIGRlaW5kZW50IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9DbGlwYm9hcmQnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBwcm9wczoge1xuICAgIGNsaXBib2FyZDogeyB0eXBlOiBbQm9vbGVhbiwgT2JqZWN0XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29weUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgcGFzdGVFbmFibGVkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsaXBib2FyZE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3QodGhpcy5jbGlwYm9hcmQpID8gdGhpcy5jbGlwYm9hcmQgOiB7fVxuICAgIH0sXG5cbiAgICBjb3B5RGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgY29weSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gY29weVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT5cbiAgICAgICAgICAgIGNvcHkuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBjbGlwYm9hcmREYXRhIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xvbmUoY2xpcGJvYXJkRGF0YSlcbiAgICB9LFxuXG4gICAgcGFzdGVEYXRhKCkge1xuICAgICAgY29uc3QgeyBwYXN0ZSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gcGFzdGVcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+XG4gICAgICAgICAgICBwYXN0ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IGNsaXBib2FyZERhdGEgfSkpXG4gICAgICAgIDogY2xpcGJvYXJkRGF0YSA9PiBjbGlwYm9hcmREYXRhXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgLy8gQ2hlY2sgcmlnaHQgYXdheSBhbHNvIGluIGNhc2UgdGhlcmUncyBhbHJlYWR5IGRhdGEgKGUuZy4gY3JlYXRlIGZvcm0pOlxuICAgICdwYXJlbnRDb21wb25lbnQuaGFzRGF0YSc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICd1cGRhdGVDb3B5J1xuICAgIH0sXG5cbiAgICAnYXBwU3RhdGUuY2xpcGJvYXJkRGF0YSc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICd1cGRhdGVQYXN0ZSdcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICAvLyBDaGVjayBjbGlwYm9hcmQgY29udGVudCB3aGVuZXZlciBzb21ldGhpbmcgZ2V0cyBjb3BpZWQgb3IgdGhlIHdpbmRvdyBnZXRzXG4gICAgLy8gKHJlKWFjdGl2YXRlZCwgYXMgdGhvc2UgYXJlIHRoZSBtb21lbnRzIHdoZW4gdGhlIGNsaXBib2FyZCBjYW4gY2hhbmdlOlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHsgY29weTogdGhpcy51cGRhdGVQYXN0ZSB9KVxuICAgIHRoaXMuZG9tT24od2luZG93LCB7IGZvY3VzOiB0aGlzLnVwZGF0ZVBhc3RlIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGNoZWNrQ2xpcGJvYXJkRGF0YShjbGlwYm9hcmREYXRhKSB7XG4gICAgICBjb25zdCB7ICRzY2hlbWEsIC4uLmRhdGEgfSA9IGNsaXBib2FyZERhdGEgfHwge31cbiAgICAgIHJldHVybiAkc2NoZW1hID09PSB0aGlzLnNjaGVtYS5uYW1lID8gZGF0YSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2xpcGJvYXJkRGF0YShyZXBvcnQpIHtcbiAgICAgIC8vIFVzZSB0aGUgaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgbGV0IHsgY2xpcGJvYXJkRGF0YSB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LnJlYWRUZXh0Py4oKVxuICAgICAgICBpZiAoanNvbikge1xuICAgICAgICAgIGNsaXBib2FyZERhdGEgPSBKU09OLnBhcnNlKGpzb24pXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAocmVwb3J0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5uYW1lLCBlcnIubWVzc2FnZSlcbiAgICAgICAgICBpZiAoZXJyLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIGFsZXJ0KGRlaW5kZW50YFxuICAgICAgICAgICAgICBUaGUgZGF0YSBpbiB0aGUgY2xpcGJvYXJkIGFwcGVhcnMgdG8gYmUgbWFsZm9ybWVkOlxuICAgICAgICAgICAgICAke2Vyci5tZXNzYWdlfVxuICAgICAgICAgICAgYClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNoZWNrQ2xpcGJvYXJkRGF0YShjbGlwYm9hcmREYXRhKVxuICAgIH0sXG5cbiAgICB1cGRhdGVDb3B5KCkge1xuICAgICAgdGhpcy5jb3B5RW5hYmxlZCA9IHRoaXMucGFyZW50Q29tcG9uZW50Lmhhc0RhdGFcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlUGFzdGUoKSB7XG4gICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhdGhpcy5jaGVja0NsaXBib2FyZERhdGEodGhpcy5hcHBTdGF0ZS5jbGlwYm9hcmREYXRhKVxuICAgICAgaWYgKCF0aGlzLnBhc3RlRW5hYmxlZCAmJiB0aGlzLmFwcFN0YXRlLmFnZW50LmNocm9tZSkge1xuICAgICAgICAvLyBTZWUgaWYgdGhlIGNsaXBib2FyZCBjb250ZW50IGlzIHZhbGlkIEpTT04gZGF0YSB0aGF0IGlzIGNvbXBhdGlibGVcbiAgICAgICAgLy8gd2l0aCB0aGUgY3VycmVudCB0YXJnZXQgc2NoZW1hLCBhbmQgb25seSB0aGVuIGFjdGl2YXRlIHRoZSBwYXN0aW5nOlxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5nZXRDbGlwYm9hcmREYXRhKGZhbHNlKSAvLyBEb24ndCByZXBvcnRcbiAgICAgICAgdGhpcy5wYXN0ZUVuYWJsZWQgPSAhIWRhdGFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25Db3B5KCkge1xuICAgICAgbGV0IGRhdGEgPSB0aGlzLnBhcmVudENvbXBvbmVudC5jbGlwYm9hcmREYXRhXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgICAkc2NoZW1hOiB0aGlzLnNjaGVtYS5uYW1lLFxuICAgICAgICAgICAgLi4udGhpcy5jb3B5RGF0YShkYXRhKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBLZWVwIGFuIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgICAgdGhpcy5hcHBTdGF0ZS5jbGlwYm9hcmREYXRhID0gZGF0YVxuICAgICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9IHRydWVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMilcbiAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy53cml0ZVRleHQ/Lihqc29uKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblBhc3RlKCkge1xuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEodHJ1ZSkgLy8gUmVwb3J0XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLnBhc3RlRGF0YShkYXRhKVxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMucGFyZW50Q29tcG9uZW50LmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2xpcGJvYXJkIHtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1zY2hlbWEgJiB7XG4gICAgLy8gUHVzaCBjbGlwYm9hcmQgdG8gdGhlIHJpZ2h0IGluIHRoZSBmbGV4IGxheW91dCwgc2VlOlxuICAgIC8vIGh0dHBzOi8vY29kZXBlbi5pby90aG9sZXgvcGVuL2h2ZUJ4L1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICB9XG5cbiAgLmRpdG8taGVhZGVyICYge1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuXG4gICAgLmRpdG8tYnV0dG9uIHtcbiAgICAgIG1hcmdpbjogMCAwICR0YWItbWFyZ2luICR0YWItbWFyZ2luO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldExvYWRpbmcoaXNMb2FkaW5nLCB7IHVwZGF0ZVJvb3QgPSBmYWxzZSwgdXBkYXRlVmlldyA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgaWYgKCF0aGlzLmlzTG9hZGluZyBeICFpc0xvYWRpbmcpIHtcbiAgICAgICAgLy8gQm9vbGVhbiB4b3JcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgICAgICBpZiAodXBkYXRlUm9vdCkge1xuICAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5yZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVWaWV3KSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldExvYWRpbmcodGhpcy5pc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi9JdGVtTWl4aW4uanMnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuaW1wb3J0IHsgc2V0RGVmYXVsdFZhbHVlcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluLCBMb2FkaW5nTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgIC8vIFBhc3MgbG9jYWwgdmVyYnMgb3ZlcnJpZGVzIG9uIHRvIGNoaWxkcmVuLCBzZWUgdmVyYnMoKSBjb21wdXRlZCBwcm9wLlxuICAgICAgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzLFxuICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0aGlzLmhhc0RhdGFcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9hZGVkRGF0YTogbnVsbCxcbiAgICAgIGFib3J0Q29udHJvbGxlcjogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRoZSByZXNvdXJjZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXNvdXJjZSBmb3IgdGhlXG4gICAgICAvLyBhc3NvY2lhdGVkIHNvdXJjZSBzY2hlbWEuXG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZSgpXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIFRoaXMgY29tcG9uZW50IGlzIGEgZGF0YS1zb3VyY2UgaWYgaXQgaGFzIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlOlxuICAgICAgcmV0dXJuICEhdGhpcy5yZXNvdXJjZVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIC8vIFJldHVybnMgYGZhbHNlYGhlcmUsIGJ1dCBpcyBvdmVycmlkZGVuIHRvIHJldHVybiBgdHJ1ZWAgaW5cbiAgICAgIC8vIGBTb3VyY2VNaXhpbmAgZm9yIGNvbXBvbmVudCB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZWlyIG93biBkYXRhLCBidXRcbiAgICAgIC8vIGVkaXQgdGhlaXIgaXRlbXMgdGhyb3VnaCBhIGxpbmtlZCB2aWV3LiAgSW4gdGhpcyBjYXNlLCByZWFsIGlkcyBuZWVkIHRvXG4gICAgICAvLyBiZSB1c2VkLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgLy8gQ2hlY2sgdGhlIGZvcm0gdGhhdCB0aGlzIGNvbXBvbmVudCBiZWxvbmdzIHRvIGFzIHdlbGwsIHNpbmNlIGl0IG1heSBiZVxuICAgICAgLy8gaW4gY3JlYXRpb24gbW9kZSwgd2hpY2ggbWFrZXMgaXQgdHJhbnNpZW50LlxuICAgICAgLy8gTk9URTogVGhpcyBkb2VzIG5vdCBsb29wIGVuZGxlc3NseSBiZWNhdXNlIERpdG9Gb3JtIHJlZGVmaW5lc1xuICAgICAgLy8gYGlzVHJhbnNpZW50KClgIHRvIG9ubHkgcmV0dXJuIGAhdGhpcy5wcm92aWRlc0RhdGFgLlxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybUNvbXBvbmVudFxuICAgICAgcmV0dXJuIChcbiAgICAgICAgIXRoaXMucHJvdmlkZXNEYXRhICYmXG4gICAgICAgICF0aGlzLmxpbmtzVG9WaWV3IHx8XG4gICAgICAgIGZvcm0gJiYgKFxuICAgICAgICAgIGZvcm0uaXNUcmFuc2llbnQgfHxcbiAgICAgICAgICBmb3JtLmlzQ3JlYXRpbmdcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICB0cmFuc2llbnROb3RlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJiAoXG4gICAgICAgICAgJzxiPk5vdGU8L2I+OiB0aGUgcGFyZW50IHN0aWxsIG5lZWRzIHRvIGJlIHNhdmVkICcgK1xuICAgICAgICAgICdpbiBvcmRlciB0byBwZXJzaXN0IHRoaXMgY2hhbmdlLidcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBzaG91bGRMb2FkKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgIXRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgIXRoaXMuaXNMb2FkaW5nXG4gICAgICApXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICAvLyBCYXNlIGRlZmluaXRpb24sIHdpbGwgYmUgb3ZlcnJpZGRlbiBieSBEaXRvRm9ybSBhbmQgU291cmNlTWl4aW5cbiAgICAgIHJldHVybiAhIXRoaXMubG9hZGVkRGF0YVxuICAgIH0sXG5cbiAgICB2ZXJicygpIHtcbiAgICAgIC8vIFRoZSBhY3R1YWwgY29kZSBpcyB0aGUgYGdldFZlcmJzKClgIG1ldGhvZCwgZm9yIGVhc2llciBvdmVycmlkaW5nIG9mXG4gICAgICAvLyB0aGlzIGNvbXB1dGVkIHByb3BlcnR5IGluIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIFJlc291cmNlTWl4aW4uXG4gICAgICByZXR1cm4gdGhpcy5nZXRWZXJicygpXG4gICAgfSxcblxuICAgIHBhZ2luYXRpb25SYW5nZSgpIHtcbiAgICAgIC8vIE9ubHkgYXBwbHkgcGFnaW5hdGlvbiB0byBsaXN0cy5cbiAgICAgIGNvbnN0IHsgcGFnaW5hdGU6IGFtb3VudCB9ID0gdGhpcy5zb3VyY2VTY2hlbWFcbiAgICAgIGlmICh0aGlzLmlzTGlzdFNvdXJjZSAmJiBhbW91bnQpIHtcbiAgICAgICAgY29uc3QgeyBwYWdlID0gMCB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgICBjb25zdCBzdGFydCA9IHBhZ2UgKiBhbW91bnRcbiAgICAgICAgcmV0dXJuIFtzdGFydCwgc3RhcnQgKyBhbW91bnQgLSAxXVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgcXVlcnlQYXJhbXMoKSB7XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMucGFnaW5hdGlvblJhbmdlXG4gICAgICBjb25zdCB7IHBhZ2UsIC4uLnF1ZXJ5IH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5xdWVyeSwgLy8gUXVlcnkgbWF5IG92ZXJyaWRlIHNjb3BlLlxuICAgICAgICAuLi4ocmFuZ2UgJiYge1xuICAgICAgICAgIC8vIFBhc3MgcGFnaW5hdGlvbiBhcyByYW5nZSwgc28gdGhhdCB3ZSBhdXRvbWF0aWNhbGx5IGdldCBPYmplY3Rpb24nc1xuICAgICAgICAgIC8vIHJlc3VsdHMgY291bnRpbmc6XG4gICAgICAgICAgcmFuZ2U6IHJhbmdlLmpvaW4oJywnKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIFdoZW4gY3JlYXRpbmcgbmVzdGVkIGRhdGEsIHdlIHN0aWxsIG5lZWQgdG8gY2FsbCBzZXR1cERhdGEoKVxuICAgIGlmICh0aGlzLnByb3ZpZGVzRGF0YSB8fCB0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0dXBEYXRhKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFJlc291cmNlKCkge1xuICAgICAgLy8gVGhpcyBpcyBkZWZpbmVkIGFzIGEgbWV0aG9kIHNvIHRoZSBjb21wdXRlZCBgcmVzb3VyY2VgIGdldHRlciBjYW5cbiAgICAgIC8vIGJlIG92ZXJyaWRkZW4gYW5kIGBzdXBlcmAgZnVuY3Rpb25hbGl0eSBjYW4gc3RpbGwgYmUgYWNjZXNzZWQuXG4gICAgICByZXR1cm4gZ2V0UmVzb3VyY2UodGhpcy5zb3VyY2VTY2hlbWE/LnJlc291cmNlLCB7XG4gICAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgcGFyZW50OiB0aGlzLnBhcmVudEZvcm1Db21wb25lbnQ/LnJlc291cmNlID8/IG51bGxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFZlcmJzKCkge1xuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLiR2ZXJicygpXG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnZlcmJzLFxuICAgICAgICAgICAgLy8gT3ZlcnJpZGUgZGVmYXVsdCB2ZXJicyB3aXRoIHRoZWlyIHRyYW5zaWVudCB2ZXJzaW9uczpcbiAgICAgICAgICAgIGNyZWF0ZTogJ2FkZCcsXG4gICAgICAgICAgICBjcmVhdGVkOiAnYWRkZWQnLFxuICAgICAgICAgICAgc2F2ZTogJ2FwcGx5JyxcbiAgICAgICAgICAgIHNhdmVkOiAnYXBwbGllZCcsXG4gICAgICAgICAgICBkZWxldGU6ICdyZW1vdmUnLFxuICAgICAgICAgICAgZGVsZXRlZDogJ3JlbW92ZWQnXG4gICAgICAgICAgfVxuICAgICAgICA6IHZlcmJzXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZGVkRGF0YSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgfSxcblxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIC8vIEFjdHVhbCBjb2RlIGlzIGluIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIGl0J3MgZWFzZXIgdG8gb3ZlcnJpZGVcbiAgICAgIC8vIGBzZXR1cERhdGEoKWAgYW5kIGFuZCBjYWxsIGBlbnN1cmVEYXRhKClgIGZyb20gdGhlIG92ZXJyaWRlcyxcbiAgICAgIC8vIHNlZSBEaXRvRm9ybSBhbmQgU291cmNlTWl4aW4uXG4gICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgIH0sXG5cbiAgICBlbnN1cmVEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkTG9hZCkge1xuICAgICAgICBpZiAodGhpcy5oYXNEYXRhKSB7XG4gICAgICAgICAgdGhpcy5yZWxvYWREYXRhKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVsb2FkRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgfSxcblxuICAgIGxvYWREYXRhKGNsZWFyKSB7XG4gICAgICBpZiAoIXRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgaWYgKGNsZWFyKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckRhdGEoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVxdWVzdERhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVEYXRhKHNjaGVtYSwgdHlwZSkge1xuICAgICAgcmV0dXJuIHNldERlZmF1bHRWYWx1ZXMoc2NoZW1hLCB0eXBlID8geyB0eXBlIH0gOiB7fSwgdGhpcylcbiAgICB9LFxuXG4gICAgcmVxdWVzdERhdGEoKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMucXVlcnlQYXJhbXNcbiAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2dldCcsIHF1ZXJ5IH0sIChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2VcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZGF0YT8udHlwZSA9PT0gJ0ZpbHRlclZhbGlkYXRpb24nICYmXG4gICAgICAgICAgICAgIHRoaXMub25GaWx0ZXJFcnJvcnM/LihkYXRhLmVycm9ycylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE86IENhbiB3ZSByZWFsbHkgc3dhbGxvdyB0aGVzZSBlcnJvcnM/XG4gICAgICAgICAgICAgIC8vIElzIGNhbGxpbmcgYGVuc3VyZVVzZXIoKWAgaW4gYG9uQmVmb3JlUmVxdWVzdCgpYCBlbm91Z2g/XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0RGF0YShyZXNwb25zZS5kYXRhKVxuICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdsb2FkJylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDBcbiAgICB9LFxuXG4gICAgaXNVbmF1dGhvcml6ZWRFcnJvcihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMVxuICAgIH0sXG5cbiAgICBhc3luYyBoYW5kbGVSZXF1ZXN0KFxuICAgICAge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGRhdGFcbiAgICAgIH0sXG4gICAgICBjYWxsYmFja1xuICAgICkge1xuICAgICAgY29uc3QgbG9hZGluZ09wdGlvbnMgPSB7XG4gICAgICAgIHVwZGF0ZVJvb3Q6IHRydWUsIC8vIERpc3BsYXkgc3Bpbm5lciBpbiBoZWFkZXIgd2hlbiBsb2FkaW5nIGluIHJlc291cmNlc1xuICAgICAgICB1cGRhdGVWaWV3OiB0aGlzLmlzSW5WaWV3IC8vIE5vdGlmeSB2aWV3IG9mIGxvYWRpbmcgZm9yIHZpZXcgY29tcG9uZW50c1xuICAgICAgfVxuICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXI/LmFib3J0KClcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gY29udHJvbGxlclxuICAgICAgY29uc3QgeyBzaWduYWwgfSA9IGNvbnRyb2xsZXJcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7IG1ldGhvZCwgcmVzb3VyY2UsIHF1ZXJ5LCBkYXRhLCBzaWduYWwgfVxuICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICAgIC8vIFBhc3MgYm90aCByZXF1ZXN0IGFuZCByZXNwb25zZSB0byB0aGUgY2FsbGJhY2ssIHNvIHRoZXkgY2FuIGJlXG4gICAgICAgIC8vIGV4cG9zZWQgdG8gZnVydGhlciBjYWxsYmFja3MgdGhyb3VnaCBEaXRvQ29udGV4dC5cbiAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBJZiBjYWxsYmFjayByZXR1cm5zIHRydWUsIGVycm9ycyB3ZXJlIGFscmVhZHkgaGFuZGxlZC5cbiAgICAgICAgY29uc3QgeyByZXNwb25zZSB9ID0gZXJyb3JcbiAgICAgICAgaWYgKCFjYWxsYmFjayhlcnJvciwgcmVzcG9uc2UpKSB7XG4gICAgICAgICAgY29uc3QgZGF0YSA9IHJlc3BvbnNlPy5kYXRhXG4gICAgICAgICAgY29uc3QgdGl0bGUgPSBpc1N0cmluZyhkYXRhPy50eXBlKVxuICAgICAgICAgICAgPyBsYWJlbGl6ZShkYXRhLnR5cGUpXG4gICAgICAgICAgICA6ICdFcnJvcidcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gZGF0YT8ubWVzc2FnZSA/PyBlcnJvclxuICAgICAgICAgIHRoaXMubm90aWZ5KHsgdHlwZTogJ2Vycm9yJywgdGl0bGUsIHRleHQgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYWJvcnRDb250cm9sbGVyID09PSBjb250cm9sbGVyKSB7XG4gICAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gbnVsbFxuICAgICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZCkge1xuICAgICAgLy8gQ29udmVudGlvbjogb25seSBwb3N0LCBwdXQgYW5kIHBhdGNoIHJlcXVlc3RzIHBhc3MgdGhlIGRhdGEgYXMgcGF5bG9hZC5cbiAgICAgIHJldHVybiAoXG4gICAgICAgIFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmNsdWRlcyhtZXRob2QpICYmIChcbiAgICAgICAgICAvLyBUT0RPOiBVc2UgYGhhbmRsZURhdGFTY2hlbWEoKWAgYXN5bmNocm9ub3VzbHkgaGVyZSBpbnN0ZWFkLCB0b1xuICAgICAgICAgIC8vIG9mZmVyIHRoZSBzYW1lIGFtb3VudCBvZiBwb3NzaWJpbGl0aWVzIGZvciBkYXRhIGxvYWRpbmcuXG4gICAgICAgICAgYnV0dG9uLmdldFNjaGVtYVZhbHVlKFsncmVzb3VyY2UnLCAnZGF0YSddKSB8fFxuICAgICAgICAgIGJ1dHRvbi5wcm9jZXNzZWRJdGVtXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KGJ1dHRvbikge1xuICAgICAgY29uc3QgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShidXR0b24uc2NoZW1hLnJlc291cmNlLCB7XG4gICAgICAgIHBhcmVudDogdGhpcy5yZXNvdXJjZVxuICAgICAgfSlcbiAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCB7IG1ldGhvZCB9ID0gcmVzb3VyY2VcbiAgICAgICAgY29uc3QgZGF0YSA9IHRoaXMuZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpXG4gICAgICAgIHJldHVybiB0aGlzLnN1Ym1pdFJlc291cmNlKGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSlcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgIHNldERhdGEgPSBmYWxzZSxcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzID0gKCkgPT5cbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgU3VjY2Vzc2Z1bCcsXG4gICAgICAgICAgdGV4dDogJ1JlcXVlc3Qgd2FzIHN1Y2Nlc3NmdWxseSBzZW50LidcbiAgICAgICAgfSksXG4gICAgICBub3RpZnlFcnJvciA9IGVycm9yID0+XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgYFVuYWJsZSB0byBzZW5kIHJlcXVlc3Qke2Vycm9yID8gJzonIDogJyd9YCxcbiAgICAgICAgICAgIGVycm9yPy5tZXNzYWdlIHx8IGVycm9yXG4gICAgICAgICAgXVxuICAgICAgICB9KVxuICAgIH0gPSB7fSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoXG4gICAgICAgICAgeyBtZXRob2QsIHJlc291cmNlLCBkYXRhIH0sXG4gICAgICAgICAgYXN5bmMgKGVyciwgcmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAvLyBTZWUgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgRGl0byB2YWxpZGF0aW9uIGVycm9yOlxuICAgICAgICAgICAgICBjb25zdCBlcnJvcnMgPSB0aGlzLmlzVmFsaWRhdGlvbkVycm9yKHJlc3BvbnNlKSAmJiBkYXRhLmVycm9yc1xuICAgICAgICAgICAgICBpZiAoZXJyb3JzKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIHRydWUpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBpc09iamVjdChkYXRhKSA/IGRhdGEgOiBlcnJcbiAgICAgICAgICAgICAgICBvbkVycm9yPy4oZXJyb3IpXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnZXJyb3InLCB7XG4gICAgICAgICAgICAgICAgICBub3RpZnk6IG5vdGlmeUVycm9yLFxuICAgICAgICAgICAgICAgICAgZXJyb3JcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJlc29sdmUoZmFsc2UpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHVuZGVybHlpbmcgZGF0YSBiZWZvcmUgY2FsbGluZyBgbm90aWZ5KClgIG9yXG4gICAgICAgICAgICAgIC8vIGB0aGlzLml0ZW1MYWJlbGAsIHNvIGlkIGlzIHNldCBhZnRlciBjcmVhdGluZyBuZXcgaXRlbXMuXG4gICAgICAgICAgICAgIGlmIChzZXREYXRhICYmIGRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldERhdGEoZGF0YSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvblN1Y2Nlc3M/LigpXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ3N1Y2Nlc3MnLCB7XG4gICAgICAgICAgICAgICAgbm90aWZ5OiBub3RpZnlTdWNjZXNzXG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgIHJlc29sdmUodHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIGVtaXRCdXR0b25FdmVudChidXR0b24sIGV2ZW50LCB7IG5vdGlmeSwgZXJyb3IgfSkge1xuICAgICAgLy8gQ3JlYXRlIHRoZSBjb250ZXh0IG91dHNpZGUgb2YgYGVtaXRFdmVudCgpYCwgc28gdGhhdFxuICAgICAgLy8gYGNvbnRleHQud2FzTm90aWZpZWRgIGNhbiBiZSBjaGVja2VkIGFmdGVyLlxuICAgICAgY29uc3QgY29udGV4dCA9IG5ldyBEaXRvQ29udGV4dChidXR0b24sIHtcbiAgICAgICAgbmVzdGVkOiBmYWxzZSxcbiAgICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgICAgICBpdGVtTGFiZWw6IHRoaXMuaXRlbUxhYmVsLFxuICAgICAgICBlcnJvclxuICAgICAgfSlcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGJ1dHRvbi5lbWl0RXZlbnQoZXZlbnQsIHsgY29udGV4dCB9KVxuICAgICAgaWYgKFxuICAgICAgICBub3RpZnkgJiZcbiAgICAgICAgLy8gUHJldmVudCBkZWZhdWx0IGlmIGFueXRoaW5nIHdhcyByZXR1cm5lZCBmcm9tIHRoZSBldmVudCBoYW5kbGVyLlxuICAgICAgICByZXMgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAvLyBEbyBub3QgZGlzcGxheSBkZWZhdWx0IG5vdGlmaWNhdGlvbiBpZiB0aGUgZXZlbnQgaGFuZGxlciBhbHJlYWR5XG4gICAgICAgIC8vIGRpc3BsYXllZCBhIG5vdGlmaWNhdGlvbi5cbiAgICAgICAgIWNvbnRleHQud2FzTm90aWZpZWRcbiAgICAgICkge1xuICAgICAgICBub3RpZnkoZXJyb3IpXG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzXG4gICAgfVxuICB9XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gcmVzb2x2ZVBhdGgocGF0aCkge1xuICAvLyBGb3IgcGF0aHMgc3RhcmluZyB3aXRoIGAvYCwgd2UgY2FuIHVzZSB0aGUgbmF0aXZlIGBVUkwoKWAgY2xhc3MgdG8gcmVzb2x2ZVxuICAvLyB0aGUgcGF0aCwgd2hpY2ggd2lsbCBhbHNvIGhhbmRsZSBgLi5gIGFuZCBgLmAgc2VnbWVudHM6XG4gIHJldHVybiBuZXcgVVJMKGBmaWxlOiR7cGF0aH1gKS5wYXRobmFtZVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWZvcm0uZGl0by1zY3JvbGwtcGFyZW50KFxuICA6Y2xhc3M9XCJ7ICdkaXRvLWZvcm0tbmVzdGVkJzogaXNOZXN0ZWRSb3V0ZSB9XCJcbiAgOmRhdGEtcmVzb3VyY2U9XCJzb3VyY2VTY2hlbWEucGF0aFwiXG4pXG4gIC8vLSBOT1RFOiBOZXN0ZWQgZm9ybSBjb21wb25lbnRzIGFyZSBrZXB0IGFsaXZlIGJ5IHVzaW5nIGB2LXNob3dgIGluc3RlYWQgb2ZcbiAgLy8tIGB2LWlmYCBoZXJlLCBzbyBldmVudCBoYW5kbGluZyBhbmQgb3RoZXIgdGhpbmdzIHN0aWxsIHdvcmsgd2l0aCBuZXN0ZWRcbiAgLy8tIGVkaXRpbmcuIE9ubHkgcmVuZGVyIGEgcm91dGVyLXZpZXcgaGVyZSBpZiB0aGlzIGlzbid0IHRoZSBsYXN0IGRhdGEgcm91dGVcbiAgLy8tIGFuZCBub3QgYSBuZXN0ZWQgZm9ybSByb3V0ZSwgd2hpY2ggd2lsbCBhcHBlYXIgZWxzZXdoZXJlIGluIGl0cyBvd24gdmlldy5cbiAgUm91dGVyVmlldyhcbiAgICB2LWlmPVwiIShpc0xhc3RVbm5lc3RlZFJvdXRlIHx8IGlzTmVzdGVkUm91dGUpXCJcbiAgICB2LXNob3c9XCIhaXNBY3RpdmVcIlxuICApXG4gIC8vLSBVc2UgYSA8ZGl2PiBmb3IgaW5saW5lZCBmb3JtcywgYXMgd2Ugc2hvdWxkbid0IG5lc3QgYWN0dWFsIDxmb3JtPiB0YWdzLlxuICBjb21wb25lbnQoXG4gICAgdi1zaG93PVwiaXNBY3RpdmVcIlxuICAgIDppcz1cImlzTmVzdGVkUm91dGUgPyAnZGl2JyA6ICdmb3JtJ1wiXG4gICAgOmNsYXNzPVwieyAnZGl0by1zY3JvbGwtcGFyZW50JzogaXNSb290Rm9ybSB9XCJcbiAgICBAc3VibWl0LnByZXZlbnRcbiAgKVxuICAgIC8vLSBQcmV2ZW50IGltcGxpY2l0IHN1Ym1pc3Npb24gb2YgdGhlIGZvcm0sIGZvciBleGFtcGxlIHdoZW4gdHlwaW5nIGVudGVyXG4gICAgLy8tIGluIGFuIGlucHV0IGZpZWxkLlxuICAgIC8vLSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTE1MDc4MDZcbiAgICBidXR0b24oXG4gICAgICB2LXNob3c9XCJmYWxzZVwiXG4gICAgICB0eXBlPVwic3VibWl0XCJcbiAgICAgIGRpc2FibGVkXG4gICAgKVxuICAgIERpdG9TY2hlbWEoXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOnBhZGRpbmc9XCJpc05lc3RlZFJvdXRlID8gJ25lc3RlZCcgOiAncm9vdCdcIlxuICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgIDpzY3JvbGxhYmxlPVwiaXNSb290Rm9ybVwiXG4gICAgICBnZW5lcmF0ZUxhYmVsc1xuICAgIClcbiAgICAgIHRlbXBsYXRlKCNidXR0b25zKVxuICAgICAgICBEaXRvQnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQuZGl0by1idXR0b25zLWxhcmdlLmRpdG8tYnV0dG9ucy1tYWluKFxuICAgICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYnV0dG9ucy1zdGlja3knOiBpc1Jvb3RGb3JtIH1cIlxuICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiaXNMb2FkaW5nXCJcbiAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGNsb25lLCBjYXBpdGFsaXplLCBwYXJzZURhdGFQYXRoLCBhc3NpZ25EZWVwbHkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBSb3V0ZU1peGluIGZyb20gJy4uL21peGlucy9Sb3V0ZU1peGluLmpzJ1xuaW1wb3J0IFJlc291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1Jlc291cmNlTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSwgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMsIGlzT2JqZWN0U291cmNlIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgcmVzb2x2ZVBhdGggfSBmcm9tICcuLi91dGlscy9wYXRoLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Gb3JtJywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluLCBSZXNvdXJjZU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjcmVhdGVkRGF0YTogbnVsbCxcbiAgICAgIGNsb25lZERhdGE6IHVuZGVmaW5lZCxcbiAgICAgIHNvdXJjZUtleTogbnVsbCxcbiAgICAgIGlzRm9ybTogdHJ1ZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHZlcmJzKCkge1xuICAgICAgLy8gQWRkIHN1Ym1pdCAvIHN1Ym1pdHRlZCB0byB0aGUgdmVyYnMgcmV0dXJuZWQgYnkgUmVzb3VyY2VNaXhpblxuICAgICAgLy8gTk9URTogVGhlc2UgZ2V0IHBhc3NlZCBvbiB0byBjaGlsZHJlbiB0aHJvdWdoOlxuICAgICAgLy8gYHByb3ZpZGUoKSAuLi4geyAkdmVyYnM6ICgpID0+IHRoaXMudmVyYnMgfWAgaW4gUmVzb3VyY2VNaXhpblxuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLmdldFZlcmJzKClcbiAgICAgIGNvbnN0IHsgaXNDcmVhdGluZywgcHJvdmlkZXNEYXRhIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi52ZXJicyxcbiAgICAgICAgc3VibWl0OiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlIDogdmVyYnMuc2F2ZSxcbiAgICAgICAgc3VibWl0dGVkOiBpc0NyZWF0aW5nID8gdmVyYnMuY3JlYXRlZCA6IHZlcmJzLnNhdmVkLFxuICAgICAgICBjYW5jZWw6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbCA6IHZlcmJzLmNsb3NlLFxuICAgICAgICBjYW5jZWxsZWQ6IHByb3ZpZGVzRGF0YSA/IHZlcmJzLmNhbmNlbGxlZCA6IHZlcmJzLmNsb3NlZFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzY2hlbWEoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmdldEl0ZW1Gb3JtU2NoZW1hKFxuICAgICAgICAgIHRoaXMuc291cmNlU2NoZW1hLFxuICAgICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIGRhdGEgeWV0LCBwcm92aWRlIGFuIGVtcHR5IG9iamVjdCB3aXRoIGp1c3QgdGhlXG4gICAgICAgICAgLy8gcmlnaHQgdHlwZSBzZXQsIHNvIHRoZSBmb3JtIGNhbiBhbHdheXMgYmUgZGV0ZXJtaW5lZC5cbiAgICAgICAgICB0aGlzLmRhdGEgfHwgeyB0eXBlOiB0aGlzLnR5cGUgfSxcbiAgICAgICAgICB0aGlzLmNvbnRleHRcbiAgICAgICAgKSB8fCB7fVxuICAgICAgKSAvLyBBbHdheXMgcmV0dXJuIGEgc2NoZW1hIG9iamVjdCBzbyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciBpdC5cbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBnZXRCdXR0b25TY2hlbWFzKFxuICAgICAgICBhc3NpZ25EZWVwbHkoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2FuY2VsOiB7XG4gICAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKCkgPT4gdGhpcy5jYW5jZWwoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuXG4gICAgICAgICAgICBzdWJtaXQ6ICF0aGlzLmlzTXV0YXRpbmcgJiYge1xuICAgICAgICAgICAgICB0eXBlOiAnc3VibWl0JyxcbiAgICAgICAgICAgICAgLy8gU3VibWl0IGJ1dHRvbnMgY2xvc2UgdGhlIGZvcm0gYnkgZGVmYXVsdDpcbiAgICAgICAgICAgICAgY2xvc2VGb3JtOiB0cnVlLFxuICAgICAgICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICAgICAgICBjbGljazogKHsgY29tcG9uZW50OiBidXR0b24gfSkgPT4gYnV0dG9uLnN1Ym1pdCgpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LFxuICAgICAgICAgIHRoaXMuc2NoZW1hLmJ1dHRvbnNcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1Jvb3RGb3JtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVBhdGggPT09ICcnICYmICF0aGlzLmlzTmVzdGVkUm91dGVcbiAgICB9LFxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0xhc3RSb3V0ZSB8fCB0aGlzLmlzTGFzdFVubmVzdGVkUm91dGVcbiAgICB9LFxuXG4gICAgaXNUcmFuc2llbnQoKSB7XG4gICAgICByZXR1cm4gIXRoaXMucHJvdmlkZXNEYXRhXG4gICAgfSxcblxuICAgIGlzQ3JlYXRpbmcoKSB7XG4gICAgICAvLyB0aGlzLnBhcmFtIGlzIGluaGVyaXRlZCBmcm9tIFJvdXRlTWl4aW5cbiAgICAgIHJldHVybiB0aGlzLnBhcmFtID09PSAnY3JlYXRlJ1xuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzTXV0YXRpbmcgJiYgISF0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LmlzRGlydHlcbiAgICB9LFxuXG4gICAgaXNNdXRhdGluZygpIHtcbiAgICAgIC8vIFdoZW4gYHNvdXJjZVNjaGVtYS5tdXRhdGVgIGlzIHRydWUsIHRoZSBmb3JtIGVkaXRzIHRoZSBpbmhlcml0ZWQgZGF0YVxuICAgICAgLy8gZGlyZWN0bHkgaW5zdGVhZCBvZiBtYWtpbmcgYSBjb3B5IGZvciBwZXJzaXN0ZW5jZSB1cG9uIHN1Ym1pc3Npb24uXG4gICAgICAvLyBTZWUgYGluaGVyaXRlZERhdGEoKWAgY29tcHV0ZWQgcHJvcGVydHkgZm9yIG1vcmUgZGV0YWlscy5cbiAgICAgIHJldHVybiAhIXRoaXMuc291cmNlU2NoZW1hLm11dGF0ZVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYigpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQ/LnNlbGVjdGVkVGFiIHx8IG51bGxcbiAgICB9LFxuXG4gICAgdHlwZSgpIHtcbiAgICAgIC8vIFRoZSB0eXBlIG9mIGZvcm0gdG8gY3JlYXRlLCBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgZm9ybXMgdG8gY2hvb3NlIGZyb20uXG4gICAgICByZXR1cm4gdGhpcy4kcm91dGUucXVlcnkudHlwZVxuICAgIH0sXG5cbiAgICBpdGVtSWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHRoaXMucGFyYW0gPz8gbnVsbFxuICAgIH0sXG5cbiAgICBtZXRob2QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc0NyZWF0aW5nID8gJ3Bvc3QnIDogJ3BhdGNoJ1xuICAgIH0sXG5cbiAgICByZXNvdXJjZSgpIHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gdGhpcy5nZXRSZXNvdXJjZSgpXG4gICAgICByZXR1cm4gZ2V0TWVtYmVyUmVzb3VyY2UodGhpcy5pdGVtSWQsIHJlc291cmNlKSB8fCByZXNvdXJjZVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuIGNhcGl0YWxpemUodGhpcy5pc0NyZWF0aW5nID8gdGhpcy52ZXJicy5jcmVhdGUgOiB0aGlzLnZlcmJzLmVkaXQpXG4gICAgfSxcblxuICAgIGRhdGEoKSB7XG4gICAgICAvLyBSZXR1cm4gZGlmZmVyZW50IGRhdGEgXCJjb250YWluZXJzXCIgYmFzZWQgb24gZGlmZmVyZW50IHNjZW5hcmlvczpcbiAgICAgIC8vIDEuIGNyZWF0ZWREYXRhLCBpZiB3ZSdyZSBpbiBhIGZvcm0gZm9yIGEgbmV3bHkgY3JlYXRlZCBvYmplY3QuXG4gICAgICAvLyAyLiBsb2FkZWREYXRhLCBpZiB0aGUgZm9ybSBpdHNlbGYgaXMgdGhlIHJvb3Qgb2YgdGhlIGRhdGEgKGUuZy4gd2hlblxuICAgICAgLy8gICAgZGlyZWN0bHkgbG9hZGluZyBhbiBlZGl0aW5nIHJvb3QpLlxuICAgICAgLy8gMy4gVGhlIGRhdGEgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCwgd2hpY2ggaXRzZWxmIG1heSBiZSBlaXRoZXIgYVxuICAgICAgLy8gICAgdmlldyB0aGF0IGxvYWRlZCB0aGUgZGF0YSwgb3IgYSBmb3JtIHRoYXQgZWl0aGVyIGxvYWRlZCB0aGUgZGF0YSwgb3JcbiAgICAgIC8vICAgIGFsc28gaW5oZXJpdGVkIGl0IGZyb20gaXRzIHBhcmVudC4gTm90ZSB0aGF0IHdlIHVzZSBhIGNsb25lIG9mIGl0LFxuICAgICAgLy8gICAgc28sIGRhdGEgY2hhbmdlcyBhcmVuJ3QgYXBwbGllZCB1bnRpbCBzZXRTb3VyY2VEYXRhKCkgaXMgY2FsbGVkLlxuICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlZERhdGEgfHwgdGhpcy5sb2FkZWREYXRhIHx8IHRoaXMuaW5oZXJpdGVkRGF0YSB8fCBudWxsXG4gICAgfSxcblxuICAgIGRhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YVBhdGhGcm9tKHRoaXMuZGF0YUNvbXBvbmVudClcbiAgICB9LFxuXG4gICAgc291cmNlRGF0YSgpIHtcbiAgICAgIC8vIFBvc3NpYmxlIHBhcmVudHMgYXJlIERpdG9Gb3JtIGZvciBmb3Jtcywgb3IgRGl0b1ZpZXcgZm9yIHJvb3QgbGlzdHMuXG4gICAgICAvLyBCb3RoIGhhdmUgYSBkYXRhIHByb3BlcnR5IHdoaWNoIGFic3RyYWN0cyBhd2F5IGxvYWRpbmcgYW5kIGluaGVyaXRpbmdcbiAgICAgIC8vIG9mIGRhdGEuXG4gICAgICAvLyBGb3JtcyB0aGF0IGFyZSBhYm91dCB0byBiZSBkZXN0cm95ZWQgZHVlIHRvIG5hdmlnYXRpb24gbG9vc2UgdGhlaXJcbiAgICAgIC8vIHJvdXRlLXJlY29yZCwgYnV0IG1pZ2h0IHN0aWxsIHRyaWdnZXIgdGhpcyBnZXR0ZXIuIEZpbHRlciB0aG9zZSBvdXQuXG4gICAgICBsZXQgZGF0YSA9IHRoaXMucm91dGVSZWNvcmQgPyB0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50LmRhdGEgOiBudWxsXG4gICAgICBpZiAoZGF0YSkge1xuICAgICAgICAvLyBIYW5kbGUgbmVzdGVkIGRhdGEgYnkgc3BsaXR0aW5nIHRoZSBkYXRhUGF0aCwgaXRlcmF0ZSB0aHJvdWdoIHRoZVxuICAgICAgICAvLyBhY3R1YWwgZGF0YSBhbmQgbG9vayBuZXN0IGNoaWxkLWRhdGEgdXAuXG4gICAgICAgIGNvbnN0IGRhdGFQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoXG4gICAgICAgICAgdGhpcy5nZXREYXRhUGF0aEZyb20odGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudClcbiAgICAgICAgKVxuICAgICAgICAvLyBDb21wYXJlIGRhdGFQYXJ0cyBhZ2FpbnN0IG1hdGNoZWQgcm91dGVQYXRoIHBhcnRzLCB0byBpZGVudGlmeSB0aG9zZVxuICAgICAgICAvLyBwYXJ0cyB0aGF0IG5lZWQgdG8gYmUgdHJlYXRlZCBsaWtlIGlkcyBhbmQgbWFwcGVkIHRvIGluZGljZXMgaW4gZGF0YS5cbiAgICAgICAgY29uc3QgcGF0aFBhcnRzID0gdGhpcy5yb3V0ZVJlY29yZC5wYXRoLnNwbGl0KCcvJylcbiAgICAgICAgY29uc3Qgcm91dGVQYXJ0cyA9IHBhdGhQYXJ0cy5zbGljZShwYXRoUGFydHMubGVuZ3RoIC0gZGF0YVBhcnRzLmxlbmd0aClcbiAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgIHRoaXMuc291cmNlS2V5ID0gbnVsbFxuICAgICAgICBjb25zdCBsYXN0RGF0YVBhcnQgPSBkYXRhUGFydHNbZGF0YVBhcnRzLmxlbmd0aCAtIDFdXG4gICAgICAgIGlmIChpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSkgJiYgbGFzdERhdGFQYXJ0ID09PSAnY3JlYXRlJykge1xuICAgICAgICAgIC8vIElmIHdlIGhhdmUgYW4gb2JqZWN0IHNvdXJjZSBhbmQgYXJlIGNyZWF0aW5nLCB0aGUgZGF0YVBhdGggbmVlZHMgdG9cbiAgICAgICAgICAvLyBiZSBzaG9ydGVuZWQgYnkgdGhlICdjcmVhdGUnIGVudHJ5LiBUaGlzIGlzbid0IG5lZWRlZCBmb3IgbGlzdFxuICAgICAgICAgIC8vIHNvdXJjZXMsIGFzIHRoZXJlIHRoZSBwYXJhbWV0ZXIgaXMgYWN0dWFsbHkgbWFwcGVkIHRvIHRoZSBpdGVtIGlkLlxuICAgICAgICAgIGRhdGFQYXJ0cy5sZW5ndGgtLVxuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsID0gZGF0YVBhcnRzLmxlbmd0aDsgaSA8IGwgJiYgZGF0YTsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0YVBhcnQgPSBkYXRhUGFydHNbaV1cbiAgICAgICAgICAvLyBJZiB0aGlzIGlzIGFuIDppZCBwYXJ0LCBmaW5kIHRoZSBpbmRleCBvZiB0aGUgaXRlbSB3aXRoIGdpdmVuIGlkLlxuICAgICAgICAgIGNvbnN0IGtleSA9IC9eOmlkLy50ZXN0KHJvdXRlUGFydHNbaV0pXG4gICAgICAgICAgICA/IGRhdGFQYXJ0ID09PSAnY3JlYXRlJ1xuICAgICAgICAgICAgICA/IG51bGwgLy8gVGhlcmUncyBubyBpbmRleCBmb3IgZW50cmllcyBhYm91dCB0byBiZSBjcmVhdGVkXG4gICAgICAgICAgICAgIDogdGhpcy5maW5kSXRlbUlkSW5kZXgodGhpcy5zb3VyY2VTY2hlbWEsIGRhdGEsIGRhdGFQYXJ0KVxuICAgICAgICAgICAgOiBkYXRhUGFydFxuICAgICAgICAgIC8vIFNraXAgdGhlIGZpbmFsIGxvb2t1cCBidXQgcmVtZW1iZXIgYHNvdXJjZUtleWAsIGFzIHdlIHdhbnQgdGhlXG4gICAgICAgICAgLy8gcGFyZW50IGRhdGEgc28gd2UgY2FuIHJlcGxhY2UgdGhlIGVudHJ5IGF0IGBzb3VyY2VLZXlgIG9uIGl0LlxuICAgICAgICAgIGlmIChpID09PSBsIC0gMSkge1xuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB0aGlzLnNvdXJjZUtleSA9IGtleVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gZGF0YVtrZXldXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBpbmhlcml0ZWREYXRhKCkge1xuICAgICAgLy8gRGF0YSBpbmhlcml0ZWQgZnJvbSBwYXJlbnQsIGFuZCBjbG9uZWQgdG8gcHJvdGVjdCBhZ2FpbnN0IHJlYWN0aXZlXG4gICAgICAvLyBjaGFuZ2VzIHVudGlsIGNoYW5nZXMgYXJlIGFwcGxpZWQgdGhyb3VnaCBzZXRTb3VyY2VEYXRhKCksIHVubGVzc1xuICAgICAgLy8gYHNvdXJjZVNjaGVtYS5tdXRhdGVgIGlzIHRydWUsIGluIHdoaWNoIGNhc2UgZGF0YSBpcyBtdXRhdGVkIGRpcmVjdGx5LlxuICAgICAgaWYgKFxuICAgICAgICB0aGlzLmlzVHJhbnNpZW50ICYmXG4gICAgICAgIHRoaXMuY2xvbmVkRGF0YSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgIHRoaXMuc291cmNlRGF0YSAmJlxuICAgICAgICB0aGlzLnNvdXJjZUtleSAhPT0gbnVsbFxuICAgICAgKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy5zb3VyY2VEYXRhW3RoaXMuc291cmNlS2V5XVxuICAgICAgICBpZiAoIXRoaXMuaXNNdXRhdGluZykge1xuICAgICAgICAgIC8vIFVzZSBhIHRyaWNrIHRvIHN0b3JlIGNsb25lZCBpbmhlcml0ZWQgZGF0YSBpbiBjbG9uZWREYXRhLCB0byBtYWtlXG4gICAgICAgICAgLy8gaXQgcmVhY3RpdmUgYW5kIHByZXZlbnQgaXQgZnJvbSBiZWluZyBjbG9uZWQgbXVsdGlwbGUgdGltZXMuXG4gICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICB0aGlzLmNsb25lZERhdGEgPSBkYXRhID0gY2xvbmUoZGF0YSlcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgZGF0YSA9PT0gbnVsbCAmJlxuICAgICAgICAgICF0aGlzLmlzQ3JlYXRpbmcgJiZcbiAgICAgICAgICBpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gSWYgZGF0YSBvZiBhbiBvYmplY3Qgc291cmNlIGlzIG51bGwsIHJlZGlyZWN0IHRvIGl0cyBjcmVhdGUgcm91dGUuXG4gICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucHVzaCh7IHBhdGg6IGAke3RoaXMucGF0aH0vY3JlYXRlYCB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYXRhXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5jbG9uZWREYXRhXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaXRlbUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc291cmNlU2NoZW1hLCB0aGlzLmRhdGEsIHsgZXh0ZW5kZWQ6IHRydWUgfSlcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGU6IHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8zMzkzI2lzc3VlY29tbWVudC0xMTU4NDcwMTQ5XG4gICAgICBmbHVzaDogJ3Bvc3QnLFxuICAgICAgaGFuZGxlcih0bywgZnJvbSkge1xuICAgICAgICAvLyBSZWxvYWQgZm9ybSBkYXRhIHdoZW4gbmF2aWdhdGluZyB0byBhIGRpZmZlcmVudCBlbnRpdHkgaW4gc2FtZSBmb3JtLlxuICAgICAgICBjb25zdCBwYXJhbSA9IHRoaXMubWV0YT8ucGFyYW1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHBhcmFtICYmXG4gICAgICAgICAgdGhpcy5wcm92aWRlc0RhdGEgJiZcbiAgICAgICAgICAvLyBUT0RPOiBTZWUgaWYgd2UgY2FuIHJlbW92ZSB0aGlzIGR1ZSB0byBgZmx1c2g6ICdwb3N0J2AuXG4gICAgICAgICAgZnJvbS5tYXRjaGVkWzBdLnBhdGggPT09IHRvLm1hdGNoZWRbMF0ucGF0aCAmJiAvLyBTdGF5aW5nIG9uIHNhbWUgZm9ybVxuICAgICAgICAgIGZyb20ucGFyYW1zW3BhcmFtXSAhPT0gJ2NyZWF0ZScgJiYgLy8gQnV0IGhhdmVuJ3QgYmVlbiBjcmVhdGluZ1xuICAgICAgICAgIHRvLnBhcmFtc1twYXJhbV0gIT09IGZyb20ucGFyYW1zW3BhcmFtXSAvLyBHb2luZyB0byBhIGRpZmZlcmVudCBlbnRpdHlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNvdXJjZURhdGE6ICdjbGVhckNsb25lZERhdGEnLFxuICAgIC8vIE5lZWRlZCBmb3IgdGhlICdjcmVhdGUnIHJlZGlyZWN0IGluIGBpbmhlcml0ZWREYXRhKClgIHRvIHdvcms6XG4gICAgY3JlYXRlOiAnc2V0dXBEYXRhJ1xuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBlbWl0U2NoZW1hRXZlbnQoZXZlbnQsIHBhcmFtcykge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudC5lbWl0RXZlbnQoZXZlbnQsIHBhcmFtcylcbiAgICB9LFxuXG4gICAgZ2V0RGF0YVBhdGhGcm9tKHJvdXRlKSB7XG4gICAgICAvLyBHZXQgdGhlIGRhdGEgcGF0aCBieSBkZW5vcm1hbGl6ZVBhdGggdGhlIHJlbGF0aXZlIHJvdXRlIHBhdGhcbiAgICAgIHJldHVybiB0aGlzLmFwaS5kZW5vcm1hbGl6ZVBhdGgoXG4gICAgICAgIHRoaXMucGF0aFxuICAgICAgICAgIC8vIERpdG9WaWV3cyBoYXZlIG5lc3RlZCByb3V0ZXMsIHNvIGRvbid0IHJlbW92ZSB0aGVpciBwYXRoLlxuICAgICAgICAgIC5zbGljZSgocm91dGUuaXNWaWV3ID8gMCA6IHJvdXRlLnBhdGgubGVuZ3RoKSArIDEpXG4gICAgICApXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldHVwRGF0YSgpXG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICB0aGlzLmNyZWF0ZWREYXRhIHx8PSB0aGlzLmNyZWF0ZURhdGEodGhpcy5zY2hlbWEsIHRoaXMudHlwZSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldFNvdXJjZURhdGEoZGF0YSkge1xuICAgICAgaWYgKHRoaXMuc291cmNlRGF0YSAmJiB0aGlzLnNvdXJjZUtleSAhPT0gbnVsbCkge1xuICAgICAgICBjb25zdCB7IG1haW5TY2hlbWFDb21wb25lbnQgfSA9IHRoaXNcbiAgICAgICAgdGhpcy5zb3VyY2VEYXRhW3RoaXMuc291cmNlS2V5XSA9IG1haW5TY2hlbWFDb21wb25lbnQuZmlsdGVyRGF0YShkYXRhKVxuICAgICAgICBtYWluU2NoZW1hQ29tcG9uZW50Lm9uQ2hhbmdlKClcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBhZGRTb3VyY2VEYXRhKGRhdGEpIHtcbiAgICAgIHJldHVybiBpc09iamVjdFNvdXJjZSh0aGlzLnNvdXJjZVNjaGVtYSlcbiAgICAgICAgPyB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgICAgOiAhIXRoaXMuc291cmNlRGF0YT8ucHVzaChkYXRhKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5jbGVhckRhdGEoKVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMuc2V0RGF0YShudWxsKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXREYXRhKClcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIC8vIHNldERhdGEoKSBpcyBjYWxsZWQgYWZ0ZXIgc3VibWl0IHdoZW4gZGF0YSBoYXMgY2hhbmdlZC5cbiAgICAgIGlmICh0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgIC8vIEZvciBjb21wb25lbnRzIHdpdGggdHJhbnNpZW50IGRhdGEsIG1vZGlmeSB0aGlzLnNvdXJjZURhdGEuXG4gICAgICAgIHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0YSA9IG51bGxcbiAgICAgICAgdGhpcy5sb2FkZWREYXRhID0gZGF0YVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjbGVhckNsb25lZERhdGEodG8sIGZyb20pIHtcbiAgICAgIC8vIE9ubHkgY2xlYXIgaWYgdGhlIHdhdGNoZWQgc291cmNlRGF0YSBpdHNlbGYgY2hhbmdlcyBpbiB0aGUgZm9ybS5cbiAgICAgIGlmICh0byAhPT0gZnJvbSkge1xuICAgICAgICB0aGlzLmNsb25lZERhdGEgPSB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgY2FuY2VsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2xvc2UoKVxuICAgIH0sXG5cbiAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQucGF0aClcbiAgICB9LFxuXG4gICAgZ2V0U3VibWl0VmVyYihwcmVzZW50ID0gdHJ1ZSkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IHByZXNlbnRcbiAgICAgICAgICA/ICdjcmVhdGUnXG4gICAgICAgICAgOiAnY3JlYXRlZCdcbiAgICAgICAgOiBwcmVzZW50XG4gICAgICAgICAgPyAnc3VibWl0J1xuICAgICAgICAgIDogJ3N1Ym1pdHRlZCdcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0KGJ1dHRvbiwgeyB2YWxpZGF0ZSA9IHRydWUsIGNsb3NlRm9ybSA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgaWYgKHZhbGlkYXRlICYmICF0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGdldFZlcmIgPSBwcmVzZW50ID0+IHRoaXMudmVyYnNbdGhpcy5nZXRTdWJtaXRWZXJiKHByZXNlbnQpXVxuXG4gICAgICAvLyBBbGxvdyBidXR0b25zIHRvIG92ZXJyaWRlIGJvdGggbWV0aG9kIGFuZCByZXNvdXJjZSBwYXRoIHRvIHN1Ym1pdCB0bzpcbiAgICAgIGNvbnN0IGJ1dHRvblJlc291cmNlID0gZ2V0UmVzb3VyY2UoYnV0dG9uLnNjaGVtYS5yZXNvdXJjZSwge1xuICAgICAgICBwYXJlbnQ6IHRoaXMucmVzb3VyY2VcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXNvdXJjZSA9IGJ1dHRvblJlc291cmNlIHx8IHRoaXMucmVzb3VyY2VcbiAgICAgIGNvbnN0IG1ldGhvZCA9IHJlc291cmNlPy5tZXRob2QgfHwgdGhpcy5tZXRob2RcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKVxuICAgICAgbGV0IHN1Y2Nlc3NcbiAgICAgIGlmICghYnV0dG9uUmVzb3VyY2UgJiYgdGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5zdWJtaXRUcmFuc2llbnQoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB0aGlzLmVtaXRTY2hlbWFFdmVudCh0aGlzLmdldFN1Ym1pdFZlcmIoKSksXG4gICAgICAgICAgb25FcnJvcjogZXJyb3IgPT5cbiAgICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdlcnJvcicsIHtcbiAgICAgICAgICAgICAgY29udGV4dDogeyBlcnJvciB9XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICBub3RpZnlTdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYihmYWxzZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2luZm8nLFxuICAgICAgICAgICAgICB0aXRsZTogdGhpcy5pc0NyZWF0aW5nXG4gICAgICAgICAgICAgICAgPyBgSXRlbSAke2NhcGl0YWxpemUodmVyYil9YFxuICAgICAgICAgICAgICAgIDogYENoYW5nZSAke2NhcGl0YWxpemUodmVyYil9YCxcbiAgICAgICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgICAgIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgICAgPyBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgICAgICAgOiBgQ2hhbmdlcyB0byAke3RoaXMuaXRlbUxhYmVsfSB3ZXJlICR7dmVyYn0uYCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdWNjZXNzID0gYXdhaXQgdGhpcy5zdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEsIHtcbiAgICAgICAgICBzZXREYXRhOiB0cnVlLFxuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+XG4gICAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgbm90aWZ5U3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIoZmFsc2UpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdzdWNjZXNzJyxcbiAgICAgICAgICAgICAgdGl0bGU6IGBTdWNjZXNzZnVsbHkgJHtjYXBpdGFsaXplKHZlcmIpfWAsXG4gICAgICAgICAgICAgIHRleHQ6IGAke3RoaXMuaXRlbUxhYmVsfSB3YXMgJHt2ZXJifS5gXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH0sXG4gICAgICAgICAgbm90aWZ5RXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKHRydWUpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdlcnJvcicsXG4gICAgICAgICAgICAgIHRpdGxlOiAnUmVxdWVzdCBFcnJvcicsXG4gICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICBgVW5hYmxlIHRvICR7dmVyYn0gJHt0aGlzLml0ZW1MYWJlbH0ke2Vycm9yID8gJzonIDogJyd9YCxcbiAgICAgICAgICAgICAgICBlcnJvcj8ubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgICAgaWYgKGNsb3NlRm9ybSB8fCBidXR0b24uY2xvc2VGb3JtKSB7XG4gICAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc0NyZWF0aW5nKSB7XG4gICAgICAgICAgLy8gUmVkaXJlY3QgdG8gdGhlIGZvcm0gZWRpdGluZyB0aGUgbmV3bHkgY3JlYXRlZCBpdGVtOlxuICAgICAgICAgIGNvbnN0IGlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIHRoaXMuZGF0YSlcbiAgICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7XG4gICAgICAgICAgICBwYXRoOiByZXNvbHZlUGF0aChgJHt0aGlzLnBhdGh9Ly4uLyR7aWR9YCksXG4gICAgICAgICAgICAvLyBQcmVzZXJ2ZSBoYXNoIGZvciB0YWJzOlxuICAgICAgICAgICAgaGFzaDogdGhpcy4kcm91dGUuaGFzaFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdWNjZXNzXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdFRyYW5zaWVudChidXR0b24sIF9yZXNvdXJjZSwgX21ldGhvZCwgZGF0YSwge1xuICAgICAgb25TdWNjZXNzLFxuICAgICAgb25FcnJvcixcbiAgICAgIG5vdGlmeVN1Y2Nlc3MsXG4gICAgICBub3RpZnlFcnJvclxuICAgIH0pIHtcbiAgICAgIC8vIEhhbmRsZSB0aGUgZGVmYXVsdCBcInN1Ym1pdHRpbmdcIiBvZiB0cmFuc2llbnQsIG5lc3RlZCBkYXRhOlxuICAgICAgY29uc3Qgc3VjY2VzcyA9IHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IHRoaXMuYWRkU291cmNlRGF0YShkYXRhKVxuICAgICAgICA6IHRoaXMuc2V0U291cmNlRGF0YShkYXRhKVxuICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgb25TdWNjZXNzPy4oKVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdzdWNjZXNzJywge1xuICAgICAgICAgIG5vdGlmeTogbm90aWZ5U3VjY2Vzc1xuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgZXJyb3IgPSAnQ291bGQgbm90IHN1Ym1pdCB0cmFuc2llbnQgaXRlbSdcbiAgICAgICAgb25FcnJvcj8uKGVycm9yKVxuICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdlcnJvcicsIHtcbiAgICAgICAgICBub3RpZnk6IG5vdGlmeUVycm9yLFxuICAgICAgICAgIGVycm9yXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2Vzc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0Zvcm0gZnJvbSAnLi9EaXRvRm9ybS52dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0Zvcm1OZXN0ZWQnLCB7XG4gIGV4dGVuZHM6IERpdG9Gb3JtXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tZm9ybS1uZXN0ZWQge1xuICAvLyBObyBzY3JvbGxpbmcgaW5zaWRlIG5lc3RlZCBmb3JtcywgYW5kIHByZXZlbnQgb3BlbiAubXVsdGlzZWxlY3QgZnJvbVxuICAvLyBiZWluZyBjcm9wcGVkLlxuICBvdmVyZmxvdzogdmlzaWJsZTtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZXJyb3JzKFxuICB2LWlmPVwiZXJyb3JzXCJcbilcbiAgdWxcbiAgICBsaShcbiAgICAgIHYtZm9yPVwiZXJyb3Igb2YgZXJyb3JzXCJcbiAgICApIHt7IGVycm9yIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHRpcHB5IGZyb20gJ3RpcHB5LmpzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IG1hcmtSYXcgfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0Vycm9ycycsIHtcbiAgcHJvcHM6IHtcbiAgICBlcnJvcnM6IHsgdHlwZTogQXJyYXksIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRpcDogbnVsbFxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIGVycm9ycygpIHtcbiAgICAgIHRoaXMuJG5leHRUaWNrKHRoaXMudXBkYXRlRXJyb3JzKVxuICAgIH1cbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy50aXA/LmRlc3Ryb3koKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICB1cGRhdGVFcnJvcnMoKSB7XG4gICAgICBsZXQgeyB0aXAgfSA9IHRoaXNcbiAgICAgIHRpcD8uaGlkZSgpXG4gICAgICBpZiAodGhpcy5lcnJvcnMpIHtcbiAgICAgICAgdGlwID0gdGhpcy50aXAgPz89IG1hcmtSYXcodGlwcHkodGhpcy4kZWwuY2xvc2VzdCgnLmRpdG8tY29udGFpbmVyJykpKVxuICAgICAgICB0aXAuc2V0UHJvcHMoe1xuICAgICAgICAgIGNvbnRlbnQ6IHRoaXMuZXJyb3JzLmpvaW4oJ1xcbicpLFxuICAgICAgICAgIHRoZW1lOiAnZXJyb3InLFxuICAgICAgICAgIHRyaWdnZXI6ICdtYW51YWwnLFxuICAgICAgICAgIGFwcGVuZFRvOiAncGFyZW50JyxcbiAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b20tc3RhcnQnLFxuICAgICAgICAgIGFuaW1hdGlvbjogJ3NoaWZ0LWF3YXktc3VidGxlJyxcbiAgICAgICAgICBwb3BwZXJPcHRpb25zOiB7XG4gICAgICAgICAgICBtb2RpZmllcnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIG5hbWU6ICdmbGlwJyxcbiAgICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbnRlcmFjdGl2ZTogdHJ1ZSxcbiAgICAgICAgICBoaWRlT25DbGljazogZmFsc2UsXG4gICAgICAgICAgb2Zmc2V0OiBbMywgM10sIC8vIDEvMiBmb3JtLXNwYWNpbmdcbiAgICAgICAgICB6SW5kZXg6ICcnXG4gICAgICAgIH0pXG4gICAgICAgIHRpcC5wb3BwZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKCkgPT4gdGlwLmhpZGUoKSlcbiAgICAgICAgdGlwLnNob3coKVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWVycm9ycyB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdmlzaWJpbGl0eTogaGlkZGVuO1xuXG4gIHVsIHtcbiAgICBjb2xvcjogJGNvbG9yLWVycm9yO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNjb3Blc1xuICBSb3V0ZXJMaW5rKFxuICAgIHYtZm9yPVwiKHNjb3BlLCBrZXkpIGluIHNjb3Blc1wiXG4gICAgOmtleT1cImtleVwiXG4gICAgdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICA6dG89XCJnZXRTY29wZUxpbmsoc2NvcGUpXCJcbiAgICBjdXN0b21cbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1zZWxlY3RlZCc6IHNjb3BlLm5hbWUgPT09IHF1ZXJ5LnNjb3BlIH1cIlxuICAgICAgOnRpdGxlPVwic2NvcGUuaGludCB8fCBnZXRMYWJlbChzY29wZSlcIlxuICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICkge3sgZ2V0TGFiZWwoc2NvcGUpIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2NvcGVzJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY29wZXM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFNjb3BlTGluayhzY29wZSkge1xuICAgICAgY29uc3QgcXVlcnkgPSB7IC4uLnRoaXMucXVlcnksIHNjb3BlOiBzY29wZS5uYW1lIH1cbiAgICAgIGlmIChxdWVyeS5wYWdlKSB7XG4gICAgICAgIHF1ZXJ5LnBhZ2UgPSAwXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRRdWVyeUxpbmsocXVlcnkpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2NvcGVzIHtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1idXR0b24ge1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuXG4gICAgYm9yZGVyLXJhZGl1czogMDtcbiAgICAvLyBBIGJpdCBtb3JlIHRoYW4gdGhlIHdpZHRoIG9mIGVsbGlwc2lzLCB0byBwcmV2ZW50IHJlcGxhY2luZyBzaG9ydCB3b3Jkc1xuICAgIC8vIHdpdGggZWxsaXBzaXMuXG4gICAgbWluLXdpZHRoOiAzZW07XG4gICAgZmxleDogMCAxIGF1dG87XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDFlbTtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDFlbTtcbiAgICAgIHBhZGRpbmctbGVmdDogMWVtO1xuICAgIH1cblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMWVtO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDFlbTtcbiAgICAgIHBhZGRpbmctcmlnaHQ6IDFlbTtcbiAgICB9XG5cbiAgICAmICsgLmRpdG8tYnV0dG9uIHtcbiAgICAgIG1hcmdpbi1sZWZ0OiAtMXB4O1xuICAgIH0gLy8gRG9uJ3QgY292ZXIgdGhlIGZvY3VzZWQgYm9yZGVyIG9mIGJ1dHRvbnM6XG4gICAgJjpmb2N1cyB7XG4gICAgICB6LWluZGV4OiAxO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5QYWdpbmF0aW9uKFxuICB2LW1vZGVsOnBhZ2U9XCJwYWdlXCJcbiAgOnBhZ2VTaXplPVwibGltaXRcIlxuICA6dG90YWw9XCJ0b3RhbFwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgUGFnaW5hdGlvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFnaW5hdGlvbicsIHtcbiAgY29tcG9uZW50czogeyBQYWdpbmF0aW9uIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGltaXQ6IHsgdHlwZTogTnVtYmVyLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRvdGFsOiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcGFnZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKCt0aGlzLnF1ZXJ5LnBhZ2UgfHwgMCkgKyAxXG4gICAgICB9LFxuXG4gICAgICBzZXQocGFnZSkge1xuICAgICAgICBpZiAodGhpcy5wYWdlICE9PSBwYWdlKSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goXG4gICAgICAgICAgICB0aGlzLmdldFF1ZXJ5TGluayh7XG4gICAgICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgICAgIHBhZ2U6IHBhZ2UgLSAxXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaXNEcmFnZ2luZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldERyYWdnYWJsZU9wdGlvbnMoZm9yY2VGYWxsYmFjayA9IGZhbHNlKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSAnZGl0by1kcmFnZ2FibGUnXG4gICAgICByZXR1cm4ge1xuICAgICAgICBhbmltYXRpb246IDE1MCxcbiAgICAgICAgaGFuZGxlOiAnLmRpdG8tYnV0dG9uLWRyYWcnLFxuICAgICAgICBkcmFnQ2xhc3M6IGAke3ByZWZpeH1fX2RyYWdgLFxuICAgICAgICBjaG9zZW5DbGFzczogYCR7cHJlZml4fV9fY2hvc2VuYCxcbiAgICAgICAgZ2hvc3RDbGFzczogYCR7cHJlZml4fV9fZ2hvc3RgLFxuICAgICAgICBmYWxsYmFja0NsYXNzOiBgJHtwcmVmaXh9X19mYWxsYmFja2AsXG4gICAgICAgIGZvcmNlRmFsbGJhY2ssXG4gICAgICAgIG9uU3RhcnQ6IHRoaXMub25TdGFydERyYWcsXG4gICAgICAgIG9uRW5kOiB0aGlzLm9uRW5kRHJhZ1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblN0YXJ0RHJhZygpIHtcbiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWVcbiAgICB9LFxuXG4gICAgb25FbmREcmFnKHsgb2xkSW5kZXgsIG5ld0luZGV4IH0pIHtcbiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlXG4gICAgICBpZiAob2xkSW5kZXggIT09IG5ld0luZGV4KSB7XG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1cGRhdGVPcmRlcihzb3VyY2VTY2hlbWEsIGxpc3QsIHBhZ2luYXRpb25SYW5nZSkge1xuICAgICAgY29uc3QgeyBvcmRlcktleSB9ID0gc291cmNlU2NoZW1hXG4gICAgICBpZiAob3JkZXJLZXkpIHtcbiAgICAgICAgLy8gUmVvcmRlciB0aGUgY2hhbmdlZCBlbnRyaWVzIGJ5IHRoZWlyIG9yZGVyIGtleSwgdGFraW5nIHBhZ2luYXRpb25cbiAgICAgICAgLy8gb2Zmc2V0cyBpbnRvIGFjY291bnQ6XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IHBhZ2luYXRpb25SYW5nZT8uWzBdIHx8IDBcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgbGlzdFtpXVtvcmRlcktleV0gPSBpICsgb2Zmc2V0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBsaXN0XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdHJlZS1pdGVtKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1ge1xuICAgICdkaXRvLWRyYWdnaW5nJzogaXNEcmFnZ2luZyxcbiAgICAnZGl0by1hY3RpdmUnOiBhY3RpdmVcbiAgfWBcbiAgOnN0eWxlPVwibGV2ZWwgPiAwICYmIHsgJy0tbGV2ZWwnOiBsZXZlbCB9XCJcbilcbiAgLmRpdG8tdHJlZS1oZWFkZXIoXG4gICAgdi1pZj1cImxhYmVsXCJcbiAgKVxuICAgIC5kaXRvLXRyZWUtYnJhbmNoKFxuICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgQGNsaWNrLnN0b3A9XCJvcGVuZWQgPSAhb3BlbmVkXCJcbiAgICApXG4gICAgICAuZGl0by1jaGV2cm9uKFxuICAgICAgICB2LWlmPVwibnVtRW50cmllc1wiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IG9wZW5lZCB9XCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwoXG4gICAgICAgIHYtaHRtbD1cImxhYmVsXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRyZWUtaW5mbyhcbiAgICAgICAgdi1pZj1cImRldGFpbHNcIlxuICAgICAgKSB7eyBkZXRhaWxzIH19XG4gICAgLmRpdG8tdHJlZS1sZWFmKFxuICAgICAgdi1lbHNlXG4gICAgKVxuICAgICAgLmRpdG8tdHJlZS1sYWJlbChcbiAgICAgICAgdi1odG1sPVwibGFiZWxcIlxuICAgICAgKVxuICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKFxuICAgICAgdi1pZj1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImRyYWdnYWJsZVwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5lZGl0KVwiXG4gICAgICAgIEBjbGljaz1cIm9uRWRpdFwiXG4gICAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkZWxldGFibGVcIlxuICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgQGNsaWNrPVwib25EZWxldGVcIlxuICAgICAgKVxuICB0YWJsZS5kaXRvLXByb3BlcnRpZXMoXG4gICAgdi1pZj1cInByb3BlcnRpZXNcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gIClcbiAgICB0cihcbiAgICAgIHYtZm9yPVwicHJvcGVydHkgaW4gcHJvcGVydGllc1wiXG4gICAgKVxuICAgICAgdGRcbiAgICAgICAgRGl0b0xhYmVsKFxuICAgICAgICAgIHYtaWY9XCJwcm9wZXJ0eS5sYWJlbCAhPT0gZmFsc2VcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgICA6bGFiZWw9XCJnZXRMYWJlbChwcm9wZXJ0eSlcIlxuICAgICAgICApXG4gICAgICBEaXRvVGFibGVDZWxsKFxuICAgICAgICA6Y2VsbD1cInByb3BlcnR5XCJcbiAgICAgICAgOnNjaGVtYT1cInByb3BlcnR5XCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSlcIlxuICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIClcbiAgRGl0b0RyYWdnYWJsZShcbiAgICB2LWlmPVwiY2hpbGRyZW5TY2hlbWFcIlxuICAgIHYtc2hvdz1cIm9wZW5lZFwiXG4gICAgOm1vZGVsVmFsdWU9XCJ1cGRhdGVPcmRlcihjaGlsZHJlblNjaGVtYSwgY2hpbGRyZW5MaXN0KVwiXG4gICAgOm9wdGlvbnM9XCJnZXREcmFnZ2FibGVPcHRpb25zKHRydWUpXCJcbiAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgIEB1cGRhdGU6bW9kZWxWYWx1ZT1cInZhbHVlID0+IChjaGlsZHJlbkxpc3QgPSB2YWx1ZSlcIlxuICApXG4gICAgRGl0b1RyZWVJdGVtKFxuICAgICAgdi1mb3I9XCIoaXRlbSwgaW5kZXgpIGluIGNoaWxkcmVuSXRlbXNcIlxuICAgICAgOmtleT1cImdldEl0ZW1VaWQoY2hpbGRyZW5TY2hlbWEsIGl0ZW0uZGF0YSlcIlxuICAgICAgOnNjaGVtYT1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImdldEl0ZW1EYXRhUGF0aChjaGlsZHJlblNjaGVtYSwgaW5kZXgpXCJcbiAgICAgIDpkYXRhPVwiaXRlbS5kYXRhXCJcbiAgICAgIDpwYXRoPVwiaXRlbS5wYXRoXCJcbiAgICAgIDpvcGVuPVwiaXRlbS5vcGVuXCJcbiAgICAgIDphY3RpdmU9XCJpdGVtLmFjdGl2ZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiY2hpbGRyZW5EcmFnZ2FibGVcIlxuICAgICAgOmxhYmVsPVwiZ2V0SXRlbUxhYmVsKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEsIHsgaW5kZXggfSlcIlxuICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCJcbiAgICApXG4gICAgLy8tIFRPRE86IENvbnZlcnQgZGl0by10cmVlLWl0ZW0gdG8gdXNlIGRpdG8tbGFiZWwgaW50ZXJuYWxseSwgYW5kIHRoZW5cbiAgICAvLy0gcGFzcyBgYXNPYmplY3Q6IHRydWVgIGluIHRoZSBgZ2V0SXRlbUxhYmVsKClgIGNhbGwgYWJvdmUuXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0l0ZW1NaXhpbidcbmltcG9ydCBTb3J0YWJsZU1peGluIGZyb20gJy4uL21peGlucy9Tb3J0YWJsZU1peGluLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGdldE5hbWVkU2NoZW1hcywgaGFzRm9ybVNjaGVtYSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVHJlZUl0ZW0nLCB7XG4gIG1peGluczogW0l0ZW1NaXhpbiwgU29ydGFibGVNaXhpbl0sXG4gIGluamVjdDogWydjb250YWluZXInXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW0FycmF5LCBPYmplY3RdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgcGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICcnIH0sXG4gICAgb3BlbjogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGFjdGl2ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGxhYmVsOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGxldmVsOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgb3BlbmVkOiB0aGlzLm9wZW4gfHwgdGhpcy5zY2hlbWEub3BlblxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG1ldGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIubWV0YVxuICAgIH0sXG5cbiAgICBzdG9yZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5zdG9yZVxuICAgIH0sXG5cbiAgICBkaXNhYmxlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lci5kaXNhYmxlZFxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb3BlcnRpZXMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLnByb3BlcnRpZXMpXG4gICAgfSxcblxuICAgIC8vIFRPRE86IFNob3VsZCB0aGlzIGJlIG5hbWVkIGBzb3VyY2VTY2hlbWFgIGluc3RlYWQ/IFVzZSBTb3VyY2VNaXhpbj9cbiAgICBjaGlsZHJlblNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5jaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkxpc3QoKSB7XG4gICAgICBjb25zdCBuYW1lID0gdGhpcy5jaGlsZHJlblNjaGVtYT8ubmFtZVxuICAgICAgcmV0dXJuIG5hbWUgJiYgdGhpcy5kYXRhW25hbWVdXG4gICAgfSxcblxuICAgIGNoaWxkcmVuRHJhZ2dhYmxlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5jaGlsZHJlbkxpc3Q/Lmxlbmd0aCA+IDEgJiZcbiAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZHJhZ2dhYmxlJywge1xuICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgc2NoZW1hOiB0aGlzLmNoaWxkcmVuU2NoZW1hXG4gICAgICAgIH0pXG4gICAgICApXG4gICAgfSxcblxuICAgIG51bUNoaWxkcmVuKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggfHwgMFxuICAgIH0sXG5cbiAgICBudW1Qcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMucHJvcGVydGllcz8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtRW50cmllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLm51bVByb3BlcnRpZXMgKyB0aGlzLm51bUNoaWxkcmVuXG4gICAgfSxcblxuICAgIGNoaWxkcmVuSXRlbXMoKSB7XG4gICAgICBjb25zdCB7IGNoaWxkcmVuU2NoZW1hLCBjaGlsZHJlbkxpc3QgfSA9IHRoaXNcbiAgICAgIGlmIChjaGlsZHJlblNjaGVtYSAmJiBjaGlsZHJlbkxpc3QpIHtcbiAgICAgICAgY29uc3QgeyBlZGl0UGF0aCB9ID0gdGhpcy5jb250YWluZXJcbiAgICAgICAgY29uc3QgY2hpbGRyZW5PcGVuID0gIXRoaXMucGF0aCAmJiBjaGlsZHJlblNjaGVtYS5vcGVuXG4gICAgICAgIC8vIEJ1aWxkIGEgY2hpbGRyZW4gbGlzdCB3aXRoIGNoaWxkIG1ldGEgaW5mb3JtYXRpb24gZm9yIHRoZSB0ZW1wbGF0ZS5cbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlT3JkZXIoXG4gICAgICAgICAgY2hpbGRyZW5TY2hlbWEsXG4gICAgICAgICAgY2hpbGRyZW5MaXN0Lm1hcCgoZGF0YSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhdGggPSAoXG4gICAgICAgICAgICAgIGNoaWxkcmVuU2NoZW1hLnBhdGggJiZcbiAgICAgICAgICAgICAgYCR7dGhpcy5wYXRofS8ke2NoaWxkcmVuU2NoZW1hLnBhdGh9LyR7aW5kZXh9YFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3Qgb3BlbiA9IChcbiAgICAgICAgICAgICAgY2hpbGRyZW5PcGVuIHx8XG4gICAgICAgICAgICAgIC8vIE9ubHkgY291bnQgYXMgXCJpbiBlZGl0IHBhdGhcIiB3aGVuIGl0J3Mgbm90IHRoZSBmdWxsIGVkaXQgcGF0aC5cbiAgICAgICAgICAgICAgZWRpdFBhdGguc3RhcnRzV2l0aChwYXRoKSAmJiBwYXRoLmxlbmd0aCA8IGVkaXRQYXRoLmxlbmd0aFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgYWN0aXZlID0gZWRpdFBhdGggPT09IHBhdGhcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgIHBhdGgsXG4gICAgICAgICAgICAgIG9wZW4sXG4gICAgICAgICAgICAgIGFjdGl2ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBbXVxuICAgIH0sXG5cbiAgICBkZXRhaWxzKCkge1xuICAgICAgY29uc3QgeyBudW1DaGlsZHJlbiB9ID0gdGhpc1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbnVtQ2hpbGRyZW4gJiZcbiAgICAgICAgYCR7bnVtQ2hpbGRyZW59ICR7XG4gICAgICAgICAgbnVtQ2hpbGRyZW4gPT09IDEgPyAnaXRlbScgOiAnaXRlbXMnXG4gICAgICAgIH1gXG4gICAgICApXG4gICAgfSxcblxuICAgIGhhc0VkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZHJhZ2dhYmxlIHx8IHRoaXMuZWRpdGFibGUgfHwgdGhpcy5kZWxldGFibGVcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogU3VwcG9ydCBjcmVhdGFibGUhXG4gICAgLy8gVE9ETzogQWRkIHN1cHBvcnQgZm9yIGNyZWF0YWJsZSwgZWRpdGFibGUgYW5kIGRlbGV0YWJsZSBvdmVycmlkZXMgb24gdGhlXG4gICAgLy8gYXNzb2NpYXRlZCBmb3JtcywganVzdCBsaWtlIGluIGBUeXBlTGlzdGAgYW5kIGBUeXBlT2JqZWN0YCwgdGhyb3VnaFxuICAgIC8vIGBEaXRvRWRpdEJ1dHRvbnNgLiBJdCB3b3VsZCBiZSBiZXN0IHRvIHVzZSBgRGl0b0VkaXRCdXR0b25zYCBoZXJlIHRvby5cbiAgICBjcmVhdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjcmVhdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoY3JlYXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGFibGUgJiYgaGFzRm9ybVNjaGVtYSh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZWRpdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGVkaXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgcHJvcGVydHkubmFtZSlcbiAgICB9LFxuXG4gICAgb25FZGl0KCkge1xuICAgICAgLy8gQWxsIHdlIGdvdCB0byBkbyBpcyBwdXNoIHRoZSByaWdodCBlZGl0IHBhdGggdG8gdGhlIHJvdXRlciwgdGhlIHJlc3RcbiAgICAgIC8vIGlzIGhhbmRsZWQgYnkgb3VyIHJvdXRlcywgYWxsb3dpbmcgcmVsb2FkcyBhcyB3ZWxsLlxuICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICBwYXRoOiBgJHt0aGlzLmNvbnRhaW5lci5wYXRofSR7dGhpcy5wYXRofWAsXG4gICAgICAgIC8vIFByZXNlcnZlIGN1cnJlbnQgcXVlcnlcbiAgICAgICAgcXVlcnk6IHRoaXMuJHJvdXRlLnF1ZXJ5XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkRlbGV0ZSgpIHtcbiAgICAgIC8vIFRPRE86IEltcGxlbWVudCFcbiAgICB9LFxuXG4gICAgb25DaGFuZ2UoKSB7XG4gICAgICB0aGlzLmNvbnRhaW5lci5vbkNoYW5nZSgpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdHJlZS1pdGVtIHtcbiAgLS1jaGV2cm9uLWluZGVudDogI3skY2hldnJvbi1pbmRlbnR9O1xuXG4gID4gLmRpdG8tdHJlZS1oZWFkZXIge1xuICAgID4gLmRpdG8tdHJlZS1icmFuY2gsXG4gICAgPiAuZGl0by10cmVlLWxlYWYge1xuICAgICAgLy8gVXNlIGAtLWxldmVsYCBDU1MgdmFyaWFibGUgdG8gY2FsY3VsYXRlZCB0aGUgYWNjdW11bGF0ZWQgaW5kZW50XG4gICAgICAvLyBwYWRkaW5nIGRpcmVjdGx5IGluc3RlYWQgb2YgaGF2aW5nIGl0IGFjY3VtdWxhdGUgaW4gbmVzdGVkIENTUy5cbiAgICAgIC8vIFRoaXMgd2F5LCB3ZSBjYW4ga2VlcCB0aGUgLmRpdG8tYWN0aXZlIGFyZWEgY292ZXIgdGhlIGZ1bGwgd2lkdGg6XG4gICAgICBwYWRkaW5nLWxlZnQ6IGNhbGModmFyKC0tY2hldnJvbi1pbmRlbnQpICogKHZhcigtLWxldmVsLCAxKSAtIDEpKTtcbiAgICB9XG4gIH1cblxuICAuZGl0by10cmVlLWJyYW5jaCB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1icmFuY2gsXG4gIC5kaXRvLXRyZWUtbGVhZiB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBmbGV4OiBhdXRvO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBtYXJnaW46IDFweCAwO1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1sYWJlbCxcbiAgLmRpdG8tdHJlZS1pbmZvIHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1pbmZvIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDAuMzVlbTtcbiAgICBjb2xvcjogcmdiYSgkY29sb3ItYmxhY2ssIDAuMik7XG4gIH1cblxuICAuZGl0by1idXR0b25zIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIHZpc2liaWxpdHk6IGhpZGRlbjtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgbWFyZ2luOiAxcHggMCAxcHggMWVtO1xuICB9XG5cbiAgLmRpdG8tdHJlZS1oZWFkZXI6aG92ZXIge1xuICAgID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgICB2aXNpYmlsaXR5OiB2aXNpYmxlO1xuICAgIH0gLy8gSGlkZSBidXR0b25zIGR1cmluZyBkcmFnZ2luZ1xuICB9XG5cbiAgJi5kaXRvLWRyYWdnaW5nIHtcbiAgICAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgICA+IC5kaXRvLWJ1dHRvbnMge1xuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgPiAuZGl0by10cmVlLWhlYWRlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgcGFkZGluZzogMCAkaW5wdXQtcGFkZGluZy1ob3I7XG4gICAgICBtYXJnaW46IDAgKC0kaW5wdXQtcGFkZGluZy1ob3IpO1xuXG4gICAgICA+IC5kaXRvLXRyZWUtYnJhbmNoIHtcbiAgICAgICAgPiAuZGl0by1jaGV2cm9uOjpiZWZvcmUge1xuICAgICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgPiAqID4gLmRpdG8tdHJlZS1sYWJlbCB7XG4gICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tcHJvcGVydGllcyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbWFyZ2luLWxlZnQ6ICRjaGV2cm9uLWluZGVudDtcblxuICAgID4gdHIge1xuICAgICAgdmVydGljYWwtYWxpZ246IGJhc2VsaW5lO1xuICAgIH1cblxuICAgIC5kaXRvLWxhYmVsIHtcbiAgICAgIG1hcmdpbjogMDtcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBjb250ZW50OiAnOiAnO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG50aGVhZC5kaXRvLXRhYmxlLWhlYWRcbiAgdHJcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgIClcbiAgICAgIHRoKFxuICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKGNvbHVtbilcIlxuICAgICAgICA6Y2xhc3M9XCJnZXRDb2x1bW5DbGFzcyhjb2x1bW4pXCJcbiAgICAgIClcbiAgICAgICAgUm91dGVyTGluayhcbiAgICAgICAgICB2LWlmPVwiY29sdW1uLnNvcnRhYmxlXCJcbiAgICAgICAgICB2LXNsb3Q9XCJ7IG5hdmlnYXRlIH1cIlxuICAgICAgICAgIDp0bz1cImdldFNvcnRMaW5rKGNvbHVtbilcIlxuICAgICAgICAgIGN1c3RvbVxuICAgICAgICApXG4gICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICA6Y2xhc3M9XCJnZXRTb3J0Q2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICBAY2xpY2s9XCJuYXZpZ2F0ZVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgLmRpdG8tb3JkZXItYXJyb3dzXG4gICAgICAgICAgICBzcGFuIHt7IGdldExhYmVsKGNvbHVtbikgfX1cbiAgICAgICAgc3BhbihcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgKSB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgdGgoXG4gICAgICB2LWlmPVwiaGFzRWRpdEJ1dHRvbnNcIlxuICAgIClcbiAgICAgIC8vLSBFbXB0eSA8c3Bhbj4gaXMgbmVlZGVkIGZvciBzdHlsaW5nLCBzZWUgX3RhYmxlLnNjc3NcbiAgICAgIHNwYW5cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVGFibGVIZWFkJywge1xuICBwcm9wczoge1xuICAgIHF1ZXJ5OiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2x1bW5zOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBoYXNFZGl0QnV0dG9uczogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3J0KCkge1xuICAgICAgY29uc3Qgb3JkZXIgPSAodGhpcy5xdWVyeS5vcmRlciB8fCAnJykuc3BsaXQoL1xccysvKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbmFtZTogb3JkZXJbMF0sXG4gICAgICAgIG9yZGVyOiBvcmRlclsxXVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gYGRpdG8tY29sdW1uLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldFNvcnRDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWVcbiAgICAgICAgPyBgZGl0by1zZWxlY3RlZCBkaXRvLW9yZGVyLSR7dGhpcy5zb3J0Lm9yZGVyfWBcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGdldFNvcnRMaW5rKGNvbHVtbikge1xuICAgICAgLy8gVG9nZ2xlIG9yZGVyIGlmIHRoZSBzYW1lIGNvbHVtbiBpcyBjbGlja2VkIGFnYWluLlxuICAgICAgY29uc3Qgb3JkZXIgPVxuICAgICAgICB0aGlzLnNvcnQubmFtZSA9PT0gY29sdW1uLm5hbWUgJiYgdGhpcy5zb3J0Lm9yZGVyID09PSAnYXNjJ1xuICAgICAgICAgID8gJ2Rlc2MnXG4gICAgICAgICAgOiAnYXNjJ1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlMaW5rKHtcbiAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgb3JkZXI6IGAke2NvbHVtbi5uYW1lfSAke29yZGVyfWBcbiAgICAgIH0pXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdGFibGUtaGVhZCB7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gIHRyIHtcbiAgICB0aCB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgIHRleHQtYWxpZ246IGxlZnQ7XG4gICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuXG4gICAgICAuZGl0by1idXR0b24ge1xuICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmcsIHNlZSBiZWxvd1xuICAgICAgICBkaXNwbGF5OiBibG9jazsgLy8gT3ZlcnJpZGUgZGVmYXVsdCBpbmxpbmUtZmxleCBwb3NpdGlvbmluZy5cbiAgICAgICAgcGFkZGluZzogMDtcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIHRleHQtYWxpZ246IGluaGVyaXQ7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgICB9XG5cbiAgICAgIHNwYW4ge1xuICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgICAgIC8vIENvbnZlbnRpb246IE5lc3RlZCBzcGFucyBoYW5kbGUgcGFkZGluZ1xuICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcblxuICAgICAgICAmOmVtcHR5OjphZnRlciB7XG4gICAgICAgICAgLy8gUHJldmVudCBlbXB0eSA8dGg+IGZyb20gY29sbGFwc2luZ1xuICAgICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInOyAvLyB6ZXJvLXdpZHRoIHNwYWNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgID4gc3BhbiB7XG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG50ZChcbiAgOmNsYXNzPVwiY2VsbC5jbGFzc1wiXG4gIDpzdHlsZT1cImNlbGwuc3R5bGVcIlxuKVxuICAvLy0gVE9ETzogSW1wbGVtZW50IGlubGluZWQgY29tcG9uZW50cyBpbiBjZWxsIG1vZGUhXG4gIGNvbXBvbmVudChcbiAgICB2LWlmPVwiY2VsbC5jb21wb25lbnRcIlxuICAgIDppcz1cImNlbGwuY29tcG9uZW50XCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gIClcbiAgc3BhbihcbiAgICB2LWVsc2VcbiAgICB2LWh0bWw9XCJyZW5kZXJDZWxsKGRhdGEpXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBlc2NhcGVIdG1sIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvVGFibGVDZWxsJywge1xuICBwcm9wczoge1xuICAgIGNlbGw6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgcmVuZGVyQ2VsbChpdGVtKSB7XG4gICAgICBjb25zdCB7IG5hbWUsIHJlbmRlciB9ID0gdGhpcy5jZWxsXG4gICAgICBjb25zdCB2YWx1ZSA9IGl0ZW1bbmFtZV1cbiAgICAgIHJldHVybiByZW5kZXJcbiAgICAgICAgPyByZW5kZXIuY2FsbChcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgICBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgZGF0YTogaXRlbSxcbiAgICAgICAgICAgICAgZGF0YVBhdGg6IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIG5hbWUpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgOiBlc2NhcGVIdG1sKHZhbHVlKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXVwbG9hZC1maWxlXG4gIC5kaXRvLXRodW1ibmFpbChcbiAgICB2LWlmPVwidGh1bWJuYWlsXCJcbiAgICA6Y2xhc3M9XCJgZGl0by10aHVtYm5haWwtLSR7dGh1bWJuYWlsfWBcIlxuICApXG4gICAgLmRpdG8tdGh1bWJuYWlsX19pbm5lclxuICAgICAgaW1nKFxuICAgICAgICB2LWlmPVwic291cmNlXCJcbiAgICAgICAgOnNyYz1cInNvdXJjZVwiXG4gICAgICAgIGNyb3Nzb3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLXRodW1ibmFpbF9fdHlwZShcbiAgICAgICAgdi1lbHNlXG4gICAgICApXG4gICAgICAgIHNwYW4ge3sgdHlwZSB9fVxuICBzcGFuIHt7IGZpbGUubmFtZSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1VwbG9hZEZpbGUnLCB7XG4gIHByb3BzOiB7XG4gICAgZmlsZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgdGh1bWJuYWlsOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRodW1ibmFpbFVybDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVwbG9hZFVybDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHR5cGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBUWVBFU1t0aGlzLmZpbGUudHlwZV0gfHxcbiAgICAgICAgdGhpcy5maWxlLm5hbWUuc3BsaXQoJy4nKS5wb3AoKS50b1VwcGVyQ2FzZSgpXG4gICAgICApXG4gICAgfSxcblxuICAgIHNvdXJjZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZFVybCB8fCB0aGlzLnRodW1ibmFpbFVybFxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgICdmaWxlLnVwbG9hZC5maWxlJzoge1xuICAgICAgaW1tZWRpYXRlOiB0cnVlLFxuICAgICAgaGFuZGxlcihmaWxlKSB7XG4gICAgICAgIGlmICh0aGlzLnRodW1ibmFpbCAmJiBmaWxlPy50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpKSB7XG4gICAgICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICAgICAgICAgIHJlYWRlci5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwbG9hZFVybCA9IHJlYWRlci5yZXN1bHRcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZFVybCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuY29uc3QgVFlQRVMgPSB7XG4gICd0ZXh0L3BsYWluJzogJ1RYVCcsXG4gICd0ZXh0L2h0bWwnOiAnSFRNTCcsXG4gICd0ZXh0L2Nzcyc6ICdDU1MnLFxuICAndGV4dC9qYXZhc2NyaXB0JzogJ0pTJyxcbiAgJ2ltYWdlL2pwZWcnOiAnSlBHJyxcbiAgJ2ltYWdlL3BuZyc6ICdQTkcnLFxuICAnaW1hZ2UvZ2lmJzogJ0dJRicsXG4gICdpbWFnZS9zdmcreG1sJzogJ1NWRycsXG4gICdtb3ZpZS9tcDQnOiAnTVA0JyxcbiAgJ2F1ZGlvL21wZWcnOiAnTVAzJyxcbiAgJ2FwcGxpY2F0aW9uL2pzb24nOiAnSlNPTicsXG4gICdhcHBsaWNhdGlvbi94bWwnOiAnWE1MJyxcbiAgJ2FwcGxpY2F0aW9uL3BkZic6ICdQREYnLFxuICAnYXBwbGljYXRpb24vemlwJzogJ1pJUCdcbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkB1c2UgJ3Nhc3M6bWF0aCc7XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by11cGxvYWQtZmlsZSB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbn1cblxuLmRpdG8tdGh1bWJuYWlsIHtcbiAgJHNlbGY6ICY7XG5cbiAgLy8gU21hbGwgc2l6ZSBieSBkZWZhdWx0XG4gIC0tbWF4LXNpemU6ICN7MSAqICRpbnB1dC1oZWlnaHR9O1xuICAtLWNvcm5lci1zaXplOiBjYWxjKHZhcigtLW1heC1zaXplKSAvIDUpO1xuICAtLXNoYWRvdy1zaXplOiAxcHg7XG4gIC0tbWluLXNpemU6IGNhbGMoMiAqIHZhcigtLWNvcm5lci1zaXplKSk7XG4gIC0tbWFyZ2luOiAwZW07XG4gIC0tZHJvcC1zaGFkb3c6IGRyb3Atc2hhZG93KFxuICAgIDAgY2FsYyh2YXIoLS1zaGFkb3ctc2l6ZSkgKiAwLjc1KSB2YXIoLS1zaGFkb3ctc2l6ZSkgI3tyZ2JhKFxuICAgICAgICAkY29sb3ItYmxhY2ssXG4gICAgICAgIDAuNFxuICAgICAgKX1cbiAgKTtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbjogdmFyKC0tbWFyZ2luKTtcbiAgbWFyZ2luLXJpZ2h0OiAwLjVlbTtcbiAgZmlsdGVyOiB2YXIoLS1kcm9wLXNoYWRvdyk7XG5cbiAgJi0tc21hbGwge1xuICAgIC0tbWF4LXNpemU6ICN7MSAqICRpbnB1dC1oZWlnaHR9O1xuICAgIC0tbWFyZ2luOiAwZW07XG4gICAgLS1zaGFkb3ctc2l6ZTogMXB4O1xuICB9XG5cbiAgJi0tbWVkaXVtIHtcbiAgICAtLW1heC1zaXplOiAjezIgKiAkaW5wdXQtaGVpZ2h0fTtcbiAgICAtLW1hcmdpbjogMC4yNWVtO1xuICAgIC0tc2hhZG93LXNpemU6IDEuNXB4O1xuICB9XG5cbiAgJi0tbGFyZ2Uge1xuICAgIC0tbWF4LXNpemU6ICN7NCAqICRpbnB1dC1oZWlnaHR9O1xuICAgIC0tbWFyZ2luOiAwLjVlbTtcbiAgICAtLXNoYWRvdy1zaXplOiAyLjVweDtcbiAgfVxuXG4gICZfX2lubmVyIHtcbiAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmO1xuICAgIGNsaXAtcGF0aDogcG9seWdvbihcbiAgICAgIDAgMCxcbiAgICAgIGNhbGMoMTAwJSAtIHZhcigtLWNvcm5lci1zaXplKSkgMCxcbiAgICAgIDEwMCUgdmFyKC0tY29ybmVyLXNpemUpLFxuICAgICAgMTAwJSAxMDAlLFxuICAgICAgMCAxMDAlXG4gICAgKTtcblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICB3aWR0aDogdmFyKC0tY29ybmVyLXNpemUpO1xuICAgICAgaGVpZ2h0OiB2YXIoLS1jb3JuZXItc2l6ZSk7XG4gICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoNDVkZWcsICNmZmZmZmYsICNlZWVlZWUgNDAlLCAjZGRkZGRkIDUwJSk7XG4gICAgICBmaWx0ZXI6IHZhcigtLWRyb3Atc2hhZG93KTtcbiAgICB9XG4gIH1cblxuICAmX190eXBlIHtcbiAgICAtLWZvbnQtc2l6ZTogdmFyKC0tY29ybmVyLXNpemUpO1xuXG4gICAgZGlzcGxheTogZmxleDtcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAgIG1pbi13aWR0aDogdmFyKC0tbWluLXNpemUpO1xuICAgIG1pbi1oZWlnaHQ6IHZhcigtLW1heC1zaXplKTtcbiAgICBhc3BlY3QtcmF0aW86IDMgLyA0O1xuXG4gICAgc3BhbiB7XG4gICAgICAtLWNvbG9yOiAjeyRjb2xvci1ncmV5fTtcblxuICAgICAgZm9udC1zaXplOiBtaW4odmFyKC0tZm9udC1zaXplKSwgI3sxLjI1ICogJGZvbnQtc2l6ZX0pO1xuICAgICAgY29sb3I6IHZhcigtLWNvbG9yKTtcblxuICAgICAgI3skc2VsZn06bm90KCN7JHNlbGZ9LS1zbWFsbCkgJiB7XG4gICAgICAgIHBhZGRpbmc6IDAgY2FsYyh2YXIoLS1mb250LXNpemUpIC8gNCk7XG4gICAgICAgIGJvcmRlci1yYWRpdXM6IGNhbGModmFyKC0tZm9udC1zaXplKSAvIDQpO1xuICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1jb2xvcik7XG4gICAgICAgIGNvbG9yOiAjZmZmZmZmO1xuICAgICAgfVxuXG4gICAgICAjeyRzZWxmfS0tbWVkaXVtICYge1xuICAgICAgICAtLWNvbG9yOiAjeyRjb2xvci1saWdodH07XG4gICAgICB9XG5cbiAgICAgICN7JHNlbGZ9LS1sYXJnZSAmIHtcbiAgICAgICAgLS1jb2xvcjogI3skY29sb3ItbGlnaHRlcn07XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaW1nIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICAvLyBTVkcgaW1hZ2VzIG5lZWQgMTAwJSBzZXR0aW5ncyB0byBzY2FsZSBpbnRvIHRoZSBjb250YWluZXIuXG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1pbi13aWR0aDogdmFyKC0tbWluLXNpemUpO1xuICAgIG1pbi1oZWlnaHQ6IHZhcigtLW1pbi1zaXplKTtcbiAgICBtYXgtd2lkdGg6IHZhcigtLW1heC1zaXplKTtcbiAgICBtYXgtaGVpZ2h0OiB2YXIoLS1tYXgtc2l6ZSk7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBuZXh0VGljaywgZGVmaW5lQ29tcG9uZW50LCByZWYsIHJlYWN0aXZlLCBoIH0gZnJvbSAndnVlLWRlbWknO1xuaW1wb3J0IHsgdHJ5T25Nb3VudGVkLCB0cnlPblNjb3BlRGlzcG9zZSwgdW5yZWZFbGVtZW50LCBkZWZhdWx0RG9jdW1lbnQsIHRvVmFsdWUsIHVzZVZNb2RlbCB9IGZyb20gJ0B2dWV1c2UvY29yZSc7XG5pbXBvcnQgU29ydGFibGUgZnJvbSAnc29ydGFibGVqcyc7XG5cbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcbnZhciBfX29ialJlc3QgPSAoc291cmNlLCBleGNsdWRlKSA9PiB7XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgZm9yICh2YXIgcHJvcCBpbiBzb3VyY2UpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKHNvdXJjZSwgcHJvcCkgJiYgZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMClcbiAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgaWYgKHNvdXJjZSAhPSBudWxsICYmIF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKHNvdXJjZSkpIHtcbiAgICAgIGlmIChleGNsdWRlLmluZGV4T2YocHJvcCkgPCAwICYmIF9fcHJvcElzRW51bS5jYWxsKHNvdXJjZSwgcHJvcCkpXG4gICAgICAgIHRhcmdldFtwcm9wXSA9IHNvdXJjZVtwcm9wXTtcbiAgICB9XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuZnVuY3Rpb24gdXNlU29ydGFibGUoZWwsIGxpc3QsIG9wdGlvbnMgPSB7fSkge1xuICBsZXQgc29ydGFibGU7XG4gIGNvbnN0IF9hID0gb3B0aW9ucywgeyBkb2N1bWVudCA9IGRlZmF1bHREb2N1bWVudCB9ID0gX2EsIHJlc2V0T3B0aW9ucyA9IF9fb2JqUmVzdChfYSwgW1wiZG9jdW1lbnRcIl0pO1xuICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICBvblVwZGF0ZTogKGUpID0+IHtcbiAgICAgIG1vdmVBcnJheUVsZW1lbnQobGlzdCwgZS5vbGRJbmRleCwgZS5uZXdJbmRleCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBzdGFydCA9ICgpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSB0eXBlb2YgZWwgPT09IFwic3RyaW5nXCIgPyBkb2N1bWVudCA9PSBudWxsID8gdm9pZCAwIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbCkgOiB1bnJlZkVsZW1lbnQoZWwpO1xuICAgIGlmICghdGFyZ2V0KVxuICAgICAgcmV0dXJuO1xuICAgIHNvcnRhYmxlID0gbmV3IFNvcnRhYmxlKHRhcmdldCwgX19zcHJlYWRWYWx1ZXMoX19zcHJlYWRWYWx1ZXMoe30sIGRlZmF1bHRPcHRpb25zKSwgcmVzZXRPcHRpb25zKSk7XG4gIH07XG4gIGNvbnN0IHN0b3AgPSAoKSA9PiBzb3J0YWJsZSA9PSBudWxsID8gdm9pZCAwIDogc29ydGFibGUuZGVzdHJveSgpO1xuICBjb25zdCBvcHRpb24gPSAobmFtZSwgdmFsdWUpID0+IHtcbiAgICBpZiAodmFsdWUgIT09IHZvaWQgMClcbiAgICAgIHNvcnRhYmxlID09IG51bGwgPyB2b2lkIDAgOiBzb3J0YWJsZS5vcHRpb24obmFtZSwgdmFsdWUpO1xuICAgIGVsc2VcbiAgICAgIHJldHVybiBzb3J0YWJsZSA9PSBudWxsID8gdm9pZCAwIDogc29ydGFibGUub3B0aW9uKG5hbWUpO1xuICB9O1xuICB0cnlPbk1vdW50ZWQoc3RhcnQpO1xuICB0cnlPblNjb3BlRGlzcG9zZShzdG9wKTtcbiAgcmV0dXJuIHsgc3RvcCwgc3RhcnQsIG9wdGlvbiB9O1xufVxuZnVuY3Rpb24gbW92ZUFycmF5RWxlbWVudChsaXN0LCBmcm9tLCB0bykge1xuICBjb25zdCBhcnJheSA9IHRvVmFsdWUobGlzdCk7XG4gIGlmICh0byA+PSAwICYmIHRvIDwgYXJyYXkubGVuZ3RoKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5LnNwbGljZShmcm9tLCAxKVswXTtcbiAgICBuZXh0VGljaygoKSA9PiBhcnJheS5zcGxpY2UodG8sIDAsIGVsZW1lbnQpKTtcbiAgfVxufVxuXG5jb25zdCBVc2VTb3J0YWJsZSA9IC8qIEBfX1BVUkVfXyAqLyAvKiAjX19QVVJFX18gKi8gZGVmaW5lQ29tcG9uZW50KHtcbiAgbmFtZTogXCJVc2VTb3J0YWJsZVwiLFxuICBtb2RlbDoge1xuICAgIC8vIENvbXBhdGlibGUgd2l0aCB2dWUyXG4gICAgcHJvcDogXCJtb2RlbFZhbHVlXCIsXG4gICAgZXZlbnQ6IFwidXBkYXRlOm1vZGVsVmFsdWVcIlxuICB9LFxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHRhZzoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogXCJkaXZcIlxuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9XG4gIH0sXG4gIHNldHVwKHByb3BzLCB7IHNsb3RzIH0pIHtcbiAgICBjb25zdCBsaXN0ID0gdXNlVk1vZGVsKHByb3BzLCBcIm1vZGVsVmFsdWVcIik7XG4gICAgY29uc3QgdGFyZ2V0ID0gcmVmKCk7XG4gICAgY29uc3QgZGF0YSA9IHJlYWN0aXZlKHVzZVNvcnRhYmxlKHRhcmdldCwgbGlzdCwgcHJvcHMub3B0aW9ucykpO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpZiAoc2xvdHMuZGVmYXVsdClcbiAgICAgICAgcmV0dXJuIGgocHJvcHMudGFnLCB7IHJlZjogdGFyZ2V0IH0sIHNsb3RzLmRlZmF1bHQoZGF0YSkpO1xuICAgIH07XG4gIH1cbn0pO1xuXG5leHBvcnQgeyBVc2VTb3J0YWJsZSB9O1xuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblVzZVNvcnRhYmxlLmRpdG8tZHJhZ2dhYmxlKFxuICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgOmNsYXNzPVwieyAnZGl0by1kcmFnZ2FibGUtLWRyYWdnaW5nJzogaXNEcmFnZ2luZyB9XCJcbiAgOnRhZz1cInRhZ1wiXG4gIDptb2RlbFZhbHVlPVwibW9kZWxWYWx1ZVwiXG4gIDpvcHRpb25zPVwieyAuLi5vcHRpb25zLCBvblN0YXJ0LCBvbkVuZCB9XCJcbiAgQHVwZGF0ZTptb2RlbFZhbHVlPVwiJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgJGV2ZW50KVwiXG4pXG4gIHNsb3RcbmNvbXBvbmVudChcbiAgdi1lbHNlXG4gIDppcz1cInRhZ1wiXG4pXG4gIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50J1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IFVzZVNvcnRhYmxlIH0gZnJvbSAnQHZ1ZXVzZS9pbnRlZ3JhdGlvbnMvdXNlU29ydGFibGUvY29tcG9uZW50J1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9EcmFnZ2FibGUnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcbiAgY29tcG9uZW50czogeyBVc2VTb3J0YWJsZSB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZSddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZToge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgdGFnOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnZGl2J1xuICAgIH0sXG4gICAgb3B0aW9uczoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIGRyYWdnYWJsZToge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbW91c2VFdmVudHM6IG51bGwsXG4gICAgICBpc0RyYWdnaW5nOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25TdGFydChldmVudCkge1xuICAgICAgdGhpcy5vcHRpb25zLm9uU3RhcnQ/LihldmVudClcbiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWVcbiAgICAgIHRoaXMubW91c2VFdmVudHM/LnJlbW92ZSgpXG4gICAgfSxcblxuICAgIG9uRW5kKGV2ZW50KSB7XG4gICAgICB0aGlzLm9wdGlvbnMub25FbmQ/LihldmVudClcbiAgICAgIC8vIEtlZXAgYGlzRHJhZ2dpbmdgIHRydWUgdW50aWwgdGhlIG5leHQgbW91c2UgaW50ZXJhY3Rpb24gc28gdGhhdFxuICAgICAgLy8gY29uZnVzZWQgaG92ZXIgc3RhdGVzIGFyZSBjbGVhcmVkIGJlZm9yZSByZW1vdmluZyB0aGUgaG92ZXIgY2F0Y2hlci5cbiAgICAgIHRoaXMubW91c2VFdmVudHMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICAgIG1vdXNlZG93bjogdGhpcy5vbk1vdXNlLFxuICAgICAgICBtb3VzZW1vdmU6IHRoaXMub25Nb3VzZSxcbiAgICAgICAgbW91c2VsZWF2ZTogdGhpcy5vbk1vdXNlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbk1vdXNlKCkge1xuICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2VcbiAgICAgIHRoaXMubW91c2VFdmVudHM/LnJlbW92ZSgpXG4gICAgICB0aGlzLm1vdXNlRXZlbnRzID0gbnVsbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWRyYWdnYWJsZSB7XG4gIC8vIE92ZXJsYXkgYSBob3ZlciBjYXRjaGVyIHdoaWxlIHdlJ3JlIGRyYWdnaW5nIHRvIHByZXZlbnQgaG92ZXIgc3RhdGVzIGZyb21cbiAgLy8gZ2V0dGluZyBzdHVjayAvIGNvbmZ1c2VkLiBTYWZhcmkgc3RydWdnbGVzIHdpdGggdGhpcywgc28gZGlzYWJsZSBpdCB0aGVyZS5cbiAgQGluY2x1ZGUgYnJvd3Nlci1xdWVyeSgoJ2Nocm9tZScsICdmaXJlZm94JykpIHtcbiAgICAmOmhhcygmX19jaG9zZW4pLFxuICAgICYtLWRyYWdnaW5nIHtcbiAgICAgID4gKiB7XG4gICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAgICAgICA+IDpmaXJzdC1jaGlsZDo6YWZ0ZXIge1xuICAgICAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBpbnNldDogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICZfX2ZhbGxiYWNrIHtcbiAgICBmaWx0ZXI6IGRyb3Atc2hhZG93KDAgMnB4IDRweCAkY29sb3Itc2hhZG93KTtcblxuICAgIC8vIE5lc3RlZCA8dGQ+IG5lZWQgdG8gYWxzbyBzd2l0Y2ggdG8gYGRpc3BsYXk6IGZsZXhgIHN0eWxlIGR1cmluZyBkcmFnZ2luZy5cbiAgICAmLFxuICAgIHRkIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG5cbiAgICAgID4gKiB7XG4gICAgICAgIGZsZXg6IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNwaW5uZXIoXG4gIHYtc2hvdz1cImxvYWRpbmdcIlxuICA6c3R5bGU9XCJ7ICctLWNvbG9yJzogY29sb3IsICctLXNpemUnOiBzaXplLCAnLS1tYXJnaW4nOiBtYXJnaW4gfVwiXG4pXG4gIC5kaXRvLXNwaW5uZXJfX3B1bHNlLmRpdG8tc3Bpbm5lcl9fcHVsc2UxXG4gIC5kaXRvLXNwaW5uZXJfX3B1bHNlLmRpdG8tc3Bpbm5lcl9fcHVsc2UyXG4gIC5kaXRvLXNwaW5uZXJfX3B1bHNlLmRpdG8tc3Bpbm5lcl9fcHVsc2UzXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU3Bpbm5lcicsIHtcbiAgcHJvcHM6IHtcbiAgICBsb2FkaW5nOiB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0sXG4gICAgY29sb3I6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9LFxuICAgIHNpemU6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9LFxuICAgIG1hcmdpbjoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLXNwaW5uZXIge1xuICAtLWNvbG9yOiAjOTk5OTk5O1xuICAtLXNpemU6IDhweDtcbiAgLS1tYXJnaW46IDJweDtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuXG4gICZfX3B1bHNlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3IpO1xuICAgIHdpZHRoOiB2YXIoLS1zaXplKTtcbiAgICBoZWlnaHQ6IHZhcigtLXNpemUpO1xuICAgIG1hcmdpbjogdmFyKC0tbWFyZ2luKTtcbiAgICBib3JkZXItcmFkaXVzOiAxMDAlO1xuICAgIGFuaW1hdGlvbjogZGl0by1zcGlubmVyLXB1bHNlIDAuNzVzIGN1YmljLWJlemllcigwLjIsIDAuNjgsIDAuMTgsIDEuMDgpIDBzXG4gICAgICBpbmZpbml0ZSBib3RoO1xuICB9XG5cbiAgJl9fcHVsc2UxIHtcbiAgICBhbmltYXRpb24tZGVsYXk6IDAuMTJzO1xuICB9XG5cbiAgJl9fcHVsc2UyIHtcbiAgICBhbmltYXRpb24tZGVsYXk6IDAuMjRzO1xuICB9XG5cbiAgJl9fcHVsc2UzIHtcbiAgICBhbmltYXRpb24tZGVsYXk6IDAuMzZzO1xuICB9XG59XG5cbkBrZXlmcmFtZXMgZGl0by1zcGlubmVyLXB1bHNlIHtcbiAgMCUsXG4gIDgwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgNDUlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgb3BhY2l0eTogMC43O1xuICB9XG59XG5cbkBrZXlmcmFtZXMgZGl0by1zcGlubmVyLXB1bHNlIHtcbiAgMCUsXG4gIDgwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBvcGFjaXR5OiAxO1xuICB9XG5cbiAgNDUlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuMSk7XG4gICAgb3BhY2l0eTogMC43O1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5mdW5jdGlvbiBEaXRvVk5vZGUoeyB2bm9kZSB9KSB7XG4gIHJldHVybiB2bm9kZVxufVxuXG5EaXRvVk5vZGUucHJvcHMgPSB7XG4gIHZub2RlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1Zub2RlJywgRGl0b1ZOb2RlKVxuPC9zY3JpcHQ+XG4iLCIvLyBEaXRvVHlwZUNvbXBvbmVudCBpcyB0aGUgYWJzdHJhY3QgYmFzZSBjb21wb25lbnQgZm9yIGFsbCBvdGhlciB0eXBlXG4vLyBjb21wb25lbnRzIGluc2lkZSB0aGUgdHlwZXMvIGZvbGRlci4gVGhlcmUncyBhbHNvIGEgc2VwYXJhdGUgY29uY3JldGVcbi8vIGBEaXRvVHlwZUNvbXBvbmVudC52dWVgIGNvbXBvbmVudCwgdXNlIHRvIHJlbmRlciBgeyB0eXBlOiAnY29tcG9uZW50JyB9YFxuaW1wb3J0IHsgYXNBcnJheSwgY2FtZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgeyByZWdpc3RlclR5cGVDb21wb25lbnQsIGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZXh0ZW5kczogRGl0b0NvbXBvbmVudCxcbiAgbWl4aW5zOiBbVHlwZU1peGluXSxcblxuICBuYXRpdmVGaWVsZDogZmFsc2UsXG4gIHRleHRGaWVsZDogZmFsc2UsXG4gIC8vIFNldCByZWFzb25hYmxlIGRlZmF1bHRzIGZvciBhbGwgb2YgdGhlc2UgdGhhdCBhcmUgdXNlZCBieSBtb3N0IHR5cGVcbiAgLy8gY29tcG9uZW50cy4gVGhlc2Ugb25seSBuZWVkIGRlZmluaW5nIGluIHN1Yi1jbGFzc2VzIHdoZW4gdGhleSBkaWZmZXIuXG4gIGRlZmF1bHRWYWx1ZTogbnVsbCxcbiAgZGVmYXVsdE5lc3RlZDogdHJ1ZSxcbiAgZGVmYXVsdFZpc2libGU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IHRydWUsXG4gIGV4Y2x1ZGVWYWx1ZTogZmFsc2UsXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogbnVsbCxcbiAgb21pdFNwYWNpbmc6IGZhbHNlLFxuXG4gIGNvbXBvbmVudDogRGl0b0NvbXBvbmVudC5jb21wb25lbnQsXG5cbiAgZ2V0OiBnZXRUeXBlQ29tcG9uZW50LFxuXG4gIHJlZ2lzdGVyKHR5cGVzLCBkZWZpbml0aW9uID0ge30pIHtcbiAgICB0eXBlcyA9IGFzQXJyYXkodHlwZXMpXG4gICAgY29uc3QgY29tcG9uZW50ID0gdGhpcy5jb21wb25lbnQoXG4gICAgICBgRGl0b1R5cGUke2NhbWVsaXplKHR5cGVzWzBdLCB0cnVlKX1gLFxuICAgICAgZGVmaW5pdGlvblxuICAgIClcbiAgICBmb3IgKGNvbnN0IHR5cGUgb2YgdHlwZXMpIHtcbiAgICAgIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpXG4gICAgfVxuICAgIHJldHVybiBjb21wb25lbnRcbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgOnR5cGU9XCJ0eXBlXCJcbiAgOnRpdGxlPVwidGl0bGVcIlxuICA6Y2xhc3M9XCJidXR0b25DbGFzc1wiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuICAuZGl0by1idXR0b25fX3RleHQoXG4gICAgdi1pZj1cInRleHRcIlxuICApIHt7IHRleHQgfX1cbiAgLmRpdG8taW5mbyhcbiAgICB2LWlmPVwiIWxhYmVsICYmIGluZm9cIlxuICAgIDpkYXRhLWluZm89XCJpbmZvXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydidXR0b24nLCAnc3VibWl0J10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgICBleGNsdWRlVmFsdWU6IHRydWUsXG4gICAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG4gICAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgdmVyYigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmVyYnNbdGhpcy5uYW1lXVxuICAgICAgfSxcblxuICAgICAgYnV0dG9uQ2xhc3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcmIgPyBgZGl0by1idXR0b24tJHt0aGlzLnZlcmJ9YCA6IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHRleHQ6IGdldFNjaGVtYUFjY2Vzc29yKCd0ZXh0Jywge1xuICAgICAgICB0eXBlOiBTdHJpbmdcbiAgICAgIH0pLFxuXG4gICAgICB0aXRsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGV4dCB8fCBsYWJlbGl6ZSh0aGlzLnZlcmIpXG4gICAgICB9LFxuXG4gICAgICBpbmZvOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5mbycsIHtcbiAgICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICB9KSxcblxuICAgICAgY2xvc2VGb3JtOiBnZXRTY2hlbWFBY2Nlc3NvcignY2xvc2VGb3JtJywge1xuICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICBkZWZhdWx0OiBmYWxzZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgLy8gQG92ZXJyaWRlXG4gICAgICBnZXRFdmVudHMoKSB7XG4gICAgICAgIGNvbnN0IHsgb25Gb2N1cywgb25CbHVyLCBvbkNsaWNrIH0gPSB0aGlzXG4gICAgICAgIHJldHVybiB7IG9uRm9jdXMsIG9uQmx1ciwgb25DbGljayB9XG4gICAgICB9LFxuXG4gICAgICBhc3luYyBzdWJtaXQob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5yZXNvdXJjZUNvbXBvbmVudD8uc3VibWl0KHRoaXMsIG9wdGlvbnMpXG4gICAgICB9LFxuXG4gICAgICBhc3luYyBvbkNsaWNrKCkge1xuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmVtaXRFdmVudCgnY2xpY2snLCB7XG4gICAgICAgICAgcGFyZW50OiB0aGlzLnNjaGVtYUNvbXBvbmVudFxuICAgICAgICB9KVxuICAgICAgICAvLyBIYXZlIGJ1dHRvbnMgdGhhdCBkZWZpbmUgcmVzb3VyY2VzIGNhbGwgYHRoaXMuc3VibWl0KClgIGJ5IGRlZmF1bHQ6XG4gICAgICAgIGlmIChcbiAgICAgICAgICByZXMgPT09IHVuZGVmaW5lZCAmJiAvLyBNZWFuaW5nOiBkb24ndCBwcmV2ZW50IGRlZmF1bHQuXG4gICAgICAgICAgaGFzUmVzb3VyY2UodGhpcy5zY2hlbWEpXG4gICAgICAgICkge1xuICAgICAgICAgIGF3YWl0IHRoaXMuc3VibWl0KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tYnV0dG9uIHtcbiAgJHNlbGY6ICY7XG5cbiAgJl9fdGV4dCB7XG4gICAgQGluY2x1ZGUgZWxsaXBzaXM7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tY2hlY2tib3hcbiAgaW5wdXQoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJ2YWx1ZVwiXG4gICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveCcsIHtcbiAgbmF0aXZlRmllbGQ6IHRydWVcbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jaGVja2JveCB7XG4gIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3M7XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzRnVuY3Rpb24sXG4gIGlzUHJvbWlzZSxcbiAgbm9ybWFsaXplRGF0YVBhdGgsXG4gIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgcmVhY3RpdmUgfSBmcm9tICd2dWUnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtMb2FkaW5nTWl4aW5dLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBhc3luY0RhdGFFbnRyaWVzOiB7fVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFuZGxlRGF0YVNjaGVtYShzY2hlbWEsIG5hbWUsIGxvYWRpbmdPcHRpb25zKSB7XG4gICAgICBpZiAoIWlzT2JqZWN0KHNjaGVtYSkpIHtcbiAgICAgICAgc2NoZW1hID0geyBkYXRhOiBzY2hlbWEgfVxuICAgICAgfVxuICAgICAgbGV0IHsgZGF0YSA9IHVuZGVmaW5lZCwgZGF0YVBhdGggPSBudWxsIH0gPSBzY2hlbWFcbiAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhc3luYyBkYXRhIGxvYWRpbmcgYWxyZWFkeSBpbiBwcm9jZXNzLlxuICAgICAgY29uc3QgYXN5bmNFbnRyeSA9ICh0aGlzLmFzeW5jRGF0YUVudHJpZXNbbmFtZV0gfHw9IHJlYWN0aXZlKHtcbiAgICAgICAgZGVwZW5kZW5jeUZ1bmN0aW9uOiBudWxsLFxuICAgICAgICByZXNvbHZlZERhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgcmVzb2x2aW5nOiBmYWxzZSxcbiAgICAgICAgcmVzb2x2ZWQ6IGZhbHNlXG4gICAgICB9KSlcbiAgICAgIC8vIElmIHRoZSBkYXRhIGNhbGxiYWNrIHByb3ZpZGVkIGEgZGVwZW5kZW5jeSBmdW5jdGlvbiB3aGVuIGl0IHdhcyBjYWxsZWQsXG4gICAgICAvLyBjYWwgaXQgaW4gZXZlcnkgY2FsbCBvZiBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBmb3JjZSBWdWUgdG8ga2VlcCB0cmFja1xuICAgICAgLy8gb2YgdGhlIGFzeW5jIGRlcGVuZGVuY2llcy5cbiAgICAgIGFzeW5jRW50cnkuZGVwZW5kZW5jeUZ1bmN0aW9uPy4odGhpcy5jb250ZXh0KVxuXG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZlZCkge1xuICAgICAgICAvLyBJZiB0aGUgZGF0YSB3YXMgcmVzb2x2ZWQgYWxyZWFkeSwgcmV0dXJuIGl0IGFuZCBjbGVhciB0aGUgcmVzb2x2ZWRcbiAgICAgICAgLy8gdmFsdWUuIFRoaXMgd29ya3MgYmVjYXVzZSBWdWUgY2FjaGVzIHRoZSByZXN1bHQgb2YgY29tcHV0ZWQgZ2V0dGVyc1xuICAgICAgICAvLyBhbmQgb25seSByZWV2YWx1YXRlcyBpZiBvbmUgb2YgdGhlIGRlcGVuZGVuY2llcyBjaGFuZ2VkLiBUaGlzIGlzIHRvXG4gICAgICAgIC8vIGVuc3VyZSB0aGF0IGEgY2FjaGVkIHZhbHVlIGhlcmUgZG9lc24ndCBibG9jayAvIG92ZXJyaWRlXG4gICAgICAgIC8vIHJlZXZhbHVhdGlvbiB3aGVuIGEgZGVwZW5kZW5jeSBjaGFuZ2VzOlxuICAgICAgICBjb25zdCB7IHJlc29sdmVkRGF0YSB9ID0gYXN5bmNFbnRyeVxuICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IHVuZGVmaW5lZFxuICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkID0gZmFsc2VcbiAgICAgICAgcmV0dXJuIHJlc29sdmVkRGF0YVxuICAgICAgfVxuICAgICAgLy8gQXZvaWQgY2FsbGluZyB0aGUgZGF0YSBmdW5jdGlvbiB0d2ljZTpcbiAgICAgIGlmIChhc3luY0VudHJ5LnJlc29sdmluZykge1xuICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgfSBlbHNlIGlmIChkYXRhKSB7XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGRhdGEpKSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gZGF0YSh0aGlzLmNvbnRleHQpXG4gICAgICAgICAgLy8gSWYgdGhlIHJlc3VsdCBvZiB0aGUgZGF0YSBmdW5jdGlvbiBpcyBhbm90aGVyIGZ1bmN0aW9uLCB0aGVuIHRoZVxuICAgICAgICAgIC8vIGZpcnN0IGRhdGEgZnVuY3Rpb24gaXMgdGhlcmUgdG8gdHJhY2sgZGVwZW5kZW5jaWVzIGFuZCB0aGUgcmVhbFxuICAgICAgICAgIC8vIGRhdGEgbG9hZGluZyBoYXBwZW5zIGluIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkLiBLZWVwIHRyYWNrXG4gICAgICAgICAgLy8gaXQgaW4gYGRlcGVuZGVuY3lGdW5jdGlvbmAgc28gaXQgY2FuIGJlIGNhbGxlZCBvbiBlYWNoIGNhbGwgb2ZcbiAgICAgICAgICAvLyBgaGFuZGxlRGF0YVNjaGVtYSgpYCB0byBrZWVwIHRoZSBkZXBlbmRlbmNpZXMgaW50YWN0LCBhbmQgY2FsbFxuICAgICAgICAgIC8vIHRoZSBmdW5jdGlvbiB0aGF0IGl0IHJldHVybmVkIG9uY2UgdG8gZ2V0IHRoZSBhY3R1YWwgZGF0YTpcbiAgICAgICAgICBpZiAoaXNGdW5jdGlvbihyZXN1bHQpKSB7XG4gICAgICAgICAgICBhc3luY0VudHJ5LmRlcGVuZGVuY3lGdW5jdGlvbiA9IGRhdGFcbiAgICAgICAgICAgIGRhdGEgPSByZXN1bHQodGhpcy5jb250ZXh0KVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBkYXRhID0gcmVzdWx0XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE5PVEU6IElmIHRoZSBkYXRhIGlzIG5vdCBhIHByb21pc2UsIGl0IGlzIHJlc29sdmVkIGFscmVhZHkuXG4gICAgICAgIGlmIChpc1Byb21pc2UoZGF0YSkpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGF0YSBpcyBhc3luY2hyb25vdXMsIGl0IGNhbid0IGJlIHJldHVybmVkIHN0cmFpZ2h0IGF3YXkuXG4gICAgICAgICAgLy8gQnV0IHdlIGNhbiBjaGVhdCB1c2luZyBjb21wdXRlZCBwcm9wZXJ0aWVzIGFuZCBgcmVzb2x2ZWREYXRhYCxcbiAgICAgICAgICAvLyB3aGljaCBpcyBnb2luZyB0byByZWNlaXZlIHRoZSBsb2FkZWQgZGF0YSBhc3luY2hyb25vdXNseSxcbiAgICAgICAgICAvLyB0cmlnZ2VyaW5nIGEgcmVjb21wdXRlIG9mIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSB0aGF0IGNhbGxzXG4gICAgICAgICAgLy8gYGhhbmRsZURhdGFTY2hlbWEoKWAuXG4gICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSB0cnVlXG4gICAgICAgICAgdGhpcy5yZXNvbHZlRGF0YShkYXRhLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgICAgICAgIC50aGVuKGRhdGEgPT4ge1xuICAgICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkRGF0YSA9IGRhdGFcbiAgICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZpbmcgPSBmYWxzZVxuICAgICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmVkID0gdHJ1ZVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5jYXRjaChlcnJvciA9PiB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gZmFsc2VcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgLy8gQ2xlYXIgZGF0YSB1bnRpbCBwcm9taXNlIGlzIHJlc29sdmVkIGFuZCBgcmVzb2x2ZWREYXRhYCBpcyBzZXRcbiAgICAgICAgICBkYXRhID0gbnVsbFxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRhdGFQYXRoKSB7XG4gICAgICAgIGRhdGEgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoXG4gICAgICAgICAgdGhpcy5yb290RGF0YSxcbiAgICAgICAgICBub3JtYWxpemVEYXRhUGF0aChgJHt0aGlzLmRhdGFQYXRofS8ke2RhdGFQYXRofWApXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBkYXRhXG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVEYXRhKGxvYWQsIGxvYWRpbmdPcHRpb25zID0ge30pIHtcbiAgICAgIC8vIFVzZSBhIHRpbWVvdXQgdG8gYWxsb3cgYWxyZWFkeSByZXNvbHZlZCBwcm9taXNlcyB0byByZXR1cm4gZGF0YSB3aXRob3V0XG4gICAgICAvLyBzaG93aW5nIGEgbG9hZGluZyBpbmRpY2F0b3IuXG4gICAgICBjb25zdCB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5zZXRMb2FkaW5nKHRydWUsIGxvYWRpbmdPcHRpb25zKSwgMClcbiAgICAgIGxldCBkYXRhID0gbnVsbFxuICAgICAgdHJ5IHtcbiAgICAgICAgZGF0YSA9IGF3YWl0IChpc0Z1bmN0aW9uKGxvYWQpID8gbG9hZCgpIDogbG9hZClcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IoZXJyb3IubWVzc2FnZSB8fCBlcnJvcilcbiAgICAgIH1cbiAgICAgIGNsZWFyVGltZW91dCh0aW1lcilcbiAgICAgIHRoaXMuc2V0TG9hZGluZyhmYWxzZSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICByZXR1cm4gZGF0YVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERhdGFNaXhpbiBmcm9tICcuL0RhdGFNaXhpbi5qcydcbmltcG9ydCB7IGhhc1ZpZXdTY2hlbWEsIGdldFZpZXdFZGl0UGF0aCB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBzZXRUZW1wb3JhcnlJZCwgaXNSZWZlcmVuY2UgfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzQXJyYXksXG4gIGlzU3RyaW5nLFxuICBpc0Z1bmN0aW9uLFxuICBub3JtYWxpemVEYXRhUGF0aCxcbiAgbGFiZWxpemUsXG4gIGRlYm91bmNlQXN5bmNcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBoYXNPcHRpb25zOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgY29uc3QgY29udmVydFZhbHVlID0gdmFsdWUgPT5cbiAgICAgICAgICB0aGlzLnJlbGF0ZVxuICAgICAgICAgICAgPyB0aGlzLmhhc09wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgICAgPyB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgY29uc3QgdmFsdWUgPSBpc0FycmF5KHRoaXMudmFsdWUpXG4gICAgICAgICAgPyB0aGlzLnZhbHVlLm1hcChjb252ZXJ0VmFsdWUpLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSAhPT0gbnVsbClcbiAgICAgICAgICA6IGNvbnZlcnRWYWx1ZSh0aGlzLnZhbHVlKVxuICAgICAgICBpZiAoXG4gICAgICAgICAgLy8gV2hlbiByZWxhdGluZyBhbmQgYXMgc29vbiBhcyB0aGUgb3B0aW9ucyBhcmUgYXZhaWxhYmxlLi4uXG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiZcbiAgICAgICAgICB0aGlzLmhhc09wdGlvbnMgJiYgKFxuICAgICAgICAgICAgLy8gLi4uaWYgdGhlIHZhbHVlIGlzIGZvcmNlZCB0byBudWxsIGJlY2F1c2UgYSBkaXNhcHBlYXJlZCBvcHRpb24uLi5cbiAgICAgICAgICAgIHZhbHVlID09PSBudWxsICYmIHRoaXMudmFsdWUgIT09IG51bGwgfHxcbiAgICAgICAgICAgIC8vIC4uLm9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlZmVyZW5jZSwgcmVwbGFjZSBpdCB3aXRoIGl0cyBvcHRpb25cbiAgICAgICAgICAgIC8vIHZhbHVlLCBzbyB0aGF0IGl0J2xsIGhvbGQgYWN0dWFsIGRhdGEsIG5vdCBqdXN0IGEgcmVmZXJlbmNlIGlkLlxuICAgICAgICAgICAgaXNSZWZlcmVuY2UodGhpcy52YWx1ZSlcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBjb252ZXJ0ID0gdmFsdWUgPT5cbiAgICAgICAgICB0aGlzLnJlbGF0ZVxuICAgICAgICAgICAgPyB0aGlzLmdldE9wdGlvbkZvclZhbHVlKHZhbHVlKVxuICAgICAgICAgICAgOiB2YWx1ZVxuICAgICAgICB0aGlzLnZhbHVlID0gaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlLm1hcChjb252ZXJ0KVxuICAgICAgICAgIDogY29udmVydCh2YWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRPcHRpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh0aGlzLnNlbGVjdGVkVmFsdWUpXG4gICAgfSxcblxuICAgIG9wdGlvbnMoKSB7XG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5oYW5kbGVEYXRhU2NoZW1hKHRoaXMuc2NoZW1hLm9wdGlvbnMsICdvcHRpb25zJykgPz8gW11cbiAgICAgIGlmICghaXNBcnJheShkYXRhKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgb3B0aW9ucyBkYXRhLCBzaG91bGQgYmUgYXJyYXk6ICR7ZGF0YX1gKVxuICAgICAgfVxuICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgdGhpcy5oYXNPcHRpb25zID0gZGF0YS5sZW5ndGggPiAwXG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzT3B0aW9ucyhkYXRhKVxuICAgIH0sXG5cbiAgICBhY3RpdmVPcHRpb25zKCkge1xuICAgICAgLy8gVGhpcyBpcyBvdmVycmlkZGVuIGluIGBUeXBlTXVsdGlzZWxlY3RgIHRvIHJldHVybiB0aGUgYHNlYXJjaGVkT3B0aW9uc2BcbiAgICAgIC8vIHdoZW4gYSBzZWFyY2ggZmlsdGVyIHdhcyBhcHBsaWVkLlxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uc1xuICAgIH0sXG5cbiAgICByZWxhdGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZWxhdGUnLCB7XG4gICAgICAvLyBUT0RPOiBDb252ZXJ0IHRvIGByZWxhdGVCeTogJ2lkJ2BcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIC8vIFdlIGNhbm5vdCB1c2Ugc2NoZW1hIGFjY2Vzc29yIGNhbGxiYWNrIG1hZ2ljIGZvciBgcmVsYXRlYCBhcyB3ZSBuZWVkXG4gICAgICAvLyB0aGlzIG91dHNpZGUgb2YgdGhlIGNvbXBvbmVudCdzIGxpZmUtc3Bhbiwgc2VlIGBwcm9jZXNzRGF0YSgpYCBiZWxvdy5cbiAgICAgIGNhbGxiYWNrOiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZ3JvdXBCeTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2dyb3VwQnknLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYG9wdGlvbnMubGFiZWxLZXlgIC8gYG9wdGlvbkxhYmVsS2V5YD9cbiAgICBvcHRpb25MYWJlbDogZ2V0U2NoZW1hQWNjZXNzb3IoJ29wdGlvbnMubGFiZWwnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KGxhYmVsKSB7XG4gICAgICAgIC8vIElmIG5vIGBsYWJlbGAgd2FzIHByb3ZpZGVkIGJ1dCB0aGUgb3B0aW9ucyBhcmUgb2JqZWN0cywgYXNzdW1lIGFcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBvZiAnbGFiZWwnOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGxhYmVsIHx8XG4gICAgICAgICAgdGhpcy5nZXRPcHRpb25LZXkoJ2xhYmVsJykgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgb3B0aW9ucy52YWx1ZUtleWAgLyBgb3B0aW9uVmFsdWVLZXlgP1xuICAgIG9wdGlvblZhbHVlOiBnZXRTY2hlbWFBY2Nlc3Nvcignb3B0aW9ucy52YWx1ZScsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIEZ1bmN0aW9uXSxcbiAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICBnZXQodmFsdWUpIHtcbiAgICAgICAgLy8gSWYgbm8gYGxhYmVsYCB3YXMgcHJvdmlkZWQgYnV0IHRoZSBvcHRpb25zIGFyZSBvYmplY3RzLCBhc3N1bWUgYVxuICAgICAgICAvLyBkZWZhdWx0IHZhbHVlIG9mICd2YWx1ZSc6XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgdmFsdWUgfHxcbiAgICAgICAgICB0aGlzLnJlbGF0ZSAmJiAnaWQnIHx8XG4gICAgICAgICAgdGhpcy5nZXRPcHRpb25LZXkoJ3ZhbHVlJykgfHxcbiAgICAgICAgICBudWxsXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIC8vIFRPRE86IENvbnNpZGVyIG1vdmluZyBzZWFyY2ggdG8gYG9wdGlvbnMuc2VhcmNoYD9cbiAgICBzZWFyY2hGaWx0ZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdzZWFyY2gnLCB7XG4gICAgICB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KHNlYXJjaCkge1xuICAgICAgICBpZiAoc2VhcmNoKSB7XG4gICAgICAgICAgY29uc3QgeyBmaWx0ZXIsIGRlYm91bmNlIH0gPSBpc0Z1bmN0aW9uKHNlYXJjaClcbiAgICAgICAgICAgID8geyBmaWx0ZXI6IHNlYXJjaCB9XG4gICAgICAgICAgICA6IHNlYXJjaFxuICAgICAgICAgIHJldHVybiBkZWJvdW5jZSA/IGRlYm91bmNlQXN5bmMoZmlsdGVyLCBkZWJvdW5jZSkgOiBmaWx0ZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIGVkaXRhYmxlICYmXG4gICAgICAgICAgaGFzVmlld1NjaGVtYSh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0UGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmVkaXRhYmxlICYmIHRoaXMuc2VsZWN0ZWRWYWx1ZVxuICAgICAgICA/IGdldFZpZXdFZGl0UGF0aCh0aGlzLnNjaGVtYSwgdGhpcy5zZWxlY3RlZFZhbHVlLCB0aGlzLmNvbnRleHQpXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBncm91cEJ5TGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ2xhYmVsJyA6IG51bGxcbiAgICB9LFxuXG4gICAgZ3JvdXBCeU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ncm91cEJ5ID8gJ29wdGlvbnMnIDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0T3B0aW9uS2V5KGtleSkge1xuICAgICAgY29uc3QgW29wdGlvbl0gPSB0aGlzLmFjdGl2ZU9wdGlvbnNcbiAgICAgIHJldHVybiBpc09iamVjdChvcHRpb24pICYmIGtleSBpbiBvcHRpb24gPyBrZXkgOiBudWxsXG4gICAgfSxcblxuICAgIHByb2Nlc3NPcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgIGlmIChvcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAodGhpcy5yZWxhdGUpIHtcbiAgICAgICAgICAvLyBJZiBpZHMgYXJlIG1pc3NpbmcgYW5kIHdlIHdhbnQgdG8gcmVsYXRlLCBzZXQgdGVtcG9yYXJ5IGlkcy5cbiAgICAgICAgICAvLyBOT1RFOiBXZSBuZWVkIHRvIG1vZGlmeSB0aGUgYWN0dWFsIGRhdGEsIG1ha2luZyBhIGNvcHkgd29uJ3Qgd29ya1xuICAgICAgICAgIC8vIGFzIGl0IHdvbid0IHByb3BhZ2F0ZS5cbiAgICAgICAgICAvLyBOT1RFOiBUaGlzIG9ubHkgbWFrZXMgc2Vuc2UgaWYgdGhlIGRhdGEgaXMgZnJvbSB0aGUgZ3JhcGggdGhhdFxuICAgICAgICAgIC8vIHdlJ3JlIGN1cnJlbnRseSBlZGl0aW5nLlxuICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGlmICghKCdpZCcgaW4gb3B0aW9uKSkge1xuICAgICAgICAgICAgICBzZXRUZW1wb3JhcnlJZChvcHRpb24sICdpZCcpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmdyb3VwQnkpIHtcbiAgICAgICAgICBjb25zdCBncm91cGVkID0ge31cbiAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucy5yZWR1Y2UoXG4gICAgICAgICAgICAocmVzdWx0cywgb3B0aW9uKSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGdyb3VwID0gb3B0aW9uW3RoaXMuZ3JvdXBCeV1cbiAgICAgICAgICAgICAgbGV0IGVudHJ5ID0gZ3JvdXBlZFtncm91cF1cbiAgICAgICAgICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICAgICAgICAgIGVudHJ5ID0gZ3JvdXBlZFtncm91cF0gPSB7XG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5TGFiZWxdOiBncm91cCxcbiAgICAgICAgICAgICAgICAgIFt0aGlzLmdyb3VwQnlPcHRpb25zXTogW11cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0cy5wdXNoKGVudHJ5KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGVudHJ5Lm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgICAgICAgIHJldHVybiByZXN1bHRzXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgW11cbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvcHRpb25zXG4gICAgfSxcblxuICAgIGhhc09wdGlvbihvcHRpb24pIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5nZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pKVxuICAgIH0sXG5cbiAgICBnZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkge1xuICAgICAgY29uc3QgZmluZE9wdGlvbiA9IChvcHRpb25zLCB2YWx1ZSwgZ3JvdXBCeSkgPT4ge1xuICAgICAgICAvLyBTZWFyY2ggZm9yIHRoZSBvcHRpb24gb2JqZWN0IHdpdGggdGhlIGdpdmVuIHZhbHVlIGFuZCByZXR1cm4gdGhlXG4gICAgICAgIC8vIHdob2xlIG9iamVjdC5cbiAgICAgICAgZm9yIChjb25zdCBvcHRpb24gb2Ygb3B0aW9ucykge1xuICAgICAgICAgIGlmIChncm91cEJ5KSB7XG4gICAgICAgICAgICBjb25zdCBmb3VuZCA9IGZpbmRPcHRpb24ob3B0aW9uLm9wdGlvbnMsIHZhbHVlLCBudWxsKVxuICAgICAgICAgICAgaWYgKGZvdW5kKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25WYWx1ZVxuICAgICAgICA/IGZpbmRPcHRpb24odGhpcy5hY3RpdmVPcHRpb25zLCB2YWx1ZSwgdGhpcy5ncm91cEJ5KVxuICAgICAgICA6IHZhbHVlXG4gICAgfSxcblxuICAgIGdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvblZhbHVlKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvblZhbHVlXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uVmFsdWUpXG4gICAgICAgICAgPyBvcHRpb25WYWx1ZShuZXcgRGl0b0NvbnRleHQodGhpcywgeyBvcHRpb24gfSkpXG4gICAgICAgICAgOiBvcHRpb25cbiAgICB9LFxuXG4gICAgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB7XG4gICAgICBjb25zdCB7IG9wdGlvbkxhYmVsIH0gPSB0aGlzXG4gICAgICByZXR1cm4gaXNTdHJpbmcob3B0aW9uTGFiZWwpXG4gICAgICAgID8gb3B0aW9uPy5bb3B0aW9uTGFiZWxdXG4gICAgICAgIDogaXNGdW5jdGlvbihvcHRpb25MYWJlbClcbiAgICAgICAgICA/IG9wdGlvbkxhYmVsKG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG9wdGlvbiB9KSlcbiAgICAgICAgICA6IGxhYmVsaXplKGAke29wdGlvbn1gKVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSwgZGF0YVBhdGgsIGdyYXBoKSB7XG4gICAgaWYgKHNjaGVtYS5yZWxhdGUpIHtcbiAgICAgIC8vIEZvciBpbnRlcm5hbGx5IHJlbGF0aW5nIGRhdGEgKGBzY2hlbWEub3B0aW9ucy5kYXRhUGF0aGApLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBwcm9jZXNzIGJvdGggdGhlIG9wdGlvbnMgKGZvciAnI3JlZicpIGFuZCB0aGUgdmFsdWUgKCcjaWQnKS5cbiAgICAgIC8vIFNlZSBgRGF0YU1peGluLmhhbmRsZURhdGFTY2hlbWEoKWA6XG4gICAgICBjb25zdCBwYXRoID0gc2NoZW1hLm9wdGlvbnM/LmRhdGFQYXRoXG4gICAgICBjb25zdCByZWxhdGVkRGF0YVBhdGggPSBwYXRoXG4gICAgICAgID8gbm9ybWFsaXplRGF0YVBhdGgoYCR7ZGF0YVBhdGh9LyR7cGF0aH1gKVxuICAgICAgICA6IG51bGxcbiAgICAgIGdyYXBoLmFkZFJlbGF0aW9uKGRhdGFQYXRoLCByZWxhdGVkRGF0YVBhdGgsIHNjaGVtYSlcbiAgICAgIGlmIChyZWxhdGVkRGF0YVBhdGgpIHtcbiAgICAgICAgZ3JhcGguc2V0U291cmNlUmVsYXRlZChyZWxhdGVkRGF0YVBhdGgpXG4gICAgICB9XG4gICAgICAvLyBDb252ZXJ0IHJlbGF0aW5nIG9iamVjdHMgdG8gYSBzaGFsbG93IGNvcHkgd2l0aCBvbmx5IHRoZSBpZCBsZWZ0LlxuICAgICAgLy8gVE9ETzogQ29udmVydCB0byB1c2luZyBgcmVsYXRlQnlgOlxuICAgICAgY29uc3QgcHJvY2Vzc1JlbGF0ZSA9IHZhbHVlID0+ICh2YWx1ZSA/IHsgaWQ6IHZhbHVlLmlkIH0gOiB2YWx1ZSlcbiAgICAgIC8vIFNlbGVjdGVkIG9wdGlvbnMgY2FuIGJlIGJvdGggb2JqZWN0cyAmIGFycmF5cywgZS5nLiAnY2hlY2tib3hlcyc6XG4gICAgICB2YWx1ZSA9IGlzQXJyYXkodmFsdWUpXG4gICAgICAgID8gdmFsdWUubWFwKHByb2Nlc3NSZWxhdGUpXG4gICAgICAgIDogcHJvY2Vzc1JlbGF0ZSh2YWx1ZSlcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG51bC5kaXRvLWNoZWNrYm94ZXMoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuKVxuICBsaShcbiAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgKVxuICAgIGxhYmVsXG4gICAgICAuZGl0by1jaGVja2JveFxuICAgICAgICBpbnB1dChcbiAgICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgICApXG4gICAgICAgIHNwYW4ge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdjaGVja2JveGVzJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICBkZWZhdWx0VmFsdWU6IFtdLFxuICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkT3B0aW9uczoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gKHRoaXMuc2VsZWN0ZWRWYWx1ZSB8fCBbXSkuZmlsdGVyKHZhbHVlID0+IHZhbHVlKVxuICAgICAgfSxcblxuICAgICAgc2V0KG9wdGlvbikge1xuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSBvcHRpb24gfHwgW11cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jaGVja2JveGVzIHtcbiAgbGFiZWwge1xuICAgIEBleHRlbmQgJWlucHV0LWJvcmRlcmxlc3M7XG4gIH1cblxuICBpbnB1dCB7XG4gICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNvZGUoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiY29kZVwiXG4gIDpzdHlsZT1cInN0eWxlXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IENvZGVGbGFzayBmcm9tICdjb2RlZmxhc2snXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29kZScsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgM1xuICAgIH0sXG5cbiAgICBzdHlsZSgpIHtcbiAgICAgIHJldHVybiBgaGVpZ2h0OiBjYWxjKCR7dGhpcy5saW5lc31lbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlgXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgZmxhc2sgPSBuZXcgQ29kZUZsYXNrKHRoaXMuJHJlZnMuY29kZSwge1xuICAgICAgbGFuZ3VhZ2U6IHRoaXMuc2NoZW1hLmxhbmd1YWdlIHx8ICdqYXZhc2NyaXB0JyxcbiAgICAgIHRhYlNpemU6IHRoaXMuc2NoZW1hLmluZGVudFNpemUgfHwgMixcbiAgICAgIGxpbmVOdW1iZXJzOiBmYWxzZVxuICAgIH0pXG5cbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcbiAgICBsZXQgaWdub3JlVXBkYXRlID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgdGhpcy5kb21Pbih0aGlzLiRyZWZzLmNvZGUucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKSwge1xuICAgICAgZm9jdXM6IG9uRm9jdXMsXG4gICAgICBibHVyOiBvbkJsdXJcbiAgICB9KVxuXG4gICAgY29uc3Qgc2V0Q29kZSA9IGNvZGUgPT4ge1xuICAgICAgaWYgKGNvZGUgIT09IGZsYXNrLmNvZGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gdHJ1ZVxuICAgICAgICBmbGFzay51cGRhdGVDb2RlKGNvZGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWUgPSB2YWx1ZSA9PiB7XG4gICAgICBpZiAodmFsdWUgIT09IHRoaXMudmFsdWUpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICBjaGFuZ2VkID0gdHJ1ZVxuICAgICAgICBvbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgZmxhc2sub25VcGRhdGUodmFsdWUgPT4ge1xuICAgICAgaWYgKGlnbm9yZVVwZGF0ZSkge1xuICAgICAgICBpZ25vcmVVcGRhdGUgPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0VmFsdWUodmFsdWUpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRDb2RlKHZhbHVlIHx8ICcnKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBzZXRDb2RlKHRoaXMudmFsdWUgfHwgJycpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJGVsLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyk/LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1ckVsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpPy5mb2N1cygpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY29kZSB7XG4gIEBleHRlbmQgJWlucHV0O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgLy8gRm9yIHByb3BlciBzaXppbmcgb2YgY29udGVudCBhbG9uZyB3aXRoIDpzdHlsZT1cInN0eWxlXCIgc2V0dGluZyBhYm92ZSxcbiAgLy8gZm9yIHByb3BlciBsaW5lLWhlaWdodCBjYWxjdWxhdGlvbi5cbiAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG5cbiAgLmNvZGVmbGFzayB7XG4gICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAvLyBJZ25vcmUgdGhlIHBhcmVudCBwYWRkaW5nIGRlZmluZWQgYWJvdmUgd2hpY2ggaXMgb25seSBuZWVkZWQgdG8gc2V0XG4gICAgLy8gdGhlIGRlc2lyZWQgaGVpZ2h0IHdpdGggOnN0eWxlPVwic3R5bGVcIi5cbiAgICB0b3A6IDA7XG4gICAgbGVmdDogMDtcbiAgfVxuXG4gIC5jb2RlZmxhc2tfX3RleHRhcmVhLFxuICAuY29kZWZsYXNrX19wcmUge1xuICAgIC8vIFVzZSBzYW1lIHBhZGRpbmcgYXMgLmRpdG8tY29kZVxuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICB9XG5cbiAgLmNvZGVmbGFza19fdGV4dGFyZWEsXG4gIC5jb2RlZmxhc2tfX2NvZGUsXG4gIC5jb2RlZmxhc2tfX2xpbmVzIHtcbiAgICBmb250LWZhbWlseTogJGZvbnQtZmFtaWx5LW1vbm87XG4gICAgZm9udC1zaXplOiB2YXIoLS1mb250LXNpemUpO1xuICAgIGxpbmUtaGVpZ2h0OiB2YXIoLS1saW5lLWhlaWdodCk7XG4gIH1cblxuICAuY29kZWZsYXNrX19saW5lcyB7XG4gICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuVHJpZ2dlci5kaXRvLWNvbG9yKFxuICB2LW1vZGVsOnNob3c9XCJzaG93UG9wdXBcIlxuICB0cmlnZ2VyPVwiZm9jdXNcIlxuKVxuICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICAuZGl0by1pbnB1dCg6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogc2hvd1BvcHVwIH1cIilcbiAgICAgIGlucHV0KFxuICAgICAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgICB2LW1vZGVsPVwiaGV4VmFsdWVcIlxuICAgICAgICB0eXBlPVwiaW5wdXRcIlxuICAgICAgICBzaXplPVwiOFwiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgKVxuICAgICAgLmRpdG8tY29sb3ItcHJldmlldy5kaXRvLWluaGVyaXQtZm9jdXMoXG4gICAgICAgIHYtaWY9XCJ2YWx1ZVwiXG4gICAgICApXG4gICAgICAgIGRpdig6c3R5bGU9XCJ7IGJhY2tncm91bmQ6IGAjJHtoZXhWYWx1ZSB8fCAnMDAwMDAwMDAnfWAgfVwiKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgICAgKVxuICB0ZW1wbGF0ZSgjcG9wdXApXG4gICAgU2tldGNoUGlja2VyLmRpdG8tY29sb3ItcGlja2VyKFxuICAgICAgdi1tb2RlbD1cImNvbG9yVmFsdWVcIlxuICAgICAgOmRpc2FibGVBbHBoYT1cIiFhbHBoYVwiXG4gICAgICA6ZGlzYWJsZUZpZWxkcz1cIiFpbnB1dHNcIlxuICAgICAgOnByZXNldENvbG9ycz1cInByZXNldHNcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgdGlueWNvbG9yIGZyb20gJ3Rpbnljb2xvcjInXG5pbXBvcnQgeyBTa2V0Y2ggYXMgU2tldGNoUGlja2VyIH0gZnJvbSAnQGxrNzcvdnVlMy1jb2xvcidcbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IFRyaWdnZXIgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29sb3InLCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgU2tldGNoUGlja2VyIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2hvd1BvcHVwOiBmYWxzZSxcbiAgICAgIGNvbnZlcnRlZEhleFZhbHVlOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgY29sb3JWYWx1ZToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy52YWx1ZSB8fCB7fVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdCA9IHRoaXMuY29sb3JGb3JtYXRcbiAgICAgICAgY29uc3Qga2V5ID0gKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC8vIE5PVEU6IHZ1ZTMtY29sb3IgY2FsbHMgaXQgJ2hleCcsIHdoaWxlIHRpbnljb2xvciBjYWxscyBpdCAnaGV4NidcbiAgICAgICAgICAgIGhleDogdmFsdWU/LmEgPCAxID8gJ2hleDgnIDogJ2hleCcsXG4gICAgICAgICAgICByZ2I6ICdyZ2JhJ1xuICAgICAgICAgIH1bZm9ybWF0XSB8fFxuICAgICAgICAgIGZvcm1hdFxuICAgICAgICApXG4gICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVba2V5XVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aW55Y29sb3IodmFsdWUpLnRvU3RyaW5nKGZvcm1hdClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgaGV4VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IG51bGxcbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAhdGhpcy5mb2N1c2VkIHx8XG4gICAgICAgICAgdGhpcy4kcmVmcy5lbGVtZW50Lmhhc0F0dHJpYnV0ZSgncmVhZG9ubHknKVxuICAgICAgICApIHtcbiAgICAgICAgICBjb25zdCBjb2xvciA9IHRpbnljb2xvcih0aGlzLnZhbHVlKVxuICAgICAgICAgIGlmIChjb2xvci5pc1ZhbGlkKCkpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IGNvbG9yXG4gICAgICAgICAgICAgIC50b1N0cmluZyhjb2xvci5nZXRBbHBoYSgpIDwgMSA/ICdoZXg4JyA6ICdoZXg2JylcbiAgICAgICAgICAgICAgLnNsaWNlKDEpXG4gICAgICAgICAgICAgIC50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnZlcnRlZEhleFZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRPRE86IGBmb3JtYXRgIGNsYXNoZXMgd2l0aCBUeXBlTWl4aW4uZm9ybWF0KClgLCB3aGljaCBzaGFsbCBiZSByZW5hbWVkXG4gICAgLy8gc29vbiB0byBgZm9ybWF0VmFsdWUoKWAuIFJlbmFtZSBgY29sb3JGb3JtYXRgIGJhY2sgdG8gYGZvcm1hdGAgYWZ0ZXIuXG4gICAgY29sb3JGb3JtYXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdmb3JtYXQnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiAnaGV4J1xuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93QWxwaGFgP1xuICAgIGFscGhhOiBnZXRTY2hlbWFBY2Nlc3NvcignYWxwaGEnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0lucHV0c2A/XG4gICAgaW5wdXRzOiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXRzJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9KSxcblxuICAgIHByZXNldHM6IGdldFNjaGVtYUFjY2Vzc29yKCdwcmVzZXRzJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBkZWZhdWx0OiBbXG4gICAgICAgICcjZmZmZmZmJyxcbiAgICAgICAgJyNjM2MzYzMnLFxuICAgICAgICAnIzdmN2Y3ZicsXG4gICAgICAgICcjMDAwMDAwJyxcbiAgICAgICAgJyM4ODAwMTUnLFxuICAgICAgICAnI2VkMWMyNCcsXG4gICAgICAgICcjZmY3ZjI3JyxcbiAgICAgICAgJyNmZmYyMDAnLFxuXG4gICAgICAgICcjMjJiMTRjJyxcbiAgICAgICAgJyMwMGEyZTgnLFxuICAgICAgICAnIzNmNDhjYycsXG4gICAgICAgICcjYTM0OWE0JyxcbiAgICAgICAgJyNiOTdhNTcnLFxuICAgICAgICAnI2ZmYWVjOScsXG4gICAgICAgICcjZmZjOTBlJyxcbiAgICAgICAgJyMwMDAwMDAwMCdcbiAgICAgIF1cbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuJGNvbG9yLXN3YXRjaC13aWR0aDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5LXNpemU7XG4kY29sb3Itc3dhdGNoLXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAkYm9yZGVyLXdpZHRoO1xuXG4uZGl0by1jb2xvciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICBpbnB1dCB7XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICAgIHBhZGRpbmctcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGg7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tYnV0dG9uLWNsZWFyIHtcbiAgICBtYXJnaW4tcmlnaHQ6ICRjb2xvci1zd2F0Y2gtd2lkdGg7XG4gIH1cblxuICAuZGl0by1jb2xvci1waWNrZXIge1xuICAgIG1hcmdpbjogJHBvcHVwLW1hcmdpbjtcbiAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuICB9XG5cbiAgLmRpdG8tY29sb3ItcHJldmlldyB7XG4gICAgYmFja2dyb3VuZDogJHBhdHRlcm4tdHJhbnNwYXJlbmN5O1xuICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlO1xuXG4gICAgJixcbiAgICBkaXYge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgd2lkdGg6ICRjb2xvci1zd2F0Y2gtd2lkdGg7XG4gICAgICB0b3A6IDA7XG4gICAgICByaWdodDogMDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1cztcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkY29sb3Itc3dhdGNoLXJhZGl1cztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuY29tcG9uZW50KFxuICA6aXM9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgdi1iaW5kPVwiJHByb3BzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG4vLyBUaGlzIGlzIHRoZSBnZW5lcmFsIHB1cnBvc2UgJ2NvbXBvbmVudCcgdHlwZSwgd2hpY2ggY2FuIHJlc29sdmUgdG8gYW55IGN1c3RvbVxuLy8gY29tcG9uZW50IHRocm91Z2ggYHNjaGVtYS5jb21wb25lbnRgLCBzZWUgYHJlc29sdmVTY2hlbWFDb21wb25lbnQoKWAuIFRoaXNcbi8vIGNhbiBiZSB1c2VkIHRvIG5lc3QgYXJiaXRyYXJ5IHZ1ZSBjb21wb25lbnRzIGluIHNjaGVtYTpcbi8vIHtcbi8vICAgdHlwZTogJ2NvbXBvbmVudCcsXG4vLyAgIGNvbXBvbmVudDogaW1wb3J0KCcuL2NvbXBvbmVudCcpXG4vLyB9XG5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IHJlc29sdmVTY2hlbWFDb21wb25lbnQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY29tcG9uZW50Jywge1xuICAvLyBPdmVycmlkZSB0aGUgc3RhbmRhcmQgYGRlZmF1bHRWYWx1ZTogbnVsbGAgdG8gbm90IHNldCBhbnkgZGF0YSBmb3IgY3VzdG9tXG4gIC8vIGNvbXBvbmVudHMsIHVubGVzcyB0aGV5IHByb3ZpZGUgYSBkZWZhdWx0IHZhbHVlLlxuICBkZWZhdWx0VmFsdWU6ICgpID0+IHVuZGVmaW5lZCwgLy8gQ2FsbGJhY2sgdG8gb3ZlcnJpZGUgYGRlZmF1bHRWYWx1ZTogbnVsbGBcbiAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gISgnZGVmYXVsdCcgaW4gc2NoZW1hKSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKGFwaSwgc2NoZW1hKSB7XG4gICAgYXdhaXQgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpXG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gVE9ETzogRmluZCBhIGJldHRlciB3YXkgdG8gdHJpZ2dlciBldmFsdWF0aW9uIG9mIGB2YWx1ZWAgdGhhdCBkb3NlIG5vdFxuLy8tIGludm9sdmUgYWN0dWFsbHkgcmVuZGVyaW5nIGl0IHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgdmlzaWJsZS5cbmlucHV0LmRpdG8tdGV4dC5kaXRvLWlucHV0KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICA6bmFtZT1cIm5hbWVcIlxuICB0eXBlPVwidGV4dFwiXG4gIDp2YWx1ZT1cInZhbHVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6cmVhZG9ubHk9XCJ0cnVlXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgVHlwZU1peGluIGZyb20gJy4uL21peGlucy9UeXBlTWl4aW4uanMnXG5pbXBvcnQgRGF0YU1peGluIGZyb20gJy4uL21peGlucy9EYXRhTWl4aW4uanMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ2NvbXB1dGVkJywgJ2RhdGEnLCAnaGlkZGVuJ10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBtaXhpbnM6IFtEYXRhTWl4aW5dLFxuXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gICAgZGVmYXVsdFZpc2libGU6IGZhbHNlLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICBjb25zdCB7IHNjaGVtYSB9ID0gdGhpc1xuICAgICAgICAgIGlmIChzY2hlbWEuZGF0YSB8fCBzY2hlbWEuZGF0YVBhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5oYW5kbGVEYXRhU2NoZW1hKHNjaGVtYSwgJ3NjaGVtYScpXG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMuZGF0YVt0aGlzLm5hbWVdID0gdmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFR5cGVNaXhpbi5jb21wdXRlZC52YWx1ZS5nZXQuY2FsbCh0aGlzKVxuICAgICAgICB9LFxuXG4gICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgIFR5cGVNaXhpbi5jb21wdXRlZC52YWx1ZS5zZXQuY2FsbCh0aGlzLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZGF0ZVxuICBjb21wb25lbnQoXG4gICAgOmlzPVwiZ2V0Q29tcG9uZW50KHR5cGUpXCJcbiAgICA6aWQ9XCJkYXRhUGF0aFwiXG4gICAgcmVmPVwiZWxlbWVudFwiXG4gICAgdi1tb2RlbD1cImRhdGVWYWx1ZVwiXG4gICAgOmxvY2FsZT1cImxvY2FsZVwiXG4gICAgOmZvcm1hdD1cImZvcm1hdHNcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICApXG4gICAgdGVtcGxhdGUoI2FmdGVyKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgICAgICBAbW91c2Vkb3duLnN0b3BcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRGF0ZVBpY2tlciwgVGltZVBpY2tlciwgRGF0ZVRpbWVQaWNrZXIgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7IGlzRGF0ZSwgYXNzaWduRGVlcGx5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnZGF0ZScsICdkYXRldGltZScsICd0aW1lJ10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBjb21wb25lbnRzOiB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIsIERhdGVUaW1lUGlja2VyIH0sXG4gICAgLy8gVE9ETzogVGhpcyBpcyBvbmx5IGhlcmUgc28gd2UgZ2V0IHBsYWNlaG9sZGVyIGFkZGVkLiBDb21lIHVwIHdpdGggYVxuICAgIC8vIGJldHRlciB3YXkgdG8gc3VwcG9ydCBhdHRyaWJ1dGVzIHBlciBjb21wb25lbnQgKGEgbGlzdCBvZiBhY3R1YWxseVxuICAgIC8vIHN1cHBvcnRlZCBhdHRyaWJ1dGVzKVxuICAgIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICAgIHRleHRGaWVsZDogdHJ1ZSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBkYXRlVmFsdWU6IHtcbiAgICAgICAgZ2V0KCkge1xuICAgICAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgICAgICByZXR1cm4gdmFsdWUgPyBuZXcgRGF0ZSh2YWx1ZSkgOiB2YWx1ZVxuICAgICAgICB9LFxuXG4gICAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYGZvcm1hdGAsIG9uY2UgYHNjaGVtYS5mb3JtYXQoKWAgd2FzIHJlbW92ZWQgdG9cbiAgICAgIC8vIGBmb3JtYXRWYWx1ZSgpYC5cbiAgICAgIGZvcm1hdHM6IGdldFNjaGVtYUFjY2Vzc29yKCdmb3JtYXRzJywge1xuICAgICAgICB0eXBlOiBPYmplY3QsXG4gICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgIGdldChmb3JtYXRzKSB7XG4gICAgICAgICAgY29uc3QgeyBkYXRlLCB0aW1lIH0gPSBhc3NpZ25EZWVwbHkoe30sIHRoaXMuYXBpLmZvcm1hdHMsIGZvcm1hdHMpXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRhdGU6IFsnZGF0ZScsICdkYXRldGltZSddLmluY2x1ZGVzKHRoaXMudHlwZSkgPyBkYXRlIDogbnVsbCxcbiAgICAgICAgICAgIHRpbWU6IFsndGltZScsICdkYXRldGltZSddLmluY2x1ZGVzKHRoaXMudHlwZSkgPyB0aW1lIDogbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgZ2V0Q29tcG9uZW50KHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkYXRlOiAnZGF0ZS1waWNrZXInLFxuICAgICAgICAgIHRpbWU6ICd0aW1lLXBpY2tlcicsXG4gICAgICAgICAgZGF0ZXRpbWU6ICdkYXRlLXRpbWUtcGlja2VyJ1xuICAgICAgICB9W3R5cGVdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlKSB7XG4gICAgICByZXR1cm4gaXNEYXRlKHZhbHVlKSA/IHZhbHVlLnRvSVNPU3RyaW5nKCkgOiB2YWx1ZVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGZ1bmN0aW9uIGZvcm1hdFF1ZXJ5KHF1ZXJ5KSB7XG4gIGNvbnN0IGVudHJpZXMgPSBxdWVyeVxuICAgID8gaXNBcnJheShxdWVyeSlcbiAgICAgID8gcXVlcnlcbiAgICAgIDogT2JqZWN0LmVudHJpZXMocXVlcnkpXG4gICAgOiBbXVxuICByZXR1cm4gKFxuICAgIG5ldyBVUkxTZWFyY2hQYXJhbXMoXG4gICAgICAvLyBFeHBhbmQgYXJyYXkgdmFsdWVzIGludG8gbXVsdGlwbGUgZW50cmllcyB1bmRlciB0aGUgc2FtZSBrZXksIHNvXG4gICAgICAvLyBgZm9ybWF0UXVlcnkoeyBmb286IFsxLCAyXSwgYmFyOiAzIH0pYCA9PiAnZm9vPTEmZm9vPTImYmFyPTMnLlxuICAgICAgZW50cmllcy5yZWR1Y2UoXG4gICAgICAgIChlbnRyaWVzLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiBhc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgZW50cmllcy5wdXNoKFtrZXksIHZhbF0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgICAgIH0sXG4gICAgICAgIFtdXG4gICAgICApXG4gICAgKVxuICAgICAgLnRvU3RyaW5nKClcbiAgICAgIC8vIGRlY29kZSBhbGwgdGhlc2UgZW5jb2RlZCBjaGFyYWN0ZXJzIHRvIGhhdmUgdGhlIHNhbWUgYmVoYXZpb3IgYXNcbiAgICAgIC8vIHZ1ZS1yb3V0ZXIncyBvd24gcXVlcnkgZW5jb2RpbmcuXG4gICAgICAucmVwbGFjZUFsbCgvJSg/OjIxfDI0fDI4fDI5fDJDfDJGfDNBfDNCfDNEfDNGfDQwKS9nLCBkZWNvZGVVUklDb21wb25lbnQpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VSb3V0ZSh7IHBhdGgsIHF1ZXJ5LCBoYXNoIH0pIHtcbiAgLy8gUHJlc2VydmUgYGhpc3Rvcnkuc3RhdGVgLCBzZWU6XG4gIC8vIGh0dHBzOi8vcm91dGVyLnZ1ZWpzLm9yZy9ndWlkZS9taWdyYXRpb24vI3VzYWdlLW9mLWhpc3Rvcnktc3RhdGVcbiAgaGlzdG9yeS5yZXBsYWNlU3RhdGUoXG4gICAgaGlzdG9yeS5zdGF0ZSxcbiAgICBudWxsLFxuICAgIGAke1xuICAgICAgbG9jYXRpb24ub3JpZ2luXG4gICAgfSR7XG4gICAgICBwYXRoID8/IGxvY2F0aW9uLnBhdGhuYW1lXG4gICAgfT8ke1xuICAgICAgcXVlcnkgPyBmb3JtYXRRdWVyeShxdWVyeSkgOiBsb2NhdGlvbi5zZWFyY2guc2xpY2UoMSlcbiAgICB9JHtcbiAgICAgIGhhc2ggPz8gbG9jYXRpb24uaGFzaFxuICAgIH1gXG4gIClcbn1cbiIsImltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4vSXRlbU1peGluLmpzJ1xuaW1wb3J0IFJlc291cmNlTWl4aW4gZnJvbSAnLi9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IFNjaGVtYVBhcmVudE1peGluIGZyb20gJy4uL21peGlucy9TY2hlbWFQYXJlbnRNaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yLCBnZXRTdG9yZUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgcmVwbGFjZVJvdXRlIH0gZnJvbSAnLi4vdXRpbHMvcm91dGUuanMnXG5pbXBvcnQge1xuICBwcm9jZXNzUm91dGVTY2hlbWEsXG4gIHByb2Nlc3NGb3JtcyxcbiAgZ2V0TmFtZWRTY2hlbWFzLFxuICBnZXRCdXR0b25TY2hlbWFzLFxuICBoYXNGb3JtU2NoZW1hLFxuICBnZXRGb3JtU2NoZW1hcyxcbiAgZ2V0Vmlld1NjaGVtYSxcbiAgaXNDb21wYWN0LFxuICBpc0lubGluZWQsXG4gIGlzT2JqZWN0U291cmNlLFxuICBpc0xpc3RTb3VyY2Vcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzU3RyaW5nLFxuICBpc0FycmF5LFxuICBpc051bWJlcixcbiAgZXF1YWxzLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtJdGVtTWl4aW4sIFJlc291cmNlTWl4aW4sIFNjaGVtYVBhcmVudE1peGluXSxcblxuICBkZWZhdWx0VmFsdWUoc2NoZW1hKSB7XG4gICAgcmV0dXJuIGlzTGlzdFNvdXJjZShzY2hlbWEpID8gW10gOiBudWxsXG4gIH0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB3cmFwcGVkUHJpbWl0aXZlczogbnVsbCxcbiAgICAgIHVud3JhcHBpbmdQcmltaXRpdmVzOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIGlzT2JqZWN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzT2JqZWN0U291cmNlKHRoaXMudHlwZSlcbiAgICB9LFxuXG4gICAgaXNMaXN0U291cmNlKCkge1xuICAgICAgcmV0dXJuIGlzTGlzdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmhhc0RhdGEoKVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLnZhbHVlXG4gICAgfSxcblxuICAgIGlzUmVhZHkoKSB7XG4gICAgICAvLyBMaXN0cyB0aGF0IGhhdmUgbm8gZGF0YSBhbmQgbm8gYXNzb2NpYXRlZCByZXNvdXJjZSBzaG91bGQgc3RpbGwgcmVuZGVyLFxuICAgICAgLy8gYXMgdGhleSBtYXkgYmUgZ2V0dGluZyB0aGVpciBkYXRhIGVsc2V3aGVyZSwgZS5nLiBgY29tcHV0ZSgpYC5cbiAgICAgIHJldHVybiB0aGlzLmhhc0RhdGEgfHwgIXRoaXMucHJvdmlkZXNEYXRhXG4gICAgfSxcblxuICAgIGlzSW5WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3Q29tcG9uZW50XG4gICAgfSxcblxuICAgIHdyYXBQcmltaXRpdmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLndyYXBQcmltaXRpdmVzXG4gICAgfSxcblxuICAgIGxpc3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGxldCBkYXRhID0gdGhpcy52YWx1ZVxuICAgICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICAgIC8vIENvbnZlcnQgdG8gbGlzdCBhcnJheS5cbiAgICAgICAgICBkYXRhID0gZGF0YSAhPSBudWxsID8gW2RhdGFdIDogW11cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBJZiBkYXRhIGdldHMgaW5oZXJpdGVkIGZyb20gcGFyZW50LCB1bndyYXBwaW5nIGlzIG5vdCBoYXBwZW5pbmdcbiAgICAgICAgICAvLyBhdCB0aGUgcm9vdCBpbiBgc2V0RGF0YSgpYCwgYnV0IGhlcmUgaW5zdGVhZC5cbiAgICAgICAgICBkYXRhID0gdGhpcy51bndyYXBMaXN0RGF0YShkYXRhKSB8fCBkYXRhXG4gICAgICAgIH1cbiAgICAgICAgZGF0YSB8fD0gW11cbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICBpZiAodGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcykge1xuICAgICAgICAgICAgLy8gV2UncmUgZG9uZSB1bndyYXBwaW5nIG9uY2UgYGxpc3REYXRhYCBpcyByZWV2YWx1YXRlZCwgc28gc2V0XG4gICAgICAgICAgICAvLyB0aGlzIHRvIGBmYWxzZWAgYWdhaW4uIFNlZSBgd3JhcHBlZFByaW1pdGl2ZXNgIHdhdGNoZXIgYWJvdmUuXG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBDb252ZXJ0IGRhdGEgdG8gYSBsaXN0IG9mIHdyYXBwZWQgcHJpbWl0aXZlcywgYW5kIHJldHVybiBpdC5cbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGEubWFwKHZhbHVlID0+ICh7XG4gICAgICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IHZhbHVlXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRoaXMud3JhcHBlZFByaW1pdGl2ZXNcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMud3JhcFByaW1pdGl2ZXMpIHtcbiAgICAgICAgICB0aGlzLndyYXBwZWRQcmltaXRpdmVzID0gZGF0YVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/IGRhdGEgJiYgZGF0YS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgID8gZGF0YVswXVxuICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgIDogZGF0YVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG9iamVjdERhdGE6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gQWx3YXlzIGdvIHRocm91Z2ggYGxpc3REYXRhYCBpbnRlcm5hbGx5LCB3aGljaCBkb2VzIGFsbCB0aGVcbiAgICAgICAgLy8gcHJvY2Vzc2luZyBvZiBgd3JhcFByaW1pdGl2ZXNgLCBldGMuXG4gICAgICAgIHJldHVybiB0aGlzLmxpc3REYXRhWzBdIHx8IG51bGxcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIHRoaXMubGlzdERhdGEgPSBkYXRhID8gW2RhdGFdIDogW11cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc291cmNlU2NoZW1hKCkge1xuICAgICAgLy8gVGhlIHNvdXJjZVNjaGVtYSBvZiBhIGxpc3QgaXMgdGhlIGxpc3QncyBzY2hlbWEgaXRzZWxmLlxuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hXG4gICAgfSxcblxuICAgIHBhdGgoKSB7XG4gICAgICAvLyBUaGlzIGlzIHVzZWQgaW4gVHlwZUxpc3QgZm9yIERpdG9Gb3JtQ2hvb3Nlci5cbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50LmdldENoaWxkUGF0aCh0aGlzLnNjaGVtYS5wYXRoKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0UXVlcnkoKSB7XG4gICAgICBjb25zdCB7IGRlZmF1bHRPcmRlcjogb3JkZXIgfSA9IHRoaXNcbiAgICAgIHJldHVybiBvcmRlciA/IHsgb3JkZXIgfSA6IHt9XG4gICAgfSxcblxuICAgIHF1ZXJ5OiBnZXRTdG9yZUFjY2Vzc29yKCdxdWVyeScsIHtcbiAgICAgIGdldChxdWVyeSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnRoaXMuZGVmYXVsdFF1ZXJ5LFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIHNldChxdWVyeSkge1xuICAgICAgICAvLyBBbHdheXMga2VlcCB0aGUgZGlzcGxheWVkIHF1ZXJ5IHBhcmFtZXRlcnMgaW4gc3luYyB3aXRoIHRoZSBzdG9yZWRcbiAgICAgICAgLy8gb25lcy4gVXNlIHNjb3BlIGFuZCBwYWdlIGZyb20gdGhlIGxpc3Qgc2NoZW1hIGFzIGRlZmF1bHRzLCBidXQgYWxsb3dcbiAgICAgICAgLy8gdGhlIHJvdXRlIHF1ZXJ5IHBhcmFtZXRlcnMgdG8gb3ZlcnJpZGUgdGhlbS5cbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHNjb3BlID0gdGhpcy5kZWZhdWx0U2NvcGU/Lm5hbWUsXG4gICAgICAgICAgcGFnZSA9IHRoaXMuc2NoZW1hLnBhZ2VcbiAgICAgICAgfSA9IHRoaXMucXVlcnlcbiAgICAgICAgLy8gUHJlc2VydmUgLyBtZXJnZSBjdXJyZW50bHkgc3RvcmVkIHZhbHVlcy5cbiAgICAgICAgcXVlcnkgPSB7XG4gICAgICAgICAgLi4udGhpcy5xdWVyeSxcbiAgICAgICAgICAuLi4oc2NvcGUgIT0gbnVsbCAmJiB7IHNjb3BlIH0pLFxuICAgICAgICAgIC4uLihwYWdlICE9IG51bGwgJiYgeyBwYWdlIH0pLFxuICAgICAgICAgIC4uLnF1ZXJ5XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFlcXVhbHMocXVlcnksIHRoaXMuJHJvdXRlLnF1ZXJ5KSkge1xuICAgICAgICAgIC8vIENoYW5nZSB0aGUgcm91dGUgcXVlcnkgcGFyYW1ldGVycywgYnV0IGRvbid0IHRyaWdnZXIgYSByb3V0ZVxuICAgICAgICAgIC8vIGNoYW5nZSwgYXMgdGhhdCB3b3VsZCBjYXVzZSB0aGUgbGlzdCB0byByZWxvYWQuXG4gICAgICAgICAgcmVwbGFjZVJvdXRlKHsgcXVlcnkgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcXVlcnkgLy8gTGV0IGdldFN0b3JlQWNjZXNzb3IoKSBkbyB0aGUgYWN0dWFsIHNldHRpbmdcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHRvdGFsOiBnZXRTdG9yZUFjY2Vzc29yKCd0b3RhbCcpLFxuXG4gICAgY29sdW1ucygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuY29sdW1ucylcbiAgICB9LFxuXG4gICAgc2NvcGVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5zY29wZXMpXG4gICAgfSxcblxuICAgIGRlZmF1bHRTY29wZSgpIHtcbiAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgIGlmICh0aGlzLnNjb3Blcykge1xuICAgICAgICBmb3IgKGNvbnN0IHNjb3BlIG9mIE9iamVjdC52YWx1ZXModGhpcy5zY29wZXMpKSB7XG4gICAgICAgICAgaWYgKHNjb3BlLmRlZmF1bHRTY29wZSkge1xuICAgICAgICAgICAgcmV0dXJuIHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgICAgIGZpcnN0ID0gc2NvcGVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBmaXJzdFxuICAgIH0sXG5cbiAgICBkZWZhdWx0T3JkZXIoKSB7XG4gICAgICBpZiAodGhpcy5jb2x1bW5zKSB7XG4gICAgICAgIGZvciAoY29uc3QgY29sdW1uIG9mIE9iamVjdC52YWx1ZXModGhpcy5jb2x1bW5zKSkge1xuICAgICAgICAgIGNvbnN0IHsgZGVmYXVsdFNvcnQgfSA9IGNvbHVtblxuICAgICAgICAgIGlmIChkZWZhdWx0U29ydCkge1xuICAgICAgICAgICAgY29uc3QgZGlyZWN0aW9uID0gaXNTdHJpbmcoZGVmYXVsdFNvcnQpID8gZGVmYXVsdFNvcnQgOiAnYXNjJ1xuICAgICAgICAgICAgcmV0dXJuIGAke2NvbHVtbi5uYW1lfSAke2RpcmVjdGlvbn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0sXG5cbiAgICBuZXN0ZWRNZXRhKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udGhpcy5tZXRhLFxuICAgICAgICBzY2hlbWE6IHRoaXMuc2NoZW1hXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXMoZ2V0Rm9ybVNjaGVtYXModGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dCkpXG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGxpbmtlZCB2aWV3IHNjaGVtYSBpZiB0aGlzIHNvdXJjZSBlZGl0cyBpdCBpdHMgaXRlbXMgdGhyb3VnaFxuICAgIC8vIGEgbGlua2VkIHZpZXcuXG4gICAgdmlldygpIHtcbiAgICAgIHJldHVybiBnZXRWaWV3U2NoZW1hKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGxpbmtzVG9WaWV3KCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52aWV3XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICBpc0NvbXBhY3QoKSB7XG4gICAgICByZXR1cm4gdGhpcy5mb3Jtcy5ldmVyeShpc0NvbXBhY3QpXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfSxcblxuICAgIHBhZ2luYXRlOiBnZXRTY2hlbWFBY2Nlc3NvcigncGFnaW5hdGUnLCB7XG4gICAgICB0eXBlOiBOdW1iZXJcbiAgICB9KSxcblxuICAgIHJlbmRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JlbmRlcicsIHtcbiAgICAgIHR5cGU6IEZ1bmN0aW9uLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgY3JlYXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY3JlYXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGNyZWF0YWJsZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICAgICAgPyB0aGlzLmlzT2JqZWN0U291cmNlXG4gICAgICAgICAgICA/ICF0aGlzLnZhbHVlXG4gICAgICAgICAgICA6IHRydWVcbiAgICAgICAgICA6IGZhbHNlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBlZGl0YWJsZSAmJiAhdGhpcy5pc0lubGluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2UgJiYgdGhpcy5saXN0RGF0YS5sZW5ndGggPiAxICYmIGRyYWdnYWJsZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsLCAvLyBzbyB0aGF0IGA/P2AgYmVsb3cgY2FuIGRvIGl0cyB0aGluZzpcbiAgICAgIGdldChjb2xsYXBzaWJsZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5pc0lubGluZWQgJiYgISEoY29sbGFwc2libGUgPz8gdGhpcy5jb2xsYXBzZWQgIT09IG51bGwpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGU6IHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8zMzkzI2lzc3VlY29tbWVudC0xMTU4NDcwMTQ5XG4gICAgICBmbHVzaDogJ3Bvc3QnLFxuICAgICAgaGFuZGxlcih0bywgZnJvbSkge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5wcm92aWRlc0RhdGEgJiZcbiAgICAgICAgICBmcm9tLnBhdGggPT09IHRvLnBhdGggJiZcbiAgICAgICAgICBmcm9tLmhhc2ggPT09IHRvLmhhc2hcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gUGF0aHMgYW5kIGhhc2hlcyByZW1haW4gdGhlIHNhbWUsIHNvIG9ubHkgcXVlcmllcyBoYXZlIGNoYW5nZWQuXG4gICAgICAgICAgLy8gVXBkYXRlIGZpbHRlciBhbmQgcmVsb2FkIGRhdGEgd2l0aG91dCBjbGVhcmluZy5cbiAgICAgICAgICB0aGlzLnF1ZXJ5ID0gdG8ucXVlcnlcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKGZhbHNlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHdyYXBwZWRQcmltaXRpdmVzOiB7XG4gICAgICBkZWVwOiB0cnVlLFxuICAgICAgaGFuZGxlcih0bywgZnJvbSkge1xuICAgICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzIH0gPSB0aGlzXG4gICAgICAgIC8vIFNraXAgdGhlIGluaXRpYWwgc2V0dGluZyBvZiB3cmFwcGVkUHJpbWl0aXZlcyBhcnJheVxuICAgICAgICBpZiAod3JhcFByaW1pdGl2ZXMgJiYgZnJvbSAhPT0gbnVsbCkge1xuICAgICAgICAgIC8vIFdoZW5ldmVyIHRoZSB3cmFwcGVkUHJpbWl0aXZlcyBjaGFuZ2UsIG1hcCB0aGVpciB2YWx1ZXMgYmFjayB0b1xuICAgICAgICAgIC8vIHRoZSBhcnJheSBvZiBwcmltaXRpdmVzLCBpbiBhIHByaW1pdGl2ZSB3YXkgOilcbiAgICAgICAgICAvLyBCdXQgc2V0IGB1bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVgLCBzbyB0aGUgYGxpc3REYXRhYCBjb21wdXRlZFxuICAgICAgICAgIC8vIHByb3BlcnR5IGtub3dzIGFib3V0IGl0LCB3aGljaCBzZXRzIGl0IHRvIGBmYWxzZWAgYWdhaW4uXG4gICAgICAgICAgdGhpcy51bndyYXBwaW5nUHJpbWl0aXZlcyA9IHRydWVcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdG8ubWFwKG9iamVjdCA9PiBvYmplY3Rbd3JhcFByaW1pdGl2ZXNdKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXR1cERhdGEoKSB7XG4gICAgICB0aGlzLnF1ZXJ5ID0gdGhpcy4kcm91dGUucXVlcnlcbiAgICAgIHRoaXMuZW5zdXJlRGF0YSgpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLmNsZWFyRGF0YSgpXG4gICAgY2xlYXJEYXRhKCkge1xuICAgICAgdGhpcy50b3RhbCA9IDBcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkZSBSZXNvdXJjZU1peGluLnNldERhdGEoKVxuICAgIHNldERhdGEoZGF0YSkge1xuICAgICAgLy8gV2hlbiBuZXcgZGF0YSBpcyBsb2FkZWQsIHdlIGNhbiBzdG9yZSBpdCByaWdodCBiYWNrIGluIHRoZSBkYXRhIG9mIHRoZVxuICAgICAgLy8gdmlldyBvciBmb3JtIHRoYXQgY3JlYXRlZCB0aGlzIGxpc3QgY29tcG9uZW50LlxuICAgICAgLy8gU3VwcG9ydCB0d28gZm9ybWF0cyBmb3IgbGlzdCBkYXRhOlxuICAgICAgLy8gLSBBcnJheTogYFsuLi5dYFxuICAgICAgLy8gLSBPYmplY3Q6IGB7IHJlc3VsdHM6IFsuLi5dLCB0b3RhbCB9YCwgc2VlIGB1bndyYXBMaXN0RGF0YSgpYFxuICAgICAgaWYgKFxuICAgICAgICAhZGF0YSB8fFxuICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZSAmJiBpc0FycmF5KGRhdGEpIHx8XG4gICAgICAgIHRoaXMuaXNPYmplY3RTb3VyY2UgJiYgaXNPYmplY3QoZGF0YSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YVxuICAgICAgfSBlbHNlIGlmICh0aGlzLnVud3JhcExpc3REYXRhKGRhdGEpKSB7XG4gICAgICAgIC8vIFRoZSBmb3JtYXQgZGlkbid0IG1hdGNoLCBzZWUgaWYgd2UgcmVjZWl2ZWQgYSBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyBvYmplY3QsIGluIHdoaWNoIGNhc2UgYHRoaXMudmFsdWVgIHdhcyBhbHJlYWR5IHNldCBieVxuICAgICAgICAvLyBgdW53cmFwTGlzdERhdGEoKWAgYW5kIHdlJ3JlIGRvbmUgbm93LlxuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkYXRhKSAmJiB0aGlzLmlzSW5WaWV3KSB7XG4gICAgICAgIC8vIFRoZSBjb250cm9sbGVyIGlzIHNlbmRpbmcgZGF0YSBmb3IgYSBmdWxsIG11bHRpLWNvbXBvbmVudCB2aWV3LFxuICAgICAgICAvLyBpbmNsdWRpbmcgdGhlIG5lc3RlZCBsaXN0IGRhdGEuXG4gICAgICAgIHRoaXMudmlld0NvbXBvbmVudC5zZXREYXRhKGRhdGEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHVud3JhcExpc3REYXRhKGRhdGEpIHtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2UgJiZcbiAgICAgICAgaXNPYmplY3QoZGF0YSkgJiZcbiAgICAgICAgaXNOdW1iZXIoZGF0YS50b3RhbCkgJiZcbiAgICAgICAgaXNBcnJheShkYXRhLnJlc3VsdHMpXG4gICAgICApIHtcbiAgICAgICAgLy8gSWYgQGRpdG9qcy9zZXJ2ZXIgc2VuZHMgZGF0YSBpbiB0aGUgZm9ybSBvZiBgeyByZXN1bHRzLCB0b3RhbCB9YFxuICAgICAgICAvLyByZXBsYWNlIHRoZSB2YWx1ZSB3aXRoIHJlc3VsdCwgYnV0IHJlbWVtYmVyIHRoZSB0b3RhbCBpbiB0aGUgc3RvcmUuXG4gICAgICAgIHRoaXMudG90YWwgPSBkYXRhLnRvdGFsXG4gICAgICAgIHRoaXMudmFsdWUgPSBkYXRhLnJlc3VsdHNcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3JlYXRlSXRlbShzY2hlbWEsIHR5cGUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLmNyZWF0ZURhdGEoc2NoZW1hLCB0eXBlKVxuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gaXRlbVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5saXN0RGF0YS5wdXNoKGl0ZW0pXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB0aGlzLm9wZW5TY2hlbWFDb21wb25lbnQoLTEpKVxuICAgICAgfVxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICByZXR1cm4gaXRlbVxuICAgIH0sXG5cbiAgICByZW1vdmVJdGVtKGl0ZW0sIGluZGV4KSB7XG4gICAgICBsZXQgcmVtb3ZlZCA9IGZhbHNlXG4gICAgICBpZiAodGhpcy5pc09iamVjdFNvdXJjZSkge1xuICAgICAgICB0aGlzLm9iamVjdERhdGEgPSBudWxsXG4gICAgICAgIHJlbW92ZWQgPSB0cnVlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB7IGxpc3REYXRhIH0gPSB0aGlzXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgbGlzdERhdGEuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgICAgIHJlbW92ZWQgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyZW1vdmVkKSB7XG4gICAgICAgIHRoaXMucmVtb3ZlSXRlbVN0b3JlKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IGxhYmVsID0gKFxuICAgICAgICBpdGVtICYmXG4gICAgICAgIHRoaXMuZ2V0SXRlbUxhYmVsKHRoaXMuc2NoZW1hLCBpdGVtLCB7XG4gICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgZXh0ZW5kZWQ6IHRydWVcbiAgICAgICAgfSlcbiAgICAgIClcblxuICAgICAgY29uc3Qgbm90aWZ5ID0gKCkgPT5cbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6IHRoaXMuaXNUcmFuc2llbnQgPyAnaW5mbycgOiAnc3VjY2VzcycsXG4gICAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgICAgdGV4dDogW1xuICAgICAgICAgICAgYCR7bGFiZWx9IHdhcyAke3RoaXMudmVyYnMuZGVsZXRlZH0uYCxcbiAgICAgICAgICAgIHRoaXMudHJhbnNpZW50Tm90ZVxuICAgICAgICAgIF1cbiAgICAgICAgfSlcblxuICAgICAgaWYgKFxuICAgICAgICBpdGVtICYmXG4gICAgICAgIHdpbmRvdy5jb25maXJtKFxuICAgICAgICAgIGBEbyB5b3UgcmVhbGx5IHdhbnQgdG8gJHt0aGlzLnZlcmJzLmRlbGV0ZX0gJHtsYWJlbH0/YFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgaW5kZXgpXG4gICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpdGVtSWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSwgaW5kZXgpXG4gICAgICAgICAgY29uc3QgcmVzb3VyY2UgPSBnZXRNZW1iZXJSZXNvdXJjZShpdGVtSWQsIHRoaXMucmVzb3VyY2UpXG4gICAgICAgICAgaWYgKHJlc291cmNlKSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVJlcXVlc3QoeyBtZXRob2Q6ICdkZWxldGUnLCByZXNvdXJjZSB9LCBlcnIgPT4ge1xuICAgICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICAgIHRoaXMucmVtb3ZlSXRlbShpdGVtLCBpbmRleClcbiAgICAgICAgICAgICAgICBub3RpZnkoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHRoaXMucmVsb2FkRGF0YSgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgc2NoZW1hQ29tcG9uZW50cyB9ID0gdGhpc1xuICAgICAgY29uc3QgeyBsZW5ndGggfSA9IHNjaGVtYUNvbXBvbmVudHNcbiAgICAgIHJldHVybiBzY2hlbWFDb21wb25lbnRzWygoaW5kZXggJSBsZW5ndGgpICsgbGVuZ3RoKSAlIGxlbmd0aF1cbiAgICB9LFxuXG4gICAgb3BlblNjaGVtYUNvbXBvbmVudChpbmRleCkge1xuICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoaW5kZXgpXG4gICAgICBpZiAoc2NoZW1hQ29tcG9uZW50KSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlVG9Db21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIGlmICh0aGlzLmNvbGxhcHNpYmxlKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gZGF0YVBhdGguc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICAgID8gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICAgID8gcGFyc2VEYXRhUGF0aChkYXRhUGF0aC5zbGljZSh0aGlzLmRhdGFQYXRoLmxlbmd0aCArIDEpKVswXSA/PyBudWxsXG4gICAgICAgICAgICA6IDBcbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgaWYgKGluZGV4ICE9PSBudWxsICYmIGlzTnVtYmVyKCtpbmRleCkpIHtcbiAgICAgICAgICBjb25zdCBzY2hlbWFDb21wb25lbnQgPSB0aGlzLmdldFNjaGVtYUNvbXBvbmVudCgraW5kZXgpXG4gICAgICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICAgICAgY29uc3QgeyBvcGVuZWQgfSA9IHNjaGVtYUNvbXBvbmVudFxuICAgICAgICAgICAgaWYgKCFvcGVuZWQpIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IHRydWVcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy4kbmV4dFRpY2soKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgICAgIGlmIChjb21wb25lbnRzLmxlbmd0aCA+IDAgJiYgKG9uQ29tcGxldGU/Lihjb21wb25lbnRzKSA/PyB0cnVlKSkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2NoZW1hQ29tcG9uZW50Lm9wZW5lZCA9IG9wZW5lZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMubmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKVxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZVRvUm91dGVDb21wb25lbnQoZGF0YVBhdGgsIG9uQ29tcGxldGUpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbGxPbkNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgICAgIC8vIFJldHJpZXZlIHRoZSBsYXN0IHJvdXRlIGNvbXBvbmVudCwgd2hpY2ggd2lsbCBiZSB0aGUgY29tcG9uZW50IHRoYXRcbiAgICAgICAgICAvLyB3ZSBqdXN0IG5hdmlnYXRlZCB0bywgYW5kIHBhc3MgaXQgb24gdG8gYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICBjb25zdCB7IHJvdXRlQ29tcG9uZW50cyB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgICAgICAgIGNvbnN0IHJvdXRlQ29tcG9uZW50ID0gcm91dGVDb21wb25lbnRzW3JvdXRlQ29tcG9uZW50cy5sZW5ndGggLSAxXVxuICAgICAgICAgIHJlc29sdmUob25Db21wbGV0ZT8uKFtyb3V0ZUNvbXBvbmVudF0pID8/IHRydWUpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRhUGF0aFBhcnRzID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICAgICAgLy8gU2VlIGlmIHdlIGNhbiBmaW5kIGEgcm91dGUgdGhhdCBjYW4gc2VydmUgcGFydCBvZiB0aGUgZ2l2ZW4gZGF0YVBhdGgsXG4gICAgICAgIC8vIGFuZCB0YWtlIGl0IGZyb20gdGhlcmU6XG4gICAgICAgIHdoaWxlIChkYXRhUGF0aFBhcnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBjb25zdCBwYXRoID0gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgoXG4gICAgICAgICAgICB0aGlzLmFwaS5ub3JtYWxpemVQYXRoKG5vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoUGFydHMpKVxuICAgICAgICAgIClcbiAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgYWN0dWFsbHkgaXMgYSByb3V0ZSBmb3IgdGhpcyBzdWItY29tcG9uZW50OlxuICAgICAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVyLnJlc29sdmUocGF0aClcbiAgICAgICAgICBpZiAobWF0Y2hlZC5sZW5ndGggJiYgbWF0Y2hlZFswXS5uYW1lICE9PSAnY2F0Y2gtYWxsJykge1xuICAgICAgICAgICAgaWYgKHRoaXMuJHJvdXRlLnBhdGggPT09IHBhdGgpIHtcbiAgICAgICAgICAgICAgLy8gV2UncmUgYWxyZWFkeSB0aGVyZSwgc28ganVzdCBjYWxsIGBvbkNvbXBsZXRlKClgOlxuICAgICAgICAgICAgICBjYWxsT25Db21wbGV0ZSgpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAvLyBOYXZpZ2F0ZSB0byB0aGUgY29tcG9uZW50J3MgcGF0aCwgdGhlbiBjYWxsIGBvbkNvbXBsZXRlKClgXzpcbiAgICAgICAgICAgICAgdGhpcy4kcm91dGVyXG4gICAgICAgICAgICAgICAgLnB1c2goeyBwYXRoIH0pXG4gICAgICAgICAgICAgICAgLmNhdGNoKHJlamVjdClcbiAgICAgICAgICAgICAgICAvLyBXYWl0IGZvciB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQgdG8gYmUgbW91bnRlZCBpbiB0aGUgbmV4dFxuICAgICAgICAgICAgICAgIC8vIHRpY2sgYmVmb3JlIGNhbGxpbmcgYG9uQ29tcGxldGUoKWBcbiAgICAgICAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljayhjYWxsT25Db21wbGV0ZSlcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBLZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgIGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgfSlcbiAgICB9XG4gIH0sIC8vIGVuZCBvZiBgbWV0aG9kc2BcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSlcbiAgICBjb25zdCBpbmxpbmVkID0gaXNJbmxpbmVkKHNjaGVtYSlcbiAgICBpZiAoaW5saW5lZCAmJiBzY2hlbWEucmVzb3VyY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYE5lc3RlZCAke1xuICAgICAgICAgIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgICA/ICdsaXN0cydcbiAgICAgICAgICAgIDogdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgICA/ICdvYmplY3RzJ1xuICAgICAgICAgICAgICA6ICdzY2hlbWEnXG4gICAgICAgIH0gY2Fubm90IGxvYWQgZGF0YSBmcm9tIHRoZWlyIG93biByZXNvdXJjZXNgXG4gICAgICApXG4gICAgfVxuICAgIC8vIFVzZSBkaWZmZXJlbnRseSBuYW1lZCB1cmwgcGFyYW1ldGVycyBvbiBlYWNoIG5lc3RlZCBsZXZlbCBmb3IgaWQgYXNcbiAgICAvLyBvdGhlcndpc2UgdGhleSB3b3VsZCBjbGFzaCBhbmQgb3ZlcnJpZGUgZWFjaCBvdGhlciBpbnNpZGUgJHJvdXRlLnBhcmFtc1xuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL3Z1ZWpzL3Z1ZS1yb3V0ZXIvaXNzdWVzLzEzNDVcbiAgICBjb25zdCBwYXJhbSA9IGBpZCR7bGV2ZWwgKyAxfWBcbiAgICBjb25zdCBtZXRhID0ge1xuICAgICAgYXBpLFxuICAgICAgc2NoZW1hXG4gICAgfVxuICAgIGNvbnN0IGZvcm1NZXRhID0ge1xuICAgICAgLi4ubWV0YSxcbiAgICAgIC8vIFdoZW4gY2hpbGRyZW4gYXJlIGZsYXR0ZW5lZCAoZS5nLiB0cmVlLWxpc3RzKSwgaW5jbHVkZSB0aGUgYGZsYXR0ZW5gXG4gICAgICAvLyBzZXR0aW5nIGFsc28sIGZvciBmbGF0dGVuaW5nIGJlbG93LlxuICAgICAgZmxhdHRlbixcbiAgICAgIG5lc3RlZCxcbiAgICAgIHBhcmFtXG4gICAgfVxuICAgIGNvbnN0IGNoaWxkUm91dGVzID0gYXdhaXQgcHJvY2Vzc0Zvcm1zKGFwaSwgc2NoZW1hLCBsZXZlbClcbiAgICBpZiAocHJvY2Vzcykge1xuICAgICAgYXdhaXQgcHJvY2VzcyhjaGlsZFJvdXRlcywgbGV2ZWwgKyAxKVxuICAgIH1cbiAgICAvLyBJbmxpbmVkIGZvcm1zIGRvbid0IG5lZWQgdG8gYWN0dWFsbHkgYWRkIHJvdXRlcy5cbiAgICBpZiAoaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmICFpbmxpbmVkKSB7XG4gICAgICBjb25zdCBnZXRQYXRoV2l0aFBhcmFtID0gKHBhdGgsIHBhcmFtKSA9PlxuICAgICAgICBwYXJhbVxuICAgICAgICAgID8gcGF0aFxuICAgICAgICAgICAgPyBgJHtwYXRofS86JHtwYXJhbX1gXG4gICAgICAgICAgICA6IGA6JHtwYXJhbX1gXG4gICAgICAgICAgOiBwYXRoXG5cbiAgICAgIC8vIExpc3RzIGluIHNpbmdsZS1jb21wb25lbnQtdmlld3MgKGxldmVsID09PSAwKSB1c2UgdGhlaXIgdmlldydzIHBhdGgsXG4gICAgICAvLyB3aGlsZSBhbGwgb3RoZXJzIG5lZWQgdGhlaXIgcGF0aCBwcmVmaXhlZCB3aXRoIHRoZSBwYXJlbnQncyBwYXRoOlxuICAgICAgY29uc3Qgc291cmNlUGF0aCA9IGxldmVsID09PSAwID8gJycgOiBzY2hlbWEucGF0aFxuICAgICAgY29uc3QgZm9ybVJvdXRlID0ge1xuICAgICAgICAvLyBPYmplY3Qgc291cmNlcyBkb24ndCBuZWVkIGlkIHBhcmFtcyBpbiB0aGVpciBmb3JtIHBhdGhzLCBhcyB0aGV5XG4gICAgICAgIC8vIGRpcmVjdGx5IGVkaXQgb25lIG9iamVjdC5cbiAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBpc0xpc3RTb3VyY2Uoc2NoZW1hKSAmJiBwYXJhbSksXG4gICAgICAgIGNvbXBvbmVudDogRGl0b0NvbXBvbmVudC5jb21wb25lbnQoXG4gICAgICAgICAgbmVzdGVkID8gJ0RpdG9Gb3JtTmVzdGVkJyA6ICdEaXRvRm9ybSdcbiAgICAgICAgKSxcbiAgICAgICAgbWV0YTogZm9ybU1ldGFcbiAgICAgIH1cbiAgICAgIGlmIChpc09iamVjdFNvdXJjZShzY2hlbWEpKSB7XG4gICAgICAgIC8vIEFsc28gYWRkIGEgcGFyYW0gcm91dGUsIHNpbXBseSB0byBoYW5kbGUgJy9jcmVhdGUnIGxpbmtzIHRoZSBzYW1lXG4gICAgICAgIC8vIHdheSB0aGF0IGxpc3RzIGRvLCB3aGVyZSBpdCBvdmVybGFwcyB3aXRoIDppZCBmb3IgaXRlbSBpZHMuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICAuLi5mb3JtUm91dGUsXG4gICAgICAgICAgcGF0aDogZ2V0UGF0aFdpdGhQYXJhbShzb3VyY2VQYXRoLCBwYXJhbSlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChzb3VyY2VQYXRoKSB7XG4gICAgICAgIC8vIEp1c3QgcmVkaXJlY3QgYmFjayB0byB0aGUgcGFyZW50IHdoZW4gYSBuZXN0ZWQgc291cmNlIHJvdXRlIGlzIGhpdC5cbiAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgIHBhdGg6IHNvdXJjZVBhdGgsXG4gICAgICAgICAgcmVkaXJlY3Q6ICcuJyxcbiAgICAgICAgICBtZXRhXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICAvLyBQYXJ0aXRpb24gY2hpbGRSb3V0ZXMgaW50byB0aG9zZSB0aGF0IG5lZWQgZmxhdHRlbmluZyAoZS5nLiB0cmVlLWxpc3RzKVxuICAgICAgLy8gYW5kIHRob3NlIHRoYXQgZG9uJ3QsIGFuZCBwcm9jZXNzIGVhY2ggZ3JvdXAgc2VwYXJhdGVseSBhZnRlci5cbiAgICAgIGNvbnN0IFtmbGF0Um91dGVzLCBzdWJSb3V0ZXNdID0gY2hpbGRSb3V0ZXMucmVkdWNlKFxuICAgICAgICAocmVzLCByb3V0ZSkgPT4ge1xuICAgICAgICAgIHJlc1tyb3V0ZS5tZXRhLmZsYXR0ZW4gPyAwIDogMV0ucHVzaChyb3V0ZSlcbiAgICAgICAgICByZXR1cm4gcmVzXG4gICAgICAgIH0sXG4gICAgICAgIFtbXSwgW11dXG4gICAgICApXG4gICAgICBpZiAoc3ViUm91dGVzLmxlbmd0aCkge1xuICAgICAgICBmb3JtUm91dGUuY2hpbGRyZW4gPSBzdWJSb3V0ZXNcbiAgICAgIH1cbiAgICAgIHJvdXRlcy5wdXNoKGZvcm1Sb3V0ZSlcbiAgICAgIC8vIEFkZCB0aGUgcHJlZml4ZWQgZm9ybVJvdXRlcyB3aXRoIHRoZWlyIGNoaWxkcmVuIGZvciBuZXN0ZWQgbGlzdHMuXG4gICAgICBpZiAoZmxhdFJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9yIChjb25zdCBjaGlsZFJvdXRlIG9mIGZsYXRSb3V0ZXMpIHtcbiAgICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgICAuLi4oY2hpbGRSb3V0ZS5yZWRpcmVjdCA/IGNoaWxkUm91dGUgOiBmb3JtUm91dGUpLFxuICAgICAgICAgICAgcGF0aDogYCR7Zm9ybVJvdXRlLnBhdGh9LyR7Y2hpbGRSb3V0ZS5wYXRofWAsXG4gICAgICAgICAgICBtZXRhOiB7XG4gICAgICAgICAgICAgIC4uLmNoaWxkUm91dGUubWV0YSxcbiAgICAgICAgICAgICAgZmxhdHRlblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGdyYXBoLmFkZFNvdXJjZShkYXRhUGF0aCwgc2NoZW1hKVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5LCBsYWJlbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBnZXROYW1lZFNjaGVtYXMsIHByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyB9IGZyb20gJy4vc2NoZW1hJ1xuXG5leHBvcnQgY29uc3QgZmlsdGVyQ29tcG9uZW50cyA9IHtcbiAgJ3RleHQnKGZpbHRlcikge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBbXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnY29udGFpbnMnLFxuICAgICAgICB2YWx1ZTogJ2NvbnRhaW5zJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlcXVhbHMnLFxuICAgICAgICB2YWx1ZTogJ2VxdWFscydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnc3RhcnRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ3N0YXJ0cy13aXRoJ1xuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdlbmRzIHdpdGgnLFxuICAgICAgICB2YWx1ZTogJ2VuZHMtd2l0aCdcbiAgICAgIH1cbiAgICBdXG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZXJhdG9yOiBmaWx0ZXIub3BlcmF0b3JzXG4gICAgICAgID8ge1xuICAgICAgICAgICAgdHlwZTogJ3NlbGVjdCcsXG4gICAgICAgICAgICB3aWR0aDogJzIvNScsXG4gICAgICAgICAgICBvcHRpb25zOiBpc0FycmF5KGZpbHRlci5vcGVyYXRvcnMpXG4gICAgICAgICAgICAgID8gb3B0aW9ucy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgICBvcHRpb24gPT4gZmlsdGVyLm9wZXJhdG9ycy5pbmNsdWRlcyhvcHRpb24udmFsdWUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICA6IG9wdGlvbnMsXG4gICAgICAgICAgICBjbGVhcmFibGU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIDogbnVsbCxcbiAgICAgIHRleHQ6IHtcbiAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICB3aWR0aDogZmlsdGVyLm9wZXJhdG9ycyA/ICczLzUnIDogJ2ZpbGwnLFxuICAgICAgICBjbGVhcmFibGU6IHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgJ2RhdGUtcmFuZ2UnKCkge1xuICAgIGNvbnN0IGRhdGV0aW1lID0ge1xuICAgICAgdHlwZTogJ2RhdGV0aW1lJyxcbiAgICAgIHdpZHRoOiAnMS8yJyxcbiAgICAgIGZvcm1hdHM6IHtcbiAgICAgICAgLy8gVXNlIHNob3J0ZXIgZGF0ZSBmb3JtYXQgaW4gZGF0ZS1yYW5nZSBmaWx0ZXJzOlxuICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgZGF5OiAnMi1kaWdpdCcsXG4gICAgICAgICAgbW9udGg6ICcyLWRpZ2l0JyxcbiAgICAgICAgICB5ZWFyOiAnbnVtZXJpYydcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNsZWFyYWJsZTogdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZnJvbTogZGF0ZXRpbWUsXG4gICAgICB0bzogZGF0ZXRpbWVcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZpbHRlcnNQYW5lbChhcGksIGZpbHRlcnMsIGRhdGFQYXRoLCBxdWVyeSkge1xuICBjb25zdCB7IHN0aWNreSwgLi4uZmlsdGVyU2NoZW1hcyB9ID0gZmlsdGVyc1xuICBjb25zdCBwYW5lbCA9IHtcbiAgICB0eXBlOiAncGFuZWwnLFxuICAgIGxhYmVsOiAnRmlsdGVycycsXG4gICAgbmFtZTogJyRmaWx0ZXJzJyxcbiAgICAvLyBPdmVycmlkZSB0aGUgZGVmYXVsdCB2YWx1ZVxuICAgIGRpc2FibGVkOiBmYWxzZSxcbiAgICBzdGlja3ksXG5cbiAgICAvLyBOT1RFOiBPbiBwYW5lbHMsIHRoZSBkYXRhKCkgY2FsbGJhY2sgZG9lcyBzb21ldGhpbmcgZWxzZSB0aGFuIG9uIG5vcm1hbFxuICAgIC8vIHNjaGVtYTogSXQgcHJvZHVjZXMgdGhlIGBkYXRhYCBwcm9wZXJ0eSB0byBiZSBwYXNzZWQgdG8gdGhlIHBhbmVsJ3NcbiAgICAvLyBzY2hlbWEsIG5vdCB0aGUgZGF0YSB0byBiZSB1c2VkIGZvciB0aGUgcGFuZWwgY29tcG9uZW50IGRpcmVjdGx5LlxuICAgIGRhdGEoKSB7XG4gICAgICByZXR1cm4gcGFyc2VGaWx0ZXJzRGF0YShcbiAgICAgICAgcGFuZWwsXG4gICAgICAgIHF1ZXJ5LnZhbHVlXG4gICAgICApXG4gICAgfSxcblxuICAgIGNvbXBvbmVudHM6IGNyZWF0ZUZpbHRlcnNDb21wb25lbnRzKGZpbHRlclNjaGVtYXMpLFxuICAgIGJ1dHRvbnM6IGNyZWF0ZUZpbHRlcnNCdXR0b25zKGZhbHNlKSxcbiAgICBwYW5lbEJ1dHRvbnM6IGNyZWF0ZUZpbHRlcnNCdXR0b25zKHRydWUpLFxuXG4gICAgZXZlbnRzOiB7XG4gICAgICBjaGFuZ2UoKSB7XG4gICAgICAgIHRoaXMuYXBwbHlGaWx0ZXJzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGZpbHRlcnMoKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXRGaWx0ZXJzRGF0YSh0aGlzLnNjaGVtYSwgdGhpcy5kYXRhKVxuICAgICAgfSxcblxuICAgICAgaGFzRmlsdGVycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmlsdGVycy5sZW5ndGggPiAwXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGFwcGx5RmlsdGVycygpIHtcbiAgICAgICAgcXVlcnkudmFsdWUgPSB7XG4gICAgICAgICAgLi4ucXVlcnkudmFsdWUsXG4gICAgICAgICAgZmlsdGVyOiB0aGlzLmZpbHRlcnMsXG4gICAgICAgICAgLy8gQ2xlYXIgcGFnaW5hdGlvbiB3aGVuIGFwcGx5aW5nIG9yIGNsZWFyaW5nIGZpbHRlcnM6XG4gICAgICAgICAgcGFnZTogdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH0sXG5cbiAgICAgIGNsZWFyRmlsdGVycygpIHtcbiAgICAgICAgdGhpcy5yZXNldERhdGEoKVxuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyhhcGksIHBhbmVsKVxuICByZXR1cm4gcGFuZWxcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmlsdGVyc0J1dHRvbnMoc21hbGwpIHtcbiAgcmV0dXJuIHtcbiAgICBjbGVhcjoge1xuICAgICAgdHlwZTogJ2J1dHRvbicsXG4gICAgICB0ZXh0OiBzbWFsbCA/IG51bGwgOiAnQ2xlYXInLFxuICAgICAgZGlzYWJsZWQ6ICh7IHNjaGVtYUNvbXBvbmVudCB9KSA9PiAhc2NoZW1hQ29tcG9uZW50Lmhhc0ZpbHRlcnMsXG4gICAgICBldmVudHM6IHtcbiAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgIC8vIFNpbmNlIHBhbmVsIGJ1dHRvbnMgYXJlIG91dHNpZGUgb2YgdGhlIHNjaGVtYSwgd2UgbmVlZCB0byB1c2UgdGhlXG4gICAgICAgICAgLy8gc2NoZW1hIGNvbXBvbmVudCByZWNlaXZlZCBmcm9tIHRoZSBpbml0aWFsaXplIGV2ZW50IGJlbG93OlxuICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5jbGVhckZpbHRlcnMoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHN1Ym1pdDoge1xuICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICB0ZXh0OiBzbWFsbCA/IG51bGwgOiAnRmlsdGVyJyxcbiAgICAgIHZpc2libGU6ICFzbWFsbCxcbiAgICAgIGV2ZW50czoge1xuICAgICAgICBjbGljayh7IHNjaGVtYUNvbXBvbmVudCB9KSB7XG4gICAgICAgICAgc2NoZW1hQ29tcG9uZW50LmFwcGx5RmlsdGVycygpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0RGF0YU5hbWUoZmlsdGVyTmFtZSkge1xuICAvLyBQcmVmaXggZmlsdGVyIGRhdGEga2V5cyB3aXRoICckJyB0byBhdm9pZCBjb25mbGljdHMgd2l0aCBvdGhlciBkYXRhIGtleXM6XG4gIHJldHVybiBgJCR7ZmlsdGVyTmFtZX1gXG59XG5cbmZ1bmN0aW9uIGdldEZpbHRlck5hbWUoZGF0YU5hbWUpIHtcbiAgcmV0dXJuIGRhdGFOYW1lLnN0YXJ0c1dpdGgoJyQnKSA/IGRhdGFOYW1lLnNsaWNlKDEpIDogbnVsbFxufVxuXG5mdW5jdGlvbiBjcmVhdGVGaWx0ZXJzQ29tcG9uZW50cyhmaWx0ZXJzKSB7XG4gIGNvbnN0IGNvbXBzID0ge31cbiAgZm9yIChjb25zdCBmaWx0ZXIgb2YgT2JqZWN0LnZhbHVlcyhnZXROYW1lZFNjaGVtYXMoZmlsdGVycykgfHwge30pKSB7XG4gICAgLy8gU3VwcG9ydCBib3RoIGN1c3RvbSBmb3JtcyBhbmQgZGVmYXVsdCBmaWx0ZXIgY29tcG9uZW50cywgdGhyb3VnaCB0aGVcbiAgICAvLyBgZmlsdGVyQ29tcG9uZW50c2AgcmVnaXN0cnkuIEV2ZW4gZm9yIGRlZmF1bHQgZmlsdGVycywgc3RpbGwgdXNlIHRoZVxuICAgIC8vIHByb3BlcnRpZXMgaW4gYGZpbHRlcmAgYXMgdGhlIGJhc2UgZm9yIGBmb3JtYCwgc28gdGhpbmdzIGxpa2UgYGxhYmVsYFxuICAgIC8vIGNhbiBiZSBjaGFuZ2VkIG9uIHRoZSByZXN1bHRpbmcgZm9ybS5cbiAgICBjb25zdCB7IGZpbHRlcjogdHlwZSwgd2lkdGgsIC4uLmZvcm0gfSA9IGZpbHRlclxuICAgIGNvbnN0IGNvbXBvbmVudHMgPSB0eXBlXG4gICAgICA/IGZpbHRlckNvbXBvbmVudHNbdHlwZV0/LihmaWx0ZXIpXG4gICAgICA6IGZpbHRlci5jb21wb25lbnRzXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvcm0udHlwZSA9ICdmb3JtJ1xuICAgICAgZm9ybS5jb21wb25lbnRzID0ge31cbiAgICAgIC8vIENvbnZlcnQgbGFiZWxzIHRvIHBsYWNlaG9sZGVyczpcbiAgICAgIGZvciAoY29uc3QgW2tleSwgY29tcG9uZW50XSBvZiBPYmplY3QuZW50cmllcyhjb21wb25lbnRzKSkge1xuICAgICAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAgICAgY29uc3QgbGFiZWwgPSBjb21wb25lbnQubGFiZWwgfHwgbGFiZWxpemUoY29tcG9uZW50Lm5hbWUgfHwga2V5KVxuICAgICAgICAgIGZvcm0uY29tcG9uZW50c1trZXldID0ge1xuICAgICAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICAgICAgbGFiZWw6IGZhbHNlLFxuICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGxhYmVsXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb21wc1tnZXREYXRhTmFtZShmaWx0ZXIubmFtZSldID0ge1xuICAgICAgICBsYWJlbDogZm9ybS5sYWJlbCA/PyBsYWJlbGl6ZShmaWx0ZXIubmFtZSksXG4gICAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgICB3aWR0aCxcbiAgICAgICAgZGVmYXVsdDogKCkgPT4gKHt9KSxcbiAgICAgICAgZm9ybSxcbiAgICAgICAgaW5saW5lZDogdHJ1ZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGZpbHRlciAnJHtmaWx0ZXIubmFtZX0nOiBVbmtub3duIGZpbHRlciB0eXBlICcke3R5cGV9Jy5gXG4gICAgICApXG4gICAgfVxuICB9XG4gIHJldHVybiBjb21wc1xufVxuXG5mdW5jdGlvbiBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgZGF0YU5hbWUpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gc2NoZW1hLmNvbXBvbmVudHNbZGF0YU5hbWVdXG4gIHJldHVybiBjb21wb25lbnQ/LmZvcm0/LmNvbXBvbmVudHNcbn1cblxuZnVuY3Rpb24gZm9ybWF0RmlsdGVyc0RhdGEoc2NoZW1hLCBkYXRhKSB7XG4gIGNvbnN0IGZpbHRlcnMgPSBbXVxuICBmb3IgKGNvbnN0IGRhdGFOYW1lIGluIGRhdGEpIHtcbiAgICBjb25zdCBlbnRyeSA9IGRhdGFbZGF0YU5hbWVdXG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICAvLyBNYXAgY29tcG9uZW50cyBzZXF1ZW5jZSB0byBhcmd1bWVudHM6XG4gICAgICBjb25zdCBhcmdzID0gT2JqZWN0LmtleXMoXG4gICAgICAgIGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBkYXRhTmFtZSlcbiAgICAgICkubWFwKFxuICAgICAgICBrZXkgPT4gZW50cnlba2V5XSA/PyBudWxsXG4gICAgICApXG4gICAgICAvLyBPbmx5IGFwcGx5IGZpbHRlciBpZiB0aGVyZSBhcmUgc29tZSBhcmd1bWVudHMgdGhhdCBhcmVuJ3QgbnVsbDpcbiAgICAgIGlmIChhcmdzLnNvbWUodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpKSB7XG4gICAgICAgIGZpbHRlcnMucHVzaChcbiAgICAgICAgICBgJHtcbiAgICAgICAgICAgIGdldEZpbHRlck5hbWUoZGF0YU5hbWUpXG4gICAgICAgICAgfToke1xuICAgICAgICAgICAgYXJncy5tYXAoSlNPTi5zdHJpbmdpZnkpLmpvaW4oJywnKVxuICAgICAgICAgIH1gXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZpbHRlcnNcbn1cblxuZnVuY3Rpb24gcGFyc2VGaWx0ZXJzRGF0YShzY2hlbWEsIHF1ZXJ5KSB7XG4gIGNvbnN0IGZpbHRlcnMgPSB7fVxuICAvLyBTYW1lIGFzIEBkaXRvanMvc2VydmVyJ3MgUXVlcnlQYXJhbWV0ZXJzLmZpbHRlcjogVHJhbnNsYXRlIHRoZSBzdHJpbmcgZGF0YVxuICAvLyBmcm9tICRyb3V0ZS5xdWVyeSBiYWNrIHRvIHBhcmFtIGxpc3RzIHBlciBmaWx0ZXI6XG4gIGlmIChxdWVyeSkge1xuICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGFzQXJyYXkocXVlcnkuZmlsdGVyKSkge1xuICAgICAgY29uc3QgWywgZmlsdGVyTmFtZSwganNvbl0gPSBmaWx0ZXIubWF0Y2goL14oXFx3Kyk6KC4qKSQvKVxuICAgICAgdHJ5IHtcbiAgICAgICAgZmlsdGVyc1tmaWx0ZXJOYW1lXSA9IGFzQXJyYXkoSlNPTi5wYXJzZShgWyR7anNvbn1dYCkpXG4gICAgICB9IGNhdGNoIChlcnJvcikge31cbiAgICB9XG4gIH1cbiAgY29uc3QgZmlsdGVyc0RhdGEgPSB7fVxuICBmb3IgKGNvbnN0IGRhdGFOYW1lIGluIHNjaGVtYS5jb21wb25lbnRzKSB7XG4gICAgY29uc3QgZGF0YSA9IHt9XG4gICAgLy8gSWYgd2UgaGF2ZSByZXRyaWV2ZWQgcGFyYW1zIGZyb20gdGhlIHF1ZXJ5LCBmZXRjaCB0aGUgYXNzb2NpYXRlZFxuICAgIC8vIGZvcm0gY29tcG9uZW50cyBzbyB3ZSBjYW4gbWFwIHRoZSB2YWx1ZXMgYmFjayB0byBvYmplY3Qga2V5czpcbiAgICBjb25zdCBhcmdzID0gZmlsdGVyc1tnZXRGaWx0ZXJOYW1lKGRhdGFOYW1lKV1cbiAgICBpZiAoYXJncykge1xuICAgICAgY29uc3QgY29tcG9uZW50cyA9IGdldENvbXBvbmVudHNGb3JGaWx0ZXIoc2NoZW1hLCBkYXRhTmFtZSlcbiAgICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICAgIGxldCBpbmRleCA9IDBcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gY29tcG9uZW50cykge1xuICAgICAgICAgIGRhdGFba2V5XSA9IGFyZ3NbaW5kZXgrK11cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmaWx0ZXJzRGF0YVtkYXRhTmFtZV0gPSBkYXRhXG4gIH1cbiAgcmV0dXJuIGZpbHRlcnNEYXRhXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbGlzdChcbiAgdi1pZj1cImlzUmVhZHlcIlxuICA6aWQ9XCJkYXRhUGF0aFwiXG4pXG4gIC5kaXRvLWxpc3RfX2hlYWRlcihcbiAgICB2LWlmPVwic2NvcGVzIHx8IGhhc1BhZ2luYXRpb25cIlxuICApXG4gICAgRGl0b1Njb3BlcyhcbiAgICAgIHYtaWY9XCJzY29wZXNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gICAgKVxuICAgIC8vLSBXaGVuIHRoZXJlJ3Mgb25seSBwYWdpbmF0aW9uIHdpdGhvdXQgc2NvcGVzLCB3ZSBuZWVkIGEgZ29vZCBvbCcgc3BhY2VyXG4gICAgLy8tIGRpdiwgZm9yIHRoZSBsYXlvdXQgbm90IHRvIGJyZWFrLi4uXG4gICAgLmRpdG8tc3BhY2VyKFxuICAgICAgdi1lbHNlLWlmPVwiaGFzUGFnaW5hdGlvblwiXG4gICAgKVxuICAgIERpdG9QYWdpbmF0aW9uKFxuICAgICAgdi1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmxpbWl0PVwicGFnaW5hdGVcIlxuICAgICAgOnRvdGFsPVwidG90YWwgfHwgMFwiXG4gICAgKVxuICB0YWJsZS5kaXRvLXRhYmxlKFxuICAgIDpjbGFzcz1ge1xuICAgICAgJ2RpdG8tdGFibGUtc2VwYXJhdG9ycyc6IGlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWxhcmdlci1wYWRkaW5nJzogaGFzRWRpdEJ1dHRvbnMgJiYgIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWFsdGVybmF0ZS1jb2xvcnMnOiAhaXNJbmxpbmVkLFxuICAgICAgJ2RpdG8tdGFibGUtZXZlbi1jb3VudCc6IGhhc0V2ZW5Db3VudFxuICAgIH1gXG4gIClcbiAgICBEaXRvVGFibGVIZWFkKFxuICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgICAgOmNvbHVtbnM9XCJjb2x1bW5zXCJcbiAgICAgIDpoYXNFZGl0QnV0dG9ucz1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgRGl0b0RyYWdnYWJsZShcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIDptb2RlbFZhbHVlPVwidXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0RGF0YSwgcGFnaW5hdGlvblJhbmdlKVwiXG4gICAgICA6b3B0aW9ucz1cImdldERyYWdnYWJsZU9wdGlvbnMoKVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIEB1cGRhdGU6bW9kZWxWYWx1ZT1cInZhbHVlID0+IChsaXN0RGF0YSA9IHZhbHVlKVwiXG4gICAgKVxuICAgICAgdHIoXG4gICAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBsaXN0RGF0YVwiXG4gICAgICAgIDppZD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgIDprZXk9XCJnZXRJdGVtVWlkKHNjaGVtYSwgaXRlbSlcIlxuICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWlmPVwiY29sdW1uc1wiXG4gICAgICAgIClcbiAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgIHYtZm9yPVwiY29sdW1uIGluIGNvbHVtbnNcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIERpdG9UYWJsZUNlbGwoXG4gICAgICAgICAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDprZXk9XCJjb2x1bW4ubmFtZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldENlbGxDbGFzcyhjb2x1bW4pXCJcbiAgICAgICAgICAgICAgOmNlbGw9XCJjb2x1bW5cIlxuICAgICAgICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICB2LWVsc2VcbiAgICAgICAgKVxuICAgICAgICAgIHRkXG4gICAgICAgICAgICBEaXRvU2NoZW1hSW5saW5lZChcbiAgICAgICAgICAgICAgdi1pZj1cImlzSW5saW5lZFwiXG4gICAgICAgICAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXgsIGFzT2JqZWN0OiB0cnVlIH0pXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgICA6c3RvcmU9XCJnZXRJdGVtU3RvcmUoc2NoZW1hLCBpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbXBvbmVudChcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICAgICAgICAgIDppcz1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgICA6ZGF0YT1cIml0ZW1cIlxuICAgICAgICAgICAgICA6bmVzdGVkPVwiZmFsc2VcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlLWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoaXRlbSwgaW5kZXgpKVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgICAgdi1odG1sPVwiZ2V0SXRlbUxhYmVsKHNjaGVtYSwgaXRlbSwgeyBpbmRleCB9KVwiXG4gICAgICAgICAgICApXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoXG4gICAgICAgICAgdi1pZj1cImhhc0NlbGxFZGl0QnV0dG9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICAgICAgICA6c2NoZW1hPVwiZ2V0SXRlbUZvcm1TY2hlbWEoc2NoZW1hLCBpdGVtLCBjb250ZXh0KVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJnZXRJdGVtU3RvcmUoc2NoZW1hLCBpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgIDpkZWxldGFibGU9XCJkZWxldGFibGVcIlxuICAgICAgICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICA6ZWRpdFBhdGg9XCJnZXRFZGl0UGF0aChpdGVtLCBpbmRleClcIlxuICAgICAgICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0oaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICApXG4gICAgLy8tIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBpbnNpZGUgdGFibGUgd2hlbiBub3QgaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gICAgdGZvb3QoXG4gICAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgIXNpbmdsZVwiXG4gICAgKVxuICAgICAgdHJcbiAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9ucyg6Y29sc3Bhbj1cIm51bUNvbHVtbnNcIilcbiAgICAgICAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgICAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgICAgICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgICAgICAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICAgICAgICAgIClcbiAgLy8tIFJlbmRlciBjcmVhdGUgYnV0dG9ucyBvdXRzaWRlIHRhYmxlIHdoZW4gaW4gYSBzaW5nbGUgY29tcG9uZW50IHZpZXc6XG4gIERpdG9FZGl0QnV0dG9ucy5kaXRvLWJ1dHRvbnMtbGFyZ2UuZGl0by1idXR0b25zLW1haW4uZGl0by1idXR0b25zLXN0aWNreShcbiAgICB2LWlmPVwiaGFzTGlzdEJ1dHRvbnMgJiYgc2luZ2xlXCJcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImxpc3REYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgIDpjcmVhdGVQYXRoPVwicGF0aFwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU291cmNlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvdXJjZU1peGluLmpzJ1xuaW1wb3J0IFNvcnRhYmxlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1NvcnRhYmxlTWl4aW4uanMnXG5pbXBvcnQge1xuICBnZXRWaWV3RWRpdFBhdGgsXG4gIHJlc29sdmVTY2hlbWFDb21wb25lbnQsXG4gIHJlc29sdmVTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGNyZWF0ZUZpbHRlcnNQYW5lbCB9IGZyb20gJy4uL3V0aWxzL2ZpbHRlci5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IHBpY2tCeSwgZXF1YWxzLCBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICd2dWUnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGlzdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW4sIFNvcnRhYmxlTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBnZXRQYW5lbFNjaGVtYShhcGksIHNjaGVtYSwgZGF0YVBhdGgsIGNvbXBvbmVudCkge1xuICAgIGNvbnN0IHsgZmlsdGVycyB9ID0gc2NoZW1hXG4gICAgLy8gU2VlIGlmIHRoaXMgbGlzdCBjb21wb25lbnQgd2FudHMgdG8gZGlzcGxheSBhIGZpbHRlciBwYW5lbCwgYW5kIGlmIHNvLFxuICAgIC8vIGNyZWF0ZSB0aGUgcGFuZWwgc2NoZW1hIGZvciBpdCB0aHJvdWdoIGBnZXRGaWx0ZXJzUGFuZWwoKWAuXG4gICAgaWYgKGZpbHRlcnMpIHtcbiAgICAgIHJldHVybiBjcmVhdGVGaWx0ZXJzUGFuZWwoXG4gICAgICAgIGFwaSxcbiAgICAgICAgZmlsdGVycyxcbiAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgIC8vIFBhc3MgYSBjb21wdXRlZCB2YWx1ZSB0byBnZXQgLyBzZXQgdGhlIHF1ZXJ5LCBzZWUgZ2V0RmlsdGVyc1BhbmVsKClcbiAgICAgICAgY29tcHV0ZWQoe1xuICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiBjb21wb25lbnQucXVlcnlcbiAgICAgICAgICB9LFxuXG4gICAgICAgICAgc2V0KHF1ZXJ5KSB7XG4gICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IHVuZGVmaW5lZCB2YWx1ZXMgZm9yIGNvbXBhcmluZyB3aXRoIGVxdWFscygpXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBvYmogPT4gcGlja0J5KG9iaiwgdmFsdWUgPT4gdmFsdWUgIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgIGlmICghZXF1YWxzKGZpbHRlcihxdWVyeSksIGZpbHRlcihjb21wb25lbnQucXVlcnkpKSkge1xuICAgICAgICAgICAgICBjb21wb25lbnQucXVlcnkgPSBxdWVyeVxuICAgICAgICAgICAgICBjb21wb25lbnQubG9hZERhdGEoZmFsc2UpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGhhc1BhZ2luYXRpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wYWdpbmF0ZSAmJiB0aGlzLnRvdGFsID4gdGhpcy5wYWdpbmF0ZVxuICAgIH0sXG5cbiAgICBoYXNMaXN0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiAhISh0aGlzLmJ1dHRvblNjaGVtYXMgfHwgdGhpcy5jcmVhdGFibGUpXG4gICAgfSxcblxuICAgIGhhc0VkaXRCdXR0b25zKCkge1xuICAgICAgY29uc3QgeyBsaXN0RGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgbGlzdERhdGEubGVuZ3RoID4gMCAmJiAoXG4gICAgICAgICAgdGhpcy5lZGl0YWJsZSB8fFxuICAgICAgICAgIHRoaXMuZGVsZXRhYmxlIHx8XG4gICAgICAgICAgdGhpcy5kcmFnZ2FibGVcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNDZWxsRWRpdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNJbmxpbmVkICYmIHRoaXMuaGFzRWRpdEJ1dHRvbnNcbiAgICB9LFxuXG4gICAgaGFzRXZlbkNvdW50KCkge1xuICAgICAgcmV0dXJuICEodGhpcy5saXN0RGF0YS5sZW5ndGggJSAyKVxuICAgIH0sXG5cbiAgICBudW1Db2x1bW5zKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgKHRoaXMuY29sdW1ucyA/IE9iamVjdC5rZXlzKHRoaXMuY29sdW1ucykubGVuZ3RoIDogMSkgK1xuICAgICAgICAodGhpcy5oYXNDZWxsRWRpdEJ1dHRvbnMgPyAxIDogMClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldERhdGFQYXRoKGluZGV4KSB7XG4gICAgICByZXR1cm4gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgfSxcblxuICAgIGdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KSB7XG4gICAgICBpZiAodGhpcy5lZGl0YWJsZSkge1xuICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCBpdGVtLCBpbmRleClcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBnZXRWaWV3RWRpdFBhdGgodGhpcy5zY2hlbWEsIGlkLCB0aGlzLmNvbnRleHQpIHx8XG4gICAgICAgICAgYCR7dGhpcy5wYXRofS8ke2lkfWBcbiAgICAgICAgKVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q2VsbENsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIGBkaXRvLWNlbGwtJHtoeXBoZW5hdGUoY29sdW1uLm5hbWUpfWBcbiAgICB9LFxuXG4gICAgZ2V0Q29udGV4dChpdGVtLCBpbmRleCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgIHZhbHVlOiBpdGVtLFxuICAgICAgICBpbmRleCxcbiAgICAgICAgZGF0YVBhdGg6IHRoaXMuZ2V0RGF0YVBhdGgoaW5kZXgpXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBvbkZpbHRlckVycm9ycyhlcnJvcnMpIHtcbiAgICAgIGNvbnN0IGZpbHRlcnNEYXRhUGF0aCA9IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsICckZmlsdGVycycpXG4gICAgICBjb25zdCBwYW5lbCA9IHRoaXMuc2NoZW1hQ29tcG9uZW50LmdldFBhbmVsQnlEYXRhUGF0aChmaWx0ZXJzRGF0YVBhdGgpXG4gICAgICBpZiAocGFuZWwpIHtcbiAgICAgICAgcGFuZWwuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBhc3luYyBwcm9jZXNzU2NoZW1hKFxuICAgIGFwaSxcbiAgICBzY2hlbWEsXG4gICAgbmFtZSxcbiAgICByb3V0ZXMsXG4gICAgbGV2ZWwsXG4gICAgbmVzdGVkID0gZmFsc2UsXG4gICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgIHByb2Nlc3MgPSBudWxsXG4gICkge1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSxcbiAgICAgIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYS5jb2x1bW5zKSxcbiAgICAgIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgIGFwaSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBuYW1lLFxuICAgICAgICByb3V0ZXMsXG4gICAgICAgIGxldmVsLFxuICAgICAgICBuZXN0ZWQsXG4gICAgICAgIGZsYXR0ZW4sXG4gICAgICAgIHByb2Nlc3NcbiAgICAgIClcbiAgICBdKVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbGlzdCB7XG4gICRzZWxmOiAmO1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAmX19oZWFkZXIge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuO1xuICAgIHBhZGRpbmctYm90dG9tOiAkY29udGVudC1wYWRkaW5nLWhhbGY7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgICAmOmVtcHR5IHtcbiAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgfVxuXG4gICAgLmRpdG8tc2NvcGVzLFxuICAgIC5kaXRvLXBhZ2luYXRpb24ge1xuICAgICAgZGlzcGxheTogZmxleDtcbiAgICAgIGZsZXg6IDAgMSBhdXRvO1xuICAgICAgbWluLXdpZHRoOiAwO1xuICAgIH1cbiAgfVxuXG4gICYuZGl0by1zaW5nbGUge1xuICAgIC8vIFNvIHRoYXQgbGlzdCBidXR0b25zIGNhbiBiZSBzdGlja3kgdG8gdGhlIGJvdHRvbTpcbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnQ7XG4gICAgaGVpZ2h0OiAxMDAlO1xuXG4gICAgLy8gTWFrZSBzaW5nbGUgbGlzdCBoZWFkZXIsIG5hdmlnYXRpb24gYW5kIGJ1dHRvbnMgc3RpY2t5IHRvIHRoZSB0b3AgYW5kXG4gICAgLy8gYm90dG9tOlxuICAgICN7JHNlbGZ9X19oZWFkZXIge1xuICAgICAgcG9zaXRpb246IHN0aWNreTtcbiAgICAgIHRvcDogMDtcbiAgICAgIG1hcmdpbi10b3A6IC0kY29udGVudC1wYWRkaW5nO1xuICAgICAgcGFkZGluZy10b3A6ICRjb250ZW50LXBhZGRpbmc7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgICAgei1pbmRleDogMTtcblxuICAgICAgKyAuZGl0by10YWJsZSB7XG4gICAgICAgIC5kaXRvLXRhYmxlLWhlYWQge1xuICAgICAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICAgICAgdG9wOiBjYWxjKCRpbnB1dC1oZWlnaHQgKyAkY29udGVudC1wYWRkaW5nICsgJGNvbnRlbnQtcGFkZGluZy1oYWxmKTtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgICAgICAgIHotaW5kZXg6IDE7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuRGl0b0xhYmVsLmRpdG8tbGFiZWwtY29tcG9uZW50KFxuICA6bGFiZWw9XCJ2YWx1ZVwiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbGFiZWwnLCB7XG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2Vcbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1sYWJlbC1jb21wb25lbnQge1xuICBkaXNwbGF5OiBmbGV4O1xuICBoZWlnaHQ6IDJlbTtcbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbWFya3VwKDppZD1cImRhdGFQYXRoXCIpXG4gIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXRvb2xiYXIoXG4gICAgdi1pZj1cImdyb3VwZWRCdXR0b25zLmxlbmd0aCA+IDBcIlxuICApXG4gICAgLmRpdG8tYnV0dG9uLWdyb3VwKFxuICAgICAgdi1mb3I9XCJidXR0b25zIGluIGdyb3VwZWRCdXR0b25zXCJcbiAgICApXG4gICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgIHYtZm9yPVwieyBuYW1lLCBpY29uLCBpc0FjdGl2ZSwgb25DbGljayB9IGluIGJ1dHRvbnNcIlxuICAgICAgICA6a2V5PVwibmFtZVwiXG4gICAgICAgIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4gICAgICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICAgICAgKVxuICAgICAgICBJY29uKDpuYW1lPVwiaWNvblwiKVxuICBFZGl0b3JDb250ZW50LmRpdG8tbWFya3VwLWVkaXRvcihcbiAgICByZWY9XCJlZGl0b3JcIlxuICAgIDplZGl0b3I9XCJlZGl0b3JcIlxuICAgIDpzdHlsZT1cInN0eWxlc1wiXG4gIClcbiAgLmRpdG8tcmVzaXplKFxuICAgIHYtaWY9XCJyZXNpemFibGVcIlxuICAgIEBtb3VzZWRvd24uc3RvcC5wcmV2ZW50PVwib25EcmFnUmVzaXplXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgRWRpdG9yLCBFZGl0b3JDb250ZW50LCBNYXJrLCBnZXRNYXJrQXR0cmlidXRlcyB9IGZyb20gJ0B0aXB0YXAvdnVlLTMnXG4vLyBpbXBvcnQgeyB0b2dnbGVNYXJrIH0gZnJvbSAndGlwdGFwLWNvbW1hbmRzJ1xuLy8gRXNzZW50aWFsczpcbmltcG9ydCB7IERvY3VtZW50IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tZG9jdW1lbnQnXG5pbXBvcnQgeyBUZXh0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGV4dCdcbi8vIE1hcmtzOlxuaW1wb3J0IHsgQm9sZCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWJvbGQnXG5pbXBvcnQgeyBDb2RlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29kZSdcbmltcG9ydCB7IEl0YWxpYyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWl0YWxpYydcbmltcG9ydCB7IExpbmsgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1saW5rJ1xuaW1wb3J0IHsgU3RyaWtlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tc3RyaWtlJ1xuaW1wb3J0IHsgVW5kZXJsaW5lIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdW5kZXJsaW5lJ1xuLy8gTm9kZXM6XG5pbXBvcnQgeyBCbG9ja3F1b3RlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tYmxvY2txdW90ZSdcbmltcG9ydCB7IENvZGVCbG9jayB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWNvZGUtYmxvY2snXG5pbXBvcnQgeyBIYXJkQnJlYWsgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1oYXJkLWJyZWFrJ1xuaW1wb3J0IHsgSGVhZGluZyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhlYWRpbmcnXG5pbXBvcnQgeyBQYXJhZ3JhcGggfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1wYXJhZ3JhcGgnXG5pbXBvcnQgeyBIb3Jpem9udGFsUnVsZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhvcml6b250YWwtcnVsZSdcbmltcG9ydCB7IE9yZGVyZWRMaXN0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tb3JkZXJlZC1saXN0J1xuaW1wb3J0IHsgQnVsbGV0TGlzdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWJ1bGxldC1saXN0J1xuaW1wb3J0IHsgTGlzdEl0ZW0gfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1saXN0LWl0ZW0nXG4vLyBUT0RPOlxuLy8gaW1wb3J0IHsgSW1hZ2UgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1pbWFnZSdcbi8vIGltcG9ydCB7IE1lbnRpb24gfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1tZW50aW9uJ1xuLy8gaW1wb3J0IHsgQ29kZUJsb2NrSGlnaGxpZ2h0IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tY29kZS1ibG9jay1oaWdobGlnaHQnXG4vLyBpbXBvcnQgeyBUYWJsZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlJ1xuLy8gaW1wb3J0IHsgVGFibGVDZWxsIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtY2VsbCdcbi8vIGltcG9ydCB7IFRhYmxlSGVhZGVyIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtaGVhZGVyJ1xuLy8gaW1wb3J0IHsgVGFibGVOb2RlcyB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLW5vZGVzJ1xuLy8gaW1wb3J0IHsgVGFibGVSb3cgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1yb3cnXG4vLyBpbXBvcnQgeyBUYXNrTGlzdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhc2stbGlzdCdcbi8vIGltcG9ydCB7IFRhc2tJdGVtIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFzay1pdGVtJ1xuLy8gVG9vbHM6XG5pbXBvcnQgeyBIaXN0b3J5IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taGlzdG9yeSdcblxuaW1wb3J0IHsgSWNvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IHsgaXNBcnJheSwgaXNPYmplY3QsIGh5cGhlbmF0ZSwgZGVib3VuY2UsIGNhbWVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdtYXJrdXAnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcbiAgY29tcG9uZW50czoge1xuICAgIEVkaXRvckNvbnRlbnQsXG4gICAgSWNvblxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGVkaXRvcjogbnVsbCxcbiAgICAgIGhlaWdodDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDEwXG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGhlaWdodDogdGhpcy5oZWlnaHQgfHwgYGNhbGMoJHt0aGlzLmxpbmVzfWVtICogdmFyKC0tbGluZS1oZWlnaHQpKWBcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWFya0J1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdtYXJrcycsIHtcbiAgICAgICAgYm9sZDogdHJ1ZSxcbiAgICAgICAgaXRhbGljOiB0cnVlLFxuICAgICAgICB1bmRlcmxpbmU6IHRydWUsXG4gICAgICAgIHN0cmlrZTogdHJ1ZSxcbiAgICAgICAgc21hbGw6IHRydWUsXG4gICAgICAgIGNvZGU6IHRydWUsXG4gICAgICAgIGxpbms6IHtcbiAgICAgICAgICBvbkNsaWNrOiBlZGl0b3IgPT4gdGhpcy5vbkNsaWNrTGluayhlZGl0b3IpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGJhc2ljTm9kZUJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRCdXR0b25zKCdub2RlcycsIHtcbiAgICAgICAgcGFyYWdyYXBoOiB7XG4gICAgICAgICAgY29tbWFuZDogJ3NldFBhcmFncmFwaCdcbiAgICAgICAgfSxcbiAgICAgICAgaGVhZGluZzoge1xuICAgICAgICAgIGF0dHJpYnV0ZTogJ2xldmVsJyxcbiAgICAgICAgICB2YWx1ZXM6IFsxLCAyLCAzLCA0LCA1LCA2XVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhZHZhbmNlZE5vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIGJ1bGxldExpc3Q6IHRydWUsXG4gICAgICAgIG9yZGVyZWRMaXN0OiB0cnVlLFxuICAgICAgICBibG9ja3F1b3RlOiB0cnVlLFxuICAgICAgICBjb2RlQmxvY2s6IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHRvb2xCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygndG9vbHMnLCB7XG4gICAgICAgIHVuZG86IHRydWUsXG4gICAgICAgIHJlZG86IHRydWVcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdyb3VwZWRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy5tYXJrQnV0dG9ucyxcbiAgICAgICAgdGhpcy5iYXNpY05vZGVCdXR0b25zLFxuICAgICAgICB0aGlzLmFkdmFuY2VkTm9kZUJ1dHRvbnMsXG4gICAgICAgIHRoaXMudG9vbEJ1dHRvbnNcbiAgICAgIF0uZmlsdGVyKGJ1dHRvbnMgPT4gYnV0dG9ucy5sZW5ndGggPiAwKVxuICAgIH0sXG5cbiAgICBwYXJzZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBwcmVzZXJ2ZVdoaXRlc3BhY2U6IHtcbiAgICAgICAgICAnY29sbGFwc2UnOiBmYWxzZSxcbiAgICAgICAgICAncHJlc2VydmUnOiB0cnVlLFxuICAgICAgICAgICdwcmVzZXJ2ZS1hbGwnOiAnZnVsbCdcbiAgICAgICAgfVt0aGlzLndoaXRlc3BhY2VdXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVkaXRvck9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBlZGl0YWJsZTogIXRoaXMucmVhZHlvbmx5LFxuICAgICAgICBhdXRvRm9jdXM6IHRoaXMuYXV0b2ZvY3VzLFxuICAgICAgICBkaXNhYmxlSW5wdXRSdWxlczogIXRoaXMuZW5hYmxlUnVsZXMuaW5wdXQsXG4gICAgICAgIGRpc2FibGVQYXN0ZVJ1bGVzOiAhdGhpcy5lbmFibGVSdWxlcy5wYXN0ZSxcbiAgICAgICAgcGFyc2VPcHRpb25zOiB0aGlzLnBhcnNlT3B0aW9uc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXNpemFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXNpemFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHdoaXRlc3BhY2U6IGdldFNjaGVtYUFjY2Vzc29yKCd3aGl0ZXNwYWNlJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2NvbGxhcHNlJ1xuICAgICAgLy8gUG9zc2libGUgdmFsdWVzIGFyZTogJ2NvbGxhcHNlJywgJ3ByZXNlcnZlJywgJ3ByZXNlcnZlLWFsbCdcbiAgICB9KSxcblxuICAgIGVuYWJsZVJ1bGVzOiBnZXRTY2hlbWFBY2Nlc3NvcignZW5hYmxlUnVsZXMnLCB7XG4gICAgICB0eXBlOiBbT2JqZWN0LCBCb29sZWFuXSxcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVuYWJsZVJ1bGVzKSB7XG4gICAgICAgIHJldHVybiBpc09iamVjdChlbmFibGVSdWxlcylcbiAgICAgICAgICA/IGVuYWJsZVJ1bGVzXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIGlucHV0OiAhIWVuYWJsZVJ1bGVzLFxuICAgICAgICAgICAgICBwYXN0ZTogISFlbmFibGVSdWxlc1xuICAgICAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICByZWFkeW9ubHk6ICd1cGRhdGVFZGl0b3JPcHRpb25zJyxcbiAgICBhdXRvZm9jdXM6ICd1cGRhdGVFZGl0b3JPcHRpb25zJyxcbiAgICBlbmFibGVSdWxlczogJ3VwZGF0ZUVkaXRvck9wdGlvbnMnXG4gIH0sXG5cbiAgY3JlYXRlZCgpIHtcbiAgICBsZXQgY2hhbmdlZCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVdhdGNoID0gZmFsc2VcblxuICAgIGNvbnN0IG9uQ2hhbmdlID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvY3VzZWQgJiYgY2hhbmdlZCkge1xuICAgICAgICBjaGFuZ2VkID0gZmFsc2VcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgb25Gb2N1cyA9ICgpID0+IHRoaXMub25Gb2N1cygpXG5cbiAgICBjb25zdCBvbkJsdXIgPSAoKSA9PiB7XG4gICAgICB0aGlzLm9uQmx1cigpXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfVxuXG4gICAgY29uc3Qgc2V0VmFsdWVEZWJvdW5jZWQgPSBkZWJvdW5jZShlZGl0b3IgPT4ge1xuICAgICAgaWdub3JlV2F0Y2ggPSB0cnVlXG4gICAgICB0aGlzLnZhbHVlID0gZWRpdG9yLmdldEhUTUwoKVxuICAgICAgY2hhbmdlZCA9IHRydWVcbiAgICAgIG9uQ2hhbmdlKClcbiAgICB9LCAxMDApXG5cbiAgICBjb25zdCBvblVwZGF0ZSA9ICh7IGVkaXRvciB9KSA9PiB7XG4gICAgICBzZXRWYWx1ZURlYm91bmNlZChlZGl0b3IpXG4gICAgICB0aGlzLm9uSW5wdXQoKVxuICAgIH1cblxuICAgIHRoaXMuJHdhdGNoKCd2YWx1ZScsIHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVXYXRjaCkge1xuICAgICAgICBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVkaXRvci5zZXRDb250ZW50KHZhbHVlLCBmYWxzZSwgdGhpcy5wYXJzZU9wdGlvbnMpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7XG4gICAgICAuLi50aGlzLmVkaXRvck9wdGlvbnMsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25CbHVyLFxuICAgICAgb25VcGRhdGUsXG4gICAgICBleHRlbnNpb25zOiB0aGlzLmdldEV4dGVuc2lvbnMoKSxcbiAgICAgIGNvbnRlbnQ6IHRoaXMudmFsdWUgfHwgJydcbiAgICB9KVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLmVkaXRvci5kZXN0cm95KClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25EcmFnUmVzaXplKGV2ZW50KSB7XG4gICAgICBjb25zdCBnZXRQb2ludCA9ICh7IGNsaWVudFg6IHgsIGNsaWVudFk6IHkgfSkgPT4gKHsgeCwgeSB9KVxuXG4gICAgICBsZXQgcHJldlkgPSBnZXRQb2ludChldmVudCkueVxuICAgICAgbGV0IGhlaWdodCA9IHBhcnNlRmxvYXQoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLiRyZWZzLmVkaXRvci4kZWwpLmhlaWdodClcblxuICAgICAgY29uc3QgbW91c2Vtb3ZlID0gZXZlbnQgPT4ge1xuICAgICAgICBjb25zdCB7IHkgfSA9IGdldFBvaW50KGV2ZW50KVxuICAgICAgICBoZWlnaHQgKz0geSAtIHByZXZZXG4gICAgICAgIHByZXZZID0geVxuICAgICAgICB0aGlzLmhlaWdodCA9IGAke01hdGgubWF4KGhlaWdodCwgMCl9cHhgXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgICBtb3VzZW1vdmUsXG5cbiAgICAgICAgbW91c2V1cChldmVudCkge1xuICAgICAgICAgIG1vdXNlbW92ZShldmVudClcbiAgICAgICAgICBoYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB1cGRhdGVFZGl0b3JPcHRpb25zKCkge1xuICAgICAgdGhpcy5lZGl0b3Iuc2V0T3B0aW9ucyh0aGlzLmVkaXRvck9wdGlvbnMpXG4gICAgfSxcblxuICAgIGFzeW5jIG9uQ2xpY2tMaW5rKGVkaXRvcikge1xuICAgICAgY29uc3QgYXR0cmlidXRlcyA9IGF3YWl0IHRoaXMucm9vdENvbXBvbmVudC5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgIGhyZWY6IHtcbiAgICAgICAgICAgIHR5cGU6ICd1cmwnLFxuICAgICAgICAgICAgbGFiZWw6ICdMaW5rJyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgdGl0bGU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGxhYmVsOiAnVGl0bGUnXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBidXR0b25zOiB7XG4gICAgICAgICAgY2FuY2VsOiB7fSxcbiAgICAgICAgICBhcHBseTogeyB0eXBlOiAnc3VibWl0JyB9LFxuICAgICAgICAgIHJlbW92ZToge1xuICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgIGNsaWNrKHsgZGlhbG9nQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAgICAgICBkaWFsb2dDb21wb25lbnQucmVzb2x2ZShudWxsKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBkYXRhOiBnZXRNYXJrQXR0cmlidXRlcyh0aGlzLmVkaXRvci5zdGF0ZSwgJ2xpbmsnKVxuICAgICAgfSlcbiAgICAgIGlmIChhdHRyaWJ1dGVzKSB7XG4gICAgICAgIGxldCB7IGhyZWYsIHRpdGxlIH0gPSBhdHRyaWJ1dGVzXG4gICAgICAgIGlmIChocmVmKSB7XG4gICAgICAgICAgLy8gU2VlIGlmIGBocmVmYCBjYW4gYmUgcGFyc2VkIGFzIGEgVVJMLCBhbmQgaWYgbm90LFxuICAgICAgICAgIC8vIHByZWZpeCBpdCB3aXRoIGEgZGVmYXVsdCBwcm90b2NvbC5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ld1xuICAgICAgICAgICAgbmV3IFVSTChocmVmKVxuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgaHJlZiA9IGBodHRwczovLyR7aHJlZn1gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVkaXRvci5jb21tYW5kcy5zZXRMaW5rKHsgaHJlZiwgdGl0bGUgfSlcbiAgICAgIH0gZWxzZSBpZiAoYXR0cmlidXRlcyA9PT0gbnVsbCkge1xuICAgICAgICBlZGl0b3IuY29tbWFuZHMudW5zZXRMaW5rKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RXh0ZW5zaW9ucygpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgbWFya3MgPSB7fSxcbiAgICAgICAgbm9kZXMgPSB7fSxcbiAgICAgICAgdG9vbHMgPSB7fVxuICAgICAgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gW1xuICAgICAgICAvLyBFc3NlbnRpYWxzOlxuICAgICAgICBEb2N1bWVudCxcbiAgICAgICAgVGV4dCxcbiAgICAgICAgUGFyYWdyYXBoLCAvLyBidXR0b24gY2FuIGJlIGNvbnRyb2xsZWQsIGJ1dCBub2RlIG5lZWRzIHRvIGJlIG9uLlxuXG4gICAgICAgIC8vIE1hcmtzOiBgc2NoZW1hLm1hcmtzYFxuICAgICAgICBtYXJrcy5ib2xkICYmIEJvbGQsXG4gICAgICAgIG1hcmtzLml0YWxpYyAmJiBJdGFsaWMsXG4gICAgICAgIG1hcmtzLnVuZGVybGluZSAmJiBVbmRlcmxpbmUsXG4gICAgICAgIG1hcmtzLnN0cmlrZSAmJiBTdHJpa2UsXG4gICAgICAgIG1hcmtzLnNtYWxsICYmIFNtYWxsLFxuICAgICAgICBtYXJrcy5jb2RlICYmIENvZGUsXG4gICAgICAgIG1hcmtzLmxpbmsgJiYgTGlua1dpdGhUaXRsZSxcblxuICAgICAgICAvLyBOb2RlczogYHNjaGVtYS5ub2Rlc2BcbiAgICAgICAgbm9kZXMuYmxvY2txdW90ZSAmJiBCbG9ja3F1b3RlLFxuICAgICAgICBub2Rlcy5jb2RlQmxvY2sgJiYgQ29kZUJsb2NrLFxuICAgICAgICBIYXJkQnJlYWssIC8vIFRPRE86IFNob3VsZCB0aGlzIGFsd2F5cyBvbj9cbiAgICAgICAgbm9kZXMuaGVhZGluZyAmJiBIZWFkaW5nLmNvbmZpZ3VyZSh7IGxldmVsczogbm9kZXMuaGVhZGluZyB9KSxcbiAgICAgICAgbm9kZXMuaG9yaXpvbnRhbFJ1bGUgJiYgSG9yaXpvbnRhbFJ1bGUsXG4gICAgICAgIChub2Rlcy5vcmRlcmVkTGlzdCB8fCBub2Rlcy5idWxsZXRMaXN0KSAmJiBMaXN0SXRlbSxcbiAgICAgICAgbm9kZXMuYnVsbGV0TGlzdCAmJiBCdWxsZXRMaXN0LFxuICAgICAgICBub2Rlcy5vcmRlcmVkTGlzdCAmJiBPcmRlcmVkTGlzdCxcbiAgICAgICAgLy8gVE9ETzpcbiAgICAgICAgLy8gbm9kZXMudG9kb0xpc3QgJiYgVG9kb0l0ZW0sXG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIFRvZG9MaXN0LFxuXG4gICAgICAgIC8vIFRvb2xzOiBgc2NoZW1hLnRvb2xzYFxuICAgICAgICB0b29scy5oaXN0b3J5ICYmIEhpc3RvcnlcbiAgICAgIF0uZmlsdGVyKGV4dGVuc2lvbiA9PiAhIWV4dGVuc2lvbilcbiAgICB9LFxuXG4gICAgZ2V0QnV0dG9ucyhzZXR0aW5nc05hbWUsIGRlc2NyaXB0aW9ucykge1xuICAgICAgY29uc3QgbGlzdCA9IFtdXG4gICAgICBjb25zdCB7IGNvbW1hbmRzIH0gPSB0aGlzLmVkaXRvclxuXG4gICAgICBjb25zdCBhZGRCdXR0b24gPSAoeyBuYW1lLCBpY29uLCBjb21tYW5kLCBhdHRyaWJ1dGVzLCBvbkNsaWNrIH0pID0+IHtcbiAgICAgICAgbGlzdC5wdXNoKHtcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIGljb24sXG4gICAgICAgICAgaXNBY3RpdmU6IHRoaXMuZWRpdG9yLmlzQWN0aXZlKG5hbWUsIGF0dHJpYnV0ZXMpLFxuICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbW1hbmQgPz89XG4gICAgICAgICAgICAgIG5hbWUgaW4gY29tbWFuZHNcbiAgICAgICAgICAgICAgICA/IG5hbWVcbiAgICAgICAgICAgICAgICA6IGB0b2dnbGUke2NhbWVsaXplKG5hbWUsIHRydWUpfWBcbiAgICAgICAgICAgIGlmIChjb21tYW5kIGluIGNvbW1hbmRzKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGFwcGx5ID0gYXR0cmlidXRlcyA9PlxuICAgICAgICAgICAgICAgIHRoaXMuZWRpdG9yLmNoYWluKClbY29tbWFuZF0oYXR0cmlidXRlcykuZm9jdXMoKS5ydW4oKVxuICAgICAgICAgICAgICBvbkNsaWNrXG4gICAgICAgICAgICAgICAgPyBvbkNsaWNrKHRoaXMuZWRpdG9yLCBhdHRyaWJ1dGVzKVxuICAgICAgICAgICAgICAgIDogYXBwbHkoYXR0cmlidXRlcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zY2hlbWFbc2V0dGluZ3NOYW1lXVxuICAgICAgaWYgKHNldHRpbmdzKSB7XG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIGRlc2NyaXB0aW9uXSBvZiBPYmplY3QuZW50cmllcyhkZXNjcmlwdGlvbnMpKSB7XG4gICAgICAgICAgY29uc3Qgc2V0dGluZ05hbWUgPSBbJ3VuZG8nLCAncmVkbyddLmluY2x1ZGVzKG5hbWUpID8gJ2hpc3RvcnknIDogbmFtZVxuICAgICAgICAgIGNvbnN0IHNldHRpbmcgPSBzZXR0aW5nc1tzZXR0aW5nTmFtZV1cbiAgICAgICAgICBjb25zdCBpY29uID0gaHlwaGVuYXRlKG5hbWUpXG4gICAgICAgICAgaWYgKHNldHRpbmcpIHtcbiAgICAgICAgICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICBhZGRCdXR0b24oeyBuYW1lLCBpY29uIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGRlc2NyaXB0aW9uKSkge1xuICAgICAgICAgICAgICBjb25zdCB7IGNvbW1hbmQsIGF0dHJpYnV0ZSwgdmFsdWVzLCBvbkNsaWNrIH0gPSBkZXNjcmlwdGlvblxuICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzQXJyYXkodmFsdWVzKSAmJiBpc0FycmF5KHNldHRpbmcpKSB7XG4gICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGhlYWRpbmcgbGV2ZWwgYXR0cnM6XG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIHZhbHVlcykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2V0dGluZy5pbmNsdWRlcyh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICBhZGRCdXR0b24oe1xuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246IGAke2ljb259LSR7dmFsdWV9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IFthdHRyaWJ1dGVdOiB2YWx1ZSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DbGlja1xuICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYWRkQnV0dG9uKHsgbmFtZSwgaWNvbiwgY29tbWFuZCwgb25DbGljayB9KVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH0sXG5cbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLmVkaXRvci5jb21tYW5kcy5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXJFbGVtZW50KCkge1xuICAgICAgdGhpcy5lZGl0b3IuY29tbWFuZHMuYmx1cigpXG4gICAgfVxuICB9XG59KVxuXG5jb25zdCBTbWFsbCA9IE1hcmsuY3JlYXRlKHtcbiAgbmFtZTogJ3NtYWxsJyxcblxuICBwYXJzZUhUTUwoKSB7XG4gICAgcmV0dXJuIFt7IHRhZzogJ3NtYWxsJyB9XVxuICB9LFxuXG4gIHJlbmRlckhUTUwoKSB7XG4gICAgcmV0dXJuIFsnc21hbGwnLCAwXVxuICB9LFxuXG4gIGFkZENvbW1hbmRzKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzZXRTbWFsbDpcbiAgICAgICAgYXR0cmlidXRlcyA9PlxuICAgICAgICAoeyBjb21tYW5kcyB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnNldE1hcmsodGhpcy5uYW1lLCBhdHRyaWJ1dGVzKVxuICAgICAgICB9LFxuICAgICAgdG9nZ2xlU21hbGw6XG4gICAgICAgIGF0dHJpYnV0ZXMgPT5cbiAgICAgICAgKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb21tYW5kcy50b2dnbGVNYXJrKHRoaXMubmFtZSwgYXR0cmlidXRlcylcbiAgICAgICAgfSxcbiAgICAgIHVuc2V0U21hbGw6XG4gICAgICAgICgpID0+XG4gICAgICAgICh7IGNvbW1hbmRzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gY29tbWFuZHMudW5zZXRNYXJrKHRoaXMubmFtZSlcbiAgICAgICAgfVxuICAgIH1cbiAgfVxufSlcblxuY29uc3QgTGlua1dpdGhUaXRsZSA9IExpbmsuZXh0ZW5kKHtcbiAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgc2NoZW1hOiB7XG4gICAgYXR0cnM6IHtcbiAgICAgIGhyZWY6IHtcbiAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgfSxcbiAgICAgIHRpdGxlOiB7XG4gICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFyc2VIVE1MKCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIHRhZzogJ2EnLFxuICAgICAgICAgIGdldEF0dHJzOiBlbGVtZW50ID0+ICh7XG4gICAgICAgICAgICBocmVmOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnaHJlZicpLFxuICAgICAgICAgICAgdGl0bGU6IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCd0aXRsZScpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH0sXG5cbiAgICByZW5kZXJIVE1MKG5vZGUpIHtcbiAgICAgIHJldHVybiBbJ2EnLCBub2RlLmF0dHJzLCAwXVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLW1hcmt1cCB7XG4gIEBleHRlbmQgJWlucHV0O1xuXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAuZGl0by1yZXNpemUge1xuICAgIEBleHRlbmQgJWljb24tcmVzaXplO1xuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogdW5zZXQ7XG4gICAgbGVmdDogdW5zZXQ7XG4gICAgcmlnaHQ6IDA7XG4gICAgYm90dG9tOiAwO1xuICAgIHdpZHRoOiAxZW07XG4gICAgaGVpZ2h0OiAxZW07XG4gIH1cblxuICAuUHJvc2VNaXJyb3Ige1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBvdXRsaW5lOiBub25lO1xuICB9XG5cbiAgLmRpdG8tbWFya3VwLWVkaXRvciB7XG4gICAgb3ZlcmZsb3cteTogc2Nyb2xsO1xuICAgIG1hcmdpbi10b3A6ICRpbnB1dC1wYWRkaW5nLXZlcjtcbiAgICAvLyBNb3ZlIHBhZGRpbmcgXCJpbnNpZGVcIiBlZGl0b3IgdG8gY29ycmVjdGx5IHBvc2l0aW9uIHNjcm9sbGJhclxuICAgIG1hcmdpbi1yaWdodDogLSRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgICBwYWRkaW5nLXJpZ2h0OiAkaW5wdXQtcGFkZGluZy1ob3I7XG4gIH1cblxuICAuZGl0by1idXR0b25zLXRvb2xiYXIge1xuICAgIG1hcmdpbjogMDtcbiAgfVxuXG4gIGgxLFxuICBoMixcbiAgaDMsXG4gIHAsXG4gIHVsLFxuICBvbCxcbiAgcHJlLFxuICBibG9ja3F1b3RlIHtcbiAgICBtYXJnaW46IDFyZW0gMDtcblxuICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLXRvcDogMDtcbiAgICB9XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgICB9XG4gIH1cblxuICBoMSxcbiAgaDIsXG4gIGgzIHtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIGgxIHtcbiAgICBmb250LXNpemU6IDEuNHJlbTtcbiAgfVxuXG4gIGgyIHtcbiAgICBmb250LXNpemU6IDEuMnJlbTtcbiAgfVxuXG4gIHVsIHtcbiAgICBsaXN0LXN0eWxlOiBkaXNjO1xuICB9XG5cbiAgY29kZSB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vO1xuICB9XG5cbiAgcHJlIHtcbiAgICBwYWRkaW5nOiAwLjdyZW0gMXJlbTtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItZGFya2VyO1xuICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgb3ZlcmZsb3cteDogYXV0bztcblxuICAgIGNvZGUge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgfVxuICB9XG5cbiAgcCBjb2RlIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgcGFkZGluZzogMCAwLjNyZW07XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXI7XG4gIH1cblxuICBhIHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgY29sb3I6IGJsdWU7XG4gICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7XG4gIH1cblxuICB1bCxcbiAgb2wge1xuICAgIHBhZGRpbmctbGVmdDogMnJlbTtcbiAgfVxuXG4gIGxpIHtcbiAgICAmID4gcCxcbiAgICAmID4gb2wsXG4gICAgJiA+IHVsIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG4gIH1cblxuICBibG9ja3F1b3RlIHtcbiAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICRjb2xvci1saWdodGVyO1xuICAgIHBhZGRpbmctbGVmdDogMXJlbTtcbiAgICBmb250LXN0eWxlOiBpdGFsaWM7XG5cbiAgICBwIHtcbiAgICAgIG1hcmdpbjogMDtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tbXVsdGlzZWxlY3RcbiAgLmRpdG8tbXVsdGlzZWxlY3RfX2lubmVyXG4gICAgVnVlTXVsdGlzZWxlY3QoXG4gICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZE9wdGlvbnNcIlxuICAgICAgOmNsYXNzPWB7XG4gICAgICAgICdtdWx0aXNlbGVjdC0tbXVsdGlwbGUnOiBtdWx0aXBsZSxcbiAgICAgICAgJ211bHRpc2VsZWN0LS1sb2FkaW5nJzogaXNMb2FkaW5nLFxuICAgICAgICAnbXVsdGlzZWxlY3QtLWhpZ2hsaWdodCc6IHNob3dIaWdobGlnaHRcbiAgICAgIH1gXG4gICAgICA6c2hvd0xhYmVscz1cImZhbHNlXCJcbiAgICAgIDpwbGFjZWhvbGRlcj1cInBsYWNlaG9sZGVyXCJcbiAgICAgIHRhZ1BsYWNlaG9sZGVyPVwiUHJlc3MgZW50ZXIgdG8gYWRkIG5ldyB0YWdcIlxuICAgICAgOm9wdGlvbnM9XCJwb3B1bGF0ZSAmJiBhY3RpdmVPcHRpb25zIHx8IFtdXCJcbiAgICAgIDpjdXN0b21MYWJlbD1cImdldExhYmVsRm9yT3B0aW9uXCJcbiAgICAgIDp0cmFja0J5PVwib3B0aW9uVmFsdWVcIlxuICAgICAgOmdyb3VwTGFiZWw9XCJncm91cEJ5TGFiZWxcIlxuICAgICAgOmdyb3VwVmFsdWVzPVwiZ3JvdXBCeU9wdGlvbnNcIlxuICAgICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgICAgOnRhZ2dhYmxlPVwidGFnZ2FibGVcIlxuICAgICAgOnNlYXJjaGFibGU9XCJzZWFyY2hhYmxlXCJcbiAgICAgIDppbnRlcm5hbFNlYXJjaD1cIiFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOnByZXNlcnZlU2VhcmNoPVwiISFzZWFyY2hGaWx0ZXJcIlxuICAgICAgOmNsZWFyT25TZWxlY3Q9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpjbG9zZU9uU2VsZWN0PVwiIXN0YXlPcGVuXCJcbiAgICAgIDpsb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgQG9wZW49XCJvbk9wZW5cIlxuICAgICAgQGNsb3NlPVwib25DbG9zZVwiXG4gICAgICBAdGFnPVwib25BZGRUYWdcIlxuICAgICAgQHNlYXJjaC1jaGFuZ2U9XCJvblNlYXJjaENoYW5nZVwiXG4gICAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICApXG4gIC8vLSBFZGl0IGJ1dHRvbiBpcyBuZXZlciBkaXNhYmxlZCwgZXZlbiBpZiB0aGUgZmllbGQgaXMgZGlzYWJsZWQuXG4gIERpdG9FZGl0QnV0dG9ucyhcbiAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImZhbHNlXCJcbiAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuaW1wb3J0IFZ1ZU11bHRpc2VsZWN0IGZyb20gJ3Z1ZS1tdWx0aXNlbGVjdCdcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBpc0Jvb2xlYW4gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ211bHRpc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IFZ1ZU11bHRpc2VsZWN0IH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VhcmNoZWRPcHRpb25zOiBudWxsLFxuICAgICAgcG9wdWxhdGU6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc2VsZWN0ZWRPcHRpb25zOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAodGhpcy5zZWxlY3RlZFZhbHVlIHx8IFtdKVxuICAgICAgICAgICAgICAubWFwKFxuICAgICAgICAgICAgICAgIC8vIElmIGFuIG9wdGlvbiBjYW5ub3QgYmUgZm91bmQsIHdlIG1heSBiZSBpbiB0YWdnYWJsZSBtb2RlIGFuZFxuICAgICAgICAgICAgICAgIC8vIGNhbiBhZGQgaXQuXG4gICAgICAgICAgICAgICAgdmFsdWUgPT4gKFxuICAgICAgICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSkgfHwgdGhpcy5hZGRUYWdPcHRpb24odmFsdWUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC8vIEZpbHRlciBvdXQgb3B0aW9ucyB0aGF0IHdlIGNvdWxkbid0IG1hdGNoLlxuICAgICAgICAgICAgICAvLyBUT0RPOiBTaG91bGQgd2UgZGlzcGxheSBhbiBlcnJvciBpbnN0ZWFkP1xuICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgOiB0aGlzLnNlbGVjdGVkT3B0aW9uXG4gICAgICB9LFxuXG4gICAgICBzZXQob3B0aW9uKSB7XG4gICAgICAgIC8vIENvbnZlcnQgdmFsdWUgdG8gb3B0aW9ucyBvYmplY3QsIHNpbmNlIHZ1ZS1tdWx0aXNlbGVjdCBjYW4ndCBtYXAgdGhhdFxuICAgICAgICAvLyBpdHNlbGYgdW5mb3J0dW5hdGVseS4gYHRyYWNrLWJ5YCBpcyB1c2VkIGZvciA6a2V5IG1hcHBpbmcgaXQgc2VlbXMuXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHRoaXMubXVsdGlwbGVcbiAgICAgICAgICA/IChvcHRpb24gfHwgW10pLm1hcCh2YWx1ZSA9PiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKHZhbHVlKSlcbiAgICAgICAgICA6IHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNlYXJjaGVkT3B0aW9ucyB8fCB0aGlzLm9wdGlvbnNcbiAgICB9LFxuXG4gICAgbXVsdGlwbGU6IGdldFNjaGVtYUFjY2Vzc29yKCdtdWx0aXBsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgc2VhcmNoYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3NlYXJjaGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHRhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigndGFnZ2FibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHN0YXlPcGVuOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RheU9wZW4nLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHBsYWNlaG9sZGVyKCkge1xuICAgICAgbGV0IHsgcGxhY2Vob2xkZXIsIHNlYXJjaGFibGUsIHRhZ2dhYmxlIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgaWYgKGlzQm9vbGVhbihwbGFjZWhvbGRlcikpIHtcbiAgICAgICAgcGxhY2Vob2xkZXIgPSBwbGFjZWhvbGRlciA/IHVuZGVmaW5lZCA6IG51bGxcbiAgICAgIH1cbiAgICAgIHJldHVybiBwbGFjZWhvbGRlciA9PT0gdW5kZWZpbmVkXG4gICAgICAgID8gc2VhcmNoYWJsZSAmJiB0YWdnYWJsZVxuICAgICAgICAgID8gYFNlYXJjaCBvciBhZGQgYSAke3RoaXMubGFiZWx9YFxuICAgICAgICAgIDogc2VhcmNoYWJsZVxuICAgICAgICAgICAgPyBgU2VsZWN0IG9yIHNlYXJjaCAke3RoaXMubGFiZWx9YFxuICAgICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgOiBwbGFjZWhvbGRlclxuICAgIH0sXG5cbiAgICBzaG93SGlnaGxpZ2h0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNNb3VudGVkICYmIHRoaXMuJHJlZnMuZWxlbWVudC5wb2ludGVyRGlydHlcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICBpZiAodGhpcy5hdXRvZm9jdXMpIHtcbiAgICAgIC8vIHZ1ZS1tdWx0aXNlbGVjdCBkb2Vzbid0IHN1cHBvcnQgdGhlIGF1dG9mb2N1cyBhdHRyaWJ1dGUuIFdlIG5lZWQgdG9cbiAgICAgIC8vIGhhbmRsZSBpdCBoZXJlLlxuICAgICAgdGhpcy5mb2N1cygpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBhZGRUYWdPcHRpb24odGFnKSB7XG4gICAgICBpZiAodGhpcy50YWdnYWJsZSkge1xuICAgICAgICBjb25zdCB7IG9wdGlvbkxhYmVsLCBvcHRpb25WYWx1ZSB9ID0gdGhpc1xuICAgICAgICBjb25zdCBvcHRpb24gPVxuICAgICAgICAgIG9wdGlvbkxhYmVsICYmIG9wdGlvblZhbHVlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBbb3B0aW9uTGFiZWxdOiB0YWcsXG4gICAgICAgICAgICAgICAgLy8gVE9ETzogRGVmaW5lIGEgc2ltcGxlIHNjaGVtYSBvcHRpb24gdG8gY29udmVydCB0aGUgdGFnIHZhbHVlXG4gICAgICAgICAgICAgICAgLy8gdG8gc29tZXRoaW5nIGVsc2UsIGUuZy4gYHRvVGFnOiB0YWcgPT4gdW5kZXJzY29yZSh0YWcpYFxuICAgICAgICAgICAgICAgIFtvcHRpb25WYWx1ZV06IHRhZ1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHRhZ1xuICAgICAgICB0aGlzLm9wdGlvbnMucHVzaChvcHRpb24pXG4gICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy4kcmVmcy5lbGVtZW50LmFjdGl2YXRlKClcbiAgICB9LFxuXG4gICAgYmx1ckVsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRyZWZzLmVsZW1lbnQuZGVhY3RpdmF0ZSgpXG4gICAgfSxcblxuICAgIG9uT3BlbigpIHtcbiAgICAgIHRoaXMucG9wdWxhdGUgPSB0cnVlXG4gICAgfSxcblxuICAgIG9uQ2xvc2UoKSB7XG4gICAgICAvLyBTaW5jZSB3ZSBkb24ndCBmaXJlIGJsdXIgZXZlbnRzIHdoaWxlIHRoZSBtdWx0aXNlbGVjdCBpcyBvcGVuIChzZWVcbiAgICAgIC8vIGJlbG93KSwgd2UgbmVlZCB0byBkbyBpdCBoZXJlLCB3aGVuIGl0J3MgYWN0dWFsbHkgY2xvc2VkLlxuICAgICAgaWYgKHRoaXMuZm9jdXNlZCkge1xuICAgICAgICB0aGlzLm9uQmx1cigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIGlmICghdGhpcy4kcmVmcy5lbGVtZW50LmlzT3Blbikge1xuICAgICAgICBUeXBlTWl4aW4ubWV0aG9kcy5vbkJsdXIuY2FsbCh0aGlzKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkFkZFRhZyh0YWcpIHtcbiAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuYWRkVGFnT3B0aW9uKHRhZylcbiAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgdGhpcy52YWx1ZS5wdXNoKHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25TZWFyY2hDaGFuZ2UocXVlcnkpIHtcbiAgICAgIGlmICh0aGlzLnNlYXJjaEZpbHRlcikge1xuICAgICAgICBpZiAocXVlcnkpIHtcbiAgICAgICAgICAvLyBTZXQgYHNlYXJjaGVkT3B0aW9uc2AgdG8gYW4gZW1wdHkgYXJyYXksIGJlZm9yZSBpdCB3aWxsIGJlXG4gICAgICAgICAgLy8gcG9wdWxhdGVkIGFzeW5jaHJvbm91c2x5IHdpdGggdGhlIGFjdHVhbCByZXN1bHRzLlxuICAgICAgICAgIHRoaXMuc2VhcmNoZWRPcHRpb25zID0gW11cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IGF3YWl0IHRoaXMucmVzb2x2ZURhdGEoXG4gICAgICAgICAgICAoKSA9PiB0aGlzLnNlYXJjaEZpbHRlcihuZXcgRGl0b0NvbnRleHQodGhpcywgeyBxdWVyeSB9KSlcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQ2xlYXIgYHNlYXJjaGVkT3B0aW9uc2Agd2hlbiB0aGUgcXVlcnkgaXMgY2xlYXJlZC5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5AaW1wb3J0ICd2dWUtbXVsdGlzZWxlY3QvZGlzdC92dWUtbXVsdGlzZWxlY3QuY3NzJztcblxuJHNwaW5uZXItd2lkdGg6ICRzZWxlY3QtYXJyb3ctd2lkdGg7XG4kdGFnLWljb24td2lkdGg6IDEuOGVtO1xuJHRhZy1tYXJnaW46IDJweDtcbiR0YWctcGFkZGluZzogM3B4O1xuJHRhZy1saW5lLWhlaWdodDogMWVtO1xuXG4uZGl0by1tdWx0aXNlbGVjdCB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgJl9faW5uZXIge1xuICAgIGZsZXg6IDE7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB9XG5cbiAgLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZy1oYWxmO1xuICB9XG5cbiAgLm11bHRpc2VsZWN0IHtcbiAgICAkc2VsZjogbGFzdC1zZWxlY3RvcigmKTtcblxuICAgIC0taW5wdXQtd2lkdGg6IDEwMCU7XG5cbiAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgbWluLWhlaWdodDogaW5oZXJpdDtcbiAgICBjb2xvcjogJGNvbG9yLWJsYWNrO1xuXG4gICAgJi0tbXVsdGlwbGUge1xuICAgICAgLS1pbnB1dC13aWR0aDogYXV0bztcbiAgICB9XG5cbiAgICAmX190YWdzIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgICBtaW4taGVpZ2h0OiBpbmhlcml0O1xuICAgICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgICBwYWRkaW5nOiAwICRzcGlubmVyLXdpZHRoIDAgMDtcbiAgICAgIC8vIFNvIHRhZ3MgY2FuIGZsb2F0IG9uIG11bHRpcGxlIGxpbmVzIGFuZCBoYXZlIHByb3BlciBtYXJnaW5zOlxuICAgICAgcGFkZGluZy1ib3R0b206ICR0YWctbWFyZ2luO1xuXG4gICAgICAuZGl0by1oYXMtZXJyb3JzICYge1xuICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1lcnJvcjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX190YWcge1xuICAgICAgZmxvYXQ6IGxlZnQ7XG4gICAgICBtYXJnaW46ICR0YWctbWFyZ2luIDAgMCAkdGFnLW1hcmdpbjtcbiAgICAgIGJvcmRlci1yYWRpdXM6IDFlbTtcbiAgICAgIHBhZGRpbmc6ICR0YWctcGFkZGluZyAkdGFnLWljb24td2lkdGggJHRhZy1wYWRkaW5nIDAuOGVtO1xuICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHQ7XG4gICAgICBoZWlnaHQ6IGNhbGMoJGlucHV0LWhlaWdodCAtIDIgKiAkdGFnLXBhZGRpbmcpO1xuICAgIH1cblxuICAgICZfX3RhZ3Mtd3JhcCB7XG4gICAgICBvdmVyZmxvdzogYXV0bztcbiAgICAgIGxpbmUtaGVpZ2h0OiAwO1xuICAgIH1cblxuICAgICZfX3NpbmdsZSxcbiAgICAmX19wbGFjZWhvbGRlcixcbiAgICAmX19pbnB1dCB7XG4gICAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgICAgZmxleDogMSAwIDAlO1xuICAgICAgd2lkdGg6IDA7XG4gICAgICBtaW4taGVpZ2h0OiAwO1xuICAgICAgbWFyZ2luOiAwIDAgMXB4IDA7XG4gICAgICBmb250LXNpemU6IGluaGVyaXQ7XG4gICAgICBsaW5lLWhlaWdodDogaW5oZXJpdDtcbiAgICAgIC8vIFNhZGx5LCB2dWUtc2VsZWN0IHNldHMgc3R5bGU9XCJwYWRkaW5nOiAuLi47XCIgaW4gYWRkaXRpb24gdG8gdXNpbmdcbiAgICAgIC8vIGNsYXNzZXMsIHNvIGAhaW1wb3J0YW50YCBpcyBuZWNlc3Nhcnk6XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZyAhaW1wb3J0YW50O1xuICAgICAgLy8gU28gaW5wdXQgY2FuIGZsb2F0IG5leHQgdG8gdGFncyBhbmQgaGF2ZSBwcm9wZXIgbWFyZ2lucyB3aXRoXG4gICAgICAvLyAmX190YWdzOlxuICAgICAgcGFkZGluZy1ib3R0b206IDAgIWltcG9ydGFudDtcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgfVxuXG4gICAgJl9fcGxhY2Vob2xkZXIsXG4gICAgJl9faW5wdXQ6OnBsYWNlaG9sZGVyIHtcbiAgICAgIGNvbG9yOiAkY29sb3ItcGxhY2Vob2xkZXI7XG4gICAgfVxuXG4gICAgJl9fcGxhY2Vob2xkZXIge1xuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAvLyBFbmZvcmNlIGFjdHVhbCBsaW5lLWhlaWdodCBmb3IgcG9zaXRpb25pbmcuXG4gICAgICAgIGNvbnRlbnQ6ICdcXDIwMGInO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3NlbGVjdCxcbiAgICAmX19zcGlubmVyIHtcbiAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAvLyAkYm9yZGVyLXdpZHRoIHRvIHByZXZlbnQgbWFza2luZyBib3JkZXIgd2l0aCAmX19zcGlubmVyXG4gICAgICB0b3A6ICRib3JkZXItd2lkdGg7XG4gICAgICByaWdodDogJGJvcmRlci13aWR0aDtcbiAgICAgIGJvdHRvbTogJGJvcmRlci13aWR0aDtcbiAgICAgIGhlaWdodDogaW5oZXJpdDtcbiAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIH1cblxuICAgICZfX3NlbGVjdCB7XG4gICAgICB3aWR0aDogMDtcbiAgICAgIG1hcmdpbi1yaWdodDogY2FsYygkc2VsZWN0LWFycm93LXdpZHRoIC8gMik7XG5cbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIEBpbmNsdWRlIGFycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSk7XG5cbiAgICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbTtcbiAgICAgICAgcmlnaHQ6IGNhbGMoLTEgKiAkc2VsZWN0LWFycm93LXNpemUgLyAyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19zcGlubmVyIHtcbiAgICAgIHdpZHRoOiAkc3Bpbm5lci13aWR0aDtcblxuICAgICAgJjo6YmVmb3JlLFxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAvLyBDaGFuZ2UgdGhlIHdpZHRoIG9mIHRoZSBsb2FkaW5nIHNwaW5uZXJcbiAgICAgICAgYm9yZGVyLXdpZHRoOiAzcHg7XG4gICAgICAgIGJvcmRlci10b3AtY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgICAgIGluc2V0OiAwO1xuICAgICAgICBtYXJnaW46IGF1dG87XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fb3B0aW9uIHtcbiAgICAgICRvcHRpb246IGxhc3Qtc2VsZWN0b3IoJik7XG5cbiAgICAgIG1pbi1oZWlnaHQ6IHVuc2V0O1xuICAgICAgaGVpZ2h0OiB1bnNldDtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkbGluZS1oZWlnaHQ7XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAvLyBJbnN0cnVjdGlvbiB0ZXh0IGZvciBvcHRpb25zXG4gICAgICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICAgICAgICBsaW5lLWhlaWdodDogJHRhZy1saW5lLWhlaWdodDtcbiAgICAgIH1cblxuICAgICAgLy8gT25seSBzaG93IHRoZSBoaWdobGlnaHQgb25jZSB0aGUgcHVsbGRvd24gaGFzIHJlY2VpdmVkIG1vdXNlIG9yXG4gICAgICAvLyBrZXlib2FyZCBpbnRlcmFjdGlvbiwgaW4gd2hpY2ggY2FzZSBgJi0taGlnaGxpZ2h0YCB3aWxsIGJlIHNldCxcbiAgICAgIC8vIHdoaWNoIGlzIGNvbnRyb2xsZWQgYnkgYHBvaW50ZXJEaXJ0eWAgaW4gdnVlLW11bHRpc2VsZWN0LlxuICAgICAgLy8gVW50aWwgdGhlbiwgY2xlYXIgdGhlIGhpZ2hsaWdodCBzdHlsZSwgYnV0IG9ubHkgaWYgaXQgaXNuJ3QgYWxzb1xuICAgICAgLy8gZGlzYWJsZWQgb3Igc2VsZWN0ZWQsIGluIHdoaWNoIGNhc2Ugd2Ugd2FudCB0byBrZWVwIHRoZSBzdHlsZS5cbiAgICAgIEBhdC1yb290ICN7JHNlbGZ9Om5vdCgjeyRzZWxmfS0taGlnaGxpZ2h0KVxuICAgICAgICAgICN7JG9wdGlvbn06bm90KCN7JG9wdGlvbn0tLWRpc2FibGVkKTpub3QoI3skb3B0aW9ufS0tc2VsZWN0ZWQpIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cblxuICAgICAgJi0taGlnaGxpZ2h0IHtcbiAgICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgICB9XG5cbiAgICAgICAgQGF0LXJvb3QgI3skc2VsZn0jeyRzZWxmfS0taGlnaGxpZ2h0ICN7bGFzdC1zZWxlY3RvcigmKX0ge1xuICAgICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYtLXNlbGVjdGVkIHtcbiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuICAgICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0O1xuXG4gICAgICAgIEBhdC1yb290ICN7JHNlbGZ9I3skc2VsZn0tLWhpZ2hsaWdodCAmI3skb3B0aW9ufS0taGlnaGxpZ2h0IHtcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgJi0tZGlzYWJsZWQge1xuICAgICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgICBjb2xvcjogJGNvbG9yLWRpc2FibGVkO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX3RhZyB7XG4gICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cblxuICAgICZfX3RhZy1pY29uIHtcbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgICB3aWR0aDogJHRhZy1pY29uLXdpZHRoO1xuICAgICAgbWFyZ2luOiAwO1xuXG4gICAgICAmOjphZnRlciB7XG4gICAgICAgIEBleHRlbmQgJWljb24tY2xlYXI7XG5cbiAgICAgICAgZm9udC1zaXplOiAwLjllbTtcbiAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyOjphZnRlciB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX190YWdzLFxuICAgICZfX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICB9XG5cbiAgICAmX19jb250ZW50LXdyYXBwZXIge1xuICAgICAgei1pbmRleDogJHotaW5kZXgtcG9wdXA7XG4gICAgICBib3JkZXItY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuXG4gICAgJjpub3QoJi0tYWJvdmUpICN7JHNlbGZ9X19jb250ZW50LXdyYXBwZXIge1xuICAgICAgbWFyZ2luOiAoLSRib3JkZXItd2lkdGgpIDAgMDtcbiAgICAgIGJvcmRlci10b3AtY29sb3I6ICRib3JkZXItY29sb3I7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gICAgfVxuXG4gICAgJi0tYWJvdmUgI3skc2VsZn1fX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICBtYXJnaW46IDAgMCAoLSRib3JkZXItd2lkdGgpO1xuICAgICAgYm9yZGVyLWJvdHRvbS1jb2xvcjogJGJvcmRlci1jb2xvcjtcbiAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogMDtcbiAgICB9XG5cbiAgICAmLS1hY3RpdmUge1xuICAgICAgI3skc2VsZn1fX3BsYWNlaG9sZGVyIHtcbiAgICAgICAgLy8gRG9uJ3QgdXNlIGBkaXNwbGF5OiBub25lYCB0byBoaWRlIHBsYWNlLWhvbGRlciwgYXMgdGhlIGxheW91dCB3b3VsZFxuICAgICAgICAvLyBjb2xsYXBzZS5cbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgICB9XG5cbiAgICAgICN7JHNlbGZ9X19zaW5nbGUsXG4gICAgICAjeyRzZWxmfV9faW5wdXQge1xuICAgICAgICAvLyBTYWRseSwgdnVlLXNlbGVjdCBzZXRzIGBzdHlsZT1cIndpZHRoXCJgIGluIGFkZGl0aW9uIHRvIHVzaW5nIGNsYXNzZXNcbiAgICAgICAgLy8gc28gYCFpbXBvcnRhbnRgIGlzIG5lY2Vzc2FyeTpcbiAgICAgICAgd2lkdGg6IHZhcigtLWlucHV0LXdpZHRoKSAhaW1wb3J0YW50O1xuICAgICAgfVxuXG4gICAgICAjeyRzZWxmfV9fdGFncyB7XG4gICAgICAgIGJvcmRlci1jb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gICAgICB9XG5cbiAgICAgICYjeyRzZWxmfS0tYWJvdmUge1xuICAgICAgICAjeyRzZWxmfV9fdGFncyB7XG4gICAgICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICYtLWxvYWRpbmcge1xuICAgICAgI3skc2VsZn1fX3RhZ3Mge1xuICAgICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn1fX2NvbnRlbnQtd3JhcHBlciB7XG4gICAgICAgIGRpc3BsYXk6IG5vbmU7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wdXRlZDoge1xuICAgIGlucHV0VmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgIT09IG51bGwgPyB0aGlzLnZhbHVlIDogJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICB0aGlzLnZhbHVlID1cbiAgICAgICAgICB2YWx1ZSAhPT0gJydcbiAgICAgICAgICAgID8gdGhpcy5pc0ludGVnZXJcbiAgICAgICAgICAgICAgPyBwYXJzZUludCh2YWx1ZSwgMTApXG4gICAgICAgICAgICAgIDogcGFyc2VGbG9hdCh2YWx1ZSlcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGFibGVcbiAgICBpc0ludGVnZXIoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgc3RlcFZhbHVlKCkge1xuICAgICAgLy8gRG9uJ3Qgc2hvdyBzdGVwcyBpZiB0aGUgaW5wdXQgaXMgYWxzbyBjbGVhcmFibGUsIHNpbmNlIHRoZSBzdGVwIGJ1dHRvbnNcbiAgICAgIC8vIHdvdWxkIGNvbGxpZGUgd2l0aCB0aGUgY2xlYXIgYnV0dG9uLlxuICAgICAgcmV0dXJuIHRoaXMuY2xlYXJhYmxlXG4gICAgICAgID8gbnVsbFxuICAgICAgICA6IHRoaXMuc3RlcCA9PSBudWxsICYmICF0aGlzLmlzSW50ZWdlclxuICAgICAgICAgID8gJ2FueSdcbiAgICAgICAgICA6IHRoaXMuc3RlcFxuICAgIH0sXG5cbiAgICBkZWNpbWFsczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlY2ltYWxzJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICBzdGVwOiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RlcCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChzdGVwKSB7XG4gICAgICAgIC8vIEZvciBpbnRlZ2Vycywgcm91bmQgdGhlIHN0ZXBzIHRvIHRoZSBuZXh0IGJpZ2dlciBpbnRlZ2VyIHZhbHVlOlxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgc3RlcCAhPSBudWxsID8gTWF0aC5jZWlsKHN0ZXApIDogc3RlcFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgbWluOiBnZXRTY2hlbWFBY2Nlc3NvcignbWluJywge1xuICAgICAgdHlwZTogTnVtYmVyLFxuICAgICAgZ2V0KG1pbikge1xuICAgICAgICBtaW4gPVxuICAgICAgICAgIG1pbiA9PT0gdW5kZWZpbmVkXG4gICAgICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3JhbmdlJywgeyB0eXBlOiBBcnJheSB9KT8uWzBdXG4gICAgICAgICAgICA6IG1pblxuICAgICAgICByZXR1cm4gdGhpcy5pc0ludGVnZXIgJiYgbWluICE9IG51bGwgPyBNYXRoLmZsb29yKG1pbikgOiBtaW5cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heDogZ2V0U2NoZW1hQWNjZXNzb3IoJ21heCcsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtYXgpIHtcbiAgICAgICAgbWF4ID1cbiAgICAgICAgICBtYXggPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdyYW5nZScsIHsgdHlwZTogQXJyYXkgfSk/LlsxXVxuICAgICAgICAgICAgOiBtYXhcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1heCAhPSBudWxsID8gTWF0aC5jZWlsKG1heCkgOiBtYXhcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIHJhbmdlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmFuZ2UnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldCgpIHtcbiAgICAgICAgLy8gYHRoaXMubWluYCwgYHRoaXMubWF4YCBhbHJlYWR5IHN1cHBvcnQgYHNjaGVtYS5yYW5nZWAsXG4gICAgICAgIC8vIHNvIHJlZGlyZWN0IHRoZXJlLlxuICAgICAgICBjb25zdCB7IG1pbiwgbWF4IH0gPSB0aGlzXG4gICAgICAgIHJldHVybiBtaW4gIT0gbnVsbCAmJiBtYXggIT0gbnVsbCA/IFttaW4sIG1heF0gOiB1bmRlZmluZWRcbiAgICAgIH0sXG5cbiAgICAgIHNldChyYW5nZSkge1xuICAgICAgICAvLyBQcm92aWRlIGEgc2V0dGVyIHRoYXQgZGVsZWdhdGVzIHRvIGBbdGhpcy5taW4sIHRoaXMubWF4XWAsXG4gICAgICAgIC8vIHNpbmNlIHRob3NlIGFscmVhZHkgaGFuZGxlIGBzY2hlbWEucmFuZ2VgLlxuICAgICAgICBpZiAoaXNBcnJheShyYW5nZSkpIHtcbiAgICAgICAgICA7W3RoaXMubWluLCB0aGlzLm1heF0gPSByYW5nZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICBjb25zdCB2YWxpZGF0aW9ucyA9IHt9XG4gICAgICBjb25zdCB7IHJhbmdlLCBtaW4sIG1heCwgZGVjaW1hbHMsIHN0ZXAgfSA9IHRoaXNcbiAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICB2YWxpZGF0aW9ucy5yYW5nZSA9IHJhbmdlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAobWluICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5taW4gPSBtaW5cbiAgICAgICAgfVxuICAgICAgICBpZiAobWF4ICE9IG51bGwpIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5tYXggPSBtYXhcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGRlY2ltYWxzICE9IG51bGwpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuZGVjaW1hbHMgPSBkZWNpbWFsc1xuICAgICAgfSBlbHNlIGlmIChzdGVwKSB7XG4gICAgICAgIGNvbnN0IGRlY2ltYWxzID0gKGAke3N0ZXB9YC5zcGxpdCgnLicpWzFdIHx8ICcnKS5sZW5ndGhcbiAgICAgICAgaWYgKGRlY2ltYWxzID4gMCkge1xuICAgICAgICAgIHZhbGlkYXRpb25zLmRlY2ltYWxzID0gZGVjaW1hbHNcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5pbnRlZ2VyID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pc0ludGVnZXIpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMuaW50ZWdlciA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbklucHV0RmllbGQuZGl0by1udW1iZXIoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgdHlwZT1cIm51bWJlclwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICA6bWluPVwibWluXCJcbiAgOm1heD1cIm1heFwiXG4gIDpzdGVwPVwic3RlcFZhbHVlXCJcbilcbiAgdGVtcGxhdGUoI2FmdGVyKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE51bWJlck1peGluIGZyb20gJy4uL21peGlucy9OdW1iZXJNaXhpbi5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnbnVtYmVyJywgJ2ludGVnZXInXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW051bWJlck1peGluXSxcbiAgICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgaXNJbnRlZ2VyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlID09PSAnaW50ZWdlcidcbiAgICAgIH1cbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi8vIE9ubHkgc2hvdyBzcGluIGJ1dHRvbnMgaWYgdGhlIG51bWJlciBjb21wb25lbnQgZGVmaW5lcyBhIHN0ZXAgc2l6ZS5cbmlucHV0W3R5cGU9J251bWJlciddOm5vdChbc3RlcF0pIHtcbiAgJjo6LXdlYmtpdC1pbm5lci1zcGluLWJ1dHRvbixcbiAgJjo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbiB7XG4gICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICAgIG1hcmdpbjogMDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1vYmplY3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuKVxuICAuZGl0by1vYmplY3QtY29udGVudChcbiAgICB2LWlmPVwib2JqZWN0RGF0YVwiXG4gIClcbiAgICAvLy0gU3VwcG9ydCB0aGUgc2FtZSByZW5kZXJpbmcgb3B0aW9ucyBhcyBUeXBlTGlzdDpcbiAgICBEaXRvU2NoZW1hSW5saW5lZChcbiAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgOmxhYmVsPVwib2JqZWN0TGFiZWxcIlxuICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgb2JqZWN0RGF0YSwgY29udGV4dClcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZCB8fCBpc0xvYWRpbmdcIlxuICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICA6ZGVsZXRhYmxlPVwib2JqZWN0RGF0YSAmJiBkZWxldGFibGVcIlxuICAgICAgOmVkaXRhYmxlPVwib2JqZWN0RGF0YSAmJiBlZGl0YWJsZVwiXG4gICAgICA6ZWRpdFBhdGg9XCJwYXRoXCJcbiAgICAgIDphY2N1bXVsYXRlZEJhc2lzPVwiYWNjdW11bGF0ZWRCYXNpc1wiXG4gICAgICBAZGVsZXRlPVwiZGVsZXRlSXRlbShvYmplY3REYXRhKVwiXG4gICAgKVxuICAgIGNvbXBvbmVudChcbiAgICAgIHYtZWxzZS1pZj1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgOmlzPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICApXG4gICAgc3BhbihcbiAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICB2LWh0bWw9XCJyZW5kZXIoZ2V0Q29udGV4dCgpKVwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2VcbiAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIG9iamVjdERhdGEpXCJcbiAgICApXG4gIC8vLSBOT1RFOiBgRGl0b0VkaXRCdXR0b25zYCBoZXJlIG9ubHkgaGFuZGxlIHRoZSBjcmVhdGUgYnV0dG9uIG91dHNpZGUgb2YgdGhlXG4gIC8vLSBzY2hlbWEsIHRoZSBlZGl0IGJ1dHRvbnMgaW5zaWRlIGFyZSBoYW5kbGVkIGJ5IGBEaXRvU2NoZW1hSW5saW5lZGAuXG4gIERpdG9FZGl0QnV0dG9ucyhcbiAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIm9iamVjdERhdGFcIlxuICAgIDpwYXRoPVwicGF0aFwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7IHJlc29sdmVTY2hlbWFDb21wb25lbnQgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignb2JqZWN0Jywge1xuICBtaXhpbnM6IFtTb3VyY2VNaXhpbl0sXG5cbiAgZ2V0U291cmNlVHlwZSh0eXBlKSB7XG4gICAgLy8gTm8gbmVlZCBmb3IgdHJhbnNmb3JtYXRpb24gaGVyZS4gU2VlIFR5cGVUcmVlTGlzdCBmb3IgZGV0YWlscy5cbiAgICByZXR1cm4gdHlwZVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgb2JqZWN0TGFiZWwoKSB7XG4gICAgICAvLyBPbmx5IHNob3cgYSBsYWJlbCBpZiB0aGUgb2JqZWN0IGlzIGNvbGxhcHNpYmxlLlxuICAgICAgcmV0dXJuIHRoaXMuY29sbGFwc2libGVcbiAgICAgICAgPyB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNjaGVtYSwgdGhpcy5vYmplY3REYXRhLCB7IGFzT2JqZWN0OiB0cnVlIH0pXG4gICAgICAgIDogbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBkYXRhOiB0aGlzLm9iamVjdERhdGEgfSlcbiAgICB9XG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICBhcGksXG4gICAgc2NoZW1hLFxuICAgIG5hbWUsXG4gICAgcm91dGVzLFxuICAgIGxldmVsLFxuICAgIG5lc3RlZCA9IGZhbHNlLFxuICAgIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICByZXNvbHZlU2NoZW1hQ29tcG9uZW50KHNjaGVtYSksXG4gICAgICBTb3VyY2VNaXhpbi5wcm9jZXNzU2NoZW1hKFxuICAgICAgICBhcGksXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcm91dGVzLFxuICAgICAgICBsZXZlbCxcbiAgICAgICAgbmVzdGVkLFxuICAgICAgICBmbGF0dGVuLFxuICAgICAgICBwcm9jZXNzXG4gICAgICApXG4gICAgXSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLW9iamVjdCB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogJGZvcm0tc3BhY2luZztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgbWluLXdpZHRoOiBtaW4tY29udGVudDtcblxuICAuZGl0by1vYmplY3QtY29udGVudCB7XG4gICAgZmxleDogMCAxIDEwMCU7XG4gIH1cblxuICA+IC5kaXRvLWVkaXQtYnV0dG9ucyB7XG4gICAgZmxleDogMSAwIDAlO1xuICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdwYW5lbCcsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGV4Y2x1ZGVWYWx1ZTogdHJ1ZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG4gIG9taXRTcGFjaW5nOiB0cnVlLFxuXG4gIGdldFBhbmVsU2NoZW1hKGFwaSwgc2NoZW1hKSB7XG4gICAgLy8gRm9yIGEgVHlwZVBhbmVsLCB0aGUgY29tcG9uZW50IHNjaGVtYSBpcyBhbHNvIHRoZSBwYW5lbCBzY2hlbWEsIGJ1dFxuICAgIC8vIHJlbW92ZSB0aGUgYWRkZWQgbmFtZSwgc28gaXQgZG9lc24ndCBnZXQgYXBwZW5kZWQgdHdpY2UgdG8gZGF0YS1wYXRoLlxuICAgIGNvbnN0IHsgbmFtZSwgLi4ucGFuZWwgfSA9IHNjaGVtYVxuICAgIHJldHVybiBwYW5lbFxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxucHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgOnZhbHVlPVwicHJvZ3Jlc3NWYWx1ZVwiXG4gIDptYXg9XCJwcm9ncmVzc01heFwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncHJvZ3Jlc3MnLCB7XG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgY29tcHV0ZWQ6IHtcbiAgICBwcm9ncmVzc1ZhbHVlKCkge1xuICAgICAgbGV0IHsgdmFsdWUsIHJhbmdlLCBzdGVwIH0gPSB0aGlzXG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgaWYgKHJhbmdlKSB7XG4gICAgICAgICAgdmFsdWUgLT0gcmFuZ2VbMF1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcCkge1xuICAgICAgICAgIHZhbHVlID0gTWF0aC5yb3VuZCh2YWx1ZSAvIHN0ZXApICogc3RlcFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YWx1ZSA9ICcnXG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWVcbiAgICB9LFxuXG4gICAgcHJvZ3Jlc3NNYXgoKSB7XG4gICAgICBjb25zdCB7IHJhbmdlIH0gPSB0aGlzXG4gICAgICByZXR1cm4gcmFuZ2UgPyByYW5nZVsxXSAtIHJhbmdlWzBdIDogbnVsbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnVsLmRpdG8tcmFkaW8tYnV0dG9ucyhcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9XCJgZGl0by1sYXlvdXQtJHtzY2hlbWEubGF5b3V0IHx8ICd2ZXJ0aWNhbCd9YFwiXG4pXG4gIGxpKFxuICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICApXG4gICAgbGFiZWxcbiAgICAgIGlucHV0LmRpdG8tcmFkaW8tYnV0dG9uKFxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgICB0eXBlPVwicmFkaW9cIlxuICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICApXG4gICAgICB8IHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncmFkaW8nLCB7XG4gIG1peGluczogW09wdGlvbnNNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IHRydWUsXG4gIGRlZmF1bHRXaWR0aDogJ2F1dG8nXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tcmFkaW8tYnV0dG9ucyB7XG4gIGxhYmVsIHtcbiAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzO1xuICB9XG5cbiAgLmRpdG8tcmFkaW8tYnV0dG9uIHtcbiAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmc7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc2VjdGlvbig6Y2xhc3M9XCJ7ICdkaXRvLXNlY3Rpb24tLWxhYmVsbGVkJzogaGFzTGFiZWwgfVwiKVxuICBEaXRvU2NoZW1hSW5saW5lZC5kaXRvLXNlY3Rpb25fX3NjaGVtYShcbiAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cIml0ZW1cIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpwYWRkaW5nPVwiaGFzTGFiZWwgPyAnbmVzdGVkJyA6ICdpbmxpbmVkJ1wiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICA6bGFiZWxOb2RlPVwibGFiZWxOb2RlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXRJdGVtRm9ybVNjaGVtYSwgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VjdGlvbicsIHtcbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+ICFzY2hlbWEubmVzdGVkICYmICEoJ2RlZmF1bHQnIGluIHNjaGVtYSksXG4gIGRlZmF1bHROZXN0ZWQ6IGZhbHNlLFxuICBnZW5lcmF0ZUxhYmVsOiBmYWxzZSxcblxuICBjb21wdXRlZDoge1xuICAgIGl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5uZXN0ZWQgPyB0aGlzLnZhbHVlIDogdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5zY2hlbWEubGFiZWxcbiAgICB9LFxuXG4gICAgY29sbGFwc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzaWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBudWxsLCAvLyBzbyB0aGF0IGA/P2AgYmVsb3cgY2FuIGRvIGl0cyB0aGluZzpcbiAgICAgIGdldChjb2xsYXBzaWJsZSkge1xuICAgICAgICByZXR1cm4gISEoY29sbGFwc2libGUgPz8gdGhpcy5jb2xsYXBzZWQgIT09IG51bGwpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb2xsYXBzZWQ6IGdldFNjaGVtYUFjY2Vzc29yKCdjb2xsYXBzZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldEl0ZW1Gb3JtU2NoZW1hXG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgcm91dGVzLCBsZXZlbCkge1xuICAgIC8vIFByb2Nlc3Mgc2VjdGlvbiBjb21wb25lbnRzIHNvIHRoZWlyIGZvcm1zIGdldCByZXNvbHZlZCB0b28uXG4gICAgYXdhaXQgcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBzY2hlbWEsIHJvdXRlcywgbGV2ZWwpXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zZWN0aW9uIHtcbiAgJi0tbGFiZWxsZWQge1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4ycyAkZWFzZS1vdXQtcXVhcnQ7XG4gICAgbWFyZ2luLXRvcDogJGZvcm0tc3BhY2luZy1oYWxmO1xuXG4gICAgJjpoYXMoLmRpdG8tc2NoZW1hLS1vcGVuKSB7XG4gICAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBOZXN0aW5nIGlzIG5lZWRlZCB0byBtYWtlIGFuIGFycm93IGFwcGVhciBvdmVyIHRoZSBzZWxlY3QgaXRlbTpcbi5kaXRvLXNlbGVjdFxuICAuZGl0by1zZWxlY3RfX2lubmVyXG4gICAgc2VsZWN0KFxuICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRWYWx1ZVwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIEBtb3VzZWRvd249XCJwb3B1bGF0ZSA9IHRydWVcIlxuICAgICAgQGZvY3VzPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cInBvcHVsYXRlXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gICAgICAgIClcbiAgICAgICAgICBvcHRncm91cChcbiAgICAgICAgICAgIHYtaWY9XCJncm91cEJ5XCJcbiAgICAgICAgICAgIDpsYWJlbD1cIm9wdGlvbltncm91cEJ5TGFiZWxdXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICAgIHYtZm9yPVwib3B0IGluIG9wdGlvbltncm91cEJ5T3B0aW9uc11cIlxuICAgICAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHQpXCJcbiAgICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0KSB9fVxuICAgICAgICAgIG9wdGlvbihcbiAgICAgICAgICAgIHYtZWxzZVxuICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgICAgKSB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwic2VsZWN0ZWRPcHRpb25cIlxuICAgICAgKVxuICAgICAgICBvcHRpb24oOnZhbHVlPVwic2VsZWN0ZWRWYWx1ZVwiKSB7eyBnZXRMYWJlbEZvck9wdGlvbihzZWxlY3RlZE9wdGlvbikgfX1cbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrPVwiY2xlYXJcIlxuICAgIClcbiAgLy8tIEVkaXQgYnV0dG9uIGlzIG5ldmVyIGRpc2FibGVkLCBldmVuIGlmIHRoZSBmaWVsZCBpcyBkaXNhYmxlZC5cbiAgRGl0b0VkaXRCdXR0b25zKFxuICAgIHYtaWY9XCJlZGl0YWJsZVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZmFsc2VcIlxuICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICA6ZWRpdFBhdGg9XCJlZGl0UGF0aFwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc2VsZWN0Jywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIERpc2FibGUgbGF6eS1wb3B1bGF0aW9uIGZvciBub3cuXG4gICAgICAvLyBUT0RPOiBTZXQgdG8gYGZhbHNlYCBPbmNlIGxpbmV0byBlMmUgdGVzdHMgYWRkcmVzcyB0aGVpciBpc3N1ZXMuXG4gICAgICBwb3B1bGF0ZTogdHJ1ZVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi8vIFRPRE86IE1vdmUgdG8gZGl0by11aVxuJHNlbGVjdC1hcnJvdy1yaWdodDogY2FsYygoJHNlbGVjdC1hcnJvdy13aWR0aCAtICRzZWxlY3QtYXJyb3ctc2l6ZSkgLyAyKTtcblxuLmRpdG8tc2VsZWN0IHtcbiAgZGlzcGxheTogaW5saW5lLWZsZXg7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICBzZWxlY3Qge1xuICAgIEBleHRlbmQgJWlucHV0O1xuXG4gICAgcGFkZGluZy1yaWdodDogJHNlbGVjdC1hcnJvdy13aWR0aDtcbiAgfVxuXG4gIC8vIGAmX19faW5uZXJgIGlzIG5lZWRlZCB0byBtYWtlIHRoZSBlZGl0IGJ1dHRvbnMgYXBwZWFyIHRvIHRoZSByaWdodCBvZiB0aGVcbiAgLy8gc2VsZWN0OlxuICAmX19pbm5lciB7XG4gICAgZmxleDogMTtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgQGluY2x1ZGUgYXJyb3coJHNlbGVjdC1hcnJvdy1zaXplKTtcblxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgYm90dG9tOiAkc2VsZWN0LWFycm93LWJvdHRvbTtcbiAgICAgIHJpZ2h0OiBjYWxjKCN7JHNlbGVjdC1hcnJvdy1yaWdodH0gKyAjeyRib3JkZXItd2lkdGh9KTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1lZGl0LWJ1dHRvbnMge1xuICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nLWhhbGY7XG4gIH1cblxuICAvLyBIYW5kbGUgLmRpdG8td2lkdGgtZmlsbCBzZXBhcmF0ZWx5IGR1ZSB0byByZXF1aXJlZCBuZXN0aW5nIG9mIHNlbGVjdDpcbiAgJi5kaXRvLXdpZHRoLWZpbGwge1xuICAgIHNlbGVjdCB7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG4gIH1cblxuICAmLmRpdG8tZGlzYWJsZWQ6OmFmdGVyIHtcbiAgICBib3JkZXItY29sb3I6ICRib3JkZXItY29sb3I7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tc2xpZGVyXG4gIGlucHV0LmRpdG8tcmFuZ2UoXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB0eXBlPVwicmFuZ2VcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuICBJbnB1dEZpZWxkLmRpdG8tbnVtYmVyKFxuICAgIHYtaWY9XCJpbnB1dFwiXG4gICAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICAgIHR5cGU9XCJudW1iZXJcIlxuICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgIDptaW49XCJtaW5cIlxuICAgIDptYXg9XCJtYXhcIlxuICAgIDpzdGVwPVwic3RlcFZhbHVlXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NsaWRlcicsIHtcbiAgbWl4aW5zOiBbTnVtYmVyTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgbmF0aXZlRmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dJbnB1dGA/XG4gICAgaW5wdXQ6IGdldFNjaGVtYUFjY2Vzc29yKCdpbnB1dCcsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNsaWRlciB7XG4gIEBleHRlbmQgJWlucHV0O1xuXG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLmRpdG8tcmFuZ2Uge1xuICAgIGZsZXg6IGF1dG87XG4gICAgaGVpZ2h0OiBjYWxjKDFlbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSk7XG4gIH1cblxuICAuZGl0by1udW1iZXIge1xuICAgIGJvcmRlcjogMDtcbiAgICBwYWRkaW5nOiAwO1xuICAgIHRleHQtYWxpZ246IHJpZ2h0O1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuU3dpdGNoQnV0dG9uLmRpdG8tc3dpdGNoKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICA6bGFiZWxzPVwibGFiZWxzXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgU3dpdGNoQnV0dG9uIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3Rlcignc3dpdGNoJywge1xuICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICBkZWZhdWx0V2lkdGg6ICdhdXRvJyxcblxuICBjb21wb25lbnRzOiB7XG4gICAgU3dpdGNoQnV0dG9uXG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsYWJlbHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGFiZWxzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc3dpdGNoIHtcbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBmb250LXNpemU6ICRmb250LXNpemUtc21hbGw7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBpc1N0cmluZyB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBnZXREZWZhdWx0VmFsdWUgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wdXRlZDoge1xuICAgIHRyaW06IGdldFNjaGVtYUFjY2Vzc29yKCd0cmltJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgIGlmIChzY2hlbWEudHJpbSAmJiB2YWx1ZSAhPSBudWxsICYmIGlzU3RyaW5nKHZhbHVlKSkge1xuICAgICAgLy8gVGV4dCBmaWVsZHMgZG9uJ3QgbmVjZXNzYXJpbHkgaGF2ZSBhIGBTdHJpbmdgIHZhbHVlIHdoZW4gYGZvcm1hdCgpYFxuICAgICAgLy8gd2l0aG91dCBgcGFyc2UoKWAgaXMgdXNlZC5cbiAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpXG4gICAgfVxuICAgIGlmICh2YWx1ZSA9PT0gJycpIHtcbiAgICAgIHZhbHVlID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSlcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5JbnB1dEZpZWxkLmRpdG8tdGV4dChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cImlucHV0VmFsdWVcIlxuICA6dHlwZT1cImlucHV0VHlwZVwiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuICB0ZW1wbGF0ZSgjYWZ0ZXIpXG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIEBjbGljay5zdG9wPVwiY2xlYXJcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgVGV4dE1peGluIGZyb20gJy4uL21peGlucy9UZXh0TWl4aW4nXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbmNvbnN0IG1hc2tlZFBhc3N3b3JkID0gJyoqKioqKioqKioqKioqKionXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbXG4gICAgJ3RleHQnLFxuICAgICdlbWFpbCcsXG4gICAgJ3VybCcsXG4gICAgJ2hvc3RuYW1lJyxcbiAgICAnZG9tYWluJyxcbiAgICAndGVsJyxcbiAgICAncGFzc3dvcmQnLFxuICAgICdjcmVkaXRjYXJkJ1xuICBdLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgbWl4aW5zOiBbVGV4dE1peGluXSxcbiAgICBjb21wb25lbnRzOiB7IElucHV0RmllbGQgfSxcbiAgICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgICB0ZXh0RmllbGQ6IHRydWUsXG4gICAgaWdub3JlTWlzc2luZ1ZhbHVlOiBzY2hlbWEgPT4gc2NoZW1hLnR5cGUgPT09ICdwYXNzd29yZCcsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgaW5wdXRUeXBlKCkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNyZWRpdGNhcmQ6ICd0ZXh0JyxcbiAgICAgICAgICAgIGhvc3RuYW1lOiAndGV4dCcsXG4gICAgICAgICAgICBkb21haW46ICd0ZXh0J1xuICAgICAgICAgIH1bdGhpcy50eXBlXSB8fFxuICAgICAgICAgIHRoaXMudHlwZVxuICAgICAgICApXG4gICAgICB9LFxuXG4gICAgICBpbnB1dFZhbHVlOiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgdGhpcy50eXBlID09PSAncGFzc3dvcmQnICYmXG4gICAgICAgICAgICB0aGlzLnZhbHVlID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICF0aGlzLmZvY3VzZWRcbiAgICAgICAgICApXG4gICAgICAgICAgICA/IG1hc2tlZFBhc3N3b3JkXG4gICAgICAgICAgICA6IHRoaXMudmFsdWVcbiAgICAgICAgfSxcblxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBnZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgICAgY29uc3QgcnVsZSA9IHtcbiAgICAgICAgICBlbWFpbDogJ2VtYWlsJyxcbiAgICAgICAgICB1cmw6ICd1cmwnLFxuICAgICAgICAgIGhvc3RuYW1lOiAnaG9zdG5hbWUnLFxuICAgICAgICAgIGRvbWFpbjogJ2RvbWFpbicsXG4gICAgICAgICAgcGFzc3dvcmQ6ICdwYXNzd29yZCcsXG4gICAgICAgICAgY3JlZGl0Y2FyZDogJ2NyZWRpdGNhcmQnXG4gICAgICAgIH1bdGhpcy50eXBlXVxuICAgICAgICByZXR1cm4gcnVsZSA/IHsgW3J1bGVdOiB0cnVlIH0gOiB7fVxuICAgICAgfVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGV4dGFyZWEuZGl0by10ZXh0YXJlYS5kaXRvLWlucHV0KFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwidmFsdWVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgOnJvd3M9XCJsaW5lc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tcmVzaXphYmxlJzogcmVzaXphYmxlIH1cIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBUZXh0TWl4aW4gZnJvbSAnLi4vbWl4aW5zL1RleHRNaXhpbidcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndGV4dGFyZWEnLCB7XG4gIG1peGluczogW1RleHRNaXhpbl0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCA0XG4gICAgfSxcblxuICAgIHJlc2l6YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Jlc2l6YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10ZXh0YXJlYSB7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICByZXNpemU6IG5vbmU7XG4gIG1pbi1oZWlnaHQ6IGNhbGMoMWVtICogdmFyKC0tbGluZS1oZWlnaHQpICsgI3syICogJGlucHV0LXBhZGRpbmctdmVyfSk7XG5cbiAgJi5kaXRvLXJlc2l6YWJsZSB7XG4gICAgcmVzaXplOiB2ZXJ0aWNhbDtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10cmVlLWxpc3RcbiAgRGl0b1Njb3BlcyhcbiAgICB2LWlmPVwic2NvcGVzXCJcbiAgICA6cXVlcnk9XCJxdWVyeVwiXG4gICAgOnNjb3Blcz1cInNjb3Blc1wiXG4gIClcbiAgLmRpdG8tdHJlZS1wYW5lbFxuICAgIERpdG9UcmVlSXRlbShcbiAgICAgIDpzY2hlbWE9XCJ0cmVlU2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cInRyZWVEYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cInRyZWVEYXRhXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgOm9wZW49XCJ0cnVlXCJcbiAgICApXG4gICAgLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJoYXNFZGl0YWJsZUZvcm1zXCJcbiAgICApXG4gICAgICAvLy0gSW5jbHVkZSBhIHJvdXRlci12aWV3IGZvciB0aGUgb3B0aW9uYWwgRGl0b0Zvcm1JbmxpbmVkXG4gICAgICBSb3V0ZXJWaWV3XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCB7XG4gIGhhc0Zvcm1TY2hlbWEsXG4gIGdldEZvcm1TY2hlbWFzLFxuICByZXNvbHZlU2NoZW1hQ29tcG9uZW50c1xufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ3RyZWUtbGlzdCcsICd0cmVlLW9iamVjdCddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gICAgcHJvdmlkZSgpIHtcbiAgICAgIHJldHVybiB7IGNvbnRhaW5lcjogdGhpcyB9XG4gICAgfSxcblxuICAgIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgICAgcmV0dXJuIHR5cGUgPT09ICd0cmVlLW9iamVjdCcgPyAnb2JqZWN0JyA6ICdsaXN0J1xuICAgIH0sXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgcGF0aCgpIHtcbiAgICAgICAgLy8gQWNjZXNzZWQgZnJvbSBEaXRvVHJlZUl0ZW0gdGhyb3VnaCBgY29udGFpbmVyLnBhdGhgOlxuICAgICAgICByZXR1cm4gdGhpcy5mb3JtQ29tcG9uZW50Py5wYXRoXG4gICAgICB9LFxuXG4gICAgICBlZGl0UGF0aCgpIHtcbiAgICAgICAgLy8gQWNjZXNzZWQgZnJvbSBEaXRvVHJlZUl0ZW0gdGhyb3VnaCBgY29udGFpbmVyLmVkaXRQYXRoYDpcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhdGguc2xpY2UodGhpcy5wYXRoPy5sZW5ndGgpXG4gICAgICB9LFxuXG4gICAgICB0cmVlRGF0YSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgPyB7IFt0aGlzLm5hbWVdOiB0aGlzLnZhbHVlIH1cbiAgICAgICAgICA6IHRoaXMudmFsdWVcbiAgICAgIH0sXG5cbiAgICAgIHRyZWVEYXRhUGF0aCgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGBuYW1lYCBmcm9tIGBkYXRhUGF0aGAsIGFzIGl0IGlzIGFkZGVkXG4gICAgICAgIC8vIHRvIGB0cmVlRGF0YWAgYW5kIGB0cmVlU2NoZW1hYFxuICAgICAgICByZXR1cm4gdGhpcy5pc0xpc3RTb3VyY2VcbiAgICAgICAgICA/IHRoaXMuZGF0YVBhdGguc2xpY2UoMCwgdGhpcy5kYXRhUGF0aC5sZW5ndGggLSB0aGlzLm5hbWUubGVuZ3RoKVxuICAgICAgICAgIDogdGhpcy5kYXRhUGF0aFxuICAgICAgfSxcblxuICAgICAgdHJlZVNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGNoaWxkcmVuOiB7XG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMuc2NoZW1hXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHRoaXMuc2NoZW1hXG4gICAgICB9LFxuXG4gICAgICBoYXNFZGl0YWJsZUZvcm1zKCkge1xuICAgICAgICBjb25zdCBoYXNFZGl0YWJsZUZvcm1zID0gc2NoZW1hID0+IHtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgaGFzRm9ybVNjaGVtYShzY2hlbWEpICYmIChcbiAgICAgICAgICAgICAgdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZWRpdGFibGUnLCB7XG4gICAgICAgICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBzY2hlbWFcbiAgICAgICAgICAgICAgfSkgfHxcbiAgICAgICAgICAgICAgc2NoZW1hLmNoaWxkcmVuICYmXG4gICAgICAgICAgICAgIGhhc0VkaXRhYmxlRm9ybXMoc2NoZW1hLmNoaWxkcmVuKVxuICAgICAgICAgICAgKVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaGFzRWRpdGFibGVGb3Jtcyh0aGlzLnNjaGVtYSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYSxcbiAgICAgIG5hbWUsXG4gICAgICByb3V0ZXMsXG4gICAgICBsZXZlbCxcbiAgICAgIG5lc3RlZCA9IHRydWUsXG4gICAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgICBwcm9jZXNzID0gbnVsbFxuICAgICkge1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICByZXNvbHZlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEucHJvcGVydGllcyksXG4gICAgICAgIFNvdXJjZU1peGluLnByb2Nlc3NTY2hlbWEoXG4gICAgICAgICAgYXBpLFxuICAgICAgICAgIHNjaGVtYSxcbiAgICAgICAgICBuYW1lLFxuICAgICAgICAgIHJvdXRlcyxcbiAgICAgICAgICBsZXZlbCxcbiAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgZmxhdHRlbixcbiAgICAgICAgICAvLyBQYXNzIHByb2Nlc3MoKSB0byBhZGQgbW9yZSByb3V0ZXMgdG8gY2hpbGRSb3V0ZXM6XG4gICAgICAgICAgKGNoaWxkUm91dGVzLCBsZXZlbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gc2NoZW1hXG4gICAgICAgICAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgLy8gQWRkIGB0eXBlYCB0byB0aGUgbmVzdGVkIHRyZWUgbGlzdC5cbiAgICAgICAgICAgICAgY2hpbGRyZW4udHlwZSA9ICd0cmVlLWxpc3QnXG4gICAgICAgICAgICAgIC8vIFJlY3Vyc2l2ZWx5IGNhbGwgYHByb2Nlc3NTY2hlbWEoKWAgZm9yIHRoZSBuZXN0ZWQgdHJlZSBsaXN0OlxuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9jZXNzU2NoZW1hKFxuICAgICAgICAgICAgICAgIGFwaSxcbiAgICAgICAgICAgICAgICBjaGlsZHJlbixcbiAgICAgICAgICAgICAgICBjaGlsZHJlbi5uYW1lLFxuICAgICAgICAgICAgICAgIGNoaWxkUm91dGVzLFxuICAgICAgICAgICAgICAgIGxldmVsLFxuICAgICAgICAgICAgICAgIG5lc3RlZCxcbiAgICAgICAgICAgICAgICB0cnVlLCAvLyBQYXNzIGB0cnVlYCBmb3IgYGZsYXR0ZW5gIGluIHRyZWUgbGlzdHMuXG4gICAgICAgICAgICAgICAgcHJvY2Vzc1xuICAgICAgICAgICAgICApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICBdKVxuICAgIH0sXG5cbiAgICBnZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3Npbmcoc2NoZW1hLCBjb250ZXh0KSB7XG4gICAgICAvLyBDb252ZXJ0IG5lc3RlZCBjaGlsZHJlbiBzY2hlbWEgdG8gc3RhbmQtYWxvbmUgc2NoZW1hIGNvbXBvbmVudCxcbiAgICAgIC8vIHByZXNlbnQgaW4gZWFjaCBvZiB0aGUgZm9ybXMsIGFzIHJlcXVpcmVkIGJ5IGBwcm9jZXNzU2NoZW1hRGF0YSgpYFxuICAgICAgY29uc3QgeyBjaGlsZHJlbiB9ID0gc2NoZW1hXG4gICAgICByZXR1cm4gZ2V0Rm9ybVNjaGVtYXMoXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgY29udGV4dCxcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICAgICA/IGZvcm0gPT4gKHtcbiAgICAgICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICAgICAgY29tcG9uZW50czoge1xuICAgICAgICAgICAgICAgIC4uLmZvcm0uY29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICBbY2hpbGRyZW4ubmFtZV06IGNoaWxkcmVuXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiBudWxsXG4gICAgICApXG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by10cmVlLWxpc3Qge1xuICBAZXh0ZW5kICVmaWVsZDtcblxuICAuZGl0by10cmVlLXBhbmVsIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcblxuICAgID4gLmRpdG8tdHJlZS1pdGVtIHtcbiAgICAgIGZsZXg6IDEgMSAyNSU7XG4gICAgfVxuXG4gICAgPiAuZGl0by10cmVlLWZvcm0tY29udGFpbmVyIHtcbiAgICAgIGZsZXg6IDAgMSA3NSU7XG4gICAgICBhbGlnbi1zZWxmOiBzdHJldGNoO1xuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgIGJvcmRlci1sZWZ0OiAkYm9yZGVyLXN0eWxlO1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gMTtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDE7XG4gICAgICBtYXJnaW46ICgtJGlucHV0LXBhZGRpbmctdmVyKSAoLSRpbnB1dC1wYWRkaW5nLWhvcik7XG4gICAgICBtYXJnaW4tbGVmdDogJGlucHV0LXBhZGRpbmctaG9yO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGZpbGVzaXplIH0gZnJvbSAnZmlsZXNpemUnXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRGaWxlU2l6ZShzaXplKSB7XG4gIHJldHVybiBmaWxlc2l6ZShzaXplLCB7IGJhc2U6IDEwIH0pXG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdXBsb2FkXG4gIC8vLSBJbiBvcmRlciB0byBoYW5kbGUgdXBsb2FkIGJ1dHRvbnMgaW4gbXVsdGlwbGUgcG9zc2libGUgcGxhY2VzLCBkZXBlbmRpbmdcbiAgLy8tIG9uIHdoZXRoZXIgdGhleSBoYW5kbGUgc2luZ2xlIG9yIG11bHRpcGxlIHVwbG9hZHMsIHJlbmRlciB0aGUgdXBsb2FkXG4gIC8vLSBjb21wb25lbnQgaW52aXNpYmx5IGF0IHRoZSByb290LCBhbmQgZGVsZWdhdGUgdGhlIGNsaWNrIGV2ZW50cyB0byBpdCBmcm9tXG4gIC8vLSB0aGUgYnV0dG9ucyByZW5kZXJlZCBmdXJ0aGVyIGJlbG93LiBMdWNraWx5IHRoaXMgd29ya3Mgc3VycHJpc2luZ2x5IHdlbGwuXG4gIFZ1ZVVwbG9hZC5kaXRvLXVwbG9hZF9faW5wdXQoXG4gICAgcmVmPVwidXBsb2FkXCJcbiAgICB2LW1vZGVsPVwidXBsb2Fkc1wiXG4gICAgOmlucHV0SWQ9XCJkYXRhUGF0aFwiXG4gICAgOm5hbWU9XCJkYXRhUGF0aFwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpwb3N0QWN0aW9uPVwidXBsb2FkUGF0aFwiXG4gICAgOmV4dGVuc2lvbnM9XCJleHRlbnNpb25zXCJcbiAgICA6YWNjZXB0PVwiYWNjZXB0XCJcbiAgICA6bXVsdGlwbGU9XCJtdWx0aXBsZVwiXG4gICAgOnNpemU9XCJtYXhTaXplXCJcbiAgICA6ZHJvcD1cIiRlbD8uY2xvc2VzdCgnLmRpdG8tY29udGFpbmVyJylcIlxuICAgIDpkcm9wRGlyZWN0b3J5PVwidHJ1ZVwiXG4gICAgQGlucHV0LWZpbHRlcj1cIm9uSW5wdXRGaWx0ZXJcIlxuICAgIEBpbnB1dC1maWxlPVwib25JbnB1dEZpbGVcIlxuICApXG4gIHRhYmxlLmRpdG8tdGFibGUuZGl0by10YWJsZS1zZXBhcmF0b3JzLmRpdG8tdGFibGUtYmFja2dyb3VuZFxuICAgIC8vLSBTdHlsaW5nIGNvbWVzIGZyb20gYERpdG9UYWJsZUhlYWRgXG4gICAgdGhlYWQuZGl0by10YWJsZS1oZWFkXG4gICAgICB0clxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gRmlsZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU2l6ZVxuICAgICAgICB0aFxuICAgICAgICAgIHNwYW4gU3RhdHVzXG4gICAgICAgIHRoXG4gICAgICAgICAgc3BhblxuICAgIERpdG9EcmFnZ2FibGUoXG4gICAgICB2LW1vZGVsPVwiZmlsZXNcIlxuICAgICAgdGFnPVwidGJvZHlcIlxuICAgICAgOm9wdGlvbnM9XCJnZXREcmFnZ2FibGVPcHRpb25zKClcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJtdWx0aXBsZSB8fCAhaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgKVxuICAgICAgICB0cihcbiAgICAgICAgICB2LWZvcj1cIihmaWxlLCBpbmRleCkgaW4gZmlsZXNcIlxuICAgICAgICAgIDprZXk9XCJmaWxlLm5hbWVcIlxuICAgICAgICApXG4gICAgICAgICAgdGQoXG4gICAgICAgICAgICB2LWlmPVwicmVuZGVyXCJcbiAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlckZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICApXG4gICAgICAgICAgdGQoXG4gICAgICAgICAgICB2LWVsc2UtaWY9XCJkb3dubG9hZFVybHNbaW5kZXhdXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBhKFxuICAgICAgICAgICAgICA6ZG93bmxvYWQ9XCJmaWxlLm5hbWVcIlxuICAgICAgICAgICAgICA6aHJlZj1cImRvd25sb2FkVXJsc1tpbmRleF1cIlxuICAgICAgICAgICAgICB0YXJnZXQ9XCJfYmxhbmtcIlxuICAgICAgICAgICAgICBAY2xpY2sucHJldmVudD1cIm9uQ2xpY2tEb3dubG9hZChmaWxlLCBpbmRleClcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBEaXRvVXBsb2FkRmlsZShcbiAgICAgICAgICAgICAgICA6ZmlsZT1cImZpbGVcIlxuICAgICAgICAgICAgICAgIDp0aHVtYm5haWw9XCJ0aHVtYm5haWxzXCJcbiAgICAgICAgICAgICAgICA6dGh1bWJuYWlsVXJsPVwidGh1bWJuYWlsVXJsc1tpbmRleF1cIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgdGQoXG4gICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICApXG4gICAgICAgICAgICBEaXRvVXBsb2FkRmlsZShcbiAgICAgICAgICAgICAgOmZpbGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgOnRodW1ibmFpbD1cInRodW1ibmFpbHNcIlxuICAgICAgICAgICAgICA6dGh1bWJuYWlsVXJsPVwidGh1bWJuYWlsVXJsc1tpbmRleF1cIlxuICAgICAgICAgICAgKVxuICAgICAgICAgIHRkLmRpdG8tdXBsb2FkX19zaXplIHt7IGZvcm1hdEZpbGVTaXplKGZpbGUuc2l6ZSkgfX1cbiAgICAgICAgICB0ZC5kaXRvLXVwbG9hZF9fc3RhdHVzXG4gICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgdi1pZj1cImZpbGUudXBsb2FkXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgdi1pZj1cImZpbGUudXBsb2FkLmVycm9yXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHwgRXJyb3I6IHt7IGZpbGUudXBsb2FkLmVycm9yIH19XG4gICAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICAgIHYtZWxzZS1pZj1cImZpbGUudXBsb2FkLmFjdGl2ZVwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB8IFVwbG9hZGluZy4uLlxuICAgICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5zdWNjZXNzXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIHwgVXBsb2FkZWRcbiAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgfCBTdG9yZWRcbiAgICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zXG4gICAgICAgICAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tdXBsb2FkKFxuICAgICAgICAgICAgICAgIHYtaWY9XCIhbXVsdGlwbGVcIlxuICAgICAgICAgICAgICAgIDp0aXRsZT1cInVwbG9hZFRpdGxlXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJvbkNsaWNrVXBsb2FkXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICAgICAgICAgICAgICBhLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRlbGV0ZSlcIlxuICAgICAgICAgICAgICAgIEBjbGljaz1cImRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgKVxuICAgIHRmb290KFxuICAgICAgdi1pZj1cIm11bHRpcGxlIHx8IGlzVXBsb2FkQWN0aXZlIHx8ICFoYXNGaWxlc1wiXG4gICAgKVxuICAgICAgdHJcbiAgICAgICAgdGQoOmNvbHNwYW49XCI0XCIpXG4gICAgICAgICAgLmRpdG8tdXBsb2FkLWZvb3RlclxuICAgICAgICAgICAgcHJvZ3Jlc3MuZGl0by1wcm9ncmVzcyhcbiAgICAgICAgICAgICAgdi1pZj1cImlzVXBsb2FkQWN0aXZlXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwidXBsb2FkUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICBtYXg9XCIxMDBcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJ1cGxvYWQuYWN0aXZlID0gZmFsc2VcIlxuICAgICAgICAgICAgICApIENhbmNlbFxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24uZGl0by1idXR0b24tdXBsb2FkKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJtdWx0aXBsZSB8fCAhaGFzRmlsZXNcIlxuICAgICAgICAgICAgICAgIDp0aXRsZT1cInVwbG9hZFRpdGxlXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJvbkNsaWNrVXBsb2FkXCJcbiAgICAgICAgICAgICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3J0YWJsZU1peGluIGZyb20gJy4uL21peGlucy9Tb3J0YWJsZU1peGluLmpzJ1xuaW1wb3J0IHBhcnNlRmlsZVNpemUgZnJvbSAnZmlsZXNpemUtcGFyc2VyJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IGZvcm1hdEZpbGVTaXplIH0gZnJvbSAnLi4vdXRpbHMvdW5pdHMuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc0FycmF5LCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBWdWVVcGxvYWQgZnJvbSAndnVlLXVwbG9hZC1jb21wb25lbnQnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigndXBsb2FkJywge1xuICBtaXhpbnM6IFtTb3J0YWJsZU1peGluXSxcbiAgY29tcG9uZW50czogeyBWdWVVcGxvYWQgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1cGxvYWRzOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHVwbG9hZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyZWZzLnVwbG9hZFxuICAgIH0sXG5cbiAgICB1cGxvYWRUaXRsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlID8gJ1VwbG9hZCBGaWxlcycgOiAnVXBsb2FkIEZpbGUnXG4gICAgfSxcblxuICAgIGZpbGVzKCkge1xuICAgICAgcmV0dXJuIGFzRmlsZXModGhpcy52YWx1ZSlcbiAgICB9LFxuXG4gICAgZG93bmxvYWRVcmxzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZXMubWFwKChmaWxlLCBpbmRleCkgPT4gdGhpcy5nZXREb3dubG9hZFVybChmaWxlLCBpbmRleCkpXG4gICAgfSxcblxuICAgIHRodW1ibmFpbFVybHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWxlcy5tYXAoKGZpbGUsIGluZGV4KSA9PiB0aGlzLmdldFRodW1ibmFpbFVybChmaWxlLCBpbmRleCkpXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBObyBjYWxsYmFjayBhcyBpdCdzIHVzZWQgaW4gYHByb2Nlc3NWYWx1ZSgpYFxuICAgICAgY2FsbGJhY2s6IGZhbHNlXG4gICAgfSksXG5cbiAgICBleHRlbnNpb25zOiBnZXRTY2hlbWFBY2Nlc3NvcignZXh0ZW5zaW9ucycsIHtcbiAgICAgIHR5cGU6IFtBcnJheSwgU3RyaW5nLCBSZWdFeHBdXG4gICAgfSksXG5cbiAgICBhY2NlcHQ6IGdldFNjaGVtYUFjY2Vzc29yKCdhY2NlcHQnLCB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIGdldChhY2NlcHQpIHtcbiAgICAgICAgcmV0dXJuIGlzQXJyYXkoYWNjZXB0KSA/IGFjY2VwdC5qb2luKCcsJykgOiBhY2NlcHRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1heFNpemU6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXhTaXplJywge1xuICAgICAgdHlwZTogW1N0cmluZywgTnVtYmVyXSxcbiAgICAgIGdldChtYXhTaXplKSB7XG4gICAgICAgIHJldHVybiBtYXhTaXplID8gcGFyc2VGaWxlU2l6ZShtYXhTaXplKSA6IHVuZGVmaW5lZFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZHJhZ2dhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZHJhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRyYWdnYWJsZSkge1xuICAgICAgICByZXR1cm4gZHJhZ2dhYmxlICYmIHRoaXMuZmlsZXMubGVuZ3RoID4gMVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICByZW5kZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdyZW5kZXInLCB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIHRodW1ibmFpbHM6IGdldFNjaGVtYUFjY2Vzc29yKCd0aHVtYm5haWxzJywge1xuICAgICAgdHlwZTogW0Jvb2xlYW4sIFN0cmluZ10sXG4gICAgICBkZWZhdWx0KHRodW1ibmFpbHMpIHtcbiAgICAgICAgcmV0dXJuIHRodW1ibmFpbHMgPz8gISF0aGlzLnNjaGVtYS50aHVtYm5haWxVcmxcbiAgICAgIH0sXG4gICAgICBnZXQodGh1bWJuYWlscykge1xuICAgICAgICByZXR1cm4gdGh1bWJuYWlscyA9PT0gdHJ1ZSA/ICdtZWRpdW0nIDogdGh1bWJuYWlscyB8fCBudWxsXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBoYXNGaWxlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbGVzLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgaGFzVXBsb2FkcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnVwbG9hZHMubGVuZ3RoID4gMFxuICAgIH0sXG5cbiAgICBpc1VwbG9hZFJlYWR5KCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5oYXNVcGxvYWRzICYmXG4gICAgICAgICEodGhpcy51cGxvYWQuYWN0aXZlIHx8IHRoaXMudXBsb2FkLnVwbG9hZGVkKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc1VwbG9hZEFjdGl2ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc1VwbG9hZHMgJiYgdGhpcy51cGxvYWQuYWN0aXZlXG4gICAgfSxcblxuICAgIHVwbG9hZFByb2dyZXNzKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy51cGxvYWRzLnJlZHVjZSgodG90YWwsIGZpbGUpID0+IHRvdGFsICsgK2ZpbGUucHJvZ3Jlc3MsIDApIC9cbiAgICAgICAgdGhpcy51cGxvYWRzLmxlbmd0aFxuICAgICAgKVxuICAgIH0sXG5cbiAgICB1cGxvYWRQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VVcmwoe1xuICAgICAgICB0eXBlOiAndXBsb2FkJyxcbiAgICAgICAgcGF0aDogdGhpcy5hcGkubm9ybWFsaXplUGF0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgfSlcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBpc1VwbG9hZFJlYWR5KHJlYWR5KSB7XG4gICAgICBpZiAocmVhZHkpIHtcbiAgICAgICAgLy8gQXV0by11cGxvYWQuXG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICB0aGlzLnVwbG9hZC5hY3RpdmUgPSB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb3JtYXRGaWxlU2l6ZSxcblxuICAgIGdldEZpbGVDb250ZXh0KGZpbGUsIGluZGV4KSB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZVxuICAgICAgICA/IG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7XG4gICAgICAgICAgICB2YWx1ZTogZmlsZSxcbiAgICAgICAgICAgIGRhdGE6IHRoaXMuZmlsZXMsXG4gICAgICAgICAgICBpbmRleCxcbiAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICB9KVxuICAgICAgICA6IHRoaXMuY29udGV4dFxuICAgIH0sXG5cbiAgICByZW5kZXJGaWxlKGZpbGUsIGluZGV4KSB7XG4gICAgICByZXR1cm4gdGhpcy5yZW5kZXIodGhpcy5nZXRGaWxlQ29udGV4dChmaWxlLCBpbmRleCkpXG4gICAgfSxcblxuICAgIGdldERvd25sb2FkVXJsKGZpbGUsIGluZGV4KSB7XG4gICAgICByZXR1cm4gZmlsZS51cmxcbiAgICAgICAgPyBmaWxlLnVybFxuICAgICAgICA6ICFmaWxlLnVwbG9hZCB8fCBmaWxlLnVwbG9hZC5zdWNjZXNzXG4gICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdkb3dubG9hZFVybCcsIHtcbiAgICAgICAgICAgICAgdHlwZTogJ1N0cmluZycsXG4gICAgICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgICAgIGNvbnRleHQ6IHRoaXMuZ2V0RmlsZUNvbnRleHQoZmlsZSwgaW5kZXgpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRUaHVtYm5haWxVcmwoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiAhZmlsZS51cGxvYWQgfHwgZmlsZS51cGxvYWQuc3VjY2Vzc1xuICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ3RodW1ibmFpbFVybCcsIHtcbiAgICAgICAgICAgIHR5cGU6ICdTdHJpbmcnLFxuICAgICAgICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgICAgICAgIGNvbnRleHQ6IHRoaXMuZ2V0RmlsZUNvbnRleHQoZmlsZSwgaW5kZXgpXG4gICAgICAgICAgfSkgfHwgKFxuICAgICAgICAgICAgZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpXG4gICAgICAgICAgICAgID8gZmlsZS51cmxcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgKVxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgZGVsZXRlRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgY29uc3QgeyBuYW1lIH0gPSBmaWxlXG5cbiAgICAgIGlmIChcbiAgICAgICAgZmlsZSAmJlxuICAgICAgICB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICBgRG8geW91IHJlYWxseSB3YW50IHRvICR7dGhpcy52ZXJicy5yZW1vdmV9ICR7bmFtZX0/YFxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGlmIChmaWxlLnVwbG9hZCkge1xuICAgICAgICAgIHRoaXMudXBsb2FkLnJlbW92ZShmaWxlLnVwbG9hZClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICB0aXRsZTogJ1N1Y2Nlc3NmdWxseSBSZW1vdmVkJyxcbiAgICAgICAgICB0ZXh0OiBgJHtuYW1lfSB3YXMgJHt0aGlzLnZlcmJzLmRlbGV0ZWR9LmBcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0RmlsZUluZGV4KGZpbGUpIHtcbiAgICAgIHJldHVybiB0aGlzLm11bHRpcGxlICYmIHRoaXMudmFsdWVcbiAgICAgICAgPyB0aGlzLnZhbHVlLmZpbmRJbmRleChpdCA9PiBpdC5pZCA9PT0gZmlsZS5pZClcbiAgICAgICAgOiAtMVxuICAgIH0sXG5cbiAgICBhZGRGaWxlKGZpbGUpIHtcbiAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5wdXNoKGZpbGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IFtmaWxlXVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gZmlsZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZXBsYWNlRmlsZShmaWxlLCBuZXdGaWxlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuZ2V0RmlsZUluZGV4KGZpbGUpXG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgaWYgKG5ld0ZpbGUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWVbaW5kZXhdID0gbmV3RmlsZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBuZXdGaWxlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHJlbW92ZUZpbGUoZmlsZSkge1xuICAgICAgdGhpcy5yZXBsYWNlRmlsZShmaWxlLCBudWxsKVxuICAgIH0sXG5cbiAgICBvbklucHV0RmlsZShuZXdGaWxlLCBvbGRGaWxlKSB7XG4gICAgICBpZiAobmV3RmlsZSAmJiAhb2xkRmlsZSkge1xuICAgICAgICBjb25zdCB7IGlkLCBuYW1lLCBzaXplIH0gPSBuZXdGaWxlXG4gICAgICAgIHRoaXMuYWRkRmlsZSh7IGlkLCBuYW1lLCBzaXplLCB1cGxvYWQ6IG5ld0ZpbGUgfSlcbiAgICAgIH1cbiAgICAgIGlmIChuZXdGaWxlICYmIG9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBzdWNjZXNzLCBlcnJvciB9ID0gbmV3RmlsZVxuICAgICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgICAgIGNvbnN0IGZpbGUgPSBuZXdGaWxlLnJlc3BvbnNlWzBdXG4gICAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICAgIGZpbGUudXBsb2FkID0gbmV3RmlsZVxuICAgICAgICAgICAgLy8gUmVwbGFjZSB0aGUgdXBsb2FkIGZpbGUgb2JqZWN0IHdpdGggdGhlIGZpbGUgb2JqZWN0IHJlY2VpdmVkXG4gICAgICAgICAgICAvLyBmcm9tIHRoZSB1cGxvYWQgcmVzcG9uc2UuXG4gICAgICAgICAgICB0aGlzLnJlcGxhY2VGaWxlKG5ld0ZpbGUsIGZpbGUpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlcnJvcikge1xuICAgICAgICAgIHRoaXMucmVtb3ZlRmlsZShuZXdGaWxlKVxuICAgICAgICAgIGNvbnN0IHRleHQgPSAoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGFib3J0OiAnVXBsb2FkIGFib3J0ZWQnLFxuICAgICAgICAgICAgICBkZW5pZWQ6ICdVcGxvYWQgZGVuaWVkJyxcbiAgICAgICAgICAgICAgZXh0ZW5zaW9uOiBgVW5zdXBwb3J0ZWQgZmlsZS10eXBlOiAke25ld0ZpbGUubmFtZX1gLFxuICAgICAgICAgICAgICBuZXR3b3JrOiAnTmV0d29yayBlcnJvciBlbmNvdW50ZXJlZCBkdXJpbmcgdXBsb2FkJyxcbiAgICAgICAgICAgICAgc2VydmVyOiAnU2VydmVyIGVycm9yIG9jY3VycmVkIGR1cmluZyB1cGxvYWQnLFxuICAgICAgICAgICAgICBzaXplOiBgRmlsZSBpcyB0b28gbGFyZ2U6ICR7Zm9ybWF0RmlsZVNpemUobmV3RmlsZS5zaXplKX1gLFxuICAgICAgICAgICAgICB0aW1lb3V0OiAnVGltZW91dCBvY2N1cnJlZCBkdXJpbmcgdXBsb2FkJ1xuICAgICAgICAgICAgfVtlcnJvcl0gfHxcbiAgICAgICAgICAgIGBVbmtub3duIEZpbGUgVXBsb2FkIEVycm9yOiAnJHtlcnJvcn0nYFxuICAgICAgICAgIClcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdGaWxlIFVwbG9hZCBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbklucHV0RmlsdGVyKG5ld0ZpbGUgLyosIG9sZEZpbGUsIHByZXZlbnQgKi8pIHtcbiAgICAgIGNvbnN0IHhociA9IG5ld0ZpbGU/LnhoclxuICAgICAgaWYgKHRoaXMuYXBpLmNvcnM/LmNyZWRlbnRpYWxzICYmIHhociAmJiAheGhyLndpdGhDcmVkZW50aWFscykge1xuICAgICAgICB4aHIud2l0aENyZWRlbnRpYWxzID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrRG93bmxvYWQoZmlsZSwgaW5kZXgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godGhpcy5kb3dubG9hZFVybHNbaW5kZXhdKVxuICAgICAgICBjb25zdCBibG9iID0gYXdhaXQgcmVzcG9uc2UuYmxvYigpXG4gICAgICAgIHRoaXMuZG93bmxvYWQoe1xuICAgICAgICAgIGZpbGVuYW1lOiBmaWxlLm5hbWUsXG4gICAgICAgICAgdXJsOiBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpXG4gICAgICAgIH0pXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkNsaWNrVXBsb2FkKGV2ZW50KSB7XG4gICAgICAvLyBEZWxlZ2F0ZSB0aGUgY2xpY2sgZXZlbnQgdG8gdGhlIGhpZGRlbiBmaWxlIGlucHV0LlxuICAgICAgdGhpcy51cGxvYWQuJGVsLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JykuZGlzcGF0Y2hFdmVudChcbiAgICAgICAgbmV3IGV2ZW50LmNvbnN0cnVjdG9yKGV2ZW50LnR5cGUsIGV2ZW50KVxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgIC8vIEZpbHRlciBvdXQgYWxsIG5ld2x5IGFkZGVkIGZpbGVzIHRoYXQgd2VyZW4ndCBhY3R1YWxseSB1cGxvYWRlZC5cbiAgICBjb25zdCBmaWxlcyA9IGFzRmlsZXModmFsdWUpXG4gICAgICAubWFwKCh7IHVwbG9hZCwgLi4uZmlsZSB9KSA9PiAoIXVwbG9hZCB8fCB1cGxvYWQuc3VjY2VzcyA/IGZpbGUgOiBudWxsKSlcbiAgICAgIC5maWx0ZXIoZmlsZSA9PiBmaWxlKVxuICAgIHJldHVybiBzY2hlbWEubXVsdGlwbGUgPyBmaWxlcyA6IGZpbGVzWzBdIHx8IG51bGxcbiAgfVxufSlcblxuZnVuY3Rpb24gYXNGaWxlcyh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPyBhc0FycmF5KHZhbHVlKSA6IFtdXG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by11cGxvYWQge1xuICAuZGl0by10YWJsZSB7XG4gICAgdHIsXG4gICAgLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMge1xuICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgICB9XG4gIH1cblxuICAmX19zaXplLFxuICAmX19zdGF0dXMge1xuICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIH1cblxuICAmICZfX2lucHV0IHtcbiAgICAvLyBTZWUgYG9uQ2xpY2tVcGxvYWQoKWAgbWV0aG9kIGZvciBkZXRhaWxzLlxuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICB9XG5cbiAgJl9fZm9vdGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAgIC5kaXRvLXByb2dyZXNzIHtcbiAgICAgIGZsZXg6IGF1dG87XG4gICAgICBtYXJnaW4tcmlnaHQ6ICRmb3JtLXNwYWNpbmc7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbW91bnRlZChub2RlLCBiaW5kaW5nKSB7XG4gICAgb2JzZXJ2ZVJlc2l6ZShub2RlLCBiaW5kaW5nLnZhbHVlLCBiaW5kaW5nLmFyZylcbiAgfSxcblxuICB1bm1vdW50ZWQobm9kZSwgYmluZGluZykge1xuICAgIHVub2JzZXJ2ZVJlc2l6ZShub2RlLCBiaW5kaW5nLnZhbHVlLCBiaW5kaW5nLmFyZylcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb2JzZXJ2ZVJlc2l6ZShub2RlLCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gIE9ic2VydmVyLmdldE9ic2VydmVyKG9wdGlvbnMpLm9ic2VydmUobm9kZSwgaGFuZGxlcilcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVub2JzZXJ2ZVJlc2l6ZShub2RlLCBoYW5kbGVyLCBvcHRpb25zKSB7XG4gIE9ic2VydmVyLmdldE9ic2VydmVyKG9wdGlvbnMpLnVub2JzZXJ2ZShub2RlLCBoYW5kbGVyKVxufVxuXG5leHBvcnQgY29uc3QgaXNSZXNpemVTdXBwb3J0ZWQgPSB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgIT09ICd1bmRlZmluZWQnXG5cbmNvbnN0IG9ic2VydmVycyA9IHt9XG5cbmNsYXNzIE9ic2VydmVyIHtcbiAgY29uc3RydWN0b3Ioa2V5LCBvcHRpb25zKSB7XG4gICAgdGhpcy5rZXkgPSBrZXlcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG4gICAgdGhpcy5vYnNlcnZlciA9IGlzUmVzaXplU3VwcG9ydGVkXG4gICAgICA/IG5ldyBSZXNpemVPYnNlcnZlcihlbnRyaWVzID0+IHRoaXMuaGFuZGxlKGVudHJpZXMpKVxuICAgICAgOiBudWxsXG4gICAgdGhpcy5oYW5kbGVyc0J5Tm9kZSA9IG5ldyBXZWFrTWFwKClcbiAgICB0aGlzLm5vZGVDb3VudCA9IDBcbiAgfVxuXG4gIG9ic2VydmUobm9kZSwgaGFuZGxlcikge1xuICAgIGxldCBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNCeU5vZGUuZ2V0KG5vZGUpXG4gICAgaWYgKCFoYW5kbGVycykge1xuICAgICAgaGFuZGxlcnMgPSBuZXcgU2V0KClcbiAgICAgIHRoaXMuaGFuZGxlcnNCeU5vZGUuc2V0KG5vZGUsIGhhbmRsZXJzKVxuICAgICAgdGhpcy5vYnNlcnZlcj8ub2JzZXJ2ZShub2RlLCB0aGlzLm9wdGlvbnMpXG4gICAgICB0aGlzLm5vZGVDb3VudCsrXG4gICAgfVxuICAgIGhhbmRsZXJzLmFkZChoYW5kbGVyKVxuICB9XG5cbiAgdW5vYnNlcnZlKG5vZGUsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuaGFuZGxlcnNCeU5vZGUuZ2V0KG5vZGUpXG4gICAgaWYgKGhhbmRsZXJzPy5kZWxldGUoaGFuZGxlcikgJiYgaGFuZGxlcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgdGhpcy5oYW5kbGVyc0J5Tm9kZS5kZWxldGUobm9kZSlcbiAgICAgIHRoaXMub2JzZXJ2ZXI/LnVub2JzZXJ2ZShub2RlKVxuICAgICAgaWYgKC0tdGhpcy5ub2RlQ291bnQgPT09IDApIHtcbiAgICAgICAgZGVsZXRlIG9ic2VydmVyc1t0aGlzLmtleV1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYW5kbGUoZW50cmllcykge1xuICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzQnlOb2RlLmdldChlbnRyeS50YXJnZXQpXG4gICAgICBpZiAoaGFuZGxlcnMpIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICAgICAgdGFyZ2V0OiBlbnRyeS50YXJnZXQsXG4gICAgICAgICAgY29udGVudFJlY3Q6IGVudHJ5LmNvbnRlbnRSZWN0LFxuICAgICAgICAgIC8vIFVzZSBgYXNBcnJheWAgc2luY2UgRmlyZWZveCBiZWZvcmUgdjkyIHJldHVybnMgdGhlc2UgYXMgb2JqZWN0czpcbiAgICAgICAgICBib3JkZXJCb3hTaXplOiBhc0FycmF5KGVudHJ5LmJvcmRlckJveFNpemUpLFxuICAgICAgICAgIGNvbnRlbnRCb3hTaXplOiBhc0FycmF5KGVudHJ5LmNvbnRlbnRCb3hTaXplKSxcbiAgICAgICAgICBkZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplOiBhc0FycmF5KGVudHJ5LmRldmljZVBpeGVsQ29udGVudEJveFNpemUpXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBoYW5kbGVyIG9mIGhhbmRsZXJzKSB7XG4gICAgICAgICAgaGFuZGxlcihldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRPYnNlcnZlcih7IGJveCA9ICdjb250ZW50LWJveCcgfSA9IHt9KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgYm94IH1cbiAgICBjb25zdCBrZXkgPSBKU09OLnN0cmluZ2lmeShvcHRpb25zKVxuICAgIG9ic2VydmVyc1trZXldIHx8PSBuZXcgT2JzZXJ2ZXIoa2V5LCBvcHRpb25zKVxuICAgIHJldHVybiBvYnNlcnZlcnNba2V5XVxuICB9XG59XG4iLCJleHBvcnQgZGVmYXVsdCBbXG4gICdjcmVhdGUnLCAnY3JlYXRlZCcsXG4gICdzYXZlJywgJ3NhdmVkJyxcbiAgJ2FwcGx5JywgJ2FwcGxpZWQnLFxuICAnc3VibWl0JywgJ3N1Ym1pdHRlZCcsXG4gICdkZWxldGUnLCAnZGVsZXRlZCcsXG4gICdyZW1vdmUnLCAncmVtb3ZlZCcsXG4gICdjbGVhcicsICdjbGVhcmVkJyxcbiAgJ2VkaXQnLCAnZWRpdGVkJyxcbiAgJ2Nsb3NlJywgJ2Nsb3NlZCcsXG4gICdjYW5jZWwnLCAnY2FuY2VsbGVkJyxcbiAgJ2RyYWcnLCAnZHJhZ2dlZCcsXG4gICdsb2dpbicsICdsb2dnZWQgaW4nXG5dLnJlZHVjZSgodmVyYnMsIHZlcmIpID0+IHtcbiAgdmVyYnNbdmVyYl0gPSB2ZXJiXG4gIHJldHVybiB2ZXJic1xufSwge30pXG4iLCJpbXBvcnQgeyBjcmVhdGVBcHAsIGggYXMgY3JlYXRlRWxlbWVudCB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IGNyZWF0ZVJvdXRlciwgY3JlYXRlV2ViSGlzdG9yeSB9IGZyb20gJ3Z1ZS1yb3V0ZXInXG5pbXBvcnQgVnVlTm90aWZpY2F0aW9ucyBmcm9tICdAa3l2Zy92dWUzLW5vdGlmaWNhdGlvbidcbmltcG9ydCB7XG4gIGlzU3RyaW5nLFxuICBpc0Fic29sdXRlVXJsLFxuICBhc3NpZ25EZWVwbHksXG4gIGh5cGhlbmF0ZSxcbiAgY2FtZWxpemUsXG4gIGRlZmF1bHRGb3JtYXRzLFxuICBkZXByZWNhdGVcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCAqIGFzIGNvbXBvbmVudHMgZnJvbSAnLi9jb21wb25lbnRzL2luZGV4LmpzJ1xuaW1wb3J0ICogYXMgdHlwZXMgZnJvbSAnLi90eXBlcy9pbmRleC5qcydcbmltcG9ydCBEaXRvUm9vdCBmcm9tICcuL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlJ1xuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgUmVzaXplRGlyZWN0aXZlIGZyb20gJy4vZGlyZWN0aXZlcy9yZXNpemUuanMnXG5pbXBvcnQgeyBnZXRSZXNvdXJjZSB9IGZyb20gJy4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBmb3JtYXRRdWVyeSB9IGZyb20gJy4vdXRpbHMvcm91dGUuanMnXG5pbXBvcnQgdmVyYnMgZnJvbSAnLi92ZXJicy5qcydcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b0FkbWluIHtcbiAgY29uc3RydWN0b3IoZWwsIHtcbiAgICAvLyBgZGl0b2AgY29udGFpbnMgdGhlIGJhc2UgYW5kIGFwaSBzZXR0aW5ncyBwYXNzZWQgZnJvbSBgQWRtaW5Db250cm9sbGVyYFxuICAgIGRpdG8gPSB7fSxcbiAgICBhcGksXG4gICAgdmlld3MgPSB7fSxcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHRoaXMuZWwgPSBlbFxuICAgIC8vIE1lcmdlIGluIGBhcGlgIHNldHRpbmdzIGFzIHBhc3NlZCBmcm9tIGBjb25maWcuYWRtaW5gIGFuZCB0aHJvdWdoIHRoZVxuICAgIC8vIGBBZG1pbkNvbnRyb2xsZXJgIHdpdGggYGFwaWAgdmFsdWVzIGZyb20gZnJvbSAnYWRtaW4vaW5kZXguanMnXG4gICAgLy8gTk9URTogYEFkbWluQ29udHJvbGxlcmAgcHJvdmlkZXMgYGRpdG8uYXBpLmJhc2VgXG4gICAgdGhpcy5hcGkgPSBhcGkgPSBhc3NpZ25EZWVwbHkoeyBiYXNlOiAnLycgfSwgZGl0by5hcGksIGFwaSlcbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG5cbiAgICAvLyBTZXR1cCBkZWZhdWx0IGFwaSBzZXR0aW5nczpcbiAgICBhcGkubG9jYWxlIHx8PSAnZW4tVVMnXG4gICAgYXBpLmZvcm1hdHMgPSBhc3NpZ25EZWVwbHkoe30sIGRlZmF1bHRGb3JtYXRzLCBhcGkuZm9ybWF0cylcbiAgICBhcGkucmVxdWVzdCB8fD0gb3B0aW9ucyA9PiByZXF1ZXN0KGFwaSwgb3B0aW9ucylcbiAgICBhcGkuZ2V0QXBpVXJsIHx8PSBvcHRpb25zID0+IGdldEFwaVVybChhcGksIG9wdGlvbnMpXG4gICAgYXBpLmlzQXBpVXJsIHx8PSB1cmwgPT4gaXNBcGlVcmwoYXBpLCB1cmwpXG4gICAgLy8gU2V0dGluZyBgYXBpLm5vcm1hbGl6ZVBhdGhzID0gdHJ1ZSAocGx1cmFsKSBzZXRzIGJvdGg6XG4gICAgLy8gYGFwaS5ub3JtYWxpemVQYXRoID0gaHlwaGVuYXRlYCBhbmQgYGFwaS5kZW5vcm1hbGl6ZVBhdGggPSBjYW1lbGl6ZWBcbiAgICBhcGkubm9ybWFsaXplUGF0aCB8fD0gYXBpLm5vcm1hbGl6ZVBhdGhzID8gaHlwaGVuYXRlIDogdmFsID0+IHZhbFxuICAgIGFwaS5kZW5vcm1hbGl6ZVBhdGggfHw9IGFwaS5ub3JtYWxpemVQYXRocyA/IGNhbWVsaXplIDogdmFsID0+IHZhbFxuXG4gICAgLy8gQWxsb3cgZGVmaW5pdGlvbiBvZiBkZWZhdWx0cyBmb3IgYWRtaW4gY29tcG9uZW50IHR5cGVzLCBuZXN0ZWQgcGVyIHR5cGU6XG4gICAgLy8gYXBpLmRlZmF1bHRzID0ge1xuICAgIC8vICAgJ211bHRpc2VsZWN0Jzoge1xuICAgIC8vICAgICBzZWxlY3RhYmxlOiB0cnVlXG4gICAgLy8gICB9LFxuICAgIC8vICAgJ2Zha2UtdHlwZSc6IHNjaGVtYSA9PiB7XG4gICAgLy8gICAgIC8vIFJldHVybiBkZWZhdWx0cywgb3IgZGlyZWN0bHkgbW9kaWZ5IHRoZSBzY2hlbWE6XG4gICAgLy8gICAgIE9iamVjdC5hc3NpZ24oc2NoZW1hLCB7XG4gICAgLy8gICAgICAgdHlwZTogJ3JlYWwtdHlwZScsXG4gICAgLy8gICAgICAgZm9ybWF0OiAoeyB2YWx1ZSB9KSA9PiBgRm9ybWF0dGVkICR7dmFsdWV9YCxcbiAgICAvLyAgICAgICBwcm9jZXNzOiAoeyB2YWx1ZSB9KSA9PiBgUHJvY2Vzc2VkICR7dmFsdWV9YFxuICAgIC8vICAgICB9KVxuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIGFwaS5kZWZhdWx0cyB8fD0ge31cblxuICAgIC8vIEFsbG93IHRoZSBjb25maWd1cmF0aW9uIG9mIGFsbCBhdXRoIHJlc291cmNlcywgbGlrZSBzbzpcbiAgICAvLyBhcGkudXNlcnMgPSB7XG4gICAgLy8gICBwYXRoOiAnL2FkbWlucycsXG4gICAgLy8gICAvLyBUaGVzZSBhcmUgdGhlIGRlZmF1bHRzOlxuICAgIC8vICAgbG9naW46IHtcbiAgICAvLyAgICAgcGF0aDogJ2xvZ2luJyxcbiAgICAvLyAgICAgbWV0aG9kOiAncG9zdCdcbiAgICAvLyAgIH0sXG4gICAgLy8gICBsb2dvdXQ6IHtcbiAgICAvLyAgICAgcGF0aDogJ2xvZ291dCcsXG4gICAgLy8gICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgLy8gICB9LFxuICAgIC8vICAgc2Vzc2lvbjoge1xuICAgIC8vICAgICBwYXRoOiAnc2Vzc2lvbicsXG4gICAgLy8gICAgIG1ldGhvZDogJ2dldCdcbiAgICAvLyAgIH1cbiAgICAvLyB9XG4gICAgY29uc3QgdXNlcnMgPSBnZXRSZXNvdXJjZShhcGkudXNlcnMsIHtcbiAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJ1xuICAgIH0pIHx8IHt9XG4gICAgdXNlcnMubG9naW4gPSBnZXRSZXNvdXJjZSh1c2Vycy5sb2dpbiB8fCAnbG9naW4nLCB7XG4gICAgICBtZXRob2Q6ICdwb3N0JyxcbiAgICAgIHBhcmVudDogdXNlcnNcbiAgICB9KVxuICAgIHVzZXJzLmxvZ291dCA9IGdldFJlc291cmNlKHVzZXJzLmxvZ291dCB8fCAnbG9nb3V0Jywge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICB1c2Vycy5zZXNzaW9uID0gZ2V0UmVzb3VyY2UodXNlcnMuc2Vzc2lvbiB8fCAnc2Vzc2lvbicsIHtcbiAgICAgIG1ldGhvZDogJ2dldCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICBhcGkudXNlcnMgPSB1c2Vyc1xuXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyBvZiByZXNvdXJjZSBwYXRoIGhhbmRsZXJzOlxuICAgIC8vIGFwaS5yZXNvdXJjZXMgPSB7XG4gICAgLy8gICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgLy8gICAgIHJldHVybiByZXNvdXJjZS5wYXJlbnRcbiAgICAvLyAgICAgICA/IGAke3Jlc291cmNlLnBhdGh9PyR7cmVzb3VyY2UucGFyZW50LnBhdGh9X2lkPSR7XG4gICAgLy8gICAgICAgICAgcmVzb3VyY2UucGFyZW50LmlkfWBcbiAgICAvLyAgICAgICA6IHJlc291cmNlLnBhdGhcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICBhcGkucmVzb3VyY2VzID0ge1xuICAgICAgYW55KHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzW3Jlc291cmNlPy50eXBlXSB8fCB0aGlzLmRlZmF1bHRcbiAgICAgICAgcmV0dXJuIHJlc291cmNlICYmIGhhbmRsZXIuY2FsbCh0aGlzLCByZXNvdXJjZSlcbiAgICAgIH0sXG5cbiAgICAgIGRlZmF1bHQocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgcGFyZW50UGF0aCA9IHRoaXMuYW55KHJlc291cmNlLnBhcmVudClcbiAgICAgICAgcmV0dXJuIHBhcmVudFBhdGhcbiAgICAgICAgICA/IGAke3BhcmVudFBhdGh9LyR7cmVzb3VyY2UucGF0aH1gXG4gICAgICAgICAgOiByZXNvdXJjZS5wYXRoXG4gICAgICB9LFxuXG4gICAgICBjb2xsZWN0aW9uKHJlc291cmNlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHQocmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICBtZW1iZXIocmVzb3VyY2UpIHtcbiAgICAgICAgLy8gTk9URTogV2UgYXNzdW1lIHRoYXQgYWxsIG1lbWJlcnMgaGF2ZSByb290LWxldmVsIGNvbGxlY3Rpb24gcm91dGVzLFxuICAgICAgICAvLyB0byBhdm9pZCBleGNlc3NpdmUgbmVzdGluZyBvZiAoc3ViLSljb2xsZWN0aW9uIHJvdXRlcy5cbiAgICAgICAgcmV0dXJuIGAke3Jlc291cmNlLnBhdGh9LyR7cmVzb3VyY2UuaWR9YFxuICAgICAgfSxcblxuICAgICAgdXBsb2FkKHJlc291cmNlKSB7XG4gICAgICAgIC8vIERpdG8gU2VydmVyIGhhbmRsZXMgdXBsb2FkIHJvdXRlcyBvbiB0aGUgY29sbGVjdGlvbiByZXNvdXJjZTpcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuY29sbGVjdGlvbihyZXNvdXJjZS5wYXJlbnQpfS91cGxvYWQvJHtyZXNvdXJjZS5wYXRofWBcbiAgICAgIH0sXG5cbiAgICAgIC4uLmFwaS5yZXNvdXJjZXNcbiAgICB9XG5cbiAgICAvLyBBbGxvdyBvdmVycmlkaW5nIC8gZXh0ZW5kaW5nIG9mIGhlYWRlcnM6XG4gICAgLy8gYXBpLmhlYWRlcnMgPSB7XG4gICAgLy8gICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgLy8gfVxuICAgIGFwaS5oZWFkZXJzID0ge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgIC4uLmFwaS5oZWFkZXJzXG4gICAgfVxuXG4gICAgaWYgKGlzU3RyaW5nKGVsKSkge1xuICAgICAgZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGVsKVxuICAgIH1cblxuICAgIGNvbnN0IGFwcCA9ICh0aGlzLmFwcCA9IGNyZWF0ZUFwcCh7XG4gICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgIERpdG9Sb290LFxuICAgICAgICBWdWVOb3RpZmljYXRpb25zLFxuICAgICAgICAvLyBUaGlzIG1heSBvbmx5IGJlIG5lZWRlZCB0byBhdm9pZCB0cmVlLXNoYWNraW5nIG9mIHRoZXNlIGNvbXBvbmVudHMsXG4gICAgICAgIC8vIHNpbmNlIHRoZXkgYWN0dWFsbHkgaGFuZGxlIHJlZ2lzdHJ5IGludGVybmFsbHkgYWxyZWFkeS5cbiAgICAgICAgLy8gVE9ETzogUmVtb3ZlIHRoaXMgb25jZSB3ZSBoYXZlIGEgYmV0dGVyIHNvbHV0aW9uLlxuICAgICAgICAuLi5jb21wb25lbnRzLFxuICAgICAgICAuLi50eXBlc1xuICAgICAgfSxcblxuICAgICAgLy8gTW9zdCBpbmplY3RzIGFyZSBkZWZpbmVkIGFzIGZ1bmN0aW9ucywgdG8gcHJlc2VydmUgcmVhY3RpdmVuZXNzIGFjcm9zc1xuICAgICAgLy8gcHJvdmlkZS9pbmplY3QsIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvaXNzdWVzLzcwMTcjaXNzdWVjb21tZW50LTQ4MDkwNjY5MVxuICAgICAgcHJvdmlkZToge1xuICAgICAgICBhcGksXG4gICAgICAgIC8vIEEgZGVmYXVsdCBsaXN0IG9mIHZlcmJzIGFyZSBwcm92aWRlZCBieSAkdmVyYnMoKSBhbmQgY2FuIGJlXG4gICAgICAgIC8vIG92ZXJyaWRkZW4gYXQgYW55IHBvaW50IGluIHRoZSBjb21wb25lbnQgaGllcmFyY2h5LlxuICAgICAgICAkdmVyYnM6ICgpID0+IHZlcmJzLFxuICAgICAgICAvLyBQcm92aWRlIGRlZmF1bHRzIHNvIERpdG9NaXhpbiBjYW4gaW5qZWN0IHRoZW0gZm9yIGFsbCBjb21wb25lbnRzOlxuICAgICAgICAvLyAgIGluamVjdDogWyAgJyRpc1BvcHVsYXRlZCcsICckc2NoZW1hQ29tcG9uZW50JywgJyRyb3V0ZUNvbXBvbmVudCcgXVxuICAgICAgICAkdmlld3M6ICgpID0+IHt9LFxuICAgICAgICAkaXNQb3B1bGF0ZWQ6ICgpID0+IHRydWUsXG4gICAgICAgICRwYXJlbnRDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyb3V0ZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRhdGFDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJGRpYWxvZ0NvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHBhbmVsQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gICAgICB9LFxuXG4gICAgICByZW5kZXI6ICgpID0+XG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoRGl0b1Jvb3QsIHtcbiAgICAgICAgICByZWY6ICdyb290JyxcbiAgICAgICAgICBjbGFzczogZGl0by5zZXR0aW5ncy5yb290Q2xhc3MsXG4gICAgICAgICAgdW5yZXNvbHZlZFZpZXdzOiB2aWV3cyxcbiAgICAgICAgICBvcHRpb25zXG4gICAgICAgIH0pXG4gICAgfSkpXG5cbiAgICAvLyBQcmV2ZW50IGVuZGxlc3MgbG9vcHMgb2YgZXJyb3IgbWVzc2FnZXMgZHVyaW5nIHJlbmRlciBmdW5jdGlvbnMgYnlcbiAgICAvLyBzZXR0aW5nIGEgY3VzdG9tIGVycm9yIGhhbmRsZXIuXG4gICAgYXBwLmNvbmZpZy5lcnJvckhhbmRsZXIgPSBjb25zb2xlLmVycm9yXG5cbiAgICBhcHAudXNlKFZ1ZU5vdGlmaWNhdGlvbnMsIHtcbiAgICAgIGNvbXBvbmVudE5hbWU6ICdWdWVOb3RpZmljYXRpb25zJyxcbiAgICAgIG5hbWU6ICdub3RpZnknXG4gICAgfSlcblxuICAgIGFwcC5kaXJlY3RpdmUoJ3Jlc2l6ZScsIFJlc2l6ZURpcmVjdGl2ZSlcblxuICAgIGFwcC51c2UoXG4gICAgICBjcmVhdGVSb3V0ZXIoe1xuICAgICAgICAvLyBTdGFydCB3aXRoIGEgY2F0Y2gtYWxsIHJvdXRlLCB0byBiZSByZXBsYWNlZCBieSB0aGUgYWN0dWFsIHJvdXRlc1xuICAgICAgICAvLyBvbmNlIHRoZSBzY2hlbWFzIGFyZSBsb2FkZWQsIHRvIHByZXZlbnQgdnVlLXJvdXRlciBmcm9tIGNvbXBsYWluaW5nLFxuICAgICAgICAvLyBzZWU6IGByZXNvbHZlVmlld3MoKWAgaW4gYERpdG9Sb290YCBmb3IgdGhlIGFjdHVhbCByb3V0ZSBzZXR1cC5cbiAgICAgICAgcm91dGVzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ2NhdGNoLWFsbCcsXG4gICAgICAgICAgICBwYXRoOiAnLzpfKC4qKScsXG4gICAgICAgICAgICBjb21wb25lbnRzOiB7fVxuICAgICAgICAgIH1cbiAgICAgICAgXSxcbiAgICAgICAgaGlzdG9yeTogY3JlYXRlV2ViSGlzdG9yeShkaXRvLmJhc2UpLFxuICAgICAgICBsaW5rQWN0aXZlQ2xhc3M6ICcnLFxuICAgICAgICBsaW5rRXhhY3RBY3RpdmVDbGFzczogJydcbiAgICAgIH0pXG4gICAgKVxuXG4gICAgZWwuY2xhc3NMaXN0LmFkZCgnZGl0by1hcHAnKVxuICAgIGFwcC5tb3VudChlbClcbiAgfVxuXG4gIHJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIodHlwZSwgb3B0aW9ucylcbiAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlc3BvbnNlKSB7XG4gICAgc3VwZXIoXG4gICAgICBgUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZTogJHtyZXNwb25zZS5zdGF0dXN9ICgke1xuICAgICAgICByZXNwb25zZS5zdGF0dXNUZXh0XG4gICAgICB9KWBcbiAgICApXG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcmVxdWVzdChhcGksIHtcbiAgdXJsLFxuICBtZXRob2QgPSAnZ2V0JyxcbiAgLy8gVE9ETzogYHJlcXVlc3QucGFyYW1zYCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgYHF1ZXJ5YCBvbiAyMDIyLTExLTAxLFxuICAvLyByZW1vdmUgb25jZSBub3QgaW4gdXNlIGFueXdoZXJlIGFueSBtb3JlLlxuICBwYXJhbXMgPSBudWxsLFxuICBxdWVyeSA9IHBhcmFtcyB8fCBudWxsLFxuICBoZWFkZXJzID0gbnVsbCxcbiAgZGF0YSA9IG51bGwsXG4gIHNpZ25hbCA9IG51bGxcbn0pIHtcbiAgaWYgKHBhcmFtcykge1xuICAgIGRlcHJlY2F0ZShcbiAgICAgIGByZXF1ZXN0LnBhcmFtcyBpcyBkZXByZWNhdGVkLiBVc2UgYWN0aW9uLm1ldGhvZCBhbmQgYWN0aW9uLnBhdGggaW5zdGVhZC5gXG4gICAgKVxuICB9XG5cbiAgY29uc3QgaXNBcGlVcmwgPSBhcGkuaXNBcGlVcmwodXJsKVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYXBpLmdldEFwaVVybCh7IHVybCwgcXVlcnkgfSksIHtcbiAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgIC4uLihkYXRhICYmIHsgYm9keTogSlNPTi5zdHJpbmdpZnkoZGF0YSkgfSksXG4gICAgaGVhZGVyczoge1xuICAgICAgLi4uKGlzQXBpVXJsICYmIGFwaS5oZWFkZXJzKSxcbiAgICAgIC4uLmhlYWRlcnNcbiAgICB9LFxuICAgIGNyZWRlbnRpYWxzOlxuICAgICAgaXNBcGlVcmwgJiYgYXBpLmNvcnM/LmNyZWRlbnRpYWxzXG4gICAgICAgID8gJ2luY2x1ZGUnXG4gICAgICAgIDogJ3NhbWUtb3JpZ2luJyxcbiAgICBzaWduYWxcbiAgfSlcblxuICBpZiAocmVzcG9uc2UuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpPy5pbmNsdWRlcygnYXBwbGljYXRpb24vanNvbicpKSB7XG4gICAgcmVzcG9uc2UuZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKVxuICB9XG5cbiAgaWYgKCFyZXNwb25zZS5vaykge1xuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IocmVzcG9uc2UpXG4gIH1cbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbmZ1bmN0aW9uIGlzQXBpVXJsKGFwaSwgdXJsKSB7XG4gIHJldHVybiAhaXNBYnNvbHV0ZVVybCh1cmwpIHx8IHVybC5zdGFydHNXaXRoKGFwaS51cmwpXG59XG5cbmZ1bmN0aW9uIGdldEFwaVVybChhcGksIHsgdXJsLCBxdWVyeSB9KSB7XG4gIGlmICghdXJsLnN0YXJ0c1dpdGgoYXBpLnVybCkgJiYgIWlzQWJzb2x1dGVVcmwodXJsKSkge1xuICAgIHVybCA9IGNvbWJpbmVVcmxzKGFwaS51cmwsIHVybClcbiAgfVxuICAvLyBTdXBwb3J0IG9wdGlvbmFsIHF1ZXJ5IHBhcmFtZXRlcnMsIHRvIGJlIGFyZSBhZGRlZCB0byB0aGUgVVJMLlxuICBjb25zdCBzZWFyY2ggPSBmb3JtYXRRdWVyeShxdWVyeSlcbiAgcmV0dXJuIHNlYXJjaCA/IGAke3VybH0ke3VybC5pbmNsdWRlcygnPycpID8gJyYnIDogJz8nfSR7c2VhcmNofWAgOiB1cmxcbn1cblxuZnVuY3Rpb24gY29tYmluZVVybHMoYmFzZVVybCwgcmVsYXRpdmVVcmwpIHtcbiAgLy8gVXNlIHNhbWUgYXBwcm9hY2ggYXMgYXhpb3MgYGNvbWJpbmVVUkxzKClgIHRvIGpvaW4gYmFzZVVybCAmIHJlbGF0aXZlVXJsOlxuICByZXR1cm4gYCR7YmFzZVVybC5yZXBsYWNlKC9cXC8rJC8sICcnKX0vJHtyZWxhdGl2ZVVybC5yZXBsYWNlKC9eXFwvKy8sICcnKX1gXG59XG4iXSwibmFtZXMiOlsicGFyc2VVc2VyQWdlbnQiLCJ1c2VyQWdlbnQiLCJhZ2VudCIsInVhIiwib3MiLCJwbGF0Zm9ybSIsIm1hdGNoIiwiYnJvd3NlciIsInYxIiwidjIiLCJydiIsInZlcnNpb24iLCJhcHBTdGF0ZSIsInJlYWN0aXZlIiwiYXBwZW5kRGF0YVBhdGgiLCJkYXRhUGF0aCIsInRva2VuIiwicGFyc2VQYXJlbnREYXRhUGF0aCIsInBhdGgiLCJwYXJzZURhdGFQYXRoIiwicGFyc2VJdGVtRGF0YVBhdGgiLCJuZXN0ZWQiLCJnZXRJdGVtRGF0YVBhdGgiLCJub3JtYWxpemVEYXRhUGF0aCIsInBhcnNlUGFyZW50SXRlbURhdGFQYXRoIiwiaXNJbnRlZ2VyIiwiZ2V0UGFyZW50SXRlbURhdGFQYXRoIiwiZ2V0SXRlbSIsInJvb3RJdGVtIiwiZ2V0VmFsdWVBdERhdGFQYXRoIiwiZ2V0UGFyZW50SXRlbSIsImdldExhc3REYXRhUGF0aFRva2VuIiwiZ2V0TGFzdERhdGFQYXRoTmFtZSIsImdldExhc3REYXRhUGF0aEluZGV4IiwiaW5kZXgiLCJ0ZW1wb3JhcnlJZCIsInNldFRlbXBvcmFyeUlkIiwiZGF0YSIsImlkS2V5IiwiaXNUZW1wb3JhcnlJZCIsImlkIiwiaXNSZWZlcmVuY2UiLCJoYXNPd25Qcm9wZXJ0eSIsImNvbnRleHRzIiwiZ2V0IiwiY29udGV4dCIsImtleSIsImRlZmF1bHRWYWx1ZSIsIm9iamVjdCIsInRvUmF3IiwidmFsdWUiLCJpc0Z1bmN0aW9uIiwic2V0IiwiRGl0b0NvbnRleHQiLCJjb21wb25lbnQiLCJpdGVtIiwib3B0aW9ucyIsImxvY2F0aW9uIiwicmVzb3VyY2UiLCJFbWl0dGVyTWl4aW4iLCJldmVudCIsImNhbGxiYWNrIiwiaXNBcnJheSIsImV2IiwiaXNQbGFpbk9iamVjdCIsImxpc3RlbmVycyIsImNhbGxiYWNrcyIsIm9uIiwiYXJncyIsImVudHJ5IiwiX2EiLCJjYiIsInF1ZXVlIiwicmVzb2x2ZSIsIm5leHQiLCJyZXN1bHQiLCJyZXMiLCJlcnJvciIsInRhcmdldCIsImlzQ3JlZGl0Q2FyZCIsImRlY2ltYWxzIiwiaXNEb21haW4iLCJpc0VtYWlsIiwiaXNIb3N0bmFtZSIsIm1heCIsIm1pbiIsInNldHRpbmdzIiwicGFzc3dvcmQiLCJpc1VybCIsIlZhbGlkYXRpb25NaXhpbiIsIm5vdGlmeSIsImlzVmFsaWQiLCJydWxlIiwic2V0dGluZyIsInZhbGlkYXRvciIsInZhbGlkYXRpb25zIiwidmFsaWRhdGUiLCJtZXNzYWdlIiwiYWRkTGFiZWwiLCJlcnJvcnMiLCJmb2N1cyIsImdldFNjaGVtYUFjY2Vzc29yIiwia2V5T3JEYXRhUGF0aCIsInR5cGUiLCJkZWYiLCJpc1N0cmluZyIsIm5hbWUiLCJnZXRTdG9yZUFjY2Vzc29yIiwiVHlwZU1peGluIiwiY29tcHV0ZVZhbHVlIiwiZm9ybWF0IiwicGFyc2UiLCJzY2hlbWFDb21wb25lbnQiLCJub2RlIiwiZXZlbnRzIiwiY2FtZWxpemUiLCJuYXRpdmVGaWVsZCIsInRleHRGaWVsZCIsImF0dHJpYnV0ZXMiLCJhZGQiLCJvbkZvY3VzIiwib25CbHVyIiwib25JbnB1dCIsIm9uQ2hhbmdlIiwiX2IiLCJlbGVtZW50IiwiYXNBcnJheSIsInVpZE1hcCIsInVpZCIsImdldFVpZCIsImdldEl0ZW1JZCIsInJhdyIsIlNjaGVtYUdyYXBoIiwiX19wdWJsaWNGaWVsZCIsImRlZmF1bHRzIiwic3ViR3JhcGgiLCJwYXJ0Iiwic2NoZW1hIiwicmVsYXRlZERhdGFQYXRoIiwibmFub2lkIiwiZmxhdHRlbiIsImdyYXBoIiwiZW50cmllcyIsIiRzZXR0aW5ncyIsInN1YktleSIsInNvdXJjZVNjaGVtYSIsImNsaXBib2FyZCIsImludGVybmFsIiwicmVsYXRlZCIsInJlZmVyZW5jZSIsInNvdXJjZSIsInJlbGF0aW9uIiwidmFsdWVzIiwicmVtb3ZlSWQiLCJyZWZlcmVuY2VJZCIsInJlZktleSIsInJldlZhbHVlIiwidHlwZUNoZWNrZXJzIiwiaXNCb29sZWFuIiwiaXNOdW1iZXIiLCJpc0RhdGUiLCJpc09iamVjdCIsImlzUmVnRXhwIiwidHlwZUNvbnZlcnRlcnMiLCJpc01hdGNoaW5nVHlwZSIsInR5cGVzIiwiY29udmVydFR5cGUiLCJjb252ZXJ0ZXIiLCJ0eXBlQ29tcG9uZW50cyIsInVua25vd25UeXBlUmVwb3J0ZWQiLCJyZWdpc3RlclR5cGVDb21wb25lbnQiLCJnZXRUeXBlQ29tcG9uZW50IiwiYWxsb3dOdWxsIiwiaXRlcmF0ZVNjaGVtYUNvbXBvbmVudHMiLCJzY2hlbWFzIiwiaXNTaW5nbGVDb21wb25lbnRWaWV3IiwiaXNTY2hlbWEiLCJpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyIsImdldFRhYlNjaGVtYXMiLCJmaW5kTmVzdGVkU2NoZW1hQ29tcG9uZW50Iiwic29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudCIsImhhc05lc3RlZFNjaGVtYUNvbXBvbmVudHMiLCJpc0Zvcm0iLCJpc1ZpZXciLCJpc1RhYiIsImlzUGFuZWwiLCJpc01lbnUiLCJnZXRTY2hlbWFJZGVudGlmaWVyIiwicmVzb2x2ZVNjaGVtYSIsInVud3JhcE1vZHVsZSIsImlzUHJvbWlzZSIsImlzTW9kdWxlIiwia2V5cyIsInJlc29sdmVTY2hlbWFzIiwidW5yZXNvbHZlZFNjaGVtYXMiLCJyZXNvbHZlSXRlbSIsIm1hcENvbmN1cnJlbnRseSIsInJlc29sdmVWaWV3cyIsInVucmVzb2x2ZWRWaWV3cyIsImZsYXR0ZW5WaWV3cyIsInZpZXdzIiwicmVzb2x2ZVNjaGVtYUNvbXBvbmVudCIsIm1hcmtSYXciLCJEaXRvTWl4aW4iLCJyZXNvbHZlU2NoZW1hQ29tcG9uZW50cyIsInByb2Nlc3NTY2hlbWFDb21wb25lbnRzIiwiYXBpIiwicm91dGVzIiwibGV2ZWwiLCJwcm9taXNlcyIsInByb2Nlc3MiLCJyZWxhdGl2ZUxldmVsIiwicHJvY2Vzc1NjaGVtYUNvbXBvbmVudCIsImdldFBhbmVsU2NoZW1hcyIsInByb2Nlc3NTY2hlbWFEZWZhdWx0cyIsInBhbmVsIiwiZ2V0VHlwZU9wdGlvbnMiLCJwcm9jZXNzVmlldyIsImZ1bGxQYXRoIiwicHJvY2Vzc1JvdXRlU2NoZW1hIiwiY2hpbGRyZW4iLCJwcm9jZXNzTmVzdGVkU2NoZW1hcyIsImFzc2lnbkRlZXBseSIsInByb2Nlc3NOZXN0ZWRTY2hlbWFEZWZhdWx0cyIsImZvcm1zIiwiZ2V0Rm9ybVNjaGVtYXMiLCJmb3JtIiwicHJvY2Vzc0Zvcm1zIiwiY29tcG9uZW50cyIsInByb2Nlc3NGb3JtIiwicHJvY2Vzc1RhYiIsInByb2Nlc3NQYW5lbCIsInRhYnMiLCJwYW5lbHMiLCJ0YWIiLCJoYXNGb3JtU2NoZW1hIiwiaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyIsImdldFZpZXdGb3JtU2NoZW1hIiwidmlldyIsInZpZXdTY2hlbWEiLCJnZXRWaWV3U2NoZW1hIiwiaGFzVmlld1NjaGVtYSIsImdldFZpZXdFZGl0UGF0aCIsIm1vZGlmeUZvcm0iLCJjb21wYWN0IiwiZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMiLCJnZXRJdGVtRm9ybVNjaGVtYSIsImlzQ29tcGFjdCIsImlzSW5saW5lZCIsImlzTmVzdGVkIiwiaGFzTGFiZWwiLCJnZW5lcmF0ZUxhYmVscyIsImxhYmVsIiwib21pdFNwYWNpbmciLCJnZXRTY2hlbWFWYWx1ZSIsImNvbnZlcnRlZCIsInNob3VsZFJlbmRlclNjaGVtYSIsImdldERlZmF1bHRWYWx1ZSIsImNsb25lIiwiaWdub3JlTWlzc2luZ1ZhbHVlIiwidHlwZU9wdGlvbnMiLCJzZXREZWZhdWx0VmFsdWVzIiwicHJvY2Vzc1NjaGVtYURhdGEiLCJyb290RGF0YSIsImNvbXB1dGUiLCJjbG9uZUl0ZW0iLCJjb3B5Iiwib3JkZXJLZXkiLCJwcm9jZXNzRGF0YSIsInNjaGVtYU9ubHkiLCJwcm9jZXNzZWREYXRhIiwid3JhcFByaW1pdGl2ZXMiLCJhIiwiYiIsImlkMSIsImlkMiIsImV4Y2x1ZGUiLCJnZXRDb250ZXh0IiwicHJvY2Vzc1ZhbHVlIiwicHJvY2Vzc0JlZm9yZSIsInByb2Nlc3NBZnRlciIsInByb2Nlc3NDb21wb25lbnRzIiwiZ2V0RGF0YVBhdGgiLCJjb21wb25lbnRTY2hlbWEiLCJjb21wb25lbnREYXRhUGF0aCIsInByb2Nlc3NJdGVtIiwiaXRlbURhdGFQYXRoIiwicHJvY2Vzc2VkSXRlbSIsImdldE5hbWVkU2NoZW1hcyIsInRvT2JqZWN0IiwiYXJyYXkiLCJ0b1NjaGVtYSIsImdldEJ1dHRvblNjaGVtYXMiLCJidXR0b25zIiwiZ2V0VHlwZSIsInNjaGVtYU9yVHlwZSIsImdldFNvdXJjZVR5cGUiLCJnZXRQYW5lbEVudHJ5IiwidGFiQ29tcG9uZW50IiwiZ2V0UGFuZWxFbnRyaWVzIiwicGFuZWxTY2hlbWFzIiwicGFuZWxFbnRyaWVzIiwiZ2V0QWxsUGFuZWxFbnRyaWVzIiwicGFuZWxTY2hlbWEiLCJpc09iamVjdFNvdXJjZSIsImlzTGlzdFNvdXJjZSIsImdldEl0ZW1VaWQiLCJoYXNSZXNvdXJjZSIsImdldFJlc291cmNlIiwicGFyZW50IiwiZGVmcyIsImdldE1lbWJlclJlc291cmNlIiwicGlja0J5Iiwic2VsZiIsIm5leHRVaWQiLCJsYWJlbGl6ZSIsInN0b3JlIiwib2xkS2V5IiwidmVyYiIsInF1ZXJ5IiwidXJsIiwibWV0aG9kIiwic2lnbmFsIiwiY2hlY2tVc2VyIiwicmVzcG9uc2UiLCJlcXVhbHMiLCJjYWNoZSIsImNhY2hlUGFyZW50IiwibG9hZENhY2hlIiwiY2FjaGVLZXkiLCJsb2NhbGUiLCJib2R5IiwiZ2V0Q29tcHV0ZWRBY2Nlc3NvciIsImdldHRlciIsImNvbXB1dGVkIiwiYWNjZXNzb3IiLCJ3YXRjaCIsImhhbmRsZXJzIiwiZXhwciIsImFkZEV2ZW50IiwiaHlwaGVuYXRlIiwiaGFzTGlzdGVuZXJzIiwicGFyZW50SGFzTGlzdGVuZXJzIiwicGFyYW1zIiwicmVzb2x2ZU1lcmdlZE9wdGlvbnMiLCJtaXhpbnMiLCJtZXJnZU9wdGlvbnMiLCJ0byIsImZyb20iLCJtaXhpbiIsImRpdG9PcHRpb25LZXlzIiwiRGl0b0NvbXBvbmVudCIsImRlZmluaXRpb24iLCJkZXNjcmliZURhdGUiLCJkYXRlIiwiYWx0ZXJEYXRlIiwib3ZlcnJpZGVzIiwicGFyc2VEYXRlIiwic3RyaW5nIiwidGltZSIsInRpbWVEZWZhdWx0IiwiZGF5Iiwic2VwMSIsIm1vbnRoIiwic2VwMiIsInllYXIiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwibWlsbGlzZWNvbmQiLCJnZXREYXRlUGFydHMiLCJnZXRNb250aEluZGV4IiwiaXNWYWxpZFRpbWVQYXJ0IiwiZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uIiwicG9zaXRpb24iLCJwYXJ0cyIsImdldFBvc2l0aW9uIiwibGVuZ3RoIiwicG9zIiwib2Zmc2V0IiwiaXNVUyIsInN0YXJ0IiwiZW5kIiwic2hvcnRGb3JtYXQiLCJsb25nRm9ybWF0IiwiaSIsIl9zZmNfbWFpbiIsIndlZWtkYXlOYW1lcyIsIm1vbnRoTmFtZXMiLCJnZXRMb2NhbGVOYW1lcyIsIm1vZGUiLCJ1cGRhdGUiLCJzdGVwIiwiY3VycmVudFZhbHVlIiwiZW50ZXIiLCJzdGFydFllYXIiLCJmaXJzdERheVdlZWsiLCJudW1EYXlzIiwicHJldk1vbnRoIiwicHJldk1vbnRoTnVtRGF5cyIsIm5vdyIsImlzRGF5Iiwic3RhdGUiLCJuZXh0TW9udGhOZWVkIiwibmV4dE1vbnRoIiwibG9jYWxlTmFtZXMiLCJuYW1lcyIsImFkZEV2ZW50cyIsInRhcmdldHMiLCJoYW5kbGVyIiwiY29tYmluZUV2ZW50cyIsImdldEtleSIsImdldEtleU5hdmlnYXRpb24iLCJnZXRUYXJnZXQiLCJjbGFzc2VzIiwic2hvdyIsInRyaWdnZXIiLCJwb3B1cCIsIl9jIiwiZWwiLCJib3VuZHMiLCJ0cmlnZ2VyTGVmdCIsInRyaWdnZXJUb3AiLCJ0cmlnZ2VyV2lkdGgiLCJ0cmlnZ2VySGVpZ2h0IiwicG9wdXBXaWR0aCIsInBvcHVwSGVpZ2h0IiwicGFydDEiLCJwYXJ0MiIsIndpbldpZHRoIiwid2luSGVpZ2h0IiwibGVmdCIsInRvcCIsInRyaWdnZXJCb3VuZHMiLCJpbnB1dCIsIl8iLCJzaXplIiwiZ2V0TGVuZ3RoIiwiX29wZW5CbG9jayIsIl9jcmVhdGVFbGVtZW50QmxvY2siLCJzZXRTZWxlY3Rpb24iLCJnZXRTZWxlY3Rpb24iLCJUcmlnZ2VyIiwiQ2FsZW5kYXIiLCJJbnB1dEZpZWxkIiwiSWNvbiIsImRlZmF1bHRGb3JtYXRzIiwiZ2V0RGF0ZVBhcnQiLCJjYWxlbmRhciIsInRvZ2dsZSIsInNlbGVjdGlvbiIsInNtb290aCIsInNjcm9sbCIsInJlZiIsImxpbmVIZWlnaHQiLCJkaXN0YW5jZSIsImNvdW50IiwiaXNEaWdpdCIsImNoYXIiLCJEYXRlUGlja2VyIiwiVGltZVBpY2tlciIsInRyYW5zaXRpb24iLCJkaXNhYmxlZCIsInRleHQiLCJwYWdlIiwicGFnZVNpemUiLCJjdXJyZW50UGFnZVNpemUiLCJzaG93UHJldiIsInNob3dOZXh0IiwidG90YWwiLCJjdXJyZW50UGFnZSIsInNob3dMZW5ndGgiLCJudW1QYWdlcyIsInBhZ2VSYW5nZSIsImNoZWNrZWQiLCJ1bmNoZWNrZWQiLCJtb2RlbFZhbHVlIiwiVHJhbnNpdGlvbkhlaWdodCIsImVuYWJsZWQiLCJzbG90cyIsImNyZWF0ZUVsZW1lbnQiLCJUcmFuc2l0aW9uIiwicHJvcHMiLCJzZXRTdHlsZSIsInN0eWxlIiwibmV4dFRpbWVvdXQiLCJmb3JjZVJlcGFpbnQiLCJ3aWR0aCIsImhlaWdodCIsImhhc1ZOb2RlQ29udGVudCIsInZub2RlIiwiQ29tbWVudCIsImhhc1Nsb3RDb250ZW50Iiwic2xvdCIsInVzZVNsb3RzIiwiRG9tTWl4aW4iLCJyZW1vdmUiLCJEaXRvVXNlciIsInJvbGVzIiwicm9sZSIsIlNjaGVtYVBhcmVudE1peGluIiwic2NoZW1hQ29tcG9uZW50cyIsIlZhbGlkYXRvck1peGluIiwiaXQiLCJSb3V0ZU1peGluIiwicm91dGVDb21wb25lbnQiLCJtYXRjaGVkIiwicmVjb3JkIiwiYnJlYWRjcnVtYiIsInJvdXRlQ29tcG9uZW50cyIsIm9rIiwicmVjb3JkUGF0aCIsInJvb3RQYXRoIiwiZ2V0Q29tbW9uUHJlZml4IiwiaXNMb2FkaW5nIiwiVXNlRm9jdXNUcmFwIiwiZGVmaW5lQ29tcG9uZW50IiwidHJhcCIsImFjdGl2YXRlIiwiZGVhY3RpdmF0ZSIsInVucmVmRWxlbWVudCIsImNyZWF0ZUZvY3VzVHJhcCIsIm9uU2NvcGVEaXNwb3NlIiwiaCIsImRpYWxvZ0RhdGEiLCJEaXRvRGlhbG9nIiwicHJlZml4IiwidGlwcHlEZWxlZ2F0ZSIsImluc3RhbmNlIiwiZXJyIiwiZHJhZ0NvdW50IiwidXBsb2FkcyIsInRvZ2dsZURyb3BUYXJnZXRDbGFzcyIsInVwbG9hZCIsInNldERyYWdnaW5nRmlsZXMiLCJoYXNVcGxvYWRzIiwiY2FuRHJvcCIsInRpdGxlIiwicmVqZWN0IiwiZGlhbG9nSWQiLCJhZGRpdGlvbmFsQ29tcG9uZW50cyIsInJlZGlyZWN0QWZ0ZXJMb2dpbiIsImxvZ2luRGF0YSIsInVzZXIiLCJEaXRvVmlldyIsImFkZFJvdXRlcyIsInJvdXRlciIsInJlbW92ZXJzIiwicm91dGUiLCJzdWJNZW51Q2xhc3MiLCJmaXJzdENoaWxkIiwibG9nIiwic3RyaXBUYWdzIiwibm90aWZpY2F0aW9ucyIsImR1cmF0aW9uRmFjdG9yIiwiZHVyYXRpb24iLCJQdWxsZG93bk1peGluIiwic3RhcnRUaW1lIiwib3BlbiIsImNvbnRlbnQiLCJhc09iamVjdCIsIkl0ZW1NaXhpbiIsIml0ZW1JZCIsImV4dGVuZGVkIiwiaXRlbUxhYmVsIiwiZm9ybUxhYmVsIiwiZ2V0Rm9ybUxhYmVsIiwic3VmZml4IiwiY29sdW1ucyIsImhhZExhYmVsIiwic2VsZWN0ZWRUYWIiLCJmaXJzdCIsImRlZmF1bHRUYWIiLCJoYXNoIiwiZGF0YVBhdGhPck5hbWUiLCJzY3JvbGxDb250YWluZXIiLCJkaXNwYXRjaCIsImNvbXBvbmVudHNCeURhdGFQYXRoIiwiZGF0YVBhdGhzIiwiY2hlY2siLCJmaWVsZCIsInVubWF0Y2hlZCIsImVycnMiLCJmdWxsRGF0YVBhdGgiLCJkYXRhUGF0aFBhcnRzIiwiZm91bmQiLCJwcm9wZXJ0eSIsInN1YkNvbXBvbmVudHMiLCJwYW5lIiwicmVnaXN0cnkiLCJlbnRyaWVzQnlEYXRhUGF0aCIsIl93aXRoRGlyZWN0aXZlcyIsIl9GcmFnbWVudCIsIl9yZW5kZXJMaXN0IiwiX2N0eCIsIl9ob2lzdGVkXzEiLCJfY3JlYXRlQmxvY2siLCJfY29tcG9uZW50X0RpdG9Db250YWluZXIiLCJuZXN0ZWREYXRhUGF0aCIsIl9ob2lzdGVkXzIiLCJwb3NpdGlvbnMiLCJpc0xhc3RJblJvdyIsImZpbmROZXh0UG9zaXRpb24iLCJyb3dzIiwicm93IiwidmVydGljYWxMYWJlbHNCeUluZGljZXMiLCJoYXNMYWJlbHNJblJvdyIsImNvbnRhaW5lciIsInBhZGRpbmciLCJmb250U2l6ZSIsInBhcnNlRnJhY3Rpb24iLCJkaXZpZGVuZCIsImRpdmlzb3IiLCJhY2N1bXVsYXRlZEJhc2lzIiwiZmxleEJhc2lzIiwiY29tYmluZWRCYXNpcyIsImJ1dHRvbiIsImNhcGl0YWxpemUiLCJjbGlwYm9hcmREYXRhIiwicGFzdGUiLCIkc2NoZW1hIiwicmVwb3J0IiwianNvbiIsImRlaW5kZW50IiwiTG9hZGluZ01peGluIiwidXBkYXRlUm9vdCIsInVwZGF0ZVZpZXciLCJSZXNvdXJjZU1peGluIiwiYW1vdW50IiwicmFuZ2UiLCJ2ZXJicyIsImNsZWFyIiwibG9hZGluZ09wdGlvbnMiLCJjb250cm9sbGVyIiwicmVxdWVzdCIsInNldERhdGEiLCJvblN1Y2Nlc3MiLCJvbkVycm9yIiwibm90aWZ5U3VjY2VzcyIsIm5vdGlmeUVycm9yIiwicmVzb2x2ZVBhdGgiLCJpc0NyZWF0aW5nIiwicHJvdmlkZXNEYXRhIiwiZGF0YVBhcnRzIiwicGF0aFBhcnRzIiwicm91dGVQYXJ0cyIsImxhc3REYXRhUGFydCIsImwiLCJkYXRhUGFydCIsInBhcmFtIiwibWFpblNjaGVtYUNvbXBvbmVudCIsInByZXNlbnQiLCJjbG9zZUZvcm0iLCJnZXRWZXJiIiwiYnV0dG9uUmVzb3VyY2UiLCJzdWNjZXNzIiwiX3Jlc291cmNlIiwiX21ldGhvZCIsIkRpdG9Gb3JtIiwidGlwIiwidGlwcHkiLCJzY29wZSIsIlBhZ2luYXRpb24iLCJTb3J0YWJsZU1peGluIiwiZm9yY2VGYWxsYmFjayIsIm9sZEluZGV4IiwibmV3SW5kZXgiLCJsaXN0IiwicGFnaW5hdGlvblJhbmdlIiwiX25vcm1hbGl6ZVN0eWxlIiwiX2NhY2hlIiwiX3dpdGhNb2RpZmllcnMiLCIkZXZlbnQiLCJfbm9ybWFsaXplQ2xhc3MiLCJfY3JlYXRlRWxlbWVudFZOb2RlIiwiX2hvaXN0ZWRfNCIsIl90b0Rpc3BsYXlTdHJpbmciLCJfaG9pc3RlZF81IiwiX2hvaXN0ZWRfNyIsIl9tZXJnZVByb3BzIiwiX2hvaXN0ZWRfOCIsIl9jb21wb25lbnRfRGl0b0xhYmVsIiwiX2NyZWF0ZVZOb2RlIiwiX2NvbXBvbmVudF9EaXRvVGFibGVDZWxsIiwiX2NvbXBvbmVudF9EaXRvRHJhZ2dhYmxlIiwiX2NvbXBvbmVudF9EaXRvVHJlZUl0ZW0iLCJjaGlsZHJlblNjaGVtYSIsImNoaWxkcmVuTGlzdCIsImVkaXRQYXRoIiwiY2hpbGRyZW5PcGVuIiwibnVtQ2hpbGRyZW4iLCJjcmVhdGFibGUiLCJlZGl0YWJsZSIsIm9yZGVyIiwiY29sdW1uIiwicmVuZGVyIiwiZXNjYXBlSHRtbCIsIlRZUEVTIiwiZmlsZSIsInJlYWRlciIsIl9fZGVmUHJvcCIsIl9fZ2V0T3duUHJvcFN5bWJvbHMiLCJfX2hhc093blByb3AiLCJfX3Byb3BJc0VudW0iLCJfX2RlZk5vcm1hbFByb3AiLCJvYmoiLCJfX3NwcmVhZFZhbHVlcyIsInByb3AiLCJfX29ialJlc3QiLCJ1c2VTb3J0YWJsZSIsInNvcnRhYmxlIiwiZG9jdW1lbnQiLCJkZWZhdWx0RG9jdW1lbnQiLCJyZXNldE9wdGlvbnMiLCJkZWZhdWx0T3B0aW9ucyIsImUiLCJtb3ZlQXJyYXlFbGVtZW50IiwiU29ydGFibGUiLCJzdG9wIiwib3B0aW9uIiwidHJ5T25Nb3VudGVkIiwidHJ5T25TY29wZURpc3Bvc2UiLCJ0b1ZhbHVlIiwibmV4dFRpY2siLCJVc2VTb3J0YWJsZSIsInVzZVZNb2RlbCIsIkRpdG9WTm9kZSIsIkRpdG9UeXBlQ29tcG9uZW50JDEiLCJEaXRvVHlwZUNvbXBvbmVudCIsIm9uQ2xpY2siLCJEYXRhTWl4aW4iLCJhc3luY0VudHJ5IiwicmVzb2x2ZWREYXRhIiwibG9hZCIsInRpbWVyIiwiT3B0aW9uc01peGluIiwiY29udmVydFZhbHVlIiwiY29udmVydCIsInNlYXJjaCIsImZpbHRlciIsImRlYm91bmNlIiwiZGVib3VuY2VBc3luYyIsImdyb3VwZWQiLCJyZXN1bHRzIiwiZ3JvdXAiLCJmaW5kT3B0aW9uIiwiZ3JvdXBCeSIsIm9wdGlvblZhbHVlIiwib3B0aW9uTGFiZWwiLCJwcm9jZXNzUmVsYXRlIiwiZmxhc2siLCJDb2RlRmxhc2siLCJjaGFuZ2VkIiwiaWdub3JlV2F0Y2giLCJpZ25vcmVVcGRhdGUiLCJzZXRDb2RlIiwiY29kZSIsInNldFZhbHVlIiwiU2tldGNoUGlja2VyIiwidGlueWNvbG9yIiwiY29sb3IiLCJEYXRlVGltZVBpY2tlciIsImZvcm1hdHMiLCJmb3JtYXRRdWVyeSIsInZhbCIsInJlcGxhY2VSb3V0ZSIsIlNvdXJjZU1peGluIiwiZGVmYXVsdFNvcnQiLCJkaXJlY3Rpb24iLCJkcmFnZ2FibGUiLCJjb2xsYXBzaWJsZSIsInJlbW92ZWQiLCJsaXN0RGF0YSIsIm9uQ29tcGxldGUiLCJvcGVuZWQiLCJjYWxsT25Db21wbGV0ZSIsImlubGluZWQiLCJtZXRhIiwiZm9ybU1ldGEiLCJjaGlsZFJvdXRlcyIsImdldFBhdGhXaXRoUGFyYW0iLCJzb3VyY2VQYXRoIiwiZm9ybVJvdXRlIiwiZmxhdFJvdXRlcyIsInN1YlJvdXRlcyIsImNoaWxkUm91dGUiLCJmaWx0ZXJDb21wb25lbnRzIiwiZGF0ZXRpbWUiLCJjcmVhdGVGaWx0ZXJzUGFuZWwiLCJmaWx0ZXJzIiwic3RpY2t5IiwiZmlsdGVyU2NoZW1hcyIsInBhcnNlRmlsdGVyc0RhdGEiLCJjcmVhdGVGaWx0ZXJzQ29tcG9uZW50cyIsImNyZWF0ZUZpbHRlcnNCdXR0b25zIiwiZm9ybWF0RmlsdGVyc0RhdGEiLCJzbWFsbCIsImdldERhdGFOYW1lIiwiZmlsdGVyTmFtZSIsImdldEZpbHRlck5hbWUiLCJkYXRhTmFtZSIsImNvbXBzIiwiZ2V0Q29tcG9uZW50c0ZvckZpbHRlciIsImZpbHRlcnNEYXRhIiwiX2NvbXBvbmVudF9EaXRvVGFibGVIZWFkIiwiX2NvbXBvbmVudF9EaXRvU2NoZW1hSW5saW5lZCIsIl9yZXNvbHZlRHluYW1pY0NvbXBvbmVudCIsIl9jb21wb25lbnRfRGl0b0VkaXRCdXR0b25zIiwiX2hvaXN0ZWRfOSIsImZpbHRlcnNEYXRhUGF0aCIsIkVkaXRvckNvbnRlbnQiLCJlZGl0b3IiLCJlbmFibGVSdWxlcyIsInNldFZhbHVlRGVib3VuY2VkIiwib25VcGRhdGUiLCJFZGl0b3IiLCJnZXRQb2ludCIsIngiLCJ5IiwicHJldlkiLCJtb3VzZW1vdmUiLCJkaWFsb2dDb21wb25lbnQiLCJnZXRNYXJrQXR0cmlidXRlcyIsImhyZWYiLCJtYXJrcyIsIm5vZGVzIiwidG9vbHMiLCJEb2N1bWVudCIsIlRleHQiLCJQYXJhZ3JhcGgiLCJCb2xkIiwiSXRhbGljIiwiVW5kZXJsaW5lIiwiU3RyaWtlIiwiU21hbGwiLCJDb2RlIiwiTGlua1dpdGhUaXRsZSIsIkJsb2NrcXVvdGUiLCJDb2RlQmxvY2siLCJIYXJkQnJlYWsiLCJIZWFkaW5nIiwiSG9yaXpvbnRhbFJ1bGUiLCJMaXN0SXRlbSIsIkJ1bGxldExpc3QiLCJPcmRlcmVkTGlzdCIsIkhpc3RvcnkiLCJleHRlbnNpb24iLCJzZXR0aW5nc05hbWUiLCJkZXNjcmlwdGlvbnMiLCJjb21tYW5kcyIsImFkZEJ1dHRvbiIsImljb24iLCJjb21tYW5kIiwiZGVzY3JpcHRpb24iLCJzZXR0aW5nTmFtZSIsImF0dHJpYnV0ZSIsIk1hcmsiLCJMaW5rIiwiX2NvbXBvbmVudF9WdWVNdWx0aXNlbGVjdCIsIlZ1ZU11bHRpc2VsZWN0IiwicGxhY2Vob2xkZXIiLCJzZWFyY2hhYmxlIiwidGFnZ2FibGUiLCJ0YWciLCJOdW1iZXJNaXhpbiIsIlN3aXRjaEJ1dHRvbiIsIlRleHRNaXhpbiIsIm1hc2tlZFBhc3N3b3JkIiwiaGFzRWRpdGFibGVGb3JtcyIsImZvcm1hdEZpbGVTaXplIiwiZmlsZXNpemUiLCJWdWVVcGxvYWQiLCJhc0ZpbGVzIiwiYWNjZXB0IiwibWF4U2l6ZSIsInBhcnNlRmlsZVNpemUiLCJ0aHVtYm5haWxzIiwicmVhZHkiLCJuZXdGaWxlIiwib2xkRmlsZSIsInhociIsImJsb2IiLCJmaWxlcyIsIlJlc2l6ZURpcmVjdGl2ZSIsImJpbmRpbmciLCJvYnNlcnZlUmVzaXplIiwidW5vYnNlcnZlUmVzaXplIiwiT2JzZXJ2ZXIiLCJpc1Jlc2l6ZVN1cHBvcnRlZCIsIm9ic2VydmVycyIsImJveCIsIkRpdG9BZG1pbiIsImRpdG8iLCJnZXRBcGlVcmwiLCJpc0FwaVVybCIsInVzZXJzIiwicGFyZW50UGF0aCIsImFwcCIsImNyZWF0ZUFwcCIsIkRpdG9Sb290IiwiVnVlTm90aWZpY2F0aW9ucyIsImNyZWF0ZVJvdXRlciIsImNyZWF0ZVdlYkhpc3RvcnkiLCJSZXF1ZXN0RXJyb3IiLCJoZWFkZXJzIiwiZGVwcmVjYXRlIiwiaXNBYnNvbHV0ZVVybCIsImNvbWJpbmVVcmxzIiwiYmFzZVVybCIsInJlbGF0aXZlVXJsIl0sIm1hcHBpbmdzIjoiaXNHQUdPLFNBQVNBLEdBQWVDLEVBQVksR0FBSSxD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
|
|
7
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGl0by1hZG1pbi51bWQuanMiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlscy9hZ2VudC5qcyIsIi4uL3NyYy9hcHBTdGF0ZS5qcyIsIi4uL3NyYy91dGlscy9kYXRhLmpzIiwiLi4vc3JjL0RpdG9Db250ZXh0LmpzIiwiLi4vc3JjL21peGlucy9FbWl0dGVyTWl4aW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2NyZWRpdGNhcmQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2RlY2ltYWxzLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19kb21haW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX2VtYWlsLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19ob3N0bmFtZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9faW50ZWdlci5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fbWF4LmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19taW4uanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3Bhc3N3b3JkLmpzIiwiLi4vc3JjL3ZhbGlkYXRpb25zL19yYW5nZS5qcyIsIi4uL3NyYy92YWxpZGF0aW9ucy9fcmVxdWlyZWQuanMiLCIuLi9zcmMvdmFsaWRhdGlvbnMvX3VybC5qcyIsIi4uL3NyYy9taXhpbnMvVmFsaWRhdGlvbk1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2FjY2Vzc29yLmpzIiwiLi4vc3JjL21peGlucy9UeXBlTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvdWlkLmpzIiwiLi4vc3JjL3V0aWxzL1NjaGVtYUdyYXBoLmpzIiwiLi4vc3JjL3V0aWxzL3R5cGUuanMiLCIuLi9zcmMvdXRpbHMvc2NoZW1hLmpzIiwiLi4vc3JjL3V0aWxzL3Jlc291cmNlLmpzIiwiLi4vc3JjL21peGlucy9EaXRvTWl4aW4uanMiLCIuLi9zcmMvdXRpbHMvb3B0aW9ucy5qcyIsIi4uL3NyYy9EaXRvQ29tcG9uZW50LmpzIiwiLi4vLi4vdWkvc3JjL3V0aWxzL2RhdGUuanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9DYWxlbmRhci52dWUiLCIuLi8uLi91aS9zcmMvdXRpbHMvZXZlbnQuanMiLCIuLi8uLi91aS9zcmMvdXRpbHMvdHJpZ2dlci5qcyIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1RyaWdnZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvSW5wdXRGaWVsZC52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9JY29uLnZ1ZSIsIi4uLy4uL3VpL3NyYy91dGlscy9zZWxlY3Rpb24uanMiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9EYXRlUGlja2VyLnZ1ZSIsIi4uLy4uL3VpL3NyYy9jb21wb25lbnRzL1RpbWVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvRGF0ZVRpbWVQaWNrZXIudnVlIiwiLi4vLi4vdWkvc3JjL2NvbXBvbmVudHMvUGFnaW5hdGlvbi52dWUiLCIuLi8uLi91aS9zcmMvY29tcG9uZW50cy9Td2l0Y2hCdXR0b24udnVlIiwiLi4vLi4vdWkvc3JjL3RyYW5zaXRpb25zL1RyYW5zaXRpb25IZWlnaHQudnVlIiwiLi4vLi4vdWkvc3JjL3V0aWxzL3Z1ZS5qcyIsIi4uL3NyYy9taXhpbnMvRG9tTWl4aW4uanMiLCIuLi9zcmMvRGl0b1VzZXIuanMiLCIuLi9zcmMvbWl4aW5zL1NjaGVtYVBhcmVudE1peGluLmpzIiwiLi4vc3JjL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUm91dGVNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WaWV3LnZ1ZSIsIi4uLy4uLy4uL25vZGVfbW9kdWxlcy9AdnVldXNlL2ludGVncmF0aW9ucy91c2VGb2N1c1RyYXAvY29tcG9uZW50Lm1qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9EaWFsb2cudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1Jvb3QudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b01lbnUudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RyYWlsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9IZWFkZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b05hdmlnYXRpb24udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b05vdGlmaWNhdGlvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NpZGViYXIudnVlIiwiLi4vc3JjL21peGlucy9QdWxsZG93bk1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0FjY291bnQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VsZW1lbnQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0xhYmVsLnZ1ZSIsIi4uL3NyYy9taXhpbnMvSXRlbU1peGluLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1NjaGVtYS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NoZW1hSW5saW5lZC52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvUGFuZS52dWUiLCIuLi9zcmMvdXRpbHMvbWF0aC5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9Db250YWluZXIudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1RhYnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1BhbmVsLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYW5lbHMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0J1dHRvbnMudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0VkaXRCdXR0b25zLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9DcmVhdGVCdXR0b24udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0NsaXBib2FyZC52dWUiLCIuLi9zcmMvbWl4aW5zL0xvYWRpbmdNaXhpbi5qcyIsIi4uL3NyYy9taXhpbnMvUmVzb3VyY2VNaXhpbi5qcyIsIi4uL3NyYy91dGlscy9wYXRoLmpzIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm0udnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Zvcm1OZXN0ZWQudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b0Vycm9ycy52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvU2NvcGVzLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9QYWdpbmF0aW9uLnZ1ZSIsIi4uL3NyYy9taXhpbnMvU29ydGFibGVNaXhpbi5qcyIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UcmVlSXRlbS52dWUiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvVGFibGVIZWFkLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9UYWJsZUNlbGwudnVlIiwiLi4vc3JjL2NvbXBvbmVudHMvRGl0b1VwbG9hZEZpbGUudnVlIiwiLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZVNvcnRhYmxlL2NvbXBvbmVudC5tanMiLCIuLi9zcmMvY29tcG9uZW50cy9EaXRvRHJhZ2dhYmxlLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9TcGlubmVyLnZ1ZSIsIi4uL3NyYy9jb21wb25lbnRzL0RpdG9WTm9kZS52dWUiLCIuLi9zcmMvRGl0b1R5cGVDb21wb25lbnQuanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVCdXR0b24udnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ2hlY2tib3gudnVlIiwiLi4vc3JjL21peGlucy9EYXRhTWl4aW4uanMiLCIuLi9zcmMvbWl4aW5zL09wdGlvbnNNaXhpbi5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUNoZWNrYm94ZXMudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29kZS52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb2xvci52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVDb21wb25lbnQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlQ29tcHV0ZWQudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlRGF0ZS52dWUiLCIuLi9zcmMvdXRpbHMvcm91dGUuanMiLCIuLi9zcmMvbWl4aW5zL1NvdXJjZU1peGluLmpzIiwiLi4vc3JjL3V0aWxzL2ZpbHRlci5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZUxpc3QudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTGFiZWwudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlTWFya3VwLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZU11bHRpc2VsZWN0LnZ1ZSIsIi4uL3NyYy9taXhpbnMvTnVtYmVyTWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVOdW1iZXIudnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlT2JqZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVBhbmVsLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVByb2dyZXNzLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVJhZGlvLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNlY3Rpb24udnVlIiwiLi4vc3JjL3R5cGVzL0RpdG9UeXBlU2VsZWN0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVNsaWRlci52dWUiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVTd2l0Y2gudnVlIiwiLi4vc3JjL21peGlucy9UZXh0TWl4aW4uanMiLCIuLi9zcmMvdHlwZXMvRGl0b1R5cGVUZXh0LnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVRleHRhcmVhLnZ1ZSIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVRyZWVMaXN0LnZ1ZSIsIi4uL3NyYy91dGlscy91bml0cy5qcyIsIi4uL3NyYy90eXBlcy9EaXRvVHlwZVVwbG9hZC52dWUiLCIuLi9zcmMvZGlyZWN0aXZlcy9yZXNpemUuanMiLCIuLi9zcmMvdmVyYnMuanMiLCIuLi9zcmMvRGl0b0FkbWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIFRoaXMgdXNlci1hZ2VudCBwYXJzZXIgd2FzIGxpZnRlZCBmcm9tIFBhcGVyLmpzOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3BhcGVyanMvcGFwZXIuanMvYmxvYi9jYzE1Njk2NzUwMDM1YWIwMGUwMGM2NGM3Yzk1ZGFhMmM4NWVmZTAxL3NyYy9jb3JlL1BhcGVyU2NvcGUuanMjTDc1LUwxMDdcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlVXNlckFnZW50KHVzZXJBZ2VudCA9ICcnKSB7XG4gIGNvbnN0IGFnZW50ID0ge31cbiAgLy8gVXNlIHJlcGxhY2UoKSB0byBnZXQgYWxsIG1hdGNoZXMsIGFuZCBkZWFsIHdpdGggQ2hyb21lL1dlYmtpdCBvdmVybGFwOlxuICBjb25zdCB1YSA9IHVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpXG4gIGNvbnN0IFtvc10gPVxuICAgIC8oaXBob25lfGlwYWR8bGludXg7IGFuZHJvaWR8ZGFyd2lufHdpbnxtYWN8bGludXh8ZnJlZWJzZHxzdW5vcykvLmV4ZWMoXG4gICAgICB1YVxuICAgICkgfHwgW11cbiAgY29uc3QgcGxhdGZvcm0gPSAoXG4gICAge1xuICAgICAgJ2Rhcndpbic6ICdtYWMnLFxuICAgICAgJ2lwaG9uZSc6ICdpb3MnLFxuICAgICAgJ2lwYWQnOiAnaW9zJyxcbiAgICAgICdsaW51eDsgYW5kcm9pZCc6ICdhbmRyb2lkJ1xuICAgIH1bb3NdIHx8XG4gICAgb3NcbiAgKVxuICBpZiAocGxhdGZvcm0pIHtcbiAgICBhZ2VudC5wbGF0Zm9ybSA9IHBsYXRmb3JtXG4gICAgYWdlbnRbcGxhdGZvcm1dID0gdHJ1ZVxuICB9XG4gIHVhLnJlcGxhY2UoXG4gICAgLyhvcGVyYXxjaHJvbWV8c2FmYXJpfHdlYmtpdHxmaXJlZm94fG1zaWV8dHJpZGVudClcXC8/XFxzKihbLlxcZF0rKSg/Oi4qdmVyc2lvblxcLyhbLlxcZF0rKSk/KD86Lipydjp2PyhbLlxcZF0rKSk/L2csXG4gICAgKG1hdGNoLCBicm93c2VyLCB2MSwgdjIsIHJ2KSA9PiB7XG4gICAgICAvLyBEbyBub3Qgc2V0IGFkZGl0aW9uYWwgYnJvd3NlcnMgb25jZSBjaHJvbWUgaXMgZGV0ZWN0ZWQuXG4gICAgICBpZiAoIWFnZW50LmNocm9tZSkge1xuICAgICAgICBjb25zdCB2ZXJzaW9uID0gcnYgfHwgdjIgfHwgdjFcbiAgICAgICAgaWYgKCFhZ2VudC52ZXJzaW9uIHx8IGJyb3dzZXIgIT09ICdzYWZhcmknKSB7XG4gICAgICAgICAgLy8gVXNlIHRoZSB2ZXJzaW9uIHdlIGdldCBmb3Igd2Via2l0IGZvciBTYWZhcmksIHdoaWNoIGlzIGFjdHVhbGx5XG4gICAgICAgICAgLy8gVGhlIFNhZmFyaSB2ZXJzaW9uLCBlLmcuIDE2LjBcbiAgICAgICAgICBhZ2VudC52ZXJzaW9uID0gdmVyc2lvblxuICAgICAgICAgIGFnZW50LnZlcnNpb25OdW1iZXIgPSBwYXJzZUZsb2F0KHZlcnNpb24pXG4gICAgICAgIH1cbiAgICAgICAgYWdlbnQuYnJvd3NlciA9IGJyb3dzZXJcbiAgICAgICAgYWdlbnRbYnJvd3Nlcl0gPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICApXG4gIGlmIChhZ2VudC5jaHJvbWUpIHtcbiAgICAvLyBDYW4ndCBoYXZlIGl0IGJvdGggd2F5cywgQ2hyb21lLlxuICAgIGRlbGV0ZSBhZ2VudC53ZWJraXRcbiAgfVxuICByZXR1cm4gYWdlbnRcbn1cbiIsImltcG9ydCB7IHJlYWN0aXZlIH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgcGFyc2VVc2VyQWdlbnQgfSBmcm9tICcuL3V0aWxzL2FnZW50J1xuXG5leHBvcnQgZGVmYXVsdCByZWFjdGl2ZSh7XG4gIHRpdGxlOiAnJyxcbiAgcm91dGVDb21wb25lbnRzOiBbXSxcbiAgdXNlcjogbnVsbCxcbiAgYWdlbnQ6IHBhcnNlVXNlckFnZW50KG5hdmlnYXRvci51c2VyQWdlbnQgfHwgJycpLFxuICBsb2FkQ2FjaGU6IHt9LCAvLyBTZWUgVHlwZU1peGluLmxvYWQoKVxuICBhY3RpdmVMYWJlbDogbnVsbCxcbiAgY2xpcGJvYXJkRGF0YTogbnVsbFxufSlcbiIsImltcG9ydCB7XG4gIGlzSW50ZWdlcixcbiAgcGFyc2VEYXRhUGF0aCxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHRva2VuKSB7XG4gIHJldHVybiBkYXRhUGF0aFxuICAgID8gYCR7ZGF0YVBhdGh9LyR7dG9rZW59YFxuICAgIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHBhdGg/LnBvcCgpXG4gIHJldHVybiBwYXRoXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnREYXRhUGF0aChkYXRhUGF0aCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5lc3RlZCA/IHBhcnNlUGFyZW50RGF0YVBhdGgoZGF0YVBhdGgpIDogcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZURhdGFQYXRoKHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCA9IGZhbHNlKSB7XG4gIGNvbnN0IHBhdGggPSBwYXJzZUl0ZW1EYXRhUGF0aChkYXRhUGF0aCwgbmVzdGVkKVxuICBpZiAocGF0aCkge1xuICAgIC8vIFJlbW92ZSB0aGUgcGFyZW50IHRva2VuLiBJZiBpdCdzIGEgbnVtYmVyLCB0aGVuIHdlJ3JlIGRlYWxpbmcgd2l0aCBhblxuICAgIC8vIGFycmF5IGFuZCBuZWVkIHRvIHJlbW92ZSBtb3JlIHRva2VucyB1bnRpbCB3ZSBtZWV0IHRoZSBhY3R1YWwgcGFyZW50OlxuICAgIGxldCB0b2tlblxuICAgIGRvIHtcbiAgICAgIHRva2VuID0gcGF0aC5wb3AoKVxuICAgIH0gd2hpbGUgKHRva2VuICE9IG51bGwgJiYgaXNJbnRlZ2VyKCt0b2tlbikpXG4gICAgLy8gSWYgdGhlIHJlbW92ZWQgdG9rZW4gaXMgdmFsaWQsIHdlIGNhbiBnZXQgdGhlIHBhcmVudCBkYXRhOlxuICAgIGlmICh0b2tlbiAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gcGF0aFxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyZW50SXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICByZXR1cm4gbm9ybWFsaXplRGF0YVBhdGgocGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZCkpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtKHJvb3RJdGVtLCBkYXRhUGF0aCwgbmVzdGVkID0gZmFsc2UpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlSXRlbURhdGFQYXRoKGRhdGFQYXRoLCBuZXN0ZWQpXG4gIHJldHVybiBwYXRoID8gZ2V0VmFsdWVBdERhdGFQYXRoKHJvb3RJdGVtLCBwYXRoKSA6IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcmVudEl0ZW0ocm9vdEl0ZW0sIGRhdGFQYXRoLCBuZXN0ZWQgPSBmYWxzZSkge1xuICBjb25zdCBwYXRoID0gcGFyc2VQYXJlbnRJdGVtRGF0YVBhdGgoZGF0YVBhdGgsIG5lc3RlZClcbiAgcmV0dXJuIHBhdGggPyBnZXRWYWx1ZUF0RGF0YVBhdGgocm9vdEl0ZW0sIHBhdGgpIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpIHtcbiAgY29uc3QgcGF0aCA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gIHJldHVybiBwYXRoW3BhdGgubGVuZ3RoIC0gMV1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aE5hbWUoZGF0YVBhdGgpIHtcbiAgY29uc3QgdG9rZW4gPSBnZXRMYXN0RGF0YVBhdGhUb2tlbihkYXRhUGF0aClcbiAgcmV0dXJuIHRva2VuID09IG51bGwgfHwgaXNJbnRlZ2VyKCt0b2tlbikgPyBudWxsIDogdG9rZW5cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldExhc3REYXRhUGF0aEluZGV4KGRhdGFQYXRoKSB7XG4gIGNvbnN0IHRva2VuID0gZ2V0TGFzdERhdGFQYXRoVG9rZW4oZGF0YVBhdGgpXG4gIGNvbnN0IGluZGV4ID0gdG9rZW4gPT0gbnVsbCA/IG51bGwgOiArdG9rZW5cbiAgcmV0dXJuIGlzSW50ZWdlcihpbmRleCkgPyBpbmRleCA6IG51bGxcbn1cblxubGV0IHRlbXBvcmFyeUlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIHNldFRlbXBvcmFyeUlkKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICAvLyBUZW1wb3JhcnkgaWRzIGFyZSBtYXJrZWQgd2l0aCBhICdAJyBhdCB0aGUgYmVnaW5uaW5nLlxuICBkYXRhW2lkS2V5XSA9IGBAJHsrK3RlbXBvcmFyeUlkfWBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVGVtcG9yYXJ5SWQoaWQpIHtcbiAgcmV0dXJuIC9eQC8udGVzdChpZClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzUmVmZXJlbmNlKGRhdGEsIGlkS2V5ID0gJ2lkJykge1xuICAvLyBSZXR1cm5zIHRydWUgaWYgdmFsdWUgaXMgYW4gb2JqZWN0IHRoYXQgaG9sZHMgbm90aGluZyBtb3JlIHRoYW4gYW4gaWQuXG4gIHJldHVybiBkYXRhPy5baWRLZXldICE9IG51bGwgJiYgT2JqZWN0LmtleXMoZGF0YSkubGVuZ3RoID09PSAxXG59XG4iLCJpbXBvcnQgeyB0b1JhdyB9IGZyb20gJ3Z1ZSdcbmltcG9ydCB7IGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHtcbiAgZ2V0SXRlbURhdGFQYXRoLFxuICBnZXRQYXJlbnRJdGVtRGF0YVBhdGgsXG4gIGdldFBhcmVudEl0ZW0sXG4gIGdldEl0ZW0sXG4gIGdldExhc3REYXRhUGF0aE5hbWUsXG4gIGdldExhc3REYXRhUGF0aEluZGV4XG59IGZyb20gJy4vdXRpbHMvZGF0YS5qcydcblxuY29uc3QgeyBoYXNPd25Qcm9wZXJ0eSB9ID0gT2JqZWN0LnByb3RvdHlwZVxuXG4vLyBgRGl0b0NvbnRleHRgIGluc3RhbmNlcyBhcmUgYSB0aGluIHdyYXBwZXIgYXJvdW5kIHJhdyBgY29udGV4dGAgb2JqZWN0cyxcbi8vIHdoaWNoIHRoZW1zZWx2ZXMgYWN0dWFsbHkgaW5oZXJpdCBmcm9tIHRoZSBsaW5rZWQgYGNvbXBvbmVudGAgaW5zdGFuY2UsIHNvXG4vLyB0aGF0IHRoZXkgb25seSBuZWVkIHRvIHByb3ZpZGUgdGhlIHZhbHVlcyB0aGF0IHNob3VsZCBiZSBkaWZmZXJlbnQgdGhhblxuLy8gaW4gdGhlIHVuZGVybHlpbmcgY29tcG9uZW50LiBJbiBvcmRlciB0byBub3QgZXhwb3NlIGFsbCBmaWVsZHMgZnJvbSB0aGVcbi8vIGNvbXBvbmVudCwgdGhlIHdyYXBwZXIgaXMgaW50cm9kdWNlZDpcbi8vIFVzZSBXZWFrTWFwIGZvciB0aGUgcmF3IGBjb250ZXh0YCBvYmplY3RzLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHBvbGx1dGUgdGhlXG4vLyBhY3R1YWwgYERpdG9Db250ZXh0YCBpbnN0YW5jZSB3aXRoIGl0LlxuY29uc3QgY29udGV4dHMgPSBuZXcgV2Vha01hcCgpXG5cbmZ1bmN0aW9uIGdldChjb250ZXh0LCBrZXksIGRlZmF1bHRWYWx1ZSkge1xuICBjb25zdCBvYmplY3QgPSBjb250ZXh0cy5nZXQodG9SYXcoY29udGV4dCkpXG4gIGNvbnN0IHZhbHVlID0ga2V5IGluIG9iamVjdCA/IG9iamVjdFtrZXldIDogdW5kZWZpbmVkXG4gIC8vIElmIGBvYmplY3RgIGV4cGxpY2l0bHkgc2V0cyB0aGUga2V5IHRvIGB1bmRlZmluZWRgLCByZXR1cm4gaXQuXG4gIHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkIHx8IGhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBrZXkpXG4gICAgPyB2YWx1ZVxuICAgIDogaXNGdW5jdGlvbihkZWZhdWx0VmFsdWUpXG4gICAgICA/IGRlZmF1bHRWYWx1ZSgpXG4gICAgICA6IGRlZmF1bHRWYWx1ZVxufVxuXG5mdW5jdGlvbiBzZXQoY29udGV4dCwga2V5LCB2YWx1ZSkge1xuICBjb250ZXh0cy5nZXQodG9SYXcoY29udGV4dCkpW2tleV0gPSB2YWx1ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEaXRvQ29udGV4dCB7XG4gIGNvbnN0cnVjdG9yKGNvbXBvbmVudCwgY29udGV4dCkge1xuICAgIC8vIFVzZSB0aGUgcHJvdmlkZWQgcGFyYW1zIG9iamVjdCAvIGZ1bmN0aW9uLCBvciBjcmVhdGUgYSBuZXcgb25lOlxuICAgIGNvbnRleHQgPSBjb250ZXh0XG4gICAgICA/IGlzRnVuY3Rpb24oY29udGV4dClcbiAgICAgICAgPyBjb250ZXh0KClcbiAgICAgICAgOiB7IC4uLmNvbnRleHQgfVxuICAgICAgOiB7fVxuICAgIC8vIElmIG5vdCBleHBsaWNpdGx5IHNldCAodG8gZmFsc2UpLCBkZWZhdWx0IHRvIHRydWUgc28gd2UgZG9uJ3QgZmFsbCBiYWNrXG4gICAgLy8gdG8gYGNvbXBvbmVudGAgZm9yIGl0cyB2YWx1ZS5cbiAgICBjb250ZXh0Lm5lc3RlZCA/Pz0gdHJ1ZVxuICAgIGNvbnRleHQuY29tcG9uZW50ID0gY29tcG9uZW50XG4gICAgLy8gSGF2ZSBgb2JqZWN0YCBpbmhlcml0IGZyb20gdGhlIGBjb21wb25lbnRgIGluc3RhbmNlLCBzbyBpdCBjYW4gb3ZlcnJpZGVcbiAgICAvLyBpdHMgdmFsdWVzIGFuZCBzdGlsbCByZXRyaWV2ZSBmcm9tIGl0LCBhbmQgYXNzb2NpYXRlIGl0IHdpdGggYHRoaXNgXG4gICAgLy8gdGhyb3VnaCBgY29udGV4dHNgIG1hcDpcbiAgICBjb25zdCBvYmplY3QgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YoY29udGV4dCwgY29tcG9uZW50KVxuICAgIC8vIE5vIG5lZWQgZm9yIGB0b1Jhdyh0aGlzKWAgaGVyZSBhcyBpdCdzIGFsd2F5cyByYXcgaW5zaWRlIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICBjb250ZXh0cy5zZXQodGhpcywgb2JqZWN0KVxuICB9XG5cbiAgc3RhdGljIGdldChjb21wb25lbnQsIGNvbnRleHQpIHtcbiAgICByZXR1cm4gY29udGV4dCBpbnN0YW5jZW9mIERpdG9Db250ZXh0XG4gICAgICA/IGNvbnRleHRcbiAgICAgIDogbmV3IERpdG9Db250ZXh0KGNvbXBvbmVudCwgY29udGV4dClcbiAgfVxuXG4gIC8vIGBuZXN0ZWRgIGlzIGB0cnVlYCB3aGVuIHRoZSBkYXRhLXBhdGggcG9pbnRzIGEgdmFsdWUgaW5zaWRlIGFuIGl0ZW0sIGFuZFxuICAvLyBgZmFsc2VgIHdoZW4gaXQgcG9pbnRzIHRvIHRoZSBpdGVtIGl0c2VsZi5cbiAgZ2V0IG5lc3RlZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICduZXN0ZWQnLCB0cnVlKVxuICB9XG5cbiAgZ2V0IHNjaGVtYSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzY2hlbWEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZhbHVlJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgZ2V0IGRhdGFQYXRoKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2RhdGFQYXRoJywgJycpXG4gIH1cblxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICduYW1lJywgKCkgPT4gZ2V0TGFzdERhdGFQYXRoTmFtZSh0aGlzLmRhdGFQYXRoKSlcbiAgfVxuXG4gIGdldCBpbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdpbmRleCcsICgpID0+IGdldExhc3REYXRhUGF0aEluZGV4KHRoaXMuZGF0YVBhdGgpKVxuICB9XG5cbiAgZ2V0IGl0ZW1EYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0SXRlbURhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICB9XG5cbiAgZ2V0IHBhcmVudEl0ZW1EYXRhUGF0aCgpIHtcbiAgICByZXR1cm4gZ2V0UGFyZW50SXRlbURhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHRoaXMubmVzdGVkKVxuICB9XG5cbiAgZ2V0IGl0ZW1JbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0TGFzdERhdGFQYXRoSW5kZXgodGhpcy5pdGVtRGF0YVBhdGgpXG4gIH1cblxuICBnZXQgcGFyZW50SXRlbUluZGV4KCkge1xuICAgIHJldHVybiBnZXRMYXN0RGF0YVBhdGhJbmRleCh0aGlzLnBhcmVudEl0ZW1EYXRhUGF0aClcbiAgfVxuXG4gIC8vIE5PVEU6IFdoaWxlIGludGVybmFsbHksIHdlIHNwZWFrIG9mIGBkYXRhYCwgaW4gdGhlIEFQSSBzdXJmYWNlIHRoZVxuICAvLyB0ZXJtIGBpdGVtYCBpcyB1c2VkIGZvciB0aGUgZGF0YSB0aGF0IHJlbGF0ZXMgdG8gZWRpdGluZyBvYmplY3RzOlxuICAvLyBJZiBgZGF0YWAgaXNuJ3QgcHJvdmlkZWQsIHdlIGNhbiBkZXRlcm1pbmUgaXQgZnJvbSByb290RGF0YSAmIGRhdGFQYXRoOlxuICBnZXQgaXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdkYXRhJywgKCkgPT5cbiAgICAgIGdldEl0ZW0odGhpcy5yb290SXRlbSwgdGhpcy5kYXRhUGF0aCwgdGhpcy5uZXN0ZWQpXG4gICAgKVxuICB9XG5cbiAgLy8gTk9URTogYHBhcmVudEl0ZW1gIGlzbid0IHRoZSBjbG9zZXN0IGRhdGEgcGFyZW50IHRvIGBpdGVtYCwgaXQncyB0aGVcbiAgLy8gY2xvc2VzdCBwYXJlbnQgdGhhdCBpc24ndCBhbiBhcnJheSwgZS5nLiBmb3IgcmVsYXRpb25zIG9yIG5lc3RlZCBKU09OIGRhdGEuXG4gIC8vIFRoaXMgaXMgd2h5IHRoZSB0ZXJtIGBpdGVtYCB3YXMgY2hvc2VuIG92ZXIgYGRhdGFgLCBlLmcuIFZTIHRoZSB1c2Ugb2ZcbiAgLy8gYHBhcmVudERhdGFgIGluIHNlcnZlci1zaWRlZCB2YWxpZGF0aW9uLCB3aGljaCBpcyB0aGUgY2xvc2VzdCBwYXJlbnQuIElmXG4gIC8vIG5lZWRlZCwgd2UgY291bGQgZXhwb3NlIHRoaXMgZGF0YSBoZXJlIHRvbywgYXMgd2UgY2FuIGRvIGFsbCBzb3J0cyBvZiBkYXRhXG4gIC8vIHByb2Nlc3Npbmcgd2l0aCBgcm9vdERhdGFgIGFuZCBgZGF0YVBhdGhgLlxuICBnZXQgcGFyZW50SXRlbSgpIHtcbiAgICBjb25zdCBpdGVtID0gKFxuICAgICAgZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3RJdGVtLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZCkgfHxcbiAgICAgIG51bGxcbiAgICApXG4gICAgcmV0dXJuIGl0ZW0gIT09IHRoaXMuaXRlbSA/IGl0ZW0gOiBudWxsXG4gIH1cblxuICBnZXQgcm9vdEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncm9vdERhdGEnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncHJvY2Vzc2VkRGF0YScsIG51bGwpXG4gIH1cblxuICBnZXQgY2xpcGJvYXJkSXRlbSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdjbGlwYm9hcmREYXRhJywgbnVsbClcbiAgfVxuXG4gIGdldCB1c2VyKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3VzZXInLCBudWxsKVxuICB9XG5cbiAgZ2V0IGFwaSgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdhcGknLCBudWxsKVxuICB9XG5cbiAgZ2V0IHZpZXdzKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ3ZpZXdzJywgbnVsbClcbiAgfVxuXG4gIGdldCBmbGF0dGVuZWRWaWV3cygpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdmbGF0dGVuZWRWaWV3cycsIG51bGwpXG4gIH1cblxuICBnZXQgaXRlbUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2l0ZW1MYWJlbCcsIG51bGwpXG4gIH1cblxuICBnZXQgZm9ybUxhYmVsKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2Zvcm1MYWJlbCcsIG51bGwpXG4gIH1cblxuICAvLyBOT1RFOiBMaWtlICdvcHRpb25zJywgdGhlIGFzc29jaWF0ZWQgY29tcG9uZW50IGRvZXNuJ3QgYWx3YXlzIGV4aXN0LCBlLmcuXG4gIC8vIGluIG5lc3RlZCBmb3JtcyBkdXJpbmcgYHByb2Nlc3NEYXRhKClgLiBCdXQgYHNjaGVtYWAgaXMgZ3VhcmFudGVlZCB0b1xuICAvLyBhbHdheXMgYmUgYXZhaWxhYmxlLlxuICBnZXQgY29tcG9uZW50KCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ2NvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICAvLyBUT0RPOiBBZGQgYGNvbXBvbmVudFNjaGVtYWAgZ2V0dGVyIGZvciB0aGUgc2NoZW1hIG9mIHRoZSBjdXJyZW50IGNvbXBvbmVudCxcbiAgLy8gZXZlbiB3aGVuIHRoZSBjb21wb25lbnQgaXNuJ3QgYWN0dWFsbHkgaW5zdGFudGlhdGVkLiBDb25zaWRlciBhZGRpbmdcbiAgLy8gYHNvdXJjZVNjaGVtYWAgYXMgd2VsbD9cblxuICAvLyBUT0RPOiBGaXggdW5jbGVhciBuYW1pbmc6IFdoaWNoIHNjaGVtYSBpcyB0aGlzLCB0aGF0IG9mIHRoZSBjb21wb25lbnQgb3Igb2ZcbiAgLy8gaXRzIHBhcmVudD8gSXNuJ3QgZXhwb3NpbmcgYGZvcm1Db21wb25lbnRgIGFuZCBgdmlld0NvbXBvbmVudGAgZW5vdWdoLCBvbmNlXG4gIC8vIHdlIG9mZmVyIGFjY2VzcyB0byB0aGVpciBjb21wb25lbnRzIHRoZXJlIHRocm91Z2ggYGdldENvbXBvbmVudCgpYCAmIGNvLiBvblxuICAvLyBgRGl0b01peGluYCBwZXJoYXBzPyAgQWxzbywgdGhlcmUgY291bGQgYmUgYSBgdGFiQ29tcG9uZW50YCBnZXR0ZXIgZm9yXG4gIC8vIHNjaGVtYXMgaW4gdGFicz9cbiAgZ2V0IHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzY2hlbWFDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IGZvcm1Db21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZm9ybUNvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgdmlld0NvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd2aWV3Q29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBkaWFsb2dDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAnZGlhbG9nQ29tcG9uZW50JywgbnVsbClcbiAgfVxuXG4gIGdldCBwYW5lbENvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdwYW5lbENvbXBvbmVudCcsIG51bGwpXG4gIH1cblxuICBnZXQgcmVzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncmVzb3VyY2VDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgZ2V0IHNvdXJjZUNvbXBvbmVudCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdzb3VyY2VDb21wb25lbnQnLCBudWxsKVxuICB9XG5cbiAgLy8gV2hlbiB1c2VkIGluIE9wdGlvbnNNaXhpbiBmb3IgYHNjaGVtYS5vcHRpb25zLnZhbHVlKClgLFxuICAvLyBgc2NoZW1hLm9wdGlvbnMubGFiZWwoKWAgYW5kICBgc2NoZW1hLnNlYXJjaC5maWx0ZXIoKWAgY2FsbGJhY2tzOlxuICBnZXQgb3B0aW9uKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wdGlvbicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiBnZXQodGhpcywgJ29wdGlvbnMnLCB1bmRlZmluZWQpXG4gIH1cblxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdvcGVuJywgdW5kZWZpbmVkKVxuICB9XG5cbiAgLy8gVE9ETzogUmVuYW1lIHRoaXMgdG8gYHNlYXJjaFRlcm1gIG9yIGBzZWFyY2hRdWVyeWAsIHRvIHBlcmhhcHMgZnJlZSBgcXVlcnlgXG4gIC8vIGZvciB0aGUgYWN0dWFsIGByZXNvdXJjZUNvbXBvbmVudC5xdWVyeWAgb2JqZWN0P1xuICBnZXQgcXVlcnkoKSB7XG4gICAgcmV0dXJuIGdldCh0aGlzLCAncXVlcnknLCB1bmRlZmluZWQpXG4gIH1cblxuICAvLyBUaGUgZXJyb3IgZmllbGQgaXMgb25seSBwb3B1bGF0ZWQgaW4gdGhlIGNvbnRleHQgb2YgYnV0dG9ucyB0aGF0IHNlbmRcbiAgLy8gcmVxdWVzdHMsIHNlZSBgUmVzb3VyY2VNaXhpbi5lbWl0QnV0dG9uRXZlbnQoKWA6XG4gIGdldCBlcnJvcigpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICdlcnJvcicsIHVuZGVmaW5lZClcbiAgfVxuXG4gIGdldCB3YXNOb3RpZmllZCgpIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIGZhbHNlKVxuICB9XG5cbiAgLy8gSGVscGVyIE1ldGhvZHNcblxuICBnZXQgcmVxdWVzdCgpIHtcbiAgICByZXR1cm4gb3B0aW9ucyA9PiB0aGlzLmNvbXBvbmVudC5yZXF1ZXN0KG9wdGlvbnMpXG4gIH1cblxuICBnZXQgZm9ybWF0KCkge1xuICAgIHJldHVybiAodmFsdWUsIG9wdGlvbnMpID0+IHRoaXMuY29tcG9uZW50LmZvcm1hdCh2YWx1ZSwgb3B0aW9ucylcbiAgfVxuXG4gIGdldCBuYXZpZ2F0ZSgpIHtcbiAgICByZXR1cm4gbG9jYXRpb24gPT4gdGhpcy5jb21wb25lbnQubmF2aWdhdGUobG9jYXRpb24pXG4gIH1cblxuICBnZXQgZG93bmxvYWQoKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMgPT4gdGhpcy5jb21wb25lbnQuZG93bmxvYWQob3B0aW9ucylcbiAgfVxuXG4gIGdldCBnZXRSZXNvdXJjZVVybCgpIHtcbiAgICByZXR1cm4gcmVzb3VyY2UgPT4gdGhpcy5jb21wb25lbnQuZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpXG4gIH1cblxuICBnZXQgbm90aWZ5KCkge1xuICAgIHJldHVybiBvcHRpb25zID0+IHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm5vdGlmeShvcHRpb25zKVxuICAgICAgc2V0KHRoaXMsICd3YXNOb3RpZmllZCcsIHRydWUpXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyBpc0FycmF5LCBpc1BsYWluT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdGVuZXJzOiBudWxsXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICAvLyBBc3luYyBvbigpIGFuZCAkb2ZmKCkgbWV0aG9kcyB0aGF0IGtlZXAgdHJhY2sgb2YgdGhlIGV2ZW50cyBhZGRlZCAvXG4gICAgLy8gcmVtb3ZlZCwgYW5kIHByb3ZpZGUgYSBoYXNMaXN0ZW5lcnMoKSBtZXRob2QgdGhhdCBjaGVja3MgaWYgdGhlIGNvbXBvbmVudFxuICAgIC8vIGhhcyBsaXN0ZW5lcnMgZm9yIGEgZ2l2ZW4gZXZlbnQuXG5cbiAgICAvLyBBbHNvIGFkZHMgcHJvcGVyIGhhbmRsaW5nIG9mIGFzeW5jIGV2ZW50cywgaW5jbHVkaW5nIGEgYXN5bmMgZW1pdCgpIHRoYXRcbiAgICAvLyBkZWFscyB3aXRoIHByb3BlciBldmVudCBxdWV1ZWluZy5cbiAgICBvbihldmVudCwgY2FsbGJhY2spIHtcbiAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICBmb3IgKGNvbnN0IGV2IG9mIGV2ZW50KSB7XG4gICAgICAgICAgdGhpcy5vbihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9uKGtleSwgZXZlbnRba2V5XSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgbGlzdGVuZXJzID0gKHRoaXMubGlzdGVuZXJzIHx8PSBPYmplY3QuY3JlYXRlKG51bGwpKVxuICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gKGxpc3RlbmVyc1tldmVudF0gfHw9IHtcbiAgICAgICAgICBjYWxsYmFja3M6IFtdLFxuICAgICAgICAgIHF1ZXVlOiBbXVxuICAgICAgICB9KVxuICAgICAgICBjYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIG9uY2UoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBvbiA9ICguLi5hcmdzKSA9PiB7XG4gICAgICAgIHRoaXMub2ZmKGV2ZW50LCBvbilcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpXG4gICAgICB9XG4gICAgICBvbi5jYWxsYmFjayA9IGNhbGxiYWNrIC8vIE5lZWRlZCBmb3IgYG9mZigpYCwgc2VlIGJlbG93LlxuICAgICAgcmV0dXJuIHRoaXMub24oZXZlbnQsIG9uKVxuICAgIH0sXG5cbiAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoIWFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgICAgLy8gUmVtb3ZlIGFsbCBldmVudHNcbiAgICAgICAgZGVsZXRlIHRoaXMubGlzdGVuZXJzXG4gICAgICB9IGVsc2UgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihldiwgY2FsbGJhY2spXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNQbGFpbk9iamVjdChldmVudCkpIHtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZXZlbnQpIHtcbiAgICAgICAgICB0aGlzLm9mZihrZXksIGV2ZW50W2tleV0pXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlbW92ZSBzcGVjaWZpYyBldmVudFxuICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMubGlzdGVuZXJzPy5bZXZlbnRdXG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIGlmICghY2FsbGJhY2spIHtcbiAgICAgICAgICAgIC8vIFJlbW92ZSBhbGwgaGFuZGxlcnMgZm9yIHRoaXMgZXZlbnRcbiAgICAgICAgICAgIGRlbGV0ZSB0aGlzLmxpc3RlbmVyc1tldmVudF1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIGEgc3BlY2lmaWMgaGFuZGxlcjogZmluZCB0aGUgaW5kZXggaW4gY2FsbGJhY2tzXG4gICAgICAgICAgICBjb25zdCB7IGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY2FsbGJhY2tzLmZpbmRJbmRleChcbiAgICAgICAgICAgICAgLy8gTWF0Y2ggYGNiLmNhbGxiYWNrYCBhbHNvLCBhcyB1c2VkIGJ5IGBvbmNlKClgLCBzZWUgIGFib3ZlOlxuICAgICAgICAgICAgICBjYiA9PiBjYiA9PT0gY2FsbGJhY2sgfHwgY2IuY2FsbGJhY2sgPT09IGNhbGxiYWNrXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBlbWl0KGV2ZW50LCAuLi5hcmdzKSB7XG4gICAgICAvLyBPbmx5IHF1ZXVlIGV2ZW50IGlmIHRoZXJlIGFjdHVhbGx5IGFyZSBsaXN0ZW5lcnMgZm9yIGl0LlxuICAgICAgY29uc3QgZW50cnkgPSB0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIGNvbnN0IHsgcXVldWUsIGNhbGxiYWNrcyB9ID0gZW50cnlcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICAgIGNvbnN0IG5leHQgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAvLyBFbWl0IHRoZSBuZXh0IGV2ZW50IGluIHRoZSBxdWV1ZSB3aXRoIGl0cyBwYXJhbXMuXG4gICAgICAgICAgICAvLyBOb3RlIHRoYXQgaXQgb25seSBnZXRzIHJlbW92ZWQgb25jZSBgbmV4dCgpYCBpcyBjYWxsZWQuXG4gICAgICAgICAgICBjb25zdCBlbnRyeSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgICAgICBsZXQgcmVzdWx0XG4gICAgICAgICAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgY2FsbGJhY2tzKSB7XG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGNhbGxiYWNrLmFwcGx5KHRoaXMsIGVudHJ5LmFyZ3MpXG4gICAgICAgICAgICAgICAgICBpZiAocmVzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gcmVzXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgIGBFcnJvciBkdXJpbmcgZXZlbnQgaGFuZGxlciBmb3IgJyR7ZXZlbnR9JzpgLFxuICAgICAgICAgICAgICAgICAgICBlcnJvclxuICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBSZXNvbHZlIHRoZSBwcm9taXNlIHRoYXQgd2FzIGFkZGVkIHRvIHRoZSBxdWV1ZSBmb3IgdGhlIGV2ZW50XG4gICAgICAgICAgICAgIC8vIHRoYXQgd2FzIGp1c3QgY29tcGxldGVkIGJ5IHRoZSB3cmFwcGVyIHRoYXQgY2FsbGVkIGBuZXh0KClgXG4gICAgICAgICAgICAgIGVudHJ5LnJlc29sdmUocmVzdWx0KVxuICAgICAgICAgICAgICBuZXh0KClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcXVldWUucHVzaCh7IGFyZ3MsIHJlc29sdmUgfSlcbiAgICAgICAgICAvLyBGb3IgbmV3IHF1ZXVlcyAoPSBvbmx5IG9uZSBlbnRyeSkgZW1pdCB0aGUgZmlyc3QgZXZlbnQgaW1tZWRpYXRlbHksXG4gICAgICAgICAgLy8gdG8gZ2V0IHRoZSBxdWV1ZSBydW5uaW5nLlxuICAgICAgICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIG5leHQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQ2hlY2tzIGlmIHRoZSBjb21wb25lbnQgaGFzIGxpc3RlbmVycyBmb3IgYSBnaXZlbiBldmVudCB0eXBlOlxuICAgIGhhc0xpc3RlbmVycyhldmVudCkge1xuICAgICAgaWYgKGlzQXJyYXkoZXZlbnQpKSB7XG4gICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICBpZiAoIXRoaXMuaGFzTGlzdGVuZXJzKGV2KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBldmVudC5sZW5ndGggPiAwXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gISF0aGlzLmxpc3RlbmVycz8uW2V2ZW50XVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWxlZ2F0ZShldmVudCwgdGFyZ2V0KSB7XG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGlmIChpc0FycmF5KGV2ZW50KSkge1xuICAgICAgICAgIGZvciAoY29uc3QgZXYgb2YgZXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuZGVsZWdhdGUoZXYsIHRhcmdldClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5vbihldmVudCwgKC4uLmFyZ3MpID0+IHRhcmdldC5lbWl0KGV2ZW50LCAuLi5hcmdzKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7IGlzQ3JlZGl0Q2FyZCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBjcmVkaXRjYXJkID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNDcmVkaXRDYXJkKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIGludmFsaWQnXG59XG4iLCJleHBvcnQgY29uc3QgZGVjaW1hbHMgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIGRlY2ltYWxzKSA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSBkZWNpbWFscyA9PT0gJyonID8gJysnIDogYHsxLCR7ZGVjaW1hbHN9fWBcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXlstK10/XFxcXGQqKFxcXFwuXFxcXGQke21hdGNofSk/JGApLnRlc3QodmFsdWUpXG4gIH0sXG5cbiAgbWVzc2FnZTogKHZhbHVlLCBkZWNpbWFscykgPT5cbiAgICBgbXVzdCBiZSBudW1lcmljIGFuZCBtYXkgY29udGFpbiAke1xuICAgICAgIWRlY2ltYWxzIHx8IGRlY2ltYWxzID09PSAnKicgPyAnJyA6IGRlY2ltYWxzXG4gICAgfSBkZWNpbWFsIHBvaW50c2Bcbn1cbiIsImltcG9ydCB7IGlzRG9tYWluIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGNvbnN0IGRvbWFpbiA9IHtcbiAgdmFsaWRhdGU6IHZhbHVlID0+IGlzRG9tYWluKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGRvbWFpbidcbn1cbiIsImltcG9ydCB7IGlzRW1haWwgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgZW1haWwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0VtYWlsKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgYSB2YWxpZCBlbWFpbCdcbn1cbiIsImltcG9ydCB7IGlzSG9zdG5hbWUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgY29uc3QgaG9zdG5hbWUgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc0hvc3RuYW1lKHZhbHVlKSxcbiAgbWVzc2FnZTogJ2lzIG5vdCBhIGhvc3QgbmFtZSdcbn1cbiIsImltcG9ydCB7IGlzSW50ZWdlciB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCBpbnRlZ2VyID0ge1xuICB2YWxpZGF0ZTogdmFsdWUgPT4gaXNJbnRlZ2VyKHZhbHVlKSxcbiAgbWVzc2FnZTogJ211c3QgYmUgd2hvbGUgbnVtYmVyJ1xufVxuIiwiZXhwb3J0IGNvbnN0IG1heCA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWF4KSA9PiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIG1heCkge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21heH0gb3IgbGVzc2BcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IG1pbiA9IHtcbiAgdmFsaWRhdGU6ICh2YWx1ZSwgbWluKSA9PiB2YWx1ZSA+PSBtaW4sXG4gIG1lc3NhZ2UodmFsdWUsIG1pbikge1xuICAgIHJldHVybiBgbXVzdCBiZSAke21pbn0gb3IgbW9yZWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHBhc3N3b3JkID0ge1xuICAvLyBBbGxvdyBhbnkgdmFsdWUuIEZvciBub3cgdGhpcyBpcyBvbmx5IHVzZWQgYXMgYSBtYXJrZXIsIHRvIGFsbG93IHRoZVxuICAvLyByZXF1aXJlZCB2YWxpZGF0aW9uIHRvIGhhbmRsZSB1bmNoYW5nZWQgcGFzc3dvcmRzIHNlcGFyYXRlbHkuXG4gIHZhbGlkYXRlOiAoKSA9PiB0cnVlXG59XG4iLCJleHBvcnQgY29uc3QgcmFuZ2UgPSB7XG4gIHZhbGlkYXRlOiAodmFsdWUsIFttaW4sIG1heF0pID0+IHZhbHVlID49IG1pbiAmJiB2YWx1ZSA8PSBtYXgsXG4gIG1lc3NhZ2UodmFsdWUsIFttaW4sIG1heF0pIHtcbiAgICByZXR1cm4gYG11c3QgYmUgYmV0d2VlbiAke21pbn0gYW5kICR7bWF4fWBcbiAgfVxufVxuIiwiZXhwb3J0IGNvbnN0IHJlcXVpcmVkID0ge1xuICB2YWxpZGF0ZTogKHZhbHVlLCBzZXR0aW5ncywgeyBwYXNzd29yZCB9KSA9PiAoXG4gICAgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUgIT09ICcnKSB8fFxuICAgIC8vIFBhc3N3b3JkIGZpZWxkcyB1c2UgYHVuZGVmaW5lZGAgYXMgb3Bwb3NlZCB0byBgbnVsbGAgd2hlbiB0aGV5J3JlIHNldFxuICAgIC8vIGJ1dCB1bmNoYW5nZWQsIGFsbG93IHRoaXMgdG8gcGFzcyB0aHJvdWdoOlxuICAgIChwYXNzd29yZCAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICApLFxuICBtZXNzYWdlOiAnaXMgcmVxdWlyZWQnLFxuICBudWxsaXNoOiB0cnVlXG59XG4iLCJpbXBvcnQgeyBpc1VybCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBjb25zdCB1cmwgPSB7XG4gIHZhbGlkYXRlOiB2YWx1ZSA9PiBpc1VybCh2YWx1ZSksXG4gIG1lc3NhZ2U6ICdpcyBub3QgYSB2YWxpZCBVUkwnXG59XG4iLCJpbXBvcnQgeyBpc0Z1bmN0aW9uIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCAqIGFzIHZhbGlkYXRpb25zIGZyb20gJy4uL3ZhbGlkYXRpb25zL2luZGV4LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBlbWl0czogWydlcnJvcnMnXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc1RvdWNoZWQ6IGZhbHNlLFxuICAgICAgaXNEaXJ0eTogZmFsc2UsXG4gICAgICBpc1ZhbGlkYXRlZDogZmFsc2UsXG4gICAgICBpc1ZhbGlkOiBmYWxzZSxcbiAgICAgIGVycm9yczogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGhhc0Vycm9ycygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuZXJyb3JzXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLmlzVG91Y2hlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzRGlydHkgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IGZhbHNlXG4gICAgICB0aGlzLmlzVmFsaWQgPSBmYWxzZVxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIHZhbGlkYXRlKG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGxldCBpc1ZhbGlkID0gdHJ1ZVxuICAgICAgaWYgKG5vdGlmeSkge1xuICAgICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgdmFsdWUgfSA9IHRoaXNcbiAgICAgIC8vIGNvbnNvbGUubG9nKCd2YWxpZGF0ZScsIHRoaXMuZGF0YVBhdGgsIHZhbHVlLCB0aGlzLnZhbGlkYXRpb25zKVxuICAgICAgZm9yIChjb25zdCBbcnVsZSwgc2V0dGluZ10gb2YgT2JqZWN0LmVudHJpZXModGhpcy52YWxpZGF0aW9ucykpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uYW1lc3BhY2VcbiAgICAgICAgY29uc3QgdmFsaWRhdG9yID0gdmFsaWRhdGlvbnNbcnVsZV1cbiAgICAgICAgaWYgKHZhbGlkYXRvciAmJiAodmFsaWRhdG9yLm51bGxpc2ggfHwgdmFsdWUgIT0gbnVsbCkpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbGlkYXRlLCBtZXNzYWdlIH0gPSB2YWxpZGF0b3JcbiAgICAgICAgICBpZiAoIXZhbGlkYXRlKHZhbHVlLCBzZXR0aW5nLCB0aGlzLnZhbGlkYXRpb25zKSkge1xuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNGdW5jdGlvbihtZXNzYWdlKVxuICAgICAgICAgICAgICAgID8gbWVzc2FnZSh2YWx1ZSwgc2V0dGluZywgdGhpcylcbiAgICAgICAgICAgICAgICA6IG1lc3NhZ2VcbiAgICAgICAgICAgICAgdGhpcy5hZGRFcnJvcihlcnJvciwgdHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChub3RpZnkpIHtcbiAgICAgICAgdGhpcy5pc1ZhbGlkYXRlZCA9IHRydWVcbiAgICAgICAgdGhpcy5pc1ZhbGlkID0gaXNWYWxpZFxuICAgICAgfVxuICAgICAgcmV0dXJuIGlzVmFsaWRcbiAgICB9LFxuXG4gICAgdmVyaWZ5KCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGUoZmFsc2UpXG4gICAgfSxcblxuICAgIG1hcmtUb3VjaGVkKCkge1xuICAgICAgdGhpcy5pc1RvdWNoZWQgPSB0cnVlXG4gICAgICAvLyBDbGVhciBjdXJyZW50bHkgZGlzcGxheWVkIGVycm9ycyB3aGVuIGZvY3VzaW5nIGlucHV0LlxuICAgICAgdGhpcy5jbGVhckVycm9ycygpXG4gICAgfSxcblxuICAgIG1hcmtEaXJ0eSgpIHtcbiAgICAgIHRoaXMuaXNEaXJ0eSA9IHRydWVcbiAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgPSBmYWxzZVxuICAgICAgdGhpcy5pc1ZhbGlkID0gZmFsc2VcbiAgICAgIC8vIENsZWFyIGN1cnJlbnRseSBkaXNwbGF5ZWQgZXJyb3JzIG9uIG5ldyBpbnB1dC5cbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBhZGRFcnJvcihlcnJvciwgYWRkTGFiZWwgPSBmYWxzZSkge1xuICAgICAgdGhpcy5lcnJvcnMgfHw9IFtdXG4gICAgICBpZiAoYWRkTGFiZWwpIHtcbiAgICAgICAgY29uc3QgbGFiZWwgPSB0aGlzLmxhYmVsIHx8IHRoaXMucGxhY2Vob2xkZXIgfHwgdGhpcy5uYW1lXG4gICAgICAgIGVycm9yID0gYFRoZSAke2xhYmVsfSBmaWVsZCAke2Vycm9yfS5gXG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGVycm9yKVxuICAgICAgdGhpcy4kZW1pdCgnZXJyb3JzJywgdGhpcy5lcnJvcnMpXG4gICAgfSxcblxuICAgIHNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgZm9jdXMpIHtcbiAgICAgIC8vIENvbnZlcnQgZnJvbSBBSlYgZXJyb3JzIG9iamVjdHMgdG8gYW4gYXJyYXkgb2YgZXJyb3IgbWVzc2FnZXNcbiAgICAgIHRoaXMuZXJyb3JzID0gW11cbiAgICAgIGZvciAoY29uc3QgeyBtZXNzYWdlIH0gb2YgZXJyb3JzKSB7XG4gICAgICAgIHRoaXMuYWRkRXJyb3IobWVzc2FnZSwgdHJ1ZSlcbiAgICAgIH1cbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLnNjcm9sbEludG9WaWV3KClcbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfSxcblxuICAgIGdldEVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLmVycm9ycyA/IFsuLi50aGlzLmVycm9yc10gOiBudWxsXG4gICAgfSxcblxuICAgIGNsZWFyRXJyb3JzKCkge1xuICAgICAgdGhpcy5lcnJvcnMgPSBudWxsXG4gICAgICB0aGlzLiRlbWl0KCdlcnJvcnMnLCB0aGlzLmVycm9ycylcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzRnVuY3Rpb24sXG4gIGlzU3RyaW5nLFxuICBwYXJzZURhdGFQYXRoLFxuICBub3JtYWxpemVEYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hQWNjZXNzb3IoXG4gIGtleU9yRGF0YVBhdGgsXG4gIHsgdHlwZSwgZGVmYXVsdDogZGVmLCBnZXQsIHNldCwgY2FsbGJhY2sgPSB0cnVlIH0gPSB7fVxuKSB7XG4gIC8vIGBrZXlPckRhdGFQYXRoYCBjYW4gYmUgYSBzaW1wbGUgcHJvcGVydHkga2V5LFxuICAvLyBvciBhIGRhdGEtcGF0aCBpbnRvIHN1Yi1wcm9wZXJ0aWVzLCBib3RoIGluIGFycmF5IG9yIHN0cmluZyBmb3JtYXQuXG4gIGlmIChpc1N0cmluZyhrZXlPckRhdGFQYXRoKSAmJiBrZXlPckRhdGFQYXRoLmluY2x1ZGVzKCcuJykpIHtcbiAgICBrZXlPckRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChrZXlPckRhdGFQYXRoKVxuICB9XG4gIC8vIFVzZSB0aGUgbm9ybWFsaXplZCBkYXRhIHBhdGggZm9yIHRoZSBoYW5kbGluZyBvdmVycmlkZXNcbiAgY29uc3QgbmFtZSA9IG5vcm1hbGl6ZURhdGFQYXRoKGtleU9yRGF0YVBhdGgpXG4gIHJldHVybiB7XG4gICAgZ2V0KCkge1xuICAgICAgLy8gT25seSBkZXRlcm1pbmUgc2NoZW1hIHZhbHVlIGlmIHdlIGhhdmUgbm8gZ2V0dGVyLCBvciB0aGUgZ2V0dGVyXG4gICAgICAvLyB3YW50cyB0byByZWNlaXZlIHRoZSB2YWx1ZSBhbmQgcHJvY2VzcyBpdCBmdXJ0aGVyOlxuICAgICAgY29uc3QgdmFsdWUgPVxuICAgICAgICAhZ2V0IHx8IGdldC5sZW5ndGggPiAwXG4gICAgICAgICAgPyAvLyBOT1RFOiBCZWNhdXNlIGBzY2hlbWFgIG9iamVjdHMgYXJlIHJldHJpZXZlZCBmcm9tIGBtZXRhYCwgdGhleVxuICAgICAgICAgICAgLy8gZG9uJ3Qgc2VlbSB0byBiZSByZWFjdGl2ZS4gVG8gYWxsb3cgY2hhbmdlZCBpbiBgc2NoZW1hYCB2YWx1ZXMsXG4gICAgICAgICAgICAvLyBgc2V0KClgIHN0b3JlcyBjaGFuZ2VkIHZhbHVlcyBpbiB0aGUgc2VwYXJhdGUgYG92ZXJyaWRlc2Agb2JqZWN0LlxuICAgICAgICAgICAgdGhpcy5vdmVycmlkZXMgJiYgbmFtZSBpbiB0aGlzLm92ZXJyaWRlc1xuICAgICAgICAgICAgPyB0aGlzLm92ZXJyaWRlc1tuYW1lXVxuICAgICAgICAgICAgOiB0aGlzLmdldFNjaGVtYVZhbHVlKGtleU9yRGF0YVBhdGgsIHtcbiAgICAgICAgICAgICAgICB0eXBlLFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZixcbiAgICAgICAgICAgICAgICBjYWxsYmFja1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICByZXR1cm4gZ2V0ID8gZ2V0LmNhbGwodGhpcywgdmFsdWUpIDogdmFsdWVcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICBpZiAoc2V0KSB7XG4gICAgICAgIHNldC5jYWxsKHRoaXMsIHZhbHVlKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vdmVycmlkZXMgfHw9IHt9XG4gICAgICAgIHRoaXMub3ZlcnJpZGVzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFN0b3JlQWNjZXNzb3IobmFtZSwgeyBkZWZhdWx0OiBkZWYsIGdldCwgc2V0IH0gPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGdldCgpIHtcbiAgICAgIGxldCB2YWx1ZSA9IHRoaXMuZ2V0U3RvcmUobmFtZSlcbiAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkICYmIGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFN1cHBvcnQgYGRlZmF1bHQoKWAgZnVuY3Rpb25zOlxuICAgICAgICB2YWx1ZSA9IGlzRnVuY3Rpb24oZGVmKSA/IGRlZi5jYWxsKHRoaXMpIDogZGVmXG4gICAgICAgIC8vIFRyaWdnZXIgc2V0dGVyIGJ5IHNldHRpbmcgdmFsdWUgYW5kIGFjY2Vzc29yIHRvIGRlZmF1bHQ6XG4gICAgICAgIHRoaXNbbmFtZV0gPSB2YWx1ZVxuICAgICAgICAvLyBOb3cgYWNjZXNzIHN0b3JlIGFnYWluLCBmb3IgcmVhY3Rpdml0eSB0cmFja2luZ1xuICAgICAgICB0aGlzLmdldFN0b3JlKG5hbWUpXG4gICAgICB9XG4gICAgICAvLyBBbGxvdyB0aGUgcHJvdmlkZWQgZ2V0dGVyIHRvIGZ1cnRoZXIgY2hhbmdlIG9yIHByb2Nlc3MgdGhlIHZhbHVlXG4gICAgICAvLyByZXRyaWV2ZWQgZnJvbSB0aGUgc3RvcmU6XG4gICAgICByZXR1cm4gZ2V0ID8gZ2V0LmNhbGwodGhpcywgdmFsdWUpIDogdmFsdWVcbiAgICB9LFxuXG4gICAgc2V0KHZhbHVlKSB7XG4gICAgICAvLyBBbGxvdyB0aGUgcHJvdmlkZWQgc2V0dGVyIHRvIHJldHVybiBhIG5ldyB2YWx1ZSB0byBzZXQsIG9yIGRvIHRoZVxuICAgICAgLy8gc2V0dGluZyBpdHNlbGYsIGFuZCB0aGVuIHJldHVybiBgdW5kZWZpbmVkYDpcbiAgICAgIGlmICghc2V0IHx8ICh2YWx1ZSA9IHNldC5jYWxsKHRoaXMsIHZhbHVlKSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aGlzLnNldFN0b3JlKG5hbWUsIHZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFZhbGlkYXRpb25NaXhpbiBmcm9tICcuL1ZhbGlkYXRpb25NaXhpbi5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBjb21wdXRlVmFsdWUgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRJdGVtLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGFzQXJyYXksIGNhbWVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbVmFsaWRhdGlvbk1peGluXSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgLy8gTk9URTogV2hpbGUgYGRhdGFQYXRoYCBwb2ludHMgdG8gdGhlIGFjdHVhbCBgdmFsdWVgLCBgZGF0YWAgcmVwcmVzZW50c1xuICAgIC8vIHRoZSBgaXRlbWAgaW4gd2hpY2ggdGhlIGB2YWx1ZWAgaXMgY29udGFpbmVkLCB1bmRlciB0aGUga2V5IGBuYW1lYC5cbiAgICBkYXRhUGF0aDogeyB0eXBlOiBTdHJpbmcsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YTogeyB0eXBlOiBbT2JqZWN0LCBBcnJheV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHdpZHRoOiB7IHR5cGU6IFtOdW1iZXIsIFN0cmluZ10sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHBhcnNlZFZhbHVlOiB1bmRlZmluZWQsXG4gICAgICBmb2N1c2VkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLnR5cGVcbiAgICB9LFxuXG4gICAgY29udGV4dCgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBuZXN0ZWQ6IHRoaXMubmVzdGVkIH0pXG4gICAgfSxcblxuICAgIHZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZVZhbHVlKFxuICAgICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICAgIHRoaXMuZGF0YSxcbiAgICAgICAgICB0aGlzLm5hbWUsXG4gICAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgICB7IGNvbXBvbmVudDogdGhpcyB9XG4gICAgICAgIClcbiAgICAgICAgY29uc3QgeyBmb3JtYXQgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIHJldHVybiBmb3JtYXRcbiAgICAgICAgICA/IGZvcm1hdChuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgICA6IHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgeyBwYXJzZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgICAgaWYgKHBhcnNlKSB7XG4gICAgICAgICAgdmFsdWUgPSBwYXJzZShuZXcgRGl0b0NvbnRleHQodGhpcywgeyB2YWx1ZSB9KSlcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnBhcnNlZFZhbHVlID0gdmFsdWVcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1tdXRhdGluZy1wcm9wc1xuICAgICAgICB0aGlzLmRhdGFbdGhpcy5uYW1lXSA9IHZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhcmVudERhdGEoKSB7XG4gICAgICBjb25zdCBkYXRhID0gZ2V0UGFyZW50SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCB0aGlzLm5lc3RlZClcbiAgICAgIHJldHVybiBkYXRhICE9PSB0aGlzLmRhdGEgPyBkYXRhIDogbnVsbFxuICAgIH0sXG5cbiAgICBwcm9jZXNzZWREYXRhKCkge1xuICAgICAgLy8gV2UgY2FuIG9ubHkgZ2V0IHRoZSBwcm9jZXNzZWQgZGF0YSB0aHJvdWdoIHRoZSBzY2hlbWFDb21wb25lbnQsIGJ1dFxuICAgICAgLy8gdGhhdCdzIG5vdCBuZWNlc3NhcmlseSB0aGUgaXRlbSByZXByZXNlbnRlZCBieSB0aGlzIGNvbXBvbmVudC5cbiAgICAgIC8vIFNvbHV0aW9uOiBGaW5kIHRoZSByZWxhdGl2ZSBwYXRoIGFuZCB0aGUgcHJvY2Vzc2VkIHN1Yi1pdGVtIGZyb20gdGhlcmU6XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGdldEl0ZW0oXG4gICAgICAgIHNjaGVtYUNvbXBvbmVudC5wcm9jZXNzZWREYXRhLFxuICAgICAgICAvLyBHZXQgdGhlIGRhdGFQYXRoIHJlbGF0aXZlIHRvIHRoZSBzY2hlbWFDb21wb25lbnQncyBkYXRhOlxuICAgICAgICB0aGlzLmRhdGFQYXRoLnNsaWNlKHNjaGVtYUNvbXBvbmVudC5kYXRhUGF0aC5sZW5ndGgpLFxuICAgICAgICB0aGlzLm5lc3RlZFxuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBUaGUgZm9sbG93aW5nIGNvbXB1dGVkIHByb3BlcnRpZXMgYXJlIHNpbWlsYXIgdG8gYERpdG9Db250ZXh0YFxuICAgIC8vIHByb3BlcnRpZXMsIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVzZSBvbiBgdGhpc2AgYXMgd2VsbDpcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50RGF0YVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWREYXRhXG4gICAgfSxcblxuICAgIGxhYmVsTm9kZSgpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSB0aGlzLmlzTW91bnRlZCA/IHRoaXMuJGVsLnByZXZpb3VzRWxlbWVudFNpYmxpbmcgOiBudWxsXG4gICAgICByZXR1cm4gbm9kZT8ubWF0Y2hlcygnLmRpdG8tbGFiZWwnKSA/IG5vZGUgOiBudWxsXG4gICAgfSxcblxuICAgIHZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLiRvcHRpb25zLmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYGV4Y2x1ZGVkYCBmb3IgY29uc2lzdGVudCBuYW1pbmc/XG4gICAgZXhjbHVkZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4Y2x1ZGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHJlcXVpcmVkOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVxdWlyZWQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IE1vdmUgdGhlc2UgdG8gYSBzdWItY2xhc3MgY29tcG9uZW50IHVzZWQgZm9yIGFsbCBpbnB1dCBjb21wb25lbnRzP1xuICAgIHJlYWRvbmx5OiBnZXRTY2hlbWFBY2Nlc3NvcigncmVhZG9ubHknLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGF1dG9mb2N1czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2F1dG9mb2N1cycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgLy8gVG8gYmUgdXNlZCBmb3Igc2VsZWN0cyBhbmQgaW5wdXRzIG9ubHk/XG4gICAgY2xlYXJhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY2xlYXJhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BsYWNlaG9sZGVyJywge1xuICAgICAgdHlwZTogU3RyaW5nXG4gICAgfSksXG5cbiAgICBhdXRvY29tcGxldGU6IGdldFNjaGVtYUFjY2Vzc29yKCdhdXRvY29tcGxldGUnLCB7XG4gICAgICB0eXBlOiBTdHJpbmdcbiAgICB9KSxcblxuICAgIGV2ZW50cygpIHtcbiAgICAgIGNvbnN0IGV2ZW50cyA9IHRoaXMuZ2V0RXZlbnRzKClcbiAgICAgIC8vIFJlZ2lzdGVyIGNhbGxiYWNrcyBmb3IgYWxsIHByb3ZpZGVzIG5vbi1yZWNvZ25pemVkIGV2ZW50cyxcbiAgICAgIC8vIGFzc3VtaW5nIHRoZXkgYXJlIG5hdGl2ZSBldmVudHMuXG4gICAgICAvLyBUT0RPOiBNb3ZlIHRvIHZ1ZTMtc3R5bGUgYG9uW0EtWl1gIGV2ZW50IGhhbmRsZXJzIG5hbWluZyB0aGF0IGFyZW4ndFxuICAgICAgLy8gbmFtZXNwYWNlZCBpbiBgc2NoZW1hLmV2ZW50c2Agb25jZSB0aGUgdHJhbnNpdGlvbiBpcyBjb21wbGV0ZS5cbiAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgT2JqZWN0LmtleXModGhpcy5zY2hlbWEuZXZlbnRzIHx8IHt9KSkge1xuICAgICAgICBldmVudHNbYG9uJHtjYW1lbGl6ZShldmVudCwgdHJ1ZSl9YF0gPz89ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmVtaXRFdmVudChldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGV2ZW50c1xuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgY29uc3QgeyBuYXRpdmVGaWVsZCwgdGV4dEZpZWxkIH0gPSB0aGlzLiRvcHRpb25zXG5cbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIC4uLnRoaXMuZXZlbnRzLFxuICAgICAgICBkaXNhYmxlZDogdGhpcy5kaXNhYmxlZFxuICAgICAgfVxuXG4gICAgICBpZiAobmF0aXZlRmllbGQpIHtcbiAgICAgICAgYXR0cmlidXRlcy5uYW1lID0gdGhpcy5uYW1lXG4gICAgICAgIGlmICh0aGlzLmxhYmVsKSB7XG4gICAgICAgICAgYXR0cmlidXRlcy50aXRsZSA9IHRoaXMubGFiZWxcbiAgICAgICAgfVxuICAgICAgICBhdHRyaWJ1dGVzLnJlYWRvbmx5ID0gdGhpcy5yZWFkb25seVxuICAgICAgICBhdHRyaWJ1dGVzLmF1dG9mb2N1cyA9IHRoaXMuYXV0b2ZvY3VzXG4gICAgICAgIGlmICh0ZXh0RmllbGQpIHtcbiAgICAgICAgICBhdHRyaWJ1dGVzLnBsYWNlaG9sZGVyID0gdGhpcy5wbGFjZWhvbGRlclxuICAgICAgICAgIGF0dHJpYnV0ZXMuYXV0b2NvbXBsZXRlID0gdGhpcy5hdXRvY29tcGxldGVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gYXR0cmlidXRlc1xuICAgIH0sXG5cbiAgICB2YWxpZGF0aW9ucygpIHtcbiAgICAgIGNvbnN0IHZhbGlkYXRpb25zID0geyAuLi50aGlzLmdldFZhbGlkYXRpb25zKCkgfVxuICAgICAgaWYgKHRoaXMucmVxdWlyZWQpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMucmVxdWlyZWQgPSB0cnVlXG4gICAgICB9XG4gICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gb3ZlcnJpZGUgZGVmYXVsdCBydWxlcyBhbmQgYWRkIGFueSBuZXcgb25lczpcbiAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuc2NoZW1hLnJ1bGVzIHx8IHt9KSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRlbGV0ZSB2YWxpZGF0aW9uc1trZXldXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnNba2V5XSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB2YWxpZGF0aW9uc1xuICAgIH0sXG5cbiAgICBzaG93Q2xlYXJCdXR0b24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGVhcmFibGUgJiYgdGhpcy52YWx1ZSAhPSBudWxsXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIodHJ1ZSlcbiAgICB0aGlzLnNldHVwU2NoZW1hRmllbGRzKClcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIF9yZWdpc3RlcihhZGQpIHtcbiAgICAgIC8vIFByZXZlbnQgdW5uZXN0ZWQgdHlwZSBjb21wb25lbnRzIGZyb20gb3ZlcnJpZGluZyBwYXJlbnQgZGF0YSBwYXRoc1xuICAgICAgaWYgKHRoaXMubmVzdGVkKSB7XG4gICAgICAgIHRoaXMuc2NoZW1hQ29tcG9uZW50Ll9yZWdpc3RlckNvbXBvbmVudCh0aGlzLCBhZGQpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldEV2ZW50cygpIHtcbiAgICAgIGNvbnN0IHsgb25Gb2N1cywgb25CbHVyLCBvbklucHV0LCBvbkNoYW5nZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHsgb25Gb2N1cywgb25CbHVyLCBvbklucHV0LCBvbkNoYW5nZSB9XG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgYXN5bmMgc2Nyb2xsSW50b1ZpZXcoKSB7XG4gICAgICBhd2FpdCB0aGlzLmZvY3VzU2NoZW1hKClcbiAgICAgIHRoaXMuZ2V0Rm9jdXNFbGVtZW50KCk/LnNjcm9sbEludG9WaWV3Py4oe1xuICAgICAgICBiZWhhdmlvcjogJ3Ntb290aCcsXG4gICAgICAgIGJsb2NrOiAnY2VudGVyJ1xuICAgICAgfSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy5nZXRGb2N1c0VsZW1lbnQoKT8uZm9jdXM/LigpXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGJsdXJFbGVtZW50KCkge1xuICAgICAgdGhpcy5nZXRGb2N1c0VsZW1lbnQoKT8uYmx1cj8uKClcbiAgICB9LFxuXG4gICAgZ2V0Rm9jdXNFbGVtZW50KCkge1xuICAgICAgY29uc3QgZWxlbWVudCA9IGFzQXJyYXkodGhpcy4kcmVmcy5lbGVtZW50KVswXSA/PyB0aGlzXG4gICAgICByZXR1cm4gZWxlbWVudC4kZWwgPz8gZWxlbWVudFxuICAgIH0sXG5cbiAgICBhc3luYyBmb2N1c1NjaGVtYSgpIHtcbiAgICAgIC8vIEFsc28gZm9jdXMgdGhpcyBjb21wb25lbnQncyBzY2hlbWEgYW5kIHBhbmVsIGluIGNhc2UgaXQncyBhIHRhYi5cbiAgICAgIGF3YWl0IHRoaXMuc2NoZW1hQ29tcG9uZW50LmZvY3VzKClcbiAgICAgIGF3YWl0IHRoaXMudGFiQ29tcG9uZW50Py5mb2N1cygpXG4gICAgfSxcblxuICAgIGFzeW5jIGZvY3VzKCkge1xuICAgICAgYXdhaXQgdGhpcy5mb2N1c1NjaGVtYSgpXG4gICAgICB0aGlzLnNjcm9sbEludG9WaWV3KClcbiAgICAgIHRoaXMuZm9jdXNFbGVtZW50KClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuYmx1ckVsZW1lbnQoKVxuICAgIH0sXG5cbiAgICBjbGVhcigpIHtcbiAgICAgIHRoaXMudmFsdWUgPSBudWxsXG4gICAgICB0aGlzLmJsdXIoKVxuICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgfSxcblxuICAgIG9uRm9jdXMoKSB7XG4gICAgICB0aGlzLmZvY3VzZWQgPSB0cnVlXG4gICAgICB0aGlzLm1hcmtUb3VjaGVkKClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdmb2N1cycpXG4gICAgfSxcblxuICAgIG9uQmx1cigpIHtcbiAgICAgIHRoaXMuZm9jdXNlZCA9IGZhbHNlXG4gICAgICB0aGlzLnZhbGlkYXRlKClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdibHVyJylcbiAgICB9LFxuXG4gICAgb25JbnB1dCgpIHtcbiAgICAgIHRoaXMubWFya0RpcnR5KClcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdpbnB1dCcpXG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5tYXJrRGlydHkoKVxuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScsIHtcbiAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgIC8vIFByZXZlbnQgZW5kbGVzcyBwYXJzZSByZWN1cnNpb246XG4gICAgICAgICAgdmFsdWU6IHRoaXMucGFyc2VkVmFsdWUgIT09IHVuZGVmaW5lZCA/IHRoaXMucGFyc2VkVmFsdWUgOiB0aGlzLnZhbHVlXG4gICAgICAgIH0sXG4gICAgICAgIC8vIFBhc3MgYHNjaGVtYUNvbXBvbmVudGAgYXMgcGFyZW50LCBzbyBjaGFuZ2UgZXZlbnRzIGNhbiBwcm9wYWdhdGUgdXAuXG4gICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG4iLCJpbXBvcnQgeyB0b1JhdyB9IGZyb20gJ3Z1ZSdcblxuY29uc3QgdWlkTWFwID0gbmV3IFdlYWtNYXAoKVxuXG4vLyBHZW5lcmF0ZWQgYW5kIHJlbWVtYmVycyB1bmlxdWUgaWRzIHBlciBwYXNzZWQgb2JqZWN0IHVzaW5nIGEgd2VhayBtYXAuXG5sZXQgdWlkID0gMFxuZXhwb3J0IGZ1bmN0aW9uIGdldFVpZChpdGVtLCBnZXRJdGVtSWQgPSBudWxsKSB7XG4gIGNvbnN0IHJhdyA9IHRvUmF3KGl0ZW0pXG4gIGxldCBpZCA9IHVpZE1hcC5nZXQocmF3KVxuICBpZiAoIWlkKSB7XG4gICAgaWQgPSBnZXRJdGVtSWQ/LihpdGVtKSB8fCBgQCR7Kyt1aWR9YFxuICAgIHVpZE1hcC5zZXQocmF3LCBpZClcbiAgfVxuICByZXR1cm4gaWRcbn1cbiIsImltcG9ydCB7IGlzVGVtcG9yYXJ5SWQgfSBmcm9tICcuL2RhdGEuanMnXG5pbXBvcnQge1xuICBpc0ludGVnZXIsXG4gIGFzQXJyYXksXG4gIHBhcnNlRGF0YVBhdGgsXG4gIGdldFZhbHVlQXREYXRhUGF0aFxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgbmFub2lkIH0gZnJvbSAnbmFub2lkJ1xuXG4vLyBTY2hlbWFHcmFwaCBpcyBhIGNsYXNzIHRvIGNvbGxlY3Qgc2NoZW1hIGdyYXBoIG1ldGEgaW5mb3JtYXRpb24gaW4gb3JkZXIgdG9cbi8vIHByb2Nlc3Mgc291cmNlcyBhbmQgcmVsYXRpb25zIGZvciB0aGUgZ2l2ZW4gdGFyZ2V0cyAnc2VydmVyJyBhbmQgJ2NsaXBib2FyZCcsXG4vLyBhY2NvcmRpbmcgdG8gdGhlIGZvbGxvd2luZyB0YWJsZTpcbi8vXG4vLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfCAtLS0tLS0tLS0gfCAtLS0tLS0tLS0gfFxuLy8gfCBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgc2VydmVyICAgIHwgY2xpcGJvYXJkIHxcbi8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18IC0tLS0tLS0tLSB8IC0tLS0tLS0tLSB8XG4vLyB8IHR5cGU6ICdyZWxhdGlvbicsIGludGVybmFsOiBmYWxzZSAgICAgICAgICAgfCBrZWVwIGlkICAgfCBrZWVwIGlkICAgfFxuLy8gfCB0eXBlOiAncmVsYXRpb24nLCBpbnRlcm5hbDogdHJ1ZSAgICAgICAgICAgIHwga2VlcCBpZCAgIHwgcmVmLCAjcmVmIHxcbi8vIHwgdHlwZTogJ3JlbGF0aW9uJywgaW50ZXJuYWw6IHRydWUsIHRlbXBvcmFyeSB8IHJlZiwgI3JlZiB8IHJlZiwgI3JlZiB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiBmYWxzZSAgICAgICAgICAgICAgfCBrZWVwIGlkICAgfCByZW1vdmUgaWQgfFxuLy8gfCB0eXBlOiAnc291cmNlJywgcmVsYXRlZDogZmFsc2UsIHRlbXBvcmFyeSAgIHwgcmVmLCAjaWQgIHwgcmVtb3ZlIGlkIHxcbi8vIHwgdHlwZTogJ3NvdXJjZScsIHJlbGF0ZWQ6IHRydWUgICAgICAgICAgICAgICB8IGtlZXAgaWQgICB8IHJlZiwgI2lkICB8XG4vLyB8IHR5cGU6ICdzb3VyY2UnLCByZWxhdGVkOiB0cnVlLCB0ZW1wb3JhcnkgICAgfCByZWYsICNpZCAgfCByZWYsICNpZCAgfFxuLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwgLS0tLS0tLS0tIHwgLS0tLS0tLS0tIHxcblxuZXhwb3J0IGNsYXNzIFNjaGVtYUdyYXBoIHtcbiAgZ3JhcGggPSB7fVxuICByZWZlcmVuY2VzID0ge31cblxuICBzZXQoZGF0YVBhdGgsIHNldHRpbmdzLCBkZWZhdWx0cykge1xuICAgIGRhdGFQYXRoID0gcGFyc2VEYXRhUGF0aChkYXRhUGF0aClcbiAgICBsZXQgc3ViR3JhcGggPSB0aGlzLmdyYXBoXG4gICAgZm9yIChjb25zdCBwYXJ0IG9mIGRhdGFQYXRoKSB7XG4gICAgICBjb25zdCBrZXkgPSBpc0ludGVnZXIoK3BhcnQpID8gJyonIDogcGFydFxuICAgICAgc3ViR3JhcGggPSBzdWJHcmFwaFtrZXldID8/PSB7fVxuICAgIH1cbiAgICBzdWJHcmFwaC4kc2V0dGluZ3MgPSB7XG4gICAgICAuLi5kZWZhdWx0cywgLy8gU2VlIGBhZGRTb3VyY2UoZGF0YVBhdGgpYFxuICAgICAgLi4uc3ViR3JhcGguJHNldHRpbmdzLFxuICAgICAgLi4uc2V0dGluZ3NcbiAgICB9XG4gIH1cblxuICBhZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSkge1xuICAgIC8vIE9ubHkgc2V0IGByZWxhdGVkOiBmYWxzZWAgdGhyb3VnaCB0aGUgZGVmYXVsdHMsIGFzIGBzZXRTb3VyY2VSZWxhdGVkKClgXG4gICAgLy8gbWF5IGJlIGNhbGxlZCBiZWZvcmUgYGFkZFNvdXJjZSgpYCwgZGVwZW5kaW5nIG9uIHRoZSBncmFwaCBzdHJ1Y3R1cmUuXG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHsgdHlwZTogJ3NvdXJjZScsIHNjaGVtYSB9LCB7IHJlbGF0ZWQ6IGZhbHNlIH0pXG4gIH1cblxuICBzZXRTb3VyY2VSZWxhdGVkKGRhdGFQYXRoKSB7XG4gICAgdGhpcy5zZXQoZGF0YVBhdGgsIHtcbiAgICAgIHJlbGF0ZWQ6IHRydWUsXG4gICAgICByZWZlcmVuY2U6IHRoaXMuZ2V0UmVmZXJlbmNlUHJlZml4KGRhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBhZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpIHtcbiAgICB0aGlzLnNldChkYXRhUGF0aCwge1xuICAgICAgdHlwZTogJ3JlbGF0aW9uJyxcbiAgICAgIHNjaGVtYSxcbiAgICAgIGludGVybmFsOiAhIXJlbGF0ZWREYXRhUGF0aCxcbiAgICAgIHJlZmVyZW5jZTogdGhpcy5nZXRSZWZlcmVuY2VQcmVmaXgocmVsYXRlZERhdGFQYXRoKVxuICAgIH0pXG4gIH1cblxuICBnZXRSZWZlcmVuY2VQcmVmaXgoZGF0YVBhdGgpIHtcbiAgICByZXR1cm4gZGF0YVBhdGhcbiAgICAgID8gKHRoaXMucmVmZXJlbmNlc1tkYXRhUGF0aF0gPz89IG5hbm9pZCg2KSlcbiAgICAgIDogbnVsbFxuICB9XG5cbiAgZmxhdHRlbigpIHtcbiAgICBjb25zdCBmbGF0dGVuID0gZ3JhcGggPT4ge1xuICAgICAgY29uc3QgZW50cmllcyA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHsgJHNldHRpbmdzLCAuLi5zdWJHcmFwaCB9XSBvZiBPYmplY3QuZW50cmllcyhncmFwaCkpIHtcbiAgICAgICAgaWYgKCRzZXR0aW5ncykge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCAkc2V0dGluZ3NdKVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgW3N1YktleSwgc2V0dGluZ3NdIG9mIGZsYXR0ZW4oc3ViR3JhcGgpKSB7XG4gICAgICAgICAgZW50cmllcy5wdXNoKFtgJHtrZXl9LyR7c3ViS2V5fWAsIHNldHRpbmdzXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGVudHJpZXNcbiAgICB9XG5cbiAgICByZXR1cm4gZmxhdHRlbih0aGlzLmdyYXBoKVxuICB9XG5cbiAgcHJvY2Vzcyhzb3VyY2VTY2hlbWEsIGRhdGEsIHsgdGFyZ2V0IH0pIHtcbiAgICBjb25zdCBjbGlwYm9hcmQgPSB0YXJnZXQgPT09ICdjbGlwYm9hcmQnXG4gICAgaWYgKGNsaXBib2FyZCkge1xuICAgICAgZGVsZXRlIGRhdGFbc291cmNlU2NoZW1hLmlkS2V5IHx8ICdpZCddXG4gICAgfVxuICAgIGZvciAoY29uc3QgW2RhdGFQYXRoLCBzZXR0aW5nc10gb2YgdGhpcy5mbGF0dGVuKCkpIHtcbiAgICAgIGNvbnN0IHsgdHlwZSwgc2NoZW1hLCBpbnRlcm5hbCwgcmVsYXRlZCwgcmVmZXJlbmNlIH0gPSBzZXR0aW5nc1xuICAgICAgY29uc3Qgc291cmNlID0gdHlwZSA9PT0gJ3NvdXJjZSdcbiAgICAgIGNvbnN0IHJlbGF0aW9uID0gdHlwZSA9PT0gJ3JlbGF0aW9uJ1xuICAgICAgaWYgKHNvdXJjZSB8fCByZWxhdGlvbiAmJiBpbnRlcm5hbCkge1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBnZXRWYWx1ZUF0RGF0YVBhdGgoZGF0YSwgZGF0YVBhdGgsICgpID0+IG51bGwpXG4gICAgICAgIGNvbnN0IHJlbW92ZUlkID0gY2xpcGJvYXJkICYmIHNvdXJjZSAmJiAhcmVsYXRlZFxuICAgICAgICBjb25zdCByZWZlcmVuY2VJZCA9IChcbiAgICAgICAgICBjbGlwYm9hcmQgJiYgKFxuICAgICAgICAgICAgcmVsYXRpb24gJiYgaW50ZXJuYWwgfHxcbiAgICAgICAgICAgIHNvdXJjZSAmJiByZWxhdGVkXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIGZvciAoY29uc3QgdmFsdWUgb2YgYXNBcnJheSh2YWx1ZXMpLmZsYXQoKSkge1xuICAgICAgICAgIGNvbnN0IGlkS2V5ID0gKFxuICAgICAgICAgICAgc291cmNlICYmIHNjaGVtYS5pZEtleSB8fFxuICAgICAgICAgICAgcmVsYXRpb24gJiYgc2NoZW1hLnJlbGF0ZUJ5IHx8XG4gICAgICAgICAgICAnaWQnXG4gICAgICAgICAgKVxuICAgICAgICAgIGxldCBpZCA9IHZhbHVlPy5baWRLZXldXG4gICAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICAgIGlmIChyZW1vdmVJZCkge1xuICAgICAgICAgICAgICBkZWxldGUgdmFsdWVbaWRLZXldXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVmZXJlbmNlSWQgfHwgaXNUZW1wb3JhcnlJZChpZCkpIHtcbiAgICAgICAgICAgICAgaWYgKGlzVGVtcG9yYXJ5SWQoaWQpKSB7XG4gICAgICAgICAgICAgICAgaWQgPSBpZC5zbGljZSgxKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNvbnN0IHJlZktleSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgID8gLy8gQ2xpcGJvYXJkIGp1c3QgbmVlZHMgdGVtcG9yYXJ5IGlkcyB1bmRlciB0aGUgYWN0dWFsIGBpZEtleWBcbiAgICAgICAgICAgICAgICAgIGlkS2V5XG4gICAgICAgICAgICAgICAgOiAvLyBTZXJ2ZXIgd2FudHMgT2JqZWN0aW9uLXN0eWxlICcjaWQnIC8gJyNyZWYnIHBhaXJzLlxuICAgICAgICAgICAgICAgICAgc291cmNlXG4gICAgICAgICAgICAgICAgICA/ICcjaWQnXG4gICAgICAgICAgICAgICAgICA6ICcjcmVmJ1xuICAgICAgICAgICAgICBjb25zdCByZXZWYWx1ZSA9IGNsaXBib2FyZFxuICAgICAgICAgICAgICAgID8gYEAke2lkfWBcbiAgICAgICAgICAgICAgICA6IC8vIEtlZXAgdGhlIGlkcyB1bmlxdWUgaW4gcmVmZXJlbmNlIGdyb3Vwcywgc2luY2UgdGhleVxuICAgICAgICAgICAgICAgICAgLy8gcmVmZXJlbmNlIGFjcm9zcyB0aGUgZnVsbCBncmFwaC5cbiAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZVxuICAgICAgICAgICAgICAgICAgPyBgJHtyZWZlcmVuY2V9LSR7aWR9YFxuICAgICAgICAgICAgICAgICAgOiBpZCAvLyBBIHRlbXBvcmFyeSBpZCB3aXRob3V0IGEgcmVsYXRlZCwganVzdCBwcmVzZXJ2ZSBpdC5cbiAgICAgICAgICAgICAgdmFsdWVbcmVmS2V5XSA9IHJldlZhbHVlXG4gICAgICAgICAgICAgIGlmIChyZWZLZXkgIT09IGlkS2V5KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2lkS2V5XVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBkYXRhXG4gIH1cbn1cbiIsImltcG9ydCB7XG4gIGlzQXJyYXksXG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNCb29sZWFuLFxuICBpc051bWJlcixcbiAgaXNGdW5jdGlvbixcbiAgaXNEYXRlLFxuICBpc1JlZ0V4cCxcbiAgYXNBcnJheVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5jb25zdCB0eXBlQ2hlY2tlcnMgPSB7XG4gIEJvb2xlYW46IGlzQm9vbGVhbixcbiAgTnVtYmVyOiBpc051bWJlcixcbiAgU3RyaW5nOiBpc1N0cmluZyxcbiAgRGF0ZTogaXNEYXRlLFxuICBBcnJheTogaXNBcnJheSxcbiAgT2JqZWN0OiBpc09iamVjdCxcbiAgUmVnRXhwOiBpc1JlZ0V4cCxcbiAgRnVuY3Rpb246IGlzRnVuY3Rpb25cbn1cblxuLy8gRGVjbGFyZSB0aGVzZSBzZXBhcmF0ZWx5IGZyb20gdGhlIGB0eXBlQ29udmVydGVyc2Agb2JqZWN0LCB0byBwcmV2ZW50XG4vLyBCYWJlbCBpc3N1ZXMgd2l0aCBgT2JqZWN0YCBvdmVycmlkaW5nIHRoZSBnbG9iYWwgYE9iamVjdGA6XG5jb25zdCB0b0Jvb2xlYW4gPSB2YWx1ZSA9PiAhIXZhbHVlXG5jb25zdCB0b051bWJlciA9IHZhbHVlID0+ICt2YWx1ZVxuY29uc3QgdG9TdHJpbmcgPSB2YWx1ZSA9PiBTdHJpbmcodmFsdWUpXG5cbmNvbnN0IHRvRGF0ZSA9IHZhbHVlID0+XG4gIGlzRGF0ZSh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiBuZXcgRGF0ZSh2YWx1ZSlcblxuY29uc3QgdG9BcnJheSA9IHZhbHVlID0+XG4gIGlzQXJyYXkodmFsdWUpXG4gICAgPyB2YWx1ZVxuICAgIDogaXNTdHJpbmcodmFsdWUpXG4gICAgICA/IHZhbHVlLnNwbGl0KCcsJylcbiAgICAgIDogYXNBcnJheSh2YWx1ZSlcblxuY29uc3QgdG9PYmplY3QgPSB2YWx1ZSA9PlxuICBpc09iamVjdCh2YWx1ZSlcbiAgICA/IHZhbHVlXG4gICAgOiAvLyBJZiBhIE9iamVjdCBpcyBleHBlY3RlZCBidXQgYSBCb29sZWFuIHByb3ZpZGUsIGNvbnZlcnQgdG8gYW4gZW1wdHlcbiAgICAgIC8vIG9iamVjdC4gVXNlZCBieSBgY3JlYXRhYmxlYCAmIGNvLCB0aGF0IGNhbiBiZSBib3RoLlxuICAgICAgdmFsdWUgPT09IHRydWVcbiAgICAgID8ge31cbiAgICAgIDogbnVsbFxuXG5jb25zdCB0b1JlZ0V4cCA9IHZhbHVlID0+XG4gIGlzUmVnRXhwKHZhbHVlKVxuICAgID8gdmFsdWVcbiAgICA6IG5ldyBSZWdFeHAodmFsdWUpXG5cbmNvbnN0IHR5cGVDb252ZXJ0ZXJzID0ge1xuICBCb29sZWFuOiB0b0Jvb2xlYW4sXG4gIE51bWJlcjogdG9OdW1iZXIsXG4gIFN0cmluZzogdG9TdHJpbmcsXG4gIERhdGU6IHRvRGF0ZSxcbiAgQXJyYXk6IHRvQXJyYXksXG4gIE9iamVjdDogdG9PYmplY3QsXG4gIFJlZ0V4cDogdG9SZWdFeHBcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkge1xuICAvLyBTZWUgaWYgYW55IG9mIHRoZSBleHBlY3QgdHlwZXMgbWF0Y2gsIHJldHVybiBpbW1lZGlhdGVseSBpZiB0aGV5IGRvOlxuICBpZiAodHlwZXMgJiYgdmFsdWUgIT0gbnVsbCkge1xuICAgIGZvciAoY29uc3QgdHlwZSBvZiB0eXBlcykge1xuICAgICAgaWYgKHR5cGVDaGVja2Vyc1t0eXBlLm5hbWVdPy4odmFsdWUpKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydFR5cGUodHlwZSwgdmFsdWUpIHtcbiAgY29uc3QgY29udmVydGVyID0gdHlwZSAmJiB0eXBlQ29udmVydGVyc1t0eXBlLm5hbWUgfHwgdHlwZV1cbiAgcmV0dXJuIGNvbnZlcnRlciA/IGNvbnZlcnRlcih2YWx1ZSkgOiB2YWx1ZVxufVxuIiwiaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IERpdG9NaXhpbiBmcm9tICcuLi9taXhpbnMvRGl0b01peGluLmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0VWlkIH0gZnJvbSAnLi91aWQuanMnXG5pbXBvcnQgeyBTY2hlbWFHcmFwaCB9IGZyb20gJy4vU2NoZW1hR3JhcGguanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCwgaXNUZW1wb3JhcnlJZCB9IGZyb20gJy4vZGF0YS5qcydcbmltcG9ydCB7IGlzTWF0Y2hpbmdUeXBlLCBjb252ZXJ0VHlwZSB9IGZyb20gJy4vdHlwZS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNBcnJheSxcbiAgaXNGdW5jdGlvbixcbiAgaXNQcm9taXNlLFxuICBpc01vZHVsZSxcbiAgYXNBcnJheSxcbiAgY2xvbmUsXG4gIGNhbWVsaXplLFxuICBhc3NpZ25EZWVwbHksXG4gIG1hcENvbmN1cnJlbnRseSxcbiAgZ2V0VmFsdWVBdERhdGFQYXRoXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgeyBtYXJrUmF3IH0gZnJvbSAndnVlJ1xuXG5jb25zdCB0eXBlQ29tcG9uZW50cyA9IHt9XG5jb25zdCB1bmtub3duVHlwZVJlcG9ydGVkID0ge31cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyVHlwZUNvbXBvbmVudCh0eXBlLCBjb21wb25lbnQpIHtcbiAgdHlwZUNvbXBvbmVudHNbdHlwZV0gPSBjb21wb25lbnRcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVDb21wb25lbnQodHlwZSwgYWxsb3dOdWxsID0gZmFsc2UpIHtcbiAgY29uc3QgY29tcG9uZW50ID0gdHlwZUNvbXBvbmVudHNbdHlwZV0gfHwgbnVsbFxuICBpZiAoIWNvbXBvbmVudCAmJiAhYWxsb3dOdWxsICYmICF1bmtub3duVHlwZVJlcG9ydGVkW3R5cGVdKSB7XG4gICAgLy8gUmVwb3J0IGVhY2ggbWlzc2luZyB0eXBlIG9ubHkgb25jZSwgdG8gYXZvaWQgZmxvb2RpbmcgdGhlIGNvbnNvbGU6XG4gICAgdW5rbm93blR5cGVSZXBvcnRlZFt0eXBlXSA9IHRydWVcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gRGl0byBjb21wb25lbnQgdHlwZTogJyR7dHlwZX0nYClcbiAgfVxuICByZXR1cm4gY29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWFzLCBjYWxsYmFjaykge1xuICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgaWYgKGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpKSB7XG4gICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhzY2hlbWEuY29tcG9uZW50LCBzY2hlbWEubmFtZSwgMClcbiAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1NjaGVtYShzY2hlbWEpKSB7XG4gICAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21wb25lbnRdIG9mIE9iamVjdC5lbnRyaWVzKHNjaGVtYS5jb21wb25lbnRzIHx8IHt9KSkge1xuICAgICAgICBjb25zdCByZXMgPSBjYWxsYmFjayhjb21wb25lbnQsIG5hbWUsIDEpXG4gICAgICAgIGlmIChyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXNcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gc2NoZW1hXG4gICAgPyBpdGVyYXRlU2NoZW1hQ29tcG9uZW50cyhbc2NoZW1hLCAuLi5nZXRUYWJTY2hlbWFzKHNjaGVtYSldLCBjYWxsYmFjaylcbiAgICA6IHVuZGVmaW5lZFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZE5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNhbGxiYWNrKSB7XG4gIHJldHVybiAoXG4gICAgaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMoXG4gICAgICBzY2hlbWEsXG4gICAgICBjb21wb25lbnQgPT4gKGNhbGxiYWNrKGNvbXBvbmVudCkgPyBjb21wb25lbnQgOiB1bmRlZmluZWQpXG4gICAgKSA/PyBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnQoc2NoZW1hLCBjYWxsYmFjaykge1xuICByZXR1cm4gKFxuICAgIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKFxuICAgICAgc2NoZW1hLFxuICAgICAgY29tcG9uZW50ID0+IChjYWxsYmFjayhjb21wb25lbnQpID8gdHJ1ZSA6IHVuZGVmaW5lZClcbiAgICApID8/IGZhbHNlXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV2ZXJ5TmVzdGVkU2NoZW1hQ29tcG9uZW50KHNjaGVtYSwgY2FsbGJhY2spIHtcbiAgcmV0dXJuIChcbiAgICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbXBvbmVudCA9PiAoY2FsbGJhY2soY29tcG9uZW50KSA/IHVuZGVmaW5lZCA6IGZhbHNlKVxuICAgICkgPz8gdHJ1ZVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSkge1xuICByZXR1cm4gc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsICgpID0+IHRydWUpID8/IGZhbHNlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NjaGVtYShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzT2JqZWN0KHNjaGVtYSkgJiYgaXNTdHJpbmcoc2NoZW1hLnR5cGUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Zvcm0oc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAnZm9ybSdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzVmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICd2aWV3J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNUYWIoc2NoZW1hKSB7XG4gIHJldHVybiBpc1NjaGVtYShzY2hlbWEpICYmIHNjaGVtYS50eXBlID09PSAndGFiJ1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNQYW5lbChzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdwYW5lbCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTWVudShzY2hlbWEpIHtcbiAgcmV0dXJuIGlzU2NoZW1hKHNjaGVtYSkgJiYgc2NoZW1hLnR5cGUgPT09ICdtZW51J1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpIHtcbiAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHNjaGVtYSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWEoc2NoZW1hLCB1bndyYXBNb2R1bGUgPSBmYWxzZSkge1xuICBpZiAoaXNGdW5jdGlvbihzY2hlbWEpKSB7XG4gICAgc2NoZW1hID0gc2NoZW1hKClcbiAgfVxuICBpZiAoaXNQcm9taXNlKHNjaGVtYSkpIHtcbiAgICBzY2hlbWEgPSBhd2FpdCBzY2hlbWFcbiAgfVxuICBpZiAoaXNNb2R1bGUoc2NoZW1hKSkge1xuICAgIC8vIENvcHkgdG8gY29udmVydCBmcm9tIG1vZHVsZSB0byBvYmplY3Q6XG4gICAgc2NoZW1hID0geyAuLi5zY2hlbWEgfVxuICAgIC8vIFVud3JhcCBkZWZhdWx0IG9yIG5hbWVkIHNjaGVtYVxuICAgIGlmICghc2NoZW1hLm5hbWUgJiYgKHVud3JhcE1vZHVsZSB8fCBzY2hlbWEuZGVmYXVsdCkpIHtcbiAgICAgIC8vIEZpbHRlciBvdXQgaW50ZXJuYWwga2V5IGFkZGVkIGJ5IHZpdGUgLyB2dWUgMyBwbHVnaW4gd2hlbiBjaGFuZ2luZ1xuICAgICAgLy8gY29kZSBpbiBhIGR5bmFtaWNhbGx5IGltcG9ydGVkIHZ1ZSBjb21wb25lbnQsIHNlZTpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92aXRlanMvdml0ZS1wbHVnaW4tdnVlL2Jsb2IvYWJkZjVmNGYzMmQwMmFmNjQxZTVmNjA4NzFiZGUxNDUzNTU2OWIxZS9wYWNrYWdlcy9wbHVnaW4tdnVlL3NyYy9tYWluLnRzI0wxMzNcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzY2hlbWEpLmZpbHRlcihrZXkgPT4ga2V5ICE9PSAnX3JlcmVuZGVyX29ubHknKVxuICAgICAgaWYgKGtleXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBrZXlzWzBdXG4gICAgICAgIHNjaGVtYSA9IHNjaGVtYVtuYW1lXVxuICAgICAgICBpZiAobmFtZSAhPT0gJ2RlZmF1bHQnKSB7XG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVNjaGVtYXMoXG4gIHVucmVzb2x2ZWRTY2hlbWFzLFxuICByZXNvbHZlSXRlbSA9IHJlc29sdmVTY2hlbWFcbikge1xuICBsZXQgc2NoZW1hcyA9IGlzRnVuY3Rpb24odW5yZXNvbHZlZFNjaGVtYXMpXG4gICAgPyB1bnJlc29sdmVkU2NoZW1hcygpXG4gICAgOiB1bnJlc29sdmVkU2NoZW1hc1xuICBzY2hlbWFzID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWFzLCBmYWxzZSlcbiAgaWYgKGlzQXJyYXkoc2NoZW1hcykpIHtcbiAgICAvLyBUcmFuc2xhdGUgYW4gYXJyYXkgb2YgZHluYW1pYyBpbXBvcnQsIGVhY2ggaW1wb3J0aW5nIG9uZSBuYW1lZCBzY2hlbWFcbiAgICAvLyBtb2R1bGUgdG8gYW4gb2JqZWN0IHdpdGggbmFtZWQgZW50cmllcy5cbiAgICBzY2hlbWFzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgYXdhaXQgbWFwQ29uY3VycmVudGx5KFxuICAgICAgICBzY2hlbWFzLFxuICAgICAgICBhc3luYyBpdGVtID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBbc2NoZW1hLm5hbWUsIHNjaGVtYV1cbiAgICAgICAgfVxuICAgICAgKVxuICAgIClcbiAgfSBlbHNlIGlmIChpc09iamVjdChzY2hlbWFzKSkge1xuICAgIHNjaGVtYXMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhd2FpdCBtYXBDb25jdXJyZW50bHkoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICBhc3luYyAoW2tleSwgaXRlbV0pID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCByZXNvbHZlSXRlbShpdGVtLCB0cnVlKVxuICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgIH1cbiAgICAgIClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHNjaGVtYXNcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVWaWV3cyh1bnJlc29sdmVkVmlld3MpIHtcbiAgcmV0dXJuIHJlc29sdmVTY2hlbWFzKHVucmVzb2x2ZWRWaWV3cywgYXN5bmMgKHNjaGVtYSwgdW53cmFwTW9kdWxlKSA9PiB7XG4gICAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHVud3JhcE1vZHVsZSlcbiAgICBpZiAoIXNjaGVtYS5uYW1lICYmIGlzTWVudShzY2hlbWEpKSB7XG4gICAgICAvLyBHZW5lcmF0ZSBhIG5hbWUgZm9yIHN1Yi1tZW51cyBmcm9tIHRoZWlyIGxhYmVsIGlmIGl0J3MgbWlzc2luZy5cbiAgICAgIC8vIE5PVEU6IFRoaXMgaXMgbmV2ZXIgYWN0dWFsbHkgcmVmZXJlbmNlZCBmcm9tIGFueXdoZXJlLCBidXQgdGhleSBuZWVkXG4gICAgICAvLyBhIG5hbWUgYnkgd2hpY2ggdGhleSdyZSBzdG9yZWQgaW4gdGhlIHBhcmVudCBvYmplY3QuXG4gICAgICBzY2hlbWEubmFtZSA9IGNhbWVsaXplKHNjaGVtYS5sYWJlbClcbiAgICAgIHNjaGVtYS5pdGVtcyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKHNjaGVtYS5pdGVtcylcbiAgICB9XG4gICAgcmV0dXJuIHNjaGVtYVxuICB9KVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlblZpZXdzKHZpZXdzKSB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXModmlld3MpLnJlZHVjZShcbiAgICAgIChlbnRyaWVzLCBba2V5LCBzY2hlbWFdKSA9PiB7XG4gICAgICAgIGlmIChpc01lbnUoc2NoZW1hKSkge1xuICAgICAgICAgIGVudHJpZXMucHVzaCguLi5PYmplY3QuZW50cmllcyhzY2hlbWEuaXRlbXMpKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCBzY2hlbWFdKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbnRyaWVzXG4gICAgICB9LFxuICAgICAgW11cbiAgICApXG4gIClcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKSB7XG4gIC8vIFJlc29sdmVzIGFzeW5jIHNjaGVtYSBjb21wb25lbnRzIGFuZCBhZGRzIERpdG9NaXhpbiBhbmQgVHlwZU1peGluIHRvIHRoZW0uXG4gIGxldCB7IGNvbXBvbmVudCB9ID0gc2NoZW1hXG4gIGlmIChjb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQgPSBhd2FpdCByZXNvbHZlU2NoZW1hKGNvbXBvbmVudCwgdHJ1ZSlcbiAgICBpZiAoY29tcG9uZW50KSB7XG4gICAgICAvLyBQcmV2ZW50IHdhcm5pbmc6IFwiVnVlIHJlY2VpdmVkIGEgQ29tcG9uZW50IHdoaWNoIHdhcyBtYWRlIGEgcmVhY3RpdmVcbiAgICAgIC8vIG9iamVjdC4gVGhpcyBjYW4gbGVhZCB0byB1bm5lY2Vzc2FyeSBwZXJmb3JtYW5jZSBvdmVyaGVhZCwgYW5kIHNob3VsZFxuICAgICAgLy8gYmUgYXZvaWRlZCBieSBtYXJraW5nIHRoZSBjb21wb25lbnQgd2l0aCBgbWFya1Jhd2BcIjpcbiAgICAgIHNjaGVtYS5jb21wb25lbnQgPSBtYXJrUmF3KHtcbiAgICAgICAgLi4uY29tcG9uZW50LFxuICAgICAgICBtaXhpbnM6IFtEaXRvTWl4aW4sIFR5cGVNaXhpbiwgLi4uKGNvbXBvbmVudC5taXhpbnMgfHwgW10pXVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVTY2hlbWFDb21wb25lbnRzKHNjaGVtYXMpIHtcbiAgLy8gYHNjaGVtYXNgIGFyZSBvZiB0aGUgc2FtZSBwb3NzaWJsZSBmb3JtcyBhcyBwYXNzZWQgdG8gYGdldE5hbWVkU2NoZW1hcygpYFxuICBhd2FpdCBtYXBDb25jdXJyZW50bHkoT2JqZWN0LnZhbHVlcyhzY2hlbWFzIHx8IHt9KSwgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudClcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKFxuICBhcGksXG4gIHNjaGVtYSxcbiAgcm91dGVzID0gbnVsbCxcbiAgbGV2ZWwgPSAwXG4pIHtcbiAgY29uc3QgcHJvbWlzZXMgPSBbXVxuICBjb25zdCBwcm9jZXNzID0gKGNvbXBvbmVudCwgbmFtZSwgcmVsYXRpdmVMZXZlbCkgPT4ge1xuICAgIHByb21pc2VzLnB1c2goXG4gICAgICBwcm9jZXNzU2NoZW1hQ29tcG9uZW50KFxuICAgICAgICBhcGksXG4gICAgICAgIGNvbXBvbmVudCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcm91dGVzLFxuICAgICAgICBsZXZlbCArIHJlbGF0aXZlTGV2ZWxcbiAgICAgIClcbiAgICApXG4gIH1cblxuICBpdGVyYXRlTmVzdGVkU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEsIHByb2Nlc3MpXG4gIGl0ZXJhdGVTY2hlbWFDb21wb25lbnRzKGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpLCBwcm9jZXNzKVxuXG4gIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudChcbiAgYXBpLFxuICBzY2hlbWEsXG4gIG5hbWUsXG4gIHJvdXRlcyA9IG51bGwsXG4gIGxldmVsID0gMFxuKSB7XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcblxuICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgLy8gQWxzbyBwcm9jZXNzIG5lc3RlZCBwYW5lbCBzY2hlbWFzLlxuICAgIG1hcENvbmN1cnJlbnRseShcbiAgICAgIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpLFxuICAgICAgcGFuZWwgPT4gcHJvY2Vzc1NjaGVtYUNvbXBvbmVudHMoYXBpLCBwYW5lbCwgcm91dGVzLCBsZXZlbClcbiAgICApLFxuICAgIC8vIERlbGVnYXRlIHNjaGVtYSBwcm9jZXNzaW5nIHRvIHRoZSBhY3R1YWwgdHlwZSBjb21wb25lbnRzLlxuICAgIGdldFR5cGVPcHRpb25zKHNjaGVtYSk/LnByb2Nlc3NTY2hlbWE/LihcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYSxcbiAgICAgIG5hbWUsXG4gICAgICByb3V0ZXMsXG4gICAgICBsZXZlbFxuICAgIClcbiAgXSlcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NWaWV3KGNvbXBvbmVudCwgYXBpLCBzY2hlbWEsIG5hbWUsIGZ1bGxQYXRoID0gJycpIHtcbiAgcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKVxuICBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUsIGZ1bGxQYXRoKVxuICBsZXQgY2hpbGRyZW4gPSBbXVxuICBpZiAoaXNWaWV3KHNjaGVtYSkpIHtcbiAgICBhd2FpdCBwcm9jZXNzTmVzdGVkU2NoZW1hcyhhcGksIHNjaGVtYSlcbiAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhhcGksIHNjaGVtYSwgY2hpbGRyZW4pXG4gIH0gZWxzZSBpZiAoaXNNZW51KHNjaGVtYSkpIHtcbiAgICBjaGlsZHJlbiA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgT2JqZWN0LmVudHJpZXMoc2NoZW1hLml0ZW1zKS5tYXAoYXN5bmMgKFtuYW1lLCBpdGVtXSkgPT5cbiAgICAgICAgcHJvY2Vzc1ZpZXcoY29tcG9uZW50LCBhcGksIGl0ZW0sIG5hbWUsIHNjaGVtYS5mdWxsUGF0aClcbiAgICAgIClcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHZpZXcgc2NoZW1hOiAnJHtnZXRTY2hlbWFJZGVudGlmaWVyKHNjaGVtYSl9J2ApXG4gIH1cbiAgcmV0dXJuIHtcbiAgICBwYXRoOiBzY2hlbWEuZnVsbFBhdGgsXG4gICAgY2hpbGRyZW4sXG4gICAgY29tcG9uZW50LFxuICAgIG1ldGE6IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1NjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKSB7XG4gIGxldCBkZWZhdWx0cyA9IGFwaS5kZWZhdWx0c1tzY2hlbWEudHlwZV1cbiAgaWYgKGRlZmF1bHRzKSB7XG4gICAgaWYgKGlzRnVuY3Rpb24oZGVmYXVsdHMpKSB7XG4gICAgICBkZWZhdWx0cyA9IGRlZmF1bHRzKHNjaGVtYSlcbiAgICB9XG4gICAgaWYgKGlzT2JqZWN0KGRlZmF1bHRzKSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZGVmYXVsdHMpKSB7XG4gICAgICAgIGlmIChzY2hlbWFba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2NoZW1hW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjaGVtYVtrZXldID0gYXNzaWduRGVlcGx5KHZhbHVlLCBzY2hlbWFba2V5XSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc05lc3RlZFNjaGVtYURlZmF1bHRzKGFwaSwgc2NoZW1hKSB7XG4gIC8vIFByb2Nlc3MgZGVmYXVsdHMgZm9yIG5lc3RlZCBzY2hlbWFzLiBOb3RlIHRoYXQgdGhpcyBpcyBhbHNvIGRvbmUgd2hlblxuICAvLyBjYWxsaW5nIGBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cygpYCwgYnV0IHRoYXQgZnVuY3Rpb24gaXMgYXN5bmMsIGFuZCB3ZVxuICAvLyBuZWVkIGEgc3luYyB2ZXJzaW9uIHRoYXQgb25seSBoYW5kbGVzIHRoZSBkZWZhdWx0cyBmb3IgZmlsdGVycywgc2VlXG4gIC8vIGBnZXRGaWx0ZXJzUGFuZWwoKWAuXG4gIGl0ZXJhdGVOZXN0ZWRTY2hlbWFDb21wb25lbnRzKHNjaGVtYSwgY29tcG9uZW50ID0+IHtcbiAgICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBjb21wb25lbnQpXG4gICAgY29uc3QgZm9ybXMgPSBnZXRGb3JtU2NoZW1hcyhjb21wb25lbnQpXG4gICAgZm9yIChjb25zdCBmb3JtIG9mIE9iamVjdC52YWx1ZXMoZm9ybXMpKSB7XG4gICAgICBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMoYXBpLCBmb3JtKVxuICAgIH1cbiAgfSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NSb3V0ZVNjaGVtYShhcGksIHNjaGVtYSwgbmFtZSwgZnVsbFBhdGggPSBudWxsKSB7XG4gIC8vIFVzZWQgZm9yIHZpZXcgYW5kIHNvdXJjZSBzY2hlbWFzLCBzZWUgU291cmNlTWl4aW4uXG4gIHNjaGVtYS5uYW1lID8/PSBuYW1lXG4gIHNjaGVtYS5wYXRoID8/PSBhcGkubm9ybWFsaXplUGF0aChuYW1lKVxuICBpZiAoZnVsbFBhdGggIT09IG51bGwpIHtcbiAgICBzY2hlbWEuZnVsbFBhdGggPSBgJHtmdWxsUGF0aH0vJHtzY2hlbWEucGF0aH1gXG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpIHtcbiAgLy8gRmlyc3QgcmVzb2x2ZSB0aGUgZm9ybXMgYW5kIHN0b3JlIHRoZSByZXN1bHRzIGJhY2sgb24gdGhlIHNjaGVtYS5cbiAgbGV0IHsgZm9ybSwgZm9ybXMsIGNvbXBvbmVudHMgfSA9IHNjaGVtYVxuICBpZiAoZm9ybXMpIHtcbiAgICBmb3JtcyA9IHNjaGVtYS5mb3JtcyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKGZvcm1zLCBmb3JtID0+XG4gICAgICBwcm9jZXNzRm9ybShhcGksIGZvcm0pXG4gICAgKVxuICB9IGVsc2UgaWYgKGZvcm0pIHtcbiAgICBmb3JtID0gc2NoZW1hLmZvcm0gPSBhd2FpdCBwcm9jZXNzRm9ybShhcGksIGZvcm0pXG4gIH0gZWxzZSBpZiAoaXNPYmplY3QoY29tcG9uZW50cykpIHtcbiAgICAvLyBOT1RFOiBQcm9jZXNzaW5nIGZvcm1zIGluIGNvbXB1dGVkIGNvbXBvbmVudHMgaXMgbm90IHN1cHBvcnRlZCwgc2luY2UgaXRcbiAgICAvLyBvbmx5IGNhbiBiZSBjb21wdXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGFjdHVhbCBkYXRhLlxuICAgIGZvcm0gPSB7XG4gICAgICB0eXBlOiAnZm9ybScsXG4gICAgICBjb21wb25lbnRzXG4gICAgfVxuICB9XG5cbiAgZm9ybXMgfHw9IHsgZGVmYXVsdDogZm9ybSB9IC8vIE9ubHkgdXNlZCBmb3IgcHJvY2VzcyBsb29wIGJlbG93LlxuICBjb25zdCBjaGlsZHJlbiA9IFtdXG4gIGZvciAoY29uc3QgZm9ybSBvZiBPYmplY3QudmFsdWVzKGZvcm1zKSkge1xuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgZm9ybSwgY2hpbGRyZW4sIGxldmVsKVxuICB9XG4gIHJldHVybiBjaGlsZHJlblxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc0Zvcm0oYXBpLCBzY2hlbWEpIHtcbiAgc2NoZW1hID0gYXdhaXQgcmVzb2x2ZVNjaGVtYShzY2hlbWEsIHRydWUpXG4gIGlmICghaXNGb3JtKHNjaGVtYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgZm9ybSBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIGF3YWl0IHByb2Nlc3NOZXN0ZWRTY2hlbWFzKGFwaSwgc2NoZW1hKVxuICByZXR1cm4gc2NoZW1hXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwcm9jZXNzVGFiKGFwaSwgc2NoZW1hKSB7XG4gIHNjaGVtYSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hLCB0cnVlKVxuICBpZiAoIWlzVGFiKHNjaGVtYSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgdGFiIHNjaGVtYTogJyR7Z2V0U2NoZW1hSWRlbnRpZmllcihzY2hlbWEpfSdgKVxuICB9XG4gIHByb2Nlc3NTY2hlbWFEZWZhdWx0cyhhcGksIHNjaGVtYSlcbiAgcmV0dXJuIHNjaGVtYVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvY2Vzc1BhbmVsKGFwaSwgc2NoZW1hKSB7XG4gIHNjaGVtYSA9IGF3YWl0IHJlc29sdmVTY2hlbWEoc2NoZW1hLCB0cnVlKVxuICBpZiAoIWlzUGFuZWwoc2NoZW1hKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBwYW5lbCBzY2hlbWE6ICcke2dldFNjaGVtYUlkZW50aWZpZXIoc2NoZW1hKX0nYClcbiAgfVxuICBwcm9jZXNzU2NoZW1hRGVmYXVsdHMoYXBpLCBzY2hlbWEpXG4gIHJldHVybiBzY2hlbWFcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHByb2Nlc3NOZXN0ZWRTY2hlbWFzKGFwaSwgc2NoZW1hKSB7XG4gIGNvbnN0IHsgdGFicywgcGFuZWxzIH0gPSBzY2hlbWFcbiAgaWYgKHRhYnMpIHtcbiAgICBzY2hlbWEudGFicyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKFxuICAgICAgdGFicyxcbiAgICAgIHRhYiA9PiBwcm9jZXNzVGFiKGFwaSwgdGFiKVxuICAgIClcbiAgfVxuICBpZiAocGFuZWxzKSB7XG4gICAgc2NoZW1hLnBhbmVscyA9IGF3YWl0IHJlc29sdmVTY2hlbWFzKFxuICAgICAgcGFuZWxzLFxuICAgICAgcGFuZWwgPT4gcHJvY2Vzc1BhbmVsKGFwaSwgcGFuZWwpXG4gICAgKVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNGb3JtU2NoZW1hKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGJvdGggc2luZ2xlIGZvcm0gYW5kIG11bHRpcGxlIGZvcm1zIG5vdGF0aW9uLCBhcyB3ZWxsIGFzIGlubGluZWRcbiAgLy8gY29tcG9uZW50cy5cbiAgcmV0dXJuIChcbiAgICBpc1NjaGVtYShzY2hlbWEpICYmXG4gICAgaXNPYmplY3Qoc2NoZW1hLmZvcm0gfHwgc2NoZW1hLmZvcm1zIHx8IHNjaGVtYS5jb21wb25lbnRzKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNNdWx0aXBsZUZvcm1TY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gKFxuICAgIGlzU2NoZW1hKHNjaGVtYSkgJiZcbiAgICBPYmplY3Qua2V5cyhzY2hlbWE/LmZvcm1zIHx8IHt9KS5sZW5ndGggPiAxXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2luZ2xlQ29tcG9uZW50VmlldyhzY2hlbWEpIHtcbiAgcmV0dXJuIChcbiAgICBpc1ZpZXcoc2NoZW1hKSAmJlxuICAgIGlzT2JqZWN0KHNjaGVtYS5jb21wb25lbnQpXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICBjb25zdCB7IHZpZXcgfSA9IHNjaGVtYVxuICBjb25zdCB2aWV3U2NoZW1hID0gdmlldyAmJiBjb250ZXh0LmZsYXR0ZW5lZFZpZXdzW3ZpZXddXG4gIHJldHVybiB2aWV3U2NoZW1hXG4gICAgPyAvLyBOT1RFOiBWaWV3cyBjYW4gaGF2ZSB0YWJzLCBpbiB3aGljaCBjYXNlIHRoZSB2aWV3IGNvbXBvbmVudCBpcyBuZXN0ZWRcbiAgICAgIC8vIGluIG9uZSBvZiB0aGUgdGFicywgZ28gZmluZCBpdC5cbiAgICAgIGZpbmROZXN0ZWRTY2hlbWFDb21wb25lbnQodmlld1NjaGVtYSwgaGFzRm9ybVNjaGVtYSkgfHwgbnVsbFxuICAgIDogbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Vmlld1NjaGVtYShzY2hlbWEsIGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgICA/IGNvbnRleHQuZmxhdHRlbmVkVmlld3Nbc2NoZW1hLnZpZXddXG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dCkge1xuICByZXR1cm4gISFnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFZpZXdFZGl0UGF0aChzY2hlbWEsIGlkLCBjb250ZXh0KSB7XG4gIGNvbnN0IHZpZXcgPSBnZXRWaWV3U2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgaWYgKHZpZXcpIHtcbiAgICBjb25zdCBwYXRoID0gaXNTaW5nbGVDb21wb25lbnRWaWV3KHZpZXcpXG4gICAgICA/IHZpZXcuZnVsbFBhdGhcbiAgICAgIDogYCR7dmlldy5mdWxsUGF0aH0vJHt2aWV3LnBhdGh9YFxuICAgIHJldHVybiBgJHtwYXRofS8ke2lkfWBcbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybVNjaGVtYXMoc2NoZW1hLCBjb250ZXh0LCBtb2RpZnlGb3JtKSB7XG4gIGNvbnN0IHZpZXdTY2hlbWEgPSBjb250ZXh0ICYmIGdldFZpZXdGb3JtU2NoZW1hKHNjaGVtYSwgY29udGV4dClcbiAgaWYgKHZpZXdTY2hlbWEpIHtcbiAgICBzY2hlbWEgPSB2aWV3U2NoZW1hXG4gIH0gZWxzZSBpZiAoc2NoZW1hLnZpZXcpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVua25vd24gdmlldzogJyR7c2NoZW1hLnZpZXd9J2ApXG4gIH1cblxuICBsZXQgeyBmb3JtLCBmb3JtcyB9ID0gc2NoZW1hXG4gIGlmICghZm9ybSAmJiAhZm9ybXMpIHtcbiAgICBjb25zdCB7IG5hbWUsIGNvbXBhY3QsIGNsaXBib2FyZCwgdGFicywgY29tcG9uZW50cyB9ID0gc2NoZW1hXG4gICAgaWYgKGNvbXBvbmVudHMgfHwgdGFicykge1xuICAgICAgLy8gQ29udmVydCBpbmxpbmVkIGZvcm1zIHRvIHN0YW5kLWFsb25lIGZvcm1zLCBzdXBwb3J0aW5nIGBuYW1lYCxcbiAgICAgIC8vIGBjb21wYWN0YCwgYGNsaXBib2FyZGAsIGB0YWJzYCBhbmQgYGNvbXBvbmVudHNgIHNldHRpbmdzLlxuICAgICAgZm9ybSA9IHsgdHlwZTogJ2Zvcm0nLCBuYW1lLCBjb21wYWN0LCBjbGlwYm9hcmQsIHRhYnMsIGNvbXBvbmVudHMgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBgZm9ybXNgLCBgZm9ybWAgb3IgYGNvbXBvbmVudHNgLCByZXR1cm4gYW5kIGVtcHR5IGBmb3Jtc2Agb2JqZWN0LlxuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuICB9XG4gIGZvcm1zIHx8PSB7IGRlZmF1bHQ6IGZvcm0gfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGZvcm1zKS5tYXAoKFt0eXBlLCBmb3JtXSkgPT4ge1xuICAgICAgLy8gU3VwcG9ydCBgc2NoZW1hLmNvbXBvbmVudHNgIGNhbGxiYWNrcyB0byBjcmVhdGUgY29tcG9uZW50cyBvbiB0aGUgZmx5LlxuICAgICAgaWYgKGNvbnRleHQgJiYgaXNGdW5jdGlvbihmb3JtLmNvbXBvbmVudHMpKSB7XG4gICAgICAgIGZvcm0gPSB7XG4gICAgICAgICAgLi4uZm9ybSxcbiAgICAgICAgICBjb21wb25lbnRzOiBmb3JtLmNvbXBvbmVudHMoY29udGV4dClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIFt0eXBlLCBtb2RpZnlGb3JtPy4oZm9ybSkgPz8gZm9ybV1cbiAgICB9KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYUZyb21Gb3Jtcyhmb3JtcywgaXRlbSkge1xuICByZXR1cm4gZm9ybXNbaXRlbT8udHlwZV0gfHwgZm9ybXMuZGVmYXVsdCB8fCBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpIHtcbiAgcmV0dXJuIGdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zKGdldEZvcm1TY2hlbWFzKHNjaGVtYSwgY29udGV4dCksIGl0ZW0pXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbXBhY3Qoc2NoZW1hKSB7XG4gIHJldHVybiAhIXNjaGVtYS5jb21wYWN0XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lubGluZWQoc2NoZW1hKSB7XG4gIHJldHVybiAhIShzY2hlbWEuaW5saW5lZCB8fCBzY2hlbWEuY29tcG9uZW50cylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTmVzdGVkKHNjaGVtYSkge1xuICByZXR1cm4gISEoc2NoZW1hLm5lc3RlZCB8fCBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpPy5kZWZhdWx0TmVzdGVkID09PSB0cnVlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaGFzTGFiZWwoc2NoZW1hLCBnZW5lcmF0ZUxhYmVscykge1xuICBjb25zdCB7IGxhYmVsIH0gPSBzY2hlbWFcbiAgcmV0dXJuIChcbiAgICBsYWJlbCAhPT0gZmFsc2UgJiYgKFxuICAgICAgISFsYWJlbCB8fFxuICAgICAgZ2VuZXJhdGVMYWJlbHMgJiYgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZ2VuZXJhdGVMYWJlbFxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb21pdFNwYWNpbmcoc2NoZW1hKSB7XG4gIHJldHVybiAhIWdldFR5cGVPcHRpb25zKHNjaGVtYSk/Lm9taXRTcGFjaW5nXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTY2hlbWFWYWx1ZShcbiAga2V5T3JEYXRhUGF0aCxcbiAgeyB0eXBlLCBzY2hlbWEsIGNhbGxiYWNrID0gdHJ1ZSwgZGVmYXVsdDogZGVmLCBjb250ZXh0IH0gPSB7fVxuKSB7XG4gIGNvbnN0IHR5cGVzID0gdHlwZSAmJiBhc0FycmF5KHR5cGUpXG4gIC8vIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCBkYXRhLXBhdGhzIGluIGBrZXlPckRhdGFQYXRoYCBjYW4gb25seSBiZVxuICAvLyBwcm92aWRlZCBpbiBpbiBhcnJheSBmb3JtYXQgaGVyZTpcbiAgbGV0IHZhbHVlID0gc2NoZW1hXG4gICAgPyBpc0FycmF5KGtleU9yRGF0YVBhdGgpXG4gICAgICA/IGdldFZhbHVlQXREYXRhUGF0aChzY2hlbWEsIGtleU9yRGF0YVBhdGgsICgpID0+IHVuZGVmaW5lZClcbiAgICAgIDogc2NoZW1hW2tleU9yRGF0YVBhdGhdXG4gICAgOiB1bmRlZmluZWRcblxuICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiBkZWYgIT09IHVuZGVmaW5lZCkge1xuICAgIGlmIChjYWxsYmFjayAmJiBpc0Z1bmN0aW9uKGRlZikgJiYgIWlzTWF0Y2hpbmdUeXBlKHR5cGVzLCBkZWYpKSB7XG4gICAgICAvLyBTdXBwb3J0IGBkZWZhdWx0KClgIGZ1bmN0aW9ucyBmb3IgYW55IHR5cGUgZXhjZXB0IGBGdW5jdGlvbmA6XG4gICAgICBkZWYgPSBkZWYoY29udGV4dClcbiAgICB9XG4gICAgcmV0dXJuIGRlZlxuICB9XG5cbiAgaWYgKGlzTWF0Y2hpbmdUeXBlKHR5cGVzLCB2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuICAvLyBBbnkgc2NoZW1hIHZhbHVlIGhhbmRsZWQgdGhyb3VnaCBgZ2V0U2NoZW1hVmFsdWUoKWAgY2FuIHByb3ZpZGVcbiAgLy8gYSBmdW5jdGlvbiB0aGF0J3MgcmVzb2x2ZWQgd2hlbiB0aGUgdmFsdWUgaXMgZXZhbHVhdGVkOlxuICBpZiAoY2FsbGJhY2sgJiYgaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICB2YWx1ZSA9IHZhbHVlKGNvbnRleHQpXG4gIH1cbiAgLy8gTm93IGZpbmFsbHkgc2VlIGlmIHdlIGNhbiBjb252ZXJ0IHRvIHRoZSBleHBlY3QgdHlwZXMuXG4gIGlmICh0eXBlcyAmJiB2YWx1ZSAhPSBudWxsICYmICFpc01hdGNoaW5nVHlwZSh0eXBlcywgdmFsdWUpKSB7XG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICBjb25zdCBjb252ZXJ0ZWQgPSBjb252ZXJ0VHlwZSh0eXBlLCB2YWx1ZSlcbiAgICAgIGlmIChjb252ZXJ0ZWQgIT09IHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBjb252ZXJ0ZWRcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHZhbHVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRSZW5kZXJTY2hlbWEoc2NoZW1hLCBjb250ZXh0KSB7XG4gIHJldHVybiAoXG4gICAgZ2V0U2NoZW1hVmFsdWUoJ2lmJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIHNjaGVtYSxcbiAgICAgIGNvbnRleHQsXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSkgJiYgKFxuICAgICAgIWhhc05lc3RlZFNjaGVtYUNvbXBvbmVudHMoc2NoZW1hKSB8fFxuICAgICAgc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudChzY2hlbWEsIGNvbXBvbmVudCA9PlxuICAgICAgICBzaG91bGRSZW5kZXJTY2hlbWEoY29tcG9uZW50LCBjb250ZXh0KVxuICAgICAgKVxuICAgIClcbiAgKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICAvLyBTdXBwb3J0IGRlZmF1bHQgdmFsdWVzIGJvdGggb24gc2NoZW1hIGFuZCBvbiBjb21wb25lbnQgbGV2ZWwuXG4gIC8vIE5PVEU6IEF0IHRoZSB0aW1lIG9mIGNyZWF0aW9uLCBjb21wb25lbnRzIG1heSBub3QgYmUgaW5zdGFudGlhdGVkLCAoZS5nLiBpZlxuICAvLyBlbnRyaWVzIGFyZSBjcmVhdGVkIHRocm91Z2ggbmVzdGVkIGZvcm1zLCB0aGUgcGFyZW50IGZvcm0gaXNuJ3QgbW91bnRlZCkgc29cbiAgLy8gd2UgY2FuJ3QgdXNlIGBkYXRhUGF0aGAgdG8gZ2V0IHRvIGNvbXBvbmVudHMsIGFuZCB0aGUgYGRlZmF1bHRWYWx1ZWAgZnJvbVxuICAvLyB0aGVyZS4gVGhhdCdzIHdoeSBgZGVmYXVsdFZhbHVlYCBpcyBkZWZpbmVkIHN0YXRpY2FsbHkgaW4gdGhlIGNvbXBvbmVudHM6XG4gIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IHNjaGVtYS5kZWZhdWx0XG4gIGNvbnN0IHZhbHVlID1cbiAgICBkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZFxuICAgICAgPyBkZWZhdWx0VmFsdWVcbiAgICAgIDogZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZGVmYXVsdFZhbHVlXG4gIHJldHVybiBpc0Z1bmN0aW9uKHZhbHVlKVxuICAgID8gdmFsdWUoc2NoZW1hKVxuICAgIDogY2xvbmUodmFsdWUpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSB7XG4gIGNvbnN0IHR5cGVPcHRpb25zID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKVxuICByZXR1cm4gISEoXG4gICAgdHlwZU9wdGlvbnM/LmV4Y2x1ZGVWYWx1ZSB8fCB0eXBlT3B0aW9ucz8uaWdub3JlTWlzc2luZ1ZhbHVlPy4oc2NoZW1hKVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXREZWZhdWx0VmFsdWVzKHNjaGVtYSwgZGF0YSA9IHt9LCBjb21wb25lbnQpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YTogZGF0YSB9XG5cbiAgY29uc3QgcHJvY2Vzc0JlZm9yZSA9IChzY2hlbWEsIGRhdGEsIG5hbWUpID0+IHtcbiAgICBpZiAoIShuYW1lIGluIGRhdGEpICYmICFpZ25vcmVNaXNzaW5nVmFsdWUoc2NoZW1hKSkge1xuICAgICAgZGF0YVtuYW1lXSA9IGdldERlZmF1bHRWYWx1ZShzY2hlbWEpXG4gICAgfVxuICB9XG5cbiAgLy8gU2V0cyB1cCBhIGRhdGEgb2JqZWN0IHRoYXQgaGFzIGtleXMgd2l0aCBkZWZhdWx0IHZhbHVlcyBmb3IgYWxsXG4gIC8vIGZvcm0gZmllbGRzLCBzbyB0aGV5IGNhbiBiZSBjb3JyZWN0bHkgd2F0Y2hlZCBmb3IgY2hhbmdlcy5cbiAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgIHNjaGVtYSxcbiAgICBkYXRhLFxuICAgIG51bGwsXG4gICAgbnVsbCxcbiAgICBwcm9jZXNzQmVmb3JlLFxuICAgIG51bGwsXG4gICAgb3B0aW9uc1xuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQgPSBudWxsLFxuICByb290RGF0YSA9IGNvbXBvbmVudD8ucm9vdERhdGFcbn0gPSB7fSkge1xuICBjb25zdCB7IGNvbXB1dGUgfSA9IHNjaGVtYVxuICBpZiAoY29tcHV0ZSkge1xuICAgIGNvbnN0IHZhbHVlID0gY29tcHV0ZShcbiAgICAgIG5ldyBEaXRvQ29udGV4dChjb21wb25lbnQsIHtcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICAvLyBPdmVycmlkZSB2YWx1ZSB0byBwcmV2ZW50IGVuZGxlc3MgcmVjdXJzaW9uIHRocm91Z2ggY2FsbGluZyB0aGVcbiAgICAgICAgLy8gZ2V0dGVyIGZvciBgdGhpcy52YWx1ZWAgaW4gYERpdG9Db250ZXh0YDpcbiAgICAgICAgdmFsdWU6IGRhdGFbbmFtZV0sXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICByb290RGF0YVxuICAgICAgfSlcbiAgICApXG4gICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEFjY2VzcyBgZGF0YVtuYW1lXWAgZGlyZWN0bHkgdG8gdXBkYXRlIHRoZSB2YWx1ZSB3aXRob3V0IGNhbGxpbmdcbiAgICAgIC8vIHBhcnNlKCk6XG4gICAgICBkYXRhW25hbWVdID0gdmFsdWVcbiAgICB9XG4gIH1cbiAgLy8gSWYgdGhlIHZhbHVlIGlzIHN0aWxsIG1pc3NpbmcgYWZ0ZXIgY29tcHV0ZSwgc2V0IHRoZSBkZWZhdWx0IGZvciBpdDpcbiAgaWYgKCEobmFtZSBpbiBkYXRhKSAmJiAhaWdub3JlTWlzc2luZ1ZhbHVlKHNjaGVtYSkpIHtcbiAgICBkYXRhW25hbWVdID0gZ2V0RGVmYXVsdFZhbHVlKHNjaGVtYSlcbiAgfVxuICAvLyBOb3cgYWNjZXNzIHRoZSB2YWx1ZS4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIHJlYWN0aXZpdHkgYW5kIG5lZWRzIHRvXG4gIC8vIGhhcHBlbiBhZnRlciBhbGwgcHJpb3IgbWFuaXB1bGF0aW9uIG9mIGBkYXRhW25hbWVdYCwgc2VlIGFib3ZlOlxuICByZXR1cm4gZGF0YVtuYW1lXVxufVxuXG5mdW5jdGlvbiBjbG9uZUl0ZW0oc291cmNlU2NoZW1hLCBpdGVtLCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zLnNjaGVtYU9ubHkpIHtcbiAgICBjb25zdCBjb3B5ID0ge31cbiAgICBjb25zdCB7IGlkS2V5ID0gJ2lkJywgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgIGNvbnN0IGlkID0gaXRlbVtpZEtleV1cbiAgICBpZiAoaWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29weVtpZEtleV0gPSBpZFxuICAgIH1cbiAgICAvLyBDb3B5IG92ZXIgdHlwZSBpbiBjYXNlIHRoZXJlIGFyZSBtdWx0aXBsZSBmb3JtcyB0byBjaG9vc2UgZnJvbS5cbiAgICBpZiAoaGFzTXVsdGlwbGVGb3JtU2NoZW1hcyhzb3VyY2VTY2hlbWEpKSB7XG4gICAgICBjb3B5LnR5cGUgPSBpdGVtLnR5cGVcbiAgICB9XG4gICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICBjb3B5W29yZGVyS2V5XSA9IGl0ZW1bb3JkZXJLZXldXG4gICAgfVxuICAgIHJldHVybiBjb3B5XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHsgLi4uaXRlbSB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NEYXRhKHNjaGVtYSwgc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGF0aCwge1xuICBjb21wb25lbnQsXG4gIHJvb3REYXRhLFxuICBzY2hlbWFPbmx5LCAvLyB3aGV0aGVyIHRvIG9ubHkgaW5jbHVkZSBkYXRhIGNvdmVyZWQgYnkgdGhlIHNjaGVtYSwgb3IgYWxsIGRhdGFcbiAgdGFyZ2V0XG59ID0ge30pIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHsgY29tcG9uZW50LCByb290RGF0YSwgc2NoZW1hT25seSwgdGFyZ2V0IH1cbiAgY29uc3QgcHJvY2Vzc2VkRGF0YSA9IGNsb25lSXRlbShzb3VyY2VTY2hlbWEsIGRhdGEsIG9wdGlvbnMpXG4gIGNvbnN0IGdyYXBoID0gbmV3IFNjaGVtYUdyYXBoKClcblxuICBjb25zdCBwcm9jZXNzQmVmb3JlID0gKHNjaGVtYSwgZGF0YSwgbmFtZSwgZGF0YVBhdGgsIHByb2Nlc3NlZERhdGEpID0+IHtcbiAgICBsZXQgdmFsdWUgPSBjb21wdXRlVmFsdWUoc2NoZW1hLCBkYXRhLCBuYW1lLCBkYXRhUGF0aCwgb3B0aW9ucylcbiAgICAvLyBUaGUgc2NoZW1hIGV4cGVjdHMgdGhlIGB3cmFwUHJpbWl0aXZlc2AgdHJhbnNmb3JtYXRpb25zIHRvIGJlIHByZXNlbnQgb25cbiAgICAvLyB0aGUgZGF0YSB0aGF0IGl0IGlzIGFwcGxpZWQgb24sIHNvIHdhcnAgYmVmb3JlIGFuZCB1bndyYXAgYWZ0ZXIuXG4gICAgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBjb25zdCB7IHdyYXBQcmltaXRpdmVzLCBvcmRlcktleSwgaWRLZXkgPSAnaWQnIH0gPSBzY2hlbWFcbiAgICAgIGlmICh3cmFwUHJpbWl0aXZlcykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLm1hcChlbnRyeSA9PiAoe1xuICAgICAgICAgIFt3cmFwUHJpbWl0aXZlc106IGVudHJ5XG4gICAgICAgIH0pKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gQWx3YXlzIHNoYWxsb3ctY2xvbmUgYXJyYXkgdmFsdWVzOlxuICAgICAgICB2YWx1ZSA9IFsuLi52YWx1ZV1cbiAgICAgIH1cbiAgICAgIGlmIChvcmRlcktleSAmJiB0YXJnZXQgPT09ICdjbGlwYm9hcmQnKSB7XG4gICAgICAgIC8vIFNvcnQgdGhlIGRhdGEgYmFjayBpbnRvIHRoZSBuYXR1cmFsIHNlcXVlbmNlIGFzIGRlZmluZWQgYnkgdGhlaXIgaWRzLFxuICAgICAgICAvLyBzbyBjb3B5LXBhc3RpbmcgYmV0d2VlbiBzZXJ2ZXJzIChlLmcuIG5lc3RlZCBmb250LWN1dHMgb24gTGluZXRvKVxuICAgICAgICAvLyBuYXR1cmFsbHkgZ2V0cyBtYXBwZWQgdG8gdGhlIHNhbWUgZW50cmllcyBpbiB0aGUgZ3JhcGguXG4gICAgICAgIHZhbHVlLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgICBjb25zdCBpZDEgPSBhPy5baWRLZXldXG4gICAgICAgICAgY29uc3QgaWQyID0gYj8uW2lkS2V5XVxuICAgICAgICAgIHJldHVybiBpZDEgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMSlcbiAgICAgICAgICAgID8gMVxuICAgICAgICAgICAgOiBpZDIgPT0gbnVsbCB8fCBpc1RlbXBvcmFyeUlkKGlkMilcbiAgICAgICAgICAgICAgPyAtMVxuICAgICAgICAgICAgICA6IGlkMSAtIGlkMlxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgfVxuXG4gIGNvbnN0IHByb2Nlc3NBZnRlciA9IChzY2hlbWEsIGRhdGEsIG5hbWUsIGRhdGFQYXRoLCBwcm9jZXNzZWREYXRhKSA9PiB7XG4gICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcywgZXhjbHVkZSwgcHJvY2VzcyB9ID0gc2NoZW1hXG4gICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YVtuYW1lXVxuXG4gICAgY29uc3QgdHlwZU9wdGlvbnMgPSBnZXRUeXBlT3B0aW9ucyhzY2hlbWEpXG5cbiAgICAvLyBOT1RFOiBXZSBkb24ndCBjYWNoZSB0aGlzIGNvbnRleHQsIHNpbmNlIGB2YWx1ZWAgaXMgY2hhbmdpbmcuXG4gICAgY29uc3QgZ2V0Q29udGV4dCA9ICgpID0+XG4gICAgICBuZXcgRGl0b0NvbnRleHQoY29tcG9uZW50LCB7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRhdGEsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICByb290RGF0YTogb3B0aW9ucy5yb290RGF0YSxcbiAgICAgICAgLy8gUGFzcyB0aGUgYWxyZWFkeSBwcm9jZXNzZWQgZGF0YSB0byBgcHJvY2VzcygpYCwgc28gaXQgY2FuIGJlIG1vZGlmaWVkXG4gICAgICAgIC8vIHRocm91Z2ggYHByb2Nlc3NlZEl0ZW1gIGZyb20gdGhlcmUuXG4gICAgICAgIHByb2Nlc3NlZERhdGFcbiAgICAgIH0pXG5cbiAgICAvLyBGaXJzdCB1bndyYXAgdGhlIHdyYXBwZWQgcHJpbWl0aXZlcyBhZ2FpbiwgdG8gYnJpbmcgdGhlIGRhdGEgYmFjayBpbnRvXG4gICAgLy8gaXRzIG5hdGl2ZSBmb3JtLiBTZSBgcHJvY2Vzc0JlZm9yZSgpYCBmb3IgbW9yZSBkZXRhaWxzLlxuICAgIGlmICh3cmFwUHJpbWl0aXZlcyAmJiBpc0FycmF5KHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZS5tYXAob2JqZWN0ID0+IG9iamVjdFt3cmFwUHJpbWl0aXZlc10pXG4gICAgfVxuXG4gICAgLy8gRWFjaCBjb21wb25lbnQgdHlwZSBjYW4gcHJvdmlkZSBpdHMgb3duIHN0YXRpYyBgcHJvY2Vzc1ZhbHVlKClgIG1ldGhvZFxuICAgIC8vIHRvIGNvbnZlcnQgdGhlIGRhdGEgZm9yIHN0b3JhZ2UuXG4gICAgY29uc3QgcHJvY2Vzc1ZhbHVlID0gdHlwZU9wdGlvbnM/LnByb2Nlc3NWYWx1ZVxuICAgIGlmIChwcm9jZXNzVmFsdWUpIHtcbiAgICAgIHZhbHVlID0gcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaClcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgdGhlIHVzZXIncyBgcHJvY2VzcygpYCBjYWxsYmFjayBuZXh0LCBpZiBvbmUgaXMgcHJvdmlkZWQsIHNvIHRoYXRcbiAgICAvLyBpdCBjYW4gbW9kaWZ5IGRhdGEgaW4gYHByb2Nlc3NlZERhdGFgIGV2ZW4gaWYgaXQgcHJvdmlkZXMgYGV4Y2x1ZGU6IHRydWVgXG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIHZhbHVlID0gcHJvY2VzcyhnZXRDb250ZXh0KCkpXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgdHlwZU9wdGlvbnM/LmV4Y2x1ZGVWYWx1ZSB8fFxuICAgICAgLy8gU3VwcG9ydCBmdW5jdGlvbnMgbmV4dCB0byBib29sZWFucyBmb3IgYHNjaGVtYS5leGNsdWRlYDpcbiAgICAgIGV4Y2x1ZGUgPT09IHRydWUgfHxcbiAgICAgIGlzRnVuY3Rpb24oZXhjbHVkZSkgJiYgZXhjbHVkZShnZXRDb250ZXh0KCkpXG4gICAgKSB7XG4gICAgICBkZWxldGUgcHJvY2Vzc2VkRGF0YVtuYW1lXVxuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jZXNzZWREYXRhW25hbWVdID0gdmFsdWVcbiAgICB9XG4gIH1cblxuICBwcm9jZXNzU2NoZW1hRGF0YShcbiAgICBzY2hlbWEsXG4gICAgZGF0YSxcbiAgICBkYXRhUGF0aCxcbiAgICBwcm9jZXNzZWREYXRhLFxuICAgIHByb2Nlc3NCZWZvcmUsXG4gICAgcHJvY2Vzc0FmdGVyLFxuICAgIG9wdGlvbnNcbiAgKVxuXG4gIHJldHVybiBncmFwaC5wcm9jZXNzKHNvdXJjZVNjaGVtYSwgcHJvY2Vzc2VkRGF0YSwgb3B0aW9ucylcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb2Nlc3NTY2hlbWFEYXRhKFxuICBzY2hlbWEsXG4gIGRhdGEsXG4gIGRhdGFQYXRoLFxuICBwcm9jZXNzZWREYXRhLFxuICBwcm9jZXNzQmVmb3JlLFxuICBwcm9jZXNzQWZ0ZXIsXG4gIG9wdGlvbnNcbikge1xuICBjb25zdCBwcm9jZXNzQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgPT4ge1xuICAgIGNvbnN0IGdldERhdGFQYXRoID0gKGRhdGFQYXRoLCB0b2tlbikgPT5cbiAgICAgIGRhdGFQYXRoICE9IG51bGxcbiAgICAgICAgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgdG9rZW4pXG4gICAgICAgIDogbnVsbFxuXG4gICAgaWYgKGNvbXBvbmVudHMpIHtcbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGNvbXBvbmVudFNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKCFpc05lc3RlZChjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgLy8gUmVjdXJzaXZlbHkgcHJvY2VzcyBkYXRhIG9uIHVubmVzdGVkIGNvbXBvbmVudHMuXG4gICAgICAgICAgcHJvY2Vzc1NjaGVtYURhdGEoXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgZGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhLFxuICAgICAgICAgICAgcHJvY2Vzc0JlZm9yZSxcbiAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50RGF0YVBhdGggPSBnZXREYXRhUGF0aChkYXRhUGF0aCwgbmFtZSlcblxuICAgICAgICAgIGNvbnN0IHByb2Nlc3NJdGVtID0gKGl0ZW0sIGluZGV4ID0gbnVsbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaXRlbURhdGFQYXRoID1cbiAgICAgICAgICAgICAgaW5kZXggIT09IG51bGxcbiAgICAgICAgICAgICAgICA/IGdldERhdGFQYXRoKGNvbXBvbmVudERhdGFQYXRoLCBpbmRleClcbiAgICAgICAgICAgICAgICA6IGNvbXBvbmVudERhdGFQYXRoXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gbmV3IERpdG9Db250ZXh0KG9wdGlvbnMuY29tcG9uZW50LCB7XG4gICAgICAgICAgICAgIHNjaGVtYTogY29tcG9uZW50U2NoZW1hLFxuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBkYXRhUGF0aDogY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIHJvb3REYXRhOiBvcHRpb25zLnJvb3REYXRhXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgY29uc3QgZ2V0Rm9ybXMgPSAoXG4gICAgICAgICAgICAgIGdldFR5cGVPcHRpb25zKGNvbXBvbmVudFNjaGVtYSk/LmdldEZvcm1TY2hlbWFzRm9yUHJvY2Vzc2luZyB8fFxuICAgICAgICAgICAgICBnZXRGb3JtU2NoZW1hc1xuICAgICAgICAgICAgKVxuICAgICAgICAgICAgY29uc3QgZm9ybXMgPSBnZXRGb3Jtcyhjb21wb25lbnRTY2hlbWEsIGNvbnRleHQpXG4gICAgICAgICAgICBjb25zdCBmb3JtID0gZ2V0SXRlbUZvcm1TY2hlbWFGcm9tRm9ybXMoZm9ybXMsIGl0ZW0pXG4gICAgICAgICAgICBpZiAoZm9ybSkge1xuICAgICAgICAgICAgICBjb25zdCBwcm9jZXNzZWRJdGVtID0gcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgICAgICAgID8gY2xvbmVJdGVtKGNvbXBvbmVudFNjaGVtYSwgaXRlbSwgb3B0aW9ucylcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgICAgICAgcmV0dXJuIHByb2Nlc3NTY2hlbWFEYXRhKFxuICAgICAgICAgICAgICAgIGZvcm0sXG4gICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICBpdGVtRGF0YVBhdGgsXG4gICAgICAgICAgICAgICAgcHJvY2Vzc2VkSXRlbSxcbiAgICAgICAgICAgICAgICBwcm9jZXNzQmVmb3JlLFxuICAgICAgICAgICAgICAgIHByb2Nlc3NBZnRlcixcbiAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEl0ZW1zIHdpdGhvdXQgZm9ybXMgc3RpbGwgZ2V0IGZ1bGx5IChidXQgc2hhbGxvd2x5KSBjbG9uZWQuXG4gICAgICAgICAgICAgIC8vIFRPRE86IEZpbmQgb3V0IG9mIHRoaXMgaXMgYWN0dWFsbHkgbmVlZGVkIC8gdXNlZCBhdCBhbGw/XG4gICAgICAgICAgICAgIHJldHVybiB7IC4uLml0ZW0gfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHByb2Nlc3NCZWZvcmU/LihcbiAgICAgICAgICAgIGNvbXBvbmVudFNjaGVtYSxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgY29tcG9uZW50RGF0YVBhdGgsXG4gICAgICAgICAgICBwcm9jZXNzZWREYXRhXG4gICAgICAgICAgKVxuXG4gICAgICAgICAgbGV0IHZhbHVlID0gcHJvY2Vzc2VkRGF0YSA/IHByb2Nlc3NlZERhdGFbbmFtZV0gOiBkYXRhW25hbWVdXG4gICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgaGFzRm9ybVNjaGVtYShjb21wb25lbnRTY2hlbWEpKSB7XG4gICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBwcm9jZXNzIGRhdGEgb24gbmVzdGVkIGZvcm0gaXRlbXMuXG4gICAgICAgICAgICBpZiAoaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgLy8gT3B0aW1pemF0aW9uOiBObyBuZWVkIHRvIGNvbGxlY3QgdmFsdWVzIGlmIHdlJ3JlIG5vdCBjbG9uaW5nIVxuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NlZERhdGFcbiAgICAgICAgICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzSXRlbSlcbiAgICAgICAgICAgICAgICA6IHZhbHVlLmZvckVhY2gocHJvY2Vzc0l0ZW0pXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YWx1ZSA9IHByb2Nlc3NJdGVtKHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHByb2Nlc3NlZERhdGEpIHtcbiAgICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVtuYW1lXSA9IHZhbHVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcHJvY2Vzc0FmdGVyPy4oXG4gICAgICAgICAgICBjb21wb25lbnRTY2hlbWEsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgIGNvbXBvbmVudERhdGFQYXRoLFxuICAgICAgICAgICAgcHJvY2Vzc2VkRGF0YVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByb2Nlc3NDb21wb25lbnRzKHNjaGVtYS5jb21wb25lbnRzKVxuICBmb3IgKGNvbnN0IHRhYiBvZiBnZXRUYWJTY2hlbWFzKHNjaGVtYSkpIHtcbiAgICBwcm9jZXNzQ29tcG9uZW50cyh0YWIuY29tcG9uZW50cylcbiAgfVxuICBmb3IgKGNvbnN0IHBhbmVsIG9mIGdldFBhbmVsU2NoZW1hcyhzY2hlbWEpKSB7XG4gICAgcHJvY2Vzc0NvbXBvbmVudHMocGFuZWwuY29tcG9uZW50cylcbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzZWREYXRhIHx8IGRhdGFcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldE5hbWVkU2NoZW1hcyhzY2hlbWFzLCBkZWZhdWx0cykge1xuICBjb25zdCB0b09iamVjdCA9IChhcnJheSwgdG9TY2hlbWEpID0+IHtcbiAgICByZXR1cm4gYXJyYXkubGVuZ3RoID4gMFxuICAgICAgPyBhcnJheS5yZWR1Y2UoKG9iamVjdCwgdmFsdWUpID0+IHtcbiAgICAgICAgICBjb25zdCBzY2hlbWEgPSB0b1NjaGVtYSh2YWx1ZSlcbiAgICAgICAgICBpZiAoc2NoZW1hKSB7XG4gICAgICAgICAgICBvYmplY3Rbc2NoZW1hLm5hbWVdID1cbiAgICAgICAgICAgICAgc2NoZW1hICYmIGRlZmF1bHRzXG4gICAgICAgICAgICAgICAgPyB7IC4uLmRlZmF1bHRzLCAuLi5zY2hlbWEgfVxuICAgICAgICAgICAgICAgIDogc2NoZW1hXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBvYmplY3RcbiAgICAgICAgfSwge30pXG4gICAgICA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBpc0FycmF5KHNjaGVtYXMpXG4gICAgPyB0b09iamVjdChzY2hlbWFzLCB2YWx1ZSA9PlxuICAgICAgICBpc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICA/IHZhbHVlXG4gICAgICAgICAgOiB7XG4gICAgICAgICAgICAgIG5hbWU6IGNhbWVsaXplKHZhbHVlLCBmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgIClcbiAgICA6IGlzT2JqZWN0KHNjaGVtYXMpXG4gICAgICA/IHRvT2JqZWN0KFxuICAgICAgICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYXMpLFxuICAgICAgICAgIChbbmFtZSwgdmFsdWVdKSA9PlxuICAgICAgICAgICAgaXNPYmplY3QodmFsdWUpXG4gICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgIC4uLnZhbHVlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA6IGlzU3RyaW5nKHZhbHVlKVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogdmFsdWVcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgKVxuICAgICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXR0b25TY2hlbWFzKGJ1dHRvbnMpIHtcbiAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyhcbiAgICBidXR0b25zLFxuICAgIHsgdHlwZTogJ2J1dHRvbicgfSAvLyBEZWZhdWx0c1xuICApXG59XG5cbmZ1bmN0aW9uIGdldFR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiBpc09iamVjdChzY2hlbWFPclR5cGUpID8gc2NoZW1hT3JUeXBlLnR5cGUgOiBzY2hlbWFPclR5cGVcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFR5cGVPcHRpb25zKHNjaGVtYU9yVHlwZSkge1xuICByZXR1cm4gZ2V0VHlwZUNvbXBvbmVudChnZXRUeXBlKHNjaGVtYU9yVHlwZSksIHRydWUpID8/IG51bGxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSB7XG4gIHJldHVybiAoXG4gICAgZ2V0VHlwZU9wdGlvbnMoc2NoZW1hT3JUeXBlKT8uZ2V0U291cmNlVHlwZT8uKGdldFR5cGUoc2NoZW1hT3JUeXBlKSkgPz9cbiAgICBudWxsXG4gIClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFBhbmVsRW50cnkoc2NoZW1hLCBkYXRhUGF0aCA9IG51bGwsIHRhYkNvbXBvbmVudCA9IG51bGwpIHtcbiAgcmV0dXJuIHNjaGVtYVxuICAgID8ge1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIG5hbWUsIGFwcGVuZCBpdCB0byB0aGUgZGF0YVBhdGguXG4gICAgICAgIC8vIFRoaXMgaXMgdXNlZCBlLmcuIGZvciAkZmlsdGVycyBwYW5lbHMuXG4gICAgICAgIGRhdGFQYXRoOlxuICAgICAgICAgIGRhdGFQYXRoICE9IG51bGwgJiYgc2NoZW1hLm5hbWVcbiAgICAgICAgICAgID8gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNjaGVtYS5uYW1lKVxuICAgICAgICAgICAgOiBkYXRhUGF0aCxcbiAgICAgICAgdGFiQ29tcG9uZW50XG4gICAgICB9XG4gICAgOiBudWxsXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQYW5lbEVudHJpZXMoXG4gIHBhbmVsU2NoZW1hcyxcbiAgZGF0YVBhdGggPSBudWxsLFxuICB0YWJDb21wb25lbnQgPSBudWxsLFxuICBwYW5lbEVudHJpZXMgPSBbXVxuKSB7XG4gIGlmIChwYW5lbFNjaGVtYXMpIHtcbiAgICBmb3IgKGNvbnN0IFtrZXksIHNjaGVtYV0gb2YgT2JqZWN0LmVudHJpZXMocGFuZWxTY2hlbWFzKSkge1xuICAgICAgY29uc3QgZW50cnkgPSBnZXRQYW5lbEVudHJ5KFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGRhdGFQYXRoICE9IG51bGwgPyBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwga2V5KSA6IG51bGwsXG4gICAgICAgIHRhYkNvbXBvbmVudFxuICAgICAgKVxuICAgICAgaWYgKGVudHJ5KSB7XG4gICAgICAgIHBhbmVsRW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gcGFuZWxFbnRyaWVzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUYWJTY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hPy50YWJzID8gT2JqZWN0LnZhbHVlcyhzY2hlbWEudGFicykgOiBbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFuZWxTY2hlbWFzKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hPy5wYW5lbHMgPyBPYmplY3QudmFsdWVzKHNjaGVtYS5wYW5lbHMpIDogW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFsbFBhbmVsRW50cmllcyhcbiAgYXBpLFxuICBzY2hlbWEsXG4gIGRhdGFQYXRoID0gbnVsbCxcbiAgY29tcG9uZW50ID0gbnVsbCxcbiAgdGFiQ29tcG9uZW50ID0gbnVsbFxuKSB7XG4gIGNvbnN0IHBhbmVsU2NoZW1hID0gZ2V0VHlwZU9wdGlvbnMoc2NoZW1hKT8uZ2V0UGFuZWxTY2hlbWE/LihcbiAgICBhcGksXG4gICAgc2NoZW1hLFxuICAgIGRhdGFQYXRoLFxuICAgIGNvbXBvbmVudFxuICApXG4gIGNvbnN0IHBhbmVsRW50cmllcyA9IHBhbmVsU2NoZW1hXG4gICAgPyBbZ2V0UGFuZWxFbnRyeShwYW5lbFNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCldXG4gICAgOiBbXVxuICAvLyBBbGxvdyBlYWNoIGNvbXBvbmVudCB0byBwcm92aWRlIGl0cyBvd24gc2V0IG9mIHBhbmVscywgaW5cbiAgLy8gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgb25lIChlLmcuIGdldEZpbHRlcnNQYW5lbCgpLCAkZmlsdGVycyk6XG4gIGdldFBhbmVsRW50cmllcyhzY2hlbWE/LnBhbmVscywgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCwgcGFuZWxFbnRyaWVzKVxuICByZXR1cm4gcGFuZWxFbnRyaWVzXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc09iamVjdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ29iamVjdCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzTGlzdFNvdXJjZShzY2hlbWFPclR5cGUpIHtcbiAgcmV0dXJuIGdldFNvdXJjZVR5cGUoc2NoZW1hT3JUeXBlKSA9PT0gJ2xpc3QnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKSB7XG4gIGNvbnN0IGlkID0gaXRlbVtzb3VyY2VTY2hlbWEuaWRLZXkgfHwgJ2lkJ11cbiAgcmV0dXJuIGlkICE9IG51bGwgPyBTdHJpbmcoaWQpIDogdW5kZWZpbmVkXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRJdGVtVWlkKHNvdXJjZVNjaGVtYSwgaXRlbSkge1xuICAvLyBUcnkgdG8gdXNlIHRoZSBpdGVtIGlkIGFzIHRoZSB1aWQsIGZhbGxpbmcgYmFjayBvbiBhdXRvLWdlbmVyYXRlZCBpZHMsIGJ1dFxuICAvLyBlaXRoZXIgd2F5LCBwYXNzIHRocm91Z2ggYGdldFVpZCgpYCBzbyB0aGF0IHRoZSBpZHMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGVcbiAgLy8gaXRlbSB0aHJvdWdoIGEgd2VhayBtYXAsIGFzIHRoZSBpZHMgY2FuIGJlIGZpbHRlcmVkIG91dCBpbiBgcHJvY2Vzc0RhdGEoKWBcbiAgLy8gd2hpbGUgdGhlIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIHVpZHMgYXMga2V5IGFyZSBzdGlsbCB2aXNpYmxlLlxuICByZXR1cm4gZ2V0VWlkKGl0ZW0sIGl0ZW0gPT4gZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSkpXG59XG4iLCJpbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIHBpY2tCeSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNSZXNvdXJjZShzY2hlbWEpIHtcbiAgcmV0dXJuICEhZ2V0UmVzb3VyY2Uoc2NoZW1hLnJlc291cmNlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzb3VyY2UocmVzb3VyY2UsIGRlZmF1bHRzID0ge30pIHtcbiAgY29uc3QgeyBwYXJlbnQsIC4uLmRlZnMgfSA9IGRlZmF1bHRzXG4gIHJlc291cmNlID0gaXNPYmplY3QocmVzb3VyY2UpXG4gICAgPyB7IC4uLmRlZnMsIC4uLnJlc291cmNlIH1cbiAgICA6IGlzU3RyaW5nKHJlc291cmNlKVxuICAgICAgPyB7IC4uLmRlZnMsIHBhdGg6IHJlc291cmNlIH1cbiAgICAgIDogbnVsbFxuICAvLyBPbmx5IHNldCBwYXJlbnQgaWYgcGF0aCBkb2Vzbid0IHN0YXJ0IHdpdGggJy8nLCBzbyByZWxhdGl2ZSBVUkxzIGFyZVxuICAvLyBkZWFsdCB3aXRoIGNvcnJlY3RseS5cbiAgaWYgKFxuICAgIHJlc291cmNlICYmXG4gICAgcGFyZW50ICE9PSB1bmRlZmluZWQgJiZcbiAgICByZXNvdXJjZS5wYXJlbnQgPT09IHVuZGVmaW5lZCAmJlxuICAgICFyZXNvdXJjZS5wYXRoPy5zdGFydHNXaXRoKCcvJylcbiAgKSB7XG4gICAgcmVzb3VyY2UucGFyZW50ID0gcGFyZW50XG4gICAgaWYgKCFyZXNvdXJjZS5wYXRoKSB7XG4gICAgICByZXNvdXJjZS5wYXRoID0gJy4nXG4gICAgfVxuICB9XG4gIHJldHVybiByZXNvdXJjZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWVtYmVyUmVzb3VyY2UoaWQsIHJlc291cmNlKSB7XG4gIHJldHVybiBpZCAhPSBudWxsICYmIHJlc291cmNlPy50eXBlID09PSAnY29sbGVjdGlvbidcbiAgICA/IHtcbiAgICAgICAgdHlwZTogJ21lbWJlcicsXG4gICAgICAgIC4uLnBpY2tCeShcbiAgICAgICAgICByZXNvdXJjZSxcbiAgICAgICAgICAodmFsdWUsIGtleSkgPT4gWydtZXRob2QnLCAncGF0aCcsICdwYXJlbnQnXS5pbmNsdWRlcyhrZXkpXG4gICAgICAgICksXG4gICAgICAgIGlkOiBgJHtpZH1gXG4gICAgICB9XG4gICAgOiBudWxsXG59XG4iLCJpbXBvcnQge1xuICBpc09iamVjdCxcbiAgaXNTdHJpbmcsXG4gIGlzRnVuY3Rpb24sXG4gIGVxdWFscyxcbiAgbGFiZWxpemUsXG4gIGh5cGhlbmF0ZSxcbiAgZm9ybWF0XG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgYXBwU3RhdGUgZnJvbSAnLi4vYXBwU3RhdGUuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgRW1pdHRlck1peGluIGZyb20gJy4vRW1pdHRlck1peGluLmpzJ1xuaW1wb3J0IHtcbiAgZmxhdHRlblZpZXdzLFxuICBnZXRTY2hlbWFWYWx1ZSxcbiAgc2hvdWxkUmVuZGVyU2NoZW1hXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGdldFJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgY29tcHV0ZWQsIHJlYWN0aXZlIH0gZnJvbSAndnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtFbWl0dGVyTWl4aW5dLFxuXG4gIGluamVjdDogW1xuICAgICdhcGknLFxuICAgICckdmVyYnMnLFxuICAgICckdmlld3MnLFxuICAgICckaXNQb3B1bGF0ZWQnLFxuICAgICckcGFyZW50Q29tcG9uZW50JyxcbiAgICAnJHNjaGVtYUNvbXBvbmVudCcsXG4gICAgJyRyb3V0ZUNvbXBvbmVudCcsXG4gICAgJyRkYXRhQ29tcG9uZW50JyxcbiAgICAnJHNvdXJjZUNvbXBvbmVudCcsXG4gICAgJyRyZXNvdXJjZUNvbXBvbmVudCcsXG4gICAgJyRkaWFsb2dDb21wb25lbnQnLFxuICAgICckcGFuZWxDb21wb25lbnQnLFxuICAgICckdGFiQ29tcG9uZW50J1xuICBdLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgY29uc3Qgc2VsZiA9ICgpID0+IHRoaXNcbiAgICByZXR1cm4gdGhpcy5wcm92aWRlc0RhdGFcbiAgICAgID8ge1xuICAgICAgICAgICRwYXJlbnRDb21wb25lbnQ6IHNlbGYsXG4gICAgICAgICAgJGRhdGFDb21wb25lbnQ6IHNlbGZcbiAgICAgICAgfVxuICAgICAgOiB7XG4gICAgICAgICAgJHBhcmVudENvbXBvbmVudDogc2VsZlxuICAgICAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYXBwU3RhdGUsXG4gICAgICBpc01vdW50ZWQ6IGZhbHNlLFxuICAgICAgb3ZlcnJpZGVzOiBudWxsIC8vIFNlZSBhY2Nlc3Nvci5qc1xuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIE5PVEU6IFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiBSZXNvdXJjZU1peGluLCB1c2VkIGJ5IGxpc3RzLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIHNvdXJjZVNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGE/LnNjaGVtYVxuICAgIH0sXG5cbiAgICB1c2VyKCkge1xuICAgICAgcmV0dXJuIGFwcFN0YXRlLnVzZXJcbiAgICB9LFxuXG4gICAgLy8gJHZlcmJzLCAkdmVyYnMgYW5kICRpc1BvcHVsYXRlZCBhcmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMsIHRvIHByZXNlcnZlXG4gICAgLy8gcmVhY3RpdmVuZXNzIGFjcm9zcyBwcm92aWRlL2luamVjdC5cbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUvaXNzdWVzLzcwMTcjaXNzdWVjb21tZW50LTQ4MDkwNjY5MVxuICAgIHZlcmJzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHZlcmJzKClcbiAgICB9LFxuXG4gICAgdmlld3MoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kdmlld3MoKVxuICAgIH0sXG5cbiAgICBmbGF0dGVuZWRWaWV3cygpIHtcbiAgICAgIHJldHVybiBmbGF0dGVuVmlld3ModGhpcy52aWV3cylcbiAgICB9LFxuXG4gICAgaXNQb3B1bGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kaXNQb3B1bGF0ZWQoKVxuICAgIH0sXG5cbiAgICBsb2NhbGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcGkubG9jYWxlXG4gICAgfSxcblxuICAgIGNvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgbmVzdGVkOiBmYWxzZSB9KVxuICAgIH0sXG5cbiAgICByb290Q29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJvb3QuJHJlZnMucm9vdFxuICAgIH0sXG5cbiAgICAvLyBVc2UgY29tcHV0ZWQgcHJvcGVydGllcyBhcyBsaW5rcyB0byBpbmplY3RzLCBzbyBEaXRvU2NoZW1hIGNhblxuICAgIC8vIG92ZXJyaWRlIHRoZSBwcm9wZXJ0eSBhbmQgcmV0dXJuIGB0aGlzYCBpbnN0ZWFkIG9mIHRoZSBwYXJlbnQuXG4gICAgcGFyZW50Q29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHBhcmVudENvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRzY2hlbWFDb21wb25lbnQoKVxuICAgIH0sXG5cbiAgICByb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGZvcm1Db21wb25lbnQoKSB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLnJvdXRlQ29tcG9uZW50XG4gICAgICByZXR1cm4gY29tcG9uZW50Py5pc0Zvcm0gPyBjb21wb25lbnQgOiBudWxsXG4gICAgfSxcblxuICAgIHZpZXdDb21wb25lbnQoKSB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0aGlzLnJvdXRlQ29tcG9uZW50XG4gICAgICByZXR1cm4gY29tcG9uZW50Py5pc1ZpZXcgPyBjb21wb25lbnQgOiBudWxsXG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGZpcnN0IHJvdXRlIGNvbXBvbmVudCBpbiB0aGUgY2hhaW4gb2YgcGFyZW50cywgaW5jbHVkaW5nXG4gICAgLy8gdGhpcyBjdXJyZW50IGNvbXBvbmVudCwgdGhhdCBpcyBsaW5rZWQgdG8gYSByZXNvdXJjZSAoYW5kIHRodXMgbG9hZHMgaXRzXG4gICAgLy8gb3duIGRhdGEgYW5kIGRvZXNuJ3QgaG9sZCBuZXN0ZWQgZGF0YSkuXG4gICAgZGF0YUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3ZpZGVzRGF0YSA/IHRoaXMgOiB0aGlzLiRkYXRhQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHNvdXJjZUNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHJlc291cmNlQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgZGlhbG9nQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGRpYWxvZ0NvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHBhbmVsQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHBhbmVsQ29tcG9uZW50KClcbiAgICB9LFxuXG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuJHRhYkNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIHBhcmVudFNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudD8ucGFyZW50Q29tcG9uZW50LnNjaGVtYUNvbXBvbmVudFxuICAgIH0sXG5cbiAgICBwYXJlbnRSb3V0ZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlQ29tcG9uZW50Py5wYXJlbnRDb21wb25lbnQucm91dGVDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFyZW50Rm9ybUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmZvcm1Db21wb25lbnQ/LnBhcmVudENvbXBvbmVudC5mb3JtQ29tcG9uZW50XG4gICAgfSxcblxuICAgIC8vIFJldHVybnMgdGhlIGRhdGEgb2YgdGhlIGZpcnN0IHJvdXRlIGNvbXBvbmVudCBpbiB0aGUgY2hhaW4gb2YgcGFyZW50c1xuICAgIC8vIHRoYXQgbG9hZHMgaXRzIG93biBkYXRhIGZyb20gYW4gYXNzb2NpYXRlZCBBUEkgcmVzb3VyY2UuXG4gICAgcm9vdERhdGEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5kYXRhQ29tcG9uZW50Py5kYXRhXG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgdGhpcy5pc01vdW50ZWQgPSB0cnVlXG4gIH0sXG5cbiAgYmVmb3JlQ3JlYXRlKCkge1xuICAgIGNvbnN0IHVpZCA9IG5leHRVaWQrK1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnJHVpZCcsIHsgZ2V0OiAoKSA9PiB1aWQgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbGFiZWxpemUsXG5cbiAgICAvLyBUaGUgc3RhdGUgb2YgY29tcG9uZW50cyBpcyBvbmx5IGF2YWlsYWJsZSBkdXJpbmcgdGhlIGxpZmUtY3ljbGUgb2YgYVxuICAgIC8vIGNvbXBvbmVudC4gU29tZSBpbmZvcm1hdGlvbiB3ZSBuZWVkIGF2YWlsYWJsZSBsb25nZXIgdGhhbiB0aGF0LCBlLmcuXG4gICAgLy8gYHF1ZXJ5YCAmIGB0b3RhbGAgb24gVHlwZUxpc3QsIHNvIHRoYXQgd2hlbiB0aGUgdXNlciBuYXZpZ2F0ZXMgYmFjayBmcm9tXG4gICAgLy8gZWRpdGluZyBhbiBpdGVtIGluIHRoZSBsaXN0LCB0aGUgc3RhdGUgb2YgdGhlIGxpc3QgaXMgc3RpbGwgdGhlIHNhbWUuXG4gICAgLy8gV2UgY2FuJ3Qgc3RvcmUgdGhpcyBpbiBgZGF0YWAsIGFzIHRoaXMgaXMgYWxyZWFkeSB0aGUgcHVyZSBkYXRhIGZyb20gdGhlXG4gICAgLy8gQVBJIHNlcnZlci4gVGhhdCdzIHdoYXQgdGhlIGBzdG9yZWAgaXMgZm9yOiBNZW1vcnkgdGhhdCdzIGF2YWlsYWJsZSBhc1xuICAgIC8vIGxvbmcgYXMgdGhlIGN1cnJlbnQgZWRpdGluZyBwYXRoIGlzIHN0aWxsIHZhbGlkLiBGb3IgdHlwZSBjb21wb25lbnRzLFxuICAgIC8vIHRoaXMgbWVtb3J5IGlzIHByb3ZpZGVkIGJ5IHRoZSBwYXJlbnQsIHNlZSBSb3V0ZU1peGluIGFuZCBEaXRvUGFuZS5cbiAgICBnZXRTdG9yZShrZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLnN0b3JlW2tleV1cbiAgICB9LFxuXG4gICAgc2V0U3RvcmUoa2V5LCB2YWx1ZSkge1xuICAgICAgdGhpcy5zdG9yZVtrZXldID0gdmFsdWVcbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG5cbiAgICByZW1vdmVTdG9yZShrZXkpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLnN0b3JlW2tleV1cbiAgICB9LFxuXG4gICAgZ2V0U3RvcmVLZXlCeUluZGV4KGluZGV4KSB7XG4gICAgICByZXR1cm4gdGhpcy5zdG9yZS4ka2V5c0J5SW5kZXg/LltpbmRleF1cbiAgICB9LFxuXG4gICAgc2V0U3RvcmVLZXlCeUluZGV4KGluZGV4LCBrZXkpIHtcbiAgICAgIHRoaXMuc3RvcmUuJGtleXNCeUluZGV4ID8/PSB7fVxuICAgICAgdGhpcy5zdG9yZS4ka2V5c0J5SW5kZXhbaW5kZXhdID0ga2V5XG4gICAgfSxcblxuICAgIGdldENoaWxkU3RvcmUoa2V5LCBpbmRleCkge1xuICAgICAgbGV0IHN0b3JlID0gdGhpcy5nZXRTdG9yZShrZXkpXG4gICAgICBpZiAoIXN0b3JlICYmIGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgLy8gV2hlbiBzdG9yaW5nLCB0ZW1wb3JhcnkgaWRzIGNoYW5nZSB0byBwZXJtYW5lbnQgb25lcyBhbmQgdGh1cyB0aGUga2V5XG4gICAgICAgIC8vIGNhbiBjaGFuZ2UuIFRvIHN0aWxsIGZpbmQgdGhlIHN0b3JlLCB3ZSByZWZlcmVuY2UgYnkgaW5kZXggYXMgd2VsbCxcbiAgICAgICAgLy8gdG8gYmUgYWJsZSB0byBmaW5kIHRoZSBzdG9yZSBhZ2FpbiBhZnRlciB0aGUgaXRlbSB3YXMgc2F2ZWQuXG4gICAgICAgIGNvbnN0IG9sZEtleSA9IHRoaXMuZ2V0U3RvcmVLZXlCeUluZGV4KGluZGV4KVxuICAgICAgICBzdG9yZSA9IHRoaXMuZ2V0U3RvcmUob2xkS2V5KVxuICAgICAgICBpZiAoc3RvcmUpIHtcbiAgICAgICAgICB0aGlzLnNldFN0b3JlKGtleSwgc3RvcmUpXG4gICAgICAgICAgdGhpcy5yZW1vdmVTdG9yZShvbGRLZXkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghc3RvcmUpIHtcbiAgICAgICAgc3RvcmUgPSB0aGlzLnNldFN0b3JlKGtleSwgcmVhY3RpdmUoe30pKVxuICAgICAgICBpZiAoaW5kZXggIT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMuc2V0U3RvcmVLZXlCeUluZGV4KGluZGV4LCBrZXkpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzdG9yZVxuICAgIH0sXG5cbiAgICByZW1vdmVDaGlsZFN0b3JlKGtleSwgaW5kZXgpIHtcbiAgICAgIC8vIEdFdCB0aGUgY2hpbGQtc3RvcmUgZmlyc3QsIHNvIHRoYXQgaW5kaWNlcyBjYW4gYmUgdHJhbnNmZXJyZWQgb3ZlclxuICAgICAgLy8gdGVtcG9yYXJ5IGlkIGNoYW5nZXMgZHVyaW5nIHBlcnNpc3RlbmNlLlxuICAgICAgdGhpcy5nZXRDaGlsZFN0b3JlKGtleSwgaW5kZXgpXG4gICAgICB0aGlzLnJlbW92ZVN0b3JlKGtleSlcbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hVmFsdWUoXG4gICAgICBrZXlPckRhdGFQYXRoLFxuICAgICAge1xuICAgICAgICB0eXBlLFxuICAgICAgICBkZWZhdWx0OiBkZWYsXG4gICAgICAgIHNjaGVtYSA9IHRoaXMuc2NoZW1hLFxuICAgICAgICBjb250ZXh0ID0gdGhpcy5jb250ZXh0LFxuICAgICAgICBjYWxsYmFjayA9IHRydWVcbiAgICAgIH0gPSB7fVxuICAgICkge1xuICAgICAgcmV0dXJuIGdldFNjaGVtYVZhbHVlKGtleU9yRGF0YVBhdGgsIHtcbiAgICAgICAgdHlwZSxcbiAgICAgICAgc2NoZW1hLFxuICAgICAgICBjb250ZXh0LFxuICAgICAgICBjYWxsYmFjayxcbiAgICAgICAgZGVmYXVsdDogaXNGdW5jdGlvbihkZWYpID8gKCkgPT4gZGVmLmNhbGwodGhpcykgOiBkZWZcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldExhYmVsKHNjaGVtYSwgbmFtZSkge1xuICAgICAgcmV0dXJuIHNjaGVtYVxuICAgICAgICA/IHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2xhYmVsJywgeyB0eXBlOiBTdHJpbmcsIHNjaGVtYSB9KSB8fFxuICAgICAgICAgIGxhYmVsaXplKG5hbWUgfHwgc2NoZW1hLm5hbWUpXG4gICAgICAgIDogbGFiZWxpemUobmFtZSkgfHwgJydcbiAgICB9LFxuXG4gICAgZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJiKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjbGFzczogYGRpdG8tYnV0dG9uLSR7dmVyYn1gLFxuICAgICAgICB0aXRsZTogbGFiZWxpemUodmVyYilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gVE9ETzogUmVuYW1lICpMaW5rKCkgdG8gKlJvdXRlKCkuXG4gICAgZ2V0UXVlcnlMaW5rKHF1ZXJ5KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBxdWVyeSxcbiAgICAgICAgLy8gUHJlc2VydmUgaGFzaCBmb3IgdGFiczpcbiAgICAgICAgaGFzaDogdGhpcy4kcm91dGUuaGFzaFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG91bGRSZW5kZXJTY2hlbWEoc2NoZW1hID0gbnVsbCkge1xuICAgICAgcmV0dXJuIHNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEsIHRoaXMuY29udGV4dClcbiAgICB9LFxuXG4gICAgc2hvdWxkU2hvd1NjaGVtYShzY2hlbWEgPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRTY2hlbWFWYWx1ZSgndmlzaWJsZScsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogdHJ1ZSxcbiAgICAgICAgc2NoZW1hXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzaG91bGREaXNhYmxlU2NoZW1hKHNjaGVtYSA9IG51bGwpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFNjaGVtYVZhbHVlKCdkaXNhYmxlZCcsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgIHNjaGVtYVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKSB7XG4gICAgICByZXNvdXJjZSA9IGdldFJlc291cmNlKHJlc291cmNlKVxuICAgICAgLy8gUmVzb3VyY2VzIHdpdGhvdXQgYSBwYXJlbnQgaW5oZXJpdCB0aGUgb25lIGZyb20gYGRhdGFDb21wb25lbnRgXG4gICAgICAvLyBhdXRvbWF0aWNhbGx5LlxuICAgICAgaWYgKHJlc291cmNlLnBhcmVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJlc291cmNlLnBhcmVudCA9IHRoaXMuZGF0YUNvbXBvbmVudD8ucmVzb3VyY2VcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmFwaS5yZXNvdXJjZXMuYW55KGdldFJlc291cmNlKHJlc291cmNlKSlcbiAgICB9LFxuXG4gICAgZ2V0UmVzb3VyY2VVcmwocmVzb3VyY2UpIHtcbiAgICAgIGNvbnN0IHVybCA9IHRoaXMuZ2V0UmVzb3VyY2VQYXRoKHJlc291cmNlKVxuICAgICAgcmV0dXJuIHVybCA/IHRoaXMuYXBpLmdldEFwaVVybCh7IHVybCwgcXVlcnk6IHJlc291cmNlLnF1ZXJ5IH0pIDogbnVsbFxuICAgIH0sXG5cbiAgICBhc3luYyBzZW5kUmVxdWVzdCh7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICByZXNvdXJjZSxcbiAgICAgIHF1ZXJ5LFxuICAgICAgZGF0YSxcbiAgICAgIHNpZ25hbCxcbiAgICAgIGludGVybmFsXG4gICAgfSkge1xuICAgICAgdXJsIHx8PSB0aGlzLmdldFJlc291cmNlVXJsKHJlc291cmNlKVxuICAgICAgbWV0aG9kIHx8PSByZXNvdXJjZT8ubWV0aG9kXG4gICAgICBjb25zdCBjaGVja1VzZXIgPSAhaW50ZXJuYWwgJiYgdGhpcy5hcGkuaXNBcGlVcmwodXJsKVxuICAgICAgaWYgKGNoZWNrVXNlcikge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZW5zdXJlVXNlcigpXG4gICAgICB9XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuYXBpLnJlcXVlc3Qoe1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIHVybCxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHNpZ25hbFxuICAgICAgfSlcbiAgICAgIC8vIERldGVjdCBjaGFuZ2Ugb2YgdGhlIG93biB1c2VyLCBhbmQgZmV0Y2ggaXQgYWdhaW4gaWYgaXQgd2FzIGNoYW5nZWQuXG4gICAgICBpZiAoXG4gICAgICAgIGNoZWNrVXNlciAmJlxuICAgICAgICBtZXRob2QgPT09ICdwYXRjaCcgJiZcbiAgICAgICAgZXF1YWxzKHJlc291cmNlLCBnZXRNZW1iZXJSZXNvdXJjZSh0aGlzLnVzZXIuaWQsIHRoaXMuYXBpLnVzZXJzKSlcbiAgICAgICkge1xuICAgICAgICBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuZmV0Y2hVc2VyKClcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZVxuICAgIH0sXG5cbiAgICBzaG93RGlhbG9nKHsgY29tcG9uZW50cywgYnV0dG9ucywgZGF0YSwgc2V0dGluZ3MgfSkge1xuICAgICAgcmV0dXJuIHRoaXMucm9vdENvbXBvbmVudC5zaG93RGlhbG9nKHtcbiAgICAgICAgY29tcG9uZW50cyxcbiAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgc2V0dGluZ3NcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHJlcXVlc3QoeyBjYWNoZSwgLi4ub3B0aW9ucyB9KSB7XG4gICAgICAvLyBBbGxvdyBjYWNoaW5nIG9mIGxvYWRlZCBkYXRhIG9uIHR3byBsZXZlbHM6XG4gICAgICAvLyAtICdnbG9iYWwnOiBjYWNoZSBnbG9iYWxseSwgZm9yIHRoZSBlbnRpcmUgYWRtaW4gc2Vzc2lvblxuICAgICAgLy8gLSAnbG9jYWwnOiBjYWNoZSBsb2NhbGx5IHdpdGhpbiB0aGUgY2xvc2VzdCByb3V0ZSBjb21wb25lbnQgdGhhdCBpc1xuICAgICAgLy8gICAgYXNzb2NpYXRlZCB3aXRoIGEgcmVzb3VyY2UgYW5kIGxvYWRzIGl0cyBvd24gZGF0YS5cbiAgICAgIGNvbnN0IGNhY2hlUGFyZW50ID0gKFxuICAgICAgICBjYWNoZSAmJlxuICAgICAgICB7XG4gICAgICAgICAgZ2xvYmFsOiB0aGlzLmFwcFN0YXRlLFxuICAgICAgICAgIGxvY2FsOiB0aGlzLmRhdGFDb21wb25lbnRcbiAgICAgICAgfVtjYWNoZV1cbiAgICAgIClcbiAgICAgIGNvbnN0IGxvYWRDYWNoZSA9IGNhY2hlUGFyZW50Py5sb2FkQ2FjaGVcbiAgICAgIC8vIEJ1aWxkIGEgY2FjaGUga2V5IGZyb20gdGhlIGNvbmZpZzpcbiAgICAgIGNvbnN0IGNhY2hlS2V5ID0gKFxuICAgICAgICBsb2FkQ2FjaGUgJiZcbiAgICAgICAgYCR7XG4gICAgICAgICAgb3B0aW9ucy5tZXRob2QgfHwgJ2dldCdcbiAgICAgICAgfSAke1xuICAgICAgICAgIG9wdGlvbnMudXJsXG4gICAgICAgIH0gJHtcbiAgICAgICAgICAvLyBUT0RPOiBgcmVxdWVzdC5wYXJhbXNgIHdhcyBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBgcXVlcnlgIG9uXG4gICAgICAgICAgLy8gMjAyMi0xMS0wMSwgcmVtb3ZlIG9uY2Ugbm90IGluIHVzZSBhbnl3aGVyZSBhbnkgbW9yZS5cbiAgICAgICAgICBKU09OLnN0cmluZ2lmeShvcHRpb25zLnF1ZXJ5IHx8IG9wdGlvbnMucGFyYW1zIHx8ICcnKVxuICAgICAgICB9ICR7XG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkob3B0aW9ucy5kYXRhIHx8ICcnKVxuICAgICAgICB9YFxuICAgICAgKVxuICAgICAgaWYgKGxvYWRDYWNoZSAmJiAoY2FjaGVLZXkgaW4gbG9hZENhY2hlKSkge1xuICAgICAgICByZXR1cm4gbG9hZENhY2hlW2NhY2hlS2V5XVxuICAgICAgfVxuICAgICAgLy8gTk9URTogTm8gYXdhaXQgaGVyZSwgcmVzIGlzIGEgcHJvbWlzZSB0aGF0IHdlIGNhbiBlYXNpbHkgY2FjaGUuXG4gICAgICAvLyBUaGF0J3MgZmluZSBiZWNhdXNlIHByb21pc2VzIGNhbiBiZSByZXNvbHZlZCBvdmVyIGFuZCBvdmVyIGFnYWluLlxuICAgICAgY29uc3QgcmVzID0gdGhpcy5zZW5kUmVxdWVzdChvcHRpb25zKVxuICAgICAgICAudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5kYXRhKVxuICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgIC8vIENvbnZlcnQgYXhpb3MgZXJyb3JzIHRvIG5vcm1hbCBlcnJvcnNcbiAgICAgICAgICBjb25zdCBkYXRhID0gZXJyb3IucmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICB0aHJvdyBkYXRhXG4gICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKGRhdGEubWVzc2FnZSksIGRhdGEpXG4gICAgICAgICAgICA6IGVycm9yXG4gICAgICAgIH0pXG4gICAgICBpZiAobG9hZENhY2hlKSB7XG4gICAgICAgIGxvYWRDYWNoZVtjYWNoZUtleV0gPSByZXNcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNcbiAgICB9LFxuXG4gICAgZm9ybWF0KHZhbHVlLCB7XG4gICAgICBsb2NhbGUgPSB0aGlzLmFwaS5sb2NhbGUsXG4gICAgICBkZWZhdWx0cyA9IHRoaXMuYXBpLmZvcm1hdHMsXG4gICAgICAuLi5vcHRpb25zXG4gICAgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gZm9ybWF0KHZhbHVlLCB7XG4gICAgICAgIGxvY2FsZSxcbiAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgIC4uLm9wdGlvbnNcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGFzeW5jIG5hdmlnYXRlKGxvY2F0aW9uKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVyLnB1c2gobG9jYXRpb24pXG4gICAgfSxcblxuICAgIGRvd25sb2FkKG9wdGlvbnMgPSB7fSkge1xuICAgICAgaWYgKGlzU3RyaW5nKG9wdGlvbnMpKSB7XG4gICAgICAgIG9wdGlvbnMgPSB7IHVybDogb3B0aW9ucyB9XG4gICAgICB9XG4gICAgICAvLyBTZWU6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80OTkxNzA2Ni8xMTYzNzA4XG4gICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpXG4gICAgICBhLmhyZWYgPSBvcHRpb25zLnVybD8uc3RhcnRzV2l0aCgnYmxvYjonKVxuICAgICAgICA/IG9wdGlvbnMudXJsXG4gICAgICAgIDogdGhpcy5hcGkuZ2V0QXBpVXJsKG9wdGlvbnMpXG4gICAgICBhLmRvd25sb2FkID0gb3B0aW9ucy5maWxlbmFtZSA/PyBudWxsXG4gICAgICBjb25zdCB7IGJvZHkgfSA9IGRvY3VtZW50XG4gICAgICBib2R5LmFwcGVuZENoaWxkKGEpXG4gICAgICBhLmNsaWNrKClcbiAgICAgIGJvZHkucmVtb3ZlQ2hpbGQoYSlcbiAgICB9LFxuXG4gICAgbm90aWZ5KG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucm9vdENvbXBvbmVudC5ub3RpZnkob3B0aW9ucylcbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5yb290Q29tcG9uZW50LmNsb3NlTm90aWZpY2F0aW9ucygpXG4gICAgfSxcblxuICAgIHNldHVwU2NoZW1hRmllbGRzKCkge1xuICAgICAgdGhpcy5zZXR1cE1ldGhvZHMoKVxuICAgICAgdGhpcy5zZXR1cENvbXB1dGVkKClcbiAgICAgIHRoaXMuc2V0dXBFdmVudHMoKVxuICAgIH0sXG5cbiAgICBzZXR1cE1ldGhvZHMoKSB7XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLnNjaGVtYS5tZXRob2RzIHx8IHt9KSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbih2YWx1ZSkpIHtcbiAgICAgICAgICB0aGlzW2tleV0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgbWV0aG9kIGRlZmluaXRpb246ICR7a2V5fTogJHt2YWx1ZX1gKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldHVwQ29tcHV0ZWQoKSB7XG4gICAgICBjb25zdCBnZXRDb21wdXRlZEFjY2Vzc29yID0gKHsgZ2V0LCBzZXQgfSkgPT4ge1xuICAgICAgICBjb25zdCBnZXR0ZXIgPSBjb21wdXRlZCgoKSA9PiBnZXQuY2FsbCh0aGlzKSlcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBnZXQ6ICgpID0+IGdldHRlci52YWx1ZSxcbiAgICAgICAgICBzZXQ6IHNldCA/IHZhbHVlID0+IHNldC5jYWxsKHRoaXMsIHZhbHVlKSA6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgW2tleSwgaXRlbV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEuY29tcHV0ZWQgfHwge30pKSB7XG4gICAgICAgIGNvbnN0IGFjY2Vzc29yID0gaXNGdW5jdGlvbihpdGVtKVxuICAgICAgICAgID8gZ2V0Q29tcHV0ZWRBY2Nlc3Nvcih7IGdldDogaXRlbSB9KVxuICAgICAgICAgIDogaXNPYmplY3QoaXRlbSkgJiYgaXNGdW5jdGlvbihpdGVtLmdldClcbiAgICAgICAgICAgID8gZ2V0Q29tcHV0ZWRBY2Nlc3NvcihpdGVtKVxuICAgICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChhY2Nlc3Nvcikge1xuICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBrZXksIGFjY2Vzc29yKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICBgSW52YWxpZCBjb21wdXRlZCBwcm9wZXJ0eSBkZWZpbml0aW9uOiAke2tleX06ICR7aXRlbX1gXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldHVwRXZlbnRzKCkge1xuICAgICAgY29uc3QgeyB3YXRjaCwgZXZlbnRzIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgaWYgKHdhdGNoKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJzID0gaXNGdW5jdGlvbih3YXRjaCkgPyB3YXRjaC5jYWxsKHRoaXMpIDogd2F0Y2hcbiAgICAgICAgaWYgKGlzT2JqZWN0KGhhbmRsZXJzKSkge1xuICAgICAgICAgIC8vIEluc3RhbGwgdGhlIHdhdGNoIGhhbmRsZXJzIGluIHRoZSBuZXh0IHRpY2ssIHNvIGFsbCBjb21wb25lbnRzIGFyZVxuICAgICAgICAgIC8vIGluaXRpYWxpemVkIGFuZCB3ZSBjYW4gY2hlY2sgYWdhaW5zdCB0aGVpciBuYW1lcy5cbiAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIGNhbGxiYWNrXSBvZiBPYmplY3QuZW50cmllcyhoYW5kbGVycykpIHtcbiAgICAgICAgICAgICAgLy8gRXhwYW5kIHByb3BlcnR5IG5hbWVzIHRvICdkYXRhLnByb3BlcnR5JzpcbiAgICAgICAgICAgICAgY29uc3QgZXhwciA9IHRoaXMuc2NoZW1hQ29tcG9uZW50LmdldENvbXBvbmVudEJ5TmFtZShrZXkpXG4gICAgICAgICAgICAgICAgPyBgZGF0YS4ke2tleX1gXG4gICAgICAgICAgICAgICAgOiBrZXlcbiAgICAgICAgICAgICAgdGhpcy4kd2F0Y2goZXhwciwgY2FsbGJhY2spXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBjb25zdCBhZGRFdmVudCA9IChrZXksIGV2ZW50LCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihjYWxsYmFjaykpIHtcbiAgICAgICAgICB0aGlzLm9uKGh5cGhlbmF0ZShldmVudCksIGNhbGxiYWNrKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEludmFsaWQgZXZlbnQgZGVmaW5pdGlvbjogJHtrZXl9OiAke2NhbGxiYWNrfWApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50cykge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhldmVudHMpKSB7XG4gICAgICAgICAgYWRkRXZlbnQoa2V5LCBrZXksIHZhbHVlKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBBbHNvIHNjYW4gc2NoZW1hIGZvciBgb25bQS1aXWAtc3R5bGUgY2FsbGJhY2tzIGFuZCBhZGQgdGhlbVxuICAgICAgLy8gVE9ETzogRGVwcmVjYXRlIG9uZSBmb3JtYXQgb3IgdGhlIG90aGVyLCBpbiBmYXZvdXIgb2Ygb25seSBvbmUgd2F5IG9mXG4gICAgICAvLyBkb2luZyB0aGluZ3MuIERlY2lkZSB3aGljaCBvbmUgdG8gcmVtb3ZlLlxuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWEpKSB7XG4gICAgICAgIGlmICgvXm9uW0EtWl0vLnRlc3Qoa2V5KSkge1xuICAgICAgICAgIGFkZEV2ZW50KGtleSwga2V5LnNsaWNlKDIpLCB2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0RXZlbnQoZXZlbnQsIHtcbiAgICAgIGNvbnRleHQgPSBudWxsLFxuICAgICAgcGFyZW50ID0gbnVsbFxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgaGFzTGlzdGVuZXJzID0gdGhpcy5oYXNMaXN0ZW5lcnMoZXZlbnQpXG4gICAgICBjb25zdCBwYXJlbnRIYXNMaXN0ZW5lcnMgPSBwYXJlbnQ/Lmhhc0xpc3RlbmVycyhldmVudClcbiAgICAgIGlmIChoYXNMaXN0ZW5lcnMgfHwgcGFyZW50SGFzTGlzdGVuZXJzKSB7XG4gICAgICAgIC8vIFRoZSBlZmZlY3RzIG9mIHNvbWUgZXZlbnRzIG5lZWQgc29tZSB0aW1lIHRvIHByb3BhZ2F0ZSB0aHJvdWdoIFZ1ZS5cbiAgICAgICAgLy8gVXNlICRuZXh0VGljaygpIHRvIG1ha2Ugc3VyZSBvdXIgaGFuZGxlcnMgc2VlIHRoZXNlIGNoYW5nZXMuXG4gICAgICAgIC8vIEZvciBleGFtcGxlLCBgcHJvY2Vzc2VkSXRlbWAgaXMgb25seSBjb3JyZWN0IGFmdGVyIGNvbXBvbmVudHMgdGhhdFxuICAgICAgICAvLyBhcmUgbmV3bHkgcmVuZGVyZWQgZHVlIHRvIGRhdGEgY2hhbmdlcyBoYXZlIHJlZ2lzdGVyZWQgdGhlbXNlbHZlcy5cbiAgICAgICAgaWYgKFsnbG9hZCcsICdjaGFuZ2UnXS5pbmNsdWRlcyhldmVudCkpIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLiRuZXh0VGljaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBnZXRDb250ZXh0ID0gKCkgPT4gKGNvbnRleHQgPSBEaXRvQ29udGV4dC5nZXQodGhpcywgY29udGV4dCkpXG4gICAgICAgIGNvbnN0IHJlcyA9IGhhc0xpc3RlbmVyc1xuICAgICAgICAgID8gYXdhaXQgdGhpcy5lbWl0KGV2ZW50LCBnZXRDb250ZXh0KCkpXG4gICAgICAgICAgOiB1bmRlZmluZWRcbiAgICAgICAgLy8gRG9uJ3QgYnViYmxlIHRvIHBhcmVudCBpZiBoYW5kbGVkIGV2ZW50IHJldHVybmVkIGBmYWxzZWBcbiAgICAgICAgaWYgKHBhcmVudEhhc0xpc3RlbmVycyAmJiByZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgcGFyZW50LmVtaXQoZXZlbnQsIGdldENvbnRleHQoKSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzXG4gICAgICB9XG4gICAgfSxcblxuICAgIGVtaXRTY2hlbWFFdmVudChldmVudCwgcGFyYW1zKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfVxuICB9XG59XG5cbmxldCBuZXh0VWlkID0gMFxuIiwiLy8gQSBtaW5pLXJlcGxpY2F0aW9uIG9mIHZ1ZSdzIGludGVybmFsIGByZXNvbHZlTWVyZ2VkT3B0aW9ucygpYCBidXQgb25seVxuLy8gaGFuZGxpbmcgb3VyIG93biBhZGRlZCBvcHRpb25zIHByb3BlcnRpZXMgYW5kIG1lcmdpbmcgdGhlbSBlYXJseSBpbnN0ZWFkXG4vLyBvZiBsYXppbHkuXG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlTWVyZ2VkT3B0aW9ucyhvcHRpb25zKSB7XG4gIGNvbnN0IHsgbWl4aW5zIH0gPSBvcHRpb25zXG4gIHJldHVybiBtaXhpbnMgfHwgb3B0aW9ucy5leHRlbmRzXG4gICAgPyBtZXJnZU9wdGlvbnMoXG4gICAgICAgIHsgLi4ub3B0aW9ucyB9LFxuICAgICAgICBvcHRpb25zXG4gICAgICApXG4gICAgOiBvcHRpb25zXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZU9wdGlvbnModG8sIGZyb20pIHtcbiAgaWYgKGZyb20uZXh0ZW5kcykge1xuICAgIG1lcmdlT3B0aW9ucyh0bywgZnJvbS5leHRlbmRzKVxuICB9XG4gIGlmIChmcm9tLm1peGlucykge1xuICAgIGZvciAoY29uc3QgbWl4aW4gb2YgZnJvbS5taXhpbnMpIHtcbiAgICAgIG1lcmdlT3B0aW9ucyh0bywgbWl4aW4pXG4gICAgfVxuICB9XG4gIGZvciAoY29uc3Qga2V5IG9mIGRpdG9PcHRpb25LZXlzKSB7XG4gICAgaWYgKGtleSBpbiBmcm9tKSB7XG4gICAgICB0b1trZXldID0gZnJvbVtrZXldXG4gICAgfVxuICB9XG4gIHJldHVybiB0b1xufVxuXG5jb25zdCBkaXRvT3B0aW9uS2V5cyA9IFtcbiAgJ2RlZmF1bHRWYWx1ZScsXG4gICdkZWZhdWx0TmVzdGVkJyxcbiAgJ2RlZmF1bHRWaXNpYmxlJyxcbiAgJ2dlbmVyYXRlTGFiZWwnLFxuICAnZXhjbHVkZVZhbHVlJyxcbiAgJ2lnbm9yZU1pc3NpbmdWYWx1ZScsXG4gICdvbWl0U3BhY2luZycsXG4gICdwcm9jZXNzVmFsdWUnLFxuICAncHJvY2Vzc1NjaGVtYScsXG4gICdnZXRQYW5lbFNjaGVtYScsXG4gICdnZXRGb3JtU2NoZW1hc0ZvclByb2Nlc3NpbmcnLFxuICAvLyBWdWUgMyAvIFZ1ZS1yb3V0ZXIgNCBmb3JnZXRzIHRoZXNlLlxuICAvLyBUT0RPOiBDcmVhdGUgYnVnLXJlcG9ydD9cbiAgJ2JlZm9yZVJvdXRlVXBkYXRlJyxcbiAgJ2JlZm9yZVJvdXRlTGVhdmUnXG5dXG4iLCJpbXBvcnQgRGl0b01peGluIGZyb20gJy4vbWl4aW5zL0RpdG9NaXhpbi5qcydcbmltcG9ydCB7IGdldFR5cGVDb21wb25lbnQgfSBmcm9tICcuL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHJlc29sdmVNZXJnZWRPcHRpb25zIH0gZnJvbSAnLi91dGlscy9vcHRpb25zLmpzJ1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmNvbnN0IGNvbXBvbmVudHMgPSB7fVxuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEaXRvTWl4aW5dLFxuICAvLyBNYWtlIHN1cmUgdGhhdCByZWdpc3RlcmVkIGNvbXBvbmVudHMgYXJlIHByZXNlbnQgaW4gYWxsIERpdG9Db21wb25lbnQuXG4gIGNvbXBvbmVudHMsXG5cbiAgY29tcG9uZW50KG5hbWUsIGRlZmluaXRpb24pIHtcbiAgICBpZiAoZGVmaW5pdGlvbikge1xuICAgICAgaWYgKGlzUGxhaW5PYmplY3QoZGVmaW5pdGlvbikpIHtcbiAgICAgICAgZGVmaW5pdGlvbiA9IHJlc29sdmVNZXJnZWRPcHRpb25zKHtcbiAgICAgICAgICBleHRlbmRzOiB0aGlzLFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgLi4uZGVmaW5pdGlvblxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgY29tcG9uZW50c1tuYW1lXSA9IGRlZmluaXRpb25cbiAgICB9XG4gICAgaWYgKCEobmFtZSBpbiBjb21wb25lbnRzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21wb25lbnQgXCIke25hbWV9XCIgbm90IHJlZ2lzdGVyZWRgKVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50c1tuYW1lXVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRUeXBlQ29tcG9uZW50XG4gIH1cbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBkZXNjcmliZURhdGUoZGF0ZSkge1xuICByZXR1cm4ge1xuICAgIHllYXI6IGRhdGU/LmdldEZ1bGxZZWFyKCkgPz8gMCxcbiAgICBtb250aDogZGF0ZT8uZ2V0TW9udGgoKSA/PyAwLFxuICAgIGRheTogZGF0ZT8uZ2V0RGF0ZSgpID8/IDAsXG4gICAgaG91cjogZGF0ZT8uZ2V0SG91cnMoKSA/PyAwLFxuICAgIG1pbnV0ZTogZGF0ZT8uZ2V0TWludXRlcygpID8/IDAsXG4gICAgc2Vjb25kOiBkYXRlPy5nZXRTZWNvbmRzKCkgPz8gMCxcbiAgICBtaWxsaXNlY29uZDogZGF0ZT8uZ2V0TWlsbGlzZWNvbmRzKCkgPz8gMFxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhbHRlckRhdGUoZGF0ZSwgb3ZlcnJpZGVzID0ge30pIHtcbiAgcmV0dXJuIG5ldyBEYXRlKC4uLk9iamVjdC52YWx1ZXMoeyAuLi5kZXNjcmliZURhdGUoZGF0ZSksIC4uLm92ZXJyaWRlcyB9KSlcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRGF0ZShzdHJpbmcsIHtcbiAgbG9jYWxlID0gJ2VuLVVTJyxcbiAgZGF0ZSA9IHRydWUsXG4gIHRpbWUgPSB0cnVlXG59ID0ge30pIHtcbiAgY29uc3QgdGltZURlZmF1bHQgPSB0aW1lID8gbnVsbCA6IDBcbiAgbGV0IFtcbiAgICBkYXksXG4gICAgc2VwMSxcbiAgICBtb250aCxcbiAgICBzZXAyLFxuICAgIHllYXIsXG4gICAgLFxuICAgIGhvdXIgPSB0aW1lRGVmYXVsdCxcbiAgICAsXG4gICAgbWludXRlID0gdGltZURlZmF1bHQsXG4gICAgLFxuICAgIHNlY29uZCA9IHRpbWVEZWZhdWx0LFxuICAgICxcbiAgICBtaWxsaXNlY29uZCA9IHRpbWVEZWZhdWx0XG4gIF0gPSBnZXREYXRlUGFydHMoc3RyaW5nLCB7IGRhdGUsIHRpbWUgfSlcbiAgaWYgKHllYXIgJiYgeWVhci5sZW5ndGggPj0gNCkge1xuICAgIGlmIChsb2NhbGUgPT09ICdlbi1VUycgJiYgc2VwMSA9PT0gJy8nICYmIHNlcDIgPT09ICcvJykge1xuICAgICAgLy8gQW1lcmljYW4gZm9ybWF0OiBNTS9ERC9ZWVlZXG4gICAgICA7W2RheSwgbW9udGhdID0gW21vbnRoLCBkYXldXG4gICAgfVxuICAgIG1vbnRoID0gZ2V0TW9udGhJbmRleChtb250aCwgeyBsb2NhbGUgfSlcbiAgICBjb25zdCBpc1ZhbGlkVGltZVBhcnQgPSBwYXJ0ID0+IHBhcnQgPT09IG51bGwgfHwgcGFydC5sZW5ndGggPT09IDJcbiAgICBpZiAoXG4gICAgICBtb250aCAhPT0gbnVsbCAmJiAoXG4gICAgICAgICF0aW1lIHx8IChcbiAgICAgICAgICBpc1ZhbGlkVGltZVBhcnQoaG91cikgJiZcbiAgICAgICAgICBpc1ZhbGlkVGltZVBhcnQobWludXRlKSAmJlxuICAgICAgICAgIGlzVmFsaWRUaW1lUGFydChzZWNvbmQpXG4gICAgICAgIClcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiBuZXcgRGF0ZShcbiAgICAgICAgK3llYXIsXG4gICAgICAgICttb250aCxcbiAgICAgICAgK2RheSxcbiAgICAgICAgK2hvdXIsXG4gICAgICAgICttaW51dGUsXG4gICAgICAgICtzZWNvbmQsXG4gICAgICAgICttaWxsaXNlY29uZFxuICAgICAgKVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGF0ZVBhcnRBdFBvc2l0aW9uKHN0cmluZywgcG9zaXRpb24sIHtcbiAgbG9jYWxlID0gJ2VuLVVTJyxcbiAgZGF0ZSA9IHRydWUsXG4gIHRpbWUgPSB0cnVlXG59ID0ge30pIHtcbiAgY29uc3QgcGFydHMgPSBnZXREYXRlUGFydHMoc3RyaW5nLCB7IGRhdGUsIHRpbWUgfSlcblxuICBjb25zdCBnZXRQb3NpdGlvbiA9IChwb3NpdGlvbiwgbGVuZ3RoID0gcGFydHMubGVuZ3RoKSA9PiB7XG4gICAgbGV0IHBvcyA9IDBcbiAgICBsZXQgaW5kZXggPSAwXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVubW9kaWZpZWQtbG9vcC1jb25kaXRpb25cbiAgICB3aGlsZSAoKHBvc2l0aW9uID09PSBudWxsIHx8IHBvcyA8PSBwb3NpdGlvbikgJiYgaW5kZXggPCBsZW5ndGgpIHtcbiAgICAgIHBvcyArPSBwYXJ0c1tpbmRleCsrXT8ubGVuZ3RoID8/IDBcbiAgICB9XG4gICAgcmV0dXJuIHsgcG9zaXRpb246IHBvcywgaW5kZXggfVxuICB9XG5cbiAgLy8gVGltZSBzdGFydHMgYXQgaW5kZXggNiwgZHVlIHRvIHRoZSBzZXBhcmF0b3IgYWZ0ZXIgdGhlIGRhdGUuXG4gIGNvbnN0IG9mZnNldCA9ICFkYXRlID8gZ2V0UG9zaXRpb24obnVsbCwgNikucG9zaXRpb24gOiAwXG4gIHBvc2l0aW9uICs9IG9mZnNldFxuXG4gIGxldCB7IGluZGV4IH0gPSBnZXRQb3NpdGlvbihwb3NpdGlvbilcblxuICBjb25zdCBpc1VTID0gbG9jYWxlID09PSAnZW4tVVMnXG4gIGNvbnN0IHZhbHVlcyA9IFtcbiAgICBpc1VTID8gJ21vbnRoJyA6ICdkYXknLFxuICAgIG51bGwsXG4gICAgaXNVUyA/ICdkYXknIDogJ21vbnRoJyxcbiAgICBudWxsLFxuICAgICd5ZWFyJyxcbiAgICBudWxsLFxuICAgICdob3VyJyxcbiAgICBudWxsLFxuICAgICdtaW51dGUnLFxuICAgIG51bGwsXG4gICAgJ3NlY29uZCcsXG4gICAgbnVsbCxcbiAgICAnbWlsbGlzZWNvbmQnXG4gIF1cbiAgd2hpbGUgKGluZGV4LS0pIHtcbiAgICBpZiAodmFsdWVzW2luZGV4XSkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBnZXRQb3NpdGlvbihudWxsLCBpbmRleCkucG9zaXRpb24gLSBvZmZzZXRcbiAgICAgIGNvbnN0IGVuZCA9IHN0YXJ0ICsgcGFydHNbaW5kZXhdLmxlbmd0aFxuICAgICAgcmV0dXJuIHsgbmFtZTogdmFsdWVzW2luZGV4XSwgc3RhcnQsIGVuZCB9XG4gICAgfVxuICB9XG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGdldERhdGVQYXJ0cyhzdHJpbmcsIHsgZGF0ZSA9IHRydWUsIHRpbWUgPSB0cnVlIH0gPSB7fSkge1xuICBjb25zdCBwYXJ0cyA9IHN0cmluZz8uc3BsaXQoLyhbXFxzLiw6L10rKS8pIHx8IFtdXG4gIGlmICghZGF0ZSkge1xuICAgIC8vIEFkZCBkdW1teSBkYXRlIHBhcnRzIHRvIG1ha2Ugc3VyZSB3ZSBnZXQgYSB0aW1lLW9ubHkgZGF0ZS5cbiAgICBwYXJ0cy51bnNoaWZ0KCcxJywgJy4nLCAnMScsICcuJywgJzIwMDAnLCAnICcpXG4gIH1cbiAgaWYgKCF0aW1lICYmIHBhcnRzLmxlbmd0aCA+IDUpIHtcbiAgICBwYXJ0cy5sZW5ndGggPSA1XG4gIH1cbiAgcmV0dXJuIHBhcnRzXG59XG5cbmZ1bmN0aW9uIGdldE1vbnRoSW5kZXgobW9udGgsIHsgbG9jYWxlID0gJ2VuLVVTJyB9ID0ge30pIHtcbiAgY29uc3QgdmFsdWUgPSArbW9udGhcbiAgaWYgKCFpc05hTih2YWx1ZSkpIHtcbiAgICByZXR1cm4gdmFsdWUgLSAxXG4gIH1cbiAgY29uc3QgbWF0Y2ggPSBtb250aC50cmltKCkudG9Mb3dlckNhc2UoKVxuICBpZiAobWF0Y2gubGVuZ3RoIDwgMykgcmV0dXJuIG51bGxcbiAgY29uc3Qgc2hvcnRGb3JtYXQgPSBuZXcgSW50bC5EYXRlVGltZUZvcm1hdChsb2NhbGUsIHsgbW9udGg6ICdzaG9ydCcgfSlcbiAgY29uc3QgbG9uZ0Zvcm1hdCA9IG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZSwgeyBtb250aDogJ2xvbmcnIH0pXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTI7IGkrKykge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgyMDAwLCBpLCAxKVxuICAgIGlmIChcbiAgICAgIHNob3J0Rm9ybWF0LmZvcm1hdChkYXRlKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobWF0Y2gpIHx8XG4gICAgICBsb25nRm9ybWF0LmZvcm1hdChkYXRlKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgobWF0Y2gpXG4gICAgKSB7XG4gICAgICByZXR1cm4gaVxuICAgIH1cbiAgfVxuICByZXR1cm4gbnVsbFxufVxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jYWxlbmRhclxuICAuZGl0by1jYWxlbmRhci1wb3B1cFxuICAgIC5kaXRvLWNhbGVuZGFyLWlubmVyXG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1pZj1cImN1cnJlbnRNb2RlID09PSAnZGF5J1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogdHJ1ZSB9KSB9fVxuICAgICAgICAgICAgYS5kaXRvLWNhbGVuZGFyLXNlbGVjdC1tb250aChcbiAgICAgICAgICAgICAgQGNsaWNrPVwic2V0TW9kZSgnbW9udGgnKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgbW9udGg6IHRydWUgfSkgfX1cbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0LmRpdG8tY2FsZW5kYXItc3RlcC1tb250aChcbiAgICAgICAgICAgIEBjbGljaz1cInN0ZXBNb250aCgxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQuZGl0by1jYWxlbmRhci1zdGVwLXllYXIoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItd2Vla2RheXNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwid2Vla2RheSBpbiB3ZWVrZGF5TmFtZXNcIlxuICAgICAgICAgICAgKSB7eyB3ZWVrZGF5LnNob3J0IH19XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItZGF0ZXNcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZm9yPVwiZGF0ZSBpbiBkYXRlUmFuZ2VcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJkYXRlLnN0YXRlICYmIGBkaXRvLWNhbGVuZGFyLWl0ZW0tJHtkYXRlLnN0YXRlfWBcIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJkYXRlLnN0YXRlICE9PSAnZGlzYWJsZWQnICYmIHNlbGVjdERhdGUoZGF0ZS5kYXRlKVwiXG4gICAgICAgICAgICApIHt7IGRhdGUudGV4dCB9fVxuICAgICAgICAuZGl0by1jYWxlbmRhci1mb290ZXJcbiAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LW5vdyhcbiAgICAgICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOnRpdGxlPVwiZGF0ZVRvU3RyaW5nKG5ldyBEYXRlKCkpXCJcbiAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdERhdGUobmV3IERhdGUoKSlcIlxuICAgICAgICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWVsc2UtaWY9XCJjdXJyZW50TW9kZSA9PT0gJ21vbnRoJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigtMSlcIlxuICAgICAgICAgIClcbiAgICAgICAgICBzcGFuXG4gICAgICAgICAgICBhLmRpdG8tY2FsZW5kYXItc2VsZWN0LXllYXIoXG4gICAgICAgICAgICAgIEBjbGljaz1cInNldE1vZGUoJ3llYXInKVwiXG4gICAgICAgICAgICApIHt7IGRhdGVUb1N0cmluZyhjdXJyZW50VmFsdWUsIHsgeWVhcjogdHJ1ZSB9KSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwWWVhcigxKVwiXG4gICAgICAgICAgKVxuICAgICAgICAuZGl0by1jYWxlbmRhci1ib2R5XG4gICAgICAgICAgLmRpdG8tY2FsZW5kYXItbW9udGhzXG4gICAgICAgICAgICBzcGFuKFxuICAgICAgICAgICAgICB2LWZvcj1cIihtb250aCwgaW5kZXgpIGluIG1vbnRoTmFtZXNcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRNb250aENsYXNzKGluZGV4KVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdE1vbnRoKGluZGV4KVwiXG4gICAgICAgICAgICApIHt7IG1vbnRoLnNob3J0IH19XG4gICAgICB0ZW1wbGF0ZShcbiAgICAgICAgdi1lbHNlLWlmPVwiY3VycmVudE1vZGUgPT09ICd5ZWFyJ1wiXG4gICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWhlYWRlclxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLXByZXYoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKC0xKVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHNwYW4ge3sgZGVjYWRlVG9TdHJpbmcoY3VycmVudFZhbHVlKSB9fVxuICAgICAgICAgIGEuZGl0by1jYWxlbmRhci1zdGVwLW5leHQoXG4gICAgICAgICAgICBAY2xpY2s9XCJzdGVwRGVjYWRlKDEpXCJcbiAgICAgICAgICApXG4gICAgICAgIC5kaXRvLWNhbGVuZGFyLWJvZHlcbiAgICAgICAgICAuZGl0by1jYWxlbmRhci15ZWFyc1xuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1mb3I9XCJ5ZWFyIGluIHllYXJSYW5nZVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cImdldFllYXJDbGFzcyh5ZWFyKVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cInNlbGVjdFllYXIoeWVhcilcIlxuICAgICAgICAgICAgKSB7eyB5ZWFyIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZGVzY3JpYmVEYXRlLCBhbHRlckRhdGUgfSBmcm9tICcuLi91dGlscy9kYXRlLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ3NlbGVjdCddLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGRpc2FibGVkRGF0ZTogeyB0eXBlOiBGdW5jdGlvbiwgZGVmYXVsdDogKCkgPT4gZmFsc2UgfSxcbiAgICBtb2RlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2RheScgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyB3ZWVrZGF5TmFtZXMsIG1vbnRoTmFtZXMgfSA9IGdldExvY2FsZU5hbWVzKHRoaXMubG9jYWxlKVxuICAgIHJldHVybiB7XG4gICAgICB3ZWVrZGF5TmFtZXMsXG4gICAgICBtb250aE5hbWVzLFxuICAgICAgZGF0ZVJhbmdlOiBbXSxcbiAgICAgIHllYXJSYW5nZTogW10sXG4gICAgICBjdXJyZW50VmFsdWU6IChcbiAgICAgICAgdGhpcy5tb2RlbFZhbHVlIHx8XG4gICAgICAgIC8vIElmIG5vIHZhbHVlIGlzIHByb3ZpZGVkLCB1c2UgY3VycmVudCBkYXRlIGJ1dCBjbGVhciB0aW1lIGZpZWxkczpcbiAgICAgICAgYWx0ZXJEYXRlKG5ldyBEYXRlKCksIHsgaG91cjogMCwgbWludXRlOiAwLCBzZWNvbmQ6IDAsIG1pbGxpc2Vjb25kOiAwIH0pXG4gICAgICApLFxuICAgICAgY3VycmVudE1vZGU6IHRoaXMubW9kZVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG8gfHwgbmV3IERhdGUoKVxuICAgICAgICB0aGlzLnVwZGF0ZURhdGVSYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKCt0byAhPT0gK2Zyb20pIHtcbiAgICAgICAgdGhpcy51cGRhdGVEYXRlUmFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkaXNhYmxlZERhdGU6ICd1cGRhdGVEYXRlUmFuZ2UnLFxuXG4gICAgbW9kZShtb2RlKSB7XG4gICAgICB0aGlzLmN1cnJlbnRNb2RlID0gbW9kZVxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMudXBkYXRlRGF0ZVJhbmdlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0TW9udGhDbGFzcyhtb250aCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUnOiAoXG4gICAgICAgICAgdGhpcy5tb2RlbFZhbHVlICYmXG4gICAgICAgICAgbW9udGggPT09IHRoaXMubW9kZWxWYWx1ZS5nZXRNb250aCgpICYmXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUuZ2V0RnVsbFllYXIoKSA9PT0gdGhpcy5tb2RlbFZhbHVlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgKSxcbiAgICAgICAgJ2RpdG8tY2FsZW5kYXItaXRlbS1jdXJyZW50JzogbW9udGggPT09IHRoaXMuY3VycmVudFZhbHVlLmdldE1vbnRoKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0WWVhckNsYXNzKHllYXIpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLWNhbGVuZGFyLWl0ZW0tYWN0aXZlJzogKFxuICAgICAgICAgIHRoaXMubW9kZWxWYWx1ZSAmJiB5ZWFyID09PSB0aGlzLm1vZGVsVmFsdWUuZ2V0RnVsbFllYXIoKVxuICAgICAgICApLFxuICAgICAgICAnZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQnOiB5ZWFyID09PSB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNldERhdGUob3ZlcnJpZGVzLCB1cGRhdGUgPSBmYWxzZSkge1xuICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBhbHRlckRhdGUodGhpcy5jdXJyZW50VmFsdWUsIG92ZXJyaWRlcylcbiAgICAgIGlmICh1cGRhdGUpIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCB0aGlzLmN1cnJlbnRWYWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RlcERlY2FkZShzdGVwKSB7XG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcCAqIDEwXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzZXRNb2RlKG1vZGUpIHtcbiAgICAgIHRoaXMuY3VycmVudE1vZGUgPSBtb2RlXG4gICAgfSxcblxuICAgIHN0ZXBNb250aChzdGVwKSB7XG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgY29uc3QgeyB5ZWFyLCBtb250aCB9ID0gdGhpcy5nZXRZZWFyTW9udGgoXG4gICAgICAgIGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpLFxuICAgICAgICBjdXJyZW50VmFsdWUuZ2V0TW9udGgoKSArIHN0ZXBcbiAgICAgIClcbiAgICAgIHRoaXMuc2V0RGF0ZSh7XG4gICAgICAgIG1vbnRoLFxuICAgICAgICBkYXk6IE1hdGgubWluKFxuICAgICAgICAgIHRoaXMuZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpLFxuICAgICAgICAgIHRoaXMuY3VycmVudFZhbHVlLmdldERhdGUoKVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBzdGVwWWVhcihzdGVwKSB7XG4gICAgICB0aGlzLnNldERhdGUoe1xuICAgICAgICB5ZWFyOiB0aGlzLmN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpICsgc3RlcFxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgc2VsZWN0RGF0ZShkYXRlKSB7XG4gICAgICB0aGlzLnNldERhdGUoZGVzY3JpYmVEYXRlKGRhdGUpLCB0cnVlKVxuICAgICAgdGhpcy4kZW1pdCgnc2VsZWN0JylcbiAgICB9LFxuXG4gICAgc2VsZWN0TW9udGgobW9udGgpIHtcbiAgICAgIHRoaXMuc2V0TW9kZSgnZGF5JylcbiAgICAgIC8vIFNldCBkYXkgdG8gMSB0byBhdm9pZCBzZWxlY3RpbmcgYSBkYXRlIHRoYXQgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGVcbiAgICAgIC8vIG5ldyBtb250aCwgZS5nLiBGZWIgMzEgLT4gTWFyIDMuXG4gICAgICB0aGlzLnNldERhdGUoeyBtb250aCwgZGF5OiAxIH0sIHRydWUpXG4gICAgfSxcblxuICAgIHNlbGVjdFllYXIoeWVhcikge1xuICAgICAgdGhpcy5zZXRNb2RlKCdtb250aCcpXG4gICAgICB0aGlzLnNldERhdGUoeyB5ZWFyIH0sIHRydWUpXG4gICAgfSxcblxuICAgIGdldFllYXJNb250aCh5ZWFyLCBtb250aCkge1xuICAgICAgaWYgKG1vbnRoID4gMTEpIHtcbiAgICAgICAgeWVhcisrXG4gICAgICAgIG1vbnRoID0gMFxuICAgICAgfSBlbHNlIGlmIChtb250aCA8IDApIHtcbiAgICAgICAgeWVhci0tXG4gICAgICAgIG1vbnRoID0gMTFcbiAgICAgIH1cbiAgICAgIHJldHVybiB7IHllYXIsIG1vbnRoIH1cbiAgICB9LFxuXG4gICAgZGF0ZVRvU3RyaW5nKFxuICAgICAgZGF0ZSxcbiAgICAgIHsgeWVhciwgbW9udGgsIGRheSB9ID0geyB5ZWFyOiB0cnVlLCBtb250aDogdHJ1ZSwgZGF5OiB0cnVlIH1cbiAgICApIHtcbiAgICAgIHJldHVybiBkYXRlLnRvTG9jYWxlU3RyaW5nKHRoaXMubG9jYWxlLCB7XG4gICAgICAgIHllYXI6IHllYXIgJiYgJ251bWVyaWMnLFxuICAgICAgICBtb250aDogbW9udGggJiYgJ2xvbmcnLFxuICAgICAgICBkYXk6IGRheSAmJiAnbnVtZXJpYydcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGRlY2FkZVRvU3RyaW5nKGRhdGUpIHtcbiAgICAgIGNvbnN0IHllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKGRhdGUuZ2V0RnVsbFllYXIoKSlcbiAgICAgIHJldHVybiBgJHt5ZWFyfSDigJMgJHt5ZWFyICsgOX1gXG4gICAgfSxcblxuICAgIGdldERheXNJbk1vbnRoKHllYXIsIG1vbnRoKSB7XG4gICAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGggKyAxLCAwKS5nZXREYXRlKClcbiAgICB9LFxuXG4gICAgZ2V0Rmlyc3RZZWFyT2ZEZWNhZGUoeWVhcikge1xuICAgICAgY29uc3QgeWVhclN0ciA9IHllYXIudG9TdHJpbmcoKVxuICAgICAgcmV0dXJuICtgJHt5ZWFyU3RyLnNsaWNlKDAsIC0xKX0wYFxuICAgIH0sXG5cbiAgICBuYXZpZ2F0ZSh7IHN0ZXAsIGVudGVyLCBtb2RlID0gdGhpcy5jdXJyZW50TW9kZSwgdXBkYXRlID0gZmFsc2UgfSkge1xuICAgICAgY29uc3QgeyBjdXJyZW50VmFsdWUgfSA9IHRoaXNcbiAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgIHN3aXRjaCAobW9kZSkge1xuICAgICAgICAgIGNhc2UgJ2RheSc6XG4gICAgICAgICAgICB0aGlzLnNldERhdGUoeyBkYXk6IGN1cnJlbnRWYWx1ZS5nZXREYXRlKCkgKyBzdGVwIH0sIHVwZGF0ZSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAnbW9udGgnOlxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKHsgbW9udGg6IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpICsgc3RlcCB9LCB1cGRhdGUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICAgICAgdGhpcy5zZXREYXRlKHsgeWVhcjogY3VycmVudFZhbHVlLmdldEZ1bGxZZWFyKCkgKyBzdGVwIH0sIHVwZGF0ZSlcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH0gZWxzZSBpZiAoZW50ZXIpIHtcbiAgICAgICAgc3dpdGNoICh0aGlzLmN1cnJlbnRNb2RlKSB7XG4gICAgICAgICAgY2FzZSAnZGF5JzpcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RGF0ZShjdXJyZW50VmFsdWUpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgICAgICAgIHRoaXMuc2V0TW9kZSgnZGF5JylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgY2FzZSAneWVhcic6XG4gICAgICAgICAgICB0aGlzLnNldE1vZGUoJ21vbnRoJylcbiAgICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlRGF0ZVJhbmdlKCkge1xuICAgICAgdGhpcy5kYXRlUmFuZ2UgPSBbXVxuICAgICAgdGhpcy55ZWFyUmFuZ2UgPSBbXVxuXG4gICAgICBjb25zdCB7IGN1cnJlbnRWYWx1ZSB9ID0gdGhpc1xuICAgICAgY29uc3QgeWVhciA9IGN1cnJlbnRWYWx1ZS5nZXRGdWxsWWVhcigpXG4gICAgICBjb25zdCBtb250aCA9IGN1cnJlbnRWYWx1ZS5nZXRNb250aCgpXG4gICAgICBjb25zdCBzdGFydFllYXIgPSB0aGlzLmdldEZpcnN0WWVhck9mRGVjYWRlKHllYXIpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDEwOyBpKyspIHtcbiAgICAgICAgdGhpcy55ZWFyUmFuZ2UucHVzaChzdGFydFllYXIgKyBpKVxuICAgICAgfVxuICAgICAgY29uc3QgY3Vyck1vbnRoRmlyc3REYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSlcbiAgICAgIGxldCBmaXJzdERheVdlZWsgPSBjdXJyTW9udGhGaXJzdERheS5nZXREYXkoKSArIDFcbiAgICAgIGlmIChmaXJzdERheVdlZWsgPT09IDApIHtcbiAgICAgICAgZmlyc3REYXlXZWVrID0gN1xuICAgICAgfVxuICAgICAgY29uc3QgbnVtRGF5cyA9IHRoaXMuZ2V0RGF5c0luTW9udGgoeWVhciwgbW9udGgpXG4gICAgICBpZiAoZmlyc3REYXlXZWVrID4gMSkge1xuICAgICAgICBjb25zdCBwcmV2TW9udGggPSB0aGlzLmdldFllYXJNb250aCh5ZWFyLCBtb250aCAtIDEpXG4gICAgICAgIGNvbnN0IHByZXZNb250aE51bURheXMgPSB0aGlzLmdldERheXNJbk1vbnRoKFxuICAgICAgICAgIHByZXZNb250aC55ZWFyLFxuICAgICAgICAgIHByZXZNb250aC5tb250aFxuICAgICAgICApXG4gICAgICAgIGZvciAobGV0IGkgPSAxOyBpIDwgZmlyc3REYXlXZWVrOyBpKyspIHtcbiAgICAgICAgICBjb25zdCBkYXkgPSBwcmV2TW9udGhOdW1EYXlzIC0gZmlyc3REYXlXZWVrICsgaSArIDFcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUocHJldk1vbnRoLnllYXIsIHByZXZNb250aC5tb250aCwgZGF5KVxuICAgICAgICAgIHRoaXMuZGF0ZVJhbmdlLnB1c2goe1xuICAgICAgICAgICAgdGV4dDogZGF5LFxuICAgICAgICAgICAgZGF0ZSxcbiAgICAgICAgICAgIHN0YXRlOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKClcbiAgICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IG51bURheXM7IGkrKykge1xuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoeWVhciwgbW9udGgsIGkpXG4gICAgICAgIGNvbnN0IGlzRGF5ID0gZGF0ZSA9PiAoXG4gICAgICAgICAgZGF0ZSAmJlxuICAgICAgICAgIGRhdGUuZ2V0RGF0ZSgpID09PSBpICYmXG4gICAgICAgICAgZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmXG4gICAgICAgICAgZGF0ZS5nZXRNb250aCgpID09PSBtb250aFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IHN0YXRlID0gaXNEYXkodGhpcy5tb2RlbFZhbHVlKVxuICAgICAgICAgID8gJ2FjdGl2ZSdcbiAgICAgICAgICA6IGlzRGF5KG5vdylcbiAgICAgICAgICAgID8gJ3RvZGF5J1xuICAgICAgICAgICAgOiB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKVxuICAgICAgICAgICAgICA/ICdkaXNhYmxlZCdcbiAgICAgICAgICAgICAgOiBpc0RheShjdXJyZW50VmFsdWUpXG4gICAgICAgICAgICAgICAgPyAnY3VycmVudCdcbiAgICAgICAgICAgICAgICA6IG51bGxcbiAgICAgICAgdGhpcy5kYXRlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgdGV4dDogaSxcbiAgICAgICAgICBkYXRlLFxuICAgICAgICAgIHN0YXRlXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG5leHRNb250aE5lZWQgPSA0MiAtIHRoaXMuZGF0ZVJhbmdlLmxlbmd0aFxuICAgICAgaWYgKG5leHRNb250aE5lZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IG5leHRNb250aCA9IHRoaXMuZ2V0WWVhck1vbnRoKHllYXIsIG1vbnRoICsgMSlcbiAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gbmV4dE1vbnRoTmVlZDsgaSsrKSB7XG4gICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKG5leHRNb250aC55ZWFyLCBuZXh0TW9udGgubW9udGgsIGkpXG4gICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLmRpc2FibGVkRGF0ZShkYXRlKSA/ICdkaXNhYmxlZCcgOiAnZ3JheSdcbiAgICAgICAgICB0aGlzLmRhdGVSYW5nZS5wdXNoKHtcbiAgICAgICAgICAgIHRleHQ6IGksXG4gICAgICAgICAgICBkYXRlLFxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGxvY2FsZU5hbWVzID0ge31cblxuLy8gQ2FsbGluZyBgdG9Mb2NhbGVTdHJpbmcoKWAgdGhpcyBtdWNoIGFwcGVhcnMgdG8gYmUgZXhwZW5zaXZlLCBzbyBjYWNoZSBpdDpcbmZ1bmN0aW9uIGdldExvY2FsZU5hbWVzKGxvY2FsZSkge1xuICBsZXQgbmFtZXMgPSBsb2NhbGVOYW1lc1tsb2NhbGVdXG4gIGlmICghbmFtZXMpIHtcbiAgICBjb25zdCB3ZWVrZGF5TmFtZXMgPSBbXVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgNzsgaSsrKSB7XG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoMCwgMCwgaSlcbiAgICAgIHdlZWtkYXlOYW1lcy5wdXNoKHtcbiAgICAgICAgbG9uZzogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgd2Vla2RheTogJ3Nob3J0JyB9KVxuICAgICAgfSlcbiAgICB9XG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFtdXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gMTI7IGkrKykge1xuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKDAsIGksIDApXG4gICAgICBtb250aE5hbWVzLnB1c2goe1xuICAgICAgICBsb25nOiBkYXRlLnRvTG9jYWxlU3RyaW5nKGxvY2FsZSwgeyBtb250aDogJ2xvbmcnIH0pLFxuICAgICAgICBzaG9ydDogZGF0ZS50b0xvY2FsZVN0cmluZyhsb2NhbGUsIHsgbW9udGg6ICdzaG9ydCcgfSlcbiAgICAgIH0pXG4gICAgfVxuICAgIG5hbWVzID0gbG9jYWxlTmFtZXNbbG9jYWxlXSA9IHtcbiAgICAgIHdlZWtkYXlOYW1lcyxcbiAgICAgIG1vbnRoTmFtZXNcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5hbWVzXG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1jYWxlbmRhciB7XG4gIG1pbi13aWR0aDogMjQwcHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi5kaXRvLWNhbGVuZGFyLXBvcHVwIHtcbiAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgei1pbmRleDogJHotaW5kZXgtcG9wdXA7XG59XG5cbi5kaXRvLWNhbGVuZGFyLWJvZHkge1xuICBwYWRkaW5nOiAwIDAuNWVtO1xuXG4gIHNwYW4ge1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogY2FsYygxMDAlIC8gNyk7XG4gICAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICAgIGxpbmUtaGVpZ2h0OiBjYWxjKCN7JGlucHV0LWhlaWdodH0gLSAycHgpO1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYm9yZGVyOiAkYm9yZGVyLXdpZHRoIHNvbGlkIHRyYW5zcGFyZW50O1xuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tdG9kYXkge1xuICAgIGJvcmRlcjogJGJvcmRlci13aWR0aCBzb2xpZCAkY29sb3ItYWN0aXZlO1xuICAgIGNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICB9XG5cbiAgLmRpdG8tY2FsZW5kYXItaXRlbS1hY3RpdmUge1xuICAgICYsXG4gICAgJjpob3ZlciB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgICAgY29sb3I6IHdoaXRlO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWQge1xuICAgIGJhY2tncm91bmQ6IHdoaXRlO1xuICAgIGN1cnNvcjogZGVmYXVsdDtcbiAgfVxuXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZGlzYWJsZWQsXG4gIC5kaXRvLWNhbGVuZGFyLWl0ZW0tZ3JheSB7XG4gICAgY29sb3I6ICM5OTk5OTk7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItbW9udGhzLFxuLmRpdG8tY2FsZW5kYXIteWVhcnMge1xuICBzcGFuIHtcbiAgICB3aWR0aDogY2FsYygxMDAlIC8gNCk7XG4gICAgbWFyZ2luOiAwLjVlbSAwO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW4ge1xuICB3aWR0aDogY2FsYygxMDAlIC8gNSk7XG59XG5cbi5kaXRvLWNhbGVuZGFyIGEsXG4uZGl0by1jYWxlbmRhci1kYXRlcyBzcGFuLFxuLmRpdG8tY2FsZW5kYXItbW9udGhzIHNwYW4sXG4uZGl0by1jYWxlbmRhci15ZWFycyBzcGFuIHtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgY3Vyc29yOiBwb2ludGVyO1xufVxuXG4uZGl0by1jYWxlbmRhci1oZWFkZXIgc3BhbiB7XG4gIGN1cnNvcjogZGVmYXVsdDtcblxuICBhIHtcbiAgICBwYWRkaW5nOiAwIDAuMmVtO1xuICB9XG59XG5cbi5kaXRvLWNhbGVuZGFyLWRhdGVzIHNwYW46aG92ZXIsXG4uZGl0by1jYWxlbmRhci1tb250aHMgc3Bhbjpob3Zlcixcbi5kaXRvLWNhbGVuZGFyLXllYXJzIHNwYW46aG92ZXIsXG4uZGl0by1jYWxlbmRhcjpub3QoOmhvdmVyKSAuZGl0by1jYWxlbmRhci1pdGVtLWN1cnJlbnQge1xuICBiYWNrZ3JvdW5kOiAkY29sb3ItaGlnaGxpZ2h0O1xufVxuXG4uZGl0by1jYWxlbmRhci13ZWVrZGF5cyBzcGFuIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xufVxuXG4uZGl0by1jYWxlbmRhci1oZWFkZXIsXG4uZGl0by1jYWxlbmRhci1mb290ZXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbn1cblxuLmRpdG8tY2FsZW5kYXItZm9vdGVyIHtcbiAgYm9yZGVyLXRvcDogJGJvcmRlci1zdHlsZTtcbn1cblxuLmRpdG8tY2FsZW5kYXItaGVhZGVyIHtcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGU7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgPiBzcGFuIHtcbiAgICBtYXJnaW46IGF1dG87XG4gICAgcGFkZGluZzogMCAwLjVlbTtcbiAgfVxuXG4gIGEge1xuICAgIGZvbnQtd2VpZ2h0OiBib2xkO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2LFxuLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogNSU7XG4gIG1pbi13aWR0aDogMmVtO1xuICBtYXgtd2lkdGg6IDNlbTtcblxuICAmOjphZnRlciB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgcmlnaHQ6IDA7XG4gICAgZm9udC1zaXplOiAxLjI1ZW07XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1wcmV2IHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfigLknO1xuICB9XG5cbiAgJi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfCqyc7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc3RlcC1uZXh0IHtcbiAgJjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfigLonO1xuICB9XG5cbiAgJi5kaXRvLWNhbGVuZGFyLXN0ZXAteWVhcjo6YWZ0ZXIge1xuICAgIGNvbnRlbnQ6ICfCuyc7XG4gIH1cbn1cblxuLmRpdG8tY2FsZW5kYXItc2VsZWN0LW5vdyB7XG4gICY6OmFmdGVyIHtcbiAgICBjb250ZW50OiAnTm93JztcbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkRXZlbnRzKHRhcmdldHMsIGV2ZW50cykge1xuICB0YXJnZXRzID1cbiAgICB0YXJnZXRzIGluc3RhbmNlb2YgTm9kZUxpc3RcbiAgICAgID8gQXJyYXkuZnJvbSh0YXJnZXRzKVxuICAgICAgOiBhc0FycmF5KHRhcmdldHMpXG5cbiAgZm9yIChjb25zdCBbdHlwZSwgaGFuZGxlcl0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICAgIHRhcmdldC5hZGRFdmVudExpc3RlbmVyKHR5cGUsIGhhbmRsZXIsIGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgZm9yIChjb25zdCBbdHlwZSwgaGFuZGxlcl0gb2YgT2JqZWN0LmVudHJpZXMoZXZlbnRzKSkge1xuICAgICAgICBmb3IgKGNvbnN0IHRhcmdldCBvZiB0YXJnZXRzKSB7XG4gICAgICAgICAgdGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZSwgaGFuZGxlciwgZmFsc2UpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbWJpbmVFdmVudHMoLi4uZXZlbnRzKSB7XG4gIHJldHVybiB7XG4gICAgcmVtb3ZlKCkge1xuICAgICAgZm9yIChjb25zdCBldmVudCBvZiBldmVudHMpIHtcbiAgICAgICAgZXZlbnQucmVtb3ZlKClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEtleShldmVudCkge1xuICByZXR1cm4ge1xuICAgIDM3OiAnbGVmdCcsXG4gICAgMzg6ICd1cCcsXG4gICAgMzk6ICdyaWdodCcsXG4gICAgNDA6ICdkb3duJyxcbiAgICAxMzogJ2VudGVyJ1xuICB9W2V2ZW50Py5rZXlDb2RlXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0S2V5TmF2aWdhdGlvbihldmVudCkge1xuICBjb25zdCBrZXkgPSBnZXRLZXkoZXZlbnQpXG4gIHJldHVybiB7XG4gICAgaG9yOiB7IGxlZnQ6IC0xLCByaWdodDogMSB9W2tleV0gfHwgMCxcbiAgICB2ZXI6IHsgdXA6IC0xLCBkb3duOiAxIH1ba2V5XSB8fCAwLFxuICAgIGVudGVyOiBrZXkgPT09ICdlbnRlcidcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFyZ2V0KGNvbXBvbmVudCkge1xuICBjb25zdCB0YXJnZXQgPSBpc1N0cmluZyhjb21wb25lbnQudGFyZ2V0KVxuICAgID8gY29tcG9uZW50LiRyZWZzW2NvbXBvbmVudC50YXJnZXRdXG4gICAgOiBjb21wb25lbnQudGFyZ2V0XG4gIHJldHVybiB0YXJnZXQ/LiRlbCA/PyB0YXJnZXRcbn1cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdHJpZ2dlci1jb250YWluZXJcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWlmPVwiYWx3YXlzU2hvd1wiXG4gICAgcmVmPVwidHJpZ2dlclwiXG4gICAgOmNsYXNzPVwidHJpZ2dlckNsYXNzXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnY2xpY2snXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICAgIEBjbGljaz1cIm9uQ2xpY2tcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICAuZGl0by10cmlnZ2VyKFxuICAgIHYtZWxzZS1pZj1cInRyaWdnZXIgPT09ICdob3ZlcidcIlxuICAgIHJlZj1cInRyaWdnZXJcIlxuICAgIDpjbGFzcz1cInRyaWdnZXJDbGFzc1wiXG4gICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICBAbW91c2VsZWF2ZT1cIm9uSG92ZXIoZmFsc2UpXCJcbiAgKVxuICAgIHNsb3QobmFtZT1cInRyaWdnZXJcIilcbiAgLmRpdG8tdHJpZ2dlcihcbiAgICB2LWVsc2UtaWY9XCJ0cmlnZ2VyID09PSAnZm9jdXMnIHx8IHRyaWdnZXIgPT09ICdhbHdheXMnXCJcbiAgICByZWY9XCJ0cmlnZ2VyXCJcbiAgICA6Y2xhc3M9XCJ0cmlnZ2VyQ2xhc3NcIlxuICApXG4gICAgc2xvdChuYW1lPVwidHJpZ2dlclwiKVxuICBUcmFuc2l0aW9uKDpuYW1lPVwiYGRpdG8tJHt0cmFuc2l0aW9ufWBcIilcbiAgICAuZGl0by1wb3B1cChcbiAgICAgIHYtaWY9XCJ0cmlnZ2VyID09PSAnaG92ZXInXCJcbiAgICAgIHYtc2hvdz1cInNob3dQb3B1cFwiXG4gICAgICByZWY9XCJwb3B1cFwiXG4gICAgICA6Y2xhc3M9XCJwb3B1cENsYXNzXCJcbiAgICAgIDpzdHlsZT1cInBvcHVwU3R5bGVcIlxuICAgICAgQG1vdXNlZW50ZXI9XCJvbkhvdmVyKHRydWUpXCJcbiAgICAgIEBtb3VzZWxlYXZlPVwib25Ib3ZlcihmYWxzZSlcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJzaG93UG9wdXBcIlxuICAgICAgICBuYW1lPVwicG9wdXBcIlxuICAgICAgKVxuICAgIC5kaXRvLXBvcHVwKFxuICAgICAgdi1lbHNlXG4gICAgICB2LXNob3c9XCJzaG93UG9wdXBcIlxuICAgICAgcmVmPVwicG9wdXBcIlxuICAgICAgOmNsYXNzPVwicG9wdXBDbGFzc1wiXG4gICAgICA6c3R5bGU9XCJwb3B1cFN0eWxlXCJcbiAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwic2hvd1BvcHVwXCJcbiAgICAgICAgbmFtZT1cInBvcHVwXCJcbiAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBoeXBoZW5hdGUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgYWRkRXZlbnRzLCBjb21iaW5lRXZlbnRzIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5pbXBvcnQgeyBnZXRUYXJnZXQgfSBmcm9tICcuLi91dGlscy90cmlnZ2VyJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTpzaG93J10sXG5cbiAgcHJvcHM6IHtcbiAgICB0cmlnZ2VyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2NsaWNrJyB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbScgfSxcbiAgICBzaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB0YXJnZXQ6IHsgdHlwZTogW1N0cmluZywgSFRNTEVsZW1lbnRdLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgY3VzdG9tQ2xhc3M6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgekluZGV4OiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMCB9LFxuICAgIGtlZXBJblZpZXc6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGhpZGVXaGVuQ2xpY2tPdXRzaWRlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBhbHdheXNTaG93OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY292ZXI6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBoaWRlRGVsYXk6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiAwIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIHBvcHVwUGxhY2VtZW50OiB0aGlzLnBsYWNlbWVudCxcbiAgICAgIGZvY3VzRXZlbnRzOiBudWxsLFxuICAgICAgY2xvc2VFdmVudHM6IG51bGwsXG4gICAgICBwb3B1cEV2ZW50czogbnVsbCxcbiAgICAgIGJsdXJUaW1lcjogbnVsbCxcbiAgICAgIG1vdXNlTGVhdmVUaW1lcjogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHRyaWdnZXJDbGFzcygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgICdkaXRvLXRyaWdnZXItZGlzYWJsZWQnOiB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBvcHVwQ2xhc3MoKSB7XG4gICAgICBjb25zdCBjbGFzc2VzID0ge1xuICAgICAgICBbYGRpdG8tcG9wdXAtJHtoeXBoZW5hdGUodGhpcy5wbGFjZW1lbnQpfWBdOiB0cnVlXG4gICAgICB9XG4gICAgICBpZiAodGhpcy5jdXN0b21DbGFzcykge1xuICAgICAgICBjbGFzc2VzW3RoaXMuY3VzdG9tQ2xhc3NdID0gdHJ1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNsYXNzZXNcbiAgICB9LFxuXG4gICAgcG9wdXBTdHlsZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnpJbmRleCA/IGB6LWluZGV4OiAke3RoaXMuekluZGV4fWAgOiAnJ1xuICAgIH0sXG5cbiAgICB0cmlnZ2VyVGFyZ2V0KCkge1xuICAgICAgcmV0dXJuIGdldFRhcmdldCh0aGlzKVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93IHx8IHRoaXMuYWx3YXlzU2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCB0bylcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy5vblNob3dQb3B1cCh0bykpXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgIGlmICh0aGlzLnRyaWdnZXIgPT09ICdmb2N1cycpIHtcbiAgICAgIHRoaXMuZm9jdXNFdmVudHMgPSB0aGlzLmFkZEZvY3VzRXZlbnRzKHRoaXMudHJpZ2dlclRhcmdldCA/PyB0cmlnZ2VyKVxuICAgIH1cblxuICAgIGlmICh0aGlzLmhpZGVXaGVuQ2xpY2tPdXRzaWRlICYmICF0aGlzLmFsd2F5c1Nob3cpIHtcbiAgICAgIC8vIFVzZSAnbW91c2V1cCcgaW5zdGVhZCBvZiAnY2xpY2snLCBzaW5jZSBjbGljayBhcHBlYXJzIHRvIGhhcHBlbiBhZnRlclxuICAgICAgLy8gdGhlIERPTSBpbnNpZGUgb2YgcG9wdXBzIGNvdWxkIGNoYW5nZSBpbiBhIHdheSBzbyB0aGF0IHRoZSBjaGVja1xuICAgICAgLy8gYHBvcHVwLmNvbnRhaW5zKGV2ZW50LnRhcmdldClgIHdvdWxkIGZhaWw6XG4gICAgICB0aGlzLmNsb3NlRXZlbnRzID0gYWRkRXZlbnRzKHdpbmRvdywge1xuICAgICAgICBtb3VzZXVwOiBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgJiZcbiAgICAgICAgICAgICFwb3B1cC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdHJpZ2dlci5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAgICAgICAhdGhpcy50cmlnZ2VyVGFyZ2V0Py5jb250YWlucyhldmVudC50YXJnZXQpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYWx3YXlzU2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgdGhpcy5zaG93UG9wdXAgPSB0aGlzLnNob3dcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5mb2N1c0V2ZW50cz8ucmVtb3ZlKClcbiAgICB0aGlzLmNsb3NlRXZlbnRzPy5yZW1vdmUoKVxuICAgIHRoaXMucG9wdXBFdmVudHM/LnJlbW92ZSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHVwZGF0ZVBvc2l0aW9uKCkge1xuICAgICAgY29uc3QgeyB0cmlnZ2VyLCBwb3B1cCB9ID0gdGhpcy4kcmVmc1xuICAgICAgaWYgKHRoaXMuc2hvdyAmJiBwb3B1cC5vZmZzZXRXaWR0aCA9PT0gMCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudXBkYXRlUG9zaXRpb24oKSwgMClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMudHJpZ2dlclRhcmdldCA/PyB0cmlnZ2VyXG4gICAgICAvLyBBY3R1YWxseSByZXNpemUgdGhlIHBvcHVwJ3MgZmlyc3QgY2hpbGQsIHNvIHRoZXkgY2FuIHNldCBzaXplIGxpbWl0cy5cbiAgICAgIGNvbnN0IGVsID0gdGhpcy50YXJnZXQgPT09ICdwb3B1cCcgPyB0cmlnZ2VyIDogcG9wdXAuZmlyc3RFbGVtZW50Q2hpbGRcbiAgICAgIGlmIChlbCkge1xuICAgICAgICBlbC5zdHlsZS53aWR0aCA9IGdldENvbXB1dGVkU3R5bGUodGFyZ2V0KS53aWR0aFxuICAgICAgfVxuXG4gICAgICBjb25zdCBib3VuZHMgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgIGNvbnN0IHRyaWdnZXJMZWZ0ID0gYm91bmRzLmxlZnQgKyB3aW5kb3cuc2Nyb2xsWFxuICAgICAgY29uc3QgdHJpZ2dlclRvcCA9IGJvdW5kcy50b3AgKyB3aW5kb3cuc2Nyb2xsWVxuICAgICAgY29uc3QgdHJpZ2dlcldpZHRoID0gYm91bmRzLndpZHRoXG4gICAgICBjb25zdCB0cmlnZ2VySGVpZ2h0ID0gYm91bmRzLmhlaWdodFxuICAgICAgY29uc3QgcG9wdXBXaWR0aCA9IHBvcHVwLm9mZnNldFdpZHRoXG4gICAgICBjb25zdCBwb3B1cEhlaWdodCA9IHBvcHVwLm9mZnNldEhlaWdodFxuXG4gICAgICBsZXQgW3BhcnQxLCBwYXJ0Ml0gPSB0aGlzLnBvcHVwUGxhY2VtZW50LnNwbGl0KCctJykgfHwgW11cbiAgICAgIGlmICh0aGlzLmtlZXBJblZpZXcpIHtcbiAgICAgICAgY29uc3Qgd2luV2lkdGggPSB3aW5kb3cuaW5uZXJXaWR0aFxuICAgICAgICBjb25zdCB3aW5IZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHRcbiAgICAgICAgaWYgKHBhcnQxID09PSAndG9wJykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyVG9wIDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ2JvdHRvbSdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgaWYgKHdpbkhlaWdodCAtIHRyaWdnZXJUb3AgLSB0cmlnZ2VySGVpZ2h0IDwgcG9wdXBIZWlnaHQpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ3RvcCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdsZWZ0Jykge1xuICAgICAgICAgIGlmICh0cmlnZ2VyTGVmdCA8IHBvcHVwV2lkdGgpIHtcbiAgICAgICAgICAgIHBhcnQxID0gJ3JpZ2h0J1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MSA9PT0gJ3JpZ2h0Jykge1xuICAgICAgICAgIGlmICh3aW5XaWR0aCAtIHRyaWdnZXJMZWZ0IC0gdHJpZ2dlcldpZHRoIDwgcG9wdXBXaWR0aCkge1xuICAgICAgICAgICAgcGFydDEgPSAnbGVmdCdcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFydDIgPT09ICd0b3AnKSB7XG4gICAgICAgICAgaWYgKHdpbkhlaWdodCAtIHRyaWdnZXJUb3AgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDIgPSAnYm90dG9tJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ2JvdHRvbScpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlclRvcCArIHRyaWdnZXJIZWlnaHQgPCBwb3B1cEhlaWdodCkge1xuICAgICAgICAgICAgcGFydDIgPSAndG9wJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChwYXJ0MiA9PT0gJ2xlZnQnKSB7XG4gICAgICAgICAgaWYgKHdpbldpZHRoIC0gdHJpZ2dlckxlZnQgPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdyaWdodCdcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDIgPT09ICdyaWdodCcpIHtcbiAgICAgICAgICBpZiAodHJpZ2dlckxlZnQgKyB0cmlnZ2VyV2lkdGggPCBwb3B1cFdpZHRoKSB7XG4gICAgICAgICAgICBwYXJ0MiA9ICdsZWZ0J1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgbGVmdCA9IDBcbiAgICAgIGxldCB0b3AgPSAwXG4gICAgICBzd2l0Y2ggKHBhcnQxKSB7XG4gICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgdG9wIC09IHBvcHVwSGVpZ2h0XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnbGVmdCc6XG4gICAgICAgICAgbGVmdCAtPSBwb3B1cFdpZHRoXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgIGxlZnQgKz0gdHJpZ2dlcldpZHRoXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnYm90dG9tJzpcbiAgICAgICAgICB0b3AgKz0gdHJpZ2dlckhlaWdodFxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBzd2l0Y2ggKHBhcnQyKSB7XG4gICAgICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgICAgICBsZWZ0IC09IHBvcHVwV2lkdGggLSB0cmlnZ2VyV2lkdGhcbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgIHRvcCAtPSBwb3B1cEhlaWdodCAtIHRyaWdnZXJIZWlnaHRcbiAgICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY292ZXIpIHtcbiAgICAgICAgaWYgKHBhcnQxID09PSAndG9wJykge1xuICAgICAgICAgIHRvcCArPSB0cmlnZ2VySGVpZ2h0XG4gICAgICAgIH0gZWxzZSBpZiAocGFydDEgPT09ICdib3R0b20nKSB7XG4gICAgICAgICAgdG9wIC09IHRyaWdnZXJIZWlnaHRcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRhcmdldCAhPT0gdHJpZ2dlcikge1xuICAgICAgICBjb25zdCB0cmlnZ2VyQm91bmRzID0gdHJpZ2dlci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICBsZWZ0ICs9IHRyaWdnZXJMZWZ0IC0gdHJpZ2dlckJvdW5kcy5sZWZ0XG4gICAgICAgIHRvcCArPSB0cmlnZ2VyVG9wIC0gdHJpZ2dlckJvdW5kcy50b3BcbiAgICAgIH1cbiAgICAgIHBvcHVwLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fXB4YFxuICAgICAgcG9wdXAuc3R5bGUudG9wID0gYCR7dG9wfXB4YFxuICAgIH0sXG5cbiAgICBhZGRGb2N1c0V2ZW50cyhwYXJlbnQpIHtcbiAgICAgIGNvbnN0IHRhcmdldHMgPSBwYXJlbnQucXVlcnlTZWxlY3RvckFsbCgnaW5wdXQsIHRleHRhcmVhJylcbiAgICAgIGxldCBpbnB1dFxuXG4gICAgICByZXR1cm4gY29tYmluZUV2ZW50cyhcbiAgICAgICAgYWRkRXZlbnRzKHRhcmdldHMsIHtcbiAgICAgICAgICBmb2N1czogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZXIpXG4gICAgICAgICAgfSxcblxuICAgICAgICAgIGJsdXI6ICgpID0+IHtcbiAgICAgICAgICAgIC8vIFVzZSB0aW1lb3V0IHRvIGFsbG93IGNsaWNrZWQgaW5wdXRzIHRvIGdyYWIgZm9jdXNcbiAgICAgICAgICAgIHRoaXMuYmx1clRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGlmICghdGhpcy4kcmVmcy5wb3B1cC5tYXRjaGVzKCc6Zm9jdXMtd2l0aGluJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IGZhbHNlXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDApXG4gICAgICAgICAgfVxuICAgICAgICB9KSxcblxuICAgICAgICBhZGRFdmVudHMocGFyZW50LCB7XG4gICAgICAgICAgbW91c2Vkb3duOiBldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5tYXRjaGVzKCdpbnB1dCwgdGV4dGFyZWEsIGJ1dHRvbicpKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0Lm1hdGNoZXMoJy5kaXRvLWJ1dHRvbi1jbGVhcicpKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHRyaWdnZXIgPSB0aGlzLnRyaWdnZXJUYXJnZXQgPz8gdGhpcy4kcmVmcy50cmlnZ2VyXG4gICAgICAgICAgICAgIC8vIE1hcmsgdHJpZ2dlciBpbnB1dCBhcyByZWFkb25seSBzbyBpdCBjYW4ndCBsb29zZSBmb2N1cyB3aGlsZVxuICAgICAgICAgICAgICAvLyB1c2VyIGRvZXMgb3RoZXIgbW91c2UtYWN0aXZpdGllcyBpbiBwb3B1cC5cbiAgICAgICAgICAgICAgaW5wdXQgPSB0cmlnZ2VyLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0LCB0ZXh0YXJlYScpXG4gICAgICAgICAgICAgIGlmIChpbnB1dCAmJiAhaW5wdXQuaGFzQXR0cmlidXRlKCdyZWFkb25seScpKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQuc2V0QXR0cmlidXRlKCdyZWFkb25seScsICd0cnVlJylcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpbnB1dCA9IG51bGxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBtb3VzZXVwOiBldmVudCA9PiB7XG4gICAgICAgICAgICBpZiAoaW5wdXQpIHtcbiAgICAgICAgICAgICAgLy8gR2l2ZSBzb21lIHRpbWUgZm9yIG90aGVyIGV2ZW50cyB0byB1cGRhdGUgaW5wdXQgYmVmb3JlIGl0XG4gICAgICAgICAgICAgIC8vIGJlY29tZXMgZWRpdGFibGUgYW5kIHN0aWxsIGZvY3VzZWQgYWdhaW4uXG4gICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlucHV0LnJlbW92ZUF0dHJpYnV0ZSgncmVhZG9ubHknKVxuICAgICAgICAgICAgICAgIGlmICghZXZlbnQudGFyZ2V0Lm1hdGNoZXMoJ2lucHV0LCB0ZXh0YXJlYSwgYnV0dG9uJykpIHtcbiAgICAgICAgICAgICAgICAgIGlucHV0LmZvY3VzKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaW5wdXQgPSBudWxsXG4gICAgICAgICAgICAgIH0sIDApXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBvblNob3dQb3B1cChzaG93KSB7XG4gICAgICBpZiAoc2hvdykge1xuICAgICAgICBpZiAodGhpcy50cmlnZ2VyID09PSAnZm9jdXMnKSB7XG4gICAgICAgICAgdGhpcy5wb3B1cEV2ZW50cyA9IHRoaXMuYWRkRm9jdXNFdmVudHModGhpcy4kcmVmcy5wb3B1cClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZVBvc2l0aW9uKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucG9wdXBFdmVudHM/LnJlbW92ZSgpXG4gICAgICAgIHRoaXMucG9wdXBFdmVudHMgPSBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2xpY2soKSB7XG4gICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uSG92ZXIoZW50ZXIpIHtcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5tb3VzZUxlYXZlVGltZXIpXG4gICAgICAgIGlmIChlbnRlcikge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0aGlzLmhpZGVEZWxheSkge1xuICAgICAgICAgICAgdGhpcy5tb3VzZUxlYXZlVGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSBmYWxzZVxuICAgICAgICAgICAgfSwgdGhpcy5oaWRlRGVsYXkpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5AaW1wb3J0ICcuLi9zdHlsZXMvdHJhbnNpdGlvbnMvaW5kZXguc2Nzcyc7XG5cbi5kaXRvLXRyaWdnZXItY29udGFpbmVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xufVxuXG4uZGl0by10cmlnZ2VyLWRpc2FibGVkIHtcbiAgY29sb3I6ICRjb2xvci1kaXNhYmxlZDtcbiAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICBjdXJzb3I6IGRlZmF1bHQ7XG5cbiAgKiB7XG4gICAgY3Vyc29yOiBkZWZhdWx0ICFpbXBvcnRhbnQ7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgICAmOmZvY3VzIHtcbiAgICAgIGJveC1zaGFkb3c6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLXBvcHVwIHtcbiAgcG9zaXRpb246IGFic29sdXRlO1xuICB0b3A6IDA7XG4gIGxlZnQ6IDA7XG4gIHotaW5kZXg6ICR6LWluZGV4LXBvcHVwO1xufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1pbnB1dCg6Y2xhc3M9XCJjbGFzc2VzXCIpXG4gIHNsb3QobmFtZT1cImJlZm9yZVwiKVxuICBpbnB1dChcbiAgICA6aWQ9XCJpZFwiXG4gICAgcmVmPVwiaW5wdXRcIlxuICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgIDp0eXBlPVwidHlwZVwiXG4gICAgOm5hbWU9XCJuYW1lXCJcbiAgICA6dGl0bGU9XCJ0aXRsZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpyZWFkb25seT1cInJlYWRvbmx5XCJcbiAgICA6YXV0b2ZvY3VzPVwiYXV0b2ZvY3VzXCJcbiAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgOmF1dG9jb21wbGV0ZT1cImF1dG9jb21wbGV0ZVwiXG4gICAgOmFyaWEtbGFiZWw9XCJ0aXRsZVwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIClcbiAgc2xvdChuYW1lPVwiYWZ0ZXJcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG4gIGluaGVyaXRBdHRyczogZmFsc2UsXG5cbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0eXBlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ3RleHQnIH0sXG4gICAgaWQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbmFtZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0aXRsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHJlYWRvbmx5OiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgYXV0b2ZvY3VzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYXV0b2NvbXBsZXRlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ29mZicgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGN1cnJlbnRWYWx1ZTogdGhpcy5tb2RlbFZhbHVlLFxuICAgICAgaG92ZXJpbmc6IGZhbHNlLFxuICAgICAgZm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuJGF0dHJzLmNsYXNzXG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBfLCAuLi5hdHRyaWJ1dGVzIH0gPSB0aGlzLiRhdHRyc1xuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNcbiAgICB9LFxuXG4gICAgaW5wdXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy5pbnB1dFxuICAgIH0sXG5cbiAgICBzaXplKCkge1xuICAgICAgLy8gRGV0ZXJtaW5lIHNpemUgYmFzZWQgb24gbWluICYgbWF4IHNldHRpbmdzLCBpZiB0aGV5J3JlIHByb3ZpZGVkLlxuICAgICAgY29uc3QgeyBzaXplLCBtaW4sIG1heCB9ID0gdGhpcy4kYXR0cnNcbiAgICAgIGNvbnN0IGdldExlbmd0aCA9IHZhbHVlID0+ICh2YWx1ZSAhPSBudWxsID8gYCR7dmFsdWV9YC5sZW5ndGggOiAwKVxuICAgICAgcmV0dXJuIHNpemUgfHwgZ2V0TGVuZ3RoKG1pbikgfHwgZ2V0TGVuZ3RoKG1heCkgfHwgdW5kZWZpbmVkXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgbW9kZWxWYWx1ZSh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvICE9PSBmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKGN1cnJlbnRWYWx1ZSkge1xuICAgICAgaWYgKGN1cnJlbnRWYWx1ZSAhPT0gdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgY3VycmVudFZhbHVlKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1pbnB1dCB7XG4gIGRpc3BsYXk6IGlubGluZS1ibG9jaztcblxuICBAZXh0ZW5kICVpbnB1dDtcblxuICBpbnB1dCB7XG4gICAgLy8gSW5oZXJpdCBhbGwgc3R5bGluZyBmcm9tIC5kaXRvLWlucHV0XG4gICAgYWxsOiBpbmhlcml0O1xuICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICB3aWR0aDogMTAwJTtcbiAgICBib3JkZXI6IDA7XG4gICAgbWFyZ2luOiAwO1xuICAgIHBhZGRpbmc6IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuaS5kaXRvLWljb24oXG4gIDpjbGFzcz1ge1xuICAgIFsnZGl0by1pY29uLS0nICsgbmFtZV06IHRydWUsXG4gICAgJ2RpdG8taWNvbi0tZGlzYWJsZWQnOiBkaXNhYmxlZFxuICB9YFxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcHJvcHM6IHtcbiAgICBuYW1lOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICByZXF1aXJlZDogdHJ1ZVxuICAgIH0sXG4gICAgZGlzYWJsZWQ6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLy8gYHlhcm4gYnVpbGQ6aWNvbnNgIGNvbnZlcnRzIHRoZSBpY29uIFNWRyBmaWxlcyB0byBzaWxlbnQgY2xhc3NlcyBpbnNpZGVcbi8vIGBzcmMvc3R5bGVzL21peGlucy9faWNvbnMuc2Nzc2AsIG1ha2luZyB0aGVtIGF2YWlsYWJsZSB0byBhbGwgb3RoZXIgc2Fzc1xuLy8gY29kZSB0aHJvdWdoIGBfaW1wb3J0c2AuXG4vLyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHVzZSB0aGVtIGFzIG5vcm1hbCBDU1MgY2xhc3NlcywgY29udmVydCB0aGVtIGhlcmU6XG5AZWFjaCAkbmFtZSBpbiAkaWNvbnMge1xuICAuZGl0by1pY29uLS0jeyRuYW1lfSB7XG4gICAgJjo6YWZ0ZXIge1xuICAgICAgQGV4dGVuZCAlaWNvbi0jeyRuYW1lfTtcblxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIH1cbiAgfVxufVxuXG4uZGl0by1pY29uIHtcbiAgQGF0LXJvb3QgLmRpdG8taW5wdXQgJiB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGluc2V0OiAkYm9yZGVyLXdpZHRoO1xuICAgIGxlZnQ6IHVuc2V0O1xuICAgIHdpZHRoOiAyZW07XG4gICAgZm9udC1zdHlsZTogbm9ybWFsO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGNvbG9yOiAkY29sb3ItZ3JleTtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG5cbiAgICAmLS1kaXNhYmxlZCB7XG4gICAgICBjb2xvcjogJGNvbG9yLWxpZ2h0O1xuICAgIH1cbiAgfVxuXG4gIEBhdC1yb290IC5kaXRvLWlucHV0OmZvY3VzLXdpdGhpbiAmIHtcbiAgICBjb2xvcjogJGNvbG9yLWFjdGl2ZTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsImV4cG9ydCBmdW5jdGlvbiBzZXRTZWxlY3Rpb24oaW5wdXQsIHsgc3RhcnQsIGVuZCB9KSB7XG4gIGlmIChpbnB1dD8uc2V0U2VsZWN0aW9uUmFuZ2UpIHtcbiAgICBpbnB1dC5mb2N1cygpXG4gICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2Uoc3RhcnQsIGVuZClcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2VsZWN0aW9uKGlucHV0KSB7XG4gIHJldHVybiBpbnB1dCAmJiAnc2VsZWN0aW9uU3RhcnQnIGluIGlucHV0XG4gICAgPyB7IHN0YXJ0OiBpbnB1dC5zZWxlY3Rpb25TdGFydCwgZW5kOiBpbnB1dC5zZWxlY3Rpb25FbmQgfVxuICAgIDogbnVsbFxufVxuIiwiPCEtLSBEZXJpdmVkIGZyb20gQVRVSSwgYW5kIGZ1cnRoZXIgZXh0ZW5kZWQ6IGh0dHBzOi8vYWxpcWluLmdpdGh1Yi5pby9hdHVpLyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5UcmlnZ2VyLmRpdG8tZGF0ZS1waWNrZXIoXG4gIHJlZj1cInRyaWdnZXJcIlxuICB2LW1vZGVsOnNob3c9XCJzaG93UG9wdXBcIlxuICB0cmlnZ2VyPVwiZm9jdXNcIlxuICB2LWJpbmQ9XCJ7IHRyYW5zaXRpb24sIHBsYWNlbWVudCwgZGlzYWJsZWQsIHRhcmdldCB9XCJcbilcbiAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgc2xvdChcbiAgICAgIHYtaWY9XCIkc2xvdHMudHJpZ2dlclwiXG4gICAgICBuYW1lPVwidHJpZ2dlclwiXG4gICAgKVxuICAgIElucHV0RmllbGQuZGl0by1kYXRlLXBpY2tlci1pbnB1dChcbiAgICAgIHYtZWxzZVxuICAgICAgcmVmPVwiaW5wdXRcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRUZXh0XCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tZm9jdXMnOiBmb2N1c2VkIH1cIlxuICAgICAgdi1iaW5kPVwieyBwbGFjZWhvbGRlciwgZGlzYWJsZWQsIC4uLiRhdHRycyB9XCJcbiAgICAgIEBmb2N1cz1cIm9uRm9jdXModHJ1ZSlcIlxuICAgICAgQGJsdXI9XCJvbkZvY3VzKGZhbHNlKVwiXG4gICAgICBAa2V5ZG93bj1cIm9uS2V5RG93blwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvbk1vdXNlRG93bihmYWxzZSlcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKCNiZWZvcmUpXG4gICAgICAgIHNsb3QobmFtZT1cImJlZm9yZVwiKVxuICAgICAgdGVtcGxhdGUoI2FmdGVyKVxuICAgICAgICBJY29uKFxuICAgICAgICAgIG5hbWU9XCJjYWxlbmRhclwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICAgIEBtb3VzZWRvd24ucHJldmVudD1cIm9uTW91c2VEb3duKHRydWUpXCJcbiAgICAgICAgKVxuICAgICAgICBzbG90KG5hbWU9XCJhZnRlclwiKVxuICB0ZW1wbGF0ZSgjcG9wdXApXG4gICAgQ2FsZW5kYXIuZGl0by1kYXRlLXBpY2tlci1wb3B1cChcbiAgICAgIHJlZj1cImNhbGVuZGFyXCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VmFsdWVcIlxuICAgICAgdi1iaW5kPVwieyBsb2NhbGUsIGRpc2FibGVkRGF0ZSB9XCJcbiAgICAgIEBzZWxlY3Q9XCJzaG93UG9wdXAgPSBmYWxzZVwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IGZvcm1hdCwgZGVmYXVsdEZvcm1hdHMgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IFRyaWdnZXIgZnJvbSAnLi9UcmlnZ2VyLnZ1ZSdcbmltcG9ydCBDYWxlbmRhciBmcm9tICcuL0NhbGVuZGFyLnZ1ZSdcbmltcG9ydCBJbnB1dEZpZWxkIGZyb20gJy4vSW5wdXRGaWVsZC52dWUnXG5pbXBvcnQgSWNvbiBmcm9tICcuL0ljb24udnVlJ1xuaW1wb3J0IHsgcGFyc2VEYXRlLCBnZXREYXRlUGFydEF0UG9zaXRpb24gfSBmcm9tICcuLi91dGlscy9kYXRlLmpzJ1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uLCBzZXRTZWxlY3Rpb24gfSBmcm9tICcuLi91dGlscy9zZWxlY3Rpb24uanMnXG5pbXBvcnQgeyBnZXRLZXlOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5pbXBvcnQgeyBnZXRUYXJnZXQgfSBmcm9tICcuLi91dGlscy90cmlnZ2VyLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgQ2FsZW5kYXIsIElucHV0RmllbGQsIEljb24gfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAndXBkYXRlOnNob3cnLCAnY2hhbmdlJywgJ2ZvY3VzJywgJ2JsdXInXSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2VtZW50OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2JvdHRvbS1sZWZ0JyB9LFxuICAgIHBsYWNlaG9sZGVyOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNob3c6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIHRhcmdldDogeyB0eXBlOiBbU3RyaW5nLCBIVE1MRWxlbWVudF0sIGRlZmF1bHQ6ICd0cmlnZ2VyJyB9LFxuICAgIGxvY2FsZTogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdlbi1VUycgfSxcbiAgICBmb3JtYXQ6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6ICgpID0+ICh7XG4gICAgICAgIGRhdGU6IGRlZmF1bHRGb3JtYXRzLmRhdGUsXG4gICAgICAgIHRpbWU6IGZhbHNlXG4gICAgICB9KVxuICAgIH0sXG4gICAgZGlzYWJsZWREYXRlOiB7IHR5cGU6IEZ1bmN0aW9uLCBkZWZhdWx0OiAoKSA9PiBmYWxzZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBzaG93UG9wdXA6IHRoaXMuc2hvdyxcbiAgICAgIGlucHV0Rm9jdXNlZDogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb2N1c2VkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW5wdXRGb2N1c2VkIHx8IHRoaXMuc2hvd1BvcHVwXG4gICAgfSxcblxuICAgIGlucHV0KCkge1xuICAgICAgcmV0dXJuIGdldFRhcmdldCh0aGlzKT8ucXVlcnlTZWxlY3RvcignaW5wdXQnKVxuICAgIH0sXG5cbiAgICBmb3JtYXRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgLi4udGhpcy5mb3JtYXRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQ6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIGZvcm1hdCh0aGlzLmN1cnJlbnRWYWx1ZSwgdGhpcy5mb3JtYXRPcHRpb25zKSB8fCAnJ1xuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGRhdGUgPSBwYXJzZURhdGUodmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucylcbiAgICAgICAgaWYgKGRhdGUpIHtcbiAgICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGRhdGVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB3YXRjaDoge1xuICAgIG1vZGVsVmFsdWUodG8sIGZyb20pIHtcbiAgICAgIGlmICgrdG8gIT09ICtmcm9tKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gdG9cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFZhbHVlKHZhbHVlKSB7XG4gICAgICBpZiAoK3ZhbHVlICE9PSArdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgdmFsdWUpXG4gICAgICAgIHRoaXMuJGVtaXQoJ2NoYW5nZScsIHZhbHVlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzaG93KHNob3cpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gc2hvd1xuICAgIH0sXG5cbiAgICBzaG93UG9wdXAodG8sIGZyb20pIHtcbiAgICAgIGlmICh0byBeIGZyb20pIHtcbiAgICAgICAgdGhpcy4kZW1pdCgndXBkYXRlOnNob3cnLCB0bylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KHRvID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRm9jdXMoZm9jdXMpIHtcbiAgICAgIHRoaXMuaW5wdXRGb2N1c2VkID0gZm9jdXNcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gZm9jdXNcbiAgICB9LFxuXG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBjb25zdCB7IHZlcjogc3RlcCwgZW50ZXIgfSA9IGdldEtleU5hdmlnYXRpb24oZXZlbnQpXG4gICAgICBpZiAoc3RlcCB8fCBlbnRlcikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRTZWxlY3Rpb24odGhpcy5pbnB1dCk/LnN0YXJ0XG4gICAgICAgIGNvbnN0IGdldERhdGVQYXJ0ID0gcG9zaXRpb24gPT5cbiAgICAgICAgICBnZXREYXRlUGFydEF0UG9zaXRpb24odGhpcy5jdXJyZW50VGV4dCwgcG9zaXRpb24sIHRoaXMuZm9ybWF0T3B0aW9ucylcblxuICAgICAgICBpZiAoc3RlcCAmJiAhdGhpcy5zaG93UG9wdXApIHtcbiAgICAgICAgICB0aGlzLnNob3dQb3B1cCA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCB7IGNhbGVuZGFyIH0gPSB0aGlzLiRyZWZzXG4gICAgICAgICAgaWYgKGNhbGVuZGFyKSB7XG4gICAgICAgICAgICBjb25zdCB7IG5hbWU6IG1vZGUsIHN0YXJ0IH0gPSBnZXREYXRlUGFydChwb3NpdGlvbikgfHwge31cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgbW9kZSAmJlxuICAgICAgICAgICAgICBjYWxlbmRhci5uYXZpZ2F0ZSh7IHN0ZXAsIGVudGVyLCBtb2RlLCB1cGRhdGU6IHRydWUgfSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiBzZXRTZWxlY3Rpb24odGhpcy5pbnB1dCwgZ2V0RGF0ZVBhcnQoc3RhcnQpKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25Nb3VzZURvd24odG9nZ2xlKSB7XG4gICAgICB0aGlzLnNob3dQb3B1cCA9ICF0aGlzLmRpc2FibGVkICYmICghdG9nZ2xlIHx8ICF0aGlzLnNob3dQb3B1cClcbiAgICAgIGlmICh0aGlzLnNob3dQb3B1cCkge1xuICAgICAgICB0aGlzLmZvY3VzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICB0aGlzLmlucHV0LmZvY3VzKClcbiAgICB9LFxuXG4gICAgYmx1cigpIHtcbiAgICAgIHRoaXMuaW5wdXQuYmx1cigpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kYXRlLXBpY2tlciB7XG4gIC5kaXRvLWlucHV0IHtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1pbi13aWR0aDogOGVtO1xuICB9XG59XG5cbi5kaXRvLWRhdGUtcGlja2VyLXBvcHVwIHtcbiAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luO1xufVxuPC9zdHlsZT5cbiIsIjwhLS0gRGVyaXZlZCBmcm9tIEFUVUksIGFuZCBmdXJ0aGVyIGV4dGVuZGVkOiBodHRwczovL2FsaXFpbi5naXRodWIuaW8vYXR1aS8gLS0+XG48dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuVHJpZ2dlci5kaXRvLXRpbWUtcGlja2VyKFxuICByZWY9XCJ0cmlnZ2VyXCJcbiAgdi1tb2RlbDpzaG93PVwic2hvd1BvcHVwXCJcbiAgdHJpZ2dlcj1cImZvY3VzXCJcbiAgdi1iaW5kPVwieyB0cmFuc2l0aW9uLCBwbGFjZW1lbnQsIGRpc2FibGVkLCB0YXJnZXQgfVwiXG4pXG4gIHRlbXBsYXRlKCN0cmlnZ2VyKVxuICAgIHNsb3QoXG4gICAgICB2LWlmPVwiJHNsb3RzLnRyaWdnZXJcIlxuICAgICAgbmFtZT1cInRyaWdnZXJcIlxuICAgIClcbiAgICBJbnB1dEZpZWxkLmRpdG8tdGltZS1waWNrZXItaW5wdXQoXG4gICAgICB2LWVsc2VcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VGV4dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkLCAuLi4kYXR0cnMgfVwiXG4gICAgICBAZm9jdXM9XCJvbkZvY3VzKHRydWUpXCJcbiAgICAgIEBibHVyPVwib25Gb2N1cyhmYWxzZSlcIlxuICAgICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25Nb3VzZURvd24oZmFsc2UpXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjYmVmb3JlKVxuICAgICAgICBzbG90KG5hbWU9XCJiZWZvcmVcIilcbiAgICAgIHRlbXBsYXRlKCNhZnRlcilcbiAgICAgICAgSWNvbihcbiAgICAgICAgICBuYW1lPVwiY2xvY2tcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICBAbW91c2Vkb3duLnByZXZlbnQ9XCJvbk1vdXNlRG93bih0cnVlKVwiXG4gICAgICAgIClcbiAgICAgICAgc2xvdChuYW1lPVwiYWZ0ZXJcIilcbiAgdGVtcGxhdGUoI3BvcHVwKVxuICAgIC5kaXRvLXRpbWUtcGlja2VyLXBvcHVwXG4gICAgICAuZGl0by10aW1lLXBpY2tlci1wYW5lbFxuICAgICAgICB1bC5kaXRvLXRpbWUtcGlja2VyLWhvdXIocmVmPVwiaG91clwiKVxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiAyNFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbGkoXG4gICAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRIb3VyKGluZGV4IC0gMSlcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJ7IHNlbGVjdGVkOiBob3VyID09PSBpbmRleCAtIDEgfVwiXG4gICAgICAgICAgICAgIEBjbGljaz1cImhvdXIgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItbWludXRlKHJlZj1cIm1pbnV0ZVwiKVxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbGkoXG4gICAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRNaW51dGUoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IG1pbnV0ZSA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJtaW51dGUgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbiAgICAgIC5kaXRvLXRpbWUtcGlja2VyLXBhbmVsXG4gICAgICAgIHVsLmRpdG8tdGltZS1waWNrZXItc2Vjb25kKHJlZj1cInNlY29uZFwiKVxuICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgdi1mb3I9XCJpbmRleCBpbiA2MFwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgbGkoXG4gICAgICAgICAgICAgIHYtaWY9XCIhZGlzYWJsZWRTZWNvbmQoaW5kZXggLSAxKVwiXG4gICAgICAgICAgICAgIDpjbGFzcz1cInsgc2VsZWN0ZWQ6IHNlY29uZCA9PT0gaW5kZXggLSAxIH1cIlxuICAgICAgICAgICAgICBAY2xpY2s9XCJzZWNvbmQgPSBpbmRleCAtIDFcIlxuICAgICAgICAgICAgKSB7eyBsZWZ0UGFkKGluZGV4IC0gMSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBmb3JtYXQsIGRlZmF1bHRGb3JtYXRzIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBUcmlnZ2VyIGZyb20gJy4vVHJpZ2dlci52dWUnXG5pbXBvcnQgSW5wdXRGaWVsZCBmcm9tICcuL0lucHV0RmllbGQudnVlJ1xuaW1wb3J0IEljb24gZnJvbSAnLi9JY29uLnZ1ZSdcbmltcG9ydCB7IGFsdGVyRGF0ZSwgcGFyc2VEYXRlLCBnZXREYXRlUGFydEF0UG9zaXRpb24gfSBmcm9tICcuLi91dGlscy9kYXRlLmpzJ1xuaW1wb3J0IHsgZ2V0U2VsZWN0aW9uLCBzZXRTZWxlY3Rpb24gfSBmcm9tICcuLi91dGlscy9zZWxlY3Rpb24uanMnXG5pbXBvcnQgeyBnZXRLZXlOYXZpZ2F0aW9uIH0gZnJvbSAnLi4vdXRpbHMvZXZlbnQuanMnXG5pbXBvcnQgeyBnZXRUYXJnZXQgfSBmcm9tICcuLi91dGlscy90cmlnZ2VyLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIGNvbXBvbmVudHM6IHsgVHJpZ2dlciwgSW5wdXRGaWVsZCwgSWNvbiB9LFxuICBlbWl0czogWyd1cGRhdGU6bW9kZWxWYWx1ZScsICd1cGRhdGU6c2hvdycsICdjaGFuZ2UnLCAnZm9jdXMnLCAnYmx1ciddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBEYXRlLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgdHJhbnNpdGlvbjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6ICdzbGlkZScgfSxcbiAgICBwbGFjZW1lbnQ6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnYm90dG9tLWxlZnQnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgc2hvdzogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgdGFyZ2V0OiB7IHR5cGU6IFtTdHJpbmcsIEhUTUxFbGVtZW50XSwgZGVmYXVsdDogJ3RyaWdnZXInIH0sXG4gICAgbG9jYWxlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJ2VuLVVTJyB9LFxuICAgIGZvcm1hdDoge1xuICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgZGVmYXVsdDogKCkgPT4gKHtcbiAgICAgICAgdGltZTogZGVmYXVsdEZvcm1hdHMudGltZSxcbiAgICAgICAgZGF0ZTogZmFsc2VcbiAgICAgIH0pXG4gICAgfSxcbiAgICBkaXNhYmxlZEhvdXI6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH0sXG4gICAgZGlzYWJsZWRNaW51dGU6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH0sXG4gICAgZGlzYWJsZWRTZWNvbmQ6IHsgdHlwZTogRnVuY3Rpb24sIGRlZmF1bHQ6ICgpID0+IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjdXJyZW50VmFsdWU6IHRoaXMubW9kZWxWYWx1ZSxcbiAgICAgIHNob3dQb3B1cDogdGhpcy5zaG93LFxuICAgICAgaW5wdXRGb2N1c2VkOiBmYWxzZSxcbiAgICAgIGlnbm9yZU5leHRDaGFuZ2U6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dQb3B1cFxuICAgIH0sXG5cbiAgICBpbnB1dCgpIHtcbiAgICAgIHJldHVybiBnZXRUYXJnZXQodGhpcyk/LnF1ZXJ5U2VsZWN0b3IoJ2lucHV0JylcbiAgICB9LFxuXG4gICAgZm9ybWF0T3B0aW9ucygpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgIC4uLnRoaXMuZm9ybWF0XG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQodGhpcy5jdXJyZW50VmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucykgfHwgJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBkYXRlID0gcGFyc2VEYXRlKHZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudERhdGUoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSB8fFxuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgRGF0ZSgpIG9iamVjdCB3aXRoIHRoZSB0aW1lIHNldCB0byAwLCB0byBiZSB1c2VkIHdoZW5cbiAgICAgICAgLy8gZmlyc3Qgc2V0dGluZyBhbnkgb2YgdGhlIHRpbWVzLCBmb3IgbWVhbmluZ2Z1bCBkYXRlcyBpbiBjYXNlIHRoZVxuICAgICAgICAvLyBvYmplY3QgaXMgc2hhcmVkIHdpdGggYSBEYXRlUGlja2VyLCBlLmcuIHRocm91Z2ggRGF0ZVRpbWVQaWNrZXIuXG4gICAgICAgIGFsdGVyRGF0ZShuZXcgRGF0ZSgpLCB7IGhvdXI6IDAsIG1pbnV0ZTogMCwgc2Vjb25kOiAwLCBtaWxsaXNlY29uZDogMCB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBob3VyOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldEhvdXJzKClcbiAgICAgIH0sXG5cbiAgICAgIHNldChob3VyKSB7XG4gICAgICAgIHRoaXMuc2V0VGltZSh7IGhvdXIgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWludXRlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldE1pbnV0ZXMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KG1pbnV0ZSkge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBtaW51dGUgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2Vjb25kOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnREYXRlLmdldFNlY29uZHMoKVxuICAgICAgfSxcblxuICAgICAgc2V0KHNlY29uZCkge1xuICAgICAgICB0aGlzLnNldFRpbWUoeyBzZWNvbmQgfSlcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICAgIHRoaXMuc2Nyb2xsQWxsKHRydWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh2YWx1ZSkge1xuICAgICAgaWYgKCt2YWx1ZSAhPT0gK3RoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHZhbHVlKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSlcbiAgICAgICAgdGhpcy5zY3JvbGxBbGwodHJ1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY3VycmVudFRleHQoKSB7XG4gICAgICBjb25zdCB7IGlucHV0IH0gPSB0aGlzXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBnZXRTZWxlY3Rpb24oaW5wdXQpXG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuZm9jdXNlZCAmJlxuICAgICAgICAhdGhpcy5pZ25vcmVOZXh0Q2hhbmdlICYmXG4gICAgICAgIHNlbGVjdGlvbi5zdGFydCA9PT0gc2VsZWN0aW9uLmVuZFxuICAgICAgKSB7XG4gICAgICAgIHRoaXMuJG5leHRUaWNrKCgpID0+IHNldFNlbGVjdGlvbihpbnB1dCwgc2VsZWN0aW9uKSlcbiAgICAgIH1cbiAgICAgIHRoaXMuaWdub3JlTmV4dENoYW5nZSA9IGZhbHNlXG4gICAgfSxcblxuICAgIHNob3coc2hvdykge1xuICAgICAgdGhpcy5zaG93UG9wdXAgPSBzaG93XG4gICAgfSxcblxuICAgIHNob3dQb3B1cCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvKSB7XG4gICAgICAgIHRoaXMuc2Nyb2xsQWxsKGZhbHNlKVxuICAgICAgfVxuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6c2hvdycsIHRvKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1c2VkKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gXiBmcm9tKSB7XG4gICAgICAgIHRoaXMuJGVtaXQodG8gPyAnZm9jdXMnIDogJ2JsdXInKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbGVmdFBhZCh2YWx1ZSkge1xuICAgICAgcmV0dXJuICgnMCcgKyB2YWx1ZSkuc2xpY2UoLTIpXG4gICAgfSxcblxuICAgIHNldFRpbWUob3ZlcnJpZGVzKSB7XG4gICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IGFsdGVyRGF0ZSh0aGlzLmN1cnJlbnREYXRlLCB7XG4gICAgICAgIC4uLm92ZXJyaWRlcyxcbiAgICAgICAgbWlsbGlzZWNvbmQ6IDBcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIHNjcm9sbEFsbChzbW9vdGgpIHtcbiAgICAgIGNvbnN0IHNjcm9sbCA9IChyZWYsIHZhbHVlKSA9PiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuJHJlZnNbcmVmXVxuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgY29uc3QgbGluZUhlaWdodCA9IChcbiAgICAgICAgICAgIHRhcmdldC5zY3JvbGxIZWlnaHQgL1xuICAgICAgICAgICAgLy8gRmlyc3QgYW5kIGxhc3Qgb25lIGFkZCAzIHRpbWVzIHRoZSBtYXJnaW4uXG4gICAgICAgICAgICAodGFyZ2V0LmNoaWxkRWxlbWVudENvdW50ICsgNilcbiAgICAgICAgICApXG4gICAgICAgICAgY29uc3QgdG9wID0gTWF0aC5yb3VuZCh2YWx1ZSAqIGxpbmVIZWlnaHQpXG4gICAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLmFicyh0YXJnZXQuc2Nyb2xsVG9wIC0gdG9wKVxuICAgICAgICAgIHRhcmdldC5zY3JvbGxUbyh7XG4gICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICBiZWhhdmlvcjogc21vb3RoICYmIGRpc3RhbmNlIDwgMTAwID8gJ3Ntb290aCcgOiAnYXV0bydcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgIHNjcm9sbCgnaG91cicsIHRoaXMuaG91cilcbiAgICAgICAgc2Nyb2xsKCdtaW51dGUnLCB0aGlzLm1pbnV0ZSlcbiAgICAgICAgc2Nyb2xsKCdzZWNvbmQnLCB0aGlzLnNlY29uZClcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG9uRm9jdXMoZm9jdXMpIHtcbiAgICAgIHRoaXMuaW5wdXRGb2N1c2VkID0gZm9jdXNcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gZm9jdXNcbiAgICB9LFxuXG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBjb25zdCB7IGlucHV0IH0gPSB0aGlzXG4gICAgICBjb25zdCBzZWxlY3Rpb24gPSBnZXRTZWxlY3Rpb24oaW5wdXQpXG4gICAgICBjb25zdCB7IHZlcjogc3RlcCwgZW50ZXIgfSA9IGdldEtleU5hdmlnYXRpb24oZXZlbnQpXG4gICAgICBpZiAoc3RlcCB8fCBlbnRlcikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgICAgICAgY29uc3QgZ2V0RGF0ZVBhcnQgPSBwb3NpdGlvbiA9PlxuICAgICAgICAgIGdldERhdGVQYXJ0QXRQb3NpdGlvbih0aGlzLmN1cnJlbnRUZXh0LCBwb3NpdGlvbiwgdGhpcy5mb3JtYXRPcHRpb25zKVxuXG4gICAgICAgIGlmIChzdGVwKSB7XG4gICAgICAgICAgaWYgKCF0aGlzLnNob3dQb3B1cCkge1xuICAgICAgICAgICAgdGhpcy5zaG93UG9wdXAgPSB0cnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHsgbmFtZSwgc3RhcnQgfSA9IGdldERhdGVQYXJ0KHNlbGVjdGlvbi5zdGFydCkgfHwge31cbiAgICAgICAgICAgIGlmIChuYW1lKSB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1tuYW1lXSArIHN0ZXBcbiAgICAgICAgICAgICAgY29uc3QgY291bnQgPSB0aGlzLiRyZWZzW25hbWVdLmNoaWxkRWxlbWVudENvdW50XG4gICAgICAgICAgICAgIHRoaXNbbmFtZV0gPVxuICAgICAgICAgICAgICAgIHZhbHVlIDwgMFxuICAgICAgICAgICAgICAgICAgPyB2YWx1ZSArIGNvdW50XG4gICAgICAgICAgICAgICAgICA6IHZhbHVlID49IGNvdW50XG4gICAgICAgICAgICAgICAgICAgID8gdmFsdWUgLSBjb3VudFxuICAgICAgICAgICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgICAgICAgIHRoaXMuaWdub3JlTmV4dENoYW5nZSA9IHRydWVcbiAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKGlucHV0LCBnZXREYXRlUGFydChzdGFydCkpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChlbnRlcikge1xuICAgICAgICAgIHRoaXMuc2hvd1BvcHVwID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb24uc3RhcnQgPT09IHNlbGVjdGlvbi5lbmQpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSB9ID0gaW5wdXRcbiAgICAgICAgbGV0IHBvcyA9IHNlbGVjdGlvbi5zdGFydFxuXG4gICAgICAgIGNvbnN0IGlzRGlnaXQgPSBjaGFyID0+ICFpc05hTihwYXJzZUludChjaGFyLCAxMCkpXG5cbiAgICAgICAgaWYgKGV2ZW50LmtleS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICBpZiAoaXNEaWdpdChldmVudC5rZXkpICYmIHBvcyA8IHZhbHVlLmxlbmd0aCkge1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICB2YWx1ZVtwb3NdID09PSAnOicgJiZcbiAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3MgLSAxXSkgJiZcbiAgICAgICAgICAgICAgaXNEaWdpdCh2YWx1ZVtwb3MgLSAyXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBwb3MrK1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gUmVtb3ZlIG5leHQgZGlnaXQgc28gdGhlIGV2ZW50IG92ZXJyaWRlcyBpdCBpbnN0ZWFkIG9mIGluc2VydGluZ1xuICAgICAgICAgICAgLy8gbmV3IGNoYXJzLlxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3Bvc10pICYmIChcbiAgICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3BvcyArIDFdKSB8fFxuICAgICAgICAgICAgICAgIGlzRGlnaXQodmFsdWVbcG9zIC0gMV0pXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IChcbiAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZSgwLCBwb3MpICtcbiAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZShwb3MgKyAxKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIHNldFNlbGVjdGlvbihpbnB1dCwgeyBzdGFydDogcG9zLCBlbmQ6IHBvcyB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBsZW5ndGggPSBmb3JtYXQodGhpcy5jdXJyZW50VmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucykubGVuZ3RoXG4gICAgICAgICAgICBpZiAodmFsdWUubGVuZ3RoID09PSBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5sZW5ndGggPiBsZW5ndGgpIHtcbiAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSB2YWx1ZS5zbGljZSgwLCBsZW5ndGgpXG4gICAgICAgICAgICAgIHNldFNlbGVjdGlvbihpbnB1dCwgc2VsZWN0aW9uKVxuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ0JhY2tzcGFjZScpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBwb3MgPT09IDEgfHxcbiAgICAgICAgICAgIFsnICcsICc6J10uaW5jbHVkZXModmFsdWVbcG9zIC0gMl0pXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIHBvcyA9PT0gdmFsdWUubGVuZ3RoIHx8XG4gICAgICAgICAgICAgIHZhbHVlW3Bvc10gPT09ICc6J1xuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHBvcy0tXG4gICAgICAgICAgICAgIGlucHV0LnZhbHVlID0gKFxuICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKDAsIHBvcykgK1xuICAgICAgICAgICAgICAgICgodmFsdWVbcG9zIC0gMV0gPz8gJycpICsgJzAwJykgK1xuICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKHBvcyArIDEpXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgc2V0U2VsZWN0aW9uKGlucHV0LCB7IHN0YXJ0OiBwb3MsIGVuZDogcG9zIH0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgICAgICBpc0RpZ2l0KHZhbHVlW3Bvc10pICYmXG4gICAgICAgICAgICAgICFpc0RpZ2l0KCt2YWx1ZVtwb3MgKyAxXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAvLyBXaGVuIHJlbW92aW5nIHRoZSBmaXJzdCBvZiB0d28gZGlnaXRzLCByZXBsYWNlIHdpdGggMFxuICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHZhbHVlLnNsaWNlKDAsIHBvcykgKyAnMCcgKyB2YWx1ZS5zbGljZShwb3MpXG4gICAgICAgICAgICAgIHNldFNlbGVjdGlvbihpbnB1dCwgeyBzdGFydDogcG9zLCBlbmQ6IHBvcyB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbk1vdXNlRG93bih0b2dnbGUpIHtcbiAgICAgIHRoaXMuc2hvd1BvcHVwID0gIXRoaXMuZGlzYWJsZWQgJiYgKCF0b2dnbGUgfHwgIXRoaXMuc2hvd1BvcHVwKVxuICAgICAgaWYgKHRoaXMuc2hvd1BvcHVwKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb2N1cygpIHtcbiAgICAgIHRoaXMuaW5wdXQuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyKCkge1xuICAgICAgdGhpcy5pbnB1dC5ibHVyKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRpbWUtcGlja2VyIHtcbiAgLmRpdG8taW5wdXQge1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1pbi13aWR0aDogNmVtO1xuICB9XG59XG5cbi5kaXRvLXRpbWUtcGlja2VyLXBvcHVwIHtcbiAgbWF4LXdpZHRoOiAxNjBweDtcbiAgbWFyZ2luOiAkcG9wdXAtbWFyZ2luO1xufVxuXG4kdGltZS1waWNrZXItbGluZS1oZWlnaHQ6IDI0cHg7XG5cbi5kaXRvLXRpbWUtcGlja2VyIHtcbiAgLmRpdG8taW5wdXQge1xuICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgd2lkdGg6IDEwMCU7XG4gIH1cbn1cblxuLmRpdG8tdGltZS1waWNrZXItcG9wdXAge1xuICBsaXN0LXN0eWxlOiBub25lO1xuICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuICBvdmVyZmxvdzogaGlkZGVuO1xufVxuXG4uZGl0by10aW1lLXBpY2tlci1wb3B1cCAuZGl0by10aW1lLXBpY2tlci1wYW5lbCB7XG4gIGZsb2F0OiBsZWZ0O1xuICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gIGJvcmRlci13aWR0aDogMCAxcHggMDtcbiAgbWFyZ2luLWxlZnQ6IC0xcHg7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIHdpZHRoOiBjYWxjKDEwMCUgLyAzICsgMXB4KTtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcblxuICAmOmxhc3QtY2hpbGQge1xuICAgIGJvcmRlci1yaWdodDogMDtcbiAgfVxuXG4gIHVsIHtcbiAgICBvdmVyZmxvdy14OiBoaWRkZW47XG4gICAgb3ZlcmZsb3cteTogYXV0bztcbiAgICBsaXN0LXN0eWxlOiBub25lO1xuICAgIHdpZHRoOiAxMDAlO1xuICAgIG1hcmdpbjogMDtcbiAgICAvLyBIaWRlIHNjcm9sbGJhcjpcbiAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgICBwYWRkaW5nOiAwIDE3cHggMCAwO1xuICAgIGhlaWdodDogNyAqICR0aW1lLXBpY2tlci1saW5lLWhlaWdodDtcblxuICAgICYgPiBsaSB7XG4gICAgICBib3gtc2l6aW5nOiBjb250ZW50LWJveDtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAkdGltZS1waWNrZXItbGluZS1oZWlnaHQ7XG4gICAgICBsaW5lLWhlaWdodDogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xuICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gICAgICBvdmVyZmxvdzogaGlkZGVuO1xuICAgICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tdG9wOiAzICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgICBtYXJnaW4tYm90dG9tOiAzICogJHRpbWUtcGlja2VyLWxpbmUtaGVpZ2h0O1xuICAgICAgfVxuXG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodDtcbiAgICAgIH1cblxuICAgICAgJi5zZWxlY3RlZCxcbiAgICAgICYuc2VsZWN0ZWQ6aG92ZXIge1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgICB9XG5cbiAgICAgICYuZGlzYWJsZWQge1xuICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItZGlzYWJsZWQ7XG4gICAgICB9XG5cbiAgICAgICYuZGlzYWJsZWQ6aG92ZXIge1xuICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZGF0ZS10aW1lLXBpY2tlcihyZWY9XCJwaWNrZXJcIilcbiAgLmRpdG8tZGF0ZS10aW1lLXBpY2tlcl9faW5uZXIoOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IGZvY3VzZWQgfVwiKVxuICAgIElucHV0RmllbGQuZGl0by1kYXRlLXRpbWUtcGlja2VyX19pbnB1dChcbiAgICAgIHJlZj1cImlucHV0XCJcbiAgICAgIHYtbW9kZWw9XCJjdXJyZW50VGV4dFwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWZvY3VzJzogZm9jdXNlZCB9XCJcbiAgICAgIHYtYmluZD1cInsgcGxhY2Vob2xkZXIsIGRpc2FibGVkLCAuLi4kYXR0cnMgfVwiXG4gICAgICBAZm9jdXM9XCJvbkZvY3VzKHRydWUpXCJcbiAgICAgIEBibHVyPVwib25Gb2N1cyhmYWxzZSlcIlxuICAgICAgQGtleWRvd249XCJvbktleURvd25cIlxuICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25Nb3VzZURvd24oZmFsc2UpXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjYmVmb3JlKVxuICAgICAgICBzbG90KG5hbWU9XCJiZWZvcmVcIilcbiAgICAgIHRlbXBsYXRlKCNhZnRlcilcbiAgICAgICAgSWNvbihcbiAgICAgICAgICBuYW1lPVwiY2FsZW5kYXJcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgICAgICBAbW91c2Vkb3duLnByZXZlbnQ9XCJvbk1vdXNlRG93bih0cnVlKVwiXG4gICAgICAgIClcbiAgICAgICAgc2xvdChuYW1lPVwiYWZ0ZXJcIilcbiAgICBEYXRlUGlja2VyKFxuICAgICAgcmVmPVwiZGF0ZVwiXG4gICAgICB2LW1vZGVsPVwiY3VycmVudFZhbHVlXCJcbiAgICAgIHYtbW9kZWw6c2hvdz1cInNob3dEYXRlXCJcbiAgICAgIHBsYWNlbWVudD1cImJvdHRvbS1sZWZ0XCJcbiAgICAgIDp0YXJnZXQ9XCIkcmVmcy5waWNrZXJcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgICAgIC8vLSBJbnRlbnRpb25hbGx5IGVtcHR5XG4gICAgVGltZVBpY2tlcihcbiAgICAgIHJlZj1cInRpbWVcIlxuICAgICAgdi1tb2RlbD1cImN1cnJlbnRWYWx1ZVwiXG4gICAgICB2LW1vZGVsOnNob3c9XCJzaG93VGltZVwiXG4gICAgICBwbGFjZW1lbnQ9XCJib3R0b20tcmlnaHRcIlxuICAgICAgOnRhcmdldD1cIiRyZWZzLnBpY2tlclwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjdHJpZ2dlcilcbiAgICAgICAgLy8tIEludGVudGlvbmFsbHkgZW1wdHlcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBmb3JtYXQsIGRlZmF1bHRGb3JtYXRzLCBhc3NpZ25EZWVwbHkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IElucHV0RmllbGQgZnJvbSAnLi9JbnB1dEZpZWxkLnZ1ZSdcbmltcG9ydCBEYXRlUGlja2VyIGZyb20gJy4vRGF0ZVBpY2tlci52dWUnXG5pbXBvcnQgVGltZVBpY2tlciBmcm9tICcuL1RpbWVQaWNrZXIudnVlJ1xuaW1wb3J0IEljb24gZnJvbSAnLi9JY29uLnZ1ZSdcbmltcG9ydCB7IHBhcnNlRGF0ZSB9IGZyb20gJy4uL3V0aWxzL2RhdGUuanMnXG5pbXBvcnQgeyBnZXRTZWxlY3Rpb24sIHNldFNlbGVjdGlvbiB9IGZyb20gJy4uL3V0aWxzL3NlbGVjdGlvbi5qcydcbmltcG9ydCB7IGdldEtleU5hdmlnYXRpb24gfSBmcm9tICcuLi91dGlscy9ldmVudC5qcydcblxuZXhwb3J0IGRlZmF1bHQge1xuICBjb21wb25lbnRzOiB7IElucHV0RmllbGQsIERhdGVQaWNrZXIsIFRpbWVQaWNrZXIsIEljb24gfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnLCAnY2hhbmdlJywgJ2ZvY3VzJywgJ2JsdXInXSxcbiAgaW5oZXJpdEF0dHJzOiBmYWxzZSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHsgdHlwZTogRGF0ZSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHRyYW5zaXRpb246IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc2xpZGUnIH0sXG4gICAgcGxhY2Vob2xkZXI6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsb2NhbGU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnZW4tVVMnIH0sXG4gICAgZm9ybWF0OiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudFZhbHVlOiB0aGlzLm1vZGVsVmFsdWUsXG4gICAgICBzaG93RGF0ZTogZmFsc2UsXG4gICAgICBzaG93VGltZTogZmFsc2UsXG4gICAgICBpbnB1dEZvY3VzZWQ6IGZhbHNlLFxuICAgICAgZGF0ZUZvY3VzZWQ6IGZhbHNlLFxuICAgICAgdGltZUZvY3VzZWQ6IGZhbHNlLFxuICAgICAgY2xvc2VkTW9kZTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IHRyYW5zaXRpb24sIGRpc2FibGVkLCBsb2NhbGUsIGZvcm1hdE9wdGlvbnM6IGZvcm1hdCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHsgdHJhbnNpdGlvbiwgZGlzYWJsZWQsIGxvY2FsZSwgZm9ybWF0IH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlucHV0Rm9jdXNlZCB8fCB0aGlzLnNob3dEYXRlIHx8IHRoaXMuc2hvd1RpbWVcbiAgICB9LFxuXG4gICAgaW5wdXQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy5pbnB1dC5pbnB1dFxuICAgIH0sXG5cbiAgICBmb3JtYXRPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIGFzc2lnbkRlZXBseShcbiAgICAgICAge1xuICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgICAgdGltZTogZGVmYXVsdEZvcm1hdHMudGltZSxcbiAgICAgICAgICBkYXRlOiBkZWZhdWx0Rm9ybWF0cy5kYXRlXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBkYXRlOiB7XG4gICAgICAgICAgICBtb250aDogJ3Nob3J0JyxcbiAgICAgICAgICAgIGZvcm1hdDogKHZhbHVlLCB0eXBlLCBvcHRpb25zKSA9PlxuICAgICAgICAgICAgICB0eXBlID09PSAnbGl0ZXJhbCcgJiYgL1xcYmF0XFxiLy50ZXN0KHZhbHVlKVxuICAgICAgICAgICAgICAgID8gJywgJ1xuICAgICAgICAgICAgICAgIDogdGhpcy5mb3JtYXQ/LmRhdGU/LmZvcm1hdD8uKHZhbHVlLCB0eXBlLCBvcHRpb25zKSA/PyB2YWx1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdGhpcy5mb3JtYXRcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdGltZUluZGV4KCkge1xuICAgICAgY29uc3QgdGV4dCA9IHRoaXMuY3VycmVudFRleHRcbiAgICAgIGlmICh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IHRpbWUgPSB0ZXh0Lm1hdGNoKC8oW1xcU10rXFxzKikkLyk/LlsxXVxuICAgICAgICBpZiAodGltZSkge1xuICAgICAgICAgIHJldHVybiB0ZXh0Lmxlbmd0aCAtIHRpbWUubGVuZ3RoXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIGN1cnJlbnRUZXh0OiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQodGhpcy5jdXJyZW50VmFsdWUsIHRoaXMuZm9ybWF0T3B0aW9ucykgfHwgJydcbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBkYXRlID0gcGFyc2VEYXRlKHZhbHVlLCB0aGlzLmZvcm1hdE9wdGlvbnMpXG4gICAgICAgIGlmIChkYXRlKSB7XG4gICAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gZ2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQpXG4gICAgICAgICAgdGhpcy5jdXJyZW50VmFsdWUgPSBkYXRlXG4gICAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gc2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQsIHNlbGVjdGlvbikpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAoK3RvICE9PSArZnJvbSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRWYWx1ZSA9IHRvXG4gICAgICB9XG4gICAgfSxcblxuICAgIGN1cnJlbnRWYWx1ZSh2YWx1ZSkge1xuICAgICAgaWYgKCt2YWx1ZSAhPT0gK3RoaXMubW9kZWxWYWx1ZSkge1xuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsIHZhbHVlKVxuICAgICAgICB0aGlzLiRlbWl0KCdjaGFuZ2UnLCB2YWx1ZSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZm9jdXNlZCh0bywgZnJvbSkge1xuICAgICAgaWYgKHRvIF4gZnJvbSkge1xuICAgICAgICB0aGlzLiRlbWl0KHRvID8gJ2ZvY3VzJyA6ICdibHVyJylcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRm9jdXMoZm9jdXMpIHtcbiAgICAgIHRoaXMuaW5wdXRGb2N1c2VkID0gZm9jdXNcbiAgICAgIGlmIChmb2N1cykge1xuICAgICAgICB0aGlzLnVwZGF0ZVBvcHVwcygpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNob3dEYXRlID0gZmFsc2VcbiAgICAgICAgdGhpcy5zaG93VGltZSA9IGZhbHNlXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uTW91c2VEb3duKHRvZ2dsZSkge1xuICAgICAgaWYgKHRvZ2dsZSAmJiAodGhpcy5zaG93RGF0ZSB8fCB0aGlzLnNob3dUaW1lKSkge1xuICAgICAgICB0aGlzLnNob3dEYXRlID0gZmFsc2VcbiAgICAgICAgdGhpcy5zaG93VGltZSA9IGZhbHNlXG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgIHRoaXMuZm9jdXMoKVxuICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gdGhpcy51cGRhdGVQb3B1cHMoKSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25LZXlEb3duKGV2ZW50KSB7XG4gICAgICBjb25zdCBtb2RlID0gdGhpcy5nZXRNb2RlKGV2ZW50KVxuICAgICAgdGhpcy4kcmVmc1ttb2RlXS5vbktleURvd24oZXZlbnQpXG4gICAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgICB0aGlzLmNsb3NlZE1vZGUgPSBtb2RlXG4gICAgICB9IGVsc2UgaWYgKG1vZGUgIT09IHRoaXMuY2xvc2VkTW9kZSkge1xuICAgICAgICB0aGlzLnVwZGF0ZVBvcHVwcyhtb2RlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRNb2RlKGV2ZW50ID0gbnVsbCkge1xuICAgICAgY29uc3QgeyBzdGFydCB9ID0gZ2V0U2VsZWN0aW9uKHRoaXMuaW5wdXQpXG4gICAgICBjb25zdCB7IGhvcjogc3RlcCB9ID0gZ2V0S2V5TmF2aWdhdGlvbihldmVudClcbiAgICAgIHJldHVybiB0aGlzLnRpbWVJbmRleCA9PT0gbnVsbCB8fCBzdGFydCArIHN0ZXAgPCB0aGlzLnRpbWVJbmRleFxuICAgICAgICA/ICdkYXRlJ1xuICAgICAgICA6ICd0aW1lJ1xuICAgIH0sXG5cbiAgICB1cGRhdGVQb3B1cHMobW9kZSA9IHRoaXMuZ2V0TW9kZSgpKSB7XG4gICAgICBpZiAobW9kZSkge1xuICAgICAgICB0aGlzLmNsb3NlZE1vZGUgPSBudWxsXG4gICAgICB9XG4gICAgICB0aGlzLnNob3dEYXRlID0gbW9kZSA9PT0gJ2RhdGUnXG4gICAgICB0aGlzLnNob3dUaW1lID0gbW9kZSA9PT0gJ3RpbWUnXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5pbnB1dC5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXIoKSB7XG4gICAgICB0aGlzLmlucHV0LmJsdXIoKVxuICAgIH1cbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGF0ZS10aW1lLXBpY2tlciB7XG4gICZfX2lubmVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICB9XG5cbiAgJl9faW5wdXQge1xuICAgIGZsZXg6IDE7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICBtaW4td2lkdGg6IDEyZW07XG4gIH1cblxuICAuZGl0by1kYXRlLXBpY2tlcixcbiAgLmRpdG8tdGltZS1waWNrZXIge1xuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjwhLS0gZXNsaW50LWRpc2FibGUgdnVlL25vLXRlbXBsYXRlLXNoYWRvdyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1wYWdpbmF0aW9uXG4gIC5kaXRvLXBhZ2luYXRpb24tdG90YWwoXG4gICAgdi1pZj1cInNob3dUb3RhbFwiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJ0b3RhbCA+IDBcIlxuICAgICkge3sgZmlyc3QgfX0g4oCTIHt7IGxhc3QgfX1cbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtZWxzZVxuICAgICkgMFxuICAgIHwgLyB7eyB0b3RhbCB9fVxuICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1yb3VuZFxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHYtZm9yPVwicGFnZSBpbiBwYWdlUmFuZ2VcIlxuICAgICAgOmNsYXNzPVwiZ2V0UGFnZUNsYXNzKHBhZ2UpXCJcbiAgICAgIDpkaXNhYmxlZD1cInBhZ2UuZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrPVwib25DbGlja1BhZ2UocGFnZSlcIlxuICAgIClcbiAgICAgIHNwYW4oXG4gICAgICAgIHYtaWY9XCJwYWdlLnRleHRcIlxuICAgICAgKSB7eyBwYWdlLnRleHQgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTpwYWdlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfSxcbiAgICBwYWdlOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMSB9LFxuICAgIHBhZ2VTaXplOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogMTAgfSxcbiAgICBzaG93VG90YWw6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcGFnZVJhbmdlOiBbXSxcbiAgICAgIHNob3dQcmV2OiB0cnVlLFxuICAgICAgc2hvd05leHQ6IHRydWUsXG4gICAgICBudW1QYWdlczogMCxcbiAgICAgIGN1cnJlbnRQYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSxcbiAgICAgIGN1cnJlbnRQYWdlOiB0aGlzLnBhZ2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmaXJzdCgpIHtcbiAgICAgIHJldHVybiAodGhpcy5jdXJyZW50UGFnZSAtIDEpICogdGhpcy5jdXJyZW50UGFnZVNpemUgKyAxXG4gICAgfSxcblxuICAgIGxhc3QoKSB7XG4gICAgICByZXR1cm4gTWF0aC5taW4odGhpcy5maXJzdCArIHRoaXMuY3VycmVudFBhZ2VTaXplIC0gMSwgdGhpcy50b3RhbClcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICB0b3RhbDogJ3VwZGF0ZVBhZ2VSYW5nZScsXG4gICAgc2hvd1ByZXY6ICd1cGRhdGVQYWdlUmFuZ2UnLFxuICAgIHNob3dOZXh0OiAndXBkYXRlUGFnZVJhbmdlJyxcblxuICAgIHBhZ2UocGFnZSkge1xuICAgICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhZ2VcbiAgICB9LFxuXG4gICAgcGFnZVNpemUocGFnZVNpemUpIHtcbiAgICAgIHRoaXMuY3VycmVudFBhZ2VTaXplID0gcGFnZVNpemVcbiAgICB9LFxuXG4gICAgY3VycmVudFBhZ2VTaXplKGN1cnJlbnRQYWdlU2l6ZSkge1xuICAgICAgdGhpcy5udW1QYWdlcyA9IE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gY3VycmVudFBhZ2VTaXplKVxuICAgICAgaWYgKHRoaXMuY3VycmVudFBhZ2UgPiB0aGlzLm51bVBhZ2VzKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLm51bVBhZ2VzXG4gICAgICB9XG4gICAgICB0aGlzLnVwZGF0ZVBhZ2VSYW5nZSgpXG4gICAgfSxcblxuICAgIGN1cnJlbnRQYWdlKHRvLCBmcm9tKSB7XG4gICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgdGhpcy51cGRhdGVQYWdlUmFuZ2UoKVxuICAgICAgICB0aGlzLiRlbWl0KCd1cGRhdGU6cGFnZScsIHRvKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLnBhZ2VcbiAgICB0aGlzLmN1cnJlbnRQYWdlU2l6ZSA9IHRoaXMucGFnZVNpemVcbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIHRoaXMudXBkYXRlUGFnZVJhbmdlKClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25DbGlja1BhZ2UocGFnZSkge1xuICAgICAgaWYgKHBhZ2UuaW5kZXggJiYgIXBhZ2UuZGlzYWJsZWQgJiYgcGFnZS5pbmRleCAhPT0gdGhpcy5jdXJyZW50UGFnZSkge1xuICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZS5pbmRleFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRQYWdlQ2xhc3MocGFnZSkge1xuICAgICAgY29uc3QgY2xhc3NlcyA9IHtcbiAgICAgICAgJ2RpdG8tc2VsZWN0ZWQnOiBwYWdlLmFjdGl2ZVxuICAgICAgfVxuICAgICAgaWYgKHBhZ2UudHlwZSkge1xuICAgICAgICBjbGFzc2VzW2BkaXRvLWJ1dHRvbi0ke3BhZ2UudHlwZX1gXSA9IHRydWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBjbGFzc2VzXG4gICAgfSxcblxuICAgIHVwZGF0ZVBhZ2VSYW5nZSgpIHtcbiAgICAgIGNvbnN0IHsgc2hvd1ByZXYsIHNob3dOZXh0LCB0b3RhbCwgY3VycmVudFBhZ2VTaXplLCBjdXJyZW50UGFnZSB9ID0gdGhpc1xuICAgICAgY29uc3Qgc2hvd0xlbmd0aCA9IHNob3dQcmV2ICsgc2hvd05leHQgKyAxXG4gICAgICBjb25zdCBudW1QYWdlcyA9ICh0aGlzLm51bVBhZ2VzID0gTWF0aC5jZWlsKHRvdGFsIC8gY3VycmVudFBhZ2VTaXplKSlcblxuICAgICAgbGV0IHN0YXJ0ID0gMVxuICAgICAgbGV0IGVuZCA9IDFcbiAgICAgIGlmIChudW1QYWdlcyA8PSBzaG93TGVuZ3RoKSB7XG4gICAgICAgIGVuZCA9IG51bVBhZ2VzXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlIDw9IHNob3dQcmV2ICsgMSkge1xuICAgICAgICBlbmQgPSBzaG93TGVuZ3RoXG4gICAgICB9IGVsc2UgaWYgKGN1cnJlbnRQYWdlID49IG51bVBhZ2VzIC0gc2hvd05leHQpIHtcbiAgICAgICAgZW5kID0gbnVtUGFnZXNcbiAgICAgICAgc3RhcnQgPSBudW1QYWdlcyAtIHNob3dMZW5ndGggKyAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdGFydCA9IGN1cnJlbnRQYWdlIC0gc2hvd1ByZXZcbiAgICAgICAgZW5kID0gY3VycmVudFBhZ2UgKyBzaG93TmV4dFxuICAgICAgfVxuXG4gICAgICBjb25zdCBwYWdlUmFuZ2UgPSBbXVxuICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICBpbmRleDogY3VycmVudFBhZ2UgLSAxLFxuICAgICAgICB0eXBlOiAncHJldicsXG4gICAgICAgIGRpc2FibGVkOiBjdXJyZW50UGFnZSA8PSAxXG4gICAgICB9KVxuICAgICAgaWYgKHN0YXJ0ID49IDIpIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goeyBpbmRleDogMSwgdGV4dDogMSB9KVxuICAgICAgfVxuICAgICAgaWYgKHN0YXJ0ID4gMikge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7XG4gICAgICAgICAgaW5kZXg6IE1hdGgubWF4KDEsIGN1cnJlbnRQYWdlIC0gMTApLFxuICAgICAgICAgIHR5cGU6ICdlbGxpcHNpcy1wcmV2J1xuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKSB7XG4gICAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgICBpbmRleDogaSxcbiAgICAgICAgICB0ZXh0OiBpLFxuICAgICAgICAgIGFjdGl2ZTogaSA9PT0gY3VycmVudFBhZ2VcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGlmIChlbmQgPCBudW1QYWdlcyAtIDEpIHtcbiAgICAgICAgcGFnZVJhbmdlLnB1c2goe1xuICAgICAgICAgIGluZGV4OiBNYXRoLm1pbihudW1QYWdlcywgY3VycmVudFBhZ2UgKyAxMCksXG4gICAgICAgICAgdHlwZTogJ2VsbGlwc2lzLW5leHQnXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoZW5kIDw9IG51bVBhZ2VzIC0gMSkge1xuICAgICAgICBwYWdlUmFuZ2UucHVzaCh7IGluZGV4OiBudW1QYWdlcywgdGV4dDogbnVtUGFnZXMgfSlcbiAgICAgIH1cbiAgICAgIHBhZ2VSYW5nZS5wdXNoKHtcbiAgICAgICAgaW5kZXg6IGN1cnJlbnRQYWdlICsgMSxcbiAgICAgICAgdHlwZTogJ25leHQnLFxuICAgICAgICBkaXNhYmxlZDogY3VycmVudFBhZ2UgPj0gbnVtUGFnZXNcbiAgICAgIH0pXG5cbiAgICAgIHRoaXMucGFnZVJhbmdlID0gcGFnZVJhbmdlXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYWdpbmF0aW9uIHtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1wYWdpbmF0aW9uLXRvdGFsIHtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgIG1hcmdpbjogMCAwLjVlbTtcbiAgICBsaW5lLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbiB7XG4gICAgdHJhbnNpdGlvbjpcbiAgICAgIGFsbCAwLjNzIGVhc2UsXG4gICAgICBjb2xvciAwcyxcbiAgICAgIGJhY2tncm91bmQgMHMsXG4gICAgICBib3JkZXIgMHM7XG4gICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtcztcbiAgICBwYWRkaW5nOiAwIDAuNWVtO1xuXG4gICAgJi1wcmV2LFxuICAgICYtbmV4dCB7XG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWFycm93O1xuICAgICAgfVxuICAgIH1cblxuICAgICYtcHJldjo6YmVmb3JlIHtcbiAgICAgIHRyYW5zZm9ybTogc2NhbGVYKC0xKTtcbiAgICB9XG5cbiAgICAmLWVsbGlwc2lzLXByZXYsXG4gICAgJi1lbGxpcHNpcy1uZXh0IHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIEBleHRlbmQgJWljb24tZWxsaXBzaXM7XG4gICAgICB9XG5cbiAgICAgICY6aG92ZXI6OmJlZm9yZSB7XG4gICAgICAgIEBleHRlbmQgJWljb24tY2hldnJvbnM7XG4gICAgICB9XG5cbiAgICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgICBib3JkZXI6IDA7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgbWFyZ2luOiAwO1xuICAgICAgY29sb3I6ICRjb2xvci10ZXh0O1xuXG4gICAgICAmOmZvY3VzIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgICB9XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYm94LXNoYWRvdzogbm9uZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLWVsbGlwc2lzLXByZXY6OmJlZm9yZSB7XG4gICAgICB0cmFuc2Zvcm06IHNjYWxlWCgtMSk7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXN3aXRjaChcbiAgOmNsYXNzPVwiY2xhc3Nlc1wiXG4gIDpzdHlsZT1cInN0eWxlc1wiXG4pXG4gIC5kaXRvLXN3aXRjaC1wYW5lXG4gICAgaW5wdXQoXG4gICAgICA6aWQ9XCJpZFwiXG4gICAgICByZWY9XCJpbnB1dFwiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIHYtbW9kZWw9XCJjaGVja2VkXCJcbiAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICA6bmFtZT1cIm5hbWVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgICAuZGl0by1zd2l0Y2gtYnV0dG9uXG4gICAgc3Bhbi5kaXRvLXN3aXRjaC1sYWJlbChcbiAgICAgIHYtaWY9XCJsYWJlbHNcIlxuICAgIClcbiAgICAgIHNsb3QoXG4gICAgICAgIHYtaWY9XCJjaGVja2VkXCJcbiAgICAgICAgbmFtZT1cImNoZWNrZWRcIlxuICAgICAgKSB7eyBsYWJlbHMuY2hlY2tlZCB8fCAnb24nIH19XG4gICAgICBzbG90KFxuICAgICAgICB2LWVsc2VcbiAgICAgICAgbmFtZT1cInVuY2hlY2tlZFwiXG4gICAgICApIHt7IGxhYmVscy51bmNoZWNrZWQgfHwgJ29mZicgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5leHBvcnQgZGVmYXVsdCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJywgJ2NoYW5nZSddLFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3BzOiB7XG4gICAgbW9kZWxWYWx1ZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGlkOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIG5hbWU6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbHM6IHsgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sIGRlZmF1bHQ6IGZhbHNlIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjaGVja2VkOiB0aGlzLm1vZGVsVmFsdWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy4kYXR0cnMuY2xhc3MsXG4gICAgICAgIHtcbiAgICAgICAgICAnZGl0by1jaGVja2VkJzogdGhpcy5jaGVja2VkLFxuICAgICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5kaXNhYmxlZFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfSxcblxuICAgIHN0eWxlcygpIHtcbiAgICAgIGNvbnN0IHsgbGFiZWxzOiB7IGNoZWNrZWQsIHVuY2hlY2tlZCB9ID0ge30gfSA9IHRoaXNcbiAgICAgIC8vIENhbGN1bGF0ZSBgLS1zd2l0Y2gtd2lkdGhgIGluIGByZW1gLCBiYXNlZCBvbiBsYWJlbCBsZW5ndGguXG4gICAgICBjb25zdCBsZW5ndGggPSBNYXRoLm1heCgwLCBjaGVja2VkPy5sZW5ndGgsIHVuY2hlY2tlZD8ubGVuZ3RoKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJy0tc3dpdGNoLXdpZHRoJzogbGVuZ3RoID8gYCR7bGVuZ3RoICogMS41fXJlbWAgOiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGF0dHJpYnV0ZXMoKSB7XG4gICAgICBjb25zdCB7IGNsYXNzOiBfLCAuLi5hdHRyaWJ1dGVzIH0gPSB0aGlzLiRhdHRyc1xuICAgICAgcmV0dXJuIGF0dHJpYnV0ZXNcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBtb2RlbFZhbHVlKG1vZGVsVmFsdWUpIHtcbiAgICAgIHRoaXMuY2hlY2tlZCA9IG1vZGVsVmFsdWVcbiAgICB9LFxuXG4gICAgY2hlY2tlZChjaGVja2VkKSB7XG4gICAgICBpZiAoY2hlY2tlZCAhPT0gdGhpcy5tb2RlbFZhbHVlKSB7XG4gICAgICAgIHRoaXMuJGVtaXQoJ3VwZGF0ZTptb2RlbFZhbHVlJywgY2hlY2tlZClcbiAgICAgICAgdGhpcy4kZW1pdCgnY2hhbmdlJywgY2hlY2tlZClcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy4kcmVmcy5pbnB1dC5mb2N1cygpXG4gICAgfVxuICB9XG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zd2l0Y2gge1xuICAvLyBVc2Ugd2hvbGUgbXVsdGlwbGVzIG9mIGByZW1gIGZvciBzaXplcyBhbmQgYHB4YCBtYXJnaW5zL3BhZGRpbmcgYWxvbmdcbiAgLy8gd2l0aCBgY2FsYygpYCB0byBlbmQgdXAgd2l0aCBldmVuIHBpeGVsIHNpemVzLlxuICAtLXN3aXRjaC13aWR0aDogNGVtO1xuICAtLXN3aXRjaC1oZWlnaHQ6IDJlbTtcbiAgLS1zd2l0Y2gtbWFyZ2luOiAycHg7XG4gIC0tc3dpdGNoLXBhZGRpbmc6IDNweDtcbiAgLS1zd2l0Y2gtc3BlZWQ6IDMwMG1zO1xuICAtLWxhYmVsLW1hcmdpbjogMC41ZW07XG4gIC0td2lkdGg6IGNhbGModmFyKC0tc3dpdGNoLXdpZHRoKSAtIDIgKiB2YXIoLS1zd2l0Y2gtbWFyZ2luKSk7XG4gIC0taGVpZ2h0OiBjYWxjKHZhcigtLXN3aXRjaC1oZWlnaHQpIC0gMiAqIHZhcigtLXN3aXRjaC1tYXJnaW4pKTtcbiAgLS1vZmZzZXQ6IGNhbGModmFyKC0td2lkdGgpIC0gdmFyKC0taGVpZ2h0KSk7XG5cbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGhlaWdodDogdmFyKC0tc3dpdGNoLWhlaWdodCk7XG4gIC8vIFRvIG1ha2UgaW5saW5lIGxhYmVscyBhcHBlYXIgb24gY29uc2lzdGVudCBiYXNlbGluZTpcbiAgdmVydGljYWwtYWxpZ246IGJvdHRvbTtcbiAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG5cbiAgLmRpdG8tc3dpdGNoLXBhbmUge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICB3aWR0aDogdmFyKC0td2lkdGgpO1xuICAgIGhlaWdodDogdmFyKC0taGVpZ2h0KTtcbiAgfVxuXG4gIC5kaXRvLXN3aXRjaC1wYW5lLFxuICAuZGl0by1zd2l0Y2gtbGFiZWwge1xuICAgIHRvcDogNTAlO1xuICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgfVxuXG4gIGlucHV0IHtcbiAgICBjdXJzb3I6IHBvaW50ZXI7XG4gICAgYXBwZWFyYW5jZTogbm9uZTtcbiAgICB3aWR0aDogMTAwJTtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgYm9yZGVyLXJhZGl1czogMWVtO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodDtcbiAgICB0cmFuc2l0aW9uOlxuICAgICAgYm9yZGVyLWNvbG9yIDAuM3MsXG4gICAgICBiYWNrZ3JvdW5kLWNvbG9yIDAuM3M7XG4gIH1cblxuICAuZGl0by1zd2l0Y2gtYnV0dG9uIHtcbiAgICAtLXNpemU6IGNhbGModmFyKC0taGVpZ2h0KSAtIDIgKiB2YXIoLS1zd2l0Y2gtcGFkZGluZykpO1xuXG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHRvcDogdmFyKC0tc3dpdGNoLXBhZGRpbmcpO1xuICAgIGxlZnQ6IHZhcigtLXN3aXRjaC1wYWRkaW5nKTtcbiAgICB3aWR0aDogdmFyKC0tc2l6ZSk7XG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplKTtcbiAgICBib3JkZXItcmFkaXVzOiBjYWxjKHZhcigtLXNpemUpIC8gMik7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3Itd2hpdGU7XG4gICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIHZhcigtLXN3aXRjaC1zcGVlZCk7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDApO1xuICB9XG5cbiAgLmRpdG8tc3dpdGNoLWJ1dHRvbixcbiAgLmRpdG8tc3dpdGNoLWxhYmVsIHtcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuXG4gIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIHJpZ2h0OiB2YXIoLS1sYWJlbC1tYXJnaW4pO1xuICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgfVxuXG4gICYuZGl0by1jaGVja2VkIHtcbiAgICBpbnB1dCB7XG4gICAgICBiYWNrZ3JvdW5kOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cblxuICAgIC5kaXRvLXN3aXRjaC1idXR0b24ge1xuICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKHZhcigtLW9mZnNldCkpO1xuICAgIH1cblxuICAgIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgICBsZWZ0OiB2YXIoLS1sYWJlbC1tYXJnaW4pO1xuICAgICAgcmlnaHQ6IHVuc2V0O1xuICAgIH1cbiAgfVxuXG4gICYuZGl0by1kaXNhYmxlZCB7XG4gICAgQGV4dGVuZCAlYnV0dG9uLWRpc2FibGVkO1xuICB9XG5cbiAgJjpmb2N1cy13aXRoaW46bm90KDpob3Zlcikge1xuICAgIC5kaXRvLXN3aXRjaC1idXR0b24ge1xuICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy1mb2N1cztcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8c2NyaXB0PlxuaW1wb3J0IHsgaCBhcyBjcmVhdGVFbGVtZW50LCBUcmFuc2l0aW9uIH0gZnJvbSAndnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZnVuY3Rpb24gVHJhbnNpdGlvbkhlaWdodCh7IGVuYWJsZWQgfSwgeyBzbG90cyB9KSB7XG4gIHJldHVybiBlbmFibGVkXG4gICAgPyBjcmVhdGVFbGVtZW50KFRyYW5zaXRpb24sIHByb3BzLCBzbG90cylcbiAgICA6IHNsb3RzLmRlZmF1bHQoKVxufVxuXG5UcmFuc2l0aW9uSGVpZ2h0LnByb3BzID0ge1xuICBlbmFibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBUcmFuc2l0aW9uSGVpZ2h0XG5cbmNvbnN0IHNldFN0eWxlID0gKGVsZW1lbnQsIHN0eWxlKSA9PiBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKVxuXG5jb25zdCBuZXh0VGltZW91dCA9IGNhbGxiYWNrID0+IHNldFRpbWVvdXQoY2FsbGJhY2ssIDApXG5cbi8vIEZvcmNlIHJlcGFpbnQgdG8gbWFrZSBzdXJlIHRoZSBhbmltYXRpb24gaXMgdHJpZ2dlcmVkIGNvcnJlY3RseS5cbmNvbnN0IGZvcmNlUmVwYWludCA9IGVsZW1lbnQgPT4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5oZWlnaHRcblxuY29uc3QgcHJvcHMgPSB7XG4gIG5hbWU6ICdkaXRvLWhlaWdodCcsXG5cbiAgb25BZnRlckVudGVyKGVsZW1lbnQpIHtcbiAgICAvLyBBIHRpbWVvdXQgYmVmb3JlIHNldHRpbmcgc3R5bGUgaXMgb25seSByZWFsbHkgbmVlZGVkIGFmdGVyIGNhbGxzIHRvXG4gICAgLy8gYGZvcmNlUmVwYWludCgpYCwgYnV0IHVzaW5nIG9uZSBoZXJlIHRvbyBwcmVzZXJ2ZXMgZXhlY3V0aW9uIHNlcXVlbmNlIHNvXG4gICAgLy8gdGhhdCB0aGUgY2FsbCBmcm9tIGBlbnRlcigpYCBjYW4gbmV2ZXIgb3V0cnVuIHRoZSBvbmUgZnJvbSBgYWZ0ZXJFbnRlcigpYFxuICAgIG5leHRUaW1lb3V0KCgpID0+IHNldFN0eWxlKGVsZW1lbnQsIHsgaGVpZ2h0OiBudWxsIH0pKVxuICB9LFxuXG4gIG9uRW50ZXIoZWxlbWVudCkge1xuICAgIC8vIEZvciBzb21lIHJlYXNvbiB3ZSdyZSBnZXR0aW5nIHR3byBgb25FbnRlcigpYCBjYWxscyBwZXIgdHJhbnNpdGlvbixcbiAgICAvLyBzbyB3ZSBuZWVkIHRvIGlnbm9yZSB0aGUgc2Vjb25kIG9uZS4gVGhpcyBtaWdodCBiZSBsaW5rZWQgdG8gdGhlIHVzZVxuICAgIC8vIG9mIGBuZXh0VGltZW91dCgpYCwgd2hpY2ggaXMgcmVxdWlyZWQgdG8gZ2V0IHRoZSBjb3JyZWN0IHZhbHVlIGZvclxuICAgIC8vIGBoZWlnaHRgLCBiYXNlZCBvbiBgJi0tbGFiZWwtdmVydGljYWxgIGNhbGN1bGF0aW9ucy5cbiAgICBjb25zdCB7IHdpZHRoIH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwge1xuICAgICAgd2lkdGgsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgICAgaGVpZ2h0OiAnYXV0bydcbiAgICB9KVxuICAgIG5leHRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgICBzZXRTdHlsZShlbGVtZW50LCB7XG4gICAgICAgIHdpZHRoOiBudWxsLFxuICAgICAgICBwb3NpdGlvbjogbnVsbCxcbiAgICAgICAgdmlzaWJpbGl0eTogbnVsbCxcbiAgICAgICAgaGVpZ2h0OiAwXG4gICAgICB9KVxuICAgICAgZm9yY2VSZXBhaW50KGVsZW1lbnQpXG4gICAgICBuZXh0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodCB9KSlcbiAgICB9KVxuICB9LFxuXG4gIG9uTGVhdmUoZWxlbWVudCkge1xuICAgIGNvbnN0IHsgaGVpZ2h0IH0gPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG4gICAgc2V0U3R5bGUoZWxlbWVudCwgeyBoZWlnaHQgfSlcbiAgICBmb3JjZVJlcGFpbnQoZWxlbWVudClcbiAgICBuZXh0VGltZW91dCgoKSA9PiBzZXRTdHlsZShlbGVtZW50LCB7IGhlaWdodDogMCB9KSlcbiAgfVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuJGR1cmF0aW9uOiAwLjE1cztcblxuLmRpdG8taGVpZ2h0LWVudGVyLWFjdGl2ZSxcbi5kaXRvLWhlaWdodC1sZWF2ZS1hY3RpdmUge1xuICB0cmFuc2l0aW9uOiBoZWlnaHQgJGR1cmF0aW9uICRlYXNlLW91dC1xdWFydDtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cblxuLmRpdG8taGVpZ2h0LWVudGVyLWFjdGl2ZSB7XG4gIGFuaW1hdGlvbjogZGl0by1zbGlkZS1lbnRlciAkZHVyYXRpb24gJGVhc2Utb3V0LXF1YXJ0O1xufVxuXG4uZGl0by1oZWlnaHQtbGVhdmUtYWN0aXZlIHtcbiAgYW5pbWF0aW9uOiBkaXRvLXNsaWRlLWxlYXZlICRkdXJhdGlvbiAkZWFzZS1vdXQtcXVhcnQ7XG59XG5cbi5kaXRvLWhlaWdodC1lbnRlci1mcm9tLFxuLmRpdG8taGVpZ2h0LWxlYXZlLXRvIHtcbiAgaGVpZ2h0OiAwO1xufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IHVzZVNsb3RzLCBDb21tZW50IH0gZnJvbSAndnVlJ1xuaW1wb3J0IHsgaXNTdHJpbmcsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gaGFzVk5vZGVDb250ZW50KHZub2RlKSB7XG4gIHJldHVybiB2bm9kZSAmJiBhc0FycmF5KHZub2RlKS5zb21lKHZub2RlID0+IHZub2RlLnR5cGUgIT09IENvbW1lbnQpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBoYXNTbG90Q29udGVudChzbG90LCBwcm9wcyA9IHt9KSB7XG4gIHNsb3QgPSBpc1N0cmluZyhzbG90KSA/IHVzZVNsb3RzKClbc2xvdF0gOiBzbG90XG4gIHJldHVybiBoYXNWTm9kZUNvbnRlbnQoc2xvdD8uKHByb3BzKSlcbn1cbiIsImltcG9ydCB7IGlzT2JqZWN0IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGFkZEV2ZW50cyB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBkb21IYW5kbGVyczogW11cbiAgICB9XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIGZvciAoY29uc3QgeyByZW1vdmUgfSBvZiB0aGlzLmRvbUhhbmRsZXJzKSB7XG4gICAgICByZW1vdmUoKVxuICAgIH1cbiAgICB0aGlzLmRvbUhhbmRsZXJzID0gW11cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZG9tT24oZWxlbWVudCwgdHlwZSwgaGFuZGxlcikge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYWRkRXZlbnRzKFxuICAgICAgICBlbGVtZW50LFxuICAgICAgICBpc09iamVjdCh0eXBlKSA/IHR5cGUgOiB7IFt0eXBlXTogaGFuZGxlciB9XG4gICAgICApXG4gICAgICB0aGlzLmRvbUhhbmRsZXJzLnB1c2gocmVzdWx0KVxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgY2xhc3MgRGl0b1VzZXIge1xuICBoYXNSb2xlKC4uLnJvbGVzKSB7XG4gICAgaWYgKHRoaXMucm9sZXMpIHtcbiAgICAgIGZvciAoY29uc3Qgcm9sZSBvZiByb2xlcykge1xuICAgICAgICBpZiAodGhpcy5yb2xlcy5pbmNsdWRlcyhyb2xlKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFQYXJlbnRDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2NoZW1hQ29tcG9uZW50czogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtYWluU2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50c1swXVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgLy8gVGhpcyBtZXRob2QgaXMgY2FsbGVkIGJ5IGBEaXRvU2NoZW1hLmNyZWF0ZWQoKS91bm1vdW50ZWQoKWAgb24gaXRzXG4gICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnRgLCBpZiB0aGUgcGFyZW50IHVzZXMgdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHNjaGVtYUNvbXBvbmVudCwgYWRkKSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgc2NoZW1hQ29tcG9uZW50cy5wdXNoKHNjaGVtYUNvbXBvbmVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNjaGVtYUNvbXBvbmVudHMuc3BsaWNlKHNjaGVtYUNvbXBvbmVudHMuaW5kZXhPZihzY2hlbWFDb21wb25lbnQpLCAxKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwiaW1wb3J0IFNjaGVtYVBhcmVudE1peGluIGZyb20gJy4vU2NoZW1hUGFyZW50TWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW1NjaGVtYVBhcmVudE1peGluXSxcblxuICBjb21wdXRlZDoge1xuICAgIGVycm9ycygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZmxhdE1hcCgoeyBlcnJvcnMgfSkgPT4gZXJyb3JzIHx8IFtdKVxuICAgIH0sXG5cbiAgICBpc1RvdWNoZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLnNvbWUoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc0RpcnR5KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5zb21lKGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVmFsaWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWFDb21wb25lbnRzLmV2ZXJ5KGl0ID0+IGl0LmlzVmFsaWQpXG4gICAgfSxcblxuICAgIGlzVmFsaWRhdGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC5pc1ZhbGlkKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZXZlcnkoaXQgPT4gaXQudmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSkpXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hQ29tcG9uZW50cy5ldmVyeShpdCA9PiBpdC52ZXJpZnlBbGwobWF0Y2gpKVxuICAgIH0sXG5cbiAgICByZXNldFZhbGlkYXRpb24oKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5yZXNldFZhbGlkYXRpb24oKSlcbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChpdCA9PiBpdC5jbGVhckVycm9ycygpKVxuICAgIH0sXG5cbiAgICBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudHMuZm9yRWFjaChcbiAgICAgICAgaXQgPT4gaXQuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCBmb2N1cylcbiAgICAgIClcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBWYWxpZGF0b3JNaXhpbiBmcm9tICcuLi9taXhpbnMvVmFsaWRhdG9yTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRDb21tb25QcmVmaXggfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtWYWxpZGF0b3JNaXhpbl0sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJHJvdXRlQ29tcG9uZW50OiAoKSA9PiB0aGlzXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlbG9hZDogZmFsc2UsXG4gICAgICAvLyBFYWNoIHJvdXRlLWNvbXBvbmVudCBkZWZpbmVzIGEgc3RvcmUgdGhhdCBnZXRzIHBhc3NlZCBvbiB0byBpdHNcbiAgICAgIC8vIGNoaWxkIGNvbXBvbmVudHMsIHNvIHRoZXkgY2FuIHN0b3JlIHZhbHVlcyBpbiB0aGVtIHRoYXQgbGl2ZSBiZXlvbmRcbiAgICAgIC8vIHRoZWlyIGxpZmUtY3ljbGUuIFNlZTogRGl0b1BhbmUsIFNvdXJjZU1peGluXG4gICAgICBzdG9yZToge30sXG4gICAgICBsb2FkQ2FjaGU6IHt9IC8vIFNlZSBUeXBlTWl4aW4ubG9hZCgpXG4gICAgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgcm91dGVDb21wb25lbnQoKSB7XG4gICAgICAvLyBPdmVycmlkZSBEaXRvTWl4aW4ncyByb3V0ZUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcm91dGVMZXZlbCgpIHtcbiAgICAgIGxldCBsZXZlbCA9IDBcbiAgICAgIGxldCByb3V0ZUNvbXBvbmVudCA9IHRoaXNcbiAgICAgIHdoaWxlICgocm91dGVDb21wb25lbnQgPSByb3V0ZUNvbXBvbmVudC5wYXJlbnRDb21wb25lbnQucm91dGVDb21wb25lbnQpKSB7XG4gICAgICAgIGxldmVsKytcbiAgICAgIH1cbiAgICAgIHJldHVybiBsZXZlbFxuICAgIH0sXG5cbiAgICByb3V0ZVJlY29yZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5tYXRjaGVkW3RoaXMucm91dGVMZXZlbF1cbiAgICB9LFxuXG4gICAgaXNMYXN0Um91dGUoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRydWUgd2hlbiB0aGlzIHJvdXRlciBjb21wb25lbnQgaXMgdGhlIGxhc3Qgb25lIGluIHRoZSByb3V0ZS5cbiAgICAgIGNvbnN0IHsgbWF0Y2hlZCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHJldHVybiB0aGlzLnJvdXRlUmVjb3JkID09PSBtYXRjaGVkW21hdGNoZWQubGVuZ3RoIC0gMV1cbiAgICB9LFxuXG4gICAgaXNMYXN0VW5uZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJvdXRlIGNvbXBvbmVudCBpcyB0aGUgbGFzdCBvbmUgaW4gdGhlIHJvdXRlIHRoYXRcbiAgICAgIC8vIG5lZWRzIGl0cyBvd24gcm91dGVyLXZpZXcgKD0gaXMgbm90IG5lc3RlZCkuXG4gICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlXG4gICAgICBmb3IgKGxldCBpID0gbWF0Y2hlZC5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCByZWNvcmQgPSBtYXRjaGVkW2ldXG4gICAgICAgIGlmICghcmVjb3JkLm1ldGEubmVzdGVkKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQgPT09IHJlY29yZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgaXNOZXN0ZWRSb3V0ZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEubmVzdGVkXG4gICAgfSxcblxuICAgIGlzVmlldygpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH0sXG5cbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMucm91dGVSZWNvcmQ/Lm1ldGFcbiAgICB9LFxuXG4gICAgcGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJvdXRlUGF0aCh0aGlzLnJvdXRlUmVjb3JkPy5wYXRoKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iKCkge1xuICAgICAgY29uc3QgeyBicmVhZGNydW1iIH0gPSB0aGlzLnNjaGVtYSB8fCB7fVxuICAgICAgcmV0dXJuIGJyZWFkY3J1bWIgfHwgYCR7dGhpcy5icmVhZGNydW1iUHJlZml4fSAke3RoaXMubGFiZWx9YFxuICAgIH0sXG5cbiAgICBicmVhZGNydW1iUHJlZml4KCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfSxcblxuICAgIHBhcmFtKCkge1xuICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgdnVlLXJvdXRlciBub3QgYmVpbmcgYWJsZSB0byBtYXAgbXVsdGlwbGUgdXJsIHBhcmFtZXRlcnNcbiAgICAgIC8vIHdpdGggdGhlIHNhbWUgbmFtZSB0byBtdWx0aXBsZSBjb21wb25lbnRzLCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMTM0NVxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnBhcmFtc1t0aGlzLm1ldGE/LnBhcmFtXSB8fCBudWxsXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZSwgc2VlIERpdG9Gb3JtXG4gICAgaXNNdXRhdGluZygpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBiZWZvcmVSb3V0ZVVwZGF0ZSh0bywgZnJvbSwgbmV4dCkge1xuICAgIHRoaXM/LmJlZm9yZVJvdXRlQ2hhbmdlKHRvLCBmcm9tLCBuZXh0KVxuICB9LFxuXG4gIGJlZm9yZVJvdXRlTGVhdmUodG8sIGZyb20sIG5leHQpIHtcbiAgICB0aGlzPy5iZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dClcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIEtlZXAgYSBzaGFyZWQgc3RhY2sgb2Ygcm9vdCBjb21wb25lbnRzIGZvciBEaXRvVHJhaWwgdG8gdXNlIHRvIHJlbmRlclxuICAgIC8vIGxhYmVscy4gQ2FuJ3QgcmVseSBvbiAkcm91dGUubWF0Y2hlZFtpXS5pbnN0YW5jZXMuZGVmYXVsdCB1bmZvcnR1bmF0ZWx5LFxuICAgIC8vIGFzIGluc3RhbmNlcyBhcmVuJ3QgaW1tZWRpYXRlbHkgcmVhZHksIGFuZCBpbnN0YW5jZXMgaXMgbm90IHJlYWN0aXZlLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzLnB1c2godGhpcylcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICByb3V0ZUNvbXBvbmVudHMuc3BsaWNlKHJvdXRlQ29tcG9uZW50cy5pbmRleE9mKHRoaXMpLCAxKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBiZWZvcmVSb3V0ZUNoYW5nZSh0bywgZnJvbSwgbmV4dCkge1xuICAgICAgbGV0IG9rID0gdHJ1ZVxuICAgICAgY29uc3QgaXNDbG9zaW5nID0gKFxuICAgICAgICAvLyBPbmx5IGhhbmRsZSB0aGlzIHJvdXRlIGNoYW5nZSBpZiB0aGUgZm9ybSBpcyBhY3R1YWxseSBtYXBwZWQgdG8gdGhlXG4gICAgICAgIC8vIGBmcm9tYCByb3V0ZSwgYnV0IGluY2x1ZGUgcGFyZW50IGZvcm1zIG9mIGNsb3NpbmcgbmVzdGVkIGZvcm1zIGFzIGFzXG4gICAgICAgIC8vIHdlbGwsIGJ5IG1hdGNoaW5nIHRoZSB0aGUgc3RhcnQgb2YgZnJvbS90byBwYXRoIGFnYWluc3QgYHRoaXMucGF0aGA6XG4gICAgICAgIGZyb20ucGF0aC5zdGFydHNXaXRoKHRoaXMucGF0aCkgJiZcbiAgICAgICAgIXRvLnBhdGguc3RhcnRzV2l0aCh0aGlzLnBhdGgpICYmXG4gICAgICAgIC8vIEV4Y2x1ZGUgaGFzaCBjaGFuZ2VzIG9ubHkgKD0gdGFiIGNoYW5nZXMpOlxuICAgICAgICBmcm9tLnBhdGggIT09IHRvLnBhdGggJiYgKFxuICAgICAgICAgIHRoaXMuaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHx8XG4gICAgICAgICAgLy8gRGVjaWRlIGlmIHdlJ3JlIG1vdmluZyB0b3dhcmRzIGEgbmV3IG5lc3RlZCBmb3JtLCBvciBjbG9zaW5nIC9cbiAgICAgICAgICAvLyByZXBsYWNpbmcgYW4gYWxyZWFkeSBvcGVuIG9uZSBieSBjb21wYXJpbmcgcGF0aCBsZW5ndGhzLlxuICAgICAgICAgIC8vIFRoZSBjYXNlIG9mIGA9YCBtYXRjaGVzIHRoZSByZXBsYWNpbmcgb2YgYW4gYWxyZWFkeSBvcGVuIG9uZS5cbiAgICAgICAgICB0by5wYXRoLmxlbmd0aCA8PSBmcm9tLnBhdGgubGVuZ3RoXG4gICAgICAgIClcbiAgICAgIClcbiAgICAgIGlmIChpc0Nsb3NpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNNdXRhdGluZykge1xuICAgICAgICAgIC8vIEZvciBhY3RpdmUgZGlyZWN0bHkgbXV0YXRpbmcgKG5lc3RlZCkgZm9ybXMgdGhhdCB3ZXJlIG5vdCB2YWxpZGF0ZWRcbiAgICAgICAgICAvLyB5ZXQsIHZhbGlkYXRlIHRoZW0gb25jZS4gSWYgdGhlIHVzZXIgdGhlbiBzdGlsbCB3YW50cyB0byBsZWF2ZVxuICAgICAgICAgIC8vIHRoZW0sIHRoZXkgY2FuIGNsaWNrIGNsb3NlIC8gbmF2aWdhdGUgYXdheSBhZ2Fpbi5cbiAgICAgICAgICBvayA9IChcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZGF0ZWQgfHxcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVBbGwoKVxuICAgICAgICAgIClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBUaGUgZm9ybSBkb2Vzbid0IGRpcmVjdGx5IG11dGF0ZSBkYXRhLiBJZiBpdCBpcyBkaXJ0eSwgYXNrIGlmIHVzZXJcbiAgICAgICAgICAvLyB3YW50cyB0byBwZXJzaXN0IGRhdGEgZmlyc3QuXG4gICAgICAgICAgaWYgKHRoaXMuaXNEaXJ0eSkge1xuICAgICAgICAgICAgb2sgPSB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICAgICAgYFlvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gRG8geW91IHJlYWxseSB3YW50IHRvICR7XG4gICAgICAgICAgICAgICAgdGhpcy52ZXJicy5jYW5jZWxcbiAgICAgICAgICAgICAgfT9gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBuZXh0KG9rKVxuICAgIH0sXG5cbiAgICBnZXRSb3V0ZVBhdGgocmVjb3JkUGF0aCkge1xuICAgICAgLy8gTWFwcyB0aGUgcm91dGUncyBhY3R1YWwgcGF0aCB0byB0aGUgbWF0Y2hlZCByb3V0ZXMgYnkgY291bnRpbmcgaXRzXG4gICAgICAvLyBwYXJ0cyBzZXBhcmF0ZWQgYnkgJy8nLCBzcGxpdHRpbmcgdGhlIHBhdGggaW50byB0aGUgbWFwcGVkIHBhcnRzXG4gICAgICAvLyBjb250YWluaW5nIGFjdHVhbCBwYXJhbWV0ZXJzLlxuICAgICAgY29uc3QgeyBwYXRoIH0gPSB0aGlzLiRyb3V0ZVxuICAgICAgcmV0dXJuIHJlY29yZFBhdGhcbiAgICAgICAgPyBwYXRoXG4gICAgICAgICAgICAuc3BsaXQoJy8nKVxuICAgICAgICAgICAgLnNsaWNlKDAsIHJlY29yZFBhdGguc3BsaXQoJy8nKS5sZW5ndGgpXG4gICAgICAgICAgICAuam9pbignLycpXG4gICAgICAgIDogcGF0aFxuICAgIH0sXG5cbiAgICBnZXRDaGlsZFBhdGgocGF0aCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgaXNGdWxsUm91dGVDaGFuZ2UodG8sIGZyb20pIHtcbiAgICAgIC8vIFRoZSByb3V0ZSBwYXRoIGlzIHRoZSBwYXRoIHVwIHRvIHRoZSBmaXJzdCAvIChleGNsdWRpbmcgdGhlIGluaXRpYWwgLyk6XG4gICAgICBjb25zdCByb290UGF0aCA9IHRoaXMucGF0aC5tYXRjaCgvXihcXC9bXi9dKikvKVsxXVxuICAgICAgcmV0dXJuICFnZXRDb21tb25QcmVmaXgodG8ucGF0aCwgZnJvbS5wYXRoKS5zdGFydHNXaXRoKHJvb3RQYXRoKVxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRlbXBsYXRlKFxuICB2LWlmPVwidXNlclwiXG4pXG4gIC8vLSBPbmx5IHJlbmRlciBEaXRvVmlldyB3aGVuIGl0IGlzIGFjdGl2ZSwgb3RoZXJ3aXNlIGEgbm9ybWFsIHJvdXRlci12aWV3XG4gIC8vLSBpbnN0ZWFkLCB0byBuZXN0IGZ1cnRoZXIgcm91dGUgY29tcG9uZW50cy5cbiAgLy8tIE5PVEU6IFRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIGhhbmRsaW5nIGluIERpdG9Gb3JtLCB3aGVyZSBgdi1zaG93YCBpc1xuICAvLy0gdXNlZCB0byBhbHdheXMgcmVuZGVyIGZvcm1zIGV2ZW4gd2hlbiBvdGhlciBuZXN0ZWQgZm9ybXMgYXJlIHByZXNlbnQuXG4gIFJvdXRlclZpZXcoXG4gICAgdi1pZj1cIiFpc0xhc3RSb3V0ZVwiXG4gICAgOmtleT1cIm5hbWVcIlxuICApXG4gIC5kaXRvLXZpZXcuZGl0by1zY3JvbGwtcGFyZW50KFxuICAgIHYtZWxzZS1pZj1cInNob3VsZFJlbmRlclNjaGVtYSh2aWV3U2NoZW1hKVwiXG4gICAgOmRhdGEtcmVzb3VyY2U9XCJzb3VyY2VTY2hlbWEucGF0aFwiXG4gIClcbiAgICBEaXRvU2NoZW1hKFxuICAgICAgOmtleT1cIm5hbWVcIlxuICAgICAgOnNjaGVtYT1cInZpZXdTY2hlbWFcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKG5hbWUpXCJcbiAgICAgIHBhZGRpbmc9XCJyb290XCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICBzY3JvbGxhYmxlXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCB7XG4gIGlzU2luZ2xlQ29tcG9uZW50VmlldyxcbiAgc29tZU5lc3RlZFNjaGVtYUNvbXBvbmVudFxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBoYXNSZXNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3Jlc291cmNlLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9WaWV3Jywge1xuICBtaXhpbnM6IFtSb3V0ZU1peGluXSxcblxuICBwcm92aWRlKCkge1xuICAgIC8vIFJlZGlyZWN0ICRzb3VyY2VDb21wb25lbnQgYW5kICRyZXNvdXJjZUNvbXBvbmVudCB0byB0aGUgbWFpbiBjb21wb25lbnQ6XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8uc291cmNlQ29tcG9uZW50IHx8IG51bGwsXG4gICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXMubWFpbkNvbXBvbmVudD8ucmVzb3VyY2VDb21wb25lbnQgfHwgbnVsbFxuICAgIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBVcGRhdGVkIGZyb20gTG9hZGluZ01peGluIHRocm91Z2ggYHNldExvYWRpbmcoaXNMb2FkaW5nKWA6XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgLy8gTk9URTogRGF0YSBpcyBzaGFyZWQgYWNyb3NzIGFsbCB2aWV3cyBiZWNhdXNlIHRoZSByb3V0ZXIgcmVjeWNsZXMgdGhlXG4gICAgICAvLyBEaXRvVmlldyBjb21wb25lbnQuXG4gICAgICBkYXRhOiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm1ldGEuc2NoZW1hXG4gICAgfSxcblxuICAgIG5hbWUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubmFtZVxuICAgIH0sXG5cbiAgICBpc1ZpZXcoKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH0sXG5cbiAgICBpc1NpbmdsZUNvbXBvbmVudFZpZXcoKSB7XG4gICAgICByZXR1cm4gaXNTaW5nbGVDb21wb25lbnRWaWV3KHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBtYWluQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMubWFpblNjaGVtYUNvbXBvbmVudC5nZXRDb21wb25lbnRCeURhdGFQYXRoKHRoaXMubmFtZSlcbiAgICB9LFxuXG4gICAgdmlld1NjaGVtYSgpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50LCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAvLyBUcmFuc2xhdGUgc2luZ2xlLWNvbXBvbmVudCBzY2hlbWFzIGludG8gbXVsdGktY29tcG9uZW50IHNjaGVtYXMsXG4gICAgICAvLyBzbyB0aGV5IGNhbiBiZSByZW5kZXJlZCBkaXJlY3RseSB0aHJvdWdoIERpdG9TY2hlbWEgYWxzbzpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnNjaGVtYSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgICAgW3NjaGVtYS5uYW1lXToge1xuICAgICAgICAgICAgICAgIG5hbWU6IHNjaGVtYS5uYW1lLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAuLi5jb21wb25lbnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgOiBzY2hlbWFcbiAgICB9LFxuXG4gICAgcHJvdmlkZXNEYXRhKCkge1xuICAgICAgcmV0dXJuIHNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnQodGhpcy52aWV3U2NoZW1hLCBoYXNSZXNvdXJjZSlcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAkcm91dGU6IHtcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8zMzkzI2lzc3VlY29tbWVudC0xMTU4NDcwMTQ5XG4gICAgICBmbHVzaDogJ3Bvc3QnLFxuICAgICAgaGFuZGxlcih0bywgZnJvbSkge1xuICAgICAgICAvLyBTZWUgaWYgdGhlIHJvdXRlIGNoYW5nZXMgY29tcGxldGVseSwgYW5kIGNsZWFyIHRoZSBkYXRhIGlmIGl0IGRvZXMuXG4gICAgICAgIGlmICh0aGlzLmlzRnVsbFJvdXRlQ2hhbmdlKHRvLCBmcm9tKSkge1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2VcbiAgICAgICAgICB0aGlzLmRhdGEgPSB7fVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB9LFxuXG4gICAgZ2V0Q2hpbGRQYXRoKHBhdGgpIHtcbiAgICAgIC8vIExpc3RzIGluc2lkZSBzaW5nbGUtY29tcG9uZW50IHZpZXdzIHVzZSB0aGUgdmlldydzIHBhdGggZm9yIHN1Yi1wYXRoczpcbiAgICAgIHJldHVybiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50Vmlld1xuICAgICAgICA/IHRoaXMucGF0aFxuICAgICAgICA6IGAke3RoaXMucGF0aH0vJHtwYXRofWBcbiAgICB9LFxuXG4gICAgc2V0TG9hZGluZyhpc0xvYWRpbmcpIHtcbiAgICAgIHRoaXMuaXNMb2FkaW5nID0gISFpc0xvYWRpbmdcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsImltcG9ydCB7IGRlZmluZUNvbXBvbmVudCwgcmVmLCB3YXRjaCwgb25TY29wZURpc3Bvc2UsIGggfSBmcm9tICd2dWUtZGVtaSc7XG5pbXBvcnQgeyBjcmVhdGVGb2N1c1RyYXAgfSBmcm9tICdmb2N1cy10cmFwJztcbmltcG9ydCB7IHVucmVmRWxlbWVudCB9IGZyb20gJ0B2dWV1c2UvY29yZSc7XG5cbmNvbnN0IFVzZUZvY3VzVHJhcCA9IC8qIEBfX1BVUkVfXyAqLyAvKiAjX19QVVJFX18gKi8gZGVmaW5lQ29tcG9uZW50KHtcbiAgbmFtZTogXCJVc2VGb2N1c1RyYXBcIixcbiAgcHJvcHM6IFtcImFzXCIsIFwib3B0aW9uc1wiXSxcbiAgc2V0dXAocHJvcHMsIHsgc2xvdHMgfSkge1xuICAgIGxldCB0cmFwO1xuICAgIGNvbnN0IHRhcmdldCA9IHJlZigpO1xuICAgIGNvbnN0IGFjdGl2YXRlID0gKCkgPT4gdHJhcCAmJiB0cmFwLmFjdGl2YXRlKCk7XG4gICAgY29uc3QgZGVhY3RpdmF0ZSA9ICgpID0+IHRyYXAgJiYgdHJhcC5kZWFjdGl2YXRlKCk7XG4gICAgd2F0Y2goXG4gICAgICAoKSA9PiB1bnJlZkVsZW1lbnQodGFyZ2V0KSxcbiAgICAgIChlbCkgPT4ge1xuICAgICAgICBpZiAoIWVsKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdHJhcCA9IGNyZWF0ZUZvY3VzVHJhcChlbCwgcHJvcHMub3B0aW9ucyB8fCB7fSk7XG4gICAgICAgIGFjdGl2YXRlKCk7XG4gICAgICB9LFxuICAgICAgeyBmbHVzaDogXCJwb3N0XCIgfVxuICAgICk7XG4gICAgb25TY29wZURpc3Bvc2UoKCkgPT4gZGVhY3RpdmF0ZSgpKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHNsb3RzLmRlZmF1bHQpXG4gICAgICAgIHJldHVybiBoKHByb3BzLmFzIHx8IFwiZGl2XCIsIHsgcmVmOiB0YXJnZXQgfSwgc2xvdHMuZGVmYXVsdCgpKTtcbiAgICB9O1xuICB9XG59KTtcblxuZXhwb3J0IHsgVXNlRm9jdXNUcmFwIH07XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tZGlhbG9nKFxuICByZWY9XCJkaWFsb2dcIlxuICByb2xlPVwiZGlhbG9nXCJcbiAgYXJpYS1leHBhbmRlZD1cInRydWVcIlxuICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gIDpzdHlsZT1cInsgJy0td2lkdGgnOiBzZXR0aW5ncy53aWR0aCA/IGAke3NldHRpbmdzLndpZHRofXB4YCA6IG51bGwgfVwiXG4gIEBtb3VzZXVwPVwib25Nb3VzZVVwXCJcbilcbiAgVXNlRm9jdXNUcmFwLmRpdG8tZGlhbG9nX19mb2N1cy10cmFwKDpvcHRpb25zPVwiZm9jdXNUcmFwT3B0aW9uc1wiKVxuICAgIGZvcm0uZGl0by1zY3JvbGwtcGFyZW50KFxuICAgICAgQHN1Ym1pdC5wcmV2ZW50PVwic3VibWl0XCJcbiAgICApXG4gICAgICAvLyBBZGQgYW4gaW52aXNpYmxlIGJ1dHRvbiB0aGF0IHByZXZlbnRzIHRoZSBjbGVhcmFibGUgYnV0dG9ucyBmcm9tIGJlaW5nXG4gICAgICAvLyBwcmVzc2VkIHdoZW4gdGhlIHVzZXIgcHJlc3NlcyB0aGUgRW50ZXIga2V5OlxuICAgICAgYnV0dG9uKFxuICAgICAgICB2LXNob3c9XCJmYWxzZVwiXG4gICAgICApXG4gICAgICBEaXRvU2NoZW1hKFxuICAgICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgICAgOmRhdGE9XCJkaWFsb2dEYXRhXCJcbiAgICAgICAgcGFkZGluZz1cInJvb3RcIlxuICAgICAgICBzY3JvbGxhYmxlXG4gICAgICAgIGdlbmVyYXRlTGFiZWxzXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKCNidXR0b25zKVxuICAgICAgICAgIERpdG9CdXR0b25zLmRpdG8tYnV0dG9ucy1sYXJnZShcbiAgICAgICAgICAgIDpidXR0b25zPVwiYnV0dG9uU2NoZW1hc1wiXG4gICAgICAgICAgICA6ZGF0YT1cImRpYWxvZ0RhdGFcIlxuICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBVc2VGb2N1c1RyYXAgfSBmcm9tICdAdnVldXNlL2ludGVncmF0aW9ucy91c2VGb2N1c1RyYXAvY29tcG9uZW50J1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9EaWFsb2cnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcbiAgY29tcG9uZW50czogeyBVc2VGb2N1c1RyYXAgfSxcbiAgZW1pdHM6IFsncmVtb3ZlJ10sXG5cbiAgcHJvdmlkZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgJGRpYWxvZ0NvbXBvbmVudDogKCkgPT4gdGhpc1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIGNvbXBvbmVudHM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGJ1dHRvbnM6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHByb21pc2U6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc2V0dGluZ3M6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6ICgpID0+ICh7XG4gICAgICAgIHdpZHRoOiA0ODAsXG4gICAgICAgIGNsaWNrVG9DbG9zZTogZmFsc2VcbiAgICAgIH0pXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgLy8gTWFrZSBzdXJlIGRpYWxvZyBkYXRhIGNvbnRhaW5zIGFsbCB0aGUgZXhwZWN0ZWQga2V5c1xuICAgIGNvbnN0IGRpYWxvZ0RhdGEgPSBjbG9uZSh0aGlzLmRhdGEpXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5jb21wb25lbnRzKSB7XG4gICAgICBpZiAoIShrZXkgaW4gZGlhbG9nRGF0YSkpIHtcbiAgICAgICAgZGlhbG9nRGF0YVtrZXldID0gbnVsbFxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgZGlhbG9nRGF0YVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGRpYWxvZ0NvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHNjaGVtYSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHR5cGU6ICdkaWFsb2cnLFxuICAgICAgICBjb21wb25lbnRzOiB0aGlzLmNvbXBvbmVudHNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGdldEJ1dHRvblNjaGVtYXModGhpcy5idXR0b25zKSkubWFwKFxuICAgICAgICAgIC8vIFByb2Nlc3MgdGhlIGJ1dHRvbiBzY2hlbWFzIHRvIGFkZCBkZWZhdWx0IGNsaWNrIGV2ZW50c1xuICAgICAgICAgIC8vIGZvciBib3RoICdzdWJtaXQnIGFuZCAnY2FuY2VsJyBidXR0b25zOlxuICAgICAgICAgIChba2V5LCBzY2hlbWFdKSA9PiB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSAnY2FuY2VsJyAmJiAhc2NoZW1hLmV2ZW50cykge1xuICAgICAgICAgICAgICBzY2hlbWEgPSB7XG4gICAgICAgICAgICAgICAgLi4uc2NoZW1hLFxuICAgICAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuY2FuY2VsKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBba2V5LCBzY2hlbWFdXG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGZvY3VzVHJhcE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICAgIGZhbGxiYWNrRm9jdXM6ICgpID0+IHRoaXMuJHJlZnMuZGlhbG9nLFxuICAgICAgICBvbkRlYWN0aXZhdGU6IHRoaXMuY2FuY2VsXG4gICAgICB9XG4gICAgfSxcblxuICAgIGhhc0J1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5idXR0b25TY2hlbWFzKS5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIGhhc0NhbmNlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuYnV0dG9uU2NoZW1hcy5jYW5jZWxcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICB0aGlzLmRvbU9uKHdpbmRvdywge1xuICAgICAga2V5dXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKCh0aGlzLmhhc0NhbmNlbCB8fCAhdGhpcy5oYXNCdXR0b25zKSAmJiBldmVudC5rZXlDb2RlID09PSAyNykge1xuICAgICAgICAgIHRoaXMuY2FuY2VsKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbW92ZSgpIHtcbiAgICAgIHRoaXMuJGVtaXQoJ3JlbW92ZScpXG4gICAgfSxcblxuICAgIHJlc29sdmUodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvbWlzZS5yZXNvbHZlKHZhbHVlKVxuICAgICAgdGhpcy5yZW1vdmUoKVxuICAgIH0sXG5cbiAgICByZWplY3QodmFsdWUpIHtcbiAgICAgIHRoaXMucHJvbWlzZS5yZWplY3QodmFsdWUpXG4gICAgICB0aGlzLnJlbW92ZSgpXG4gICAgfSxcblxuICAgIHN1Ym1pdCgpIHtcbiAgICAgIHRoaXMucmVzb2x2ZSh0aGlzLmRpYWxvZ0RhdGEpXG4gICAgfSxcblxuICAgIGNhbmNlbCgpIHtcbiAgICAgIC8vIFdoZW4gY2FuY2VsbGluZywgcmVzb2x2ZSBhcyBgdW5kZWZpbmVkYCBzbyB3ZSBjYW4gaGF2ZSBkaWFsb2dzXG4gICAgICAvLyByZXR1cm5pbmcgbnVsbCBhcyBhIGRlZmluZWQgdmFsdWUgYXMgd2VsbC5cbiAgICAgIHRoaXMucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgfSxcblxuICAgIGNsb3NlKCkge1xuICAgICAgdGhpcy5jYW5jZWwoKVxuICAgIH0sXG5cbiAgICBvbk1vdXNlVXAoKSB7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5jbGlja1RvQ2xvc2UpIHtcbiAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tZGlhbG9nIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBkaXNwbGF5OiBmbGV4O1xuICBpbnNldDogMDtcbiAgei1pbmRleDogJHotaW5kZXgtZGlhbG9nO1xuICBwYWRkaW5nOiAkY29udGVudC1wYWRkaW5nO1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgLy8gUHJldmVudCBzY3JvbGxpbmcgb2YgdGhlIHBhZ2UgYmVoaW5kIHRoZSBkaWFsb2c6XG4gIG92ZXJmbG93OiBoaWRkZW47XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTtcblxuICAmX19mb2N1cy10cmFwIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gIH1cblxuICAvLyBUT0RPOiBgJl9faW5uZXJgXG4gIGZvcm0ge1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgYmFja2dyb3VuZDogd2hpdGU7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgbWF4LXdpZHRoOiB2YXIoLS13aWR0aCwgNDgwcHgpO1xuICAgIG1heC1oZWlnaHQ6IDEwMCU7XG4gICAgYm94LXNoYWRvdzogMCAyMHB4IDYwcHggLTJweCByZ2JhKDI3LCAzMywgNTgsIDAuNCk7XG4gIH1cbn1cblxuLmRpdG8tZGlhbG9nLWVudGVyLWFjdGl2ZSxcbi5kaXRvLWRpYWxvZy1sZWF2ZS1hY3RpdmUge1xuICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzO1xuXG4gIGZvcm0ge1xuICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjI1cztcbiAgfVxufVxuXG4uZGl0by1kaWFsb2ctZW50ZXItZnJvbSxcbi5kaXRvLWRpYWxvZy1sZWF2ZS10byB7XG4gIG9wYWNpdHk6IDA7XG5cbiAgZm9ybSB7XG4gICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0yMHB4KTtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1yb290KFxuICA6ZGF0YS1hZ2VudC1icm93c2VyPVwiYXBwU3RhdGUuYWdlbnQuYnJvd3NlclwiXG4gIDpkYXRhLWFnZW50LXBsYXRmb3JtPVwiYXBwU3RhdGUuYWdlbnQucGxhdGZvcm1cIlxuICA6ZGF0YS1hZ2VudC12ZXJzaW9uPVwiYXBwU3RhdGUuYWdlbnQudmVyc2lvbk51bWJlclwiXG4pXG4gIFRyYW5zaXRpb24obmFtZT1cImRpdG8tZHJhZ1wiKVxuICAgIC5kaXRvLWRyYWctb3ZlcmxheShcbiAgICAgIHYtaWY9XCJpc0RyYWdnaW5nRmlsZXNcIlxuICAgIClcbiAgVHJhbnNpdGlvbkdyb3VwKG5hbWU9XCJkaXRvLWRpYWxvZ1wiKVxuICAgIERpdG9EaWFsb2coXG4gICAgICB2LWZvcj1cIihkaWFsb2csIGtleSkgaW4gZGlhbG9nc1wiXG4gICAgICA6a2V5PVwia2V5XCJcbiAgICAgIDpjb21wb25lbnRzPVwiZGlhbG9nLmNvbXBvbmVudHNcIlxuICAgICAgOmJ1dHRvbnM9XCJkaWFsb2cuYnV0dG9uc1wiXG4gICAgICA6cHJvbWlzZT1cImRpYWxvZy5wcm9taXNlXCJcbiAgICAgIDpkYXRhPVwiZGlhbG9nLmRhdGFcIlxuICAgICAgOnNldHRpbmdzPVwiZGlhbG9nLnNldHRpbmdzXCJcbiAgICAgIEByZW1vdmU9XCJyZW1vdmVEaWFsb2coa2V5KVwiXG4gICAgKVxuICBEaXRvTmF2aWdhdGlvblxuICBtYWluLmRpdG8tcGFnZS5kaXRvLXNjcm9sbC1wYXJlbnQoXG4gICAgdi1yZXNpemU9XCJvblJlc2l6ZVBhZ2VcIlxuICAgIDpjbGFzcz1cInBhZ2VDbGFzc2VzXCJcbiAgKVxuICAgIERpdG9IZWFkZXIoXG4gICAgICA6c3Bpbm5lcj1cIm9wdGlvbnMuc3Bpbm5lclwiXG4gICAgICA6aXNMb2FkaW5nPVwiaXNMb2FkaW5nXCJcbiAgICApXG4gICAgUm91dGVyVmlld1xuICBEaXRvU2lkZWJhclxuICAgIERpdG9BY2NvdW50KFxuICAgICAgdi1pZj1cInVzZXJcIlxuICAgIClcbiAgICBhLmRpdG8tbG9naW4oXG4gICAgICB2LWVsc2UtaWY9XCJhbGxvd0xvZ2luXCJcbiAgICAgIEBjbGljaz1cInJvb3RDb21wb25lbnQubG9naW4oKVwiXG4gICAgKVxuICAgICAgc3BhbiBMb2dpblxuICBEaXRvTm90aWZpY2F0aW9ucyhyZWY9XCJub3RpZmljYXRpb25zXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgZGVsZWdhdGUgYXMgdGlwcHlEZWxlZ2F0ZSB9IGZyb20gJ3RpcHB5LmpzJ1xuaW1wb3J0IHsgbWFwQ29uY3VycmVudGx5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IERpdG9Vc2VyIGZyb20gJy4uL0RpdG9Vc2VyLmpzJ1xuaW1wb3J0IERpdG9WaWV3IGZyb20gJy4uL2NvbXBvbmVudHMvRGl0b1ZpZXcudnVlJ1xuaW1wb3J0IERpdG9EaWFsb2cgZnJvbSAnLi9EaXRvRGlhbG9nLnZ1ZSdcbmltcG9ydCB7XG4gIHByb2Nlc3NWaWV3LFxuICByZXNvbHZlVmlld3MsXG4gIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUm9vdCcsIHtcbiAgbWl4aW5zOiBbRG9tTWl4aW5dLFxuICBjb21wb25lbnRzOiB7IERpdG9EaWFsb2cgfSxcblxuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdmlld3M6ICgpID0+IHRoaXMucmVzb2x2ZWRWaWV3c1xuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHVucmVzb2x2ZWRWaWV3czogeyB0eXBlOiBbT2JqZWN0LCBGdW5jdGlvbiwgUHJvbWlzZV0sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgb3B0aW9uczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6ICgpID0+ICh7fSkgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHJlc29sdmVkVmlld3M6IHt9LFxuICAgICAgcmVtb3ZlUm91dGVzOiBudWxsLFxuICAgICAgZGlhbG9nczoge30sXG4gICAgICBwYWdlV2lkdGg6IDAsXG4gICAgICBsb2FkaW5nQ291bnQ6IDAsXG4gICAgICBhbGxvd0xvZ2luOiBmYWxzZSxcbiAgICAgIGlzRHJhZ2dpbmdGaWxlczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBub3RpZmljYXRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNNb3VudGVkICYmIHRoaXMuJHJlZnMubm90aWZpY2F0aW9uc1xuICAgIH0sXG5cbiAgICBpc0xvYWRpbmcoKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb2FkaW5nQ291bnQgPiAwXG4gICAgfSxcblxuICAgIHBhZ2VDbGFzc2VzKCkge1xuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tcGFnZSdcbiAgICAgIC8vIE5PVEU6IEtlZXAgc3luY2VkIHdpdGggJGNvbnRlbnQtd2lkdGggaW4gU0NTUzpcbiAgICAgIGNvbnN0IGNvbnRlbnRXaWR0aCA9IDkwMFxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgdGhpcy5hcHBTdGF0ZS5wYWdlQ2xhc3MsXG4gICAgICAgIHtcbiAgICAgICAgICBbYCR7cHJlZml4fS0td2lkdGgtODBgXTogdGhpcy5wYWdlV2lkdGggPD0gY29udGVudFdpZHRoICogMC44LFxuICAgICAgICAgIFtgJHtwcmVmaXh9LS13aWR0aC02MGBdOiB0aGlzLnBhZ2VXaWR0aCA8PSBjb250ZW50V2lkdGggKiAwLjZcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuYXBwU3RhdGUudGl0bGUgPSBkb2N1bWVudC50aXRsZSB8fCAnRGl0by5qcyBBZG1pbidcbiAgICAvLyBXaXRoIGhvdC1yZWxvYWRpbmcsIGl0IGxvb2tzIGxpa2UgZGVzdHJveWVkIGhvb2tzIGFyZW4ndCBhbHdheXMgY2FsbGVkXG4gICAgLy8gZm9yIHJvdXRlIGNvbXBvbmVudHMgc28gcmVzZXQgdGhlIGFycmF5IG9mIHJlZ2lzdGVyZWQgY29tcG9uZW50cyBpbnN0ZWFkLlxuICAgIHRoaXMuYXBwU3RhdGUucm91dGVDb21wb25lbnRzID0gW11cbiAgfSxcblxuICBhc3luYyBtb3VudGVkKCkge1xuICAgIHRoaXMuc2V0dXBEcmFnQW5kRHJvcCgpXG5cbiAgICB0aXBweURlbGVnYXRlKHRoaXMuJGVsLCB7XG4gICAgICB0YXJnZXQ6ICcuZGl0by1pbmZvJyxcbiAgICAgIHRoZW1lOiAnaW5mbycsXG4gICAgICBhcHBlbmRUbzogbm9kZSA9PiBub2RlLmNsb3Nlc3QoJy5kaXRvLXBhbmUnKSxcbiAgICAgIGFuaW1hdGlvbjogJ3NoaWZ0LWF3YXktc3VidGxlJyxcbiAgICAgIGludGVyYWN0aXZlOiB0cnVlLFxuICAgICAgZGVsYXk6IDI1MCxcbiAgICAgIHpJbmRleDogJycsXG4gICAgICBvbkNyZWF0ZShpbnN0YW5jZSkge1xuICAgICAgICBpbnN0YW5jZS5zZXRDb250ZW50KGluc3RhbmNlLnJlZmVyZW5jZS5kYXRhc2V0LmluZm8pXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIENsZWFyIHRoZSBsYWJlbCBtYXJrZWQgYXMgYWN0aXZlIG9uIGFsbCBtb3VzZSBhbmQga2V5Ym9hcmQgZXZlbnRzLCBleGNlcHRcbiAgICAvLyB0aGUgb25lcyB0aGF0IERpdG9MYWJlbCBpdHNlbGYgaW50ZXJjZXB0cy5cbiAgICB0aGlzLmRvbU9uKGRvY3VtZW50LCB7XG4gICAgICBjbGljazogZXZlbnQgPT4ge1xuICAgICAgICBpZiAoIWV2ZW50LnRhcmdldC5jbG9zZXN0KCcuZGl0by1sYWJlbCcpKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAga2V5dXA6IGV2ZW50ID0+IHtcbiAgICAgICAgaWYgKGV2ZW50LmNvZGUgPT09ICdUYWInKSB7XG4gICAgICAgICAgdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0cnkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gZmFsc2VcbiAgICAgIGlmIChhd2FpdCB0aGlzLmZldGNoVXNlcigpKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucmVzb2x2ZVZpZXdzKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGF3YWl0IHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgfVxuICAgIHRoaXMuYWxsb3dMb2dpbiA9IHRydWVcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0dXBEcmFnQW5kRHJvcCgpIHtcbiAgICAgIC8vIFRoaXMgY29kZSBvbmx5IGhhcHBlbnMgdGhlIHZpc3VhbCBlZmZlY3RzIGFyb3VuZCBkcmFnZ2luZyBhbmQgZHJvcHBpbmdcbiAgICAgIC8vIGZpbGVzIGludG8gYSBgRGl0b1R5cGVVcGxvYWRgIGNvbXBvbmVudC4gVGhlIGFjdHVhbCB1cGxvYWRpbmcgaXNcbiAgICAgIC8vIGhhbmRsZWQgYnkgdGhlIGBEaXRvVHlwZVVwbG9hZGAgY29tcG9uZW50IGl0c2VsZi5cblxuICAgICAgbGV0IGRyYWdDb3VudCA9IDBcbiAgICAgIGxldCB1cGxvYWRzID0gW11cblxuICAgICAgY29uc3QgdG9nZ2xlRHJvcFRhcmdldENsYXNzID0gZW5hYmxlZCA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgdXBsb2FkIG9mIHVwbG9hZHMpIHtcbiAgICAgICAgICB1cGxvYWRcbiAgICAgICAgICAgIC5jbG9zZXN0KCcuZGl0by1jb250YWluZXInKVxuICAgICAgICAgICAgLmNsYXNzTGlzdC50b2dnbGUoJ2RpdG8tZHJvcC10YXJnZXQnLCBlbmFibGVkKVxuICAgICAgICB9XG4gICAgICAgIGlmICghZW5hYmxlZCkge1xuICAgICAgICAgIHVwbG9hZHMgPSBbXVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNldERyYWdnaW5nRmlsZXMgPSBlbmFibGVkID0+IHtcbiAgICAgICAgdGhpcy5pc0RyYWdnaW5nRmlsZXMgPSBlbmFibGVkXG4gICAgICAgIGlmIChlbmFibGVkKSB7XG4gICAgICAgICAgdG9nZ2xlRHJvcFRhcmdldENsYXNzKHRydWUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0b2dnbGVEcm9wVGFyZ2V0Q2xhc3MoZmFsc2UpLCAxNTApXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgICBkcmFnZW50ZXI6IGV2ZW50ID0+IHtcbiAgICAgICAgICBpZiAoIWRyYWdDb3VudCAmJiBldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgICAgIHVwbG9hZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuZGl0by11cGxvYWQnKVxuICAgICAgICAgICAgY29uc3QgaGFzVXBsb2FkcyA9IHVwbG9hZHMubGVuZ3RoID4gMFxuICAgICAgICAgICAgZXZlbnQuZGF0YVRyYW5zZmVyLmVmZmVjdEFsbG93ZWQgPSBoYXNVcGxvYWRzID8gJ2NvcHknIDogJ25vbmUnXG4gICAgICAgICAgICBpZiAoaGFzVXBsb2Fkcykge1xuICAgICAgICAgICAgICBzZXREcmFnZ2luZ0ZpbGVzKHRydWUpXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG4gICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBkcmFnQ291bnQrK1xuICAgICAgICB9LFxuXG4gICAgICAgIGRyYWdsZWF2ZTogZXZlbnQgPT4ge1xuICAgICAgICAgIGRyYWdDb3VudC0tXG4gICAgICAgICAgaWYgKCFkcmFnQ291bnQgJiYgZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICAgICAgICBzZXREcmFnZ2luZ0ZpbGVzKGZhbHNlKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcblxuICAgICAgICBkcmFnb3ZlcjogZXZlbnQgPT4ge1xuICAgICAgICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGNhbkRyb3AgPSBldmVudC50YXJnZXQuY2xvc2VzdChcbiAgICAgICAgICAgICAgJy5kaXRvLWNvbnRhaW5lcjpoYXMoLmRpdG8tdXBsb2FkKSdcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gY2FuRHJvcCA/ICdjb3B5JyA6ICdub25lJ1xuICAgICAgICAgICAgaWYgKCFjYW5Ecm9wKSB7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgZHJvcDogZXZlbnQgPT4ge1xuICAgICAgICAgIGRyYWdDb3VudCA9IDBcbiAgICAgICAgICBpZiAoZXZlbnQuZGF0YVRyYW5zZmVyKSB7XG4gICAgICAgICAgICBzZXREcmFnZ2luZ0ZpbGVzKGZhbHNlKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgbm90aWZ5KHsgdHlwZSA9ICdpbmZvJywgdGl0bGUsIHRleHQgfSA9IHt9KSB7XG4gICAgICB0aGlzLm5vdGlmaWNhdGlvbnMubm90aWZ5KHsgdHlwZSwgdGl0bGUsIHRleHQgfSlcbiAgICB9LFxuXG4gICAgY2xvc2VOb3RpZmljYXRpb25zKCkge1xuICAgICAgdGhpcy5ub3RpZmljYXRpb25zLmRlc3Ryb3lBbGwoKVxuICAgIH0sXG5cbiAgICByZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKSB7XG4gICAgICB0aGlzLmxvYWRpbmdDb3VudCArPSBpc0xvYWRpbmcgPyAxIDogLTFcbiAgICB9LFxuXG4gICAgc2hvd0RpYWxvZyh7IGNvbXBvbmVudHMsIGJ1dHRvbnMsIGRhdGEsIHNldHRpbmdzIH0pIHtcbiAgICAgIC8vIFNob3dzIGEgZGl0by1kaWFsb2cgY29tcG9uZW50IGFuZCB3cmFwcyBpdCBpbiBhIHByb21pc2Ugc28gdGhhdCB0aGVcbiAgICAgIC8vIGJ1dHRvbnMgaW4gdGhlIGRpYWxvZyBjYW4gdXNlIGBkaWFsb2cucmVzb2x2ZSgpYCBhbmQgYGRpYWxvZy5yZWplY3QoKWBcbiAgICAgIC8vIHRvIGNsb3NlIHRoZSBtb2RhbCBkaWFsb2cgYW5kIHJlc29sdmUgLyByZWplY3QgdGhlIHByb21pc2UgYXQgb25jZS5cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWFzeW5jLXByb21pc2UtZXhlY3V0b3JcbiAgICAgICAgYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIC8vIFByb2Nlc3MgY29tcG9uZW50cyB0byByZXNvbHZlIGFzeW5jIHNjaGVtYXMuXG4gICAgICAgICAgY29uc3Qgcm91dGVzID0gW11cbiAgICAgICAgICBhd2FpdCBwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyhcbiAgICAgICAgICAgIHRoaXMuYXBpLFxuICAgICAgICAgICAgeyB0eXBlOiAnZGlhbG9nJywgY29tcG9uZW50cyB9LFxuICAgICAgICAgICAgcm91dGVzLFxuICAgICAgICAgICAgMFxuICAgICAgICAgIClcbiAgICAgICAgICBpZiAocm91dGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ0RpYWxvZ3MgZG8gbm90IHN1cHBvcnQgY29tcG9uZW50cyB0aGF0IHByb2R1Y2Ugcm91dGVzJ1xuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBrZXkgPSBgZGlhbG9nLSR7KytkaWFsb2dJZH1gXG4gICAgICAgICAgdGhpcy5kaWFsb2dzW2tleV0gPSB7XG4gICAgICAgICAgICBjb21wb25lbnRzLFxuICAgICAgICAgICAgYnV0dG9ucyxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBzZXR0aW5ncyxcbiAgICAgICAgICAgIHByb21pc2U6IHsgcmVzb2x2ZSwgcmVqZWN0IH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgcmVtb3ZlRGlhbG9nKGtleSkge1xuICAgICAgZGVsZXRlIHRoaXMuZGlhbG9nc1trZXldXG4gICAgfSxcblxuICAgIGFzeW5jIGxvZ2luKCkge1xuICAgICAgdGhpcy5hbGxvd0xvZ2luID0gdHJ1ZVxuICAgICAgY29uc3Qge1xuICAgICAgICBhZGRpdGlvbmFsQ29tcG9uZW50cyxcbiAgICAgICAgcmVkaXJlY3RBZnRlckxvZ2luXG4gICAgICB9ID0gdGhpcy5vcHRpb25zLmxvZ2luIHx8IHt9XG4gICAgICBjb25zdCBsb2dpbkRhdGEgPSBhd2FpdCB0aGlzLnNob3dEaWFsb2coe1xuICAgICAgICBjb21wb25lbnRzOiB7XG4gICAgICAgICAgdXNlcm5hbWU6IHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIGF1dG9mb2N1czogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgcGFzc3dvcmQ6IHtcbiAgICAgICAgICAgIHR5cGU6ICdwYXNzd29yZCdcbiAgICAgICAgICB9LFxuICAgICAgICAgIC4uLmFkZGl0aW9uYWxDb21wb25lbnRzXG4gICAgICAgIH0sXG4gICAgICAgIGJ1dHRvbnM6IHtcbiAgICAgICAgICBjYW5jZWw6IHtcbiAgICAgICAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgICAgICAgdGV4dDogJ0NhbmNlbCdcbiAgICAgICAgICAgIC8vIE5PVEU6IFRoZSBjbGljayBldmVudCBpcyBhZGRlZCBpbiBEaXRvRGlhbG9nLmJ1dHRvblNjaGVtYXMoKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBsb2dpbjoge1xuICAgICAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICB0ZXh0OiAnTG9naW4nXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgaWYgKGxvZ2luRGF0YSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZW5kUmVxdWVzdCh7XG4gICAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9naW4sXG4gICAgICAgICAgICBkYXRhOiBsb2dpbkRhdGEsXG4gICAgICAgICAgICBpbnRlcm5hbDogdHJ1ZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHJlZGlyZWN0QWZ0ZXJMb2dpbikge1xuICAgICAgICAgICAgbG9jYXRpb24ucmVwbGFjZShyZWRpcmVjdEFmdGVyTG9naW4pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXNlcihyZXNwb25zZS5kYXRhLnVzZXIpXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnJlc29sdmVWaWV3cygpXG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IGVyci5yZXNwb25zZT8uZGF0YT8uZXJyb3JcbiAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgdGl0bGU6ICdBdXRoZW50aWNhdGlvbiBFcnJvcicsXG4gICAgICAgICAgICB0ZXh0OiBlcnJvciB8fCBlcnJcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyLCBlcnIucmVzcG9uc2UpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubG9naW4oKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIG5hdmlnYXRlSG9tZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlKCcvJylcbiAgICB9LFxuXG4gICAgYXN5bmMgbG9nb3V0KCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHtcbiAgICAgICAgICByZXNvdXJjZTogdGhpcy5hcGkudXNlcnMubG9nb3V0LFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIGlmIChyZXNwb25zZS5kYXRhLnN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLnNldFVzZXIobnVsbClcbiAgICAgICAgICB0aGlzLm5hdmlnYXRlSG9tZSgpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgZmV0Y2hVc2VyKCkge1xuICAgICAgbGV0IHVzZXIgPSBudWxsXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VuZFJlcXVlc3Qoe1xuICAgICAgICAgIHJlc291cmNlOiB0aGlzLmFwaS51c2Vycy5zZXNzaW9uLFxuICAgICAgICAgIGludGVybmFsOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICAgIHVzZXIgPSByZXNwb25zZS5kYXRhLnVzZXIgfHwgbnVsbFxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgIHRpdGxlOiAnQXV0aGVudGljYXRpb24gRXJyb3InLFxuICAgICAgICAgIHRleHQ6IGVyclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgdGhpcy5zZXRVc2VyKHVzZXIpXG4gICAgICByZXR1cm4gdXNlclxuICAgIH0sXG5cbiAgICBzZXRVc2VyKHVzZXIpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUudXNlciA9IChcbiAgICAgICAgdXNlciAmJlxuICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodXNlciwgRGl0b1VzZXIucHJvdG90eXBlKVxuICAgICAgKVxuICAgICAgLy8gQ2xlYXIgcmVzb2x2ZWQgdmlld3Mgd2hlbiB1c2VyIGlzIGxvZ2dlZCBvdXQuXG4gICAgICBpZiAoIXVzZXIpIHtcbiAgICAgICAgdGhpcy5yZXNvbHZlZFZpZXdzID0ge31cbiAgICAgICAgdGhpcy5uYXZpZ2F0ZUhvbWUoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBlbnN1cmVVc2VyKCkge1xuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5mZXRjaFVzZXIoKSkpIHtcbiAgICAgICAgYXdhaXQgdGhpcy5sb2dpbigpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHJlc29sdmVWaWV3cygpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMucmVzb2x2ZWRWaWV3cyA9IGF3YWl0IHJlc29sdmVWaWV3cyh0aGlzLnVucmVzb2x2ZWRWaWV3cylcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmICghZXJyb3IucmVxdWVzdCkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMubG9naW4oKVxuICAgICAgfVxuICAgICAgLy8gQ29sbGVjdCBhbGwgcm91dGVzIGZyb20gdGhlIHJvb3Qgc2NoZW1hIGNvbXBvbmVudHNcbiAgICAgIGNvbnN0IHJvdXRlcyA9IGF3YWl0IG1hcENvbmN1cnJlbnRseShcbiAgICAgICAgT2JqZWN0LmVudHJpZXModGhpcy5yZXNvbHZlZFZpZXdzKSxcbiAgICAgICAgKFtuYW1lLCBzY2hlbWFdKSA9PiBwcm9jZXNzVmlldyhEaXRvVmlldywgdGhpcy5hcGksIHNjaGVtYSwgbmFtZSlcbiAgICAgIClcbiAgICAgIC8vIE5vdyB0aGF0IHRoZSByb3V0ZXMgYXJlIGxvYWRlZCwgcmVwbGFjZSBhbGwgZXhpc3Rpbmcgcm91dGVzIHdpdGggdGhlXG4gICAgICAvLyBuZXcgcm91dGVzLCBhbmQgcmVzdG9yZSB0aGUgY3VycmVudCBwYXRoLlxuICAgICAgY29uc3QgeyBmdWxsUGF0aCB9ID0gdGhpcy4kcm91dGVcbiAgICAgIHRoaXMucmVtb3ZlUm91dGVzPy4oKVxuICAgICAgdGhpcy5yZW1vdmVSb3V0ZXMgPSBhZGRSb3V0ZXModGhpcy4kcm91dGVyLCBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAncm9vdCcsXG4gICAgICAgICAgcGF0aDogJy8nLFxuICAgICAgICAgIGNvbXBvbmVudHM6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLnJvdXRlcy5mbGF0KClcbiAgICAgIF0pXG4gICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZShmdWxsUGF0aClcbiAgICB9LFxuXG4gICAgb25SZXNpemVQYWdlKHsgY29udGVudFJlY3Q6IHsgd2lkdGggfSB9KSB7XG4gICAgICB0aGlzLnBhZ2VXaWR0aCA9IHdpZHRoXG4gICAgfVxuICB9XG59KVxuXG5sZXQgZGlhbG9nSWQgPSAwXG5cbmZ1bmN0aW9uIGFkZFJvdXRlcyhyb3V0ZXIsIHJvdXRlcykge1xuICBjb25zdCByZW1vdmVycyA9IFtdXG4gIGZvciAoY29uc3Qgcm91dGUgb2Ygcm91dGVzKSB7XG4gICAgY29uc3QgcmVtb3ZlID0gcm91dGVyLmFkZFJvdXRlKHJvdXRlKVxuICAgIHJlbW92ZXJzLnB1c2gocmVtb3ZlKVxuICB9XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBmb3IgKGNvbnN0IHJlbW92ZSBvZiByZW1vdmVycykge1xuICAgICAgcmVtb3ZlKClcbiAgICB9XG4gIH1cbn1cbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9zdHlsZSc7XG5cbi5kaXRvLWFwcCxcbi5kaXRvLXJvb3Qge1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xufVxuXG4uZGl0by1wYWdlIHtcbiAgLS1tYXgtY29udGVudC13aWR0aDogI3skY29udGVudC13aWR0aH07XG4gIC0tbWF4LXBhZ2Utd2lkdGg6IGNhbGModmFyKC0tbWF4LWNvbnRlbnQtd2lkdGgpICsgMiAqICN7JGNvbnRlbnQtcGFkZGluZ30pO1xuXG4gIGZsZXg6IDAgMSB2YXIoLS1tYXgtcGFnZS13aWR0aCk7XG4gIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gIG1pbi13aWR0aDogMCU7XG4gIG1heC13aWR0aDogdmFyKC0tbWF4LXBhZ2Utd2lkdGgpO1xuICBvdmVyZmxvdzogdmlzaWJsZTsgLy8gRm9yIC5kaXRvLWhlYWRlciBmdWxsLXdpZHRoIGJhY2tncm91bmQuXG5cbiAgJi0td2lkZSB7XG4gICAgLS1tYXgtY29udGVudC13aWR0aDogI3skY29udGVudC13aWR0aC13aWRlfTtcbiAgfVxufVxuXG4uZGl0by1hY2NvdW50LFxuLmRpdG8tbG9naW4ge1xuICBjdXJzb3I6IHBvaW50ZXI7XG59XG5cbi5kaXRvLWRyYWctb3ZlcmxheSB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwO1xuICBsZWZ0OiAwO1xuICB3aWR0aDogMTAwJTtcbiAgaGVpZ2h0OiAxMDAlO1xuICB6LWluZGV4OiAkei1pbmRleC1kcmFnLW92ZXJsYXk7XG4gIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yNSk7XG4gIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoOHB4KTtcbn1cblxuLmRpdG8tZHJvcC10YXJnZXQge1xuICAtLXNoYWRvdy1hbHBoYTogMC4yNTtcblxuICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgei1pbmRleDogJHotaW5kZXgtZHJhZy1vdmVybGF5ICsgMTtcbiAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDRweCA4cHggcmdiYSgwLCAwLCAwLCB2YXIoLS1zaGFkb3ctYWxwaGEpKSk7XG59XG5cbi5kaXRvLWRyYWctZW50ZXItYWN0aXZlLFxuLmRpdG8tZHJhZy1sZWF2ZS1hY3RpdmUge1xuICAkZHVyYXRpb246IDAuMTVzO1xuXG4gIHRyYW5zaXRpb246XG4gICAgb3BhY2l0eSAkZHVyYXRpb24sXG4gICAgYmFja2Ryb3AtZmlsdGVyICRkdXJhdGlvbjtcblxuICB+ICogLmRpdG8tZHJvcC10YXJnZXQge1xuICAgIHRyYW5zaXRpb246IGZpbHRlciAkZHVyYXRpb247XG4gIH1cbn1cblxuLmRpdG8tZHJhZy1lbnRlci1mcm9tLFxuLmRpdG8tZHJhZy1sZWF2ZS10byB7XG4gIG9wYWNpdHk6IDA7XG4gIGJhY2tkcm9wLWZpbHRlcjogYmx1cigwKTtcblxuICB+ICogLmRpdG8tZHJvcC10YXJnZXQge1xuICAgIC0tc2hhZG93LWFscGhhOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnVsLmRpdG8tbWVudShcbiAgdi1yZXNpemU9XCJvblJlc2l6ZVwiXG4gIDpzdHlsZT1cInsgJy0td2lkdGgnOiB3aWR0aCA/IGAke3dpZHRofXB4YCA6IG51bGwgfVwiXG4pXG4gIGxpKFxuICAgIHYtZm9yPVwiaXRlbSBpbiBpdGVtc1wiXG4gIClcbiAgICB0ZW1wbGF0ZShcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoaXRlbSlcIlxuICAgIClcbiAgICAgIGEuZGl0by1saW5rKFxuICAgICAgICA6aHJlZj1cImdldEl0ZW1IcmVmKGl0ZW0pXCJcbiAgICAgICAgOmNsYXNzPVwiZ2V0SXRlbUNsYXNzKGl0ZW0sICdkaXRvLXN1Yi1tZW51LWxpbmsnKVwiXG4gICAgICAgIEBjbGljay5wcmV2ZW50LnN0b3A9XCJvbkNsaWNrSXRlbShpdGVtKVwiXG4gICAgICApIHt7IGdldExhYmVsKGl0ZW0pIH19XG4gICAgICBEaXRvTWVudShcbiAgICAgICAgdi1pZj1cIml0ZW0uaXRlbXNcIlxuICAgICAgICA6Y2xhc3M9XCJnZXRJdGVtQ2xhc3MoaXRlbSwgJ2RpdG8tc3ViLW1lbnUnKVwiXG4gICAgICAgIDppdGVtcz1cIml0ZW0uaXRlbXNcIlxuICAgICAgICA6cGF0aD1cImdldEl0ZW1QYXRoKGl0ZW0sIGZhbHNlKVwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvTWVudScsIHtcbiAgcHJvcHM6IHtcbiAgICBpdGVtczoge1xuICAgICAgdHlwZTogW09iamVjdCwgQXJyYXldLFxuICAgICAgZGVmYXVsdDogKCkgPT4gW11cbiAgICB9LFxuICAgIHBhdGg6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICcnXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiAwXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblJlc2l6ZSh7IGNvbnRlbnRSZWN0OiB7IHdpZHRoIH0gfSkge1xuICAgICAgaWYgKHdpZHRoKSB7XG4gICAgICAgIHRoaXMud2lkdGggPSB3aWR0aFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRJdGVtQ2xhc3MoaXRlbSwgc3ViTWVudUNsYXNzKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbc3ViTWVudUNsYXNzXTogISFpdGVtLml0ZW1zLFxuICAgICAgICAnZGl0by1hY3RpdmUnOiB0aGlzLmlzQWN0aXZlSXRlbShpdGVtKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRJdGVtUGF0aChpdGVtLCBmaXJzdENoaWxkKSB7XG4gICAgICBjb25zdCBwYXRoID0gaXRlbS5wYXRoID8gYCR7dGhpcy5wYXRofS8ke2l0ZW0ucGF0aH1gIDogbnVsbFxuICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQgJiYgcGF0aCAmJiBpdGVtLml0ZW1zXG4gICAgICAgID8gYCR7cGF0aH0ke3RoaXMuZ2V0SXRlbVBhdGgoT2JqZWN0LnZhbHVlcyhpdGVtLml0ZW1zKVswXSwgZmFsc2UpfWBcbiAgICAgICAgOiBwYXRoXG4gICAgfSxcblxuICAgIGdldEl0ZW1IcmVmKGl0ZW0pIHtcbiAgICAgIGNvbnN0IHBhdGggPSB0aGlzLmdldEl0ZW1QYXRoKGl0ZW0sIHRydWUpXG4gICAgICByZXR1cm4gcGF0aCA/IHRoaXMuJHJvdXRlci5yZXNvbHZlKHBhdGgpLmhyZWYgOiBudWxsXG4gICAgfSxcblxuICAgIGlzQWN0aXZlSXRlbShpdGVtKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLiRyb3V0ZS5wYXRoLnN0YXJ0c1dpdGgodGhpcy5nZXRJdGVtUGF0aChpdGVtLCBmYWxzZSkpIHx8XG4gICAgICAgIGl0ZW0uaXRlbXMgJiYgT2JqZWN0LnZhbHVlcyhpdGVtLml0ZW1zKS5zb21lKHRoaXMuaXNBY3RpdmVJdGVtKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBvbkNsaWNrSXRlbShpdGVtKSB7XG4gICAgICBjb25zdCBwYXRoID0gdGhpcy5nZXRJdGVtUGF0aChpdGVtLCB0cnVlKVxuICAgICAgaWYgKHBhdGgpIHtcbiAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBwYXRoLCBmb3JjZTogdHJ1ZSB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkB1c2UgJ3Nhc3M6Y29sb3InO1xuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbWVudSB7XG4gICRpdGVtLWhlaWdodDogJG1lbnUtZm9udC1zaXplICsgMiAqICRtZW51LXBhZGRpbmctdmVyO1xuXG4gIGJvcmRlci1yaWdodDogJGJvcmRlci1zdHlsZTtcbiAgcGFkZGluZzogMCAkbWVudS1zcGFjaW5nO1xuXG4gIGxpIHtcbiAgICAmOmhhcyguZGl0by1zdWItbWVudTpub3QoLmRpdG8tYWN0aXZlKSkge1xuICAgICAgLy8gUG9wLW91dCBzdWItbWVudXMgb24gaG92ZXI6XG4gICAgICAmOmhvdmVyIHtcbiAgICAgICAgLmRpdG8tc3ViLW1lbnUtbGluayB7XG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0O1xuICAgICAgICB9XG5cbiAgICAgICAgLmRpdG8tc3ViLW1lbnUge1xuICAgICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICB3aWR0aDogdmFyKC0td2lkdGgpO1xuICAgICAgICAgIHotaW5kZXg6ICR6LWluZGV4LWhlYWRlcjtcbiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoY2FsYyh2YXIoLS13aWR0aCkgKyAyICogJG1lbnUtc3BhY2luZykpXG4gICAgICAgICAgICB0cmFuc2xhdGVZKC0kaXRlbS1oZWlnaHQpO1xuXG4gICAgICAgICAgbGk6Zmlyc3QtY2hpbGQge1xuICAgICAgICAgICAgLmRpdG8tbGluayB7XG4gICAgICAgICAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgJjo6YmVmb3JlIHtcbiAgICAgICAgICAgIC8vIEZpbGwgdGhlIGdhcCB0byBub3QgbG9vc2UgdGhlIGhvdmVyIHdoZW4gbW92aW5nIG92ZXIgaXQuXG4gICAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgICAgIHRvcDogMDtcbiAgICAgICAgICAgIGxlZnQ6IC0yICogJG1lbnUtc3BhY2luZztcbiAgICAgICAgICAgIHdpZHRoOiAyICogJG1lbnUtc3BhY2luZztcbiAgICAgICAgICAgIGhlaWdodDogJGl0ZW0taGVpZ2h0O1xuICAgICAgICAgICAgb3BhY2l0eTogMDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAuZGl0by1zdWItbWVudS1saW5rLFxuICAgICAgICAuZGl0by1zdWItbWVudSB7XG4gICAgICAgICAgYm94LXNoYWRvdzogJHNoYWRvdy13aW5kb3c7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAuZGl0by1saW5rIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwYWRkaW5nOiAkbWVudS1wYWRkaW5nO1xuICAgIGxpbmUtaGVpZ2h0OiAkbWVudS1saW5lLWhlaWdodDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBtYXJnaW4tdG9wOiAkbWVudS1zcGFjaW5nO1xuXG4gICAgJjpmb2N1czpub3QoOmFjdGl2ZSwgLmRpdG8tYWN0aXZlKSB7XG4gICAgICBib3gtc2hhZG93OiAkc2hhZG93LWZvY3VzO1xuICAgIH1cblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjUpO1xuICAgIH1cblxuICAgICYuZGl0by1hY3RpdmUge1xuICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tc3ViLW1lbnUtbGluayB7XG4gICAgJi5kaXRvLWFjdGl2ZSB7XG4gICAgICBiYWNrZ3JvdW5kOiBjb2xvci5hZGp1c3QoJGNvbG9yLWFjdGl2ZSwgJGFscGhhOiAtMC4zKTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1zdWItbWVudSB7XG4gICAgZGlzcGxheTogbm9uZTtcbiAgICBib3JkZXItcmlnaHQ6IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlc3Q7XG5cbiAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10cmFpbFxuICB1bFxuICAgIGxpKFxuICAgICAgdi1mb3I9XCJjb21wb25lbnQgaW4gdHJhaWxcIlxuICAgIClcbiAgICAgIGEuZGl0by1saW5rKFxuICAgICAgICA6Y2xhc3M9XCJnZXRMaW5rQ2xhc3MoY29tcG9uZW50KVwiXG4gICAgICAgIDpocmVmPVwiZ2V0Q29tcG9uZW50SHJlZihjb21wb25lbnQpXCJcbiAgICAgICAgQGNsaWNrLnByZXZlbnQuc3RvcD1cIm9uQ2xpY2tDb21wb25lbnQoY29tcG9uZW50KVwiXG4gICAgICApXG4gICAgICAgIHNwYW4oOmNsYXNzPVwiZ2V0U3BhbkNsYXNzKGNvbXBvbmVudClcIilcbiAgICAgICAgICB8IHt7IGNvbXBvbmVudC5icmVhZGNydW1iIH19XG4gIHNsb3RcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9UcmFpbCcsIHtcbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmFpbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmFwcFN0YXRlLnJvdXRlQ29tcG9uZW50cy5maWx0ZXIoXG4gICAgICAgIGNvbXBvbmVudCA9PiAhIWNvbXBvbmVudC5yb3V0ZVJlY29yZFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29tcG9uZW50UGF0aChjb21wb25lbnQpIHtcbiAgICAgIC8vIERvIHRoZSBzYW1lIGFzIGluIGBEaXRvTWVudWA6IExpbmsgbWVudSBpdGVtcyB0byB0aGUgZmlyc3QgY2hpbGRyZW4uXG4gICAgICBjb25zdCB7IHNjaGVtYSB9ID0gY29tcG9uZW50XG4gICAgICByZXR1cm4gc2NoZW1hLnR5cGUgPT09ICdtZW51J1xuICAgICAgICA/IE9iamVjdC52YWx1ZXMoc2NoZW1hLml0ZW1zKVswXS5mdWxsUGF0aFxuICAgICAgICA6IGNvbXBvbmVudC5wYXRoXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEhyZWYoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4gdGhpcy4kcm91dGVyLnJlc29sdmUodGhpcy5nZXRDb21wb25lbnRQYXRoKGNvbXBvbmVudCkpLmhyZWZcbiAgICB9LFxuXG4gICAgb25DbGlja0NvbXBvbmVudChjb21wb25lbnQpIHtcbiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgcGF0aDogdGhpcy5nZXRDb21wb25lbnRQYXRoKGNvbXBvbmVudCksXG4gICAgICAgIGZvcmNlOiB0cnVlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBnZXRMaW5rQ2xhc3MoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1hY3RpdmUnOiBjb21wb25lbnQucGF0aCA9PT0gdGhpcy4kcm91dGUucGF0aFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBnZXRTcGFuQ2xhc3MoY29tcG9uZW50KSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1kaXJ0eSc6IGNvbXBvbmVudC5pc0RpcnR5XG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdHJhaWwge1xuICBkaXNwbGF5OiBmbGV4O1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICBoZWlnaHQ6IDNlbTtcblxuICB1bCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgfVxuXG4gIGxpIHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgYSB7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuXG4gICAgJjpob3ZlciB7XG4gICAgICBzcGFuIHtcbiAgICAgICAgY29sb3I6ICRjb2xvci1saWdodDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBsaTpub3QoOmxhc3QtY2hpbGQpIGEge1xuICAgICRhbmdsZTogMzNkZWc7XG5cbiAgICAmOjpiZWZvcmUsXG4gICAgJjo6YWZ0ZXIge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgY29udGVudDogJyc7XG4gICAgICB3aWR0aDogMXB4O1xuICAgICAgaGVpZ2h0OiAwLjc1ZW07XG4gICAgICByaWdodDogLTAuMjVlbTtcbiAgICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICAgIG9wYWNpdHk6IDAuNTtcbiAgICB9XG5cbiAgICAmOjpiZWZvcmUge1xuICAgICAgdG9wOiA1MCU7XG4gICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgkYW5nbGUpO1xuICAgICAgdHJhbnNmb3JtLW9yaWdpbjogdG9wO1xuICAgIH1cblxuICAgICY6OmFmdGVyIHtcbiAgICAgIGJvdHRvbTogNTAlO1xuICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLSRhbmdsZSk7XG4gICAgICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b207XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbm5hdi5kaXRvLWhlYWRlclxuICBEaXRvVHJhaWxcbiAgICBEaXRvU3Bpbm5lcihcbiAgICAgIHYtaWY9XCJpc0xvYWRpbmdcIlxuICAgICAgOnNpemU9XCJzcGlubmVyPy5zaXplXCJcbiAgICAgIDpjb2xvcj1cInNwaW5uZXI/LmNvbG9yXCJcbiAgICApXG4gIC8vLSBUZWxlcG9ydCB0YXJnZXQgZm9yIGAuZGl0by1zY2hlbWEtaGVhZGVyYDpcbiAgLmRpdG8taGVhZGVyX190ZWxlcG9ydFxuICBzbG90XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvSGVhZGVyJywge1xuICBwcm9wczoge1xuICAgIHNwaW5uZXI6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9LFxuICAgIGlzTG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8taGVhZGVyIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBiYWNrZ3JvdW5kOiAkY29sb3ItYmxhY2s7XG4gIGZvbnQtc2l6ZTogJGhlYWRlci1mb250LXNpemU7XG4gIGxpbmUtaGVpZ2h0OiAkaGVhZGVyLWxpbmUtaGVpZ2h0O1xuICB6LWluZGV4OiAkei1pbmRleC1oZWFkZXI7XG4gIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICY6OmFmdGVyIHtcbiAgICAvLyBTZXQgdGhlIGZ1bGwtd2lkdGggaGVhZGVyIGJhY2tncm91bmQgdG8gdGhlIGhlYWRlciBjb2xvci5cbiAgICBjb250ZW50OiAnJztcbiAgICBpbnNldDogMDtcbiAgICB3aWR0aDogMTAwdnc7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGJhY2tncm91bmQ6IGluaGVyaXQ7XG4gICAgei1pbmRleDogLTE7XG4gIH1cblxuICBzcGFuIHtcbiAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gICAgcGFkZGluZzogJGhlYWRlci1wYWRkaW5nO1xuICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG5cbiAgICAmOmVtcHR5IHtcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJ1xcMjAwYic7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tZGlydHkge1xuICAgICY6OmFmdGVyIHtcbiAgICAgIGNvbnRlbnQ6ICcnO1xuICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgYmFja2dyb3VuZC1jb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgd2lkdGg6IDhweDtcbiAgICAgIGhlaWdodDogOHB4O1xuICAgICAgbWFyZ2luOiAycHg7XG4gICAgICBtYXJnaW4tbGVmdDogMC41ZW07XG4gICAgICBib3JkZXItcmFkaXVzOiAxMDAlO1xuICAgIH1cbiAgfVxuXG4gICZfX3RlbGVwb3J0IHtcbiAgICAvLyBBbGlnbiB0aGUgdGVsZXBvcnRlZCBzY2hlbWEgaGVhZGVycyBvbiB0b3Agb2YgdG8gdGhlIGhlYWRlciBtZW51LlxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICBpbnNldDogMDtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7XG4gICAgcGFkZGluZzogMCAkaGVhZGVyLXBhZGRpbmctaG9yO1xuICAgIC8vIFR1cm4gb2ZmIHBvaW50ZXIgZXZlbnRzIHNvIHRoYXQgRGl0b1RyYWlsIGtlZXBzIHJlY2VpdmluZyBldmVudHMuLi5cbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgICAvLyAuLi5idXQgbW92ZSB0aGVtIHRvIHRoZSBjaGlsZHJlbi5cbiAgICA+ICoge1xuICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgfVxuXG4gICAgLmRpdG8tYnV0dG9uIHtcbiAgICAgIG1hcmdpbjogMCAwICR0YWItbWFyZ2luICR0YWItbWFyZ2luO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5uYXYuZGl0by1uYXZpZ2F0aW9uLmRpdG8tc2Nyb2xsLXBhcmVudFxuICBoMVxuICAgIFJvdXRlckxpbmsuZGl0by1saW5rKHRvPVwiL1wiKSB7eyBhcHBTdGF0ZS50aXRsZSB9fVxuICBEaXRvTWVudS5kaXRvLXNjcm9sbCg6aXRlbXM9XCJ2aWV3c1wiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b05hdmlnYXRpb24nLCB7fSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLW5hdmlnYXRpb24ge1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICBmbGV4OiAwIDAgbWluLWNvbnRlbnQ7XG4gIGZvbnQtc2l6ZTogJG1lbnUtZm9udC1zaXplO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICBiYWNrZ3JvdW5kOiAkY29sb3ItbGlnaHRlcjtcblxuICBoMSB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgbGluZS1oZWlnaHQ6ICRoZWFkZXItbGluZS1oZWlnaHQ7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtlcjtcbiAgICBib3JkZXItcmlnaHQ6ICRib3JkZXItd2lkdGggc29saWQgJGNvbG9yLWRhcmtlc3Q7XG4gICAgY29sb3I6ICRjb2xvci13aGl0ZTtcblxuICAgIC5kaXRvLWxpbmsge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICBwYWRkaW5nOiAkaGVhZGVyLXBhZGRpbmc7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLW5vdGlmaWNhdGlvbnNcbiAgLmRpdG8taGVhZGVyXG4gICAgc3BhblxuICAuZGl0by1ub3RpZmljYXRpb25zX19pbm5lclxuICAgIFZ1ZU5vdGlmaWNhdGlvbnMoXG4gICAgICByZWY9XCJub3RpZmljYXRpb25zXCJcbiAgICAgIGNsYXNzZXM9XCJkaXRvLW5vdGlmaWNhdGlvblwiXG4gICAgICBwb3NpdGlvbj1cIlwiXG4gICAgICB3aWR0aD1cIlwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhc0FycmF5LCBzdHJpcFRhZ3MgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Ob3RpZmljYXRpb25zJywge1xuICBub3RpZmljYXRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmlzTW91bnRlZCAmJiB0aGlzLiRyZWZzLm5vdGlmaWNhdGlvbnNcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgbm90aWZ5KHsgdHlwZSA9ICdpbmZvJywgdGl0bGUsIHRleHQgfSA9IHt9KSB7XG4gICAgICB0aXRsZSB8fD0gKFxuICAgICAgICB7XG4gICAgICAgICAgd2FybmluZzogJ1dhcm5pbmcnLFxuICAgICAgICAgIGVycm9yOiAnRXJyb3InLFxuICAgICAgICAgIGluZm86ICdJbmZvcm1hdGlvbicsXG4gICAgICAgICAgc3VjY2VzczogJ1N1Y2Nlc3MnXG4gICAgICAgIH1bdHlwZV0gfHxcbiAgICAgICAgJ05vdGlmaWNhdGlvbidcbiAgICAgIClcbiAgICAgIHRleHQgPSBgPHA+JHtcbiAgICAgICAgYXNBcnJheSh0ZXh0KS5qb2luKCc8L3A+IDxwPicpXG4gICAgICB9PC9wPmAucmVwbGFjZSgvXFxufFxcclxcbnxcXHIvZywgJzxicj4nKVxuICAgICAgY29uc3QgbG9nID0gKFxuICAgICAgICB7XG4gICAgICAgICAgd2FybmluZzogJ3dhcm4nLFxuICAgICAgICAgIGVycm9yOiAnZXJyb3InLFxuICAgICAgICAgIGluZm86ICdsb2cnLFxuICAgICAgICAgIHN1Y2Nlc3M6ICdsb2cnXG4gICAgICAgIH1bdHlwZV0gfHxcbiAgICAgICAgJ2Vycm9yJ1xuICAgICAgKVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGVbbG9nXShzdHJpcFRhZ3ModGV4dCkpXG4gICAgICBjb25zdCB7IG5vdGlmaWNhdGlvbnMgPSB0cnVlIH0gPSB0aGlzLmFwaVxuICAgICAgaWYgKG5vdGlmaWNhdGlvbnMpIHtcbiAgICAgICAgLy8gQ2FsY3VsYXRlIGRpc3BsYXktZHVyYXRpb24gZm9yIHRoZSBub3RpZmljYXRpb24gYmFzZWQgb24gaXRzIGNvbnRlbnRcbiAgICAgICAgLy8gYW5kIHRoZSBzZXR0aW5nIG9mIHRoZSBgZHVyYXRpb25GYWN0b3JgIGNvbmZpZ3VyYXRpb24uIEl0IGRlZmluZXMgdGhlXG4gICAgICAgIC8vIGFtb3VudCBvZiBtaWxsaXNlY29uZHMgbXVsdGlwbGllZCB3aXRoIHRoZSBhbW91bnQgb2YgY2hhcmFjdGVyc1xuICAgICAgICAvLyBkaXNwbGF5ZWQgaW4gdGhlIG5vdGlmaWNhdGlvbiwgcGx1cyA0MCAoNDAgKyB0aXRsZSArIG1lc3NhZ2UpOlxuICAgICAgICBjb25zdCB7IGR1cmF0aW9uRmFjdG9yID0gMjAgfSA9IG5vdGlmaWNhdGlvbnNcbiAgICAgICAgY29uc3QgZHVyYXRpb24gPSAoNDAgKyB0ZXh0Lmxlbmd0aCArIHRpdGxlLmxlbmd0aCkgKiBkdXJhdGlvbkZhY3RvclxuICAgICAgICB0aGlzLiRub3RpZnkoeyB0eXBlLCB0aXRsZSwgdGV4dCwgZHVyYXRpb24gfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVzdHJveUFsbCgpIHtcbiAgICAgIHRoaXMubm90aWZpY2F0aW9ucy5kZXN0cm95QWxsKClcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AdXNlICdzYXNzOmNvbG9yJztcbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbkBtaXhpbiB0eXBlKCRiYWNrZ3JvdW5kKSB7XG4gIGJhY2tncm91bmQ6IGNvbG9yLmFkanVzdCgkYmFja2dyb3VuZCwgJGxpZ2h0bmVzczogNSUpO1xuICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICBib3JkZXItbGVmdDogMTJweCBzb2xpZCBjb2xvci5hZGp1c3QoJGJhY2tncm91bmQsICRsaWdodG5lc3M6IC0xMCUpO1xufVxuXG4uZGl0by1ub3RpZmljYXRpb25zIHtcbiAgJG5vdGlmaWNhdGlvbi13aWR0aDogMzAwcHg7XG5cbiAgZmxleDogMTtcbiAgei1pbmRleDogJHotaW5kZXgtbm90aWZpY2F0aW9ucztcbiAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmc7XG4gIC8vIEZvciB0aGUgYEBjb250YWluZXJgIHJ1bGUgdG8gd29yazpcbiAgY29udGFpbmVyLXR5cGU6IGlubGluZS1zaXplO1xuXG4gIC5kaXRvLWhlYWRlciB7XG4gICAgc3BhbiB7XG4gICAgICBwYWRkaW5nLWxlZnQ6IDA7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAwO1xuICAgIH1cbiAgfVxuXG4gICZfX2lubmVyIHtcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIH1cblxuICAudnVlLW5vdGlmaWNhdGlvbi1ncm91cCB7XG4gICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgIGxlZnQ6IDA7XG4gICAgdG9wOiAwO1xuICAgIHdpZHRoOiAkbm90aWZpY2F0aW9uLXdpZHRoO1xuXG4gICAgQGNvbnRhaW5lciAod2lkdGggPCAjeyRub3RpZmljYXRpb24td2lkdGggKyAkY29udGVudC1wYWRkaW5nfSkge1xuICAgICAgbGVmdDogdW5zZXQ7XG4gICAgICByaWdodDogJGNvbnRlbnQtcGFkZGluZztcbiAgICB9XG4gIH1cblxuICAudnVlLW5vdGlmaWNhdGlvbi13cmFwcGVyIHtcbiAgICBvdmVyZmxvdzogdmlzaWJsZTtcbiAgfVxuXG4gIC5kaXRvLW5vdGlmaWNhdGlvbiB7XG4gICAgcGFkZGluZzogOHB4O1xuICAgIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZyAwO1xuICAgIGZvbnQtc2l6ZTogaW5oZXJpdDtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJveC1zaGFkb3c6ICRzaGFkb3ctd2luZG93O1xuXG4gICAgLm5vdGlmaWNhdGlvbi10aXRsZSB7XG4gICAgICBmb250LXdlaWdodDogYm9sZDtcbiAgICAgIHBhZGRpbmctYm90dG9tOiA4cHg7XG4gICAgfVxuXG4gICAgLm5vdGlmaWNhdGlvbi1jb250ZW50IHtcbiAgICAgIG92ZXJmbG93OiBoaWRkZW47XG4gICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7XG5cbiAgICAgIHAge1xuICAgICAgICBtYXJnaW46IDA7XG5cbiAgICAgICAgJiArIHAge1xuICAgICAgICAgIG1hcmdpbi10b3A6IDhweDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgICYsXG4gICAgJi5pbmZvIHtcbiAgICAgIEBpbmNsdWRlIHR5cGUoJGNvbG9yLWFjdGl2ZSk7XG4gICAgfVxuXG4gICAgJi5zdWNjZXNzIHtcbiAgICAgIEBpbmNsdWRlIHR5cGUoJGNvbG9yLXN1Y2Nlc3MpO1xuICAgIH1cblxuICAgICYud2FybmluZyB7XG4gICAgICBAaW5jbHVkZSB0eXBlKCRjb2xvci13YXJuaW5nKTtcbiAgICB9XG5cbiAgICAmLmVycm9yIHtcbiAgICAgIEBpbmNsdWRlIHR5cGUoJGNvbG9yLWVycm9yKTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuYXNpZGUuZGl0by1zaWRlYmFyLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgdi1yZXNpemU9XCJvblJlc2l6ZVNpZGViYXJcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbilcbiAgbmF2LmRpdG8taGVhZGVyXG4gICAgc2xvdFxuICAuZGl0by1zaWRlYmFyX190ZWxlcG9ydC5kaXRvLXNjcm9sbFxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1NpZGViYXInLCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNpZGViYXJXaWR0aDogMFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICBjb25zdCBwcmVmaXggPSAnZGl0by1zaWRlYmFyJ1xuICAgICAgLy8gTk9URTogS2VlcCBzeW5jZWQgd2l0aCAkc2lkZWJhci1tYXgtd2lkdGggaW4gU0NTUzpcbiAgICAgIGNvbnN0IHNpZGViYXJXaWR0aCA9IDM2MFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Ake3ByZWZpeH0tLXdpZHRoLTk5YF06IHRoaXMuc2lkZWJhcldpZHRoIDwgc2lkZWJhcldpZHRoLFxuICAgICAgICBbYCR7cHJlZml4fS0td2lkdGgtNjBgXTogdGhpcy5zaWRlYmFyV2lkdGggPD0gc2lkZWJhcldpZHRoICogMC42XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblJlc2l6ZVNpZGViYXIoeyBjb250ZW50UmVjdDogeyB3aWR0aCB9IH0pIHtcbiAgICAgIHRoaXMuc2lkZWJhcldpZHRoID0gd2lkdGhcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zaWRlYmFyIHtcbiAgZmxleDogMCAxICRzaWRlYmFyLW1heC13aWR0aDtcbiAgbWF4LXdpZHRoOiAkc2lkZWJhci1tYXgtd2lkdGg7XG4gIG1pbi13aWR0aDogJHNpZGViYXItbWluLXdpZHRoO1xufVxuPC9zdHlsZT5cbiIsImltcG9ydCBEb21NaXhpbiBmcm9tICcuL0RvbU1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcHVsbGRvd246IHtcbiAgICAgICAgb3BlbjogZmFsc2UsXG4gICAgICAgIHN0YXJ0VGltZTogMCxcbiAgICAgICAgY2hlY2tUaW1lOiB0cnVlLFxuICAgICAgICBldmVudHM6IHtcbiAgICAgICAgICBtb3VzZWRvd246ICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5wdWxsZG93bi5oYW5kbGVycy5yZW1vdmUoKVxuICAgICAgICAgIH0sXG5cbiAgICAgICAgICBtb3VzZXVwOiAoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5vblB1bGxkb3duTW91c2VVcCgpKSB7XG4gICAgICAgICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGhhbmRsZXJzOiBudWxsXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvblB1bGxkb3duTW91c2VEb3duKHZhbHVlID0gbnVsbCkge1xuICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHRoaXMuc2V0UHVsbGRvd25PcGVuKHRydWUpXG4gICAgICAgIHRoaXMuY2hlY2tUaW1lID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5jaGVja1RpbWUgPSBmYWxzZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duTW91c2VVcCh2YWx1ZSA9IG51bGwpIHtcbiAgICAgIGNvbnN0IHsgc3RhcnRUaW1lIH0gPSB0aGlzLnB1bGxkb3duXG4gICAgICBpZiAoIXRoaXMuY2hlY2tUaW1lIHx8IHN0YXJ0VGltZSAmJiAoRGF0ZS5ub3coKSAtIHN0YXJ0VGltZSA+IDI1MCkpIHtcbiAgICAgICAgdGhpcy5zZXRQdWxsZG93bk9wZW4oZmFsc2UpXG4gICAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgIHRoaXMub25QdWxsZG93blNlbGVjdCh2YWx1ZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvblB1bGxkb3duU2VsZWN0KC8qIHZhbHVlICovKSB7XG4gICAgICAvLyBOT1RFOiBUbyBiZSBvdmVycmlkZGVuLlxuICAgIH0sXG5cbiAgICBzZXRQdWxsZG93bk9wZW4ob3Blbikge1xuICAgICAgdGhpcy5wdWxsZG93bi5vcGVuID0gb3BlblxuICAgICAgdGhpcy5wdWxsZG93bi5zdGFydFRpbWUgPSBvcGVuID8gRGF0ZS5ub3coKSA6IDBcbiAgICAgIGlmIChvcGVuKSB7XG4gICAgICAgIHRoaXMucHVsbGRvd24uaGFuZGxlcnMgPSB0aGlzLmRvbU9uKGRvY3VtZW50LCB0aGlzLnB1bGxkb3duLmV2ZW50cylcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1hY2NvdW50XG4gIGEoXG4gICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bigpXCJcbiAgKVxuICAgIHNwYW4ge3sgdXNlci51c2VybmFtZSB9fVxuICB1bC5kaXRvLXB1bGxkb3duKDpjbGFzcz1cInsgJ2RpdG8tb3Blbic6IHB1bGxkb3duLm9wZW4gfVwiKVxuICAgIGxpKFxuICAgICAgdi1mb3I9XCIobGFiZWwsIHZhbHVlKSBvZiBpdGVtc1wiXG4gICAgKVxuICAgICAgYShcbiAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih2YWx1ZSlcIlxuICAgICAgICBAbW91c2V1cD1cIm9uUHVsbGRvd25Nb3VzZVVwKHZhbHVlKVwiXG4gICAgICApIHt7IGxhYmVsIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBQdWxsZG93bk1peGluIGZyb20gJy4uL21peGlucy9QdWxsZG93bk1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9BY2NvdW50Jywge1xuICBtaXhpbnM6IFtQdWxsZG93bk1peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpdGVtczoge1xuICAgICAgICBzZXR0aW5nczogJ1NldHRpbmdzJyxcbiAgICAgICAgbG9nb3V0OiAnTG9nb3V0J1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25QdWxsZG93blNlbGVjdCh2YWx1ZSkge1xuICAgICAgc3dpdGNoICh2YWx1ZSkge1xuICAgICAgICBjYXNlICdsb2dvdXQnOlxuICAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5sb2dvdXQoKVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3NldHRpbmdzJzpcbiAgICAgICAgICBjb25zb2xlLmluZm8oJ1RPRE86IEltcGxlbWVudCBTZXR0aW5ncycpXG4gICAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1hY2NvdW50IHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cbiAgLmRpdG8tcHVsbGRvd24ge1xuICAgIHRvcDogJHB1bGxkb3duLXBhZGRpbmctdmVyO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmNvbXBvbmVudChcbiAgdi1pZj1cIm9wdGlvbnM/LnRleHQgIT0gbnVsbFwiXG4gIDppcz1cInRhZ05hbWVcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbikge3sgb3B0aW9ucy50ZXh0IH19XG5jb21wb25lbnQoXG4gIHYtZWxzZS1pZj1cIm9wdGlvbnM/Lmh0bWwgIT0gbnVsbFwiXG4gIDppcz1cInRhZ05hbWVcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbiAgOnN0eWxlPVwic3R5bGVzXCJcbiAgdi1odG1sPVwib3B0aW9ucy5odG1sXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGlzU3RyaW5nLCBhc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRWxlbWVudCcsIHtcbiAgcHJvcHM6IHtcbiAgICB0YWc6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnc3BhbicgfSxcbiAgICBjb250ZW50OiB7IHR5cGU6IFtTdHJpbmcsIE9iamVjdF0sIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgb3B0aW9ucygpIHtcbiAgICAgIGNvbnN0IHsgY29udGVudCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGNvbnRlbnQgIT0gbnVsbFxuICAgICAgICA/IGlzT2JqZWN0KGNvbnRlbnQpXG4gICAgICAgICAgPyBjb250ZW50XG4gICAgICAgICAgOiB7IHRleHQ6IGNvbnRlbnQgfVxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgdGFnTmFtZSgpIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMudGFnIHx8IHRoaXMudGFnXG4gICAgfSxcblxuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5hc09iamVjdCh0aGlzLiRhdHRycy5jbGFzcyksXG4gICAgICAgIC4uLmFzT2JqZWN0KHRoaXMub3B0aW9ucy5jbGFzcylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3R5bGVzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uYXNPYmplY3QodGhpcy4kYXR0cnMuc3R5bGUpLFxuICAgICAgICAuLi5hc09iamVjdCh0aGlzLm9wdGlvbnMuc3R5bGUpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuXG5mdW5jdGlvbiBhc09iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gYXNBcnJheSh2YWx1ZSkucmVkdWNlKChvYmplY3QsIGVudHJ5KSA9PiB7XG4gICAgaWYgKGlzU3RyaW5nKGVudHJ5KSkge1xuICAgICAgb2JqZWN0W2VudHJ5XSA9IHRydWVcbiAgICB9IGVsc2UgaWYgKGlzT2JqZWN0KGVudHJ5KSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihvYmplY3QsIGVudHJ5KVxuICAgIH1cbiAgICByZXR1cm4gb2JqZWN0XG4gIH0sIHt9KVxufVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuY29tcG9uZW50LmRpdG8tbGFiZWwoXG4gIHYtaWY9XCJ0ZXh0IHx8IGNvbGxhcHNpYmxlXCJcbiAgOmlzPVwidGFnXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIDpjbGFzcz1cInsgJ2RpdG8tYWN0aXZlJzogaXNBY3RpdmUgfVwiXG4pXG4gIC5kaXRvLWNoZXZyb24oXG4gICAgdi1pZj1cImNvbGxhcHNpYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiAhY29sbGFwc2VkIH1cIlxuICApXG4gIC5kaXRvLWxhYmVsX19pbm5lcihcbiAgICB2LWlmPVwidGV4dCB8fCBwcmVmaXhlcy5sZW5ndGggPiAwIHx8IHN1ZmZpeGVzLmxlbmd0aCA+IDBcIlxuICApXG4gICAgRGl0b0VsZW1lbnQuZGl0by1sYWJlbF9fcHJlZml4KFxuICAgICAgdi1mb3I9XCIocHJlZml4LCBpbmRleCkgb2YgcHJlZml4ZXNcIlxuICAgICAgOmtleT1cImBwcmVmaXgtJHtpbmRleH1gXCJcbiAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgOmNvbnRlbnQ9XCJwcmVmaXhcIlxuICAgIClcbiAgICBsYWJlbChcbiAgICAgIHYtaWY9XCJ0ZXh0XCJcbiAgICAgIDpmb3I9XCJkYXRhUGF0aFwiXG4gICAgICB2LWh0bWw9XCJ0ZXh0XCJcbiAgICApXG4gICAgRGl0b0VsZW1lbnQuZGl0by1sYWJlbF9fc3VmZml4KFxuICAgICAgdi1mb3I9XCIoc3VmZml4LCBpbmRleCkgb2Ygc3VmZml4ZXNcIlxuICAgICAgOmtleT1cImBzdWZmaXgtJHtpbmRleH1gXCJcbiAgICAgIHRhZz1cInNwYW5cIlxuICAgICAgOmNvbnRlbnQ9XCJzdWZmaXhcIlxuICAgIClcbiAgICAuZGl0by1pbmZvKFxuICAgICAgdi1pZj1cImluZm9cIlxuICAgICAgOmRhdGEtaW5mbz1cImluZm9cIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNPYmplY3QsIGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9MYWJlbCcsIHtcbiAgZW1pdHM6IFsnb3BlbiddLFxuXG4gIHByb3BzOiB7XG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGNvbGxhcHNlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGNvbGxhcHNpYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaW5mbzogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgdGFnKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sbGFwc2libGUgPyAnYScgOiAnZGl2J1xuICAgIH0sXG5cbiAgICB0ZXh0KCkge1xuICAgICAgY29uc3QgeyBsYWJlbCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzT2JqZWN0KGxhYmVsKSA/IGxhYmVsPy50ZXh0IDogbGFiZWxcbiAgICB9LFxuXG4gICAgcHJlZml4ZXMoKSB7XG4gICAgICByZXR1cm4gYXNBcnJheSh0aGlzLmxhYmVsPy5wcmVmaXgpXG4gICAgfSxcblxuICAgIHN1ZmZpeGVzKCkge1xuICAgICAgcmV0dXJuIGFzQXJyYXkodGhpcy5sYWJlbD8uc3VmZml4KVxuICAgIH0sXG5cbiAgICBhdHRyaWJ1dGVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29sbGFwc2libGUgPyB7IG9uQ2xpY2s6IHRoaXMub25DbGljayB9IDoge31cbiAgICB9LFxuXG4gICAgaXNBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5hcHBTdGF0ZS5hY3RpdmVMYWJlbCA9PT0gdGhpc1xuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgb25DbGljaygpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUuYWN0aXZlTGFiZWwgPSB0aGlzXG4gICAgICB0aGlzLiRlbWl0KCdvcGVuJywgdGhpcy5jb2xsYXBzZWQpXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tbGFiZWwge1xuICAkc2VsZjogJjtcblxuICAvLyBGb3IgYnV0dG9ucyBhbmQgY2hldnJvbiB0byBhbGlnbiByaWdodDpcbiAgZGlzcGxheTogZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICAvLyBWZXJ0aWNhbGx5IGNlbnRlciBhbGwgaXRlbXMgaW4gdGhlIGxhYmVsLCBlLmcuIGNoZXZyb24sIGVkaXQtYnV0dG9ucy5cbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgbWluLWhlaWdodDogJGlucHV0LWhlaWdodDtcbiAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nLWhhbGY7IC8vIFdoZW4gaW5saW5lZC5cblxuICAmOmhhcyguZGl0by1zY2hlbWEtaGVhZGVyKSB7XG4gICAgLy8gVGhlIGNvbnRhaW5lcidzIGxhYmVsIGlzIHVzZWQgYXMgdGVsZXBvcnQgZm9yIGEgbmVzdGVkIHNlY3Rpb24gb3Igb2JqZWN0XG4gICAgLy8gbGFiZWwuIEhpZGUgYCZfX2lubmVyYCwgYXMgaXQgaXMgYmUgZHVwbGljYXRlZCBpbnNpZGUgdGhlIG5lc3RlZCBsYWJlbC5cbiAgICA+ICN7JHNlbGZ9X19pbm5lciB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cbiAgfVxuXG4gICY6bm90KDpoYXMoKyAuZGl0by10YWJzKSkge1xuICAgIC8vIFRha2UgZnVsbCB3aWR0aCBidXQgb25seSBpZiB0aGVyZSBhcmVuJ3QgYWxzbyB0YWJzIHRvIGJlIGNlbnRlcmVkLlxuICAgIGZsZXg6IDE7XG4gIH1cblxuICAmX19pbm5lciB7XG4gICAgZmxleDogMSAwIDAlO1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xuICB9XG5cbiAgbGFiZWwge1xuICAgIGN1cnNvcjogaW5oZXJpdDtcbiAgICBmb250LXdlaWdodDogYm9sZDtcbiAgfVxuXG4gIGxhYmVsLFxuICAmX19wcmVmaXgsXG4gICZfX3N1ZmZpeCB7XG4gICAgQGluY2x1ZGUgdXNlci1zZWxlY3Qobm9uZSk7XG4gICAgQGluY2x1ZGUgZWxsaXBzaXM7XG5cbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICAgIGxpbmUtaGVpZ2h0OiAkaW5wdXQtaGVpZ2h0O1xuICB9XG5cbiAgJl9fcHJlZml4ICsgbGFiZWwsXG4gIGxhYmVsICsgJl9fc3VmZml4IHtcbiAgICAmOjpiZWZvcmUge1xuICAgICAgY29udGVudDogJ1xcYTAnOyAvLyAmbmJzcDtcbiAgICB9XG4gIH1cblxuICAuZGl0by1idXR0b25zIHtcbiAgICAvLyBNb3ZlIHRoZSBsYWJlbCBwYWRkaW5nIGluc2lkZSAuZGl0by1idXR0b25zLCBzbyB0aGF0IGl0IGNhcHR1cmVzIGFsbFxuICAgIC8vIG5lYXIgbW91c2UgZXZlbnRzOlxuICAgIG1hcmdpbjogY2FsYygtMSAqIHZhcigtLWxhYmVsLXBhZGRpbmcpKTtcbiAgICBtYXJnaW4tbGVmdDogMDtcbiAgICBwYWRkaW5nOiB2YXIoLS1sYWJlbC1wYWRkaW5nKTtcbiAgfVxuXG4gICYuZGl0by13aWR0aC1maWxsIHtcbiAgICB3aWR0aDogMTAwJTtcblxuICAgIC8vIEluIG9yZGVyIGZvciBlbGxpcHNpcyB0byB3b3JrIG9uIGxhYmVscyB3aXRob3V0IGFmZmVjdGluZyBvdGhlciBsYXlvdXQsXG4gICAgLy8gd2UgbmVlZCB0byBwb3NpdGlvbiBpdCBhYnNvbHV0ZWx5IGluc2lkZSBpdHMgY29udGFpbmVyLiBCdXQgd2UgY2FuIG9ubHlcbiAgICAvLyBkbyBzbyBpZiB0aGVyZSBpcyd0IGFsc28gYSBjaGV2cm9uIG9yIG90aGVyIFVYIGVsZW1lbnRzIGJlc2lkZXMgaXQuXG4gICAgJjpoYXMoPiAjeyRzZWxmfV9faW5uZXI6b25seS1jaGlsZCkge1xuICAgICAgZmxleDogMTsgLy8gV2hlbiBpbiBgLmRpdG8tc2NoZW1hLWhlYWRlcmAuXG5cbiAgICAgID4gI3skc2VsZn1fX2lubmVyIHtcbiAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmOjphZnRlciB7XG4gICAgICAvLyBTaW5jZSA8bGFiZWw+IHVzZXMgYHBvc2l0aW9uOiBhYnNvbHV0ZWAsIHNldCBjb250ZW50IHRvIGEgemVyby13aWR0aFxuICAgICAgLy8gc3BhY2Ugb24gaXRzIHBhcmVudCB0byBlbmZvcmNlIHRoZSByaWdodCB0ZXh0IGhlaWdodCBpbiB0aGUgY29udGFpbmVyXG4gICAgICBjb250ZW50OiAnXFwyMDBiJzsgLy8gemVyby13aWR0aCBzcGFjZTtcbiAgICB9XG4gIH1cblxuICAuZGl0by1pbmZvIHtcbiAgICBtYXJnaW4tbGVmdDogMC4zNWVtO1xuICB9XG59XG5cbmEuZGl0by1sYWJlbCB7XG4gICY6aG92ZXIge1xuICAgIC5kaXRvLWNoZXZyb24ge1xuICAgICAgY29sb3I6ICRjb2xvci1kYXJrZXI7XG4gICAgfVxuICB9XG5cbiAgJjpmb2N1czpub3QoOmFjdGl2ZSwgLmRpdG8tYWN0aXZlKSB7XG4gICAgLmRpdG8tY2hldnJvbiB7XG4gICAgICAtd2Via2l0LXRleHQtc3Ryb2tlOiAkYm9yZGVyLXdpZHRoICRjb2xvci1hY3RpdmU7XG4gICAgfVxuICAgIC8vIERpc3BsYXkgbGFiZWxzIGluIGNvbXBhY3Qgc2NoZW1hIGFzIGlubGluZS1ibG9ja3MsIHRvIGFsbG93IGNvbXBhY3RcbiAgICAvLyBsYXlvdXRzIHdpdGggYHdpZHRoOiAnYXV0bydgIGVsZW1lbnRzOlxuICAgIC8vIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIGNvbnRyb2wgdGhpcyBiZWhhdmlvci5cbiAgfVxufVxuXG4uZGl0by1zY2hlbWEtY29tcGFjdCB7XG4gID4gLmRpdG8tc2NoZW1hLWNvbnRlbnQge1xuICAgID4gLmRpdG8tcGFuZSB7XG4gICAgICA+IC5kaXRvLWNvbnRhaW5lcjpub3QoLmRpdG8tY29udGFpbmVyLS1sYWJlbC12ZXJ0aWNhbCkge1xuICAgICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7XG4gIGdldEl0ZW1Gb3JtU2NoZW1hLFxuICBnZXRJdGVtSWQsXG4gIGdldEl0ZW1VaWQsXG4gIGlzTGlzdFNvdXJjZVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBpc09iamVjdCwgaXNTdHJpbmcsIGlzRnVuY3Rpb24gfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQge1xuICBtZXRob2RzOiB7XG4gICAgZ2V0SXRlbUZvcm1TY2hlbWEsXG5cbiAgICBnZXRJdGVtVWlkLFxuXG4gICAgZ2V0SXRlbUlkKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXggPSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudCAmJiBpbmRleCAhPT0gbnVsbFxuICAgICAgICA/IFN0cmluZyhpbmRleClcbiAgICAgICAgOiBnZXRJdGVtSWQoc291cmNlU2NoZW1hLCBpdGVtKVxuICAgIH0sXG5cbiAgICBnZXRJdGVtRGF0YVBhdGgoc291cmNlU2NoZW1hLCBpbmRleCkge1xuICAgICAgbGV0IHsgZGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGlmIChzb3VyY2VTY2hlbWEgIT09IHRoaXMuc2NoZW1hKSB7XG4gICAgICAgIGRhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgoZGF0YVBhdGgsIHNvdXJjZVNjaGVtYS5uYW1lKVxuICAgICAgfVxuICAgICAgaWYgKGluZGV4ICE9IG51bGwpIHtcbiAgICAgICAgZGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aChkYXRhUGF0aCwgaW5kZXgpXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgZ2V0SXRlbVN0b3JlKHNvdXJjZVNjaGVtYSwgaXRlbSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldENoaWxkU3RvcmUodGhpcy5nZXRJdGVtVWlkKHNvdXJjZVNjaGVtYSwgaXRlbSksIGluZGV4KVxuICAgIH0sXG5cbiAgICByZW1vdmVJdGVtU3RvcmUoc291cmNlU2NoZW1hLCBpdGVtLCBpbmRleCkge1xuICAgICAgdGhpcy5yZW1vdmVDaGlsZFN0b3JlKHRoaXMuZ2V0SXRlbVVpZChzb3VyY2VTY2hlbWEsIGl0ZW0pLCBpbmRleClcbiAgICB9LFxuXG4gICAgZmluZEl0ZW1JZEluZGV4KHNvdXJjZVNjaGVtYSwgZGF0YSwgaXRlbUlkKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXNUcmFuc2llbnRcbiAgICAgICAgPyAvLyBGb3IgdHJhbnNpZW50IGRhdGEsIHRoZSBpbmRleCBpcyB1c2VkIGFzIHRoZSBpZFxuICAgICAgICAgIGl0ZW1JZFxuICAgICAgICA6IGRhdGE/LmZpbmRJbmRleChcbiAgICAgICAgICAgIChpdGVtLCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgICB0aGlzLmdldEl0ZW1JZChzb3VyY2VTY2hlbWEsIGl0ZW0sIGluZGV4KSA9PT0gaXRlbUlkXG4gICAgICAgICAgICApXG4gICAgICAgICAgKVxuICAgICAgcmV0dXJuIGluZGV4ICE9PSAtMSA/IGluZGV4IDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRJdGVtTGFiZWwoc291cmNlU2NoZW1hLCBpdGVtLCB7XG4gICAgICBpbmRleCA9IG51bGwsXG4gICAgICBleHRlbmRlZCA9IGZhbHNlLFxuICAgICAgYXNPYmplY3QgPSBmYWxzZVxuICAgIH0gPSB7fSkge1xuICAgICAgY29uc3QgeyBpdGVtTGFiZWwgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKCFpdGVtIHx8ICFleHRlbmRlZCAmJiBpdGVtTGFiZWwgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIGxldCBkYXRhUGF0aFxuICAgICAgY29uc3QgZ2V0RGF0YVBhdGggPSAoKSA9PlxuICAgICAgICAoZGF0YVBhdGggfHw9IHRoaXMuZ2V0SXRlbURhdGFQYXRoKHNvdXJjZVNjaGVtYSwgaW5kZXgpKVxuXG4gICAgICBsZXQgZm9ybUxhYmVsXG4gICAgICBjb25zdCBnZXRGb3JtTGFiZWwgPSAoKSA9PlxuICAgICAgICAoZm9ybUxhYmVsIHx8PSB0aGlzLmdldExhYmVsKFxuICAgICAgICAgIGdldEl0ZW1Gb3JtU2NoZW1hKHNvdXJjZVNjaGVtYSwgaXRlbSwgdGhpcy5jb250ZXh0KVxuICAgICAgICApKVxuXG4gICAgICBsZXQgdGV4dFxuICAgICAgbGV0IHByZWZpeFxuICAgICAgbGV0IHN1ZmZpeFxuICAgICAgaWYgKGlzRnVuY3Rpb24oaXRlbUxhYmVsKSkge1xuICAgICAgICBjb25zdCBsYWJlbCA9IGl0ZW1MYWJlbC5jYWxsKFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgIG5lc3RlZDogZmFsc2UsXG4gICAgICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICAgICAgdmFsdWU6IGl0ZW0sXG4gICAgICAgICAgICBpbmRleCxcblxuICAgICAgICAgICAgZ2V0IGRhdGFQYXRoKCkge1xuICAgICAgICAgICAgICByZXR1cm4gZ2V0RGF0YVBhdGgoKVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgZ2V0IGZvcm1MYWJlbCgpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGdldEZvcm1MYWJlbCgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICBpZiAoaXNPYmplY3QobGFiZWwpKSB7XG4gICAgICAgICAgOyh7IHRleHQsIHByZWZpeCwgc3VmZml4IH0gPSBsYWJlbClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0ZXh0ID0gbGFiZWxcbiAgICAgICAgfVxuICAgICAgICAvLyBJdCdzIHVwIHRvIGBpdGVtTGFiZWwoKWAgZW50aXJlbHkgdG8gcHJvZHVjZSB0aGUgbGFiZWw6XG4gICAgICAgIGV4dGVuZGVkID0gZmFsc2VcbiAgICAgIH0gZWxzZSBpZiAoaXNTdHJpbmcoaXRlbUxhYmVsKSAmJiAhKGl0ZW1MYWJlbCBpbiBpdGVtKSkge1xuICAgICAgICAvLyBgaXRlbUxhYmVsYCBjYW4gYmUgYm90aCBhIGtleSwgb3Igc2ltcGx5IGEgbGFiZWwuXG4gICAgICAgIHRleHQgPSBpdGVtTGFiZWxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIExvb2sgdXAgdGhlIG5hbWUgb24gdGhlIGl0ZW0sIGJ5IHRoZXNlIHJ1bGVzOlxuICAgICAgICAvLyAxLiBJZiBgaXRlbUxhYmVsYCBpcyBhIHN0cmluZywgdXNlIGl0IGFzIHRoZSBwcm9wZXJ0eSBrZXlcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiB0aGVyZSBhcmUgY29sdW1ucywgdXNlIHRoZSB2YWx1ZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBzZWUgaWYgdGhlIGl0ZW0gaGFzIGEgcHJvcGVydHkgbmFtZWQgJ25hbWUnXG4gICAgICAgIGNvbnN0IHsgY29sdW1ucyB9ID0gc291cmNlU2NoZW1hXG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICBpc1N0cmluZyhpdGVtTGFiZWwpICYmIGl0ZW1MYWJlbCB8fFxuICAgICAgICAgIGlzTGlzdFNvdXJjZShzb3VyY2VTY2hlbWEpICYmIGNvbHVtbnMgJiYgT2JqZWN0LmtleXMoY29sdW1ucylbMF0gfHxcbiAgICAgICAgICAnbmFtZSdcbiAgICAgICAgKVxuICAgICAgICB0ZXh0ID0gaXRlbVtrZXldXG4gICAgICB9XG4gICAgICBjb25zdCBoYWRMYWJlbCA9ICEhdGV4dFxuICAgICAgLy8gSWYgbm8gbGFiZWwgd2FzIGZvdW5kIHNvIGZhciwgdHJ5IHRvIHByb2R1Y2Ugb25lIGZyb20gdGhlIGluZGV4LlxuICAgICAgaWYgKHRleHQgPT0gbnVsbCkge1xuICAgICAgICAvLyBBbHdheXMgdXNlIGV4dGVuZGVkIHN0eWxlIHdoZW4gYXV0by1nZW5lcmF0aW5nIGxhYmVscyBmcm9tIGluZGV4L2lkOlxuICAgICAgICBleHRlbmRlZCA9IHRydWVcbiAgICAgICAgdGV4dCA9XG4gICAgICAgICAgaXNMaXN0U291cmNlKHNvdXJjZVNjaGVtYSkgJiYgaW5kZXggIT09IG51bGxcbiAgICAgICAgICAgID8gKHRleHQgPSBgJHtpbmRleCArIDF9YClcbiAgICAgICAgICAgIDogJydcbiAgICAgIH1cbiAgICAgIGlmIChleHRlbmRlZCkge1xuICAgICAgICBjb25zdCBmb3JtTGFiZWwgPSBnZXRGb3JtTGFiZWwoKVxuICAgICAgICBpZiAoZm9ybUxhYmVsKSB7XG4gICAgICAgICAgLy8gSWYgYSBsYWJlbCB3YXMgcHJvdmlkZWQsIHB1dCBpbiBxdW90ZXMgd2hlbiBwcmVmaXhlZCB3aXRoIHRoZVxuICAgICAgICAgIC8vIGZvcm0gbGFiZWwgZm9yIHRoZSBleHRlbmRlZCBzdHlsZTpcbiAgICAgICAgICB0ZXh0ID0gYCR7Zm9ybUxhYmVsfSAke2hhZExhYmVsID8gYCcke3RleHR9J2AgOiB0ZXh0fWBcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFzT2JqZWN0XG4gICAgICAgID8gdGV4dCB8fCBwcmVmaXggfHwgc3VmZml4XG4gICAgICAgICAgPyB7IHRleHQsIHByZWZpeCwgc3VmZml4IH1cbiAgICAgICAgICA6IG51bGxcbiAgICAgICAgOiB0ZXh0XG4gICAgfVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuc2xvdChuYW1lPVwiYmVmb3JlXCIpXG4uZGl0by1zY2hlbWEoXG4gIDpjbGFzcz1cInsgJ2RpdG8tc2Nyb2xsLXBhcmVudCc6IHNjcm9sbGFibGUsICdkaXRvLXNjaGVtYS0tb3Blbic6IG9wZW5lZCB9XCJcbiAgdi1iaW5kPVwiJGF0dHJzXCJcbilcbiAgVGVsZXBvcnQoXG4gICAgdi1pZj1cImlzUG9wdWxhdGVkICYmIHBhbmVsRW50cmllcy5sZW5ndGggPiAwXCJcbiAgICB0bz1cIi5kaXRvLXNpZGViYXJfX3RlbGVwb3J0XCJcbiAgKVxuICAgIERpdG9QYW5lbHMoXG4gICAgICA6cGFuZWxzPVwicGFuZWxFbnRyaWVzXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIClcbiAgVGVsZXBvcnQoXG4gICAgdi1pZj1cImhhc0hlYWRlclwiXG4gICAgOnRvPVwiaGVhZGVyVGVsZXBvcnRcIlxuICAgIDpkaXNhYmxlZD1cIiFoZWFkZXJUZWxlcG9ydFwiXG4gIClcbiAgICAuZGl0by1zY2hlbWEtaGVhZGVyXG4gICAgICBEaXRvTGFiZWwoXG4gICAgICAgIHYtaWY9XCJoYXNMYWJlbFwiXG4gICAgICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgICAgIDpjb2xsYXBzZWQ9XCIhb3BlbmVkXCJcbiAgICAgICAgQG9wZW49XCJvbk9wZW5cIlxuICAgICAgKVxuICAgICAgVHJhbnNpdGlvbihcbiAgICAgICAgdi1pZj1cInRhYnNcIlxuICAgICAgICBuYW1lPVwiZGl0by1mYWRlXCJcbiAgICAgIClcbiAgICAgICAgRGl0b1RhYnMoXG4gICAgICAgICAgdi1pZj1cIm9wZW5lZFwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVGFiXCJcbiAgICAgICAgICA6dGFicz1cInRhYnNcIlxuICAgICAgICApXG4gICAgICBEaXRvQ2xpcGJvYXJkKFxuICAgICAgICB2LWlmPVwiY2xpcGJvYXJkXCJcbiAgICAgICAgOmNsaXBib2FyZD1cImNsaXBib2FyZFwiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICApXG4gICAgICBzbG90KG5hbWU9XCJlZGl0LWJ1dHRvbnNcIilcbiAgVHJhbnNpdGlvbkhlaWdodCg6ZW5hYmxlZD1cImlubGluZWRcIilcbiAgICAuZGl0by1zY2hlbWEtY29udGVudChcbiAgICAgIHYtaWY9XCJvcGVuZWRcIlxuICAgICAgcmVmPVwiY29udGVudFwiXG4gICAgICA6Y2xhc3M9XCJ7ICdkaXRvLXNjcm9sbCc6IHNjcm9sbGFibGUgfVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJoYXNUYWJzXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1mb3I9XCIodGFiU2NoZW1hLCB0YWIpIGluIHRhYnNcIlxuICAgICAgICAgIDprZXk9XCJ0YWJcIlxuICAgICAgICApXG4gICAgICAgICAgLy8tIFRPRE86IFN3aXRjaCB0byB2LWlmIGluc3RlYWQgb2Ygdi1zaG93LCBvbmNlIHZhbGlkYXRpb24gaXNcbiAgICAgICAgICAvLy0gZGVjb3VwbGVkIGZyb20gY29tcG9uZW50cy5cbiAgICAgICAgICBEaXRvUGFuZS5kaXRvLXBhbmVfX3RhYihcbiAgICAgICAgICAgIHYtc2hvdz1cInNlbGVjdGVkVGFiID09PSB0YWJcIlxuICAgICAgICAgICAgcmVmPVwidGFic1wiXG4gICAgICAgICAgICA6dGFiPVwidGFiXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJ0YWJTY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgICA6cGFkZGluZz1cInBhZGRpbmdcIlxuICAgICAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNNYWluUGFuZVwiXG4gICAgICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICAgICAgICA6YWNjdW11bGF0ZWRCYXNpcz1cImFjY3VtdWxhdGVkQmFzaXNcIlxuICAgICAgICAgIClcbiAgICAgIERpdG9QYW5lLmRpdG8tcGFuZV9fbWFpbihcbiAgICAgICAgdi1pZj1cImhhc01haW5QYW5lXCJcbiAgICAgICAgcmVmPVwiY29tcG9uZW50c1wiXG4gICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgOnBhZGRpbmc9XCJwYWRkaW5nXCJcbiAgICAgICAgOnNpbmdsZT1cIiFpbmxpbmVkICYmICFoYXNUYWJzXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICA6Z2VuZXJhdGVMYWJlbHM9XCJnZW5lcmF0ZUxhYmVsc1wiXG4gICAgICAgIDphY2N1bXVsYXRlZEJhc2lzPVwiYWNjdW11bGF0ZWRCYXNpc1wiXG4gICAgICApXG4gICAgICBzbG90KFxuICAgICAgICB2LWlmPVwiIWlubGluZWQgJiYgaXNQb3B1bGF0ZWRcIlxuICAgICAgICBuYW1lPVwiYnV0dG9uc1wiXG4gICAgICApXG4gIHNsb3QoXG4gICAgdi1pZj1cImlubGluZWQgJiYgIWhhc0hlYWRlclwiXG4gICAgbmFtZT1cImVkaXQtYnV0dG9uc1wiXG4gIClcbnNsb3QobmFtZT1cImFmdGVyXCIpXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHtcbiAgaXNPYmplY3QsXG4gIGlzQXJyYXksXG4gIGlzRnVuY3Rpb24sXG4gIGlzUmVnRXhwLFxuICBlcXVhbHMsXG4gIHBhcnNlRGF0YVBhdGgsXG4gIG5vcm1hbGl6ZURhdGFQYXRoLFxuICBsYWJlbGl6ZVxufSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgVHJhbnNpdGlvbkhlaWdodCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0l0ZW1NaXhpbi5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoLCBnZXRQYXJlbnRJdGVtIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7XG4gIGdldE5hbWVkU2NoZW1hcyxcbiAgZ2V0UGFuZWxFbnRyaWVzLFxuICBzZXREZWZhdWx0VmFsdWVzLFxuICBwcm9jZXNzRGF0YVxufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciwgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9TY2hlbWEnLCB7XG4gIG1peGluczogW0l0ZW1NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVHJhbnNpdGlvbkhlaWdodCB9LFxuICBpbmhlcml0QXR0cnM6IGZhbHNlLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzY2hlbWFDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgaW5qZWN0OiBbXG4gICAgJyRzY2hlbWFQYXJlbnRDb21wb25lbnQnXG4gIF0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhZGRpbmc6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgaW5saW5lZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2VkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgY29sbGFwc2libGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBzY3JvbGxhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgaGFzT3duRGF0YTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGdlbmVyYXRlTGFiZWxzOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgbGFiZWxOb2RlOiB7IHR5cGU6IEhUTUxFbGVtZW50LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDEgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgY29uc3QgeyBkYXRhIH0gPSB0aGlzLnNjaGVtYVxuICAgIHJldHVybiB7XG4gICAgICAvLyBBbGxvdyBzY2hlbWEgdG8gcHJvdmlkZSBtb3JlIGRhdGEgdGhyb3VnaCBgc2NoZW1hLmRhdGFgLCB2dWUtc3R5bGU6XG4gICAgICAuLi4oXG4gICAgICAgIGRhdGEgJiYgaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICAgID8gZGF0YSh0aGlzLmNvbnRleHQpXG4gICAgICAgICAgOiBkYXRhXG4gICAgICApLFxuICAgICAgY3VycmVudFRhYjogbnVsbCxcbiAgICAgIGNvbXBvbmVudHNSZWdpc3RyeToge30sXG4gICAgICBwYW5lc1JlZ2lzdHJ5OiB7fSxcbiAgICAgIHBhbmVsc1JlZ2lzdHJ5OiB7fVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNjaGVtYUNvbXBvbmVudCgpIHtcbiAgICAgIC8vIE92ZXJyaWRlIERpdG9NaXhpbidzIHNjaGVtYUNvbXBvbmVudCgpIHdoaWNoIHVzZXMgdGhlIGluamVjdGVkIHZhbHVlLlxuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcGFyZW50U2NoZW1hQ29tcG9uZW50KCkge1xuICAgICAgLy8gRG9uJ3QgcmV0dXJuIHRoZSBhY3R1YWwgcGFyZW50IHNjaGVtYSBpcyB0aGlzIHNjaGVtYSBoYW5kbGVzIGl0cyBvd25cbiAgICAgIC8vIGRhdGEuIFRoaXMgcHJldmVudHMgZGVsZWdhdGluZyBldmVudHMgdG8gdGhlIHBhcmVudCwgYW5kIHJlZ2lzdGVyaW5nXG4gICAgICAvLyBjb21wb25lbnRzIHdpdGggdGhlIHBhcmVudCB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIHNldCBpc0RpcnR5IGZsYWdzLlxuICAgICAgcmV0dXJuIHRoaXMuaGFzT3duRGF0YSA/IG51bGwgOiB0aGlzLnBhcmVudENvbXBvbmVudC5zY2hlbWFDb21wb25lbnRcbiAgICB9LFxuXG4gICAgcGFuZWxFbnRyaWVzKCkge1xuICAgICAgcmV0dXJuIGdldFBhbmVsRW50cmllcyh0aGlzLnNjaGVtYS5wYW5lbHMsICcnKVxuICAgIH0sXG5cbiAgICB0YWJzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS50YWJzKVxuICAgIH0sXG5cbiAgICBzZWxlY3RlZFRhYjoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VGFiIHx8IHRoaXMuZGVmYXVsdFRhYiB8fCBudWxsXG4gICAgICB9LFxuXG4gICAgICBzZXQoc2VsZWN0ZWRUYWIpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50VGFiID0gc2VsZWN0ZWRUYWJcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZGVmYXVsdFRhYigpIHtcbiAgICAgIGxldCBmaXJzdCA9IG51bGxcbiAgICAgIGlmICh0aGlzLnRhYnMpIHtcbiAgICAgICAgY29uc3QgdGFicyA9IE9iamVjdC52YWx1ZXModGhpcy50YWJzKS5maWx0ZXIodGhpcy5zaG91bGRSZW5kZXJTY2hlbWEpXG4gICAgICAgIGZvciAoY29uc3QgeyBuYW1lLCBkZWZhdWx0VGFiIH0gb2YgdGFicykge1xuICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKGRlZmF1bHRUYWIpID8gZGVmYXVsdFRhYih0aGlzLmNvbnRleHQpIDogZGVmYXVsdFRhYikge1xuICAgICAgICAgICAgcmV0dXJuIG5hbWVcbiAgICAgICAgICB9XG4gICAgICAgICAgZmlyc3QgPz89IG5hbWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZpcnN0XG4gICAgfSxcblxuICAgIGNsaXBib2FyZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYT8uY2xpcGJvYXJkID8/IG51bGxcbiAgICB9LFxuXG4gICAgaGFzSGVhZGVyKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFzTGFiZWwgfHwgdGhpcy5oYXNUYWJzIHx8ICEhdGhpcy5jbGlwYm9hcmRcbiAgICB9LFxuXG4gICAgaGVhZGVyVGVsZXBvcnQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1Jvb3RTY2hlbWFcbiAgICAgICAgPyAnLmRpdG8taGVhZGVyX190ZWxlcG9ydCdcbiAgICAgICAgOiB0aGlzLmxhYmVsTm9kZVxuICAgIH0sXG5cbiAgICBwYXJlbnREYXRhKCkge1xuICAgICAgY29uc3QgZGF0YSA9IGdldFBhcmVudEl0ZW0odGhpcy5yb290RGF0YSwgdGhpcy5kYXRhUGF0aCwgZmFsc2UpXG4gICAgICByZXR1cm4gZGF0YSAhPT0gdGhpcy5kYXRhID8gZGF0YSA6IG51bGxcbiAgICB9LFxuXG4gICAgcHJvY2Vzc2VkRGF0YSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnc2VydmVyJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgIH0sXG5cbiAgICBjbGlwYm9hcmREYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3NEYXRhKHsgdGFyZ2V0OiAnY2xpcGJvYXJkJywgc2NoZW1hT25seTogdHJ1ZSB9KVxuICAgICAgfSxcblxuICAgICAgc2V0KGRhdGEpIHtcbiAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhcmUgc2ltaWxhciB0byBgRGl0b0NvbnRleHRgXG4gICAgLy8gcHJvcGVydGllcywgc28gdGhhdCB3ZSBjYW4gYWNjZXNzIHRoZXNlIG9uIGB0aGlzYCBhcyB3ZWxsOlxuICAgIC8vIE5PVEU6IFdoaWxlIGludGVybmFsbHksIHdlIHNwZWFrIG9mIGBkYXRhYCwgaW4gdGhlIEFQSSBzdXJmYWNlIHRoZVxuICAgIC8vIHRlcm0gYGl0ZW1gIGlzIHVzZWQgZm9yIHRoZSBkYXRhIHRoYXQgcmVsYXRlcyB0byBlZGl0aW5nIG9iamVjdHMuXG4gICAgLy8gTk9URTogVGhpcyBzaG91bGQgYWx3YXlzIHJldHVybiB0aGUgc2FtZSBhczpcbiAgICAvLyByZXR1cm4gZ2V0SXRlbSh0aGlzLnJvb3REYXRhLCB0aGlzLmRhdGFQYXRoLCBmYWxzZSlcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBwYXJlbnRJdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFyZW50RGF0YVxuICAgIH0sXG5cbiAgICByb290SXRlbSgpIHtcbiAgICAgIHJldHVybiB0aGlzLnJvb3REYXRhXG4gICAgfSxcblxuICAgIHByb2Nlc3NlZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5wcm9jZXNzZWREYXRhXG4gICAgfSxcblxuICAgIGNsaXBib2FyZEl0ZW0oKSB7XG4gICAgICByZXR1cm4gdGhpcy5jbGlwYm9hcmREYXRhXG4gICAgfSxcblxuICAgIGZvcm1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldExhYmVsKFxuICAgICAgICB0aGlzLmdldEl0ZW1Gb3JtU2NoZW1hKHRoaXMuc291cmNlU2NoZW1hLCB0aGlzLmRhdGEsIHRoaXMuY29udGV4dClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNSb290U2NoZW1hKCkge1xuICAgICAgLy8gU2VjdGlvbiBzY2hlbWFzIGNhbiBzaGFyZSB0aGUgcm9vdCBkYXRhUGF0aCBidXQgdGhleSBhcmUgaW5saW5lZC5cbiAgICAgIHJldHVybiB0aGlzLmRhdGFQYXRoID09PSAnJyAmJiAhdGhpcy5pbmxpbmVkXG4gICAgfSxcblxuICAgIGlzRGlydHkoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb21lQ29tcG9uZW50KGl0ID0+IGl0LmlzRGlydHkpXG4gICAgfSxcblxuICAgIGlzVG91Y2hlZCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnNvbWVDb21wb25lbnQoaXQgPT4gaXQuaXNUb3VjaGVkKVxuICAgIH0sXG5cbiAgICBpc1ZhbGlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZXZlcnlDb21wb25lbnQoaXQgPT4gaXQuaXNWYWxpZClcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0ZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5ldmVyeUNvbXBvbmVudChpdCA9PiBpdC5pc1ZhbGlkYXRlZClcbiAgICB9LFxuXG4gICAgaGFzRXJyb3JzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc29tZUNvbXBvbmVudChpdCA9PiBpdC5oYXNFcnJvcnMpXG4gICAgfSxcblxuICAgIGhhc0RhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmxhYmVsIHx8IHRoaXMuY29sbGFwc2libGVcbiAgICB9LFxuXG4gICAgaGFzVGFicygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudGFic1xuICAgIH0sXG5cbiAgICBoYXNNYWluVGFicygpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc1RhYnMgJiYgdGhpcy5pc1Jvb3RTY2hlbWFcbiAgICB9LFxuXG4gICAgaGFzTWFpblBhbmUoKSB7XG4gICAgICBjb25zdCB7IGNvbXBvbmVudHMgfSA9IHRoaXMuc2NoZW1hXG4gICAgICByZXR1cm4gISFjb21wb25lbnRzICYmIE9iamVjdC5rZXlzKGNvbXBvbmVudHMpLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgb3BlbmVkOiBnZXRTdG9yZUFjY2Vzc29yKCdvcGVuZWQnLCB7XG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gIXRoaXMuY29sbGFwc2VkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnRzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzKCkge1xuICAgICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHMoKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5jb21wb25lbnRzUmVnaXN0cnkpXG4gICAgfSxcblxuICAgIHBhbmVzQnlEYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9saXN0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICBwYW5lbHNCeURhdGFQYXRoKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2xpc3RFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLnBhbmVsc1JlZ2lzdHJ5KVxuICAgIH0sXG5cbiAgICB3aWRlOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAnJHJvdXRlLmhhc2gnOiB7XG4gICAgICBpbW1lZGlhdGU6IHRydWUsXG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMzM5MyNpc3N1ZWNvbW1lbnQtMTE1ODQ3MDE0OVxuICAgICAgZmx1c2g6ICdwb3N0JyxcbiAgICAgIGhhbmRsZXIoaGFzaCkge1xuICAgICAgICAvLyBSZW1lbWJlciB0aGUgY3VycmVudCBwYXRoIHRvIGtub3cgaWYgdGFiIGNoYW5nZXMgc2hvdWxkIHN0aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQsIGJ1dCByZW1vdmUgdGhlIHRyYWlsaW5nIGAvY3JlYXRlYCBvciBgLzppZGAgZnJvbSBpdCBzbyB0aGF0XG4gICAgICAgIC8vIHRhYnMgaW5mb3JtcyB0aGF0IHN0YXkgb3BlbiBhZnRlciBjcmVhdGlvbiBzdGlsbCB3b3JrLlxuICAgICAgICBpZiAodGhpcy5oYXNNYWluVGFicykge1xuICAgICAgICAgIHRoaXMuY3VycmVudFRhYiA9IGhhc2g/LnNsaWNlKDEpIHx8IG51bGxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAnc2VsZWN0ZWRUYWInKHNlbGVjdGVkVGFiKSB7XG4gICAgICBpZiAodGhpcy5oYXNNYWluVGFicykge1xuICAgICAgICBjb25zdCB0YWIgPSB0aGlzLnNob3VsZFJlbmRlclNjaGVtYSh0aGlzLnRhYnNbc2VsZWN0ZWRUYWJdKVxuICAgICAgICAgID8gc2VsZWN0ZWRUYWJcbiAgICAgICAgICA6IHRoaXMuZGVmYXVsdFRhYlxuICAgICAgICB0aGlzLiRyb3V0ZXIucmVwbGFjZSh7IGhhc2g6IHRhYiA/IGAjJHt0YWJ9YCA6IG51bGwgfSlcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmhhc0Vycm9ycykge1xuICAgICAgICB0aGlzLnJlcG9zaXRpb25FcnJvcnMoKVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgdGhpcy5zZXR1cFNjaGVtYUZpZWxkcygpXG4gICAgLy8gRGVsZWdhdGUgY2hhbmdlIGV2ZW50cyB0aHJvdWdoIHRvIHBhcmVudCBzY2hlbWE6XG4gICAgdGhpcy5kZWxlZ2F0ZSgnY2hhbmdlJywgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQpXG4gICAgdGhpcy5lbWl0RXZlbnQoJ2luaXRpYWxpemUnKSAvLyBOb3QgYCdjcmVhdGUnYCwgc2luY2UgdGhhdCdzIGZvciBkYXRhLlxuICAgIGlmICh0aGlzLnNjcm9sbGFibGUgJiYgdGhpcy53aWRlKSB7XG4gICAgICB0aGlzLmFwcFN0YXRlLnBhZ2VDbGFzcyA9ICdkaXRvLXBhZ2UtLXdpZGUnXG4gICAgfVxuICB9LFxuXG4gIHVubW91bnRlZCgpIHtcbiAgICB0aGlzLmVtaXRFdmVudCgnZGVzdHJveScpXG4gICAgdGhpcy5fcmVnaXN0ZXIoZmFsc2UpXG4gICAgaWYgKHRoaXMuc2Nyb2xsYWJsZSAmJiB0aGlzLndpZGUpIHtcbiAgICAgIHRoaXMuYXBwU3RhdGUucGFnZUNsYXNzID0gbnVsbFxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiB0aGlzLl9nZXRFbnRyaWVzQnlEYXRhUGF0aCh0aGlzLmNvbXBvbmVudHNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50QnlEYXRhUGF0aChkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50c0J5TmFtZShkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXNCeU5hbWUodGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGgpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudEJ5TmFtZShuYW1lKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpWzBdIHx8IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5jb21wb25lbnRzQnlEYXRhUGF0aCwgZGF0YVBhdGhPck5hbWUpXG4gICAgfSxcblxuICAgIGdldENvbXBvbmVudChkYXRhUGF0aE9yTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0Q29tcG9uZW50cyhkYXRhUGF0aE9yTmFtZSlbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBnZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0RW50cmllc0J5RGF0YVBhdGgodGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWxCeURhdGFQYXRoKGRhdGFQYXRoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRQYW5lbHNCeURhdGFQYXRoKGRhdGFQYXRoKVswXSB8fCBudWxsXG4gICAgfSxcblxuICAgIGdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldEVudHJpZXModGhpcy5wYW5lbHNCeURhdGFQYXRoLCBkYXRhUGF0aE9yTmFtZSlcbiAgICB9LFxuXG4gICAgZ2V0UGFuZWwoZGF0YVBhdGhPck5hbWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFBhbmVscyhkYXRhUGF0aE9yTmFtZSlbMF0gfHwgbnVsbFxuICAgIH0sXG5cbiAgICBzb21lQ29tcG9uZW50KGNhbGxiYWNrKSB7XG4gICAgICByZXR1cm4gdGhpcy5pc1BvcHVsYXRlZCAmJiB0aGlzLmNvbXBvbmVudHMuc29tZShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgZXZlcnlDb21wb25lbnQoY2FsbGJhY2spIHtcbiAgICAgIHJldHVybiB0aGlzLmlzUG9wdWxhdGVkICYmIHRoaXMuY29tcG9uZW50cy5ldmVyeShjYWxsYmFjaylcbiAgICB9LFxuXG4gICAgb25PcGVuKG9wZW4pIHtcbiAgICAgIHRoaXMuZW1pdEV2ZW50KCdvcGVuJywgeyBjb250ZXh0OiB7IG9wZW4gfSB9KVxuICAgICAgLy8gUHJldmVudCBjbG9zaW5nIHRoZSBzY2hlbWEgd2l0aCBpbnZhbGlkIGRhdGEsIHNpbmNlIHRoZSBpbi1jb21wb25lbnRcbiAgICAgIC8vIHZhbGlkYXRpb24gd2lsbCBub3QgYmUgZXhlY3V0ZWQgb25jZSBpdCdzIGNsb3NlZC5cblxuICAgICAgLy8gVE9ETzogTW92ZSB2YWxpZGF0aW9uIG91dCBvZiBjb21wb25lbnRzLCB0byBzY2hlbWEsIGp1c3QgbGlrZVxuICAgICAgLy8gcHJvY2Vzc2luZywgYW5kIHVzZSBgc2hvd1ZhbGlkYXRpb25FcnJvcnMoKWAgZm9yIHRoZSByZXN1bHRpbmcgZXJyb3JzLFxuICAgICAgLy8gdGhlbiByZW1vdmUgdGhpcyByZXF1aXJlbWVudCwgc2luY2Ugd2UgY2FuIHZhbGlkYXRlIGNsb3NlZCBmb3JtcyBhbmRcbiAgICAgIC8vIHNjaGVtYXMgdGhlbi5cbiAgICAgIGlmICghdGhpcy5vcGVuZWQgfHwgb3BlbiB8fCB0aGlzLnZhbGlkYXRlQWxsKCkpIHtcbiAgICAgICAgdGhpcy5vcGVuZWQgPSBvcGVuXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5lbWl0RXZlbnQoJ2NoYW5nZScpXG4gICAgfSxcblxuICAgIHJlc2V0VmFsaWRhdGlvbigpIHtcbiAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIHRoaXMuY29tcG9uZW50cykge1xuICAgICAgICBjb21wb25lbnQucmVzZXRWYWxpZGF0aW9uKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJFcnJvcnMoKSB7XG4gICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmNvbXBvbmVudHMpIHtcbiAgICAgICAgY29tcG9uZW50LmNsZWFyRXJyb3JzKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVwb3NpdGlvbkVycm9ycygpIHtcbiAgICAgIC8vIEZpcmUgYSBmYWtlIHNjcm9sbCBldmVudCB0byBmb3JjZSB0aGUgcmVwb3NpdGlvbmluZyBvZiBlcnJvciB0b29sdGlwcyxcbiAgICAgIC8vIGFzIG90aGVyd2lzZSB0aGV5IHNvbWV0aW1lcyBkb24ndCBzaG93IHVwIGluIHRoZSByaWdodCBwbGFjZSBpbml0aWFsbHlcbiAgICAgIC8vIHdoZW4gY2hhbmdpbmcgdGFicy5cbiAgICAgIGNvbnN0IHNjcm9sbENvbnRhaW5lciA9IHRoaXMuJHJlZnMuY29udGVudC5jbG9zZXN0KCcuZGl0by1zY3JvbGwnKVxuICAgICAgY29uc3QgZGlzcGF0Y2ggPSAoKSA9PiBzY3JvbGxDb250YWluZXIuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoJ3Njcm9sbCcpKVxuICAgICAgZGlzcGF0Y2goKVxuICAgICAgLy8gVGhpcyBpcyByZXF1aXJlZCB0byBoYW5kbGUgYCYtLWxhYmVsLXZlcnRpY2FsYCBiYXNlZCBsYXlvdXQgY2hhbmdlcy5cbiAgICAgIHNldFRpbWVvdXQoZGlzcGF0Y2gsIDApXG4gICAgfSxcblxuICAgIGZvY3VzKCkge1xuICAgICAgdGhpcy5vcGVuZWQgPSB0cnVlXG4gICAgICByZXR1cm4gdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/LmZvY3VzKClcbiAgICB9LFxuXG4gICAgdmFsaWRhdGVBbGwobWF0Y2gsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgIGNvbnN0IHsgY29tcG9uZW50c0J5RGF0YVBhdGggfSA9IHRoaXNcbiAgICAgIGxldCBkYXRhUGF0aHNcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBjb25zdCBjaGVjayA9IGlzRnVuY3Rpb24obWF0Y2gpXG4gICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgIDogaXNSZWdFeHAobWF0Y2gpXG4gICAgICAgICAgICA/IGZpZWxkID0+IG1hdGNoLnRlc3QoZmllbGQpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgICAgZGF0YVBhdGhzID0gY2hlY2tcbiAgICAgICAgICA/IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKS5maWx0ZXIoY2hlY2spXG4gICAgICAgICAgOiBpc0FycmF5KG1hdGNoKVxuICAgICAgICAgICAgPyBtYXRjaFxuICAgICAgICAgICAgOiBbbWF0Y2hdXG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5KSB7XG4gICAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgICAgfVxuICAgICAgbGV0IGlzVmFsaWQgPSB0cnVlXG4gICAgICBsZXQgZmlyc3QgPSB0cnVlXG4gICAgICBkYXRhUGF0aHMgfHw9IE9iamVjdC5rZXlzKGNvbXBvbmVudHNCeURhdGFQYXRoKVxuICAgICAgZm9yIChjb25zdCBkYXRhUGF0aCBvZiBkYXRhUGF0aHMpIHtcbiAgICAgICAgY29uc3QgY29tcG9uZW50cyA9IHRoaXMuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIGZvciAoY29uc3QgY29tcG9uZW50IG9mIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBpZiAoIWNvbXBvbmVudC52YWxpZGF0ZShub3RpZnkpKSB7XG4gICAgICAgICAgICAvLyBGb2N1cyBmaXJzdCBlcnJvciBmaWVsZFxuICAgICAgICAgICAgaWYgKG5vdGlmeSAmJiBmaXJzdCkge1xuICAgICAgICAgICAgICBjb21wb25lbnQuc2Nyb2xsSW50b1ZpZXcoKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAobm90aWZ5ICYmICFpc1ZhbGlkKSB7XG4gICAgICAgIHRoaXMubm90aWZ5RXJyb3JzKClcbiAgICAgIH1cbiAgICAgIHJldHVybiBpc1ZhbGlkXG4gICAgfSxcblxuICAgIHZlcmlmeUFsbChtYXRjaCkge1xuICAgICAgcmV0dXJuIHRoaXMudmFsaWRhdGVBbGwobWF0Y2gsIGZhbHNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBzaG93VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMsIGZvY3VzKSB7XG4gICAgICB0aGlzLmNsZWFyRXJyb3JzKClcbiAgICAgIGxldCBmaXJzdCA9IHRydWVcbiAgICAgIGNvbnN0IHVubWF0Y2hlZCA9IFtdXG4gICAgICBmb3IgKGNvbnN0IFtkYXRhUGF0aCwgZXJyc10gb2YgT2JqZWN0LmVudHJpZXMoZXJyb3JzKSkge1xuICAgICAgICAvLyBJZiB0aGUgc2NoZW1hIGlzIGEgZGF0YS1yb290LCBwcmVmaXggaXRzIG93biBkYXRhUGF0aCB0byBhbGwgZXJyb3JzLFxuICAgICAgICAvLyBzaW5jZSB0aGUgZGF0YSB0aGF0IGl0IHNlbmRzIGFuZCB2YWxpZGF0ZXMgd2lsbCBiZSB1bnByZWZpeGVkLlxuICAgICAgICBjb25zdCBmdWxsRGF0YVBhdGggPSB0aGlzLmhhc093bkRhdGFcbiAgICAgICAgICA/IGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGRhdGFQYXRoKVxuICAgICAgICAgIDogZGF0YVBhdGhcbiAgICAgICAgLy8gY29uc29sZS5sb2codGhpcywgdGhpcy5kYXRhUGF0aCwgdGhpcy5oYXNPd25EYXRhLCBmdWxsRGF0YVBhdGgpXG4gICAgICAgIC8vIENvbnZlcnQgZnJvbSBKYXZhU2NyaXB0IHByb3BlcnR5IGFjY2VzcyBub3RhdGlvbiwgdG8gb3VyIG93biBmb3JtXG4gICAgICAgIC8vIG9mIHJlbGF0aXZlIEpTT04gcG9pbnRlcnMgYXMgZGF0YS1wYXRoczpcbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZnVsbERhdGFQYXRoKVxuICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7XG4gICAgICAgICAgaWYgKGNvbXBvbmVudC5zaG93VmFsaWRhdGlvbkVycm9ycyhlcnJzLCBmaXJzdCAmJiBmb2N1cykpIHtcbiAgICAgICAgICAgIGZvdW5kID0gdHJ1ZVxuICAgICAgICAgICAgZmlyc3QgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZvdW5kKSB7XG4gICAgICAgICAgLy8gQ291bGRuJ3QgZmluZCBhIGNvbXBvbmVudCBpbiBhbiBhY3RpdmUgZm9ybSBmb3IgdGhlIGdpdmVuIGRhdGFQYXRoLlxuICAgICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIGNvbXBvbmVudCBzZXJ2aW5nIGEgcGFydCBvZiB0aGUgZGF0YVBhdGgsXG4gICAgICAgICAgLy8gYW5kIHRha2UgaXQgZnJvbSB0aGVyZTpcbiAgICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IGRhdGFQYXRoUGFydHMucG9wKClcbiAgICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlEYXRhUGF0aChkYXRhUGF0aFBhcnRzKVxuICAgICAgICAgICAgZm9yIChjb25zdCBjb21wb25lbnQgb2YgY29tcG9uZW50cykge1xuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgYXdhaXQgY29tcG9uZW50Lm5hdmlnYXRlVG9Db21wb25lbnQ/LihcbiAgICAgICAgICAgICAgICAgIGZ1bGxEYXRhUGF0aCxcbiAgICAgICAgICAgICAgICAgIHN1YkNvbXBvbmVudHMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZm91bmQgPSBmYWxzZVxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiBzdWJDb21wb25lbnRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXJycyA9IGVycm9yc1tjb21wb25lbnQuZGF0YVBhdGhdXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJycyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50LnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycnMsIGZpcnN0ICYmIGZvY3VzKVxuICAgICAgICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmb3VuZFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gRm91bmQgYSBuZXN0ZWQgZm9ybSB0byBkaXNwbGF5IGF0IGxlYXN0IHBhcnRzIGZvIHRoZSBlcnJvcnMuXG4gICAgICAgICAgICAgICAgLy8gV2UgY2FuJ3Qgc2hvdyBhbGwgZXJyb3JzIGF0IG9uY2UsIHNvIHdlJ3JlIGRvbmUuIERvbid0IGNhbGxcbiAgICAgICAgICAgICAgICAvLyBgbm90aWZ5RXJyb3JzKClgIHlldCwgYXMgd2UgY2FuIG9ubHkgZGlzcGxheSBpdCBvbmNlXG4gICAgICAgICAgICAgICAgLy8gYHNob3dWYWxpZGF0aW9uRXJyb3JzKClgIHdhcyBjYWxsZWQgZnJvbSBgRGl0b0Zvcm0ubW91bnRlZCgpYFxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBTdGlsbCBoZXJlLCBzbyBrZWVwIHJlbW92aW5nIHRoZSBsYXN0IHBhcnQgdW50aWwgd2UgZmluZCBhIG1hdGNoLlxuICAgICAgICAgICAgZGF0YVBhdGhQYXJ0cy5wb3AoKVxuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBXaGVuIHRoZSBlcnJvciBjYW4ndCBiZSBtYXRjaGVkLCBhZGQgaXQgdG8gYSBsaXN0IG9mIHVubWF0Y2hlZFxuICAgICAgICAgIC8vIGVycm9ycyB3aXRoIGRlY2VudCBtZXNzYWdlLCB0byByZXBvcnQgYXQgdGhlIGVuZC5cbiAgICAgICAgICBjb25zdCBmaWVsZCA9IGxhYmVsaXplKHByb3BlcnR5KVxuICAgICAgICAgIGZvciAoY29uc3QgZXJyIG9mIGVycnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IGZpZWxkXG4gICAgICAgICAgICAgID8gYFRoZSBmaWVsZCAke2ZpZWxkfWBcbiAgICAgICAgICAgICAgOiBgVGhlICR7dGhpcy5mb3JtTGFiZWx9YFxuICAgICAgICAgICAgdW5tYXRjaGVkLnB1c2goYCR7cHJlZml4fSAke2Vyci5tZXNzYWdlfWApXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZpcnN0ID0gZmFsc2VcbiAgICAgIH1cbiAgICAgIGlmICghZmlyc3QpIHtcbiAgICAgICAgdGhpcy5ub3RpZnlFcnJvcnModW5tYXRjaGVkLmpvaW4oJ1xcbicpKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBub3RpZnlFcnJvcnMobWVzc2FnZSkge1xuICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICB0aXRsZTogJ1ZhbGlkYXRpb24gRXJyb3JzJyxcbiAgICAgICAgdGV4dDogbWVzc2FnZSB8fCAnUGxlYXNlIGNvcnJlY3QgdGhlIGhpZ2hsaWdodGVkIGVycm9ycy4nXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICByZXNldERhdGEoKSB7XG4gICAgICAvLyBXZSBjYW4ndCBzZXQgYHRoaXMuZGF0YSA9IC4uLmAgYmVjYXVzZSBpdCdzIGEgcHJvcGVydHksIGJ1dCB3ZSBjYW4gc2V0XG4gICAgICAvLyBhbGwga25vd24gcHJvcGVydGllcyBvbiBpdCB0byB0aGUgdmFsdWVzIHJldHVybmVkIGJ5XG4gICAgICAvLyBgc2V0RGVmYXVsdFZhbHVlcygpYCwgYXMgdGhleSBhcmUgYWxsIHJlYWN0aXZlIGFscmVhZHkgZnJvbSB0aGUgc3RhcnRzOlxuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLmRhdGEsIHNldERlZmF1bHRWYWx1ZXModGhpcy5zY2hlbWEsIHt9LCB0aGlzKSlcbiAgICAgIHRoaXMuY2xlYXJFcnJvcnMoKVxuICAgIH0sXG5cbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBpbiBkYXRhKSB7XG4gICAgICAgIGlmIChuYW1lIGluIHRoaXMuZGF0YSkge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tbXV0YXRpbmctcHJvcHNcbiAgICAgICAgICBpZiAoIWVxdWFscyh0aGlzLmRhdGFbbmFtZV0sIGRhdGFbbmFtZV0pKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLW11dGF0aW5nLXByb3BzXG4gICAgICAgICAgICB0aGlzLmRhdGFbbmFtZV0gPSBkYXRhW25hbWVdXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNvbXBvbmVudCBvZiB0aGlzLmdldENvbXBvbmVudHNCeU5hbWUobmFtZSkpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50Lm1hcmtEaXJ0eSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGZpbHRlckRhdGEoZGF0YSkge1xuICAgICAgLy8gRmlsdGVycyBvdXQgYXJyYXlzIGFuZCBvYmplY3RzIHRoYXQgYXJlIGJhY2sgYnkgZGF0YSByZXNvdXJjZXNcbiAgICAgIC8vIHRoZW1zZWx2ZXMsIGFzIHRob3NlIGFyZSBhbHJlYWR5IHRha2luZyBjYXJlIG9mIHRocm91Z2ggdGhlaXIgb3duIEFQSVxuICAgICAgLy8gcmVzb3VyY2UgZW5kLXBvaW50cyBhbmQgc2hvdWxkbid0IGJlIHNldC5cbiAgICAgIGNvbnN0IGNvcHkgPSB7fVxuICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGRhdGEpKSB7XG4gICAgICAgIGlmIChpc0FycmF5KHZhbHVlKSB8fCBpc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICBjb25zdCBjb21wb25lbnRzID0gdGhpcy5nZXRDb21wb25lbnRzQnlOYW1lKG5hbWUpXG4gICAgICAgICAgaWYgKGNvbXBvbmVudHMuc29tZShjb21wb25lbnQgPT4gY29tcG9uZW50LnByb3ZpZGVzRGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvcHlbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvcHlcbiAgICB9LFxuXG4gICAgcHJvY2Vzc0RhdGEoeyB0YXJnZXQgPSAnY2xpcGJvYXJkJywgc2NoZW1hT25seSA9IHRydWUgfSA9IHt9KSB7XG4gICAgICByZXR1cm4gcHJvY2Vzc0RhdGEoXG4gICAgICAgIHRoaXMuc2NoZW1hLFxuICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgdGhpcy5kYXRhLFxuICAgICAgICB0aGlzLmRhdGFQYXRoLFxuICAgICAgICB7XG4gICAgICAgICAgLy8gTmVlZGVkIGZvciBEaXRvQ29udGV4dCBoYW5kbGluZyBpbnNpZGUgYHByb2Nlc3NEYXRhYCBhbmRcbiAgICAgICAgICAvLyBgcHJvY2Vzc1NjaGVtYURhdGEoKWA6XG4gICAgICAgICAgcm9vdERhdGE6IHRoaXMucm9vdERhdGEsXG4gICAgICAgICAgY29tcG9uZW50OiB0aGlzLFxuICAgICAgICAgIHNjaGVtYU9ubHksXG4gICAgICAgICAgdGFyZ2V0XG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyKGFkZCkge1xuICAgICAgLy8gYCRzY2hlbWFQYXJlbnRDb21wb25lbnQoKWAgaXMgb25seSBzZXQgaWYgb25lIG9mIHRoZSBhbmNlc3RvcnMgdXNlc1xuICAgICAgLy8gdGhlIGBTY2hlbWFQYXJlbnRNaXhpbmA6XG4gICAgICB0aGlzLiRzY2hlbWFQYXJlbnRDb21wb25lbnQoKT8uX3JlZ2lzdGVyU2NoZW1hQ29tcG9uZW50KHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyQ29tcG9uZW50KGNvbXBvbmVudCwgYWRkKSB7XG4gICAgICB0aGlzLl9yZWdpc3RlckVudHJ5KHRoaXMuY29tcG9uZW50c1JlZ2lzdHJ5LCBjb21wb25lbnQsIGFkZClcbiAgICAgIC8vIE9ubHkgcmVnaXN0ZXIgd2l0aCB0aGUgcGFyZW50IGlmIHNjaGVtYSBzaGFyZXMgZGF0YSB3aXRoIGl0LlxuICAgICAgdGhpcy5wYXJlbnRTY2hlbWFDb21wb25lbnQ/Ll9yZWdpc3RlckNvbXBvbmVudChjb21wb25lbnQsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyUGFuZShwYW5lLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lc1JlZ2lzdHJ5LCBwYW5lLCBhZGQpXG4gICAgfSxcblxuICAgIF9yZWdpc3RlclBhbmVsKHBhbmVsLCBhZGQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyRW50cnkodGhpcy5wYW5lbHNSZWdpc3RyeSwgcGFuZWwsIGFkZClcbiAgICB9LFxuXG4gICAgX3JlZ2lzdGVyRW50cnkocmVnaXN0cnksIGVudHJ5LCBhZGQpIHtcbiAgICAgIGNvbnN0IHVpZCA9IGVudHJ5LiR1aWRcbiAgICAgIGlmIChhZGQpIHtcbiAgICAgICAgcmVnaXN0cnlbdWlkXSA9IGVudHJ5XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgcmVnaXN0cnlbdWlkXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBfbGlzdEVudHJpZXNCeURhdGFQYXRoKHJlZ2lzdHJ5KSB7XG4gICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZWdpc3RyeSkucmVkdWNlKChlbnRyaWVzQnlEYXRhUGF0aCwgZW50cnkpID0+IHtcbiAgICAgICAgLy8gTXVsdGlwbGUgZW50cmllcyBjYW4gYmUgbGlua2VkIHRvIHRoZSBzYW1lIGRhdGEtcGF0aCwgZS5nLiB3aGVuXG4gICAgICAgIC8vIHRoZXJlIGFyZSB0YWJzLiBMaW5rIGVhY2ggZGF0YS1wYXRoIHRvIGFuIGFycmF5IG9mIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IHsgZGF0YVBhdGggfSA9IGVudHJ5XG4gICAgICAgIGNvbnN0IGVudHJpZXMgPSAoZW50cmllc0J5RGF0YVBhdGhbZGF0YVBhdGhdIHx8PSBbXSlcbiAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5KVxuICAgICAgICByZXR1cm4gZW50cmllc0J5RGF0YVBhdGhcbiAgICAgIH0sIHt9KVxuICAgIH0sXG5cbiAgICBfZ2V0RW50cmllcyhlbnRyaWVzQnlEYXRhUGF0aCwgZGF0YVBhdGgpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aCkuc3RhcnRzV2l0aCh0aGlzLmRhdGFQYXRoKVxuICAgICAgICA/IHRoaXMuX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICAgICAgOiB0aGlzLl9nZXRFbnRyaWVzQnlOYW1lKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aClcbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeURhdGFQYXRoKGVudHJpZXNCeURhdGFQYXRoLCBkYXRhUGF0aCkge1xuICAgICAgcmV0dXJuIGVudHJpZXNCeURhdGFQYXRoW25vcm1hbGl6ZURhdGFQYXRoKGRhdGFQYXRoKV0gfHwgW11cbiAgICB9LFxuXG4gICAgX2dldEVudHJpZXNCeU5hbWUoZW50cmllc0J5RGF0YVBhdGgsIG5hbWUpIHtcbiAgICAgIHJldHVybiBlbnRyaWVzQnlEYXRhUGF0aFthcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKV0gfHwgW11cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zY2hlbWEge1xuICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXG4gID4gLmRpdG8tc2NoZW1hLWhlYWRlciArIC5kaXRvLXNjaGVtYS1jb250ZW50ID4gLmRpdG8tcGFuZSB7XG4gICAgbWFyZ2luLXRvcDogJGZvcm0tc3BhY2luZy1oYWxmO1xuICB9XG5cbiAgJjpoYXMoPiAuZGl0by1zY2hlbWEtY29udGVudCArIC5kaXRvLWVkaXQtYnV0dG9ucykge1xuICAgIC8vIERpc3BsYXkgdGhlIGlubGluZWQgZWRpdCBidXR0b25zIHRvIHRoZSByaWdodCBvZiB0aGUgc2NoZW1hOlxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleC1kaXJlY3Rpb246IHJvdztcbiAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcblxuICAgID4gLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgICAgIGZsZXg6IDEgMCAwJTtcbiAgICAgIG1hcmdpbi1sZWZ0OiAkZm9ybS1zcGFjaW5nO1xuICAgIH1cbiAgfVxuXG4gID4gLmRpdG8tc2NoZW1hLWNvbnRlbnQge1xuICAgIGZsZXg6IDAgMSAxMDAlO1xuICAgIG1heC13aWR0aDogMTAwJTtcbiAgICAvLyBTbyB0aGF0IHNjaGVtYSBidXR0b25zIGNhbiBiZSBzdGlja3kgdG8gdGhlIGJvdHRvbS5cbiAgICAvLyBOT1RFOiBXZSBhbHNvIG5lZWQgZ3JpZCBmb3IgYFRyYW5zaXRpb25IZWlnaHRgIHRvIHdvcmsgd2VsbC4gU3dpdGNoaW5nXG4gICAgLy8gdG8gZmxleCBib3ggaGVyZSBjYXVzZXMganVtcHkgY29sbGFwc2luZyB0cmFuc2l0aW9ucy5cbiAgICBkaXNwbGF5OiBncmlkO1xuICAgIGdyaWQtdGVtcGxhdGUtcm93czogbWluLWNvbnRlbnQ7XG4gICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxMDAlO1xuXG4gICAgPiA6b25seS1jaGlsZCB7XG4gICAgICBncmlkLXJvdy1lbmQ6IG5vbmU7XG4gICAgfVxuICB9XG59XG5cbi5kaXRvLXNjaGVtYS1oZWFkZXIge1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgLmRpdG8taGVhZGVyICYge1xuICAgIC8vIFdoZW4gdGVsZXBvcnRlZCBpbnRvIG1haW4gaGVhZGVyLlxuICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDtcbiAgfVxuXG4gIC5kaXRvLWxhYmVsICYge1xuICAgIC8vIFdoZW4gdGVsZXBvcnRlZCBpbnRvIGNvbnRhaW5lciBsYWJlbC5cbiAgICBmbGV4OiAxO1xuICB9XG5cbiAgPiAuZGl0by1sYWJlbCB7XG4gICAgbWFyZ2luLWJvdHRvbTogMDtcbiAgfVxuXG4gID4gLmRpdG8tYnV0dG9ucyB7XG4gICAgbWFyZ2luLWxlZnQ6IHZhcigtLWJ1dHRvbi1tYXJnaW4sIDApO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbkRpdG9TY2hlbWEuZGl0by1zY2hlbWEtaW5saW5lZChcbiAgOmNsYXNzPVwieyAnZGl0by1zY2hlbWEtY29tcGFjdCc6IGlzQ29tcGFjdCB9XCJcbiAgOnNjaGVtYT1cInNjaGVtYVwiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICA6bGFiZWw9XCJpc0NvbXBhY3QgPyBudWxsIDogbGFiZWxcIlxuICA6cGFkZGluZz1cInBhZGRpbmcgPz8gJ2lubGluZWQnXCJcbiAgOmlubGluZWQ9XCJ0cnVlXCJcbiAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICA6Z2VuZXJhdGVMYWJlbHM9XCIhaXNDb21wYWN0XCJcbiAgOmxhYmVsTm9kZT1cImxhYmVsTm9kZVwiXG4gIDphY2N1bXVsYXRlZEJhc2lzPVwiYWNjdW11bGF0ZWRCYXNpc1wiXG4pXG4gIC8vLSBSZW5kZXIgZGl0by1lZGl0LWJ1dHRvbnMgZm9yIGlubGluZWQgc2NoZW1hcyBzZXBhcmF0ZWx5IGZyb20gYWxsXG4gIC8vLSBvdGhlcnMgaW4gYFR5cGVMaXN0YCBhcyBhIHNjb3BlLCBmb3IgYmV0dGVyIGhhbmRsaW5nIG9mIGxheW91dC5cbiAgdGVtcGxhdGUoI2VkaXQtYnV0dG9ucylcbiAgICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgICB2LWlmPVwiZGVsZXRhYmxlIHx8IGRyYWdnYWJsZSB8fCBlZGl0YWJsZVwiXG4gICAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cImVkaXRhYmxlXCJcbiAgICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgICAgIEBkZWxldGU9XCIkZW1pdCgnZGVsZXRlJylcIlxuICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgaXNDb21wYWN0IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvU2NoZW1hSW5saW5lZCcsIHtcbiAgZW1pdHM6IFsnZGVsZXRlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbGFiZWw6IHsgdHlwZTogW1N0cmluZywgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhZGRpbmc6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBjb2xsYXBzZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjb2xsYXBzaWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRyYWdnYWJsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGVkaXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZGVsZXRhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdFBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbGFiZWxOb2RlOiB7IHR5cGU6IEhUTUxFbGVtZW50LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgYWNjdW11bGF0ZWRCYXNpczogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIGlzQ29tcGFjdCh0aGlzLnNjaGVtYSlcbiAgICB9LFxuXG4gICAgaGFzTGFiZWwoKSB7XG4gICAgICByZXR1cm4gIXRoaXMuaXNDb21wYWN0ICYmICEhdGhpcy5sYWJlbFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNjaGVtYS1pbmxpbmVkIHtcbiAgLy8gVXNlIGdyaWQgbGF5b3V0IGZvciB0d28gcmVhc29uczogRm9yIGBUcmFuc2l0aW9uSGVpZ2h0YCB0byB3b3JrIHNtb290aGx5LFxuICAvLyBhbmQgdG8gYWxpZ24gdGhlIGhlYWRlciBhYm92ZSB0aGUgY29udGVudCB3aGVuIHRoZSBoZWFkZXIgaXMgbm90IHRlbGVwb3J0ZWRcbiAgLy8gb3V0c2lkZSBvZiB0aGUgc2NoZW1hLlxuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50O1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDEwMCU7XG5cbiAgJjpub3QoOmhvdmVyLCAuZGl0by1zY2hlbWEtLW9wZW4pIHtcbiAgICA+IC5kaXRvLXNjaGVtYS1oZWFkZXIge1xuICAgICAgPiAuZGl0by1jbGlwYm9hcmQge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjwhLS0gZXNsaW50LWRpc2FibGUgdnVlL25vLXRlbXBsYXRlLXNoYWRvdyAtLT5cbjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1wYW5lKFxuICB2LWlmPVwiaXNQb3B1bGF0ZWQgJiYgY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPiAwXCJcbiAgdi1yZXNpemU9XCJvblJlc2l6ZVBhbmVcIlxuICA6Y2xhc3M9XCJjbGFzc2VzXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9YHtcbiAgICAgIHNjaGVtYSxcbiAgICAgIGRhdGFQYXRoLFxuICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICBuZXN0ZWQsXG4gICAgICBzdG9yZVxuICAgIH0sIGluZGV4IGluIGNvbXBvbmVudFNjaGVtYXNgXG4gIClcbiAgICAvLyAtVXNlIDxzcGFuPiBmb3IgLmRpdG8tYnJlYWsgc28gd2UgY2FuIHVzZSBgLmRpdG8tY29udGFpbmVyOmZpcnN0LW9mLXR5cGVgXG4gICAgLy8gc2VsZWN0b3IuXG4gICAgc3Bhbi5kaXRvLWJyZWFrKFxuICAgICAgdi1pZj1cInNjaGVtYS5icmVhayA9PT0gJ2JlZm9yZSdcIlxuICAgIClcbiAgICBEaXRvQ29udGFpbmVyKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShzY2hlbWEpXCJcbiAgICAgIHJlZj1cImNvbnRhaW5lcnNcIlxuICAgICAgOmtleT1cIm5lc3RlZERhdGFQYXRoXCJcbiAgICAgIDpkYXRhLWluZGV4PVwiaW5kZXhcIlxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpzaW5nbGU9XCJpc1NpbmdsZUNvbXBvbmVudFwiXG4gICAgICA6bmVzdGVkPVwibmVzdGVkXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIDpnZW5lcmF0ZUxhYmVscz1cImdlbmVyYXRlTGFiZWxzXCJcbiAgICAgIDp2ZXJ0aWNhbExhYmVscz1cImlzSW5MYWJlbGVkUm93KGluZGV4KVwiXG4gICAgICA6YWNjdW11bGF0ZWRCYXNpcz1cImFjY3VtdWxhdGVkQmFzaXNcIlxuICAgIClcbiAgICBzcGFuLmRpdG8tYnJlYWsoXG4gICAgICB2LWlmPVwic2NoZW1hLmJyZWFrID09PSAnYWZ0ZXInXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGlzTmVzdGVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9QYW5lJywge1xuICBwcm92aWRlKCkge1xuICAgIHJldHVybiB7XG4gICAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiB0aGlzLnRhYkNvbXBvbmVudFxuICAgIH1cbiAgfSxcblxuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRhYjogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBwYWRkaW5nOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNpbmdsZTogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY2N1bXVsYXRlZEJhc2lzOiB7IHR5cGU6IE51bWJlciwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgcG9zaXRpb25zOiBbXVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsYXNzZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnZGl0by1wYW5lLS1zaW5nbGUnOiB0aGlzLmlzU2luZ2xlQ29tcG9uZW50LFxuICAgICAgICBbYGRpdG8tcGFuZS0tcGFkZGluZy0ke3RoaXMucGFkZGluZ31gXTogISF0aGlzLnBhZGRpbmdcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdGFiQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMudGFiID8gdGhpcyA6IHRoaXMuJHRhYkNvbXBvbmVudCgpXG4gICAgfSxcblxuICAgIGNvbXBvbmVudFNjaGVtYXMoKSB7XG4gICAgICAvLyBDb21wdXRlIGEgY29tcG9uZW50cyBsaXN0IHdoaWNoIGhhcyB0aGUgZGF0YVBhdGggYmFrZWQgaW50byBpdHMga2V5c1xuICAgICAgLy8gYW5kIGFkZHMgdGhlIGtleSBhcyB0aGUgbmFtZSB0byBlYWNoIGNvbXBvbmVudCwgdXNlZCBmb3IgbGFiZWxzLCBldGMuXG4gICAgICAvLyBOT1RFOiBzY2hlbWEgY2FuIGJlIG51bGwgd2hpbGUgbXVsdGktZm9ybSBsaXN0cyBsb2FkIHRoZWlyIGRhdGEsXG4gICAgICAvLyBiZWNhdXNlIG9ubHkgdGhlIGF2YWlsYWJsZSBkYXRhIHdpbGwgZGV0ZXJtaW5lIHRoZSB0eXBlIG9mIGZvcm0uXG4gICAgICAvLyBXaGVuIGVkaXRpbmcgcHJpbWl0aXZlIHZhbHVlcyB0aHJvdWdoIGEgZm9ybSwgZG8gbm90IGFwcGVuZCAnbmFtZScgdG9cbiAgICAgIC8vIHRoZSBjb21wb25lbnQncyBkYXRhUGF0aCBzbyBpdCBjYW4gYmUgbWFwcGVkIHRvIGZyb20gdmFsaWRhdGlvbiBlcnJvcnMuXG4gICAgICAvLyBOT1RFOiBOb3QgYWxsIHNjaGVtYXMgLyBjb21wb25lbnRzIGhhdmUgYSBzb3VyY2VTY2hlbWEsIGUuZy4gZGlhbG9ncy5cbiAgICAgIGNvbnN0IHdyYXBQcmltaXRpdmVzID0gdGhpcy5zb3VyY2VTY2hlbWE/LndyYXBQcmltaXRpdmVzXG4gICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy5zY2hlbWE/LmNvbXBvbmVudHMgfHwge30pLm1hcChcbiAgICAgICAgKFtuYW1lLCBzY2hlbWFdKSA9PiB7XG4gICAgICAgICAgLy8gQWx3YXlzIGFkZCBuYW1lIHRvIGNvbXBvbmVudCBzY2hlbWEuXG4gICAgICAgICAgc2NoZW1hLm5hbWUgPSBuYW1lXG4gICAgICAgICAgLy8gU2hhcmUgZGF0YVBhdGggYW5kIHN0b3JlIHdpdGggcGFyZW50IGlmIG5vdCBuZXN0ZWQ6XG4gICAgICAgICAgY29uc3QgbmVzdGVkID0gaXNOZXN0ZWQoc2NoZW1hKVxuICAgICAgICAgIGNvbnN0IG5lc3RlZERhdGFQYXRoID0gYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgbmFtZSlcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgZGF0YVBhdGg6XG4gICAgICAgICAgICAgIG5lc3RlZCAmJiAhd3JhcFByaW1pdGl2ZXNcbiAgICAgICAgICAgICAgICA/IG5lc3RlZERhdGFQYXRoXG4gICAgICAgICAgICAgICAgOiB0aGlzLmRhdGFQYXRoLFxuICAgICAgICAgICAgbmVzdGVkRGF0YVBhdGgsXG4gICAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgICBzdG9yZTogdGhpcy5nZXRDaGlsZFN0b3JlKG5hbWUpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICApXG4gICAgfSxcblxuICAgIGlzU2luZ2xlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2luZ2xlICYmIHRoaXMuY29tcG9uZW50U2NoZW1hcy5sZW5ndGggPT09IDFcbiAgICB9LFxuXG4gICAgdmVydGljYWxMYWJlbHNCeUluZGljZXMoKSB7XG4gICAgICBjb25zdCB7IHBvc2l0aW9ucyB9ID0gdGhpc1xuXG4gICAgICBjb25zdCBpc0xhc3RJblJvdyA9IGluZGV4ID0+IChcbiAgICAgICAgcG9zaXRpb25zW2luZGV4XSAmJiAoXG4gICAgICAgICAgaW5kZXggPT09IHBvc2l0aW9ucy5sZW5ndGggLSAxIHx8XG4gICAgICAgICAgZmluZE5leHRQb3NpdGlvbihpbmRleCkudG9wID4gcG9zaXRpb25zW2luZGV4XS50b3BcbiAgICAgICAgKVxuICAgICAgKVxuXG4gICAgICBjb25zdCBmaW5kTmV4dFBvc2l0aW9uID0gaW5kZXggPT4ge1xuICAgICAgICBmb3IgKGxldCBpID0gaW5kZXggKyAxOyBpIDwgcG9zaXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaWYgKHBvc2l0aW9uc1tpXSkgcmV0dXJuIHBvc2l0aW9uc1tpXVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJvd3MgPSBbXVxuICAgICAgbGV0IHJvdyA9IFtdXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgcG9zaXRpb25zLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICByb3cucHVzaChpbmRleClcbiAgICAgICAgaWYgKGlzTGFzdEluUm93KGluZGV4KSkge1xuICAgICAgICAgIHJvd3MucHVzaChyb3cpXG4gICAgICAgICAgcm93ID0gW11cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHJvdy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJvd3MucHVzaChyb3cpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzID0gW11cblxuICAgICAgZm9yIChjb25zdCByb3cgb2Ygcm93cykge1xuICAgICAgICBsZXQgaGFzTGFiZWxzSW5Sb3cgPSBmYWxzZVxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIHJvdykge1xuICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5wb3NpdGlvbnNbaW5kZXhdXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgcG9zaXRpb24/LmhlaWdodCA+IDIgJiYgKFxuICAgICAgICAgICAgICBwb3NpdGlvbi5ub2RlLm1hdGNoZXMoJzpoYXMoPiAuZGl0by1sYWJlbCknKSB8fFxuICAgICAgICAgICAgICBwb3NpdGlvbi5ub2RlXG4gICAgICAgICAgICAgICAgLmNsb3Nlc3QoJy5kaXRvLWNvbnRhaW5lcicpXG4gICAgICAgICAgICAgICAgLm1hdGNoZXMoJy5kaXRvLWNvbnRhaW5lci0tbGFiZWwtdmVydGljYWwnKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gVE9ETzogSGFuZGxlIG5lc3RlZCBzY2hlbWFzLCBlLmcuICdzZWN0aW9uJyBvciAnb2JqZWN0JyBhbmRcbiAgICAgICAgICAgIC8vIGRldGVjdCBsYWJlbHMgdGhlcmUgdG9vLlxuICAgICAgICAgICAgaGFzTGFiZWxzSW5Sb3cgPSB0cnVlXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIHJvdykge1xuICAgICAgICAgIHZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzW2luZGV4XSA9IGhhc0xhYmVsc0luUm93XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJ2NvbXBvbmVudFNjaGVtYXMubGVuZ3RoJyhsZW5ndGgpIHtcbiAgICAgIHRoaXMucG9zaXRpb25zLmxlbmd0aCA9IGxlbmd0aFxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICB0aGlzLnNjaGVtYUNvbXBvbmVudC5fcmVnaXN0ZXJQYW5lKHRoaXMsIGFkZClcbiAgICB9LFxuXG4gICAgZm9jdXMoKSB7XG4gICAgICBpZiAodGhpcy50YWIpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlci5wdXNoKHsgaGFzaDogYCMke3RoaXMudGFifWAgfSlcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25SZXNpemVQYW5lKCkge1xuICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbnRhaW5lciBvZiB0aGlzLiRyZWZzLmNvbnRhaW5lcnMpIHtcbiAgICAgICAgICBjb25zdCBub2RlID0gY29udGFpbmVyLiRlbFxuICAgICAgICAgIGNvbnN0IGluZGV4ID0gK25vZGUuZGF0YXNldC5pbmRleFxuICAgICAgICAgIGNvbnN0IGJvdW5kcyA9IG5vZGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgICBjb25zdCBzdHlsZSA9IGdldENvbXB1dGVkU3R5bGUobm9kZSlcbiAgICAgICAgICBjb25zdCBwYWRkaW5nID0gcGFyc2VGbG9hdChzdHlsZS5wYWRkaW5nKVxuICAgICAgICAgIGNvbnN0IGZvbnRTaXplID0gcGFyc2VGbG9hdChzdHlsZS5mb250U2l6ZSlcbiAgICAgICAgICBjb25zdCBoZWlnaHQgPSBib3VuZHMuaGVpZ2h0IC0gMiAqIHBhZGRpbmdcbiAgICAgICAgICB0aGlzLnBvc2l0aW9uc1tpbmRleF0gPVxuICAgICAgICAgICAgaGVpZ2h0IDw9IDBcbiAgICAgICAgICAgICAgPyBudWxsXG4gICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgdG9wOiBib3VuZHMueSxcbiAgICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0IC8gZm9udFNpemUsXG4gICAgICAgICAgICAgICAgICBub2RlXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBpc0luTGFiZWxlZFJvdyhpbmRleCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52ZXJ0aWNhbExhYmVsc0J5SW5kaWNlc1tpbmRleF1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1wYW5lIHtcbiAgJHNlbGY6ICY7XG4gICRyb290LXBhZGRpbmc6ICRjb250ZW50LXBhZGRpbmcgLSAkZm9ybS1zcGFjaW5nLWhhbGY7XG5cbiAgLS1wYW5lLXBhZGRpbmc6IDBweDtcblxuICBkaXNwbGF5OiBmbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0O1xuICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAvLyBSZW1vdmUgdGhlIHBhZGRpbmcgYWRkZWQgYnkgYC5kaXRvLWNvbnRhaW5lcmAgaW5zaWRlIGAuZGl0by1wYW5lYDpcbiAgbWFyZ2luOiAtJGZvcm0tc3BhY2luZy1oYWxmO1xuICBwYWRkaW5nOiB2YXIoLS1wYW5lLXBhZGRpbmcpO1xuICAvLyBVc2UgYGZsZXg6IDAlYCBmb3IgYWxsIGAuZGl0by1wYW5lYCBleGNlcHQgYC5kaXRvLXBhbmVfX21haW5gLFxuICAvLyBzbyB0aGF0IHRoZSBgLmRpdG8tYnV0dG9ucy1tYWluYCBjYW4gYmUgbW92ZWQgYWxsIHRoZSB3YXkgdG8gdGhlIGJvdHRvbS5cbiAgZmxleDogMCU7XG5cbiAgJl9fbWFpbiB7XG4gICAgZmxleDogMTAwJTtcbiAgfVxuXG4gICYtLXBhZGRpbmctcm9vdCB7XG4gICAgLy8gQSByb290LWxldmVsIHBhbmUgaW5zaWRlIGEgc2Nyb2xsIHZpZXcuIENsZWFyIG5lZ2F0aXZlIG1hcmdpbiBmcm9tIGFib3ZlLlxuICAgIG1hcmdpbjogMDtcbiAgICAvLyBNb3ZlIHRoZSBuZWdhdGl2ZSBtYXJnaW4gdXNlZCB0byByZW1vdmUgdGhlIHBhZGRpbmcgYWRkZWQgYnlcbiAgICAvLyBgLmRpdG8tY29udGFpbmVyYCBpbnNpZGUgYC5kaXRvLXBhbmVgIHRvIHRoZSBwYWRkaW5nOlxuICAgIC0tcGFuZS1wYWRkaW5nOiAjeyRyb290LXBhZGRpbmd9O1xuXG4gICAgJiN7JHNlbGZ9LS1zaW5nbGUge1xuICAgICAgLS1wYW5lLXBhZGRpbmc6ICN7JGNvbnRlbnQtcGFkZGluZ307XG4gICAgfVxuXG4gICAgJjpoYXMoPiAuZGl0by1jb250YWluZXItLWxhYmVsLXZlcnRpY2FsOmZpcnN0LW9mLXR5cGUpIHtcbiAgICAgIC8vIFJlZHVjZSB0b3Agc3BhY2luZyB3aGVuIHRoZSBmaXJzdCByb3cgaGFzIGxhYmVscy5cbiAgICAgIG1hcmdpbi10b3A6IC0kZm9ybS1zcGFjaW5nLWhhbGY7XG4gICAgfVxuXG4gICAgLy8gRGlzcGxheSBhIHJ1bGVyIGJldHdlZW4gdGFiYmVkIGNvbXBvbmVudHMgYW5kIHRvd2FyZHMgdGhlIC5kaXRvLWJ1dHRvbnNcbiAgICAmX190YWIgKyAmX19tYWluIHtcbiAgICAgICY6OmJlZm9yZSB7XG4gICAgICAgIC8vIFVzZSBhIHBzZXVkbyBlbGVtZW50IHRvIGRpc3BsYXkgYSBydWxlciB3aXRoIHByb3BlciBtYXJnaW5zXG4gICAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICAgIGJvcmRlci1ib3R0b206ICRib3JkZXItc3R5bGU7XG4gICAgICAgIC8vIFNoaWZ0IHJ1bGVyIHVwIGJ5ICRyb290LXBhZGRpbmcgdG8gZXhjbHVkZSByZW1vdmVkICRmb3JtLXNwYWNpbmctaGFsZlxuICAgICAgICBtYXJnaW46ICgtJHJvb3QtcGFkZGluZykgJGZvcm0tc3BhY2luZy1oYWxmICRyb290LXBhZGRpbmc7XG4gICAgICAgIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19tYWluICsgLmRpdG8tYnV0dG9ucy1tYWluIHtcbiAgICAgIC8vIE5lZWRlZCBmb3JtcyB3aXRoIHN0aWNreSBtYWluIGJ1dHRvbnMuXG4gICAgICBtYXJnaW46ICRjb250ZW50LXBhZGRpbmc7XG4gICAgICBtYXJnaW4tYm90dG9tOiAwO1xuICAgIH1cbiAgfVxuXG4gICYtLXBhZGRpbmctaW5saW5lZCB7XG4gICAgLS1wYW5lLXBhZGRpbmc6IDBweDtcbiAgfVxuXG4gICYtLXBhZGRpbmctbmVzdGVkIHtcbiAgICAtLXBhbmUtcGFkZGluZzogI3skZm9ybS1zcGFjaW5nfTtcblxuICAgICY6aGFzKD4gLmRpdG8tY29udGFpbmVyLS1sYWJlbC12ZXJ0aWNhbDpmaXJzdC1vZi10eXBlKSB7XG4gICAgICAvLyBSZWR1Y2UgdG9wIHNwYWNpbmcgd2hlbiB0aGUgZmlyc3Qgcm93IGhhcyBsYWJlbHMuXG4gICAgICBwYWRkaW5nLXRvcDogJGZvcm0tc3BhY2luZy1oYWxmO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWJyZWFrIHtcbiAgICAvLyBgLmRpdG8tYnJlYWtgIGlzIHJlbmRlcmVkIGFzIDxzcGFuPiBzbyB3ZSBjYW4gdXNlIHRoZVxuICAgIC8vIGAuZGl0by1jb250YWluZXI6Zmlyc3Qtb2YtdHlwZWAgc2VsZWN0b3IgdG8gbWF0Y2ggdGhlIGZpcnN0IGNvbnRhaW5lclxuICAgIC8vIGV2ZW4gaWYgaXQgaGFzIGEgYnJlYWsgYmVmb3JlIGl0LlxuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIGZsZXg6IDEwMCU7XG4gICAgaGVpZ2h0OiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VGcmFjdGlvbih2YWx1ZSkge1xuICBjb25zdCBtYXRjaCA9IChcbiAgICBpc1N0cmluZyh2YWx1ZSkgJiZcbiAgICB2YWx1ZS5tYXRjaCgvXlxccyooWystXT9cXGQrKVxccypcXC9cXHMqKFsrLV0/XFxkKylcXHMqJC8pXG4gIClcbiAgaWYgKG1hdGNoKSB7XG4gICAgY29uc3QgWywgZGl2aWRlbmQsIGRpdmlzb3JdID0gbWF0Y2hcbiAgICByZXR1cm4gcGFyc2VGbG9hdChkaXZpZGVuZCkgLyBwYXJzZUZsb2F0KGRpdmlzb3IpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHBhcnNlRmxvYXQodmFsdWUpXG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jb250YWluZXIoXG4gIHYtc2hvdz1cImNvbXBvbmVudFZpc2libGVcIlxuICA6Y2xhc3M9XCJjb250YWluZXJDbGFzc2VzXCJcbiAgOnN0eWxlPVwiY29udGFpbmVyU3R5bGVzXCJcbilcbiAgVGVsZXBvcnQoXG4gICAgdi1pZj1cImlzTW91bnRlZCAmJiBwYW5lbEVudHJpZXMubGVuZ3RoID4gMFwiXG4gICAgdG89XCIuZGl0by1zaWRlYmFyX190ZWxlcG9ydFwiXG4gIClcbiAgICBEaXRvUGFuZWxzKFxuICAgICAgOnBhbmVscz1cInBhbmVsRW50cmllc1wiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gIERpdG9MYWJlbChcbiAgICB2LWlmPVwiaGFzTGFiZWxcIlxuICAgIDpjbGFzcz1cImxheW91dENsYXNzZXNcIlxuICAgIDpsYWJlbD1cImxhYmVsXCJcbiAgICA6ZGF0YVBhdGg9XCJsYWJlbERhdGFQYXRoXCJcbiAgICA6aW5mbz1cImluZm9cIlxuICApXG4gIGNvbXBvbmVudC5kaXRvLWNvbXBvbmVudChcbiAgICA6aXM9XCJ0eXBlQ29tcG9uZW50XCJcbiAgICByZWY9XCJjb21wb25lbnRcIlxuICAgIDpjbGFzcz1cImNvbXBvbmVudENsYXNzZXNcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDp3aWR0aD1cIndpZHRoXCJcbiAgICA6bGFiZWw9XCJsYWJlbFwiXG4gICAgOnNpbmdsZT1cInNpbmdsZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiY29tcG9uZW50RGlzYWJsZWRcIlxuICAgIDphY2N1bXVsYXRlZEJhc2lzPVwiY29tYmluZWRCYXNpc1wiXG4gICAgQGVycm9ycz1cIm9uRXJyb3JzXCJcbiAgKVxuICBEaXRvRXJyb3JzKDplcnJvcnM9XCJlcnJvcnNcIilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc1N0cmluZywgaXNOdW1iZXIgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQge1xuICBnZXRBbGxQYW5lbEVudHJpZXMsXG4gIGdldFR5cGVDb21wb25lbnQsXG4gIGhhc0xhYmVsLFxuICBvbWl0U3BhY2luZ1xufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBwYXJzZUZyYWN0aW9uIH0gZnJvbSAnLi4vdXRpbHMvbWF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvQ29udGFpbmVyJywge1xuICBwcm9wczoge1xuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzaW5nbGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBuZXN0ZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZ2VuZXJhdGVMYWJlbHM6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICB2ZXJ0aWNhbExhYmVsczogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9LFxuICAgIGFjY3VtdWxhdGVkQmFzaXM6IHsgdHlwZTogTnVtYmVyLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlcnJvcnM6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBjb250ZXh0KCkge1xuICAgICAgcmV0dXJuIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IG5lc3RlZDogdGhpcy5uZXN0ZWQgfSlcbiAgICB9LFxuXG4gICAgdHlwZUNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiBnZXRUeXBlQ29tcG9uZW50KHRoaXMuc2NoZW1hLnR5cGUpXG4gICAgfSxcblxuICAgIGhhc0xhYmVsKCkge1xuICAgICAgcmV0dXJuIGhhc0xhYmVsKHRoaXMuc2NoZW1hLCB0aGlzLmdlbmVyYXRlTGFiZWxzKVxuICAgIH0sXG5cbiAgICBsYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhc0xhYmVsID8gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYSkgOiBudWxsXG4gICAgfSxcblxuICAgIGxhYmVsRGF0YVBhdGgoKSB7XG4gICAgICAvLyBVbm5lc3RlZCB0eXBlcyBkb24ndCBoYXZlIGEgZGF0YVBhdGggZm9yIHRoZW1zZWx2ZXMsIGRvbid0IHVzZSBpdDpcbiAgICAgIHJldHVybiB0aGlzLm5lc3RlZCA/IHRoaXMuZGF0YVBhdGggOiBudWxsXG4gICAgfSxcblxuICAgIGluZm86IGdldFNjaGVtYUFjY2Vzc29yKCdpbmZvJywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgd2lkdGg6IGdldFNjaGVtYUFjY2Vzc29yKCd3aWR0aCcsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBkZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy50eXBlQ29tcG9uZW50Py5kZWZhdWx0V2lkdGhcbiAgICAgIH0sXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgLy8gVXNlIDEwMCUgPT0gMS4wIGFzIGRlZmF1bHQgd2lkdGggd2hlbiBub3RoaW5nIGlzIHNldDpcbiAgICAgICAgcmV0dXJuIHdpZHRoID09PSB1bmRlZmluZWRcbiAgICAgICAgICA/IDEuMFxuICAgICAgICAgIDogaXNTdHJpbmcod2lkdGgpXG4gICAgICAgICAgICA/IHdpZHRoLm1hdGNoKC9eXFxzKls8Pl0/XFxzKiguKikkLylbMV0gLy8gUmVtb3ZlIHdpZHRoIG9wZXJhdG9yXG4gICAgICAgICAgICA6IHdpZHRoXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB3aWR0aE9wZXJhdG9yOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2lkdGgnLCB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBnZXQod2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIGlzU3RyaW5nKHdpZHRoKVxuICAgICAgICAgID8gd2lkdGgubWF0Y2goL15cXHMqKFs8Pl0/KS8pWzFdIHx8IG51bGxcbiAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbXBvbmVudFZpc2libGU6IGdldFNjaGVtYUFjY2Vzc29yKCd2aXNpYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnR5cGVDb21wb25lbnQ/LmRlZmF1bHRWaXNpYmxlXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBjb21wb25lbnREaXNhYmxlZDogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Rpc2FibGVkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGRpc2FibGVkKSB7XG4gICAgICAgIHJldHVybiBkaXNhYmxlZCB8fCB0aGlzLmRpc2FibGVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBmbGV4R3JvdygpIHtcbiAgICAgIC8vIEludGVycHJldCAnPjUwJScgYXMgJzUwJSwgZmxleC1ncm93OiAxYFxuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy53aWR0aE9wZXJhdG9yID09PSAnPicgfHxcbiAgICAgICAgdGhpcy53aWR0aCA9PT0gJ2ZpbGwnXG4gICAgICApXG4gICAgfSxcblxuICAgIGZsZXhTaHJpbmsoKSB7XG4gICAgICAvLyBJbnRlcnByZXQgJzw1MCUnIGFzICc1MCUsIGZsZXgtc2hyaW5rOiAxYFxuICAgICAgcmV0dXJuIHRoaXMud2lkdGhPcGVyYXRvciA9PT0gJzwnXG4gICAgfSxcblxuICAgIGZsZXhCYXNpcygpIHtcbiAgICAgIGNvbnN0IHdpZHRoID0gdGhpcy53aWR0aFxuICAgICAgLy8gJ2F1dG8nID0gbm8gZml0dGluZzpcbiAgICAgIHJldHVybiBbbnVsbCwgJ2F1dG8nLCAnZmlsbCddLmluY2x1ZGVzKHdpZHRoKVxuICAgICAgICA/ICdhdXRvJ1xuICAgICAgICA6IC8lJC8udGVzdCh3aWR0aClcbiAgICAgICAgICA/IHBhcnNlRmxvYXQod2lkdGgpIC8gMTAwIC8vIHBlcmNlbnRhZ2UgLT4gZnJhY3Rpb25cbiAgICAgICAgICA6IC9bYS16XS8udGVzdCh3aWR0aClcbiAgICAgICAgICAgID8gd2lkdGggLy8gbmF0aXZlIHVuaXRzXG4gICAgICAgICAgICA6IHBhcnNlRnJhY3Rpb24od2lkdGgpIC8vIGZyYWN0aW9uXG4gICAgfSxcblxuICAgIGNvbWJpbmVkQmFzaXMoKSB7XG4gICAgICBjb25zdCB7IGFjY3VtdWxhdGVkQmFzaXMsIGZsZXhCYXNpcyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzTnVtYmVyKGFjY3VtdWxhdGVkQmFzaXMpICYmIGlzTnVtYmVyKGZsZXhCYXNpcylcbiAgICAgICAgPyBhY2N1bXVsYXRlZEJhc2lzICogZmxleEJhc2lzXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBjb250YWluZXJDbGFzc2VzKCkge1xuICAgICAgY29uc3QgeyBjbGFzczogY2xhc3NlcyB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGNvbnN0IHByZWZpeCA9ICdkaXRvLWNvbnRhaW5lcidcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtgJHtwcmVmaXh9LS1zaW5nbGVgXTogdGhpcy5zaW5nbGUsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5jb21wb25lbnREaXNhYmxlZCxcbiAgICAgICAgJ2RpdG8taGFzLWVycm9ycyc6ICEhdGhpcy5lcnJvcnMsXG4gICAgICAgIFtgJHtwcmVmaXh9LS1sYWJlbC12ZXJ0aWNhbGBdOiB0aGlzLnZlcnRpY2FsTGFiZWxzLFxuICAgICAgICBbYCR7cHJlZml4fS0tb21pdC1zcGFjaW5nYF06IG9taXRTcGFjaW5nKHRoaXMuc2NoZW1hKSxcbiAgICAgICAgLi4uKGlzU3RyaW5nKGNsYXNzZXMpID8geyBbY2xhc3Nlc106IHRydWUgfSA6IGNsYXNzZXMpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbnRhaW5lclN0eWxlcygpIHtcbiAgICAgIGNvbnN0IHsgZmxleEJhc2lzLCBjb21iaW5lZEJhc2lzIH0gPSB0aGlzXG4gICAgICByZXR1cm4ge1xuICAgICAgICAnLS1ncm93JzogdGhpcy5mbGV4R3JvdyA/IDEgOiAwLFxuICAgICAgICAnLS1zaHJpbmsnOiB0aGlzLmZsZXhTaHJpbmsgPyAxIDogMCxcbiAgICAgICAgJy0tYmFzaXMnOiBpc051bWJlcihmbGV4QmFzaXMpID8gYCR7ZmxleEJhc2lzICogMTAwfSVgIDogZmxleEJhc2lzLFxuICAgICAgICAnLS1iYXNpcy1tb2JpbGUnOlxuICAgICAgICAgIGlzTnVtYmVyKGNvbWJpbmVkQmFzaXMpICYmIGNvbWJpbmVkQmFzaXMgPD0gMC4yNVxuICAgICAgICAgICAgPyBgJHtmbGV4QmFzaXMgKiAyMDB9JWBcbiAgICAgICAgICAgIDogbnVsbFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRDbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8tc2luZ2xlJzogdGhpcy5zaW5nbGUsXG4gICAgICAgIC4uLnRoaXMubGF5b3V0Q2xhc3Nlc1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBsYXlvdXRDbGFzc2VzKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgJ2RpdG8td2lkdGgtZmlsbCc6IHRoaXMud2lkdGggPT09ICdmaWxsJyB8fCB0aGlzLmZsZXhCYXNpcyAhPT0gJ2F1dG8nLFxuICAgICAgICAnZGl0by13aWR0aC1ncm93JzogdGhpcy5mbGV4R3JvdyxcbiAgICAgICAgJ2RpdG8td2lkdGgtc2hyaW5rJzogdGhpcy5mbGV4U2hyaW5rXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhbmVsRW50cmllcygpIHtcbiAgICAgIHJldHVybiBnZXRBbGxQYW5lbEVudHJpZXMoXG4gICAgICAgIHRoaXMuYXBpLFxuICAgICAgICB0aGlzLnNjaGVtYSxcbiAgICAgICAgdGhpcy5kYXRhUGF0aCxcbiAgICAgICAgdGhpcy4kcmVmcy5jb21wb25lbnQsXG4gICAgICAgIHRoaXMudGFiQ29tcG9uZW50XG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBvbkVycm9ycyhlcnJvcnMpIHtcbiAgICAgIHRoaXMuZXJyb3JzID0gZXJyb3JzXG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY29udGFpbmVyIHtcbiAgLS1ncm93OiAwO1xuICAtLXNocmluazogMTtcbiAgLS1iYXNpczogYXV0bztcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXg6IHZhcigtLWdyb3cpIHZhcigtLXNocmluaykgdmFyKC0tYmFzaXMpO1xuICBmbGV4LWZsb3c6IGNvbHVtbjtcbiAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIC8vIFRvIHByZXZlbnQgbGlzdCB0YWJsZXMgZnJvbSBibG93aW5nIG91dCBvZiB0aGVpciBmbGV4IGJveCBjb250YWluZXJzLlxuICBtYXgtd2lkdGg6IDEwMCU7XG4gIC8vIENhbm5vdCB1c2UgbWFyZ2luIGhlcmUgYXMgaXQgbmVlZHMgdG8gYmUgcGFydCBvZiBib3gtc2l6aW5nIGZvclxuICAvLyBwZXJjZW50YWdlcyBpbiBmbGV4LWJhc2lzIHRvIHdvcmsuXG4gIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmctaGFsZjtcblxuICAuZGl0by1wYW5lID4gJiB7XG4gICAgLmRpdG8tcGFnZS0td2lkdGgtODAgJiB7XG4gICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICBmbGV4LWJhc2lzOiB2YXIoLS1iYXNpcy1tb2JpbGUsIHZhcigtLWJhc2lzKSk7XG4gICAgICAvLyBERUJVRzogYmFja2dyb3VuZDogeWVsbG93O1xuICAgIH1cblxuICAgIC5kaXRvLXBhZ2UtLXdpZHRoLTYwICYge1xuICAgICAgZmxleC1iYXNpczogY2FsYygyICogdmFyKC0tYmFzaXMpKTtcbiAgICAgIC8vIERFQlVHOiBiYWNrZ3JvdW5kOiBvcmFuZ2U7XG4gICAgfVxuXG4gICAgLmRpdG8tc2lkZWJhci0td2lkdGgtOTkgJiB7XG4gICAgICBmbGV4LWdyb3c6IDE7XG4gICAgICAvLyBERUJVRzogYmFja2dyb3VuZDogeWVsbG93O1xuICAgIH1cblxuICAgIC5kaXRvLXNpZGViYXItLXdpZHRoLTYwICYge1xuICAgICAgZmxleC1iYXNpczogY2FsYygyICogdmFyKC0tYmFzaXMpKTtcbiAgICAgIC8vIERFQlVHOiBiYWNrZ3JvdW5kOiBvcmFuZ2U7XG4gICAgfVxuICB9XG5cbiAgJjplbXB0eSB7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuXG4gICYtLXNpbmdsZSB7XG4gICAgaGVpZ2h0OiAxMDAlOyAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IGF0IHRoZSBib3R0b207XG4gICAgLy8gSnVzdCBsaWtlIG9uIERpdG9QYW5lLCBjbGVhciBzZXR0aW5ncyBmcm9tIGFib3ZlLlxuICAgIHBhZGRpbmc6IDA7XG4gIH1cblxuICAmLS1sYWJlbC12ZXJ0aWNhbCB7XG4gICAgLy8gRm9yIHBsYWluIGNvbXBvbmVudHMgd2l0aG91dCBsYWJlbHMgaW4gcm93cyB3aXRoIG90aGVyIGNvbXBvbmVudHMgdGhhdFxuICAgIC8vIGhhdmUgbGFiZWxzLCBhZGQgc29tZSBzcGFjaW5nIHRvIHRoZSB0b3AgdG8gYWxpZ24gd2l0aCB0aGUgb3RoZXJcbiAgICAvLyBjb21wb25lbnRzIChlLmcuICBidXR0b25zKTpcbiAgICA+IC5kaXRvLWNvbXBvbmVudDpmaXJzdC1jaGlsZDpub3QoLmRpdG8tc2VjdGlvbiwgLmRpdG8tbGlzdCwgLmRpdG8tb2JqZWN0KSB7XG4gICAgICBtYXJnaW4tdG9wOiAkaW5wdXQtaGVpZ2h0O1xuICAgIH1cbiAgfVxuXG4gICYtLW9taXQtc3BhY2luZyB7XG4gICAgcGFkZGluZzogMDtcblxuICAgID4gLmRpdG8tbGFiZWwge1xuICAgICAgbWFyZ2luOiAkZm9ybS1zcGFjaW5nLWhhbGYgJGZvcm0tc3BhY2luZy1oYWxmIDA7XG4gICAgfVxuICB9XG59XG5cbi8vIE5PVEU6IFRoaXMgaXMgbm90IG5lc3RlZCBpbnNpZGUgYC5kaXRvLWNvbnRhaW5lcmAgc28gdGhhdCBvdGhlclxuLy8gdHlwZSBjb21wb25lbnRzIGNhbiBvdmVycmlkZSBgLmRpdG8td2lkdGgtZmlsbGAgY2xhc3MgKGZpbHRlciBwcmVjZWRlbmNlKS5cbi5kaXRvLWNvbXBvbmVudCB7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuICAmLmRpdG8td2lkdGgtZmlsbCB7XG4gICAgd2lkdGg6IDEwMCU7XG5cbiAgICAmLmRpdG8tY2hlY2tib3gsXG4gICAgJi5kaXRvLXJhZGlvLWJ1dHRvbiB7XG4gICAgICAvLyBXZWJLaXQgZG9lc24ndCBsaWtlIGNoYW5nZWQgd2lkdGggb24gY2hlY2tib3hlcyBhbmQgcmFkaW9zLCBvdmVycmlkZTpcbiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgIHdpZHRoOiBhdXRvO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by10YWJzXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwiKHRhYlNjaGVtYSwga2V5KSBpbiB0YWJzXCJcbiAgKVxuICAgIGEuZGl0by1saW5rKFxuICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYSh0YWJTY2hlbWEpXCJcbiAgICAgIDprZXk9XCJrZXlcIlxuICAgICAgOmNsYXNzPVwieyAnZGl0by1hY3RpdmUnOiBtb2RlbFZhbHVlID09PSBrZXkgfVwiXG4gICAgICBAY2xpY2s9XCIkZW1pdCgndXBkYXRlOm1vZGVsVmFsdWUnLCBrZXkpXCJcbiAgICApIHt7IGdldExhYmVsKHRhYlNjaGVtYSwga2V5KSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RhYnMnLCB7XG4gIGVtaXRzOiBbJ3VwZGF0ZTptb2RlbFZhbHVlJ10sXG4gIHByb3BzOiB7XG4gICAgdGFiczogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBtb2RlbFZhbHVlOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AdXNlICdzYXNzOmNvbG9yJztcbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRhYnMge1xuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5kaXRvLWxpbmsge1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAgICY6aG92ZXIge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLXdoaXRlO1xuICAgIH1cblxuICAgIC8vIFdoZW4gaW4gbWFpbiBoZWFkZXI6XG4gICAgLmRpdG8taGVhZGVyICYge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0O1xuICAgICAgcGFkZGluZzogJHRhYi1wYWRkaW5nLXZlciAkdGFiLXBhZGRpbmctaG9yO1xuICAgICAgbWFyZ2luLWxlZnQ6ICR0YWItbWFyZ2luO1xuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogJHRhYi1yYWRpdXM7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJHRhYi1yYWRpdXM7XG5cbiAgICAgICY6YWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0O1xuICAgICAgfVxuXG4gICAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXN0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFdoZW4gaW5zaWRlIGEgaW5saW5lIHNjaGVtYTpcbiAgICAuZGl0by1zY2hlbWEtaW5saW5lZCAmLFxuICAgIC5kaXRvLWxhYmVsICYge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWxpZ2h0ZXI7XG4gICAgICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgICAgIG1hcmdpbi1sZWZ0OiAtJGJvcmRlci13aWR0aDtcbiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7XG5cbiAgICAgICY6Zmlyc3QtY2hpbGQge1xuICAgICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkdGFiLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogJHRhYi1yYWRpdXM7XG4gICAgICB9XG5cbiAgICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkdGFiLXJhZGl1cztcbiAgICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6ICR0YWItcmFkaXVzO1xuICAgICAgfVxuXG4gICAgICAmOmFjdGl2ZSB7XG4gICAgICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyO1xuICAgICAgfVxuXG4gICAgICAmLmRpdG8tYWN0aXZlIHtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiBjb2xvci5hZGp1c3QoJGNvbG9yLWFjdGl2ZSwgJGxpZ2h0bmVzczogLTEwJSk7XG4gICAgICAgIGNvbG9yOiAkY29sb3Itd2hpdGU7XG4gICAgICAgIHotaW5kZXg6IDE7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tc2NoZW1hICYge1xuICAgIC8vIFB1c2ggY2xpcGJvYXJkIHRvIHRoZSByaWdodCBpbiB0aGUgZmxleCBsYXlvdXQsIHNlZTpcbiAgICAvLyBodHRwczovL2NvZGVwZW4uaW8vdGhvbGV4L3Blbi9odmVCeC9cbiAgICBtYXJnaW4tbGVmdDogYXV0bztcblxuICAgICY6bGFzdC1jaGlsZCB7XG4gICAgICBtYXJnaW4tcmlnaHQ6IGF1dG87XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBPbmx5IHNob3cgcGFuZWxzIGluIHRhYnMgd2hlbiB0aGUgdGFicyBhcmUgYWxzbyB2aXNpYmxlLlxuY29tcG9uZW50LmRpdG8tcGFuZWwoXG4gIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEocGFuZWxTY2hlbWEpXCJcbiAgdi1zaG93PVwidmlzaWJsZSAmJiAoIXBhbmVsVGFiQ29tcG9uZW50IHx8IHBhbmVsVGFiQ29tcG9uZW50LnZpc2libGUpXCJcbiAgOmlzPVwicGFuZWxUYWdcIlxuICBAc3VibWl0LnByZXZlbnRcbilcbiAgRGl0b1NjaGVtYS5kaXRvLXBhbmVsX19zY2hlbWEoXG4gICAgOnNjaGVtYT1cInBhbmVsU2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgcGFkZGluZz1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgIDpoYXNPd25EYXRhPVwiaGFzT3duRGF0YVwiXG4gICAgZ2VuZXJhdGVMYWJlbHNcbiAgKVxuICAgIHRlbXBsYXRlKCNiZWZvcmUpXG4gICAgICBoMi5kaXRvLXBhbmVsX19oZWFkZXIoOmNsYXNzPVwieyAnZGl0by1wYW5lbF9faGVhZGVyLS1zdGlja3knOiBzdGlja3kgfVwiKVxuICAgICAgICBzcGFuIHt7IGdldExhYmVsKHNjaGVtYSkgfX1cbiAgICAgICAgRGl0b0J1dHRvbnMuZGl0by1idXR0b25zLXNtYWxsKFxuICAgICAgICAgIDpidXR0b25zPVwicGFuZWxCdXR0b25TY2hlbWFzXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJwYW5lbERhdGFQYXRoXCJcbiAgICAgICAgICA6ZGF0YT1cInBhbmVsRGF0YVwiXG4gICAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICApXG4gICAgdGVtcGxhdGUoI2J1dHRvbnMpXG4gICAgICBEaXRvQnV0dG9ucyhcbiAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgOmRhdGFQYXRoPVwicGFuZWxEYXRhUGF0aFwiXG4gICAgICAgIDpkYXRhPVwicGFuZWxEYXRhXCJcbiAgICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHsgaXNGdW5jdGlvbiB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFZhbGlkYXRvck1peGluIGZyb20gJy4uL21peGlucy9WYWxpZGF0b3JNaXhpbi5qcydcbmltcG9ydCB7IGdldEJ1dHRvblNjaGVtYXMgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9QYW5lbCcsIHtcbiAgbWl4aW5zOiBbVmFsaWRhdG9yTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgICR0YWJDb21wb25lbnQ6ICgpID0+IHRoaXMucGFuZWxUYWJDb21wb25lbnRcbiAgICB9XG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYW5lbFRhYkNvbXBvbmVudDogeyB0eXBlOiBPYmplY3QsIGRlZmF1bHQ6IG51bGwgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG93bkRhdGE6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBwYW5lbENvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfSxcblxuICAgIHRhYkNvbXBvbmVudCgpIHtcbiAgICAgIHJldHVybiB0aGlzLnBhbmVsVGFiQ29tcG9uZW50XG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5idXR0b25zKVxuICAgIH0sXG5cbiAgICBwYW5lbEJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyh0aGlzLnNjaGVtYS5wYW5lbEJ1dHRvbnMpXG4gICAgfSxcblxuICAgIGhhc093bkRhdGEoKSB7XG4gICAgICByZXR1cm4gISF0aGlzLm93bkRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMub3duRGF0YSB8fCB0aGlzLmRhdGFcbiAgICB9LFxuXG4gICAgcGFuZWxTY2hlbWEoKSB7XG4gICAgICBpZiAodGhpcy5oYXNPd25EYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUmVtb3ZlIGBkYXRhYCBmcm9tIHRoZSBzY2hlbWEsIHNvIHRoYXQgRGl0b1NjaGVtYSBpc24ndCB1c2luZyBpdCB0b1xuICAgICAgICAvLyBwcm9kdWNlIGl0cyBvd24gZGF0YS4gU2VlICRmaWx0ZXJzIHBhbmVsIGZvciBtb3JlIGRldGFpbHMgb24gZGF0YS5cbiAgICAgICAgY29uc3QgeyBkYXRhLCAuLi5zY2hlbWEgfSA9IHRoaXMuc2NoZW1hXG4gICAgICAgIHJldHVybiBzY2hlbWFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcGFuZWxUYWcoKSB7XG4gICAgICAvLyBQYW5lbHMgdGhhdCBwcm92aWRlIHRoZWlyIG93biBkYXRhIG5lZWQgdGhlaXIgb3duIGZvcm0uXG4gICAgICByZXR1cm4gdGhpcy5oYXNPd25EYXRhID8gJ2Zvcm0nIDogJ2RpdidcbiAgICB9LFxuXG4gICAgcGFuZWxEYXRhUGF0aCgpIHtcbiAgICAgIC8vIElmIHRoZSBwYW5lbCBwcm92aWRlcyBpdHMgb3duIGRhdGEsIHRoZW4gaXQgbmVlZHMgdG8gcHJlZml4IGFsbFxuICAgICAgLy8gY29tcG9uZW50cyB3aXRoIGl0cyBkYXRhLXBhdGgsIGJ1dCBpZiBpdCBzaGFyZXMgZGF0YSB3aXRoIHRoZSBzY2hlbWFcbiAgICAgIC8vIGNvbXBvbmVudCwgdGhlbiBpdCBzaG91bGQgc2hhcmUgdGhlIGRhdGEtcGF0aCBuYW1lIHNwYWNlIHRvby5cbiAgICAgIHJldHVybiB0aGlzLmhhc093bkRhdGEgPyB0aGlzLmRhdGFQYXRoIDogdGhpcy5zY2hlbWFDb21wb25lbnQuZGF0YVBhdGhcbiAgICB9LFxuXG4gICAgdmlzaWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3Zpc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pLFxuXG4gICAgc3RpY2t5OiBnZXRTY2hlbWFBY2Nlc3Nvcignc3RpY2t5Jywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKHRydWUpXG4gICAgLy8gTk9URTogVGhpcyBpcyBub3QgdGhlIHNhbWUgYXMgYHNjaGVtYS5kYXRhYCBoYW5kbGluZyBpbiBEaXRvU2NoZW1hLFxuICAgIC8vIHdoZXJlIHRoZSBkYXRhIGlzIGFkZGVkIHRvIHRoZSBhY3R1YWwgY29tcG9uZW50LlxuICAgIGNvbnN0IHsgZGF0YSB9ID0gdGhpcy5zY2hlbWFcbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5vd25EYXRhID0gaXNGdW5jdGlvbihkYXRhKVxuICAgICAgICA/IGRhdGEodGhpcy5jb250ZXh0KVxuICAgICAgICA6IGRhdGFcbiAgICB9XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMuX3JlZ2lzdGVyKGZhbHNlKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBfcmVnaXN0ZXIoYWRkKSB7XG4gICAgICAvLyBSZWdpc3RlciB0aGUgcGFuZWxzIHNvIHRoYXQgb3RoZXIgY29tcG9uZW50cyBjYW4gZmluZCB0aGVtIGJ5IHRoZWlyXG4gICAgICAvLyBkYXRhLXBhdGgsIGUuZy4gaW4gVHlwZUxpc3Qub25GaWx0ZXJFcnJvcnMoKVxuICAgICAgdGhpcy5zY2hlbWFDb21wb25lbnQuX3JlZ2lzdGVyUGFuZWwodGhpcywgYWRkKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhbmVsIHtcbiAgJjpub3QoOmxhc3QtY2hpbGQpIHtcbiAgICBtYXJnaW4tYm90dG9tOiAkY29udGVudC1wYWRkaW5nO1xuICB9XG5cbiAgJl9faGVhZGVyIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgICBiYWNrZ3JvdW5kOiAkYnV0dG9uLWNvbG9yO1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG5cbiAgICAmLS1zdGlja3kge1xuICAgICAgJG1hcmdpbjogJGlucHV0LWhlaWdodC1mYWN0b3IgKiAkbGluZS1oZWlnaHQgKiAkZm9udC1zaXplLXNtYWxsICtcbiAgICAgICAgJGZvcm0tc3BhY2luZztcblxuICAgICAgcG9zaXRpb246IHN0aWNreTtcbiAgICAgIHRvcDogJGNvbnRlbnQtcGFkZGluZztcbiAgICAgIG1hcmdpbi1ib3R0b206ICRtYXJnaW47XG4gICAgICB6LWluZGV4OiAxO1xuXG4gICAgICAmICsgKiB7XG4gICAgICAgIG1hcmdpbi10b3A6IC0kbWFyZ2luO1xuICAgICAgfVxuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgICAgbGVmdDogMDtcbiAgICAgICAgcmlnaHQ6IDA7XG4gICAgICAgIGhlaWdodDogJGNvbnRlbnQtcGFkZGluZztcbiAgICAgICAgdG9wOiAtJGNvbnRlbnQtcGFkZGluZztcbiAgICAgICAgbWFyZ2luOiAtJGJvcmRlci13aWR0aDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1idXR0b25zIHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHJpZ2h0OiAkaW5wdXQtcGFkZGluZy12ZXI7XG4gICAgICB0b3A6IDUwJTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTtcbiAgICB9XG4gIH1cblxuICAmX19zY2hlbWEge1xuICAgIGZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1zbWFsbDtcbiAgICBiYWNrZ3JvdW5kOiAkY29udGVudC1jb2xvci1iYWNrZ3JvdW5kO1xuICAgIGJvcmRlcjogJGJvcmRlci1zdHlsZTtcbiAgICBib3JkZXItdG9wOiAwO1xuICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcblxuICAgID4gLmRpdG8tc2NoZW1hLWNvbnRlbnQge1xuICAgICAgLmRpdG8tb2JqZWN0IHtcbiAgICAgICAgYm9yZGVyOiBub25lO1xuICAgICAgICBwYWRkaW5nOiAwO1xuICAgICAgfVxuXG4gICAgICA+IC5kaXRvLWJ1dHRvbnMge1xuICAgICAgICAtLWJ1dHRvbi1tYXJnaW46ICN7JGZvcm0tc3BhY2luZ307XG5cbiAgICAgICAgcGFkZGluZzogJGZvcm0tc3BhY2luZztcblxuICAgICAgICAuZGl0by1jb250YWluZXIge1xuICAgICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAuZGl0by1sYWJlbCB7XG4gICAgICBsYWJlbCB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXBhbmVscyhcbiAgdi1pZj1cInBhbmVscy5sZW5ndGggPiAwXCJcbilcbiAgdGVtcGxhdGUoXG4gICAgdi1mb3I9XCJ7IHNjaGVtYSwgZGF0YVBhdGgsIHRhYkNvbXBvbmVudCB9IGluIHBhbmVsc1wiXG4gIClcbiAgICBEaXRvUGFuZWwoXG4gICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKHNjaGVtYSlcIlxuICAgICAgOmtleT1cImdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpXCJcbiAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICA6c3RvcmU9XCJnZXRDaGlsZFN0b3JlKHNjaGVtYS5uYW1lKVwiXG4gICAgICA6ZGlzYWJsZWQ9XCJzY2hlbWEuZGlzYWJsZWQgPz8gZGlzYWJsZWRcIlxuICAgICAgOnBhbmVsVGFiQ29tcG9uZW50PVwidGFiQ29tcG9uZW50XCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvUGFuZWxzJywge1xuICBwcm9wczoge1xuICAgIHBhbmVsczogeyB0eXBlOiBBcnJheSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCByZXF1aXJlZDogdHJ1ZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFBhbmVsS2V5KGRhdGFQYXRoLCB0YWJDb21wb25lbnQpIHtcbiAgICAgIC8vIEFsbG93IHNlcGFyYXRlIHRhYnMgdG8gdXNlIHBhbmVscyBvZiB0aGUgc2FtZSBuYW1lLCBieVxuICAgICAgLy8gcHJlZml4aW5nIHRoZWlyIGtleSB3aXRoIHRoZSB0YWIgbmFtZS5cbiAgICAgIHJldHVybiB0YWJDb21wb25lbnQgPyBgJHt0YWJDb21wb25lbnQudGFifV8ke2RhdGFQYXRofWAgOiBkYXRhUGF0aFxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXBhbmVscyB7XG4gIG1hcmdpbjogJGNvbnRlbnQtcGFkZGluZztcbiAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmc7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWJ1dHRvbnMoXG4gIHYtaWY9XCJidXR0b25TY2hlbWFzIHx8IGhhc1Nsb3RDb250ZW50KCRzbG90cy5kZWZhdWx0KVwiXG4pXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwiKGJ1dHRvblNjaGVtYSwgYnV0dG9uRGF0YVBhdGgpIGluIGJ1dHRvblNjaGVtYXNcIlxuICApXG4gICAgRGl0b0NvbnRhaW5lcihcbiAgICAgIHYtaWY9XCJzaG91bGRSZW5kZXJTY2hlbWEoYnV0dG9uU2NoZW1hKVwiXG4gICAgICA6a2V5PVwiYnV0dG9uRGF0YVBhdGhcIlxuICAgICAgOnNjaGVtYT1cImJ1dHRvblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJidXR0b25EYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cImdldENoaWxkU3RvcmUoYnV0dG9uU2NoZW1hLm5hbWUpXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICApXG4gIHRlbXBsYXRlKFxuICAgIHYtZm9yPVwidm5vZGUgb2YgJHNsb3RzLmRlZmF1bHQ/LigpXCJcbiAgKVxuICAgIC8vLSBSZW5kZXIgZWFjaCBub2RlIGluIHRoZSBkZWZhdWx0IHNsb3QgdGhyb3VnaCBgZGl0by12bm9kZWAsXG4gICAgLy8tIHNvIGl0IGNhbiBiZSB3cmFwcGVkIGluIGEgYC5kaXRvLWNvbnRhaW5lcmAgY2xhc3MuXG4gICAgLmRpdG8tY29udGFpbmVyKFxuICAgICAgdi1pZj1cImhhc1ZOb2RlQ29udGVudCh2bm9kZSlcIlxuICAgIClcbiAgICAgIERpdG9Wbm9kZSg6dm5vZGU9XCJ2bm9kZVwiKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBoYXNTbG90Q29udGVudCwgaGFzVk5vZGVDb250ZW50IH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b0J1dHRvbnMnLCB7XG4gIHByb3ZpZGU6IHtcbiAgICAkdGFiQ29tcG9uZW50OiAoKSA9PiBudWxsXG4gIH0sXG5cbiAgcHJvcHM6IHtcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogJycgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCBkZWZhdWx0OiAoKSA9PiAoe30pIH0sXG4gICAgZGlzYWJsZWQ6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgYnV0dG9uU2NoZW1hcygpIHtcbiAgICAgIC8vIENvbXB1dGUgYSBidXR0b25zIGxpc3Qgd2hpY2ggaGFzIHRoZSBkYXRhUGF0aCBiYWtlZCBpbnRvIGl0cyBrZXlzLlxuICAgICAgY29uc3QgeyBkYXRhUGF0aCwgYnV0dG9ucyB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGJ1dHRvbnNcbiAgICAgICAgPyBPYmplY3QudmFsdWVzKGJ1dHRvbnMpLnJlZHVjZSgoc2NoZW1hcywgYnV0dG9uKSA9PiB7XG4gICAgICAgICAgICBzY2hlbWFzW2FwcGVuZERhdGFQYXRoKGRhdGFQYXRoLCBidXR0b24ubmFtZSldID0gYnV0dG9uXG4gICAgICAgICAgICByZXR1cm4gc2NoZW1hc1xuICAgICAgICAgIH0sIHt9KVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhc1Nsb3RDb250ZW50LFxuICAgIGhhc1ZOb2RlQ29udGVudFxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tYnV0dG9ucyB7XG4gID4gLmRpdG8tY29udGFpbmVyIHtcbiAgICBwYWRkaW5nOiAwO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi8vLSBTZXQgYEBjbGljay5zdG9wYCB0byBwcmV2ZW50IGNsaWNrIGV2ZW50cyBmcm9tIGJ1YmJsaW5nIHRvIGRpdG8tbGFiZWwuXG5EaXRvQnV0dG9ucy5kaXRvLWVkaXQtYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmQoXG4gIDpidXR0b25zPVwiYnV0dG9uc1wiXG4gIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgOmRhdGE9XCJkYXRhXCJcbiAgOm1ldGE9XCJtZXRhXCJcbiAgOnN0b3JlPVwic3RvcmVcIlxuICBAY2xpY2suc3RvcFxuKVxuICAvLy0gRmlyZWZveCBkb2Vzbid0IGxpa2UgPGJ1dHRvbj4gaGVyZSwgc28gdXNlIDxhPiBpbnN0ZWFkOlxuICBhLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tZGlzYWJsZWQnOiBpc0RyYWdnYWJsZURpc2FibGVkIH1cIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZHJhZylcIlxuICApXG4gIFJvdXRlckxpbmsuZGl0by1idXR0b24oXG4gICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICA6Y2xhc3M9XCJ7ICdkaXRvLWRpc2FibGVkJzogaXNFZGl0YWJsZURpc2FibGVkIH1cIlxuICAgIDp0bz1cImVkaXRQYXRoID8geyBwYXRoOiBlZGl0UGF0aCB9IDoge31cIlxuICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICApXG4gIERpdG9DcmVhdGVCdXR0b24oXG4gICAgdi1pZj1cImNyZWF0YWJsZVwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOnBhdGg9XCJjcmVhdGVQYXRoXCJcbiAgICA6dmVyYj1cInZlcmJzLmNyZWF0ZVwiXG4gICAgOnRleHQ9XCJjcmVhdGVCdXR0b25UZXh0XCJcbiAgICA6ZGlzYWJsZWQ9XCJpc0NyZWF0YWJsZURpc2FibGVkXCJcbiAgKVxuICBidXR0b24uZGl0by1idXR0b24oXG4gICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgOmRpc2FibGVkPVwiaXNEZWxldGFibGVEaXNhYmxlZFwiXG4gICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICBAY2xpY2s9XCIkZW1pdCgnZGVsZXRlJylcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGNhcGl0YWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9FZGl0QnV0dG9ucycsIHtcbiAgZW1pdHM6IFsnZGVsZXRlJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBidXR0b25zOiB7IHR5cGU6IE9iamVjdCwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHNjaGVtYTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZGF0YVBhdGg6IHsgdHlwZTogU3RyaW5nLCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGE6IHsgdHlwZTogW09iamVjdCwgQXJyYXldLCBkZWZhdWx0OiBudWxsIH0sXG4gICAgbWV0YTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc3RvcmU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgZHJhZ2dhYmxlOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IGZhbHNlIH0sXG4gICAgZWRpdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBjcmVhdGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkZWxldGFibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBlZGl0UGF0aDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBjcmVhdGVQYXRoOiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBmb3JtTGFiZWwoKSB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRMYWJlbCh0aGlzLnNjaGVtYS5mb3JtKVxuICAgIH0sXG5cbiAgICBpc0RyYWdnYWJsZURpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuaGFzU2NoZW1hT3B0aW9uKCdkcmFnZ2FibGUnKVxuICAgIH0sXG5cbiAgICBpc0RlbGV0YWJsZURpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMuaGFzU2NoZW1hT3B0aW9uKCdkZWxldGFibGUnKVxuICAgIH0sXG5cbiAgICBpc0VkaXRhYmxlRGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmRpc2FibGVkIHx8XG4gICAgICAgICF0aGlzLmVkaXRQYXRoIHx8XG4gICAgICAgICF0aGlzLmhhc1NjaGVtYU9wdGlvbignZWRpdGFibGUnKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBpc0NyZWF0YWJsZURpc2FibGVkKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5kaXNhYmxlZCB8fFxuICAgICAgICAhdGhpcy5jcmVhdGVQYXRoIHx8XG4gICAgICAgICF0aGlzLmhhc1NjaGVtYU9wdGlvbignY3JlYXRhYmxlJylcbiAgICAgIClcbiAgICB9LFxuXG4gICAgY3JlYXRlQnV0dG9uVGV4dCgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8vIEFsbG93IHNjaGVtYSB0byBvdmVycmlkZSBjcmVhdGUgYnV0dG9uIHRocm91Z2ggY3JlYXRhYmxlIG9iamVjdDpcbiAgICAgICAgdGhpcy5zY2hlbWEuY3JlYXRhYmxlPy5sYWJlbCB8fCAoXG4gICAgICAgICAgLy8gQXV0by1nZW5lcmF0ZSBjcmVhdGUgYnV0dG9uIGxhYmVscyBmcm9tIGZyb20gbGFiZWxzIGZvciBsaXN0XG4gICAgICAgICAgLy8gc291cmNlcyB3aXRoIG9ubHkgb25lIGZvcm06XG4gICAgICAgICAgdGhpcy5mb3JtTGFiZWwgJiZcbiAgICAgICAgICBgJHtjYXBpdGFsaXplKHRoaXMudmVyYnMuY3JlYXRlKX0gJHt0aGlzLmZvcm1MYWJlbH1gXG4gICAgICAgICkgfHxcbiAgICAgICAgbnVsbFxuICAgICAgKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgaGFzU2NoZW1hT3B0aW9uKG5hbWUpIHtcbiAgICAgIC8vIEFsbCBvcHRpb25zIGNhbiBiZSBkaXNhYmxlZCBvbiBhIHBlci1mb3JtIGJhc2lzIGJ5IHNldHRpbmdcbiAgICAgIC8vIGBzY2hlbWFbbmFtZV1gIHRvIGBmYWxzZWAgb3IgYSBjYWxsYmFjayByZXR1cm5pbmcgYGZhbHNlYC5cbiAgICAgIHJldHVybiB0aGlzLmdldFNjaGVtYVZhbHVlKG5hbWUsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1lZGl0LWJ1dHRvbnMge1xuICAvLyBPdmVycmlkZSBjdXJzb3IgZnJvbSBjb2xsYXBzaWJsZSBkaXRvLWxhYmVsOlxuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIGZsZXg6IG5vbmU7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNyZWF0ZS1idXR0b25cbiAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgIHYtaWY9XCJjcmVhdGFibGVGb3JtXCJcbiAgICA6dHlwZT1cImlzSW5saW5lZCA/ICdidXR0b24nIDogJ3N1Ym1pdCdcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmIpXCJcbiAgICBAY2xpY2s9XCJjcmVhdGVJdGVtKGNyZWF0YWJsZUZvcm0pXCJcbiAgKSB7eyB0ZXh0IH19XG4gIHRlbXBsYXRlKFxuICAgIHYtZWxzZS1pZj1cImNyZWF0YWJsZUZvcm1zXCJcbiAgKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJiKVwiXG4gICAgICBAbW91c2Vkb3duLnN0b3A9XCJvblB1bGxkb3duTW91c2VEb3duKClcIlxuICAgICkge3sgdGV4dCB9fVxuICAgIHVsLmRpdG8tcHVsbGRvd24oOmNsYXNzPVwieyAnZGl0by1vcGVuJzogcHVsbGRvd24ub3BlbiB9XCIpXG4gICAgICBsaShcbiAgICAgICAgdi1mb3I9XCIoZm9ybSwgdHlwZSkgaW4gY3JlYXRhYmxlRm9ybXNcIlxuICAgICAgKVxuICAgICAgICBhKFxuICAgICAgICAgIHYtc2hvdz1cInNob3VsZFNob3dTY2hlbWEoZm9ybSlcIlxuICAgICAgICAgIDpjbGFzcz1cImdldEZvcm1DbGFzcyhmb3JtLCB0eXBlKVwiXG4gICAgICAgICAgQG1vdXNlZG93bi5zdG9wPVwib25QdWxsZG93bk1vdXNlRG93bih0eXBlKVwiXG4gICAgICAgICAgQG1vdXNldXA9XCJvblB1bGxkb3duTW91c2VVcCh0eXBlKVwiXG4gICAgICAgICkge3sgZ2V0TGFiZWwoZm9ybSkgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFB1bGxkb3duTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1B1bGxkb3duTWl4aW4uanMnXG5pbXBvcnQgeyBnZXRGb3JtU2NoZW1hcywgaXNJbmxpbmVkIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9DcmVhdGVCdXR0b24nLCB7XG4gIG1peGluczogW1B1bGxkb3duTWl4aW5dLFxuXG4gIHByb3BzOiB7XG4gICAgc2NoZW1hOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICAvLyBUaGUgbmV4dCBmb3VyIHByb3BzIGFyZSB0aGVyZSBmb3IgYERpdG9Db250ZXh0YCBhbmQgdGhlIGBjb250ZXh0KClgXG4gICAgLy8gZ2V0dGVyIGluIGBEaXRvTWl4aW5gLlxuICAgIC8vIFRPRE86IFNob3VsZCB0aGV5IGJlIG1vdmVkIHRvIHNoYXJlZCBtaXhpbiB0aGF0IGRlZmluZXMgdGhlbSBhcyByZXF1aXJlZFxuICAgIC8vIGFuZCBhbHNvIHByb3ZpZGVzIHRoZSBgY29udGV4dCgpYCBnZXR0ZXIsIHBlcmhhcHMgYENvbnRleHRNaXhpbmA/XG4gICAgLy8gYHNjaGVtYWAgY291bGQgYmUgaW5jbHVkZWQgYXMgd2VsbCwgYW5kIGBDb250ZXh0TWl4aW5gIGNvdWxkIGJlIHVzZWQgaW5cbiAgICAvLyBgRGl0b0Zvcm1gLCBgRGl0b1ZpZXdgLCBgRGl0b1BhbmVsYCwgYERpdG9TY2hlbWFgLCBgRGl0b0VkaXRCdXR0b25zYCxcbiAgICAvLyBldGM/IEJ1dCB0aGUgcHJvYmxlbSB3aXRoIHRoZSByb290IGNvbXBvbmVudHMgaXMgdGhhdCB0aGV5IGRvbid0IGhhdmVcbiAgICAvLyB0aGVzZSBwcm9wcy4gV2UgY291bGQgYWRkIGEgYGNvbnRleHRBdHRyaWJ1dGVzKClgIGdldHRlciBmb3IgZWFzeSBwYXNzaW5nXG4gICAgLy8gb24gYXMgYHYtYmluZD1cImNvbnRleHRBdHRyaWJ1dGVzXCJgLlxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIG1ldGE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHN0b3JlOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBwYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB2ZXJiOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0ZXh0OiB7IHR5cGU6IFN0cmluZywgZGVmYXVsdDogbnVsbCB9LFxuICAgIGRpc2FibGVkOiB7IHR5cGU6IEJvb2xlYW4sIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGZvcm1zKCkge1xuICAgICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpXG4gICAgfSxcblxuICAgIGNyZWF0YWJsZUZvcm1zKCkge1xuICAgICAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHRoaXMuZm9ybXMpLmZpbHRlcihcbiAgICAgICAgKFssIGZvcm1dKSA9PiB0aGlzLmlzRm9ybUNyZWF0YWJsZShmb3JtKVxuICAgICAgKVxuICAgICAgcmV0dXJuIGVudHJpZXMubGVuZ3RoID4gMFxuICAgICAgICA/IE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzKVxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgY3JlYXRhYmxlRm9ybSgpIHtcbiAgICAgIGNvbnN0IGZvcm1zID0gdGhpcy5jcmVhdGFibGVGb3Jtc1xuICAgICAgcmV0dXJuIGZvcm1zICYmIE9iamVjdC5rZXlzKGZvcm1zKS5sZW5ndGggPT09IDEgJiYgZm9ybXMuZGVmYXVsdCB8fCBudWxsXG4gICAgfSxcblxuICAgIGlzSW5saW5lZCgpIHtcbiAgICAgIHJldHVybiBpc0lubGluZWQodGhpcy5zY2hlbWEpXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBpc0Zvcm1DcmVhdGFibGUoZm9ybSkge1xuICAgICAgLy8gRm9ybXMgY2FuIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIGxpc3QgYnkgcHJvdmlkaW5nIGBpZjogZmFsc2VgIG9yXG4gICAgICAvLyBgY3JlYXRhYmxlOiBmYWxzZWAuXG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLnNob3VsZFJlbmRlclNjaGVtYShmb3JtKSAmJlxuICAgICAgICB0aGlzLmdldFNjaGVtYVZhbHVlKCdjcmVhdGFibGUnLCB7XG4gICAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgICBkZWZhdWx0OiB0cnVlLFxuICAgICAgICAgIHNjaGVtYTogZm9ybVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBjcmVhdGVJdGVtKGZvcm0sIHR5cGUgPSBudWxsKSB7XG4gICAgICBpZiAoIXRoaXMuc2hvdWxkRGlzYWJsZVNjaGVtYShmb3JtKSkge1xuICAgICAgICBpZiAodGhpcy5pc0lubGluZWQpIHtcbiAgICAgICAgICB0aGlzLnNvdXJjZUNvbXBvbmVudC5jcmVhdGVJdGVtKGZvcm0sIHR5cGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goe1xuICAgICAgICAgICAgcGF0aDogYCR7dGhpcy5wYXRofS9jcmVhdGVgLFxuICAgICAgICAgICAgcXVlcnk6IHsgdHlwZSB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3QgYWxsb3dlZCB0byBjcmVhdGUgaXRlbSBmb3IgZ2l2ZW4gZm9ybScpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEZvcm1DbGFzcyhmb3JtLCB0eXBlKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbYGRpdG8tdHlwZS0ke3R5cGV9YF06IHRydWUsXG4gICAgICAgICdkaXRvLWRpc2FibGVkJzogdGhpcy5zaG91bGREaXNhYmxlU2NoZW1hKGZvcm0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIG9uUHVsbGRvd25TZWxlY3QodHlwZSkge1xuICAgICAgdGhpcy5jcmVhdGVJdGVtKHRoaXMuZm9ybXNbdHlwZV0sIHR5cGUpXG4gICAgICB0aGlzLnNldFB1bGxkb3duT3BlbihmYWxzZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1jcmVhdGUtYnV0dG9uIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gIC5kaXRvLXB1bGxkb3duIHtcbiAgICByaWdodDogMDtcblxuICAgIC5kaXRvLWJ1dHRvbnMtc3RpY2t5ICYge1xuICAgICAgdG9wOiB1bnNldDtcbiAgICAgIHJpZ2h0OiB1bnNldDtcbiAgICAgIGJvdHRvbTogMDtcbiAgICAgIGxlZnQ6IDA7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNsaXBib2FyZC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kKFxuICB2LWlmPVwiY2xpcGJvYXJkXCJcbilcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLWNvcHkoXG4gICAgcmVmPVwiY29weURhdGFcIlxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiQ29weSBEYXRhXCJcbiAgICA6ZGlzYWJsZWQ9XCIhY29weUVuYWJsZWRcIlxuICAgIEBjbGljaz1cIm9uQ29weVwiXG4gIClcbiAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXBhc3RlKFxuICAgIHR5cGU9XCJidXR0b25cIlxuICAgIHRpdGxlPVwiUGFzdGUgRGF0YVwiXG4gICAgOmRpc2FibGVkPVwiIXBhc3RlRW5hYmxlZFwiXG4gICAgQGNsaWNrPVwib25QYXN0ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBpc09iamVjdCwgY2xvbmUsIGRlaW5kZW50IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9DbGlwYm9hcmQnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBwcm9wczoge1xuICAgIGNsaXBib2FyZDogeyB0eXBlOiBbQm9vbGVhbiwgT2JqZWN0XSwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtPYmplY3QsIEFycmF5XSwgZGVmYXVsdDogbnVsbCB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29weUVuYWJsZWQ6IGZhbHNlLFxuICAgICAgcGFzdGVFbmFibGVkOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNsaXBib2FyZE9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3QodGhpcy5jbGlwYm9hcmQpID8gdGhpcy5jbGlwYm9hcmQgOiB7fVxuICAgIH0sXG5cbiAgICBjb3B5RGF0YSgpIHtcbiAgICAgIGNvbnN0IHsgY29weSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gY29weVxuICAgICAgICA/IGNsaXBib2FyZERhdGEgPT5cbiAgICAgICAgICAgIGNvcHkuY2FsbCh0aGlzLCBuZXcgRGl0b0NvbnRleHQodGhpcywgeyBjbGlwYm9hcmREYXRhIH0pKVxuICAgICAgICA6IGNsaXBib2FyZERhdGEgPT4gY2xvbmUoY2xpcGJvYXJkRGF0YSlcbiAgICB9LFxuXG4gICAgcGFzdGVEYXRhKCkge1xuICAgICAgY29uc3QgeyBwYXN0ZSB9ID0gdGhpcy5jbGlwYm9hcmRPcHRpb25zXG4gICAgICByZXR1cm4gcGFzdGVcbiAgICAgICAgPyBjbGlwYm9hcmREYXRhID0+XG4gICAgICAgICAgICBwYXN0ZS5jYWxsKHRoaXMsIG5ldyBEaXRvQ29udGV4dCh0aGlzLCB7IGNsaXBib2FyZERhdGEgfSkpXG4gICAgICAgIDogY2xpcGJvYXJkRGF0YSA9PiBjbGlwYm9hcmREYXRhXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgLy8gQ2hlY2sgcmlnaHQgYXdheSBhbHNvIGluIGNhc2UgdGhlcmUncyBhbHJlYWR5IGRhdGEgKGUuZy4gY3JlYXRlIGZvcm0pOlxuICAgICdwYXJlbnRDb21wb25lbnQuaGFzRGF0YSc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICd1cGRhdGVDb3B5J1xuICAgIH0sXG5cbiAgICAnYXBwU3RhdGUuY2xpcGJvYXJkRGF0YSc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXI6ICd1cGRhdGVQYXN0ZSdcbiAgICB9XG4gIH0sXG5cbiAgbW91bnRlZCgpIHtcbiAgICAvLyBDaGVjayBjbGlwYm9hcmQgY29udGVudCB3aGVuZXZlciBzb21ldGhpbmcgZ2V0cyBjb3BpZWQgb3IgdGhlIHdpbmRvdyBnZXRzXG4gICAgLy8gKHJlKWFjdGl2YXRlZCwgYXMgdGhvc2UgYXJlIHRoZSBtb21lbnRzIHdoZW4gdGhlIGNsaXBib2FyZCBjYW4gY2hhbmdlOlxuICAgIHRoaXMuZG9tT24oZG9jdW1lbnQsIHsgY29weTogdGhpcy51cGRhdGVQYXN0ZSB9KVxuICAgIHRoaXMuZG9tT24od2luZG93LCB7IGZvY3VzOiB0aGlzLnVwZGF0ZVBhc3RlIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGNoZWNrQ2xpcGJvYXJkRGF0YShjbGlwYm9hcmREYXRhKSB7XG4gICAgICBjb25zdCB7ICRzY2hlbWEsIC4uLmRhdGEgfSA9IGNsaXBib2FyZERhdGEgfHwge31cbiAgICAgIHJldHVybiAkc2NoZW1hID09PSB0aGlzLnNjaGVtYS5uYW1lID8gZGF0YSA6IG51bGxcbiAgICB9LFxuXG4gICAgYXN5bmMgZ2V0Q2xpcGJvYXJkRGF0YShyZXBvcnQpIHtcbiAgICAgIC8vIFVzZSB0aGUgaW50ZXJuYWwgY2xpcGJvYXJkIGFzIGZhbGxiYWNrLlxuICAgICAgbGV0IHsgY2xpcGJvYXJkRGF0YSB9ID0gdGhpcy5hcHBTdGF0ZVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QganNvbiA9IGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQ/LnJlYWRUZXh0Py4oKVxuICAgICAgICBpZiAoanNvbikge1xuICAgICAgICAgIGNsaXBib2FyZERhdGEgPSBKU09OLnBhcnNlKGpzb24pXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAocmVwb3J0KSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihlcnIsIGVyci5uYW1lLCBlcnIubWVzc2FnZSlcbiAgICAgICAgICBpZiAoZXJyLm5hbWUgPT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgICAgIGFsZXJ0KGRlaW5kZW50YFxuICAgICAgICAgICAgICBUaGUgZGF0YSBpbiB0aGUgY2xpcGJvYXJkIGFwcGVhcnMgdG8gYmUgbWFsZm9ybWVkOlxuICAgICAgICAgICAgICAke2Vyci5tZXNzYWdlfVxuICAgICAgICAgICAgYClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmNoZWNrQ2xpcGJvYXJkRGF0YShjbGlwYm9hcmREYXRhKVxuICAgIH0sXG5cbiAgICB1cGRhdGVDb3B5KCkge1xuICAgICAgdGhpcy5jb3B5RW5hYmxlZCA9IHRoaXMucGFyZW50Q29tcG9uZW50Lmhhc0RhdGFcbiAgICB9LFxuXG4gICAgYXN5bmMgdXBkYXRlUGFzdGUoKSB7XG4gICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9ICEhdGhpcy5jaGVja0NsaXBib2FyZERhdGEodGhpcy5hcHBTdGF0ZS5jbGlwYm9hcmREYXRhKVxuICAgICAgaWYgKCF0aGlzLnBhc3RlRW5hYmxlZCAmJiB0aGlzLmFwcFN0YXRlLmFnZW50LmNocm9tZSkge1xuICAgICAgICAvLyBTZWUgaWYgdGhlIGNsaXBib2FyZCBjb250ZW50IGlzIHZhbGlkIEpTT04gZGF0YSB0aGF0IGlzIGNvbXBhdGlibGVcbiAgICAgICAgLy8gd2l0aCB0aGUgY3VycmVudCB0YXJnZXQgc2NoZW1hLCBhbmQgb25seSB0aGVuIGFjdGl2YXRlIHRoZSBwYXN0aW5nOlxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5nZXRDbGlwYm9hcmREYXRhKGZhbHNlKSAvLyBEb24ndCByZXBvcnRcbiAgICAgICAgdGhpcy5wYXN0ZUVuYWJsZWQgPSAhIWRhdGFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25Db3B5KCkge1xuICAgICAgbGV0IGRhdGEgPSB0aGlzLnBhcmVudENvbXBvbmVudC5jbGlwYm9hcmREYXRhXG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIGRhdGEgPSB7XG4gICAgICAgICAgICAkc2NoZW1hOiB0aGlzLnNjaGVtYS5uYW1lLFxuICAgICAgICAgICAgLi4udGhpcy5jb3B5RGF0YShkYXRhKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBLZWVwIGFuIGludGVybmFsIGNsaXBib2FyZCBhcyBmYWxsYmFjay5cbiAgICAgICAgdGhpcy5hcHBTdGF0ZS5jbGlwYm9hcmREYXRhID0gZGF0YVxuICAgICAgICB0aGlzLnBhc3RlRW5hYmxlZCA9IHRydWVcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMilcbiAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkPy53cml0ZVRleHQ/Lihqc29uKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVyciwgZXJyLm5hbWUsIGVyci5tZXNzYWdlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICBhbGVydChlcnJvci5tZXNzYWdlKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBvblBhc3RlKCkge1xuICAgICAgbGV0IGRhdGEgPSBhd2FpdCB0aGlzLmdldENsaXBib2FyZERhdGEodHJ1ZSkgLy8gUmVwb3J0XG4gICAgICB0cnkge1xuICAgICAgICBkYXRhID0gZGF0YSAmJiB0aGlzLnBhc3RlRGF0YShkYXRhKVxuICAgICAgICBpZiAoZGF0YSkge1xuICAgICAgICAgIHRoaXMucGFyZW50Q29tcG9uZW50LmNsaXBib2FyZERhdGEgPSBkYXRhXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpXG4gICAgICAgIGFsZXJ0KGVycm9yLm1lc3NhZ2UpXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2xpcGJvYXJkIHtcbiAgZGlzcGxheTogZmxleDtcblxuICAuZGl0by1zY2hlbWEgJiB7XG4gICAgLy8gUHVzaCBjbGlwYm9hcmQgdG8gdGhlIHJpZ2h0IGluIHRoZSBmbGV4IGxheW91dCwgc2VlOlxuICAgIC8vIGh0dHBzOi8vY29kZXBlbi5pby90aG9sZXgvcGVuL2h2ZUJ4L1xuICAgIG1hcmdpbi1sZWZ0OiBhdXRvO1xuICB9XG5cbiAgLmRpdG8taGVhZGVyICYge1xuICAgIG1hcmdpbi1sZWZ0OiAwO1xuXG4gICAgLmRpdG8tYnV0dG9uIHtcbiAgICAgIG1hcmdpbjogMCAwICR0YWItbWFyZ2luICR0YWItbWFyZ2luO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHNldExvYWRpbmcoaXNMb2FkaW5nLCB7IHVwZGF0ZVJvb3QgPSBmYWxzZSwgdXBkYXRlVmlldyA9IGZhbHNlIH0gPSB7fSkge1xuICAgICAgaWYgKCF0aGlzLmlzTG9hZGluZyBeICFpc0xvYWRpbmcpIHtcbiAgICAgICAgLy8gQm9vbGVhbiB4b3JcbiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSAhIWlzTG9hZGluZ1xuICAgICAgICBpZiAodXBkYXRlUm9vdCkge1xuICAgICAgICAgIHRoaXMucm9vdENvbXBvbmVudC5yZWdpc3RlckxvYWRpbmcoaXNMb2FkaW5nKVxuICAgICAgICB9XG4gICAgICAgIGlmICh1cGRhdGVWaWV3KSB7XG4gICAgICAgICAgdGhpcy52aWV3Q29tcG9uZW50LnNldExvYWRpbmcodGhpcy5pc0xvYWRpbmcpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBJdGVtTWl4aW4gZnJvbSAnLi9JdGVtTWl4aW4uanMnXG5pbXBvcnQgTG9hZGluZ01peGluIGZyb20gJy4vTG9hZGluZ01peGluLmpzJ1xuaW1wb3J0IHsgc2V0RGVmYXVsdFZhbHVlcyB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IGlzT2JqZWN0LCBpc1N0cmluZywgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluLCBMb2FkaW5nTWl4aW5dLFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRyZXNvdXJjZUNvbXBvbmVudDogKCkgPT4gdGhpcyxcbiAgICAgIC8vIFBhc3MgbG9jYWwgdmVyYnMgb3ZlcnJpZGVzIG9uIHRvIGNoaWxkcmVuLCBzZWUgdmVyYnMoKSBjb21wdXRlZCBwcm9wLlxuICAgICAgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzLFxuICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0aGlzLmhhc0RhdGFcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgbG9hZGVkRGF0YTogbnVsbCxcbiAgICAgIGFib3J0Q29udHJvbGxlcjogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHJlc291cmNlQ29tcG9uZW50KCkge1xuICAgICAgcmV0dXJuIHRoaXNcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICAvLyBSZXR1cm5zIHRoZSByZXNvdXJjZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSByZXNvdXJjZSBmb3IgdGhlXG4gICAgICAvLyBhc3NvY2lhdGVkIHNvdXJjZSBzY2hlbWEuXG4gICAgICByZXR1cm4gdGhpcy5nZXRSZXNvdXJjZSgpXG4gICAgfSxcblxuICAgIHByb3ZpZGVzRGF0YSgpIHtcbiAgICAgIC8vIFRoaXMgY29tcG9uZW50IGlzIGEgZGF0YS1zb3VyY2UgaWYgaXQgaGFzIGFuIGFzc29jaWF0ZWQgQVBJIHJlc291cmNlOlxuICAgICAgcmV0dXJuICEhdGhpcy5yZXNvdXJjZVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIC8vIFJldHVybnMgYGZhbHNlYGhlcmUsIGJ1dCBpcyBvdmVycmlkZGVuIHRvIHJldHVybiBgdHJ1ZWAgaW5cbiAgICAgIC8vIGBTb3VyY2VNaXhpbmAgZm9yIGNvbXBvbmVudCB0aGF0IGRvIG5vdCBwcm92aWRlIHRoZWlyIG93biBkYXRhLCBidXRcbiAgICAgIC8vIGVkaXQgdGhlaXIgaXRlbXMgdGhyb3VnaCBhIGxpbmtlZCB2aWV3LiAgSW4gdGhpcyBjYXNlLCByZWFsIGlkcyBuZWVkIHRvXG4gICAgICAvLyBiZSB1c2VkLlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgLy8gQ2hlY2sgdGhlIGZvcm0gdGhhdCB0aGlzIGNvbXBvbmVudCBiZWxvbmdzIHRvIGFzIHdlbGwsIHNpbmNlIGl0IG1heSBiZVxuICAgICAgLy8gaW4gY3JlYXRpb24gbW9kZSwgd2hpY2ggbWFrZXMgaXQgdHJhbnNpZW50LlxuICAgICAgLy8gTk9URTogVGhpcyBkb2VzIG5vdCBsb29wIGVuZGxlc3NseSBiZWNhdXNlIERpdG9Gb3JtIHJlZGVmaW5lc1xuICAgICAgLy8gYGlzVHJhbnNpZW50KClgIHRvIG9ubHkgcmV0dXJuIGAhdGhpcy5wcm92aWRlc0RhdGFgLlxuICAgICAgY29uc3QgZm9ybSA9IHRoaXMuZm9ybUNvbXBvbmVudFxuICAgICAgcmV0dXJuIChcbiAgICAgICAgIXRoaXMucHJvdmlkZXNEYXRhICYmXG4gICAgICAgICF0aGlzLmxpbmtzVG9WaWV3IHx8XG4gICAgICAgIGZvcm0gJiYgKFxuICAgICAgICAgIGZvcm0uaXNUcmFuc2llbnQgfHxcbiAgICAgICAgICBmb3JtLmlzQ3JlYXRpbmdcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICB0cmFuc2llbnROb3RlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJiAoXG4gICAgICAgICAgJzxiPk5vdGU8L2I+OiB0aGUgcGFyZW50IHN0aWxsIG5lZWRzIHRvIGJlIHNhdmVkICcgK1xuICAgICAgICAgICdpbiBvcmRlciB0byBwZXJzaXN0IHRoaXMgY2hhbmdlLidcbiAgICAgICAgKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBzaG91bGRMb2FkKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgIXRoaXMuaXNUcmFuc2llbnQgJiZcbiAgICAgICAgIXRoaXMuaXNMb2FkaW5nXG4gICAgICApXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGhhc0RhdGEoKSB7XG4gICAgICAvLyBCYXNlIGRlZmluaXRpb24sIHdpbGwgYmUgb3ZlcnJpZGRlbiBieSBEaXRvRm9ybSBhbmQgU291cmNlTWl4aW5cbiAgICAgIHJldHVybiAhIXRoaXMubG9hZGVkRGF0YVxuICAgIH0sXG5cbiAgICB2ZXJicygpIHtcbiAgICAgIC8vIFRoZSBhY3R1YWwgY29kZSBpcyB0aGUgYGdldFZlcmJzKClgIG1ldGhvZCwgZm9yIGVhc2llciBvdmVycmlkaW5nIG9mXG4gICAgICAvLyB0aGlzIGNvbXB1dGVkIHByb3BlcnR5IGluIGNvbXBvbmVudHMgdGhhdCB1c2UgdGhlIFJlc291cmNlTWl4aW4uXG4gICAgICByZXR1cm4gdGhpcy5nZXRWZXJicygpXG4gICAgfSxcblxuICAgIHBhZ2luYXRpb25SYW5nZSgpIHtcbiAgICAgIC8vIE9ubHkgYXBwbHkgcGFnaW5hdGlvbiB0byBsaXN0cy5cbiAgICAgIGNvbnN0IHsgcGFnaW5hdGU6IGFtb3VudCB9ID0gdGhpcy5zb3VyY2VTY2hlbWFcbiAgICAgIGlmICh0aGlzLmlzTGlzdFNvdXJjZSAmJiBhbW91bnQpIHtcbiAgICAgICAgY29uc3QgeyBwYWdlID0gMCB9ID0gdGhpcy5xdWVyeSB8fCB7fVxuICAgICAgICBjb25zdCBzdGFydCA9IHBhZ2UgKiBhbW91bnRcbiAgICAgICAgcmV0dXJuIFtzdGFydCwgc3RhcnQgKyBhbW91bnQgLSAxXVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgcXVlcnlQYXJhbXMoKSB7XG4gICAgICBjb25zdCByYW5nZSA9IHRoaXMucGFnaW5hdGlvblJhbmdlXG4gICAgICBjb25zdCB7IHBhZ2UsIC4uLnF1ZXJ5IH0gPSB0aGlzLnF1ZXJ5IHx8IHt9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5xdWVyeSwgLy8gUXVlcnkgbWF5IG92ZXJyaWRlIHNjb3BlLlxuICAgICAgICAuLi4ocmFuZ2UgJiYge1xuICAgICAgICAgIC8vIFBhc3MgcGFnaW5hdGlvbiBhcyByYW5nZSwgc28gdGhhdCB3ZSBhdXRvbWF0aWNhbGx5IGdldCBPYmplY3Rpb24nc1xuICAgICAgICAgIC8vIHJlc3VsdHMgY291bnRpbmc6XG4gICAgICAgICAgcmFuZ2U6IHJhbmdlLmpvaW4oJywnKVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBjcmVhdGVkKCkge1xuICAgIC8vIFdoZW4gY3JlYXRpbmcgbmVzdGVkIGRhdGEsIHdlIHN0aWxsIG5lZWQgdG8gY2FsbCBzZXR1cERhdGEoKVxuICAgIGlmICh0aGlzLnByb3ZpZGVzRGF0YSB8fCB0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgIHRoaXMuc2V0dXBEYXRhKClcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFJlc291cmNlKCkge1xuICAgICAgLy8gVGhpcyBpcyBkZWZpbmVkIGFzIGEgbWV0aG9kIHNvIHRoZSBjb21wdXRlZCBgcmVzb3VyY2VgIGdldHRlciBjYW5cbiAgICAgIC8vIGJlIG92ZXJyaWRkZW4gYW5kIGBzdXBlcmAgZnVuY3Rpb25hbGl0eSBjYW4gc3RpbGwgYmUgYWNjZXNzZWQuXG4gICAgICByZXR1cm4gZ2V0UmVzb3VyY2UodGhpcy5zb3VyY2VTY2hlbWE/LnJlc291cmNlLCB7XG4gICAgICAgIHR5cGU6ICdjb2xsZWN0aW9uJyxcbiAgICAgICAgcGFyZW50OiB0aGlzLnBhcmVudEZvcm1Db21wb25lbnQ/LnJlc291cmNlID8/IG51bGxcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIGdldFZlcmJzKCkge1xuICAgICAgY29uc3QgdmVyYnMgPSB0aGlzLiR2ZXJicygpXG4gICAgICByZXR1cm4gdGhpcy5pc1RyYW5zaWVudFxuICAgICAgICA/IHtcbiAgICAgICAgICAgIC4uLnZlcmJzLFxuICAgICAgICAgICAgLy8gT3ZlcnJpZGUgZGVmYXVsdCB2ZXJicyB3aXRoIHRoZWlyIHRyYW5zaWVudCB2ZXJzaW9uczpcbiAgICAgICAgICAgIGNyZWF0ZTogJ2FkZCcsXG4gICAgICAgICAgICBjcmVhdGVkOiAnYWRkZWQnLFxuICAgICAgICAgICAgc2F2ZTogJ2FwcGx5JyxcbiAgICAgICAgICAgIHNhdmVkOiAnYXBwbGllZCcsXG4gICAgICAgICAgICBkZWxldGU6ICdyZW1vdmUnLFxuICAgICAgICAgICAgZGVsZXRlZDogJ3JlbW92ZWQnXG4gICAgICAgICAgfVxuICAgICAgICA6IHZlcmJzXG4gICAgfSxcblxuICAgIC8vIEBvdmVycmlkYWJsZVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZGVkRGF0YSA9IG51bGxcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICB0aGlzLmxvYWRlZERhdGEgPSBkYXRhXG4gICAgfSxcblxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIC8vIEFjdHVhbCBjb2RlIGlzIGluIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIGl0J3MgZWFzZXIgdG8gb3ZlcnJpZGVcbiAgICAgIC8vIGBzZXR1cERhdGEoKWAgYW5kIGFuZCBjYWxsIGBlbnN1cmVEYXRhKClgIGZyb20gdGhlIG92ZXJyaWRlcyxcbiAgICAgIC8vIHNlZSBEaXRvRm9ybSBhbmQgU291cmNlTWl4aW4uXG4gICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgIH0sXG5cbiAgICBlbnN1cmVEYXRhKCkge1xuICAgICAgaWYgKHRoaXMuc2hvdWxkTG9hZCkge1xuICAgICAgICBpZiAodGhpcy5oYXNEYXRhKSB7XG4gICAgICAgICAgdGhpcy5yZWxvYWREYXRhKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmxvYWREYXRhKHRydWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVsb2FkRGF0YSgpIHtcbiAgICAgIHRoaXMubG9hZERhdGEoZmFsc2UpXG4gICAgfSxcblxuICAgIGxvYWREYXRhKGNsZWFyKSB7XG4gICAgICBpZiAoIXRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgaWYgKGNsZWFyKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckRhdGEoKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVxdWVzdERhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBjcmVhdGVEYXRhKHNjaGVtYSwgdHlwZSkge1xuICAgICAgcmV0dXJuIHNldERlZmF1bHRWYWx1ZXMoc2NoZW1hLCB0eXBlID8geyB0eXBlIH0gOiB7fSwgdGhpcylcbiAgICB9LFxuXG4gICAgcmVxdWVzdERhdGEoKSB7XG4gICAgICBjb25zdCBxdWVyeSA9IHRoaXMucXVlcnlQYXJhbXNcbiAgICAgIHRoaXMuaGFuZGxlUmVxdWVzdCh7IG1ldGhvZDogJ2dldCcsIHF1ZXJ5IH0sIChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzcG9uc2VcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgZGF0YT8udHlwZSA9PT0gJ0ZpbHRlclZhbGlkYXRpb24nICYmXG4gICAgICAgICAgICAgIHRoaXMub25GaWx0ZXJFcnJvcnM/LihkYXRhLmVycm9ycylcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlzVW5hdXRob3JpemVkRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgIC8vIFRPRE86IENhbiB3ZSByZWFsbHkgc3dhbGxvdyB0aGVzZSBlcnJvcnM/XG4gICAgICAgICAgICAgIC8vIElzIGNhbGxpbmcgYGVuc3VyZVVzZXIoKWAgaW4gYG9uQmVmb3JlUmVxdWVzdCgpYCBlbm91Z2g/XG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc2V0RGF0YShyZXNwb25zZS5kYXRhKVxuICAgICAgICAgIHRoaXMuZW1pdFNjaGVtYUV2ZW50KCdsb2FkJylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgaXNWYWxpZGF0aW9uRXJyb3IocmVzcG9uc2UpIHtcbiAgICAgIHJldHVybiByZXNwb25zZT8uc3RhdHVzID09PSA0MDBcbiAgICB9LFxuXG4gICAgaXNVbmF1dGhvcml6ZWRFcnJvcihyZXNwb25zZSkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlPy5zdGF0dXMgPT09IDQwMVxuICAgIH0sXG5cbiAgICBhc3luYyBoYW5kbGVSZXF1ZXN0KFxuICAgICAge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIHJlc291cmNlID0gdGhpcy5yZXNvdXJjZSxcbiAgICAgICAgcXVlcnksXG4gICAgICAgIGRhdGFcbiAgICAgIH0sXG4gICAgICBjYWxsYmFja1xuICAgICkge1xuICAgICAgY29uc3QgbG9hZGluZ09wdGlvbnMgPSB7XG4gICAgICAgIHVwZGF0ZVJvb3Q6IHRydWUsIC8vIERpc3BsYXkgc3Bpbm5lciBpbiBoZWFkZXIgd2hlbiBsb2FkaW5nIGluIHJlc291cmNlc1xuICAgICAgICB1cGRhdGVWaWV3OiB0aGlzLmlzSW5WaWV3IC8vIE5vdGlmeSB2aWV3IG9mIGxvYWRpbmcgZm9yIHZpZXcgY29tcG9uZW50c1xuICAgICAgfVxuICAgICAgdGhpcy5hYm9ydENvbnRyb2xsZXI/LmFib3J0KClcbiAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICAgIHRoaXMuYWJvcnRDb250cm9sbGVyID0gY29udHJvbGxlclxuICAgICAgY29uc3QgeyBzaWduYWwgfSA9IGNvbnRyb2xsZXJcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB7IG1ldGhvZCwgcmVzb3VyY2UsIHF1ZXJ5LCBkYXRhLCBzaWduYWwgfVxuICAgICAgdGhpcy5zZXRMb2FkaW5nKHRydWUsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlbmRSZXF1ZXN0KHJlcXVlc3QpXG4gICAgICAgIC8vIFBhc3MgYm90aCByZXF1ZXN0IGFuZCByZXNwb25zZSB0byB0aGUgY2FsbGJhY2ssIHNvIHRoZXkgY2FuIGJlXG4gICAgICAgIC8vIGV4cG9zZWQgdG8gZnVydGhlciBjYWxsYmFja3MgdGhyb3VnaCBEaXRvQ29udGV4dC5cbiAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzcG9uc2UpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IubmFtZSAhPT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAgICAgLy8gSWYgY2FsbGJhY2sgcmV0dXJucyB0cnVlLCBlcnJvcnMgd2VyZSBhbHJlYWR5IGhhbmRsZWQuXG4gICAgICAgICAgY29uc3QgeyByZXNwb25zZSB9ID0gZXJyb3JcbiAgICAgICAgICBpZiAoIWNhbGxiYWNrKGVycm9yLCByZXNwb25zZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSByZXNwb25zZT8uZGF0YVxuICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBpc1N0cmluZyhkYXRhPy50eXBlKVxuICAgICAgICAgICAgICA/IGxhYmVsaXplKGRhdGEudHlwZSlcbiAgICAgICAgICAgICAgOiAnRXJyb3InXG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gZGF0YT8ubWVzc2FnZSA/PyBlcnJvclxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoeyB0eXBlOiAnZXJyb3InLCB0aXRsZSwgdGV4dCB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuYWJvcnRDb250cm9sbGVyID09PSBjb250cm9sbGVyKSB7XG4gICAgICAgIC8vIE9ubHkgY2xlYXIgdGhlIGxvYWRpbmcgc3RhdGUgaWYgdGhpcyBpcyBzdGlsbCB0aGUgY3VycmVudCByZXF1ZXN0LlxuICAgICAgICB0aGlzLmFib3J0Q29udHJvbGxlciA9IG51bGxcbiAgICAgICAgdGhpcy5zZXRMb2FkaW5nKGZhbHNlLCBsb2FkaW5nT3B0aW9ucylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0UGF5bG9hZERhdGEoYnV0dG9uLCBtZXRob2QpIHtcbiAgICAgIC8vIENvbnZlbnRpb246IG9ubHkgcG9zdCwgcHV0IGFuZCBwYXRjaCByZXF1ZXN0cyBwYXNzIHRoZSBkYXRhIGFzIHBheWxvYWQuXG4gICAgICByZXR1cm4gKFxuICAgICAgICBbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10uaW5jbHVkZXMobWV0aG9kKSAmJiAoXG4gICAgICAgICAgLy8gVE9ETzogVXNlIGBoYW5kbGVEYXRhU2NoZW1hKClgIGFzeW5jaHJvbm91c2x5IGhlcmUgaW5zdGVhZCwgdG9cbiAgICAgICAgICAvLyBvZmZlciB0aGUgc2FtZSBhbW91bnQgb2YgcG9zc2liaWxpdGllcyBmb3IgZGF0YSBsb2FkaW5nLlxuICAgICAgICAgIGJ1dHRvbi5nZXRTY2hlbWFWYWx1ZShbJ3Jlc291cmNlJywgJ2RhdGEnXSkgfHxcbiAgICAgICAgICBidXR0b24ucHJvY2Vzc2VkSXRlbVxuICAgICAgICApXG4gICAgICApXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChidXR0b24pIHtcbiAgICAgIGNvbnN0IHJlc291cmNlID0gZ2V0UmVzb3VyY2UoYnV0dG9uLnNjaGVtYS5yZXNvdXJjZSwge1xuICAgICAgICBwYXJlbnQ6IHRoaXMucmVzb3VyY2VcbiAgICAgIH0pXG4gICAgICBpZiAocmVzb3VyY2UpIHtcbiAgICAgICAgY29uc3QgeyBtZXRob2QgfSA9IHJlc291cmNlXG4gICAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmdldFBheWxvYWREYXRhKGJ1dHRvbiwgbWV0aG9kKVxuICAgICAgICByZXR1cm4gdGhpcy5zdWJtaXRSZXNvdXJjZShidXR0b24sIHJlc291cmNlLCBtZXRob2QsIGRhdGEpXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYXN5bmMgc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICBzZXREYXRhID0gZmFsc2UsXG4gICAgICBvblN1Y2Nlc3MsXG4gICAgICBvbkVycm9yLFxuICAgICAgbm90aWZ5U3VjY2VzcyA9ICgpID0+XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IFN1Y2Nlc3NmdWwnLFxuICAgICAgICAgIHRleHQ6ICdSZXF1ZXN0IHdhcyBzdWNjZXNzZnVsbHkgc2VudC4nXG4gICAgICAgIH0pLFxuICAgICAgbm90aWZ5RXJyb3IgPSBlcnJvciA9PlxuICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgIGBVbmFibGUgdG8gc2VuZCByZXF1ZXN0JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgICBlcnJvcj8ubWVzc2FnZSB8fCBlcnJvclxuICAgICAgICAgIF1cbiAgICAgICAgfSlcbiAgICB9ID0ge30pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KFxuICAgICAgICAgIHsgbWV0aG9kLCByZXNvdXJjZSwgZGF0YSB9LFxuICAgICAgICAgIGFzeW5jIChlcnIsIHJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gcmVzcG9uc2U/LmRhdGFcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgLy8gU2VlIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIERpdG8gdmFsaWRhdGlvbiBlcnJvcjpcbiAgICAgICAgICAgICAgY29uc3QgZXJyb3JzID0gdGhpcy5pc1ZhbGlkYXRpb25FcnJvcihyZXNwb25zZSkgJiYgZGF0YS5lcnJvcnNcbiAgICAgICAgICAgICAgaWYgKGVycm9ycykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2hvd1ZhbGlkYXRpb25FcnJvcnMoZXJyb3JzLCB0cnVlKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gaXNPYmplY3QoZGF0YSkgPyBkYXRhIDogZXJyXG4gICAgICAgICAgICAgICAgb25FcnJvcj8uKGVycm9yKVxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuZW1pdEJ1dHRvbkV2ZW50KGJ1dHRvbiwgJ2Vycm9yJywge1xuICAgICAgICAgICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICAgICAgICAgIGVycm9yXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXNvbHZlKGZhbHNlKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB1bmRlcmx5aW5nIGRhdGEgYmVmb3JlIGNhbGxpbmcgYG5vdGlmeSgpYCBvclxuICAgICAgICAgICAgICAvLyBgdGhpcy5pdGVtTGFiZWxgLCBzbyBpZCBpcyBzZXQgYWZ0ZXIgY3JlYXRpbmcgbmV3IGl0ZW1zLlxuICAgICAgICAgICAgICBpZiAoc2V0RGF0YSAmJiBkYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXREYXRhKGRhdGEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb25TdWNjZXNzPy4oKVxuICAgICAgICAgICAgICBhd2FpdCB0aGlzLmVtaXRCdXR0b25FdmVudChidXR0b24sICdzdWNjZXNzJywge1xuICAgICAgICAgICAgICAgIG5vdGlmeTogbm90aWZ5U3VjY2Vzc1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICByZXNvbHZlKHRydWUpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICApXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBhc3luYyBlbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCBldmVudCwgeyBub3RpZnksIGVycm9yIH0pIHtcbiAgICAgIC8vIENyZWF0ZSB0aGUgY29udGV4dCBvdXRzaWRlIG9mIGBlbWl0RXZlbnQoKWAsIHNvIHRoYXRcbiAgICAgIC8vIGBjb250ZXh0Lndhc05vdGlmaWVkYCBjYW4gYmUgY2hlY2tlZCBhZnRlci5cbiAgICAgIGNvbnN0IGNvbnRleHQgPSBuZXcgRGl0b0NvbnRleHQoYnV0dG9uLCB7XG4gICAgICAgIG5lc3RlZDogZmFsc2UsXG4gICAgICAgIGRhdGE6IHRoaXMuZGF0YSxcbiAgICAgICAgaXRlbUxhYmVsOiB0aGlzLml0ZW1MYWJlbCxcbiAgICAgICAgZXJyb3JcbiAgICAgIH0pXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBidXR0b24uZW1pdEV2ZW50KGV2ZW50LCB7IGNvbnRleHQgfSlcbiAgICAgIGlmIChcbiAgICAgICAgbm90aWZ5ICYmXG4gICAgICAgIC8vIFByZXZlbnQgZGVmYXVsdCBpZiBhbnl0aGluZyB3YXMgcmV0dXJuZWQgZnJvbSB0aGUgZXZlbnQgaGFuZGxlci5cbiAgICAgICAgcmVzID09PSB1bmRlZmluZWQgJiZcbiAgICAgICAgLy8gRG8gbm90IGRpc3BsYXkgZGVmYXVsdCBub3RpZmljYXRpb24gaWYgdGhlIGV2ZW50IGhhbmRsZXIgYWxyZWFkeVxuICAgICAgICAvLyBkaXNwbGF5ZWQgYSBub3RpZmljYXRpb24uXG4gICAgICAgICFjb250ZXh0Lndhc05vdGlmaWVkXG4gICAgICApIHtcbiAgICAgICAgbm90aWZ5KGVycm9yKVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc1xuICAgIH1cbiAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVQYXRoKHBhdGgpIHtcbiAgLy8gRm9yIHBhdGhzIHN0YXJpbmcgd2l0aCBgL2AsIHdlIGNhbiB1c2UgdGhlIG5hdGl2ZSBgVVJMKClgIGNsYXNzIHRvIHJlc29sdmVcbiAgLy8gdGhlIHBhdGgsIHdoaWNoIHdpbGwgYWxzbyBoYW5kbGUgYC4uYCBhbmQgYC5gIHNlZ21lbnRzOlxuICByZXR1cm4gbmV3IFVSTChgZmlsZToke3BhdGh9YCkucGF0aG5hbWVcbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1mb3JtLmRpdG8tc2Nyb2xsLXBhcmVudChcbiAgOmNsYXNzPVwieyAnZGl0by1mb3JtLW5lc3RlZCc6IGlzTmVzdGVkUm91dGUgfVwiXG4gIDpkYXRhLXJlc291cmNlPVwic291cmNlU2NoZW1hLnBhdGhcIlxuKVxuICAvLy0gTk9URTogTmVzdGVkIGZvcm0gY29tcG9uZW50cyBhcmUga2VwdCBhbGl2ZSBieSB1c2luZyBgdi1zaG93YCBpbnN0ZWFkIG9mXG4gIC8vLSBgdi1pZmAgaGVyZSwgc28gZXZlbnQgaGFuZGxpbmcgYW5kIG90aGVyIHRoaW5ncyBzdGlsbCB3b3JrIHdpdGggbmVzdGVkXG4gIC8vLSBlZGl0aW5nLiBPbmx5IHJlbmRlciBhIHJvdXRlci12aWV3IGhlcmUgaWYgdGhpcyBpc24ndCB0aGUgbGFzdCBkYXRhIHJvdXRlXG4gIC8vLSBhbmQgbm90IGEgbmVzdGVkIGZvcm0gcm91dGUsIHdoaWNoIHdpbGwgYXBwZWFyIGVsc2V3aGVyZSBpbiBpdHMgb3duIHZpZXcuXG4gIFJvdXRlclZpZXcoXG4gICAgdi1pZj1cIiEoaXNMYXN0VW5uZXN0ZWRSb3V0ZSB8fCBpc05lc3RlZFJvdXRlKVwiXG4gICAgdi1zaG93PVwiIWlzQWN0aXZlXCJcbiAgKVxuICAvLy0gVXNlIGEgPGRpdj4gZm9yIGlubGluZWQgZm9ybXMsIGFzIHdlIHNob3VsZG4ndCBuZXN0IGFjdHVhbCA8Zm9ybT4gdGFncy5cbiAgY29tcG9uZW50KFxuICAgIHYtc2hvdz1cImlzQWN0aXZlXCJcbiAgICA6aXM9XCJpc05lc3RlZFJvdXRlID8gJ2RpdicgOiAnZm9ybSdcIlxuICAgIDpjbGFzcz1cInsgJ2RpdG8tc2Nyb2xsLXBhcmVudCc6IGlzUm9vdEZvcm0gfVwiXG4gICAgQHN1Ym1pdC5wcmV2ZW50XG4gIClcbiAgICAvLy0gUHJldmVudCBpbXBsaWNpdCBzdWJtaXNzaW9uIG9mIHRoZSBmb3JtLCBmb3IgZXhhbXBsZSB3aGVuIHR5cGluZyBlbnRlclxuICAgIC8vLSBpbiBhbiBpbnB1dCBmaWVsZC5cbiAgICAvLy0gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzUxNTA3ODA2XG4gICAgYnV0dG9uKFxuICAgICAgdi1zaG93PVwiZmFsc2VcIlxuICAgICAgdHlwZT1cInN1Ym1pdFwiXG4gICAgICBkaXNhYmxlZFxuICAgIClcbiAgICBEaXRvU2NoZW1hKFxuICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgOm1ldGE9XCJtZXRhXCJcbiAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgIDpwYWRkaW5nPVwiaXNOZXN0ZWRSb3V0ZSA/ICduZXN0ZWQnIDogJ3Jvb3QnXCJcbiAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICA6c2Nyb2xsYWJsZT1cImlzUm9vdEZvcm1cIlxuICAgICAgZ2VuZXJhdGVMYWJlbHNcbiAgICApXG4gICAgICB0ZW1wbGF0ZSgjYnV0dG9ucylcbiAgICAgICAgRGl0b0J1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kLmRpdG8tYnV0dG9ucy1sYXJnZS5kaXRvLWJ1dHRvbnMtbWFpbihcbiAgICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWJ1dHRvbnMtc3RpY2t5JzogaXNSb290Rm9ybSB9XCJcbiAgICAgICAgICA6YnV0dG9ucz1cImJ1dHRvblNjaGVtYXNcIlxuICAgICAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgICAgICA6ZGF0YT1cImRhdGFcIlxuICAgICAgICAgIDptZXRhPVwibWV0YVwiXG4gICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgIDpkaXNhYmxlZD1cImlzTG9hZGluZ1wiXG4gICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgeyBjbG9uZSwgY2FwaXRhbGl6ZSwgcGFyc2VEYXRhUGF0aCwgYXNzaWduRGVlcGx5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgUm91dGVNaXhpbiBmcm9tICcuLi9taXhpbnMvUm91dGVNaXhpbi5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9SZXNvdXJjZU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UsIGdldE1lbWJlclJlc291cmNlIH0gZnJvbSAnLi4vdXRpbHMvcmVzb3VyY2UuanMnXG5pbXBvcnQgeyBnZXRCdXR0b25TY2hlbWFzLCBpc09iamVjdFNvdXJjZSB9IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7IHJlc29sdmVQYXRoIH0gZnJvbSAnLi4vdXRpbHMvcGF0aC5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRm9ybScsIHtcbiAgbWl4aW5zOiBbUm91dGVNaXhpbiwgUmVzb3VyY2VNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRlZERhdGE6IG51bGwsXG4gICAgICBjbG9uZWREYXRhOiB1bmRlZmluZWQsXG4gICAgICBzb3VyY2VLZXk6IG51bGwsXG4gICAgICBpc0Zvcm06IHRydWVcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB2ZXJicygpIHtcbiAgICAgIC8vIEFkZCBzdWJtaXQgLyBzdWJtaXR0ZWQgdG8gdGhlIHZlcmJzIHJldHVybmVkIGJ5IFJlc291cmNlTWl4aW5cbiAgICAgIC8vIE5PVEU6IFRoZXNlIGdldCBwYXNzZWQgb24gdG8gY2hpbGRyZW4gdGhyb3VnaDpcbiAgICAgIC8vIGBwcm92aWRlKCkgLi4uIHsgJHZlcmJzOiAoKSA9PiB0aGlzLnZlcmJzIH1gIGluIFJlc291cmNlTWl4aW5cbiAgICAgIGNvbnN0IHZlcmJzID0gdGhpcy5nZXRWZXJicygpXG4gICAgICBjb25zdCB7IGlzQ3JlYXRpbmcsIHByb3ZpZGVzRGF0YSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4udmVyYnMsXG4gICAgICAgIHN1Ym1pdDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZSA6IHZlcmJzLnNhdmUsXG4gICAgICAgIHN1Ym1pdHRlZDogaXNDcmVhdGluZyA/IHZlcmJzLmNyZWF0ZWQgOiB2ZXJicy5zYXZlZCxcbiAgICAgICAgY2FuY2VsOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWwgOiB2ZXJicy5jbG9zZSxcbiAgICAgICAgY2FuY2VsbGVkOiBwcm92aWRlc0RhdGEgPyB2ZXJicy5jYW5jZWxsZWQgOiB2ZXJicy5jbG9zZWRcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc2NoZW1hKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgdGhpcy5nZXRJdGVtRm9ybVNjaGVtYShcbiAgICAgICAgICB0aGlzLnNvdXJjZVNjaGVtYSxcbiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBkYXRhIHlldCwgcHJvdmlkZSBhbiBlbXB0eSBvYmplY3Qgd2l0aCBqdXN0IHRoZVxuICAgICAgICAgIC8vIHJpZ2h0IHR5cGUgc2V0LCBzbyB0aGUgZm9ybSBjYW4gYWx3YXlzIGJlIGRldGVybWluZWQuXG4gICAgICAgICAgdGhpcy5kYXRhIHx8IHsgdHlwZTogdGhpcy50eXBlIH0sXG4gICAgICAgICAgdGhpcy5jb250ZXh0XG4gICAgICAgICkgfHwge31cbiAgICAgICkgLy8gQWx3YXlzIHJldHVybiBhIHNjaGVtYSBvYmplY3Qgc28gd2UgZG9uJ3QgbmVlZCB0byBjaGVjayBmb3IgaXQuXG4gICAgfSxcblxuICAgIGJ1dHRvblNjaGVtYXMoKSB7XG4gICAgICByZXR1cm4gZ2V0QnV0dG9uU2NoZW1hcyhcbiAgICAgICAgYXNzaWduRGVlcGx5KFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNhbmNlbDoge1xuICAgICAgICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6ICgpID0+IHRoaXMuY2FuY2VsKClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcblxuICAgICAgICAgICAgc3VibWl0OiAhdGhpcy5pc011dGF0aW5nICYmIHtcbiAgICAgICAgICAgICAgdHlwZTogJ3N1Ym1pdCcsXG4gICAgICAgICAgICAgIC8vIFN1Ym1pdCBidXR0b25zIGNsb3NlIHRoZSBmb3JtIGJ5IGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGNsb3NlRm9ybTogdHJ1ZSxcbiAgICAgICAgICAgICAgZXZlbnRzOiB7XG4gICAgICAgICAgICAgICAgY2xpY2s6ICh7IGNvbXBvbmVudDogYnV0dG9uIH0pID0+IGJ1dHRvbi5zdWJtaXQoKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSxcbiAgICAgICAgICB0aGlzLnNjaGVtYS5idXR0b25zXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNSb290Rm9ybSgpIHtcbiAgICAgIHJldHVybiB0aGlzLmRhdGFQYXRoID09PSAnJyAmJiAhdGhpcy5pc05lc3RlZFJvdXRlXG4gICAgfSxcblxuICAgIGlzQWN0aXZlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNMYXN0Um91dGUgfHwgdGhpcy5pc0xhc3RVbm5lc3RlZFJvdXRlXG4gICAgfSxcblxuICAgIGlzVHJhbnNpZW50KCkge1xuICAgICAgcmV0dXJuICF0aGlzLnByb3ZpZGVzRGF0YVxuICAgIH0sXG5cbiAgICBpc0NyZWF0aW5nKCkge1xuICAgICAgLy8gdGhpcy5wYXJhbSBpcyBpbmhlcml0ZWQgZnJvbSBSb3V0ZU1peGluXG4gICAgICByZXR1cm4gdGhpcy5wYXJhbSA9PT0gJ2NyZWF0ZSdcbiAgICB9LFxuXG4gICAgaXNEaXJ0eSgpIHtcbiAgICAgIHJldHVybiAhdGhpcy5pc011dGF0aW5nICYmICEhdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50Py5pc0RpcnR5XG4gICAgfSxcblxuICAgIGlzTXV0YXRpbmcoKSB7XG4gICAgICAvLyBXaGVuIGBzb3VyY2VTY2hlbWEubXV0YXRlYCBpcyB0cnVlLCB0aGUgZm9ybSBlZGl0cyB0aGUgaW5oZXJpdGVkIGRhdGFcbiAgICAgIC8vIGRpcmVjdGx5IGluc3RlYWQgb2YgbWFraW5nIGEgY29weSBmb3IgcGVyc2lzdGVuY2UgdXBvbiBzdWJtaXNzaW9uLlxuICAgICAgLy8gU2VlIGBpbmhlcml0ZWREYXRhKClgIGNvbXB1dGVkIHByb3BlcnR5IGZvciBtb3JlIGRldGFpbHMuXG4gICAgICByZXR1cm4gISF0aGlzLnNvdXJjZVNjaGVtYS5tdXRhdGVcbiAgICB9LFxuXG4gICAgc2VsZWN0ZWRUYWIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tYWluU2NoZW1hQ29tcG9uZW50Py5zZWxlY3RlZFRhYiB8fCBudWxsXG4gICAgfSxcblxuICAgIHR5cGUoKSB7XG4gICAgICAvLyBUaGUgdHlwZSBvZiBmb3JtIHRvIGNyZWF0ZSwgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGZvcm1zIHRvIGNob29zZSBmcm9tLlxuICAgICAgcmV0dXJuIHRoaXMuJHJvdXRlLnF1ZXJ5LnR5cGVcbiAgICB9LFxuXG4gICAgaXRlbUlkKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICA/IG51bGxcbiAgICAgICAgOiB0aGlzLnBhcmFtID8/IG51bGxcbiAgICB9LFxuXG4gICAgbWV0aG9kKCkge1xuICAgICAgcmV0dXJuIHRoaXMuaXNDcmVhdGluZyA/ICdwb3N0JyA6ICdwYXRjaCdcbiAgICB9LFxuXG4gICAgcmVzb3VyY2UoKSB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuZ2V0UmVzb3VyY2UoKVxuICAgICAgcmV0dXJuIGdldE1lbWJlclJlc291cmNlKHRoaXMuaXRlbUlkLCByZXNvdXJjZSkgfHwgcmVzb3VyY2VcbiAgICB9LFxuXG4gICAgYnJlYWRjcnVtYlByZWZpeCgpIHtcbiAgICAgIHJldHVybiBjYXBpdGFsaXplKHRoaXMuaXNDcmVhdGluZyA/IHRoaXMudmVyYnMuY3JlYXRlIDogdGhpcy52ZXJicy5lZGl0KVxuICAgIH0sXG5cbiAgICBkYXRhKCkge1xuICAgICAgLy8gUmV0dXJuIGRpZmZlcmVudCBkYXRhIFwiY29udGFpbmVyc1wiIGJhc2VkIG9uIGRpZmZlcmVudCBzY2VuYXJpb3M6XG4gICAgICAvLyAxLiBjcmVhdGVkRGF0YSwgaWYgd2UncmUgaW4gYSBmb3JtIGZvciBhIG5ld2x5IGNyZWF0ZWQgb2JqZWN0LlxuICAgICAgLy8gMi4gbG9hZGVkRGF0YSwgaWYgdGhlIGZvcm0gaXRzZWxmIGlzIHRoZSByb290IG9mIHRoZSBkYXRhIChlLmcuIHdoZW5cbiAgICAgIC8vICAgIGRpcmVjdGx5IGxvYWRpbmcgYW4gZWRpdGluZyByb290KS5cbiAgICAgIC8vIDMuIFRoZSBkYXRhIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQsIHdoaWNoIGl0c2VsZiBtYXkgYmUgZWl0aGVyIGFcbiAgICAgIC8vICAgIHZpZXcgdGhhdCBsb2FkZWQgdGhlIGRhdGEsIG9yIGEgZm9ybSB0aGF0IGVpdGhlciBsb2FkZWQgdGhlIGRhdGEsIG9yXG4gICAgICAvLyAgICBhbHNvIGluaGVyaXRlZCBpdCBmcm9tIGl0cyBwYXJlbnQuIE5vdGUgdGhhdCB3ZSB1c2UgYSBjbG9uZSBvZiBpdCxcbiAgICAgIC8vICAgIHNvLCBkYXRhIGNoYW5nZXMgYXJlbid0IGFwcGxpZWQgdW50aWwgc2V0U291cmNlRGF0YSgpIGlzIGNhbGxlZC5cbiAgICAgIHJldHVybiB0aGlzLmNyZWF0ZWREYXRhIHx8IHRoaXMubG9hZGVkRGF0YSB8fCB0aGlzLmluaGVyaXRlZERhdGEgfHwgbnVsbFxuICAgIH0sXG5cbiAgICBkYXRhUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldERhdGFQYXRoRnJvbSh0aGlzLmRhdGFDb21wb25lbnQpXG4gICAgfSxcblxuICAgIHNvdXJjZURhdGEoKSB7XG4gICAgICAvLyBQb3NzaWJsZSBwYXJlbnRzIGFyZSBEaXRvRm9ybSBmb3IgZm9ybXMsIG9yIERpdG9WaWV3IGZvciByb290IGxpc3RzLlxuICAgICAgLy8gQm90aCBoYXZlIGEgZGF0YSBwcm9wZXJ0eSB3aGljaCBhYnN0cmFjdHMgYXdheSBsb2FkaW5nIGFuZCBpbmhlcml0aW5nXG4gICAgICAvLyBvZiBkYXRhLlxuICAgICAgLy8gRm9ybXMgdGhhdCBhcmUgYWJvdXQgdG8gYmUgZGVzdHJveWVkIGR1ZSB0byBuYXZpZ2F0aW9uIGxvb3NlIHRoZWlyXG4gICAgICAvLyByb3V0ZS1yZWNvcmQsIGJ1dCBtaWdodCBzdGlsbCB0cmlnZ2VyIHRoaXMgZ2V0dGVyLiBGaWx0ZXIgdGhvc2Ugb3V0LlxuICAgICAgbGV0IGRhdGEgPSB0aGlzLnJvdXRlUmVjb3JkID8gdGhpcy5wYXJlbnRSb3V0ZUNvbXBvbmVudC5kYXRhIDogbnVsbFxuICAgICAgaWYgKGRhdGEpIHtcbiAgICAgICAgLy8gSGFuZGxlIG5lc3RlZCBkYXRhIGJ5IHNwbGl0dGluZyB0aGUgZGF0YVBhdGgsIGl0ZXJhdGUgdGhyb3VnaCB0aGVcbiAgICAgICAgLy8gYWN0dWFsIGRhdGEgYW5kIGxvb2sgbmVzdCBjaGlsZC1kYXRhIHVwLlxuICAgICAgICBjb25zdCBkYXRhUGFydHMgPSBwYXJzZURhdGFQYXRoKFxuICAgICAgICAgIHRoaXMuZ2V0RGF0YVBhdGhGcm9tKHRoaXMucGFyZW50Um91dGVDb21wb25lbnQpXG4gICAgICAgIClcbiAgICAgICAgLy8gQ29tcGFyZSBkYXRhUGFydHMgYWdhaW5zdCBtYXRjaGVkIHJvdXRlUGF0aCBwYXJ0cywgdG8gaWRlbnRpZnkgdGhvc2VcbiAgICAgICAgLy8gcGFydHMgdGhhdCBuZWVkIHRvIGJlIHRyZWF0ZWQgbGlrZSBpZHMgYW5kIG1hcHBlZCB0byBpbmRpY2VzIGluIGRhdGEuXG4gICAgICAgIGNvbnN0IHBhdGhQYXJ0cyA9IHRoaXMucm91dGVSZWNvcmQucGF0aC5zcGxpdCgnLycpXG4gICAgICAgIGNvbnN0IHJvdXRlUGFydHMgPSBwYXRoUGFydHMuc2xpY2UocGF0aFBhcnRzLmxlbmd0aCAtIGRhdGFQYXJ0cy5sZW5ndGgpXG4gICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICB0aGlzLnNvdXJjZUtleSA9IG51bGxcbiAgICAgICAgY29uc3QgbGFzdERhdGFQYXJ0ID0gZGF0YVBhcnRzW2RhdGFQYXJ0cy5sZW5ndGggLSAxXVxuICAgICAgICBpZiAoaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpICYmIGxhc3REYXRhUGFydCA9PT0gJ2NyZWF0ZScpIHtcbiAgICAgICAgICAvLyBJZiB3ZSBoYXZlIGFuIG9iamVjdCBzb3VyY2UgYW5kIGFyZSBjcmVhdGluZywgdGhlIGRhdGFQYXRoIG5lZWRzIHRvXG4gICAgICAgICAgLy8gYmUgc2hvcnRlbmVkIGJ5IHRoZSAnY3JlYXRlJyBlbnRyeS4gVGhpcyBpc24ndCBuZWVkZWQgZm9yIGxpc3RcbiAgICAgICAgICAvLyBzb3VyY2VzLCBhcyB0aGVyZSB0aGUgcGFyYW1ldGVyIGlzIGFjdHVhbGx5IG1hcHBlZCB0byB0aGUgaXRlbSBpZC5cbiAgICAgICAgICBkYXRhUGFydHMubGVuZ3RoLS1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMCwgbCA9IGRhdGFQYXJ0cy5sZW5ndGg7IGkgPCBsICYmIGRhdGE7IGkrKykge1xuICAgICAgICAgIGNvbnN0IGRhdGFQYXJ0ID0gZGF0YVBhcnRzW2ldXG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyBhbiA6aWQgcGFydCwgZmluZCB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gd2l0aCBnaXZlbiBpZC5cbiAgICAgICAgICBjb25zdCBrZXkgPSAvXjppZC8udGVzdChyb3V0ZVBhcnRzW2ldKVxuICAgICAgICAgICAgPyBkYXRhUGFydCA9PT0gJ2NyZWF0ZSdcbiAgICAgICAgICAgICAgPyBudWxsIC8vIFRoZXJlJ3Mgbm8gaW5kZXggZm9yIGVudHJpZXMgYWJvdXQgdG8gYmUgY3JlYXRlZFxuICAgICAgICAgICAgICA6IHRoaXMuZmluZEl0ZW1JZEluZGV4KHRoaXMuc291cmNlU2NoZW1hLCBkYXRhLCBkYXRhUGFydClcbiAgICAgICAgICAgIDogZGF0YVBhcnRcbiAgICAgICAgICAvLyBTa2lwIHRoZSBmaW5hbCBsb29rdXAgYnV0IHJlbWVtYmVyIGBzb3VyY2VLZXlgLCBhcyB3ZSB3YW50IHRoZVxuICAgICAgICAgIC8vIHBhcmVudCBkYXRhIHNvIHdlIGNhbiByZXBsYWNlIHRoZSBlbnRyeSBhdCBgc291cmNlS2V5YCBvbiBpdC5cbiAgICAgICAgICBpZiAoaSA9PT0gbCAtIDEpIHtcbiAgICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgICAgICAgICAgdGhpcy5zb3VyY2VLZXkgPSBrZXlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IGRhdGFba2V5XVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9LFxuXG4gICAgaW5oZXJpdGVkRGF0YSgpIHtcbiAgICAgIC8vIERhdGEgaW5oZXJpdGVkIGZyb20gcGFyZW50LCBhbmQgY2xvbmVkIHRvIHByb3RlY3QgYWdhaW5zdCByZWFjdGl2ZVxuICAgICAgLy8gY2hhbmdlcyB1bnRpbCBjaGFuZ2VzIGFyZSBhcHBsaWVkIHRocm91Z2ggc2V0U291cmNlRGF0YSgpLCB1bmxlc3NcbiAgICAgIC8vIGBzb3VyY2VTY2hlbWEubXV0YXRlYCBpcyB0cnVlLCBpbiB3aGljaCBjYXNlIGRhdGEgaXMgbXV0YXRlZCBkaXJlY3RseS5cbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5pc1RyYW5zaWVudCAmJlxuICAgICAgICB0aGlzLmNsb25lZERhdGEgPT09IHVuZGVmaW5lZCAmJlxuICAgICAgICB0aGlzLnNvdXJjZURhdGEgJiZcbiAgICAgICAgdGhpcy5zb3VyY2VLZXkgIT09IG51bGxcbiAgICAgICkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMuc291cmNlRGF0YVt0aGlzLnNvdXJjZUtleV1cbiAgICAgICAgaWYgKCF0aGlzLmlzTXV0YXRpbmcpIHtcbiAgICAgICAgICAvLyBVc2UgYSB0cmljayB0byBzdG9yZSBjbG9uZWQgaW5oZXJpdGVkIGRhdGEgaW4gY2xvbmVkRGF0YSwgdG8gbWFrZVxuICAgICAgICAgIC8vIGl0IHJlYWN0aXZlIGFuZCBwcmV2ZW50IGl0IGZyb20gYmVpbmcgY2xvbmVkIG11bHRpcGxlIHRpbWVzLlxuICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gZGF0YSA9IGNsb25lKGRhdGEpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRhdGEgPT09IG51bGwgJiZcbiAgICAgICAgICAhdGhpcy5pc0NyZWF0aW5nICYmXG4gICAgICAgICAgaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIElmIGRhdGEgb2YgYW4gb2JqZWN0IHNvdXJjZSBpcyBudWxsLCByZWRpcmVjdCB0byBpdHMgY3JlYXRlIHJvdXRlLlxuICAgICAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdnVlL25vLXNpZGUtZWZmZWN0cy1pbi1jb21wdXRlZC1wcm9wZXJ0aWVzXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnB1c2goeyBwYXRoOiBgJHt0aGlzLnBhdGh9L2NyZWF0ZWAgfSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGF0YVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuY2xvbmVkRGF0YVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy5kYXRhXG4gICAgfSxcblxuICAgIGl0ZW1MYWJlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNvdXJjZVNjaGVtYSwgdGhpcy5kYXRhLCB7IGV4dGVuZGVkOiB0cnVlIH0pXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlOiB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMzM5MyNpc3N1ZWNvbW1lbnQtMTE1ODQ3MDE0OVxuICAgICAgZmx1c2g6ICdwb3N0JyxcbiAgICAgIGhhbmRsZXIodG8sIGZyb20pIHtcbiAgICAgICAgLy8gUmVsb2FkIGZvcm0gZGF0YSB3aGVuIG5hdmlnYXRpbmcgdG8gYSBkaWZmZXJlbnQgZW50aXR5IGluIHNhbWUgZm9ybS5cbiAgICAgICAgY29uc3QgcGFyYW0gPSB0aGlzLm1ldGE/LnBhcmFtXG4gICAgICAgIGlmIChcbiAgICAgICAgICBwYXJhbSAmJlxuICAgICAgICAgIHRoaXMucHJvdmlkZXNEYXRhICYmXG4gICAgICAgICAgLy8gVE9ETzogU2VlIGlmIHdlIGNhbiByZW1vdmUgdGhpcyBkdWUgdG8gYGZsdXNoOiAncG9zdCdgLlxuICAgICAgICAgIGZyb20ubWF0Y2hlZFswXS5wYXRoID09PSB0by5tYXRjaGVkWzBdLnBhdGggJiYgLy8gU3RheWluZyBvbiBzYW1lIGZvcm1cbiAgICAgICAgICBmcm9tLnBhcmFtc1twYXJhbV0gIT09ICdjcmVhdGUnICYmIC8vIEJ1dCBoYXZlbid0IGJlZW4gY3JlYXRpbmdcbiAgICAgICAgICB0by5wYXJhbXNbcGFyYW1dICE9PSBmcm9tLnBhcmFtc1twYXJhbV0gLy8gR29pbmcgdG8gYSBkaWZmZXJlbnQgZW50aXR5XG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMubG9hZERhdGEodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzb3VyY2VEYXRhOiAnY2xlYXJDbG9uZWREYXRhJyxcbiAgICAvLyBOZWVkZWQgZm9yIHRoZSAnY3JlYXRlJyByZWRpcmVjdCBpbiBgaW5oZXJpdGVkRGF0YSgpYCB0byB3b3JrOlxuICAgIGNyZWF0ZTogJ3NldHVwRGF0YSdcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZW1pdFNjaGVtYUV2ZW50KGV2ZW50LCBwYXJhbXMpIHtcbiAgICAgIHJldHVybiB0aGlzLm1haW5TY2hlbWFDb21wb25lbnQuZW1pdEV2ZW50KGV2ZW50LCBwYXJhbXMpXG4gICAgfSxcblxuICAgIGdldERhdGFQYXRoRnJvbShyb3V0ZSkge1xuICAgICAgLy8gR2V0IHRoZSBkYXRhIHBhdGggYnkgZGVub3JtYWxpemVQYXRoIHRoZSByZWxhdGl2ZSByb3V0ZSBwYXRoXG4gICAgICByZXR1cm4gdGhpcy5hcGkuZGVub3JtYWxpemVQYXRoKFxuICAgICAgICB0aGlzLnBhdGhcbiAgICAgICAgICAvLyBEaXRvVmlld3MgaGF2ZSBuZXN0ZWQgcm91dGVzLCBzbyBkb24ndCByZW1vdmUgdGhlaXIgcGF0aC5cbiAgICAgICAgICAuc2xpY2UoKHJvdXRlLmlzVmlldyA/IDAgOiByb3V0ZS5wYXRoLmxlbmd0aCkgKyAxKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXR1cERhdGEoKVxuICAgIHNldHVwRGF0YSgpIHtcbiAgICAgIGlmICh0aGlzLmlzQ3JlYXRpbmcpIHtcbiAgICAgICAgdGhpcy5jcmVhdGVkRGF0YSB8fD0gdGhpcy5jcmVhdGVEYXRhKHRoaXMuc2NoZW1hLCB0aGlzLnR5cGUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzZXRTb3VyY2VEYXRhKGRhdGEpIHtcbiAgICAgIGlmICh0aGlzLnNvdXJjZURhdGEgJiYgdGhpcy5zb3VyY2VLZXkgIT09IG51bGwpIHtcbiAgICAgICAgY29uc3QgeyBtYWluU2NoZW1hQ29tcG9uZW50IH0gPSB0aGlzXG4gICAgICAgIHRoaXMuc291cmNlRGF0YVt0aGlzLnNvdXJjZUtleV0gPSBtYWluU2NoZW1hQ29tcG9uZW50LmZpbHRlckRhdGEoZGF0YSlcbiAgICAgICAgbWFpblNjaGVtYUNvbXBvbmVudC5vbkNoYW5nZSgpXG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9LFxuXG4gICAgYWRkU291cmNlRGF0YShkYXRhKSB7XG4gICAgICByZXR1cm4gaXNPYmplY3RTb3VyY2UodGhpcy5zb3VyY2VTY2hlbWEpXG4gICAgICAgID8gdGhpcy5zZXRTb3VyY2VEYXRhKGRhdGEpXG4gICAgICAgIDogISF0aGlzLnNvdXJjZURhdGE/LnB1c2goZGF0YSlcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uY2xlYXJEYXRhKClcbiAgICBjbGVhckRhdGEoKSB7XG4gICAgICB0aGlzLnNldERhdGEobnVsbClcbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRlIFJlc291cmNlTWl4aW4uc2V0RGF0YSgpXG4gICAgc2V0RGF0YShkYXRhKSB7XG4gICAgICAvLyBzZXREYXRhKCkgaXMgY2FsbGVkIGFmdGVyIHN1Ym1pdCB3aGVuIGRhdGEgaGFzIGNoYW5nZWQuXG4gICAgICBpZiAodGhpcy5pc1RyYW5zaWVudCkge1xuICAgICAgICAvLyBGb3IgY29tcG9uZW50cyB3aXRoIHRyYW5zaWVudCBkYXRhLCBtb2RpZnkgdGhpcy5zb3VyY2VEYXRhLlxuICAgICAgICB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuY3JlYXRlZERhdGEgPSBudWxsXG4gICAgICAgIHRoaXMubG9hZGVkRGF0YSA9IGRhdGFcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgY2xlYXJDbG9uZWREYXRhKHRvLCBmcm9tKSB7XG4gICAgICAvLyBPbmx5IGNsZWFyIGlmIHRoZSB3YXRjaGVkIHNvdXJjZURhdGEgaXRzZWxmIGNoYW5nZXMgaW4gdGhlIGZvcm0uXG4gICAgICBpZiAodG8gIT09IGZyb20pIHtcbiAgICAgICAgdGhpcy5jbG9uZWREYXRhID0gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIGNhbmNlbCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmNsb3NlKClcbiAgICB9LFxuXG4gICAgYXN5bmMgY2xvc2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYXZpZ2F0ZSh0aGlzLnBhcmVudFJvdXRlQ29tcG9uZW50LnBhdGgpXG4gICAgfSxcblxuICAgIGdldFN1Ym1pdFZlcmIocHJlc2VudCA9IHRydWUpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyBwcmVzZW50XG4gICAgICAgICAgPyAnY3JlYXRlJ1xuICAgICAgICAgIDogJ2NyZWF0ZWQnXG4gICAgICAgIDogcHJlc2VudFxuICAgICAgICAgID8gJ3N1Ym1pdCdcbiAgICAgICAgICA6ICdzdWJtaXR0ZWQnXG4gICAgfSxcblxuICAgIGFzeW5jIHN1Ym1pdChidXR0b24sIHsgdmFsaWRhdGUgPSB0cnVlLCBjbG9zZUZvcm0gPSBmYWxzZSB9ID0ge30pIHtcbiAgICAgIGlmICh2YWxpZGF0ZSAmJiAhdGhpcy52YWxpZGF0ZUFsbCgpKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBnZXRWZXJiID0gcHJlc2VudCA9PiB0aGlzLnZlcmJzW3RoaXMuZ2V0U3VibWl0VmVyYihwcmVzZW50KV1cblxuICAgICAgLy8gQWxsb3cgYnV0dG9ucyB0byBvdmVycmlkZSBib3RoIG1ldGhvZCBhbmQgcmVzb3VyY2UgcGF0aCB0byBzdWJtaXQgdG86XG4gICAgICBjb25zdCBidXR0b25SZXNvdXJjZSA9IGdldFJlc291cmNlKGJ1dHRvbi5zY2hlbWEucmVzb3VyY2UsIHtcbiAgICAgICAgcGFyZW50OiB0aGlzLnJlc291cmNlXG4gICAgICB9KVxuICAgICAgY29uc3QgcmVzb3VyY2UgPSBidXR0b25SZXNvdXJjZSB8fCB0aGlzLnJlc291cmNlXG4gICAgICBjb25zdCBtZXRob2QgPSByZXNvdXJjZT8ubWV0aG9kIHx8IHRoaXMubWV0aG9kXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5nZXRQYXlsb2FkRGF0YShidXR0b24sIG1ldGhvZClcbiAgICAgIGxldCBzdWNjZXNzXG4gICAgICBpZiAoIWJ1dHRvblJlc291cmNlICYmIHRoaXMuaXNUcmFuc2llbnQpIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuc3VibWl0VHJhbnNpZW50KGJ1dHRvbiwgcmVzb3VyY2UsIG1ldGhvZCwgZGF0YSwge1xuICAgICAgICAgIG9uU3VjY2VzczogKCkgPT4gdGhpcy5lbWl0U2NoZW1hRXZlbnQodGhpcy5nZXRTdWJtaXRWZXJiKCkpLFxuICAgICAgICAgIG9uRXJyb3I6IGVycm9yID0+XG4gICAgICAgICAgICB0aGlzLmVtaXRTY2hlbWFFdmVudCgnZXJyb3InLCB7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHsgZXJyb3IgfVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgbm90aWZ5U3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIoZmFsc2UpXG4gICAgICAgICAgICB0aGlzLm5vdGlmeSh7XG4gICAgICAgICAgICAgIHR5cGU6ICdpbmZvJyxcbiAgICAgICAgICAgICAgdGl0bGU6IHRoaXMuaXNDcmVhdGluZ1xuICAgICAgICAgICAgICAgID8gYEl0ZW0gJHtjYXBpdGFsaXplKHZlcmIpfWBcbiAgICAgICAgICAgICAgICA6IGBDaGFuZ2UgJHtjYXBpdGFsaXplKHZlcmIpfWAsXG4gICAgICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgICAgICB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgICAgICAgICAgID8gYCR7dGhpcy5pdGVtTGFiZWx9IHdhcyAke3ZlcmJ9LmBcbiAgICAgICAgICAgICAgICAgIDogYENoYW5nZXMgdG8gJHt0aGlzLml0ZW1MYWJlbH0gd2VyZSAke3ZlcmJ9LmAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2llbnROb3RlXG4gICAgICAgICAgICAgIF1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSxcbiAgICAgICAgICBub3RpZnlFcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmVyYiA9IGdldFZlcmIodHJ1ZSlcbiAgICAgICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgICAgdGl0bGU6ICdSZXF1ZXN0IEVycm9yJyxcbiAgICAgICAgICAgICAgdGV4dDogYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9LmBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3VjY2VzcyA9IGF3YWl0IHRoaXMuc3VibWl0UmVzb3VyY2UoYnV0dG9uLCByZXNvdXJjZSwgbWV0aG9kLCBkYXRhLCB7XG4gICAgICAgICAgc2V0RGF0YTogdHJ1ZSxcbiAgICAgICAgICBvblN1Y2Nlc3M6ICgpID0+IHRoaXMuZW1pdFNjaGVtYUV2ZW50KHRoaXMuZ2V0U3VibWl0VmVyYigpKSxcbiAgICAgICAgICBvbkVycm9yOiBlcnJvciA9PlxuICAgICAgICAgICAgdGhpcy5lbWl0U2NoZW1hRXZlbnQoJ2Vycm9yJywge1xuICAgICAgICAgICAgICBjb250ZXh0OiB7IGVycm9yIH1cbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIG5vdGlmeVN1Y2Nlc3M6ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZlcmIgPSBnZXRWZXJiKGZhbHNlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgICAgICAgIHRpdGxlOiBgU3VjY2Vzc2Z1bGx5ICR7Y2FwaXRhbGl6ZSh2ZXJiKX1gLFxuICAgICAgICAgICAgICB0ZXh0OiBgJHt0aGlzLml0ZW1MYWJlbH0gd2FzICR7dmVyYn0uYFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIG5vdGlmeUVycm9yOiBlcnJvciA9PiB7XG4gICAgICAgICAgICBjb25zdCB2ZXJiID0gZ2V0VmVyYih0cnVlKVxuICAgICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgICB0eXBlOiAnZXJyb3InLFxuICAgICAgICAgICAgICB0aXRsZTogJ1JlcXVlc3QgRXJyb3InLFxuICAgICAgICAgICAgICB0ZXh0OiBbXG4gICAgICAgICAgICAgICAgYFVuYWJsZSB0byAke3ZlcmJ9ICR7dGhpcy5pdGVtTGFiZWx9JHtlcnJvciA/ICc6JyA6ICcnfWAsXG4gICAgICAgICAgICAgICAgZXJyb3I/Lm1lc3NhZ2UgfHwgZXJyb3JcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc3VjY2Vzcykge1xuICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbigpXG4gICAgICAgIGlmIChjbG9zZUZvcm0gfHwgYnV0dG9uLmNsb3NlRm9ybSkge1xuICAgICAgICAgIHRoaXMuY2xvc2UoKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNDcmVhdGluZykge1xuICAgICAgICAgIC8vIFJlZGlyZWN0IHRvIHRoZSBmb3JtIGVkaXRpbmcgdGhlIG5ld2x5IGNyZWF0ZWQgaXRlbTpcbiAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0SXRlbUlkKHRoaXMuc2NoZW1hLCB0aGlzLmRhdGEpXG4gICAgICAgICAgdGhpcy4kcm91dGVyLnJlcGxhY2Uoe1xuICAgICAgICAgICAgcGF0aDogcmVzb2x2ZVBhdGgoYCR7dGhpcy5wYXRofS8uLi8ke2lkfWApLFxuICAgICAgICAgICAgLy8gUHJlc2VydmUgaGFzaCBmb3IgdGFiczpcbiAgICAgICAgICAgIGhhc2g6IHRoaXMuJHJvdXRlLmhhc2hcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc3VjY2Vzc1xuICAgIH0sXG5cbiAgICBhc3luYyBzdWJtaXRUcmFuc2llbnQoYnV0dG9uLCBfcmVzb3VyY2UsIF9tZXRob2QsIGRhdGEsIHtcbiAgICAgIG9uU3VjY2VzcyxcbiAgICAgIG9uRXJyb3IsXG4gICAgICBub3RpZnlTdWNjZXNzLFxuICAgICAgbm90aWZ5RXJyb3JcbiAgICB9KSB7XG4gICAgICAvLyBIYW5kbGUgdGhlIGRlZmF1bHQgXCJzdWJtaXR0aW5nXCIgb2YgdHJhbnNpZW50LCBuZXN0ZWQgZGF0YTpcbiAgICAgIGNvbnN0IHN1Y2Nlc3MgPSB0aGlzLmlzQ3JlYXRpbmdcbiAgICAgICAgPyB0aGlzLmFkZFNvdXJjZURhdGEoZGF0YSlcbiAgICAgICAgOiB0aGlzLnNldFNvdXJjZURhdGEoZGF0YSlcbiAgICAgIGlmIChzdWNjZXNzKSB7XG4gICAgICAgIG9uU3VjY2Vzcz8uKClcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnc3VjY2VzcycsIHtcbiAgICAgICAgICBub3RpZnk6IG5vdGlmeVN1Y2Nlc3NcbiAgICAgICAgfSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gJ0NvdWxkIG5vdCBzdWJtaXQgdHJhbnNpZW50IGl0ZW0nXG4gICAgICAgIG9uRXJyb3I/LihlcnJvcilcbiAgICAgICAgYXdhaXQgdGhpcy5lbWl0QnV0dG9uRXZlbnQoYnV0dG9uLCAnZXJyb3InLCB7XG4gICAgICAgICAgbm90aWZ5OiBub3RpZnlFcnJvcixcbiAgICAgICAgICBlcnJvclxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuIHN1Y2Nlc3NcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Gb3JtIGZyb20gJy4vRGl0b0Zvcm0udnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Gb3JtTmVzdGVkJywge1xuICBleHRlbmRzOiBEaXRvRm9ybVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbi5kaXRvLWZvcm0tbmVzdGVkIHtcbiAgLy8gTm8gc2Nyb2xsaW5nIGluc2lkZSBuZXN0ZWQgZm9ybXMsIGFuZCBwcmV2ZW50IG9wZW4gLm11bHRpc2VsZWN0IGZyb21cbiAgLy8gYmVpbmcgY3JvcHBlZC5cbiAgb3ZlcmZsb3c6IHZpc2libGU7XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWVycm9ycyhcbiAgdi1pZj1cImVycm9yc1wiXG4pXG4gIHVsXG4gICAgbGkoXG4gICAgICB2LWZvcj1cImVycm9yIG9mIGVycm9yc1wiXG4gICAgKSB7eyBlcnJvciB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB0aXBweSBmcm9tICd0aXBweS5qcydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgeyBtYXJrUmF3IH0gZnJvbSAndnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9FcnJvcnMnLCB7XG4gIHByb3BzOiB7XG4gICAgZXJyb3JzOiB7IHR5cGU6IEFycmF5LCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB0aXA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICBlcnJvcnMoKSB7XG4gICAgICB0aGlzLiRuZXh0VGljayh0aGlzLnVwZGF0ZUVycm9ycylcbiAgICB9XG4gIH0sXG5cbiAgdW5tb3VudGVkKCkge1xuICAgIHRoaXMudGlwPy5kZXN0cm95KClcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgdXBkYXRlRXJyb3JzKCkge1xuICAgICAgbGV0IHsgdGlwIH0gPSB0aGlzXG4gICAgICB0aXA/LmhpZGUoKVxuICAgICAgaWYgKHRoaXMuZXJyb3JzKSB7XG4gICAgICAgIHRpcCA9IHRoaXMudGlwID8/PSBtYXJrUmF3KHRpcHB5KHRoaXMuJGVsLmNsb3Nlc3QoJy5kaXRvLWNvbnRhaW5lcicpKSlcbiAgICAgICAgdGlwLnNldFByb3BzKHtcbiAgICAgICAgICBjb250ZW50OiB0aGlzLmVycm9ycy5qb2luKCdcXG4nKSxcbiAgICAgICAgICB0aGVtZTogJ2Vycm9yJyxcbiAgICAgICAgICB0cmlnZ2VyOiAnbWFudWFsJyxcbiAgICAgICAgICBhcHBlbmRUbzogJ3BhcmVudCcsXG4gICAgICAgICAgcGxhY2VtZW50OiAnYm90dG9tLXN0YXJ0JyxcbiAgICAgICAgICBhbmltYXRpb246ICdzaGlmdC1hd2F5LXN1YnRsZScsXG4gICAgICAgICAgcG9wcGVyT3B0aW9uczoge1xuICAgICAgICAgICAgbW9kaWZpZXJzOiBbXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBuYW1lOiAnZmxpcCcsXG4gICAgICAgICAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgXVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IHRydWUsXG4gICAgICAgICAgaGlkZU9uQ2xpY2s6IGZhbHNlLFxuICAgICAgICAgIG9mZnNldDogWzMsIDNdLCAvLyAxLzIgZm9ybS1zcGFjaW5nXG4gICAgICAgICAgekluZGV4OiAnJ1xuICAgICAgICB9KVxuICAgICAgICB0aXAucG9wcGVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsICgpID0+IHRpcC5oaWRlKCkpXG4gICAgICAgIHRpcC5zaG93KClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1lcnJvcnMge1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gIHZpc2liaWxpdHk6IGhpZGRlbjtcblxuICB1bCB7XG4gICAgY29sb3I6ICRjb2xvci1lcnJvcjtcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zY29wZXNcbiAgUm91dGVyTGluayhcbiAgICB2LWZvcj1cIihzY29wZSwga2V5KSBpbiBzY29wZXNcIlxuICAgIDprZXk9XCJrZXlcIlxuICAgIHYtc2xvdD1cInsgbmF2aWdhdGUgfVwiXG4gICAgOnRvPVwiZ2V0U2NvcGVMaW5rKHNjb3BlKVwiXG4gICAgY3VzdG9tXG4gIClcbiAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgIDpjbGFzcz1cInsgJ2RpdG8tc2VsZWN0ZWQnOiBzY29wZS5uYW1lID09PSBxdWVyeS5zY29wZSB9XCJcbiAgICAgIDp0aXRsZT1cInNjb3BlLmhpbnQgfHwgZ2V0TGFiZWwoc2NvcGUpXCJcbiAgICAgIEBjbGljaz1cIm5hdmlnYXRlXCJcbiAgICApIHt7IGdldExhYmVsKHNjb3BlKSB9fVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1Njb3BlcycsIHtcbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgc2NvcGVzOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRTY29wZUxpbmsoc2NvcGUpIHtcbiAgICAgIGNvbnN0IHF1ZXJ5ID0geyAuLi50aGlzLnF1ZXJ5LCBzY29wZTogc2NvcGUubmFtZSB9XG4gICAgICBpZiAocXVlcnkucGFnZSkge1xuICAgICAgICBxdWVyeS5wYWdlID0gMFxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0UXVlcnlMaW5rKHF1ZXJ5KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXNjb3BlcyB7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGRpc3BsYXk6IGZsZXg7XG5cbiAgLmRpdG8tYnV0dG9uIHtcbiAgICBAaW5jbHVkZSBlbGxpcHNpcztcblxuICAgIGJvcmRlci1yYWRpdXM6IDA7XG4gICAgLy8gQSBiaXQgbW9yZSB0aGFuIHRoZSB3aWR0aCBvZiBlbGxpcHNpcywgdG8gcHJldmVudCByZXBsYWNpbmcgc2hvcnQgd29yZHNcbiAgICAvLyB3aXRoIGVsbGlwc2lzLlxuICAgIG1pbi13aWR0aDogM2VtO1xuICAgIGZsZXg6IDAgMSBhdXRvO1xuXG4gICAgJjpmaXJzdC1jaGlsZCB7XG4gICAgICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAxZW07XG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAxZW07XG4gICAgICBwYWRkaW5nLWxlZnQ6IDFlbTtcbiAgICB9XG5cbiAgICAmOmxhc3QtY2hpbGQge1xuICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDFlbTtcbiAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAxZW07XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAxZW07XG4gICAgfVxuXG4gICAgJiArIC5kaXRvLWJ1dHRvbiB7XG4gICAgICBtYXJnaW4tbGVmdDogLTFweDtcbiAgICB9IC8vIERvbid0IGNvdmVyIHRoZSBmb2N1c2VkIGJvcmRlciBvZiBidXR0b25zOlxuICAgICY6Zm9jdXMge1xuICAgICAgei1pbmRleDogMTtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuUGFnaW5hdGlvbihcbiAgdi1tb2RlbDpwYWdlPVwicGFnZVwiXG4gIDpwYWdlU2l6ZT1cImxpbWl0XCJcbiAgOnRvdGFsPVwidG90YWxcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCB7IFBhZ2luYXRpb24gfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1BhZ2luYXRpb24nLCB7XG4gIGNvbXBvbmVudHM6IHsgUGFnaW5hdGlvbiB9LFxuXG4gIHByb3BzOiB7XG4gICAgcXVlcnk6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGxpbWl0OiB7IHR5cGU6IE51bWJlciwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICB0b3RhbDogeyB0eXBlOiBOdW1iZXIsIHJlcXVpcmVkOiB0cnVlIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHBhZ2U6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICgrdGhpcy5xdWVyeS5wYWdlIHx8IDApICsgMVxuICAgICAgfSxcblxuICAgICAgc2V0KHBhZ2UpIHtcbiAgICAgICAgaWYgKHRoaXMucGFnZSAhPT0gcGFnZSkge1xuICAgICAgICAgIHRoaXMuJHJvdXRlci5wdXNoKFxuICAgICAgICAgICAgdGhpcy5nZXRRdWVyeUxpbmsoe1xuICAgICAgICAgICAgICAuLi50aGlzLnF1ZXJ5LFxuICAgICAgICAgICAgICBwYWdlOiBwYWdlIC0gMVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzRHJhZ2dpbmc6IGZhbHNlXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXREcmFnZ2FibGVPcHRpb25zKGZvcmNlRmFsbGJhY2sgPSBmYWxzZSkge1xuICAgICAgY29uc3QgcHJlZml4ID0gJ2RpdG8tZHJhZ2dhYmxlJ1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYW5pbWF0aW9uOiAxNTAsXG4gICAgICAgIGhhbmRsZTogJy5kaXRvLWJ1dHRvbi1kcmFnJyxcbiAgICAgICAgZHJhZ0NsYXNzOiBgJHtwcmVmaXh9X19kcmFnYCxcbiAgICAgICAgY2hvc2VuQ2xhc3M6IGAke3ByZWZpeH1fX2Nob3NlbmAsXG4gICAgICAgIGdob3N0Q2xhc3M6IGAke3ByZWZpeH1fX2dob3N0YCxcbiAgICAgICAgZmFsbGJhY2tDbGFzczogYCR7cHJlZml4fV9fZmFsbGJhY2tgLFxuICAgICAgICBmb3JjZUZhbGxiYWNrLFxuICAgICAgICBvblN0YXJ0OiB0aGlzLm9uU3RhcnREcmFnLFxuICAgICAgICBvbkVuZDogdGhpcy5vbkVuZERyYWdcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25TdGFydERyYWcoKSB7XG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlXG4gICAgfSxcblxuICAgIG9uRW5kRHJhZyh7IG9sZEluZGV4LCBuZXdJbmRleCB9KSB7XG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSBmYWxzZVxuICAgICAgaWYgKG9sZEluZGV4ICE9PSBuZXdJbmRleCkge1xuICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgdXBkYXRlT3JkZXIoc291cmNlU2NoZW1hLCBsaXN0LCBwYWdpbmF0aW9uUmFuZ2UpIHtcbiAgICAgIGNvbnN0IHsgb3JkZXJLZXkgfSA9IHNvdXJjZVNjaGVtYVxuICAgICAgaWYgKG9yZGVyS2V5KSB7XG4gICAgICAgIC8vIFJlb3JkZXIgdGhlIGNoYW5nZWQgZW50cmllcyBieSB0aGVpciBvcmRlciBrZXksIHRha2luZyBwYWdpbmF0aW9uXG4gICAgICAgIC8vIG9mZnNldHMgaW50byBhY2NvdW50OlxuICAgICAgICBjb25zdCBvZmZzZXQgPSBwYWdpbmF0aW9uUmFuZ2U/LlswXSB8fCAwXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgIGxpc3RbaV1bb3JkZXJLZXldID0gaSArIG9mZnNldFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFxuICAgIH1cbiAgfVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXRyZWUtaXRlbShcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICA6Y2xhc3M9YHtcbiAgICAnZGl0by1kcmFnZ2luZyc6IGlzRHJhZ2dpbmcsXG4gICAgJ2RpdG8tYWN0aXZlJzogYWN0aXZlXG4gIH1gXG4gIDpzdHlsZT1cImxldmVsID4gMCAmJiB7ICctLWxldmVsJzogbGV2ZWwgfVwiXG4pXG4gIC5kaXRvLXRyZWUtaGVhZGVyKFxuICAgIHYtaWY9XCJsYWJlbFwiXG4gIClcbiAgICAuZGl0by10cmVlLWJyYW5jaChcbiAgICAgIHYtaWY9XCJudW1FbnRyaWVzXCJcbiAgICAgIEBjbGljay5zdG9wPVwib3BlbmVkID0gIW9wZW5lZFwiXG4gICAgKVxuICAgICAgLmRpdG8tY2hldnJvbihcbiAgICAgICAgdi1pZj1cIm51bUVudHJpZXNcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLW9wZW4nOiBvcGVuZWQgfVwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWxhYmVsKFxuICAgICAgICB2LWh0bWw9XCJsYWJlbFwiXG4gICAgICApXG4gICAgICAuZGl0by10cmVlLWluZm8oXG4gICAgICAgIHYtaWY9XCJkZXRhaWxzXCJcbiAgICAgICkge3sgZGV0YWlscyB9fVxuICAgIC5kaXRvLXRyZWUtbGVhZihcbiAgICAgIHYtZWxzZVxuICAgIClcbiAgICAgIC5kaXRvLXRyZWUtbGFiZWwoXG4gICAgICAgIHYtaHRtbD1cImxhYmVsXCJcbiAgICAgIClcbiAgICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy1zbWFsbChcbiAgICAgIHYtaWY9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgIGEuZGl0by1idXR0b24oXG4gICAgICAgIHYtaWY9XCJkcmFnZ2FibGVcIlxuICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgIClcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZWRpdClcIlxuICAgICAgICBAY2xpY2s9XCJvbkVkaXRcIlxuICAgICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWlmPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgIHYtYmluZD1cImdldEJ1dHRvbkF0dHJpYnV0ZXModmVyYnMuZGVsZXRlKVwiXG4gICAgICAgIEBjbGljaz1cIm9uRGVsZXRlXCJcbiAgICAgIClcbiAgdGFibGUuZGl0by1wcm9wZXJ0aWVzKFxuICAgIHYtaWY9XCJwcm9wZXJ0aWVzXCJcbiAgICB2LXNob3c9XCJvcGVuZWRcIlxuICApXG4gICAgdHIoXG4gICAgICB2LWZvcj1cInByb3BlcnR5IGluIHByb3BlcnRpZXNcIlxuICAgIClcbiAgICAgIHRkXG4gICAgICAgIERpdG9MYWJlbChcbiAgICAgICAgICB2LWlmPVwicHJvcGVydHkubGFiZWwgIT09IGZhbHNlXCJcbiAgICAgICAgICA6ZGF0YVBhdGg9XCJnZXRQcm9wZXJ0eURhdGFQYXRoKHByb3BlcnR5KVwiXG4gICAgICAgICAgOmxhYmVsPVwiZ2V0TGFiZWwocHJvcGVydHkpXCJcbiAgICAgICAgKVxuICAgICAgRGl0b1RhYmxlQ2VsbChcbiAgICAgICAgOmNlbGw9XCJwcm9wZXJ0eVwiXG4gICAgICAgIDpzY2hlbWE9XCJwcm9wZXJ0eVwiXG4gICAgICAgIDpkYXRhUGF0aD1cImdldFByb3BlcnR5RGF0YVBhdGgocHJvcGVydHkpXCJcbiAgICAgICAgOmRhdGE9XCJkYXRhXCJcbiAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICApXG4gIERpdG9EcmFnZ2FibGUoXG4gICAgdi1pZj1cImNoaWxkcmVuU2NoZW1hXCJcbiAgICB2LXNob3c9XCJvcGVuZWRcIlxuICAgIDptb2RlbFZhbHVlPVwidXBkYXRlT3JkZXIoY2hpbGRyZW5TY2hlbWEsIGNoaWxkcmVuTGlzdClcIlxuICAgIDpvcHRpb25zPVwiZ2V0RHJhZ2dhYmxlT3B0aW9ucyh0cnVlKVwiXG4gICAgOmRyYWdnYWJsZT1cImNoaWxkcmVuRHJhZ2dhYmxlXCJcbiAgICBAdXBkYXRlOm1vZGVsVmFsdWU9XCJ2YWx1ZSA9PiAoY2hpbGRyZW5MaXN0ID0gdmFsdWUpXCJcbiAgKVxuICAgIERpdG9UcmVlSXRlbShcbiAgICAgIHYtZm9yPVwiKGl0ZW0sIGluZGV4KSBpbiBjaGlsZHJlbkl0ZW1zXCJcbiAgICAgIDprZXk9XCJnZXRJdGVtVWlkKGNoaWxkcmVuU2NoZW1hLCBpdGVtLmRhdGEpXCJcbiAgICAgIDpzY2hlbWE9XCJjaGlsZHJlblNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJnZXRJdGVtRGF0YVBhdGgoY2hpbGRyZW5TY2hlbWEsIGluZGV4KVwiXG4gICAgICA6ZGF0YT1cIml0ZW0uZGF0YVwiXG4gICAgICA6cGF0aD1cIml0ZW0ucGF0aFwiXG4gICAgICA6b3Blbj1cIml0ZW0ub3BlblwiXG4gICAgICA6YWN0aXZlPVwiaXRlbS5hY3RpdmVcIlxuICAgICAgOmRyYWdnYWJsZT1cImNoaWxkcmVuRHJhZ2dhYmxlXCJcbiAgICAgIDpsYWJlbD1cImdldEl0ZW1MYWJlbChjaGlsZHJlblNjaGVtYSwgaXRlbS5kYXRhLCB7IGluZGV4IH0pXCJcbiAgICAgIDpsZXZlbD1cImxldmVsICsgMVwiXG4gICAgKVxuICAgIC8vLSBUT0RPOiBDb252ZXJ0IGRpdG8tdHJlZS1pdGVtIHRvIHVzZSBkaXRvLWxhYmVsIGludGVybmFsbHksIGFuZCB0aGVuXG4gICAgLy8tIHBhc3MgYGFzT2JqZWN0OiB0cnVlYCBpbiB0aGUgYGdldEl0ZW1MYWJlbCgpYCBjYWxsIGFib3ZlLlxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5pbXBvcnQgSXRlbU1peGluIGZyb20gJy4uL21peGlucy9JdGVtTWl4aW4nXG5pbXBvcnQgU29ydGFibGVNaXhpbiBmcm9tICcuLi9taXhpbnMvU29ydGFibGVNaXhpbi5qcydcbmltcG9ydCB7IGFwcGVuZERhdGFQYXRoIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBnZXROYW1lZFNjaGVtYXMsIGhhc0Zvcm1TY2hlbWEgfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RyZWVJdGVtJywge1xuICBtaXhpbnM6IFtJdGVtTWl4aW4sIFNvcnRhYmxlTWl4aW5dLFxuICBpbmplY3Q6IFsnY29udGFpbmVyJ10sXG5cbiAgcHJvcHM6IHtcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IFtBcnJheSwgT2JqZWN0XSwgZGVmYXVsdDogbnVsbCB9LFxuICAgIHBhdGg6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiAnJyB9LFxuICAgIG9wZW46IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBhY3RpdmU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBkcmFnZ2FibGU6IHsgdHlwZTogQm9vbGVhbiwgZGVmYXVsdDogZmFsc2UgfSxcbiAgICBsYWJlbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICBsZXZlbDogeyB0eXBlOiBOdW1iZXIsIGRlZmF1bHQ6IDAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG9wZW5lZDogdGhpcy5vcGVuIHx8IHRoaXMuc2NoZW1hLm9wZW5cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBtZXRhKCkge1xuICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLm1ldGFcbiAgICB9LFxuXG4gICAgc3RvcmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuc3RvcmVcbiAgICB9LFxuXG4gICAgZGlzYWJsZWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuZGlzYWJsZWRcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9wZXJ0aWVzKCkge1xuICAgICAgcmV0dXJuIGdldE5hbWVkU2NoZW1hcyh0aGlzLnNjaGVtYS5wcm9wZXJ0aWVzKVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBTaG91bGQgdGhpcyBiZSBuYW1lZCBgc291cmNlU2NoZW1hYCBpbnN0ZWFkPyBVc2UgU291cmNlTWl4aW4/XG4gICAgY2hpbGRyZW5TY2hlbWEoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEuY2hpbGRyZW5cbiAgICB9LFxuXG4gICAgY2hpbGRyZW5MaXN0KCkge1xuICAgICAgY29uc3QgbmFtZSA9IHRoaXMuY2hpbGRyZW5TY2hlbWE/Lm5hbWVcbiAgICAgIHJldHVybiBuYW1lICYmIHRoaXMuZGF0YVtuYW1lXVxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkRyYWdnYWJsZSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuY2hpbGRyZW5MaXN0Py5sZW5ndGggPiAxICYmXG4gICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2RyYWdnYWJsZScsIHtcbiAgICAgICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgICAgIHNjaGVtYTogdGhpcy5jaGlsZHJlblNjaGVtYVxuICAgICAgICB9KVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBudW1DaGlsZHJlbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuTGlzdD8ubGVuZ3RoIHx8IDBcbiAgICB9LFxuXG4gICAgbnVtUHJvcGVydGllcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnByb3BlcnRpZXM/Lmxlbmd0aCB8fCAwXG4gICAgfSxcblxuICAgIG51bUVudHJpZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5udW1Qcm9wZXJ0aWVzICsgdGhpcy5udW1DaGlsZHJlblxuICAgIH0sXG5cbiAgICBjaGlsZHJlbkl0ZW1zKCkge1xuICAgICAgY29uc3QgeyBjaGlsZHJlblNjaGVtYSwgY2hpbGRyZW5MaXN0IH0gPSB0aGlzXG4gICAgICBpZiAoY2hpbGRyZW5TY2hlbWEgJiYgY2hpbGRyZW5MaXN0KSB7XG4gICAgICAgIGNvbnN0IHsgZWRpdFBhdGggfSA9IHRoaXMuY29udGFpbmVyXG4gICAgICAgIGNvbnN0IGNoaWxkcmVuT3BlbiA9ICF0aGlzLnBhdGggJiYgY2hpbGRyZW5TY2hlbWEub3BlblxuICAgICAgICAvLyBCdWlsZCBhIGNoaWxkcmVuIGxpc3Qgd2l0aCBjaGlsZCBtZXRhIGluZm9ybWF0aW9uIGZvciB0aGUgdGVtcGxhdGUuXG4gICAgICAgIHJldHVybiB0aGlzLnVwZGF0ZU9yZGVyKFxuICAgICAgICAgIGNoaWxkcmVuU2NoZW1hLFxuICAgICAgICAgIGNoaWxkcmVuTGlzdC5tYXAoKGRhdGEsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXRoID0gKFxuICAgICAgICAgICAgICBjaGlsZHJlblNjaGVtYS5wYXRoICYmXG4gICAgICAgICAgICAgIGAke3RoaXMucGF0aH0vJHtjaGlsZHJlblNjaGVtYS5wYXRofS8ke2luZGV4fWBcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IG9wZW4gPSAoXG4gICAgICAgICAgICAgIGNoaWxkcmVuT3BlbiB8fFxuICAgICAgICAgICAgICAvLyBPbmx5IGNvdW50IGFzIFwiaW4gZWRpdCBwYXRoXCIgd2hlbiBpdCdzIG5vdCB0aGUgZnVsbCBlZGl0IHBhdGguXG4gICAgICAgICAgICAgIGVkaXRQYXRoLnN0YXJ0c1dpdGgocGF0aCkgJiYgcGF0aC5sZW5ndGggPCBlZGl0UGF0aC5sZW5ndGhcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZSA9IGVkaXRQYXRoID09PSBwYXRoXG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICBwYXRoLFxuICAgICAgICAgICAgICBvcGVuLFxuICAgICAgICAgICAgICBhY3RpdmVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gW11cbiAgICB9LFxuXG4gICAgZGV0YWlscygpIHtcbiAgICAgIGNvbnN0IHsgbnVtQ2hpbGRyZW4gfSA9IHRoaXNcbiAgICAgIHJldHVybiAoXG4gICAgICAgIG51bUNoaWxkcmVuICYmXG4gICAgICAgIGAke251bUNoaWxkcmVufSAke1xuICAgICAgICAgIG51bUNoaWxkcmVuID09PSAxID8gJ2l0ZW0nIDogJ2l0ZW1zJ1xuICAgICAgICB9YFxuICAgICAgKVxuICAgIH0sXG5cbiAgICBoYXNFZGl0QnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmRyYWdnYWJsZSB8fCB0aGlzLmVkaXRhYmxlIHx8IHRoaXMuZGVsZXRhYmxlXG4gICAgfSxcblxuICAgIC8vIFRPRE86IFN1cHBvcnQgY3JlYXRhYmxlIVxuICAgIC8vIFRPRE86IEFkZCBzdXBwb3J0IGZvciBjcmVhdGFibGUsIGVkaXRhYmxlIGFuZCBkZWxldGFibGUgb3ZlcnJpZGVzIG9uIHRoZVxuICAgIC8vIGFzc29jaWF0ZWQgZm9ybXMsIGp1c3QgbGlrZSBpbiBgVHlwZUxpc3RgIGFuZCBgVHlwZU9iamVjdGAsIHRocm91Z2hcbiAgICAvLyBgRGl0b0VkaXRCdXR0b25zYC4gSXQgd291bGQgYmUgYmVzdCB0byB1c2UgYERpdG9FZGl0QnV0dG9uc2AgaGVyZSB0b28uXG4gICAgY3JlYXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY3JlYXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGNyZWF0YWJsZSkge1xuICAgICAgICByZXR1cm4gY3JlYXRhYmxlICYmIGhhc0Zvcm1TY2hlbWEodGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBlZGl0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VkaXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgZ2V0KGVkaXRhYmxlKSB7XG4gICAgICAgIHJldHVybiBlZGl0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZGVsZXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZGVsZXRhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSlcbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZ2V0UHJvcGVydHlEYXRhUGF0aChwcm9wZXJ0eSkge1xuICAgICAgcmV0dXJuIGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIHByb3BlcnR5Lm5hbWUpXG4gICAgfSxcblxuICAgIG9uRWRpdCgpIHtcbiAgICAgIC8vIEFsbCB3ZSBnb3QgdG8gZG8gaXMgcHVzaCB0aGUgcmlnaHQgZWRpdCBwYXRoIHRvIHRoZSByb3V0ZXIsIHRoZSByZXN0XG4gICAgICAvLyBpcyBoYW5kbGVkIGJ5IG91ciByb3V0ZXMsIGFsbG93aW5nIHJlbG9hZHMgYXMgd2VsbC5cbiAgICAgIHRoaXMuJHJvdXRlci5wdXNoKHtcbiAgICAgICAgcGF0aDogYCR7dGhpcy5jb250YWluZXIucGF0aH0ke3RoaXMucGF0aH1gLFxuICAgICAgICAvLyBQcmVzZXJ2ZSBjdXJyZW50IHF1ZXJ5XG4gICAgICAgIHF1ZXJ5OiB0aGlzLiRyb3V0ZS5xdWVyeVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25EZWxldGUoKSB7XG4gICAgICAvLyBUT0RPOiBJbXBsZW1lbnQhXG4gICAgfSxcblxuICAgIG9uQ2hhbmdlKCkge1xuICAgICAgdGhpcy5jb250YWluZXIub25DaGFuZ2UoKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRyZWUtaXRlbSB7XG4gIC0tY2hldnJvbi1pbmRlbnQ6ICN7JGNoZXZyb24taW5kZW50fTtcblxuICA+IC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICA+IC5kaXRvLXRyZWUtYnJhbmNoLFxuICAgID4gLmRpdG8tdHJlZS1sZWFmIHtcbiAgICAgIC8vIFVzZSBgLS1sZXZlbGAgQ1NTIHZhcmlhYmxlIHRvIGNhbGN1bGF0ZWQgdGhlIGFjY3VtdWxhdGVkIGluZGVudFxuICAgICAgLy8gcGFkZGluZyBkaXJlY3RseSBpbnN0ZWFkIG9mIGhhdmluZyBpdCBhY2N1bXVsYXRlIGluIG5lc3RlZCBDU1MuXG4gICAgICAvLyBUaGlzIHdheSwgd2UgY2FuIGtlZXAgdGhlIC5kaXRvLWFjdGl2ZSBhcmVhIGNvdmVyIHRoZSBmdWxsIHdpZHRoOlxuICAgICAgcGFkZGluZy1sZWZ0OiBjYWxjKHZhcigtLWNoZXZyb24taW5kZW50KSAqICh2YXIoLS1sZXZlbCwgMSkgLSAxKSk7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tdHJlZS1icmFuY2gge1xuICAgIGN1cnNvcjogcG9pbnRlcjtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtaGVhZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtYnJhbmNoLFxuICAuZGl0by10cmVlLWxlYWYge1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgZmxleDogYXV0bztcbiAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gICAgbWFyZ2luOiAxcHggMDtcbiAgICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtbGFiZWwsXG4gIC5kaXRvLXRyZWUtaW5mbyB7XG4gICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtaW5mbyB7XG4gICAgcGFkZGluZy1sZWZ0OiAwLjM1ZW07XG4gICAgY29sb3I6IHJnYmEoJGNvbG9yLWJsYWNrLCAwLjIpO1xuICB9XG5cbiAgLmRpdG8tYnV0dG9ucyB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICB2aXNpYmlsaXR5OiBoaWRkZW47XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIG1hcmdpbjogMXB4IDAgMXB4IDFlbTtcbiAgfVxuXG4gIC5kaXRvLXRyZWUtaGVhZGVyOmhvdmVyIHtcbiAgICA+IC5kaXRvLWJ1dHRvbnMge1xuICAgICAgdmlzaWJpbGl0eTogdmlzaWJsZTtcbiAgICB9IC8vIEhpZGUgYnV0dG9ucyBkdXJpbmcgZHJhZ2dpbmdcbiAgfVxuXG4gICYuZGl0by1kcmFnZ2luZyB7XG4gICAgLmRpdG8tdHJlZS1oZWFkZXIge1xuICAgICAgPiAuZGl0by1idXR0b25zIHtcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gICYuZGl0by1hY3RpdmUge1xuICAgID4gLmRpdG8tdHJlZS1oZWFkZXIge1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgIHBhZGRpbmc6IDAgJGlucHV0LXBhZGRpbmctaG9yO1xuICAgICAgbWFyZ2luOiAwICgtJGlucHV0LXBhZGRpbmctaG9yKTtcblxuICAgICAgPiAuZGl0by10cmVlLWJyYW5jaCB7XG4gICAgICAgID4gLmRpdG8tY2hldnJvbjo6YmVmb3JlIHtcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgID4gKiA+IC5kaXRvLXRyZWUtbGFiZWwge1xuICAgICAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC5kaXRvLXByb3BlcnRpZXMge1xuICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIG1hcmdpbi1sZWZ0OiAkY2hldnJvbi1pbmRlbnQ7XG5cbiAgICA+IHRyIHtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTtcbiAgICB9XG5cbiAgICAuZGl0by1sYWJlbCB7XG4gICAgICBtYXJnaW46IDA7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgY29udGVudDogJzogJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGhlYWQuZGl0by10YWJsZS1oZWFkXG4gIHRyXG4gICAgdGVtcGxhdGUoXG4gICAgICB2LWZvcj1cImNvbHVtbiBpbiBjb2x1bW5zXCJcbiAgICApXG4gICAgICB0aChcbiAgICAgICAgdi1pZj1cInNob3VsZFJlbmRlclNjaGVtYShjb2x1bW4pXCJcbiAgICAgICAgOmNsYXNzPVwiZ2V0Q29sdW1uQ2xhc3MoY29sdW1uKVwiXG4gICAgICApXG4gICAgICAgIFJvdXRlckxpbmsoXG4gICAgICAgICAgdi1pZj1cImNvbHVtbi5zb3J0YWJsZVwiXG4gICAgICAgICAgdi1zbG90PVwieyBuYXZpZ2F0ZSB9XCJcbiAgICAgICAgICA6dG89XCJnZXRTb3J0TGluayhjb2x1bW4pXCJcbiAgICAgICAgICBjdXN0b21cbiAgICAgICAgKVxuICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgOmNsYXNzPVwiZ2V0U29ydENsYXNzKGNvbHVtbilcIlxuICAgICAgICAgICAgQGNsaWNrPVwibmF2aWdhdGVcIlxuICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLW9yZGVyLWFycm93c1xuICAgICAgICAgICAgc3BhbiB7eyBnZXRMYWJlbChjb2x1bW4pIH19XG4gICAgICAgIHNwYW4oXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgICkge3sgZ2V0TGFiZWwoY29sdW1uKSB9fVxuICAgIHRoKFxuICAgICAgdi1pZj1cImhhc0VkaXRCdXR0b25zXCJcbiAgICApXG4gICAgICAvLy0gRW1wdHkgPHNwYW4+IGlzIG5lZWRlZCBmb3Igc3R5bGluZywgc2VlIF90YWJsZS5zY3NzXG4gICAgICBzcGFuXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCB7IGh5cGhlbmF0ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RhYmxlSGVhZCcsIHtcbiAgcHJvcHM6IHtcbiAgICBxdWVyeTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgY29sdW1uczogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgaGFzRWRpdEJ1dHRvbnM6IHsgdHlwZTogQm9vbGVhbiwgcmVxdWlyZWQ6IHRydWUgfVxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgc29ydCgpIHtcbiAgICAgIGNvbnN0IG9yZGVyID0gKHRoaXMucXVlcnkub3JkZXIgfHwgJycpLnNwbGl0KC9cXHMrLylcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG5hbWU6IG9yZGVyWzBdLFxuICAgICAgICBvcmRlcjogb3JkZXJbMV1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbHVtbkNsYXNzKGNvbHVtbikge1xuICAgICAgcmV0dXJuIGBkaXRvLWNvbHVtbi0ke2h5cGhlbmF0ZShjb2x1bW4ubmFtZSl9YFxuICAgIH0sXG5cbiAgICBnZXRTb3J0Q2xhc3MoY29sdW1uKSB7XG4gICAgICByZXR1cm4gdGhpcy5zb3J0Lm5hbWUgPT09IGNvbHVtbi5uYW1lXG4gICAgICAgID8gYGRpdG8tc2VsZWN0ZWQgZGl0by1vcmRlci0ke3RoaXMuc29ydC5vcmRlcn1gXG4gICAgICAgIDogbnVsbFxuICAgIH0sXG5cbiAgICBnZXRTb3J0TGluayhjb2x1bW4pIHtcbiAgICAgIC8vIFRvZ2dsZSBvcmRlciBpZiB0aGUgc2FtZSBjb2x1bW4gaXMgY2xpY2tlZCBhZ2Fpbi5cbiAgICAgIGNvbnN0IG9yZGVyID1cbiAgICAgICAgdGhpcy5zb3J0Lm5hbWUgPT09IGNvbHVtbi5uYW1lICYmIHRoaXMuc29ydC5vcmRlciA9PT0gJ2FzYydcbiAgICAgICAgICA/ICdkZXNjJ1xuICAgICAgICAgIDogJ2FzYydcbiAgICAgIHJldHVybiB0aGlzLmdldFF1ZXJ5TGluayh7XG4gICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgIG9yZGVyOiBgJHtjb2x1bW4ubmFtZX0gJHtvcmRlcn1gXG4gICAgICB9KVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXRhYmxlLWhlYWQge1xuICBAaW5jbHVkZSB1c2VyLXNlbGVjdChub25lKTtcblxuICB0ciB7XG4gICAgdGgge1xuICAgICAgcGFkZGluZzogMDtcbiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICB0ZXh0LWFsaWduOiBsZWZ0O1xuICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcblxuICAgICAgLmRpdG8tYnV0dG9uIHtcbiAgICAgICAgLy8gQ29udmVudGlvbjogTmVzdGVkIHNwYW5zIGhhbmRsZSBwYWRkaW5nLCBzZWUgYmVsb3dcbiAgICAgICAgZGlzcGxheTogYmxvY2s7IC8vIE92ZXJyaWRlIGRlZmF1bHQgaW5saW5lLWZsZXggcG9zaXRpb25pbmcuXG4gICAgICAgIHBhZGRpbmc6IDA7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgICB0ZXh0LWFsaWduOiBpbmhlcml0O1xuICAgICAgICBib3JkZXItcmFkaXVzOiAwO1xuICAgICAgfVxuXG4gICAgICBzcGFuIHtcbiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgICAgICAvLyBDb252ZW50aW9uOiBOZXN0ZWQgc3BhbnMgaGFuZGxlIHBhZGRpbmdcbiAgICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG5cbiAgICAgICAgJjplbXB0eTo6YWZ0ZXIge1xuICAgICAgICAgIC8vIFByZXZlbnQgZW1wdHkgPHRoPiBmcm9tIGNvbGxhcHNpbmdcbiAgICAgICAgICBjb250ZW50OiAnXFwyMDBiJzsgLy8gemVyby13aWR0aCBzcGFjZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICA+IHNwYW4ge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudGQoXG4gIDpjbGFzcz1cImNlbGwuY2xhc3NcIlxuICA6c3R5bGU9XCJjZWxsLnN0eWxlXCJcbilcbiAgLy8tIFRPRE86IEltcGxlbWVudCBpbmxpbmVkIGNvbXBvbmVudHMgaW4gY2VsbCBtb2RlIVxuICBjb21wb25lbnQoXG4gICAgdi1pZj1cImNlbGwuY29tcG9uZW50XCJcbiAgICA6aXM9XCJjZWxsLmNvbXBvbmVudFwiXG4gICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgIDpkYXRhPVwiZGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOm5lc3RlZD1cIm5lc3RlZFwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICApXG4gIHNwYW4oXG4gICAgdi1lbHNlXG4gICAgdi1odG1sPVwicmVuZGVyQ2VsbChkYXRhKVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgZXNjYXBlSHRtbCB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1RhYmxlQ2VsbCcsIHtcbiAgcHJvcHM6IHtcbiAgICBjZWxsOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzY2hlbWE6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIGRhdGFQYXRoOiB7IHR5cGU6IFN0cmluZywgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBkYXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBtZXRhOiB7IHR5cGU6IE9iamVjdCwgcmVxdWlyZWQ6IHRydWUgfSxcbiAgICBzdG9yZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH0sXG4gICAgbmVzdGVkOiB7IHR5cGU6IEJvb2xlYW4sIGRlZmF1bHQ6IHRydWUgfSxcbiAgICBkaXNhYmxlZDogeyB0eXBlOiBCb29sZWFuLCBkZWZhdWx0OiBmYWxzZSB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIHJlbmRlckNlbGwoaXRlbSkge1xuICAgICAgY29uc3QgeyBuYW1lLCByZW5kZXIgfSA9IHRoaXMuY2VsbFxuICAgICAgY29uc3QgdmFsdWUgPSBpdGVtW25hbWVdXG4gICAgICByZXR1cm4gcmVuZGVyXG4gICAgICAgID8gcmVuZGVyLmNhbGwoXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICAgbmV3IERpdG9Db250ZXh0KHRoaXMsIHtcbiAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW0sXG4gICAgICAgICAgICAgIGRhdGFQYXRoOiBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCBuYW1lKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApXG4gICAgICAgIDogZXNjYXBlSHRtbCh2YWx1ZSlcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by11cGxvYWQtZmlsZVxuICAuZGl0by10aHVtYm5haWwoXG4gICAgdi1pZj1cInRodW1ibmFpbFwiXG4gICAgOmNsYXNzPVwiYGRpdG8tdGh1bWJuYWlsLS0ke3RodW1ibmFpbH1gXCJcbiAgKVxuICAgIC5kaXRvLXRodW1ibmFpbF9faW5uZXJcbiAgICAgIGltZyhcbiAgICAgICAgdi1pZj1cInNvdXJjZVwiXG4gICAgICAgIDpzcmM9XCJzb3VyY2VcIlxuICAgICAgICBjcm9zc29yaWdpbj1cImFub255bW91c1wiXG4gICAgICApXG4gICAgICAuZGl0by10aHVtYm5haWxfX3R5cGUoXG4gICAgICAgIHYtZWxzZVxuICAgICAgKVxuICAgICAgICBzcGFuIHt7IHR5cGUgfX1cbiAgc3BhbiB7eyBmaWxlLm5hbWUgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9VcGxvYWRGaWxlJywge1xuICBwcm9wczoge1xuICAgIGZpbGU6IHsgdHlwZTogT2JqZWN0LCByZXF1aXJlZDogdHJ1ZSB9LFxuICAgIHRodW1ibmFpbDogeyB0eXBlOiBTdHJpbmcsIGRlZmF1bHQ6IG51bGwgfSxcbiAgICB0aHVtYm5haWxVcmw6IHsgdHlwZTogU3RyaW5nLCBkZWZhdWx0OiBudWxsIH1cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICB1cGxvYWRVcmw6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB0eXBlKCkge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgVFlQRVNbdGhpcy5maWxlLnR5cGVdIHx8XG4gICAgICAgIHRoaXMuZmlsZS5uYW1lLnNwbGl0KCcuJykucG9wKCkudG9VcHBlckNhc2UoKVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBzb3VyY2UoKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRVcmwgfHwgdGhpcy50aHVtYm5haWxVcmxcbiAgICB9XG4gIH0sXG5cbiAgd2F0Y2g6IHtcbiAgICAnZmlsZS51cGxvYWQuZmlsZSc6IHtcbiAgICAgIGltbWVkaWF0ZTogdHJ1ZSxcbiAgICAgIGhhbmRsZXIoZmlsZSkge1xuICAgICAgICBpZiAodGhpcy50aHVtYm5haWwgJiYgZmlsZT8udHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKSkge1xuICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICAgICAgICByZWFkZXIub25sb2FkID0gKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy51cGxvYWRVcmwgPSByZWFkZXIucmVzdWx0XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy51cGxvYWRVcmwgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmNvbnN0IFRZUEVTID0ge1xuICAndGV4dC9wbGFpbic6ICdUWFQnLFxuICAndGV4dC9odG1sJzogJ0hUTUwnLFxuICAndGV4dC9jc3MnOiAnQ1NTJyxcbiAgJ3RleHQvamF2YXNjcmlwdCc6ICdKUycsXG4gICdpbWFnZS9qcGVnJzogJ0pQRycsXG4gICdpbWFnZS9wbmcnOiAnUE5HJyxcbiAgJ2ltYWdlL2dpZic6ICdHSUYnLFxuICAnaW1hZ2Uvc3ZnK3htbCc6ICdTVkcnLFxuICAnbW92aWUvbXA0JzogJ01QNCcsXG4gICdhdWRpby9tcGVnJzogJ01QMycsXG4gICdhcHBsaWNhdGlvbi9qc29uJzogJ0pTT04nLFxuICAnYXBwbGljYXRpb24veG1sJzogJ1hNTCcsXG4gICdhcHBsaWNhdGlvbi9wZGYnOiAnUERGJyxcbiAgJ2FwcGxpY2F0aW9uL3ppcCc6ICdaSVAnXG59XG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AdXNlICdzYXNzOm1hdGgnO1xuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdXBsb2FkLWZpbGUge1xuICBkaXNwbGF5OiBmbGV4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG59XG5cbi5kaXRvLXRodW1ibmFpbCB7XG4gICRzZWxmOiAmO1xuXG4gIC8vIFNtYWxsIHNpemUgYnkgZGVmYXVsdFxuICAtLW1heC1zaXplOiAjezEgKiAkaW5wdXQtaGVpZ2h0fTtcbiAgLS1jb3JuZXItc2l6ZTogY2FsYyh2YXIoLS1tYXgtc2l6ZSkgLyA1KTtcbiAgLS1zaGFkb3ctc2l6ZTogMXB4O1xuICAtLW1pbi1zaXplOiBjYWxjKDIgKiB2YXIoLS1jb3JuZXItc2l6ZSkpO1xuICAtLW1hcmdpbjogMGVtO1xuICAtLWRyb3Atc2hhZG93OiBkcm9wLXNoYWRvdyhcbiAgICAwIGNhbGModmFyKC0tc2hhZG93LXNpemUpICogMC43NSkgdmFyKC0tc2hhZG93LXNpemUpICN7cmdiYShcbiAgICAgICAgJGNvbG9yLWJsYWNrLFxuICAgICAgICAwLjRcbiAgICAgICl9XG4gICk7XG5cbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICBtYXJnaW46IHZhcigtLW1hcmdpbik7XG4gIG1hcmdpbi1yaWdodDogMC41ZW07XG4gIGZpbHRlcjogdmFyKC0tZHJvcC1zaGFkb3cpO1xuXG4gICYtLXNtYWxsIHtcbiAgICAtLW1heC1zaXplOiAjezEgKiAkaW5wdXQtaGVpZ2h0fTtcbiAgICAtLW1hcmdpbjogMGVtO1xuICAgIC0tc2hhZG93LXNpemU6IDFweDtcbiAgfVxuXG4gICYtLW1lZGl1bSB7XG4gICAgLS1tYXgtc2l6ZTogI3syICogJGlucHV0LWhlaWdodH07XG4gICAgLS1tYXJnaW46IDAuMjVlbTtcbiAgICAtLXNoYWRvdy1zaXplOiAxLjVweDtcbiAgfVxuXG4gICYtLWxhcmdlIHtcbiAgICAtLW1heC1zaXplOiAjezQgKiAkaW5wdXQtaGVpZ2h0fTtcbiAgICAtLW1hcmdpbjogMC41ZW07XG4gICAgLS1zaGFkb3ctc2l6ZTogMi41cHg7XG4gIH1cblxuICAmX19pbm5lciB7XG4gICAgYmFja2dyb3VuZDogI2ZmZmZmZjtcbiAgICBjbGlwLXBhdGg6IHBvbHlnb24oXG4gICAgICAwIDAsXG4gICAgICBjYWxjKDEwMCUgLSB2YXIoLS1jb3JuZXItc2l6ZSkpIDAsXG4gICAgICAxMDAlIHZhcigtLWNvcm5lci1zaXplKSxcbiAgICAgIDEwMCUgMTAwJSxcbiAgICAgIDAgMTAwJVxuICAgICk7XG5cbiAgICAmOjphZnRlciB7XG4gICAgICBjb250ZW50OiAnJztcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHRvcDogMDtcbiAgICAgIHJpZ2h0OiAwO1xuICAgICAgd2lkdGg6IHZhcigtLWNvcm5lci1zaXplKTtcbiAgICAgIGhlaWdodDogdmFyKC0tY29ybmVyLXNpemUpO1xuICAgICAgYmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDQ1ZGVnLCAjZmZmZmZmLCAjZWVlZWVlIDQwJSwgI2RkZGRkZCA1MCUpO1xuICAgICAgZmlsdGVyOiB2YXIoLS1kcm9wLXNoYWRvdyk7XG4gICAgfVxuICB9XG5cbiAgJl9fdHlwZSB7XG4gICAgLS1mb250LXNpemU6IHZhcigtLWNvcm5lci1zaXplKTtcblxuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICBtaW4td2lkdGg6IHZhcigtLW1pbi1zaXplKTtcbiAgICBtaW4taGVpZ2h0OiB2YXIoLS1tYXgtc2l6ZSk7XG4gICAgYXNwZWN0LXJhdGlvOiAzIC8gNDtcblxuICAgIHNwYW4ge1xuICAgICAgLS1jb2xvcjogI3skY29sb3ItZ3JleX07XG5cbiAgICAgIGZvbnQtc2l6ZTogbWluKHZhcigtLWZvbnQtc2l6ZSksICN7MS4yNSAqICRmb250LXNpemV9KTtcbiAgICAgIGNvbG9yOiB2YXIoLS1jb2xvcik7XG5cbiAgICAgICN7JHNlbGZ9Om5vdCgjeyRzZWxmfS0tc21hbGwpICYge1xuICAgICAgICBwYWRkaW5nOiAwIGNhbGModmFyKC0tZm9udC1zaXplKSAvIDQpO1xuICAgICAgICBib3JkZXItcmFkaXVzOiBjYWxjKHZhcigtLWZvbnQtc2l6ZSkgLyA0KTtcbiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tY29sb3IpO1xuICAgICAgICBjb2xvcjogI2ZmZmZmZjtcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn0tLW1lZGl1bSAmIHtcbiAgICAgICAgLS1jb2xvcjogI3skY29sb3ItbGlnaHR9O1xuICAgICAgfVxuXG4gICAgICAjeyRzZWxmfS0tbGFyZ2UgJiB7XG4gICAgICAgIC0tY29sb3I6ICN7JGNvbG9yLWxpZ2h0ZXJ9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGltZyB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgLy8gU1ZHIGltYWdlcyBuZWVkIDEwMCUgc2V0dGluZ3MgdG8gc2NhbGUgaW50byB0aGUgY29udGFpbmVyLlxuICAgIHdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogMTAwJTtcbiAgICBtaW4td2lkdGg6IHZhcigtLW1pbi1zaXplKTtcbiAgICBtaW4taGVpZ2h0OiB2YXIoLS1taW4tc2l6ZSk7XG4gICAgbWF4LXdpZHRoOiB2YXIoLS1tYXgtc2l6ZSk7XG4gICAgbWF4LWhlaWdodDogdmFyKC0tbWF4LXNpemUpO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgbmV4dFRpY2ssIGRlZmluZUNvbXBvbmVudCwgcmVmLCByZWFjdGl2ZSwgaCB9IGZyb20gJ3Z1ZS1kZW1pJztcbmltcG9ydCB7IHRyeU9uTW91bnRlZCwgdHJ5T25TY29wZURpc3Bvc2UsIHVucmVmRWxlbWVudCwgZGVmYXVsdERvY3VtZW50LCB0b1ZhbHVlLCB1c2VWTW9kZWwgfSBmcm9tICdAdnVldXNlL2NvcmUnO1xuaW1wb3J0IFNvcnRhYmxlIGZyb20gJ3NvcnRhYmxlanMnO1xuXG52YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG52YXIgX19vYmpSZXN0ID0gKHNvdXJjZSwgZXhjbHVkZSkgPT4ge1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIGZvciAodmFyIHByb3AgaW4gc291cmNlKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChzb3VyY2UsIHByb3ApICYmIGV4Y2x1ZGUuaW5kZXhPZihwcm9wKSA8IDApXG4gICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gIGlmIChzb3VyY2UgIT0gbnVsbCAmJiBfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhzb3VyY2UpKSB7XG4gICAgICBpZiAoZXhjbHVkZS5pbmRleE9mKHByb3ApIDwgMCAmJiBfX3Byb3BJc0VudW0uY2FsbChzb3VyY2UsIHByb3ApKVxuICAgICAgICB0YXJnZXRbcHJvcF0gPSBzb3VyY2VbcHJvcF07XG4gICAgfVxuICByZXR1cm4gdGFyZ2V0O1xufTtcbmZ1bmN0aW9uIHVzZVNvcnRhYmxlKGVsLCBsaXN0LCBvcHRpb25zID0ge30pIHtcbiAgbGV0IHNvcnRhYmxlO1xuICBjb25zdCBfYSA9IG9wdGlvbnMsIHsgZG9jdW1lbnQgPSBkZWZhdWx0RG9jdW1lbnQgfSA9IF9hLCByZXNldE9wdGlvbnMgPSBfX29ialJlc3QoX2EsIFtcImRvY3VtZW50XCJdKTtcbiAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgb25VcGRhdGU6IChlKSA9PiB7XG4gICAgICBtb3ZlQXJyYXlFbGVtZW50KGxpc3QsIGUub2xkSW5kZXgsIGUubmV3SW5kZXgpO1xuICAgIH1cbiAgfTtcbiAgY29uc3Qgc3RhcnQgPSAoKSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gdHlwZW9mIGVsID09PSBcInN0cmluZ1wiID8gZG9jdW1lbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoZWwpIDogdW5yZWZFbGVtZW50KGVsKTtcbiAgICBpZiAoIXRhcmdldClcbiAgICAgIHJldHVybjtcbiAgICBzb3J0YWJsZSA9IG5ldyBTb3J0YWJsZSh0YXJnZXQsIF9fc3ByZWFkVmFsdWVzKF9fc3ByZWFkVmFsdWVzKHt9LCBkZWZhdWx0T3B0aW9ucyksIHJlc2V0T3B0aW9ucykpO1xuICB9O1xuICBjb25zdCBzdG9wID0gKCkgPT4gc29ydGFibGUgPT0gbnVsbCA/IHZvaWQgMCA6IHNvcnRhYmxlLmRlc3Ryb3koKTtcbiAgY29uc3Qgb3B0aW9uID0gKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgaWYgKHZhbHVlICE9PSB2b2lkIDApXG4gICAgICBzb3J0YWJsZSA9PSBudWxsID8gdm9pZCAwIDogc29ydGFibGUub3B0aW9uKG5hbWUsIHZhbHVlKTtcbiAgICBlbHNlXG4gICAgICByZXR1cm4gc29ydGFibGUgPT0gbnVsbCA/IHZvaWQgMCA6IHNvcnRhYmxlLm9wdGlvbihuYW1lKTtcbiAgfTtcbiAgdHJ5T25Nb3VudGVkKHN0YXJ0KTtcbiAgdHJ5T25TY29wZURpc3Bvc2Uoc3RvcCk7XG4gIHJldHVybiB7IHN0b3AsIHN0YXJ0LCBvcHRpb24gfTtcbn1cbmZ1bmN0aW9uIG1vdmVBcnJheUVsZW1lbnQobGlzdCwgZnJvbSwgdG8pIHtcbiAgY29uc3QgYXJyYXkgPSB0b1ZhbHVlKGxpc3QpO1xuICBpZiAodG8gPj0gMCAmJiB0byA8IGFycmF5Lmxlbmd0aCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheS5zcGxpY2UoZnJvbSwgMSlbMF07XG4gICAgbmV4dFRpY2soKCkgPT4gYXJyYXkuc3BsaWNlKHRvLCAwLCBlbGVtZW50KSk7XG4gIH1cbn1cblxuY29uc3QgVXNlU29ydGFibGUgPSAvKiBAX19QVVJFX18gKi8gLyogI19fUFVSRV9fICovIGRlZmluZUNvbXBvbmVudCh7XG4gIG5hbWU6IFwiVXNlU29ydGFibGVcIixcbiAgbW9kZWw6IHtcbiAgICAvLyBDb21wYXRpYmxlIHdpdGggdnVlMlxuICAgIHByb3A6IFwibW9kZWxWYWx1ZVwiLFxuICAgIGV2ZW50OiBcInVwZGF0ZTptb2RlbFZhbHVlXCJcbiAgfSxcbiAgcHJvcHM6IHtcbiAgICBtb2RlbFZhbHVlOiB7XG4gICAgICB0eXBlOiBBcnJheSxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICB0YWc6IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IFwiZGl2XCJcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfVxuICB9LFxuICBzZXR1cChwcm9wcywgeyBzbG90cyB9KSB7XG4gICAgY29uc3QgbGlzdCA9IHVzZVZNb2RlbChwcm9wcywgXCJtb2RlbFZhbHVlXCIpO1xuICAgIGNvbnN0IHRhcmdldCA9IHJlZigpO1xuICAgIGNvbnN0IGRhdGEgPSByZWFjdGl2ZSh1c2VTb3J0YWJsZSh0YXJnZXQsIGxpc3QsIHByb3BzLm9wdGlvbnMpKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaWYgKHNsb3RzLmRlZmF1bHQpXG4gICAgICAgIHJldHVybiBoKHByb3BzLnRhZywgeyByZWY6IHRhcmdldCB9LCBzbG90cy5kZWZhdWx0KGRhdGEpKTtcbiAgICB9O1xuICB9XG59KTtcblxuZXhwb3J0IHsgVXNlU29ydGFibGUgfTtcbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5Vc2VTb3J0YWJsZS5kaXRvLWRyYWdnYWJsZShcbiAgdi1pZj1cImRyYWdnYWJsZVwiXG4gIDpjbGFzcz1cInsgJ2RpdG8tZHJhZ2dhYmxlLS1kcmFnZ2luZyc6IGlzRHJhZ2dpbmcgfVwiXG4gIDp0YWc9XCJ0YWdcIlxuICA6bW9kZWxWYWx1ZT1cIm1vZGVsVmFsdWVcIlxuICA6b3B0aW9ucz1cInsgLi4ub3B0aW9ucywgb25TdGFydCwgb25FbmQgfVwiXG4gIEB1cGRhdGU6bW9kZWxWYWx1ZT1cIiRlbWl0KCd1cGRhdGU6bW9kZWxWYWx1ZScsICRldmVudClcIlxuKVxuICBzbG90XG5jb21wb25lbnQoXG4gIHYtZWxzZVxuICA6aXM9XCJ0YWdcIlxuKVxuICBzbG90XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9Db21wb25lbnQgZnJvbSAnLi4vRGl0b0NvbXBvbmVudCdcbmltcG9ydCBEb21NaXhpbiBmcm9tICcuLi9taXhpbnMvRG9tTWl4aW4uanMnXG5pbXBvcnQgeyBVc2VTb3J0YWJsZSB9IGZyb20gJ0B2dWV1c2UvaW50ZWdyYXRpb25zL3VzZVNvcnRhYmxlL2NvbXBvbmVudCdcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9Db21wb25lbnQuY29tcG9uZW50KCdEaXRvRHJhZ2dhYmxlJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVXNlU29ydGFibGUgfSxcbiAgZW1pdHM6IFsndXBkYXRlOm1vZGVsVmFsdWUnXSxcblxuICBwcm9wczoge1xuICAgIG1vZGVsVmFsdWU6IHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgcmVxdWlyZWQ6IHRydWVcbiAgICB9LFxuICAgIHRhZzoge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2RpdidcbiAgICB9LFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIHR5cGU6IE9iamVjdCxcbiAgICAgIHJlcXVpcmVkOiB0cnVlXG4gICAgfSxcbiAgICBkcmFnZ2FibGU6IHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfVxuICB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1vdXNlRXZlbnRzOiBudWxsLFxuICAgICAgaXNEcmFnZ2luZzogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uU3RhcnQoZXZlbnQpIHtcbiAgICAgIHRoaXMub3B0aW9ucy5vblN0YXJ0Py4oZXZlbnQpXG4gICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlXG4gICAgICB0aGlzLm1vdXNlRXZlbnRzPy5yZW1vdmUoKVxuICAgIH0sXG5cbiAgICBvbkVuZChldmVudCkge1xuICAgICAgdGhpcy5vcHRpb25zLm9uRW5kPy4oZXZlbnQpXG4gICAgICAvLyBLZWVwIGBpc0RyYWdnaW5nYCB0cnVlIHVudGlsIHRoZSBuZXh0IG1vdXNlIGludGVyYWN0aW9uIHNvIHRoYXRcbiAgICAgIC8vIGNvbmZ1c2VkIGhvdmVyIHN0YXRlcyBhcmUgY2xlYXJlZCBiZWZvcmUgcmVtb3ZpbmcgdGhlIGhvdmVyIGNhdGNoZXIuXG4gICAgICB0aGlzLm1vdXNlRXZlbnRzID0gdGhpcy5kb21Pbihkb2N1bWVudCwge1xuICAgICAgICBtb3VzZWRvd246IHRoaXMub25Nb3VzZSxcbiAgICAgICAgbW91c2Vtb3ZlOiB0aGlzLm9uTW91c2UsXG4gICAgICAgIG1vdXNlbGVhdmU6IHRoaXMub25Nb3VzZVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25Nb3VzZSgpIHtcbiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlXG4gICAgICB0aGlzLm1vdXNlRXZlbnRzPy5yZW1vdmUoKVxuICAgICAgdGhpcy5tb3VzZUV2ZW50cyA9IG51bGxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1kcmFnZ2FibGUge1xuICAvLyBPdmVybGF5IGEgaG92ZXIgY2F0Y2hlciB3aGlsZSB3ZSdyZSBkcmFnZ2luZyB0byBwcmV2ZW50IGhvdmVyIHN0YXRlcyBmcm9tXG4gIC8vIGdldHRpbmcgc3R1Y2sgLyBjb25mdXNlZC4gU2FmYXJpIHN0cnVnZ2xlcyB3aXRoIHRoaXMsIHNvIGRpc2FibGUgaXQgdGhlcmUuXG4gIEBpbmNsdWRlIGJyb3dzZXItcXVlcnkoKCdjaHJvbWUnLCAnZmlyZWZveCcpKSB7XG4gICAgJjpoYXMoJl9fY2hvc2VuKSxcbiAgICAmLS1kcmFnZ2luZyB7XG4gICAgICA+ICoge1xuICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgICAgICAgPiA6Zmlyc3QtY2hpbGQ6OmFmdGVyIHtcbiAgICAgICAgICBjb250ZW50OiAnJztcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgaW5zZXQ6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAmX19mYWxsYmFjayB7XG4gICAgZmlsdGVyOiBkcm9wLXNoYWRvdygwIDJweCA0cHggJGNvbG9yLXNoYWRvdyk7XG5cbiAgICAvLyBOZXN0ZWQgPHRkPiBuZWVkIHRvIGFsc28gc3dpdGNoIHRvIGBkaXNwbGF5OiBmbGV4YCBzdHlsZSBkdXJpbmcgZHJhZ2dpbmcuXG4gICAgJixcbiAgICB0ZCB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuXG4gICAgICA+ICoge1xuICAgICAgICBmbGV4OiAxO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1zcGlubmVyKFxuICB2LXNob3c9XCJsb2FkaW5nXCJcbiAgOnN0eWxlPVwieyAnLS1jb2xvcic6IGNvbG9yLCAnLS1zaXplJzogc2l6ZSwgJy0tbWFyZ2luJzogbWFyZ2luIH1cIlxuKVxuICAuZGl0by1zcGlubmVyX19wdWxzZS5kaXRvLXNwaW5uZXJfX3B1bHNlMVxuICAuZGl0by1zcGlubmVyX19wdWxzZS5kaXRvLXNwaW5uZXJfX3B1bHNlMlxuICAuZGl0by1zcGlubmVyX19wdWxzZS5kaXRvLXNwaW5uZXJfX3B1bHNlM1xuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4uL0RpdG9Db21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvQ29tcG9uZW50LmNvbXBvbmVudCgnRGl0b1NwaW5uZXInLCB7XG4gIHByb3BzOiB7XG4gICAgbG9hZGluZzoge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICB9LFxuICAgIGNvbG9yOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICBzaXplOiB7XG4gICAgICB0eXBlOiBTdHJpbmcsXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSxcbiAgICBtYXJnaW46IHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4uZGl0by1zcGlubmVyIHtcbiAgLS1jb2xvcjogIzk5OTk5OTtcbiAgLS1zaXplOiA4cHg7XG4gIC0tbWFyZ2luOiAycHg7XG5cbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcblxuICAmX19wdWxzZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIGJhY2tncm91bmQ6IHZhcigtLWNvbG9yKTtcbiAgICB3aWR0aDogdmFyKC0tc2l6ZSk7XG4gICAgaGVpZ2h0OiB2YXIoLS1zaXplKTtcbiAgICBtYXJnaW46IHZhcigtLW1hcmdpbik7XG4gICAgYm9yZGVyLXJhZGl1czogMTAwJTtcbiAgICBhbmltYXRpb246IGRpdG8tc3Bpbm5lci1wdWxzZSAwLjc1cyBjdWJpYy1iZXppZXIoMC4yLCAwLjY4LCAwLjE4LCAxLjA4KSAwc1xuICAgICAgaW5maW5pdGUgYm90aDtcbiAgfVxuXG4gICZfX3B1bHNlMSB7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAwLjEycztcbiAgfVxuXG4gICZfX3B1bHNlMiB7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAwLjI0cztcbiAgfVxuXG4gICZfX3B1bHNlMyB7XG4gICAgYW5pbWF0aW9uLWRlbGF5OiAwLjM2cztcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGRpdG8tc3Bpbm5lci1wdWxzZSB7XG4gIDAlLFxuICA4MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIDQ1JSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxufVxuXG5Aa2V5ZnJhbWVzIGRpdG8tc3Bpbm5lci1wdWxzZSB7XG4gIDAlLFxuICA4MCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gICAgb3BhY2l0eTogMTtcbiAgfVxuXG4gIDQ1JSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjEpO1xuICAgIG9wYWNpdHk6IDAuNztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZnVuY3Rpb24gRGl0b1ZOb2RlKHsgdm5vZGUgfSkge1xuICByZXR1cm4gdm5vZGVcbn1cblxuRGl0b1ZOb2RlLnByb3BzID0ge1xuICB2bm9kZTogeyB0eXBlOiBPYmplY3QsIHJlcXVpcmVkOiB0cnVlIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRGl0b0NvbXBvbmVudC5jb21wb25lbnQoJ0RpdG9Wbm9kZScsIERpdG9WTm9kZSlcbjwvc2NyaXB0PlxuIiwiLy8gRGl0b1R5cGVDb21wb25lbnQgaXMgdGhlIGFic3RyYWN0IGJhc2UgY29tcG9uZW50IGZvciBhbGwgb3RoZXIgdHlwZVxuLy8gY29tcG9uZW50cyBpbnNpZGUgdGhlIHR5cGVzLyBmb2xkZXIuIFRoZXJlJ3MgYWxzbyBhIHNlcGFyYXRlIGNvbmNyZXRlXG4vLyBgRGl0b1R5cGVDb21wb25lbnQudnVlYCBjb21wb25lbnQsIHVzZSB0byByZW5kZXIgYHsgdHlwZTogJ2NvbXBvbmVudCcgfWBcbmltcG9ydCB7IGFzQXJyYXksIGNhbWVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCBEaXRvQ29tcG9uZW50IGZyb20gJy4vRGl0b0NvbXBvbmVudC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IHsgcmVnaXN0ZXJUeXBlQ29tcG9uZW50LCBnZXRUeXBlQ29tcG9uZW50IH0gZnJvbSAnLi91dGlscy9zY2hlbWEuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIGV4dGVuZHM6IERpdG9Db21wb25lbnQsXG4gIG1peGluczogW1R5cGVNaXhpbl0sXG5cbiAgbmF0aXZlRmllbGQ6IGZhbHNlLFxuICB0ZXh0RmllbGQ6IGZhbHNlLFxuICAvLyBTZXQgcmVhc29uYWJsZSBkZWZhdWx0cyBmb3IgYWxsIG9mIHRoZXNlIHRoYXQgYXJlIHVzZWQgYnkgbW9zdCB0eXBlXG4gIC8vIGNvbXBvbmVudHMuIFRoZXNlIG9ubHkgbmVlZCBkZWZpbmluZyBpbiBzdWItY2xhc3NlcyB3aGVuIHRoZXkgZGlmZmVyLlxuICBkZWZhdWx0VmFsdWU6IG51bGwsXG4gIGRlZmF1bHROZXN0ZWQ6IHRydWUsXG4gIGRlZmF1bHRWaXNpYmxlOiB0cnVlLFxuICBnZW5lcmF0ZUxhYmVsOiB0cnVlLFxuICBleGNsdWRlVmFsdWU6IGZhbHNlLFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IG51bGwsXG4gIG9taXRTcGFjaW5nOiBmYWxzZSxcblxuICBjb21wb25lbnQ6IERpdG9Db21wb25lbnQuY29tcG9uZW50LFxuXG4gIGdldDogZ2V0VHlwZUNvbXBvbmVudCxcblxuICByZWdpc3Rlcih0eXBlcywgZGVmaW5pdGlvbiA9IHt9KSB7XG4gICAgdHlwZXMgPSBhc0FycmF5KHR5cGVzKVxuICAgIGNvbnN0IGNvbXBvbmVudCA9IHRoaXMuY29tcG9uZW50KFxuICAgICAgYERpdG9UeXBlJHtjYW1lbGl6ZSh0eXBlc1swXSwgdHJ1ZSl9YCxcbiAgICAgIGRlZmluaXRpb25cbiAgICApXG4gICAgZm9yIChjb25zdCB0eXBlIG9mIHR5cGVzKSB7XG4gICAgICByZWdpc3RlclR5cGVDb21wb25lbnQodHlwZSwgY29tcG9uZW50KVxuICAgIH1cbiAgICByZXR1cm4gY29tcG9uZW50XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5idXR0b24uZGl0by1idXR0b24oXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDp0eXBlPVwidHlwZVwiXG4gIDp0aXRsZT1cInRpdGxlXCJcbiAgOmNsYXNzPVwiYnV0dG9uQ2xhc3NcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbiAgLmRpdG8tYnV0dG9uX190ZXh0KFxuICAgIHYtaWY9XCJ0ZXh0XCJcbiAgKSB7eyB0ZXh0IH19XG4gIC5kaXRvLWluZm8oXG4gICAgdi1pZj1cIiFsYWJlbCAmJiBpbmZvXCJcbiAgICA6ZGF0YS1pbmZvPVwiaW5mb1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaGFzUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IGxhYmVsaXplIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoXG4gIFsnYnV0dG9uJywgJ3N1Ym1pdCddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gICAgZXhjbHVkZVZhbHVlOiB0cnVlLFxuICAgIGRlZmF1bHRXaWR0aDogJ2F1dG8nLFxuICAgIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHZlcmIoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZlcmJzW3RoaXMubmFtZV1cbiAgICAgIH0sXG5cbiAgICAgIGJ1dHRvbkNsYXNzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy52ZXJiID8gYGRpdG8tYnV0dG9uLSR7dGhpcy52ZXJifWAgOiBudWxsXG4gICAgICB9LFxuXG4gICAgICB0ZXh0OiBnZXRTY2hlbWFBY2Nlc3NvcigndGV4dCcsIHtcbiAgICAgICAgdHlwZTogU3RyaW5nXG4gICAgICB9KSxcblxuICAgICAgdGl0bGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRleHQgfHwgbGFiZWxpemUodGhpcy52ZXJiKVxuICAgICAgfSxcblxuICAgICAgaW5mbzogZ2V0U2NoZW1hQWNjZXNzb3IoJ2luZm8nLCB7XG4gICAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgICAgZGVmYXVsdDogbnVsbFxuICAgICAgfSksXG5cbiAgICAgIGNsb3NlRm9ybTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2Nsb3NlRm9ybScsIHtcbiAgICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIC8vIEBvdmVycmlkZVxuICAgICAgZ2V0RXZlbnRzKCkge1xuICAgICAgICBjb25zdCB7IG9uRm9jdXMsIG9uQmx1ciwgb25DbGljayB9ID0gdGhpc1xuICAgICAgICByZXR1cm4geyBvbkZvY3VzLCBvbkJsdXIsIG9uQ2xpY2sgfVxuICAgICAgfSxcblxuICAgICAgYXN5bmMgc3VibWl0KG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzb3VyY2VDb21wb25lbnQ/LnN1Ym1pdCh0aGlzLCBvcHRpb25zKVxuICAgICAgfSxcblxuICAgICAgYXN5bmMgb25DbGljaygpIHtcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5lbWl0RXZlbnQoJ2NsaWNrJywge1xuICAgICAgICAgIHBhcmVudDogdGhpcy5zY2hlbWFDb21wb25lbnRcbiAgICAgICAgfSlcbiAgICAgICAgLy8gSGF2ZSBidXR0b25zIHRoYXQgZGVmaW5lIHJlc291cmNlcyBjYWxsIGB0aGlzLnN1Ym1pdCgpYCBieSBkZWZhdWx0OlxuICAgICAgICBpZiAoXG4gICAgICAgICAgcmVzID09PSB1bmRlZmluZWQgJiYgLy8gTWVhbmluZzogZG9uJ3QgcHJldmVudCBkZWZhdWx0LlxuICAgICAgICAgIGhhc1Jlc291cmNlKHRoaXMuc2NoZW1hKVxuICAgICAgICApIHtcbiAgICAgICAgICBhd2FpdCB0aGlzLnN1Ym1pdCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWJ1dHRvbiB7XG4gICRzZWxmOiAmO1xuXG4gICZfX3RleHQge1xuICAgIEBpbmNsdWRlIGVsbGlwc2lzO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWNoZWNrYm94XG4gIGlucHV0KFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwidmFsdWVcIlxuICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3gnLCB7XG4gIG5hdGl2ZUZpZWxkOiB0cnVlXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2hlY2tib3gge1xuICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzO1xufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc0Z1bmN0aW9uLFxuICBpc1Byb21pc2UsXG4gIG5vcm1hbGl6ZURhdGFQYXRoLFxuICBnZXRWYWx1ZUF0RGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IHJlYWN0aXZlIH0gZnJvbSAndnVlJ1xuaW1wb3J0IExvYWRpbmdNaXhpbiBmcm9tICcuL0xvYWRpbmdNaXhpbi5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbTG9hZGluZ01peGluXSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgYXN5bmNEYXRhRW50cmllczoge31cbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGhhbmRsZURhdGFTY2hlbWEoc2NoZW1hLCBuYW1lLCBsb2FkaW5nT3B0aW9ucykge1xuICAgICAgaWYgKCFpc09iamVjdChzY2hlbWEpKSB7XG4gICAgICAgIHNjaGVtYSA9IHsgZGF0YTogc2NoZW1hIH1cbiAgICAgIH1cbiAgICAgIGxldCB7IGRhdGEgPSB1bmRlZmluZWQsIGRhdGFQYXRoID0gbnVsbCB9ID0gc2NoZW1hXG4gICAgICAvLyBTZWUgaWYgdGhlcmUgaXMgYXN5bmMgZGF0YSBsb2FkaW5nIGFscmVhZHkgaW4gcHJvY2Vzcy5cbiAgICAgIGNvbnN0IGFzeW5jRW50cnkgPSAodGhpcy5hc3luY0RhdGFFbnRyaWVzW25hbWVdIHx8PSByZWFjdGl2ZSh7XG4gICAgICAgIGRlcGVuZGVuY3lGdW5jdGlvbjogbnVsbCxcbiAgICAgICAgcmVzb2x2ZWREYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIHJlc29sdmluZzogZmFsc2UsXG4gICAgICAgIHJlc29sdmVkOiBmYWxzZVxuICAgICAgfSkpXG4gICAgICAvLyBJZiB0aGUgZGF0YSBjYWxsYmFjayBwcm92aWRlZCBhIGRlcGVuZGVuY3kgZnVuY3Rpb24gd2hlbiBpdCB3YXMgY2FsbGVkLFxuICAgICAgLy8gY2FsIGl0IGluIGV2ZXJ5IGNhbGwgb2YgYGhhbmRsZURhdGFTY2hlbWEoKWAgdG8gZm9yY2UgVnVlIHRvIGtlZXAgdHJhY2tcbiAgICAgIC8vIG9mIHRoZSBhc3luYyBkZXBlbmRlbmNpZXMuXG4gICAgICBhc3luY0VudHJ5LmRlcGVuZGVuY3lGdW5jdGlvbj8uKHRoaXMuY29udGV4dClcblxuICAgICAgaWYgKGFzeW5jRW50cnkucmVzb2x2ZWQpIHtcbiAgICAgICAgLy8gSWYgdGhlIGRhdGEgd2FzIHJlc29sdmVkIGFscmVhZHksIHJldHVybiBpdCBhbmQgY2xlYXIgdGhlIHJlc29sdmVkXG4gICAgICAgIC8vIHZhbHVlLiBUaGlzIHdvcmtzIGJlY2F1c2UgVnVlIGNhY2hlcyB0aGUgcmVzdWx0IG9mIGNvbXB1dGVkIGdldHRlcnNcbiAgICAgICAgLy8gYW5kIG9ubHkgcmVldmFsdWF0ZXMgaWYgb25lIG9mIHRoZSBkZXBlbmRlbmNpZXMgY2hhbmdlZC4gVGhpcyBpcyB0b1xuICAgICAgICAvLyBlbnN1cmUgdGhhdCBhIGNhY2hlZCB2YWx1ZSBoZXJlIGRvZXNuJ3QgYmxvY2sgLyBvdmVycmlkZVxuICAgICAgICAvLyByZWV2YWx1YXRpb24gd2hlbiBhIGRlcGVuZGVuY3kgY2hhbmdlczpcbiAgICAgICAgY29uc3QgeyByZXNvbHZlZERhdGEgfSA9IGFzeW5jRW50cnlcbiAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlZERhdGEgPSB1bmRlZmluZWRcbiAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlZCA9IGZhbHNlXG4gICAgICAgIHJldHVybiByZXNvbHZlZERhdGFcbiAgICAgIH1cbiAgICAgIC8vIEF2b2lkIGNhbGxpbmcgdGhlIGRhdGEgZnVuY3Rpb24gdHdpY2U6XG4gICAgICBpZiAoYXN5bmNFbnRyeS5yZXNvbHZpbmcpIHtcbiAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgIH0gZWxzZSBpZiAoZGF0YSkge1xuICAgICAgICBpZiAoaXNGdW5jdGlvbihkYXRhKSkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGRhdGEodGhpcy5jb250ZXh0KVxuICAgICAgICAgIC8vIElmIHRoZSByZXN1bHQgb2YgdGhlIGRhdGEgZnVuY3Rpb24gaXMgYW5vdGhlciBmdW5jdGlvbiwgdGhlbiB0aGVcbiAgICAgICAgICAvLyBmaXJzdCBkYXRhIGZ1bmN0aW9uIGlzIHRoZXJlIHRvIHRyYWNrIGRlcGVuZGVuY2llcyBhbmQgdGhlIHJlYWxcbiAgICAgICAgICAvLyBkYXRhIGxvYWRpbmcgaGFwcGVucyBpbiB0aGUgZnVuY3Rpb24gdGhhdCBpdCByZXR1cm5lZC4gS2VlcCB0cmFja1xuICAgICAgICAgIC8vIGl0IGluIGBkZXBlbmRlbmN5RnVuY3Rpb25gIHNvIGl0IGNhbiBiZSBjYWxsZWQgb24gZWFjaCBjYWxsIG9mXG4gICAgICAgICAgLy8gYGhhbmRsZURhdGFTY2hlbWEoKWAgdG8ga2VlcCB0aGUgZGVwZW5kZW5jaWVzIGludGFjdCwgYW5kIGNhbGxcbiAgICAgICAgICAvLyB0aGUgZnVuY3Rpb24gdGhhdCBpdCByZXR1cm5lZCBvbmNlIHRvIGdldCB0aGUgYWN0dWFsIGRhdGE6XG4gICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocmVzdWx0KSkge1xuICAgICAgICAgICAgYXN5bmNFbnRyeS5kZXBlbmRlbmN5RnVuY3Rpb24gPSBkYXRhXG4gICAgICAgICAgICBkYXRhID0gcmVzdWx0KHRoaXMuY29udGV4dClcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZGF0YSA9IHJlc3VsdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBOT1RFOiBJZiB0aGUgZGF0YSBpcyBub3QgYSBwcm9taXNlLCBpdCBpcyByZXNvbHZlZCBhbHJlYWR5LlxuICAgICAgICBpZiAoaXNQcm9taXNlKGRhdGEpKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGRhdGEgaXMgYXN5bmNocm9ub3VzLCBpdCBjYW4ndCBiZSByZXR1cm5lZCBzdHJhaWdodCBhd2F5LlxuICAgICAgICAgIC8vIEJ1dCB3ZSBjYW4gY2hlYXQgdXNpbmcgY29tcHV0ZWQgcHJvcGVydGllcyBhbmQgYHJlc29sdmVkRGF0YWAsXG4gICAgICAgICAgLy8gd2hpY2ggaXMgZ29pbmcgdG8gcmVjZWl2ZSB0aGUgbG9hZGVkIGRhdGEgYXN5bmNocm9ub3VzbHksXG4gICAgICAgICAgLy8gdHJpZ2dlcmluZyBhIHJlY29tcHV0ZSBvZiB0aGUgY29tcHV0ZWQgcHJvcGVydHkgdGhhdCBjYWxsc1xuICAgICAgICAgIC8vIGBoYW5kbGVEYXRhU2NoZW1hKClgLlxuICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gdHJ1ZVxuICAgICAgICAgIHRoaXMucmVzb2x2ZURhdGEoZGF0YSwgbG9hZGluZ09wdGlvbnMpXG4gICAgICAgICAgICAudGhlbihkYXRhID0+IHtcbiAgICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlZERhdGEgPSBkYXRhXG4gICAgICAgICAgICAgIGFzeW5jRW50cnkucmVzb2x2aW5nID0gZmFsc2VcbiAgICAgICAgICAgICAgYXN5bmNFbnRyeS5yZXNvbHZlZCA9IHRydWVcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICAgICAgICBhc3luY0VudHJ5LnJlc29sdmluZyA9IGZhbHNlXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIC8vIENsZWFyIGRhdGEgdW50aWwgcHJvbWlzZSBpcyByZXNvbHZlZCBhbmQgYHJlc29sdmVkRGF0YWAgaXMgc2V0XG4gICAgICAgICAgZGF0YSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChkYXRhUGF0aCkge1xuICAgICAgICBkYXRhID0gZ2V0VmFsdWVBdERhdGFQYXRoKFxuICAgICAgICAgIHRoaXMucm9vdERhdGEsXG4gICAgICAgICAgbm9ybWFsaXplRGF0YVBhdGgoYCR7dGhpcy5kYXRhUGF0aH0vJHtkYXRhUGF0aH1gKVxuICAgICAgICApXG4gICAgICB9XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH0sXG5cbiAgICBhc3luYyByZXNvbHZlRGF0YShsb2FkLCBsb2FkaW5nT3B0aW9ucyA9IHt9KSB7XG4gICAgICAvLyBVc2UgYSB0aW1lb3V0IHRvIGFsbG93IGFscmVhZHkgcmVzb2x2ZWQgcHJvbWlzZXMgdG8gcmV0dXJuIGRhdGEgd2l0aG91dFxuICAgICAgLy8gc2hvd2luZyBhIGxvYWRpbmcgaW5kaWNhdG9yLlxuICAgICAgY29uc3QgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHRoaXMuc2V0TG9hZGluZyh0cnVlLCBsb2FkaW5nT3B0aW9ucyksIDApXG4gICAgICBsZXQgZGF0YSA9IG51bGxcbiAgICAgIHRyeSB7XG4gICAgICAgIGRhdGEgPSBhd2FpdCAoaXNGdW5jdGlvbihsb2FkKSA/IGxvYWQoKSA6IGxvYWQpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmFkZEVycm9yKGVycm9yLm1lc3NhZ2UgfHwgZXJyb3IpXG4gICAgICB9XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpXG4gICAgICB0aGlzLnNldExvYWRpbmcoZmFsc2UsIGxvYWRpbmdPcHRpb25zKVxuICAgICAgcmV0dXJuIGRhdGFcbiAgICB9XG4gIH1cbn1cbiIsImltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBEYXRhTWl4aW4gZnJvbSAnLi9EYXRhTWl4aW4uanMnXG5pbXBvcnQgeyBoYXNWaWV3U2NoZW1hLCBnZXRWaWV3RWRpdFBhdGggfSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgc2V0VGVtcG9yYXJ5SWQsIGlzUmVmZXJlbmNlIH0gZnJvbSAnLi4vdXRpbHMvZGF0YS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc0FycmF5LFxuICBpc1N0cmluZyxcbiAgaXNGdW5jdGlvbixcbiAgbm9ybWFsaXplRGF0YVBhdGgsXG4gIGxhYmVsaXplLFxuICBkZWJvdW5jZUFzeW5jXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCB7XG4gIG1peGluczogW0RhdGFNaXhpbl0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgaGFzT3B0aW9uczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGNvbnN0IGNvbnZlcnRWYWx1ZSA9IHZhbHVlID0+XG4gICAgICAgICAgdGhpcy5yZWxhdGVcbiAgICAgICAgICAgID8gdGhpcy5oYXNPcHRpb24odmFsdWUpXG4gICAgICAgICAgICAgID8gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSlcbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICA6IHZhbHVlXG4gICAgICAgIGNvbnN0IHZhbHVlID0gaXNBcnJheSh0aGlzLnZhbHVlKVxuICAgICAgICAgID8gdGhpcy52YWx1ZS5tYXAoY29udmVydFZhbHVlKS5maWx0ZXIodmFsdWUgPT4gdmFsdWUgIT09IG51bGwpXG4gICAgICAgICAgOiBjb252ZXJ0VmFsdWUodGhpcy52YWx1ZSlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIC8vIFdoZW4gcmVsYXRpbmcgYW5kIGFzIHNvb24gYXMgdGhlIG9wdGlvbnMgYXJlIGF2YWlsYWJsZS4uLlxuICAgICAgICAgIHRoaXMucmVsYXRlICYmXG4gICAgICAgICAgdGhpcy5oYXNPcHRpb25zICYmIChcbiAgICAgICAgICAgIC8vIC4uLmlmIHRoZSB2YWx1ZSBpcyBmb3JjZWQgdG8gbnVsbCBiZWNhdXNlIGEgZGlzYXBwZWFyZWQgb3B0aW9uLi4uXG4gICAgICAgICAgICB2YWx1ZSA9PT0gbnVsbCAmJiB0aGlzLnZhbHVlICE9PSBudWxsIHx8XG4gICAgICAgICAgICAvLyAuLi5vciBpZiB0aGUgdmFsdWUgaXMgYSByZWZlcmVuY2UsIHJlcGxhY2UgaXQgd2l0aCBpdHMgb3B0aW9uXG4gICAgICAgICAgICAvLyB2YWx1ZSwgc28gdGhhdCBpdCdsbCBob2xkIGFjdHVhbCBkYXRhLCBub3QganVzdCBhIHJlZmVyZW5jZSBpZC5cbiAgICAgICAgICAgIGlzUmVmZXJlbmNlKHRoaXMudmFsdWUpXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRWYWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgY29uc3QgY29udmVydCA9IHZhbHVlID0+XG4gICAgICAgICAgdGhpcy5yZWxhdGVcbiAgICAgICAgICAgID8gdGhpcy5nZXRPcHRpb25Gb3JWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICAgIDogdmFsdWVcbiAgICAgICAgdGhpcy52YWx1ZSA9IGlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgPyB2YWx1ZS5tYXAoY29udmVydClcbiAgICAgICAgICA6IGNvbnZlcnQodmFsdWUpXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNlbGVjdGVkT3B0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodGhpcy5zZWxlY3RlZFZhbHVlKVxuICAgIH0sXG5cbiAgICBvcHRpb25zKCkge1xuICAgICAgY29uc3QgZGF0YSA9IHRoaXMuaGFuZGxlRGF0YVNjaGVtYSh0aGlzLnNjaGVtYS5vcHRpb25zLCAnb3B0aW9ucycpID8/IFtdXG4gICAgICBpZiAoIWlzQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIG9wdGlvbnMgZGF0YSwgc2hvdWxkIGJlIGFycmF5OiAke2RhdGF9YClcbiAgICAgIH1cbiAgICAgIC8vIFRPRE86IEZpeCBzaWRlLWVmZmVjdHNcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB2dWUvbm8tc2lkZS1lZmZlY3RzLWluLWNvbXB1dGVkLXByb3BlcnRpZXNcbiAgICAgIHRoaXMuaGFzT3B0aW9ucyA9IGRhdGEubGVuZ3RoID4gMFxuICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc09wdGlvbnMoZGF0YSlcbiAgICB9LFxuXG4gICAgYWN0aXZlT3B0aW9ucygpIHtcbiAgICAgIC8vIFRoaXMgaXMgb3ZlcnJpZGRlbiBpbiBgVHlwZU11bHRpc2VsZWN0YCB0byByZXR1cm4gdGhlIGBzZWFyY2hlZE9wdGlvbnNgXG4gICAgICAvLyB3aGVuIGEgc2VhcmNoIGZpbHRlciB3YXMgYXBwbGllZC5cbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnNcbiAgICB9LFxuXG4gICAgcmVsYXRlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVsYXRlJywge1xuICAgICAgLy8gVE9ETzogQ29udmVydCB0byBgcmVsYXRlQnk6ICdpZCdgXG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAvLyBXZSBjYW5ub3QgdXNlIHNjaGVtYSBhY2Nlc3NvciBjYWxsYmFjayBtYWdpYyBmb3IgYHJlbGF0ZWAgYXMgd2UgbmVlZFxuICAgICAgLy8gdGhpcyBvdXRzaWRlIG9mIHRoZSBjb21wb25lbnQncyBsaWZlLXNwYW4sIHNlZSBgcHJvY2Vzc0RhdGEoKWAgYmVsb3cuXG4gICAgICBjYWxsYmFjazogZmFsc2VcbiAgICB9KSxcblxuICAgIGdyb3VwQnk6IGdldFNjaGVtYUFjY2Vzc29yKCdncm91cEJ5Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogbnVsbFxuICAgIH0pLFxuXG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBvcHRpb25zLmxhYmVsS2V5YCAvIGBvcHRpb25MYWJlbEtleWA/XG4gICAgb3B0aW9uTGFiZWw6IGdldFNjaGVtYUFjY2Vzc29yKCdvcHRpb25zLmxhYmVsJywge1xuICAgICAgdHlwZTogW1N0cmluZywgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldChsYWJlbCkge1xuICAgICAgICAvLyBJZiBubyBgbGFiZWxgIHdhcyBwcm92aWRlZCBidXQgdGhlIG9wdGlvbnMgYXJlIG9iamVjdHMsIGFzc3VtZSBhXG4gICAgICAgIC8vIGRlZmF1bHQgdmFsdWUgb2YgJ2xhYmVsJzpcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBsYWJlbCB8fFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uS2V5KCdsYWJlbCcpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYG9wdGlvbnMudmFsdWVLZXlgIC8gYG9wdGlvblZhbHVlS2V5YD9cbiAgICBvcHRpb25WYWx1ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ29wdGlvbnMudmFsdWUnLCB7XG4gICAgICB0eXBlOiBbU3RyaW5nLCBGdW5jdGlvbl0sXG4gICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgZ2V0KHZhbHVlKSB7XG4gICAgICAgIC8vIElmIG5vIGBsYWJlbGAgd2FzIHByb3ZpZGVkIGJ1dCB0aGUgb3B0aW9ucyBhcmUgb2JqZWN0cywgYXNzdW1lIGFcbiAgICAgICAgLy8gZGVmYXVsdCB2YWx1ZSBvZiAndmFsdWUnOlxuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIHZhbHVlIHx8XG4gICAgICAgICAgdGhpcy5yZWxhdGUgJiYgJ2lkJyB8fFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uS2V5KCd2YWx1ZScpIHx8XG4gICAgICAgICAgbnVsbFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBDb25zaWRlciBtb3Zpbmcgc2VhcmNoIHRvIGBvcHRpb25zLnNlYXJjaGA/XG4gICAgc2VhcmNoRmlsdGVyOiBnZXRTY2hlbWFBY2Nlc3Nvcignc2VhcmNoJywge1xuICAgICAgdHlwZTogW09iamVjdCwgRnVuY3Rpb25dLFxuICAgICAgZGVmYXVsdDogbnVsbCxcbiAgICAgIGdldChzZWFyY2gpIHtcbiAgICAgICAgaWYgKHNlYXJjaCkge1xuICAgICAgICAgIGNvbnN0IHsgZmlsdGVyLCBkZWJvdW5jZSB9ID0gaXNGdW5jdGlvbihzZWFyY2gpXG4gICAgICAgICAgICA/IHsgZmlsdGVyOiBzZWFyY2ggfVxuICAgICAgICAgICAgOiBzZWFyY2hcbiAgICAgICAgICByZXR1cm4gZGVib3VuY2UgPyBkZWJvdW5jZUFzeW5jKGZpbHRlciwgZGVib3VuY2UpIDogZmlsdGVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGVkaXRhYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignZWRpdGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICBnZXQoZWRpdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICBlZGl0YWJsZSAmJlxuICAgICAgICAgIGhhc1ZpZXdTY2hlbWEodGhpcy5zY2hlbWEsIHRoaXMuY29udGV4dClcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdFBhdGgoKSB7XG4gICAgICByZXR1cm4gdGhpcy5lZGl0YWJsZSAmJiB0aGlzLnNlbGVjdGVkVmFsdWVcbiAgICAgICAgPyBnZXRWaWV3RWRpdFBhdGgodGhpcy5zY2hlbWEsIHRoaXMuc2VsZWN0ZWRWYWx1ZSwgdGhpcy5jb250ZXh0KVxuICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgZ3JvdXBCeUxhYmVsKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBCeSA/ICdsYWJlbCcgOiBudWxsXG4gICAgfSxcblxuICAgIGdyb3VwQnlPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBCeSA/ICdvcHRpb25zJyA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldE9wdGlvbktleShrZXkpIHtcbiAgICAgIGNvbnN0IFtvcHRpb25dID0gdGhpcy5hY3RpdmVPcHRpb25zXG4gICAgICByZXR1cm4gaXNPYmplY3Qob3B0aW9uKSAmJiBrZXkgaW4gb3B0aW9uID8ga2V5IDogbnVsbFxuICAgIH0sXG5cbiAgICBwcm9jZXNzT3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICBpZiAob3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKHRoaXMucmVsYXRlKSB7XG4gICAgICAgICAgLy8gSWYgaWRzIGFyZSBtaXNzaW5nIGFuZCB3ZSB3YW50IHRvIHJlbGF0ZSwgc2V0IHRlbXBvcmFyeSBpZHMuXG4gICAgICAgICAgLy8gTk9URTogV2UgbmVlZCB0byBtb2RpZnkgdGhlIGFjdHVhbCBkYXRhLCBtYWtpbmcgYSBjb3B5IHdvbid0IHdvcmtcbiAgICAgICAgICAvLyBhcyBpdCB3b24ndCBwcm9wYWdhdGUuXG4gICAgICAgICAgLy8gTk9URTogVGhpcyBvbmx5IG1ha2VzIHNlbnNlIGlmIHRoZSBkYXRhIGlzIGZyb20gdGhlIGdyYXBoIHRoYXRcbiAgICAgICAgICAvLyB3ZSdyZSBjdXJyZW50bHkgZWRpdGluZy5cbiAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSB7XG4gICAgICAgICAgICBpZiAoISgnaWQnIGluIG9wdGlvbikpIHtcbiAgICAgICAgICAgICAgc2V0VGVtcG9yYXJ5SWQob3B0aW9uLCAnaWQnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5ncm91cEJ5KSB7XG4gICAgICAgICAgY29uc3QgZ3JvdXBlZCA9IHt9XG4gICAgICAgICAgb3B0aW9ucyA9IG9wdGlvbnMucmVkdWNlKFxuICAgICAgICAgICAgKHJlc3VsdHMsIG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBncm91cCA9IG9wdGlvblt0aGlzLmdyb3VwQnldXG4gICAgICAgICAgICAgIGxldCBlbnRyeSA9IGdyb3VwZWRbZ3JvdXBdXG4gICAgICAgICAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgICAgICAgICBlbnRyeSA9IGdyb3VwZWRbZ3JvdXBdID0ge1xuICAgICAgICAgICAgICAgICAgW3RoaXMuZ3JvdXBCeUxhYmVsXTogZ3JvdXAsXG4gICAgICAgICAgICAgICAgICBbdGhpcy5ncm91cEJ5T3B0aW9uc106IFtdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdHMucHVzaChlbnRyeSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbnRyeS5vcHRpb25zLnB1c2gob3B0aW9uKVxuICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0c1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIFtdXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gb3B0aW9uc1xuICAgIH0sXG5cbiAgICBoYXNPcHRpb24ob3B0aW9uKSB7XG4gICAgICByZXR1cm4gISF0aGlzLmdldE9wdGlvbkZvclZhbHVlKHRoaXMuZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKSlcbiAgICB9LFxuXG4gICAgZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpIHtcbiAgICAgIGNvbnN0IGZpbmRPcHRpb24gPSAob3B0aW9ucywgdmFsdWUsIGdyb3VwQnkpID0+IHtcbiAgICAgICAgLy8gU2VhcmNoIGZvciB0aGUgb3B0aW9uIG9iamVjdCB3aXRoIHRoZSBnaXZlbiB2YWx1ZSBhbmQgcmV0dXJuIHRoZVxuICAgICAgICAvLyB3aG9sZSBvYmplY3QuXG4gICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICBpZiAoZ3JvdXBCeSkge1xuICAgICAgICAgICAgY29uc3QgZm91bmQgPSBmaW5kT3B0aW9uKG9wdGlvbi5vcHRpb25zLCB2YWx1ZSwgbnVsbClcbiAgICAgICAgICAgIGlmIChmb3VuZCkge1xuICAgICAgICAgICAgICByZXR1cm4gZm91bmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb25cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMub3B0aW9uVmFsdWVcbiAgICAgICAgPyBmaW5kT3B0aW9uKHRoaXMuYWN0aXZlT3B0aW9ucywgdmFsdWUsIHRoaXMuZ3JvdXBCeSlcbiAgICAgICAgOiB2YWx1ZVxuICAgIH0sXG5cbiAgICBnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pIHtcbiAgICAgIGNvbnN0IHsgb3B0aW9uVmFsdWUgfSA9IHRoaXNcbiAgICAgIHJldHVybiBpc1N0cmluZyhvcHRpb25WYWx1ZSlcbiAgICAgICAgPyBvcHRpb24/LltvcHRpb25WYWx1ZV1cbiAgICAgICAgOiBpc0Z1bmN0aW9uKG9wdGlvblZhbHVlKVxuICAgICAgICAgID8gb3B0aW9uVmFsdWUobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgb3B0aW9uIH0pKVxuICAgICAgICAgIDogb3B0aW9uXG4gICAgfSxcblxuICAgIGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikge1xuICAgICAgY29uc3QgeyBvcHRpb25MYWJlbCB9ID0gdGhpc1xuICAgICAgcmV0dXJuIGlzU3RyaW5nKG9wdGlvbkxhYmVsKVxuICAgICAgICA/IG9wdGlvbj8uW29wdGlvbkxhYmVsXVxuICAgICAgICA6IGlzRnVuY3Rpb24ob3B0aW9uTGFiZWwpXG4gICAgICAgICAgPyBvcHRpb25MYWJlbChuZXcgRGl0b0NvbnRleHQodGhpcywgeyBvcHRpb24gfSkpXG4gICAgICAgICAgOiBsYWJlbGl6ZShgJHtvcHRpb259YClcbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUsIGRhdGFQYXRoLCBncmFwaCkge1xuICAgIGlmIChzY2hlbWEucmVsYXRlKSB7XG4gICAgICAvLyBGb3IgaW50ZXJuYWxseSByZWxhdGluZyBkYXRhIChgc2NoZW1hLm9wdGlvbnMuZGF0YVBhdGhgKSwgd2UgbmVlZCB0b1xuICAgICAgLy8gcHJvY2VzcyBib3RoIHRoZSBvcHRpb25zIChmb3IgJyNyZWYnKSBhbmQgdGhlIHZhbHVlICgnI2lkJykuXG4gICAgICAvLyBTZWUgYERhdGFNaXhpbi5oYW5kbGVEYXRhU2NoZW1hKClgOlxuICAgICAgY29uc3QgcGF0aCA9IHNjaGVtYS5vcHRpb25zPy5kYXRhUGF0aFxuICAgICAgY29uc3QgcmVsYXRlZERhdGFQYXRoID0gcGF0aFxuICAgICAgICA/IG5vcm1hbGl6ZURhdGFQYXRoKGAke2RhdGFQYXRofS8ke3BhdGh9YClcbiAgICAgICAgOiBudWxsXG4gICAgICBncmFwaC5hZGRSZWxhdGlvbihkYXRhUGF0aCwgcmVsYXRlZERhdGFQYXRoLCBzY2hlbWEpXG4gICAgICBpZiAocmVsYXRlZERhdGFQYXRoKSB7XG4gICAgICAgIGdyYXBoLnNldFNvdXJjZVJlbGF0ZWQocmVsYXRlZERhdGFQYXRoKVxuICAgICAgfVxuICAgICAgLy8gQ29udmVydCByZWxhdGluZyBvYmplY3RzIHRvIGEgc2hhbGxvdyBjb3B5IHdpdGggb25seSB0aGUgaWQgbGVmdC5cbiAgICAgIC8vIFRPRE86IENvbnZlcnQgdG8gdXNpbmcgYHJlbGF0ZUJ5YDpcbiAgICAgIGNvbnN0IHByb2Nlc3NSZWxhdGUgPSB2YWx1ZSA9PiAodmFsdWUgPyB7IGlkOiB2YWx1ZS5pZCB9IDogdmFsdWUpXG4gICAgICAvLyBTZWxlY3RlZCBvcHRpb25zIGNhbiBiZSBib3RoIG9iamVjdHMgJiBhcnJheXMsIGUuZy4gJ2NoZWNrYm94ZXMnOlxuICAgICAgdmFsdWUgPSBpc0FycmF5KHZhbHVlKVxuICAgICAgICA/IHZhbHVlLm1hcChwcm9jZXNzUmVsYXRlKVxuICAgICAgICA6IHByb2Nlc3NSZWxhdGUodmFsdWUpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxudWwuZGl0by1jaGVja2JveGVzKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIDpjbGFzcz1cImBkaXRvLWxheW91dC0ke3NjaGVtYS5sYXlvdXQgfHwgJ3ZlcnRpY2FsJ31gXCJcbilcbiAgbGkoXG4gICAgdi1mb3I9XCJvcHRpb24gaW4gb3B0aW9uc1wiXG4gIClcbiAgICBsYWJlbFxuICAgICAgLmRpdG8tY2hlY2tib3hcbiAgICAgICAgaW5wdXQoXG4gICAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgICAgdi1tb2RlbD1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICA6dmFsdWU9XCJnZXRWYWx1ZUZvck9wdGlvbihvcHRpb24pXCJcbiAgICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgICAgKVxuICAgICAgICBzcGFuIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdGlvbikgfX1cbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgT3B0aW9uc01peGluIGZyb20gJy4uL21peGlucy9PcHRpb25zTWl4aW4uanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignY2hlY2tib3hlcycsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgZGVmYXVsdFZhbHVlOiBbXSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzZWxlY3RlZE9wdGlvbnM6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLnNlbGVjdGVkVmFsdWUgfHwgW10pLmZpbHRlcih2YWx1ZSA9PiB2YWx1ZSlcbiAgICAgIH0sXG5cbiAgICAgIHNldChvcHRpb24pIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFZhbHVlID0gb3B0aW9uIHx8IFtdXG4gICAgICB9XG4gICAgfVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tY2hlY2tib3hlcyB7XG4gIGxhYmVsIHtcbiAgICBAZXh0ZW5kICVpbnB1dC1ib3JkZXJsZXNzO1xuICB9XG5cbiAgaW5wdXQge1xuICAgIG1hcmdpbi1yaWdodDogJGZvcm0tc3BhY2luZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4uZGl0by1jb2RlKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImNvZGVcIlxuICA6c3R5bGU9XCJzdHlsZVwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERvbU1peGluIGZyb20gJy4uL21peGlucy9Eb21NaXhpbi5qcydcbmltcG9ydCBDb2RlRmxhc2sgZnJvbSAnY29kZWZsYXNrJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvZGUnLCB7XG4gIG1peGluczogW0RvbU1peGluXSxcblxuICBjb21wdXRlZDoge1xuICAgIGxpbmVzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxpbmVzIHx8IDNcbiAgICB9LFxuXG4gICAgc3R5bGUoKSB7XG4gICAgICByZXR1cm4gYGhlaWdodDogY2FsYygke3RoaXMubGluZXN9ZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpYFxuICAgIH1cbiAgfSxcblxuICBtb3VudGVkKCkge1xuICAgIGNvbnN0IGZsYXNrID0gbmV3IENvZGVGbGFzayh0aGlzLiRyZWZzLmNvZGUsIHtcbiAgICAgIGxhbmd1YWdlOiB0aGlzLnNjaGVtYS5sYW5ndWFnZSB8fCAnamF2YXNjcmlwdCcsXG4gICAgICB0YWJTaXplOiB0aGlzLnNjaGVtYS5pbmRlbnRTaXplIHx8IDIsXG4gICAgICBsaW5lTnVtYmVyczogZmFsc2VcbiAgICB9KVxuXG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZVxuICAgIGxldCBpZ25vcmVXYXRjaCA9IGZhbHNlXG4gICAgbGV0IGlnbm9yZVVwZGF0ZSA9IGZhbHNlXG5cbiAgICBjb25zdCBvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5mb2N1c2VkICYmIGNoYW5nZWQpIHtcbiAgICAgICAgY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9uRm9jdXMgPSAoKSA9PiB0aGlzLm9uRm9jdXMoKVxuXG4gICAgY29uc3Qgb25CbHVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5vbkJsdXIoKVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH1cblxuICAgIHRoaXMuZG9tT24odGhpcy4kcmVmcy5jb2RlLnF1ZXJ5U2VsZWN0b3IoJ3RleHRhcmVhJyksIHtcbiAgICAgIGZvY3VzOiBvbkZvY3VzLFxuICAgICAgYmx1cjogb25CbHVyXG4gICAgfSlcblxuICAgIGNvbnN0IHNldENvZGUgPSBjb2RlID0+IHtcbiAgICAgIGlmIChjb2RlICE9PSBmbGFzay5jb2RlKSB7XG4gICAgICAgIGlnbm9yZVVwZGF0ZSA9IHRydWVcbiAgICAgICAgZmxhc2sudXBkYXRlQ29kZShjb2RlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldFZhbHVlID0gdmFsdWUgPT4ge1xuICAgICAgaWYgKHZhbHVlICE9PSB0aGlzLnZhbHVlKSB7XG4gICAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgY2hhbmdlZCA9IHRydWVcbiAgICAgICAgb25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGZsYXNrLm9uVXBkYXRlKHZhbHVlID0+IHtcbiAgICAgIGlmIChpZ25vcmVVcGRhdGUpIHtcbiAgICAgICAgaWdub3JlVXBkYXRlID0gZmFsc2VcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFZhbHVlKHZhbHVlKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLiR3YXRjaCgndmFsdWUnLCB2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlV2F0Y2gpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2V0Q29kZSh2YWx1ZSB8fCAnJylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgc2V0Q29kZSh0aGlzLnZhbHVlIHx8ICcnKVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBmb2N1c0VsZW1lbnQoKSB7XG4gICAgICB0aGlzLiRlbC5xdWVyeVNlbGVjdG9yKCd0ZXh0YXJlYScpPy5mb2N1cygpXG4gICAgfSxcblxuICAgIGJsdXJFbGVtZW50KCkge1xuICAgICAgdGhpcy4kZWwucXVlcnlTZWxlY3RvcigndGV4dGFyZWEnKT8uZm9jdXMoKVxuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWNvZGUge1xuICBAZXh0ZW5kICVpbnB1dDtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIC8vIEZvciBwcm9wZXIgc2l6aW5nIG9mIGNvbnRlbnQgYWxvbmcgd2l0aCA6c3R5bGU9XCJzdHlsZVwiIHNldHRpbmcgYWJvdmUsXG4gIC8vIGZvciBwcm9wZXIgbGluZS1oZWlnaHQgY2FsY3VsYXRpb24uXG4gIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuXG4gIC5jb2RlZmxhc2sge1xuICAgIGJhY2tncm91bmQ6IG5vbmU7XG4gICAgLy8gSWdub3JlIHRoZSBwYXJlbnQgcGFkZGluZyBkZWZpbmVkIGFib3ZlIHdoaWNoIGlzIG9ubHkgbmVlZGVkIHRvIHNldFxuICAgIC8vIHRoZSBkZXNpcmVkIGhlaWdodCB3aXRoIDpzdHlsZT1cInN0eWxlXCIuXG4gICAgdG9wOiAwO1xuICAgIGxlZnQ6IDA7XG4gIH1cblxuICAuY29kZWZsYXNrX190ZXh0YXJlYSxcbiAgLmNvZGVmbGFza19fcHJlIHtcbiAgICAvLyBVc2Ugc2FtZSBwYWRkaW5nIGFzIC5kaXRvLWNvZGVcbiAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgfVxuXG4gIC5jb2RlZmxhc2tfX3RleHRhcmVhLFxuICAuY29kZWZsYXNrX19jb2RlLFxuICAuY29kZWZsYXNrX19saW5lcyB7XG4gICAgZm9udC1mYW1pbHk6ICRmb250LWZhbWlseS1tb25vO1xuICAgIGZvbnQtc2l6ZTogdmFyKC0tZm9udC1zaXplKTtcbiAgICBsaW5lLWhlaWdodDogdmFyKC0tbGluZS1oZWlnaHQpO1xuICB9XG5cbiAgLmNvZGVmbGFza19fbGluZXMge1xuICAgIHBhZGRpbmc6ICRpbnB1dC1wYWRkaW5nO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblRyaWdnZXIuZGl0by1jb2xvcihcbiAgdi1tb2RlbDpzaG93PVwic2hvd1BvcHVwXCJcbiAgdHJpZ2dlcj1cImZvY3VzXCJcbilcbiAgdGVtcGxhdGUoI3RyaWdnZXIpXG4gICAgLmRpdG8taW5wdXQoOmNsYXNzPVwieyAnZGl0by1mb2N1cyc6IHNob3dQb3B1cCB9XCIpXG4gICAgICBpbnB1dChcbiAgICAgICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgICAgICByZWY9XCJlbGVtZW50XCJcbiAgICAgICAgdi1tb2RlbD1cImhleFZhbHVlXCJcbiAgICAgICAgdHlwZT1cImlucHV0XCJcbiAgICAgICAgc2l6ZT1cIjhcIlxuICAgICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIClcbiAgICAgIC5kaXRvLWNvbG9yLXByZXZpZXcuZGl0by1pbmhlcml0LWZvY3VzKFxuICAgICAgICB2LWlmPVwidmFsdWVcIlxuICAgICAgKVxuICAgICAgICBkaXYoOnN0eWxlPVwieyBiYWNrZ3JvdW5kOiBgIyR7aGV4VmFsdWUgfHwgJzAwMDAwMDAwJ31gIH1cIilcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICAgIClcbiAgdGVtcGxhdGUoI3BvcHVwKVxuICAgIFNrZXRjaFBpY2tlci5kaXRvLWNvbG9yLXBpY2tlcihcbiAgICAgIHYtbW9kZWw9XCJjb2xvclZhbHVlXCJcbiAgICAgIDpkaXNhYmxlQWxwaGE9XCIhYWxwaGFcIlxuICAgICAgOmRpc2FibGVGaWVsZHM9XCIhaW5wdXRzXCJcbiAgICAgIDpwcmVzZXRDb2xvcnM9XCJwcmVzZXRzXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IHRpbnljb2xvciBmcm9tICd0aW55Y29sb3IyJ1xuaW1wb3J0IHsgU2tldGNoIGFzIFNrZXRjaFBpY2tlciB9IGZyb20gJ0Bsazc3L3Z1ZTMtY29sb3InXG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBUcmlnZ2VyIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvbG9yJywge1xuICBjb21wb25lbnRzOiB7IFRyaWdnZXIsIFNrZXRjaFBpY2tlciB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNob3dQb3B1cDogZmFsc2UsXG4gICAgICBjb252ZXJ0ZWRIZXhWYWx1ZTogbnVsbFxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIGNvbG9yVmFsdWU6IHtcbiAgICAgIGdldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudmFsdWUgfHwge31cbiAgICAgIH0sXG5cbiAgICAgIHNldCh2YWx1ZSkge1xuICAgICAgICBjb25zdCBmb3JtYXQgPSB0aGlzLmNvbG9yRm9ybWF0XG4gICAgICAgIGNvbnN0IGtleSA9IChcbiAgICAgICAgICB7XG4gICAgICAgICAgICAvLyBOT1RFOiB2dWUzLWNvbG9yIGNhbGxzIGl0ICdoZXgnLCB3aGlsZSB0aW55Y29sb3IgY2FsbHMgaXQgJ2hleDYnXG4gICAgICAgICAgICBoZXg6IHZhbHVlPy5hIDwgMSA/ICdoZXg4JyA6ICdoZXgnLFxuICAgICAgICAgICAgcmdiOiAncmdiYSdcbiAgICAgICAgICB9W2Zvcm1hdF0gfHxcbiAgICAgICAgICBmb3JtYXRcbiAgICAgICAgKVxuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlW2tleV1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGlueWNvbG9yKHZhbHVlKS50b1N0cmluZyhmb3JtYXQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGhleFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHZ1ZS9uby1zaWRlLWVmZmVjdHMtaW4tY29tcHV0ZWQtcHJvcGVydGllc1xuICAgICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSBudWxsXG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgIXRoaXMuZm9jdXNlZCB8fFxuICAgICAgICAgIHRoaXMuJHJlZnMuZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ3JlYWRvbmx5JylcbiAgICAgICAgKSB7XG4gICAgICAgICAgY29uc3QgY29sb3IgPSB0aW55Y29sb3IodGhpcy52YWx1ZSlcbiAgICAgICAgICBpZiAoY29sb3IuaXNWYWxpZCgpKSB7XG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSBjb2xvclxuICAgICAgICAgICAgICAudG9TdHJpbmcoY29sb3IuZ2V0QWxwaGEoKSA8IDEgPyAnaGV4OCcgOiAnaGV4NicpXG4gICAgICAgICAgICAgIC5zbGljZSgxKVxuICAgICAgICAgICAgICAudG9VcHBlckNhc2UoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb252ZXJ0ZWRIZXhWYWx1ZVxuICAgICAgfSxcblxuICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgIHRoaXMuY29udmVydGVkSGV4VmFsdWUgPSB2YWx1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICAvLyBUT0RPOiBgZm9ybWF0YCBjbGFzaGVzIHdpdGggVHlwZU1peGluLmZvcm1hdCgpYCwgd2hpY2ggc2hhbGwgYmUgcmVuYW1lZFxuICAgIC8vIHNvb24gdG8gYGZvcm1hdFZhbHVlKClgLiBSZW5hbWUgYGNvbG9yRm9ybWF0YCBiYWNrIHRvIGBmb3JtYXRgIGFmdGVyLlxuICAgIGNvbG9yRm9ybWF0OiBnZXRTY2hlbWFBY2Nlc3NvcignZm9ybWF0Jywge1xuICAgICAgdHlwZTogU3RyaW5nLFxuICAgICAgZGVmYXVsdDogJ2hleCdcbiAgICB9KSxcblxuICAgIC8vIFRPRE86IFJlbmFtZSB0byBgc2hvd0FscGhhYD9cbiAgICBhbHBoYTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2FscGhhJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICAvLyBUT0RPOiBSZW5hbWUgdG8gYHNob3dJbnB1dHNgP1xuICAgIGlucHV0czogZ2V0U2NoZW1hQWNjZXNzb3IoJ2lucHV0cycsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiB0cnVlXG4gICAgfSksXG5cbiAgICBwcmVzZXRzOiBnZXRTY2hlbWFBY2Nlc3NvcigncHJlc2V0cycsIHtcbiAgICAgIHR5cGU6IEFycmF5LFxuICAgICAgZGVmYXVsdDogW1xuICAgICAgICAnI2ZmZmZmZicsXG4gICAgICAgICcjYzNjM2MzJyxcbiAgICAgICAgJyM3ZjdmN2YnLFxuICAgICAgICAnIzAwMDAwMCcsXG4gICAgICAgICcjODgwMDE1JyxcbiAgICAgICAgJyNlZDFjMjQnLFxuICAgICAgICAnI2ZmN2YyNycsXG4gICAgICAgICcjZmZmMjAwJyxcblxuICAgICAgICAnIzIyYjE0YycsXG4gICAgICAgICcjMDBhMmU4JyxcbiAgICAgICAgJyMzZjQ4Y2MnLFxuICAgICAgICAnI2EzNDlhNCcsXG4gICAgICAgICcjYjk3YTU3JyxcbiAgICAgICAgJyNmZmFlYzknLFxuICAgICAgICAnI2ZmYzkwZScsXG4gICAgICAgICcjMDAwMDAwMDAnXG4gICAgICBdXG4gICAgfSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbiRjb2xvci1zd2F0Y2gtd2lkdGg6ICRwYXR0ZXJuLXRyYW5zcGFyZW5jeS1zaXplO1xuJGNvbG9yLXN3YXRjaC1yYWRpdXM6ICRib3JkZXItcmFkaXVzIC0gJGJvcmRlci13aWR0aDtcblxuLmRpdG8tY29sb3Ige1xuICAuZGl0by1pbnB1dCB7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgaW5wdXQge1xuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcbiAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7XG4gICAgICBwYWRkaW5nLXJpZ2h0OiAkY29sb3Itc3dhdGNoLXdpZHRoO1xuICAgIH1cbiAgfVxuXG4gIC5kaXRvLWJ1dHRvbi1jbGVhciB7XG4gICAgbWFyZ2luLXJpZ2h0OiAkY29sb3Itc3dhdGNoLXdpZHRoO1xuICB9XG5cbiAgLmRpdG8tY29sb3ItcGlja2VyIHtcbiAgICBtYXJnaW46ICRwb3B1cC1tYXJnaW47XG4gICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci13aGl0ZTtcbiAgICBib3gtc2hhZG93OiAkc2hhZG93LXdpbmRvdztcbiAgfVxuXG4gIC5kaXRvLWNvbG9yLXByZXZpZXcge1xuICAgIGJhY2tncm91bmQ6ICRwYXR0ZXJuLXRyYW5zcGFyZW5jeTtcbiAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZTtcblxuICAgICYsXG4gICAgZGl2IHtcbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIHdpZHRoOiAkY29sb3Itc3dhdGNoLXdpZHRoO1xuICAgICAgdG9wOiAwO1xuICAgICAgcmlnaHQ6IDA7XG4gICAgICBib3R0b206IDA7XG4gICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXM7XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGNvbG9yLXN3YXRjaC1yYWRpdXM7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbmNvbXBvbmVudChcbiAgOmlzPVwic2NoZW1hLmNvbXBvbmVudFwiXG4gIHYtYmluZD1cIiRwcm9wc1wiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuLy8gVGhpcyBpcyB0aGUgZ2VuZXJhbCBwdXJwb3NlICdjb21wb25lbnQnIHR5cGUsIHdoaWNoIGNhbiByZXNvbHZlIHRvIGFueSBjdXN0b21cbi8vIGNvbXBvbmVudCB0aHJvdWdoIGBzY2hlbWEuY29tcG9uZW50YCwgc2VlIGByZXNvbHZlU2NoZW1hQ29tcG9uZW50KClgLiBUaGlzXG4vLyBjYW4gYmUgdXNlZCB0byBuZXN0IGFyYml0cmFyeSB2dWUgY29tcG9uZW50cyBpbiBzY2hlbWE6XG4vLyB7XG4vLyAgIHR5cGU6ICdjb21wb25lbnQnLFxuLy8gICBjb21wb25lbnQ6IGltcG9ydCgnLi9jb21wb25lbnQnKVxuLy8gfVxuXG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyByZXNvbHZlU2NoZW1hQ29tcG9uZW50IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2NvbXBvbmVudCcsIHtcbiAgLy8gT3ZlcnJpZGUgdGhlIHN0YW5kYXJkIGBkZWZhdWx0VmFsdWU6IG51bGxgIHRvIG5vdCBzZXQgYW55IGRhdGEgZm9yIGN1c3RvbVxuICAvLyBjb21wb25lbnRzLCB1bmxlc3MgdGhleSBwcm92aWRlIGEgZGVmYXVsdCB2YWx1ZS5cbiAgZGVmYXVsdFZhbHVlOiAoKSA9PiB1bmRlZmluZWQsIC8vIENhbGxiYWNrIHRvIG92ZXJyaWRlIGBkZWZhdWx0VmFsdWU6IG51bGxgXG4gIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+ICEoJ2RlZmF1bHQnIGluIHNjaGVtYSksXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShhcGksIHNjaGVtYSkge1xuICAgIGF3YWl0IHJlc29sdmVTY2hlbWFDb21wb25lbnQoc2NoZW1hKVxuICB9XG59KVxuPC9zY3JpcHQ+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLy8tIFRPRE86IEZpbmQgYSBiZXR0ZXIgd2F5IHRvIHRyaWdnZXIgZXZhbHVhdGlvbiBvZiBgdmFsdWVgIHRoYXQgZG9zZSBub3Rcbi8vLSBpbnZvbHZlIGFjdHVhbGx5IHJlbmRlcmluZyBpdCB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IHZpc2libGUuXG5pbnB1dC5kaXRvLXRleHQuZGl0by1pbnB1dChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgOm5hbWU9XCJuYW1lXCJcbiAgdHlwZT1cInRleHRcIlxuICA6dmFsdWU9XCJ2YWx1ZVwiXG4gIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgOnJlYWRvbmx5PVwidHJ1ZVwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFR5cGVNaXhpbiBmcm9tICcuLi9taXhpbnMvVHlwZU1peGluLmpzJ1xuaW1wb3J0IERhdGFNaXhpbiBmcm9tICcuLi9taXhpbnMvRGF0YU1peGluLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWydjb21wdXRlZCcsICdkYXRhJywgJ2hpZGRlbiddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgbWl4aW5zOiBbRGF0YU1peGluXSxcblxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICAgIGRlZmF1bHRWaXNpYmxlOiBmYWxzZSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICB2YWx1ZToge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgY29uc3QgeyBzY2hlbWEgfSA9IHRoaXNcbiAgICAgICAgICBpZiAoc2NoZW1hLmRhdGEgfHwgc2NoZW1hLmRhdGFQYXRoKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuaGFuZGxlRGF0YVNjaGVtYShzY2hlbWEsICdzY2hlbWEnKVxuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB0aGlzLmRhdGFbdGhpcy5uYW1lXSA9IHZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBUeXBlTWl4aW4uY29tcHV0ZWQudmFsdWUuZ2V0LmNhbGwodGhpcylcbiAgICAgICAgfSxcblxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICBUeXBlTWl4aW4uY29tcHV0ZWQudmFsdWUuc2V0LmNhbGwodGhpcywgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWRhdGVcbiAgY29tcG9uZW50KFxuICAgIDppcz1cImdldENvbXBvbmVudCh0eXBlKVwiXG4gICAgOmlkPVwiZGF0YVBhdGhcIlxuICAgIHJlZj1cImVsZW1lbnRcIlxuICAgIHYtbW9kZWw9XCJkYXRlVmFsdWVcIlxuICAgIDpsb2NhbGU9XCJsb2NhbGVcIlxuICAgIDpmb3JtYXQ9XCJmb3JtYXRzXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgKVxuICAgIHRlbXBsYXRlKCNhZnRlcilcbiAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICAgICAgQG1vdXNlZG93bi5zdG9wXG4gICAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IERhdGVQaWNrZXIsIFRpbWVQaWNrZXIsIERhdGVUaW1lUGlja2VyIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5pbXBvcnQgeyBpc0RhdGUsIGFzc2lnbkRlZXBseSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ2RhdGUnLCAnZGF0ZXRpbWUnLCAndGltZSddLFxuICAvLyBAdnVlL2NvbXBvbmVudFxuICB7XG4gICAgY29tcG9uZW50czogeyBEYXRlUGlja2VyLCBUaW1lUGlja2VyLCBEYXRlVGltZVBpY2tlciB9LFxuICAgIC8vIFRPRE86IFRoaXMgaXMgb25seSBoZXJlIHNvIHdlIGdldCBwbGFjZWhvbGRlciBhZGRlZC4gQ29tZSB1cCB3aXRoIGFcbiAgICAvLyBiZXR0ZXIgd2F5IHRvIHN1cHBvcnQgYXR0cmlidXRlcyBwZXIgY29tcG9uZW50IChhIGxpc3Qgb2YgYWN0dWFsbHlcbiAgICAvLyBzdXBwb3J0ZWQgYXR0cmlidXRlcylcbiAgICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgICB0ZXh0RmllbGQ6IHRydWUsXG5cbiAgICBjb21wdXRlZDoge1xuICAgICAgZGF0ZVZhbHVlOiB7XG4gICAgICAgIGdldCgpIHtcbiAgICAgICAgICBjb25zdCB7IHZhbHVlIH0gPSB0aGlzXG4gICAgICAgICAgcmV0dXJuIHZhbHVlID8gbmV3IERhdGUodmFsdWUpIDogdmFsdWVcbiAgICAgICAgfSxcblxuICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgfSxcblxuICAgICAgLy8gVE9ETzogUmVuYW1lIHRvIGBmb3JtYXRgLCBvbmNlIGBzY2hlbWEuZm9ybWF0KClgIHdhcyByZW1vdmVkIHRvXG4gICAgICAvLyBgZm9ybWF0VmFsdWUoKWAuXG4gICAgICBmb3JtYXRzOiBnZXRTY2hlbWFBY2Nlc3NvcignZm9ybWF0cycsIHtcbiAgICAgICAgdHlwZTogT2JqZWN0LFxuICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICBnZXQoZm9ybWF0cykge1xuICAgICAgICAgIGNvbnN0IHsgZGF0ZSwgdGltZSB9ID0gYXNzaWduRGVlcGx5KHt9LCB0aGlzLmFwaS5mb3JtYXRzLCBmb3JtYXRzKVxuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBkYXRlOiBbJ2RhdGUnLCAnZGF0ZXRpbWUnXS5pbmNsdWRlcyh0aGlzLnR5cGUpID8gZGF0ZSA6IG51bGwsXG4gICAgICAgICAgICB0aW1lOiBbJ3RpbWUnLCAnZGF0ZXRpbWUnXS5pbmNsdWRlcyh0aGlzLnR5cGUpID8gdGltZSA6IG51bGxcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSxcblxuICAgIG1ldGhvZHM6IHtcbiAgICAgIGdldENvbXBvbmVudCh0eXBlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0ZTogJ2RhdGUtcGlja2VyJyxcbiAgICAgICAgICB0aW1lOiAndGltZS1waWNrZXInLFxuICAgICAgICAgIGRhdGV0aW1lOiAnZGF0ZS10aW1lLXBpY2tlcidcbiAgICAgICAgfVt0eXBlXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBwcm9jZXNzVmFsdWUoc2NoZW1hLCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIGlzRGF0ZSh2YWx1ZSkgPyB2YWx1ZS50b0lTT1N0cmluZygpIDogdmFsdWVcbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuIiwiaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbmV4cG9ydCBmdW5jdGlvbiBmb3JtYXRRdWVyeShxdWVyeSkge1xuICBjb25zdCBlbnRyaWVzID0gcXVlcnlcbiAgICA/IGlzQXJyYXkocXVlcnkpXG4gICAgICA/IHF1ZXJ5XG4gICAgICA6IE9iamVjdC5lbnRyaWVzKHF1ZXJ5KVxuICAgIDogW11cbiAgcmV0dXJuIChcbiAgICBuZXcgVVJMU2VhcmNoUGFyYW1zKFxuICAgICAgLy8gRXhwYW5kIGFycmF5IHZhbHVlcyBpbnRvIG11bHRpcGxlIGVudHJpZXMgdW5kZXIgdGhlIHNhbWUga2V5LCBzb1xuICAgICAgLy8gYGZvcm1hdFF1ZXJ5KHsgZm9vOiBbMSwgMl0sIGJhcjogMyB9KWAgPT4gJ2Zvbz0xJmZvbz0yJmJhcj0zJy5cbiAgICAgIGVudHJpZXMucmVkdWNlKFxuICAgICAgICAoZW50cmllcywgW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgYXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGVudHJpZXMucHVzaChba2V5LCB2YWxdKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZW50cmllc1xuICAgICAgICB9LFxuICAgICAgICBbXVxuICAgICAgKVxuICAgIClcbiAgICAgIC50b1N0cmluZygpXG4gICAgICAvLyBkZWNvZGUgYWxsIHRoZXNlIGVuY29kZWQgY2hhcmFjdGVycyB0byBoYXZlIHRoZSBzYW1lIGJlaGF2aW9yIGFzXG4gICAgICAvLyB2dWUtcm91dGVyJ3Mgb3duIHF1ZXJ5IGVuY29kaW5nLlxuICAgICAgLnJlcGxhY2VBbGwoLyUoPzoyMXwyNHwyOHwyOXwyQ3wyRnwzQXwzQnwzRHwzRnw0MCkvZywgZGVjb2RlVVJJQ29tcG9uZW50KVxuICApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlUm91dGUoeyBwYXRoLCBxdWVyeSwgaGFzaCB9KSB7XG4gIC8vIFByZXNlcnZlIGBoaXN0b3J5LnN0YXRlYCwgc2VlOlxuICAvLyBodHRwczovL3JvdXRlci52dWVqcy5vcmcvZ3VpZGUvbWlncmF0aW9uLyN1c2FnZS1vZi1oaXN0b3J5LXN0YXRlXG4gIGhpc3RvcnkucmVwbGFjZVN0YXRlKFxuICAgIGhpc3Rvcnkuc3RhdGUsXG4gICAgbnVsbCxcbiAgICBgJHtcbiAgICAgIGxvY2F0aW9uLm9yaWdpblxuICAgIH0ke1xuICAgICAgcGF0aCA/PyBsb2NhdGlvbi5wYXRobmFtZVxuICAgIH0/JHtcbiAgICAgIHF1ZXJ5ID8gZm9ybWF0UXVlcnkocXVlcnkpIDogbG9jYXRpb24uc2VhcmNoLnNsaWNlKDEpXG4gICAgfSR7XG4gICAgICBoYXNoID8/IGxvY2F0aW9uLmhhc2hcbiAgICB9YFxuICApXG59XG4iLCJpbXBvcnQgRGl0b0NvbXBvbmVudCBmcm9tICcuLi9EaXRvQ29tcG9uZW50LmpzJ1xuaW1wb3J0IEl0ZW1NaXhpbiBmcm9tICcuL0l0ZW1NaXhpbi5qcydcbmltcG9ydCBSZXNvdXJjZU1peGluIGZyb20gJy4vUmVzb3VyY2VNaXhpbi5qcydcbmltcG9ydCBTY2hlbWFQYXJlbnRNaXhpbiBmcm9tICcuLi9taXhpbnMvU2NoZW1hUGFyZW50TWl4aW4uanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciwgZ2V0U3RvcmVBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0TWVtYmVyUmVzb3VyY2UgfSBmcm9tICcuLi91dGlscy9yZXNvdXJjZS5qcydcbmltcG9ydCB7IHJlcGxhY2VSb3V0ZSB9IGZyb20gJy4uL3V0aWxzL3JvdXRlLmpzJ1xuaW1wb3J0IHtcbiAgcHJvY2Vzc1JvdXRlU2NoZW1hLFxuICBwcm9jZXNzRm9ybXMsXG4gIGdldE5hbWVkU2NoZW1hcyxcbiAgZ2V0QnV0dG9uU2NoZW1hcyxcbiAgaGFzRm9ybVNjaGVtYSxcbiAgZ2V0Rm9ybVNjaGVtYXMsXG4gIGdldFZpZXdTY2hlbWEsXG4gIGlzQ29tcGFjdCxcbiAgaXNJbmxpbmVkLFxuICBpc09iamVjdFNvdXJjZSxcbiAgaXNMaXN0U291cmNlXG59IGZyb20gJy4uL3V0aWxzL3NjaGVtYS5qcydcbmltcG9ydCB7XG4gIGlzT2JqZWN0LFxuICBpc1N0cmluZyxcbiAgaXNBcnJheSxcbiAgaXNOdW1iZXIsXG4gIGVxdWFscyxcbiAgcGFyc2VEYXRhUGF0aCxcbiAgbm9ybWFsaXplRGF0YVBhdGhcbn0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgbWl4aW5zOiBbSXRlbU1peGluLCBSZXNvdXJjZU1peGluLCBTY2hlbWFQYXJlbnRNaXhpbl0sXG5cbiAgZGVmYXVsdFZhbHVlKHNjaGVtYSkge1xuICAgIHJldHVybiBpc0xpc3RTb3VyY2Uoc2NoZW1hKSA/IFtdIDogbnVsbFxuICB9LFxuXG4gIHByb3ZpZGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICRzb3VyY2VDb21wb25lbnQ6ICgpID0+IHRoaXNcbiAgICB9XG4gIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JhcHBlZFByaW1pdGl2ZXM6IG51bGwsXG4gICAgICB1bndyYXBwaW5nUHJpbWl0aXZlczogZmFsc2VcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBzb3VyY2VDb21wb25lbnQoKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH0sXG5cbiAgICBpc09iamVjdFNvdXJjZSgpIHtcbiAgICAgIHJldHVybiBpc09iamVjdFNvdXJjZSh0aGlzLnR5cGUpXG4gICAgfSxcblxuICAgIGlzTGlzdFNvdXJjZSgpIHtcbiAgICAgIHJldHVybiBpc0xpc3RTb3VyY2UodGhpcy50eXBlKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5oYXNEYXRhKClcbiAgICBoYXNEYXRhKCkge1xuICAgICAgcmV0dXJuICEhdGhpcy52YWx1ZVxuICAgIH0sXG5cbiAgICBpc1JlYWR5KCkge1xuICAgICAgLy8gTGlzdHMgdGhhdCBoYXZlIG5vIGRhdGEgYW5kIG5vIGFzc29jaWF0ZWQgcmVzb3VyY2Ugc2hvdWxkIHN0aWxsIHJlbmRlcixcbiAgICAgIC8vIGFzIHRoZXkgbWF5IGJlIGdldHRpbmcgdGhlaXIgZGF0YSBlbHNld2hlcmUsIGUuZy4gYGNvbXB1dGUoKWAuXG4gICAgICByZXR1cm4gdGhpcy5oYXNEYXRhIHx8ICF0aGlzLnByb3ZpZGVzRGF0YVxuICAgIH0sXG5cbiAgICBpc0luVmlldygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmlld0NvbXBvbmVudFxuICAgIH0sXG5cbiAgICB3cmFwUHJpbWl0aXZlcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS53cmFwUHJpbWl0aXZlc1xuICAgIH0sXG5cbiAgICBsaXN0RGF0YToge1xuICAgICAgZ2V0KCkge1xuICAgICAgICBsZXQgZGF0YSA9IHRoaXMudmFsdWVcbiAgICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgICAvLyBDb252ZXJ0IHRvIGxpc3QgYXJyYXkuXG4gICAgICAgICAgZGF0YSA9IGRhdGEgIT0gbnVsbCA/IFtkYXRhXSA6IFtdXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gSWYgZGF0YSBnZXRzIGluaGVyaXRlZCBmcm9tIHBhcmVudCwgdW53cmFwcGluZyBpcyBub3QgaGFwcGVuaW5nXG4gICAgICAgICAgLy8gYXQgdGhlIHJvb3QgaW4gYHNldERhdGEoKWAsIGJ1dCBoZXJlIGluc3RlYWQuXG4gICAgICAgICAgZGF0YSA9IHRoaXMudW53cmFwTGlzdERhdGEoZGF0YSkgfHwgZGF0YVxuICAgICAgICB9XG4gICAgICAgIGRhdGEgfHw9IFtdXG4gICAgICAgIGNvbnN0IHsgd3JhcFByaW1pdGl2ZXMgfSA9IHRoaXNcbiAgICAgICAgaWYgKHdyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgaWYgKHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMpIHtcbiAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUgdW53cmFwcGluZyBvbmNlIGBsaXN0RGF0YWAgaXMgcmVldmFsdWF0ZWQsIHNvIHNldFxuICAgICAgICAgICAgLy8gdGhpcyB0byBgZmFsc2VgIGFnYWluLiBTZWUgYHdyYXBwZWRQcmltaXRpdmVzYCB3YXRjaGVyIGFib3ZlLlxuICAgICAgICAgICAgLy8gVE9ETzogRml4IHNpZGUtZWZmZWN0c1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgICAgICAgICB0aGlzLnVud3JhcHBpbmdQcmltaXRpdmVzID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gQ29udmVydCBkYXRhIHRvIGEgbGlzdCBvZiB3cmFwcGVkIHByaW1pdGl2ZXMsIGFuZCByZXR1cm4gaXQuXG4gICAgICAgICAgICAvLyBUT0RPOiBGaXggc2lkZS1lZmZlY3RzXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgICAgIHRoaXMud3JhcHBlZFByaW1pdGl2ZXMgPSBkYXRhLm1hcCh2YWx1ZSA9PiAoe1xuICAgICAgICAgICAgICBbd3JhcFByaW1pdGl2ZXNdOiB2YWx1ZVxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLndyYXBwZWRQcmltaXRpdmVzXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRhdGFcbiAgICAgIH0sXG5cbiAgICAgIHNldChkYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLndyYXBQcmltaXRpdmVzKSB7XG4gICAgICAgICAgdGhpcy53cmFwcGVkUHJpbWl0aXZlcyA9IGRhdGFcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyBkYXRhICYmIGRhdGEubGVuZ3RoID4gMFxuICAgICAgICAgICAgICA/IGRhdGFbMF1cbiAgICAgICAgICAgICAgOiBudWxsXG4gICAgICAgICAgICA6IGRhdGFcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvYmplY3REYXRhOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIEFsd2F5cyBnbyB0aHJvdWdoIGBsaXN0RGF0YWAgaW50ZXJuYWxseSwgd2hpY2ggZG9lcyBhbGwgdGhlXG4gICAgICAgIC8vIHByb2Nlc3Npbmcgb2YgYHdyYXBQcmltaXRpdmVzYCwgZXRjLlxuICAgICAgICByZXR1cm4gdGhpcy5saXN0RGF0YVswXSB8fCBudWxsXG4gICAgICB9LFxuXG4gICAgICBzZXQoZGF0YSkge1xuICAgICAgICB0aGlzLmxpc3REYXRhID0gZGF0YSA/IFtkYXRhXSA6IFtdXG4gICAgICB9XG4gICAgfSxcblxuICAgIHNvdXJjZVNjaGVtYSgpIHtcbiAgICAgIC8vIFRoZSBzb3VyY2VTY2hlbWEgb2YgYSBsaXN0IGlzIHRoZSBsaXN0J3Mgc2NoZW1hIGl0c2VsZi5cbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYVxuICAgIH0sXG5cbiAgICBwYXRoKCkge1xuICAgICAgLy8gVGhpcyBpcyB1c2VkIGluIFR5cGVMaXN0IGZvciBEaXRvRm9ybUNob29zZXIuXG4gICAgICByZXR1cm4gdGhpcy5yb3V0ZUNvbXBvbmVudC5nZXRDaGlsZFBhdGgodGhpcy5zY2hlbWEucGF0aClcbiAgICB9LFxuXG4gICAgZGVmYXVsdFF1ZXJ5KCkge1xuICAgICAgY29uc3QgeyBkZWZhdWx0T3JkZXI6IG9yZGVyIH0gPSB0aGlzXG4gICAgICByZXR1cm4gb3JkZXIgPyB7IG9yZGVyIH0gOiB7fVxuICAgIH0sXG5cbiAgICBxdWVyeTogZ2V0U3RvcmVBY2Nlc3NvcigncXVlcnknLCB7XG4gICAgICBnZXQocXVlcnkpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmRlZmF1bHRRdWVyeSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBzZXQocXVlcnkpIHtcbiAgICAgICAgLy8gQWx3YXlzIGtlZXAgdGhlIGRpc3BsYXllZCBxdWVyeSBwYXJhbWV0ZXJzIGluIHN5bmMgd2l0aCB0aGUgc3RvcmVkXG4gICAgICAgIC8vIG9uZXMuIFVzZSBzY29wZSBhbmQgcGFnZSBmcm9tIHRoZSBsaXN0IHNjaGVtYSBhcyBkZWZhdWx0cywgYnV0IGFsbG93XG4gICAgICAgIC8vIHRoZSByb3V0ZSBxdWVyeSBwYXJhbWV0ZXJzIHRvIG92ZXJyaWRlIHRoZW0uXG4gICAgICAgIGNvbnN0IHtcbiAgICAgICAgICBzY29wZSA9IHRoaXMuZGVmYXVsdFNjb3BlPy5uYW1lLFxuICAgICAgICAgIHBhZ2UgPSB0aGlzLnNjaGVtYS5wYWdlXG4gICAgICAgIH0gPSB0aGlzLnF1ZXJ5XG4gICAgICAgIC8vIFByZXNlcnZlIC8gbWVyZ2UgY3VycmVudGx5IHN0b3JlZCB2YWx1ZXMuXG4gICAgICAgIHF1ZXJ5ID0ge1xuICAgICAgICAgIC4uLnRoaXMucXVlcnksXG4gICAgICAgICAgLi4uKHNjb3BlICE9IG51bGwgJiYgeyBzY29wZSB9KSxcbiAgICAgICAgICAuLi4ocGFnZSAhPSBudWxsICYmIHsgcGFnZSB9KSxcbiAgICAgICAgICAuLi5xdWVyeVxuICAgICAgICB9XG4gICAgICAgIGlmICghZXF1YWxzKHF1ZXJ5LCB0aGlzLiRyb3V0ZS5xdWVyeSkpIHtcbiAgICAgICAgICAvLyBDaGFuZ2UgdGhlIHJvdXRlIHF1ZXJ5IHBhcmFtZXRlcnMsIGJ1dCBkb24ndCB0cmlnZ2VyIGEgcm91dGVcbiAgICAgICAgICAvLyBjaGFuZ2UsIGFzIHRoYXQgd291bGQgY2F1c2UgdGhlIGxpc3QgdG8gcmVsb2FkLlxuICAgICAgICAgIHJlcGxhY2VSb3V0ZSh7IHF1ZXJ5IH0pXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHF1ZXJ5IC8vIExldCBnZXRTdG9yZUFjY2Vzc29yKCkgZG8gdGhlIGFjdHVhbCBzZXR0aW5nXG4gICAgICB9XG4gICAgfSksXG5cbiAgICB0b3RhbDogZ2V0U3RvcmVBY2Nlc3NvcigndG90YWwnKSxcblxuICAgIGNvbHVtbnMoKSB7XG4gICAgICByZXR1cm4gZ2V0TmFtZWRTY2hlbWFzKHRoaXMuc2NoZW1hLmNvbHVtbnMpXG4gICAgfSxcblxuICAgIHNjb3BlcygpIHtcbiAgICAgIHJldHVybiBnZXROYW1lZFNjaGVtYXModGhpcy5zY2hlbWEuc2NvcGVzKVxuICAgIH0sXG5cbiAgICBkZWZhdWx0U2NvcGUoKSB7XG4gICAgICBsZXQgZmlyc3QgPSBudWxsXG4gICAgICBpZiAodGhpcy5zY29wZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBzY29wZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuc2NvcGVzKSkge1xuICAgICAgICAgIGlmIChzY29wZS5kZWZhdWx0U2NvcGUpIHtcbiAgICAgICAgICAgIHJldHVybiBzY29wZVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWZpcnN0KSB7XG4gICAgICAgICAgICBmaXJzdCA9IHNjb3BlXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmlyc3RcbiAgICB9LFxuXG4gICAgZGVmYXVsdE9yZGVyKCkge1xuICAgICAgaWYgKHRoaXMuY29sdW1ucykge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBPYmplY3QudmFsdWVzKHRoaXMuY29sdW1ucykpIHtcbiAgICAgICAgICBjb25zdCB7IGRlZmF1bHRTb3J0IH0gPSBjb2x1bW5cbiAgICAgICAgICBpZiAoZGVmYXVsdFNvcnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGlzU3RyaW5nKGRlZmF1bHRTb3J0KSA/IGRlZmF1bHRTb3J0IDogJ2FzYydcbiAgICAgICAgICAgIHJldHVybiBgJHtjb2x1bW4ubmFtZX0gJHtkaXJlY3Rpb259YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9LFxuXG4gICAgbmVzdGVkTWV0YSgpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnRoaXMubWV0YSxcbiAgICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBmb3JtcygpIHtcbiAgICAgIHJldHVybiBPYmplY3QudmFsdWVzKGdldEZvcm1TY2hlbWFzKHRoaXMuc2NoZW1hLCB0aGlzLmNvbnRleHQpKVxuICAgIH0sXG5cbiAgICAvLyBSZXR1cm5zIHRoZSBsaW5rZWQgdmlldyBzY2hlbWEgaWYgdGhpcyBzb3VyY2UgZWRpdHMgaXQgaXRzIGl0ZW1zIHRocm91Z2hcbiAgICAvLyBhIGxpbmtlZCB2aWV3LlxuICAgIHZpZXcoKSB7XG4gICAgICByZXR1cm4gZ2V0Vmlld1NjaGVtYSh0aGlzLnNjaGVtYSwgdGhpcy5jb250ZXh0KVxuICAgIH0sXG5cbiAgICBsaW5rc1RvVmlldygpIHtcbiAgICAgIHJldHVybiAhIXRoaXMudmlld1xuICAgIH0sXG5cbiAgICBidXR0b25TY2hlbWFzKCkge1xuICAgICAgcmV0dXJuIGdldEJ1dHRvblNjaGVtYXModGhpcy5zY2hlbWEuYnV0dG9ucylcbiAgICB9LFxuXG4gICAgaXNDb21wYWN0KCkge1xuICAgICAgcmV0dXJuIHRoaXMuZm9ybXMuZXZlcnkoaXNDb21wYWN0KVxuICAgIH0sXG5cbiAgICBpc0lubGluZWQoKSB7XG4gICAgICByZXR1cm4gaXNJbmxpbmVkKHRoaXMuc2NoZW1hKVxuICAgIH0sXG5cbiAgICBwYWdpbmF0ZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3BhZ2luYXRlJywge1xuICAgICAgdHlwZTogTnVtYmVyXG4gICAgfSksXG5cbiAgICByZW5kZXI6IGdldFNjaGVtYUFjY2Vzc29yKCdyZW5kZXInLCB7XG4gICAgICB0eXBlOiBGdW5jdGlvbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KSxcblxuICAgIGNyZWF0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2NyZWF0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChjcmVhdGFibGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0YWJsZSAmJiBoYXNGb3JtU2NoZW1hKHRoaXMuc2NoZW1hKVxuICAgICAgICAgID8gdGhpcy5pc09iamVjdFNvdXJjZVxuICAgICAgICAgICAgPyAhdGhpcy52YWx1ZVxuICAgICAgICAgICAgOiB0cnVlXG4gICAgICAgICAgOiBmYWxzZVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgZWRpdGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdlZGl0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlZGl0YWJsZSkge1xuICAgICAgICByZXR1cm4gZWRpdGFibGUgJiYgIXRoaXMuaXNJbmxpbmVkXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBkZWxldGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWxldGFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlICYmIHRoaXMubGlzdERhdGEubGVuZ3RoID4gMSAmJiBkcmFnZ2FibGVcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGNvbGxhcHNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbCwgLy8gc28gdGhhdCBgPz9gIGJlbG93IGNhbiBkbyBpdHMgdGhpbmc6XG4gICAgICBnZXQoY29sbGFwc2libGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbmxpbmVkICYmICEhKGNvbGxhcHNpYmxlID8/IHRoaXMuY29sbGFwc2VkICE9PSBudWxsKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2VkOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2VkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgJHJvdXRlOiB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlLXJvdXRlci9pc3N1ZXMvMzM5MyNpc3N1ZWNvbW1lbnQtMTE1ODQ3MDE0OVxuICAgICAgZmx1c2g6ICdwb3N0JyxcbiAgICAgIGhhbmRsZXIodG8sIGZyb20pIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMucHJvdmlkZXNEYXRhICYmXG4gICAgICAgICAgZnJvbS5wYXRoID09PSB0by5wYXRoICYmXG4gICAgICAgICAgZnJvbS5oYXNoID09PSB0by5oYXNoXG4gICAgICAgICkge1xuICAgICAgICAgIC8vIFBhdGhzIGFuZCBoYXNoZXMgcmVtYWluIHRoZSBzYW1lLCBzbyBvbmx5IHF1ZXJpZXMgaGF2ZSBjaGFuZ2VkLlxuICAgICAgICAgIC8vIFVwZGF0ZSBmaWx0ZXIgYW5kIHJlbG9hZCBkYXRhIHdpdGhvdXQgY2xlYXJpbmcuXG4gICAgICAgICAgdGhpcy5xdWVyeSA9IHRvLnF1ZXJ5XG4gICAgICAgICAgdGhpcy5sb2FkRGF0YShmYWxzZSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB3cmFwcGVkUHJpbWl0aXZlczoge1xuICAgICAgZGVlcDogdHJ1ZSxcbiAgICAgIGhhbmRsZXIodG8sIGZyb20pIHtcbiAgICAgICAgY29uc3QgeyB3cmFwUHJpbWl0aXZlcyB9ID0gdGhpc1xuICAgICAgICAvLyBTa2lwIHRoZSBpbml0aWFsIHNldHRpbmcgb2Ygd3JhcHBlZFByaW1pdGl2ZXMgYXJyYXlcbiAgICAgICAgaWYgKHdyYXBQcmltaXRpdmVzICYmIGZyb20gIT09IG51bGwpIHtcbiAgICAgICAgICAvLyBXaGVuZXZlciB0aGUgd3JhcHBlZFByaW1pdGl2ZXMgY2hhbmdlLCBtYXAgdGhlaXIgdmFsdWVzIGJhY2sgdG9cbiAgICAgICAgICAvLyB0aGUgYXJyYXkgb2YgcHJpbWl0aXZlcywgaW4gYSBwcmltaXRpdmUgd2F5IDopXG4gICAgICAgICAgLy8gQnV0IHNldCBgdW53cmFwcGluZ1ByaW1pdGl2ZXMgPSB0cnVlYCwgc28gdGhlIGBsaXN0RGF0YWAgY29tcHV0ZWRcbiAgICAgICAgICAvLyBwcm9wZXJ0eSBrbm93cyBhYm91dCBpdCwgd2hpY2ggc2V0cyBpdCB0byBgZmFsc2VgIGFnYWluLlxuICAgICAgICAgIHRoaXMudW53cmFwcGluZ1ByaW1pdGl2ZXMgPSB0cnVlXG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHRvLm1hcChvYmplY3QgPT4gb2JqZWN0W3dyYXBQcmltaXRpdmVzXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgc2V0dXBEYXRhKCkge1xuICAgICAgdGhpcy5xdWVyeSA9IHRoaXMuJHJvdXRlLnF1ZXJ5XG4gICAgICB0aGlzLmVuc3VyZURhdGEoKVxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5jbGVhckRhdGEoKVxuICAgIGNsZWFyRGF0YSgpIHtcbiAgICAgIHRoaXMudG90YWwgPSAwXG4gICAgICB0aGlzLnZhbHVlID0gbnVsbFxuICAgIH0sXG5cbiAgICAvLyBAb3ZlcnJpZGUgUmVzb3VyY2VNaXhpbi5zZXREYXRhKClcbiAgICBzZXREYXRhKGRhdGEpIHtcbiAgICAgIC8vIFdoZW4gbmV3IGRhdGEgaXMgbG9hZGVkLCB3ZSBjYW4gc3RvcmUgaXQgcmlnaHQgYmFjayBpbiB0aGUgZGF0YSBvZiB0aGVcbiAgICAgIC8vIHZpZXcgb3IgZm9ybSB0aGF0IGNyZWF0ZWQgdGhpcyBsaXN0IGNvbXBvbmVudC5cbiAgICAgIC8vIFN1cHBvcnQgdHdvIGZvcm1hdHMgZm9yIGxpc3QgZGF0YTpcbiAgICAgIC8vIC0gQXJyYXk6IGBbLi4uXWBcbiAgICAgIC8vIC0gT2JqZWN0OiBgeyByZXN1bHRzOiBbLi4uXSwgdG90YWwgfWAsIHNlZSBgdW53cmFwTGlzdERhdGEoKWBcbiAgICAgIGlmIChcbiAgICAgICAgIWRhdGEgfHxcbiAgICAgICAgdGhpcy5pc0xpc3RTb3VyY2UgJiYgaXNBcnJheShkYXRhKSB8fFxuICAgICAgICB0aGlzLmlzT2JqZWN0U291cmNlICYmIGlzT2JqZWN0KGRhdGEpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGRhdGFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy51bndyYXBMaXN0RGF0YShkYXRhKSkge1xuICAgICAgICAvLyBUaGUgZm9ybWF0IGRpZG4ndCBtYXRjaCwgc2VlIGlmIHdlIHJlY2VpdmVkIGEgYHsgcmVzdWx0cywgdG90YWwgfWBcbiAgICAgICAgLy8gb2JqZWN0LCBpbiB3aGljaCBjYXNlIGB0aGlzLnZhbHVlYCB3YXMgYWxyZWFkeSBzZXQgYnlcbiAgICAgICAgLy8gYHVud3JhcExpc3REYXRhKClgIGFuZCB3ZSdyZSBkb25lIG5vdy5cbiAgICAgIH0gZWxzZSBpZiAoaXNPYmplY3QoZGF0YSkgJiYgdGhpcy5pc0luVmlldykge1xuICAgICAgICAvLyBUaGUgY29udHJvbGxlciBpcyBzZW5kaW5nIGRhdGEgZm9yIGEgZnVsbCBtdWx0aS1jb21wb25lbnQgdmlldyxcbiAgICAgICAgLy8gaW5jbHVkaW5nIHRoZSBuZXN0ZWQgbGlzdCBkYXRhLlxuICAgICAgICB0aGlzLnZpZXdDb21wb25lbnQuc2V0RGF0YShkYXRhKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICB1bndyYXBMaXN0RGF0YShkYXRhKSB7XG4gICAgICBpZiAoXG4gICAgICAgIHRoaXMuaXNMaXN0U291cmNlICYmXG4gICAgICAgIGlzT2JqZWN0KGRhdGEpICYmXG4gICAgICAgIGlzTnVtYmVyKGRhdGEudG90YWwpICYmXG4gICAgICAgIGlzQXJyYXkoZGF0YS5yZXN1bHRzKVxuICAgICAgKSB7XG4gICAgICAgIC8vIElmIEBkaXRvanMvc2VydmVyIHNlbmRzIGRhdGEgaW4gdGhlIGZvcm0gb2YgYHsgcmVzdWx0cywgdG90YWwgfWBcbiAgICAgICAgLy8gcmVwbGFjZSB0aGUgdmFsdWUgd2l0aCByZXN1bHQsIGJ1dCByZW1lbWJlciB0aGUgdG90YWwgaW4gdGhlIHN0b3JlLlxuICAgICAgICB0aGlzLnRvdGFsID0gZGF0YS50b3RhbFxuICAgICAgICB0aGlzLnZhbHVlID0gZGF0YS5yZXN1bHRzXG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNyZWF0ZUl0ZW0oc2NoZW1hLCB0eXBlKSB7XG4gICAgICBjb25zdCBpdGVtID0gdGhpcy5jcmVhdGVEYXRhKHNjaGVtYSwgdHlwZSlcbiAgICAgIGlmICh0aGlzLmlzT2JqZWN0U291cmNlKSB7XG4gICAgICAgIHRoaXMub2JqZWN0RGF0YSA9IGl0ZW1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMubGlzdERhdGEucHVzaChpdGVtKVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuY29sbGFwc2libGUpIHtcbiAgICAgICAgdGhpcy4kbmV4dFRpY2soKCkgPT4gdGhpcy5vcGVuU2NoZW1hQ29tcG9uZW50KC0xKSlcbiAgICAgIH1cbiAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgcmV0dXJuIGl0ZW1cbiAgICB9LFxuXG4gICAgcmVtb3ZlSXRlbShpdGVtLCBpbmRleCkge1xuICAgICAgbGV0IHJlbW92ZWQgPSBmYWxzZVxuICAgICAgaWYgKHRoaXMuaXNPYmplY3RTb3VyY2UpIHtcbiAgICAgICAgdGhpcy5vYmplY3REYXRhID0gbnVsbFxuICAgICAgICByZW1vdmVkID0gdHJ1ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgeyBsaXN0RGF0YSB9ID0gdGhpc1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGxpc3REYXRhLnNwbGljZShpbmRleCwgMSlcbiAgICAgICAgICByZW1vdmVkID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVtb3ZlZCkge1xuICAgICAgICB0aGlzLnJlbW92ZUl0ZW1TdG9yZSh0aGlzLnNjaGVtYSwgaXRlbSwgaW5kZXgpXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBkZWxldGVJdGVtKGl0ZW0sIGluZGV4KSB7XG4gICAgICBjb25zdCBsYWJlbCA9IChcbiAgICAgICAgaXRlbSAmJlxuICAgICAgICB0aGlzLmdldEl0ZW1MYWJlbCh0aGlzLnNjaGVtYSwgaXRlbSwge1xuICAgICAgICAgIGluZGV4LFxuICAgICAgICAgIGV4dGVuZGVkOiB0cnVlXG4gICAgICAgIH0pXG4gICAgICApXG5cbiAgICAgIGNvbnN0IG5vdGlmeSA9ICgpID0+XG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiB0aGlzLmlzVHJhbnNpZW50ID8gJ2luZm8nIDogJ3N1Y2Nlc3MnLFxuICAgICAgICAgIHRpdGxlOiAnU3VjY2Vzc2Z1bGx5IFJlbW92ZWQnLFxuICAgICAgICAgIHRleHQ6IFtcbiAgICAgICAgICAgIGAke2xhYmVsfSB3YXMgJHt0aGlzLnZlcmJzLmRlbGV0ZWR9LmAsXG4gICAgICAgICAgICB0aGlzLnRyYW5zaWVudE5vdGVcbiAgICAgICAgICBdXG4gICAgICAgIH0pXG5cbiAgICAgIGlmIChcbiAgICAgICAgaXRlbSAmJlxuICAgICAgICB3aW5kb3cuY29uZmlybShcbiAgICAgICAgICBgRG8geW91IHJlYWxseSB3YW50IHRvICR7dGhpcy52ZXJicy5kZWxldGV9ICR7bGFiZWx9P2BcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLmlzVHJhbnNpZW50KSB7XG4gICAgICAgICAgdGhpcy5yZW1vdmVJdGVtKGl0ZW0sIGluZGV4KVxuICAgICAgICAgIG5vdGlmeSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgaXRlbUlkID0gdGhpcy5nZXRJdGVtSWQodGhpcy5zY2hlbWEsIGl0ZW0sIGluZGV4KVxuICAgICAgICAgIGNvbnN0IHJlc291cmNlID0gZ2V0TWVtYmVyUmVzb3VyY2UoaXRlbUlkLCB0aGlzLnJlc291cmNlKVxuICAgICAgICAgIGlmIChyZXNvdXJjZSkge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXF1ZXN0KHsgbWV0aG9kOiAnZGVsZXRlJywgcmVzb3VyY2UgfSwgZXJyID0+IHtcbiAgICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnJlbW92ZUl0ZW0oaXRlbSwgaW5kZXgpXG4gICAgICAgICAgICAgICAgbm90aWZ5KClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB0aGlzLnJlbG9hZERhdGEoKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KSB7XG4gICAgICBjb25zdCB7IHNjaGVtYUNvbXBvbmVudHMgfSA9IHRoaXNcbiAgICAgIGNvbnN0IHsgbGVuZ3RoIH0gPSBzY2hlbWFDb21wb25lbnRzXG4gICAgICByZXR1cm4gc2NoZW1hQ29tcG9uZW50c1soKGluZGV4ICUgbGVuZ3RoKSArIGxlbmd0aCkgJSBsZW5ndGhdXG4gICAgfSxcblxuICAgIG9wZW5TY2hlbWFDb21wb25lbnQoaW5kZXgpIHtcbiAgICAgIGNvbnN0IHNjaGVtYUNvbXBvbmVudCA9IHRoaXMuZ2V0U2NoZW1hQ29tcG9uZW50KGluZGV4KVxuICAgICAgaWYgKHNjaGVtYUNvbXBvbmVudCkge1xuICAgICAgICBzY2hlbWFDb21wb25lbnQub3BlbmVkID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBhc3luYyBuYXZpZ2F0ZVRvQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICBpZiAodGhpcy5jb2xsYXBzaWJsZSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGRhdGFQYXRoLnN0YXJ0c1dpdGgodGhpcy5kYXRhUGF0aClcbiAgICAgICAgICA/IHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgICA/IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGguc2xpY2UodGhpcy5kYXRhUGF0aC5sZW5ndGggKyAxKSlbMF0gPz8gbnVsbFxuICAgICAgICAgICAgOiAwXG4gICAgICAgICAgOiBudWxsXG4gICAgICAgIGlmIChpbmRleCAhPT0gbnVsbCAmJiBpc051bWJlcigraW5kZXgpKSB7XG4gICAgICAgICAgY29uc3Qgc2NoZW1hQ29tcG9uZW50ID0gdGhpcy5nZXRTY2hlbWFDb21wb25lbnQoK2luZGV4KVxuICAgICAgICAgIGlmIChzY2hlbWFDb21wb25lbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgb3BlbmVkIH0gPSBzY2hlbWFDb21wb25lbnRcbiAgICAgICAgICAgIGlmICghb3BlbmVkKSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSB0cnVlXG4gICAgICAgICAgICAgIGF3YWl0IHRoaXMuJG5leHRUaWNrKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBzY2hlbWFDb21wb25lbnQuZ2V0Q29tcG9uZW50c0J5RGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgICAgICBpZiAoY29tcG9uZW50cy5sZW5ndGggPiAwICYmIChvbkNvbXBsZXRlPy4oY29tcG9uZW50cykgPz8gdHJ1ZSkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5vcGVuZWQgPSBvcGVuZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLm5hdmlnYXRlVG9Sb3V0ZUNvbXBvbmVudChkYXRhUGF0aCwgb25Db21wbGV0ZSlcbiAgICB9LFxuXG4gICAgbmF2aWdhdGVUb1JvdXRlQ29tcG9uZW50KGRhdGFQYXRoLCBvbkNvbXBsZXRlKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBjYWxsT25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgbGFzdCByb3V0ZSBjb21wb25lbnQsIHdoaWNoIHdpbGwgYmUgdGhlIGNvbXBvbmVudCB0aGF0XG4gICAgICAgICAgLy8gd2UganVzdCBuYXZpZ2F0ZWQgdG8sIGFuZCBwYXNzIGl0IG9uIHRvIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgY29uc3QgeyByb3V0ZUNvbXBvbmVudHMgfSA9IHRoaXMuYXBwU3RhdGVcbiAgICAgICAgICBjb25zdCByb3V0ZUNvbXBvbmVudCA9IHJvdXRlQ29tcG9uZW50c1tyb3V0ZUNvbXBvbmVudHMubGVuZ3RoIC0gMV1cbiAgICAgICAgICByZXNvbHZlKG9uQ29tcGxldGU/Lihbcm91dGVDb21wb25lbnRdKSA/PyB0cnVlKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0YVBhdGhQYXJ0cyA9IHBhcnNlRGF0YVBhdGgoZGF0YVBhdGgpXG4gICAgICAgIC8vIFNlZSBpZiB3ZSBjYW4gZmluZCBhIHJvdXRlIHRoYXQgY2FuIHNlcnZlIHBhcnQgb2YgdGhlIGdpdmVuIGRhdGFQYXRoLFxuICAgICAgICAvLyBhbmQgdGFrZSBpdCBmcm9tIHRoZXJlOlxuICAgICAgICB3aGlsZSAoZGF0YVBhdGhQYXJ0cy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgY29uc3QgcGF0aCA9IHRoaXMucm91dGVDb21wb25lbnQuZ2V0Q2hpbGRQYXRoKFxuICAgICAgICAgICAgdGhpcy5hcGkubm9ybWFsaXplUGF0aChub3JtYWxpemVEYXRhUGF0aChkYXRhUGF0aFBhcnRzKSlcbiAgICAgICAgICApXG4gICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGFjdHVhbGx5IGlzIGEgcm91dGUgZm9yIHRoaXMgc3ViLWNvbXBvbmVudDpcbiAgICAgICAgICBjb25zdCB7IG1hdGNoZWQgfSA9IHRoaXMuJHJvdXRlci5yZXNvbHZlKHBhdGgpXG4gICAgICAgICAgaWYgKG1hdGNoZWQubGVuZ3RoICYmIG1hdGNoZWRbMF0ubmFtZSAhPT0gJ2NhdGNoLWFsbCcpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLiRyb3V0ZS5wYXRoID09PSBwYXRoKSB7XG4gICAgICAgICAgICAgIC8vIFdlJ3JlIGFscmVhZHkgdGhlcmUsIHNvIGp1c3QgY2FsbCBgb25Db21wbGV0ZSgpYDpcbiAgICAgICAgICAgICAgY2FsbE9uQ29tcGxldGUoKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gTmF2aWdhdGUgdG8gdGhlIGNvbXBvbmVudCdzIHBhdGgsIHRoZW4gY2FsbCBgb25Db21wbGV0ZSgpYF86XG4gICAgICAgICAgICAgIHRoaXMuJHJvdXRlclxuICAgICAgICAgICAgICAgIC5wdXNoKHsgcGF0aCB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChyZWplY3QpXG4gICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIGxhc3Qgcm91dGUgY29tcG9uZW50IHRvIGJlIG1vdW50ZWQgaW4gdGhlIG5leHRcbiAgICAgICAgICAgICAgICAvLyB0aWNrIGJlZm9yZSBjYWxsaW5nIGBvbkNvbXBsZXRlKClgXG4gICAgICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdGhpcy4kbmV4dFRpY2soY2FsbE9uQ29tcGxldGUpXG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gS2VlcCByZW1vdmluZyB0aGUgbGFzdCBwYXJ0IHVudGlsIHdlIGZpbmQgYSBtYXRjaC5cbiAgICAgICAgICBkYXRhUGF0aFBhcnRzLnBvcCgpXG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShmYWxzZSlcbiAgICAgIH0pXG4gICAgfVxuICB9LCAvLyBlbmQgb2YgYG1ldGhvZHNgXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICBhcGksXG4gICAgc2NoZW1hLFxuICAgIG5hbWUsXG4gICAgcm91dGVzLFxuICAgIGxldmVsLFxuICAgIG5lc3RlZCA9IGZhbHNlLFxuICAgIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICBwcm9jZXNzUm91dGVTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUpXG4gICAgY29uc3QgaW5saW5lZCA9IGlzSW5saW5lZChzY2hlbWEpXG4gICAgaWYgKGlubGluZWQgJiYgc2NoZW1hLnJlc291cmNlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBOZXN0ZWQgJHtcbiAgICAgICAgICB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgICAgPyAnbGlzdHMnXG4gICAgICAgICAgICA6IHRoaXMuaXNPYmplY3RTb3VyY2VcbiAgICAgICAgICAgICAgPyAnb2JqZWN0cydcbiAgICAgICAgICAgICAgOiAnc2NoZW1hJ1xuICAgICAgICB9IGNhbm5vdCBsb2FkIGRhdGEgZnJvbSB0aGVpciBvd24gcmVzb3VyY2VzYFxuICAgICAgKVxuICAgIH1cbiAgICAvLyBVc2UgZGlmZmVyZW50bHkgbmFtZWQgdXJsIHBhcmFtZXRlcnMgb24gZWFjaCBuZXN0ZWQgbGV2ZWwgZm9yIGlkIGFzXG4gICAgLy8gb3RoZXJ3aXNlIHRoZXkgd291bGQgY2xhc2ggYW5kIG92ZXJyaWRlIGVhY2ggb3RoZXIgaW5zaWRlICRyb3V0ZS5wYXJhbXNcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS92dWVqcy92dWUtcm91dGVyL2lzc3Vlcy8xMzQ1XG4gICAgY29uc3QgcGFyYW0gPSBgaWQke2xldmVsICsgMX1gXG4gICAgY29uc3QgbWV0YSA9IHtcbiAgICAgIGFwaSxcbiAgICAgIHNjaGVtYVxuICAgIH1cbiAgICBjb25zdCBmb3JtTWV0YSA9IHtcbiAgICAgIC4uLm1ldGEsXG4gICAgICAvLyBXaGVuIGNoaWxkcmVuIGFyZSBmbGF0dGVuZWQgKGUuZy4gdHJlZS1saXN0cyksIGluY2x1ZGUgdGhlIGBmbGF0dGVuYFxuICAgICAgLy8gc2V0dGluZyBhbHNvLCBmb3IgZmxhdHRlbmluZyBiZWxvdy5cbiAgICAgIGZsYXR0ZW4sXG4gICAgICBuZXN0ZWQsXG4gICAgICBwYXJhbVxuICAgIH1cbiAgICBjb25zdCBjaGlsZFJvdXRlcyA9IGF3YWl0IHByb2Nlc3NGb3JtcyhhcGksIHNjaGVtYSwgbGV2ZWwpXG4gICAgaWYgKHByb2Nlc3MpIHtcbiAgICAgIGF3YWl0IHByb2Nlc3MoY2hpbGRSb3V0ZXMsIGxldmVsICsgMSlcbiAgICB9XG4gICAgLy8gSW5saW5lZCBmb3JtcyBkb24ndCBuZWVkIHRvIGFjdHVhbGx5IGFkZCByb3V0ZXMuXG4gICAgaWYgKGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSAmJiAhaW5saW5lZCkge1xuICAgICAgY29uc3QgZ2V0UGF0aFdpdGhQYXJhbSA9IChwYXRoLCBwYXJhbSkgPT5cbiAgICAgICAgcGFyYW1cbiAgICAgICAgICA/IHBhdGhcbiAgICAgICAgICAgID8gYCR7cGF0aH0vOiR7cGFyYW19YFxuICAgICAgICAgICAgOiBgOiR7cGFyYW19YFxuICAgICAgICAgIDogcGF0aFxuXG4gICAgICAvLyBMaXN0cyBpbiBzaW5nbGUtY29tcG9uZW50LXZpZXdzIChsZXZlbCA9PT0gMCkgdXNlIHRoZWlyIHZpZXcncyBwYXRoLFxuICAgICAgLy8gd2hpbGUgYWxsIG90aGVycyBuZWVkIHRoZWlyIHBhdGggcHJlZml4ZWQgd2l0aCB0aGUgcGFyZW50J3MgcGF0aDpcbiAgICAgIGNvbnN0IHNvdXJjZVBhdGggPSBsZXZlbCA9PT0gMCA/ICcnIDogc2NoZW1hLnBhdGhcbiAgICAgIGNvbnN0IGZvcm1Sb3V0ZSA9IHtcbiAgICAgICAgLy8gT2JqZWN0IHNvdXJjZXMgZG9uJ3QgbmVlZCBpZCBwYXJhbXMgaW4gdGhlaXIgZm9ybSBwYXRocywgYXMgdGhleVxuICAgICAgICAvLyBkaXJlY3RseSBlZGl0IG9uZSBvYmplY3QuXG4gICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgaXNMaXN0U291cmNlKHNjaGVtYSkgJiYgcGFyYW0pLFxuICAgICAgICBjb21wb25lbnQ6IERpdG9Db21wb25lbnQuY29tcG9uZW50KFxuICAgICAgICAgIG5lc3RlZCA/ICdEaXRvRm9ybU5lc3RlZCcgOiAnRGl0b0Zvcm0nXG4gICAgICAgICksXG4gICAgICAgIG1ldGE6IGZvcm1NZXRhXG4gICAgICB9XG4gICAgICBpZiAoaXNPYmplY3RTb3VyY2Uoc2NoZW1hKSkge1xuICAgICAgICAvLyBBbHNvIGFkZCBhIHBhcmFtIHJvdXRlLCBzaW1wbHkgdG8gaGFuZGxlICcvY3JlYXRlJyBsaW5rcyB0aGUgc2FtZVxuICAgICAgICAvLyB3YXkgdGhhdCBsaXN0cyBkbywgd2hlcmUgaXQgb3ZlcmxhcHMgd2l0aCA6aWQgZm9yIGl0ZW0gaWRzLlxuICAgICAgICByb3V0ZXMucHVzaCh7XG4gICAgICAgICAgLi4uZm9ybVJvdXRlLFxuICAgICAgICAgIHBhdGg6IGdldFBhdGhXaXRoUGFyYW0oc291cmNlUGF0aCwgcGFyYW0pXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBpZiAoc291cmNlUGF0aCkge1xuICAgICAgICAvLyBKdXN0IHJlZGlyZWN0IGJhY2sgdG8gdGhlIHBhcmVudCB3aGVuIGEgbmVzdGVkIHNvdXJjZSByb3V0ZSBpcyBoaXQuXG4gICAgICAgIHJvdXRlcy5wdXNoKHtcbiAgICAgICAgICBwYXRoOiBzb3VyY2VQYXRoLFxuICAgICAgICAgIHJlZGlyZWN0OiAnLicsXG4gICAgICAgICAgbWV0YVxuICAgICAgICB9KVxuICAgICAgfVxuICAgICAgLy8gUGFydGl0aW9uIGNoaWxkUm91dGVzIGludG8gdGhvc2UgdGhhdCBuZWVkIGZsYXR0ZW5pbmcgKGUuZy4gdHJlZS1saXN0cylcbiAgICAgIC8vIGFuZCB0aG9zZSB0aGF0IGRvbid0LCBhbmQgcHJvY2VzcyBlYWNoIGdyb3VwIHNlcGFyYXRlbHkgYWZ0ZXIuXG4gICAgICBjb25zdCBbZmxhdFJvdXRlcywgc3ViUm91dGVzXSA9IGNoaWxkUm91dGVzLnJlZHVjZShcbiAgICAgICAgKHJlcywgcm91dGUpID0+IHtcbiAgICAgICAgICByZXNbcm91dGUubWV0YS5mbGF0dGVuID8gMCA6IDFdLnB1c2gocm91dGUpXG4gICAgICAgICAgcmV0dXJuIHJlc1xuICAgICAgICB9LFxuICAgICAgICBbW10sIFtdXVxuICAgICAgKVxuICAgICAgaWYgKHN1YlJvdXRlcy5sZW5ndGgpIHtcbiAgICAgICAgZm9ybVJvdXRlLmNoaWxkcmVuID0gc3ViUm91dGVzXG4gICAgICB9XG4gICAgICByb3V0ZXMucHVzaChmb3JtUm91dGUpXG4gICAgICAvLyBBZGQgdGhlIHByZWZpeGVkIGZvcm1Sb3V0ZXMgd2l0aCB0aGVpciBjaGlsZHJlbiBmb3IgbmVzdGVkIGxpc3RzLlxuICAgICAgaWYgKGZsYXRSb3V0ZXMubGVuZ3RoKSB7XG4gICAgICAgIGZvciAoY29uc3QgY2hpbGRSb3V0ZSBvZiBmbGF0Um91dGVzKSB7XG4gICAgICAgICAgcm91dGVzLnB1c2goe1xuICAgICAgICAgICAgLi4uKGNoaWxkUm91dGUucmVkaXJlY3QgPyBjaGlsZFJvdXRlIDogZm9ybVJvdXRlKSxcbiAgICAgICAgICAgIHBhdGg6IGAke2Zvcm1Sb3V0ZS5wYXRofS8ke2NoaWxkUm91dGUucGF0aH1gLFxuICAgICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgICAuLi5jaGlsZFJvdXRlLm1ldGEsXG4gICAgICAgICAgICAgIGZsYXR0ZW5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHByb2Nlc3NWYWx1ZShzY2hlbWEsIHZhbHVlLCBkYXRhUGF0aCwgZ3JhcGgpIHtcbiAgICBncmFwaC5hZGRTb3VyY2UoZGF0YVBhdGgsIHNjaGVtYSlcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxufVxuIiwiaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSwgbGFiZWxpemUgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0TmFtZWRTY2hlbWFzLCBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMgfSBmcm9tICcuL3NjaGVtYSdcblxuZXhwb3J0IGNvbnN0IGZpbHRlckNvbXBvbmVudHMgPSB7XG4gICd0ZXh0JyhmaWx0ZXIpIHtcbiAgICBjb25zdCBvcHRpb25zID0gW1xuICAgICAge1xuICAgICAgICBsYWJlbDogJ2NvbnRhaW5zJyxcbiAgICAgICAgdmFsdWU6ICdjb250YWlucydcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnZXF1YWxzJyxcbiAgICAgICAgdmFsdWU6ICdlcXVhbHMnXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ3N0YXJ0cyB3aXRoJyxcbiAgICAgICAgdmFsdWU6ICdzdGFydHMtd2l0aCdcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnZW5kcyB3aXRoJyxcbiAgICAgICAgdmFsdWU6ICdlbmRzLXdpdGgnXG4gICAgICB9XG4gICAgXVxuICAgIHJldHVybiB7XG4gICAgICBvcGVyYXRvcjogZmlsdGVyLm9wZXJhdG9yc1xuICAgICAgICA/IHtcbiAgICAgICAgICAgIHR5cGU6ICdzZWxlY3QnLFxuICAgICAgICAgICAgd2lkdGg6ICcyLzUnLFxuICAgICAgICAgICAgb3B0aW9uczogaXNBcnJheShmaWx0ZXIub3BlcmF0b3JzKVxuICAgICAgICAgICAgICA/IG9wdGlvbnMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgb3B0aW9uID0+IGZpbHRlci5vcGVyYXRvcnMuaW5jbHVkZXMob3B0aW9uLnZhbHVlKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgOiBvcHRpb25zLFxuICAgICAgICAgICAgY2xlYXJhYmxlOiB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICA6IG51bGwsXG4gICAgICB0ZXh0OiB7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgd2lkdGg6IGZpbHRlci5vcGVyYXRvcnMgPyAnMy81JyA6ICdmaWxsJyxcbiAgICAgICAgY2xlYXJhYmxlOiB0cnVlXG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gICdkYXRlLXJhbmdlJygpIHtcbiAgICBjb25zdCBkYXRldGltZSA9IHtcbiAgICAgIHR5cGU6ICdkYXRldGltZScsXG4gICAgICB3aWR0aDogJzEvMicsXG4gICAgICBmb3JtYXRzOiB7XG4gICAgICAgIC8vIFVzZSBzaG9ydGVyIGRhdGUgZm9ybWF0IGluIGRhdGUtcmFuZ2UgZmlsdGVyczpcbiAgICAgICAgZGF0ZToge1xuICAgICAgICAgIGRheTogJzItZGlnaXQnLFxuICAgICAgICAgIG1vbnRoOiAnMi1kaWdpdCcsXG4gICAgICAgICAgeWVhcjogJ251bWVyaWMnXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjbGVhcmFibGU6IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIGZyb206IGRhdGV0aW1lLFxuICAgICAgdG86IGRhdGV0aW1lXG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVGaWx0ZXJzUGFuZWwoYXBpLCBmaWx0ZXJzLCBkYXRhUGF0aCwgcXVlcnkpIHtcbiAgY29uc3QgeyBzdGlja3ksIC4uLmZpbHRlclNjaGVtYXMgfSA9IGZpbHRlcnNcbiAgY29uc3QgcGFuZWwgPSB7XG4gICAgdHlwZTogJ3BhbmVsJyxcbiAgICBsYWJlbDogJ0ZpbHRlcnMnLFxuICAgIG5hbWU6ICckZmlsdGVycycsXG4gICAgLy8gT3ZlcnJpZGUgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICBkaXNhYmxlZDogZmFsc2UsXG4gICAgc3RpY2t5LFxuXG4gICAgLy8gTk9URTogT24gcGFuZWxzLCB0aGUgZGF0YSgpIGNhbGxiYWNrIGRvZXMgc29tZXRoaW5nIGVsc2UgdGhhbiBvbiBub3JtYWxcbiAgICAvLyBzY2hlbWE6IEl0IHByb2R1Y2VzIHRoZSBgZGF0YWAgcHJvcGVydHkgdG8gYmUgcGFzc2VkIHRvIHRoZSBwYW5lbCdzXG4gICAgLy8gc2NoZW1hLCBub3QgdGhlIGRhdGEgdG8gYmUgdXNlZCBmb3IgdGhlIHBhbmVsIGNvbXBvbmVudCBkaXJlY3RseS5cbiAgICBkYXRhKCkge1xuICAgICAgcmV0dXJuIHBhcnNlRmlsdGVyc0RhdGEoXG4gICAgICAgIHBhbmVsLFxuICAgICAgICBxdWVyeS52YWx1ZVxuICAgICAgKVxuICAgIH0sXG5cbiAgICBjb21wb25lbnRzOiBjcmVhdGVGaWx0ZXJzQ29tcG9uZW50cyhmaWx0ZXJTY2hlbWFzKSxcbiAgICBidXR0b25zOiBjcmVhdGVGaWx0ZXJzQnV0dG9ucyhmYWxzZSksXG4gICAgcGFuZWxCdXR0b25zOiBjcmVhdGVGaWx0ZXJzQnV0dG9ucyh0cnVlKSxcblxuICAgIGV2ZW50czoge1xuICAgICAgY2hhbmdlKCkge1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVycygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGNvbXB1dGVkOiB7XG4gICAgICBmaWx0ZXJzKCkge1xuICAgICAgICByZXR1cm4gZm9ybWF0RmlsdGVyc0RhdGEodGhpcy5zY2hlbWEsIHRoaXMuZGF0YSlcbiAgICAgIH0sXG5cbiAgICAgIGhhc0ZpbHRlcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZpbHRlcnMubGVuZ3RoID4gMFxuICAgICAgfVxuICAgIH0sXG5cbiAgICBtZXRob2RzOiB7XG4gICAgICBhcHBseUZpbHRlcnMoKSB7XG4gICAgICAgIHF1ZXJ5LnZhbHVlID0ge1xuICAgICAgICAgIC4uLnF1ZXJ5LnZhbHVlLFxuICAgICAgICAgIGZpbHRlcjogdGhpcy5maWx0ZXJzLFxuICAgICAgICAgIC8vIENsZWFyIHBhZ2luYXRpb24gd2hlbiBhcHBseWluZyBvciBjbGVhcmluZyBmaWx0ZXJzOlxuICAgICAgICAgIHBhZ2U6IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICBjbGVhckZpbHRlcnMoKSB7XG4gICAgICAgIHRoaXMucmVzZXREYXRhKClcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcnMoKVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMoYXBpLCBwYW5lbClcbiAgcmV0dXJuIHBhbmVsXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUZpbHRlcnNCdXR0b25zKHNtYWxsKSB7XG4gIHJldHVybiB7XG4gICAgY2xlYXI6IHtcbiAgICAgIHR5cGU6ICdidXR0b24nLFxuICAgICAgdGV4dDogc21hbGwgPyBudWxsIDogJ0NsZWFyJyxcbiAgICAgIGRpc2FibGVkOiAoeyBzY2hlbWFDb21wb25lbnQgfSkgPT4gIXNjaGVtYUNvbXBvbmVudC5oYXNGaWx0ZXJzLFxuICAgICAgZXZlbnRzOiB7XG4gICAgICAgIGNsaWNrKHsgc2NoZW1hQ29tcG9uZW50IH0pIHtcbiAgICAgICAgICAvLyBTaW5jZSBwYW5lbCBidXR0b25zIGFyZSBvdXRzaWRlIG9mIHRoZSBzY2hlbWEsIHdlIG5lZWQgdG8gdXNlIHRoZVxuICAgICAgICAgIC8vIHNjaGVtYSBjb21wb25lbnQgcmVjZWl2ZWQgZnJvbSB0aGUgaW5pdGlhbGl6ZSBldmVudCBiZWxvdzpcbiAgICAgICAgICBzY2hlbWFDb21wb25lbnQuY2xlYXJGaWx0ZXJzKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBzdWJtaXQ6IHtcbiAgICAgIHR5cGU6ICdzdWJtaXQnLFxuICAgICAgdGV4dDogc21hbGwgPyBudWxsIDogJ0ZpbHRlcicsXG4gICAgICB2aXNpYmxlOiAhc21hbGwsXG4gICAgICBldmVudHM6IHtcbiAgICAgICAgY2xpY2soeyBzY2hlbWFDb21wb25lbnQgfSkge1xuICAgICAgICAgIHNjaGVtYUNvbXBvbmVudC5hcHBseUZpbHRlcnMoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldERhdGFOYW1lKGZpbHRlck5hbWUpIHtcbiAgLy8gUHJlZml4IGZpbHRlciBkYXRhIGtleXMgd2l0aCAnJCcgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggb3RoZXIgZGF0YSBrZXlzOlxuICByZXR1cm4gYCQke2ZpbHRlck5hbWV9YFxufVxuXG5mdW5jdGlvbiBnZXRGaWx0ZXJOYW1lKGRhdGFOYW1lKSB7XG4gIHJldHVybiBkYXRhTmFtZS5zdGFydHNXaXRoKCckJykgPyBkYXRhTmFtZS5zbGljZSgxKSA6IG51bGxcbn1cblxuZnVuY3Rpb24gY3JlYXRlRmlsdGVyc0NvbXBvbmVudHMoZmlsdGVycykge1xuICBjb25zdCBjb21wcyA9IHt9XG4gIGZvciAoY29uc3QgZmlsdGVyIG9mIE9iamVjdC52YWx1ZXMoZ2V0TmFtZWRTY2hlbWFzKGZpbHRlcnMpIHx8IHt9KSkge1xuICAgIC8vIFN1cHBvcnQgYm90aCBjdXN0b20gZm9ybXMgYW5kIGRlZmF1bHQgZmlsdGVyIGNvbXBvbmVudHMsIHRocm91Z2ggdGhlXG4gICAgLy8gYGZpbHRlckNvbXBvbmVudHNgIHJlZ2lzdHJ5LiBFdmVuIGZvciBkZWZhdWx0IGZpbHRlcnMsIHN0aWxsIHVzZSB0aGVcbiAgICAvLyBwcm9wZXJ0aWVzIGluIGBmaWx0ZXJgIGFzIHRoZSBiYXNlIGZvciBgZm9ybWAsIHNvIHRoaW5ncyBsaWtlIGBsYWJlbGBcbiAgICAvLyBjYW4gYmUgY2hhbmdlZCBvbiB0aGUgcmVzdWx0aW5nIGZvcm0uXG4gICAgY29uc3QgeyBmaWx0ZXI6IHR5cGUsIHdpZHRoLCAuLi5mb3JtIH0gPSBmaWx0ZXJcbiAgICBjb25zdCBjb21wb25lbnRzID0gdHlwZVxuICAgICAgPyBmaWx0ZXJDb21wb25lbnRzW3R5cGVdPy4oZmlsdGVyKVxuICAgICAgOiBmaWx0ZXIuY29tcG9uZW50c1xuICAgIGlmIChjb21wb25lbnRzKSB7XG4gICAgICBmb3JtLnR5cGUgPSAnZm9ybSdcbiAgICAgIGZvcm0uY29tcG9uZW50cyA9IHt9XG4gICAgICAvLyBDb252ZXJ0IGxhYmVscyB0byBwbGFjZWhvbGRlcnM6XG4gICAgICBmb3IgKGNvbnN0IFtrZXksIGNvbXBvbmVudF0gb2YgT2JqZWN0LmVudHJpZXMoY29tcG9uZW50cykpIHtcbiAgICAgICAgaWYgKGNvbXBvbmVudCkge1xuICAgICAgICAgIGNvbnN0IGxhYmVsID0gY29tcG9uZW50LmxhYmVsIHx8IGxhYmVsaXplKGNvbXBvbmVudC5uYW1lIHx8IGtleSlcbiAgICAgICAgICBmb3JtLmNvbXBvbmVudHNba2V5XSA9IHtcbiAgICAgICAgICAgIC4uLmNvbXBvbmVudCxcbiAgICAgICAgICAgIGxhYmVsOiBmYWxzZSxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBsYWJlbFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY29tcHNbZ2V0RGF0YU5hbWUoZmlsdGVyLm5hbWUpXSA9IHtcbiAgICAgICAgbGFiZWw6IGZvcm0ubGFiZWwgPz8gbGFiZWxpemUoZmlsdGVyLm5hbWUpLFxuICAgICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGRlZmF1bHQ6ICgpID0+ICh7fSksXG4gICAgICAgIGZvcm0sXG4gICAgICAgIGlubGluZWQ6IHRydWVcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBmaWx0ZXIgJyR7ZmlsdGVyLm5hbWV9JzogVW5rbm93biBmaWx0ZXIgdHlwZSAnJHt0eXBlfScuYFxuICAgICAgKVxuICAgIH1cbiAgfVxuICByZXR1cm4gY29tcHNcbn1cblxuZnVuY3Rpb24gZ2V0Q29tcG9uZW50c0ZvckZpbHRlcihzY2hlbWEsIGRhdGFOYW1lKSB7XG4gIGNvbnN0IGNvbXBvbmVudCA9IHNjaGVtYS5jb21wb25lbnRzW2RhdGFOYW1lXVxuICByZXR1cm4gY29tcG9uZW50Py5mb3JtPy5jb21wb25lbnRzXG59XG5cbmZ1bmN0aW9uIGZvcm1hdEZpbHRlcnNEYXRhKHNjaGVtYSwgZGF0YSkge1xuICBjb25zdCBmaWx0ZXJzID0gW11cbiAgZm9yIChjb25zdCBkYXRhTmFtZSBpbiBkYXRhKSB7XG4gICAgY29uc3QgZW50cnkgPSBkYXRhW2RhdGFOYW1lXVxuICAgIGlmIChlbnRyeSkge1xuICAgICAgLy8gTWFwIGNvbXBvbmVudHMgc2VxdWVuY2UgdG8gYXJndW1lbnRzOlxuICAgICAgY29uc3QgYXJncyA9IE9iamVjdC5rZXlzKFxuICAgICAgICBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgZGF0YU5hbWUpXG4gICAgICApLm1hcChcbiAgICAgICAga2V5ID0+IGVudHJ5W2tleV0gPz8gbnVsbFxuICAgICAgKVxuICAgICAgLy8gT25seSBhcHBseSBmaWx0ZXIgaWYgdGhlcmUgYXJlIHNvbWUgYXJndW1lbnRzIHRoYXQgYXJlbid0IG51bGw6XG4gICAgICBpZiAoYXJncy5zb21lKHZhbHVlID0+IHZhbHVlICE9PSBudWxsKSkge1xuICAgICAgICBmaWx0ZXJzLnB1c2goXG4gICAgICAgICAgYCR7XG4gICAgICAgICAgICBnZXRGaWx0ZXJOYW1lKGRhdGFOYW1lKVxuICAgICAgICAgIH06JHtcbiAgICAgICAgICAgIGFyZ3MubWFwKEpTT04uc3RyaW5naWZ5KS5qb2luKCcsJylcbiAgICAgICAgICB9YFxuICAgICAgICApXG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBmaWx0ZXJzXG59XG5cbmZ1bmN0aW9uIHBhcnNlRmlsdGVyc0RhdGEoc2NoZW1hLCBxdWVyeSkge1xuICBjb25zdCBmaWx0ZXJzID0ge31cbiAgLy8gU2FtZSBhcyBAZGl0b2pzL3NlcnZlcidzIFF1ZXJ5UGFyYW1ldGVycy5maWx0ZXI6IFRyYW5zbGF0ZSB0aGUgc3RyaW5nIGRhdGFcbiAgLy8gZnJvbSAkcm91dGUucXVlcnkgYmFjayB0byBwYXJhbSBsaXN0cyBwZXIgZmlsdGVyOlxuICBpZiAocXVlcnkpIHtcbiAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBhc0FycmF5KHF1ZXJ5LmZpbHRlcikpIHtcbiAgICAgIGNvbnN0IFssIGZpbHRlck5hbWUsIGpzb25dID0gZmlsdGVyLm1hdGNoKC9eKFxcdyspOiguKikkLylcbiAgICAgIHRyeSB7XG4gICAgICAgIGZpbHRlcnNbZmlsdGVyTmFtZV0gPSBhc0FycmF5KEpTT04ucGFyc2UoYFske2pzb259XWApKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHt9XG4gICAgfVxuICB9XG4gIGNvbnN0IGZpbHRlcnNEYXRhID0ge31cbiAgZm9yIChjb25zdCBkYXRhTmFtZSBpbiBzY2hlbWEuY29tcG9uZW50cykge1xuICAgIGNvbnN0IGRhdGEgPSB7fVxuICAgIC8vIElmIHdlIGhhdmUgcmV0cmlldmVkIHBhcmFtcyBmcm9tIHRoZSBxdWVyeSwgZmV0Y2ggdGhlIGFzc29jaWF0ZWRcbiAgICAvLyBmb3JtIGNvbXBvbmVudHMgc28gd2UgY2FuIG1hcCB0aGUgdmFsdWVzIGJhY2sgdG8gb2JqZWN0IGtleXM6XG4gICAgY29uc3QgYXJncyA9IGZpbHRlcnNbZ2V0RmlsdGVyTmFtZShkYXRhTmFtZSldXG4gICAgaWYgKGFyZ3MpIHtcbiAgICAgIGNvbnN0IGNvbXBvbmVudHMgPSBnZXRDb21wb25lbnRzRm9yRmlsdGVyKHNjaGVtYSwgZGF0YU5hbWUpXG4gICAgICBpZiAoY29tcG9uZW50cykge1xuICAgICAgICBsZXQgaW5kZXggPSAwXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGNvbXBvbmVudHMpIHtcbiAgICAgICAgICBkYXRhW2tleV0gPSBhcmdzW2luZGV4KytdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgZmlsdGVyc0RhdGFbZGF0YU5hbWVdID0gZGF0YVxuICB9XG4gIHJldHVybiBmaWx0ZXJzRGF0YVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLWxpc3QoXG4gIHYtaWY9XCJpc1JlYWR5XCJcbiAgOmlkPVwiZGF0YVBhdGhcIlxuKVxuICAuZGl0by1saXN0X19oZWFkZXIoXG4gICAgdi1pZj1cInNjb3BlcyB8fCBoYXNQYWdpbmF0aW9uXCJcbiAgKVxuICAgIERpdG9TY29wZXMoXG4gICAgICB2LWlmPVwic2NvcGVzXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICAgIClcbiAgICAvLy0gV2hlbiB0aGVyZSdzIG9ubHkgcGFnaW5hdGlvbiB3aXRob3V0IHNjb3Blcywgd2UgbmVlZCBhIGdvb2Qgb2wnIHNwYWNlclxuICAgIC8vLSBkaXYsIGZvciB0aGUgbGF5b3V0IG5vdCB0byBicmVhay4uLlxuICAgIC5kaXRvLXNwYWNlcihcbiAgICAgIHYtZWxzZS1pZj1cImhhc1BhZ2luYXRpb25cIlxuICAgIClcbiAgICBEaXRvUGFnaW5hdGlvbihcbiAgICAgIHYtaWY9XCJoYXNQYWdpbmF0aW9uXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpsaW1pdD1cInBhZ2luYXRlXCJcbiAgICAgIDp0b3RhbD1cInRvdGFsIHx8IDBcIlxuICAgIClcbiAgdGFibGUuZGl0by10YWJsZShcbiAgICA6Y2xhc3M9YHtcbiAgICAgICdkaXRvLXRhYmxlLXNlcGFyYXRvcnMnOiBpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1sYXJnZXItcGFkZGluZyc6IGhhc0VkaXRCdXR0b25zICYmICFpc0lubGluZWQsXG4gICAgICAnZGl0by10YWJsZS1hbHRlcm5hdGUtY29sb3JzJzogIWlzSW5saW5lZCxcbiAgICAgICdkaXRvLXRhYmxlLWV2ZW4tY291bnQnOiBoYXNFdmVuQ291bnRcbiAgICB9YFxuICApXG4gICAgRGl0b1RhYmxlSGVhZChcbiAgICAgIHYtaWY9XCJjb2x1bW5zXCJcbiAgICAgIDpxdWVyeT1cInF1ZXJ5XCJcbiAgICAgIDpjb2x1bW5zPVwiY29sdW1uc1wiXG4gICAgICA6aGFzRWRpdEJ1dHRvbnM9XCJoYXNFZGl0QnV0dG9uc1wiXG4gICAgKVxuICAgIERpdG9EcmFnZ2FibGUoXG4gICAgICB0YWc9XCJ0Ym9keVwiXG4gICAgICA6bW9kZWxWYWx1ZT1cInVwZGF0ZU9yZGVyKHNvdXJjZVNjaGVtYSwgbGlzdERhdGEsIHBhZ2luYXRpb25SYW5nZSlcIlxuICAgICAgOm9wdGlvbnM9XCJnZXREcmFnZ2FibGVPcHRpb25zKClcIlxuICAgICAgOmRyYWdnYWJsZT1cImRyYWdnYWJsZVwiXG4gICAgICBAdXBkYXRlOm1vZGVsVmFsdWU9XCJ2YWx1ZSA9PiAobGlzdERhdGEgPSB2YWx1ZSlcIlxuICAgIClcbiAgICAgIHRyKFxuICAgICAgICB2LWZvcj1cIihpdGVtLCBpbmRleCkgaW4gbGlzdERhdGFcIlxuICAgICAgICA6aWQ9XCJnZXREYXRhUGF0aChpbmRleClcIlxuICAgICAgICA6a2V5PVwiZ2V0SXRlbVVpZChzY2hlbWEsIGl0ZW0pXCJcbiAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1pZj1cImNvbHVtbnNcIlxuICAgICAgICApXG4gICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICB2LWZvcj1cImNvbHVtbiBpbiBjb2x1bW5zXCJcbiAgICAgICAgICApXG4gICAgICAgICAgICBEaXRvVGFibGVDZWxsKFxuICAgICAgICAgICAgICB2LWlmPVwic2hvdWxkUmVuZGVyU2NoZW1hKGNvbHVtbilcIlxuICAgICAgICAgICAgICA6a2V5PVwiY29sdW1uLm5hbWVcIlxuICAgICAgICAgICAgICA6Y2xhc3M9XCJnZXRDZWxsQ2xhc3MoY29sdW1uKVwiXG4gICAgICAgICAgICAgIDpjZWxsPVwiY29sdW1uXCJcbiAgICAgICAgICAgICAgOnNjaGVtYT1cInNjaGVtYVwiXG4gICAgICAgICAgICAgIDpkYXRhUGF0aD1cImdldERhdGFQYXRoKGluZGV4KVwiXG4gICAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICAgIDptZXRhPVwibmVzdGVkTWV0YVwiXG4gICAgICAgICAgICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgdi1lbHNlXG4gICAgICAgIClcbiAgICAgICAgICB0ZFxuICAgICAgICAgICAgRGl0b1NjaGVtYUlubGluZWQoXG4gICAgICAgICAgICAgIHYtaWY9XCJpc0lubGluZWRcIlxuICAgICAgICAgICAgICA6bGFiZWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBpdGVtLCB7IGluZGV4LCBhc09iamVjdDogdHJ1ZSB9KVwiXG4gICAgICAgICAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm1ldGE9XCJuZXN0ZWRNZXRhXCJcbiAgICAgICAgICAgICAgOnN0b3JlPVwiZ2V0SXRlbVN0b3JlKHNjaGVtYSwgaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgICAgOmNvbGxhcHNlZD1cImNvbGxhcHNlZFwiXG4gICAgICAgICAgICAgIDpjb2xsYXBzaWJsZT1cImNvbGxhcHNpYmxlXCJcbiAgICAgICAgICAgICAgOmRlbGV0YWJsZT1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgICAgICAgICAgIDplZGl0UGF0aD1cImdldEVkaXRQYXRoKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBjb21wb25lbnQoXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgICAgICAgICA6aXM9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgICAgOmRhdGE9XCJpdGVtXCJcbiAgICAgICAgICAgICAgOm5lc3RlZD1cImZhbHNlXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIHNwYW4oXG4gICAgICAgICAgICAgIHYtZWxzZS1pZj1cInJlbmRlclwiXG4gICAgICAgICAgICAgIHYtaHRtbD1cInJlbmRlcihnZXRDb250ZXh0KGl0ZW0sIGluZGV4KSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgc3BhbihcbiAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICAgIHYtaHRtbD1cImdldEl0ZW1MYWJlbChzY2hlbWEsIGl0ZW0sIHsgaW5kZXggfSlcIlxuICAgICAgICAgICAgKVxuICAgICAgICB0ZC5kaXRvLWNlbGwtZWRpdC1idXR0b25zKFxuICAgICAgICAgIHYtaWY9XCJoYXNDZWxsRWRpdEJ1dHRvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgRGl0b0VkaXRCdXR0b25zKFxuICAgICAgICAgICAgOnNjaGVtYT1cImdldEl0ZW1Gb3JtU2NoZW1hKHNjaGVtYSwgaXRlbSwgY29udGV4dClcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZ2V0RGF0YVBhdGgoaW5kZXgpXCJcbiAgICAgICAgICAgIDpkYXRhPVwiaXRlbVwiXG4gICAgICAgICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwiZ2V0SXRlbVN0b3JlKHNjaGVtYSwgaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgICAgICAgICA6ZGVsZXRhYmxlPVwiZGVsZXRhYmxlXCJcbiAgICAgICAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgICAgICAgICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgICAgICAgICAgOmVkaXRQYXRoPVwiZ2V0RWRpdFBhdGgoaXRlbSwgaW5kZXgpXCJcbiAgICAgICAgICAgIEBkZWxldGU9XCJkZWxldGVJdGVtKGl0ZW0sIGluZGV4KVwiXG4gICAgICAgICAgKVxuICAgIC8vLSBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgaW5zaWRlIHRhYmxlIHdoZW4gbm90IGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICAgIHRmb290KFxuICAgICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmICFzaW5nbGVcIlxuICAgIClcbiAgICAgIHRyXG4gICAgICAgIHRkLmRpdG8tY2VsbC1lZGl0LWJ1dHRvbnMoOmNvbHNwYW49XCJudW1Db2x1bW5zXCIpXG4gICAgICAgICAgRGl0b0VkaXRCdXR0b25zKFxuICAgICAgICAgICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICAgICAgICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgICAgICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgICAgICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgICAgICAgICA6bWV0YT1cIm1ldGFcIlxuICAgICAgICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgICAgICAgIDpjcmVhdGFibGU9XCJjcmVhdGFibGVcIlxuICAgICAgICAgICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgICAgICAgICApXG4gIC8vLSBSZW5kZXIgY3JlYXRlIGJ1dHRvbnMgb3V0c2lkZSB0YWJsZSB3aGVuIGluIGEgc2luZ2xlIGNvbXBvbmVudCB2aWV3OlxuICBEaXRvRWRpdEJ1dHRvbnMuZGl0by1idXR0b25zLWxhcmdlLmRpdG8tYnV0dG9ucy1tYWluLmRpdG8tYnV0dG9ucy1zdGlja3koXG4gICAgdi1pZj1cImhhc0xpc3RCdXR0b25zICYmIHNpbmdsZVwiXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJsaXN0RGF0YVwiXG4gICAgOm1ldGE9XCJtZXRhXCJcbiAgICA6c3RvcmU9XCJzdG9yZVwiXG4gICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICA6Y3JlYXRhYmxlPVwiY3JlYXRhYmxlXCJcbiAgICA6Y3JlYXRlUGF0aD1cInBhdGhcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IERpdG9Db250ZXh0IGZyb20gJy4uL0RpdG9Db250ZXh0LmpzJ1xuaW1wb3J0IFNvdXJjZU1peGluIGZyb20gJy4uL21peGlucy9Tb3VyY2VNaXhpbi5qcydcbmltcG9ydCBTb3J0YWJsZU1peGluIGZyb20gJy4uL21peGlucy9Tb3J0YWJsZU1peGluLmpzJ1xuaW1wb3J0IHtcbiAgZ2V0Vmlld0VkaXRQYXRoLFxuICByZXNvbHZlU2NoZW1hQ29tcG9uZW50LFxuICByZXNvbHZlU2NoZW1hQ29tcG9uZW50c1xufSBmcm9tICcuLi91dGlscy9zY2hlbWEuanMnXG5pbXBvcnQgeyBjcmVhdGVGaWx0ZXJzUGFuZWwgfSBmcm9tICcuLi91dGlscy9maWx0ZXIuanMnXG5pbXBvcnQgeyBhcHBlbmREYXRhUGF0aCB9IGZyb20gJy4uL3V0aWxzL2RhdGEuanMnXG5pbXBvcnQgeyBwaWNrQnksIGVxdWFscywgaHlwaGVuYXRlIH0gZnJvbSAnQGRpdG9qcy91dGlscydcbmltcG9ydCB7IGNvbXB1dGVkIH0gZnJvbSAndnVlJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xpc3QnLCB7XG4gIG1peGluczogW1NvdXJjZU1peGluLCBTb3J0YWJsZU1peGluXSxcblxuICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAvLyBObyBuZWVkIGZvciB0cmFuc2Zvcm1hdGlvbiBoZXJlLiBTZWUgVHlwZVRyZWVMaXN0IGZvciBkZXRhaWxzLlxuICAgIHJldHVybiB0eXBlXG4gIH0sXG5cbiAgZ2V0UGFuZWxTY2hlbWEoYXBpLCBzY2hlbWEsIGRhdGFQYXRoLCBjb21wb25lbnQpIHtcbiAgICBjb25zdCB7IGZpbHRlcnMgfSA9IHNjaGVtYVxuICAgIC8vIFNlZSBpZiB0aGlzIGxpc3QgY29tcG9uZW50IHdhbnRzIHRvIGRpc3BsYXkgYSBmaWx0ZXIgcGFuZWwsIGFuZCBpZiBzbyxcbiAgICAvLyBjcmVhdGUgdGhlIHBhbmVsIHNjaGVtYSBmb3IgaXQgdGhyb3VnaCBgZ2V0RmlsdGVyc1BhbmVsKClgLlxuICAgIGlmIChmaWx0ZXJzKSB7XG4gICAgICByZXR1cm4gY3JlYXRlRmlsdGVyc1BhbmVsKFxuICAgICAgICBhcGksXG4gICAgICAgIGZpbHRlcnMsXG4gICAgICAgIGRhdGFQYXRoLFxuICAgICAgICAvLyBQYXNzIGEgY29tcHV0ZWQgdmFsdWUgdG8gZ2V0IC8gc2V0IHRoZSBxdWVyeSwgc2VlIGdldEZpbHRlcnNQYW5lbCgpXG4gICAgICAgIGNvbXB1dGVkKHtcbiAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tcG9uZW50LnF1ZXJ5XG4gICAgICAgICAgfSxcblxuICAgICAgICAgIHNldChxdWVyeSkge1xuICAgICAgICAgICAgLy8gRmlsdGVyIG91dCB1bmRlZmluZWQgdmFsdWVzIGZvciBjb21wYXJpbmcgd2l0aCBlcXVhbHMoKVxuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gb2JqID0+IHBpY2tCeShvYmosIHZhbHVlID0+IHZhbHVlICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBpZiAoIWVxdWFscyhmaWx0ZXIocXVlcnkpLCBmaWx0ZXIoY29tcG9uZW50LnF1ZXJ5KSkpIHtcbiAgICAgICAgICAgICAgY29tcG9uZW50LnF1ZXJ5ID0gcXVlcnlcbiAgICAgICAgICAgICAgY29tcG9uZW50LmxvYWREYXRhKGZhbHNlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBoYXNQYWdpbmF0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMucGFnaW5hdGUgJiYgdGhpcy50b3RhbCA+IHRoaXMucGFnaW5hdGVcbiAgICB9LFxuXG4gICAgaGFzTGlzdEJ1dHRvbnMoKSB7XG4gICAgICByZXR1cm4gISEodGhpcy5idXR0b25TY2hlbWFzIHx8IHRoaXMuY3JlYXRhYmxlKVxuICAgIH0sXG5cbiAgICBoYXNFZGl0QnV0dG9ucygpIHtcbiAgICAgIGNvbnN0IHsgbGlzdERhdGEgfSA9IHRoaXNcbiAgICAgIHJldHVybiAoXG4gICAgICAgIGxpc3REYXRhLmxlbmd0aCA+IDAgJiYgKFxuICAgICAgICAgIHRoaXMuZWRpdGFibGUgfHxcbiAgICAgICAgICB0aGlzLmRlbGV0YWJsZSB8fFxuICAgICAgICAgIHRoaXMuZHJhZ2dhYmxlXG4gICAgICAgIClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaGFzQ2VsbEVkaXRCdXR0b25zKCkge1xuICAgICAgcmV0dXJuICF0aGlzLmlzSW5saW5lZCAmJiB0aGlzLmhhc0VkaXRCdXR0b25zXG4gICAgfSxcblxuICAgIGhhc0V2ZW5Db3VudCgpIHtcbiAgICAgIHJldHVybiAhKHRoaXMubGlzdERhdGEubGVuZ3RoICUgMilcbiAgICB9LFxuXG4gICAgbnVtQ29sdW1ucygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgICh0aGlzLmNvbHVtbnMgPyBPYmplY3Qua2V5cyh0aGlzLmNvbHVtbnMpLmxlbmd0aCA6IDEpICtcbiAgICAgICAgKHRoaXMuaGFzQ2VsbEVkaXRCdXR0b25zID8gMSA6IDApXG4gICAgICApXG4gICAgfVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXREYXRhUGF0aChpbmRleCkge1xuICAgICAgcmV0dXJuIGFwcGVuZERhdGFQYXRoKHRoaXMuZGF0YVBhdGgsIGluZGV4KVxuICAgIH0sXG5cbiAgICBnZXRFZGl0UGF0aChpdGVtLCBpbmRleCkge1xuICAgICAgaWYgKHRoaXMuZWRpdGFibGUpIHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLmdldEl0ZW1JZCh0aGlzLnNjaGVtYSwgaXRlbSwgaW5kZXgpXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgZ2V0Vmlld0VkaXRQYXRoKHRoaXMuc2NoZW1hLCBpZCwgdGhpcy5jb250ZXh0KSB8fFxuICAgICAgICAgIGAke3RoaXMucGF0aH0vJHtpZH1gXG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHJldHVybiBudWxsXG4gICAgfSxcblxuICAgIGdldENlbGxDbGFzcyhjb2x1bW4pIHtcbiAgICAgIHJldHVybiBgZGl0by1jZWxsLSR7aHlwaGVuYXRlKGNvbHVtbi5uYW1lKX1gXG4gICAgfSxcblxuICAgIGdldENvbnRleHQoaXRlbSwgaW5kZXgpIHtcbiAgICAgIHJldHVybiBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICBkYXRhOiBpdGVtLFxuICAgICAgICB2YWx1ZTogaXRlbSxcbiAgICAgICAgaW5kZXgsXG4gICAgICAgIGRhdGFQYXRoOiB0aGlzLmdldERhdGFQYXRoKGluZGV4KVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgb25GaWx0ZXJFcnJvcnMoZXJyb3JzKSB7XG4gICAgICBjb25zdCBmaWx0ZXJzRGF0YVBhdGggPSBhcHBlbmREYXRhUGF0aCh0aGlzLmRhdGFQYXRoLCAnJGZpbHRlcnMnKVxuICAgICAgY29uc3QgcGFuZWwgPSB0aGlzLnNjaGVtYUNvbXBvbmVudC5nZXRQYW5lbEJ5RGF0YVBhdGgoZmlsdGVyc0RhdGFQYXRoKVxuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVsLnNob3dWYWxpZGF0aW9uRXJyb3JzKGVycm9ycywgdHJ1ZSlcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgYXN5bmMgcHJvY2Vzc1NjaGVtYShcbiAgICBhcGksXG4gICAgc2NoZW1hLFxuICAgIG5hbWUsXG4gICAgcm91dGVzLFxuICAgIGxldmVsLFxuICAgIG5lc3RlZCA9IGZhbHNlLFxuICAgIGZsYXR0ZW4gPSBmYWxzZSxcbiAgICBwcm9jZXNzID0gbnVsbFxuICApIHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICByZXNvbHZlU2NoZW1hQ29tcG9uZW50KHNjaGVtYSksXG4gICAgICByZXNvbHZlU2NoZW1hQ29tcG9uZW50cyhzY2hlbWEuY29sdW1ucyksXG4gICAgICBTb3VyY2VNaXhpbi5wcm9jZXNzU2NoZW1hKFxuICAgICAgICBhcGksXG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgcm91dGVzLFxuICAgICAgICBsZXZlbCxcbiAgICAgICAgbmVzdGVkLFxuICAgICAgICBmbGF0dGVuLFxuICAgICAgICBwcm9jZXNzXG4gICAgICApXG4gICAgXSlcbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLWxpc3Qge1xuICAkc2VsZjogJjtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgJl9faGVhZGVyIHtcbiAgICBkaXNwbGF5OiBmbGV4O1xuICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjtcbiAgICBwYWRkaW5nLWJvdHRvbTogJGNvbnRlbnQtcGFkZGluZy1oYWxmO1xuICAgIEBpbmNsdWRlIHVzZXItc2VsZWN0KG5vbmUpO1xuXG4gICAgJjplbXB0eSB7XG4gICAgICBkaXNwbGF5OiBub25lO1xuICAgIH1cblxuICAgIC5kaXRvLXNjb3BlcyxcbiAgICAuZGl0by1wYWdpbmF0aW9uIHtcbiAgICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgICBmbGV4OiAwIDEgYXV0bztcbiAgICAgIG1pbi13aWR0aDogMDtcbiAgICB9XG4gIH1cblxuICAmLmRpdG8tc2luZ2xlIHtcbiAgICAvLyBTbyB0aGF0IGxpc3QgYnV0dG9ucyBjYW4gYmUgc3RpY2t5IHRvIHRoZSBib3R0b206XG4gICAgZGlzcGxheTogZ3JpZDtcbiAgICBncmlkLXRlbXBsYXRlLXJvd3M6IG1pbi1jb250ZW50O1xuICAgIGhlaWdodDogMTAwJTtcblxuICAgIC8vIE1ha2Ugc2luZ2xlIGxpc3QgaGVhZGVyLCBuYXZpZ2F0aW9uIGFuZCBidXR0b25zIHN0aWNreSB0byB0aGUgdG9wIGFuZFxuICAgIC8vIGJvdHRvbTpcbiAgICAjeyRzZWxmfV9faGVhZGVyIHtcbiAgICAgIHBvc2l0aW9uOiBzdGlja3k7XG4gICAgICB0b3A6IDA7XG4gICAgICBtYXJnaW4tdG9wOiAtJGNvbnRlbnQtcGFkZGluZztcbiAgICAgIHBhZGRpbmctdG9wOiAkY29udGVudC1wYWRkaW5nO1xuICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgIHotaW5kZXg6IDE7XG5cbiAgICAgICsgLmRpdG8tdGFibGUge1xuICAgICAgICAuZGl0by10YWJsZS1oZWFkIHtcbiAgICAgICAgICBwb3NpdGlvbjogc3RpY2t5O1xuICAgICAgICAgIHRvcDogY2FsYygkaW5wdXQtaGVpZ2h0ICsgJGNvbnRlbnQtcGFkZGluZyArICRjb250ZW50LXBhZGRpbmctaGFsZik7XG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbnRlbnQtY29sb3ItYmFja2dyb3VuZDtcbiAgICAgICAgICB6LWluZGV4OiAxO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbkRpdG9MYWJlbC5kaXRvLWxhYmVsLWNvbXBvbmVudChcbiAgOmxhYmVsPVwidmFsdWVcIlxuICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4pXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ2xhYmVsJywge1xuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlXG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuLmRpdG8tbGFiZWwtY29tcG9uZW50IHtcbiAgZGlzcGxheTogZmxleDtcbiAgaGVpZ2h0OiAyZW07XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLW1hcmt1cCg6aWQ9XCJkYXRhUGF0aFwiKVxuICAuZGl0by1idXR0b25zLmRpdG8tYnV0dG9ucy10b29sYmFyKFxuICAgIHYtaWY9XCJncm91cGVkQnV0dG9ucy5sZW5ndGggPiAwXCJcbiAgKVxuICAgIC5kaXRvLWJ1dHRvbi1ncm91cChcbiAgICAgIHYtZm9yPVwiYnV0dG9ucyBpbiBncm91cGVkQnV0dG9uc1wiXG4gICAgKVxuICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uKFxuICAgICAgICB2LWZvcj1cInsgbmFtZSwgaWNvbiwgaXNBY3RpdmUsIG9uQ2xpY2sgfSBpbiBidXR0b25zXCJcbiAgICAgICAgOmtleT1cIm5hbWVcIlxuICAgICAgICA6Y2xhc3M9XCJ7ICdkaXRvLWFjdGl2ZSc6IGlzQWN0aXZlIH1cIlxuICAgICAgICBAY2xpY2s9XCJvbkNsaWNrXCJcbiAgICAgIClcbiAgICAgICAgSWNvbig6bmFtZT1cImljb25cIilcbiAgRWRpdG9yQ29udGVudC5kaXRvLW1hcmt1cC1lZGl0b3IoXG4gICAgcmVmPVwiZWRpdG9yXCJcbiAgICA6ZWRpdG9yPVwiZWRpdG9yXCJcbiAgICA6c3R5bGU9XCJzdHlsZXNcIlxuICApXG4gIC5kaXRvLXJlc2l6ZShcbiAgICB2LWlmPVwicmVzaXphYmxlXCJcbiAgICBAbW91c2Vkb3duLnN0b3AucHJldmVudD1cIm9uRHJhZ1Jlc2l6ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRG9tTWl4aW4gZnJvbSAnLi4vbWl4aW5zL0RvbU1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IEVkaXRvciwgRWRpdG9yQ29udGVudCwgTWFyaywgZ2V0TWFya0F0dHJpYnV0ZXMgfSBmcm9tICdAdGlwdGFwL3Z1ZS0zJ1xuLy8gaW1wb3J0IHsgdG9nZ2xlTWFyayB9IGZyb20gJ3RpcHRhcC1jb21tYW5kcydcbi8vIEVzc2VudGlhbHM6XG5pbXBvcnQgeyBEb2N1bWVudCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWRvY3VtZW50J1xuaW1wb3J0IHsgVGV4dCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRleHQnXG4vLyBNYXJrczpcbmltcG9ydCB7IEJvbGQgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1ib2xkJ1xuaW1wb3J0IHsgQ29kZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWNvZGUnXG5pbXBvcnQgeyBJdGFsaWMgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1pdGFsaWMnXG5pbXBvcnQgeyBMaW5rIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tbGluaydcbmltcG9ydCB7IFN0cmlrZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXN0cmlrZSdcbmltcG9ydCB7IFVuZGVybGluZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXVuZGVybGluZSdcbi8vIE5vZGVzOlxuaW1wb3J0IHsgQmxvY2txdW90ZSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWJsb2NrcXVvdGUnXG5pbXBvcnQgeyBDb2RlQmxvY2sgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1jb2RlLWJsb2NrJ1xuaW1wb3J0IHsgSGFyZEJyZWFrIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taGFyZC1icmVhaydcbmltcG9ydCB7IEhlYWRpbmcgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1oZWFkaW5nJ1xuaW1wb3J0IHsgUGFyYWdyYXBoIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tcGFyYWdyYXBoJ1xuaW1wb3J0IHsgSG9yaXpvbnRhbFJ1bGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1ob3Jpem9udGFsLXJ1bGUnXG5pbXBvcnQgeyBPcmRlcmVkTGlzdCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLW9yZGVyZWQtbGlzdCdcbmltcG9ydCB7IEJ1bGxldExpc3QgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi1idWxsZXQtbGlzdCdcbmltcG9ydCB7IExpc3RJdGVtIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tbGlzdC1pdGVtJ1xuLy8gVE9ETzpcbi8vIGltcG9ydCB7IEltYWdlIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24taW1hZ2UnXG4vLyBpbXBvcnQgeyBNZW50aW9uIH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tbWVudGlvbidcbi8vIGltcG9ydCB7IENvZGVCbG9ja0hpZ2hsaWdodCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWNvZGUtYmxvY2staGlnaGxpZ2h0J1xuLy8gaW1wb3J0IHsgVGFibGUgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZSdcbi8vIGltcG9ydCB7IFRhYmxlQ2VsbCB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLWNlbGwnXG4vLyBpbXBvcnQgeyBUYWJsZUhlYWRlciB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhYmxlLWhlYWRlcidcbi8vIGltcG9ydCB7IFRhYmxlTm9kZXMgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YWJsZS1ub2Rlcydcbi8vIGltcG9ydCB7IFRhYmxlUm93IH0gZnJvbSAnQHRpcHRhcC9leHRlbnNpb24tdGFibGUtcm93J1xuLy8gaW1wb3J0IHsgVGFza0xpc3QgfSBmcm9tICdAdGlwdGFwL2V4dGVuc2lvbi10YXNrLWxpc3QnXG4vLyBpbXBvcnQgeyBUYXNrSXRlbSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLXRhc2staXRlbSdcbi8vIFRvb2xzOlxuaW1wb3J0IHsgSGlzdG9yeSB9IGZyb20gJ0B0aXB0YXAvZXh0ZW5zaW9uLWhpc3RvcnknXG5cbmltcG9ydCB7IEljb24gfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcbmltcG9ydCB7IGlzQXJyYXksIGlzT2JqZWN0LCBoeXBoZW5hdGUsIGRlYm91bmNlLCBjYW1lbGl6ZSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcignbWFya3VwJywge1xuICBtaXhpbnM6IFtEb21NaXhpbl0sXG4gIGNvbXBvbmVudHM6IHtcbiAgICBFZGl0b3JDb250ZW50LFxuICAgIEljb25cbiAgfSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICBlZGl0b3I6IG51bGwsXG4gICAgICBoZWlnaHQ6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBsaW5lcygpIHtcbiAgICAgIHJldHVybiB0aGlzLnNjaGVtYS5saW5lcyB8fCAxMFxuICAgIH0sXG5cbiAgICBzdHlsZXMoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBoZWlnaHQ6IHRoaXMuaGVpZ2h0IHx8IGBjYWxjKCR7dGhpcy5saW5lc31lbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSlgXG4gICAgICB9XG4gICAgfSxcblxuICAgIG1hcmtCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbWFya3MnLCB7XG4gICAgICAgIGJvbGQ6IHRydWUsXG4gICAgICAgIGl0YWxpYzogdHJ1ZSxcbiAgICAgICAgdW5kZXJsaW5lOiB0cnVlLFxuICAgICAgICBzdHJpa2U6IHRydWUsXG4gICAgICAgIHNtYWxsOiB0cnVlLFxuICAgICAgICBjb2RlOiB0cnVlLFxuICAgICAgICBsaW5rOiB7XG4gICAgICAgICAgb25DbGljazogZWRpdG9yID0+IHRoaXMub25DbGlja0xpbmsoZWRpdG9yKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBiYXNpY05vZGVCdXR0b25zKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ2V0QnV0dG9ucygnbm9kZXMnLCB7XG4gICAgICAgIHBhcmFncmFwaDoge1xuICAgICAgICAgIGNvbW1hbmQ6ICdzZXRQYXJhZ3JhcGgnXG4gICAgICAgIH0sXG4gICAgICAgIGhlYWRpbmc6IHtcbiAgICAgICAgICBhdHRyaWJ1dGU6ICdsZXZlbCcsXG4gICAgICAgICAgdmFsdWVzOiBbMSwgMiwgMywgNCwgNSwgNl1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgYWR2YW5jZWROb2RlQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ25vZGVzJywge1xuICAgICAgICBidWxsZXRMaXN0OiB0cnVlLFxuICAgICAgICBvcmRlcmVkTGlzdDogdHJ1ZSxcbiAgICAgICAgYmxvY2txdW90ZTogdHJ1ZSxcbiAgICAgICAgY29kZUJsb2NrOiB0cnVlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICB0b29sQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldEJ1dHRvbnMoJ3Rvb2xzJywge1xuICAgICAgICB1bmRvOiB0cnVlLFxuICAgICAgICByZWRvOiB0cnVlXG4gICAgICB9KVxuICAgIH0sXG5cbiAgICBncm91cGVkQnV0dG9ucygpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHRoaXMubWFya0J1dHRvbnMsXG4gICAgICAgIHRoaXMuYmFzaWNOb2RlQnV0dG9ucyxcbiAgICAgICAgdGhpcy5hZHZhbmNlZE5vZGVCdXR0b25zLFxuICAgICAgICB0aGlzLnRvb2xCdXR0b25zXG4gICAgICBdLmZpbHRlcihidXR0b25zID0+IGJ1dHRvbnMubGVuZ3RoID4gMClcbiAgICB9LFxuXG4gICAgcGFyc2VPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgcHJlc2VydmVXaGl0ZXNwYWNlOiB7XG4gICAgICAgICAgJ2NvbGxhcHNlJzogZmFsc2UsXG4gICAgICAgICAgJ3ByZXNlcnZlJzogdHJ1ZSxcbiAgICAgICAgICAncHJlc2VydmUtYWxsJzogJ2Z1bGwnXG4gICAgICAgIH1bdGhpcy53aGl0ZXNwYWNlXVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBlZGl0b3JPcHRpb25zKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZWRpdGFibGU6ICF0aGlzLnJlYWR5b25seSxcbiAgICAgICAgYXV0b0ZvY3VzOiB0aGlzLmF1dG9mb2N1cyxcbiAgICAgICAgZGlzYWJsZUlucHV0UnVsZXM6ICF0aGlzLmVuYWJsZVJ1bGVzLmlucHV0LFxuICAgICAgICBkaXNhYmxlUGFzdGVSdWxlczogIXRoaXMuZW5hYmxlUnVsZXMucGFzdGUsXG4gICAgICAgIHBhcnNlT3B0aW9uczogdGhpcy5wYXJzZU9wdGlvbnNcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVzaXphYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVzaXphYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB3aGl0ZXNwYWNlOiBnZXRTY2hlbWFBY2Nlc3Nvcignd2hpdGVzcGFjZScsIHtcbiAgICAgIHR5cGU6IFN0cmluZyxcbiAgICAgIGRlZmF1bHQ6ICdjb2xsYXBzZSdcbiAgICAgIC8vIFBvc3NpYmxlIHZhbHVlcyBhcmU6ICdjb2xsYXBzZScsICdwcmVzZXJ2ZScsICdwcmVzZXJ2ZS1hbGwnXG4gICAgfSksXG5cbiAgICBlbmFibGVSdWxlczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2VuYWJsZVJ1bGVzJywge1xuICAgICAgdHlwZTogW09iamVjdCwgQm9vbGVhbl0sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChlbmFibGVSdWxlcykge1xuICAgICAgICByZXR1cm4gaXNPYmplY3QoZW5hYmxlUnVsZXMpXG4gICAgICAgICAgPyBlbmFibGVSdWxlc1xuICAgICAgICAgIDoge1xuICAgICAgICAgICAgICBpbnB1dDogISFlbmFibGVSdWxlcyxcbiAgICAgICAgICAgICAgcGFzdGU6ICEhZW5hYmxlUnVsZXNcbiAgICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgcmVhZHlvbmx5OiAndXBkYXRlRWRpdG9yT3B0aW9ucycsXG4gICAgYXV0b2ZvY3VzOiAndXBkYXRlRWRpdG9yT3B0aW9ucycsXG4gICAgZW5hYmxlUnVsZXM6ICd1cGRhdGVFZGl0b3JPcHRpb25zJ1xuICB9LFxuXG4gIGNyZWF0ZWQoKSB7XG4gICAgbGV0IGNoYW5nZWQgPSBmYWxzZVxuICAgIGxldCBpZ25vcmVXYXRjaCA9IGZhbHNlXG5cbiAgICBjb25zdCBvbkNoYW5nZSA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5mb2N1c2VkICYmIGNoYW5nZWQpIHtcbiAgICAgICAgY2hhbmdlZCA9IGZhbHNlXG4gICAgICAgIHRoaXMub25DaGFuZ2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG9uRm9jdXMgPSAoKSA9PiB0aGlzLm9uRm9jdXMoKVxuXG4gICAgY29uc3Qgb25CbHVyID0gKCkgPT4ge1xuICAgICAgdGhpcy5vbkJsdXIoKVxuICAgICAgb25DaGFuZ2UoKVxuICAgIH1cblxuICAgIGNvbnN0IHNldFZhbHVlRGVib3VuY2VkID0gZGVib3VuY2UoZWRpdG9yID0+IHtcbiAgICAgIGlnbm9yZVdhdGNoID0gdHJ1ZVxuICAgICAgdGhpcy52YWx1ZSA9IGVkaXRvci5nZXRIVE1MKClcbiAgICAgIGNoYW5nZWQgPSB0cnVlXG4gICAgICBvbkNoYW5nZSgpXG4gICAgfSwgMTAwKVxuXG4gICAgY29uc3Qgb25VcGRhdGUgPSAoeyBlZGl0b3IgfSkgPT4ge1xuICAgICAgc2V0VmFsdWVEZWJvdW5jZWQoZWRpdG9yKVxuICAgICAgdGhpcy5vbklucHV0KClcbiAgICB9XG5cbiAgICB0aGlzLiR3YXRjaCgndmFsdWUnLCB2YWx1ZSA9PiB7XG4gICAgICBpZiAoaWdub3JlV2F0Y2gpIHtcbiAgICAgICAgaWdub3JlV2F0Y2ggPSBmYWxzZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5lZGl0b3Iuc2V0Q29udGVudCh2YWx1ZSwgZmFsc2UsIHRoaXMucGFyc2VPcHRpb25zKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLmVkaXRvciA9IG5ldyBFZGl0b3Ioe1xuICAgICAgLi4udGhpcy5lZGl0b3JPcHRpb25zLFxuICAgICAgb25Gb2N1cyxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uVXBkYXRlLFxuICAgICAgZXh0ZW5zaW9uczogdGhpcy5nZXRFeHRlbnNpb25zKCksXG4gICAgICBjb250ZW50OiB0aGlzLnZhbHVlIHx8ICcnXG4gICAgfSlcbiAgfSxcblxuICB1bm1vdW50ZWQoKSB7XG4gICAgdGhpcy5lZGl0b3IuZGVzdHJveSgpXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIG9uRHJhZ1Jlc2l6ZShldmVudCkge1xuICAgICAgY29uc3QgZ2V0UG9pbnQgPSAoeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5IH0pID0+ICh7IHgsIHkgfSlcblxuICAgICAgbGV0IHByZXZZID0gZ2V0UG9pbnQoZXZlbnQpLnlcbiAgICAgIGxldCBoZWlnaHQgPSBwYXJzZUZsb2F0KGdldENvbXB1dGVkU3R5bGUodGhpcy4kcmVmcy5lZGl0b3IuJGVsKS5oZWlnaHQpXG5cbiAgICAgIGNvbnN0IG1vdXNlbW92ZSA9IGV2ZW50ID0+IHtcbiAgICAgICAgY29uc3QgeyB5IH0gPSBnZXRQb2ludChldmVudClcbiAgICAgICAgaGVpZ2h0ICs9IHkgLSBwcmV2WVxuICAgICAgICBwcmV2WSA9IHlcbiAgICAgICAgdGhpcy5oZWlnaHQgPSBgJHtNYXRoLm1heChoZWlnaHQsIDApfXB4YFxuICAgICAgfVxuXG4gICAgICBjb25zdCBoYW5kbGVycyA9IHRoaXMuZG9tT24oZG9jdW1lbnQsIHtcbiAgICAgICAgbW91c2Vtb3ZlLFxuXG4gICAgICAgIG1vdXNldXAoZXZlbnQpIHtcbiAgICAgICAgICBtb3VzZW1vdmUoZXZlbnQpXG4gICAgICAgICAgaGFuZGxlcnMucmVtb3ZlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9LFxuXG4gICAgdXBkYXRlRWRpdG9yT3B0aW9ucygpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnNldE9wdGlvbnModGhpcy5lZGl0b3JPcHRpb25zKVxuICAgIH0sXG5cbiAgICBhc3luYyBvbkNsaWNrTGluayhlZGl0b3IpIHtcbiAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBhd2FpdCB0aGlzLnJvb3RDb21wb25lbnQuc2hvd0RpYWxvZyh7XG4gICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICBocmVmOiB7XG4gICAgICAgICAgICB0eXBlOiAndXJsJyxcbiAgICAgICAgICAgIGxhYmVsOiAnTGluaycsXG4gICAgICAgICAgICBhdXRvZm9jdXM6IHRydWVcbiAgICAgICAgICB9LFxuICAgICAgICAgIHRpdGxlOiB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICBsYWJlbDogJ1RpdGxlJ1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgYnV0dG9uczoge1xuICAgICAgICAgIGNhbmNlbDoge30sXG4gICAgICAgICAgYXBwbHk6IHsgdHlwZTogJ3N1Ym1pdCcgfSxcbiAgICAgICAgICByZW1vdmU6IHtcbiAgICAgICAgICAgIGV2ZW50czoge1xuICAgICAgICAgICAgICBjbGljayh7IGRpYWxvZ0NvbXBvbmVudCB9KSB7XG4gICAgICAgICAgICAgICAgZGlhbG9nQ29tcG9uZW50LnJlc29sdmUobnVsbClcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZGF0YTogZ2V0TWFya0F0dHJpYnV0ZXModGhpcy5lZGl0b3Iuc3RhdGUsICdsaW5rJylcbiAgICAgIH0pXG4gICAgICBpZiAoYXR0cmlidXRlcykge1xuICAgICAgICBsZXQgeyBocmVmLCB0aXRsZSB9ID0gYXR0cmlidXRlc1xuICAgICAgICBpZiAoaHJlZikge1xuICAgICAgICAgIC8vIFNlZSBpZiBgaHJlZmAgY2FuIGJlIHBhcnNlZCBhcyBhIFVSTCwgYW5kIGlmIG5vdCxcbiAgICAgICAgICAvLyBwcmVmaXggaXQgd2l0aCBhIGRlZmF1bHQgcHJvdG9jb2wuXG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXdcbiAgICAgICAgICAgIG5ldyBVUkwoaHJlZilcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIGhyZWYgPSBgaHR0cHM6Ly8ke2hyZWZ9YFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlZGl0b3IuY29tbWFuZHMuc2V0TGluayh7IGhyZWYsIHRpdGxlIH0pXG4gICAgICB9IGVsc2UgaWYgKGF0dHJpYnV0ZXMgPT09IG51bGwpIHtcbiAgICAgICAgZWRpdG9yLmNvbW1hbmRzLnVuc2V0TGluaygpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEV4dGVuc2lvbnMoKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1hcmtzID0ge30sXG4gICAgICAgIG5vZGVzID0ge30sXG4gICAgICAgIHRvb2xzID0ge31cbiAgICAgIH0gPSB0aGlzLnNjaGVtYVxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgLy8gRXNzZW50aWFsczpcbiAgICAgICAgRG9jdW1lbnQsXG4gICAgICAgIFRleHQsXG4gICAgICAgIFBhcmFncmFwaCwgLy8gYnV0dG9uIGNhbiBiZSBjb250cm9sbGVkLCBidXQgbm9kZSBuZWVkcyB0byBiZSBvbi5cblxuICAgICAgICAvLyBNYXJrczogYHNjaGVtYS5tYXJrc2BcbiAgICAgICAgbWFya3MuYm9sZCAmJiBCb2xkLFxuICAgICAgICBtYXJrcy5pdGFsaWMgJiYgSXRhbGljLFxuICAgICAgICBtYXJrcy51bmRlcmxpbmUgJiYgVW5kZXJsaW5lLFxuICAgICAgICBtYXJrcy5zdHJpa2UgJiYgU3RyaWtlLFxuICAgICAgICBtYXJrcy5zbWFsbCAmJiBTbWFsbCxcbiAgICAgICAgbWFya3MuY29kZSAmJiBDb2RlLFxuICAgICAgICBtYXJrcy5saW5rICYmIExpbmtXaXRoVGl0bGUsXG5cbiAgICAgICAgLy8gTm9kZXM6IGBzY2hlbWEubm9kZXNgXG4gICAgICAgIG5vZGVzLmJsb2NrcXVvdGUgJiYgQmxvY2txdW90ZSxcbiAgICAgICAgbm9kZXMuY29kZUJsb2NrICYmIENvZGVCbG9jayxcbiAgICAgICAgSGFyZEJyZWFrLCAvLyBUT0RPOiBTaG91bGQgdGhpcyBhbHdheXMgb24/XG4gICAgICAgIG5vZGVzLmhlYWRpbmcgJiYgSGVhZGluZy5jb25maWd1cmUoeyBsZXZlbHM6IG5vZGVzLmhlYWRpbmcgfSksXG4gICAgICAgIG5vZGVzLmhvcml6b250YWxSdWxlICYmIEhvcml6b250YWxSdWxlLFxuICAgICAgICAobm9kZXMub3JkZXJlZExpc3QgfHwgbm9kZXMuYnVsbGV0TGlzdCkgJiYgTGlzdEl0ZW0sXG4gICAgICAgIG5vZGVzLmJ1bGxldExpc3QgJiYgQnVsbGV0TGlzdCxcbiAgICAgICAgbm9kZXMub3JkZXJlZExpc3QgJiYgT3JkZXJlZExpc3QsXG4gICAgICAgIC8vIFRPRE86XG4gICAgICAgIC8vIG5vZGVzLnRvZG9MaXN0ICYmIFRvZG9JdGVtLFxuICAgICAgICAvLyBub2Rlcy50b2RvTGlzdCAmJiBUb2RvTGlzdCxcblxuICAgICAgICAvLyBUb29sczogYHNjaGVtYS50b29sc2BcbiAgICAgICAgdG9vbHMuaGlzdG9yeSAmJiBIaXN0b3J5XG4gICAgICBdLmZpbHRlcihleHRlbnNpb24gPT4gISFleHRlbnNpb24pXG4gICAgfSxcblxuICAgIGdldEJ1dHRvbnMoc2V0dGluZ3NOYW1lLCBkZXNjcmlwdGlvbnMpIHtcbiAgICAgIGNvbnN0IGxpc3QgPSBbXVxuICAgICAgY29uc3QgeyBjb21tYW5kcyB9ID0gdGhpcy5lZGl0b3JcblxuICAgICAgY29uc3QgYWRkQnV0dG9uID0gKHsgbmFtZSwgaWNvbiwgY29tbWFuZCwgYXR0cmlidXRlcywgb25DbGljayB9KSA9PiB7XG4gICAgICAgIGxpc3QucHVzaCh7XG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBpY29uLFxuICAgICAgICAgIGlzQWN0aXZlOiB0aGlzLmVkaXRvci5pc0FjdGl2ZShuYW1lLCBhdHRyaWJ1dGVzKSxcbiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICBjb21tYW5kID8/PVxuICAgICAgICAgICAgICBuYW1lIGluIGNvbW1hbmRzXG4gICAgICAgICAgICAgICAgPyBuYW1lXG4gICAgICAgICAgICAgICAgOiBgdG9nZ2xlJHtjYW1lbGl6ZShuYW1lLCB0cnVlKX1gXG4gICAgICAgICAgICBpZiAoY29tbWFuZCBpbiBjb21tYW5kcykge1xuICAgICAgICAgICAgICBjb25zdCBhcHBseSA9IGF0dHJpYnV0ZXMgPT5cbiAgICAgICAgICAgICAgICB0aGlzLmVkaXRvci5jaGFpbigpW2NvbW1hbmRdKGF0dHJpYnV0ZXMpLmZvY3VzKCkucnVuKClcbiAgICAgICAgICAgICAgb25DbGlja1xuICAgICAgICAgICAgICAgID8gb25DbGljayh0aGlzLmVkaXRvciwgYXR0cmlidXRlcylcbiAgICAgICAgICAgICAgICA6IGFwcGx5KGF0dHJpYnV0ZXMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuc2NoZW1hW3NldHRpbmdzTmFtZV1cbiAgICAgIGlmIChzZXR0aW5ncykge1xuICAgICAgICBmb3IgKGNvbnN0IFtuYW1lLCBkZXNjcmlwdGlvbl0gb2YgT2JqZWN0LmVudHJpZXMoZGVzY3JpcHRpb25zKSkge1xuICAgICAgICAgIGNvbnN0IHNldHRpbmdOYW1lID0gWyd1bmRvJywgJ3JlZG8nXS5pbmNsdWRlcyhuYW1lKSA/ICdoaXN0b3J5JyA6IG5hbWVcbiAgICAgICAgICBjb25zdCBzZXR0aW5nID0gc2V0dGluZ3Nbc2V0dGluZ05hbWVdXG4gICAgICAgICAgY29uc3QgaWNvbiA9IGh5cGhlbmF0ZShuYW1lKVxuICAgICAgICAgIGlmIChzZXR0aW5nKSB7XG4gICAgICAgICAgICBpZiAoZGVzY3JpcHRpb24gPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgYWRkQnV0dG9uKHsgbmFtZSwgaWNvbiB9KVxuICAgICAgICAgICAgfSBlbHNlIGlmIChpc09iamVjdChkZXNjcmlwdGlvbikpIHtcbiAgICAgICAgICAgICAgY29uc3QgeyBjb21tYW5kLCBhdHRyaWJ1dGUsIHZhbHVlcywgb25DbGljayB9ID0gZGVzY3JpcHRpb25cbiAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZSkge1xuICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KHZhbHVlcykgJiYgaXNBcnJheShzZXR0aW5nKSkge1xuICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBoZWFkaW5nIGxldmVsIGF0dHJzOlxuICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNldHRpbmcuaW5jbHVkZXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgYWRkQnV0dG9uKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29uOiBgJHtpY29ufS0ke3ZhbHVlfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlczogeyBbYXR0cmlidXRlXTogdmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2tcbiAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGFkZEJ1dHRvbih7IG5hbWUsIGljb24sIGNvbW1hbmQsIG9uQ2xpY2sgfSlcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGxpc3RcbiAgICB9LFxuXG4gICAgZm9jdXNFbGVtZW50KCkge1xuICAgICAgdGhpcy5lZGl0b3IuY29tbWFuZHMuZm9jdXMoKVxuICAgIH0sXG5cbiAgICBibHVyRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuZWRpdG9yLmNvbW1hbmRzLmJsdXIoKVxuICAgIH1cbiAgfVxufSlcblxuY29uc3QgU21hbGwgPSBNYXJrLmNyZWF0ZSh7XG4gIG5hbWU6ICdzbWFsbCcsXG5cbiAgcGFyc2VIVE1MKCkge1xuICAgIHJldHVybiBbeyB0YWc6ICdzbWFsbCcgfV1cbiAgfSxcblxuICByZW5kZXJIVE1MKCkge1xuICAgIHJldHVybiBbJ3NtYWxsJywgMF1cbiAgfSxcblxuICBhZGRDb21tYW5kcygpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2V0U21hbGw6XG4gICAgICAgIGF0dHJpYnV0ZXMgPT5cbiAgICAgICAgKHsgY29tbWFuZHMgfSkgPT4ge1xuICAgICAgICAgIHJldHVybiBjb21tYW5kcy5zZXRNYXJrKHRoaXMubmFtZSwgYXR0cmlidXRlcylcbiAgICAgICAgfSxcbiAgICAgIHRvZ2dsZVNtYWxsOlxuICAgICAgICBhdHRyaWJ1dGVzID0+XG4gICAgICAgICh7IGNvbW1hbmRzIH0pID0+IHtcbiAgICAgICAgICByZXR1cm4gY29tbWFuZHMudG9nZ2xlTWFyayh0aGlzLm5hbWUsIGF0dHJpYnV0ZXMpXG4gICAgICAgIH0sXG4gICAgICB1bnNldFNtYWxsOlxuICAgICAgICAoKSA9PlxuICAgICAgICAoeyBjb21tYW5kcyB9KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGNvbW1hbmRzLnVuc2V0TWFyayh0aGlzLm5hbWUpXG4gICAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG5cbmNvbnN0IExpbmtXaXRoVGl0bGUgPSBMaW5rLmV4dGVuZCh7XG4gIGluY2x1c2l2ZTogZmFsc2UsXG4gIHNjaGVtYToge1xuICAgIGF0dHJzOiB7XG4gICAgICBocmVmOiB7XG4gICAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICAgIH0sXG4gICAgICB0aXRsZToge1xuICAgICAgICBkZWZhdWx0OiBudWxsXG4gICAgICB9XG4gICAgfSxcblxuICAgIHBhcnNlSFRNTCgpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0YWc6ICdhJyxcbiAgICAgICAgICBnZXRBdHRyczogZWxlbWVudCA9PiAoe1xuICAgICAgICAgICAgaHJlZjogZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKSxcbiAgICAgICAgICAgIHRpdGxlOiBlbGVtZW50LmdldEF0dHJpYnV0ZSgndGl0bGUnKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9LFxuXG4gICAgcmVuZGVySFRNTChub2RlKSB7XG4gICAgICByZXR1cm4gWydhJywgbm9kZS5hdHRycywgMF1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1tYXJrdXAge1xuICBAZXh0ZW5kICVpbnB1dDtcblxuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgLmRpdG8tcmVzaXplIHtcbiAgICBAZXh0ZW5kICVpY29uLXJlc2l6ZTtcblxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICB0b3A6IHVuc2V0O1xuICAgIGxlZnQ6IHVuc2V0O1xuICAgIHJpZ2h0OiAwO1xuICAgIGJvdHRvbTogMDtcbiAgICB3aWR0aDogMWVtO1xuICAgIGhlaWdodDogMWVtO1xuICB9XG5cbiAgLlByb3NlTWlycm9yIHtcbiAgICBoZWlnaHQ6IDEwMCU7XG4gICAgb3V0bGluZTogbm9uZTtcbiAgfVxuXG4gIC5kaXRvLW1hcmt1cC1lZGl0b3Ige1xuICAgIG92ZXJmbG93LXk6IHNjcm9sbDtcbiAgICBtYXJnaW4tdG9wOiAkaW5wdXQtcGFkZGluZy12ZXI7XG4gICAgLy8gTW92ZSBwYWRkaW5nIFwiaW5zaWRlXCIgZWRpdG9yIHRvIGNvcnJlY3RseSBwb3NpdGlvbiBzY3JvbGxiYXJcbiAgICBtYXJnaW4tcmlnaHQ6IC0kaW5wdXQtcGFkZGluZy1ob3I7XG4gICAgcGFkZGluZy1yaWdodDogJGlucHV0LXBhZGRpbmctaG9yO1xuICB9XG5cbiAgLmRpdG8tYnV0dG9ucy10b29sYmFyIHtcbiAgICBtYXJnaW46IDA7XG4gIH1cblxuICBoMSxcbiAgaDIsXG4gIGgzLFxuICBwLFxuICB1bCxcbiAgb2wsXG4gIHByZSxcbiAgYmxvY2txdW90ZSB7XG4gICAgbWFyZ2luOiAxcmVtIDA7XG5cbiAgICAmOmZpcnN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi10b3A6IDA7XG4gICAgfVxuXG4gICAgJjpsYXN0LWNoaWxkIHtcbiAgICAgIG1hcmdpbi1ib3R0b206IDA7XG4gICAgfVxuICB9XG5cbiAgaDEsXG4gIGgyLFxuICBoMyB7XG4gICAgZm9udC13ZWlnaHQ6IGJvbGQ7XG4gIH1cblxuICBoMSB7XG4gICAgZm9udC1zaXplOiAxLjRyZW07XG4gIH1cblxuICBoMiB7XG4gICAgZm9udC1zaXplOiAxLjJyZW07XG4gIH1cblxuICB1bCB7XG4gICAgbGlzdC1zdHlsZTogZGlzYztcbiAgfVxuXG4gIGNvZGUge1xuICAgIGZvbnQtZmFtaWx5OiAkZm9udC1mYW1pbHktbW9ubztcbiAgfVxuXG4gIHByZSB7XG4gICAgcGFkZGluZzogMC43cmVtIDFyZW07XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgYmFja2dyb3VuZDogJGNvbG9yLWRhcmtlcjtcbiAgICBjb2xvcjogJGNvbG9yLXdoaXRlO1xuICAgIG92ZXJmbG93LXg6IGF1dG87XG5cbiAgICBjb2RlIHtcbiAgICAgIGRpc3BsYXk6IGJsb2NrO1xuICAgIH1cbiAgfVxuXG4gIHAgY29kZSB7XG4gICAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICAgIHBhZGRpbmc6IDAgMC4zcmVtO1xuICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgIGJhY2tncm91bmQ6ICRjb2xvci1saWdodGVyO1xuICB9XG5cbiAgYSB7XG4gICAgcG9pbnRlci1ldmVudHM6IG5vbmU7XG4gICAgY3Vyc29yOiBkZWZhdWx0O1xuICAgIGNvbG9yOiBibHVlO1xuICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lO1xuICB9XG5cbiAgdWwsXG4gIG9sIHtcbiAgICBwYWRkaW5nLWxlZnQ6IDJyZW07XG4gIH1cblxuICBsaSB7XG4gICAgJiA+IHAsXG4gICAgJiA+IG9sLFxuICAgICYgPiB1bCB7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuICB9XG5cbiAgYmxvY2txdW90ZSB7XG4gICAgYm9yZGVyLWxlZnQ6IDNweCBzb2xpZCAkY29sb3ItbGlnaHRlcjtcbiAgICBwYWRkaW5nLWxlZnQ6IDFyZW07XG4gICAgZm9udC1zdHlsZTogaXRhbGljO1xuXG4gICAgcCB7XG4gICAgICBtYXJnaW46IDA7XG4gICAgfVxuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLW11bHRpc2VsZWN0XG4gIC5kaXRvLW11bHRpc2VsZWN0X19pbm5lclxuICAgIFZ1ZU11bHRpc2VsZWN0KFxuICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICB2LW1vZGVsPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICAgIDpjbGFzcz1ge1xuICAgICAgICAnbXVsdGlzZWxlY3QtLW11bHRpcGxlJzogbXVsdGlwbGUsXG4gICAgICAgICdtdWx0aXNlbGVjdC0tbG9hZGluZyc6IGlzTG9hZGluZyxcbiAgICAgICAgJ211bHRpc2VsZWN0LS1oaWdobGlnaHQnOiBzaG93SGlnaGxpZ2h0XG4gICAgICB9YFxuICAgICAgOnNob3dMYWJlbHM9XCJmYWxzZVwiXG4gICAgICA6cGxhY2Vob2xkZXI9XCJwbGFjZWhvbGRlclwiXG4gICAgICB0YWdQbGFjZWhvbGRlcj1cIlByZXNzIGVudGVyIHRvIGFkZCBuZXcgdGFnXCJcbiAgICAgIDpvcHRpb25zPVwicG9wdWxhdGUgJiYgYWN0aXZlT3B0aW9ucyB8fCBbXVwiXG4gICAgICA6Y3VzdG9tTGFiZWw9XCJnZXRMYWJlbEZvck9wdGlvblwiXG4gICAgICA6dHJhY2tCeT1cIm9wdGlvblZhbHVlXCJcbiAgICAgIDpncm91cExhYmVsPVwiZ3JvdXBCeUxhYmVsXCJcbiAgICAgIDpncm91cFZhbHVlcz1cImdyb3VwQnlPcHRpb25zXCJcbiAgICAgIDptdWx0aXBsZT1cIm11bHRpcGxlXCJcbiAgICAgIDp0YWdnYWJsZT1cInRhZ2dhYmxlXCJcbiAgICAgIDpzZWFyY2hhYmxlPVwic2VhcmNoYWJsZVwiXG4gICAgICA6aW50ZXJuYWxTZWFyY2g9XCIhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpwcmVzZXJ2ZVNlYXJjaD1cIiEhc2VhcmNoRmlsdGVyXCJcbiAgICAgIDpjbGVhck9uU2VsZWN0PVwiIXNlYXJjaEZpbHRlclwiXG4gICAgICA6Y2xvc2VPblNlbGVjdD1cIiFzdGF5T3BlblwiXG4gICAgICA6bG9hZGluZz1cImlzTG9hZGluZ1wiXG4gICAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICAgIEBvcGVuPVwib25PcGVuXCJcbiAgICAgIEBjbG9zZT1cIm9uQ2xvc2VcIlxuICAgICAgQHRhZz1cIm9uQWRkVGFnXCJcbiAgICAgIEBzZWFyY2gtY2hhbmdlPVwib25TZWFyY2hDaGFuZ2VcIlxuICAgIClcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICBAY2xpY2s9XCJjbGVhclwiXG4gICAgKVxuICAvLy0gRWRpdCBidXR0b24gaXMgbmV2ZXIgZGlzYWJsZWQsIGV2ZW4gaWYgdGhlIGZpZWxkIGlzIGRpc2FibGVkLlxuICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgdi1pZj1cImVkaXRhYmxlXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJkYXRhXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6ZGlzYWJsZWQ9XCJmYWxzZVwiXG4gICAgOmVkaXRhYmxlPVwiZWRpdGFibGVcIlxuICAgIDplZGl0UGF0aD1cImVkaXRQYXRoXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBUeXBlTWl4aW4gZnJvbSAnLi4vbWl4aW5zL1R5cGVNaXhpbi5qcydcbmltcG9ydCBPcHRpb25zTWl4aW4gZnJvbSAnLi4vbWl4aW5zL09wdGlvbnNNaXhpbi5qcydcbmltcG9ydCBWdWVNdWx0aXNlbGVjdCBmcm9tICd2dWUtbXVsdGlzZWxlY3QnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgaXNCb29sZWFuIH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdtdWx0aXNlbGVjdCcsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcbiAgY29tcG9uZW50czogeyBWdWVNdWx0aXNlbGVjdCB9LFxuXG4gIGRhdGEoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlYXJjaGVkT3B0aW9uczogbnVsbCxcbiAgICAgIHBvcHVsYXRlOiBmYWxzZVxuICAgIH1cbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIHNlbGVjdGVkT3B0aW9uczoge1xuICAgICAgZ2V0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZVxuICAgICAgICAgID8gKHRoaXMuc2VsZWN0ZWRWYWx1ZSB8fCBbXSlcbiAgICAgICAgICAgICAgLm1hcChcbiAgICAgICAgICAgICAgICAvLyBJZiBhbiBvcHRpb24gY2Fubm90IGJlIGZvdW5kLCB3ZSBtYXkgYmUgaW4gdGFnZ2FibGUgbW9kZSBhbmRcbiAgICAgICAgICAgICAgICAvLyBjYW4gYWRkIGl0LlxuICAgICAgICAgICAgICAgIHZhbHVlID0+IChcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uRm9yVmFsdWUodmFsdWUpIHx8IHRoaXMuYWRkVGFnT3B0aW9uKHZhbHVlKVxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAvLyBGaWx0ZXIgb3V0IG9wdGlvbnMgdGhhdCB3ZSBjb3VsZG4ndCBtYXRjaC5cbiAgICAgICAgICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGRpc3BsYXkgYW4gZXJyb3IgaW5zdGVhZD9cbiAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgIDogdGhpcy5zZWxlY3RlZE9wdGlvblxuICAgICAgfSxcblxuICAgICAgc2V0KG9wdGlvbikge1xuICAgICAgICAvLyBDb252ZXJ0IHZhbHVlIHRvIG9wdGlvbnMgb2JqZWN0LCBzaW5jZSB2dWUtbXVsdGlzZWxlY3QgY2FuJ3QgbWFwIHRoYXRcbiAgICAgICAgLy8gaXRzZWxmIHVuZm9ydHVuYXRlbHkuIGB0cmFjay1ieWAgaXMgdXNlZCBmb3IgOmtleSBtYXBwaW5nIGl0IHNlZW1zLlxuICAgICAgICB0aGlzLnNlbGVjdGVkVmFsdWUgPSB0aGlzLm11bHRpcGxlXG4gICAgICAgICAgPyAob3B0aW9uIHx8IFtdKS5tYXAodmFsdWUgPT4gdGhpcy5nZXRWYWx1ZUZvck9wdGlvbih2YWx1ZSkpXG4gICAgICAgICAgOiB0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFjdGl2ZU9wdGlvbnMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zZWFyY2hlZE9wdGlvbnMgfHwgdGhpcy5vcHRpb25zXG4gICAgfSxcblxuICAgIG11bHRpcGxlOiBnZXRTY2hlbWFBY2Nlc3NvcignbXVsdGlwbGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KSxcblxuICAgIHNlYXJjaGFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdzZWFyY2hhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICB0YWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3RhZ2dhYmxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBzdGF5T3BlbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0YXlPcGVuJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgfSksXG5cbiAgICBwbGFjZWhvbGRlcigpIHtcbiAgICAgIGxldCB7IHBsYWNlaG9sZGVyLCBzZWFyY2hhYmxlLCB0YWdnYWJsZSB9ID0gdGhpcy5zY2hlbWFcbiAgICAgIGlmIChpc0Jvb2xlYW4ocGxhY2Vob2xkZXIpKSB7XG4gICAgICAgIHBsYWNlaG9sZGVyID0gcGxhY2Vob2xkZXIgPyB1bmRlZmluZWQgOiBudWxsXG4gICAgICB9XG4gICAgICByZXR1cm4gcGxhY2Vob2xkZXIgPT09IHVuZGVmaW5lZFxuICAgICAgICA/IHNlYXJjaGFibGUgJiYgdGFnZ2FibGVcbiAgICAgICAgICA/IGBTZWFyY2ggb3IgYWRkIGEgJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgICA6IHNlYXJjaGFibGVcbiAgICAgICAgICAgID8gYFNlbGVjdCBvciBzZWFyY2ggJHt0aGlzLmxhYmVsfWBcbiAgICAgICAgICAgIDogdW5kZWZpbmVkXG4gICAgICAgIDogcGxhY2Vob2xkZXJcbiAgICB9LFxuXG4gICAgc2hvd0hpZ2hsaWdodCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmlzTW91bnRlZCAmJiB0aGlzLiRyZWZzLmVsZW1lbnQucG9pbnRlckRpcnR5XG4gICAgfVxuICB9LFxuXG4gIG1vdW50ZWQoKSB7XG4gICAgaWYgKHRoaXMuYXV0b2ZvY3VzKSB7XG4gICAgICAvLyB2dWUtbXVsdGlzZWxlY3QgZG9lc24ndCBzdXBwb3J0IHRoZSBhdXRvZm9jdXMgYXR0cmlidXRlLiBXZSBuZWVkIHRvXG4gICAgICAvLyBoYW5kbGUgaXQgaGVyZS5cbiAgICAgIHRoaXMuZm9jdXMoKVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgYWRkVGFnT3B0aW9uKHRhZykge1xuICAgICAgaWYgKHRoaXMudGFnZ2FibGUpIHtcbiAgICAgICAgY29uc3QgeyBvcHRpb25MYWJlbCwgb3B0aW9uVmFsdWUgfSA9IHRoaXNcbiAgICAgICAgY29uc3Qgb3B0aW9uID1cbiAgICAgICAgICBvcHRpb25MYWJlbCAmJiBvcHRpb25WYWx1ZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgW29wdGlvbkxhYmVsXTogdGFnLFxuICAgICAgICAgICAgICAgIC8vIFRPRE86IERlZmluZSBhIHNpbXBsZSBzY2hlbWEgb3B0aW9uIHRvIGNvbnZlcnQgdGhlIHRhZyB2YWx1ZVxuICAgICAgICAgICAgICAgIC8vIHRvIHNvbWV0aGluZyBlbHNlLCBlLmcuIGB0b1RhZzogdGFnID0+IHVuZGVyc2NvcmUodGFnKWBcbiAgICAgICAgICAgICAgICBbb3B0aW9uVmFsdWVdOiB0YWdcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB0YWdcbiAgICAgICAgdGhpcy5vcHRpb25zLnB1c2gob3B0aW9uKVxuICAgICAgICByZXR1cm4gb3B0aW9uXG4gICAgICB9XG4gICAgfSxcblxuICAgIGZvY3VzRWxlbWVudCgpIHtcbiAgICAgIHRoaXMuJHJlZnMuZWxlbWVudC5hY3RpdmF0ZSgpXG4gICAgfSxcblxuICAgIGJsdXJFbGVtZW50KCkge1xuICAgICAgdGhpcy4kcmVmcy5lbGVtZW50LmRlYWN0aXZhdGUoKVxuICAgIH0sXG5cbiAgICBvbk9wZW4oKSB7XG4gICAgICB0aGlzLnBvcHVsYXRlID0gdHJ1ZVxuICAgIH0sXG5cbiAgICBvbkNsb3NlKCkge1xuICAgICAgLy8gU2luY2Ugd2UgZG9uJ3QgZmlyZSBibHVyIGV2ZW50cyB3aGlsZSB0aGUgbXVsdGlzZWxlY3QgaXMgb3BlbiAoc2VlXG4gICAgICAvLyBiZWxvdyksIHdlIG5lZWQgdG8gZG8gaXQgaGVyZSwgd2hlbiBpdCdzIGFjdHVhbGx5IGNsb3NlZC5cbiAgICAgIGlmICh0aGlzLmZvY3VzZWQpIHtcbiAgICAgICAgdGhpcy5vbkJsdXIoKVxuICAgICAgfVxuICAgIH0sXG5cbiAgICBvbkJsdXIoKSB7XG4gICAgICBpZiAoIXRoaXMuJHJlZnMuZWxlbWVudC5pc09wZW4pIHtcbiAgICAgICAgVHlwZU1peGluLm1ldGhvZHMub25CbHVyLmNhbGwodGhpcylcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25BZGRUYWcodGFnKSB7XG4gICAgICBjb25zdCBvcHRpb24gPSB0aGlzLmFkZFRhZ09wdGlvbih0YWcpXG4gICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgIHRoaXMudmFsdWUucHVzaCh0aGlzLmdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbikpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIG9uU2VhcmNoQ2hhbmdlKHF1ZXJ5KSB7XG4gICAgICBpZiAodGhpcy5zZWFyY2hGaWx0ZXIpIHtcbiAgICAgICAgaWYgKHF1ZXJ5KSB7XG4gICAgICAgICAgLy8gU2V0IGBzZWFyY2hlZE9wdGlvbnNgIHRvIGFuIGVtcHR5IGFycmF5LCBiZWZvcmUgaXQgd2lsbCBiZVxuICAgICAgICAgIC8vIHBvcHVsYXRlZCBhc3luY2hyb25vdXNseSB3aXRoIHRoZSBhY3R1YWwgcmVzdWx0cy5cbiAgICAgICAgICB0aGlzLnNlYXJjaGVkT3B0aW9ucyA9IFtdXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBhd2FpdCB0aGlzLnJlc29sdmVEYXRhKFxuICAgICAgICAgICAgKCkgPT4gdGhpcy5zZWFyY2hGaWx0ZXIobmV3IERpdG9Db250ZXh0KHRoaXMsIHsgcXVlcnkgfSkpXG4gICAgICAgICAgKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIENsZWFyIGBzZWFyY2hlZE9wdGlvbnNgIHdoZW4gdGhlIHF1ZXJ5IGlzIGNsZWFyZWQuXG4gICAgICAgICAgdGhpcy5zZWFyY2hlZE9wdGlvbnMgPSBudWxsXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuQGltcG9ydCAndnVlLW11bHRpc2VsZWN0L2Rpc3QvdnVlLW11bHRpc2VsZWN0LmNzcyc7XG5cbiRzcGlubmVyLXdpZHRoOiAkc2VsZWN0LWFycm93LXdpZHRoO1xuJHRhZy1pY29uLXdpZHRoOiAxLjhlbTtcbiR0YWctbWFyZ2luOiAycHg7XG4kdGFnLXBhZGRpbmc6IDNweDtcbiR0YWctbGluZS1oZWlnaHQ6IDFlbTtcblxuLmRpdG8tbXVsdGlzZWxlY3Qge1xuICBkaXNwbGF5OiBpbmxpbmUtZmxleDtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICZfX2lubmVyIHtcbiAgICBmbGV4OiAxO1xuICAgIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgfVxuXG4gIC5kaXRvLWVkaXQtYnV0dG9ucyB7XG4gICAgbWFyZ2luLWxlZnQ6ICRmb3JtLXNwYWNpbmctaGFsZjtcbiAgfVxuXG4gIC5tdWx0aXNlbGVjdCB7XG4gICAgJHNlbGY6IGxhc3Qtc2VsZWN0b3IoJik7XG5cbiAgICAtLWlucHV0LXdpZHRoOiAxMDAlO1xuXG4gICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgIG1pbi1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgY29sb3I6ICRjb2xvci1ibGFjaztcblxuICAgICYtLW11bHRpcGxlIHtcbiAgICAgIC0taW5wdXQtd2lkdGg6IGF1dG87XG4gICAgfVxuXG4gICAgJl9fdGFncyB7XG4gICAgICBkaXNwbGF5OiBmbGV4O1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgICAgbWluLWhlaWdodDogaW5oZXJpdDtcbiAgICAgIG92ZXJmbG93OiBhdXRvO1xuICAgICAgcGFkZGluZzogMCAkc3Bpbm5lci13aWR0aCAwIDA7XG4gICAgICAvLyBTbyB0YWdzIGNhbiBmbG9hdCBvbiBtdWx0aXBsZSBsaW5lcyBhbmQgaGF2ZSBwcm9wZXIgbWFyZ2luczpcbiAgICAgIHBhZGRpbmctYm90dG9tOiAkdGFnLW1hcmdpbjtcblxuICAgICAgLmRpdG8taGFzLWVycm9ycyAmIHtcbiAgICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItZXJyb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fdGFnIHtcbiAgICAgIGZsb2F0OiBsZWZ0O1xuICAgICAgbWFyZ2luOiAkdGFnLW1hcmdpbiAwIDAgJHRhZy1tYXJnaW47XG4gICAgICBib3JkZXItcmFkaXVzOiAxZW07XG4gICAgICBwYWRkaW5nOiAkdGFnLXBhZGRpbmcgJHRhZy1pY29uLXdpZHRoICR0YWctcGFkZGluZyAwLjhlbTtcbiAgICAgIGxpbmUtaGVpZ2h0OiAkdGFnLWxpbmUtaGVpZ2h0O1xuICAgICAgaGVpZ2h0OiBjYWxjKCRpbnB1dC1oZWlnaHQgLSAyICogJHRhZy1wYWRkaW5nKTtcbiAgICB9XG5cbiAgICAmX190YWdzLXdyYXAge1xuICAgICAgb3ZlcmZsb3c6IGF1dG87XG4gICAgICBsaW5lLWhlaWdodDogMDtcbiAgICB9XG5cbiAgICAmX19zaW5nbGUsXG4gICAgJl9fcGxhY2Vob2xkZXIsXG4gICAgJl9faW5wdXQge1xuICAgICAgQGluY2x1ZGUgZWxsaXBzaXM7XG5cbiAgICAgIGZsZXg6IDEgMCAwJTtcbiAgICAgIHdpZHRoOiAwO1xuICAgICAgbWluLWhlaWdodDogMDtcbiAgICAgIG1hcmdpbjogMCAwIDFweCAwO1xuICAgICAgZm9udC1zaXplOiBpbmhlcml0O1xuICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7XG4gICAgICAvLyBTYWRseSwgdnVlLXNlbGVjdCBzZXRzIHN0eWxlPVwicGFkZGluZzogLi4uO1wiIGluIGFkZGl0aW9uIHRvIHVzaW5nXG4gICAgICAvLyBjbGFzc2VzLCBzbyBgIWltcG9ydGFudGAgaXMgbmVjZXNzYXJ5OlxuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmcgIWltcG9ydGFudDtcbiAgICAgIC8vIFNvIGlucHV0IGNhbiBmbG9hdCBuZXh0IHRvIHRhZ3MgYW5kIGhhdmUgcHJvcGVyIG1hcmdpbnMgd2l0aFxuICAgICAgLy8gJl9fdGFnczpcbiAgICAgIHBhZGRpbmctYm90dG9tOiAwICFpbXBvcnRhbnQ7XG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgIH1cblxuICAgICZfX3BsYWNlaG9sZGVyLFxuICAgICZfX2lucHV0OjpwbGFjZWhvbGRlciB7XG4gICAgICBjb2xvcjogJGNvbG9yLXBsYWNlaG9sZGVyO1xuICAgIH1cblxuICAgICZfX3BsYWNlaG9sZGVyIHtcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgLy8gRW5mb3JjZSBhY3R1YWwgbGluZS1oZWlnaHQgZm9yIHBvc2l0aW9uaW5nLlxuICAgICAgICBjb250ZW50OiAnXFwyMDBiJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX19zZWxlY3QsXG4gICAgJl9fc3Bpbm5lciB7XG4gICAgICBwYWRkaW5nOiAwO1xuICAgICAgLy8gJGJvcmRlci13aWR0aCB0byBwcmV2ZW50IG1hc2tpbmcgYm9yZGVyIHdpdGggJl9fc3Bpbm5lclxuICAgICAgdG9wOiAkYm9yZGVyLXdpZHRoO1xuICAgICAgcmlnaHQ6ICRib3JkZXItd2lkdGg7XG4gICAgICBib3R0b206ICRib3JkZXItd2lkdGg7XG4gICAgICBoZWlnaHQ6IGluaGVyaXQ7XG4gICAgICBib3JkZXItcmFkaXVzOiAkYm9yZGVyLXJhZGl1cztcbiAgICB9XG5cbiAgICAmX19zZWxlY3Qge1xuICAgICAgd2lkdGg6IDA7XG4gICAgICBtYXJnaW4tcmlnaHQ6IGNhbGMoJHNlbGVjdC1hcnJvdy13aWR0aCAvIDIpO1xuXG4gICAgICAmOjpiZWZvcmUge1xuICAgICAgICBAaW5jbHVkZSBhcnJvdygkc2VsZWN0LWFycm93LXNpemUpO1xuXG4gICAgICAgIGJvdHRvbTogJHNlbGVjdC1hcnJvdy1ib3R0b207XG4gICAgICAgIHJpZ2h0OiBjYWxjKC0xICogJHNlbGVjdC1hcnJvdy1zaXplIC8gMik7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fc3Bpbm5lciB7XG4gICAgICB3aWR0aDogJHNwaW5uZXItd2lkdGg7XG5cbiAgICAgICY6OmJlZm9yZSxcbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgLy8gQ2hhbmdlIHRoZSB3aWR0aCBvZiB0aGUgbG9hZGluZyBzcGlubmVyXG4gICAgICAgIGJvcmRlci13aWR0aDogM3B4O1xuICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgICAgICBpbnNldDogMDtcbiAgICAgICAgbWFyZ2luOiBhdXRvO1xuICAgICAgfVxuICAgIH1cblxuICAgICZfX29wdGlvbiB7XG4gICAgICAkb3B0aW9uOiBsYXN0LXNlbGVjdG9yKCYpO1xuXG4gICAgICBtaW4taGVpZ2h0OiB1bnNldDtcbiAgICAgIGhlaWdodDogdW5zZXQ7XG4gICAgICBsaW5lLWhlaWdodDogJGxpbmUtaGVpZ2h0O1xuICAgICAgcGFkZGluZzogJGlucHV0LXBhZGRpbmc7XG5cbiAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgLy8gSW5zdHJ1Y3Rpb24gdGV4dCBmb3Igb3B0aW9uc1xuICAgICAgICBwYWRkaW5nOiAkaW5wdXQtcGFkZGluZztcbiAgICAgICAgbGluZS1oZWlnaHQ6ICR0YWctbGluZS1oZWlnaHQ7XG4gICAgICB9XG5cbiAgICAgIC8vIE9ubHkgc2hvdyB0aGUgaGlnaGxpZ2h0IG9uY2UgdGhlIHB1bGxkb3duIGhhcyByZWNlaXZlZCBtb3VzZSBvclxuICAgICAgLy8ga2V5Ym9hcmQgaW50ZXJhY3Rpb24sIGluIHdoaWNoIGNhc2UgYCYtLWhpZ2hsaWdodGAgd2lsbCBiZSBzZXQsXG4gICAgICAvLyB3aGljaCBpcyBjb250cm9sbGVkIGJ5IGBwb2ludGVyRGlydHlgIGluIHZ1ZS1tdWx0aXNlbGVjdC5cbiAgICAgIC8vIFVudGlsIHRoZW4sIGNsZWFyIHRoZSBoaWdobGlnaHQgc3R5bGUsIGJ1dCBvbmx5IGlmIGl0IGlzbid0IGFsc29cbiAgICAgIC8vIGRpc2FibGVkIG9yIHNlbGVjdGVkLCBpbiB3aGljaCBjYXNlIHdlIHdhbnQgdG8ga2VlcCB0aGUgc3R5bGUuXG4gICAgICBAYXQtcm9vdCAjeyRzZWxmfTpub3QoI3skc2VsZn0tLWhpZ2hsaWdodClcbiAgICAgICAgICAjeyRvcHRpb259Om5vdCgjeyRvcHRpb259LS1kaXNhYmxlZCk6bm90KCN7JG9wdGlvbn0tLXNlbGVjdGVkKSB7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dDtcbiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICB9XG5cbiAgICAgICYtLWhpZ2hsaWdodCB7XG4gICAgICAgICY6OmFmdGVyIHtcbiAgICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci13aGl0ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIEBhdC1yb290ICN7JHNlbGZ9I3skc2VsZn0tLWhpZ2hsaWdodCAje2xhc3Qtc2VsZWN0b3IoJil9IHtcbiAgICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQtaW52ZXJ0ZWQ7XG4gICAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAmLS1zZWxlY3RlZCB7XG4gICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dDtcbiAgICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWhpZ2hsaWdodDtcblxuICAgICAgICBAYXQtcm9vdCAjeyRzZWxmfSN7JHNlbGZ9LS1oaWdobGlnaHQgJiN7JG9wdGlvbn0tLWhpZ2hsaWdodCB7XG4gICAgICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgICYtLWRpc2FibGVkIHtcbiAgICAgICAgYmFja2dyb3VuZDogbm9uZTtcbiAgICAgICAgY29sb3I6ICRjb2xvci1kaXNhYmxlZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAmX190YWcge1xuICAgICAgY29sb3I6ICRjb2xvci10ZXh0LWludmVydGVkO1xuICAgICAgYmFja2dyb3VuZDogJGNvbG9yLWFjdGl2ZTtcbiAgICB9XG5cbiAgICAmX190YWctaWNvbiB7XG4gICAgICBiYWNrZ3JvdW5kOiBub25lO1xuICAgICAgYm9yZGVyLXJhZGl1czogMWVtO1xuICAgICAgd2lkdGg6ICR0YWctaWNvbi13aWR0aDtcbiAgICAgIG1hcmdpbjogMDtcblxuICAgICAgJjo6YWZ0ZXIge1xuICAgICAgICBAZXh0ZW5kICVpY29uLWNsZWFyO1xuXG4gICAgICAgIGZvbnQtc2l6ZTogMC45ZW07XG4gICAgICAgIGNvbG9yOiAkY29sb3ItdGV4dC1pbnZlcnRlZDtcbiAgICAgIH1cblxuICAgICAgJjpob3Zlcjo6YWZ0ZXIge1xuICAgICAgICBjb2xvcjogJGNvbG9yLXRleHQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgJl9fdGFncyxcbiAgICAmX19jb250ZW50LXdyYXBwZXIge1xuICAgICAgYm9yZGVyOiAkYm9yZGVyLXN0eWxlO1xuICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgfVxuXG4gICAgJl9fY29udGVudC13cmFwcGVyIHtcbiAgICAgIHotaW5kZXg6ICR6LWluZGV4LXBvcHVwO1xuICAgICAgYm9yZGVyLWNvbG9yOiAkY29sb3ItYWN0aXZlO1xuICAgIH1cblxuICAgICY6bm90KCYtLWFib3ZlKSAjeyRzZWxmfV9fY29udGVudC13cmFwcGVyIHtcbiAgICAgIG1hcmdpbjogKC0kYm9yZGVyLXdpZHRoKSAwIDA7XG4gICAgICBib3JkZXItdG9wLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICAgICAgYm9yZGVyLXRvcC1sZWZ0LXJhZGl1czogMDtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAwO1xuICAgIH1cblxuICAgICYtLWFib3ZlICN7JHNlbGZ9X19jb250ZW50LXdyYXBwZXIge1xuICAgICAgbWFyZ2luOiAwIDAgKC0kYm9yZGVyLXdpZHRoKTtcbiAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICRib3JkZXItY29sb3I7XG4gICAgICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xuICAgICAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG4gICAgfVxuXG4gICAgJi0tYWN0aXZlIHtcbiAgICAgICN7JHNlbGZ9X19wbGFjZWhvbGRlciB7XG4gICAgICAgIC8vIERvbid0IHVzZSBgZGlzcGxheTogbm9uZWAgdG8gaGlkZSBwbGFjZS1ob2xkZXIsIGFzIHRoZSBsYXlvdXQgd291bGRcbiAgICAgICAgLy8gY29sbGFwc2UuXG4gICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jaztcbiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuO1xuICAgICAgfVxuXG4gICAgICAjeyRzZWxmfV9fc2luZ2xlLFxuICAgICAgI3skc2VsZn1fX2lucHV0IHtcbiAgICAgICAgLy8gU2FkbHksIHZ1ZS1zZWxlY3Qgc2V0cyBgc3R5bGU9XCJ3aWR0aFwiYCBpbiBhZGRpdGlvbiB0byB1c2luZyBjbGFzc2VzXG4gICAgICAgIC8vIHNvIGAhaW1wb3J0YW50YCBpcyBuZWNlc3Nhcnk6XG4gICAgICAgIHdpZHRoOiB2YXIoLS1pbnB1dC13aWR0aCkgIWltcG9ydGFudDtcbiAgICAgIH1cblxuICAgICAgI3skc2VsZn1fX3RhZ3Mge1xuICAgICAgICBib3JkZXItY29sb3I6ICRjb2xvci1hY3RpdmU7XG4gICAgICAgIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiAwO1xuICAgICAgfVxuXG4gICAgICAmI3skc2VsZn0tLWFib3ZlIHtcbiAgICAgICAgI3skc2VsZn1fX3RhZ3Mge1xuICAgICAgICAgIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICAgICAgICAgIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDA7XG4gICAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAmLS1sb2FkaW5nIHtcbiAgICAgICN7JHNlbGZ9X190YWdzIHtcbiAgICAgICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgICB9XG5cbiAgICAgICN7JHNlbGZ9X19jb250ZW50LXdyYXBwZXIge1xuICAgICAgICBkaXNwbGF5OiBub25lO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBpc0FycmF5IH0gZnJvbSAnQGRpdG9qcy91dGlscydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcHV0ZWQ6IHtcbiAgICBpbnB1dFZhbHVlOiB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnZhbHVlICE9PSBudWxsID8gdGhpcy52YWx1ZSA6ICcnXG4gICAgICB9LFxuXG4gICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9XG4gICAgICAgICAgdmFsdWUgIT09ICcnXG4gICAgICAgICAgICA/IHRoaXMuaXNJbnRlZ2VyXG4gICAgICAgICAgICAgID8gcGFyc2VJbnQodmFsdWUsIDEwKVxuICAgICAgICAgICAgICA6IHBhcnNlRmxvYXQodmFsdWUpXG4gICAgICAgICAgICA6IG51bGxcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgLy8gQG92ZXJyaWRhYmxlXG4gICAgaXNJbnRlZ2VyKCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfSxcblxuICAgIHN0ZXBWYWx1ZSgpIHtcbiAgICAgIC8vIERvbid0IHNob3cgc3RlcHMgaWYgdGhlIGlucHV0IGlzIGFsc28gY2xlYXJhYmxlLCBzaW5jZSB0aGUgc3RlcCBidXR0b25zXG4gICAgICAvLyB3b3VsZCBjb2xsaWRlIHdpdGggdGhlIGNsZWFyIGJ1dHRvbi5cbiAgICAgIHJldHVybiB0aGlzLmNsZWFyYWJsZVxuICAgICAgICA/IG51bGxcbiAgICAgICAgOiB0aGlzLnN0ZXAgPT0gbnVsbCAmJiAhdGhpcy5pc0ludGVnZXJcbiAgICAgICAgICA/ICdhbnknXG4gICAgICAgICAgOiB0aGlzLnN0ZXBcbiAgICB9LFxuXG4gICAgZGVjaW1hbHM6IGdldFNjaGVtYUFjY2Vzc29yKCdkZWNpbWFscycsIHtcbiAgICAgIHR5cGU6IE51bWJlclxuICAgIH0pLFxuXG4gICAgc3RlcDogZ2V0U2NoZW1hQWNjZXNzb3IoJ3N0ZXAnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQoc3RlcCkge1xuICAgICAgICAvLyBGb3IgaW50ZWdlcnMsIHJvdW5kIHRoZSBzdGVwcyB0byB0aGUgbmV4dCBiaWdnZXIgaW50ZWdlciB2YWx1ZTpcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIHN0ZXAgIT0gbnVsbCA/IE1hdGguY2VpbChzdGVwKSA6IHN0ZXBcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIG1pbjogZ2V0U2NoZW1hQWNjZXNzb3IoJ21pbicsIHtcbiAgICAgIHR5cGU6IE51bWJlcixcbiAgICAgIGdldChtaW4pIHtcbiAgICAgICAgbWluID1cbiAgICAgICAgICBtaW4gPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCdyYW5nZScsIHsgdHlwZTogQXJyYXkgfSk/LlswXVxuICAgICAgICAgICAgOiBtaW5cbiAgICAgICAgcmV0dXJuIHRoaXMuaXNJbnRlZ2VyICYmIG1pbiAhPSBudWxsID8gTWF0aC5mbG9vcihtaW4pIDogbWluXG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXg6IGdldFNjaGVtYUFjY2Vzc29yKCdtYXgnLCB7XG4gICAgICB0eXBlOiBOdW1iZXIsXG4gICAgICBnZXQobWF4KSB7XG4gICAgICAgIG1heCA9XG4gICAgICAgICAgbWF4ID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgncmFuZ2UnLCB7IHR5cGU6IEFycmF5IH0pPy5bMV1cbiAgICAgICAgICAgIDogbWF4XG4gICAgICAgIHJldHVybiB0aGlzLmlzSW50ZWdlciAmJiBtYXggIT0gbnVsbCA/IE1hdGguY2VpbChtYXgpIDogbWF4XG4gICAgICB9XG4gICAgfSksXG5cbiAgICByYW5nZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ3JhbmdlJywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoKSB7XG4gICAgICAgIC8vIGB0aGlzLm1pbmAsIGB0aGlzLm1heGAgYWxyZWFkeSBzdXBwb3J0IGBzY2hlbWEucmFuZ2VgLFxuICAgICAgICAvLyBzbyByZWRpcmVjdCB0aGVyZS5cbiAgICAgICAgY29uc3QgeyBtaW4sIG1heCB9ID0gdGhpc1xuICAgICAgICByZXR1cm4gbWluICE9IG51bGwgJiYgbWF4ICE9IG51bGwgPyBbbWluLCBtYXhdIDogdW5kZWZpbmVkXG4gICAgICB9LFxuXG4gICAgICBzZXQocmFuZ2UpIHtcbiAgICAgICAgLy8gUHJvdmlkZSBhIHNldHRlciB0aGF0IGRlbGVnYXRlcyB0byBgW3RoaXMubWluLCB0aGlzLm1heF1gLFxuICAgICAgICAvLyBzaW5jZSB0aG9zZSBhbHJlYWR5IGhhbmRsZSBgc2NoZW1hLnJhbmdlYC5cbiAgICAgICAgaWYgKGlzQXJyYXkocmFuZ2UpKSB7XG4gICAgICAgICAgO1t0aGlzLm1pbiwgdGhpcy5tYXhdID0gcmFuZ2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldFZhbGlkYXRpb25zKCkge1xuICAgICAgY29uc3QgdmFsaWRhdGlvbnMgPSB7fVxuICAgICAgY29uc3QgeyByYW5nZSwgbWluLCBtYXgsIGRlY2ltYWxzLCBzdGVwIH0gPSB0aGlzXG4gICAgICBpZiAocmFuZ2UpIHtcbiAgICAgICAgdmFsaWRhdGlvbnMucmFuZ2UgPSByYW5nZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG1pbiAhPSBudWxsKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMubWluID0gbWluXG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1heCAhPSBudWxsKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMubWF4ID0gbWF4XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChkZWNpbWFscyAhPSBudWxsKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLmRlY2ltYWxzID0gZGVjaW1hbHNcbiAgICAgIH0gZWxzZSBpZiAoc3RlcCkge1xuICAgICAgICBjb25zdCBkZWNpbWFscyA9IChgJHtzdGVwfWAuc3BsaXQoJy4nKVsxXSB8fCAnJykubGVuZ3RoXG4gICAgICAgIGlmIChkZWNpbWFscyA+IDApIHtcbiAgICAgICAgICB2YWxpZGF0aW9ucy5kZWNpbWFscyA9IGRlY2ltYWxzXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsaWRhdGlvbnMuaW50ZWdlciA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaXNJbnRlZ2VyKSB7XG4gICAgICAgIHZhbGlkYXRpb25zLmludGVnZXIgPSB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsaWRhdGlvbnNcbiAgICB9XG4gIH1cbn1cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG5JbnB1dEZpZWxkLmRpdG8tbnVtYmVyKFxuICA6aWQ9XCJkYXRhUGF0aFwiXG4gIHJlZj1cImVsZW1lbnRcIlxuICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gIHR5cGU9XCJudW1iZXJcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgOm1pbj1cIm1pblwiXG4gIDptYXg9XCJtYXhcIlxuICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4pXG4gIHRlbXBsYXRlKCNhZnRlcilcbiAgICBidXR0b24uZGl0by1idXR0b24tY2xlYXIuZGl0by1idXR0b24tb3ZlcmxheShcbiAgICAgIHYtaWY9XCJzaG93Q2xlYXJCdXR0b25cIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWRcIlxuICAgICAgQGNsaWNrLnN0b3A9XCJjbGVhclwiXG4gICAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBOdW1iZXJNaXhpbiBmcm9tICcuLi9taXhpbnMvTnVtYmVyTWl4aW4uanMnXG5pbXBvcnQgeyBJbnB1dEZpZWxkIH0gZnJvbSAnQGRpdG9qcy91aS9zcmMnXG5cbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKFxuICBbJ251bWJlcicsICdpbnRlZ2VyJ10sXG4gIC8vIEB2dWUvY29tcG9uZW50XG4gIHtcbiAgICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gICAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gICAgbmF0aXZlRmllbGQ6IHRydWUsXG4gICAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGlzSW50ZWdlcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudHlwZSA9PT0gJ2ludGVnZXInXG4gICAgICB9XG4gICAgfVxuICB9XG4pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG4vLyBPbmx5IHNob3cgc3BpbiBidXR0b25zIGlmIHRoZSBudW1iZXIgY29tcG9uZW50IGRlZmluZXMgYSBzdGVwIHNpemUuXG5pbnB1dFt0eXBlPSdudW1iZXInXTpub3QoW3N0ZXBdKSB7XG4gICY6Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sXG4gICY6Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b24ge1xuICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbm9uZTtcbiAgICBtYXJnaW46IDA7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tb2JqZWN0KFxuICB2LWlmPVwiaXNSZWFkeVwiXG4gIDppZD1cImRhdGFQYXRoXCJcbilcbiAgLmRpdG8tb2JqZWN0LWNvbnRlbnQoXG4gICAgdi1pZj1cIm9iamVjdERhdGFcIlxuICApXG4gICAgLy8tIFN1cHBvcnQgdGhlIHNhbWUgcmVuZGVyaW5nIG9wdGlvbnMgYXMgVHlwZUxpc3Q6XG4gICAgRGl0b1NjaGVtYUlubGluZWQoXG4gICAgICB2LWlmPVwiaXNJbmxpbmVkXCJcbiAgICAgIDpsYWJlbD1cIm9iamVjdExhYmVsXCJcbiAgICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIG9iamVjdERhdGEsIGNvbnRleHQpXCJcbiAgICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICAgIDpkYXRhPVwib2JqZWN0RGF0YVwiXG4gICAgICA6bWV0YT1cIm5lc3RlZE1ldGFcIlxuICAgICAgOnN0b3JlPVwic3RvcmVcIlxuICAgICAgOmRpc2FibGVkPVwiZGlzYWJsZWQgfHwgaXNMb2FkaW5nXCJcbiAgICAgIDpjb2xsYXBzZWQ9XCJjb2xsYXBzZWRcIlxuICAgICAgOmNvbGxhcHNpYmxlPVwiY29sbGFwc2libGVcIlxuICAgICAgOmRlbGV0YWJsZT1cIm9iamVjdERhdGEgJiYgZGVsZXRhYmxlXCJcbiAgICAgIDplZGl0YWJsZT1cIm9iamVjdERhdGEgJiYgZWRpdGFibGVcIlxuICAgICAgOmVkaXRQYXRoPVwicGF0aFwiXG4gICAgICA6YWNjdW11bGF0ZWRCYXNpcz1cImFjY3VtdWxhdGVkQmFzaXNcIlxuICAgICAgQGRlbGV0ZT1cImRlbGV0ZUl0ZW0ob2JqZWN0RGF0YSlcIlxuICAgIClcbiAgICBjb21wb25lbnQoXG4gICAgICB2LWVsc2UtaWY9XCJzY2hlbWEuY29tcG9uZW50XCJcbiAgICAgIDppcz1cInNjaGVtYS5jb21wb25lbnRcIlxuICAgICAgOmRhdGFQYXRoPVwiZGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICAgIDpuZXN0ZWQ9XCJmYWxzZVwiXG4gICAgKVxuICAgIHNwYW4oXG4gICAgICB2LWVsc2UtaWY9XCJyZW5kZXJcIlxuICAgICAgdi1odG1sPVwicmVuZGVyKGdldENvbnRleHQoKSlcIlxuICAgIClcbiAgICBzcGFuKFxuICAgICAgdi1lbHNlXG4gICAgICB2LWh0bWw9XCJnZXRJdGVtTGFiZWwoc2NoZW1hLCBvYmplY3REYXRhKVwiXG4gICAgKVxuICAvLy0gTk9URTogYERpdG9FZGl0QnV0dG9uc2AgaGVyZSBvbmx5IGhhbmRsZSB0aGUgY3JlYXRlIGJ1dHRvbiBvdXRzaWRlIG9mIHRoZVxuICAvLy0gc2NoZW1hLCB0aGUgZWRpdCBidXR0b25zIGluc2lkZSBhcmUgaGFuZGxlZCBieSBgRGl0b1NjaGVtYUlubGluZWRgLlxuICBEaXRvRWRpdEJ1dHRvbnMoXG4gICAgOmJ1dHRvbnM9XCJidXR0b25TY2hlbWFzXCJcbiAgICA6c2NoZW1hPVwic2NoZW1hXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJvYmplY3REYXRhXCJcbiAgICA6cGF0aD1cInBhdGhcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkIHx8IGlzTG9hZGluZ1wiXG4gICAgOmNyZWF0YWJsZT1cImNyZWF0YWJsZVwiXG4gICAgOmNyZWF0ZVBhdGg9XCJwYXRoXCJcbiAgKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBEaXRvQ29udGV4dCBmcm9tICcuLi9EaXRvQ29udGV4dC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQgeyByZXNvbHZlU2NoZW1hQ29tcG9uZW50IH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ29iamVjdCcsIHtcbiAgbWl4aW5zOiBbU291cmNlTWl4aW5dLFxuXG4gIGdldFNvdXJjZVR5cGUodHlwZSkge1xuICAgIC8vIE5vIG5lZWQgZm9yIHRyYW5zZm9ybWF0aW9uIGhlcmUuIFNlZSBUeXBlVHJlZUxpc3QgZm9yIGRldGFpbHMuXG4gICAgcmV0dXJuIHR5cGVcbiAgfSxcblxuICBjb21wdXRlZDoge1xuICAgIG9iamVjdExhYmVsKCkge1xuICAgICAgLy8gT25seSBzaG93IGEgbGFiZWwgaWYgdGhlIG9iamVjdCBpcyBjb2xsYXBzaWJsZS5cbiAgICAgIHJldHVybiB0aGlzLmNvbGxhcHNpYmxlXG4gICAgICAgID8gdGhpcy5nZXRJdGVtTGFiZWwodGhpcy5zY2hlbWEsIHRoaXMub2JqZWN0RGF0YSwgeyBhc09iamVjdDogdHJ1ZSB9KVxuICAgICAgICA6IG51bGxcbiAgICB9XG4gIH0sXG5cbiAgbWV0aG9kczoge1xuICAgIGdldENvbnRleHQoKSB7XG4gICAgICByZXR1cm4gbmV3IERpdG9Db250ZXh0KHRoaXMsIHsgZGF0YTogdGhpcy5vYmplY3REYXRhIH0pXG4gICAgfVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgYXBpLFxuICAgIHNjaGVtYSxcbiAgICBuYW1lLFxuICAgIHJvdXRlcyxcbiAgICBsZXZlbCxcbiAgICBuZXN0ZWQgPSBmYWxzZSxcbiAgICBmbGF0dGVuID0gZmFsc2UsXG4gICAgcHJvY2VzcyA9IG51bGxcbiAgKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudChzY2hlbWEpLFxuICAgICAgU291cmNlTWl4aW4ucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgYXBpLFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIHJvdXRlcyxcbiAgICAgICAgbGV2ZWwsXG4gICAgICAgIG5lc3RlZCxcbiAgICAgICAgZmxhdHRlbixcbiAgICAgICAgcHJvY2Vzc1xuICAgICAgKVxuICAgIF0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1vYmplY3Qge1xuICBkaXNwbGF5OiBmbGV4O1xuICBib3JkZXI6ICRib3JkZXItc3R5bGU7XG4gIGJvcmRlci1yYWRpdXM6ICRib3JkZXItcmFkaXVzO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6ICRmb3JtLXNwYWNpbmc7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIG1pbi13aWR0aDogbWluLWNvbnRlbnQ7XG5cbiAgLmRpdG8tb2JqZWN0LWNvbnRlbnQge1xuICAgIGZsZXg6IDAgMSAxMDAlO1xuICB9XG5cbiAgPiAuZGl0by1lZGl0LWJ1dHRvbnMge1xuICAgIGZsZXg6IDEgMCAwJTtcbiAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZztcbiAgfVxufVxuPC9zdHlsZT5cbiIsIjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5cbi8vIEB2dWUvY29tcG9uZW50XG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcigncGFuZWwnLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBleGNsdWRlVmFsdWU6IHRydWUsXG4gIGdlbmVyYXRlTGFiZWw6IGZhbHNlLFxuICBvbWl0U3BhY2luZzogdHJ1ZSxcblxuICBnZXRQYW5lbFNjaGVtYShhcGksIHNjaGVtYSkge1xuICAgIC8vIEZvciBhIFR5cGVQYW5lbCwgdGhlIGNvbXBvbmVudCBzY2hlbWEgaXMgYWxzbyB0aGUgcGFuZWwgc2NoZW1hLCBidXRcbiAgICAvLyByZW1vdmUgdGhlIGFkZGVkIG5hbWUsIHNvIGl0IGRvZXNuJ3QgZ2V0IGFwcGVuZGVkIHR3aWNlIHRvIGRhdGEtcGF0aC5cbiAgICBjb25zdCB7IG5hbWUsIC4uLnBhbmVsIH0gPSBzY2hlbWFcbiAgICByZXR1cm4gcGFuZWxcbiAgfVxufSlcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIDp2YWx1ZT1cInByb2dyZXNzVmFsdWVcIlxuICA6bWF4PVwicHJvZ3Jlc3NNYXhcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3Byb2dyZXNzJywge1xuICBtaXhpbnM6IFtOdW1iZXJNaXhpbl0sXG4gIGNvbXB1dGVkOiB7XG4gICAgcHJvZ3Jlc3NWYWx1ZSgpIHtcbiAgICAgIGxldCB7IHZhbHVlLCByYW5nZSwgc3RlcCB9ID0gdGhpc1xuICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChyYW5nZSkge1xuICAgICAgICAgIHZhbHVlIC09IHJhbmdlWzBdXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0ZXApIHtcbiAgICAgICAgICB2YWx1ZSA9IE1hdGgucm91bmQodmFsdWUgLyBzdGVwKSAqIHN0ZXBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsdWUgPSAnJ1xuICAgICAgfVxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcblxuICAgIHByb2dyZXNzTWF4KCkge1xuICAgICAgY29uc3QgeyByYW5nZSB9ID0gdGhpc1xuICAgICAgcmV0dXJuIHJhbmdlID8gcmFuZ2VbMV0gLSByYW5nZVswXSA6IG51bGxcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG51bC5kaXRvLXJhZGlvLWJ1dHRvbnMoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgOmNsYXNzPVwiYGRpdG8tbGF5b3V0LSR7c2NoZW1hLmxheW91dCB8fCAndmVydGljYWwnfWBcIlxuKVxuICBsaShcbiAgICB2LWZvcj1cIm9wdGlvbiBpbiBvcHRpb25zXCJcbiAgKVxuICAgIGxhYmVsXG4gICAgICBpbnB1dC5kaXRvLXJhZGlvLWJ1dHRvbihcbiAgICAgICAgcmVmPVwiZWxlbWVudFwiXG4gICAgICAgIHYtbW9kZWw9XCJzZWxlY3RlZFZhbHVlXCJcbiAgICAgICAgdHlwZT1cInJhZGlvXCJcbiAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0aW9uKVwiXG4gICAgICAgIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuICAgICAgKVxuICAgICAgfCB7eyBnZXRMYWJlbEZvck9wdGlvbihvcHRpb24pIH19XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3JhZGlvJywge1xuICBtaXhpbnM6IFtPcHRpb25zTWl4aW5dLFxuXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuICBkZWZhdWx0V2lkdGg6ICdhdXRvJ1xufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXJhZGlvLWJ1dHRvbnMge1xuICBsYWJlbCB7XG4gICAgQGV4dGVuZCAlaW5wdXQtYm9yZGVybGVzcztcbiAgfVxuXG4gIC5kaXRvLXJhZGlvLWJ1dHRvbiB7XG4gICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNlY3Rpb24oOmNsYXNzPVwieyAnZGl0by1zZWN0aW9uLS1sYWJlbGxlZCc6IGhhc0xhYmVsIH1cIilcbiAgRGl0b1NjaGVtYUlubGluZWQuZGl0by1zZWN0aW9uX19zY2hlbWEoXG4gICAgOmxhYmVsPVwibGFiZWxcIlxuICAgIDpzY2hlbWE9XCJnZXRJdGVtRm9ybVNjaGVtYShzY2hlbWEsIGl0ZW0sIGNvbnRleHQpXCJcbiAgICA6ZGF0YVBhdGg9XCJkYXRhUGF0aFwiXG4gICAgOmRhdGE9XCJpdGVtXCJcbiAgICA6bWV0YT1cIm1ldGFcIlxuICAgIDpzdG9yZT1cInN0b3JlXCJcbiAgICA6cGFkZGluZz1cImhhc0xhYmVsID8gJ25lc3RlZCcgOiAnaW5saW5lZCdcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6Y29sbGFwc2VkPVwiY29sbGFwc2VkXCJcbiAgICA6Y29sbGFwc2libGU9XCJjb2xsYXBzaWJsZVwiXG4gICAgOmxhYmVsTm9kZT1cImxhYmVsTm9kZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuaW1wb3J0IHsgZ2V0SXRlbUZvcm1TY2hlbWEsIHByb2Nlc3NTY2hlbWFDb21wb25lbnRzIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlY3Rpb24nLCB7XG4gIGRlZmF1bHRWYWx1ZTogKCkgPT4gdW5kZWZpbmVkLCAvLyBDYWxsYmFjayB0byBvdmVycmlkZSBgZGVmYXVsdFZhbHVlOiBudWxsYFxuICBpZ25vcmVNaXNzaW5nVmFsdWU6IHNjaGVtYSA9PiAhc2NoZW1hLm5lc3RlZCAmJiAhKCdkZWZhdWx0JyBpbiBzY2hlbWEpLFxuICBkZWZhdWx0TmVzdGVkOiBmYWxzZSxcbiAgZ2VuZXJhdGVMYWJlbDogZmFsc2UsXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICBpdGVtKCkge1xuICAgICAgcmV0dXJuIHRoaXMubmVzdGVkID8gdGhpcy52YWx1ZSA6IHRoaXMuZGF0YVxuICAgIH0sXG5cbiAgICBoYXNMYWJlbCgpIHtcbiAgICAgIHJldHVybiAhIXRoaXMuc2NoZW1hLmxhYmVsXG4gICAgfSxcblxuICAgIGNvbGxhcHNpYmxlOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2libGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogbnVsbCwgLy8gc28gdGhhdCBgPz9gIGJlbG93IGNhbiBkbyBpdHMgdGhpbmc6XG4gICAgICBnZXQoY29sbGFwc2libGUpIHtcbiAgICAgICAgcmV0dXJuICEhKGNvbGxhcHNpYmxlID8/IHRoaXMuY29sbGFwc2VkICE9PSBudWxsKVxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgY29sbGFwc2VkOiBnZXRTY2hlbWFBY2Nlc3NvcignY29sbGFwc2VkJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IG51bGxcbiAgICB9KVxuICB9LFxuXG4gIG1ldGhvZHM6IHtcbiAgICBnZXRJdGVtRm9ybVNjaGVtYVxuICB9LFxuXG4gIGFzeW5jIHByb2Nlc3NTY2hlbWEoYXBpLCBzY2hlbWEsIG5hbWUsIHJvdXRlcywgbGV2ZWwpIHtcbiAgICAvLyBQcm9jZXNzIHNlY3Rpb24gY29tcG9uZW50cyBzbyB0aGVpciBmb3JtcyBnZXQgcmVzb2x2ZWQgdG9vLlxuICAgIGF3YWl0IHByb2Nlc3NTY2hlbWFDb21wb25lbnRzKGFwaSwgc2NoZW1hLCByb3V0ZXMsIGxldmVsKVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tc2VjdGlvbiB7XG4gICYtLWxhYmVsbGVkIHtcbiAgICBib3JkZXI6ICRib3JkZXItd2lkdGggc29saWQgdHJhbnNwYXJlbnQ7XG4gICAgYm9yZGVyLXJhZGl1czogJGJvcmRlci1yYWRpdXM7XG4gICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMnMgJGVhc2Utb3V0LXF1YXJ0O1xuICAgIG1hcmdpbi10b3A6ICRmb3JtLXNwYWNpbmctaGFsZjtcblxuICAgICY6aGFzKC5kaXRvLXNjaGVtYS0tb3Blbikge1xuICAgICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsIjx0ZW1wbGF0ZSBsYW5nPVwicHVnXCI+XG4vLy0gTmVzdGluZyBpcyBuZWVkZWQgdG8gbWFrZSBhbiBhcnJvdyBhcHBlYXIgb3ZlciB0aGUgc2VsZWN0IGl0ZW06XG4uZGl0by1zZWxlY3RcbiAgLmRpdG8tc2VsZWN0X19pbm5lclxuICAgIHNlbGVjdChcbiAgICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICAgIHJlZj1cImVsZW1lbnRcIlxuICAgICAgdi1tb2RlbD1cInNlbGVjdGVkVmFsdWVcIlxuICAgICAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gICAgICBAbW91c2Vkb3duPVwicG9wdWxhdGUgPSB0cnVlXCJcbiAgICAgIEBmb2N1cz1cInBvcHVsYXRlID0gdHJ1ZVwiXG4gICAgKVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtaWY9XCJwb3B1bGF0ZVwiXG4gICAgICApXG4gICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgIHYtZm9yPVwib3B0aW9uIGluIG9wdGlvbnNcIlxuICAgICAgICApXG4gICAgICAgICAgb3B0Z3JvdXAoXG4gICAgICAgICAgICB2LWlmPVwiZ3JvdXBCeVwiXG4gICAgICAgICAgICA6bGFiZWw9XCJvcHRpb25bZ3JvdXBCeUxhYmVsXVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgb3B0aW9uKFxuICAgICAgICAgICAgICB2LWZvcj1cIm9wdCBpbiBvcHRpb25bZ3JvdXBCeU9wdGlvbnNdXCJcbiAgICAgICAgICAgICAgOnZhbHVlPVwiZ2V0VmFsdWVGb3JPcHRpb24ob3B0KVwiXG4gICAgICAgICAgICApIHt7IGdldExhYmVsRm9yT3B0aW9uKG9wdCkgfX1cbiAgICAgICAgICBvcHRpb24oXG4gICAgICAgICAgICB2LWVsc2VcbiAgICAgICAgICAgIDp2YWx1ZT1cImdldFZhbHVlRm9yT3B0aW9uKG9wdGlvbilcIlxuICAgICAgICAgICkge3sgZ2V0TGFiZWxGb3JPcHRpb24ob3B0aW9uKSB9fVxuICAgICAgdGVtcGxhdGUoXG4gICAgICAgIHYtZWxzZS1pZj1cInNlbGVjdGVkT3B0aW9uXCJcbiAgICAgIClcbiAgICAgICAgb3B0aW9uKDp2YWx1ZT1cInNlbGVjdGVkVmFsdWVcIikge3sgZ2V0TGFiZWxGb3JPcHRpb24oc2VsZWN0ZWRPcHRpb24pIH19XG4gICAgYnV0dG9uLmRpdG8tYnV0dG9uLWNsZWFyLmRpdG8tYnV0dG9uLW92ZXJsYXkoXG4gICAgICB2LWlmPVwic2hvd0NsZWFyQnV0dG9uXCJcbiAgICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICAgIEBjbGljaz1cImNsZWFyXCJcbiAgICApXG4gIC8vLSBFZGl0IGJ1dHRvbiBpcyBuZXZlciBkaXNhYmxlZCwgZXZlbiBpZiB0aGUgZmllbGQgaXMgZGlzYWJsZWQuXG4gIERpdG9FZGl0QnV0dG9ucyhcbiAgICB2LWlmPVwiZWRpdGFibGVcIlxuICAgIDpzY2hlbWE9XCJzY2hlbWFcIlxuICAgIDpkYXRhUGF0aD1cImRhdGFQYXRoXCJcbiAgICA6ZGF0YT1cImRhdGFcIlxuICAgIDptZXRhPVwibWV0YVwiXG4gICAgOnN0b3JlPVwic3RvcmVcIlxuICAgIDpkaXNhYmxlZD1cImZhbHNlXCJcbiAgICA6ZWRpdGFibGU9XCJlZGl0YWJsZVwiXG4gICAgOmVkaXRQYXRoPVwiZWRpdFBhdGhcIlxuICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IE9wdGlvbnNNaXhpbiBmcm9tICcuLi9taXhpbnMvT3B0aW9uc01peGluLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3NlbGVjdCcsIHtcbiAgbWl4aW5zOiBbT3B0aW9uc01peGluXSxcblxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcblxuICBkYXRhKCkge1xuICAgIHJldHVybiB7XG4gICAgICAvLyBEaXNhYmxlIGxhenktcG9wdWxhdGlvbiBmb3Igbm93LlxuICAgICAgLy8gVE9ETzogU2V0IHRvIGBmYWxzZWAgT25jZSBsaW5ldG8gZTJlIHRlc3RzIGFkZHJlc3MgdGhlaXIgaXNzdWVzLlxuICAgICAgcG9wdWxhdGU6IHRydWVcbiAgICB9XG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4vLyBUT0RPOiBNb3ZlIHRvIGRpdG8tdWlcbiRzZWxlY3QtYXJyb3ctcmlnaHQ6IGNhbGMoKCRzZWxlY3QtYXJyb3ctd2lkdGggLSAkc2VsZWN0LWFycm93LXNpemUpIC8gMik7XG5cbi5kaXRvLXNlbGVjdCB7XG4gIGRpc3BsYXk6IGlubGluZS1mbGV4O1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG5cbiAgc2VsZWN0IHtcbiAgICBAZXh0ZW5kICVpbnB1dDtcblxuICAgIHBhZGRpbmctcmlnaHQ6ICRzZWxlY3QtYXJyb3ctd2lkdGg7XG4gIH1cblxuICAvLyBgJl9fX2lubmVyYCBpcyBuZWVkZWQgdG8gbWFrZSB0aGUgZWRpdCBidXR0b25zIGFwcGVhciB0byB0aGUgcmlnaHQgb2YgdGhlXG4gIC8vIHNlbGVjdDpcbiAgJl9faW5uZXIge1xuICAgIGZsZXg6IDE7XG4gICAgcG9zaXRpb246IHJlbGF0aXZlO1xuXG4gICAgJjo6YmVmb3JlIHtcbiAgICAgIEBpbmNsdWRlIGFycm93KCRzZWxlY3QtYXJyb3ctc2l6ZSk7XG5cbiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgICAgIGJvdHRvbTogJHNlbGVjdC1hcnJvdy1ib3R0b207XG4gICAgICByaWdodDogY2FsYygjeyRzZWxlY3QtYXJyb3ctcmlnaHR9ICsgI3skYm9yZGVyLXdpZHRofSk7XG4gICAgfVxuICB9XG5cbiAgLmRpdG8tZWRpdC1idXR0b25zIHtcbiAgICBtYXJnaW4tbGVmdDogJGZvcm0tc3BhY2luZy1oYWxmO1xuICB9XG5cbiAgLy8gSGFuZGxlIC5kaXRvLXdpZHRoLWZpbGwgc2VwYXJhdGVseSBkdWUgdG8gcmVxdWlyZWQgbmVzdGluZyBvZiBzZWxlY3Q6XG4gICYuZGl0by13aWR0aC1maWxsIHtcbiAgICBzZWxlY3Qge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICB9XG5cbiAgJi5kaXRvLWRpc2FibGVkOjphZnRlciB7XG4gICAgYm9yZGVyLWNvbG9yOiAkYm9yZGVyLWNvbG9yO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXNsaWRlclxuICBpbnB1dC5kaXRvLXJhbmdlKFxuICAgIDppZD1cImRhdGFQYXRoXCJcbiAgICByZWY9XCJlbGVtZW50XCJcbiAgICB2LW1vZGVsPVwiaW5wdXRWYWx1ZVwiXG4gICAgdHlwZT1cInJhbmdlXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbiAgSW5wdXRGaWVsZC5kaXRvLW51bWJlcihcbiAgICB2LWlmPVwiaW5wdXRcIlxuICAgIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgICB0eXBlPVwibnVtYmVyXCJcbiAgICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbiAgICA6bWluPVwibWluXCJcbiAgICA6bWF4PVwibWF4XCJcbiAgICA6c3RlcD1cInN0ZXBWYWx1ZVwiXG4gIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgTnVtYmVyTWl4aW4gZnJvbSAnLi4vbWl4aW5zL051bWJlck1peGluLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcbmltcG9ydCB7IElucHV0RmllbGQgfSBmcm9tICdAZGl0b2pzL3VpL3NyYydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKCdzbGlkZXInLCB7XG4gIG1peGluczogW051bWJlck1peGluXSxcbiAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gIG5hdGl2ZUZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgLy8gVE9ETzogUmVuYW1lIHRvIGBzaG93SW5wdXRgP1xuICAgIGlucHV0OiBnZXRTY2hlbWFBY2Nlc3NvcignaW5wdXQnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogdHJ1ZVxuICAgIH0pXG4gIH1cbn0pXG48L3NjcmlwdD5cblxuPHN0eWxlIGxhbmc9XCJzY3NzXCI+XG5AaW1wb3J0ICcuLi9zdHlsZXMvX2ltcG9ydHMnO1xuXG4uZGl0by1zbGlkZXIge1xuICBAZXh0ZW5kICVpbnB1dDtcblxuICBkaXNwbGF5OiBmbGV4O1xuXG4gIC5kaXRvLXJhbmdlIHtcbiAgICBmbGV4OiBhdXRvO1xuICAgIGhlaWdodDogY2FsYygxZW0gKiB2YXIoLS1saW5lLWhlaWdodCkpO1xuICB9XG5cbiAgLmRpdG8tbnVtYmVyIHtcbiAgICBib3JkZXI6IDA7XG4gICAgcGFkZGluZzogMDtcbiAgICB0ZXh0LWFsaWduOiByaWdodDtcbiAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zO1xuICB9XG59XG48L3N0eWxlPlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cblN3aXRjaEJ1dHRvbi5kaXRvLXN3aXRjaChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgOmxhYmVscz1cImxhYmVsc1wiXG4gIHYtYmluZD1cImF0dHJpYnV0ZXNcIlxuKVxuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCB7IFN3aXRjaEJ1dHRvbiB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3N3aXRjaCcsIHtcbiAgZGVmYXVsdFZhbHVlOiBmYWxzZSxcbiAgZGVmYXVsdFdpZHRoOiAnYXV0bycsXG5cbiAgY29tcG9uZW50czoge1xuICAgIFN3aXRjaEJ1dHRvblxuICB9LFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGFiZWxzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuc2NoZW1hLmxhYmVsc1xuICAgIH1cbiAgfVxufSlcbjwvc2NyaXB0PlxuXG48c3R5bGUgbGFuZz1cInNjc3NcIj5cbkBpbXBvcnQgJy4uL3N0eWxlcy9faW1wb3J0cyc7XG5cbi5kaXRvLXN3aXRjaCB7XG4gIC5kaXRvLXN3aXRjaC1sYWJlbCB7XG4gICAgZm9udC1zaXplOiAkZm9udC1zaXplLXNtYWxsO1xuICB9XG59XG48L3N0eWxlPlxuIiwiaW1wb3J0IHsgaXNTdHJpbmcgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuaW1wb3J0IHsgZ2V0RGVmYXVsdFZhbHVlIH0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuaW1wb3J0IHsgZ2V0U2NoZW1hQWNjZXNzb3IgfSBmcm9tICcuLi91dGlscy9hY2Nlc3Nvci5qcydcblxuLy8gQHZ1ZS9jb21wb25lbnRcbmV4cG9ydCBkZWZhdWx0IHtcbiAgY29tcHV0ZWQ6IHtcbiAgICB0cmltOiBnZXRTY2hlbWFBY2Nlc3NvcigndHJpbScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pXG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUpIHtcbiAgICBpZiAoc2NoZW1hLnRyaW0gJiYgdmFsdWUgIT0gbnVsbCAmJiBpc1N0cmluZyh2YWx1ZSkpIHtcbiAgICAgIC8vIFRleHQgZmllbGRzIGRvbid0IG5lY2Vzc2FyaWx5IGhhdmUgYSBgU3RyaW5nYCB2YWx1ZSB3aGVuIGBmb3JtYXQoKWBcbiAgICAgIC8vIHdpdGhvdXQgYHBhcnNlKClgIGlzIHVzZWQuXG4gICAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKVxuICAgIH1cbiAgICBpZiAodmFsdWUgPT09ICcnKSB7XG4gICAgICB2YWx1ZSA9IGdldERlZmF1bHRWYWx1ZShzY2hlbWEpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxuICB9XG59XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuSW5wdXRGaWVsZC5kaXRvLXRleHQoXG4gIDppZD1cImRhdGFQYXRoXCJcbiAgcmVmPVwiZWxlbWVudFwiXG4gIHYtbW9kZWw9XCJpbnB1dFZhbHVlXCJcbiAgOnR5cGU9XCJpbnB1dFR5cGVcIlxuICB2LWJpbmQ9XCJhdHRyaWJ1dGVzXCJcbilcbiAgdGVtcGxhdGUoI2FmdGVyKVxuICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbi1jbGVhci5kaXRvLWJ1dHRvbi1vdmVybGF5KFxuICAgICAgdi1pZj1cInNob3dDbGVhckJ1dHRvblwiXG4gICAgICA6ZGlzYWJsZWQ9XCJkaXNhYmxlZFwiXG4gICAgICBAY2xpY2suc3RvcD1cImNsZWFyXCJcbiAgICApXG48L3RlbXBsYXRlPlxuXG48c2NyaXB0PlxuaW1wb3J0IERpdG9UeXBlQ29tcG9uZW50IGZyb20gJy4uL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFRleHRNaXhpbiBmcm9tICcuLi9taXhpbnMvVGV4dE1peGluJ1xuaW1wb3J0IHsgSW5wdXRGaWVsZCB9IGZyb20gJ0BkaXRvanMvdWkvc3JjJ1xuXG5jb25zdCBtYXNrZWRQYXNzd29yZCA9ICcqKioqKioqKioqKioqKioqJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgW1xuICAgICd0ZXh0JyxcbiAgICAnZW1haWwnLFxuICAgICd1cmwnLFxuICAgICdob3N0bmFtZScsXG4gICAgJ2RvbWFpbicsXG4gICAgJ3RlbCcsXG4gICAgJ3Bhc3N3b3JkJyxcbiAgICAnY3JlZGl0Y2FyZCdcbiAgXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW1RleHRNaXhpbl0sXG4gICAgY29tcG9uZW50czogeyBJbnB1dEZpZWxkIH0sXG4gICAgbmF0aXZlRmllbGQ6IHRydWUsXG4gICAgdGV4dEZpZWxkOiB0cnVlLFxuICAgIGlnbm9yZU1pc3NpbmdWYWx1ZTogc2NoZW1hID0+IHNjaGVtYS50eXBlID09PSAncGFzc3dvcmQnLFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIGlucHV0VHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjcmVkaXRjYXJkOiAndGV4dCcsXG4gICAgICAgICAgICBob3N0bmFtZTogJ3RleHQnLFxuICAgICAgICAgICAgZG9tYWluOiAndGV4dCdcbiAgICAgICAgICB9W3RoaXMudHlwZV0gfHxcbiAgICAgICAgICB0aGlzLnR5cGVcbiAgICAgICAgKVxuICAgICAgfSxcblxuICAgICAgaW5wdXRWYWx1ZToge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHRoaXMudHlwZSA9PT0gJ3Bhc3N3b3JkJyAmJlxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9PT0gdW5kZWZpbmVkICYmXG4gICAgICAgICAgICAhdGhpcy5mb2N1c2VkXG4gICAgICAgICAgKVxuICAgICAgICAgICAgPyBtYXNrZWRQYXNzd29yZFxuICAgICAgICAgICAgOiB0aGlzLnZhbHVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgc2V0KHZhbHVlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgbWV0aG9kczoge1xuICAgICAgZ2V0VmFsaWRhdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IHJ1bGUgPSB7XG4gICAgICAgICAgZW1haWw6ICdlbWFpbCcsXG4gICAgICAgICAgdXJsOiAndXJsJyxcbiAgICAgICAgICBob3N0bmFtZTogJ2hvc3RuYW1lJyxcbiAgICAgICAgICBkb21haW46ICdkb21haW4nLFxuICAgICAgICAgIHBhc3N3b3JkOiAncGFzc3dvcmQnLFxuICAgICAgICAgIGNyZWRpdGNhcmQ6ICdjcmVkaXRjYXJkJ1xuICAgICAgICB9W3RoaXMudHlwZV1cbiAgICAgICAgcmV0dXJuIHJ1bGUgPyB7IFtydWxlXTogdHJ1ZSB9IDoge31cbiAgICAgIH1cbiAgICB9XG4gIH1cbilcbjwvc2NyaXB0PlxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbnRleHRhcmVhLmRpdG8tdGV4dGFyZWEuZGl0by1pbnB1dChcbiAgOmlkPVwiZGF0YVBhdGhcIlxuICByZWY9XCJlbGVtZW50XCJcbiAgdi1tb2RlbD1cInZhbHVlXCJcbiAgdi1iaW5kPVwiYXR0cmlidXRlc1wiXG4gIDpyb3dzPVwibGluZXNcIlxuICA6Y2xhc3M9XCJ7ICdkaXRvLXJlc2l6YWJsZSc6IHJlc2l6YWJsZSB9XCJcbilcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgVGV4dE1peGluIGZyb20gJy4uL21peGlucy9UZXh0TWl4aW4nXG5pbXBvcnQgeyBnZXRTY2hlbWFBY2Nlc3NvciB9IGZyb20gJy4uL3V0aWxzL2FjY2Vzc29yLmpzJ1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3RleHRhcmVhJywge1xuICBtaXhpbnM6IFtUZXh0TWl4aW5dLFxuICBuYXRpdmVGaWVsZDogdHJ1ZSxcbiAgdGV4dEZpZWxkOiB0cnVlLFxuXG4gIGNvbXB1dGVkOiB7XG4gICAgbGluZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5zY2hlbWEubGluZXMgfHwgNFxuICAgIH0sXG5cbiAgICByZXNpemFibGU6IGdldFNjaGVtYUFjY2Vzc29yKCdyZXNpemFibGUnLCB7XG4gICAgICB0eXBlOiBCb29sZWFuLFxuICAgICAgZGVmYXVsdDogZmFsc2VcbiAgICB9KVxuICB9XG59KVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdGV4dGFyZWEge1xuICBkaXNwbGF5OiBibG9jaztcbiAgcmVzaXplOiBub25lO1xuICBtaW4taGVpZ2h0OiBjYWxjKDFlbSAqIHZhcigtLWxpbmUtaGVpZ2h0KSArICN7MiAqICRpbnB1dC1wYWRkaW5nLXZlcn0pO1xuXG4gICYuZGl0by1yZXNpemFibGUge1xuICAgIHJlc2l6ZTogdmVydGljYWw7XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCI8dGVtcGxhdGUgbGFuZz1cInB1Z1wiPlxuLmRpdG8tdHJlZS1saXN0XG4gIERpdG9TY29wZXMoXG4gICAgdi1pZj1cInNjb3Blc1wiXG4gICAgOnF1ZXJ5PVwicXVlcnlcIlxuICAgIDpzY29wZXM9XCJzY29wZXNcIlxuICApXG4gIC5kaXRvLXRyZWUtcGFuZWxcbiAgICBEaXRvVHJlZUl0ZW0oXG4gICAgICA6c2NoZW1hPVwidHJlZVNjaGVtYVwiXG4gICAgICA6ZGF0YVBhdGg9XCJ0cmVlRGF0YVBhdGhcIlxuICAgICAgOmRhdGE9XCJ0cmVlRGF0YVwiXG4gICAgICA6ZHJhZ2dhYmxlPVwiZHJhZ2dhYmxlXCJcbiAgICAgIDpvcGVuPVwidHJ1ZVwiXG4gICAgKVxuICAgIC5kaXRvLXRyZWUtZm9ybS1jb250YWluZXIoXG4gICAgICB2LWlmPVwiaGFzRWRpdGFibGVGb3Jtc1wiXG4gICAgKVxuICAgICAgLy8tIEluY2x1ZGUgYSByb3V0ZXItdmlldyBmb3IgdGhlIG9wdGlvbmFsIERpdG9Gb3JtSW5saW5lZFxuICAgICAgUm91dGVyVmlld1xuPC90ZW1wbGF0ZT5cblxuPHNjcmlwdD5cbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuLi9EaXRvVHlwZUNvbXBvbmVudC5qcydcbmltcG9ydCBTb3VyY2VNaXhpbiBmcm9tICcuLi9taXhpbnMvU291cmNlTWl4aW4uanMnXG5pbXBvcnQge1xuICBoYXNGb3JtU2NoZW1hLFxuICBnZXRGb3JtU2NoZW1hcyxcbiAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHNcbn0gZnJvbSAnLi4vdXRpbHMvc2NoZW1hLmpzJ1xuXG5leHBvcnQgZGVmYXVsdCBEaXRvVHlwZUNvbXBvbmVudC5yZWdpc3RlcihcbiAgWyd0cmVlLWxpc3QnLCAndHJlZS1vYmplY3QnXSxcbiAgLy8gQHZ1ZS9jb21wb25lbnRcbiAge1xuICAgIG1peGluczogW1NvdXJjZU1peGluXSxcblxuICAgIHByb3ZpZGUoKSB7XG4gICAgICByZXR1cm4geyBjb250YWluZXI6IHRoaXMgfVxuICAgIH0sXG5cbiAgICBnZXRTb3VyY2VUeXBlKHR5cGUpIHtcbiAgICAgIHJldHVybiB0eXBlID09PSAndHJlZS1vYmplY3QnID8gJ29iamVjdCcgOiAnbGlzdCdcbiAgICB9LFxuXG4gICAgY29tcHV0ZWQ6IHtcbiAgICAgIHBhdGgoKSB7XG4gICAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5wYXRoYDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZm9ybUNvbXBvbmVudD8ucGF0aFxuICAgICAgfSxcblxuICAgICAgZWRpdFBhdGgoKSB7XG4gICAgICAgIC8vIEFjY2Vzc2VkIGZyb20gRGl0b1RyZWVJdGVtIHRocm91Z2ggYGNvbnRhaW5lci5lZGl0UGF0aGA6XG4gICAgICAgIHJldHVybiB0aGlzLiRyb3V0ZS5wYXRoLnNsaWNlKHRoaXMucGF0aD8ubGVuZ3RoKVxuICAgICAgfSxcblxuICAgICAgdHJlZURhdGEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgID8geyBbdGhpcy5uYW1lXTogdGhpcy52YWx1ZSB9XG4gICAgICAgICAgOiB0aGlzLnZhbHVlXG4gICAgICB9LFxuXG4gICAgICB0cmVlRGF0YVBhdGgoKSB7XG4gICAgICAgIC8vIFJlbW92ZSBgbmFtZWAgZnJvbSBgZGF0YVBhdGhgLCBhcyBpdCBpcyBhZGRlZFxuICAgICAgICAvLyB0byBgdHJlZURhdGFgIGFuZCBgdHJlZVNjaGVtYWBcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNMaXN0U291cmNlXG4gICAgICAgICAgPyB0aGlzLmRhdGFQYXRoLnNsaWNlKDAsIHRoaXMuZGF0YVBhdGgubGVuZ3RoIC0gdGhpcy5uYW1lLmxlbmd0aClcbiAgICAgICAgICA6IHRoaXMuZGF0YVBhdGhcbiAgICAgIH0sXG5cbiAgICAgIHRyZWVTY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzTGlzdFNvdXJjZVxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBjaGlsZHJlbjoge1xuICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICAgICAgICAuLi50aGlzLnNjaGVtYVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgOiB0aGlzLnNjaGVtYVxuICAgICAgfSxcblxuICAgICAgaGFzRWRpdGFibGVGb3JtcygpIHtcbiAgICAgICAgY29uc3QgaGFzRWRpdGFibGVGb3JtcyA9IHNjaGVtYSA9PiB7XG4gICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGhhc0Zvcm1TY2hlbWEoc2NoZW1hKSAmJiAoXG4gICAgICAgICAgICAgIHRoaXMuZ2V0U2NoZW1hVmFsdWUoJ2VkaXRhYmxlJywge1xuICAgICAgICAgICAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICAgICAgICAgICAgZGVmYXVsdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgc2NoZW1hXG4gICAgICAgICAgICAgIH0pIHx8XG4gICAgICAgICAgICAgIHNjaGVtYS5jaGlsZHJlbiAmJlxuICAgICAgICAgICAgICBoYXNFZGl0YWJsZUZvcm1zKHNjaGVtYS5jaGlsZHJlbilcbiAgICAgICAgICAgIClcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGhhc0VkaXRhYmxlRm9ybXModGhpcy5zY2hlbWEpXG4gICAgICB9XG4gICAgfSxcblxuICAgIGFzeW5jIHByb2Nlc3NTY2hlbWEoXG4gICAgICBhcGksXG4gICAgICBzY2hlbWEsXG4gICAgICBuYW1lLFxuICAgICAgcm91dGVzLFxuICAgICAgbGV2ZWwsXG4gICAgICBuZXN0ZWQgPSB0cnVlLFxuICAgICAgZmxhdHRlbiA9IGZhbHNlLFxuICAgICAgcHJvY2VzcyA9IG51bGxcbiAgICApIHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgcmVzb2x2ZVNjaGVtYUNvbXBvbmVudHMoc2NoZW1hLnByb3BlcnRpZXMpLFxuICAgICAgICBTb3VyY2VNaXhpbi5wcm9jZXNzU2NoZW1hKFxuICAgICAgICAgIGFwaSxcbiAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICByb3V0ZXMsXG4gICAgICAgICAgbGV2ZWwsXG4gICAgICAgICAgbmVzdGVkLFxuICAgICAgICAgIGZsYXR0ZW4sXG4gICAgICAgICAgLy8gUGFzcyBwcm9jZXNzKCkgdG8gYWRkIG1vcmUgcm91dGVzIHRvIGNoaWxkUm91dGVzOlxuICAgICAgICAgIChjaGlsZFJvdXRlcywgbGV2ZWwpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHNjaGVtYVxuICAgICAgICAgICAgaWYgKGNoaWxkcmVuKSB7XG4gICAgICAgICAgICAgIC8vIEFkZCBgdHlwZWAgdG8gdGhlIG5lc3RlZCB0cmVlIGxpc3QuXG4gICAgICAgICAgICAgIGNoaWxkcmVuLnR5cGUgPSAndHJlZS1saXN0J1xuICAgICAgICAgICAgICAvLyBSZWN1cnNpdmVseSBjYWxsIGBwcm9jZXNzU2NoZW1hKClgIGZvciB0aGUgbmVzdGVkIHRyZWUgbGlzdDpcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc1NjaGVtYShcbiAgICAgICAgICAgICAgICBhcGksXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgY2hpbGRyZW4ubmFtZSxcbiAgICAgICAgICAgICAgICBjaGlsZFJvdXRlcyxcbiAgICAgICAgICAgICAgICBsZXZlbCxcbiAgICAgICAgICAgICAgICBuZXN0ZWQsXG4gICAgICAgICAgICAgICAgdHJ1ZSwgLy8gUGFzcyBgdHJ1ZWAgZm9yIGBmbGF0dGVuYCBpbiB0cmVlIGxpc3RzLlxuICAgICAgICAgICAgICAgIHByb2Nlc3NcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgXSlcbiAgICB9LFxuXG4gICAgZ2V0Rm9ybVNjaGVtYXNGb3JQcm9jZXNzaW5nKHNjaGVtYSwgY29udGV4dCkge1xuICAgICAgLy8gQ29udmVydCBuZXN0ZWQgY2hpbGRyZW4gc2NoZW1hIHRvIHN0YW5kLWFsb25lIHNjaGVtYSBjb21wb25lbnQsXG4gICAgICAvLyBwcmVzZW50IGluIGVhY2ggb2YgdGhlIGZvcm1zLCBhcyByZXF1aXJlZCBieSBgcHJvY2Vzc1NjaGVtYURhdGEoKWBcbiAgICAgIGNvbnN0IHsgY2hpbGRyZW4gfSA9IHNjaGVtYVxuICAgICAgcmV0dXJuIGdldEZvcm1TY2hlbWFzKFxuICAgICAgICBzY2hlbWEsXG4gICAgICAgIGNvbnRleHQsXG4gICAgICAgIGNoaWxkcmVuXG4gICAgICAgICAgPyBmb3JtID0+ICh7XG4gICAgICAgICAgICAgIC4uLmZvcm0sXG4gICAgICAgICAgICAgIGNvbXBvbmVudHM6IHtcbiAgICAgICAgICAgICAgICAuLi5mb3JtLmNvbXBvbmVudHMsXG4gICAgICAgICAgICAgICAgW2NoaWxkcmVuLm5hbWVdOiBjaGlsZHJlblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIDogbnVsbFxuICAgICAgKVxuICAgIH1cbiAgfVxuKVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdHJlZS1saXN0IHtcbiAgQGV4dGVuZCAlZmllbGQ7XG5cbiAgLmRpdG8tdHJlZS1wYW5lbCB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XG5cbiAgICA+IC5kaXRvLXRyZWUtaXRlbSB7XG4gICAgICBmbGV4OiAxIDEgMjUlO1xuICAgIH1cblxuICAgID4gLmRpdG8tdHJlZS1mb3JtLWNvbnRhaW5lciB7XG4gICAgICBmbGV4OiAwIDEgNzUlO1xuICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDtcbiAgICAgIGJhY2tncm91bmQ6ICRjb250ZW50LWNvbG9yLWJhY2tncm91bmQ7XG4gICAgICBib3JkZXItbGVmdDogJGJvcmRlci1zdHlsZTtcbiAgICAgIGJvcmRlci10b3AtcmlnaHQtcmFkaXVzOiAkYm9yZGVyLXJhZGl1cyAtIDE7XG4gICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogJGJvcmRlci1yYWRpdXMgLSAxO1xuICAgICAgbWFyZ2luOiAoLSRpbnB1dC1wYWRkaW5nLXZlcikgKC0kaW5wdXQtcGFkZGluZy1ob3IpO1xuICAgICAgbWFyZ2luLWxlZnQ6ICRpbnB1dC1wYWRkaW5nLWhvcjtcbiAgICB9XG4gIH1cbn1cbjwvc3R5bGU+XG4iLCJpbXBvcnQgeyBmaWxlc2l6ZSB9IGZyb20gJ2ZpbGVzaXplJ1xuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoc2l6ZSkge1xuICByZXR1cm4gZmlsZXNpemUoc2l6ZSwgeyBiYXNlOiAxMCB9KVxufVxuIiwiPHRlbXBsYXRlIGxhbmc9XCJwdWdcIj5cbi5kaXRvLXVwbG9hZFxuICAvLy0gSW4gb3JkZXIgdG8gaGFuZGxlIHVwbG9hZCBidXR0b25zIGluIG11bHRpcGxlIHBvc3NpYmxlIHBsYWNlcywgZGVwZW5kaW5nXG4gIC8vLSBvbiB3aGV0aGVyIHRoZXkgaGFuZGxlIHNpbmdsZSBvciBtdWx0aXBsZSB1cGxvYWRzLCByZW5kZXIgdGhlIHVwbG9hZFxuICAvLy0gY29tcG9uZW50IGludmlzaWJseSBhdCB0aGUgcm9vdCwgYW5kIGRlbGVnYXRlIHRoZSBjbGljayBldmVudHMgdG8gaXQgZnJvbVxuICAvLy0gdGhlIGJ1dHRvbnMgcmVuZGVyZWQgZnVydGhlciBiZWxvdy4gTHVja2lseSB0aGlzIHdvcmtzIHN1cnByaXNpbmdseSB3ZWxsLlxuICBWdWVVcGxvYWQuZGl0by11cGxvYWRfX2lucHV0KFxuICAgIHJlZj1cInVwbG9hZFwiXG4gICAgdi1tb2RlbD1cInVwbG9hZHNcIlxuICAgIDppbnB1dElkPVwiZGF0YVBhdGhcIlxuICAgIDpuYW1lPVwiZGF0YVBhdGhcIlxuICAgIDpkaXNhYmxlZD1cImRpc2FibGVkXCJcbiAgICA6cG9zdEFjdGlvbj1cInVwbG9hZFBhdGhcIlxuICAgIDpleHRlbnNpb25zPVwiZXh0ZW5zaW9uc1wiXG4gICAgOmFjY2VwdD1cImFjY2VwdFwiXG4gICAgOm11bHRpcGxlPVwibXVsdGlwbGVcIlxuICAgIDpzaXplPVwibWF4U2l6ZVwiXG4gICAgOmRyb3A9XCIkZWw/LmNsb3Nlc3QoJy5kaXRvLWNvbnRhaW5lcicpXCJcbiAgICA6ZHJvcERpcmVjdG9yeT1cInRydWVcIlxuICAgIEBpbnB1dC1maWx0ZXI9XCJvbklucHV0RmlsdGVyXCJcbiAgICBAaW5wdXQtZmlsZT1cIm9uSW5wdXRGaWxlXCJcbiAgKVxuICB0YWJsZS5kaXRvLXRhYmxlLmRpdG8tdGFibGUtc2VwYXJhdG9ycy5kaXRvLXRhYmxlLWJhY2tncm91bmRcbiAgICAvLy0gU3R5bGluZyBjb21lcyBmcm9tIGBEaXRvVGFibGVIZWFkYFxuICAgIHRoZWFkLmRpdG8tdGFibGUtaGVhZFxuICAgICAgdHJcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIEZpbGVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFNpemVcbiAgICAgICAgdGhcbiAgICAgICAgICBzcGFuIFN0YXR1c1xuICAgICAgICB0aFxuICAgICAgICAgIHNwYW5cbiAgICBEaXRvRHJhZ2dhYmxlKFxuICAgICAgdi1tb2RlbD1cImZpbGVzXCJcbiAgICAgIHRhZz1cInRib2R5XCJcbiAgICAgIDpvcHRpb25zPVwiZ2V0RHJhZ2dhYmxlT3B0aW9ucygpXCJcbiAgICAgIDpkcmFnZ2FibGU9XCJkcmFnZ2FibGVcIlxuICAgIClcbiAgICAgIHRlbXBsYXRlKFxuICAgICAgICB2LWlmPVwibXVsdGlwbGUgfHwgIWlzVXBsb2FkQWN0aXZlXCJcbiAgICAgIClcbiAgICAgICAgdHIoXG4gICAgICAgICAgdi1mb3I9XCIoZmlsZSwgaW5kZXgpIGluIGZpbGVzXCJcbiAgICAgICAgICA6a2V5PVwiZmlsZS5uYW1lXCJcbiAgICAgICAgKVxuICAgICAgICAgIHRkKFxuICAgICAgICAgICAgdi1pZj1cInJlbmRlclwiXG4gICAgICAgICAgICB2LWh0bWw9XCJyZW5kZXJGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgKVxuICAgICAgICAgIHRkKFxuICAgICAgICAgICAgdi1lbHNlLWlmPVwiZG93bmxvYWRVcmxzW2luZGV4XVwiXG4gICAgICAgICAgKVxuICAgICAgICAgICAgYShcbiAgICAgICAgICAgICAgOmRvd25sb2FkPVwiZmlsZS5uYW1lXCJcbiAgICAgICAgICAgICAgOmhyZWY9XCJkb3dubG9hZFVybHNbaW5kZXhdXCJcbiAgICAgICAgICAgICAgdGFyZ2V0PVwiX2JsYW5rXCJcbiAgICAgICAgICAgICAgQGNsaWNrLnByZXZlbnQ9XCJvbkNsaWNrRG93bmxvYWQoZmlsZSwgaW5kZXgpXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgRGl0b1VwbG9hZEZpbGUoXG4gICAgICAgICAgICAgICAgOmZpbGU9XCJmaWxlXCJcbiAgICAgICAgICAgICAgICA6dGh1bWJuYWlsPVwidGh1bWJuYWlsc1wiXG4gICAgICAgICAgICAgICAgOnRodW1ibmFpbFVybD1cInRodW1ibmFpbFVybHNbaW5kZXhdXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIHRkKFxuICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgKVxuICAgICAgICAgICAgRGl0b1VwbG9hZEZpbGUoXG4gICAgICAgICAgICAgIDpmaWxlPVwiZmlsZVwiXG4gICAgICAgICAgICAgIDp0aHVtYm5haWw9XCJ0aHVtYm5haWxzXCJcbiAgICAgICAgICAgICAgOnRodW1ibmFpbFVybD1cInRodW1ibmFpbFVybHNbaW5kZXhdXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICB0ZC5kaXRvLXVwbG9hZF9fc2l6ZSB7eyBmb3JtYXRGaWxlU2l6ZShmaWxlLnNpemUpIH19XG4gICAgICAgICAgdGQuZGl0by11cGxvYWRfX3N0YXR1c1xuICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgIHYtaWY9XCJmaWxlLnVwbG9hZFwiXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHRlbXBsYXRlKFxuICAgICAgICAgICAgICAgIHYtaWY9XCJmaWxlLnVwbG9hZC5lcnJvclwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB8IEVycm9yOiB7eyBmaWxlLnVwbG9hZC5lcnJvciB9fVxuICAgICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgICB2LWVsc2UtaWY9XCJmaWxlLnVwbG9hZC5hY3RpdmVcIlxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgfCBVcGxvYWRpbmcuLi5cbiAgICAgICAgICAgICAgdGVtcGxhdGUoXG4gICAgICAgICAgICAgICAgdi1lbHNlLWlmPVwiZmlsZS51cGxvYWQuc3VjY2Vzc1wiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB8IFVwbG9hZGVkXG4gICAgICAgICAgICB0ZW1wbGF0ZShcbiAgICAgICAgICAgICAgdi1lbHNlXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgIHwgU3RvcmVkXG4gICAgICAgICAgdGQuZGl0by1jZWxsLWVkaXQtYnV0dG9uc1xuICAgICAgICAgICAgLmRpdG8tYnV0dG9ucy5kaXRvLWJ1dHRvbnMtcm91bmRcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXVwbG9hZChcbiAgICAgICAgICAgICAgICB2LWlmPVwiIW11bHRpcGxlXCJcbiAgICAgICAgICAgICAgICA6dGl0bGU9XCJ1cGxvYWRUaXRsZVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwib25DbGlja1VwbG9hZFwiXG4gICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLy8tIEZpcmVmb3ggZG9lc24ndCBsaWtlIDxidXR0b24+IGhlcmUsIHNvIHVzZSA8YT4gaW5zdGVhZDpcbiAgICAgICAgICAgICAgYS5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiZHJhZ2dhYmxlXCJcbiAgICAgICAgICAgICAgICB2LWJpbmQ9XCJnZXRCdXR0b25BdHRyaWJ1dGVzKHZlcmJzLmRyYWcpXCJcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICBidXR0b24uZGl0by1idXR0b24oXG4gICAgICAgICAgICAgICAgdi1pZj1cImRlbGV0YWJsZVwiXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgdi1iaW5kPVwiZ2V0QnV0dG9uQXR0cmlidXRlcyh2ZXJicy5kZWxldGUpXCJcbiAgICAgICAgICAgICAgICBAY2xpY2s9XCJkZWxldGVGaWxlKGZpbGUsIGluZGV4KVwiXG4gICAgICAgICAgICAgIClcbiAgICB0Zm9vdChcbiAgICAgIHYtaWY9XCJtdWx0aXBsZSB8fCBpc1VwbG9hZEFjdGl2ZSB8fCAhaGFzRmlsZXNcIlxuICAgIClcbiAgICAgIHRyXG4gICAgICAgIHRkKDpjb2xzcGFuPVwiNFwiKVxuICAgICAgICAgIC5kaXRvLXVwbG9hZC1mb290ZXJcbiAgICAgICAgICAgIHByb2dyZXNzLmRpdG8tcHJvZ3Jlc3MoXG4gICAgICAgICAgICAgIHYtaWY9XCJpc1VwbG9hZEFjdGl2ZVwiXG4gICAgICAgICAgICAgIDp2YWx1ZT1cInVwbG9hZFByb2dyZXNzXCJcbiAgICAgICAgICAgICAgbWF4PVwiMTAwXCJcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5kaXRvLWJ1dHRvbnMuZGl0by1idXR0b25zLXJvdW5kXG4gICAgICAgICAgICAgIGJ1dHRvbi5kaXRvLWJ1dHRvbihcbiAgICAgICAgICAgICAgICB2LWlmPVwiaXNVcGxvYWRBY3RpdmVcIlxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIEBjbGljay5wcmV2ZW50PVwidXBsb2FkLmFjdGl2ZSA9IGZhbHNlXCJcbiAgICAgICAgICAgICAgKSBDYW5jZWxcbiAgICAgICAgICAgICAgYnV0dG9uLmRpdG8tYnV0dG9uLmRpdG8tYnV0dG9uLXVwbG9hZChcbiAgICAgICAgICAgICAgICB2LWlmPVwibXVsdGlwbGUgfHwgIWhhc0ZpbGVzXCJcbiAgICAgICAgICAgICAgICA6dGl0bGU9XCJ1cGxvYWRUaXRsZVwiXG4gICAgICAgICAgICAgICAgQGNsaWNrPVwib25DbGlja1VwbG9hZFwiXG4gICAgICAgICAgICAgIClcbjwvdGVtcGxhdGU+XG5cbjxzY3JpcHQ+XG5pbXBvcnQgRGl0b1R5cGVDb21wb25lbnQgZnJvbSAnLi4vRGl0b1R5cGVDb21wb25lbnQuanMnXG5pbXBvcnQgRGl0b0NvbnRleHQgZnJvbSAnLi4vRGl0b0NvbnRleHQuanMnXG5pbXBvcnQgU29ydGFibGVNaXhpbiBmcm9tICcuLi9taXhpbnMvU29ydGFibGVNaXhpbi5qcydcbmltcG9ydCBwYXJzZUZpbGVTaXplIGZyb20gJ2ZpbGVzaXplLXBhcnNlcidcbmltcG9ydCB7IGdldFNjaGVtYUFjY2Vzc29yIH0gZnJvbSAnLi4vdXRpbHMvYWNjZXNzb3IuanMnXG5pbXBvcnQgeyBmb3JtYXRGaWxlU2l6ZSB9IGZyb20gJy4uL3V0aWxzL3VuaXRzLmpzJ1xuaW1wb3J0IHsgYXBwZW5kRGF0YVBhdGggfSBmcm9tICcuLi91dGlscy9kYXRhLmpzJ1xuaW1wb3J0IHsgaXNBcnJheSwgYXNBcnJheSB9IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgVnVlVXBsb2FkIGZyb20gJ3Z1ZS11cGxvYWQtY29tcG9uZW50J1xuXG4vLyBAdnVlL2NvbXBvbmVudFxuZXhwb3J0IGRlZmF1bHQgRGl0b1R5cGVDb21wb25lbnQucmVnaXN0ZXIoJ3VwbG9hZCcsIHtcbiAgbWl4aW5zOiBbU29ydGFibGVNaXhpbl0sXG4gIGNvbXBvbmVudHM6IHsgVnVlVXBsb2FkIH0sXG5cbiAgZGF0YSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBsb2FkczogW11cbiAgICB9XG4gIH0sXG5cbiAgY29tcHV0ZWQ6IHtcbiAgICB1cGxvYWQoKSB7XG4gICAgICByZXR1cm4gdGhpcy4kcmVmcy51cGxvYWRcbiAgICB9LFxuXG4gICAgdXBsb2FkVGl0bGUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSA/ICdVcGxvYWQgRmlsZXMnIDogJ1VwbG9hZCBGaWxlJ1xuICAgIH0sXG5cbiAgICBmaWxlcygpIHtcbiAgICAgIHJldHVybiBhc0ZpbGVzKHRoaXMudmFsdWUpXG4gICAgfSxcblxuICAgIGRvd25sb2FkVXJscygpIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbGVzLm1hcCgoZmlsZSwgaW5kZXgpID0+IHRoaXMuZ2V0RG93bmxvYWRVcmwoZmlsZSwgaW5kZXgpKVxuICAgIH0sXG5cbiAgICB0aHVtYm5haWxVcmxzKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZmlsZXMubWFwKChmaWxlLCBpbmRleCkgPT4gdGhpcy5nZXRUaHVtYm5haWxVcmwoZmlsZSwgaW5kZXgpKVxuICAgIH0sXG5cbiAgICBtdWx0aXBsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ211bHRpcGxlJywge1xuICAgICAgdHlwZTogQm9vbGVhbixcbiAgICAgIGRlZmF1bHQ6IGZhbHNlLFxuICAgICAgLy8gTm8gY2FsbGJhY2sgYXMgaXQncyB1c2VkIGluIGBwcm9jZXNzVmFsdWUoKWBcbiAgICAgIGNhbGxiYWNrOiBmYWxzZVxuICAgIH0pLFxuXG4gICAgZXh0ZW5zaW9uczogZ2V0U2NoZW1hQWNjZXNzb3IoJ2V4dGVuc2lvbnMnLCB7XG4gICAgICB0eXBlOiBbQXJyYXksIFN0cmluZywgUmVnRXhwXVxuICAgIH0pLFxuXG4gICAgYWNjZXB0OiBnZXRTY2hlbWFBY2Nlc3NvcignYWNjZXB0Jywge1xuICAgICAgdHlwZTogQXJyYXksXG4gICAgICBnZXQoYWNjZXB0KSB7XG4gICAgICAgIHJldHVybiBpc0FycmF5KGFjY2VwdCkgPyBhY2NlcHQuam9pbignLCcpIDogYWNjZXB0XG4gICAgICB9XG4gICAgfSksXG5cbiAgICBtYXhTaXplOiBnZXRTY2hlbWFBY2Nlc3NvcignbWF4U2l6ZScsIHtcbiAgICAgIHR5cGU6IFtTdHJpbmcsIE51bWJlcl0sXG4gICAgICBnZXQobWF4U2l6ZSkge1xuICAgICAgICByZXR1cm4gbWF4U2l6ZSA/IHBhcnNlRmlsZVNpemUobWF4U2l6ZSkgOiB1bmRlZmluZWRcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRyYWdnYWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RyYWdnYWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZSxcbiAgICAgIGdldChkcmFnZ2FibGUpIHtcbiAgICAgICAgcmV0dXJuIGRyYWdnYWJsZSAmJiB0aGlzLmZpbGVzLmxlbmd0aCA+IDFcbiAgICAgIH1cbiAgICB9KSxcblxuICAgIGRlbGV0YWJsZTogZ2V0U2NoZW1hQWNjZXNzb3IoJ2RlbGV0YWJsZScsIHtcbiAgICAgIHR5cGU6IEJvb2xlYW4sXG4gICAgICBkZWZhdWx0OiBmYWxzZVxuICAgIH0pLFxuXG4gICAgcmVuZGVyOiBnZXRTY2hlbWFBY2Nlc3NvcigncmVuZGVyJywge1xuICAgICAgdHlwZTogRnVuY3Rpb24sXG4gICAgICBkZWZhdWx0OiBudWxsXG4gICAgfSksXG5cbiAgICB0aHVtYm5haWxzOiBnZXRTY2hlbWFBY2Nlc3NvcigndGh1bWJuYWlscycsIHtcbiAgICAgIHR5cGU6IFtCb29sZWFuLCBTdHJpbmddLFxuICAgICAgZGVmYXVsdCh0aHVtYm5haWxzKSB7XG4gICAgICAgIHJldHVybiB0aHVtYm5haWxzID8/ICEhdGhpcy5zY2hlbWEudGh1bWJuYWlsVXJsXG4gICAgICB9LFxuICAgICAgZ2V0KHRodW1ibmFpbHMpIHtcbiAgICAgICAgcmV0dXJuIHRodW1ibmFpbHMgPT09IHRydWUgPyAnbWVkaXVtJyA6IHRodW1ibmFpbHMgfHwgbnVsbFxuICAgICAgfVxuICAgIH0pLFxuXG4gICAgaGFzRmlsZXMoKSB7XG4gICAgICByZXR1cm4gdGhpcy5maWxlcy5sZW5ndGggPiAwXG4gICAgfSxcblxuICAgIGhhc1VwbG9hZHMoKSB7XG4gICAgICByZXR1cm4gdGhpcy51cGxvYWRzLmxlbmd0aCA+IDBcbiAgICB9LFxuXG4gICAgaXNVcGxvYWRSZWFkeSgpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuaGFzVXBsb2FkcyAmJlxuICAgICAgICAhKHRoaXMudXBsb2FkLmFjdGl2ZSB8fCB0aGlzLnVwbG9hZC51cGxvYWRlZClcbiAgICAgIClcbiAgICB9LFxuXG4gICAgaXNVcGxvYWRBY3RpdmUoKSB7XG4gICAgICByZXR1cm4gdGhpcy5oYXNVcGxvYWRzICYmIHRoaXMudXBsb2FkLmFjdGl2ZVxuICAgIH0sXG5cbiAgICB1cGxvYWRQcm9ncmVzcygpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMudXBsb2Fkcy5yZWR1Y2UoKHRvdGFsLCBmaWxlKSA9PiB0b3RhbCArICtmaWxlLnByb2dyZXNzLCAwKSAvXG4gICAgICAgIHRoaXMudXBsb2Fkcy5sZW5ndGhcbiAgICAgIClcbiAgICB9LFxuXG4gICAgdXBsb2FkUGF0aCgpIHtcbiAgICAgIHJldHVybiB0aGlzLmdldFJlc291cmNlVXJsKHtcbiAgICAgICAgdHlwZTogJ3VwbG9hZCcsXG4gICAgICAgIHBhdGg6IHRoaXMuYXBpLm5vcm1hbGl6ZVBhdGgodGhpcy5kYXRhUGF0aClcbiAgICAgIH0pXG4gICAgfVxuICB9LFxuXG4gIHdhdGNoOiB7XG4gICAgaXNVcGxvYWRSZWFkeShyZWFkeSkge1xuICAgICAgaWYgKHJlYWR5KSB7XG4gICAgICAgIC8vIEF1dG8tdXBsb2FkLlxuICAgICAgICB0aGlzLiRuZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgdGhpcy51cGxvYWQuYWN0aXZlID0gdHJ1ZVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICBtZXRob2RzOiB7XG4gICAgZm9ybWF0RmlsZVNpemUsXG5cbiAgICBnZXRGaWxlQ29udGV4dChmaWxlLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHRoaXMubXVsdGlwbGVcbiAgICAgICAgPyBuZXcgRGl0b0NvbnRleHQodGhpcywge1xuICAgICAgICAgICAgdmFsdWU6IGZpbGUsXG4gICAgICAgICAgICBkYXRhOiB0aGlzLmZpbGVzLFxuICAgICAgICAgICAgaW5kZXgsXG4gICAgICAgICAgICBkYXRhUGF0aDogYXBwZW5kRGF0YVBhdGgodGhpcy5kYXRhUGF0aCwgaW5kZXgpXG4gICAgICAgICAgfSlcbiAgICAgICAgOiB0aGlzLmNvbnRleHRcbiAgICB9LFxuXG4gICAgcmVuZGVyRmlsZShmaWxlLCBpbmRleCkge1xuICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKHRoaXMuZ2V0RmlsZUNvbnRleHQoZmlsZSwgaW5kZXgpKVxuICAgIH0sXG5cbiAgICBnZXREb3dubG9hZFVybChmaWxlLCBpbmRleCkge1xuICAgICAgcmV0dXJuIGZpbGUudXJsXG4gICAgICAgID8gZmlsZS51cmxcbiAgICAgICAgOiAhZmlsZS51cGxvYWQgfHwgZmlsZS51cGxvYWQuc3VjY2Vzc1xuICAgICAgICAgID8gdGhpcy5nZXRTY2hlbWFWYWx1ZSgnZG93bmxvYWRVcmwnLCB7XG4gICAgICAgICAgICAgIHR5cGU6ICdTdHJpbmcnLFxuICAgICAgICAgICAgICBkZWZhdWx0OiBudWxsLFxuICAgICAgICAgICAgICBjb250ZXh0OiB0aGlzLmdldEZpbGVDb250ZXh0KGZpbGUsIGluZGV4KVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICA6IG51bGxcbiAgICB9LFxuXG4gICAgZ2V0VGh1bWJuYWlsVXJsKGZpbGUsIGluZGV4KSB7XG4gICAgICByZXR1cm4gIWZpbGUudXBsb2FkIHx8IGZpbGUudXBsb2FkLnN1Y2Nlc3NcbiAgICAgICAgPyB0aGlzLmdldFNjaGVtYVZhbHVlKCd0aHVtYm5haWxVcmwnLCB7XG4gICAgICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgICAgIGRlZmF1bHQ6IG51bGwsXG4gICAgICAgICAgICBjb250ZXh0OiB0aGlzLmdldEZpbGVDb250ZXh0KGZpbGUsIGluZGV4KVxuICAgICAgICAgIH0pIHx8IChcbiAgICAgICAgICAgIGZpbGUudHlwZS5zdGFydHNXaXRoKCdpbWFnZS8nKVxuICAgICAgICAgICAgICA/IGZpbGUudXJsXG4gICAgICAgICAgICAgIDogbnVsbFxuICAgICAgICAgIClcbiAgICAgICAgOiBudWxsXG4gICAgfSxcblxuICAgIGRlbGV0ZUZpbGUoZmlsZSwgaW5kZXgpIHtcbiAgICAgIGNvbnN0IHsgbmFtZSB9ID0gZmlsZVxuXG4gICAgICBpZiAoXG4gICAgICAgIGZpbGUgJiZcbiAgICAgICAgd2luZG93LmNvbmZpcm0oXG4gICAgICAgICAgYERvIHlvdSByZWFsbHkgd2FudCB0byAke3RoaXMudmVyYnMucmVtb3ZlfSAke25hbWV9P2BcbiAgICAgICAgKVxuICAgICAgKSB7XG4gICAgICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XG4gICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy52YWx1ZSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsZS51cGxvYWQpIHtcbiAgICAgICAgICB0aGlzLnVwbG9hZC5yZW1vdmUoZmlsZS51cGxvYWQpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vbkNoYW5nZSgpXG4gICAgICAgIHRoaXMubm90aWZ5KHtcbiAgICAgICAgICB0eXBlOiAnaW5mbycsXG4gICAgICAgICAgdGl0bGU6ICdTdWNjZXNzZnVsbHkgUmVtb3ZlZCcsXG4gICAgICAgICAgdGV4dDogYCR7bmFtZX0gd2FzICR7dGhpcy52ZXJicy5kZWxldGVkfS5gXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSxcblxuICAgIGdldEZpbGVJbmRleChmaWxlKSB7XG4gICAgICByZXR1cm4gdGhpcy5tdWx0aXBsZSAmJiB0aGlzLnZhbHVlXG4gICAgICAgID8gdGhpcy52YWx1ZS5maW5kSW5kZXgoaXQgPT4gaXQuaWQgPT09IGZpbGUuaWQpXG4gICAgICAgIDogLTFcbiAgICB9LFxuXG4gICAgYWRkRmlsZShmaWxlKSB7XG4gICAgICBpZiAodGhpcy5tdWx0aXBsZSkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSkge1xuICAgICAgICAgIHRoaXMudmFsdWUucHVzaChmaWxlKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmFsdWUgPSBbZmlsZV1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy52YWx1ZSA9IGZpbGVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgcmVwbGFjZUZpbGUoZmlsZSwgbmV3RmlsZSkge1xuICAgICAgaWYgKHRoaXMubXVsdGlwbGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmdldEZpbGVJbmRleChmaWxlKVxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGlmIChuZXdGaWxlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlW2luZGV4XSA9IG5ld0ZpbGVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnZhbHVlID0gbmV3RmlsZVxuICAgICAgfVxuICAgIH0sXG5cbiAgICByZW1vdmVGaWxlKGZpbGUpIHtcbiAgICAgIHRoaXMucmVwbGFjZUZpbGUoZmlsZSwgbnVsbClcbiAgICB9LFxuXG4gICAgb25JbnB1dEZpbGUobmV3RmlsZSwgb2xkRmlsZSkge1xuICAgICAgaWYgKG5ld0ZpbGUgJiYgIW9sZEZpbGUpIHtcbiAgICAgICAgY29uc3QgeyBpZCwgbmFtZSwgc2l6ZSB9ID0gbmV3RmlsZVxuICAgICAgICB0aGlzLmFkZEZpbGUoeyBpZCwgbmFtZSwgc2l6ZSwgdXBsb2FkOiBuZXdGaWxlIH0pXG4gICAgICB9XG4gICAgICBpZiAobmV3RmlsZSAmJiBvbGRGaWxlKSB7XG4gICAgICAgIGNvbnN0IHsgc3VjY2VzcywgZXJyb3IgfSA9IG5ld0ZpbGVcbiAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICB0aGlzLm9uQ2hhbmdlKClcbiAgICAgICAgICBjb25zdCBmaWxlID0gbmV3RmlsZS5yZXNwb25zZVswXVxuICAgICAgICAgIGlmIChmaWxlKSB7XG4gICAgICAgICAgICBmaWxlLnVwbG9hZCA9IG5ld0ZpbGVcbiAgICAgICAgICAgIC8vIFJlcGxhY2UgdGhlIHVwbG9hZCBmaWxlIG9iamVjdCB3aXRoIHRoZSBmaWxlIG9iamVjdCByZWNlaXZlZFxuICAgICAgICAgICAgLy8gZnJvbSB0aGUgdXBsb2FkIHJlc3BvbnNlLlxuICAgICAgICAgICAgdGhpcy5yZXBsYWNlRmlsZShuZXdGaWxlLCBmaWxlKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUobmV3RmlsZSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZXJyb3IpIHtcbiAgICAgICAgICB0aGlzLnJlbW92ZUZpbGUobmV3RmlsZSlcbiAgICAgICAgICBjb25zdCB0ZXh0ID0gKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBhYm9ydDogJ1VwbG9hZCBhYm9ydGVkJyxcbiAgICAgICAgICAgICAgZGVuaWVkOiAnVXBsb2FkIGRlbmllZCcsXG4gICAgICAgICAgICAgIGV4dGVuc2lvbjogYFVuc3VwcG9ydGVkIGZpbGUtdHlwZTogJHtuZXdGaWxlLm5hbWV9YCxcbiAgICAgICAgICAgICAgbmV0d29yazogJ05ldHdvcmsgZXJyb3IgZW5jb3VudGVyZWQgZHVyaW5nIHVwbG9hZCcsXG4gICAgICAgICAgICAgIHNlcnZlcjogJ1NlcnZlciBlcnJvciBvY2N1cnJlZCBkdXJpbmcgdXBsb2FkJyxcbiAgICAgICAgICAgICAgc2l6ZTogYEZpbGUgaXMgdG9vIGxhcmdlOiAke2Zvcm1hdEZpbGVTaXplKG5ld0ZpbGUuc2l6ZSl9YCxcbiAgICAgICAgICAgICAgdGltZW91dDogJ1RpbWVvdXQgb2NjdXJyZWQgZHVyaW5nIHVwbG9hZCdcbiAgICAgICAgICAgIH1bZXJyb3JdIHx8XG4gICAgICAgICAgICBgVW5rbm93biBGaWxlIFVwbG9hZCBFcnJvcjogJyR7ZXJyb3J9J2BcbiAgICAgICAgICApXG4gICAgICAgICAgdGhpcy5ub3RpZnkoe1xuICAgICAgICAgICAgdHlwZTogJ2Vycm9yJyxcbiAgICAgICAgICAgIHRpdGxlOiAnRmlsZSBVcGxvYWQgRXJyb3InLFxuICAgICAgICAgICAgdGV4dFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25JbnB1dEZpbHRlcihuZXdGaWxlIC8qLCBvbGRGaWxlLCBwcmV2ZW50ICovKSB7XG4gICAgICBjb25zdCB4aHIgPSBuZXdGaWxlPy54aHJcbiAgICAgIGlmICh0aGlzLmFwaS5jb3JzPy5jcmVkZW50aWFscyAmJiB4aHIgJiYgIXhoci53aXRoQ3JlZGVudGlhbHMpIHtcbiAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgYXN5bmMgb25DbGlja0Rvd25sb2FkKGZpbGUsIGluZGV4KSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHRoaXMuZG93bmxvYWRVcmxzW2luZGV4XSlcbiAgICAgICAgY29uc3QgYmxvYiA9IGF3YWl0IHJlc3BvbnNlLmJsb2IoKVxuICAgICAgICB0aGlzLmRvd25sb2FkKHtcbiAgICAgICAgICBmaWxlbmFtZTogZmlsZS5uYW1lLFxuICAgICAgICAgIHVybDogVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKVxuICAgICAgICB9KVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcilcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgb25DbGlja1VwbG9hZChldmVudCkge1xuICAgICAgLy8gRGVsZWdhdGUgdGhlIGNsaWNrIGV2ZW50IHRvIHRoZSBoaWRkZW4gZmlsZSBpbnB1dC5cbiAgICAgIHRoaXMudXBsb2FkLiRlbC5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpLmRpc3BhdGNoRXZlbnQoXG4gICAgICAgIG5ldyBldmVudC5jb25zdHJ1Y3RvcihldmVudC50eXBlLCBldmVudClcbiAgICAgIClcbiAgICB9XG4gIH0sXG5cbiAgcHJvY2Vzc1ZhbHVlKHNjaGVtYSwgdmFsdWUpIHtcbiAgICAvLyBGaWx0ZXIgb3V0IGFsbCBuZXdseSBhZGRlZCBmaWxlcyB0aGF0IHdlcmVuJ3QgYWN0dWFsbHkgdXBsb2FkZWQuXG4gICAgY29uc3QgZmlsZXMgPSBhc0ZpbGVzKHZhbHVlKVxuICAgICAgLm1hcCgoeyB1cGxvYWQsIC4uLmZpbGUgfSkgPT4gKCF1cGxvYWQgfHwgdXBsb2FkLnN1Y2Nlc3MgPyBmaWxlIDogbnVsbCkpXG4gICAgICAuZmlsdGVyKGZpbGUgPT4gZmlsZSlcbiAgICByZXR1cm4gc2NoZW1hLm11bHRpcGxlID8gZmlsZXMgOiBmaWxlc1swXSB8fCBudWxsXG4gIH1cbn0pXG5cbmZ1bmN0aW9uIGFzRmlsZXModmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID8gYXNBcnJheSh2YWx1ZSkgOiBbXVxufVxuPC9zY3JpcHQ+XG5cbjxzdHlsZSBsYW5nPVwic2Nzc1wiPlxuQGltcG9ydCAnLi4vc3R5bGVzL19pbXBvcnRzJztcblxuLmRpdG8tdXBsb2FkIHtcbiAgLmRpdG8tdGFibGUge1xuICAgIHRyLFxuICAgIC5kaXRvLWNlbGwtZWRpdC1idXR0b25zIHtcbiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XG4gICAgfVxuICB9XG5cbiAgJl9fc2l6ZSxcbiAgJl9fc3RhdHVzIHtcbiAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB9XG5cbiAgJiAmX19pbnB1dCB7XG4gICAgLy8gU2VlIGBvbkNsaWNrVXBsb2FkKClgIG1ldGhvZCBmb3IgZGV0YWlscy5cbiAgICBkaXNwbGF5OiBibG9jaztcbiAgICBwb2ludGVyLWV2ZW50czogbm9uZTtcbiAgfVxuXG4gICZfX2Zvb3RlciB7XG4gICAgZGlzcGxheTogZmxleDtcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kO1xuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cbiAgICAuZGl0by1wcm9ncmVzcyB7XG4gICAgICBmbGV4OiBhdXRvO1xuICAgICAgbWFyZ2luLXJpZ2h0OiAkZm9ybS1zcGFjaW5nO1xuICAgIH1cbiAgfVxufVxuPC9zdHlsZT5cbiIsImltcG9ydCB7IGFzQXJyYXkgfSBmcm9tICdAZGl0b2pzL3V0aWxzJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG1vdW50ZWQobm9kZSwgYmluZGluZykge1xuICAgIG9ic2VydmVSZXNpemUobm9kZSwgYmluZGluZy52YWx1ZSwgYmluZGluZy5hcmcpXG4gIH0sXG5cbiAgdW5tb3VudGVkKG5vZGUsIGJpbmRpbmcpIHtcbiAgICB1bm9ic2VydmVSZXNpemUobm9kZSwgYmluZGluZy52YWx1ZSwgYmluZGluZy5hcmcpXG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG9ic2VydmVSZXNpemUobm9kZSwgaGFuZGxlciwgb3B0aW9ucykge1xuICBPYnNlcnZlci5nZXRPYnNlcnZlcihvcHRpb25zKS5vYnNlcnZlKG5vZGUsIGhhbmRsZXIpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1bm9ic2VydmVSZXNpemUobm9kZSwgaGFuZGxlciwgb3B0aW9ucykge1xuICBPYnNlcnZlci5nZXRPYnNlcnZlcihvcHRpb25zKS51bm9ic2VydmUobm9kZSwgaGFuZGxlcilcbn1cblxuZXhwb3J0IGNvbnN0IGlzUmVzaXplU3VwcG9ydGVkID0gdHlwZW9mIFJlc2l6ZU9ic2VydmVyICE9PSAndW5kZWZpbmVkJ1xuXG5jb25zdCBvYnNlcnZlcnMgPSB7fVxuXG5jbGFzcyBPYnNlcnZlciB7XG4gIGNvbnN0cnVjdG9yKGtleSwgb3B0aW9ucykge1xuICAgIHRoaXMua2V5ID0ga2V5XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuICAgIHRoaXMub2JzZXJ2ZXIgPSBpc1Jlc2l6ZVN1cHBvcnRlZFxuICAgICAgPyBuZXcgUmVzaXplT2JzZXJ2ZXIoZW50cmllcyA9PiB0aGlzLmhhbmRsZShlbnRyaWVzKSlcbiAgICAgIDogbnVsbFxuICAgIHRoaXMuaGFuZGxlcnNCeU5vZGUgPSBuZXcgV2Vha01hcCgpXG4gICAgdGhpcy5ub2RlQ291bnQgPSAwXG4gIH1cblxuICBvYnNlcnZlKG5vZGUsIGhhbmRsZXIpIHtcbiAgICBsZXQgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzQnlOb2RlLmdldChub2RlKVxuICAgIGlmICghaGFuZGxlcnMpIHtcbiAgICAgIGhhbmRsZXJzID0gbmV3IFNldCgpXG4gICAgICB0aGlzLmhhbmRsZXJzQnlOb2RlLnNldChub2RlLCBoYW5kbGVycylcbiAgICAgIHRoaXMub2JzZXJ2ZXI/Lm9ic2VydmUobm9kZSwgdGhpcy5vcHRpb25zKVxuICAgICAgdGhpcy5ub2RlQ291bnQrK1xuICAgIH1cbiAgICBoYW5kbGVycy5hZGQoaGFuZGxlcilcbiAgfVxuXG4gIHVub2JzZXJ2ZShub2RlLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgaGFuZGxlcnMgPSB0aGlzLmhhbmRsZXJzQnlOb2RlLmdldChub2RlKVxuICAgIGlmIChoYW5kbGVycz8uZGVsZXRlKGhhbmRsZXIpICYmIGhhbmRsZXJzLnNpemUgPT09IDApIHtcbiAgICAgIHRoaXMuaGFuZGxlcnNCeU5vZGUuZGVsZXRlKG5vZGUpXG4gICAgICB0aGlzLm9ic2VydmVyPy51bm9ic2VydmUobm9kZSlcbiAgICAgIGlmICgtLXRoaXMubm9kZUNvdW50ID09PSAwKSB7XG4gICAgICAgIGRlbGV0ZSBvYnNlcnZlcnNbdGhpcy5rZXldXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaGFuZGxlKGVudHJpZXMpIHtcbiAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5oYW5kbGVyc0J5Tm9kZS5nZXQoZW50cnkudGFyZ2V0KVxuICAgICAgaWYgKGhhbmRsZXJzKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgICAgIHRhcmdldDogZW50cnkudGFyZ2V0LFxuICAgICAgICAgIGNvbnRlbnRSZWN0OiBlbnRyeS5jb250ZW50UmVjdCxcbiAgICAgICAgICAvLyBVc2UgYGFzQXJyYXlgIHNpbmNlIEZpcmVmb3ggYmVmb3JlIHY5MiByZXR1cm5zIHRoZXNlIGFzIG9iamVjdHM6XG4gICAgICAgICAgYm9yZGVyQm94U2l6ZTogYXNBcnJheShlbnRyeS5ib3JkZXJCb3hTaXplKSxcbiAgICAgICAgICBjb250ZW50Qm94U2l6ZTogYXNBcnJheShlbnRyeS5jb250ZW50Qm94U2l6ZSksXG4gICAgICAgICAgZGV2aWNlUGl4ZWxDb250ZW50Qm94U2l6ZTogYXNBcnJheShlbnRyeS5kZXZpY2VQaXhlbENvbnRlbnRCb3hTaXplKVxuICAgICAgICB9XG4gICAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiBoYW5kbGVycykge1xuICAgICAgICAgIGhhbmRsZXIoZXZlbnQpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBzdGF0aWMgZ2V0T2JzZXJ2ZXIoeyBib3ggPSAnY29udGVudC1ib3gnIH0gPSB7fSkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7IGJveCB9XG4gICAgY29uc3Qga2V5ID0gSlNPTi5zdHJpbmdpZnkob3B0aW9ucylcbiAgICBvYnNlcnZlcnNba2V5XSB8fD0gbmV3IE9ic2VydmVyKGtleSwgb3B0aW9ucylcbiAgICByZXR1cm4gb2JzZXJ2ZXJzW2tleV1cbiAgfVxufVxuIiwiZXhwb3J0IGRlZmF1bHQgW1xuICAnY3JlYXRlJywgJ2NyZWF0ZWQnLFxuICAnc2F2ZScsICdzYXZlZCcsXG4gICdhcHBseScsICdhcHBsaWVkJyxcbiAgJ3N1Ym1pdCcsICdzdWJtaXR0ZWQnLFxuICAnZGVsZXRlJywgJ2RlbGV0ZWQnLFxuICAncmVtb3ZlJywgJ3JlbW92ZWQnLFxuICAnY2xlYXInLCAnY2xlYXJlZCcsXG4gICdlZGl0JywgJ2VkaXRlZCcsXG4gICdjbG9zZScsICdjbG9zZWQnLFxuICAnY2FuY2VsJywgJ2NhbmNlbGxlZCcsXG4gICdkcmFnJywgJ2RyYWdnZWQnLFxuICAnbG9naW4nLCAnbG9nZ2VkIGluJ1xuXS5yZWR1Y2UoKHZlcmJzLCB2ZXJiKSA9PiB7XG4gIHZlcmJzW3ZlcmJdID0gdmVyYlxuICByZXR1cm4gdmVyYnNcbn0sIHt9KVxuIiwiaW1wb3J0IHsgY3JlYXRlQXBwLCBoIGFzIGNyZWF0ZUVsZW1lbnQgfSBmcm9tICd2dWUnXG5pbXBvcnQgeyBjcmVhdGVSb3V0ZXIsIGNyZWF0ZVdlYkhpc3RvcnkgfSBmcm9tICd2dWUtcm91dGVyJ1xuaW1wb3J0IFZ1ZU5vdGlmaWNhdGlvbnMgZnJvbSAnQGt5dmcvdnVlMy1ub3RpZmljYXRpb24nXG5pbXBvcnQge1xuICBpc1N0cmluZyxcbiAgaXNBYnNvbHV0ZVVybCxcbiAgYXNzaWduRGVlcGx5LFxuICBoeXBoZW5hdGUsXG4gIGNhbWVsaXplLFxuICBkZWZhdWx0Rm9ybWF0cyxcbiAgZGVwcmVjYXRlXG59IGZyb20gJ0BkaXRvanMvdXRpbHMnXG5pbXBvcnQgKiBhcyBjb21wb25lbnRzIGZyb20gJy4vY29tcG9uZW50cy9pbmRleC5qcydcbmltcG9ydCAqIGFzIHR5cGVzIGZyb20gJy4vdHlwZXMvaW5kZXguanMnXG5pbXBvcnQgRGl0b1Jvb3QgZnJvbSAnLi9jb21wb25lbnRzL0RpdG9Sb290LnZ1ZSdcbmltcG9ydCBEaXRvVHlwZUNvbXBvbmVudCBmcm9tICcuL0RpdG9UeXBlQ29tcG9uZW50LmpzJ1xuaW1wb3J0IFJlc2l6ZURpcmVjdGl2ZSBmcm9tICcuL2RpcmVjdGl2ZXMvcmVzaXplLmpzJ1xuaW1wb3J0IHsgZ2V0UmVzb3VyY2UgfSBmcm9tICcuL3V0aWxzL3Jlc291cmNlLmpzJ1xuaW1wb3J0IHsgZm9ybWF0UXVlcnkgfSBmcm9tICcuL3V0aWxzL3JvdXRlLmpzJ1xuaW1wb3J0IHZlcmJzIGZyb20gJy4vdmVyYnMuanMnXG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIERpdG9BZG1pbiB7XG4gIGNvbnN0cnVjdG9yKGVsLCB7XG4gICAgLy8gYGRpdG9gIGNvbnRhaW5zIHRoZSBiYXNlIGFuZCBhcGkgc2V0dGluZ3MgcGFzc2VkIGZyb20gYEFkbWluQ29udHJvbGxlcmBcbiAgICBkaXRvID0ge30sXG4gICAgYXBpLFxuICAgIHZpZXdzID0ge30sXG4gICAgLi4ub3B0aW9uc1xuICB9ID0ge30pIHtcbiAgICB0aGlzLmVsID0gZWxcbiAgICAvLyBNZXJnZSBpbiBgYXBpYCBzZXR0aW5ncyBhcyBwYXNzZWQgZnJvbSBgY29uZmlnLmFkbWluYCBhbmQgdGhyb3VnaCB0aGVcbiAgICAvLyBgQWRtaW5Db250cm9sbGVyYCB3aXRoIGBhcGlgIHZhbHVlcyBmcm9tIGZyb20gJ2FkbWluL2luZGV4LmpzJ1xuICAgIC8vIE5PVEU6IGBBZG1pbkNvbnRyb2xsZXJgIHByb3ZpZGVzIGBkaXRvLmFwaS5iYXNlYFxuICAgIHRoaXMuYXBpID0gYXBpID0gYXNzaWduRGVlcGx5KHsgYmFzZTogJy8nIH0sIGRpdG8uYXBpLCBhcGkpXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc1xuXG4gICAgLy8gU2V0dXAgZGVmYXVsdCBhcGkgc2V0dGluZ3M6XG4gICAgYXBpLmxvY2FsZSB8fD0gJ2VuLVVTJ1xuICAgIGFwaS5mb3JtYXRzID0gYXNzaWduRGVlcGx5KHt9LCBkZWZhdWx0Rm9ybWF0cywgYXBpLmZvcm1hdHMpXG4gICAgYXBpLnJlcXVlc3QgfHw9IG9wdGlvbnMgPT4gcmVxdWVzdChhcGksIG9wdGlvbnMpXG4gICAgYXBpLmdldEFwaVVybCB8fD0gb3B0aW9ucyA9PiBnZXRBcGlVcmwoYXBpLCBvcHRpb25zKVxuICAgIGFwaS5pc0FwaVVybCB8fD0gdXJsID0+IGlzQXBpVXJsKGFwaSwgdXJsKVxuICAgIC8vIFNldHRpbmcgYGFwaS5ub3JtYWxpemVQYXRocyA9IHRydWUgKHBsdXJhbCkgc2V0cyBib3RoOlxuICAgIC8vIGBhcGkubm9ybWFsaXplUGF0aCA9IGh5cGhlbmF0ZWAgYW5kIGBhcGkuZGVub3JtYWxpemVQYXRoID0gY2FtZWxpemVgXG4gICAgYXBpLm5vcm1hbGl6ZVBhdGggfHw9IGFwaS5ub3JtYWxpemVQYXRocyA/IGh5cGhlbmF0ZSA6IHZhbCA9PiB2YWxcbiAgICBhcGkuZGVub3JtYWxpemVQYXRoIHx8PSBhcGkubm9ybWFsaXplUGF0aHMgPyBjYW1lbGl6ZSA6IHZhbCA9PiB2YWxcblxuICAgIC8vIEFsbG93IGRlZmluaXRpb24gb2YgZGVmYXVsdHMgZm9yIGFkbWluIGNvbXBvbmVudCB0eXBlcywgbmVzdGVkIHBlciB0eXBlOlxuICAgIC8vIGFwaS5kZWZhdWx0cyA9IHtcbiAgICAvLyAgICdtdWx0aXNlbGVjdCc6IHtcbiAgICAvLyAgICAgc2VsZWN0YWJsZTogdHJ1ZVxuICAgIC8vICAgfSxcbiAgICAvLyAgICdmYWtlLXR5cGUnOiBzY2hlbWEgPT4ge1xuICAgIC8vICAgICAvLyBSZXR1cm4gZGVmYXVsdHMsIG9yIGRpcmVjdGx5IG1vZGlmeSB0aGUgc2NoZW1hOlxuICAgIC8vICAgICBPYmplY3QuYXNzaWduKHNjaGVtYSwge1xuICAgIC8vICAgICAgIHR5cGU6ICdyZWFsLXR5cGUnLFxuICAgIC8vICAgICAgIGZvcm1hdDogKHsgdmFsdWUgfSkgPT4gYEZvcm1hdHRlZCAke3ZhbHVlfWAsXG4gICAgLy8gICAgICAgcHJvY2VzczogKHsgdmFsdWUgfSkgPT4gYFByb2Nlc3NlZCAke3ZhbHVlfWBcbiAgICAvLyAgICAgfSlcbiAgICAvLyAgIH1cbiAgICAvLyB9XG5cbiAgICBhcGkuZGVmYXVsdHMgfHw9IHt9XG5cbiAgICAvLyBBbGxvdyB0aGUgY29uZmlndXJhdGlvbiBvZiBhbGwgYXV0aCByZXNvdXJjZXMsIGxpa2Ugc286XG4gICAgLy8gYXBpLnVzZXJzID0ge1xuICAgIC8vICAgcGF0aDogJy9hZG1pbnMnLFxuICAgIC8vICAgLy8gVGhlc2UgYXJlIHRoZSBkZWZhdWx0czpcbiAgICAvLyAgIGxvZ2luOiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dpbicsXG4gICAgLy8gICAgIG1ldGhvZDogJ3Bvc3QnXG4gICAgLy8gICB9LFxuICAgIC8vICAgbG9nb3V0OiB7XG4gICAgLy8gICAgIHBhdGg6ICdsb2dvdXQnLFxuICAgIC8vICAgICBtZXRob2Q6ICdwb3N0J1xuICAgIC8vICAgfSxcbiAgICAvLyAgIHNlc3Npb246IHtcbiAgICAvLyAgICAgcGF0aDogJ3Nlc3Npb24nLFxuICAgIC8vICAgICBtZXRob2Q6ICdnZXQnXG4gICAgLy8gICB9XG4gICAgLy8gfVxuICAgIGNvbnN0IHVzZXJzID0gZ2V0UmVzb3VyY2UoYXBpLnVzZXJzLCB7XG4gICAgICB0eXBlOiAnY29sbGVjdGlvbidcbiAgICB9KSB8fCB7fVxuICAgIHVzZXJzLmxvZ2luID0gZ2V0UmVzb3VyY2UodXNlcnMubG9naW4gfHwgJ2xvZ2luJywge1xuICAgICAgbWV0aG9kOiAncG9zdCcsXG4gICAgICBwYXJlbnQ6IHVzZXJzXG4gICAgfSlcbiAgICB1c2Vycy5sb2dvdXQgPSBnZXRSZXNvdXJjZSh1c2Vycy5sb2dvdXQgfHwgJ2xvZ291dCcsIHtcbiAgICAgIG1ldGhvZDogJ3Bvc3QnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgdXNlcnMuc2Vzc2lvbiA9IGdldFJlc291cmNlKHVzZXJzLnNlc3Npb24gfHwgJ3Nlc3Npb24nLCB7XG4gICAgICBtZXRob2Q6ICdnZXQnLFxuICAgICAgcGFyZW50OiB1c2Vyc1xuICAgIH0pXG4gICAgYXBpLnVzZXJzID0gdXNlcnNcblxuICAgIC8vIEFsbG93IG92ZXJyaWRpbmcgb2YgcmVzb3VyY2UgcGF0aCBoYW5kbGVyczpcbiAgICAvLyBhcGkucmVzb3VyY2VzID0ge1xuICAgIC8vICAgY29sbGVjdGlvbihyZXNvdXJjZSkge1xuICAgIC8vICAgICByZXR1cm4gcmVzb3VyY2UucGFyZW50XG4gICAgLy8gICAgICAgPyBgJHtyZXNvdXJjZS5wYXRofT8ke3Jlc291cmNlLnBhcmVudC5wYXRofV9pZD0ke1xuICAgIC8vICAgICAgICAgIHJlc291cmNlLnBhcmVudC5pZH1gXG4gICAgLy8gICAgICAgOiByZXNvdXJjZS5wYXRoXG4gICAgLy8gICB9XG4gICAgLy8gfVxuXG4gICAgYXBpLnJlc291cmNlcyA9IHtcbiAgICAgIGFueShyZXNvdXJjZSkge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpc1tyZXNvdXJjZT8udHlwZV0gfHwgdGhpcy5kZWZhdWx0XG4gICAgICAgIHJldHVybiByZXNvdXJjZSAmJiBoYW5kbGVyLmNhbGwodGhpcywgcmVzb3VyY2UpXG4gICAgICB9LFxuXG4gICAgICBkZWZhdWx0KHJlc291cmNlKSB7XG4gICAgICAgIGNvbnN0IHBhcmVudFBhdGggPSB0aGlzLmFueShyZXNvdXJjZS5wYXJlbnQpXG4gICAgICAgIHJldHVybiBwYXJlbnRQYXRoXG4gICAgICAgICAgPyBgJHtwYXJlbnRQYXRofS8ke3Jlc291cmNlLnBhdGh9YFxuICAgICAgICAgIDogcmVzb3VyY2UucGF0aFxuICAgICAgfSxcblxuICAgICAgY29sbGVjdGlvbihyZXNvdXJjZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0KHJlc291cmNlKVxuICAgICAgfSxcblxuICAgICAgbWVtYmVyKHJlc291cmNlKSB7XG4gICAgICAgIC8vIE5PVEU6IFdlIGFzc3VtZSB0aGF0IGFsbCBtZW1iZXJzIGhhdmUgcm9vdC1sZXZlbCBjb2xsZWN0aW9uIHJvdXRlcyxcbiAgICAgICAgLy8gdG8gYXZvaWQgZXhjZXNzaXZlIG5lc3Rpbmcgb2YgKHN1Yi0pY29sbGVjdGlvbiByb3V0ZXMuXG4gICAgICAgIHJldHVybiBgJHtyZXNvdXJjZS5wYXRofS8ke3Jlc291cmNlLmlkfWBcbiAgICAgIH0sXG5cbiAgICAgIHVwbG9hZChyZXNvdXJjZSkge1xuICAgICAgICAvLyBEaXRvIFNlcnZlciBoYW5kbGVzIHVwbG9hZCByb3V0ZXMgb24gdGhlIGNvbGxlY3Rpb24gcmVzb3VyY2U6XG4gICAgICAgIHJldHVybiBgJHt0aGlzLmNvbGxlY3Rpb24ocmVzb3VyY2UucGFyZW50KX0vdXBsb2FkLyR7cmVzb3VyY2UucGF0aH1gXG4gICAgICB9LFxuXG4gICAgICAuLi5hcGkucmVzb3VyY2VzXG4gICAgfVxuXG4gICAgLy8gQWxsb3cgb3ZlcnJpZGluZyAvIGV4dGVuZGluZyBvZiBoZWFkZXJzOlxuICAgIC8vIGFwaS5oZWFkZXJzID0ge1xuICAgIC8vICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJ1xuICAgIC8vIH1cbiAgICBhcGkuaGVhZGVycyA9IHtcbiAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAuLi5hcGkuaGVhZGVyc1xuICAgIH1cblxuICAgIGlmIChpc1N0cmluZyhlbCkpIHtcbiAgICAgIGVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihlbClcbiAgICB9XG5cbiAgICBjb25zdCBhcHAgPSAodGhpcy5hcHAgPSBjcmVhdGVBcHAoe1xuICAgICAgY29tcG9uZW50czoge1xuICAgICAgICBEaXRvUm9vdCxcbiAgICAgICAgVnVlTm90aWZpY2F0aW9ucyxcbiAgICAgICAgLy8gVGhpcyBtYXkgb25seSBiZSBuZWVkZWQgdG8gYXZvaWQgdHJlZS1zaGFja2luZyBvZiB0aGVzZSBjb21wb25lbnRzLFxuICAgICAgICAvLyBzaW5jZSB0aGV5IGFjdHVhbGx5IGhhbmRsZSByZWdpc3RyeSBpbnRlcm5hbGx5IGFscmVhZHkuXG4gICAgICAgIC8vIFRPRE86IFJlbW92ZSB0aGlzIG9uY2Ugd2UgaGF2ZSBhIGJldHRlciBzb2x1dGlvbi5cbiAgICAgICAgLi4uY29tcG9uZW50cyxcbiAgICAgICAgLi4udHlwZXNcbiAgICAgIH0sXG5cbiAgICAgIC8vIE1vc3QgaW5qZWN0cyBhcmUgZGVmaW5lZCBhcyBmdW5jdGlvbnMsIHRvIHByZXNlcnZlIHJlYWN0aXZlbmVzcyBhY3Jvc3NcbiAgICAgIC8vIHByb3ZpZGUvaW5qZWN0LCBzZWU6XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2lzc3Vlcy83MDE3I2lzc3VlY29tbWVudC00ODA5MDY2OTFcbiAgICAgIHByb3ZpZGU6IHtcbiAgICAgICAgYXBpLFxuICAgICAgICAvLyBBIGRlZmF1bHQgbGlzdCBvZiB2ZXJicyBhcmUgcHJvdmlkZWQgYnkgJHZlcmJzKCkgYW5kIGNhbiBiZVxuICAgICAgICAvLyBvdmVycmlkZGVuIGF0IGFueSBwb2ludCBpbiB0aGUgY29tcG9uZW50IGhpZXJhcmNoeS5cbiAgICAgICAgJHZlcmJzOiAoKSA9PiB2ZXJicyxcbiAgICAgICAgLy8gUHJvdmlkZSBkZWZhdWx0cyBzbyBEaXRvTWl4aW4gY2FuIGluamVjdCB0aGVtIGZvciBhbGwgY29tcG9uZW50czpcbiAgICAgICAgLy8gICBpbmplY3Q6IFsgICckaXNQb3B1bGF0ZWQnLCAnJHNjaGVtYUNvbXBvbmVudCcsICckcm91dGVDb21wb25lbnQnIF1cbiAgICAgICAgJHZpZXdzOiAoKSA9PiB7fSxcbiAgICAgICAgJGlzUG9wdWxhdGVkOiAoKSA9PiB0cnVlLFxuICAgICAgICAkcGFyZW50Q29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc2NoZW1hQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc2NoZW1hUGFyZW50Q29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcm91dGVDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkYXRhQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkc291cmNlQ29tcG9uZW50OiAoKSA9PiBudWxsLFxuICAgICAgICAkcmVzb3VyY2VDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRkaWFsb2dDb21wb25lbnQ6ICgpID0+IG51bGwsXG4gICAgICAgICRwYW5lbENvbXBvbmVudDogKCkgPT4gbnVsbCxcbiAgICAgICAgJHRhYkNvbXBvbmVudDogKCkgPT4gbnVsbFxuICAgICAgfSxcblxuICAgICAgcmVuZGVyOiAoKSA9PlxuICAgICAgICBjcmVhdGVFbGVtZW50KERpdG9Sb290LCB7XG4gICAgICAgICAgcmVmOiAncm9vdCcsXG4gICAgICAgICAgY2xhc3M6IGRpdG8uc2V0dGluZ3Mucm9vdENsYXNzLFxuICAgICAgICAgIHVucmVzb2x2ZWRWaWV3czogdmlld3MsXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICB9KVxuICAgIH0pKVxuXG4gICAgLy8gUHJldmVudCBlbmRsZXNzIGxvb3BzIG9mIGVycm9yIG1lc3NhZ2VzIGR1cmluZyByZW5kZXIgZnVuY3Rpb25zIGJ5XG4gICAgLy8gc2V0dGluZyBhIGN1c3RvbSBlcnJvciBoYW5kbGVyLlxuICAgIGFwcC5jb25maWcuZXJyb3JIYW5kbGVyID0gY29uc29sZS5lcnJvclxuXG4gICAgYXBwLnVzZShWdWVOb3RpZmljYXRpb25zLCB7XG4gICAgICBjb21wb25lbnROYW1lOiAnVnVlTm90aWZpY2F0aW9ucycsXG4gICAgICBuYW1lOiAnbm90aWZ5J1xuICAgIH0pXG5cbiAgICBhcHAuZGlyZWN0aXZlKCdyZXNpemUnLCBSZXNpemVEaXJlY3RpdmUpXG5cbiAgICBhcHAudXNlKFxuICAgICAgY3JlYXRlUm91dGVyKHtcbiAgICAgICAgLy8gU3RhcnQgd2l0aCBhIGNhdGNoLWFsbCByb3V0ZSwgdG8gYmUgcmVwbGFjZWQgYnkgdGhlIGFjdHVhbCByb3V0ZXNcbiAgICAgICAgLy8gb25jZSB0aGUgc2NoZW1hcyBhcmUgbG9hZGVkLCB0byBwcmV2ZW50IHZ1ZS1yb3V0ZXIgZnJvbSBjb21wbGFpbmluZyxcbiAgICAgICAgLy8gc2VlOiBgcmVzb2x2ZVZpZXdzKClgIGluIGBEaXRvUm9vdGAgZm9yIHRoZSBhY3R1YWwgcm91dGUgc2V0dXAuXG4gICAgICAgIHJvdXRlczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdjYXRjaC1hbGwnLFxuICAgICAgICAgICAgcGF0aDogJy86XyguKiknLFxuICAgICAgICAgICAgY29tcG9uZW50czoge31cbiAgICAgICAgICB9XG4gICAgICAgIF0sXG4gICAgICAgIGhpc3Rvcnk6IGNyZWF0ZVdlYkhpc3RvcnkoZGl0by5iYXNlKSxcbiAgICAgICAgbGlua0FjdGl2ZUNsYXNzOiAnJyxcbiAgICAgICAgbGlua0V4YWN0QWN0aXZlQ2xhc3M6ICcnXG4gICAgICB9KVxuICAgIClcblxuICAgIGVsLmNsYXNzTGlzdC5hZGQoJ2RpdG8tYXBwJylcbiAgICBhcHAubW91bnQoZWwpXG4gIH1cblxuICByZWdpc3Rlcih0eXBlLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIERpdG9UeXBlQ29tcG9uZW50LnJlZ2lzdGVyKHR5cGUsIG9wdGlvbnMpXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXNwb25zZSkge1xuICAgIHN1cGVyKFxuICAgICAgYFJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGU6ICR7cmVzcG9uc2Uuc3RhdHVzfSAoJHtcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzVGV4dFxuICAgICAgfSlgXG4gICAgKVxuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3QoYXBpLCB7XG4gIHVybCxcbiAgbWV0aG9kID0gJ2dldCcsXG4gIC8vIFRPRE86IGByZXF1ZXN0LnBhcmFtc2Agd2FzIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIGBxdWVyeWAgb24gMjAyMi0xMS0wMSxcbiAgLy8gcmVtb3ZlIG9uY2Ugbm90IGluIHVzZSBhbnl3aGVyZSBhbnkgbW9yZS5cbiAgcGFyYW1zID0gbnVsbCxcbiAgcXVlcnkgPSBwYXJhbXMgfHwgbnVsbCxcbiAgaGVhZGVycyA9IG51bGwsXG4gIGRhdGEgPSBudWxsLFxuICBzaWduYWwgPSBudWxsXG59KSB7XG4gIGlmIChwYXJhbXMpIHtcbiAgICBkZXByZWNhdGUoXG4gICAgICBgcmVxdWVzdC5wYXJhbXMgaXMgZGVwcmVjYXRlZC4gVXNlIGFjdGlvbi5tZXRob2QgYW5kIGFjdGlvbi5wYXRoIGluc3RlYWQuYFxuICAgIClcbiAgfVxuXG4gIGNvbnN0IGlzQXBpVXJsID0gYXBpLmlzQXBpVXJsKHVybClcblxuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGFwaS5nZXRBcGlVcmwoeyB1cmwsIHF1ZXJ5IH0pLCB7XG4gICAgbWV0aG9kOiBtZXRob2QudG9VcHBlckNhc2UoKSxcbiAgICAuLi4oZGF0YSAmJiB7IGJvZHk6IEpTT04uc3RyaW5naWZ5KGRhdGEpIH0pLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIC4uLihpc0FwaVVybCAmJiBhcGkuaGVhZGVycyksXG4gICAgICAuLi5oZWFkZXJzXG4gICAgfSxcbiAgICBjcmVkZW50aWFsczpcbiAgICAgIGlzQXBpVXJsICYmIGFwaS5jb3JzPy5jcmVkZW50aWFsc1xuICAgICAgICA/ICdpbmNsdWRlJ1xuICAgICAgICA6ICdzYW1lLW9yaWdpbicsXG4gICAgc2lnbmFsXG4gIH0pXG5cbiAgaWYgKHJlc3BvbnNlLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKT8uaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgIHJlc3BvbnNlLmRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKClcbiAgfVxuXG4gIGlmICghcmVzcG9uc2Uub2spIHtcbiAgICB0aHJvdyBuZXcgUmVxdWVzdEVycm9yKHJlc3BvbnNlKVxuICB9XG4gIHJldHVybiByZXNwb25zZVxufVxuXG5mdW5jdGlvbiBpc0FwaVVybChhcGksIHVybCkge1xuICByZXR1cm4gIWlzQWJzb2x1dGVVcmwodXJsKSB8fCB1cmwuc3RhcnRzV2l0aChhcGkudXJsKVxufVxuXG5mdW5jdGlvbiBnZXRBcGlVcmwoYXBpLCB7IHVybCwgcXVlcnkgfSkge1xuICBpZiAoIXVybC5zdGFydHNXaXRoKGFwaS51cmwpICYmICFpc0Fic29sdXRlVXJsKHVybCkpIHtcbiAgICB1cmwgPSBjb21iaW5lVXJscyhhcGkudXJsLCB1cmwpXG4gIH1cbiAgLy8gU3VwcG9ydCBvcHRpb25hbCBxdWVyeSBwYXJhbWV0ZXJzLCB0byBiZSBhcmUgYWRkZWQgdG8gdGhlIFVSTC5cbiAgY29uc3Qgc2VhcmNoID0gZm9ybWF0UXVlcnkocXVlcnkpXG4gIHJldHVybiBzZWFyY2ggPyBgJHt1cmx9JHt1cmwuaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/J30ke3NlYXJjaH1gIDogdXJsXG59XG5cbmZ1bmN0aW9uIGNvbWJpbmVVcmxzKGJhc2VVcmwsIHJlbGF0aXZlVXJsKSB7XG4gIC8vIFVzZSBzYW1lIGFwcHJvYWNoIGFzIGF4aW9zIGBjb21iaW5lVVJMcygpYCB0byBqb2luIGJhc2VVcmwgJiByZWxhdGl2ZVVybDpcbiAgcmV0dXJuIGAke2Jhc2VVcmwucmVwbGFjZSgvXFwvKyQvLCAnJyl9LyR7cmVsYXRpdmVVcmwucmVwbGFjZSgvXlxcLysvLCAnJyl9YFxufVxuIl0sIm5hbWVzIjpbInBhcnNlVXNlckFnZW50IiwidXNlckFnZW50IiwiYWdlbnQiLCJ1YSIsIm9zIiwicGxhdGZvcm0iLCJtYXRjaCIsImJyb3dzZXIiLCJ2MSIsInYyIiwicnYiLCJ2ZXJzaW9uIiwiYXBwU3RhdGUiLCJyZWFjdGl2ZSIsImFwcGVuZERhdGFQYXRoIiwiZGF0YVBhdGgiLCJ0b2tlbiIsInBhcnNlUGFyZW50RGF0YVBhdGgiLCJwYXRoIiwicGFyc2VEYXRhUGF0aCIsInBhcnNlSXRlbURhdGFQYXRoIiwibmVzdGVkIiwiZ2V0SXRlbURhdGFQYXRoIiwibm9ybWFsaXplRGF0YVBhdGgiLCJwYXJzZVBhcmVudEl0ZW1EYXRhUGF0aCIsImlzSW50ZWdlciIsImdldFBhcmVudEl0ZW1EYXRhUGF0aCIsImdldEl0ZW0iLCJyb290SXRlbSIsImdldFZhbHVlQXREYXRhUGF0aCIsImdldFBhcmVudEl0ZW0iLCJnZXRMYXN0RGF0YVBhdGhUb2tlbiIsImdldExhc3REYXRhUGF0aE5hbWUiLCJnZXRMYXN0RGF0YVBhdGhJbmRleCIsImluZGV4IiwidGVtcG9yYXJ5SWQiLCJzZXRUZW1wb3JhcnlJZCIsImRhdGEiLCJpZEtleSIsImlzVGVtcG9yYXJ5SWQiLCJpZCIsImlzUmVmZXJlbmNlIiwiaGFzT3duUHJvcGVydHkiLCJjb250ZXh0cyIsImdldCIsImNvbnRleHQiLCJrZXkiLCJkZWZhdWx0VmFsdWUiLCJvYmplY3QiLCJ0b1JhdyIsInZhbHVlIiwiaXNGdW5jdGlvbiIsInNldCIsIkRpdG9Db250ZXh0IiwiY29tcG9uZW50IiwiaXRlbSIsIm9wdGlvbnMiLCJsb2NhdGlvbiIsInJlc291cmNlIiwiRW1pdHRlck1peGluIiwiZXZlbnQiLCJjYWxsYmFjayIsImlzQXJyYXkiLCJldiIsImlzUGxhaW5PYmplY3QiLCJsaXN0ZW5lcnMiLCJjYWxsYmFja3MiLCJvbiIsImFyZ3MiLCJlbnRyeSIsIl9hIiwiY2IiLCJxdWV1ZSIsInJlc29sdmUiLCJuZXh0IiwicmVzdWx0IiwicmVzIiwiZXJyb3IiLCJ0YXJnZXQiLCJpc0NyZWRpdENhcmQiLCJkZWNpbWFscyIsImlzRG9tYWluIiwiaXNFbWFpbCIsImlzSG9zdG5hbWUiLCJtYXgiLCJtaW4iLCJzZXR0aW5ncyIsInBhc3N3b3JkIiwiaXNVcmwiLCJWYWxpZGF0aW9uTWl4aW4iLCJub3RpZnkiLCJpc1ZhbGlkIiwicnVsZSIsInNldHRpbmciLCJ2YWxpZGF0b3IiLCJ2YWxpZGF0aW9ucyIsInZhbGlkYXRlIiwibWVzc2FnZSIsImFkZExhYmVsIiwiZXJyb3JzIiwiZm9jdXMiLCJnZXRTY2hlbWFBY2Nlc3NvciIsImtleU9yRGF0YVBhdGgiLCJ0eXBlIiwiZGVmIiwiaXNTdHJpbmciLCJuYW1lIiwiZ2V0U3RvcmVBY2Nlc3NvciIsIlR5cGVNaXhpbiIsImNvbXB1dGVWYWx1ZSIsImZvcm1hdCIsInBhcnNlIiwic2NoZW1hQ29tcG9uZW50Iiwibm9kZSIsImV2ZW50cyIsImNhbWVsaXplIiwibmF0aXZlRmllbGQiLCJ0ZXh0RmllbGQiLCJhdHRyaWJ1dGVzIiwiYWRkIiwib25Gb2N1cyIsIm9uQmx1ciIsIm9uSW5wdXQiLCJvbkNoYW5nZSIsIl9iIiwiZWxlbWVudCIsImFzQXJyYXkiLCJ1aWRNYXAiLCJ1aWQiLCJnZXRVaWQiLCJnZXRJdGVtSWQiLCJyYXciLCJTY2hlbWFHcmFwaCIsIl9fcHVibGljRmllbGQiLCJkZWZhdWx0cyIsInN1YkdyYXBoIiwicGFydCIsInNjaGVtYSIsInJlbGF0ZWREYXRhUGF0aCIsIm5hbm9pZCIsImZsYXR0ZW4iLCJncmFwaCIsImVudHJpZXMiLCIkc2V0dGluZ3MiLCJzdWJLZXkiLCJzb3VyY2VTY2hlbWEiLCJjbGlwYm9hcmQiLCJpbnRlcm5hbCIsInJlbGF0ZWQiLCJyZWZlcmVuY2UiLCJzb3VyY2UiLCJyZWxhdGlvbiIsInZhbHVlcyIsInJlbW92ZUlkIiwicmVmZXJlbmNlSWQiLCJyZWZLZXkiLCJyZXZWYWx1ZSIsInR5cGVDaGVja2VycyIsImlzQm9vbGVhbiIsImlzTnVtYmVyIiwiaXNEYXRlIiwiaXNPYmplY3QiLCJpc1JlZ0V4cCIsInR5cGVDb252ZXJ0ZXJzIiwiaXNNYXRjaGluZ1R5cGUiLCJ0eXBlcyIsImNvbnZlcnRUeXBlIiwiY29udmVydGVyIiwidHlwZUNvbXBvbmVudHMiLCJ1bmtub3duVHlwZVJlcG9ydGVkIiwicmVnaXN0ZXJUeXBlQ29tcG9uZW50IiwiZ2V0VHlwZUNvbXBvbmVudCIsImFsbG93TnVsbCIsIml0ZXJhdGVTY2hlbWFDb21wb25lbnRzIiwic2NoZW1hcyIsImlzU2luZ2xlQ29tcG9uZW50VmlldyIsImlzU2NoZW1hIiwiaXRlcmF0ZU5lc3RlZFNjaGVtYUNvbXBvbmVudHMiLCJnZXRUYWJTY2hlbWFzIiwiZmluZE5lc3RlZFNjaGVtYUNvbXBvbmVudCIsInNvbWVOZXN0ZWRTY2hlbWFDb21wb25lbnQiLCJoYXNOZXN0ZWRTY2hlbWFDb21wb25lbnRzIiwiaXNGb3JtIiwiaXNWaWV3IiwiaXNUYWIiLCJpc1BhbmVsIiwiaXNNZW51IiwiZ2V0U2NoZW1hSWRlbnRpZmllciIsInJlc29sdmVTY2hlbWEiLCJ1bndyYXBNb2R1bGUiLCJpc1Byb21pc2UiLCJpc01vZHVsZSIsImtleXMiLCJyZXNvbHZlU2NoZW1hcyIsInVucmVzb2x2ZWRTY2hlbWFzIiwicmVzb2x2ZUl0ZW0iLCJtYXBDb25jdXJyZW50bHkiLCJyZXNvbHZlVmlld3MiLCJ1bnJlc29sdmVkVmlld3MiLCJmbGF0dGVuVmlld3MiLCJ2aWV3cyIsInJlc29sdmVTY2hlbWFDb21wb25lbnQiLCJtYXJrUmF3IiwiRGl0b01peGluIiwicmVzb2x2ZVNjaGVtYUNvbXBvbmVudHMiLCJwcm9jZXNzU2NoZW1hQ29tcG9uZW50cyIsImFwaSIsInJvdXRlcyIsImxldmVsIiwicHJvbWlzZXMiLCJwcm9jZXNzIiwicmVsYXRpdmVMZXZlbCIsInByb2Nlc3NTY2hlbWFDb21wb25lbnQiLCJnZXRQYW5lbFNjaGVtYXMiLCJwcm9jZXNzU2NoZW1hRGVmYXVsdHMiLCJwYW5lbCIsImdldFR5cGVPcHRpb25zIiwicHJvY2Vzc1ZpZXciLCJmdWxsUGF0aCIsInByb2Nlc3NSb3V0ZVNjaGVtYSIsImNoaWxkcmVuIiwicHJvY2Vzc05lc3RlZFNjaGVtYXMiLCJhc3NpZ25EZWVwbHkiLCJwcm9jZXNzTmVzdGVkU2NoZW1hRGVmYXVsdHMiLCJmb3JtcyIsImdldEZvcm1TY2hlbWFzIiwiZm9ybSIsInByb2Nlc3NGb3JtcyIsImNvbXBvbmVudHMiLCJwcm9jZXNzRm9ybSIsInByb2Nlc3NUYWIiLCJwcm9jZXNzUGFuZWwiLCJ0YWJzIiwicGFuZWxzIiwidGFiIiwiaGFzRm9ybVNjaGVtYSIsImhhc011bHRpcGxlRm9ybVNjaGVtYXMiLCJnZXRWaWV3Rm9ybVNjaGVtYSIsInZpZXciLCJ2aWV3U2NoZW1hIiwiZ2V0Vmlld1NjaGVtYSIsImhhc1ZpZXdTY2hlbWEiLCJnZXRWaWV3RWRpdFBhdGgiLCJtb2RpZnlGb3JtIiwiY29tcGFjdCIsImdldEl0ZW1Gb3JtU2NoZW1hRnJvbUZvcm1zIiwiZ2V0SXRlbUZvcm1TY2hlbWEiLCJpc0NvbXBhY3QiLCJpc0lubGluZWQiLCJpc05lc3RlZCIsImhhc0xhYmVsIiwiZ2VuZXJhdGVMYWJlbHMiLCJsYWJlbCIsIm9taXRTcGFjaW5nIiwiZ2V0U2NoZW1hVmFsdWUiLCJjb252ZXJ0ZWQiLCJzaG91bGRSZW5kZXJTY2hlbWEiLCJnZXREZWZhdWx0VmFsdWUiLCJjbG9uZSIsImlnbm9yZU1pc3NpbmdWYWx1ZSIsInR5cGVPcHRpb25zIiwic2V0RGVmYXVsdFZhbHVlcyIsInByb2Nlc3NTY2hlbWFEYXRhIiwicm9vdERhdGEiLCJjb21wdXRlIiwiY2xvbmVJdGVtIiwiY29weSIsIm9yZGVyS2V5IiwicHJvY2Vzc0RhdGEiLCJzY2hlbWFPbmx5IiwicHJvY2Vzc2VkRGF0YSIsIndyYXBQcmltaXRpdmVzIiwiYSIsImIiLCJpZDEiLCJpZDIiLCJleGNsdWRlIiwiZ2V0Q29udGV4dCIsInByb2Nlc3NWYWx1ZSIsInByb2Nlc3NCZWZvcmUiLCJwcm9jZXNzQWZ0ZXIiLCJwcm9jZXNzQ29tcG9uZW50cyIsImdldERhdGFQYXRoIiwiY29tcG9uZW50U2NoZW1hIiwiY29tcG9uZW50RGF0YVBhdGgiLCJwcm9jZXNzSXRlbSIsIml0ZW1EYXRhUGF0aCIsInByb2Nlc3NlZEl0ZW0iLCJnZXROYW1lZFNjaGVtYXMiLCJ0b09iamVjdCIsImFycmF5IiwidG9TY2hlbWEiLCJnZXRCdXR0b25TY2hlbWFzIiwiYnV0dG9ucyIsImdldFR5cGUiLCJzY2hlbWFPclR5cGUiLCJnZXRTb3VyY2VUeXBlIiwiZ2V0UGFuZWxFbnRyeSIsInRhYkNvbXBvbmVudCIsImdldFBhbmVsRW50cmllcyIsInBhbmVsU2NoZW1hcyIsInBhbmVsRW50cmllcyIsImdldEFsbFBhbmVsRW50cmllcyIsInBhbmVsU2NoZW1hIiwiaXNPYmplY3RTb3VyY2UiLCJpc0xpc3RTb3VyY2UiLCJnZXRJdGVtVWlkIiwiaGFzUmVzb3VyY2UiLCJnZXRSZXNvdXJjZSIsInBhcmVudCIsImRlZnMiLCJnZXRNZW1iZXJSZXNvdXJjZSIsInBpY2tCeSIsInNlbGYiLCJuZXh0VWlkIiwibGFiZWxpemUiLCJzdG9yZSIsIm9sZEtleSIsInZlcmIiLCJxdWVyeSIsInVybCIsIm1ldGhvZCIsInNpZ25hbCIsImNoZWNrVXNlciIsInJlc3BvbnNlIiwiZXF1YWxzIiwiY2FjaGUiLCJjYWNoZVBhcmVudCIsImxvYWRDYWNoZSIsImNhY2hlS2V5IiwibG9jYWxlIiwiYm9keSIsImdldENvbXB1dGVkQWNjZXNzb3IiLCJnZXR0ZXIiLCJjb21wdXRlZCIsImFjY2Vzc29yIiwid2F0Y2giLCJoYW5kbGVycyIsImV4cHIiLCJhZGRFdmVudCIsImh5cGhlbmF0ZSIsImhhc0xpc3RlbmVycyIsInBhcmVudEhhc0xpc3RlbmVycyIsInBhcmFtcyIsInJlc29sdmVNZXJnZWRPcHRpb25zIiwibWl4aW5zIiwibWVyZ2VPcHRpb25zIiwidG8iLCJmcm9tIiwibWl4aW4iLCJkaXRvT3B0aW9uS2V5cyIsIkRpdG9Db21wb25lbnQiLCJkZWZpbml0aW9uIiwiZGVzY3JpYmVEYXRlIiwiZGF0ZSIsImFsdGVyRGF0ZSIsIm92ZXJyaWRlcyIsInBhcnNlRGF0ZSIsInN0cmluZyIsInRpbWUiLCJ0aW1lRGVmYXVsdCIsImRheSIsInNlcDEiLCJtb250aCIsInNlcDIiLCJ5ZWFyIiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsIm1pbGxpc2Vjb25kIiwiZ2V0RGF0ZVBhcnRzIiwiZ2V0TW9udGhJbmRleCIsImlzVmFsaWRUaW1lUGFydCIsImdldERhdGVQYXJ0QXRQb3NpdGlvbiIsInBvc2l0aW9uIiwicGFydHMiLCJnZXRQb3NpdGlvbiIsImxlbmd0aCIsInBvcyIsIm9mZnNldCIsImlzVVMiLCJzdGFydCIsImVuZCIsInNob3J0Rm9ybWF0IiwibG9uZ0Zvcm1hdCIsImkiLCJfc2ZjX21haW4iLCJ3ZWVrZGF5TmFtZXMiLCJtb250aE5hbWVzIiwiZ2V0TG9jYWxlTmFtZXMiLCJtb2RlIiwidXBkYXRlIiwic3RlcCIsImN1cnJlbnRWYWx1ZSIsImVudGVyIiwic3RhcnRZZWFyIiwiZmlyc3REYXlXZWVrIiwibnVtRGF5cyIsInByZXZNb250aCIsInByZXZNb250aE51bURheXMiLCJub3ciLCJpc0RheSIsInN0YXRlIiwibmV4dE1vbnRoTmVlZCIsIm5leHRNb250aCIsImxvY2FsZU5hbWVzIiwibmFtZXMiLCJhZGRFdmVudHMiLCJ0YXJnZXRzIiwiaGFuZGxlciIsImNvbWJpbmVFdmVudHMiLCJnZXRLZXkiLCJnZXRLZXlOYXZpZ2F0aW9uIiwiZ2V0VGFyZ2V0IiwiY2xhc3NlcyIsInNob3ciLCJ0cmlnZ2VyIiwicG9wdXAiLCJfYyIsImVsIiwiYm91bmRzIiwidHJpZ2dlckxlZnQiLCJ0cmlnZ2VyVG9wIiwidHJpZ2dlcldpZHRoIiwidHJpZ2dlckhlaWdodCIsInBvcHVwV2lkdGgiLCJwb3B1cEhlaWdodCIsInBhcnQxIiwicGFydDIiLCJ3aW5XaWR0aCIsIndpbkhlaWdodCIsImxlZnQiLCJ0b3AiLCJ0cmlnZ2VyQm91bmRzIiwiaW5wdXQiLCJfIiwic2l6ZSIsImdldExlbmd0aCIsIl9vcGVuQmxvY2siLCJfY3JlYXRlRWxlbWVudEJsb2NrIiwic2V0U2VsZWN0aW9uIiwiZ2V0U2VsZWN0aW9uIiwiVHJpZ2dlciIsIkNhbGVuZGFyIiwiSW5wdXRGaWVsZCIsIkljb24iLCJkZWZhdWx0Rm9ybWF0cyIsImdldERhdGVQYXJ0IiwiY2FsZW5kYXIiLCJ0b2dnbGUiLCJzZWxlY3Rpb24iLCJzbW9vdGgiLCJzY3JvbGwiLCJyZWYiLCJsaW5lSGVpZ2h0IiwiZGlzdGFuY2UiLCJjb3VudCIsImlzRGlnaXQiLCJjaGFyIiwiRGF0ZVBpY2tlciIsIlRpbWVQaWNrZXIiLCJ0cmFuc2l0aW9uIiwiZGlzYWJsZWQiLCJ0ZXh0IiwicGFnZSIsInBhZ2VTaXplIiwiY3VycmVudFBhZ2VTaXplIiwic2hvd1ByZXYiLCJzaG93TmV4dCIsInRvdGFsIiwiY3VycmVudFBhZ2UiLCJzaG93TGVuZ3RoIiwibnVtUGFnZXMiLCJwYWdlUmFuZ2UiLCJjaGVja2VkIiwidW5jaGVja2VkIiwibW9kZWxWYWx1ZSIsIlRyYW5zaXRpb25IZWlnaHQiLCJlbmFibGVkIiwic2xvdHMiLCJjcmVhdGVFbGVtZW50IiwiVHJhbnNpdGlvbiIsInByb3BzIiwic2V0U3R5bGUiLCJzdHlsZSIsIm5leHRUaW1lb3V0IiwiZm9yY2VSZXBhaW50Iiwid2lkdGgiLCJoZWlnaHQiLCJoYXNWTm9kZUNvbnRlbnQiLCJ2bm9kZSIsIkNvbW1lbnQiLCJoYXNTbG90Q29udGVudCIsInNsb3QiLCJ1c2VTbG90cyIsIkRvbU1peGluIiwicmVtb3ZlIiwiRGl0b1VzZXIiLCJyb2xlcyIsInJvbGUiLCJTY2hlbWFQYXJlbnRNaXhpbiIsInNjaGVtYUNvbXBvbmVudHMiLCJWYWxpZGF0b3JNaXhpbiIsIml0IiwiUm91dGVNaXhpbiIsInJvdXRlQ29tcG9uZW50IiwibWF0Y2hlZCIsInJlY29yZCIsImJyZWFkY3J1bWIiLCJyb3V0ZUNvbXBvbmVudHMiLCJvayIsInJlY29yZFBhdGgiLCJyb290UGF0aCIsImdldENvbW1vblByZWZpeCIsImlzTG9hZGluZyIsIlVzZUZvY3VzVHJhcCIsImRlZmluZUNvbXBvbmVudCIsInRyYXAiLCJhY3RpdmF0ZSIsImRlYWN0aXZhdGUiLCJ1bnJlZkVsZW1lbnQiLCJjcmVhdGVGb2N1c1RyYXAiLCJvblNjb3BlRGlzcG9zZSIsImgiLCJkaWFsb2dEYXRhIiwiRGl0b0RpYWxvZyIsInByZWZpeCIsInRpcHB5RGVsZWdhdGUiLCJpbnN0YW5jZSIsImVyciIsImRyYWdDb3VudCIsInVwbG9hZHMiLCJ0b2dnbGVEcm9wVGFyZ2V0Q2xhc3MiLCJ1cGxvYWQiLCJzZXREcmFnZ2luZ0ZpbGVzIiwiaGFzVXBsb2FkcyIsImNhbkRyb3AiLCJ0aXRsZSIsInJlamVjdCIsImRpYWxvZ0lkIiwiYWRkaXRpb25hbENvbXBvbmVudHMiLCJyZWRpcmVjdEFmdGVyTG9naW4iLCJsb2dpbkRhdGEiLCJ1c2VyIiwiRGl0b1ZpZXciLCJhZGRSb3V0ZXMiLCJyb3V0ZXIiLCJyZW1vdmVycyIsInJvdXRlIiwic3ViTWVudUNsYXNzIiwiZmlyc3RDaGlsZCIsImxvZyIsInN0cmlwVGFncyIsIm5vdGlmaWNhdGlvbnMiLCJkdXJhdGlvbkZhY3RvciIsImR1cmF0aW9uIiwiUHVsbGRvd25NaXhpbiIsInN0YXJ0VGltZSIsIm9wZW4iLCJjb250ZW50IiwiYXNPYmplY3QiLCJJdGVtTWl4aW4iLCJpdGVtSWQiLCJleHRlbmRlZCIsIml0ZW1MYWJlbCIsImZvcm1MYWJlbCIsImdldEZvcm1MYWJlbCIsInN1ZmZpeCIsImNvbHVtbnMiLCJoYWRMYWJlbCIsInNlbGVjdGVkVGFiIiwiZmlyc3QiLCJkZWZhdWx0VGFiIiwiaGFzaCIsImRhdGFQYXRoT3JOYW1lIiwic2Nyb2xsQ29udGFpbmVyIiwiZGlzcGF0Y2giLCJjb21wb25lbnRzQnlEYXRhUGF0aCIsImRhdGFQYXRocyIsImNoZWNrIiwiZmllbGQiLCJ1bm1hdGNoZWQiLCJlcnJzIiwiZnVsbERhdGFQYXRoIiwiZGF0YVBhdGhQYXJ0cyIsImZvdW5kIiwicHJvcGVydHkiLCJzdWJDb21wb25lbnRzIiwicGFuZSIsInJlZ2lzdHJ5IiwiZW50cmllc0J5RGF0YVBhdGgiLCJfd2l0aERpcmVjdGl2ZXMiLCJfRnJhZ21lbnQiLCJfcmVuZGVyTGlzdCIsIl9jdHgiLCJfaG9pc3RlZF8xIiwiX2NyZWF0ZUJsb2NrIiwiX2NvbXBvbmVudF9EaXRvQ29udGFpbmVyIiwibmVzdGVkRGF0YVBhdGgiLCJfaG9pc3RlZF8yIiwicG9zaXRpb25zIiwiaXNMYXN0SW5Sb3ciLCJmaW5kTmV4dFBvc2l0aW9uIiwicm93cyIsInJvdyIsInZlcnRpY2FsTGFiZWxzQnlJbmRpY2VzIiwiaGFzTGFiZWxzSW5Sb3ciLCJjb250YWluZXIiLCJwYWRkaW5nIiwiZm9udFNpemUiLCJwYXJzZUZyYWN0aW9uIiwiZGl2aWRlbmQiLCJkaXZpc29yIiwiYWNjdW11bGF0ZWRCYXNpcyIsImZsZXhCYXNpcyIsImNvbWJpbmVkQmFzaXMiLCJidXR0b24iLCJjYXBpdGFsaXplIiwiY2xpcGJvYXJkRGF0YSIsInBhc3RlIiwiJHNjaGVtYSIsInJlcG9ydCIsImpzb24iLCJkZWluZGVudCIsIkxvYWRpbmdNaXhpbiIsInVwZGF0ZVJvb3QiLCJ1cGRhdGVWaWV3IiwiUmVzb3VyY2VNaXhpbiIsImFtb3VudCIsInJhbmdlIiwidmVyYnMiLCJjbGVhciIsImxvYWRpbmdPcHRpb25zIiwiY29udHJvbGxlciIsInJlcXVlc3QiLCJzZXREYXRhIiwib25TdWNjZXNzIiwib25FcnJvciIsIm5vdGlmeVN1Y2Nlc3MiLCJub3RpZnlFcnJvciIsInJlc29sdmVQYXRoIiwiaXNDcmVhdGluZyIsInByb3ZpZGVzRGF0YSIsImRhdGFQYXJ0cyIsInBhdGhQYXJ0cyIsInJvdXRlUGFydHMiLCJsYXN0RGF0YVBhcnQiLCJsIiwiZGF0YVBhcnQiLCJwYXJhbSIsIm1haW5TY2hlbWFDb21wb25lbnQiLCJwcmVzZW50IiwiY2xvc2VGb3JtIiwiZ2V0VmVyYiIsImJ1dHRvblJlc291cmNlIiwic3VjY2VzcyIsIl9yZXNvdXJjZSIsIl9tZXRob2QiLCJEaXRvRm9ybSIsInRpcCIsInRpcHB5Iiwic2NvcGUiLCJQYWdpbmF0aW9uIiwiU29ydGFibGVNaXhpbiIsImZvcmNlRmFsbGJhY2siLCJvbGRJbmRleCIsIm5ld0luZGV4IiwibGlzdCIsInBhZ2luYXRpb25SYW5nZSIsIl9ub3JtYWxpemVTdHlsZSIsIl9jYWNoZSIsIl93aXRoTW9kaWZpZXJzIiwiJGV2ZW50IiwiX25vcm1hbGl6ZUNsYXNzIiwiX2NyZWF0ZUVsZW1lbnRWTm9kZSIsIl9ob2lzdGVkXzQiLCJfdG9EaXNwbGF5U3RyaW5nIiwiX2hvaXN0ZWRfNSIsIl9ob2lzdGVkXzciLCJfbWVyZ2VQcm9wcyIsIl9ob2lzdGVkXzgiLCJfY29tcG9uZW50X0RpdG9MYWJlbCIsIl9jcmVhdGVWTm9kZSIsIl9jb21wb25lbnRfRGl0b1RhYmxlQ2VsbCIsIl9jb21wb25lbnRfRGl0b0RyYWdnYWJsZSIsIl9jb21wb25lbnRfRGl0b1RyZWVJdGVtIiwiY2hpbGRyZW5TY2hlbWEiLCJjaGlsZHJlbkxpc3QiLCJlZGl0UGF0aCIsImNoaWxkcmVuT3BlbiIsIm51bUNoaWxkcmVuIiwiY3JlYXRhYmxlIiwiZWRpdGFibGUiLCJvcmRlciIsImNvbHVtbiIsInJlbmRlciIsImVzY2FwZUh0bWwiLCJUWVBFUyIsImZpbGUiLCJyZWFkZXIiLCJfX2RlZlByb3AiLCJfX2dldE93blByb3BTeW1ib2xzIiwiX19oYXNPd25Qcm9wIiwiX19wcm9wSXNFbnVtIiwiX19kZWZOb3JtYWxQcm9wIiwib2JqIiwiX19zcHJlYWRWYWx1ZXMiLCJwcm9wIiwiX19vYmpSZXN0IiwidXNlU29ydGFibGUiLCJzb3J0YWJsZSIsImRvY3VtZW50IiwiZGVmYXVsdERvY3VtZW50IiwicmVzZXRPcHRpb25zIiwiZGVmYXVsdE9wdGlvbnMiLCJlIiwibW92ZUFycmF5RWxlbWVudCIsIlNvcnRhYmxlIiwic3RvcCIsIm9wdGlvbiIsInRyeU9uTW91bnRlZCIsInRyeU9uU2NvcGVEaXNwb3NlIiwidG9WYWx1ZSIsIm5leHRUaWNrIiwiVXNlU29ydGFibGUiLCJ1c2VWTW9kZWwiLCJEaXRvVk5vZGUiLCJEaXRvVHlwZUNvbXBvbmVudCQxIiwiRGl0b1R5cGVDb21wb25lbnQiLCJvbkNsaWNrIiwiRGF0YU1peGluIiwiYXN5bmNFbnRyeSIsInJlc29sdmVkRGF0YSIsImxvYWQiLCJ0aW1lciIsIk9wdGlvbnNNaXhpbiIsImNvbnZlcnRWYWx1ZSIsImNvbnZlcnQiLCJzZWFyY2giLCJmaWx0ZXIiLCJkZWJvdW5jZSIsImRlYm91bmNlQXN5bmMiLCJncm91cGVkIiwicmVzdWx0cyIsImdyb3VwIiwiZmluZE9wdGlvbiIsImdyb3VwQnkiLCJvcHRpb25WYWx1ZSIsIm9wdGlvbkxhYmVsIiwicHJvY2Vzc1JlbGF0ZSIsImZsYXNrIiwiQ29kZUZsYXNrIiwiY2hhbmdlZCIsImlnbm9yZVdhdGNoIiwiaWdub3JlVXBkYXRlIiwic2V0Q29kZSIsImNvZGUiLCJzZXRWYWx1ZSIsIlNrZXRjaFBpY2tlciIsInRpbnljb2xvciIsImNvbG9yIiwiRGF0ZVRpbWVQaWNrZXIiLCJmb3JtYXRzIiwiZm9ybWF0UXVlcnkiLCJ2YWwiLCJyZXBsYWNlUm91dGUiLCJTb3VyY2VNaXhpbiIsImRlZmF1bHRTb3J0IiwiZGlyZWN0aW9uIiwiZHJhZ2dhYmxlIiwiY29sbGFwc2libGUiLCJyZW1vdmVkIiwibGlzdERhdGEiLCJvbkNvbXBsZXRlIiwib3BlbmVkIiwiY2FsbE9uQ29tcGxldGUiLCJpbmxpbmVkIiwibWV0YSIsImZvcm1NZXRhIiwiY2hpbGRSb3V0ZXMiLCJnZXRQYXRoV2l0aFBhcmFtIiwic291cmNlUGF0aCIsImZvcm1Sb3V0ZSIsImZsYXRSb3V0ZXMiLCJzdWJSb3V0ZXMiLCJjaGlsZFJvdXRlIiwiZmlsdGVyQ29tcG9uZW50cyIsImRhdGV0aW1lIiwiY3JlYXRlRmlsdGVyc1BhbmVsIiwiZmlsdGVycyIsInN0aWNreSIsImZpbHRlclNjaGVtYXMiLCJwYXJzZUZpbHRlcnNEYXRhIiwiY3JlYXRlRmlsdGVyc0NvbXBvbmVudHMiLCJjcmVhdGVGaWx0ZXJzQnV0dG9ucyIsImZvcm1hdEZpbHRlcnNEYXRhIiwic21hbGwiLCJnZXREYXRhTmFtZSIsImZpbHRlck5hbWUiLCJnZXRGaWx0ZXJOYW1lIiwiZGF0YU5hbWUiLCJjb21wcyIsImdldENvbXBvbmVudHNGb3JGaWx0ZXIiLCJmaWx0ZXJzRGF0YSIsIl9jb21wb25lbnRfRGl0b1RhYmxlSGVhZCIsIl9jb21wb25lbnRfRGl0b1NjaGVtYUlubGluZWQiLCJfcmVzb2x2ZUR5bmFtaWNDb21wb25lbnQiLCJfY29tcG9uZW50X0RpdG9FZGl0QnV0dG9ucyIsIl9ob2lzdGVkXzkiLCJmaWx0ZXJzRGF0YVBhdGgiLCJFZGl0b3JDb250ZW50IiwiZWRpdG9yIiwiZW5hYmxlUnVsZXMiLCJzZXRWYWx1ZURlYm91bmNlZCIsIm9uVXBkYXRlIiwiRWRpdG9yIiwiZ2V0UG9pbnQiLCJ4IiwieSIsInByZXZZIiwibW91c2Vtb3ZlIiwiZGlhbG9nQ29tcG9uZW50IiwiZ2V0TWFya0F0dHJpYnV0ZXMiLCJocmVmIiwibWFya3MiLCJub2RlcyIsInRvb2xzIiwiRG9jdW1lbnQiLCJUZXh0IiwiUGFyYWdyYXBoIiwiQm9sZCIsIkl0YWxpYyIsIlVuZGVybGluZSIsIlN0cmlrZSIsIlNtYWxsIiwiQ29kZSIsIkxpbmtXaXRoVGl0bGUiLCJCbG9ja3F1b3RlIiwiQ29kZUJsb2NrIiwiSGFyZEJyZWFrIiwiSGVhZGluZyIsIkhvcml6b250YWxSdWxlIiwiTGlzdEl0ZW0iLCJCdWxsZXRMaXN0IiwiT3JkZXJlZExpc3QiLCJIaXN0b3J5IiwiZXh0ZW5zaW9uIiwic2V0dGluZ3NOYW1lIiwiZGVzY3JpcHRpb25zIiwiY29tbWFuZHMiLCJhZGRCdXR0b24iLCJpY29uIiwiY29tbWFuZCIsImRlc2NyaXB0aW9uIiwic2V0dGluZ05hbWUiLCJhdHRyaWJ1dGUiLCJNYXJrIiwiTGluayIsIl9jb21wb25lbnRfVnVlTXVsdGlzZWxlY3QiLCJWdWVNdWx0aXNlbGVjdCIsInBsYWNlaG9sZGVyIiwic2VhcmNoYWJsZSIsInRhZ2dhYmxlIiwidGFnIiwiTnVtYmVyTWl4aW4iLCJTd2l0Y2hCdXR0b24iLCJUZXh0TWl4aW4iLCJtYXNrZWRQYXNzd29yZCIsImhhc0VkaXRhYmxlRm9ybXMiLCJmb3JtYXRGaWxlU2l6ZSIsImZpbGVzaXplIiwiVnVlVXBsb2FkIiwiYXNGaWxlcyIsImFjY2VwdCIsIm1heFNpemUiLCJwYXJzZUZpbGVTaXplIiwidGh1bWJuYWlscyIsInJlYWR5IiwibmV3RmlsZSIsIm9sZEZpbGUiLCJ4aHIiLCJibG9iIiwiZmlsZXMiLCJSZXNpemVEaXJlY3RpdmUiLCJiaW5kaW5nIiwib2JzZXJ2ZVJlc2l6ZSIsInVub2JzZXJ2ZVJlc2l6ZSIsIk9ic2VydmVyIiwiaXNSZXNpemVTdXBwb3J0ZWQiLCJvYnNlcnZlcnMiLCJib3giLCJEaXRvQWRtaW4iLCJkaXRvIiwiZ2V0QXBpVXJsIiwiaXNBcGlVcmwiLCJ1c2VycyIsInBhcmVudFBhdGgiLCJhcHAiLCJjcmVhdGVBcHAiLCJEaXRvUm9vdCIsIlZ1ZU5vdGlmaWNhdGlvbnMiLCJjcmVhdGVSb3V0ZXIiLCJjcmVhdGVXZWJIaXN0b3J5IiwiUmVxdWVzdEVycm9yIiwiaGVhZGVycyIsImRlcHJlY2F0ZSIsImlzQWJzb2x1dGVVcmwiLCJjb21iaW5lVXJscyIsImJhc2VVcmwiLCJyZWxhdGl2ZVVybCJdLCJtYXBwaW5ncyI6ImlzR0FHTyxTQUFTQSxHQUFlQyxFQUFZLEdBQUksQ0FDN0MsTUFBTUMsRUFBUSxDQUFFLEVBRVZDLEVBQUtGLEVBQVUsWUFBYSxFQUM1QixDQUFDRyxDQUFFLEVBQ1Asa0VBQWtFLEtBQ2hFRCxDQUNOLEdBQVMsQ0FBRSxFQUNIRSxFQUNKLENBQ0UsT0FBVSxNQUNWLE9BQVUsTUFDVixLQUFRLE1BQ1IsaUJBQWtCLFNBQ25CLEVBQUNELENBQUUsR0FDSkEsRUFFRixPQUFJQyxJQUNGSCxFQUFNLFNBQVdHLEVBQ2pCSCxFQUFNRyxDQUFRLEVBQUksSUFFcEJGLEVBQUcsUUFDRCwrR0FDQSxDQUFDRyxFQUFPQyxFQUFTQyxFQUFJQyxFQUFJQyxJQUFPLENBRTlCLEdBQUksQ0FBQ1IsRUFBTSxPQUFRLENBQ2pCLE1BQU1TLEVBQVVELEdBQU1ELEdBQU1ELEdBQ3hCLENBQUNOLEVBQU0sU0FBV0ssSUFBWSxZQUdoQ0wsRUFBTSxRQUFVUyxFQUNoQlQsRUFBTSxjQUFnQixXQUFXUyxDQUFPLEdBRTFDVCxFQUFNLFFBQVVLLEVBQ2hCTCxFQUFNSyxDQUFPLEVBQUksRUFDbEIsQ0FDRixDQUNGLEVBQ0dMLEVBQU0sUUFFUixPQUFPQSxFQUFNLE9BRVJBLENBQ1QsQ0MzQ0EsTUFBQVUsR0FBZUMsV0FBUyxDQUN0QixNQUFPLEdBQ1AsZ0JBQWlCLENBQUUsRUFDbkIsS0FBTSxLQUNOLE1BQU9iLEdBQWUsVUFBVSxXQUFhLEVBQUUsRUFDL0MsVUFBVyxDQUFFLEVBQ2IsWUFBYSxLQUNiLGNBQWUsSUFDakIsQ0FBQyxFQ0pNLFNBQVNjLEVBQWVDLEVBQVVDLEVBQU8sQ0FDOUMsT0FBT0QsRUFDSCxHQUFHQSxDQUFRLElBQUlDLENBQUssR0FDcEJBLENBQ04sQ0FFTyxTQUFTQyxHQUFvQkYsRUFB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
|