',dropdown:'',p2dpad:''};function I(t,e){const n=t.createElementNS(R,"svg");return n.innerHTML=N[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 Dt{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 Tt{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 Dt(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 Tt(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 Ft{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 Nt 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 Ft(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 Nt(t.document,{blade:t.blade,viewProps:t.viewProps});return t.params.pages.forEach((n=>{const i=new Dt(t.document,{itemProps:V.fromObject({selected:!1,title:n.title}),props:V.fromObject({selected:!1})});e.add(i)})),e},api:t=>t.controller instanceof Nt?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 Te(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 Fe(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 Ne{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_(Fe(t,this.elem_)),sender:this,shiftKey:t.shiftKey})}onDocumentMouseMove_(t){this.emitter.emit("move",{altKey:t.altKey,data:this.computePosition_(Fe(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_(Fe(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 Ne(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=Te(this.baseStep_,je(t));0!==e&&this.value.setRawValue(this.constrainValue_(this.value.rawValue+e),{forceEmit:!1,last:!1})}onInputKeyUp_(t){0!==Te(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 Ne(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=Te(this.baseStep_,Re(t));0!==e&&this.value.setRawValue(this.value.rawValue+e,{forceEmit:!1,last:!1})}onKeyUp_(t){0!==Te(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 Dn(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 Tn(t){return e=>{const n=Dn(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 Fn(t){return e=>{const n=On(e);return n?new xn(n,"hsl",t):null}}function Nn(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=Nn(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:Dn,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:Nn,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},Tn("int"),Rn("int"),Fn("int"),In("int"),Hn("int"),qn("int")],float:[Tn("float"),Rn("float"),Fn("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 Ne(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=Te(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!==Te(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)=>{De({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 Ne(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=Te(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!==Te(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",{willReadFrequently:!0}):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),De({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 Di(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 Ti(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=>Di(t.params)?Ai:Li,equals:xn.equals,writer:t=>function(t){const e=t?Si:Mi;return(t,n)=>{Ze(t,e(n))}}(Di(t.params))},controller:t=>{const e=Di(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:Ti(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 Fi={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})}},Ni={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)=>{De({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[Te(e[0],Re(t)),Te(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 Ne(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),De({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 Dr{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 Ne(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 Tr(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 Dr(t.document,{formatter:Tr(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:Tr(t.params),value:t.value,viewProps:t.viewProps}):new kr(t.document,{formatter:Tr(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 Fr{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 Nr{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 Fr({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 Nr({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.1");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:F(),o=function(){const t=new Ur;return[pr,mr,wr,yr,$i,Ni,Fi,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:rgba(0,0,0,0);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 rgba(0,0,0,0);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:rgba(0,0,0,0)}.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:rgba(0,0,0,0) 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, hsl(230deg, 7%, 17%));--bs-sh: var(--tp-base-shadow-color, rgba(0, 0, 0, 0.2));--btn-bg: var(--tp-button-background-color, hsl(230deg, 7%, 70%));--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, hsl(230deg, 7%, 17%));--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, hsl(230deg, 7%, 75%));--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, hsl(230deg, 7%, 75%));--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:rgba(0,0,0,0);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;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) rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);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=Tt,t.TextApi=Hr,t.TpChangeEvent=i,t.VERSION=Qr,Object.defineProperty(t,"__esModule",{value:!0})}))},{}],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:{})},{}]},{},[1,10]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyIiwiZSIsIm4iLCJ0IiwibyIsImkiLCJmIiwiYyIsInJlcXVpcmUiLCJ1IiwiYSIsIkVycm9yIiwiY29kZSIsInAiLCJleHBvcnRzIiwiY2FsbCIsImxlbmd0aCIsIm1vZHVsZSIsImNhbnZhc1NrZXRjaCIsInJhbmRvbSIsIm1hdGgiLCJUd2Vha3BhbmUiLCJwYXJhbXMiLCJjb2xzIiwicm93cyIsInNjYWxlTWluIiwic2NhbGVNYXgiLCJmcmVxIiwiYW1wIiwiZnJhbWUiLCJhbmltYXRlIiwibGluZUNhcCIsInBhbmUiLCJQYW5lIiwiZm9sZGVyIiwiYWRkRm9sZGVyIiwidGl0bGUiLCJhZGRJbnB1dCIsIm9wdGlvbnMiLCJidXR0Iiwicm91bmQiLCJzcXVhcmUiLCJtaW4iLCJtYXgiLCJzdGVwIiwiY3JlYXRlUGFuZSIsImNvbnRleHQiLCJ3aWR0aCIsImhlaWdodCIsImZpbGxTdHlsZSIsImZpbGxSZWN0IiwibnVtQ2VsbHMiLCJncmlkdyIsImdyaWRoIiwiY2VsbHciLCJjZWxsaCIsIm1hcmd4IiwibWFyZ3kiLCJ4IiwieSIsIk1hdGgiLCJmbG9vciIsInciLCJub2lzZTNEIiwiYW5nbGUiLCJQSSIsInNjYWxlIiwibWFwUmFuZ2UiLCJzYXZlIiwidHJhbnNsYXRlIiwicm90YXRlIiwibGluZVdpZHRoIiwiYmVnaW5QYXRoIiwibW92ZVRvIiwibGluZVRvIiwic3Ryb2tlIiwicmVzdG9yZSIsImRpbWVuc2lvbnMiLCJ2YWx1ZSIsImZyb20iLCJ0byIsIlR5cGVFcnJvciIsImN5Y2xlIiwiZGVmaW5lZCIsIndyYXAiLCJFUFNJTE9OIiwiTnVtYmVyIiwiY2xhbXAiLCJsZXJwIiwiaW52ZXJzZUxlcnAiLCJhYnMiLCJ0b0Zpbml0ZSIsImRlZmF1bHRWYWx1ZSIsImlzRmluaXRlIiwiZXhwYW5kVmVjdG9yIiwiZGltcyIsInNjYWxhciIsIm91dCIsImxlcnBBcnJheSIsIm5ld0FycmF5IiwiaW5pdGlhbFZhbHVlIiwicHVzaCIsIm1vZCIsImIiLCJkYW1wIiwibGFtYmRhIiwiZHQiLCJleHAiLCJmcmFjdCIsInNpZ24iLCJkZWdUb1JhZCIsInJhZFRvRGVnIiwicGluZ1BvbmciLCJsaW5zcGFjZSIsIm9wdHMiLCJlbmRwb2ludCIsIm9mZnNldCIsIm1hcCIsIl8iLCJsZXJwRnJhbWVzIiwidmFsdWVzIiwibGVuIiwid2hvbGUiLCJuZXh0RnJhbWUiLCJBcnJheSIsImlzQXJyYXkiLCJjbGFtcDAxIiwidiIsInNtb290aHN0ZXAiLCJkYW1wQXJyYXkiLCJpbnB1dE1pbiIsImlucHV0TWF4Iiwib3V0cHV0TWluIiwib3V0cHV0TWF4Iiwib3V0VmFsIiwiZXhwYW5kMkQiLCJleHBhbmQzRCIsImV4cGFuZDREIiwic2VlZFJhbmRvbSIsIlNpbXBsZXhOb2lzZSIsImNyZWF0ZVJhbmRvbSIsImRlZmF1bHRTZWVkIiwiY3VycmVudFNlZWQiLCJjdXJyZW50UmFuZG9tIiwibm9pc2VHZW5lcmF0b3IiLCJkZWZhdWx0UmFuZG9tIiwiX25leHRHYXVzc2lhbiIsIl9oYXNOZXh0R2F1c3NpYW4iLCJzZXRTZWVkIiwiZ2V0U2VlZCIsImdldFJhbmRvbVNlZWQiLCJTdHJpbmciLCJ2YWx1ZU5vblplcm8iLCJwZXJtdXRlTm9pc2UiLCJjcmVhdGVOb2lzZSIsIm5vaXNlMUQiLCJmcmVxdWVuY3kiLCJhbXBsaXR1ZGUiLCJub2lzZTJEIiwieiIsIm5vaXNlNEQiLCJib29sZWFuIiwiY2hhbmNlIiwicmFuZ2UiLCJyYW5nZUZsb29yIiwicGljayIsImFycmF5Iiwic2h1ZmZsZSIsImFyciIsInJhbmQiLCJ0bXAiLCJyZXQiLCJzbGljZSIsIm9uQ2lyY2xlIiwiaW5zaWRlQ2lyY2xlIiwicmFkaXVzIiwic3FydCIsIm9uU3BoZXJlIiwicGhpIiwidGhldGEiLCJhY29zIiwic2luIiwiY29zIiwiaW5zaWRlU3BoZXJlIiwiayIsImNicnQiLCJxdWF0ZXJuaW9uIiwidTEiLCJ1MiIsInUzIiwic3ExIiwic3EyIiwidGhldGExIiwidGhldGEyIiwid2VpZ2h0ZWQiLCJ3ZWlnaHRlZFNldCIsInNldCIsIndlaWdodGVkU2V0SW5kZXgiLCJnYXVzc2lhbiIsIm1lYW4iLCJzdGFuZGFyZERlcml2YXRpb24iLCJyZXN1bHQiLCJ2MSIsInYyIiwicyIsIm11bHRpcGxpZXIiLCJsb2ciLCJzZWVkIiwib3B0IiwidW5kZWZpbmVkIiwid2VpZ2h0Iiwid2VpZ2h0cyIsInRvdGFsV2VpZ2h0IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJwcm90b3R5cGUiLCJwcm9wSXNFbnVtZXJhYmxlIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJ0b09iamVjdCIsInZhbCIsIm9iamVjdEFzc2lnbiIsImFzc2lnbiIsInRlc3QxIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInRlc3QyIiwiZnJvbUNoYXJDb2RlIiwiam9pbiIsInRlc3QzIiwic3BsaXQiLCJmb3JFYWNoIiwibGV0dGVyIiwia2V5cyIsImVyciIsInNob3VsZFVzZU5hdGl2ZSIsInRhcmdldCIsInNvdXJjZSIsInN5bWJvbHMiLCJhcmd1bWVudHMiLCJrZXkiLCJicm93c2VyIiwiY29tbW9uanNHbG9iYWwiLCJwZXJmb3JtYW5jZSIsIm5vdyIsIkRhdGUiLCJpc1Byb21pc2VfMSIsIm9iaiIsInRoZW4iLCJpc0RvbSIsIndpbmRvdyIsIk5vZGUiLCJub2RlVHlwZSIsIm5vZGVOYW1lIiwiZ2V0Q2xpZW50QVBJIiwiYXJndW1lbnRzJDEiLCJpc0Jyb3dzZXIiLCJkb2N1bWVudCIsImNhY2hlIiwic2hpbSIsInN1cHBvcnRzQXJndW1lbnRzQ2xhc3MiLCJ0b1N0cmluZyIsInN1cHBvcnRlZCIsIm9iamVjdCIsInVuc3VwcG9ydGVkIiwicFNsaWNlIiwiZGVlcEVxdWFsIiwiYWN0dWFsIiwiZXhwZWN0ZWQiLCJnZXRUaW1lIiwic3RyaWN0IiwiaXNVbmRlZmluZWRPck51bGwiLCJpc19hcmd1bWVudHMiLCJpc0J1ZmZlciIsImthIiwia2IiLCJzb3J0Iiwib2JqRXF1aXYiLCJjb3B5IiwiZ2xvYmFsIiwidG9rZW4iLCJ0aW1lem9uZSIsInRpbWV6b25lQ2xpcCIsImRhdGVGb3JtYXQiLCJkYXRlIiwibWFzayIsInV0YyIsImdtdCIsImtpbmRPZiIsInRlc3QiLCJpc05hTiIsIm1hc2tTbGljZSIsIm1hc2tzIiwiZCIsIkQiLCJtIiwiSCIsIk0iLCJMIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJXIiwiZ2V0V2VlayIsIk4iLCJnZXREYXlPZldlZWsiLCJmbGFncyIsImRkIiwicGFkIiwiZGRkIiwiaTE4biIsImRheU5hbWVzIiwiZGRkZCIsIm1tIiwibW1tIiwibW9udGhOYW1lcyIsIm1tbW0iLCJ5eSIsInl5eXkiLCJoIiwiaGgiLCJISCIsIk1NIiwic3MiLCJsIiwidGltZU5hbWVzIiwidHQiLCJUIiwiVFQiLCJaIiwibWF0Y2giLCJwb3AiLCJyZXBsYWNlIiwiUyIsInRhcmdldFRodXJzZGF5IiwiZ2V0RnVsbFllYXIiLCJnZXRNb250aCIsImdldERhdGUiLCJzZXREYXRlIiwiZ2V0RGF5IiwiZmlyc3RUaHVyc2RheSIsImRzIiwic2V0SG91cnMiLCJnZXRIb3VycyIsImRvdyIsInRvTG93ZXJDYXNlIiwiZGVmYXVsdCIsInNob3J0RGF0ZSIsIm1lZGl1bURhdGUiLCJsb25nRGF0ZSIsImZ1bGxEYXRlIiwic2hvcnRUaW1lIiwibWVkaXVtVGltZSIsImxvbmdUaW1lIiwiaXNvRGF0ZSIsImlzb1RpbWUiLCJpc29EYXRlVGltZSIsImlzb1V0Y0RhdGVUaW1lIiwiZXhwaXJlc0hlYWRlckZvcm1hdCIsInJlcyIsInJlcGVhdFN0cmluZyIsInN0ciIsIm51bSIsInN1YnN0ciIsImxpbmsiLCJub29wIiwiZGVmYXVsdEV4dHMiLCJleHRlbnNpb24iLCJwcmVmaXgiLCJzdWZmaXgiLCJzdXBwb3J0ZWRFbmNvZGluZ3MiLCJzdHJlYW0iLCJpc1N0YXJ0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmaWxlbmFtZSIsInJlc29sdmVGaWxlbmFtZSIsImZ1bmMiLCJjbGllbnQiLCJvdXRwdXQiLCJldiIsInNhdmVEYXRhVVJMIiwiZGF0YVVSTCIsInNwbGl0SW5kZXgiLCJpbmRleE9mIiwiYmFzZTY0IiwiYnl0ZVN0cmluZyIsImF0b2IiLCJ0eXBlIiwibWltZU1hdGNoIiwiZXhlYyIsIm1pbWUiLCJhYiIsIkFycmF5QnVmZmVyIiwiaWEiLCJVaW50OEFycmF5IiwiY2hhckNvZGVBdCIsIkJsb2IiLCJjcmVhdGVCbG9iRnJvbURhdGFVUkwiLCJibG9iIiwic2F2ZUJsb2IiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJ2aXNpYmlsaXR5IiwiZG93bmxvYWQiLCJocmVmIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYm9keSIsImFwcGVuZENoaWxkIiwib25jbGljayIsInNldFRpbWVvdXQiLCJyZXZva2VPYmplY3RVUkwiLCJwYXJlbnRFbGVtZW50IiwicmVtb3ZlQ2hpbGQiLCJyZW1vdmVBdHRyaWJ1dGUiLCJjbGljayIsImZpbGUiLCJ0b3RhbEZyYW1lcyIsImNoIiwibGF5ZXJTdHIiLCJ0b3RhbExheWVycyIsImxheWVyIiwiZmlsdGVyIiwiQm9vbGVhbiIsIm5hbWUiLCJ0aW1lU3RhbXAiLCJoYXNoIiwiY29tbW9uVHlwb3MiLCJkaW1lbnNpb24iLCJhbmltYXRlZCIsImFuaW1hdGluZyIsInVuaXQiLCJQNSIsInBpeGVsbGF0ZWQiLCJsb29waW5nIiwicGl4ZWxQZXJJbmNoIiwiYWxsS2V5cyIsImNoZWNrU2V0dGluZ3MiLCJzZXR0aW5ncyIsImNvbnNvbGUiLCJ3YXJuIiwiaW5jbHVkZXMiLCJwYXBlclNpemVzIiwicmVkdWNlIiwiZGljdCIsInByZXNldCIsIml0ZW0iLCJ1bml0cyIsImNvbnZlcnNpb25zIiwic3lzdGVtIiwiZmFjdG9yIiwiY20iLCJwdCIsInBjIiwiaW4iLCJmdCIsImFuY2hvcnMiLCJtZXRyaWMiLCJyYXRpbyIsImltcGVyaWFsIiwiY29udmVydExlbmd0aCIsImZyb21Vbml0IiwidG9Vbml0IiwicGl4ZWxzUGVySW5jaCIsImRlZmluZWQkMSIsInByZWNpc2lvbiIsInJvdW5kUGl4ZWwiLCJ0b0ZhY3RvciIsImZyb21GYWN0b3IiLCJpc1RvUGl4ZWwiLCJmcm9tVW5pdERhdGEiLCJ0b1VuaXREYXRhIiwiYW5jaG9yIiwiZGVjaW1hbHMiLCJjb252ZXJ0RGlzdGFuY2UkMSIsInVuaXRzRnJvbSIsInVuaXRzVG8iLCJyZXNpemVDYW52YXMiLCJwcm9wcyIsInN0eWxlV2lkdGgiLCJzdHlsZUhlaWdodCIsImNhbnZhc1dpZHRoIiwiY2FudmFzSGVpZ2h0IiwiaGFzRGltZW5zaW9ucyIsImNoZWNrSWZIYXNEaW1lbnNpb25zIiwiZXhwb3J0aW5nIiwic2NhbGVUb0ZpdCIsInNjYWxlVG9WaWV3IiwicGl4ZWxSYXRpbyIsImV4cG9ydFBpeGVsUmF0aW8iLCJibGVlZCIsImRldmljZVBpeGVsUmF0aW8iLCJiYXNlUGl4ZWxSYXRpbyIsIm1heFBpeGVsUmF0aW8iLCJ0cmltV2lkdGgiLCJ0cmltSGVpZ2h0IiwicmVmIiwiZWxlbWVudCIsInBhcmVudCIsImlubmVyV2lkdGgiLCJpbm5lckhlaWdodCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImdldFBhcmVudFNpemUiLCJwYXJlbnRXaWR0aCIsInBhcmVudEhlaWdodCIsImdldERpbWVuc2lvbnNGcm9tUHJlc2V0IiwiaGlnaGVzdCIsImxvd2VzdCIsIm9yaWVudGF0aW9uIiwibGFuZHNjYXBlIiwicmVhbFdpZHRoIiwicmVhbEhlaWdodCIsImFzcGVjdCIsIndpbmRvd0FzcGVjdCIsInNjYWxlVG9GaXRQYWRkaW5nIiwibWF4V2lkdGgiLCJtYXhIZWlnaHQiLCJnZXRDYW52YXNDb250ZXh0XzEiLCJjYW52YXMiLCJnbCIsImF0dHJpYnMiLCJuYW1lcyIsImdldENvbnRleHQiLCJjcmVhdGVDYW52YXMiLCJvd25zQ2FudmFzIiwibmV3Q2FudmFzIiwiY3JlYXRlQ2FudmFzRWxlbWVudCIsImF0dHJpYnV0ZXMiLCJwaXhlbGF0ZWQiLCJpbWFnZVNtb290aGluZ0VuYWJsZWQiLCJtb3pJbWFnZVNtb290aGluZ0VuYWJsZWQiLCJvSW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwid2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkIiwibXNJbWFnZVNtb290aGluZ0VuYWJsZWQiLCJTa2V0Y2hNYW5hZ2VyIiwiX3NldHRpbmdzIiwiX3Byb3BzIiwiX3NrZXRjaCIsIl9yYWYiLCJfcmVjb3JkVGltZW91dCIsIl9sYXN0UmVkcmF3UmVzdWx0IiwiX2lzUDVSZXNpemluZyIsIl9rZXlib2FyZFNob3J0Y3V0cyIsImhhbmRsZXIiLCJlbmFibGVkIiwia2V5Q29kZSIsImFsdEtleSIsIm1ldGFLZXkiLCJjdHJsS2V5IiwidG9nZ2xlUGxheSIsInByZXZlbnREZWZhdWx0IiwiY29tbWl0IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJrZXlib2FyZFNob3J0Y3V0cyIsInRoaXMkMSIsImhvdGtleXMiLCJzaGlmdEtleSIsInJlY29yZGluZyIsImVuZFJlY29yZCIsInJ1biIsInJlY29yZCIsImV4cG9ydEZyYW1lIiwicGxheWluZyIsInBhdXNlIiwicGxheSIsIl9hbmltYXRlSGFuZGxlciIsIl9yZXNpemVIYW5kbGVyIiwicmVzaXplIiwicmVuZGVyIiwic2tldGNoIiwiZ2V0IiwidGhpcyIsIl9jb21wdXRlUGxheWhlYWQiLCJjdXJyZW50VGltZSIsImR1cmF0aW9uIiwiX2NvbXB1dGVGcmFtZSIsInBsYXloZWFkIiwidGltZSIsImZwcyIsIl9jb21wdXRlQ3VycmVudEZyYW1lIiwiX2dldFNpemVQcm9wcyIsInZpZXdwb3J0V2lkdGgiLCJ2aWV3cG9ydEhlaWdodCIsImRpc3Bvc2UiLCJzdGFydGVkIiwiX3NpZ25hbEJlZ2luIiwidGljayIsIl9jYW5jZWxUaW1lb3V0cyIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiX2xhc3RUaW1lIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZXJyb3IiLCJzdG9wIiwiZGVsdGFUaW1lIiwiZXhwb3J0T3B0cyIsIl9jcmVhdGVFeHBvcnRPcHRpb25zIiwiZnJhbWVJbnRlcnZhbCIsIl9zaWduYWxFbmQiLCJiZWdpblJlY29yZCIsIl93cmFwQ29udGV4dFNjYWxlIiwiY2F0Y2giLCJyZXNwb25zZSIsImJlZ2luIiwiZW5kIiwid2FzUmVjb3JkaW5nIiwic2VxdWVuY2UiLCJlbmNvZGluZyIsImVuY29kaW5nUXVhbGl0eSIsImRhdGVmb3JtYXQiLCJhbGwiLCJwcmVFeHBvcnQiLCJjb21taXRPcHRzIiwiX2RvRXhwb3J0RnJhbWUiLCJkcmF3UmVzdWx0IiwiY29uY2F0IiwiaGFzRGF0YU9iamVjdCIsImRhdGEiLCJ0b0RhdGFVUkwiLCJleHBvcnRDYW52YXMiLCJsYXllckxpc3QiLCJjdXJPcHQiLCJzYXZlUGFyYW0iLCJzYXZlUHJvbWlzZSIsInBhcnRzIiwic2F2ZUZpbGUiLCJzYXZlUmVzdWx0Iiwic2F2ZWRFdmVudHMiLCJldmVudFdpdGhPdXRwdXQiLCJmaW5kIiwib3V0cHV0TmFtZSIsImlzQ2xpZW50Iiwic29tZSIsImlzU3RyZWFtaW5nIiwib2ZTZXEiLCJwb3N0RXhwb3J0IiwiY2IiLCJfcHJlUmVuZGVyIiwiX3Bvc3RSZW5kZXIiLCJwNSIsInNjYWxlWCIsInNjYWxlWSIsInNjYWxlQ29udGV4dCIsImZsdXNoIiwicmVkcmF3Iiwic3VibWl0RHJhd0NhbGwiLCJ1cGRhdGUiLCJub3RZZXRTdXBwb3J0ZWQiLCJvbGRDYW52YXMiLCJvbGRDb250ZXh0IiwidGltZU9wdHMiLCJ0aW1lUHJvcHMiLCJnZXRUaW1lUHJvcHMiLCJfc2V0dXBHTEtleSIsIl9hcHBlbmRDYW52YXNJZk5lZWRlZCIsImRyYXciLCJvbGRTaXplcyIsIm5ld1Byb3BzIiwicGl4ZWxEZW5zaXR5Iiwic3R5bGVDYW52YXMiLCJuZXdTaXplcyIsImNoYW5nZWQiLCJkZWVwRXF1YWxfMSIsIl9zaXplQ2hhbmdlZCIsImZyYW1lSW50ZXJ2YWxNUyIsImRlbHRhVGltZU1TIiwiaGFzRHVyYXRpb24iLCJpc05ld0ZyYW1lIiwicGxheWJhY2tSYXRlIiwibmV3VGltZSIsInRpbWVTY2FsZSIsImlzRmluaXNoZWQiLCJpc0xvb3BTdGFydCIsImxvb3AiLCJsYXN0RnJhbWUiLCJkaXNwYXRjaCIsIm1vdW50IiwidW5tb3VudCIsImRldGFjaCIsImN0eCIsImNsZWFyIiwiY2xlYXJDb2xvciIsImJ1ZmZlckRhdGEiLCJoYXNUb3RhbEZyYW1lcyIsInRvdGFsRnJhbWVzRnJvbUR1cmF0aW9uIiwiZHVyYXRpb25Gcm9tVG90YWxGcmFtZXMiLCJJbmZpbml0eSIsInN0YXJ0VGltZSIsInN0YXJ0RnJhbWUiLCJoYXNTdGFydFRpbWUiLCJoYXNTdGFydEZyYW1lIiwic2V0dXAiLCJsb2FkQW5kUnVuIiwibmV3U2V0dGluZ3MiLCJsb2FkIiwidW5sb2FkIiwiZGVzdHJveSIsImNyZWF0ZVNrZXRjaCIsInByZWxvYWQiLCJQNUNvbnN0cnVjdG9yIiwicDVTa2V0Y2giLCJpc0dMIiwicmVuZGVyZXIiLCJXRUJHTCIsIlAyRCIsIm5vTG9vcCIsInNldEF0dHJpYnV0ZXMiLCJfcmVuZGVyZXIiLCJkcmF3aW5nQ29udGV4dCIsImxvYWRlciIsImF0dGFjaCIsIm1lc3NhZ2UiLCJDQUNIRSIsInJ1bnRpbWVDb2xsaXNpb25zIiwiaG90SUQiLCJpc0hvdCIsImhvdCIsImlkIiwiaXNJbmplY3RpbmciLCJwcmV2aW91c0RhdGEiLCJjYWNoZUdldCIsIm5leHQiLCJvbGRNYW5hZ2VyIiwibWFuYWdlciIsImNhY2hlUHV0IiwiUGFwZXJTaXplcyIsInBvb2wiLCJHTE9CQUwiLCJzdGFydGRlbm9tIiwicG93Iiwic2lnbmlmaWNhbmNlIiwib3ZlcmZsb3ciLCJvbGRSYW5kb20iLCJBUkM0Iiwia2V5bGVuIiwibWUiLCJqIiwiZyIsImNvdW50IiwiZmxhdHRlbiIsImRlcHRoIiwicHJvcCIsInR5cCIsIm1peGtleSIsInNtZWFyIiwic3RyaW5nc2VlZCIsInRvc3RyaW5nIiwiYXV0b3NlZWQiLCJjcnlwdG8iLCJnZXRSYW5kb21WYWx1ZXMiLCJuYXZpZ2F0b3IiLCJwbHVnaW5zIiwic2NyZWVuIiwiYXBwbHkiLCJ1c2VfZW50cm9weSIsImVudHJvcHkiLCJhcmM0IiwicmVzZXRHbG9iYWwiLCJGMiIsIkcyIiwiRzMiLCJGNCIsIkc0IiwicmFuZG9tT3JTZWVkIiwiczAiLCJzMSIsInMyIiwibWFzaCIsIm1hc2hlciIsImFsZWEiLCJidWlsZFBlcm11dGF0aW9uVGFibGUiLCJwZXJtIiwicGVybU1vZDEyIiwiYXV4IiwiZ3JhZDMiLCJGbG9hdDMyQXJyYXkiLCJncmFkNCIsInhpbiIsInlpbiIsImkxIiwiajEiLCJuMCIsIm4xIiwibjIiLCJ4MCIsInkwIiwieDEiLCJ5MSIsIngyIiwieTIiLCJpaSIsImpqIiwidDAiLCJnaTAiLCJ0MSIsImdpMSIsInQyIiwiZ2kyIiwiemluIiwibjMiLCJrMSIsImkyIiwiajIiLCJrMiIsInowIiwiejEiLCJ6MiIsIngzIiwieTMiLCJ6MyIsImtrIiwidDMiLCJnaTMiLCJuNCIsImwxIiwibDIiLCJpMyIsImozIiwiazMiLCJsMyIsIncwIiwicmFua3giLCJyYW5reSIsInJhbmt6IiwicmFua3ciLCJ3MSIsIncyIiwidzMiLCJ4NCIsInk0IiwiejQiLCJ3NCIsImxsIiwidDQiLCJnaTQiLCJfYnVpbGRQZXJtdXRhdGlvblRhYmxlIiwiZGVmaW5lIiwiYW1kIiwiZmFjdG9yeSIsImdsb2JhbFRoaXMiLCJzZWxmIiwiQmxhZGVBcGkiLCJjb25zdHJ1Y3RvciIsImNvbnRyb2xsZXIiLCJjb250cm9sbGVyXyIsInZpZXciLCJkaXNhYmxlZCIsInZpZXdQcm9wcyIsImhpZGRlbiIsIlRwRXZlbnQiLCJUcENoYW5nZUV2ZW50IiwicHJlc2V0S2V5IiwibGFzdCIsInN1cGVyIiwiVHBVcGRhdGVFdmVudCIsIlRwRm9sZEV2ZW50IiwiZXhwYW5kZWQiLCJUcFRhYlNlbGVjdEV2ZW50IiwiaW5kZXgiLCJpc0VtcHR5IiwiZGVlcEVxdWFsc0FycmF5IiwiYTEiLCJhMiIsIkNSRUFURV9NRVNTQUdFX01BUCIsImFscmVhZHlkaXNwb3NlZCIsImludmFsaWRwYXJhbXMiLCJub21hdGNoaW5nY29udHJvbGxlciIsIm5vbWF0Y2hpbmd2aWV3IiwiSlNPTiIsInN0cmluZ2lmeSIsIm5vdGJpbmRhYmxlIiwicHJvcGVydHlub3Rmb3VuZCIsInNob3VsZG5ldmVyaGFwcGVuIiwiVHBFcnJvciIsImNvbmZpZyIsIl9hIiwic3RhY2siLCJzdGF0aWMiLCJCaW5kaW5nVGFyZ2V0Iiwib3B0X2lkIiwib2JqXyIsImtleV8iLCJwcmVzZXRLZXlfIiwicmVhZCIsIndyaXRlIiwid3JpdGVQcm9wZXJ0eSIsInZhbHVlT2JqIiwiaXNCaW5kYWJsZSIsIm5vdEJpbmRhYmxlIiwicHJvcGVydHlOb3RGb3VuZCIsIkJ1dHRvbkFwaSIsImxhYmVsIiwidmFsdWVDb250cm9sbGVyIiwib24iLCJldmVudE5hbWUiLCJiaCIsImJpbmQiLCJlbWl0dGVyIiwiRW1pdHRlciIsIm9ic2VydmVyc18iLCJvYnNlcnZlcnMiLCJvZmYiLCJvYnNlcnZlciIsImVtaXQiLCJldmVudCIsIlBSRUZJWCIsIkNsYXNzTmFtZSIsInZpZXdOYW1lIiwib3B0X2VsZW1lbnROYW1lIiwib3B0X21vZGlmaWVyIiwiZXh0cmFjdFZhbHVlIiwicmF3VmFsdWUiLCJiaW5kVmFsdWUiLCJhcHBseVZhbHVlIiwiaDEiLCJoMiIsImlucHV0IiwiYmluZFZhbHVlTWFwIiwidmFsdWVNYXAiLCJ2YWx1ZVRvQ2xhc3NOYW1lIiwiZWxlbSIsImNsYXNzTmFtZSIsImFjdGl2ZSIsImNsYXNzTGlzdCIsImFkZCIsInJlbW92ZSIsImFwcGx5Q2xhc3MiLCJiaW5kVmFsdWVUb1RleHRDb250ZW50IiwidGV4dCIsInRleHRDb250ZW50IiwiY2xhc3NOYW1lJHEiLCJCdXR0b25WaWV3IiwiZG9jIiwiYmluZENsYXNzTW9kaWZpZXJzIiwiYnV0dG9uRWxlbSIsImJpbmREaXNhYmxlZCIsImJ1dHRvbkVsZW1lbnQiLCJ0aXRsZUVsZW0iLCJCdXR0b25Db250cm9sbGVyIiwib25DbGlja18iLCJzZW5kZXIiLCJCb3VuZFZhbHVlIiwiY29uc3RyYWludF8iLCJjb25zdHJhaW50IiwiZXF1YWxzXyIsImVxdWFscyIsInJhd1ZhbHVlXyIsInNldFJhd1ZhbHVlIiwiZm9yY2VFbWl0IiwiY29uc3RyYWluZWRWYWx1ZSIsImNvbnN0cmFpbiIsIlByaW1pdGl2ZVZhbHVlIiwidmFsdWVfIiwiY3JlYXRlVmFsdWUiLCJWYWx1ZU1hcCIsInZhbE1hcF8iLCJjb3JlIiwiY3JlYXRlQ29yZSIsImNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIiLCJwYXJzZSIsIm9wdGlvbmFsIiwic3VjY2VlZGVkIiwiY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcnMiLCJjdXN0b20iLCJudW1iZXIiLCJzdHJpbmciLCJmdW5jdGlvbiIsImNvbnN0YW50IiwicmF3Iiwia2V5VG9QYXJzZXJNYXAiLCJwYXJzZXIiLCJwYXJzZU9iamVjdCIsIml0ZW1QYXJzZXIiLCJwYXJzZUl0ZW0iLCJQYXJhbXNQYXJzZXJzIiwicmVxdWlyZWQiLCJwYXJzZVBhcmFtcyIsImNsYXNzTmFtZSRwIiwiUE9TX1RPX0NMQVNTX05BTUVfTUFQIiwidmVyeWZpcnN0IiwiZmlyc3QiLCJ2ZXJ5bGFzdCIsIkJsYWRlQ29udHJvbGxlciIsInBhcmVudF8iLCJibGFkZSIsInBvcyIsImhhbmRsZURpc3Bvc2UiLCJkaXNwb3NlRWxlbWVudCIsIlNWR19OUyIsInN1cHBvcnRzVG91Y2giLCJvbnRvdWNoc3RhcnQiLCJnZXRXaW5kb3dEb2N1bWVudCIsIklDT05fSURfVE9fSU5ORVJfSFRNTF9NQVAiLCJjaGVjayIsImRyb3Bkb3duIiwicDJkcGFkIiwiY3JlYXRlU3ZnSWNvbkVsZW1lbnQiLCJpY29uSWQiLCJjcmVhdGVFbGVtZW50TlMiLCJpbm5lckhUTUwiLCJpbnNlcnRFbGVtZW50QXQiLCJpbnNlcnRCZWZvcmUiLCJjaGlsZHJlbiIsInJlbW92ZUVsZW1lbnQiLCJyZW1vdmVDaGlsZEVsZW1lbnRzIiwiZmluZE5leHRUYXJnZXQiLCJyZWxhdGVkVGFyZ2V0IiwiZXhwbGljaXRPcmlnaW5hbFRhcmdldCIsImNsYXNzTmFtZSRvIiwiTGFiZWxWaWV3IiwibGFiZWxFbGVtIiwiY2hpbGROb2RlcyIsInJlbW92ZUNoaWxkTm9kZXMiLCJmcmFnIiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImxpbmUiLCJjcmVhdGVUZXh0Tm9kZSIsImxpbmVOb2RlIiwiY3JlYXRlTGFiZWxOb2RlIiwibGFiZWxFbGVtZW50IiwidmFsdWVFbGVtIiwidmFsdWVFbGVtZW50IiwiTGFiZWxDb250cm9sbGVyIiwiQnV0dG9uQmxhZGVQbHVnaW4iLCJhY2NlcHQiLCJhcmdzIiwiZnJvbU9iamVjdCIsImFwaSIsIlZhbHVlQmxhZGVDb250cm9sbGVyIiwiY3JlYXRlQmxhZGUiLCJwb3NpdGlvbnMiLCJGb2xkYWJsZSIsImNvbXBsZXRlZCIsImV4cGFuZGVkSGVpZ2h0Iiwic2hvdWxkRml4SGVpZ2h0IiwidGVtcG9yYXJ5RXhwYW5kZWQiLCJzdHlsZUV4cGFuZGVkIiwiZXhIZWlnaHQiLCJiaW5kRXhwYW5kZWRDbGFzcyIsImV4cGFuZGVkQ2xhc3NOYW1lIiwib25FeHBhbmQiLCJjbGVhblVwVHJhbnNpdGlvbiIsImFwcGx5SGVpZ2h0IiwiZm9sZGFibGUiLCJiaW5kRm9sZGFibGUiLCJjb250YWluZXJFbGVtZW50IiwiY2FsbGJhY2siLCJ0cmFuc2l0aW9uIiwiZGlzYWJsZVRyYW5zaXRpb25UZW1wb3JhcmlseSIsImNsaWVudEhlaWdodCIsImNvbXB1dGVFeHBhbmRlZEZvbGRlckhlaWdodCIsInByb3BlcnR5TmFtZSIsIlJhY2tMaWtlQXBpIiwicmFja0FwaSIsInJhY2tBcGlfIiwiTmVzdGVkT3JkZXJlZFNldCIsImV4dHJhY3QiLCJpdGVtc18iLCJjYWNoZV8iLCJTZXQiLCJvblN1Ykxpc3RBZGRfIiwib25TdWJMaXN0UmVtb3ZlXyIsImV4dHJhY3RfIiwiaXRlbXMiLCJhbGxJdGVtcyIsImhhcyIsIm9wdF9pbmRleCIsInNob3VsZE5ldmVySGFwcGVuIiwic3BsaWNlIiwic3ViTGlzdCIsInJvb3QiLCJkZWxldGUiLCJJbnB1dEJpbmRpbmdBcGkiLCJvbkJpbmRpbmdDaGFuZ2VfIiwiZW1pdHRlcl8iLCJiaW5kaW5nIiwicmVmcmVzaCIsIklucHV0QmluZGluZ0NvbnRyb2xsZXIiLCJNb25pdG9yQmluZGluZ0FwaSIsIm9uQmluZGluZ1VwZGF0ZV8iLCJNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIiLCJ0aWNrZXIiLCJmaW5kU3ViQmxhZGVBcGlTZXQiLCJSYWNrQXBpIiwiZ2V0QXBpQnlDb250cm9sbGVyIiwiYXBpU2V0IiwiY3JlYXRlQmluZGluZ1RhcmdldCIsIm9uUmFja0FkZF8iLCJvblJhY2tSZW1vdmVfIiwib25SYWNrSW5wdXRDaGFuZ2VfIiwib25SYWNrTW9uaXRvclVwZGF0ZV8iLCJhcGlTZXRfIiwicG9vbF8iLCJyYWNrIiwiYmMiLCJzZXRVcEFwaV8iLCJvcHRfcGFyYW1zIiwiY3JlYXRlSW5wdXQiLCJvd25lckRvY3VtZW50IiwiYWRkTW9uaXRvciIsImNyZWF0ZU1vbml0b3IiLCJhZGRCbGFkZSIsImFkZEZvbGRlckFzQmxhZGUiLCJhZGRCdXR0b24iLCJhZGRCdXR0b25Bc0JsYWRlIiwiYWRkU2VwYXJhdG9yIiwiYWRkU2VwYXJhdG9yQXNCbGFkZSIsImFkZFRhYiIsImFkZFRhYkFzQmxhZGUiLCJnYXBpIiwiY3JlYXRlQmxhZGVBcGkiLCJibGFkZUNvbnRyb2xsZXIiLCJpc1Jvb3QiLCJGb2xkZXJBcGkiLCJyYWNrQ29udHJvbGxlciIsIlJhY2tMaWtlQ29udHJvbGxlciIsIlBsYWluVmlldyIsImZpbmRTdWJSYWNrIiwiUmFja0NvbnRyb2xsZXIiLCJmaW5kU3ViQmxhZGVDb250cm9sbGVyU2V0IiwiQmxhZGVSYWNrIiwib25CbGFkZVBvc2l0aW9uc0NoYW5nZV8iLCJvblNldEFkZF8iLCJvblNldFJlbW92ZV8iLCJvbkNoaWxkRGlzcG9zZV8iLCJvbkNoaWxkUG9zaXRpb25zQ2hhbmdlXyIsIm9uQ2hpbGRJbnB1dENoYW5nZV8iLCJvbkNoaWxkTW9uaXRvclVwZGF0ZV8iLCJvbkNoaWxkVmFsdWVDaGFuZ2VfIiwib25DaGlsZFZpZXdQcm9wc0NoYW5nZV8iLCJvbkRlc2NlbmRhbnRMYXlvdXRfIiwib25EZXNjZW5kYW50SW5wdXRDaGFuZ2VfIiwib25EZXNjZW5kYW50TW9uaXRvclVwZGF0ZV8iLCJibGFkZV8iLCJiY1NldF8iLCJjb250cm9sbGVyQ2xhc3MiLCJ1cGRhdGVQb3NpdGlvbnNfIiwidmlzaWJsZUl0ZW1zIiwiZmlyc3RWaXNpYmxlSXRlbSIsImxhc3RWaXNpYmxlSXRlbSIsInBzIiwiX2V2IiwiYmNzIiwiZmluZElucHV0QmluZGluZ0NvbnRyb2xsZXIiLCJhbHJlYWR5RGlzcG9zZWQiLCJmaW5kTW9uaXRvckJpbmRpbmdDb250cm9sbGVyIiwiZmluZFZhbHVlQmxhZGVDb250cm9sbGVyIiwiYmxhZGVDb250YWluZXJDbGFzc05hbWUiLCJGb2xkZXJWaWV3IiwiY2xhc3NOYW1lXyIsImZvbGRhYmxlXyIsInRpdGxlRWxlbWVudCIsIm1hcmtFbGVtIiwiY29udGFpbmVyRWxlbSIsIkZvbGRlckNvbnRyb2xsZXIiLCJjcmVhdGUiLCJyYyIsIm9uVGl0bGVDbGlja18iLCJGb2xkZXJCbGFkZVBsdWdpbiIsIkxhYmVsZWRWYWx1ZUNvbnRyb2xsZXIiLCJTZXBhcmF0b3JBcGkiLCJjbGFzc05hbWUkbiIsIlNlcGFyYXRvclZpZXciLCJockVsZW0iLCJTZXBhcmF0b3JDb250cm9sbGVyIiwiU2VwYXJhdG9yQmxhZGVQbHVnaW4iLCJjbGFzc05hbWUkbSIsInZhbHVlVG9Nb2RpZmllciIsIm1vZGlmaWVyIiwiVmlld1Byb3BzIiwib3B0X2luaXRpYWxWYWx1ZSIsIl9iIiwiY29yZU9iaiIsImRpc3Bvc2VkIiwiYmluZFRhYkluZGV4IiwidGFiSW5kZXgiLCJjbGFzc05hbWUkbCIsIlRhYkl0ZW1WaWV3Iiwic2VsZWN0ZWQiLCJUYWJJdGVtQ29udHJvbGxlciIsIlRhYlBhZ2VDb250cm9sbGVyIiwib25JdGVtQ2xpY2tfIiwiaWNfIiwiaXRlbVByb3BzIiwiY2NfIiwiaXRlbUNvbnRyb2xsZXIiLCJjb250ZW50Q29udHJvbGxlciIsIlRhYlBhZ2VBcGkiLCJjb250ZW50UmFja0FwaSIsIlRhYkFwaSIsIm9uUGFnZUFkZF8iLCJvblBhZ2VSZW1vdmVfIiwib25TZWxlY3RfIiwicGFnZUFwaU1hcF8iLCJNYXAiLCJ0YWIiLCJzZWxlY3RlZEluZGV4IiwicGFnZVNldCIsInNldFVwUGFnZUFwaV8iLCJwYWdlcyIsImFkZFBhZ2UiLCJyZW1vdmVQYWdlIiwiVGFiIiwib25JdGVtU2VsZWN0ZWRDaGFuZ2VfIiwiZW1wdHkiLCJrZWVwU2VsZWN0aW9uXyIsImZpcnN0U2VsSW5kZXgiLCJmaW5kSW5kZXgiLCJjbGFzc05hbWUkayIsIlRhYlZpZXciLCJpdGVtc0VsZW0iLCJpdGVtc0VsZW1lbnQiLCJjb250ZW50c0VsZW0iLCJjb250ZW50c0VsZW1lbnQiLCJUYWJDb250cm9sbGVyIiwiY3IiLCJwYWdlU2V0XyIsIlRhYkJsYWRlUGx1Z2luIiwiTWFudWFsVGlja2VyIiwiSW50ZXJ2YWxUaWNrZXIiLCJpbnRlcnZhbCIsImRpc2FibGVkXyIsInRpbWVySWRfIiwib25UaWNrXyIsImRvY18iLCJpbnRlcnZhbF8iLCJzZXRUaW1lcl8iLCJpbmFjdGl2ZSIsImNsZWFyVGltZXJfIiwid2luIiwiZGVmYXVsdFZpZXciLCJjbGVhckludGVydmFsIiwic2V0SW50ZXJ2YWwiLCJDb21wb3NpdGVDb25zdHJhaW50IiwiY29uc3RyYWludHMiLCJmaW5kQ29uc3RyYWludCIsImNvbnN0cmFpbnRDbGFzcyIsInRtcFJlc3VsdCIsInNjIiwiTGlzdENvbnN0cmFpbnQiLCJSYW5nZUNvbnN0cmFpbnQiLCJtYXhWYWx1ZSIsIm1pblZhbHVlIiwiU3RlcENvbnN0cmFpbnQiLCJvcmlnaW4iLCJjbGFzc05hbWUkaiIsIkxpc3RWaWV3Iiwib25WYWx1ZUNoYW5nZV8iLCJwcm9wc18iLCJzZWxlY3RFbGVtIiwib3B0aW9uRWxlbSIsImRhdGFzZXQiLCJzZWxlY3RFbGVtZW50IiwidXBkYXRlXyIsIkxpc3RDb250cm9sbGVyIiwib25TZWxlY3RDaGFuZ2VfIiwib3B0RWxlbSIsImN1cnJlbnRUYXJnZXQiLCJzZWxlY3RlZE9wdGlvbnMiLCJpdGVtSW5kZXgiLCJjbGFzc05hbWUkaSIsIlBvcHVwVmlldyIsInNob3dzIiwiUG9wdXBDb250cm9sbGVyIiwiY2xhc3NOYW1lJGgiLCJUZXh0VmlldyIsIm9uQ2hhbmdlXyIsImlucHV0RWxlbSIsImlucHV0RWxlbWVudCIsImZvcm1hdHRlciIsIlRleHRDb250cm9sbGVyIiwib25JbnB1dENoYW5nZV8iLCJwYXJzZXJfIiwicGFyc2VkVmFsdWUiLCJib29sRnJvbVVua25vd24iLCJCb29sZWFuRm9ybWF0dGVyIiwiYm9vbFRvU3RyaW5nIiwiTnVtYmVyTGl0ZXJhbE5vZGUiLCJldmFsdWF0ZSIsIkJJTkFSWV9PUEVSQVRJT05fTUFQIiwiQmluYXJ5T3BlcmF0aW9uTm9kZSIsIm9wZXJhdG9yIiwibGVmdCIsInJpZ2h0Iiwib3AiLCJVTkFSWV9PUEVSQVRJT05fTUFQIiwiVW5hcnlPcGVyYXRpb25Ob2RlIiwiZXhwciIsImV4cHJlc3Npb24iLCJjb21iaW5lUmVhZGVyIiwicGFyc2VycyIsImN1cnNvciIsInJlYWRXaGl0ZXNwYWNlIiwicmVhZERlY2ltYWxEaWdpdHMiLCJyZWFkRXhwb25lbnRQYXJ0Iiwic2kiLCJzZHMiLCJyZWFkU2lnbmVkSW50ZWdlciIsInJlYWREZWNpbWFsSW50ZWdlckxpdGVyYWwiLCJuemQiLCJyZWFkTm9uWmVyb0RpZ2l0IiwicmVhZERlY2ltYWxMaXRlcmFsIiwiZGlsIiwiZG90IiwiZGRzIiwicmVhZE5vbkRlY2ltYWxJbnRlZ2VyTGl0ZXJhbCIsImJkcyIsInBhcnNlQmluYXJ5RGlnaXRzIiwib2RzIiwicmVhZE9jdGFsRGlnaXRzIiwiaGRzIiwicmVhZEhleERpZ2l0cyIsInJlYWROdW1lcmljTGl0ZXJhbCIsInBhcnNlUHJpbWFyeUV4cHJlc3Npb24iLCJldmFsdWFibGUiLCJwYXJzZUxpdGVyYWwiLCJwYXJzZUV4cHJlc3Npb24iLCJjbCIsInBhcnNlUGFyZW50aGVzaXplZEV4cHJlc3Npb24iLCJyZWFkQmluYXJ5T3BlcmF0b3IiLCJvcHMiLCJzdGFydHNXaXRoIiwicGFyc2VCaW5hcnlPcGVyYXRpb25FeHByZXNzaW9uIiwiZXhwclBhcnNlciIsImZpcnN0RXhwciIsIm5leHRFeHByIiwiY3JlYXRlQmluYXJ5T3BlcmF0aW9uRXhwcmVzc2lvblBhcnNlciIsInBhcnNlVW5hcnlFeHByZXNzaW9uIiwicGFyc2VOdW1iZXIiLCJwYXJzZUVjbWFOdW1iZXJFeHByZXNzaW9uIiwibnVtYmVyRnJvbVVua25vd24iLCJwdiIsIm51bWJlclRvU3RyaW5nIiwiY3JlYXRlTnVtYmVyRm9ybWF0dGVyIiwiZGlnaXRzIiwidG9GaXhlZCIsImlubmVyRm9ybWF0dGVyIiwiZm9ybWF0UGVyY2VudGFnZSIsInN0cmluZ0Zyb21Vbmtub3duIiwiZm9ybWF0U3RyaW5nIiwiZmlsbEJ1ZmZlciIsImJ1ZmZlciIsImJ1ZmZlclNpemUiLCJpbml0aWFsaXplQnVmZmVyIiwiY3JlYXRlVHJpbW1lZEJ1ZmZlciIsImNvbm5lY3RWYWx1ZXMiLCJwcmltYXJ5Iiwic2Vjb25kYXJ5IiwiZm9yd2FyZCIsImJhY2t3YXJkIiwiY2hhbmdpbmciLCJwcmV2ZW50RmVlZGJhY2siLCJnZXRTdGVwRm9yS2V5IiwiYmFzZVN0ZXAiLCJ1cEtleSIsImRvd25LZXkiLCJnZXRWZXJ0aWNhbFN0ZXBLZXlzIiwiZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzIiwiaXNBcnJvd0tleSIsImlzVmVydGljYWxBcnJvd0tleSIsImNvbXB1dGVPZmZzZXQkMSIsInJlY3QiLCJwYWdlWCIsInNjcm9sbFgiLCJwYWdlWSIsInNjcm9sbFkiLCJ0b3AiLCJQb2ludGVySGFuZGxlciIsImxhc3RUb3VjaF8iLCJvbkRvY3VtZW50TW91c2VNb3ZlXyIsIm9uRG9jdW1lbnRNb3VzZVVwXyIsIm9uTW91c2VEb3duXyIsIm9uVG91Y2hFbmRfIiwib25Ub3VjaE1vdmVfIiwib25Ub3VjaFN0YXJ0XyIsImVsZW1fIiwicGFzc2l2ZSIsImNvbXB1dGVQb3NpdGlvbl8iLCJib3VuZHMiLCJwb2ludCIsImZvY3VzIiwidG91Y2giLCJ0YXJnZXRUb3VjaGVzIiwiY2xpZW50WCIsImNsaWVudFkiLCJzdGFydDEiLCJlbmQxIiwic3RhcnQyIiwiZW5kMiIsImdldERlY2ltYWxEaWdpdHMiLCJjb25zdHJhaW5SYW5nZSIsImxvb3BSYW5nZSIsImNsYXNzTmFtZSRnIiwiTnVtYmVyVGV4dFZpZXciLCJhcnJheVBvc2l0aW9uIiwib25EcmFnZ2luZ0NoYW5nZV8iLCJkcmFnZ2luZ18iLCJkcmFnZ2luZyIsImtub2JFbGVtIiwia25vYkVsZW1lbnQiLCJndWlkZUVsZW0iLCJib2R5RWxlbSIsImd1aWRlQm9keUVsZW1fIiwiaGVhZEVsZW0iLCJndWlkZUhlYWRFbGVtXyIsInRvb2x0aXBFbGVtIiwidG9vbHRpcEVsZW1fIiwiYW94IiwiYWR4Iiwic2V0QXR0cmlidXRlTlMiLCJOdW1iZXJUZXh0Q29udHJvbGxlciIsIm9yaWdpblJhd1ZhbHVlXyIsIm9uSW5wdXRLZXlEb3duXyIsIm9uSW5wdXRLZXlVcF8iLCJvblBvaW50ZXJEb3duXyIsIm9uUG9pbnRlck1vdmVfIiwib25Qb2ludGVyVXBfIiwiYmFzZVN0ZXBfIiwic2xpZGVyUHJvcHNfIiwic2xpZGVyUHJvcHMiLCJwaCIsImNvbnN0cmFpblZhbHVlXyIsImNvbXB1dGVEcmFnZ2luZ1ZhbHVlXyIsImNsYXNzTmFtZSRmIiwiU2xpZGVyVmlldyIsInRyYWNrRWxlbSIsInRyYWNrRWxlbWVudCIsIlNsaWRlckNvbnRyb2xsZXIiLCJvbktleURvd25fIiwib25LZXlVcF8iLCJvblBvaW50ZXJEb3duT3JNb3ZlXyIsInB0SGFuZGxlcl8iLCJoYW5kbGVQb2ludGVyRXZlbnRfIiwiY2xhc3NOYW1lJGUiLCJTbGlkZXJUZXh0VmlldyIsInNsaWRlckVsZW0iLCJzbGlkZXJWaWV3XyIsInNsaWRlclZpZXciLCJ0ZXh0RWxlbSIsInRleHRWaWV3XyIsInRleHRWaWV3IiwiU2xpZGVyVGV4dENvbnRyb2xsZXIiLCJzbGlkZXJDXyIsInRleHRDXyIsInRleHRQcm9wcyIsInNsaWRlckNvbnRyb2xsZXIiLCJ0ZXh0Q29udHJvbGxlciIsIndyaXRlUHJpbWl0aXZlIiwicGFyc2VMaXN0T3B0aW9ucyIsInBhcnNlUGlja2VyTGF5b3V0IiwicGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyIsIm5vcm1hbGl6ZUxpc3RPcHRpb25zIiwiY3JlYXRlTGlzdENvbnN0cmFpbnQiLCJmaW5kTGlzdEl0ZW1zIiwiZ2V0U3VpdGFibGVEZWNpbWFsRGlnaXRzIiwiZ2V0QmFzZVN0ZXAiLCJmaW5kU3RlcCIsImdldFN1aXRhYmxlRHJhZ2dpbmdTY2FsZSIsImJhc2UiLCJsb2cxMCIsImNsYXNzTmFtZSRkIiwiQ2hlY2tib3hWaWV3Iiwid3JhcHBlckVsZW0iLCJjaGVja2VkIiwiQ2hlY2tib3hDb250cm9sbGVyIiwiQm9vbGVhbklucHV0UGx1Z2luIiwicmVhZGVyIiwiX2FyZ3MiLCJsYyIsImNyZWF0ZUNvbnN0cmFpbnQkNiIsIndyaXRlciIsImNsYXNzTmFtZSRjIiwiQ29sb3JWaWV3Iiwic3dhdGNoRWxlbSIsInN3YXRjaEVsZW1lbnQiLCJ0ZXh0RWxlbWVudCIsInBpY2tlckxheW91dCIsInBpY2tlckVsZW0iLCJwaWNrZXJFbGVtZW50IiwiaHN2VG9SZ2JJbnQiLCJocCIsInNwIiwidnAiLCJycCIsImdwIiwiYnAiLCJyZW1vdmVBbHBoYUNvbXBvbmVudCIsImNvbXBzIiwiYXBwZW5kQWxwaGFDb21wb25lbnQiLCJhbHBoYSIsIk1PREVfQ09OVkVSVEVSX01BUCIsImhzbCIsImhzdiIsInNkIiwicmdiIiwibHAiLCJjbWF4IiwiY21pbiIsImdldENvbG9yTWF4Q29tcG9uZW50cyIsIm1vZGUiLCJjb252ZXJ0Q29sb3JUeXBlIiwiZm1zIiwidG1zIiwiaXNSZ2JDb2xvckNvbXBvbmVudCIsIkNvbG9yIiwiY29tcHNfIiwiY29tcG9uZW50cyIsIm1zIiwiY29uc3RyYWluQ29sb3JDb21wb25lbnRzIiwiY29sb3IiLCJ0b1JnYmFPYmplY3QiLCJpc1JnYkNvbG9yT2JqZWN0IiwiY29tcHMxIiwiY29tcHMyIiwiZ2V0Q29tcG9uZW50cyIsIm9wdF9tb2RlIiwiaW50Q29tcHMiLCJjb252ZXJ0Q29sb3IiLCJyZ2JDb21wcyIsImNsYXNzTmFtZSRiIiwiQ29sb3JQaWNrZXJWaWV3IiwiYWxwaGFWaWV3c18iLCJoc3ZFbGVtIiwic3ZFbGVtIiwic3ZQYWxldHRlVmlld18iLCJzdlBhbGV0dGVWaWV3IiwiaEVsZW0iLCJoUGFsZXR0ZVZpZXdfIiwiaFBhbGV0dGVWaWV3IiwicmdiRWxlbSIsImFscGhhVmlld3MiLCJwYWxldHRlIiwiYUVsZW0iLCJhcEVsZW0iLCJhdEVsZW0iLCJhbGxGb2N1c2FibGVFbGVtZW50cyIsImVsZW1zIiwibW9kZVNlbGVjdEVsZW1lbnQiLCJ0ZXh0Vmlld3MiLCJwYXJzZUNvbG9yVHlwZSIsInBhcnNlQ29sb3JJbnB1dFBhcmFtcyIsInBpY2tlciIsImdldEJhc2VTdGVwRm9yQ29sb3IiLCJmb3JBbHBoYSIsImV4dHJhY3RDb2xvclR5cGUiLCJwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZSIsInBhcnNlRmxvYXQiLCJBTkdMRV9UT19ERUdfTUFQIiwiZGVnIiwiZ3JhZCIsInJhZCIsInR1cm4iLCJwYXJzZUNzc051bWJlck9yQW5nbGUiLCJwYXJzZUZ1bmN0aW9uYWxSZ2JDb2xvckNvbXBvbmVudHMiLCJjcmVhdGVGdW5jdGlvbmFsUmdiQ29sb3JQYXJzZXIiLCJwYXJzZUZ1bmN0aW9uYWxSZ2JhQ29sb3JDb21wb25lbnRzIiwiY3JlYXRlRnVuY3Rpb25hbFJnYmFDb2xvclBhcnNlciIsInBhcnNlSHNsQ29sb3JDb21wb25lbnRzIiwiY3JlYXRlSHNsQ29sb3JQYXJzZXIiLCJwYXJzZUhzbGFDb2xvckNvbXBvbmVudHMiLCJjcmVhdGVIc2xhQ29sb3JQYXJzZXIiLCJwYXJzZUhleFJnYkNvbG9yQ29tcG9uZW50cyIsIm1SZ2IiLCJwYXJzZUludCIsIm1ScmdnYmIiLCJwYXJzZUhleFJnYmFDb2xvckNvbXBvbmVudHMiLCJwYXJzZU9iamVjdFJnYkNvbG9yQ29tcG9uZW50cyIsImNyZWF0ZU9iamVjdFJnYkNvbG9yUGFyc2VyIiwicGFyc2VPYmplY3RSZ2JhQ29sb3JDb21wb25lbnRzIiwiY3JlYXRlT2JqZWN0UmdiYUNvbG9yUGFyc2VyIiwiUEFSU0VSX0FORF9SRVNVTFQiLCJub3RhdGlvbiIsImRldGVjdFN0cmluZ0NvbG9yRm9ybWF0IiwicHJldiIsImRldGVjdGlvbiIsImRldGVjdFN0cmluZ0NvbG9yIiwiVFlQRV9UT19QQVJTRVJTIiwiaW50IiwiZmxvYXQiLCJjcmVhdGVDb2xvclN0cmluZ1BhcnNlciIsInplcm9maWxsIiwiY29tcCIsImhleCIsImNvbG9yVG9IZXhSZ2JTdHJpbmciLCJjb2xvclRvSGV4UmdiYVN0cmluZyIsInJnYmFDb21wcyIsImNvbG9yVG9GdW5jdGlvbmFsUmdiU3RyaW5nIiwib3B0X3R5cGUiLCJjcmVhdGVGdW5jdGlvbmFsUmdiQ29sb3JGb3JtYXR0ZXIiLCJjb2xvclRvRnVuY3Rpb25hbFJnYmFTdHJpbmciLCJhRm9ybWF0dGVyIiwicmdiRm9ybWF0dGVyIiwiY3JlYXRlRnVuY3Rpb25hbFJnYmFDb2xvckZvcm1hdHRlciIsImNvbG9yVG9PYmplY3RSZ2JTdHJpbmciLCJjcmVhdGVPYmplY3RSZ2JDb2xvckZvcm1hdHRlciIsImNvbG9yVG9PYmplY3RSZ2JhU3RyaW5nIiwiY3JlYXRlT2JqZWN0UmdiYUNvbG9yRm9ybWF0dGVyIiwiRk9STUFUX0FORF9TVFJJTkdJRklFUlMiLCJmb3JtYXQiLCJzdHJpbmdpZmllciIsImZvcm1hdHRlcnMiLCJmaW5kQ29sb3JTdHJpbmdpZmllciIsImZhcyIsImYxIiwiZjIiLCJjbGFzc05hbWUkYSIsIkFQYWxldHRlVmlldyIsImJhckVsZW0iLCJjb2xvckVsZW0iLCJjb2xvckVsZW1fIiwibWFya2VyRWxlbSIsIm1hcmtlckVsZW1fIiwicHJldmlld0VsZW0iLCJwcmV2aWV3RWxlbV8iLCJsZWZ0Q29sb3IiLCJyaWdodENvbG9yIiwiZ3JhZGllbnRDb21wcyIsImJhY2tncm91bmQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJBUGFsZXR0ZUNvbnRyb2xsZXIiLCJjbGFzc05hbWUkOSIsIkNvbG9yVGV4dFZpZXciLCJtb2RlRWxlbSIsIm1vZGVFbGVtXyIsImNyZWF0ZU1vZGVTZWxlY3RFbGVtZW50IiwibW9kZU1hcmtlckVsZW0iLCJ0ZXh0c0VsZW0iLCJ0ZXh0c0VsZW1fIiwidGV4dFZpZXdzXyIsImFwcGx5VGV4dFZpZXdzXyIsImNvbG9yTW9kZSIsImNvbXBFbGVtIiwiY3JlYXRlQ29uc3RyYWludCQ1IiwiY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlciIsImRyYWdnaW5nU2NhbGUiLCJjb2xvclR5cGUiLCJDb2xvclRleHRDb250cm9sbGVyIiwib25Nb2RlU2VsZWN0Q2hhbmdlXyIsImNvbG9yVHlwZV8iLCJjY3NfIiwiY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcnNfIiwiY2MiLCJjY3MiLCJjcyIsInBpY2tlZE1vZGUiLCJjbGFzc05hbWUkOCIsIkhQYWxldHRlVmlldyIsIkhQYWxldHRlQ29udHJvbGxlciIsImh1ZSIsImNsYXNzTmFtZSQ3IiwiU3ZQYWxldHRlVmlldyIsImNhbnZhc0VsZW0iLCJjYW52YXNFbGVtZW50Iiwid2lsbFJlYWRGcmVxdWVudGx5IiwiZ2V0Q2FudmFzQ29udGV4dCIsImhzdkNvbXBzIiwiaW1nRGF0YSIsImdldEltYWdlRGF0YSIsIml5IiwiaXgiLCJwdXRJbWFnZURhdGEiLCJTdlBhbGV0dGVDb250cm9sbGVyIiwic2F0dXJhdGlvbiIsImR2IiwiQ29sb3JQaWNrZXJDb250cm9sbGVyIiwiaFBhbGV0dGVDXyIsInN2UGFsZXR0ZUNfIiwiYWxwaGFJY3NfIiwic3VwcG9ydHNBbHBoYSIsImNsYXNzTmFtZSQ2IiwiQ29sb3JTd2F0Y2hWaWV3Iiwic3dhdGNoRWxlbV8iLCJDb2xvclN3YXRjaENvbnRyb2xsZXIiLCJDb2xvckNvbnRyb2xsZXIiLCJvbkJ1dHRvbkJsdXJfIiwib25CdXR0b25DbGlja18iLCJvblBvcHVwQ2hpbGRCbHVyXyIsIm9uUG9wdXBDaGlsZEtleWRvd25fIiwic3dhdGNoQ18iLCJwb3BDXyIsInBpY2tlckMiLCJwaWNrZXJDXyIsIm5leHRUYXJnZXQiLCJjb250YWlucyIsImNvbG9yVG9SZ2JOdW1iZXIiLCJjb2xvclRvUmdiYU51bWJlciIsImNvbG9yRnJvbVJnYk51bWJlciIsImJsYWNrIiwiY29sb3JGcm9tUmdiYU51bWJlciIsInNob3VsZFN1cHBvcnRBbHBoYSQxIiwiaW5wdXRQYXJhbXMiLCJjcmVhdGVGb3JtYXR0ZXIkMSIsIk51bWJlckNvbG9ySW5wdXRQbHVnaW4iLCJpc0ZvckNvbG9yIiwiY29sb3JUb051bWJlciIsImNyZWF0ZUNvbG9yTnVtYmVyV3JpdGVyIiwiY3JlYXRlQ29sb3JPYmplY3RSZWFkZXIiLCJpc0NvbG9yT2JqZWN0IiwiY29sb3JGcm9tT2JqZWN0IiwiY3JlYXRlQ29sb3JPYmplY3RGb3JtYXR0ZXIiLCJPYmplY3RDb2xvcklucHV0UGx1Z2luIiwiY3JlYXRlQ29sb3JPYmplY3RXcml0ZXIiLCJpc1JnYmFDb2xvck9iamVjdCIsImluVmFsdWUiLCJ3cml0ZVJnYmFDb2xvck9iamVjdCIsIndyaXRlUmdiQ29sb3JPYmplY3QiLCJTdHJpbmdDb2xvcklucHV0UGx1Z2luIiwiY3JlYXRlQ29sb3JTdHJpbmdCaW5kaW5nUmVhZGVyIiwiY3JlYXRlQ29sb3JTdHJpbmdXcml0ZXIiLCJQb2ludE5kQ29uc3RyYWludCIsImFzbV8iLCJhc3NlbWJseSIsInRvQ29tcG9uZW50cyIsImZyb21Db21wb25lbnRzIiwiY2xhc3NOYW1lJDUiLCJQb2ludE5kVGV4dFZpZXciLCJheGlzRWxlbSIsIlBvaW50TmRUZXh0Q29udHJvbGxlciIsImFjc18iLCJheGVzIiwiY3JlYXRlQXhpc0NvbnRyb2xsZXIiLCJhYyIsImNyZWF0ZVN0ZXBDb25zdHJhaW50IiwiY3JlYXRlUmFuZ2VDb25zdHJhaW50IiwiZXN0aW1hdGVTdWl0YWJsZVJhbmdlIiwiZmluZFJhbmdlIiwiTnVtYmVySW5wdXRQbHVnaW4iLCJjcmVhdGVDb25zdHJhaW50JDQiLCJQb2ludDJkIiwiUG9pbnQyZEFzc2VtYmx5IiwiY2xhc3NOYW1lJDQiLCJQb2ludDJkVmlldyIsImNsYXNzTmFtZSQzIiwiUG9pbnQyZFBpY2tlclZpZXciLCJvbkZvbGRhYmxlQ2hhbmdlXyIsImludmVydHNZXyIsImludmVydHNZIiwibWF4VmFsdWVfIiwibGF5b3V0IiwicGFkRWxlbSIsInBhZEVsZW1lbnQiLCJzdmdFbGVtIiwic3ZnRWxlbV8iLCJ4QXhpc0VsZW0iLCJ5QXhpc0VsZW0iLCJsaW5lRWxlbSIsImxpbmVFbGVtXyIsInB4IiwicHkiLCJpcHkiLCJjb21wdXRlT2Zmc2V0IiwiYmFzZVN0ZXBzIiwiUG9pbnQyZFBpY2tlckNvbnRyb2xsZXIiLCJvblBhZEtleURvd25fIiwib25QYWRLZXlVcF8iLCJiYXNlU3RlcHNfIiwiZHgiLCJkeSIsIlBvaW50MmRDb250cm9sbGVyIiwib25QYWRCdXR0b25CbHVyXyIsIm9uUGFkQnV0dG9uQ2xpY2tfIiwicGFkQyIsInBvaW50MmRGcm9tVW5rbm93biIsImlzT2JqZWN0Iiwid3JpdGVQb2ludDJkIiwiY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCIsInJzIiwiZ2V0U3VpdGFibGVNYXhEaW1lbnNpb25WYWx1ZSIsImdldFN1aXRhYmxlTWF4VmFsdWUiLCJ5YyIsInhyIiwieXIiLCJjcmVhdGVBeGlzJDIiLCJzaG91bGRJbnZlcnRZIiwieVBhcmFtcyIsImludmVydGVkIiwiUG9pbnQyZElucHV0UGx1Z2luIiwiY3JlYXRlQ29uc3RyYWludCQzIiwiUG9pbnQzZCIsIlBvaW50M2RBc3NlbWJseSIsInBvaW50M2RGcm9tVW5rbm93biIsIndyaXRlUG9pbnQzZCIsImNyZWF0ZUF4aXMkMSIsIlBvaW50M2RJbnB1dFBsdWdpbiIsImNyZWF0ZUNvbnN0cmFpbnQkMiIsIlBvaW50NGQiLCJQb2ludDRkQXNzZW1ibHkiLCJwb2ludDRkRnJvbVVua25vd24iLCJ3cml0ZVBvaW50NGQiLCJQb2ludDRkSW5wdXRQbHVnaW4iLCJjcmVhdGVDb25zdHJhaW50JDEiLCJjcmVhdGVBeGlzIiwiU3RyaW5nSW5wdXRQbHVnaW4iLCJjcmVhdGVDb25zdHJhaW50IiwiQ29uc3RhbnRzIiwiZGVmYXVsdEludGVydmFsIiwiZGVmYXVsdExpbmVDb3VudCIsImNsYXNzTmFtZSQyIiwiTXVsdGlMb2dWaWV3Iiwib25WYWx1ZVVwZGF0ZV8iLCJmb3JtYXR0ZXJfIiwidGV4dGFyZWFFbGVtIiwibGluZUNvdW50IiwicmVhZE9ubHkiLCJ0ZXh0YXJlYUVsZW1fIiwic2hvdWxkU2Nyb2xsIiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwibGluZXMiLCJNdWx0aUxvZ0NvbnRyb2xsZXIiLCJjbGFzc05hbWUkMSIsIlNpbmdsZUxvZ1ZpZXciLCJsYXN0VmFsdWUiLCJTaW5nbGVMb2dDb250cm9sbGVyIiwiQm9vbGVhbk1vbml0b3JQbHVnaW4iLCJHcmFwaExvZ1ZpZXciLCJvbkN1cnNvckNoYW5nZV8iLCJjdXJzb3JfIiwiZ3JhcGhFbGVtZW50IiwibWF4SW5kZXgiLCJwb2ludHMiLCJ0eCIsInR5IiwiR3JhcGhMb2dDb250cm9sbGVyIiwib25HcmFwaE1vdXNlTW92ZV8iLCJvbkdyYXBoTW91c2VMZWF2ZV8iLCJvbkdyYXBoUG9pbnRlckRvd25fIiwib25HcmFwaFBvaW50ZXJNb3ZlXyIsIm9uR3JhcGhQb2ludGVyVXBfIiwib2Zmc2V0WCIsImNyZWF0ZUZvcm1hdHRlciIsInNob3VsZFNob3dHcmFwaCIsIk51bWJlck1vbml0b3JQbHVnaW4iLCJkZWZhdWx0QnVmZmVyU2l6ZSIsIl9jIiwiY3JlYXRlR3JhcGhNb25pdG9yIiwiY3JlYXRlVGV4dE1vbml0b3IiLCJTdHJpbmdNb25pdG9yUGx1Z2luIiwibXVsdGlsaW5lIiwiSW5wdXRCaW5kaW5nIiwidGFyZ2V0VmFsdWUiLCJ3cml0ZV8iLCJNb25pdG9yQmluZGluZyIsInJlYWRlcl8iLCJuZXdWYWx1ZSIsIm5ld0J1ZmZlciIsImNyZWF0ZVB1c2hlZEJ1ZmZlciIsImNyZWF0ZVRpY2tlciIsIlBsdWdpblBvb2wiLCJwbHVnaW5zTWFwXyIsImJsYWRlcyIsImlucHV0cyIsIm1vbml0b3JzIiwiZ2V0QWxsIiwicmVnaXN0ZXIiLCJ1bnNoaWZ0IiwicGx1Z2luIiwidmFsdWVBcmdzIiwiY3JlYXRlSW5wdXRCaW5kaW5nQ29udHJvbGxlciIsIlAiLCJjcmVhdGVNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIiLCJjcmVhdGVCbGFkZUNvbnRyb2xsZXIiLCJMaXN0QXBpIiwiU2xpZGVyQXBpIiwiVGV4dEFwaSIsIkxpc3RCbGFkZVBsdWdpbiIsImljIiwiUm9vdEFwaSIsImltcG9ydFByZXNldCIsInRhcmdldHMiLCJpbXBvcnRQcmVzZXRKc29uIiwiaWJjIiwiZXhwb3J0UHJlc2V0IiwiZXhwb3J0UHJlc2V0SnNvbiIsIm1iYyIsIlJvb3RDb250cm9sbGVyIiwiU2xpZGVyQmxhZGVQbHVnaW4iLCJ2YyIsIlRleHRCbGFkZVBsdWdpbiIsImVtYmVkU3R5bGUiLCJjc3MiLCJxdWVyeVNlbGVjdG9yIiwic3R5bGVFbGVtIiwidHBTdHlsZSIsImhlYWQiLCJWRVJTSU9OIiwicHJlcmVsZWFzZSIsImNvcmVDb21wcyIsIm1ham9yIiwibWlub3IiLCJwYXRjaCIsIm9wdF9jb25maWciLCJjcmVhdGVEZWZhdWx0UGx1Z2luUG9vbCIsImNvbnRhaW5lckVsZW1fIiwiY29udGFpbmVyIiwiY3JlYXRlRGVmYXVsdFdyYXBwZXJFbGVtZW50IiwidXNlc0RlZmF1bHRXcmFwcGVyXyIsInNldFVwRGVmYXVsdFBsdWdpbnNfIiwicGFyZW50RWxlbSIsInJlZ2lzdGVyUGx1Z2luIiwiYnVuZGxlIiwiZW1iZWRQbHVnaW5TdHlsZV8iLCJkZWZpbmVQcm9wZXJ0eSIsIkNBTlZBU19TS0VUQ0hfREVGQVVMVF9TVE9SQUdFX0tFWSIsImxvY2F0aW9uIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdXNyL2xvY2FsL2xpYi9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC1jbGkvbm9kZV9tb2R1bGVzL2Jyb3dzZXItcGFjay9fcHJlbHVkZS5qcyIsIm1haW4uanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL2xpYi93cmFwLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9tYXRoLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtdXRpbC9yYW5kb20uanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9vYmplY3QtYXNzaWduL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvcmlnaHQtbm93L2Jyb3dzZXIuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9pcy1wcm9taXNlL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvaXMtZG9tL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvdXRpbC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL3JlcGVhdC1zdHJpbmcvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9kZWVwLWVxdWFsL2xpYi9rZXlzLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZGVlcC1lcXVhbC9saWIvaXNfYXJndW1lbnRzLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZGVlcC1lcXVhbC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RhdGVmb3JtYXQvbGliL2RhdGVmb3JtYXQuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9wYWQtbGVmdC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL3NhdmUuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9hY2Nlc3NpYmlsaXR5LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvcGFwZXItc2l6ZXMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9jb252ZXJ0LWxlbmd0aC9jb252ZXJ0LWxlbmd0aC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RlZmluZWQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9kaXN0YW5jZXMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jb3JlL3Jlc2l6ZUNhbnZhcy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2dldC1jYW52YXMtY29udGV4dC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2NvcmUvY3JlYXRlQ2FudmFzLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvY29yZS9Ta2V0Y2hNYW5hZ2VyLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvY29yZS9rZXlib2FyZFNob3J0Y3V0cy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2NhbnZhcy1za2V0Y2guanMiLCJub2RlX21vZHVsZXMvZGVmaW5lZC9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zZWVkLXJhbmRvbS9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9zaW1wbGV4LW5vaXNlL3NpbXBsZXgtbm9pc2UuanMiLCJub2RlX21vZHVsZXMvdHdlYWtwYW5lL2Rpc3QvdHdlYWtwYW5lLmpzIiwiY2FudmFzLXNrZXRjaC1jbGkvaW5qZWN0ZWQvc3RvcmFnZS1rZXkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcihlLG4sdCl7ZnVuY3Rpb24gbyhpLGYpe2lmKCFuW2ldKXtpZighZVtpXSl7dmFyIGM9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZTtpZighZiYmYylyZXR1cm4gYyhpLCEwKTtpZih1KXJldHVybiB1KGksITApO3ZhciBhPW5ldyBFcnJvcihcIkNhbm5vdCBmaW5kIG1vZHVsZSAnXCIraStcIidcIik7dGhyb3cgYS5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLGF9dmFyIHA9bltpXT17ZXhwb3J0czp7fX07ZVtpXVswXS5jYWxsKHAuZXhwb3J0cyxmdW5jdGlvbihyKXt2YXIgbj1lW2ldWzFdW3JdO3JldHVybiBvKG58fHIpfSxwLHAuZXhwb3J0cyxyLGUsbix0KX1yZXR1cm4gbltpXS5leHBvcnRzfWZvcih2YXIgdT1cImZ1bmN0aW9uXCI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGk9MDtpPHQubGVuZ3RoO2krKylvKHRbaV0pO3JldHVybiBvfXJldHVybiByfSkoKSIsImNvbnN0IGNhbnZhc1NrZXRjaCA9IHJlcXVpcmUoJ2NhbnZhcy1za2V0Y2gnKTtcbmNvbnN0IHJhbmRvbSA9IHJlcXVpcmUoJ2NhbnZhcy1za2V0Y2gtdXRpbC9yYW5kb20nKTtcbmNvbnN0IG1hdGggPSByZXF1aXJlKCdjYW52YXMtc2tldGNoLXV0aWwvbWF0aCcpO1xuY29uc3QgVHdlYWtwYW5lID0gcmVxdWlyZSgndHdlYWtwYW5lJyk7XG5cbmNvbnN0IHBhcmFtcyA9IHtcbiAgY29sczogNTAsXG4gIHJvd3M6IDMwLFxuICBzY2FsZU1pbjogMSxcbiAgc2NhbGVNYXg6IDMwLFxuICBmcmVxOiAwLjAwMSxcbiAgYW1wOiAwLjIsXG4gIGZyYW1lOiAwLFxuICBhbmltYXRlOiB0cnVlLFxuICBsaW5lQ2FwOiAnYnV0dCcsXG59O1xuXG5jb25zdCBzZXR0aW5ncyA9IHtcbiAgZGltZW5zaW9uczogWyA0MDAwLCAxMDAwIF0sXG4gIGFuaW1hdGU6IHRydWVcbn07XG5cbmNvbnN0IHNrZXRjaCA9ICgpID0+IHtcbiAgcmV0dXJuICh7IGNvbnRleHQsIHdpZHRoLCBoZWlnaHQsIGZyYW1lIH0pID0+IHtcbiAgICBjb250ZXh0LmZpbGxTdHlsZSA9ICd3aGl0ZSc7XG4gICAgY29udGV4dC5maWxsUmVjdCgwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICAgIGNvbnN0IGNvbHMgPSBwYXJhbXMuY29scztcbiAgICBjb25zdCByb3dzID0gcGFyYW1zLnJvd3M7XG4gICAgY29uc3QgbnVtQ2VsbHMgPSBjb2xzICogcm93cztcblxuICAgIGNvbnN0IGdyaWR3ID0gd2lkdGggKiAwLjg7XG4gICAgY29uc3QgZ3JpZGggPSBoZWlnaHQgKiAwLjg7XG4gICAgY29uc3QgY2VsbHcgPSBncmlkdyAvIGNvbHM7XG4gICAgY29uc3QgY2VsbGggPSBncmlkaCAvIHJvd3M7XG4gICAgY29uc3QgbWFyZ3ggPSAod2lkdGggLSBncmlkdykgKiAwLjU7XG4gICAgY29uc3QgbWFyZ3kgPSAoaGVpZ2h0IC0gZ3JpZGgpICogMC41O1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1DZWxsczsgaSsrKSB7XG4gICAgICBjb25zdCBjb2wgPSBpICUgY29scztcbiAgICAgIGNvbnN0IHJvdyA9IE1hdGguZmxvb3IoaSAvIGNvbHMpO1xuXG4gICAgICBjb25zdCB4ID0gY29sICogY2VsbHc7XG4gICAgICBjb25zdCB5ID0gcm93ICogY2VsbGg7XG4gICAgICBjb25zdCB3ID0gY2VsbHcgKiAwLjg7XG4gICAgICBjb25zdCBoID0gY2VsbGggKiAwLjg7XG5cbiAgICAgIGNvbnN0IGYgPSBwYXJhbXMuYW5pbWF0ZSA/IGZyYW1lIDogcGFyYW1zLmZyYW1lO1xuXG4gICAgICAvLyBjb25zdCBuID0gcmFuZG9tLm5vaXNlMkQoeCArIGZyYW1lICogMTAsIHksIHBhcmFtcy5mcmVxKTtcbiAgICAgIGNvbnN0IG4gPSByYW5kb20ubm9pc2UzRCh4LCB5LCBmICogMTAsIHBhcmFtcy5mcmVxKTtcbiAgICAgIGNvbnN0IGFuZ2xlID0gbiAqIE1hdGguUEkgKiBwYXJhbXMuYW1wO1xuICAgICAgY29uc3Qgc2NhbGUgPSBtYXRoLm1hcFJhbmdlKG4sIC0xLCAxLCBwYXJhbXMuc2NhbGVNaW4sIHBhcmFtcy5zY2FsZU1heCk7XG5cbiAgICAgIGNvbnRleHQuc2F2ZSgpO1xuICAgICAgY29udGV4dC50cmFuc2xhdGUoeCwgeSk7XG4gICAgICBjb250ZXh0LnRyYW5zbGF0ZShtYXJneCwgbWFyZ3kpO1xuICAgICAgY29udGV4dC50cmFuc2xhdGUoY2VsbHcgKiAwLjUsIGNlbGxoICogMC41KTtcbiAgICAgIGNvbnRleHQucm90YXRlKGFuZ2xlKTtcblxuICAgICAgY29udGV4dC5saW5lV2lkdGggPSBzY2FsZTtcbiAgICAgIGNvbnRleHQubGluZUNhcCA9IHBhcmFtcy5saW5lQ2FwO1xuXG4gICAgICBjb250ZXh0LmJlZ2luUGF0aCgpO1xuICAgICAgY29udGV4dC5tb3ZlVG8odyAqIC0wLjUsIDApO1xuICAgICAgY29udGV4dC5saW5lVG8odyAqIDAuNSwgMCk7XG4gICAgICBjb250ZXh0LnN0cm9rZSgpO1xuXG4gICAgICBjb250ZXh0LnJlc3RvcmUoKTtcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBjcmVhdGVQYW5lID0gKCkgPT4ge1xuICBjb25zdCBwYW5lID0gbmV3IFR3ZWFrcGFuZS5QYW5lKCk7XG4gIGxldCBmb2xkZXI7XG4gIFxuICBmb2xkZXIgPSBwYW5lLmFkZEZvbGRlcih7IHRpdGxlOiAnR3JpZCAnfSk7XG4gIGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdsaW5lQ2FwJywgeyBvcHRpb25zOiB7IGJ1dHQ6ICdidXR0Jywgcm91bmQ6ICdyb3VuZCcsIHNxdWFyZTogJ3NxdWFyZScgfX0pO1xuICBmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnY29scycsIHsgbWluOiAyLCBtYXg6IDEwMCwgc3RlcDogMX0pO1xuICBmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAncm93cycsIHsgbWluOiAyLCBtYXg6IDEwMCwgc3RlcDogMX0pO1xuICBmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnc2NhbGVNaW4nLCB7IG1pbjogMSwgbWF4OiAxMDB9KTtcbiAgZm9sZGVyLmFkZElucHV0KHBhcmFtcywgJ3NjYWxlTWF4JywgeyBtaW46IDEsIG1heDogMTAwfSk7XG5cbiAgZm9sZGVyID0gcGFuZS5hZGRGb2xkZXIoeyB0aXRsZTogJ05vaXNlJyB9KTtcbiAgZm9sZGVyLmFkZElucHV0KHBhcmFtcywgJ2ZyZXEnLCB7IG1pbjogLTAuMDEsIG1heDogMC4wMSB9KTtcbiAgZm9sZGVyLmFkZElucHV0KHBhcmFtcywgJ2ZyZXEnLCB7IG1pbjogMCwgbWF4OiAxIH0pO1xuICBmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnYW5pbWF0ZScpO1xuICBmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnZnJhbWUnLCB7IG1pbjogMCwgbWF4OiA5OTkgfSk7XG59O1xuXG5jcmVhdGVQYW5lKCk7XG5jYW52YXNTa2V0Y2goc2tldGNoLCBzZXR0aW5ncyk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHdyYXA7XG5mdW5jdGlvbiB3cmFwICh2YWx1ZSwgZnJvbSwgdG8pIHtcbiAgaWYgKHR5cGVvZiBmcm9tICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgdG8gIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTXVzdCBzcGVjaWZ5IFwidG9cIiBhbmQgXCJmcm9tXCIgYXJndW1lbnRzIGFzIG51bWJlcnMnKTtcbiAgfVxuICAvLyBhbGdvcml0aG0gZnJvbSBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81ODUyNjI4LzU5OTg4NFxuICBpZiAoZnJvbSA+IHRvKSB7XG4gICAgdmFyIHQgPSBmcm9tO1xuICAgIGZyb20gPSB0bztcbiAgICB0byA9IHQ7XG4gIH1cbiAgdmFyIGN5Y2xlID0gdG8gLSBmcm9tO1xuICBpZiAoY3ljbGUgPT09IDApIHtcbiAgICByZXR1cm4gdG87XG4gIH1cbiAgcmV0dXJuIHZhbHVlIC0gY3ljbGUgKiBNYXRoLmZsb29yKCh2YWx1ZSAtIGZyb20pIC8gY3ljbGUpO1xufVxuIiwidmFyIGRlZmluZWQgPSByZXF1aXJlKCdkZWZpbmVkJyk7XG52YXIgd3JhcCA9IHJlcXVpcmUoJy4vbGliL3dyYXAnKTtcbnZhciBFUFNJTE9OID0gTnVtYmVyLkVQU0lMT047XG5cbmZ1bmN0aW9uIGNsYW1wICh2YWx1ZSwgbWluLCBtYXgpIHtcbiAgcmV0dXJuIG1pbiA8IG1heFxuICAgID8gKHZhbHVlIDwgbWluID8gbWluIDogdmFsdWUgPiBtYXggPyBtYXggOiB2YWx1ZSlcbiAgICA6ICh2YWx1ZSA8IG1heCA/IG1heCA6IHZhbHVlID4gbWluID8gbWluIDogdmFsdWUpO1xufVxuXG5mdW5jdGlvbiBjbGFtcDAxICh2KSB7XG4gIHJldHVybiBjbGFtcCh2LCAwLCAxKTtcbn1cblxuZnVuY3Rpb24gbGVycCAobWluLCBtYXgsIHQpIHtcbiAgcmV0dXJuIG1pbiAqICgxIC0gdCkgKyBtYXggKiB0O1xufVxuXG5mdW5jdGlvbiBpbnZlcnNlTGVycCAobWluLCBtYXgsIHQpIHtcbiAgaWYgKE1hdGguYWJzKG1pbiAtIG1heCkgPCBFUFNJTE9OKSByZXR1cm4gMDtcbiAgZWxzZSByZXR1cm4gKHQgLSBtaW4pIC8gKG1heCAtIG1pbik7XG59XG5cbmZ1bmN0aW9uIHNtb290aHN0ZXAgKG1pbiwgbWF4LCB0KSB7XG4gIHZhciB4ID0gY2xhbXAoaW52ZXJzZUxlcnAobWluLCBtYXgsIHQpLCAwLCAxKTtcbiAgcmV0dXJuIHggKiB4ICogKDMgLSAyICogeCk7XG59XG5cbmZ1bmN0aW9uIHRvRmluaXRlIChuLCBkZWZhdWx0VmFsdWUpIHtcbiAgZGVmYXVsdFZhbHVlID0gZGVmaW5lZChkZWZhdWx0VmFsdWUsIDApO1xuICByZXR1cm4gdHlwZW9mIG4gPT09ICdudW1iZXInICYmIGlzRmluaXRlKG4pID8gbiA6IGRlZmF1bHRWYWx1ZTtcbn1cblxuZnVuY3Rpb24gZXhwYW5kVmVjdG9yIChkaW1zKSB7XG4gIGlmICh0eXBlb2YgZGltcyAhPT0gJ251bWJlcicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGRpbXMgYXJndW1lbnQnKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIChwLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBkZWZhdWx0VmFsdWUgPSBkZWZpbmVkKGRlZmF1bHRWYWx1ZSwgMCk7XG4gICAgdmFyIHNjYWxhcjtcbiAgICBpZiAocCA9PSBudWxsKSB7XG4gICAgICAvLyBObyB2ZWN0b3IsIGNyZWF0ZSBhIGRlZmF1bHQgb25lXG4gICAgICBzY2FsYXIgPSBkZWZhdWx0VmFsdWU7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgcCA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUocCkpIHtcbiAgICAgIC8vIEV4cGFuZCBzaW5nbGUgY2hhbm5lbCB0byBtdWx0aXBsZSB2ZWN0b3JcbiAgICAgIHNjYWxhciA9IHA7XG4gICAgfVxuXG4gICAgdmFyIG91dCA9IFtdO1xuICAgIHZhciBpO1xuICAgIGlmIChzY2FsYXIgPT0gbnVsbCkge1xuICAgICAgZm9yIChpID0gMDsgaSA8IGRpbXM7IGkrKykge1xuICAgICAgICBvdXRbaV0gPSB0b0Zpbml0ZShwW2ldLCBkZWZhdWx0VmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZGltczsgaSsrKSB7XG4gICAgICAgIG91dFtpXSA9IHNjYWxhcjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfTtcbn1cblxuZnVuY3Rpb24gbGVycEFycmF5IChtaW4sIG1heCwgdCwgb3V0KSB7XG4gIG91dCA9IG91dCB8fCBbXTtcbiAgaWYgKG1pbi5sZW5ndGggIT09IG1heC5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtaW4gYW5kIG1heCBhcnJheSBhcmUgZXhwZWN0ZWQgdG8gaGF2ZSB0aGUgc2FtZSBsZW5ndGgnKTtcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IG1pbi5sZW5ndGg7IGkrKykge1xuICAgIG91dFtpXSA9IGxlcnAobWluW2ldLCBtYXhbaV0sIHQpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIG5ld0FycmF5IChuLCBpbml0aWFsVmFsdWUpIHtcbiAgbiA9IGRlZmluZWQobiwgMCk7XG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIG4gYXJndW1lbnQgdG8gYmUgYSBudW1iZXInKTtcbiAgdmFyIG91dCA9IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkrKykgb3V0LnB1c2goaW5pdGlhbFZhbHVlKTtcbiAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gbGluc3BhY2UgKG4sIG9wdHMpIHtcbiAgbiA9IGRlZmluZWQobiwgMCk7XG4gIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIG4gYXJndW1lbnQgdG8gYmUgYSBudW1iZXInKTtcbiAgb3B0cyA9IG9wdHMgfHwge307XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgb3B0cyA9IHsgZW5kcG9pbnQ6IHRydWUgfTtcbiAgfVxuICB2YXIgb2Zmc2V0ID0gZGVmaW5lZChvcHRzLm9mZnNldCwgMCk7XG4gIGlmIChvcHRzLmVuZHBvaW50KSB7XG4gICAgcmV0dXJuIG5ld0FycmF5KG4pLm1hcChmdW5jdGlvbiAoXywgaSkge1xuICAgICAgcmV0dXJuIG4gPD0gMSA/IDAgOiAoKGkgKyBvZmZzZXQpIC8gKG4gLSAxKSk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG5ld0FycmF5KG4pLm1hcChmdW5jdGlvbiAoXywgaSkge1xuICAgICAgcmV0dXJuIChpICsgb2Zmc2V0KSAvIG47XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGVycEZyYW1lcyAodmFsdWVzLCB0LCBvdXQpIHtcbiAgdCA9IGNsYW1wKHQsIDAsIDEpO1xuXG4gIHZhciBsZW4gPSB2YWx1ZXMubGVuZ3RoIC0gMTtcbiAgdmFyIHdob2xlID0gdCAqIGxlbjtcbiAgdmFyIGZyYW1lID0gTWF0aC5mbG9vcih3aG9sZSk7XG4gIHZhciBmcmFjdCA9IHdob2xlIC0gZnJhbWU7XG5cbiAgdmFyIG5leHRGcmFtZSA9IE1hdGgubWluKGZyYW1lICsgMSwgbGVuKTtcbiAgdmFyIGEgPSB2YWx1ZXNbZnJhbWUgJSB2YWx1ZXMubGVuZ3RoXTtcbiAgdmFyIGIgPSB2YWx1ZXNbbmV4dEZyYW1lICUgdmFsdWVzLmxlbmd0aF07XG4gIGlmICh0eXBlb2YgYSA9PT0gJ251bWJlcicgJiYgdHlwZW9mIGIgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIGxlcnAoYSwgYiwgZnJhY3QpO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoYSkgJiYgQXJyYXkuaXNBcnJheShiKSkge1xuICAgIHJldHVybiBsZXJwQXJyYXkoYSwgYiwgZnJhY3QsIG91dCk7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTWlzbWF0Y2ggaW4gdmFsdWUgdHlwZSBvZiB0d28gYXJyYXkgZWxlbWVudHM6ICcgKyBmcmFtZSArICcgYW5kICcgKyBuZXh0RnJhbWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIG1vZCAoYSwgYikge1xuICByZXR1cm4gKChhICUgYikgKyBiKSAlIGI7XG59XG5cbmZ1bmN0aW9uIGRlZ1RvUmFkIChuKSB7XG4gIHJldHVybiBuICogTWF0aC5QSSAvIDE4MDtcbn1cblxuZnVuY3Rpb24gcmFkVG9EZWcgKG4pIHtcbiAgcmV0dXJuIG4gKiAxODAgLyBNYXRoLlBJO1xufVxuXG5mdW5jdGlvbiBmcmFjdCAobikge1xuICByZXR1cm4gbiAtIE1hdGguZmxvb3Iobik7XG59XG5cbmZ1bmN0aW9uIHNpZ24gKG4pIHtcbiAgaWYgKG4gPiAwKSByZXR1cm4gMTtcbiAgZWxzZSBpZiAobiA8IDApIHJldHVybiAtMTtcbiAgZWxzZSByZXR1cm4gMDtcbn1cblxuLy8gU3BlY2lmaWMgZnVuY3Rpb24gZnJvbSBVbml0eSAvIG9mTWF0aCwgbm90IHN1cmUgaXRzIG5lZWRlZD9cbi8vIGZ1bmN0aW9uIGxlcnBXcmFwIChhLCBiLCB0LCBtaW4sIG1heCkge1xuLy8gICByZXR1cm4gd3JhcChhICsgd3JhcChiIC0gYSwgbWluLCBtYXgpICogdCwgbWluLCBtYXgpXG4vLyB9XG5cbmZ1bmN0aW9uIHBpbmdQb25nICh0LCBsZW5ndGgpIHtcbiAgdCA9IG1vZCh0LCBsZW5ndGggKiAyKTtcbiAgcmV0dXJuIGxlbmd0aCAtIE1hdGguYWJzKHQgLSBsZW5ndGgpO1xufVxuXG5mdW5jdGlvbiBkYW1wIChhLCBiLCBsYW1iZGEsIGR0KSB7XG4gIHJldHVybiBsZXJwKGEsIGIsIDEgLSBNYXRoLmV4cCgtbGFtYmRhICogZHQpKTtcbn1cblxuZnVuY3Rpb24gZGFtcEFycmF5IChhLCBiLCBsYW1iZGEsIGR0LCBvdXQpIHtcbiAgb3V0ID0gb3V0IHx8IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICBvdXRbaV0gPSBkYW1wKGFbaV0sIGJbaV0sIGxhbWJkYSwgZHQpO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG5cbmZ1bmN0aW9uIG1hcFJhbmdlICh2YWx1ZSwgaW5wdXRNaW4sIGlucHV0TWF4LCBvdXRwdXRNaW4sIG91dHB1dE1heCwgY2xhbXApIHtcbiAgLy8gUmVmZXJlbmNlOlxuICAvLyBodHRwczovL29wZW5mcmFtZXdvcmtzLmNjL2RvY3VtZW50YXRpb24vbWF0aC9vZk1hdGgvXG4gIGlmIChNYXRoLmFicyhpbnB1dE1pbiAtIGlucHV0TWF4KSA8IEVQU0lMT04pIHtcbiAgICByZXR1cm4gb3V0cHV0TWluO1xuICB9IGVsc2Uge1xuICAgIHZhciBvdXRWYWwgPSAoKHZhbHVlIC0gaW5wdXRNaW4pIC8gKGlucHV0TWF4IC0gaW5wdXRNaW4pICogKG91dHB1dE1heCAtIG91dHB1dE1pbikgKyBvdXRwdXRNaW4pO1xuICAgIGlmIChjbGFtcCkge1xuICAgICAgaWYgKG91dHB1dE1heCA8IG91dHB1dE1pbikge1xuICAgICAgICBpZiAob3V0VmFsIDwgb3V0cHV0TWF4KSBvdXRWYWwgPSBvdXRwdXRNYXg7XG4gICAgICAgIGVsc2UgaWYgKG91dFZhbCA+IG91dHB1dE1pbikgb3V0VmFsID0gb3V0cHV0TWluO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKG91dFZhbCA+IG91dHB1dE1heCkgb3V0VmFsID0gb3V0cHV0TWF4O1xuICAgICAgICBlbHNlIGlmIChvdXRWYWwgPCBvdXRwdXRNaW4pIG91dFZhbCA9IG91dHB1dE1pbjtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dFZhbDtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbW9kOiBtb2QsXG4gIGZyYWN0OiBmcmFjdCxcbiAgc2lnbjogc2lnbixcbiAgZGVnVG9SYWQ6IGRlZ1RvUmFkLFxuICByYWRUb0RlZzogcmFkVG9EZWcsXG4gIHdyYXA6IHdyYXAsXG4gIHBpbmdQb25nOiBwaW5nUG9uZyxcbiAgbGluc3BhY2U6IGxpbnNwYWNlLFxuICBsZXJwOiBsZXJwLFxuICBsZXJwQXJyYXk6IGxlcnBBcnJheSxcbiAgaW52ZXJzZUxlcnA6IGludmVyc2VMZXJwLFxuICBsZXJwRnJhbWVzOiBsZXJwRnJhbWVzLFxuICBjbGFtcDogY2xhbXAsXG4gIGNsYW1wMDE6IGNsYW1wMDEsXG4gIHNtb290aHN0ZXA6IHNtb290aHN0ZXAsXG4gIGRhbXA6IGRhbXAsXG4gIGRhbXBBcnJheTogZGFtcEFycmF5LFxuICBtYXBSYW5nZTogbWFwUmFuZ2UsXG4gIGV4cGFuZDJEOiBleHBhbmRWZWN0b3IoMiksXG4gIGV4cGFuZDNEOiBleHBhbmRWZWN0b3IoMyksXG4gIGV4cGFuZDREOiBleHBhbmRWZWN0b3IoNClcbn07XG4iLCJ2YXIgc2VlZFJhbmRvbSA9IHJlcXVpcmUoJ3NlZWQtcmFuZG9tJyk7XG52YXIgU2ltcGxleE5vaXNlID0gcmVxdWlyZSgnc2ltcGxleC1ub2lzZScpO1xudmFyIGRlZmluZWQgPSByZXF1aXJlKCdkZWZpbmVkJyk7XG5cbmZ1bmN0aW9uIGNyZWF0ZVJhbmRvbSAoZGVmYXVsdFNlZWQpIHtcbiAgZGVmYXVsdFNlZWQgPSBkZWZpbmVkKGRlZmF1bHRTZWVkLCBudWxsKTtcbiAgdmFyIGRlZmF1bHRSYW5kb20gPSBNYXRoLnJhbmRvbTtcbiAgdmFyIGN1cnJlbnRTZWVkO1xuICB2YXIgY3VycmVudFJhbmRvbTtcbiAgdmFyIG5vaXNlR2VuZXJhdG9yO1xuICB2YXIgX25leHRHYXVzc2lhbiA9IG51bGw7XG4gIHZhciBfaGFzTmV4dEdhdXNzaWFuID0gZmFsc2U7XG5cbiAgc2V0U2VlZChkZWZhdWx0U2VlZCk7XG5cbiAgcmV0dXJuIHtcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgY3JlYXRlUmFuZG9tOiBmdW5jdGlvbiAoZGVmYXVsdFNlZWQpIHtcbiAgICAgIHJldHVybiBjcmVhdGVSYW5kb20oZGVmYXVsdFNlZWQpO1xuICAgIH0sXG4gICAgc2V0U2VlZDogc2V0U2VlZCxcbiAgICBnZXRTZWVkOiBnZXRTZWVkLFxuICAgIGdldFJhbmRvbVNlZWQ6IGdldFJhbmRvbVNlZWQsXG4gICAgdmFsdWVOb25aZXJvOiB2YWx1ZU5vblplcm8sXG4gICAgcGVybXV0ZU5vaXNlOiBwZXJtdXRlTm9pc2UsXG4gICAgbm9pc2UxRDogbm9pc2UxRCxcbiAgICBub2lzZTJEOiBub2lzZTJELFxuICAgIG5vaXNlM0Q6IG5vaXNlM0QsXG4gICAgbm9pc2U0RDogbm9pc2U0RCxcbiAgICBzaWduOiBzaWduLFxuICAgIGJvb2xlYW46IGJvb2xlYW4sXG4gICAgY2hhbmNlOiBjaGFuY2UsXG4gICAgcmFuZ2U6IHJhbmdlLFxuICAgIHJhbmdlRmxvb3I6IHJhbmdlRmxvb3IsXG4gICAgcGljazogcGljayxcbiAgICBzaHVmZmxlOiBzaHVmZmxlLFxuICAgIG9uQ2lyY2xlOiBvbkNpcmNsZSxcbiAgICBpbnNpZGVDaXJjbGU6IGluc2lkZUNpcmNsZSxcbiAgICBvblNwaGVyZTogb25TcGhlcmUsXG4gICAgaW5zaWRlU3BoZXJlOiBpbnNpZGVTcGhlcmUsXG4gICAgcXVhdGVybmlvbjogcXVhdGVybmlvbixcbiAgICB3ZWlnaHRlZDogd2VpZ2h0ZWQsXG4gICAgd2VpZ2h0ZWRTZXQ6IHdlaWdodGVkU2V0LFxuICAgIHdlaWdodGVkU2V0SW5kZXg6IHdlaWdodGVkU2V0SW5kZXgsXG4gICAgZ2F1c3NpYW46IGdhdXNzaWFuXG4gIH07XG5cbiAgZnVuY3Rpb24gc2V0U2VlZCAoc2VlZCwgb3B0KSB7XG4gICAgaWYgKHR5cGVvZiBzZWVkID09PSAnbnVtYmVyJyB8fCB0eXBlb2Ygc2VlZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGN1cnJlbnRTZWVkID0gc2VlZDtcbiAgICAgIGN1cnJlbnRSYW5kb20gPSBzZWVkUmFuZG9tKGN1cnJlbnRTZWVkLCBvcHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjdXJyZW50U2VlZCA9IHVuZGVmaW5lZDtcbiAgICAgIGN1cnJlbnRSYW5kb20gPSBkZWZhdWx0UmFuZG9tO1xuICAgIH1cbiAgICBub2lzZUdlbmVyYXRvciA9IGNyZWF0ZU5vaXNlKCk7XG4gICAgX25leHRHYXVzc2lhbiA9IG51bGw7XG4gICAgX2hhc05leHRHYXVzc2lhbiA9IGZhbHNlO1xuICB9XG5cbiAgZnVuY3Rpb24gdmFsdWUgKCkge1xuICAgIHJldHVybiBjdXJyZW50UmFuZG9tKCk7XG4gIH1cblxuICBmdW5jdGlvbiB2YWx1ZU5vblplcm8gKCkge1xuICAgIHZhciB1ID0gMDtcbiAgICB3aGlsZSAodSA9PT0gMCkgdSA9IHZhbHVlKCk7XG4gICAgcmV0dXJuIHU7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRTZWVkICgpIHtcbiAgICByZXR1cm4gY3VycmVudFNlZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBnZXRSYW5kb21TZWVkICgpIHtcbiAgICB2YXIgc2VlZCA9IFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMDAwKSk7XG4gICAgcmV0dXJuIHNlZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVOb2lzZSAoKSB7XG4gICAgcmV0dXJuIG5ldyBTaW1wbGV4Tm9pc2UoY3VycmVudFJhbmRvbSk7XG4gIH1cblxuICBmdW5jdGlvbiBwZXJtdXRlTm9pc2UgKCkge1xuICAgIG5vaXNlR2VuZXJhdG9yID0gY3JlYXRlTm9pc2UoKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vaXNlMUQgKHgsIGZyZXF1ZW5jeSwgYW1wbGl0dWRlKSB7XG4gICAgaWYgKCFpc0Zpbml0ZSh4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneCBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBmcmVxdWVuY3kgPSBkZWZpbmVkKGZyZXF1ZW5jeSwgMSk7XG4gICAgYW1wbGl0dWRlID0gZGVmaW5lZChhbXBsaXR1ZGUsIDEpO1xuICAgIHJldHVybiBhbXBsaXR1ZGUgKiBub2lzZUdlbmVyYXRvci5ub2lzZTJEKHggKiBmcmVxdWVuY3ksIDApO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9pc2UyRCAoeCwgeSwgZnJlcXVlbmN5LCBhbXBsaXR1ZGUpIHtcbiAgICBpZiAoIWlzRmluaXRlKHgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd4IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUoeSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3kgY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgZnJlcXVlbmN5ID0gZGVmaW5lZChmcmVxdWVuY3ksIDEpO1xuICAgIGFtcGxpdHVkZSA9IGRlZmluZWQoYW1wbGl0dWRlLCAxKTtcbiAgICByZXR1cm4gYW1wbGl0dWRlICogbm9pc2VHZW5lcmF0b3Iubm9pc2UyRCh4ICogZnJlcXVlbmN5LCB5ICogZnJlcXVlbmN5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vaXNlM0QgKHgsIHksIHosIGZyZXF1ZW5jeSwgYW1wbGl0dWRlKSB7XG4gICAgaWYgKCFpc0Zpbml0ZSh4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneCBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBpZiAoIWlzRmluaXRlKHkpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd5IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUoeikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ogY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgZnJlcXVlbmN5ID0gZGVmaW5lZChmcmVxdWVuY3ksIDEpO1xuICAgIGFtcGxpdHVkZSA9IGRlZmluZWQoYW1wbGl0dWRlLCAxKTtcbiAgICByZXR1cm4gYW1wbGl0dWRlICogbm9pc2VHZW5lcmF0b3Iubm9pc2UzRChcbiAgICAgIHggKiBmcmVxdWVuY3ksXG4gICAgICB5ICogZnJlcXVlbmN5LFxuICAgICAgeiAqIGZyZXF1ZW5jeVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBub2lzZTREICh4LCB5LCB6LCB3LCBmcmVxdWVuY3ksIGFtcGxpdHVkZSkge1xuICAgIGlmICghaXNGaW5pdGUoeCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ggY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh5KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneSBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBpZiAoIWlzRmluaXRlKHopKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd6IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUodykpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3cgY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgZnJlcXVlbmN5ID0gZGVmaW5lZChmcmVxdWVuY3ksIDEpO1xuICAgIGFtcGxpdHVkZSA9IGRlZmluZWQoYW1wbGl0dWRlLCAxKTtcbiAgICByZXR1cm4gYW1wbGl0dWRlICogbm9pc2VHZW5lcmF0b3Iubm9pc2U0RChcbiAgICAgIHggKiBmcmVxdWVuY3ksXG4gICAgICB5ICogZnJlcXVlbmN5LFxuICAgICAgeiAqIGZyZXF1ZW5jeSxcbiAgICAgIHcgKiBmcmVxdWVuY3lcbiAgICApO1xuICB9XG5cbiAgZnVuY3Rpb24gc2lnbiAoKSB7XG4gICAgcmV0dXJuIGJvb2xlYW4oKSA/IDEgOiAtMTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJvb2xlYW4gKCkge1xuICAgIHJldHVybiB2YWx1ZSgpID4gMC41O1xuICB9XG5cbiAgZnVuY3Rpb24gY2hhbmNlIChuKSB7XG4gICAgbiA9IGRlZmluZWQobiwgMC41KTtcbiAgICBpZiAodHlwZW9mIG4gIT09ICdudW1iZXInKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdleHBlY3RlZCBuIHRvIGJlIGEgbnVtYmVyJyk7XG4gICAgcmV0dXJuIHZhbHVlKCkgPCBuO1xuICB9XG5cbiAgZnVuY3Rpb24gcmFuZ2UgKG1pbiwgbWF4KSB7XG4gICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBtYXggPSBtaW47XG4gICAgICBtaW4gPSAwO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbWluICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgbWF4ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYWxsIGFyZ3VtZW50cyB0byBiZSBudW1iZXJzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlKCkgKiAobWF4IC0gbWluKSArIG1pbjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJhbmdlRmxvb3IgKG1pbiwgbWF4KSB7XG4gICAgaWYgKG1heCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBtYXggPSBtaW47XG4gICAgICBtaW4gPSAwO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbWluICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgbWF4ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYWxsIGFyZ3VtZW50cyB0byBiZSBudW1iZXJzJyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIE1hdGguZmxvb3IocmFuZ2UobWluLCBtYXgpKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBpY2sgKGFycmF5KSB7XG4gICAgaWYgKGFycmF5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gYXJyYXlbcmFuZ2VGbG9vcigwLCBhcnJheS5sZW5ndGgpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHNodWZmbGUgKGFycikge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShhcnIpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBBcnJheSwgZ290ICcgKyB0eXBlb2YgYXJyKTtcbiAgICB9XG5cbiAgICB2YXIgcmFuZDtcbiAgICB2YXIgdG1wO1xuICAgIHZhciBsZW4gPSBhcnIubGVuZ3RoO1xuICAgIHZhciByZXQgPSBhcnIuc2xpY2UoKTtcbiAgICB3aGlsZSAobGVuKSB7XG4gICAgICByYW5kID0gTWF0aC5mbG9vcih2YWx1ZSgpICogbGVuLS0pO1xuICAgICAgdG1wID0gcmV0W2xlbl07XG4gICAgICByZXRbbGVuXSA9IHJldFtyYW5kXTtcbiAgICAgIHJldFtyYW5kXSA9IHRtcDtcbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ2lyY2xlIChyYWRpdXMsIG91dCkge1xuICAgIHJhZGl1cyA9IGRlZmluZWQocmFkaXVzLCAxKTtcbiAgICBvdXQgPSBvdXQgfHwgW107XG4gICAgdmFyIHRoZXRhID0gdmFsdWUoKSAqIDIuMCAqIE1hdGguUEk7XG4gICAgb3V0WzBdID0gcmFkaXVzICogTWF0aC5jb3ModGhldGEpO1xuICAgIG91dFsxXSA9IHJhZGl1cyAqIE1hdGguc2luKHRoZXRhKTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zaWRlQ2lyY2xlIChyYWRpdXMsIG91dCkge1xuICAgIHJhZGl1cyA9IGRlZmluZWQocmFkaXVzLCAxKTtcbiAgICBvdXQgPSBvdXQgfHwgW107XG4gICAgb25DaXJjbGUoMSwgb3V0KTtcbiAgICB2YXIgciA9IHJhZGl1cyAqIE1hdGguc3FydCh2YWx1ZSgpKTtcbiAgICBvdXRbMF0gKj0gcjtcbiAgICBvdXRbMV0gKj0gcjtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgZnVuY3Rpb24gb25TcGhlcmUgKHJhZGl1cywgb3V0KSB7XG4gICAgcmFkaXVzID0gZGVmaW5lZChyYWRpdXMsIDEpO1xuICAgIG91dCA9IG91dCB8fCBbXTtcbiAgICB2YXIgdSA9IHZhbHVlKCkgKiBNYXRoLlBJICogMjtcbiAgICB2YXIgdiA9IHZhbHVlKCkgKiAyIC0gMTtcbiAgICB2YXIgcGhpID0gdTtcbiAgICB2YXIgdGhldGEgPSBNYXRoLmFjb3Modik7XG4gICAgb3V0WzBdID0gcmFkaXVzICogTWF0aC5zaW4odGhldGEpICogTWF0aC5jb3MocGhpKTtcbiAgICBvdXRbMV0gPSByYWRpdXMgKiBNYXRoLnNpbih0aGV0YSkgKiBNYXRoLnNpbihwaGkpO1xuICAgIG91dFsyXSA9IHJhZGl1cyAqIE1hdGguY29zKHRoZXRhKTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgZnVuY3Rpb24gaW5zaWRlU3BoZXJlIChyYWRpdXMsIG91dCkge1xuICAgIHJhZGl1cyA9IGRlZmluZWQocmFkaXVzLCAxKTtcbiAgICBvdXQgPSBvdXQgfHwgW107XG4gICAgdmFyIHUgPSB2YWx1ZSgpICogTWF0aC5QSSAqIDI7XG4gICAgdmFyIHYgPSB2YWx1ZSgpICogMiAtIDE7XG4gICAgdmFyIGsgPSB2YWx1ZSgpO1xuXG4gICAgdmFyIHBoaSA9IHU7XG4gICAgdmFyIHRoZXRhID0gTWF0aC5hY29zKHYpO1xuICAgIHZhciByID0gcmFkaXVzICogTWF0aC5jYnJ0KGspO1xuICAgIG91dFswXSA9IHIgKiBNYXRoLnNpbih0aGV0YSkgKiBNYXRoLmNvcyhwaGkpO1xuICAgIG91dFsxXSA9IHIgKiBNYXRoLnNpbih0aGV0YSkgKiBNYXRoLnNpbihwaGkpO1xuICAgIG91dFsyXSA9IHIgKiBNYXRoLmNvcyh0aGV0YSk7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHF1YXRlcm5pb24gKG91dCkge1xuICAgIG91dCA9IG91dCB8fCBbXTtcbiAgICB2YXIgdTEgPSB2YWx1ZSgpO1xuICAgIHZhciB1MiA9IHZhbHVlKCk7XG4gICAgdmFyIHUzID0gdmFsdWUoKTtcblxuICAgIHZhciBzcTEgPSBNYXRoLnNxcnQoMSAtIHUxKTtcbiAgICB2YXIgc3EyID0gTWF0aC5zcXJ0KHUxKTtcblxuICAgIHZhciB0aGV0YTEgPSBNYXRoLlBJICogMiAqIHUyO1xuICAgIHZhciB0aGV0YTIgPSBNYXRoLlBJICogMiAqIHUzO1xuXG4gICAgdmFyIHggPSBNYXRoLnNpbih0aGV0YTEpICogc3ExO1xuICAgIHZhciB5ID0gTWF0aC5jb3ModGhldGExKSAqIHNxMTtcbiAgICB2YXIgeiA9IE1hdGguc2luKHRoZXRhMikgKiBzcTI7XG4gICAgdmFyIHcgPSBNYXRoLmNvcyh0aGV0YTIpICogc3EyO1xuICAgIG91dFswXSA9IHg7XG4gICAgb3V0WzFdID0geTtcbiAgICBvdXRbMl0gPSB6O1xuICAgIG91dFszXSA9IHc7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdlaWdodGVkU2V0IChzZXQpIHtcbiAgICBzZXQgPSBzZXQgfHwgW107XG4gICAgaWYgKHNldC5sZW5ndGggPT09IDApIHJldHVybiBudWxsO1xuICAgIHJldHVybiBzZXRbd2VpZ2h0ZWRTZXRJbmRleChzZXQpXS52YWx1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdlaWdodGVkU2V0SW5kZXggKHNldCkge1xuICAgIHNldCA9IHNldCB8fCBbXTtcbiAgICBpZiAoc2V0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xO1xuICAgIHJldHVybiB3ZWlnaHRlZChzZXQubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgICByZXR1cm4gcy53ZWlnaHQ7XG4gICAgfSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gd2VpZ2h0ZWQgKHdlaWdodHMpIHtcbiAgICB3ZWlnaHRzID0gd2VpZ2h0cyB8fCBbXTtcbiAgICBpZiAod2VpZ2h0cy5sZW5ndGggPT09IDApIHJldHVybiAtMTtcbiAgICB2YXIgdG90YWxXZWlnaHQgPSAwO1xuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IHdlaWdodHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHRvdGFsV2VpZ2h0ICs9IHdlaWdodHNbaV07XG4gICAgfVxuXG4gICAgaWYgKHRvdGFsV2VpZ2h0IDw9IDApIHRocm93IG5ldyBFcnJvcignV2VpZ2h0cyBtdXN0IHN1bSB0byA+IDAnKTtcblxuICAgIHZhciByYW5kb20gPSB2YWx1ZSgpICogdG90YWxXZWlnaHQ7XG4gICAgZm9yIChpID0gMDsgaSA8IHdlaWdodHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyYW5kb20gPCB3ZWlnaHRzW2ldKSB7XG4gICAgICAgIHJldHVybiBpO1xuICAgICAgfVxuICAgICAgcmFuZG9tIC09IHdlaWdodHNbaV07XG4gICAgfVxuICAgIHJldHVybiAwO1xuICB9XG5cbiAgZnVuY3Rpb24gZ2F1c3NpYW4gKG1lYW4sIHN0YW5kYXJkRGVyaXZhdGlvbikge1xuICAgIG1lYW4gPSBkZWZpbmVkKG1lYW4sIDApO1xuICAgIHN0YW5kYXJkRGVyaXZhdGlvbiA9IGRlZmluZWQoc3RhbmRhcmREZXJpdmF0aW9uLCAxKTtcblxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9vcGVuamRrLW1pcnJvci9qZGs3dS1qZGsvYmxvYi9mNGQ4MDk1N2U4OWExOWEyOWJiOWY5ODA3ZDJhMjgzNTFlZDdmN2RmL3NyYy9zaGFyZS9jbGFzc2VzL2phdmEvdXRpbC9SYW5kb20uamF2YSNMNDk2XG4gICAgaWYgKF9oYXNOZXh0R2F1c3NpYW4pIHtcbiAgICAgIF9oYXNOZXh0R2F1c3NpYW4gPSBmYWxzZTtcbiAgICAgIHZhciByZXN1bHQgPSBfbmV4dEdhdXNzaWFuO1xuICAgICAgX25leHRHYXVzc2lhbiA9IG51bGw7XG4gICAgICByZXR1cm4gbWVhbiArIHN0YW5kYXJkRGVyaXZhdGlvbiAqIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHYxID0gMDtcbiAgICAgIHZhciB2MiA9IDA7XG4gICAgICB2YXIgcyA9IDA7XG4gICAgICBkbyB7XG4gICAgICAgIHYxID0gdmFsdWUoKSAqIDIgLSAxOyAvLyBiZXR3ZWVuIC0xIGFuZCAxXG4gICAgICAgIHYyID0gdmFsdWUoKSAqIDIgLSAxOyAvLyBiZXR3ZWVuIC0xIGFuZCAxXG4gICAgICAgIHMgPSB2MSAqIHYxICsgdjIgKiB2MjtcbiAgICAgIH0gd2hpbGUgKHMgPj0gMSB8fCBzID09PSAwKTtcbiAgICAgIHZhciBtdWx0aXBsaWVyID0gTWF0aC5zcXJ0KC0yICogTWF0aC5sb2cocykgLyBzKTtcbiAgICAgIF9uZXh0R2F1c3NpYW4gPSAodjIgKiBtdWx0aXBsaWVyKTtcbiAgICAgIF9oYXNOZXh0R2F1c3NpYW4gPSB0cnVlO1xuICAgICAgcmV0dXJuIG1lYW4gKyBzdGFuZGFyZERlcml2YXRpb24gKiAodjEgKiBtdWx0aXBsaWVyKTtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVSYW5kb20oKTtcbiIsIi8qXG5vYmplY3QtYXNzaWduXG4oYykgU2luZHJlIFNvcmh1c1xuQGxpY2Vuc2UgTUlUXG4qL1xuXG4ndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bnVzZWQtdmFycyAqL1xudmFyIGdldE93blByb3BlcnR5U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIHByb3BJc0VudW1lcmFibGUgPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xuXG5mdW5jdGlvbiB0b09iamVjdCh2YWwpIHtcblx0aWYgKHZhbCA9PT0gbnVsbCB8fCB2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBUeXBlRXJyb3IoJ09iamVjdC5hc3NpZ24gY2Fubm90IGJlIGNhbGxlZCB3aXRoIG51bGwgb3IgdW5kZWZpbmVkJyk7XG5cdH1cblxuXHRyZXR1cm4gT2JqZWN0KHZhbCk7XG59XG5cbmZ1bmN0aW9uIHNob3VsZFVzZU5hdGl2ZSgpIHtcblx0dHJ5IHtcblx0XHRpZiAoIU9iamVjdC5hc3NpZ24pIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBEZXRlY3QgYnVnZ3kgcHJvcGVydHkgZW51bWVyYXRpb24gb3JkZXIgaW4gb2xkZXIgVjggdmVyc2lvbnMuXG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD00MTE4XG5cdFx0dmFyIHRlc3QxID0gbmV3IFN0cmluZygnYWJjJyk7ICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5ldy13cmFwcGVyc1xuXHRcdHRlc3QxWzVdID0gJ2RlJztcblx0XHRpZiAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGVzdDEpWzBdID09PSAnNScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QyID0ge307XG5cdFx0Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgaSsrKSB7XG5cdFx0XHR0ZXN0MlsnXycgKyBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpXSA9IGk7XG5cdFx0fVxuXHRcdHZhciBvcmRlcjIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MikubWFwKGZ1bmN0aW9uIChuKSB7XG5cdFx0XHRyZXR1cm4gdGVzdDJbbl07XG5cdFx0fSk7XG5cdFx0aWYgKG9yZGVyMi5qb2luKCcnKSAhPT0gJzAxMjM0NTY3ODknKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzA1NlxuXHRcdHZhciB0ZXN0MyA9IHt9O1xuXHRcdCdhYmNkZWZnaGlqa2xtbm9wcXJzdCcuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikge1xuXHRcdFx0dGVzdDNbbGV0dGVyXSA9IGxldHRlcjtcblx0XHR9KTtcblx0XHRpZiAoT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgdGVzdDMpKS5qb2luKCcnKSAhPT1cblx0XHRcdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHJldHVybiB0cnVlO1xuXHR9IGNhdGNoIChlcnIpIHtcblx0XHQvLyBXZSBkb24ndCBleHBlY3QgYW55IG9mIHRoZSBhYm92ZSB0byB0aHJvdywgYnV0IGJldHRlciB0byBiZSBzYWZlLlxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNob3VsZFVzZU5hdGl2ZSgpID8gT2JqZWN0LmFzc2lnbiA6IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSkge1xuXHR2YXIgZnJvbTtcblx0dmFyIHRvID0gdG9PYmplY3QodGFyZ2V0KTtcblx0dmFyIHN5bWJvbHM7XG5cblx0Zm9yICh2YXIgcyA9IDE7IHMgPCBhcmd1bWVudHMubGVuZ3RoOyBzKyspIHtcblx0XHRmcm9tID0gT2JqZWN0KGFyZ3VtZW50c1tzXSk7XG5cblx0XHRmb3IgKHZhciBrZXkgaW4gZnJvbSkge1xuXHRcdFx0aWYgKGhhc093blByb3BlcnR5LmNhbGwoZnJvbSwga2V5KSkge1xuXHRcdFx0XHR0b1trZXldID0gZnJvbVtrZXldO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChnZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcblx0XHRcdHN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZnJvbSk7XG5cdFx0XHRmb3IgKHZhciBpID0gMDsgaSA8IHN5bWJvbHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0aWYgKHByb3BJc0VudW1lcmFibGUuY2FsbChmcm9tLCBzeW1ib2xzW2ldKSkge1xuXHRcdFx0XHRcdHRvW3N5bWJvbHNbaV1dID0gZnJvbVtzeW1ib2xzW2ldXTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB0bztcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9XG4gIGdsb2JhbC5wZXJmb3JtYW5jZSAmJlxuICBnbG9iYWwucGVyZm9ybWFuY2Uubm93ID8gZnVuY3Rpb24gbm93KCkge1xuICAgIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKVxuICB9IDogRGF0ZS5ub3cgfHwgZnVuY3Rpb24gbm93KCkge1xuICAgIHJldHVybiArbmV3IERhdGVcbiAgfVxuIiwibW9kdWxlLmV4cG9ydHMgPSBpc1Byb21pc2U7XG5cbmZ1bmN0aW9uIGlzUHJvbWlzZShvYmopIHtcbiAgcmV0dXJuICEhb2JqICYmICh0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyB8fCB0eXBlb2Ygb2JqID09PSAnZnVuY3Rpb24nKSAmJiB0eXBlb2Ygb2JqLnRoZW4gPT09ICdmdW5jdGlvbic7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGlzTm9kZVxuXG5mdW5jdGlvbiBpc05vZGUgKHZhbCkge1xuICByZXR1cm4gKCF2YWwgfHwgdHlwZW9mIHZhbCAhPT0gJ29iamVjdCcpXG4gICAgPyBmYWxzZVxuICAgIDogKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnICYmIHR5cGVvZiB3aW5kb3cuTm9kZSA9PT0gJ29iamVjdCcpXG4gICAgICA/ICh2YWwgaW5zdGFuY2VvZiB3aW5kb3cuTm9kZSlcbiAgICAgIDogKHR5cGVvZiB2YWwubm9kZVR5cGUgPT09ICdudW1iZXInKSAmJlxuICAgICAgICAodHlwZW9mIHZhbC5ub2RlTmFtZSA9PT0gJ3N0cmluZycpXG59XG4iLCIvLyBUT0RPOiBXZSBjYW4gcmVtb3ZlIGEgaHVnZSBjaHVuayBvZiBidW5kbGUgc2l6ZSBieSB1c2luZyBhIHNtYWxsZXJcbi8vIHV0aWxpdHkgbW9kdWxlIGZvciBjb252ZXJ0aW5nIHVuaXRzLlxuaW1wb3J0IGlzRE9NIGZyb20gJ2lzLWRvbSc7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRDbGllbnRBUEkgKCkge1xuICByZXR1cm4gdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93WydjYW52YXMtc2tldGNoLWNsaSddO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGVmaW5lZCAoKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFyZ3VtZW50c1tpXSAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gYXJndW1lbnRzW2ldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNCcm93c2VyICgpIHtcbiAgcmV0dXJuIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1dlYkdMQ29udGV4dCAoY3R4KSB7XG4gIHJldHVybiB0eXBlb2YgY3R4LmNsZWFyID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjdHguY2xlYXJDb2xvciA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY3R4LmJ1ZmZlckRhdGEgPT09ICdmdW5jdGlvbic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0NhbnZhcyAoZWxlbWVudCkge1xuICByZXR1cm4gaXNET00oZWxlbWVudCkgJiYgL2NhbnZhcy9pLnRlc3QoZWxlbWVudC5ub2RlTmFtZSkgJiYgdHlwZW9mIGVsZW1lbnQuZ2V0Q29udGV4dCA9PT0gJ2Z1bmN0aW9uJztcbn1cbiIsIi8qIVxuICogcmVwZWF0LXN0cmluZyA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvcmVwZWF0LXN0cmluZz5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgSm9uIFNjaGxpbmtlcnQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFJlc3VsdHMgY2FjaGVcbiAqL1xuXG52YXIgcmVzID0gJyc7XG52YXIgY2FjaGU7XG5cbi8qKlxuICogRXhwb3NlIGByZXBlYXRgXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSByZXBlYXQ7XG5cbi8qKlxuICogUmVwZWF0IHRoZSBnaXZlbiBgc3RyaW5nYCB0aGUgc3BlY2lmaWVkIGBudW1iZXJgXG4gKiBvZiB0aW1lcy5cbiAqXG4gKiAqKkV4YW1wbGU6KipcbiAqXG4gKiBgYGBqc1xuICogdmFyIHJlcGVhdCA9IHJlcXVpcmUoJ3JlcGVhdC1zdHJpbmcnKTtcbiAqIHJlcGVhdCgnQScsIDUpO1xuICogLy89PiBBQUFBQVxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGBzdHJpbmdgIFRoZSBzdHJpbmcgdG8gcmVwZWF0XG4gKiBAcGFyYW0ge051bWJlcn0gYG51bWJlcmAgVGhlIG51bWJlciBvZiB0aW1lcyB0byByZXBlYXQgdGhlIHN0cmluZ1xuICogQHJldHVybiB7U3RyaW5nfSBSZXBlYXRlZCBzdHJpbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gcmVwZWF0KHN0ciwgbnVtKSB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4cGVjdGVkIGEgc3RyaW5nJyk7XG4gIH1cblxuICAvLyBjb3ZlciBjb21tb24sIHF1aWNrIHVzZSBjYXNlc1xuICBpZiAobnVtID09PSAxKSByZXR1cm4gc3RyO1xuICBpZiAobnVtID09PSAyKSByZXR1cm4gc3RyICsgc3RyO1xuXG4gIHZhciBtYXggPSBzdHIubGVuZ3RoICogbnVtO1xuICBpZiAoY2FjaGUgIT09IHN0ciB8fCB0eXBlb2YgY2FjaGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgY2FjaGUgPSBzdHI7XG4gICAgcmVzID0gJyc7XG4gIH0gZWxzZSBpZiAocmVzLmxlbmd0aCA+PSBtYXgpIHtcbiAgICByZXR1cm4gcmVzLnN1YnN0cigwLCBtYXgpO1xuICB9XG5cbiAgd2hpbGUgKG1heCA+IHJlcy5sZW5ndGggJiYgbnVtID4gMSkge1xuICAgIGlmIChudW0gJiAxKSB7XG4gICAgICByZXMgKz0gc3RyO1xuICAgIH1cblxuICAgIG51bSA+Pj0gMTtcbiAgICBzdHIgKz0gc3RyO1xuICB9XG5cbiAgcmVzICs9IHN0cjtcbiAgcmVzID0gcmVzLnN1YnN0cigwLCBtYXgpO1xuICByZXR1cm4gcmVzO1xufVxuIiwiZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIE9iamVjdC5rZXlzID09PSAnZnVuY3Rpb24nXG4gID8gT2JqZWN0LmtleXMgOiBzaGltO1xuXG5leHBvcnRzLnNoaW0gPSBzaGltO1xuZnVuY3Rpb24gc2hpbSAob2JqKSB7XG4gIHZhciBrZXlzID0gW107XG4gIGZvciAodmFyIGtleSBpbiBvYmopIGtleXMucHVzaChrZXkpO1xuICByZXR1cm4ga2V5cztcbn1cbiIsInZhciBzdXBwb3J0c0FyZ3VtZW50c0NsYXNzID0gKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnRzKVxufSkoKSA9PSAnW29iamVjdCBBcmd1bWVudHNdJztcblxuZXhwb3J0cyA9IG1vZHVsZS5leHBvcnRzID0gc3VwcG9ydHNBcmd1bWVudHNDbGFzcyA/IHN1cHBvcnRlZCA6IHVuc3VwcG9ydGVkO1xuXG5leHBvcnRzLnN1cHBvcnRlZCA9IHN1cHBvcnRlZDtcbmZ1bmN0aW9uIHN1cHBvcnRlZChvYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xufTtcblxuZXhwb3J0cy51bnN1cHBvcnRlZCA9IHVuc3VwcG9ydGVkO1xuZnVuY3Rpb24gdW5zdXBwb3J0ZWQob2JqZWN0KXtcbiAgcmV0dXJuIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2Ygb2JqZWN0Lmxlbmd0aCA9PSAnbnVtYmVyJyAmJlxuICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsICdjYWxsZWUnKSAmJlxuICAgICFPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwob2JqZWN0LCAnY2FsbGVlJykgfHxcbiAgICBmYWxzZTtcbn07XG4iLCJ2YXIgcFNsaWNlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlO1xudmFyIG9iamVjdEtleXMgPSByZXF1aXJlKCcuL2xpYi9rZXlzLmpzJyk7XG52YXIgaXNBcmd1bWVudHMgPSByZXF1aXJlKCcuL2xpYi9pc19hcmd1bWVudHMuanMnKTtcblxudmFyIGRlZXBFcXVhbCA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFjdHVhbCwgZXhwZWN0ZWQsIG9wdHMpIHtcbiAgaWYgKCFvcHRzKSBvcHRzID0ge307XG4gIC8vIDcuMS4gQWxsIGlkZW50aWNhbCB2YWx1ZXMgYXJlIGVxdWl2YWxlbnQsIGFzIGRldGVybWluZWQgYnkgPT09LlxuICBpZiAoYWN0dWFsID09PSBleHBlY3RlZCkge1xuICAgIHJldHVybiB0cnVlO1xuXG4gIH0gZWxzZSBpZiAoYWN0dWFsIGluc3RhbmNlb2YgRGF0ZSAmJiBleHBlY3RlZCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICByZXR1cm4gYWN0dWFsLmdldFRpbWUoKSA9PT0gZXhwZWN0ZWQuZ2V0VGltZSgpO1xuXG4gIC8vIDcuMy4gT3RoZXIgcGFpcnMgdGhhdCBkbyBub3QgYm90aCBwYXNzIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0JyxcbiAgLy8gZXF1aXZhbGVuY2UgaXMgZGV0ZXJtaW5lZCBieSA9PS5cbiAgfSBlbHNlIGlmICghYWN0dWFsIHx8ICFleHBlY3RlZCB8fCB0eXBlb2YgYWN0dWFsICE9ICdvYmplY3QnICYmIHR5cGVvZiBleHBlY3RlZCAhPSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBvcHRzLnN0cmljdCA/IGFjdHVhbCA9PT0gZXhwZWN0ZWQgOiBhY3R1YWwgPT0gZXhwZWN0ZWQ7XG5cbiAgLy8gNy40LiBGb3IgYWxsIG90aGVyIE9iamVjdCBwYWlycywgaW5jbHVkaW5nIEFycmF5IG9iamVjdHMsIGVxdWl2YWxlbmNlIGlzXG4gIC8vIGRldGVybWluZWQgYnkgaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChhcyB2ZXJpZmllZFxuICAvLyB3aXRoIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCksIHRoZSBzYW1lIHNldCBvZiBrZXlzXG4gIC8vIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLCBlcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnlcbiAgLy8gY29ycmVzcG9uZGluZyBrZXksIGFuZCBhbiBpZGVudGljYWwgJ3Byb3RvdHlwZScgcHJvcGVydHkuIE5vdGU6IHRoaXNcbiAgLy8gYWNjb3VudHMgZm9yIGJvdGggbmFtZWQgYW5kIGluZGV4ZWQgcHJvcGVydGllcyBvbiBBcnJheXMuXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIG9iakVxdWl2KGFjdHVhbCwgZXhwZWN0ZWQsIG9wdHMpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzVW5kZWZpbmVkT3JOdWxsKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBpc0J1ZmZlciAoeCkge1xuICBpZiAoIXggfHwgdHlwZW9mIHggIT09ICdvYmplY3QnIHx8IHR5cGVvZiB4Lmxlbmd0aCAhPT0gJ251bWJlcicpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiB4LmNvcHkgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHguc2xpY2UgIT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHgubGVuZ3RoID4gMCAmJiB0eXBlb2YgeFswXSAhPT0gJ251bWJlcicpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG9iakVxdWl2KGEsIGIsIG9wdHMpIHtcbiAgdmFyIGksIGtleTtcbiAgaWYgKGlzVW5kZWZpbmVkT3JOdWxsKGEpIHx8IGlzVW5kZWZpbmVkT3JOdWxsKGIpKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy8gYW4gaWRlbnRpY2FsICdwcm90b3R5cGUnIHByb3BlcnR5LlxuICBpZiAoYS5wcm90b3R5cGUgIT09IGIucHJvdG90eXBlKSByZXR1cm4gZmFsc2U7XG4gIC8vfn5+SSd2ZSBtYW5hZ2VkIHRvIGJyZWFrIE9iamVjdC5rZXlzIHRocm91Z2ggc2NyZXd5IGFyZ3VtZW50cyBwYXNzaW5nLlxuICAvLyAgIENvbnZlcnRpbmcgdG8gYXJyYXkgc29sdmVzIHRoZSBwcm9ibGVtLlxuICBpZiAoaXNBcmd1bWVudHMoYSkpIHtcbiAgICBpZiAoIWlzQXJndW1lbnRzKGIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGEgPSBwU2xpY2UuY2FsbChhKTtcbiAgICBiID0gcFNsaWNlLmNhbGwoYik7XG4gICAgcmV0dXJuIGRlZXBFcXVhbChhLCBiLCBvcHRzKTtcbiAgfVxuICBpZiAoaXNCdWZmZXIoYSkpIHtcbiAgICBpZiAoIWlzQnVmZmVyKGIpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGlmIChhLmxlbmd0aCAhPT0gYi5sZW5ndGgpIHJldHVybiBmYWxzZTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFbaV0gIT09IGJbaV0pIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgdHJ5IHtcbiAgICB2YXIga2EgPSBvYmplY3RLZXlzKGEpLFxuICAgICAgICBrYiA9IG9iamVjdEtleXMoYik7XG4gIH0gY2F0Y2ggKGUpIHsvL2hhcHBlbnMgd2hlbiBvbmUgaXMgYSBzdHJpbmcgbGl0ZXJhbCBhbmQgdGhlIG90aGVyIGlzbid0XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIC8vIGhhdmluZyB0aGUgc2FtZSBudW1iZXIgb2Ygb3duZWQgcHJvcGVydGllcyAoa2V5cyBpbmNvcnBvcmF0ZXNcbiAgLy8gaGFzT3duUHJvcGVydHkpXG4gIGlmIChrYS5sZW5ndGggIT0ga2IubGVuZ3RoKVxuICAgIHJldHVybiBmYWxzZTtcbiAgLy90aGUgc2FtZSBzZXQgb2Yga2V5cyAoYWx0aG91Z2ggbm90IG5lY2Vzc2FyaWx5IHRoZSBzYW1lIG9yZGVyKSxcbiAga2Euc29ydCgpO1xuICBrYi5zb3J0KCk7XG4gIC8vfn5+Y2hlYXAga2V5IHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBpZiAoa2FbaV0gIT0ga2JbaV0pXG4gICAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy9lcXVpdmFsZW50IHZhbHVlcyBmb3IgZXZlcnkgY29ycmVzcG9uZGluZyBrZXksIGFuZFxuICAvL35+fnBvc3NpYmx5IGV4cGVuc2l2ZSBkZWVwIHRlc3RcbiAgZm9yIChpID0ga2EubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICBrZXkgPSBrYVtpXTtcbiAgICBpZiAoIWRlZXBFcXVhbChhW2tleV0sIGJba2V5XSwgb3B0cykpIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHlwZW9mIGEgPT09IHR5cGVvZiBiO1xufVxuIiwiLypcbiAqIERhdGUgRm9ybWF0IDEuMi4zXG4gKiAoYykgMjAwNy0yMDA5IFN0ZXZlbiBMZXZpdGhhbiA8c3RldmVubGV2aXRoYW4uY29tPlxuICogTUlUIGxpY2Vuc2VcbiAqXG4gKiBJbmNsdWRlcyBlbmhhbmNlbWVudHMgYnkgU2NvdHQgVHJlbmRhIDxzY290dC50cmVuZGEubmV0PlxuICogYW5kIEtyaXMgS293YWwgPGNpeGFyLmNvbS9+a3Jpcy5rb3dhbC8+XG4gKlxuICogQWNjZXB0cyBhIGRhdGUsIGEgbWFzaywgb3IgYSBkYXRlIGFuZCBhIG1hc2suXG4gKiBSZXR1cm5zIGEgZm9ybWF0dGVkIHZlcnNpb24gb2YgdGhlIGdpdmVuIGRhdGUuXG4gKiBUaGUgZGF0ZSBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBkYXRlL3RpbWUuXG4gKiBUaGUgbWFzayBkZWZhdWx0cyB0byBkYXRlRm9ybWF0Lm1hc2tzLmRlZmF1bHQuXG4gKi9cblxuKGZ1bmN0aW9uKGdsb2JhbCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgdmFyIGRhdGVGb3JtYXQgPSAoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdG9rZW4gPSAvZHsxLDR9fG17MSw0fXx5eSg/Onl5KT98KFtIaE1zVHRdKVxcMT98W0xsb1NaV05dfFwiW15cIl0qXCJ8J1teJ10qJy9nO1xuICAgICAgdmFyIHRpbWV6b25lID0gL1xcYig/OltQTUNFQV1bU0RQXVR8KD86UGFjaWZpY3xNb3VudGFpbnxDZW50cmFsfEVhc3Rlcm58QXRsYW50aWMpICg/OlN0YW5kYXJkfERheWxpZ2h0fFByZXZhaWxpbmcpIFRpbWV8KD86R01UfFVUQykoPzpbLStdXFxkezR9KT8pXFxiL2c7XG4gICAgICB2YXIgdGltZXpvbmVDbGlwID0gL1teLStcXGRBLVpdL2c7XG4gIFxuICAgICAgLy8gUmVnZXhlcyBhbmQgc3VwcG9ydGluZyBmdW5jdGlvbnMgYXJlIGNhY2hlZCB0aHJvdWdoIGNsb3N1cmVcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZGF0ZSwgbWFzaywgdXRjLCBnbXQpIHtcbiAgXG4gICAgICAgIC8vIFlvdSBjYW4ndCBwcm92aWRlIHV0YyBpZiB5b3Ugc2tpcCBvdGhlciBhcmdzICh1c2UgdGhlICdVVEM6JyBtYXNrIHByZWZpeClcbiAgICAgICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDEgJiYga2luZE9mKGRhdGUpID09PSAnc3RyaW5nJyAmJiAhL1xcZC8udGVzdChkYXRlKSkge1xuICAgICAgICAgIG1hc2sgPSBkYXRlO1xuICAgICAgICAgIGRhdGUgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgXG4gICAgICAgIGRhdGUgPSBkYXRlIHx8IG5ldyBEYXRlO1xuICBcbiAgICAgICAgaWYoIShkYXRlIGluc3RhbmNlb2YgRGF0ZSkpIHtcbiAgICAgICAgICBkYXRlID0gbmV3IERhdGUoZGF0ZSk7XG4gICAgICAgIH1cbiAgXG4gICAgICAgIGlmIChpc05hTihkYXRlKSkge1xuICAgICAgICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBkYXRlJyk7XG4gICAgICAgIH1cbiAgXG4gICAgICAgIG1hc2sgPSBTdHJpbmcoZGF0ZUZvcm1hdC5tYXNrc1ttYXNrXSB8fCBtYXNrIHx8IGRhdGVGb3JtYXQubWFza3NbJ2RlZmF1bHQnXSk7XG4gIFxuICAgICAgICAvLyBBbGxvdyBzZXR0aW5nIHRoZSB1dGMvZ210IGFyZ3VtZW50IHZpYSB0aGUgbWFza1xuICAgICAgICB2YXIgbWFza1NsaWNlID0gbWFzay5zbGljZSgwLCA0KTtcbiAgICAgICAgaWYgKG1hc2tTbGljZSA9PT0gJ1VUQzonIHx8IG1hc2tTbGljZSA9PT0gJ0dNVDonKSB7XG4gICAgICAgICAgbWFzayA9IG1hc2suc2xpY2UoNCk7XG4gICAgICAgICAgdXRjID0gdHJ1ZTtcbiAgICAgICAgICBpZiAobWFza1NsaWNlID09PSAnR01UOicpIHtcbiAgICAgICAgICAgIGdtdCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gIFxuICAgICAgICB2YXIgXyA9IHV0YyA/ICdnZXRVVEMnIDogJ2dldCc7XG4gICAgICAgIHZhciBkID0gZGF0ZVtfICsgJ0RhdGUnXSgpO1xuICAgICAgICB2YXIgRCA9IGRhdGVbXyArICdEYXknXSgpO1xuICAgICAgICB2YXIgbSA9IGRhdGVbXyArICdNb250aCddKCk7XG4gICAgICAgIHZhciB5ID0gZGF0ZVtfICsgJ0Z1bGxZZWFyJ10oKTtcbiAgICAgICAgdmFyIEggPSBkYXRlW18gKyAnSG91cnMnXSgpO1xuICAgICAgICB2YXIgTSA9IGRhdGVbXyArICdNaW51dGVzJ10oKTtcbiAgICAgICAgdmFyIHMgPSBkYXRlW18gKyAnU2Vjb25kcyddKCk7XG4gICAgICAgIHZhciBMID0gZGF0ZVtfICsgJ01pbGxpc2Vjb25kcyddKCk7XG4gICAgICAgIHZhciBvID0gdXRjID8gMCA6IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgICAgICAgdmFyIFcgPSBnZXRXZWVrKGRhdGUpO1xuICAgICAgICB2YXIgTiA9IGdldERheU9mV2VlayhkYXRlKTtcbiAgICAgICAgdmFyIGZsYWdzID0ge1xuICAgICAgICAgIGQ6ICAgIGQsXG4gICAgICAgICAgZGQ6ICAgcGFkKGQpLFxuICAgICAgICAgIGRkZDogIGRhdGVGb3JtYXQuaTE4bi5kYXlOYW1lc1tEXSxcbiAgICAgICAgICBkZGRkOiBkYXRlRm9ybWF0LmkxOG4uZGF5TmFtZXNbRCArIDddLFxuICAgICAgICAgIG06ICAgIG0gKyAxLFxuICAgICAgICAgIG1tOiAgIHBhZChtICsgMSksXG4gICAgICAgICAgbW1tOiAgZGF0ZUZvcm1hdC5pMThuLm1vbnRoTmFtZXNbbV0sXG4gICAgICAgICAgbW1tbTogZGF0ZUZvcm1hdC5pMThuLm1vbnRoTmFtZXNbbSArIDEyXSxcbiAgICAgICAgICB5eTogICBTdHJpbmcoeSkuc2xpY2UoMiksXG4gICAgICAgICAgeXl5eTogeSxcbiAgICAgICAgICBoOiAgICBIICUgMTIgfHwgMTIsXG4gICAgICAgICAgaGg6ICAgcGFkKEggJSAxMiB8fCAxMiksXG4gICAgICAgICAgSDogICAgSCxcbiAgICAgICAgICBISDogICBwYWQoSCksXG4gICAgICAgICAgTTogICAgTSxcbiAgICAgICAgICBNTTogICBwYWQoTSksXG4gICAgICAgICAgczogICAgcyxcbiAgICAgICAgICBzczogICBwYWQocyksXG4gICAgICAgICAgbDogICAgcGFkKEwsIDMpLFxuICAgICAgICAgIEw6ICAgIHBhZChNYXRoLnJvdW5kKEwgLyAxMCkpLFxuICAgICAgICAgIHQ6ICAgIEggPCAxMiA/IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbMF0gOiBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzFdLFxuICAgICAgICAgIHR0OiAgIEggPCAxMiA/IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbMl0gOiBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzNdLFxuICAgICAgICAgIFQ6ICAgIEggPCAxMiA/IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbNF0gOiBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzVdLFxuICAgICAgICAgIFRUOiAgIEggPCAxMiA/IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbNl0gOiBkYXRlRm9ybWF0LmkxOG4udGltZU5hbWVzWzddLFxuICAgICAgICAgIFo6ICAgIGdtdCA/ICdHTVQnIDogdXRjID8gJ1VUQycgOiAoU3RyaW5nKGRhdGUpLm1hdGNoKHRpbWV6b25lKSB8fCBbJyddKS5wb3AoKS5yZXBsYWNlKHRpbWV6b25lQ2xpcCwgJycpLFxuICAgICAgICAgIG86ICAgIChvID4gMCA/ICctJyA6ICcrJykgKyBwYWQoTWF0aC5mbG9vcihNYXRoLmFicyhvKSAvIDYwKSAqIDEwMCArIE1hdGguYWJzKG8pICUgNjAsIDQpLFxuICAgICAgICAgIFM6ICAgIFsndGgnLCAnc3QnLCAnbmQnLCAncmQnXVtkICUgMTAgPiAzID8gMCA6IChkICUgMTAwIC0gZCAlIDEwICE9IDEwKSAqIGQgJSAxMF0sXG4gICAgICAgICAgVzogICAgVyxcbiAgICAgICAgICBOOiAgICBOXG4gICAgICAgIH07XG4gIFxuICAgICAgICByZXR1cm4gbWFzay5yZXBsYWNlKHRva2VuLCBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgICAgICAgICBpZiAobWF0Y2ggaW4gZmxhZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBmbGFnc1ttYXRjaF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBtYXRjaC5zbGljZSgxLCBtYXRjaC5sZW5ndGggLSAxKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuICAgIH0pKCk7XG5cbiAgZGF0ZUZvcm1hdC5tYXNrcyA9IHtcbiAgICAnZGVmYXVsdCc6ICAgICAgICAgICAgICAgJ2RkZCBtbW0gZGQgeXl5eSBISDpNTTpzcycsXG4gICAgJ3Nob3J0RGF0ZSc6ICAgICAgICAgICAgICdtL2QveXknLFxuICAgICdtZWRpdW1EYXRlJzogICAgICAgICAgICAnbW1tIGQsIHl5eXknLFxuICAgICdsb25nRGF0ZSc6ICAgICAgICAgICAgICAnbW1tbSBkLCB5eXl5JyxcbiAgICAnZnVsbERhdGUnOiAgICAgICAgICAgICAgJ2RkZGQsIG1tbW0gZCwgeXl5eScsXG4gICAgJ3Nob3J0VGltZSc6ICAgICAgICAgICAgICdoOk1NIFRUJyxcbiAgICAnbWVkaXVtVGltZSc6ICAgICAgICAgICAgJ2g6TU06c3MgVFQnLFxuICAgICdsb25nVGltZSc6ICAgICAgICAgICAgICAnaDpNTTpzcyBUVCBaJyxcbiAgICAnaXNvRGF0ZSc6ICAgICAgICAgICAgICAgJ3l5eXktbW0tZGQnLFxuICAgICdpc29UaW1lJzogICAgICAgICAgICAgICAnSEg6TU06c3MnLFxuICAgICdpc29EYXRlVGltZSc6ICAgICAgICAgICAneXl5eS1tbS1kZFxcJ1RcXCdISDpNTTpzc28nLFxuICAgICdpc29VdGNEYXRlVGltZSc6ICAgICAgICAnVVRDOnl5eXktbW0tZGRcXCdUXFwnSEg6TU06c3NcXCdaXFwnJyxcbiAgICAnZXhwaXJlc0hlYWRlckZvcm1hdCc6ICAgJ2RkZCwgZGQgbW1tIHl5eXkgSEg6TU06c3MgWidcbiAgfTtcblxuICAvLyBJbnRlcm5hdGlvbmFsaXphdGlvbiBzdHJpbmdzXG4gIGRhdGVGb3JtYXQuaTE4biA9IHtcbiAgICBkYXlOYW1lczogW1xuICAgICAgJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsICdUaHUnLCAnRnJpJywgJ1NhdCcsXG4gICAgICAnU3VuZGF5JywgJ01vbmRheScsICdUdWVzZGF5JywgJ1dlZG5lc2RheScsICdUaHVyc2RheScsICdGcmlkYXknLCAnU2F0dXJkYXknXG4gICAgXSxcbiAgICBtb250aE5hbWVzOiBbXG4gICAgICAnSmFuJywgJ0ZlYicsICdNYXInLCAnQXByJywgJ01heScsICdKdW4nLCAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnLFxuICAgICAgJ0phbnVhcnknLCAnRmVicnVhcnknLCAnTWFyY2gnLCAnQXByaWwnLCAnTWF5JywgJ0p1bmUnLCAnSnVseScsICdBdWd1c3QnLCAnU2VwdGVtYmVyJywgJ09jdG9iZXInLCAnTm92ZW1iZXInLCAnRGVjZW1iZXInXG4gICAgXSxcbiAgICB0aW1lTmFtZXM6IFtcbiAgICAgICdhJywgJ3AnLCAnYW0nLCAncG0nLCAnQScsICdQJywgJ0FNJywgJ1BNJ1xuICAgIF1cbiAgfTtcblxuZnVuY3Rpb24gcGFkKHZhbCwgbGVuKSB7XG4gIHZhbCA9IFN0cmluZyh2YWwpO1xuICBsZW4gPSBsZW4gfHwgMjtcbiAgd2hpbGUgKHZhbC5sZW5ndGggPCBsZW4pIHtcbiAgICB2YWwgPSAnMCcgKyB2YWw7XG4gIH1cbiAgcmV0dXJuIHZhbDtcbn1cblxuLyoqXG4gKiBHZXQgdGhlIElTTyA4NjAxIHdlZWsgbnVtYmVyXG4gKiBCYXNlZCBvbiBjb21tZW50cyBmcm9tXG4gKiBodHRwOi8vdGVjaGJsb2cucHJvY3VyaW9zLm5sL2svbjYxOC9uZXdzL3ZpZXcvMzM3OTYvMTQ4NjMvQ2FsY3VsYXRlLUlTTy04NjAxLXdlZWstYW5kLXllYXItaW4tamF2YXNjcmlwdC5odG1sXG4gKlxuICogQHBhcmFtICB7T2JqZWN0fSBgZGF0ZWBcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0V2VlayhkYXRlKSB7XG4gIC8vIFJlbW92ZSB0aW1lIGNvbXBvbmVudHMgb2YgZGF0ZVxuICB2YXIgdGFyZ2V0VGh1cnNkYXkgPSBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpO1xuXG4gIC8vIENoYW5nZSBkYXRlIHRvIFRodXJzZGF5IHNhbWUgd2Vla1xuICB0YXJnZXRUaHVyc2RheS5zZXREYXRlKHRhcmdldFRodXJzZGF5LmdldERhdGUoKSAtICgodGFyZ2V0VGh1cnNkYXkuZ2V0RGF5KCkgKyA2KSAlIDcpICsgMyk7XG5cbiAgLy8gVGFrZSBKYW51YXJ5IDR0aCBhcyBpdCBpcyBhbHdheXMgaW4gd2VlayAxIChzZWUgSVNPIDg2MDEpXG4gIHZhciBmaXJzdFRodXJzZGF5ID0gbmV3IERhdGUodGFyZ2V0VGh1cnNkYXkuZ2V0RnVsbFllYXIoKSwgMCwgNCk7XG5cbiAgLy8gQ2hhbmdlIGRhdGUgdG8gVGh1cnNkYXkgc2FtZSB3ZWVrXG4gIGZpcnN0VGh1cnNkYXkuc2V0RGF0ZShmaXJzdFRodXJzZGF5LmdldERhdGUoKSAtICgoZmlyc3RUaHVyc2RheS5nZXREYXkoKSArIDYpICUgNykgKyAzKTtcblxuICAvLyBDaGVjayBpZiBkYXlsaWdodC1zYXZpbmctdGltZS1zd2l0Y2ggb2NjdXJyZWQgYW5kIGNvcnJlY3QgZm9yIGl0XG4gIHZhciBkcyA9IHRhcmdldFRodXJzZGF5LmdldFRpbWV6b25lT2Zmc2V0KCkgLSBmaXJzdFRodXJzZGF5LmdldFRpbWV6b25lT2Zmc2V0KCk7XG4gIHRhcmdldFRodXJzZGF5LnNldEhvdXJzKHRhcmdldFRodXJzZGF5LmdldEhvdXJzKCkgLSBkcyk7XG5cbiAgLy8gTnVtYmVyIG9mIHdlZWtzIGJldHdlZW4gdGFyZ2V0IFRodXJzZGF5IGFuZCBmaXJzdCBUaHVyc2RheVxuICB2YXIgd2Vla0RpZmYgPSAodGFyZ2V0VGh1cnNkYXkgLSBmaXJzdFRodXJzZGF5KSAvICg4NjQwMDAwMCo3KTtcbiAgcmV0dXJuIDEgKyBNYXRoLmZsb29yKHdlZWtEaWZmKTtcbn1cblxuLyoqXG4gKiBHZXQgSVNPLTg2MDEgbnVtZXJpYyByZXByZXNlbnRhdGlvbiBvZiB0aGUgZGF5IG9mIHRoZSB3ZWVrXG4gKiAxIChmb3IgTW9uZGF5KSB0aHJvdWdoIDcgKGZvciBTdW5kYXkpXG4gKiBcbiAqIEBwYXJhbSAge09iamVjdH0gYGRhdGVgXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKi9cbmZ1bmN0aW9uIGdldERheU9mV2VlayhkYXRlKSB7XG4gIHZhciBkb3cgPSBkYXRlLmdldERheSgpO1xuICBpZihkb3cgPT09IDApIHtcbiAgICBkb3cgPSA3O1xuICB9XG4gIHJldHVybiBkb3c7XG59XG5cbi8qKlxuICoga2luZC1vZiBzaG9ydGN1dFxuICogQHBhcmFtICB7Kn0gdmFsXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGtpbmRPZih2YWwpIHtcbiAgaWYgKHZhbCA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnbnVsbCc7XG4gIH1cblxuICBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gJ3VuZGVmaW5lZCc7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbCAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbDtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICByZXR1cm4gJ2FycmF5JztcbiAgfVxuXG4gIHJldHVybiB7fS50b1N0cmluZy5jYWxsKHZhbClcbiAgICAuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKCk7XG59O1xuXG5cblxuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgZGVmaW5lKGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBkYXRlRm9ybWF0O1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0Jykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZGF0ZUZvcm1hdDtcbiAgfSBlbHNlIHtcbiAgICBnbG9iYWwuZGF0ZUZvcm1hdCA9IGRhdGVGb3JtYXQ7XG4gIH1cbn0pKHRoaXMpO1xuIiwiLyohXG4gKiBwYWQtbGVmdCA8aHR0cHM6Ly9naXRodWIuY29tL2pvbnNjaGxpbmtlcnQvcGFkLWxlZnQ+XG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LTIwMTUsIEpvbiBTY2hsaW5rZXJ0LlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICovXG5cbid1c2Ugc3RyaWN0JztcblxudmFyIHJlcGVhdCA9IHJlcXVpcmUoJ3JlcGVhdC1zdHJpbmcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYWRMZWZ0KHN0ciwgbnVtLCBjaCkge1xuICBzdHIgPSBzdHIudG9TdHJpbmcoKTtcblxuICBpZiAodHlwZW9mIG51bSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgaWYgKGNoID09PSAwKSB7XG4gICAgY2ggPSAnMCc7XG4gIH0gZWxzZSBpZiAoY2gpIHtcbiAgICBjaCA9IGNoLnRvU3RyaW5nKCk7XG4gIH0gZWxzZSB7XG4gICAgY2ggPSAnICc7XG4gIH1cblxuICByZXR1cm4gcmVwZWF0KGNoLCBudW0gLSBzdHIubGVuZ3RoKSArIHN0cjtcbn07XG4iLCJpbXBvcnQgZGF0ZWZvcm1hdCBmcm9tICdkYXRlZm9ybWF0JztcbmltcG9ydCBhc3NpZ24gZnJvbSAnb2JqZWN0LWFzc2lnbic7XG5pbXBvcnQgcGFkTGVmdCBmcm9tICdwYWQtbGVmdCc7XG5pbXBvcnQgeyBnZXRDbGllbnRBUEkgfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCBub29wID0gKCkgPT4ge307XG5sZXQgbGluaztcbmxldCBkZWZhdWx0RXh0cyA9IHsgZXh0ZW5zaW9uOiAnJywgcHJlZml4OiAnJywgc3VmZml4OiAnJyB9O1xuXG4vLyBBbHRlcm5hdGl2ZSBzb2x1dGlvbiBmb3Igc2F2aW5nIGZpbGVzLFxuLy8gYSBiaXQgc2xvd2VyIGFuZCBkb2VzIG5vdCB3b3JrIGluIFNhZmFyaVxuLy8gZnVuY3Rpb24gZmV0Y2hCbG9iRnJvbURhdGFVUkwgKGRhdGFVUkwpIHtcbi8vICAgcmV0dXJuIHdpbmRvdy5mZXRjaChkYXRhVVJMKS50aGVuKHJlcyA9PiByZXMuYmxvYigpKTtcbi8vIH1cblxuY29uc3Qgc3VwcG9ydGVkRW5jb2RpbmdzID0gW1xuICAnaW1hZ2UvcG5nJyxcbiAgJ2ltYWdlL2pwZWcnLFxuICAnaW1hZ2Uvd2VicCdcbl07XG5cbmZ1bmN0aW9uIHN0cmVhbSAoaXNTdGFydCwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgb3B0cyA9IGFzc2lnbih7fSwgZGVmYXVsdEV4dHMsIG9wdHMpO1xuICAgIGNvbnN0IGZpbGVuYW1lID0gcmVzb2x2ZUZpbGVuYW1lKE9iamVjdC5hc3NpZ24oe30sIG9wdHMsIHtcbiAgICAgIGV4dGVuc2lvbjogJycsXG4gICAgICBmcmFtZTogdW5kZWZpbmVkXG4gICAgfSkpO1xuICAgIGNvbnN0IGZ1bmMgPSBpc1N0YXJ0ID8gJ3N0cmVhbVN0YXJ0JyA6ICdzdHJlYW1FbmQnO1xuICAgIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICAgIGlmIChjbGllbnQgJiYgY2xpZW50Lm91dHB1dCAmJiB0eXBlb2YgY2xpZW50W2Z1bmNdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gY2xpZW50W2Z1bmNdKGFzc2lnbih7fSwgb3B0cywgeyBmaWxlbmFtZSB9KSlcbiAgICAgICAgLnRoZW4oZXYgPT4gcmVzb2x2ZShldikpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZSh7IGZpbGVuYW1lLCBjbGllbnQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJlYW1TdGFydCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBzdHJlYW0odHJ1ZSwgb3B0cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJlYW1FbmQgKG9wdHMgPSB7fSkge1xuICByZXR1cm4gc3RyZWFtKGZhbHNlLCBvcHRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9ydENhbnZhcyAoY2FudmFzLCBvcHQgPSB7fSkge1xuICBjb25zdCBlbmNvZGluZyA9IG9wdC5lbmNvZGluZyB8fCAnaW1hZ2UvcG5nJztcbiAgaWYgKCFzdXBwb3J0ZWRFbmNvZGluZ3MuaW5jbHVkZXMoZW5jb2RpbmcpKSB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgY2FudmFzIGVuY29kaW5nICR7ZW5jb2Rpbmd9YCk7XG4gIGxldCBleHRlbnNpb24gPSAoZW5jb2Rpbmcuc3BsaXQoJy8nKVsxXSB8fCAnJykucmVwbGFjZSgvanBlZy9pLCAnanBnJyk7XG4gIGlmIChleHRlbnNpb24pIGV4dGVuc2lvbiA9IGAuJHtleHRlbnNpb259YC50b0xvd2VyQ2FzZSgpO1xuICByZXR1cm4ge1xuICAgIGV4dGVuc2lvbixcbiAgICB0eXBlOiBlbmNvZGluZyxcbiAgICBkYXRhVVJMOiBjYW52YXMudG9EYXRhVVJMKGVuY29kaW5nLCBvcHQuZW5jb2RpbmdRdWFsaXR5KVxuICB9O1xufVxuXG5mdW5jdGlvbiBjcmVhdGVCbG9iRnJvbURhdGFVUkwgKGRhdGFVUkwpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgY29uc3Qgc3BsaXRJbmRleCA9IGRhdGFVUkwuaW5kZXhPZignLCcpO1xuICAgIGlmIChzcGxpdEluZGV4ID09PSAtMSkge1xuICAgICAgcmVzb2x2ZShuZXcgd2luZG93LkJsb2IoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGJhc2U2NCA9IGRhdGFVUkwuc2xpY2Uoc3BsaXRJbmRleCArIDEpO1xuICAgIGNvbnN0IGJ5dGVTdHJpbmcgPSB3aW5kb3cuYXRvYihiYXNlNjQpO1xuICAgIGNvbnN0IHR5cGUgPSBkYXRhVVJMLnNsaWNlKDAsIHNwbGl0SW5kZXgpO1xuICAgIGNvbnN0IG1pbWVNYXRjaCA9IC9kYXRhOihbXjtdKykvLmV4ZWModHlwZSk7XG4gICAgY29uc3QgbWltZSA9IChtaW1lTWF0Y2ggPyBtaW1lTWF0Y2hbMV0gOiAnJykgfHwgdW5kZWZpbmVkO1xuICAgIGNvbnN0IGFiID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVTdHJpbmcubGVuZ3RoKTtcbiAgICBjb25zdCBpYSA9IG5ldyBVaW50OEFycmF5KGFiKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlhW2ldID0gYnl0ZVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICByZXNvbHZlKG5ldyB3aW5kb3cuQmxvYihbIGFiIF0sIHsgdHlwZTogbWltZSB9KSk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZURhdGFVUkwgKGRhdGFVUkwsIG9wdHMgPSB7fSkge1xuICByZXR1cm4gY3JlYXRlQmxvYkZyb21EYXRhVVJMKGRhdGFVUkwpXG4gICAgLnRoZW4oYmxvYiA9PiBzYXZlQmxvYihibG9iLCBvcHRzKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXZlQmxvYiAoYmxvYiwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICBvcHRzID0gYXNzaWduKHt9LCBkZWZhdWx0RXh0cywgb3B0cyk7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBvcHRzLmZpbGVuYW1lO1xuXG4gICAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gICAgaWYgKGNsaWVudCAmJiB0eXBlb2YgY2xpZW50LnNhdmVCbG9iID09PSAnZnVuY3Rpb24nICYmIGNsaWVudC5vdXRwdXQpIHtcbiAgICAgIC8vIG5hdGl2ZSBzYXZpbmcgdXNpbmcgYSBDTEkgdG9vbFxuICAgICAgcmV0dXJuIGNsaWVudC5zYXZlQmxvYihibG9iLCBhc3NpZ24oe30sIG9wdHMsIHsgZmlsZW5hbWUgfSkpXG4gICAgICAgIC50aGVuKGV2ID0+IHJlc29sdmUoZXYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gZm9yY2UgZG93bmxvYWRcbiAgICAgIGlmICghbGluaykge1xuICAgICAgICBsaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICBsaW5rLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgbGluay50YXJnZXQgPSAnX2JsYW5rJztcbiAgICAgIH1cbiAgICAgIGxpbmsuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICAgIGxpbmsuaHJlZiA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICAgIGxpbmsub25jbGljayA9ICgpID0+IHtcbiAgICAgICAgbGluay5vbmNsaWNrID0gbm9vcDtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgd2luZG93LlVSTC5yZXZva2VPYmplY3RVUkwoYmxvYik7XG4gICAgICAgICAgaWYgKGxpbmsucGFyZW50RWxlbWVudCkgbGluay5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGxpbmspO1xuICAgICAgICAgIGxpbmsucmVtb3ZlQXR0cmlidXRlKCdocmVmJyk7XG4gICAgICAgICAgcmVzb2x2ZSh7IGZpbGVuYW1lLCBjbGllbnQ6IGZhbHNlIH0pO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgICBsaW5rLmNsaWNrKCk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdmVGaWxlIChkYXRhLCBvcHRzID0ge30pIHtcbiAgY29uc3QgcGFydHMgPSBBcnJheS5pc0FycmF5KGRhdGEpID8gZGF0YSA6IFsgZGF0YSBdO1xuICBjb25zdCBibG9iID0gbmV3IHdpbmRvdy5CbG9iKHBhcnRzLCB7IHR5cGU6IG9wdHMudHlwZSB8fCAnJyB9KTtcbiAgcmV0dXJuIHNhdmVCbG9iKGJsb2IsIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VGltZVN0YW1wICgpIHtcbiAgY29uc3QgZGF0ZUZvcm1hdFN0ciA9IGB5eXl5Lm1tLmRkLUhILk1NLnNzYDtcbiAgcmV0dXJuIGRhdGVmb3JtYXQobmV3IERhdGUoKSwgZGF0ZUZvcm1hdFN0cik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXREZWZhdWx0RmlsZSAocHJlZml4ID0gJycsIHN1ZmZpeCA9ICcnLCBleHQpIHtcbiAgLy8gY29uc3QgZGF0ZUZvcm1hdFN0ciA9IGB5eXl5Lm1tLmRkLUhILk1NLnNzYDtcbiAgY29uc3QgZGF0ZUZvcm1hdFN0ciA9IGB5eXl5LW1tLWRkICdhdCcgaC5NTS5zcyBUVGA7XG4gIHJldHVybiBgJHtwcmVmaXh9JHtkYXRlZm9ybWF0KG5ldyBEYXRlKCksIGRhdGVGb3JtYXRTdHIpfSR7c3VmZml4fSR7ZXh0fWA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlRmlsZW5hbWUgKG9wdCA9IHt9KSB7XG4gIG9wdCA9IGFzc2lnbih7fSwgb3B0KTtcblxuICAvLyBDdXN0b20gZmlsZW5hbWUgZnVuY3Rpb25cbiAgaWYgKHR5cGVvZiBvcHQuZmlsZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBvcHQuZmlsZShvcHQpO1xuICB9IGVsc2UgaWYgKG9wdC5maWxlKSB7XG4gICAgcmV0dXJuIG9wdC5maWxlO1xuICB9XG5cbiAgbGV0IGZyYW1lID0gbnVsbDtcbiAgbGV0IGV4dGVuc2lvbiA9ICcnO1xuICBpZiAodHlwZW9mIG9wdC5leHRlbnNpb24gPT09ICdzdHJpbmcnKSBleHRlbnNpb24gPSBvcHQuZXh0ZW5zaW9uO1xuXG4gIGlmICh0eXBlb2Ygb3B0LmZyYW1lID09PSAnbnVtYmVyJykge1xuICAgIGxldCB0b3RhbEZyYW1lcztcbiAgICBpZiAodHlwZW9mIG9wdC50b3RhbEZyYW1lcyA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRvdGFsRnJhbWVzID0gb3B0LnRvdGFsRnJhbWVzO1xuICAgIH0gZWxzZSB7XG4gICAgICB0b3RhbEZyYW1lcyA9IE1hdGgubWF4KDEwMDAwLCBvcHQuZnJhbWUpO1xuICAgIH1cbiAgICBmcmFtZSA9IHBhZExlZnQoU3RyaW5nKG9wdC5mcmFtZSksIFN0cmluZyh0b3RhbEZyYW1lcykubGVuZ3RoLCAnMCcpO1xuICB9XG5cbiAgY29uc3QgbGF5ZXJTdHIgPSBpc0Zpbml0ZShvcHQudG90YWxMYXllcnMpICYmIGlzRmluaXRlKG9wdC5sYXllcikgJiYgb3B0LnRvdGFsTGF5ZXJzID4gMSA/IGAke29wdC5sYXllcn1gIDogJyc7XG4gIGlmIChmcmFtZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIFsgbGF5ZXJTdHIsIGZyYW1lIF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy0nKSArIGV4dGVuc2lvbjtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBkZWZhdWx0RmlsZU5hbWUgPSBvcHQudGltZVN0YW1wO1xuICAgIHJldHVybiBbIG9wdC5wcmVmaXgsIG9wdC5uYW1lIHx8IGRlZmF1bHRGaWxlTmFtZSwgbGF5ZXJTdHIsIG9wdC5oYXNoLCBvcHQuc3VmZml4IF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oJy0nKSArIGV4dGVuc2lvbjtcbiAgfVxufVxuIiwiLy8gSGFuZGxlIHNvbWUgY29tbW9uIHR5cG9zXG5jb25zdCBjb21tb25UeXBvcyA9IHtcbiAgZGltZW5zaW9uOiAnZGltZW5zaW9ucycsXG4gIGFuaW1hdGVkOiAnYW5pbWF0ZScsXG4gIGFuaW1hdGluZzogJ2FuaW1hdGUnLFxuICB1bml0OiAndW5pdHMnLFxuICBQNTogJ3A1JyxcbiAgcGl4ZWxsYXRlZDogJ3BpeGVsYXRlZCcsXG4gIGxvb3Bpbmc6ICdsb29wJyxcbiAgcGl4ZWxQZXJJbmNoOiAncGl4ZWxzJ1xufTtcblxuLy8gSGFuZGxlIGFsbCBvdGhlciB0eXBvc1xuY29uc3QgYWxsS2V5cyA9IFtcbiAgJ2RpbWVuc2lvbnMnLCAndW5pdHMnLCAncGl4ZWxzUGVySW5jaCcsICdvcmllbnRhdGlvbicsXG4gICdzY2FsZVRvRml0JywgJ3NjYWxlVG9WaWV3JywgJ2JsZWVkJywgJ3BpeGVsUmF0aW8nLFxuICAnZXhwb3J0UGl4ZWxSYXRpbycsICdtYXhQaXhlbFJhdGlvJywgJ3NjYWxlQ29udGV4dCcsXG4gICdyZXNpemVDYW52YXMnLCAnc3R5bGVDYW52YXMnLCAnY2FudmFzJywgJ2NvbnRleHQnLCAnYXR0cmlidXRlcycsXG4gICdwYXJlbnQnLCAnZmlsZScsICduYW1lJywgJ3ByZWZpeCcsICdzdWZmaXgnLCAnYW5pbWF0ZScsICdwbGF5aW5nJyxcbiAgJ2xvb3AnLCAnZHVyYXRpb24nLCAndG90YWxGcmFtZXMnLCAnZnBzJywgJ3BsYXliYWNrUmF0ZScsICd0aW1lU2NhbGUnLFxuICAnZnJhbWUnLCAndGltZScsICdmbHVzaCcsICdwaXhlbGF0ZWQnLCAnaG90a2V5cycsICdwNScsICdpZCcsXG4gICdzY2FsZVRvRml0UGFkZGluZycsICdkYXRhJywgJ3BhcmFtcycsICdlbmNvZGluZycsICdlbmNvZGluZ1F1YWxpdHknXG5dO1xuXG4vLyBUaGlzIGlzIGZhaXJseSBvcGluaW9uYXRlZCBhbmQgZm9yY2VzIHVzZXJzIHRvIHVzZSB0aGUgJ2RhdGEnIHBhcmFtZXRlclxuLy8gaWYgdGhleSB3YW50IHRvIHBhc3MgYWxvbmcgbm9uLXNldHRpbmcgb2JqZWN0cy4uLlxuZXhwb3J0IGNvbnN0IGNoZWNrU2V0dGluZ3MgPSAoc2V0dGluZ3MpID0+IHtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHNldHRpbmdzKTtcbiAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgaWYgKGtleSBpbiBjb21tb25UeXBvcykge1xuICAgICAgY29uc3QgYWN0dWFsID0gY29tbW9uVHlwb3Nba2V5XTtcbiAgICAgIGNvbnNvbGUud2FybihgW2NhbnZhcy1za2V0Y2hdIENvdWxkIG5vdCByZWNvZ25pemUgdGhlIHNldHRpbmcgXCIke2tleX1cIiwgZGlkIHlvdSBtZWFuIFwiJHthY3R1YWx9XCI/YCk7XG4gICAgfSBlbHNlIGlmICghYWxsS2V5cy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFtjYW52YXMtc2tldGNoXSBDb3VsZCBub3QgcmVjb2duaXplIHRoZSBzZXR0aW5nIFwiJHtrZXl9XCJgKTtcbiAgICB9XG4gIH0pO1xufTtcbiIsImNvbnN0IGRlZmF1bHRVbml0cyA9ICdtbSc7XG5cbmNvbnN0IGRhdGEgPSBbXG4gIC8vIENvbW1vbiBQYXBlciBTaXplc1xuICAvLyAoTW9zdGx5IE5vcnRoLUFtZXJpY2FuIGJhc2VkKVxuICBbICdwb3N0Y2FyZCcsIDEwMS42LCAxNTIuNCBdLFxuICBbICdwb3N0ZXItc21hbGwnLCAyODAsIDQzMCBdLFxuICBbICdwb3N0ZXInLCA0NjAsIDYxMCBdLFxuICBbICdwb3N0ZXItbGFyZ2UnLCA2MTAsIDkxMCBdLFxuICBbICdidXNpbmVzcy1jYXJkJywgNTAuOCwgODguOSBdLFxuXG4gIC8vIFBob3RvZ3JhcGhpYyBQcmludCBQYXBlciBTaXplc1xuICBbICcycicsIDY0LCA4OSBdLFxuICBbICczcicsIDg5LCAxMjcgXSxcbiAgWyAnNHInLCAxMDIsIDE1MiBdLFxuICBbICc1cicsIDEyNywgMTc4IF0sIC8vIDXigLN4N+KAs1xuICBbICc2cicsIDE1MiwgMjAzIF0sIC8vIDbigLN4OOKAs1xuICBbICc4cicsIDIwMywgMjU0IF0sIC8vIDjigLN4MTDigLNcbiAgWyAnMTByJywgMjU0LCAzMDUgXSwgLy8gMTDigLN4MTLigLNcbiAgWyAnMTFyJywgMjc5LCAzNTYgXSwgLy8gMTHigLN4MTTigLNcbiAgWyAnMTJyJywgMzA1LCAzODEgXSxcblxuICAvLyBTdGFuZGFyZCBQYXBlciBTaXplc1xuICBbICdhMCcsIDg0MSwgMTE4OSBdLFxuICBbICdhMScsIDU5NCwgODQxIF0sXG4gIFsgJ2EyJywgNDIwLCA1OTQgXSxcbiAgWyAnYTMnLCAyOTcsIDQyMCBdLFxuICBbICdhNCcsIDIxMCwgMjk3IF0sXG4gIFsgJ2E1JywgMTQ4LCAyMTAgXSxcbiAgWyAnYTYnLCAxMDUsIDE0OCBdLFxuICBbICdhNycsIDc0LCAxMDUgXSxcbiAgWyAnYTgnLCA1MiwgNzQgXSxcbiAgWyAnYTknLCAzNywgNTIgXSxcbiAgWyAnYTEwJywgMjYsIDM3IF0sXG4gIFsgJzJhMCcsIDExODksIDE2ODIgXSxcbiAgWyAnNGEwJywgMTY4MiwgMjM3OCBdLFxuICBbICdiMCcsIDEwMDAsIDE0MTQgXSxcbiAgWyAnYjEnLCA3MDcsIDEwMDAgXSxcbiAgWyAnYjErJywgNzIwLCAxMDIwIF0sXG4gIFsgJ2IyJywgNTAwLCA3MDcgXSxcbiAgWyAnYjIrJywgNTIwLCA3MjAgXSxcbiAgWyAnYjMnLCAzNTMsIDUwMCBdLFxuICBbICdiNCcsIDI1MCwgMzUzIF0sXG4gIFsgJ2I1JywgMTc2LCAyNTAgXSxcbiAgWyAnYjYnLCAxMjUsIDE3NiBdLFxuICBbICdiNycsIDg4LCAxMjUgXSxcbiAgWyAnYjgnLCA2MiwgODggXSxcbiAgWyAnYjknLCA0NCwgNjIgXSxcbiAgWyAnYjEwJywgMzEsIDQ0IF0sXG4gIFsgJ2IxMScsIDIyLCAzMiBdLFxuICBbICdiMTInLCAxNiwgMjIgXSxcbiAgWyAnYzAnLCA5MTcsIDEyOTcgXSxcbiAgWyAnYzEnLCA2NDgsIDkxNyBdLFxuICBbICdjMicsIDQ1OCwgNjQ4IF0sXG4gIFsgJ2MzJywgMzI0LCA0NTggXSxcbiAgWyAnYzQnLCAyMjksIDMyNCBdLFxuICBbICdjNScsIDE2MiwgMjI5IF0sXG4gIFsgJ2M2JywgMTE0LCAxNjIgXSxcbiAgWyAnYzcnLCA4MSwgMTE0IF0sXG4gIFsgJ2M4JywgNTcsIDgxIF0sXG4gIFsgJ2M5JywgNDAsIDU3IF0sXG4gIFsgJ2MxMCcsIDI4LCA0MCBdLFxuICBbICdjMTEnLCAyMiwgMzIgXSxcbiAgWyAnYzEyJywgMTYsIDIyIF0sXG5cbiAgLy8gVXNlIGluY2hlcyBmb3IgTm9ydGggQW1lcmljYW4gc2l6ZXMsXG4gIC8vIGFzIGl0IHByb2R1Y2VzIGxlc3MgZmxvYXQgcHJlY2lzaW9uIGVycm9yc1xuICBbICdoYWxmLWxldHRlcicsIDUuNSwgOC41LCAnaW4nIF0sXG4gIFsgJ2xldHRlcicsIDguNSwgMTEsICdpbicgXSxcbiAgWyAnbGVnYWwnLCA4LjUsIDE0LCAnaW4nIF0sXG4gIFsgJ2p1bmlvci1sZWdhbCcsIDUsIDgsICdpbicgXSxcbiAgWyAnbGVkZ2VyJywgMTEsIDE3LCAnaW4nIF0sXG4gIFsgJ3RhYmxvaWQnLCAxMSwgMTcsICdpbicgXSxcbiAgWyAnYW5zaS1hJywgOC41LCAxMS4wLCAnaW4nIF0sXG4gIFsgJ2Fuc2ktYicsIDExLjAsIDE3LjAsICdpbicgXSxcbiAgWyAnYW5zaS1jJywgMTcuMCwgMjIuMCwgJ2luJyBdLFxuICBbICdhbnNpLWQnLCAyMi4wLCAzNC4wLCAnaW4nIF0sXG4gIFsgJ2Fuc2ktZScsIDM0LjAsIDQ0LjAsICdpbicgXSxcbiAgWyAnYXJjaC1hJywgOSwgMTIsICdpbicgXSxcbiAgWyAnYXJjaC1iJywgMTIsIDE4LCAnaW4nIF0sXG4gIFsgJ2FyY2gtYycsIDE4LCAyNCwgJ2luJyBdLFxuICBbICdhcmNoLWQnLCAyNCwgMzYsICdpbicgXSxcbiAgWyAnYXJjaC1lJywgMzYsIDQ4LCAnaW4nIF0sXG4gIFsgJ2FyY2gtZTEnLCAzMCwgNDIsICdpbicgXSxcbiAgWyAnYXJjaC1lMicsIDI2LCAzOCwgJ2luJyBdLFxuICBbICdhcmNoLWUzJywgMjcsIDM5LCAnaW4nIF1cbl07XG5cbmV4cG9ydCBkZWZhdWx0IGRhdGEucmVkdWNlKChkaWN0LCBwcmVzZXQpID0+IHtcbiAgY29uc3QgaXRlbSA9IHtcbiAgICB1bml0czogcHJlc2V0WzNdIHx8IGRlZmF1bHRVbml0cyxcbiAgICBkaW1lbnNpb25zOiBbIHByZXNldFsxXSwgcHJlc2V0WzJdIF1cbiAgfTtcbiAgZGljdFtwcmVzZXRbMF1dID0gaXRlbTtcbiAgZGljdFtwcmVzZXRbMF0ucmVwbGFjZSgvLS9nLCAnICcpXSA9IGl0ZW07XG4gIHJldHVybiBkaWN0O1xufSwge30pO1xuIiwidmFyIGRlZmluZWQgPSByZXF1aXJlKCdkZWZpbmVkJyk7XG52YXIgdW5pdHMgPSBbICdtbScsICdjbScsICdtJywgJ3BjJywgJ3B0JywgJ2luJywgJ2Z0JywgJ3B4JyBdO1xuXG52YXIgY29udmVyc2lvbnMgPSB7XG4gIC8vIG1ldHJpY1xuICBtOiB7XG4gICAgc3lzdGVtOiAnbWV0cmljJyxcbiAgICBmYWN0b3I6IDFcbiAgfSxcbiAgY206IHtcbiAgICBzeXN0ZW06ICdtZXRyaWMnLFxuICAgIGZhY3RvcjogMSAvIDEwMFxuICB9LFxuICBtbToge1xuICAgIHN5c3RlbTogJ21ldHJpYycsXG4gICAgZmFjdG9yOiAxIC8gMTAwMFxuICB9LFxuICAvLyBpbXBlcmlhbFxuICBwdDoge1xuICAgIHN5c3RlbTogJ2ltcGVyaWFsJyxcbiAgICBmYWN0b3I6IDEgLyA3MlxuICB9LFxuICBwYzoge1xuICAgIHN5c3RlbTogJ2ltcGVyaWFsJyxcbiAgICBmYWN0b3I6IDEgLyA2XG4gIH0sXG4gIGluOiB7XG4gICAgc3lzdGVtOiAnaW1wZXJpYWwnLFxuICAgIGZhY3RvcjogMVxuICB9LFxuICBmdDoge1xuICAgIHN5c3RlbTogJ2ltcGVyaWFsJyxcbiAgICBmYWN0b3I6IDEyXG4gIH1cbn07XG5cbmNvbnN0IGFuY2hvcnMgPSB7XG4gIG1ldHJpYzoge1xuICAgIHVuaXQ6ICdtJyxcbiAgICByYXRpbzogMSAvIDAuMDI1NFxuICB9LFxuICBpbXBlcmlhbDoge1xuICAgIHVuaXQ6ICdpbicsXG4gICAgcmF0aW86IDAuMDI1NFxuICB9XG59O1xuXG5mdW5jdGlvbiByb3VuZCAodmFsdWUsIGRlY2ltYWxzKSB7XG4gIHJldHVybiBOdW1iZXIoTWF0aC5yb3VuZCh2YWx1ZSArICdlJyArIGRlY2ltYWxzKSArICdlLScgKyBkZWNpbWFscyk7XG59XG5cbmZ1bmN0aW9uIGNvbnZlcnREaXN0YW5jZSAodmFsdWUsIGZyb21Vbml0LCB0b1VuaXQsIG9wdHMpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicgfHwgIWlzRmluaXRlKHZhbHVlKSkgdGhyb3cgbmV3IEVycm9yKCdWYWx1ZSBtdXN0IGJlIGEgZmluaXRlIG51bWJlcicpO1xuICBpZiAoIWZyb21Vbml0IHx8ICF0b1VuaXQpIHRocm93IG5ldyBFcnJvcignTXVzdCBzcGVjaWZ5IGZyb20gYW5kIHRvIHVuaXRzJyk7XG5cbiAgb3B0cyA9IG9wdHMgfHwge307XG4gIHZhciBwaXhlbHNQZXJJbmNoID0gZGVmaW5lZChvcHRzLnBpeGVsc1BlckluY2gsIDk2KTtcbiAgdmFyIHByZWNpc2lvbiA9IG9wdHMucHJlY2lzaW9uO1xuICB2YXIgcm91bmRQaXhlbCA9IG9wdHMucm91bmRQaXhlbCAhPT0gZmFsc2U7XG5cbiAgZnJvbVVuaXQgPSBmcm9tVW5pdC50b0xvd2VyQ2FzZSgpO1xuICB0b1VuaXQgPSB0b1VuaXQudG9Mb3dlckNhc2UoKTtcblxuICBpZiAodW5pdHMuaW5kZXhPZihmcm9tVW5pdCkgPT09IC0xKSB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZnJvbSB1bml0IFwiJyArIGZyb21Vbml0ICsgJ1wiLCBtdXN0IGJlIG9uZSBvZjogJyArIHVuaXRzLmpvaW4oJywgJykpO1xuICBpZiAodW5pdHMuaW5kZXhPZih0b1VuaXQpID09PSAtMSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZyb20gdW5pdCBcIicgKyB0b1VuaXQgKyAnXCIsIG11c3QgYmUgb25lIG9mOiAnICsgdW5pdHMuam9pbignLCAnKSk7XG5cbiAgaWYgKGZyb21Vbml0ID09PSB0b1VuaXQpIHtcbiAgICAvLyBXZSBkb24ndCBuZWVkIHRvIGNvbnZlcnQgZnJvbSBBIHRvIEIgc2luY2UgdGhleSBhcmUgdGhlIHNhbWUgYWxyZWFkeVxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHZhciB0b0ZhY3RvciA9IDE7XG4gIHZhciBmcm9tRmFjdG9yID0gMTtcbiAgdmFyIGlzVG9QaXhlbCA9IGZhbHNlO1xuXG4gIGlmIChmcm9tVW5pdCA9PT0gJ3B4Jykge1xuICAgIGZyb21GYWN0b3IgPSAxIC8gcGl4ZWxzUGVySW5jaDtcbiAgICBmcm9tVW5pdCA9ICdpbic7XG4gIH1cbiAgaWYgKHRvVW5pdCA9PT0gJ3B4Jykge1xuICAgIGlzVG9QaXhlbCA9IHRydWU7XG4gICAgdG9GYWN0b3IgPSBwaXhlbHNQZXJJbmNoO1xuICAgIHRvVW5pdCA9ICdpbic7XG4gIH1cblxuICB2YXIgZnJvbVVuaXREYXRhID0gY29udmVyc2lvbnNbZnJvbVVuaXRdO1xuICB2YXIgdG9Vbml0RGF0YSA9IGNvbnZlcnNpb25zW3RvVW5pdF07XG5cbiAgLy8gc291cmNlIHRvIGFuY2hvciBpbnNpZGUgc291cmNlJ3Mgc3lzdGVtXG4gIHZhciBhbmNob3IgPSB2YWx1ZSAqIGZyb21Vbml0RGF0YS5mYWN0b3IgKiBmcm9tRmFjdG9yO1xuXG4gIC8vIGlmIHN5c3RlbXMgZGlmZmVyLCBjb252ZXJ0IG9uZSB0byBhbm90aGVyXG4gIGlmIChmcm9tVW5pdERhdGEuc3lzdGVtICE9PSB0b1VuaXREYXRhLnN5c3RlbSkge1xuICAgIC8vIHJlZ3VsYXIgJ20nIHRvICdpbicgYW5kIHNvIGZvcnRoXG4gICAgYW5jaG9yICo9IGFuY2hvcnNbZnJvbVVuaXREYXRhLnN5c3RlbV0ucmF0aW87XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gYW5jaG9yIC8gdG9Vbml0RGF0YS5mYWN0b3IgKiB0b0ZhY3RvcjtcbiAgaWYgKGlzVG9QaXhlbCAmJiByb3VuZFBpeGVsKSB7XG4gICAgcmVzdWx0ID0gTWF0aC5yb3VuZChyZXN1bHQpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBwcmVjaXNpb24gPT09ICdudW1iZXInICYmIGlzRmluaXRlKHByZWNpc2lvbikpIHtcbiAgICByZXN1bHQgPSByb3VuZChyZXN1bHQsIHByZWNpc2lvbik7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb252ZXJ0RGlzdGFuY2U7XG5tb2R1bGUuZXhwb3J0cy51bml0cyA9IHVuaXRzO1xuIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGFyZ3VtZW50c1tpXSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gYXJndW1lbnRzW2ldO1xuICAgIH1cbn07XG4iLCJpbXBvcnQgcGFwZXJTaXplcyBmcm9tICcuL3BhcGVyLXNpemVzJztcbmltcG9ydCBjb252ZXJ0TGVuZ3RoIGZyb20gJ2NvbnZlcnQtbGVuZ3RoJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldERpbWVuc2lvbnNGcm9tUHJlc2V0IChkaW1lbnNpb25zLCB1bml0c1RvID0gJ3B4JywgcGl4ZWxzUGVySW5jaCA9IDcyKSB7XG4gIGlmICh0eXBlb2YgZGltZW5zaW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBrZXkgPSBkaW1lbnNpb25zLnRvTG93ZXJDYXNlKCk7XG4gICAgaWYgKCEoa2V5IGluIHBhcGVyU2l6ZXMpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBkaW1lbnNpb24gcHJlc2V0IFwiJHtkaW1lbnNpb25zfVwiIGlzIG5vdCBzdXBwb3J0ZWQgb3IgY291bGQgbm90IGJlIGZvdW5kOyB0cnkgdXNpbmcgYTQsIGEzLCBwb3N0Y2FyZCwgbGV0dGVyLCBldGMuYClcbiAgICB9XG4gICAgY29uc3QgcHJlc2V0ID0gcGFwZXJTaXplc1trZXldO1xuICAgIHJldHVybiBwcmVzZXQuZGltZW5zaW9ucy5tYXAoZCA9PiB7XG4gICAgICByZXR1cm4gY29udmVydERpc3RhbmNlKGQsIHByZXNldC51bml0cywgdW5pdHNUbywgcGl4ZWxzUGVySW5jaCk7XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRpbWVuc2lvbnM7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnZlcnREaXN0YW5jZSAoZGltZW5zaW9uLCB1bml0c0Zyb20gPSAncHgnLCB1bml0c1RvID0gJ3B4JywgcGl4ZWxzUGVySW5jaCA9IDcyKSB7XG4gIHJldHVybiBjb252ZXJ0TGVuZ3RoKGRpbWVuc2lvbiwgdW5pdHNGcm9tLCB1bml0c1RvLCB7XG4gICAgcGl4ZWxzUGVySW5jaCxcbiAgICBwcmVjaXNpb246IDQsXG4gICAgcm91bmRQaXhlbDogdHJ1ZVxuICB9KTtcbn1cbiIsImltcG9ydCB7IGdldERpbWVuc2lvbnNGcm9tUHJlc2V0LCBjb252ZXJ0RGlzdGFuY2UgfSBmcm9tICcuLi9kaXN0YW5jZXMnO1xuaW1wb3J0IHsgaXNCcm93c2VyLCBkZWZpbmVkIH0gZnJvbSAnLi4vdXRpbCc7XG5cbmZ1bmN0aW9uIGNoZWNrSWZIYXNEaW1lbnNpb25zIChzZXR0aW5ncykge1xuICBpZiAoIXNldHRpbmdzLmRpbWVuc2lvbnMpIHJldHVybiBmYWxzZTtcbiAgaWYgKHR5cGVvZiBzZXR0aW5ncy5kaW1lbnNpb25zID09PSAnc3RyaW5nJykgcmV0dXJuIHRydWU7XG4gIGlmIChBcnJheS5pc0FycmF5KHNldHRpbmdzLmRpbWVuc2lvbnMpICYmIHNldHRpbmdzLmRpbWVuc2lvbnMubGVuZ3RoID49IDIpIHJldHVybiB0cnVlO1xuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIGdldFBhcmVudFNpemUgKHByb3BzLCBzZXR0aW5ncykge1xuICAvLyBXaGVuIG5vIHsgZGltZW5zaW9uIH0gaXMgcGFzc2VkIGluIG5vZGUsIHdlIGRlZmF1bHQgdG8gSFRNTCBjYW52YXMgc2l6ZVxuICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgcmV0dXJuIFsgMzAwLCAxNTAgXTtcbiAgfVxuXG4gIGxldCBlbGVtZW50ID0gc2V0dGluZ3MucGFyZW50IHx8IHdpbmRvdztcblxuICBpZiAoZWxlbWVudCA9PT0gd2luZG93IHx8XG4gICAgICBlbGVtZW50ID09PSBkb2N1bWVudCB8fFxuICAgICAgZWxlbWVudCA9PT0gZG9jdW1lbnQuYm9keSkge1xuICAgIHJldHVybiBbIHdpbmRvdy5pbm5lcldpZHRoLCB3aW5kb3cuaW5uZXJIZWlnaHQgXTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQgfSA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgcmV0dXJuIFsgd2lkdGgsIGhlaWdodCBdO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlc2l6ZUNhbnZhcyAocHJvcHMsIHNldHRpbmdzKSB7XG4gIGxldCB3aWR0aCwgaGVpZ2h0O1xuICBsZXQgc3R5bGVXaWR0aCwgc3R5bGVIZWlnaHQ7XG4gIGxldCBjYW52YXNXaWR0aCwgY2FudmFzSGVpZ2h0O1xuXG4gIGNvbnN0IGJyb3dzZXIgPSBpc0Jyb3dzZXIoKTtcbiAgY29uc3QgZGltZW5zaW9ucyA9IHNldHRpbmdzLmRpbWVuc2lvbnM7XG4gIGNvbnN0IGhhc0RpbWVuc2lvbnMgPSBjaGVja0lmSGFzRGltZW5zaW9ucyhzZXR0aW5ncyk7XG4gIGNvbnN0IGV4cG9ydGluZyA9IHByb3BzLmV4cG9ydGluZztcbiAgbGV0IHNjYWxlVG9GaXQgPSBoYXNEaW1lbnNpb25zID8gc2V0dGluZ3Muc2NhbGVUb0ZpdCAhPT0gZmFsc2UgOiBmYWxzZTtcbiAgbGV0IHNjYWxlVG9WaWV3ID0gKCFleHBvcnRpbmcgJiYgaGFzRGltZW5zaW9ucykgPyBzZXR0aW5ncy5zY2FsZVRvVmlldyA6IHRydWU7XG4gIC8vIGluIG5vZGUsIGNhbmNlbCBib3RoIG9mIHRoZXNlIG9wdGlvbnNcbiAgaWYgKCFicm93c2VyKSBzY2FsZVRvRml0ID0gc2NhbGVUb1ZpZXcgPSBmYWxzZTtcbiAgY29uc3QgdW5pdHMgPSBzZXR0aW5ncy51bml0cztcbiAgY29uc3QgcGl4ZWxzUGVySW5jaCA9ICh0eXBlb2Ygc2V0dGluZ3MucGl4ZWxzUGVySW5jaCA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoc2V0dGluZ3MucGl4ZWxzUGVySW5jaCkpID8gc2V0dGluZ3MucGl4ZWxzUGVySW5jaCA6IDcyO1xuICBjb25zdCBibGVlZCA9IGRlZmluZWQoc2V0dGluZ3MuYmxlZWQsIDApO1xuXG4gIGNvbnN0IGRldmljZVBpeGVsUmF0aW8gPSBicm93c2VyID8gd2luZG93LmRldmljZVBpeGVsUmF0aW8gOiAxO1xuICBjb25zdCBiYXNlUGl4ZWxSYXRpbyA9IHNjYWxlVG9WaWV3ID8gZGV2aWNlUGl4ZWxSYXRpbyA6IDE7XG5cbiAgbGV0IHBpeGVsUmF0aW8sIGV4cG9ydFBpeGVsUmF0aW87XG5cbiAgLy8gSWYgYSBwaXhlbCByYXRpbyBpcyBzcGVjaWZpZWQsIHdlIHdpbGwgdXNlIGl0LlxuICAvLyBPdGhlcndpc2U6XG4gIC8vICAtPiBJZiBkaW1lbnNpb24gaXMgc3BlY2lmaWVkLCB1c2UgYmFzZSByYXRpbyAoaS5lLiBzaXplIGZvciBleHBvcnQpXG4gIC8vICAtPiBJZiBubyBkaW1lbnNpb24gaXMgc3BlY2lmaWVkLCB1c2UgZGV2aWNlIHJhdGlvIChpLmUuIHNpemUgZm9yIHNjcmVlbilcbiAgaWYgKHR5cGVvZiBzZXR0aW5ncy5waXhlbFJhdGlvID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShzZXR0aW5ncy5waXhlbFJhdGlvKSkge1xuICAgIC8vIFdoZW4geyBwaXhlbFJhdGlvIH0gaXMgc3BlY2lmaWVkLCBpdCdzIGFsc28gdXNlZCBhcyBkZWZhdWx0IGV4cG9ydFBpeGVsUmF0aW8uXG4gICAgcGl4ZWxSYXRpbyA9IHNldHRpbmdzLnBpeGVsUmF0aW87XG4gICAgZXhwb3J0UGl4ZWxSYXRpbyA9IGRlZmluZWQoc2V0dGluZ3MuZXhwb3J0UGl4ZWxSYXRpbywgcGl4ZWxSYXRpbyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKGhhc0RpbWVuc2lvbnMpIHtcbiAgICAgIC8vIFdoZW4gYSBkaW1lbnNpb24gaXMgc3BlY2lmaWVkLCB1c2UgdGhlIGJhc2UgcmF0aW8gcmF0aGVyIHRoYW4gc2NyZWVuIHJhdGlvXG4gICAgICBwaXhlbFJhdGlvID0gYmFzZVBpeGVsUmF0aW87XG4gICAgICAvLyBEZWZhdWx0IHRvIGEgcGl4ZWwgcmF0aW8gb2YgMSBzbyB0aGF0IHlvdSBlbmQgdXAgd2l0aCB0aGUgc2FtZSBkaW1lbnNpb25cbiAgICAgIC8vIHlvdSBzcGVjaWZpZWQsIGkuZS4gWyA1MDAsIDUwMCBdIGlzIGV4cG9ydGVkIGFzIDUwMHg1MDAgcHhcbiAgICAgIGV4cG9ydFBpeGVsUmF0aW8gPSBkZWZpbmVkKHNldHRpbmdzLmV4cG9ydFBpeGVsUmF0aW8sIDEpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBObyBkaW1lbnNpb24gaXMgc3BlY2lmaWVkLCBhc3N1bWUgZnVsbC1zY3JlZW4gcmV0aW5hIHNpemluZ1xuICAgICAgcGl4ZWxSYXRpbyA9IGRldmljZVBpeGVsUmF0aW87XG4gICAgICAvLyBEZWZhdWx0IHRvIHNjcmVlbiBwaXhlbCByYXRpbywgc28gdGhhdCBpdCdzIGxpa2UgdGFraW5nIGEgZGV2aWNlIHNjcmVlbnNob3RcbiAgICAgIGV4cG9ydFBpeGVsUmF0aW8gPSBkZWZpbmVkKHNldHRpbmdzLmV4cG9ydFBpeGVsUmF0aW8sIHBpeGVsUmF0aW8pO1xuICAgIH1cbiAgfVxuXG4gIC8vIENsYW1wIHBpeGVsIHJhdGlvXG4gIGlmICh0eXBlb2Ygc2V0dGluZ3MubWF4UGl4ZWxSYXRpbyA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoc2V0dGluZ3MubWF4UGl4ZWxSYXRpbykpIHtcbiAgICBwaXhlbFJhdGlvID0gTWF0aC5taW4oc2V0dGluZ3MubWF4UGl4ZWxSYXRpbywgcGl4ZWxSYXRpbyk7XG4gIH1cblxuICAvLyBIYW5kbGUgZXhwb3J0IHBpeGVsIHJhdGlvXG4gIGlmIChleHBvcnRpbmcpIHtcbiAgICBwaXhlbFJhdGlvID0gZXhwb3J0UGl4ZWxSYXRpbztcbiAgfVxuXG4gIC8vIHBhcmVudFdpZHRoID0gdHlwZW9mIHBhcmVudFdpZHRoID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHROb2RlU2l6ZVswXSA6IHBhcmVudFdpZHRoO1xuICAvLyBwYXJlbnRIZWlnaHQgPSB0eXBlb2YgcGFyZW50SGVpZ2h0ID09PSAndW5kZWZpbmVkJyA/IGRlZmF1bHROb2RlU2l6ZVsxXSA6IHBhcmVudEhlaWdodDtcblxuICBsZXQgWyBwYXJlbnRXaWR0aCwgcGFyZW50SGVpZ2h0IF0gPSBnZXRQYXJlbnRTaXplKHByb3BzLCBzZXR0aW5ncyk7XG4gIGxldCB0cmltV2lkdGgsIHRyaW1IZWlnaHQ7XG5cbiAgLy8gWW91IGNhbiBzcGVjaWZ5IGEgZGltZW5zaW9ucyBpbiBwaXhlbHMgb3IgY20vbS9pbi9ldGNcbiAgaWYgKGhhc0RpbWVuc2lvbnMpIHtcbiAgICBjb25zdCByZXN1bHQgPSBnZXREaW1lbnNpb25zRnJvbVByZXNldChkaW1lbnNpb25zLCB1bml0cywgcGl4ZWxzUGVySW5jaCk7XG4gICAgY29uc3QgaGlnaGVzdCA9IE1hdGgubWF4KHJlc3VsdFswXSwgcmVzdWx0WzFdKTtcbiAgICBjb25zdCBsb3dlc3QgPSBNYXRoLm1pbihyZXN1bHRbMF0sIHJlc3VsdFsxXSk7XG4gICAgaWYgKHNldHRpbmdzLm9yaWVudGF0aW9uKSB7XG4gICAgICBjb25zdCBsYW5kc2NhcGUgPSBzZXR0aW5ncy5vcmllbnRhdGlvbiA9PT0gJ2xhbmRzY2FwZSc7XG4gICAgICB3aWR0aCA9IGxhbmRzY2FwZSA/IGhpZ2hlc3QgOiBsb3dlc3Q7XG4gICAgICBoZWlnaHQgPSBsYW5kc2NhcGUgPyBsb3dlc3QgOiBoaWdoZXN0O1xuICAgIH0gZWxzZSB7XG4gICAgICB3aWR0aCA9IHJlc3VsdFswXTtcbiAgICAgIGhlaWdodCA9IHJlc3VsdFsxXTtcbiAgICB9XG5cbiAgICB0cmltV2lkdGggPSB3aWR0aDtcbiAgICB0cmltSGVpZ2h0ID0gaGVpZ2h0O1xuXG4gICAgLy8gQXBwbHkgYmxlZWQgd2hpY2ggaXMgYXNzdW1lZCB0byBiZSBpbiB0aGUgc2FtZSB1bml0c1xuICAgIHdpZHRoICs9IGJsZWVkICogMjtcbiAgICBoZWlnaHQgKz0gYmxlZWQgKiAyO1xuICB9IGVsc2Uge1xuICAgIHdpZHRoID0gcGFyZW50V2lkdGg7XG4gICAgaGVpZ2h0ID0gcGFyZW50SGVpZ2h0O1xuICAgIHRyaW1XaWR0aCA9IHdpZHRoO1xuICAgIHRyaW1IZWlnaHQgPSBoZWlnaHQ7XG4gIH1cblxuICAvLyBSZWFsIHNpemUgaW4gcGl4ZWxzIGFmdGVyIFBQSSBpcyB0YWtlbiBpbnRvIGFjY291bnRcbiAgbGV0IHJlYWxXaWR0aCA9IHdpZHRoO1xuICBsZXQgcmVhbEhlaWdodCA9IGhlaWdodDtcbiAgaWYgKGhhc0RpbWVuc2lvbnMgJiYgdW5pdHMpIHtcbiAgICAvLyBDb252ZXJ0IHRvIGRpZ2l0YWwvcGl4ZWwgdW5pdHMgaWYgbmVjZXNzYXJ5XG4gICAgcmVhbFdpZHRoID0gY29udmVydERpc3RhbmNlKHdpZHRoLCB1bml0cywgJ3B4JywgcGl4ZWxzUGVySW5jaCk7XG4gICAgcmVhbEhlaWdodCA9IGNvbnZlcnREaXN0YW5jZShoZWlnaHQsIHVuaXRzLCAncHgnLCBwaXhlbHNQZXJJbmNoKTtcbiAgfVxuXG4gIC8vIEhvdyBiaWcgdG8gc2V0IHRoZSAndmlldycgb2YgdGhlIGNhbnZhcyBpbiB0aGUgYnJvd3NlciAoaS5lLiBzdHlsZSlcbiAgc3R5bGVXaWR0aCA9IE1hdGgucm91bmQocmVhbFdpZHRoKTtcbiAgc3R5bGVIZWlnaHQgPSBNYXRoLnJvdW5kKHJlYWxIZWlnaHQpO1xuXG4gIC8vIElmIHdlIHdpc2ggdG8gc2NhbGUgdGhlIHZpZXcgdG8gdGhlIGJyb3dzZXIgd2luZG93XG4gIGlmIChzY2FsZVRvRml0ICYmICFleHBvcnRpbmcgJiYgaGFzRGltZW5zaW9ucykge1xuICAgIGNvbnN0IGFzcGVjdCA9IHdpZHRoIC8gaGVpZ2h0O1xuICAgIGNvbnN0IHdpbmRvd0FzcGVjdCA9IHBhcmVudFdpZHRoIC8gcGFyZW50SGVpZ2h0O1xuICAgIGNvbnN0IHNjYWxlVG9GaXRQYWRkaW5nID0gZGVmaW5lZChzZXR0aW5ncy5zY2FsZVRvRml0UGFkZGluZywgNDApO1xuICAgIGNvbnN0IG1heFdpZHRoID0gTWF0aC5yb3VuZChwYXJlbnRXaWR0aCAtIHNjYWxlVG9GaXRQYWRkaW5nICogMik7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gTWF0aC5yb3VuZChwYXJlbnRIZWlnaHQgLSBzY2FsZVRvRml0UGFkZGluZyAqIDIpO1xuICAgIGlmIChzdHlsZVdpZHRoID4gbWF4V2lkdGggfHwgc3R5bGVIZWlnaHQgPiBtYXhIZWlnaHQpIHtcbiAgICAgIGlmICh3aW5kb3dBc3BlY3QgPiBhc3BlY3QpIHtcbiAgICAgICAgc3R5bGVIZWlnaHQgPSBtYXhIZWlnaHQ7XG4gICAgICAgIHN0eWxlV2lkdGggPSBNYXRoLnJvdW5kKHN0eWxlSGVpZ2h0ICogYXNwZWN0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0eWxlV2lkdGggPSBtYXhXaWR0aDtcbiAgICAgICAgc3R5bGVIZWlnaHQgPSBNYXRoLnJvdW5kKHN0eWxlV2lkdGggLyBhc3BlY3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNhbnZhc1dpZHRoID0gc2NhbGVUb1ZpZXcgPyBNYXRoLnJvdW5kKHBpeGVsUmF0aW8gKiBzdHlsZVdpZHRoKSA6IE1hdGgucm91bmQocGl4ZWxSYXRpbyAqIHJlYWxXaWR0aCk7XG4gIGNhbnZhc0hlaWdodCA9IHNjYWxlVG9WaWV3ID8gTWF0aC5yb3VuZChwaXhlbFJhdGlvICogc3R5bGVIZWlnaHQpIDogTWF0aC5yb3VuZChwaXhlbFJhdGlvICogcmVhbEhlaWdodCk7XG5cbiAgY29uc3Qgdmlld3BvcnRXaWR0aCA9IHNjYWxlVG9WaWV3ID8gTWF0aC5yb3VuZChzdHlsZVdpZHRoKSA6IE1hdGgucm91bmQocmVhbFdpZHRoKTtcbiAgY29uc3Qgdmlld3BvcnRIZWlnaHQgPSBzY2FsZVRvVmlldyA/IE1hdGgucm91bmQoc3R5bGVIZWlnaHQpIDogTWF0aC5yb3VuZChyZWFsSGVpZ2h0KTtcblxuICBjb25zdCBzY2FsZVggPSBjYW52YXNXaWR0aCAvIHdpZHRoO1xuICBjb25zdCBzY2FsZVkgPSBjYW52YXNIZWlnaHQgLyBoZWlnaHQ7XG5cbiAgLy8gQXNzaWduIHRvIGN1cnJlbnQgcHJvcHNcbiAgcmV0dXJuIHtcbiAgICBibGVlZCxcbiAgICBwaXhlbFJhdGlvLFxuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICBkaW1lbnNpb25zOiBbIHdpZHRoLCBoZWlnaHQgXSxcbiAgICB1bml0czogdW5pdHMgfHwgJ3B4JyxcbiAgICBzY2FsZVgsXG4gICAgc2NhbGVZLFxuICAgIHBpeGVsc1BlckluY2gsXG4gICAgdmlld3BvcnRXaWR0aCxcbiAgICB2aWV3cG9ydEhlaWdodCxcbiAgICBjYW52YXNXaWR0aCxcbiAgICBjYW52YXNIZWlnaHQsXG4gICAgdHJpbVdpZHRoLFxuICAgIHRyaW1IZWlnaHQsXG4gICAgc3R5bGVXaWR0aCxcbiAgICBzdHlsZUhlaWdodFxuICB9O1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBnZXRDYW52YXNDb250ZXh0XG5mdW5jdGlvbiBnZXRDYW52YXNDb250ZXh0ICh0eXBlLCBvcHRzKSB7XG4gIGlmICh0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtdXN0IHNwZWNpZnkgdHlwZSBzdHJpbmcnKVxuICB9XG5cbiAgb3B0cyA9IG9wdHMgfHwge31cblxuICBpZiAodHlwZW9mIGRvY3VtZW50ID09PSAndW5kZWZpbmVkJyAmJiAhb3B0cy5jYW52YXMpIHtcbiAgICByZXR1cm4gbnVsbCAvLyBjaGVjayBmb3IgTm9kZVxuICB9XG5cbiAgdmFyIGNhbnZhcyA9IG9wdHMuY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpXG4gIGlmICh0eXBlb2Ygb3B0cy53aWR0aCA9PT0gJ251bWJlcicpIHtcbiAgICBjYW52YXMud2lkdGggPSBvcHRzLndpZHRoXG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRzLmhlaWdodCA9PT0gJ251bWJlcicpIHtcbiAgICBjYW52YXMuaGVpZ2h0ID0gb3B0cy5oZWlnaHRcbiAgfVxuXG4gIHZhciBhdHRyaWJzID0gb3B0c1xuICB2YXIgZ2xcbiAgdHJ5IHtcbiAgICB2YXIgbmFtZXMgPSBbIHR5cGUgXVxuICAgIC8vIHByZWZpeCBHTCBjb250ZXh0c1xuICAgIGlmICh0eXBlLmluZGV4T2YoJ3dlYmdsJykgPT09IDApIHtcbiAgICAgIG5hbWVzLnB1c2goJ2V4cGVyaW1lbnRhbC0nICsgdHlwZSlcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KG5hbWVzW2ldLCBhdHRyaWJzKVxuICAgICAgaWYgKGdsKSByZXR1cm4gZ2xcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBnbCA9IG51bGxcbiAgfVxuICByZXR1cm4gKGdsIHx8IG51bGwpIC8vIGVuc3VyZSBudWxsIG9uIGZhaWxcbn1cbiIsImltcG9ydCBhc3NpZ24gZnJvbSAnb2JqZWN0LWFzc2lnbic7XG5pbXBvcnQgZ2V0Q2FudmFzQ29udGV4dCBmcm9tICdnZXQtY2FudmFzLWNvbnRleHQnO1xuaW1wb3J0IHsgaXNCcm93c2VyIH0gZnJvbSAnLi4vdXRpbCc7XG5cbmZ1bmN0aW9uIGNyZWF0ZUNhbnZhc0VsZW1lbnQgKCkge1xuICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJdCBhcHBlYXJzIHlvdSBhcmUgcnVuaW5nIGZyb20gTm9kZS5qcyBvciBhIG5vbi1icm93c2VyIGVudmlyb25tZW50LiBUcnkgcGFzc2luZyBpbiBhbiBleGlzdGluZyB7IGNhbnZhcyB9IGludGVyZmFjZSBpbnN0ZWFkLicpO1xuICB9XG4gIHJldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQ2FudmFzIChzZXR0aW5ncyA9IHt9KSB7XG4gIGxldCBjb250ZXh0LCBjYW52YXM7XG4gIGxldCBvd25zQ2FudmFzID0gZmFsc2U7XG4gIGlmIChzZXR0aW5ncy5jYW52YXMgIT09IGZhbHNlKSB7XG4gICAgLy8gRGV0ZXJtaW5lIHRoZSBjYW52YXMgYW5kIGNvbnRleHQgdG8gY3JlYXRlXG4gICAgY29udGV4dCA9IHNldHRpbmdzLmNvbnRleHQ7XG4gICAgaWYgKCFjb250ZXh0IHx8IHR5cGVvZiBjb250ZXh0ID09PSAnc3RyaW5nJykge1xuICAgICAgbGV0IG5ld0NhbnZhcyA9IHNldHRpbmdzLmNhbnZhcztcbiAgICAgIGlmICghbmV3Q2FudmFzKSB7XG4gICAgICAgIG5ld0NhbnZhcyA9IGNyZWF0ZUNhbnZhc0VsZW1lbnQoKTtcbiAgICAgICAgb3duc0NhbnZhcyA9IHRydWU7XG4gICAgICB9XG4gICAgICBjb25zdCB0eXBlID0gY29udGV4dCB8fCAnMmQnO1xuICAgICAgaWYgKHR5cGVvZiBuZXdDYW52YXMuZ2V0Q29udGV4dCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBzcGVjaWZpZWQgeyBjYW52YXMgfSBlbGVtZW50IGRvZXMgbm90IGhhdmUgYSBnZXRDb250ZXh0KCkgZnVuY3Rpb24sIG1heWJlIGl0IGlzIG5vdCBhIDxjYW52YXM+IHRhZz9gKTtcbiAgICAgIH1cbiAgICAgIGNvbnRleHQgPSBnZXRDYW52YXNDb250ZXh0KHR5cGUsIGFzc2lnbih7fSwgc2V0dGluZ3MuYXR0cmlidXRlcywgeyBjYW52YXM6IG5ld0NhbnZhcyB9KSk7XG4gICAgICBpZiAoIWNvbnRleHQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgYXQgY2FudmFzLmdldENvbnRleHQoJyR7dHlwZX0nKSAtIHRoZSBicm93c2VyIG1heSBub3Qgc3VwcG9ydCB0aGlzIGNvbnRleHQsIG9yIGEgZGlmZmVyZW50IGNvbnRleHQgbWF5IGFscmVhZHkgYmUgaW4gdXNlIHdpdGggdGhpcyBjYW52YXMuYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2FudmFzID0gY29udGV4dC5jYW52YXM7XG4gICAgLy8gRW5zdXJlIGNvbnRleHQgbWF0Y2hlcyB1c2VyJ3MgY2FudmFzIGV4cGVjdGF0aW9uc1xuICAgIGlmIChzZXR0aW5ncy5jYW52YXMgJiYgY2FudmFzICE9PSBzZXR0aW5ncy5jYW52YXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIHsgY2FudmFzIH0gYW5kIHsgY29udGV4dCB9IHNldHRpbmdzIG11c3QgcG9pbnQgdG8gdGhlIHNhbWUgdW5kZXJseWluZyBjYW52YXMgZWxlbWVudCcpO1xuICAgIH1cblxuICAgIC8vIEFwcGx5IHBpeGVsYXRpb24gdG8gY2FudmFzIGlmIG5lY2Vzc2FyeSwgdGhpcyBpcyBtb3N0bHkgYSBjb252ZW5pZW5jZSB1dGlsaXR5XG4gICAgaWYgKHNldHRpbmdzLnBpeGVsYXRlZCkge1xuICAgICAgY29udGV4dC5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICBjb250ZXh0Lm9JbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQud2Via2l0SW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICBjb250ZXh0Lm1zSW1hZ2VTbW9vdGhpbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICBjYW52YXMuc3R5bGVbJ2ltYWdlLXJlbmRlcmluZyddID0gJ3BpeGVsYXRlZCc7XG4gICAgfVxuICB9XG4gIHJldHVybiB7IGNhbnZhcywgY29udGV4dCwgb3duc0NhbnZhcyB9O1xufVxuIiwiaW1wb3J0IGFzc2lnbiBmcm9tICdvYmplY3QtYXNzaWduJztcbmltcG9ydCByaWdodE5vdyBmcm9tICdyaWdodC1ub3cnO1xuaW1wb3J0IGlzUHJvbWlzZSBmcm9tICdpcy1wcm9taXNlJztcbmltcG9ydCB7IGlzQnJvd3NlciwgZGVmaW5lZCwgaXNXZWJHTENvbnRleHQsIGlzQ2FudmFzLCBnZXRDbGllbnRBUEkgfSBmcm9tICcuLi91dGlsJztcbmltcG9ydCBkZWVwRXF1YWwgZnJvbSAnZGVlcC1lcXVhbCc7XG5pbXBvcnQge1xuICByZXNvbHZlRmlsZW5hbWUsXG4gIHNhdmVGaWxlLFxuICBzYXZlRGF0YVVSTCxcbiAgZ2V0VGltZVN0YW1wLFxuICBleHBvcnRDYW52YXMsXG4gIHN0cmVhbVN0YXJ0LFxuICBzdHJlYW1FbmRcbn0gZnJvbSAnLi4vc2F2ZSc7XG5pbXBvcnQgeyBjaGVja1NldHRpbmdzIH0gZnJvbSAnLi4vYWNjZXNzaWJpbGl0eSc7XG5cbmltcG9ydCBrZXlib2FyZFNob3J0Y3V0cyBmcm9tICcuL2tleWJvYXJkU2hvcnRjdXRzJztcbmltcG9ydCByZXNpemVDYW52YXMgZnJvbSAnLi9yZXNpemVDYW52YXMnO1xuaW1wb3J0IGNyZWF0ZUNhbnZhcyBmcm9tICcuL2NyZWF0ZUNhbnZhcyc7XG5cbmNsYXNzIFNrZXRjaE1hbmFnZXIge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgdGhpcy5fc2V0dGluZ3MgPSB7fTtcbiAgICB0aGlzLl9wcm9wcyA9IHt9O1xuICAgIHRoaXMuX3NrZXRjaCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9yYWYgPSBudWxsO1xuICAgIHRoaXMuX3JlY29yZFRpbWVvdXQgPSBudWxsO1xuXG4gICAgLy8gU29tZSBoYWNreSB0aGluZ3MgcmVxdWlyZWQgdG8gZ2V0IGFyb3VuZCBwNS5qcyBzdHJ1Y3R1cmVcbiAgICB0aGlzLl9sYXN0UmVkcmF3UmVzdWx0ID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2lzUDVSZXNpemluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5fa2V5Ym9hcmRTaG9ydGN1dHMgPSBrZXlib2FyZFNob3J0Y3V0cyh7XG4gICAgICBlbmFibGVkOiAoKSA9PiB0aGlzLnNldHRpbmdzLmhvdGtleXMgIT09IGZhbHNlLFxuICAgICAgc2F2ZTogKGV2KSA9PiB7XG4gICAgICAgIGlmIChldi5zaGlmdEtleSkge1xuICAgICAgICAgIGlmICh0aGlzLnByb3BzLnJlY29yZGluZykge1xuICAgICAgICAgICAgdGhpcy5lbmRSZWNvcmQoKTtcbiAgICAgICAgICAgIHRoaXMucnVuKCk7XG4gICAgICAgICAgfSBlbHNlIHRoaXMucmVjb3JkKCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIXRoaXMucHJvcHMucmVjb3JkaW5nKSB7XG4gICAgICAgICAgdGhpcy5leHBvcnRGcmFtZSgpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgdG9nZ2xlUGxheTogKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5wbGF5aW5nKSB0aGlzLnBhdXNlKCk7XG4gICAgICAgIGVsc2UgdGhpcy5wbGF5KCk7XG4gICAgICB9LFxuICAgICAgY29tbWl0OiAoZXYpID0+IHtcbiAgICAgICAgdGhpcy5leHBvcnRGcmFtZSh7IGNvbW1pdDogdHJ1ZSB9KTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuX2FuaW1hdGVIYW5kbGVyID0gKCkgPT4gdGhpcy5hbmltYXRlKCk7XG5cbiAgICB0aGlzLl9yZXNpemVIYW5kbGVyID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2hhbmdlZCA9IHRoaXMucmVzaXplKCk7XG4gICAgICAvLyBPbmx5IHJlLXJlbmRlciB3aGVuIHNpemUgYWN0dWFsbHkgY2hhbmdlc1xuICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgZ2V0IHNrZXRjaCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NrZXRjaDtcbiAgfVxuXG4gIGdldCBzZXR0aW5ncyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3NldHRpbmdzO1xuICB9XG5cbiAgZ2V0IHByb3BzICgpIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvcHM7XG4gIH1cblxuICBfY29tcHV0ZVBsYXloZWFkIChjdXJyZW50VGltZSwgZHVyYXRpb24pIHtcbiAgICBjb25zdCBoYXNEdXJhdGlvbiA9IHR5cGVvZiBkdXJhdGlvbiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoZHVyYXRpb24pO1xuICAgIHJldHVybiBoYXNEdXJhdGlvbiA/IGN1cnJlbnRUaW1lIC8gZHVyYXRpb24gOiAwO1xuICB9XG5cbiAgX2NvbXB1dGVGcmFtZSAocGxheWhlYWQsIHRpbWUsIHRvdGFsRnJhbWVzLCBmcHMpIHtcbiAgICByZXR1cm4gKGlzRmluaXRlKHRvdGFsRnJhbWVzKSAmJiB0b3RhbEZyYW1lcyA+IDEpXG4gICAgICA/IE1hdGguZmxvb3IocGxheWhlYWQgKiAodG90YWxGcmFtZXMgLSAxKSlcbiAgICAgIDogTWF0aC5mbG9vcihmcHMgKiB0aW1lKTtcbiAgfVxuXG4gIF9jb21wdXRlQ3VycmVudEZyYW1lICgpIHtcbiAgICByZXR1cm4gdGhpcy5fY29tcHV0ZUZyYW1lKFxuICAgICAgdGhpcy5wcm9wcy5wbGF5aGVhZCwgdGhpcy5wcm9wcy50aW1lLFxuICAgICAgdGhpcy5wcm9wcy50b3RhbEZyYW1lcywgdGhpcy5wcm9wcy5mcHNcbiAgICApO1xuICB9XG5cbiAgX2dldFNpemVQcm9wcyAoKSB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuICAgIHJldHVybiB7XG4gICAgICB3aWR0aDogcHJvcHMud2lkdGgsXG4gICAgICBoZWlnaHQ6IHByb3BzLmhlaWdodCxcbiAgICAgIHBpeGVsUmF0aW86IHByb3BzLnBpeGVsUmF0aW8sXG4gICAgICBjYW52YXNXaWR0aDogcHJvcHMuY2FudmFzV2lkdGgsXG4gICAgICBjYW52YXNIZWlnaHQ6IHByb3BzLmNhbnZhc0hlaWdodCxcbiAgICAgIHZpZXdwb3J0V2lkdGg6IHByb3BzLnZpZXdwb3J0V2lkdGgsXG4gICAgICB2aWV3cG9ydEhlaWdodDogcHJvcHMudmlld3BvcnRIZWlnaHRcbiAgICB9O1xuICB9XG5cbiAgcnVuICgpIHtcbiAgICBpZiAoIXRoaXMuc2tldGNoKSB0aHJvdyBuZXcgRXJyb3IoJ3Nob3VsZCB3YWl0IHVudGlsIHNrZXRjaCBpcyBsb2FkZWQgYmVmb3JlIHRyeWluZyB0byBwbGF5KCknKTtcblxuICAgIC8vIFN0YXJ0IGFuIGFuaW1hdGlvbiBmcmFtZSBsb29wIGlmIG5lY2Vzc2FyeVxuICAgIGlmICh0aGlzLnNldHRpbmdzLnBsYXlpbmcgIT09IGZhbHNlKSB7XG4gICAgICB0aGlzLnBsYXkoKTtcbiAgICB9XG5cbiAgICAvLyBMZXQncyBsZXQgdGhpcyB3YXJuaW5nIGhhbmcgYXJvdW5kIGZvciBhIGZldyB2ZXJzaW9ucy4uLlxuICAgIGlmICh0eXBlb2YgdGhpcy5za2V0Y2guZGlzcG9zZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKCdJbiBjYW52YXMtc2tldGNoQDAuMC4yMyB0aGUgZGlzcG9zZSgpIGV2ZW50IGhhcyBiZWVuIHJlbmFtZWQgdG8gdW5sb2FkKCknKTtcbiAgICB9XG5cbiAgICAvLyBJbiBjYXNlIHdlIGFyZW4ndCBwbGF5aW5nIG9yIGFuaW1hdGVkLCBtYWtlIHN1cmUgd2Ugc3RpbGwgdHJpZ2dlciBiZWdpbiBtZXNzYWdlLi4uXG4gICAgaWYgKCF0aGlzLnByb3BzLnN0YXJ0ZWQpIHtcbiAgICAgIHRoaXMuX3NpZ25hbEJlZ2luKCk7XG4gICAgICB0aGlzLnByb3BzLnN0YXJ0ZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIFJlbmRlciBhbiBpbml0aWFsIGZyYW1lXG4gICAgdGhpcy50aWNrKCk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIF9jYW5jZWxUaW1lb3V0cyAoKSB7XG4gICAgaWYgKHRoaXMuX3JhZiAhPSBudWxsICYmIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yYWYpO1xuICAgICAgdGhpcy5fcmFmID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3JlY29yZFRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3JlY29yZFRpbWVvdXQpO1xuICAgICAgdGhpcy5fcmVjb3JkVGltZW91dCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgcGxheSAoKSB7XG4gICAgbGV0IGFuaW1hdGUgPSB0aGlzLnNldHRpbmdzLmFuaW1hdGU7XG4gICAgaWYgKCdhbmltYXRpb24nIGluIHRoaXMuc2V0dGluZ3MpIHtcbiAgICAgIGFuaW1hdGUgPSB0cnVlO1xuICAgICAgY29uc29sZS53YXJuKCdbY2FudmFzLXNrZXRjaF0geyBhbmltYXRpb24gfSBoYXMgYmVlbiByZW5hbWVkIHRvIHsgYW5pbWF0ZSB9Jyk7XG4gICAgfVxuICAgIGlmICghYW5pbWF0ZSkgcmV0dXJuO1xuICAgIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tjYW52YXMtc2tldGNoXSBXQVJOOiBVc2luZyB7IGFuaW1hdGUgfSBpbiBOb2RlLmpzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLnBsYXlpbmcpIHJldHVybjtcbiAgICBpZiAoIXRoaXMucHJvcHMuc3RhcnRlZCkge1xuICAgICAgdGhpcy5fc2lnbmFsQmVnaW4oKTtcbiAgICAgIHRoaXMucHJvcHMuc3RhcnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gY29uc29sZS5sb2coJ3BsYXknLCB0aGlzLnByb3BzLnRpbWUpXG5cbiAgICAvLyBTdGFydCBhIHJlbmRlciBsb29wXG4gICAgdGhpcy5wcm9wcy5wbGF5aW5nID0gdHJ1ZTtcbiAgICB0aGlzLl9jYW5jZWxUaW1lb3V0cygpO1xuICAgIHRoaXMuX2xhc3RUaW1lID0gcmlnaHROb3coKTtcbiAgICB0aGlzLl9yYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2FuaW1hdGVIYW5kbGVyKTtcbiAgfVxuXG4gIHBhdXNlICgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5yZWNvcmRpbmcpIHRoaXMuZW5kUmVjb3JkKCk7XG4gICAgdGhpcy5wcm9wcy5wbGF5aW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9jYW5jZWxUaW1lb3V0cygpO1xuICB9XG5cbiAgdG9nZ2xlUGxheSAoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucGxheWluZykgdGhpcy5wYXVzZSgpO1xuICAgIGVsc2UgdGhpcy5wbGF5KCk7XG4gIH1cblxuICAvLyBTdG9wIGFuZCByZXNldCB0byBmcmFtZSB6ZXJvXG4gIHN0b3AgKCkge1xuICAgIHRoaXMucGF1c2UoKTtcbiAgICB0aGlzLnByb3BzLmZyYW1lID0gMDtcbiAgICB0aGlzLnByb3BzLnBsYXloZWFkID0gMDtcbiAgICB0aGlzLnByb3BzLnRpbWUgPSAwO1xuICAgIHRoaXMucHJvcHMuZGVsdGFUaW1lID0gMDtcbiAgICB0aGlzLnByb3BzLnN0YXJ0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICB9XG5cbiAgcmVjb3JkICgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5yZWNvcmRpbmcpIHJldHVybjtcbiAgICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbY2FudmFzLXNrZXRjaF0gV0FSTjogUmVjb3JkaW5nIGZyb20gTm9kZS5qcyBpcyBub3QgeWV0IHN1cHBvcnRlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuc3RvcCgpO1xuICAgIHRoaXMucHJvcHMucGxheWluZyA9IHRydWU7XG4gICAgdGhpcy5wcm9wcy5yZWNvcmRpbmcgPSB0cnVlO1xuXG4gICAgY29uc3QgZXhwb3J0T3B0cyA9IHRoaXMuX2NyZWF0ZUV4cG9ydE9wdGlvbnMoeyBzZXF1ZW5jZTogdHJ1ZSB9KTtcblxuICAgIGNvbnN0IGZyYW1lSW50ZXJ2YWwgPSAxIC8gdGhpcy5wcm9wcy5mcHM7XG4gICAgLy8gUmVuZGVyIGVhY2ggZnJhbWUgaW4gdGhlIHNlcXVlbmNlXG4gICAgdGhpcy5fY2FuY2VsVGltZW91dHMoKTtcbiAgICBjb25zdCB0aWNrID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnByb3BzLnJlY29yZGluZykgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSBmcmFtZUludGVydmFsO1xuICAgICAgdGhpcy50aWNrKCk7XG4gICAgICByZXR1cm4gdGhpcy5leHBvcnRGcmFtZShleHBvcnRPcHRzKVxuICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLnByb3BzLnJlY29yZGluZykgcmV0dXJuOyAvLyB3YXMgY2FuY2VsbGVkIGJlZm9yZVxuICAgICAgICAgIHRoaXMucHJvcHMuZGVsdGFUaW1lID0gMDtcbiAgICAgICAgICB0aGlzLnByb3BzLmZyYW1lKys7XG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMuZnJhbWUgPCB0aGlzLnByb3BzLnRvdGFsRnJhbWVzKSB7XG4gICAgICAgICAgICB0aGlzLnByb3BzLnRpbWUgKz0gZnJhbWVJbnRlcnZhbDtcbiAgICAgICAgICAgIHRoaXMucHJvcHMucGxheWhlYWQgPSB0aGlzLl9jb21wdXRlUGxheWhlYWQodGhpcy5wcm9wcy50aW1lLCB0aGlzLnByb3BzLmR1cmF0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuX3JlY29yZFRpbWVvdXQgPSBzZXRUaW1lb3V0KHRpY2ssIDApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zb2xlLmxvZygnRmluaXNoZWQgcmVjb3JkaW5nJyk7XG4gICAgICAgICAgICB0aGlzLl9zaWduYWxFbmQoKTtcbiAgICAgICAgICAgIHRoaXMuZW5kUmVjb3JkKCk7XG4gICAgICAgICAgICB0aGlzLnN0b3AoKTtcbiAgICAgICAgICAgIHRoaXMucnVuKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgLy8gVHJpZ2dlciBhIHN0YXJ0IGV2ZW50IGJlZm9yZSB3ZSBiZWdpbiByZWNvcmRpbmdcbiAgICBpZiAoIXRoaXMucHJvcHMuc3RhcnRlZCkge1xuICAgICAgdGhpcy5fc2lnbmFsQmVnaW4oKTtcbiAgICAgIHRoaXMucHJvcHMuc3RhcnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gVHJpZ2dlciAnYmVnaW4gcmVjb3JkJyBldmVudFxuICAgIGlmICh0aGlzLnNrZXRjaCAmJiB0eXBlb2YgdGhpcy5za2V0Y2guYmVnaW5SZWNvcmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuX3dyYXBDb250ZXh0U2NhbGUocHJvcHMgPT4gdGhpcy5za2V0Y2guYmVnaW5SZWNvcmQocHJvcHMpKTtcbiAgICB9XG5cbiAgICAvLyBJbml0aWF0ZSBhIHN0cmVhbWluZyBzdGFydCBpZiBuZWNlc3NhcnlcbiAgICBzdHJlYW1TdGFydChleHBvcnRPcHRzKVxuICAgICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyKTtcbiAgICAgIH0pXG4gICAgICAudGhlbihyZXNwb25zZSA9PiB7XG4gICAgICAgIHRoaXMuX3JhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgICB9KTtcbiAgfVxuXG4gIF9zaWduYWxCZWdpbiAoKSB7XG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5iZWdpbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fd3JhcENvbnRleHRTY2FsZShwcm9wcyA9PiB0aGlzLnNrZXRjaC5iZWdpbihwcm9wcykpO1xuICAgIH1cbiAgfVxuXG4gIF9zaWduYWxFbmQgKCkge1xuICAgIGlmICh0aGlzLnNrZXRjaCAmJiB0eXBlb2YgdGhpcy5za2V0Y2guZW5kID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl93cmFwQ29udGV4dFNjYWxlKHByb3BzID0+IHRoaXMuc2tldGNoLmVuZChwcm9wcykpO1xuICAgIH1cbiAgfVxuXG4gIGVuZFJlY29yZCAoKSB7XG4gICAgY29uc3Qgd2FzUmVjb3JkaW5nID0gdGhpcy5wcm9wcy5yZWNvcmRpbmc7XG5cbiAgICB0aGlzLl9jYW5jZWxUaW1lb3V0cygpO1xuICAgIHRoaXMucHJvcHMucmVjb3JkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSAwO1xuICAgIHRoaXMucHJvcHMucGxheWluZyA9IGZhbHNlO1xuXG4gICAgLy8gdGVsbCBDTEkgdGhhdCBzdHJlYW0gaGFzIGZpbmlzaGVkXG4gICAgcmV0dXJuIHN0cmVhbUVuZCgpXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgLy8gVHJpZ2dlciAnZW5kIHJlY29yZCcgZXZlbnRcbiAgICAgICAgaWYgKHdhc1JlY29yZGluZyAmJiB0aGlzLnNrZXRjaCAmJiB0eXBlb2YgdGhpcy5za2V0Y2guZW5kUmVjb3JkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhpcy5fd3JhcENvbnRleHRTY2FsZShwcm9wcyA9PiB0aGlzLnNrZXRjaC5lbmRSZWNvcmQocHJvcHMpKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBfY3JlYXRlRXhwb3J0T3B0aW9ucyAob3B0ID0ge30pIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2VxdWVuY2U6IG9wdC5zZXF1ZW5jZSxcbiAgICAgIHNhdmU6IG9wdC5zYXZlLFxuICAgICAgZnBzOiB0aGlzLnByb3BzLmZwcyxcbiAgICAgIGZyYW1lOiBvcHQuc2VxdWVuY2UgPyB0aGlzLnByb3BzLmZyYW1lIDogdW5kZWZpbmVkLFxuICAgICAgZmlsZTogdGhpcy5zZXR0aW5ncy5maWxlLFxuICAgICAgbmFtZTogdGhpcy5zZXR0aW5ncy5uYW1lLFxuICAgICAgcHJlZml4OiB0aGlzLnNldHRpbmdzLnByZWZpeCxcbiAgICAgIHN1ZmZpeDogdGhpcy5zZXR0aW5ncy5zdWZmaXgsXG4gICAgICBlbmNvZGluZzogdGhpcy5zZXR0aW5ncy5lbmNvZGluZyxcbiAgICAgIGVuY29kaW5nUXVhbGl0eTogdGhpcy5zZXR0aW5ncy5lbmNvZGluZ1F1YWxpdHksXG4gICAgICB0aW1lU3RhbXA6IG9wdC50aW1lU3RhbXAgfHwgZ2V0VGltZVN0YW1wKCksXG4gICAgICB0b3RhbEZyYW1lczogaXNGaW5pdGUodGhpcy5wcm9wcy50b3RhbEZyYW1lcykgPyBNYXRoLm1heCgwLCB0aGlzLnByb3BzLnRvdGFsRnJhbWVzKSA6IDEwMDBcbiAgICB9O1xuICB9XG5cbiAgZXhwb3J0RnJhbWUgKG9wdCA9IHt9KSB7XG4gICAgaWYgKCF0aGlzLnNrZXRjaCkgcmV0dXJuIFByb21pc2UuYWxsKFtdKTtcbiAgICBpZiAodHlwZW9mIHRoaXMuc2tldGNoLnByZUV4cG9ydCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5za2V0Y2gucHJlRXhwb3J0KCk7XG4gICAgfVxuXG4gICAgLy8gT3B0aW9ucyBmb3IgZXhwb3J0IGZ1bmN0aW9uXG4gICAgbGV0IGV4cG9ydE9wdHMgPSB0aGlzLl9jcmVhdGVFeHBvcnRPcHRpb25zKG9wdCk7XG5cbiAgICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgICBsZXQgcCA9IFByb21pc2UucmVzb2x2ZSgpO1xuICAgIGlmIChjbGllbnQgJiYgb3B0LmNvbW1pdCAmJiB0eXBlb2YgY2xpZW50LmNvbW1pdCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgY29tbWl0T3B0cyA9IGFzc2lnbih7fSwgZXhwb3J0T3B0cyk7XG4gICAgICBjb25zdCBoYXNoID0gY2xpZW50LmNvbW1pdChjb21taXRPcHRzKTtcbiAgICAgIGlmIChpc1Byb21pc2UoaGFzaCkpIHAgPSBoYXNoO1xuICAgICAgZWxzZSBwID0gUHJvbWlzZS5yZXNvbHZlKGhhc2gpO1xuICAgIH1cblxuICAgIHJldHVybiBwLnRoZW4oaGFzaCA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5fZG9FeHBvcnRGcmFtZShhc3NpZ24oe30sIGV4cG9ydE9wdHMsIHsgaGFzaDogaGFzaCB8fCAnJyB9KSk7XG4gICAgfSkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgLy8gTW9zdCBjb21tb24gdXNlY2FzZSBpcyB0byBleHBvcnQgYSBzaW5nbGUgbGF5ZXIsXG4gICAgICAvLyBzbyBsZXQncyBvcHRpbWl6ZSB0aGUgdXNlciBleHBlcmllbmNlIGZvciB0aGF0LlxuICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPT09IDEpIHJldHVybiByZXN1bHRbMF07XG4gICAgICBlbHNlIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG4gIH1cblxuICBfZG9FeHBvcnRGcmFtZSAoZXhwb3J0T3B0cyA9IHt9KSB7XG4gICAgdGhpcy5fcHJvcHMuZXhwb3J0aW5nID0gdHJ1ZTtcblxuICAgIC8vIFJlc2l6ZSB0byBvdXRwdXQgcmVzb2x1dGlvblxuICAgIHRoaXMucmVzaXplKCk7XG5cbiAgICAvLyBEcmF3IGF0IHRoaXMgb3V0cHV0IHJlc29sdXRpb25cbiAgICBsZXQgZHJhd1Jlc3VsdCA9IHRoaXMucmVuZGVyKCk7XG5cbiAgICAvLyBUaGUgc2VsZiBvd25lZCBjYW52YXMgKG1heSBiZSB1bmRlZmluZWQuLi4hKVxuICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMucHJvcHMuY2FudmFzO1xuXG4gICAgLy8gR2V0IGxpc3Qgb2YgcmVzdWx0cyBmcm9tIHJlbmRlclxuICAgIGlmICh0eXBlb2YgZHJhd1Jlc3VsdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIGRyYXdSZXN1bHQgPSBbIGNhbnZhcyBdO1xuICAgIH1cbiAgICBkcmF3UmVzdWx0ID0gW10uY29uY2F0KGRyYXdSZXN1bHQpLmZpbHRlcihCb29sZWFuKTtcblxuICAgIC8vIFRyYW5zZm9ybSB0aGUgY2FudmFzL2ZpbGUgZGVzY3JpcHRvcnMgaW50byBhIGNvbnNpc3RlbnQgZm9ybWF0LFxuICAgIC8vIGFuZCBwdWxsIG91dCBhbnkgZGF0YSBVUkxzIGZyb20gY2FudmFzIGVsZW1lbnRzXG4gICAgZHJhd1Jlc3VsdCA9IGRyYXdSZXN1bHQubWFwKHJlc3VsdCA9PiB7XG4gICAgICBjb25zdCBoYXNEYXRhT2JqZWN0ID0gdHlwZW9mIHJlc3VsdCA9PT0gJ29iamVjdCcgJiYgcmVzdWx0ICYmICgnZGF0YScgaW4gcmVzdWx0IHx8ICdkYXRhVVJMJyBpbiByZXN1bHQpO1xuICAgICAgY29uc3QgZGF0YSA9IGhhc0RhdGFPYmplY3QgPyByZXN1bHQuZGF0YSA6IHJlc3VsdDtcbiAgICAgIGNvbnN0IG9wdHMgPSBoYXNEYXRhT2JqZWN0ID8gYXNzaWduKHt9LCByZXN1bHQsIHsgZGF0YSB9KSA6IHsgZGF0YSB9O1xuICAgICAgaWYgKGlzQ2FudmFzKGRhdGEpKSB7XG4gICAgICAgIGNvbnN0IGVuY29kaW5nID0gb3B0cy5lbmNvZGluZyB8fCBleHBvcnRPcHRzLmVuY29kaW5nO1xuICAgICAgICBjb25zdCBlbmNvZGluZ1F1YWxpdHkgPSBkZWZpbmVkKG9wdHMuZW5jb2RpbmdRdWFsaXR5LCBleHBvcnRPcHRzLmVuY29kaW5nUXVhbGl0eSwgMC45NSk7XG4gICAgICAgIGNvbnN0IHsgZGF0YVVSTCwgZXh0ZW5zaW9uLCB0eXBlIH0gPSBleHBvcnRDYW52YXMoZGF0YSwgeyBlbmNvZGluZywgZW5jb2RpbmdRdWFsaXR5IH0pO1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihvcHRzLCB7IGRhdGFVUkwsIGV4dGVuc2lvbiwgdHlwZSB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBvcHRzO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gTm93IHJldHVybiB0byByZWd1bGFyIHJlbmRlcmluZyBtb2RlXG4gICAgdGhpcy5fcHJvcHMuZXhwb3J0aW5nID0gZmFsc2U7XG4gICAgdGhpcy5yZXNpemUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuXG4gICAgLy8gQW5kIG5vdyB3ZSBjYW4gc2F2ZSBlYWNoIHJlc3VsdFxuICAgIHJldHVybiBQcm9taXNlLmFsbChkcmF3UmVzdWx0Lm1hcCgocmVzdWx0LCBpLCBsYXllckxpc3QpID0+IHtcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIGlmIHJlbmRlcmluZyBtdWx0aXBsZSBsYXllcnMgd2Ugd2lsbCBnaXZlIHRoZW0gaW5kaWNlc1xuICAgICAgY29uc3QgY3VyT3B0ID0gYXNzaWduKHtcbiAgICAgICAgZXh0ZW5zaW9uOiAnJyxcbiAgICAgICAgcHJlZml4OiAnJyxcbiAgICAgICAgc3VmZml4OiAnJ1xuICAgICAgfSwgZXhwb3J0T3B0cywgcmVzdWx0LCB7XG4gICAgICAgIGxheWVyOiBpLFxuICAgICAgICB0b3RhbExheWVyczogbGF5ZXJMaXN0Lmxlbmd0aFxuICAgICAgfSk7XG5cbiAgICAgIC8vIElmIGV4cG9ydCBpcyBleHBsaWNpdGx5IG5vdCBzYXZpbmcsIG1ha2Ugc3VyZSBub3RoaW5nIHNhdmVzXG4gICAgICAvLyBPdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgbGF5ZXIgc2F2ZSBvcHRpb24sIG9yIGZhbGxiYWNrIHRvIHRydWVcbiAgICAgIGNvbnN0IHNhdmVQYXJhbSA9IGV4cG9ydE9wdHMuc2F2ZSA9PT0gZmFsc2UgPyBmYWxzZSA6IHJlc3VsdC5zYXZlO1xuICAgICAgY3VyT3B0LnNhdmUgPSBzYXZlUGFyYW0gIT09IGZhbHNlO1xuXG4gICAgICAvLyBSZXNvbHZlIGEgZnVsbCBmaWxlbmFtZSBmcm9tIGFsbCB0aGUgb3B0aW9uc1xuICAgICAgY3VyT3B0LmZpbGVuYW1lID0gcmVzb2x2ZUZpbGVuYW1lKGN1ck9wdCk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHNvbWUgcGFyYW1ldGVycyB0aGF0IG1heSBiZSBhbWJpZ3VvdXMgdG8gdGhlIHVzZXJcbiAgICAgIGRlbGV0ZSBjdXJPcHQuZW5jb2Rpbmc7XG4gICAgICBkZWxldGUgY3VyT3B0LmVuY29kaW5nUXVhbGl0eTtcblxuICAgICAgLy8gQ2xlYW4gaXQgdXAgZnVydGhlciBieSBqdXN0IHJlbW92aW5nIHVuZGVmaW5lZCB2YWx1ZXNcbiAgICAgIGZvciAobGV0IGsgaW4gY3VyT3B0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgY3VyT3B0W2tdID09PSAndW5kZWZpbmVkJykgZGVsZXRlIGN1ck9wdFtrXTtcbiAgICAgIH1cblxuICAgICAgbGV0IHNhdmVQcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgICAgIGlmIChjdXJPcHQuc2F2ZSkge1xuICAgICAgICAvLyBXaGV0aGVyIHRvIGFjdHVhbGx5IHNhdmUgKGRvd25sb2FkKSB0aGlzIGZyYWdtZW50XG4gICAgICAgIGNvbnN0IGRhdGEgPSBjdXJPcHQuZGF0YTtcbiAgICAgICAgaWYgKGN1ck9wdC5kYXRhVVJMKSB7XG4gICAgICAgICAgY29uc3QgZGF0YVVSTCA9IGN1ck9wdC5kYXRhVVJMO1xuICAgICAgICAgIHNhdmVQcm9taXNlID0gc2F2ZURhdGFVUkwoZGF0YVVSTCwgY3VyT3B0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzYXZlUHJvbWlzZSA9IHNhdmVGaWxlKGRhdGEsIGN1ck9wdCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBzYXZlUHJvbWlzZS50aGVuKHNhdmVSZXN1bHQgPT4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgY3VyT3B0LCBzYXZlUmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH0pKS50aGVuKGV2ID0+IHtcbiAgICAgIGNvbnN0IHNhdmVkRXZlbnRzID0gZXYuZmlsdGVyKGUgPT4gZS5zYXZlKTtcbiAgICAgIGlmIChzYXZlZEV2ZW50cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIExvZyB0aGUgc2F2ZWQgZXhwb3J0c1xuICAgICAgICBjb25zdCBldmVudFdpdGhPdXRwdXQgPSBzYXZlZEV2ZW50cy5maW5kKGUgPT4gZS5vdXRwdXROYW1lKTtcbiAgICAgICAgY29uc3QgaXNDbGllbnQgPSBzYXZlZEV2ZW50cy5zb21lKGUgPT4gZS5jbGllbnQpO1xuICAgICAgICBjb25zdCBpc1N0cmVhbWluZyA9IHNhdmVkRXZlbnRzLnNvbWUoZSA9PiBlLnN0cmVhbSk7XG4gICAgICAgIGxldCBpdGVtO1xuICAgICAgICAvLyBtYW55IGZpbGVzLCBqdXN0IGxvZyBob3cgbWFueSB3ZXJlIGV4cG9ydGVkXG4gICAgICAgIGlmIChzYXZlZEV2ZW50cy5sZW5ndGggPiAxKSBpdGVtID0gc2F2ZWRFdmVudHMubGVuZ3RoO1xuICAgICAgICAvLyBpbiBDTEksIHdlIGtub3cgZXhhY3QgcGF0aCBkaXJuYW1lXG4gICAgICAgIGVsc2UgaWYgKGV2ZW50V2l0aE91dHB1dCkgaXRlbSA9IGAke2V2ZW50V2l0aE91dHB1dC5vdXRwdXROYW1lfS8ke3NhdmVkRXZlbnRzWzBdLmZpbGVuYW1lfWA7XG4gICAgICAgIC8vIGluIGJyb3dzZXIsIHdlIGNhbiBvbmx5IGtub3cgaXQgd2VudCB0byBcImJyb3dzZXIgZG93bmxvYWQgZm9sZGVyXCJcbiAgICAgICAgZWxzZSBpdGVtID0gYCR7c2F2ZWRFdmVudHNbMF0uZmlsZW5hbWV9YDtcbiAgICAgICAgbGV0IG9mU2VxID0gJyc7XG4gICAgICAgIGlmIChleHBvcnRPcHRzLnNlcXVlbmNlKSB7XG4gICAgICAgICAgY29uc3QgaGFzVG90YWxGcmFtZXMgPSBpc0Zpbml0ZSh0aGlzLnByb3BzLnRvdGFsRnJhbWVzKTtcbiAgICAgICAgICBvZlNlcSA9IGhhc1RvdGFsRnJhbWVzID8gYCAoZnJhbWUgJHtleHBvcnRPcHRzLmZyYW1lICsgMX0gLyAke3RoaXMucHJvcHMudG90YWxGcmFtZXN9KWAgOiBgIChmcmFtZSAke2V4cG9ydE9wdHMuZnJhbWV9KWA7XG4gICAgICAgIH0gZWxzZSBpZiAoc2F2ZWRFdmVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICAgIG9mU2VxID0gYCBmaWxlc2A7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xpZW50ID0gaXNDbGllbnQgPyAnY2FudmFzLXNrZXRjaC1jbGknIDogJ2NhbnZhcy1za2V0Y2gnO1xuICAgICAgICBjb25zdCBhY3Rpb24gPSBpc1N0cmVhbWluZyA/ICdTdHJlYW1pbmcgaW50bycgOiAnRXhwb3J0ZWQnO1xuICAgICAgICBjb25zb2xlLmxvZyhgJWNbJHtjbGllbnR9XSVjICR7YWN0aW9ufSAlYyR7aXRlbX0lYyR7b2ZTZXF9YCwgJ2NvbG9yOiAjOGU4ZThlOycsICdjb2xvcjogaW5pdGlhbDsnLCAnZm9udC13ZWlnaHQ6IGJvbGQ7JywgJ2ZvbnQtd2VpZ2h0OiBpbml0aWFsOycpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnNrZXRjaC5wb3N0RXhwb3J0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuc2tldGNoLnBvc3RFeHBvcnQoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBldjtcbiAgICB9KTtcbiAgfVxuXG4gIF93cmFwQ29udGV4dFNjYWxlIChjYikge1xuICAgIHRoaXMuX3ByZVJlbmRlcigpO1xuICAgIGNiKHRoaXMucHJvcHMpO1xuICAgIHRoaXMuX3Bvc3RSZW5kZXIoKTtcbiAgfVxuXG4gIF9wcmVSZW5kZXIgKCkge1xuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcblxuICAgIC8vIFNjYWxlIGNvbnRleHQgZm9yIHVuaXQgc2l6aW5nXG4gICAgaWYgKCF0aGlzLnByb3BzLmdsICYmIHByb3BzLmNvbnRleHQgJiYgIXByb3BzLnA1KSB7XG4gICAgICBwcm9wcy5jb250ZXh0LnNhdmUoKTtcbiAgICAgIGlmICh0aGlzLnNldHRpbmdzLnNjYWxlQ29udGV4dCAhPT0gZmFsc2UpIHtcbiAgICAgICAgcHJvcHMuY29udGV4dC5zY2FsZShwcm9wcy5zY2FsZVgsIHByb3BzLnNjYWxlWSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChwcm9wcy5wNSkge1xuICAgICAgcHJvcHMucDUuc2NhbGUocHJvcHMuc2NhbGVYIC8gcHJvcHMucGl4ZWxSYXRpbywgcHJvcHMuc2NhbGVZIC8gcHJvcHMucGl4ZWxSYXRpbyk7XG4gICAgfVxuICB9XG5cbiAgX3Bvc3RSZW5kZXIgKCkge1xuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcblxuICAgIGlmICghdGhpcy5wcm9wcy5nbCAmJiBwcm9wcy5jb250ZXh0ICYmICFwcm9wcy5wNSkge1xuICAgICAgcHJvcHMuY29udGV4dC5yZXN0b3JlKCk7XG4gICAgfVxuXG4gICAgLy8gRmx1c2ggYnkgZGVmYXVsdCwgdGhpcyBtYXkgYmUgcmV2aXNpdGVkIGF0IGEgbGF0ZXIgcG9pbnQuXG4gICAgLy8gV2UgZG8gdGhpcyB0byBlbnN1cmUgdG9EYXRhVVJMIGNhbiBiZSBjYWxsZWQgaW1tZWRpYXRlbHkgYWZ0ZXIuXG4gICAgLy8gTW9zdCBsaWtlbHkgYnJvd3NlcnMgYWxyZWFkeSBoYW5kbGUgdGhpcywgc28gd2UgbWF5IHJldmlzaXQgdGhpcyBhbmRcbiAgICAvLyByZW1vdmUgaXQgaWYgaXQgaW1wcm92ZXMgcGVyZm9ybWFuY2Ugd2l0aG91dCBhbnkgdXNhYmlsaXR5IGlzc3Vlcy5cbiAgICBpZiAocHJvcHMuZ2wgJiYgdGhpcy5zZXR0aW5ncy5mbHVzaCAhPT0gZmFsc2UgJiYgIXByb3BzLnA1KSB7XG4gICAgICBwcm9wcy5nbC5mbHVzaCgpO1xuICAgIH1cbiAgfVxuXG4gIHRpY2sgKCkge1xuICAgIGlmICh0aGlzLnNrZXRjaCAmJiB0eXBlb2YgdGhpcy5za2V0Y2gudGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fcHJlUmVuZGVyKCk7XG4gICAgICB0aGlzLnNrZXRjaC50aWNrKHRoaXMucHJvcHMpO1xuICAgICAgdGhpcy5fcG9zdFJlbmRlcigpO1xuICAgIH1cbiAgfVxuXG4gIHJlbmRlciAoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMucDUpIHtcbiAgICAgIHRoaXMuX2xhc3RSZWRyYXdSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLnByb3BzLnA1LnJlZHJhdygpO1xuICAgICAgcmV0dXJuIHRoaXMuX2xhc3RSZWRyYXdSZXN1bHQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLnN1Ym1pdERyYXdDYWxsKCk7XG4gICAgfVxuICB9XG5cbiAgc3VibWl0RHJhd0NhbGwgKCkge1xuICAgIGlmICghdGhpcy5za2V0Y2gpIHJldHVybjtcblxuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcbiAgICB0aGlzLl9wcmVSZW5kZXIoKTtcblxuICAgIGxldCBkcmF3UmVzdWx0O1xuXG4gICAgaWYgKHR5cGVvZiB0aGlzLnNrZXRjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZHJhd1Jlc3VsdCA9IHRoaXMuc2tldGNoKHByb3BzKTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLnNrZXRjaC5yZW5kZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGRyYXdSZXN1bHQgPSB0aGlzLnNrZXRjaC5yZW5kZXIocHJvcHMpO1xuICAgIH1cblxuICAgIHRoaXMuX3Bvc3RSZW5kZXIoKTtcblxuICAgIHJldHVybiBkcmF3UmVzdWx0O1xuICB9XG5cbiAgdXBkYXRlIChvcHQgPSB7fSkge1xuICAgIC8vIEN1cnJlbnRseSB1cGRhdGUoKSBpcyBvbmx5IGZvY3VzZWQgb24gcmVzaXppbmcsXG4gICAgLy8gYnV0IGxhdGVyIHdlIHdpbGwgc3VwcG9ydCBvdGhlciBvcHRpb25zIGxpa2Ugc3dpdGNoaW5nXG4gICAgLy8gZnJhbWVzIGFuZCBzdWNoLlxuICAgIGNvbnN0IG5vdFlldFN1cHBvcnRlZCA9IFtcbiAgICAgICdhbmltYXRlJ1xuICAgIF07XG5cbiAgICBPYmplY3Qua2V5cyhvcHQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmIChub3RZZXRTdXBwb3J0ZWQuaW5kZXhPZihrZXkpID49IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTb3JyeSwgdGhlIHsgJHtrZXl9IH0gb3B0aW9uIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIHdpdGggdXBkYXRlKCkuYCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBvbGRDYW52YXMgPSB0aGlzLl9zZXR0aW5ncy5jYW52YXM7XG4gICAgY29uc3Qgb2xkQ29udGV4dCA9IHRoaXMuX3NldHRpbmdzLmNvbnRleHQ7XG5cbiAgICAvLyBNZXJnZSBuZXcgb3B0aW9ucyBpbnRvIHNldHRpbmdzXG4gICAgZm9yIChsZXQga2V5IGluIG9wdCkge1xuICAgICAgY29uc3QgdmFsdWUgPSBvcHRba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnKSB7IC8vIGlnbm9yZSB1bmRlZmluZWRcbiAgICAgICAgdGhpcy5fc2V0dGluZ3Nba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1lcmdlIGluIHRpbWUgcHJvcHNcbiAgICBjb25zdCB0aW1lT3B0cyA9IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuX3NldHRpbmdzLCBvcHQpO1xuICAgIGlmICgndGltZScgaW4gb3B0ICYmICdmcmFtZScgaW4gb3B0KSB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBzaG91bGQgc3BlY2lmeSB7IHRpbWUgfSBvciB7IGZyYW1lIH0gYnV0IG5vdCBib3RoJyk7XG4gICAgZWxzZSBpZiAoJ3RpbWUnIGluIG9wdCkgZGVsZXRlIHRpbWVPcHRzLmZyYW1lO1xuICAgIGVsc2UgaWYgKCdmcmFtZScgaW4gb3B0KSBkZWxldGUgdGltZU9wdHMudGltZTtcbiAgICBpZiAoJ2R1cmF0aW9uJyBpbiBvcHQgJiYgJ3RvdGFsRnJhbWVzJyBpbiBvcHQpIHRocm93IG5ldyBFcnJvcignWW91IHNob3VsZCBzcGVjaWZ5IHsgZHVyYXRpb24gfSBvciB7IHRvdGFsRnJhbWVzIH0gYnV0IG5vdCBib3RoJyk7XG4gICAgZWxzZSBpZiAoJ2R1cmF0aW9uJyBpbiBvcHQpIGRlbGV0ZSB0aW1lT3B0cy50b3RhbEZyYW1lcztcbiAgICBlbHNlIGlmICgndG90YWxGcmFtZXMnIGluIG9wdCkgZGVsZXRlIHRpbWVPcHRzLmR1cmF0aW9uO1xuXG4gICAgLy8gTWVyZ2UgaW4gdXNlciBkYXRhIHdpdGhvdXQgY29weWluZ1xuICAgIGlmICgnZGF0YScgaW4gb3B0KSB0aGlzLl9wcm9wcy5kYXRhID0gb3B0LmRhdGE7XG5cbiAgICBjb25zdCB0aW1lUHJvcHMgPSB0aGlzLmdldFRpbWVQcm9wcyh0aW1lT3B0cyk7XG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9wcm9wcywgdGltZVByb3BzKTtcblxuICAgIC8vIElmIGVpdGhlciBjYW52YXMgb3IgY29udGV4dCBpcyBjaGFuZ2VkLCB3ZSBzaG91bGQgcmUtdXBkYXRlXG4gICAgaWYgKG9sZENhbnZhcyAhPT0gdGhpcy5fc2V0dGluZ3MuY2FudmFzIHx8IG9sZENvbnRleHQgIT09IHRoaXMuX3NldHRpbmdzLmNvbnRleHQpIHtcbiAgICAgIGNvbnN0IHsgY2FudmFzLCBjb250ZXh0IH0gPSBjcmVhdGVDYW52YXModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgICB0aGlzLnByb3BzLmNhbnZhcyA9IGNhbnZhcztcbiAgICAgIHRoaXMucHJvcHMuY29udGV4dCA9IGNvbnRleHQ7XG5cbiAgICAgIC8vIERlbGV0ZSBvciBhZGQgYSAnZ2wnIHByb3AgZm9yIGNvbnZlbmllbmNlXG4gICAgICB0aGlzLl9zZXR1cEdMS2V5KCk7XG5cbiAgICAgIC8vIFJlLW1vdW50IHRoZSBuZXcgY2FudmFzIGlmIGl0IGhhcyBubyBwYXJlbnRcbiAgICAgIHRoaXMuX2FwcGVuZENhbnZhc0lmTmVlZGVkKCk7XG4gICAgfVxuXG4gICAgLy8gU3BlY2lhbCBjYXNlIHRvIHN1cHBvcnQgUDUuanNcbiAgICBpZiAob3B0LnA1ICYmIHR5cGVvZiBvcHQucDUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMucHJvcHMucDUgPSBvcHQucDU7XG4gICAgICB0aGlzLnByb3BzLnA1LmRyYXcgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9pc1A1UmVzaXppbmcpIHJldHVybjtcbiAgICAgICAgdGhpcy5fbGFzdFJlZHJhd1Jlc3VsdCA9IHRoaXMuc3VibWl0RHJhd0NhbGwoKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gVXBkYXRlIHBsYXlpbmcgc3RhdGUgaWYgbmVjZXNzYXJ5XG4gICAgaWYgKCdwbGF5aW5nJyBpbiBvcHQpIHtcbiAgICAgIGlmIChvcHQucGxheWluZykgdGhpcy5wbGF5KCk7XG4gICAgICBlbHNlIHRoaXMucGF1c2UoKTtcbiAgICB9XG5cbiAgICBjaGVja1NldHRpbmdzKHRoaXMuX3NldHRpbmdzKTtcblxuICAgIC8vIERyYXcgbmV3IGZyYW1lXG4gICAgdGhpcy5yZXNpemUoKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHJldHVybiB0aGlzLnByb3BzO1xuICB9XG5cbiAgcmVzaXplICgpIHtcbiAgICBjb25zdCBvbGRTaXplcyA9IHRoaXMuX2dldFNpemVQcm9wcygpO1xuXG4gICAgY29uc3Qgc2V0dGluZ3MgPSB0aGlzLnNldHRpbmdzO1xuICAgIGNvbnN0IHByb3BzID0gdGhpcy5wcm9wcztcblxuICAgIC8vIFJlY29tcHV0ZSBuZXcgcHJvcGVydGllcyBiYXNlZCBvbiBjdXJyZW50IHNldHVwXG4gICAgY29uc3QgbmV3UHJvcHMgPSByZXNpemVDYW52YXMocHJvcHMsIHNldHRpbmdzKTtcblxuICAgIC8vIEFzc2lnbiB0byBjdXJyZW50IHByb3BzXG4gICAgT2JqZWN0LmFzc2lnbih0aGlzLl9wcm9wcywgbmV3UHJvcHMpO1xuXG4gICAgLy8gTm93IHdlIGFjdHVhbGx5IHVwZGF0ZSB0aGUgY2FudmFzIHdpZHRoL2hlaWdodCBhbmQgc3R5bGUgcHJvcHNcbiAgICBjb25zdCB7XG4gICAgICBwaXhlbFJhdGlvLFxuICAgICAgY2FudmFzV2lkdGgsXG4gICAgICBjYW52YXNIZWlnaHQsXG4gICAgICBzdHlsZVdpZHRoLFxuICAgICAgc3R5bGVIZWlnaHRcbiAgICB9ID0gdGhpcy5wcm9wcztcblxuICAgIC8vIFVwZGF0ZSBjYW52YXMgc2V0dGluZ3NcbiAgICBjb25zdCBjYW52YXMgPSB0aGlzLnByb3BzLmNhbnZhcztcbiAgICBpZiAoY2FudmFzICYmIHNldHRpbmdzLnJlc2l6ZUNhbnZhcyAhPT0gZmFsc2UpIHtcbiAgICAgIGlmIChwcm9wcy5wNSkge1xuICAgICAgICAvLyBQNS5qcyBzcGVjaWZpYyBlZGdlIGNhc2VcbiAgICAgICAgaWYgKGNhbnZhcy53aWR0aCAhPT0gY2FudmFzV2lkdGggfHwgY2FudmFzLmhlaWdodCAhPT0gY2FudmFzSGVpZ2h0KSB7XG4gICAgICAgICAgdGhpcy5faXNQNVJlc2l6aW5nID0gdHJ1ZTtcbiAgICAgICAgICAvLyBUaGlzIGNhdXNlcyBhIHJlLWRyYXcgOlxcIHNvIHdlIGlnbm9yZSBkcmF3cyBpbiB0aGUgbWVhbiB0aW1lLi4uIHNvcnRhIGhhY2t5XG4gICAgICAgICAgcHJvcHMucDUucGl4ZWxEZW5zaXR5KHBpeGVsUmF0aW8pO1xuICAgICAgICAgIHByb3BzLnA1LnJlc2l6ZUNhbnZhcyhjYW52YXNXaWR0aCAvIHBpeGVsUmF0aW8sIGNhbnZhc0hlaWdodCAvIHBpeGVsUmF0aW8sIGZhbHNlKTtcbiAgICAgICAgICB0aGlzLl9pc1A1UmVzaXppbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRm9yY2UgY2FudmFzIHNpemVcbiAgICAgICAgaWYgKGNhbnZhcy53aWR0aCAhPT0gY2FudmFzV2lkdGgpIGNhbnZhcy53aWR0aCA9IGNhbnZhc1dpZHRoO1xuICAgICAgICBpZiAoY2FudmFzLmhlaWdodCAhPT0gY2FudmFzSGVpZ2h0KSBjYW52YXMuaGVpZ2h0ID0gY2FudmFzSGVpZ2h0O1xuICAgICAgfVxuICAgICAgLy8gVXBkYXRlIGNhbnZhcyBzdHlsZVxuICAgICAgaWYgKGlzQnJvd3NlcigpICYmIHNldHRpbmdzLnN0eWxlQ2FudmFzICE9PSBmYWxzZSkge1xuICAgICAgICBjYW52YXMuc3R5bGUud2lkdGggPSBgJHtzdHlsZVdpZHRofXB4YDtcbiAgICAgICAgY2FudmFzLnN0eWxlLmhlaWdodCA9IGAke3N0eWxlSGVpZ2h0fXB4YDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBuZXdTaXplcyA9IHRoaXMuX2dldFNpemVQcm9wcygpO1xuICAgIGxldCBjaGFuZ2VkID0gIWRlZXBFcXVhbChvbGRTaXplcywgbmV3U2l6ZXMpO1xuICAgIGlmIChjaGFuZ2VkKSB7XG4gICAgICB0aGlzLl9zaXplQ2hhbmdlZCgpO1xuICAgIH1cbiAgICByZXR1cm4gY2hhbmdlZDtcbiAgfVxuXG4gIF9zaXplQ2hhbmdlZCAoKSB7XG4gICAgLy8gU2VuZCByZXNpemUgZXZlbnQgdG8gc2tldGNoXG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5yZXNpemUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuc2tldGNoLnJlc2l6ZSh0aGlzLnByb3BzKTtcbiAgICB9XG4gIH1cblxuICBhbmltYXRlICgpIHtcbiAgICBpZiAoIXRoaXMucHJvcHMucGxheWluZykgcmV0dXJuO1xuICAgIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tjYW52YXMtc2tldGNoXSBXQVJOOiBBbmltYXRpb24gaW4gTm9kZS5qcyBpcyBub3QgeWV0IHN1cHBvcnRlZCcpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLl9yYWYgPSB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2FuaW1hdGVIYW5kbGVyKTtcblxuICAgIGxldCBub3cgPSByaWdodE5vdygpO1xuXG4gICAgY29uc3QgZnBzID0gdGhpcy5wcm9wcy5mcHM7XG4gICAgY29uc3QgZnJhbWVJbnRlcnZhbE1TID0gMTAwMCAvIGZwcztcbiAgICBsZXQgZGVsdGFUaW1lTVMgPSBub3cgLSB0aGlzLl9sYXN0VGltZTtcblxuICAgIGNvbnN0IGR1cmF0aW9uID0gdGhpcy5wcm9wcy5kdXJhdGlvbjtcbiAgICBjb25zdCBoYXNEdXJhdGlvbiA9IHR5cGVvZiBkdXJhdGlvbiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoZHVyYXRpb24pO1xuXG4gICAgbGV0IGlzTmV3RnJhbWUgPSB0cnVlO1xuICAgIGNvbnN0IHBsYXliYWNrUmF0ZSA9IHRoaXMuc2V0dGluZ3MucGxheWJhY2tSYXRlO1xuICAgIGlmIChwbGF5YmFja1JhdGUgPT09ICdmaXhlZCcpIHtcbiAgICAgIGRlbHRhVGltZU1TID0gZnJhbWVJbnRlcnZhbE1TO1xuICAgIH0gZWxzZSBpZiAocGxheWJhY2tSYXRlID09PSAndGhyb3R0bGUnKSB7XG4gICAgICBpZiAoZGVsdGFUaW1lTVMgPiBmcmFtZUludGVydmFsTVMpIHtcbiAgICAgICAgbm93ID0gbm93IC0gKGRlbHRhVGltZU1TICUgZnJhbWVJbnRlcnZhbE1TKTtcbiAgICAgICAgdGhpcy5fbGFzdFRpbWUgPSBub3c7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc05ld0ZyYW1lID0gZmFsc2U7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2xhc3RUaW1lID0gbm93O1xuICAgIH1cblxuICAgIGNvbnN0IGRlbHRhVGltZSA9IGRlbHRhVGltZU1TIC8gMTAwMDtcbiAgICBsZXQgbmV3VGltZSA9IHRoaXMucHJvcHMudGltZSArIGRlbHRhVGltZSAqIHRoaXMucHJvcHMudGltZVNjYWxlO1xuXG4gICAgLy8gSGFuZGxlIHJldmVyc2UgdGltZSBzY2FsZVxuICAgIGlmIChuZXdUaW1lIDwgMCAmJiBoYXNEdXJhdGlvbikge1xuICAgICAgbmV3VGltZSA9IGR1cmF0aW9uICsgbmV3VGltZTtcbiAgICB9XG5cbiAgICAvLyBSZS1zdGFydCBhbmltYXRpb25cbiAgICBsZXQgaXNGaW5pc2hlZCA9IGZhbHNlO1xuICAgIGxldCBpc0xvb3BTdGFydCA9IGZhbHNlO1xuXG4gICAgY29uc3QgbG9vcGluZyA9IHRoaXMuc2V0dGluZ3MubG9vcCAhPT0gZmFsc2U7XG5cbiAgICBpZiAoaGFzRHVyYXRpb24gJiYgbmV3VGltZSA+PSBkdXJhdGlvbikge1xuICAgICAgLy8gUmUtc3RhcnQgYW5pbWF0aW9uXG4gICAgICBpZiAobG9vcGluZykge1xuICAgICAgICBpc05ld0ZyYW1lID0gdHJ1ZTtcbiAgICAgICAgbmV3VGltZSA9IG5ld1RpbWUgJSBkdXJhdGlvbjtcbiAgICAgICAgaXNMb29wU3RhcnQgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNOZXdGcmFtZSA9IGZhbHNlO1xuICAgICAgICBuZXdUaW1lID0gZHVyYXRpb247XG4gICAgICAgIGlzRmluaXNoZWQgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9zaWduYWxFbmQoKTtcbiAgICB9XG5cbiAgICBpZiAoaXNOZXdGcmFtZSkge1xuICAgICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSBkZWx0YVRpbWU7XG4gICAgICB0aGlzLnByb3BzLnRpbWUgPSBuZXdUaW1lO1xuICAgICAgdGhpcy5wcm9wcy5wbGF5aGVhZCA9IHRoaXMuX2NvbXB1dGVQbGF5aGVhZChuZXdUaW1lLCBkdXJhdGlvbik7XG4gICAgICBjb25zdCBsYXN0RnJhbWUgPSB0aGlzLnByb3BzLmZyYW1lO1xuICAgICAgdGhpcy5wcm9wcy5mcmFtZSA9IHRoaXMuX2NvbXB1dGVDdXJyZW50RnJhbWUoKTtcbiAgICAgIGlmIChpc0xvb3BTdGFydCkgdGhpcy5fc2lnbmFsQmVnaW4oKTtcbiAgICAgIGlmIChsYXN0RnJhbWUgIT09IHRoaXMucHJvcHMuZnJhbWUpIHRoaXMudGljaygpO1xuICAgICAgdGhpcy5yZW5kZXIoKTtcbiAgICAgIHRoaXMucHJvcHMuZGVsdGFUaW1lID0gMDtcbiAgICB9XG5cbiAgICBpZiAoaXNGaW5pc2hlZCkge1xuICAgICAgdGhpcy5wYXVzZSgpO1xuICAgIH1cbiAgfVxuXG4gIGRpc3BhdGNoIChjYikge1xuICAgIGlmICh0eXBlb2YgY2IgIT09ICdmdW5jdGlvbicpIHRocm93IG5ldyBFcnJvcignbXVzdCBwYXNzIGZ1bmN0aW9uIGludG8gZGlzcGF0Y2goKScpO1xuICAgIGNiKHRoaXMucHJvcHMpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICBtb3VudCAoKSB7XG4gICAgdGhpcy5fYXBwZW5kQ2FudmFzSWZOZWVkZWQoKTtcbiAgfVxuXG4gIHVubW91bnQgKCkge1xuICAgIGlmIChpc0Jyb3dzZXIoKSkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3Jlc2l6ZUhhbmRsZXIpO1xuICAgICAgdGhpcy5fa2V5Ym9hcmRTaG9ydGN1dHMuZGV0YWNoKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLmNhbnZhcy5wYXJlbnRFbGVtZW50KSB7XG4gICAgICB0aGlzLnByb3BzLmNhbnZhcy5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHRoaXMucHJvcHMuY2FudmFzKTtcbiAgICB9XG4gIH1cblxuICBfYXBwZW5kQ2FudmFzSWZOZWVkZWQgKCkge1xuICAgIGlmICghaXNCcm93c2VyKCkpIHJldHVybjtcbiAgICBpZiAodGhpcy5zZXR0aW5ncy5wYXJlbnQgIT09IGZhbHNlICYmICh0aGlzLnByb3BzLmNhbnZhcyAmJiAhdGhpcy5wcm9wcy5jYW52YXMucGFyZW50RWxlbWVudCkpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRQYXJlbnQgPSB0aGlzLnNldHRpbmdzLnBhcmVudCB8fCBkb2N1bWVudC5ib2R5O1xuICAgICAgZGVmYXVsdFBhcmVudC5hcHBlbmRDaGlsZCh0aGlzLnByb3BzLmNhbnZhcyk7XG4gICAgfVxuICB9XG5cbiAgX3NldHVwR0xLZXkgKCkge1xuICAgIGlmICh0aGlzLnByb3BzLmNvbnRleHQpIHtcbiAgICAgIGlmIChpc1dlYkdMQ29udGV4dCh0aGlzLnByb3BzLmNvbnRleHQpKSB7XG4gICAgICAgIHRoaXMuX3Byb3BzLmdsID0gdGhpcy5wcm9wcy5jb250ZXh0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3Byb3BzLmdsO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldFRpbWVQcm9wcyAoc2V0dGluZ3MgPSB7fSkge1xuICAgIC8vIEdldCB0aW1pbmcgZGF0YVxuICAgIGxldCBkdXJhdGlvbiA9IHNldHRpbmdzLmR1cmF0aW9uO1xuICAgIGxldCB0b3RhbEZyYW1lcyA9IHNldHRpbmdzLnRvdGFsRnJhbWVzO1xuICAgIGNvbnN0IHRpbWVTY2FsZSA9IGRlZmluZWQoc2V0dGluZ3MudGltZVNjYWxlLCAxKTtcbiAgICBjb25zdCBmcHMgPSBkZWZpbmVkKHNldHRpbmdzLmZwcywgMjQpO1xuICAgIGNvbnN0IGhhc0R1cmF0aW9uID0gdHlwZW9mIGR1cmF0aW9uID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShkdXJhdGlvbik7XG4gICAgY29uc3QgaGFzVG90YWxGcmFtZXMgPSB0eXBlb2YgdG90YWxGcmFtZXMgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHRvdGFsRnJhbWVzKTtcblxuICAgIGNvbnN0IHRvdGFsRnJhbWVzRnJvbUR1cmF0aW9uID0gaGFzRHVyYXRpb24gPyBNYXRoLmZsb29yKGZwcyAqIGR1cmF0aW9uKSA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCBkdXJhdGlvbkZyb21Ub3RhbEZyYW1lcyA9IGhhc1RvdGFsRnJhbWVzID8gKHRvdGFsRnJhbWVzIC8gZnBzKSA6IHVuZGVmaW5lZDtcbiAgICBpZiAoaGFzRHVyYXRpb24gJiYgaGFzVG90YWxGcmFtZXMgJiYgdG90YWxGcmFtZXNGcm9tRHVyYXRpb24gIT09IHRvdGFsRnJhbWVzKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBzaG91bGQgc3BlY2lmeSBlaXRoZXIgZHVyYXRpb24gb3IgdG90YWxGcmFtZXMsIGJ1dCBub3QgYm90aC4gT3IsIHRoZXkgbXVzdCBtYXRjaCBleGFjdGx5LicpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygc2V0dGluZ3MuZGltZW5zaW9ucyA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHNldHRpbmdzLnVuaXRzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgY29uc29sZS53YXJuKGBZb3UndmUgc3BlY2lmaWVkIGEgeyB1bml0cyB9IHNldHRpbmcgYnV0IG5vIHsgZGltZW5zaW9uIH0sIHNvIHRoZSB1bml0cyB3aWxsIGJlIGlnbm9yZWQuYCk7XG4gICAgfVxuXG4gICAgdG90YWxGcmFtZXMgPSBkZWZpbmVkKHRvdGFsRnJhbWVzLCB0b3RhbEZyYW1lc0Zyb21EdXJhdGlvbiwgSW5maW5pdHkpO1xuICAgIGR1cmF0aW9uID0gZGVmaW5lZChkdXJhdGlvbiwgZHVyYXRpb25Gcm9tVG90YWxGcmFtZXMsIEluZmluaXR5KTtcblxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IHNldHRpbmdzLnRpbWU7XG4gICAgY29uc3Qgc3RhcnRGcmFtZSA9IHNldHRpbmdzLmZyYW1lO1xuICAgIGNvbnN0IGhhc1N0YXJ0VGltZSA9IHR5cGVvZiBzdGFydFRpbWUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHN0YXJ0VGltZSk7XG4gICAgY29uc3QgaGFzU3RhcnRGcmFtZSA9IHR5cGVvZiBzdGFydEZyYW1lID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShzdGFydEZyYW1lKTtcblxuICAgIC8vIHN0YXJ0IGF0IHplcm8gdW5sZXNzIHVzZXIgc3BlY2lmaWVzIGZyYW1lIG9yIHRpbWUgKGJ1dCBub3QgYm90aCBtaXNtYXRjaGVkKVxuICAgIGxldCB0aW1lID0gMDtcbiAgICBsZXQgZnJhbWUgPSAwO1xuICAgIGxldCBwbGF5aGVhZCA9IDA7XG4gICAgaWYgKGhhc1N0YXJ0VGltZSAmJiBoYXNTdGFydEZyYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBzaG91bGQgc3BlY2lmeSBlaXRoZXIgc3RhcnQgZnJhbWUgb3IgdGltZSwgYnV0IG5vdCBib3RoLicpO1xuICAgIH0gZWxzZSBpZiAoaGFzU3RhcnRUaW1lKSB7XG4gICAgICAvLyBVc2VyIHNwZWNpZmllcyB0aW1lLCB3ZSBpbmZlciBmcmFtZXMgZnJvbSBGUFNcbiAgICAgIHRpbWUgPSBzdGFydFRpbWU7XG4gICAgICBwbGF5aGVhZCA9IHRoaXMuX2NvbXB1dGVQbGF5aGVhZCh0aW1lLCBkdXJhdGlvbik7XG4gICAgICBmcmFtZSA9IHRoaXMuX2NvbXB1dGVGcmFtZShcbiAgICAgICAgcGxheWhlYWQsIHRpbWUsXG4gICAgICAgIHRvdGFsRnJhbWVzLCBmcHNcbiAgICAgICk7XG4gICAgfSBlbHNlIGlmIChoYXNTdGFydEZyYW1lKSB7XG4gICAgICAvLyBVc2VyIHNwZWNpZmllcyBmcmFtZSBudW1iZXIsIHdlIGluZmVyIHRpbWUgZnJvbSBGUFNcbiAgICAgIGZyYW1lID0gc3RhcnRGcmFtZTtcbiAgICAgIHRpbWUgPSBmcmFtZSAvIGZwcztcbiAgICAgIHBsYXloZWFkID0gdGhpcy5fY29tcHV0ZVBsYXloZWFkKHRpbWUsIGR1cmF0aW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcGxheWhlYWQsXG4gICAgICB0aW1lLFxuICAgICAgZnJhbWUsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIHRvdGFsRnJhbWVzLFxuICAgICAgZnBzLFxuICAgICAgdGltZVNjYWxlXG4gICAgfTtcbiAgfVxuXG4gIHNldHVwIChzZXR0aW5ncyA9IHt9KSB7XG4gICAgaWYgKHRoaXMuc2tldGNoKSB0aHJvdyBuZXcgRXJyb3IoJ011bHRpcGxlIHNldHVwKCkgY2FsbHMgbm90IHlldCBzdXBwb3J0ZWQuJyk7XG5cbiAgICB0aGlzLl9zZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHNldHRpbmdzLCB0aGlzLl9zZXR0aW5ncyk7XG5cbiAgICBjaGVja1NldHRpbmdzKHRoaXMuX3NldHRpbmdzKTtcblxuICAgIC8vIEdldCBpbml0aWFsIGNhbnZhcyAmIGNvbnRleHRcbiAgICBjb25zdCB7IGNvbnRleHQsIGNhbnZhcyB9ID0gY3JlYXRlQ2FudmFzKHRoaXMuX3NldHRpbmdzKTtcblxuICAgIGNvbnN0IHRpbWVQcm9wcyA9IHRoaXMuZ2V0VGltZVByb3BzKHRoaXMuX3NldHRpbmdzKTtcblxuICAgIC8vIEluaXRpYWwgcmVuZGVyIHN0YXRlIGZlYXR1cmVzXG4gICAgdGhpcy5fcHJvcHMgPSB7XG4gICAgICAuLi50aW1lUHJvcHMsXG4gICAgICBjYW52YXMsXG4gICAgICBjb250ZXh0LFxuICAgICAgZGVsdGFUaW1lOiAwLFxuICAgICAgc3RhcnRlZDogZmFsc2UsXG4gICAgICBleHBvcnRpbmc6IGZhbHNlLFxuICAgICAgcGxheWluZzogZmFsc2UsXG4gICAgICByZWNvcmRpbmc6IGZhbHNlLFxuICAgICAgc2V0dGluZ3M6IHRoaXMuc2V0dGluZ3MsXG4gICAgICBkYXRhOiB0aGlzLnNldHRpbmdzLmRhdGEsXG5cbiAgICAgIC8vIEV4cG9ydCBzb21lIHNwZWNpZmljIGFjdGlvbnMgdG8gdGhlIHNrZXRjaFxuICAgICAgcmVuZGVyOiAoKSA9PiB0aGlzLnJlbmRlcigpLFxuICAgICAgdG9nZ2xlUGxheTogKCkgPT4gdGhpcy50b2dnbGVQbGF5KCksXG4gICAgICBkaXNwYXRjaDogKGNiKSA9PiB0aGlzLmRpc3BhdGNoKGNiKSxcbiAgICAgIHRpY2s6ICgpID0+IHRoaXMudGljaygpLFxuICAgICAgcmVzaXplOiAoKSA9PiB0aGlzLnJlc2l6ZSgpLFxuICAgICAgdXBkYXRlOiAob3B0KSA9PiB0aGlzLnVwZGF0ZShvcHQpLFxuICAgICAgZXhwb3J0RnJhbWU6IG9wdCA9PiB0aGlzLmV4cG9ydEZyYW1lKG9wdCksXG4gICAgICByZWNvcmQ6ICgpID0+IHRoaXMucmVjb3JkKCksXG4gICAgICBwbGF5OiAoKSA9PiB0aGlzLnBsYXkoKSxcbiAgICAgIHBhdXNlOiAoKSA9PiB0aGlzLnBhdXNlKCksXG4gICAgICBzdG9wOiAoKSA9PiB0aGlzLnN0b3AoKVxuICAgIH07XG5cbiAgICAvLyBGb3IgV2ViR0wgc2tldGNoZXMsIGEgZ2wgdmFyaWFibGUgcmVhZHMgYSBiaXQgYmV0dGVyXG4gICAgdGhpcy5fc2V0dXBHTEtleSgpO1xuXG4gICAgLy8gVHJpZ2dlciBpbml0aWFsIHJlc2l6ZSBub3cgc28gdGhhdCBjYW52YXMgaXMgYWxyZWFkeSBzaXplZFxuICAgIC8vIGJ5IHRoZSB0aW1lIHdlIGxvYWQgdGhlIHNrZXRjaFxuICAgIHRoaXMucmVzaXplKCk7XG4gIH1cblxuICBsb2FkQW5kUnVuIChjYW52YXNTa2V0Y2gsIG5ld1NldHRpbmdzKSB7XG4gICAgcmV0dXJuIHRoaXMubG9hZChjYW52YXNTa2V0Y2gsIG5ld1NldHRpbmdzKS50aGVuKCgpID0+IHtcbiAgICAgIHRoaXMucnVuKCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9KTtcbiAgfVxuXG4gIHVubG9hZCAoKSB7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIGlmICghdGhpcy5za2V0Y2gpIHJldHVybjtcbiAgICBpZiAodHlwZW9mIHRoaXMuc2tldGNoLnVubG9hZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fd3JhcENvbnRleHRTY2FsZShwcm9wcyA9PiB0aGlzLnNrZXRjaC51bmxvYWQocHJvcHMpKTtcbiAgICB9XG4gICAgdGhpcy5fc2tldGNoID0gbnVsbDtcbiAgfVxuXG4gIGRlc3Ryb3kgKCkge1xuICAgIHRoaXMudW5sb2FkKCk7XG4gICAgdGhpcy51bm1vdW50KCk7XG4gIH1cblxuICBsb2FkIChjcmVhdGVTa2V0Y2gsIG5ld1NldHRpbmdzKSB7XG4gICAgLy8gVXNlciBkaWRuJ3Qgc3BlY2lmeSBhIGZ1bmN0aW9uXG4gICAgaWYgKHR5cGVvZiBjcmVhdGVTa2V0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGZ1bmN0aW9uIG11c3QgdGFrZSBpbiBhIGZ1bmN0aW9uIGFzIHRoZSBmaXJzdCBwYXJhbWV0ZXIuIEV4YW1wbGU6XFxuICBjYW52YXNTa2V0Y2hlcigoKSA9PiB7IC4uLiB9LCBzZXR0aW5ncyknKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5za2V0Y2gpIHtcbiAgICAgIHRoaXMudW5sb2FkKCk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuZXdTZXR0aW5ncyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXMudXBkYXRlKG5ld1NldHRpbmdzKTtcbiAgICB9XG5cbiAgICAvLyBUaGlzIGlzIGEgYml0IG9mIGEgdHJpY2t5IGNhc2U7IHdlIHNldCB1cCB0aGUgYXV0by1zY2FsaW5nIGhlcmVcbiAgICAvLyBpbiBjYXNlIHRoZSB1c2VyIGRlY2lkZXMgdG8gcmVuZGVyIGFueXRoaW5nIHRvIHRoZSBjb250ZXh0ICpiZWZvcmUqIHRoZVxuICAgIC8vIHJlbmRlcigpIGZ1bmN0aW9uLi4uIEhvd2V2ZXIsIHVzZXJzIHNob3VsZCBpbnN0ZWFkIHVzZSBiZWdpbigpIGZ1bmN0aW9uIGZvciB0aGF0LlxuICAgIHRoaXMuX3ByZVJlbmRlcigpO1xuXG4gICAgbGV0IHByZWxvYWQgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICAgIC8vIEJlY2F1c2Ugb2YgUDUuanMncyB1bnVzdWFsIHN0cnVjdHVyZSwgd2UgaGF2ZSB0byBkbyBhIGJpdCBvZlxuICAgIC8vIGxpYnJhcnktc3BlY2lmaWMgY2hhbmdlcyB0byBzdXBwb3J0IGl0IHByb3Blcmx5LlxuICAgIGlmICh0aGlzLnNldHRpbmdzLnA1KSB7XG4gICAgICBpZiAoIWlzQnJvd3NlcigpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignW2NhbnZhcy1za2V0Y2hdIEVSUk9SOiBVc2luZyBwNS5qcyBpbiBOb2RlLmpzIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbiAgICAgIH1cbiAgICAgIHByZWxvYWQgPSBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgICAgbGV0IFA1Q29uc3RydWN0b3IgPSB0aGlzLnNldHRpbmdzLnA1O1xuICAgICAgICBsZXQgcHJlbG9hZDtcbiAgICAgICAgaWYgKFA1Q29uc3RydWN0b3IucDUpIHtcbiAgICAgICAgICBwcmVsb2FkID0gUDVDb25zdHJ1Y3Rvci5wcmVsb2FkO1xuICAgICAgICAgIFA1Q29uc3RydWN0b3IgPSBQNUNvbnN0cnVjdG9yLnA1O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHNrZXRjaCBzZXR1cDsgZGlzYWJsZSBsb29wLCBzZXQgc2l6aW5nLCBldGMuXG4gICAgICAgIGNvbnN0IHA1U2tldGNoID0gcDUgPT4ge1xuICAgICAgICAgIC8vIEhvb2sgaW4gcHJlbG9hZCBpZiBuZWNlc3NhcnlcbiAgICAgICAgICBpZiAocHJlbG9hZCkgcDUucHJlbG9hZCA9ICgpID0+IHByZWxvYWQocDUpO1xuICAgICAgICAgIHA1LnNldHVwID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuICAgICAgICAgICAgY29uc3QgaXNHTCA9IHRoaXMuc2V0dGluZ3MuY29udGV4dCA9PT0gJ3dlYmdsJztcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlcmVyID0gaXNHTCA/IHA1LldFQkdMIDogcDUuUDJEO1xuICAgICAgICAgICAgcDUubm9Mb29wKCk7XG4gICAgICAgICAgICBwNS5waXhlbERlbnNpdHkocHJvcHMucGl4ZWxSYXRpbyk7XG4gICAgICAgICAgICBwNS5jcmVhdGVDYW52YXMocHJvcHMudmlld3BvcnRXaWR0aCwgcHJvcHMudmlld3BvcnRIZWlnaHQsIHJlbmRlcmVyKTtcbiAgICAgICAgICAgIGlmIChpc0dMICYmIHRoaXMuc2V0dGluZ3MuYXR0cmlidXRlcykge1xuICAgICAgICAgICAgICBwNS5zZXRBdHRyaWJ1dGVzKHRoaXMuc2V0dGluZ3MuYXR0cmlidXRlcyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlKHsgcDUsIGNhbnZhczogcDUuY2FudmFzLCBjb250ZXh0OiBwNS5fcmVuZGVyZXIuZHJhd2luZ0NvbnRleHQgfSk7XG4gICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcblxuICAgICAgICAvLyBTdXBwb3J0IGdsb2JhbCBhbmQgaW5zdGFuY2UgUDUuanMgbW9kZXNcbiAgICAgICAgaWYgKHR5cGVvZiBQNUNvbnN0cnVjdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgbmV3IFA1Q29uc3RydWN0b3IocDVTa2V0Y2gpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2Ygd2luZG93LmNyZWF0ZUNhbnZhcyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwieyBwNSB9IHNldHRpbmcgaXMgcGFzc2VkIGJ1dCBjYW4ndCBmaW5kIHA1LmpzIGluIGdsb2JhbCAod2luZG93KSBzY29wZS4gTWF5YmUgeW91IGRpZCBub3QgY3JlYXRlIGl0IGdsb2JhbGx5P1xcbm5ldyBwNSgpOyAvLyA8LS0gYXR0YWNoZXMgdG8gZ2xvYmFsIHNjb3BlXCIpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBwNVNrZXRjaCh3aW5kb3cpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcHJlbG9hZC50aGVuKCgpID0+IHtcbiAgICAgIC8vIExvYWQgdGhlIHVzZXIncyBza2V0Y2hcbiAgICAgIGxldCBsb2FkZXIgPSBjcmVhdGVTa2V0Y2godGhpcy5wcm9wcyk7XG4gICAgICBpZiAoIWlzUHJvbWlzZShsb2FkZXIpKSB7XG4gICAgICAgIGxvYWRlciA9IFByb21pc2UucmVzb2x2ZShsb2FkZXIpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGxvYWRlcjtcbiAgICB9KS50aGVuKHNrZXRjaCA9PiB7XG4gICAgICBpZiAoIXNrZXRjaCkgc2tldGNoID0ge307XG4gICAgICB0aGlzLl9za2V0Y2ggPSBza2V0Y2g7XG5cbiAgICAgIC8vIE9uY2UgdGhlIHNrZXRjaCBpcyBsb2FkZWQgd2UgY2FuIGFkZCB0aGUgZXZlbnRzXG4gICAgICBpZiAoaXNCcm93c2VyKCkpIHtcbiAgICAgICAgdGhpcy5fa2V5Ym9hcmRTaG9ydGN1dHMuYXR0YWNoKCk7XG4gICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl9yZXNpemVIYW5kbGVyKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcG9zdFJlbmRlcigpO1xuXG4gICAgICAvLyBUaGUgaW5pdGlhbCByZXNpemUoKSBpbiB0aGUgY29uc3RydWN0b3Igd2lsbCBub3QgaGF2ZVxuICAgICAgLy8gdHJpZ2dlcmVkIGEgcmVzaXplKCkgZXZlbnQgb24gdGhlIHNrZXRjaCwgc2luY2UgaXQgd2FzIGJlZm9yZVxuICAgICAgLy8gdGhlIHNrZXRjaCB3YXMgbG9hZGVkLiBTbyB3ZSBzZW5kIHRoZSBzaWduYWwgaGVyZSwgYWxsb3dpbmdcbiAgICAgIC8vIHVzZXJzIHRvIHJlYWN0IHRvIHRoZSBpbml0aWFsIHNpemUgYmVmb3JlIGZpcnN0IHJlbmRlci5cbiAgICAgIHRoaXMuX3NpemVDaGFuZ2VkKCk7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9KS5jYXRjaChlcnIgPT4ge1xuICAgICAgY29uc29sZS53YXJuKCdDb3VsZCBub3Qgc3RhcnQgc2tldGNoLCB0aGUgYXN5bmMgbG9hZGluZyBmdW5jdGlvbiByZWplY3RlZCB3aXRoIGFuIGVycm9yOlxcbiAgICBFcnJvcjogJyArIGVyci5tZXNzYWdlKTtcbiAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBTa2V0Y2hNYW5hZ2VyO1xuIiwiaW1wb3J0IHsgZ2V0Q2xpZW50QVBJIH0gZnJvbSAnLi4vdXRpbCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIChvcHQgPSB7fSkge1xuICBjb25zdCBoYW5kbGVyID0gZXYgPT4ge1xuICAgIGlmICghb3B0LmVuYWJsZWQoKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gICAgaWYgKGV2LmtleUNvZGUgPT09IDgzICYmICFldi5hbHRLZXkgJiYgKGV2Lm1ldGFLZXkgfHwgZXYuY3RybEtleSkpIHtcbiAgICAgIC8vIENtZCArIFNcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBvcHQuc2F2ZShldik7XG4gICAgfSBlbHNlIGlmIChldi5rZXlDb2RlID09PSAzMikge1xuICAgICAgLy8gU3BhY2VcbiAgICAgIC8vIFRPRE86IHdoYXQgdG8gZG8gd2l0aCB0aGlzPyBrZWVwIGl0LCBvciByZW1vdmUgaXQ/XG4gICAgICBvcHQudG9nZ2xlUGxheShldik7XG4gICAgfSBlbHNlIGlmIChjbGllbnQgJiYgIWV2LmFsdEtleSAmJiBldi5rZXlDb2RlID09PSA3NSAmJiAoZXYubWV0YUtleSB8fCBldi5jdHJsS2V5KSkge1xuICAgICAgLy8gQ21kICsgSywgb25seSB3aGVuIGNhbnZhcy1za2V0Y2gtY2xpIGlzIHVzZWRcbiAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBvcHQuY29tbWl0KGV2KTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3QgYXR0YWNoID0gKCkgPT4ge1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlcik7XG4gIH07XG5cbiAgY29uc3QgZGV0YWNoID0gKCkgPT4ge1xuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJywgaGFuZGxlcik7XG4gIH07XG5cbiAgcmV0dXJuIHtcbiAgICBhdHRhY2gsXG4gICAgZGV0YWNoXG4gIH07XG59XG4iLCJpbXBvcnQgU2tldGNoTWFuYWdlciBmcm9tICcuL2NvcmUvU2tldGNoTWFuYWdlcic7XG5pbXBvcnQgUGFwZXJTaXplcyBmcm9tICcuL3BhcGVyLXNpemVzJztcbmltcG9ydCB7IGdldENsaWVudEFQSSwgZGVmaW5lZCB9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IENBQ0hFID0gJ2hvdC1pZC1jYWNoZSc7XG5jb25zdCBydW50aW1lQ29sbGlzaW9ucyA9IFtdO1xuXG5mdW5jdGlvbiBpc0hvdFJlbG9hZCAoKSB7XG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICByZXR1cm4gY2xpZW50ICYmIGNsaWVudC5ob3Q7XG59XG5cbmZ1bmN0aW9uIGNhY2hlR2V0IChpZCkge1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgaWYgKCFjbGllbnQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNsaWVudFtDQUNIRV0gPSBjbGllbnRbQ0FDSEVdIHx8IHt9O1xuICByZXR1cm4gY2xpZW50W0NBQ0hFXVtpZF07XG59XG5cbmZ1bmN0aW9uIGNhY2hlUHV0IChpZCwgZGF0YSkge1xuICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgaWYgKCFjbGllbnQpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNsaWVudFtDQUNIRV0gPSBjbGllbnRbQ0FDSEVdIHx8IHt9O1xuICBjbGllbnRbQ0FDSEVdW2lkXSA9IGRhdGE7XG59XG5cbmZ1bmN0aW9uIGdldFRpbWVQcm9wIChvbGRNYW5hZ2VyLCBuZXdTZXR0aW5ncykge1xuICAvLyBTdGF0aWMgc2tldGNoZXMgaWdub3JlIHRoZSB0aW1lIHBlcnNpc3RlbmN5XG4gIHJldHVybiBuZXdTZXR0aW5ncy5hbmltYXRlID8geyB0aW1lOiBvbGRNYW5hZ2VyLnByb3BzLnRpbWUgfSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gY2FudmFzU2tldGNoIChza2V0Y2gsIHNldHRpbmdzID0ge30pIHtcbiAgaWYgKHNldHRpbmdzLnA1KSB7XG4gICAgaWYgKHNldHRpbmdzLmNhbnZhcyB8fCAoc2V0dGluZ3MuY29udGV4dCAmJiB0eXBlb2Ygc2V0dGluZ3MuY29udGV4dCAhPT0gJ3N0cmluZycpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEluIHsgcDUgfSBtb2RlLCB5b3UgY2FuJ3QgcGFzcyB5b3VyIG93biBjYW52YXMgb3IgY29udGV4dCwgdW5sZXNzIHRoZSBjb250ZXh0IGlzIGEgXCJ3ZWJnbFwiIG9yIFwiMmRcIiBzdHJpbmdgKTtcbiAgICB9XG5cbiAgICAvLyBEbyBub3QgY3JlYXRlIGEgY2FudmFzIG9uIHN0YXJ0dXAsIHNpbmNlIFA1LmpzIGRvZXMgdGhhdCBmb3IgdXNcbiAgICBjb25zdCBjb250ZXh0ID0gdHlwZW9mIHNldHRpbmdzLmNvbnRleHQgPT09ICdzdHJpbmcnID8gc2V0dGluZ3MuY29udGV4dCA6IGZhbHNlO1xuICAgIHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgc2V0dGluZ3MsIHsgY2FudmFzOiBmYWxzZSwgY29udGV4dCB9KTtcbiAgfVxuXG4gIGNvbnN0IGlzSG90ID0gaXNIb3RSZWxvYWQoKTtcbiAgbGV0IGhvdElEO1xuICBpZiAoaXNIb3QpIHtcbiAgICAvLyBVc2UgYSBtYWdpYyBuYW1lIGJ5IGRlZmF1bHQsIGZvcmNlIHVzZXIgdG8gZGVmaW5lIGVhY2ggc2tldGNoIGlmIHRoZXlcbiAgICAvLyByZXF1aXJlIG1vcmUgdGhhbiBvbmUgaW4gYW4gYXBwbGljYXRpb24uIE9wZW4gdG8gb3RoZXIgaWRlYXMgb24gaG93IHRvIHRhY2tsZVxuICAgIC8vIHRoaXMgYXMgd2VsbC4uLlxuICAgIGhvdElEID0gZGVmaW5lZChzZXR0aW5ncy5pZCwgJyRfX0RFRkFVTFRfQ0FOVkFTX1NLRVRDSF9JRF9fJCcpO1xuICB9XG4gIGxldCBpc0luamVjdGluZyA9IGlzSG90ICYmIHR5cGVvZiBob3RJRCA9PT0gJ3N0cmluZyc7XG5cbiAgaWYgKGlzSW5qZWN0aW5nICYmIHJ1bnRpbWVDb2xsaXNpb25zLmluY2x1ZGVzKGhvdElEKSkge1xuICAgIGNvbnNvbGUud2FybihgV2FybmluZzogWW91IGhhdmUgbXVsdGlwbGUgY2FsbHMgdG8gY2FudmFzU2tldGNoKCkgaW4gLS1ob3QgbW9kZS4gWW91IG11c3QgcGFzcyB1bmlxdWUgeyBpZCB9IHN0cmluZ3MgaW4gc2V0dGluZ3MgdG8gZW5hYmxlIGhvdCByZWxvYWQgYWNyb3NzIG11bHRpcGxlIHNrZXRjaGVzLiBgLCBob3RJRCk7XG4gICAgaXNJbmplY3RpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGxldCBwcmVsb2FkID0gUHJvbWlzZS5yZXNvbHZlKCk7XG5cbiAgaWYgKGlzSW5qZWN0aW5nKSB7XG4gICAgLy8gTWFyayB0aGlzIGFzIGFscmVhZHkgc3BvdHRlZCBpbiB0aGlzIHJ1bnRpbWUgaW5zdGFuY2VcbiAgICBydW50aW1lQ29sbGlzaW9ucy5wdXNoKGhvdElEKTtcblxuICAgIGNvbnN0IHByZXZpb3VzRGF0YSA9IGNhY2hlR2V0KGhvdElEKTtcbiAgICBpZiAocHJldmlvdXNEYXRhKSB7XG4gICAgICBjb25zdCBuZXh0ID0gKCkgPT4ge1xuICAgICAgICAvLyBHcmFiIG5ldyBwcm9wcyBmcm9tIG9sZCBza2V0Y2ggaW5zdGFuY2VcbiAgICAgICAgY29uc3QgbmV3UHJvcHMgPSBnZXRUaW1lUHJvcChwcmV2aW91c0RhdGEubWFuYWdlciwgc2V0dGluZ3MpO1xuICAgICAgICAvLyBEZXN0cm95IHRoZSBvbGQgaW5zdGFuY2VcbiAgICAgICAgcHJldmlvdXNEYXRhLm1hbmFnZXIuZGVzdHJveSgpO1xuICAgICAgICAvLyBQYXNzIGFsb25nIG5ldyBwcm9wc1xuICAgICAgICByZXR1cm4gbmV3UHJvcHM7XG4gICAgICB9O1xuXG4gICAgICAvLyBNb3ZlIGFsb25nIHRoZSBuZXh0IGRhdGEuLi5cbiAgICAgIHByZWxvYWQgPSBwcmV2aW91c0RhdGEubG9hZC50aGVuKG5leHQpLmNhdGNoKG5leHQpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcmVsb2FkLnRoZW4obmV3UHJvcHMgPT4ge1xuICAgIGNvbnN0IG1hbmFnZXIgPSBuZXcgU2tldGNoTWFuYWdlcigpO1xuICAgIGxldCByZXN1bHQ7XG4gICAgaWYgKHNrZXRjaCkge1xuICAgICAgLy8gTWVyZ2Ugd2l0aCBpbmNvbWluZyBkYXRhXG4gICAgICBzZXR0aW5ncyA9IE9iamVjdC5hc3NpZ24oe30sIHNldHRpbmdzLCBuZXdQcm9wcyk7XG5cbiAgICAgIC8vIEFwcGx5IHNldHRpbmdzIGFuZCBjcmVhdGUgYSBjYW52YXNcbiAgICAgIG1hbmFnZXIuc2V0dXAoc2V0dGluZ3MpO1xuXG4gICAgICAvLyBNb3VudCB0byBET01cbiAgICAgIG1hbmFnZXIubW91bnQoKTtcblxuICAgICAgLy8gbG9hZCB0aGUgc2tldGNoIGZpcnN0XG4gICAgICByZXN1bHQgPSBtYW5hZ2VyLmxvYWRBbmRSdW4oc2tldGNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0ID0gUHJvbWlzZS5yZXNvbHZlKG1hbmFnZXIpO1xuICAgIH1cbiAgICBpZiAoaXNJbmplY3RpbmcpIHtcbiAgICAgIGNhY2hlUHV0KGhvdElELCB7IGxvYWQ6IHJlc3VsdCwgbWFuYWdlciB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSk7XG59XG5cbi8vIFRPRE86IEZpZ3VyZSBvdXQgYSBuaWNlIHdheSB0byBleHBvcnQgdGhpbmdzLlxuY2FudmFzU2tldGNoLmNhbnZhc1NrZXRjaCA9IGNhbnZhc1NrZXRjaDtcbmNhbnZhc1NrZXRjaC5QYXBlclNpemVzID0gUGFwZXJTaXplcztcblxuZXhwb3J0IGRlZmF1bHQgY2FudmFzU2tldGNoO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZmluZWQoKSB7XG5cdGZvciAodmFyIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0aWYgKHR5cGVvZiBhcmd1bWVudHNbaV0gIT09ICd1bmRlZmluZWQnKSB7XG5cdFx0XHRyZXR1cm4gYXJndW1lbnRzW2ldO1xuXHRcdH1cblx0fVxufTtcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciB3aWR0aCA9IDI1NjsvLyBlYWNoIFJDNCBvdXRwdXQgaXMgMCA8PSB4IDwgMjU2XHJcbnZhciBjaHVua3MgPSA2Oy8vIGF0IGxlYXN0IHNpeCBSQzQgb3V0cHV0cyBmb3IgZWFjaCBkb3VibGVcclxudmFyIGRpZ2l0cyA9IDUyOy8vIHRoZXJlIGFyZSA1MiBzaWduaWZpY2FudCBkaWdpdHMgaW4gYSBkb3VibGVcclxudmFyIHBvb2wgPSBbXTsvLyBwb29sOiBlbnRyb3B5IHBvb2wgc3RhcnRzIGVtcHR5XHJcbnZhciBHTE9CQUwgPSB0eXBlb2YgZ2xvYmFsID09PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbDtcclxuXHJcbi8vXHJcbi8vIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWxhdGVkIHRvIElFRUUgNzU0IGxpbWl0cy5cclxuLy9cclxudmFyIHN0YXJ0ZGVub20gPSBNYXRoLnBvdyh3aWR0aCwgY2h1bmtzKSxcclxuICAgIHNpZ25pZmljYW5jZSA9IE1hdGgucG93KDIsIGRpZ2l0cyksXHJcbiAgICBvdmVyZmxvdyA9IHNpZ25pZmljYW5jZSAqIDIsXHJcbiAgICBtYXNrID0gd2lkdGggLSAxO1xyXG5cclxuXHJcbnZhciBvbGRSYW5kb20gPSBNYXRoLnJhbmRvbTtcclxuXHJcbi8vXHJcbi8vIHNlZWRyYW5kb20oKVxyXG4vLyBUaGlzIGlzIHRoZSBzZWVkcmFuZG9tIGZ1bmN0aW9uIGRlc2NyaWJlZCBhYm92ZS5cclxuLy9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihzZWVkLCBvcHRpb25zKSB7XHJcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nbG9iYWwgPT09IHRydWUpIHtcclxuICAgIG9wdGlvbnMuZ2xvYmFsID0gZmFsc2U7XHJcbiAgICBNYXRoLnJhbmRvbSA9IG1vZHVsZS5leHBvcnRzKHNlZWQsIG9wdGlvbnMpO1xyXG4gICAgb3B0aW9ucy5nbG9iYWwgPSB0cnVlO1xyXG4gICAgcmV0dXJuIE1hdGgucmFuZG9tO1xyXG4gIH1cclxuICB2YXIgdXNlX2VudHJvcHkgPSAob3B0aW9ucyAmJiBvcHRpb25zLmVudHJvcHkpIHx8IGZhbHNlO1xyXG4gIHZhciBrZXkgPSBbXTtcclxuXHJcbiAgLy8gRmxhdHRlbiB0aGUgc2VlZCBzdHJpbmcgb3IgYnVpbGQgb25lIGZyb20gbG9jYWwgZW50cm9weSBpZiBuZWVkZWQuXHJcbiAgdmFyIHNob3J0c2VlZCA9IG1peGtleShmbGF0dGVuKFxyXG4gICAgdXNlX2VudHJvcHkgPyBbc2VlZCwgdG9zdHJpbmcocG9vbCldIDpcclxuICAgIDAgaW4gYXJndW1lbnRzID8gc2VlZCA6IGF1dG9zZWVkKCksIDMpLCBrZXkpO1xyXG5cclxuICAvLyBVc2UgdGhlIHNlZWQgdG8gaW5pdGlhbGl6ZSBhbiBBUkM0IGdlbmVyYXRvci5cclxuICB2YXIgYXJjNCA9IG5ldyBBUkM0KGtleSk7XHJcblxyXG4gIC8vIE1peCB0aGUgcmFuZG9tbmVzcyBpbnRvIGFjY3VtdWxhdGVkIGVudHJvcHkuXHJcbiAgbWl4a2V5KHRvc3RyaW5nKGFyYzQuUyksIHBvb2wpO1xyXG5cclxuICAvLyBPdmVycmlkZSBNYXRoLnJhbmRvbVxyXG5cclxuICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSByYW5kb20gZG91YmxlIGluIFswLCAxKSB0aGF0IGNvbnRhaW5zXHJcbiAgLy8gcmFuZG9tbmVzcyBpbiBldmVyeSBiaXQgb2YgdGhlIG1hbnRpc3NhIG9mIHRoZSBJRUVFIDc1NCB2YWx1ZS5cclxuXHJcbiAgcmV0dXJuIGZ1bmN0aW9uKCkgeyAgICAgICAgIC8vIENsb3N1cmUgdG8gcmV0dXJuIGEgcmFuZG9tIGRvdWJsZTpcclxuICAgIHZhciBuID0gYXJjNC5nKGNodW5rcyksICAgICAgICAgICAgIC8vIFN0YXJ0IHdpdGggYSBudW1lcmF0b3IgbiA8IDIgXiA0OFxyXG4gICAgICAgIGQgPSBzdGFydGRlbm9tLCAgICAgICAgICAgICAgICAgLy8gICBhbmQgZGVub21pbmF0b3IgZCA9IDIgXiA0OC5cclxuICAgICAgICB4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgYW5kIG5vICdleHRyYSBsYXN0IGJ5dGUnLlxyXG4gICAgd2hpbGUgKG4gPCBzaWduaWZpY2FuY2UpIHsgICAgICAgICAgLy8gRmlsbCB1cCBhbGwgc2lnbmlmaWNhbnQgZGlnaXRzIGJ5XHJcbiAgICAgIG4gPSAobiArIHgpICogd2lkdGg7ICAgICAgICAgICAgICAvLyAgIHNoaWZ0aW5nIG51bWVyYXRvciBhbmRcclxuICAgICAgZCAqPSB3aWR0aDsgICAgICAgICAgICAgICAgICAgICAgIC8vICAgZGVub21pbmF0b3IgYW5kIGdlbmVyYXRpbmcgYVxyXG4gICAgICB4ID0gYXJjNC5nKDEpOyAgICAgICAgICAgICAgICAgICAgLy8gICBuZXcgbGVhc3Qtc2lnbmlmaWNhbnQtYnl0ZS5cclxuICAgIH1cclxuICAgIHdoaWxlIChuID49IG92ZXJmbG93KSB7ICAgICAgICAgICAgIC8vIFRvIGF2b2lkIHJvdW5kaW5nIHVwLCBiZWZvcmUgYWRkaW5nXHJcbiAgICAgIG4gLz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGxhc3QgYnl0ZSwgc2hpZnQgZXZlcnl0aGluZ1xyXG4gICAgICBkIC89IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICByaWdodCB1c2luZyBpbnRlZ2VyIE1hdGggdW50aWxcclxuICAgICAgeCA+Pj49IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgd2UgaGF2ZSBleGFjdGx5IHRoZSBkZXNpcmVkIGJpdHMuXHJcbiAgICB9XHJcbiAgICByZXR1cm4gKG4gKyB4KSAvIGQ7ICAgICAgICAgICAgICAgICAvLyBGb3JtIHRoZSBudW1iZXIgd2l0aGluIFswLCAxKS5cclxuICB9O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMucmVzZXRHbG9iYWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgTWF0aC5yYW5kb20gPSBvbGRSYW5kb207XHJcbn07XHJcblxyXG4vL1xyXG4vLyBBUkM0XHJcbi8vXHJcbi8vIEFuIEFSQzQgaW1wbGVtZW50YXRpb24uICBUaGUgY29uc3RydWN0b3IgdGFrZXMgYSBrZXkgaW4gdGhlIGZvcm0gb2ZcclxuLy8gYW4gYXJyYXkgb2YgYXQgbW9zdCAod2lkdGgpIGludGVnZXJzIHRoYXQgc2hvdWxkIGJlIDAgPD0geCA8ICh3aWR0aCkuXHJcbi8vXHJcbi8vIFRoZSBnKGNvdW50KSBtZXRob2QgcmV0dXJucyBhIHBzZXVkb3JhbmRvbSBpbnRlZ2VyIHRoYXQgY29uY2F0ZW5hdGVzXHJcbi8vIHRoZSBuZXh0IChjb3VudCkgb3V0cHV0cyBmcm9tIEFSQzQuICBJdHMgcmV0dXJuIHZhbHVlIGlzIGEgbnVtYmVyIHhcclxuLy8gdGhhdCBpcyBpbiB0aGUgcmFuZ2UgMCA8PSB4IDwgKHdpZHRoIF4gY291bnQpLlxyXG4vL1xyXG4vKiogQGNvbnN0cnVjdG9yICovXHJcbmZ1bmN0aW9uIEFSQzQoa2V5KSB7XHJcbiAgdmFyIHQsIGtleWxlbiA9IGtleS5sZW5ndGgsXHJcbiAgICAgIG1lID0gdGhpcywgaSA9IDAsIGogPSBtZS5pID0gbWUuaiA9IDAsIHMgPSBtZS5TID0gW107XHJcblxyXG4gIC8vIFRoZSBlbXB0eSBrZXkgW10gaXMgdHJlYXRlZCBhcyBbMF0uXHJcbiAgaWYgKCFrZXlsZW4pIHsga2V5ID0gW2tleWxlbisrXTsgfVxyXG5cclxuICAvLyBTZXQgdXAgUyB1c2luZyB0aGUgc3RhbmRhcmQga2V5IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxyXG4gIHdoaWxlIChpIDwgd2lkdGgpIHtcclxuICAgIHNbaV0gPSBpKys7XHJcbiAgfVxyXG4gIGZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7XHJcbiAgICBzW2ldID0gc1tqID0gbWFzayAmIChqICsga2V5W2kgJSBrZXlsZW5dICsgKHQgPSBzW2ldKSldO1xyXG4gICAgc1tqXSA9IHQ7XHJcbiAgfVxyXG5cclxuICAvLyBUaGUgXCJnXCIgbWV0aG9kIHJldHVybnMgdGhlIG5leHQgKGNvdW50KSBvdXRwdXRzIGFzIG9uZSBudW1iZXIuXHJcbiAgKG1lLmcgPSBmdW5jdGlvbihjb3VudCkge1xyXG4gICAgLy8gVXNpbmcgaW5zdGFuY2UgbWVtYmVycyBpbnN0ZWFkIG9mIGNsb3N1cmUgc3RhdGUgbmVhcmx5IGRvdWJsZXMgc3BlZWQuXHJcbiAgICB2YXIgdCwgciA9IDAsXHJcbiAgICAgICAgaSA9IG1lLmksIGogPSBtZS5qLCBzID0gbWUuUztcclxuICAgIHdoaWxlIChjb3VudC0tKSB7XHJcbiAgICAgIHQgPSBzW2kgPSBtYXNrICYgKGkgKyAxKV07XHJcbiAgICAgIHIgPSByICogd2lkdGggKyBzW21hc2sgJiAoKHNbaV0gPSBzW2ogPSBtYXNrICYgKGogKyB0KV0pICsgKHNbal0gPSB0KSldO1xyXG4gICAgfVxyXG4gICAgbWUuaSA9IGk7IG1lLmogPSBqO1xyXG4gICAgcmV0dXJuIHI7XHJcbiAgICAvLyBGb3Igcm9idXN0IHVucHJlZGljdGFiaWxpdHkgZGlzY2FyZCBhbiBpbml0aWFsIGJhdGNoIG9mIHZhbHVlcy5cclxuICAgIC8vIFNlZSBodHRwOi8vd3d3LnJzYS5jb20vcnNhbGFicy9ub2RlLmFzcD9pZD0yMDA5XHJcbiAgfSkod2lkdGgpO1xyXG59XHJcblxyXG4vL1xyXG4vLyBmbGF0dGVuKClcclxuLy8gQ29udmVydHMgYW4gb2JqZWN0IHRyZWUgdG8gbmVzdGVkIGFycmF5cyBvZiBzdHJpbmdzLlxyXG4vL1xyXG5mdW5jdGlvbiBmbGF0dGVuKG9iaiwgZGVwdGgpIHtcclxuICB2YXIgcmVzdWx0ID0gW10sIHR5cCA9ICh0eXBlb2Ygb2JqKVswXSwgcHJvcDtcclxuICBpZiAoZGVwdGggJiYgdHlwID09ICdvJykge1xyXG4gICAgZm9yIChwcm9wIGluIG9iaikge1xyXG4gICAgICB0cnkgeyByZXN1bHQucHVzaChmbGF0dGVuKG9ialtwcm9wXSwgZGVwdGggLSAxKSk7IH0gY2F0Y2ggKGUpIHt9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiAocmVzdWx0Lmxlbmd0aCA/IHJlc3VsdCA6IHR5cCA9PSAncycgPyBvYmogOiBvYmogKyAnXFwwJyk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIG1peGtleSgpXHJcbi8vIE1peGVzIGEgc3RyaW5nIHNlZWQgaW50byBhIGtleSB0aGF0IGlzIGFuIGFycmF5IG9mIGludGVnZXJzLCBhbmRcclxuLy8gcmV0dXJucyBhIHNob3J0ZW5lZCBzdHJpbmcgc2VlZCB0aGF0IGlzIGVxdWl2YWxlbnQgdG8gdGhlIHJlc3VsdCBrZXkuXHJcbi8vXHJcbmZ1bmN0aW9uIG1peGtleShzZWVkLCBrZXkpIHtcclxuICB2YXIgc3RyaW5nc2VlZCA9IHNlZWQgKyAnJywgc21lYXIsIGogPSAwO1xyXG4gIHdoaWxlIChqIDwgc3RyaW5nc2VlZC5sZW5ndGgpIHtcclxuICAgIGtleVttYXNrICYgal0gPVxyXG4gICAgICBtYXNrICYgKChzbWVhciBePSBrZXlbbWFzayAmIGpdICogMTkpICsgc3RyaW5nc2VlZC5jaGFyQ29kZUF0KGorKykpO1xyXG4gIH1cclxuICByZXR1cm4gdG9zdHJpbmcoa2V5KTtcclxufVxyXG5cclxuLy9cclxuLy8gYXV0b3NlZWQoKVxyXG4vLyBSZXR1cm5zIGFuIG9iamVjdCBmb3IgYXV0b3NlZWRpbmcsIHVzaW5nIHdpbmRvdy5jcnlwdG8gaWYgYXZhaWxhYmxlLlxyXG4vL1xyXG4vKiogQHBhcmFtIHtVaW50OEFycmF5PX0gc2VlZCAqL1xyXG5mdW5jdGlvbiBhdXRvc2VlZChzZWVkKSB7XHJcbiAgdHJ5IHtcclxuICAgIEdMT0JBTC5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHNlZWQgPSBuZXcgVWludDhBcnJheSh3aWR0aCkpO1xyXG4gICAgcmV0dXJuIHRvc3RyaW5nKHNlZWQpO1xyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHJldHVybiBbK25ldyBEYXRlLCBHTE9CQUwsIEdMT0JBTC5uYXZpZ2F0b3IgJiYgR0xPQkFMLm5hdmlnYXRvci5wbHVnaW5zLFxyXG4gICAgICAgICAgICBHTE9CQUwuc2NyZWVuLCB0b3N0cmluZyhwb29sKV07XHJcbiAgfVxyXG59XHJcblxyXG4vL1xyXG4vLyB0b3N0cmluZygpXHJcbi8vIENvbnZlcnRzIGFuIGFycmF5IG9mIGNoYXJjb2RlcyB0byBhIHN0cmluZ1xyXG4vL1xyXG5mdW5jdGlvbiB0b3N0cmluZyhhKSB7XHJcbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoMCwgYSk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIFdoZW4gc2VlZHJhbmRvbS5qcyBpcyBsb2FkZWQsIHdlIGltbWVkaWF0ZWx5IG1peCBhIGZldyBiaXRzXHJcbi8vIGZyb20gdGhlIGJ1aWx0LWluIFJORyBpbnRvIHRoZSBlbnRyb3B5IHBvb2wuICBCZWNhdXNlIHdlIGRvXHJcbi8vIG5vdCB3YW50IHRvIGludGVmZXJlIHdpdGggZGV0ZXJtaW5zdGljIFBSTkcgc3RhdGUgbGF0ZXIsXHJcbi8vIHNlZWRyYW5kb20gd2lsbCBub3QgY2FsbCBNYXRoLnJhbmRvbSBvbiBpdHMgb3duIGFnYWluIGFmdGVyXHJcbi8vIGluaXRpYWxpemF0aW9uLlxyXG4vL1xyXG5taXhrZXkoTWF0aC5yYW5kb20oKSwgcG9vbCk7XHJcbiIsIi8qXG4gKiBBIGZhc3QgamF2YXNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiBzaW1wbGV4IG5vaXNlIGJ5IEpvbmFzIFdhZ25lclxuXG5CYXNlZCBvbiBhIHNwZWVkLWltcHJvdmVkIHNpbXBsZXggbm9pc2UgYWxnb3JpdGhtIGZvciAyRCwgM0QgYW5kIDREIGluIEphdmEuXG5XaGljaCBpcyBiYXNlZCBvbiBleGFtcGxlIGNvZGUgYnkgU3RlZmFuIEd1c3RhdnNvbiAoc3RlZ3VAaXRuLmxpdS5zZSkuXG5XaXRoIE9wdGltaXNhdGlvbnMgYnkgUGV0ZXIgRWFzdG1hbiAocGVhc3RtYW5AZHJpenpsZS5zdGFuZm9yZC5lZHUpLlxuQmV0dGVyIHJhbmsgb3JkZXJpbmcgbWV0aG9kIGJ5IFN0ZWZhbiBHdXN0YXZzb24gaW4gMjAxMi5cblxuXG4gQ29weXJpZ2h0IChjKSAyMDE4IEpvbmFzIFdhZ25lclxuXG4gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gU09GVFdBUkUuXG4gKi9cbihmdW5jdGlvbigpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciBGMiA9IDAuNSAqIChNYXRoLnNxcnQoMy4wKSAtIDEuMCk7XG4gIHZhciBHMiA9ICgzLjAgLSBNYXRoLnNxcnQoMy4wKSkgLyA2LjA7XG4gIHZhciBGMyA9IDEuMCAvIDMuMDtcbiAgdmFyIEczID0gMS4wIC8gNi4wO1xuICB2YXIgRjQgPSAoTWF0aC5zcXJ0KDUuMCkgLSAxLjApIC8gNC4wO1xuICB2YXIgRzQgPSAoNS4wIC0gTWF0aC5zcXJ0KDUuMCkpIC8gMjAuMDtcblxuICBmdW5jdGlvbiBTaW1wbGV4Tm9pc2UocmFuZG9tT3JTZWVkKSB7XG4gICAgdmFyIHJhbmRvbTtcbiAgICBpZiAodHlwZW9mIHJhbmRvbU9yU2VlZCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByYW5kb20gPSByYW5kb21PclNlZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJhbmRvbU9yU2VlZCkge1xuICAgICAgcmFuZG9tID0gYWxlYShyYW5kb21PclNlZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYW5kb20gPSBNYXRoLnJhbmRvbTtcbiAgICB9XG4gICAgdGhpcy5wID0gYnVpbGRQZXJtdXRhdGlvblRhYmxlKHJhbmRvbSk7XG4gICAgdGhpcy5wZXJtID0gbmV3IFVpbnQ4QXJyYXkoNTEyKTtcbiAgICB0aGlzLnBlcm1Nb2QxMiA9IG5ldyBVaW50OEFycmF5KDUxMik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1MTI7IGkrKykge1xuICAgICAgdGhpcy5wZXJtW2ldID0gdGhpcy5wW2kgJiAyNTVdO1xuICAgICAgdGhpcy5wZXJtTW9kMTJbaV0gPSB0aGlzLnBlcm1baV0gJSAxMjtcbiAgICB9XG5cbiAgfVxuICBTaW1wbGV4Tm9pc2UucHJvdG90eXBlID0ge1xuICAgIGdyYWQzOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAxLCAwLFxuICAgICAgLTEsIDEsIDAsXG4gICAgICAxLCAtMSwgMCxcblxuICAgICAgLTEsIC0xLCAwLFxuICAgICAgMSwgMCwgMSxcbiAgICAgIC0xLCAwLCAxLFxuXG4gICAgICAxLCAwLCAtMSxcbiAgICAgIC0xLCAwLCAtMSxcbiAgICAgIDAsIDEsIDEsXG5cbiAgICAgIDAsIC0xLCAxLFxuICAgICAgMCwgMSwgLTEsXG4gICAgICAwLCAtMSwgLTFdKSxcbiAgICBncmFkNDogbmV3IEZsb2F0MzJBcnJheShbMCwgMSwgMSwgMSwgMCwgMSwgMSwgLTEsIDAsIDEsIC0xLCAxLCAwLCAxLCAtMSwgLTEsXG4gICAgICAwLCAtMSwgMSwgMSwgMCwgLTEsIDEsIC0xLCAwLCAtMSwgLTEsIDEsIDAsIC0xLCAtMSwgLTEsXG4gICAgICAxLCAwLCAxLCAxLCAxLCAwLCAxLCAtMSwgMSwgMCwgLTEsIDEsIDEsIDAsIC0xLCAtMSxcbiAgICAgIC0xLCAwLCAxLCAxLCAtMSwgMCwgMSwgLTEsIC0xLCAwLCAtMSwgMSwgLTEsIDAsIC0xLCAtMSxcbiAgICAgIDEsIDEsIDAsIDEsIDEsIDEsIDAsIC0xLCAxLCAtMSwgMCwgMSwgMSwgLTEsIDAsIC0xLFxuICAgICAgLTEsIDEsIDAsIDEsIC0xLCAxLCAwLCAtMSwgLTEsIC0xLCAwLCAxLCAtMSwgLTEsIDAsIC0xLFxuICAgICAgMSwgMSwgMSwgMCwgMSwgMSwgLTEsIDAsIDEsIC0xLCAxLCAwLCAxLCAtMSwgLTEsIDAsXG4gICAgICAtMSwgMSwgMSwgMCwgLTEsIDEsIC0xLCAwLCAtMSwgLTEsIDEsIDAsIC0xLCAtMSwgLTEsIDBdKSxcbiAgICBub2lzZTJEOiBmdW5jdGlvbih4aW4sIHlpbikge1xuICAgICAgdmFyIHBlcm1Nb2QxMiA9IHRoaXMucGVybU1vZDEyO1xuICAgICAgdmFyIHBlcm0gPSB0aGlzLnBlcm07XG4gICAgICB2YXIgZ3JhZDMgPSB0aGlzLmdyYWQzO1xuICAgICAgdmFyIG4wID0gMDsgLy8gTm9pc2UgY29udHJpYnV0aW9ucyBmcm9tIHRoZSB0aHJlZSBjb3JuZXJzXG4gICAgICB2YXIgbjEgPSAwO1xuICAgICAgdmFyIG4yID0gMDtcbiAgICAgIC8vIFNrZXcgdGhlIGlucHV0IHNwYWNlIHRvIGRldGVybWluZSB3aGljaCBzaW1wbGV4IGNlbGwgd2UncmUgaW5cbiAgICAgIHZhciBzID0gKHhpbiArIHlpbikgKiBGMjsgLy8gSGFpcnkgZmFjdG9yIGZvciAyRFxuICAgICAgdmFyIGkgPSBNYXRoLmZsb29yKHhpbiArIHMpO1xuICAgICAgdmFyIGogPSBNYXRoLmZsb29yKHlpbiArIHMpO1xuICAgICAgdmFyIHQgPSAoaSArIGopICogRzI7XG4gICAgICB2YXIgWDAgPSBpIC0gdDsgLy8gVW5za2V3IHRoZSBjZWxsIG9yaWdpbiBiYWNrIHRvICh4LHkpIHNwYWNlXG4gICAgICB2YXIgWTAgPSBqIC0gdDtcbiAgICAgIHZhciB4MCA9IHhpbiAtIFgwOyAvLyBUaGUgeCx5IGRpc3RhbmNlcyBmcm9tIHRoZSBjZWxsIG9yaWdpblxuICAgICAgdmFyIHkwID0geWluIC0gWTA7XG4gICAgICAvLyBGb3IgdGhlIDJEIGNhc2UsIHRoZSBzaW1wbGV4IHNoYXBlIGlzIGFuIGVxdWlsYXRlcmFsIHRyaWFuZ2xlLlxuICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHNpbXBsZXggd2UgYXJlIGluLlxuICAgICAgdmFyIGkxLCBqMTsgLy8gT2Zmc2V0cyBmb3Igc2Vjb25kIChtaWRkbGUpIGNvcm5lciBvZiBzaW1wbGV4IGluIChpLGopIGNvb3Jkc1xuICAgICAgaWYgKHgwID4geTApIHtcbiAgICAgICAgaTEgPSAxO1xuICAgICAgICBqMSA9IDA7XG4gICAgICB9IC8vIGxvd2VyIHRyaWFuZ2xlLCBYWSBvcmRlcjogKDAsMCktPigxLDApLT4oMSwxKVxuICAgICAgZWxzZSB7XG4gICAgICAgIGkxID0gMDtcbiAgICAgICAgajEgPSAxO1xuICAgICAgfSAvLyB1cHBlciB0cmlhbmdsZSwgWVggb3JkZXI6ICgwLDApLT4oMCwxKS0+KDEsMSlcbiAgICAgIC8vIEEgc3RlcCBvZiAoMSwwKSBpbiAoaSxqKSBtZWFucyBhIHN0ZXAgb2YgKDEtYywtYykgaW4gKHgseSksIGFuZFxuICAgICAgLy8gYSBzdGVwIG9mICgwLDEpIGluIChpLGopIG1lYW5zIGEgc3RlcCBvZiAoLWMsMS1jKSBpbiAoeCx5KSwgd2hlcmVcbiAgICAgIC8vIGMgPSAoMy1zcXJ0KDMpKS82XG4gICAgICB2YXIgeDEgPSB4MCAtIGkxICsgRzI7IC8vIE9mZnNldHMgZm9yIG1pZGRsZSBjb3JuZXIgaW4gKHgseSkgdW5za2V3ZWQgY29vcmRzXG4gICAgICB2YXIgeTEgPSB5MCAtIGoxICsgRzI7XG4gICAgICB2YXIgeDIgPSB4MCAtIDEuMCArIDIuMCAqIEcyOyAvLyBPZmZzZXRzIGZvciBsYXN0IGNvcm5lciBpbiAoeCx5KSB1bnNrZXdlZCBjb29yZHNcbiAgICAgIHZhciB5MiA9IHkwIC0gMS4wICsgMi4wICogRzI7XG4gICAgICAvLyBXb3JrIG91dCB0aGUgaGFzaGVkIGdyYWRpZW50IGluZGljZXMgb2YgdGhlIHRocmVlIHNpbXBsZXggY29ybmVyc1xuICAgICAgdmFyIGlpID0gaSAmIDI1NTtcbiAgICAgIHZhciBqaiA9IGogJiAyNTU7XG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSB0aHJlZSBjb3JuZXJzXG4gICAgICB2YXIgdDAgPSAwLjUgLSB4MCAqIHgwIC0geTAgKiB5MDtcbiAgICAgIGlmICh0MCA+PSAwKSB7XG4gICAgICAgIHZhciBnaTAgPSBwZXJtTW9kMTJbaWkgKyBwZXJtW2pqXV0gKiAzO1xuICAgICAgICB0MCAqPSB0MDtcbiAgICAgICAgbjAgPSB0MCAqIHQwICogKGdyYWQzW2dpMF0gKiB4MCArIGdyYWQzW2dpMCArIDFdICogeTApOyAvLyAoeCx5KSBvZiBncmFkMyB1c2VkIGZvciAyRCBncmFkaWVudFxuICAgICAgfVxuICAgICAgdmFyIHQxID0gMC41IC0geDEgKiB4MSAtIHkxICogeTE7XG4gICAgICBpZiAodDEgPj0gMCkge1xuICAgICAgICB2YXIgZ2kxID0gcGVybU1vZDEyW2lpICsgaTEgKyBwZXJtW2pqICsgajFdXSAqIDM7XG4gICAgICAgIHQxICo9IHQxO1xuICAgICAgICBuMSA9IHQxICogdDEgKiAoZ3JhZDNbZ2kxXSAqIHgxICsgZ3JhZDNbZ2kxICsgMV0gKiB5MSk7XG4gICAgICB9XG4gICAgICB2YXIgdDIgPSAwLjUgLSB4MiAqIHgyIC0geTIgKiB5MjtcbiAgICAgIGlmICh0MiA+PSAwKSB7XG4gICAgICAgIHZhciBnaTIgPSBwZXJtTW9kMTJbaWkgKyAxICsgcGVybVtqaiArIDFdXSAqIDM7XG4gICAgICAgIHQyICo9IHQyO1xuICAgICAgICBuMiA9IHQyICogdDIgKiAoZ3JhZDNbZ2kyXSAqIHgyICsgZ3JhZDNbZ2kyICsgMV0gKiB5Mik7XG4gICAgICB9XG4gICAgICAvLyBBZGQgY29udHJpYnV0aW9ucyBmcm9tIGVhY2ggY29ybmVyIHRvIGdldCB0aGUgZmluYWwgbm9pc2UgdmFsdWUuXG4gICAgICAvLyBUaGUgcmVzdWx0IGlzIHNjYWxlZCB0byByZXR1cm4gdmFsdWVzIGluIHRoZSBpbnRlcnZhbCBbLTEsMV0uXG4gICAgICByZXR1cm4gNzAuMCAqIChuMCArIG4xICsgbjIpO1xuICAgIH0sXG4gICAgLy8gM0Qgc2ltcGxleCBub2lzZVxuICAgIG5vaXNlM0Q6IGZ1bmN0aW9uKHhpbiwgeWluLCB6aW4pIHtcbiAgICAgIHZhciBwZXJtTW9kMTIgPSB0aGlzLnBlcm1Nb2QxMjtcbiAgICAgIHZhciBwZXJtID0gdGhpcy5wZXJtO1xuICAgICAgdmFyIGdyYWQzID0gdGhpcy5ncmFkMztcbiAgICAgIHZhciBuMCwgbjEsIG4yLCBuMzsgLy8gTm9pc2UgY29udHJpYnV0aW9ucyBmcm9tIHRoZSBmb3VyIGNvcm5lcnNcbiAgICAgIC8vIFNrZXcgdGhlIGlucHV0IHNwYWNlIHRvIGRldGVybWluZSB3aGljaCBzaW1wbGV4IGNlbGwgd2UncmUgaW5cbiAgICAgIHZhciBzID0gKHhpbiArIHlpbiArIHppbikgKiBGMzsgLy8gVmVyeSBuaWNlIGFuZCBzaW1wbGUgc2tldyBmYWN0b3IgZm9yIDNEXG4gICAgICB2YXIgaSA9IE1hdGguZmxvb3IoeGluICsgcyk7XG4gICAgICB2YXIgaiA9IE1hdGguZmxvb3IoeWluICsgcyk7XG4gICAgICB2YXIgayA9IE1hdGguZmxvb3IoemluICsgcyk7XG4gICAgICB2YXIgdCA9IChpICsgaiArIGspICogRzM7XG4gICAgICB2YXIgWDAgPSBpIC0gdDsgLy8gVW5za2V3IHRoZSBjZWxsIG9yaWdpbiBiYWNrIHRvICh4LHkseikgc3BhY2VcbiAgICAgIHZhciBZMCA9IGogLSB0O1xuICAgICAgdmFyIFowID0gayAtIHQ7XG4gICAgICB2YXIgeDAgPSB4aW4gLSBYMDsgLy8gVGhlIHgseSx6IGRpc3RhbmNlcyBmcm9tIHRoZSBjZWxsIG9yaWdpblxuICAgICAgdmFyIHkwID0geWluIC0gWTA7XG4gICAgICB2YXIgejAgPSB6aW4gLSBaMDtcbiAgICAgIC8vIEZvciB0aGUgM0QgY2FzZSwgdGhlIHNpbXBsZXggc2hhcGUgaXMgYSBzbGlnaHRseSBpcnJlZ3VsYXIgdGV0cmFoZWRyb24uXG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggc2ltcGxleCB3ZSBhcmUgaW4uXG4gICAgICB2YXIgaTEsIGoxLCBrMTsgLy8gT2Zmc2V0cyBmb3Igc2Vjb25kIGNvcm5lciBvZiBzaW1wbGV4IGluIChpLGosaykgY29vcmRzXG4gICAgICB2YXIgaTIsIGoyLCBrMjsgLy8gT2Zmc2V0cyBmb3IgdGhpcmQgY29ybmVyIG9mIHNpbXBsZXggaW4gKGksaixrKSBjb29yZHNcbiAgICAgIGlmICh4MCA+PSB5MCkge1xuICAgICAgICBpZiAoeTAgPj0gejApIHtcbiAgICAgICAgICBpMSA9IDE7XG4gICAgICAgICAgajEgPSAwO1xuICAgICAgICAgIGsxID0gMDtcbiAgICAgICAgICBpMiA9IDE7XG4gICAgICAgICAgajIgPSAxO1xuICAgICAgICAgIGsyID0gMDtcbiAgICAgICAgfSAvLyBYIFkgWiBvcmRlclxuICAgICAgICBlbHNlIGlmICh4MCA+PSB6MCkge1xuICAgICAgICAgIGkxID0gMTtcbiAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgazEgPSAwO1xuICAgICAgICAgIGkyID0gMTtcbiAgICAgICAgICBqMiA9IDA7XG4gICAgICAgICAgazIgPSAxO1xuICAgICAgICB9IC8vIFggWiBZIG9yZGVyXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGkxID0gMDtcbiAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgazEgPSAxO1xuICAgICAgICAgIGkyID0gMTtcbiAgICAgICAgICBqMiA9IDA7XG4gICAgICAgICAgazIgPSAxO1xuICAgICAgICB9IC8vIFogWCBZIG9yZGVyXG4gICAgICB9XG4gICAgICBlbHNlIHsgLy8geDA8eTBcbiAgICAgICAgaWYgKHkwIDwgejApIHtcbiAgICAgICAgICBpMSA9IDA7XG4gICAgICAgICAgajEgPSAwO1xuICAgICAgICAgIGsxID0gMTtcbiAgICAgICAgICBpMiA9IDA7XG4gICAgICAgICAgajIgPSAxO1xuICAgICAgICAgIGsyID0gMTtcbiAgICAgICAgfSAvLyBaIFkgWCBvcmRlclxuICAgICAgICBlbHNlIGlmICh4MCA8IHowKSB7XG4gICAgICAgICAgaTEgPSAwO1xuICAgICAgICAgIGoxID0gMTtcbiAgICAgICAgICBrMSA9IDA7XG4gICAgICAgICAgaTIgPSAwO1xuICAgICAgICAgIGoyID0gMTtcbiAgICAgICAgICBrMiA9IDE7XG4gICAgICAgIH0gLy8gWSBaIFggb3JkZXJcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaTEgPSAwO1xuICAgICAgICAgIGoxID0gMTtcbiAgICAgICAgICBrMSA9IDA7XG4gICAgICAgICAgaTIgPSAxO1xuICAgICAgICAgIGoyID0gMTtcbiAgICAgICAgICBrMiA9IDA7XG4gICAgICAgIH0gLy8gWSBYIFogb3JkZXJcbiAgICAgIH1cbiAgICAgIC8vIEEgc3RlcCBvZiAoMSwwLDApIGluIChpLGosaykgbWVhbnMgYSBzdGVwIG9mICgxLWMsLWMsLWMpIGluICh4LHkseiksXG4gICAgICAvLyBhIHN0ZXAgb2YgKDAsMSwwKSBpbiAoaSxqLGspIG1lYW5zIGEgc3RlcCBvZiAoLWMsMS1jLC1jKSBpbiAoeCx5LHopLCBhbmRcbiAgICAgIC8vIGEgc3RlcCBvZiAoMCwwLDEpIGluIChpLGosaykgbWVhbnMgYSBzdGVwIG9mICgtYywtYywxLWMpIGluICh4LHkseiksIHdoZXJlXG4gICAgICAvLyBjID0gMS82LlxuICAgICAgdmFyIHgxID0geDAgLSBpMSArIEczOyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgY29ybmVyIGluICh4LHkseikgY29vcmRzXG4gICAgICB2YXIgeTEgPSB5MCAtIGoxICsgRzM7XG4gICAgICB2YXIgejEgPSB6MCAtIGsxICsgRzM7XG4gICAgICB2YXIgeDIgPSB4MCAtIGkyICsgMi4wICogRzM7IC8vIE9mZnNldHMgZm9yIHRoaXJkIGNvcm5lciBpbiAoeCx5LHopIGNvb3Jkc1xuICAgICAgdmFyIHkyID0geTAgLSBqMiArIDIuMCAqIEczO1xuICAgICAgdmFyIHoyID0gejAgLSBrMiArIDIuMCAqIEczO1xuICAgICAgdmFyIHgzID0geDAgLSAxLjAgKyAzLjAgKiBHMzsgLy8gT2Zmc2V0cyBmb3IgbGFzdCBjb3JuZXIgaW4gKHgseSx6KSBjb29yZHNcbiAgICAgIHZhciB5MyA9IHkwIC0gMS4wICsgMy4wICogRzM7XG4gICAgICB2YXIgejMgPSB6MCAtIDEuMCArIDMuMCAqIEczO1xuICAgICAgLy8gV29yayBvdXQgdGhlIGhhc2hlZCBncmFkaWVudCBpbmRpY2VzIG9mIHRoZSBmb3VyIHNpbXBsZXggY29ybmVyc1xuICAgICAgdmFyIGlpID0gaSAmIDI1NTtcbiAgICAgIHZhciBqaiA9IGogJiAyNTU7XG4gICAgICB2YXIga2sgPSBrICYgMjU1O1xuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjb250cmlidXRpb24gZnJvbSB0aGUgZm91ciBjb3JuZXJzXG4gICAgICB2YXIgdDAgPSAwLjYgLSB4MCAqIHgwIC0geTAgKiB5MCAtIHowICogejA7XG4gICAgICBpZiAodDAgPCAwKSBuMCA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kwID0gcGVybU1vZDEyW2lpICsgcGVybVtqaiArIHBlcm1ba2tdXV0gKiAzO1xuICAgICAgICB0MCAqPSB0MDtcbiAgICAgICAgbjAgPSB0MCAqIHQwICogKGdyYWQzW2dpMF0gKiB4MCArIGdyYWQzW2dpMCArIDFdICogeTAgKyBncmFkM1tnaTAgKyAyXSAqIHowKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MSA9IDAuNiAtIHgxICogeDEgLSB5MSAqIHkxIC0gejEgKiB6MTtcbiAgICAgIGlmICh0MSA8IDApIG4xID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTEgPSBwZXJtTW9kMTJbaWkgKyBpMSArIHBlcm1bamogKyBqMSArIHBlcm1ba2sgKyBrMV1dXSAqIDM7XG4gICAgICAgIHQxICo9IHQxO1xuICAgICAgICBuMSA9IHQxICogdDEgKiAoZ3JhZDNbZ2kxXSAqIHgxICsgZ3JhZDNbZ2kxICsgMV0gKiB5MSArIGdyYWQzW2dpMSArIDJdICogejEpO1xuICAgICAgfVxuICAgICAgdmFyIHQyID0gMC42IC0geDIgKiB4MiAtIHkyICogeTIgLSB6MiAqIHoyO1xuICAgICAgaWYgKHQyIDwgMCkgbjIgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMiA9IHBlcm1Nb2QxMltpaSArIGkyICsgcGVybVtqaiArIGoyICsgcGVybVtrayArIGsyXV1dICogMztcbiAgICAgICAgdDIgKj0gdDI7XG4gICAgICAgIG4yID0gdDIgKiB0MiAqIChncmFkM1tnaTJdICogeDIgKyBncmFkM1tnaTIgKyAxXSAqIHkyICsgZ3JhZDNbZ2kyICsgMl0gKiB6Mik7XG4gICAgICB9XG4gICAgICB2YXIgdDMgPSAwLjYgLSB4MyAqIHgzIC0geTMgKiB5MyAtIHozICogejM7XG4gICAgICBpZiAodDMgPCAwKSBuMyA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kzID0gcGVybU1vZDEyW2lpICsgMSArIHBlcm1bamogKyAxICsgcGVybVtrayArIDFdXV0gKiAzO1xuICAgICAgICB0MyAqPSB0MztcbiAgICAgICAgbjMgPSB0MyAqIHQzICogKGdyYWQzW2dpM10gKiB4MyArIGdyYWQzW2dpMyArIDFdICogeTMgKyBncmFkM1tnaTMgKyAyXSAqIHozKTtcbiAgICAgIH1cbiAgICAgIC8vIEFkZCBjb250cmlidXRpb25zIGZyb20gZWFjaCBjb3JuZXIgdG8gZ2V0IHRoZSBmaW5hbCBub2lzZSB2YWx1ZS5cbiAgICAgIC8vIFRoZSByZXN1bHQgaXMgc2NhbGVkIHRvIHN0YXkganVzdCBpbnNpZGUgWy0xLDFdXG4gICAgICByZXR1cm4gMzIuMCAqIChuMCArIG4xICsgbjIgKyBuMyk7XG4gICAgfSxcbiAgICAvLyA0RCBzaW1wbGV4IG5vaXNlLCBiZXR0ZXIgc2ltcGxleCByYW5rIG9yZGVyaW5nIG1ldGhvZCAyMDEyLTAzLTA5XG4gICAgbm9pc2U0RDogZnVuY3Rpb24oeCwgeSwgeiwgdykge1xuICAgICAgdmFyIHBlcm0gPSB0aGlzLnBlcm07XG4gICAgICB2YXIgZ3JhZDQgPSB0aGlzLmdyYWQ0O1xuXG4gICAgICB2YXIgbjAsIG4xLCBuMiwgbjMsIG40OyAvLyBOb2lzZSBjb250cmlidXRpb25zIGZyb20gdGhlIGZpdmUgY29ybmVyc1xuICAgICAgLy8gU2tldyB0aGUgKHgseSx6LHcpIHNwYWNlIHRvIGRldGVybWluZSB3aGljaCBjZWxsIG9mIDI0IHNpbXBsaWNlcyB3ZSdyZSBpblxuICAgICAgdmFyIHMgPSAoeCArIHkgKyB6ICsgdykgKiBGNDsgLy8gRmFjdG9yIGZvciA0RCBza2V3aW5nXG4gICAgICB2YXIgaSA9IE1hdGguZmxvb3IoeCArIHMpO1xuICAgICAgdmFyIGogPSBNYXRoLmZsb29yKHkgKyBzKTtcbiAgICAgIHZhciBrID0gTWF0aC5mbG9vcih6ICsgcyk7XG4gICAgICB2YXIgbCA9IE1hdGguZmxvb3IodyArIHMpO1xuICAgICAgdmFyIHQgPSAoaSArIGogKyBrICsgbCkgKiBHNDsgLy8gRmFjdG9yIGZvciA0RCB1bnNrZXdpbmdcbiAgICAgIHZhciBYMCA9IGkgLSB0OyAvLyBVbnNrZXcgdGhlIGNlbGwgb3JpZ2luIGJhY2sgdG8gKHgseSx6LHcpIHNwYWNlXG4gICAgICB2YXIgWTAgPSBqIC0gdDtcbiAgICAgIHZhciBaMCA9IGsgLSB0O1xuICAgICAgdmFyIFcwID0gbCAtIHQ7XG4gICAgICB2YXIgeDAgPSB4IC0gWDA7IC8vIFRoZSB4LHkseix3IGRpc3RhbmNlcyBmcm9tIHRoZSBjZWxsIG9yaWdpblxuICAgICAgdmFyIHkwID0geSAtIFkwO1xuICAgICAgdmFyIHowID0geiAtIFowO1xuICAgICAgdmFyIHcwID0gdyAtIFcwO1xuICAgICAgLy8gRm9yIHRoZSA0RCBjYXNlLCB0aGUgc2ltcGxleCBpcyBhIDREIHNoYXBlIEkgd29uJ3QgZXZlbiB0cnkgdG8gZGVzY3JpYmUuXG4gICAgICAvLyBUbyBmaW5kIG91dCB3aGljaCBvZiB0aGUgMjQgcG9zc2libGUgc2ltcGxpY2VzIHdlJ3JlIGluLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBkZXRlcm1pbmUgdGhlIG1hZ25pdHVkZSBvcmRlcmluZyBvZiB4MCwgeTAsIHowIGFuZCB3MC5cbiAgICAgIC8vIFNpeCBwYWlyLXdpc2UgY29tcGFyaXNvbnMgYXJlIHBlcmZvcm1lZCBiZXR3ZWVuIGVhY2ggcG9zc2libGUgcGFpclxuICAgICAgLy8gb2YgdGhlIGZvdXIgY29vcmRpbmF0ZXMsIGFuZCB0aGUgcmVzdWx0cyBhcmUgdXNlZCB0byByYW5rIHRoZSBudW1iZXJzLlxuICAgICAgdmFyIHJhbmt4ID0gMDtcbiAgICAgIHZhciByYW5reSA9IDA7XG4gICAgICB2YXIgcmFua3ogPSAwO1xuICAgICAgdmFyIHJhbmt3ID0gMDtcbiAgICAgIGlmICh4MCA+IHkwKSByYW5reCsrO1xuICAgICAgZWxzZSByYW5reSsrO1xuICAgICAgaWYgKHgwID4gejApIHJhbmt4Kys7XG4gICAgICBlbHNlIHJhbmt6Kys7XG4gICAgICBpZiAoeDAgPiB3MCkgcmFua3grKztcbiAgICAgIGVsc2UgcmFua3crKztcbiAgICAgIGlmICh5MCA+IHowKSByYW5reSsrO1xuICAgICAgZWxzZSByYW5reisrO1xuICAgICAgaWYgKHkwID4gdzApIHJhbmt5Kys7XG4gICAgICBlbHNlIHJhbmt3Kys7XG4gICAgICBpZiAoejAgPiB3MCkgcmFua3orKztcbiAgICAgIGVsc2UgcmFua3crKztcbiAgICAgIHZhciBpMSwgajEsIGsxLCBsMTsgLy8gVGhlIGludGVnZXIgb2Zmc2V0cyBmb3IgdGhlIHNlY29uZCBzaW1wbGV4IGNvcm5lclxuICAgICAgdmFyIGkyLCBqMiwgazIsIGwyOyAvLyBUaGUgaW50ZWdlciBvZmZzZXRzIGZvciB0aGUgdGhpcmQgc2ltcGxleCBjb3JuZXJcbiAgICAgIHZhciBpMywgajMsIGszLCBsMzsgLy8gVGhlIGludGVnZXIgb2Zmc2V0cyBmb3IgdGhlIGZvdXJ0aCBzaW1wbGV4IGNvcm5lclxuICAgICAgLy8gc2ltcGxleFtjXSBpcyBhIDQtdmVjdG9yIHdpdGggdGhlIG51bWJlcnMgMCwgMSwgMiBhbmQgMyBpbiBzb21lIG9yZGVyLlxuICAgICAgLy8gTWFueSB2YWx1ZXMgb2YgYyB3aWxsIG5ldmVyIG9jY3VyLCBzaW5jZSBlLmcuIHg+eT56PncgbWFrZXMgeDx6LCB5PHcgYW5kIHg8d1xuICAgICAgLy8gaW1wb3NzaWJsZS4gT25seSB0aGUgMjQgaW5kaWNlcyB3aGljaCBoYXZlIG5vbi16ZXJvIGVudHJpZXMgbWFrZSBhbnkgc2Vuc2UuXG4gICAgICAvLyBXZSB1c2UgYSB0aHJlc2hvbGRpbmcgdG8gc2V0IHRoZSBjb29yZGluYXRlcyBpbiB0dXJuIGZyb20gdGhlIGxhcmdlc3QgbWFnbml0dWRlLlxuICAgICAgLy8gUmFuayAzIGRlbm90ZXMgdGhlIGxhcmdlc3QgY29vcmRpbmF0ZS5cbiAgICAgIGkxID0gcmFua3ggPj0gMyA/IDEgOiAwO1xuICAgICAgajEgPSByYW5reSA+PSAzID8gMSA6IDA7XG4gICAgICBrMSA9IHJhbmt6ID49IDMgPyAxIDogMDtcbiAgICAgIGwxID0gcmFua3cgPj0gMyA/IDEgOiAwO1xuICAgICAgLy8gUmFuayAyIGRlbm90ZXMgdGhlIHNlY29uZCBsYXJnZXN0IGNvb3JkaW5hdGUuXG4gICAgICBpMiA9IHJhbmt4ID49IDIgPyAxIDogMDtcbiAgICAgIGoyID0gcmFua3kgPj0gMiA/IDEgOiAwO1xuICAgICAgazIgPSByYW5reiA+PSAyID8gMSA6IDA7XG4gICAgICBsMiA9IHJhbmt3ID49IDIgPyAxIDogMDtcbiAgICAgIC8vIFJhbmsgMSBkZW5vdGVzIHRoZSBzZWNvbmQgc21hbGxlc3QgY29vcmRpbmF0ZS5cbiAgICAgIGkzID0gcmFua3ggPj0gMSA/IDEgOiAwO1xuICAgICAgajMgPSByYW5reSA+PSAxID8gMSA6IDA7XG4gICAgICBrMyA9IHJhbmt6ID49IDEgPyAxIDogMDtcbiAgICAgIGwzID0gcmFua3cgPj0gMSA/IDEgOiAwO1xuICAgICAgLy8gVGhlIGZpZnRoIGNvcm5lciBoYXMgYWxsIGNvb3JkaW5hdGUgb2Zmc2V0cyA9IDEsIHNvIG5vIG5lZWQgdG8gY29tcHV0ZSB0aGF0LlxuICAgICAgdmFyIHgxID0geDAgLSBpMSArIEc0OyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgIHZhciB5MSA9IHkwIC0gajEgKyBHNDtcbiAgICAgIHZhciB6MSA9IHowIC0gazEgKyBHNDtcbiAgICAgIHZhciB3MSA9IHcwIC0gbDEgKyBHNDtcbiAgICAgIHZhciB4MiA9IHgwIC0gaTIgKyAyLjAgKiBHNDsgLy8gT2Zmc2V0cyBmb3IgdGhpcmQgY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgIHZhciB5MiA9IHkwIC0gajIgKyAyLjAgKiBHNDtcbiAgICAgIHZhciB6MiA9IHowIC0gazIgKyAyLjAgKiBHNDtcbiAgICAgIHZhciB3MiA9IHcwIC0gbDIgKyAyLjAgKiBHNDtcbiAgICAgIHZhciB4MyA9IHgwIC0gaTMgKyAzLjAgKiBHNDsgLy8gT2Zmc2V0cyBmb3IgZm91cnRoIGNvcm5lciBpbiAoeCx5LHosdykgY29vcmRzXG4gICAgICB2YXIgeTMgPSB5MCAtIGozICsgMy4wICogRzQ7XG4gICAgICB2YXIgejMgPSB6MCAtIGszICsgMy4wICogRzQ7XG4gICAgICB2YXIgdzMgPSB3MCAtIGwzICsgMy4wICogRzQ7XG4gICAgICB2YXIgeDQgPSB4MCAtIDEuMCArIDQuMCAqIEc0OyAvLyBPZmZzZXRzIGZvciBsYXN0IGNvcm5lciBpbiAoeCx5LHosdykgY29vcmRzXG4gICAgICB2YXIgeTQgPSB5MCAtIDEuMCArIDQuMCAqIEc0O1xuICAgICAgdmFyIHo0ID0gejAgLSAxLjAgKyA0LjAgKiBHNDtcbiAgICAgIHZhciB3NCA9IHcwIC0gMS4wICsgNC4wICogRzQ7XG4gICAgICAvLyBXb3JrIG91dCB0aGUgaGFzaGVkIGdyYWRpZW50IGluZGljZXMgb2YgdGhlIGZpdmUgc2ltcGxleCBjb3JuZXJzXG4gICAgICB2YXIgaWkgPSBpICYgMjU1O1xuICAgICAgdmFyIGpqID0gaiAmIDI1NTtcbiAgICAgIHZhciBrayA9IGsgJiAyNTU7XG4gICAgICB2YXIgbGwgPSBsICYgMjU1O1xuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjb250cmlidXRpb24gZnJvbSB0aGUgZml2ZSBjb3JuZXJzXG4gICAgICB2YXIgdDAgPSAwLjYgLSB4MCAqIHgwIC0geTAgKiB5MCAtIHowICogejAgLSB3MCAqIHcwO1xuICAgICAgaWYgKHQwIDwgMCkgbjAgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMCA9IChwZXJtW2lpICsgcGVybVtqaiArIHBlcm1ba2sgKyBwZXJtW2xsXV1dXSAlIDMyKSAqIDQ7XG4gICAgICAgIHQwICo9IHQwO1xuICAgICAgICBuMCA9IHQwICogdDAgKiAoZ3JhZDRbZ2kwXSAqIHgwICsgZ3JhZDRbZ2kwICsgMV0gKiB5MCArIGdyYWQ0W2dpMCArIDJdICogejAgKyBncmFkNFtnaTAgKyAzXSAqIHcwKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MSA9IDAuNiAtIHgxICogeDEgLSB5MSAqIHkxIC0gejEgKiB6MSAtIHcxICogdzE7XG4gICAgICBpZiAodDEgPCAwKSBuMSA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kxID0gKHBlcm1baWkgKyBpMSArIHBlcm1bamogKyBqMSArIHBlcm1ba2sgKyBrMSArIHBlcm1bbGwgKyBsMV1dXV0gJSAzMikgKiA0O1xuICAgICAgICB0MSAqPSB0MTtcbiAgICAgICAgbjEgPSB0MSAqIHQxICogKGdyYWQ0W2dpMV0gKiB4MSArIGdyYWQ0W2dpMSArIDFdICogeTEgKyBncmFkNFtnaTEgKyAyXSAqIHoxICsgZ3JhZDRbZ2kxICsgM10gKiB3MSk7XG4gICAgICB9XG4gICAgICB2YXIgdDIgPSAwLjYgLSB4MiAqIHgyIC0geTIgKiB5MiAtIHoyICogejIgLSB3MiAqIHcyO1xuICAgICAgaWYgKHQyIDwgMCkgbjIgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMiA9IChwZXJtW2lpICsgaTIgKyBwZXJtW2pqICsgajIgKyBwZXJtW2trICsgazIgKyBwZXJtW2xsICsgbDJdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDIgKj0gdDI7XG4gICAgICAgIG4yID0gdDIgKiB0MiAqIChncmFkNFtnaTJdICogeDIgKyBncmFkNFtnaTIgKyAxXSAqIHkyICsgZ3JhZDRbZ2kyICsgMl0gKiB6MiArIGdyYWQ0W2dpMiArIDNdICogdzIpO1xuICAgICAgfVxuICAgICAgdmFyIHQzID0gMC42IC0geDMgKiB4MyAtIHkzICogeTMgLSB6MyAqIHozIC0gdzMgKiB3MztcbiAgICAgIGlmICh0MyA8IDApIG4zID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTMgPSAocGVybVtpaSArIGkzICsgcGVybVtqaiArIGozICsgcGVybVtrayArIGszICsgcGVybVtsbCArIGwzXV1dXSAlIDMyKSAqIDQ7XG4gICAgICAgIHQzICo9IHQzO1xuICAgICAgICBuMyA9IHQzICogdDMgKiAoZ3JhZDRbZ2kzXSAqIHgzICsgZ3JhZDRbZ2kzICsgMV0gKiB5MyArIGdyYWQ0W2dpMyArIDJdICogejMgKyBncmFkNFtnaTMgKyAzXSAqIHczKTtcbiAgICAgIH1cbiAgICAgIHZhciB0NCA9IDAuNiAtIHg0ICogeDQgLSB5NCAqIHk0IC0gejQgKiB6NCAtIHc0ICogdzQ7XG4gICAgICBpZiAodDQgPCAwKSBuNCA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2k0ID0gKHBlcm1baWkgKyAxICsgcGVybVtqaiArIDEgKyBwZXJtW2trICsgMSArIHBlcm1bbGwgKyAxXV1dXSAlIDMyKSAqIDQ7XG4gICAgICAgIHQ0ICo9IHQ0O1xuICAgICAgICBuNCA9IHQ0ICogdDQgKiAoZ3JhZDRbZ2k0XSAqIHg0ICsgZ3JhZDRbZ2k0ICsgMV0gKiB5NCArIGdyYWQ0W2dpNCArIDJdICogejQgKyBncmFkNFtnaTQgKyAzXSAqIHc0KTtcbiAgICAgIH1cbiAgICAgIC8vIFN1bSB1cCBhbmQgc2NhbGUgdGhlIHJlc3VsdCB0byBjb3ZlciB0aGUgcmFuZ2UgWy0xLDFdXG4gICAgICByZXR1cm4gMjcuMCAqIChuMCArIG4xICsgbjIgKyBuMyArIG40KTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gYnVpbGRQZXJtdXRhdGlvblRhYmxlKHJhbmRvbSkge1xuICAgIHZhciBpO1xuICAgIHZhciBwID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICAgIHBbaV0gPSBpO1xuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgMjU1OyBpKyspIHtcbiAgICAgIHZhciByID0gaSArIH5+KHJhbmRvbSgpICogKDI1NiAtIGkpKTtcbiAgICAgIHZhciBhdXggPSBwW2ldO1xuICAgICAgcFtpXSA9IHBbcl07XG4gICAgICBwW3JdID0gYXV4O1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfVxuICBTaW1wbGV4Tm9pc2UuX2J1aWxkUGVybXV0YXRpb25UYWJsZSA9IGJ1aWxkUGVybXV0YXRpb25UYWJsZTtcblxuICBmdW5jdGlvbiBhbGVhKCkge1xuICAgIC8vIEpvaGFubmVzIEJhYWfDuGUgPGJhYWdvZUBiYWFnb2UuY29tPiwgMjAxMFxuICAgIHZhciBzMCA9IDA7XG4gICAgdmFyIHMxID0gMDtcbiAgICB2YXIgczIgPSAwO1xuICAgIHZhciBjID0gMTtcblxuICAgIHZhciBtYXNoID0gbWFzaGVyKCk7XG4gICAgczAgPSBtYXNoKCcgJyk7XG4gICAgczEgPSBtYXNoKCcgJyk7XG4gICAgczIgPSBtYXNoKCcgJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgczAgLT0gbWFzaChhcmd1bWVudHNbaV0pO1xuICAgICAgaWYgKHMwIDwgMCkge1xuICAgICAgICBzMCArPSAxO1xuICAgICAgfVxuICAgICAgczEgLT0gbWFzaChhcmd1bWVudHNbaV0pO1xuICAgICAgaWYgKHMxIDwgMCkge1xuICAgICAgICBzMSArPSAxO1xuICAgICAgfVxuICAgICAgczIgLT0gbWFzaChhcmd1bWVudHNbaV0pO1xuICAgICAgaWYgKHMyIDwgMCkge1xuICAgICAgICBzMiArPSAxO1xuICAgICAgfVxuICAgIH1cbiAgICBtYXNoID0gbnVsbDtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdCA9IDIwOTE2MzkgKiBzMCArIGMgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxuICAgICAgczAgPSBzMTtcbiAgICAgIHMxID0gczI7XG4gICAgICByZXR1cm4gczIgPSB0IC0gKGMgPSB0IHwgMCk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXNoZXIoKSB7XG4gICAgdmFyIG4gPSAweGVmYzgyNDlkO1xuICAgIHJldHVybiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICBkYXRhID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG4gKz0gZGF0YS5jaGFyQ29kZUF0KGkpO1xuICAgICAgICB2YXIgaCA9IDAuMDI1MTk2MDMyODI0MTY5MzggKiBuO1xuICAgICAgICBuID0gaCA+Pj4gMDtcbiAgICAgICAgaCAtPSBuO1xuICAgICAgICBoICo9IG47XG4gICAgICAgIG4gPSBoID4+PiAwO1xuICAgICAgICBoIC09IG47XG4gICAgICAgIG4gKz0gaCAqIDB4MTAwMDAwMDAwOyAvLyAyXjMyXG4gICAgICB9XG4gICAgICByZXR1cm4gKG4gPj4+IDApICogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDsgLy8gMl4tMzJcbiAgICB9O1xuICB9XG5cbiAgLy8gYW1kXG4gIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSBkZWZpbmUoZnVuY3Rpb24oKSB7cmV0dXJuIFNpbXBsZXhOb2lzZTt9KTtcbiAgLy8gY29tbW9uIGpzXG4gIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIGV4cG9ydHMuU2ltcGxleE5vaXNlID0gU2ltcGxleE5vaXNlO1xuICAvLyBicm93c2VyXG4gIGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB3aW5kb3cuU2ltcGxleE5vaXNlID0gU2ltcGxleE5vaXNlO1xuICAvLyBub2RlanNcbiAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBTaW1wbGV4Tm9pc2U7XG4gIH1cblxufSkoKTtcbiIsIi8qISBUd2Vha3BhbmUgMy4xLjEgKGMpIDIwMTYgY29jb3BvbiwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLiAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBmYWN0b3J5KGdsb2JhbC5Ud2Vha3BhbmUgPSB7fSkpO1xufSkodGhpcywgKGZ1bmN0aW9uIChleHBvcnRzKSB7ICd1c2Ugc3RyaWN0JztcblxuICAgIC8qKipcbiAgICAgKiBBIHNpbXBsZSBzZW1hbnRpYyB2ZXJzaW9uaW5nIHBlcnNlci5cbiAgICAgKi9cbiAgICBjbGFzcyBTZW12ZXIge1xuICAgICAgICAvKipcbiAgICAgICAgICogQGhpZGRlblxuICAgICAgICAgKi9cbiAgICAgICAgY29uc3RydWN0b3IodGV4dCkge1xuICAgICAgICAgICAgY29uc3QgW2NvcmUsIHByZXJlbGVhc2VdID0gdGV4dC5zcGxpdCgnLScpO1xuICAgICAgICAgICAgY29uc3QgY29yZUNvbXBzID0gY29yZS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgdGhpcy5tYWpvciA9IHBhcnNlSW50KGNvcmVDb21wc1swXSwgMTApO1xuICAgICAgICAgICAgdGhpcy5taW5vciA9IHBhcnNlSW50KGNvcmVDb21wc1sxXSwgMTApO1xuICAgICAgICAgICAgdGhpcy5wYXRjaCA9IHBhcnNlSW50KGNvcmVDb21wc1syXSwgMTApO1xuICAgICAgICAgICAgdGhpcy5wcmVyZWxlYXNlID0gcHJlcmVsZWFzZSAhPT0gbnVsbCAmJiBwcmVyZWxlYXNlICE9PSB2b2lkIDAgPyBwcmVyZWxlYXNlIDogbnVsbDtcbiAgICAgICAgfVxuICAgICAgICB0b1N0cmluZygpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvcmUgPSBbdGhpcy5tYWpvciwgdGhpcy5taW5vciwgdGhpcy5wYXRjaF0uam9pbignLicpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJlcmVsZWFzZSAhPT0gbnVsbCA/IFtjb3JlLCB0aGlzLnByZXJlbGVhc2VdLmpvaW4oJy0nKSA6IGNvcmU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBCbGFkZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8gPSBjb250cm9sbGVyO1xuICAgICAgICB9XG4gICAgICAgIGdldCBlbGVtZW50KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmlldy5lbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZpZXdQcm9wcy5nZXQoJ2Rpc2FibGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGRpc2FibGVkKGRpc2FibGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZpZXdQcm9wcy5zZXQoJ2Rpc2FibGVkJywgZGlzYWJsZWQpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBoaWRkZW4oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy52aWV3UHJvcHMuZ2V0KCdoaWRkZW4nKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgaGlkZGVuKGhpZGRlbikge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52aWV3UHJvcHMuc2V0KCdoaWRkZW4nLCBoaWRkZW4pO1xuICAgICAgICB9XG4gICAgICAgIGRpc3Bvc2UoKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZpZXdQcm9wcy5zZXQoJ2Rpc3Bvc2VkJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUcEV2ZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodGFyZ2V0KSB7XG4gICAgICAgICAgICB0aGlzLnRhcmdldCA9IHRhcmdldDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbGFzcyBUcENoYW5nZUV2ZW50IGV4dGVuZHMgVHBFdmVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHRhcmdldCwgdmFsdWUsIHByZXNldEtleSwgbGFzdCkge1xuICAgICAgICAgICAgc3VwZXIodGFyZ2V0KTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMucHJlc2V0S2V5ID0gcHJlc2V0S2V5O1xuICAgICAgICAgICAgdGhpcy5sYXN0ID0gbGFzdCAhPT0gbnVsbCAmJiBsYXN0ICE9PSB2b2lkIDAgPyBsYXN0IDogdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjbGFzcyBUcFVwZGF0ZUV2ZW50IGV4dGVuZHMgVHBFdmVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHRhcmdldCwgdmFsdWUsIHByZXNldEtleSkge1xuICAgICAgICAgICAgc3VwZXIodGFyZ2V0KTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMucHJlc2V0S2V5ID0gcHJlc2V0S2V5O1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsYXNzIFRwRm9sZEV2ZW50IGV4dGVuZHMgVHBFdmVudCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHRhcmdldCwgZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIHN1cGVyKHRhcmdldCk7XG4gICAgICAgICAgICB0aGlzLmV4cGFuZGVkID0gZXhwYW5kZWQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xhc3MgVHBUYWJTZWxlY3RFdmVudCBleHRlbmRzIFRwRXZlbnQge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0YXJnZXQsIGluZGV4KSB7XG4gICAgICAgICAgICBzdXBlcih0YXJnZXQpO1xuICAgICAgICAgICAgdGhpcy5pbmRleCA9IGluZGV4O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZm9yY2VDYXN0KHYpIHtcbiAgICAgICAgcmV0dXJuIHY7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzRW1wdHkodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlZXBFcXVhbHNBcnJheShhMSwgYTIpIHtcbiAgICAgICAgaWYgKGExLmxlbmd0aCAhPT0gYTIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhMS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGExW2ldICE9PSBhMltpXSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCBDUkVBVEVfTUVTU0FHRV9NQVAgPSB7XG4gICAgICAgIGFscmVhZHlkaXNwb3NlZDogKCkgPT4gJ1ZpZXcgaGFzIGJlZW4gYWxyZWFkeSBkaXNwb3NlZCcsXG4gICAgICAgIGludmFsaWRwYXJhbXM6IChjb250ZXh0KSA9PiBgSW52YWxpZCBwYXJhbWV0ZXJzIGZvciAnJHtjb250ZXh0Lm5hbWV9J2AsXG4gICAgICAgIG5vbWF0Y2hpbmdjb250cm9sbGVyOiAoY29udGV4dCkgPT4gYE5vIG1hdGNoaW5nIGNvbnRyb2xsZXIgZm9yICcke2NvbnRleHQua2V5fSdgLFxuICAgICAgICBub21hdGNoaW5ndmlldzogKGNvbnRleHQpID0+IGBObyBtYXRjaGluZyB2aWV3IGZvciAnJHtKU09OLnN0cmluZ2lmeShjb250ZXh0LnBhcmFtcyl9J2AsXG4gICAgICAgIG5vdGJpbmRhYmxlOiAoKSA9PiBgVmFsdWUgaXMgbm90IGJpbmRhYmxlYCxcbiAgICAgICAgcHJvcGVydHlub3Rmb3VuZDogKGNvbnRleHQpID0+IGBQcm9wZXJ0eSAnJHtjb250ZXh0Lm5hbWV9JyBub3QgZm91bmRgLFxuICAgICAgICBzaG91bGRuZXZlcmhhcHBlbjogKCkgPT4gJ1RoaXMgZXJyb3Igc2hvdWxkIG5ldmVyIGhhcHBlbicsXG4gICAgfTtcbiAgICBjbGFzcyBUcEVycm9yIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICB0aGlzLm1lc3NhZ2UgPVxuICAgICAgICAgICAgICAgIChfYSA9IENSRUFURV9NRVNTQUdFX01BUFtjb25maWcudHlwZV0oZm9yY2VDYXN0KGNvbmZpZy5jb250ZXh0KSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICdVbmV4cGVjdGVkIGVycm9yJztcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgICAgICAgICAgIHRoaXMuc3RhY2sgPSBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKS5zdGFjaztcbiAgICAgICAgICAgIHRoaXMudHlwZSA9IGNvbmZpZy50eXBlO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBhbHJlYWR5RGlzcG9zZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRwRXJyb3IoeyB0eXBlOiAnYWxyZWFkeWRpc3Bvc2VkJyB9KTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgbm90QmluZGFibGUoKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRwRXJyb3Ioe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdub3RiaW5kYWJsZScsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgcHJvcGVydHlOb3RGb3VuZChuYW1lKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRwRXJyb3Ioe1xuICAgICAgICAgICAgICAgIHR5cGU6ICdwcm9wZXJ0eW5vdGZvdW5kJyxcbiAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBzaG91bGROZXZlckhhcHBlbigpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVHBFcnJvcih7IHR5cGU6ICdzaG91bGRuZXZlcmhhcHBlbicgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBCaW5kaW5nVGFyZ2V0IHtcbiAgICAgICAgY29uc3RydWN0b3Iob2JqLCBrZXksIG9wdF9pZCkge1xuICAgICAgICAgICAgdGhpcy5vYmpfID0gb2JqO1xuICAgICAgICAgICAgdGhpcy5rZXlfID0ga2V5O1xuICAgICAgICAgICAgdGhpcy5wcmVzZXRLZXlfID0gb3B0X2lkICE9PSBudWxsICYmIG9wdF9pZCAhPT0gdm9pZCAwID8gb3B0X2lkIDoga2V5O1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBpc0JpbmRhYmxlKG9iaikge1xuICAgICAgICAgICAgaWYgKG9iaiA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGdldCBrZXkoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5rZXlfO1xuICAgICAgICB9XG4gICAgICAgIGdldCBwcmVzZXRLZXkoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmVzZXRLZXlfO1xuICAgICAgICB9XG4gICAgICAgIHJlYWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5vYmpfW3RoaXMua2V5X107XG4gICAgICAgIH1cbiAgICAgICAgd3JpdGUodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMub2JqX1t0aGlzLmtleV9dID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgd3JpdGVQcm9wZXJ0eShuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWVPYmogPSB0aGlzLnJlYWQoKTtcbiAgICAgICAgICAgIGlmICghQmluZGluZ1RhcmdldC5pc0JpbmRhYmxlKHZhbHVlT2JqKSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iubm90QmluZGFibGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghKG5hbWUgaW4gdmFsdWVPYmopKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5wcm9wZXJ0eU5vdEZvdW5kKG5hbWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFsdWVPYmpbbmFtZV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEJ1dHRvbkFwaSBleHRlbmRzIEJsYWRlQXBpIHtcbiAgICAgICAgZ2V0IGxhYmVsKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuZ2V0KCdsYWJlbCcpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBsYWJlbChsYWJlbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wcm9wcy5zZXQoJ2xhYmVsJywgbGFiZWwpO1xuICAgICAgICB9XG4gICAgICAgIGdldCB0aXRsZSgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoX2EgPSB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5wcm9wcy5nZXQoJ3RpdGxlJykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnO1xuICAgICAgICB9XG4gICAgICAgIHNldCB0aXRsZSh0aXRsZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIucHJvcHMuc2V0KCd0aXRsZScsIHRpdGxlKTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJoID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgY29uc3QgZW1pdHRlciA9IHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLmVtaXR0ZXI7XG4gICAgICAgICAgICBlbWl0dGVyLm9uKGV2ZW50TmFtZSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGJoKG5ldyBUcEV2ZW50KHRoaXMpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBFbWl0dGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICB0aGlzLm9ic2VydmVyc18gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGxldCBvYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVyc19bZXZlbnROYW1lXTtcbiAgICAgICAgICAgIGlmICghb2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnNfW2V2ZW50TmFtZV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9ic2VydmVycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBoYW5kbGVyOiBoYW5kbGVyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBvZmYoZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVyc19bZXZlbnROYW1lXTtcbiAgICAgICAgICAgIGlmIChvYnNlcnZlcnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9ic2VydmVyc19bZXZlbnROYW1lXSA9IG9ic2VydmVycy5maWx0ZXIoKG9ic2VydmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvYnNlcnZlci5oYW5kbGVyICE9PSBoYW5kbGVyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgZW1pdChldmVudE5hbWUsIGV2ZW50KSB7XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZlcnMgPSB0aGlzLm9ic2VydmVyc19bZXZlbnROYW1lXTtcbiAgICAgICAgICAgIGlmICghb2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb2JzZXJ2ZXJzLmZvckVhY2goKG9ic2VydmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuaGFuZGxlcihldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IFBSRUZJWCA9ICd0cCc7XG4gICAgZnVuY3Rpb24gQ2xhc3NOYW1lKHZpZXdOYW1lKSB7XG4gICAgICAgIGNvbnN0IGZuID0gKG9wdF9lbGVtZW50TmFtZSwgb3B0X21vZGlmaWVyKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIFBSRUZJWCxcbiAgICAgICAgICAgICAgICAnLScsXG4gICAgICAgICAgICAgICAgdmlld05hbWUsXG4gICAgICAgICAgICAgICAgJ3YnLFxuICAgICAgICAgICAgICAgIG9wdF9lbGVtZW50TmFtZSA/IGBfJHtvcHRfZWxlbWVudE5hbWV9YCA6ICcnLFxuICAgICAgICAgICAgICAgIG9wdF9tb2RpZmllciA/IGAtJHtvcHRfbW9kaWZpZXJ9YCA6ICcnLFxuICAgICAgICAgICAgXS5qb2luKCcnKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIGZuO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNvbXBvc2UoaDEsIGgyKSB7XG4gICAgICAgIHJldHVybiAoaW5wdXQpID0+IGgyKGgxKGlucHV0KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGV4dHJhY3RWYWx1ZShldikge1xuICAgICAgICByZXR1cm4gZXYucmF3VmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJpbmRWYWx1ZSh2YWx1ZSwgYXBwbHlWYWx1ZSkge1xuICAgICAgICB2YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCBjb21wb3NlKGV4dHJhY3RWYWx1ZSwgYXBwbHlWYWx1ZSkpO1xuICAgICAgICBhcHBseVZhbHVlKHZhbHVlLnJhd1ZhbHVlKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYmluZFZhbHVlTWFwKHZhbHVlTWFwLCBrZXksIGFwcGx5VmFsdWUpIHtcbiAgICAgICAgYmluZFZhbHVlKHZhbHVlTWFwLnZhbHVlKGtleSksIGFwcGx5VmFsdWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFwcGx5Q2xhc3MoZWxlbSwgY2xhc3NOYW1lLCBhY3RpdmUpIHtcbiAgICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB2YWx1ZVRvQ2xhc3NOYW1lKGVsZW0sIGNsYXNzTmFtZSkge1xuICAgICAgICByZXR1cm4gKHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBhcHBseUNsYXNzKGVsZW0sIGNsYXNzTmFtZSwgdmFsdWUpO1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBiaW5kVmFsdWVUb1RleHRDb250ZW50KHZhbHVlLCBlbGVtKSB7XG4gICAgICAgIGJpbmRWYWx1ZSh2YWx1ZSwgKHRleHQpID0+IHtcbiAgICAgICAgICAgIGVsZW0udGV4dENvbnRlbnQgPSB0ZXh0ICE9PSBudWxsICYmIHRleHQgIT09IHZvaWQgMCA/IHRleHQgOiAnJztcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJHEgPSBDbGFzc05hbWUoJ2J0bicpO1xuICAgIGNsYXNzIEJ1dHRvblZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJHEoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgICAgIGJ1dHRvbkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkcSgnYicpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50ID0gYnV0dG9uRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRpdGxlRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRxKCd0JykpO1xuICAgICAgICAgICAgYmluZFZhbHVlVG9UZXh0Q29udGVudChjb25maWcucHJvcHMudmFsdWUoJ3RpdGxlJyksIHRpdGxlRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkVsZW1lbnQuYXBwZW5kQ2hpbGQodGl0bGVFbGVtKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEJ1dHRvbkNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMub25DbGlja18gPSB0aGlzLm9uQ2xpY2tfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnByb3BzID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IEJ1dHRvblZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmJ1dHRvbkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uQ2xpY2tfKTtcbiAgICAgICAgfVxuICAgICAgICBvbkNsaWNrXygpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdjbGljaycsIHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEJvdW5kVmFsdWUge1xuICAgICAgICBjb25zdHJ1Y3Rvcihpbml0aWFsVmFsdWUsIGNvbmZpZykge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdGhpcy5jb25zdHJhaW50XyA9IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5jb25zdHJhaW50O1xuICAgICAgICAgICAgdGhpcy5lcXVhbHNfID0gKF9hID0gY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLmVxdWFscykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKCh2MSwgdjIpID0+IHYxID09PSB2Mik7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5yYXdWYWx1ZV8gPSBpbml0aWFsVmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGNvbnN0cmFpbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJhaW50XztcbiAgICAgICAgfVxuICAgICAgICBnZXQgcmF3VmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYXdWYWx1ZV87XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHJhd1ZhbHVlKHJhd1ZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFJhd1ZhbHVlKHJhd1ZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0UmF3VmFsdWUocmF3VmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdHMgPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnN0cmFpbmVkVmFsdWUgPSB0aGlzLmNvbnN0cmFpbnRfXG4gICAgICAgICAgICAgICAgPyB0aGlzLmNvbnN0cmFpbnRfLmNvbnN0cmFpbihyYXdWYWx1ZSlcbiAgICAgICAgICAgICAgICA6IHJhd1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgY2hhbmdlZCA9ICF0aGlzLmVxdWFsc18odGhpcy5yYXdWYWx1ZV8sIGNvbnN0cmFpbmVkVmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFjaGFuZ2VkICYmICFvcHRzLmZvcmNlRW1pdCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdiZWZvcmVjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJhd1ZhbHVlXyA9IGNvbnN0cmFpbmVkVmFsdWU7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgIG9wdGlvbnM6IG9wdHMsXG4gICAgICAgICAgICAgICAgcmF3VmFsdWU6IGNvbnN0cmFpbmVkVmFsdWUsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBQcmltaXRpdmVWYWx1ZSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVfID0gaW5pdGlhbFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGdldCByYXdWYWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZhbHVlXztcbiAgICAgICAgfVxuICAgICAgICBzZXQgcmF3VmFsdWUodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0UmF3VmFsdWUodmFsdWUsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzZXRSYXdWYWx1ZSh2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgICAgICAgY29uc3Qgb3B0cyA9IG9wdGlvbnMgIT09IG51bGwgJiYgb3B0aW9ucyAhPT0gdm9pZCAwID8gb3B0aW9ucyA6IHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKHRoaXMudmFsdWVfID09PSB2YWx1ZSAmJiAhb3B0cy5mb3JjZUVtaXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnYmVmb3JlY2hhbmdlJywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZV8gPSB2YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgb3B0aW9uczogb3B0cyxcbiAgICAgICAgICAgICAgICByYXdWYWx1ZTogdGhpcy52YWx1ZV8sXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVWYWx1ZShpbml0aWFsVmFsdWUsIGNvbmZpZykge1xuICAgICAgICBjb25zdCBjb25zdHJhaW50ID0gY29uZmlnID09PSBudWxsIHx8IGNvbmZpZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogY29uZmlnLmNvbnN0cmFpbnQ7XG4gICAgICAgIGNvbnN0IGVxdWFscyA9IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5lcXVhbHM7XG4gICAgICAgIGlmICghY29uc3RyYWludCAmJiAhZXF1YWxzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByaW1pdGl2ZVZhbHVlKGluaXRpYWxWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBCb3VuZFZhbHVlKGluaXRpYWxWYWx1ZSwgY29uZmlnKTtcbiAgICB9XG5cbiAgICBjbGFzcyBWYWx1ZU1hcCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHZhbHVlTWFwKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy52YWxNYXBfID0gdmFsdWVNYXA7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLnZhbE1hcF8pIHtcbiAgICAgICAgICAgICAgICBjb25zdCB2ID0gdGhpcy52YWxNYXBfW2tleV07XG4gICAgICAgICAgICAgICAgdi5lbWl0dGVyLm9uKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGNyZWF0ZUNvcmUoaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBrZXlzLnJlZHVjZSgobywga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obywge1xuICAgICAgICAgICAgICAgICAgICBba2V5XTogY3JlYXRlVmFsdWUoaW5pdGlhbFZhbHVlW2tleV0pLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBmcm9tT2JqZWN0KGluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgY29yZSA9IHRoaXMuY3JlYXRlQ29yZShpbml0aWFsVmFsdWUpO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBWYWx1ZU1hcChjb3JlKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQoa2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWxNYXBfW2tleV0ucmF3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsTWFwX1trZXldLnJhd1ZhbHVlID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgdmFsdWUoa2V5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWxNYXBfW2tleV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZU9iamVjdCh2YWx1ZSwga2V5VG9QYXJzZXJNYXApIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGtleVRvUGFyc2VyTWFwKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ga2V5cy5yZWR1Y2UoKHRtcCwga2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAodG1wID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFyc2VyID0ga2V5VG9QYXJzZXJNYXBba2V5XTtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlcih2YWx1ZVtrZXldKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQuc3VjY2VlZGVkXG4gICAgICAgICAgICAgICAgPyBPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHRtcCksIHsgW2tleV06IHJlc3VsdC52YWx1ZSB9KSA6IHVuZGVmaW5lZDtcbiAgICAgICAgfSwge30pO1xuICAgICAgICByZXR1cm4gZm9yY2VDYXN0KHJlc3VsdCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHBhcnNlQXJyYXkodmFsdWUsIHBhcnNlSXRlbSkge1xuICAgICAgICByZXR1cm4gdmFsdWUucmVkdWNlKCh0bXAsIGl0ZW0pID0+IHtcbiAgICAgICAgICAgIGlmICh0bXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUl0ZW0oaXRlbSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdC5zdWNjZWVkZWQgfHwgcmVzdWx0LnZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFsuLi50bXAsIHJlc3VsdC52YWx1ZV07XG4gICAgICAgIH0sIFtdKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNPYmplY3QodmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIocGFyc2UpIHtcbiAgICAgICAgcmV0dXJuIChvcHRpb25hbCkgPT4gKHYpID0+IHtcbiAgICAgICAgICAgIGlmICghb3B0aW9uYWwgJiYgdiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VlZGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdGlvbmFsICYmIHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHN1Y2NlZWRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2Uodik7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VlZGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VlZGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVycyhvcHRpb25hbCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3VzdG9tOiAocGFyc2UpID0+IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIocGFyc2UpKG9wdGlvbmFsKSxcbiAgICAgICAgICAgIGJvb2xlYW46IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIoKHYpID0+IHR5cGVvZiB2ID09PSAnYm9vbGVhbicgPyB2IDogdW5kZWZpbmVkKShvcHRpb25hbCksXG4gICAgICAgICAgICBudW1iZXI6IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIoKHYpID0+IHR5cGVvZiB2ID09PSAnbnVtYmVyJyA/IHYgOiB1bmRlZmluZWQpKG9wdGlvbmFsKSxcbiAgICAgICAgICAgIHN0cmluZzogY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcigodikgPT4gdHlwZW9mIHYgPT09ICdzdHJpbmcnID8gdiA6IHVuZGVmaW5lZCkob3B0aW9uYWwpLFxuICAgICAgICAgICAgZnVuY3Rpb246IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIoKHYpID0+XG4gICAgICAgICAgICB0eXBlb2YgdiA9PT0gJ2Z1bmN0aW9uJyA/IHYgOiB1bmRlZmluZWQpKG9wdGlvbmFsKSxcbiAgICAgICAgICAgIGNvbnN0YW50OiAodmFsdWUpID0+IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIoKHYpID0+ICh2ID09PSB2YWx1ZSA/IHZhbHVlIDogdW5kZWZpbmVkKSkob3B0aW9uYWwpLFxuICAgICAgICAgICAgcmF3OiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PiB2KShvcHRpb25hbCksXG4gICAgICAgICAgICBvYmplY3Q6IChrZXlUb1BhcnNlck1hcCkgPT4gY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcigodikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghaXNPYmplY3QodikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlT2JqZWN0KHYsIGtleVRvUGFyc2VyTWFwKTtcbiAgICAgICAgICAgIH0pKG9wdGlvbmFsKSxcbiAgICAgICAgICAgIGFycmF5OiAoaXRlbVBhcnNlcikgPT4gY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcigodikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2KSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VBcnJheSh2LCBpdGVtUGFyc2VyKTtcbiAgICAgICAgICAgIH0pKG9wdGlvbmFsKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgUGFyYW1zUGFyc2VycyA9IHtcbiAgICAgICAgb3B0aW9uYWw6IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXJzKHRydWUpLFxuICAgICAgICByZXF1aXJlZDogY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcnMoZmFsc2UpLFxuICAgIH07XG4gICAgZnVuY3Rpb24gcGFyc2VQYXJhbXModmFsdWUsIGtleVRvUGFyc2VyTWFwKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFBhcmFtc1BhcnNlcnMucmVxdWlyZWQub2JqZWN0KGtleVRvUGFyc2VyTWFwKSh2YWx1ZSk7XG4gICAgICAgIHJldHVybiByZXN1bHQuc3VjY2VlZGVkID8gcmVzdWx0LnZhbHVlIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGRpc3Bvc2VFbGVtZW50KGVsZW0pIHtcbiAgICAgICAgaWYgKGVsZW0gJiYgZWxlbS5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBlbGVtLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0QWxsQmxhZGVQb3NpdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiBbJ3ZlcnlmaXJzdCcsICdmaXJzdCcsICdsYXN0JywgJ3ZlcnlsYXN0J107XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJHAgPSBDbGFzc05hbWUoJycpO1xuICAgIGNvbnN0IFBPU19UT19DTEFTU19OQU1FX01BUCA9IHtcbiAgICAgICAgdmVyeWZpcnN0OiAndmZzdCcsXG4gICAgICAgIGZpcnN0OiAnZnN0JyxcbiAgICAgICAgbGFzdDogJ2xzdCcsXG4gICAgICAgIHZlcnlsYXN0OiAndmxzdCcsXG4gICAgfTtcbiAgICBjbGFzcyBCbGFkZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50XyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmJsYWRlID0gY29uZmlnLmJsYWRlO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gY29uZmlnLnZpZXc7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICBjb25zdCBlbGVtID0gdGhpcy52aWV3LmVsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLmJsYWRlLnZhbHVlKCdwb3NpdGlvbnMnKS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZ2V0QWxsQmxhZGVQb3NpdGlvbnMoKS5mb3JFYWNoKChwb3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSRwKHVuZGVmaW5lZCwgUE9TX1RPX0NMQVNTX05BTUVfTUFQW3Bvc10pKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB0aGlzLmJsYWRlLmdldCgncG9zaXRpb25zJykuZm9yRWFjaCgocG9zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkcCh1bmRlZmluZWQsIFBPU19UT19DTEFTU19OQU1FX01BUFtwb3NdKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzLmhhbmRsZURpc3Bvc2UoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGRpc3Bvc2VFbGVtZW50KGVsZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHBhcmVudCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhcmVudF87XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBTVkdfTlMgPSAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO1xuICAgIGZ1bmN0aW9uIGZvcmNlUmVmbG93KGVsZW1lbnQpIHtcbiAgICAgICAgZWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRpc2FibGVUcmFuc2l0aW9uVGVtcG9yYXJpbHkoZWxlbWVudCwgY2FsbGJhY2spIHtcbiAgICAgICAgY29uc3QgdCA9IGVsZW1lbnQuc3R5bGUudHJhbnNpdGlvbjtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50cmFuc2l0aW9uID0gJ25vbmUnO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgICBlbGVtZW50LnN0eWxlLnRyYW5zaXRpb24gPSB0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBzdXBwb3J0c1RvdWNoKGRvYykge1xuICAgICAgICByZXR1cm4gZG9jLm9udG91Y2hzdGFydCAhPT0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRHbG9iYWxPYmplY3QoKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWxUaGlzO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRXaW5kb3dEb2N1bWVudCgpIHtcbiAgICAgICAgY29uc3QgZ2xvYmFsT2JqID0gZm9yY2VDYXN0KGdldEdsb2JhbE9iamVjdCgpKTtcbiAgICAgICAgcmV0dXJuIGdsb2JhbE9iai5kb2N1bWVudDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0Q2FudmFzQ29udGV4dChjYW52YXNFbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IHdpbiA9IGNhbnZhc0VsZW1lbnQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcbiAgICAgICAgaWYgKCF3aW4pIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlzQnJvd3NlciA9ICdkb2N1bWVudCcgaW4gd2luO1xuICAgICAgICByZXR1cm4gaXNCcm93c2VyXG4gICAgICAgICAgICA/IGNhbnZhc0VsZW1lbnQuZ2V0Q29udGV4dCgnMmQnLCB7XG4gICAgICAgICAgICAgICAgd2lsbFJlYWRGcmVxdWVudGx5OiB0cnVlLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgY29uc3QgSUNPTl9JRF9UT19JTk5FUl9IVE1MX01BUCA9IHtcbiAgICAgICAgY2hlY2s6ICc8cGF0aCBkPVwiTTIgOGw0IDRsOCAtOFwiLz4nLFxuICAgICAgICBkcm9wZG93bjogJzxwYXRoIGQ9XCJNNSA3aDZsLTMgMyB6XCIvPicsXG4gICAgICAgIHAyZHBhZDogJzxwYXRoIGQ9XCJNOCA0djhcIi8+PHBhdGggZD1cIk00IDhoOFwiLz48Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEuMlwiLz4nLFxuICAgIH07XG4gICAgZnVuY3Rpb24gY3JlYXRlU3ZnSWNvbkVsZW1lbnQoZG9jdW1lbnQsIGljb25JZCkge1xuICAgICAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3N2ZycpO1xuICAgICAgICBlbGVtLmlubmVySFRNTCA9IElDT05fSURfVE9fSU5ORVJfSFRNTF9NQVBbaWNvbklkXTtcbiAgICAgICAgcmV0dXJuIGVsZW07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluc2VydEVsZW1lbnRBdChwYXJlbnRFbGVtZW50LCBlbGVtZW50LCBpbmRleCkge1xuICAgICAgICBwYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShlbGVtZW50LCBwYXJlbnRFbGVtZW50LmNoaWxkcmVuW2luZGV4XSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICBpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBlbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQ2hpbGRFbGVtZW50cyhlbGVtZW50KSB7XG4gICAgICAgIHdoaWxlIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbWVudC5jaGlsZHJlblswXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQ2hpbGROb2RlcyhlbGVtZW50KSB7XG4gICAgICAgIHdoaWxlIChlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVDaGlsZChlbGVtZW50LmNoaWxkTm9kZXNbMF0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmROZXh0VGFyZ2V0KGV2KSB7XG4gICAgICAgIGlmIChldi5yZWxhdGVkVGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gZm9yY2VDYXN0KGV2LnJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgnZXhwbGljaXRPcmlnaW5hbFRhcmdldCcgaW4gZXYpIHtcbiAgICAgICAgICAgIHJldHVybiBldi5leHBsaWNpdE9yaWdpbmFsVGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRvID0gQ2xhc3NOYW1lKCdsYmwnKTtcbiAgICBmdW5jdGlvbiBjcmVhdGVMYWJlbE5vZGUoZG9jLCBsYWJlbCkge1xuICAgICAgICBjb25zdCBmcmFnID0gZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgY29uc3QgbGluZU5vZGVzID0gbGFiZWwuc3BsaXQoJ1xcbicpLm1hcCgobGluZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRvYy5jcmVhdGVUZXh0Tm9kZShsaW5lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxpbmVOb2Rlcy5mb3JFYWNoKChsaW5lTm9kZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVFbGVtZW50KCdicicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQobGluZU5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZyYWc7XG4gICAgfVxuICAgIGNsYXNzIExhYmVsVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbygpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBsYWJlbEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBsYWJlbEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbygnbCcpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcChjb25maWcucHJvcHMsICdsYWJlbCcsICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbyh1bmRlZmluZWQsICdub2wnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUkbyh1bmRlZmluZWQsICdub2wnKSk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZXMobGFiZWxFbGVtKTtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxFbGVtLmFwcGVuZENoaWxkKGNyZWF0ZUxhYmVsTm9kZShkb2MsIHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQobGFiZWxFbGVtKTtcbiAgICAgICAgICAgIHRoaXMubGFiZWxFbGVtZW50ID0gbGFiZWxFbGVtO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdmFsdWVFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJG8oJ3YnKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodmFsdWVFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVFbGVtZW50ID0gdmFsdWVFbGVtO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgTGFiZWxDb250cm9sbGVyIGV4dGVuZHMgQmxhZGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdQcm9wcyA9IGNvbmZpZy52YWx1ZUNvbnRyb2xsZXIudmlld1Byb3BzO1xuICAgICAgICAgICAgc3VwZXIoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjb25maWcpLCB7IHZpZXc6IG5ldyBMYWJlbFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBjb25maWcucHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pLCB2aWV3UHJvcHM6IHZpZXdQcm9wcyB9KSk7XG4gICAgICAgICAgICB0aGlzLnByb3BzID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNvbnRyb2xsZXIgPSBjb25maWcudmFsdWVDb250cm9sbGVyO1xuICAgICAgICAgICAgdGhpcy52aWV3LnZhbHVlRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnZhbHVlQ29udHJvbGxlci52aWV3LmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgQnV0dG9uQmxhZGVQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnYnV0dG9uJyxcbiAgICAgICAgdHlwZTogJ2JsYWRlJyxcbiAgICAgICAgYWNjZXB0KHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogcC5yZXF1aXJlZC5zdHJpbmcsXG4gICAgICAgICAgICAgICAgdmlldzogcC5yZXF1aXJlZC5jb25zdGFudCgnYnV0dG9uJyksXG4gICAgICAgICAgICAgICAgbGFiZWw6IHAub3B0aW9uYWwuc3RyaW5nLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID8geyBwYXJhbXM6IHJlc3VsdCB9IDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcihhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IExhYmVsQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGFyZ3MuYmxhZGUsXG4gICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogYXJncy5wYXJhbXMubGFiZWwsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdmFsdWVDb250cm9sbGVyOiBuZXcgQnV0dG9uQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBhcmdzLnBhcmFtcy50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgYXBpKGFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlciBpbnN0YW5jZW9mIExhYmVsQ29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlci52YWx1ZUNvbnRyb2xsZXIgaW5zdGFuY2VvZiBCdXR0b25Db250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBCdXR0b25BcGkoYXJncy5jb250cm9sbGVyKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xhc3MgVmFsdWVCbGFkZUNvbnRyb2xsZXIgZXh0ZW5kcyBCbGFkZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQmxhZGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgVmFsdWVNYXAoe1xuICAgICAgICAgICAgcG9zaXRpb25zOiBjcmVhdGVWYWx1ZShbXSwge1xuICAgICAgICAgICAgICAgIGVxdWFsczogZGVlcEVxdWFsc0FycmF5LFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsYXNzIEZvbGRhYmxlIGV4dGVuZHMgVmFsdWVNYXAge1xuICAgICAgICBjb25zdHJ1Y3Rvcih2YWx1ZU1hcCkge1xuICAgICAgICAgICAgc3VwZXIodmFsdWVNYXApO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBjcmVhdGUoZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvcmVPYmogPSB7XG4gICAgICAgICAgICAgICAgY29tcGxldGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBleHBhbmRlZCxcbiAgICAgICAgICAgICAgICBleHBhbmRlZEhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICBzaG91bGRGaXhIZWlnaHQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRlbXBvcmFyeUV4cGFuZGVkOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGNvcmUgPSBWYWx1ZU1hcC5jcmVhdGVDb3JlKGNvcmVPYmopO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBGb2xkYWJsZShjb3JlKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgc3R5bGVFeHBhbmRlZCgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoX2EgPSB0aGlzLmdldCgndGVtcG9yYXJ5RXhwYW5kZWQnKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5nZXQoJ2V4cGFuZGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHN0eWxlSGVpZ2h0KCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnN0eWxlRXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXhIZWlnaHQgPSB0aGlzLmdldCgnZXhwYW5kZWRIZWlnaHQnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldCgnc2hvdWxkRml4SGVpZ2h0JykgJiYgIWlzRW1wdHkoZXhIZWlnaHQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2V4SGVpZ2h0fXB4YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAnYXV0byc7XG4gICAgICAgIH1cbiAgICAgICAgYmluZEV4cGFuZGVkQ2xhc3MoZWxlbSwgZXhwYW5kZWRDbGFzc05hbWUpIHtcbiAgICAgICAgICAgIGNvbnN0IG9uRXhwYW5kID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gdGhpcy5zdHlsZUV4cGFuZGVkO1xuICAgICAgICAgICAgICAgIGlmIChleHBhbmRlZCkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5hZGQoZXhwYW5kZWRDbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QucmVtb3ZlKGV4cGFuZGVkQ2xhc3NOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKHRoaXMsICdleHBhbmRlZCcsIG9uRXhwYW5kKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcCh0aGlzLCAndGVtcG9yYXJ5RXhwYW5kZWQnLCBvbkV4cGFuZCk7XG4gICAgICAgIH1cbiAgICAgICAgY2xlYW5VcFRyYW5zaXRpb24oKSB7XG4gICAgICAgICAgICB0aGlzLnNldCgnc2hvdWxkRml4SGVpZ2h0JywgZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy5zZXQoJ2V4cGFuZGVkSGVpZ2h0JywgbnVsbCk7XG4gICAgICAgICAgICB0aGlzLnNldCgnY29tcGxldGVkJywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gY29tcHV0ZUV4cGFuZGVkRm9sZGVySGVpZ2h0KGZvbGRlciwgY29udGFpbmVyRWxlbWVudCkge1xuICAgICAgICBsZXQgaGVpZ2h0ID0gMDtcbiAgICAgICAgZGlzYWJsZVRyYW5zaXRpb25UZW1wb3JhcmlseShjb250YWluZXJFbGVtZW50LCAoKSA9PiB7XG4gICAgICAgICAgICBmb2xkZXIuc2V0KCdleHBhbmRlZEhlaWdodCcsIG51bGwpO1xuICAgICAgICAgICAgZm9sZGVyLnNldCgndGVtcG9yYXJ5RXhwYW5kZWQnLCB0cnVlKTtcbiAgICAgICAgICAgIGZvcmNlUmVmbG93KGNvbnRhaW5lckVsZW1lbnQpO1xuICAgICAgICAgICAgaGVpZ2h0ID0gY29udGFpbmVyRWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gICAgICAgICAgICBmb2xkZXIuc2V0KCd0ZW1wb3JhcnlFeHBhbmRlZCcsIG51bGwpO1xuICAgICAgICAgICAgZm9yY2VSZWZsb3coY29udGFpbmVyRWxlbWVudCk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gaGVpZ2h0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBhcHBseUhlaWdodChmb2xkYWJsZSwgZWxlbSkge1xuICAgICAgICBlbGVtLnN0eWxlLmhlaWdodCA9IGZvbGRhYmxlLnN0eWxlSGVpZ2h0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBiaW5kRm9sZGFibGUoZm9sZGFibGUsIGVsZW0pIHtcbiAgICAgICAgZm9sZGFibGUudmFsdWUoJ2V4cGFuZGVkJykuZW1pdHRlci5vbignYmVmb3JlY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgZm9sZGFibGUuc2V0KCdjb21wbGV0ZWQnLCBmYWxzZSk7XG4gICAgICAgICAgICBpZiAoaXNFbXB0eShmb2xkYWJsZS5nZXQoJ2V4cGFuZGVkSGVpZ2h0JykpKSB7XG4gICAgICAgICAgICAgICAgZm9sZGFibGUuc2V0KCdleHBhbmRlZEhlaWdodCcsIGNvbXB1dGVFeHBhbmRlZEZvbGRlckhlaWdodChmb2xkYWJsZSwgZWxlbSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9sZGFibGUuc2V0KCdzaG91bGRGaXhIZWlnaHQnLCB0cnVlKTtcbiAgICAgICAgICAgIGZvcmNlUmVmbG93KGVsZW0pO1xuICAgICAgICB9KTtcbiAgICAgICAgZm9sZGFibGUuZW1pdHRlci5vbignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgYXBwbHlIZWlnaHQoZm9sZGFibGUsIGVsZW0pO1xuICAgICAgICB9KTtcbiAgICAgICAgYXBwbHlIZWlnaHQoZm9sZGFibGUsIGVsZW0pO1xuICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ3RyYW5zaXRpb25lbmQnLCAoZXYpID0+IHtcbiAgICAgICAgICAgIGlmIChldi5wcm9wZXJ0eU5hbWUgIT09ICdoZWlnaHQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZm9sZGFibGUuY2xlYW5VcFRyYW5zaXRpb24oKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xhc3MgUmFja0xpa2VBcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIsIHJhY2tBcGkpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgdGhpcy5yYWNrQXBpXyA9IHJhY2tBcGk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRCdXR0b25Bc0JsYWRlKGFwaSwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBhcGkuYWRkQmxhZGUoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMpLCB7IHZpZXc6ICdidXR0b24nIH0pKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkRm9sZGVyQXNCbGFkZShhcGksIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gYXBpLmFkZEJsYWRlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zKSwgeyB2aWV3OiAnZm9sZGVyJyB9KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZFNlcGFyYXRvckFzQmxhZGUoYXBpLCBvcHRfcGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG9wdF9wYXJhbXMgIT09IG51bGwgJiYgb3B0X3BhcmFtcyAhPT0gdm9pZCAwID8gb3B0X3BhcmFtcyA6IHt9O1xuICAgICAgICByZXR1cm4gYXBpLmFkZEJsYWRlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zKSwgeyB2aWV3OiAnc2VwYXJhdG9yJyB9KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZFRhYkFzQmxhZGUoYXBpLCBwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIGFwaS5hZGRCbGFkZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIHBhcmFtcyksIHsgdmlldzogJ3RhYicgfSkpO1xuICAgIH1cblxuICAgIGNsYXNzIE5lc3RlZE9yZGVyZWRTZXQge1xuICAgICAgICBjb25zdHJ1Y3RvcihleHRyYWN0KSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5pdGVtc18gPSBbXTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVfID0gbmV3IFNldCgpO1xuICAgICAgICAgICAgdGhpcy5vblN1Ykxpc3RBZGRfID0gdGhpcy5vblN1Ykxpc3RBZGRfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uU3ViTGlzdFJlbW92ZV8gPSB0aGlzLm9uU3ViTGlzdFJlbW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZXh0cmFjdF8gPSBleHRyYWN0O1xuICAgICAgICB9XG4gICAgICAgIGdldCBpdGVtcygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLml0ZW1zXztcbiAgICAgICAgfVxuICAgICAgICBhbGxJdGVtcygpIHtcbiAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY2FjaGVfKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5kKGNhbGxiYWNrKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5hbGxJdGVtcygpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGluY2x1ZGVzKGl0ZW0pIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlXy5oYXMoaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkKGl0ZW0sIG9wdF9pbmRleCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5jbHVkZXMoaXRlbSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IG9wdF9pbmRleCAhPT0gdW5kZWZpbmVkID8gb3B0X2luZGV4IDogdGhpcy5pdGVtc18ubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5pdGVtc18uc3BsaWNlKGluZGV4LCAwLCBpdGVtKTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVfLmFkZChpdGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHN1Ykxpc3QgPSB0aGlzLmV4dHJhY3RfKGl0ZW0pO1xuICAgICAgICAgICAgaWYgKHN1Ykxpc3QpIHtcbiAgICAgICAgICAgICAgICBzdWJMaXN0LmVtaXR0ZXIub24oJ2FkZCcsIHRoaXMub25TdWJMaXN0QWRkXyk7XG4gICAgICAgICAgICAgICAgc3ViTGlzdC5lbWl0dGVyLm9uKCdyZW1vdmUnLCB0aGlzLm9uU3ViTGlzdFJlbW92ZV8pO1xuICAgICAgICAgICAgICAgIHN1Ykxpc3QuYWxsSXRlbXMoKS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVfLmFkZChpdGVtKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdhZGQnLCB7XG4gICAgICAgICAgICAgICAgaW5kZXg6IGluZGV4LFxuICAgICAgICAgICAgICAgIGl0ZW06IGl0ZW0sXG4gICAgICAgICAgICAgICAgcm9vdDogdGhpcyxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZW1vdmUoaXRlbSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLml0ZW1zXy5pbmRleE9mKGl0ZW0pO1xuICAgICAgICAgICAgaWYgKGluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaXRlbXNfLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlXy5kZWxldGUoaXRlbSk7XG4gICAgICAgICAgICBjb25zdCBzdWJMaXN0ID0gdGhpcy5leHRyYWN0XyhpdGVtKTtcbiAgICAgICAgICAgIGlmIChzdWJMaXN0KSB7XG4gICAgICAgICAgICAgICAgc3ViTGlzdC5lbWl0dGVyLm9mZignYWRkJywgdGhpcy5vblN1Ykxpc3RBZGRfKTtcbiAgICAgICAgICAgICAgICBzdWJMaXN0LmVtaXR0ZXIub2ZmKCdyZW1vdmUnLCB0aGlzLm9uU3ViTGlzdFJlbW92ZV8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ3JlbW92ZScsIHtcbiAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgICByb290OiB0aGlzLFxuICAgICAgICAgICAgICAgIHRhcmdldDogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uU3ViTGlzdEFkZF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVfLmFkZChldi5pdGVtKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdhZGQnLCB7XG4gICAgICAgICAgICAgICAgaW5kZXg6IGV2LmluZGV4LFxuICAgICAgICAgICAgICAgIGl0ZW06IGV2Lml0ZW0sXG4gICAgICAgICAgICAgICAgcm9vdDogdGhpcyxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IGV2LnRhcmdldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uU3ViTGlzdFJlbW92ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVfLmRlbGV0ZShldi5pdGVtKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdyZW1vdmUnLCB7XG4gICAgICAgICAgICAgICAgaW5kZXg6IGV2LmluZGV4LFxuICAgICAgICAgICAgICAgIGl0ZW06IGV2Lml0ZW0sXG4gICAgICAgICAgICAgICAgcm9vdDogdGhpcyxcbiAgICAgICAgICAgICAgICB0YXJnZXQ6IGV2LnRhcmdldCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgSW5wdXRCaW5kaW5nQXBpIGV4dGVuZHMgQmxhZGVBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyKTtcbiAgICAgICAgICAgIHRoaXMub25CaW5kaW5nQ2hhbmdlXyA9IHRoaXMub25CaW5kaW5nQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXyA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLmJpbmRpbmcuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkJpbmRpbmdDaGFuZ2VfKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbGFiZWwoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5wcm9wcy5nZXQoJ2xhYmVsJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGxhYmVsKGxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLnNldCgnbGFiZWwnLCBsYWJlbCk7XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaCA9IGhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8ub24oZXZlbnROYW1lLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICBiaChldi5ldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHJlZnJlc2goKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLmJpbmRpbmcucmVhZCgpO1xuICAgICAgICB9XG4gICAgICAgIG9uQmluZGluZ0NoYW5nZV8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZXYuc2VuZGVyLnRhcmdldC5yZWFkKCk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwQ2hhbmdlRXZlbnQodGhpcywgZm9yY2VDYXN0KHZhbHVlKSwgdGhpcy5jb250cm9sbGVyXy5iaW5kaW5nLnRhcmdldC5wcmVzZXRLZXksIGV2Lm9wdGlvbnMubGFzdCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIElucHV0QmluZGluZ0NvbnRyb2xsZXIgZXh0ZW5kcyBMYWJlbENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgc3VwZXIoZG9jLCBjb25maWcpO1xuICAgICAgICAgICAgdGhpcy5iaW5kaW5nID0gY29uZmlnLmJpbmRpbmc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBNb25pdG9yQmluZGluZ0FwaSBleHRlbmRzIEJsYWRlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlcikge1xuICAgICAgICAgICAgc3VwZXIoY29udHJvbGxlcik7XG4gICAgICAgICAgICB0aGlzLm9uQmluZGluZ1VwZGF0ZV8gPSB0aGlzLm9uQmluZGluZ1VwZGF0ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8gPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5iaW5kaW5nLmVtaXR0ZXIub24oJ3VwZGF0ZScsIHRoaXMub25CaW5kaW5nVXBkYXRlXyk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGxhYmVsKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuZ2V0KCdsYWJlbCcpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBsYWJlbChsYWJlbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wcm9wcy5zZXQoJ2xhYmVsJywgbGFiZWwpO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLm9uKGV2ZW50TmFtZSwgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgYmgoZXYuZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICByZWZyZXNoKCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5iaW5kaW5nLnJlYWQoKTtcbiAgICAgICAgfVxuICAgICAgICBvbkJpbmRpbmdVcGRhdGVfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGV2LnNlbmRlci50YXJnZXQucmVhZCgpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCd1cGRhdGUnLCB7XG4gICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcFVwZGF0ZUV2ZW50KHRoaXMsIGZvcmNlQ2FzdCh2YWx1ZSksIHRoaXMuY29udHJvbGxlcl8uYmluZGluZy50YXJnZXQucHJlc2V0S2V5KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgTW9uaXRvckJpbmRpbmdDb250cm9sbGVyIGV4dGVuZHMgTGFiZWxDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHN1cGVyKGRvYywgY29uZmlnKTtcbiAgICAgICAgICAgIHRoaXMuYmluZGluZyA9IGNvbmZpZy5iaW5kaW5nO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMuYmluZERpc2FibGVkKHRoaXMuYmluZGluZy50aWNrZXIpO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMuaGFuZGxlRGlzcG9zZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kaW5nLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmluZFN1YkJsYWRlQXBpU2V0KGFwaSkge1xuICAgICAgICBpZiAoYXBpIGluc3RhbmNlb2YgUmFja0FwaSkge1xuICAgICAgICAgICAgcmV0dXJuIGFwaVsnYXBpU2V0XyddO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcGkgaW5zdGFuY2VvZiBSYWNrTGlrZUFwaSkge1xuICAgICAgICAgICAgcmV0dXJuIGFwaVsncmFja0FwaV8nXVsnYXBpU2V0XyddO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRBcGlCeUNvbnRyb2xsZXIoYXBpU2V0LCBjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnN0IGFwaSA9IGFwaVNldC5maW5kKChhcGkpID0+IGFwaS5jb250cm9sbGVyXyA9PT0gY29udHJvbGxlcik7XG4gICAgICAgIGlmICghYXBpKSB7XG4gICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGFwaTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQmluZGluZ1RhcmdldChvYmosIGtleSwgb3B0X2lkKSB7XG4gICAgICAgIGlmICghQmluZGluZ1RhcmdldC5pc0JpbmRhYmxlKG9iaikpIHtcbiAgICAgICAgICAgIHRocm93IFRwRXJyb3Iubm90QmluZGFibGUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IEJpbmRpbmdUYXJnZXQob2JqLCBrZXksIG9wdF9pZCk7XG4gICAgfVxuICAgIGNsYXNzIFJhY2tBcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIsIHBvb2wpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgdGhpcy5vblJhY2tBZGRfID0gdGhpcy5vblJhY2tBZGRfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUmFja1JlbW92ZV8gPSB0aGlzLm9uUmFja1JlbW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25SYWNrSW5wdXRDaGFuZ2VfID0gdGhpcy5vblJhY2tJbnB1dENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25SYWNrTW9uaXRvclVwZGF0ZV8gPSB0aGlzLm9uUmFja01vbml0b3JVcGRhdGVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuYXBpU2V0XyA9IG5ldyBOZXN0ZWRPcmRlcmVkU2V0KGZpbmRTdWJCbGFkZUFwaVNldCk7XG4gICAgICAgICAgICB0aGlzLnBvb2xfID0gcG9vbDtcbiAgICAgICAgICAgIGNvbnN0IHJhY2sgPSB0aGlzLmNvbnRyb2xsZXJfLnJhY2s7XG4gICAgICAgICAgICByYWNrLmVtaXR0ZXIub24oJ2FkZCcsIHRoaXMub25SYWNrQWRkXyk7XG4gICAgICAgICAgICByYWNrLmVtaXR0ZXIub24oJ3JlbW92ZScsIHRoaXMub25SYWNrUmVtb3ZlXyk7XG4gICAgICAgICAgICByYWNrLmVtaXR0ZXIub24oJ2lucHV0Y2hhbmdlJywgdGhpcy5vblJhY2tJbnB1dENoYW5nZV8pO1xuICAgICAgICAgICAgcmFjay5lbWl0dGVyLm9uKCdtb25pdG9ydXBkYXRlJywgdGhpcy5vblJhY2tNb25pdG9yVXBkYXRlXyk7XG4gICAgICAgICAgICByYWNrLmNoaWxkcmVuLmZvckVhY2goKGJjKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRVcEFwaV8oYmMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGNoaWxkcmVuKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucmFjay5jaGlsZHJlbi5tYXAoKGJjKSA9PiBnZXRBcGlCeUNvbnRyb2xsZXIodGhpcy5hcGlTZXRfLCBiYykpO1xuICAgICAgICB9XG4gICAgICAgIGFkZElucHV0KG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBvcHRfcGFyYW1zICE9PSBudWxsICYmIG9wdF9wYXJhbXMgIT09IHZvaWQgMCA/IG9wdF9wYXJhbXMgOiB7fTtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuY29udHJvbGxlcl8udmlldy5lbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBiYyA9IHRoaXMucG9vbF8uY3JlYXRlSW5wdXQoZG9jLCBjcmVhdGVCaW5kaW5nVGFyZ2V0KG9iamVjdCwga2V5LCBwYXJhbXMucHJlc2V0S2V5KSwgcGFyYW1zKTtcbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IG5ldyBJbnB1dEJpbmRpbmdBcGkoYmMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuYWRkKGFwaSwgcGFyYW1zLmluZGV4KTtcbiAgICAgICAgfVxuICAgICAgICBhZGRNb25pdG9yKG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBvcHRfcGFyYW1zICE9PSBudWxsICYmIG9wdF9wYXJhbXMgIT09IHZvaWQgMCA/IG9wdF9wYXJhbXMgOiB7fTtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuY29udHJvbGxlcl8udmlldy5lbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBiYyA9IHRoaXMucG9vbF8uY3JlYXRlTW9uaXRvcihkb2MsIGNyZWF0ZUJpbmRpbmdUYXJnZXQob2JqZWN0LCBrZXkpLCBwYXJhbXMpO1xuICAgICAgICAgICAgY29uc3QgYXBpID0gbmV3IE1vbml0b3JCaW5kaW5nQXBpKGJjKTtcbiAgICAgICAgICAgIHJldHVybiBmb3JjZUNhc3QodGhpcy5hZGQoYXBpLCBwYXJhbXMuaW5kZXgpKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRGb2xkZXIocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gYWRkRm9sZGVyQXNCbGFkZSh0aGlzLCBwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZEJ1dHRvbihwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhZGRCdXR0b25Bc0JsYWRlKHRoaXMsIHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkU2VwYXJhdG9yKG9wdF9wYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhZGRTZXBhcmF0b3JBc0JsYWRlKHRoaXMsIG9wdF9wYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFRhYihwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhZGRUYWJBc0JsYWRlKHRoaXMsIHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkKGFwaSwgb3B0X2luZGV4KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnJhY2suYWRkKGFwaS5jb250cm9sbGVyXywgb3B0X2luZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IGdhcGkgPSB0aGlzLmFwaVNldF8uZmluZCgoYSkgPT4gYS5jb250cm9sbGVyXyA9PT0gYXBpLmNvbnRyb2xsZXJfKTtcbiAgICAgICAgICAgIGlmIChnYXBpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcGlTZXRfLnJlbW92ZShnYXBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXBpU2V0Xy5hZGQoYXBpKTtcbiAgICAgICAgICAgIHJldHVybiBhcGk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlKGFwaSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5yYWNrLnJlbW92ZShhcGkuY29udHJvbGxlcl8pO1xuICAgICAgICB9XG4gICAgICAgIGFkZEJsYWRlKHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5jb250cm9sbGVyXy52aWV3LmVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gdGhpcy5wb29sXy5jcmVhdGVCbGFkZShkb2MsIHBhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCBhcGkgPSB0aGlzLnBvb2xfLmNyZWF0ZUJsYWRlQXBpKGJjKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZChhcGksIHBhcmFtcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaCA9IGhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8ub24oZXZlbnROYW1lLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICBiaChldi5ldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHNldFVwQXBpXyhiYykge1xuICAgICAgICAgICAgY29uc3QgYXBpID0gdGhpcy5hcGlTZXRfLmZpbmQoKGFwaSkgPT4gYXBpLmNvbnRyb2xsZXJfID09PSBiYyk7XG4gICAgICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBpU2V0Xy5hZGQodGhpcy5wb29sXy5jcmVhdGVCbGFkZUFwaShiYykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uUmFja0FkZF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXBBcGlfKGV2LmJsYWRlQ29udHJvbGxlcik7XG4gICAgICAgIH1cbiAgICAgICAgb25SYWNrUmVtb3ZlXyhldikge1xuICAgICAgICAgICAgaWYgKGV2LmlzUm9vdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFwaSA9IGdldEFwaUJ5Q29udHJvbGxlcih0aGlzLmFwaVNldF8sIGV2LmJsYWRlQ29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5hcGlTZXRfLnJlbW92ZShhcGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uUmFja0lucHV0Q2hhbmdlXyhldikge1xuICAgICAgICAgICAgY29uc3QgYmMgPSBldi5ibGFkZUNvbnRyb2xsZXI7XG4gICAgICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBJbnB1dEJpbmRpbmdDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXBpID0gZ2V0QXBpQnlDb250cm9sbGVyKHRoaXMuYXBpU2V0XywgYmMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpbmRpbmcgPSBiYy5iaW5kaW5nO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwQ2hhbmdlRXZlbnQoYXBpLCBmb3JjZUNhc3QoYmluZGluZy50YXJnZXQucmVhZCgpKSwgYmluZGluZy50YXJnZXQucHJlc2V0S2V5LCBldi5vcHRpb25zLmxhc3QpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYmMgaW5zdGFuY2VvZiBWYWx1ZUJsYWRlQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFwaSA9IGdldEFwaUJ5Q29udHJvbGxlcih0aGlzLmFwaVNldF8sIGJjKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcENoYW5nZUV2ZW50KGFwaSwgYmMudmFsdWUucmF3VmFsdWUsIHVuZGVmaW5lZCwgZXYub3B0aW9ucy5sYXN0KSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblJhY2tNb25pdG9yVXBkYXRlXyhldikge1xuICAgICAgICAgICAgaWYgKCEoZXYuYmxhZGVDb250cm9sbGVyIGluc3RhbmNlb2YgTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IGdldEFwaUJ5Q29udHJvbGxlcih0aGlzLmFwaVNldF8sIGV2LmJsYWRlQ29udHJvbGxlcik7XG4gICAgICAgICAgICBjb25zdCBiaW5kaW5nID0gZXYuYmxhZGVDb250cm9sbGVyLmJpbmRpbmc7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ3VwZGF0ZScsIHtcbiAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwVXBkYXRlRXZlbnQoYXBpLCBmb3JjZUNhc3QoYmluZGluZy50YXJnZXQucmVhZCgpKSwgYmluZGluZy50YXJnZXQucHJlc2V0S2V5KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgRm9sZGVyQXBpIGV4dGVuZHMgUmFja0xpa2VBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyLCBwb29sKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyLCBuZXcgUmFja0FwaShjb250cm9sbGVyLnJhY2tDb250cm9sbGVyLCBwb29sKSk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8uZm9sZGFibGVcbiAgICAgICAgICAgICAgICAudmFsdWUoJ2V4cGFuZGVkJylcbiAgICAgICAgICAgICAgICAuZW1pdHRlci5vbignY2hhbmdlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdmb2xkJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwRm9sZEV2ZW50KHRoaXMsIGV2LnNlbmRlci5yYXdWYWx1ZSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmFja0FwaV8ub24oJ2NoYW5nZScsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogZXYsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmFja0FwaV8ub24oJ3VwZGF0ZScsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgndXBkYXRlJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogZXYsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZXhwYW5kZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5mb2xkYWJsZS5nZXQoJ2V4cGFuZGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGV4cGFuZGVkKGV4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLmZvbGRhYmxlLnNldCgnZXhwYW5kZWQnLCBleHBhbmRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHRpdGxlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuZ2V0KCd0aXRsZScpO1xuICAgICAgICB9XG4gICAgICAgIHNldCB0aXRsZSh0aXRsZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wcm9wcy5zZXQoJ3RpdGxlJywgdGl0bGUpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBjaGlsZHJlbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmNoaWxkcmVuO1xuICAgICAgICB9XG4gICAgICAgIGFkZElucHV0KG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRJbnB1dChvYmplY3QsIGtleSwgb3B0X3BhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkTW9uaXRvcihvYmplY3QsIGtleSwgb3B0X3BhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkTW9uaXRvcihvYmplY3QsIGtleSwgb3B0X3BhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkRm9sZGVyKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkRm9sZGVyKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkQnV0dG9uKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkQnV0dG9uKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkU2VwYXJhdG9yKG9wdF9wYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZFNlcGFyYXRvcihvcHRfcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRUYWIocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRUYWIocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGQoYXBpLCBvcHRfaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZChhcGksIG9wdF9pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlKGFwaSkge1xuICAgICAgICAgICAgdGhpcy5yYWNrQXBpXy5yZW1vdmUoYXBpKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRCbGFkZShwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZEJsYWRlKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaCA9IGhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8ub24oZXZlbnROYW1lLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICBiaChldi5ldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUmFja0xpa2VDb250cm9sbGVyIGV4dGVuZHMgQmxhZGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGNvbmZpZy5ibGFkZSxcbiAgICAgICAgICAgICAgICB2aWV3OiBjb25maWcudmlldyxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy5yYWNrQ29udHJvbGxlci52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmFja0NvbnRyb2xsZXIgPSBjb25maWcucmFja0NvbnRyb2xsZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBQbGFpblZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gQ2xhc3NOYW1lKGNvbmZpZy52aWV3TmFtZSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmluZElucHV0QmluZGluZ0NvbnRyb2xsZXIoYmNzLCBiKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmNzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IGJjc1tpXTtcbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIElucHV0QmluZGluZ0NvbnRyb2xsZXIgJiYgYmMuYmluZGluZyA9PT0gYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZE1vbml0b3JCaW5kaW5nQ29udHJvbGxlcihiY3MsIGIpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gYmNzW2ldO1xuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgTW9uaXRvckJpbmRpbmdDb250cm9sbGVyICYmIGJjLmJpbmRpbmcgPT09IGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRWYWx1ZUJsYWRlQ29udHJvbGxlcihiY3MsIHYpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gYmNzW2ldO1xuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgVmFsdWVCbGFkZUNvbnRyb2xsZXIgJiYgYmMudmFsdWUgPT09IHYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRTdWJSYWNrKGJjKSB7XG4gICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIFJhY2tDb250cm9sbGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gYmMucmFjaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBSYWNrTGlrZUNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBiYy5yYWNrQ29udHJvbGxlci5yYWNrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kU3ViQmxhZGVDb250cm9sbGVyU2V0KGJjKSB7XG4gICAgICAgIGNvbnN0IHJhY2sgPSBmaW5kU3ViUmFjayhiYyk7XG4gICAgICAgIHJldHVybiByYWNrID8gcmFja1snYmNTZXRfJ10gOiBudWxsO1xuICAgIH1cbiAgICBjbGFzcyBCbGFkZVJhY2sge1xuICAgICAgICBjb25zdHJ1Y3RvcihibGFkZSkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdGhpcy5vbkJsYWRlUG9zaXRpb25zQ2hhbmdlXyA9IHRoaXMub25CbGFkZVBvc2l0aW9uc0NoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25TZXRBZGRfID0gdGhpcy5vblNldEFkZF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25TZXRSZW1vdmVfID0gdGhpcy5vblNldFJlbW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGlsZERpc3Bvc2VfID0gdGhpcy5vbkNoaWxkRGlzcG9zZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGlsZFBvc2l0aW9uc0NoYW5nZV8gPSB0aGlzLm9uQ2hpbGRQb3NpdGlvbnNDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hpbGRJbnB1dENoYW5nZV8gPSB0aGlzLm9uQ2hpbGRJbnB1dENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGlsZE1vbml0b3JVcGRhdGVfID0gdGhpcy5vbkNoaWxkTW9uaXRvclVwZGF0ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGlsZFZhbHVlQ2hhbmdlXyA9IHRoaXMub25DaGlsZFZhbHVlQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkNoaWxkVmlld1Byb3BzQ2hhbmdlXyA9IHRoaXMub25DaGlsZFZpZXdQcm9wc0NoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25EZXNjZW5kYW50TGF5b3V0XyA9IHRoaXMub25EZXNjZW5kYW50TGF5b3V0Xy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkRlc2NlbmRhbnRJbnB1dENoYW5nZV8gPSB0aGlzLm9uRGVzY2VuZGFudElucHV0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkRlc2NlbmRhbnRNb25pdG9yVXBkYXRlXyA9XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRlc2NlbmRhbnRNb25pdG9yVXBkYXRlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuYmxhZGVfID0gYmxhZGUgIT09IG51bGwgJiYgYmxhZGUgIT09IHZvaWQgMCA/IGJsYWRlIDogbnVsbDtcbiAgICAgICAgICAgIChfYSA9IHRoaXMuYmxhZGVfKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUoJ3Bvc2l0aW9ucycpLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25CbGFkZVBvc2l0aW9uc0NoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy5iY1NldF8gPSBuZXcgTmVzdGVkT3JkZXJlZFNldChmaW5kU3ViQmxhZGVDb250cm9sbGVyU2V0KTtcbiAgICAgICAgICAgIHRoaXMuYmNTZXRfLmVtaXR0ZXIub24oJ2FkZCcsIHRoaXMub25TZXRBZGRfKTtcbiAgICAgICAgICAgIHRoaXMuYmNTZXRfLmVtaXR0ZXIub24oJ3JlbW92ZScsIHRoaXMub25TZXRSZW1vdmVfKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgY2hpbGRyZW4oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5iY1NldF8uaXRlbXM7XG4gICAgICAgIH1cbiAgICAgICAgYWRkKGJjLCBvcHRfaW5kZXgpIHtcbiAgICAgICAgICAgIGlmIChiYy5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBiYy5wYXJlbnQucmVtb3ZlKGJjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJjWydwYXJlbnRfJ10gPSB0aGlzO1xuICAgICAgICAgICAgdGhpcy5iY1NldF8uYWRkKGJjLCBvcHRfaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShiYykge1xuICAgICAgICAgICAgYmNbJ3BhcmVudF8nXSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmJjU2V0Xy5yZW1vdmUoYmMpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmQoY29udHJvbGxlckNsYXNzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9yY2VDYXN0KHRoaXMuYmNTZXRfLmFsbEl0ZW1zKCkuZmlsdGVyKChiYykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYyBpbnN0YW5jZW9mIGNvbnRyb2xsZXJDbGFzcztcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBvblNldEFkZF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zXygpO1xuICAgICAgICAgICAgY29uc3QgaXNSb290ID0gZXYudGFyZ2V0ID09PSBldi5yb290O1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2FkZCcsIHtcbiAgICAgICAgICAgICAgICBibGFkZUNvbnRyb2xsZXI6IGV2Lml0ZW0sXG4gICAgICAgICAgICAgICAgaW5kZXg6IGV2LmluZGV4LFxuICAgICAgICAgICAgICAgIGlzUm9vdDogaXNSb290LFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFpc1Jvb3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBiYyA9IGV2Lml0ZW07XG4gICAgICAgICAgICBiYy52aWV3UHJvcHMuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoaWxkVmlld1Byb3BzQ2hhbmdlXyk7XG4gICAgICAgICAgICBiYy5ibGFkZVxuICAgICAgICAgICAgICAgIC52YWx1ZSgncG9zaXRpb25zJylcbiAgICAgICAgICAgICAgICAuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoaWxkUG9zaXRpb25zQ2hhbmdlXyk7XG4gICAgICAgICAgICBiYy52aWV3UHJvcHMuaGFuZGxlRGlzcG9zZSh0aGlzLm9uQ2hpbGREaXNwb3NlXyk7XG4gICAgICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBJbnB1dEJpbmRpbmdDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgYmMuYmluZGluZy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hpbGRJbnB1dENoYW5nZV8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYmMgaW5zdGFuY2VvZiBNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBiYy5iaW5kaW5nLmVtaXR0ZXIub24oJ3VwZGF0ZScsIHRoaXMub25DaGlsZE1vbml0b3JVcGRhdGVfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGJjIGluc3RhbmNlb2YgVmFsdWVCbGFkZUNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBiYy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hpbGRWYWx1ZUNoYW5nZV8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFjayA9IGZpbmRTdWJSYWNrKGJjKTtcbiAgICAgICAgICAgICAgICBpZiAocmFjaykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbWl0dGVyID0gcmFjay5lbWl0dGVyO1xuICAgICAgICAgICAgICAgICAgICBlbWl0dGVyLm9uKCdsYXlvdXQnLCB0aGlzLm9uRGVzY2VuZGFudExheW91dF8pO1xuICAgICAgICAgICAgICAgICAgICBlbWl0dGVyLm9uKCdpbnB1dGNoYW5nZScsIHRoaXMub25EZXNjZW5kYW50SW5wdXRDaGFuZ2VfKTtcbiAgICAgICAgICAgICAgICAgICAgZW1pdHRlci5vbignbW9uaXRvcnVwZGF0ZScsIHRoaXMub25EZXNjZW5kYW50TW9uaXRvclVwZGF0ZV8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblNldFJlbW92ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zXygpO1xuICAgICAgICAgICAgY29uc3QgaXNSb290ID0gZXYudGFyZ2V0ID09PSBldi5yb290O1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ3JlbW92ZScsIHtcbiAgICAgICAgICAgICAgICBibGFkZUNvbnRyb2xsZXI6IGV2Lml0ZW0sXG4gICAgICAgICAgICAgICAgaXNSb290OiBpc1Jvb3QsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWlzUm9vdCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJjID0gZXYuaXRlbTtcbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIElucHV0QmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBiYy5iaW5kaW5nLmVtaXR0ZXIub2ZmKCdjaGFuZ2UnLCB0aGlzLm9uQ2hpbGRJbnB1dENoYW5nZV8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYmMgaW5zdGFuY2VvZiBNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBiYy5iaW5kaW5nLmVtaXR0ZXIub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQ2hpbGRNb25pdG9yVXBkYXRlXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChiYyBpbnN0YW5jZW9mIFZhbHVlQmxhZGVDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgYmMudmFsdWUuZW1pdHRlci5vZmYoJ2NoYW5nZScsIHRoaXMub25DaGlsZFZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYWNrID0gZmluZFN1YlJhY2soYmMpO1xuICAgICAgICAgICAgICAgIGlmIChyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtaXR0ZXIgPSByYWNrLmVtaXR0ZXI7XG4gICAgICAgICAgICAgICAgICAgIGVtaXR0ZXIub2ZmKCdsYXlvdXQnLCB0aGlzLm9uRGVzY2VuZGFudExheW91dF8pO1xuICAgICAgICAgICAgICAgICAgICBlbWl0dGVyLm9mZignaW5wdXRjaGFuZ2UnLCB0aGlzLm9uRGVzY2VuZGFudElucHV0Q2hhbmdlXyk7XG4gICAgICAgICAgICAgICAgICAgIGVtaXR0ZXIub2ZmKCdtb25pdG9ydXBkYXRlJywgdGhpcy5vbkRlc2NlbmRhbnRNb25pdG9yVXBkYXRlXyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVBvc2l0aW9uc18oKSB7XG4gICAgICAgICAgICBjb25zdCB2aXNpYmxlSXRlbXMgPSB0aGlzLmJjU2V0Xy5pdGVtcy5maWx0ZXIoKGJjKSA9PiAhYmMudmlld1Byb3BzLmdldCgnaGlkZGVuJykpO1xuICAgICAgICAgICAgY29uc3QgZmlyc3RWaXNpYmxlSXRlbSA9IHZpc2libGVJdGVtc1swXTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RWaXNpYmxlSXRlbSA9IHZpc2libGVJdGVtc1t2aXNpYmxlSXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICB0aGlzLmJjU2V0Xy5pdGVtcy5mb3JFYWNoKChiYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBzID0gW107XG4gICAgICAgICAgICAgICAgaWYgKGJjID09PSBmaXJzdFZpc2libGVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHBzLnB1c2goJ2ZpcnN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5ibGFkZV8gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmxhZGVfLmdldCgncG9zaXRpb25zJykuaW5jbHVkZXMoJ3ZlcnlmaXJzdCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcy5wdXNoKCd2ZXJ5Zmlyc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYmMgPT09IGxhc3RWaXNpYmxlSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBwcy5wdXNoKCdsYXN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5ibGFkZV8gfHwgdGhpcy5ibGFkZV8uZ2V0KCdwb3NpdGlvbnMnKS5pbmNsdWRlcygndmVyeWxhc3QnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHMucHVzaCgndmVyeWxhc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBiYy5ibGFkZS5zZXQoJ3Bvc2l0aW9ucycsIHBzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hpbGRQb3NpdGlvbnNDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnNfKCk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnbGF5b3V0Jywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hpbGRWaWV3UHJvcHNDaGFuZ2VfKF9ldikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnNfKCk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnbGF5b3V0Jywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hpbGREaXNwb3NlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc3Bvc2VkVWNzID0gdGhpcy5iY1NldF8uaXRlbXMuZmlsdGVyKChiYykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYy52aWV3UHJvcHMuZ2V0KCdkaXNwb3NlZCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkaXNwb3NlZFVjcy5mb3JFYWNoKChiYykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYmNTZXRfLnJlbW92ZShiYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkNoaWxkSW5wdXRDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IGZpbmRJbnB1dEJpbmRpbmdDb250cm9sbGVyKHRoaXMuZmluZChJbnB1dEJpbmRpbmdDb250cm9sbGVyKSwgZXYuc2VuZGVyKTtcbiAgICAgICAgICAgIGlmICghYmMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLmFscmVhZHlEaXNwb3NlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2lucHV0Y2hhbmdlJywge1xuICAgICAgICAgICAgICAgIGJsYWRlQ29udHJvbGxlcjogYmMsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogZXYub3B0aW9ucyxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkNoaWxkTW9uaXRvclVwZGF0ZV8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gZmluZE1vbml0b3JCaW5kaW5nQ29udHJvbGxlcih0aGlzLmZpbmQoTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKSwgZXYuc2VuZGVyKTtcbiAgICAgICAgICAgIGlmICghYmMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLmFscmVhZHlEaXNwb3NlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ21vbml0b3J1cGRhdGUnLCB7XG4gICAgICAgICAgICAgICAgYmxhZGVDb250cm9sbGVyOiBiYyxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkNoaWxkVmFsdWVDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IGZpbmRWYWx1ZUJsYWRlQ29udHJvbGxlcih0aGlzLmZpbmQoVmFsdWVCbGFkZUNvbnRyb2xsZXIpLCBldi5zZW5kZXIpO1xuICAgICAgICAgICAgaWYgKCFiYykge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3IuYWxyZWFkeURpc3Bvc2VkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnaW5wdXRjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgYmxhZGVDb250cm9sbGVyOiBiYyxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBldi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uRGVzY2VuZGFudExheW91dF8oXykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnNfKCk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnbGF5b3V0Jywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uRGVzY2VuZGFudElucHV0Q2hhbmdlXyhldikge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2lucHV0Y2hhbmdlJywge1xuICAgICAgICAgICAgICAgIGJsYWRlQ29udHJvbGxlcjogZXYuYmxhZGVDb250cm9sbGVyLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV2Lm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25EZXNjZW5kYW50TW9uaXRvclVwZGF0ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdtb25pdG9ydXBkYXRlJywge1xuICAgICAgICAgICAgICAgIGJsYWRlQ29udHJvbGxlcjogZXYuYmxhZGVDb250cm9sbGVyLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uQmxhZGVQb3NpdGlvbnNDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnNfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBSYWNrQ29udHJvbGxlciBleHRlbmRzIEJsYWRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBzdXBlcihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZyksIHsgdmlldzogbmV3IFBsYWluVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICAgICAgdmlld05hbWU6ICdicmsnLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSkgfSkpO1xuICAgICAgICAgICAgdGhpcy5vblJhY2tBZGRfID0gdGhpcy5vblJhY2tBZGRfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUmFja1JlbW92ZV8gPSB0aGlzLm9uUmFja1JlbW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IHJhY2sgPSBuZXcgQmxhZGVSYWNrKGNvbmZpZy5yb290ID8gdW5kZWZpbmVkIDogY29uZmlnLmJsYWRlKTtcbiAgICAgICAgICAgIHJhY2suZW1pdHRlci5vbignYWRkJywgdGhpcy5vblJhY2tBZGRfKTtcbiAgICAgICAgICAgIHJhY2suZW1pdHRlci5vbigncmVtb3ZlJywgdGhpcy5vblJhY2tSZW1vdmVfKTtcbiAgICAgICAgICAgIHRoaXMucmFjayA9IHJhY2s7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcy5oYW5kbGVEaXNwb3NlKCgpID0+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+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvb2xfLnJlZ2lzdGVyKHApO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1iZWRQbHVnaW5TdHlsZV8ocCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbWJlZFBsdWdpblN0eWxlXyhwbHVnaW4pIHtcbiAgICAgICAgICAgIGlmIChwbHVnaW4uY3NzKSB7XG4gICAgICAgICAgICAgICAgZW1iZWRTdHlsZSh0aGlzLmRvY3VtZW50LCBgcGx1Z2luLSR7cGx1Z2luLmlkfWAsIHBsdWdpbi5jc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHNldFVwRGVmYXVsdFBsdWdpbnNfKCkge1xuICAgICAgICAgICAgLy8gTk9URTogVGhpcyBzdHJpbmcgbGl0ZXJhbCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlIGRlZmF1bHQgQ1NTIGJ5IFJvbGx1cCBhdCB0aGUgY29tcGlsYXRpb24gdGltZVxuICAgICAgICAgICAgZW1iZWRTdHlsZSh0aGlzLmRvY3VtZW50LCAnZGVmYXVsdCcsICcudHAtdGJpdl9iLC50cC1jb2x0eHR2X21zLC50cC1ja2J2X2ksLnRwLXJvdHZfYiwudHAtZmxkdl9iLC50cC1tbGx2X2ksLnRwLXNnbHZfaSwudHAtZ3Jsdl9nLC50cC10eHR2X2ksLnRwLXAyZHB2X3AsLnRwLWNvbHN3dl9zdywudHAtcDJkdl9iLC50cC1idG52X2IsLnRwLWxzdHZfc3std2Via2l0LWFwcGVhcmFuY2U6bm9uZTstbW96LWFwcGVhcmFuY2U6bm9uZTthcHBlYXJhbmNlOm5vbmU7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApO2JvcmRlci13aWR0aDowO2ZvbnQtZmFtaWx5OmluaGVyaXQ7Zm9udC1zaXplOmluaGVyaXQ7Zm9udC13ZWlnaHQ6aW5oZXJpdDttYXJnaW46MDtvdXRsaW5lOm5vbmU7cGFkZGluZzowfS50cC1wMmR2X2IsLnRwLWJ0bnZfYiwudHAtbHN0dl9ze2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnRuLWJnKTtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Y29sb3I6dmFyKC0tYnRuLWZnKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmJsb2NrO2ZvbnQtd2VpZ2h0OmJvbGQ7aGVpZ2h0OnZhcigtLWJsZC11cyk7bGluZS1oZWlnaHQ6dmFyKC0tYmxkLXVzKTtvdmVyZmxvdzpoaWRkZW47dGV4dC1vdmVyZmxvdzplbGxpcHNpczt3aGl0ZS1zcGFjZTpub3dyYXB9LnRwLXAyZHZfYjpob3ZlciwudHAtYnRudl9iOmhvdmVyLC50cC1sc3R2X3M6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1idG4tYmctaCl9LnRwLXAyZHZfYjpmb2N1cywudHAtYnRudl9iOmZvY3VzLC50cC1sc3R2X3M6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1idG4tYmctZil9LnRwLXAyZHZfYjphY3RpdmUsLnRwLWJ0bnZfYjphY3RpdmUsLnRwLWxzdHZfczphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1idG4tYmctYSl9LnRwLXAyZHZfYjpkaXNhYmxlZCwudHAtYnRudl9iOmRpc2FibGVkLC50cC1sc3R2X3M6ZGlzYWJsZWR7b3BhY2l0eTouNX0udHAtdHh0dl9pLC50cC1wMmRwdl9wLC50cC1jb2xzd3Zfc3d7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1pbi1mZyk7Zm9udC1mYW1pbHk6aW5oZXJpdDtoZWlnaHQ6dmFyKC0tYmxkLXVzKTtsaW5lLWhlaWdodDp2YXIoLS1ibGQtdXMpO21pbi13aWR0aDowO3dpZHRoOjEwMCV9LnRwLXR4dHZfaTpob3ZlciwudHAtcDJkcHZfcDpob3ZlciwudHAtY29sc3d2X3N3OmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctaCl9LnRwLXR4dHZfaTpmb2N1cywudHAtcDJkcHZfcDpmb2N1cywudHAtY29sc3d2X3N3OmZvY3Vze2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctZil9LnRwLXR4dHZfaTphY3RpdmUsLnRwLXAyZHB2X3A6YWN0aXZlLC50cC1jb2xzd3Zfc3c6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctYSl9LnRwLXR4dHZfaTpkaXNhYmxlZCwudHAtcDJkcHZfcDpkaXNhYmxlZCwudHAtY29sc3d2X3N3OmRpc2FibGVke29wYWNpdHk6LjV9LnRwLW1sbHZfaSwudHAtc2dsdl9pLC50cC1ncmx2X2d7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1tby1iZyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1tby1mZyk7aGVpZ2h0OnZhcigtLWJsZC11cyk7c2Nyb2xsYmFyLWNvbG9yOmN1cnJlbnRDb2xvciByZ2JhKDAsMCwwLDApO3Njcm9sbGJhci13aWR0aDp0aGluO3dpZHRoOjEwMCV9LnRwLW1sbHZfaTo6LXdlYmtpdC1zY3JvbGxiYXIsLnRwLXNnbHZfaTo6LXdlYmtpdC1zY3JvbGxiYXIsLnRwLWdybHZfZzo6LXdlYmtpdC1zY3JvbGxiYXJ7aGVpZ2h0OjhweDt3aWR0aDo4cHh9LnRwLW1sbHZfaTo6LXdlYmtpdC1zY3JvbGxiYXItY29ybmVyLC50cC1zZ2x2X2k6Oi13ZWJraXQtc2Nyb2xsYmFyLWNvcm5lciwudHAtZ3Jsdl9nOjotd2Via2l0LXNjcm9sbGJhci1jb3JuZXJ7YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDAsMCwwLDApfS50cC1tbGx2X2k6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLC50cC1zZ2x2X2k6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLC50cC1ncmx2X2c6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1ie2JhY2tncm91bmQtY2xpcDpwYWRkaW5nLWJveDtiYWNrZ3JvdW5kLWNvbG9yOmN1cnJlbnRDb2xvcjtib3JkZXI6cmdiYSgwLDAsMCwwKSBzb2xpZCAycHg7Ym9yZGVyLXJhZGl1czo0cHh9LnRwLXJvdHZ7LS1mb250LWZhbWlseTogdmFyKC0tdHAtZm9udC1mYW1pbHksIFJvYm90byBNb25vLCBTb3VyY2UgQ29kZSBQcm8sIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2UpOy0tYnMtYnI6IHZhcigtLXRwLWJhc2UtYm9yZGVyLXJhZGl1cywgNnB4KTstLWNudC1oLXA6IHZhcigtLXRwLWNvbnRhaW5lci1ob3Jpem9udGFsLXBhZGRpbmcsIDRweCk7LS1jbnQtdi1wOiB2YXIoLS10cC1jb250YWluZXItdmVydGljYWwtcGFkZGluZywgNHB4KTstLWVsbS1icjogdmFyKC0tdHAtZWxlbWVudC1ib3JkZXItcmFkaXVzLCAycHgpOy0tYmxkLXM6IHZhcigtLXRwLWJsYWRlLXNwYWNpbmcsIDRweCk7LS1ibGQtdXM6IHZhcigtLXRwLWJsYWRlLXVuaXQtc2l6ZSwgMjBweCk7LS1icy1iZzogdmFyKC0tdHAtYmFzZS1iYWNrZ3JvdW5kLWNvbG9yLCBoc2woMjMwZGVnLCA3JSwgMTclKSk7LS1icy1zaDogdmFyKC0tdHAtYmFzZS1zaGFkb3ctY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4yKSk7LS1idG4tYmc6IHZhcigtLXRwLWJ1dHRvbi1iYWNrZ3JvdW5kLWNvbG9yLCBoc2woMjMwZGVnLCA3JSwgNzAlKSk7LS1idG4tYmctYTogdmFyKC0tdHAtYnV0dG9uLWJhY2tncm91bmQtY29sb3ItYWN0aXZlLCAjZDZkN2RiKTstLWJ0bi1iZy1mOiB2YXIoLS10cC1idXR0b24tYmFja2dyb3VuZC1jb2xvci1mb2N1cywgI2M4Y2FkMCk7LS1idG4tYmctaDogdmFyKC0tdHAtYnV0dG9uLWJhY2tncm91bmQtY29sb3ItaG92ZXIsICNiYmJjYzQpOy0tYnRuLWZnOiB2YXIoLS10cC1idXR0b24tZm9yZWdyb3VuZC1jb2xvciwgaHNsKDIzMGRlZywgNyUsIDE3JSkpOy0tY250LWJnOiB2YXIoLS10cC1jb250YWluZXItYmFja2dyb3VuZC1jb2xvciwgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjEpKTstLWNudC1iZy1hOiB2YXIoLS10cC1jb250YWluZXItYmFja2dyb3VuZC1jb2xvci1hY3RpdmUsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC4yNSkpOy0tY250LWJnLWY6IHZhcigtLXRwLWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yLWZvY3VzLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuMikpOy0tY250LWJnLWg6IHZhcigtLXRwLWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yLWhvdmVyLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuMTUpKTstLWNudC1mZzogdmFyKC0tdHAtY29udGFpbmVyLWZvcmVncm91bmQtY29sb3IsIGhzbCgyMzBkZWcsIDclLCA3NSUpKTstLWluLWJnOiB2YXIoLS10cC1pbnB1dC1iYWNrZ3JvdW5kLWNvbG9yLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuMSkpOy0taW4tYmctYTogdmFyKC0tdHAtaW5wdXQtYmFja2dyb3VuZC1jb2xvci1hY3RpdmUsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC4yNSkpOy0taW4tYmctZjogdmFyKC0tdHAtaW5wdXQtYmFja2dyb3VuZC1jb2xvci1mb2N1cywgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjIpKTstLWluLWJnLWg6IHZhcigtLXRwLWlucHV0LWJhY2tncm91bmQtY29sb3ItaG92ZXIsIHJnYmEoMTg3LCAxODgsIDE5NiwgMC4xNSkpOy0taW4tZmc6IHZhcigtLXRwLWlucHV0LWZvcmVncm91bmQtY29sb3IsIGhzbCgyMzBkZWcsIDclLCA3NSUpKTstLWxibC1mZzogdmFyKC0tdHAtbGFiZWwtZm9yZWdyb3VuZC1jb2xvciwgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjcpKTstLW1vLWJnOiB2YXIoLS10cC1tb25pdG9yLWJhY2tncm91bmQtY29sb3IsIHJnYmEoMCwgMCwgMCwgMC4yKSk7LS1tby1mZzogdmFyKC0tdHAtbW9uaXRvci1mb3JlZ3JvdW5kLWNvbG9yLCByZ2JhKDE4NywgMTg4LCAxOTYsIDAuNykpOy0tZ3J2LWZnOiB2YXIoLS10cC1ncm9vdmUtZm9yZWdyb3VuZC1jb2xvciwgcmdiYSgxODcsIDE4OCwgMTk2LCAwLjEpKX0udHAtcm90dl9jPi50cC1jbnR2LnRwLXYtbHN0LC50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWNudHYudHAtdi1sc3QsLnRwLWZsZHZfYz4udHAtY250di50cC12LWxzdHttYXJnaW4tYm90dG9tOmNhbGMoLTEqdmFyKC0tY250LXYtcCkpfS50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1sc3QgLnRwLWZsZHZfYywudHAtdGFidl9jIC50cC1icmt2Pi50cC1mbGR2LnRwLXYtbHN0IC50cC1mbGR2X2MsLnRwLWZsZHZfYz4udHAtZmxkdi50cC12LWxzdCAudHAtZmxkdl9je2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0udHAtcm90dl9jPi50cC1mbGR2LnRwLXYtbHN0IC50cC1mbGR2X2IsLnRwLXRhYnZfYyAudHAtYnJrdj4udHAtZmxkdi50cC12LWxzdCAudHAtZmxkdl9iLC50cC1mbGR2X2M+LnRwLWZsZHYudHAtdi1sc3QgLnRwLWZsZHZfYntib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LnRwLXJvdHZfYz4qOm5vdCgudHAtdi1mc3QpLC50cC10YWJ2X2MgLnRwLWJya3Y+Kjpub3QoLnRwLXYtZnN0KSwudHAtZmxkdl9jPio6bm90KC50cC12LWZzdCl7bWFyZ2luLXRvcDp2YXIoLS1ibGQtcyl9LnRwLXJvdHZfYz4udHAtc3Bydjpub3QoLnRwLXYtZnN0KSwudHAtdGFidl9jIC50cC1icmt2Pi50cC1zcHJ2Om5vdCgudHAtdi1mc3QpLC50cC1mbGR2X2M+LnRwLXNwcnY6bm90KC50cC12LWZzdCksLnRwLXJvdHZfYz4udHAtY250djpub3QoLnRwLXYtZnN0KSwudHAtdGFidl9jIC50cC1icmt2Pi50cC1jbnR2Om5vdCgudHAtdi1mc3QpLC50cC1mbGR2X2M+LnRwLWNudHY6bm90KC50cC12LWZzdCl7bWFyZ2luLXRvcDp2YXIoLS1jbnQtdi1wKX0udHAtcm90dl9jPi50cC1zcHJ2Kyo6bm90KC50cC12LWhpZGRlbiksLnRwLXRhYnZfYyAudHAtYnJrdj4udHAtc3BydisqOm5vdCgudHAtdi1oaWRkZW4pLC50cC1mbGR2X2M+LnRwLXNwcnYrKjpub3QoLnRwLXYtaGlkZGVuKSwudHAtcm90dl9jPi50cC1jbnR2Kyo6bm90KC50cC12LWhpZGRlbiksLnRwLXRhYnZfYyAudHAtYnJrdj4udHAtY250disqOm5vdCgudHAtdi1oaWRkZW4pLC50cC1mbGR2X2M+LnRwLWNudHYrKjpub3QoLnRwLXYtaGlkZGVuKXttYXJnaW4tdG9wOnZhcigtLWNudC12LXApfS50cC1yb3R2X2M+LnRwLXNwcnY6bm90KC50cC12LWhpZGRlbikrLnRwLXNwcnYsLnRwLXRhYnZfYyAudHAtYnJrdj4udHAtc3Bydjpub3QoLnRwLXYtaGlkZGVuKSsudHAtc3BydiwudHAtZmxkdl9jPi50cC1zcHJ2Om5vdCgudHAtdi1oaWRkZW4pKy50cC1zcHJ2LC50cC1yb3R2X2M+LnRwLWNudHY6bm90KC50cC12LWhpZGRlbikrLnRwLWNudHYsLnRwLXRhYnZfYyAudHAtYnJrdj4udHAtY250djpub3QoLnRwLXYtaGlkZGVuKSsudHAtY250diwudHAtZmxkdl9jPi50cC1jbnR2Om5vdCgudHAtdi1oaWRkZW4pKy50cC1jbnR2e21hcmdpbi10b3A6MH0udHAtdGFidl9jIC50cC1icmt2Pi50cC1jbnR2LC50cC1mbGR2X2M+LnRwLWNudHZ7bWFyZ2luLWxlZnQ6NHB4fS50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWZsZHY+LnRwLWZsZHZfYiwudHAtZmxkdl9jPi50cC1mbGR2Pi50cC1mbGR2X2J7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1lbG0tYnIpO2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tZWxtLWJyKX0udHAtdGFidl9jIC50cC1icmt2Pi50cC1mbGR2LnRwLWZsZHYtZXhwYW5kZWQ+LnRwLWZsZHZfYiwudHAtZmxkdl9jPi50cC1mbGR2LnRwLWZsZHYtZXhwYW5kZWQ+LnRwLWZsZHZfYntib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjB9LnRwLXRhYnZfYyAudHAtYnJrdiAudHAtZmxkdj4udHAtZmxkdl9jLC50cC1mbGR2X2MgLnRwLWZsZHY+LnRwLWZsZHZfY3tib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWVsbS1icil9LnRwLXRhYnZfYyAudHAtYnJrdj4udHAtdGFidj4udHAtdGFidl9pLC50cC1mbGR2X2M+LnRwLXRhYnY+LnRwLXRhYnZfaXtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWVsbS1icil9LnRwLXRhYnZfYyAudHAtYnJrdiAudHAtdGFidj4udHAtdGFidl9jLC50cC1mbGR2X2MgLnRwLXRhYnY+LnRwLXRhYnZfY3tib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWVsbS1icil9LnRwLXJvdHZfYiwudHAtZmxkdl9ie2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnKTtjb2xvcjp2YXIoLS1jbnQtZmcpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSArIDRweCk7bGluZS1oZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KTtvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1sZWZ0OnZhcigtLWNudC1oLXApO3BhZGRpbmctcmlnaHQ6Y2FsYyg0cHggKyB2YXIoLS1ibGQtdXMpICsgdmFyKC0tY250LWgtcCkpO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246bGVmdDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDt3aWR0aDoxMDAlO3RyYW5zaXRpb246Ym9yZGVyLXJhZGl1cyAuMnMgZWFzZS1pbi1vdXQgLjJzfS50cC1yb3R2X2I6aG92ZXIsLnRwLWZsZHZfYjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZy1oKX0udHAtcm90dl9iOmZvY3VzLC50cC1mbGR2X2I6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmctZil9LnRwLXJvdHZfYjphY3RpdmUsLnRwLWZsZHZfYjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmctYSl9LnRwLXJvdHZfYjpkaXNhYmxlZCwudHAtZmxkdl9iOmRpc2FibGVke29wYWNpdHk6LjV9LnRwLXJvdHZfbSwudHAtZmxkdl9te2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGxlZnQsIHZhcigtLWNudC1mZyksIHZhcigtLWNudC1mZykgMnB4LCB0cmFuc3BhcmVudCAycHgsIHRyYW5zcGFyZW50IDRweCwgdmFyKC0tY250LWZnKSA0cHgpO2JvcmRlci1yYWRpdXM6MnB4O2JvdHRvbTowO2NvbnRlbnQ6XCJcIjtkaXNwbGF5OmJsb2NrO2hlaWdodDo2cHg7cmlnaHQ6Y2FsYyh2YXIoLS1jbnQtaC1wKSArICh2YXIoLS1ibGQtdXMpICsgNHB4IC0gNnB4KS8yIC0gMnB4KTttYXJnaW46YXV0bztvcGFjaXR5Oi41O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dDt3aWR0aDo2cHh9LnRwLXJvdHYudHAtcm90di1leHBhbmRlZCAudHAtcm90dl9tLC50cC1mbGR2LnRwLWZsZHYtZXhwYW5kZWQ+LnRwLWZsZHZfYj4udHAtZmxkdl9te3RyYW5zZm9ybTpub25lfS50cC1yb3R2X2MsLnRwLWZsZHZfY3tib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjA7b3BhY2l0eTowO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWJvdHRvbTowO3BhZGRpbmctdG9wOjA7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNpdGlvbjpoZWlnaHQgLjJzIGVhc2UtaW4tb3V0LG9wYWNpdHkgLjJzIGxpbmVhcixwYWRkaW5nIC4ycyBlYXNlLWluLW91dH0udHAtcm90di50cC1yb3R2LWNwbDpub3QoLnRwLXJvdHYtZXhwYW5kZWQpIC50cC1yb3R2X2MsLnRwLWZsZHYudHAtZmxkdi1jcGw6bm90KC50cC1mbGR2LWV4cGFuZGVkKT4udHAtZmxkdl9je2Rpc3BsYXk6bm9uZX0udHAtcm90di50cC1yb3R2LWV4cGFuZGVkIC50cC1yb3R2X2MsLnRwLWZsZHYudHAtZmxkdi1leHBhbmRlZD4udHAtZmxkdl9je29wYWNpdHk6MTtwYWRkaW5nLWJvdHRvbTp2YXIoLS1jbnQtdi1wKTtwYWRkaW5nLXRvcDp2YXIoLS1jbnQtdi1wKTt0cmFuc2Zvcm06bm9uZTtvdmVyZmxvdzp2aXNpYmxlO3RyYW5zaXRpb246aGVpZ2h0IC4ycyBlYXNlLWluLW91dCxvcGFjaXR5IC4ycyBsaW5lYXIgLjJzLHBhZGRpbmcgLjJzIGVhc2UtaW4tb3V0fS50cC1sc3R2LC50cC1jb2x0eHR2X217cG9zaXRpb246cmVsYXRpdmV9LnRwLWxzdHZfc3twYWRkaW5nOjAgMjBweCAwIDRweDt3aWR0aDoxMDAlfS50cC1sc3R2X20sLnRwLWNvbHR4dHZfbW17Ym90dG9tOjA7bWFyZ2luOmF1dG87cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoycHg7dG9wOjB9LnRwLWxzdHZfbSBzdmcsLnRwLWNvbHR4dHZfbW0gc3Zne2JvdHRvbTowO2hlaWdodDoxNnB4O21hcmdpbjphdXRvO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7d2lkdGg6MTZweH0udHAtbHN0dl9tIHN2ZyBwYXRoLC50cC1jb2x0eHR2X21tIHN2ZyBwYXRoe2ZpbGw6Y3VycmVudENvbG9yfS50cC1wbmR0eHR2LC50cC1jb2x0eHR2X3d7ZGlzcGxheTpmbGV4fS50cC1wbmR0eHR2X2EsLnRwLWNvbHR4dHZfY3t3aWR0aDoxMDAlfS50cC1wbmR0eHR2X2ErLnRwLXBuZHR4dHZfYSwudHAtY29sdHh0dl9jKy50cC1wbmR0eHR2X2EsLnRwLXBuZHR4dHZfYSsudHAtY29sdHh0dl9jLC50cC1jb2x0eHR2X2MrLnRwLWNvbHR4dHZfY3ttYXJnaW4tbGVmdDoycHh9LnRwLWJ0bnZfYnt3aWR0aDoxMDAlfS50cC1idG52X3R7dGV4dC1hbGlnbjpjZW50ZXJ9LnRwLWNrYnZfbHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1ja2J2X2l7bGVmdDowO29wYWNpdHk6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH0udHAtY2tidl93e2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmcpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmJsb2NrO2hlaWdodDp2YXIoLS1ibGQtdXMpO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOnZhcigtLWJsZC11cyl9LnRwLWNrYnZfdyBzdmd7Ym90dG9tOjA7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTZweDtsZWZ0OjA7bWFyZ2luOmF1dG87b3BhY2l0eTowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7d2lkdGg6MTZweH0udHAtY2tidl93IHN2ZyBwYXRoe2ZpbGw6bm9uZTtzdHJva2U6dmFyKC0taW4tZmcpO3N0cm9rZS13aWR0aDoyfS50cC1ja2J2X2k6aG92ZXIrLnRwLWNrYnZfd3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWgpfS50cC1ja2J2X2k6Zm9jdXMrLnRwLWNrYnZfd3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWYpfS50cC1ja2J2X2k6YWN0aXZlKy50cC1ja2J2X3d7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZy1hKX0udHAtY2tidl9pOmNoZWNrZWQrLnRwLWNrYnZfdyBzdmd7b3BhY2l0eToxfS50cC1ja2J2LnRwLXYtZGlzYWJsZWQgLnRwLWNrYnZfd3tvcGFjaXR5Oi41fS50cC1jb2x2e3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1jb2x2X2h7ZGlzcGxheTpmbGV4fS50cC1jb2x2X3N7ZmxleC1ncm93OjA7ZmxleC1zaHJpbms6MDt3aWR0aDp2YXIoLS1ibGQtdXMpfS50cC1jb2x2X3R7ZmxleDoxO21hcmdpbi1sZWZ0OjRweH0udHAtY29sdl9we2hlaWdodDowO21hcmdpbi10b3A6MDtvcGFjaXR5OjA7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zaXRpb246aGVpZ2h0IC4ycyBlYXNlLWluLW91dCxvcGFjaXR5IC4ycyBsaW5lYXIsbWFyZ2luIC4ycyBlYXNlLWluLW91dH0udHAtY29sdi50cC1jb2x2LWNwbCAudHAtY29sdl9we292ZXJmbG93OnZpc2libGV9LnRwLWNvbHYudHAtY29sdi1leHBhbmRlZCAudHAtY29sdl9we21hcmdpbi10b3A6dmFyKC0tYmxkLXMpO29wYWNpdHk6MX0udHAtY29sdiAudHAtcG9wdntsZWZ0OmNhbGMoLTEqdmFyKC0tY250LWgtcCkpO3JpZ2h0OmNhbGMoLTEqdmFyKC0tY250LWgtcCkpO3RvcDp2YXIoLS1ibGQtdXMpfS50cC1jb2xwdl9oLC50cC1jb2xwdl9hcHttYXJnaW4tbGVmdDo2cHg7bWFyZ2luLXJpZ2h0OjZweH0udHAtY29scHZfaHttYXJnaW4tdG9wOnZhcigtLWJsZC1zKX0udHAtY29scHZfcmdie2Rpc3BsYXk6ZmxleDttYXJnaW4tdG9wOnZhcigtLWJsZC1zKTt3aWR0aDoxMDAlfS50cC1jb2xwdl9he2Rpc3BsYXk6ZmxleDttYXJnaW4tdG9wOnZhcigtLWNudC12LXApO3BhZGRpbmctdG9wOmNhbGModmFyKC0tY250LXYtcCkgKyAycHgpO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1jb2xwdl9hOmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWdydi1mZyk7Y29udGVudDpcIlwiO2hlaWdodDoycHg7bGVmdDpjYWxjKC0xKnZhcigtLWNudC1oLXApKTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDpjYWxjKC0xKnZhcigtLWNudC1oLXApKTt0b3A6MH0udHAtY29scHZfYXB7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtmbGV4OjN9LnRwLWNvbHB2X2F0e2ZsZXg6MTttYXJnaW4tbGVmdDo0cHh9LnRwLXN2cHZ7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO291dGxpbmU6bm9uZTtvdmVyZmxvdzpoaWRkZW47cG9zaXRpb246cmVsYXRpdmV9LnRwLXN2cHZfY3tjdXJzb3I6Y3Jvc3NoYWlyO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSo0KTt3aWR0aDoxMDAlfS50cC1zdnB2X217Ym9yZGVyLXJhZGl1czoxMDAlO2JvcmRlcjpyZ2JhKDI1NSwyNTUsMjU1LC43NSkgc29saWQgMnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtmaWx0ZXI6ZHJvcC1zaGFkb3coMCAwIDFweCByZ2JhKDAsIDAsIDAsIDAuMykpO2hlaWdodDoxMnB4O21hcmdpbi1sZWZ0Oi02cHg7bWFyZ2luLXRvcDotNnB4O3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6MTJweH0udHAtc3Zwdjpmb2N1cyAudHAtc3Zwdl9te2JvcmRlci1jb2xvcjojZmZmfS50cC1ocGx2e2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1ibGQtdXMpO291dGxpbmU6bm9uZTtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtaHBsdl9je2JhY2tncm91bmQtaW1hZ2U6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRUFBQUFBQkNBWUFBQUJ1YmFnWEFBQUFRMGxFUVZRb1UyUDh6OER3bjBHQ2dRRURpMk9LL1JCZ1lIakJnSXBmb3ZGaDhqOFlCSWd6RkdReHVxRWdQaGFET1Q1Z09oUGtkQ3hPWmVCZytJREZaWmlHQWdDYVNTTVl0Y1JITGdBQUFBQkpSVTVFcmtKZ2dnPT0pO2JhY2tncm91bmQtcG9zaXRpb246bGVmdCB0b3A7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtc2l6ZToxMDAlIDEwMCU7Ym9yZGVyLXJhZGl1czoycHg7ZGlzcGxheTpibG9jaztoZWlnaHQ6NHB4O2xlZnQ6MDttYXJnaW4tdG9wOi0ycHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt3aWR0aDoxMDAlfS50cC1ocGx2X217Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2JvcmRlcjpyZ2JhKDI1NSwyNTUsMjU1LC43NSkgc29saWQgMnB4O2JveC1zaGFkb3c6MCAwIDJweCByZ2JhKDAsMCwwLC4xKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjEycHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTZweDttYXJnaW4tdG9wOi02cHg7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOjEycHh9LnRwLWhwbHY6Zm9jdXMgLnRwLWhwbHZfbXtib3JkZXItY29sb3I6I2ZmZn0udHAtYXBsdntjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6dmFyKC0tYmxkLXVzKTtvdXRsaW5lOm5vbmU7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6MTAwJX0udHAtYXBsdl9ie2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byB0b3AgcmlnaHQsICNkZGQgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDc1JSwgI2RkZCA3NSUpLGxpbmVhci1ncmFkaWVudCh0byB0b3AgcmlnaHQsICNkZGQgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDc1JSwgI2RkZCA3NSUpO2JhY2tncm91bmQtc2l6ZTo0cHggNHB4O2JhY2tncm91bmQtcG9zaXRpb246MCAwLDJweCAycHg7Ym9yZGVyLXJhZGl1czoycHg7ZGlzcGxheTpibG9jaztoZWlnaHQ6NHB4O2xlZnQ6MDttYXJnaW4tdG9wOi0ycHg7b3ZlcmZsb3c6aGlkZGVuO3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7d2lkdGg6MTAwJX0udHAtYXBsdl9je2JvdHRvbTowO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfS50cC1hcGx2X217YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHRvcCByaWdodCwgI2RkZCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZGRkIDc1JSksbGluZWFyLWdyYWRpZW50KHRvIHRvcCByaWdodCwgI2RkZCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZGRkIDc1JSk7YmFja2dyb3VuZC1zaXplOjEycHggMTJweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMCw2cHggNnB4O2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtib3gtc2hhZG93OjAgMCAycHggcmdiYSgwLDAsMCwuMSk7aGVpZ2h0OjEycHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTZweDttYXJnaW4tdG9wOi02cHg7b3ZlcmZsb3c6aGlkZGVuO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt3aWR0aDoxMnB4fS50cC1hcGx2X3B7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2JvcmRlcjpyZ2JhKDI1NSwyNTUsMjU1LC43NSkgc29saWQgMnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0udHAtYXBsdjpmb2N1cyAudHAtYXBsdl9we2JvcmRlci1jb2xvcjojZmZmfS50cC1jb2xzd3Z7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHRvcCByaWdodCwgI2RkZCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZGRkIDc1JSksbGluZWFyLWdyYWRpZW50KHRvIHRvcCByaWdodCwgI2RkZCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZGRkIDc1JSk7YmFja2dyb3VuZC1zaXplOjEwcHggMTBweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMCw1cHggNXB4O2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtvdmVyZmxvdzpoaWRkZW59LnRwLWNvbHN3di50cC12LWRpc2FibGVke29wYWNpdHk6LjV9LnRwLWNvbHN3dl9zd3tib3JkZXItcmFkaXVzOjB9LnRwLWNvbHN3dl9iey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMCwwLDAsMCk7Ym9yZGVyLXdpZHRoOjA7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpibG9jaztoZWlnaHQ6dmFyKC0tYmxkLXVzKTtsZWZ0OjA7bWFyZ2luOjA7b3V0bGluZTpub25lO3BhZGRpbmc6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDp2YXIoLS1ibGQtdXMpfS50cC1jb2xzd3ZfYjpmb2N1czo6YWZ0ZXJ7Ym9yZGVyOnJnYmEoMjU1LDI1NSwyNTUsLjc1KSBzb2xpZCAycHg7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2JvdHRvbTowO2NvbnRlbnQ6XCJcIjtkaXNwbGF5OmJsb2NrO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfS50cC1jb2x0eHR2e2Rpc3BsYXk6ZmxleDt3aWR0aDoxMDAlfS50cC1jb2x0eHR2X217bWFyZ2luLXJpZ2h0OjRweH0udHAtY29sdHh0dl9tc3tib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Y29sb3I6dmFyKC0tbGJsLWZnKTtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6dmFyKC0tYmxkLXVzKTtsaW5lLWhlaWdodDp2YXIoLS1ibGQtdXMpO3BhZGRpbmc6MCAxOHB4IDAgNHB4fS50cC1jb2x0eHR2X21zOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctaCl9LnRwLWNvbHR4dHZfbXM6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZy1mKX0udHAtY29sdHh0dl9tczphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZy1hKX0udHAtY29sdHh0dl9tbXtjb2xvcjp2YXIoLS1sYmwtZmcpfS50cC1jb2x0eHR2X3d7ZmxleDoxfS50cC1kZnd2e3Bvc2l0aW9uOmFic29sdXRlO3RvcDo4cHg7cmlnaHQ6OHB4O3dpZHRoOjI1NnB4fS50cC1mbGR2LnRwLWZsZHYtbm90IC50cC1mbGR2X2J7ZGlzcGxheTpub25lfS50cC1mbGR2X3R7cGFkZGluZy1sZWZ0OjRweH0udHAtZmxkdl9je2JvcmRlci1sZWZ0OnZhcigtLWNudC1iZykgc29saWQgNHB4fS50cC1mbGR2X2I6aG92ZXIrLnRwLWZsZHZfY3tib3JkZXItbGVmdC1jb2xvcjp2YXIoLS1jbnQtYmctaCl9LnRwLWZsZHZfYjpmb2N1cysudHAtZmxkdl9je2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWNudC1iZy1mKX0udHAtZmxkdl9iOmFjdGl2ZSsudHAtZmxkdl9je2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWNudC1iZy1hKX0udHAtZ3Jsdntwb3NpdGlvbjpyZWxhdGl2ZX0udHAtZ3Jsdl9ne2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSozKX0udHAtZ3Jsdl9nIHBvbHlsaW5le2ZpbGw6bm9uZTtzdHJva2U6dmFyKC0tbW8tZmcpO3N0cm9rZS1saW5lam9pbjpyb3VuZH0udHAtZ3Jsdl90e21hcmdpbi10b3A6LTRweDt0cmFuc2l0aW9uOmxlZnQgLjA1cyx0b3AgLjA1czt2aXNpYmlsaXR5OmhpZGRlbn0udHAtZ3Jsdl90LnRwLWdybHZfdC1he3Zpc2liaWxpdHk6dmlzaWJsZX0udHAtZ3Jsdl90LnRwLWdybHZfdC1pbnt0cmFuc2l0aW9uOm5vbmV9LnRwLWdybHYudHAtdi1kaXNhYmxlZCAudHAtZ3Jsdl9ne29wYWNpdHk6LjV9LnRwLWdybHYgLnRwLXR0dntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vLWZnKX0udHAtZ3JsdiAudHAtdHR2OjpiZWZvcmV7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1tby1mZyl9LnRwLWxibHZ7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtsaW5lLWhlaWdodDoxLjM7cGFkZGluZy1sZWZ0OnZhcigtLWNudC1oLXApO3BhZGRpbmctcmlnaHQ6dmFyKC0tY250LWgtcCl9LnRwLWxibHYudHAtbGJsdi1ub2x7ZGlzcGxheTpibG9ja30udHAtbGJsdl9se2NvbG9yOnZhcigtLWxibC1mZyk7ZmxleDoxOy13ZWJraXQtaHlwaGVuczphdXRvO2h5cGhlbnM6YXV0bztvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1sZWZ0OjRweDtwYWRkaW5nLXJpZ2h0OjE2cHh9LnRwLWxibHYudHAtdi1kaXNhYmxlZCAudHAtbGJsdl9se29wYWNpdHk6LjV9LnRwLWxibHYudHAtbGJsdi1ub2wgLnRwLWxibHZfbHtkaXNwbGF5Om5vbmV9LnRwLWxibHZfdnthbGlnbi1zZWxmOmZsZXgtc3RhcnQ7ZmxleC1ncm93OjA7ZmxleC1zaHJpbms6MDt3aWR0aDoxNjBweH0udHAtbGJsdi50cC1sYmx2LW5vbCAudHAtbGJsdl92e3dpZHRoOjEwMCV9LnRwLWxzdHZfc3twYWRkaW5nOjAgMjBweCAwIDRweDt3aWR0aDoxMDAlfS50cC1sc3R2X217Y29sb3I6dmFyKC0tYnRuLWZnKX0udHAtc2dsdl9pe3BhZGRpbmc6MCA0cHh9LnRwLXNnbHYudHAtdi1kaXNhYmxlZCAudHAtc2dsdl9pe29wYWNpdHk6LjV9LnRwLW1sbHZfaXtkaXNwbGF5OmJsb2NrO2hlaWdodDpjYWxjKHZhcigtLWJsZC11cykqMyk7bGluZS1oZWlnaHQ6dmFyKC0tYmxkLXVzKTtwYWRkaW5nOjAgNHB4O3Jlc2l6ZTpub25lO3doaXRlLXNwYWNlOnByZX0udHAtbWxsdi50cC12LWRpc2FibGVkIC50cC1tbGx2X2l7b3BhY2l0eTouNX0udHAtcDJkdntwb3NpdGlvbjpyZWxhdGl2ZX0udHAtcDJkdl9oe2Rpc3BsYXk6ZmxleH0udHAtcDJkdl9ie2hlaWdodDp2YXIoLS1ibGQtdXMpO21hcmdpbi1yaWdodDo0cHg7cG9zaXRpb246cmVsYXRpdmU7d2lkdGg6dmFyKC0tYmxkLXVzKX0udHAtcDJkdl9iIHN2Z3tkaXNwbGF5OmJsb2NrO2hlaWdodDoxNnB4O2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi04cHg7bWFyZ2luLXRvcDotOHB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDo1MCU7d2lkdGg6MTZweH0udHAtcDJkdl9iIHN2ZyBwYXRoe3N0cm9rZTpjdXJyZW50Q29sb3I7c3Ryb2tlLXdpZHRoOjJ9LnRwLXAyZHZfYiBzdmcgY2lyY2xle2ZpbGw6Y3VycmVudENvbG9yfS50cC1wMmR2X3R7ZmxleDoxfS50cC1wMmR2X3B7aGVpZ2h0OjA7bWFyZ2luLXRvcDowO29wYWNpdHk6MDtvdmVyZmxvdzpoaWRkZW47dHJhbnNpdGlvbjpoZWlnaHQgLjJzIGVhc2UtaW4tb3V0LG9wYWNpdHkgLjJzIGxpbmVhcixtYXJnaW4gLjJzIGVhc2UtaW4tb3V0fS50cC1wMmR2LnRwLXAyZHYtZXhwYW5kZWQgLnRwLXAyZHZfcHttYXJnaW4tdG9wOnZhcigtLWJsZC1zKTtvcGFjaXR5OjF9LnRwLXAyZHYgLnRwLXBvcHZ7bGVmdDpjYWxjKC0xKnZhcigtLWNudC1oLXApKTtyaWdodDpjYWxjKC0xKnZhcigtLWNudC1oLXApKTt0b3A6dmFyKC0tYmxkLXVzKX0udHAtcDJkcHZ7cGFkZGluZy1sZWZ0OmNhbGModmFyKC0tYmxkLXVzKSArIDRweCl9LnRwLXAyZHB2X3B7Y3Vyc29yOmNyb3NzaGFpcjtoZWlnaHQ6MDtvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1ib3R0b206MTAwJTtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtcDJkcHZfZ3tkaXNwbGF5OmJsb2NrO2hlaWdodDoxMDAlO2xlZnQ6MDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3dpZHRoOjEwMCV9LnRwLXAyZHB2X2F4e29wYWNpdHk6LjE7c3Ryb2tlOnZhcigtLWluLWZnKTtzdHJva2UtZGFzaGFycmF5OjF9LnRwLXAyZHB2X2x7b3BhY2l0eTouNTtzdHJva2U6dmFyKC0taW4tZmcpO3N0cm9rZS1kYXNoYXJyYXk6MX0udHAtcDJkcHZfbXtib3JkZXI6dmFyKC0taW4tZmcpIHNvbGlkIDFweDtib3JkZXItcmFkaXVzOjUwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjRweDttYXJnaW4tbGVmdDotMnB4O21hcmdpbi10b3A6LTJweDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDo0cHh9LnRwLXAyZHB2X3A6Zm9jdXMgLnRwLXAyZHB2X217YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1mZyk7Ym9yZGVyLXdpZHRoOjB9LnRwLXBvcHZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1iZyk7Ym9yZGVyLXJhZGl1czo2cHg7Ym94LXNoYWRvdzowIDJweCA0cHggdmFyKC0tYnMtc2gpO2Rpc3BsYXk6bm9uZTttYXgtd2lkdGg6MTY4cHg7cGFkZGluZzp2YXIoLS1jbnQtdi1wKSB2YXIoLS1jbnQtaC1wKTtwb3NpdGlvbjphYnNvbHV0ZTt2aXNpYmlsaXR5OmhpZGRlbjt6LWluZGV4OjEwMDB9LnRwLXBvcHYudHAtcG9wdi12e2Rpc3BsYXk6YmxvY2s7dmlzaWJpbGl0eTp2aXNpYmxlfS50cC1zcHJ2X3J7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1ncnYtZmcpO2JvcmRlci13aWR0aDowO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjJweDttYXJnaW46MDt3aWR0aDoxMDAlfS50cC1zbGR2LnRwLXYtZGlzYWJsZWR7b3BhY2l0eTouNX0udHAtc2xkdl90e2JveC1zaXppbmc6Ym9yZGVyLWJveDtjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6dmFyKC0tYmxkLXVzKTttYXJnaW46MCA2cHg7b3V0bGluZTpub25lO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1zbGR2X3Q6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnKTtib3JkZXItcmFkaXVzOjFweDtib3R0b206MDtjb250ZW50OlwiXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MnB4O2xlZnQ6MDttYXJnaW46YXV0bztwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowO3RvcDowfS50cC1zbGR2X2t7aGVpZ2h0OjEwMCU7bGVmdDowO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowfS50cC1zbGR2X2s6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWZnKTtib3JkZXItcmFkaXVzOjFweDtib3R0b206MDtjb250ZW50OlwiXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MnB4O2xlZnQ6MDttYXJnaW4tYm90dG9tOmF1dG87bWFyZ2luLXRvcDphdXRvO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjB9LnRwLXNsZHZfazo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1idG4tYmcpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtib3R0b206MDtjb250ZW50OlwiXCI7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTJweDttYXJnaW4tYm90dG9tOmF1dG87bWFyZ2luLXRvcDphdXRvO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0Oi02cHg7dG9wOjA7d2lkdGg6MTJweH0udHAtc2xkdl90OmhvdmVyIC50cC1zbGR2X2s6OmFmdGVye2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnRuLWJnLWgpfS50cC1zbGR2X3Q6Zm9jdXMgLnRwLXNsZHZfazo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1idG4tYmctZil9LnRwLXNsZHZfdDphY3RpdmUgLnRwLXNsZHZfazo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1idG4tYmctYSl9LnRwLXNsZHR4dHZ7ZGlzcGxheTpmbGV4fS50cC1zbGR0eHR2X3N7ZmxleDoyfS50cC1zbGR0eHR2X3R7ZmxleDoxO21hcmdpbi1sZWZ0OjRweH0udHAtdGFidi50cC12LWRpc2FibGVke29wYWNpdHk6LjV9LnRwLXRhYnZfaXthbGlnbi1pdGVtczpmbGV4LWVuZDtkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVufS50cC10YWJ2LnRwLXRhYnYtbm9wIC50cC10YWJ2X2l7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSArIDRweCk7cG9zaXRpb246cmVsYXRpdmV9LnRwLXRhYnYudHAtdGFidi1ub3AgLnRwLXRhYnZfaTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnKTtib3R0b206MDtjb250ZW50OlwiXCI7aGVpZ2h0OjJweDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MH0udHAtdGFidl9je2JvcmRlci1sZWZ0OnZhcigtLWNudC1iZykgc29saWQgNHB4O3BhZGRpbmctYm90dG9tOnZhcigtLWNudC12LXApO3BhZGRpbmctdG9wOnZhcigtLWNudC12LXApfS50cC10Yml2e2ZsZXg6MTttaW4td2lkdGg6MDtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtdGJpdisudHAtdGJpdnttYXJnaW4tbGVmdDoycHh9LnRwLXRiaXYrLnRwLXRiaXY6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZyk7Ym90dG9tOjA7Y29udGVudDpcIlwiO2hlaWdodDoycHg7bGVmdDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO3dpZHRoOjJweH0udHAtdGJpdl9ie2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnKTtkaXNwbGF5OmJsb2NrO3BhZGRpbmctbGVmdDpjYWxjKHZhcigtLWNudC1oLXApICsgNHB4KTtwYWRkaW5nLXJpZ2h0OmNhbGModmFyKC0tY250LWgtcCkgKyA0cHgpO3dpZHRoOjEwMCV9LnRwLXRiaXZfYjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZy1oKX0udHAtdGJpdl9iOmZvY3Vze2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnLWYpfS50cC10Yml2X2I6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnLWEpfS50cC10Yml2X2I6ZGlzYWJsZWR7b3BhY2l0eTouNX0udHAtdGJpdl90e2NvbG9yOnZhcigtLWNudC1mZyk7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSArIDRweCk7bGluZS1oZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KTtvcGFjaXR5Oi41O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS50cC10Yml2LnRwLXRiaXYtc2VsIC50cC10Yml2X3R7b3BhY2l0eToxfS50cC10eHR2e3Bvc2l0aW9uOnJlbGF0aXZlfS50cC10eHR2X2l7cGFkZGluZzowIDRweH0udHAtdHh0di50cC10eHR2LWZzdCAudHAtdHh0dl9pe2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0udHAtdHh0di50cC10eHR2LW1pZCAudHAtdHh0dl9pe2JvcmRlci1yYWRpdXM6MH0udHAtdHh0di50cC10eHR2LWxzdCAudHAtdHh0dl9pe2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjB9LnRwLXR4dHYudHAtdHh0di1udW0gLnRwLXR4dHZfaXt0ZXh0LWFsaWduOnJpZ2h0fS50cC10eHR2LnRwLXR4dHYtZHJnIC50cC10eHR2X2l7b3BhY2l0eTouM30udHAtdHh0dl9re2N1cnNvcjpwb2ludGVyO2hlaWdodDoxMDAlO2xlZnQ6LTNweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MDt3aWR0aDoxMnB4fS50cC10eHR2X2s6OmJlZm9yZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWZnKTtib3JkZXItcmFkaXVzOjFweDtib3R0b206MDtjb250ZW50OlwiXCI7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSAtIDRweCk7bGVmdDo1MCU7bWFyZ2luLWJvdHRvbTphdXRvO21hcmdpbi1sZWZ0Oi0xcHg7bWFyZ2luLXRvcDphdXRvO29wYWNpdHk6LjE7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7dHJhbnNpdGlvbjpib3JkZXItcmFkaXVzIC4xcyxoZWlnaHQgLjFzLHRyYW5zZm9ybSAuMXMsd2lkdGggLjFzO3dpZHRoOjJweH0udHAtdHh0dl9rOmhvdmVyOjpiZWZvcmUsLnRwLXR4dHYudHAtdHh0di1kcmcgLnRwLXR4dHZfazo6YmVmb3Jle29wYWNpdHk6MX0udHAtdHh0di50cC10eHR2LWRyZyAudHAtdHh0dl9rOjpiZWZvcmV7Ym9yZGVyLXJhZGl1czo1MCU7aGVpZ2h0OjRweDt0cmFuc2Zvcm06dHJhbnNsYXRlWCgtMXB4KTt3aWR0aDo0cHh9LnRwLXR4dHZfZ3tib3R0b206MDtkaXNwbGF5OmJsb2NrO2hlaWdodDo4cHg7bGVmdDo1MCU7bWFyZ2luOmF1dG87b3ZlcmZsb3c6dmlzaWJsZTtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3Zpc2liaWxpdHk6aGlkZGVuO3dpZHRoOjEwMCV9LnRwLXR4dHYudHAtdHh0di1kcmcgLnRwLXR4dHZfZ3t2aXNpYmlsaXR5OnZpc2libGV9LnRwLXR4dHZfZ2J7ZmlsbDpub25lO3N0cm9rZTp2YXIoLS1pbi1mZyk7c3Ryb2tlLWRhc2hhcnJheToxfS50cC10eHR2X2doe2ZpbGw6bm9uZTtzdHJva2U6dmFyKC0taW4tZmcpfS50cC10eHR2IC50cC10dHZ7bWFyZ2luLWxlZnQ6NnB4O3Zpc2liaWxpdHk6aGlkZGVufS50cC10eHR2LnRwLXR4dHYtZHJnIC50cC10dHZ7dmlzaWJpbGl0eTp2aXNpYmxlfS50cC10dHZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1mZyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2NvbG9yOnZhcigtLWJzLWJnKTtwYWRkaW5nOjJweCA0cHg7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIC0xMDAlKX0udHAtdHR2OjpiZWZvcmV7Ym9yZGVyLWNvbG9yOnZhcigtLWluLWZnKSByZ2JhKDAsMCwwLDApIHJnYmEoMCwwLDAsMCkgcmdiYSgwLDAsMCwwKTtib3JkZXItc3R5bGU6c29saWQ7Ym9yZGVyLXdpZHRoOjJweDtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29udGVudDpcIlwiO2ZvbnQtc2l6ZTouOWVtO2hlaWdodDo0cHg7bGVmdDo1MCU7bWFyZ2luLWxlZnQ6LTJweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MTAwJTt3aWR0aDo0cHh9LnRwLXJvdHZ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1icy1iZyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1icy1icik7Ym94LXNoYWRvdzowIDJweCA0cHggdmFyKC0tYnMtc2gpO2ZvbnQtZmFtaWx5OnZhcigtLWZvbnQtZmFtaWx5KTtmb250LXNpemU6MTFweDtmb250LXdlaWdodDo1MDA7bGluZS1oZWlnaHQ6MTt0ZXh0LWFsaWduOmxlZnR9LnRwLXJvdHZfYntib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icik7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1icy1icik7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYnIpO3BhZGRpbmctbGVmdDpjYWxjKDRweCArIHZhcigtLWJsZC11cykgKyB2YXIoLS1jbnQtaC1wKSk7dGV4dC1hbGlnbjpjZW50ZXJ9LnRwLXJvdHYudHAtcm90di1leHBhbmRlZCAudHAtcm90dl9ie2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS50cC1yb3R2LnRwLXJvdHYtbm90IC50cC1yb3R2X2J7ZGlzcGxheTpub25lfS50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1sc3Q+LnRwLWZsZHZfYywudHAtcm90dl9jPi50cC10YWJ2LnRwLXYtbHN0Pi50cC10YWJ2X2N7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1icy1icik7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYnIpfS50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1sc3Q6bm90KC50cC1mbGR2LWV4cGFuZGVkKT4udHAtZmxkdl9ie2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tYnMtYnIpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWJzLWJyKX0udHAtcm90dl9jIC50cC1mbGR2LnRwLXYtdmxzdDpub3QoLnRwLWZsZHYtZXhwYW5kZWQpPi50cC1mbGR2X2J7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYnIpfS50cC1yb3R2LnRwLXJvdHYtbm90IC50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1mc3R7bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNudC12LXApKX0udHAtcm90di50cC1yb3R2LW5vdCAudHAtcm90dl9jPi50cC1mbGR2LnRwLXYtZnN0Pi50cC1mbGR2X2J7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1icy1icik7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYnIpfS50cC1yb3R2LnRwLXJvdHYtbm90IC50cC1yb3R2X2M+LnRwLXRhYnYudHAtdi1mc3R7bWFyZ2luLXRvcDpjYWxjKC0xKnZhcigtLWNudC12LXApKX0udHAtcm90di50cC1yb3R2LW5vdCAudHAtcm90dl9jPi50cC10YWJ2LnRwLXYtZnN0Pi50cC10YWJ2X2l7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czp2YXIoLS1icy1icik7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYnIpfS50cC1yb3R2LnRwLXYtZGlzYWJsZWQsLnRwLXJvdHYgLnRwLXYtZGlzYWJsZWR7cG9pbnRlci1ldmVudHM6bm9uZX0udHAtcm90di50cC12LWhpZGRlbiwudHAtcm90diAudHAtdi1oaWRkZW57ZGlzcGxheTpub25lfScpO1xuICAgICAgICAgICAgdGhpcy5wb29sXy5nZXRBbGwoKS5mb3JFYWNoKChwbHVnaW4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtYmVkUGx1Z2luU3R5bGVfKHBsdWdpbik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmVnaXN0ZXJQbHVnaW4oe1xuICAgICAgICAgICAgICAgIHBsdWdpbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgU2xpZGVyQmxhZGVQbHVnaW4sXG4gICAgICAgICAgICAgICAgICAgIExpc3RCbGFkZVBsdWdpbixcbiAgICAgICAgICAgICAgICAgICAgVGFiQmxhZGVQbHVnaW4sXG4gICAgICAgICAgICAgICAgICAgIFRleHRCbGFkZVBsdWdpbixcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBWRVJTSU9OID0gbmV3IFNlbXZlcignMy4xLjEnKTtcblxuICAgIGV4cG9ydHMuQmxhZGVBcGkgPSBCbGFkZUFwaTtcbiAgICBleHBvcnRzLkJ1dHRvbkFwaSA9IEJ1dHRvbkFwaTtcbiAgICBleHBvcnRzLkZvbGRlckFwaSA9IEZvbGRlckFwaTtcbiAgICBleHBvcnRzLklucHV0QmluZGluZ0FwaSA9IElucHV0QmluZGluZ0FwaTtcbiAgICBleHBvcnRzLkxpc3RBcGkgPSBMaXN0QXBpO1xuICAgIGV4cG9ydHMuTW9uaXRvckJpbmRpbmdBcGkgPSBNb25pdG9yQmluZGluZ0FwaTtcbiAgICBleHBvcnRzLlBhbmUgPSBQYW5lO1xuICAgIGV4cG9ydHMuU2VwYXJhdG9yQXBpID0gU2VwYXJhdG9yQXBpO1xuICAgIGV4cG9ydHMuU2xpZGVyQXBpID0gU2xpZGVyQXBpO1xuICAgIGV4cG9ydHMuVGFiQXBpID0gVGFiQXBpO1xuICAgIGV4cG9ydHMuVGFiUGFnZUFwaSA9IFRhYlBhZ2VBcGk7XG4gICAgZXhwb3J0cy5UZXh0QXBpID0gVGV4dEFwaTtcbiAgICBleHBvcnRzLlRwQ2hhbmdlRXZlbnQgPSBUcENoYW5nZUV2ZW50O1xuICAgIGV4cG9ydHMuVkVSU0lPTiA9IFZFUlNJT047XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG59KSk7XG4iLCJcbmdsb2JhbC5DQU5WQVNfU0tFVENIX0RFRkFVTFRfU1RPUkFHRV9LRVkgPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiJdLCJtYXBwaW5ncyI6IkNBQUEsU0FBQUEsRUFBQUMsRUFBQUMsRUFBQUMsR0FBQSxTQUFBQyxFQUFBQyxFQUFBQyxHQUFBLElBQUFKLEVBQUFHLEdBQUEsS0FBQUosRUFBQUksR0FBQSxLQUFBRSxFQUFBLG1CQUFBQyxpQkFBQSxJQUFBRixHQUFBQyxFQUFBLE9BQUFBLEVBQUFGLEdBQUEsTUFBQUksRUFBQSxPQUFBQSxFQUFBSixHQUFBLE9BQUFLLEVBQUEsSUFBQUMsTUFBQSx1QkFBQU4sRUFBQSxXQUFBSyxFQUFBRSxLQUFBLG1CQUFBRixDQUFBLEtBQUFHLEVBQUFYLEVBQUFHLEdBQUEsQ0FBQVMsUUFBQSxJQUFBYixFQUFBSSxHQUFBLEdBQUFVLEtBQUFGLEVBQUFDLFNBQUEsU0FBQWQsR0FBQSxPQUFBSSxFQUFBSCxFQUFBSSxHQUFBLEdBQUFMLE1BQUEsR0FBQWEsSUFBQUMsUUFBQWQsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQSxRQUFBRCxFQUFBRyxHQUFBUyxPQUFBLFNBQUFMLEVBQUEsbUJBQUFELGlCQUFBSCxFQUFBLEVBQUFBLEVBQUFGLEVBQUFhLE9BQUFYLElBQUFELEVBQUFELEVBQUFFLElBQUEsT0FBQUQsQ0FBQSxlQUFBSSxFQUFBUyxFQUFBSCxHQ0FBLE1BQUFJLEVBQUFWLEVBQUEsaUJBQ0FXLEVBQUFYLEVBQUEsNkJBQ0FZLEVBQUFaLEVBQUEsMkJBQ0FhLEVBQUFiLEVBQUEsYUFFQWMsRUFBQSxDQUNBQyxLQUFBLEdBQ0FDLEtBQUEsR0FDQUMsU0FBQSxFQUNBQyxTQUFBLEdBQ0FDLEtBQUEsS0FDQUMsSUFBQSxHQUNBQyxNQUFBLEVBQ0FDLFNBQUEsRUFDQUMsUUFBQSxRQTJEQSxNQUNBLE1BQUFDLEVBQUEsSUFBQVgsRUFBQVksS0FDQSxJQUFBQyxF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