',dropdown:'',p2dpad:''};function I(t,e){const n=t.createElementNS(R,"svg");return n.innerHTML=F[e],n}function U(t,e,n){t.insertBefore(e,t.children[n])}function K(t){t.parentElement&&t.parentElement.removeChild(t)}function B(t){for(;t.children.length>0;)t.removeChild(t.children[0])}function H(t){return t.relatedTarget?t.relatedTarget:"explicitOriginalTarget"in t?t.explicitOriginalTarget:null}const z=m("lbl");class q{constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(z()),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("div");n.classList.add(z("l")),g(e.props,"label",(e=>{a(e)?this.element.classList.add(z(void 0,"nol")):(this.element.classList.remove(z(void 0,"nol")),function(t){for(;t.childNodes.length>0;)t.removeChild(t.childNodes[0])}(n),n.appendChild(function(t,e){const n=t.createDocumentFragment();return e.split("\n").map((e=>t.createTextNode(e))).forEach(((e,i)=>{i>0&&n.appendChild(t.createElement("br")),n.appendChild(e)})),n}(t,e)))})),this.element.appendChild(n),this.labelElement=n;const i=t.createElement("div");i.classList.add(z("v")),this.element.appendChild(i),this.valueElement=i}}class $ extends j{constructor(t,e){const n=e.valueController.viewProps;super(Object.assign(Object.assign({},e),{view:new q(t,{props:e.props,viewProps:n}),viewProps:n})),this.props=e.props,this.valueController=e.valueController,this.view.valueElement.appendChild(this.valueController.view.element)}}const G={id:"button",type:"blade",accept(t){const e=L,n=A(t,{title:e.required.string,view:e.required.constant("button"),label:e.optional.string});return n?{params:n}:null},controller:t=>new $(t.document,{blade:t.blade,props:V.fromObject({label:t.params.label}),valueController:new C(t.document,{props:V.fromObject({title:t.params.title}),viewProps:t.viewProps})}),api:t=>t.controller instanceof $&&t.controller.valueController instanceof C?new h(t.controller):null};class Y extends j{constructor(t){super(t),this.value=t.value}}function W(){return new V({positions:E([],{equals:l})})}class Q extends V{constructor(t){super(t)}static create(t){const e=V.createCore({completed:!0,expanded:t,expandedHeight:null,shouldFixHeight:!1,temporaryExpanded:null});return new Q(e)}get styleExpanded(){var t;return null!==(t=this.get("temporaryExpanded"))&&void 0!==t?t:this.get("expanded")}get styleHeight(){if(!this.styleExpanded)return"0";const t=this.get("expandedHeight");return this.get("shouldFixHeight")&&!a(t)?`${t}px`:"auto"}bindExpandedClass(t,e){const n=()=>{this.styleExpanded?t.classList.add(e):t.classList.remove(e)};g(this,"expanded",n),g(this,"temporaryExpanded",n)}cleanUpTransition(){this.set("shouldFixHeight",!1),this.set("expandedHeight",null),this.set("completed",!0)}}function X(t,e){e.style.height=t.styleHeight}function Z(t,e){t.value("expanded").emitter.on("beforechange",(()=>{t.set("completed",!1),a(t.get("expandedHeight"))&&t.set("expandedHeight",function(t,e){let n=0;return function(t,e){const n=t.style.transition;t.style.transition="none",e(),t.style.transition=n}(e,(()=>{t.set("expandedHeight",null),t.set("temporaryExpanded",!0),n=e.clientHeight,t.set("temporaryExpanded",null)})),n}(t,e)),t.set("shouldFixHeight",!0)})),t.emitter.on("change",(()=>{X(t,e)})),X(t,e),e.addEventListener("transitionend",(e=>{"height"===e.propertyName&&t.cleanUpTransition()}))}class J extends e{constructor(t,e){super(t),this.rackApi_=e}}class tt{constructor(t){this.emitter=new u,this.items_=[],this.cache_=new Set,this.onSubListAdd_=this.onSubListAdd_.bind(this),this.onSubListRemove_=this.onSubListRemove_.bind(this),this.extract_=t}get items(){return this.items_}allItems(){return Array.from(this.cache_)}find(t){for(const e of this.allItems())if(t(e))return e;return null}includes(t){return this.cache_.has(t)}add(t,e){if(this.includes(t))throw c.shouldNeverHappen();const n=void 0!==e?e:this.items_.length;this.items_.splice(n,0,t),this.cache_.add(t);const i=this.extract_(t);i&&(i.emitter.on("add",this.onSubListAdd_),i.emitter.on("remove",this.onSubListRemove_),i.allItems().forEach((t=>{this.cache_.add(t)}))),this.emitter.emit("add",{index:n,item:t,root:this,target:this})}remove(t){const e=this.items_.indexOf(t);if(e<0)return;this.items_.splice(e,1),this.cache_.delete(t);const n=this.extract_(t);n&&(n.emitter.off("add",this.onSubListAdd_),n.emitter.off("remove",this.onSubListRemove_)),this.emitter.emit("remove",{index:e,item:t,root:this,target:this})}onSubListAdd_(t){this.cache_.add(t.item),this.emitter.emit("add",{index:t.index,item:t.item,root:this,target:t.target})}onSubListRemove_(t){this.cache_.delete(t.item),this.emitter.emit("remove",{index:t.index,item:t.item,root:this,target:t.target})}}class et extends e{constructor(t){super(t),this.onBindingChange_=this.onBindingChange_.bind(this),this.emitter_=new u,this.controller_.binding.emitter.on("change",this.onBindingChange_)}get label(){return this.controller_.props.get("label")}set label(t){this.controller_.props.set("label",t)}on(t,e){const n=e.bind(this);return this.emitter_.on(t,(t=>{n(t.event)})),this}refresh(){this.controller_.binding.read()}onBindingChange_(t){const e=t.sender.target.read();this.emitter_.emit("change",{event:new i(this,e,this.controller_.binding.target.presetKey,t.options.last)})}}class nt extends ${constructor(t,e){super(t,e),this.binding=e.binding}}class it extends e{constructor(t){super(t),this.onBindingUpdate_=this.onBindingUpdate_.bind(this),this.emitter_=new u,this.controller_.binding.emitter.on("update",this.onBindingUpdate_)}get label(){return this.controller_.props.get("label")}set label(t){this.controller_.props.set("label",t)}on(t,e){const n=e.bind(this);return this.emitter_.on(t,(t=>{n(t.event)})),this}refresh(){this.controller_.binding.read()}onBindingUpdate_(t){const e=t.sender.target.read();this.emitter_.emit("update",{event:new r(this,e,this.controller_.binding.target.presetKey)})}}class rt extends ${constructor(t,e){super(t,e),this.binding=e.binding,this.viewProps.bindDisabled(this.binding.ticker),this.viewProps.handleDispose((()=>{this.binding.dispose()}))}}function ot(t){return t instanceof lt?t.apiSet_:t instanceof J?t.rackApi_.apiSet_:null}function st(t,e){const n=t.find((t=>t.controller_===e));if(!n)throw c.shouldNeverHappen();return n}function at(t,e,n){if(!d.isBindable(t))throw c.notBindable();return new d(t,e,n)}class lt extends e{constructor(t,e){super(t),this.onRackAdd_=this.onRackAdd_.bind(this),this.onRackRemove_=this.onRackRemove_.bind(this),this.onRackInputChange_=this.onRackInputChange_.bind(this),this.onRackMonitorUpdate_=this.onRackMonitorUpdate_.bind(this),this.emitter_=new u,this.apiSet_=new tt(ot),this.pool_=e;const n=this.controller_.rack;n.emitter.on("add",this.onRackAdd_),n.emitter.on("remove",this.onRackRemove_),n.emitter.on("inputchange",this.onRackInputChange_),n.emitter.on("monitorupdate",this.onRackMonitorUpdate_),n.children.forEach((t=>{this.setUpApi_(t)}))}get children(){return this.controller_.rack.children.map((t=>st(this.apiSet_,t)))}addInput(t,e,n){const i=null!=n?n:{},r=this.pool_.createInput(this.controller_.view.element.ownerDocument,at(t,e,i.presetKey),i),o=new et(r);return this.add(o,i.index)}addMonitor(t,e,n){const i=null!=n?n:{},r=this.pool_.createMonitor(this.controller_.view.element.ownerDocument,at(t,e),i),o=new it(r);return this.add(o,i.index)}addFolder(t){return function(t,e){return t.addBlade(Object.assign(Object.assign({},e),{view:"folder"}))}(this,t)}addButton(t){return function(t,e){return t.addBlade(Object.assign(Object.assign({},e),{view:"button"}))}(this,t)}addSeparator(t){return function(t,e){return t.addBlade(Object.assign(Object.assign({},null!=e?e:{}),{view:"separator"}))}(this,t)}addTab(t){return function(t,e){return t.addBlade(Object.assign(Object.assign({},e),{view:"tab"}))}(this,t)}add(t,e){this.controller_.rack.add(t.controller_,e);const n=this.apiSet_.find((e=>e.controller_===t.controller_));return n&&this.apiSet_.remove(n),this.apiSet_.add(t),t}remove(t){this.controller_.rack.remove(t.controller_)}addBlade(t){const e=this.pool_.createBlade(this.controller_.view.element.ownerDocument,t),n=this.pool_.createBladeApi(e);return this.add(n,t.index)}on(t,e){const n=e.bind(this);return this.emitter_.on(t,(t=>{n(t.event)})),this}setUpApi_(t){this.apiSet_.find((e=>e.controller_===t))||this.apiSet_.add(this.pool_.createBladeApi(t))}onRackAdd_(t){this.setUpApi_(t.bladeController)}onRackRemove_(t){if(t.isRoot){const e=st(this.apiSet_,t.bladeController);this.apiSet_.remove(e)}}onRackInputChange_(t){const e=t.bladeController;if(e instanceof nt){const n=st(this.apiSet_,e),r=e.binding;this.emitter_.emit("change",{event:new i(n,r.target.read(),r.target.presetKey,t.options.last)})}else if(e instanceof Y){const n=st(this.apiSet_,e);this.emitter_.emit("change",{event:new i(n,e.value.rawValue,void 0,t.options.last)})}}onRackMonitorUpdate_(t){if(!(t.bladeController instanceof rt))throw c.shouldNeverHappen();const e=st(this.apiSet_,t.bladeController),n=t.bladeController.binding;this.emitter_.emit("update",{event:new r(e,n.target.read(),n.target.presetKey)})}}class pt extends J{constructor(t,e){super(t,new lt(t.rackController,e)),this.emitter_=new u,this.controller_.foldable.value("expanded").emitter.on("change",(t=>{this.emitter_.emit("fold",{event:new o(this,t.sender.rawValue)})})),this.rackApi_.on("change",(t=>{this.emitter_.emit("change",{event:t})})),this.rackApi_.on("update",(t=>{this.emitter_.emit("update",{event:t})}))}get expanded(){return this.controller_.foldable.get("expanded")}set expanded(t){this.controller_.foldable.set("expanded",t)}get title(){return this.controller_.props.get("title")}set title(t){this.controller_.props.set("title",t)}get children(){return this.rackApi_.children}addInput(t,e,n){return this.rackApi_.addInput(t,e,n)}addMonitor(t,e,n){return this.rackApi_.addMonitor(t,e,n)}addFolder(t){return this.rackApi_.addFolder(t)}addButton(t){return this.rackApi_.addButton(t)}addSeparator(t){return this.rackApi_.addSeparator(t)}addTab(t){return this.rackApi_.addTab(t)}add(t,e){return this.rackApi_.add(t,e)}remove(t){this.rackApi_.remove(t)}addBlade(t){return this.rackApi_.addBlade(t)}on(t,e){const n=e.bind(this);return this.emitter_.on(t,(t=>{n(t.event)})),this}}class ct extends j{constructor(t){super({blade:t.blade,view:t.view,viewProps:t.rackController.viewProps}),this.rackController=t.rackController}}class dt{constructor(t,e){const n=m(e.viewName);this.element=t.createElement("div"),this.element.classList.add(n()),e.viewProps.bindClassModifiers(this.element)}}function ht(t){return t instanceof mt?t.rack:t instanceof ct?t.rackController.rack:null}function ut(t){const e=ht(t);return e?e.bcSet_:null}class vt{constructor(t){var e;this.onBladePositionsChange_=this.onBladePositionsChange_.bind(this),this.onSetAdd_=this.onSetAdd_.bind(this),this.onSetRemove_=this.onSetRemove_.bind(this),this.onChildDispose_=this.onChildDispose_.bind(this),this.onChildPositionsChange_=this.onChildPositionsChange_.bind(this),this.onChildInputChange_=this.onChildInputChange_.bind(this),this.onChildMonitorUpdate_=this.onChildMonitorUpdate_.bind(this),this.onChildValueChange_=this.onChildValueChange_.bind(this),this.onChildViewPropsChange_=this.onChildViewPropsChange_.bind(this),this.onDescendantLayout_=this.onDescendantLayout_.bind(this),this.onDescendantInputChange_=this.onDescendantInputChange_.bind(this),this.onDescendantMonitorUpdate_=this.onDescendantMonitorUpdate_.bind(this),this.emitter=new u,this.blade_=null!=t?t:null,null===(e=this.blade_)||void 0===e||e.value("positions").emitter.on("change",this.onBladePositionsChange_),this.bcSet_=new tt(ut),this.bcSet_.emitter.on("add",this.onSetAdd_),this.bcSet_.emitter.on("remove",this.onSetRemove_)}get children(){return this.bcSet_.items}add(t,e){t.parent&&t.parent.remove(t),t.parent_=this,this.bcSet_.add(t,e)}remove(t){t.parent_=null,this.bcSet_.remove(t)}find(t){return this.bcSet_.allItems().filter((e=>e instanceof t))}onSetAdd_(t){this.updatePositions_();const e=t.target===t.root;if(this.emitter.emit("add",{bladeController:t.item,index:t.index,isRoot:e,sender:this}),!e)return;const n=t.item;if(n.viewProps.emitter.on("change",this.onChildViewPropsChange_),n.blade.value("positions").emitter.on("change",this.onChildPositionsChange_),n.viewProps.handleDispose(this.onChildDispose_),n instanceof nt)n.binding.emitter.on("change",this.onChildInputChange_);else if(n instanceof rt)n.binding.emitter.on("update",this.onChildMonitorUpdate_);else if(n instanceof Y)n.value.emitter.on("change",this.onChildValueChange_);else{const t=ht(n);if(t){const e=t.emitter;e.on("layout",this.onDescendantLayout_),e.on("inputchange",this.onDescendantInputChange_),e.on("monitorupdate",this.onDescendantMonitorUpdate_)}}}onSetRemove_(t){this.updatePositions_();const e=t.target===t.root;if(this.emitter.emit("remove",{bladeController:t.item,isRoot:e,sender:this}),!e)return;const n=t.item;if(n instanceof nt)n.binding.emitter.off("change",this.onChildInputChange_);else if(n instanceof rt)n.binding.emitter.off("update",this.onChildMonitorUpdate_);else if(n instanceof Y)n.value.emitter.off("change",this.onChildValueChange_);else{const t=ht(n);if(t){const e=t.emitter;e.off("layout",this.onDescendantLayout_),e.off("inputchange",this.onDescendantInputChange_),e.off("monitorupdate",this.onDescendantMonitorUpdate_)}}}updatePositions_(){const t=this.bcSet_.items.filter((t=>!t.viewProps.get("hidden"))),e=t[0],n=t[t.length-1];this.bcSet_.items.forEach((t=>{const i=[];t===e&&(i.push("first"),this.blade_&&!this.blade_.get("positions").includes("veryfirst")||i.push("veryfirst")),t===n&&(i.push("last"),this.blade_&&!this.blade_.get("positions").includes("verylast")||i.push("verylast")),t.blade.set("positions",i)}))}onChildPositionsChange_(){this.updatePositions_(),this.emitter.emit("layout",{sender:this})}onChildViewPropsChange_(t){this.updatePositions_(),this.emitter.emit("layout",{sender:this})}onChildDispose_(){this.bcSet_.items.filter((t=>t.viewProps.get("disposed"))).forEach((t=>{this.bcSet_.remove(t)}))}onChildInputChange_(t){const e=function(t,e){for(let n=0;n{for(let t=this.rack.children.length-1;t>=0;t--){this.rack.children[t].viewProps.set("disposed",!0)}}))}onRackAdd_(t){t.isRoot&&U(this.view.element,t.bladeController.view.element,t.index)}onRackRemove_(t){t.isRoot&&K(t.bladeController.view.element)}}const ft=m("cnt");class bt{constructor(t,e){var n;this.className_=m(null!==(n=e.viewName)&&void 0!==n?n:"fld"),this.element=t.createElement("div"),this.element.classList.add(this.className_(),ft()),e.viewProps.bindClassModifiers(this.element),this.foldable_=e.foldable,this.foldable_.bindExpandedClass(this.element,this.className_(void 0,"expanded")),g(this.foldable_,"completed",_(this.element,this.className_(void 0,"cpl")));const i=t.createElement("button");i.classList.add(this.className_("b")),g(e.props,"title",(t=>{a(t)?this.element.classList.add(this.className_(void 0,"not")):this.element.classList.remove(this.className_(void 0,"not"))})),e.viewProps.bindDisabled(i),this.element.appendChild(i),this.buttonElement=i;const r=t.createElement("div");r.classList.add(this.className_("t")),w(e.props.value("title"),r),this.buttonElement.appendChild(r),this.titleElement=r;const o=t.createElement("div");o.classList.add(this.className_("m")),this.buttonElement.appendChild(o);const s=e.containerElement;s.classList.add(this.className_("c")),this.element.appendChild(s),this.containerElement=s}}class gt extends ct{constructor(t,e){var n;const i=Q.create(null===(n=e.expanded)||void 0===n||n),r=new mt(t,{blade:e.blade,root:e.root,viewProps:e.viewProps});super(Object.assign(Object.assign({},e),{rackController:r,view:new bt(t,{containerElement:r.view.element,foldable:i,props:e.props,viewName:e.root?"rot":void 0,viewProps:e.viewProps})})),this.onTitleClick_=this.onTitleClick_.bind(this),this.props=e.props,this.foldable=i,Z(this.foldable,this.view.containerElement),this.rackController.rack.emitter.on("add",(()=>{this.foldable.cleanUpTransition()})),this.rackController.rack.emitter.on("remove",(()=>{this.foldable.cleanUpTransition()})),this.view.buttonElement.addEventListener("click",this.onTitleClick_)}get document(){return this.view.element.ownerDocument}onTitleClick_(){this.foldable.set("expanded",!this.foldable.get("expanded"))}}const _t={id:"folder",type:"blade",accept(t){const e=L,n=A(t,{title:e.required.string,view:e.required.constant("folder"),expanded:e.optional.boolean});return n?{params:n}:null},controller:t=>new gt(t.document,{blade:t.blade,expanded:t.params.expanded,props:V.fromObject({title:t.params.title}),viewProps:t.viewProps}),api:t=>t.controller instanceof gt?new pt(t.controller,t.pool):null};class wt extends Y{constructor(t,e){const n=e.valueController.viewProps;super(Object.assign(Object.assign({},e),{value:e.valueController.value,view:new q(t,{props:e.props,viewProps:n}),viewProps:n})),this.props=e.props,this.valueController=e.valueController,this.view.valueElement.appendChild(this.valueController.view.element)}}class yt extends e{}const xt=m("spr");class Ct{constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(xt()),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("hr");n.classList.add(xt("r")),this.element.appendChild(n)}}class Pt extends j{constructor(t,e){super(Object.assign(Object.assign({},e),{view:new Ct(t,{viewProps:e.viewProps})}))}}const kt={id:"separator",type:"blade",accept(t){const e=A(t,{view:L.required.constant("separator")});return e?{params:e}:null},controller:t=>new Pt(t.document,{blade:t.blade,viewProps:t.viewProps}),api:t=>t.controller instanceof Pt?new yt(t.controller):null},Et=m("");function Vt(t,e){return _(t,Et(void 0,e))}class Mt extends V{constructor(t){super(t)}static create(t){var e,n;const i=null!=t?t:{},r={disabled:null!==(e=i.disabled)&&void 0!==e&&e,disposed:!1,hidden:null!==(n=i.hidden)&&void 0!==n&&n},o=V.createCore(r);return new Mt(o)}bindClassModifiers(t){g(this,"disabled",Vt(t,"disabled")),g(this,"hidden",Vt(t,"hidden"))}bindDisabled(t){g(this,"disabled",(e=>{t.disabled=e}))}bindTabIndex(t){g(this,"disabled",(e=>{t.tabIndex=e?-1:0}))}handleDispose(t){this.value("disposed").emitter.on("change",(e=>{e&&t()}))}}const St=m("tbi");class Lt{constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(St()),e.viewProps.bindClassModifiers(this.element),g(e.props,"selected",(t=>{t?this.element.classList.add(St(void 0,"sel")):this.element.classList.remove(St(void 0,"sel"))}));const n=t.createElement("button");n.classList.add(St("b")),e.viewProps.bindDisabled(n),this.element.appendChild(n),this.buttonElement=n;const i=t.createElement("div");i.classList.add(St("t")),w(e.props.value("title"),i),this.buttonElement.appendChild(i),this.titleElement=i}}class At{constructor(t,e){this.emitter=new u,this.onClick_=this.onClick_.bind(this),this.props=e.props,this.viewProps=e.viewProps,this.view=new Lt(t,{props:e.props,viewProps:e.viewProps}),this.view.buttonElement.addEventListener("click",this.onClick_)}onClick_(){this.emitter.emit("click",{sender:this})}}class Tt{constructor(t,e){this.onItemClick_=this.onItemClick_.bind(this),this.ic_=new At(t,{props:e.itemProps,viewProps:Mt.create()}),this.ic_.emitter.on("click",this.onItemClick_),this.cc_=new mt(t,{blade:W(),viewProps:Mt.create()}),this.props=e.props,g(this.props,"selected",(t=>{this.itemController.props.set("selected",t),this.contentController.viewProps.set("hidden",!t)}))}get itemController(){return this.ic_}get contentController(){return this.cc_}onItemClick_(){this.props.set("selected",!0)}}class Dt{constructor(t,e){this.controller_=t,this.rackApi_=e}get title(){var t;return null!==(t=this.controller_.itemController.props.get("title"))&&void 0!==t?t:""}set title(t){this.controller_.itemController.props.set("title",t)}get selected(){return this.controller_.props.get("selected")}set selected(t){this.controller_.props.set("selected",t)}get children(){return this.rackApi_.children}addButton(t){return this.rackApi_.addButton(t)}addFolder(t){return this.rackApi_.addFolder(t)}addSeparator(t){return this.rackApi_.addSeparator(t)}addTab(t){return this.rackApi_.addTab(t)}add(t,e){this.rackApi_.add(t,e)}remove(t){this.rackApi_.remove(t)}addInput(t,e,n){return this.rackApi_.addInput(t,e,n)}addMonitor(t,e,n){return this.rackApi_.addMonitor(t,e,n)}addBlade(t){return this.rackApi_.addBlade(t)}}class jt extends J{constructor(t,e){super(t,new lt(t.rackController,e)),this.onPageAdd_=this.onPageAdd_.bind(this),this.onPageRemove_=this.onPageRemove_.bind(this),this.onSelect_=this.onSelect_.bind(this),this.emitter_=new u,this.pageApiMap_=new Map,this.rackApi_.on("change",(t=>{this.emitter_.emit("change",{event:t})})),this.rackApi_.on("update",(t=>{this.emitter_.emit("update",{event:t})})),this.controller_.tab.selectedIndex.emitter.on("change",this.onSelect_),this.controller_.pageSet.emitter.on("add",this.onPageAdd_),this.controller_.pageSet.emitter.on("remove",this.onPageRemove_),this.controller_.pageSet.items.forEach((t=>{this.setUpPageApi_(t)}))}get pages(){return this.controller_.pageSet.items.map((t=>{const e=this.pageApiMap_.get(t);if(!e)throw c.shouldNeverHappen();return e}))}addPage(t){const e=new Tt(this.controller_.view.element.ownerDocument,{itemProps:V.fromObject({selected:!1,title:t.title}),props:V.fromObject({selected:!1})});this.controller_.add(e,t.index);const n=this.pageApiMap_.get(e);if(!n)throw c.shouldNeverHappen();return n}removePage(t){this.controller_.remove(t)}on(t,e){const n=e.bind(this);return this.emitter_.on(t,(t=>{n(t.event)})),this}setUpPageApi_(t){const e=this.rackApi_.apiSet_.find((e=>e.controller_===t.contentController));if(!e)throw c.shouldNeverHappen();const n=new Dt(t,e);this.pageApiMap_.set(t,n)}onPageAdd_(t){this.setUpPageApi_(t.item)}onPageRemove_(t){if(!this.pageApiMap_.get(t.item))throw c.shouldNeverHappen();this.pageApiMap_.delete(t.item)}onSelect_(t){this.emitter_.emit("select",{event:new s(this,t.rawValue)})}}class Rt{constructor(){this.onItemSelectedChange_=this.onItemSelectedChange_.bind(this),this.empty=E(!0),this.selectedIndex=E(-1),this.items_=[]}add(t,e){this.items_.splice(null!=e?e:this.items_.length,0,t),t.emitter.on("change",this.onItemSelectedChange_),this.keepSelection_()}remove(t){const e=this.items_.indexOf(t);e<0||(this.items_.splice(e,1),t.emitter.off("change",this.onItemSelectedChange_),this.keepSelection_())}keepSelection_(){if(0===this.items_.length)return this.selectedIndex.rawValue=-1,void(this.empty.rawValue=!0);const t=this.items_.findIndex((t=>t.rawValue));t<0?(this.items_.forEach(((t,e)=>{t.rawValue=0===e})),this.selectedIndex.rawValue=0):(this.items_.forEach(((e,n)=>{e.rawValue=n===t})),this.selectedIndex.rawValue=t),this.empty.rawValue=!1}onItemSelectedChange_(t){if(t.rawValue){const e=this.items_.findIndex((e=>e===t.sender));this.items_.forEach(((t,n)=>{t.rawValue=n===e})),this.selectedIndex.rawValue=e}else this.keepSelection_()}}const Ot=m("tab");class Nt{constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(Ot(),ft()),e.viewProps.bindClassModifiers(this.element),b(e.empty,_(this.element,Ot(void 0,"nop")));const n=t.createElement("div");n.classList.add(Ot("i")),this.element.appendChild(n),this.itemsElement=n;const i=e.contentsElement;i.classList.add(Ot("c")),this.element.appendChild(i),this.contentsElement=i}}class Ft extends ct{constructor(t,e){const n=new mt(t,{blade:e.blade,viewProps:e.viewProps}),i=new Rt;super({blade:e.blade,rackController:n,view:new Nt(t,{contentsElement:n.view.element,empty:i.empty,viewProps:e.viewProps})}),this.onPageAdd_=this.onPageAdd_.bind(this),this.onPageRemove_=this.onPageRemove_.bind(this),this.pageSet_=new tt((()=>null)),this.pageSet_.emitter.on("add",this.onPageAdd_),this.pageSet_.emitter.on("remove",this.onPageRemove_),this.tab=i}get pageSet(){return this.pageSet_}add(t,e){this.pageSet_.add(t,e)}remove(t){this.pageSet_.remove(this.pageSet_.items[t])}onPageAdd_(t){const e=t.item;U(this.view.itemsElement,e.itemController.view.element,t.index),this.rackController.rack.add(e.contentController,t.index),this.tab.add(e.props.value("selected"))}onPageRemove_(t){const e=t.item;K(e.itemController.view.element),this.rackController.rack.remove(e.contentController),this.tab.remove(e.props.value("selected"))}}const It={id:"tab",type:"blade",accept(t){const e=L,n=A(t,{pages:e.required.array(e.required.object({title:e.required.string})),view:e.required.constant("tab")});return n&&0!==n.pages.length?{params:n}:null},controller(t){const e=new Ft(t.document,{blade:t.blade,viewProps:t.viewProps});return t.params.pages.forEach((n=>{const i=new Tt(t.document,{itemProps:V.fromObject({selected:!1,title:n.title}),props:V.fromObject({selected:!1})});e.add(i)})),e},api:t=>t.controller instanceof Ft?new jt(t.controller,t.pool):null};class Ut{constructor(){this.disabled=!1,this.emitter=new u}dispose(){}tick(){this.disabled||this.emitter.emit("tick",{sender:this})}}class Kt{constructor(t,e){this.disabled_=!1,this.timerId_=null,this.onTick_=this.onTick_.bind(this),this.doc_=t,this.emitter=new u,this.interval_=e,this.setTimer_()}get disabled(){return this.disabled_}set disabled(t){this.disabled_=t,this.disabled_?this.clearTimer_():this.setTimer_()}dispose(){this.clearTimer_()}clearTimer_(){if(null===this.timerId_)return;const t=this.doc_.defaultView;t&&t.clearInterval(this.timerId_),this.timerId_=null}setTimer_(){if(this.clearTimer_(),this.interval_<=0)return;const t=this.doc_.defaultView;t&&(this.timerId_=t.setInterval(this.onTick_,this.interval_))}onTick_(){this.disabled_||this.emitter.emit("tick",{sender:this})}}class Bt{constructor(t){this.constraints=t}constrain(t){return this.constraints.reduce(((t,e)=>e.constrain(t)),t)}}function Ht(t,e){if(t instanceof e)return t;if(t instanceof Bt){const n=t.constraints.reduce(((t,n)=>t||(n instanceof e?n:null)),null);if(n)return n}return null}class zt{constructor(t){this.options=t}constrain(t){const e=this.options;if(0===e.length)return t;return e.filter((e=>e.value===t)).length>0?t:e[0].value}}class qt{constructor(t){this.maxValue=t.max,this.minValue=t.min}constrain(t){let e=t;return a(this.minValue)||(e=Math.max(e,this.minValue)),a(this.maxValue)||(e=Math.min(e,this.maxValue)),e}}class $t{constructor(t,e=0){this.step=t,this.origin=e}constrain(t){const e=this.origin%this.step;return e+Math.round((t-e)/this.step)*this.step}}const Gt=m("lst");class Yt{constructor(t,e){this.onValueChange_=this.onValueChange_.bind(this),this.props_=e.props,this.element=t.createElement("div"),this.element.classList.add(Gt()),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("select");n.classList.add(Gt("s")),g(this.props_,"options",(e=>{B(n),e.forEach(((e,i)=>{const r=t.createElement("option");r.dataset.index=String(i),r.textContent=e.text,r.value=String(e.value),n.appendChild(r)}))})),e.viewProps.bindDisabled(n),this.element.appendChild(n),this.selectElement=n;const i=t.createElement("div");i.classList.add(Gt("m")),i.appendChild(I(t,"dropdown")),this.element.appendChild(i),e.value.emitter.on("change",this.onValueChange_),this.value_=e.value,this.update_()}update_(){this.selectElement.value=String(this.value_.rawValue)}onValueChange_(){this.update_()}}class Wt{constructor(t,e){this.onSelectChange_=this.onSelectChange_.bind(this),this.props=e.props,this.value=e.value,this.viewProps=e.viewProps,this.view=new Yt(t,{props:this.props,value:this.value,viewProps:this.viewProps}),this.view.selectElement.addEventListener("change",this.onSelectChange_)}onSelectChange_(t){const e=t.currentTarget.selectedOptions.item(0);if(!e)return;const n=Number(e.dataset.index);this.value.rawValue=this.props.get("options")[n].value}}const Qt=m("pop");class Xt{constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(Qt()),e.viewProps.bindClassModifiers(this.element),b(e.shows,_(this.element,Qt(void 0,"v")))}}class Zt{constructor(t,e){this.shows=E(!1),this.viewProps=e.viewProps,this.view=new Xt(t,{shows:this.shows,viewProps:this.viewProps})}}const Jt=m("txt");class te{constructor(t,e){this.onChange_=this.onChange_.bind(this),this.element=t.createElement("div"),this.element.classList.add(Jt()),e.viewProps.bindClassModifiers(this.element),this.props_=e.props,this.props_.emitter.on("change",this.onChange_);const n=t.createElement("input");n.classList.add(Jt("i")),n.type="text",e.viewProps.bindDisabled(n),this.element.appendChild(n),this.inputElement=n,e.value.emitter.on("change",this.onChange_),this.value_=e.value,this.refresh()}refresh(){const t=this.props_.get("formatter");this.inputElement.value=t(this.value_.rawValue)}onChange_(){this.refresh()}}class ee{constructor(t,e){this.onInputChange_=this.onInputChange_.bind(this),this.parser_=e.parser,this.props=e.props,this.value=e.value,this.viewProps=e.viewProps,this.view=new te(t,{props:e.props,value:this.value,viewProps:this.viewProps}),this.view.inputElement.addEventListener("change",this.onInputChange_)}onInputChange_(t){const e=this.parser_(t.currentTarget.value);a(e)||(this.value.rawValue=e),this.view.refresh()}}function ne(t){return"false"!==t&&!!t}function ie(t){return function(t){return String(t)}(t)}class re{constructor(t){this.text=t}evaluate(){return Number(this.text)}toString(){return this.text}}const oe={"**":(t,e)=>Math.pow(t,e),"*":(t,e)=>t*e,"/":(t,e)=>t/e,"%":(t,e)=>t%e,"+":(t,e)=>t+e,"-":(t,e)=>t-e,"<<":(t,e)=>t<>":(t,e)=>t>>e,">>>":(t,e)=>t>>>e,"&":(t,e)=>t&e,"^":(t,e)=>t^e,"|":(t,e)=>t|e};class se{constructor(t,e,n){this.left=e,this.operator=t,this.right=n}evaluate(){const t=oe[this.operator];if(!t)throw new Error(`unexpected binary operator: '${this.operator}`);return t(this.left.evaluate(),this.right.evaluate())}toString(){return["b(",this.left.toString(),this.operator,this.right.toString(),")"].join(" ")}}const ae={"+":t=>t,"-":t=>-t,"~":t=>~t};class le{constructor(t,e){this.operator=t,this.expression=e}evaluate(){const t=ae[this.operator];if(!t)throw new Error(`unexpected unary operator: '${this.operator}`);return t(this.expression.evaluate())}toString(){return["u(",this.operator,this.expression.toString(),")"].join(" ")}}function pe(t){return(e,n)=>{for(let i=0;ie.startsWith(t,n)))[0];return i?(n+=i.length,{cursor:n+=ce(e,n).length,operator:i}):null}const _e=[["**"],["*","/","%"],["+","-"],["<<",">>>",">>"],["&"],["^"],["|"]].reduce(((t,e)=>function(t,e){return(n,i)=>{const r=t(n,i);if(!r)return null;i=r.cursor;let o=r.evaluable;for(;;){const r=ge(e,n,i);if(!r)break;const s=t(n,i=r.cursor);if(!s)return null;i=s.cursor,o=new se(r.operator,o,s.evaluable)}return o?{cursor:i,evaluable:o}:null}}(t,e)),(function t(e,n){const i=be(e,n);if(i)return i;const r=e.substr(n,1);if("+"!==r&&"-"!==r&&"~"!==r)return null;const o=t(e,n+=r.length);return o?{cursor:n=o.cursor,evaluable:new le(r,o.evaluable)}:null}));function we(t,e){return e+=ce(t,e).length,_e(t,e)}function ye(t){var e;const n=function(t){const e=we(t,0);return e?e.cursor+ce(t,e.cursor).length!==t.length?null:e.evaluable:null}(t);return null!==(e=null==n?void 0:n.evaluate())&&void 0!==e?e:null}function xe(t){if("number"==typeof t)return t;if("string"==typeof t){const e=ye(t);if(!a(e))return e}return 0}function Ce(t){return String(t)}function Pe(t){return e=>e.toFixed(Math.max(Math.min(t,20),0))}const ke=Pe(0);function Ee(t){return ke(t)+"%"}function Ve(t){return String(t)}function Me(t){return t}function Se(t,e){for(;t.length{o((()=>{e.setRawValue(n(t,e),i.options)}))})),e.emitter.on("change",(r=>{o((()=>{t.setRawValue(i(t,e),r.options)})),o((()=>{e.setRawValue(n(t,e),r.options)}))})),o((()=>{e.setRawValue(n(t,e),{forceEmit:!1,last:!0})}))}function De(t,e){const n=t*(e.altKey?.1:1)*(e.shiftKey?10:1);return e.upKey?+n:e.downKey?-n:0}function je(t){return{altKey:t.altKey,downKey:"ArrowDown"===t.key,shiftKey:t.shiftKey,upKey:"ArrowUp"===t.key}}function Re(t){return{altKey:t.altKey,downKey:"ArrowLeft"===t.key,shiftKey:t.shiftKey,upKey:"ArrowRight"===t.key}}function Oe(t){return function(t){return"ArrowUp"===t||"ArrowDown"===t}(t)||"ArrowLeft"===t||"ArrowRight"===t}function Ne(t,e){var n,i;const r=e.ownerDocument.defaultView,o=e.getBoundingClientRect();return{x:t.pageX-((null!==(n=r&&r.scrollX)&&void 0!==n?n:0)+o.left),y:t.pageY-((null!==(i=r&&r.scrollY)&&void 0!==i?i:0)+o.top)}}class Fe{constructor(t){this.lastTouch_=null,this.onDocumentMouseMove_=this.onDocumentMouseMove_.bind(this),this.onDocumentMouseUp_=this.onDocumentMouseUp_.bind(this),this.onMouseDown_=this.onMouseDown_.bind(this),this.onTouchEnd_=this.onTouchEnd_.bind(this),this.onTouchMove_=this.onTouchMove_.bind(this),this.onTouchStart_=this.onTouchStart_.bind(this),this.elem_=t,this.emitter=new u,t.addEventListener("touchstart",this.onTouchStart_,{passive:!1}),t.addEventListener("touchmove",this.onTouchMove_,{passive:!0}),t.addEventListener("touchend",this.onTouchEnd_),t.addEventListener("mousedown",this.onMouseDown_)}computePosition_(t){const e=this.elem_.getBoundingClientRect();return{bounds:{width:e.width,height:e.height},point:t?{x:t.x,y:t.y}:null}}onMouseDown_(t){var e;t.preventDefault(),null===(e=t.currentTarget)||void 0===e||e.focus();const n=this.elem_.ownerDocument;n.addEventListener("mousemove",this.onDocumentMouseMove_),n.addEventListener("mouseup",this.onDocumentMouseUp_),this.emitter.emit("down",{altKey:t.altKey,data:this.computePosition_(Ne(t,this.elem_)),sender:this,shiftKey:t.shiftKey})}onDocumentMouseMove_(t){this.emitter.emit("move",{altKey:t.altKey,data:this.computePosition_(Ne(t,this.elem_)),sender:this,shiftKey:t.shiftKey})}onDocumentMouseUp_(t){const e=this.elem_.ownerDocument;e.removeEventListener("mousemove",this.onDocumentMouseMove_),e.removeEventListener("mouseup",this.onDocumentMouseUp_),this.emitter.emit("up",{altKey:t.altKey,data:this.computePosition_(Ne(t,this.elem_)),sender:this,shiftKey:t.shiftKey})}onTouchStart_(t){t.preventDefault();const e=t.targetTouches.item(0),n=this.elem_.getBoundingClientRect();this.emitter.emit("down",{altKey:t.altKey,data:this.computePosition_(e?{x:e.clientX-n.left,y:e.clientY-n.top}:void 0),sender:this,shiftKey:t.shiftKey}),this.lastTouch_=e}onTouchMove_(t){const e=t.targetTouches.item(0),n=this.elem_.getBoundingClientRect();this.emitter.emit("move",{altKey:t.altKey,data:this.computePosition_(e?{x:e.clientX-n.left,y:e.clientY-n.top}:void 0),sender:this,shiftKey:t.shiftKey}),this.lastTouch_=e}onTouchEnd_(t){var e;const n=null!==(e=t.targetTouches.item(0))&&void 0!==e?e:this.lastTouch_,i=this.elem_.getBoundingClientRect();this.emitter.emit("up",{altKey:t.altKey,data:this.computePosition_(n?{x:n.clientX-i.left,y:n.clientY-i.top}:void 0),sender:this,shiftKey:t.shiftKey})}}function Ie(t,e,n,i,r){return i+(t-e)/(n-e)*(r-i)}function Ue(t){return String(t.toFixed(10)).split(".")[1].replace(/0+$/,"").length}function Ke(t,e,n){return Math.min(Math.max(t,e),n)}function Be(t,e){return(t%e+e)%e}const He=m("txt");class ze{constructor(t,e){this.onChange_=this.onChange_.bind(this),this.props_=e.props,this.props_.emitter.on("change",this.onChange_),this.element=t.createElement("div"),this.element.classList.add(He(),He(void 0,"num")),e.arrayPosition&&this.element.classList.add(He(void 0,e.arrayPosition)),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("input");n.classList.add(He("i")),n.type="text",e.viewProps.bindDisabled(n),this.element.appendChild(n),this.inputElement=n,this.onDraggingChange_=this.onDraggingChange_.bind(this),this.dragging_=e.dragging,this.dragging_.emitter.on("change",this.onDraggingChange_),this.element.classList.add(He()),this.inputElement.classList.add(He("i"));const i=t.createElement("div");i.classList.add(He("k")),this.element.appendChild(i),this.knobElement=i;const r=t.createElementNS(R,"svg");r.classList.add(He("g")),this.knobElement.appendChild(r);const o=t.createElementNS(R,"path");o.classList.add(He("gb")),r.appendChild(o),this.guideBodyElem_=o;const s=t.createElementNS(R,"path");s.classList.add(He("gh")),r.appendChild(s),this.guideHeadElem_=s;const a=t.createElement("div");a.classList.add(m("tt")()),this.knobElement.appendChild(a),this.tooltipElem_=a,e.value.emitter.on("change",this.onChange_),this.value=e.value,this.refresh()}onDraggingChange_(t){if(null===t.rawValue)return void this.element.classList.remove(He(void 0,"drg"));this.element.classList.add(He(void 0,"drg"));const e=t.rawValue/this.props_.get("draggingScale"),n=e+(e>0?-1:e<0?1:0),i=Ke(-n,-4,4);this.guideHeadElem_.setAttributeNS(null,"d",[`M ${n+i},0 L${n},4 L${n+i},8`,`M ${e},-1 L${e},9`].join(" ")),this.guideBodyElem_.setAttributeNS(null,"d",`M 0,4 L${e},4`);const r=this.props_.get("formatter");this.tooltipElem_.textContent=r(this.value.rawValue),this.tooltipElem_.style.left=`${e}px`}refresh(){const t=this.props_.get("formatter");this.inputElement.value=t(this.value.rawValue)}onChange_(){this.refresh()}}class qe{constructor(t,e){var n;this.originRawValue_=0,this.onInputChange_=this.onInputChange_.bind(this),this.onInputKeyDown_=this.onInputKeyDown_.bind(this),this.onInputKeyUp_=this.onInputKeyUp_.bind(this),this.onPointerDown_=this.onPointerDown_.bind(this),this.onPointerMove_=this.onPointerMove_.bind(this),this.onPointerUp_=this.onPointerUp_.bind(this),this.baseStep_=e.baseStep,this.parser_=e.parser,this.props=e.props,this.sliderProps_=null!==(n=e.sliderProps)&&void 0!==n?n:null,this.value=e.value,this.viewProps=e.viewProps,this.dragging_=E(null),this.view=new ze(t,{arrayPosition:e.arrayPosition,dragging:this.dragging_,props:this.props,value:this.value,viewProps:this.viewProps}),this.view.inputElement.addEventListener("change",this.onInputChange_),this.view.inputElement.addEventListener("keydown",this.onInputKeyDown_),this.view.inputElement.addEventListener("keyup",this.onInputKeyUp_);const i=new Fe(this.view.knobElement);i.emitter.on("down",this.onPointerDown_),i.emitter.on("move",this.onPointerMove_),i.emitter.on("up",this.onPointerUp_)}constrainValue_(t){var e,n;const i=null===(e=this.sliderProps_)||void 0===e?void 0:e.get("minValue"),r=null===(n=this.sliderProps_)||void 0===n?void 0:n.get("maxValue");let o=t;return void 0!==i&&(o=Math.max(o,i)),void 0!==r&&(o=Math.min(o,r)),o}onInputChange_(t){const e=this.parser_(t.currentTarget.value);a(e)||(this.value.rawValue=this.constrainValue_(e)),this.view.refresh()}onInputKeyDown_(t){const e=De(this.baseStep_,je(t));0!==e&&this.value.setRawValue(this.constrainValue_(this.value.rawValue+e),{forceEmit:!1,last:!1})}onInputKeyUp_(t){0!==De(this.baseStep_,je(t))&&this.value.setRawValue(this.value.rawValue,{forceEmit:!0,last:!0})}onPointerDown_(){this.originRawValue_=this.value.rawValue,this.dragging_.rawValue=0}computeDraggingValue_(t){if(!t.point)return null;return this.constrainValue_(this.originRawValue_+(t.point.x-t.bounds.width/2)*this.props.get("draggingScale"))}onPointerMove_(t){const e=this.computeDraggingValue_(t.data);null!==e&&(this.value.setRawValue(e,{forceEmit:!1,last:!1}),this.dragging_.rawValue=this.value.rawValue-this.originRawValue_)}onPointerUp_(t){const e=this.computeDraggingValue_(t.data);null!==e&&(this.value.setRawValue(e,{forceEmit:!0,last:!0}),this.dragging_.rawValue=null)}}const $e=m("sld");class Ge{constructor(t,e){this.onChange_=this.onChange_.bind(this),this.props_=e.props,this.props_.emitter.on("change",this.onChange_),this.element=t.createElement("div"),this.element.classList.add($e()),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("div");n.classList.add($e("t")),e.viewProps.bindTabIndex(n),this.element.appendChild(n),this.trackElement=n;const i=t.createElement("div");i.classList.add($e("k")),this.trackElement.appendChild(i),this.knobElement=i,e.value.emitter.on("change",this.onChange_),this.value=e.value,this.update_()}update_(){const t=Ke(Ie(this.value.rawValue,this.props_.get("minValue"),this.props_.get("maxValue"),0,100),0,100);this.knobElement.style.width=`${t}%`}onChange_(){this.update_()}}class Ye{constructor(t,e){this.onKeyDown_=this.onKeyDown_.bind(this),this.onKeyUp_=this.onKeyUp_.bind(this),this.onPointerDownOrMove_=this.onPointerDownOrMove_.bind(this),this.onPointerUp_=this.onPointerUp_.bind(this),this.baseStep_=e.baseStep,this.value=e.value,this.viewProps=e.viewProps,this.props=e.props,this.view=new Ge(t,{props:this.props,value:this.value,viewProps:this.viewProps}),this.ptHandler_=new Fe(this.view.trackElement),this.ptHandler_.emitter.on("down",this.onPointerDownOrMove_),this.ptHandler_.emitter.on("move",this.onPointerDownOrMove_),this.ptHandler_.emitter.on("up",this.onPointerUp_),this.view.trackElement.addEventListener("keydown",this.onKeyDown_),this.view.trackElement.addEventListener("keyup",this.onKeyUp_)}handlePointerEvent_(t,e){t.point&&this.value.setRawValue(Ie(Ke(t.point.x,0,t.bounds.width),0,t.bounds.width,this.props.get("minValue"),this.props.get("maxValue")),e)}onPointerDownOrMove_(t){this.handlePointerEvent_(t.data,{forceEmit:!1,last:!1})}onPointerUp_(t){this.handlePointerEvent_(t.data,{forceEmit:!0,last:!0})}onKeyDown_(t){const e=De(this.baseStep_,Re(t));0!==e&&this.value.setRawValue(this.value.rawValue+e,{forceEmit:!1,last:!1})}onKeyUp_(t){0!==De(this.baseStep_,Re(t))&&this.value.setRawValue(this.value.rawValue,{forceEmit:!0,last:!0})}}const We=m("sldtxt");class Qe{constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(We());const n=t.createElement("div");n.classList.add(We("s")),this.sliderView_=e.sliderView,n.appendChild(this.sliderView_.element),this.element.appendChild(n);const i=t.createElement("div");i.classList.add(We("t")),this.textView_=e.textView,i.appendChild(this.textView_.element),this.element.appendChild(i)}}class Xe{constructor(t,e){this.value=e.value,this.viewProps=e.viewProps,this.sliderC_=new Ye(t,{baseStep:e.baseStep,props:e.sliderProps,value:e.value,viewProps:this.viewProps}),this.textC_=new qe(t,{baseStep:e.baseStep,parser:e.parser,props:e.textProps,sliderProps:e.sliderProps,value:e.value,viewProps:e.viewProps}),this.view=new Qe(t,{sliderView:this.sliderC_.view,textView:this.textC_.view})}get sliderController(){return this.sliderC_}get textController(){return this.textC_}}function Ze(t,e){t.write(e)}function Je(t){const e=L;return Array.isArray(t)?e.required.array(e.required.object({text:e.required.string,value:e.required.raw}))(t).value:"object"==typeof t?e.required.raw(t).value:void 0}function tn(t){if("inline"===t||"popup"===t)return t}function en(t){return L.required.object({max:L.optional.number,min:L.optional.number,step:L.optional.number})(t).value}function nn(t){if(Array.isArray(t))return t;const e=[];return Object.keys(t).forEach((n=>{e.push({text:n,value:t[n]})})),e}function rn(t){return a(t)?null:new zt(nn(t))}function on(t){const e=t?Ht(t,zt):null;return e?e.options:null}function sn(t,e){const n=t&&Ht(t,$t);return n?Ue(n.step):Math.max(Ue(e),2)}function an(t){const e=function(t){const e=t?Ht(t,$t):null;return e?e.step:null}(t);return null!=e?e:1}function ln(t,e){var n;const i=t&&Ht(t,$t),r=Math.abs(null!==(n=null==i?void 0:i.step)&&void 0!==n?n:e);return 0===r?.1:Math.pow(10,Math.floor(Math.log10(r))-1)}const pn=m("ckb");class cn{constructor(t,e){this.onValueChange_=this.onValueChange_.bind(this),this.element=t.createElement("div"),this.element.classList.add(pn()),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("label");n.classList.add(pn("l")),this.element.appendChild(n);const i=t.createElement("input");i.classList.add(pn("i")),i.type="checkbox",n.appendChild(i),this.inputElement=i,e.viewProps.bindDisabled(this.inputElement);const r=t.createElement("div");r.classList.add(pn("w")),n.appendChild(r);const o=I(t,"check");r.appendChild(o),e.value.emitter.on("change",this.onValueChange_),this.value=e.value,this.update_()}update_(){this.inputElement.checked=this.value.rawValue}onValueChange_(){this.update_()}}class dn{constructor(t,e){this.onInputChange_=this.onInputChange_.bind(this),this.value=e.value,this.viewProps=e.viewProps,this.view=new cn(t,{value:this.value,viewProps:this.viewProps}),this.view.inputElement.addEventListener("change",this.onInputChange_)}onInputChange_(t){this.value.rawValue=t.currentTarget.checked}}const hn={id:"input-bool",type:"input",accept:(t,e)=>{if("boolean"!=typeof t)return null;const n=A(e,{options:L.optional.custom(Je)});return n?{initialValue:t,params:n}:null},binding:{reader:t=>ne,constraint:t=>function(t){const e=[],n=rn(t.options);return n&&e.push(n),new Bt(e)}(t.params),writer:t=>Ze},controller:t=>{var e;const n=t.document,i=t.value,r=t.constraint;return r&&Ht(r,zt)?new Wt(n,{props:V.fromObject({options:null!==(e=on(r))&&void 0!==e?e:[]}),value:i,viewProps:t.viewProps}):new dn(n,{value:i,viewProps:t.viewProps})}},un=m("col");class vn{constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(un()),e.foldable.bindExpandedClass(this.element,un(void 0,"expanded")),g(e.foldable,"completed",_(this.element,un(void 0,"cpl")));const n=t.createElement("div");n.classList.add(un("h")),this.element.appendChild(n);const i=t.createElement("div");i.classList.add(un("s")),n.appendChild(i),this.swatchElement=i;const r=t.createElement("div");if(r.classList.add(un("t")),n.appendChild(r),this.textElement=r,"inline"===e.pickerLayout){const e=t.createElement("div");e.classList.add(un("p")),this.element.appendChild(e),this.pickerElement=e}else this.pickerElement=null}}function mn(t,e,n){const i=Be(t,360),r=Ke(e/100,0,1),o=Ke(n/100,0,1),s=o*r,a=s*(1-Math.abs(i/60%2-1)),l=o-s;let p,c,d;return[p,c,d]=i>=0&&i<60?[s,a,0]:i>=60&&i<120?[a,s,0]:i>=120&&i<180?[0,s,a]:i>=180&&i<240?[0,a,s]:i>=240&&i<300?[a,0,s]:[s,0,a],[255*(p+l),255*(c+l),255*(d+l)]}function fn(t){return[t[0],t[1],t[2]]}function bn(t,e){return[t[0],t[1],t[2],e]}const gn={hsl:{hsl:(t,e,n)=>[t,e,n],hsv:function(t,e,n){const i=n+e*(100-Math.abs(2*n-100))/200;return[t,0!==i?e*(100-Math.abs(2*n-100))/i:0,n+e*(100-Math.abs(2*n-100))/200]},rgb:function(t,e,n){const i=(t%360+360)%360,r=Ke(e/100,0,1),o=Ke(n/100,0,1),s=(1-Math.abs(2*o-1))*r,a=s*(1-Math.abs(i/60%2-1)),l=o-s/2;let p,c,d;return[p,c,d]=i>=0&&i<60?[s,a,0]:i>=60&&i<120?[a,s,0]:i>=120&&i<180?[0,s,a]:i>=180&&i<240?[0,a,s]:i>=240&&i<300?[a,0,s]:[s,0,a],[255*(p+l),255*(c+l),255*(d+l)]}},hsv:{hsl:function(t,e,n){const i=100-Math.abs(n*(200-e)/100-100);return[t,0!==i?e*n/i:0,n*(200-e)/200]},hsv:(t,e,n)=>[t,e,n],rgb:mn},rgb:{hsl:function(t,e,n){const i=Ke(t/255,0,1),r=Ke(e/255,0,1),o=Ke(n/255,0,1),s=Math.max(i,r,o),a=Math.min(i,r,o),l=s-a;let p=0,c=0;const d=(a+s)/2;return 0!==l&&(c=l/(1-Math.abs(s+a-1)),p=i===s?(r-o)/l:r===s?2+(o-i)/l:4+(i-r)/l,p=p/6+(p<0?1:0)),[360*p,100*c,100*d]},hsv:function(t,e,n){const i=Ke(t/255,0,1),r=Ke(e/255,0,1),o=Ke(n/255,0,1),s=Math.max(i,r,o),a=s-Math.min(i,r,o);let l;return l=0===a?0:s===i?((r-o)/a%6+6)%6*60:s===r?60*((o-i)/a+2):60*((i-r)/a+4),[l,100*(0===s?0:a/s),100*s]},rgb:(t,e,n)=>[t,e,n]}};function _n(t,e){return["float"===e?1:"rgb"===t?255:360,"float"===e?1:"rgb"===t?255:100,"float"===e?1:"rgb"===t?255:100]}function wn(t,e,n,i){const r=_n(e,n),o=_n(e,i);return t.map(((t,e)=>t/r[e]*o[e]))}function yn(t,e){return"object"==typeof t&&!a(t)&&(e in t&&"number"==typeof t[e])}class xn{constructor(t,e,n="int"){this.mode=e,this.type=n,this.comps_=function(t,e,n){var i;const r=_n(e,n);return["rgb"===e?Ke(t[0],0,r[0]):Be(t[0],r[0]),Ke(t[1],0,r[1]),Ke(t[2],0,r[2]),Ke(null!==(i=t[3])&&void 0!==i?i:1,0,1)]}(t,e,n)}static black(t="int"){return new xn([0,0,0],"rgb",t)}static fromObject(t,e="int"){return new xn("a"in t?[t.r,t.g,t.b,t.a]:[t.r,t.g,t.b],"rgb",e)}static toRgbaObject(t,e="int"){return t.toRgbaObject(e)}static isRgbColorObject(t){return yn(t,"r")&&yn(t,"g")&&yn(t,"b")}static isRgbaColorObject(t){return this.isRgbColorObject(t)&&yn(t,"a")}static isColorObject(t){return this.isRgbColorObject(t)}static equals(t,e){if(t.mode!==e.mode)return!1;const n=t.comps_,i=e.comps_;for(let t=0;tt.inputElement))];return this.alphaViews_&&t.push(this.alphaViews_.palette.element,this.alphaViews_.text.inputElement),t}}function kn(t){return"int"===t?"int":"float"===t?"float":void 0}function En(t){const e=L;return A(t,{alpha:e.optional.boolean,color:e.optional.object({alpha:e.optional.boolean,type:e.optional.custom(kn)}),expanded:e.optional.boolean,picker:e.optional.custom(tn)})}function Vn(t){return t?.1:1}function Mn(t){var e;return null===(e=t.color)||void 0===e?void 0:e.type}function Sn(t,e){const n=t.match(/^(.+)%$/);return n?Math.min(.01*parseFloat(n[1])*e,e):Math.min(parseFloat(t),e)}const Ln={deg:t=>t,grad:t=>360*t/400,rad:t=>360*t/(2*Math.PI),turn:t=>360*t};function An(t){const e=t.match(/^([0-9.]+?)(deg|grad|rad|turn)$/);if(!e)return parseFloat(t);const n=parseFloat(e[1]);return Ln[e[2]](n)}function Tn(t){const e=t.match(/^rgb\(\s*([0-9A-Fa-f.]+%?)\s*,\s*([0-9A-Fa-f.]+%?)\s*,\s*([0-9A-Fa-f.]+%?)\s*\)$/);if(!e)return null;const n=[Sn(e[1],255),Sn(e[2],255),Sn(e[3],255)];return isNaN(n[0])||isNaN(n[1])||isNaN(n[2])?null:n}function Dn(t){return e=>{const n=Tn(e);return n?new xn(n,"rgb",t):null}}function jn(t){const e=t.match(/^rgba\(\s*([0-9A-Fa-f.]+%?)\s*,\s*([0-9A-Fa-f.]+%?)\s*,\s*([0-9A-Fa-f.]+%?)\s*,\s*([0-9A-Fa-f.]+%?)\s*\)$/);if(!e)return null;const n=[Sn(e[1],255),Sn(e[2],255),Sn(e[3],255),Sn(e[4],1)];return isNaN(n[0])||isNaN(n[1])||isNaN(n[2])||isNaN(n[3])?null:n}function Rn(t){return e=>{const n=jn(e);return n?new xn(n,"rgb",t):null}}function On(t){const e=t.match(/^hsl\(\s*([0-9A-Fa-f.]+(?:deg|grad|rad|turn)?)\s*,\s*([0-9A-Fa-f.]+%?)\s*,\s*([0-9A-Fa-f.]+%?)\s*\)$/);if(!e)return null;const n=[An(e[1]),Sn(e[2],100),Sn(e[3],100)];return isNaN(n[0])||isNaN(n[1])||isNaN(n[2])?null:n}function Nn(t){return e=>{const n=On(e);return n?new xn(n,"hsl",t):null}}function Fn(t){const e=t.match(/^hsla\(\s*([0-9A-Fa-f.]+(?:deg|grad|rad|turn)?)\s*,\s*([0-9A-Fa-f.]+%?)\s*,\s*([0-9A-Fa-f.]+%?)\s*,\s*([0-9A-Fa-f.]+%?)\s*\)$/);if(!e)return null;const n=[An(e[1]),Sn(e[2],100),Sn(e[3],100),Sn(e[4],1)];return isNaN(n[0])||isNaN(n[1])||isNaN(n[2])||isNaN(n[3])?null:n}function In(t){return e=>{const n=Fn(e);return n?new xn(n,"hsl",t):null}}function Un(t){const e=t.match(/^#([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])$/);if(e)return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)];const n=t.match(/^(?:#|0x)([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/);return n?[parseInt(n[1],16),parseInt(n[2],16),parseInt(n[3],16)]:null}function Kn(t){const e=t.match(/^#?([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])$/);if(e)return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16),Ie(parseInt(e[4]+e[4],16),0,255,0,1)];const n=t.match(/^(?:#|0x)?([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/);return n?[parseInt(n[1],16),parseInt(n[2],16),parseInt(n[3],16),Ie(parseInt(n[4],16),0,255,0,1)]:null}function Bn(t){const e=t.match(/^\{\s*r\s*:\s*([0-9A-Fa-f.]+%?)\s*,\s*g\s*:\s*([0-9A-Fa-f.]+%?)\s*,\s*b\s*:\s*([0-9A-Fa-f.]+%?)\s*\}$/);if(!e)return null;const n=[parseFloat(e[1]),parseFloat(e[2]),parseFloat(e[3])];return isNaN(n[0])||isNaN(n[1])||isNaN(n[2])?null:n}function Hn(t){return e=>{const n=Bn(e);return n?new xn(n,"rgb",t):null}}function zn(t){const e=t.match(/^\{\s*r\s*:\s*([0-9A-Fa-f.]+%?)\s*,\s*g\s*:\s*([0-9A-Fa-f.]+%?)\s*,\s*b\s*:\s*([0-9A-Fa-f.]+%?)\s*,\s*a\s*:\s*([0-9A-Fa-f.]+%?)\s*\}$/);if(!e)return null;const n=[parseFloat(e[1]),parseFloat(e[2]),parseFloat(e[3]),parseFloat(e[4])];return isNaN(n[0])||isNaN(n[1])||isNaN(n[2])||isNaN(n[3])?null:n}function qn(t){return e=>{const n=zn(e);return n?new xn(n,"rgb",t):null}}const $n=[{parser:Un,result:{alpha:!1,mode:"rgb",notation:"hex"}},{parser:Kn,result:{alpha:!0,mode:"rgb",notation:"hex"}},{parser:Tn,result:{alpha:!1,mode:"rgb",notation:"func"}},{parser:jn,result:{alpha:!0,mode:"rgb",notation:"func"}},{parser:On,result:{alpha:!1,mode:"hsl",notation:"func"}},{parser:Fn,result:{alpha:!0,mode:"hsl",notation:"func"}},{parser:Bn,result:{alpha:!1,mode:"rgb",notation:"object"}},{parser:zn,result:{alpha:!0,mode:"rgb",notation:"object"}}];function Gn(t,e="int"){const n=function(t){return $n.reduce(((e,{parser:n,result:i})=>e||(n(t)?i:null)),null)}(t);return n?"hex"===n.notation&&"float"!==e?Object.assign(Object.assign({},n),{type:"int"}):"func"===n.notation?Object.assign(Object.assign({},n),{type:e}):null:null}const Yn={int:[function(t){const e=Un(t);return e?new xn(e,"rgb","int"):null},function(t){const e=Kn(t);return e?new xn(e,"rgb","int"):null},Dn("int"),Rn("int"),Nn("int"),In("int"),Hn("int"),qn("int")],float:[Dn("float"),Rn("float"),Nn("float"),In("float"),Hn("float"),qn("float")]};function Wn(t){const e=Yn[t];return t=>e.reduce(((e,n)=>e||n(t)),null)}function Qn(t){const e=Ke(Math.floor(t),0,255).toString(16);return 1===e.length?`0${e}`:e}function Xn(t,e="#"){return`${e}${fn(t.getComponents("rgb")).map(Qn).join("")}`}function Zn(t,e="#"){const n=t.getComponents("rgb");return`${e}${[n[0],n[1],n[2],255*n[3]].map(Qn).join("")}`}function Jn(t,e){const n=Pe("float"===e?2:0);return`rgb(${fn(t.getComponents("rgb",e)).map((t=>n(t))).join(", ")})`}function ti(t){return e=>Jn(e,t)}function ei(t,e){const n=Pe(2),i=Pe("float"===e?2:0);return`rgba(${t.getComponents("rgb",e).map(((t,e)=>(3===e?n:i)(t))).join(", ")})`}function ni(t){return e=>ei(e,t)}function ii(t,e){const n=Pe("float"===e?2:0),i=["r","g","b"];return`{${fn(t.getComponents("rgb",e)).map(((t,e)=>`${i[e]}: ${n(t)}`)).join(", ")}}`}function ri(t){return e=>ii(e,t)}function oi(t,e){const n=Pe(2),i=Pe("float"===e?2:0),r=["r","g","b","a"];return`{${t.getComponents("rgb",e).map(((t,e)=>`${r[e]}: ${(3===e?n:i)(t)}`)).join(", ")}}`}function si(t){return e=>oi(e,t)}const ai=[{format:{alpha:!1,mode:"rgb",notation:"hex",type:"int"},stringifier:Xn},{format:{alpha:!0,mode:"rgb",notation:"hex",type:"int"},stringifier:Zn},{format:{alpha:!1,mode:"hsl",notation:"func",type:"int"},stringifier:function(t){const e=[Pe(0),Ee,Ee];return`hsl(${fn(t.getComponents("hsl")).map(((t,n)=>e[n](t))).join(", ")})`}},{format:{alpha:!0,mode:"hsl",notation:"func",type:"int"},stringifier:function(t){const e=[Pe(0),Ee,Ee,Pe(2)];return`hsla(${t.getComponents("hsl").map(((t,n)=>e[n](t))).join(", ")})`}},...["int","float"].reduce(((t,e)=>[...t,{format:{alpha:!1,mode:"rgb",notation:"func",type:e},stringifier:ti(e)},{format:{alpha:!0,mode:"rgb",notation:"func",type:e},stringifier:ni(e)},{format:{alpha:!1,mode:"rgb",notation:"object",type:e},stringifier:ri(e)},{format:{alpha:!0,mode:"rgb",notation:"object",type:e},stringifier:si(e)}]),[])];function li(t){return ai.reduce(((e,n)=>{return e||((i=n.format).alpha===(r=t).alpha&&i.mode===r.mode&&i.notation===r.notation&&i.type===r.type?n.stringifier:null);var i,r}),null)}const pi=m("apl");class ci{constructor(t,e){this.onValueChange_=this.onValueChange_.bind(this),this.value=e.value,this.value.emitter.on("change",this.onValueChange_),this.element=t.createElement("div"),this.element.classList.add(pi()),e.viewProps.bindTabIndex(this.element);const n=t.createElement("div");n.classList.add(pi("b")),this.element.appendChild(n);const i=t.createElement("div");i.classList.add(pi("c")),n.appendChild(i),this.colorElem_=i;const r=t.createElement("div");r.classList.add(pi("m")),this.element.appendChild(r),this.markerElem_=r;const o=t.createElement("div");o.classList.add(pi("p")),this.markerElem_.appendChild(o),this.previewElem_=o,this.update_()}update_(){const t=this.value.rawValue,e=t.getComponents("rgb"),n=new xn([e[0],e[1],e[2],0],"rgb"),i=new xn([e[0],e[1],e[2],255],"rgb"),r=["to right",ei(n),ei(i)];this.colorElem_.style.background=`linear-gradient(${r.join(",")})`,this.previewElem_.style.backgroundColor=ei(t);const o=Ie(e[3],0,1,0,100);this.markerElem_.style.left=`${o}%`}onValueChange_(){this.update_()}}class di{constructor(t,e){this.onKeyDown_=this.onKeyDown_.bind(this),this.onKeyUp_=this.onKeyUp_.bind(this),this.onPointerDown_=this.onPointerDown_.bind(this),this.onPointerMove_=this.onPointerMove_.bind(this),this.onPointerUp_=this.onPointerUp_.bind(this),this.value=e.value,this.viewProps=e.viewProps,this.view=new ci(t,{value:this.value,viewProps:this.viewProps}),this.ptHandler_=new Fe(this.view.element),this.ptHandler_.emitter.on("down",this.onPointerDown_),this.ptHandler_.emitter.on("move",this.onPointerMove_),this.ptHandler_.emitter.on("up",this.onPointerUp_),this.view.element.addEventListener("keydown",this.onKeyDown_),this.view.element.addEventListener("keyup",this.onKeyUp_)}handlePointerEvent_(t,e){if(!t.point)return;const n=t.point.x/t.bounds.width,i=this.value.rawValue,[r,o,s]=i.getComponents("hsv");this.value.setRawValue(new xn([r,o,s,n],"hsv"),e)}onPointerDown_(t){this.handlePointerEvent_(t.data,{forceEmit:!1,last:!1})}onPointerMove_(t){this.handlePointerEvent_(t.data,{forceEmit:!1,last:!1})}onPointerUp_(t){this.handlePointerEvent_(t.data,{forceEmit:!0,last:!0})}onKeyDown_(t){const e=De(Vn(!0),Re(t));if(0===e)return;const n=this.value.rawValue,[i,r,o,s]=n.getComponents("hsv");this.value.setRawValue(new xn([i,r,o,s+e],"hsv"),{forceEmit:!1,last:!1})}onKeyUp_(t){0!==De(Vn(!0),Re(t))&&this.value.setRawValue(this.value.rawValue,{forceEmit:!0,last:!0})}}const hi=m("coltxt");class ui{constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(hi());const n=t.createElement("div");n.classList.add(hi("m")),this.modeElem_=function(t){const e=t.createElement("select");return e.appendChild([{text:"RGB",value:"rgb"},{text:"HSL",value:"hsl"},{text:"HSV",value:"hsv"}].reduce(((e,n)=>{const i=t.createElement("option");return i.textContent=n.text,i.value=n.value,e.appendChild(i),e}),t.createDocumentFragment())),e}(t),this.modeElem_.classList.add(hi("ms")),n.appendChild(this.modeSelectElement);const i=t.createElement("div");i.classList.add(hi("mm")),i.appendChild(I(t,"dropdown")),n.appendChild(i),this.element.appendChild(n);const r=t.createElement("div");r.classList.add(hi("w")),this.element.appendChild(r),this.textsElem_=r,this.textViews_=e.textViews,this.applyTextViews_(),b(e.colorMode,(t=>{this.modeElem_.value=t}))}get modeSelectElement(){return this.modeElem_}get textViews(){return this.textViews_}set textViews(t){this.textViews_=t,this.applyTextViews_()}applyTextViews_(){B(this.textsElem_);const t=this.element.ownerDocument;this.textViews_.forEach((e=>{const n=t.createElement("div");n.classList.add(hi("c")),n.appendChild(e.element),this.textsElem_.appendChild(n)}))}}function vi(t,e,n){const i=_n(t,e)[n];return new qt({min:0,max:i})}function mi(t,e,n){return new qe(t,{arrayPosition:0===n?"fst":2===n?"lst":"mid",baseStep:Vn(!1),parser:e.parser,props:V.fromObject({draggingScale:"float"===e.colorType?.01:1,formatter:(i=e.colorType,Pe("float"===i?2:0))}),value:E(0,{constraint:vi(e.colorMode,e.colorType,n)}),viewProps:e.viewProps});var i}class fi{constructor(t,e){this.onModeSelectChange_=this.onModeSelectChange_.bind(this),this.colorType_=e.colorType,this.parser_=e.parser,this.value=e.value,this.viewProps=e.viewProps,this.colorMode=E(this.value.rawValue.mode),this.ccs_=this.createComponentControllers_(t),this.view=new ui(t,{colorMode:this.colorMode,textViews:[this.ccs_[0].view,this.ccs_[1].view,this.ccs_[2].view]}),this.view.modeSelectElement.addEventListener("change",this.onModeSelectChange_)}createComponentControllers_(t){const e={colorMode:this.colorMode.rawValue,colorType:this.colorType_,parser:this.parser_,viewProps:this.viewProps},n=[mi(t,e,0),mi(t,e,1),mi(t,e,2)];return n.forEach(((t,e)=>{Te({primary:this.value,secondary:t.value,forward:t=>t.rawValue.getComponents(this.colorMode.rawValue,this.colorType_)[e],backward:(t,n)=>{const i=this.colorMode.rawValue,r=t.rawValue.getComponents(i,this.colorType_);return r[e]=n.rawValue,new xn(bn(fn(r),r[3]),i,this.colorType_)}})})),n}onModeSelectChange_(t){this.colorMode.rawValue=t.currentTarget.value,this.ccs_=this.createComponentControllers_(this.view.element.ownerDocument),this.view.textViews=[this.ccs_[0].view,this.ccs_[1].view,this.ccs_[2].view]}}const bi=m("hpl");class gi{constructor(t,e){this.onValueChange_=this.onValueChange_.bind(this),this.value=e.value,this.value.emitter.on("change",this.onValueChange_),this.element=t.createElement("div"),this.element.classList.add(bi()),e.viewProps.bindTabIndex(this.element);const n=t.createElement("div");n.classList.add(bi("c")),this.element.appendChild(n);const i=t.createElement("div");i.classList.add(bi("m")),this.element.appendChild(i),this.markerElem_=i,this.update_()}update_(){const t=this.value.rawValue,[e]=t.getComponents("hsv");this.markerElem_.style.backgroundColor=Jn(new xn([e,100,100],"hsv"));const n=Ie(e,0,360,0,100);this.markerElem_.style.left=`${n}%`}onValueChange_(){this.update_()}}class _i{constructor(t,e){this.onKeyDown_=this.onKeyDown_.bind(this),this.onKeyUp_=this.onKeyUp_.bind(this),this.onPointerDown_=this.onPointerDown_.bind(this),this.onPointerMove_=this.onPointerMove_.bind(this),this.onPointerUp_=this.onPointerUp_.bind(this),this.value=e.value,this.viewProps=e.viewProps,this.view=new gi(t,{value:this.value,viewProps:this.viewProps}),this.ptHandler_=new Fe(this.view.element),this.ptHandler_.emitter.on("down",this.onPointerDown_),this.ptHandler_.emitter.on("move",this.onPointerMove_),this.ptHandler_.emitter.on("up",this.onPointerUp_),this.view.element.addEventListener("keydown",this.onKeyDown_),this.view.element.addEventListener("keyup",this.onKeyUp_)}handlePointerEvent_(t,e){if(!t.point)return;const n=Ie(Ke(t.point.x,0,t.bounds.width),0,t.bounds.width,0,359),i=this.value.rawValue,[,r,o,s]=i.getComponents("hsv");this.value.setRawValue(new xn([n,r,o,s],"hsv"),e)}onPointerDown_(t){this.handlePointerEvent_(t.data,{forceEmit:!1,last:!1})}onPointerMove_(t){this.handlePointerEvent_(t.data,{forceEmit:!1,last:!1})}onPointerUp_(t){this.handlePointerEvent_(t.data,{forceEmit:!0,last:!0})}onKeyDown_(t){const e=De(Vn(!1),Re(t));if(0===e)return;const n=this.value.rawValue,[i,r,o,s]=n.getComponents("hsv");this.value.setRawValue(new xn([i+e,r,o,s],"hsv"),{forceEmit:!1,last:!1})}onKeyUp_(t){0!==De(Vn(!1),Re(t))&&this.value.setRawValue(this.value.rawValue,{forceEmit:!0,last:!0})}}const wi=m("svp");class yi{constructor(t,e){this.onValueChange_=this.onValueChange_.bind(this),this.value=e.value,this.value.emitter.on("change",this.onValueChange_),this.element=t.createElement("div"),this.element.classList.add(wi()),e.viewProps.bindTabIndex(this.element);const n=t.createElement("canvas");n.height=64,n.width=64,n.classList.add(wi("c")),this.element.appendChild(n),this.canvasElement=n;const i=t.createElement("div");i.classList.add(wi("m")),this.element.appendChild(i),this.markerElem_=i,this.update_()}update_(){const t=function(t){const e=t.ownerDocument.defaultView;return e&&"document"in e?t.getContext("2d"):null}(this.canvasElement);if(!t)return;const e=this.value.rawValue.getComponents("hsv"),n=this.canvasElement.width,i=this.canvasElement.height,r=t.getImageData(0,0,n,i),o=r.data;for(let t=0;tt.rawValue.getComponents()[3],backward:(t,e)=>{const n=t.rawValue.getComponents();return n[3]=e.rawValue,new xn(n,t.rawValue.mode)}}),this.textC_=new fi(t,{colorType:e.colorType,parser:ye,value:this.value,viewProps:this.viewProps}),this.view=new Pn(t,{alphaViews:this.alphaIcs_?{palette:this.alphaIcs_.palette.view,text:this.alphaIcs_.text.view}:null,hPaletteView:this.hPaletteC_.view,supportsAlpha:e.supportsAlpha,svPaletteView:this.svPaletteC_.view,textView:this.textC_.view})}get textController(){return this.textC_}}const Pi=m("colsw");class ki{constructor(t,e){this.onValueChange_=this.onValueChange_.bind(this),e.value.emitter.on("change",this.onValueChange_),this.value=e.value,this.element=t.createElement("div"),this.element.classList.add(Pi()),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("div");n.classList.add(Pi("sw")),this.element.appendChild(n),this.swatchElem_=n;const i=t.createElement("button");i.classList.add(Pi("b")),e.viewProps.bindDisabled(i),this.element.appendChild(i),this.buttonElement=i,this.update_()}update_(){this.swatchElem_.style.backgroundColor=Zn(this.value.rawValue)}onValueChange_(){this.update_()}}class Ei{constructor(t,e){this.value=e.value,this.viewProps=e.viewProps,this.view=new ki(t,{value:this.value,viewProps:this.viewProps})}}class Vi{constructor(t,e){this.onButtonBlur_=this.onButtonBlur_.bind(this),this.onButtonClick_=this.onButtonClick_.bind(this),this.onPopupChildBlur_=this.onPopupChildBlur_.bind(this),this.onPopupChildKeydown_=this.onPopupChildKeydown_.bind(this),this.value=e.value,this.viewProps=e.viewProps,this.foldable_=Q.create(e.expanded),this.swatchC_=new Ei(t,{value:this.value,viewProps:this.viewProps});const n=this.swatchC_.view.buttonElement;n.addEventListener("blur",this.onButtonBlur_),n.addEventListener("click",this.onButtonClick_),this.textC_=new ee(t,{parser:e.parser,props:V.fromObject({formatter:e.formatter}),value:this.value,viewProps:this.viewProps}),this.view=new vn(t,{foldable:this.foldable_,pickerLayout:e.pickerLayout}),this.view.swatchElement.appendChild(this.swatchC_.view.element),this.view.textElement.appendChild(this.textC_.view.element),this.popC_="popup"===e.pickerLayout?new Zt(t,{viewProps:this.viewProps}):null;const i=new Ci(t,{colorType:e.colorType,supportsAlpha:e.supportsAlpha,value:this.value,viewProps:this.viewProps});i.view.allFocusableElements.forEach((t=>{t.addEventListener("blur",this.onPopupChildBlur_),t.addEventListener("keydown",this.onPopupChildKeydown_)})),this.pickerC_=i,this.popC_?(this.view.element.appendChild(this.popC_.view.element),this.popC_.view.element.appendChild(i.view.element),Te({primary:this.foldable_.value("expanded"),secondary:this.popC_.shows,forward:t=>t.rawValue,backward:(t,e)=>e.rawValue})):this.view.pickerElement&&(this.view.pickerElement.appendChild(this.pickerC_.view.element),Z(this.foldable_,this.view.pickerElement))}get textController(){return this.textC_}onButtonBlur_(t){if(!this.popC_)return;const e=t.relatedTarget;e&&this.view.element.contains(e)||(this.popC_.shows.rawValue=!1)}onButtonClick_(){this.foldable_.set("expanded",!this.foldable_.get("expanded")),this.foldable_.get("expanded")&&this.pickerC_.view.allFocusableElements[0].focus()}onPopupChildBlur_(t){if(!this.popC_)return;const e=this.popC_.view.element,n=H(t);n&&e.contains(n)||n&&n===this.swatchC_.view.buttonElement&&!O(e.ownerDocument)||(this.popC_.shows.rawValue=!1)}onPopupChildKeydown_(t){this.popC_?"Escape"===t.key&&(this.popC_.shows.rawValue=!1):this.view.pickerElement&&"Escape"===t.key&&this.swatchC_.view.buttonElement.focus()}}function Mi(t){return fn(t.getComponents("rgb")).reduce(((t,e)=>t<<8|255&Math.floor(e)),0)}function Si(t){return t.getComponents("rgb").reduce(((t,e,n)=>t<<8|255&Math.floor(3===n?255*e:e)),0)>>>0}function Li(t){return"number"!=typeof t?xn.black():new xn([(e=t)>>16&255,e>>8&255,255&e],"rgb");var e}function Ai(t){return"number"!=typeof t?xn.black():new xn([(e=t)>>24&255,e>>16&255,e>>8&255,Ie(255&e,0,255,0,1)],"rgb");var e}function Ti(t){var e;return!(!(null==t?void 0:t.alpha)&&!(null===(e=null==t?void 0:t.color)||void 0===e?void 0:e.alpha))}function Di(t){return t?t=>Zn(t,"0x"):t=>Xn(t,"0x")}const ji={id:"input-color-number",type:"input",accept:(t,e)=>{if("number"!=typeof t)return null;if(!function(t){return"color"in t||"view"in t&&"color"===t.view}(e))return null;const n=En(e);return n?{initialValue:t,params:n}:null},binding:{reader:t=>Ti(t.params)?Ai:Li,equals:xn.equals,writer:t=>function(t){const e=t?Si:Mi;return(t,n)=>{Ze(t,e(n))}}(Ti(t.params))},controller:t=>{const e=Ti(t.params),n="expanded"in t.params?t.params.expanded:void 0,i="picker"in t.params?t.params.picker:void 0;return new Vi(t.document,{colorType:"int",expanded:null!=n&&n,formatter:Di(e),parser:Wn("int"),pickerLayout:null!=i?i:"popup",supportsAlpha:e,value:t.value,viewProps:t.viewProps})}};function Ri(t){return e=>function(t,e){return xn.isColorObject(t)?xn.fromObject(t,e):xn.black(e)}(e,t)}function Oi(t,e){return n=>t?oi(n,e):ii(n,e)}const Ni={id:"input-color-object",type:"input",accept:(t,e)=>{if(!xn.isColorObject(t))return null;const n=En(e);return n?{initialValue:t,params:n}:null},binding:{reader:t=>Ri(Mn(t.params)),equals:xn.equals,writer:t=>{return e=xn.isRgbaColorObject(t.initialValue),n=Mn(t.params),(t,i)=>{e?function(t,e,n){const i=e.toRgbaObject(n);t.writeProperty("r",i.r),t.writeProperty("g",i.g),t.writeProperty("b",i.b),t.writeProperty("a",i.a)}(t,i,n):function(t,e,n){const i=e.toRgbaObject(n);t.writeProperty("r",i.r),t.writeProperty("g",i.g),t.writeProperty("b",i.b)}(t,i,n)};var e,n}},controller:t=>{var e;const n=xn.isRgbaColorObject(t.initialValue),i="expanded"in t.params?t.params.expanded:void 0,r="picker"in t.params?t.params.picker:void 0,o=null!==(e=Mn(t.params))&&void 0!==e?e:"int";return new Vi(t.document,{colorType:o,expanded:null!=i&&i,formatter:Oi(n,o),parser:Wn(o),pickerLayout:null!=r?r:"popup",supportsAlpha:n,value:t.value,viewProps:t.viewProps})}},Fi={id:"input-color-string",type:"input",accept:(t,e)=>{if("string"!=typeof t)return null;if("view"in e&&"text"===e.view)return null;const n=Gn(t,Mn(e));if(!n)return null;if(!li(n))return null;const i=En(e);return i?{initialValue:t,params:i}:null},binding:{reader:t=>{var e;return function(t){const e=Yn[t];return n=>{if("string"!=typeof n)return xn.black(t);const i=e.reduce(((t,e)=>t||e(n)),null);return null!=i?i:xn.black(t)}}(null!==(e=Mn(t.params))&&void 0!==e?e:"int")},equals:xn.equals,writer:t=>{const e=Gn(t.initialValue,Mn(t.params));if(!e)throw c.shouldNeverHappen();const n=function(t){const e=li(t);return e?(t,n)=>{Ze(t,e(n))}:null}(e);if(!n)throw c.notBindable();return n}},controller:t=>{const e=Gn(t.initialValue,Mn(t.params));if(!e)throw c.shouldNeverHappen();const n=li(e);if(!n)throw c.shouldNeverHappen();const i="expanded"in t.params?t.params.expanded:void 0,r="picker"in t.params?t.params.picker:void 0;return new Vi(t.document,{colorType:e.type,expanded:null!=i&&i,formatter:n,parser:Wn(e.type),pickerLayout:null!=r?r:"popup",supportsAlpha:e.alpha,value:t.value,viewProps:t.viewProps})}};class Ii{constructor(t){this.components=t.components,this.asm_=t.assembly}constrain(t){const e=this.asm_.toComponents(t).map(((t,e)=>{var n,i;return null!==(i=null===(n=this.components[e])||void 0===n?void 0:n.constrain(t))&&void 0!==i?i:t}));return this.asm_.fromComponents(e)}}const Ui=m("pndtxt");class Ki{constructor(t,e){this.textViews=e.textViews,this.element=t.createElement("div"),this.element.classList.add(Ui()),this.textViews.forEach((e=>{const n=t.createElement("div");n.classList.add(Ui("a")),n.appendChild(e.element),this.element.appendChild(n)}))}}class Bi{constructor(t,e){this.value=e.value,this.viewProps=e.viewProps,this.acs_=e.axes.map(((n,i)=>function(t,e,n){return new qe(t,{arrayPosition:0===n?"fst":n===e.axes.length-1?"lst":"mid",baseStep:e.axes[n].baseStep,parser:e.parser,props:e.axes[n].textProps,value:E(0,{constraint:e.axes[n].constraint}),viewProps:e.viewProps})}(t,e,i))),this.acs_.forEach(((t,n)=>{Te({primary:this.value,secondary:t.value,forward:t=>e.assembly.toComponents(t.rawValue)[n],backward:(t,i)=>{const r=e.assembly.toComponents(t.rawValue);return r[n]=i.rawValue,e.assembly.fromComponents(r)}})})),this.view=new Ki(t,{textViews:this.acs_.map((t=>t.view))})}}function Hi(t,e){return"step"in t&&!a(t.step)?new $t(t.step,e):null}function zi(t){return"max"in t&&!a(t.max)||"min"in t&&!a(t.min)?new qt({max:t.max,min:t.min}):null}function qi(t){const[e,n]=function(t){const e=t?Ht(t,qt):null;return e?[e.minValue,e.maxValue]:[void 0,void 0]}(t);return[null!=e?e:0,null!=n?n:100]}const $i={id:"input-number",type:"input",accept:(t,e)=>{if("number"!=typeof t)return null;const n=L,i=A(e,{format:n.optional.function,max:n.optional.number,min:n.optional.number,options:n.optional.custom(Je),step:n.optional.number});return i?{initialValue:t,params:i}:null},binding:{reader:t=>xe,constraint:t=>function(t,e){const n=[],i=Hi(t,e);i&&n.push(i);const r=zi(t);r&&n.push(r);const o=rn(t.options);return o&&n.push(o),new Bt(n)}(t.params,t.initialValue),writer:t=>Ze},controller:t=>{var e,n;const i=t.value,r=t.constraint;if(r&&Ht(r,zt))return new Wt(t.document,{props:V.fromObject({options:null!==(e=on(r))&&void 0!==e?e:[]}),value:i,viewProps:t.viewProps});const o=null!==(n="format"in t.params?t.params.format:void 0)&&void 0!==n?n:Pe(sn(r,i.rawValue));if(r&&Ht(r,qt)){const[e,n]=qi(r);return new Xe(t.document,{baseStep:an(r),parser:ye,sliderProps:V.fromObject({maxValue:n,minValue:e}),textProps:V.fromObject({draggingScale:ln(r,i.rawValue),formatter:o}),value:i,viewProps:t.viewProps})}return new qe(t.document,{baseStep:an(r),parser:ye,props:V.fromObject({draggingScale:ln(r,i.rawValue),formatter:o}),value:i,viewProps:t.viewProps})}};class Gi{constructor(t=0,e=0){this.x=t,this.y=e}getComponents(){return[this.x,this.y]}static isObject(t){if(a(t))return!1;return"number"==typeof t.x&&"number"==typeof t.y}static equals(t,e){return t.x===e.x&&t.y===e.y}toObject(){return{x:this.x,y:this.y}}}const Yi={toComponents:t=>t.getComponents(),fromComponents:t=>new Gi(...t)},Wi=m("p2d");class Qi{constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(Wi()),e.viewProps.bindClassModifiers(this.element),b(e.expanded,_(this.element,Wi(void 0,"expanded")));const n=t.createElement("div");n.classList.add(Wi("h")),this.element.appendChild(n);const i=t.createElement("button");i.classList.add(Wi("b")),i.appendChild(I(t,"p2dpad")),e.viewProps.bindDisabled(i),n.appendChild(i),this.buttonElement=i;const r=t.createElement("div");if(r.classList.add(Wi("t")),n.appendChild(r),this.textElement=r,"inline"===e.pickerLayout){const e=t.createElement("div");e.classList.add(Wi("p")),this.element.appendChild(e),this.pickerElement=e}else this.pickerElement=null}}const Xi=m("p2dp");class Zi{constructor(t,e){this.onFoldableChange_=this.onFoldableChange_.bind(this),this.onValueChange_=this.onValueChange_.bind(this),this.invertsY_=e.invertsY,this.maxValue_=e.maxValue,this.element=t.createElement("div"),this.element.classList.add(Xi()),"popup"===e.layout&&this.element.classList.add(Xi(void 0,"p"));const n=t.createElement("div");n.classList.add(Xi("p")),e.viewProps.bindTabIndex(n),this.element.appendChild(n),this.padElement=n;const i=t.createElementNS(R,"svg");i.classList.add(Xi("g")),this.padElement.appendChild(i),this.svgElem_=i;const r=t.createElementNS(R,"line");r.classList.add(Xi("ax")),r.setAttributeNS(null,"x1","0"),r.setAttributeNS(null,"y1","50%"),r.setAttributeNS(null,"x2","100%"),r.setAttributeNS(null,"y2","50%"),this.svgElem_.appendChild(r);const o=t.createElementNS(R,"line");o.classList.add(Xi("ax")),o.setAttributeNS(null,"x1","50%"),o.setAttributeNS(null,"y1","0"),o.setAttributeNS(null,"x2","50%"),o.setAttributeNS(null,"y2","100%"),this.svgElem_.appendChild(o);const s=t.createElementNS(R,"line");s.classList.add(Xi("l")),s.setAttributeNS(null,"x1","50%"),s.setAttributeNS(null,"y1","50%"),this.svgElem_.appendChild(s),this.lineElem_=s;const a=t.createElement("div");a.classList.add(Xi("m")),this.padElement.appendChild(a),this.markerElem_=a,e.value.emitter.on("change",this.onValueChange_),this.value=e.value,this.update_()}get allFocusableElements(){return[this.padElement]}update_(){const[t,e]=this.value.rawValue.getComponents(),n=this.maxValue_,i=Ie(t,-n,+n,0,100),r=Ie(e,-n,+n,0,100),o=this.invertsY_?100-r:r;this.lineElem_.setAttributeNS(null,"x2",`${i}%`),this.lineElem_.setAttributeNS(null,"y2",`${o}%`),this.markerElem_.style.left=`${i}%`,this.markerElem_.style.top=`${o}%`}onValueChange_(){this.update_()}onFoldableChange_(){this.update_()}}function Ji(t,e,n){return[De(e[0],Re(t)),De(e[1],je(t))*(n?1:-1)]}class tr{constructor(t,e){this.onPadKeyDown_=this.onPadKeyDown_.bind(this),this.onPadKeyUp_=this.onPadKeyUp_.bind(this),this.onPointerDown_=this.onPointerDown_.bind(this),this.onPointerMove_=this.onPointerMove_.bind(this),this.onPointerUp_=this.onPointerUp_.bind(this),this.value=e.value,this.viewProps=e.viewProps,this.baseSteps_=e.baseSteps,this.maxValue_=e.maxValue,this.invertsY_=e.invertsY,this.view=new Zi(t,{invertsY:this.invertsY_,layout:e.layout,maxValue:this.maxValue_,value:this.value,viewProps:this.viewProps}),this.ptHandler_=new Fe(this.view.padElement),this.ptHandler_.emitter.on("down",this.onPointerDown_),this.ptHandler_.emitter.on("move",this.onPointerMove_),this.ptHandler_.emitter.on("up",this.onPointerUp_),this.view.padElement.addEventListener("keydown",this.onPadKeyDown_),this.view.padElement.addEventListener("keyup",this.onPadKeyUp_)}handlePointerEvent_(t,e){if(!t.point)return;const n=this.maxValue_,i=Ie(t.point.x,0,t.bounds.width,-n,+n),r=Ie(this.invertsY_?t.bounds.height-t.point.y:t.point.y,0,t.bounds.height,-n,+n);this.value.setRawValue(new Gi(i,r),e)}onPointerDown_(t){this.handlePointerEvent_(t.data,{forceEmit:!1,last:!1})}onPointerMove_(t){this.handlePointerEvent_(t.data,{forceEmit:!1,last:!1})}onPointerUp_(t){this.handlePointerEvent_(t.data,{forceEmit:!0,last:!0})}onPadKeyDown_(t){Oe(t.key)&&t.preventDefault();const[e,n]=Ji(t,this.baseSteps_,this.invertsY_);0===e&&0===n||this.value.setRawValue(new Gi(this.value.rawValue.x+e,this.value.rawValue.y+n),{forceEmit:!1,last:!1})}onPadKeyUp_(t){const[e,n]=Ji(t,this.baseSteps_,this.invertsY_);0===e&&0===n||this.value.setRawValue(this.value.rawValue,{forceEmit:!0,last:!0})}}class er{constructor(t,e){var n,i;this.onPopupChildBlur_=this.onPopupChildBlur_.bind(this),this.onPopupChildKeydown_=this.onPopupChildKeydown_.bind(this),this.onPadButtonBlur_=this.onPadButtonBlur_.bind(this),this.onPadButtonClick_=this.onPadButtonClick_.bind(this),this.value=e.value,this.viewProps=e.viewProps,this.foldable_=Q.create(e.expanded),this.popC_="popup"===e.pickerLayout?new Zt(t,{viewProps:this.viewProps}):null;const r=new tr(t,{baseSteps:[e.axes[0].baseStep,e.axes[1].baseStep],invertsY:e.invertsY,layout:e.pickerLayout,maxValue:e.maxValue,value:this.value,viewProps:this.viewProps});r.view.allFocusableElements.forEach((t=>{t.addEventListener("blur",this.onPopupChildBlur_),t.addEventListener("keydown",this.onPopupChildKeydown_)})),this.pickerC_=r,this.textC_=new Bi(t,{assembly:Yi,axes:e.axes,parser:e.parser,value:this.value,viewProps:this.viewProps}),this.view=new Qi(t,{expanded:this.foldable_.value("expanded"),pickerLayout:e.pickerLayout,viewProps:this.viewProps}),this.view.textElement.appendChild(this.textC_.view.element),null===(n=this.view.buttonElement)||void 0===n||n.addEventListener("blur",this.onPadButtonBlur_),null===(i=this.view.buttonElement)||void 0===i||i.addEventListener("click",this.onPadButtonClick_),this.popC_?(this.view.element.appendChild(this.popC_.view.element),this.popC_.view.element.appendChild(this.pickerC_.view.element),Te({primary:this.foldable_.value("expanded"),secondary:this.popC_.shows,forward:t=>t.rawValue,backward:(t,e)=>e.rawValue})):this.view.pickerElement&&(this.view.pickerElement.appendChild(this.pickerC_.view.element),Z(this.foldable_,this.view.pickerElement))}onPadButtonBlur_(t){if(!this.popC_)return;const e=t.relatedTarget;e&&this.view.element.contains(e)||(this.popC_.shows.rawValue=!1)}onPadButtonClick_(){this.foldable_.set("expanded",!this.foldable_.get("expanded")),this.foldable_.get("expanded")&&this.pickerC_.view.allFocusableElements[0].focus()}onPopupChildBlur_(t){if(!this.popC_)return;const e=this.popC_.view.element,n=H(t);n&&e.contains(n)||n&&n===this.view.buttonElement&&!O(e.ownerDocument)||(this.popC_.shows.rawValue=!1)}onPopupChildKeydown_(t){this.popC_?"Escape"===t.key&&(this.popC_.shows.rawValue=!1):this.view.pickerElement&&"Escape"===t.key&&this.view.buttonElement.focus()}}function nr(t){return Gi.isObject(t)?new Gi(t.x,t.y):new Gi}function ir(t,e){t.writeProperty("x",e.x),t.writeProperty("y",e.y)}function rr(t,e){if(!t)return;const n=[],i=Hi(t,e);i&&n.push(i);const r=zi(t);return r&&n.push(r),new Bt(n)}function or(t,e){var n,i;const r=t&&Ht(t,qt);if(r)return Math.max(Math.abs(null!==(n=r.minValue)&&void 0!==n?n:0),Math.abs(null!==(i=r.maxValue)&&void 0!==i?i:0));const o=an(t);return Math.max(10*Math.abs(o),10*Math.abs(e))}function sr(t,e){const n=e instanceof Ii?e.components[1]:void 0,i=or(e instanceof Ii?e.components[0]:void 0,t.x),r=or(n,t.y);return Math.max(i,r)}function ar(t,e){return{baseStep:an(e),constraint:e,textProps:V.fromObject({draggingScale:ln(e,t),formatter:Pe(sn(e,t))})}}function lr(t){if(!("y"in t))return!1;const e=t.y;return!!e&&("inverted"in e&&!!e.inverted)}const pr={id:"input-point2d",type:"input",accept:(t,e)=>{if(!Gi.isObject(t))return null;const n=L,i=A(e,{expanded:n.optional.boolean,picker:n.optional.custom(tn),x:n.optional.custom(en),y:n.optional.object({inverted:n.optional.boolean,max:n.optional.number,min:n.optional.number,step:n.optional.number})});return i?{initialValue:t,params:i}:null},binding:{reader:t=>nr,constraint:t=>{return new Ii({assembly:Yi,components:[rr("x"in(e=t.params)?e.x:void 0,(n=t.initialValue).x),rr("y"in e?e.y:void 0,n.y)]});var e,n},equals:Gi.equals,writer:t=>ir},controller:t=>{const e=t.document,n=t.value,i=t.constraint;if(!(i instanceof Ii))throw c.shouldNeverHappen();const r="expanded"in t.params?t.params.expanded:void 0,o="picker"in t.params?t.params.picker:void 0;return new er(e,{axes:[ar(n.rawValue.x,i.components[0]),ar(n.rawValue.y,i.components[1])],expanded:null!=r&&r,invertsY:lr(t.params),maxValue:sr(n.rawValue,i),parser:ye,pickerLayout:null!=o?o:"popup",value:n,viewProps:t.viewProps})}};class cr{constructor(t=0,e=0,n=0){this.x=t,this.y=e,this.z=n}getComponents(){return[this.x,this.y,this.z]}static isObject(t){if(a(t))return!1;return"number"==typeof t.x&&"number"==typeof t.y&&"number"==typeof t.z}static equals(t,e){return t.x===e.x&&t.y===e.y&&t.z===e.z}toObject(){return{x:this.x,y:this.y,z:this.z}}}const dr={toComponents:t=>t.getComponents(),fromComponents:t=>new cr(...t)};function hr(t){return cr.isObject(t)?new cr(t.x,t.y,t.z):new cr}function ur(t,e){t.writeProperty("x",e.x),t.writeProperty("y",e.y),t.writeProperty("z",e.z)}function vr(t,e){return{baseStep:an(e),constraint:e,textProps:V.fromObject({draggingScale:ln(e,t),formatter:Pe(sn(e,t))})}}const mr={id:"input-point3d",type:"input",accept:(t,e)=>{if(!cr.isObject(t))return null;const n=L,i=A(e,{x:n.optional.custom(en),y:n.optional.custom(en),z:n.optional.custom(en)});return i?{initialValue:t,params:i}:null},binding:{reader:t=>hr,constraint:t=>{return new Ii({assembly:dr,components:[rr("x"in(e=t.params)?e.x:void 0,(n=t.initialValue).x),rr("y"in e?e.y:void 0,n.y),rr("z"in e?e.z:void 0,n.z)]});var e,n},equals:cr.equals,writer:t=>ur},controller:t=>{const e=t.value,n=t.constraint;if(!(n instanceof Ii))throw c.shouldNeverHappen();return new Bi(t.document,{assembly:dr,axes:[vr(e.rawValue.x,n.components[0]),vr(e.rawValue.y,n.components[1]),vr(e.rawValue.z,n.components[2])],parser:ye,value:e,viewProps:t.viewProps})}};class fr{constructor(t=0,e=0,n=0,i=0){this.x=t,this.y=e,this.z=n,this.w=i}getComponents(){return[this.x,this.y,this.z,this.w]}static isObject(t){if(a(t))return!1;return"number"==typeof t.x&&"number"==typeof t.y&&"number"==typeof t.z&&"number"==typeof t.w}static equals(t,e){return t.x===e.x&&t.y===e.y&&t.z===e.z&&t.w===e.w}toObject(){return{x:this.x,y:this.y,z:this.z,w:this.w}}}const br={toComponents:t=>t.getComponents(),fromComponents:t=>new fr(...t)};function gr(t){return fr.isObject(t)?new fr(t.x,t.y,t.z,t.w):new fr}function _r(t,e){t.writeProperty("x",e.x),t.writeProperty("y",e.y),t.writeProperty("z",e.z),t.writeProperty("w",e.w)}const wr={id:"input-point4d",type:"input",accept:(t,e)=>{if(!fr.isObject(t))return null;const n=L,i=A(e,{x:n.optional.custom(en),y:n.optional.custom(en),z:n.optional.custom(en),w:n.optional.custom(en)});return i?{initialValue:t,params:i}:null},binding:{reader:t=>gr,constraint:t=>{return new Ii({assembly:br,components:[rr("x"in(e=t.params)?e.x:void 0,(n=t.initialValue).x),rr("y"in e?e.y:void 0,n.y),rr("z"in e?e.z:void 0,n.z),rr("w"in e?e.w:void 0,n.w)]});var e,n},equals:fr.equals,writer:t=>_r},controller:t=>{const e=t.value,n=t.constraint;if(!(n instanceof Ii))throw c.shouldNeverHappen();return new Bi(t.document,{assembly:br,axes:e.rawValue.getComponents().map(((t,e)=>{return i=t,{baseStep:an(r=n.components[e]),constraint:r,textProps:V.fromObject({draggingScale:ln(r,i),formatter:Pe(sn(r,i))})};var i,r})),parser:ye,value:e,viewProps:t.viewProps})}};const yr={id:"input-string",type:"input",accept:(t,e)=>{if("string"!=typeof t)return null;const n=A(e,{options:L.optional.custom(Je)});return n?{initialValue:t,params:n}:null},binding:{reader:t=>Ve,constraint:t=>function(t){const e=[],n=rn(t.options);return n&&e.push(n),new Bt(e)}(t.params),writer:t=>Ze},controller:t=>{var e;const n=t.document,i=t.value,r=t.constraint;return r&&Ht(r,zt)?new Wt(n,{props:V.fromObject({options:null!==(e=on(r))&&void 0!==e?e:[]}),value:i,viewProps:t.viewProps}):new ee(n,{parser:t=>t,props:V.fromObject({formatter:Me}),value:i,viewProps:t.viewProps})}},xr={defaultInterval:200,defaultLineCount:3},Cr=m("mll");class Pr{constructor(t,e){this.onValueUpdate_=this.onValueUpdate_.bind(this),this.formatter_=e.formatter,this.element=t.createElement("div"),this.element.classList.add(Cr()),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("textarea");n.classList.add(Cr("i")),n.style.height=`calc(var(--bld-us) * ${e.lineCount})`,n.readOnly=!0,e.viewProps.bindDisabled(n),this.element.appendChild(n),this.textareaElem_=n,e.value.emitter.on("change",this.onValueUpdate_),this.value=e.value,this.update_()}update_(){const t=this.textareaElem_,e=t.scrollTop===t.scrollHeight-t.clientHeight,n=[];this.value.rawValue.forEach((t=>{void 0!==t&&n.push(this.formatter_(t))})),t.textContent=n.join("\n"),e&&(t.scrollTop=t.scrollHeight)}onValueUpdate_(){this.update_()}}class kr{constructor(t,e){this.value=e.value,this.viewProps=e.viewProps,this.view=new Pr(t,{formatter:e.formatter,lineCount:e.lineCount,value:this.value,viewProps:this.viewProps})}}const Er=m("sgl");class Vr{constructor(t,e){this.onValueUpdate_=this.onValueUpdate_.bind(this),this.formatter_=e.formatter,this.element=t.createElement("div"),this.element.classList.add(Er()),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("input");n.classList.add(Er("i")),n.readOnly=!0,n.type="text",e.viewProps.bindDisabled(n),this.element.appendChild(n),this.inputElement=n,e.value.emitter.on("change",this.onValueUpdate_),this.value=e.value,this.update_()}update_(){const t=this.value.rawValue,e=t[t.length-1];this.inputElement.value=void 0!==e?this.formatter_(e):""}onValueUpdate_(){this.update_()}}class Mr{constructor(t,e){this.value=e.value,this.viewProps=e.viewProps,this.view=new Vr(t,{formatter:e.formatter,value:this.value,viewProps:this.viewProps})}}const Sr={id:"monitor-bool",type:"monitor",accept:(t,e)=>{if("boolean"!=typeof t)return null;const n=A(e,{lineCount:L.optional.number});return n?{initialValue:t,params:n}:null},binding:{reader:t=>ne},controller:t=>{var e;return 1===t.value.rawValue.length?new Mr(t.document,{formatter:ie,value:t.value,viewProps:t.viewProps}):new kr(t.document,{formatter:ie,lineCount:null!==(e=t.params.lineCount)&&void 0!==e?e:xr.defaultLineCount,value:t.value,viewProps:t.viewProps})}},Lr=m("grl");class Ar{constructor(t,e){this.onCursorChange_=this.onCursorChange_.bind(this),this.onValueUpdate_=this.onValueUpdate_.bind(this),this.element=t.createElement("div"),this.element.classList.add(Lr()),e.viewProps.bindClassModifiers(this.element),this.formatter_=e.formatter,this.props_=e.props,this.cursor_=e.cursor,this.cursor_.emitter.on("change",this.onCursorChange_);const n=t.createElementNS(R,"svg");n.classList.add(Lr("g")),n.style.height=`calc(var(--bld-us) * ${e.lineCount})`,this.element.appendChild(n),this.svgElem_=n;const i=t.createElementNS(R,"polyline");this.svgElem_.appendChild(i),this.lineElem_=i;const r=t.createElement("div");r.classList.add(Lr("t"),m("tt")()),this.element.appendChild(r),this.tooltipElem_=r,e.value.emitter.on("change",this.onValueUpdate_),this.value=e.value,this.update_()}get graphElement(){return this.svgElem_}update_(){const t=this.svgElem_.getBoundingClientRect(),e=this.value.rawValue.length-1,n=this.props_.get("minValue"),i=this.props_.get("maxValue"),r=[];this.value.rawValue.forEach(((o,s)=>{if(void 0===o)return;const a=Ie(s,0,e,0,t.width),l=Ie(o,n,i,t.height,0);r.push([a,l].join(","))})),this.lineElem_.setAttributeNS(null,"points",r.join(" "));const o=this.tooltipElem_,s=this.value.rawValue[this.cursor_.rawValue];if(void 0===s)return void o.classList.remove(Lr("t","a"));const a=Ie(this.cursor_.rawValue,0,e,0,t.width),l=Ie(s,n,i,t.height,0);o.style.left=`${a}px`,o.style.top=`${l}px`,o.textContent=`${this.formatter_(s)}`,o.classList.contains(Lr("t","a"))||(o.classList.add(Lr("t","a"),Lr("t","in")),o.classList.remove(Lr("t","in")))}onValueUpdate_(){this.update_()}onCursorChange_(){this.update_()}}class Tr{constructor(t,e){if(this.onGraphMouseMove_=this.onGraphMouseMove_.bind(this),this.onGraphMouseLeave_=this.onGraphMouseLeave_.bind(this),this.onGraphPointerDown_=this.onGraphPointerDown_.bind(this),this.onGraphPointerMove_=this.onGraphPointerMove_.bind(this),this.onGraphPointerUp_=this.onGraphPointerUp_.bind(this),this.props_=e.props,this.value=e.value,this.viewProps=e.viewProps,this.cursor_=E(-1),this.view=new Ar(t,{cursor:this.cursor_,formatter:e.formatter,lineCount:e.lineCount,props:this.props_,value:this.value,viewProps:this.viewProps}),O(t)){const t=new Fe(this.view.element);t.emitter.on("down",this.onGraphPointerDown_),t.emitter.on("move",this.onGraphPointerMove_),t.emitter.on("up",this.onGraphPointerUp_)}else this.view.element.addEventListener("mousemove",this.onGraphMouseMove_),this.view.element.addEventListener("mouseleave",this.onGraphMouseLeave_)}onGraphMouseLeave_(){this.cursor_.rawValue=-1}onGraphMouseMove_(t){const e=this.view.element.getBoundingClientRect();this.cursor_.rawValue=Math.floor(Ie(t.offsetX,0,e.width,0,this.value.rawValue.length))}onGraphPointerDown_(t){this.onGraphPointerMove_(t)}onGraphPointerMove_(t){this.cursor_.rawValue=t.data.point?Math.floor(Ie(t.data.point.x,0,t.data.bounds.width,0,this.value.rawValue.length)):-1}onGraphPointerUp_(){this.cursor_.rawValue=-1}}function Dr(t){return"format"in t&&!a(t.format)?t.format:Pe(2)}function jr(t){return"view"in t&&"graph"===t.view}const Rr={id:"monitor-number",type:"monitor",accept:(t,e)=>{if("number"!=typeof t)return null;const n=A(e,{format:L.optional.function,lineCount:L.optional.number,max:L.optional.number,min:L.optional.number,view:L.optional.string});return n?{initialValue:t,params:n}:null},binding:{defaultBufferSize:t=>jr(t)?64:1,reader:t=>xe},controller:t=>jr(t.params)?function(t){var e,n,i;return new Tr(t.document,{formatter:Dr(t.params),lineCount:null!==(e=t.params.lineCount)&&void 0!==e?e:xr.defaultLineCount,props:V.fromObject({maxValue:null!==(n="max"in t.params?t.params.max:null)&&void 0!==n?n:100,minValue:null!==(i="min"in t.params?t.params.min:null)&&void 0!==i?i:0}),value:t.value,viewProps:t.viewProps})}(t):function(t){var e;return 1===t.value.rawValue.length?new Mr(t.document,{formatter:Dr(t.params),value:t.value,viewProps:t.viewProps}):new kr(t.document,{formatter:Dr(t.params),lineCount:null!==(e=t.params.lineCount)&&void 0!==e?e:xr.defaultLineCount,value:t.value,viewProps:t.viewProps})}(t)},Or={id:"monitor-string",type:"monitor",accept:(t,e)=>{if("string"!=typeof t)return null;const n=A(e,{lineCount:L.optional.number,multiline:L.optional.boolean});return n?{initialValue:t,params:n}:null},binding:{reader:t=>Ve},controller:t=>{var e;const n=t.value;return n.rawValue.length>1||"multiline"in t.params&&t.params.multiline?new kr(t.document,{formatter:Me,lineCount:null!==(e=t.params.lineCount)&&void 0!==e?e:xr.defaultLineCount,value:n,viewProps:t.viewProps}):new Mr(t.document,{formatter:Me,value:n,viewProps:t.viewProps})}};class Nr{constructor(t){this.onValueChange_=this.onValueChange_.bind(this),this.reader=t.reader,this.writer=t.writer,this.emitter=new u,this.value=t.value,this.value.emitter.on("change",this.onValueChange_),this.target=t.target,this.read()}read(){const t=this.target.read();void 0!==t&&(this.value.rawValue=this.reader(t))}write_(t){this.writer(this.target,t)}onValueChange_(t){this.write_(t.rawValue),this.emitter.emit("change",{options:t.options,rawValue:t.rawValue,sender:this})}}class Fr{constructor(t){this.onTick_=this.onTick_.bind(this),this.reader_=t.reader,this.target=t.target,this.emitter=new u,this.value=t.value,this.ticker=t.ticker,this.ticker.emitter.on("tick",this.onTick_),this.read()}dispose(){this.ticker.dispose()}read(){const t=this.target.read();if(void 0===t)return;const e=this.value.rawValue,n=this.reader_(t);this.value.rawValue=function(t,e){const n=[...Ae(t),e];return n.length>t.length?n.splice(0,n.length-t.length):Se(n,t.length),n}(e,n),this.emitter.emit("update",{rawValue:n,sender:this})}onTick_(t){this.read()}}function Ir(t,e){return 0===e?new Ut:new Kt(t,null!=e?e:xr.defaultInterval)}class Ur{constructor(){this.pluginsMap_={blades:[],inputs:[],monitors:[]}}getAll(){return[...this.pluginsMap_.blades,...this.pluginsMap_.inputs,...this.pluginsMap_.monitors]}register(t){"blade"===t.type?this.pluginsMap_.blades.unshift(t):"input"===t.type?this.pluginsMap_.inputs.unshift(t):"monitor"===t.type&&this.pluginsMap_.monitors.unshift(t)}createInput(t,e,n){if(a(e.read()))throw new c({context:{key:e.key},type:"nomatchingcontroller"});const i=this.pluginsMap_.inputs.reduce(((i,r)=>null!=i?i:function(t,e){const n=t.accept(e.target.read(),e.params);if(a(n))return null;const i=L,r={target:e.target,initialValue:n.initialValue,params:n.params},o=t.binding.reader(r),s=t.binding.constraint?t.binding.constraint(r):void 0,l=E(o(n.initialValue),{constraint:s,equals:t.binding.equals}),p=new Nr({reader:o,target:e.target,value:l,writer:t.binding.writer(r)}),c=i.optional.boolean(e.params.disabled).value,d=i.optional.boolean(e.params.hidden).value,h=t.controller({constraint:s,document:e.document,initialValue:n.initialValue,params:n.params,value:p.value,viewProps:Mt.create({disabled:c,hidden:d})}),u=i.optional.string(e.params.label).value;return new nt(e.document,{binding:p,blade:W(),props:V.fromObject({label:null!=u?u:e.target.key}),valueController:h})}(r,{document:t,target:e,params:n})),null);if(i)return i;throw new c({context:{key:e.key},type:"nomatchingcontroller"})}createMonitor(t,e,n){const i=this.pluginsMap_.monitors.reduce(((i,r)=>null!=i?i:function(t,e){var n,i,r;const o=L,s=t.accept(e.target.read(),e.params);if(a(s))return null;const l=t.binding.reader({target:e.target,initialValue:s.initialValue,params:s.params}),p=null!==(i=null!==(n=o.optional.number(e.params.bufferSize).value)&&void 0!==n?n:t.binding.defaultBufferSize&&t.binding.defaultBufferSize(s.params))&&void 0!==i?i:1,c=o.optional.number(e.params.interval).value,d=new Fr({reader:l,target:e.target,ticker:Ir(e.document,c),value:Le(p)}),h=o.optional.boolean(e.params.disabled).value,u=o.optional.boolean(e.params.hidden).value,v=t.controller({document:e.document,params:s.params,value:d.value,viewProps:Mt.create({disabled:h,hidden:u})}),m=null!==(r=o.optional.string(e.params.label).value)&&void 0!==r?r:e.target.key;return new rt(e.document,{binding:d,blade:W(),props:V.fromObject({label:m}),valueController:v})}(r,{document:t,params:n,target:e})),null);if(i)return i;throw new c({context:{key:e.key},type:"nomatchingcontroller"})}createBlade(t,e){const n=this.pluginsMap_.blades.reduce(((n,i)=>null!=n?n:function(t,e){const n=t.accept(e.params);if(!n)return null;const i=L.optional.boolean(e.params.disabled).value,r=L.optional.boolean(e.params.hidden).value;return t.controller({blade:W(),document:e.document,params:Object.assign(Object.assign({},n.params),{disabled:i,hidden:r}),viewProps:Mt.create({disabled:i,hidden:r})})}(i,{document:t,params:e})),null);if(!n)throw new c({type:"nomatchingview",context:{params:e}});return n}createBladeApi(t){if(t instanceof nt)return new et(t);if(t instanceof rt)return new it(t);if(t instanceof mt)return new lt(t,this);const e=this.pluginsMap_.blades.reduce(((e,n)=>null!=e?e:n.api({controller:t,pool:this})),null);if(!e)throw c.shouldNeverHappen();return e}}class Kr extends e{constructor(t){super(t),this.emitter_=new u,this.controller_.valueController.value.emitter.on("change",(t=>{this.emitter_.emit("change",{event:new i(this,t.rawValue)})}))}get label(){return this.controller_.props.get("label")}set label(t){this.controller_.props.set("label",t)}get options(){return this.controller_.valueController.props.get("options")}set options(t){this.controller_.valueController.props.set("options",t)}get value(){return this.controller_.valueController.value.rawValue}set value(t){this.controller_.valueController.value.rawValue=t}on(t,e){const n=e.bind(this);return this.emitter_.on(t,(t=>{n(t.event)})),this}}class Br extends e{constructor(t){super(t),this.emitter_=new u,this.controller_.valueController.value.emitter.on("change",(t=>{this.emitter_.emit("change",{event:new i(this,t.rawValue)})}))}get label(){return this.controller_.props.get("label")}set label(t){this.controller_.props.set("label",t)}get maxValue(){return this.controller_.valueController.sliderController.props.get("maxValue")}set maxValue(t){this.controller_.valueController.sliderController.props.set("maxValue",t)}get minValue(){return this.controller_.valueController.sliderController.props.get("minValue")}set minValue(t){this.controller_.valueController.sliderController.props.set("minValue",t)}get value(){return this.controller_.valueController.value.rawValue}set value(t){this.controller_.valueController.value.rawValue=t}on(t,e){const n=e.bind(this);return this.emitter_.on(t,(t=>{n(t.event)})),this}}class Hr extends e{constructor(t){super(t),this.emitter_=new u,this.controller_.valueController.value.emitter.on("change",(t=>{this.emitter_.emit("change",{event:new i(this,t.rawValue)})}))}get label(){return this.controller_.props.get("label")}set label(t){this.controller_.props.set("label",t)}get formatter(){return this.controller_.valueController.props.get("formatter")}set formatter(t){this.controller_.valueController.props.set("formatter",t)}get value(){return this.controller_.valueController.value.rawValue}set value(t){this.controller_.valueController.value.rawValue=t}on(t,e){const n=e.bind(this);return this.emitter_.on(t,(t=>{n(t.event)})),this}}const zr={id:"list",type:"blade",accept(t){const e=L,n=A(t,{options:e.required.custom(Je),value:e.required.raw,view:e.required.constant("list"),label:e.optional.string});return n?{params:n}:null},controller(t){const e=new Wt(t.document,{props:V.fromObject({options:nn(t.params.options)}),value:E(t.params.value),viewProps:t.viewProps});return new wt(t.document,{blade:t.blade,props:V.fromObject({label:t.params.label}),valueController:e})},api:t=>t.controller instanceof wt&&t.controller.valueController instanceof Wt?new Kr(t.controller):null};class qr extends pt{constructor(t,e){super(t,e)}get element(){return this.controller_.view.element}importPreset(t){!function(t,e){t.forEach((t=>{const n=e[t.presetKey];void 0!==n&&t.write(n)}))}(this.controller_.rackController.rack.find(nt).map((t=>t.binding.target)),t),this.refresh()}exportPreset(){return function(t){return t.reduce(((t,e)=>Object.assign(t,{[e.presetKey]:e.read()})),{})}(this.controller_.rackController.rack.find(nt).map((t=>t.binding.target)))}refresh(){this.controller_.rackController.rack.find(nt).forEach((t=>{t.binding.read()})),this.controller_.rackController.rack.find(rt).forEach((t=>{t.binding.read()}))}}class $r extends gt{constructor(t,e){super(t,{expanded:e.expanded,blade:e.blade,props:e.props,root:!0,viewProps:e.viewProps})}}const Gr={id:"slider",type:"blade",accept(t){const e=L,n=A(t,{max:e.required.number,min:e.required.number,view:e.required.constant("slider"),format:e.optional.function,label:e.optional.string,value:e.optional.number});return n?{params:n}:null},controller(t){var e,n;const i=null!==(e=t.params.value)&&void 0!==e?e:0,r=new Xe(t.document,{baseStep:1,parser:ye,sliderProps:V.fromObject({maxValue:t.params.max,minValue:t.params.min}),textProps:V.fromObject({draggingScale:ln(void 0,i),formatter:null!==(n=t.params.format)&&void 0!==n?n:Ce}),value:E(i),viewProps:t.viewProps});return new wt(t.document,{blade:t.blade,props:V.fromObject({label:t.params.label}),valueController:r})},api:t=>t.controller instanceof wt&&t.controller.valueController instanceof Xe?new Br(t.controller):null},Yr={id:"text",type:"blade",accept(t){const e=L,n=A(t,{parse:e.required.function,value:e.required.raw,view:e.required.constant("text"),format:e.optional.function,label:e.optional.string});return n?{params:n}:null},controller(t){var e;const n=new ee(t.document,{parser:t.params.parse,props:V.fromObject({formatter:null!==(e=t.params.format)&&void 0!==e?e:t=>String(t)}),value:E(t.params.value),viewProps:t.viewProps});return new wt(t.document,{blade:t.blade,props:V.fromObject({label:t.params.label}),valueController:n})},api:t=>t.controller instanceof wt&&t.controller.valueController instanceof ee?new Hr(t.controller):null};function Wr(t,e,n){if(t.querySelector(`style[data-tp-style=${e}]`))return;const i=t.createElement("style");i.dataset.tpStyle=e,i.textContent=n,t.head.appendChild(i)}const Qr=new class{constructor(t){const[e,n]=t.split("-"),i=e.split(".");this.major=parseInt(i[0],10),this.minor=parseInt(i[1],10),this.patch=parseInt(i[2],10),this.prerelease=null!=n?n:null}toString(){const t=[this.major,this.minor,this.patch].join(".");return null!==this.prerelease?[t,this.prerelease].join("-"):t}}("3.1.0");t.BladeApi=e,t.ButtonApi=h,t.FolderApi=pt,t.InputBindingApi=et,t.ListApi=Kr,t.MonitorBindingApi=it,t.Pane=class extends qr{constructor(t){var e,n;const i=null!=t?t:{},r=null!==(e=i.document)&&void 0!==e?e:N(),o=function(){const t=new Ur;return[pr,mr,wr,yr,$i,Fi,Ni,ji,hn,Sr,Or,Rr,G,_t,kt,It].forEach((e=>{t.register(e)})),t}();super(new $r(r,{expanded:i.expanded,blade:W(),props:V.fromObject({title:i.title}),viewProps:Mt.create()}),o),this.pool_=o,this.containerElem_=null!==(n=i.container)&&void 0!==n?n:function(t){const e=t.createElement("div");return e.classList.add(m("dfw")()),t.body&&t.body.appendChild(e),e}(r),this.containerElem_.appendChild(this.element),this.doc_=r,this.usesDefaultWrapper_=!i.container,this.setUpDefaultPlugins_()}get document(){if(!this.doc_)throw c.alreadyDisposed();return this.doc_}dispose(){const t=this.containerElem_;if(!t)throw c.alreadyDisposed();if(this.usesDefaultWrapper_){const e=t.parentElement;e&&e.removeChild(t)}this.containerElem_=null,this.doc_=null,super.dispose()}registerPlugin(t){("plugin"in t?[t.plugin]:"plugins"in t?t.plugins:[]).forEach((t=>{this.pool_.register(t),this.embedPluginStyle_(t)}))}embedPluginStyle_(t){t.css&&Wr(this.document,`plugin-${t.id}`,t.css)}setUpDefaultPlugins_(){Wr(this.document,"default",'.tp-tbiv_b,.tp-coltxtv_ms,.tp-ckbv_i,.tp-rotv_b,.tp-fldv_b,.tp-mllv_i,.tp-sglv_i,.tp-grlv_g,.tp-txtv_i,.tp-p2dpv_p,.tp-colswv_sw,.tp-p2dv_b,.tp-btnv_b,.tp-lstv_s{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0}.tp-p2dv_b,.tp-btnv_b,.tp-lstv_s{background-color:var(--btn-bg);border-radius:var(--elm-br);color:var(--btn-fg);cursor:pointer;display:block;font-weight:bold;height:var(--bld-us);line-height:var(--bld-us);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tp-p2dv_b:hover,.tp-btnv_b:hover,.tp-lstv_s:hover{background-color:var(--btn-bg-h)}.tp-p2dv_b:focus,.tp-btnv_b:focus,.tp-lstv_s:focus{background-color:var(--btn-bg-f)}.tp-p2dv_b:active,.tp-btnv_b:active,.tp-lstv_s:active{background-color:var(--btn-bg-a)}.tp-p2dv_b:disabled,.tp-btnv_b:disabled,.tp-lstv_s:disabled{opacity:.5}.tp-txtv_i,.tp-p2dpv_p,.tp-colswv_sw{background-color:var(--in-bg);border-radius:var(--elm-br);box-sizing:border-box;color:var(--in-fg);font-family:inherit;height:var(--bld-us);line-height:var(--bld-us);min-width:0;width:100%}.tp-txtv_i:hover,.tp-p2dpv_p:hover,.tp-colswv_sw:hover{background-color:var(--in-bg-h)}.tp-txtv_i:focus,.tp-p2dpv_p:focus,.tp-colswv_sw:focus{background-color:var(--in-bg-f)}.tp-txtv_i:active,.tp-p2dpv_p:active,.tp-colswv_sw:active{background-color:var(--in-bg-a)}.tp-txtv_i:disabled,.tp-p2dpv_p:disabled,.tp-colswv_sw:disabled{opacity:.5}.tp-mllv_i,.tp-sglv_i,.tp-grlv_g{background-color:var(--mo-bg);border-radius:var(--elm-br);box-sizing:border-box;color:var(--mo-fg);height:var(--bld-us);scrollbar-color:currentColor transparent;scrollbar-width:thin;width:100%}.tp-mllv_i::-webkit-scrollbar,.tp-sglv_i::-webkit-scrollbar,.tp-grlv_g::-webkit-scrollbar{height:8px;width:8px}.tp-mllv_i::-webkit-scrollbar-corner,.tp-sglv_i::-webkit-scrollbar-corner,.tp-grlv_g::-webkit-scrollbar-corner{background-color:transparent}.tp-mllv_i::-webkit-scrollbar-thumb,.tp-sglv_i::-webkit-scrollbar-thumb,.tp-grlv_g::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:currentColor;border:transparent solid 2px;border-radius:4px}.tp-rotv{--font-family: var(--tp-font-family, Roboto Mono, Source Code Pro, Menlo, Courier, monospace);--bs-br: var(--tp-base-border-radius, 6px);--cnt-h-p: var(--tp-container-horizontal-padding, 4px);--cnt-v-p: var(--tp-container-vertical-padding, 4px);--elm-br: var(--tp-element-border-radius, 2px);--bld-s: var(--tp-blade-spacing, 4px);--bld-us: var(--tp-blade-unit-size, 20px);--bs-bg: var(--tp-base-background-color, #28292e);--bs-sh: var(--tp-base-shadow-color, rgba(0, 0, 0, 0.2));--btn-bg: var(--tp-button-background-color, #adafb8);--btn-bg-a: var(--tp-button-background-color-active, #d6d7db);--btn-bg-f: var(--tp-button-background-color-focus, #c8cad0);--btn-bg-h: var(--tp-button-background-color-hover, #bbbcc4);--btn-fg: var(--tp-button-foreground-color, #28292e);--cnt-bg: var(--tp-container-background-color, rgba(187, 188, 196, 0.1));--cnt-bg-a: var(--tp-container-background-color-active, rgba(187, 188, 196, 0.25));--cnt-bg-f: var(--tp-container-background-color-focus, rgba(187, 188, 196, 0.2));--cnt-bg-h: var(--tp-container-background-color-hover, rgba(187, 188, 196, 0.15));--cnt-fg: var(--tp-container-foreground-color, #bbbcc4);--in-bg: var(--tp-input-background-color, rgba(187, 188, 196, 0.1));--in-bg-a: var(--tp-input-background-color-active, rgba(187, 188, 196, 0.25));--in-bg-f: var(--tp-input-background-color-focus, rgba(187, 188, 196, 0.2));--in-bg-h: var(--tp-input-background-color-hover, rgba(187, 188, 196, 0.15));--in-fg: var(--tp-input-foreground-color, #bbbcc4);--lbl-fg: var(--tp-label-foreground-color, rgba(187, 188, 196, 0.7));--mo-bg: var(--tp-monitor-background-color, rgba(0, 0, 0, 0.2));--mo-fg: var(--tp-monitor-foreground-color, rgba(187, 188, 196, 0.7));--grv-fg: var(--tp-groove-foreground-color, rgba(187, 188, 196, 0.1))}.tp-rotv_c>.tp-cntv.tp-v-lst,.tp-tabv_c .tp-brkv>.tp-cntv.tp-v-lst,.tp-fldv_c>.tp-cntv.tp-v-lst{margin-bottom:calc(-1*var(--cnt-v-p))}.tp-rotv_c>.tp-fldv.tp-v-lst .tp-fldv_c,.tp-tabv_c .tp-brkv>.tp-fldv.tp-v-lst .tp-fldv_c,.tp-fldv_c>.tp-fldv.tp-v-lst .tp-fldv_c{border-bottom-left-radius:0}.tp-rotv_c>.tp-fldv.tp-v-lst .tp-fldv_b,.tp-tabv_c .tp-brkv>.tp-fldv.tp-v-lst .tp-fldv_b,.tp-fldv_c>.tp-fldv.tp-v-lst .tp-fldv_b{border-bottom-left-radius:0}.tp-rotv_c>*:not(.tp-v-fst),.tp-tabv_c .tp-brkv>*:not(.tp-v-fst),.tp-fldv_c>*:not(.tp-v-fst){margin-top:var(--bld-s)}.tp-rotv_c>.tp-sprv:not(.tp-v-fst),.tp-tabv_c .tp-brkv>.tp-sprv:not(.tp-v-fst),.tp-fldv_c>.tp-sprv:not(.tp-v-fst),.tp-rotv_c>.tp-cntv:not(.tp-v-fst),.tp-tabv_c .tp-brkv>.tp-cntv:not(.tp-v-fst),.tp-fldv_c>.tp-cntv:not(.tp-v-fst){margin-top:var(--cnt-v-p)}.tp-rotv_c>.tp-sprv+*:not(.tp-v-hidden),.tp-tabv_c .tp-brkv>.tp-sprv+*:not(.tp-v-hidden),.tp-fldv_c>.tp-sprv+*:not(.tp-v-hidden),.tp-rotv_c>.tp-cntv+*:not(.tp-v-hidden),.tp-tabv_c .tp-brkv>.tp-cntv+*:not(.tp-v-hidden),.tp-fldv_c>.tp-cntv+*:not(.tp-v-hidden){margin-top:var(--cnt-v-p)}.tp-rotv_c>.tp-sprv:not(.tp-v-hidden)+.tp-sprv,.tp-tabv_c .tp-brkv>.tp-sprv:not(.tp-v-hidden)+.tp-sprv,.tp-fldv_c>.tp-sprv:not(.tp-v-hidden)+.tp-sprv,.tp-rotv_c>.tp-cntv:not(.tp-v-hidden)+.tp-cntv,.tp-tabv_c .tp-brkv>.tp-cntv:not(.tp-v-hidden)+.tp-cntv,.tp-fldv_c>.tp-cntv:not(.tp-v-hidden)+.tp-cntv{margin-top:0}.tp-tabv_c .tp-brkv>.tp-cntv,.tp-fldv_c>.tp-cntv{margin-left:4px}.tp-tabv_c .tp-brkv>.tp-fldv>.tp-fldv_b,.tp-fldv_c>.tp-fldv>.tp-fldv_b{border-top-left-radius:var(--elm-br);border-bottom-left-radius:var(--elm-br)}.tp-tabv_c .tp-brkv>.tp-fldv.tp-fldv-expanded>.tp-fldv_b,.tp-fldv_c>.tp-fldv.tp-fldv-expanded>.tp-fldv_b{border-bottom-left-radius:0}.tp-tabv_c .tp-brkv .tp-fldv>.tp-fldv_c,.tp-fldv_c .tp-fldv>.tp-fldv_c{border-bottom-left-radius:var(--elm-br)}.tp-tabv_c .tp-brkv>.tp-tabv>.tp-tabv_i,.tp-fldv_c>.tp-tabv>.tp-tabv_i{border-top-left-radius:var(--elm-br)}.tp-tabv_c .tp-brkv .tp-tabv>.tp-tabv_c,.tp-fldv_c .tp-tabv>.tp-tabv_c{border-bottom-left-radius:var(--elm-br)}.tp-rotv_b,.tp-fldv_b{background-color:var(--cnt-bg);color:var(--cnt-fg);cursor:pointer;display:block;height:calc(var(--bld-us) + 4px);line-height:calc(var(--bld-us) + 4px);overflow:hidden;padding-left:var(--cnt-h-p);padding-right:calc(4px + var(--bld-us) + var(--cnt-h-p));position:relative;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%;transition:border-radius .2s ease-in-out .2s}.tp-rotv_b:hover,.tp-fldv_b:hover{background-color:var(--cnt-bg-h)}.tp-rotv_b:focus,.tp-fldv_b:focus{background-color:var(--cnt-bg-f)}.tp-rotv_b:active,.tp-fldv_b:active{background-color:var(--cnt-bg-a)}.tp-rotv_b:disabled,.tp-fldv_b:disabled{opacity:.5}.tp-rotv_m,.tp-fldv_m{background:linear-gradient(to left, var(--cnt-fg), var(--cnt-fg) 2px, transparent 2px, transparent 4px, var(--cnt-fg) 4px);border-radius:2px;bottom:0;content:"";display:block;height:6px;right:calc(var(--cnt-h-p) + (var(--bld-us) + 4px - 6px)/2 - 2px);margin:auto;opacity:.5;position:absolute;top:0;transform:rotate(90deg);transition:transform .2s ease-in-out;width:6px}.tp-rotv.tp-rotv-expanded .tp-rotv_m,.tp-fldv.tp-fldv-expanded>.tp-fldv_b>.tp-fldv_m{transform:none}.tp-rotv_c,.tp-fldv_c{box-sizing:border-box;height:0;opacity:0;overflow:hidden;padding-bottom:0;padding-top:0;position:relative;transition:height .2s ease-in-out,opacity .2s linear,padding .2s ease-in-out}.tp-rotv.tp-rotv-cpl:not(.tp-rotv-expanded) .tp-rotv_c,.tp-fldv.tp-fldv-cpl:not(.tp-fldv-expanded)>.tp-fldv_c{display:none}.tp-rotv.tp-rotv-expanded .tp-rotv_c,.tp-fldv.tp-fldv-expanded>.tp-fldv_c{opacity:1;padding-bottom:var(--cnt-v-p);padding-top:var(--cnt-v-p);transform:none;overflow:visible;transition:height .2s ease-in-out,opacity .2s linear .2s,padding .2s ease-in-out}.tp-lstv,.tp-coltxtv_m{position:relative}.tp-lstv_s{padding:0 20px 0 4px;width:100%}.tp-lstv_m,.tp-coltxtv_mm{bottom:0;margin:auto;pointer-events:none;position:absolute;right:2px;top:0}.tp-lstv_m svg,.tp-coltxtv_mm svg{bottom:0;height:16px;margin:auto;position:absolute;right:0;top:0;width:16px}.tp-lstv_m svg path,.tp-coltxtv_mm svg path{fill:currentColor}.tp-pndtxtv,.tp-coltxtv_w{display:flex}.tp-pndtxtv_a,.tp-coltxtv_c{width:100%}.tp-pndtxtv_a+.tp-pndtxtv_a,.tp-coltxtv_c+.tp-pndtxtv_a,.tp-pndtxtv_a+.tp-coltxtv_c,.tp-coltxtv_c+.tp-coltxtv_c{margin-left:2px}.tp-btnv_b{width:100%}.tp-btnv_t{text-align:center}.tp-ckbv_l{display:block;position:relative}.tp-ckbv_i{left:0;opacity:0;position:absolute;top:0}.tp-ckbv_w{background-color:var(--in-bg);border-radius:var(--elm-br);cursor:pointer;display:block;height:var(--bld-us);position:relative;width:var(--bld-us)}.tp-ckbv_w svg{bottom:0;display:block;height:16px;left:0;margin:auto;opacity:0;position:absolute;right:0;top:0;width:16px}.tp-ckbv_w svg path{fill:none;stroke:var(--in-fg);stroke-width:2}.tp-ckbv_i:hover+.tp-ckbv_w{background-color:var(--in-bg-h)}.tp-ckbv_i:focus+.tp-ckbv_w{background-color:var(--in-bg-f)}.tp-ckbv_i:active+.tp-ckbv_w{background-color:var(--in-bg-a)}.tp-ckbv_i:checked+.tp-ckbv_w svg{opacity:1}.tp-ckbv.tp-v-disabled .tp-ckbv_w{opacity:.5}.tp-colv{position:relative}.tp-colv_h{display:flex}.tp-colv_s{flex-grow:0;flex-shrink:0;width:var(--bld-us)}.tp-colv_t{flex:1;margin-left:4px}.tp-colv_p{height:0;margin-top:0;opacity:0;overflow:hidden;transition:height .2s ease-in-out,opacity .2s linear,margin .2s ease-in-out}.tp-colv.tp-colv-cpl .tp-colv_p{overflow:visible}.tp-colv.tp-colv-expanded .tp-colv_p{margin-top:var(--bld-s);opacity:1}.tp-colv .tp-popv{left:calc(-1*var(--cnt-h-p));right:calc(-1*var(--cnt-h-p));top:var(--bld-us)}.tp-colpv_h,.tp-colpv_ap{margin-left:6px;margin-right:6px}.tp-colpv_h{margin-top:var(--bld-s)}.tp-colpv_rgb{display:flex;margin-top:var(--bld-s);width:100%}.tp-colpv_a{display:flex;margin-top:var(--cnt-v-p);padding-top:calc(var(--cnt-v-p) + 2px);position:relative}.tp-colpv_a:before{background-color:var(--grv-fg);content:"";height:2px;left:calc(-1*var(--cnt-h-p));position:absolute;right:calc(-1*var(--cnt-h-p));top:0}.tp-colpv_ap{align-items:center;display:flex;flex:3}.tp-colpv_at{flex:1;margin-left:4px}.tp-svpv{border-radius:var(--elm-br);outline:none;overflow:hidden;position:relative}.tp-svpv_c{cursor:crosshair;display:block;height:calc(var(--bld-us)*4);width:100%}.tp-svpv_m{border-radius:100%;border:rgba(255,255,255,.75) solid 2px;box-sizing:border-box;filter:drop-shadow(0 0 1px rgba(0, 0, 0, 0.3));height:12px;margin-left:-6px;margin-top:-6px;pointer-events:none;position:absolute;width:12px}.tp-svpv:focus .tp-svpv_m{border-color:#fff}.tp-hplv{cursor:pointer;height:var(--bld-us);outline:none;position:relative}.tp-hplv_c{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAAABCAYAAABubagXAAAAQ0lEQVQoU2P8z8Dwn0GCgQEDi2OK/RBgYHjBgIpfovFh8j8YBIgzFGQxuqEgPhaDOT5gOhPkdCxOZeBg+IDFZZiGAgCaSSMYtcRHLgAAAABJRU5ErkJggg==);background-position:left top;background-repeat:no-repeat;background-size:100% 100%;border-radius:2px;display:block;height:4px;left:0;margin-top:-2px;position:absolute;top:50%;width:100%}.tp-hplv_m{border-radius:var(--elm-br);border:rgba(255,255,255,.75) solid 2px;box-shadow:0 0 2px rgba(0,0,0,.1);box-sizing:border-box;height:12px;left:50%;margin-left:-6px;margin-top:-6px;pointer-events:none;position:absolute;top:50%;width:12px}.tp-hplv:focus .tp-hplv_m{border-color:#fff}.tp-aplv{cursor:pointer;height:var(--bld-us);outline:none;position:relative;width:100%}.tp-aplv_b{background-color:#fff;background-image:linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%),linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%);background-size:4px 4px;background-position:0 0,2px 2px;border-radius:2px;display:block;height:4px;left:0;margin-top:-2px;overflow:hidden;position:absolute;top:50%;width:100%}.tp-aplv_c{bottom:0;left:0;position:absolute;right:0;top:0}.tp-aplv_m{background-color:#fff;background-image:linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%),linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%);background-size:12px 12px;background-position:0 0,6px 6px;border-radius:var(--elm-br);box-shadow:0 0 2px rgba(0,0,0,.1);height:12px;left:50%;margin-left:-6px;margin-top:-6px;overflow:hidden;pointer-events:none;position:absolute;top:50%;width:12px}.tp-aplv_p{border-radius:var(--elm-br);border:rgba(255,255,255,.75) solid 2px;box-sizing:border-box;bottom:0;left:0;position:absolute;right:0;top:0}.tp-aplv:focus .tp-aplv_p{border-color:#fff}.tp-colswv{background-color:#fff;background-image:linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%),linear-gradient(to top right, #ddd 25%, transparent 25%, transparent 75%, #ddd 75%);background-size:10px 10px;background-position:0 0,5px 5px;border-radius:var(--elm-br);overflow:hidden}.tp-colswv.tp-v-disabled{opacity:.5}.tp-colswv_sw{border-radius:0}.tp-colswv_b{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;cursor:pointer;display:block;height:var(--bld-us);left:0;margin:0;outline:none;padding:0;position:absolute;top:0;width:var(--bld-us)}.tp-colswv_b:focus::after{border:rgba(255,255,255,.75) solid 2px;border-radius:var(--elm-br);bottom:0;content:"";display:block;left:0;position:absolute;right:0;top:0}.tp-coltxtv{display:flex;width:100%}.tp-coltxtv_m{margin-right:4px}.tp-coltxtv_ms{border-radius:var(--elm-br);color:var(--lbl-fg);cursor:pointer;height:var(--bld-us);line-height:var(--bld-us);padding:0 18px 0 4px}.tp-coltxtv_ms:hover{background-color:var(--in-bg-h)}.tp-coltxtv_ms:focus{background-color:var(--in-bg-f)}.tp-coltxtv_ms:active{background-color:var(--in-bg-a)}.tp-coltxtv_mm{color:var(--lbl-fg)}.tp-coltxtv_w{flex:1}.tp-dfwv{position:absolute;top:8px;right:8px;width:256px}.tp-fldv.tp-fldv-not .tp-fldv_b{display:none}.tp-fldv_t{padding-left:4px}.tp-fldv_c{border-left:var(--cnt-bg) solid 4px}.tp-fldv_b:hover+.tp-fldv_c{border-left-color:var(--cnt-bg-h)}.tp-fldv_b:focus+.tp-fldv_c{border-left-color:var(--cnt-bg-f)}.tp-fldv_b:active+.tp-fldv_c{border-left-color:var(--cnt-bg-a)}.tp-grlv{position:relative}.tp-grlv_g{display:block;height:calc(var(--bld-us)*3)}.tp-grlv_g polyline{fill:none;stroke:var(--mo-fg);stroke-linejoin:round}.tp-grlv_t{margin-top:-4px;transition:left .05s,top .05s;visibility:hidden}.tp-grlv_t.tp-grlv_t-a{visibility:visible}.tp-grlv_t.tp-grlv_t-in{transition:none}.tp-grlv.tp-v-disabled .tp-grlv_g{opacity:.5}.tp-grlv .tp-ttv{background-color:var(--mo-fg)}.tp-grlv .tp-ttv::before{border-top-color:var(--mo-fg)}.tp-lblv{align-items:center;display:flex;line-height:1.3;padding-left:var(--cnt-h-p);padding-right:var(--cnt-h-p)}.tp-lblv.tp-lblv-nol{display:block}.tp-lblv_l{color:var(--lbl-fg);flex:1;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto;overflow:hidden;padding-left:4px;padding-right:16px}.tp-lblv.tp-v-disabled .tp-lblv_l{opacity:.5}.tp-lblv.tp-lblv-nol .tp-lblv_l{display:none}.tp-lblv_v{align-self:flex-start;flex-grow:0;flex-shrink:0;width:160px}.tp-lblv.tp-lblv-nol .tp-lblv_v{width:100%}.tp-lstv_s{padding:0 20px 0 4px;width:100%}.tp-lstv_m{color:var(--btn-fg)}.tp-sglv_i{padding:0 4px}.tp-sglv.tp-v-disabled .tp-sglv_i{opacity:.5}.tp-mllv_i{display:block;height:calc(var(--bld-us)*3);line-height:var(--bld-us);padding:0 4px;resize:none;white-space:pre}.tp-mllv.tp-v-disabled .tp-mllv_i{opacity:.5}.tp-p2dv{position:relative}.tp-p2dv_h{display:flex}.tp-p2dv_b{height:var(--bld-us);margin-right:4px;position:relative;width:var(--bld-us)}.tp-p2dv_b svg{display:block;height:16px;left:50%;margin-left:-8px;margin-top:-8px;position:absolute;top:50%;width:16px}.tp-p2dv_b svg path{stroke:currentColor;stroke-width:2}.tp-p2dv_b svg circle{fill:currentColor}.tp-p2dv_t{flex:1}.tp-p2dv_p{height:0;margin-top:0;opacity:0;overflow:hidden;transition:height .2s ease-in-out,opacity .2s linear,margin .2s ease-in-out}.tp-p2dv.tp-p2dv-expanded .tp-p2dv_p{margin-top:var(--bld-s);opacity:1}.tp-p2dv .tp-popv{left:calc(-1*var(--cnt-h-p));right:calc(-1*var(--cnt-h-p));top:var(--bld-us)}.tp-p2dpv{padding-left:calc(var(--bld-us) + 4px)}.tp-p2dpv_p{cursor:crosshair;height:0;overflow:hidden;padding-bottom:100%;position:relative}.tp-p2dpv_g{display:block;height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%}.tp-p2dpv_ax{opacity:.1;stroke:var(--in-fg);stroke-dasharray:1}.tp-p2dpv_l{opacity:.5;stroke:var(--in-fg);stroke-dasharray:1}.tp-p2dpv_m{border:var(--in-fg) solid 1px;border-radius:50%;box-sizing:border-box;height:4px;margin-left:-2px;margin-top:-2px;position:absolute;width:4px}.tp-p2dpv_p:focus .tp-p2dpv_m{background-color:var(--in-fg);border-width:0}.tp-popv{background-color:var(--bs-bg);border-radius:6px;box-shadow:0 2px 4px var(--bs-sh);display:none;max-width:168px;padding:var(--cnt-v-p) var(--cnt-h-p);position:absolute;visibility:hidden;z-index:1000}.tp-popv.tp-popv-v{display:block;visibility:visible}.tp-sprv_r{background-color:var(--grv-fg);border-width:0;display:block;height:2px;margin:0;width:100%}.tp-sldv.tp-v-disabled{opacity:.5}.tp-sldv_t{box-sizing:border-box;cursor:pointer;height:var(--bld-us);margin:0 6px;outline:none;position:relative}.tp-sldv_t::before{background-color:var(--in-bg);border-radius:1px;bottom:0;content:"";display:block;height:2px;left:0;margin:auto;position:absolute;right:0;top:0}.tp-sldv_k{height:100%;left:0;position:absolute;top:0}.tp-sldv_k::before{background-color:var(--in-fg);border-radius:1px;bottom:0;content:"";display:block;height:2px;left:0;margin-bottom:auto;margin-top:auto;position:absolute;right:0;top:0}.tp-sldv_k::after{background-color:var(--btn-bg);border-radius:var(--elm-br);bottom:0;content:"";display:block;height:12px;margin-bottom:auto;margin-top:auto;position:absolute;right:-6px;top:0;width:12px}.tp-sldv_t:hover .tp-sldv_k::after{background-color:var(--btn-bg-h)}.tp-sldv_t:focus .tp-sldv_k::after{background-color:var(--btn-bg-f)}.tp-sldv_t:active .tp-sldv_k::after{background-color:var(--btn-bg-a)}.tp-sldtxtv{display:flex}.tp-sldtxtv_s{flex:2}.tp-sldtxtv_t{flex:1;margin-left:4px}.tp-tabv.tp-v-disabled{opacity:.5}.tp-tabv_i{align-items:flex-end;display:flex;overflow:hidden}.tp-tabv.tp-tabv-nop .tp-tabv_i{height:calc(var(--bld-us) + 4px);position:relative}.tp-tabv.tp-tabv-nop .tp-tabv_i::before{background-color:var(--cnt-bg);bottom:0;content:"";height:2px;left:0;position:absolute;right:0}.tp-tabv_c{border-left:var(--cnt-bg) solid 4px;padding-bottom:var(--cnt-v-p);padding-top:var(--cnt-v-p)}.tp-tbiv{flex:1;min-width:0;position:relative}.tp-tbiv+.tp-tbiv{margin-left:2px}.tp-tbiv+.tp-tbiv::before{background-color:var(--cnt-bg);bottom:0;content:"";height:2px;left:-2px;position:absolute;width:2px}.tp-tbiv_b{background-color:var(--cnt-bg);display:block;padding-left:calc(var(--cnt-h-p) + 4px);padding-right:calc(var(--cnt-h-p) + 4px);width:100%}.tp-tbiv_b:hover{background-color:var(--cnt-bg-h)}.tp-tbiv_b:focus{background-color:var(--cnt-bg-f)}.tp-tbiv_b:active{background-color:var(--cnt-bg-a)}.tp-tbiv_b:disabled{opacity:.5}.tp-tbiv_t{color:var(--cnt-fg);height:calc(var(--bld-us) + 4px);line-height:calc(var(--bld-us) + 4px);opacity:.5;overflow:hidden;text-overflow:ellipsis}.tp-tbiv.tp-tbiv-sel .tp-tbiv_t{opacity:1}.tp-txtv{position:relative}.tp-txtv_i{padding:0 4px}.tp-txtv.tp-txtv-fst .tp-txtv_i{border-bottom-right-radius:0;border-top-right-radius:0}.tp-txtv.tp-txtv-mid .tp-txtv_i{border-radius:0}.tp-txtv.tp-txtv-lst .tp-txtv_i{border-bottom-left-radius:0;border-top-left-radius:0}.tp-txtv.tp-txtv-num .tp-txtv_i{text-align:right}.tp-txtv.tp-txtv-drg .tp-txtv_i{opacity:.3}.tp-txtv_k{cursor:pointer;height:100%;left:-3px;position:absolute;top:0;width:12px}.tp-txtv_k::before{background-color:var(--in-fg);border-radius:1px;bottom:0;content:"";height:calc(var(--bld-us) - 4px);left:50%;margin-bottom:auto;margin-left:-1px;margin-top:auto;opacity:.1;position:absolute;top:0;transition:border-radius .1s,height .1s,transform .1s,width .1s;width:2px}.tp-txtv_k:hover::before,.tp-txtv.tp-txtv-drg .tp-txtv_k::before{opacity:1}.tp-txtv.tp-txtv-drg .tp-txtv_k::before{border-radius:50%;height:4px;transform:translateX(-1px);width:4px}.tp-txtv_g{bottom:0;display:block;height:8px;left:50%;margin:auto;overflow:visible;pointer-events:none;position:absolute;top:0;visibility:hidden;width:100%}.tp-txtv.tp-txtv-drg .tp-txtv_g{visibility:visible}.tp-txtv_gb{fill:none;stroke:var(--in-fg);stroke-dasharray:1}.tp-txtv_gh{fill:none;stroke:var(--in-fg)}.tp-txtv .tp-ttv{margin-left:6px;visibility:hidden}.tp-txtv.tp-txtv-drg .tp-ttv{visibility:visible}.tp-ttv{background-color:var(--in-fg);border-radius:var(--elm-br);color:var(--bs-bg);padding:2px 4px;pointer-events:none;position:absolute;transform:translate(-50%, -100%)}.tp-ttv::before{border-color:var(--in-fg) transparent transparent transparent;border-style:solid;border-width:2px;box-sizing:border-box;content:"";font-size:.9em;height:4px;left:50%;margin-left:-2px;position:absolute;top:100%;width:4px}.tp-rotv{background-color:var(--bs-bg);border-radius:var(--bs-br);box-shadow:0 2px 4px var(--bs-sh);font-family:var(--font-family);font-size:11px;font-weight:500;line-height:1;text-align:left}.tp-rotv_b{border-bottom-left-radius:var(--bs-br);border-bottom-right-radius:var(--bs-br);border-top-left-radius:var(--bs-br);border-top-right-radius:var(--bs-br);padding-left:calc(4px + var(--bld-us) + var(--cnt-h-p));text-align:center}.tp-rotv.tp-rotv-expanded .tp-rotv_b{border-bottom-left-radius:0;border-bottom-right-radius:0}.tp-rotv.tp-rotv-not .tp-rotv_b{display:none}.tp-rotv_c>.tp-fldv.tp-v-lst>.tp-fldv_c,.tp-rotv_c>.tp-tabv.tp-v-lst>.tp-tabv_c{border-bottom-left-radius:var(--bs-br);border-bottom-right-radius:var(--bs-br)}.tp-rotv_c>.tp-fldv.tp-v-lst:not(.tp-fldv-expanded)>.tp-fldv_b{border-bottom-left-radius:var(--bs-br);border-bottom-right-radius:var(--bs-br)}.tp-rotv_c .tp-fldv.tp-v-vlst:not(.tp-fldv-expanded)>.tp-fldv_b{border-bottom-right-radius:var(--bs-br)}.tp-rotv.tp-rotv-not .tp-rotv_c>.tp-fldv.tp-v-fst{margin-top:calc(-1*var(--cnt-v-p))}.tp-rotv.tp-rotv-not .tp-rotv_c>.tp-fldv.tp-v-fst>.tp-fldv_b{border-top-left-radius:var(--bs-br);border-top-right-radius:var(--bs-br)}.tp-rotv.tp-rotv-not .tp-rotv_c>.tp-tabv.tp-v-fst{margin-top:calc(-1*var(--cnt-v-p))}.tp-rotv.tp-rotv-not .tp-rotv_c>.tp-tabv.tp-v-fst>.tp-tabv_i{border-top-left-radius:var(--bs-br);border-top-right-radius:var(--bs-br)}.tp-rotv.tp-v-disabled,.tp-rotv .tp-v-disabled{pointer-events:none}.tp-rotv.tp-v-hidden,.tp-rotv .tp-v-hidden{display:none}'),this.pool_.getAll().forEach((t=>{this.embedPluginStyle_(t)})),this.registerPlugin({plugins:[Gr,zr,It,Yr]})}},t.SeparatorApi=yt,t.SliderApi=Br,t.TabApi=jt,t.TabPageApi=Dt,t.TextApi=Hr,t.TpChangeEvent=i,t.VERSION=Qr,Object.defineProperty(t,"__esModule",{value:!0})}))},{}],9:[function(t,e,n){const i=t("canvas-sketch"),r=t("canvas-sketch-util/random"),o=t("canvas-sketch-util/math"),s=t("tweakpane"),a={animate:!0,frame:0,freq:.001,bg:{r:0,g:0,b:0},fg:{r:255,g:255,b:255,a:1}};(()=>{const t=new s.Pane;let e;e=t.addFolder({title:"Grid"}),e.addInput(a,"bg"),e.addInput(a,"fg"),e=t.addFolder({title:"Noise"}),e.addInput(a,"freq",{min:-.01,max:.01}),e.addInput(a,"animate"),e.addInput(a,"frame",{min:0,max:999})})(),i((()=>({context:t,width:e,height:n,frame:i})=>{t.fillStyle=`rgb(${a.bg.r},${a.bg.g},${a.bg.b})`,t.fillRect(0,0,e,n),t.fillStyle="white";const s=.5*n,l=.01*e,p=.1*n;let c,d,h,u;const v=.8*e;for(let e=0;e<30;e++){const n=o.degToRad(12),m=n*e;c=0+v*Math.sin(m),d=s+v*Math.cos(m);const f=r.noise3D(c,d,a.animate?i:a.frame,a.freq);h=l*o.mapRange(f,-1,1,.1,1.3),u=p*o.mapRange(f,-1,1,.1,1),t.save(),t.translate(c,d),t.rotate(-m),t.scale(o.mapRange(f,-1,1,4,5),o.mapRange(f,-1,1,1,2));const b=`rgba(${a.fg.r},${a.fg.g},${a.fg.b},${a.fg.a})`;t.fillStyle=b,t.beginPath(),t.rect(.5*-h,o.mapRange(f,-1,1,0,.5*-u),h,u),t.fill(),t.restore(),t.save(),t.translate(0,s),t.rotate(-m),t.lineWidth=o.mapRange(f,-1,1,2,15),t.strokeStyle=b,t.beginPath(),t.arc(0,0,v*o.mapRange(f,-1,1,.7,1.2),n*o.mapRange(f,-1,1,.4,-1.5),n*o.mapRange(f,-1,1,.6,3)),t.stroke(),t.restore()}a.animate&&(a.frame=i)}),{dimensions:[1170,2532],animate:!0})},{"canvas-sketch":4,"canvas-sketch-util/math":2,"canvas-sketch-util/random":3,tweakpane:8}],10:[function(t,e,n){(function(t){(function(){t.CANVAS_SKETCH_DEFAULT_STORAGE_KEY=window.location.href}).call(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}]},{},[9,10]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyIiwiZSIsIm4iLCJ0IiwibyIsImkiLCJmIiwiYyIsInJlcXVpcmUiLCJ1IiwiYSIsIkVycm9yIiwiY29kZSIsInAiLCJleHBvcnRzIiwiY2FsbCIsImxlbmd0aCIsIm1vZHVsZSIsInZhbHVlIiwiZnJvbSIsInRvIiwiVHlwZUVycm9yIiwiY3ljbGUiLCJNYXRoIiwiZmxvb3IiLCJkZWZpbmVkIiwid3JhcCIsIkVQU0lMT04iLCJOdW1iZXIiLCJjbGFtcCIsIm1pbiIsIm1heCIsImxlcnAiLCJpbnZlcnNlTGVycCIsImFicyIsInRvRmluaXRlIiwiZGVmYXVsdFZhbHVlIiwiaXNGaW5pdGUiLCJleHBhbmRWZWN0b3IiLCJkaW1zIiwic2NhbGFyIiwib3V0IiwibGVycEFycmF5IiwibmV3QXJyYXkiLCJpbml0aWFsVmFsdWUiLCJwdXNoIiwibW9kIiwiYiIsImRhbXAiLCJsYW1iZGEiLCJkdCIsImV4cCIsImZyYWN0Iiwic2lnbiIsImRlZ1RvUmFkIiwiUEkiLCJyYWRUb0RlZyIsInBpbmdQb25nIiwibGluc3BhY2UiLCJvcHRzIiwiZW5kcG9pbnQiLCJvZmZzZXQiLCJtYXAiLCJfIiwibGVycEZyYW1lcyIsInZhbHVlcyIsImxlbiIsIndob2xlIiwiZnJhbWUiLCJuZXh0RnJhbWUiLCJBcnJheSIsImlzQXJyYXkiLCJjbGFtcDAxIiwidiIsInNtb290aHN0ZXAiLCJ4IiwiZGFtcEFycmF5IiwibWFwUmFuZ2UiLCJpbnB1dE1pbiIsImlucHV0TWF4Iiwib3V0cHV0TWluIiwib3V0cHV0TWF4Iiwib3V0VmFsIiwiZXhwYW5kMkQiLCJleHBhbmQzRCIsImV4cGFuZDREIiwic2VlZFJhbmRvbSIsIlNpbXBsZXhOb2lzZSIsImNyZWF0ZVJhbmRvbSIsImRlZmF1bHRTZWVkIiwiY3VycmVudFNlZWQiLCJjdXJyZW50UmFuZG9tIiwibm9pc2VHZW5lcmF0b3IiLCJkZWZhdWx0UmFuZG9tIiwicmFuZG9tIiwiX25leHRHYXVzc2lhbiIsIl9oYXNOZXh0R2F1c3NpYW4iLCJzZXRTZWVkIiwiZ2V0U2VlZCIsImdldFJhbmRvbVNlZWQiLCJTdHJpbmciLCJ2YWx1ZU5vblplcm8iLCJwZXJtdXRlTm9pc2UiLCJjcmVhdGVOb2lzZSIsIm5vaXNlMUQiLCJmcmVxdWVuY3kiLCJhbXBsaXR1ZGUiLCJub2lzZTJEIiwieSIsIm5vaXNlM0QiLCJ6Iiwibm9pc2U0RCIsInciLCJib29sZWFuIiwiY2hhbmNlIiwicmFuZ2UiLCJyYW5nZUZsb29yIiwicGljayIsImFycmF5Iiwic2h1ZmZsZSIsImFyciIsInJhbmQiLCJ0bXAiLCJyZXQiLCJzbGljZSIsIm9uQ2lyY2xlIiwiaW5zaWRlQ2lyY2xlIiwicmFkaXVzIiwic3FydCIsIm9uU3BoZXJlIiwicGhpIiwidGhldGEiLCJhY29zIiwic2luIiwiY29zIiwiaW5zaWRlU3BoZXJlIiwiayIsImNicnQiLCJxdWF0ZXJuaW9uIiwidTEiLCJ1MiIsInUzIiwic3ExIiwic3EyIiwidGhldGExIiwidGhldGEyIiwid2VpZ2h0ZWQiLCJ3ZWlnaHRlZFNldCIsInNldCIsIndlaWdodGVkU2V0SW5kZXgiLCJnYXVzc2lhbiIsIm1lYW4iLCJzdGFuZGFyZERlcml2YXRpb24iLCJyZXN1bHQiLCJ2MSIsInYyIiwicyIsIm11bHRpcGxpZXIiLCJsb2ciLCJzZWVkIiwib3B0IiwidW5kZWZpbmVkIiwid2VpZ2h0Iiwid2VpZ2h0cyIsInRvdGFsV2VpZ2h0IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJwcm90b3R5cGUiLCJwcm9wSXNFbnVtZXJhYmxlIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ0b09iamVjdCIsInZhbCIsIm9iamVjdEFzc2lnbiIsImFzc2lnbiIsInRlc3QxIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInRlc3QyIiwiZnJvbUNoYXJDb2RlIiwiam9pbiIsInRlc3QzIiwic3BsaXQiLCJmb3JFYWNoIiwibGV0dGVyIiwia2V5cyIsImVyciIsInNob3VsZFVzZU5hdGl2ZSIsInRhcmdldCIsInNvdXJjZSIsInN5bWJvbHMiLCJhcmd1bWVudHMiLCJrZXkiLCJicm93c2VyIiwiY29tbW9uanNHbG9iYWwiLCJwZXJmb3JtYW5jZSIsIm5vdyIsIkRhdGUiLCJpc1Byb21pc2VfMSIsIm9iaiIsInRoZW4iLCJpc0RvbSIsIndpbmRvdyIsIk5vZGUiLCJub2RlVHlwZSIsIm5vZGVOYW1lIiwiZ2V0Q2xpZW50QVBJIiwiYXJndW1lbnRzJDEiLCJpc0Jyb3dzZXIiLCJkb2N1bWVudCIsImNhY2hlIiwic2hpbSIsInN1cHBvcnRzQXJndW1lbnRzQ2xhc3MiLCJ0b1N0cmluZyIsInN1cHBvcnRlZCIsIm9iamVjdCIsInVuc3VwcG9ydGVkIiwicFNsaWNlIiwiZGVlcEVxdWFsIiwiYWN0dWFsIiwiZXhwZWN0ZWQiLCJnZXRUaW1lIiwic3RyaWN0IiwiaXNVbmRlZmluZWRPck51bGwiLCJpc19hcmd1bWVudHMiLCJpc0J1ZmZlciIsImthIiwia2IiLCJzb3J0Iiwib2JqRXF1aXYiLCJjb3B5IiwiZ2xvYmFsIiwidG9rZW4iLCJ0aW1lem9uZSIsInRpbWV6b25lQ2xpcCIsImRhdGVGb3JtYXQiLCJkYXRlIiwibWFzayIsInV0YyIsImdtdCIsImtpbmRPZiIsInRlc3QiLCJpc05hTiIsIm1hc2tTbGljZSIsIm1hc2tzIiwiZCIsIkQiLCJtIiwiSCIsIk0iLCJMIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJXIiwiZ2V0V2VlayIsIk4iLCJnZXREYXlPZldlZWsiLCJmbGFncyIsImRkIiwicGFkIiwiZGRkIiwiaTE4biIsImRheU5hbWVzIiwiZGRkZCIsIm1tIiwibW1tIiwibW9udGhOYW1lcyIsIm1tbW0iLCJ5eSIsInl5eXkiLCJoIiwiaGgiLCJISCIsIk1NIiwic3MiLCJsIiwicm91bmQiLCJ0aW1lTmFtZXMiLCJ0dCIsIlQiLCJUVCIsIloiLCJtYXRjaCIsInBvcCIsInJlcGxhY2UiLCJTIiwidGFyZ2V0VGh1cnNkYXkiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsInNldERhdGUiLCJnZXREYXkiLCJmaXJzdFRodXJzZGF5IiwiZHMiLCJzZXRIb3VycyIsImdldEhvdXJzIiwiZG93IiwidG9Mb3dlckNhc2UiLCJkZWZhdWx0Iiwic2hvcnREYXRlIiwibWVkaXVtRGF0ZSIsImxvbmdEYXRlIiwiZnVsbERhdGUiLCJzaG9ydFRpbWUiLCJtZWRpdW1UaW1lIiwibG9uZ1RpbWUiLCJpc29EYXRlIiwiaXNvVGltZSIsImlzb0RhdGVUaW1lIiwiaXNvVXRjRGF0ZVRpbWUiLCJleHBpcmVzSGVhZGVyRm9ybWF0IiwicmVzIiwicmVwZWF0U3RyaW5nIiwic3RyIiwibnVtIiwic3Vic3RyIiwibGluayIsIm5vb3AiLCJkZWZhdWx0RXh0cyIsImV4dGVuc2lvbiIsInByZWZpeCIsInN1ZmZpeCIsInN1cHBvcnRlZEVuY29kaW5ncyIsInN0cmVhbSIsImlzU3RhcnQiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZpbGVuYW1lIiwicmVzb2x2ZUZpbGVuYW1lIiwiZnVuYyIsImNsaWVudCIsIm91dHB1dCIsImV2Iiwic2F2ZURhdGFVUkwiLCJkYXRhVVJMIiwic3BsaXRJbmRleCIsImluZGV4T2YiLCJiYXNlNjQiLCJieXRlU3RyaW5nIiwiYXRvYiIsInR5cGUiLCJtaW1lTWF0Y2giLCJleGVjIiwibWltZSIsImFiIiwiQXJyYXlCdWZmZXIiLCJpYSIsIlVpbnQ4QXJyYXkiLCJjaGFyQ29kZUF0IiwiQmxvYiIsImNyZWF0ZUJsb2JGcm9tRGF0YVVSTCIsImJsb2IiLCJzYXZlQmxvYiIsImNyZWF0ZUVsZW1lbnQiLCJzdHlsZSIsInZpc2liaWxpdHkiLCJkb3dubG9hZCIsImhyZWYiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJib2R5IiwiYXBwZW5kQ2hpbGQiLCJvbmNsaWNrIiwic2V0VGltZW91dCIsInJldm9rZU9iamVjdFVSTCIsInBhcmVudEVsZW1lbnQiLCJyZW1vdmVDaGlsZCIsInJlbW92ZUF0dHJpYnV0ZSIsImNsaWNrIiwiZmlsZSIsInRvdGFsRnJhbWVzIiwiY2giLCJsYXllclN0ciIsInRvdGFsTGF5ZXJzIiwibGF5ZXIiLCJmaWx0ZXIiLCJCb29sZWFuIiwibmFtZSIsInRpbWVTdGFtcCIsImhhc2giLCJjb21tb25UeXBvcyIsImRpbWVuc2lvbiIsImFuaW1hdGVkIiwiYW5pbWF0aW5nIiwidW5pdCIsIlA1IiwicGl4ZWxsYXRlZCIsImxvb3BpbmciLCJwaXhlbFBlckluY2giLCJhbGxLZXlzIiwiY2hlY2tTZXR0aW5ncyIsInNldHRpbmdzIiwiY29uc29sZSIsIndhcm4iLCJpbmNsdWRlcyIsInBhcGVyU2l6ZXMiLCJyZWR1Y2UiLCJkaWN0IiwicHJlc2V0IiwiaXRlbSIsInVuaXRzIiwiZGltZW5zaW9ucyIsImNvbnZlcnNpb25zIiwic3lzdGVtIiwiZmFjdG9yIiwiY20iLCJwdCIsInBjIiwiaW4iLCJmdCIsImFuY2hvcnMiLCJtZXRyaWMiLCJyYXRpbyIsImltcGVyaWFsIiwiY29udmVydExlbmd0aCIsImZyb21Vbml0IiwidG9Vbml0IiwicGl4ZWxzUGVySW5jaCIsImRlZmluZWQkMSIsInByZWNpc2lvbiIsInJvdW5kUGl4ZWwiLCJ0b0ZhY3RvciIsImZyb21GYWN0b3IiLCJpc1RvUGl4ZWwiLCJmcm9tVW5pdERhdGEiLCJ0b1VuaXREYXRhIiwiYW5jaG9yIiwiZGVjaW1hbHMiLCJjb252ZXJ0RGlzdGFuY2UkMSIsInVuaXRzRnJvbSIsInVuaXRzVG8iLCJyZXNpemVDYW52YXMiLCJwcm9wcyIsIndpZHRoIiwiaGVpZ2h0Iiwic3R5bGVXaWR0aCIsInN0eWxlSGVpZ2h0IiwiY2FudmFzV2lkdGgiLCJjYW52YXNIZWlnaHQiLCJoYXNEaW1lbnNpb25zIiwiY2hlY2tJZkhhc0RpbWVuc2lvbnMiLCJleHBvcnRpbmciLCJzY2FsZVRvRml0Iiwic2NhbGVUb1ZpZXciLCJwaXhlbFJhdGlvIiwiZXhwb3J0UGl4ZWxSYXRpbyIsImJsZWVkIiwiZGV2aWNlUGl4ZWxSYXRpbyIsImJhc2VQaXhlbFJhdGlvIiwibWF4UGl4ZWxSYXRpbyIsInRyaW1XaWR0aCIsInRyaW1IZWlnaHQiLCJyZWYiLCJlbGVtZW50IiwicGFyZW50IiwiaW5uZXJXaWR0aCIsImlubmVySGVpZ2h0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0UGFyZW50U2l6ZSIsInBhcmVudFdpZHRoIiwicGFyZW50SGVpZ2h0IiwiZ2V0RGltZW5zaW9uc0Zyb21QcmVzZXQiLCJoaWdoZXN0IiwibG93ZXN0Iiwib3JpZW50YXRpb24iLCJsYW5kc2NhcGUiLCJyZWFsV2lkdGgiLCJyZWFsSGVpZ2h0IiwiYXNwZWN0Iiwid2luZG93QXNwZWN0Iiwic2NhbGVUb0ZpdFBhZGRpbmciLCJtYXhXaWR0aCIsIm1heEhlaWdodCIsImdldENhbnZhc0NvbnRleHRfMSIsImNhbnZhcyIsImdsIiwiYXR0cmlicyIsIm5hbWVzIiwiZ2V0Q29udGV4dCIsImNyZWF0ZUNhbnZhcyIsImNvbnRleHQiLCJvd25zQ2FudmFzIiwibmV3Q2FudmFzIiwiY3JlYXRlQ2FudmFzRWxlbWVudCIsImF0dHJpYnV0ZXMiLCJwaXhlbGF0ZWQiLCJpbWFnZVNtb290aGluZ0VuYWJsZWQiLCJtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQiLCJvSW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwid2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwibXNJbWFnZVNtb290aGluZ0VuYWJsZWQiLCJTa2V0Y2hNYW5hZ2VyIiwiX3NldHRpbmdzIiwiX3Byb3BzIiwiX3NrZXRjaCIsIl9yYWYiLCJfcmVjb3JkVGltZW91dCIsIl9sYXN0UmVkcmF3UmVzdWx0IiwiX2lzUDVSZXNpemluZyIsIl9rZXlib2FyZFNob3J0Y3V0cyIsImhhbmRsZXIiLCJlbmFibGVkIiwia2V5Q29kZSIsImFsdEtleSIsIm1ldGFLZXkiLCJjdHJsS2V5IiwidG9nZ2xlUGxheSIsInByZXZlbnREZWZhdWx0IiwiY29tbWl0Iiwic2F2ZSIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwia2V5Ym9hcmRTaG9ydGN1dHMiLCJ0aGlzJDEiLCJob3RrZXlzIiwic2hpZnRLZXkiLCJyZWNvcmRpbmciLCJlbmRSZWNvcmQiLCJydW4iLCJyZWNvcmQiLCJleHBvcnRGcmFtZSIsInBsYXlpbmciLCJwYXVzZSIsInBsYXkiLCJfYW5pbWF0ZUhhbmRsZXIiLCJhbmltYXRlIiwiX3Jlc2l6ZUhhbmRsZXIiLCJyZXNpemUiLCJyZW5kZXIiLCJza2V0Y2giLCJnZXQiLCJ0aGlzIiwiX2NvbXB1dGVQbGF5aGVhZCIsImN1cnJlbnRUaW1lIiwiZHVyYXRpb24iLCJfY29tcHV0ZUZyYW1lIiwicGxheWhlYWQiLCJ0aW1lIiwiZnBzIiwiX2NvbXB1dGVDdXJyZW50RnJhbWUiLCJfZ2V0U2l6ZVByb3BzIiwidmlld3BvcnRXaWR0aCIsInZpZXdwb3J0SGVpZ2h0IiwiZGlzcG9zZSIsInN0YXJ0ZWQiLCJfc2lnbmFsQmVnaW4iLCJ0aWNrIiwiX2NhbmNlbFRpbWVvdXRzIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJfbGFzdFRpbWUiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJlcnJvciIsInN0b3AiLCJkZWx0YVRpbWUiLCJleHBvcnRPcHRzIiwiX2NyZWF0ZUV4cG9ydE9wdGlvbnMiLCJmcmFtZUludGVydmFsIiwiX3NpZ25hbEVuZCIsImJlZ2luUmVjb3JkIiwiX3dyYXBDb250ZXh0U2NhbGUiLCJjYXRjaCIsInJlc3BvbnNlIiwiYmVnaW4iLCJlbmQiLCJ3YXNSZWNvcmRpbmciLCJzZXF1ZW5jZSIsImVuY29kaW5nIiwiZW5jb2RpbmdRdWFsaXR5IiwiZGF0ZWZvcm1hdCIsImFsbCIsInByZUV4cG9ydCIsImNvbW1pdE9wdHMiLCJfZG9FeHBvcnRGcmFtZSIsImRyYXdSZXN1bHQiLCJjb25jYXQiLCJoYXNEYXRhT2JqZWN0IiwiZGF0YSIsInRvRGF0YVVSTCIsImV4cG9ydENhbnZhcyIsImxheWVyTGlzdCIsImN1ck9wdCIsInNhdmVQYXJhbSIsInNhdmVQcm9taXNlIiwicGFydHMiLCJzYXZlRmlsZSIsInNhdmVSZXN1bHQiLCJzYXZlZEV2ZW50cyIsImV2ZW50V2l0aE91dHB1dCIsImZpbmQiLCJvdXRwdXROYW1lIiwiaXNDbGllbnQiLCJzb21lIiwiaXNTdHJlYW1pbmciLCJvZlNlcSIsInBvc3RFeHBvcnQiLCJjYiIsIl9wcmVSZW5kZXIiLCJfcG9zdFJlbmRlciIsInA1Iiwic2NhbGUiLCJzY2FsZVgiLCJzY2FsZVkiLCJzY2FsZUNvbnRleHQiLCJyZXN0b3JlIiwiZmx1c2giLCJyZWRyYXciLCJzdWJtaXREcmF3Q2FsbCIsInVwZGF0ZSIsIm5vdFlldFN1cHBvcnRlZCIsIm9sZENhbnZhcyIsIm9sZENvbnRleHQiLCJ0aW1lT3B0cyIsInRpbWVQcm9wcyIsImdldFRpbWVQcm9wcyIsIl9zZXR1cEdMS2V5IiwiX2FwcGVuZENhbnZhc0lmTmVlZGVkIiwiZHJhdyIsIm9sZFNpemVzIiwibmV3UHJvcHMiLCJwaXhlbERlbnNpdHkiLCJzdHlsZUNhbnZhcyIsIm5ld1NpemVzIiwiY2hhbmdlZCIsImRlZXBFcXVhbF8xIiwiX3NpemVDaGFuZ2VkIiwiZnJhbWVJbnRlcnZhbE1TIiwiZGVsdGFUaW1lTVMiLCJoYXNEdXJhdGlvbiIsImlzTmV3RnJhbWUiLCJwbGF5YmFja1JhdGUiLCJuZXdUaW1lIiwidGltZVNjYWxlIiwiaXNGaW5pc2hlZCIsImlzTG9vcFN0YXJ0IiwibG9vcCIsImxhc3RGcmFtZSIsImRpc3BhdGNoIiwibW91bnQiLCJ1bm1vdW50IiwiZGV0YWNoIiwiY3R4IiwiY2xlYXIiLCJjbGVhckNvbG9yIiwiYnVmZmVyRGF0YSIsImhhc1RvdGFsRnJhbWVzIiwidG90YWxGcmFtZXNGcm9tRHVyYXRpb24iLCJkdXJhdGlvbkZyb21Ub3RhbEZyYW1lcyIsIkluZmluaXR5Iiwic3RhcnRUaW1lIiwic3RhcnRGcmFtZSIsImhhc1N0YXJ0VGltZSIsImhhc1N0YXJ0RnJhbWUiLCJzZXR1cCIsImxvYWRBbmRSdW4iLCJjYW52YXNTa2V0Y2giLCJuZXdTZXR0aW5ncyIsImxvYWQiLCJ1bmxvYWQiLCJkZXN0cm95IiwiY3JlYXRlU2tldGNoIiwicHJlbG9hZCIsIlA1Q29uc3RydWN0b3IiLCJwNVNrZXRjaCIsImlzR0wiLCJyZW5kZXJlciIsIldFQkdMIiwiUDJEIiwibm9Mb29wIiwic2V0QXR0cmlidXRlcyIsIl9yZW5kZXJlciIsImRyYXdpbmdDb250ZXh0IiwibG9hZGVyIiwiYXR0YWNoIiwibWVzc2FnZSIsIkNBQ0hFIiwicnVudGltZUNvbGxpc2lvbnMiLCJob3RJRCIsImlzSG90IiwiaG90IiwiaWQiLCJpc0luamVjdGluZyIsInByZXZpb3VzRGF0YSIsImNhY2hlR2V0IiwibmV4dCIsIm9sZE1hbmFnZXIiLCJtYW5hZ2VyIiwiY2FjaGVQdXQiLCJQYXBlclNpemVzIiwicG9vbCIsIkdMT0JBTCIsInN0YXJ0ZGVub20iLCJwb3ciLCJzaWduaWZpY2FuY2UiLCJvdmVyZmxvdyIsIm9sZFJhbmRvbSIsIkFSQzQiLCJrZXlsZW4iLCJtZSIsImoiLCJnIiwiY291bnQiLCJmbGF0dGVuIiwiZGVwdGgiLCJwcm9wIiwidHlwIiwibWl4a2V5Iiwic21lYXIiLCJzdHJpbmdzZWVkIiwidG9zdHJpbmciLCJhdXRvc2VlZCIsImNyeXB0byIsImdldFJhbmRvbVZhbHVlcyIsIm5hdmlnYXRvciIsInBsdWdpbnMiLCJzY3JlZW4iLCJhcHBseSIsIm9wdGlvbnMiLCJ1c2VfZW50cm9weSIsImVudHJvcHkiLCJhcmM0IiwicmVzZXRHbG9iYWwiLCJGMiIsIkcyIiwiRzMiLCJGNCIsIkc0IiwicmFuZG9tT3JTZWVkIiwiczAiLCJzMSIsInMyIiwibWFzaCIsIm1hc2hlciIsImFsZWEiLCJidWlsZFBlcm11dGF0aW9uVGFibGUiLCJwZXJtIiwicGVybU1vZDEyIiwiYXV4IiwiZ3JhZDMiLCJGbG9hdDMyQXJyYXkiLCJncmFkNCIsInhpbiIsInlpbiIsImkxIiwiajEiLCJuMCIsIm4xIiwibjIiLCJ4MCIsInkwIiwieDEiLCJ5MSIsIngyIiwieTIiLCJpaSIsImpqIiwidDAiLCJnaTAiLCJ0MSIsImdpMSIsInQyIiwiZ2kyIiwiemluIiwibjMiLCJrMSIsImkyIiwiajIiLCJrMiIsInowIiwiejEiLCJ6MiIsIngzIiwieTMiLCJ6MyIsImtrIiwidDMiLCJnaTMiLCJuNCIsImwxIiwibDIiLCJpMyIsImozIiwiazMiLCJsMyIsIncwIiwicmFua3giLCJyYW5reSIsInJhbmt6IiwicmFua3ciLCJ3MSIsIncyIiwidzMiLCJ4NCIsInk0IiwiejQiLCJ3NCIsImxsIiwidDQiLCJnaTQiLCJfYnVpbGRQZXJtdXRhdGlvblRhYmxlIiwiZGVmaW5lIiwiYW1kIiwiZmFjdG9yeSIsImdsb2JhbFRoaXMiLCJzZWxmIiwiVHdlYWtwYW5lIiwiQmxhZGVBcGkiLCJjb25zdHJ1Y3RvciIsImNvbnRyb2xsZXIiLCJjb250cm9sbGVyXyIsInZpZXciLCJkaXNhYmxlZCIsInZpZXdQcm9wcyIsImhpZGRlbiIsIlRwRXZlbnQiLCJUcENoYW5nZUV2ZW50IiwicHJlc2V0S2V5IiwibGFzdCIsInN1cGVyIiwiVHBVcGRhdGVFdmVudCIsIlRwRm9sZEV2ZW50IiwiZXhwYW5kZWQiLCJUcFRhYlNlbGVjdEV2ZW50IiwiaW5kZXgiLCJpc0VtcHR5IiwiZGVlcEVxdWFsc0FycmF5IiwiYTEiLCJhMiIsIkNSRUFURV9NRVNTQUdFX01BUCIsImFscmVhZHlkaXNwb3NlZCIsImludmFsaWRwYXJhbXMiLCJub21hdGNoaW5nY29udHJvbGxlciIsIm5vbWF0Y2hpbmd2aWV3IiwiSlNPTiIsInN0cmluZ2lmeSIsInBhcmFtcyIsIm5vdGJpbmRhYmxlIiwicHJvcGVydHlub3Rmb3VuZCIsInNob3VsZG5ldmVyaGFwcGVuIiwiVHBFcnJvciIsImNvbmZpZyIsIl9hIiwic3RhY2siLCJzdGF0aWMiLCJCaW5kaW5nVGFyZ2V0Iiwib3B0X2lkIiwib2JqXyIsImtleV8iLCJwcmVzZXRLZXlfIiwicmVhZCIsIndyaXRlIiwid3JpdGVQcm9wZXJ0eSIsInZhbHVlT2JqIiwiaXNCaW5kYWJsZSIsIm5vdEJpbmRhYmxlIiwicHJvcGVydHlOb3RGb3VuZCIsIkJ1dHRvbkFwaSIsImxhYmVsIiwidGl0bGUiLCJ2YWx1ZUNvbnRyb2xsZXIiLCJvbiIsImV2ZW50TmFtZSIsImJoIiwiYmluZCIsImVtaXR0ZXIiLCJFbWl0dGVyIiwib2JzZXJ2ZXJzXyIsIm9ic2VydmVycyIsIm9mZiIsIm9ic2VydmVyIiwiZW1pdCIsImV2ZW50IiwiUFJFRklYIiwiQ2xhc3NOYW1lIiwidmlld05hbWUiLCJvcHRfZWxlbWVudE5hbWUiLCJvcHRfbW9kaWZpZXIiLCJleHRyYWN0VmFsdWUiLCJyYXdWYWx1ZSIsImJpbmRWYWx1ZSIsImFwcGx5VmFsdWUiLCJoMSIsImgyIiwiaW5wdXQiLCJiaW5kVmFsdWVNYXAiLCJ2YWx1ZU1hcCIsInZhbHVlVG9DbGFzc05hbWUiLCJlbGVtIiwiY2xhc3NOYW1lIiwiYWN0aXZlIiwiY2xhc3NMaXN0IiwiYWRkIiwicmVtb3ZlIiwiYXBwbHlDbGFzcyIsImJpbmRWYWx1ZVRvVGV4dENvbnRlbnQiLCJ0ZXh0IiwidGV4dENvbnRlbnQiLCJjbGFzc05hbWUkcSIsIkJ1dHRvblZpZXciLCJkb2MiLCJiaW5kQ2xhc3NNb2RpZmllcnMiLCJidXR0b25FbGVtIiwiYmluZERpc2FibGVkIiwiYnV0dG9uRWxlbWVudCIsInRpdGxlRWxlbSIsIkJ1dHRvbkNvbnRyb2xsZXIiLCJvbkNsaWNrXyIsInNlbmRlciIsIkJvdW5kVmFsdWUiLCJjb25zdHJhaW50XyIsImNvbnN0cmFpbnQiLCJlcXVhbHNfIiwiZXF1YWxzIiwicmF3VmFsdWVfIiwic2V0UmF3VmFsdWUiLCJmb3JjZUVtaXQiLCJjb25zdHJhaW5lZFZhbHVlIiwiY29uc3RyYWluIiwiUHJpbWl0aXZlVmFsdWUiLCJ2YWx1ZV8iLCJjcmVhdGVWYWx1ZSIsIlZhbHVlTWFwIiwidmFsTWFwXyIsImNvcmUiLCJjcmVhdGVDb3JlIiwiY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlciIsInBhcnNlIiwib3B0aW9uYWwiLCJzdWNjZWVkZWQiLCJjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVycyIsImN1c3RvbSIsIm51bWJlciIsInN0cmluZyIsImZ1bmN0aW9uIiwiY29uc3RhbnQiLCJyYXciLCJrZXlUb1BhcnNlck1hcCIsInBhcnNlciIsInBhcnNlT2JqZWN0IiwiaXRlbVBhcnNlciIsInBhcnNlSXRlbSIsIlBhcmFtc1BhcnNlcnMiLCJyZXF1aXJlZCIsInBhcnNlUGFyYW1zIiwiY2xhc3NOYW1lJHAiLCJQT1NfVE9fQ0xBU1NfTkFNRV9NQVAiLCJ2ZXJ5Zmlyc3QiLCJmaXJzdCIsInZlcnlsYXN0IiwiQmxhZGVDb250cm9sbGVyIiwicGFyZW50XyIsImJsYWRlIiwicG9zIiwiaGFuZGxlRGlzcG9zZSIsImRpc3Bvc2VFbGVtZW50IiwiU1ZHX05TIiwic3VwcG9ydHNUb3VjaCIsIm9udG91Y2hzdGFydCIsImdldFdpbmRvd0RvY3VtZW50IiwiRnVuY3Rpb24iLCJJQ09OX0lEX1RPX0lOTkVSX0hUTUxfTUFQIiwiY2hlY2siLCJkcm9wZG93biIsInAyZHBhZCIsImNyZWF0ZVN2Z0ljb25FbGVtZW50IiwiaWNvbklkIiwiY3JlYXRlRWxlbWVudE5TIiwiaW5uZXJIVE1MIiwiaW5zZXJ0RWxlbWVudEF0IiwiaW5zZXJ0QmVmb3JlIiwiY2hpbGRyZW4iLCJyZW1vdmVFbGVtZW50IiwicmVtb3ZlQ2hpbGRFbGVtZW50cyIsImZpbmROZXh0VGFyZ2V0IiwicmVsYXRlZFRhcmdldCIsImV4cGxpY2l0T3JpZ2luYWxUYXJnZXQiLCJjbGFzc05hbWUkbyIsIkxhYmVsVmlldyIsImxhYmVsRWxlbSIsImNoaWxkTm9kZXMiLCJyZW1vdmVDaGlsZE5vZGVzIiwiZnJhZyIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJsaW5lIiwiY3JlYXRlVGV4dE5vZGUiLCJsaW5lTm9kZSIsImNyZWF0ZUxhYmVsTm9kZSIsImxhYmVsRWxlbWVudCIsInZhbHVlRWxlbSIsInZhbHVlRWxlbWVudCIsIkxhYmVsQ29udHJvbGxlciIsIkJ1dHRvbkJsYWRlUGx1Z2luIiwiYWNjZXB0IiwiYXJncyIsImZyb21PYmplY3QiLCJhcGkiLCJWYWx1ZUJsYWRlQ29udHJvbGxlciIsImNyZWF0ZUJsYWRlIiwicG9zaXRpb25zIiwiRm9sZGFibGUiLCJjb21wbGV0ZWQiLCJleHBhbmRlZEhlaWdodCIsInNob3VsZEZpeEhlaWdodCIsInRlbXBvcmFyeUV4cGFuZGVkIiwic3R5bGVFeHBhbmRlZCIsImV4SGVpZ2h0IiwiYmluZEV4cGFuZGVkQ2xhc3MiLCJleHBhbmRlZENsYXNzTmFtZSIsIm9uRXhwYW5kIiwiY2xlYW5VcFRyYW5zaXRpb24iLCJhcHBseUhlaWdodCIsImZvbGRhYmxlIiwiYmluZEZvbGRhYmxlIiwiZm9sZGVyIiwiY29udGFpbmVyRWxlbWVudCIsImNhbGxiYWNrIiwidHJhbnNpdGlvbiIsImRpc2FibGVUcmFuc2l0aW9uVGVtcG9yYXJpbHkiLCJjbGllbnRIZWlnaHQiLCJjb21wdXRlRXhwYW5kZWRGb2xkZXJIZWlnaHQiLCJwcm9wZXJ0eU5hbWUiLCJSYWNrTGlrZUFwaSIsInJhY2tBcGkiLCJyYWNrQXBpXyIsIk5lc3RlZE9yZGVyZWRTZXQiLCJleHRyYWN0IiwiaXRlbXNfIiwiY2FjaGVfIiwiU2V0Iiwib25TdWJMaXN0QWRkXyIsIm9uU3ViTGlzdFJlbW92ZV8iLCJleHRyYWN0XyIsIml0ZW1zIiwiYWxsSXRlbXMiLCJoYXMiLCJvcHRfaW5kZXgiLCJzaG91bGROZXZlckhhcHBlbiIsInNwbGljZSIsInN1Ykxpc3QiLCJyb290IiwiZGVsZXRlIiwiSW5wdXRCaW5kaW5nQXBpIiwib25CaW5kaW5nQ2hhbmdlXyIsImVtaXR0ZXJfIiwiYmluZGluZyIsInJlZnJlc2giLCJJbnB1dEJpbmRpbmdDb250cm9sbGVyIiwiTW9uaXRvckJpbmRpbmdBcGkiLCJvbkJpbmRpbmdVcGRhdGVfIiwiTW9uaXRvckJpbmRpbmdDb250cm9sbGVyIiwidGlja2VyIiwiZmluZFN1YkJsYWRlQXBpU2V0IiwiUmFja0FwaSIsImdldEFwaUJ5Q29udHJvbGxlciIsImFwaVNldCIsImNyZWF0ZUJpbmRpbmdUYXJnZXQiLCJvblJhY2tBZGRfIiwib25SYWNrUmVtb3ZlXyIsIm9uUmFja0lucHV0Q2hhbmdlXyIsIm9uUmFja01vbml0b3JVcGRhdGVfIiwiYXBpU2V0XyIsInBvb2xfIiwicmFjayIsImJjIiwic2V0VXBBcGlfIiwiYWRkSW5wdXQiLCJvcHRfcGFyYW1zIiwiY3JlYXRlSW5wdXQiLCJvd25lckRvY3VtZW50IiwiYWRkTW9uaXRvciIsImNyZWF0ZU1vbml0b3IiLCJhZGRGb2xkZXIiLCJhZGRCbGFkZSIsImFkZEZvbGRlckFzQmxhZGUiLCJhZGRCdXR0b24iLCJhZGRCdXR0b25Bc0JsYWRlIiwiYWRkU2VwYXJhdG9yIiwiYWRkU2VwYXJhdG9yQXNCbGFkZSIsImFkZFRhYiIsImFkZFRhYkFzQmxhZGUiLCJnYXBpIiwiY3JlYXRlQmxhZGVBcGkiLCJibGFkZUNvbnRyb2xsZXIiLCJpc1Jvb3QiLCJGb2xkZXJBcGkiLCJyYWNrQ29udHJvbGxlciIsIlJhY2tMaWtlQ29udHJvbGxlciIsIlBsYWluVmlldyIsImZpbmRTdWJSYWNrIiwiUmFja0NvbnRyb2xsZXIiLCJmaW5kU3ViQmxhZGVDb250cm9sbGVyU2V0IiwiQmxhZGVSYWNrIiwib25CbGFkZVBvc2l0aW9uc0NoYW5nZV8iLCJvblNldEFkZF8iLCJvblNldFJlbW92ZV8iLCJvbkNoaWxkRGlzcG9zZV8iLCJvbkNoaWxkUG9zaXRpb25zQ2hhbmdlXyIsIm9uQ2hpbGRJbnB1dENoYW5nZV8iLCJvbkNoaWxkTW9uaXRvclVwZGF0ZV8iLCJvbkNoaWxkVmFsdWVDaGFuZ2VfIiwib25DaGlsZFZpZXdQcm9wc0NoYW5nZV8iLCJvbkRlc2NlbmRhbnRMYXlvdXRfIiwib25EZXNjZW5kYW50SW5wdXRDaGFuZ2VfIiwib25EZXNjZW5kYW50TW9uaXRvclVwZGF0ZV8iLCJibGFkZV8iLCJiY1NldF8iLCJjb250cm9sbGVyQ2xhc3MiLCJ1cGRhdGVQb3NpdGlvbnNfIiwidmlzaWJsZUl0ZW1zIiwiZmlyc3RWaXNpYmxlSXRlbSIsImxhc3RWaXNpYmxlSXRlbSIsInBzIiwiX2V2IiwiYmNzIiwiZmluZElucHV0QmluZGluZ0NvbnRyb2xsZXIiLCJmaW5kTW9uaXRvckJpbmRpbmdDb250cm9sbGVyIiwiZmluZFZhbHVlQmxhZGVDb250cm9sbGVyIiwiYmxhZGVDb250YWluZXJDbGFzc05hbWUiLCJGb2xkZXJWaWV3IiwiY2xhc3NOYW1lXyIsImZvbGRhYmxlXyIsInRpdGxlRWxlbWVudCIsIm1hcmtFbGVtIiwiY29udGFpbmVyRWxlbSIsIkZvbGRlckNvbnRyb2xsZXIiLCJjcmVhdGUiLCJyYyIsIm9uVGl0bGVDbGlja18iLCJGb2xkZXJCbGFkZVBsdWdpbiIsIkxhYmVsZWRWYWx1ZUNvbnRyb2xsZXIiLCJTZXBhcmF0b3JBcGkiLCJjbGFzc05hbWUkbiIsIlNlcGFyYXRvclZpZXciLCJockVsZW0iLCJTZXBhcmF0b3JDb250cm9sbGVyIiwiU2VwYXJhdG9yQmxhZGVQbHVnaW4iLCJjbGFzc05hbWUkbSIsInZhbHVlVG9Nb2RpZmllciIsIm1vZGlmaWVyIiwiVmlld1Byb3BzIiwib3B0X2luaXRpYWxWYWx1ZSIsIl9iIiwiY29yZU9iaiIsImRpc3Bvc2VkIiwiYmluZFRhYkluZGV4IiwidGFiSW5kZXgiLCJjbGFzc05hbWUkbCIsIlRhYkl0ZW1WaWV3Iiwic2VsZWN0ZWQiLCJUYWJJdGVtQ29udHJvbGxlciIsIlRhYlBhZ2VDb250cm9sbGVyIiwib25JdGVtQ2xpY2tfIiwiaWNfIiwiaXRlbVByb3BzIiwiY2NfIiwiaXRlbUNvbnRyb2xsZXIiLCJjb250ZW50Q29udHJvbGxlciIsIlRhYlBhZ2VBcGkiLCJjb250ZW50UmFja0FwaSIsIlRhYkFwaSIsIm9uUGFnZUFkZF8iLCJvblBhZ2VSZW1vdmVfIiwib25TZWxlY3RfIiwicGFnZUFwaU1hcF8iLCJNYXAiLCJ0YWIiLCJzZWxlY3RlZEluZGV4IiwicGFnZVNldCIsInNldFVwUGFnZUFwaV8iLCJwYWdlcyIsImFkZFBhZ2UiLCJyZW1vdmVQYWdlIiwiVGFiIiwib25JdGVtU2VsZWN0ZWRDaGFuZ2VfIiwiZW1wdHkiLCJrZWVwU2VsZWN0aW9uXyIsImZpcnN0U2VsSW5kZXgiLCJmaW5kSW5kZXgiLCJjbGFzc05hbWUkayIsIlRhYlZpZXciLCJpdGVtc0VsZW0iLCJpdGVtc0VsZW1lbnQiLCJjb250ZW50c0VsZW0iLCJjb250ZW50c0VsZW1lbnQiLCJUYWJDb250cm9sbGVyIiwiY3IiLCJwYWdlU2V0XyIsIlRhYkJsYWRlUGx1Z2luIiwiTWFudWFsVGlja2VyIiwiSW50ZXJ2YWxUaWNrZXIiLCJpbnRlcnZhbCIsImRpc2FibGVkXyIsInRpbWVySWRfIiwib25UaWNrXyIsImRvY18iLCJpbnRlcnZhbF8iLCJzZXRUaW1lcl8iLCJpbmFjdGl2ZSIsImNsZWFyVGltZXJfIiwid2luIiwiZGVmYXVsdFZpZXciLCJjbGVhckludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJDb21wb3NpdGVDb25zdHJhaW50IiwiY29uc3RyYWludHMiLCJmaW5kQ29uc3RyYWludCIsImNvbnN0cmFpbnRDbGFzcyIsInRtcFJlc3VsdCIsInNjIiwiTGlzdENvbnN0cmFpbnQiLCJSYW5nZUNvbnN0cmFpbnQiLCJtYXhWYWx1ZSIsIm1pblZhbHVlIiwiU3RlcENvbnN0cmFpbnQiLCJzdGVwIiwib3JpZ2luIiwiY2xhc3NOYW1lJGoiLCJMaXN0VmlldyIsIm9uVmFsdWVDaGFuZ2VfIiwicHJvcHNfIiwic2VsZWN0RWxlbSIsIm9wdGlvbkVsZW0iLCJkYXRhc2V0Iiwic2VsZWN0RWxlbWVudCIsInVwZGF0ZV8iLCJMaXN0Q29udHJvbGxlciIsIm9uU2VsZWN0Q2hhbmdlXyIsIm9wdEVsZW0iLCJjdXJyZW50VGFyZ2V0Iiwic2VsZWN0ZWRPcHRpb25zIiwiaXRlbUluZGV4IiwiY2xhc3NOYW1lJGkiLCJQb3B1cFZpZXciLCJzaG93cyIsIlBvcHVwQ29udHJvbGxlciIsImNsYXNzTmFtZSRoIiwiVGV4dFZpZXciLCJvbkNoYW5nZV8iLCJpbnB1dEVsZW0iLCJpbnB1dEVsZW1lbnQiLCJmb3JtYXR0ZXIiLCJUZXh0Q29udHJvbGxlciIsIm9uSW5wdXRDaGFuZ2VfIiwicGFyc2VyXyIsInBhcnNlZFZhbHVlIiwiYm9vbEZyb21Vbmtub3duIiwiQm9vbGVhbkZvcm1hdHRlciIsImJvb2xUb1N0cmluZyIsIk51bWJlckxpdGVyYWxOb2RlIiwiZXZhbHVhdGUiLCJCSU5BUllfT1BFUkFUSU9OX01BUCIsIkJpbmFyeU9wZXJhdGlvbk5vZGUiLCJvcGVyYXRvciIsImxlZnQiLCJyaWdodCIsIm9wIiwiVU5BUllfT1BFUkFUSU9OX01BUCIsIlVuYXJ5T3BlcmF0aW9uTm9kZSIsImV4cHIiLCJleHByZXNzaW9uIiwiY29tYmluZVJlYWRlciIsInBhcnNlcnMiLCJjdXJzb3IiLCJyZWFkV2hpdGVzcGFjZSIsInJlYWREZWNpbWFsRGlnaXRzIiwicmVhZEV4cG9uZW50UGFydCIsInNpIiwic2RzIiwicmVhZFNpZ25lZEludGVnZXIiLCJyZWFkRGVjaW1hbEludGVnZXJMaXRlcmFsIiwibnpkIiwicmVhZE5vblplcm9EaWdpdCIsInJlYWREZWNpbWFsTGl0ZXJhbCIsImRpbCIsImRvdCIsImRkcyIsInJlYWROb25EZWNpbWFsSW50ZWdlckxpdGVyYWwiLCJiZHMiLCJwYXJzZUJpbmFyeURpZ2l0cyIsIm9kcyIsInJlYWRPY3RhbERpZ2l0cyIsImhkcyIsInJlYWRIZXhEaWdpdHMiLCJyZWFkTnVtZXJpY0xpdGVyYWwiLCJwYXJzZVByaW1hcnlFeHByZXNzaW9uIiwiZXZhbHVhYmxlIiwicGFyc2VMaXRlcmFsIiwicGFyc2VFeHByZXNzaW9uIiwiY2wiLCJwYXJzZVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uIiwicmVhZEJpbmFyeU9wZXJhdG9yIiwib3BzIiwic3RhcnRzV2l0aCIsInBhcnNlQmluYXJ5T3BlcmF0aW9uRXhwcmVzc2lvbiIsImV4cHJQYXJzZXIiLCJmaXJzdEV4cHIiLCJuZXh0RXhwciIsImNyZWF0ZUJpbmFyeU9wZXJhdGlvbkV4cHJlc3Npb25QYXJzZXIiLCJwYXJzZVVuYXJ5RXhwcmVzc2lvbiIsInBhcnNlTnVtYmVyIiwicGFyc2VFY21hTnVtYmVyRXhwcmVzc2lvbiIsIm51bWJlckZyb21Vbmtub3duIiwicHYiLCJudW1iZXJUb1N0cmluZyIsImNyZWF0ZU51bWJlckZvcm1hdHRlciIsImRpZ2l0cyIsInRvRml4ZWQiLCJpbm5lckZvcm1hdHRlciIsImZvcm1hdFBlcmNlbnRhZ2UiLCJzdHJpbmdGcm9tVW5rbm93biIsImZvcm1hdFN0cmluZyIsImZpbGxCdWZmZXIiLCJidWZmZXIiLCJidWZmZXJTaXplIiwiaW5pdGlhbGl6ZUJ1ZmZlciIsImNyZWF0ZVRyaW1tZWRCdWZmZXIiLCJjb25uZWN0VmFsdWVzIiwicHJpbWFyeSIsInNlY29uZGFyeSIsImZvcndhcmQiLCJiYWNrd2FyZCIsImNoYW5naW5nIiwicHJldmVudEZlZWRiYWNrIiwiZ2V0U3RlcEZvcktleSIsImJhc2VTdGVwIiwidXBLZXkiLCJkb3duS2V5IiwiZ2V0VmVydGljYWxTdGVwS2V5cyIsImdldEhvcml6b250YWxTdGVwS2V5cyIsImlzQXJyb3dLZXkiLCJpc1ZlcnRpY2FsQXJyb3dLZXkiLCJjb21wdXRlT2Zmc2V0JDEiLCJyZWN0IiwicGFnZVgiLCJzY3JvbGxYIiwicGFnZVkiLCJzY3JvbGxZIiwidG9wIiwiUG9pbnRlckhhbmRsZXIiLCJsYXN0VG91Y2hfIiwib25Eb2N1bWVudE1vdXNlTW92ZV8iLCJvbkRvY3VtZW50TW91c2VVcF8iLCJvbk1vdXNlRG93bl8iLCJvblRvdWNoRW5kXyIsIm9uVG91Y2hNb3ZlXyIsIm9uVG91Y2hTdGFydF8iLCJlbGVtXyIsInBhc3NpdmUiLCJjb21wdXRlUG9zaXRpb25fIiwiYm91bmRzIiwicG9pbnQiLCJmb2N1cyIsInRvdWNoIiwidGFyZ2V0VG91Y2hlcyIsImNsaWVudFgiLCJjbGllbnRZIiwic3RhcnQxIiwiZW5kMSIsInN0YXJ0MiIsImVuZDIiLCJnZXREZWNpbWFsRGlnaXRzIiwiY29uc3RyYWluUmFuZ2UiLCJsb29wUmFuZ2UiLCJjbGFzc05hbWUkZyIsIk51bWJlclRleHRWaWV3IiwiYXJyYXlQb3NpdGlvbiIsIm9uRHJhZ2dpbmdDaGFuZ2VfIiwiZHJhZ2dpbmdfIiwiZHJhZ2dpbmciLCJrbm9iRWxlbSIsImtub2JFbGVtZW50IiwiZ3VpZGVFbGVtIiwiYm9keUVsZW0iLCJndWlkZUJvZHlFbGVtXyIsImhlYWRFbGVtIiwiZ3VpZGVIZWFkRWxlbV8iLCJ0b29sdGlwRWxlbSIsInRvb2x0aXBFbGVtXyIsImFveCIsImFkeCIsInNldEF0dHJpYnV0ZU5TIiwiTnVtYmVyVGV4dENvbnRyb2xsZXIiLCJvcmlnaW5SYXdWYWx1ZV8iLCJvbklucHV0S2V5RG93bl8iLCJvbklucHV0S2V5VXBfIiwib25Qb2ludGVyRG93bl8iLCJvblBvaW50ZXJNb3ZlXyIsIm9uUG9pbnRlclVwXyIsImJhc2VTdGVwXyIsInNsaWRlclByb3BzXyIsInNsaWRlclByb3BzIiwicGgiLCJjb25zdHJhaW5WYWx1ZV8iLCJjb21wdXRlRHJhZ2dpbmdWYWx1ZV8iLCJjbGFzc05hbWUkZiIsIlNsaWRlclZpZXciLCJ0cmFja0VsZW0iLCJ0cmFja0VsZW1lbnQiLCJTbGlkZXJDb250cm9sbGVyIiwib25LZXlEb3duXyIsIm9uS2V5VXBfIiwib25Qb2ludGVyRG93bk9yTW92ZV8iLCJwdEhhbmRsZXJfIiwiaGFuZGxlUG9pbnRlckV2ZW50XyIsImNsYXNzTmFtZSRlIiwiU2xpZGVyVGV4dFZpZXciLCJzbGlkZXJFbGVtIiwic2xpZGVyVmlld18iLCJzbGlkZXJWaWV3IiwidGV4dEVsZW0iLCJ0ZXh0Vmlld18iLCJ0ZXh0VmlldyIsIlNsaWRlclRleHRDb250cm9sbGVyIiwic2xpZGVyQ18iLCJ0ZXh0Q18iLCJ0ZXh0UHJvcHMiLCJzbGlkZXJDb250cm9sbGVyIiwidGV4dENvbnRyb2xsZXIiLCJ3cml0ZVByaW1pdGl2ZSIsInBhcnNlTGlzdE9wdGlvbnMiLCJwYXJzZVBpY2tlckxheW91dCIsInBhcnNlUG9pbnREaW1lbnNpb25QYXJhbXMiLCJub3JtYWxpemVMaXN0T3B0aW9ucyIsImNyZWF0ZUxpc3RDb25zdHJhaW50IiwiZmluZExpc3RJdGVtcyIsImdldFN1aXRhYmxlRGVjaW1hbERpZ2l0cyIsImdldEJhc2VTdGVwIiwiZmluZFN0ZXAiLCJnZXRTdWl0YWJsZURyYWdnaW5nU2NhbGUiLCJiYXNlIiwibG9nMTAiLCJjbGFzc05hbWUkZCIsIkNoZWNrYm94VmlldyIsIndyYXBwZXJFbGVtIiwiY2hlY2tlZCIsIkNoZWNrYm94Q29udHJvbGxlciIsIkJvb2xlYW5JbnB1dFBsdWdpbiIsInJlYWRlciIsIl9hcmdzIiwibGMiLCJjcmVhdGVDb25zdHJhaW50JDYiLCJ3cml0ZXIiLCJjbGFzc05hbWUkYyIsIkNvbG9yVmlldyIsInN3YXRjaEVsZW0iLCJzd2F0Y2hFbGVtZW50IiwidGV4dEVsZW1lbnQiLCJwaWNrZXJMYXlvdXQiLCJwaWNrZXJFbGVtIiwicGlja2VyRWxlbWVudCIsImhzdlRvUmdiSW50IiwiaHAiLCJzcCIsInZwIiwicnAiLCJncCIsImJwIiwicmVtb3ZlQWxwaGFDb21wb25lbnQiLCJjb21wcyIsImFwcGVuZEFscGhhQ29tcG9uZW50IiwiYWxwaGEiLCJNT0RFX0NPTlZFUlRFUl9NQVAiLCJoc2wiLCJoc3YiLCJzZCIsInJnYiIsImxwIiwiY21heCIsImNtaW4iLCJnZXRDb2xvck1heENvbXBvbmVudHMiLCJtb2RlIiwiY29udmVydENvbG9yVHlwZSIsImZtcyIsInRtcyIsImlzUmdiQ29sb3JDb21wb25lbnQiLCJDb2xvciIsImNvbXBzXyIsImNvbXBvbmVudHMiLCJtcyIsImNvbnN0cmFpbkNvbG9yQ29tcG9uZW50cyIsImNvbG9yIiwidG9SZ2JhT2JqZWN0IiwiaXNSZ2JDb2xvck9iamVjdCIsImNvbXBzMSIsImNvbXBzMiIsImdldENvbXBvbmVudHMiLCJvcHRfbW9kZSIsImludENvbXBzIiwiY29udmVydENvbG9yIiwicmdiQ29tcHMiLCJjbGFzc05hbWUkYiIsIkNvbG9yUGlja2VyVmlldyIsImFscGhhVmlld3NfIiwiaHN2RWxlbSIsInN2RWxlbSIsInN2UGFsZXR0ZVZpZXdfIiwic3ZQYWxldHRlVmlldyIsImhFbGVtIiwiaFBhbGV0dGVWaWV3XyIsImhQYWxldHRlVmlldyIsInJnYkVsZW0iLCJhbHBoYVZpZXdzIiwicGFsZXR0ZSIsImFFbGVtIiwiYXBFbGVtIiwiYXRFbGVtIiwiYWxsRm9jdXNhYmxlRWxlbWVudHMiLCJlbGVtcyIsIm1vZGVTZWxlY3RFbGVtZW50IiwidGV4dFZpZXdzIiwicGFyc2VDb2xvclR5cGUiLCJwYXJzZUNvbG9ySW5wdXRQYXJhbXMiLCJwaWNrZXIiLCJnZXRCYXNlU3RlcEZvckNvbG9yIiwiZm9yQWxwaGEiLCJleHRyYWN0Q29sb3JUeXBlIiwicGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UiLCJwYXJzZUZsb2F0IiwiQU5HTEVfVE9fREVHX01BUCIsImRlZyIsImFuZ2xlIiwiZ3JhZCIsInJhZCIsInR1cm4iLCJwYXJzZUNzc051bWJlck9yQW5nbGUiLCJwYXJzZUZ1bmN0aW9uYWxSZ2JDb2xvckNvbXBvbmVudHMiLCJjcmVhdGVGdW5jdGlvbmFsUmdiQ29sb3JQYXJzZXIiLCJwYXJzZUZ1bmN0aW9uYWxSZ2JhQ29sb3JDb21wb25lbnRzIiwiY3JlYXRlRnVuY3Rpb25hbFJnYmFDb2xvclBhcnNlciIsInBhcnNlSHNsQ29sb3JDb21wb25lbnRzIiwiY3JlYXRlSHNsQ29sb3JQYXJzZXIiLCJwYXJzZUhzbGFDb2xvckNvbXBvbmVudHMiLCJjcmVhdGVIc2xhQ29sb3JQYXJzZXIiLCJwYXJzZUhleFJnYkNvbG9yQ29tcG9uZW50cyIsIm1SZ2IiLCJwYXJzZUludCIsIm1ScmdnYmIiLCJwYXJzZUhleFJnYmFDb2xvckNvbXBvbmVudHMiLCJwYXJzZU9iamVjdFJnYkNvbG9yQ29tcG9uZW50cyIsImNyZWF0ZU9iamVjdFJnYkNvbG9yUGFyc2VyIiwicGFyc2VPYmplY3RSZ2JhQ29sb3JDb21wb25lbnRzIiwiY3JlYXRlT2JqZWN0UmdiYUNvbG9yUGFyc2VyIiwiUEFSU0VSX0FORF9SRVNVTFQiLCJub3RhdGlvbiIsImRldGVjdFN0cmluZ0NvbG9yRm9ybWF0IiwicHJldiIsImRldGVjdGlvbiIsImRldGVjdFN0cmluZ0NvbG9yIiwiVFlQRV9UT19QQVJTRVJTIiwiaW50IiwiZmxvYXQiLCJjcmVhdGVDb2xvclN0cmluZ1BhcnNlciIsInplcm9maWxsIiwiY29tcCIsImhleCIsImNvbG9yVG9IZXhSZ2JTdHJpbmciLCJjb2xvclRvSGV4UmdiYVN0cmluZyIsInJnYmFDb21wcyIsImNvbG9yVG9GdW5jdGlvbmFsUmdiU3RyaW5nIiwib3B0X3R5cGUiLCJjcmVhdGVGdW5jdGlvbmFsUmdiQ29sb3JGb3JtYXR0ZXIiLCJjb2xvclRvRnVuY3Rpb25hbFJnYmFTdHJpbmciLCJhRm9ybWF0dGVyIiwicmdiRm9ybWF0dGVyIiwiY3JlYXRlRnVuY3Rpb25hbFJnYmFDb2xvckZvcm1hdHRlciIsImNvbG9yVG9PYmplY3RSZ2JTdHJpbmciLCJjcmVhdGVPYmplY3RSZ2JDb2xvckZvcm1hdHRlciIsImNvbG9yVG9PYmplY3RSZ2JhU3RyaW5nIiwiY3JlYXRlT2JqZWN0UmdiYUNvbG9yRm9ybWF0dGVyIiwiRk9STUFUX0FORF9TVFJJTkdJRklFUlMiLCJmb3JtYXQiLCJzdHJpbmdpZmllciIsImZvcm1hdHRlcnMiLCJmaW5kQ29sb3JTdHJpbmdpZmllciIsImZhcyIsImYxIiwiZjIiLCJjbGFzc05hbWUkYSIsIkFQYWxldHRlVmlldyIsImJhckVsZW0iLCJjb2xvckVsZW0iLCJjb2xvckVsZW1fIiwibWFya2VyRWxlbSIsIm1hcmtlckVsZW1fIiwicHJldmlld0VsZW0iLCJwcmV2aWV3RWxlbV8iLCJsZWZ0Q29sb3IiLCJyaWdodENvbG9yIiwiZ3JhZGllbnRDb21wcyIsImJhY2tncm91bmQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJBUGFsZXR0ZUNvbnRyb2xsZXIiLCJjbGFzc05hbWUkOSIsIkNvbG9yVGV4dFZpZXciLCJtb2RlRWxlbSIsIm1vZGVFbGVtXyIsImNyZWF0ZU1vZGVTZWxlY3RFbGVtZW50IiwibW9kZU1hcmtlckVsZW0iLCJ0ZXh0c0VsZW0iLCJ0ZXh0c0VsZW1fIiwidGV4dFZpZXdzXyIsImFwcGx5VGV4dFZpZXdzXyIsImNvbG9yTW9kZSIsImNvbXBFbGVtIiwiY3JlYXRlQ29uc3RyYWludCQ1IiwiY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlciIsImRyYWdnaW5nU2NhbGUiLCJjb2xvclR5cGUiLCJDb2xvclRleHRDb250cm9sbGVyIiwib25Nb2RlU2VsZWN0Q2hhbmdlXyIsImNvbG9yVHlwZV8iLCJjY3NfIiwiY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcnNfIiwiY2MiLCJjY3MiLCJjcyIsInBpY2tlZE1vZGUiLCJjbGFzc05hbWUkOCIsIkhQYWxldHRlVmlldyIsIkhQYWxldHRlQ29udHJvbGxlciIsImh1ZSIsImNsYXNzTmFtZSQ3IiwiU3ZQYWxldHRlVmlldyIsImNhbnZhc0VsZW0iLCJjYW52YXNFbGVtZW50IiwiZ2V0Q2FudmFzQ29udGV4dCIsImhzdkNvbXBzIiwiaW1nRGF0YSIsImdldEltYWdlRGF0YSIsIml5IiwiaXgiLCJwdXRJbWFnZURhdGEiLCJTdlBhbGV0dGVDb250cm9sbGVyIiwic2F0dXJhdGlvbiIsImR2IiwiQ29sb3JQaWNrZXJDb250cm9sbGVyIiwiaFBhbGV0dGVDXyIsInN2UGFsZXR0ZUNfIiwiYWxwaGFJY3NfIiwic3VwcG9ydHNBbHBoYSIsImNsYXNzTmFtZSQ2IiwiQ29sb3JTd2F0Y2hWaWV3Iiwic3dhdGNoRWxlbV8iLCJDb2xvclN3YXRjaENvbnRyb2xsZXIiLCJDb2xvckNvbnRyb2xsZXIiLCJvbkJ1dHRvbkJsdXJfIiwib25CdXR0b25DbGlja18iLCJvblBvcHVwQ2hpbGRCbHVyXyIsIm9uUG9wdXBDaGlsZEtleWRvd25fIiwic3dhdGNoQ18iLCJwb3BDXyIsInBpY2tlckMiLCJwaWNrZXJDXyIsIm5leHRUYXJnZXQiLCJjb250YWlucyIsImNvbG9yVG9SZ2JOdW1iZXIiLCJjb2xvclRvUmdiYU51bWJlciIsImNvbG9yRnJvbVJnYk51bWJlciIsImJsYWNrIiwiY29sb3JGcm9tUmdiYU51bWJlciIsInNob3VsZFN1cHBvcnRBbHBoYSQxIiwiaW5wdXRQYXJhbXMiLCJjcmVhdGVGb3JtYXR0ZXIkMSIsIk51bWJlckNvbG9ySW5wdXRQbHVnaW4iLCJpc0ZvckNvbG9yIiwiY29sb3JUb051bWJlciIsImNyZWF0ZUNvbG9yTnVtYmVyV3JpdGVyIiwiY3JlYXRlQ29sb3JPYmplY3RSZWFkZXIiLCJpc0NvbG9yT2JqZWN0IiwiY29sb3JGcm9tT2JqZWN0IiwiY3JlYXRlQ29sb3JPYmplY3RGb3JtYXR0ZXIiLCJPYmplY3RDb2xvcklucHV0UGx1Z2luIiwiY3JlYXRlQ29sb3JPYmplY3RXcml0ZXIiLCJpc1JnYmFDb2xvck9iamVjdCIsImluVmFsdWUiLCJ3cml0ZVJnYmFDb2xvck9iamVjdCIsIndyaXRlUmdiQ29sb3JPYmplY3QiLCJTdHJpbmdDb2xvcklucHV0UGx1Z2luIiwiY3JlYXRlQ29sb3JTdHJpbmdCaW5kaW5nUmVhZGVyIiwiY3JlYXRlQ29sb3JTdHJpbmdXcml0ZXIiLCJQb2ludE5kQ29uc3RyYWludCIsImFzbV8iLCJhc3NlbWJseSIsInRvQ29tcG9uZW50cyIsImZyb21Db21wb25lbnRzIiwiY2xhc3NOYW1lJDUiLCJQb2ludE5kVGV4dFZpZXciLCJheGlzRWxlbSIsIlBvaW50TmRUZXh0Q29udHJvbGxlciIsImFjc18iLCJheGVzIiwiY3JlYXRlQXhpc0NvbnRyb2xsZXIiLCJhYyIsImNyZWF0ZVN0ZXBDb25zdHJhaW50IiwiY3JlYXRlUmFuZ2VDb25zdHJhaW50IiwiZXN0aW1hdGVTdWl0YWJsZVJhbmdlIiwiZmluZFJhbmdlIiwiTnVtYmVySW5wdXRQbHVnaW4iLCJjcmVhdGVDb25zdHJhaW50JDQiLCJQb2ludDJkIiwiUG9pbnQyZEFzc2VtYmx5IiwiY2xhc3NOYW1lJDQiLCJQb2ludDJkVmlldyIsImNsYXNzTmFtZSQzIiwiUG9pbnQyZFBpY2tlclZpZXciLCJvbkZvbGRhYmxlQ2hhbmdlXyIsImludmVydHNZXyIsImludmVydHNZIiwibWF4VmFsdWVfIiwibGF5b3V0IiwicGFkRWxlbSIsInBhZEVsZW1lbnQiLCJzdmdFbGVtIiwic3ZnRWxlbV8iLCJ4QXhpc0VsZW0iLCJ5QXhpc0VsZW0iLCJsaW5lRWxlbSIsImxpbmVFbGVtXyIsInB4IiwicHkiLCJpcHkiLCJjb21wdXRlT2Zmc2V0IiwiYmFzZVN0ZXBzIiwiUG9pbnQyZFBpY2tlckNvbnRyb2xsZXIiLCJvblBhZEtleURvd25fIiwib25QYWRLZXlVcF8iLCJiYXNlU3RlcHNfIiwiZHgiLCJkeSIsIlBvaW50MmRDb250cm9sbGVyIiwib25QYWRCdXR0b25CbHVyXyIsIm9uUGFkQnV0dG9uQ2xpY2tfIiwicGFkQyIsInBvaW50MmRGcm9tVW5rbm93biIsImlzT2JqZWN0Iiwid3JpdGVQb2ludDJkIiwiY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCIsInJzIiwiZ2V0U3VpdGFibGVNYXhEaW1lbnNpb25WYWx1ZSIsImdldFN1aXRhYmxlTWF4VmFsdWUiLCJ5YyIsInhyIiwieXIiLCJjcmVhdGVBeGlzJDIiLCJzaG91bGRJbnZlcnRZIiwieVBhcmFtcyIsImludmVydGVkIiwiUG9pbnQyZElucHV0UGx1Z2luIiwiY3JlYXRlQ29uc3RyYWludCQzIiwiUG9pbnQzZCIsIlBvaW50M2RBc3NlbWJseSIsInBvaW50M2RGcm9tVW5rbm93biIsIndyaXRlUG9pbnQzZCIsImNyZWF0ZUF4aXMkMSIsIlBvaW50M2RJbnB1dFBsdWdpbiIsImNyZWF0ZUNvbnN0cmFpbnQkMiIsIlBvaW50NGQiLCJQb2ludDRkQXNzZW1ibHkiLCJwb2ludDRkRnJvbVVua25vd24iLCJ3cml0ZVBvaW50NGQiLCJQb2ludDRkSW5wdXRQbHVnaW4iLCJjcmVhdGVDb25zdHJhaW50JDEiLCJjcmVhdGVBeGlzIiwiU3RyaW5nSW5wdXRQbHVnaW4iLCJjcmVhdGVDb25zdHJhaW50IiwiQ29uc3RhbnRzIiwiZGVmYXVsdEludGVydmFsIiwiZGVmYXVsdExpbmVDb3VudCIsImNsYXNzTmFtZSQyIiwiTXVsdGlMb2dWaWV3Iiwib25WYWx1ZVVwZGF0ZV8iLCJmb3JtYXR0ZXJfIiwidGV4dGFyZWFFbGVtIiwibGluZUNvdW50IiwicmVhZE9ubHkiLCJ0ZXh0YXJlYUVsZW1fIiwic2hvdWxkU2Nyb2xsIiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwibGluZXMiLCJNdWx0aUxvZ0NvbnRyb2xsZXIiLCJjbGFzc05hbWUkMSIsIlNpbmdsZUxvZ1ZpZXciLCJsYXN0VmFsdWUiLCJTaW5nbGVMb2dDb250cm9sbGVyIiwiQm9vbGVhbk1vbml0b3JQbHVnaW4iLCJHcmFwaExvZ1ZpZXciLCJvbkN1cnNvckNoYW5nZV8iLCJjdXJzb3JfIiwiZ3JhcGhFbGVtZW50IiwibWF4SW5kZXgiLCJwb2ludHMiLCJ0eCIsInR5IiwiR3JhcGhMb2dDb250cm9sbGVyIiwib25HcmFwaE1vdXNlTW92ZV8iLCJvbkdyYXBoTW91c2VMZWF2ZV8iLCJvbkdyYXBoUG9pbnRlckRvd25fIiwib25HcmFwaFBvaW50ZXJNb3ZlXyIsIm9uR3JhcGhQb2ludGVyVXBfIiwib2Zmc2V0WCIsImNyZWF0ZUZvcm1hdHRlciIsInNob3VsZFNob3dHcmFwaCIsIk51bWJlck1vbml0b3JQbHVnaW4iLCJkZWZhdWx0QnVmZmVyU2l6ZSIsIl9jIiwiY3JlYXRlR3JhcGhNb25pdG9yIiwiY3JlYXRlVGV4dE1vbml0b3IiLCJTdHJpbmdNb25pdG9yUGx1Z2luIiwibXVsdGlsaW5lIiwiSW5wdXRCaW5kaW5nIiwidGFyZ2V0VmFsdWUiLCJ3cml0ZV8iLCJNb25pdG9yQmluZGluZyIsInJlYWRlcl8iLCJuZXdWYWx1ZSIsIm5ld0J1ZmZlciIsImNyZWF0ZVB1c2hlZEJ1ZmZlciIsImNyZWF0ZVRpY2tlciIsIlBsdWdpblBvb2wiLCJwbHVnaW5zTWFwXyIsImJsYWRlcyIsImlucHV0cyIsIm1vbml0b3JzIiwiZ2V0QWxsIiwicmVnaXN0ZXIiLCJ1bnNoaWZ0IiwicGx1Z2luIiwidmFsdWVBcmdzIiwiY3JlYXRlSW5wdXRCaW5kaW5nQ29udHJvbGxlciIsIlAiLCJjcmVhdGVNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIiLCJjcmVhdGVCbGFkZUNvbnRyb2xsZXIiLCJMaXN0QXBpIiwiU2xpZGVyQXBpIiwiVGV4dEFwaSIsIkxpc3RCbGFkZVBsdWdpbiIsImljIiwiUm9vdEFwaSIsImltcG9ydFByZXNldCIsInRhcmdldHMiLCJpbXBvcnRQcmVzZXRKc29uIiwiaWJjIiwiZXhwb3J0UHJlc2V0IiwiZXhwb3J0UHJlc2V0SnNvbiIsIm1iYyIsIlJvb3RDb250cm9sbGVyIiwiU2xpZGVyQmxhZGVQbHVnaW4iLCJ2YyIsIlRleHRCbGFkZVBsdWdpbiIsImVtYmVkU3R5bGUiLCJjc3MiLCJxdWVyeVNlbGVjdG9yIiwic3R5bGVFbGVtIiwidHBTdHlsZSIsImhlYWQiLCJWRVJTSU9OIiwicHJlcmVsZWFzZSIsImNvcmVDb21wcyIsIm1ham9yIiwibWlub3IiLCJwYXRjaCIsIlBhbmUiLCJvcHRfY29uZmlnIiwiY3JlYXRlRGVmYXVsdFBsdWdpblBvb2wiLCJjb250YWluZXJFbGVtXyIsImNvbnRhaW5lciIsImNyZWF0ZURlZmF1bHRXcmFwcGVyRWxlbWVudCIsInVzZXNEZWZhdWx0V3JhcHBlcl8iLCJzZXRVcERlZmF1bHRQbHVnaW5zXyIsImFscmVhZHlEaXNwb3NlZCIsInBhcmVudEVsZW0iLCJyZWdpc3RlclBsdWdpbiIsImJ1bmRsZSIsImVtYmVkUGx1Z2luU3R5bGVfIiwiZGVmaW5lUHJvcGVydHkiLCJtYXRoIiwiVHdlYWtQYW5lIiwiZnJlcSIsImJnIiwiZmciLCJwYW5lIiwiY3JlYXRlUGFuZSIsImZpbGxTdHlsZSIsImZpbGxSZWN0IiwiY3kiLCJjdyIsInRyYW5zbGF0ZSIsInJvdGF0ZSIsImJlZ2luUGF0aCIsImZpbGwiLCJsaW5lV2lkdGgiLCJzdHJva2VTdHlsZSIsImFyYyIsInN0cm9rZSIsIkNBTlZBU19TS0VUQ0hfREVGQVVMVF9TVE9SQUdFX0tFWSIsImxvY2F0aW9uIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2xpYi9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC1jbGkvbm9kZV9tb2R1bGVzL2Jyb3dzZXItcGFjay9fcHJlbHVkZS5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL3dyYXAuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL21hdGguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL3JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9yaWdodC1ub3cvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2lzLXByb21pc2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9pcy1kb20vaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi91dGlsLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvcmVwZWF0LXN0cmluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RlZXAtZXF1YWwvbGliL2tleXMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9kZWVwLWVxdWFsL2xpYi9pc19hcmd1bWVudHMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9kZWVwLWVxdWFsL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZGF0ZWZvcm1hdC9saWIvZGF0ZWZvcm1hdC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL3BhZC1sZWZ0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvc2F2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2FjY2Vzc2liaWxpdHkuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9wYXBlci1zaXplcy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2NvbnZlcnQtbGVuZ3RoL2NvbnZlcnQtbGVuZ3RoLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZGVmaW5lZC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2Rpc3RhbmNlcy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2NvcmUvcmVzaXplQ2FudmFzLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZ2V0LWNhbnZhcy1jb250ZXh0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvY29yZS9jcmVhdGVDYW52YXMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jb3JlL1NrZXRjaE1hbmFnZXIuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jb3JlL2tleWJvYXJkU2hvcnRjdXRzLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvY2FudmFzLXNrZXRjaC5qcyIsIm5vZGVfbW9kdWxlcy9kZWZpbmVkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NlZWQtcmFuZG9tL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NpbXBsZXgtbm9pc2Uvc2ltcGxleC1ub2lzZS5qcyIsIm5vZGVfbW9kdWxlcy90d2Vha3BhbmUvZGlzdC90d2Vha3BhbmUuanMiLCJza2V0Y2gtMDEuanMiLCJjYW52YXMtc2tldGNoLWNsaS9pbmplY3RlZC9zdG9yYWdlLWtleS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24oKXtmdW5jdGlvbiByKGUsbix0KXtmdW5jdGlvbiBvKGksZil7aWYoIW5baV0pe2lmKCFlW2ldKXt2YXIgYz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFmJiZjKXJldHVybiBjKGksITApO2lmKHUpcmV0dXJuIHUoaSwhMCk7dmFyIGE9bmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIitpK1wiJ1wiKTt0aHJvdyBhLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsYX12YXIgcD1uW2ldPXtleHBvcnRzOnt9fTtlW2ldWzBdLmNhbGwocC5leHBvcnRzLGZ1bmN0aW9uKHIpe3ZhciBuPWVbaV1bMV1bcl07cmV0dXJuIG8obnx8cil9LHAscC5leHBvcnRzLHIsZSxuLHQpfXJldHVybiBuW2ldLmV4cG9ydHN9Zm9yKHZhciB1PVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUsaT0wO2k8dC5sZW5ndGg7aSsrKW8odFtpXSk7cmV0dXJuIG99cmV0dXJuIHJ9KSgpIiwibW9kdWxlLmV4cG9ydHMgPSB3cmFwO1xuZnVuY3Rpb24gd3JhcCAodmFsdWUsIGZyb20sIHRvKSB7XG4gIGlmICh0eXBlb2YgZnJvbSAhPT0gJ251bWJlcicgfHwgdHlwZW9mIHRvICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ011c3Qgc3BlY2lmeSBcInRvXCIgYW5kIFwiZnJvbVwiIGFyZ3VtZW50cyBhcyBudW1iZXJzJyk7XG4gIH1cbiAgLy8gYWxnb3JpdGhtIGZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNTg1MjYyOC81OTk4ODRcbiAgaWYgKGZyb20gPiB0bykge1xuICAgIHZhciB0ID0gZnJvbTtcbiAgICBmcm9tID0gdG87XG4gICAgdG8gPSB0O1xuICB9XG4gIHZhciBjeWNsZSA9IHRvIC0gZnJvbTtcbiAgaWYgKGN5Y2xlID09PSAwKSB7XG4gICAgcmV0dXJuIHRvO1xuICB9XG4gIHJldHVybiB2YWx1ZSAtIGN5Y2xlICogTWF0aC5mbG9vcigodmFsdWUgLSBmcm9tKSAvIGN5Y2xlKTtcbn1cbiIsInZhciBkZWZpbmVkID0gcmVxdWlyZSgnZGVmaW5lZCcpO1xudmFyIHdyYXAgPSByZXF1aXJlKCcuL2xpYi93cmFwJyk7XG52YXIgRVBTSUxPTiA9IE51bWJlci5FUFNJTE9OO1xuXG5mdW5jdGlvbiBjbGFtcCAodmFsdWUsIG1pbiwgbWF4KSB7XG4gIHJldHVybiBtaW4gPCBtYXhcbiAgICA/ICh2YWx1ZSA8IG1pbiA/IG1pbiA6IHZhbHVlID4gbWF4ID8gbWF4IDogdmFsdWUpXG4gICAgOiAodmFsdWUgPCBtYXggPyBtYXggOiB2YWx1ZSA+IG1pbiA/IG1pbiA6IHZhbHVlKTtcbn1cblxuZnVuY3Rpb24gY2xhbXAwMSAodikge1xuICByZXR1cm4gY2xhbXAodiwgMCwgMSk7XG59XG5cbmZ1bmN0aW9uIGxlcnAgKG1pbiwgbWF4LCB0KSB7XG4gIHJldHVybiBtaW4gKiAoMSAtIHQpICsgbWF4ICogdDtcbn1cblxuZnVuY3Rpb24gaW52ZXJzZUxlcnAgKG1pbiwgbWF4LCB0KSB7XG4gIGlmIChNYXRoLmFicyhtaW4gLSBtYXgpIDwgRVBTSUxPTikgcmV0dXJuIDA7XG4gIGVsc2UgcmV0dXJuICh0IC0gbWluKSAvIChtYXggLSBtaW4pO1xufVxuXG5mdW5jdGlvbiBzbW9vdGhzdGVwIChtaW4sIG1heCwgdCkge1xuICB2YXIgeCA9IGNsYW1wKGludmVyc2VMZXJwKG1pbiwgbWF4LCB0KSwgMCwgMSk7XG4gIHJldHVybiB4ICogeCAqICgzIC0gMiAqIHgpO1xufVxuXG5mdW5jdGlvbiB0b0Zpbml0ZSAobiwgZGVmYXVsdFZhbHVlKSB7XG4gIGRlZmF1bHRWYWx1ZSA9IGRlZmluZWQoZGVmYXVsdFZhbHVlLCAwKTtcbiAgcmV0dXJuIHR5cGVvZiBuID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShuKSA/IG4gOiBkZWZhdWx0VmFsdWU7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZFZlY3RvciAoZGltcykge1xuICBpZiAodHlwZW9mIGRpbXMgIT09ICdudW1iZXInKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBkaW1zIGFyZ3VtZW50Jyk7XG4gIHJldHVybiBmdW5jdGlvbiAocCwgZGVmYXVsdFZhbHVlKSB7XG4gICAgZGVmYXVsdFZhbHVlID0gZGVmaW5lZChkZWZhdWx0VmFsdWUsIDApO1xuICAgIHZhciBzY2FsYXI7XG4gICAgaWYgKHAgPT0gbnVsbCkge1xuICAgICAgLy8gTm8gdmVjdG9yLCBjcmVhdGUgYSBkZWZhdWx0IG9uZVxuICAgICAgc2NhbGFyID0gZGVmYXVsdFZhbHVlO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHAgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHApKSB7XG4gICAgICAvLyBFeHBhbmQgc2luZ2xlIGNoYW5uZWwgdG8gbXVsdGlwbGUgdmVjdG9yXG4gICAgICBzY2FsYXIgPSBwO1xuICAgIH1cblxuICAgIHZhciBvdXQgPSBbXTtcbiAgICB2YXIgaTtcbiAgICBpZiAoc2NhbGFyID09IG51bGwpIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBkaW1zOyBpKyspIHtcbiAgICAgICAgb3V0W2ldID0gdG9GaW5pdGUocFtpXSwgZGVmYXVsdFZhbHVlKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZm9yIChpID0gMDsgaSA8IGRpbXM7IGkrKykge1xuICAgICAgICBvdXRbaV0gPSBzY2FsYXI7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGxlcnBBcnJheSAobWluLCBtYXgsIHQsIG91dCkge1xuICBvdXQgPSBvdXQgfHwgW107XG4gIGlmIChtaW4ubGVuZ3RoICE9PSBtYXgubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbWluIGFuZCBtYXggYXJyYXkgYXJlIGV4cGVjdGVkIHRvIGhhdmUgdGhlIHNhbWUgbGVuZ3RoJyk7XG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtaW4ubGVuZ3RoOyBpKyspIHtcbiAgICBvdXRbaV0gPSBsZXJwKG1pbltpXSwgbWF4W2ldLCB0KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBuZXdBcnJheSAobiwgaW5pdGlhbFZhbHVlKSB7XG4gIG4gPSBkZWZpbmVkKG4sIDApO1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBuIGFyZ3VtZW50IHRvIGJlIGEgbnVtYmVyJyk7XG4gIHZhciBvdXQgPSBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBuOyBpKyspIG91dC5wdXNoKGluaXRpYWxWYWx1ZSk7XG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIGxpbnNwYWNlIChuLCBvcHRzKSB7XG4gIG4gPSBkZWZpbmVkKG4sIDApO1xuICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBuIGFyZ3VtZW50IHRvIGJlIGEgbnVtYmVyJyk7XG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdib29sZWFuJykge1xuICAgIG9wdHMgPSB7IGVuZHBvaW50OiB0cnVlIH07XG4gIH1cbiAgdmFyIG9mZnNldCA9IGRlZmluZWQob3B0cy5vZmZzZXQsIDApO1xuICBpZiAob3B0cy5lbmRwb2ludCkge1xuICAgIHJldHVybiBuZXdBcnJheShuKS5tYXAoZnVuY3Rpb24gKF8sIGkpIHtcbiAgICAgIHJldHVybiBuIDw9IDEgPyAwIDogKChpICsgb2Zmc2V0KSAvIChuIC0gMSkpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBuZXdBcnJheShuKS5tYXAoZnVuY3Rpb24gKF8sIGkpIHtcbiAgICAgIHJldHVybiAoaSArIG9mZnNldCkgLyBuO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIGxlcnBGcmFtZXMgKHZhbHVlcywgdCwgb3V0KSB7XG4gIHQgPSBjbGFtcCh0LCAwLCAxKTtcblxuICB2YXIgbGVuID0gdmFsdWVzLmxlbmd0aCAtIDE7XG4gIHZhciB3aG9sZSA9IHQgKiBsZW47XG4gIHZhciBmcmFtZSA9IE1hdGguZmxvb3Iod2hvbGUpO1xuICB2YXIgZnJhY3QgPSB3aG9sZSAtIGZyYW1lO1xuXG4gIHZhciBuZXh0RnJhbWUgPSBNYXRoLm1pbihmcmFtZSArIDEsIGxlbik7XG4gIHZhciBhID0gdmFsdWVzW2ZyYW1lICUgdmFsdWVzLmxlbmd0aF07XG4gIHZhciBiID0gdmFsdWVzW25leHRGcmFtZSAlIHZhbHVlcy5sZW5ndGhdO1xuICBpZiAodHlwZW9mIGEgPT09ICdudW1iZXInICYmIHR5cGVvZiBiID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBsZXJwKGEsIGIsIGZyYWN0KTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGEpICYmIEFycmF5LmlzQXJyYXkoYikpIHtcbiAgICByZXR1cm4gbGVycEFycmF5KGEsIGIsIGZyYWN0LCBvdXQpO1xuICB9IGVsc2Uge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ01pc21hdGNoIGluIHZhbHVlIHR5cGUgb2YgdHdvIGFycmF5IGVsZW1lbnRzOiAnICsgZnJhbWUgKyAnIGFuZCAnICsgbmV4dEZyYW1lKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtb2QgKGEsIGIpIHtcbiAgcmV0dXJuICgoYSAlIGIpICsgYikgJSBiO1xufVxuXG5mdW5jdGlvbiBkZWdUb1JhZCAobikge1xuICByZXR1cm4gbiAqIE1hdGguUEkgLyAxODA7XG59XG5cbmZ1bmN0aW9uIHJhZFRvRGVnIChuKSB7XG4gIHJldHVybiBuICogMTgwIC8gTWF0aC5QSTtcbn1cblxuZnVuY3Rpb24gZnJhY3QgKG4pIHtcbiAgcmV0dXJuIG4gLSBNYXRoLmZsb29yKG4pO1xufVxuXG5mdW5jdGlvbiBzaWduIChuKSB7XG4gIGlmIChuID4gMCkgcmV0dXJuIDE7XG4gIGVsc2UgaWYgKG4gPCAwKSByZXR1cm4gLTE7XG4gIGVsc2UgcmV0dXJuIDA7XG59XG5cbi8vIFNwZWNpZmljIGZ1bmN0aW9uIGZyb20gVW5pdHkgLyBvZk1hdGgsIG5vdCBzdXJlIGl0cyBuZWVkZWQ/XG4vLyBmdW5jdGlvbiBsZXJwV3JhcCAoYSwgYiwgdCwgbWluLCBtYXgpIHtcbi8vICAgcmV0dXJuIHdyYXAoYSArIHdyYXAoYiAtIGEsIG1pbiwgbWF4KSAqIHQsIG1pbiwgbWF4KVxuLy8gfVxuXG5mdW5jdGlvbiBwaW5nUG9uZyAodCwgbGVuZ3RoKSB7XG4gIHQgPSBtb2QodCwgbGVuZ3RoICogMik7XG4gIHJldHVybiBsZW5ndGggLSBNYXRoLmFicyh0IC0gbGVuZ3RoKTtcbn1cblxuZnVuY3Rpb24gZGFtcCAoYSwgYiwgbGFtYmRhLCBkdCkge1xuICByZXR1cm4gbGVycChhLCBiLCAxIC0gTWF0aC5leHAoLWxhbWJkYSAqIGR0KSk7XG59XG5cbmZ1bmN0aW9uIGRhbXBBcnJheSAoYSwgYiwgbGFtYmRhLCBkdCwgb3V0KSB7XG4gIG91dCA9IG91dCB8fCBbXTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0W2ldID0gZGFtcChhW2ldLCBiW2ldLCBsYW1iZGEsIGR0KTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBtYXBSYW5nZSAodmFsdWUsIGlucHV0TWluLCBpbnB1dE1heCwgb3V0cHV0TWluLCBvdXRwdXRNYXgsIGNsYW1wKSB7XG4gIC8vIFJlZmVyZW5jZTpcbiAgLy8gaHR0cHM6Ly9vcGVuZnJhbWV3b3Jrcy5jYy9kb2N1bWVudGF0aW9uL21hdGgvb2ZNYXRoL1xuICBpZiAoTWF0aC5hYnMoaW5wdXRNaW4gLSBpbnB1dE1heCkgPCBFUFNJTE9OKSB7XG4gICAgcmV0dXJuIG91dHB1dE1pbjtcbiAgfSBlbHNlIHtcbiAgICB2YXIgb3V0VmFsID0gKCh2YWx1ZSAtIGlucHV0TWluKSAvIChpbnB1dE1heCAtIGlucHV0TWluKSAqIChvdXRwdXRNYXggLSBvdXRwdXRNaW4pICsgb3V0cHV0TWluKTtcbiAgICBpZiAoY2xhbXApIHtcbiAgICAgIGlmIChvdXRwdXRNYXggPCBvdXRwdXRNaW4pIHtcbiAgICAgICAgaWYgKG91dFZhbCA8IG91dHB1dE1heCkgb3V0VmFsID0gb3V0cHV0TWF4O1xuICAgICAgICBlbHNlIGlmIChvdXRWYWwgPiBvdXRwdXRNaW4pIG91dFZhbCA9IG91dHB1dE1pbjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChvdXRWYWwgPiBvdXRwdXRNYXgpIG91dFZhbCA9IG91dHB1dE1heDtcbiAgICAgICAgZWxzZSBpZiAob3V0VmFsIDwgb3V0cHV0TWluKSBvdXRWYWwgPSBvdXRwdXRNaW47XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRWYWw7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1vZDogbW9kLFxuICBmcmFjdDogZnJhY3QsXG4gIHNpZ246IHNpZ24sXG4gIGRlZ1RvUmFkOiBkZWdUb1JhZCxcbiAgcmFkVG9EZWc6IHJhZFRvRGVnLFxuICB3cmFwOiB3cmFwLFxuICBwaW5nUG9uZzogcGluZ1BvbmcsXG4gIGxpbnNwYWNlOiBsaW5zcGFjZSxcbiAgbGVycDogbGVycCxcbiAgbGVycEFycmF5OiBsZXJwQXJyYXksXG4gIGludmVyc2VMZXJwOiBpbnZlcnNlTGVycCxcbiAgbGVycEZyYW1lczogbGVycEZyYW1lcyxcbiAgY2xhbXA6IGNsYW1wLFxuICBjbGFtcDAxOiBjbGFtcDAxLFxuICBzbW9vdGhzdGVwOiBzbW9vdGhzdGVwLFxuICBkYW1wOiBkYW1wLFxuICBkYW1wQXJyYXk6IGRhbXBBcnJheSxcbiAgbWFwUmFuZ2U6IG1hcFJhbmdlLFxuICBleHBhbmQyRDogZXhwYW5kVmVjdG9yKDIpLFxuICBleHBhbmQzRDogZXhwYW5kVmVjdG9yKDMpLFxuICBleHBhbmQ0RDogZXhwYW5kVmVjdG9yKDQpXG59O1xuIiwidmFyIHNlZWRSYW5kb20gPSByZXF1aXJlKCdzZWVkLXJhbmRvbScpO1xudmFyIFNpbXBsZXhOb2lzZSA9IHJlcXVpcmUoJ3NpbXBsZXgtbm9pc2UnKTtcbnZhciBkZWZpbmVkID0gcmVxdWlyZSgnZGVmaW5lZCcpO1xuXG5mdW5jdGlvbiBjcmVhdGVSYW5kb20gKGRlZmF1bHRTZWVkKSB7XG4gIGRlZmF1bHRTZWVkID0gZGVmaW5lZChkZWZhdWx0U2VlZCwgbnVsbCk7XG4gIHZhciBkZWZhdWx0UmFuZG9tID0gTWF0aC5yYW5kb207XG4gIHZhciBjdXJyZW50U2VlZDtcbiAgdmFyIGN1cnJlbnRSYW5kb207XG4gIHZhciBub2lzZUdlbmVyYXRvcjtcbiAgdmFyIF9uZXh0R2F1c3NpYW4gPSBudWxsO1xuICB2YXIgX2hhc05leHRHYXVzc2lhbiA9IGZhbHNlO1xuXG4gIHNldFNlZWQoZGVmYXVsdFNlZWQpO1xuXG4gIHJldHVybiB7XG4gICAgdmFsdWU6IHZhbHVlLFxuICAgIGNyZWF0ZVJhbmRvbTogZnVuY3Rpb24gKGRlZmF1bHRTZWVkKSB7XG4gICAgICByZXR1cm4gY3JlYXRlUmFuZG9tKGRlZmF1bHRTZWVkKTtcbiAgICB9LFxuICAgIHNldFNlZWQ6IHNldFNlZWQsXG4gICAgZ2V0U2VlZDogZ2V0U2VlZCxcbiAgICBnZXRSYW5kb21TZWVkOiBnZXRSYW5kb21TZWVkLFxuICAgIHZhbHVlTm9uWmVybzogdmFsdWVOb25aZXJvLFxuICAgIHBlcm11dGVOb2lzZTogcGVybXV0ZU5vaXNlLFxuICAgIG5vaXNlMUQ6IG5vaXNlMUQsXG4gICAgbm9pc2UyRDogbm9pc2UyRCxcbiAgICBub2lzZTNEOiBub2lzZTNELFxuICAgIG5vaXNlNEQ6IG5vaXNlNEQsXG4gICAgc2lnbjogc2lnbixcbiAgICBib29sZWFuOiBib29sZWFuLFxuICAgIGNoYW5jZTogY2hhbmNlLFxuICAgIHJhbmdlOiByYW5nZSxcbiAgICByYW5nZUZsb29yOiByYW5nZUZsb29yLFxuICAgIHBpY2s6IHBpY2ssXG4gICAgc2h1ZmZsZTogc2h1ZmZsZSxcbiAgICBvbkNpcmNsZTogb25DaXJjbGUsXG4gICAgaW5zaWRlQ2lyY2xlOiBpbnNpZGVDaXJjbGUsXG4gICAgb25TcGhlcmU6IG9uU3BoZXJlLFxuICAgIGluc2lkZVNwaGVyZTogaW5zaWRlU3BoZXJlLFxuICAgIHF1YXRlcm5pb246IHF1YXRlcm5pb24sXG4gICAgd2VpZ2h0ZWQ6IHdlaWdodGVkLFxuICAgIHdlaWdodGVkU2V0OiB3ZWlnaHRlZFNldCxcbiAgICB3ZWlnaHRlZFNldEluZGV4OiB3ZWlnaHRlZFNldEluZGV4LFxuICAgIGdhdXNzaWFuOiBnYXVzc2lhblxuICB9O1xuXG4gIGZ1bmN0aW9uIHNldFNlZWQgKHNlZWQsIG9wdCkge1xuICAgIGlmICh0eXBlb2Ygc2VlZCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHNlZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBjdXJyZW50U2VlZCA9IHNlZWQ7XG4gICAgICBjdXJyZW50UmFuZG9tID0gc2VlZFJhbmRvbShjdXJyZW50U2VlZCwgb3B0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudFNlZWQgPSB1bmRlZmluZWQ7XG4gICAgICBjdXJyZW50UmFuZG9tID0gZGVmYXVsdFJhbmRvbTtcbiAgICB9XG4gICAgbm9pc2VHZW5lcmF0b3IgPSBjcmVhdGVOb2lzZSgpO1xuICAgIF9uZXh0R2F1c3NpYW4gPSBudWxsO1xuICAgIF9oYXNOZXh0R2F1c3NpYW4gPSBmYWxzZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbHVlICgpIHtcbiAgICByZXR1cm4gY3VycmVudFJhbmRvbSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsdWVOb25aZXJvICgpIHtcbiAgICB2YXIgdSA9IDA7XG4gICAgd2hpbGUgKHUgPT09IDApIHUgPSB2YWx1ZSgpO1xuICAgIHJldHVybiB1O1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0U2VlZCAoKSB7XG4gICAgcmV0dXJuIGN1cnJlbnRTZWVkO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2V0UmFuZG9tU2VlZCAoKSB7XG4gICAgdmFyIHNlZWQgPSBTdHJpbmcoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMTAwMDAwMCkpO1xuICAgIHJldHVybiBzZWVkO1xuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlTm9pc2UgKCkge1xuICAgIHJldHVybiBuZXcgU2ltcGxleE5vaXNlKGN1cnJlbnRSYW5kb20pO1xuICB9XG5cbiAgZnVuY3Rpb24gcGVybXV0ZU5vaXNlICgpIHtcbiAgICBub2lzZUdlbmVyYXRvciA9IGNyZWF0ZU5vaXNlKCk7XG4gIH1cblxuICBmdW5jdGlvbiBub2lzZTFEICh4LCBmcmVxdWVuY3ksIGFtcGxpdHVkZSkge1xuICAgIGlmICghaXNGaW5pdGUoeCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ggY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgZnJlcXVlbmN5ID0gZGVmaW5lZChmcmVxdWVuY3ksIDEpO1xuICAgIGFtcGxpdHVkZSA9IGRlZmluZWQoYW1wbGl0dWRlLCAxKTtcbiAgICByZXR1cm4gYW1wbGl0dWRlICogbm9pc2VHZW5lcmF0b3Iubm9pc2UyRCh4ICogZnJlcXVlbmN5LCAwKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vaXNlMkQgKHgsIHksIGZyZXF1ZW5jeSwgYW1wbGl0dWRlKSB7XG4gICAgaWYgKCFpc0Zpbml0ZSh4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneCBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBpZiAoIWlzRmluaXRlKHkpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd5IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGZyZXF1ZW5jeSA9IGRlZmluZWQoZnJlcXVlbmN5LCAxKTtcbiAgICBhbXBsaXR1ZGUgPSBkZWZpbmVkKGFtcGxpdHVkZSwgMSk7XG4gICAgcmV0dXJuIGFtcGxpdHVkZSAqIG5vaXNlR2VuZXJhdG9yLm5vaXNlMkQoeCAqIGZyZXF1ZW5jeSwgeSAqIGZyZXF1ZW5jeSk7XG4gIH1cblxuICBmdW5jdGlvbiBub2lzZTNEICh4LCB5LCB6LCBmcmVxdWVuY3ksIGFtcGxpdHVkZSkge1xuICAgIGlmICghaXNGaW5pdGUoeCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ggY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh5KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneSBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBpZiAoIWlzRmluaXRlKHopKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd6IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGZyZXF1ZW5jeSA9IGRlZmluZWQoZnJlcXVlbmN5LCAxKTtcbiAgICBhbXBsaXR1ZGUgPSBkZWZpbmVkKGFtcGxpdHVkZSwgMSk7XG4gICAgcmV0dXJuIGFtcGxpdHVkZSAqIG5vaXNlR2VuZXJhdG9yLm5vaXNlM0QoXG4gICAgICB4ICogZnJlcXVlbmN5LFxuICAgICAgeSAqIGZyZXF1ZW5jeSxcbiAgICAgIHogKiBmcmVxdWVuY3lcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9pc2U0RCAoeCwgeSwgeiwgdywgZnJlcXVlbmN5LCBhbXBsaXR1ZGUpIHtcbiAgICBpZiAoIWlzRmluaXRlKHgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd4IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUoeSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3kgY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh6KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneiBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBpZiAoIWlzRmluaXRlKHcpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd3IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGZyZXF1ZW5jeSA9IGRlZmluZWQoZnJlcXVlbmN5LCAxKTtcbiAgICBhbXBsaXR1ZGUgPSBkZWZpbmVkKGFtcGxpdHVkZSwgMSk7XG4gICAgcmV0dXJuIGFtcGxpdHVkZSAqIG5vaXNlR2VuZXJhdG9yLm5vaXNlNEQoXG4gICAgICB4ICogZnJlcXVlbmN5LFxuICAgICAgeSAqIGZyZXF1ZW5jeSxcbiAgICAgIHogKiBmcmVxdWVuY3ksXG4gICAgICB3ICogZnJlcXVlbmN5XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNpZ24gKCkge1xuICAgIHJldHVybiBib29sZWFuKCkgPyAxIDogLTE7XG4gIH1cblxuICBmdW5jdGlvbiBib29sZWFuICgpIHtcbiAgICByZXR1cm4gdmFsdWUoKSA+IDAuNTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoYW5jZSAobikge1xuICAgIG4gPSBkZWZpbmVkKG4sIDAuNSk7XG4gICAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJykgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhwZWN0ZWQgbiB0byBiZSBhIG51bWJlcicpO1xuICAgIHJldHVybiB2YWx1ZSgpIDwgbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJhbmdlIChtaW4sIG1heCkge1xuICAgIGlmIChtYXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgbWF4ID0gbWluO1xuICAgICAgbWluID0gMDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG1pbiAhPT0gJ251bWJlcicgfHwgdHlwZW9mIG1heCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGFsbCBhcmd1bWVudHMgdG8gYmUgbnVtYmVycycpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZSgpICogKG1heCAtIG1pbikgKyBtaW47XG4gIH1cblxuICBmdW5jdGlvbiByYW5nZUZsb29yIChtaW4sIG1heCkge1xuICAgIGlmIChtYXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgbWF4ID0gbWluO1xuICAgICAgbWluID0gMDtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG1pbiAhPT0gJ251bWJlcicgfHwgdHlwZW9mIG1heCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGFsbCBhcmd1bWVudHMgdG8gYmUgbnVtYmVycycpO1xuICAgIH1cblxuICAgIHJldHVybiBNYXRoLmZsb29yKHJhbmdlKG1pbiwgbWF4KSk7XG4gIH1cblxuICBmdW5jdGlvbiBwaWNrIChhcnJheSkge1xuICAgIGlmIChhcnJheS5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIGFycmF5W3JhbmdlRmxvb3IoMCwgYXJyYXkubGVuZ3RoKV07XG4gIH1cblxuICBmdW5jdGlvbiBzaHVmZmxlIChhcnIpIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkoYXJyKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgQXJyYXksIGdvdCAnICsgdHlwZW9mIGFycik7XG4gICAgfVxuXG4gICAgdmFyIHJhbmQ7XG4gICAgdmFyIHRtcDtcbiAgICB2YXIgbGVuID0gYXJyLmxlbmd0aDtcbiAgICB2YXIgcmV0ID0gYXJyLnNsaWNlKCk7XG4gICAgd2hpbGUgKGxlbikge1xuICAgICAgcmFuZCA9IE1hdGguZmxvb3IodmFsdWUoKSAqIGxlbi0tKTtcbiAgICAgIHRtcCA9IHJldFtsZW5dO1xuICAgICAgcmV0W2xlbl0gPSByZXRbcmFuZF07XG4gICAgICByZXRbcmFuZF0gPSB0bXA7XG4gICAgfVxuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICBmdW5jdGlvbiBvbkNpcmNsZSAocmFkaXVzLCBvdXQpIHtcbiAgICByYWRpdXMgPSBkZWZpbmVkKHJhZGl1cywgMSk7XG4gICAgb3V0ID0gb3V0IHx8IFtdO1xuICAgIHZhciB0aGV0YSA9IHZhbHVlKCkgKiAyLjAgKiBNYXRoLlBJO1xuICAgIG91dFswXSA9IHJhZGl1cyAqIE1hdGguY29zKHRoZXRhKTtcbiAgICBvdXRbMV0gPSByYWRpdXMgKiBNYXRoLnNpbih0aGV0YSk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2lkZUNpcmNsZSAocmFkaXVzLCBvdXQpIHtcbiAgICByYWRpdXMgPSBkZWZpbmVkKHJhZGl1cywgMSk7XG4gICAgb3V0ID0gb3V0IHx8IFtdO1xuICAgIG9uQ2lyY2xlKDEsIG91dCk7XG4gICAgdmFyIHIgPSByYWRpdXMgKiBNYXRoLnNxcnQodmFsdWUoKSk7XG4gICAgb3V0WzBdICo9IHI7XG4gICAgb3V0WzFdICo9IHI7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uU3BoZXJlIChyYWRpdXMsIG91dCkge1xuICAgIHJhZGl1cyA9IGRlZmluZWQocmFkaXVzLCAxKTtcbiAgICBvdXQgPSBvdXQgfHwgW107XG4gICAgdmFyIHUgPSB2YWx1ZSgpICogTWF0aC5QSSAqIDI7XG4gICAgdmFyIHYgPSB2YWx1ZSgpICogMiAtIDE7XG4gICAgdmFyIHBoaSA9IHU7XG4gICAgdmFyIHRoZXRhID0gTWF0aC5hY29zKHYpO1xuICAgIG91dFswXSA9IHJhZGl1cyAqIE1hdGguc2luKHRoZXRhKSAqIE1hdGguY29zKHBoaSk7XG4gICAgb3V0WzFdID0gcmFkaXVzICogTWF0aC5zaW4odGhldGEpICogTWF0aC5zaW4ocGhpKTtcbiAgICBvdXRbMl0gPSByYWRpdXMgKiBNYXRoLmNvcyh0aGV0YSk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGluc2lkZVNwaGVyZSAocmFkaXVzLCBvdXQpIHtcbiAgICByYWRpdXMgPSBkZWZpbmVkKHJhZGl1cywgMSk7XG4gICAgb3V0ID0gb3V0IHx8IFtdO1xuICAgIHZhciB1ID0gdmFsdWUoKSAqIE1hdGguUEkgKiAyO1xuICAgIHZhciB2ID0gdmFsdWUoKSAqIDIgLSAxO1xuICAgIHZhciBrID0gdmFsdWUoKTtcblxuICAgIHZhciBwaGkgPSB1O1xuICAgIHZhciB0aGV0YSA9IE1hdGguYWNvcyh2KTtcbiAgICB2YXIgciA9IHJhZGl1cyAqIE1hdGguY2JydChrKTtcbiAgICBvdXRbMF0gPSByICogTWF0aC5zaW4odGhldGEpICogTWF0aC5jb3MocGhpKTtcbiAgICBvdXRbMV0gPSByICogTWF0aC5zaW4odGhldGEpICogTWF0aC5zaW4ocGhpKTtcbiAgICBvdXRbMl0gPSByICogTWF0aC5jb3ModGhldGEpO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmdW5jdGlvbiBxdWF0ZXJuaW9uIChvdXQpIHtcbiAgICBvdXQgPSBvdXQgfHwgW107XG4gICAgdmFyIHUxID0gdmFsdWUoKTtcbiAgICB2YXIgdTIgPSB2YWx1ZSgpO1xuICAgIHZhciB1MyA9IHZhbHVlKCk7XG5cbiAgICB2YXIgc3ExID0gTWF0aC5zcXJ0KDEgLSB1MSk7XG4gICAgdmFyIHNxMiA9IE1hdGguc3FydCh1MSk7XG5cbiAgICB2YXIgdGhldGExID0gTWF0aC5QSSAqIDIgKiB1MjtcbiAgICB2YXIgdGhldGEyID0gTWF0aC5QSSAqIDIgKiB1MztcblxuICAgIHZhciB4ID0gTWF0aC5zaW4odGhldGExKSAqIHNxMTtcbiAgICB2YXIgeSA9IE1hdGguY29zKHRoZXRhMSkgKiBzcTE7XG4gICAgdmFyIHogPSBNYXRoLnNpbih0aGV0YTIpICogc3EyO1xuICAgIHZhciB3ID0gTWF0aC5jb3ModGhldGEyKSAqIHNxMjtcbiAgICBvdXRbMF0gPSB4O1xuICAgIG91dFsxXSA9IHk7XG4gICAgb3V0WzJdID0gejtcbiAgICBvdXRbM10gPSB3O1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmdW5jdGlvbiB3ZWlnaHRlZFNldCAoc2V0KSB7XG4gICAgc2V0ID0gc2V0IHx8IFtdO1xuICAgIGlmIChzZXQubGVuZ3RoID09PSAwKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gc2V0W3dlaWdodGVkU2V0SW5kZXgoc2V0KV0udmFsdWU7XG4gIH1cblxuICBmdW5jdGlvbiB3ZWlnaHRlZFNldEluZGV4IChzZXQpIHtcbiAgICBzZXQgPSBzZXQgfHwgW107XG4gICAgaWYgKHNldC5sZW5ndGggPT09IDApIHJldHVybiAtMTtcbiAgICByZXR1cm4gd2VpZ2h0ZWQoc2V0Lm1hcChmdW5jdGlvbiAocykge1xuICAgICAgcmV0dXJuIHMud2VpZ2h0O1xuICAgIH0pKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdlaWdodGVkICh3ZWlnaHRzKSB7XG4gICAgd2VpZ2h0cyA9IHdlaWdodHMgfHwgW107XG4gICAgaWYgKHdlaWdodHMubGVuZ3RoID09PSAwKSByZXR1cm4gLTE7XG4gICAgdmFyIHRvdGFsV2VpZ2h0ID0gMDtcbiAgICB2YXIgaTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCB3ZWlnaHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB0b3RhbFdlaWdodCArPSB3ZWlnaHRzW2ldO1xuICAgIH1cblxuICAgIGlmICh0b3RhbFdlaWdodCA8PSAwKSB0aHJvdyBuZXcgRXJyb3IoJ1dlaWdodHMgbXVzdCBzdW0gdG8gPiAwJyk7XG5cbiAgICB2YXIgcmFuZG9tID0gdmFsdWUoKSAqIHRvdGFsV2VpZ2h0O1xuICAgIGZvciAoaSA9IDA7IGkgPCB3ZWlnaHRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmFuZG9tIDwgd2VpZ2h0c1tpXSkge1xuICAgICAgICByZXR1cm4gaTtcbiAgICAgIH1cbiAgICAgIHJhbmRvbSAtPSB3ZWlnaHRzW2ldO1xuICAgIH1cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdhdXNzaWFuIChtZWFuLCBzdGFuZGFyZERlcml2YXRpb24pIHtcbiAgICBtZWFuID0gZGVmaW5lZChtZWFuLCAwKTtcbiAgICBzdGFuZGFyZERlcml2YXRpb24gPSBkZWZpbmVkKHN0YW5kYXJkRGVyaXZhdGlvbiwgMSk7XG5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vb3Blbmpkay1taXJyb3IvamRrN3UtamRrL2Jsb2IvZjRkODA5NTdlODlhMTlhMjliYjlmOTgwN2QyYTI4MzUxZWQ3ZjdkZi9zcmMvc2hhcmUvY2xhc3Nlcy9qYXZhL3V0aWwvUmFuZG9tLmphdmEjTDQ5NlxuICAgIGlmIChfaGFzTmV4dEdhdXNzaWFuKSB7XG4gICAgICBfaGFzTmV4dEdhdXNzaWFuID0gZmFsc2U7XG4gICAgICB2YXIgcmVzdWx0ID0gX25leHRHYXVzc2lhbjtcbiAgICAgIF9uZXh0R2F1c3NpYW4gPSBudWxsO1xuICAgICAgcmV0dXJuIG1lYW4gKyBzdGFuZGFyZERlcml2YXRpb24gKiByZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciB2MSA9IDA7XG4gICAgICB2YXIgdjIgPSAwO1xuICAgICAgdmFyIHMgPSAwO1xuICAgICAgZG8ge1xuICAgICAgICB2MSA9IHZhbHVlKCkgKiAyIC0gMTsgLy8gYmV0d2VlbiAtMSBhbmQgMVxuICAgICAgICB2MiA9IHZhbHVlKCkgKiAyIC0gMTsgLy8gYmV0d2VlbiAtMSBhbmQgMVxuICAgICAgICBzID0gdjEgKiB2MSArIHYyICogdjI7XG4gICAgICB9IHdoaWxlIChzID49IDEgfHwgcyA9PT0gMCk7XG4gICAgICB2YXIgbXVsdGlwbGllciA9IE1hdGguc3FydCgtMiAqIE1hdGgubG9nKHMpIC8gcyk7XG4gICAgICBfbmV4dEdhdXNzaWFuID0gKHYyICogbXVsdGlwbGllcik7XG4gICAgICBfaGFzTmV4dEdhdXNzaWFuID0gdHJ1ZTtcbiAgICAgIHJldHVybiBtZWFuICsgc3RhbmRhcmREZXJpdmF0aW9uICogKHYxICogbXVsdGlwbGllcik7XG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUmFuZG9tKCk7XG4iLCIvKlxub2JqZWN0LWFzc2lnblxuKGMpIFNpbmRyZSBTb3JodXNcbkBsaWNlbnNlIE1JVFxuKi9cblxuJ3VzZSBzdHJpY3QnO1xuLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIGhhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBwcm9wSXNFbnVtZXJhYmxlID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcblxuZnVuY3Rpb24gdG9PYmplY3QodmFsKSB7XG5cdGlmICh2YWwgPT09IG51bGwgfHwgdmFsID09PSB1bmRlZmluZWQpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCcpO1xuXHR9XG5cblx0cmV0dXJuIE9iamVjdCh2YWwpO1xufVxuXG5mdW5jdGlvbiBzaG91bGRVc2VOYXRpdmUoKSB7XG5cdHRyeSB7XG5cdFx0aWYgKCFPYmplY3QuYXNzaWduKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZWN0IGJ1Z2d5IHByb3BlcnR5IGVudW1lcmF0aW9uIG9yZGVyIGluIG9sZGVyIFY4IHZlcnNpb25zLlxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9NDExOFxuXHRcdHZhciB0ZXN0MSA9IG5ldyBTdHJpbmcoJ2FiYycpOyAgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1uZXctd3JhcHBlcnNcblx0XHR0ZXN0MVs1XSA9ICdkZSc7XG5cdFx0aWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QxKVswXSA9PT0gJzUnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MiA9IHt9O1xuXHRcdGZvciAodmFyIGkgPSAwOyBpIDwgMTA7IGkrKykge1xuXHRcdFx0dGVzdDJbJ18nICsgU3RyaW5nLmZyb21DaGFyQ29kZShpKV0gPSBpO1xuXHRcdH1cblx0XHR2YXIgb3JkZXIyID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDIpLm1hcChmdW5jdGlvbiAobikge1xuXHRcdFx0cmV0dXJuIHRlc3QyW25dO1xuXHRcdH0pO1xuXHRcdGlmIChvcmRlcjIuam9pbignJykgIT09ICcwMTIzNDU2Nzg5Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDMgPSB7fTtcblx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnLnNwbGl0KCcnKS5mb3JFYWNoKGZ1bmN0aW9uIChsZXR0ZXIpIHtcblx0XHRcdHRlc3QzW2xldHRlcl0gPSBsZXR0ZXI7XG5cdFx0fSk7XG5cdFx0aWYgKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sIHRlc3QzKSkuam9pbignJykgIT09XG5cdFx0XHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSBjYXRjaCAoZXJyKSB7XG5cdFx0Ly8gV2UgZG9uJ3QgZXhwZWN0IGFueSBvZiB0aGUgYWJvdmUgdG8gdGhyb3csIGJ1dCBiZXR0ZXIgdG8gYmUgc2FmZS5cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzaG91bGRVc2VOYXRpdmUoKSA/IE9iamVjdC5hc3NpZ24gOiBmdW5jdGlvbiAodGFyZ2V0LCBzb3VyY2UpIHtcblx0dmFyIGZyb207XG5cdHZhciB0byA9IHRvT2JqZWN0KHRhcmdldCk7XG5cdHZhciBzeW1ib2xzO1xuXG5cdGZvciAodmFyIHMgPSAxOyBzIDwgYXJndW1lbnRzLmxlbmd0aDsgcysrKSB7XG5cdFx0ZnJvbSA9IE9iamVjdChhcmd1bWVudHNbc10pO1xuXG5cdFx0Zm9yICh2YXIga2V5IGluIGZyb20pIHtcblx0XHRcdGlmIChoYXNPd25Qcm9wZXJ0eS5jYWxsKGZyb20sIGtleSkpIHtcblx0XHRcdFx0dG9ba2V5XSA9IGZyb21ba2V5XTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG5cdFx0XHRzeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzKGZyb20pO1xuXHRcdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGlmIChwcm9wSXNFbnVtZXJhYmxlLmNhbGwoZnJvbSwgc3ltYm9sc1tpXSkpIHtcblx0XHRcdFx0XHR0b1tzeW1ib2xzW2ldXSA9IGZyb21bc3ltYm9sc1tpXV07XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gdG87XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPVxuICBnbG9iYWwucGVyZm9ybWFuY2UgJiZcbiAgZ2xvYmFsLnBlcmZvcm1hbmNlLm5vdyA/IGZ1bmN0aW9uIG5vdygpIHtcbiAgICByZXR1cm4gcGVyZm9ybWFuY2Uubm93KClcbiAgfSA6IERhdGUubm93IHx8IGZ1bmN0aW9uIG5vdygpIHtcbiAgICByZXR1cm4gK25ldyBEYXRlXG4gIH1cbiIsIm1vZHVsZS5leHBvcnRzID0gaXNQcm9taXNlO1xuXG5mdW5jdGlvbiBpc1Byb21pc2Uob2JqKSB7XG4gIHJldHVybiAhIW9iaiAmJiAodHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIG9iaiA9PT0gJ2Z1bmN0aW9uJykgJiYgdHlwZW9mIG9iai50aGVuID09PSAnZnVuY3Rpb24nO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBpc05vZGVcblxuZnVuY3Rpb24gaXNOb2RlICh2YWwpIHtcbiAgcmV0dXJuICghdmFsIHx8IHR5cGVvZiB2YWwgIT09ICdvYmplY3QnKVxuICAgID8gZmFsc2VcbiAgICA6ICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygd2luZG93Lk5vZGUgPT09ICdvYmplY3QnKVxuICAgICAgPyAodmFsIGluc3RhbmNlb2Ygd2luZG93Lk5vZGUpXG4gICAgICA6ICh0eXBlb2YgdmFsLm5vZGVUeXBlID09PSAnbnVtYmVyJykgJiZcbiAgICAgICAgKHR5cGVvZiB2YWwubm9kZU5hbWUgPT09ICdzdHJpbmcnKVxufVxuIiwiLy8gVE9ETzogV2UgY2FuIHJlbW92ZSBhIGh1Z2UgY2h1bmsgb2YgYnVuZGxlIHNpemUgYnkgdXNpbmcgYSBzbWFsbGVyXG4vLyB1dGlsaXR5IG1vZHVsZSBmb3IgY29udmVydGluZyB1bml0cy5cbmltcG9ydCBpc0RPTSBmcm9tICdpcy1kb20nO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2xpZW50QVBJICgpIHtcbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvd1snY2FudmFzLXNrZXRjaC1jbGknXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZmluZWQgKCkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhcmd1bWVudHNbaV0gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGFyZ3VtZW50c1tpXTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQnJvd3NlciAoKSB7XG4gIHJldHVybiB0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNXZWJHTENvbnRleHQgKGN0eCkge1xuICByZXR1cm4gdHlwZW9mIGN0eC5jbGVhciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY3R4LmNsZWFyQ29sb3IgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGN0eC5idWZmZXJEYXRhID09PSAnZnVuY3Rpb24nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDYW52YXMgKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGlzRE9NKGVsZW1lbnQpICYmIC9jYW52YXMvaS50ZXN0KGVsZW1lbnQubm9kZU5hbWUpICYmIHR5cGVvZiBlbGVtZW50LmdldENvbnRleHQgPT09ICdmdW5jdGlvbic7XG59XG4iLCIvKiFcbiAqIHJlcGVhdC1zdHJpbmcgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L3JlcGVhdC1zdHJpbmc+XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEpvbiBTY2hsaW5rZXJ0LlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBMaWNlbnNlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBSZXN1bHRzIGNhY2hlXG4gKi9cblxudmFyIHJlcyA9ICcnO1xudmFyIGNhY2hlO1xuXG4vKipcbiAqIEV4cG9zZSBgcmVwZWF0YFxuICovXG5cbm1vZHVsZS5leHBvcnRzID0gcmVwZWF0O1xuXG4vKipcbiAqIFJlcGVhdCB0aGUgZ2l2ZW4gYHN0cmluZ2AgdGhlIHNwZWNpZmllZCBgbnVtYmVyYFxuICogb2YgdGltZXMuXG4gKlxuICogKipFeGFtcGxlOioqXG4gKlxuICogYGBganNcbiAqIHZhciByZXBlYXQgPSByZXF1aXJlKCdyZXBlYXQtc3RyaW5nJyk7XG4gKiByZXBlYXQoJ0EnLCA1KTtcbiAqIC8vPT4gQUFBQUFcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBgc3RyaW5nYCBUaGUgc3RyaW5nIHRvIHJlcGVhdFxuICogQHBhcmFtIHtOdW1iZXJ9IGBudW1iZXJgIFRoZSBudW1iZXIgb2YgdGltZXMgdG8gcmVwZWF0IHRoZSBzdHJpbmdcbiAqIEByZXR1cm4ge1N0cmluZ30gUmVwZWF0ZWQgc3RyaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIHJlcGVhdChzdHIsIG51bSkge1xuICBpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleHBlY3RlZCBhIHN0cmluZycpO1xuICB9XG5cbiAgLy8gY292ZXIgY29tbW9uLCBxdWljayB1c2UgY2FzZXNcbiAgaWYgKG51bSA9PT0gMSkgcmV0dXJuIHN0cjtcbiAgaWYgKG51bSA9PT0gMikgcmV0dXJuIHN0ciArIHN0cjtcblxuICB2YXIgbWF4ID0gc3RyLmxlbmd0aCAqIG51bTtcbiAgaWYgKGNhY2hlICE9PSBzdHIgfHwgdHlwZW9mIGNhY2hlID09PSAndW5kZWZpbmVkJykge1xuICAgIGNhY2hlID0gc3RyO1xuICAgIHJlcyA9ICcnO1xuICB9IGVsc2UgaWYgKHJlcy5sZW5ndGggPj0gbWF4KSB7XG4gICAgcmV0dXJuIHJlcy5zdWJzdHIoMCwgbWF4KTtcbiAgfVxuXG4gIHdoaWxlIChtYXggPiByZXMubGVuZ3RoICYmIG51bSA+IDEpIHtcbiAgICBpZiAobnVtICYgMSkge1xuICAgICAgcmVzICs9IHN0cjtcbiAgICB9XG5cbiAgICBudW0gPj49IDE7XG4gICAgc3RyICs9IHN0cjtcbiAgfVxuXG4gIHJlcyArPSBzdHI7XG4gIHJlcyA9IHJlcy5zdWJzdHIoMCwgbWF4KTtcbiAgcmV0dXJuIHJlcztcbn1cbiIsImV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBPYmplY3Qua2V5cyA9PT0gJ2Z1bmN0aW9uJ1xuICA/IE9iamVjdC5rZXlzIDogc2hpbTtcblxuZXhwb3J0cy5zaGltID0gc2hpbTtcbmZ1bmN0aW9uIHNoaW0gKG9iaikge1xuICB2YXIga2V5cyA9IFtdO1xuICBmb3IgKHZhciBrZXkgaW4gb2JqKSBrZXlzLnB1c2goa2V5KTtcbiAgcmV0dXJuIGtleXM7XG59XG4iLCJ2YXIgc3VwcG9ydHNBcmd1bWVudHNDbGFzcyA9IChmdW5jdGlvbigpe1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50cylcbn0pKCkgPT0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IHN1cHBvcnRzQXJndW1lbnRzQ2xhc3MgPyBzdXBwb3J0ZWQgOiB1bnN1cHBvcnRlZDtcblxuZXhwb3J0cy5zdXBwb3J0ZWQgPSBzdXBwb3J0ZWQ7XG5mdW5jdGlvbiBzdXBwb3J0ZWQob2JqZWN0KSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqZWN0KSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcbn07XG5cbmV4cG9ydHMudW5zdXBwb3J0ZWQgPSB1bnN1cHBvcnRlZDtcbmZ1bmN0aW9uIHVuc3VwcG9ydGVkKG9iamVjdCl7XG4gIHJldHVybiBvYmplY3QgJiZcbiAgICB0eXBlb2Ygb2JqZWN0ID09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIG9iamVjdC5sZW5ndGggPT0gJ251bWJlcicgJiZcbiAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCAnY2FsbGVlJykgJiZcbiAgICAhT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iamVjdCwgJ2NhbGxlZScpIHx8XG4gICAgZmFsc2U7XG59O1xuIiwidmFyIHBTbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi9saWIva2V5cy5qcycpO1xudmFyIGlzQXJndW1lbnRzID0gcmVxdWlyZSgnLi9saWIvaXNfYXJndW1lbnRzLmpzJyk7XG5cbnZhciBkZWVwRXF1YWwgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhY3R1YWwsIGV4cGVjdGVkLCBvcHRzKSB7XG4gIGlmICghb3B0cykgb3B0cyA9IHt9O1xuICAvLyA3LjEuIEFsbCBpZGVudGljYWwgdmFsdWVzIGFyZSBlcXVpdmFsZW50LCBhcyBkZXRlcm1pbmVkIGJ5ID09PS5cbiAgaWYgKGFjdHVhbCA9PT0gZXhwZWN0ZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcblxuICB9IGVsc2UgaWYgKGFjdHVhbCBpbnN0YW5jZW9mIERhdGUgJiYgZXhwZWN0ZWQgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgcmV0dXJuIGFjdHVhbC5nZXRUaW1lKCkgPT09IGV4cGVjdGVkLmdldFRpbWUoKTtcblxuICAvLyA3LjMuIE90aGVyIHBhaXJzIHRoYXQgZG8gbm90IGJvdGggcGFzcyB0eXBlb2YgdmFsdWUgPT0gJ29iamVjdCcsXG4gIC8vIGVxdWl2YWxlbmNlIGlzIGRldGVybWluZWQgYnkgPT0uXG4gIH0gZWxzZSBpZiAoIWFjdHVhbCB8fCAhZXhwZWN0ZWQgfHwgdHlwZW9mIGFjdHVhbCAhPSAnb2JqZWN0JyAmJiB0eXBlb2YgZXhwZWN0ZWQgIT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gb3B0cy5zdHJpY3QgPyBhY3R1YWwgPT09IGV4cGVjdGVkIDogYWN0dWFsID09IGV4cGVjdGVkO1xuXG4gIC8vIDcuNC4gRm9yIGFsbCBvdGhlciBPYmplY3QgcGFpcnMsIGluY2x1ZGluZyBBcnJheSBvYmplY3RzLCBlcXVpdmFsZW5jZSBpc1xuICAvLyBkZXRlcm1pbmVkIGJ5IGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoYXMgdmVyaWZpZWRcbiAgLy8gd2l0aCBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwpLCB0aGUgc2FtZSBzZXQgb2Yga2V5c1xuICAvLyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSwgZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5XG4gIC8vIGNvcnJlc3BvbmRpbmcga2V5LCBhbmQgYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LiBOb3RlOiB0aGlzXG4gIC8vIGFjY291bnRzIGZvciBib3RoIG5hbWVkIGFuZCBpbmRleGVkIHByb3BlcnRpZXMgb24gQXJyYXlzLlxuICB9IGVsc2Uge1xuICAgIHJldHVybiBvYmpFcXVpdihhY3R1YWwsIGV4cGVjdGVkLCBvcHRzKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1VuZGVmaW5lZE9yTnVsbCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gaXNCdWZmZXIgKHgpIHtcbiAgaWYgKCF4IHx8IHR5cGVvZiB4ICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgeC5sZW5ndGggIT09ICdudW1iZXInKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2YgeC5jb3B5ICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiB4LnNsaWNlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGlmICh4Lmxlbmd0aCA+IDAgJiYgdHlwZW9mIHhbMF0gIT09ICdudW1iZXInKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBvYmpFcXVpdihhLCBiLCBvcHRzKSB7XG4gIHZhciBpLCBrZXk7XG4gIGlmIChpc1VuZGVmaW5lZE9yTnVsbChhKSB8fCBpc1VuZGVmaW5lZE9yTnVsbChiKSlcbiAgICByZXR1cm4gZmFsc2U7XG4gIC8vIGFuIGlkZW50aWNhbCAncHJvdG90eXBlJyBwcm9wZXJ0eS5cbiAgaWYgKGEucHJvdG90eXBlICE9PSBiLnByb3RvdHlwZSkgcmV0dXJuIGZhbHNlO1xuICAvL35+fkkndmUgbWFuYWdlZCB0byBicmVhayBPYmplY3Qua2V5cyB0aHJvdWdoIHNjcmV3eSBhcmd1bWVudHMgcGFzc2luZy5cbiAgLy8gICBDb252ZXJ0aW5nIHRvIGFycmF5IHNvbHZlcyB0aGUgcHJvYmxlbS5cbiAgaWYgKGlzQXJndW1lbnRzKGEpKSB7XG4gICAgaWYgKCFpc0FyZ3VtZW50cyhiKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBhID0gcFNsaWNlLmNhbGwoYSk7XG4gICAgYiA9IHBTbGljZS5jYWxsKGIpO1xuICAgIHJldHVybiBkZWVwRXF1YWwoYSwgYiwgb3B0cyk7XG4gIH1cbiAgaWYgKGlzQnVmZmVyKGEpKSB7XG4gICAgaWYgKCFpc0J1ZmZlcihiKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgZm9yIChpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChhW2ldICE9PSBiW2ldKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHRyeSB7XG4gICAgdmFyIGthID0gb2JqZWN0S2V5cyhhKSxcbiAgICAgICAga2IgPSBvYmplY3RLZXlzKGIpO1xuICB9IGNhdGNoIChlKSB7Ly9oYXBwZW5zIHdoZW4gb25lIGlzIGEgc3RyaW5nIGxpdGVyYWwgYW5kIHRoZSBvdGhlciBpc24ndFxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvLyBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGtleXMgaW5jb3Jwb3JhdGVzXG4gIC8vIGhhc093blByb3BlcnR5KVxuICBpZiAoa2EubGVuZ3RoICE9IGtiLmxlbmd0aClcbiAgICByZXR1cm4gZmFsc2U7XG4gIC8vdGhlIHNhbWUgc2V0IG9mIGtleXMgKGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBvcmRlciksXG4gIGthLnNvcnQoKTtcbiAga2Iuc29ydCgpO1xuICAvL35+fmNoZWFwIGtleSB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgaWYgKGthW2ldICE9IGtiW2ldKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vZXF1aXZhbGVudCB2YWx1ZXMgZm9yIGV2ZXJ5IGNvcnJlc3BvbmRpbmcga2V5LCBhbmRcbiAgLy9+fn5wb3NzaWJseSBleHBlbnNpdmUgZGVlcCB0ZXN0XG4gIGZvciAoaSA9IGthLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAga2V5ID0ga2FbaV07XG4gICAgaWYgKCFkZWVwRXF1YWwoYVtrZXldLCBiW2tleV0sIG9wdHMpKSByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHR5cGVvZiBhID09PSB0eXBlb2YgYjtcbn1cbiIsIi8qXG4gKiBEYXRlIEZvcm1hdCAxLjIuM1xuICogKGMpIDIwMDctMjAwOSBTdGV2ZW4gTGV2aXRoYW4gPHN0ZXZlbmxldml0aGFuLmNvbT5cbiAqIE1JVCBsaWNlbnNlXG4gKlxuICogSW5jbHVkZXMgZW5oYW5jZW1lbnRzIGJ5IFNjb3R0IFRyZW5kYSA8c2NvdHQudHJlbmRhLm5ldD5cbiAqIGFuZCBLcmlzIEtvd2FsIDxjaXhhci5jb20vfmtyaXMua293YWwvPlxuICpcbiAqIEFjY2VwdHMgYSBkYXRlLCBhIG1hc2ssIG9yIGEgZGF0ZSBhbmQgYSBtYXNrLlxuICogUmV0dXJucyBhIGZvcm1hdHRlZCB2ZXJzaW9uIG9mIHRoZSBnaXZlbiBkYXRlLlxuICogVGhlIGRhdGUgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgZGF0ZS90aW1lLlxuICogVGhlIG1hc2sgZGVmYXVsdHMgdG8gZGF0ZUZvcm1hdC5tYXNrcy5kZWZhdWx0LlxuICovXG5cbihmdW5jdGlvbihnbG9iYWwpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciBkYXRlRm9ybWF0ID0gKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHRva2VuID0gL2R7MSw0fXxtezEsNH18eXkoPzp5eSk/fChbSGhNc1R0XSlcXDE/fFtMbG9TWldOXXxcIlteXCJdKlwifCdbXiddKicvZztcbiAgICAgIHZhciB0aW1lem9uZSA9IC9cXGIoPzpbUE1DRUFdW1NEUF1UfCg/OlBhY2lmaWN8TW91bnRhaW58Q2VudHJhbHxFYXN0ZXJufEF0bGFudGljKSAoPzpTdGFuZGFyZHxEYXlsaWdodHxQcmV2YWlsaW5nKSBUaW1lfCg/OkdNVHxVVEMpKD86Wy0rXVxcZHs0fSk/KVxcYi9nO1xuICAgICAgdmFyIHRpbWV6b25lQ2xpcCA9IC9bXi0rXFxkQS1aXS9nO1xuICBcbiAgICAgIC8vIFJlZ2V4ZXMgYW5kIHN1cHBvcnRpbmcgZnVuY3Rpb25zIGFyZSBjYWNoZWQgdGhyb3VnaCBjbG9zdXJlXG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGUsIG1hc2ssIHV0YywgZ210KSB7XG4gIFxuICAgICAgICAvLyBZb3UgY2FuJ3QgcHJvdmlkZSB1dGMgaWYgeW91IHNraXAgb3RoZXIgYXJncyAodXNlIHRoZSAnVVRDOicgbWFzayBwcmVmaXgpXG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxICYmIGtpbmRPZihkYXRlKSA9PT0gJ3N0cmluZycgJiYgIS9cXGQvLnRlc3QoZGF0ZSkpIHtcbiAgICAgICAgICBtYXNrID0gZGF0ZTtcbiAgICAgICAgICBkYXRlID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gIFxuICAgICAgICBkYXRlID0gZGF0ZSB8fCBuZXcgRGF0ZTtcbiAgXG4gICAgICAgIGlmKCEoZGF0ZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUpO1xuICAgICAgICB9XG4gIFxuICAgICAgICBpZiAoaXNOYU4oZGF0ZSkpIHtcbiAgICAgICAgICB0aHJvdyBUeXBlRXJyb3IoJ0ludmFsaWQgZGF0ZScpO1xuICAgICAgICB9XG4gIFxuICAgICAgICBtYXNrID0gU3RyaW5nKGRhdGVGb3JtYXQubWFza3NbbWFza10gfHwgbWFzayB8fCBkYXRlRm9ybWF0Lm1hc2tzWydkZWZhdWx0J10pO1xuICBcbiAgICAgICAgLy8gQWxsb3cgc2V0dGluZyB0aGUgdXRjL2dtdCBhcmd1bWVudCB2aWEgdGhlIG1hc2tcbiAgICAgICAgdmFyIG1hc2tTbGljZSA9IG1hc2suc2xpY2UoMCwgNCk7XG4gICAgICAgIGlmIChtYXNrU2xpY2UgPT09ICdVVEM6JyB8fCBtYXNrU2xpY2UgPT09ICdHTVQ6Jykge1xuICAgICAgICAgIG1hc2sgPSBtYXNrLnNsaWNlKDQpO1xuICAgICAgICAgIHV0YyA9IHRydWU7XG4gICAgICAgICAgaWYgKG1hc2tTbGljZSA9PT0gJ0dNVDonKSB7XG4gICAgICAgICAgICBnbXQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICBcbiAgICAgICAgdmFyIF8gPSB1dGMgPyAnZ2V0VVRDJyA6ICdnZXQnO1xuICAgICAgICB2YXIgZCA9IGRhdGVbXyArICdEYXRlJ10oKTtcbiAgICAgICAgdmFyIEQgPSBkYXRlW18gKyAnRGF5J10oKTtcbiAgICAgICAgdmFyIG0gPSBkYXRlW18gKyAnTW9udGgnXSgpO1xuICAgICAgICB2YXIgeSA9IGRhdGVbXyArICdGdWxsWWVhciddKCk7XG4gICAgICAgIHZhciBIID0gZGF0ZVtfICsgJ0hvdXJzJ10oKTtcbiAgICAgICAgdmFyIE0gPSBkYXRlW18gKyAnTWludXRlcyddKCk7XG4gICAgICAgIHZhciBzID0gZGF0ZVtfICsgJ1NlY29uZHMnXSgpO1xuICAgICAgICB2YXIgTCA9IGRhdGVbXyArICdNaWxsaXNlY29uZHMnXSgpO1xuICAgICAgICB2YXIgbyA9IHV0YyA/IDAgOiBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gICAgICAgIHZhciBXID0gZ2V0V2VlayhkYXRlKTtcbiAgICAgICAgdmFyIE4gPSBnZXREYXlPZldlZWsoZGF0ZSk7XG4gICAgICAgIHZhciBmbGFncyA9IHtcbiAgICAgICAgICBkOiAgICBkLFxuICAgICAgICAgIGRkOiAgIHBhZChkKSxcbiAgICAgICAgICBkZGQ6ICBkYXRlRm9ybWF0LmkxOG4uZGF5TmFtZXNbRF0sXG4gICAgICAgICAgZGRkZDogZGF0ZUZvcm1hdC5pMThuLmRheU5hbWVzW0QgKyA3XSxcbiAgICAgICAgICBtOiAgICBtICsgMSxcbiAgICAgICAgICBtbTogICBwYWQobSArIDEpLFxuICAgICAgICAgIG1tbTogIGRhdGVGb3JtYXQuaTE4bi5tb250aE5hbWVzW21dLFxuICAgICAgICAgIG1tbW06IGRhdGVGb3JtYXQuaTE4bi5tb250aE5hbWVzW20gKyAxMl0sXG4gICAgICAgICAgeXk6ICAgU3RyaW5nKHkpLnNsaWNlKDIpLFxuICAgICAgICAgIHl5eXk6IHksXG4gICAgICAgICAgaDogICAgSCAlIDEyIHx8IDEyLFxuICAgICAgICAgIGhoOiAgIHBhZChIICUgMTIgfHwgMTIpLFxuICAgICAgICAgIEg6ICAgIEgsXG4gICAgICAgICAgSEg6ICAgcGFkKEgpLFxuICAgICAgICAgIE06ICAgIE0sXG4gICAgICAgICAgTU06ICAgcGFkKE0pLFxuICAgICAgICAgIHM6ICAgIHMsXG4gICAgICAgICAgc3M6ICAgcGFkKHMpLFxuICAgICAgICAgIGw6ICAgIHBhZChMLCAzKSxcbiAgICAgICAgICBMOiAgICBwYWQoTWF0aC5yb3VuZChMIC8gMTApKSxcbiAgICAgICAgICB0OiAgICBIIDwgMTIgPyBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzBdIDogZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1sxXSxcbiAgICAgICAgICB0dDogICBIIDwgMTIgPyBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzJdIDogZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1szXSxcbiAgICAgICAgICBUOiAgICBIIDwgMTIgPyBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzRdIDogZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1s1XSxcbiAgICAgICAgICBUVDogICBIIDwgMTIgPyBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzZdIDogZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1s3XSxcbiAgICAgICAgICBaOiAgICBnbXQgPyAnR01UJyA6IHV0YyA/ICdVVEMnIDogKFN0cmluZyhkYXRlKS5tYXRjaCh0aW1lem9uZSkgfHwgWycnXSkucG9wKCkucmVwbGFjZSh0aW1lem9uZUNsaXAsICcnKSxcbiAgICAgICAgICBvOiAgICAobyA+IDAgPyAnLScgOiAnKycpICsgcGFkKE1hdGguZmxvb3IoTWF0aC5hYnMobykgLyA2MCkgKiAxMDAgKyBNYXRoLmFicyhvKSAlIDYwLCA0KSxcbiAgICAgICAgICBTOiAgICBbJ3RoJywgJ3N0JywgJ25kJywgJ3JkJ11bZCAlIDEwID4gMyA/IDAgOiAoZCAlIDEwMCAtIGQgJSAxMCAhPSAxMCkgKiBkICUgMTBdLFxuICAgICAgICAgIFc6ICAgIFcsXG4gICAgICAgICAgTjogICAgTlxuICAgICAgICB9O1xuICBcbiAgICAgICAgcmV0dXJuIG1hc2sucmVwbGFjZSh0b2tlbiwgZnVuY3Rpb24gKG1hdGNoKSB7XG4gICAgICAgICAgaWYgKG1hdGNoIGluIGZsYWdzKSB7XG4gICAgICAgICAgICByZXR1cm4gZmxhZ3NbbWF0Y2hdO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbWF0Y2guc2xpY2UoMSwgbWF0Y2gubGVuZ3RoIC0gMSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9KSgpO1xuXG4gIGRhdGVGb3JtYXQubWFza3MgPSB7XG4gICAgJ2RlZmF1bHQnOiAgICAgICAgICAgICAgICdkZGQgbW1tIGRkIHl5eXkgSEg6TU06c3MnLFxuICAgICdzaG9ydERhdGUnOiAgICAgICAgICAgICAnbS9kL3l5JyxcbiAgICAnbWVkaXVtRGF0ZSc6ICAgICAgICAgICAgJ21tbSBkLCB5eXl5JyxcbiAgICAnbG9uZ0RhdGUnOiAgICAgICAgICAgICAgJ21tbW0gZCwgeXl5eScsXG4gICAgJ2Z1bGxEYXRlJzogICAgICAgICAgICAgICdkZGRkLCBtbW1tIGQsIHl5eXknLFxuICAgICdzaG9ydFRpbWUnOiAgICAgICAgICAgICAnaDpNTSBUVCcsXG4gICAgJ21lZGl1bVRpbWUnOiAgICAgICAgICAgICdoOk1NOnNzIFRUJyxcbiAgICAnbG9uZ1RpbWUnOiAgICAgICAgICAgICAgJ2g6TU06c3MgVFQgWicsXG4gICAgJ2lzb0RhdGUnOiAgICAgICAgICAgICAgICd5eXl5LW1tLWRkJyxcbiAgICAnaXNvVGltZSc6ICAgICAgICAgICAgICAgJ0hIOk1NOnNzJyxcbiAgICAnaXNvRGF0ZVRpbWUnOiAgICAgICAgICAgJ3l5eXktbW0tZGRcXCdUXFwnSEg6TU06c3NvJyxcbiAgICAnaXNvVXRjRGF0ZVRpbWUnOiAgICAgICAgJ1VUQzp5eXl5LW1tLWRkXFwnVFxcJ0hIOk1NOnNzXFwnWlxcJycsXG4gICAgJ2V4cGlyZXNIZWFkZXJGb3JtYXQnOiAgICdkZGQsIGRkIG1tbSB5eXl5IEhIOk1NOnNzIFonXG4gIH07XG5cbiAgLy8gSW50ZXJuYXRpb25hbGl6YXRpb24gc3RyaW5nc1xuICBkYXRlRm9ybWF0LmkxOG4gPSB7XG4gICAgZGF5TmFtZXM6IFtcbiAgICAgICdTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLCAnVGh1JywgJ0ZyaScsICdTYXQnLFxuICAgICAgJ1N1bmRheScsICdNb25kYXknLCAnVHVlc2RheScsICdXZWRuZXNkYXknLCAnVGh1cnNkYXknLCAnRnJpZGF5JywgJ1NhdHVyZGF5J1xuICAgIF0sXG4gICAgbW9udGhOYW1lczogW1xuICAgICAgJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJywgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJyxcbiAgICAgICdKYW51YXJ5JywgJ0ZlYnJ1YXJ5JywgJ01hcmNoJywgJ0FwcmlsJywgJ01heScsICdKdW5lJywgJ0p1bHknLCAnQXVndXN0JywgJ1NlcHRlbWJlcicsICdPY3RvYmVyJywgJ05vdmVtYmVyJywgJ0RlY2VtYmVyJ1xuICAgIF0sXG4gICAgdGltZU5hbWVzOiBbXG4gICAgICAnYScsICdwJywgJ2FtJywgJ3BtJywgJ0EnLCAnUCcsICdBTScsICdQTSdcbiAgICBdXG4gIH07XG5cbmZ1bmN0aW9uIHBhZCh2YWwsIGxlbikge1xuICB2YWwgPSBTdHJpbmcodmFsKTtcbiAgbGVuID0gbGVuIHx8IDI7XG4gIHdoaWxlICh2YWwubGVuZ3RoIDwgbGVuKSB7XG4gICAgdmFsID0gJzAnICsgdmFsO1xuICB9XG4gIHJldHVybiB2YWw7XG59XG5cbi8qKlxuICogR2V0IHRoZSBJU08gODYwMSB3ZWVrIG51bWJlclxuICogQmFzZWQgb24gY29tbWVudHMgZnJvbVxuICogaHR0cDovL3RlY2hibG9nLnByb2N1cmlvcy5ubC9rL242MTgvbmV3cy92aWV3LzMzNzk2LzE0ODYzL0NhbGN1bGF0ZS1JU08tODYwMS13ZWVrLWFuZC15ZWFyLWluLWphdmFzY3JpcHQuaHRtbFxuICpcbiAqIEBwYXJhbSAge09iamVjdH0gYGRhdGVgXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldFdlZWsoZGF0ZSkge1xuICAvLyBSZW1vdmUgdGltZSBjb21wb25lbnRzIG9mIGRhdGVcbiAgdmFyIHRhcmdldFRodXJzZGF5ID0gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKTtcblxuICAvLyBDaGFuZ2UgZGF0ZSB0byBUaHVyc2RheSBzYW1lIHdlZWtcbiAgdGFyZ2V0VGh1cnNkYXkuc2V0RGF0ZSh0YXJnZXRUaHVyc2RheS5nZXREYXRlKCkgLSAoKHRhcmdldFRodXJzZGF5LmdldERheSgpICsgNikgJSA3KSArIDMpO1xuXG4gIC8vIFRha2UgSmFudWFyeSA0dGggYXMgaXQgaXMgYWx3YXlzIGluIHdlZWsgMSAoc2VlIElTTyA4NjAxKVxuICB2YXIgZmlyc3RUaHVyc2RheSA9IG5ldyBEYXRlKHRhcmdldFRodXJzZGF5LmdldEZ1bGxZZWFyKCksIDAsIDQpO1xuXG4gIC8vIENoYW5nZSBkYXRlIHRvIFRodXJzZGF5IHNhbWUgd2Vla1xuICBmaXJzdFRodXJzZGF5LnNldERhdGUoZmlyc3RUaHVyc2RheS5nZXREYXRlKCkgLSAoKGZpcnN0VGh1cnNkYXkuZ2V0RGF5KCkgKyA2KSAlIDcpICsgMyk7XG5cbiAgLy8gQ2hlY2sgaWYgZGF5bGlnaHQtc2F2aW5nLXRpbWUtc3dpdGNoIG9jY3VycmVkIGFuZCBjb3JyZWN0IGZvciBpdFxuICB2YXIgZHMgPSB0YXJnZXRUaHVyc2RheS5nZXRUaW1lem9uZU9mZnNldCgpIC0gZmlyc3RUaHVyc2RheS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICB0YXJnZXRUaHVyc2RheS5zZXRIb3Vycyh0YXJnZXRUaHVyc2RheS5nZXRIb3VycygpIC0gZHMpO1xuXG4gIC8vIE51bWJlciBvZiB3ZWVrcyBiZXR3ZWVuIHRhcmdldCBUaHVyc2RheSBhbmQgZmlyc3QgVGh1cnNkYXlcbiAgdmFyIHdlZWtEaWZmID0gKHRhcmdldFRodXJzZGF5IC0gZmlyc3RUaHVyc2RheSkgLyAoODY0MDAwMDAqNyk7XG4gIHJldHVybiAxICsgTWF0aC5mbG9vcih3ZWVrRGlmZik7XG59XG5cbi8qKlxuICogR2V0IElTTy04NjAxIG51bWVyaWMgcmVwcmVzZW50YXRpb24gb2YgdGhlIGRheSBvZiB0aGUgd2Vla1xuICogMSAoZm9yIE1vbmRheSkgdGhyb3VnaCA3IChmb3IgU3VuZGF5KVxuICogXG4gKiBAcGFyYW0gIHtPYmplY3R9IGBkYXRlYFxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG5mdW5jdGlvbiBnZXREYXlPZldlZWsoZGF0ZSkge1xuICB2YXIgZG93ID0gZGF0ZS5nZXREYXkoKTtcbiAgaWYoZG93ID09PSAwKSB7XG4gICAgZG93ID0gNztcbiAgfVxuICByZXR1cm4gZG93O1xufVxuXG4vKipcbiAqIGtpbmQtb2Ygc2hvcnRjdXRcbiAqIEBwYXJhbSAgeyp9IHZhbFxuICogQHJldHVybiB7U3RyaW5nfVxuICovXG5mdW5jdGlvbiBraW5kT2YodmFsKSB7XG4gIGlmICh2YWwgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ251bGwnO1xuICB9XG5cbiAgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICd1bmRlZmluZWQnO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWwgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB2YWw7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgcmV0dXJuICdhcnJheSc7XG4gIH1cblxuICByZXR1cm4ge30udG9TdHJpbmcuY2FsbCh2YWwpXG4gICAgLnNsaWNlKDgsIC0xKS50b0xvd2VyQ2FzZSgpO1xufTtcblxuXG5cbiAgaWYgKHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gZGF0ZUZvcm1hdDtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IGRhdGVGb3JtYXQ7XG4gIH0gZWxzZSB7XG4gICAgZ2xvYmFsLmRhdGVGb3JtYXQgPSBkYXRlRm9ybWF0O1xuICB9XG59KSh0aGlzKTtcbiIsIi8qIVxuICogcGFkLWxlZnQgPGh0dHBzOi8vZ2l0aHViLmNvbS9qb25zY2hsaW5rZXJ0L3BhZC1sZWZ0PlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBKb24gU2NobGlua2VydC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbnZhciByZXBlYXQgPSByZXF1aXJlKCdyZXBlYXQtc3RyaW5nJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFkTGVmdChzdHIsIG51bSwgY2gpIHtcbiAgc3RyID0gc3RyLnRvU3RyaW5nKCk7XG5cbiAgaWYgKHR5cGVvZiBudW0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIGlmIChjaCA9PT0gMCkge1xuICAgIGNoID0gJzAnO1xuICB9IGVsc2UgaWYgKGNoKSB7XG4gICAgY2ggPSBjaC50b1N0cmluZygpO1xuICB9IGVsc2Uge1xuICAgIGNoID0gJyAnO1xuICB9XG5cbiAgcmV0dXJuIHJlcGVhdChjaCwgbnVtIC0gc3RyLmxlbmd0aCkgKyBzdHI7XG59O1xuIiwiaW1wb3J0IGRhdGVmb3JtYXQgZnJvbSAnZGF0ZWZvcm1hdCc7XG5pbXBvcnQgYXNzaWduIGZyb20gJ29iamVjdC1hc3NpZ24nO1xuaW1wb3J0IHBhZExlZnQgZnJvbSAncGFkLWxlZnQnO1xuaW1wb3J0IHsgZ2V0Q2xpZW50QVBJIH0gZnJvbSAnLi91dGlsJztcblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9O1xubGV0IGxpbms7XG5sZXQgZGVmYXVsdEV4dHMgPSB7IGV4dGVuc2lvbjogJycsIHByZWZpeDogJycsIHN1ZmZpeDogJycgfTtcblxuLy8gQWx0ZXJuYXRpdmUgc29sdXRpb24gZm9yIHNhdmluZyBmaWxlcyxcbi8vIGEgYml0IHNsb3dlciBhbmQgZG9lcyBub3Qgd29yayBpbiBTYWZhcmlcbi8vIGZ1bmN0aW9uIGZldGNoQmxvYkZyb21EYXRhVVJMIChkYXRhVVJMKSB7XG4vLyAgIHJldHVybiB3aW5kb3cuZmV0Y2goZGF0YVVSTCkudGhlbihyZXMgPT4gcmVzLmJsb2IoKSk7XG4vLyB9XG5cbmNvbnN0IHN1cHBvcnRlZEVuY29kaW5ncyA9IFtcbiAgJ2ltYWdlL3BuZycsXG4gICdpbWFnZS9qcGVnJyxcbiAgJ2ltYWdlL3dlYnAnXG5dO1xuXG5mdW5jdGlvbiBzdHJlYW0gKGlzU3RhcnQsIG9wdHMgPSB7fSkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIG9wdHMgPSBhc3NpZ24oe30sIGRlZmF1bHRFeHRzLCBvcHRzKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IHJlc29sdmVGaWxlbmFtZShPYmplY3QuYXNzaWduKHt9LCBvcHRzLCB7XG4gICAgICBleHRlbnNpb246ICcnLFxuICAgICAgZnJhbWU6IHVuZGVmaW5lZFxuICAgIH0pKTtcbiAgICBjb25zdCBmdW5jID0gaXNTdGFydCA/ICdzdHJlYW1TdGFydCcgOiAnc3RyZWFtRW5kJztcbiAgICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgICBpZiAoY2xpZW50ICYmIGNsaWVudC5vdXRwdXQgJiYgdHlwZW9mIGNsaWVudFtmdW5jXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGNsaWVudFtmdW5jXShhc3NpZ24oe30sIG9wdHMsIHsgZmlsZW5hbWUgfSkpXG4gICAgICAgIC50aGVuKGV2ID0+IHJlc29sdmUoZXYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHJlc29sdmUoeyBmaWxlbmFtZSwgY2xpZW50OiBmYWxzZSB9KTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyZWFtU3RhcnQgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gc3RyZWFtKHRydWUsIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyZWFtRW5kIChvcHRzID0ge30pIHtcbiAgcmV0dXJuIHN0cmVhbShmYWxzZSwgb3B0cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHBvcnRDYW52YXMgKGNhbnZhcywgb3B0ID0ge30pIHtcbiAgY29uc3QgZW5jb2RpbmcgPSBvcHQuZW5jb2RpbmcgfHwgJ2ltYWdlL3BuZyc7XG4gIGlmICghc3VwcG9ydGVkRW5jb2RpbmdzLmluY2x1ZGVzKGVuY29kaW5nKSkgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGNhbnZhcyBlbmNvZGluZyAke2VuY29kaW5nfWApO1xuICBsZXQgZXh0ZW5zaW9uID0gKGVuY29kaW5nLnNwbGl0KCcvJylbMV0gfHwgJycpLnJlcGxhY2UoL2pwZWcvaSwgJ2pwZycpO1xuICBpZiAoZXh0ZW5zaW9uKSBleHRlbnNpb24gPSBgLiR7ZXh0ZW5zaW9ufWAudG9Mb3dlckNhc2UoKTtcbiAgcmV0dXJuIHtcbiAgICBleHRlbnNpb24sXG4gICAgdHlwZTogZW5jb2RpbmcsXG4gICAgZGF0YVVSTDogY2FudmFzLnRvRGF0YVVSTChlbmNvZGluZywgb3B0LmVuY29kaW5nUXVhbGl0eSlcbiAgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQmxvYkZyb21EYXRhVVJMIChkYXRhVVJMKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgIGNvbnN0IHNwbGl0SW5kZXggPSBkYXRhVVJMLmluZGV4T2YoJywnKTtcbiAgICBpZiAoc3BsaXRJbmRleCA9PT0gLTEpIHtcbiAgICAgIHJlc29sdmUobmV3IHdpbmRvdy5CbG9iKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBiYXNlNjQgPSBkYXRhVVJMLnNsaWNlKHNwbGl0SW5kZXggKyAxKTtcbiAgICBjb25zdCBieXRlU3RyaW5nID0gd2luZG93LmF0b2IoYmFzZTY0KTtcbiAgICBjb25zdCB0eXBlID0gZGF0YVVSTC5zbGljZSgwLCBzcGxpdEluZGV4KTtcbiAgICBjb25zdCBtaW1lTWF0Y2ggPSAvZGF0YTooW147XSspLy5leGVjKHR5cGUpO1xuICAgIGNvbnN0IG1pbWUgPSAobWltZU1hdGNoID8gbWltZU1hdGNoWzFdIDogJycpIHx8IHVuZGVmaW5lZDtcbiAgICBjb25zdCBhYiA9IG5ldyBBcnJheUJ1ZmZlcihieXRlU3RyaW5nLmxlbmd0aCk7XG4gICAgY29uc3QgaWEgPSBuZXcgVWludDhBcnJheShhYik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlU3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpYVtpXSA9IGJ5dGVTdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgICB9XG4gICAgcmVzb2x2ZShuZXcgd2luZG93LkJsb2IoWyBhYiBdLCB7IHR5cGU6IG1pbWUgfSkpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdmVEYXRhVVJMIChkYXRhVVJMLCBvcHRzID0ge30pIHtcbiAgcmV0dXJuIGNyZWF0ZUJsb2JGcm9tRGF0YVVSTChkYXRhVVJMKVxuICAgIC50aGVuKGJsb2IgPT4gc2F2ZUJsb2IoYmxvYiwgb3B0cykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUJsb2IgKGJsb2IsIG9wdHMgPSB7fSkge1xuICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgb3B0cyA9IGFzc2lnbih7fSwgZGVmYXVsdEV4dHMsIG9wdHMpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gb3B0cy5maWxlbmFtZTtcblxuICAgIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICAgIGlmIChjbGllbnQgJiYgdHlwZW9mIGNsaWVudC5zYXZlQmxvYiA9PT0gJ2Z1bmN0aW9uJyAmJiBjbGllbnQub3V0cHV0KSB7XG4gICAgICAvLyBuYXRpdmUgc2F2aW5nIHVzaW5nIGEgQ0xJIHRvb2xcbiAgICAgIHJldHVybiBjbGllbnQuc2F2ZUJsb2IoYmxvYiwgYXNzaWduKHt9LCBvcHRzLCB7IGZpbGVuYW1lIH0pKVxuICAgICAgICAudGhlbihldiA9PiByZXNvbHZlKGV2KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZvcmNlIGRvd25sb2FkXG4gICAgICBpZiAoIWxpbmspIHtcbiAgICAgICAgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgbGluay5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgIGxpbmsudGFyZ2V0ID0gJ19ibGFuayc7XG4gICAgICB9XG4gICAgICBsaW5rLmRvd25sb2FkID0gZmlsZW5hbWU7XG4gICAgICBsaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XG4gICAgICBsaW5rLm9uY2xpY2sgPSAoKSA9PiB7XG4gICAgICAgIGxpbmsub25jbGljayA9IG5vb3A7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHdpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgICAgIGlmIChsaW5rLnBhcmVudEVsZW1lbnQpIGxpbmsucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChsaW5rKTtcbiAgICAgICAgICBsaW5rLnJlbW92ZUF0dHJpYnV0ZSgnaHJlZicpO1xuICAgICAgICAgIHJlc29sdmUoeyBmaWxlbmFtZSwgY2xpZW50OiBmYWxzZSB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgbGluay5jbGljaygpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXZlRmlsZSAoZGF0YSwgb3B0cyA9IHt9KSB7XG4gIGNvbnN0IHBhcnRzID0gQXJyYXkuaXNBcnJheShkYXRhKSA/IGRhdGEgOiBbIGRhdGEgXTtcbiAgY29uc3QgYmxvYiA9IG5ldyB3aW5kb3cuQmxvYihwYXJ0cywgeyB0eXBlOiBvcHRzLnR5cGUgfHwgJycgfSk7XG4gIHJldHVybiBzYXZlQmxvYihibG9iLCBvcHRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFRpbWVTdGFtcCAoKSB7XG4gIGNvbnN0IGRhdGVGb3JtYXRTdHIgPSBgeXl5eS5tbS5kZC1ISC5NTS5zc2A7XG4gIHJldHVybiBkYXRlZm9ybWF0KG5ldyBEYXRlKCksIGRhdGVGb3JtYXRTdHIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdEZpbGUgKHByZWZpeCA9ICcnLCBzdWZmaXggPSAnJywgZXh0KSB7XG4gIC8vIGNvbnN0IGRhdGVGb3JtYXRTdHIgPSBgeXl5eS5tbS5kZC1ISC5NTS5zc2A7XG4gIGNvbnN0IGRhdGVGb3JtYXRTdHIgPSBgeXl5eS1tbS1kZCAnYXQnIGguTU0uc3MgVFRgO1xuICByZXR1cm4gYCR7cHJlZml4fSR7ZGF0ZWZvcm1hdChuZXcgRGF0ZSgpLCBkYXRlRm9ybWF0U3RyKX0ke3N1ZmZpeH0ke2V4dH1gO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZUZpbGVuYW1lIChvcHQgPSB7fSkge1xuICBvcHQgPSBhc3NpZ24oe30sIG9wdCk7XG5cbiAgLy8gQ3VzdG9tIGZpbGVuYW1lIGZ1bmN0aW9uXG4gIGlmICh0eXBlb2Ygb3B0LmZpbGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gb3B0LmZpbGUob3B0KTtcbiAgfSBlbHNlIGlmIChvcHQuZmlsZSkge1xuICAgIHJldHVybiBvcHQuZmlsZTtcbiAgfVxuXG4gIGxldCBmcmFtZSA9IG51bGw7XG4gIGxldCBleHRlbnNpb24gPSAnJztcbiAgaWYgKHR5cGVvZiBvcHQuZXh0ZW5zaW9uID09PSAnc3RyaW5nJykgZXh0ZW5zaW9uID0gb3B0LmV4dGVuc2lvbjtcblxuICBpZiAodHlwZW9mIG9wdC5mcmFtZSA9PT0gJ251bWJlcicpIHtcbiAgICBsZXQgdG90YWxGcmFtZXM7XG4gICAgaWYgKHR5cGVvZiBvcHQudG90YWxGcmFtZXMgPT09ICdudW1iZXInKSB7XG4gICAgICB0b3RhbEZyYW1lcyA9IG9wdC50b3RhbEZyYW1lcztcbiAgICB9IGVsc2Uge1xuICAgICAgdG90YWxGcmFtZXMgPSBNYXRoLm1heCgxMDAwMCwgb3B0LmZyYW1lKTtcbiAgICB9XG4gICAgZnJhbWUgPSBwYWRMZWZ0KFN0cmluZyhvcHQuZnJhbWUpLCBTdHJpbmcodG90YWxGcmFtZXMpLmxlbmd0aCwgJzAnKTtcbiAgfVxuXG4gIGNvbnN0IGxheWVyU3RyID0gaXNGaW5pdGUob3B0LnRvdGFsTGF5ZXJzKSAmJiBpc0Zpbml0ZShvcHQubGF5ZXIpICYmIG9wdC50b3RhbExheWVycyA+IDEgPyBgJHtvcHQubGF5ZXJ9YCA6ICcnO1xuICBpZiAoZnJhbWUgIT0gbnVsbCkge1xuICAgIHJldHVybiBbIGxheWVyU3RyLCBmcmFtZSBdLmZpbHRlcihCb29sZWFuKS5qb2luKCctJykgKyBleHRlbnNpb247XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZGVmYXVsdEZpbGVOYW1lID0gb3B0LnRpbWVTdGFtcDtcbiAgICByZXR1cm4gWyBvcHQucHJlZml4LCBvcHQubmFtZSB8fCBkZWZhdWx0RmlsZU5hbWUsIGxheWVyU3RyLCBvcHQuaGFzaCwgb3B0LnN1ZmZpeCBdLmZpbHRlcihCb29sZWFuKS5qb2luKCctJykgKyBleHRlbnNpb247XG4gIH1cbn1cbiIsIi8vIEhhbmRsZSBzb21lIGNvbW1vbiB0eXBvc1xuY29uc3QgY29tbW9uVHlwb3MgPSB7XG4gIGRpbWVuc2lvbjogJ2RpbWVuc2lvbnMnLFxuICBhbmltYXRlZDogJ2FuaW1hdGUnLFxuICBhbmltYXRpbmc6ICdhbmltYXRlJyxcbiAgdW5pdDogJ3VuaXRzJyxcbiAgUDU6ICdwNScsXG4gIHBpeGVsbGF0ZWQ6ICdwaXhlbGF0ZWQnLFxuICBsb29waW5nOiAnbG9vcCcsXG4gIHBpeGVsUGVySW5jaDogJ3BpeGVscydcbn07XG5cbi8vIEhhbmRsZSBhbGwgb3RoZXIgdHlwb3NcbmNvbnN0IGFsbEtleXMgPSBbXG4gICdkaW1lbnNpb25zJywgJ3VuaXRzJywgJ3BpeGVsc1BlckluY2gnLCAnb3JpZW50YXRpb24nLFxuICAnc2NhbGVUb0ZpdCcsICdzY2FsZVRvVmlldycsICdibGVlZCcsICdwaXhlbFJhdGlvJyxcbiAgJ2V4cG9ydFBpeGVsUmF0aW8nLCAnbWF4UGl4ZWxSYXRpbycsICdzY2FsZUNvbnRleHQnLFxuICAncmVzaXplQ2FudmFzJywgJ3N0eWxlQ2FudmFzJywgJ2NhbnZhcycsICdjb250ZXh0JywgJ2F0dHJpYnV0ZXMnLFxuICAncGFyZW50JywgJ2ZpbGUnLCAnbmFtZScsICdwcmVmaXgnLCAnc3VmZml4JywgJ2FuaW1hdGUnLCAncGxheWluZycsXG4gICdsb29wJywgJ2R1cmF0aW9uJywgJ3RvdGFsRnJhbWVzJywgJ2ZwcycsICdwbGF5YmFja1JhdGUnLCAndGltZVNjYWxlJyxcbiAgJ2ZyYW1lJywgJ3RpbWUnLCAnZmx1c2gnLCAncGl4ZWxhdGVkJywgJ2hvdGtleXMnLCAncDUnLCAnaWQnLFxuICAnc2NhbGVUb0ZpdFBhZGRpbmcnLCAnZGF0YScsICdwYXJhbXMnLCAnZW5jb2RpbmcnLCAnZW5jb2RpbmdRdWFsaXR5J1xuXTtcblxuLy8gVGhpcyBpcyBmYWlybHkgb3BpbmlvbmF0ZWQgYW5kIGZvcmNlcyB1c2VycyB0byB1c2UgdGhlICdkYXRhJyBwYXJhbWV0ZXJcbi8vIGlmIHRoZXkgd2FudCB0byBwYXNzIGFsb25nIG5vbi1zZXR0aW5nIG9iamVjdHMuLi5cbmV4cG9ydCBjb25zdCBjaGVja1NldHRpbmdzID0gKHNldHRpbmdzKSA9PiB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzZXR0aW5ncyk7XG4gIGtleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgIGlmIChrZXkgaW4gY29tbW9uVHlwb3MpIHtcbiAgICAgIGNvbnN0IGFjdHVhbCA9IGNvbW1vblR5cG9zW2tleV07XG4gICAgICBjb25zb2xlLndhcm4oYFtjYW52YXMtc2tldGNoXSBDb3VsZCBub3QgcmVjb2duaXplIHRoZSBzZXR0aW5nIFwiJHtrZXl9XCIsIGRpZCB5b3UgbWVhbiBcIiR7YWN0dWFsfVwiP2ApO1xuICAgIH0gZWxzZSBpZiAoIWFsbEtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgY29uc29sZS53YXJuKGBbY2FudmFzLXNrZXRjaF0gQ291bGQgbm90IHJlY29nbml6ZSB0aGUgc2V0dGluZyBcIiR7a2V5fVwiYCk7XG4gICAgfVxuICB9KTtcbn07XG4iLCJjb25zdCBkZWZhdWx0VW5pdHMgPSAnbW0nO1xuXG5jb25zdCBkYXRhID0gW1xuICAvLyBDb21tb24gUGFwZXIgU2l6ZXNcbiAgLy8gKE1vc3RseSBOb3J0aC1BbWVyaWNhbiBiYXNlZClcbiAgWyAncG9zdGNhcmQnLCAxMDEuNiwgMTUyLjQgXSxcbiAgWyAncG9zdGVyLXNtYWxsJywgMjgwLCA0MzAgXSxcbiAgWyAncG9zdGVyJywgNDYwLCA2MTAgXSxcbiAgWyAncG9zdGVyLWxhcmdlJywgNjEwLCA5MTAgXSxcbiAgWyAnYnVzaW5lc3MtY2FyZCcsIDUwLjgsIDg4LjkgXSxcblxuICAvLyBQaG90b2dyYXBoaWMgUHJpbnQgUGFwZXIgU2l6ZXNcbiAgWyAnMnInLCA2NCwgODkgXSxcbiAgWyAnM3InLCA4OSwgMTI3IF0sXG4gIFsgJzRyJywgMTAyLCAxNTIgXSxcbiAgWyAnNXInLCAxMjcsIDE3OCBdLCAvLyA14oCzeDfigLNcbiAgWyAnNnInLCAxNTIsIDIwMyBdLCAvLyA24oCzeDjigLNcbiAgWyAnOHInLCAyMDMsIDI1NCBdLCAvLyA44oCzeDEw4oCzXG4gIFsgJzEwcicsIDI1NCwgMzA1IF0sIC8vIDEw4oCzeDEy4oCzXG4gIFsgJzExcicsIDI3OSwgMzU2IF0sIC8vIDEx4oCzeDE04oCzXG4gIFsgJzEycicsIDMwNSwgMzgxIF0sXG5cbiAgLy8gU3RhbmRhcmQgUGFwZXIgU2l6ZXNcbiAgWyAnYTAnLCA4NDEsIDExODkgXSxcbiAgWyAnYTEnLCA1OTQsIDg0MSBdLFxuICBbICdhMicsIDQyMCwgNTk0IF0sXG4gIFsgJ2EzJywgMjk3LCA0MjAgXSxcbiAgWyAnYTQnLCAyMTAsIDI5NyBdLFxuICBbICdhNScsIDE0OCwgMjEwIF0sXG4gIFsgJ2E2JywgMTA1LCAxNDggXSxcbiAgWyAnYTcnLCA3NCwgMTA1IF0sXG4gIFsgJ2E4JywgNTIsIDc0IF0sXG4gIFsgJ2E5JywgMzcsIDUyIF0sXG4gIFsgJ2ExMCcsIDI2LCAzNyBdLFxuICBbICcyYTAnLCAxMTg5LCAxNjgyIF0sXG4gIFsgJzRhMCcsIDE2ODIsIDIzNzggXSxcbiAgWyAnYjAnLCAxMDAwLCAxNDE0IF0sXG4gIFsgJ2IxJywgNzA3LCAxMDAwIF0sXG4gIFsgJ2IxKycsIDcyMCwgMTAyMCBdLFxuICBbICdiMicsIDUwMCwgNzA3IF0sXG4gIFsgJ2IyKycsIDUyMCwgNzIwIF0sXG4gIFsgJ2IzJywgMzUzLCA1MDAgXSxcbiAgWyAnYjQnLCAyNTAsIDM1MyBdLFxuICBbICdiNScsIDE3NiwgMjUwIF0sXG4gIFsgJ2I2JywgMTI1LCAxNzYgXSxcbiAgWyAnYjcnLCA4OCwgMTI1IF0sXG4gIFsgJ2I4JywgNjIsIDg4IF0sXG4gIFsgJ2I5JywgNDQsIDYyIF0sXG4gIFsgJ2IxMCcsIDMxLCA0NCBdLFxuICBbICdiMTEnLCAyMiwgMzIgXSxcbiAgWyAnYjEyJywgMTYsIDIyIF0sXG4gIFsgJ2MwJywgOTE3LCAxMjk3IF0sXG4gIFsgJ2MxJywgNjQ4LCA5MTcgXSxcbiAgWyAnYzInLCA0NTgsIDY0OCBdLFxuICBbICdjMycsIDMyNCwgNDU4IF0sXG4gIFsgJ2M0JywgMjI5LCAzMjQgXSxcbiAgWyAnYzUnLCAxNjIsIDIyOSBdLFxuICBbICdjNicsIDExNCwgMTYyIF0sXG4gIFsgJ2M3JywgODEsIDExNCBdLFxuICBbICdjOCcsIDU3LCA4MSBdLFxuICBbICdjOScsIDQwLCA1NyBdLFxuICBbICdjMTAnLCAyOCwgNDAgXSxcbiAgWyAnYzExJywgMjIsIDMyIF0sXG4gIFsgJ2MxMicsIDE2LCAyMiBdLFxuXG4gIC8vIFVzZSBpbmNoZXMgZm9yIE5vcnRoIEFtZXJpY2FuIHNpemVzLFxuICAvLyBhcyBpdCBwcm9kdWNlcyBsZXNzIGZsb2F0IHByZWNpc2lvbiBlcnJvcnNcbiAgWyAnaGFsZi1sZXR0ZXInLCA1LjUsIDguNSwgJ2luJyBdLFxuICBbICdsZXR0ZXInLCA4LjUsIDExLCAnaW4nIF0sXG4gIFsgJ2xlZ2FsJywgOC41LCAxNCwgJ2luJyBdLFxuICBbICdqdW5pb3ItbGVnYWwnLCA1LCA4LCAnaW4nIF0sXG4gIFsgJ2xlZGdlcicsIDExLCAxNywgJ2luJyBdLFxuICBbICd0YWJsb2lkJywgMTEsIDE3LCAnaW4nIF0sXG4gIFsgJ2Fuc2ktYScsIDguNSwgMTEuMCwgJ2luJyBdLFxuICBbICdhbnNpLWInLCAxMS4wLCAxNy4wLCAnaW4nIF0sXG4gIFsgJ2Fuc2ktYycsIDE3LjAsIDIyLjAsICdpbicgXSxcbiAgWyAnYW5zaS1kJywgMjIuMCwgMzQuMCwgJ2luJyBdLFxuICBbICdhbnNpLWUnLCAzNC4wLCA0NC4wLCAnaW4nIF0sXG4gIFsgJ2FyY2gtYScsIDksIDEyLCAnaW4nIF0sXG4gIFsgJ2FyY2gtYicsIDEyLCAxOCwgJ2luJyBdLFxuICBbICdhcmNoLWMnLCAxOCwgMjQsICdpbicgXSxcbiAgWyAnYXJjaC1kJywgMjQsIDM2LCAnaW4nIF0sXG4gIFsgJ2FyY2gtZScsIDM2LCA0OCwgJ2luJyBdLFxuICBbICdhcmNoLWUxJywgMzAsIDQyLCAnaW4nIF0sXG4gIFsgJ2FyY2gtZTInLCAyNiwgMzgsICdpbicgXSxcbiAgWyAnYXJjaC1lMycsIDI3LCAzOSwgJ2luJyBdXG5dO1xuXG5leHBvcnQgZGVmYXVsdCBkYXRhLnJlZHVjZSgoZGljdCwgcHJlc2V0KSA9PiB7XG4gIGNvbnN0IGl0ZW0gPSB7XG4gICAgdW5pdHM6IHByZXNldFszXSB8fCBkZWZhdWx0VW5pdHMsXG4gICAgZGltZW5zaW9uczogWyBwcmVzZXRbMV0sIHByZXNldFsyXSBdXG4gIH07XG4gIGRpY3RbcHJlc2V0WzBdXSA9IGl0ZW07XG4gIGRpY3RbcHJlc2V0WzBdLnJlcGxhY2UoLy0vZywgJyAnKV0gPSBpdGVtO1xuICByZXR1cm4gZGljdDtcbn0sIHt9KTtcbiIsInZhciBkZWZpbmVkID0gcmVxdWlyZSgnZGVmaW5lZCcpO1xudmFyIHVuaXRzID0gWyAnbW0nLCAnY20nLCAnbScsICdwYycsICdwdCcsICdpbicsICdmdCcsICdweCcgXTtcblxudmFyIGNvbnZlcnNpb25zID0ge1xuICAvLyBtZXRyaWNcbiAgbToge1xuICAgIHN5c3RlbTogJ21ldHJpYycsXG4gICAgZmFjdG9yOiAxXG4gIH0sXG4gIGNtOiB7XG4gICAgc3lzdGVtOiAnbWV0cmljJyxcbiAgICBmYWN0b3I6IDEgLyAxMDBcbiAgfSxcbiAgbW06IHtcbiAgICBzeXN0ZW06ICdtZXRyaWMnLFxuICAgIGZhY3RvcjogMSAvIDEwMDBcbiAgfSxcbiAgLy8gaW1wZXJpYWxcbiAgcHQ6IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxIC8gNzJcbiAgfSxcbiAgcGM6IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxIC8gNlxuICB9LFxuICBpbjoge1xuICAgIHN5c3RlbTogJ2ltcGVyaWFsJyxcbiAgICBmYWN0b3I6IDFcbiAgfSxcbiAgZnQ6IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxMlxuICB9XG59O1xuXG5jb25zdCBhbmNob3JzID0ge1xuICBtZXRyaWM6IHtcbiAgICB1bml0OiAnbScsXG4gICAgcmF0aW86IDEgLyAwLjAyNTRcbiAgfSxcbiAgaW1wZXJpYWw6IHtcbiAgICB1bml0OiAnaW4nLFxuICAgIHJhdGlvOiAwLjAyNTRcbiAgfVxufTtcblxuZnVuY3Rpb24gcm91bmQgKHZhbHVlLCBkZWNpbWFscykge1xuICByZXR1cm4gTnVtYmVyKE1hdGgucm91bmQodmFsdWUgKyAnZScgKyBkZWNpbWFscykgKyAnZS0nICsgZGVjaW1hbHMpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0RGlzdGFuY2UgKHZhbHVlLCBmcm9tVW5pdCwgdG9Vbml0LCBvcHRzKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInIHx8ICFpc0Zpbml0ZSh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcignVmFsdWUgbXVzdCBiZSBhIGZpbml0ZSBudW1iZXInKTtcbiAgaWYgKCFmcm9tVW5pdCB8fCAhdG9Vbml0KSB0aHJvdyBuZXcgRXJyb3IoJ011c3Qgc3BlY2lmeSBmcm9tIGFuZCB0byB1bml0cycpO1xuXG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuICB2YXIgcGl4ZWxzUGVySW5jaCA9IGRlZmluZWQob3B0cy5waXhlbHNQZXJJbmNoLCA5Nik7XG4gIHZhciBwcmVjaXNpb24gPSBvcHRzLnByZWNpc2lvbjtcbiAgdmFyIHJvdW5kUGl4ZWwgPSBvcHRzLnJvdW5kUGl4ZWwgIT09IGZhbHNlO1xuXG4gIGZyb21Vbml0ID0gZnJvbVVuaXQudG9Mb3dlckNhc2UoKTtcbiAgdG9Vbml0ID0gdG9Vbml0LnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKHVuaXRzLmluZGV4T2YoZnJvbVVuaXQpID09PSAtMSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZyb20gdW5pdCBcIicgKyBmcm9tVW5pdCArICdcIiwgbXVzdCBiZSBvbmUgb2Y6ICcgKyB1bml0cy5qb2luKCcsICcpKTtcbiAgaWYgKHVuaXRzLmluZGV4T2YodG9Vbml0KSA9PT0gLTEpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmcm9tIHVuaXQgXCInICsgdG9Vbml0ICsgJ1wiLCBtdXN0IGJlIG9uZSBvZjogJyArIHVuaXRzLmpvaW4oJywgJykpO1xuXG4gIGlmIChmcm9tVW5pdCA9PT0gdG9Vbml0KSB7XG4gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjb252ZXJ0IGZyb20gQSB0byBCIHNpbmNlIHRoZXkgYXJlIHRoZSBzYW1lIGFscmVhZHlcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICB2YXIgdG9GYWN0b3IgPSAxO1xuICB2YXIgZnJvbUZhY3RvciA9IDE7XG4gIHZhciBpc1RvUGl4ZWwgPSBmYWxzZTtcblxuICBpZiAoZnJvbVVuaXQgPT09ICdweCcpIHtcbiAgICBmcm9tRmFjdG9yID0gMSAvIHBpeGVsc1BlckluY2g7XG4gICAgZnJvbVVuaXQgPSAnaW4nO1xuICB9XG4gIGlmICh0b1VuaXQgPT09ICdweCcpIHtcbiAgICBpc1RvUGl4ZWwgPSB0cnVlO1xuICAgIHRvRmFjdG9yID0gcGl4ZWxzUGVySW5jaDtcbiAgICB0b1VuaXQgPSAnaW4nO1xuICB9XG5cbiAgdmFyIGZyb21Vbml0RGF0YSA9IGNvbnZlcnNpb25zW2Zyb21Vbml0XTtcbiAgdmFyIHRvVW5pdERhdGEgPSBjb252ZXJzaW9uc1t0b1VuaXRdO1xuXG4gIC8vIHNvdXJjZSB0byBhbmNob3IgaW5zaWRlIHNvdXJjZSdzIHN5c3RlbVxuICB2YXIgYW5jaG9yID0gdmFsdWUgKiBmcm9tVW5pdERhdGEuZmFjdG9yICogZnJvbUZhY3RvcjtcblxuICAvLyBpZiBzeXN0ZW1zIGRpZmZlciwgY29udmVydCBvbmUgdG8gYW5vdGhlclxuICBpZiAoZnJvbVVuaXREYXRhLnN5c3RlbSAhPT0gdG9Vbml0RGF0YS5zeXN0ZW0pIHtcbiAgICAvLyByZWd1bGFyICdtJyB0byAnaW4nIGFuZCBzbyBmb3J0aFxuICAgIGFuY2hvciAqPSBhbmNob3JzW2Zyb21Vbml0RGF0YS5zeXN0ZW1dLnJhdGlvO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IGFuY2hvciAvIHRvVW5pdERhdGEuZmFjdG9yICogdG9GYWN0b3I7XG4gIGlmIChpc1RvUGl4ZWwgJiYgcm91bmRQaXhlbCkge1xuICAgIHJlc3VsdCA9IE1hdGgucm91bmQocmVzdWx0KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJlY2lzaW9uID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShwcmVjaXNpb24pKSB7XG4gICAgcmVzdWx0ID0gcm91bmQocmVzdWx0LCBwcmVjaXNpb24pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29udmVydERpc3RhbmNlO1xubW9kdWxlLmV4cG9ydHMudW5pdHMgPSB1bml0cztcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHNbaV0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIGFyZ3VtZW50c1tpXTtcbiAgICB9XG59O1xuIiwiaW1wb3J0IHBhcGVyU2l6ZXMgZnJvbSAnLi9wYXBlci1zaXplcyc7XG5pbXBvcnQgY29udmVydExlbmd0aCBmcm9tICdjb252ZXJ0LWxlbmd0aCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREaW1lbnNpb25zRnJvbVByZXNldCAoZGltZW5zaW9ucywgdW5pdHNUbyA9ICdweCcsIHBpeGVsc1BlckluY2ggPSA3Mikge1xuICBpZiAodHlwZW9mIGRpbWVuc2lvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3Qga2V5ID0gZGltZW5zaW9ucy50b0xvd2VyQ2FzZSgpO1xuICAgIGlmICghKGtleSBpbiBwYXBlclNpemVzKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgZGltZW5zaW9uIHByZXNldCBcIiR7ZGltZW5zaW9uc31cIiBpcyBub3Qgc3VwcG9ydGVkIG9yIGNvdWxkIG5vdCBiZSBmb3VuZDsgdHJ5IHVzaW5nIGE0LCBhMywgcG9zdGNhcmQsIGxldHRlciwgZXRjLmApXG4gICAgfVxuICAgIGNvbnN0IHByZXNldCA9IHBhcGVyU2l6ZXNba2V5XTtcbiAgICByZXR1cm4gcHJlc2V0LmRpbWVuc2lvbnMubWFwKGQgPT4ge1xuICAgICAgcmV0dXJuIGNvbnZlcnREaXN0YW5jZShkLCBwcmVzZXQudW5pdHMsIHVuaXRzVG8sIHBpeGVsc1BlckluY2gpO1xuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBkaW1lbnNpb25zO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb252ZXJ0RGlzdGFuY2UgKGRpbWVuc2lvbiwgdW5pdHNGcm9tID0gJ3B4JywgdW5pdHNUbyA9ICdweCcsIHBpeGVsc1BlckluY2ggPSA3Mikge1xuICByZXR1cm4gY29udmVydExlbmd0aChkaW1lbnNpb24sIHVuaXRzRnJvbSwgdW5pdHNUbywge1xuICAgIHBpeGVsc1BlckluY2gsXG4gICAgcHJlY2lzaW9uOiA0LFxuICAgIHJvdW5kUGl4ZWw6IHRydWVcbiAgfSk7XG59XG4iLCJpbXBvcnQgeyBnZXREaW1lbnNpb25zRnJvbVByZXNldCwgY29udmVydERpc3RhbmNlIH0gZnJvbSAnLi4vZGlzdGFuY2VzJztcbmltcG9ydCB7IGlzQnJvd3NlciwgZGVmaW5lZCB9IGZyb20gJy4uL3V0aWwnO1xuXG5mdW5jdGlvbiBjaGVja0lmSGFzRGltZW5zaW9ucyAoc2V0dGluZ3MpIHtcbiAgaWYgKCFzZXR0aW5ncy5kaW1lbnNpb25zKSByZXR1cm4gZmFsc2U7XG4gIGlmICh0eXBlb2Ygc2V0dGluZ3MuZGltZW5zaW9ucyA9PT0gJ3N0cmluZycpIHJldHVybiB0cnVlO1xuICBpZiAoQXJyYXkuaXNBcnJheShzZXR0aW5ncy5kaW1lbnNpb25zKSAmJiBzZXR0aW5ncy5kaW1lbnNpb25zLmxlbmd0aCA+PSAyKSByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBnZXRQYXJlbnRTaXplIChwcm9wcywgc2V0dGluZ3MpIHtcbiAgLy8gV2hlbiBubyB7IGRpbWVuc2lvbiB9IGlzIHBhc3NlZCBpbiBub2RlLCB3ZSBkZWZhdWx0IHRvIEhUTUwgY2FudmFzIHNpemVcbiAgaWYgKCFpc0Jyb3dzZXIoKSkge1xuICAgIHJldHVybiBbIDMwMCwgMTUwIF07XG4gIH1cblxuICBsZXQgZWxlbWVudCA9IHNldHRpbmdzLnBhcmVudCB8fCB3aW5kb3c7XG5cbiAgaWYgKGVsZW1lbnQgPT09IHdpbmRvdyB8fFxuICAgICAgZWxlbWVudCA9PT0gZG9jdW1lbnQgfHxcbiAgICAgIGVsZW1lbnQgPT09IGRvY3VtZW50LmJvZHkpIHtcbiAgICByZXR1cm4gWyB3aW5kb3cuaW5uZXJXaWR0aCwgd2luZG93LmlubmVySGVpZ2h0IF07XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIHJldHVybiBbIHdpZHRoLCBoZWlnaHQgXTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXNpemVDYW52YXMgKHByb3BzLCBzZXR0aW5ncykge1xuICBsZXQgd2lkdGgsIGhlaWdodDtcbiAgbGV0IHN0eWxlV2lkdGgsIHN0eWxlSGVpZ2h0O1xuICBsZXQgY2FudmFzV2lkdGgsIGNhbnZhc0hlaWdodDtcblxuICBjb25zdCBicm93c2VyID0gaXNCcm93c2VyKCk7XG4gIGNvbnN0IGRpbWVuc2lvbnMgPSBzZXR0aW5ncy5kaW1lbnNpb25zO1xuICBjb25zdCBoYXNEaW1lbnNpb25zID0gY2hlY2tJZkhhc0RpbWVuc2lvbnMoc2V0dGluZ3MpO1xuICBjb25zdCBleHBvcnRpbmcgPSBwcm9wcy5leHBvcnRpbmc7XG4gIGxldCBzY2FsZVRvRml0ID0gaGFzRGltZW5zaW9ucyA/IHNldHRpbmdzLnNjYWxlVG9GaXQgIT09IGZhbHNlIDogZmFsc2U7XG4gIGxldCBzY2FsZVRvVmlldyA9ICghZXhwb3J0aW5nICYmIGhhc0RpbWVuc2lvbnMpID8gc2V0dGluZ3Muc2NhbGVUb1ZpZXcgOiB0cnVlO1xuICAvLyBpbiBub2RlLCBjYW5jZWwgYm90aCBvZiB0aGVzZSBvcHRpb25zXG4gIGlmICghYnJvd3Nlcikgc2NhbGVUb0ZpdCA9IHNjYWxlVG9WaWV3ID0gZmFsc2U7XG4gIGNvbnN0IHVuaXRzID0gc2V0dGluZ3MudW5pdHM7XG4gIGNvbnN0IHBpeGVsc1BlckluY2ggPSAodHlwZW9mIHNldHRpbmdzLnBpeGVsc1BlckluY2ggPT09ICdudW1iZXInICYmIGlzRmluaXRlKHNldHRpbmdzLnBpeGVsc1BlckluY2gpKSA/IHNldHRpbmdzLnBpeGVsc1BlckluY2ggOiA3MjtcbiAgY29uc3QgYmxlZWQgPSBkZWZpbmVkKHNldHRpbmdzLmJsZWVkLCAwKTtcblxuICBjb25zdCBkZXZpY2VQaXhlbFJhdGlvID0gYnJvd3NlciA/IHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvIDogMTtcbiAgY29uc3QgYmFzZVBpeGVsUmF0aW8gPSBzY2FsZVRvVmlldyA/IGRldmljZVBpeGVsUmF0aW8gOiAxO1xuXG4gIGxldCBwaXhlbFJhdGlvLCBleHBvcnRQaXhlbFJhdGlvO1xuXG4gIC8vIElmIGEgcGl4ZWwgcmF0aW8gaXMgc3BlY2lmaWVkLCB3ZSB3aWxsIHVzZSBpdC5cbiAgLy8gT3RoZXJ3aXNlOlxuICAvLyAgLT4gSWYgZGltZW5zaW9uIGlzIHNwZWNpZmllZCwgdXNlIGJhc2UgcmF0aW8gKGkuZS4gc2l6ZSBmb3IgZXhwb3J0KVxuICAvLyAgLT4gSWYgbm8gZGltZW5zaW9uIGlzIHNwZWNpZmllZCwgdXNlIGRldmljZSByYXRpbyAoaS5lLiBzaXplIGZvciBzY3JlZW4pXG4gIGlmICh0eXBlb2Ygc2V0dGluZ3MucGl4ZWxSYXRpbyA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoc2V0dGluZ3MucGl4ZWxSYXRpbykpIHtcbiAgICAvLyBXaGVuIHsgcGl4ZWxSYXRpbyB9IGlzIHNwZWNpZmllZCwgaXQncyBhbHNvIHVzZWQgYXMgZGVmYXVsdCBleHBvcnRQaXhlbFJhdGlvLlxuICAgIHBpeGVsUmF0aW8gPSBzZXR0aW5ncy5waXhlbFJhdGlvO1xuICAgIGV4cG9ydFBpeGVsUmF0aW8gPSBkZWZpbmVkKHNldHRpbmdzLmV4cG9ydFBpeGVsUmF0aW8sIHBpeGVsUmF0aW8pO1xuICB9IGVsc2Uge1xuICAgIGlmIChoYXNEaW1lbnNpb25zKSB7XG4gICAgICAvLyBXaGVuIGEgZGltZW5zaW9uIGlzIHNwZWNpZmllZCwgdXNlIHRoZSBiYXNlIHJhdGlvIHJhdGhlciB0aGFuIHNjcmVlbiByYXRpb1xuICAgICAgcGl4ZWxSYXRpbyA9IGJhc2VQaXhlbFJhdGlvO1xuICAgICAgLy8gRGVmYXVsdCB0byBhIHBpeGVsIHJhdGlvIG9mIDEgc28gdGhhdCB5b3UgZW5kIHVwIHdpdGggdGhlIHNhbWUgZGltZW5zaW9uXG4gICAgICAvLyB5b3Ugc3BlY2lmaWVkLCBpLmUuIFsgNTAwLCA1MDAgXSBpcyBleHBvcnRlZCBhcyA1MDB4NTAwIHB4XG4gICAgICBleHBvcnRQaXhlbFJhdGlvID0gZGVmaW5lZChzZXR0aW5ncy5leHBvcnRQaXhlbFJhdGlvLCAxKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTm8gZGltZW5zaW9uIGlzIHNwZWNpZmllZCwgYXNzdW1lIGZ1bGwtc2NyZWVuIHJldGluYSBzaXppbmdcbiAgICAgIHBpeGVsUmF0aW8gPSBkZXZpY2VQaXhlbFJhdGlvO1xuICAgICAgLy8gRGVmYXVsdCB0byBzY3JlZW4gcGl4ZWwgcmF0aW8sIHNvIHRoYXQgaXQncyBsaWtlIHRha2luZyBhIGRldmljZSBzY3JlZW5zaG90XG4gICAgICBleHBvcnRQaXhlbFJhdGlvID0gZGVmaW5lZChzZXR0aW5ncy5leHBvcnRQaXhlbFJhdGlvLCBwaXhlbFJhdGlvKTtcbiAgICB9XG4gIH1cblxuICAvLyBDbGFtcCBwaXhlbCByYXRpb1xuICBpZiAodHlwZW9mIHNldHRpbmdzLm1heFBpeGVsUmF0aW8gPT09ICdudW1iZXInICYmIGlzRmluaXRlKHNldHRpbmdzLm1heFBpeGVsUmF0aW8pKSB7XG4gICAgcGl4ZWxSYXRpbyA9IE1hdGgubWluKHNldHRpbmdzLm1heFBpeGVsUmF0aW8sIHBpeGVsUmF0aW8pO1xuICB9XG5cbiAgLy8gSGFuZGxlIGV4cG9ydCBwaXhlbCByYXRpb1xuICBpZiAoZXhwb3J0aW5nKSB7XG4gICAgcGl4ZWxSYXRpbyA9IGV4cG9ydFBpeGVsUmF0aW87XG4gIH1cblxuICAvLyBwYXJlbnRXaWR0aCA9IHR5cGVvZiBwYXJlbnRXaWR0aCA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0Tm9kZVNpemVbMF0gOiBwYXJlbnRXaWR0aDtcbiAgLy8gcGFyZW50SGVpZ2h0ID0gdHlwZW9mIHBhcmVudEhlaWdodCA9PT0gJ3VuZGVmaW5lZCcgPyBkZWZhdWx0Tm9kZVNpemVbMV0gOiBwYXJlbnRIZWlnaHQ7XG5cbiAgbGV0IFsgcGFyZW50V2lkdGgsIHBhcmVudEhlaWdodCBdID0gZ2V0UGFyZW50U2l6ZShwcm9wcywgc2V0dGluZ3MpO1xuICBsZXQgdHJpbVdpZHRoLCB0cmltSGVpZ2h0O1xuXG4gIC8vIFlvdSBjYW4gc3BlY2lmeSBhIGRpbWVuc2lvbnMgaW4gcGl4ZWxzIG9yIGNtL20vaW4vZXRjXG4gIGlmIChoYXNEaW1lbnNpb25zKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gZ2V0RGltZW5zaW9uc0Zyb21QcmVzZXQoZGltZW5zaW9ucywgdW5pdHMsIHBpeGVsc1BlckluY2gpO1xuICAgIGNvbnN0IGhpZ2hlc3QgPSBNYXRoLm1heChyZXN1bHRbMF0sIHJlc3VsdFsxXSk7XG4gICAgY29uc3QgbG93ZXN0ID0gTWF0aC5taW4ocmVzdWx0WzBdLCByZXN1bHRbMV0pO1xuICAgIGlmIChzZXR0aW5ncy5vcmllbnRhdGlvbikge1xuICAgICAgY29uc3QgbGFuZHNjYXBlID0gc2V0dGluZ3Mub3JpZW50YXRpb24gPT09ICdsYW5kc2NhcGUnO1xuICAgICAgd2lkdGggPSBsYW5kc2NhcGUgPyBoaWdoZXN0IDogbG93ZXN0O1xuICAgICAgaGVpZ2h0ID0gbGFuZHNjYXBlID8gbG93ZXN0IDogaGlnaGVzdDtcbiAgICB9IGVsc2Uge1xuICAgICAgd2lkdGggPSByZXN1bHRbMF07XG4gICAgICBoZWlnaHQgPSByZXN1bHRbMV07XG4gICAgfVxuXG4gICAgdHJpbVdpZHRoID0gd2lkdGg7XG4gICAgdHJpbUhlaWdodCA9IGhlaWdodDtcblxuICAgIC8vIEFwcGx5IGJsZWVkIHdoaWNoIGlzIGFzc3VtZWQgdG8gYmUgaW4gdGhlIHNhbWUgdW5pdHNcbiAgICB3aWR0aCArPSBibGVlZCAqIDI7XG4gICAgaGVpZ2h0ICs9IGJsZWVkICogMjtcbiAgfSBlbHNlIHtcbiAgICB3aWR0aCA9IHBhcmVudFdpZHRoO1xuICAgIGhlaWdodCA9IHBhcmVudEhlaWdodDtcbiAgICB0cmltV2lkdGggPSB3aWR0aDtcbiAgICB0cmltSGVpZ2h0ID0gaGVpZ2h0O1xuICB9XG5cbiAgLy8gUmVhbCBzaXplIGluIHBpeGVscyBhZnRlciBQUEkgaXMgdGFrZW4gaW50byBhY2NvdW50XG4gIGxldCByZWFsV2lkdGggPSB3aWR0aDtcbiAgbGV0IHJlYWxIZWlnaHQgPSBoZWlnaHQ7XG4gIGlmIChoYXNEaW1lbnNpb25zICYmIHVuaXRzKSB7XG4gICAgLy8gQ29udmVydCB0byBkaWdpdGFsL3BpeGVsIHVuaXRzIGlmIG5lY2Vzc2FyeVxuICAgIHJlYWxXaWR0aCA9IGNvbnZlcnREaXN0YW5jZSh3aWR0aCwgdW5pdHMsICdweCcsIHBpeGVsc1BlckluY2gpO1xuICAgIHJlYWxIZWlnaHQgPSBjb252ZXJ0RGlzdGFuY2UoaGVpZ2h0LCB1bml0cywgJ3B4JywgcGl4ZWxzUGVySW5jaCk7XG4gIH1cblxuICAvLyBIb3cgYmlnIHRvIHNldCB0aGUgJ3ZpZXcnIG9mIHRoZSBjYW52YXMgaW4gdGhlIGJyb3dzZXIgKGkuZS4gc3R5bGUpXG4gIHN0eWxlV2lkdGggPSBNYXRoLnJvdW5kKHJlYWxXaWR0aCk7XG4gIHN0eWxlSGVpZ2h0ID0gTWF0aC5yb3VuZChyZWFsSGVpZ2h0KTtcblxuICAvLyBJZiB3ZSB3aXNoIHRvIHNjYWxlIHRoZSB2aWV3IHRvIHRoZSBicm93c2VyIHdpbmRvd1xuICBpZiAoc2NhbGVUb0ZpdCAmJiAhZXhwb3J0aW5nICYmIGhhc0RpbWVuc2lvbnMpIHtcbiAgICBjb25zdCBhc3BlY3QgPSB3aWR0aCAvIGhlaWdodDtcbiAgICBjb25zdCB3aW5kb3dBc3BlY3QgPSBwYXJlbnRXaWR0aCAvIHBhcmVudEhlaWdodDtcbiAgICBjb25zdCBzY2FsZVRvRml0UGFkZGluZyA9IGRlZmluZWQoc2V0dGluZ3Muc2NhbGVUb0ZpdFBhZGRpbmcsIDQwKTtcbiAgICBjb25zdCBtYXhXaWR0aCA9IE1hdGgucm91bmQocGFyZW50V2lkdGggLSBzY2FsZVRvRml0UGFkZGluZyAqIDIpO1xuICAgIGNvbnN0IG1heEhlaWdodCA9IE1hdGgucm91bmQocGFyZW50SGVpZ2h0IC0gc2NhbGVUb0ZpdFBhZGRpbmcgKiAyKTtcbiAgICBpZiAoc3R5bGVXaWR0aCA+IG1heFdpZHRoIHx8IHN0eWxlSGVpZ2h0ID4gbWF4SGVpZ2h0KSB7XG4gICAgICBpZiAod2luZG93QXNwZWN0ID4gYXNwZWN0KSB7XG4gICAgICAgIHN0eWxlSGVpZ2h0ID0gbWF4SGVpZ2h0O1xuICAgICAgICBzdHlsZVdpZHRoID0gTWF0aC5yb3VuZChzdHlsZUhlaWdodCAqIGFzcGVjdCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzdHlsZVdpZHRoID0gbWF4V2lkdGg7XG4gICAgICAgIHN0eWxlSGVpZ2h0ID0gTWF0aC5yb3VuZChzdHlsZVdpZHRoIC8gYXNwZWN0KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjYW52YXNXaWR0aCA9IHNjYWxlVG9WaWV3ID8gTWF0aC5yb3VuZChwaXhlbFJhdGlvICogc3R5bGVXaWR0aCkgOiBNYXRoLnJvdW5kKHBpeGVsUmF0aW8gKiByZWFsV2lkdGgpO1xuICBjYW52YXNIZWlnaHQgPSBzY2FsZVRvVmlldyA/IE1hdGgucm91bmQocGl4ZWxSYXRpbyAqIHN0eWxlSGVpZ2h0KSA6IE1hdGgucm91bmQocGl4ZWxSYXRpbyAqIHJlYWxIZWlnaHQpO1xuXG4gIGNvbnN0IHZpZXdwb3J0V2lkdGggPSBzY2FsZVRvVmlldyA/IE1hdGgucm91bmQoc3R5bGVXaWR0aCkgOiBNYXRoLnJvdW5kKHJlYWxXaWR0aCk7XG4gIGNvbnN0IHZpZXdwb3J0SGVpZ2h0ID0gc2NhbGVUb1ZpZXcgPyBNYXRoLnJvdW5kKHN0eWxlSGVpZ2h0KSA6IE1hdGgucm91bmQocmVhbEhlaWdodCk7XG5cbiAgY29uc3Qgc2NhbGVYID0gY2FudmFzV2lkdGggLyB3aWR0aDtcbiAgY29uc3Qgc2NhbGVZID0gY2FudmFzSGVpZ2h0IC8gaGVpZ2h0O1xuXG4gIC8vIEFzc2lnbiB0byBjdXJyZW50IHByb3BzXG4gIHJldHVybiB7XG4gICAgYmxlZWQsXG4gICAgcGl4ZWxSYXRpbyxcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgZGltZW5zaW9uczogWyB3aWR0aCwgaGVpZ2h0IF0sXG4gICAgdW5pdHM6IHVuaXRzIHx8ICdweCcsXG4gICAgc2NhbGVYLFxuICAgIHNjYWxlWSxcbiAgICBwaXhlbHNQZXJJbmNoLFxuICAgIHZpZXdwb3J0V2lkdGgsXG4gICAgdmlld3BvcnRIZWlnaHQsXG4gICAgY2FudmFzV2lkdGgsXG4gICAgY2FudmFzSGVpZ2h0LFxuICAgIHRyaW1XaWR0aCxcbiAgICB0cmltSGVpZ2h0LFxuICAgIHN0eWxlV2lkdGgsXG4gICAgc3R5bGVIZWlnaHRcbiAgfTtcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gZ2V0Q2FudmFzQ29udGV4dFxuZnVuY3Rpb24gZ2V0Q2FudmFzQ29udGV4dCAodHlwZSwgb3B0cykge1xuICBpZiAodHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignbXVzdCBzcGVjaWZ5IHR5cGUgc3RyaW5nJylcbiAgfVxuXG4gIG9wdHMgPSBvcHRzIHx8IHt9XG5cbiAgaWYgKHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcgJiYgIW9wdHMuY2FudmFzKSB7XG4gICAgcmV0dXJuIG51bGwgLy8gY2hlY2sgZm9yIE5vZGVcbiAgfVxuXG4gIHZhciBjYW52YXMgPSBvcHRzLmNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKVxuICBpZiAodHlwZW9mIG9wdHMud2lkdGggPT09ICdudW1iZXInKSB7XG4gICAgY2FudmFzLndpZHRoID0gb3B0cy53aWR0aFxuICB9XG4gIGlmICh0eXBlb2Ygb3B0cy5oZWlnaHQgPT09ICdudW1iZXInKSB7XG4gICAgY2FudmFzLmhlaWdodCA9IG9wdHMuaGVpZ2h0XG4gIH1cblxuICB2YXIgYXR0cmlicyA9IG9wdHNcbiAgdmFyIGdsXG4gIHRyeSB7XG4gICAgdmFyIG5hbWVzID0gWyB0eXBlIF1cbiAgICAvLyBwcmVmaXggR0wgY29udGV4dHNcbiAgICBpZiAodHlwZS5pbmRleE9mKCd3ZWJnbCcpID09PSAwKSB7XG4gICAgICBuYW1lcy5wdXNoKCdleHBlcmltZW50YWwtJyArIHR5cGUpXG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dChuYW1lc1tpXSwgYXR0cmlicylcbiAgICAgIGlmIChnbCkgcmV0dXJuIGdsXG4gICAgfVxuICB9IGNhdGNoIChlKSB7XG4gICAgZ2wgPSBudWxsXG4gIH1cbiAgcmV0dXJuIChnbCB8fCBudWxsKSAvLyBlbnN1cmUgbnVsbCBvbiBmYWlsXG59XG4iLCJpbXBvcnQgYXNzaWduIGZyb20gJ29iamVjdC1hc3NpZ24nO1xuaW1wb3J0IGdldENhbnZhc0NvbnRleHQgZnJvbSAnZ2V0LWNhbnZhcy1jb250ZXh0JztcbmltcG9ydCB7IGlzQnJvd3NlciB9IGZyb20gJy4uL3V0aWwnO1xuXG5mdW5jdGlvbiBjcmVhdGVDYW52YXNFbGVtZW50ICgpIHtcbiAgaWYgKCFpc0Jyb3dzZXIoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignSXQgYXBwZWFycyB5b3UgYXJlIHJ1bmluZyBmcm9tIE5vZGUuanMgb3IgYSBub24tYnJvd3NlciBlbnZpcm9ubWVudC4gVHJ5IHBhc3NpbmcgaW4gYW4gZXhpc3RpbmcgeyBjYW52YXMgfSBpbnRlcmZhY2UgaW5zdGVhZC4nKTtcbiAgfVxuICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUNhbnZhcyAoc2V0dGluZ3MgPSB7fSkge1xuICBsZXQgY29udGV4dCwgY2FudmFzO1xuICBsZXQgb3duc0NhbnZhcyA9IGZhbHNlO1xuICBpZiAoc2V0dGluZ3MuY2FudmFzICE9PSBmYWxzZSkge1xuICAgIC8vIERldGVybWluZSB0aGUgY2FudmFzIGFuZCBjb250ZXh0IHRvIGNyZWF0ZVxuICAgIGNvbnRleHQgPSBzZXR0aW5ncy5jb250ZXh0O1xuICAgIGlmICghY29udGV4dCB8fCB0eXBlb2YgY29udGV4dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGxldCBuZXdDYW52YXMgPSBzZXR0aW5ncy5jYW52YXM7XG4gICAgICBpZiAoIW5ld0NhbnZhcykge1xuICAgICAgICBuZXdDYW52YXMgPSBjcmVhdGVDYW52YXNFbGVtZW50KCk7XG4gICAgICAgIG93bnNDYW52YXMgPSB0cnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgdHlwZSA9IGNvbnRleHQgfHwgJzJkJztcbiAgICAgIGlmICh0eXBlb2YgbmV3Q2FudmFzLmdldENvbnRleHQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBUaGUgc3BlY2lmaWVkIHsgY2FudmFzIH0gZWxlbWVudCBkb2VzIG5vdCBoYXZlIGEgZ2V0Q29udGV4dCgpIGZ1bmN0aW9uLCBtYXliZSBpdCBpcyBub3QgYSA8Y2FudmFzPiB0YWc/YCk7XG4gICAgICB9XG4gICAgICBjb250ZXh0ID0gZ2V0Q2FudmFzQ29udGV4dCh0eXBlLCBhc3NpZ24oe30sIHNldHRpbmdzLmF0dHJpYnV0ZXMsIHsgY2FudmFzOiBuZXdDYW52YXMgfSkpO1xuICAgICAgaWYgKCFjb250ZXh0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIGF0IGNhbnZhcy5nZXRDb250ZXh0KCcke3R5cGV9JykgLSB0aGUgYnJvd3NlciBtYXkgbm90IHN1cHBvcnQgdGhpcyBjb250ZXh0LCBvciBhIGRpZmZlcmVudCBjb250ZXh0IG1heSBhbHJlYWR5IGJlIGluIHVzZSB3aXRoIHRoaXMgY2FudmFzLmApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNhbnZhcyA9IGNvbnRleHQuY2FudmFzO1xuICAgIC8vIEVuc3VyZSBjb250ZXh0IG1hdGNoZXMgdXNlcidzIGNhbnZhcyBleHBlY3RhdGlvbnNcbiAgICBpZiAoc2V0dGluZ3MuY2FudmFzICYmIGNhbnZhcyAhPT0gc2V0dGluZ3MuY2FudmFzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSB7IGNhbnZhcyB9IGFuZCB7IGNvbnRleHQgfSBzZXR0aW5ncyBtdXN0IHBvaW50IHRvIHRoZSBzYW1lIHVuZGVybHlpbmcgY2FudmFzIGVsZW1lbnQnKTtcbiAgICB9XG5cbiAgICAvLyBBcHBseSBwaXhlbGF0aW9uIHRvIGNhbnZhcyBpZiBuZWNlc3NhcnksIHRoaXMgaXMgbW9zdGx5IGEgY29udmVuaWVuY2UgdXRpbGl0eVxuICAgIGlmIChzZXR0aW5ncy5waXhlbGF0ZWQpIHtcbiAgICAgIGNvbnRleHQuaW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICBjb250ZXh0Lm1vekltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgY29udGV4dC5vSW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICBjb250ZXh0LndlYmtpdEltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgY29udGV4dC5tc0ltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgY2FudmFzLnN0eWxlWydpbWFnZS1yZW5kZXJpbmcnXSA9ICdwaXhlbGF0ZWQnO1xuICAgIH1cbiAgfVxuICByZXR1cm4geyBjYW52YXMsIGNvbnRleHQsIG93bnNDYW52YXMgfTtcbn1cbiIsImltcG9ydCBhc3NpZ24gZnJvbSAnb2JqZWN0LWFzc2lnbic7XG5pbXBvcnQgcmlnaHROb3cgZnJvbSAncmlnaHQtbm93JztcbmltcG9ydCBpc1Byb21pc2UgZnJvbSAnaXMtcHJvbWlzZSc7XG5pbXBvcnQgeyBpc0Jyb3dzZXIsIGRlZmluZWQsIGlzV2ViR0xDb250ZXh0LCBpc0NhbnZhcywgZ2V0Q2xpZW50QVBJIH0gZnJvbSAnLi4vdXRpbCc7XG5pbXBvcnQgZGVlcEVxdWFsIGZyb20gJ2RlZXAtZXF1YWwnO1xuaW1wb3J0IHtcbiAgcmVzb2x2ZUZpbGVuYW1lLFxuICBzYXZlRmlsZSxcbiAgc2F2ZURhdGFVUkwsXG4gIGdldFRpbWVTdGFtcCxcbiAgZXhwb3J0Q2FudmFzLFxuICBzdHJlYW1TdGFydCxcbiAgc3RyZWFtRW5kXG59IGZyb20gJy4uL3NhdmUnO1xuaW1wb3J0IHsgY2hlY2tTZXR0aW5ncyB9IGZyb20gJy4uL2FjY2Vzc2liaWxpdHknO1xuXG5pbXBvcnQga2V5Ym9hcmRTaG9ydGN1dHMgZnJvbSAnLi9rZXlib2FyZFNob3J0Y3V0cyc7XG5pbXBvcnQgcmVzaXplQ2FudmFzIGZyb20gJy4vcmVzaXplQ2FudmFzJztcbmltcG9ydCBjcmVhdGVDYW52YXMgZnJvbSAnLi9jcmVhdGVDYW52YXMnO1xuXG5jbGFzcyBTa2V0Y2hNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHRoaXMuX3NldHRpbmdzID0ge307XG4gICAgdGhpcy5fcHJvcHMgPSB7fTtcbiAgICB0aGlzLl9za2V0Y2ggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fcmFmID0gbnVsbDtcbiAgICB0aGlzLl9yZWNvcmRUaW1lb3V0ID0gbnVsbDtcblxuICAgIC8vIFNvbWUgaGFja3kgdGhpbmdzIHJlcXVpcmVkIHRvIGdldCBhcm91bmQgcDUuanMgc3RydWN0dXJlXG4gICAgdGhpcy5fbGFzdFJlZHJhd1Jlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9pc1A1UmVzaXppbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuX2tleWJvYXJkU2hvcnRjdXRzID0ga2V5Ym9hcmRTaG9ydGN1dHMoe1xuICAgICAgZW5hYmxlZDogKCkgPT4gdGhpcy5zZXR0aW5ncy5ob3RrZXlzICE9PSBmYWxzZSxcbiAgICAgIHNhdmU6IChldikgPT4ge1xuICAgICAgICBpZiAoZXYuc2hpZnRLZXkpIHtcbiAgICAgICAgICBpZiAodGhpcy5wcm9wcy5yZWNvcmRpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kUmVjb3JkKCk7XG4gICAgICAgICAgICB0aGlzLnJ1bigpO1xuICAgICAgICAgIH0gZWxzZSB0aGlzLnJlY29yZCgpO1xuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLnByb3BzLnJlY29yZGluZykge1xuICAgICAgICAgIHRoaXMuZXhwb3J0RnJhbWUoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHRvZ2dsZVBsYXk6ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucHJvcHMucGxheWluZykgdGhpcy5wYXVzZSgpO1xuICAgICAgICBlbHNlIHRoaXMucGxheSgpO1xuICAgICAgfSxcbiAgICAgIGNvbW1pdDogKGV2KSA9PiB7XG4gICAgICAgIHRoaXMuZXhwb3J0RnJhbWUoeyBjb21taXQ6IHRydWUgfSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLl9hbmltYXRlSGFuZGxlciA9ICgpID0+IHRoaXMuYW5pbWF0ZSgpO1xuXG4gICAgdGhpcy5fcmVzaXplSGFuZGxlciA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLnJlc2l6ZSgpO1xuICAgICAgLy8gT25seSByZS1yZW5kZXIgd2hlbiBzaXplIGFjdHVhbGx5IGNoYW5nZXNcbiAgICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB9XG4gICAgfTtcbiAgfVxuXG4gIGdldCBza2V0Y2ggKCkge1xuICAgIHJldHVybiB0aGlzLl9za2V0Y2g7XG4gIH1cblxuICBnZXQgc2V0dGluZ3MgKCkge1xuICAgIHJldHVybiB0aGlzLl9zZXR0aW5ncztcbiAgfVxuXG4gIGdldCBwcm9wcyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Byb3BzO1xuICB9XG5cbiAgX2NvbXB1dGVQbGF5aGVhZCAoY3VycmVudFRpbWUsIGR1cmF0aW9uKSB7XG4gICAgY29uc3QgaGFzRHVyYXRpb24gPSB0eXBlb2YgZHVyYXRpb24gPT09ICdudW1iZXInICYmIGlzRmluaXRlKGR1cmF0aW9uKTtcbiAgICByZXR1cm4gaGFzRHVyYXRpb24gPyBjdXJyZW50VGltZSAvIGR1cmF0aW9uIDogMDtcbiAgfVxuXG4gIF9jb21wdXRlRnJhbWUgKHBsYXloZWFkLCB0aW1lLCB0b3RhbEZyYW1lcywgZnBzKSB7XG4gICAgcmV0dXJuIChpc0Zpbml0ZSh0b3RhbEZyYW1lcykgJiYgdG90YWxGcmFtZXMgPiAxKVxuICAgICAgPyBNYXRoLmZsb29yKHBsYXloZWFkICogKHRvdGFsRnJhbWVzIC0gMSkpXG4gICAgICA6IE1hdGguZmxvb3IoZnBzICogdGltZSk7XG4gIH1cblxuICBfY29tcHV0ZUN1cnJlbnRGcmFtZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2NvbXB1dGVGcmFtZShcbiAgICAgIHRoaXMucHJvcHMucGxheWhlYWQsIHRoaXMucHJvcHMudGltZSxcbiAgICAgIHRoaXMucHJvcHMudG90YWxGcmFtZXMsIHRoaXMucHJvcHMuZnBzXG4gICAgKTtcbiAgfVxuXG4gIF9nZXRTaXplUHJvcHMgKCkge1xuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IHByb3BzLndpZHRoLFxuICAgICAgaGVpZ2h0OiBwcm9wcy5oZWlnaHQsXG4gICAgICBwaXhlbFJhdGlvOiBwcm9wcy5waXhlbFJhdGlvLFxuICAgICAgY2FudmFzV2lkdGg6IHByb3BzLmNhbnZhc1dpZHRoLFxuICAgICAgY2FudmFzSGVpZ2h0OiBwcm9wcy5jYW52YXNIZWlnaHQsXG4gICAgICB2aWV3cG9ydFdpZHRoOiBwcm9wcy52aWV3cG9ydFdpZHRoLFxuICAgICAgdmlld3BvcnRIZWlnaHQ6IHByb3BzLnZpZXdwb3J0SGVpZ2h0XG4gICAgfTtcbiAgfVxuXG4gIHJ1biAoKSB7XG4gICAgaWYgKCF0aGlzLnNrZXRjaCkgdGhyb3cgbmV3IEVycm9yKCdzaG91bGQgd2FpdCB1bnRpbCBza2V0Y2ggaXMgbG9hZGVkIGJlZm9yZSB0cnlpbmcgdG8gcGxheSgpJyk7XG5cbiAgICAvLyBTdGFydCBhbiBhbmltYXRpb24gZnJhbWUgbG9vcCBpZiBuZWNlc3NhcnlcbiAgICBpZiAodGhpcy5zZXR0aW5ncy5wbGF5aW5nICE9PSBmYWxzZSkge1xuICAgICAgdGhpcy5wbGF5KCk7XG4gICAgfVxuXG4gICAgLy8gTGV0J3MgbGV0IHRoaXMgd2FybmluZyBoYW5nIGFyb3VuZCBmb3IgYSBmZXcgdmVyc2lvbnMuLi5cbiAgICBpZiAodHlwZW9mIHRoaXMuc2tldGNoLmRpc3Bvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2FybignSW4gY2FudmFzLXNrZXRjaEAwLjAuMjMgdGhlIGRpc3Bvc2UoKSBldmVudCBoYXMgYmVlbiByZW5hbWVkIHRvIHVubG9hZCgpJyk7XG4gICAgfVxuXG4gICAgLy8gSW4gY2FzZSB3ZSBhcmVuJ3QgcGxheWluZyBvciBhbmltYXRlZCwgbWFrZSBzdXJlIHdlIHN0aWxsIHRyaWdnZXIgYmVnaW4gbWVzc2FnZS4uLlxuICAgIGlmICghdGhpcy5wcm9wcy5zdGFydGVkKSB7XG4gICAgICB0aGlzLl9zaWduYWxCZWdpbigpO1xuICAgICAgdGhpcy5wcm9wcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBSZW5kZXIgYW4gaW5pdGlhbCBmcmFtZVxuICAgIHRoaXMudGljaygpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBfY2FuY2VsVGltZW91dHMgKCkge1xuICAgIGlmICh0aGlzLl9yYWYgIT0gbnVsbCAmJiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy5fcmFmKTtcbiAgICAgIHRoaXMuX3JhZiA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLl9yZWNvcmRUaW1lb3V0ICE9IG51bGwpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yZWNvcmRUaW1lb3V0KTtcbiAgICAgIHRoaXMuX3JlY29yZFRpbWVvdXQgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIHBsYXkgKCkge1xuICAgIGxldCBhbmltYXRlID0gdGhpcy5zZXR0aW5ncy5hbmltYXRlO1xuICAgIGlmICgnYW5pbWF0aW9uJyBpbiB0aGlzLnNldHRpbmdzKSB7XG4gICAgICBhbmltYXRlID0gdHJ1ZTtcbiAgICAgIGNvbnNvbGUud2FybignW2NhbnZhcy1za2V0Y2hdIHsgYW5pbWF0aW9uIH0gaGFzIGJlZW4gcmVuYW1lZCB0byB7IGFuaW1hdGUgfScpO1xuICAgIH1cbiAgICBpZiAoIWFuaW1hdGUpIHJldHVybjtcbiAgICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbY2FudmFzLXNrZXRjaF0gV0FSTjogVXNpbmcgeyBhbmltYXRlIH0gaW4gTm9kZS5qcyBpcyBub3QgeWV0IHN1cHBvcnRlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wcy5wbGF5aW5nKSByZXR1cm47XG4gICAgaWYgKCF0aGlzLnByb3BzLnN0YXJ0ZWQpIHtcbiAgICAgIHRoaXMuX3NpZ25hbEJlZ2luKCk7XG4gICAgICB0aGlzLnByb3BzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIGNvbnNvbGUubG9nKCdwbGF5JywgdGhpcy5wcm9wcy50aW1lKVxuXG4gICAgLy8gU3RhcnQgYSByZW5kZXIgbG9vcFxuICAgIHRoaXMucHJvcHMucGxheWluZyA9IHRydWU7XG4gICAgdGhpcy5fY2FuY2VsVGltZW91dHMoKTtcbiAgICB0aGlzLl9sYXN0VGltZSA9IHJpZ2h0Tm93KCk7XG4gICAgdGhpcy5fcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9hbmltYXRlSGFuZGxlcik7XG4gIH1cblxuICBwYXVzZSAoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucmVjb3JkaW5nKSB0aGlzLmVuZFJlY29yZCgpO1xuICAgIHRoaXMucHJvcHMucGxheWluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fY2FuY2VsVGltZW91dHMoKTtcbiAgfVxuXG4gIHRvZ2dsZVBsYXkgKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnBsYXlpbmcpIHRoaXMucGF1c2UoKTtcbiAgICBlbHNlIHRoaXMucGxheSgpO1xuICB9XG5cbiAgLy8gU3RvcCBhbmQgcmVzZXQgdG8gZnJhbWUgemVyb1xuICBzdG9wICgpIHtcbiAgICB0aGlzLnBhdXNlKCk7XG4gICAgdGhpcy5wcm9wcy5mcmFtZSA9IDA7XG4gICAgdGhpcy5wcm9wcy5wbGF5aGVhZCA9IDA7XG4gICAgdGhpcy5wcm9wcy50aW1lID0gMDtcbiAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IDA7XG4gICAgdGhpcy5wcm9wcy5zdGFydGVkID0gZmFsc2U7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIHJlY29yZCAoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucmVjb3JkaW5nKSByZXR1cm47XG4gICAgaWYgKCFpc0Jyb3dzZXIoKSkge1xuICAgICAgY29uc29sZS5lcnJvcignW2NhbnZhcy1za2V0Y2hdIFdBUk46IFJlY29yZGluZyBmcm9tIE5vZGUuanMgaXMgbm90IHlldCBzdXBwb3J0ZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnN0b3AoKTtcbiAgICB0aGlzLnByb3BzLnBsYXlpbmcgPSB0cnVlO1xuICAgIHRoaXMucHJvcHMucmVjb3JkaW5nID0gdHJ1ZTtcblxuICAgIGNvbnN0IGV4cG9ydE9wdHMgPSB0aGlzLl9jcmVhdGVFeHBvcnRPcHRpb25zKHsgc2VxdWVuY2U6IHRydWUgfSk7XG5cbiAgICBjb25zdCBmcmFtZUludGVydmFsID0gMSAvIHRoaXMucHJvcHMuZnBzO1xuICAgIC8vIFJlbmRlciBlYWNoIGZyYW1lIGluIHRoZSBzZXF1ZW5jZVxuICAgIHRoaXMuX2NhbmNlbFRpbWVvdXRzKCk7XG4gICAgY29uc3QgdGljayA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5wcm9wcy5yZWNvcmRpbmcpIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgIHRoaXMucHJvcHMuZGVsdGFUaW1lID0gZnJhbWVJbnRlcnZhbDtcbiAgICAgIHRoaXMudGljaygpO1xuICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0RnJhbWUoZXhwb3J0T3B0cylcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5wcm9wcy5yZWNvcmRpbmcpIHJldHVybjsgLy8gd2FzIGNhbmNlbGxlZCBiZWZvcmVcbiAgICAgICAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IDA7XG4gICAgICAgICAgdGhpcy5wcm9wcy5mcmFtZSsrO1xuICAgICAgICAgIGlmICh0aGlzLnByb3BzLmZyYW1lIDwgdGhpcy5wcm9wcy50b3RhbEZyYW1lcykge1xuICAgICAgICAgICAgdGhpcy5wcm9wcy50aW1lICs9IGZyYW1lSW50ZXJ2YWw7XG4gICAgICAgICAgICB0aGlzLnByb3BzLnBsYXloZWFkID0gdGhpcy5fY29tcHV0ZVBsYXloZWFkKHRoaXMucHJvcHMudGltZSwgdGhpcy5wcm9wcy5kdXJhdGlvbik7XG4gICAgICAgICAgICB0aGlzLl9yZWNvcmRUaW1lb3V0ID0gc2V0VGltZW91dCh0aWNrLCAwKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc29sZS5sb2coJ0ZpbmlzaGVkIHJlY29yZGluZycpO1xuICAgICAgICAgICAgdGhpcy5fc2lnbmFsRW5kKCk7XG4gICAgICAgICAgICB0aGlzLmVuZFJlY29yZCgpO1xuICAgICAgICAgICAgdGhpcy5zdG9wKCk7XG4gICAgICAgICAgICB0aGlzLnJ1bigpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIC8vIFRyaWdnZXIgYSBzdGFydCBldmVudCBiZWZvcmUgd2UgYmVnaW4gcmVjb3JkaW5nXG4gICAgaWYgKCF0aGlzLnByb3BzLnN0YXJ0ZWQpIHtcbiAgICAgIHRoaXMuX3NpZ25hbEJlZ2luKCk7XG4gICAgICB0aGlzLnByb3BzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIFRyaWdnZXIgJ2JlZ2luIHJlY29yZCcgZXZlbnRcbiAgICBpZiAodGhpcy5za2V0Y2ggJiYgdHlwZW9mIHRoaXMuc2tldGNoLmJlZ2luUmVjb3JkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl93cmFwQ29udGV4dFNjYWxlKHByb3BzID0+IHRoaXMuc2tldGNoLmJlZ2luUmVjb3JkKHByb3BzKSk7XG4gICAgfVxuXG4gICAgLy8gSW5pdGlhdGUgYSBzdHJlYW1pbmcgc3RhcnQgaWYgbmVjZXNzYXJ5XG4gICAgc3RyZWFtU3RhcnQoZXhwb3J0T3B0cylcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB9KVxuICAgICAgLnRoZW4ocmVzcG9uc2UgPT4ge1xuICAgICAgICB0aGlzLl9yYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spO1xuICAgICAgfSk7XG4gIH1cblxuICBfc2lnbmFsQmVnaW4gKCkge1xuICAgIGlmICh0aGlzLnNrZXRjaCAmJiB0eXBlb2YgdGhpcy5za2V0Y2guYmVnaW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuX3dyYXBDb250ZXh0U2NhbGUocHJvcHMgPT4gdGhpcy5za2V0Y2guYmVnaW4ocHJvcHMpKTtcbiAgICB9XG4gIH1cblxuICBfc2lnbmFsRW5kICgpIHtcbiAgICBpZiAodGhpcy5za2V0Y2ggJiYgdHlwZW9mIHRoaXMuc2tldGNoLmVuZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fd3JhcENvbnRleHRTY2FsZShwcm9wcyA9PiB0aGlzLnNrZXRjaC5lbmQocHJvcHMpKTtcbiAgICB9XG4gIH1cblxuICBlbmRSZWNvcmQgKCkge1xuICAgIGNvbnN0IHdhc1JlY29yZGluZyA9IHRoaXMucHJvcHMucmVjb3JkaW5nO1xuXG4gICAgdGhpcy5fY2FuY2VsVGltZW91dHMoKTtcbiAgICB0aGlzLnByb3BzLnJlY29yZGluZyA9IGZhbHNlO1xuICAgIHRoaXMucHJvcHMuZGVsdGFUaW1lID0gMDtcbiAgICB0aGlzLnByb3BzLnBsYXlpbmcgPSBmYWxzZTtcblxuICAgIC8vIHRlbGwgQ0xJIHRoYXQgc3RyZWFtIGhhcyBmaW5pc2hlZFxuICAgIHJldHVybiBzdHJlYW1FbmQoKVxuICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIH0pXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIC8vIFRyaWdnZXIgJ2VuZCByZWNvcmQnIGV2ZW50XG4gICAgICAgIGlmICh3YXNSZWNvcmRpbmcgJiYgdGhpcy5za2V0Y2ggJiYgdHlwZW9mIHRoaXMuc2tldGNoLmVuZFJlY29yZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRoaXMuX3dyYXBDb250ZXh0U2NhbGUocHJvcHMgPT4gdGhpcy5za2V0Y2guZW5kUmVjb3JkKHByb3BzKSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG5cbiAgX2NyZWF0ZUV4cG9ydE9wdGlvbnMgKG9wdCA9IHt9KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHNlcXVlbmNlOiBvcHQuc2VxdWVuY2UsXG4gICAgICBzYXZlOiBvcHQuc2F2ZSxcbiAgICAgIGZwczogdGhpcy5wcm9wcy5mcHMsXG4gICAgICBmcmFtZTogb3B0LnNlcXVlbmNlID8gdGhpcy5wcm9wcy5mcmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgIGZpbGU6IHRoaXMuc2V0dGluZ3MuZmlsZSxcbiAgICAgIG5hbWU6IHRoaXMuc2V0dGluZ3MubmFtZSxcbiAgICAgIHByZWZpeDogdGhpcy5zZXR0aW5ncy5wcmVmaXgsXG4gICAgICBzdWZmaXg6IHRoaXMuc2V0dGluZ3Muc3VmZml4LFxuICAgICAgZW5jb2Rpbmc6IHRoaXMuc2V0dGluZ3MuZW5jb2RpbmcsXG4gICAgICBlbmNvZGluZ1F1YWxpdHk6IHRoaXMuc2V0dGluZ3MuZW5jb2RpbmdRdWFsaXR5LFxuICAgICAgdGltZVN0YW1wOiBvcHQudGltZVN0YW1wIHx8IGdldFRpbWVTdGFtcCgpLFxuICAgICAgdG90YWxGcmFtZXM6IGlzRmluaXRlKHRoaXMucHJvcHMudG90YWxGcmFtZXMpID8gTWF0aC5tYXgoMCwgdGhpcy5wcm9wcy50b3RhbEZyYW1lcykgOiAxMDAwXG4gICAgfTtcbiAgfVxuXG4gIGV4cG9ydEZyYW1lIChvcHQgPSB7fSkge1xuICAgIGlmICghdGhpcy5za2V0Y2gpIHJldHVybiBQcm9taXNlLmFsbChbXSk7XG4gICAgaWYgKHR5cGVvZiB0aGlzLnNrZXRjaC5wcmVFeHBvcnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuc2tldGNoLnByZUV4cG9ydCgpO1xuICAgIH1cblxuICAgIC8vIE9wdGlvbnMgZm9yIGV4cG9ydCBmdW5jdGlvblxuICAgIGxldCBleHBvcnRPcHRzID0gdGhpcy5fY3JlYXRlRXhwb3J0T3B0aW9ucyhvcHQpO1xuXG4gICAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gICAgbGV0IHAgPSBQcm9taXNlLnJlc29sdmUoKTtcbiAgICBpZiAoY2xpZW50ICYmIG9wdC5jb21taXQgJiYgdHlwZW9mIGNsaWVudC5jb21taXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IGNvbW1pdE9wdHMgPSBhc3NpZ24oe30sIGV4cG9ydE9wdHMpO1xuICAgICAgY29uc3QgaGFzaCA9IGNsaWVudC5jb21taXQoY29tbWl0T3B0cyk7XG4gICAgICBpZiAoaXNQcm9taXNlKGhhc2gpKSBwID0gaGFzaDtcbiAgICAgIGVsc2UgcCA9IFByb21pc2UucmVzb2x2ZShoYXNoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcC50aGVuKGhhc2ggPT4ge1xuICAgICAgcmV0dXJuIHRoaXMuX2RvRXhwb3J0RnJhbWUoYXNzaWduKHt9LCBleHBvcnRPcHRzLCB7IGhhc2g6IGhhc2ggfHwgJycgfSkpO1xuICAgIH0pLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgIC8vIE1vc3QgY29tbW9uIHVzZWNhc2UgaXMgdG8gZXhwb3J0IGEgc2luZ2xlIGxheWVyLFxuICAgICAgLy8gc28gbGV0J3Mgb3B0aW1pemUgdGhlIHVzZXIgZXhwZXJpZW5jZSBmb3IgdGhhdC5cbiAgICAgIGlmIChyZXN1bHQubGVuZ3RoID09PSAxKSByZXR1cm4gcmVzdWx0WzBdO1xuICAgICAgZWxzZSByZXR1cm4gcmVzdWx0O1xuICAgIH0pO1xuICB9XG5cbiAgX2RvRXhwb3J0RnJhbWUgKGV4cG9ydE9wdHMgPSB7fSkge1xuICAgIHRoaXMuX3Byb3BzLmV4cG9ydGluZyA9IHRydWU7XG5cbiAgICAvLyBSZXNpemUgdG8gb3V0cHV0IHJlc29sdXRpb25cbiAgICB0aGlzLnJlc2l6ZSgpO1xuXG4gICAgLy8gRHJhdyBhdCB0aGlzIG91dHB1dCByZXNvbHV0aW9uXG4gICAgbGV0IGRyYXdSZXN1bHQgPSB0aGlzLnJlbmRlcigpO1xuXG4gICAgLy8gVGhlIHNlbGYgb3duZWQgY2FudmFzIChtYXkgYmUgdW5kZWZpbmVkLi4uISlcbiAgICBjb25zdCBjYW52YXMgPSB0aGlzLnByb3BzLmNhbnZhcztcblxuICAgIC8vIEdldCBsaXN0IG9mIHJlc3VsdHMgZnJvbSByZW5kZXJcbiAgICBpZiAodHlwZW9mIGRyYXdSZXN1bHQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBkcmF3UmVzdWx0ID0gWyBjYW52YXMgXTtcbiAgICB9XG4gICAgZHJhd1Jlc3VsdCA9IFtdLmNvbmNhdChkcmF3UmVzdWx0KS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICAvLyBUcmFuc2Zvcm0gdGhlIGNhbnZhcy9maWxlIGRlc2NyaXB0b3JzIGludG8gYSBjb25zaXN0ZW50IGZvcm1hdCxcbiAgICAvLyBhbmQgcHVsbCBvdXQgYW55IGRhdGEgVVJMcyBmcm9tIGNhbnZhcyBlbGVtZW50c1xuICAgIGRyYXdSZXN1bHQgPSBkcmF3UmVzdWx0Lm1hcChyZXN1bHQgPT4ge1xuICAgICAgY29uc3QgaGFzRGF0YU9iamVjdCA9IHR5cGVvZiByZXN1bHQgPT09ICdvYmplY3QnICYmIHJlc3VsdCAmJiAoJ2RhdGEnIGluIHJlc3VsdCB8fCAnZGF0YVVSTCcgaW4gcmVzdWx0KTtcbiAgICAgIGNvbnN0IGRhdGEgPSBoYXNEYXRhT2JqZWN0ID8gcmVzdWx0LmRhdGEgOiByZXN1bHQ7XG4gICAgICBjb25zdCBvcHRzID0gaGFzRGF0YU9iamVjdCA/IGFzc2lnbih7fSwgcmVzdWx0LCB7IGRhdGEgfSkgOiB7IGRhdGEgfTtcbiAgICAgIGlmIChpc0NhbnZhcyhkYXRhKSkge1xuICAgICAgICBjb25zdCBlbmNvZGluZyA9IG9wdHMuZW5jb2RpbmcgfHwgZXhwb3J0T3B0cy5lbmNvZGluZztcbiAgICAgICAgY29uc3QgZW5jb2RpbmdRdWFsaXR5ID0gZGVmaW5lZChvcHRzLmVuY29kaW5nUXVhbGl0eSwgZXhwb3J0T3B0cy5lbmNvZGluZ1F1YWxpdHksIDAuOTUpO1xuICAgICAgICBjb25zdCB7IGRhdGFVUkwsIGV4dGVuc2lvbiwgdHlwZSB9ID0gZXhwb3J0Q2FudmFzKGRhdGEsIHsgZW5jb2RpbmcsIGVuY29kaW5nUXVhbGl0eSB9KTtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24ob3B0cywgeyBkYXRhVVJMLCBleHRlbnNpb24sIHR5cGUgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gb3B0cztcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIE5vdyByZXR1cm4gdG8gcmVndWxhciByZW5kZXJpbmcgbW9kZVxuICAgIHRoaXMuX3Byb3BzLmV4cG9ydGluZyA9IGZhbHNlO1xuICAgIHRoaXMucmVzaXplKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcblxuICAgIC8vIEFuZCBub3cgd2UgY2FuIHNhdmUgZWFjaCByZXN1bHRcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoZHJhd1Jlc3VsdC5tYXAoKHJlc3VsdCwgaSwgbGF5ZXJMaXN0KSA9PiB7XG4gICAgICAvLyBCeSBkZWZhdWx0LCBpZiByZW5kZXJpbmcgbXVsdGlwbGUgbGF5ZXJzIHdlIHdpbGwgZ2l2ZSB0aGVtIGluZGljZXNcbiAgICAgIGNvbnN0IGN1ck9wdCA9IGFzc2lnbih7XG4gICAgICAgIGV4dGVuc2lvbjogJycsXG4gICAgICAgIHByZWZpeDogJycsXG4gICAgICAgIHN1ZmZpeDogJydcbiAgICAgIH0sIGV4cG9ydE9wdHMsIHJlc3VsdCwge1xuICAgICAgICBsYXllcjogaSxcbiAgICAgICAgdG90YWxMYXllcnM6IGxheWVyTGlzdC5sZW5ndGhcbiAgICAgIH0pO1xuXG4gICAgICAvLyBJZiBleHBvcnQgaXMgZXhwbGljaXRseSBub3Qgc2F2aW5nLCBtYWtlIHN1cmUgbm90aGluZyBzYXZlc1xuICAgICAgLy8gT3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIGxheWVyIHNhdmUgb3B0aW9uLCBvciBmYWxsYmFjayB0byB0cnVlXG4gICAgICBjb25zdCBzYXZlUGFyYW0gPSBleHBvcnRPcHRzLnNhdmUgPT09IGZhbHNlID8gZmFsc2UgOiByZXN1bHQuc2F2ZTtcbiAgICAgIGN1ck9wdC5zYXZlID0gc2F2ZVBhcmFtICE9PSBmYWxzZTtcblxuICAgICAgLy8gUmVzb2x2ZSBhIGZ1bGwgZmlsZW5hbWUgZnJvbSBhbGwgdGhlIG9wdGlvbnNcbiAgICAgIGN1ck9wdC5maWxlbmFtZSA9IHJlc29sdmVGaWxlbmFtZShjdXJPcHQpO1xuXG4gICAgICAvLyBDbGVhbiB1cCBzb21lIHBhcmFtZXRlcnMgdGhhdCBtYXkgYmUgYW1iaWd1b3VzIHRvIHRoZSB1c2VyXG4gICAgICBkZWxldGUgY3VyT3B0LmVuY29kaW5nO1xuICAgICAgZGVsZXRlIGN1ck9wdC5lbmNvZGluZ1F1YWxpdHk7XG5cbiAgICAgIC8vIENsZWFuIGl0IHVwIGZ1cnRoZXIgYnkganVzdCByZW1vdmluZyB1bmRlZmluZWQgdmFsdWVzXG4gICAgICBmb3IgKGxldCBrIGluIGN1ck9wdCkge1xuICAgICAgICBpZiAodHlwZW9mIGN1ck9wdFtrXSA9PT0gJ3VuZGVmaW5lZCcpIGRlbGV0ZSBjdXJPcHRba107XG4gICAgICB9XG5cbiAgICAgIGxldCBzYXZlUHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSh7fSk7XG4gICAgICBpZiAoY3VyT3B0LnNhdmUpIHtcbiAgICAgICAgLy8gV2hldGhlciB0byBhY3R1YWxseSBzYXZlIChkb3dubG9hZCkgdGhpcyBmcmFnbWVudFxuICAgICAgICBjb25zdCBkYXRhID0gY3VyT3B0LmRhdGE7XG4gICAgICAgIGlmIChjdXJPcHQuZGF0YVVSTCkge1xuICAgICAgICAgIGNvbnN0IGRhdGFVUkwgPSBjdXJPcHQuZGF0YVVSTDtcbiAgICAgICAgICBzYXZlUHJvbWlzZSA9IHNhdmVEYXRhVVJMKGRhdGFVUkwsIGN1ck9wdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2F2ZVByb21pc2UgPSBzYXZlRmlsZShkYXRhLCBjdXJPcHQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gc2F2ZVByb21pc2UudGhlbihzYXZlUmVzdWx0ID0+IHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGN1ck9wdCwgc2F2ZVJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9KSkudGhlbihldiA9PiB7XG4gICAgICBjb25zdCBzYXZlZEV2ZW50cyA9IGV2LmZpbHRlcihlID0+IGUuc2F2ZSk7XG4gICAgICBpZiAoc2F2ZWRFdmVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAvLyBMb2cgdGhlIHNhdmVkIGV4cG9ydHNcbiAgICAgICAgY29uc3QgZXZlbnRXaXRoT3V0cHV0ID0gc2F2ZWRFdmVudHMuZmluZChlID0+IGUub3V0cHV0TmFtZSk7XG4gICAgICAgIGNvbnN0IGlzQ2xpZW50ID0gc2F2ZWRFdmVudHMuc29tZShlID0+IGUuY2xpZW50KTtcbiAgICAgICAgY29uc3QgaXNTdHJlYW1pbmcgPSBzYXZlZEV2ZW50cy5zb21lKGUgPT4gZS5zdHJlYW0pO1xuICAgICAgICBsZXQgaXRlbTtcbiAgICAgICAgLy8gbWFueSBmaWxlcywganVzdCBsb2cgaG93IG1hbnkgd2VyZSBleHBvcnRlZFxuICAgICAgICBpZiAoc2F2ZWRFdmVudHMubGVuZ3RoID4gMSkgaXRlbSA9IHNhdmVkRXZlbnRzLmxlbmd0aDtcbiAgICAgICAgLy8gaW4gQ0xJLCB3ZSBrbm93IGV4YWN0IHBhdGggZGlybmFtZVxuICAgICAgICBlbHNlIGlmIChldmVudFdpdGhPdXRwdXQpIGl0ZW0gPSBgJHtldmVudFdpdGhPdXRwdXQub3V0cHV0TmFtZX0vJHtzYXZlZEV2ZW50c1swXS5maWxlbmFtZX1gO1xuICAgICAgICAvLyBpbiBicm93c2VyLCB3ZSBjYW4gb25seSBrbm93IGl0IHdlbnQgdG8gXCJicm93c2VyIGRvd25sb2FkIGZvbGRlclwiXG4gICAgICAgIGVsc2UgaXRlbSA9IGAke3NhdmVkRXZlbnRzWzBdLmZpbGVuYW1lfWA7XG4gICAgICAgIGxldCBvZlNlcSA9ICcnO1xuICAgICAgICBpZiAoZXhwb3J0T3B0cy5zZXF1ZW5jZSkge1xuICAgICAgICAgIGNvbnN0IGhhc1RvdGFsRnJhbWVzID0gaXNGaW5pdGUodGhpcy5wcm9wcy50b3RhbEZyYW1lcyk7XG4gICAgICAgICAgb2ZTZXEgPSBoYXNUb3RhbEZyYW1lcyA/IGAgKGZyYW1lICR7ZXhwb3J0T3B0cy5mcmFtZSArIDF9IC8gJHt0aGlzLnByb3BzLnRvdGFsRnJhbWVzfSlgIDogYCAoZnJhbWUgJHtleHBvcnRPcHRzLmZyYW1lfSlgO1xuICAgICAgICB9IGVsc2UgaWYgKHNhdmVkRXZlbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICBvZlNlcSA9IGAgZmlsZXNgO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGlzQ2xpZW50ID8gJ2NhbnZhcy1za2V0Y2gtY2xpJyA6ICdjYW52YXMtc2tldGNoJztcbiAgICAgICAgY29uc3QgYWN0aW9uID0gaXNTdHJlYW1pbmcgPyAnU3RyZWFtaW5nIGludG8nIDogJ0V4cG9ydGVkJztcbiAgICAgICAgY29uc29sZS5sb2coYCVjWyR7Y2xpZW50fV0lYyAke2FjdGlvbn0gJWMke2l0ZW19JWMke29mU2VxfWAsICdjb2xvcjogIzhlOGU4ZTsnLCAnY29sb3I6IGluaXRpYWw7JywgJ2ZvbnQtd2VpZ2h0OiBib2xkOycsICdmb250LXdlaWdodDogaW5pdGlhbDsnKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5za2V0Y2gucG9zdEV4cG9ydCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aGlzLnNrZXRjaC5wb3N0RXhwb3J0KCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXY7XG4gICAgfSk7XG4gIH1cblxuICBfd3JhcENvbnRleHRTY2FsZSAoY2IpIHtcbiAgICB0aGlzLl9wcmVSZW5kZXIoKTtcbiAgICBjYih0aGlzLnByb3BzKTtcbiAgICB0aGlzLl9wb3N0UmVuZGVyKCk7XG4gIH1cblxuICBfcHJlUmVuZGVyICgpIHtcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHM7XG5cbiAgICAvLyBTY2FsZSBjb250ZXh0IGZvciB1bml0IHNpemluZ1xuICAgIGlmICghdGhpcy5wcm9wcy5nbCAmJiBwcm9wcy5jb250ZXh0ICYmICFwcm9wcy5wNSkge1xuICAgICAgcHJvcHMuY29udGV4dC5zYXZlKCk7XG4gICAgICBpZiAodGhpcy5zZXR0aW5ncy5zY2FsZUNvbnRleHQgIT09IGZhbHNlKSB7XG4gICAgICAgIHByb3BzLmNvbnRleHQuc2NhbGUocHJvcHMuc2NhbGVYLCBwcm9wcy5zY2FsZVkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocHJvcHMucDUpIHtcbiAgICAgIHByb3BzLnA1LnNjYWxlKHByb3BzLnNjYWxlWCAvIHByb3BzLnBpeGVsUmF0aW8sIHByb3BzLnNjYWxlWSAvIHByb3BzLnBpeGVsUmF0aW8pO1xuICAgIH1cbiAgfVxuXG4gIF9wb3N0UmVuZGVyICgpIHtcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHM7XG5cbiAgICBpZiAoIXRoaXMucHJvcHMuZ2wgJiYgcHJvcHMuY29udGV4dCAmJiAhcHJvcHMucDUpIHtcbiAgICAgIHByb3BzLmNvbnRleHQucmVzdG9yZSgpO1xuICAgIH1cblxuICAgIC8vIEZsdXNoIGJ5IGRlZmF1bHQsIHRoaXMgbWF5IGJlIHJldmlzaXRlZCBhdCBhIGxhdGVyIHBvaW50LlxuICAgIC8vIFdlIGRvIHRoaXMgdG8gZW5zdXJlIHRvRGF0YVVSTCBjYW4gYmUgY2FsbGVkIGltbWVkaWF0ZWx5IGFmdGVyLlxuICAgIC8vIE1vc3QgbGlrZWx5IGJyb3dzZXJzIGFscmVhZHkgaGFuZGxlIHRoaXMsIHNvIHdlIG1heSByZXZpc2l0IHRoaXMgYW5kXG4gICAgLy8gcmVtb3ZlIGl0IGlmIGl0IGltcHJvdmVzIHBlcmZvcm1hbmNlIHdpdGhvdXQgYW55IHVzYWJpbGl0eSBpc3N1ZXMuXG4gICAgaWYgKHByb3BzLmdsICYmIHRoaXMuc2V0dGluZ3MuZmx1c2ggIT09IGZhbHNlICYmICFwcm9wcy5wNSkge1xuICAgICAgcHJvcHMuZ2wuZmx1c2goKTtcbiAgICB9XG4gIH1cblxuICB0aWNrICgpIHtcbiAgICBpZiAodGhpcy5za2V0Y2ggJiYgdHlwZW9mIHRoaXMuc2tldGNoLnRpY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuX3ByZVJlbmRlcigpO1xuICAgICAgdGhpcy5za2V0Y2gudGljayh0aGlzLnByb3BzKTtcbiAgICAgIHRoaXMuX3Bvc3RSZW5kZXIoKTtcbiAgICB9XG4gIH1cblxuICByZW5kZXIgKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnA1KSB7XG4gICAgICB0aGlzLl9sYXN0UmVkcmF3UmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5wcm9wcy5wNS5yZWRyYXcoKTtcbiAgICAgIHJldHVybiB0aGlzLl9sYXN0UmVkcmF3UmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5zdWJtaXREcmF3Q2FsbCgpO1xuICAgIH1cbiAgfVxuXG4gIHN1Ym1pdERyYXdDYWxsICgpIHtcbiAgICBpZiAoIXRoaXMuc2tldGNoKSByZXR1cm47XG5cbiAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgdGhpcy5fcHJlUmVuZGVyKCk7XG5cbiAgICBsZXQgZHJhd1Jlc3VsdDtcblxuICAgIGlmICh0eXBlb2YgdGhpcy5za2V0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGRyYXdSZXN1bHQgPSB0aGlzLnNrZXRjaChwcm9wcyk7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgdGhpcy5za2V0Y2gucmVuZGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBkcmF3UmVzdWx0ID0gdGhpcy5za2V0Y2gucmVuZGVyKHByb3BzKTtcbiAgICB9XG5cbiAgICB0aGlzLl9wb3N0UmVuZGVyKCk7XG5cbiAgICByZXR1cm4gZHJhd1Jlc3VsdDtcbiAgfVxuXG4gIHVwZGF0ZSAob3B0ID0ge30pIHtcbiAgICAvLyBDdXJyZW50bHkgdXBkYXRlKCkgaXMgb25seSBmb2N1c2VkIG9uIHJlc2l6aW5nLFxuICAgIC8vIGJ1dCBsYXRlciB3ZSB3aWxsIHN1cHBvcnQgb3RoZXIgb3B0aW9ucyBsaWtlIHN3aXRjaGluZ1xuICAgIC8vIGZyYW1lcyBhbmQgc3VjaC5cbiAgICBjb25zdCBub3RZZXRTdXBwb3J0ZWQgPSBbXG4gICAgICAnYW5pbWF0ZSdcbiAgICBdO1xuXG4gICAgT2JqZWN0LmtleXMob3B0KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICBpZiAobm90WWV0U3VwcG9ydGVkLmluZGV4T2Yoa2V5KSA+PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgU29ycnksIHRoZSB7ICR7a2V5fSB9IG9wdGlvbiBpcyBub3QgeWV0IHN1cHBvcnRlZCB3aXRoIHVwZGF0ZSgpLmApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgY29uc3Qgb2xkQ2FudmFzID0gdGhpcy5fc2V0dGluZ3MuY2FudmFzO1xuICAgIGNvbnN0IG9sZENvbnRleHQgPSB0aGlzLl9zZXR0aW5ncy5jb250ZXh0O1xuXG4gICAgLy8gTWVyZ2UgbmV3IG9wdGlvbnMgaW50byBzZXR0aW5nc1xuICAgIGZvciAobGV0IGtleSBpbiBvcHQpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3B0W2tleV07XG4gICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJykgeyAvLyBpZ25vcmUgdW5kZWZpbmVkXG4gICAgICAgIHRoaXMuX3NldHRpbmdzW2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNZXJnZSBpbiB0aW1lIHByb3BzXG4gICAgY29uc3QgdGltZU9wdHMgPSBPYmplY3QuYXNzaWduKHt9LCB0aGlzLl9zZXR0aW5ncywgb3B0KTtcbiAgICBpZiAoJ3RpbWUnIGluIG9wdCAmJiAnZnJhbWUnIGluIG9wdCkgdGhyb3cgbmV3IEVycm9yKCdZb3Ugc2hvdWxkIHNwZWNpZnkgeyB0aW1lIH0gb3IgeyBmcmFtZSB9IGJ1dCBub3QgYm90aCcpO1xuICAgIGVsc2UgaWYgKCd0aW1lJyBpbiBvcHQpIGRlbGV0ZSB0aW1lT3B0cy5mcmFtZTtcbiAgICBlbHNlIGlmICgnZnJhbWUnIGluIG9wdCkgZGVsZXRlIHRpbWVPcHRzLnRpbWU7XG4gICAgaWYgKCdkdXJhdGlvbicgaW4gb3B0ICYmICd0b3RhbEZyYW1lcycgaW4gb3B0KSB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBzaG91bGQgc3BlY2lmeSB7IGR1cmF0aW9uIH0gb3IgeyB0b3RhbEZyYW1lcyB9IGJ1dCBub3QgYm90aCcpO1xuICAgIGVsc2UgaWYgKCdkdXJhdGlvbicgaW4gb3B0KSBkZWxldGUgdGltZU9wdHMudG90YWxGcmFtZXM7XG4gICAgZWxzZSBpZiAoJ3RvdGFsRnJhbWVzJyBpbiBvcHQpIGRlbGV0ZSB0aW1lT3B0cy5kdXJhdGlvbjtcblxuICAgIC8vIE1lcmdlIGluIHVzZXIgZGF0YSB3aXRob3V0IGNvcHlpbmdcbiAgICBpZiAoJ2RhdGEnIGluIG9wdCkgdGhpcy5fcHJvcHMuZGF0YSA9IG9wdC5kYXRhO1xuXG4gICAgY29uc3QgdGltZVByb3BzID0gdGhpcy5nZXRUaW1lUHJvcHModGltZU9wdHMpO1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5fcHJvcHMsIHRpbWVQcm9wcyk7XG5cbiAgICAvLyBJZiBlaXRoZXIgY2FudmFzIG9yIGNvbnRleHQgaXMgY2hhbmdlZCwgd2Ugc2hvdWxkIHJlLXVwZGF0ZVxuICAgIGlmIChvbGRDYW52YXMgIT09IHRoaXMuX3NldHRpbmdzLmNhbnZhcyB8fCBvbGRDb250ZXh0ICE9PSB0aGlzLl9zZXR0aW5ncy5jb250ZXh0KSB7XG4gICAgICBjb25zdCB7IGNhbnZhcywgY29udGV4dCB9ID0gY3JlYXRlQ2FudmFzKHRoaXMuX3NldHRpbmdzKTtcblxuICAgICAgdGhpcy5wcm9wcy5jYW52YXMgPSBjYW52YXM7XG4gICAgICB0aGlzLnByb3BzLmNvbnRleHQgPSBjb250ZXh0O1xuXG4gICAgICAvLyBEZWxldGUgb3IgYWRkIGEgJ2dsJyBwcm9wIGZvciBjb252ZW5pZW5jZVxuICAgICAgdGhpcy5fc2V0dXBHTEtleSgpO1xuXG4gICAgICAvLyBSZS1tb3VudCB0aGUgbmV3IGNhbnZhcyBpZiBpdCBoYXMgbm8gcGFyZW50XG4gICAgICB0aGlzLl9hcHBlbmRDYW52YXNJZk5lZWRlZCgpO1xuICAgIH1cblxuICAgIC8vIFNwZWNpYWwgY2FzZSB0byBzdXBwb3J0IFA1LmpzXG4gICAgaWYgKG9wdC5wNSAmJiB0eXBlb2Ygb3B0LnA1ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLnByb3BzLnA1ID0gb3B0LnA1O1xuICAgICAgdGhpcy5wcm9wcy5wNS5kcmF3ID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5faXNQNVJlc2l6aW5nKSByZXR1cm47XG4gICAgICAgIHRoaXMuX2xhc3RSZWRyYXdSZXN1bHQgPSB0aGlzLnN1Ym1pdERyYXdDYWxsKCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIFVwZGF0ZSBwbGF5aW5nIHN0YXRlIGlmIG5lY2Vzc2FyeVxuICAgIGlmICgncGxheWluZycgaW4gb3B0KSB7XG4gICAgICBpZiAob3B0LnBsYXlpbmcpIHRoaXMucGxheSgpO1xuICAgICAgZWxzZSB0aGlzLnBhdXNlKCk7XG4gICAgfVxuXG4gICAgY2hlY2tTZXR0aW5ncyh0aGlzLl9zZXR0aW5ncyk7XG5cbiAgICAvLyBEcmF3IG5ldyBmcmFtZVxuICAgIHRoaXMucmVzaXplKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICByZXR1cm4gdGhpcy5wcm9wcztcbiAgfVxuXG4gIHJlc2l6ZSAoKSB7XG4gICAgY29uc3Qgb2xkU2l6ZXMgPSB0aGlzLl9nZXRTaXplUHJvcHMoKTtcblxuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5zZXR0aW5ncztcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHM7XG5cbiAgICAvLyBSZWNvbXB1dGUgbmV3IHByb3BlcnRpZXMgYmFzZWQgb24gY3VycmVudCBzZXR1cFxuICAgIGNvbnN0IG5ld1Byb3BzID0gcmVzaXplQ2FudmFzKHByb3BzLCBzZXR0aW5ncyk7XG5cbiAgICAvLyBBc3NpZ24gdG8gY3VycmVudCBwcm9wc1xuICAgIE9iamVjdC5hc3NpZ24odGhpcy5fcHJvcHMsIG5ld1Byb3BzKTtcblxuICAgIC8vIE5vdyB3ZSBhY3R1YWxseSB1cGRhdGUgdGhlIGNhbnZhcyB3aWR0aC9oZWlnaHQgYW5kIHN0eWxlIHByb3BzXG4gICAgY29uc3Qge1xuICAgICAgcGl4ZWxSYXRpbyxcbiAgICAgIGNhbnZhc1dpZHRoLFxuICAgICAgY2FudmFzSGVpZ2h0LFxuICAgICAgc3R5bGVXaWR0aCxcbiAgICAgIHN0eWxlSGVpZ2h0XG4gICAgfSA9IHRoaXMucHJvcHM7XG5cbiAgICAvLyBVcGRhdGUgY2FudmFzIHNldHRpbmdzXG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5wcm9wcy5jYW52YXM7XG4gICAgaWYgKGNhbnZhcyAmJiBzZXR0aW5ncy5yZXNpemVDYW52YXMgIT09IGZhbHNlKSB7XG4gICAgICBpZiAocHJvcHMucDUpIHtcbiAgICAgICAgLy8gUDUuanMgc3BlY2lmaWMgZWRnZSBjYXNlXG4gICAgICAgIGlmIChjYW52YXMud2lkdGggIT09IGNhbnZhc1dpZHRoIHx8IGNhbnZhcy5oZWlnaHQgIT09IGNhbnZhc0hlaWdodCkge1xuICAgICAgICAgIHRoaXMuX2lzUDVSZXNpemluZyA9IHRydWU7XG4gICAgICAgICAgLy8gVGhpcyBjYXVzZXMgYSByZS1kcmF3IDpcXCBzbyB3ZSBpZ25vcmUgZHJhd3MgaW4gdGhlIG1lYW4gdGltZS4uLiBzb3J0YSBoYWNreVxuICAgICAgICAgIHByb3BzLnA1LnBpeGVsRGVuc2l0eShwaXhlbFJhdGlvKTtcbiAgICAgICAgICBwcm9wcy5wNS5yZXNpemVDYW52YXMoY2FudmFzV2lkdGggLyBwaXhlbFJhdGlvLCBjYW52YXNIZWlnaHQgLyBwaXhlbFJhdGlvLCBmYWxzZSk7XG4gICAgICAgICAgdGhpcy5faXNQNVJlc2l6aW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZvcmNlIGNhbnZhcyBzaXplXG4gICAgICAgIGlmIChjYW52YXMud2lkdGggIT09IGNhbnZhc1dpZHRoKSBjYW52YXMud2lkdGggPSBjYW52YXNXaWR0aDtcbiAgICAgICAgaWYgKGNhbnZhcy5oZWlnaHQgIT09IGNhbnZhc0hlaWdodCkgY2FudmFzLmhlaWdodCA9IGNhbnZhc0hlaWdodDtcbiAgICAgIH1cbiAgICAgIC8vIFVwZGF0ZSBjYW52YXMgc3R5bGVcbiAgICAgIGlmIChpc0Jyb3dzZXIoKSAmJiBzZXR0aW5ncy5zdHlsZUNhbnZhcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgY2FudmFzLnN0eWxlLndpZHRoID0gYCR7c3R5bGVXaWR0aH1weGA7XG4gICAgICAgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSBgJHtzdHlsZUhlaWdodH1weGA7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgbmV3U2l6ZXMgPSB0aGlzLl9nZXRTaXplUHJvcHMoKTtcbiAgICBsZXQgY2hhbmdlZCA9ICFkZWVwRXF1YWwob2xkU2l6ZXMsIG5ld1NpemVzKTtcbiAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgdGhpcy5fc2l6ZUNoYW5nZWQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoYW5nZWQ7XG4gIH1cblxuICBfc2l6ZUNoYW5nZWQgKCkge1xuICAgIC8vIFNlbmQgcmVzaXplIGV2ZW50IHRvIHNrZXRjaFxuICAgIGlmICh0aGlzLnNrZXRjaCAmJiB0eXBlb2YgdGhpcy5za2V0Y2gucmVzaXplID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLnNrZXRjaC5yZXNpemUodGhpcy5wcm9wcyk7XG4gICAgfVxuICB9XG5cbiAgYW5pbWF0ZSAoKSB7XG4gICAgaWYgKCF0aGlzLnByb3BzLnBsYXlpbmcpIHJldHVybjtcbiAgICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbY2FudmFzLXNrZXRjaF0gV0FSTjogQW5pbWF0aW9uIGluIE5vZGUuanMgaXMgbm90IHlldCBzdXBwb3J0ZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLl9hbmltYXRlSGFuZGxlcik7XG5cbiAgICBsZXQgbm93ID0gcmlnaHROb3coKTtcblxuICAgIGNvbnN0IGZwcyA9IHRoaXMucHJvcHMuZnBzO1xuICAgIGNvbnN0IGZyYW1lSW50ZXJ2YWxNUyA9IDEwMDAgLyBmcHM7XG4gICAgbGV0IGRlbHRhVGltZU1TID0gbm93IC0gdGhpcy5fbGFzdFRpbWU7XG5cbiAgICBjb25zdCBkdXJhdGlvbiA9IHRoaXMucHJvcHMuZHVyYXRpb247XG4gICAgY29uc3QgaGFzRHVyYXRpb24gPSB0eXBlb2YgZHVyYXRpb24gPT09ICdudW1iZXInICYmIGlzRmluaXRlKGR1cmF0aW9uKTtcblxuICAgIGxldCBpc05ld0ZyYW1lID0gdHJ1ZTtcbiAgICBjb25zdCBwbGF5YmFja1JhdGUgPSB0aGlzLnNldHRpbmdzLnBsYXliYWNrUmF0ZTtcbiAgICBpZiAocGxheWJhY2tSYXRlID09PSAnZml4ZWQnKSB7XG4gICAgICBkZWx0YVRpbWVNUyA9IGZyYW1lSW50ZXJ2YWxNUztcbiAgICB9IGVsc2UgaWYgKHBsYXliYWNrUmF0ZSA9PT0gJ3Rocm90dGxlJykge1xuICAgICAgaWYgKGRlbHRhVGltZU1TID4gZnJhbWVJbnRlcnZhbE1TKSB7XG4gICAgICAgIG5vdyA9IG5vdyAtIChkZWx0YVRpbWVNUyAlIGZyYW1lSW50ZXJ2YWxNUyk7XG4gICAgICAgIHRoaXMuX2xhc3RUaW1lID0gbm93O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNOZXdGcmFtZSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9sYXN0VGltZSA9IG5vdztcbiAgICB9XG5cbiAgICBjb25zdCBkZWx0YVRpbWUgPSBkZWx0YVRpbWVNUyAvIDEwMDA7XG4gICAgbGV0IG5ld1RpbWUgPSB0aGlzLnByb3BzLnRpbWUgKyBkZWx0YVRpbWUgKiB0aGlzLnByb3BzLnRpbWVTY2FsZTtcblxuICAgIC8vIEhhbmRsZSByZXZlcnNlIHRpbWUgc2NhbGVcbiAgICBpZiAobmV3VGltZSA8IDAgJiYgaGFzRHVyYXRpb24pIHtcbiAgICAgIG5ld1RpbWUgPSBkdXJhdGlvbiArIG5ld1RpbWU7XG4gICAgfVxuXG4gICAgLy8gUmUtc3RhcnQgYW5pbWF0aW9uXG4gICAgbGV0IGlzRmluaXNoZWQgPSBmYWxzZTtcbiAgICBsZXQgaXNMb29wU3RhcnQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGxvb3BpbmcgPSB0aGlzLnNldHRpbmdzLmxvb3AgIT09IGZhbHNlO1xuXG4gICAgaWYgKGhhc0R1cmF0aW9uICYmIG5ld1RpbWUgPj0gZHVyYXRpb24pIHtcbiAgICAgIC8vIFJlLXN0YXJ0IGFuaW1hdGlvblxuICAgICAgaWYgKGxvb3BpbmcpIHtcbiAgICAgICAgaXNOZXdGcmFtZSA9IHRydWU7XG4gICAgICAgIG5ld1RpbWUgPSBuZXdUaW1lICUgZHVyYXRpb247XG4gICAgICAgIGlzTG9vcFN0YXJ0ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzTmV3RnJhbWUgPSBmYWxzZTtcbiAgICAgICAgbmV3VGltZSA9IGR1cmF0aW9uO1xuICAgICAgICBpc0ZpbmlzaGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2lnbmFsRW5kKCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTmV3RnJhbWUpIHtcbiAgICAgIHRoaXMucHJvcHMuZGVsdGFUaW1lID0gZGVsdGFUaW1lO1xuICAgICAgdGhpcy5wcm9wcy50aW1lID0gbmV3VGltZTtcbiAgICAgIHRoaXMucHJvcHMucGxheWhlYWQgPSB0aGlzLl9jb21wdXRlUGxheWhlYWQobmV3VGltZSwgZHVyYXRpb24pO1xuICAgICAgY29uc3QgbGFzdEZyYW1lID0gdGhpcy5wcm9wcy5mcmFtZTtcbiAgICAgIHRoaXMucHJvcHMuZnJhbWUgPSB0aGlzLl9jb21wdXRlQ3VycmVudEZyYW1lKCk7XG4gICAgICBpZiAoaXNMb29wU3RhcnQpIHRoaXMuX3NpZ25hbEJlZ2luKCk7XG4gICAgICBpZiAobGFzdEZyYW1lICE9PSB0aGlzLnByb3BzLmZyYW1lKSB0aGlzLnRpY2soKTtcbiAgICAgIHRoaXMucmVuZGVyKCk7XG4gICAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IDA7XG4gICAgfVxuXG4gICAgaWYgKGlzRmluaXNoZWQpIHtcbiAgICAgIHRoaXMucGF1c2UoKTtcbiAgICB9XG4gIH1cblxuICBkaXNwYXRjaCAoY2IpIHtcbiAgICBpZiAodHlwZW9mIGNiICE9PSAnZnVuY3Rpb24nKSB0aHJvdyBuZXcgRXJyb3IoJ211c3QgcGFzcyBmdW5jdGlvbiBpbnRvIGRpc3BhdGNoKCknKTtcbiAgICBjYih0aGlzLnByb3BzKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgbW91bnQgKCkge1xuICAgIHRoaXMuX2FwcGVuZENhbnZhc0lmTmVlZGVkKCk7XG4gIH1cblxuICB1bm1vdW50ICgpIHtcbiAgICBpZiAoaXNCcm93c2VyKCkpIHtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl9yZXNpemVIYW5kbGVyKTtcbiAgICAgIHRoaXMuX2tleWJvYXJkU2hvcnRjdXRzLmRldGFjaCgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wcy5jYW52YXMucGFyZW50RWxlbWVudCkge1xuICAgICAgdGhpcy5wcm9wcy5jYW52YXMucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLnByb3BzLmNhbnZhcyk7XG4gICAgfVxuICB9XG5cbiAgX2FwcGVuZENhbnZhc0lmTmVlZGVkICgpIHtcbiAgICBpZiAoIWlzQnJvd3NlcigpKSByZXR1cm47XG4gICAgaWYgKHRoaXMuc2V0dGluZ3MucGFyZW50ICE9PSBmYWxzZSAmJiAodGhpcy5wcm9wcy5jYW52YXMgJiYgIXRoaXMucHJvcHMuY2FudmFzLnBhcmVudEVsZW1lbnQpKSB7XG4gICAgICBjb25zdCBkZWZhdWx0UGFyZW50ID0gdGhpcy5zZXR0aW5ncy5wYXJlbnQgfHwgZG9jdW1lbnQuYm9keTtcbiAgICAgIGRlZmF1bHRQYXJlbnQuYXBwZW5kQ2hpbGQodGhpcy5wcm9wcy5jYW52YXMpO1xuICAgIH1cbiAgfVxuXG4gIF9zZXR1cEdMS2V5ICgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5jb250ZXh0KSB7XG4gICAgICBpZiAoaXNXZWJHTENvbnRleHQodGhpcy5wcm9wcy5jb250ZXh0KSkge1xuICAgICAgICB0aGlzLl9wcm9wcy5nbCA9IHRoaXMucHJvcHMuY29udGV4dDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9wcm9wcy5nbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXRUaW1lUHJvcHMgKHNldHRpbmdzID0ge30pIHtcbiAgICAvLyBHZXQgdGltaW5nIGRhdGFcbiAgICBsZXQgZHVyYXRpb24gPSBzZXR0aW5ncy5kdXJhdGlvbjtcbiAgICBsZXQgdG90YWxGcmFtZXMgPSBzZXR0aW5ncy50b3RhbEZyYW1lcztcbiAgICBjb25zdCB0aW1lU2NhbGUgPSBkZWZpbmVkKHNldHRpbmdzLnRpbWVTY2FsZSwgMSk7XG4gICAgY29uc3QgZnBzID0gZGVmaW5lZChzZXR0aW5ncy5mcHMsIDI0KTtcbiAgICBjb25zdCBoYXNEdXJhdGlvbiA9IHR5cGVvZiBkdXJhdGlvbiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoZHVyYXRpb24pO1xuICAgIGNvbnN0IGhhc1RvdGFsRnJhbWVzID0gdHlwZW9mIHRvdGFsRnJhbWVzID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh0b3RhbEZyYW1lcyk7XG5cbiAgICBjb25zdCB0b3RhbEZyYW1lc0Zyb21EdXJhdGlvbiA9IGhhc0R1cmF0aW9uID8gTWF0aC5mbG9vcihmcHMgKiBkdXJhdGlvbikgOiB1bmRlZmluZWQ7XG4gICAgY29uc3QgZHVyYXRpb25Gcm9tVG90YWxGcmFtZXMgPSBoYXNUb3RhbEZyYW1lcyA/ICh0b3RhbEZyYW1lcyAvIGZwcykgOiB1bmRlZmluZWQ7XG4gICAgaWYgKGhhc0R1cmF0aW9uICYmIGhhc1RvdGFsRnJhbWVzICYmIHRvdGFsRnJhbWVzRnJvbUR1cmF0aW9uICE9PSB0b3RhbEZyYW1lcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3Ugc2hvdWxkIHNwZWNpZnkgZWl0aGVyIGR1cmF0aW9uIG9yIHRvdGFsRnJhbWVzLCBidXQgbm90IGJvdGguIE9yLCB0aGV5IG11c3QgbWF0Y2ggZXhhY3RseS4nKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHNldHRpbmdzLmRpbWVuc2lvbnMgPT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBzZXR0aW5ncy51bml0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGNvbnNvbGUud2FybihgWW91J3ZlIHNwZWNpZmllZCBhIHsgdW5pdHMgfSBzZXR0aW5nIGJ1dCBubyB7IGRpbWVuc2lvbiB9LCBzbyB0aGUgdW5pdHMgd2lsbCBiZSBpZ25vcmVkLmApO1xuICAgIH1cblxuICAgIHRvdGFsRnJhbWVzID0gZGVmaW5lZCh0b3RhbEZyYW1lcywgdG90YWxGcmFtZXNGcm9tRHVyYXRpb24sIEluZmluaXR5KTtcbiAgICBkdXJhdGlvbiA9IGRlZmluZWQoZHVyYXRpb24sIGR1cmF0aW9uRnJvbVRvdGFsRnJhbWVzLCBJbmZpbml0eSk7XG5cbiAgICBjb25zdCBzdGFydFRpbWUgPSBzZXR0aW5ncy50aW1lO1xuICAgIGNvbnN0IHN0YXJ0RnJhbWUgPSBzZXR0aW5ncy5mcmFtZTtcbiAgICBjb25zdCBoYXNTdGFydFRpbWUgPSB0eXBlb2Ygc3RhcnRUaW1lID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShzdGFydFRpbWUpO1xuICAgIGNvbnN0IGhhc1N0YXJ0RnJhbWUgPSB0eXBlb2Ygc3RhcnRGcmFtZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoc3RhcnRGcmFtZSk7XG5cbiAgICAvLyBzdGFydCBhdCB6ZXJvIHVubGVzcyB1c2VyIHNwZWNpZmllcyBmcmFtZSBvciB0aW1lIChidXQgbm90IGJvdGggbWlzbWF0Y2hlZClcbiAgICBsZXQgdGltZSA9IDA7XG4gICAgbGV0IGZyYW1lID0gMDtcbiAgICBsZXQgcGxheWhlYWQgPSAwO1xuICAgIGlmIChoYXNTdGFydFRpbWUgJiYgaGFzU3RhcnRGcmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdZb3Ugc2hvdWxkIHNwZWNpZnkgZWl0aGVyIHN0YXJ0IGZyYW1lIG9yIHRpbWUsIGJ1dCBub3QgYm90aC4nKTtcbiAgICB9IGVsc2UgaWYgKGhhc1N0YXJ0VGltZSkge1xuICAgICAgLy8gVXNlciBzcGVjaWZpZXMgdGltZSwgd2UgaW5mZXIgZnJhbWVzIGZyb20gRlBTXG4gICAgICB0aW1lID0gc3RhcnRUaW1lO1xuICAgICAgcGxheWhlYWQgPSB0aGlzLl9jb21wdXRlUGxheWhlYWQodGltZSwgZHVyYXRpb24pO1xuICAgICAgZnJhbWUgPSB0aGlzLl9jb21wdXRlRnJhbWUoXG4gICAgICAgIHBsYXloZWFkLCB0aW1lLFxuICAgICAgICB0b3RhbEZyYW1lcywgZnBzXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAoaGFzU3RhcnRGcmFtZSkge1xuICAgICAgLy8gVXNlciBzcGVjaWZpZXMgZnJhbWUgbnVtYmVyLCB3ZSBpbmZlciB0aW1lIGZyb20gRlBTXG4gICAgICBmcmFtZSA9IHN0YXJ0RnJhbWU7XG4gICAgICB0aW1lID0gZnJhbWUgLyBmcHM7XG4gICAgICBwbGF5aGVhZCA9IHRoaXMuX2NvbXB1dGVQbGF5aGVhZCh0aW1lLCBkdXJhdGlvbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBsYXloZWFkLFxuICAgICAgdGltZSxcbiAgICAgIGZyYW1lLFxuICAgICAgZHVyYXRpb24sXG4gICAgICB0b3RhbEZyYW1lcyxcbiAgICAgIGZwcyxcbiAgICAgIHRpbWVTY2FsZVxuICAgIH07XG4gIH1cblxuICBzZXR1cCAoc2V0dGluZ3MgPSB7fSkge1xuICAgIGlmICh0aGlzLnNrZXRjaCkgdGhyb3cgbmV3IEVycm9yKCdNdWx0aXBsZSBzZXR1cCgpIGNhbGxzIG5vdCB5ZXQgc3VwcG9ydGVkLicpO1xuXG4gICAgdGhpcy5fc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBzZXR0aW5ncywgdGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgY2hlY2tTZXR0aW5ncyh0aGlzLl9zZXR0aW5ncyk7XG5cbiAgICAvLyBHZXQgaW5pdGlhbCBjYW52YXMgJiBjb250ZXh0XG4gICAgY29uc3QgeyBjb250ZXh0LCBjYW52YXMgfSA9IGNyZWF0ZUNhbnZhcyh0aGlzLl9zZXR0aW5ncyk7XG5cbiAgICBjb25zdCB0aW1lUHJvcHMgPSB0aGlzLmdldFRpbWVQcm9wcyh0aGlzLl9zZXR0aW5ncyk7XG5cbiAgICAvLyBJbml0aWFsIHJlbmRlciBzdGF0ZSBmZWF0dXJlc1xuICAgIHRoaXMuX3Byb3BzID0ge1xuICAgICAgLi4udGltZVByb3BzLFxuICAgICAgY2FudmFzLFxuICAgICAgY29udGV4dCxcbiAgICAgIGRlbHRhVGltZTogMCxcbiAgICAgIHN0YXJ0ZWQ6IGZhbHNlLFxuICAgICAgZXhwb3J0aW5nOiBmYWxzZSxcbiAgICAgIHBsYXlpbmc6IGZhbHNlLFxuICAgICAgcmVjb3JkaW5nOiBmYWxzZSxcbiAgICAgIHNldHRpbmdzOiB0aGlzLnNldHRpbmdzLFxuICAgICAgZGF0YTogdGhpcy5zZXR0aW5ncy5kYXRhLFxuXG4gICAgICAvLyBFeHBvcnQgc29tZSBzcGVjaWZpYyBhY3Rpb25zIHRvIHRoZSBza2V0Y2hcbiAgICAgIHJlbmRlcjogKCkgPT4gdGhpcy5yZW5kZXIoKSxcbiAgICAgIHRvZ2dsZVBsYXk6ICgpID0+IHRoaXMudG9nZ2xlUGxheSgpLFxuICAgICAgZGlzcGF0Y2g6IChjYikgPT4gdGhpcy5kaXNwYXRjaChjYiksXG4gICAgICB0aWNrOiAoKSA9PiB0aGlzLnRpY2soKSxcbiAgICAgIHJlc2l6ZTogKCkgPT4gdGhpcy5yZXNpemUoKSxcbiAgICAgIHVwZGF0ZTogKG9wdCkgPT4gdGhpcy51cGRhdGUob3B0KSxcbiAgICAgIGV4cG9ydEZyYW1lOiBvcHQgPT4gdGhpcy5leHBvcnRGcmFtZShvcHQpLFxuICAgICAgcmVjb3JkOiAoKSA9PiB0aGlzLnJlY29yZCgpLFxuICAgICAgcGxheTogKCkgPT4gdGhpcy5wbGF5KCksXG4gICAgICBwYXVzZTogKCkgPT4gdGhpcy5wYXVzZSgpLFxuICAgICAgc3RvcDogKCkgPT4gdGhpcy5zdG9wKClcbiAgICB9O1xuXG4gICAgLy8gRm9yIFdlYkdMIHNrZXRjaGVzLCBhIGdsIHZhcmlhYmxlIHJlYWRzIGEgYml0IGJldHRlclxuICAgIHRoaXMuX3NldHVwR0xLZXkoKTtcblxuICAgIC8vIFRyaWdnZXIgaW5pdGlhbCByZXNpemUgbm93IHNvIHRoYXQgY2FudmFzIGlzIGFscmVhZHkgc2l6ZWRcbiAgICAvLyBieSB0aGUgdGltZSB3ZSBsb2FkIHRoZSBza2V0Y2hcbiAgICB0aGlzLnJlc2l6ZSgpO1xuICB9XG5cbiAgbG9hZEFuZFJ1biAoY2FudmFzU2tldGNoLCBuZXdTZXR0aW5ncykge1xuICAgIHJldHVybiB0aGlzLmxvYWQoY2FudmFzU2tldGNoLCBuZXdTZXR0aW5ncykudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLnJ1bigpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSk7XG4gIH1cblxuICB1bmxvYWQgKCkge1xuICAgIHRoaXMucGF1c2UoKTtcbiAgICBpZiAoIXRoaXMuc2tldGNoKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiB0aGlzLnNrZXRjaC51bmxvYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuX3dyYXBDb250ZXh0U2NhbGUocHJvcHMgPT4gdGhpcy5za2V0Y2gudW5sb2FkKHByb3BzKSk7XG4gICAgfVxuICAgIHRoaXMuX3NrZXRjaCA9IG51bGw7XG4gIH1cblxuICBkZXN0cm95ICgpIHtcbiAgICB0aGlzLnVubG9hZCgpO1xuICAgIHRoaXMudW5tb3VudCgpO1xuICB9XG5cbiAgbG9hZCAoY3JlYXRlU2tldGNoLCBuZXdTZXR0aW5ncykge1xuICAgIC8vIFVzZXIgZGlkbid0IHNwZWNpZnkgYSBmdW5jdGlvblxuICAgIGlmICh0eXBlb2YgY3JlYXRlU2tldGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBmdW5jdGlvbiBtdXN0IHRha2UgaW4gYSBmdW5jdGlvbiBhcyB0aGUgZmlyc3QgcGFyYW1ldGVyLiBFeGFtcGxlOlxcbiAgY2FudmFzU2tldGNoZXIoKCkgPT4geyAuLi4gfSwgc2V0dGluZ3MpJyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2tldGNoKSB7XG4gICAgICB0aGlzLnVubG9hZCgpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmV3U2V0dGluZ3MgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzLnVwZGF0ZShuZXdTZXR0aW5ncyk7XG4gICAgfVxuXG4gICAgLy8gVGhpcyBpcyBhIGJpdCBvZiBhIHRyaWNreSBjYXNlOyB3ZSBzZXQgdXAgdGhlIGF1dG8tc2NhbGluZyBoZXJlXG4gICAgLy8gaW4gY2FzZSB0aGUgdXNlciBkZWNpZGVzIHRvIHJlbmRlciBhbnl0aGluZyB0byB0aGUgY29udGV4dCAqYmVmb3JlKiB0aGVcbiAgICAvLyByZW5kZXIoKSBmdW5jdGlvbi4uLiBIb3dldmVyLCB1c2VycyBzaG91bGQgaW5zdGVhZCB1c2UgYmVnaW4oKSBmdW5jdGlvbiBmb3IgdGhhdC5cbiAgICB0aGlzLl9wcmVSZW5kZXIoKTtcblxuICAgIGxldCBwcmVsb2FkID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgICAvLyBCZWNhdXNlIG9mIFA1LmpzJ3MgdW51c3VhbCBzdHJ1Y3R1cmUsIHdlIGhhdmUgdG8gZG8gYSBiaXQgb2ZcbiAgICAvLyBsaWJyYXJ5LXNwZWNpZmljIGNoYW5nZXMgdG8gc3VwcG9ydCBpdCBwcm9wZXJseS5cbiAgICBpZiAodGhpcy5zZXR0aW5ncy5wNSkge1xuICAgICAgaWYgKCFpc0Jyb3dzZXIoKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1tjYW52YXMtc2tldGNoXSBFUlJPUjogVXNpbmcgcDUuanMgaW4gTm9kZS5qcyBpcyBub3Qgc3VwcG9ydGVkJyk7XG4gICAgICB9XG4gICAgICBwcmVsb2FkID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIGxldCBQNUNvbnN0cnVjdG9yID0gdGhpcy5zZXR0aW5ncy5wNTtcbiAgICAgICAgbGV0IHByZWxvYWQ7XG4gICAgICAgIGlmIChQNUNvbnN0cnVjdG9yLnA1KSB7XG4gICAgICAgICAgcHJlbG9hZCA9IFA1Q29uc3RydWN0b3IucHJlbG9hZDtcbiAgICAgICAgICBQNUNvbnN0cnVjdG9yID0gUDVDb25zdHJ1Y3Rvci5wNTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSBza2V0Y2ggc2V0dXA7IGRpc2FibGUgbG9vcCwgc2V0IHNpemluZywgZXRjLlxuICAgICAgICBjb25zdCBwNVNrZXRjaCA9IHA1ID0+IHtcbiAgICAgICAgICAvLyBIb29rIGluIHByZWxvYWQgaWYgbmVjZXNzYXJ5XG4gICAgICAgICAgaWYgKHByZWxvYWQpIHA1LnByZWxvYWQgPSAoKSA9PiBwcmVsb2FkKHA1KTtcbiAgICAgICAgICBwNS5zZXR1cCA9ICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcbiAgICAgICAgICAgIGNvbnN0IGlzR0wgPSB0aGlzLnNldHRpbmdzLmNvbnRleHQgPT09ICd3ZWJnbCc7XG4gICAgICAgICAgICBjb25zdCByZW5kZXJlciA9IGlzR0wgPyBwNS5XRUJHTCA6IHA1LlAyRDtcbiAgICAgICAgICAgIHA1Lm5vTG9vcCgpO1xuICAgICAgICAgICAgcDUucGl4ZWxEZW5zaXR5KHByb3BzLnBpeGVsUmF0aW8pO1xuICAgICAgICAgICAgcDUuY3JlYXRlQ2FudmFzKHByb3BzLnZpZXdwb3J0V2lkdGgsIHByb3BzLnZpZXdwb3J0SGVpZ2h0LCByZW5kZXJlcik7XG4gICAgICAgICAgICBpZiAoaXNHTCAmJiB0aGlzLnNldHRpbmdzLmF0dHJpYnV0ZXMpIHtcbiAgICAgICAgICAgICAgcDUuc2V0QXR0cmlidXRlcyh0aGlzLnNldHRpbmdzLmF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSh7IHA1LCBjYW52YXM6IHA1LmNhbnZhcywgY29udGV4dDogcDUuX3JlbmRlcmVyLmRyYXdpbmdDb250ZXh0IH0pO1xuICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG5cbiAgICAgICAgLy8gU3VwcG9ydCBnbG9iYWwgYW5kIGluc3RhbmNlIFA1LmpzIG1vZGVzXG4gICAgICAgIGlmICh0eXBlb2YgUDVDb25zdHJ1Y3RvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG5ldyBQNUNvbnN0cnVjdG9yKHA1U2tldGNoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHdpbmRvdy5jcmVhdGVDYW52YXMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcInsgcDUgfSBzZXR0aW5nIGlzIHBhc3NlZCBidXQgY2FuJ3QgZmluZCBwNS5qcyBpbiBnbG9iYWwgKHdpbmRvdykgc2NvcGUuIE1heWJlIHlvdSBkaWQgbm90IGNyZWF0ZSBpdCBnbG9iYWxseT9cXG5uZXcgcDUoKTsgLy8gPC0tIGF0dGFjaGVzIHRvIGdsb2JhbCBzY29wZVwiKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcDVTa2V0Y2god2luZG93KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByZWxvYWQudGhlbigoKSA9PiB7XG4gICAgICAvLyBMb2FkIHRoZSB1c2VyJ3Mgc2tldGNoXG4gICAgICBsZXQgbG9hZGVyID0gY3JlYXRlU2tldGNoKHRoaXMucHJvcHMpO1xuICAgICAgaWYgKCFpc1Byb21pc2UobG9hZGVyKSkge1xuICAgICAgICBsb2FkZXIgPSBQcm9taXNlLnJlc29sdmUobG9hZGVyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBsb2FkZXI7XG4gICAgfSkudGhlbihza2V0Y2ggPT4ge1xuICAgICAgaWYgKCFza2V0Y2gpIHNrZXRjaCA9IHt9O1xuICAgICAgdGhpcy5fc2tldGNoID0gc2tldGNoO1xuXG4gICAgICAvLyBPbmNlIHRoZSBza2V0Y2ggaXMgbG9hZGVkIHdlIGNhbiBhZGQgdGhlIGV2ZW50c1xuICAgICAgaWYgKGlzQnJvd3NlcigpKSB7XG4gICAgICAgIHRoaXMuX2tleWJvYXJkU2hvcnRjdXRzLmF0dGFjaCgpO1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fcmVzaXplSGFuZGxlcik7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Bvc3RSZW5kZXIoKTtcblxuICAgICAgLy8gVGhlIGluaXRpYWwgcmVzaXplKCkgaW4gdGhlIGNvbnN0cnVjdG9yIHdpbGwgbm90IGhhdmVcbiAgICAgIC8vIHRyaWdnZXJlZCBhIHJlc2l6ZSgpIGV2ZW50IG9uIHRoZSBza2V0Y2gsIHNpbmNlIGl0IHdhcyBiZWZvcmVcbiAgICAgIC8vIHRoZSBza2V0Y2ggd2FzIGxvYWRlZC4gU28gd2Ugc2VuZCB0aGUgc2lnbmFsIGhlcmUsIGFsbG93aW5nXG4gICAgICAvLyB1c2VycyB0byByZWFjdCB0byB0aGUgaW5pdGlhbCBzaXplIGJlZm9yZSBmaXJzdCByZW5kZXIuXG4gICAgICB0aGlzLl9zaXplQ2hhbmdlZCgpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfSkuY2F0Y2goZXJyID0+IHtcbiAgICAgIGNvbnNvbGUud2FybignQ291bGQgbm90IHN0YXJ0IHNrZXRjaCwgdGhlIGFzeW5jIGxvYWRpbmcgZnVuY3Rpb24gcmVqZWN0ZWQgd2l0aCBhbiBlcnJvcjpcXG4gICAgRXJyb3I6ICcgKyBlcnIubWVzc2FnZSk7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2tldGNoTWFuYWdlcjtcbiIsImltcG9ydCB7IGdldENsaWVudEFQSSB9IGZyb20gJy4uL3V0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAob3B0ID0ge30pIHtcbiAgY29uc3QgaGFuZGxlciA9IGV2ID0+IHtcbiAgICBpZiAoIW9wdC5lbmFibGVkKCkpIHJldHVybjtcblxuICAgIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICAgIGlmIChldi5rZXlDb2RlID09PSA4MyAmJiAhZXYuYWx0S2V5ICYmIChldi5tZXRhS2V5IHx8IGV2LmN0cmxLZXkpKSB7XG4gICAgICAvLyBDbWQgKyBTXG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgb3B0LnNhdmUoZXYpO1xuICAgIH0gZWxzZSBpZiAoZXYua2V5Q29kZSA9PT0gMzIpIHtcbiAgICAgIC8vIFNwYWNlXG4gICAgICAvLyBUT0RPOiB3aGF0IHRvIGRvIHdpdGggdGhpcz8ga2VlcCBpdCwgb3IgcmVtb3ZlIGl0P1xuICAgICAgb3B0LnRvZ2dsZVBsYXkoZXYpO1xuICAgIH0gZWxzZSBpZiAoY2xpZW50ICYmICFldi5hbHRLZXkgJiYgZXYua2V5Q29kZSA9PT0gNzUgJiYgKGV2Lm1ldGFLZXkgfHwgZXYuY3RybEtleSkpIHtcbiAgICAgIC8vIENtZCArIEssIG9ubHkgd2hlbiBjYW52YXMtc2tldGNoLWNsaSBpcyB1c2VkXG4gICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgb3B0LmNvbW1pdChldik7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IGF0dGFjaCA9ICgpID0+IHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZXIpO1xuICB9O1xuXG4gIGNvbnN0IGRldGFjaCA9ICgpID0+IHtcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIGhhbmRsZXIpO1xuICB9O1xuXG4gIHJldHVybiB7XG4gICAgYXR0YWNoLFxuICAgIGRldGFjaFxuICB9O1xufVxuIiwiaW1wb3J0IFNrZXRjaE1hbmFnZXIgZnJvbSAnLi9jb3JlL1NrZXRjaE1hbmFnZXInO1xuaW1wb3J0IFBhcGVyU2l6ZXMgZnJvbSAnLi9wYXBlci1zaXplcyc7XG5pbXBvcnQgeyBnZXRDbGllbnRBUEksIGRlZmluZWQgfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCBDQUNIRSA9ICdob3QtaWQtY2FjaGUnO1xuY29uc3QgcnVudGltZUNvbGxpc2lvbnMgPSBbXTtcblxuZnVuY3Rpb24gaXNIb3RSZWxvYWQgKCkge1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgcmV0dXJuIGNsaWVudCAmJiBjbGllbnQuaG90O1xufVxuXG5mdW5jdGlvbiBjYWNoZUdldCAoaWQpIHtcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gIGlmICghY2xpZW50KSByZXR1cm4gdW5kZWZpbmVkO1xuICBjbGllbnRbQ0FDSEVdID0gY2xpZW50W0NBQ0hFXSB8fCB7fTtcbiAgcmV0dXJuIGNsaWVudFtDQUNIRV1baWRdO1xufVxuXG5mdW5jdGlvbiBjYWNoZVB1dCAoaWQsIGRhdGEpIHtcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gIGlmICghY2xpZW50KSByZXR1cm4gdW5kZWZpbmVkO1xuICBjbGllbnRbQ0FDSEVdID0gY2xpZW50W0NBQ0hFXSB8fCB7fTtcbiAgY2xpZW50W0NBQ0hFXVtpZF0gPSBkYXRhO1xufVxuXG5mdW5jdGlvbiBnZXRUaW1lUHJvcCAob2xkTWFuYWdlciwgbmV3U2V0dGluZ3MpIHtcbiAgLy8gU3RhdGljIHNrZXRjaGVzIGlnbm9yZSB0aGUgdGltZSBwZXJzaXN0ZW5jeVxuICByZXR1cm4gbmV3U2V0dGluZ3MuYW5pbWF0ZSA/IHsgdGltZTogb2xkTWFuYWdlci5wcm9wcy50aW1lIH0gOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGNhbnZhc1NrZXRjaCAoc2tldGNoLCBzZXR0aW5ncyA9IHt9KSB7XG4gIGlmIChzZXR0aW5ncy5wNSkge1xuICAgIGlmIChzZXR0aW5ncy5jYW52YXMgfHwgKHNldHRpbmdzLmNvbnRleHQgJiYgdHlwZW9mIHNldHRpbmdzLmNvbnRleHQgIT09ICdzdHJpbmcnKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbiB7IHA1IH0gbW9kZSwgeW91IGNhbid0IHBhc3MgeW91ciBvd24gY2FudmFzIG9yIGNvbnRleHQsIHVubGVzcyB0aGUgY29udGV4dCBpcyBhIFwid2ViZ2xcIiBvciBcIjJkXCIgc3RyaW5nYCk7XG4gICAgfVxuXG4gICAgLy8gRG8gbm90IGNyZWF0ZSBhIGNhbnZhcyBvbiBzdGFydHVwLCBzaW5jZSBQNS5qcyBkb2VzIHRoYXQgZm9yIHVzXG4gICAgY29uc3QgY29udGV4dCA9IHR5cGVvZiBzZXR0aW5ncy5jb250ZXh0ID09PSAnc3RyaW5nJyA/IHNldHRpbmdzLmNvbnRleHQgOiBmYWxzZTtcbiAgICBzZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHNldHRpbmdzLCB7IGNhbnZhczogZmFsc2UsIGNvbnRleHQgfSk7XG4gIH1cblxuICBjb25zdCBpc0hvdCA9IGlzSG90UmVsb2FkKCk7XG4gIGxldCBob3RJRDtcbiAgaWYgKGlzSG90KSB7XG4gICAgLy8gVXNlIGEgbWFnaWMgbmFtZSBieSBkZWZhdWx0LCBmb3JjZSB1c2VyIHRvIGRlZmluZSBlYWNoIHNrZXRjaCBpZiB0aGV5XG4gICAgLy8gcmVxdWlyZSBtb3JlIHRoYW4gb25lIGluIGFuIGFwcGxpY2F0aW9uLiBPcGVuIHRvIG90aGVyIGlkZWFzIG9uIGhvdyB0byB0YWNrbGVcbiAgICAvLyB0aGlzIGFzIHdlbGwuLi5cbiAgICBob3RJRCA9IGRlZmluZWQoc2V0dGluZ3MuaWQsICckX19ERUZBVUxUX0NBTlZBU19TS0VUQ0hfSURfXyQnKTtcbiAgfVxuICBsZXQgaXNJbmplY3RpbmcgPSBpc0hvdCAmJiB0eXBlb2YgaG90SUQgPT09ICdzdHJpbmcnO1xuXG4gIGlmIChpc0luamVjdGluZyAmJiBydW50aW1lQ29sbGlzaW9ucy5pbmNsdWRlcyhob3RJRCkpIHtcbiAgICBjb25zb2xlLndhcm4oYFdhcm5pbmc6IFlvdSBoYXZlIG11bHRpcGxlIGNhbGxzIHRvIGNhbnZhc1NrZXRjaCgpIGluIC0taG90IG1vZGUuIFlvdSBtdXN0IHBhc3MgdW5pcXVlIHsgaWQgfSBzdHJpbmdzIGluIHNldHRpbmdzIHRvIGVuYWJsZSBob3QgcmVsb2FkIGFjcm9zcyBtdWx0aXBsZSBza2V0Y2hlcy4gYCwgaG90SUQpO1xuICAgIGlzSW5qZWN0aW5nID0gZmFsc2U7XG4gIH1cblxuICBsZXQgcHJlbG9hZCA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIGlmIChpc0luamVjdGluZykge1xuICAgIC8vIE1hcmsgdGhpcyBhcyBhbHJlYWR5IHNwb3R0ZWQgaW4gdGhpcyBydW50aW1lIGluc3RhbmNlXG4gICAgcnVudGltZUNvbGxpc2lvbnMucHVzaChob3RJRCk7XG5cbiAgICBjb25zdCBwcmV2aW91c0RhdGEgPSBjYWNoZUdldChob3RJRCk7XG4gICAgaWYgKHByZXZpb3VzRGF0YSkge1xuICAgICAgY29uc3QgbmV4dCA9ICgpID0+IHtcbiAgICAgICAgLy8gR3JhYiBuZXcgcHJvcHMgZnJvbSBvbGQgc2tldGNoIGluc3RhbmNlXG4gICAgICAgIGNvbnN0IG5ld1Byb3BzID0gZ2V0VGltZVByb3AocHJldmlvdXNEYXRhLm1hbmFnZXIsIHNldHRpbmdzKTtcbiAgICAgICAgLy8gRGVzdHJveSB0aGUgb2xkIGluc3RhbmNlXG4gICAgICAgIHByZXZpb3VzRGF0YS5tYW5hZ2VyLmRlc3Ryb3koKTtcbiAgICAgICAgLy8gUGFzcyBhbG9uZyBuZXcgcHJvcHNcbiAgICAgICAgcmV0dXJuIG5ld1Byb3BzO1xuICAgICAgfTtcblxuICAgICAgLy8gTW92ZSBhbG9uZyB0aGUgbmV4dCBkYXRhLi4uXG4gICAgICBwcmVsb2FkID0gcHJldmlvdXNEYXRhLmxvYWQudGhlbihuZXh0KS5jYXRjaChuZXh0KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcHJlbG9hZC50aGVuKG5ld1Byb3BzID0+IHtcbiAgICBjb25zdCBtYW5hZ2VyID0gbmV3IFNrZXRjaE1hbmFnZXIoKTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGlmIChza2V0Y2gpIHtcbiAgICAgIC8vIE1lcmdlIHdpdGggaW5jb21pbmcgZGF0YVxuICAgICAgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBzZXR0aW5ncywgbmV3UHJvcHMpO1xuXG4gICAgICAvLyBBcHBseSBzZXR0aW5ncyBhbmQgY3JlYXRlIGEgY2FudmFzXG4gICAgICBtYW5hZ2VyLnNldHVwKHNldHRpbmdzKTtcblxuICAgICAgLy8gTW91bnQgdG8gRE9NXG4gICAgICBtYW5hZ2VyLm1vdW50KCk7XG5cbiAgICAgIC8vIGxvYWQgdGhlIHNrZXRjaCBmaXJzdFxuICAgICAgcmVzdWx0ID0gbWFuYWdlci5sb2FkQW5kUnVuKHNrZXRjaCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdCA9IFByb21pc2UucmVzb2x2ZShtYW5hZ2VyKTtcbiAgICB9XG4gICAgaWYgKGlzSW5qZWN0aW5nKSB7XG4gICAgICBjYWNoZVB1dChob3RJRCwgeyBsb2FkOiByZXN1bHQsIG1hbmFnZXIgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH0pO1xufVxuXG4vLyBUT0RPOiBGaWd1cmUgb3V0IGEgbmljZSB3YXkgdG8gZXhwb3J0IHRoaW5ncy5cbmNhbnZhc1NrZXRjaC5jYW52YXNTa2V0Y2ggPSBjYW52YXNTa2V0Y2g7XG5jYW52YXNTa2V0Y2guUGFwZXJTaXplcyA9IFBhcGVyU2l6ZXM7XG5cbmV4cG9ydCBkZWZhdWx0IGNhbnZhc1NrZXRjaDtcbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChhcmd1bWVudHNbaV0gIT09IHVuZGVmaW5lZCkgcmV0dXJuIGFyZ3VtZW50c1tpXTtcbiAgICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xyXG5cclxudmFyIHdpZHRoID0gMjU2Oy8vIGVhY2ggUkM0IG91dHB1dCBpcyAwIDw9IHggPCAyNTZcclxudmFyIGNodW5rcyA9IDY7Ly8gYXQgbGVhc3Qgc2l4IFJDNCBvdXRwdXRzIGZvciBlYWNoIGRvdWJsZVxyXG52YXIgZGlnaXRzID0gNTI7Ly8gdGhlcmUgYXJlIDUyIHNpZ25pZmljYW50IGRpZ2l0cyBpbiBhIGRvdWJsZVxyXG52YXIgcG9vbCA9IFtdOy8vIHBvb2w6IGVudHJvcHkgcG9vbCBzdGFydHMgZW1wdHlcclxudmFyIEdMT0JBTCA9IHR5cGVvZiBnbG9iYWwgPT09ICd1bmRlZmluZWQnID8gd2luZG93IDogZ2xvYmFsO1xyXG5cclxuLy9cclxuLy8gVGhlIGZvbGxvd2luZyBjb25zdGFudHMgYXJlIHJlbGF0ZWQgdG8gSUVFRSA3NTQgbGltaXRzLlxyXG4vL1xyXG52YXIgc3RhcnRkZW5vbSA9IE1hdGgucG93KHdpZHRoLCBjaHVua3MpLFxyXG4gICAgc2lnbmlmaWNhbmNlID0gTWF0aC5wb3coMiwgZGlnaXRzKSxcclxuICAgIG92ZXJmbG93ID0gc2lnbmlmaWNhbmNlICogMixcclxuICAgIG1hc2sgPSB3aWR0aCAtIDE7XHJcblxyXG5cclxudmFyIG9sZFJhbmRvbSA9IE1hdGgucmFuZG9tO1xyXG5cclxuLy9cclxuLy8gc2VlZHJhbmRvbSgpXHJcbi8vIFRoaXMgaXMgdGhlIHNlZWRyYW5kb20gZnVuY3Rpb24gZGVzY3JpYmVkIGFib3ZlLlxyXG4vL1xyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHNlZWQsIG9wdGlvbnMpIHtcclxuICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmdsb2JhbCA9PT0gdHJ1ZSkge1xyXG4gICAgb3B0aW9ucy5nbG9iYWwgPSBmYWxzZTtcclxuICAgIE1hdGgucmFuZG9tID0gbW9kdWxlLmV4cG9ydHMoc2VlZCwgb3B0aW9ucyk7XHJcbiAgICBvcHRpb25zLmdsb2JhbCA9IHRydWU7XHJcbiAgICByZXR1cm4gTWF0aC5yYW5kb207XHJcbiAgfVxyXG4gIHZhciB1c2VfZW50cm9weSA9IChvcHRpb25zICYmIG9wdGlvbnMuZW50cm9weSkgfHwgZmFsc2U7XHJcbiAgdmFyIGtleSA9IFtdO1xyXG5cclxuICAvLyBGbGF0dGVuIHRoZSBzZWVkIHN0cmluZyBvciBidWlsZCBvbmUgZnJvbSBsb2NhbCBlbnRyb3B5IGlmIG5lZWRlZC5cclxuICB2YXIgc2hvcnRzZWVkID0gbWl4a2V5KGZsYXR0ZW4oXHJcbiAgICB1c2VfZW50cm9weSA/IFtzZWVkLCB0b3N0cmluZyhwb29sKV0gOlxyXG4gICAgMCBpbiBhcmd1bWVudHMgPyBzZWVkIDogYXV0b3NlZWQoKSwgMyksIGtleSk7XHJcblxyXG4gIC8vIFVzZSB0aGUgc2VlZCB0byBpbml0aWFsaXplIGFuIEFSQzQgZ2VuZXJhdG9yLlxyXG4gIHZhciBhcmM0ID0gbmV3IEFSQzQoa2V5KTtcclxuXHJcbiAgLy8gTWl4IHRoZSByYW5kb21uZXNzIGludG8gYWNjdW11bGF0ZWQgZW50cm9weS5cclxuICBtaXhrZXkodG9zdHJpbmcoYXJjNC5TKSwgcG9vbCk7XHJcblxyXG4gIC8vIE92ZXJyaWRlIE1hdGgucmFuZG9tXHJcblxyXG4gIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIHJhbmRvbSBkb3VibGUgaW4gWzAsIDEpIHRoYXQgY29udGFpbnNcclxuICAvLyByYW5kb21uZXNzIGluIGV2ZXJ5IGJpdCBvZiB0aGUgbWFudGlzc2Egb2YgdGhlIElFRUUgNzU0IHZhbHVlLlxyXG5cclxuICByZXR1cm4gZnVuY3Rpb24oKSB7ICAgICAgICAgLy8gQ2xvc3VyZSB0byByZXR1cm4gYSByYW5kb20gZG91YmxlOlxyXG4gICAgdmFyIG4gPSBhcmM0LmcoY2h1bmtzKSwgICAgICAgICAgICAgLy8gU3RhcnQgd2l0aCBhIG51bWVyYXRvciBuIDwgMiBeIDQ4XHJcbiAgICAgICAgZCA9IHN0YXJ0ZGVub20sICAgICAgICAgICAgICAgICAvLyAgIGFuZCBkZW5vbWluYXRvciBkID0gMiBeIDQ4LlxyXG4gICAgICAgIHggPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBhbmQgbm8gJ2V4dHJhIGxhc3QgYnl0ZScuXHJcbiAgICB3aGlsZSAobiA8IHNpZ25pZmljYW5jZSkgeyAgICAgICAgICAvLyBGaWxsIHVwIGFsbCBzaWduaWZpY2FudCBkaWdpdHMgYnlcclxuICAgICAgbiA9IChuICsgeCkgKiB3aWR0aDsgICAgICAgICAgICAgIC8vICAgc2hpZnRpbmcgbnVtZXJhdG9yIGFuZFxyXG4gICAgICBkICo9IHdpZHRoOyAgICAgICAgICAgICAgICAgICAgICAgLy8gICBkZW5vbWluYXRvciBhbmQgZ2VuZXJhdGluZyBhXHJcbiAgICAgIHggPSBhcmM0LmcoMSk7ICAgICAgICAgICAgICAgICAgICAvLyAgIG5ldyBsZWFzdC1zaWduaWZpY2FudC1ieXRlLlxyXG4gICAgfVxyXG4gICAgd2hpbGUgKG4gPj0gb3ZlcmZsb3cpIHsgICAgICAgICAgICAgLy8gVG8gYXZvaWQgcm91bmRpbmcgdXAsIGJlZm9yZSBhZGRpbmdcclxuICAgICAgbiAvPSAyOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgbGFzdCBieXRlLCBzaGlmdCBldmVyeXRoaW5nXHJcbiAgICAgIGQgLz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIHJpZ2h0IHVzaW5nIGludGVnZXIgTWF0aCB1bnRpbFxyXG4gICAgICB4ID4+Pj0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICB3ZSBoYXZlIGV4YWN0bHkgdGhlIGRlc2lyZWQgYml0cy5cclxuICAgIH1cclxuICAgIHJldHVybiAobiArIHgpIC8gZDsgICAgICAgICAgICAgICAgIC8vIEZvcm0gdGhlIG51bWJlciB3aXRoaW4gWzAsIDEpLlxyXG4gIH07XHJcbn07XHJcblxyXG5tb2R1bGUuZXhwb3J0cy5yZXNldEdsb2JhbCA9IGZ1bmN0aW9uICgpIHtcclxuICBNYXRoLnJhbmRvbSA9IG9sZFJhbmRvbTtcclxufTtcclxuXHJcbi8vXHJcbi8vIEFSQzRcclxuLy9cclxuLy8gQW4gQVJDNCBpbXBsZW1lbnRhdGlvbi4gIFRoZSBjb25zdHJ1Y3RvciB0YWtlcyBhIGtleSBpbiB0aGUgZm9ybSBvZlxyXG4vLyBhbiBhcnJheSBvZiBhdCBtb3N0ICh3aWR0aCkgaW50ZWdlcnMgdGhhdCBzaG91bGQgYmUgMCA8PSB4IDwgKHdpZHRoKS5cclxuLy9cclxuLy8gVGhlIGcoY291bnQpIG1ldGhvZCByZXR1cm5zIGEgcHNldWRvcmFuZG9tIGludGVnZXIgdGhhdCBjb25jYXRlbmF0ZXNcclxuLy8gdGhlIG5leHQgKGNvdW50KSBvdXRwdXRzIGZyb20gQVJDNC4gIEl0cyByZXR1cm4gdmFsdWUgaXMgYSBudW1iZXIgeFxyXG4vLyB0aGF0IGlzIGluIHRoZSByYW5nZSAwIDw9IHggPCAod2lkdGggXiBjb3VudCkuXHJcbi8vXHJcbi8qKiBAY29uc3RydWN0b3IgKi9cclxuZnVuY3Rpb24gQVJDNChrZXkpIHtcclxuICB2YXIgdCwga2V5bGVuID0ga2V5Lmxlbmd0aCxcclxuICAgICAgbWUgPSB0aGlzLCBpID0gMCwgaiA9IG1lLmkgPSBtZS5qID0gMCwgcyA9IG1lLlMgPSBbXTtcclxuXHJcbiAgLy8gVGhlIGVtcHR5IGtleSBbXSBpcyB0cmVhdGVkIGFzIFswXS5cclxuICBpZiAoIWtleWxlbikgeyBrZXkgPSBba2V5bGVuKytdOyB9XHJcblxyXG4gIC8vIFNldCB1cCBTIHVzaW5nIHRoZSBzdGFuZGFyZCBrZXkgc2NoZWR1bGluZyBhbGdvcml0aG0uXHJcbiAgd2hpbGUgKGkgPCB3aWR0aCkge1xyXG4gICAgc1tpXSA9IGkrKztcclxuICB9XHJcbiAgZm9yIChpID0gMDsgaSA8IHdpZHRoOyBpKyspIHtcclxuICAgIHNbaV0gPSBzW2ogPSBtYXNrICYgKGogKyBrZXlbaSAlIGtleWxlbl0gKyAodCA9IHNbaV0pKV07XHJcbiAgICBzW2pdID0gdDtcclxuICB9XHJcblxyXG4gIC8vIFRoZSBcImdcIiBtZXRob2QgcmV0dXJucyB0aGUgbmV4dCAoY291bnQpIG91dHB1dHMgYXMgb25lIG51bWJlci5cclxuICAobWUuZyA9IGZ1bmN0aW9uKGNvdW50KSB7XHJcbiAgICAvLyBVc2luZyBpbnN0YW5jZSBtZW1iZXJzIGluc3RlYWQgb2YgY2xvc3VyZSBzdGF0ZSBuZWFybHkgZG91YmxlcyBzcGVlZC5cclxuICAgIHZhciB0LCByID0gMCxcclxuICAgICAgICBpID0gbWUuaSwgaiA9IG1lLmosIHMgPSBtZS5TO1xyXG4gICAgd2hpbGUgKGNvdW50LS0pIHtcclxuICAgICAgdCA9IHNbaSA9IG1hc2sgJiAoaSArIDEpXTtcclxuICAgICAgciA9IHIgKiB3aWR0aCArIHNbbWFzayAmICgoc1tpXSA9IHNbaiA9IG1hc2sgJiAoaiArIHQpXSkgKyAoc1tqXSA9IHQpKV07XHJcbiAgICB9XHJcbiAgICBtZS5pID0gaTsgbWUuaiA9IGo7XHJcbiAgICByZXR1cm4gcjtcclxuICAgIC8vIEZvciByb2J1c3QgdW5wcmVkaWN0YWJpbGl0eSBkaXNjYXJkIGFuIGluaXRpYWwgYmF0Y2ggb2YgdmFsdWVzLlxyXG4gICAgLy8gU2VlIGh0dHA6Ly93d3cucnNhLmNvbS9yc2FsYWJzL25vZGUuYXNwP2lkPTIwMDlcclxuICB9KSh3aWR0aCk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIGZsYXR0ZW4oKVxyXG4vLyBDb252ZXJ0cyBhbiBvYmplY3QgdHJlZSB0byBuZXN0ZWQgYXJyYXlzIG9mIHN0cmluZ3MuXHJcbi8vXHJcbmZ1bmN0aW9uIGZsYXR0ZW4ob2JqLCBkZXB0aCkge1xyXG4gIHZhciByZXN1bHQgPSBbXSwgdHlwID0gKHR5cGVvZiBvYmopWzBdLCBwcm9wO1xyXG4gIGlmIChkZXB0aCAmJiB0eXAgPT0gJ28nKSB7XHJcbiAgICBmb3IgKHByb3AgaW4gb2JqKSB7XHJcbiAgICAgIHRyeSB7IHJlc3VsdC5wdXNoKGZsYXR0ZW4ob2JqW3Byb3BdLCBkZXB0aCAtIDEpKTsgfSBjYXRjaCAoZSkge31cclxuICAgIH1cclxuICB9XHJcbiAgcmV0dXJuIChyZXN1bHQubGVuZ3RoID8gcmVzdWx0IDogdHlwID09ICdzJyA/IG9iaiA6IG9iaiArICdcXDAnKTtcclxufVxyXG5cclxuLy9cclxuLy8gbWl4a2V5KClcclxuLy8gTWl4ZXMgYSBzdHJpbmcgc2VlZCBpbnRvIGEga2V5IHRoYXQgaXMgYW4gYXJyYXkgb2YgaW50ZWdlcnMsIGFuZFxyXG4vLyByZXR1cm5zIGEgc2hvcnRlbmVkIHN0cmluZyBzZWVkIHRoYXQgaXMgZXF1aXZhbGVudCB0byB0aGUgcmVzdWx0IGtleS5cclxuLy9cclxuZnVuY3Rpb24gbWl4a2V5KHNlZWQsIGtleSkge1xyXG4gIHZhciBzdHJpbmdzZWVkID0gc2VlZCArICcnLCBzbWVhciwgaiA9IDA7XHJcbiAgd2hpbGUgKGogPCBzdHJpbmdzZWVkLmxlbmd0aCkge1xyXG4gICAga2V5W21hc2sgJiBqXSA9XHJcbiAgICAgIG1hc2sgJiAoKHNtZWFyIF49IGtleVttYXNrICYgal0gKiAxOSkgKyBzdHJpbmdzZWVkLmNoYXJDb2RlQXQoaisrKSk7XHJcbiAgfVxyXG4gIHJldHVybiB0b3N0cmluZyhrZXkpO1xyXG59XHJcblxyXG4vL1xyXG4vLyBhdXRvc2VlZCgpXHJcbi8vIFJldHVybnMgYW4gb2JqZWN0IGZvciBhdXRvc2VlZGluZywgdXNpbmcgd2luZG93LmNyeXB0byBpZiBhdmFpbGFibGUuXHJcbi8vXHJcbi8qKiBAcGFyYW0ge1VpbnQ4QXJyYXk9fSBzZWVkICovXHJcbmZ1bmN0aW9uIGF1dG9zZWVkKHNlZWQpIHtcclxuICB0cnkge1xyXG4gICAgR0xPQkFMLmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoc2VlZCA9IG5ldyBVaW50OEFycmF5KHdpZHRoKSk7XHJcbiAgICByZXR1cm4gdG9zdHJpbmcoc2VlZCk7XHJcbiAgfSBjYXRjaCAoZSkge1xyXG4gICAgcmV0dXJuIFsrbmV3IERhdGUsIEdMT0JBTCwgR0xPQkFMLm5hdmlnYXRvciAmJiBHTE9CQUwubmF2aWdhdG9yLnBsdWdpbnMsXHJcbiAgICAgICAgICAgIEdMT0JBTC5zY3JlZW4sIHRvc3RyaW5nKHBvb2wpXTtcclxuICB9XHJcbn1cclxuXHJcbi8vXHJcbi8vIHRvc3RyaW5nKClcclxuLy8gQ29udmVydHMgYW4gYXJyYXkgb2YgY2hhcmNvZGVzIHRvIGEgc3RyaW5nXHJcbi8vXHJcbmZ1bmN0aW9uIHRvc3RyaW5nKGEpIHtcclxuICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseSgwLCBhKTtcclxufVxyXG5cclxuLy9cclxuLy8gV2hlbiBzZWVkcmFuZG9tLmpzIGlzIGxvYWRlZCwgd2UgaW1tZWRpYXRlbHkgbWl4IGEgZmV3IGJpdHNcclxuLy8gZnJvbSB0aGUgYnVpbHQtaW4gUk5HIGludG8gdGhlIGVudHJvcHkgcG9vbC4gIEJlY2F1c2Ugd2UgZG9cclxuLy8gbm90IHdhbnQgdG8gaW50ZWZlcmUgd2l0aCBkZXRlcm1pbnN0aWMgUFJORyBzdGF0ZSBsYXRlcixcclxuLy8gc2VlZHJhbmRvbSB3aWxsIG5vdCBjYWxsIE1hdGgucmFuZG9tIG9uIGl0cyBvd24gYWdhaW4gYWZ0ZXJcclxuLy8gaW5pdGlhbGl6YXRpb24uXHJcbi8vXHJcbm1peGtleShNYXRoLnJhbmRvbSgpLCBwb29sKTtcclxuIiwiLypcbiAqIEEgZmFzdCBqYXZhc2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHNpbXBsZXggbm9pc2UgYnkgSm9uYXMgV2FnbmVyXG5cbkJhc2VkIG9uIGEgc3BlZWQtaW1wcm92ZWQgc2ltcGxleCBub2lzZSBhbGdvcml0aG0gZm9yIDJELCAzRCBhbmQgNEQgaW4gSmF2YS5cbldoaWNoIGlzIGJhc2VkIG9uIGV4YW1wbGUgY29kZSBieSBTdGVmYW4gR3VzdGF2c29uIChzdGVndUBpdG4ubGl1LnNlKS5cbldpdGggT3B0aW1pc2F0aW9ucyBieSBQZXRlciBFYXN0bWFuIChwZWFzdG1hbkBkcml6emxlLnN0YW5mb3JkLmVkdSkuXG5CZXR0ZXIgcmFuayBvcmRlcmluZyBtZXRob2QgYnkgU3RlZmFuIEd1c3RhdnNvbiBpbiAyMDEyLlxuXG5cbiBDb3B5cmlnaHQgKGMpIDIwMTggSm9uYXMgV2FnbmVyXG5cbiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5XG4gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbFxuIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHNcbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsXG4gY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcblxuIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbFxuIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG5cbiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFXG4gQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sXG4gT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEVcbiBTT0ZUV0FSRS5cbiAqL1xuKGZ1bmN0aW9uKCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIEYyID0gMC41ICogKE1hdGguc3FydCgzLjApIC0gMS4wKTtcbiAgdmFyIEcyID0gKDMuMCAtIE1hdGguc3FydCgzLjApKSAvIDYuMDtcbiAgdmFyIEYzID0gMS4wIC8gMy4wO1xuICB2YXIgRzMgPSAxLjAgLyA2LjA7XG4gIHZhciBGNCA9IChNYXRoLnNxcnQoNS4wKSAtIDEuMCkgLyA0LjA7XG4gIHZhciBHNCA9ICg1LjAgLSBNYXRoLnNxcnQoNS4wKSkgLyAyMC4wO1xuXG4gIGZ1bmN0aW9uIFNpbXBsZXhOb2lzZShyYW5kb21PclNlZWQpIHtcbiAgICB2YXIgcmFuZG9tO1xuICAgIGlmICh0eXBlb2YgcmFuZG9tT3JTZWVkID09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJhbmRvbSA9IHJhbmRvbU9yU2VlZDtcbiAgICB9XG4gICAgZWxzZSBpZiAocmFuZG9tT3JTZWVkKSB7XG4gICAgICByYW5kb20gPSBhbGVhKHJhbmRvbU9yU2VlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJhbmRvbSA9IE1hdGgucmFuZG9tO1xuICAgIH1cbiAgICB0aGlzLnAgPSBidWlsZFBlcm11dGF0aW9uVGFibGUocmFuZG9tKTtcbiAgICB0aGlzLnBlcm0gPSBuZXcgVWludDhBcnJheSg1MTIpO1xuICAgIHRoaXMucGVybU1vZDEyID0gbmV3IFVpbnQ4QXJyYXkoNTEyKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDUxMjsgaSsrKSB7XG4gICAgICB0aGlzLnBlcm1baV0gPSB0aGlzLnBbaSAmIDI1NV07XG4gICAgICB0aGlzLnBlcm1Nb2QxMltpXSA9IHRoaXMucGVybVtpXSAlIDEyO1xuICAgIH1cblxuICB9XG4gIFNpbXBsZXhOb2lzZS5wcm90b3R5cGUgPSB7XG4gICAgZ3JhZDM6IG5ldyBGbG9hdDMyQXJyYXkoWzEsIDEsIDAsXG4gICAgICAtMSwgMSwgMCxcbiAgICAgIDEsIC0xLCAwLFxuXG4gICAgICAtMSwgLTEsIDAsXG4gICAgICAxLCAwLCAxLFxuICAgICAgLTEsIDAsIDEsXG5cbiAgICAgIDEsIDAsIC0xLFxuICAgICAgLTEsIDAsIC0xLFxuICAgICAgMCwgMSwgMSxcblxuICAgICAgMCwgLTEsIDEsXG4gICAgICAwLCAxLCAtMSxcbiAgICAgIDAsIC0xLCAtMV0pLFxuICAgIGdyYWQ0OiBuZXcgRmxvYXQzMkFycmF5KFswLCAxLCAxLCAxLCAwLCAxLCAxLCAtMSwgMCwgMSwgLTEsIDEsIDAsIDEsIC0xLCAtMSxcbiAgICAgIDAsIC0xLCAxLCAxLCAwLCAtMSwgMSwgLTEsIDAsIC0xLCAtMSwgMSwgMCwgLTEsIC0xLCAtMSxcbiAgICAgIDEsIDAsIDEsIDEsIDEsIDAsIDEsIC0xLCAxLCAwLCAtMSwgMSwgMSwgMCwgLTEsIC0xLFxuICAgICAgLTEsIDAsIDEsIDEsIC0xLCAwLCAxLCAtMSwgLTEsIDAsIC0xLCAxLCAtMSwgMCwgLTEsIC0xLFxuICAgICAgMSwgMSwgMCwgMSwgMSwgMSwgMCwgLTEsIDEsIC0xLCAwLCAxLCAxLCAtMSwgMCwgLTEsXG4gICAgICAtMSwgMSwgMCwgMSwgLTEsIDEsIDAsIC0xLCAtMSwgLTEsIDAsIDEsIC0xLCAtMSwgMCwgLTEsXG4gICAgICAxLCAxLCAxLCAwLCAxLCAxLCAtMSwgMCwgMSwgLTEsIDEsIDAsIDEsIC0xLCAtMSwgMCxcbiAgICAgIC0xLCAxLCAxLCAwLCAtMSwgMSwgLTEsIDAsIC0xLCAtMSwgMSwgMCwgLTEsIC0xLCAtMSwgMF0pLFxuICAgIG5vaXNlMkQ6IGZ1bmN0aW9uKHhpbiwgeWluKSB7XG4gICAgICB2YXIgcGVybU1vZDEyID0gdGhpcy5wZXJtTW9kMTI7XG4gICAgICB2YXIgcGVybSA9IHRoaXMucGVybTtcbiAgICAgIHZhciBncmFkMyA9IHRoaXMuZ3JhZDM7XG4gICAgICB2YXIgbjAgPSAwOyAvLyBOb2lzZSBjb250cmlidXRpb25zIGZyb20gdGhlIHRocmVlIGNvcm5lcnNcbiAgICAgIHZhciBuMSA9IDA7XG4gICAgICB2YXIgbjIgPSAwO1xuICAgICAgLy8gU2tldyB0aGUgaW5wdXQgc3BhY2UgdG8gZGV0ZXJtaW5lIHdoaWNoIHNpbXBsZXggY2VsbCB3ZSdyZSBpblxuICAgICAgdmFyIHMgPSAoeGluICsgeWluKSAqIEYyOyAvLyBIYWlyeSBmYWN0b3IgZm9yIDJEXG4gICAgICB2YXIgaSA9IE1hdGguZmxvb3IoeGluICsgcyk7XG4gICAgICB2YXIgaiA9IE1hdGguZmxvb3IoeWluICsgcyk7XG4gICAgICB2YXIgdCA9IChpICsgaikgKiBHMjtcbiAgICAgIHZhciBYMCA9IGkgLSB0OyAvLyBVbnNrZXcgdGhlIGNlbGwgb3JpZ2luIGJhY2sgdG8gKHgseSkgc3BhY2VcbiAgICAgIHZhciBZMCA9IGogLSB0O1xuICAgICAgdmFyIHgwID0geGluIC0gWDA7IC8vIFRoZSB4LHkgZGlzdGFuY2VzIGZyb20gdGhlIGNlbGwgb3JpZ2luXG4gICAgICB2YXIgeTAgPSB5aW4gLSBZMDtcbiAgICAgIC8vIEZvciB0aGUgMkQgY2FzZSwgdGhlIHNpbXBsZXggc2hhcGUgaXMgYW4gZXF1aWxhdGVyYWwgdHJpYW5nbGUuXG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggc2ltcGxleCB3ZSBhcmUgaW4uXG4gICAgICB2YXIgaTEsIGoxOyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgKG1pZGRsZSkgY29ybmVyIG9mIHNpbXBsZXggaW4gKGksaikgY29vcmRzXG4gICAgICBpZiAoeDAgPiB5MCkge1xuICAgICAgICBpMSA9IDE7XG4gICAgICAgIGoxID0gMDtcbiAgICAgIH0gLy8gbG93ZXIgdHJpYW5nbGUsIFhZIG9yZGVyOiAoMCwwKS0+KDEsMCktPigxLDEpXG4gICAgICBlbHNlIHtcbiAgICAgICAgaTEgPSAwO1xuICAgICAgICBqMSA9IDE7XG4gICAgICB9IC8vIHVwcGVyIHRyaWFuZ2xlLCBZWCBvcmRlcjogKDAsMCktPigwLDEpLT4oMSwxKVxuICAgICAgLy8gQSBzdGVwIG9mICgxLDApIGluIChpLGopIG1lYW5zIGEgc3RlcCBvZiAoMS1jLC1jKSBpbiAoeCx5KSwgYW5kXG4gICAgICAvLyBhIHN0ZXAgb2YgKDAsMSkgaW4gKGksaikgbWVhbnMgYSBzdGVwIG9mICgtYywxLWMpIGluICh4LHkpLCB3aGVyZVxuICAgICAgLy8gYyA9ICgzLXNxcnQoMykpLzZcbiAgICAgIHZhciB4MSA9IHgwIC0gaTEgKyBHMjsgLy8gT2Zmc2V0cyBmb3IgbWlkZGxlIGNvcm5lciBpbiAoeCx5KSB1bnNrZXdlZCBjb29yZHNcbiAgICAgIHZhciB5MSA9IHkwIC0gajEgKyBHMjtcbiAgICAgIHZhciB4MiA9IHgwIC0gMS4wICsgMi4wICogRzI7IC8vIE9mZnNldHMgZm9yIGxhc3QgY29ybmVyIGluICh4LHkpIHVuc2tld2VkIGNvb3Jkc1xuICAgICAgdmFyIHkyID0geTAgLSAxLjAgKyAyLjAgKiBHMjtcbiAgICAgIC8vIFdvcmsgb3V0IHRoZSBoYXNoZWQgZ3JhZGllbnQgaW5kaWNlcyBvZiB0aGUgdGhyZWUgc2ltcGxleCBjb3JuZXJzXG4gICAgICB2YXIgaWkgPSBpICYgMjU1O1xuICAgICAgdmFyIGpqID0gaiAmIDI1NTtcbiAgICAgIC8vIENhbGN1bGF0ZSB0aGUgY29udHJpYnV0aW9uIGZyb20gdGhlIHRocmVlIGNvcm5lcnNcbiAgICAgIHZhciB0MCA9IDAuNSAtIHgwICogeDAgLSB5MCAqIHkwO1xuICAgICAgaWYgKHQwID49IDApIHtcbiAgICAgICAgdmFyIGdpMCA9IHBlcm1Nb2QxMltpaSArIHBlcm1bampdXSAqIDM7XG4gICAgICAgIHQwICo9IHQwO1xuICAgICAgICBuMCA9IHQwICogdDAgKiAoZ3JhZDNbZ2kwXSAqIHgwICsgZ3JhZDNbZ2kwICsgMV0gKiB5MCk7IC8vICh4LHkpIG9mIGdyYWQzIHVzZWQgZm9yIDJEIGdyYWRpZW50XG4gICAgICB9XG4gICAgICB2YXIgdDEgPSAwLjUgLSB4MSAqIHgxIC0geTEgKiB5MTtcbiAgICAgIGlmICh0MSA+PSAwKSB7XG4gICAgICAgIHZhciBnaTEgPSBwZXJtTW9kMTJbaWkgKyBpMSArIHBlcm1bamogKyBqMV1dICogMztcbiAgICAgICAgdDEgKj0gdDE7XG4gICAgICAgIG4xID0gdDEgKiB0MSAqIChncmFkM1tnaTFdICogeDEgKyBncmFkM1tnaTEgKyAxXSAqIHkxKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MiA9IDAuNSAtIHgyICogeDIgLSB5MiAqIHkyO1xuICAgICAgaWYgKHQyID49IDApIHtcbiAgICAgICAgdmFyIGdpMiA9IHBlcm1Nb2QxMltpaSArIDEgKyBwZXJtW2pqICsgMV1dICogMztcbiAgICAgICAgdDIgKj0gdDI7XG4gICAgICAgIG4yID0gdDIgKiB0MiAqIChncmFkM1tnaTJdICogeDIgKyBncmFkM1tnaTIgKyAxXSAqIHkyKTtcbiAgICAgIH1cbiAgICAgIC8vIEFkZCBjb250cmlidXRpb25zIGZyb20gZWFjaCBjb3JuZXIgdG8gZ2V0IHRoZSBmaW5hbCBub2lzZSB2YWx1ZS5cbiAgICAgIC8vIFRoZSByZXN1bHQgaXMgc2NhbGVkIHRvIHJldHVybiB2YWx1ZXMgaW4gdGhlIGludGVydmFsIFstMSwxXS5cbiAgICAgIHJldHVybiA3MC4wICogKG4wICsgbjEgKyBuMik7XG4gICAgfSxcbiAgICAvLyAzRCBzaW1wbGV4IG5vaXNlXG4gICAgbm9pc2UzRDogZnVuY3Rpb24oeGluLCB5aW4sIHppbikge1xuICAgICAgdmFyIHBlcm1Nb2QxMiA9IHRoaXMucGVybU1vZDEyO1xuICAgICAgdmFyIHBlcm0gPSB0aGlzLnBlcm07XG4gICAgICB2YXIgZ3JhZDMgPSB0aGlzLmdyYWQzO1xuICAgICAgdmFyIG4wLCBuMSwgbjIsIG4zOyAvLyBOb2lzZSBjb250cmlidXRpb25zIGZyb20gdGhlIGZvdXIgY29ybmVyc1xuICAgICAgLy8gU2tldyB0aGUgaW5wdXQgc3BhY2UgdG8gZGV0ZXJtaW5lIHdoaWNoIHNpbXBsZXggY2VsbCB3ZSdyZSBpblxuICAgICAgdmFyIHMgPSAoeGluICsgeWluICsgemluKSAqIEYzOyAvLyBWZXJ5IG5pY2UgYW5kIHNpbXBsZSBza2V3IGZhY3RvciBmb3IgM0RcbiAgICAgIHZhciBpID0gTWF0aC5mbG9vcih4aW4gKyBzKTtcbiAgICAgIHZhciBqID0gTWF0aC5mbG9vcih5aW4gKyBzKTtcbiAgICAgIHZhciBrID0gTWF0aC5mbG9vcih6aW4gKyBzKTtcbiAgICAgIHZhciB0ID0gKGkgKyBqICsgaykgKiBHMztcbiAgICAgIHZhciBYMCA9IGkgLSB0OyAvLyBVbnNrZXcgdGhlIGNlbGwgb3JpZ2luIGJhY2sgdG8gKHgseSx6KSBzcGFjZVxuICAgICAgdmFyIFkwID0gaiAtIHQ7XG4gICAgICB2YXIgWjAgPSBrIC0gdDtcbiAgICAgIHZhciB4MCA9IHhpbiAtIFgwOyAvLyBUaGUgeCx5LHogZGlzdGFuY2VzIGZyb20gdGhlIGNlbGwgb3JpZ2luXG4gICAgICB2YXIgeTAgPSB5aW4gLSBZMDtcbiAgICAgIHZhciB6MCA9IHppbiAtIFowO1xuICAgICAgLy8gRm9yIHRoZSAzRCBjYXNlLCB0aGUgc2ltcGxleCBzaGFwZSBpcyBhIHNsaWdodGx5IGlycmVndWxhciB0ZXRyYWhlZHJvbi5cbiAgICAgIC8vIERldGVybWluZSB3aGljaCBzaW1wbGV4IHdlIGFyZSBpbi5cbiAgICAgIHZhciBpMSwgajEsIGsxOyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgY29ybmVyIG9mIHNpbXBsZXggaW4gKGksaixrKSBjb29yZHNcbiAgICAgIHZhciBpMiwgajIsIGsyOyAvLyBPZmZzZXRzIGZvciB0aGlyZCBjb3JuZXIgb2Ygc2ltcGxleCBpbiAoaSxqLGspIGNvb3Jkc1xuICAgICAgaWYgKHgwID49IHkwKSB7XG4gICAgICAgIGlmICh5MCA+PSB6MCkge1xuICAgICAgICAgIGkxID0gMTtcbiAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgazEgPSAwO1xuICAgICAgICAgIGkyID0gMTtcbiAgICAgICAgICBqMiA9IDE7XG4gICAgICAgICAgazIgPSAwO1xuICAgICAgICB9IC8vIFggWSBaIG9yZGVyXG4gICAgICAgIGVsc2UgaWYgKHgwID49IHowKSB7XG4gICAgICAgICAgaTEgPSAxO1xuICAgICAgICAgIGoxID0gMDtcbiAgICAgICAgICBrMSA9IDA7XG4gICAgICAgICAgaTIgPSAxO1xuICAgICAgICAgIGoyID0gMDtcbiAgICAgICAgICBrMiA9IDE7XG4gICAgICAgIH0gLy8gWCBaIFkgb3JkZXJcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaTEgPSAwO1xuICAgICAgICAgIGoxID0gMDtcbiAgICAgICAgICBrMSA9IDE7XG4gICAgICAgICAgaTIgPSAxO1xuICAgICAgICAgIGoyID0gMDtcbiAgICAgICAgICBrMiA9IDE7XG4gICAgICAgIH0gLy8gWiBYIFkgb3JkZXJcbiAgICAgIH1cbiAgICAgIGVsc2UgeyAvLyB4MDx5MFxuICAgICAgICBpZiAoeTAgPCB6MCkge1xuICAgICAgICAgIGkxID0gMDtcbiAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgazEgPSAxO1xuICAgICAgICAgIGkyID0gMDtcbiAgICAgICAgICBqMiA9IDE7XG4gICAgICAgICAgazIgPSAxO1xuICAgICAgICB9IC8vIFogWSBYIG9yZGVyXG4gICAgICAgIGVsc2UgaWYgKHgwIDwgejApIHtcbiAgICAgICAgICBpMSA9IDA7XG4gICAgICAgICAgajEgPSAxO1xuICAgICAgICAgIGsxID0gMDtcbiAgICAgICAgICBpMiA9IDA7XG4gICAgICAgICAgajIgPSAxO1xuICAgICAgICAgIGsyID0gMTtcbiAgICAgICAgfSAvLyBZIFogWCBvcmRlclxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBpMSA9IDA7XG4gICAgICAgICAgajEgPSAxO1xuICAgICAgICAgIGsxID0gMDtcbiAgICAgICAgICBpMiA9IDE7XG4gICAgICAgICAgajIgPSAxO1xuICAgICAgICAgIGsyID0gMDtcbiAgICAgICAgfSAvLyBZIFggWiBvcmRlclxuICAgICAgfVxuICAgICAgLy8gQSBzdGVwIG9mICgxLDAsMCkgaW4gKGksaixrKSBtZWFucyBhIHN0ZXAgb2YgKDEtYywtYywtYykgaW4gKHgseSx6KSxcbiAgICAgIC8vIGEgc3RlcCBvZiAoMCwxLDApIGluIChpLGosaykgbWVhbnMgYSBzdGVwIG9mICgtYywxLWMsLWMpIGluICh4LHkseiksIGFuZFxuICAgICAgLy8gYSBzdGVwIG9mICgwLDAsMSkgaW4gKGksaixrKSBtZWFucyBhIHN0ZXAgb2YgKC1jLC1jLDEtYykgaW4gKHgseSx6KSwgd2hlcmVcbiAgICAgIC8vIGMgPSAxLzYuXG4gICAgICB2YXIgeDEgPSB4MCAtIGkxICsgRzM7IC8vIE9mZnNldHMgZm9yIHNlY29uZCBjb3JuZXIgaW4gKHgseSx6KSBjb29yZHNcbiAgICAgIHZhciB5MSA9IHkwIC0gajEgKyBHMztcbiAgICAgIHZhciB6MSA9IHowIC0gazEgKyBHMztcbiAgICAgIHZhciB4MiA9IHgwIC0gaTIgKyAyLjAgKiBHMzsgLy8gT2Zmc2V0cyBmb3IgdGhpcmQgY29ybmVyIGluICh4LHkseikgY29vcmRzXG4gICAgICB2YXIgeTIgPSB5MCAtIGoyICsgMi4wICogRzM7XG4gICAgICB2YXIgejIgPSB6MCAtIGsyICsgMi4wICogRzM7XG4gICAgICB2YXIgeDMgPSB4MCAtIDEuMCArIDMuMCAqIEczOyAvLyBPZmZzZXRzIGZvciBsYXN0IGNvcm5lciBpbiAoeCx5LHopIGNvb3Jkc1xuICAgICAgdmFyIHkzID0geTAgLSAxLjAgKyAzLjAgKiBHMztcbiAgICAgIHZhciB6MyA9IHowIC0gMS4wICsgMy4wICogRzM7XG4gICAgICAvLyBXb3JrIG91dCB0aGUgaGFzaGVkIGdyYWRpZW50IGluZGljZXMgb2YgdGhlIGZvdXIgc2ltcGxleCBjb3JuZXJzXG4gICAgICB2YXIgaWkgPSBpICYgMjU1O1xuICAgICAgdmFyIGpqID0gaiAmIDI1NTtcbiAgICAgIHZhciBrayA9IGsgJiAyNTU7XG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSBmb3VyIGNvcm5lcnNcbiAgICAgIHZhciB0MCA9IDAuNiAtIHgwICogeDAgLSB5MCAqIHkwIC0gejAgKiB6MDtcbiAgICAgIGlmICh0MCA8IDApIG4wID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTAgPSBwZXJtTW9kMTJbaWkgKyBwZXJtW2pqICsgcGVybVtra11dXSAqIDM7XG4gICAgICAgIHQwICo9IHQwO1xuICAgICAgICBuMCA9IHQwICogdDAgKiAoZ3JhZDNbZ2kwXSAqIHgwICsgZ3JhZDNbZ2kwICsgMV0gKiB5MCArIGdyYWQzW2dpMCArIDJdICogejApO1xuICAgICAgfVxuICAgICAgdmFyIHQxID0gMC42IC0geDEgKiB4MSAtIHkxICogeTEgLSB6MSAqIHoxO1xuICAgICAgaWYgKHQxIDwgMCkgbjEgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMSA9IHBlcm1Nb2QxMltpaSArIGkxICsgcGVybVtqaiArIGoxICsgcGVybVtrayArIGsxXV1dICogMztcbiAgICAgICAgdDEgKj0gdDE7XG4gICAgICAgIG4xID0gdDEgKiB0MSAqIChncmFkM1tnaTFdICogeDEgKyBncmFkM1tnaTEgKyAxXSAqIHkxICsgZ3JhZDNbZ2kxICsgMl0gKiB6MSk7XG4gICAgICB9XG4gICAgICB2YXIgdDIgPSAwLjYgLSB4MiAqIHgyIC0geTIgKiB5MiAtIHoyICogejI7XG4gICAgICBpZiAodDIgPCAwKSBuMiA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kyID0gcGVybU1vZDEyW2lpICsgaTIgKyBwZXJtW2pqICsgajIgKyBwZXJtW2trICsgazJdXV0gKiAzO1xuICAgICAgICB0MiAqPSB0MjtcbiAgICAgICAgbjIgPSB0MiAqIHQyICogKGdyYWQzW2dpMl0gKiB4MiArIGdyYWQzW2dpMiArIDFdICogeTIgKyBncmFkM1tnaTIgKyAyXSAqIHoyKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MyA9IDAuNiAtIHgzICogeDMgLSB5MyAqIHkzIC0gejMgKiB6MztcbiAgICAgIGlmICh0MyA8IDApIG4zID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTMgPSBwZXJtTW9kMTJbaWkgKyAxICsgcGVybVtqaiArIDEgKyBwZXJtW2trICsgMV1dXSAqIDM7XG4gICAgICAgIHQzICo9IHQzO1xuICAgICAgICBuMyA9IHQzICogdDMgKiAoZ3JhZDNbZ2kzXSAqIHgzICsgZ3JhZDNbZ2kzICsgMV0gKiB5MyArIGdyYWQzW2dpMyArIDJdICogejMpO1xuICAgICAgfVxuICAgICAgLy8gQWRkIGNvbnRyaWJ1dGlvbnMgZnJvbSBlYWNoIGNvcm5lciB0byBnZXQgdGhlIGZpbmFsIG5vaXNlIHZhbHVlLlxuICAgICAgLy8gVGhlIHJlc3VsdCBpcyBzY2FsZWQgdG8gc3RheSBqdXN0IGluc2lkZSBbLTEsMV1cbiAgICAgIHJldHVybiAzMi4wICogKG4wICsgbjEgKyBuMiArIG4zKTtcbiAgICB9LFxuICAgIC8vIDREIHNpbXBsZXggbm9pc2UsIGJldHRlciBzaW1wbGV4IHJhbmsgb3JkZXJpbmcgbWV0aG9kIDIwMTItMDMtMDlcbiAgICBub2lzZTREOiBmdW5jdGlvbih4LCB5LCB6LCB3KSB7XG4gICAgICB2YXIgcGVybSA9IHRoaXMucGVybTtcbiAgICAgIHZhciBncmFkNCA9IHRoaXMuZ3JhZDQ7XG5cbiAgICAgIHZhciBuMCwgbjEsIG4yLCBuMywgbjQ7IC8vIE5vaXNlIGNvbnRyaWJ1dGlvbnMgZnJvbSB0aGUgZml2ZSBjb3JuZXJzXG4gICAgICAvLyBTa2V3IHRoZSAoeCx5LHosdykgc3BhY2UgdG8gZGV0ZXJtaW5lIHdoaWNoIGNlbGwgb2YgMjQgc2ltcGxpY2VzIHdlJ3JlIGluXG4gICAgICB2YXIgcyA9ICh4ICsgeSArIHogKyB3KSAqIEY0OyAvLyBGYWN0b3IgZm9yIDREIHNrZXdpbmdcbiAgICAgIHZhciBpID0gTWF0aC5mbG9vcih4ICsgcyk7XG4gICAgICB2YXIgaiA9IE1hdGguZmxvb3IoeSArIHMpO1xuICAgICAgdmFyIGsgPSBNYXRoLmZsb29yKHogKyBzKTtcbiAgICAgIHZhciBsID0gTWF0aC5mbG9vcih3ICsgcyk7XG4gICAgICB2YXIgdCA9IChpICsgaiArIGsgKyBsKSAqIEc0OyAvLyBGYWN0b3IgZm9yIDREIHVuc2tld2luZ1xuICAgICAgdmFyIFgwID0gaSAtIHQ7IC8vIFVuc2tldyB0aGUgY2VsbCBvcmlnaW4gYmFjayB0byAoeCx5LHosdykgc3BhY2VcbiAgICAgIHZhciBZMCA9IGogLSB0O1xuICAgICAgdmFyIFowID0gayAtIHQ7XG4gICAgICB2YXIgVzAgPSBsIC0gdDtcbiAgICAgIHZhciB4MCA9IHggLSBYMDsgLy8gVGhlIHgseSx6LHcgZGlzdGFuY2VzIGZyb20gdGhlIGNlbGwgb3JpZ2luXG4gICAgICB2YXIgeTAgPSB5IC0gWTA7XG4gICAgICB2YXIgejAgPSB6IC0gWjA7XG4gICAgICB2YXIgdzAgPSB3IC0gVzA7XG4gICAgICAvLyBGb3IgdGhlIDREIGNhc2UsIHRoZSBzaW1wbGV4IGlzIGEgNEQgc2hhcGUgSSB3b24ndCBldmVuIHRyeSB0byBkZXNjcmliZS5cbiAgICAgIC8vIFRvIGZpbmQgb3V0IHdoaWNoIG9mIHRoZSAyNCBwb3NzaWJsZSBzaW1wbGljZXMgd2UncmUgaW4sIHdlIG5lZWQgdG9cbiAgICAgIC8vIGRldGVybWluZSB0aGUgbWFnbml0dWRlIG9yZGVyaW5nIG9mIHgwLCB5MCwgejAgYW5kIHcwLlxuICAgICAgLy8gU2l4IHBhaXItd2lzZSBjb21wYXJpc29ucyBhcmUgcGVyZm9ybWVkIGJldHdlZW4gZWFjaCBwb3NzaWJsZSBwYWlyXG4gICAgICAvLyBvZiB0aGUgZm91ciBjb29yZGluYXRlcywgYW5kIHRoZSByZXN1bHRzIGFyZSB1c2VkIHRvIHJhbmsgdGhlIG51bWJlcnMuXG4gICAgICB2YXIgcmFua3ggPSAwO1xuICAgICAgdmFyIHJhbmt5ID0gMDtcbiAgICAgIHZhciByYW5reiA9IDA7XG4gICAgICB2YXIgcmFua3cgPSAwO1xuICAgICAgaWYgKHgwID4geTApIHJhbmt4Kys7XG4gICAgICBlbHNlIHJhbmt5Kys7XG4gICAgICBpZiAoeDAgPiB6MCkgcmFua3grKztcbiAgICAgIGVsc2UgcmFua3orKztcbiAgICAgIGlmICh4MCA+IHcwKSByYW5reCsrO1xuICAgICAgZWxzZSByYW5rdysrO1xuICAgICAgaWYgKHkwID4gejApIHJhbmt5Kys7XG4gICAgICBlbHNlIHJhbmt6Kys7XG4gICAgICBpZiAoeTAgPiB3MCkgcmFua3krKztcbiAgICAgIGVsc2UgcmFua3crKztcbiAgICAgIGlmICh6MCA+IHcwKSByYW5reisrO1xuICAgICAgZWxzZSByYW5rdysrO1xuICAgICAgdmFyIGkxLCBqMSwgazEsIGwxOyAvLyBUaGUgaW50ZWdlciBvZmZzZXRzIGZvciB0aGUgc2Vjb25kIHNpbXBsZXggY29ybmVyXG4gICAgICB2YXIgaTIsIGoyLCBrMiwgbDI7IC8vIFRoZSBpbnRlZ2VyIG9mZnNldHMgZm9yIHRoZSB0aGlyZCBzaW1wbGV4IGNvcm5lclxuICAgICAgdmFyIGkzLCBqMywgazMsIGwzOyAvLyBUaGUgaW50ZWdlciBvZmZzZXRzIGZvciB0aGUgZm91cnRoIHNpbXBsZXggY29ybmVyXG4gICAgICAvLyBzaW1wbGV4W2NdIGlzIGEgNC12ZWN0b3Igd2l0aCB0aGUgbnVtYmVycyAwLCAxLCAyIGFuZCAzIGluIHNvbWUgb3JkZXIuXG4gICAgICAvLyBNYW55IHZhbHVlcyBvZiBjIHdpbGwgbmV2ZXIgb2NjdXIsIHNpbmNlIGUuZy4geD55Pno+dyBtYWtlcyB4PHosIHk8dyBhbmQgeDx3XG4gICAgICAvLyBpbXBvc3NpYmxlLiBPbmx5IHRoZSAyNCBpbmRpY2VzIHdoaWNoIGhhdmUgbm9uLXplcm8gZW50cmllcyBtYWtlIGFueSBzZW5zZS5cbiAgICAgIC8vIFdlIHVzZSBhIHRocmVzaG9sZGluZyB0byBzZXQgdGhlIGNvb3JkaW5hdGVzIGluIHR1cm4gZnJvbSB0aGUgbGFyZ2VzdCBtYWduaXR1ZGUuXG4gICAgICAvLyBSYW5rIDMgZGVub3RlcyB0aGUgbGFyZ2VzdCBjb29yZGluYXRlLlxuICAgICAgaTEgPSByYW5reCA+PSAzID8gMSA6IDA7XG4gICAgICBqMSA9IHJhbmt5ID49IDMgPyAxIDogMDtcbiAgICAgIGsxID0gcmFua3ogPj0gMyA/IDEgOiAwO1xuICAgICAgbDEgPSByYW5rdyA+PSAzID8gMSA6IDA7XG4gICAgICAvLyBSYW5rIDIgZGVub3RlcyB0aGUgc2Vjb25kIGxhcmdlc3QgY29vcmRpbmF0ZS5cbiAgICAgIGkyID0gcmFua3ggPj0gMiA/IDEgOiAwO1xuICAgICAgajIgPSByYW5reSA+PSAyID8gMSA6IDA7XG4gICAgICBrMiA9IHJhbmt6ID49IDIgPyAxIDogMDtcbiAgICAgIGwyID0gcmFua3cgPj0gMiA/IDEgOiAwO1xuICAgICAgLy8gUmFuayAxIGRlbm90ZXMgdGhlIHNlY29uZCBzbWFsbGVzdCBjb29yZGluYXRlLlxuICAgICAgaTMgPSByYW5reCA+PSAxID8gMSA6IDA7XG4gICAgICBqMyA9IHJhbmt5ID49IDEgPyAxIDogMDtcbiAgICAgIGszID0gcmFua3ogPj0gMSA/IDEgOiAwO1xuICAgICAgbDMgPSByYW5rdyA+PSAxID8gMSA6IDA7XG4gICAgICAvLyBUaGUgZmlmdGggY29ybmVyIGhhcyBhbGwgY29vcmRpbmF0ZSBvZmZzZXRzID0gMSwgc28gbm8gbmVlZCB0byBjb21wdXRlIHRoYXQuXG4gICAgICB2YXIgeDEgPSB4MCAtIGkxICsgRzQ7IC8vIE9mZnNldHMgZm9yIHNlY29uZCBjb3JuZXIgaW4gKHgseSx6LHcpIGNvb3Jkc1xuICAgICAgdmFyIHkxID0geTAgLSBqMSArIEc0O1xuICAgICAgdmFyIHoxID0gejAgLSBrMSArIEc0O1xuICAgICAgdmFyIHcxID0gdzAgLSBsMSArIEc0O1xuICAgICAgdmFyIHgyID0geDAgLSBpMiArIDIuMCAqIEc0OyAvLyBPZmZzZXRzIGZvciB0aGlyZCBjb3JuZXIgaW4gKHgseSx6LHcpIGNvb3Jkc1xuICAgICAgdmFyIHkyID0geTAgLSBqMiArIDIuMCAqIEc0O1xuICAgICAgdmFyIHoyID0gejAgLSBrMiArIDIuMCAqIEc0O1xuICAgICAgdmFyIHcyID0gdzAgLSBsMiArIDIuMCAqIEc0O1xuICAgICAgdmFyIHgzID0geDAgLSBpMyArIDMuMCAqIEc0OyAvLyBPZmZzZXRzIGZvciBmb3VydGggY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgIHZhciB5MyA9IHkwIC0gajMgKyAzLjAgKiBHNDtcbiAgICAgIHZhciB6MyA9IHowIC0gazMgKyAzLjAgKiBHNDtcbiAgICAgIHZhciB3MyA9IHcwIC0gbDMgKyAzLjAgKiBHNDtcbiAgICAgIHZhciB4NCA9IHgwIC0gMS4wICsgNC4wICogRzQ7IC8vIE9mZnNldHMgZm9yIGxhc3QgY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgIHZhciB5NCA9IHkwIC0gMS4wICsgNC4wICogRzQ7XG4gICAgICB2YXIgejQgPSB6MCAtIDEuMCArIDQuMCAqIEc0O1xuICAgICAgdmFyIHc0ID0gdzAgLSAxLjAgKyA0LjAgKiBHNDtcbiAgICAgIC8vIFdvcmsgb3V0IHRoZSBoYXNoZWQgZ3JhZGllbnQgaW5kaWNlcyBvZiB0aGUgZml2ZSBzaW1wbGV4IGNvcm5lcnNcbiAgICAgIHZhciBpaSA9IGkgJiAyNTU7XG4gICAgICB2YXIgamogPSBqICYgMjU1O1xuICAgICAgdmFyIGtrID0gayAmIDI1NTtcbiAgICAgIHZhciBsbCA9IGwgJiAyNTU7XG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSBmaXZlIGNvcm5lcnNcbiAgICAgIHZhciB0MCA9IDAuNiAtIHgwICogeDAgLSB5MCAqIHkwIC0gejAgKiB6MCAtIHcwICogdzA7XG4gICAgICBpZiAodDAgPCAwKSBuMCA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kwID0gKHBlcm1baWkgKyBwZXJtW2pqICsgcGVybVtrayArIHBlcm1bbGxdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDAgKj0gdDA7XG4gICAgICAgIG4wID0gdDAgKiB0MCAqIChncmFkNFtnaTBdICogeDAgKyBncmFkNFtnaTAgKyAxXSAqIHkwICsgZ3JhZDRbZ2kwICsgMl0gKiB6MCArIGdyYWQ0W2dpMCArIDNdICogdzApO1xuICAgICAgfVxuICAgICAgdmFyIHQxID0gMC42IC0geDEgKiB4MSAtIHkxICogeTEgLSB6MSAqIHoxIC0gdzEgKiB3MTtcbiAgICAgIGlmICh0MSA8IDApIG4xID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTEgPSAocGVybVtpaSArIGkxICsgcGVybVtqaiArIGoxICsgcGVybVtrayArIGsxICsgcGVybVtsbCArIGwxXV1dXSAlIDMyKSAqIDQ7XG4gICAgICAgIHQxICo9IHQxO1xuICAgICAgICBuMSA9IHQxICogdDEgKiAoZ3JhZDRbZ2kxXSAqIHgxICsgZ3JhZDRbZ2kxICsgMV0gKiB5MSArIGdyYWQ0W2dpMSArIDJdICogejEgKyBncmFkNFtnaTEgKyAzXSAqIHcxKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MiA9IDAuNiAtIHgyICogeDIgLSB5MiAqIHkyIC0gejIgKiB6MiAtIHcyICogdzI7XG4gICAgICBpZiAodDIgPCAwKSBuMiA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kyID0gKHBlcm1baWkgKyBpMiArIHBlcm1bamogKyBqMiArIHBlcm1ba2sgKyBrMiArIHBlcm1bbGwgKyBsMl1dXV0gJSAzMikgKiA0O1xuICAgICAgICB0MiAqPSB0MjtcbiAgICAgICAgbjIgPSB0MiAqIHQyICogKGdyYWQ0W2dpMl0gKiB4MiArIGdyYWQ0W2dpMiArIDFdICogeTIgKyBncmFkNFtnaTIgKyAyXSAqIHoyICsgZ3JhZDRbZ2kyICsgM10gKiB3Mik7XG4gICAgICB9XG4gICAgICB2YXIgdDMgPSAwLjYgLSB4MyAqIHgzIC0geTMgKiB5MyAtIHozICogejMgLSB3MyAqIHczO1xuICAgICAgaWYgKHQzIDwgMCkgbjMgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMyA9IChwZXJtW2lpICsgaTMgKyBwZXJtW2pqICsgajMgKyBwZXJtW2trICsgazMgKyBwZXJtW2xsICsgbDNdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDMgKj0gdDM7XG4gICAgICAgIG4zID0gdDMgKiB0MyAqIChncmFkNFtnaTNdICogeDMgKyBncmFkNFtnaTMgKyAxXSAqIHkzICsgZ3JhZDRbZ2kzICsgMl0gKiB6MyArIGdyYWQ0W2dpMyArIDNdICogdzMpO1xuICAgICAgfVxuICAgICAgdmFyIHQ0ID0gMC42IC0geDQgKiB4NCAtIHk0ICogeTQgLSB6NCAqIHo0IC0gdzQgKiB3NDtcbiAgICAgIGlmICh0NCA8IDApIG40ID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTQgPSAocGVybVtpaSArIDEgKyBwZXJtW2pqICsgMSArIHBlcm1ba2sgKyAxICsgcGVybVtsbCArIDFdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDQgKj0gdDQ7XG4gICAgICAgIG40ID0gdDQgKiB0NCAqIChncmFkNFtnaTRdICogeDQgKyBncmFkNFtnaTQgKyAxXSAqIHk0ICsgZ3JhZDRbZ2k0ICsgMl0gKiB6NCArIGdyYWQ0W2dpNCArIDNdICogdzQpO1xuICAgICAgfVxuICAgICAgLy8gU3VtIHVwIGFuZCBzY2FsZSB0aGUgcmVzdWx0IHRvIGNvdmVyIHRoZSByYW5nZSBbLTEsMV1cbiAgICAgIHJldHVybiAyNy4wICogKG4wICsgbjEgKyBuMiArIG4zICsgbjQpO1xuICAgIH1cbiAgfTtcblxuICBmdW5jdGlvbiBidWlsZFBlcm11dGF0aW9uVGFibGUocmFuZG9tKSB7XG4gICAgdmFyIGk7XG4gICAgdmFyIHAgPSBuZXcgVWludDhBcnJheSgyNTYpO1xuICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykge1xuICAgICAgcFtpXSA9IGk7XG4gICAgfVxuICAgIGZvciAoaSA9IDA7IGkgPCAyNTU7IGkrKykge1xuICAgICAgdmFyIHIgPSBpICsgfn4ocmFuZG9tKCkgKiAoMjU2IC0gaSkpO1xuICAgICAgdmFyIGF1eCA9IHBbaV07XG4gICAgICBwW2ldID0gcFtyXTtcbiAgICAgIHBbcl0gPSBhdXg7XG4gICAgfVxuICAgIHJldHVybiBwO1xuICB9XG4gIFNpbXBsZXhOb2lzZS5fYnVpbGRQZXJtdXRhdGlvblRhYmxlID0gYnVpbGRQZXJtdXRhdGlvblRhYmxlO1xuXG4gIGZ1bmN0aW9uIGFsZWEoKSB7XG4gICAgLy8gSm9oYW5uZXMgQmFhZ8O4ZSA8YmFhZ29lQGJhYWdvZS5jb20+LCAyMDEwXG4gICAgdmFyIHMwID0gMDtcbiAgICB2YXIgczEgPSAwO1xuICAgIHZhciBzMiA9IDA7XG4gICAgdmFyIGMgPSAxO1xuXG4gICAgdmFyIG1hc2ggPSBtYXNoZXIoKTtcbiAgICBzMCA9IG1hc2goJyAnKTtcbiAgICBzMSA9IG1hc2goJyAnKTtcbiAgICBzMiA9IG1hc2goJyAnKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzMCAtPSBtYXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgICBpZiAoczAgPCAwKSB7XG4gICAgICAgIHMwICs9IDE7XG4gICAgICB9XG4gICAgICBzMSAtPSBtYXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgICBpZiAoczEgPCAwKSB7XG4gICAgICAgIHMxICs9IDE7XG4gICAgICB9XG4gICAgICBzMiAtPSBtYXNoKGFyZ3VtZW50c1tpXSk7XG4gICAgICBpZiAoczIgPCAwKSB7XG4gICAgICAgIHMyICs9IDE7XG4gICAgICB9XG4gICAgfVxuICAgIG1hc2ggPSBudWxsO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0ID0gMjA5MTYzOSAqIHMwICsgYyAqIDIuMzI4MzA2NDM2NTM4Njk2M2UtMTA7IC8vIDJeLTMyXG4gICAgICBzMCA9IHMxO1xuICAgICAgczEgPSBzMjtcbiAgICAgIHJldHVybiBzMiA9IHQgLSAoYyA9IHQgfCAwKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIG1hc2hlcigpIHtcbiAgICB2YXIgbiA9IDB4ZWZjODI0OWQ7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGRhdGEpIHtcbiAgICAgIGRhdGEgPSBkYXRhLnRvU3RyaW5nKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbiArPSBkYXRhLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIHZhciBoID0gMC4wMjUxOTYwMzI4MjQxNjkzOCAqIG47XG4gICAgICAgIG4gPSBoID4+PiAwO1xuICAgICAgICBoIC09IG47XG4gICAgICAgIGggKj0gbjtcbiAgICAgICAgbiA9IGggPj4+IDA7XG4gICAgICAgIGggLT0gbjtcbiAgICAgICAgbiArPSBoICogMHgxMDAwMDAwMDA7IC8vIDJeMzJcbiAgICAgIH1cbiAgICAgIHJldHVybiAobiA+Pj4gMCkgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxuICAgIH07XG4gIH1cblxuICAvLyBhbWRcbiAgaWYgKHR5cGVvZiBkZWZpbmUgIT09ICd1bmRlZmluZWQnICYmIGRlZmluZS5hbWQpIGRlZmluZShmdW5jdGlvbigpIHtyZXR1cm4gU2ltcGxleE5vaXNlO30pO1xuICAvLyBjb21tb24ganNcbiAgaWYgKHR5cGVvZiBleHBvcnRzICE9PSAndW5kZWZpbmVkJykgZXhwb3J0cy5TaW1wbGV4Tm9pc2UgPSBTaW1wbGV4Tm9pc2U7XG4gIC8vIGJyb3dzZXJcbiAgZWxzZSBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHdpbmRvdy5TaW1wbGV4Tm9pc2UgPSBTaW1wbGV4Tm9pc2U7XG4gIC8vIG5vZGVqc1xuICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBtb2R1bGUuZXhwb3J0cyA9IFNpbXBsZXhOb2lzZTtcbiAgfVxuXG59KSgpO1xuIiwiLyohIFR3ZWFrcGFuZSAzLjEuMCAoYykgMjAxNiBjb2NvcG9uLCBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuICovXG4oZnVuY3Rpb24gKGdsb2JhbCwgZmFjdG9yeSkge1xuICAgIHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyA/IGZhY3RvcnkoZXhwb3J0cykgOlxuICAgIHR5cGVvZiBkZWZpbmUgPT09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShbJ2V4cG9ydHMnXSwgZmFjdG9yeSkgOlxuICAgIChnbG9iYWwgPSB0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gJ3VuZGVmaW5lZCcgPyBnbG9iYWxUaGlzIDogZ2xvYmFsIHx8IHNlbGYsIGZhY3RvcnkoZ2xvYmFsLlR3ZWFrcGFuZSA9IHt9KSk7XG59KSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqKlxuICAgICAqIEEgc2ltcGxlIHNlbWFudGljIHZlcnNpb25pbmcgcGVyc2VyLlxuICAgICAqL1xuICAgIGNsYXNzIFNlbXZlciB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdHJ1Y3Rvcih0ZXh0KSB7XG4gICAgICAgICAgICBjb25zdCBbY29yZSwgcHJlcmVsZWFzZV0gPSB0ZXh0LnNwbGl0KCctJyk7XG4gICAgICAgICAgICBjb25zdCBjb3JlQ29tcHMgPSBjb3JlLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICB0aGlzLm1ham9yID0gcGFyc2VJbnQoY29yZUNvbXBzWzBdLCAxMCk7XG4gICAgICAgICAgICB0aGlzLm1pbm9yID0gcGFyc2VJbnQoY29yZUNvbXBzWzFdLCAxMCk7XG4gICAgICAgICAgICB0aGlzLnBhdGNoID0gcGFyc2VJbnQoY29yZUNvbXBzWzJdLCAxMCk7XG4gICAgICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBwcmVyZWxlYXNlICE9PSBudWxsICYmIHByZXJlbGVhc2UgIT09IHZvaWQgMCA/IHByZXJlbGVhc2UgOiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgY29uc3QgY29yZSA9IFt0aGlzLm1ham9yLCB0aGlzLm1pbm9yLCB0aGlzLnBhdGNoXS5qb2luKCcuJyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmVyZWxlYXNlICE9PSBudWxsID8gW2NvcmUsIHRoaXMucHJlcmVsZWFzZV0uam9pbignLScpIDogY29yZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEJsYWRlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlcikge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGVsZW1lbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy52aWV3LmVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmlld1Byb3BzLmdldCgnZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgZGlzYWJsZWQoZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmlld1Byb3BzLnNldCgnZGlzYWJsZWQnLCBkaXNhYmxlZCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGhpZGRlbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZpZXdQcm9wcy5nZXQoJ2hpZGRlbicpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBoaWRkZW4oaGlkZGVuKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZpZXdQcm9wcy5zZXQoJ2hpZGRlbicsIGhpZGRlbik7XG4gICAgICAgIH1cbiAgICAgICAgZGlzcG9zZSgpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmlld1Byb3BzLnNldCgnZGlzcG9zZWQnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRwRXZlbnQge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0YXJnZXQpIHtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsYXNzIFRwQ2hhbmdlRXZlbnQgZXh0ZW5kcyBUcEV2ZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodGFyZ2V0LCB2YWx1ZSwgcHJlc2V0S2V5LCBsYXN0KSB7XG4gICAgICAgICAgICBzdXBlcih0YXJnZXQpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5wcmVzZXRLZXkgPSBwcmVzZXRLZXk7XG4gICAgICAgICAgICB0aGlzLmxhc3QgPSBsYXN0ICE9PSBudWxsICYmIGxhc3QgIT09IHZvaWQgMCA/IGxhc3QgOiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsYXNzIFRwVXBkYXRlRXZlbnQgZXh0ZW5kcyBUcEV2ZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodGFyZ2V0LCB2YWx1ZSwgcHJlc2V0S2V5KSB7XG4gICAgICAgICAgICBzdXBlcih0YXJnZXQpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5wcmVzZXRLZXkgPSBwcmVzZXRLZXk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xhc3MgVHBGb2xkRXZlbnQgZXh0ZW5kcyBUcEV2ZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodGFyZ2V0LCBleHBhbmRlZCkge1xuICAgICAgICAgICAgc3VwZXIodGFyZ2V0KTtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kZWQgPSBleHBhbmRlZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbGFzcyBUcFRhYlNlbGVjdEV2ZW50IGV4dGVuZHMgVHBFdmVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHRhcmdldCwgaW5kZXgpIHtcbiAgICAgICAgICAgIHN1cGVyKHRhcmdldCk7XG4gICAgICAgICAgICB0aGlzLmluZGV4ID0gaW5kZXg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmb3JjZUNhc3Qodikge1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNFbXB0eSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVlcEVxdWFsc0FycmF5KGExLCBhMikge1xuICAgICAgICBpZiAoYTEubGVuZ3RoICE9PSBhMi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGExLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoYTFbaV0gIT09IGEyW2ldKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IENSRUFURV9NRVNTQUdFX01BUCA9IHtcbiAgICAgICAgYWxyZWFkeWRpc3Bvc2VkOiAoKSA9PiAnVmlldyBoYXMgYmVlbiBhbHJlYWR5IGRpc3Bvc2VkJyxcbiAgICAgICAgaW52YWxpZHBhcmFtczogKGNvbnRleHQpID0+IGBJbnZhbGlkIHBhcmFtZXRlcnMgZm9yICcke2NvbnRleHQubmFtZX0nYCxcbiAgICAgICAgbm9tYXRjaGluZ2NvbnRyb2xsZXI6IChjb250ZXh0KSA9PiBgTm8gbWF0Y2hpbmcgY29udHJvbGxlciBmb3IgJyR7Y29udGV4dC5rZXl9J2AsXG4gICAgICAgIG5vbWF0Y2hpbmd2aWV3OiAoY29udGV4dCkgPT4gYE5vIG1hdGNoaW5nIHZpZXcgZm9yICcke0pTT04uc3RyaW5naWZ5KGNvbnRleHQucGFyYW1zKX0nYCxcbiAgICAgICAgbm90YmluZGFibGU6ICgpID0+IGBWYWx1ZSBpcyBub3QgYmluZGFibGVgLFxuICAgICAgICBwcm9wZXJ0eW5vdGZvdW5kOiAoY29udGV4dCkgPT4gYFByb3BlcnR5ICcke2NvbnRleHQubmFtZX0nIG5vdCBmb3VuZGAsXG4gICAgICAgIHNob3VsZG5ldmVyaGFwcGVuOiAoKSA9PiAnVGhpcyBlcnJvciBzaG91bGQgbmV2ZXIgaGFwcGVuJyxcbiAgICB9O1xuICAgIGNsYXNzIFRwRXJyb3Ige1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZSA9XG4gICAgICAgICAgICAgICAgKF9hID0gQ1JFQVRFX01FU1NBR0VfTUFQW2NvbmZpZy50eXBlXShmb3JjZUNhc3QoY29uZmlnLmNvbnRleHQpKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ1VuZXhwZWN0ZWQgZXJyb3InO1xuICAgICAgICAgICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgICAgICAgICAgdGhpcy5zdGFjayA9IG5ldyBFcnJvcih0aGlzLm1lc3NhZ2UpLnN0YWNrO1xuICAgICAgICAgICAgdGhpcy50eXBlID0gY29uZmlnLnR5cGU7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGFscmVhZHlEaXNwb3NlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVHBFcnJvcih7IHR5cGU6ICdhbHJlYWR5ZGlzcG9zZWQnIH0pO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBub3RCaW5kYWJsZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVHBFcnJvcih7XG4gICAgICAgICAgICAgICAgdHlwZTogJ25vdGJpbmRhYmxlJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBwcm9wZXJ0eU5vdEZvdW5kKG5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVHBFcnJvcih7XG4gICAgICAgICAgICAgICAgdHlwZTogJ3Byb3BlcnR5bm90Zm91bmQnLFxuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIHNob3VsZE5ldmVySGFwcGVuKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUcEVycm9yKHsgdHlwZTogJ3Nob3VsZG5ldmVyaGFwcGVuJyB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEJpbmRpbmdUYXJnZXQge1xuICAgICAgICBjb25zdHJ1Y3RvcihvYmosIGtleSwgb3B0X2lkKSB7XG4gICAgICAgICAgICB0aGlzLm9ial8gPSBvYmo7XG4gICAgICAgICAgICB0aGlzLmtleV8gPSBrZXk7XG4gICAgICAgICAgICB0aGlzLnByZXNldEtleV8gPSBvcHRfaWQgIT09IG51bGwgJiYgb3B0X2lkICE9PSB2b2lkIDAgPyBvcHRfaWQgOiBrZXk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGlzQmluZGFibGUob2JqKSB7XG4gICAgICAgICAgICBpZiAob2JqID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGtleSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmtleV87XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHByZXNldEtleSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByZXNldEtleV87XG4gICAgICAgIH1cbiAgICAgICAgcmVhZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9ial9bdGhpcy5rZXlfXTtcbiAgICAgICAgfVxuICAgICAgICB3cml0ZSh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5vYmpfW3RoaXMua2V5X10gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB3cml0ZVByb3BlcnR5KG5hbWUsIHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZU9iaiA9IHRoaXMucmVhZCgpO1xuICAgICAgICAgICAgaWYgKCFCaW5kaW5nVGFyZ2V0LmlzQmluZGFibGUodmFsdWVPYmopKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5ub3RCaW5kYWJsZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEobmFtZSBpbiB2YWx1ZU9iaikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnByb3BlcnR5Tm90Rm91bmQobmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YWx1ZU9ialtuYW1lXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQnV0dG9uQXBpIGV4dGVuZHMgQmxhZGVBcGkge1xuICAgICAgICBnZXQgbGFiZWwoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5wcm9wcy5nZXQoJ2xhYmVsJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGxhYmVsKGxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLnNldCgnbGFiZWwnLCBsYWJlbCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHRpdGxlKCkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnByb3BzLmdldCgndGl0bGUnKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHRpdGxlKHRpdGxlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5wcm9wcy5zZXQoJ3RpdGxlJywgdGl0bGUpO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICBjb25zdCBlbWl0dGVyID0gdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIuZW1pdHRlcjtcbiAgICAgICAgICAgIGVtaXR0ZXIub24oZXZlbnROYW1lLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgYmgobmV3IFRwRXZlbnQodGhpcykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEVtaXR0ZXIge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXJzXyA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgbGV0IG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzX1tldmVudE5hbWVdO1xuICAgICAgICAgICAgaWYgKCFvYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVyc19bZXZlbnROYW1lXSA9IFtdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2JzZXJ2ZXJzLnB1c2goe1xuICAgICAgICAgICAgICAgIGhhbmRsZXI6IGhhbmRsZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIG9mZihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzX1tldmVudE5hbWVdO1xuICAgICAgICAgICAgaWYgKG9ic2VydmVycykge1xuICAgICAgICAgICAgICAgIHRoaXMub2JzZXJ2ZXJzX1tldmVudE5hbWVdID0gb2JzZXJ2ZXJzLmZpbHRlcigob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyLmhhbmRsZXIgIT09IGhhbmRsZXI7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBlbWl0KGV2ZW50TmFtZSwgZXZlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzX1tldmVudE5hbWVdO1xuICAgICAgICAgICAgaWYgKCFvYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvYnNlcnZlcnMuZm9yRWFjaCgob2JzZXJ2ZXIpID0+IHtcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5oYW5kbGVyKGV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgUFJFRklYID0gJ3RwJztcbiAgICBmdW5jdGlvbiBDbGFzc05hbWUodmlld05hbWUpIHtcbiAgICAgICAgY29uc3QgZm4gPSAob3B0X2VsZW1lbnROYW1lLCBvcHRfbW9kaWZpZXIpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgUFJFRklYLFxuICAgICAgICAgICAgICAgICctJyxcbiAgICAgICAgICAgICAgICB2aWV3TmFtZSxcbiAgICAgICAgICAgICAgICAndicsXG4gICAgICAgICAgICAgICAgb3B0X2VsZW1lbnROYW1lID8gYF8ke29wdF9lbGVtZW50TmFtZX1gIDogJycsXG4gICAgICAgICAgICAgICAgb3B0X21vZGlmaWVyID8gYC0ke29wdF9tb2RpZmllcn1gIDogJycsXG4gICAgICAgICAgICBdLmpvaW4oJycpO1xuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gZm47XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcG9zZShoMSwgaDIpIHtcbiAgICAgICAgcmV0dXJuIChpbnB1dCkgPT4gaDIoaDEoaW5wdXQpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZXh0cmFjdFZhbHVlKGV2KSB7XG4gICAgICAgIHJldHVybiBldi5yYXdWYWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYmluZFZhbHVlKHZhbHVlLCBhcHBseVZhbHVlKSB7XG4gICAgICAgIHZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIGNvbXBvc2UoZXh0cmFjdFZhbHVlLCBhcHBseVZhbHVlKSk7XG4gICAgICAgIGFwcGx5VmFsdWUodmFsdWUucmF3VmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBiaW5kVmFsdWVNYXAodmFsdWVNYXAsIGtleSwgYXBwbHlWYWx1ZSkge1xuICAgICAgICBiaW5kVmFsdWUodmFsdWVNYXAudmFsdWUoa2V5KSwgYXBwbHlWYWx1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYXBwbHlDbGFzcyhlbGVtLCBjbGFzc05hbWUsIGFjdGl2ZSkge1xuICAgICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHZhbHVlVG9DbGFzc05hbWUoZWxlbSwgY2xhc3NOYW1lKSB7XG4gICAgICAgIHJldHVybiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGFwcGx5Q2xhc3MoZWxlbSwgY2xhc3NOYW1lLCB2YWx1ZSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJpbmRWYWx1ZVRvVGV4dENvbnRlbnQodmFsdWUsIGVsZW0pIHtcbiAgICAgICAgYmluZFZhbHVlKHZhbHVlLCAodGV4dCkgPT4ge1xuICAgICAgICAgICAgZWxlbS50ZXh0Q29udGVudCA9IHRleHQgIT09IG51bGwgJiYgdGV4dCAhPT0gdm9pZCAwID8gdGV4dCA6ICcnO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkcSA9IENsYXNzTmFtZSgnYnRuJyk7XG4gICAgY2xhc3MgQnV0dG9uVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkcSgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBidXR0b25FbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICAgICAgYnV0dG9uRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRxKCdiJykpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoYnV0dG9uRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoYnV0dG9uRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQgPSBidXR0b25FbGVtO1xuICAgICAgICAgICAgY29uc3QgdGl0bGVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGl0bGVFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJHEoJ3QnKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVUb1RleHRDb250ZW50KGNvbmZpZy5wcm9wcy52YWx1ZSgndGl0bGUnKSwgdGl0bGVFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudC5hcHBlbmRDaGlsZCh0aXRsZUVsZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQnV0dG9uQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5vbkNsaWNrXyA9IHRoaXMub25DbGlja18uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgQnV0dG9uVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBwcm9wczogdGhpcy5wcm9wcyxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuYnV0dG9uRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRoaXMub25DbGlja18pO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2xpY2tfKCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2NsaWNrJywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQm91bmRWYWx1ZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGluaXRpYWxWYWx1ZSwgY29uZmlnKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB0aGlzLmNvbnN0cmFpbnRfID0gY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLmNvbnN0cmFpbnQ7XG4gICAgICAgICAgICB0aGlzLmVxdWFsc18gPSAoX2EgPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcuZXF1YWxzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoKHYxLCB2MikgPT4gdjEgPT09IHYyKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLnJhd1ZhbHVlXyA9IGluaXRpYWxWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgY29uc3RyYWludCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cmFpbnRfO1xuICAgICAgICB9XG4gICAgICAgIGdldCByYXdWYWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhd1ZhbHVlXztcbiAgICAgICAgfVxuICAgICAgICBzZXQgcmF3VmFsdWUocmF3VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UmF3VmFsdWUocmF3VmFsdWUsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzZXRSYXdWYWx1ZShyYXdWYWx1ZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3Qgb3B0cyA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgY29uc3RyYWluZWRWYWx1ZSA9IHRoaXMuY29uc3RyYWludF9cbiAgICAgICAgICAgICAgICA/IHRoaXMuY29uc3RyYWludF8uY29uc3RyYWluKHJhd1ZhbHVlKVxuICAgICAgICAgICAgICAgIDogcmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VkID0gIXRoaXMuZXF1YWxzXyh0aGlzLnJhd1ZhbHVlXywgY29uc3RyYWluZWRWYWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWNoYW5nZWQgJiYgIW9wdHMuZm9yY2VFbWl0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2JlZm9yZWNoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmF3VmFsdWVfID0gY29uc3RyYWluZWRWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgb3B0aW9uczogb3B0cyxcbiAgICAgICAgICAgICAgICByYXdWYWx1ZTogY29uc3RyYWluZWRWYWx1ZSxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFByaW1pdGl2ZVZhbHVlIHtcbiAgICAgICAgY29uc3RydWN0b3IoaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZV8gPSBpbml0aWFsVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHJhd1ZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVfO1xuICAgICAgICB9XG4gICAgICAgIHNldCByYXdWYWx1ZSh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRSYXdWYWx1ZSh2YWx1ZSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNldFJhd1ZhbHVlKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRzID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDoge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAodGhpcy52YWx1ZV8gPT09IHZhbHVlICYmICFvcHRzLmZvcmNlRW1pdCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdiZWZvcmVjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlXyA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBvcHRzLFxuICAgICAgICAgICAgICAgIHJhd1ZhbHVlOiB0aGlzLnZhbHVlXyxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVZhbHVlKGluaXRpYWxWYWx1ZSwgY29uZmlnKSB7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnQgPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcuY29uc3RyYWludDtcbiAgICAgICAgY29uc3QgZXF1YWxzID0gY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLmVxdWFscztcbiAgICAgICAgaWYgKCFjb25zdHJhaW50ICYmICFlcXVhbHMpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUHJpbWl0aXZlVmFsdWUoaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEJvdW5kVmFsdWUoaW5pdGlhbFZhbHVlLCBjb25maWcpO1xuICAgIH1cblxuICAgIGNsYXNzIFZhbHVlTWFwIHtcbiAgICAgICAgY29uc3RydWN0b3IodmFsdWVNYXApIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLnZhbE1hcF8gPSB2YWx1ZU1hcDtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIHRoaXMudmFsTWFwXykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLnZhbE1hcF9ba2V5XTtcbiAgICAgICAgICAgICAgICB2LmVtaXR0ZXIub24oJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleToga2V5LFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgY3JlYXRlQ29yZShpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbml0aWFsVmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIGtleXMucmVkdWNlKChvLCBrZXkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihvLCB7XG4gICAgICAgICAgICAgICAgICAgIFtrZXldOiBjcmVhdGVWYWx1ZShpbml0aWFsVmFsdWVba2V5XSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGZyb21PYmplY3QoaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBjb3JlID0gdGhpcy5jcmVhdGVDb3JlKGluaXRpYWxWYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFZhbHVlTWFwKGNvcmUpO1xuICAgICAgICB9XG4gICAgICAgIGdldChrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbE1hcF9ba2V5XS5yYXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy52YWxNYXBfW2tleV0ucmF3VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB2YWx1ZShrZXkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbE1hcF9ba2V5XTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlT2JqZWN0KHZhbHVlLCBrZXlUb1BhcnNlck1hcCkge1xuICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoa2V5VG9QYXJzZXJNYXApO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBrZXlzLnJlZHVjZSgodG1wLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGlmICh0bXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYXJzZXIgPSBrZXlUb1BhcnNlck1hcFtrZXldO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VyKHZhbHVlW2tleV0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5zdWNjZWVkZWRcbiAgICAgICAgICAgICAgICA/IE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgdG1wKSwgeyBba2V5XTogcmVzdWx0LnZhbHVlIH0pIDogdW5kZWZpbmVkO1xuICAgICAgICB9LCB7fSk7XG4gICAgICAgIHJldHVybiBmb3JjZUNhc3QocmVzdWx0KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VBcnJheSh2YWx1ZSwgcGFyc2VJdGVtKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZS5yZWR1Y2UoKHRtcCwgaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRtcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlSXRlbShpdGVtKTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0LnN1Y2NlZWRlZCB8fCByZXN1bHQudmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gWy4uLnRtcCwgcmVzdWx0LnZhbHVlXTtcbiAgICAgICAgfSwgW10pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc09iamVjdCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JztcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcihwYXJzZSkge1xuICAgICAgICByZXR1cm4gKG9wdGlvbmFsKSA9PiAodikgPT4ge1xuICAgICAgICAgICAgaWYgKCFvcHRpb25hbCAmJiB2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZWVkZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0aW9uYWwgJiYgdiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VlZGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZSh2KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZWVkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZWVkZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXJzKG9wdGlvbmFsKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjdXN0b206IChwYXJzZSkgPT4gY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcihwYXJzZSkob3B0aW9uYWwpLFxuICAgICAgICAgICAgYm9vbGVhbjogY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcigodikgPT4gdHlwZW9mIHYgPT09ICdib29sZWFuJyA/IHYgOiB1bmRlZmluZWQpKG9wdGlvbmFsKSxcbiAgICAgICAgICAgIG51bWJlcjogY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcigodikgPT4gdHlwZW9mIHYgPT09ICdudW1iZXInID8gdiA6IHVuZGVmaW5lZCkob3B0aW9uYWwpLFxuICAgICAgICAgICAgc3RyaW5nOiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PiB0eXBlb2YgdiA9PT0gJ3N0cmluZycgPyB2IDogdW5kZWZpbmVkKShvcHRpb25hbCksXG4gICAgICAgICAgICBmdW5jdGlvbjogY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcigodikgPT5cbiAgICAgICAgICAgIHR5cGVvZiB2ID09PSAnZnVuY3Rpb24nID8gdiA6IHVuZGVmaW5lZCkob3B0aW9uYWwpLFxuICAgICAgICAgICAgY29uc3RhbnQ6ICh2YWx1ZSkgPT4gY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcigodikgPT4gKHYgPT09IHZhbHVlID8gdmFsdWUgOiB1bmRlZmluZWQpKShvcHRpb25hbCksXG4gICAgICAgICAgICByYXc6IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIoKHYpID0+IHYpKG9wdGlvbmFsKSxcbiAgICAgICAgICAgIG9iamVjdDogKGtleVRvUGFyc2VyTWFwKSA9PiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc09iamVjdCh2KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VPYmplY3Qodiwga2V5VG9QYXJzZXJNYXApO1xuICAgICAgICAgICAgfSkob3B0aW9uYWwpLFxuICAgICAgICAgICAgYXJyYXk6IChpdGVtUGFyc2VyKSA9PiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZUFycmF5KHYsIGl0ZW1QYXJzZXIpO1xuICAgICAgICAgICAgfSkob3B0aW9uYWwpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBQYXJhbXNQYXJzZXJzID0ge1xuICAgICAgICBvcHRpb25hbDogY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcnModHJ1ZSksXG4gICAgICAgIHJlcXVpcmVkOiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVycyhmYWxzZSksXG4gICAgfTtcbiAgICBmdW5jdGlvbiBwYXJzZVBhcmFtcyh2YWx1ZSwga2V5VG9QYXJzZXJNYXApIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gUGFyYW1zUGFyc2Vycy5yZXF1aXJlZC5vYmplY3Qoa2V5VG9QYXJzZXJNYXApKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5zdWNjZWVkZWQgPyByZXN1bHQudmFsdWUgOiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZGlzcG9zZUVsZW1lbnQoZWxlbSkge1xuICAgICAgICBpZiAoZWxlbSAmJiBlbGVtLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgICAgICAgIGVsZW0ucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZChlbGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBnZXRBbGxCbGFkZVBvc2l0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIFsndmVyeWZpcnN0JywgJ2ZpcnN0JywgJ2xhc3QnLCAndmVyeWxhc3QnXTtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkcCA9IENsYXNzTmFtZSgnJyk7XG4gICAgY29uc3QgUE9TX1RPX0NMQVNTX05BTUVfTUFQID0ge1xuICAgICAgICB2ZXJ5Zmlyc3Q6ICd2ZnN0JyxcbiAgICAgICAgZmlyc3Q6ICdmc3QnLFxuICAgICAgICBsYXN0OiAnbHN0JyxcbiAgICAgICAgdmVyeWxhc3Q6ICd2bHN0JyxcbiAgICB9O1xuICAgIGNsYXNzIEJsYWRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5wYXJlbnRfID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuYmxhZGUgPSBjb25maWcuYmxhZGU7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBjb25maWcudmlldztcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLnZpZXcuZWxlbWVudDtcbiAgICAgICAgICAgIHRoaXMuYmxhZGUudmFsdWUoJ3Bvc2l0aW9ucycpLmVtaXR0ZXIub24oJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICBnZXRBbGxCbGFkZVBvc2l0aW9ucygpLmZvckVhY2goKHBvcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lJHAodW5kZWZpbmVkLCBQT1NfVE9fQ0xBU1NfTkFNRV9NQVBbcG9zXSkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuYmxhZGUuZ2V0KCdwb3NpdGlvbnMnKS5mb3JFYWNoKChwb3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRwKHVuZGVmaW5lZCwgUE9TX1RPX0NMQVNTX05BTUVfTUFQW3Bvc10pKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMuaGFuZGxlRGlzcG9zZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgZGlzcG9zZUVsZW1lbnQoZWxlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgcGFyZW50KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50XztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IFNWR19OUyA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG4gICAgZnVuY3Rpb24gZm9yY2VSZWZsb3coZWxlbWVudCkge1xuICAgICAgICBlbGVtZW50Lm9mZnNldEhlaWdodDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGlzYWJsZVRyYW5zaXRpb25UZW1wb3JhcmlseShlbGVtZW50LCBjYWxsYmFjaykge1xuICAgICAgICBjb25zdCB0ID0gZWxlbWVudC5zdHlsZS50cmFuc2l0aW9uO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRyYW5zaXRpb24gPSAnbm9uZSc7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNpdGlvbiA9IHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN1cHBvcnRzVG91Y2goZG9jKSB7XG4gICAgICAgIHJldHVybiBkb2Mub250b3VjaHN0YXJ0ICE9PSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEdsb2JhbE9iamVjdCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRXaW5kb3dEb2N1bWVudCgpIHtcbiAgICAgICAgY29uc3QgZ2xvYmFsT2JqID0gZm9yY2VDYXN0KGdldEdsb2JhbE9iamVjdCgpKTtcbiAgICAgICAgcmV0dXJuIGdsb2JhbE9iai5kb2N1bWVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q2FudmFzQ29udGV4dChjYW52YXNFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHdpbiA9IGNhbnZhc0VsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcbiAgICAgICAgaWYgKCF3aW4pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzQnJvd3NlciA9ICdkb2N1bWVudCcgaW4gd2luO1xuICAgICAgICByZXR1cm4gaXNCcm93c2VyID8gY2FudmFzRWxlbWVudC5nZXRDb250ZXh0KCcyZCcpIDogbnVsbDtcbiAgICB9XG4gICAgY29uc3QgSUNPTl9JRF9UT19JTk5FUl9IVE1MX01BUCA9IHtcbiAgICAgICAgY2hlY2s6ICc8cGF0aCBkPVwiTTIgOGw0IDRsOCAtOFwiLz4nLFxuICAgICAgICBkcm9wZG93bjogJzxwYXRoIGQ9XCJNNSA3aDZsLTMgMyB6XCIvPicsXG4gICAgICAgIHAyZHBhZDogJzxwYXRoIGQ9XCJNOCA0djhcIi8+PHBhdGggZD1cIk00IDhoOFwiLz48Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEuMlwiLz4nLFxuICAgIH07XG4gICAgZnVuY3Rpb24gY3JlYXRlU3ZnSWNvbkVsZW1lbnQoZG9jdW1lbnQsIGljb25JZCkge1xuICAgICAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3N2ZycpO1xuICAgICAgICBlbGVtLmlubmVySFRNTCA9IElDT05fSURfVE9fSU5ORVJfSFRNTF9NQVBbaWNvbklkXTtcbiAgICAgICAgcmV0dXJuIGVsZW07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluc2VydEVsZW1lbnRBdChwYXJlbnRFbGVtZW50LCBlbGVtZW50LCBpbmRleCkge1xuICAgICAgICBwYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShlbGVtZW50LCBwYXJlbnRFbGVtZW50LmNoaWxkcmVuW2luZGV4XSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICBpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBlbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQ2hpbGRFbGVtZW50cyhlbGVtZW50KSB7XG4gICAgICAgIHdoaWxlIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbWVudC5jaGlsZHJlblswXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQ2hpbGROb2RlcyhlbGVtZW50KSB7XG4gICAgICAgIHdoaWxlIChlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVDaGlsZChlbGVtZW50LmNoaWxkTm9kZXNbMF0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmROZXh0VGFyZ2V0KGV2KSB7XG4gICAgICAgIGlmIChldi5yZWxhdGVkVGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gZm9yY2VDYXN0KGV2LnJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgnZXhwbGljaXRPcmlnaW5hbFRhcmdldCcgaW4gZXYpIHtcbiAgICAgICAgICAgIHJldHVybiBldi5leHBsaWNpdE9yaWdpbmFsVGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRvID0gQ2xhc3NOYW1lKCdsYmwnKTtcbiAgICBmdW5jdGlvbiBjcmVhdGVMYWJlbE5vZGUoZG9jLCBsYWJlbCkge1xuICAgICAgICBjb25zdCBmcmFnID0gZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgY29uc3QgbGluZU5vZGVzID0gbGFiZWwuc3BsaXQoJ1xcbicpLm1hcCgobGluZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRvYy5jcmVhdGVUZXh0Tm9kZShsaW5lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxpbmVOb2Rlcy5mb3JFYWNoKChsaW5lTm9kZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVFbGVtZW50KCdicicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQobGluZU5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZyYWc7XG4gICAgfVxuICAgIGNsYXNzIExhYmVsVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbygpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBsYWJlbEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBsYWJlbEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbygnbCcpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcChjb25maWcucHJvcHMsICdsYWJlbCcsICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbyh1bmRlZmluZWQsICdub2wnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUkbyh1bmRlZmluZWQsICdub2wnKSk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZXMobGFiZWxFbGVtKTtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxFbGVtLmFwcGVuZENoaWxkKGNyZWF0ZUxhYmVsTm9kZShkb2MsIHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQobGFiZWxFbGVtKTtcbiAgICAgICAgICAgIHRoaXMubGFiZWxFbGVtZW50ID0gbGFiZWxFbGVtO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdmFsdWVFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJG8oJ3YnKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodmFsdWVFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVFbGVtZW50ID0gdmFsdWVFbGVtO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgTGFiZWxDb250cm9sbGVyIGV4dGVuZHMgQmxhZGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdQcm9wcyA9IGNvbmZpZy52YWx1ZUNvbnRyb2xsZXIudmlld1Byb3BzO1xuICAgICAgICAgICAgc3VwZXIoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjb25maWcpLCB7IHZpZXc6IG5ldyBMYWJlbFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBjb25maWcucHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pLCB2aWV3UHJvcHM6IHZpZXdQcm9wcyB9KSk7XG4gICAgICAgICAgICB0aGlzLnByb3BzID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNvbnRyb2xsZXIgPSBjb25maWcudmFsdWVDb250cm9sbGVyO1xuICAgICAgICAgICAgdGhpcy52aWV3LnZhbHVlRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnZhbHVlQ29udHJvbGxlci52aWV3LmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgQnV0dG9uQmxhZGVQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnYnV0dG9uJyxcbiAgICAgICAgdHlwZTogJ2JsYWRlJyxcbiAgICAgICAgYWNjZXB0KHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogcC5yZXF1aXJlZC5zdHJpbmcsXG4gICAgICAgICAgICAgICAgdmlldzogcC5yZXF1aXJlZC5jb25zdGFudCgnYnV0dG9uJyksXG4gICAgICAgICAgICAgICAgbGFiZWw6IHAub3B0aW9uYWwuc3RyaW5nLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID8geyBwYXJhbXM6IHJlc3VsdCB9IDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcihhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IExhYmVsQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGFyZ3MuYmxhZGUsXG4gICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogYXJncy5wYXJhbXMubGFiZWwsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdmFsdWVDb250cm9sbGVyOiBuZXcgQnV0dG9uQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBhcmdzLnBhcmFtcy50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgYXBpKGFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlciBpbnN0YW5jZW9mIExhYmVsQ29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlci52YWx1ZUNvbnRyb2xsZXIgaW5zdGFuY2VvZiBCdXR0b25Db250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBCdXR0b25BcGkoYXJncy5jb250cm9sbGVyKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xhc3MgVmFsdWVCbGFkZUNvbnRyb2xsZXIgZXh0ZW5kcyBCbGFkZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQmxhZGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgVmFsdWVNYXAoe1xuICAgICAgICAgICAgcG9zaXRpb25zOiBjcmVhdGVWYWx1ZShbXSwge1xuICAgICAgICAgICAgICAgIGVxdWFsczogZGVlcEVxdWFsc0FycmF5LFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsYXNzIEZvbGRhYmxlIGV4dGVuZHMgVmFsdWVNYXAge1xuICAgICAgICBjb25zdHJ1Y3Rvcih2YWx1ZU1hcCkge1xuICAgICAgICAgICAgc3VwZXIodmFsdWVNYXApO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBjcmVhdGUoZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvcmVPYmogPSB7XG4gICAgICAgICAgICAgICAgY29tcGxldGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBleHBhbmRlZCxcbiAgICAgICAgICAgICAgICBleHBhbmRlZEhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICBzaG91bGRGaXhIZWlnaHQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRlbXBvcmFyeUV4cGFuZGVkOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGNvcmUgPSBWYWx1ZU1hcC5jcmVhdGVDb3JlKGNvcmVPYmopO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBGb2xkYWJsZShjb3JlKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgc3R5bGVFeHBhbmRlZCgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoX2EgPSB0aGlzLmdldCgndGVtcG9yYXJ5RXhwYW5kZWQnKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5nZXQoJ2V4cGFuZGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHN0eWxlSGVpZ2h0KCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnN0eWxlRXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXhIZWlnaHQgPSB0aGlzLmdldCgnZXhwYW5kZWRIZWlnaHQnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldCgnc2hvdWxkRml4SGVpZ2h0JykgJiYgIWlzRW1wdHkoZXhIZWlnaHQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2V4SGVpZ2h0fXB4YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAnYXV0byc7XG4gICAgICAgIH1cbiAgICAgICAgYmluZEV4cGFuZGVkQ2xhc3MoZWxlbSwgZXhwYW5kZWRDbGFzc05hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG9uRXhwYW5kID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5zdHlsZUV4cGFuZGVkO1xuICAgICAgICAgICAgICAgIGlmIChleHBhbmRlZCkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5hZGQoZXhwYW5kZWRDbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QucmVtb3ZlKGV4cGFuZGVkQ2xhc3NOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKHRoaXMsICdleHBhbmRlZCcsIG9uRXhwYW5kKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcCh0aGlzLCAndGVtcG9yYXJ5RXhwYW5kZWQnLCBvbkV4cGFuZCk7XG4gICAgICAgIH1cbiAgICAgICAgY2xlYW5VcFRyYW5zaXRpb24oKSB7XG4gICAgICAgICAgICB0aGlzLnNldCgnc2hvdWxkRml4SGVpZ2h0JywgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5zZXQoJ2V4cGFuZGVkSGVpZ2h0JywgbnVsbCk7XG4gICAgICAgICAgICB0aGlzLnNldCgnY29tcGxldGVkJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29tcHV0ZUV4cGFuZGVkRm9sZGVySGVpZ2h0KGZvbGRlciwgY29udGFpbmVyRWxlbWVudCkge1xuICAgICAgICBsZXQgaGVpZ2h0ID0gMDtcbiAgICAgICAgZGlzYWJsZVRyYW5zaXRpb25UZW1wb3JhcmlseShjb250YWluZXJFbGVtZW50LCAoKSA9PiB7XG4gICAgICAgICAgICBmb2xkZXIuc2V0KCdleHBhbmRlZEhlaWdodCcsIG51bGwpO1xuICAgICAgICAgICAgZm9sZGVyLnNldCgndGVtcG9yYXJ5RXhwYW5kZWQnLCB0cnVlKTtcbiAgICAgICAgICAgIGZvcmNlUmVmbG93KGNvbnRhaW5lckVsZW1lbnQpO1xuICAgICAgICAgICAgaGVpZ2h0ID0gY29udGFpbmVyRWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICBmb2xkZXIuc2V0KCd0ZW1wb3JhcnlFeHBhbmRlZCcsIG51bGwpO1xuICAgICAgICAgICAgZm9yY2VSZWZsb3coY29udGFpbmVyRWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaGVpZ2h0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBhcHBseUhlaWdodChmb2xkYWJsZSwgZWxlbSkge1xuICAgICAgICBlbGVtLnN0eWxlLmhlaWdodCA9IGZvbGRhYmxlLnN0eWxlSGVpZ2h0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBiaW5kRm9sZGFibGUoZm9sZGFibGUsIGVsZW0pIHtcbiAgICAgICAgZm9sZGFibGUudmFsdWUoJ2V4cGFuZGVkJykuZW1pdHRlci5vbignYmVmb3JlY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgZm9sZGFibGUuc2V0KCdjb21wbGV0ZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAoaXNFbXB0eShmb2xkYWJsZS5nZXQoJ2V4cGFuZGVkSGVpZ2h0JykpKSB7XG4gICAgICAgICAgICAgICAgZm9sZGFibGUuc2V0KCdleHBhbmRlZEhlaWdodCcsIGNvbXB1dGVFeHBhbmRlZEZvbGRlckhlaWdodChmb2xkYWJsZSwgZWxlbSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9sZGFibGUuc2V0KCdzaG91bGRGaXhIZWlnaHQnLCB0cnVlKTtcbiAgICAgICAgICAgIGZvcmNlUmVmbG93KGVsZW0pO1xuICAgICAgICB9KTtcbiAgICAgICAgZm9sZGFibGUuZW1pdHRlci5vbignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgYXBwbHlIZWlnaHQoZm9sZGFibGUsIGVsZW0pO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBwbHlIZWlnaHQoZm9sZGFibGUsIGVsZW0pO1xuICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCAoZXYpID0+IHtcbiAgICAgICAgICAgIGlmIChldi5wcm9wZXJ0eU5hbWUgIT09ICdoZWlnaHQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9sZGFibGUuY2xlYW5VcFRyYW5zaXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xhc3MgUmFja0xpa2VBcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIsIHJhY2tBcGkpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgdGhpcy5yYWNrQXBpXyA9IHJhY2tBcGk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRCdXR0b25Bc0JsYWRlKGFwaSwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBhcGkuYWRkQmxhZGUoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMpLCB7IHZpZXc6ICdidXR0b24nIH0pKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkRm9sZGVyQXNCbGFkZShhcGksIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gYXBpLmFkZEJsYWRlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zKSwgeyB2aWV3OiAnZm9sZGVyJyB9KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZFNlcGFyYXRvckFzQmxhZGUoYXBpLCBvcHRfcGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG9wdF9wYXJhbXMgIT09IG51bGwgJiYgb3B0X3BhcmFtcyAhPT0gdm9pZCAwID8gb3B0X3BhcmFtcyA6IHt9O1xuICAgICAgICByZXR1cm4gYXBpLmFkZEJsYWRlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zKSwgeyB2aWV3OiAnc2VwYXJhdG9yJyB9KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZFRhYkFzQmxhZGUoYXBpLCBwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIGFwaS5hZGRCbGFkZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhcmFtcyksIHsgdmlldzogJ3RhYicgfSkpO1xuICAgIH1cblxuICAgIGNsYXNzIE5lc3RlZE9yZGVyZWRTZXQge1xuICAgICAgICBjb25zdHJ1Y3RvcihleHRyYWN0KSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5pdGVtc18gPSBbXTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVfID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgdGhpcy5vblN1Ykxpc3RBZGRfID0gdGhpcy5vblN1Ykxpc3RBZGRfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uU3ViTGlzdFJlbW92ZV8gPSB0aGlzLm9uU3ViTGlzdFJlbW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZXh0cmFjdF8gPSBleHRyYWN0O1xuICAgICAgICB9XG4gICAgICAgIGdldCBpdGVtcygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1zXztcbiAgICAgICAgfVxuICAgICAgICBhbGxJdGVtcygpIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY2FjaGVfKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5kKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5hbGxJdGVtcygpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGluY2x1ZGVzKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlXy5oYXMoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkKGl0ZW0sIG9wdF9pbmRleCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5jbHVkZXMoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IG9wdF9pbmRleCAhPT0gdW5kZWZpbmVkID8gb3B0X2luZGV4IDogdGhpcy5pdGVtc18ubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5pdGVtc18uc3BsaWNlKGluZGV4LCAwLCBpdGVtKTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVfLmFkZChpdGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHN1Ykxpc3QgPSB0aGlzLmV4dHJhY3RfKGl0ZW0pO1xuICAgICAgICAgICAgaWYgKHN1Ykxpc3QpIHtcbiAgICAgICAgICAgICAgICBzdWJMaXN0LmVtaXR0ZXIub24oJ2FkZCcsIHRoaXMub25TdWJMaXN0QWRkXyk7XG4gICAgICAgICAgICAgICAgc3ViTGlzdC5lbWl0dGVyLm9uKCdyZW1vdmUnLCB0aGlzLm9uU3ViTGlzdFJlbW92ZV8pO1xuICAgICAgICAgICAgICAgIHN1Ykxpc3QuYWxsSXRlbXMoKS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVfLmFkZChpdGVtKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdhZGQnLCB7XG4gICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgcm9vdDogdGhpcyxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmUoaXRlbSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLml0ZW1zXy5pbmRleE9mKGl0ZW0pO1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXRlbXNfLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlXy5kZWxldGUoaXRlbSk7XG4gICAgICAgICAgICBjb25zdCBzdWJMaXN0ID0gdGhpcy5leHRyYWN0XyhpdGVtKTtcbiAgICAgICAgICAgIGlmIChzdWJMaXN0KSB7XG4gICAgICAgICAgICAgICAgc3ViTGlzdC5lbWl0dGVyLm9mZignYWRkJywgdGhpcy5vblN1Ykxpc3RBZGRfKTtcbiAgICAgICAgICAgICAgICBzdWJMaXN0LmVtaXR0ZXIub2ZmKCdyZW1vdmUnLCB0aGlzLm9uU3ViTGlzdFJlbW92ZV8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ3JlbW92ZScsIHtcbiAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgICByb290OiB0aGlzLFxuICAgICAgICAgICAgICAgIHRhcmdldDogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uU3ViTGlzdEFkZF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVfLmFkZChldi5pdGVtKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdhZGQnLCB7XG4gICAgICAgICAgICAgICAgaW5kZXg6IGV2LmluZGV4LFxuICAgICAgICAgICAgICAgIGl0ZW06IGV2Lml0ZW0sXG4gICAgICAgICAgICAgICAgcm9vdDogdGhpcyxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IGV2LnRhcmdldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uU3ViTGlzdFJlbW92ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVfLmRlbGV0ZShldi5pdGVtKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdyZW1vdmUnLCB7XG4gICAgICAgICAgICAgICAgaW5kZXg6IGV2LmluZGV4LFxuICAgICAgICAgICAgICAgIGl0ZW06IGV2Lml0ZW0sXG4gICAgICAgICAgICAgICAgcm9vdDogdGhpcyxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IGV2LnRhcmdldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgSW5wdXRCaW5kaW5nQXBpIGV4dGVuZHMgQmxhZGVBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyKTtcbiAgICAgICAgICAgIHRoaXMub25CaW5kaW5nQ2hhbmdlXyA9IHRoaXMub25CaW5kaW5nQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXyA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLmJpbmRpbmcuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkJpbmRpbmdDaGFuZ2VfKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbGFiZWwoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5wcm9wcy5nZXQoJ2xhYmVsJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGxhYmVsKGxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLnNldCgnbGFiZWwnLCBsYWJlbCk7XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaCA9IGhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8ub24oZXZlbnROYW1lLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICBiaChldi5ldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHJlZnJlc2goKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLmJpbmRpbmcucmVhZCgpO1xuICAgICAgICB9XG4gICAgICAgIG9uQmluZGluZ0NoYW5nZV8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZXYuc2VuZGVyLnRhcmdldC5yZWFkKCk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwQ2hhbmdlRXZlbnQodGhpcywgZm9yY2VDYXN0KHZhbHVlKSwgdGhpcy5jb250cm9sbGVyXy5iaW5kaW5nLnRhcmdldC5wcmVzZXRLZXksIGV2Lm9wdGlvbnMubGFzdCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIElucHV0QmluZGluZ0NvbnRyb2xsZXIgZXh0ZW5kcyBMYWJlbENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgc3VwZXIoZG9jLCBjb25maWcpO1xuICAgICAgICAgICAgdGhpcy5iaW5kaW5nID0gY29uZmlnLmJpbmRpbmc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBNb25pdG9yQmluZGluZ0FwaSBleHRlbmRzIEJsYWRlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlcikge1xuICAgICAgICAgICAgc3VwZXIoY29udHJvbGxlcik7XG4gICAgICAgICAgICB0aGlzLm9uQmluZGluZ1VwZGF0ZV8gPSB0aGlzLm9uQmluZGluZ1VwZGF0ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8gPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5iaW5kaW5nLmVtaXR0ZXIub24oJ3VwZGF0ZScsIHRoaXMub25CaW5kaW5nVXBkYXRlXyk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGxhYmVsKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuZ2V0KCdsYWJlbCcpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBsYWJlbChsYWJlbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wcm9wcy5zZXQoJ2xhYmVsJywgbGFiZWwpO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLm9uKGV2ZW50TmFtZSwgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgYmgoZXYuZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICByZWZyZXNoKCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5iaW5kaW5nLnJlYWQoKTtcbiAgICAgICAgfVxuICAgICAgICBvbkJpbmRpbmdVcGRhdGVfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGV2LnNlbmRlci50YXJnZXQucmVhZCgpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCd1cGRhdGUnLCB7XG4gICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcFVwZGF0ZUV2ZW50KHRoaXMsIGZvcmNlQ2FzdCh2YWx1ZSksIHRoaXMuY29udHJvbGxlcl8uYmluZGluZy50YXJnZXQucHJlc2V0S2V5KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgTW9uaXRvckJpbmRpbmdDb250cm9sbGVyIGV4dGVuZHMgTGFiZWxDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHN1cGVyKGRvYywgY29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMuYmluZGluZyA9IGNvbmZpZy5iaW5kaW5nO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMuYmluZERpc2FibGVkKHRoaXMuYmluZGluZy50aWNrZXIpO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMuaGFuZGxlRGlzcG9zZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kaW5nLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmluZFN1YkJsYWRlQXBpU2V0KGFwaSkge1xuICAgICAgICBpZiAoYXBpIGluc3RhbmNlb2YgUmFja0FwaSkge1xuICAgICAgICAgICAgcmV0dXJuIGFwaVsnYXBpU2V0XyddO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcGkgaW5zdGFuY2VvZiBSYWNrTGlrZUFwaSkge1xuICAgICAgICAgICAgcmV0dXJuIGFwaVsncmFja0FwaV8nXVsnYXBpU2V0XyddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRBcGlCeUNvbnRyb2xsZXIoYXBpU2V0LCBjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnN0IGFwaSA9IGFwaVNldC5maW5kKChhcGkpID0+IGFwaS5jb250cm9sbGVyXyA9PT0gY29udHJvbGxlcik7XG4gICAgICAgIGlmICghYXBpKSB7XG4gICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFwaTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQmluZGluZ1RhcmdldChvYmosIGtleSwgb3B0X2lkKSB7XG4gICAgICAgIGlmICghQmluZGluZ1RhcmdldC5pc0JpbmRhYmxlKG9iaikpIHtcbiAgICAgICAgICAgIHRocm93IFRwRXJyb3Iubm90QmluZGFibGUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEJpbmRpbmdUYXJnZXQob2JqLCBrZXksIG9wdF9pZCk7XG4gICAgfVxuICAgIGNsYXNzIFJhY2tBcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIsIHBvb2wpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgdGhpcy5vblJhY2tBZGRfID0gdGhpcy5vblJhY2tBZGRfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUmFja1JlbW92ZV8gPSB0aGlzLm9uUmFja1JlbW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25SYWNrSW5wdXRDaGFuZ2VfID0gdGhpcy5vblJhY2tJbnB1dENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25SYWNrTW9uaXRvclVwZGF0ZV8gPSB0aGlzLm9uUmFja01vbml0b3JVcGRhdGVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuYXBpU2V0XyA9IG5ldyBOZXN0ZWRPcmRlcmVkU2V0KGZpbmRTdWJCbGFkZUFwaVNldCk7XG4gICAgICAgICAgICB0aGlzLnBvb2xfID0gcG9vbDtcbiAgICAgICAgICAgIGNvbnN0IHJhY2sgPSB0aGlzLmNvbnRyb2xsZXJfLnJhY2s7XG4gICAgICAgICAgICByYWNrLmVtaXR0ZXIub24oJ2FkZCcsIHRoaXMub25SYWNrQWRkXyk7XG4gICAgICAgICAgICByYWNrLmVtaXR0ZXIub24oJ3JlbW92ZScsIHRoaXMub25SYWNrUmVtb3ZlXyk7XG4gICAgICAgICAgICByYWNrLmVtaXR0ZXIub24oJ2lucHV0Y2hhbmdlJywgdGhpcy5vblJhY2tJbnB1dENoYW5nZV8pO1xuICAgICAgICAgICAgcmFjay5lbWl0dGVyLm9uKCdtb25pdG9ydXBkYXRlJywgdGhpcy5vblJhY2tNb25pdG9yVXBkYXRlXyk7XG4gICAgICAgICAgICByYWNrLmNoaWxkcmVuLmZvckVhY2goKGJjKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRVcEFwaV8oYmMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGNoaWxkcmVuKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucmFjay5jaGlsZHJlbi5tYXAoKGJjKSA9PiBnZXRBcGlCeUNvbnRyb2xsZXIodGhpcy5hcGlTZXRfLCBiYykpO1xuICAgICAgICB9XG4gICAgICAgIGFkZElucHV0KG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBvcHRfcGFyYW1zICE9PSBudWxsICYmIG9wdF9wYXJhbXMgIT09IHZvaWQgMCA/IG9wdF9wYXJhbXMgOiB7fTtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuY29udHJvbGxlcl8udmlldy5lbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBiYyA9IHRoaXMucG9vbF8uY3JlYXRlSW5wdXQoZG9jLCBjcmVhdGVCaW5kaW5nVGFyZ2V0KG9iamVjdCwga2V5LCBwYXJhbXMucHJlc2V0S2V5KSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IG5ldyBJbnB1dEJpbmRpbmdBcGkoYmMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKGFwaSwgcGFyYW1zLmluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBhZGRNb25pdG9yKG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBvcHRfcGFyYW1zICE9PSBudWxsICYmIG9wdF9wYXJhbXMgIT09IHZvaWQgMCA/IG9wdF9wYXJhbXMgOiB7fTtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuY29udHJvbGxlcl8udmlldy5lbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBiYyA9IHRoaXMucG9vbF8uY3JlYXRlTW9uaXRvcihkb2MsIGNyZWF0ZUJpbmRpbmdUYXJnZXQob2JqZWN0LCBrZXkpLCBwYXJhbXMpO1xuICAgICAgICAgICAgY29uc3QgYXBpID0gbmV3IE1vbml0b3JCaW5kaW5nQXBpKGJjKTtcbiAgICAgICAgICAgIHJldHVybiBmb3JjZUNhc3QodGhpcy5hZGQoYXBpLCBwYXJhbXMuaW5kZXgpKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRGb2xkZXIocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gYWRkRm9sZGVyQXNCbGFkZSh0aGlzLCBwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZEJ1dHRvbihwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhZGRCdXR0b25Bc0JsYWRlKHRoaXMsIHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkU2VwYXJhdG9yKG9wdF9wYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhZGRTZXBhcmF0b3JBc0JsYWRlKHRoaXMsIG9wdF9wYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFRhYihwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhZGRUYWJBc0JsYWRlKHRoaXMsIHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkKGFwaSwgb3B0X2luZGV4KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnJhY2suYWRkKGFwaS5jb250cm9sbGVyXywgb3B0X2luZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IGdhcGkgPSB0aGlzLmFwaVNldF8uZmluZCgoYSkgPT4gYS5jb250cm9sbGVyXyA9PT0gYXBpLmNvbnRyb2xsZXJfKTtcbiAgICAgICAgICAgIGlmIChnYXBpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcGlTZXRfLnJlbW92ZShnYXBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXBpU2V0Xy5hZGQoYXBpKTtcbiAgICAgICAgICAgIHJldHVybiBhcGk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlKGFwaSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5yYWNrLnJlbW92ZShhcGkuY29udHJvbGxlcl8pO1xuICAgICAgICB9XG4gICAgICAgIGFkZEJsYWRlKHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5jb250cm9sbGVyXy52aWV3LmVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gdGhpcy5wb29sXy5jcmVhdGVCbGFkZShkb2MsIHBhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCBhcGkgPSB0aGlzLnBvb2xfLmNyZWF0ZUJsYWRlQXBpKGJjKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZChhcGksIHBhcmFtcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaCA9IGhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8ub24oZXZlbnROYW1lLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICBiaChldi5ldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHNldFVwQXBpXyhiYykge1xuICAgICAgICAgICAgY29uc3QgYXBpID0gdGhpcy5hcGlTZXRfLmZpbmQoKGFwaSkgPT4gYXBpLmNvbnRyb2xsZXJfID09PSBiYyk7XG4gICAgICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBpU2V0Xy5hZGQodGhpcy5wb29sXy5jcmVhdGVCbGFkZUFwaShiYykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uUmFja0FkZF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXBBcGlfKGV2LmJsYWRlQ29udHJvbGxlcik7XG4gICAgICAgIH1cbiAgICAgICAgb25SYWNrUmVtb3ZlXyhldikge1xuICAgICAgICAgICAgaWYgKGV2LmlzUm9vdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFwaSA9IGdldEFwaUJ5Q29udHJvbGxlcih0aGlzLmFwaVNldF8sIGV2LmJsYWRlQ29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5hcGlTZXRfLnJlbW92ZShhcGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uUmFja0lucHV0Q2hhbmdlXyhldikge1xuICAgICAgICAgICAgY29uc3QgYmMgPSBldi5ibGFkZUNvbnRyb2xsZXI7XG4gICAgICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBJbnB1dEJpbmRpbmdDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXBpID0gZ2V0QXBpQnlDb250cm9sbGVyKHRoaXMuYXBpU2V0XywgYmMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpbmRpbmcgPSBiYy5iaW5kaW5nO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwQ2hhbmdlRXZlbnQoYXBpLCBmb3JjZUNhc3QoYmluZGluZy50YXJnZXQucmVhZCgpKSwgYmluZGluZy50YXJnZXQucHJlc2V0S2V5LCBldi5vcHRpb25zLmxhc3QpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYmMgaW5zdGFuY2VvZiBWYWx1ZUJsYWRlQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFwaSA9IGdldEFwaUJ5Q29udHJvbGxlcih0aGlzLmFwaVNldF8sIGJjKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcENoYW5nZUV2ZW50KGFwaSwgYmMudmFsdWUucmF3VmFsdWUsIHVuZGVmaW5lZCwgZXYub3B0aW9ucy5sYXN0KSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblJhY2tNb25pdG9yVXBkYXRlXyhldikge1xuICAgICAgICAgICAgaWYgKCEoZXYuYmxhZGVDb250cm9sbGVyIGluc3RhbmNlb2YgTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IGdldEFwaUJ5Q29udHJvbGxlcih0aGlzLmFwaVNldF8sIGV2LmJsYWRlQ29udHJvbGxlcik7XG4gICAgICAgICAgICBjb25zdCBiaW5kaW5nID0gZXYuYmxhZGVDb250cm9sbGVyLmJpbmRpbmc7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ3VwZGF0ZScsIHtcbiAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwVXBkYXRlRXZlbnQoYXBpLCBmb3JjZUNhc3QoYmluZGluZy50YXJnZXQucmVhZCgpKSwgYmluZGluZy50YXJnZXQucHJlc2V0S2V5KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgRm9sZGVyQXBpIGV4dGVuZHMgUmFja0xpa2VBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyLCBwb29sKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyLCBuZXcgUmFja0FwaShjb250cm9sbGVyLnJhY2tDb250cm9sbGVyLCBwb29sKSk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8uZm9sZGFibGVcbiAgICAgICAgICAgICAgICAudmFsdWUoJ2V4cGFuZGVkJylcbiAgICAgICAgICAgICAgICAuZW1pdHRlci5vbignY2hhbmdlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdmb2xkJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwRm9sZEV2ZW50KHRoaXMsIGV2LnNlbmRlci5yYXdWYWx1ZSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmFja0FwaV8ub24oJ2NoYW5nZScsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogZXYsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmFja0FwaV8ub24oJ3VwZGF0ZScsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgndXBkYXRlJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogZXYsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZXhwYW5kZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5mb2xkYWJsZS5nZXQoJ2V4cGFuZGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGV4cGFuZGVkKGV4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLmZvbGRhYmxlLnNldCgnZXhwYW5kZWQnLCBleHBhbmRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHRpdGxlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuZ2V0KCd0aXRsZScpO1xuICAgICAgICB9XG4gICAgICAgIHNldCB0aXRsZSh0aXRsZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wcm9wcy5zZXQoJ3RpdGxlJywgdGl0bGUpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBjaGlsZHJlbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmNoaWxkcmVuO1xuICAgICAgICB9XG4gICAgICAgIGFkZElucHV0KG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRJbnB1dChvYmplY3QsIGtleSwgb3B0X3BhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkTW9uaXRvcihvYmplY3QsIGtleSwgb3B0X3BhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkTW9uaXRvcihvYmplY3QsIGtleSwgb3B0X3BhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkRm9sZGVyKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkRm9sZGVyKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkQnV0dG9uKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkQnV0dG9uKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkU2VwYXJhdG9yKG9wdF9wYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZFNlcGFyYXRvcihvcHRfcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRUYWIocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRUYWIocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGQoYXBpLCBvcHRfaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZChhcGksIG9wdF9pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlKGFwaSkge1xuICAgICAgICAgICAgdGhpcy5yYWNrQXBpXy5yZW1vdmUoYXBpKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRCbGFkZShwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZEJsYWRlKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaCA9IGhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8ub24oZXZlbnROYW1lLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICBiaChldi5ldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUmFja0xpa2VDb250cm9sbGVyIGV4dGVuZHMgQmxhZGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGNvbmZpZy5ibGFkZSxcbiAgICAgICAgICAgICAgICB2aWV3OiBjb25maWcudmlldyxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy5yYWNrQ29udHJvbGxlci52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmFja0NvbnRyb2xsZXIgPSBjb25maWcucmFja0NvbnRyb2xsZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBQbGFpblZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gQ2xhc3NOYW1lKGNvbmZpZy52aWV3TmFtZSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmluZElucHV0QmluZGluZ0NvbnRyb2xsZXIoYmNzLCBiKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmNzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IGJjc1tpXTtcbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIElucHV0QmluZGluZ0NvbnRyb2xsZXIgJiYgYmMuYmluZGluZyA9PT0gYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZE1vbml0b3JCaW5kaW5nQ29udHJvbGxlcihiY3MsIGIpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gYmNzW2ldO1xuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgTW9uaXRvckJpbmRpbmdDb250cm9sbGVyICYmIGJjLmJpbmRpbmcgPT09IGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRWYWx1ZUJsYWRlQ29udHJvbGxlcihiY3MsIHYpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gYmNzW2ldO1xuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgVmFsdWVCbGFkZUNvbnRyb2xsZXIgJiYgYmMudmFsdWUgPT09IHYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRTdWJSYWNrKGJjKSB7XG4gICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIFJhY2tDb250cm9sbGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gYmMucmFjaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBSYWNrTGlrZUNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBiYy5yYWNrQ29udHJvbGxlci5yYWNrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kU3ViQmxhZGVDb250cm9sbGVyU2V0KGJjKSB7XG4gICAgICAgIGNvbnN0IHJhY2sgPSBmaW5kU3ViUmFjayhiYyk7XG4gICAgICAgIHJldHVybiByYWNrID8gcmFja1snYmNTZXRfJ10gOiBudWxsO1xuICAgIH1cbiAgICBjbGFzcyBCbGFkZVJhY2sge1xuICAgICAgICBjb25zdHJ1Y3RvcihibGFkZSkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdGhpcy5vbkJsYWRlUG9zaXRpb25zQ2hhbmdlXyA9IHRoaXMub25CbGFkZVBvc2l0aW9uc0NoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25TZXRBZGRfID0gdGhpcy5vblNldEFkZF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25TZXRSZW1vdmVfID0gdGhpcy5vblNldFJlbW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGlsZERpc3Bvc2VfID0gdGhpcy5vbkNoaWxkRGlzcG9zZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGlsZFBvc2l0aW9uc0NoYW5nZV8gPSB0aGlzLm9uQ2hpbGRQb3NpdGlvbnNDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hpbGRJbnB1dENoYW5nZV8gPSB0aGlzLm9uQ2hpbGRJbnB1dENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGlsZE1vbml0b3JVcGRhdGVfID0gdGhpcy5vbkNoaWxkTW9uaXRvclVwZGF0ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGlsZFZhbHVlQ2hhbmdlXyA9IHRoaXMub25DaGlsZFZhbHVlQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkNoaWxkVmlld1Byb3BzQ2hhbmdlXyA9IHRoaXMub25DaGlsZFZpZXdQcm9wc0NoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25EZXNjZW5kYW50TGF5b3V0XyA9IHRoaXMub25EZXNjZW5kYW50TGF5b3V0Xy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkRlc2NlbmRhbnRJbnB1dENoYW5nZV8gPSB0aGlzLm9uRGVzY2VuZGFudElucHV0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkRlc2NlbmRhbnRNb25pdG9yVXBkYXRlXyA9XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRlc2NlbmRhbnRNb25pdG9yVXBkYXRlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuYmxhZGVfID0gYmxhZGUgIT09IG51bGwgJiYgYmxhZGUgIT09IHZvaWQgMCA/IGJsYWRlIDogbnVsbDtcbiAgICAgICAgICAgIChfYSA9IHRoaXMuYmxhZGVfKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUoJ3Bvc2l0aW9ucycpLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25CbGFkZVBvc2l0aW9uc0NoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy5iY1NldF8gPSBuZXcgTmVzdGVkT3JkZXJlZFNldChmaW5kU3ViQmxhZGVDb250cm9sbGVyU2V0KTtcbiAgICAgICAgICAgIHRoaXMuYmNTZXRfLmVtaXR0ZXIub24oJ2FkZCcsIHRoaXMub25TZXRBZGRfKTtcbiAgICAgICAgICAgIHRoaXMuYmNTZXRfLmVtaXR0ZXIub24oJ3JlbW92ZScsIHRoaXMub25TZXRSZW1vdmVfKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgY2hpbGRyZW4oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5iY1NldF8uaXRlbXM7XG4gICAgICAgIH1cbiAgICAgICAgYWRkKGJjLCBvcHRfaW5kZXgpIHtcbiAgICAgICAgICAgIGlmIChiYy5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBiYy5wYXJlbnQucmVtb3ZlKGJjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJjWydwYXJlbnRfJ10gPSB0aGlzO1xuICAgICAgICAgICAgdGhpcy5iY1NldF8uYWRkKGJjLCBvcHRfaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShiYykge1xuICAgICAgICAgICAgYmNbJ3BhcmVudF8nXSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmJjU2V0Xy5yZW1vdmUoYmMpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmQoY29udHJvbGxlckNsYXNzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9yY2VDYXN0KHRoaXMuYmNTZXRfLmFsbEl0ZW1zKCkuZmlsdGVyKChiYykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYyBpbnN0YW5jZW9mIGNvbnRyb2xsZXJDbGFzcztcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBvblNldEFkZF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zXygpO1xuICAgICAgICAgICAgY29uc3QgaXNSb290ID0gZXYudGFyZ2V0ID09PSBldi5yb290O1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2FkZCcsIHtcbiAgICAgICAgICAgICAgICBibGFkZUNvbnRyb2xsZXI6IGV2Lml0ZW0sXG4gICAgICAgICAgICAgICAgaW5kZXg6IGV2LmluZGV4LFxuICAgICAgICAgICAgICAgIGlzUm9vdDogaXNSb290LFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFpc1Jvb3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBiYyA9IGV2Lml0ZW07XG4gICAgICAgICAgICBiYy52aWV3UHJvcHMuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoaWxkVmlld1Byb3BzQ2hhbmdlXyk7XG4gICAgICAgICAgICBiYy5ibGFkZVxuICAgICAgICAgICAgICAgIC52YWx1ZSgncG9zaXRpb25zJylcbiAgICAgICAgICAgICAgICAuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoaWxkUG9zaXRpb25zQ2hhbmdlXyk7XG4gICAgICAgICAgICBiYy52aWV3UHJvcHMuaGFuZGxlRGlzcG9zZSh0aGlzLm9uQ2hpbGREaXNwb3NlXyk7XG4gICAgICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBJbnB1dEJpbmRpbmdDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgYmMuYmluZGluZy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hpbGRJbnB1dENoYW5nZV8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYmMgaW5zdGFuY2VvZiBNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBiYy5iaW5kaW5nLmVtaXR0ZXIub24oJ3VwZGF0ZScsIHRoaXMub25DaGlsZE1vbml0b3JVcGRhdGVfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGJjIGluc3RhbmNlb2YgVmFsdWVCbGFkZUNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBiYy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hpbGRWYWx1ZUNoYW5nZV8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFjayA9IGZpbmRTdWJSYWNrKGJjKTtcbiAgICAgICAgICAgICAgICBpZiAocmFjaykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbWl0dGVyID0gcmFjay5lbWl0dGVyO1xuICAgICAgICAgICAgICAgICAgICBlbWl0dGVyLm9uKCdsYXlvdXQnLCB0aGlzLm9uRGVzY2VuZGFudExheW91dF8pO1xuICAgICAgICAgICAgICAgICAgICBlbWl0dGVyLm9uKCdpbnB1dGNoYW5nZScsIHRoaXMub25EZXNjZW5kYW50SW5wdXRDaGFuZ2VfKTtcbiAgICAgICAgICAgICAgICAgICAgZW1pdHRlci5vbignbW9uaXRvcnVwZGF0ZScsIHRoaXMub25EZXNjZW5kYW50TW9uaXRvclVwZGF0ZV8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblNldFJlbW92ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zXygpO1xuICAgICAgICAgICAgY29uc3QgaXNSb290ID0gZXYudGFyZ2V0ID09PSBldi5yb290O1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ3JlbW92ZScsIHtcbiAgICAgICAgICAgICAgICBibGFkZUNvbnRyb2xsZXI6IGV2Lml0ZW0sXG4gICAgICAgICAgICAgICAgaXNSb290OiBpc1Jvb3QsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWlzUm9vdCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJjID0gZXYuaXRlbTtcbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIElucHV0QmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBiYy5iaW5kaW5nLmVtaXR0ZXIub2ZmKCdjaGFuZ2UnLCB0aGlzLm9uQ2hpbGRJbnB1dENoYW5nZV8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYmMgaW5zdGFuY2VvZiBNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBiYy5iaW5kaW5nLmVtaXR0ZXIub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQ2hpbGRNb25pdG9yVXBkYXRlXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChiYyBpbnN0YW5jZW9mIFZhbHVlQmxhZGVDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgYmMudmFsdWUuZW1pdHRlci5vZmYoJ2NoYW5nZScsIHRoaXMub25DaGlsZFZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYWNrID0gZmluZFN1YlJhY2soYmMpO1xuICAgICAgICAgICAgICAgIGlmIChyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtaXR0ZXIgPSByYWNrLmVtaXR0ZXI7XG4gICAgICAgICAgICAgICAgICAgIGVtaXR0ZXIub2ZmKCdsYXlvdXQnLCB0aGlzLm9uRGVzY2VuZGFudExheW91dF8pO1xuICAgICAgICAgICAgICAgICAgICBlbWl0dGVyLm9mZignaW5wdXRjaGFuZ2UnLCB0aGlzLm9uRGVzY2VuZGFudElucHV0Q2hhbmdlXyk7XG4gICAgICAgICAgICAgICAgICAgIGVtaXR0ZXIub2ZmKCdtb25pdG9ydXBkYXRlJywgdGhpcy5vbkRlc2NlbmRhbnRNb25pdG9yVXBkYXRlXyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVBvc2l0aW9uc18oKSB7XG4gICAgICAgICAgICBjb25zdCB2aXNpYmxlSXRlbXMgPSB0aGlzLmJjU2V0Xy5pdGVtcy5maWx0ZXIoKGJjKSA9PiAhYmMudmlld1Byb3BzLmdldCgnaGlkZGVuJykpO1xuICAgICAgICAgICAgY29uc3QgZmlyc3RWaXNpYmxlSXRlbSA9IHZpc2libGVJdGVtc1swXTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RWaXNpYmxlSXRlbSA9IHZpc2libGVJdGVtc1t2aXNpYmxlSXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICB0aGlzLmJjU2V0Xy5pdGVtcy5mb3JFYWNoKChiYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBzID0gW107XG4gICAgICAgICAgICAgICAgaWYgKGJjID09PSBmaXJzdFZpc2libGVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHBzLnB1c2goJ2ZpcnN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5ibGFkZV8gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmxhZGVfLmdldCgncG9zaXRpb25zJykuaW5jbHVkZXMoJ3ZlcnlmaXJzdCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcy5wdXNoKCd2ZXJ5Zmlyc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYmMgPT09IGxhc3RWaXNpYmxlSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBwcy5wdXNoKCdsYXN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5ibGFkZV8gfHwgdGhpcy5ibGFkZV8uZ2V0KCdwb3NpdGlvbnMnKS5pbmNsdWRlcygndmVyeWxhc3QnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHMucHVzaCgndmVyeWxhc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBiYy5ibGFkZS5zZXQoJ3Bvc2l0aW9ucycsIHBzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hpbGRQb3NpdGlvbnNDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnNfKCk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnbGF5b3V0Jywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hpbGRWaWV3UHJvcHNDaGFuZ2VfKF9ldikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnNfKCk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnbGF5b3V0Jywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hpbGREaXNwb3NlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc3Bvc2VkVWNzID0gdGhpcy5iY1NldF8uaXRlbXMuZmlsdGVyKChiYykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYy52aWV3UHJvcHMuZ2V0KCdkaXNwb3NlZCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkaXNwb3NlZFVjcy5mb3JFYWNoKChiYykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYmNTZXRfLnJlbW92ZShiYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkNoaWxkSW5wdXRDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IGZpbmRJbnB1dEJpbmRpbmdDb250cm9sbGVyKHRoaXMuZmluZChJbnB1dEJpbmRpbmdDb250cm9sbGVyKSwgZXYuc2VuZGVyKTtcbiAgICAgICAgICAgIGlmICghYmMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnaW5wdXRjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgYmxhZGVDb250cm9sbGVyOiBiYyxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBldi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hpbGRNb25pdG9yVXBkYXRlXyhldikge1xuICAgICAgICAgICAgY29uc3QgYmMgPSBmaW5kTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKHRoaXMuZmluZChNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIpLCBldi5zZW5kZXIpO1xuICAgICAgICAgICAgaWYgKCFiYykge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdtb25pdG9ydXBkYXRlJywge1xuICAgICAgICAgICAgICAgIGJsYWRlQ29udHJvbGxlcjogYmMsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGlsZFZhbHVlQ2hhbmdlXyhldikge1xuICAgICAgICAgICAgY29uc3QgYmMgPSBmaW5kVmFsdWVCbGFkZUNvbnRyb2xsZXIodGhpcy5maW5kKFZhbHVlQmxhZGVDb250cm9sbGVyKSwgZXYuc2VuZGVyKTtcbiAgICAgICAgICAgIGlmICghYmMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnaW5wdXRjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgYmxhZGVDb250cm9sbGVyOiBiYyxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBldi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uRGVzY2VuZGFudExheW91dF8oXykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnNfKCk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnbGF5b3V0Jywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uRGVzY2VuZGFudElucHV0Q2hhbmdlXyhldikge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2lucHV0Y2hhbmdlJywge1xuICAgICAgICAgICAgICAgIGJsYWRlQ29udHJvbGxlcjogZXYuYmxhZGVDb250cm9sbGVyLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV2Lm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25EZXNjZW5kYW50TW9uaXRvclVwZGF0ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdtb25pdG9ydXBkYXRlJywge1xuICAgICAgICAgICAgICAgIGJsYWRlQ29udHJvbGxlcjogZXYuYmxhZGVDb250cm9sbGVyLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uQmxhZGVQb3NpdGlvbnNDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnNfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBSYWNrQ29udHJvbGxlciBleHRlbmRzIEJsYWRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBzdXBlcihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZyksIHsgdmlldzogbmV3IFBsYWluVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICAgICAgdmlld05hbWU6ICdicmsnLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSkgfSkpO1xuICAgICAgICAgICAgdGhpcy5vblJhY2tBZGRfID0gdGhpcy5vblJhY2tBZGRfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUmFja1JlbW92ZV8gPSB0aGlzLm9uUmFja1JlbW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IHJhY2sgPSBuZXcgQmxhZGVSYWNrKGNvbmZpZy5yb290ID8gdW5kZWZpbmVkIDogY29uZmlnLmJsYWRlKTtcbiAgICAgICAgICAgIHJhY2suZW1pdHRlci5vbignYWRkJywgdGhpcy5vblJhY2tBZGRfKTtcbiAgICAgICAgICAgIHJhY2suZW1pdHRlci5vbigncmVtb3ZlJywgdGhpcy5vblJhY2tSZW1vdmVfKTtcbiAgICAgICAgICAgIHRoaXMucmFjayA9IHJhY2s7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcy5oYW5kbGVEaXNwb3NlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5yYWNrLmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJjID0gdGhpcy5yYWNrLmNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgICAgICAgICBiYy52aWV3UHJvcHMuc2V0KCdkaXNwb3NlZCcsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUmFja0FkZF8oZXYpIHtcbiAgICAgICAgICAgIGlmICghZXYuaXNSb290KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5zZXJ0RWxlbWVudEF0KHRoaXMudmlldy5lbGVtZW50LCBldi5ibGFkZUNvbnRyb2xsZXIudmlldy5lbGVtZW50LCBldi5pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgb25SYWNrUmVtb3ZlXyhldikge1xuICAgICAgICAgICAgaWYgKCFldi5pc1Jvb3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW1vdmVFbGVtZW50KGV2LmJsYWRlQ29udHJvbGxlci52aWV3LmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYmxhZGVDb250YWluZXJDbGFzc05hbWUgPSBDbGFzc05hbWUoJ2NudCcpO1xuXG4gICAgY2xhc3MgRm9sZGVyVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB0aGlzLmNsYXNzTmFtZV8gPSBDbGFzc05hbWUoKF9hID0gY29uZmlnLnZpZXdOYW1lKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnZmxkJyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZV8oKSwgYmxhZGVDb250YWluZXJDbGFzc05hbWUoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5mb2xkYWJsZV8gPSBjb25maWcuZm9sZGFibGU7XG4gICAgICAgICAgICB0aGlzLmZvbGRhYmxlXy5iaW5kRXhwYW5kZWRDbGFzcyh0aGlzLmVsZW1lbnQsIHRoaXMuY2xhc3NOYW1lXyh1bmRlZmluZWQsICdleHBhbmRlZCcpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcCh0aGlzLmZvbGRhYmxlXywgJ2NvbXBsZXRlZCcsIHZhbHVlVG9DbGFzc05hbWUodGhpcy5lbGVtZW50LCB0aGlzLmNsYXNzTmFtZV8odW5kZWZpbmVkLCAnY3BsJykpKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgICAgICBidXR0b25FbGVtLmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc05hbWVfKCdiJykpO1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKGNvbmZpZy5wcm9wcywgJ3RpdGxlJywgKHRpdGxlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzRW1wdHkodGl0bGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NOYW1lXyh1bmRlZmluZWQsICdub3QnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZSh0aGlzLmNsYXNzTmFtZV8odW5kZWZpbmVkLCAnbm90JykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoYnV0dG9uRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoYnV0dG9uRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQgPSBidXR0b25FbGVtO1xuICAgICAgICAgICAgY29uc3QgdGl0bGVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGl0bGVFbGVtLmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc05hbWVfKCd0JykpO1xuICAgICAgICAgICAgYmluZFZhbHVlVG9UZXh0Q29udGVudChjb25maWcucHJvcHMudmFsdWUoJ3RpdGxlJyksIHRpdGxlRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQuYXBwZW5kQ2hpbGQodGl0bGVFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudGl0bGVFbGVtZW50ID0gdGl0bGVFbGVtO1xuICAgICAgICAgICAgY29uc3QgbWFya0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBtYXJrRWxlbS5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NOYW1lXygnbScpKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudC5hcHBlbmRDaGlsZChtYXJrRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJFbGVtID0gY29uZmlnLmNvbnRhaW5lckVsZW1lbnQ7XG4gICAgICAgICAgICBjb250YWluZXJFbGVtLmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc05hbWVfKCdjJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGNvbnRhaW5lckVsZW0pO1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXJFbGVtZW50ID0gY29udGFpbmVyRWxlbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEZvbGRlckNvbnRyb2xsZXIgZXh0ZW5kcyBSYWNrTGlrZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgZm9sZGFibGUgPSBGb2xkYWJsZS5jcmVhdGUoKF9hID0gY29uZmlnLmV4cGFuZGVkKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0cnVlKTtcbiAgICAgICAgICAgIGNvbnN0IHJjID0gbmV3IFJhY2tDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGJsYWRlOiBjb25maWcuYmxhZGUsXG4gICAgICAgICAgICAgICAgcm9vdDogY29uZmlnLnJvb3QsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzdXBlcihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZyksIHsgcmFja0NvbnRyb2xsZXI6IHJjLCB2aWV3OiBuZXcgRm9sZGVyVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyRWxlbWVudDogcmMudmlldy5lbGVtZW50LFxuICAgICAgICAgICAgICAgICAgICBmb2xkYWJsZTogZm9sZGFibGUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBjb25maWcucHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdOYW1lOiBjb25maWcucm9vdCA/ICdyb3QnIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSkgfSkpO1xuICAgICAgICAgICAgdGhpcy5vblRpdGxlQ2xpY2tfID0gdGhpcy5vblRpdGxlQ2xpY2tfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnByb3BzID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy5mb2xkYWJsZSA9IGZvbGRhYmxlO1xuICAgICAgICAgICAgYmluZEZvbGRhYmxlKHRoaXMuZm9sZGFibGUsIHRoaXMudmlldy5jb250YWluZXJFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMucmFja0NvbnRyb2xsZXIucmFjay5lbWl0dGVyLm9uKCdhZGQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb2xkYWJsZS5jbGVhblVwVHJhbnNpdGlvbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJhY2tDb250cm9sbGVyLnJhY2suZW1pdHRlci5vbigncmVtb3ZlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZm9sZGFibGUuY2xlYW5VcFRyYW5zaXRpb24oKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmJ1dHRvbkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uVGl0bGVDbGlja18pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBkb2N1bWVudCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpZXcuZWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgICAgICB9XG4gICAgICAgIG9uVGl0bGVDbGlja18oKSB7XG4gICAgICAgICAgICB0aGlzLmZvbGRhYmxlLnNldCgnZXhwYW5kZWQnLCAhdGhpcy5mb2xkYWJsZS5nZXQoJ2V4cGFuZGVkJykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgRm9sZGVyQmxhZGVQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnZm9sZGVyJyxcbiAgICAgICAgdHlwZTogJ2JsYWRlJyxcbiAgICAgICAgYWNjZXB0KHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogcC5yZXF1aXJlZC5zdHJpbmcsXG4gICAgICAgICAgICAgICAgdmlldzogcC5yZXF1aXJlZC5jb25zdGFudCgnZm9sZGVyJyksXG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IHAub3B0aW9uYWwuYm9vbGVhbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA/IHsgcGFyYW1zOiByZXN1bHQgfSA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXIoYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBGb2xkZXJDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBibGFkZTogYXJncy5ibGFkZSxcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogYXJncy5wYXJhbXMuZXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogYXJncy5wYXJhbXMudGl0bGUsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBhcGkoYXJncykge1xuICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyIGluc3RhbmNlb2YgRm9sZGVyQ29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgRm9sZGVyQXBpKGFyZ3MuY29udHJvbGxlciwgYXJncy5wb29sKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xhc3MgTGFiZWxlZFZhbHVlQ29udHJvbGxlciBleHRlbmRzIFZhbHVlQmxhZGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdQcm9wcyA9IGNvbmZpZy52YWx1ZUNvbnRyb2xsZXIudmlld1Byb3BzO1xuICAgICAgICAgICAgc3VwZXIoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjb25maWcpLCB7IHZhbHVlOiBjb25maWcudmFsdWVDb250cm9sbGVyLnZhbHVlLCB2aWV3OiBuZXcgTGFiZWxWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgICAgICBwcm9wczogY29uZmlnLnByb3BzLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KSwgdmlld1Byb3BzOiB2aWV3UHJvcHMgfSkpO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMudmFsdWVDb250cm9sbGVyID0gY29uZmlnLnZhbHVlQ29udHJvbGxlcjtcbiAgICAgICAgICAgIHRoaXMudmlldy52YWx1ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy52YWx1ZUNvbnRyb2xsZXIudmlldy5lbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFNlcGFyYXRvckFwaSBleHRlbmRzIEJsYWRlQXBpIHtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkbiA9IENsYXNzTmFtZSgnc3ByJyk7XG4gICAgY2xhc3MgU2VwYXJhdG9yVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbigpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBockVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnaHInKTtcbiAgICAgICAgICAgIGhyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRuKCdyJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGhyRWxlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBTZXBhcmF0b3JDb250cm9sbGVyIGV4dGVuZHMgQmxhZGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHN1cGVyKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnKSwgeyB2aWV3OiBuZXcgU2VwYXJhdG9yVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pIH0pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IFNlcGFyYXRvckJsYWRlUGx1Z2luID0ge1xuICAgICAgICBpZDogJ3NlcGFyYXRvcicsXG4gICAgICAgIHR5cGU6ICdibGFkZScsXG4gICAgICAgIGFjY2VwdChwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgdmlldzogcC5yZXF1aXJlZC5jb25zdGFudCgnc2VwYXJhdG9yJyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyB7IHBhcmFtczogcmVzdWx0IH0gOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyKGFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2VwYXJhdG9yQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGFyZ3MuYmxhZGUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBhcGkoYXJncykge1xuICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyIGluc3RhbmNlb2YgU2VwYXJhdG9yQ29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgU2VwYXJhdG9yQXBpKGFyZ3MuY29udHJvbGxlcik7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGNsYXNzTmFtZSRtID0gQ2xhc3NOYW1lKCcnKTtcbiAgICBmdW5jdGlvbiB2YWx1ZVRvTW9kaWZpZXIoZWxlbSwgbW9kaWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlVG9DbGFzc05hbWUoZWxlbSwgY2xhc3NOYW1lJG0odW5kZWZpbmVkLCBtb2RpZmllcikpO1xuICAgIH1cbiAgICBjbGFzcyBWaWV3UHJvcHMgZXh0ZW5kcyBWYWx1ZU1hcCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHZhbHVlTWFwKSB7XG4gICAgICAgICAgICBzdXBlcih2YWx1ZU1hcCk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGNyZWF0ZShvcHRfaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbFZhbHVlID0gb3B0X2luaXRpYWxWYWx1ZSAhPT0gbnVsbCAmJiBvcHRfaW5pdGlhbFZhbHVlICE9PSB2b2lkIDAgPyBvcHRfaW5pdGlhbFZhbHVlIDoge307XG4gICAgICAgICAgICBjb25zdCBjb3JlT2JqID0ge1xuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAoX2EgPSBpbml0aWFsVmFsdWUuZGlzYWJsZWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRpc3Bvc2VkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBoaWRkZW46IChfYiA9IGluaXRpYWxWYWx1ZS5oaWRkZW4pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGZhbHNlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGNvcmUgPSBWYWx1ZU1hcC5jcmVhdGVDb3JlKGNvcmVPYmopO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBWaWV3UHJvcHMoY29yZSk7XG4gICAgICAgIH1cbiAgICAgICAgYmluZENsYXNzTW9kaWZpZXJzKGVsZW0pIHtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcCh0aGlzLCAnZGlzYWJsZWQnLCB2YWx1ZVRvTW9kaWZpZXIoZWxlbSwgJ2Rpc2FibGVkJykpO1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKHRoaXMsICdoaWRkZW4nLCB2YWx1ZVRvTW9kaWZpZXIoZWxlbSwgJ2hpZGRlbicpKTtcbiAgICAgICAgfVxuICAgICAgICBiaW5kRGlzYWJsZWQodGFyZ2V0KSB7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAodGhpcywgJ2Rpc2FibGVkJywgKGRpc2FibGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBiaW5kVGFiSW5kZXgoZWxlbSkge1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKHRoaXMsICdkaXNhYmxlZCcsIChkaXNhYmxlZCkgPT4ge1xuICAgICAgICAgICAgICAgIGVsZW0udGFiSW5kZXggPSBkaXNhYmxlZCA/IC0xIDogMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZURpc3Bvc2UoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUoJ2Rpc3Bvc2VkJykuZW1pdHRlci5vbignY2hhbmdlJywgKGRpc3Bvc2VkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRpc3Bvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkbCA9IENsYXNzTmFtZSgndGJpJyk7XG4gICAgY2xhc3MgVGFiSXRlbVZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGwoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKGNvbmZpZy5wcm9wcywgJ3NlbGVjdGVkJywgKHNlbGVjdGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRsKHVuZGVmaW5lZCwgJ3NlbCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSRsKHVuZGVmaW5lZCwgJ3NlbCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgICAgICBidXR0b25FbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGwoJ2InKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmREaXNhYmxlZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudCA9IGJ1dHRvbkVsZW07XG4gICAgICAgICAgICBjb25zdCB0aXRsZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aXRsZUVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbCgndCcpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZVRvVGV4dENvbnRlbnQoY29uZmlnLnByb3BzLnZhbHVlKCd0aXRsZScpLCB0aXRsZUVsZW0pO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50LmFwcGVuZENoaWxkKHRpdGxlRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnRpdGxlRWxlbWVudCA9IHRpdGxlRWxlbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRhYkl0ZW1Db250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLm9uQ2xpY2tfID0gdGhpcy5vbkNsaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBUYWJJdGVtVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBwcm9wczogY29uZmlnLnByb3BzLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmJ1dHRvbkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uQ2xpY2tfKTtcbiAgICAgICAgfVxuICAgICAgICBvbkNsaWNrXygpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdjbGljaycsIHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRhYlBhZ2VDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25JdGVtQ2xpY2tfID0gdGhpcy5vbkl0ZW1DbGlja18uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuaWNfID0gbmV3IFRhYkl0ZW1Db250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIHByb3BzOiBjb25maWcuaXRlbVByb3BzLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogVmlld1Byb3BzLmNyZWF0ZSgpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmljXy5lbWl0dGVyLm9uKCdjbGljaycsIHRoaXMub25JdGVtQ2xpY2tfKTtcbiAgICAgICAgICAgIHRoaXMuY2NfID0gbmV3IFJhY2tDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGJsYWRlOiBjcmVhdGVCbGFkZSgpLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogVmlld1Byb3BzLmNyZWF0ZSgpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnByb3BzID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKHRoaXMucHJvcHMsICdzZWxlY3RlZCcsIChzZWxlY3RlZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbUNvbnRyb2xsZXIucHJvcHMuc2V0KCdzZWxlY3RlZCcsIHNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRDb250cm9sbGVyLnZpZXdQcm9wcy5zZXQoJ2hpZGRlbicsICFzZWxlY3RlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgaXRlbUNvbnRyb2xsZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pY187XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGNvbnRlbnRDb250cm9sbGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2NfO1xuICAgICAgICB9XG4gICAgICAgIG9uSXRlbUNsaWNrXygpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuc2V0KCdzZWxlY3RlZCcsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgVGFiUGFnZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIsIGNvbnRlbnRSYWNrQXBpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfID0gY29udHJvbGxlcjtcbiAgICAgICAgICAgIHRoaXMucmFja0FwaV8gPSBjb250ZW50UmFja0FwaTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdGl0bGUoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5jb250cm9sbGVyXy5pdGVtQ29udHJvbGxlci5wcm9wcy5nZXQoJ3RpdGxlJykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnO1xuICAgICAgICB9XG4gICAgICAgIHNldCB0aXRsZSh0aXRsZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5pdGVtQ29udHJvbGxlci5wcm9wcy5zZXQoJ3RpdGxlJywgdGl0bGUpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBzZWxlY3RlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLmdldCgnc2VsZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgc2VsZWN0ZWQoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuc2V0KCdzZWxlY3RlZCcsIHNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgY2hpbGRyZW4oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5jaGlsZHJlbjtcbiAgICAgICAgfVxuICAgICAgICBhZGRCdXR0b24ocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRCdXR0b24ocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRGb2xkZXIocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRGb2xkZXIocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRTZXBhcmF0b3Iob3B0X3BhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkU2VwYXJhdG9yKG9wdF9wYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFRhYihwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZFRhYihwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZChhcGksIG9wdF9pbmRleCkge1xuICAgICAgICAgICAgdGhpcy5yYWNrQXBpXy5hZGQoYXBpLCBvcHRfaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShhcGkpIHtcbiAgICAgICAgICAgIHRoaXMucmFja0FwaV8ucmVtb3ZlKGFwaSk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkSW5wdXQob2JqZWN0LCBrZXksIG9wdF9wYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZElucHV0KG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRNb25pdG9yKG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRNb25pdG9yKG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRCbGFkZShwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZEJsYWRlKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUYWJBcGkgZXh0ZW5kcyBSYWNrTGlrZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIsIHBvb2wpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIsIG5ldyBSYWNrQXBpKGNvbnRyb2xsZXIucmFja0NvbnRyb2xsZXIsIHBvb2wpKTtcbiAgICAgICAgICAgIHRoaXMub25QYWdlQWRkXyA9IHRoaXMub25QYWdlQWRkXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBhZ2VSZW1vdmVfID0gdGhpcy5vblBhZ2VSZW1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0XyA9IHRoaXMub25TZWxlY3RfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMucGFnZUFwaU1hcF8gPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICB0aGlzLnJhY2tBcGlfLm9uKCdjaGFuZ2UnLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IGV2LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJhY2tBcGlfLm9uKCd1cGRhdGUnLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ3VwZGF0ZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IGV2LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnRhYi5zZWxlY3RlZEluZGV4LmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25TZWxlY3RfKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucGFnZVNldC5lbWl0dGVyLm9uKCdhZGQnLCB0aGlzLm9uUGFnZUFkZF8pO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wYWdlU2V0LmVtaXR0ZXIub24oJ3JlbW92ZScsIHRoaXMub25QYWdlUmVtb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnBhZ2VTZXQuaXRlbXMuZm9yRWFjaCgocGMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFVwUGFnZUFwaV8ocGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHBhZ2VzKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucGFnZVNldC5pdGVtcy5tYXAoKHBjKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXBpID0gdGhpcy5wYWdlQXBpTWFwXy5nZXQocGMpO1xuICAgICAgICAgICAgICAgIGlmICghYXBpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFwaTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGFkZFBhZ2UocGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmNvbnRyb2xsZXJfLnZpZXcuZWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgcGMgPSBuZXcgVGFiUGFnZUNvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgaXRlbVByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogcGFyYW1zLnRpdGxlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLmFkZChwYywgcGFyYW1zLmluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IHRoaXMucGFnZUFwaU1hcF8uZ2V0KHBjKTtcbiAgICAgICAgICAgIGlmICghYXBpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFwaTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmVQYWdlKGluZGV4KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnJlbW92ZShpbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaCA9IGhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8ub24oZXZlbnROYW1lLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICBiaChldi5ldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHNldFVwUGFnZUFwaV8ocGMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJhY2tBcGkgPSB0aGlzLnJhY2tBcGlfWydhcGlTZXRfJ10uZmluZCgoYXBpKSA9PiBhcGkuY29udHJvbGxlcl8gPT09IHBjLmNvbnRlbnRDb250cm9sbGVyKTtcbiAgICAgICAgICAgIGlmICghcmFja0FwaSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IG5ldyBUYWJQYWdlQXBpKHBjLCByYWNrQXBpKTtcbiAgICAgICAgICAgIHRoaXMucGFnZUFwaU1hcF8uc2V0KHBjLCBhcGkpO1xuICAgICAgICB9XG4gICAgICAgIG9uUGFnZUFkZF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXBQYWdlQXBpXyhldi5pdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBvblBhZ2VSZW1vdmVfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBhcGkgPSB0aGlzLnBhZ2VBcGlNYXBfLmdldChldi5pdGVtKTtcbiAgICAgICAgICAgIGlmICghYXBpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wYWdlQXBpTWFwXy5kZWxldGUoZXYuaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgb25TZWxlY3RfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ3NlbGVjdCcsIHtcbiAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwVGFiU2VsZWN0RXZlbnQodGhpcywgZXYucmF3VmFsdWUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBJTkRFWF9OT1RfU0VMRUNURUQgPSAtMTtcbiAgICBjbGFzcyBUYWIge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHRoaXMub25JdGVtU2VsZWN0ZWRDaGFuZ2VfID0gdGhpcy5vbkl0ZW1TZWxlY3RlZENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1wdHkgPSBjcmVhdGVWYWx1ZSh0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IGNyZWF0ZVZhbHVlKElOREVYX05PVF9TRUxFQ1RFRCk7XG4gICAgICAgICAgICB0aGlzLml0ZW1zXyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGFkZChpdGVtLCBvcHRfaW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gb3B0X2luZGV4ICE9PSBudWxsICYmIG9wdF9pbmRleCAhPT0gdm9pZCAwID8gb3B0X2luZGV4IDogdGhpcy5pdGVtc18ubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5pdGVtc18uc3BsaWNlKGluZGV4LCAwLCBpdGVtKTtcbiAgICAgICAgICAgIGl0ZW0uZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkl0ZW1TZWxlY3RlZENoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy5rZWVwU2VsZWN0aW9uXygpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShpdGVtKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXRlbXNfLmluZGV4T2YoaXRlbSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pdGVtc18uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIGl0ZW0uZW1pdHRlci5vZmYoJ2NoYW5nZScsIHRoaXMub25JdGVtU2VsZWN0ZWRDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMua2VlcFNlbGVjdGlvbl8oKTtcbiAgICAgICAgfVxuICAgICAgICBrZWVwU2VsZWN0aW9uXygpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLml0ZW1zXy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXgucmF3VmFsdWUgPSBJTkRFWF9OT1RfU0VMRUNURUQ7XG4gICAgICAgICAgICAgICAgdGhpcy5lbXB0eS5yYXdWYWx1ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmlyc3RTZWxJbmRleCA9IHRoaXMuaXRlbXNfLmZpbmRJbmRleCgocykgPT4gcy5yYXdWYWx1ZSk7XG4gICAgICAgICAgICBpZiAoZmlyc3RTZWxJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zXy5mb3JFYWNoKChzLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHMucmF3VmFsdWUgPSBpID09PSAwO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleC5yYXdWYWx1ZSA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zXy5mb3JFYWNoKChzLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHMucmF3VmFsdWUgPSBpID09PSBmaXJzdFNlbEluZGV4O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleC5yYXdWYWx1ZSA9IGZpcnN0U2VsSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtcHR5LnJhd1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgb25JdGVtU2VsZWN0ZWRDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBpZiAoZXYucmF3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXRlbXNfLmZpbmRJbmRleCgocykgPT4gcyA9PT0gZXYuc2VuZGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zXy5mb3JFYWNoKChzLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHMucmF3VmFsdWUgPSBpID09PSBpbmRleDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXgucmF3VmFsdWUgPSBpbmRleDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMua2VlcFNlbGVjdGlvbl8oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRrID0gQ2xhc3NOYW1lKCd0YWInKTtcbiAgICBjbGFzcyBUYWJWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRrKCksIGJsYWRlQ29udGFpbmVyQ2xhc3NOYW1lKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZShjb25maWcuZW1wdHksIHZhbHVlVG9DbGFzc05hbWUodGhpcy5lbGVtZW50LCBjbGFzc05hbWUkayh1bmRlZmluZWQsICdub3AnKSkpO1xuICAgICAgICAgICAgY29uc3QgaXRlbXNFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgaXRlbXNFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGsoJ2knKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaXRlbXNFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuaXRlbXNFbGVtZW50ID0gaXRlbXNFbGVtO1xuICAgICAgICAgICAgY29uc3QgY29udGVudHNFbGVtID0gY29uZmlnLmNvbnRlbnRzRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnRlbnRzRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRrKCdjJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGNvbnRlbnRzRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmNvbnRlbnRzRWxlbWVudCA9IGNvbnRlbnRzRWxlbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRhYkNvbnRyb2xsZXIgZXh0ZW5kcyBSYWNrTGlrZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgY29uc3QgY3IgPSBuZXcgUmFja0NvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGNvbmZpZy5ibGFkZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IHRhYiA9IG5ldyBUYWIoKTtcbiAgICAgICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgICAgICBibGFkZTogY29uZmlnLmJsYWRlLFxuICAgICAgICAgICAgICAgIHJhY2tDb250cm9sbGVyOiBjcixcbiAgICAgICAgICAgICAgICB2aWV3OiBuZXcgVGFiVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudHNFbGVtZW50OiBjci52aWV3LmVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIGVtcHR5OiB0YWIuZW1wdHksXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5vblBhZ2VBZGRfID0gdGhpcy5vblBhZ2VBZGRfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUGFnZVJlbW92ZV8gPSB0aGlzLm9uUGFnZVJlbW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucGFnZVNldF8gPSBuZXcgTmVzdGVkT3JkZXJlZFNldCgoKSA9PiBudWxsKTtcbiAgICAgICAgICAgIHRoaXMucGFnZVNldF8uZW1pdHRlci5vbignYWRkJywgdGhpcy5vblBhZ2VBZGRfKTtcbiAgICAgICAgICAgIHRoaXMucGFnZVNldF8uZW1pdHRlci5vbigncmVtb3ZlJywgdGhpcy5vblBhZ2VSZW1vdmVfKTtcbiAgICAgICAgICAgIHRoaXMudGFiID0gdGFiO1xuICAgICAgICB9XG4gICAgICAgIGdldCBwYWdlU2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFnZVNldF87XG4gICAgICAgIH1cbiAgICAgICAgYWRkKHBjLCBvcHRfaW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMucGFnZVNldF8uYWRkKHBjLCBvcHRfaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShpbmRleCkge1xuICAgICAgICAgICAgdGhpcy5wYWdlU2V0Xy5yZW1vdmUodGhpcy5wYWdlU2V0Xy5pdGVtc1tpbmRleF0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUGFnZUFkZF8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHBjID0gZXYuaXRlbTtcbiAgICAgICAgICAgIGluc2VydEVsZW1lbnRBdCh0aGlzLnZpZXcuaXRlbXNFbGVtZW50LCBwYy5pdGVtQ29udHJvbGxlci52aWV3LmVsZW1lbnQsIGV2LmluZGV4KTtcbiAgICAgICAgICAgIHRoaXMucmFja0NvbnRyb2xsZXIucmFjay5hZGQocGMuY29udGVudENvbnRyb2xsZXIsIGV2LmluZGV4KTtcbiAgICAgICAgICAgIHRoaXMudGFiLmFkZChwYy5wcm9wcy52YWx1ZSgnc2VsZWN0ZWQnKSk7XG4gICAgICAgIH1cbiAgICAgICAgb25QYWdlUmVtb3ZlXyhldikge1xuICAgICAgICAgICAgY29uc3QgcGMgPSBldi5pdGVtO1xuICAgICAgICAgICAgcmVtb3ZlRWxlbWVudChwYy5pdGVtQ29udHJvbGxlci52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5yYWNrQ29udHJvbGxlci5yYWNrLnJlbW92ZShwYy5jb250ZW50Q29udHJvbGxlcik7XG4gICAgICAgICAgICB0aGlzLnRhYi5yZW1vdmUocGMucHJvcHMudmFsdWUoJ3NlbGVjdGVkJykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgVGFiQmxhZGVQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAndGFiJyxcbiAgICAgICAgdHlwZTogJ2JsYWRlJyxcbiAgICAgICAgYWNjZXB0KHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBwYWdlczogcC5yZXF1aXJlZC5hcnJheShwLnJlcXVpcmVkLm9iamVjdCh7IHRpdGxlOiBwLnJlcXVpcmVkLnN0cmluZyB9KSksXG4gICAgICAgICAgICAgICAgdmlldzogcC5yZXF1aXJlZC5jb25zdGFudCgndGFiJyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC5wYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHBhcmFtczogcmVzdWx0IH07XG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXIoYXJncykge1xuICAgICAgICAgICAgY29uc3QgYyA9IG5ldyBUYWJDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBibGFkZTogYXJncy5ibGFkZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcmdzLnBhcmFtcy5wYWdlcy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGMgPSBuZXcgVGFiUGFnZUNvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICBpdGVtUHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHAudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGMuYWRkKHBjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgIH0sXG4gICAgICAgIGFwaShhcmdzKSB7XG4gICAgICAgICAgICBpZiAoIShhcmdzLmNvbnRyb2xsZXIgaW5zdGFuY2VvZiBUYWJDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBUYWJBcGkoYXJncy5jb250cm9sbGVyLCBhcmdzLnBvb2wpO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVCbGFkZUNvbnRyb2xsZXIocGx1Z2luLCBhcmdzKSB7XG4gICAgICAgIGNvbnN0IGFjID0gcGx1Z2luLmFjY2VwdChhcmdzLnBhcmFtcyk7XG4gICAgICAgIGlmICghYWMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpc2FibGVkID0gUGFyYW1zUGFyc2Vycy5vcHRpb25hbC5ib29sZWFuKGFyZ3MucGFyYW1zWydkaXNhYmxlZCddKS52YWx1ZTtcbiAgICAgICAgY29uc3QgaGlkZGVuID0gUGFyYW1zUGFyc2Vycy5vcHRpb25hbC5ib29sZWFuKGFyZ3MucGFyYW1zWydoaWRkZW4nXSkudmFsdWU7XG4gICAgICAgIHJldHVybiBwbHVnaW4uY29udHJvbGxlcih7XG4gICAgICAgICAgICBibGFkZTogY3JlYXRlQmxhZGUoKSxcbiAgICAgICAgICAgIGRvY3VtZW50OiBhcmdzLmRvY3VtZW50LFxuICAgICAgICAgICAgcGFyYW1zOiBmb3JjZUNhc3QoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBhYy5wYXJhbXMpLCB7IGRpc2FibGVkOiBkaXNhYmxlZCwgaGlkZGVuOiBoaWRkZW4gfSkpLFxuICAgICAgICAgICAgdmlld1Byb3BzOiBWaWV3UHJvcHMuY3JlYXRlKHtcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiBoaWRkZW4sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xhc3MgTWFudWFsVGlja2VyIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICB9XG4gICAgICAgIGRpc3Bvc2UoKSB7IH1cbiAgICAgICAgdGljaygpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ3RpY2snLCB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBJbnRlcnZhbFRpY2tlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgaW50ZXJ2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRfID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRpbWVySWRfID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMub25UaWNrXyA9IHRoaXMub25UaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kb2NfID0gZG9jO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWxfID0gaW50ZXJ2YWw7XG4gICAgICAgICAgICB0aGlzLnNldFRpbWVyXygpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkXztcbiAgICAgICAgfVxuICAgICAgICBzZXQgZGlzYWJsZWQoaW5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRfID0gaW5hY3RpdmU7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZF8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyVGltZXJfKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFRpbWVyXygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRpc3Bvc2UoKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVGltZXJfKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2xlYXJUaW1lcl8oKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50aW1lcklkXyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHdpbiA9IHRoaXMuZG9jXy5kZWZhdWx0VmlldztcbiAgICAgICAgICAgIGlmICh3aW4pIHtcbiAgICAgICAgICAgICAgICB3aW4uY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVySWRfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGltZXJJZF8gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVyXygpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUaW1lcl8oKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmludGVydmFsXyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgd2luID0gdGhpcy5kb2NfLmRlZmF1bHRWaWV3O1xuICAgICAgICAgICAgaWYgKHdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMudGltZXJJZF8gPSB3aW4uc2V0SW50ZXJ2YWwodGhpcy5vblRpY2tfLCB0aGlzLmludGVydmFsXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25UaWNrXygpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkXykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCd0aWNrJywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQ29tcG9zaXRlQ29uc3RyYWludCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnN0cmFpbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnN0cmFpbnRzID0gY29uc3RyYWludHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RyYWluKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJhaW50cy5yZWR1Y2UoKHJlc3VsdCwgYykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjLmNvbnN0cmFpbihyZXN1bHQpO1xuICAgICAgICAgICAgfSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRDb25zdHJhaW50KGMsIGNvbnN0cmFpbnRDbGFzcykge1xuICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIGNvbnN0cmFpbnRDbGFzcykge1xuICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgaW5zdGFuY2VvZiBDb21wb3NpdGVDb25zdHJhaW50KSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjLmNvbnN0cmFpbnRzLnJlZHVjZSgodG1wUmVzdWx0LCBzYykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0bXBSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRtcFJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjIGluc3RhbmNlb2YgY29uc3RyYWludENsYXNzID8gc2MgOiBudWxsO1xuICAgICAgICAgICAgfSwgbnVsbCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjbGFzcyBMaXN0Q29uc3RyYWludCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RyYWluKHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRzID0gdGhpcy5vcHRpb25zO1xuICAgICAgICAgICAgaWYgKG9wdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IG9wdHMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWUgPT09IHZhbHVlO1xuICAgICAgICAgICAgfSkubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVkID8gdmFsdWUgOiBvcHRzWzBdLnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUmFuZ2VDb25zdHJhaW50IHtcbiAgICAgICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm1heFZhbHVlID0gY29uZmlnLm1heDtcbiAgICAgICAgICAgIHRoaXMubWluVmFsdWUgPSBjb25maWcubWluO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cmFpbih2YWx1ZSkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKCFpc0VtcHR5KHRoaXMubWluVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gTWF0aC5tYXgocmVzdWx0LCB0aGlzLm1pblZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNFbXB0eSh0aGlzLm1heFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IE1hdGgubWluKHJlc3VsdCwgdGhpcy5tYXhWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgU3RlcENvbnN0cmFpbnQge1xuICAgICAgICBjb25zdHJ1Y3RvcihzdGVwLCBvcmlnaW4gPSAwKSB7XG4gICAgICAgICAgICB0aGlzLnN0ZXAgPSBzdGVwO1xuICAgICAgICAgICAgdGhpcy5vcmlnaW4gPSBvcmlnaW47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RyYWluKHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBvID0gdGhpcy5vcmlnaW4gJSB0aGlzLnN0ZXA7XG4gICAgICAgICAgICBjb25zdCByID0gTWF0aC5yb3VuZCgodmFsdWUgLSBvKSAvIHRoaXMuc3RlcCk7XG4gICAgICAgICAgICByZXR1cm4gbyArIHIgKiB0aGlzLnN0ZXA7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkaiA9IENsYXNzTmFtZSgnbHN0Jyk7XG4gICAgY2xhc3MgTGlzdFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlXyA9IHRoaXMub25WYWx1ZUNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHNfID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGooKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTtcbiAgICAgICAgICAgIHNlbGVjdEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkaigncycpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcCh0aGlzLnByb3BzXywgJ29wdGlvbnMnLCAob3B0cykgPT4ge1xuICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkRWxlbWVudHMoc2VsZWN0RWxlbSk7XG4gICAgICAgICAgICAgICAgb3B0cy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25FbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25FbGVtLmRhdGFzZXQuaW5kZXggPSBTdHJpbmcoaW5kZXgpO1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25FbGVtLnRleHRDb250ZW50ID0gaXRlbS50ZXh0O1xuICAgICAgICAgICAgICAgICAgICBvcHRpb25FbGVtLnZhbHVlID0gU3RyaW5nKGl0ZW0udmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RFbGVtLmFwcGVuZENoaWxkKG9wdGlvbkVsZW0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmREaXNhYmxlZChzZWxlY3RFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChzZWxlY3RFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RWxlbWVudCA9IHNlbGVjdEVsZW07XG4gICAgICAgICAgICBjb25zdCBtYXJrRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG1hcmtFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGooJ20nKSk7XG4gICAgICAgICAgICBtYXJrRWxlbS5hcHBlbmRDaGlsZChjcmVhdGVTdmdJY29uRWxlbWVudChkb2MsICdkcm9wZG93bicpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChtYXJrRWxlbSk7XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlXyA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnNlbGVjdEVsZW1lbnQudmFsdWUgPSBTdHJpbmcodGhpcy52YWx1ZV8ucmF3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBMaXN0Q29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uU2VsZWN0Q2hhbmdlXyA9IHRoaXMub25TZWxlY3RDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnByb3BzID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBMaXN0Vmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBwcm9wczogdGhpcy5wcm9wcyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuc2VsZWN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLm9uU2VsZWN0Q2hhbmdlXyk7XG4gICAgICAgIH1cbiAgICAgICAgb25TZWxlY3RDaGFuZ2VfKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdEVsZW0gPSBmb3JjZUNhc3QoZS5jdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgICAgIGNvbnN0IG9wdEVsZW0gPSBzZWxlY3RFbGVtLnNlbGVjdGVkT3B0aW9ucy5pdGVtKDApO1xuICAgICAgICAgICAgaWYgKCFvcHRFbGVtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaXRlbUluZGV4ID0gTnVtYmVyKG9wdEVsZW0uZGF0YXNldC5pbmRleCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlID0gdGhpcy5wcm9wcy5nZXQoJ29wdGlvbnMnKVtpdGVtSW5kZXhdLnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJGkgPSBDbGFzc05hbWUoJ3BvcCcpO1xuICAgIGNsYXNzIFBvcHVwVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkaSgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBiaW5kVmFsdWUoY29uZmlnLnNob3dzLCB2YWx1ZVRvQ2xhc3NOYW1lKHRoaXMuZWxlbWVudCwgY2xhc3NOYW1lJGkodW5kZWZpbmVkLCAndicpKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBQb3B1cENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5zaG93cyA9IGNyZWF0ZVZhbHVlKGZhbHNlKTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBQb3B1cFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgc2hvd3M6IHRoaXMuc2hvd3MsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJGggPSBDbGFzc05hbWUoJ3R4dCcpO1xuICAgIGNsYXNzIFRleHRWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VfID0gdGhpcy5vbkNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRoKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMucHJvcHNfID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy5wcm9wc18uZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoYW5nZV8pO1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICBpbnB1dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkaCgnaScpKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS50eXBlID0gJ3RleHQnO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoaW5wdXRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChpbnB1dEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQgPSBpbnB1dEVsZW07XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZV8gPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICByZWZyZXNoKCkge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gdGhpcy5wcm9wc18uZ2V0KCdmb3JtYXR0ZXInKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlID0gZm9ybWF0dGVyKHRoaXMudmFsdWVfLnJhd1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBvbkNoYW5nZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRleHRDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25JbnB1dENoYW5nZV8gPSB0aGlzLm9uSW5wdXRDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnBhcnNlcl8gPSBjb25maWcucGFyc2VyO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgVGV4dFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5wcm9wcyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMub25JbnB1dENoYW5nZV8pO1xuICAgICAgICB9XG4gICAgICAgIG9uSW5wdXRDaGFuZ2VfKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0RWxlbSA9IGZvcmNlQ2FzdChlLmN1cnJlbnRUYXJnZXQpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dEVsZW0udmFsdWU7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHRoaXMucGFyc2VyXyh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkocGFyc2VkVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZSA9IHBhcnNlZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52aWV3LnJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGJvb2xUb1N0cmluZyh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYm9vbEZyb21Vbmtub3duKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAhIXZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBCb29sZWFuRm9ybWF0dGVyKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBib29sVG9TdHJpbmcodmFsdWUpO1xuICAgIH1cblxuICAgIGNsYXNzIE51bWJlckxpdGVyYWxOb2RlIHtcbiAgICAgICAgY29uc3RydWN0b3IodGV4dCkge1xuICAgICAgICAgICAgdGhpcy50ZXh0ID0gdGV4dDtcbiAgICAgICAgfVxuICAgICAgICBldmFsdWF0ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBOdW1iZXIodGhpcy50ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICB0b1N0cmluZygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgQklOQVJZX09QRVJBVElPTl9NQVAgPSB7XG4gICAgICAgICcqKic6ICh2MSwgdjIpID0+IE1hdGgucG93KHYxLCB2MiksXG4gICAgICAgICcqJzogKHYxLCB2MikgPT4gdjEgKiB2MixcbiAgICAgICAgJy8nOiAodjEsIHYyKSA9PiB2MSAvIHYyLFxuICAgICAgICAnJSc6ICh2MSwgdjIpID0+IHYxICUgdjIsXG4gICAgICAgICcrJzogKHYxLCB2MikgPT4gdjEgKyB2MixcbiAgICAgICAgJy0nOiAodjEsIHYyKSA9PiB2MSAtIHYyLFxuICAgICAgICAnPDwnOiAodjEsIHYyKSA9PiB2MSA8PCB2MixcbiAgICAgICAgJz4+JzogKHYxLCB2MikgPT4gdjEgPj4gdjIsXG4gICAgICAgICc+Pj4nOiAodjEsIHYyKSA9PiB2MSA+Pj4gdjIsXG4gICAgICAgICcmJzogKHYxLCB2MikgPT4gdjEgJiB2MixcbiAgICAgICAgJ14nOiAodjEsIHYyKSA9PiB2MSBeIHYyLFxuICAgICAgICAnfCc6ICh2MSwgdjIpID0+IHYxIHwgdjIsXG4gICAgfTtcbiAgICBjbGFzcyBCaW5hcnlPcGVyYXRpb25Ob2RlIHtcbiAgICAgICAgY29uc3RydWN0b3Iob3BlcmF0b3IsIGxlZnQsIHJpZ2h0KSB7XG4gICAgICAgICAgICB0aGlzLmxlZnQgPSBsZWZ0O1xuICAgICAgICAgICAgdGhpcy5vcGVyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICAgICAgdGhpcy5yaWdodCA9IHJpZ2h0O1xuICAgICAgICB9XG4gICAgICAgIGV2YWx1YXRlKCkge1xuICAgICAgICAgICAgY29uc3Qgb3AgPSBCSU5BUllfT1BFUkFUSU9OX01BUFt0aGlzLm9wZXJhdG9yXTtcbiAgICAgICAgICAgIGlmICghb3ApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYHVuZXhwZWN0ZWQgYmluYXJ5IG9wZXJhdG9yOiAnJHt0aGlzLm9wZXJhdG9yfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9wKHRoaXMubGVmdC5ldmFsdWF0ZSgpLCB0aGlzLnJpZ2h0LmV2YWx1YXRlKCkpO1xuICAgICAgICB9XG4gICAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAnYignLFxuICAgICAgICAgICAgICAgIHRoaXMubGVmdC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIHRoaXMub3BlcmF0b3IsXG4gICAgICAgICAgICAgICAgdGhpcy5yaWdodC50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgICcpJyxcbiAgICAgICAgICAgIF0uam9pbignICcpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IFVOQVJZX09QRVJBVElPTl9NQVAgPSB7XG4gICAgICAgICcrJzogKHYpID0+IHYsXG4gICAgICAgICctJzogKHYpID0+IC12LFxuICAgICAgICAnfic6ICh2KSA9PiB+dixcbiAgICB9O1xuICAgIGNsYXNzIFVuYXJ5T3BlcmF0aW9uTm9kZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKG9wZXJhdG9yLCBleHByKSB7XG4gICAgICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb24gPSBleHByO1xuICAgICAgICB9XG4gICAgICAgIGV2YWx1YXRlKCkge1xuICAgICAgICAgICAgY29uc3Qgb3AgPSBVTkFSWV9PUEVSQVRJT05fTUFQW3RoaXMub3BlcmF0b3JdO1xuICAgICAgICAgICAgaWYgKCFvcCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCB1bmFyeSBvcGVyYXRvcjogJyR7dGhpcy5vcGVyYXRvcn1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvcCh0aGlzLmV4cHJlc3Npb24uZXZhbHVhdGUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICByZXR1cm4gWyd1KCcsIHRoaXMub3BlcmF0b3IsIHRoaXMuZXhwcmVzc2lvbi50b1N0cmluZygpLCAnKSddLmpvaW4oJyAnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbWJpbmVSZWFkZXIocGFyc2Vycykge1xuICAgICAgICByZXR1cm4gKHRleHQsIGN1cnNvcikgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJzZXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2Vyc1tpXSh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkV2hpdGVzcGFjZSh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBtID0gdGV4dC5zdWJzdHIoY3Vyc29yKS5tYXRjaCgvXlxccysvKTtcbiAgICAgICAgcmV0dXJuIChfYSA9IChtICYmIG1bMF0pKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZE5vblplcm9EaWdpdCh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgY2ggPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDEpO1xuICAgICAgICByZXR1cm4gY2gubWF0Y2goL15bMS05XSQvKSA/IGNoIDogJyc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWREZWNpbWFsRGlnaXRzKHRleHQsIGN1cnNvcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0LnN1YnN0cihjdXJzb3IpLm1hdGNoKC9eWzAtOV0rLyk7XG4gICAgICAgIHJldHVybiAoX2EgPSAobSAmJiBtWzBdKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRTaWduZWRJbnRlZ2VyKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBkcyA9IHJlYWREZWNpbWFsRGlnaXRzKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmIChkcyAhPT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBkcztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaWduID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAxKTtcbiAgICAgICAgY3Vyc29yICs9IDE7XG4gICAgICAgIGlmIChzaWduICE9PSAnLScgJiYgc2lnbiAhPT0gJysnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc2RzID0gcmVhZERlY2ltYWxEaWdpdHModGV4dCwgY3Vyc29yKTtcbiAgICAgICAgaWYgKHNkcyA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2lnbiArIHNkcztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZEV4cG9uZW50UGFydCh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgZSA9IHRleHQuc3Vic3RyKGN1cnNvciwgMSk7XG4gICAgICAgIGN1cnNvciArPSAxO1xuICAgICAgICBpZiAoZS50b0xvd2VyQ2FzZSgpICE9PSAnZScpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzaSA9IHJlYWRTaWduZWRJbnRlZ2VyKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmIChzaSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZSArIHNpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkRGVjaW1hbEludGVnZXJMaXRlcmFsKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBjaCA9IHRleHQuc3Vic3RyKGN1cnNvciwgMSk7XG4gICAgICAgIGlmIChjaCA9PT0gJzAnKSB7XG4gICAgICAgICAgICByZXR1cm4gY2g7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbnpkID0gcmVhZE5vblplcm9EaWdpdCh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBjdXJzb3IgKz0gbnpkLmxlbmd0aDtcbiAgICAgICAgaWYgKG56ZCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnpkICsgcmVhZERlY2ltYWxEaWdpdHModGV4dCwgY3Vyc29yKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZERlY2ltYWxMaXRlcmFsMSh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgZGlsID0gcmVhZERlY2ltYWxJbnRlZ2VyTGl0ZXJhbCh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBjdXJzb3IgKz0gZGlsLmxlbmd0aDtcbiAgICAgICAgaWYgKGRpbCA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkb3QgPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDEpO1xuICAgICAgICBjdXJzb3IgKz0gZG90Lmxlbmd0aDtcbiAgICAgICAgaWYgKGRvdCAhPT0gJy4nKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGRzID0gcmVhZERlY2ltYWxEaWdpdHModGV4dCwgY3Vyc29yKTtcbiAgICAgICAgY3Vyc29yICs9IGRkcy5sZW5ndGg7XG4gICAgICAgIHJldHVybiBkaWwgKyBkb3QgKyBkZHMgKyByZWFkRXhwb25lbnRQYXJ0KHRleHQsIGN1cnNvcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWREZWNpbWFsTGl0ZXJhbDIodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IGRvdCA9IHRleHQuc3Vic3RyKGN1cnNvciwgMSk7XG4gICAgICAgIGN1cnNvciArPSBkb3QubGVuZ3RoO1xuICAgICAgICBpZiAoZG90ICE9PSAnLicpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZHMgPSByZWFkRGVjaW1hbERpZ2l0cyh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBjdXJzb3IgKz0gZGRzLmxlbmd0aDtcbiAgICAgICAgaWYgKGRkcyA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZG90ICsgZGRzICsgcmVhZEV4cG9uZW50UGFydCh0ZXh0LCBjdXJzb3IpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkRGVjaW1hbExpdGVyYWwzKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBkaWwgPSByZWFkRGVjaW1hbEludGVnZXJMaXRlcmFsKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGN1cnNvciArPSBkaWwubGVuZ3RoO1xuICAgICAgICBpZiAoZGlsID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkaWwgKyByZWFkRXhwb25lbnRQYXJ0KHRleHQsIGN1cnNvcik7XG4gICAgfVxuICAgIGNvbnN0IHJlYWREZWNpbWFsTGl0ZXJhbCA9IGNvbWJpbmVSZWFkZXIoW1xuICAgICAgICByZWFkRGVjaW1hbExpdGVyYWwxLFxuICAgICAgICByZWFkRGVjaW1hbExpdGVyYWwyLFxuICAgICAgICByZWFkRGVjaW1hbExpdGVyYWwzLFxuICAgIF0pO1xuICAgIGZ1bmN0aW9uIHBhcnNlQmluYXJ5RGlnaXRzKHRleHQsIGN1cnNvcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0LnN1YnN0cihjdXJzb3IpLm1hdGNoKC9eWzAxXSsvKTtcbiAgICAgICAgcmV0dXJuIChfYSA9IChtICYmIG1bMF0pKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZEJpbmFyeUludGVnZXJMaXRlcmFsKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBwcmVmaXggPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDIpO1xuICAgICAgICBjdXJzb3IgKz0gcHJlZml4Lmxlbmd0aDtcbiAgICAgICAgaWYgKHByZWZpeC50b0xvd2VyQ2FzZSgpICE9PSAnMGInKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmRzID0gcGFyc2VCaW5hcnlEaWdpdHModGV4dCwgY3Vyc29yKTtcbiAgICAgICAgaWYgKGJkcyA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJlZml4ICsgYmRzO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkT2N0YWxEaWdpdHModGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgbSA9IHRleHQuc3Vic3RyKGN1cnNvcikubWF0Y2goL15bMC03XSsvKTtcbiAgICAgICAgcmV0dXJuIChfYSA9IChtICYmIG1bMF0pKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZE9jdGFsSW50ZWdlckxpdGVyYWwodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IHRleHQuc3Vic3RyKGN1cnNvciwgMik7XG4gICAgICAgIGN1cnNvciArPSBwcmVmaXgubGVuZ3RoO1xuICAgICAgICBpZiAocHJlZml4LnRvTG93ZXJDYXNlKCkgIT09ICcwbycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvZHMgPSByZWFkT2N0YWxEaWdpdHModGV4dCwgY3Vyc29yKTtcbiAgICAgICAgaWYgKG9kcyA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJlZml4ICsgb2RzO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkSGV4RGlnaXRzKHRleHQsIGN1cnNvcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0LnN1YnN0cihjdXJzb3IpLm1hdGNoKC9eWzAtOWEtZl0rL2kpO1xuICAgICAgICByZXR1cm4gKF9hID0gKG0gJiYgbVswXSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkSGV4SW50ZWdlckxpdGVyYWwodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IHRleHQuc3Vic3RyKGN1cnNvciwgMik7XG4gICAgICAgIGN1cnNvciArPSBwcmVmaXgubGVuZ3RoO1xuICAgICAgICBpZiAocHJlZml4LnRvTG93ZXJDYXNlKCkgIT09ICcweCcpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoZHMgPSByZWFkSGV4RGlnaXRzKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmIChoZHMgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZWZpeCArIGhkcztcbiAgICB9XG4gICAgY29uc3QgcmVhZE5vbkRlY2ltYWxJbnRlZ2VyTGl0ZXJhbCA9IGNvbWJpbmVSZWFkZXIoW1xuICAgICAgICByZWFkQmluYXJ5SW50ZWdlckxpdGVyYWwsXG4gICAgICAgIHJlYWRPY3RhbEludGVnZXJMaXRlcmFsLFxuICAgICAgICByZWFkSGV4SW50ZWdlckxpdGVyYWwsXG4gICAgXSk7XG4gICAgY29uc3QgcmVhZE51bWVyaWNMaXRlcmFsID0gY29tYmluZVJlYWRlcihbXG4gICAgICAgIHJlYWROb25EZWNpbWFsSW50ZWdlckxpdGVyYWwsXG4gICAgICAgIHJlYWREZWNpbWFsTGl0ZXJhbCxcbiAgICBdKTtcblxuICAgIGZ1bmN0aW9uIHBhcnNlTGl0ZXJhbCh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgbnVtID0gcmVhZE51bWVyaWNMaXRlcmFsKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGN1cnNvciArPSBudW0ubGVuZ3RoO1xuICAgICAgICBpZiAobnVtID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV2YWx1YWJsZTogbmV3IE51bWJlckxpdGVyYWxOb2RlKG51bSksXG4gICAgICAgICAgICBjdXJzb3I6IGN1cnNvcixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VQYXJlbnRoZXNpemVkRXhwcmVzc2lvbih0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3Qgb3AgPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDEpO1xuICAgICAgICBjdXJzb3IgKz0gb3AubGVuZ3RoO1xuICAgICAgICBpZiAob3AgIT09ICcoJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZXhwciA9IHBhcnNlRXhwcmVzc2lvbih0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBpZiAoIWV4cHIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGN1cnNvciA9IGV4cHIuY3Vyc29yO1xuICAgICAgICBjdXJzb3IgKz0gcmVhZFdoaXRlc3BhY2UodGV4dCwgY3Vyc29yKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IGNsID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAxKTtcbiAgICAgICAgY3Vyc29yICs9IGNsLmxlbmd0aDtcbiAgICAgICAgaWYgKGNsICE9PSAnKScpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBldmFsdWFibGU6IGV4cHIuZXZhbHVhYmxlLFxuICAgICAgICAgICAgY3Vyc29yOiBjdXJzb3IsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlUHJpbWFyeUV4cHJlc3Npb24odGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuICgoX2EgPSBwYXJzZUxpdGVyYWwodGV4dCwgY3Vyc29yKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogcGFyc2VQYXJlbnRoZXNpemVkRXhwcmVzc2lvbih0ZXh0LCBjdXJzb3IpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VVbmFyeUV4cHJlc3Npb24odGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IGV4cHIgPSBwYXJzZVByaW1hcnlFeHByZXNzaW9uKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmIChleHByKSB7XG4gICAgICAgICAgICByZXR1cm4gZXhwcjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvcCA9IHRleHQuc3Vic3RyKGN1cnNvciwgMSk7XG4gICAgICAgIGN1cnNvciArPSBvcC5sZW5ndGg7XG4gICAgICAgIGlmIChvcCAhPT0gJysnICYmIG9wICE9PSAnLScgJiYgb3AgIT09ICd+Jykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbnVtID0gcGFyc2VVbmFyeUV4cHJlc3Npb24odGV4dCwgY3Vyc29yKTtcbiAgICAgICAgaWYgKCFudW0pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGN1cnNvciA9IG51bS5jdXJzb3I7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjdXJzb3I6IGN1cnNvcixcbiAgICAgICAgICAgIGV2YWx1YWJsZTogbmV3IFVuYXJ5T3BlcmF0aW9uTm9kZShvcCwgbnVtLmV2YWx1YWJsZSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRCaW5hcnlPcGVyYXRvcihvcHMsIHRleHQsIGN1cnNvcikge1xuICAgICAgICBjdXJzb3IgKz0gcmVhZFdoaXRlc3BhY2UodGV4dCwgY3Vyc29yKS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IG9wID0gb3BzLmZpbHRlcigob3ApID0+IHRleHQuc3RhcnRzV2l0aChvcCwgY3Vyc29yKSlbMF07XG4gICAgICAgIGlmICghb3ApIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGN1cnNvciArPSBvcC5sZW5ndGg7XG4gICAgICAgIGN1cnNvciArPSByZWFkV2hpdGVzcGFjZSh0ZXh0LCBjdXJzb3IpLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGN1cnNvcjogY3Vyc29yLFxuICAgICAgICAgICAgb3BlcmF0b3I6IG9wLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVCaW5hcnlPcGVyYXRpb25FeHByZXNzaW9uUGFyc2VyKGV4cHJQYXJzZXIsIG9wcykge1xuICAgICAgICByZXR1cm4gKHRleHQsIGN1cnNvcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RFeHByID0gZXhwclBhcnNlcih0ZXh0LCBjdXJzb3IpO1xuICAgICAgICAgICAgaWYgKCFmaXJzdEV4cHIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGN1cnNvciA9IGZpcnN0RXhwci5jdXJzb3I7XG4gICAgICAgICAgICBsZXQgZXhwciA9IGZpcnN0RXhwci5ldmFsdWFibGU7XG4gICAgICAgICAgICBmb3IgKDs7KSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3AgPSByZWFkQmluYXJ5T3BlcmF0b3Iob3BzLCB0ZXh0LCBjdXJzb3IpO1xuICAgICAgICAgICAgICAgIGlmICghb3ApIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnNvciA9IG9wLmN1cnNvcjtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0RXhwciA9IGV4cHJQYXJzZXIodGV4dCwgY3Vyc29yKTtcbiAgICAgICAgICAgICAgICBpZiAoIW5leHRFeHByKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdXJzb3IgPSBuZXh0RXhwci5jdXJzb3I7XG4gICAgICAgICAgICAgICAgZXhwciA9IG5ldyBCaW5hcnlPcGVyYXRpb25Ob2RlKG9wLm9wZXJhdG9yLCBleHByLCBuZXh0RXhwci5ldmFsdWFibGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGV4cHJcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgY3Vyc29yOiBjdXJzb3IsXG4gICAgICAgICAgICAgICAgICAgIGV2YWx1YWJsZTogZXhwcixcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBwYXJzZUJpbmFyeU9wZXJhdGlvbkV4cHJlc3Npb24gPSBbXG4gICAgICAgIFsnKionXSxcbiAgICAgICAgWycqJywgJy8nLCAnJSddLFxuICAgICAgICBbJysnLCAnLSddLFxuICAgICAgICBbJzw8JywgJz4+PicsICc+PiddLFxuICAgICAgICBbJyYnXSxcbiAgICAgICAgWydeJ10sXG4gICAgICAgIFsnfCddLFxuICAgIF0ucmVkdWNlKChwYXJzZXIsIG9wcykgPT4ge1xuICAgICAgICByZXR1cm4gY3JlYXRlQmluYXJ5T3BlcmF0aW9uRXhwcmVzc2lvblBhcnNlcihwYXJzZXIsIG9wcyk7XG4gICAgfSwgcGFyc2VVbmFyeUV4cHJlc3Npb24pO1xuICAgIGZ1bmN0aW9uIHBhcnNlRXhwcmVzc2lvbih0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY3Vyc29yICs9IHJlYWRXaGl0ZXNwYWNlKHRleHQsIGN1cnNvcikubGVuZ3RoO1xuICAgICAgICByZXR1cm4gcGFyc2VCaW5hcnlPcGVyYXRpb25FeHByZXNzaW9uKHRleHQsIGN1cnNvcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlRWNtYU51bWJlckV4cHJlc3Npb24odGV4dCkge1xuICAgICAgICBjb25zdCBleHByID0gcGFyc2VFeHByZXNzaW9uKHRleHQsIDApO1xuICAgICAgICBpZiAoIWV4cHIpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGN1cnNvciA9IGV4cHIuY3Vyc29yICsgcmVhZFdoaXRlc3BhY2UodGV4dCwgZXhwci5jdXJzb3IpLmxlbmd0aDtcbiAgICAgICAgaWYgKGN1cnNvciAhPT0gdGV4dC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBleHByLmV2YWx1YWJsZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU51bWJlcih0ZXh0KSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgciA9IHBhcnNlRWNtYU51bWJlckV4cHJlc3Npb24odGV4dCk7XG4gICAgICAgIHJldHVybiAoX2EgPSByID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIuZXZhbHVhdGUoKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gbnVtYmVyRnJvbVVua25vd24odmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3QgcHYgPSBwYXJzZU51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkocHYpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHB2O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBudW1iZXJUb1N0cmluZyh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlTnVtYmVyRm9ybWF0dGVyKGRpZ2l0cykge1xuICAgICAgICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUudG9GaXhlZChNYXRoLm1heChNYXRoLm1pbihkaWdpdHMsIDIwKSwgMCkpO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGlubmVyRm9ybWF0dGVyID0gY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDApO1xuICAgIGZ1bmN0aW9uIGZvcm1hdFBlcmNlbnRhZ2UodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGlubmVyRm9ybWF0dGVyKHZhbHVlKSArICclJztcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHJpbmdGcm9tVW5rbm93bih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZm9ybWF0U3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaWxsQnVmZmVyKGJ1ZmZlciwgYnVmZmVyU2l6ZSkge1xuICAgICAgICB3aGlsZSAoYnVmZmVyLmxlbmd0aCA8IGJ1ZmZlclNpemUpIHtcbiAgICAgICAgICAgIGJ1ZmZlci5wdXNoKHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gaW5pdGlhbGl6ZUJ1ZmZlcihidWZmZXJTaXplKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IFtdO1xuICAgICAgICBmaWxsQnVmZmVyKGJ1ZmZlciwgYnVmZmVyU2l6ZSk7XG4gICAgICAgIHJldHVybiBjcmVhdGVWYWx1ZShidWZmZXIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVUcmltbWVkQnVmZmVyKGJ1ZmZlcikge1xuICAgICAgICBjb25zdCBpbmRleCA9IGJ1ZmZlci5pbmRleE9mKHVuZGVmaW5lZCk7XG4gICAgICAgIHJldHVybiBmb3JjZUNhc3QoaW5kZXggPCAwID8gYnVmZmVyIDogYnVmZmVyLnNsaWNlKDAsIGluZGV4KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVB1c2hlZEJ1ZmZlcihidWZmZXIsIG5ld1ZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG5ld0J1ZmZlciA9IFsuLi5jcmVhdGVUcmltbWVkQnVmZmVyKGJ1ZmZlciksIG5ld1ZhbHVlXTtcbiAgICAgICAgaWYgKG5ld0J1ZmZlci5sZW5ndGggPiBidWZmZXIubGVuZ3RoKSB7XG4gICAgICAgICAgICBuZXdCdWZmZXIuc3BsaWNlKDAsIG5ld0J1ZmZlci5sZW5ndGggLSBidWZmZXIubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZpbGxCdWZmZXIobmV3QnVmZmVyLCBidWZmZXIubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3QnVmZmVyO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbm5lY3RWYWx1ZXMoeyBwcmltYXJ5LCBzZWNvbmRhcnksIGZvcndhcmQsIGJhY2t3YXJkLCB9KSB7XG4gICAgICAgIGxldCBjaGFuZ2luZyA9IGZhbHNlO1xuICAgICAgICBmdW5jdGlvbiBwcmV2ZW50RmVlZGJhY2soY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2luZykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNoYW5naW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICBjaGFuZ2luZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHByaW1hcnkuZW1pdHRlci5vbignY2hhbmdlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICBwcmV2ZW50RmVlZGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIHNlY29uZGFyeS5zZXRSYXdWYWx1ZShmb3J3YXJkKHByaW1hcnksIHNlY29uZGFyeSksIGV2Lm9wdGlvbnMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBzZWNvbmRhcnkuZW1pdHRlci5vbignY2hhbmdlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICBwcmV2ZW50RmVlZGJhY2soKCkgPT4ge1xuICAgICAgICAgICAgICAgIHByaW1hcnkuc2V0UmF3VmFsdWUoYmFja3dhcmQocHJpbWFyeSwgc2Vjb25kYXJ5KSwgZXYub3B0aW9ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHByZXZlbnRGZWVkYmFjaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2Vjb25kYXJ5LnNldFJhd1ZhbHVlKGZvcndhcmQocHJpbWFyeSwgc2Vjb25kYXJ5KSwgZXYub3B0aW9ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHByZXZlbnRGZWVkYmFjaygoKSA9PiB7XG4gICAgICAgICAgICBzZWNvbmRhcnkuc2V0UmF3VmFsdWUoZm9yd2FyZChwcmltYXJ5LCBzZWNvbmRhcnkpLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldFN0ZXBGb3JLZXkoYmFzZVN0ZXAsIGtleXMpIHtcbiAgICAgICAgY29uc3Qgc3RlcCA9IGJhc2VTdGVwICogKGtleXMuYWx0S2V5ID8gMC4xIDogMSkgKiAoa2V5cy5zaGlmdEtleSA/IDEwIDogMSk7XG4gICAgICAgIGlmIChrZXlzLnVwS2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gK3N0ZXA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoa2V5cy5kb3duS2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gLXN0ZXA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFZlcnRpY2FsU3RlcEtleXMoZXYpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFsdEtleTogZXYuYWx0S2V5LFxuICAgICAgICAgICAgZG93bktleTogZXYua2V5ID09PSAnQXJyb3dEb3duJyxcbiAgICAgICAgICAgIHNoaWZ0S2V5OiBldi5zaGlmdEtleSxcbiAgICAgICAgICAgIHVwS2V5OiBldi5rZXkgPT09ICdBcnJvd1VwJyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzKGV2KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBhbHRLZXk6IGV2LmFsdEtleSxcbiAgICAgICAgICAgIGRvd25LZXk6IGV2LmtleSA9PT0gJ0Fycm93TGVmdCcsXG4gICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB1cEtleTogZXYua2V5ID09PSAnQXJyb3dSaWdodCcsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzVmVydGljYWxBcnJvd0tleShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGtleSA9PT0gJ0Fycm93VXAnIHx8IGtleSA9PT0gJ0Fycm93RG93bic7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzQXJyb3dLZXkoa2V5KSB7XG4gICAgICAgIHJldHVybiBpc1ZlcnRpY2FsQXJyb3dLZXkoa2V5KSB8fCBrZXkgPT09ICdBcnJvd0xlZnQnIHx8IGtleSA9PT0gJ0Fycm93UmlnaHQnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXB1dGVPZmZzZXQkMShldiwgZWxlbSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCB3aW4gPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG4gICAgICAgIGNvbnN0IHJlY3QgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogZXYucGFnZVggLSAoKChfYSA9ICh3aW4gJiYgd2luLnNjcm9sbFgpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAwKSArIHJlY3QubGVmdCksXG4gICAgICAgICAgICB5OiBldi5wYWdlWSAtICgoKF9iID0gKHdpbiAmJiB3aW4uc2Nyb2xsWSkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDApICsgcmVjdC50b3ApLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjbGFzcyBQb2ludGVySGFuZGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMubGFzdFRvdWNoXyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLm9uRG9jdW1lbnRNb3VzZU1vdmVfID0gdGhpcy5vbkRvY3VtZW50TW91c2VNb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkRvY3VtZW50TW91c2VVcF8gPSB0aGlzLm9uRG9jdW1lbnRNb3VzZVVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbk1vdXNlRG93bl8gPSB0aGlzLm9uTW91c2VEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoRW5kXyA9IHRoaXMub25Ub3VjaEVuZF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaE1vdmVfID0gdGhpcy5vblRvdWNoTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaFN0YXJ0XyA9IHRoaXMub25Ub3VjaFN0YXJ0Xy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbGVtXyA9IGVsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblRvdWNoU3RhcnRfLCB7XG4gICAgICAgICAgICAgICAgcGFzc2l2ZTogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5vblRvdWNoTW92ZV8sIHtcbiAgICAgICAgICAgICAgICBwYXNzaXZlOiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJywgdGhpcy5vblRvdWNoRW5kXyk7XG4gICAgICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIHRoaXMub25Nb3VzZURvd25fKTtcbiAgICAgICAgfVxuICAgICAgICBjb21wdXRlUG9zaXRpb25fKG9mZnNldCkge1xuICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuZWxlbV8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGJvdW5kczoge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiByZWN0LmhlaWdodCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHBvaW50OiBvZmZzZXRcbiAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBvZmZzZXQueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IG9mZnNldC55LFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgb25Nb3VzZURvd25fKGV2KSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgKF9hID0gZXYuY3VycmVudFRhcmdldCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmZvY3VzKCk7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmVsZW1fLm93bmVyRG9jdW1lbnQ7XG4gICAgICAgICAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbkRvY3VtZW50TW91c2VNb3ZlXyk7XG4gICAgICAgICAgICBkb2MuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25Eb2N1bWVudE1vdXNlVXBfKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdkb3duJywge1xuICAgICAgICAgICAgICAgIGFsdEtleTogZXYuYWx0S2V5LFxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuY29tcHV0ZVBvc2l0aW9uXyhjb21wdXRlT2Zmc2V0JDEoZXYsIHRoaXMuZWxlbV8pKSxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgc2hpZnRLZXk6IGV2LnNoaWZ0S2V5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Eb2N1bWVudE1vdXNlTW92ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdtb3ZlJywge1xuICAgICAgICAgICAgICAgIGFsdEtleTogZXYuYWx0S2V5LFxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuY29tcHV0ZVBvc2l0aW9uXyhjb21wdXRlT2Zmc2V0JDEoZXYsIHRoaXMuZWxlbV8pKSxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgc2hpZnRLZXk6IGV2LnNoaWZ0S2V5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Eb2N1bWVudE1vdXNlVXBfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmVsZW1fLm93bmVyRG9jdW1lbnQ7XG4gICAgICAgICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJywgdGhpcy5vbkRvY3VtZW50TW91c2VNb3ZlXyk7XG4gICAgICAgICAgICBkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsIHRoaXMub25Eb2N1bWVudE1vdXNlVXBfKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCd1cCcsIHtcbiAgICAgICAgICAgICAgICBhbHRLZXk6IGV2LmFsdEtleSxcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmNvbXB1dGVQb3NpdGlvbl8oY29tcHV0ZU9mZnNldCQxKGV2LCB0aGlzLmVsZW1fKSksXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiBldi5zaGlmdEtleSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uVG91Y2hTdGFydF8oZXYpIHtcbiAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBjb25zdCB0b3VjaCA9IGV2LnRhcmdldFRvdWNoZXMuaXRlbSgwKTtcbiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmVsZW1fLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2Rvd24nLCB7XG4gICAgICAgICAgICAgICAgYWx0S2V5OiBldi5hbHRLZXksXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5jb21wdXRlUG9zaXRpb25fKHRvdWNoXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogdG91Y2guY2xpZW50WCAtIHJlY3QubGVmdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHRvdWNoLmNsaWVudFkgLSByZWN0LnRvcCxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiBldi5zaGlmdEtleSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5sYXN0VG91Y2hfID0gdG91Y2g7XG4gICAgICAgIH1cbiAgICAgICAgb25Ub3VjaE1vdmVfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCB0b3VjaCA9IGV2LnRhcmdldFRvdWNoZXMuaXRlbSgwKTtcbiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmVsZW1fLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ21vdmUnLCB7XG4gICAgICAgICAgICAgICAgYWx0S2V5OiBldi5hbHRLZXksXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5jb21wdXRlUG9zaXRpb25fKHRvdWNoXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogdG91Y2guY2xpZW50WCAtIHJlY3QubGVmdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHRvdWNoLmNsaWVudFkgLSByZWN0LnRvcCxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiBldi5zaGlmdEtleSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5sYXN0VG91Y2hfID0gdG91Y2g7XG4gICAgICAgIH1cbiAgICAgICAgb25Ub3VjaEVuZF8oZXYpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IHRvdWNoID0gKF9hID0gZXYudGFyZ2V0VG91Y2hlcy5pdGVtKDApKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiB0aGlzLmxhc3RUb3VjaF87XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5lbGVtXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCd1cCcsIHtcbiAgICAgICAgICAgICAgICBhbHRLZXk6IGV2LmFsdEtleSxcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmNvbXB1dGVQb3NpdGlvbl8odG91Y2hcbiAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiB0b3VjaC5jbGllbnRYIC0gcmVjdC5sZWZ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogdG91Y2guY2xpZW50WSAtIHJlY3QudG9wLFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgc2hpZnRLZXk6IGV2LnNoaWZ0S2V5LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBtYXBSYW5nZSh2YWx1ZSwgc3RhcnQxLCBlbmQxLCBzdGFydDIsIGVuZDIpIHtcbiAgICAgICAgY29uc3QgcCA9ICh2YWx1ZSAtIHN0YXJ0MSkgLyAoZW5kMSAtIHN0YXJ0MSk7XG4gICAgICAgIHJldHVybiBzdGFydDIgKyBwICogKGVuZDIgLSBzdGFydDIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXREZWNpbWFsRGlnaXRzKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHRleHQgPSBTdHJpbmcodmFsdWUudG9GaXhlZCgxMCkpO1xuICAgICAgICBjb25zdCBmcmFjID0gdGV4dC5zcGxpdCgnLicpWzFdO1xuICAgICAgICByZXR1cm4gZnJhYy5yZXBsYWNlKC8wKyQvLCAnJykubGVuZ3RoO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb25zdHJhaW5SYW5nZSh2YWx1ZSwgbWluLCBtYXgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHZhbHVlLCBtaW4pLCBtYXgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBsb29wUmFuZ2UodmFsdWUsIG1heCkge1xuICAgICAgICByZXR1cm4gKCh2YWx1ZSAlIG1heCkgKyBtYXgpICUgbWF4O1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRnID0gQ2xhc3NOYW1lKCd0eHQnKTtcbiAgICBjbGFzcyBOdW1iZXJUZXh0VmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlXyA9IHRoaXMub25DaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnByb3BzXyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMucHJvcHNfLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25DaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRnKCksIGNsYXNzTmFtZSRnKHVuZGVmaW5lZCwgJ251bScpKTtcbiAgICAgICAgICAgIGlmIChjb25maWcuYXJyYXlQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRnKHVuZGVmaW5lZCwgY29uZmlnLmFycmF5UG9zaXRpb24pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBpbnB1dEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRnKCdpJykpO1xuICAgICAgICAgICAgaW5wdXRFbGVtLnR5cGUgPSAndGV4dCc7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmREaXNhYmxlZChpbnB1dEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGlucHV0RWxlbSk7XG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudCA9IGlucHV0RWxlbTtcbiAgICAgICAgICAgIHRoaXMub25EcmFnZ2luZ0NoYW5nZV8gPSB0aGlzLm9uRHJhZ2dpbmdDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmRyYWdnaW5nXyA9IGNvbmZpZy5kcmFnZ2luZztcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dpbmdfLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25EcmFnZ2luZ0NoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGcoKSk7XG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRnKCdpJykpO1xuICAgICAgICAgICAgY29uc3Qga25vYkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBrbm9iRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRnKCdrJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGtub2JFbGVtKTtcbiAgICAgICAgICAgIHRoaXMua25vYkVsZW1lbnQgPSBrbm9iRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IGd1aWRlRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAnc3ZnJyk7XG4gICAgICAgICAgICBndWlkZUVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygnZycpKTtcbiAgICAgICAgICAgIHRoaXMua25vYkVsZW1lbnQuYXBwZW5kQ2hpbGQoZ3VpZGVFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGJvZHlFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdwYXRoJyk7XG4gICAgICAgICAgICBib2R5RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRnKCdnYicpKTtcbiAgICAgICAgICAgIGd1aWRlRWxlbS5hcHBlbmRDaGlsZChib2R5RWxlbSk7XG4gICAgICAgICAgICB0aGlzLmd1aWRlQm9keUVsZW1fID0gYm9keUVsZW07XG4gICAgICAgICAgICBjb25zdCBoZWFkRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAncGF0aCcpO1xuICAgICAgICAgICAgaGVhZEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygnZ2gnKSk7XG4gICAgICAgICAgICBndWlkZUVsZW0uYXBwZW5kQ2hpbGQoaGVhZEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5ndWlkZUhlYWRFbGVtXyA9IGhlYWRFbGVtO1xuICAgICAgICAgICAgY29uc3QgdG9vbHRpcEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0b29sdGlwRWxlbS5jbGFzc0xpc3QuYWRkKENsYXNzTmFtZSgndHQnKSgpKTtcbiAgICAgICAgICAgIHRoaXMua25vYkVsZW1lbnQuYXBwZW5kQ2hpbGQodG9vbHRpcEVsZW0pO1xuICAgICAgICAgICAgdGhpcy50b29sdGlwRWxlbV8gPSB0b29sdGlwRWxlbTtcbiAgICAgICAgICAgIGNvbmZpZy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgb25EcmFnZ2luZ0NoYW5nZV8oZXYpIHtcbiAgICAgICAgICAgIGlmIChldi5yYXdWYWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSRnKHVuZGVmaW5lZCwgJ2RyZycpKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZyh1bmRlZmluZWQsICdkcmcnKSk7XG4gICAgICAgICAgICBjb25zdCB4ID0gZXYucmF3VmFsdWUgLyB0aGlzLnByb3BzXy5nZXQoJ2RyYWdnaW5nU2NhbGUnKTtcbiAgICAgICAgICAgIGNvbnN0IGFveCA9IHggKyAoeCA+IDAgPyAtMSA6IHggPCAwID8gKzEgOiAwKTtcbiAgICAgICAgICAgIGNvbnN0IGFkeCA9IGNvbnN0cmFpblJhbmdlKC1hb3gsIC00LCArNCk7XG4gICAgICAgICAgICB0aGlzLmd1aWRlSGVhZEVsZW1fLnNldEF0dHJpYnV0ZU5TKG51bGwsICdkJywgW2BNICR7YW94ICsgYWR4fSwwIEwke2FveH0sNCBMJHthb3ggKyBhZHh9LDhgLCBgTSAke3h9LC0xIEwke3h9LDlgXS5qb2luKCcgJykpO1xuICAgICAgICAgICAgdGhpcy5ndWlkZUJvZHlFbGVtXy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZCcsIGBNIDAsNCBMJHt4fSw0YCk7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSB0aGlzLnByb3BzXy5nZXQoJ2Zvcm1hdHRlcicpO1xuICAgICAgICAgICAgdGhpcy50b29sdGlwRWxlbV8udGV4dENvbnRlbnQgPSBmb3JtYXR0ZXIodGhpcy52YWx1ZS5yYXdWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLnRvb2x0aXBFbGVtXy5zdHlsZS5sZWZ0ID0gYCR7eH1weGA7XG4gICAgICAgIH1cbiAgICAgICAgcmVmcmVzaCgpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IHRoaXMucHJvcHNfLmdldCgnZm9ybWF0dGVyJyk7XG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudC52YWx1ZSA9IGZvcm1hdHRlcih0aGlzLnZhbHVlLnJhd1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBvbkNoYW5nZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIE51bWJlclRleHRDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luUmF3VmFsdWVfID0gMDtcbiAgICAgICAgICAgIHRoaXMub25JbnB1dENoYW5nZV8gPSB0aGlzLm9uSW5wdXRDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uSW5wdXRLZXlEb3duXyA9IHRoaXMub25JbnB1dEtleURvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uSW5wdXRLZXlVcF8gPSB0aGlzLm9uSW5wdXRLZXlVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyRG93bl8gPSB0aGlzLm9uUG9pbnRlckRvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlck1vdmVfID0gdGhpcy5vblBvaW50ZXJNb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJVcF8gPSB0aGlzLm9uUG9pbnRlclVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5iYXNlU3RlcF8gPSBjb25maWcuYmFzZVN0ZXA7XG4gICAgICAgICAgICB0aGlzLnBhcnNlcl8gPSBjb25maWcucGFyc2VyO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMuc2xpZGVyUHJvcHNfID0gKF9hID0gY29uZmlnLnNsaWRlclByb3BzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBudWxsO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dpbmdfID0gY3JlYXRlVmFsdWUobnVsbCk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgTnVtYmVyVGV4dFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgYXJyYXlQb3NpdGlvbjogY29uZmlnLmFycmF5UG9zaXRpb24sXG4gICAgICAgICAgICAgICAgZHJhZ2dpbmc6IHRoaXMuZHJhZ2dpbmdfLFxuICAgICAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5vbklucHV0Q2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uSW5wdXRLZXlEb3duXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuaW5wdXRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5vbklucHV0S2V5VXBfKTtcbiAgICAgICAgICAgIGNvbnN0IHBoID0gbmV3IFBvaW50ZXJIYW5kbGVyKHRoaXMudmlldy5rbm9iRWxlbWVudCk7XG4gICAgICAgICAgICBwaC5lbWl0dGVyLm9uKCdkb3duJywgdGhpcy5vblBvaW50ZXJEb3duXyk7XG4gICAgICAgICAgICBwaC5lbWl0dGVyLm9uKCdtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlXyk7XG4gICAgICAgICAgICBwaC5lbWl0dGVyLm9uKCd1cCcsIHRoaXMub25Qb2ludGVyVXBfKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdHJhaW5WYWx1ZV8odmFsdWUpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBjb25zdCBtaW4gPSAoX2EgPSB0aGlzLnNsaWRlclByb3BzXykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmdldCgnbWluVmFsdWUnKTtcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IChfYiA9IHRoaXMuc2xpZGVyUHJvcHNfKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuZ2V0KCdtYXhWYWx1ZScpO1xuICAgICAgICAgICAgbGV0IHYgPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmIChtaW4gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHYgPSBNYXRoLm1heCh2LCBtaW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG1heCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdiA9IE1hdGgubWluKHYsIG1heCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdjtcbiAgICAgICAgfVxuICAgICAgICBvbklucHV0Q2hhbmdlXyhlKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dEVsZW0gPSBmb3JjZUNhc3QoZS5jdXJyZW50VGFyZ2V0KTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaW5wdXRFbGVtLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVmFsdWUgPSB0aGlzLnBhcnNlcl8odmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFpc0VtcHR5KHBhcnNlZFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmFsdWUucmF3VmFsdWUgPSB0aGlzLmNvbnN0cmFpblZhbHVlXyhwYXJzZWRWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZpZXcucmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIG9uSW5wdXRLZXlEb3duXyhldikge1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IGdldFN0ZXBGb3JLZXkodGhpcy5iYXNlU3RlcF8sIGdldFZlcnRpY2FsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh0aGlzLmNvbnN0cmFpblZhbHVlXyh0aGlzLnZhbHVlLnJhd1ZhbHVlICsgc3RlcCksIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25JbnB1dEtleVVwXyhldikge1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IGdldFN0ZXBGb3JLZXkodGhpcy5iYXNlU3RlcF8sIGdldFZlcnRpY2FsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlLnJhd1ZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duXygpIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luUmF3VmFsdWVfID0gdGhpcy52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dpbmdfLnJhd1ZhbHVlID0gMDtcbiAgICAgICAgfVxuICAgICAgICBjb21wdXRlRHJhZ2dpbmdWYWx1ZV8oZGF0YSkge1xuICAgICAgICAgICAgaWYgKCFkYXRhLnBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkeCA9IGRhdGEucG9pbnQueCAtIGRhdGEuYm91bmRzLndpZHRoIC8gMjtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnN0cmFpblZhbHVlXyh0aGlzLm9yaWdpblJhd1ZhbHVlXyArIGR4ICogdGhpcy5wcm9wcy5nZXQoJ2RyYWdnaW5nU2NhbGUnKSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyTW92ZV8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLmNvbXB1dGVEcmFnZ2luZ1ZhbHVlXyhldi5kYXRhKTtcbiAgICAgICAgICAgIGlmICh2ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh2LCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2luZ18ucmF3VmFsdWUgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlIC0gdGhpcy5vcmlnaW5SYXdWYWx1ZV87XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyVXBfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCB2ID0gdGhpcy5jb21wdXRlRHJhZ2dpbmdWYWx1ZV8oZXYuZGF0YSk7XG4gICAgICAgICAgICBpZiAodiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodiwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmRyYWdnaW5nXy5yYXdWYWx1ZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkZiA9IENsYXNzTmFtZSgnc2xkJyk7XG4gICAgY2xhc3MgU2xpZGVyVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uQ2hhbmdlXyA9IHRoaXMub25DaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnByb3BzXyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMucHJvcHNfLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25DaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRmKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHRyYWNrRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRyYWNrRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRmKCd0JykpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kVGFiSW5kZXgodHJhY2tFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0cmFja0VsZW0pO1xuICAgICAgICAgICAgdGhpcy50cmFja0VsZW1lbnQgPSB0cmFja0VsZW07XG4gICAgICAgICAgICBjb25zdCBrbm9iRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGtub2JFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGYoJ2snKSk7XG4gICAgICAgICAgICB0aGlzLnRyYWNrRWxlbWVudC5hcHBlbmRDaGlsZChrbm9iRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmtub2JFbGVtZW50ID0ga25vYkVsZW07XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gY29uc3RyYWluUmFuZ2UobWFwUmFuZ2UodGhpcy52YWx1ZS5yYXdWYWx1ZSwgdGhpcy5wcm9wc18uZ2V0KCdtaW5WYWx1ZScpLCB0aGlzLnByb3BzXy5nZXQoJ21heFZhbHVlJyksIDAsIDEwMCksIDAsIDEwMCk7XG4gICAgICAgICAgICB0aGlzLmtub2JFbGVtZW50LnN0eWxlLndpZHRoID0gYCR7cH0lYDtcbiAgICAgICAgfVxuICAgICAgICBvbkNoYW5nZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFNsaWRlckNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbktleURvd25fID0gdGhpcy5vbktleURvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uS2V5VXBfID0gdGhpcy5vbktleVVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJEb3duT3JNb3ZlXyA9IHRoaXMub25Qb2ludGVyRG93bk9yTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyVXBfID0gdGhpcy5vblBvaW50ZXJVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuYmFzZVN0ZXBfID0gY29uZmlnLmJhc2VTdGVwO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgU2xpZGVyVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBwcm9wczogdGhpcy5wcm9wcyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8gPSBuZXcgUG9pbnRlckhhbmRsZXIodGhpcy52aWV3LnRyYWNrRWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbignZG93bicsIHRoaXMub25Qb2ludGVyRG93bk9yTW92ZV8pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ21vdmUnLCB0aGlzLm9uUG9pbnRlckRvd25Pck1vdmVfKTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCd1cCcsIHRoaXMub25Qb2ludGVyVXBfKTtcbiAgICAgICAgICAgIHRoaXMudmlldy50cmFja0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25LZXlEb3duXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcudHJhY2tFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5vbktleVVwXyk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlUG9pbnRlckV2ZW50XyhkLCBvcHRzKSB7XG4gICAgICAgICAgICBpZiAoIWQucG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKG1hcFJhbmdlKGNvbnN0cmFpblJhbmdlKGQucG9pbnQueCwgMCwgZC5ib3VuZHMud2lkdGgpLCAwLCBkLmJvdW5kcy53aWR0aCwgdGhpcy5wcm9wcy5nZXQoJ21pblZhbHVlJyksIHRoaXMucHJvcHMuZ2V0KCdtYXhWYWx1ZScpKSwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyRG93bk9yTW92ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlclVwXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5RG93bl8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRm9yS2V5KHRoaXMuYmFzZVN0ZXBfLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlLnJhd1ZhbHVlICsgc3RlcCwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbktleVVwXyhldikge1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IGdldFN0ZXBGb3JLZXkodGhpcy5iYXNlU3RlcF8sIGdldEhvcml6b250YWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgaWYgKHN0ZXAgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKHRoaXMudmFsdWUucmF3VmFsdWUsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJGUgPSBDbGFzc05hbWUoJ3NsZHR4dCcpO1xuICAgIGNsYXNzIFNsaWRlclRleHRWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRlKCkpO1xuICAgICAgICAgICAgY29uc3Qgc2xpZGVyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHNsaWRlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZSgncycpKTtcbiAgICAgICAgICAgIHRoaXMuc2xpZGVyVmlld18gPSBjb25maWcuc2xpZGVyVmlldztcbiAgICAgICAgICAgIHNsaWRlckVsZW0uYXBwZW5kQ2hpbGQodGhpcy5zbGlkZXJWaWV3Xy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChzbGlkZXJFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGV4dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZSgndCcpKTtcbiAgICAgICAgICAgIHRoaXMudGV4dFZpZXdfID0gY29uZmlnLnRleHRWaWV3O1xuICAgICAgICAgICAgdGV4dEVsZW0uYXBwZW5kQ2hpbGQodGhpcy50ZXh0Vmlld18uZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGV4dEVsZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgU2xpZGVyVGV4dENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMuc2xpZGVyQ18gPSBuZXcgU2xpZGVyQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBiYXNlU3RlcDogY29uZmlnLmJhc2VTdGVwLFxuICAgICAgICAgICAgICAgIHByb3BzOiBjb25maWcuc2xpZGVyUHJvcHMsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGNvbmZpZy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnRleHRDXyA9IG5ldyBOdW1iZXJUZXh0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBiYXNlU3RlcDogY29uZmlnLmJhc2VTdGVwLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogY29uZmlnLnBhcnNlcixcbiAgICAgICAgICAgICAgICBwcm9wczogY29uZmlnLnRleHRQcm9wcyxcbiAgICAgICAgICAgICAgICBzbGlkZXJQcm9wczogY29uZmlnLnNsaWRlclByb3BzLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBjb25maWcudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgU2xpZGVyVGV4dFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgc2xpZGVyVmlldzogdGhpcy5zbGlkZXJDXy52aWV3LFxuICAgICAgICAgICAgICAgIHRleHRWaWV3OiB0aGlzLnRleHRDXy52aWV3LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHNsaWRlckNvbnRyb2xsZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zbGlkZXJDXztcbiAgICAgICAgfVxuICAgICAgICBnZXQgdGV4dENvbnRyb2xsZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0Q187XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3cml0ZVByaW1pdGl2ZSh0YXJnZXQsIHZhbHVlKSB7XG4gICAgICAgIHRhcmdldC53cml0ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VMaXN0T3B0aW9ucyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gcC5yZXF1aXJlZC5hcnJheShwLnJlcXVpcmVkLm9iamVjdCh7XG4gICAgICAgICAgICAgICAgdGV4dDogcC5yZXF1aXJlZC5zdHJpbmcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHAucmVxdWlyZWQucmF3LFxuICAgICAgICAgICAgfSkpKHZhbHVlKS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHAucmVxdWlyZWQucmF3KHZhbHVlKVxuICAgICAgICAgICAgICAgIC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZVBpY2tlckxheW91dCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT09ICdpbmxpbmUnIHx8IHZhbHVlID09PSAncG9wdXAnKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgcmV0dXJuIHAucmVxdWlyZWQub2JqZWN0KHtcbiAgICAgICAgICAgIG1heDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICBtaW46IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgc3RlcDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgIH0pKHZhbHVlKS52YWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm9ybWFsaXplTGlzdE9wdGlvbnMob3B0aW9ucykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgICAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaCgodGV4dCkgPT4ge1xuICAgICAgICAgICAgaXRlbXMucHVzaCh7IHRleHQ6IHRleHQsIHZhbHVlOiBvcHRpb25zW3RleHRdIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVMaXN0Q29uc3RyYWludChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiAhaXNFbXB0eShvcHRpb25zKVxuICAgICAgICAgICAgPyBuZXcgTGlzdENvbnN0cmFpbnQobm9ybWFsaXplTGlzdE9wdGlvbnMoZm9yY2VDYXN0KG9wdGlvbnMpKSlcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZExpc3RJdGVtcyhjb25zdHJhaW50KSB7XG4gICAgICAgIGNvbnN0IGMgPSBjb25zdHJhaW50XG4gICAgICAgICAgICA/IGZpbmRDb25zdHJhaW50KGNvbnN0cmFpbnQsIExpc3RDb25zdHJhaW50KVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBpZiAoIWMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjLm9wdGlvbnM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRTdGVwKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgY29uc3QgYyA9IGNvbnN0cmFpbnQgPyBmaW5kQ29uc3RyYWludChjb25zdHJhaW50LCBTdGVwQ29uc3RyYWludCkgOiBudWxsO1xuICAgICAgICBpZiAoIWMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjLnN0ZXA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN1aXRhYmxlRGVjaW1hbERpZ2l0cyhjb25zdHJhaW50LCByYXdWYWx1ZSkge1xuICAgICAgICBjb25zdCBzYyA9IGNvbnN0cmFpbnQgJiYgZmluZENvbnN0cmFpbnQoY29uc3RyYWludCwgU3RlcENvbnN0cmFpbnQpO1xuICAgICAgICBpZiAoc2MpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXREZWNpbWFsRGlnaXRzKHNjLnN0ZXApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBNYXRoLm1heChnZXREZWNpbWFsRGlnaXRzKHJhd1ZhbHVlKSwgMik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEJhc2VTdGVwKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgY29uc3Qgc3RlcCA9IGZpbmRTdGVwKGNvbnN0cmFpbnQpO1xuICAgICAgICByZXR1cm4gc3RlcCAhPT0gbnVsbCAmJiBzdGVwICE9PSB2b2lkIDAgPyBzdGVwIDogMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlKGNvbnN0cmFpbnQsIHJhd1ZhbHVlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3Qgc2MgPSBjb25zdHJhaW50ICYmIGZpbmRDb25zdHJhaW50KGNvbnN0cmFpbnQsIFN0ZXBDb25zdHJhaW50KTtcbiAgICAgICAgY29uc3QgYmFzZSA9IE1hdGguYWJzKChfYSA9IHNjID09PSBudWxsIHx8IHNjID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzYy5zdGVwKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiByYXdWYWx1ZSk7XG4gICAgICAgIHJldHVybiBiYXNlID09PSAwID8gMC4xIDogTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2cxMChiYXNlKSkgLSAxKTtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkZCA9IENsYXNzTmFtZSgnY2tiJyk7XG4gICAgY2xhc3MgQ2hlY2tib3hWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZCgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBsYWJlbEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcbiAgICAgICAgICAgIGxhYmVsRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRkKCdsJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGxhYmVsRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBpbnB1dEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRkKCdpJykpO1xuICAgICAgICAgICAgaW5wdXRFbGVtLnR5cGUgPSAnY2hlY2tib3gnO1xuICAgICAgICAgICAgbGFiZWxFbGVtLmFwcGVuZENoaWxkKGlucHV0RWxlbSk7XG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudCA9IGlucHV0RWxlbTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKHRoaXMuaW5wdXRFbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgd3JhcHBlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZCgndycpKTtcbiAgICAgICAgICAgIGxhYmVsRWxlbS5hcHBlbmRDaGlsZCh3cmFwcGVyRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBtYXJrRWxlbSA9IGNyZWF0ZVN2Z0ljb25FbGVtZW50KGRvYywgJ2NoZWNrJyk7XG4gICAgICAgICAgICB3cmFwcGVyRWxlbS5hcHBlbmRDaGlsZChtYXJrRWxlbSk7XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LmNoZWNrZWQgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBDaGVja2JveENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbklucHV0Q2hhbmdlXyA9IHRoaXMub25JbnB1dENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgQ2hlY2tib3hWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5vbklucHV0Q2hhbmdlXyk7XG4gICAgICAgIH1cbiAgICAgICAgb25JbnB1dENoYW5nZV8oZSkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtID0gZm9yY2VDYXN0KGUuY3VycmVudFRhcmdldCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlID0gaW5wdXRFbGVtLmNoZWNrZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50JDYocGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gW107XG4gICAgICAgIGNvbnN0IGxjID0gY3JlYXRlTGlzdENvbnN0cmFpbnQocGFyYW1zLm9wdGlvbnMpO1xuICAgICAgICBpZiAobGMpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2gobGMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ29tcG9zaXRlQ29uc3RyYWludChjb25zdHJhaW50cyk7XG4gICAgfVxuICAgIGNvbnN0IEJvb2xlYW5JbnB1dFBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdpbnB1dC1ib29sJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlTGlzdE9wdGlvbnMpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKF9hcmdzKSA9PiBib29sRnJvbVVua25vd24sXG4gICAgICAgICAgICBjb25zdHJhaW50OiAoYXJncykgPT4gY3JlYXRlQ29uc3RyYWludCQ2KGFyZ3MucGFyYW1zKSxcbiAgICAgICAgICAgIHdyaXRlcjogKF9hcmdzKSA9PiB3cml0ZVByaW1pdGl2ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IGFyZ3MuZG9jdW1lbnQ7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ3MudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBjID0gYXJncy5jb25zdHJhaW50O1xuICAgICAgICAgICAgaWYgKGMgJiYgZmluZENvbnN0cmFpbnQoYywgTGlzdENvbnN0cmFpbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMaXN0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogKF9hID0gZmluZExpc3RJdGVtcyhjKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10sXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IENoZWNrYm94Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBjbGFzc05hbWUkYyA9IENsYXNzTmFtZSgnY29sJyk7XG4gICAgY2xhc3MgQ29sb3JWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRjKCkpO1xuICAgICAgICAgICAgY29uZmlnLmZvbGRhYmxlLmJpbmRFeHBhbmRlZENsYXNzKHRoaXMuZWxlbWVudCwgY2xhc3NOYW1lJGModW5kZWZpbmVkLCAnZXhwYW5kZWQnKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAoY29uZmlnLmZvbGRhYmxlLCAnY29tcGxldGVkJywgdmFsdWVUb0NsYXNzTmFtZSh0aGlzLmVsZW1lbnQsIGNsYXNzTmFtZSRjKHVuZGVmaW5lZCwgJ2NwbCcpKSk7XG4gICAgICAgICAgICBjb25zdCBoZWFkRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGMoJ2gnKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaGVhZEVsZW0pO1xuICAgICAgICAgICAgY29uc3Qgc3dhdGNoRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHN3YXRjaEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYygncycpKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmFwcGVuZENoaWxkKHN3YXRjaEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5zd2F0Y2hFbGVtZW50ID0gc3dhdGNoRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGV4dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYygndCcpKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmFwcGVuZENoaWxkKHRleHRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudGV4dEVsZW1lbnQgPSB0ZXh0RWxlbTtcbiAgICAgICAgICAgIGlmIChjb25maWcucGlja2VyTGF5b3V0ID09PSAnaW5saW5lJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpY2tlckVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgcGlja2VyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRjKCdwJykpO1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChwaWNrZXJFbGVtKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlckVsZW1lbnQgPSBwaWNrZXJFbGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJnYlRvSHNsSW50KHIsIGcsIGIpIHtcbiAgICAgICAgY29uc3QgcnAgPSBjb25zdHJhaW5SYW5nZShyIC8gMjU1LCAwLCAxKTtcbiAgICAgICAgY29uc3QgZ3AgPSBjb25zdHJhaW5SYW5nZShnIC8gMjU1LCAwLCAxKTtcbiAgICAgICAgY29uc3QgYnAgPSBjb25zdHJhaW5SYW5nZShiIC8gMjU1LCAwLCAxKTtcbiAgICAgICAgY29uc3QgY21heCA9IE1hdGgubWF4KHJwLCBncCwgYnApO1xuICAgICAgICBjb25zdCBjbWluID0gTWF0aC5taW4ocnAsIGdwLCBicCk7XG4gICAgICAgIGNvbnN0IGMgPSBjbWF4IC0gY21pbjtcbiAgICAgICAgbGV0IGggPSAwO1xuICAgICAgICBsZXQgcyA9IDA7XG4gICAgICAgIGNvbnN0IGwgPSAoY21pbiArIGNtYXgpIC8gMjtcbiAgICAgICAgaWYgKGMgIT09IDApIHtcbiAgICAgICAgICAgIHMgPSBjIC8gKDEgLSBNYXRoLmFicyhjbWF4ICsgY21pbiAtIDEpKTtcbiAgICAgICAgICAgIGlmIChycCA9PT0gY21heCkge1xuICAgICAgICAgICAgICAgIGggPSAoZ3AgLSBicCkgLyBjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZ3AgPT09IGNtYXgpIHtcbiAgICAgICAgICAgICAgICBoID0gMiArIChicCAtIHJwKSAvIGM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBoID0gNCArIChycCAtIGdwKSAvIGM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoID0gaCAvIDYgKyAoaCA8IDAgPyAxIDogMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtoICogMzYwLCBzICogMTAwLCBsICogMTAwXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaHNsVG9SZ2JJbnQoaCwgcywgbCkge1xuICAgICAgICBjb25zdCBocCA9ICgoaCAlIDM2MCkgKyAzNjApICUgMzYwO1xuICAgICAgICBjb25zdCBzcCA9IGNvbnN0cmFpblJhbmdlKHMgLyAxMDAsIDAsIDEpO1xuICAgICAgICBjb25zdCBscCA9IGNvbnN0cmFpblJhbmdlKGwgLyAxMDAsIDAsIDEpO1xuICAgICAgICBjb25zdCBjID0gKDEgLSBNYXRoLmFicygyICogbHAgLSAxKSkgKiBzcDtcbiAgICAgICAgY29uc3QgeCA9IGMgKiAoMSAtIE1hdGguYWJzKCgoaHAgLyA2MCkgJSAyKSAtIDEpKTtcbiAgICAgICAgY29uc3QgbSA9IGxwIC0gYyAvIDI7XG4gICAgICAgIGxldCBycCwgZ3AsIGJwO1xuICAgICAgICBpZiAoaHAgPj0gMCAmJiBocCA8IDYwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbYywgeCwgMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gNjAgJiYgaHAgPCAxMjApIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFt4LCBjLCAwXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChocCA+PSAxMjAgJiYgaHAgPCAxODApIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFswLCBjLCB4XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChocCA+PSAxODAgJiYgaHAgPCAyNDApIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFswLCB4LCBjXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChocCA+PSAyNDAgJiYgaHAgPCAzMDApIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFt4LCAwLCBjXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFtjLCAwLCB4XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWyhycCArIG0pICogMjU1LCAoZ3AgKyBtKSAqIDI1NSwgKGJwICsgbSkgKiAyNTVdO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZ2JUb0hzdkludChyLCBnLCBiKSB7XG4gICAgICAgIGNvbnN0IHJwID0gY29uc3RyYWluUmFuZ2UociAvIDI1NSwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGdwID0gY29uc3RyYWluUmFuZ2UoZyAvIDI1NSwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGJwID0gY29uc3RyYWluUmFuZ2UoYiAvIDI1NSwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGNtYXggPSBNYXRoLm1heChycCwgZ3AsIGJwKTtcbiAgICAgICAgY29uc3QgY21pbiA9IE1hdGgubWluKHJwLCBncCwgYnApO1xuICAgICAgICBjb25zdCBkID0gY21heCAtIGNtaW47XG4gICAgICAgIGxldCBoO1xuICAgICAgICBpZiAoZCA9PT0gMCkge1xuICAgICAgICAgICAgaCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY21heCA9PT0gcnApIHtcbiAgICAgICAgICAgIGggPSA2MCAqICgoKCgoZ3AgLSBicCkgLyBkKSAlIDYpICsgNikgJSA2KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjbWF4ID09PSBncCkge1xuICAgICAgICAgICAgaCA9IDYwICogKChicCAtIHJwKSAvIGQgKyAyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGggPSA2MCAqICgocnAgLSBncCkgLyBkICsgNCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcyA9IGNtYXggPT09IDAgPyAwIDogZCAvIGNtYXg7XG4gICAgICAgIGNvbnN0IHYgPSBjbWF4O1xuICAgICAgICByZXR1cm4gW2gsIHMgKiAxMDAsIHYgKiAxMDBdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoc3ZUb1JnYkludChoLCBzLCB2KSB7XG4gICAgICAgIGNvbnN0IGhwID0gbG9vcFJhbmdlKGgsIDM2MCk7XG4gICAgICAgIGNvbnN0IHNwID0gY29uc3RyYWluUmFuZ2UocyAvIDEwMCwgMCwgMSk7XG4gICAgICAgIGNvbnN0IHZwID0gY29uc3RyYWluUmFuZ2UodiAvIDEwMCwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGMgPSB2cCAqIHNwO1xuICAgICAgICBjb25zdCB4ID0gYyAqICgxIC0gTWF0aC5hYnMoKChocCAvIDYwKSAlIDIpIC0gMSkpO1xuICAgICAgICBjb25zdCBtID0gdnAgLSBjO1xuICAgICAgICBsZXQgcnAsIGdwLCBicDtcbiAgICAgICAgaWYgKGhwID49IDAgJiYgaHAgPCA2MCkge1xuICAgICAgICAgICAgW3JwLCBncCwgYnBdID0gW2MsIHgsIDBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhwID49IDYwICYmIGhwIDwgMTIwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbeCwgYywgMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gMTIwICYmIGhwIDwgMTgwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbMCwgYywgeF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gMTgwICYmIGhwIDwgMjQwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbMCwgeCwgY107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gMjQwICYmIGhwIDwgMzAwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbeCwgMCwgY107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbYywgMCwgeF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsocnAgKyBtKSAqIDI1NSwgKGdwICsgbSkgKiAyNTUsIChicCArIG0pICogMjU1XTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaHNsVG9Ic3ZJbnQoaCwgcywgbCkge1xuICAgICAgICBjb25zdCBzZCA9IGwgKyAocyAqICgxMDAgLSBNYXRoLmFicygyICogbCAtIDEwMCkpKSAvICgyICogMTAwKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGgsXG4gICAgICAgICAgICBzZCAhPT0gMCA/IChzICogKDEwMCAtIE1hdGguYWJzKDIgKiBsIC0gMTAwKSkpIC8gc2QgOiAwLFxuICAgICAgICAgICAgbCArIChzICogKDEwMCAtIE1hdGguYWJzKDIgKiBsIC0gMTAwKSkpIC8gKDIgKiAxMDApLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoc3ZUb0hzbEludChoLCBzLCB2KSB7XG4gICAgICAgIGNvbnN0IHNkID0gMTAwIC0gTWF0aC5hYnMoKHYgKiAoMjAwIC0gcykpIC8gMTAwIC0gMTAwKTtcbiAgICAgICAgcmV0dXJuIFtoLCBzZCAhPT0gMCA/IChzICogdikgLyBzZCA6IDAsICh2ICogKDIwMCAtIHMpKSAvICgyICogMTAwKV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFscGhhQ29tcG9uZW50KGNvbXBzKSB7XG4gICAgICAgIHJldHVybiBbY29tcHNbMF0sIGNvbXBzWzFdLCBjb21wc1syXV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFwcGVuZEFscGhhQ29tcG9uZW50KGNvbXBzLCBhbHBoYSkge1xuICAgICAgICByZXR1cm4gW2NvbXBzWzBdLCBjb21wc1sxXSwgY29tcHNbMl0sIGFscGhhXTtcbiAgICB9XG4gICAgY29uc3QgTU9ERV9DT05WRVJURVJfTUFQID0ge1xuICAgICAgICBoc2w6IHtcbiAgICAgICAgICAgIGhzbDogKGgsIHMsIGwpID0+IFtoLCBzLCBsXSxcbiAgICAgICAgICAgIGhzdjogaHNsVG9Ic3ZJbnQsXG4gICAgICAgICAgICByZ2I6IGhzbFRvUmdiSW50LFxuICAgICAgICB9LFxuICAgICAgICBoc3Y6IHtcbiAgICAgICAgICAgIGhzbDogaHN2VG9Ic2xJbnQsXG4gICAgICAgICAgICBoc3Y6IChoLCBzLCB2KSA9PiBbaCwgcywgdl0sXG4gICAgICAgICAgICByZ2I6IGhzdlRvUmdiSW50LFxuICAgICAgICB9LFxuICAgICAgICByZ2I6IHtcbiAgICAgICAgICAgIGhzbDogcmdiVG9Ic2xJbnQsXG4gICAgICAgICAgICBoc3Y6IHJnYlRvSHN2SW50LFxuICAgICAgICAgICAgcmdiOiAociwgZywgYikgPT4gW3IsIGcsIGJdLFxuICAgICAgICB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0Q29sb3JNYXhDb21wb25lbnRzKG1vZGUsIHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHR5cGUgPT09ICdmbG9hdCcgPyAxIDogbW9kZSA9PT0gJ3JnYicgPyAyNTUgOiAzNjAsXG4gICAgICAgICAgICB0eXBlID09PSAnZmxvYXQnID8gMSA6IG1vZGUgPT09ICdyZ2InID8gMjU1IDogMTAwLFxuICAgICAgICAgICAgdHlwZSA9PT0gJ2Zsb2F0JyA/IDEgOiBtb2RlID09PSAncmdiJyA/IDI1NSA6IDEwMCxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29uc3RyYWluQ29sb3JDb21wb25lbnRzKGNvbXBvbmVudHMsIG1vZGUsIHR5cGUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBtcyA9IGdldENvbG9yTWF4Q29tcG9uZW50cyhtb2RlLCB0eXBlKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG1vZGUgPT09ICdyZ2InXG4gICAgICAgICAgICAgICAgPyBjb25zdHJhaW5SYW5nZShjb21wb25lbnRzWzBdLCAwLCBtc1swXSlcbiAgICAgICAgICAgICAgICA6IGxvb3BSYW5nZShjb21wb25lbnRzWzBdLCBtc1swXSksXG4gICAgICAgICAgICBjb25zdHJhaW5SYW5nZShjb21wb25lbnRzWzFdLCAwLCBtc1sxXSksXG4gICAgICAgICAgICBjb25zdHJhaW5SYW5nZShjb21wb25lbnRzWzJdLCAwLCBtc1syXSksXG4gICAgICAgICAgICBjb25zdHJhaW5SYW5nZSgoX2EgPSBjb21wb25lbnRzWzNdKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAxLCAwLCAxKSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29udmVydENvbG9yVHlwZShjb21wcywgbW9kZSwgZnJvbSwgdG8pIHtcbiAgICAgICAgY29uc3QgZm1zID0gZ2V0Q29sb3JNYXhDb21wb25lbnRzKG1vZGUsIGZyb20pO1xuICAgICAgICBjb25zdCB0bXMgPSBnZXRDb2xvck1heENvbXBvbmVudHMobW9kZSwgdG8pO1xuICAgICAgICByZXR1cm4gY29tcHMubWFwKChjLCBpbmRleCkgPT4gKGMgLyBmbXNbaW5kZXhdKSAqIHRtc1tpbmRleF0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb252ZXJ0Q29sb3IoY29tcG9uZW50cywgZnJvbSwgdG8pIHtcbiAgICAgICAgY29uc3QgaW50Q29tcHMgPSBjb252ZXJ0Q29sb3JUeXBlKGNvbXBvbmVudHMsIGZyb20ubW9kZSwgZnJvbS50eXBlLCAnaW50Jyk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IE1PREVfQ09OVkVSVEVSX01BUFtmcm9tLm1vZGVdW3RvLm1vZGVdKC4uLmludENvbXBzKTtcbiAgICAgICAgcmV0dXJuIGNvbnZlcnRDb2xvclR5cGUocmVzdWx0LCB0by5tb2RlLCAnaW50JywgdG8udHlwZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gaXNSZ2JDb2xvckNvbXBvbmVudChvYmosIGtleSkge1xuICAgICAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgaXNFbXB0eShvYmopKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtleSBpbiBvYmogJiYgdHlwZW9mIG9ialtrZXldID09PSAnbnVtYmVyJztcbiAgICB9XG4gICAgY2xhc3MgQ29sb3Ige1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb21wcywgbW9kZSwgdHlwZSA9ICdpbnQnKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGUgPSBtb2RlO1xuICAgICAgICAgICAgdGhpcy50eXBlID0gdHlwZTtcbiAgICAgICAgICAgIHRoaXMuY29tcHNfID0gY29uc3RyYWluQ29sb3JDb21wb25lbnRzKGNvbXBzLCBtb2RlLCB0eXBlKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgYmxhY2sodHlwZSA9ICdpbnQnKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKFswLCAwLCAwXSwgJ3JnYicsIHR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBmcm9tT2JqZWN0KG9iaiwgdHlwZSA9ICdpbnQnKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wcyA9ICdhJyBpbiBvYmogPyBbb2JqLnIsIG9iai5nLCBvYmouYiwgb2JqLmFdIDogW29iai5yLCBvYmouZywgb2JqLmJdO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihjb21wcywgJ3JnYicsIHR5cGUpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyB0b1JnYmFPYmplY3QoY29sb3IsIHR5cGUgPSAnaW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIGNvbG9yLnRvUmdiYU9iamVjdCh0eXBlKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgaXNSZ2JDb2xvck9iamVjdChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiAoaXNSZ2JDb2xvckNvbXBvbmVudChvYmosICdyJykgJiZcbiAgICAgICAgICAgICAgICBpc1JnYkNvbG9yQ29tcG9uZW50KG9iaiwgJ2cnKSAmJlxuICAgICAgICAgICAgICAgIGlzUmdiQ29sb3JDb21wb25lbnQob2JqLCAnYicpKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgaXNSZ2JhQ29sb3JPYmplY3Qob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1JnYkNvbG9yT2JqZWN0KG9iaikgJiYgaXNSZ2JDb2xvckNvbXBvbmVudChvYmosICdhJyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGlzQ29sb3JPYmplY3Qob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1JnYkNvbG9yT2JqZWN0KG9iaik7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGVxdWFscyh2MSwgdjIpIHtcbiAgICAgICAgICAgIGlmICh2MS5tb2RlICE9PSB2Mi5tb2RlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcHMxID0gdjEuY29tcHNfO1xuICAgICAgICAgICAgY29uc3QgY29tcHMyID0gdjIuY29tcHNfO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21wczEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoY29tcHMxW2ldICE9PSBjb21wczJbaV0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGdldENvbXBvbmVudHMob3B0X21vZGUsIHR5cGUgPSAnaW50Jykge1xuICAgICAgICAgICAgcmV0dXJuIGFwcGVuZEFscGhhQ29tcG9uZW50KGNvbnZlcnRDb2xvcihyZW1vdmVBbHBoYUNvbXBvbmVudCh0aGlzLmNvbXBzXyksIHsgbW9kZTogdGhpcy5tb2RlLCB0eXBlOiB0aGlzLnR5cGUgfSwgeyBtb2RlOiBvcHRfbW9kZSAhPT0gbnVsbCAmJiBvcHRfbW9kZSAhPT0gdm9pZCAwID8gb3B0X21vZGUgOiB0aGlzLm1vZGUsIHR5cGUgfSksIHRoaXMuY29tcHNfWzNdKTtcbiAgICAgICAgfVxuICAgICAgICB0b1JnYmFPYmplY3QodHlwZSA9ICdpbnQnKSB7XG4gICAgICAgICAgICBjb25zdCByZ2JDb21wcyA9IHRoaXMuZ2V0Q29tcG9uZW50cygncmdiJywgdHlwZSk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHI6IHJnYkNvbXBzWzBdLFxuICAgICAgICAgICAgICAgIGc6IHJnYkNvbXBzWzFdLFxuICAgICAgICAgICAgICAgIGI6IHJnYkNvbXBzWzJdLFxuICAgICAgICAgICAgICAgIGE6IHJnYkNvbXBzWzNdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRiID0gQ2xhc3NOYW1lKCdjb2xwJyk7XG4gICAgY2xhc3MgQ29sb3JQaWNrZXJWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuYWxwaGFWaWV3c18gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGIoKSk7XG4gICAgICAgICAgICBjb25zdCBoc3ZFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgaHN2RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRiKCdoc3YnKSk7XG4gICAgICAgICAgICBjb25zdCBzdkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBzdkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYignc3YnKSk7XG4gICAgICAgICAgICB0aGlzLnN2UGFsZXR0ZVZpZXdfID0gY29uZmlnLnN2UGFsZXR0ZVZpZXc7XG4gICAgICAgICAgICBzdkVsZW0uYXBwZW5kQ2hpbGQodGhpcy5zdlBhbGV0dGVWaWV3Xy5lbGVtZW50KTtcbiAgICAgICAgICAgIGhzdkVsZW0uYXBwZW5kQ2hpbGQoc3ZFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGhFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgaEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYignaCcpKTtcbiAgICAgICAgICAgIHRoaXMuaFBhbGV0dGVWaWV3XyA9IGNvbmZpZy5oUGFsZXR0ZVZpZXc7XG4gICAgICAgICAgICBoRWxlbS5hcHBlbmRDaGlsZCh0aGlzLmhQYWxldHRlVmlld18uZWxlbWVudCk7XG4gICAgICAgICAgICBoc3ZFbGVtLmFwcGVuZENoaWxkKGhFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChoc3ZFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHJnYkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICByZ2JFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGIoJ3JnYicpKTtcbiAgICAgICAgICAgIHRoaXMudGV4dFZpZXdfID0gY29uZmlnLnRleHRWaWV3O1xuICAgICAgICAgICAgcmdiRWxlbS5hcHBlbmRDaGlsZCh0aGlzLnRleHRWaWV3Xy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChyZ2JFbGVtKTtcbiAgICAgICAgICAgIGlmIChjb25maWcuYWxwaGFWaWV3cykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWxwaGFWaWV3c18gPSB7XG4gICAgICAgICAgICAgICAgICAgIHBhbGV0dGU6IGNvbmZpZy5hbHBoYVZpZXdzLnBhbGV0dGUsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGNvbmZpZy5hbHBoYVZpZXdzLnRleHQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBhRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBhRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRiKCdhJykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFwRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBhcEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYignYXAnKSk7XG4gICAgICAgICAgICAgICAgYXBFbGVtLmFwcGVuZENoaWxkKHRoaXMuYWxwaGFWaWV3c18ucGFsZXR0ZS5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBhRWxlbS5hcHBlbmRDaGlsZChhcEVsZW0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBhdEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYignYXQnKSk7XG4gICAgICAgICAgICAgICAgYXRFbGVtLmFwcGVuZENoaWxkKHRoaXMuYWxwaGFWaWV3c18udGV4dC5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBhRWxlbS5hcHBlbmRDaGlsZChhdEVsZW0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChhRWxlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGFsbEZvY3VzYWJsZUVsZW1lbnRzKCkge1xuICAgICAgICAgICAgY29uc3QgZWxlbXMgPSBbXG4gICAgICAgICAgICAgICAgdGhpcy5zdlBhbGV0dGVWaWV3Xy5lbGVtZW50LFxuICAgICAgICAgICAgICAgIHRoaXMuaFBhbGV0dGVWaWV3Xy5lbGVtZW50LFxuICAgICAgICAgICAgICAgIHRoaXMudGV4dFZpZXdfLm1vZGVTZWxlY3RFbGVtZW50LFxuICAgICAgICAgICAgICAgIC4uLnRoaXMudGV4dFZpZXdfLnRleHRWaWV3cy5tYXAoKHYpID0+IHYuaW5wdXRFbGVtZW50KSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAodGhpcy5hbHBoYVZpZXdzXykge1xuICAgICAgICAgICAgICAgIGVsZW1zLnB1c2godGhpcy5hbHBoYVZpZXdzXy5wYWxldHRlLmVsZW1lbnQsIHRoaXMuYWxwaGFWaWV3c18udGV4dC5pbnB1dEVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVsZW1zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VDb2xvclR5cGUodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSAnaW50JyA/ICdpbnQnIDogdmFsdWUgPT09ICdmbG9hdCcgPyAnZmxvYXQnIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZUNvbG9ySW5wdXRQYXJhbXMocGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICByZXR1cm4gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICBhbHBoYTogcC5vcHRpb25hbC5ib29sZWFuLFxuICAgICAgICAgICAgY29sb3I6IHAub3B0aW9uYWwub2JqZWN0KHtcbiAgICAgICAgICAgICAgICBhbHBoYTogcC5vcHRpb25hbC5ib29sZWFuLFxuICAgICAgICAgICAgICAgIHR5cGU6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlQ29sb3JUeXBlKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZXhwYW5kZWQ6IHAub3B0aW9uYWwuYm9vbGVhbixcbiAgICAgICAgICAgIHBpY2tlcjogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQaWNrZXJMYXlvdXQpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0QmFzZVN0ZXBGb3JDb2xvcihmb3JBbHBoYSkge1xuICAgICAgICByZXR1cm4gZm9yQWxwaGEgPyAwLjEgOiAxO1xuICAgIH1cbiAgICBmdW5jdGlvbiBleHRyYWN0Q29sb3JUeXBlKHBhcmFtcykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHJldHVybiAoX2EgPSBwYXJhbXMuY29sb3IpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS50eXBlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVxdWFsc1N0cmluZ0NvbG9yRm9ybWF0KGYxLCBmMikge1xuICAgICAgICByZXR1cm4gKGYxLmFscGhhID09PSBmMi5hbHBoYSAmJlxuICAgICAgICAgICAgZjEubW9kZSA9PT0gZjIubW9kZSAmJlxuICAgICAgICAgICAgZjEubm90YXRpb24gPT09IGYyLm5vdGF0aW9uICYmXG4gICAgICAgICAgICBmMS50eXBlID09PSBmMi50eXBlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UodGV4dCwgbWF4VmFsdWUpIHtcbiAgICAgICAgY29uc3QgbSA9IHRleHQubWF0Y2goL14oLispJSQvKTtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5taW4ocGFyc2VGbG9hdCh0ZXh0KSwgbWF4VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBNYXRoLm1pbihwYXJzZUZsb2F0KG1bMV0pICogMC4wMSAqIG1heFZhbHVlLCBtYXhWYWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IEFOR0xFX1RPX0RFR19NQVAgPSB7XG4gICAgICAgIGRlZzogKGFuZ2xlKSA9PiBhbmdsZSxcbiAgICAgICAgZ3JhZDogKGFuZ2xlKSA9PiAoYW5nbGUgKiAzNjApIC8gNDAwLFxuICAgICAgICByYWQ6IChhbmdsZSkgPT4gKGFuZ2xlICogMzYwKSAvICgyICogTWF0aC5QSSksXG4gICAgICAgIHR1cm46IChhbmdsZSkgPT4gYW5nbGUgKiAzNjAsXG4gICAgfTtcbiAgICBmdW5jdGlvbiBwYXJzZUNzc051bWJlck9yQW5nbGUodGV4dCkge1xuICAgICAgICBjb25zdCBtID0gdGV4dC5tYXRjaCgvXihbMC05Ll0rPykoZGVnfGdyYWR8cmFkfHR1cm4pJC8pO1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHRleHQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGFuZ2xlID0gcGFyc2VGbG9hdChtWzFdKTtcbiAgICAgICAgY29uc3QgdW5pdCA9IG1bMl07XG4gICAgICAgIHJldHVybiBBTkdMRV9UT19ERUdfTUFQW3VuaXRdKGFuZ2xlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VGdW5jdGlvbmFsUmdiQ29sb3JDb21wb25lbnRzKHRleHQpIHtcbiAgICAgICAgY29uc3QgbSA9IHRleHQubWF0Y2goL15yZ2JcXChcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKlxcKSQvKTtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wcyA9IFtcbiAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bMV0sIDI1NSksXG4gICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzJdLCAyNTUpLFxuICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVszXSwgMjU1KSxcbiAgICAgICAgXTtcbiAgICAgICAgaWYgKGlzTmFOKGNvbXBzWzBdKSB8fCBpc05hTihjb21wc1sxXSkgfHwgaXNOYU4oY29tcHNbMl0pKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29tcHM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZ1bmN0aW9uYWxSZ2JDb2xvclBhcnNlcih0eXBlKSB7XG4gICAgICAgIHJldHVybiAodGV4dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcHMgPSBwYXJzZUZ1bmN0aW9uYWxSZ2JDb2xvckNvbXBvbmVudHModGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gY29tcHMgPyBuZXcgQ29sb3IoY29tcHMsICdyZ2InLCB0eXBlKSA6IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlRnVuY3Rpb25hbFJnYmFDb2xvckNvbXBvbmVudHModGV4dCkge1xuICAgICAgICBjb25zdCBtID0gdGV4dC5tYXRjaCgvXnJnYmFcXChcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqXFwpJC8pO1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbXBzID0gW1xuICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVsxXSwgMjU1KSxcbiAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bMl0sIDI1NSksXG4gICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzNdLCAyNTUpLFxuICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVs0XSwgMSksXG4gICAgICAgIF07XG4gICAgICAgIGlmIChpc05hTihjb21wc1swXSkgfHxcbiAgICAgICAgICAgIGlzTmFOKGNvbXBzWzFdKSB8fFxuICAgICAgICAgICAgaXNOYU4oY29tcHNbMl0pIHx8XG4gICAgICAgICAgICBpc05hTihjb21wc1szXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wcztcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb25hbFJnYmFDb2xvclBhcnNlcih0eXBlKSB7XG4gICAgICAgIHJldHVybiAodGV4dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcHMgPSBwYXJzZUZ1bmN0aW9uYWxSZ2JhQ29sb3JDb21wb25lbnRzKHRleHQpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbXBzID8gbmV3IENvbG9yKGNvbXBzLCAncmdiJywgdHlwZSkgOiBudWxsO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZUhzbENvbG9yQ29tcG9uZW50cyh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0Lm1hdGNoKC9eaHNsXFwoXFxzKihbMC05QS1GYS1mLl0rKD86ZGVnfGdyYWR8cmFkfHR1cm4pPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKlxcKSQvKTtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wcyA9IFtcbiAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JBbmdsZShtWzFdKSxcbiAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bMl0sIDEwMCksXG4gICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzNdLCAxMDApLFxuICAgICAgICBdO1xuICAgICAgICBpZiAoaXNOYU4oY29tcHNbMF0pIHx8IGlzTmFOKGNvbXBzWzFdKSB8fCBpc05hTihjb21wc1syXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wcztcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlSHNsQ29sb3JQYXJzZXIodHlwZSkge1xuICAgICAgICByZXR1cm4gKHRleHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBzID0gcGFyc2VIc2xDb2xvckNvbXBvbmVudHModGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gY29tcHMgPyBuZXcgQ29sb3IoY29tcHMsICdoc2wnLCB0eXBlKSA6IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlSHNsYUNvbG9yQ29tcG9uZW50cyh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0Lm1hdGNoKC9eaHNsYVxcKFxccyooWzAtOUEtRmEtZi5dKyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKlxcKSQvKTtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wcyA9IFtcbiAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JBbmdsZShtWzFdKSxcbiAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bMl0sIDEwMCksXG4gICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzNdLCAxMDApLFxuICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVs0XSwgMSksXG4gICAgICAgIF07XG4gICAgICAgIGlmIChpc05hTihjb21wc1swXSkgfHxcbiAgICAgICAgICAgIGlzTmFOKGNvbXBzWzFdKSB8fFxuICAgICAgICAgICAgaXNOYU4oY29tcHNbMl0pIHx8XG4gICAgICAgICAgICBpc05hTihjb21wc1szXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wcztcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlSHNsYUNvbG9yUGFyc2VyKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuICh0ZXh0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wcyA9IHBhcnNlSHNsYUNvbG9yQ29tcG9uZW50cyh0ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiBjb21wcyA/IG5ldyBDb2xvcihjb21wcywgJ2hzbCcsIHR5cGUpIDogbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VIZXhSZ2JDb2xvckNvbXBvbmVudHModGV4dCkge1xuICAgICAgICBjb25zdCBtUmdiID0gdGV4dC5tYXRjaCgvXiMoWzAtOUEtRmEtZl0pKFswLTlBLUZhLWZdKShbMC05QS1GYS1mXSkkLyk7XG4gICAgICAgIGlmIChtUmdiKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbMV0gKyBtUmdiWzFdLCAxNiksXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQobVJnYlsyXSArIG1SZ2JbMl0sIDE2KSxcbiAgICAgICAgICAgICAgICBwYXJzZUludChtUmdiWzNdICsgbVJnYlszXSwgMTYpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtUnJnZ2JiID0gdGV4dC5tYXRjaCgvXig/OiN8MHgpKFswLTlBLUZhLWZdezJ9KShbMC05QS1GYS1mXXsyfSkoWzAtOUEtRmEtZl17Mn0pJC8pO1xuICAgICAgICBpZiAobVJyZ2diYikge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBwYXJzZUludChtUnJnZ2JiWzFdLCAxNiksXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQobVJyZ2diYlsyXSwgMTYpLFxuICAgICAgICAgICAgICAgIHBhcnNlSW50KG1ScmdnYmJbM10sIDE2KSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlSGV4UmdiQ29sb3IodGV4dCkge1xuICAgICAgICBjb25zdCBjb21wcyA9IHBhcnNlSGV4UmdiQ29sb3JDb21wb25lbnRzKHRleHQpO1xuICAgICAgICByZXR1cm4gY29tcHMgPyBuZXcgQ29sb3IoY29tcHMsICdyZ2InLCAnaW50JykgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZUhleFJnYmFDb2xvckNvbXBvbmVudHModGV4dCkge1xuICAgICAgICBjb25zdCBtUmdiID0gdGV4dC5tYXRjaCgvXiM/KFswLTlBLUZhLWZdKShbMC05QS1GYS1mXSkoWzAtOUEtRmEtZl0pKFswLTlBLUZhLWZdKSQvKTtcbiAgICAgICAgaWYgKG1SZ2IpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQobVJnYlsxXSArIG1SZ2JbMV0sIDE2KSxcbiAgICAgICAgICAgICAgICBwYXJzZUludChtUmdiWzJdICsgbVJnYlsyXSwgMTYpLFxuICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbM10gKyBtUmdiWzNdLCAxNiksXG4gICAgICAgICAgICAgICAgbWFwUmFuZ2UocGFyc2VJbnQobVJnYls0XSArIG1SZ2JbNF0sIDE2KSwgMCwgMjU1LCAwLCAxKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbVJyZ2diYiA9IHRleHQubWF0Y2goL14oPzojfDB4KT8oWzAtOUEtRmEtZl17Mn0pKFswLTlBLUZhLWZdezJ9KShbMC05QS1GYS1mXXsyfSkoWzAtOUEtRmEtZl17Mn0pJC8pO1xuICAgICAgICBpZiAobVJyZ2diYikge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBwYXJzZUludChtUnJnZ2JiWzFdLCAxNiksXG4gICAgICAgICAgICAgICAgcGFyc2VJbnQobVJyZ2diYlsyXSwgMTYpLFxuICAgICAgICAgICAgICAgIHBhcnNlSW50KG1ScmdnYmJbM10sIDE2KSxcbiAgICAgICAgICAgICAgICBtYXBSYW5nZShwYXJzZUludChtUnJnZ2JiWzRdLCAxNiksIDAsIDI1NSwgMCwgMSksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZUhleFJnYmFDb2xvcih0ZXh0KSB7XG4gICAgICAgIGNvbnN0IGNvbXBzID0gcGFyc2VIZXhSZ2JhQ29sb3JDb21wb25lbnRzKHRleHQpO1xuICAgICAgICByZXR1cm4gY29tcHMgPyBuZXcgQ29sb3IoY29tcHMsICdyZ2InLCAnaW50JykgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZU9iamVjdFJnYkNvbG9yQ29tcG9uZW50cyh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0Lm1hdGNoKC9eXFx7XFxzKnJcXHMqOlxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKmdcXHMqOlxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKmJcXHMqOlxccyooWzAtOUEtRmEtZi5dKyU/KVxccypcXH0kLyk7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcHMgPSBbXG4gICAgICAgICAgICBwYXJzZUZsb2F0KG1bMV0pLFxuICAgICAgICAgICAgcGFyc2VGbG9hdChtWzJdKSxcbiAgICAgICAgICAgIHBhcnNlRmxvYXQobVszXSksXG4gICAgICAgIF07XG4gICAgICAgIGlmIChpc05hTihjb21wc1swXSkgfHwgaXNOYU4oY29tcHNbMV0pIHx8IGlzTmFOKGNvbXBzWzJdKSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbXBzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVPYmplY3RSZ2JDb2xvclBhcnNlcih0eXBlKSB7XG4gICAgICAgIHJldHVybiAodGV4dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgY29tcHMgPSBwYXJzZU9iamVjdFJnYkNvbG9yQ29tcG9uZW50cyh0ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiBjb21wcyA/IG5ldyBDb2xvcihjb21wcywgJ3JnYicsIHR5cGUpIDogbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VPYmplY3RSZ2JhQ29sb3JDb21wb25lbnRzKHRleHQpIHtcbiAgICAgICAgY29uc3QgbSA9IHRleHQubWF0Y2goL15cXHtcXHMqclxccyo6XFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqZ1xccyo6XFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqYlxccyo6XFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqYVxccyo6XFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKlxcfSQvKTtcbiAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb21wcyA9IFtcbiAgICAgICAgICAgIHBhcnNlRmxvYXQobVsxXSksXG4gICAgICAgICAgICBwYXJzZUZsb2F0KG1bMl0pLFxuICAgICAgICAgICAgcGFyc2VGbG9hdChtWzNdKSxcbiAgICAgICAgICAgIHBhcnNlRmxvYXQobVs0XSksXG4gICAgICAgIF07XG4gICAgICAgIGlmIChpc05hTihjb21wc1swXSkgfHxcbiAgICAgICAgICAgIGlzTmFOKGNvbXBzWzFdKSB8fFxuICAgICAgICAgICAgaXNOYU4oY29tcHNbMl0pIHx8XG4gICAgICAgICAgICBpc05hTihjb21wc1szXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb21wcztcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlT2JqZWN0UmdiYUNvbG9yUGFyc2VyKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuICh0ZXh0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb21wcyA9IHBhcnNlT2JqZWN0UmdiYUNvbG9yQ29tcG9uZW50cyh0ZXh0KTtcbiAgICAgICAgICAgIHJldHVybiBjb21wcyA/IG5ldyBDb2xvcihjb21wcywgJ3JnYicsIHR5cGUpIDogbnVsbDtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgUEFSU0VSX0FORF9SRVNVTFQgPSBbXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBhcnNlcjogcGFyc2VIZXhSZ2JDb2xvckNvbXBvbmVudHMsXG4gICAgICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICAgICAgICBhbHBoYTogZmFsc2UsXG4gICAgICAgICAgICAgICAgbW9kZTogJ3JnYicsXG4gICAgICAgICAgICAgICAgbm90YXRpb246ICdoZXgnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcGFyc2VyOiBwYXJzZUhleFJnYmFDb2xvckNvbXBvbmVudHMsXG4gICAgICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICAgICAgICBhbHBoYTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtb2RlOiAncmdiJyxcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogJ2hleCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBwYXJzZXI6IHBhcnNlRnVuY3Rpb25hbFJnYkNvbG9yQ29tcG9uZW50cyxcbiAgICAgICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgICAgICAgIGFscGhhOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBtb2RlOiAncmdiJyxcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogJ2Z1bmMnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcGFyc2VyOiBwYXJzZUZ1bmN0aW9uYWxSZ2JhQ29sb3JDb21wb25lbnRzLFxuICAgICAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgICAgICAgYWxwaGE6IHRydWUsXG4gICAgICAgICAgICAgICAgbW9kZTogJ3JnYicsXG4gICAgICAgICAgICAgICAgbm90YXRpb246ICdmdW5jJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBhcnNlcjogcGFyc2VIc2xDb2xvckNvbXBvbmVudHMsXG4gICAgICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICAgICAgICBhbHBoYTogZmFsc2UsXG4gICAgICAgICAgICAgICAgbW9kZTogJ2hzbCcsXG4gICAgICAgICAgICAgICAgbm90YXRpb246ICdmdW5jJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBhcnNlcjogcGFyc2VIc2xhQ29sb3JDb21wb25lbnRzLFxuICAgICAgICAgICAgcmVzdWx0OiB7XG4gICAgICAgICAgICAgICAgYWxwaGE6IHRydWUsXG4gICAgICAgICAgICAgICAgbW9kZTogJ2hzbCcsXG4gICAgICAgICAgICAgICAgbm90YXRpb246ICdmdW5jJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIHBhcnNlcjogcGFyc2VPYmplY3RSZ2JDb2xvckNvbXBvbmVudHMsXG4gICAgICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICAgICAgICBhbHBoYTogZmFsc2UsXG4gICAgICAgICAgICAgICAgbW9kZTogJ3JnYicsXG4gICAgICAgICAgICAgICAgbm90YXRpb246ICdvYmplY3QnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgICAgcGFyc2VyOiBwYXJzZU9iamVjdFJnYmFDb2xvckNvbXBvbmVudHMsXG4gICAgICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICAgICAgICBhbHBoYTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtb2RlOiAncmdiJyxcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogJ29iamVjdCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgIF07XG4gICAgZnVuY3Rpb24gZGV0ZWN0U3RyaW5nQ29sb3IodGV4dCkge1xuICAgICAgICByZXR1cm4gUEFSU0VSX0FORF9SRVNVTFQucmVkdWNlKChwcmV2LCB7IHBhcnNlciwgcmVzdWx0OiBkZXRlY3Rpb24gfSkgPT4ge1xuICAgICAgICAgICAgaWYgKHByZXYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBwYXJzZXIodGV4dCkgPyBkZXRlY3Rpb24gOiBudWxsO1xuICAgICAgICB9LCBudWxsKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGV0ZWN0U3RyaW5nQ29sb3JGb3JtYXQodGV4dCwgdHlwZSA9ICdpbnQnKSB7XG4gICAgICAgIGNvbnN0IHIgPSBkZXRlY3RTdHJpbmdDb2xvcih0ZXh0KTtcbiAgICAgICAgaWYgKCFyKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoci5ub3RhdGlvbiA9PT0gJ2hleCcgJiYgdHlwZSAhPT0gJ2Zsb2F0Jykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgciksIHsgdHlwZTogJ2ludCcgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHIubm90YXRpb24gPT09ICdmdW5jJykge1xuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgciksIHsgdHlwZTogdHlwZSB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3QgVFlQRV9UT19QQVJTRVJTID0ge1xuICAgICAgICBpbnQ6IFtcbiAgICAgICAgICAgIHBhcnNlSGV4UmdiQ29sb3IsXG4gICAgICAgICAgICBwYXJzZUhleFJnYmFDb2xvcixcbiAgICAgICAgICAgIGNyZWF0ZUZ1bmN0aW9uYWxSZ2JDb2xvclBhcnNlcignaW50JyksXG4gICAgICAgICAgICBjcmVhdGVGdW5jdGlvbmFsUmdiYUNvbG9yUGFyc2VyKCdpbnQnKSxcbiAgICAgICAgICAgIGNyZWF0ZUhzbENvbG9yUGFyc2VyKCdpbnQnKSxcbiAgICAgICAgICAgIGNyZWF0ZUhzbGFDb2xvclBhcnNlcignaW50JyksXG4gICAgICAgICAgICBjcmVhdGVPYmplY3RSZ2JDb2xvclBhcnNlcignaW50JyksXG4gICAgICAgICAgICBjcmVhdGVPYmplY3RSZ2JhQ29sb3JQYXJzZXIoJ2ludCcpLFxuICAgICAgICBdLFxuICAgICAgICBmbG9hdDogW1xuICAgICAgICAgICAgY3JlYXRlRnVuY3Rpb25hbFJnYkNvbG9yUGFyc2VyKCdmbG9hdCcpLFxuICAgICAgICAgICAgY3JlYXRlRnVuY3Rpb25hbFJnYmFDb2xvclBhcnNlcignZmxvYXQnKSxcbiAgICAgICAgICAgIGNyZWF0ZUhzbENvbG9yUGFyc2VyKCdmbG9hdCcpLFxuICAgICAgICAgICAgY3JlYXRlSHNsYUNvbG9yUGFyc2VyKCdmbG9hdCcpLFxuICAgICAgICAgICAgY3JlYXRlT2JqZWN0UmdiQ29sb3JQYXJzZXIoJ2Zsb2F0JyksXG4gICAgICAgICAgICBjcmVhdGVPYmplY3RSZ2JhQ29sb3JQYXJzZXIoJ2Zsb2F0JyksXG4gICAgICAgIF0sXG4gICAgfTtcbiAgICBmdW5jdGlvbiBjcmVhdGVDb2xvclN0cmluZ0JpbmRpbmdSZWFkZXIodHlwZSkge1xuICAgICAgICBjb25zdCBwYXJzZXJzID0gVFlQRV9UT19QQVJTRVJTW3R5cGVdO1xuICAgICAgICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBDb2xvci5ibGFjayh0eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlcnMucmVkdWNlKChwcmV2LCBwYXJzZXIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocHJldikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJldjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlcih2YWx1ZSk7XG4gICAgICAgICAgICB9LCBudWxsKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgIT09IG51bGwgJiYgcmVzdWx0ICE9PSB2b2lkIDAgPyByZXN1bHQgOiBDb2xvci5ibGFjayh0eXBlKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ29sb3JTdHJpbmdQYXJzZXIodHlwZSkge1xuICAgICAgICBjb25zdCBwYXJzZXJzID0gVFlQRV9UT19QQVJTRVJTW3R5cGVdO1xuICAgICAgICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2Vycy5yZWR1Y2UoKHByZXYsIHBhcnNlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VyKHZhbHVlKTtcbiAgICAgICAgICAgIH0sIG51bGwpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiB6ZXJvZmlsbChjb21wKSB7XG4gICAgICAgIGNvbnN0IGhleCA9IGNvbnN0cmFpblJhbmdlKE1hdGguZmxvb3IoY29tcCksIDAsIDI1NSkudG9TdHJpbmcoMTYpO1xuICAgICAgICByZXR1cm4gaGV4Lmxlbmd0aCA9PT0gMSA/IGAwJHtoZXh9YCA6IGhleDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JUb0hleFJnYlN0cmluZyh2YWx1ZSwgcHJlZml4ID0gJyMnKSB7XG4gICAgICAgIGNvbnN0IGhleGVzID0gcmVtb3ZlQWxwaGFDb21wb25lbnQodmFsdWUuZ2V0Q29tcG9uZW50cygncmdiJykpXG4gICAgICAgICAgICAubWFwKHplcm9maWxsKVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICByZXR1cm4gYCR7cHJlZml4fSR7aGV4ZXN9YDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JUb0hleFJnYmFTdHJpbmcodmFsdWUsIHByZWZpeCA9ICcjJykge1xuICAgICAgICBjb25zdCByZ2JhQ29tcHMgPSB2YWx1ZS5nZXRDb21wb25lbnRzKCdyZ2InKTtcbiAgICAgICAgY29uc3QgaGV4ZXMgPSBbcmdiYUNvbXBzWzBdLCByZ2JhQ29tcHNbMV0sIHJnYmFDb21wc1syXSwgcmdiYUNvbXBzWzNdICogMjU1XVxuICAgICAgICAgICAgLm1hcCh6ZXJvZmlsbClcbiAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgcmV0dXJuIGAke3ByZWZpeH0ke2hleGVzfWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9GdW5jdGlvbmFsUmdiU3RyaW5nKHZhbHVlLCBvcHRfdHlwZSkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIob3B0X3R5cGUgPT09ICdmbG9hdCcgPyAyIDogMCk7XG4gICAgICAgIGNvbnN0IGNvbXBzID0gcmVtb3ZlQWxwaGFDb21wb25lbnQodmFsdWUuZ2V0Q29tcG9uZW50cygncmdiJywgb3B0X3R5cGUpKS5tYXAoKGNvbXApID0+IGZvcm1hdHRlcihjb21wKSk7XG4gICAgICAgIHJldHVybiBgcmdiKCR7Y29tcHMuam9pbignLCAnKX0pYDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlRnVuY3Rpb25hbFJnYkNvbG9yRm9ybWF0dGVyKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbG9yVG9GdW5jdGlvbmFsUmdiU3RyaW5nKHZhbHVlLCB0eXBlKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JUb0Z1bmN0aW9uYWxSZ2JhU3RyaW5nKHZhbHVlLCBvcHRfdHlwZSkge1xuICAgICAgICBjb25zdCBhRm9ybWF0dGVyID0gY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDIpO1xuICAgICAgICBjb25zdCByZ2JGb3JtYXR0ZXIgPSBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIob3B0X3R5cGUgPT09ICdmbG9hdCcgPyAyIDogMCk7XG4gICAgICAgIGNvbnN0IGNvbXBzID0gdmFsdWUuZ2V0Q29tcG9uZW50cygncmdiJywgb3B0X3R5cGUpLm1hcCgoY29tcCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGluZGV4ID09PSAzID8gYUZvcm1hdHRlciA6IHJnYkZvcm1hdHRlcjtcbiAgICAgICAgICAgIHJldHVybiBmb3JtYXR0ZXIoY29tcCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYHJnYmEoJHtjb21wcy5qb2luKCcsICcpfSlgO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGdW5jdGlvbmFsUmdiYUNvbG9yRm9ybWF0dGVyKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbG9yVG9GdW5jdGlvbmFsUmdiYVN0cmluZyh2YWx1ZSwgdHlwZSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9GdW5jdGlvbmFsSHNsU3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlcnMgPSBbXG4gICAgICAgICAgICBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoMCksXG4gICAgICAgICAgICBmb3JtYXRQZXJjZW50YWdlLFxuICAgICAgICAgICAgZm9ybWF0UGVyY2VudGFnZSxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgY29tcHMgPSByZW1vdmVBbHBoYUNvbXBvbmVudCh2YWx1ZS5nZXRDb21wb25lbnRzKCdoc2wnKSkubWFwKChjb21wLCBpbmRleCkgPT4gZm9ybWF0dGVyc1tpbmRleF0oY29tcCkpO1xuICAgICAgICByZXR1cm4gYGhzbCgke2NvbXBzLmpvaW4oJywgJyl9KWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9GdW5jdGlvbmFsSHNsYVN0cmluZyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZXJzID0gW1xuICAgICAgICAgICAgY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDApLFxuICAgICAgICAgICAgZm9ybWF0UGVyY2VudGFnZSxcbiAgICAgICAgICAgIGZvcm1hdFBlcmNlbnRhZ2UsXG4gICAgICAgICAgICBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoMiksXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGNvbXBzID0gdmFsdWVcbiAgICAgICAgICAgIC5nZXRDb21wb25lbnRzKCdoc2wnKVxuICAgICAgICAgICAgLm1hcCgoY29tcCwgaW5kZXgpID0+IGZvcm1hdHRlcnNbaW5kZXhdKGNvbXApKTtcbiAgICAgICAgcmV0dXJuIGBoc2xhKCR7Y29tcHMuam9pbignLCAnKX0pYDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JUb09iamVjdFJnYlN0cmluZyh2YWx1ZSwgdHlwZSkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIodHlwZSA9PT0gJ2Zsb2F0JyA/IDIgOiAwKTtcbiAgICAgICAgY29uc3QgbmFtZXMgPSBbJ3InLCAnZycsICdiJ107XG4gICAgICAgIGNvbnN0IGNvbXBzID0gcmVtb3ZlQWxwaGFDb21wb25lbnQodmFsdWUuZ2V0Q29tcG9uZW50cygncmdiJywgdHlwZSkpLm1hcCgoY29tcCwgaW5kZXgpID0+IGAke25hbWVzW2luZGV4XX06ICR7Zm9ybWF0dGVyKGNvbXApfWApO1xuICAgICAgICByZXR1cm4gYHske2NvbXBzLmpvaW4oJywgJyl9fWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZU9iamVjdFJnYkNvbG9yRm9ybWF0dGVyKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSkgPT4gY29sb3JUb09iamVjdFJnYlN0cmluZyh2YWx1ZSwgdHlwZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9PYmplY3RSZ2JhU3RyaW5nKHZhbHVlLCB0eXBlKSB7XG4gICAgICAgIGNvbnN0IGFGb3JtYXR0ZXIgPSBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoMik7XG4gICAgICAgIGNvbnN0IHJnYkZvcm1hdHRlciA9IGNyZWF0ZU51bWJlckZvcm1hdHRlcih0eXBlID09PSAnZmxvYXQnID8gMiA6IDApO1xuICAgICAgICBjb25zdCBuYW1lcyA9IFsncicsICdnJywgJ2InLCAnYSddO1xuICAgICAgICBjb25zdCBjb21wcyA9IHZhbHVlLmdldENvbXBvbmVudHMoJ3JnYicsIHR5cGUpLm1hcCgoY29tcCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGluZGV4ID09PSAzID8gYUZvcm1hdHRlciA6IHJnYkZvcm1hdHRlcjtcbiAgICAgICAgICAgIHJldHVybiBgJHtuYW1lc1tpbmRleF19OiAke2Zvcm1hdHRlcihjb21wKX1gO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGB7JHtjb21wcy5qb2luKCcsICcpfX1gO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVPYmplY3RSZ2JhQ29sb3JGb3JtYXR0ZXIodHlwZSkge1xuICAgICAgICByZXR1cm4gKHZhbHVlKSA9PiBjb2xvclRvT2JqZWN0UmdiYVN0cmluZyh2YWx1ZSwgdHlwZSk7XG4gICAgfVxuICAgIGNvbnN0IEZPUk1BVF9BTkRfU1RSSU5HSUZJRVJTID0gW1xuICAgICAgICB7XG4gICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICBhbHBoYTogZmFsc2UsXG4gICAgICAgICAgICAgICAgbW9kZTogJ3JnYicsXG4gICAgICAgICAgICAgICAgbm90YXRpb246ICdoZXgnLFxuICAgICAgICAgICAgICAgIHR5cGU6ICdpbnQnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0cmluZ2lmaWVyOiBjb2xvclRvSGV4UmdiU3RyaW5nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICBhbHBoYTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBtb2RlOiAncmdiJyxcbiAgICAgICAgICAgICAgICBub3RhdGlvbjogJ2hleCcsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2ludCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RyaW5naWZpZXI6IGNvbG9yVG9IZXhSZ2JhU3RyaW5nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICBhbHBoYTogZmFsc2UsXG4gICAgICAgICAgICAgICAgbW9kZTogJ2hzbCcsXG4gICAgICAgICAgICAgICAgbm90YXRpb246ICdmdW5jJyxcbiAgICAgICAgICAgICAgICB0eXBlOiAnaW50JyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBzdHJpbmdpZmllcjogY29sb3JUb0Z1bmN0aW9uYWxIc2xTdHJpbmcsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgICAgIGFscGhhOiB0cnVlLFxuICAgICAgICAgICAgICAgIG1vZGU6ICdoc2wnLFxuICAgICAgICAgICAgICAgIG5vdGF0aW9uOiAnZnVuYycsXG4gICAgICAgICAgICAgICAgdHlwZTogJ2ludCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3RyaW5naWZpZXI6IGNvbG9yVG9GdW5jdGlvbmFsSHNsYVN0cmluZyxcbiAgICAgICAgfSxcbiAgICAgICAgLi4uWydpbnQnLCAnZmxvYXQnXS5yZWR1Y2UoKHByZXYsIHR5cGUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgLi4ucHJldixcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGE6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogJ3JnYicsXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RhdGlvbjogJ2Z1bmMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5naWZpZXI6IGNyZWF0ZUZ1bmN0aW9uYWxSZ2JDb2xvckZvcm1hdHRlcih0eXBlKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhbHBoYTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU6ICdyZ2InLFxuICAgICAgICAgICAgICAgICAgICAgICAgbm90YXRpb246ICdmdW5jJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHN0cmluZ2lmaWVyOiBjcmVhdGVGdW5jdGlvbmFsUmdiYUNvbG9yRm9ybWF0dGVyKHR5cGUpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGU6ICdyZ2InLFxuICAgICAgICAgICAgICAgICAgICAgICAgbm90YXRpb246ICdvYmplY3QnLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5naWZpZXI6IGNyZWF0ZU9iamVjdFJnYkNvbG9yRm9ybWF0dGVyKHR5cGUpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kZTogJ3JnYicsXG4gICAgICAgICAgICAgICAgICAgICAgICBub3RhdGlvbjogJ29iamVjdCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBzdHJpbmdpZmllcjogY3JlYXRlT2JqZWN0UmdiYUNvbG9yRm9ybWF0dGVyKHR5cGUpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdO1xuICAgICAgICB9LCBbXSksXG4gICAgXTtcbiAgICBmdW5jdGlvbiBmaW5kQ29sb3JTdHJpbmdpZmllcihmb3JtYXQpIHtcbiAgICAgICAgcmV0dXJuIEZPUk1BVF9BTkRfU1RSSU5HSUZJRVJTLnJlZHVjZSgocHJldiwgZmFzKSA9PiB7XG4gICAgICAgICAgICBpZiAocHJldikge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVxdWFsc1N0cmluZ0NvbG9yRm9ybWF0KGZhcy5mb3JtYXQsIGZvcm1hdClcbiAgICAgICAgICAgICAgICA/IGZhcy5zdHJpbmdpZmllclxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSwgbnVsbCk7XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJGEgPSBDbGFzc05hbWUoJ2FwbCcpO1xuICAgIGNsYXNzIEFQYWxldHRlVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VfID0gdGhpcy5vblZhbHVlQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYSgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZFRhYkluZGV4KHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBiYXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgYmFyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRhKCdiJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGJhckVsZW0pO1xuICAgICAgICAgICAgY29uc3QgY29sb3JFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgY29sb3JFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGEoJ2MnKSk7XG4gICAgICAgICAgICBiYXJFbGVtLmFwcGVuZENoaWxkKGNvbG9yRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmNvbG9yRWxlbV8gPSBjb2xvckVsZW07XG4gICAgICAgICAgICBjb25zdCBtYXJrZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgbWFya2VyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRhKCdtJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKG1hcmtlckVsZW0pO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXyA9IG1hcmtlckVsZW07XG4gICAgICAgICAgICBjb25zdCBwcmV2aWV3RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHByZXZpZXdFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGEoJ3AnKSk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fLmFwcGVuZENoaWxkKHByZXZpZXdFbGVtKTtcbiAgICAgICAgICAgIHRoaXMucHJldmlld0VsZW1fID0gcHJldmlld0VsZW07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfKCkge1xuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCByZ2JhQ29tcHMgPSBjLmdldENvbXBvbmVudHMoJ3JnYicpO1xuICAgICAgICAgICAgY29uc3QgbGVmdENvbG9yID0gbmV3IENvbG9yKFtyZ2JhQ29tcHNbMF0sIHJnYmFDb21wc1sxXSwgcmdiYUNvbXBzWzJdLCAwXSwgJ3JnYicpO1xuICAgICAgICAgICAgY29uc3QgcmlnaHRDb2xvciA9IG5ldyBDb2xvcihbcmdiYUNvbXBzWzBdLCByZ2JhQ29tcHNbMV0sIHJnYmFDb21wc1syXSwgMjU1XSwgJ3JnYicpO1xuICAgICAgICAgICAgY29uc3QgZ3JhZGllbnRDb21wcyA9IFtcbiAgICAgICAgICAgICAgICAndG8gcmlnaHQnLFxuICAgICAgICAgICAgICAgIGNvbG9yVG9GdW5jdGlvbmFsUmdiYVN0cmluZyhsZWZ0Q29sb3IpLFxuICAgICAgICAgICAgICAgIGNvbG9yVG9GdW5jdGlvbmFsUmdiYVN0cmluZyhyaWdodENvbG9yKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICB0aGlzLmNvbG9yRWxlbV8uc3R5bGUuYmFja2dyb3VuZCA9IGBsaW5lYXItZ3JhZGllbnQoJHtncmFkaWVudENvbXBzLmpvaW4oJywnKX0pYDtcbiAgICAgICAgICAgIHRoaXMucHJldmlld0VsZW1fLnN0eWxlLmJhY2tncm91bmRDb2xvciA9IGNvbG9yVG9GdW5jdGlvbmFsUmdiYVN0cmluZyhjKTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBtYXBSYW5nZShyZ2JhQ29tcHNbM10sIDAsIDEsIDAsIDEwMCk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fSVgO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBBUGFsZXR0ZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbktleURvd25fID0gdGhpcy5vbktleURvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uS2V5VXBfID0gdGhpcy5vbktleVVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJEb3duXyA9IHRoaXMub25Qb2ludGVyRG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyTW92ZV8gPSB0aGlzLm9uUG9pbnRlck1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlclVwXyA9IHRoaXMub25Qb2ludGVyVXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IEFQYWxldHRlVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8gPSBuZXcgUG9pbnRlckhhbmRsZXIodGhpcy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ2Rvd24nLCB0aGlzLm9uUG9pbnRlckRvd25fKTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbigndXAnLCB0aGlzLm9uUG9pbnRlclVwXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbktleURvd25fKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5vbktleVVwXyk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlUG9pbnRlckV2ZW50XyhkLCBvcHRzKSB7XG4gICAgICAgICAgICBpZiAoIWQucG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhbHBoYSA9IGQucG9pbnQueCAvIGQuYm91bmRzLndpZHRoO1xuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBbaCwgcywgdl0gPSBjLmdldENvbXBvbmVudHMoJ2hzdicpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZShuZXcgQ29sb3IoW2gsIHMsIHYsIGFscGhhXSwgJ2hzdicpLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyTW92ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlclVwXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5RG93bl8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRm9yS2V5KGdldEJhc2VTdGVwRm9yQ29sb3IodHJ1ZSksIGdldEhvcml6b250YWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgaWYgKHN0ZXAgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjID0gdGhpcy52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IFtoLCBzLCB2LCBhXSA9IGMuZ2V0Q29tcG9uZW50cygnaHN2Jyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKG5ldyBDb2xvcihbaCwgcywgdiwgYSArIHN0ZXBdLCAnaHN2JyksIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25LZXlVcF8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRm9yS2V5KGdldEJhc2VTdGVwRm9yQ29sb3IodHJ1ZSksIGdldEhvcml6b250YWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgaWYgKHN0ZXAgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKHRoaXMudmFsdWUucmF3VmFsdWUsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJDkgPSBDbGFzc05hbWUoJ2NvbHR4dCcpO1xuICAgIGZ1bmN0aW9uIGNyZWF0ZU1vZGVTZWxlY3RFbGVtZW50KGRvYykge1xuICAgICAgICBjb25zdCBzZWxlY3RFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpO1xuICAgICAgICBjb25zdCBpdGVtcyA9IFtcbiAgICAgICAgICAgIHsgdGV4dDogJ1JHQicsIHZhbHVlOiAncmdiJyB9LFxuICAgICAgICAgICAgeyB0ZXh0OiAnSFNMJywgdmFsdWU6ICdoc2wnIH0sXG4gICAgICAgICAgICB7IHRleHQ6ICdIU1YnLCB2YWx1ZTogJ2hzdicgfSxcbiAgICAgICAgXTtcbiAgICAgICAgc2VsZWN0RWxlbS5hcHBlbmRDaGlsZChpdGVtcy5yZWR1Y2UoKGZyYWcsIGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG9wdEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gICAgICAgICAgICBvcHRFbGVtLnRleHRDb250ZW50ID0gaXRlbS50ZXh0O1xuICAgICAgICAgICAgb3B0RWxlbS52YWx1ZSA9IGl0ZW0udmFsdWU7XG4gICAgICAgICAgICBmcmFnLmFwcGVuZENoaWxkKG9wdEVsZW0pO1xuICAgICAgICAgICAgcmV0dXJuIGZyYWc7XG4gICAgICAgIH0sIGRvYy5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpKTtcbiAgICAgICAgcmV0dXJuIHNlbGVjdEVsZW07XG4gICAgfVxuICAgIGNsYXNzIENvbG9yVGV4dFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDkoKSk7XG4gICAgICAgICAgICBjb25zdCBtb2RlRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG1vZGVFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDkoJ20nKSk7XG4gICAgICAgICAgICB0aGlzLm1vZGVFbGVtXyA9IGNyZWF0ZU1vZGVTZWxlY3RFbGVtZW50KGRvYyk7XG4gICAgICAgICAgICB0aGlzLm1vZGVFbGVtXy5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ5KCdtcycpKTtcbiAgICAgICAgICAgIG1vZGVFbGVtLmFwcGVuZENoaWxkKHRoaXMubW9kZVNlbGVjdEVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgbW9kZU1hcmtlckVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBtb2RlTWFya2VyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ5KCdtbScpKTtcbiAgICAgICAgICAgIG1vZGVNYXJrZXJFbGVtLmFwcGVuZENoaWxkKGNyZWF0ZVN2Z0ljb25FbGVtZW50KGRvYywgJ2Ryb3Bkb3duJykpO1xuICAgICAgICAgICAgbW9kZUVsZW0uYXBwZW5kQ2hpbGQobW9kZU1hcmtlckVsZW0pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKG1vZGVFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRzRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRleHRzRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ5KCd3JykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRleHRzRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnRleHRzRWxlbV8gPSB0ZXh0c0VsZW07XG4gICAgICAgICAgICB0aGlzLnRleHRWaWV3c18gPSBjb25maWcudGV4dFZpZXdzO1xuICAgICAgICAgICAgdGhpcy5hcHBseVRleHRWaWV3c18oKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZShjb25maWcuY29sb3JNb2RlLCAobW9kZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZUVsZW1fLnZhbHVlID0gbW9kZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBtb2RlU2VsZWN0RWxlbWVudCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGVFbGVtXztcbiAgICAgICAgfVxuICAgICAgICBnZXQgdGV4dFZpZXdzKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dFZpZXdzXztcbiAgICAgICAgfVxuICAgICAgICBzZXQgdGV4dFZpZXdzKHRleHRWaWV3cykge1xuICAgICAgICAgICAgdGhpcy50ZXh0Vmlld3NfID0gdGV4dFZpZXdzO1xuICAgICAgICAgICAgdGhpcy5hcHBseVRleHRWaWV3c18oKTtcbiAgICAgICAgfVxuICAgICAgICBhcHBseVRleHRWaWV3c18oKSB7XG4gICAgICAgICAgICByZW1vdmVDaGlsZEVsZW1lbnRzKHRoaXMudGV4dHNFbGVtXyk7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICAgICAgICAgIHRoaXMudGV4dFZpZXdzXy5mb3JFYWNoKCh2KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgY29tcEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOSgnYycpKTtcbiAgICAgICAgICAgICAgICBjb21wRWxlbS5hcHBlbmRDaGlsZCh2LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMudGV4dHNFbGVtXy5hcHBlbmRDaGlsZChjb21wRWxlbSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZvcm1hdHRlciQyKHR5cGUpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZU51bWJlckZvcm1hdHRlcih0eXBlID09PSAnZmxvYXQnID8gMiA6IDApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50JDUobW9kZSwgdHlwZSwgaW5kZXgpIHtcbiAgICAgICAgY29uc3QgbWF4ID0gZ2V0Q29sb3JNYXhDb21wb25lbnRzKG1vZGUsIHR5cGUpW2luZGV4XTtcbiAgICAgICAgcmV0dXJuIG5ldyBSYW5nZUNvbnN0cmFpbnQoe1xuICAgICAgICAgICAgbWluOiAwLFxuICAgICAgICAgICAgbWF4OiBtYXgsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDb21wb25lbnRDb250cm9sbGVyKGRvYywgY29uZmlnLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gbmV3IE51bWJlclRleHRDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgYXJyYXlQb3NpdGlvbjogaW5kZXggPT09IDAgPyAnZnN0JyA6IGluZGV4ID09PSAzIC0gMSA/ICdsc3QnIDogJ21pZCcsXG4gICAgICAgICAgICBiYXNlU3RlcDogZ2V0QmFzZVN0ZXBGb3JDb2xvcihmYWxzZSksXG4gICAgICAgICAgICBwYXJzZXI6IGNvbmZpZy5wYXJzZXIsXG4gICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogY29uZmlnLmNvbG9yVHlwZSA9PT0gJ2Zsb2F0JyA/IDAuMDEgOiAxLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY3JlYXRlRm9ybWF0dGVyJDIoY29uZmlnLmNvbG9yVHlwZSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHZhbHVlOiBjcmVhdGVWYWx1ZSgwLCB7XG4gICAgICAgICAgICAgICAgY29uc3RyYWludDogY3JlYXRlQ29uc3RyYWludCQ1KGNvbmZpZy5jb2xvck1vZGUsIGNvbmZpZy5jb2xvclR5cGUsIGluZGV4KSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2xhc3MgQ29sb3JUZXh0Q29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uTW9kZVNlbGVjdENoYW5nZV8gPSB0aGlzLm9uTW9kZVNlbGVjdENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuY29sb3JUeXBlXyA9IGNvbmZpZy5jb2xvclR5cGU7XG4gICAgICAgICAgICB0aGlzLnBhcnNlcl8gPSBjb25maWcucGFyc2VyO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMuY29sb3JNb2RlID0gY3JlYXRlVmFsdWUodGhpcy52YWx1ZS5yYXdWYWx1ZS5tb2RlKTtcbiAgICAgICAgICAgIHRoaXMuY2NzXyA9IHRoaXMuY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcnNfKGRvYyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgQ29sb3JUZXh0Vmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBjb2xvck1vZGU6IHRoaXMuY29sb3JNb2RlLFxuICAgICAgICAgICAgICAgIHRleHRWaWV3czogW3RoaXMuY2NzX1swXS52aWV3LCB0aGlzLmNjc19bMV0udmlldywgdGhpcy5jY3NfWzJdLnZpZXddLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcubW9kZVNlbGVjdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5vbk1vZGVTZWxlY3RDaGFuZ2VfKTtcbiAgICAgICAgfVxuICAgICAgICBjcmVhdGVDb21wb25lbnRDb250cm9sbGVyc18oZG9jKSB7XG4gICAgICAgICAgICBjb25zdCBjYyA9IHtcbiAgICAgICAgICAgICAgICBjb2xvck1vZGU6IHRoaXMuY29sb3JNb2RlLnJhd1ZhbHVlLFxuICAgICAgICAgICAgICAgIGNvbG9yVHlwZTogdGhpcy5jb2xvclR5cGVfLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogdGhpcy5wYXJzZXJfLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgY2NzID0gW1xuICAgICAgICAgICAgICAgIGNyZWF0ZUNvbXBvbmVudENvbnRyb2xsZXIoZG9jLCBjYywgMCksXG4gICAgICAgICAgICAgICAgY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcihkb2MsIGNjLCAxKSxcbiAgICAgICAgICAgICAgICBjcmVhdGVDb21wb25lbnRDb250cm9sbGVyKGRvYywgY2MsIDIpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGNjcy5mb3JFYWNoKChjcywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25uZWN0VmFsdWVzKHtcbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5OiBjcy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZm9yd2FyZDogKHApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwLnJhd1ZhbHVlLmdldENvbXBvbmVudHModGhpcy5jb2xvck1vZGUucmF3VmFsdWUsIHRoaXMuY29sb3JUeXBlXylbaW5kZXhdO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBiYWNrd2FyZDogKHAsIHMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBpY2tlZE1vZGUgPSB0aGlzLmNvbG9yTW9kZS5yYXdWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBzID0gcC5yYXdWYWx1ZS5nZXRDb21wb25lbnRzKHBpY2tlZE1vZGUsIHRoaXMuY29sb3JUeXBlXyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wc1tpbmRleF0gPSBzLnJhd1ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihhcHBlbmRBbHBoYUNvbXBvbmVudChyZW1vdmVBbHBoYUNvbXBvbmVudChjb21wcyksIGNvbXBzWzNdKSwgcGlja2VkTW9kZSwgdGhpcy5jb2xvclR5cGVfKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGNjcztcbiAgICAgICAgfVxuICAgICAgICBvbk1vZGVTZWxlY3RDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RFbGVtID0gZXYuY3VycmVudFRhcmdldDtcbiAgICAgICAgICAgIHRoaXMuY29sb3JNb2RlLnJhd1ZhbHVlID0gc2VsZWN0RWxlbS52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2NzXyA9IHRoaXMuY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcnNfKHRoaXMudmlldy5lbGVtZW50Lm93bmVyRG9jdW1lbnQpO1xuICAgICAgICAgICAgdGhpcy52aWV3LnRleHRWaWV3cyA9IFtcbiAgICAgICAgICAgICAgICB0aGlzLmNjc19bMF0udmlldyxcbiAgICAgICAgICAgICAgICB0aGlzLmNjc19bMV0udmlldyxcbiAgICAgICAgICAgICAgICB0aGlzLmNjc19bMl0udmlldyxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkOCA9IENsYXNzTmFtZSgnaHBsJyk7XG4gICAgY2xhc3MgSFBhbGV0dGVWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ4KCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kVGFiSW5kZXgodGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbG9yRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ4KCdjJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGNvbG9yRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBtYXJrZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgbWFya2VyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ4KCdtJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKG1hcmtlckVsZW0pO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXyA9IG1hcmtlckVsZW07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfKCkge1xuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBbaF0gPSBjLmdldENvbXBvbmVudHMoJ2hzdicpO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvclRvRnVuY3Rpb25hbFJnYlN0cmluZyhuZXcgQ29sb3IoW2gsIDEwMCwgMTAwXSwgJ2hzdicpKTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBtYXBSYW5nZShoLCAwLCAzNjAsIDAsIDEwMCk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fSVgO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBIUGFsZXR0ZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbktleURvd25fID0gdGhpcy5vbktleURvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uS2V5VXBfID0gdGhpcy5vbktleVVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJEb3duXyA9IHRoaXMub25Qb2ludGVyRG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyTW92ZV8gPSB0aGlzLm9uUG9pbnRlck1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlclVwXyA9IHRoaXMub25Qb2ludGVyVXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IEhQYWxldHRlVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8gPSBuZXcgUG9pbnRlckhhbmRsZXIodGhpcy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ2Rvd24nLCB0aGlzLm9uUG9pbnRlckRvd25fKTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbigndXAnLCB0aGlzLm9uUG9pbnRlclVwXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbktleURvd25fKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5vbktleVVwXyk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlUG9pbnRlckV2ZW50XyhkLCBvcHRzKSB7XG4gICAgICAgICAgICBpZiAoIWQucG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBodWUgPSBtYXBSYW5nZShjb25zdHJhaW5SYW5nZShkLnBvaW50LngsIDAsIGQuYm91bmRzLndpZHRoKSwgMCwgZC5ib3VuZHMud2lkdGgsIDAsIDM1OSk7XG4gICAgICAgICAgICBjb25zdCBjID0gdGhpcy52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IFssIHMsIHYsIGFdID0gYy5nZXRDb21wb25lbnRzKCdoc3YnKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUobmV3IENvbG9yKFtodWUsIHMsIHYsIGFdLCAnaHN2JyksIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlckRvd25fKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJNb3ZlXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyVXBfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25LZXlEb3duXyhldikge1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IGdldFN0ZXBGb3JLZXkoZ2V0QmFzZVN0ZXBGb3JDb2xvcihmYWxzZSksIGdldEhvcml6b250YWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgaWYgKHN0ZXAgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjID0gdGhpcy52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IFtoLCBzLCB2LCBhXSA9IGMuZ2V0Q29tcG9uZW50cygnaHN2Jyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKG5ldyBDb2xvcihbaCArIHN0ZXAsIHMsIHYsIGFdLCAnaHN2JyksIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25LZXlVcF8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRm9yS2V5KGdldEJhc2VTdGVwRm9yQ29sb3IoZmFsc2UpLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlLnJhd1ZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSQ3ID0gQ2xhc3NOYW1lKCdzdnAnKTtcbiAgICBjb25zdCBDQU5WQVNfUkVTT0wgPSA2NDtcbiAgICBjbGFzcyBTdlBhbGV0dGVWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ3KCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kVGFiSW5kZXgodGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGNhbnZhc0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgICBjYW52YXNFbGVtLmhlaWdodCA9IENBTlZBU19SRVNPTDtcbiAgICAgICAgICAgIGNhbnZhc0VsZW0ud2lkdGggPSBDQU5WQVNfUkVTT0w7XG4gICAgICAgICAgICBjYW52YXNFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDcoJ2MnKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoY2FudmFzRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmNhbnZhc0VsZW1lbnQgPSBjYW52YXNFbGVtO1xuICAgICAgICAgICAgY29uc3QgbWFya2VyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG1hcmtlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNygnbScpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChtYXJrZXJFbGVtKTtcbiAgICAgICAgICAgIHRoaXMubWFya2VyRWxlbV8gPSBtYXJrZXJFbGVtO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IGdldENhbnZhc0NvbnRleHQodGhpcy5jYW52YXNFbGVtZW50KTtcbiAgICAgICAgICAgIGlmICghY3R4KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBoc3ZDb21wcyA9IGMuZ2V0Q29tcG9uZW50cygnaHN2Jyk7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IHRoaXMuY2FudmFzRWxlbWVudC53aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGhlaWdodCA9IHRoaXMuY2FudmFzRWxlbWVudC5oZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCBpbWdEYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBpbWdEYXRhLmRhdGE7XG4gICAgICAgICAgICBmb3IgKGxldCBpeSA9IDA7IGl5IDwgaGVpZ2h0OyBpeSsrKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaXggPSAwOyBpeCA8IHdpZHRoOyBpeCsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSBtYXBSYW5nZShpeCwgMCwgd2lkdGgsIDAsIDEwMCk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHYgPSBtYXBSYW5nZShpeSwgMCwgaGVpZ2h0LCAxMDAsIDApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZ2JDb21wcyA9IGhzdlRvUmdiSW50KGhzdkNvbXBzWzBdLCBzLCB2KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaSA9IChpeSAqIHdpZHRoICsgaXgpICogNDtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtpXSA9IHJnYkNvbXBzWzBdO1xuICAgICAgICAgICAgICAgICAgICBkYXRhW2kgKyAxXSA9IHJnYkNvbXBzWzFdO1xuICAgICAgICAgICAgICAgICAgICBkYXRhW2kgKyAyXSA9IHJnYkNvbXBzWzJdO1xuICAgICAgICAgICAgICAgICAgICBkYXRhW2kgKyAzXSA9IDI1NTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjdHgucHV0SW1hZ2VEYXRhKGltZ0RhdGEsIDAsIDApO1xuICAgICAgICAgICAgY29uc3QgbGVmdCA9IG1hcFJhbmdlKGhzdkNvbXBzWzFdLCAwLCAxMDAsIDAsIDEwMCk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fSVgO1xuICAgICAgICAgICAgY29uc3QgdG9wID0gbWFwUmFuZ2UoaHN2Q29tcHNbMl0sIDAsIDEwMCwgMTAwLCAwKTtcbiAgICAgICAgICAgIHRoaXMubWFya2VyRWxlbV8uc3R5bGUudG9wID0gYCR7dG9wfSVgO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBTdlBhbGV0dGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25LZXlEb3duXyA9IHRoaXMub25LZXlEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbktleVVwXyA9IHRoaXMub25LZXlVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyRG93bl8gPSB0aGlzLm9uUG9pbnRlckRvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlck1vdmVfID0gdGhpcy5vblBvaW50ZXJNb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJVcF8gPSB0aGlzLm9uUG9pbnRlclVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBTdlBhbGV0dGVWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXyA9IG5ldyBQb2ludGVySGFuZGxlcih0aGlzLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbignZG93bicsIHRoaXMub25Qb2ludGVyRG93bl8pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ21vdmUnLCB0aGlzLm9uUG9pbnRlck1vdmVfKTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCd1cCcsIHRoaXMub25Qb2ludGVyVXBfKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uS2V5RG93bl8pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLm9uS2V5VXBfKTtcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVQb2ludGVyRXZlbnRfKGQsIG9wdHMpIHtcbiAgICAgICAgICAgIGlmICghZC5wb2ludCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNhdHVyYXRpb24gPSBtYXBSYW5nZShkLnBvaW50LngsIDAsIGQuYm91bmRzLndpZHRoLCAwLCAxMDApO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBtYXBSYW5nZShkLnBvaW50LnksIDAsIGQuYm91bmRzLmhlaWdodCwgMTAwLCAwKTtcbiAgICAgICAgICAgIGNvbnN0IFtoLCAsICwgYV0gPSB0aGlzLnZhbHVlLnJhd1ZhbHVlLmdldENvbXBvbmVudHMoJ2hzdicpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZShuZXcgQ29sb3IoW2gsIHNhdHVyYXRpb24sIHZhbHVlLCBhXSwgJ2hzdicpLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyTW92ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlclVwXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5RG93bl8oZXYpIHtcbiAgICAgICAgICAgIGlmIChpc0Fycm93S2V5KGV2LmtleSkpIHtcbiAgICAgICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgW2gsIHMsIHYsIGFdID0gdGhpcy52YWx1ZS5yYXdWYWx1ZS5nZXRDb21wb25lbnRzKCdoc3YnKTtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VTdGVwID0gZ2V0QmFzZVN0ZXBGb3JDb2xvcihmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCBkcyA9IGdldFN0ZXBGb3JLZXkoYmFzZVN0ZXAsIGdldEhvcml6b250YWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgY29uc3QgZHYgPSBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwLCBnZXRWZXJ0aWNhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoZHMgPT09IDAgJiYgZHYgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKG5ldyBDb2xvcihbaCwgcyArIGRzLCB2ICsgZHYsIGFdLCAnaHN2JyksIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25LZXlVcF8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IGJhc2VTdGVwID0gZ2V0QmFzZVN0ZXBGb3JDb2xvcihmYWxzZSk7XG4gICAgICAgICAgICBjb25zdCBkcyA9IGdldFN0ZXBGb3JLZXkoYmFzZVN0ZXAsIGdldEhvcml6b250YWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgY29uc3QgZHYgPSBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwLCBnZXRWZXJ0aWNhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoZHMgPT09IDAgJiYgZHYgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKHRoaXMudmFsdWUucmF3VmFsdWUsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQ29sb3JQaWNrZXJDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLmhQYWxldHRlQ18gPSBuZXcgSFBhbGV0dGVDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuc3ZQYWxldHRlQ18gPSBuZXcgU3ZQYWxldHRlQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmFscGhhSWNzXyA9IGNvbmZpZy5zdXBwb3J0c0FscGhhXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIHBhbGV0dGU6IG5ldyBBUGFsZXR0ZUNvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBuZXcgTnVtYmVyVGV4dENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXI6IHBhcnNlTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVN0ZXA6IDAuMSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcmFnZ2luZ1NjYWxlOiAwLjAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDIpLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY3JlYXRlVmFsdWUoMCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQ6IG5ldyBSYW5nZUNvbnN0cmFpbnQoeyBtaW46IDAsIG1heDogMSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGlmICh0aGlzLmFscGhhSWNzXykge1xuICAgICAgICAgICAgICAgIGNvbm5lY3RWYWx1ZXMoe1xuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5OiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnk6IHRoaXMuYWxwaGFJY3NfLnRleHQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGZvcndhcmQ6IChwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcC5yYXdWYWx1ZS5nZXRDb21wb25lbnRzKClbM107XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkOiAocCwgcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcHMgPSBwLnJhd1ZhbHVlLmdldENvbXBvbmVudHMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBzWzNdID0gcy5yYXdWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3IoY29tcHMsIHAucmF3VmFsdWUubW9kZSk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnRleHRDXyA9IG5ldyBDb2xvclRleHRDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGNvbG9yVHlwZTogY29uZmlnLmNvbG9yVHlwZSxcbiAgICAgICAgICAgICAgICBwYXJzZXI6IHBhcnNlTnVtYmVyLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBDb2xvclBpY2tlclZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgYWxwaGFWaWV3czogdGhpcy5hbHBoYUljc19cbiAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWxldHRlOiB0aGlzLmFscGhhSWNzXy5wYWxldHRlLnZpZXcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLmFscGhhSWNzXy50ZXh0LnZpZXcsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgIGhQYWxldHRlVmlldzogdGhpcy5oUGFsZXR0ZUNfLnZpZXcsXG4gICAgICAgICAgICAgICAgc3VwcG9ydHNBbHBoYTogY29uZmlnLnN1cHBvcnRzQWxwaGEsXG4gICAgICAgICAgICAgICAgc3ZQYWxldHRlVmlldzogdGhpcy5zdlBhbGV0dGVDXy52aWV3LFxuICAgICAgICAgICAgICAgIHRleHRWaWV3OiB0aGlzLnRleHRDXy52aWV3LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHRleHRDb250cm9sbGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dENfO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJDYgPSBDbGFzc05hbWUoJ2NvbHN3Jyk7XG4gICAgY2xhc3MgQ29sb3JTd2F0Y2hWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDYoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3Qgc3dhdGNoRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHN3YXRjaEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNignc3cnKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc3dhdGNoRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnN3YXRjaEVsZW1fID0gc3dhdGNoRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgICAgICBidXR0b25FbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDYoJ2InKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmREaXNhYmxlZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudCA9IGJ1dHRvbkVsZW07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfKCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgdGhpcy5zd2F0Y2hFbGVtXy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvclRvSGV4UmdiYVN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgb25WYWx1ZUNoYW5nZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIENvbG9yU3dhdGNoQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IENvbG9yU3dhdGNoVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBDb2xvckNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbkJ1dHRvbkJsdXJfID0gdGhpcy5vbkJ1dHRvbkJsdXJfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uQnV0dG9uQ2xpY2tfID0gdGhpcy5vbkJ1dHRvbkNsaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvcHVwQ2hpbGRCbHVyXyA9IHRoaXMub25Qb3B1cENoaWxkQmx1cl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb3B1cENoaWxkS2V5ZG93bl8gPSB0aGlzLm9uUG9wdXBDaGlsZEtleWRvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5mb2xkYWJsZV8gPSBGb2xkYWJsZS5jcmVhdGUoY29uZmlnLmV4cGFuZGVkKTtcbiAgICAgICAgICAgIHRoaXMuc3dhdGNoQ18gPSBuZXcgQ29sb3JTd2F0Y2hDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbkVsZW0gPSB0aGlzLnN3YXRjaENfLnZpZXcuYnV0dG9uRWxlbWVudDtcbiAgICAgICAgICAgIGJ1dHRvbkVsZW0uYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMub25CdXR0b25CbHVyXyk7XG4gICAgICAgICAgICBidXR0b25FbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkJ1dHRvbkNsaWNrXyk7XG4gICAgICAgICAgICB0aGlzLnRleHRDXyA9IG5ldyBUZXh0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBwYXJzZXI6IGNvbmZpZy5wYXJzZXIsXG4gICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNvbmZpZy5mb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IENvbG9yVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBmb2xkYWJsZTogdGhpcy5mb2xkYWJsZV8sXG4gICAgICAgICAgICAgICAgcGlja2VyTGF5b3V0OiBjb25maWcucGlja2VyTGF5b3V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuc3dhdGNoRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnN3YXRjaENfLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnZpZXcudGV4dEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy50ZXh0Q18udmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMucG9wQ18gPVxuICAgICAgICAgICAgICAgIGNvbmZpZy5waWNrZXJMYXlvdXQgPT09ICdwb3B1cCdcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgUG9wdXBDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgY29uc3QgcGlja2VyQyA9IG5ldyBDb2xvclBpY2tlckNvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgY29sb3JUeXBlOiBjb25maWcuY29sb3JUeXBlLFxuICAgICAgICAgICAgICAgIHN1cHBvcnRzQWxwaGE6IGNvbmZpZy5zdXBwb3J0c0FscGhhLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBpY2tlckMudmlldy5hbGxGb2N1c2FibGVFbGVtZW50cy5mb3JFYWNoKChlbGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5vblBvcHVwQ2hpbGRCbHVyXyk7XG4gICAgICAgICAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vblBvcHVwQ2hpbGRLZXlkb3duXyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucGlja2VyQ18gPSBwaWNrZXJDO1xuICAgICAgICAgICAgaWYgKHRoaXMucG9wQ18pIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnBvcENfLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BDXy52aWV3LmVsZW1lbnQuYXBwZW5kQ2hpbGQocGlja2VyQy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGNvbm5lY3RWYWx1ZXMoe1xuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5OiB0aGlzLmZvbGRhYmxlXy52YWx1ZSgnZXhwYW5kZWQnKSxcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5OiB0aGlzLnBvcENfLnNob3dzLFxuICAgICAgICAgICAgICAgICAgICBmb3J3YXJkOiAocCkgPT4gcC5yYXdWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgYmFja3dhcmQ6IChfLCBzKSA9PiBzLnJhd1ZhbHVlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52aWV3LnBpY2tlckVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZpZXcucGlja2VyRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnBpY2tlckNfLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgYmluZEZvbGRhYmxlKHRoaXMuZm9sZGFibGVfLCB0aGlzLnZpZXcucGlja2VyRWxlbWVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHRleHRDb250cm9sbGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dENfO1xuICAgICAgICB9XG4gICAgICAgIG9uQnV0dG9uQmx1cl8oZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBvcENfKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZWxlbSA9IHRoaXMudmlldy5lbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgbmV4dFRhcmdldCA9IGZvcmNlQ2FzdChlLnJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICAgICAgaWYgKCFuZXh0VGFyZ2V0IHx8ICFlbGVtLmNvbnRhaW5zKG5leHRUYXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BDXy5zaG93cy5yYXdWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uQnV0dG9uQ2xpY2tfKCkge1xuICAgICAgICAgICAgdGhpcy5mb2xkYWJsZV8uc2V0KCdleHBhbmRlZCcsICF0aGlzLmZvbGRhYmxlXy5nZXQoJ2V4cGFuZGVkJykpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9sZGFibGVfLmdldCgnZXhwYW5kZWQnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyQ18udmlldy5hbGxGb2N1c2FibGVFbGVtZW50c1swXS5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uUG9wdXBDaGlsZEJsdXJfKGV2KSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucG9wQ18pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbGVtID0gdGhpcy5wb3BDXy52aWV3LmVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBuZXh0VGFyZ2V0ID0gZmluZE5leHRUYXJnZXQoZXYpO1xuICAgICAgICAgICAgaWYgKG5leHRUYXJnZXQgJiYgZWxlbS5jb250YWlucyhuZXh0VGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXh0VGFyZ2V0ICYmXG4gICAgICAgICAgICAgICAgbmV4dFRhcmdldCA9PT0gdGhpcy5zd2F0Y2hDXy52aWV3LmJ1dHRvbkVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICAhc3VwcG9ydHNUb3VjaChlbGVtLm93bmVyRG9jdW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wb3BDXy5zaG93cy5yYXdWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9wdXBDaGlsZEtleWRvd25fKGV2KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wb3BDXykge1xuICAgICAgICAgICAgICAgIGlmIChldi5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9wQ18uc2hvd3MucmF3VmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnZpZXcucGlja2VyRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGlmIChldi5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3dhdGNoQ18udmlldy5idXR0b25FbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29sb3JGcm9tT2JqZWN0KHZhbHVlLCBvcHRfdHlwZSkge1xuICAgICAgICBpZiAoQ29sb3IuaXNDb2xvck9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBDb2xvci5mcm9tT2JqZWN0KHZhbHVlLCBvcHRfdHlwZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIENvbG9yLmJsYWNrKG9wdF90eXBlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JUb1JnYk51bWJlcih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gcmVtb3ZlQWxwaGFDb21wb25lbnQodmFsdWUuZ2V0Q29tcG9uZW50cygncmdiJykpLnJlZHVjZSgocmVzdWx0LCBjb21wKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gKHJlc3VsdCA8PCA4KSB8IChNYXRoLmZsb29yKGNvbXApICYgMHhmZik7XG4gICAgICAgIH0sIDApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2xvclRvUmdiYU51bWJlcih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gKHZhbHVlLmdldENvbXBvbmVudHMoJ3JnYicpLnJlZHVjZSgocmVzdWx0LCBjb21wLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgaGV4ID0gTWF0aC5mbG9vcihpbmRleCA9PT0gMyA/IGNvbXAgKiAyNTUgOiBjb21wKSAmIDB4ZmY7XG4gICAgICAgICAgICByZXR1cm4gKHJlc3VsdCA8PCA4KSB8IGhleDtcbiAgICAgICAgfSwgMCkgPj4+IDApO1xuICAgIH1cbiAgICBmdW5jdGlvbiBudW1iZXJUb1JnYkNvbG9yKG51bSkge1xuICAgICAgICByZXR1cm4gbmV3IENvbG9yKFsobnVtID4+IDE2KSAmIDB4ZmYsIChudW0gPj4gOCkgJiAweGZmLCBudW0gJiAweGZmXSwgJ3JnYicpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBudW1iZXJUb1JnYmFDb2xvcihudW0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbXG4gICAgICAgICAgICAobnVtID4+IDI0KSAmIDB4ZmYsXG4gICAgICAgICAgICAobnVtID4+IDE2KSAmIDB4ZmYsXG4gICAgICAgICAgICAobnVtID4+IDgpICYgMHhmZixcbiAgICAgICAgICAgIG1hcFJhbmdlKG51bSAmIDB4ZmYsIDAsIDI1NSwgMCwgMSksXG4gICAgICAgIF0sICdyZ2InKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JGcm9tUmdiTnVtYmVyKHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gQ29sb3IuYmxhY2soKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVtYmVyVG9SZ2JDb2xvcih2YWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yRnJvbVJnYmFOdW1iZXIodmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBDb2xvci5ibGFjaygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudW1iZXJUb1JnYmFDb2xvcih2YWx1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQ29sb3JTdHJpbmdXcml0ZXIoZm9ybWF0KSB7XG4gICAgICAgIGNvbnN0IHN0cmluZ2lmeSA9IGZpbmRDb2xvclN0cmluZ2lmaWVyKGZvcm1hdCk7XG4gICAgICAgIHJldHVybiBzdHJpbmdpZnlcbiAgICAgICAgICAgID8gKHRhcmdldCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICB3cml0ZVByaW1pdGl2ZSh0YXJnZXQsIHN0cmluZ2lmeSh2YWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDb2xvck51bWJlcldyaXRlcihzdXBwb3J0c0FscGhhKSB7XG4gICAgICAgIGNvbnN0IGNvbG9yVG9OdW1iZXIgPSBzdXBwb3J0c0FscGhhID8gY29sb3JUb1JnYmFOdW1iZXIgOiBjb2xvclRvUmdiTnVtYmVyO1xuICAgICAgICByZXR1cm4gKHRhcmdldCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIHdyaXRlUHJpbWl0aXZlKHRhcmdldCwgY29sb3JUb051bWJlcih2YWx1ZSkpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiB3cml0ZVJnYmFDb2xvck9iamVjdCh0YXJnZXQsIHZhbHVlLCBvcHRfdHlwZSkge1xuICAgICAgICBjb25zdCBvYmogPSB2YWx1ZS50b1JnYmFPYmplY3Qob3B0X3R5cGUpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgncicsIG9iai5yKTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ2cnLCBvYmouZyk7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCdiJywgb2JqLmIpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgnYScsIG9iai5hKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd3JpdGVSZ2JDb2xvck9iamVjdCh0YXJnZXQsIHZhbHVlLCBvcHRfdHlwZSkge1xuICAgICAgICBjb25zdCBvYmogPSB2YWx1ZS50b1JnYmFPYmplY3Qob3B0X3R5cGUpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgncicsIG9iai5yKTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ2cnLCBvYmouZyk7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCdiJywgb2JqLmIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDb2xvck9iamVjdFdyaXRlcihzdXBwb3J0c0FscGhhLCBvcHRfdHlwZSkge1xuICAgICAgICByZXR1cm4gKHRhcmdldCwgaW5WYWx1ZSkgPT4ge1xuICAgICAgICAgICAgaWYgKHN1cHBvcnRzQWxwaGEpIHtcbiAgICAgICAgICAgICAgICB3cml0ZVJnYmFDb2xvck9iamVjdCh0YXJnZXQsIGluVmFsdWUsIG9wdF90eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHdyaXRlUmdiQ29sb3JPYmplY3QodGFyZ2V0LCBpblZhbHVlLCBvcHRfdHlwZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2hvdWxkU3VwcG9ydEFscGhhJDEoaW5wdXRQYXJhbXMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAoKGlucHV0UGFyYW1zID09PSBudWxsIHx8IGlucHV0UGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnB1dFBhcmFtcy5hbHBoYSkgfHwgKChfYSA9IGlucHV0UGFyYW1zID09PSBudWxsIHx8IGlucHV0UGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbnB1dFBhcmFtcy5jb2xvcikgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLmFscGhhKSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVGb3JtYXR0ZXIkMShzdXBwb3J0c0FscGhhKSB7XG4gICAgICAgIHJldHVybiBzdXBwb3J0c0FscGhhXG4gICAgICAgICAgICA/ICh2KSA9PiBjb2xvclRvSGV4UmdiYVN0cmluZyh2LCAnMHgnKVxuICAgICAgICAgICAgOiAodikgPT4gY29sb3JUb0hleFJnYlN0cmluZyh2LCAnMHgnKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNGb3JDb2xvcihwYXJhbXMpIHtcbiAgICAgICAgaWYgKCdjb2xvcicgaW4gcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJ3ZpZXcnIGluIHBhcmFtcyAmJiBwYXJhbXMudmlldyA9PT0gJ2NvbG9yJykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBjb25zdCBOdW1iZXJDb2xvcklucHV0UGx1Z2luID0ge1xuICAgICAgICBpZDogJ2lucHV0LWNvbG9yLW51bWJlcicsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWlzRm9yQ29sb3IocGFyYW1zKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VDb2xvcklucHV0UGFyYW1zKHBhcmFtcyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc2hvdWxkU3VwcG9ydEFscGhhJDEoYXJncy5wYXJhbXMpXG4gICAgICAgICAgICAgICAgICAgID8gY29sb3JGcm9tUmdiYU51bWJlclxuICAgICAgICAgICAgICAgICAgICA6IGNvbG9yRnJvbVJnYk51bWJlcjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcXVhbHM6IENvbG9yLmVxdWFscyxcbiAgICAgICAgICAgIHdyaXRlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQ29sb3JOdW1iZXJXcml0ZXIoc2hvdWxkU3VwcG9ydEFscGhhJDEoYXJncy5wYXJhbXMpKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBzdXBwb3J0c0FscGhhID0gc2hvdWxkU3VwcG9ydEFscGhhJDEoYXJncy5wYXJhbXMpO1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWQgPSAnZXhwYW5kZWQnIGluIGFyZ3MucGFyYW1zID8gYXJncy5wYXJhbXMuZXhwYW5kZWQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBwaWNrZXIgPSAncGlja2VyJyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLnBpY2tlciA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3JDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBjb2xvclR5cGU6ICdpbnQnLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBleHBhbmRlZCAhPT0gbnVsbCAmJiBleHBhbmRlZCAhPT0gdm9pZCAwID8gZXhwYW5kZWQgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNyZWF0ZUZvcm1hdHRlciQxKHN1cHBvcnRzQWxwaGEpLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogY3JlYXRlQ29sb3JTdHJpbmdQYXJzZXIoJ2ludCcpLFxuICAgICAgICAgICAgICAgIHBpY2tlckxheW91dDogcGlja2VyICE9PSBudWxsICYmIHBpY2tlciAhPT0gdm9pZCAwID8gcGlja2VyIDogJ3BvcHVwJyxcbiAgICAgICAgICAgICAgICBzdXBwb3J0c0FscGhhOiBzdXBwb3J0c0FscGhhLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gc2hvdWxkU3VwcG9ydEFscGhhKGluaXRpYWxWYWx1ZSkge1xuICAgICAgICByZXR1cm4gQ29sb3IuaXNSZ2JhQ29sb3JPYmplY3QoaW5pdGlhbFZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ29sb3JPYmplY3RSZWFkZXIob3B0X3R5cGUpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNvbG9yRnJvbU9iamVjdCh2YWx1ZSwgb3B0X3R5cGUpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDb2xvck9iamVjdEZvcm1hdHRlcihzdXBwb3J0c0FscGhhLCB0eXBlKSB7XG4gICAgICAgIHJldHVybiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIGlmIChzdXBwb3J0c0FscGhhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbG9yVG9PYmplY3RSZ2JhU3RyaW5nKHZhbHVlLCB0eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjb2xvclRvT2JqZWN0UmdiU3RyaW5nKHZhbHVlLCB0eXBlKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgT2JqZWN0Q29sb3JJbnB1dFBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdpbnB1dC1jb2xvci1vYmplY3QnLFxuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBhY2NlcHQ6ICh2YWx1ZSwgcGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAoIUNvbG9yLmlzQ29sb3JPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUNvbG9ySW5wdXRQYXJhbXMocGFyYW1zKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoYXJncykgPT4gY3JlYXRlQ29sb3JPYmplY3RSZWFkZXIoZXh0cmFjdENvbG9yVHlwZShhcmdzLnBhcmFtcykpLFxuICAgICAgICAgICAgZXF1YWxzOiBDb2xvci5lcXVhbHMsXG4gICAgICAgICAgICB3cml0ZXI6IChhcmdzKSA9PiBjcmVhdGVDb2xvck9iamVjdFdyaXRlcihzaG91bGRTdXBwb3J0QWxwaGEoYXJncy5pbml0aWFsVmFsdWUpLCBleHRyYWN0Q29sb3JUeXBlKGFyZ3MucGFyYW1zKSksXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBzdXBwb3J0c0FscGhhID0gQ29sb3IuaXNSZ2JhQ29sb3JPYmplY3QoYXJncy5pbml0aWFsVmFsdWUpO1xuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWQgPSAnZXhwYW5kZWQnIGluIGFyZ3MucGFyYW1zID8gYXJncy5wYXJhbXMuZXhwYW5kZWQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBwaWNrZXIgPSAncGlja2VyJyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLnBpY2tlciA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSAoX2EgPSBleHRyYWN0Q29sb3JUeXBlKGFyZ3MucGFyYW1zKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJ2ludCc7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgY29sb3JUeXBlOiB0eXBlLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBleHBhbmRlZCAhPT0gbnVsbCAmJiBleHBhbmRlZCAhPT0gdm9pZCAwID8gZXhwYW5kZWQgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNyZWF0ZUNvbG9yT2JqZWN0Rm9ybWF0dGVyKHN1cHBvcnRzQWxwaGEsIHR5cGUpLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogY3JlYXRlQ29sb3JTdHJpbmdQYXJzZXIodHlwZSksXG4gICAgICAgICAgICAgICAgcGlja2VyTGF5b3V0OiBwaWNrZXIgIT09IG51bGwgJiYgcGlja2VyICE9PSB2b2lkIDAgPyBwaWNrZXIgOiAncG9wdXAnLFxuICAgICAgICAgICAgICAgIHN1cHBvcnRzQWxwaGE6IHN1cHBvcnRzQWxwaGEsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGFyZ3MudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBTdHJpbmdDb2xvcklucHV0UGx1Z2luID0ge1xuICAgICAgICBpZDogJ2lucHV0LWNvbG9yLXN0cmluZycsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoJ3ZpZXcnIGluIHBhcmFtcyAmJiBwYXJhbXMudmlldyA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmb3JtYXQgPSBkZXRlY3RTdHJpbmdDb2xvckZvcm1hdCh2YWx1ZSwgZXh0cmFjdENvbG9yVHlwZShwYXJhbXMpKTtcbiAgICAgICAgICAgIGlmICghZm9ybWF0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdHJpbmdpZmllciA9IGZpbmRDb2xvclN0cmluZ2lmaWVyKGZvcm1hdCk7XG4gICAgICAgICAgICBpZiAoIXN0cmluZ2lmaWVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUNvbG9ySW5wdXRQYXJhbXMocGFyYW1zKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoYXJncykgPT4geyB2YXIgX2E7IHJldHVybiBjcmVhdGVDb2xvclN0cmluZ0JpbmRpbmdSZWFkZXIoKF9hID0gZXh0cmFjdENvbG9yVHlwZShhcmdzLnBhcmFtcykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdpbnQnKTsgfSxcbiAgICAgICAgICAgIGVxdWFsczogQ29sb3IuZXF1YWxzLFxuICAgICAgICAgICAgd3JpdGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1hdCA9IGRldGVjdFN0cmluZ0NvbG9yRm9ybWF0KGFyZ3MuaW5pdGlhbFZhbHVlLCBleHRyYWN0Q29sb3JUeXBlKGFyZ3MucGFyYW1zKSk7XG4gICAgICAgICAgICAgICAgaWYgKCFmb3JtYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCB3cml0ZXIgPSBjcmVhdGVDb2xvclN0cmluZ1dyaXRlcihmb3JtYXQpO1xuICAgICAgICAgICAgICAgIGlmICghd3JpdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iubm90QmluZGFibGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHdyaXRlcjtcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXQgPSBkZXRlY3RTdHJpbmdDb2xvckZvcm1hdChhcmdzLmluaXRpYWxWYWx1ZSwgZXh0cmFjdENvbG9yVHlwZShhcmdzLnBhcmFtcykpO1xuICAgICAgICAgICAgaWYgKCFmb3JtYXQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdHJpbmdpZmllciA9IGZpbmRDb2xvclN0cmluZ2lmaWVyKGZvcm1hdCk7XG4gICAgICAgICAgICBpZiAoIXN0cmluZ2lmaWVyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWQgPSAnZXhwYW5kZWQnIGluIGFyZ3MucGFyYW1zID8gYXJncy5wYXJhbXMuZXhwYW5kZWQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBwaWNrZXIgPSAncGlja2VyJyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLnBpY2tlciA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ29sb3JDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBjb2xvclR5cGU6IGZvcm1hdC50eXBlLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBleHBhbmRlZCAhPT0gbnVsbCAmJiBleHBhbmRlZCAhPT0gdm9pZCAwID8gZXhwYW5kZWQgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IHN0cmluZ2lmaWVyLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogY3JlYXRlQ29sb3JTdHJpbmdQYXJzZXIoZm9ybWF0LnR5cGUpLFxuICAgICAgICAgICAgICAgIHBpY2tlckxheW91dDogcGlja2VyICE9PSBudWxsICYmIHBpY2tlciAhPT0gdm9pZCAwID8gcGlja2VyIDogJ3BvcHVwJyxcbiAgICAgICAgICAgICAgICBzdXBwb3J0c0FscGhhOiBmb3JtYXQuYWxwaGEsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGFyZ3MudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjbGFzcyBQb2ludE5kQ29uc3RyYWludCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnRzID0gY29uZmlnLmNvbXBvbmVudHM7XG4gICAgICAgICAgICB0aGlzLmFzbV8gPSBjb25maWcuYXNzZW1ibHk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RyYWluKHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBjb21wcyA9IHRoaXMuYXNtX1xuICAgICAgICAgICAgICAgIC50b0NvbXBvbmVudHModmFsdWUpXG4gICAgICAgICAgICAgICAgLm1hcCgoY29tcCwgaW5kZXgpID0+IHsgdmFyIF9hLCBfYjsgcmV0dXJuIChfYiA9IChfYSA9IHRoaXMuY29tcG9uZW50c1tpbmRleF0pID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5jb25zdHJhaW4oY29tcCkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGNvbXA7IH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXNtXy5mcm9tQ29tcG9uZW50cyhjb21wcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkNSA9IENsYXNzTmFtZSgncG5kdHh0Jyk7XG4gICAgY2xhc3MgUG9pbnROZFRleHRWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dFZpZXdzID0gY29uZmlnLnRleHRWaWV3cztcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ1KCkpO1xuICAgICAgICAgICAgdGhpcy50ZXh0Vmlld3MuZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF4aXNFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGF4aXNFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDUoJ2EnKSk7XG4gICAgICAgICAgICAgICAgYXhpc0VsZW0uYXBwZW5kQ2hpbGQodi5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoYXhpc0VsZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVBeGlzQ29udHJvbGxlcihkb2MsIGNvbmZpZywgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOdW1iZXJUZXh0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgIGFycmF5UG9zaXRpb246IGluZGV4ID09PSAwID8gJ2ZzdCcgOiBpbmRleCA9PT0gY29uZmlnLmF4ZXMubGVuZ3RoIC0gMSA/ICdsc3QnIDogJ21pZCcsXG4gICAgICAgICAgICBiYXNlU3RlcDogY29uZmlnLmF4ZXNbaW5kZXhdLmJhc2VTdGVwLFxuICAgICAgICAgICAgcGFyc2VyOiBjb25maWcucGFyc2VyLFxuICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5heGVzW2luZGV4XS50ZXh0UHJvcHMsXG4gICAgICAgICAgICB2YWx1ZTogY3JlYXRlVmFsdWUoMCwge1xuICAgICAgICAgICAgICAgIGNvbnN0cmFpbnQ6IGNvbmZpZy5heGVzW2luZGV4XS5jb25zdHJhaW50LFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy52aWV3UHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjbGFzcyBQb2ludE5kVGV4dENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMuYWNzXyA9IGNvbmZpZy5heGVzLm1hcCgoXywgaW5kZXgpID0+IGNyZWF0ZUF4aXNDb250cm9sbGVyKGRvYywgY29uZmlnLCBpbmRleCkpO1xuICAgICAgICAgICAgdGhpcy5hY3NfLmZvckVhY2goKGMsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29ubmVjdFZhbHVlcyh7XG4gICAgICAgICAgICAgICAgICAgIHByaW1hcnk6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZGFyeTogYy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZm9yd2FyZDogKHApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25maWcuYXNzZW1ibHkudG9Db21wb25lbnRzKHAucmF3VmFsdWUpW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYmFja3dhcmQ6IChwLCBzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wcyA9IGNvbmZpZy5hc3NlbWJseS50b0NvbXBvbmVudHMocC5yYXdWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wc1tpbmRleF0gPSBzLnJhd1ZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy5hc3NlbWJseS5mcm9tQ29tcG9uZW50cyhjb21wcyk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBQb2ludE5kVGV4dFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgdGV4dFZpZXdzOiB0aGlzLmFjc18ubWFwKChhYykgPT4gYWMudmlldyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZVN0ZXBDb25zdHJhaW50KHBhcmFtcywgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGlmICgnc3RlcCcgaW4gcGFyYW1zICYmICFpc0VtcHR5KHBhcmFtcy5zdGVwKSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBTdGVwQ29uc3RyYWludChwYXJhbXMuc3RlcCwgaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlUmFuZ2VDb25zdHJhaW50KHBhcmFtcykge1xuICAgICAgICBpZiAoKCdtYXgnIGluIHBhcmFtcyAmJiAhaXNFbXB0eShwYXJhbXMubWF4KSkgfHxcbiAgICAgICAgICAgICgnbWluJyBpbiBwYXJhbXMgJiYgIWlzRW1wdHkocGFyYW1zLm1pbikpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlQ29uc3RyYWludCh7XG4gICAgICAgICAgICAgICAgbWF4OiBwYXJhbXMubWF4LFxuICAgICAgICAgICAgICAgIG1pbjogcGFyYW1zLm1pbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50JDQocGFyYW1zLFxuICAgIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICBjb25zdCBjb25zdHJhaW50cyA9IFtdO1xuICAgICAgICBjb25zdCBzYyA9IGNyZWF0ZVN0ZXBDb25zdHJhaW50KHBhcmFtcywgaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgaWYgKHNjKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHNjKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByYyA9IGNyZWF0ZVJhbmdlQ29uc3RyYWludChwYXJhbXMpO1xuICAgICAgICBpZiAocmMpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2gocmMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxjID0gY3JlYXRlTGlzdENvbnN0cmFpbnQocGFyYW1zLm9wdGlvbnMpO1xuICAgICAgICBpZiAobGMpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2gobGMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ29tcG9zaXRlQ29uc3RyYWludChjb25zdHJhaW50cyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRSYW5nZShjb25zdHJhaW50KSB7XG4gICAgICAgIGNvbnN0IGMgPSBjb25zdHJhaW50ID8gZmluZENvbnN0cmFpbnQoY29uc3RyYWludCwgUmFuZ2VDb25zdHJhaW50KSA6IG51bGw7XG4gICAgICAgIGlmICghYykge1xuICAgICAgICAgICAgcmV0dXJuIFt1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtjLm1pblZhbHVlLCBjLm1heFZhbHVlXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZXN0aW1hdGVTdWl0YWJsZVJhbmdlKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgY29uc3QgW21pbiwgbWF4XSA9IGZpbmRSYW5nZShjb25zdHJhaW50KTtcbiAgICAgICAgcmV0dXJuIFttaW4gIT09IG51bGwgJiYgbWluICE9PSB2b2lkIDAgPyBtaW4gOiAwLCBtYXggIT09IG51bGwgJiYgbWF4ICE9PSB2b2lkIDAgPyBtYXggOiAxMDBdO1xuICAgIH1cbiAgICBjb25zdCBOdW1iZXJJbnB1dFBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdpbnB1dC1udW1iZXInLFxuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBhY2NlcHQ6ICh2YWx1ZSwgcGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IHAub3B0aW9uYWwuZnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgbWF4OiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgICAgICBtaW46IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlTGlzdE9wdGlvbnMpLFxuICAgICAgICAgICAgICAgIHN0ZXA6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKF9hcmdzKSA9PiBudW1iZXJGcm9tVW5rbm93bixcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IChhcmdzKSA9PiBjcmVhdGVDb25zdHJhaW50JDQoYXJncy5wYXJhbXMsIGFyZ3MuaW5pdGlhbFZhbHVlKSxcbiAgICAgICAgICAgIHdyaXRlcjogKF9hcmdzKSA9PiB3cml0ZVByaW1pdGl2ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ3MudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBjID0gYXJncy5jb25zdHJhaW50O1xuICAgICAgICAgICAgaWYgKGMgJiYgZmluZENvbnN0cmFpbnQoYywgTGlzdENvbnN0cmFpbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMaXN0Q29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IChfYSA9IGZpbmRMaXN0SXRlbXMoYykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gKF9iID0gKCdmb3JtYXQnIGluIGFyZ3MucGFyYW1zID8gYXJncy5wYXJhbXMuZm9ybWF0IDogdW5kZWZpbmVkKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogY3JlYXRlTnVtYmVyRm9ybWF0dGVyKGdldFN1aXRhYmxlRGVjaW1hbERpZ2l0cyhjLCB2YWx1ZS5yYXdWYWx1ZSkpO1xuICAgICAgICAgICAgaWYgKGMgJiYgZmluZENvbnN0cmFpbnQoYywgUmFuZ2VDb25zdHJhaW50KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IFttaW4sIG1heF0gPSBlc3RpbWF0ZVN1aXRhYmxlUmFuZ2UoYyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBTbGlkZXJUZXh0Q29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGJhc2VTdGVwOiBnZXRCYXNlU3RlcChjKSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VyOiBwYXJzZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgc2xpZGVyUHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWU6IG1heCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pblZhbHVlOiBtaW4sXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB0ZXh0UHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlKGMsIHZhbHVlLnJhd1ZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBOdW1iZXJUZXh0Q29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgYmFzZVN0ZXA6IGdldEJhc2VTdGVwKGMpLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogcGFyc2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBkcmFnZ2luZ1NjYWxlOiBnZXRTdWl0YWJsZURyYWdnaW5nU2NhbGUoYywgdmFsdWUucmF3VmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjbGFzcyBQb2ludDJkIHtcbiAgICAgICAgY29uc3RydWN0b3IoeCA9IDAsIHkgPSAwKSB7XG4gICAgICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICAgICAgdGhpcy55ID0geTtcbiAgICAgICAgfVxuICAgICAgICBnZXRDb21wb25lbnRzKCkge1xuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLngsIHRoaXMueV07XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGlzT2JqZWN0KG9iaikge1xuICAgICAgICAgICAgaWYgKGlzRW1wdHkob2JqKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHggPSBvYmoueDtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBvYmoueTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgeCAhPT0gJ251bWJlcicgfHwgdHlwZW9mIHkgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGVxdWFscyh2MSwgdjIpIHtcbiAgICAgICAgICAgIHJldHVybiB2MS54ID09PSB2Mi54ICYmIHYxLnkgPT09IHYyLnk7XG4gICAgICAgIH1cbiAgICAgICAgdG9PYmplY3QoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHg6IHRoaXMueCxcbiAgICAgICAgICAgICAgICB5OiB0aGlzLnksXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IFBvaW50MmRBc3NlbWJseSA9IHtcbiAgICAgICAgdG9Db21wb25lbnRzOiAocCkgPT4gcC5nZXRDb21wb25lbnRzKCksXG4gICAgICAgIGZyb21Db21wb25lbnRzOiAoY29tcHMpID0+IG5ldyBQb2ludDJkKC4uLmNvbXBzKSxcbiAgICB9O1xuXG4gICAgY29uc3QgY2xhc3NOYW1lJDQgPSBDbGFzc05hbWUoJ3AyZCcpO1xuICAgIGNsYXNzIFBvaW50MmRWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ0KCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZShjb25maWcuZXhwYW5kZWQsIHZhbHVlVG9DbGFzc05hbWUodGhpcy5lbGVtZW50LCBjbGFzc05hbWUkNCh1bmRlZmluZWQsICdleHBhbmRlZCcpKSk7XG4gICAgICAgICAgICBjb25zdCBoZWFkRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDQoJ2gnKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaGVhZEVsZW0pO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgICAgIGJ1dHRvbkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNCgnYicpKTtcbiAgICAgICAgICAgIGJ1dHRvbkVsZW0uYXBwZW5kQ2hpbGQoY3JlYXRlU3ZnSWNvbkVsZW1lbnQoZG9jLCAncDJkcGFkJykpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoYnV0dG9uRWxlbSk7XG4gICAgICAgICAgICBoZWFkRWxlbS5hcHBlbmRDaGlsZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudCA9IGJ1dHRvbkVsZW07XG4gICAgICAgICAgICBjb25zdCB0ZXh0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRleHRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDQoJ3QnKSk7XG4gICAgICAgICAgICBoZWFkRWxlbS5hcHBlbmRDaGlsZCh0ZXh0RWxlbSk7XG4gICAgICAgICAgICB0aGlzLnRleHRFbGVtZW50ID0gdGV4dEVsZW07XG4gICAgICAgICAgICBpZiAoY29uZmlnLnBpY2tlckxheW91dCA9PT0gJ2lubGluZScpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwaWNrZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIHBpY2tlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNCgncCcpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQocGlja2VyRWxlbSk7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJFbGVtZW50ID0gcGlja2VyRWxlbTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyRWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkMyA9IENsYXNzTmFtZSgncDJkcCcpO1xuICAgIGNsYXNzIFBvaW50MmRQaWNrZXJWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25Gb2xkYWJsZUNoYW5nZV8gPSB0aGlzLm9uRm9sZGFibGVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VfID0gdGhpcy5vblZhbHVlQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5pbnZlcnRzWV8gPSBjb25maWcuaW52ZXJ0c1k7XG4gICAgICAgICAgICB0aGlzLm1heFZhbHVlXyA9IGNvbmZpZy5tYXhWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQzKCkpO1xuICAgICAgICAgICAgaWYgKGNvbmZpZy5sYXlvdXQgPT09ICdwb3B1cCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMyh1bmRlZmluZWQsICdwJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFkRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHBhZEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMygncCcpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZFRhYkluZGV4KHBhZEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHBhZEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5wYWRFbGVtZW50ID0gcGFkRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHN2Z0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3N2ZycpO1xuICAgICAgICAgICAgc3ZnRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQzKCdnJykpO1xuICAgICAgICAgICAgdGhpcy5wYWRFbGVtZW50LmFwcGVuZENoaWxkKHN2Z0VsZW0pO1xuICAgICAgICAgICAgdGhpcy5zdmdFbGVtXyA9IHN2Z0VsZW07XG4gICAgICAgICAgICBjb25zdCB4QXhpc0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ2xpbmUnKTtcbiAgICAgICAgICAgIHhBeGlzRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQzKCdheCcpKTtcbiAgICAgICAgICAgIHhBeGlzRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneDEnLCAnMCcpO1xuICAgICAgICAgICAgeEF4aXNFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd5MScsICc1MCUnKTtcbiAgICAgICAgICAgIHhBeGlzRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneDInLCAnMTAwJScpO1xuICAgICAgICAgICAgeEF4aXNFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd5MicsICc1MCUnKTtcbiAgICAgICAgICAgIHRoaXMuc3ZnRWxlbV8uYXBwZW5kQ2hpbGQoeEF4aXNFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHlBeGlzRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAnbGluZScpO1xuICAgICAgICAgICAgeUF4aXNFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDMoJ2F4JykpO1xuICAgICAgICAgICAgeUF4aXNFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd4MScsICc1MCUnKTtcbiAgICAgICAgICAgIHlBeGlzRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneTEnLCAnMCcpO1xuICAgICAgICAgICAgeUF4aXNFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd4MicsICc1MCUnKTtcbiAgICAgICAgICAgIHlBeGlzRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneTInLCAnMTAwJScpO1xuICAgICAgICAgICAgdGhpcy5zdmdFbGVtXy5hcHBlbmRDaGlsZCh5QXhpc0VsZW0pO1xuICAgICAgICAgICAgY29uc3QgbGluZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ2xpbmUnKTtcbiAgICAgICAgICAgIGxpbmVFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDMoJ2wnKSk7XG4gICAgICAgICAgICBsaW5lRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneDEnLCAnNTAlJyk7XG4gICAgICAgICAgICBsaW5lRWxlbS5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneTEnLCAnNTAlJyk7XG4gICAgICAgICAgICB0aGlzLnN2Z0VsZW1fLmFwcGVuZENoaWxkKGxpbmVFbGVtKTtcbiAgICAgICAgICAgIHRoaXMubGluZUVsZW1fID0gbGluZUVsZW07XG4gICAgICAgICAgICBjb25zdCBtYXJrZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgbWFya2VyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQzKCdtJykpO1xuICAgICAgICAgICAgdGhpcy5wYWRFbGVtZW50LmFwcGVuZENoaWxkKG1hcmtlckVsZW0pO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXyA9IG1hcmtlckVsZW07XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGFsbEZvY3VzYWJsZUVsZW1lbnRzKCkge1xuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLnBhZEVsZW1lbnRdO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICBjb25zdCBbeCwgeV0gPSB0aGlzLnZhbHVlLnJhd1ZhbHVlLmdldENvbXBvbmVudHMoKTtcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IHRoaXMubWF4VmFsdWVfO1xuICAgICAgICAgICAgY29uc3QgcHggPSBtYXBSYW5nZSh4LCAtbWF4LCArbWF4LCAwLCAxMDApO1xuICAgICAgICAgICAgY29uc3QgcHkgPSBtYXBSYW5nZSh5LCAtbWF4LCArbWF4LCAwLCAxMDApO1xuICAgICAgICAgICAgY29uc3QgaXB5ID0gdGhpcy5pbnZlcnRzWV8gPyAxMDAgLSBweSA6IHB5O1xuICAgICAgICAgICAgdGhpcy5saW5lRWxlbV8uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3gyJywgYCR7cHh9JWApO1xuICAgICAgICAgICAgdGhpcy5saW5lRWxlbV8uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3kyJywgYCR7aXB5fSVgKTtcbiAgICAgICAgICAgIHRoaXMubWFya2VyRWxlbV8uc3R5bGUubGVmdCA9IGAke3B4fSVgO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5zdHlsZS50b3AgPSBgJHtpcHl9JWA7XG4gICAgICAgIH1cbiAgICAgICAgb25WYWx1ZUNoYW5nZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICBvbkZvbGRhYmxlQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZU9mZnNldChldiwgYmFzZVN0ZXBzLCBpbnZlcnRzWSkge1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgZ2V0U3RlcEZvcktleShiYXNlU3RlcHNbMF0sIGdldEhvcml6b250YWxTdGVwS2V5cyhldikpLFxuICAgICAgICAgICAgZ2V0U3RlcEZvcktleShiYXNlU3RlcHNbMV0sIGdldFZlcnRpY2FsU3RlcEtleXMoZXYpKSAqIChpbnZlcnRzWSA/IDEgOiAtMSksXG4gICAgICAgIF07XG4gICAgfVxuICAgIGNsYXNzIFBvaW50MmRQaWNrZXJDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25QYWRLZXlEb3duXyA9IHRoaXMub25QYWRLZXlEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBhZEtleVVwXyA9IHRoaXMub25QYWRLZXlVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyRG93bl8gPSB0aGlzLm9uUG9pbnRlckRvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlck1vdmVfID0gdGhpcy5vblBvaW50ZXJNb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJVcF8gPSB0aGlzLm9uUG9pbnRlclVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMuYmFzZVN0ZXBzXyA9IGNvbmZpZy5iYXNlU3RlcHM7XG4gICAgICAgICAgICB0aGlzLm1heFZhbHVlXyA9IGNvbmZpZy5tYXhWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuaW52ZXJ0c1lfID0gY29uZmlnLmludmVydHNZO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IFBvaW50MmRQaWNrZXJWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIGludmVydHNZOiB0aGlzLmludmVydHNZXyxcbiAgICAgICAgICAgICAgICBsYXlvdXQ6IGNvbmZpZy5sYXlvdXQsXG4gICAgICAgICAgICAgICAgbWF4VmFsdWU6IHRoaXMubWF4VmFsdWVfLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXyA9IG5ldyBQb2ludGVySGFuZGxlcih0aGlzLnZpZXcucGFkRWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbignZG93bicsIHRoaXMub25Qb2ludGVyRG93bl8pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ21vdmUnLCB0aGlzLm9uUG9pbnRlck1vdmVfKTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCd1cCcsIHRoaXMub25Qb2ludGVyVXBfKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5wYWRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uUGFkS2V5RG93bl8pO1xuICAgICAgICAgICAgdGhpcy52aWV3LnBhZEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLm9uUGFkS2V5VXBfKTtcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVQb2ludGVyRXZlbnRfKGQsIG9wdHMpIHtcbiAgICAgICAgICAgIGlmICghZC5wb2ludCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IG1heCA9IHRoaXMubWF4VmFsdWVfO1xuICAgICAgICAgICAgY29uc3QgcHggPSBtYXBSYW5nZShkLnBvaW50LngsIDAsIGQuYm91bmRzLndpZHRoLCAtbWF4LCArbWF4KTtcbiAgICAgICAgICAgIGNvbnN0IHB5ID0gbWFwUmFuZ2UodGhpcy5pbnZlcnRzWV8gPyBkLmJvdW5kcy5oZWlnaHQgLSBkLnBvaW50LnkgOiBkLnBvaW50LnksIDAsIGQuYm91bmRzLmhlaWdodCwgLW1heCwgK21heCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKG5ldyBQb2ludDJkKHB4LCBweSksIG9wdHMpO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlckRvd25fKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJNb3ZlXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyVXBfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25QYWRLZXlEb3duXyhldikge1xuICAgICAgICAgICAgaWYgKGlzQXJyb3dLZXkoZXYua2V5KSkge1xuICAgICAgICAgICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBbZHgsIGR5XSA9IGNvbXB1dGVPZmZzZXQoZXYsIHRoaXMuYmFzZVN0ZXBzXywgdGhpcy5pbnZlcnRzWV8pO1xuICAgICAgICAgICAgaWYgKGR4ID09PSAwICYmIGR5ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZShuZXcgUG9pbnQyZCh0aGlzLnZhbHVlLnJhd1ZhbHVlLnggKyBkeCwgdGhpcy52YWx1ZS5yYXdWYWx1ZS55ICsgZHkpLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUGFkS2V5VXBfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBbZHgsIGR5XSA9IGNvbXB1dGVPZmZzZXQoZXYsIHRoaXMuYmFzZVN0ZXBzXywgdGhpcy5pbnZlcnRzWV8pO1xuICAgICAgICAgICAgaWYgKGR4ID09PSAwICYmIGR5ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlLnJhd1ZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFBvaW50MmRDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICB0aGlzLm9uUG9wdXBDaGlsZEJsdXJfID0gdGhpcy5vblBvcHVwQ2hpbGRCbHVyXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvcHVwQ2hpbGRLZXlkb3duXyA9IHRoaXMub25Qb3B1cENoaWxkS2V5ZG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25QYWRCdXR0b25CbHVyXyA9IHRoaXMub25QYWRCdXR0b25CbHVyXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBhZEJ1dHRvbkNsaWNrXyA9IHRoaXMub25QYWRCdXR0b25DbGlja18uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLmZvbGRhYmxlXyA9IEZvbGRhYmxlLmNyZWF0ZShjb25maWcuZXhwYW5kZWQpO1xuICAgICAgICAgICAgdGhpcy5wb3BDXyA9XG4gICAgICAgICAgICAgICAgY29uZmlnLnBpY2tlckxheW91dCA9PT0gJ3BvcHVwJ1xuICAgICAgICAgICAgICAgICAgICA/IG5ldyBQb3B1cENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBwYWRDID0gbmV3IFBvaW50MmRQaWNrZXJDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGJhc2VTdGVwczogW2NvbmZpZy5heGVzWzBdLmJhc2VTdGVwLCBjb25maWcuYXhlc1sxXS5iYXNlU3RlcF0sXG4gICAgICAgICAgICAgICAgaW52ZXJ0c1k6IGNvbmZpZy5pbnZlcnRzWSxcbiAgICAgICAgICAgICAgICBsYXlvdXQ6IGNvbmZpZy5waWNrZXJMYXlvdXQsXG4gICAgICAgICAgICAgICAgbWF4VmFsdWU6IGNvbmZpZy5tYXhWYWx1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBwYWRDLnZpZXcuYWxsRm9jdXNhYmxlRWxlbWVudHMuZm9yRWFjaCgoZWxlbSkgPT4ge1xuICAgICAgICAgICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMub25Qb3B1cENoaWxkQmx1cl8pO1xuICAgICAgICAgICAgICAgIGVsZW0uYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25Qb3B1cENoaWxkS2V5ZG93bl8pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnBpY2tlckNfID0gcGFkQztcbiAgICAgICAgICAgIHRoaXMudGV4dENfID0gbmV3IFBvaW50TmRUZXh0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBhc3NlbWJseTogUG9pbnQyZEFzc2VtYmx5LFxuICAgICAgICAgICAgICAgIGF4ZXM6IGNvbmZpZy5heGVzLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogY29uZmlnLnBhcnNlcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgUG9pbnQyZFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IHRoaXMuZm9sZGFibGVfLnZhbHVlKCdleHBhbmRlZCcpLFxuICAgICAgICAgICAgICAgIHBpY2tlckxheW91dDogY29uZmlnLnBpY2tlckxheW91dCxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcudGV4dEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy50ZXh0Q18udmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgIChfYSA9IHRoaXMudmlldy5idXR0b25FbGVtZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMub25QYWRCdXR0b25CbHVyXyk7XG4gICAgICAgICAgICAoX2IgPSB0aGlzLnZpZXcuYnV0dG9uRWxlbWVudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vblBhZEJ1dHRvbkNsaWNrXyk7XG4gICAgICAgICAgICBpZiAodGhpcy5wb3BDXykge1xuICAgICAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMucG9wQ18udmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcENfLnZpZXcuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnBpY2tlckNfLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgY29ubmVjdFZhbHVlcyh7XG4gICAgICAgICAgICAgICAgICAgIHByaW1hcnk6IHRoaXMuZm9sZGFibGVfLnZhbHVlKCdleHBhbmRlZCcpLFxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnk6IHRoaXMucG9wQ18uc2hvd3MsXG4gICAgICAgICAgICAgICAgICAgIGZvcndhcmQ6IChwKSA9PiBwLnJhd1ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBiYWNrd2FyZDogKF8sIHMpID0+IHMucmF3VmFsdWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnZpZXcucGlja2VyRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMudmlldy5waWNrZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMucGlja2VyQ18udmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBiaW5kRm9sZGFibGUodGhpcy5mb2xkYWJsZV8sIHRoaXMudmlldy5waWNrZXJFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblBhZEJ1dHRvbkJsdXJfKGUpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5wb3BDXykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLnZpZXcuZWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IG5leHRUYXJnZXQgPSBmb3JjZUNhc3QoZS5yZWxhdGVkVGFyZ2V0KTtcbiAgICAgICAgICAgIGlmICghbmV4dFRhcmdldCB8fCAhZWxlbS5jb250YWlucyhuZXh0VGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wQ18uc2hvd3MucmF3VmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblBhZEJ1dHRvbkNsaWNrXygpIHtcbiAgICAgICAgICAgIHRoaXMuZm9sZGFibGVfLnNldCgnZXhwYW5kZWQnLCAhdGhpcy5mb2xkYWJsZV8uZ2V0KCdleHBhbmRlZCcpKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmZvbGRhYmxlXy5nZXQoJ2V4cGFuZGVkJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlckNfLnZpZXcuYWxsRm9jdXNhYmxlRWxlbWVudHNbMF0uZm9jdXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblBvcHVwQ2hpbGRCbHVyXyhldikge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBvcENfKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZWxlbSA9IHRoaXMucG9wQ18udmlldy5lbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgbmV4dFRhcmdldCA9IGZpbmROZXh0VGFyZ2V0KGV2KTtcbiAgICAgICAgICAgIGlmIChuZXh0VGFyZ2V0ICYmIGVsZW0uY29udGFpbnMobmV4dFRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAobmV4dFRhcmdldCAmJlxuICAgICAgICAgICAgICAgIG5leHRUYXJnZXQgPT09IHRoaXMudmlldy5idXR0b25FbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgIXN1cHBvcnRzVG91Y2goZWxlbS5vd25lckRvY3VtZW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucG9wQ18uc2hvd3MucmF3VmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBvblBvcHVwQ2hpbGRLZXlkb3duXyhldikge1xuICAgICAgICAgICAgaWYgKHRoaXMucG9wQ18pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXYua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcENfLnNob3dzLnJhd1ZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy52aWV3LnBpY2tlckVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZXYua2V5ID09PSAnRXNjYXBlJykge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXcuYnV0dG9uRWxlbWVudC5mb2N1cygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBvaW50MmRGcm9tVW5rbm93bih2YWx1ZSkge1xuICAgICAgICByZXR1cm4gUG9pbnQyZC5pc09iamVjdCh2YWx1ZSlcbiAgICAgICAgICAgID8gbmV3IFBvaW50MmQodmFsdWUueCwgdmFsdWUueSlcbiAgICAgICAgICAgIDogbmV3IFBvaW50MmQoKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gd3JpdGVQb2ludDJkKHRhcmdldCwgdmFsdWUpIHtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3gnLCB2YWx1ZS54KTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ3knLCB2YWx1ZS55KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50KHBhcmFtcywgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIGlmICghcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gW107XG4gICAgICAgIGNvbnN0IGNzID0gY3JlYXRlU3RlcENvbnN0cmFpbnQocGFyYW1zLCBpbml0aWFsVmFsdWUpO1xuICAgICAgICBpZiAoY3MpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2goY3MpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHJzID0gY3JlYXRlUmFuZ2VDb25zdHJhaW50KHBhcmFtcyk7XG4gICAgICAgIGlmIChycykge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChycyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDb21wb3NpdGVDb25zdHJhaW50KGNvbnN0cmFpbnRzKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQ29uc3RyYWludCQzKHBhcmFtcywgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnROZENvbnN0cmFpbnQoe1xuICAgICAgICAgICAgYXNzZW1ibHk6IFBvaW50MmRBc3NlbWJseSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICAgICAgICBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50KCd4JyBpbiBwYXJhbXMgPyBwYXJhbXMueCA6IHVuZGVmaW5lZCwgaW5pdGlhbFZhbHVlLngpLFxuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQoJ3knIGluIHBhcmFtcyA/IHBhcmFtcy55IDogdW5kZWZpbmVkLCBpbml0aWFsVmFsdWUueSksXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U3VpdGFibGVNYXhEaW1lbnNpb25WYWx1ZShjb25zdHJhaW50LCByYXdWYWx1ZSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCByYyA9IGNvbnN0cmFpbnQgJiYgZmluZENvbnN0cmFpbnQoY29uc3RyYWludCwgUmFuZ2VDb25zdHJhaW50KTtcbiAgICAgICAgaWYgKHJjKSB7XG4gICAgICAgICAgICByZXR1cm4gTWF0aC5tYXgoTWF0aC5hYnMoKF9hID0gcmMubWluVmFsdWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDApLCBNYXRoLmFicygoX2IgPSByYy5tYXhWYWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogMCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRCYXNlU3RlcChjb25zdHJhaW50KTtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHN0ZXApICogMTAsIE1hdGguYWJzKHJhd1ZhbHVlKSAqIDEwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U3VpdGFibGVNYXhWYWx1ZShpbml0aWFsVmFsdWUsIGNvbnN0cmFpbnQpIHtcbiAgICAgICAgY29uc3QgeGMgPSBjb25zdHJhaW50IGluc3RhbmNlb2YgUG9pbnROZENvbnN0cmFpbnRcbiAgICAgICAgICAgID8gY29uc3RyYWludC5jb21wb25lbnRzWzBdXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgeWMgPSBjb25zdHJhaW50IGluc3RhbmNlb2YgUG9pbnROZENvbnN0cmFpbnRcbiAgICAgICAgICAgID8gY29uc3RyYWludC5jb21wb25lbnRzWzFdXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgeHIgPSBnZXRTdWl0YWJsZU1heERpbWVuc2lvblZhbHVlKHhjLCBpbml0aWFsVmFsdWUueCk7XG4gICAgICAgIGNvbnN0IHlyID0gZ2V0U3VpdGFibGVNYXhEaW1lbnNpb25WYWx1ZSh5YywgaW5pdGlhbFZhbHVlLnkpO1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoeHIsIHlyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQXhpcyQyKGluaXRpYWxWYWx1ZSwgY29uc3RyYWludCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYmFzZVN0ZXA6IGdldEJhc2VTdGVwKGNvbnN0cmFpbnQpLFxuICAgICAgICAgICAgY29uc3RyYWludDogY29uc3RyYWludCxcbiAgICAgICAgICAgIHRleHRQcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlKGNvbnN0cmFpbnQsIGluaXRpYWxWYWx1ZSksXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoZ2V0U3VpdGFibGVEZWNpbWFsRGlnaXRzKGNvbnN0cmFpbnQsIGluaXRpYWxWYWx1ZSkpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNob3VsZEludmVydFkocGFyYW1zKSB7XG4gICAgICAgIGlmICghKCd5JyBpbiBwYXJhbXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeVBhcmFtcyA9IHBhcmFtcy55O1xuICAgICAgICBpZiAoIXlQYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ2ludmVydGVkJyBpbiB5UGFyYW1zID8gISF5UGFyYW1zLmludmVydGVkIDogZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IFBvaW50MmRJbnB1dFBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdpbnB1dC1wb2ludDJkJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFQb2ludDJkLmlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogcC5vcHRpb25hbC5ib29sZWFuLFxuICAgICAgICAgICAgICAgIHBpY2tlcjogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQaWNrZXJMYXlvdXQpLFxuICAgICAgICAgICAgICAgIHg6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlUG9pbnREaW1lbnNpb25QYXJhbXMpLFxuICAgICAgICAgICAgICAgIHk6IHAub3B0aW9uYWwub2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgaW52ZXJ0ZWQ6IHAub3B0aW9uYWwuYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgbWF4OiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgbWluOiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgc3RlcDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IHBvaW50MmRGcm9tVW5rbm93bixcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IChhcmdzKSA9PiBjcmVhdGVDb25zdHJhaW50JDMoYXJncy5wYXJhbXMsIGFyZ3MuaW5pdGlhbFZhbHVlKSxcbiAgICAgICAgICAgIGVxdWFsczogUG9pbnQyZC5lcXVhbHMsXG4gICAgICAgICAgICB3cml0ZXI6IChfYXJncykgPT4gd3JpdGVQb2ludDJkLFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gYXJncy5kb2N1bWVudDtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJncy52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBhcmdzLmNvbnN0cmFpbnQ7XG4gICAgICAgICAgICBpZiAoIShjIGluc3RhbmNlb2YgUG9pbnROZENvbnN0cmFpbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXhwYW5kZWQgPSAnZXhwYW5kZWQnIGluIGFyZ3MucGFyYW1zID8gYXJncy5wYXJhbXMuZXhwYW5kZWQgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBwaWNrZXIgPSAncGlja2VyJyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLnBpY2tlciA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9pbnQyZENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgYXhlczogW1xuICAgICAgICAgICAgICAgICAgICBjcmVhdGVBeGlzJDIodmFsdWUucmF3VmFsdWUueCwgYy5jb21wb25lbnRzWzBdKSxcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlQXhpcyQyKHZhbHVlLnJhd1ZhbHVlLnksIGMuY29tcG9uZW50c1sxXSksXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogZXhwYW5kZWQgIT09IG51bGwgJiYgZXhwYW5kZWQgIT09IHZvaWQgMCA/IGV4cGFuZGVkIDogZmFsc2UsXG4gICAgICAgICAgICAgICAgaW52ZXJ0c1k6IHNob3VsZEludmVydFkoYXJncy5wYXJhbXMpLFxuICAgICAgICAgICAgICAgIG1heFZhbHVlOiBnZXRTdWl0YWJsZU1heFZhbHVlKHZhbHVlLnJhd1ZhbHVlLCBjKSxcbiAgICAgICAgICAgICAgICBwYXJzZXI6IHBhcnNlTnVtYmVyLFxuICAgICAgICAgICAgICAgIHBpY2tlckxheW91dDogcGlja2VyICE9PSBudWxsICYmIHBpY2tlciAhPT0gdm9pZCAwID8gcGlja2VyIDogJ3BvcHVwJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjbGFzcyBQb2ludDNkIHtcbiAgICAgICAgY29uc3RydWN0b3IoeCA9IDAsIHkgPSAwLCB6ID0gMCkge1xuICAgICAgICAgICAgdGhpcy54ID0geDtcbiAgICAgICAgICAgIHRoaXMueSA9IHk7XG4gICAgICAgICAgICB0aGlzLnogPSB6O1xuICAgICAgICB9XG4gICAgICAgIGdldENvbXBvbmVudHMoKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMueCwgdGhpcy55LCB0aGlzLnpdO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBpc09iamVjdChvYmopIHtcbiAgICAgICAgICAgIGlmIChpc0VtcHR5KG9iaikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB4ID0gb2JqLng7XG4gICAgICAgICAgICBjb25zdCB5ID0gb2JqLnk7XG4gICAgICAgICAgICBjb25zdCB6ID0gb2JqLno7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHggIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHkgIT09ICdudW1iZXInIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIHogIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGVxdWFscyh2MSwgdjIpIHtcbiAgICAgICAgICAgIHJldHVybiB2MS54ID09PSB2Mi54ICYmIHYxLnkgPT09IHYyLnkgJiYgdjEueiA9PT0gdjIuejtcbiAgICAgICAgfVxuICAgICAgICB0b09iamVjdCgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgeDogdGhpcy54LFxuICAgICAgICAgICAgICAgIHk6IHRoaXMueSxcbiAgICAgICAgICAgICAgICB6OiB0aGlzLnosXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGNvbnN0IFBvaW50M2RBc3NlbWJseSA9IHtcbiAgICAgICAgdG9Db21wb25lbnRzOiAocCkgPT4gcC5nZXRDb21wb25lbnRzKCksXG4gICAgICAgIGZyb21Db21wb25lbnRzOiAoY29tcHMpID0+IG5ldyBQb2ludDNkKC4uLmNvbXBzKSxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gcG9pbnQzZEZyb21Vbmtub3duKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBQb2ludDNkLmlzT2JqZWN0KHZhbHVlKVxuICAgICAgICAgICAgPyBuZXcgUG9pbnQzZCh2YWx1ZS54LCB2YWx1ZS55LCB2YWx1ZS56KVxuICAgICAgICAgICAgOiBuZXcgUG9pbnQzZCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3cml0ZVBvaW50M2QodGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgneCcsIHZhbHVlLngpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgneScsIHZhbHVlLnkpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgneicsIHZhbHVlLnopO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbnN0cmFpbnQkMihwYXJhbXMsIGluaXRpYWxWYWx1ZSkge1xuICAgICAgICByZXR1cm4gbmV3IFBvaW50TmRDb25zdHJhaW50KHtcbiAgICAgICAgICAgIGFzc2VtYmx5OiBQb2ludDNkQXNzZW1ibHksXG4gICAgICAgICAgICBjb21wb25lbnRzOiBbXG4gICAgICAgICAgICAgICAgY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCgneCcgaW4gcGFyYW1zID8gcGFyYW1zLnggOiB1bmRlZmluZWQsIGluaXRpYWxWYWx1ZS54KSxcbiAgICAgICAgICAgICAgICBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50KCd5JyBpbiBwYXJhbXMgPyBwYXJhbXMueSA6IHVuZGVmaW5lZCwgaW5pdGlhbFZhbHVlLnkpLFxuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQoJ3onIGluIHBhcmFtcyA/IHBhcmFtcy56IDogdW5kZWZpbmVkLCBpbml0aWFsVmFsdWUueiksXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQXhpcyQxKGluaXRpYWxWYWx1ZSwgY29uc3RyYWludCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYmFzZVN0ZXA6IGdldEJhc2VTdGVwKGNvbnN0cmFpbnQpLFxuICAgICAgICAgICAgY29uc3RyYWludDogY29uc3RyYWludCxcbiAgICAgICAgICAgIHRleHRQcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlKGNvbnN0cmFpbnQsIGluaXRpYWxWYWx1ZSksXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoZ2V0U3VpdGFibGVEZWNpbWFsRGlnaXRzKGNvbnN0cmFpbnQsIGluaXRpYWxWYWx1ZSkpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IFBvaW50M2RJbnB1dFBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdpbnB1dC1wb2ludDNkJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFQb2ludDNkLmlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICB4OiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBvaW50RGltZW5zaW9uUGFyYW1zKSxcbiAgICAgICAgICAgICAgICB5OiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBvaW50RGltZW5zaW9uUGFyYW1zKSxcbiAgICAgICAgICAgICAgICB6OiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZVBvaW50RGltZW5zaW9uUGFyYW1zKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChfYXJncykgPT4gcG9pbnQzZEZyb21Vbmtub3duLFxuICAgICAgICAgICAgY29uc3RyYWludDogKGFyZ3MpID0+IGNyZWF0ZUNvbnN0cmFpbnQkMihhcmdzLnBhcmFtcywgYXJncy5pbml0aWFsVmFsdWUpLFxuICAgICAgICAgICAgZXF1YWxzOiBQb2ludDNkLmVxdWFscyxcbiAgICAgICAgICAgIHdyaXRlcjogKF9hcmdzKSA9PiB3cml0ZVBvaW50M2QsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ3MudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBjID0gYXJncy5jb25zdHJhaW50O1xuICAgICAgICAgICAgaWYgKCEoYyBpbnN0YW5jZW9mIFBvaW50TmRDb25zdHJhaW50KSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9pbnROZFRleHRDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBhc3NlbWJseTogUG9pbnQzZEFzc2VtYmx5LFxuICAgICAgICAgICAgICAgIGF4ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlQXhpcyQxKHZhbHVlLnJhd1ZhbHVlLngsIGMuY29tcG9uZW50c1swXSksXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUF4aXMkMSh2YWx1ZS5yYXdWYWx1ZS55LCBjLmNvbXBvbmVudHNbMV0pLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVBeGlzJDEodmFsdWUucmF3VmFsdWUueiwgYy5jb21wb25lbnRzWzJdKSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogcGFyc2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xhc3MgUG9pbnQ0ZCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHggPSAwLCB5ID0gMCwgeiA9IDAsIHcgPSAwKSB7XG4gICAgICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICAgICAgdGhpcy55ID0geTtcbiAgICAgICAgICAgIHRoaXMueiA9IHo7XG4gICAgICAgICAgICB0aGlzLncgPSB3O1xuICAgICAgICB9XG4gICAgICAgIGdldENvbXBvbmVudHMoKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMueCwgdGhpcy55LCB0aGlzLnosIHRoaXMud107XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGlzT2JqZWN0KG9iaikge1xuICAgICAgICAgICAgaWYgKGlzRW1wdHkob2JqKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHggPSBvYmoueDtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBvYmoueTtcbiAgICAgICAgICAgIGNvbnN0IHogPSBvYmouejtcbiAgICAgICAgICAgIGNvbnN0IHcgPSBvYmoudztcbiAgICAgICAgICAgIGlmICh0eXBlb2YgeCAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgeSAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgeiAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgdyAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZXF1YWxzKHYxLCB2Mikge1xuICAgICAgICAgICAgcmV0dXJuIHYxLnggPT09IHYyLnggJiYgdjEueSA9PT0gdjIueSAmJiB2MS56ID09PSB2Mi56ICYmIHYxLncgPT09IHYyLnc7XG4gICAgICAgIH1cbiAgICAgICAgdG9PYmplY3QoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHg6IHRoaXMueCxcbiAgICAgICAgICAgICAgICB5OiB0aGlzLnksXG4gICAgICAgICAgICAgICAgejogdGhpcy56LFxuICAgICAgICAgICAgICAgIHc6IHRoaXMudyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgUG9pbnQ0ZEFzc2VtYmx5ID0ge1xuICAgICAgICB0b0NvbXBvbmVudHM6IChwKSA9PiBwLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgZnJvbUNvbXBvbmVudHM6IChjb21wcykgPT4gbmV3IFBvaW50NGQoLi4uY29tcHMpLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBwb2ludDRkRnJvbVVua25vd24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFBvaW50NGQuaXNPYmplY3QodmFsdWUpXG4gICAgICAgICAgICA/IG5ldyBQb2ludDRkKHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpXG4gICAgICAgICAgICA6IG5ldyBQb2ludDRkKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdyaXRlUG9pbnQ0ZCh0YXJnZXQsIHZhbHVlKSB7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd4JywgdmFsdWUueCk7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd5JywgdmFsdWUueSk7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd6JywgdmFsdWUueik7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd3JywgdmFsdWUudyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQ29uc3RyYWludCQxKHBhcmFtcywgaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnROZENvbnN0cmFpbnQoe1xuICAgICAgICAgICAgYXNzZW1ibHk6IFBvaW50NGRBc3NlbWJseSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICAgICAgICBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50KCd4JyBpbiBwYXJhbXMgPyBwYXJhbXMueCA6IHVuZGVmaW5lZCwgaW5pdGlhbFZhbHVlLngpLFxuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQoJ3knIGluIHBhcmFtcyA/IHBhcmFtcy55IDogdW5kZWZpbmVkLCBpbml0aWFsVmFsdWUueSksXG4gICAgICAgICAgICAgICAgY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCgneicgaW4gcGFyYW1zID8gcGFyYW1zLnogOiB1bmRlZmluZWQsIGluaXRpYWxWYWx1ZS56KSxcbiAgICAgICAgICAgICAgICBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50KCd3JyBpbiBwYXJhbXMgPyBwYXJhbXMudyA6IHVuZGVmaW5lZCwgaW5pdGlhbFZhbHVlLncpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUF4aXMoaW5pdGlhbFZhbHVlLCBjb25zdHJhaW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBiYXNlU3RlcDogZ2V0QmFzZVN0ZXAoY29uc3RyYWludCksXG4gICAgICAgICAgICBjb25zdHJhaW50OiBjb25zdHJhaW50LFxuICAgICAgICAgICAgdGV4dFByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICBkcmFnZ2luZ1NjYWxlOiBnZXRTdWl0YWJsZURyYWdnaW5nU2NhbGUoY29uc3RyYWludCwgaW5pdGlhbFZhbHVlKSxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNyZWF0ZU51bWJlckZvcm1hdHRlcihnZXRTdWl0YWJsZURlY2ltYWxEaWdpdHMoY29uc3RyYWludCwgaW5pdGlhbFZhbHVlKSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgUG9pbnQ0ZElucHV0UGx1Z2luID0ge1xuICAgICAgICBpZDogJ2lucHV0LXBvaW50NGQnLFxuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBhY2NlcHQ6ICh2YWx1ZSwgcGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAoIVBvaW50NGQuaXNPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIHg6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlUG9pbnREaW1lbnNpb25QYXJhbXMpLFxuICAgICAgICAgICAgICAgIHk6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlUG9pbnREaW1lbnNpb25QYXJhbXMpLFxuICAgICAgICAgICAgICAgIHo6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlUG9pbnREaW1lbnNpb25QYXJhbXMpLFxuICAgICAgICAgICAgICAgIHc6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlUG9pbnREaW1lbnNpb25QYXJhbXMpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKF9hcmdzKSA9PiBwb2ludDRkRnJvbVVua25vd24sXG4gICAgICAgICAgICBjb25zdHJhaW50OiAoYXJncykgPT4gY3JlYXRlQ29uc3RyYWludCQxKGFyZ3MucGFyYW1zLCBhcmdzLmluaXRpYWxWYWx1ZSksXG4gICAgICAgICAgICBlcXVhbHM6IFBvaW50NGQuZXF1YWxzLFxuICAgICAgICAgICAgd3JpdGVyOiAoX2FyZ3MpID0+IHdyaXRlUG9pbnQ0ZCxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJncy52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBhcmdzLmNvbnN0cmFpbnQ7XG4gICAgICAgICAgICBpZiAoIShjIGluc3RhbmNlb2YgUG9pbnROZENvbnN0cmFpbnQpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb2ludE5kVGV4dENvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGFzc2VtYmx5OiBQb2ludDRkQXNzZW1ibHksXG4gICAgICAgICAgICAgICAgYXhlczogdmFsdWUucmF3VmFsdWVcbiAgICAgICAgICAgICAgICAgICAgLmdldENvbXBvbmVudHMoKVxuICAgICAgICAgICAgICAgICAgICAubWFwKChjb21wLCBpbmRleCkgPT4gY3JlYXRlQXhpcyhjb21wLCBjLmNvbXBvbmVudHNbaW5kZXhdKSksXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBwYXJzZU51bWJlcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50KHBhcmFtcykge1xuICAgICAgICBjb25zdCBjb25zdHJhaW50cyA9IFtdO1xuICAgICAgICBjb25zdCBsYyA9IGNyZWF0ZUxpc3RDb25zdHJhaW50KHBhcmFtcy5vcHRpb25zKTtcbiAgICAgICAgaWYgKGxjKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKGxjKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENvbXBvc2l0ZUNvbnN0cmFpbnQoY29uc3RyYWludHMpO1xuICAgIH1cbiAgICBjb25zdCBTdHJpbmdJbnB1dFBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdpbnB1dC1zdHJpbmcnLFxuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBhY2NlcHQ6ICh2YWx1ZSwgcGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBwLm9wdGlvbmFsLmN1c3RvbShwYXJzZUxpc3RPcHRpb25zKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChfYXJncykgPT4gc3RyaW5nRnJvbVVua25vd24sXG4gICAgICAgICAgICBjb25zdHJhaW50OiAoYXJncykgPT4gY3JlYXRlQ29uc3RyYWludChhcmdzLnBhcmFtcyksXG4gICAgICAgICAgICB3cml0ZXI6IChfYXJncykgPT4gd3JpdGVQcmltaXRpdmUsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBhcmdzLmRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhcmdzLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgYyA9IGFyZ3MuY29uc3RyYWludDtcbiAgICAgICAgICAgIGlmIChjICYmIGZpbmRDb25zdHJhaW50KGMsIExpc3RDb25zdHJhaW50KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGlzdENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IChfYSA9IGZpbmRMaXN0SXRlbXMoYykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IFtdLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXh0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBwYXJzZXI6ICh2KSA9PiB2LFxuICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXRTdHJpbmcsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgQ29uc3RhbnRzID0ge1xuICAgICAgICBtb25pdG9yOiB7XG4gICAgICAgICAgICBkZWZhdWx0SW50ZXJ2YWw6IDIwMCxcbiAgICAgICAgICAgIGRlZmF1bHRMaW5lQ291bnQ6IDMsXG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGNsYXNzTmFtZSQyID0gQ2xhc3NOYW1lKCdtbGwnKTtcbiAgICBjbGFzcyBNdWx0aUxvZ1ZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlVXBkYXRlXyA9IHRoaXMub25WYWx1ZVVwZGF0ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVyXyA9IGNvbmZpZy5mb3JtYXR0ZXI7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMigpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0YXJlYUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICAgICAgICAgIHRleHRhcmVhRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQyKCdpJykpO1xuICAgICAgICAgICAgdGV4dGFyZWFFbGVtLnN0eWxlLmhlaWdodCA9IGBjYWxjKHZhcigtLWJsZC11cykgKiAke2NvbmZpZy5saW5lQ291bnR9KWA7XG4gICAgICAgICAgICB0ZXh0YXJlYUVsZW0ucmVhZE9ubHkgPSB0cnVlO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQodGV4dGFyZWFFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0YXJlYUVsZW0pO1xuICAgICAgICAgICAgdGhpcy50ZXh0YXJlYUVsZW1fID0gdGV4dGFyZWFFbGVtO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZVVwZGF0ZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICBjb25zdCBlbGVtID0gdGhpcy50ZXh0YXJlYUVsZW1fO1xuICAgICAgICAgICAgY29uc3Qgc2hvdWxkU2Nyb2xsID0gZWxlbS5zY3JvbGxUb3AgPT09IGVsZW0uc2Nyb2xsSGVpZ2h0IC0gZWxlbS5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZS5mb3JFYWNoKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpbmVzLnB1c2godGhpcy5mb3JtYXR0ZXJfKHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlbGVtLnRleHRDb250ZW50ID0gbGluZXMuam9pbignXFxuJyk7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgZWxlbS5zY3JvbGxUb3AgPSBlbGVtLnNjcm9sbEhlaWdodDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlVXBkYXRlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgTXVsdGlMb2dDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgTXVsdGlMb2dWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY29uZmlnLmZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICBsaW5lQ291bnQ6IGNvbmZpZy5saW5lQ291bnQsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJDEgPSBDbGFzc05hbWUoJ3NnbCcpO1xuICAgIGNsYXNzIFNpbmdsZUxvZ1ZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlVXBkYXRlXyA9IHRoaXMub25WYWx1ZVVwZGF0ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0dGVyXyA9IGNvbmZpZy5mb3JtYXR0ZXI7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMSgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBpbnB1dEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQxKCdpJykpO1xuICAgICAgICAgICAgaW5wdXRFbGVtLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGlucHV0RWxlbS50eXBlID0gJ3RleHQnO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoaW5wdXRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChpbnB1dEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQgPSBpbnB1dEVsZW07XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlVXBkYXRlXyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlcyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBsYXN0VmFsdWUgPSB2YWx1ZXNbdmFsdWVzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUgPVxuICAgICAgICAgICAgICAgIGxhc3RWYWx1ZSAhPT0gdW5kZWZpbmVkID8gdGhpcy5mb3JtYXR0ZXJfKGxhc3RWYWx1ZSkgOiAnJztcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlVXBkYXRlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgU2luZ2xlTG9nQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IFNpbmdsZUxvZ1ZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBjb25maWcuZm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IEJvb2xlYW5Nb25pdG9yUGx1Z2luID0ge1xuICAgICAgICBpZDogJ21vbml0b3ItYm9vbCcsXG4gICAgICAgIHR5cGU6ICdtb25pdG9yJyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIGxpbmVDb3VudDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IGJvb2xGcm9tVW5rbm93bixcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGlmIChhcmdzLnZhbHVlLnJhd1ZhbHVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgU2luZ2xlTG9nQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogQm9vbGVhbkZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFyZ3MudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IE11bHRpTG9nQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBCb29sZWFuRm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIGxpbmVDb3VudDogKF9hID0gYXJncy5wYXJhbXMubGluZUNvdW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBDb25zdGFudHMubW9uaXRvci5kZWZhdWx0TGluZUNvdW50LFxuICAgICAgICAgICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgY2xhc3NOYW1lID0gQ2xhc3NOYW1lKCdncmwnKTtcbiAgICBjbGFzcyBHcmFwaExvZ1ZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbkN1cnNvckNoYW5nZV8gPSB0aGlzLm9uQ3Vyc29yQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlVXBkYXRlXyA9IHRoaXMub25WYWx1ZVVwZGF0ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlcl8gPSBjb25maWcuZm9ybWF0dGVyO1xuICAgICAgICAgICAgdGhpcy5wcm9wc18gPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLmN1cnNvcl8gPSBjb25maWcuY3Vyc29yO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JfLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25DdXJzb3JDaGFuZ2VfKTtcbiAgICAgICAgICAgIGNvbnN0IHN2Z0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3N2ZycpO1xuICAgICAgICAgICAgc3ZnRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgnZycpKTtcbiAgICAgICAgICAgIHN2Z0VsZW0uc3R5bGUuaGVpZ2h0ID0gYGNhbGModmFyKC0tYmxkLXVzKSAqICR7Y29uZmlnLmxpbmVDb3VudH0pYDtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChzdmdFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuc3ZnRWxlbV8gPSBzdmdFbGVtO1xuICAgICAgICAgICAgY29uc3QgbGluZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3BvbHlsaW5lJyk7XG4gICAgICAgICAgICB0aGlzLnN2Z0VsZW1fLmFwcGVuZENoaWxkKGxpbmVFbGVtKTtcbiAgICAgICAgICAgIHRoaXMubGluZUVsZW1fID0gbGluZUVsZW07XG4gICAgICAgICAgICBjb25zdCB0b29sdGlwRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRvb2x0aXBFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCd0JyksIENsYXNzTmFtZSgndHQnKSgpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0b29sdGlwRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnRvb2x0aXBFbGVtXyA9IHRvb2x0aXBFbGVtO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZVVwZGF0ZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBncmFwaEVsZW1lbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdmdFbGVtXztcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfKCkge1xuICAgICAgICAgICAgY29uc3QgYm91bmRzID0gdGhpcy5zdmdFbGVtXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIGNvbnN0IG1heEluZGV4ID0gdGhpcy52YWx1ZS5yYXdWYWx1ZS5sZW5ndGggLSAxO1xuICAgICAgICAgICAgY29uc3QgbWluID0gdGhpcy5wcm9wc18uZ2V0KCdtaW5WYWx1ZScpO1xuICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5wcm9wc18uZ2V0KCdtYXhWYWx1ZScpO1xuICAgICAgICAgICAgY29uc3QgcG9pbnRzID0gW107XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlLmZvckVhY2goKHYsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHggPSBtYXBSYW5nZShpbmRleCwgMCwgbWF4SW5kZXgsIDAsIGJvdW5kcy53aWR0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeSA9IG1hcFJhbmdlKHYsIG1pbiwgbWF4LCBib3VuZHMuaGVpZ2h0LCAwKTtcbiAgICAgICAgICAgICAgICBwb2ludHMucHVzaChbeCwgeV0uam9pbignLCcpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5saW5lRWxlbV8uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3BvaW50cycsIHBvaW50cy5qb2luKCcgJykpO1xuICAgICAgICAgICAgY29uc3QgdG9vbHRpcEVsZW0gPSB0aGlzLnRvb2x0aXBFbGVtXztcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZS5yYXdWYWx1ZVt0aGlzLmN1cnNvcl8ucmF3VmFsdWVdO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0b29sdGlwRWxlbS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSgndCcsICdhJykpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHR4ID0gbWFwUmFuZ2UodGhpcy5jdXJzb3JfLnJhd1ZhbHVlLCAwLCBtYXhJbmRleCwgMCwgYm91bmRzLndpZHRoKTtcbiAgICAgICAgICAgIGNvbnN0IHR5ID0gbWFwUmFuZ2UodmFsdWUsIG1pbiwgbWF4LCBib3VuZHMuaGVpZ2h0LCAwKTtcbiAgICAgICAgICAgIHRvb2x0aXBFbGVtLnN0eWxlLmxlZnQgPSBgJHt0eH1weGA7XG4gICAgICAgICAgICB0b29sdGlwRWxlbS5zdHlsZS50b3AgPSBgJHt0eX1weGA7XG4gICAgICAgICAgICB0b29sdGlwRWxlbS50ZXh0Q29udGVudCA9IGAke3RoaXMuZm9ybWF0dGVyXyh2YWx1ZSl9YDtcbiAgICAgICAgICAgIGlmICghdG9vbHRpcEVsZW0uY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSgndCcsICdhJykpKSB7XG4gICAgICAgICAgICAgICAgdG9vbHRpcEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ3QnLCAnYScpLCBjbGFzc05hbWUoJ3QnLCAnaW4nKSk7XG4gICAgICAgICAgICAgICAgZm9yY2VSZWZsb3codG9vbHRpcEVsZW0pO1xuICAgICAgICAgICAgICAgIHRvb2x0aXBFbGVtLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKCd0JywgJ2luJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVVcGRhdGVfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgb25DdXJzb3JDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBHcmFwaExvZ0NvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbkdyYXBoTW91c2VNb3ZlXyA9IHRoaXMub25HcmFwaE1vdXNlTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25HcmFwaE1vdXNlTGVhdmVfID0gdGhpcy5vbkdyYXBoTW91c2VMZWF2ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25HcmFwaFBvaW50ZXJEb3duXyA9IHRoaXMub25HcmFwaFBvaW50ZXJEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkdyYXBoUG9pbnRlck1vdmVfID0gdGhpcy5vbkdyYXBoUG9pbnRlck1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uR3JhcGhQb2ludGVyVXBfID0gdGhpcy5vbkdyYXBoUG9pbnRlclVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9wc18gPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5jdXJzb3JfID0gY3JlYXRlVmFsdWUoLTEpO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IEdyYXBoTG9nVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHRoaXMuY3Vyc29yXyxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNvbmZpZy5mb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgbGluZUNvdW50OiBjb25maWcubGluZUNvdW50LFxuICAgICAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzXyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIXN1cHBvcnRzVG91Y2goZG9jKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25HcmFwaE1vdXNlTW92ZV8pO1xuICAgICAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCB0aGlzLm9uR3JhcGhNb3VzZUxlYXZlXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwaCA9IG5ldyBQb2ludGVySGFuZGxlcih0aGlzLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgcGguZW1pdHRlci5vbignZG93bicsIHRoaXMub25HcmFwaFBvaW50ZXJEb3duXyk7XG4gICAgICAgICAgICAgICAgcGguZW1pdHRlci5vbignbW92ZScsIHRoaXMub25HcmFwaFBvaW50ZXJNb3ZlXyk7XG4gICAgICAgICAgICAgICAgcGguZW1pdHRlci5vbigndXAnLCB0aGlzLm9uR3JhcGhQb2ludGVyVXBfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvbkdyYXBoTW91c2VMZWF2ZV8oKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnNvcl8ucmF3VmFsdWUgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBvbkdyYXBoTW91c2VNb3ZlXyhldikge1xuICAgICAgICAgICAgY29uc3QgYm91bmRzID0gdGhpcy52aWV3LmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICB0aGlzLmN1cnNvcl8ucmF3VmFsdWUgPSBNYXRoLmZsb29yKG1hcFJhbmdlKGV2Lm9mZnNldFgsIDAsIGJvdW5kcy53aWR0aCwgMCwgdGhpcy52YWx1ZS5yYXdWYWx1ZS5sZW5ndGgpKTtcbiAgICAgICAgfVxuICAgICAgICBvbkdyYXBoUG9pbnRlckRvd25fKGV2KSB7XG4gICAgICAgICAgICB0aGlzLm9uR3JhcGhQb2ludGVyTW92ZV8oZXYpO1xuICAgICAgICB9XG4gICAgICAgIG9uR3JhcGhQb2ludGVyTW92ZV8oZXYpIHtcbiAgICAgICAgICAgIGlmICghZXYuZGF0YS5wb2ludCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yXy5yYXdWYWx1ZSA9IC0xO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY3Vyc29yXy5yYXdWYWx1ZSA9IE1hdGguZmxvb3IobWFwUmFuZ2UoZXYuZGF0YS5wb2ludC54LCAwLCBldi5kYXRhLmJvdW5kcy53aWR0aCwgMCwgdGhpcy52YWx1ZS5yYXdWYWx1ZS5sZW5ndGgpKTtcbiAgICAgICAgfVxuICAgICAgICBvbkdyYXBoUG9pbnRlclVwXygpIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yXy5yYXdWYWx1ZSA9IC0xO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRm9ybWF0dGVyKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gJ2Zvcm1hdCcgaW4gcGFyYW1zICYmICFpc0VtcHR5KHBhcmFtcy5mb3JtYXQpXG4gICAgICAgICAgICA/IHBhcmFtcy5mb3JtYXRcbiAgICAgICAgICAgIDogY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVUZXh0TW9uaXRvcihhcmdzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGFyZ3MudmFsdWUucmF3VmFsdWUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNpbmdsZUxvZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY3JlYXRlRm9ybWF0dGVyKGFyZ3MucGFyYW1zKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogYXJncy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNdWx0aUxvZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgZm9ybWF0dGVyOiBjcmVhdGVGb3JtYXR0ZXIoYXJncy5wYXJhbXMpLFxuICAgICAgICAgICAgbGluZUNvdW50OiAoX2EgPSBhcmdzLnBhcmFtcy5saW5lQ291bnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IENvbnN0YW50cy5tb25pdG9yLmRlZmF1bHRMaW5lQ291bnQsXG4gICAgICAgICAgICB2YWx1ZTogYXJncy52YWx1ZSxcbiAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVHcmFwaE1vbml0b3IoYXJncykge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgcmV0dXJuIG5ldyBHcmFwaExvZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgZm9ybWF0dGVyOiBjcmVhdGVGb3JtYXR0ZXIoYXJncy5wYXJhbXMpLFxuICAgICAgICAgICAgbGluZUNvdW50OiAoX2EgPSBhcmdzLnBhcmFtcy5saW5lQ291bnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IENvbnN0YW50cy5tb25pdG9yLmRlZmF1bHRMaW5lQ291bnQsXG4gICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgbWF4VmFsdWU6IChfYiA9ICgnbWF4JyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLm1heCA6IG51bGwpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAxMDAsXG4gICAgICAgICAgICAgICAgbWluVmFsdWU6IChfYyA9ICgnbWluJyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLm1pbiA6IG51bGwpKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiAwLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB2YWx1ZTogYXJncy52YWx1ZSxcbiAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBzaG91bGRTaG93R3JhcGgocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiAndmlldycgaW4gcGFyYW1zICYmIHBhcmFtcy52aWV3ID09PSAnZ3JhcGgnO1xuICAgIH1cbiAgICBjb25zdCBOdW1iZXJNb25pdG9yUGx1Z2luID0ge1xuICAgICAgICBpZDogJ21vbml0b3ItbnVtYmVyJyxcbiAgICAgICAgdHlwZTogJ21vbml0b3InLFxuICAgICAgICBhY2NlcHQ6ICh2YWx1ZSwgcGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IHAub3B0aW9uYWwuZnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgbGluZUNvdW50OiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgICAgICBtYXg6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgICAgIG1pbjogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICAgICAgdmlldzogcC5vcHRpb25hbC5zdHJpbmcsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgZGVmYXVsdEJ1ZmZlclNpemU6IChwYXJhbXMpID0+IChzaG91bGRTaG93R3JhcGgocGFyYW1zKSA/IDY0IDogMSksXG4gICAgICAgICAgICByZWFkZXI6IChfYXJncykgPT4gbnVtYmVyRnJvbVVua25vd24sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU2hvd0dyYXBoKGFyZ3MucGFyYW1zKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVHcmFwaE1vbml0b3IoYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlVGV4dE1vbml0b3IoYXJncyk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IFN0cmluZ01vbml0b3JQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnbW9uaXRvci1zdHJpbmcnLFxuICAgICAgICB0eXBlOiAnbW9uaXRvcicsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIGxpbmVDb3VudDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICAgICAgbXVsdGlsaW5lOiBwLm9wdGlvbmFsLmJvb2xlYW4sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IHN0cmluZ0Zyb21Vbmtub3duLFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhcmdzLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgbXVsdGlsaW5lID0gdmFsdWUucmF3VmFsdWUubGVuZ3RoID4gMSB8fFxuICAgICAgICAgICAgICAgICgnbXVsdGlsaW5lJyBpbiBhcmdzLnBhcmFtcyAmJiBhcmdzLnBhcmFtcy5tdWx0aWxpbmUpO1xuICAgICAgICAgICAgaWYgKG11bHRpbGluZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTXVsdGlMb2dDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXRTdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgIGxpbmVDb3VudDogKF9hID0gYXJncy5wYXJhbXMubGluZUNvdW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBDb25zdGFudHMubW9uaXRvci5kZWZhdWx0TGluZUNvdW50LFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNpbmdsZUxvZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogZm9ybWF0U3RyaW5nLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNsYXNzIElucHV0QmluZGluZyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlXyA9IHRoaXMub25WYWx1ZUNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucmVhZGVyID0gY29uZmlnLnJlYWRlcjtcbiAgICAgICAgICAgIHRoaXMud3JpdGVyID0gY29uZmlnLndyaXRlcjtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gY29uZmlnLnRhcmdldDtcbiAgICAgICAgICAgIHRoaXMucmVhZCgpO1xuICAgICAgICB9XG4gICAgICAgIHJlYWQoKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IHRoaXMudGFyZ2V0LnJlYWQoKTtcbiAgICAgICAgICAgIGlmICh0YXJnZXRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZSA9IHRoaXMucmVhZGVyKHRhcmdldFZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB3cml0ZV8ocmF3VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVyKHRoaXMudGFyZ2V0LCByYXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgb25WYWx1ZUNoYW5nZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMud3JpdGVfKGV2LnJhd1ZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgb3B0aW9uczogZXYub3B0aW9ucyxcbiAgICAgICAgICAgICAgICByYXdWYWx1ZTogZXYucmF3VmFsdWUsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVJbnB1dEJpbmRpbmdDb250cm9sbGVyKHBsdWdpbiwgYXJncykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwbHVnaW4uYWNjZXB0KGFyZ3MudGFyZ2V0LnJlYWQoKSwgYXJncy5wYXJhbXMpO1xuICAgICAgICBpZiAoaXNFbXB0eShyZXN1bHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgY29uc3QgdmFsdWVBcmdzID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiBhcmdzLnRhcmdldCxcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogcmVzdWx0LmluaXRpYWxWYWx1ZSxcbiAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LnBhcmFtcyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVhZGVyID0gcGx1Z2luLmJpbmRpbmcucmVhZGVyKHZhbHVlQXJncyk7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnQgPSBwbHVnaW4uYmluZGluZy5jb25zdHJhaW50XG4gICAgICAgICAgICA/IHBsdWdpbi5iaW5kaW5nLmNvbnN0cmFpbnQodmFsdWVBcmdzKVxuICAgICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gY3JlYXRlVmFsdWUocmVhZGVyKHJlc3VsdC5pbml0aWFsVmFsdWUpLCB7XG4gICAgICAgICAgICBjb25zdHJhaW50OiBjb25zdHJhaW50LFxuICAgICAgICAgICAgZXF1YWxzOiBwbHVnaW4uYmluZGluZy5lcXVhbHMsXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBiaW5kaW5nID0gbmV3IElucHV0QmluZGluZyh7XG4gICAgICAgICAgICByZWFkZXI6IHJlYWRlcixcbiAgICAgICAgICAgIHRhcmdldDogYXJncy50YXJnZXQsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICB3cml0ZXI6IHBsdWdpbi5iaW5kaW5nLndyaXRlcih2YWx1ZUFyZ3MpLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGlzYWJsZWQgPSBwLm9wdGlvbmFsLmJvb2xlYW4oYXJncy5wYXJhbXMuZGlzYWJsZWQpLnZhbHVlO1xuICAgICAgICBjb25zdCBoaWRkZW4gPSBwLm9wdGlvbmFsLmJvb2xlYW4oYXJncy5wYXJhbXMuaGlkZGVuKS52YWx1ZTtcbiAgICAgICAgY29uc3QgY29udHJvbGxlciA9IHBsdWdpbi5jb250cm9sbGVyKHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IGNvbnN0cmFpbnQsXG4gICAgICAgICAgICBkb2N1bWVudDogYXJncy5kb2N1bWVudCxcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogcmVzdWx0LmluaXRpYWxWYWx1ZSxcbiAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LnBhcmFtcyxcbiAgICAgICAgICAgIHZhbHVlOiBiaW5kaW5nLnZhbHVlLFxuICAgICAgICAgICAgdmlld1Byb3BzOiBWaWV3UHJvcHMuY3JlYXRlKHtcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiBoaWRkZW4sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gcC5vcHRpb25hbC5zdHJpbmcoYXJncy5wYXJhbXMubGFiZWwpLnZhbHVlO1xuICAgICAgICByZXR1cm4gbmV3IElucHV0QmluZGluZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgYmluZGluZzogYmluZGluZyxcbiAgICAgICAgICAgIGJsYWRlOiBjcmVhdGVCbGFkZSgpLFxuICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgIGxhYmVsOiBsYWJlbCAhPT0gbnVsbCAmJiBsYWJlbCAhPT0gdm9pZCAwID8gbGFiZWwgOiBhcmdzLnRhcmdldC5rZXksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHZhbHVlQ29udHJvbGxlcjogY29udHJvbGxlcixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xhc3MgTW9uaXRvckJpbmRpbmcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25UaWNrXyA9IHRoaXMub25UaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5yZWFkZXJfID0gY29uZmlnLnJlYWRlcjtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gY29uZmlnLnRhcmdldDtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy50aWNrZXIgPSBjb25maWcudGlja2VyO1xuICAgICAgICAgICAgdGhpcy50aWNrZXIuZW1pdHRlci5vbigndGljaycsIHRoaXMub25UaWNrXyk7XG4gICAgICAgICAgICB0aGlzLnJlYWQoKTtcbiAgICAgICAgfVxuICAgICAgICBkaXNwb3NlKCkge1xuICAgICAgICAgICAgdGhpcy50aWNrZXIuZGlzcG9zZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJlYWQoKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRWYWx1ZSA9IHRoaXMudGFyZ2V0LnJlYWQoKTtcbiAgICAgICAgICAgIGlmICh0YXJnZXRWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5yZWFkZXJfKHRhcmdldFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUucmF3VmFsdWUgPSBjcmVhdGVQdXNoZWRCdWZmZXIoYnVmZmVyLCBuZXdWYWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgndXBkYXRlJywge1xuICAgICAgICAgICAgICAgIHJhd1ZhbHVlOiBuZXdWYWx1ZSxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblRpY2tfKF8pIHtcbiAgICAgICAgICAgIHRoaXMucmVhZCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVGlja2VyKGRvY3VtZW50LCBpbnRlcnZhbCkge1xuICAgICAgICByZXR1cm4gaW50ZXJ2YWwgPT09IDBcbiAgICAgICAgICAgID8gbmV3IE1hbnVhbFRpY2tlcigpXG4gICAgICAgICAgICA6IG5ldyBJbnRlcnZhbFRpY2tlcihkb2N1bWVudCwgaW50ZXJ2YWwgIT09IG51bGwgJiYgaW50ZXJ2YWwgIT09IHZvaWQgMCA/IGludGVydmFsIDogQ29uc3RhbnRzLm1vbml0b3IuZGVmYXVsdEludGVydmFsKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKHBsdWdpbiwgYXJncykge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgY29uc3QgUCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBsdWdpbi5hY2NlcHQoYXJncy50YXJnZXQucmVhZCgpLCBhcmdzLnBhcmFtcyk7XG4gICAgICAgIGlmIChpc0VtcHR5KHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJpbmRpbmdBcmdzID0ge1xuICAgICAgICAgICAgdGFyZ2V0OiBhcmdzLnRhcmdldCxcbiAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogcmVzdWx0LmluaXRpYWxWYWx1ZSxcbiAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LnBhcmFtcyxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVhZGVyID0gcGx1Z2luLmJpbmRpbmcucmVhZGVyKGJpbmRpbmdBcmdzKTtcbiAgICAgICAgY29uc3QgYnVmZmVyU2l6ZSA9IChfYiA9IChfYSA9IFAub3B0aW9uYWwubnVtYmVyKGFyZ3MucGFyYW1zLmJ1ZmZlclNpemUpLnZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAocGx1Z2luLmJpbmRpbmcuZGVmYXVsdEJ1ZmZlclNpemUgJiZcbiAgICAgICAgICAgIHBsdWdpbi5iaW5kaW5nLmRlZmF1bHRCdWZmZXJTaXplKHJlc3VsdC5wYXJhbXMpKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogMTtcbiAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBQLm9wdGlvbmFsLm51bWJlcihhcmdzLnBhcmFtcy5pbnRlcnZhbCkudmFsdWU7XG4gICAgICAgIGNvbnN0IGJpbmRpbmcgPSBuZXcgTW9uaXRvckJpbmRpbmcoe1xuICAgICAgICAgICAgcmVhZGVyOiByZWFkZXIsXG4gICAgICAgICAgICB0YXJnZXQ6IGFyZ3MudGFyZ2V0LFxuICAgICAgICAgICAgdGlja2VyOiBjcmVhdGVUaWNrZXIoYXJncy5kb2N1bWVudCwgaW50ZXJ2YWwpLFxuICAgICAgICAgICAgdmFsdWU6IGluaXRpYWxpemVCdWZmZXIoYnVmZmVyU2l6ZSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkaXNhYmxlZCA9IFAub3B0aW9uYWwuYm9vbGVhbihhcmdzLnBhcmFtcy5kaXNhYmxlZCkudmFsdWU7XG4gICAgICAgIGNvbnN0IGhpZGRlbiA9IFAub3B0aW9uYWwuYm9vbGVhbihhcmdzLnBhcmFtcy5oaWRkZW4pLnZhbHVlO1xuICAgICAgICBjb25zdCBjb250cm9sbGVyID0gcGx1Z2luLmNvbnRyb2xsZXIoe1xuICAgICAgICAgICAgZG9jdW1lbnQ6IGFyZ3MuZG9jdW1lbnQsXG4gICAgICAgICAgICBwYXJhbXM6IHJlc3VsdC5wYXJhbXMsXG4gICAgICAgICAgICB2YWx1ZTogYmluZGluZy52YWx1ZSxcbiAgICAgICAgICAgIHZpZXdQcm9wczogVmlld1Byb3BzLmNyZWF0ZSh7XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgICAgICAgICAgIGhpZGRlbjogaGlkZGVuLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBsYWJlbCA9IChfYyA9IFAub3B0aW9uYWwuc3RyaW5nKGFyZ3MucGFyYW1zLmxhYmVsKS52YWx1ZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogYXJncy50YXJnZXQua2V5O1xuICAgICAgICByZXR1cm4gbmV3IE1vbml0b3JCaW5kaW5nQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICBiaW5kaW5nOiBiaW5kaW5nLFxuICAgICAgICAgICAgYmxhZGU6IGNyZWF0ZUJsYWRlKCksXG4gICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB2YWx1ZUNvbnRyb2xsZXI6IGNvbnRyb2xsZXIsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsYXNzIFBsdWdpblBvb2wge1xuICAgICAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgIHRoaXMucGx1Z2luc01hcF8gPSB7XG4gICAgICAgICAgICAgICAgYmxhZGVzOiBbXSxcbiAgICAgICAgICAgICAgICBpbnB1dHM6IFtdLFxuICAgICAgICAgICAgICAgIG1vbml0b3JzOiBbXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZ2V0QWxsKCkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLnBsdWdpbnNNYXBfLmJsYWRlcyxcbiAgICAgICAgICAgICAgICAuLi50aGlzLnBsdWdpbnNNYXBfLmlucHV0cyxcbiAgICAgICAgICAgICAgICAuLi50aGlzLnBsdWdpbnNNYXBfLm1vbml0b3JzLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfVxuICAgICAgICByZWdpc3RlcihyKSB7XG4gICAgICAgICAgICBpZiAoci50eXBlID09PSAnYmxhZGUnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zTWFwXy5ibGFkZXMudW5zaGlmdChyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHIudHlwZSA9PT0gJ2lucHV0Jykge1xuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luc01hcF8uaW5wdXRzLnVuc2hpZnQocik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyLnR5cGUgPT09ICdtb25pdG9yJykge1xuICAgICAgICAgICAgICAgIHRoaXMucGx1Z2luc01hcF8ubW9uaXRvcnMudW5zaGlmdChyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjcmVhdGVJbnB1dChkb2N1bWVudCwgdGFyZ2V0LCBwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGluaXRpYWxWYWx1ZSA9IHRhcmdldC5yZWFkKCk7XG4gICAgICAgICAgICBpZiAoaXNFbXB0eShpbml0aWFsVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFRwRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHRhcmdldC5rZXksXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHR5cGU6ICdub21hdGNoaW5nY29udHJvbGxlcicsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBiYyA9IHRoaXMucGx1Z2luc01hcF8uaW5wdXRzLnJlZHVjZSgocmVzdWx0LCBwbHVnaW4pID0+IHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQgIT09IHZvaWQgMCA/IHJlc3VsdCA6IGNyZWF0ZUlucHV0QmluZGluZ0NvbnRyb2xsZXIocGx1Z2luLCB7XG4gICAgICAgICAgICAgICAgZG9jdW1lbnQ6IGRvY3VtZW50LFxuICAgICAgICAgICAgICAgIHRhcmdldDogdGFyZ2V0LFxuICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgICAgICAgfSksIG51bGwpO1xuICAgICAgICAgICAgaWYgKGJjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IFRwRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiB0YXJnZXQua2V5LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdHlwZTogJ25vbWF0Y2hpbmdjb250cm9sbGVyJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNyZWF0ZU1vbml0b3IoZG9jdW1lbnQsIHRhcmdldCwgcGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IHRoaXMucGx1Z2luc01hcF8ubW9uaXRvcnMucmVkdWNlKChyZXN1bHQsIHBsdWdpbikgPT4gcmVzdWx0ICE9PSBudWxsICYmIHJlc3VsdCAhPT0gdm9pZCAwID8gcmVzdWx0IDogY3JlYXRlTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKHBsdWdpbiwge1xuICAgICAgICAgICAgICAgIGRvY3VtZW50OiBkb2N1bWVudCxcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgIH0pLCBudWxsKTtcbiAgICAgICAgICAgIGlmIChiYykge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRocm93IG5ldyBUcEVycm9yKHtcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogdGFyZ2V0LmtleSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHR5cGU6ICdub21hdGNoaW5nY29udHJvbGxlcicsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBjcmVhdGVCbGFkZShkb2N1bWVudCwgcGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IHRoaXMucGx1Z2luc01hcF8uYmxhZGVzLnJlZHVjZSgocmVzdWx0LCBwbHVnaW4pID0+IHJlc3VsdCAhPT0gbnVsbCAmJiByZXN1bHQgIT09IHZvaWQgMCA/IHJlc3VsdCA6IGNyZWF0ZUJsYWRlQ29udHJvbGxlcihwbHVnaW4sIHtcbiAgICAgICAgICAgICAgICBkb2N1bWVudDogZG9jdW1lbnQsXG4gICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgICAgICB9KSwgbnVsbCk7XG4gICAgICAgICAgICBpZiAoIWJjKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFRwRXJyb3Ioe1xuICAgICAgICAgICAgICAgICAgICB0eXBlOiAnbm9tYXRjaGluZ3ZpZXcnLFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtcyxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBiYztcbiAgICAgICAgfVxuICAgICAgICBjcmVhdGVCbGFkZUFwaShiYykge1xuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgSW5wdXRCaW5kaW5nQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgSW5wdXRCaW5kaW5nQXBpKGJjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIE1vbml0b3JCaW5kaW5nQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTW9uaXRvckJpbmRpbmdBcGkoYmMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgUmFja0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFJhY2tBcGkoYmMsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYXBpID0gdGhpcy5wbHVnaW5zTWFwXy5ibGFkZXMucmVkdWNlKChyZXN1bHQsIHBsdWdpbikgPT4gcmVzdWx0ICE9PSBudWxsICYmIHJlc3VsdCAhPT0gdm9pZCAwID8gcmVzdWx0IDogcGx1Z2luLmFwaSh7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlcjogYmMsXG4gICAgICAgICAgICAgICAgcG9vbDogdGhpcyxcbiAgICAgICAgICAgIH0pLCBudWxsKTtcbiAgICAgICAgICAgIGlmICghYXBpKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFwaTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRQbHVnaW5Qb29sKCkge1xuICAgICAgICBjb25zdCBwb29sID0gbmV3IFBsdWdpblBvb2woKTtcbiAgICAgICAgW1xuICAgICAgICAgICAgUG9pbnQyZElucHV0UGx1Z2luLFxuICAgICAgICAgICAgUG9pbnQzZElucHV0UGx1Z2luLFxuICAgICAgICAgICAgUG9pbnQ0ZElucHV0UGx1Z2luLFxuICAgICAgICAgICAgU3RyaW5nSW5wdXRQbHVnaW4sXG4gICAgICAgICAgICBOdW1iZXJJbnB1dFBsdWdpbixcbiAgICAgICAgICAgIFN0cmluZ0NvbG9ySW5wdXRQbHVnaW4sXG4gICAgICAgICAgICBPYmplY3RDb2xvcklucHV0UGx1Z2luLFxuICAgICAgICAgICAgTnVtYmVyQ29sb3JJbnB1dFBsdWdpbixcbiAgICAgICAgICAgIEJvb2xlYW5JbnB1dFBsdWdpbixcbiAgICAgICAgICAgIEJvb2xlYW5Nb25pdG9yUGx1Z2luLFxuICAgICAgICAgICAgU3RyaW5nTW9uaXRvclBsdWdpbixcbiAgICAgICAgICAgIE51bWJlck1vbml0b3JQbHVnaW4sXG4gICAgICAgICAgICBCdXR0b25CbGFkZVBsdWdpbixcbiAgICAgICAgICAgIEZvbGRlckJsYWRlUGx1Z2luLFxuICAgICAgICAgICAgU2VwYXJhdG9yQmxhZGVQbHVnaW4sXG4gICAgICAgICAgICBUYWJCbGFkZVBsdWdpbixcbiAgICAgICAgXS5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICBwb29sLnJlZ2lzdGVyKHApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBvb2w7XG4gICAgfVxuXG4gICAgY2xhc3MgTGlzdEFwaSBleHRlbmRzIEJsYWRlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlcikge1xuICAgICAgICAgICAgc3VwZXIoY29udHJvbGxlcik7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwQ2hhbmdlRXZlbnQodGhpcywgZXYucmF3VmFsdWUpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGxhYmVsKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuZ2V0KCdsYWJlbCcpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBsYWJlbChsYWJlbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wcm9wcy5zZXQoJ2xhYmVsJywgbGFiZWwpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBvcHRpb25zKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnByb3BzLmdldCgnb3B0aW9ucycpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBvcHRpb25zKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnByb3BzLnNldCgnb3B0aW9ucycsIG9wdGlvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGdldCB2YWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnZhbHVlLnJhd1ZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaCA9IGhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8ub24oZXZlbnROYW1lLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICBiaChldi5ldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgU2xpZGVyQXBpIGV4dGVuZHMgQmxhZGVBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8gPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBuZXcgVHBDaGFuZ2VFdmVudCh0aGlzLCBldi5yYXdWYWx1ZSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbGFiZWwoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5wcm9wcy5nZXQoJ2xhYmVsJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGxhYmVsKGxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLnNldCgnbGFiZWwnLCBsYWJlbCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IG1heFZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnNsaWRlckNvbnRyb2xsZXIucHJvcHMuZ2V0KCdtYXhWYWx1ZScpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBtYXhWYWx1ZShtYXhWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIuc2xpZGVyQ29udHJvbGxlci5wcm9wcy5zZXQoJ21heFZhbHVlJywgbWF4VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBtaW5WYWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5zbGlkZXJDb250cm9sbGVyLnByb3BzLmdldCgnbWluVmFsdWUnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgbWluVmFsdWUobWluVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnNsaWRlckNvbnRyb2xsZXIucHJvcHMuc2V0KCdtaW5WYWx1ZScsIG1pblZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUucmF3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci52YWx1ZS5yYXdWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLm9uKGV2ZW50TmFtZSwgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgYmgoZXYuZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRleHRBcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXyA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcENoYW5nZUV2ZW50KHRoaXMsIGV2LnJhd1ZhbHVlKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBsYWJlbCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLmdldCgnbGFiZWwnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgbGFiZWwobGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuc2V0KCdsYWJlbCcsIGxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZm9ybWF0dGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnByb3BzLmdldCgnZm9ybWF0dGVyJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGZvcm1hdHRlcihmb3JtYXR0ZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnByb3BzLnNldCgnZm9ybWF0dGVyJywgZm9ybWF0dGVyKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUucmF3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci52YWx1ZS5yYXdWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLm9uKGV2ZW50TmFtZSwgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgYmgoZXYuZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IExpc3RCbGFkZVBsdWdpbiA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpZDogJ2xpc3QnLFxuICAgICAgICAgICAgdHlwZTogJ2JsYWRlJyxcbiAgICAgICAgICAgIGFjY2VwdChwYXJhbXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogcC5yZXF1aXJlZC5jdXN0b20ocGFyc2VMaXN0T3B0aW9ucyksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBwLnJlcXVpcmVkLnJhdyxcbiAgICAgICAgICAgICAgICAgICAgdmlldzogcC5yZXF1aXJlZC5jb25zdGFudCgnbGlzdCcpLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogcC5vcHRpb25hbC5zdHJpbmcsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA/IHsgcGFyYW1zOiByZXN1bHQgfSA6IG51bGw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udHJvbGxlcihhcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWMgPSBuZXcgTGlzdENvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBub3JtYWxpemVMaXN0T3B0aW9ucyhhcmdzLnBhcmFtcy5vcHRpb25zKSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjcmVhdGVWYWx1ZShhcmdzLnBhcmFtcy52YWx1ZSksXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMYWJlbGVkVmFsdWVDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgYmxhZGU6IGFyZ3MuYmxhZGUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBhcmdzLnBhcmFtcy5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlQ29udHJvbGxlcjogaWMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXBpKGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShhcmdzLmNvbnRyb2xsZXIgaW5zdGFuY2VvZiBMYWJlbGVkVmFsdWVDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyLnZhbHVlQ29udHJvbGxlciBpbnN0YW5jZW9mIExpc3RDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMaXN0QXBpKGFyZ3MuY29udHJvbGxlcik7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH0pKCk7XG5cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZnVuY3Rpb24gZXhwb3J0UHJlc2V0SnNvbih0YXJnZXRzKSB7XG4gICAgICAgIHJldHVybiB0YXJnZXRzLnJlZHVjZSgocmVzdWx0LCB0YXJnZXQpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHJlc3VsdCwge1xuICAgICAgICAgICAgICAgIFt0YXJnZXQucHJlc2V0S2V5XTogdGFyZ2V0LnJlYWQoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCB7fSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIEBoaWRkZW5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpbXBvcnRQcmVzZXRKc29uKHRhcmdldHMsIHByZXNldCkge1xuICAgICAgICB0YXJnZXRzLmZvckVhY2goKHRhcmdldCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwcmVzZXRbdGFyZ2V0LnByZXNldEtleV07XG4gICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHRhcmdldC53cml0ZSh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsYXNzIFJvb3RBcGkgZXh0ZW5kcyBGb2xkZXJBcGkge1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlciwgcG9vbCkge1xuICAgICAgICAgICAgc3VwZXIoY29udHJvbGxlciwgcG9vbCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGVsZW1lbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy52aWV3LmVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEltcG9ydHMgYSBwcmVzZXQgb2YgYWxsIGlucHV0cy5cbiAgICAgICAgICogQHBhcmFtIHByZXNldCBUaGUgcHJlc2V0IG9iamVjdCB0byBpbXBvcnQuXG4gICAgICAgICAqL1xuICAgICAgICBpbXBvcnRQcmVzZXQocHJlc2V0KSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRzID0gdGhpcy5jb250cm9sbGVyXy5yYWNrQ29udHJvbGxlci5yYWNrXG4gICAgICAgICAgICAgICAgLmZpbmQoSW5wdXRCaW5kaW5nQ29udHJvbGxlcilcbiAgICAgICAgICAgICAgICAubWFwKChpYmMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWJjLmJpbmRpbmcudGFyZ2V0O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpbXBvcnRQcmVzZXRKc29uKHRhcmdldHMsIHByZXNldCk7XG4gICAgICAgICAgICB0aGlzLnJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogRXhwb3J0cyBhIHByZXNldCBvZiBhbGwgaW5wdXRzLlxuICAgICAgICAgKiBAcmV0dXJuIEFuIGV4cG9ydGVkIHByZXNldCBvYmplY3QuXG4gICAgICAgICAqL1xuICAgICAgICBleHBvcnRQcmVzZXQoKSB7XG4gICAgICAgICAgICBjb25zdCB0YXJnZXRzID0gdGhpcy5jb250cm9sbGVyXy5yYWNrQ29udHJvbGxlci5yYWNrXG4gICAgICAgICAgICAgICAgLmZpbmQoSW5wdXRCaW5kaW5nQ29udHJvbGxlcilcbiAgICAgICAgICAgICAgICAubWFwKChpYmMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaWJjLmJpbmRpbmcudGFyZ2V0O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gZXhwb3J0UHJlc2V0SnNvbih0YXJnZXRzKTtcbiAgICAgICAgfVxuICAgICAgICAvKipcbiAgICAgICAgICogUmVmcmVzaGVzIGFsbCBiaW5kaW5ncyBvZiB0aGUgcGFuZS5cbiAgICAgICAgICovXG4gICAgICAgIHJlZnJlc2goKSB7XG4gICAgICAgICAgICAvLyBGb3JjZS1yZWFkIGFsbCBpbnB1dCBiaW5kaW5nc1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5yYWNrQ29udHJvbGxlci5yYWNrXG4gICAgICAgICAgICAgICAgLmZpbmQoSW5wdXRCaW5kaW5nQ29udHJvbGxlcilcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgoaWJjKSA9PiB7XG4gICAgICAgICAgICAgICAgaWJjLmJpbmRpbmcucmVhZCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBGb3JjZS1yZWFkIGFsbCBtb25pdG9yIGJpbmRpbmdzXG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnJhY2tDb250cm9sbGVyLnJhY2tcbiAgICAgICAgICAgICAgICAuZmluZChNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKG1iYykgPT4ge1xuICAgICAgICAgICAgICAgIG1iYy5iaW5kaW5nLnJlYWQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUm9vdENvbnRyb2xsZXIgZXh0ZW5kcyBGb2xkZXJDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHN1cGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBjb25maWcuZXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgYmxhZGU6IGNvbmZpZy5ibGFkZSxcbiAgICAgICAgICAgICAgICBwcm9wczogY29uZmlnLnByb3BzLFxuICAgICAgICAgICAgICAgIHJvb3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBTbGlkZXJCbGFkZVBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdzbGlkZXInLFxuICAgICAgICB0eXBlOiAnYmxhZGUnLFxuICAgICAgICBhY2NlcHQocGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIG1heDogcC5yZXF1aXJlZC5udW1iZXIsXG4gICAgICAgICAgICAgICAgbWluOiBwLnJlcXVpcmVkLm51bWJlcixcbiAgICAgICAgICAgICAgICB2aWV3OiBwLnJlcXVpcmVkLmNvbnN0YW50KCdzbGlkZXInKSxcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IHAub3B0aW9uYWwuZnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgbGFiZWw6IHAub3B0aW9uYWwuc3RyaW5nLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA/IHsgcGFyYW1zOiByZXN1bHQgfSA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXIoYXJncykge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIGNvbnN0IHYgPSAoX2EgPSBhcmdzLnBhcmFtcy52YWx1ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMDtcbiAgICAgICAgICAgIGNvbnN0IHZjID0gbmV3IFNsaWRlclRleHRDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBiYXNlU3RlcDogMSxcbiAgICAgICAgICAgICAgICBwYXJzZXI6IHBhcnNlTnVtYmVyLFxuICAgICAgICAgICAgICAgIHNsaWRlclByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgbWF4VmFsdWU6IGFyZ3MucGFyYW1zLm1heCxcbiAgICAgICAgICAgICAgICAgICAgbWluVmFsdWU6IGFyZ3MucGFyYW1zLm1pbixcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0ZXh0UHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBkcmFnZ2luZ1NjYWxlOiBnZXRTdWl0YWJsZURyYWdnaW5nU2NhbGUodW5kZWZpbmVkLCB2KSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyOiAoX2IgPSBhcmdzLnBhcmFtcy5mb3JtYXQpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG51bWJlclRvU3RyaW5nLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBjcmVhdGVWYWx1ZSh2KSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IExhYmVsZWRWYWx1ZUNvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGJsYWRlOiBhcmdzLmJsYWRlLFxuICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGFyZ3MucGFyYW1zLmxhYmVsLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHZhbHVlQ29udHJvbGxlcjogdmMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgYXBpKGFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlciBpbnN0YW5jZW9mIExhYmVsZWRWYWx1ZUNvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIShhcmdzLmNvbnRyb2xsZXIudmFsdWVDb250cm9sbGVyIGluc3RhbmNlb2YgU2xpZGVyVGV4dENvbnRyb2xsZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNsaWRlckFwaShhcmdzLmNvbnRyb2xsZXIpO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBUZXh0QmxhZGVQbHVnaW4gPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6ICd0ZXh0JyxcbiAgICAgICAgICAgIHR5cGU6ICdibGFkZScsXG4gICAgICAgICAgICBhY2NlcHQocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlOiBwLnJlcXVpcmVkLmZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcC5yZXF1aXJlZC5yYXcsXG4gICAgICAgICAgICAgICAgICAgIHZpZXc6IHAucmVxdWlyZWQuY29uc3RhbnQoJ3RleHQnKSxcbiAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBwLm9wdGlvbmFsLmZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogcC5vcHRpb25hbC5zdHJpbmcsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA/IHsgcGFyYW1zOiByZXN1bHQgfSA6IG51bGw7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgY29udHJvbGxlcihhcmdzKSB7XG4gICAgICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgICAgIGNvbnN0IGljID0gbmV3IFRleHRDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VyOiBhcmdzLnBhcmFtcy5wYXJzZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyOiAoX2EgPSBhcmdzLnBhcmFtcy5mb3JtYXQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICgodikgPT4gU3RyaW5nKHYpKSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjcmVhdGVWYWx1ZShhcmdzLnBhcmFtcy52YWx1ZSksXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMYWJlbGVkVmFsdWVDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgYmxhZGU6IGFyZ3MuYmxhZGUsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBhcmdzLnBhcmFtcy5sYWJlbCxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlQ29udHJvbGxlcjogaWMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgYXBpKGFyZ3MpIHtcbiAgICAgICAgICAgICAgICBpZiAoIShhcmdzLmNvbnRyb2xsZXIgaW5zdGFuY2VvZiBMYWJlbGVkVmFsdWVDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyLnZhbHVlQ29udHJvbGxlciBpbnN0YW5jZW9mIFRleHRDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBUZXh0QXBpKGFyZ3MuY29udHJvbGxlcik7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH0pKCk7XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0V3JhcHBlckVsZW1lbnQoZG9jKSB7XG4gICAgICAgIGNvbnN0IGVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGVsZW0uY2xhc3NMaXN0LmFkZChDbGFzc05hbWUoJ2RmdycpKCkpO1xuICAgICAgICBpZiAoZG9jLmJvZHkpIHtcbiAgICAgICAgICAgIGRvYy5ib2R5LmFwcGVuZENoaWxkKGVsZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlbGVtO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbWJlZFN0eWxlKGRvYywgaWQsIGNzcykge1xuICAgICAgICBpZiAoZG9jLnF1ZXJ5U2VsZWN0b3IoYHN0eWxlW2RhdGEtdHAtc3R5bGU9JHtpZH1dYCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdHlsZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtcbiAgICAgICAgc3R5bGVFbGVtLmRhdGFzZXQudHBTdHlsZSA9IGlkO1xuICAgICAgICBzdHlsZUVsZW0udGV4dENvbnRlbnQgPSBjc3M7XG4gICAgICAgIGRvYy5oZWFkLmFwcGVuZENoaWxkKHN0eWxlRWxlbSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFRoZSByb290IHBhbmUgb2YgVHdlYWtwYW5lLlxuICAgICAqL1xuICAgIGNsYXNzIFBhbmUgZXh0ZW5kcyBSb290QXBpIHtcbiAgICAgICAgY29uc3RydWN0b3Iob3B0X2NvbmZpZykge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IG9wdF9jb25maWcgIT09IG51bGwgJiYgb3B0X2NvbmZpZyAhPT0gdm9pZCAwID8gb3B0X2NvbmZpZyA6IHt9O1xuICAgICAgICAgICAgY29uc3QgZG9jID0gKF9hID0gY29uZmlnLmRvY3VtZW50KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBnZXRXaW5kb3dEb2N1bWVudCgpO1xuICAgICAgICAgICAgY29uc3QgcG9vbCA9IGNyZWF0ZURlZmF1bHRQbHVnaW5Qb29sKCk7XG4gICAgICAgICAgICBjb25zdCByb290Q29udHJvbGxlciA9IG5ldyBSb290Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogY29uZmlnLmV4cGFuZGVkLFxuICAgICAgICAgICAgICAgIGJsYWRlOiBjcmVhdGVCbGFkZSgpLFxuICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGNvbmZpZy50aXRsZSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IFZpZXdQcm9wcy5jcmVhdGUoKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgc3VwZXIocm9vdENvbnRyb2xsZXIsIHBvb2wpO1xuICAgICAgICAgICAgdGhpcy5wb29sXyA9IHBvb2w7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lckVsZW1fID0gKF9iID0gY29uZmlnLmNvbnRhaW5lcikgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogY3JlYXRlRGVmYXVsdFdyYXBwZXJFbGVtZW50KGRvYyk7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lckVsZW1fLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmRvY18gPSBkb2M7XG4gICAgICAgICAgICB0aGlzLnVzZXNEZWZhdWx0V3JhcHBlcl8gPSAhY29uZmlnLmNvbnRhaW5lcjtcbiAgICAgICAgICAgIHRoaXMuc2V0VXBEZWZhdWx0UGx1Z2luc18oKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZG9jdW1lbnQoKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuZG9jXykge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3IuYWxyZWFkeURpc3Bvc2VkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kb2NfO1xuICAgICAgICB9XG4gICAgICAgIGRpc3Bvc2UoKSB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJFbGVtID0gdGhpcy5jb250YWluZXJFbGVtXztcbiAgICAgICAgICAgIGlmICghY29udGFpbmVyRWxlbSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3IuYWxyZWFkeURpc3Bvc2VkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy51c2VzRGVmYXVsdFdyYXBwZXJfKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50RWxlbSA9IGNvbnRhaW5lckVsZW0ucGFyZW50RWxlbWVudDtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50RWxlbSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJlbnRFbGVtLnJlbW92ZUNoaWxkKGNvbnRhaW5lckVsZW0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyRWxlbV8gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5kb2NfID0gbnVsbDtcbiAgICAgICAgICAgIHN1cGVyLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICByZWdpc3RlclBsdWdpbihidW5kbGUpIHtcbiAgICAgICAgICAgIGNvbnN0IHBsdWdpbnMgPSAncGx1Z2luJyBpbiBidW5kbGVcbiAgICAgICAgICAgICAgICA/IFtidW5kbGUucGx1Z2luXVxuICAgICAgICAgICAgICAgIDogJ3BsdWdpbnMnIGluIGJ1bmRsZVxuICAgICAgICAgICAgICAgICAgICA/IGJ1bmRsZS5wbHVnaW5zXG4gICAgICAgICAgICAgICAgICAgIDogW107XG4gICAgICAgICAgICBwbHVnaW5zLmZvckVhY2goKHApID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvb2xfLnJlZ2lzdGVyKHApO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1iZWRQbHVnaW5TdHlsZV8ocCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbWJlZFBsdWdpblN0eWxlXyhwbHVnaW4pIHtcbiAgICAgICAgICAgIGlmIChwbHVnaW4uY3NzKSB7XG4gICAgICAgICAgICAgICAgZW1iZWRTdHlsZSh0aGlzLmRvY3VtZW50LCBgcGx1Z2luLSR7cGx1Z2luLmlkfWAsIHBsdWdpbi5jc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldFVwRGVmYXVsdFBsdWdpbnNfKCkge1xuICAgICAgICAgICAgLy8gTk9URTogVGhpcyBzdHJpbmcgbGl0ZXJhbCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIGRlZmF1bHQgQ1NTIGJ5IFJvbGx1cCBhdCB0aGUgY29tcGlsYXRpb24gdGltZVxuICAgICAgICAgICAgZW1iZWRTdHlsZSh0aGlzLmRvY3VtZW50LCAnZGVmYXVsdCcsICcudHAtdGJpdl9iLC50cC1jb2x0eHR2X21zLC50cC1ja2J2X2ksLnRwLXJvdHZfYiwudHAtZmxkdl9iLC50cC1tbGx2X2ksLnRwLXNnbHZfaSwudHAtZ3Jsdl9nLC50cC10eHR2X2ksLnRwLXAyZHB2X3AsLnRwLWNvbHN3dl9zdywudHAtcDJkdl9iLC50cC1idG52X2IsLnRwLWxzdHZfc3std2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3JkZXItd2lkdGg6MDtmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZTppbmhlcml0O2ZvbnQtd2VpZ2h0OmluaGVyaXQ7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6MH0udHAtcDJkdl9iLC50cC1idG52X2IsLnRwLWxzdHZfc3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2NvbG9yOnZhcigtLWJ0bi1mZyk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpibG9jaztmb250LXdlaWdodDpib2xkO2hlaWdodDp2YXIoLS1ibGQtdXMpO2xpbmUtaGVpZ2h0OnZhcigtLWJsZC11cyk7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwfS50cC1wMmR2X2I6aG92ZXIsLnRwLWJ0bnZfYjpob3ZlciwudHAtbHN0dl9zOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnRuLWJnLWgpfS50cC1wMmR2X2I6Zm9jdXMsLnRwLWJ0bnZfYjpmb2N1cywudHAtbHN0dl9zOmZvY3Vze2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnRuLWJnLWYpfS50cC1wMmR2X2I6YWN0aXZlLC50cC1idG52X2I6YWN0aXZlLC50cC1sc3R2X3M6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnRuLWJnLWEpfS50cC1wMmR2X2I6ZGlzYWJsZWQsLnRwLWJ0bnZfYjpkaXNhYmxlZCwudHAtbHN0dl9zOmRpc2FibGVke29wYWNpdHk6LjV9LnRwLXR4dHZfaSwudHAtcDJkcHZfcCwudHAtY29sc3d2X3N3e2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmcpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0taW4tZmcpO2ZvbnQtZmFtaWx5OmluaGVyaXQ7aGVpZ2h0OnZhcigtLWJsZC11cyk7bGluZS1oZWlnaHQ6dmFyKC0tYmxkLXVzKTttaW4td2lkdGg6MDt3aWR0aDoxMDAlfS50cC10eHR2X2k6aG92ZXIsLnRwLXAyZHB2X3A6aG92ZXIsLnRwLWNvbHN3dl9zdzpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWgpfS50cC10eHR2X2k6Zm9jdXMsLnRwLXAyZHB2X3A6Zm9jdXMsLnRwLWNvbHN3dl9zdzpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWYpfS50cC10eHR2X2k6YWN0aXZlLC50cC1wMmRwdl9wOmFjdGl2ZSwudHAtY29sc3d2X3N3OmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWEpfS50cC10eHR2X2k6ZGlzYWJsZWQsLnRwLXAyZHB2X3A6ZGlzYWJsZWQsLnRwLWNvbHN3dl9zdzpkaXNhYmxlZHtvcGFjaXR5Oi41fS50cC1tbGx2X2ksLnRwLXNnbHZfaSwudHAtZ3Jsdl9ne2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW8tYmcpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW8tZmcpO2hlaWdodDp2YXIoLS1ibGQtdXMpO3Njcm9sbGJhci1jb2xvcjpjdXJyZW50Q29sb3IgdHJhbnNwYXJlbnQ7c2Nyb2xsYmFyLXdpZHRoOnRoaW47d2lkdGg6MTAwJX0udHAtbWxsdl9pOjotd2Via2l0LXNjcm9sbGJhciwudHAtc2dsdl9pOjotd2Via2l0LXNjcm9sbGJhciwudHAtZ3Jsdl9nOjotd2Via2l0LXNjcm9sbGJhcntoZWlnaHQ6OHB4O3dpZHRoOjhweH0udHAtbWxsdl9pOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXIsLnRwLXNnbHZfaTo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyLC50cC1ncmx2X2c6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lcntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS50cC1tbGx2X2k6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLC50cC1zZ2x2X2k6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLC50cC1ncmx2X2c6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcjtib3JkZXI6dHJhbnNwYXJlbnQgc29saWQgMnB4O2JvcmRlci1yYWRpdXM6NHB4fS50cC1yb3R2ey0tZm9udC1mYW1pbHk6IHZhcigtLXRwLWZvbnQtZmFtaWx5LCBSb2JvdG8gTW9ubywgU291cmNlIENvZGUgUHJvLCBNZW5sbywgQ291cmllciwgbW9ub3NwYWNlKTstLWJzLWJyOiB2YXIoLS10cC1iYXNlLWJvcmRlci1yYWRpdXMsIDZweCk7LS1jbnQtaC1wOiB2YXIoLS10cC1jb250YWluZXItaG9yaXpvbnRhbC1wYWRkaW5nLCA0cHgpOy0tY250LXYtcDogdmFyKC0tdHAtY29udGFpbmVyLXZlcnRpY2FsLXBhZGRpbmcsIDRweCk7LS1lbG0tYnI6IHZhcigtLXRwLWVsZW1lbnQtYm9yZGVyLXJhZGl1cywgMnB4KTstLWJsZC1zOiB2YXIoLS10cC1ibGFkZS1zcGFjaW5nLCA0cHgpOy0tYmxkLXVzOiB2YXIoLS10cC1ibGFkZS11bml0LXNpemUsIDIwcHgpOy0tYnMtYmc6IHZhcigtLXRwLWJhc2UtYmFja2dyb3VuZC1jb2xvciwgIzI4MjkyZSk7LS1icy1zaDogdmFyKC0tdHAtYmFzZS1zaGFkb3ctY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4yKSk7LS1idG4tYmc6IHZhcigtLXRwLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yLCAjYWRhZmI4KTstLWJ0bi1iZy1hOiB2YXIoLS10cC1idXR0b24tYmFja2dyb3VuZC1jb2xvci1hY3RpdmUsICNkNmQ3ZGIpOy0tYnRuLWJnLWY6IHZhcigtLXRwLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yLWZvY3VzLCAjYzhjYWQwKTstLWJ0bi1iZy1oOiB2YXIoLS10cC1idXR0b24tYmFja2dyb3VuZC1jb2xvci1ob3ZlciwgI2JiYmNjNCk7LS1idG4tZmc6IHZhcigtLXRwLWJ1dHRvbi1mb3JlZ3JvdW5kLWNvbG9yLCAjMjgyOTJlKTstLWNudC1iZzogdmFyKC0tdHAtY29udGFpbmVyLWJhY2tncm91bmQtY29sb3IsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC4xKSk7LS1jbnQtYmctYTogdmFyKC0tdHAtY29udGFpbmVyLWJhY2tncm91bmQtY29sb3ItYWN0aXZlLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuMjUpKTstLWNudC1iZy1mOiB2YXIoLS10cC1jb250YWluZXItYmFja2dyb3VuZC1jb2xvci1mb2N1cywgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjIpKTstLWNudC1iZy1oOiB2YXIoLS10cC1jb250YWluZXItYmFja2dyb3VuZC1jb2xvci1ob3ZlciwgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjE1KSk7LS1jbnQtZmc6IHZhcigtLXRwLWNvbnRhaW5lci1mb3JlZ3JvdW5kLWNvbG9yLCAjYmJiY2M0KTstLWluLWJnOiB2YXIoLS10cC1pbnB1dC1iYWNrZ3JvdW5kLWNvbG9yLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuMSkpOy0taW4tYmctYTogdmFyKC0tdHAtaW5wdXQtYmFja2dyb3VuZC1jb2xvci1hY3RpdmUsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC4yNSkpOy0taW4tYmctZjogdmFyKC0tdHAtaW5wdXQtYmFja2dyb3VuZC1jb2xvci1mb2N1cywgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjIpKTstLWluLWJnLWg6IHZhcigtLXRwLWlucHV0LWJhY2tncm91bmQtY29sb3ItaG92ZXIsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC4xNSkpOy0taW4tZmc6IHZhcigtLXRwLWlucHV0LWZvcmVncm91bmQtY29sb3IsICNiYmJjYzQpOy0tbGJsLWZnOiB2YXIoLS10cC1sYWJlbC1mb3JlZ3JvdW5kLWNvbG9yLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuNykpOy0tbW8tYmc6IHZhcigtLXRwLW1vbml0b3ItYmFja2dyb3VuZC1jb2xvciwgcmdiYSgwLCAwLCAwLCAwLjIpKTstLW1vLWZnOiB2YXIoLS10cC1tb25pdG9yLWZvcmVncm91bmQtY29sb3IsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC43KSk7LS1ncnYtZmc6IHZhcigtLXRwLWdyb292ZS1mb3JlZ3JvdW5kLWNvbG9yLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuMSkpfS50cC1yb3R2X2M+LnRwLWNudHYudHAtdi1sc3QsLnRwLXRhYnZfYyAudHAtYnJrdj4udHAtY250di50cC12LWxzdCwudHAtZmxkdl9jPi50cC1jbnR2LnRwLXYtbHN0e21hcmdpbi1ib3R0b206Y2FsYygtMSp2YXIoLS1jbnQtdi1wKSl9LnRwLXJvdHZfYz4udHAtZmxkdi50cC12LWxzdCAudHAtZmxkdl9jLC50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWZsZHYudHAtdi1sc3QgLnRwLWZsZHZfYywudHAtZmxkdl9jPi50cC1mbGR2LnRwLXYtbHN0IC50cC1mbGR2X2N7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1sc3QgLnRwLWZsZHZfYiwudHAtdGFidl9jIC50cC1icmt2Pi50cC1mbGR2LnRwLXYtbHN0IC50cC1mbGR2X2IsLnRwLWZsZHZfYz4udHAtZmxkdi50cC12LWxzdCAudHAtZmxkdl9ie2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0udHAtcm90dl9jPio6bm90KC50cC12LWZzdCksLnRwLXRhYnZfYyAudHAtYnJrdj4qOm5vdCgudHAtdi1mc3QpLC50cC1mbGR2X2M+Kjpub3QoLnRwLXYtZnN0KXttYXJnaW4tdG9wOnZhcigtLWJsZC1zKX0udHAtcm90dl9jPi50cC1zcHJ2Om5vdCgudHAtdi1mc3QpLC50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLXNwcnY6bm90KC50cC12LWZzdCksLnRwLWZsZHZfYz4udHAtc3Bydjpub3QoLnRwLXYtZnN0KSwudHAtcm90dl9jPi50cC1jbnR2Om5vdCgudHAtdi1mc3QpLC50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWNudHY6bm90KC50cC12LWZzdCksLnRwLWZsZHZfYz4udHAtY250djpub3QoLnRwLXYtZnN0KXttYXJnaW4tdG9wOnZhcigtLWNudC12LXApfS50cC1yb3R2X2M+LnRwLXNwcnYrKjpub3QoLnRwLXYtaGlkZGVuKSwudHAtdGFidl9jIC50cC1icmt2Pi50cC1zcHJ2Kyo6bm90KC50cC12LWhpZGRlbiksLnRwLWZsZHZfYz4udHAtc3BydisqOm5vdCgudHAtdi1oaWRkZW4pLC50cC1yb3R2X2M+LnRwLWNudHYrKjpub3QoLnRwLXYtaGlkZGVuKSwudHAtdGFidl9jIC50cC1icmt2Pi50cC1jbnR2Kyo6bm90KC50cC12LWhpZGRlbiksLnRwLWZsZHZfYz4udHAtY250disqOm5vdCgudHAtdi1oaWRkZW4pe21hcmdpbi10b3A6dmFyKC0tY250LXYtcCl9LnRwLXJvdHZfYz4udHAtc3Bydjpub3QoLnRwLXYtaGlkZGVuKSsudHAtc3BydiwudHAtdGFidl9jIC50cC1icmt2Pi50cC1zcHJ2Om5vdCgudHAtdi1oaWRkZW4pKy50cC1zcHJ2LC50cC1mbGR2X2M+LnRwLXNwcnY6bm90KC50cC12LWhpZGRlbikrLnRwLXNwcnYsLnRwLXJvdHZfYz4udHAtY250djpub3QoLnRwLXYtaGlkZGVuKSsudHAtY250diwudHAtdGFidl9jIC50cC1icmt2Pi50cC1jbnR2Om5vdCgudHAtdi1oaWRkZW4pKy50cC1jbnR2LC50cC1mbGR2X2M+LnRwLWNudHY6bm90KC50cC12LWhpZGRlbikrLnRwLWNudHZ7bWFyZ2luLXRvcDowfS50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWNudHYsLnRwLWZsZHZfYz4udHAtY250dnttYXJnaW4tbGVmdDo0cHh9LnRwLXRhYnZfYyAudHAtYnJrdj4udHAtZmxkdj4udHAtZmxkdl9iLC50cC1mbGR2X2M+LnRwLWZsZHY+LnRwLWZsZHZfYntib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWVsbS1icik7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1lbG0tYnIpfS50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWZsZHYudHAtZmxkdi1leHBhbmRlZD4udHAtZmxkdl9iLC50cC1mbGR2X2M+LnRwLWZsZHYudHAtZmxkdi1leHBhbmRlZD4udHAtZmxkdl9ie2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0udHAtdGFidl9jIC50cC1icmt2IC50cC1mbGR2Pi50cC1mbGR2X2MsLnRwLWZsZHZfYyAudHAtZmxkdj4udHAtZmxkdl9je2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tZWxtLWJyKX0udHAtdGFidl9jIC50cC1icmt2Pi50cC10YWJ2Pi50cC10YWJ2X2ksLnRwLWZsZHZfYz4udHAtdGFidj4udHAtdGFidl9pe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tZWxtLWJyKX0udHAtdGFidl9jIC50cC1icmt2IC50cC10YWJ2Pi50cC10YWJ2X2MsLnRwLWZsZHZfYyAudHAtdGFidj4udHAtdGFidl9je2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tZWxtLWJyKX0udHAtcm90dl9iLC50cC1mbGR2X2J7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmcpO2NvbG9yOnZhcigtLWNudC1mZyk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpibG9jaztoZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KTtsaW5lLWhlaWdodDpjYWxjKHZhcigtLWJsZC11cykgKyA0cHgpO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWxlZnQ6dmFyKC0tY250LWgtcCk7cGFkZGluZy1yaWdodDpjYWxjKDRweCArIHZhcigtLWJsZC11cykgKyB2YXIoLS1jbnQtaC1wKSk7cG9zaXRpb246cmVsYXRpdmU7dGV4dC1hbGlnbjpsZWZ0O3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXM7d2hpdGUtc3BhY2U6bm93cmFwO3dpZHRoOjEwMCU7dHJhbnNpdGlvbjpib3JkZXItcmFkaXVzIC4ycyBlYXNlLWluLW91dCAuMnN9LnRwLXJvdHZfYjpob3ZlciwudHAtZmxkdl9iOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnLWgpfS50cC1yb3R2X2I6Zm9jdXMsLnRwLWZsZHZfYjpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZy1mKX0udHAtcm90dl9iOmFjdGl2ZSwudHAtZmxkdl9iOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZy1hKX0udHAtcm90dl9iOmRpc2FibGVkLC50cC1mbGR2X2I6ZGlzYWJsZWR7b3BhY2l0eTouNX0udHAtcm90dl9tLC50cC1mbGR2X217YmFja2dyb3VuZDpsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwgdmFyKC0tY250LWZnKSwgdmFyKC0tY250LWZnKSAycHgsIHRyYW5zcGFyZW50IDJweCwgdHJhbnNwYXJlbnQgNHB4LCB2YXIoLS1jbnQtZmcpIDRweCk7Ym9yZGVyLXJhZGl1czoycHg7Ym90dG9tOjA7Y29udGVudDpcIlwiO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjZweDtyaWdodDpjYWxjKHZhcigtLWNudC1oLXApICsgKHZhcigtLWJsZC11cykgKyA0cHggLSA2cHgpLzIgLSAycHgpO21hcmdpbjphdXRvO29wYWNpdHk6LjU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7dHJhbnNmb3JtOnJvdGF0ZSg5MGRlZyk7dHJhbnNpdGlvbjp0cmFuc2Zvcm0gLjJzIGVhc2UtaW4tb3V0O3dpZHRoOjZweH0udHAtcm90di50cC1yb3R2LWV4cGFuZGVkIC50cC1yb3R2X20sLnRwLWZsZHYudHAtZmxkdi1leHBhbmRlZD4udHAtZmxkdl9iPi50cC1mbGR2X217dHJhbnNmb3JtOm5vbmV9LnRwLXJvdHZfYywudHAtZmxkdl9je2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MDtvcGFjaXR5OjA7b3ZlcmZsb3c6aGlkZGVuO3BhZGRpbmctYm90dG9tOjA7cGFkZGluZy10b3A6MDtwb3NpdGlvbjpyZWxhdGl2ZTt0cmFuc2l0aW9uOmhlaWdodCAuMnMgZWFzZS1pbi1vdXQsb3BhY2l0eSAuMnMgbGluZWFyLHBhZGRpbmcgLjJzIGVhc2UtaW4tb3V0fS50cC1yb3R2LnRwLXJvdHYtY3BsOm5vdCgudHAtcm90di1leHBhbmRlZCkgLnRwLXJvdHZfYywudHAtZmxkdi50cC1mbGR2LWNwbDpub3QoLnRwLWZsZHYtZXhwYW5kZWQpPi50cC1mbGR2X2N7ZGlzcGxheTpub25lfS50cC1yb3R2LnRwLXJvdHYtZXhwYW5kZWQgLnRwLXJvdHZfYywudHAtZmxkdi50cC1mbGR2LWV4cGFuZGVkPi50cC1mbGR2X2N7b3BhY2l0eToxO3BhZGRpbmctYm90dG9tOnZhcigtLWNudC12LXApO3BhZGRpbmctdG9wOnZhcigtLWNudC12LXApO3RyYW5zZm9ybTpub25lO292ZXJmbG93OnZpc2libGU7dHJhbnNpdGlvbjpoZWlnaHQgLjJzIGVhc2UtaW4tb3V0LG9wYWNpdHkgLjJzIGxpbmVhciAuMnMscGFkZGluZyAuMnMgZWFzZS1pbi1vdXR9LnRwLWxzdHYsLnRwLWNvbHR4dHZfbXtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtbHN0dl9ze3BhZGRpbmc6MCAyMHB4IDAgNHB4O3dpZHRoOjEwMCV9LnRwLWxzdHZfbSwudHAtY29sdHh0dl9tbXtib3R0b206MDttYXJnaW46YXV0bztwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjJweDt0b3A6MH0udHAtbHN0dl9tIHN2ZywudHAtY29sdHh0dl9tbSBzdmd7Ym90dG9tOjA7aGVpZ2h0OjE2cHg7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt3aWR0aDoxNnB4fS50cC1sc3R2X20gc3ZnIHBhdGgsLnRwLWNvbHR4dHZfbW0gc3ZnIHBhdGh7ZmlsbDpjdXJyZW50Q29sb3J9LnRwLXBuZHR4dHYsLnRwLWNvbHR4dHZfd3tkaXNwbGF5OmZsZXh9LnRwLXBuZHR4dHZfYSwudHAtY29sdHh0dl9je3dpZHRoOjEwMCV9LnRwLXBuZHR4dHZfYSsudHAtcG5kdHh0dl9hLC50cC1jb2x0eHR2X2MrLnRwLXBuZHR4dHZfYSwudHAtcG5kdHh0dl9hKy50cC1jb2x0eHR2X2MsLnRwLWNvbHR4dHZfYysudHAtY29sdHh0dl9je21hcmdpbi1sZWZ0OjJweH0udHAtYnRudl9ie3dpZHRoOjEwMCV9LnRwLWJ0bnZfdHt0ZXh0LWFsaWduOmNlbnRlcn0udHAtY2tidl9se2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246cmVsYXRpdmV9LnRwLWNrYnZfaXtsZWZ0OjA7b3BhY2l0eTowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowfS50cC1ja2J2X3d7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OnZhcigtLWJsZC11cyk7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6dmFyKC0tYmxkLXVzKX0udHAtY2tidl93IHN2Z3tib3R0b206MDtkaXNwbGF5OmJsb2NrO2hlaWdodDoxNnB4O2xlZnQ6MDttYXJnaW46YXV0bztvcGFjaXR5OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MDt3aWR0aDoxNnB4fS50cC1ja2J2X3cgc3ZnIHBhdGh7ZmlsbDpub25lO3N0cm9rZTp2YXIoLS1pbi1mZyk7c3Ryb2tlLXdpZHRoOjJ9LnRwLWNrYnZfaTpob3ZlcisudHAtY2tidl93e2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctaCl9LnRwLWNrYnZfaTpmb2N1cysudHAtY2tidl93e2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctZil9LnRwLWNrYnZfaTphY3RpdmUrLnRwLWNrYnZfd3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWEpfS50cC1ja2J2X2k6Y2hlY2tlZCsudHAtY2tidl93IHN2Z3tvcGFjaXR5OjF9LnRwLWNrYnYudHAtdi1kaXNhYmxlZCAudHAtY2tidl93e29wYWNpdHk6LjV9LnRwLWNvbHZ7cG9zaXRpb246cmVsYXRpdmV9LnRwLWNvbHZfaHtkaXNwbGF5OmZsZXh9LnRwLWNvbHZfc3tmbGV4LWdyb3c6MDtmbGV4LXNocmluazowO3dpZHRoOnZhcigtLWJsZC11cyl9LnRwLWNvbHZfdHtmbGV4OjE7bWFyZ2luLWxlZnQ6NHB4fS50cC1jb2x2X3B7aGVpZ2h0OjA7bWFyZ2luLXRvcDowO29wYWNpdHk6MDtvdmVyZmxvdzpoaWRkZW47dHJhbnNpdGlvbjpoZWlnaHQgLjJzIGVhc2UtaW4tb3V0LG9wYWNpdHkgLjJzIGxpbmVhcixtYXJnaW4gLjJzIGVhc2UtaW4tb3V0fS50cC1jb2x2LnRwLWNvbHYtY3BsIC50cC1jb2x2X3B7b3ZlcmZsb3c6dmlzaWJsZX0udHAtY29sdi50cC1jb2x2LWV4cGFuZGVkIC50cC1jb2x2X3B7bWFyZ2luLXRvcDp2YXIoLS1ibGQtcyk7b3BhY2l0eToxfS50cC1jb2x2IC50cC1wb3B2e2xlZnQ6Y2FsYygtMSp2YXIoLS1jbnQtaC1wKSk7cmlnaHQ6Y2FsYygtMSp2YXIoLS1jbnQtaC1wKSk7dG9wOnZhcigtLWJsZC11cyl9LnRwLWNvbHB2X2gsLnRwLWNvbHB2X2Fwe21hcmdpbi1sZWZ0OjZweDttYXJnaW4tcmlnaHQ6NnB4fS50cC1jb2xwdl9oe21hcmdpbi10b3A6dmFyKC0tYmxkLXMpfS50cC1jb2xwdl9yZ2J7ZGlzcGxheTpmbGV4O21hcmdpbi10b3A6dmFyKC0tYmxkLXMpO3dpZHRoOjEwMCV9LnRwLWNvbHB2X2F7ZGlzcGxheTpmbGV4O21hcmdpbi10b3A6dmFyKC0tY250LXYtcCk7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1jbnQtdi1wKSArIDJweCk7cG9zaXRpb246cmVsYXRpdmV9LnRwLWNvbHB2X2E6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tZ3J2LWZnKTtjb250ZW50OlwiXCI7aGVpZ2h0OjJweDtsZWZ0OmNhbGMoLTEqdmFyKC0tY250LWgtcCkpO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY250LWgtcCkpO3RvcDowfS50cC1jb2xwdl9hcHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXg6M30udHAtY29scHZfYXR7ZmxleDoxO21hcmdpbi1sZWZ0OjRweH0udHAtc3Zwdntib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtc3Zwdl9je2N1cnNvcjpjcm9zc2hhaXI7ZGlzcGxheTpibG9jaztoZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpKjQpO3dpZHRoOjEwMCV9LnRwLXN2cHZfbXtib3JkZXItcmFkaXVzOjEwMCU7Ym9yZGVyOnJnYmEoMjU1LDI1NSwyNTUsLjc1KSBzb2xpZCAycHg7Ym94LXNpemluZzpib3JkZXItYm94O2ZpbHRlcjpkcm9wLXNoYWRvdygwIDAgMXB4IHJnYmEoMCwgMCwgMCwgMC4zKSk7aGVpZ2h0OjEycHg7bWFyZ2luLWxlZnQ6LTZweDttYXJnaW4tdG9wOi02cHg7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMnB4fS50cC1zdnB2OmZvY3VzIC50cC1zdnB2X217Ym9yZGVyLWNvbG9yOiNmZmZ9LnRwLWhwbHZ7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLWJsZC11cyk7b3V0bGluZTpub25lO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1ocGx2X2N7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFFQUFBQUFCQ0FZQUFBQnViYWdYQUFBQVEwbEVRVlFvVTJQOHo4RHduMEdDZ1FFRGkyT0svUkJnWUhqQmdJcGZvdkZoOGo4WUJJZ3pGR1F4dXFFZ1BoYURPVDVnT2hQa2RDeE9aZUJnK0lERlpaaUdBZ0NhU1NNWXRjUkhMZ0FBQUFCSlJVNUVya0pnZ2c9PSk7YmFja2dyb3VuZC1wb3NpdGlvbjpsZWZ0IHRvcDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtib3JkZXItcmFkaXVzOjJweDtkaXNwbGF5OmJsb2NrO2hlaWdodDo0cHg7bGVmdDowO21hcmdpbi10b3A6LTJweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOjEwMCV9LnRwLWhwbHZfbXtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Ym9yZGVyOnJnYmEoMjU1LDI1NSwyNTUsLjc1KSBzb2xpZCAycHg7Ym94LXNoYWRvdzowIDAgMnB4IHJnYmEoMCwwLDAsLjEpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6MTJweDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotNnB4O21hcmdpbi10b3A6LTZweDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7d2lkdGg6MTJweH0udHAtaHBsdjpmb2N1cyAudHAtaHBsdl9te2JvcmRlci1jb2xvcjojZmZmfS50cC1hcGx2e2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1ibGQtdXMpO291dGxpbmU6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlfS50cC1hcGx2X2J7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHRvcCByaWdodCwgI2RkZCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZGRkIDc1JSksbGluZWFyLWdyYWRpZW50KHRvIHRvcCByaWdodCwgI2RkZCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZGRkIDc1JSk7YmFja2dyb3VuZC1zaXplOjRweCA0cHg7YmFja2dyb3VuZC1wb3NpdGlvbjowIDAsMnB4IDJweDtib3JkZXItcmFkaXVzOjJweDtkaXNwbGF5OmJsb2NrO2hlaWdodDo0cHg7bGVmdDowO21hcmdpbi10b3A6LTJweDtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt3aWR0aDoxMDAlfS50cC1hcGx2X2N7Ym90dG9tOjA7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjB9LnRwLWFwbHZfbXtiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gdG9wIHJpZ2h0LCAjZGRkIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsICNkZGQgNzUlKSxsaW5lYXItZ3JhZGllbnQodG8gdG9wIHJpZ2h0LCAjZGRkIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsICNkZGQgNzUlKTtiYWNrZ3JvdW5kLXNpemU6MTJweCAxMnB4O2JhY2tncm91bmQtcG9zaXRpb246MCAwLDZweCA2cHg7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2JveC1zaGFkb3c6MCAwIDJweCByZ2JhKDAsMCwwLC4xKTtoZWlnaHQ6MTJweDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotNnB4O21hcmdpbi10b3A6LTZweDtvdmVyZmxvdzpoaWRkZW47cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOjEycHh9LnRwLWFwbHZfcHtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Ym9yZGVyOnJnYmEoMjU1LDI1NSwyNTUsLjc1KSBzb2xpZCAycHg7Ym94LXNpemluZzpib3JkZXItYm94O2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfS50cC1hcGx2OmZvY3VzIC50cC1hcGx2X3B7Ym9yZGVyLWNvbG9yOiNmZmZ9LnRwLWNvbHN3dntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gdG9wIHJpZ2h0LCAjZGRkIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsICNkZGQgNzUlKSxsaW5lYXItZ3JhZGllbnQodG8gdG9wIHJpZ2h0LCAjZGRkIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsICNkZGQgNzUlKTtiYWNrZ3JvdW5kLXNpemU6MTBweCAxMHB4O2JhY2tncm91bmQtcG9zaXRpb246MCAwLDVweCA1cHg7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO292ZXJmbG93OmhpZGRlbn0udHAtY29sc3d2LnRwLXYtZGlzYWJsZWR7b3BhY2l0eTouNX0udHAtY29sc3d2X3N3e2JvcmRlci1yYWRpdXM6MH0udHAtY29sc3d2X2J7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXdpZHRoOjA7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpibG9jaztoZWlnaHQ6dmFyKC0tYmxkLXVzKTtsZWZ0OjA7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDp2YXIoLS1ibGQtdXMpfS50cC1jb2xzd3ZfYjpmb2N1czo6YWZ0ZXJ7Ym9yZGVyOnJnYmEoMjU1LDI1NSwyNTUsLjc1KSBzb2xpZCAycHg7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2JvdHRvbTowO2NvbnRlbnQ6XCJcIjtkaXNwbGF5OmJsb2NrO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfS50cC1jb2x0eHR2e2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlfS50cC1jb2x0eHR2X217bWFyZ2luLXJpZ2h0OjRweH0udHAtY29sdHh0dl9tc3tib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Y29sb3I6dmFyKC0tbGJsLWZnKTtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6dmFyKC0tYmxkLXVzKTtsaW5lLWhlaWdodDp2YXIoLS1ibGQtdXMpO3BhZGRpbmc6MCAxOHB4IDAgNHB4fS50cC1jb2x0eHR2X21zOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctaCl9LnRwLWNvbHR4dHZfbXM6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZy1mKX0udHAtY29sdHh0dl9tczphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZy1hKX0udHAtY29sdHh0dl9tbXtjb2xvcjp2YXIoLS1sYmwtZmcpfS50cC1jb2x0eHR2X3d7ZmxleDoxfS50cC1kZnd2e3Bvc2l0aW9uOmFic29sdXRlO3RvcDo4cHg7cmlnaHQ6OHB4O3dpZHRoOjI1NnB4fS50cC1mbGR2LnRwLWZsZHYtbm90IC50cC1mbGR2X2J7ZGlzcGxheTpub25lfS50cC1mbGR2X3R7cGFkZGluZy1sZWZ0OjRweH0udHAtZmxkdl9je2JvcmRlci1sZWZ0OnZhcigtLWNudC1iZykgc29saWQgNHB4fS50cC1mbGR2X2I6aG92ZXIrLnRwLWZsZHZfY3tib3JkZXItbGVmdC1jb2xvcjp2YXIoLS1jbnQtYmctaCl9LnRwLWZsZHZfYjpmb2N1cysudHAtZmxkdl9je2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWNudC1iZy1mKX0udHAtZmxkdl9iOmFjdGl2ZSsudHAtZmxkdl9je2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWNudC1iZy1hKX0udHAtZ3Jsdntwb3NpdGlvbjpyZWxhdGl2ZX0udHAtZ3Jsdl9ne2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSozKX0udHAtZ3Jsdl9nIHBvbHlsaW5le2ZpbGw6bm9uZTtzdHJva2U6dmFyKC0tbW8tZmcpO3N0cm9rZS1saW5lam9pbjpyb3VuZH0udHAtZ3Jsdl90e21hcmdpbi10b3A6LTRweDt0cmFuc2l0aW9uOmxlZnQgLjA1cyx0b3AgLjA1czt2aXNpYmlsaXR5OmhpZGRlbn0udHAtZ3Jsdl90LnRwLWdybHZfdC1he3Zpc2liaWxpdHk6dmlzaWJsZX0udHAtZ3Jsdl90LnRwLWdybHZfdC1pbnt0cmFuc2l0aW9uOm5vbmV9LnRwLWdybHYudHAtdi1kaXNhYmxlZCAudHAtZ3Jsdl9ne29wYWNpdHk6LjV9LnRwLWdybHYgLnRwLXR0dntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vLWZnKX0udHAtZ3JsdiAudHAtdHR2OjpiZWZvcmV7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1tby1mZyl9LnRwLWxibHZ7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtsaW5lLWhlaWdodDoxLjM7cGFkZGluZy1sZWZ0OnZhcigtLWNudC1oLXApO3BhZGRpbmctcmlnaHQ6dmFyKC0tY250LWgtcCl9LnRwLWxibHYudHAtbGJsdi1ub2x7ZGlzcGxheTpibG9ja30udHAtbGJsdl9se2NvbG9yOnZhcigtLWxibC1mZyk7ZmxleDoxOy13ZWJraXQtaHlwaGVuczphdXRvOy1tcy1oeXBoZW5zOmF1dG87aHlwaGVuczphdXRvO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWxlZnQ6NHB4O3BhZGRpbmctcmlnaHQ6MTZweH0udHAtbGJsdi50cC12LWRpc2FibGVkIC50cC1sYmx2X2x7b3BhY2l0eTouNX0udHAtbGJsdi50cC1sYmx2LW5vbCAudHAtbGJsdl9se2Rpc3BsYXk6bm9uZX0udHAtbGJsdl92e2FsaWduLXNlbGY6ZmxleC1zdGFydDtmbGV4LWdyb3c6MDtmbGV4LXNocmluazowO3dpZHRoOjE2MHB4fS50cC1sYmx2LnRwLWxibHYtbm9sIC50cC1sYmx2X3Z7d2lkdGg6MTAwJX0udHAtbHN0dl9ze3BhZGRpbmc6MCAyMHB4IDAgNHB4O3dpZHRoOjEwMCV9LnRwLWxzdHZfbXtjb2xvcjp2YXIoLS1idG4tZmcpfS50cC1zZ2x2X2l7cGFkZGluZzowIDRweH0udHAtc2dsdi50cC12LWRpc2FibGVkIC50cC1zZ2x2X2l7b3BhY2l0eTouNX0udHAtbWxsdl9pe2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSozKTtsaW5lLWhlaWdodDp2YXIoLS1ibGQtdXMpO3BhZGRpbmc6MCA0cHg7cmVzaXplOm5vbmU7d2hpdGUtc3BhY2U6cHJlfS50cC1tbGx2LnRwLXYtZGlzYWJsZWQgLnRwLW1sbHZfaXtvcGFjaXR5Oi41fS50cC1wMmR2e3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1wMmR2X2h7ZGlzcGxheTpmbGV4fS50cC1wMmR2X2J7aGVpZ2h0OnZhcigtLWJsZC11cyk7bWFyZ2luLXJpZ2h0OjRweDtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDp2YXIoLS1ibGQtdXMpfS50cC1wMmR2X2Igc3Zne2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjE2cHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LThweDttYXJnaW4tdG9wOi04cHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt3aWR0aDoxNnB4fS50cC1wMmR2X2Igc3ZnIHBhdGh7c3Ryb2tlOmN1cnJlbnRDb2xvcjtzdHJva2Utd2lkdGg6Mn0udHAtcDJkdl9iIHN2ZyBjaXJjbGV7ZmlsbDpjdXJyZW50Q29sb3J9LnRwLXAyZHZfdHtmbGV4OjF9LnRwLXAyZHZfcHtoZWlnaHQ6MDttYXJnaW4tdG9wOjA7b3BhY2l0eTowO292ZXJmbG93OmhpZGRlbjt0cmFuc2l0aW9uOmhlaWdodCAuMnMgZWFzZS1pbi1vdXQsb3BhY2l0eSAuMnMgbGluZWFyLG1hcmdpbiAuMnMgZWFzZS1pbi1vdXR9LnRwLXAyZHYudHAtcDJkdi1leHBhbmRlZCAudHAtcDJkdl9we21hcmdpbi10b3A6dmFyKC0tYmxkLXMpO29wYWNpdHk6MX0udHAtcDJkdiAudHAtcG9wdntsZWZ0OmNhbGMoLTEqdmFyKC0tY250LWgtcCkpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY250LWgtcCkpO3RvcDp2YXIoLS1ibGQtdXMpfS50cC1wMmRwdntwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KX0udHAtcDJkcHZfcHtjdXJzb3I6Y3Jvc3NoYWlyO2hlaWdodDowO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWJvdHRvbToxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1wMmRwdl9ne2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJX0udHAtcDJkcHZfYXh7b3BhY2l0eTouMTtzdHJva2U6dmFyKC0taW4tZmcpO3N0cm9rZS1kYXNoYXJyYXk6MX0udHAtcDJkcHZfbHtvcGFjaXR5Oi41O3N0cm9rZTp2YXIoLS1pbi1mZyk7c3Ryb2tlLWRhc2hhcnJheToxfS50cC1wMmRwdl9te2JvcmRlcjp2YXIoLS1pbi1mZykgc29saWQgMXB4O2JvcmRlci1yYWRpdXM6NTAlO2JveC1zaXppbmc6Ym9yZGVyLWJveDtoZWlnaHQ6NHB4O21hcmdpbi1sZWZ0Oi0ycHg7bWFyZ2luLXRvcDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjRweH0udHAtcDJkcHZfcDpmb2N1cyAudHAtcDJkcHZfbXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWZnKTtib3JkZXItd2lkdGg6MH0udHAtcG9wdntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJzLWJnKTtib3JkZXItcmFkaXVzOjZweDtib3gtc2hhZG93OjAgMnB4IDRweCB2YXIoLS1icy1zaCk7ZGlzcGxheTpub25lO21heC13aWR0aDoxNjhweDtwYWRkaW5nOnZhcigtLWNudC12LXApIHZhcigtLWNudC1oLXApO3Bvc2l0aW9uOmFic29sdXRlO3Zpc2liaWxpdHk6aGlkZGVuO3otaW5kZXg6MTAwMH0udHAtcG9wdi50cC1wb3B2LXZ7ZGlzcGxheTpibG9jazt2aXNpYmlsaXR5OnZpc2libGV9LnRwLXNwcnZfcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWdydi1mZyk7Ym9yZGVyLXdpZHRoOjA7ZGlzcGxheTpibG9jaztoZWlnaHQ6MnB4O21hcmdpbjowO3dpZHRoOjEwMCV9LnRwLXNsZHYudHAtdi1kaXNhYmxlZHtvcGFjaXR5Oi41fS50cC1zbGR2X3R7Ym94LXNpemluZzpib3JkZXItYm94O2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1ibGQtdXMpO21hcmdpbjowIDZweDtvdXRsaW5lOm5vbmU7cG9zaXRpb246cmVsYXRpdmV9LnRwLXNsZHZfdDo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmcpO2JvcmRlci1yYWRpdXM6MXB4O2JvdHRvbTowO2NvbnRlbnQ6XCJcIjtkaXNwbGF5OmJsb2NrO2hlaWdodDoycHg7bGVmdDowO21hcmdpbjphdXRvO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjB9LnRwLXNsZHZfa3toZWlnaHQ6MTAwJTtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjB9LnRwLXNsZHZfazo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tZmcpO2JvcmRlci1yYWRpdXM6MXB4O2JvdHRvbTowO2NvbnRlbnQ6XCJcIjtkaXNwbGF5OmJsb2NrO2hlaWdodDoycHg7bGVmdDowO21hcmdpbi1ib3R0b206YXV0bzttYXJnaW4tdG9wOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0udHAtc2xkdl9rOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2JvdHRvbTowO2NvbnRlbnQ6XCJcIjtkaXNwbGF5OmJsb2NrO2hlaWdodDoxMnB4O21hcmdpbi1ib3R0b206YXV0bzttYXJnaW4tdG9wOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTZweDt0b3A6MDt3aWR0aDoxMnB4fS50cC1zbGR2X3Q6aG92ZXIgLnRwLXNsZHZfazo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1idG4tYmctaCl9LnRwLXNsZHZfdDpmb2N1cyAudHAtc2xkdl9rOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZy1mKX0udHAtc2xkdl90OmFjdGl2ZSAudHAtc2xkdl9rOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZy1hKX0udHAtc2xkdHh0dntkaXNwbGF5OmZsZXh9LnRwLXNsZHR4dHZfc3tmbGV4OjJ9LnRwLXNsZHR4dHZfdHtmbGV4OjE7bWFyZ2luLWxlZnQ6NHB4fS50cC10YWJ2LnRwLXYtZGlzYWJsZWR7b3BhY2l0eTouNX0udHAtdGFidl9pe2FsaWduLWl0ZW1zOmZsZXgtZW5kO2Rpc3BsYXk6ZmxleDtvdmVyZmxvdzpoaWRkZW59LnRwLXRhYnYudHAtdGFidi1ub3AgLnRwLXRhYnZfaXtoZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KTtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtdGFidi50cC10YWJ2LW5vcCAudHAtdGFidl9pOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmcpO2JvdHRvbTowO2NvbnRlbnQ6XCJcIjtoZWlnaHQ6MnB4O2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowfS50cC10YWJ2X2N7Ym9yZGVyLWxlZnQ6dmFyKC0tY250LWJnKSBzb2xpZCA0cHg7cGFkZGluZy1ib3R0b206dmFyKC0tY250LXYtcCk7cGFkZGluZy10b3A6dmFyKC0tY250LXYtcCl9LnRwLXRiaXZ7ZmxleDoxO21pbi13aWR0aDowO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC10Yml2Ky50cC10Yml2e21hcmdpbi1sZWZ0OjJweH0udHAtdGJpdisudHAtdGJpdjo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnKTtib3R0b206MDtjb250ZW50OlwiXCI7aGVpZ2h0OjJweDtsZWZ0Oi0ycHg7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MnB4fS50cC10Yml2X2J7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmcpO2Rpc3BsYXk6YmxvY2s7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tY250LWgtcCkgKyA0cHgpO3BhZGRpbmctcmlnaHQ6Y2FsYyh2YXIoLS1jbnQtaC1wKSArIDRweCk7d2lkdGg6MTAwJX0udHAtdGJpdl9iOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnLWgpfS50cC10Yml2X2I6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmctZil9LnRwLXRiaXZfYjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmctYSl9LnRwLXRiaXZfYjpkaXNhYmxlZHtvcGFjaXR5Oi41fS50cC10Yml2X3R7Y29sb3I6dmFyKC0tY250LWZnKTtoZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KTtsaW5lLWhlaWdodDpjYWxjKHZhcigtLWJsZC11cykgKyA0cHgpO29wYWNpdHk6LjU7b3ZlcmZsb3c6aGlkZGVuO3RleHQtb3ZlcmZsb3c6ZWxsaXBzaXN9LnRwLXRiaXYudHAtdGJpdi1zZWwgLnRwLXRiaXZfdHtvcGFjaXR5OjF9LnRwLXR4dHZ7cG9zaXRpb246cmVsYXRpdmV9LnRwLXR4dHZfaXtwYWRkaW5nOjAgNHB4fS50cC10eHR2LnRwLXR4dHYtZnN0IC50cC10eHR2X2l7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6MDtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czowfS50cC10eHR2LnRwLXR4dHYtbWlkIC50cC10eHR2X2l7Ym9yZGVyLXJhZGl1czowfS50cC10eHR2LnRwLXR4dHYtbHN0IC50cC10eHR2X2l7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO2JvcmRlci10b3AtbGVmdC1yYWRpdXM6MH0udHAtdHh0di50cC10eHR2LW51bSAudHAtdHh0dl9pe3RleHQtYWxpZ246cmlnaHR9LnRwLXR4dHYudHAtdHh0di1kcmcgLnRwLXR4dHZfaXtvcGFjaXR5Oi4zfS50cC10eHR2X2t7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OjEwMCU7bGVmdDotM3B4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjEycHh9LnRwLXR4dHZfazo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tZmcpO2JvcmRlci1yYWRpdXM6MXB4O2JvdHRvbTowO2NvbnRlbnQ6XCJcIjtoZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpIC0gNHB4KTtsZWZ0OjUwJTttYXJnaW4tYm90dG9tOmF1dG87bWFyZ2luLWxlZnQ6LTFweDttYXJnaW4tdG9wOmF1dG87b3BhY2l0eTouMTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt0cmFuc2l0aW9uOmJvcmRlci1yYWRpdXMgLjFzLGhlaWdodCAuMXMsdHJhbnNmb3JtIC4xcyx3aWR0aCAuMXM7d2lkdGg6MnB4fS50cC10eHR2X2s6aG92ZXI6OmJlZm9yZSwudHAtdHh0di50cC10eHR2LWRyZyAudHAtdHh0dl9rOjpiZWZvcmV7b3BhY2l0eToxfS50cC10eHR2LnRwLXR4dHYtZHJnIC50cC10eHR2X2s6OmJlZm9yZXtib3JkZXItcmFkaXVzOjUwJTtoZWlnaHQ6NHB4O3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xcHgpO3dpZHRoOjRweH0udHAtdHh0dl9ne2JvdHRvbTowO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjhweDtsZWZ0OjUwJTttYXJnaW46YXV0bztvdmVyZmxvdzp2aXNpYmxlO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7dmlzaWJpbGl0eTpoaWRkZW47d2lkdGg6MTAwJX0udHAtdHh0di50cC10eHR2LWRyZyAudHAtdHh0dl9ne3Zpc2liaWxpdHk6dmlzaWJsZX0udHAtdHh0dl9nYntmaWxsOm5vbmU7c3Ryb2tlOnZhcigtLWluLWZnKTtzdHJva2UtZGFzaGFycmF5OjF9LnRwLXR4dHZfZ2h7ZmlsbDpub25lO3N0cm9rZTp2YXIoLS1pbi1mZyl9LnRwLXR4dHYgLnRwLXR0dnttYXJnaW4tbGVmdDo2cHg7dmlzaWJpbGl0eTpoaWRkZW59LnRwLXR4dHYudHAtdHh0di1kcmcgLnRwLXR0dnt2aXNpYmlsaXR5OnZpc2libGV9LnRwLXR0dntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWZnKTtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Y29sb3I6dmFyKC0tYnMtYmcpO3BhZGRpbmc6MnB4IDRweDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTEwMCUpfS50cC10dHY6OmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0taW4tZmcpIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb250ZW50OlwiXCI7Zm9udC1zaXplOi45ZW07aGVpZ2h0OjRweDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO3dpZHRoOjRweH0udHAtcm90dntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJzLWJnKTtib3JkZXItcmFkaXVzOnZhcigtLWJzLWJyKTtib3gtc2hhZG93OjAgMnB4IDRweCB2YXIoLS1icy1zaCk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246bGVmdH0udHAtcm90dl9ie2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tYnMtYnIpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icik7cGFkZGluZy1sZWZ0OmNhbGMoNHB4ICsgdmFyKC0tYmxkLXVzKSArIHZhcigtLWNudC1oLXApKTt0ZXh0LWFsaWduOmNlbnRlcn0udHAtcm90di50cC1yb3R2LWV4cGFuZGVkIC50cC1yb3R2X2J7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjB9LnRwLXJvdHYudHAtcm90di1ub3QgLnRwLXJvdHZfYntkaXNwbGF5Om5vbmV9LnRwLXJvdHZfYz4udHAtZmxkdi50cC12LWxzdD4udHAtZmxkdl9jLC50cC1yb3R2X2M+LnRwLXRhYnYudHAtdi1sc3Q+LnRwLXRhYnZfY3tib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icil9LnRwLXJvdHZfYz4udHAtZmxkdi50cC12LWxzdDpub3QoLnRwLWZsZHYtZXhwYW5kZWQpPi50cC1mbGR2X2J7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1icy1icik7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYnIpfS50cC1yb3R2X2MgLnRwLWZsZHYudHAtdi12bHN0Om5vdCgudHAtZmxkdi1leHBhbmRlZCk+LnRwLWZsZHZfYntib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icil9LnRwLXJvdHYudHAtcm90di1ub3QgLnRwLXJvdHZfYz4udHAtZmxkdi50cC12LWZzdHttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY250LXYtcCkpfS50cC1yb3R2LnRwLXJvdHYtbm90IC50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1mc3Q+LnRwLWZsZHZfYntib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icil9LnRwLXJvdHYudHAtcm90di1ub3QgLnRwLXJvdHZfYz4udHAtdGFidi50cC12LWZzdHttYXJnaW4tdG9wOmNhbGMoLTEqdmFyKC0tY250LXYtcCkpfS50cC1yb3R2LnRwLXJvdHYtbm90IC50cC1yb3R2X2M+LnRwLXRhYnYudHAtdi1mc3Q+LnRwLXRhYnZfaXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icil9LnRwLXJvdHYudHAtdi1kaXNhYmxlZCwudHAtcm90diAudHAtdi1kaXNhYmxlZHtwb2ludGVyLWV2ZW50czpub25lfS50cC1yb3R2LnRwLXYtaGlkZGVuLC50cC1yb3R2IC50cC12LWhpZGRlbntkaXNwbGF5Om5vbmV9Jyk7XG4gICAgICAgICAgICB0aGlzLnBvb2xfLmdldEFsbCgpLmZvckVhY2goKHBsdWdpbikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1iZWRQbHVnaW5TdHlsZV8ocGx1Z2luKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yZWdpc3RlclBsdWdpbih7XG4gICAgICAgICAgICAgICAgcGx1Z2luczogW1xuICAgICAgICAgICAgICAgICAgICBTbGlkZXJCbGFkZVBsdWdpbixcbiAgICAgICAgICAgICAgICAgICAgTGlzdEJsYWRlUGx1Z2luLFxuICAgICAgICAgICAgICAgICAgICBUYWJCbGFkZVBsdWdpbixcbiAgICAgICAgICAgICAgICAgICAgVGV4dEJsYWRlUGx1Z2luLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IFZFUlNJT04gPSBuZXcgU2VtdmVyKCczLjEuMCcpO1xuXG4gICAgZXhwb3J0cy5CbGFkZUFwaSA9IEJsYWRlQXBpO1xuICAgIGV4cG9ydHMuQnV0dG9uQXBpID0gQnV0dG9uQXBpO1xuICAgIGV4cG9ydHMuRm9sZGVyQXBpID0gRm9sZGVyQXBpO1xuICAgIGV4cG9ydHMuSW5wdXRCaW5kaW5nQXBpID0gSW5wdXRCaW5kaW5nQXBpO1xuICAgIGV4cG9ydHMuTGlzdEFwaSA9IExpc3RBcGk7XG4gICAgZXhwb3J0cy5Nb25pdG9yQmluZGluZ0FwaSA9IE1vbml0b3JCaW5kaW5nQXBpO1xuICAgIGV4cG9ydHMuUGFuZSA9IFBhbmU7XG4gICAgZXhwb3J0cy5TZXBhcmF0b3JBcGkgPSBTZXBhcmF0b3JBcGk7XG4gICAgZXhwb3J0cy5TbGlkZXJBcGkgPSBTbGlkZXJBcGk7XG4gICAgZXhwb3J0cy5UYWJBcGkgPSBUYWJBcGk7XG4gICAgZXhwb3J0cy5UYWJQYWdlQXBpID0gVGFiUGFnZUFwaTtcbiAgICBleHBvcnRzLlRleHRBcGkgPSBUZXh0QXBpO1xuICAgIGV4cG9ydHMuVHBDaGFuZ2VFdmVudCA9IFRwQ2hhbmdlRXZlbnQ7XG4gICAgZXhwb3J0cy5WRVJTSU9OID0gVkVSU0lPTjtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG5cbn0pKTtcbiIsImNvbnN0IGNhbnZhc1NrZXRjaCA9IHJlcXVpcmUoJ2NhbnZhcy1za2V0Y2gnKTtcbmNvbnN0IHJhbmRvbSAgPSByZXF1aXJlKCdjYW52YXMtc2tldGNoLXV0aWwvcmFuZG9tJylcbmNvbnN0IG1hdGggID0gcmVxdWlyZSgnY2FudmFzLXNrZXRjaC11dGlsL21hdGgnKVxuY29uc3QgVHdlYWtQYW5lID0gcmVxdWlyZShcInR3ZWFrcGFuZVwiKVxuXG5jb25zdCBzZXR0aW5ncyA9IHtcbiAgZGltZW5zaW9uczogWyAxMTcwLCAyNTMyIF0sXG4gIGFuaW1hdGU6IHRydWVcbn07XG5cbmNvbnN0IHBhcmFtcyA9IHtcbiAgYW5pbWF0ZTogdHJ1ZSxcbiAgZnJhbWU6IDAsXG4gIGZyZXE6IDAuMDAxLFxuICBiZzoge3I6IDAsIGc6IDAsIGI6IDB9LFxuICBmZzoge3I6IDI1NSwgZzogMjU1LCBiOiAyNTUsIGE6IDF9LFxufVxuXG5jb25zdCBza2V0Y2ggPSAoKSA9PiB7XG4gIHJldHVybiAoeyBjb250ZXh0LCB3aWR0aCwgaGVpZ2h0LCBmcmFtZSB9KSA9PiB7XG4gICAgY29uc3QgYmcgPSBgcmdiKCR7cGFyYW1zLmJnLnJ9LCR7cGFyYW1zLmJnLmd9LCR7cGFyYW1zLmJnLmJ9KWBcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9IGJnO1xuICAgIGNvbnRleHQuZmlsbFJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG5cbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICd3aGl0ZSdcblxuICAgIGNvbnN0IGN4ID0gMCAvL3dpZHRoICogLjVcbiAgICBjb25zdCBjeSA9IGhlaWdodCAqIC41XG4gICAgY29uc3QgY3cgPSB3aWR0aCAqIC4wMVxuICAgIGNvbnN0IGNoID0gaGVpZ2h0ICogLjFcbiAgICBsZXQgeCwgeSwgdywgaFxuXG4gICAgY29uc3QgbnVtID0gMzBcbiAgICBjb25zdCByYWRpdXMgPSB3aWR0aCAqIC44XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51bTsgaSsrKXtcbiAgICAgIGNvbnN0IHNsaWNlID0gbWF0aC5kZWdUb1JhZCgzNjAgLyBudW0pXG4gICAgICBjb25zdCBhbmdsZSA9IHNsaWNlICogaVxuXG4gICAgICB4ID0gY3ggKyByYWRpdXMgKiBNYXRoLnNpbihhbmdsZSlcbiAgICAgIHkgPSBjeSArIHJhZGl1cyAqIE1hdGguY29zKGFuZ2xlKVxuXG4gICAgICBjb25zdCBmID0gcGFyYW1zLmFuaW1hdGUgPyBmcmFtZSA6IHBhcmFtcy5mcmFtZVxuXG4gICAgICBjb25zdCBuID0gcmFuZG9tLm5vaXNlM0QoeCwgeSwgZiwgcGFyYW1zLmZyZXEpXG5cbiAgICAgIHcgPSBjdyAqIG1hdGgubWFwUmFuZ2UobiwgLTEsIDEsIC4xLCAxLjMpXG4gICAgICBoID0gY2ggKiBtYXRoLm1hcFJhbmdlKG4sIC0xLCAxLCAuMSwgMSlcblxuICAgICAgY29udGV4dC5zYXZlKClcbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKHgsIHkpXG4gICAgICBjb250ZXh0LnJvdGF0ZSgtYW5nbGUpXG5cbiAgICAgIGNvbnRleHQuc2NhbGUobWF0aC5tYXBSYW5nZShuLCAtMSwgMSwgNCwgNSksIG1hdGgubWFwUmFuZ2UobiwgLTEsIDEsIDEsIDIpKVxuXG4gICAgICBjb25zdCBmZyA9IGByZ2JhKCR7cGFyYW1zLmZnLnJ9LCR7cGFyYW1zLmZnLmd9LCR7cGFyYW1zLmZnLmJ9LCR7cGFyYW1zLmZnLmF9KWBcbiAgICAgIGNvbnRleHQuZmlsbFN0eWxlID0gZmdcbiAgICAgIFxuICAgICAgY29udGV4dC5iZWdpblBhdGgoKVxuICAgICAgY29udGV4dC5yZWN0KC13ICogLjUsIG1hdGgubWFwUmFuZ2UobiwgLTEsIDEsIDAsIC1oICogLjUpLCB3LCBoKVxuICAgICAgY29udGV4dC5maWxsKClcbiAgICAgIGNvbnRleHQucmVzdG9yZSgpICAgICAgXG5cbiAgICAgIGNvbnRleHQuc2F2ZSgpXG5cbiAgICAgIGNvbnRleHQudHJhbnNsYXRlKGN4LCBjeSlcbiAgICAgIGNvbnRleHQucm90YXRlKC1hbmdsZSlcblxuICAgICAgY29udGV4dC5saW5lV2lkdGggPSBtYXRoLm1hcFJhbmdlKG4sIC0xLCAxLCAyLCAxNSkgLy9yYW5kb20ucmFuZ2UoMiwgMTUpXG4gICAgICBjb250ZXh0LnN0cm9rZVN0eWxlID0gZmdcblxuICAgICAgY29udGV4dC5iZWdpblBhdGgoKVxuICAgICAgY29udGV4dC5hcmMoMCwgMCwgXG4gICAgICAgIHJhZGl1cyAqIG1hdGgubWFwUmFuZ2UobiwgLTEsIDEsIC43LCAxLjIpLCBcbiAgICAgICAgc2xpY2UgKiBtYXRoLm1hcFJhbmdlKG4sIC0xLCAxLCAuNCwgLTEuNSksIFxuICAgICAgICBzbGljZSAqIG1hdGgubWFwUmFuZ2UobiwgLTEsIDEsIC42LCAzKSlcbiAgICAgIGNvbnRleHQuc3Ryb2tlKClcblxuICAgICAgY29udGV4dC5yZXN0b3JlKClcblxuICAgIH1cbiAgICBpZiAocGFyYW1zLmFuaW1hdGUpIHBhcmFtcy5mcmFtZSA9IGZyYW1lXG4gIH07XG59O1xuXG5jb25zdCBjcmVhdGVQYW5lID0gKCkgPT4ge1xuICBjb25zdCBwYW5lID0gbmV3IFR3ZWFrUGFuZS5QYW5lKClcbiAgbGV0IGZvbGRlclxuXG4gIGZvbGRlciA9IHBhbmUuYWRkRm9sZGVyKHt0aXRsZTogXCJHcmlkXCJ9KVxuICBmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnYmcnKVxuICBmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnZmcnKVxuXG4gIGZvbGRlciA9IHBhbmUuYWRkRm9sZGVyKHt0aXRsZTogXCJOb2lzZVwifSlcbiAgLy8gZm9sZGVyLmFkZElucHV0KHBhcmFtcywgXCJhbXBcIiwge21pbjogMCwgbWF4OiAxfSlcbiAgZm9sZGVyLmFkZElucHV0KHBhcmFtcywgXCJmcmVxXCIsIHttaW46IC0uMDEsIG1heDogMC4wMX0pXG4gIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdhbmltYXRlJylcbiAgZm9sZGVyLmFkZElucHV0KHBhcmFtcywgXCJmcmFtZVwiLCB7bWluOiAwLCBtYXg6IDk5OX0pXG5cbn1cblxuY3JlYXRlUGFuZSgpXG5jYW52YXNTa2V0Y2goc2tldGNoLCBzZXR0aW5ncyk7XG4iLCJcbmdsb2JhbC5DQU5WQVNfU0tFVENIX0RFRkFVTFRfU1RPUkFHRV9LRVkgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiJdLCJtYXBwaW5ncyI6IkNBQUEsU0FBQUEsRUFBQUMsRUFBQUMsRUFBQUMsR0FBQSxTQUFBQyxFQUFBQyxFQUFBQyxHQUFBLElBQUFKLEVBQUFH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Q2pCLENBQUUsZUFBZ0IsSUFBSyxLQUN2QixDQUFFLGdCQUFpQixLQUFNLE1BR3pCLENBQUUsS0FBTSxHQUFJLElBQ1osQ0FBRSxLQUFNLEdBQUksS0FDWixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsTUFBTyxJQUFLLEtBQ2QsQ0FBRSxNQUFPLElBQUssS0FDZCxDQUFFLE1BQU8sSUFBSyxLQUdkLENBQUUsS0FBTSxJQUFLLE1BQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLEdBQUksS0FDWixDQUFFLEtBQU0sR0FBSSxJQUNaLENBQUUsS0FBTSxHQUFJLElBQ1osQ0FBRSxNQUFPLEdBQUksSUFDYixDQUFFLE1BQU8sS0FBTSxNQUNmLENBQUUsTUFBTyxLQUFNLE1BQ2YsQ0FBRSxLQUFNLElBQU0sTUFDZCxDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsTUFBTyxJQUFLLE1BQ2QsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLE1BQU8sSUFBSyxLQUNkLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLEdBQUksS0FDWixDQUFFLEtBQU0sR0FBSSxJQUNaLENBQUUsS0FBTSxHQUFJLElBQ1osQ0FBRSxNQUFPLEdBQUksSUFDYixDQUFFLE1BQU8sR0FBSSxJQUNiLENBQUUsTUFBTyxHQUFJLElBQ2IsQ0FBRSxLQUFNLElBQUssTUFDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJ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