',dropdown:'',p2dpad:''};function U(t,e){const n=t.createElementNS(T,"svg");return n.innerHTML=I[e],n}function K(t,e,n){t.insertBefore(e,t.children[n])}function B(t){t.parentElement&&t.parentElement.removeChild(t)}function H(t){for(;t.children.length>0;)t.removeChild(t.children[0])}function z(t){return t.relatedTarget?s(t.relatedTarget):"explicitOriginalTarget"in t?t.explicitOriginalTarget:null}const q=m("lbl");class ${constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(q()),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("div");n.classList.add(q("l")),g(e.props,"label",e=>{a(e)?this.element.classList.add(q(void 0,"nol")):(this.element.classList.remove(q(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(q("v")),this.element.appendChild(i),this.valueElement=i}}class G extends j{constructor(t,e){const n=e.valueController.viewProps;super(Object.assign(Object.assign({},e),{view:new $(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 Y={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 G(t.document,{blade:t.blade,props:M.fromObject({label:t.params.label}),valueController:new C(t.document,{props:M.fromObject({title:t.params.title}),viewProps:t.viewProps})}),api:t=>t.controller instanceof G&&t.controller.valueController instanceof C?new h(t.controller):null};class W extends j{constructor(t){super(t),this.value=t.value}}function Q(){return new M({positions:E([],{equals:l})})}class X extends M{constructor(t){super(t)}static create(t){const e=M.createCore({completed:!0,expanded:t,expandedHeight:null,shouldFixHeight:!1,temporaryExpanded:null});return new X(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){g(this,"expanded",()=>{this.styleExpanded?t.classList.add(e):t.classList.remove(e)})}}function Z(t,e){e.style.height=t.styleHeight}function J(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",()=>{Z(t,e)}),Z(t,e),e.addEventListener("transitionend",e=>{"height"===e.propertyName&&(t.set("shouldFixHeight",!1),t.set("expandedHeight",null),t.set("completed",!0))})}class tt extends e{constructor(t,e){super(t),this.rackApi_=e}}class et{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 nt 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,s(e),this.controller_.binding.target.presetKey,t.options.last)})}}class it extends G{constructor(t,e){super(t,e),this.binding=e.binding}}class rt 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,s(e),this.controller_.binding.target.presetKey)})}}class ot extends G{constructor(t,e){super(t,e),this.binding=e.binding,this.viewProps.bindDisabled(this.binding.ticker),this.viewProps.handleDispose(()=>{this.binding.dispose()})}}function st(t){return t instanceof pt?t.apiSet_:t instanceof tt?t.rackApi_.apiSet_:null}function at(t,e){const n=t.find(t=>t.controller_===e);if(!n)throw c.shouldNeverHappen();return n}function lt(t,e,n){if(!d.isBindable(t))throw c.notBindable();return new d(t,e,n)}class pt 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 et(st),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=>at(this.apiSet_,t))}addInput(t,e,n){const i=n||{},r=this.pool_.createInput(this.controller_.view.element.ownerDocument,lt(t,e,i.presetKey),i),o=new nt(r);return this.add(o,i.index)}addMonitor(t,e,n){const i=n||{},r=this.pool_.createMonitor(this.controller_.view.element.ownerDocument,lt(t,e),i),o=new rt(r);return s(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({},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=at(this.apiSet_,t.bladeController);this.apiSet_.remove(e)}}onRackInputChange_(t){const e=t.bladeController;if(e instanceof it){const n=at(this.apiSet_,e),r=e.binding;this.emitter_.emit("change",{event:new i(n,s(r.target.read()),r.target.presetKey,t.options.last)})}else if(e instanceof W){const n=at(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 ot))throw c.shouldNeverHappen();const e=at(this.apiSet_,t.bladeController),n=t.bladeController.binding;this.emitter_.emit("update",{event:new r(e,s(n.target.read()),n.target.presetKey)})}}class ct extends tt{constructor(t,e){super(t,new pt(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 dt extends j{constructor(t){super({blade:t.blade,view:t.view,viewProps:t.rackController.viewProps}),this.rackController=t.rackController}}class ht{constructor(t,e){const n=m(e.viewName);this.element=t.createElement("div"),this.element.classList.add(n()),e.viewProps.bindClassModifiers(this.element)}}function ut(t){return t instanceof ft?t.rack:t instanceof dt?t.rackController.rack:null}function vt(t){const e=ut(t);return e?e.bcSet_:null}class mt{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 et(vt),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 s(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 it)n.binding.emitter.on("change",this.onChildInputChange_);else if(n instanceof ot)n.binding.emitter.on("update",this.onChildMonitorUpdate_);else if(n instanceof W)n.value.emitter.on("change",this.onChildValueChange_);else{const t=ut(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 it)n.binding.emitter.off("change",this.onChildInputChange_);else if(n instanceof ot)n.binding.emitter.off("update",this.onChildMonitorUpdate_);else if(n instanceof W)n.value.emitter.off("change",this.onChildValueChange_);else{const t=ut(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&&K(this.view.element,t.bladeController.view.element,t.index)}onRackRemove_(t){t.isRoot&&B(t.bladeController.view.element)}}const bt=m("cnt");class gt{constructor(t,e){this.className_=m(e.viewName||"fld"),this.element=t.createElement("div"),this.element.classList.add(this.className_(),bt()),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 n=t.createElement("button");n.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(n),this.element.appendChild(n),this.buttonElement=n;const i=t.createElement("div");i.classList.add(this.className_("t")),w(e.props.value("title"),i),this.buttonElement.appendChild(i),this.titleElement=i;const r=t.createElement("div");r.classList.add(this.className_("m")),this.buttonElement.appendChild(r);const o=e.containerElement;o.classList.add(this.className_("c")),this.element.appendChild(o),this.containerElement=o}}class _t extends dt{constructor(t,e){var n;const i=X.create(null===(n=e.expanded)||void 0===n||n),r=new ft(t,{blade:e.blade,root:e.root,viewProps:e.viewProps});super(Object.assign(Object.assign({},e),{rackController:r,view:new gt(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,J(this.foldable,this.view.containerElement),this.view.buttonElement.addEventListener("click",this.onTitleClick_)}get document(){return this.view.element.ownerDocument}onTitleClick_(){this.foldable.set("expanded",!this.foldable.get("expanded"))}}const wt={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 _t(t.document,{blade:t.blade,expanded:t.params.expanded,props:M.fromObject({title:t.params.title}),viewProps:t.viewProps}),api:t=>t.controller instanceof _t?new ct(t.controller,t.pool):null};class yt extends W{constructor(t,e){const n=e.valueController.viewProps;super(Object.assign(Object.assign({},e),{value:e.valueController.value,view:new $(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 xt extends e{}const Ct=m("spr");class Pt{constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(Ct()),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("hr");n.classList.add(Ct("r")),this.element.appendChild(n)}}class kt extends j{constructor(t,e){super(Object.assign(Object.assign({},e),{view:new Pt(t,{viewProps:e.viewProps})}))}}const Et={id:"separator",type:"blade",accept(t){const e=A(t,{view:L.required.constant("separator")});return e?{params:e}:null},controller:t=>new kt(t.document,{blade:t.blade,viewProps:t.viewProps}),api:t=>t.controller instanceof kt?new xt(t.controller):null},Mt=m("");function Vt(t,e){return _(t,Mt(void 0,e))}class St extends M{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=M.createCore(r);return new St(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 Lt=m("tbi");class At{constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(Lt()),e.viewProps.bindClassModifiers(this.element),g(e.props,"selected",t=>{t?this.element.classList.add(Lt(void 0,"sel")):this.element.classList.remove(Lt(void 0,"sel"))});const n=t.createElement("button");n.classList.add(Lt("b")),e.viewProps.bindDisabled(n),this.element.appendChild(n),this.buttonElement=n;const i=t.createElement("div");i.classList.add(Lt("t")),w(e.props.value("title"),i),this.buttonElement.appendChild(i),this.titleElement=i}}class Dt{constructor(t,e){this.emitter=new u,this.onClick_=this.onClick_.bind(this),this.props=e.props,this.viewProps=e.viewProps,this.view=new At(t,{props:e.props,viewProps:e.viewProps}),this.view.buttonElement.addEventListener("click",this.onClick_)}onClick_(){this.emitter.emit("click",{sender:this})}}class Rt{constructor(t,e){this.onItemClick_=this.onItemClick_.bind(this),this.ic_=new Dt(t,{props:e.itemProps,viewProps:St.create()}),this.ic_.emitter.on("click",this.onItemClick_),this.cc_=new ft(t,{blade:Q(),viewProps:St.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 jt{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 Tt extends tt{constructor(t,e){super(t,new pt(t.rackController,e)),this.onPageAdd_=this.onPageAdd_.bind(this),this.onPageRemove_=this.onPageRemove_.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_.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 Rt(this.controller_.view.element.ownerDocument,{itemProps:M.fromObject({selected:!1,title:t.title}),props:M.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 jt(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)}}const Ot=m("tab");class Nt{constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(Ot(),bt()),e.viewProps.bindClassModifiers(this.element),b(e.empty,_(this.element,Ot(void 0,"nop")));const n=t.createElement("div");n.classList.add(Ot("i")),this.element.appendChild(n),this.itemsElement=n;const i=e.contentsElement;i.classList.add(Ot("c")),this.element.appendChild(i),this.contentsElement=i}}class Ft extends dt{constructor(t,e){const n=new ft(t,{blade:e.blade,viewProps:e.viewProps}),i=E(!0);super({blade:e.blade,rackController:n,view:new Nt(t,{contentsElement:n.view.element,empty:i,viewProps:e.viewProps})}),this.onPageAdd_=this.onPageAdd_.bind(this),this.onPageRemove_=this.onPageRemove_.bind(this),this.onPageSelectedChange_=this.onPageSelectedChange_.bind(this),this.pageSet_=new et(()=>null),this.pageSet_.emitter.on("add",this.onPageAdd_),this.pageSet_.emitter.on("remove",this.onPageRemove_),this.empty_=i,this.applyPages_()}get pageSet(){return this.pageSet_}add(t,e){this.pageSet_.add(t,null!=e?e:this.pageSet_.items.length)}remove(t){this.pageSet_.remove(this.pageSet_.items[t])}applyPages_(){this.keepSelection_(),this.empty_.rawValue=0===this.pageSet_.items.length}onPageAdd_(t){const e=t.item;K(this.view.itemsElement,e.itemController.view.element,t.index),this.rackController.rack.add(e.contentController,t.index),e.props.value("selected").emitter.on("change",this.onPageSelectedChange_),this.applyPages_()}onPageRemove_(t){const e=t.item;B(e.itemController.view.element),this.rackController.rack.remove(e.contentController),e.props.value("selected").emitter.off("change",this.onPageSelectedChange_),this.applyPages_()}keepSelection_(){if(0===this.pageSet_.items.length)return;const t=this.pageSet_.items.findIndex(t=>t.props.get("selected"));this.pageSet_.items.forEach(t<0?(t,e)=>{t.props.set("selected",0===e)}:(e,n)=>{e.props.set("selected",n===t)})}onPageSelectedChange_(t){if(t.rawValue){const e=this.pageSet_.items.findIndex(e=>e.props.value("selected")===t.sender);this.pageSet_.items.forEach((t,n)=>{t.props.set("selected",n===e)})}else this.keepSelection_()}}const It={id:"tab",type:"blade",accept(t){const e=L,n=A(t,{pages:e.required.array(e.required.object({title:e.required.string})),view:e.required.constant("tab")});return n&&0!==n.pages.length?{params:n}:null},controller(t){const e=new Ft(t.document,{blade:t.blade,viewProps:t.viewProps});return t.params.pages.forEach(n=>{const i=new Rt(t.document,{itemProps:M.fromObject({selected:!1,title:n.title}),props:M.fromObject({selected:!1})});e.add(i)}),e},api:t=>t.controller instanceof Ft?new Tt(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;return 0===e.length?t: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){this.step=t}constrain(t){return(t<0?-Math.round(-t/this.step):Math.round(t/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=>{H(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(U(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=s(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=s(t.currentTarget),n=this.parser_(e.value);a(n)||(this.value.rawValue=n),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 Me(t){return String(t)}function Ve(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 Re(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 Te(t){return{altKey:t.altKey,downKey:"ArrowLeft"===t.key,shiftKey:t.shiftKey,upKey:"ArrowRight"===t.key}}function Oe(t){return function(t){return"ArrowUp"===t||"ArrowDown"===t}(t)||"ArrowLeft"===t||"ArrowRight"===t}function Ne(t,e){const n=e.ownerDocument.defaultView,i=e.getBoundingClientRect();return{x:t.pageX-((n&&n.scrollX||0)+i.left),y:t.pageY-((n&&n.scrollY||0)+i.top)}}class Fe{constructor(t){this.lastTouch_=null,this.onDocumentMouseMove_=this.onDocumentMouseMove_.bind(this),this.onDocumentMouseUp_=this.onDocumentMouseUp_.bind(this),this.onMouseDown_=this.onMouseDown_.bind(this),this.onTouchEnd_=this.onTouchEnd_.bind(this),this.onTouchMove_=this.onTouchMove_.bind(this),this.onTouchStart_=this.onTouchStart_.bind(this),this.elem_=t,this.emitter=new u,t.addEventListener("touchstart",this.onTouchStart_),t.addEventListener("touchmove",this.onTouchMove_),t.addEventListener("touchend",this.onTouchEnd_),t.addEventListener("mousedown",this.onMouseDown_)}computePosition_(t){const e=this.elem_.getBoundingClientRect();return{bounds:{width:e.width,height:e.height},point:t?{x:t.x,y:t.y}:null}}onMouseDown_(t){var e;t.preventDefault(),null===(e=t.currentTarget)||void 0===e||e.focus();const n=this.elem_.ownerDocument;n.addEventListener("mousemove",this.onDocumentMouseMove_),n.addEventListener("mouseup",this.onDocumentMouseUp_),this.emitter.emit("down",{altKey:t.altKey,data:this.computePosition_(Ne(t,this.elem_)),sender:this,shiftKey:t.shiftKey})}onDocumentMouseMove_(t){this.emitter.emit("move",{altKey:t.altKey,data:this.computePosition_(Ne(t,this.elem_)),sender:this,shiftKey:t.shiftKey})}onDocumentMouseUp_(t){const e=this.elem_.ownerDocument;e.removeEventListener("mousemove",this.onDocumentMouseMove_),e.removeEventListener("mouseup",this.onDocumentMouseUp_),this.emitter.emit("up",{altKey:t.altKey,data:this.computePosition_(Ne(t,this.elem_)),sender:this,shiftKey:t.shiftKey})}onTouchStart_(t){t.preventDefault();const e=t.targetTouches.item(0),n=this.elem_.getBoundingClientRect();this.emitter.emit("down",{altKey:t.altKey,data:this.computePosition_(e?{x:e.clientX-n.left,y:e.clientY-n.top}:void 0),sender:this,shiftKey:t.shiftKey}),this.lastTouch_=e}onTouchMove_(t){const e=t.targetTouches.item(0),n=this.elem_.getBoundingClientRect();this.emitter.emit("move",{altKey:t.altKey,data:this.computePosition_(e?{x:e.clientX-n.left,y:e.clientY-n.top}:void 0),sender:this,shiftKey:t.shiftKey}),this.lastTouch_=e}onTouchEnd_(t){var e;const n=null!==(e=t.targetTouches.item(0))&&void 0!==e?e:this.lastTouch_,i=this.elem_.getBoundingClientRect();this.emitter.emit("up",{altKey:t.altKey,data:this.computePosition_(n?{x:n.clientX-i.left,y:n.clientY-i.top}:void 0),sender:this,shiftKey:t.shiftKey})}}function Ie(t,e,n,i,r){return i+(t-e)/(n-e)*(r-i)}function Ue(t){return String(t.toFixed(10)).split(".")[1].replace(/0+$/,"").length}function Ke(t,e,n){return Math.min(Math.max(t,e),n)}function Be(t,e){return(t%e+e)%e}const He=m("txt");class ze{constructor(t,e){this.onChange_=this.onChange_.bind(this),this.props_=e.props,this.props_.emitter.on("change",this.onChange_),this.element=t.createElement("div"),this.element.classList.add(He(),He(void 0,"num")),e.arrayPosition&&this.element.classList.add(He(void 0,e.arrayPosition)),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("input");n.classList.add(He("i")),n.type="text",e.viewProps.bindDisabled(n),this.element.appendChild(n),this.inputElement=n,this.onDraggingChange_=this.onDraggingChange_.bind(this),this.dragging_=e.dragging,this.dragging_.emitter.on("change",this.onDraggingChange_),this.element.classList.add(He()),this.inputElement.classList.add(He("i"));const i=t.createElement("div");i.classList.add(He("k")),this.element.appendChild(i),this.knobElement=i;const r=t.createElementNS(T,"svg");r.classList.add(He("g")),this.knobElement.appendChild(r);const o=t.createElementNS(T,"path");o.classList.add(He("gb")),r.appendChild(o),this.guideBodyElem_=o;const s=t.createElementNS(T,"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){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.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 n=new Fe(this.view.knobElement);n.emitter.on("down",this.onPointerDown_),n.emitter.on("move",this.onPointerMove_),n.emitter.on("up",this.onPointerUp_)}onInputChange_(t){const e=s(t.currentTarget),n=this.parser_(e.value);a(n)||(this.value.rawValue=n),this.view.refresh()}onInputKeyDown_(t){const e=Re(this.baseStep_,je(t));0!==e&&this.value.setRawValue(this.value.rawValue+e,{forceEmit:!1,last:!1})}onInputKeyUp_(t){0!==Re(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.originRawValue_+(t.point.x-t.bounds.width/2)*this.props.get("draggingScale")}onPointerMove_(t){const e=this.computeDraggingValue_(t.data);null!==e&&(this.value.setRawValue(e,{forceEmit:!1,last:!1}),this.dragging_.rawValue=this.value.rawValue-this.originRawValue_)}onPointerUp_(t){const e=this.computeDraggingValue_(t.data);null!==e&&(this.value.setRawValue(e,{forceEmit:!0,last:!0}),this.dragging_.rawValue=null)}}const $e=m("sld");class Ge{constructor(t,e){this.onChange_=this.onChange_.bind(this),this.props_=e.props,this.props_.emitter.on("change",this.onChange_),this.element=t.createElement("div"),this.element.classList.add($e()),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("div");n.classList.add($e("t")),e.viewProps.bindTabIndex(n),this.element.appendChild(n),this.trackElement=n;const i=t.createElement("div");i.classList.add($e("k")),this.trackElement.appendChild(i),this.knobElement=i,e.value.emitter.on("change",this.onChange_),this.value=e.value,this.update_()}update_(){const t=Ke(Ie(this.value.rawValue,this.props_.get("minValue"),this.props_.get("maxValue"),0,100),0,100);this.knobElement.style.width=`${t}%`}onChange_(){this.update_()}}class Ye{constructor(t,e){this.onKeyDown_=this.onKeyDown_.bind(this),this.onKeyUp_=this.onKeyUp_.bind(this),this.onPointerDownOrMove_=this.onPointerDownOrMove_.bind(this),this.onPointerUp_=this.onPointerUp_.bind(this),this.baseStep_=e.baseStep,this.value=e.value,this.viewProps=e.viewProps,this.props=e.props,this.view=new Ge(t,{props:this.props,value:this.value,viewProps:this.viewProps}),this.ptHandler_=new Fe(this.view.trackElement),this.ptHandler_.emitter.on("down",this.onPointerDownOrMove_),this.ptHandler_.emitter.on("move",this.onPointerDownOrMove_),this.ptHandler_.emitter.on("up",this.onPointerUp_),this.view.trackElement.addEventListener("keydown",this.onKeyDown_),this.view.trackElement.addEventListener("keyup",this.onKeyUp_)}handlePointerEvent_(t,e){t.point&&this.value.setRawValue(Ie(Ke(t.point.x,0,t.bounds.width),0,t.bounds.width,this.props.get("minValue"),this.props.get("maxValue")),e)}onPointerDownOrMove_(t){this.handlePointerEvent_(t.data,{forceEmit:!1,last:!1})}onPointerUp_(t){this.handlePointerEvent_(t.data,{forceEmit:!0,last:!0})}onKeyDown_(t){const e=Re(this.baseStep_,Te(t));0!==e&&this.value.setRawValue(this.value.rawValue+e,{forceEmit:!1,last:!1})}onKeyUp_(t){0!==Re(this.baseStep_,Te(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,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(s(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=U(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){const e=s(t.currentTarget);this.value.rawValue=e.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:M.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=(p=i===s?(r-o)/l:r===s?2+(o-i)/l:4+(i-r)/l)/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),100*(0===s?0:a/s),100*s]},rgb:(t,e,n)=>[t,e,n]}},_n={hsl:t=>{var e;return[Be(t[0],360),Ke(t[1],0,100),Ke(t[2],0,100),Ke(null!==(e=t[3])&&void 0!==e?e:1,0,1)]},hsv:t=>{var e;return[Be(t[0],360),Ke(t[1],0,100),Ke(t[2],0,100),Ke(null!==(e=t[3])&&void 0!==e?e:1,0,1)]},rgb:t=>{var e;return[Ke(t[0],0,255),Ke(t[1],0,255),Ke(t[2],0,255),Ke(null!==(e=t[3])&&void 0!==e?e:1,0,1)]}};function wn(t,e){return"object"==typeof t&&!a(t)&&(e in t&&"number"==typeof t[e])}class yn{constructor(t,e){this.mode_=e,this.comps_=_n[e](t)}static black(){return new yn([0,0,0],"rgb")}static fromObject(t){return new yn("a"in t?[t.r,t.g,t.b,t.a]:[t.r,t.g,t.b],"rgb")}static toRgbaObject(t){return t.toRgbaObject()}static isRgbColorObject(t){return wn(t,"r")&&wn(t,"g")&&wn(t,"b")}static isRgbaColorObject(t){return this.isRgbColorObject(t)&&wn(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 Pn(t){return A(t,{alpha:L.optional.boolean,expanded:L.optional.boolean,picker:L.optional.custom(tn)})}function kn(t){return t?.1:1}function En(t,e){const n=t.match(/^(.+)%$/);return n?Math.min(.01*parseFloat(n[1])*e,e):Math.min(parseFloat(t),e)}const Mn={deg:t=>t,grad:t=>360*t/400,rad:t=>360*t/(2*Math.PI),turn:t=>360*t};function Vn(t){const e=t.match(/^([0-9.]+?)(deg|grad|rad|turn)$/);if(!e)return parseFloat(t);const n=parseFloat(e[1]);return Mn[e[2]](n)}const Sn={"func.rgb":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=[En(e[1],255),En(e[2],255),En(e[3],255)];return isNaN(n[0])||isNaN(n[1])||isNaN(n[2])?null:new yn(n,"rgb")},"func.rgba":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=[En(e[1],255),En(e[2],255),En(e[3],255),En(e[4],1)];return isNaN(n[0])||isNaN(n[1])||isNaN(n[2])||isNaN(n[3])?null:new yn(n,"rgb")},"func.hsl":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=[Vn(e[1]),En(e[2],100),En(e[3],100)];return isNaN(n[0])||isNaN(n[1])||isNaN(n[2])?null:new yn(n,"hsl")},"func.hsla":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=[Vn(e[1]),En(e[2],100),En(e[3],100),En(e[4],1)];return isNaN(n[0])||isNaN(n[1])||isNaN(n[2])||isNaN(n[3])?null:new yn(n,"hsl")},"hex.rgb":t=>{const e=t.match(/^#([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])$/);if(e)return new yn([parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)],"rgb");const n=t.match(/^(?:#|0x)([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})([0-9A-Fa-f]{2})$/);return n?new yn([parseInt(n[1],16),parseInt(n[2],16),parseInt(n[3],16)],"rgb"):null},"hex.rgba":t=>{const e=t.match(/^#?([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])([0-9A-Fa-f])$/);if(e)return new yn([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)],"rgb");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?new yn([parseInt(n[1],16),parseInt(n[2],16),parseInt(n[3],16),Ie(parseInt(n[4],16),0,255,0,1)],"rgb"):null}};function Ln(t){return Object.keys(Sn).reduce((e,n)=>{if(e)return e;return(0,Sn[n])(t)?n:null},null)}const An=t=>{const e=Ln(t);return e?Sn[e](t):null};function Dn(t){return"func.hsla"===t||"func.rgba"===t||"hex.rgba"===t}function Rn(t){const e=Ke(Math.floor(t),0,255).toString(16);return 1===e.length?`0${e}`:e}function jn(t,e="#"){return`${e}${fn(t.getComponents("rgb")).map(Rn).join("")}`}function Tn(t,e="#"){const n=t.getComponents("rgb");return`${e}${[n[0],n[1],n[2],255*n[3]].map(Rn).join("")}`}function On(t){const e=Pe(0);return`rgb(${fn(t.getComponents("rgb")).map(t=>e(t)).join(", ")})`}function Nn(t){const e=Pe(2),n=Pe(0);return`rgba(${t.getComponents("rgb").map((t,i)=>{return(3===i?e:n)(t)}).join(", ")})`}const Fn={"func.hsl":function(t){const e=[Pe(0),Ee,Ee];return`hsl(${fn(t.getComponents("hsl")).map((t,n)=>e[n](t)).join(", ")})`},"func.hsla":function(t){const e=[Pe(0),Ee,Ee,Pe(2)];return`hsla(${t.getComponents("hsl").map((t,n)=>e[n](t)).join(", ")})`},"func.rgb":On,"func.rgba":Nn,"hex.rgb":jn,"hex.rgba":Tn};function In(t){return Fn[t]}const Un=m("apl");class Kn{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(Un()),e.viewProps.bindTabIndex(this.element);const n=t.createElement("div");n.classList.add(Un("b")),this.element.appendChild(n);const i=t.createElement("div");i.classList.add(Un("c")),n.appendChild(i),this.colorElem_=i;const r=t.createElement("div");r.classList.add(Un("m")),this.element.appendChild(r),this.markerElem_=r;const o=t.createElement("div");o.classList.add(Un("p")),this.markerElem_.appendChild(o),this.previewElem_=o,this.update_()}update_(){const t=this.value.rawValue,e=t.getComponents("rgb"),n=new yn([e[0],e[1],e[2],0],"rgb"),i=new yn([e[0],e[1],e[2],255],"rgb"),r=["to right",Nn(n),Nn(i)];this.colorElem_.style.background=`linear-gradient(${r.join(",")})`,this.previewElem_.style.backgroundColor=Nn(t);const o=Ie(e[3],0,1,0,100);this.markerElem_.style.left=`${o}%`}onValueChange_(){this.update_()}}class Bn{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 Kn(t,{value:this.value,viewProps:this.viewProps}),this.ptHandler_=new Fe(this.view.element),this.ptHandler_.emitter.on("down",this.onPointerDown_),this.ptHandler_.emitter.on("move",this.onPointerMove_),this.ptHandler_.emitter.on("up",this.onPointerUp_),this.view.element.addEventListener("keydown",this.onKeyDown_),this.view.element.addEventListener("keyup",this.onKeyUp_)}handlePointerEvent_(t,e){if(!t.point)return;const n=t.point.x/t.bounds.width,i=this.value.rawValue,[r,o,s]=i.getComponents("hsv");this.value.setRawValue(new yn([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=Re(kn(!0),Te(t));if(0===e)return;const n=this.value.rawValue,[i,r,o,s]=n.getComponents("hsv");this.value.setRawValue(new yn([i,r,o,s+e],"hsv"),{forceEmit:!1,last:!1})}onKeyUp_(t){0!==Re(kn(!0),Te(t))&&this.value.setRawValue(this.value.rawValue,{forceEmit:!0,last:!0})}}const Hn=m("coltxt");class zn{constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(Hn());const n=t.createElement("div");n.classList.add(Hn("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(Hn("ms")),n.appendChild(this.modeSelectElement);const i=t.createElement("div");i.classList.add(Hn("mm")),i.appendChild(U(t,"dropdown")),n.appendChild(i),this.element.appendChild(n);const r=t.createElement("div");r.classList.add(Hn("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_(){H(this.textsElem_);const t=this.element.ownerDocument;this.textViews_.forEach(e=>{const n=t.createElement("div");n.classList.add(Hn("c")),n.appendChild(e.element),this.textsElem_.appendChild(n)})}}const qn=Pe(0),$n={rgb:()=>new qt({min:0,max:255}),hsl:t=>new qt(0===t?{min:0,max:360}:{min:0,max:100}),hsv:t=>new qt(0===t?{min:0,max:360}:{min:0,max:100})};function Gn(t,e,n){return new qe(t,{arrayPosition:0===n?"fst":2===n?"lst":"mid",baseStep:kn(!1),parser:e.parser,props:M.fromObject({draggingScale:1,formatter:qn}),value:E(0,{constraint:$n[e.colorMode](n)}),viewProps:e.viewProps})}class Yn{constructor(t,e){this.onModeSelectChange_=this.onModeSelectChange_.bind(this),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 zn(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,parser:this.parser_,viewProps:this.viewProps},n=[Gn(t,e,0),Gn(t,e,1),Gn(t,e,2)];return n.forEach((t,e)=>{De({primary:this.value,secondary:t.value,forward:t=>t.rawValue.getComponents(this.colorMode.rawValue)[e],backward:(t,n)=>{const i=this.colorMode.rawValue,r=t.rawValue.getComponents(i);return r[e]=n.rawValue,new yn(bn(fn(r),r[3]),i)}})}),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 Wn=m("hpl");class Qn{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(Wn()),e.viewProps.bindTabIndex(this.element);const n=t.createElement("div");n.classList.add(Wn("c")),this.element.appendChild(n);const i=t.createElement("div");i.classList.add(Wn("m")),this.element.appendChild(i),this.markerElem_=i,this.update_()}update_(){const t=this.value.rawValue,[e]=t.getComponents("hsv");this.markerElem_.style.backgroundColor=On(new yn([e,100,100],"hsv"));const n=Ie(e,0,360,0,100);this.markerElem_.style.left=`${n}%`}onValueChange_(){this.update_()}}class Xn{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 Qn(t,{value:this.value,viewProps:this.viewProps}),this.ptHandler_=new Fe(this.view.element),this.ptHandler_.emitter.on("down",this.onPointerDown_),this.ptHandler_.emitter.on("move",this.onPointerMove_),this.ptHandler_.emitter.on("up",this.onPointerUp_),this.view.element.addEventListener("keydown",this.onKeyDown_),this.view.element.addEventListener("keyup",this.onKeyUp_)}handlePointerEvent_(t,e){if(!t.point)return;const n=Ie(t.point.x,0,t.bounds.width,0,360),i=this.value.rawValue,[,r,o,s]=i.getComponents("hsv");this.value.setRawValue(new yn([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=Re(kn(!1),Te(t));if(0===e)return;const n=this.value.rawValue,[i,r,o,s]=n.getComponents("hsv");this.value.setRawValue(new yn([i+e,r,o,s],"hsv"),{forceEmit:!1,last:!1})}onKeyUp_(t){0!==Re(kn(!1),Te(t))&&this.value.setRawValue(this.value.rawValue,{forceEmit:!0,last:!0})}}const Zn=m("svp"),Jn=64;class ti{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(Zn()),e.viewProps.bindTabIndex(this.element);const n=t.createElement("canvas");n.height=Jn,n.width=Jn,n.classList.add(Zn("c")),this.element.appendChild(n),this.canvasElement=n;const i=t.createElement("div");i.classList.add(Zn("m")),this.element.appendChild(i),this.markerElem_=i,this.update_()}update_(){const t=F(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 yn(n,t.rawValue.mode)}}),this.textC_=new Yn(t,{parser:ye,value:this.value,viewProps:this.viewProps}),this.view=new Cn(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 ii=m("colsw");class ri{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(ii()),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("div");n.classList.add(ii("sw")),this.element.appendChild(n),this.swatchElem_=n;const i=t.createElement("button");i.classList.add(ii("b")),e.viewProps.bindDisabled(i),this.element.appendChild(i),this.buttonElement=i,this.update_()}update_(){this.swatchElem_.style.backgroundColor=Tn(this.value.rawValue)}onValueChange_(){this.update_()}}class oi{constructor(t,e){this.value=e.value,this.viewProps=e.viewProps,this.view=new ri(t,{value:this.value,viewProps:this.viewProps})}}class si{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_=X.create(e.expanded),this.swatchC_=new oi(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:M.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 ni(t,{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),J(this.foldable_,this.view.pickerElement))}get textController(){return this.textC_}onButtonBlur_(t){if(!this.popC_)return;const e=this.view.element,n=s(t.relatedTarget);n&&e.contains(n)||(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=z(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 ai(t){return fn(t.getComponents("rgb")).reduce((t,e)=>t<<8|255&Math.floor(e),0)}function li(t){return t.getComponents("rgb").reduce((t,e,n)=>{return t<<8|255&Math.floor(3===n?255*e:e)},0)>>>0}function pi(t){return"number"!=typeof t?yn.black():new yn([(e=t)>>16&255,e>>8&255,255&e],"rgb");var e}function ci(t){return"number"!=typeof t?yn.black():new yn([(e=t)>>24&255,e>>16&255,e>>8&255,Ie(255&e,0,255,0,1)],"rgb");var e}function di(t,e){const n=e.toRgbaObject();t.writeProperty("r",n.r),t.writeProperty("g",n.g),t.writeProperty("b",n.b),t.writeProperty("a",n.a)}function hi(t,e){const n=e.toRgbaObject();t.writeProperty("r",n.r),t.writeProperty("g",n.g),t.writeProperty("b",n.b)}function ui(t){return"alpha"in t&&!0===t.alpha}function vi(t){return t?t=>Tn(t,"0x"):t=>jn(t,"0x")}const mi={id:"input-color-number",type:"input",accept:(t,e)=>{if("number"!=typeof t)return null;if(!("view"in e))return null;if("color"!==e.view)return null;const n=Pn(e);return n?{initialValue:t,params:n}:null},binding:{reader:t=>ui(t.params)?ci:pi,equals:yn.equals,writer:t=>(function(t){const e=t?li:ai;return(t,n)=>{Ze(t,e(n))}})(ui(t.params))},controller:t=>{const e=ui(t.params),n="expanded"in t.params?t.params.expanded:void 0,i="picker"in t.params?t.params.picker:void 0;return new si(t.document,{expanded:null!=n&&n,formatter:vi(e),parser:An,pickerLayout:null!=i?i:"popup",supportsAlpha:e,value:t.value,viewProps:t.viewProps})}},fi={id:"input-color-object",type:"input",accept:(t,e)=>{if(!yn.isColorObject(t))return null;const n=Pn(e);return n?{initialValue:t,params:n}:null},binding:{reader:t=>(function(t){return yn.isColorObject(t)?yn.fromObject(t):yn.black()}),equals:yn.equals,writer:t=>(function(t){return t?di:hi})(function(t){return yn.isRgbaColorObject(t)}(t.initialValue))},controller:t=>{const e=yn.isRgbaColorObject(t.initialValue),n="expanded"in t.params?t.params.expanded:void 0,i="picker"in t.params?t.params.picker:void 0;return new si(t.document,{expanded:null!=n&&n,formatter:e?Tn:jn,parser:An,pickerLayout:null!=i?i:"popup",supportsAlpha:e,value:t.value,viewProps:t.viewProps})}},bi={id:"input-color-string",type:"input",accept:(t,e)=>{if("string"!=typeof t)return null;if("view"in e&&"text"===e.view)return null;if(!Ln(t))return null;const n=Pn(e);return n?{initialValue:t,params:n}:null},binding:{reader:t=>(function(t){if("string"==typeof t){const e=An(t);if(e)return e}return yn.black()}),equals:yn.equals,writer:t=>{const e=Ln(t.initialValue);if(!e)throw c.shouldNeverHappen();return function(t){const e=In(t);return(t,n)=>{Ze(t,e(n))}}(e)}},controller:t=>{const e=Ln(t.initialValue);if(!e)throw c.shouldNeverHappen();const n=In(e),i="expanded"in t.params?t.params.expanded:void 0,r="picker"in t.params?t.params.picker:void 0;return new si(t.document,{expanded:null!=i&&i,formatter:n,parser:An,pickerLayout:null!=r?r:"popup",supportsAlpha:Dn(e),value:t.value,viewProps:t.viewProps})}};class gi{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 _i=m("pndtxt");class wi{constructor(t,e){this.textViews=e.textViews,this.element=t.createElement("div"),this.element.classList.add(_i()),this.textViews.forEach(e=>{const n=t.createElement("div");n.classList.add(_i("a")),n.appendChild(e.element),this.element.appendChild(n)})}}class yi{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 wi(t,{textViews:this.acs_.map(t=>t.view)})}}function xi(t){const e=[],n=function(t){return"step"in t&&!a(t.step)?new $t(t.step):null}(t);n&&e.push(n);const i=function(t){return"max"in t&&!a(t.max)||"min"in t&&!a(t.min)?new qt({max:t.max,min:t.min}):null}(t);i&&e.push(i);const r=rn(t.options);return r&&e.push(r),new Bt(e)}function Ci(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 Pi={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=>xi(t.params),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:M.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]=Ci(r);return new Xe(t.document,{baseStep:an(r),parser:ye,sliderProps:M.fromObject({maxValue:n,minValue:e}),textProps:M.fromObject({draggingScale:ln(r,i.rawValue),formatter:o}),value:i,viewProps:t.viewProps})}return new qe(t.document,{baseStep:an(r),parser:ye,props:M.fromObject({draggingScale:ln(r,i.rawValue),formatter:o}),value:i,viewProps:t.viewProps})}};class ki{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 Ei={toComponents:t=>t.getComponents(),fromComponents:t=>new ki(...t)},Mi=m("p2d");class Vi{constructor(t,e){this.element=t.createElement("div"),this.element.classList.add(Mi()),e.viewProps.bindClassModifiers(this.element),b(e.expanded,_(this.element,Mi(void 0,"expanded")));const n=t.createElement("div");n.classList.add(Mi("h")),this.element.appendChild(n);const i=t.createElement("button");i.classList.add(Mi("b")),i.appendChild(U(t,"p2dpad")),e.viewProps.bindDisabled(i),n.appendChild(i),this.buttonElement=i;const r=t.createElement("div");if(r.classList.add(Mi("t")),n.appendChild(r),this.textElement=r,"inline"===e.pickerLayout){const e=t.createElement("div");e.classList.add(Mi("p")),this.element.appendChild(e),this.pickerElement=e}else this.pickerElement=null}}const Si=m("p2dp");class Li{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(Si()),"popup"===e.layout&&this.element.classList.add(Si(void 0,"p"));const n=t.createElement("div");n.classList.add(Si("p")),e.viewProps.bindTabIndex(n),this.element.appendChild(n),this.padElement=n;const i=t.createElementNS(T,"svg");i.classList.add(Si("g")),this.padElement.appendChild(i),this.svgElem_=i;const r=t.createElementNS(T,"line");r.classList.add(Si("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(T,"line");o.classList.add(Si("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(T,"line");s.classList.add(Si("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(Si("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 Ai(t,e,n){return[Re(e[0],Te(t)),Re(e[1],je(t))*(n?1:-1)]}class Di{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 Li(t,{invertsY:this.invertsY_,layout:e.layout,maxValue:this.maxValue_,value:this.value,viewProps:this.viewProps}),this.ptHandler_=new Fe(this.view.padElement),this.ptHandler_.emitter.on("down",this.onPointerDown_),this.ptHandler_.emitter.on("move",this.onPointerMove_),this.ptHandler_.emitter.on("up",this.onPointerUp_),this.view.padElement.addEventListener("keydown",this.onPadKeyDown_),this.view.padElement.addEventListener("keyup",this.onPadKeyUp_)}handlePointerEvent_(t,e){if(!t.point)return;const n=this.maxValue_,i=Ie(t.point.x,0,t.bounds.width,-n,+n),r=Ie(this.invertsY_?t.bounds.height-t.point.y:t.point.y,0,t.bounds.height,-n,+n);this.value.setRawValue(new ki(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]=Ai(t,this.baseSteps_,this.invertsY_);0===e&&0===n||this.value.setRawValue(new ki(this.value.rawValue.x+e,this.value.rawValue.y+n),{forceEmit:!1,last:!1})}onPadKeyUp_(t){const[e,n]=Ai(t,this.baseSteps_,this.invertsY_);0===e&&0===n||this.value.setRawValue(this.value.rawValue,{forceEmit:!0,last:!0})}}class Ri{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_=X.create(e.expanded),this.popC_="popup"===e.pickerLayout?new Zt(t,{viewProps:this.viewProps}):null;const r=new Di(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 yi(t,{assembly:Ei,axes:e.axes,parser:e.parser,value:this.value,viewProps:this.viewProps}),this.view=new Vi(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),J(this.foldable_,this.view.pickerElement))}onPadButtonBlur_(t){if(!this.popC_)return;const e=this.view.element,n=s(t.relatedTarget);n&&e.contains(n)||(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=z(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 ji(t){if(!t)return;const e=[];return a(t.step)||e.push(new $t(t.step)),a(t.max)&&a(t.min)||e.push(new qt({max:t.max,min:t.min})),new Bt(e)}function Ti(t,e){const n=t&&Ht(t,qt);if(n)return Math.max(Math.abs(n.minValue||0),Math.abs(n.maxValue||0));const i=an(t);return Math.max(10*Math.abs(i),10*Math.abs(e))}function Oi(t,e){const n=e instanceof gi?e.components[1]:void 0,i=Ti(e instanceof gi?e.components[0]:void 0,t.x),r=Ti(n,t.y);return Math.max(i,r)}function Ni(t,e){return{baseStep:an(e),constraint:e,textProps:M.fromObject({draggingScale:ln(e,t),formatter:Pe(sn(e,t))})}}function Fi(t){if(!("y"in t))return!1;const e=t.y;return!!e&&("inverted"in e&&!!e.inverted)}const Ii={id:"input-point2d",type:"input",accept:(t,e)=>{if(!ki.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=>(function(t){return ki.isObject(t)?new ki(t.x,t.y):new ki}),constraint:t=>(function(t){return new gi({assembly:Ei,components:[ji("x"in t?t.x:void 0),ji("y"in t?t.y:void 0)]})})(t.params),equals:ki.equals,writer:t=>(function(t,e){t.writeProperty("x",e.x),t.writeProperty("y",e.y)})},controller:t=>{const e=t.document,n=t.value,i=t.constraint;if(!(i instanceof gi))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 Ri(e,{axes:[Ni(n.rawValue.x,i.components[0]),Ni(n.rawValue.y,i.components[1])],expanded:null!=r&&r,invertsY:Fi(t.params),maxValue:Oi(n.rawValue,i),parser:ye,pickerLayout:null!=o?o:"popup",value:n,viewProps:t.viewProps})}};class Ui{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 Ki={toComponents:t=>t.getComponents(),fromComponents:t=>new Ui(...t)};function Bi(t){if(!t)return;const e=[];return a(t.step)||e.push(new $t(t.step)),a(t.max)&&a(t.min)||e.push(new qt({max:t.max,min:t.min})),new Bt(e)}function Hi(t,e){return{baseStep:an(e),constraint:e,textProps:M.fromObject({draggingScale:ln(e,t),formatter:Pe(sn(e,t))})}}const zi={id:"input-point3d",type:"input",accept:(t,e)=>{if(!Ui.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=>(function(t){return Ui.isObject(t)?new Ui(t.x,t.y,t.z):new Ui}),constraint:t=>(function(t){return new gi({assembly:Ki,components:[Bi("x"in t?t.x:void 0),Bi("y"in t?t.y:void 0),Bi("z"in t?t.z:void 0)]})})(t.params),equals:Ui.equals,writer:t=>(function(t,e){t.writeProperty("x",e.x),t.writeProperty("y",e.y),t.writeProperty("z",e.z)})},controller:t=>{const e=t.value,n=t.constraint;if(!(n instanceof gi))throw c.shouldNeverHappen();return new yi(t.document,{assembly:Ki,axes:[Hi(e.rawValue.x,n.components[0]),Hi(e.rawValue.y,n.components[1]),Hi(e.rawValue.z,n.components[2])],parser:ye,value:e,viewProps:t.viewProps})}};class qi{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 $i={toComponents:t=>t.getComponents(),fromComponents:t=>new qi(...t)};function Gi(t){if(!t)return;const e=[];return a(t.step)||e.push(new $t(t.step)),a(t.max)&&a(t.min)||e.push(new qt({max:t.max,min:t.min})),new Bt(e)}const Yi={id:"input-point4d",type:"input",accept:(t,e)=>{if(!qi.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=>(function(t){return qi.isObject(t)?new qi(t.x,t.y,t.z,t.w):new qi}),constraint:t=>(function(t){return new gi({assembly:$i,components:[Gi("x"in t?t.x:void 0),Gi("y"in t?t.y:void 0),Gi("z"in t?t.z:void 0),Gi("w"in t?t.w:void 0)]})})(t.params),equals:qi.equals,writer:t=>(function(t,e){t.writeProperty("x",e.x),t.writeProperty("y",e.y),t.writeProperty("z",e.z),t.writeProperty("w",e.w)})},controller:t=>{const e=t.value,n=t.constraint;if(!(n instanceof gi))throw c.shouldNeverHappen();return new yi(t.document,{assembly:$i,axes:e.rawValue.getComponents().map((t,e)=>(function(t,e){return{baseStep:an(e),constraint:e,textProps:M.fromObject({draggingScale:ln(e,t),formatter:Pe(sn(e,t))})}})(t,n.components[e])),parser:ye,value:e,viewProps:t.viewProps})}},Wi={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=>Me,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:M.fromObject({options:null!==(e=on(r))&&void 0!==e?e:[]}),value:i,viewProps:t.viewProps}):new ee(n,{parser:t=>t,props:M.fromObject({formatter:Ve}),value:i,viewProps:t.viewProps})}},Qi={monitor:{defaultInterval:200,defaultLineCount:3}},Xi=m("mll");class Zi{constructor(t,e){this.onValueUpdate_=this.onValueUpdate_.bind(this),this.formatter_=e.formatter,this.element=t.createElement("div"),this.element.classList.add(Xi()),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("textarea");n.classList.add(Xi("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 Ji{constructor(t,e){this.value=e.value,this.viewProps=e.viewProps,this.view=new Zi(t,{formatter:e.formatter,lineCount:e.lineCount,value:this.value,viewProps:this.viewProps})}}const tr=m("sgl");class er{constructor(t,e){this.onValueUpdate_=this.onValueUpdate_.bind(this),this.formatter_=e.formatter,this.element=t.createElement("div"),this.element.classList.add(tr()),e.viewProps.bindClassModifiers(this.element);const n=t.createElement("input");n.classList.add(tr("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 nr{constructor(t,e){this.value=e.value,this.viewProps=e.viewProps,this.view=new er(t,{formatter:e.formatter,value:this.value,viewProps:this.viewProps})}}const ir={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 nr(t.document,{formatter:ie,value:t.value,viewProps:t.viewProps}):new Ji(t.document,{formatter:ie,lineCount:null!==(e=t.params.lineCount)&&void 0!==e?e:Qi.monitor.defaultLineCount,value:t.value,viewProps:t.viewProps})}};class rr{constructor(){this.emitter=new u,this.index_=-1}get index(){return this.index_}set index(t){this.index_!==t&&(this.index_=t,this.emitter.emit("change",{index:t,sender:this}))}}const or=m("grl");class sr{constructor(t,e){this.onCursorChange_=this.onCursorChange_.bind(this),this.onValueUpdate_=this.onValueUpdate_.bind(this),this.element=t.createElement("div"),this.element.classList.add(or()),e.viewProps.bindClassModifiers(this.element),this.formatter_=e.formatter,this.minValue_=e.minValue,this.maxValue_=e.maxValue,this.cursor_=e.cursor,this.cursor_.emitter.on("change",this.onCursorChange_);const n=t.createElementNS(T,"svg");n.classList.add(or("g")),n.style.height=`calc(var(--bld-us) * ${e.lineCount})`,this.element.appendChild(n),this.svgElem_=n;const i=t.createElementNS(T,"polyline");this.svgElem_.appendChild(i),this.lineElem_=i;const r=t.createElement("div");r.classList.add(or("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.minValue_,i=this.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_.index];if(void 0===s)return void o.classList.remove(or("t","a"));const a=Ie(this.cursor_.index,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(or("t","a"))||(o.classList.add(or("t","a"),or("t","in")),o.classList.remove(or("t","in")))}onValueUpdate_(){this.update_()}onCursorChange_(){this.update_()}}class ar{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.value=e.value,this.viewProps=e.viewProps,this.cursor_=new rr,this.view=new sr(t,{cursor:this.cursor_,formatter:e.formatter,lineCount:e.lineCount,maxValue:e.maxValue,minValue:e.minValue,value:this.value,viewProps:this.viewProps}),O(t)){const t=new Fe(this.view.element);t.emitter.on("down",this.onGraphPointerDown_),t.emitter.on("move",this.onGraphPointerMove_),t.emitter.on("up",this.onGraphPointerUp_)}else this.view.element.addEventListener("mousemove",this.onGraphMouseMove_),this.view.element.addEventListener("mouseleave",this.onGraphMouseLeave_)}onGraphMouseLeave_(){this.cursor_.index=-1}onGraphMouseMove_(t){const e=this.view.element.getBoundingClientRect();this.cursor_.index=Math.floor(Ie(t.offsetX,0,e.width,0,this.value.rawValue.length))}onGraphPointerDown_(t){this.onGraphPointerMove_(t)}onGraphPointerMove_(t){this.cursor_.index=t.data.point?Math.floor(Ie(t.data.point.x,0,t.data.bounds.width,0,this.value.rawValue.length)):-1}onGraphPointerUp_(){this.cursor_.index=-1}}function lr(t){return"format"in t&&!a(t.format)?t.format:Pe(2)}function pr(t){return"view"in t&&"graph"===t.view}const cr={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=>pr(t)?64:1,reader:t=>xe},controller:t=>pr(t.params)?function(t){var e,n,i;return new ar(t.document,{formatter:lr(t.params),lineCount:null!==(e=t.params.lineCount)&&void 0!==e?e:Qi.monitor.defaultLineCount,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 nr(t.document,{formatter:lr(t.params),value:t.value,viewProps:t.viewProps}):new Ji(t.document,{formatter:lr(t.params),lineCount:null!==(e=t.params.lineCount)&&void 0!==e?e:Qi.monitor.defaultLineCount,value:t.value,viewProps:t.viewProps})}(t)},dr={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=>Me},controller:t=>{var e;const n=t.value;return n.rawValue.length>1||"multiline"in t.params&&t.params.multiline?new Ji(t.document,{formatter:Ve,lineCount:null!==(e=t.params.lineCount)&&void 0!==e?e:Qi.monitor.defaultLineCount,value:n,viewProps:t.viewProps}):new nr(t.document,{formatter:Ve,value:n,viewProps:t.viewProps})}};class hr{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 ur{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 vr(t,e){return 0===e?new Ut:new Kt(t,null!=e?e:Qi.monitor.defaultInterval)}class mr{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)=>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 hr({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:St.create({disabled:c,hidden:d})}),u=i.optional.string(e.params.label).value;return new it(e.document,{binding:p,blade:Q(),props:M.fromObject({label: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)=>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 ur({reader:l,target:e.target,ticker:vr(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:St.create({disabled:h,hidden:u})}),m=null!==(r=o.optional.string(e.params.label).value)&&void 0!==r?r:e.target.key;return new ot(e.document,{binding:d,blade:Q(),props:M.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)=>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:Q(),document:e.document,params:s(Object.assign(Object.assign({},n.params),{disabled:i,hidden:r})),viewProps:St.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 it)return new nt(t);if(t instanceof ot)return new rt(t);if(t instanceof ft)return new pt(t,this);const e=this.pluginsMap_.blades.reduce((e,n)=>e||n.api({controller:t,pool:this}),null);if(!e)throw c.shouldNeverHappen();return e}}class fr 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 gr 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 _r={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:M.fromObject({options:nn(t.params.options)}),value:E(t.params.value),viewProps:t.viewProps});return new yt(t.document,{blade:t.blade,props:M.fromObject({label:t.params.label}),valueController:e})},api:t=>t.controller instanceof yt&&t.controller.valueController instanceof Wt?new fr(t.controller):null};class wr extends ct{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(it).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(it).map(t=>t.binding.target))}refresh(){this.controller_.rackController.rack.find(it).forEach(t=>{t.binding.read()}),this.controller_.rackController.rack.find(ot).forEach(t=>{t.binding.read()})}}class yr extends _t{constructor(t,e){super(t,{expanded:e.expanded,blade:e.blade,props:e.props,root:!0,viewProps:e.viewProps})}}const xr={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:M.fromObject({maxValue:t.params.max,minValue:t.params.min}),textProps:M.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 yt(t.document,{blade:t.blade,props:M.fromObject({label:t.params.label}),valueController:r})},api:t=>t.controller instanceof yt&&t.controller.valueController instanceof Xe?new br(t.controller):null},Cr={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:M.fromObject({formatter:null!==(e=t.params.format)&&void 0!==e?e:t=>String(t)}),value:E(t.params.value),viewProps:t.viewProps});return new yt(t.document,{blade:t.blade,props:M.fromObject({label:t.params.label}),valueController:n})},api:t=>t.controller instanceof yt&&t.controller.valueController instanceof ee?new gr(t.controller):null};function Pr(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 kr=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.0.5");t.BladeApi=e,t.ButtonApi=h,t.FolderApi=ct,t.InputBindingApi=nt,t.ListApi=fr,t.MonitorBindingApi=rt,t.Pane=class extends wr{constructor(t){var e;const n=t||{},i=null!==(e=n.document)&&void 0!==e?e:s(N()).document,r=function(){const t=new mr;return[Ii,zi,Yi,Wi,Pi,bi,fi,mi,hn,ir,dr,cr,Y,wt,Et,It].forEach(e=>{t.register(e)}),t}();super(new yr(i,{expanded:n.expanded,blade:Q(),props:M.fromObject({title:n.title}),viewProps:St.create()}),r),this.pool_=r,this.containerElem_=n.container||function(t){const e=t.createElement("div");return e.classList.add(m("dfw")()),t.body&&t.body.appendChild(e),e}(i),this.containerElem_.appendChild(this.element),this.doc_=i,this.usesDefaultWrapper_=!n.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&&Pr(this.document,`plugin-${t.id}`,t.css)}setUpDefaultPlugins_(){Pr(this.document,"default",".tp-lstv_s,.tp-btnv_b,.tp-p2dv_b,.tp-colswv_sw,.tp-p2dpv_p,.tp-txtv_i,.tp-grlv_g,.tp-sglv_i,.tp-mllv_i,.tp-fldv_b,.tp-rotv_b,.tp-ckbv_i,.tp-coltxtv_ms,.tp-tbiv_b{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;font-family:inherit;font-size:inherit;font-weight:inherit;margin:0;outline:none;padding:0}.tp-lstv_s,.tp-btnv_b,.tp-p2dv_b{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-lstv_s:hover,.tp-btnv_b:hover,.tp-p2dv_b:hover{background-color:var(--btn-bg-h)}.tp-lstv_s:focus,.tp-btnv_b:focus,.tp-p2dv_b:focus{background-color:var(--btn-bg-f)}.tp-lstv_s:active,.tp-btnv_b:active,.tp-p2dv_b:active{background-color:var(--btn-bg-a)}.tp-lstv_s:disabled,.tp-btnv_b:disabled,.tp-p2dv_b:disabled{opacity:0.5}.tp-colswv_sw,.tp-p2dpv_p,.tp-txtv_i{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-colswv_sw:hover,.tp-p2dpv_p:hover,.tp-txtv_i:hover{background-color:var(--in-bg-h)}.tp-colswv_sw:focus,.tp-p2dpv_p:focus,.tp-txtv_i:focus{background-color:var(--in-bg-f)}.tp-colswv_sw:active,.tp-p2dpv_p:active,.tp-txtv_i:active{background-color:var(--in-bg-a)}.tp-colswv_sw:disabled,.tp-p2dpv_p:disabled,.tp-txtv_i:disabled{opacity:0.5}.tp-grlv_g,.tp-sglv_i,.tp-mllv_i{background-color:var(--mo-bg);border-radius:var(--elm-br);box-sizing:border-box;color:var(--mo-fg);height:var(--bld-us);width:100%}.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, #2f3137);--bs-sh: var(--tp-base-shadow-color, rgba(0,0,0,0.2));--btn-bg: var(--tp-button-background-color, #adafb8);--btn-bg-a: var(--tp-button-background-color-active, #d6d7db);--btn-bg-f: var(--tp-button-background-color-focus, #c8cad0);--btn-bg-h: var(--tp-button-background-color-hover, #bbbcc4);--btn-fg: var(--tp-button-foreground-color, #2f3137);--cnt-bg: var(--tp-container-background-color, rgba(187,188,196,0.1));--cnt-bg-a: var(--tp-container-background-color-active, rgba(187,188,196,0.25));--cnt-bg-f: var(--tp-container-background-color-focus, rgba(187,188,196,0.2));--cnt-bg-h: var(--tp-container-background-color-hover, rgba(187,188,196,0.15));--cnt-fg: var(--tp-container-foreground-color, #bbbcc4);--in-bg: var(--tp-input-background-color, rgba(0,0,0,0.2));--in-bg-a: var(--tp-input-background-color-active, rgba(0,0,0,0.35));--in-bg-f: var(--tp-input-background-color-focus, rgba(0,0,0,0.3));--in-bg-h: var(--tp-input-background-color-hover, rgba(0,0,0,0.25));--in-fg: var(--tp-input-foreground-color, #bbbcc4);--lbl-fg: var(--tp-label-foreground-color, rgba(187,188,196,0.7));--mo-bg: var(--tp-monitor-background-color, rgba(0,0,0,0.2));--mo-fg: var(--tp-monitor-foreground-color, rgba(187,188,196,0.7));--grv-fg: var(--tp-groove-foreground-color, rgba(0,0,0,0.2))}.tp-fldv_c>.tp-cntv.tp-v-lst,.tp-tabv_c .tp-brkv>.tp-cntv.tp-v-lst,.tp-rotv_c>.tp-cntv.tp-v-lst{margin-bottom:calc(-1 * var(--cnt-v-p))}.tp-fldv_c>.tp-fldv.tp-v-lst .tp-fldv_c,.tp-tabv_c .tp-brkv>.tp-fldv.tp-v-lst .tp-fldv_c,.tp-rotv_c>.tp-fldv.tp-v-lst .tp-fldv_c{border-bottom-left-radius:0}.tp-fldv_c>.tp-fldv.tp-v-lst .tp-fldv_b,.tp-tabv_c .tp-brkv>.tp-fldv.tp-v-lst .tp-fldv_b,.tp-rotv_c>.tp-fldv.tp-v-lst .tp-fldv_b{border-bottom-left-radius:0}.tp-fldv_c>*:not(.tp-v-fst),.tp-tabv_c .tp-brkv>*:not(.tp-v-fst),.tp-rotv_c>*:not(.tp-v-fst){margin-top:var(--bld-s)}.tp-fldv_c>.tp-sprv:not(.tp-v-fst),.tp-tabv_c .tp-brkv>.tp-sprv:not(.tp-v-fst),.tp-rotv_c>.tp-sprv:not(.tp-v-fst),.tp-fldv_c>.tp-cntv:not(.tp-v-fst),.tp-tabv_c .tp-brkv>.tp-cntv:not(.tp-v-fst),.tp-rotv_c>.tp-cntv:not(.tp-v-fst){margin-top:var(--cnt-v-p)}.tp-fldv_c>.tp-sprv+*:not(.tp-v-hidden),.tp-tabv_c .tp-brkv>.tp-sprv+*:not(.tp-v-hidden),.tp-rotv_c>.tp-sprv+*:not(.tp-v-hidden),.tp-fldv_c>.tp-cntv+*:not(.tp-v-hidden),.tp-tabv_c .tp-brkv>.tp-cntv+*:not(.tp-v-hidden),.tp-rotv_c>.tp-cntv+*:not(.tp-v-hidden){margin-top:var(--cnt-v-p)}.tp-fldv_c>.tp-sprv:not(.tp-v-hidden)+.tp-sprv,.tp-tabv_c .tp-brkv>.tp-sprv:not(.tp-v-hidden)+.tp-sprv,.tp-rotv_c>.tp-sprv:not(.tp-v-hidden)+.tp-sprv,.tp-fldv_c>.tp-cntv:not(.tp-v-hidden)+.tp-cntv,.tp-tabv_c .tp-brkv>.tp-cntv:not(.tp-v-hidden)+.tp-cntv,.tp-rotv_c>.tp-cntv:not(.tp-v-hidden)+.tp-cntv{margin-top:0}.tp-fldv_c>.tp-cntv,.tp-tabv_c .tp-brkv>.tp-cntv{margin-left:4px}.tp-fldv_c>.tp-fldv>.tp-fldv_b,.tp-tabv_c .tp-brkv>.tp-fldv>.tp-fldv_b{border-top-left-radius:var(--elm-br);border-bottom-left-radius:var(--elm-br)}.tp-fldv_c>.tp-fldv.tp-fldv-expanded>.tp-fldv_b,.tp-tabv_c .tp-brkv>.tp-fldv.tp-fldv-expanded>.tp-fldv_b{border-bottom-left-radius:0}.tp-fldv_c .tp-fldv>.tp-fldv_c,.tp-tabv_c .tp-brkv .tp-fldv>.tp-fldv_c{border-bottom-left-radius:var(--elm-br)}.tp-fldv_c>.tp-tabv>.tp-tabv_i,.tp-tabv_c .tp-brkv>.tp-tabv>.tp-tabv_i{border-top-left-radius:var(--elm-br)}.tp-fldv_c .tp-tabv>.tp-tabv_c,.tp-tabv_c .tp-brkv .tp-tabv>.tp-tabv_c{border-bottom-left-radius:var(--elm-br)}.tp-fldv_b,.tp-rotv_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:calc(var(--cnt-h-p) + 8px);padding-right:calc(2px * 2 + 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-fldv_b:hover,.tp-rotv_b:hover{background-color:var(--cnt-bg-h)}.tp-fldv_b:focus,.tp-rotv_b:focus{background-color:var(--cnt-bg-f)}.tp-fldv_b:active,.tp-rotv_b:active{background-color:var(--cnt-bg-a)}.tp-fldv_b:disabled,.tp-rotv_b:disabled{opacity:0.5}.tp-fldv_m,.tp-rotv_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:0.5;position:absolute;top:0;transform:rotate(90deg);transition:transform .2s ease-in-out;width:6px}.tp-fldv.tp-fldv-expanded>.tp-fldv_b>.tp-fldv_m,.tp-rotv.tp-rotv-expanded .tp-rotv_m{transform:none}.tp-fldv_c,.tp-rotv_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-fldv.tp-fldv-cpl:not(.tp-fldv-expanded)>.tp-fldv_c,.tp-rotv.tp-rotv-cpl:not(.tp-rotv-expanded) .tp-rotv_c{display:none}.tp-fldv.tp-fldv-expanded>.tp-fldv_c,.tp-rotv.tp-rotv-expanded .tp-rotv_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-coltxtv_m,.tp-lstv{position:relative}.tp-lstv_s{padding:0 20px 0 4px;width:100%}.tp-coltxtv_mm,.tp-lstv_m{bottom:0;margin:auto;pointer-events:none;position:absolute;right:2px;top:0}.tp-coltxtv_mm svg,.tp-lstv_m svg{bottom:0;height:16px;margin:auto;position:absolute;right:0;top:0;width:16px}.tp-coltxtv_mm svg path,.tp-lstv_m svg path{fill:currentColor}.tp-coltxtv_w,.tp-pndtxtv{display:flex}.tp-coltxtv_c,.tp-pndtxtv_a{width:100%}.tp-coltxtv_c+.tp-coltxtv_c,.tp-pndtxtv_a+.tp-coltxtv_c,.tp-coltxtv_c+.tp-pndtxtv_a,.tp-pndtxtv_a+.tp-pndtxtv_a{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:0.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,0.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,0.75) solid 2px;box-shadow:0 0 2px rgba(0,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,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,0.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)}.tp-colswv.tp-v-disabled{opacity:0.5}.tp-colswv_b{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border-width:0;cursor:pointer;display:block;height:var(--bld-us);left:0;margin:0;outline:none;padding:0;position:absolute;top:0;width:var(--bld-us)}.tp-colswv_b:focus::after{border:rgba(255,255,255,0.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_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 0.05s, top 0.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:0.5}.tp-grlv .tp-ttv{background-color:var(--mo-fg)}.tp-grlv .tp-ttv::before{border-top-color:var(--mo-fg)}.tp-lblv{align-items:center;display:flex;line-height:1.3;padding-left:var(--cnt-h-p);padding-right:var(--cnt-h-p)}.tp-lblv.tp-lblv-nol{display:block}.tp-lblv_l{color:var(--lbl-fg);flex:1;-webkit-hyphens:auto;-ms-hyphens:auto;hyphens:auto;overflow:hidden;padding-left:4px;padding-right:16px}.tp-lblv.tp-v-disabled .tp-lblv_l{opacity:0.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:0.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:0.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:0.1;stroke:var(--in-fg);stroke-dasharray:1}.tp-p2dpv_l{opacity:0.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:0.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:0.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:0.5}.tp-tbiv_t{color:var(--cnt-fg);height:calc(var(--bld-us) + 4px);line-height:calc(var(--bld-us) + 4px);opacity:0.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:0.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:0.1;position:absolute;top:0;transition:border-radius 0.1s, height 0.1s, transform 0.1s, width 0.1s;width:2px}.tp-txtv_k:hover::before,.tp-txtv.tp-txtv-drg .tp-txtv_k::before{opacity:1}.tp-txtv.tp-txtv-drg .tp-txtv_k::before{border-radius:50%;height:4px;transform:translateX(-1px);width:4px}.tp-txtv_g{bottom:0;display:block;height:8px;left:50%;margin:auto;overflow:visible;pointer-events:none;position:absolute;top:0;visibility:hidden;width:100%}.tp-txtv.tp-txtv-drg .tp-txtv_g{visibility:visible}.tp-txtv_gb{fill:none;stroke:var(--in-fg);stroke-dasharray:1}.tp-txtv_gh{fill:none;stroke:var(--in-fg)}.tp-txtv .tp-ttv{margin-left:6px;visibility:hidden}.tp-txtv.tp-txtv-drg .tp-ttv{visibility:visible}.tp-ttv{background-color:var(--in-fg);border-radius:var(--elm-br);color:var(--bs-bg);padding:2px 4px;pointer-events:none;position:absolute;transform:translate(-50%, -100%)}.tp-ttv::before{border-color:var(--in-fg) transparent transparent transparent;border-style:solid;border-width:2px;box-sizing:border-box;content:'';font-size:0.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(2px * 2 + 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:[xr,_r,It,Cr]})}},t.SeparatorApi=xt,t.SliderApi=br,t.TabApi=Tt,t.TabPageApi=jt,t.TextApi=gr,t.TpChangeEvent=i,t.VERSION=kr,Object.defineProperty(t,"__esModule",{value:!0})},"object"==typeof n&&void 0!==e?r(n):"function"==typeof define&&define.amd?define(["exports"],r):r((i="undefined"!=typeof globalThis?globalThis:i||self).Tweakpane={})},{}],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,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL0FwcERhdGEvUm9hbWluZy9ucG0vbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gtY2xpL25vZGVfbW9kdWxlcy9icm93c2VyLXBhY2svX3ByZWx1ZGUuanMiLCJob2xhMy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoLXV0aWwvbGliL3dyYXAuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL21hdGguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC11dGlsL3JhbmRvbS5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL29iamVjdC1hc3NpZ24vaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9yaWdodC1ub3cvYnJvd3Nlci5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2lzLXByb21pc2UvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9pcy1kb20vaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi91dGlsLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvcmVwZWF0LXN0cmluZy9pbmRleC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RlZXAtZXF1YWwvbGliL2tleXMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9kZWVwLWVxdWFsL2xpYi9pc19hcmd1bWVudHMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9kZWVwLWVxdWFsL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZGF0ZWZvcm1hdC9saWIvZGF0ZWZvcm1hdC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL3BhZC1sZWZ0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvc2F2ZS5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2FjY2Vzc2liaWxpdHkuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9wYXBlci1zaXplcy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbm9kZV9tb2R1bGVzL2RlZmluZWQvaW5kZXguanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL25vZGVfbW9kdWxlcy9jb252ZXJ0LWxlbmd0aC9jb252ZXJ0LWxlbmd0aC5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2Rpc3RhbmNlcy5qcyIsIm5vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2Rpc3Qvbm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvbGliL2NvcmUvcmVzaXplQ2FudmFzLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9ub2RlX21vZHVsZXMvZ2V0LWNhbnZhcy1jb250ZXh0L2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvY29yZS9jcmVhdGVDYW52YXMuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jb3JlL1NrZXRjaE1hbmFnZXIuanMiLCJub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9kaXN0L25vZGVfbW9kdWxlcy9jYW52YXMtc2tldGNoL2xpYi9jb3JlL2tleWJvYXJkU2hvcnRjdXRzLmpzIiwibm9kZV9tb2R1bGVzL2NhbnZhcy1za2V0Y2gvZGlzdC9ub2RlX21vZHVsZXMvY2FudmFzLXNrZXRjaC9saWIvY2FudmFzLXNrZXRjaC5qcyIsIm5vZGVfbW9kdWxlcy9kZWZpbmVkL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NlZWQtcmFuZG9tL2luZGV4LmpzIiwibm9kZV9tb2R1bGVzL3NpbXBsZXgtbm9pc2Uvc2ltcGxleC1ub2lzZS5qcyIsIm5vZGVfbW9kdWxlcy90d2Vha3BhbmUvZGlzdC90d2Vha3BhbmUuanMiLCJjYW52YXMtc2tldGNoLWNsaS9pbmplY3RlZC9zdG9yYWdlLWtleS5qcyJdLCJuYW1lcyI6WyJyIiwiZSIsIm4iLCJ0IiwibyIsImkiLCJmIiwiYyIsInJlcXVpcmUiLCJ1IiwiYSIsIkVycm9yIiwiY29kZSIsInAiLCJleHBvcnRzIiwiY2FsbCIsImxlbmd0aCIsIjEiLCJtb2R1bGUiLCJjYW52YXNTa2V0Y2giLCJyYW5kb20iLCJtYXRoIiwiVHdlYWtwYW5lIiwic2V0dGluZ3MiLCJkaW1lbnNpb25zIiwiYW5pbWF0ZSIsInBhcmFtcyIsImNvbHMiLCJyb3dzIiwic2NhbGVNaW4iLCJzY2FsZU1heCIsImZyZXEiLCJhbXAiLCJmcmFtZSIsImxpbmVDYXAiLCJza2V0Y2giLCJpbWciLCJJbWFnZSIsInNyYyIsImF1ZGlvIiwiQXVkaW8iLCJwbGF5IiwibXVzaWMiLCJsb29wIiwicGxheWJhY2tSYXRlIiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwiTWF0aCIsImZsb29yIiwiY29udGV4dCIsIndpZHRoIiwiaGVpZ2h0IiwiZmlsbFN0eWxlIiwiZmlsbFJlY3QiLCJudW1DZWxscyIsImdyaWR3IiwiZ3JpZGgiLCJjZWxsdyIsImNlbGxoIiwibWFyZ3giLCJtYXJneSIsIngiLCJ5IiwidyIsIm5vaXNlM0QiLCJhbmdsZSIsIlBJIiwibWFwUmFuZ2UiLCJzYXZlIiwidHJhbnNsYXRlIiwicm90YXRlIiwiZHJhd0ltYWdlIiwiYmVnaW5QYXRoIiwibW92ZVRvIiwibGluZVRvIiwic3Ryb2tlIiwicmVzdG9yZSIsInBhbmUiLCJQYW5lIiwiZm9sZGVyIiwiYWRkRm9sZGVyIiwidGl0bGUiLCJhZGRJbnB1dCIsIm1pbiIsIm1heCIsInN0ZXAiLCJjcmVhdGVQYW5lIiwiYXN5bmMiLCJtYW5hZ2VyIiwic3RhcnQiLCJ2YWx1ZSIsImZyb20iLCJ0byIsIlR5cGVFcnJvciIsImN5Y2xlIiwiZGVmaW5lZCIsIndyYXAiLCJFUFNJTE9OIiwiTnVtYmVyIiwiY2xhbXAiLCJsZXJwIiwiaW52ZXJzZUxlcnAiLCJhYnMiLCJ0b0Zpbml0ZSIsImRlZmF1bHRWYWx1ZSIsImlzRmluaXRlIiwiZXhwYW5kVmVjdG9yIiwiZGltcyIsInNjYWxhciIsIm91dCIsImxlcnBBcnJheSIsIm5ld0FycmF5IiwiaW5pdGlhbFZhbHVlIiwicHVzaCIsIm1vZCIsImIiLCJkYW1wIiwibGFtYmRhIiwiZHQiLCJleHAiLCJmcmFjdCIsInNpZ24iLCJkZWdUb1JhZCIsInJhZFRvRGVnIiwicGluZ1BvbmciLCJsaW5zcGFjZSIsIm9wdHMiLCJlbmRwb2ludCIsIm9mZnNldCIsIm1hcCIsIl8iLCJsZXJwRnJhbWVzIiwidmFsdWVzIiwibGVuIiwid2hvbGUiLCJuZXh0RnJhbWUiLCJBcnJheSIsImlzQXJyYXkiLCJjbGFtcDAxIiwidiIsInNtb290aHN0ZXAiLCJkYW1wQXJyYXkiLCJpbnB1dE1pbiIsImlucHV0TWF4Iiwib3V0cHV0TWluIiwib3V0cHV0TWF4Iiwib3V0VmFsIiwiZXhwYW5kMkQiLCJleHBhbmQzRCIsImV4cGFuZDREIiwic2VlZFJhbmRvbSIsIlNpbXBsZXhOb2lzZSIsImNyZWF0ZVJhbmRvbSIsImRlZmF1bHRTZWVkIiwiY3VycmVudFNlZWQiLCJjdXJyZW50UmFuZG9tIiwibm9pc2VHZW5lcmF0b3IiLCJkZWZhdWx0UmFuZG9tIiwiX25leHRHYXVzc2lhbiIsIl9oYXNOZXh0R2F1c3NpYW4iLCJzZXRTZWVkIiwiZ2V0U2VlZCIsImdldFJhbmRvbVNlZWQiLCJTdHJpbmciLCJ2YWx1ZU5vblplcm8iLCJwZXJtdXRlTm9pc2UiLCJjcmVhdGVOb2lzZSIsIm5vaXNlMUQiLCJmcmVxdWVuY3kiLCJhbXBsaXR1ZGUiLCJub2lzZTJEIiwieiIsIm5vaXNlNEQiLCJib29sZWFuIiwiY2hhbmNlIiwicmFuZ2UiLCJyYW5nZUZsb29yIiwicGljayIsImFycmF5Iiwic2h1ZmZsZSIsImFyciIsInJhbmQiLCJ0bXAiLCJyZXQiLCJzbGljZSIsIm9uQ2lyY2xlIiwiaW5zaWRlQ2lyY2xlIiwicmFkaXVzIiwic3FydCIsIm9uU3BoZXJlIiwicGhpIiwidGhldGEiLCJhY29zIiwic2luIiwiY29zIiwiaW5zaWRlU3BoZXJlIiwiayIsImNicnQiLCJxdWF0ZXJuaW9uIiwidTEiLCJ1MiIsInUzIiwic3ExIiwic3EyIiwidGhldGExIiwidGhldGEyIiwid2VpZ2h0ZWQiLCJ3ZWlnaHRlZFNldCIsInNldCIsIndlaWdodGVkU2V0SW5kZXgiLCJnYXVzc2lhbiIsIm1lYW4iLCJzdGFuZGFyZERlcml2YXRpb24iLCJyZXN1bHQiLCJ2MSIsInYyIiwicyIsIm11bHRpcGxpZXIiLCJsb2ciLCJzZWVkIiwib3B0IiwidW5kZWZpbmVkIiwid2VpZ2h0Iiwid2VpZ2h0cyIsInRvdGFsV2VpZ2h0IiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwiT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJwcm90b3R5cGUiLCJwcm9wSXNFbnVtZXJhYmxlIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJvYmplY3RBc3NpZ24iLCJhc3NpZ24iLCJ0ZXN0MSIsImdldE93blByb3BlcnR5TmFtZXMiLCJ0ZXN0MiIsImZyb21DaGFyQ29kZSIsImpvaW4iLCJ0ZXN0MyIsInNwbGl0IiwiZm9yRWFjaCIsImxldHRlciIsImtleXMiLCJlcnIiLCJzaG91bGRVc2VOYXRpdmUiLCJ0YXJnZXQiLCJzb3VyY2UiLCJzeW1ib2xzIiwidmFsIiwidG9PYmplY3QiLCJhcmd1bWVudHMiLCJrZXkiLCJicm93c2VyIiwiY29tbW9uanNHbG9iYWwiLCJwZXJmb3JtYW5jZSIsIm5vdyIsIkRhdGUiLCJpc1Byb21pc2VfMSIsIm9iaiIsInRoZW4iLCJpc0RvbSIsIndpbmRvdyIsIk5vZGUiLCJub2RlVHlwZSIsIm5vZGVOYW1lIiwiZ2V0Q2xpZW50QVBJIiwiYXJndW1lbnRzJDEiLCJpc0Jyb3dzZXIiLCJjYWNoZSIsInNoaW0iLCJzdXBwb3J0c0FyZ3VtZW50c0NsYXNzIiwidG9TdHJpbmciLCJzdXBwb3J0ZWQiLCJvYmplY3QiLCJ1bnN1cHBvcnRlZCIsInBTbGljZSIsImRlZXBFcXVhbCIsImFjdHVhbCIsImV4cGVjdGVkIiwiZ2V0VGltZSIsInN0cmljdCIsImlzVW5kZWZpbmVkT3JOdWxsIiwiaXNfYXJndW1lbnRzIiwiaXNCdWZmZXIiLCJrYSIsImtiIiwic29ydCIsIm9iakVxdWl2IiwiY29weSIsImdsb2JhbCIsInRva2VuIiwidGltZXpvbmUiLCJ0aW1lem9uZUNsaXAiLCJkYXRlRm9ybWF0IiwiZGF0ZSIsIm1hc2siLCJ1dGMiLCJnbXQiLCJ0b0xvd2VyQ2FzZSIsInRlc3QiLCJpc05hTiIsIm1hc2tTbGljZSIsIm1hc2tzIiwiZCIsIkQiLCJtIiwiSCIsIk0iLCJMIiwiZ2V0VGltZXpvbmVPZmZzZXQiLCJXIiwidGFyZ2V0VGh1cnNkYXkiLCJnZXRGdWxsWWVhciIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsInNldERhdGUiLCJnZXREYXkiLCJmaXJzdFRodXJzZGF5IiwiZHMiLCJzZXRIb3VycyIsImdldEhvdXJzIiwiZ2V0V2VlayIsIk4iLCJkb3ciLCJnZXREYXlPZldlZWsiLCJmbGFncyIsImRkIiwicGFkIiwiZGRkIiwiaTE4biIsImRheU5hbWVzIiwiZGRkZCIsIm1tIiwibW1tIiwibW9udGhOYW1lcyIsIm1tbW0iLCJ5eSIsInl5eXkiLCJoIiwiaGgiLCJISCIsIk1NIiwic3MiLCJsIiwicm91bmQiLCJ0aW1lTmFtZXMiLCJ0dCIsIlQiLCJUVCIsIloiLCJtYXRjaCIsInBvcCIsInJlcGxhY2UiLCJTIiwiZGVmYXVsdCIsInNob3J0RGF0ZSIsIm1lZGl1bURhdGUiLCJsb25nRGF0ZSIsImZ1bGxEYXRlIiwic2hvcnRUaW1lIiwibWVkaXVtVGltZSIsImxvbmdUaW1lIiwiaXNvRGF0ZSIsImlzb1RpbWUiLCJpc29EYXRlVGltZSIsImlzb1V0Y0RhdGVUaW1lIiwiZXhwaXJlc0hlYWRlckZvcm1hdCIsInJlcyIsInJlcGVhdFN0cmluZyIsInN0ciIsIm51bSIsInN1YnN0ciIsImxpbmsiLCJwYWRMZWZ0IiwiY2giLCJub29wIiwiZGVmYXVsdEV4dHMiLCJleHRlbnNpb24iLCJwcmVmaXgiLCJzdWZmaXgiLCJzdXBwb3J0ZWRFbmNvZGluZ3MiLCJzdHJlYW0iLCJpc1N0YXJ0IiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmaWxlbmFtZSIsInJlc29sdmVGaWxlbmFtZSIsImZ1bmMiLCJjbGllbnQiLCJvdXRwdXQiLCJldiIsInNhdmVEYXRhVVJMIiwiZGF0YVVSTCIsInNwbGl0SW5kZXgiLCJpbmRleE9mIiwiYmFzZTY0IiwiYnl0ZVN0cmluZyIsImF0b2IiLCJ0eXBlIiwibWltZU1hdGNoIiwiZXhlYyIsIm1pbWUiLCJhYiIsIkFycmF5QnVmZmVyIiwiaWEiLCJVaW50OEFycmF5IiwiY2hhckNvZGVBdCIsIkJsb2IiLCJjcmVhdGVCbG9iRnJvbURhdGFVUkwiLCJibG9iIiwic2F2ZUJsb2IiLCJjcmVhdGVFbGVtZW50Iiwic3R5bGUiLCJ2aXNpYmlsaXR5IiwiZG93bmxvYWQiLCJocmVmIiwiVVJMIiwiY3JlYXRlT2JqZWN0VVJMIiwiYm9keSIsImFwcGVuZENoaWxkIiwib25jbGljayIsInNldFRpbWVvdXQiLCJyZXZva2VPYmplY3RVUkwiLCJwYXJlbnRFbGVtZW50IiwicmVtb3ZlQ2hpbGQiLCJyZW1vdmVBdHRyaWJ1dGUiLCJjbGljayIsImZpbGUiLCJ0b3RhbEZyYW1lcyIsImxheWVyU3RyIiwidG90YWxMYXllcnMiLCJsYXllciIsImZpbHRlciIsIkJvb2xlYW4iLCJuYW1lIiwidGltZVN0YW1wIiwiaGFzaCIsImNvbW1vblR5cG9zIiwiZGltZW5zaW9uIiwiYW5pbWF0ZWQiLCJhbmltYXRpbmciLCJ1bml0IiwiUDUiLCJwaXhlbGxhdGVkIiwibG9vcGluZyIsInBpeGVsUGVySW5jaCIsImFsbEtleXMiLCJjaGVja1NldHRpbmdzIiwiY29uc29sZSIsIndhcm4iLCJpbmNsdWRlcyIsInBhcGVyU2l6ZXMiLCJyZWR1Y2UiLCJkaWN0IiwicHJlc2V0IiwiaXRlbSIsInVuaXRzIiwiZGVmaW5lZCQxIiwiY29udmVyc2lvbnMiLCJzeXN0ZW0iLCJmYWN0b3IiLCJjbSIsInB0IiwicGMiLCJpbiIsImZ0IiwiYW5jaG9ycyIsIm1ldHJpYyIsInJhdGlvIiwiaW1wZXJpYWwiLCJjb252ZXJ0TGVuZ3RoIiwiZnJvbVVuaXQiLCJ0b1VuaXQiLCJwaXhlbHNQZXJJbmNoIiwicHJlY2lzaW9uIiwicm91bmRQaXhlbCIsInRvRmFjdG9yIiwiZnJvbUZhY3RvciIsImlzVG9QaXhlbCIsImZyb21Vbml0RGF0YSIsInRvVW5pdERhdGEiLCJhbmNob3IiLCJkZWNpbWFscyIsImNvbnZlcnREaXN0YW5jZSQxIiwidW5pdHNGcm9tIiwidW5pdHNUbyIsInJlc2l6ZUNhbnZhcyIsInByb3BzIiwic3R5bGVXaWR0aCIsInN0eWxlSGVpZ2h0IiwiY2FudmFzV2lkdGgiLCJjYW52YXNIZWlnaHQiLCJoYXNEaW1lbnNpb25zIiwiY2hlY2tJZkhhc0RpbWVuc2lvbnMiLCJleHBvcnRpbmciLCJzY2FsZVRvRml0Iiwic2NhbGVUb1ZpZXciLCJwaXhlbFJhdGlvIiwiZXhwb3J0UGl4ZWxSYXRpbyIsImJsZWVkIiwiZGV2aWNlUGl4ZWxSYXRpbyIsImJhc2VQaXhlbFJhdGlvIiwibWF4UGl4ZWxSYXRpbyIsInRyaW1XaWR0aCIsInRyaW1IZWlnaHQiLCJyZWYiLCJlbGVtZW50IiwicGFyZW50IiwiaW5uZXJXaWR0aCIsImlubmVySGVpZ2h0IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0UGFyZW50U2l6ZSIsInBhcmVudFdpZHRoIiwicGFyZW50SGVpZ2h0IiwiZ2V0RGltZW5zaW9uc0Zyb21QcmVzZXQiLCJoaWdoZXN0IiwibG93ZXN0Iiwib3JpZW50YXRpb24iLCJsYW5kc2NhcGUiLCJyZWFsV2lkdGgiLCJyZWFsSGVpZ2h0IiwiYXNwZWN0Iiwid2luZG93QXNwZWN0Iiwic2NhbGVUb0ZpdFBhZGRpbmciLCJtYXhXaWR0aCIsIm1heEhlaWdodCIsImdldENhbnZhc0NvbnRleHRfMSIsImNhbnZhcyIsImdsIiwiYXR0cmlicyIsIm5hbWVzIiwiZ2V0Q29udGV4dCIsImNyZWF0ZUNhbnZhcyIsIm93bnNDYW52YXMiLCJuZXdDYW52YXMiLCJjcmVhdGVDYW52YXNFbGVtZW50IiwiYXR0cmlidXRlcyIsInBpeGVsYXRlZCIsImltYWdlU21vb3RoaW5nRW5hYmxlZCIsIm1vekltYWdlU21vb3RoaW5nRW5hYmxlZCIsIm9JbWFnZVNtb290aGluZ0VuYWJsZWQiLCJ3ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQiLCJtc0ltYWdlU21vb3RoaW5nRW5hYmxlZCIsIlNrZXRjaE1hbmFnZXIiLCJfc2V0dGluZ3MiLCJfcHJvcHMiLCJfc2tldGNoIiwiX3JhZiIsIl9yZWNvcmRUaW1lb3V0IiwiX2xhc3RSZWRyYXdSZXN1bHQiLCJfaXNQNVJlc2l6aW5nIiwiX2tleWJvYXJkU2hvcnRjdXRzIiwiaGFuZGxlciIsImVuYWJsZWQiLCJrZXlDb2RlIiwiYWx0S2V5IiwibWV0YUtleSIsImN0cmxLZXkiLCJ0b2dnbGVQbGF5IiwicHJldmVudERlZmF1bHQiLCJjb21taXQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwia2V5Ym9hcmRTaG9ydGN1dHMiLCJ0aGlzJDEiLCJob3RrZXlzIiwic2hpZnRLZXkiLCJyZWNvcmRpbmciLCJlbmRSZWNvcmQiLCJydW4iLCJyZWNvcmQiLCJleHBvcnRGcmFtZSIsInBsYXlpbmciLCJwYXVzZSIsIl9hbmltYXRlSGFuZGxlciIsIl9yZXNpemVIYW5kbGVyIiwicmVzaXplIiwicmVuZGVyIiwiZ2V0IiwidGhpcyIsIl9jb21wdXRlUGxheWhlYWQiLCJjdXJyZW50VGltZSIsImR1cmF0aW9uIiwiX2NvbXB1dGVGcmFtZSIsInBsYXloZWFkIiwidGltZSIsImZwcyIsIl9jb21wdXRlQ3VycmVudEZyYW1lIiwiX2dldFNpemVQcm9wcyIsInZpZXdwb3J0V2lkdGgiLCJ2aWV3cG9ydEhlaWdodCIsImRpc3Bvc2UiLCJzdGFydGVkIiwiX3NpZ25hbEJlZ2luIiwidGljayIsIl9jYW5jZWxUaW1lb3V0cyIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiX2xhc3RUaW1lIiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwiZXJyb3IiLCJzdG9wIiwiZGVsdGFUaW1lIiwiZXhwb3J0T3B0cyIsIl9jcmVhdGVFeHBvcnRPcHRpb25zIiwiZnJhbWVJbnRlcnZhbCIsIl9zaWduYWxFbmQiLCJiZWdpblJlY29yZCIsIl93cmFwQ29udGV4dFNjYWxlIiwiY2F0Y2giLCJyZXNwb25zZSIsImJlZ2luIiwiZW5kIiwid2FzUmVjb3JkaW5nIiwic2VxdWVuY2UiLCJlbmNvZGluZyIsImVuY29kaW5nUXVhbGl0eSIsImRhdGVmb3JtYXQiLCJhbGwiLCJwcmVFeHBvcnQiLCJjb21taXRPcHRzIiwiX2RvRXhwb3J0RnJhbWUiLCJkcmF3UmVzdWx0IiwiY29uY2F0IiwiaGFzRGF0YU9iamVjdCIsImRhdGEiLCJ0b0RhdGFVUkwiLCJleHBvcnRDYW52YXMiLCJsYXllckxpc3QiLCJjdXJPcHQiLCJzYXZlUGFyYW0iLCJzYXZlUHJvbWlzZSIsInBhcnRzIiwic2F2ZUZpbGUiLCJzYXZlUmVzdWx0Iiwic2F2ZWRFdmVudHMiLCJldmVudFdpdGhPdXRwdXQiLCJmaW5kIiwib3V0cHV0TmFtZSIsImlzQ2xpZW50Iiwic29tZSIsImlzU3RyZWFtaW5nIiwib2ZTZXEiLCJwb3N0RXhwb3J0IiwiY2IiLCJfcHJlUmVuZGVyIiwiX3Bvc3RSZW5kZXIiLCJwNSIsInNjYWxlIiwic2NhbGVYIiwic2NhbGVZIiwic2NhbGVDb250ZXh0IiwiZmx1c2giLCJyZWRyYXciLCJzdWJtaXREcmF3Q2FsbCIsInVwZGF0ZSIsIm5vdFlldFN1cHBvcnRlZCIsIm9sZENhbnZhcyIsIm9sZENvbnRleHQiLCJ0aW1lT3B0cyIsInRpbWVQcm9wcyIsImdldFRpbWVQcm9wcyIsIl9zZXR1cEdMS2V5IiwiX2FwcGVuZENhbnZhc0lmTmVlZGVkIiwiZHJhdyIsIm9sZFNpemVzIiwibmV3UHJvcHMiLCJwaXhlbERlbnNpdHkiLCJzdHlsZUNhbnZhcyIsIm5ld1NpemVzIiwiY2hhbmdlZCIsImRlZXBFcXVhbF8xIiwiX3NpemVDaGFuZ2VkIiwiZnJhbWVJbnRlcnZhbE1TIiwiZGVsdGFUaW1lTVMiLCJoYXNEdXJhdGlvbiIsImlzTmV3RnJhbWUiLCJuZXdUaW1lIiwidGltZVNjYWxlIiwiaXNGaW5pc2hlZCIsImlzTG9vcFN0YXJ0IiwibGFzdEZyYW1lIiwiZGlzcGF0Y2giLCJtb3VudCIsInVubW91bnQiLCJkZXRhY2giLCJjdHgiLCJjbGVhciIsImNsZWFyQ29sb3IiLCJidWZmZXJEYXRhIiwiaGFzVG90YWxGcmFtZXMiLCJ0b3RhbEZyYW1lc0Zyb21EdXJhdGlvbiIsImR1cmF0aW9uRnJvbVRvdGFsRnJhbWVzIiwiSW5maW5pdHkiLCJzdGFydFRpbWUiLCJzdGFydEZyYW1lIiwiaGFzU3RhcnRUaW1lIiwiaGFzU3RhcnRGcmFtZSIsInNldHVwIiwibG9hZEFuZFJ1biIsIm5ld1NldHRpbmdzIiwibG9hZCIsInVubG9hZCIsImRlc3Ryb3kiLCJjcmVhdGVTa2V0Y2giLCJwcmVsb2FkIiwiUDVDb25zdHJ1Y3RvciIsInA1U2tldGNoIiwiaXNHTCIsInJlbmRlcmVyIiwiV0VCR0wiLCJQMkQiLCJub0xvb3AiLCJzZXRBdHRyaWJ1dGVzIiwiX3JlbmRlcmVyIiwiZHJhd2luZ0NvbnRleHQiLCJsb2FkZXIiLCJhdHRhY2giLCJtZXNzYWdlIiwiQ0FDSEUiLCJydW50aW1lQ29sbGlzaW9ucyIsImhvdElEIiwiaXNIb3QiLCJob3QiLCJpZCIsImlzSW5qZWN0aW5nIiwicHJldmlvdXNEYXRhIiwiY2FjaGVHZXQiLCJuZXh0Iiwib2xkTWFuYWdlciIsIlBhcGVyU2l6ZXMiLCJwb29sIiwiR0xPQkFMIiwic3RhcnRkZW5vbSIsInBvdyIsInNpZ25pZmljYW5jZSIsIm92ZXJmbG93Iiwib2xkUmFuZG9tIiwiQVJDNCIsImtleWxlbiIsIm1lIiwiaiIsImciLCJjb3VudCIsIm1peGtleSIsInNtZWFyIiwic3RyaW5nc2VlZCIsInRvc3RyaW5nIiwiYXBwbHkiLCJvcHRpb25zIiwiYXJjNCIsImZsYXR0ZW4iLCJkZXB0aCIsInByb3AiLCJ0eXAiLCJlbnRyb3B5IiwiY3J5cHRvIiwiZ2V0UmFuZG9tVmFsdWVzIiwibmF2aWdhdG9yIiwicGx1Z2lucyIsInNjcmVlbiIsImF1dG9zZWVkIiwicmVzZXRHbG9iYWwiLCJGMiIsIkcyIiwiRzMiLCJGNCIsIkc0IiwicmFuZG9tT3JTZWVkIiwiczAiLCJzMSIsInMyIiwibWFzaCIsImFsZWEiLCJidWlsZFBlcm11dGF0aW9uVGFibGUiLCJwZXJtIiwicGVybU1vZDEyIiwiYXV4IiwiZ3JhZDMiLCJGbG9hdDMyQXJyYXkiLCJncmFkNCIsInhpbiIsInlpbiIsImkxIiwiajEiLCJuMCIsIm4xIiwibjIiLCJ4MCIsInkwIiwieDEiLCJ5MSIsIngyIiwieTIiLCJpaSIsImpqIiwidDAiLCJnaTAiLCJ0MSIsImdpMSIsInQyIiwiZ2kyIiwiemluIiwibjMiLCJrMSIsImkyIiwiajIiLCJrMiIsInowIiwiejEiLCJ6MiIsIngzIiwieTMiLCJ6MyIsImtrIiwidDMiLCJnaTMiLCJuNCIsImwxIiwibDIiLCJpMyIsImozIiwiazMiLCJsMyIsIncwIiwicmFua3giLCJyYW5reSIsInJhbmt6IiwicmFua3ciLCJ3MSIsIncyIiwidzMiLCJ4NCIsInk0IiwiejQiLCJ3NCIsImxsIiwidDQiLCJnaTQiLCJfYnVpbGRQZXJtdXRhdGlvblRhYmxlIiwiZGVmaW5lIiwiYW1kIiwiZmFjdG9yeSIsIkJsYWRlQXBpIiwiW29iamVjdCBPYmplY3RdIiwiY29udHJvbGxlciIsImNvbnRyb2xsZXJfIiwiZGlzYWJsZWQiLCJ2aWV3UHJvcHMiLCJoaWRkZW4iLCJUcEV2ZW50IiwiVHBDaGFuZ2VFdmVudCIsInByZXNldEtleSIsImxhc3QiLCJzdXBlciIsIlRwVXBkYXRlRXZlbnQiLCJUcEZvbGRFdmVudCIsImV4cGFuZGVkIiwiZm9yY2VDYXN0IiwiaXNFbXB0eSIsImRlZXBFcXVhbHNBcnJheSIsImExIiwiYTIiLCJDUkVBVEVfTUVTU0FHRV9NQVAiLCJhbHJlYWR5ZGlzcG9zZWQiLCJpbnZhbGlkcGFyYW1zIiwibm9tYXRjaGluZ2NvbnRyb2xsZXIiLCJub21hdGNoaW5ndmlldyIsIkpTT04iLCJzdHJpbmdpZnkiLCJub3RiaW5kYWJsZSIsInByb3BlcnR5bm90Zm91bmQiLCJzaG91bGRuZXZlcmhhcHBlbiIsIlRwRXJyb3IiLCJjb25maWciLCJfYSIsImNvbnN0cnVjdG9yIiwic3RhY2siLCJCaW5kaW5nVGFyZ2V0Iiwib3B0X2lkIiwib2JqXyIsImtleV8iLCJwcmVzZXRLZXlfIiwidmFsdWVPYmoiLCJyZWFkIiwiaXNCaW5kYWJsZSIsIm5vdEJpbmRhYmxlIiwicHJvcGVydHlOb3RGb3VuZCIsIkJ1dHRvbkFwaSIsImxhYmVsIiwidmFsdWVDb250cm9sbGVyIiwiZXZlbnROYW1lIiwiYmgiLCJiaW5kIiwiZW1pdHRlciIsIm9uIiwiRW1pdHRlciIsIm9ic2VydmVyc18iLCJvYnNlcnZlcnMiLCJvYnNlcnZlciIsImV2ZW50IiwiUFJFRklYIiwiQ2xhc3NOYW1lIiwidmlld05hbWUiLCJvcHRfZWxlbWVudE5hbWUiLCJvcHRfbW9kaWZpZXIiLCJleHRyYWN0VmFsdWUiLCJyYXdWYWx1ZSIsImJpbmRWYWx1ZSIsImFwcGx5VmFsdWUiLCJoMSIsImgyIiwiaW5wdXQiLCJiaW5kVmFsdWVNYXAiLCJ2YWx1ZU1hcCIsInZhbHVlVG9DbGFzc05hbWUiLCJlbGVtIiwiY2xhc3NOYW1lIiwiYWN0aXZlIiwiY2xhc3NMaXN0IiwiYWRkIiwicmVtb3ZlIiwiYXBwbHlDbGFzcyIsImJpbmRWYWx1ZVRvVGV4dENvbnRlbnQiLCJ0ZXh0IiwidGV4dENvbnRlbnQiLCJjbGFzc05hbWUkcSIsIkJ1dHRvblZpZXciLCJkb2MiLCJiaW5kQ2xhc3NNb2RpZmllcnMiLCJidXR0b25FbGVtIiwiYmluZERpc2FibGVkIiwiYnV0dG9uRWxlbWVudCIsInRpdGxlRWxlbSIsIkJ1dHRvbkNvbnRyb2xsZXIiLCJvbkNsaWNrXyIsInZpZXciLCJlbWl0Iiwic2VuZGVyIiwiQm91bmRWYWx1ZSIsImNvbnN0cmFpbnRfIiwiY29uc3RyYWludCIsImVxdWFsc18iLCJlcXVhbHMiLCJyYXdWYWx1ZV8iLCJzZXRSYXdWYWx1ZSIsImZvcmNlRW1pdCIsImNvbnN0cmFpbmVkVmFsdWUiLCJjb25zdHJhaW4iLCJQcmltaXRpdmVWYWx1ZSIsInZhbHVlXyIsImNyZWF0ZVZhbHVlIiwiVmFsdWVNYXAiLCJ2YWxNYXBfIiwiY29yZSIsImNyZWF0ZUNvcmUiLCJjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyIiwicGFyc2UiLCJvcHRpb25hbCIsInN1Y2NlZWRlZCIsImNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXJzIiwiY3VzdG9tIiwibnVtYmVyIiwic3RyaW5nIiwiZnVuY3Rpb24iLCJjb25zdGFudCIsInJhdyIsImtleVRvUGFyc2VyTWFwIiwiaXNPYmplY3QiLCJwYXJzZXIiLCJwYXJzZU9iamVjdCIsIml0ZW1QYXJzZXIiLCJwYXJzZUl0ZW0iLCJwYXJzZUFycmF5IiwiUGFyYW1zUGFyc2VycyIsInJlcXVpcmVkIiwicGFyc2VQYXJhbXMiLCJjbGFzc05hbWUkcCIsIlBPU19UT19DTEFTU19OQU1FX01BUCIsInZlcnlmaXJzdCIsImZpcnN0IiwidmVyeWxhc3QiLCJCbGFkZUNvbnRyb2xsZXIiLCJwYXJlbnRfIiwiYmxhZGUiLCJwb3MiLCJoYW5kbGVEaXNwb3NlIiwiZGlzcG9zZUVsZW1lbnQiLCJTVkdfTlMiLCJzdXBwb3J0c1RvdWNoIiwib250b3VjaHN0YXJ0IiwiZ2V0R2xvYmFsT2JqZWN0IiwiRnVuY3Rpb24iLCJnZXRDYW52YXNDb250ZXh0IiwiY2FudmFzRWxlbWVudCIsIklDT05fSURfVE9fSU5ORVJfSFRNTF9NQVAiLCJjaGVjayIsImRyb3Bkb3duIiwicDJkcGFkIiwiY3JlYXRlU3ZnSWNvbkVsZW1lbnQiLCJpY29uSWQiLCJjcmVhdGVFbGVtZW50TlMiLCJpbm5lckhUTUwiLCJpbnNlcnRFbGVtZW50QXQiLCJpbmRleCIsImluc2VydEJlZm9yZSIsImNoaWxkcmVuIiwicmVtb3ZlRWxlbWVudCIsInJlbW92ZUNoaWxkRWxlbWVudHMiLCJmaW5kTmV4dFRhcmdldCIsInJlbGF0ZWRUYXJnZXQiLCJleHBsaWNpdE9yaWdpbmFsVGFyZ2V0IiwiY2xhc3NOYW1lJG8iLCJMYWJlbFZpZXciLCJsYWJlbEVsZW0iLCJjaGlsZE5vZGVzIiwicmVtb3ZlQ2hpbGROb2RlcyIsImZyYWciLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwibGluZSIsImNyZWF0ZVRleHROb2RlIiwibGluZU5vZGUiLCJjcmVhdGVMYWJlbE5vZGUiLCJsYWJlbEVsZW1lbnQiLCJ2YWx1ZUVsZW0iLCJ2YWx1ZUVsZW1lbnQiLCJMYWJlbENvbnRyb2xsZXIiLCJCdXR0b25CbGFkZVBsdWdpbiIsImFyZ3MiLCJmcm9tT2JqZWN0IiwiYXBpIiwiVmFsdWVCbGFkZUNvbnRyb2xsZXIiLCJjcmVhdGVCbGFkZSIsInBvc2l0aW9ucyIsIkZvbGRhYmxlIiwiY29tcGxldGVkIiwiZXhwYW5kZWRIZWlnaHQiLCJzaG91bGRGaXhIZWlnaHQiLCJ0ZW1wb3JhcnlFeHBhbmRlZCIsInN0eWxlRXhwYW5kZWQiLCJleEhlaWdodCIsImV4cGFuZGVkQ2xhc3NOYW1lIiwiYXBwbHlIZWlnaHQiLCJmb2xkYWJsZSIsImJpbmRGb2xkYWJsZSIsImNvbnRhaW5lckVsZW1lbnQiLCJjYWxsYmFjayIsInRyYW5zaXRpb24iLCJkaXNhYmxlVHJhbnNpdGlvblRlbXBvcmFyaWx5IiwiY2xpZW50SGVpZ2h0IiwiY29tcHV0ZUV4cGFuZGVkRm9sZGVySGVpZ2h0IiwicHJvcGVydHlOYW1lIiwiUmFja0xpa2VBcGkiLCJyYWNrQXBpIiwicmFja0FwaV8iLCJOZXN0ZWRPcmRlcmVkU2V0IiwiZXh0cmFjdCIsIml0ZW1zXyIsImNhY2hlXyIsIlNldCIsIm9uU3ViTGlzdEFkZF8iLCJvblN1Ykxpc3RSZW1vdmVfIiwiZXh0cmFjdF8iLCJpdGVtcyIsImFsbEl0ZW1zIiwiaGFzIiwib3B0X2luZGV4Iiwic2hvdWxkTmV2ZXJIYXBwZW4iLCJzcGxpY2UiLCJzdWJMaXN0Iiwicm9vdCIsImRlbGV0ZSIsIm9mZiIsIklucHV0QmluZGluZ0FwaSIsIm9uQmluZGluZ0NoYW5nZV8iLCJlbWl0dGVyXyIsImJpbmRpbmciLCJJbnB1dEJpbmRpbmdDb250cm9sbGVyIiwiTW9uaXRvckJpbmRpbmdBcGkiLCJvbkJpbmRpbmdVcGRhdGVfIiwiTW9uaXRvckJpbmRpbmdDb250cm9sbGVyIiwidGlja2VyIiwiZmluZFN1YkJsYWRlQXBpU2V0IiwiUmFja0FwaSIsImdldEFwaUJ5Q29udHJvbGxlciIsImFwaVNldCIsImNyZWF0ZUJpbmRpbmdUYXJnZXQiLCJvblJhY2tBZGRfIiwib25SYWNrUmVtb3ZlXyIsIm9uUmFja0lucHV0Q2hhbmdlXyIsIm9uUmFja01vbml0b3JVcGRhdGVfIiwiYXBpU2V0XyIsInBvb2xfIiwicmFjayIsImJjIiwic2V0VXBBcGlfIiwib3B0X3BhcmFtcyIsImNyZWF0ZUlucHV0Iiwib3duZXJEb2N1bWVudCIsImNyZWF0ZU1vbml0b3IiLCJhZGRCbGFkZSIsImFkZEZvbGRlckFzQmxhZGUiLCJhZGRCdXR0b25Bc0JsYWRlIiwiYWRkU2VwYXJhdG9yQXNCbGFkZSIsImFkZFRhYkFzQmxhZGUiLCJnYXBpIiwiY3JlYXRlQmxhZGVBcGkiLCJibGFkZUNvbnRyb2xsZXIiLCJpc1Jvb3QiLCJGb2xkZXJBcGkiLCJyYWNrQ29udHJvbGxlciIsImFkZE1vbml0b3IiLCJhZGRCdXR0b24iLCJhZGRTZXBhcmF0b3IiLCJhZGRUYWIiLCJSYWNrTGlrZUNvbnRyb2xsZXIiLCJQbGFpblZpZXciLCJmaW5kU3ViUmFjayIsIlJhY2tDb250cm9sbGVyIiwiZmluZFN1YkJsYWRlQ29udHJvbGxlclNldCIsIkJsYWRlUmFjayIsIm9uQmxhZGVQb3NpdGlvbnNDaGFuZ2VfIiwib25TZXRBZGRfIiwib25TZXRSZW1vdmVfIiwib25DaGlsZERpc3Bvc2VfIiwib25DaGlsZFBvc2l0aW9uc0NoYW5nZV8iLCJvbkNoaWxkSW5wdXRDaGFuZ2VfIiwib25DaGlsZE1vbml0b3JVcGRhdGVfIiwib25DaGlsZFZhbHVlQ2hhbmdlXyIsIm9uQ2hpbGRWaWV3UHJvcHNDaGFuZ2VfIiwib25EZXNjZW5kYW50TGF5b3V0XyIsIm9uRGVzY2VuZGFudElucHV0Q2hhbmdlXyIsIm9uRGVzY2VuZGFudE1vbml0b3JVcGRhdGVfIiwiYmxhZGVfIiwiYmNTZXRfIiwiY29udHJvbGxlckNsYXNzIiwidXBkYXRlUG9zaXRpb25zXyIsInZpc2libGVJdGVtcyIsImZpcnN0VmlzaWJsZUl0ZW0iLCJsYXN0VmlzaWJsZUl0ZW0iLCJwcyIsIl9ldiIsImJjcyIsImZpbmRJbnB1dEJpbmRpbmdDb250cm9sbGVyIiwiZmluZE1vbml0b3JCaW5kaW5nQ29udHJvbGxlciIsImZpbmRWYWx1ZUJsYWRlQ29udHJvbGxlciIsImJsYWRlQ29udGFpbmVyQ2xhc3NOYW1lIiwiRm9sZGVyVmlldyIsImNsYXNzTmFtZV8iLCJmb2xkYWJsZV8iLCJiaW5kRXhwYW5kZWRDbGFzcyIsInRpdGxlRWxlbWVudCIsIm1hcmtFbGVtIiwiY29udGFpbmVyRWxlbSIsIkZvbGRlckNvbnRyb2xsZXIiLCJjcmVhdGUiLCJyYyIsIm9uVGl0bGVDbGlja18iLCJGb2xkZXJCbGFkZVBsdWdpbiIsIkxhYmVsZWRWYWx1ZUNvbnRyb2xsZXIiLCJTZXBhcmF0b3JBcGkiLCJjbGFzc05hbWUkbiIsIlNlcGFyYXRvclZpZXciLCJockVsZW0iLCJTZXBhcmF0b3JDb250cm9sbGVyIiwiU2VwYXJhdG9yQmxhZGVQbHVnaW4iLCJjbGFzc05hbWUkbSIsInZhbHVlVG9Nb2RpZmllciIsIm1vZGlmaWVyIiwiVmlld1Byb3BzIiwib3B0X2luaXRpYWxWYWx1ZSIsIl9iIiwiY29yZU9iaiIsImRpc3Bvc2VkIiwidGFiSW5kZXgiLCJjbGFzc05hbWUkbCIsIlRhYkl0ZW1WaWV3Iiwic2VsZWN0ZWQiLCJUYWJJdGVtQ29udHJvbGxlciIsIlRhYlBhZ2VDb250cm9sbGVyIiwib25JdGVtQ2xpY2tfIiwiaWNfIiwiaXRlbVByb3BzIiwiY2NfIiwiaXRlbUNvbnRyb2xsZXIiLCJjb250ZW50Q29udHJvbGxlciIsIlRhYlBhZ2VBcGkiLCJjb250ZW50UmFja0FwaSIsIlRhYkFwaSIsIm9uUGFnZUFkZF8iLCJvblBhZ2VSZW1vdmVfIiwicGFnZUFwaU1hcF8iLCJNYXAiLCJwYWdlU2V0Iiwic2V0VXBQYWdlQXBpXyIsInBhZ2VzIiwiY2xhc3NOYW1lJGsiLCJUYWJWaWV3IiwiZW1wdHkiLCJpdGVtc0VsZW0iLCJpdGVtc0VsZW1lbnQiLCJjb250ZW50c0VsZW0iLCJjb250ZW50c0VsZW1lbnQiLCJUYWJDb250cm9sbGVyIiwiY3IiLCJvblBhZ2VTZWxlY3RlZENoYW5nZV8iLCJwYWdlU2V0XyIsImVtcHR5XyIsImFwcGx5UGFnZXNfIiwia2VlcFNlbGVjdGlvbl8iLCJmaXJzdFNlbEluZGV4IiwiZmluZEluZGV4IiwiVGFiQmxhZGVQbHVnaW4iLCJNYW51YWxUaWNrZXIiLCJJbnRlcnZhbFRpY2tlciIsImludGVydmFsIiwiZGlzYWJsZWRfIiwidGltZXJJZF8iLCJvblRpY2tfIiwiZG9jXyIsImludGVydmFsXyIsInNldFRpbWVyXyIsImluYWN0aXZlIiwiY2xlYXJUaW1lcl8iLCJ3aW4iLCJkZWZhdWx0VmlldyIsImNsZWFySW50ZXJ2YWwiLCJzZXRJbnRlcnZhbCIsIkNvbXBvc2l0ZUNvbnN0cmFpbnQiLCJjb25zdHJhaW50cyIsImZpbmRDb25zdHJhaW50IiwiY29uc3RyYWludENsYXNzIiwidG1wUmVzdWx0Iiwic2MiLCJMaXN0Q29uc3RyYWludCIsIlJhbmdlQ29uc3RyYWludCIsIm1heFZhbHVlIiwibWluVmFsdWUiLCJTdGVwQ29uc3RyYWludCIsImNsYXNzTmFtZSRqIiwiTGlzdFZpZXciLCJvblZhbHVlQ2hhbmdlXyIsInByb3BzXyIsInNlbGVjdEVsZW0iLCJvcHRpb25FbGVtIiwiZGF0YXNldCIsInNlbGVjdEVsZW1lbnQiLCJ1cGRhdGVfIiwiTGlzdENvbnRyb2xsZXIiLCJvblNlbGVjdENoYW5nZV8iLCJvcHRFbGVtIiwiY3VycmVudFRhcmdldCIsInNlbGVjdGVkT3B0aW9ucyIsIml0ZW1JbmRleCIsImNsYXNzTmFtZSRpIiwiUG9wdXBWaWV3Iiwic2hvd3MiLCJQb3B1cENvbnRyb2xsZXIiLCJjbGFzc05hbWUkaCIsIlRleHRWaWV3Iiwib25DaGFuZ2VfIiwiaW5wdXRFbGVtIiwiaW5wdXRFbGVtZW50IiwicmVmcmVzaCIsImZvcm1hdHRlciIsIlRleHRDb250cm9sbGVyIiwib25JbnB1dENoYW5nZV8iLCJwYXJzZXJfIiwicGFyc2VkVmFsdWUiLCJib29sRnJvbVVua25vd24iLCJCb29sZWFuRm9ybWF0dGVyIiwiYm9vbFRvU3RyaW5nIiwiTnVtYmVyTGl0ZXJhbE5vZGUiLCJCSU5BUllfT1BFUkFUSU9OX01BUCIsIioqIiwiKiIsIi8iLCIlIiwiKyIsIi0iLCI8PCIsIj4+IiwiPj4+IiwiJiIsIl4iLCJ8IiwiQmluYXJ5T3BlcmF0aW9uTm9kZSIsIm9wZXJhdG9yIiwibGVmdCIsInJpZ2h0Iiwib3AiLCJldmFsdWF0ZSIsIlVOQVJZX09QRVJBVElPTl9NQVAiLCJ+IiwiVW5hcnlPcGVyYXRpb25Ob2RlIiwiZXhwciIsImV4cHJlc3Npb24iLCJjb21iaW5lUmVhZGVyIiwicGFyc2VycyIsImN1cnNvciIsInJlYWRXaGl0ZXNwYWNlIiwicmVhZERlY2ltYWxEaWdpdHMiLCJyZWFkRXhwb25lbnRQYXJ0Iiwic2kiLCJzZHMiLCJyZWFkU2lnbmVkSW50ZWdlciIsInJlYWREZWNpbWFsSW50ZWdlckxpdGVyYWwiLCJuemQiLCJyZWFkTm9uWmVyb0RpZ2l0IiwicmVhZERlY2ltYWxMaXRlcmFsIiwiZGlsIiwiZG90IiwiZGRzIiwicmVhZE5vbkRlY2ltYWxJbnRlZ2VyTGl0ZXJhbCIsImJkcyIsInBhcnNlQmluYXJ5RGlnaXRzIiwib2RzIiwicmVhZE9jdGFsRGlnaXRzIiwiaGRzIiwicmVhZEhleERpZ2l0cyIsInJlYWROdW1lcmljTGl0ZXJhbCIsInBhcnNlUHJpbWFyeUV4cHJlc3Npb24iLCJldmFsdWFibGUiLCJwYXJzZUxpdGVyYWwiLCJwYXJzZUV4cHJlc3Npb24iLCJjbCIsInBhcnNlUGFyZW50aGVzaXplZEV4cHJlc3Npb24iLCJyZWFkQmluYXJ5T3BlcmF0b3IiLCJvcHMiLCJzdGFydHNXaXRoIiwicGFyc2VCaW5hcnlPcGVyYXRpb25FeHByZXNzaW9uIiwiZXhwclBhcnNlciIsImZpcnN0RXhwciIsIm5leHRFeHByIiwiY3JlYXRlQmluYXJ5T3BlcmF0aW9uRXhwcmVzc2lvblBhcnNlciIsInBhcnNlVW5hcnlFeHByZXNzaW9uIiwicGFyc2VOdW1iZXIiLCJwYXJzZUVjbWFOdW1iZXJFeHByZXNzaW9uIiwibnVtYmVyRnJvbVVua25vd24iLCJwdiIsIm51bWJlclRvU3RyaW5nIiwiY3JlYXRlTnVtYmVyRm9ybWF0dGVyIiwiZGlnaXRzIiwidG9GaXhlZCIsImlubmVyRm9ybWF0dGVyIiwiZm9ybWF0UGVyY2VudGFnZSIsInN0cmluZ0Zyb21Vbmtub3duIiwiZm9ybWF0U3RyaW5nIiwiZmlsbEJ1ZmZlciIsImJ1ZmZlciIsImJ1ZmZlclNpemUiLCJpbml0aWFsaXplQnVmZmVyIiwiY3JlYXRlVHJpbW1lZEJ1ZmZlciIsImNvbm5lY3RWYWx1ZXMiLCJwcmltYXJ5Iiwic2Vjb25kYXJ5IiwiZm9yd2FyZCIsImJhY2t3YXJkIiwiY2hhbmdpbmciLCJwcmV2ZW50RmVlZGJhY2siLCJnZXRTdGVwRm9yS2V5IiwiYmFzZVN0ZXAiLCJ1cEtleSIsImRvd25LZXkiLCJnZXRWZXJ0aWNhbFN0ZXBLZXlzIiwiZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzIiwiaXNBcnJvd0tleSIsImlzVmVydGljYWxBcnJvd0tleSIsImNvbXB1dGVPZmZzZXQkMSIsInJlY3QiLCJwYWdlWCIsInNjcm9sbFgiLCJwYWdlWSIsInNjcm9sbFkiLCJ0b3AiLCJQb2ludGVySGFuZGxlciIsImxhc3RUb3VjaF8iLCJvbkRvY3VtZW50TW91c2VNb3ZlXyIsIm9uRG9jdW1lbnRNb3VzZVVwXyIsIm9uTW91c2VEb3duXyIsIm9uVG91Y2hFbmRfIiwib25Ub3VjaE1vdmVfIiwib25Ub3VjaFN0YXJ0XyIsImVsZW1fIiwiYm91bmRzIiwicG9pbnQiLCJmb2N1cyIsImNvbXB1dGVQb3NpdGlvbl8iLCJ0b3VjaCIsInRhcmdldFRvdWNoZXMiLCJjbGllbnRYIiwiY2xpZW50WSIsInN0YXJ0MSIsImVuZDEiLCJzdGFydDIiLCJlbmQyIiwiZ2V0RGVjaW1hbERpZ2l0cyIsImNvbnN0cmFpblJhbmdlIiwibG9vcFJhbmdlIiwiY2xhc3NOYW1lJGciLCJOdW1iZXJUZXh0VmlldyIsImFycmF5UG9zaXRpb24iLCJvbkRyYWdnaW5nQ2hhbmdlXyIsImRyYWdnaW5nXyIsImRyYWdnaW5nIiwia25vYkVsZW0iLCJrbm9iRWxlbWVudCIsImd1aWRlRWxlbSIsImJvZHlFbGVtIiwiZ3VpZGVCb2R5RWxlbV8iLCJoZWFkRWxlbSIsImd1aWRlSGVhZEVsZW1fIiwidG9vbHRpcEVsZW0iLCJ0b29sdGlwRWxlbV8iLCJhb3giLCJhZHgiLCJzZXRBdHRyaWJ1dGVOUyIsIk51bWJlclRleHRDb250cm9sbGVyIiwib3JpZ2luUmF3VmFsdWVfIiwib25JbnB1dEtleURvd25fIiwib25JbnB1dEtleVVwXyIsIm9uUG9pbnRlckRvd25fIiwib25Qb2ludGVyTW92ZV8iLCJvblBvaW50ZXJVcF8iLCJiYXNlU3RlcF8iLCJwaCIsImNvbXB1dGVEcmFnZ2luZ1ZhbHVlXyIsImNsYXNzTmFtZSRmIiwiU2xpZGVyVmlldyIsInRyYWNrRWxlbSIsImJpbmRUYWJJbmRleCIsInRyYWNrRWxlbWVudCIsIlNsaWRlckNvbnRyb2xsZXIiLCJvbktleURvd25fIiwib25LZXlVcF8iLCJvblBvaW50ZXJEb3duT3JNb3ZlXyIsInB0SGFuZGxlcl8iLCJoYW5kbGVQb2ludGVyRXZlbnRfIiwiY2xhc3NOYW1lJGUiLCJTbGlkZXJUZXh0VmlldyIsInNsaWRlckVsZW0iLCJzbGlkZXJWaWV3XyIsInNsaWRlclZpZXciLCJ0ZXh0RWxlbSIsInRleHRWaWV3XyIsInRleHRWaWV3IiwiU2xpZGVyVGV4dENvbnRyb2xsZXIiLCJzbGlkZXJDXyIsInNsaWRlclByb3BzIiwidGV4dENfIiwidGV4dFByb3BzIiwic2xpZGVyQ29udHJvbGxlciIsInRleHRDb250cm9sbGVyIiwid3JpdGVQcmltaXRpdmUiLCJ3cml0ZSIsInBhcnNlTGlzdE9wdGlvbnMiLCJwYXJzZVBpY2tlckxheW91dCIsInBhcnNlUG9pbnREaW1lbnNpb25QYXJhbXMiLCJub3JtYWxpemVMaXN0T3B0aW9ucyIsImNyZWF0ZUxpc3RDb25zdHJhaW50IiwiZmluZExpc3RJdGVtcyIsImdldFN1aXRhYmxlRGVjaW1hbERpZ2l0cyIsImdldEJhc2VTdGVwIiwiZmluZFN0ZXAiLCJnZXRTdWl0YWJsZURyYWdnaW5nU2NhbGUiLCJiYXNlIiwibG9nMTAiLCJjbGFzc05hbWUkZCIsIkNoZWNrYm94VmlldyIsIndyYXBwZXJFbGVtIiwiY2hlY2tlZCIsIkNoZWNrYm94Q29udHJvbGxlciIsIkJvb2xlYW5JbnB1dFBsdWdpbiIsImFjY2VwdCIsInJlYWRlciIsIl9hcmdzIiwibGMiLCJjcmVhdGVDb25zdHJhaW50JDUiLCJ3cml0ZXIiLCJjbGFzc05hbWUkYyIsIkNvbG9yVmlldyIsInN3YXRjaEVsZW0iLCJzd2F0Y2hFbGVtZW50IiwidGV4dEVsZW1lbnQiLCJwaWNrZXJMYXlvdXQiLCJwaWNrZXJFbGVtIiwicGlja2VyRWxlbWVudCIsImhzdlRvUmdiIiwiaHAiLCJzcCIsInZwIiwicnAiLCJncCIsImJwIiwicmVtb3ZlQWxwaGFDb21wb25lbnQiLCJjb21wcyIsImFwcGVuZEFscGhhQ29tcG9uZW50IiwiYWxwaGEiLCJNT0RFX0NPTlZFUlRFUl9NQVAiLCJoc2wiLCJoc3YiLCJzZCIsInJnYiIsImxwIiwiY21heCIsImNtaW4iLCJDT05TVFJBSU5UX01BUCIsImlzUmdiQ29sb3JDb21wb25lbnQiLCJDb2xvciIsIm1vZGUiLCJtb2RlXyIsImNvbXBzXyIsImNvbG9yIiwidG9SZ2JhT2JqZWN0IiwiaXNSZ2JDb2xvck9iamVjdCIsImNvbXBzMSIsImNvbXBzMiIsIm9wdF9tb2RlIiwiY29tcG9uZW50cyIsInJnYkNvbXBzIiwiZ2V0Q29tcG9uZW50cyIsImNsYXNzTmFtZSRiIiwiQ29sb3JQaWNrZXJWaWV3IiwiYWxwaGFWaWV3c18iLCJoc3ZFbGVtIiwic3ZFbGVtIiwic3ZQYWxldHRlVmlld18iLCJzdlBhbGV0dGVWaWV3IiwiaEVsZW0iLCJoUGFsZXR0ZVZpZXdfIiwiaFBhbGV0dGVWaWV3IiwicmdiRWxlbSIsImFscGhhVmlld3MiLCJwYWxldHRlIiwiYUVsZW0iLCJhcEVsZW0iLCJhdEVsZW0iLCJhbGxGb2N1c2FibGVFbGVtZW50cyIsImVsZW1zIiwibW9kZVNlbGVjdEVsZW1lbnQiLCJ0ZXh0Vmlld3MiLCJwYXJzZUNvbG9ySW5wdXRQYXJhbXMiLCJwaWNrZXIiLCJnZXRCYXNlU3RlcEZvckNvbG9yIiwiZm9yQWxwaGEiLCJwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZSIsInBhcnNlRmxvYXQiLCJBTkdMRV9UT19ERUdfTUFQIiwiZGVnIiwiZ3JhZCIsInJhZCIsInR1cm4iLCJwYXJzZUNzc051bWJlck9yQW5nbGUiLCJOT1RBVElPTl9UT19QQVJTRVJfTUFQIiwiZnVuYy5yZ2IiLCJmdW5jLnJnYmEiLCJmdW5jLmhzbCIsImZ1bmMuaHNsYSIsImhleC5yZ2IiLCJtUmdiIiwicGFyc2VJbnQiLCJtUnJnZ2JiIiwiaGV4LnJnYmEiLCJnZXRDb2xvck5vdGF0aW9uIiwibm90YXRpb24iLCJzdWJwYXJzZXIiLCJDb21wb3NpdGVDb2xvclBhcnNlciIsImhhc0FscGhhQ29tcG9uZW50IiwiemVyb2ZpbGwiLCJjb21wIiwiaGV4IiwiY29sb3JUb0hleFJnYlN0cmluZyIsImNvbG9yVG9IZXhSZ2JhU3RyaW5nIiwicmdiYUNvbXBzIiwiY29sb3JUb0Z1bmN0aW9uYWxSZ2JTdHJpbmciLCJjb2xvclRvRnVuY3Rpb25hbFJnYmFTdHJpbmciLCJhRm9ybWF0dGVyIiwicmdiRm9ybWF0dGVyIiwiTk9UQVRJT05fVE9fU1RSSU5HSUZJRVJfTUFQIiwiZm9ybWF0dGVycyIsImdldENvbG9yU3RyaW5naWZpZXIiLCJjbGFzc05hbWUkYSIsIkFQYWxldHRlVmlldyIsImJhckVsZW0iLCJjb2xvckVsZW0iLCJjb2xvckVsZW1fIiwibWFya2VyRWxlbSIsIm1hcmtlckVsZW1fIiwicHJldmlld0VsZW0iLCJwcmV2aWV3RWxlbV8iLCJsZWZ0Q29sb3IiLCJyaWdodENvbG9yIiwiZ3JhZGllbnRDb21wcyIsImJhY2tncm91bmQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJBUGFsZXR0ZUNvbnRyb2xsZXIiLCJjbGFzc05hbWUkOSIsIkNvbG9yVGV4dFZpZXciLCJtb2RlRWxlbSIsIm1vZGVFbGVtXyIsImNyZWF0ZU1vZGVTZWxlY3RFbGVtZW50IiwibW9kZU1hcmtlckVsZW0iLCJ0ZXh0c0VsZW0iLCJ0ZXh0c0VsZW1fIiwidGV4dFZpZXdzXyIsImFwcGx5VGV4dFZpZXdzXyIsImNvbG9yTW9kZSIsImNvbXBFbGVtIiwiRk9STUFUVEVSIiwiTU9ERV9UT19DT05TVFJBSU5UX01BUCIsImNyZWF0ZUNvbXBvbmVudENvbnRyb2xsZXIiLCJkcmFnZ2luZ1NjYWxlIiwiQ29sb3JUZXh0Q29udHJvbGxlciIsIm9uTW9kZVNlbGVjdENoYW5nZV8iLCJjY3NfIiwiY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcnNfIiwiY2MiLCJjY3MiLCJjcyIsInBpY2tlZE1vZGUiLCJjbGFzc05hbWUkOCIsIkhQYWxldHRlVmlldyIsIkhQYWxldHRlQ29udHJvbGxlciIsImh1ZSIsImNsYXNzTmFtZSQ3IiwiQ0FOVkFTX1JFU09MIiwiU3ZQYWxldHRlVmlldyIsImNhbnZhc0VsZW0iLCJoc3ZDb21wcyIsImltZ0RhdGEiLCJnZXRJbWFnZURhdGEiLCJpeSIsIml4IiwicHV0SW1hZ2VEYXRhIiwiU3ZQYWxldHRlQ29udHJvbGxlciIsInNhdHVyYXRpb24iLCJkdiIsIkNvbG9yUGlja2VyQ29udHJvbGxlciIsImhQYWxldHRlQ18iLCJzdlBhbGV0dGVDXyIsImFscGhhSWNzXyIsInN1cHBvcnRzQWxwaGEiLCJjbGFzc05hbWUkNiIsIkNvbG9yU3dhdGNoVmlldyIsInN3YXRjaEVsZW1fIiwiQ29sb3JTd2F0Y2hDb250cm9sbGVyIiwiQ29sb3JDb250cm9sbGVyIiwib25CdXR0b25CbHVyXyIsIm9uQnV0dG9uQ2xpY2tfIiwib25Qb3B1cENoaWxkQmx1cl8iLCJvblBvcHVwQ2hpbGRLZXlkb3duXyIsInN3YXRjaENfIiwicG9wQ18iLCJwaWNrZXJDIiwicGlja2VyQ18iLCJuZXh0VGFyZ2V0IiwiY29udGFpbnMiLCJjb2xvclRvUmdiTnVtYmVyIiwiY29sb3JUb1JnYmFOdW1iZXIiLCJjb2xvckZyb21SZ2JOdW1iZXIiLCJibGFjayIsImNvbG9yRnJvbVJnYmFOdW1iZXIiLCJ3cml0ZVJnYmFDb2xvck9iamVjdCIsIndyaXRlUHJvcGVydHkiLCJ3cml0ZVJnYkNvbG9yT2JqZWN0Iiwic2hvdWxkU3VwcG9ydEFscGhhJDEiLCJpbnB1dFBhcmFtcyIsImNyZWF0ZUZvcm1hdHRlciQxIiwiTnVtYmVyQ29sb3JJbnB1dFBsdWdpbiIsImNvbG9yVG9OdW1iZXIiLCJjcmVhdGVDb2xvck51bWJlcldyaXRlciIsIk9iamVjdENvbG9ySW5wdXRQbHVnaW4iLCJpc0NvbG9yT2JqZWN0IiwiY3JlYXRlQ29sb3JPYmplY3RXcml0ZXIiLCJpc1JnYmFDb2xvck9iamVjdCIsInNob3VsZFN1cHBvcnRBbHBoYSIsIlN0cmluZ0NvbG9ySW5wdXRQbHVnaW4iLCJjdiIsImNyZWF0ZUNvbG9yU3RyaW5nV3JpdGVyIiwic3RyaW5naWZpZXIiLCJQb2ludE5kQ29uc3RyYWludCIsImFzbV8iLCJhc3NlbWJseSIsInRvQ29tcG9uZW50cyIsImZyb21Db21wb25lbnRzIiwiY2xhc3NOYW1lJDUiLCJQb2ludE5kVGV4dFZpZXciLCJheGlzRWxlbSIsIlBvaW50TmRUZXh0Q29udHJvbGxlciIsImFjc18iLCJheGVzIiwiY3JlYXRlQXhpc0NvbnRyb2xsZXIiLCJhYyIsImNyZWF0ZUNvbnN0cmFpbnQkNCIsImNyZWF0ZVN0ZXBDb25zdHJhaW50IiwiY3JlYXRlUmFuZ2VDb25zdHJhaW50IiwiZXN0aW1hdGVTdWl0YWJsZVJhbmdlIiwiZmluZFJhbmdlIiwiTnVtYmVySW5wdXRQbHVnaW4iLCJmb3JtYXQiLCJQb2ludDJkIiwiUG9pbnQyZEFzc2VtYmx5IiwiY2xhc3NOYW1lJDQiLCJQb2ludDJkVmlldyIsImNsYXNzTmFtZSQzIiwiUG9pbnQyZFBpY2tlclZpZXciLCJvbkZvbGRhYmxlQ2hhbmdlXyIsImludmVydHNZXyIsImludmVydHNZIiwibWF4VmFsdWVfIiwibGF5b3V0IiwicGFkRWxlbSIsInBhZEVsZW1lbnQiLCJzdmdFbGVtIiwic3ZnRWxlbV8iLCJ4QXhpc0VsZW0iLCJ5QXhpc0VsZW0iLCJsaW5lRWxlbSIsImxpbmVFbGVtXyIsInB4IiwicHkiLCJpcHkiLCJjb21wdXRlT2Zmc2V0IiwiYmFzZVN0ZXBzIiwiUG9pbnQyZFBpY2tlckNvbnRyb2xsZXIiLCJvblBhZEtleURvd25fIiwib25QYWRLZXlVcF8iLCJiYXNlU3RlcHNfIiwiZHgiLCJkeSIsIlBvaW50MmRDb250cm9sbGVyIiwib25QYWRCdXR0b25CbHVyXyIsIm9uUGFkQnV0dG9uQ2xpY2tfIiwicGFkQyIsImNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQkMiIsImdldFN1aXRhYmxlTWF4RGltZW5zaW9uVmFsdWUiLCJnZXRTdWl0YWJsZU1heFZhbHVlIiwieWMiLCJ4ciIsInlyIiwiY3JlYXRlQXhpcyQyIiwic2hvdWxkSW52ZXJ0WSIsInlQYXJhbXMiLCJpbnZlcnRlZCIsIlBvaW50MmRJbnB1dFBsdWdpbiIsImNyZWF0ZUNvbnN0cmFpbnQkMyIsIlBvaW50M2QiLCJQb2ludDNkQXNzZW1ibHkiLCJjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50JDEiLCJjcmVhdGVBeGlzJDEiLCJQb2ludDNkSW5wdXRQbHVnaW4iLCJjcmVhdGVDb25zdHJhaW50JDIiLCJQb2ludDRkIiwiUG9pbnQ0ZEFzc2VtYmx5IiwiY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCIsIlBvaW50NGRJbnB1dFBsdWdpbiIsImNyZWF0ZUNvbnN0cmFpbnQkMSIsImNyZWF0ZUF4aXMiLCJTdHJpbmdJbnB1dFBsdWdpbiIsImNyZWF0ZUNvbnN0cmFpbnQiLCJDb25zdGFudHMiLCJtb25pdG9yIiwiZGVmYXVsdEludGVydmFsIiwiZGVmYXVsdExpbmVDb3VudCIsImNsYXNzTmFtZSQyIiwiTXVsdGlMb2dWaWV3Iiwib25WYWx1ZVVwZGF0ZV8iLCJmb3JtYXR0ZXJfIiwidGV4dGFyZWFFbGVtIiwibGluZUNvdW50IiwicmVhZE9ubHkiLCJ0ZXh0YXJlYUVsZW1fIiwic2hvdWxkU2Nyb2xsIiwic2Nyb2xsVG9wIiwic2Nyb2xsSGVpZ2h0IiwibGluZXMiLCJNdWx0aUxvZ0NvbnRyb2xsZXIiLCJjbGFzc05hbWUkMSIsIlNpbmdsZUxvZ1ZpZXciLCJsYXN0VmFsdWUiLCJTaW5nbGVMb2dDb250cm9sbGVyIiwiQm9vbGVhbk1vbml0b3JQbHVnaW4iLCJHcmFwaEN1cnNvciIsImluZGV4XyIsIkdyYXBoTG9nVmlldyIsIm9uQ3Vyc29yQ2hhbmdlXyIsIm1pblZhbHVlXyIsImN1cnNvcl8iLCJncmFwaEVsZW1lbnQiLCJtYXhJbmRleCIsInBvaW50cyIsInR4IiwidHkiLCJHcmFwaExvZ0NvbnRyb2xsZXIiLCJvbkdyYXBoTW91c2VNb3ZlXyIsIm9uR3JhcGhNb3VzZUxlYXZlXyIsIm9uR3JhcGhQb2ludGVyRG93bl8iLCJvbkdyYXBoUG9pbnRlck1vdmVfIiwib25HcmFwaFBvaW50ZXJVcF8iLCJvZmZzZXRYIiwiY3JlYXRlRm9ybWF0dGVyIiwic2hvdWxkU2hvd0dyYXBoIiwiTnVtYmVyTW9uaXRvclBsdWdpbiIsImRlZmF1bHRCdWZmZXJTaXplIiwiX2MiLCJjcmVhdGVHcmFwaE1vbml0b3IiLCJjcmVhdGVUZXh0TW9uaXRvciIsIlN0cmluZ01vbml0b3JQbHVnaW4iLCJtdWx0aWxpbmUiLCJJbnB1dEJpbmRpbmciLCJ0YXJnZXRWYWx1ZSIsIndyaXRlXyIsIk1vbml0b3JCaW5kaW5nIiwicmVhZGVyXyIsIm5ld1ZhbHVlIiwibmV3QnVmZmVyIiwiY3JlYXRlUHVzaGVkQnVmZmVyIiwiY3JlYXRlVGlja2VyIiwiUGx1Z2luUG9vbCIsInBsdWdpbnNNYXBfIiwiYmxhZGVzIiwiaW5wdXRzIiwibW9uaXRvcnMiLCJ1bnNoaWZ0IiwicGx1Z2luIiwidmFsdWVBcmdzIiwiY3JlYXRlSW5wdXRCaW5kaW5nQ29udHJvbGxlciIsIlAiLCJjcmVhdGVNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIiLCJjcmVhdGVCbGFkZUNvbnRyb2xsZXIiLCJMaXN0QXBpIiwiU2xpZGVyQXBpIiwiVGV4dEFwaSIsIkxpc3RCbGFkZVBsdWdpbiIsImljIiwiUm9vdEFwaSIsInRhcmdldHMiLCJpbXBvcnRQcmVzZXRKc29uIiwiaWJjIiwiZXhwb3J0UHJlc2V0SnNvbiIsIm1iYyIsIlJvb3RDb250cm9sbGVyIiwiU2xpZGVyQmxhZGVQbHVnaW4iLCJ2YyIsIlRleHRCbGFkZVBsdWdpbiIsImVtYmVkU3R5bGUiLCJjc3MiLCJxdWVyeVNlbGVjdG9yIiwic3R5bGVFbGVtIiwidHBTdHlsZSIsImhlYWQiLCJWRVJTSU9OIiwicHJlcmVsZWFzZSIsImNvcmVDb21wcyIsIm1ham9yIiwibWlub3IiLCJwYXRjaCIsIm9wdF9jb25maWciLCJyZWdpc3RlciIsImNyZWF0ZURlZmF1bHRQbHVnaW5Qb29sIiwiY29udGFpbmVyRWxlbV8iLCJjb250YWluZXIiLCJjcmVhdGVEZWZhdWx0V3JhcHBlckVsZW1lbnQiLCJ1c2VzRGVmYXVsdFdyYXBwZXJfIiwic2V0VXBEZWZhdWx0UGx1Z2luc18iLCJhbHJlYWR5RGlzcG9zZWQiLCJwYXJlbnRFbGVtIiwiYnVuZGxlIiwiZW1iZWRQbHVnaW5TdHlsZV8iLCJnZXRBbGwiLCJyZWdpc3RlclBsdWdpbiIsImRlZmluZVByb3BlcnR5IiwiZ2xvYmFsVGhpcyIsInNlbGYiLCJDQU5WQVNfU0tFVENIX0RFRkFVTFRfU1RPUkFHRV9LRVkiLCJsb2NhdGlvbiJdLCJtYXBwaW5ncyI6IkNBQUEsV0FBQSxPQUFBLFNBQUFBLEVBQUFDLEVBQUFDLEVBQUFDLEdBQUEsU0FBQUMsRUFBQUMsRUFBQUMsR0FBQSxJQUFBSixFQUFBRyxHQUFBLENBQUEsSUFBQUosRUFBQUksR0FBQSxDQUFBLElBQUFFLEVBQUEsbUJBQUFDLFNBQUFBLFFBQUEsSUFBQUYsR0FBQUMsRUFBQSxPQUFBQSxFQUFBRixHQUFBLEdBQUEsR0FBQUksRUFBQSxPQUFBQSxFQUFBSixHQUFBLEdBQUEsSUFBQUssRUFBQSxJQUFBQyxNQUFBLHVCQUFBTixFQUFBLEtBQUEsTUFBQUssRUFBQUUsS0FBQSxtQkFBQUYsRUFBQSxJQUFBRyxFQUFBWCxFQUFBRyxHQUFBLENBQUFTLFFBQUEsSUFBQWIsRUFBQUksR0FBQSxHQUFBVSxLQUFBRixFQUFBQyxRQUFBLFNBQUFkLEdBQUEsT0FBQUksRUFBQUgsRUFBQUksR0FBQSxHQUFBTCxJQUFBQSxJQUFBYSxFQUFBQSxFQUFBQyxRQUFBZCxFQUFBQyxFQUFBQyxFQUFBQyxHQUFBLE9BQUFELEVBQUFHLEdBQUFTLFFBQUEsSUFBQSxJQUFBTCxFQUFBLG1CQUFBRCxTQUFBQSxRQUFBSCxFQUFBLEVBQUFBLEVBQUFGLEVBQUFhLE9BQUFYLElBQUFELEVBQUFELEVBQUFFLElBQUEsT0FBQUQsR0FBQSxFQUFBLENBQUEsQ0FBQWEsRUFBQSxDQUFBLFNBQUFULEVBQUFVLEVBQUFKLEdDQUEsTUFBQUssRUFBQVgsRUFBQSxpQkFDQVksRUFBQVosRUFBQSw2QkFDQWEsRUFBQWIsRUFBQSwyQkFDQWMsRUFBQWQsRUFBQSxhQUVBZSxFQUFBLENBQ0FDLFdBQUEsQ0FBQSxVQUNBQyxTQUFBLEdBR0FDLEVBQUEsQ0FDQUMsS0FBQSxHQUNBQyxLQUFBLEdBQ0FDLFNBQUEsRUFDQUMsU0FBQSxHQUNBQyxLQUFBLEtBQ0FDLElBQUEsR0FDQUMsTUFBQSxFQUNBUixTQUFBLEVBQ0FTLFFBQUEsUUFHQUMsRUFBQSxLQUlBLElBQUFDLEVBQUEsSUFBQUMsTUFDQUQsRUFBQUUsSUFBQSxXQUNBLElBQUFDLEVBQUEsSUFBQUMsTUFDQUQsRUFBQUUsT0FFQSxNQUFBQyxFQUFBLElBQUFGLE1BQUEsZUFDQUUsRUFBQUQsT0FDQUMsRUFBQUMsTUFBQSxFQUNBRCxFQUFBRSxhQUFBLEVBcUJBLE9BTkFDLFNBQUFDLGlCQUFBLFFBWEE3QyxJQUVBbUMsRUFBQUUsSUFBQVMsS0FBQUMsTUFBQSxHQUFBRCxLQUFBM0IsVUFBQSxPQUNBbUIsRUFBQUQsSUFBQSxZQUFBUyxLQUFBQyxNQUFBLEdBQUFELEtBQUEzQixVQUFBLE9BQ0FtQixFQUFBRSxPQUNBQyxFQUFBRCxTQVlBLEVBQUFRLFFBQUFBLEVBQUFDLE1BQUFBLEVBQUFDLE9BQUFBLEVBQUFsQixNQUFBQSxNQUNBZ0IsRUFBQUcsVUFBQSxRQUNBSCxFQUFBSSxTQUFBLEVBQUEsRUFBQUgsRUFBQUMsR0FFQSxNQUFBeEIsRUFBQUQsRUFBQUMsS0FDQUMsRUFBQUYsRUFBQUUsS0FDQTBCLEVBQUEzQixFQUFBQyxFQUVBMkIsRUFBQSxFQUFBTCxFQUNBTSxFQUFBLEVBQUFMLEVBQ0FNLEVBQUFGLEVBQUE1QixFQUNBK0IsRUFBQUYsRUFBQTVCLEVBQ0ErQixFQUFBLElBQUFULEVBQUFLLEdBQ0FLLEVBQUEsSUFBQVQsRUFBQUssR0FJQSxJQUFBLElBQUFuRCxFQUFBLEVBQUFBLEVBQUFpRCxFQUFBakQsSUFBQSxDQUNBLE1BR0F3RCxFQUhBeEQsRUFBQXNCLEVBR0E4QixFQUNBSyxFQUhBZixLQUFBQyxNQUFBM0MsRUFBQXNCLEdBR0ErQixFQUNBSyxFQUFBLEdBQUFOLEVBTUF2RCxFQUFBa0IsRUFBQTRDLFFBQUFILEVBQUFDLEVBQUEsSUFIQXBDLEVBQUFELFFBQUFRLEVBQUFQLEVBQUFPLE9BR0FQLEVBQUFLLE1BR0FrQyxFQUFBL0QsRUFBQTZDLEtBQUFtQixHQUFBeEMsRUFBQU0sSUFJQVgsRUFBQThDLFNBQUFqRSxHQUFBLEVBQUEsRUFBQXdCLEVBQUFHLFNBQUFILEVBQUFJLFVBRUFtQixFQUFBbUIsT0FDQW5CLEVBQUFvQixVQUFBUixFQUFBQyxHQUNBYixFQUFBb0IsVUFBQVYsRUFBQUMsR0FDQVgsRUFBQW9CLFVBQUEsR0FBQVosRUFBQSxHQUFBQyxHQUNBVCxFQUFBcUIsT0FBQUwsR0FJQWhCLEVBQUFzQixVQUFBbkMsR0FBQSxLQUFBLEtBR0FhLEVBQUFmLFFBQUFSLEVBQUFRLFFBRUFlLEVBQUF1QixZQUNBdkIsRUFBQXdCLFFBQUEsR0FBQVYsRUFBQSxHQUNBZCxFQUFBeUIsT0FBQSxHQUFBWCxFQUFBLEdBQ0FkLEVBQUEwQixTQUVBMUIsRUFBQTJCLGFBT0EsTUFDQSxNQUFBQyxFQUFBLElBQUF2RCxFQUFBd0QsS0FNQSxJQUFBQyxHQUVBQSxFQUFBRixFQUFBRyxVQUFBLENBQUFDLE1BQUEsb0NBRUFDLFNBQUF4RCxFQUFBLE9BQUEsQ0FBQXlELElBQUEsRUFBQUMsSUFBQSxHQUFBQyxLQUFBLElBQ0FOLEVBQUFHLFNBQUF4RCxFQUFBLE9BQUEsQ0FBQXlELElBQUEsRUFBQUMsSUFBQSxHQUFBQyxLQUFBLElBQ0FOLEVBQUFHLFNBQUF4RCxFQUFBLFdBQUEsQ0FBQXlELElBQUEsRUFBQUMsSUFBQSxNQUNBTCxFQUFBRyxTQUFBeEQsRUFBQSxXQUFBLENBQUF5RCxJQUFBLEVBQUFDLElBQUEsT0FLQUwsRUFBQUYsRUFBQUcsVUFBQSxDQUFBQyxNQUFBLG9DQUNBQyxTQUFBeEQsRUFBQSxPQUFBLENBQUF5RCxLQUFBLElBQUFDLElBQUEsTUFDQUwsRUFBQUcsU0FBQXhELEVBQUEsTUFBQSxDQUFBeUQsSUFBQSxFQUFBQyxJQUFBLElBQ0FMLEVBQUFHLFNBQUF4RCxFQUFBLFdBQ0FxRCxFQUFBRyxTQUFBeEQsRUFBQSxRQUFBLENBQUF5RCxJQUFBLEVBQUFDLElBQUEsT0FHQUUsR0FDQW5FLEVBQUFnQixFQUFBWixHQU1BZ0UsV0FDQUMsY0FBQXJFLEVBQUFnQixFQUFBWixJQUdBa0Usa0hDM0pBdkUsRUFBQUosUUFDQSxTQUFBNEUsRUFBQUMsRUFBQUMsR0FDQSxHQUFBLGlCQUFBRCxHQUFBLGlCQUFBQyxFQUNBLE1BQUEsSUFBQUMsVUFBQSxxREFHQSxHQUFBRixFQUFBQyxFQUFBLENBQ0EsSUFBQXpGLEVBQUF3RixFQUNBQSxFQUFBQyxFQUNBQSxFQUFBekYsRUFFQSxJQUFBMkYsRUFBQUYsRUFBQUQsRUFDQSxHQUFBLElBQUFHLEVBQ0EsT0FBQUYsRUFFQSxPQUFBRixFQUFBSSxFQUFBL0MsS0FBQUMsT0FBQTBDLEVBQUFDLEdBQUFHLDRCQ2ZBLElBQUFDLEVBQUF2RixFQUFBLFdBQ0F3RixFQUFBeEYsRUFBQSxjQUNBeUYsRUFBQUMsT0FBQUQsUUFFQSxTQUFBRSxFQUFBVCxFQUFBUCxFQUFBQyxHQUNBLE9BQUFELEVBQUFDLEVBQ0FNLEVBQUFQLEVBQUFBLEVBQUFPLEVBQUFOLEVBQUFBLEVBQUFNLEVBQ0FBLEVBQUFOLEVBQUFBLEVBQUFNLEVBQUFQLEVBQUFBLEVBQUFPLEVBT0EsU0FBQVUsRUFBQWpCLEVBQUFDLEVBQUFqRixHQUNBLE9BQUFnRixHQUFBLEVBQUFoRixHQUFBaUYsRUFBQWpGLEVBR0EsU0FBQWtHLEVBQUFsQixFQUFBQyxFQUFBakYsR0FDQSxPQUFBNEMsS0FBQXVELElBQUFuQixFQUFBQyxHQUFBYSxFQUFBLEdBQ0E5RixFQUFBZ0YsSUFBQUMsRUFBQUQsR0FRQSxTQUFBb0IsRUFBQXJHLEVBQUFzRyxHQUVBLE9BREFBLEVBQUFULEVBQUFTLEVBQUEsR0FDQSxpQkFBQXRHLEdBQUF1RyxTQUFBdkcsR0FBQUEsRUFBQXNHLEVBR0EsU0FBQUUsRUFBQUMsR0FDQSxHQUFBLGlCQUFBQSxFQUFBLE1BQUEsSUFBQWQsVUFBQSwwQkFDQSxPQUFBLFNBQUFoRixFQUFBMkYsR0FFQSxJQUFBSSxFQURBSixFQUFBVCxFQUFBUyxFQUFBLEdBRUEsTUFBQTNGLEVBRUErRixFQUFBSixFQUNBLGlCQUFBM0YsR0FBQTRGLFNBQUE1RixLQUVBK0YsRUFBQS9GLEdBR0EsSUFDQVIsRUFEQXdHLEVBQUEsR0FFQSxHQUFBLE1BQUFELEVBQ0EsSUFBQXZHLEVBQUEsRUFBQUEsRUFBQXNHLEVBQUF0RyxJQUNBd0csRUFBQXhHLEdBQUFrRyxFQUFBMUYsRUFBQVIsR0FBQW1HLFFBR0EsSUFBQW5HLEVBQUEsRUFBQUEsRUFBQXNHLEVBQUF0RyxJQUNBd0csRUFBQXhHLEdBQUF1RyxFQUdBLE9BQUFDLEdBSUEsU0FBQUMsRUFBQTNCLEVBQUFDLEVBQUFqRixFQUFBMEcsR0FFQSxHQURBQSxFQUFBQSxHQUFBLEdBQ0ExQixFQUFBbkUsU0FBQW9FLEVBQUFwRSxPQUNBLE1BQUEsSUFBQTZFLFVBQUEsMERBRUEsSUFBQSxJQUFBeEYsRUFBQSxFQUFBQSxFQUFBOEUsRUFBQW5FLE9BQUFYLElBQ0F3RyxFQUFBeEcsR0FBQStGLEVBQUFqQixFQUFBOUUsR0FBQStFLEVBQUEvRSxHQUFBRixHQUVBLE9BQUEwRyxFQUdBLFNBQUFFLEVBQUE3RyxFQUFBOEcsR0FFQSxHQUFBLGlCQURBOUcsRUFBQTZGLEVBQUE3RixFQUFBLElBQ0EsTUFBQSxJQUFBMkYsVUFBQSxzQ0FFQSxJQURBLElBQUFnQixFQUFBLEdBQ0F4RyxFQUFBLEVBQUFBLEVBQUFILEVBQUFHLElBQUF3RyxFQUFBSSxLQUFBRCxHQUNBLE9BQUFILEVBMENBLFNBQUFLLEVBQUF4RyxFQUFBeUcsR0FDQSxPQUFBekcsRUFBQXlHLEVBQUFBLEdBQUFBLEVBK0JBLFNBQUFDLEVBQUExRyxFQUFBeUcsRUFBQUUsRUFBQUMsR0FDQSxPQUFBbEIsRUFBQTFGLEVBQUF5RyxFQUFBLEVBQUFwRSxLQUFBd0UsS0FBQUYsRUFBQUMsSUErQkFwRyxFQUFBSixRQUFBLENBQ0FvRyxJQUFBQSxFQUNBTSxNQXREQSxTQUFBdEgsR0FDQSxPQUFBQSxFQUFBNkMsS0FBQUMsTUFBQTlDLElBc0RBdUgsS0FuREEsU0FBQXZILEdBQ0EsT0FBQUEsRUFBQSxFQUFBLEVBQ0FBLEVBQUEsR0FBQSxFQUNBLEdBaURBd0gsU0FoRUEsU0FBQXhILEdBQ0EsT0FBQUEsRUFBQTZDLEtBQUFtQixHQUFBLEtBZ0VBeUQsU0E3REEsU0FBQXpILEdBQ0EsT0FBQSxJQUFBQSxFQUFBNkMsS0FBQW1CLElBNkRBOEIsS0FBQUEsRUFDQTRCLFNBNUNBLFNBQUF6SCxFQUFBYSxHQUVBLE9BREFiLEVBQUErRyxFQUFBL0csRUFBQSxFQUFBYSxHQUNBQSxFQUFBK0IsS0FBQXVELElBQUFuRyxFQUFBYSxJQTJDQTZHLFNBL0dBLFNBQUEzSCxFQUFBNEgsR0FFQSxHQUFBLGlCQURBNUgsRUFBQTZGLEVBQUE3RixFQUFBLElBQ0EsTUFBQSxJQUFBMkYsVUFBQSxzQ0FFQSxrQkFEQWlDLEVBQUFBLEdBQUEsTUFFQUEsRUFBQSxDQUFBQyxVQUFBLElBRUEsSUFBQUMsRUFBQWpDLEVBQUErQixFQUFBRSxPQUFBLEdBQ0EsT0FBQUYsRUFBQUMsU0FDQWhCLEVBQUE3RyxHQUFBK0gsSUFBQSxTQUFBQyxFQUFBN0gsR0FDQSxPQUFBSCxHQUFBLEVBQUEsR0FBQUcsRUFBQTJILElBQUE5SCxFQUFBLEtBR0E2RyxFQUFBN0csR0FBQStILElBQUEsU0FBQUMsRUFBQTdILEdBQ0EsT0FBQUEsRUFBQTJILEdBQUE5SCxLQWtHQWtHLEtBQUFBLEVBQ0FVLFVBQUFBLEVBQ0FULFlBQUFBLEVBQ0E4QixXQWhHQSxTQUFBQyxFQUFBakksRUFBQTBHLEdBQ0ExRyxFQUFBZ0csRUFBQWhHLEVBQUEsRUFBQSxHQUVBLElBQUFrSSxFQUFBRCxFQUFBcEgsT0FBQSxFQUNBc0gsRUFBQW5JLEVBQUFrSSxFQUNBcEcsRUFBQWMsS0FBQUMsTUFBQXNGLEdBQ0FkLEVBQUFjLEVBQUFyRyxFQUVBc0csRUFBQXhGLEtBQUFvQyxJQUFBbEQsRUFBQSxFQUFBb0csR0FDQTNILEVBQUEwSCxFQUFBbkcsRUFBQW1HLEVBQUFwSCxRQUNBbUcsRUFBQWlCLEVBQUFHLEVBQUFILEVBQUFwSCxRQUNBLEdBQUEsaUJBQUFOLEdBQUEsaUJBQUF5RyxFQUNBLE9BQUFmLEVBQUExRixFQUFBeUcsRUFBQUssR0FDQSxHQUFBZ0IsTUFBQUMsUUFBQS9ILElBQUE4SCxNQUFBQyxRQUFBdEIsR0FDQSxPQUFBTCxFQUFBcEcsRUFBQXlHLEVBQUFLLEVBQUFYLEdBRUEsTUFBQSxJQUFBaEIsVUFBQSxpREFBQTVELEVBQUEsUUFBQXNHLElBaUZBcEMsTUFBQUEsRUFDQXVDLFFBM0xBLFNBQUFDLEdBQ0EsT0FBQXhDLEVBQUF3QyxFQUFBLEVBQUEsSUEyTEFDLFdBL0tBLFNBQUF6RCxFQUFBQyxFQUFBakYsR0FDQSxJQUFBMEQsRUFBQXNDLEVBQUFFLEVBQUFsQixFQUFBQyxFQUFBakYsR0FBQSxFQUFBLEdBQ0EsT0FBQTBELEVBQUFBLEdBQUEsRUFBQSxFQUFBQSxJQThLQXVELEtBQUFBLEVBQ0F5QixVQTdDQSxTQUFBbkksRUFBQXlHLEVBQUFFLEVBQUFDLEVBQUFULEdBQ0FBLEVBQUFBLEdBQUEsR0FDQSxJQUFBLElBQUF4RyxFQUFBLEVBQUFBLEVBQUFLLEVBQUFNLE9BQUFYLElBQ0F3RyxFQUFBeEcsR0FBQStHLEVBQUExRyxFQUFBTCxHQUFBOEcsRUFBQTlHLEdBQUFnSCxFQUFBQyxHQUVBLE9BQUFULEdBeUNBMUMsU0F0Q0EsU0FBQXVCLEVBQUFvRCxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBOUMsR0FHQSxHQUFBcEQsS0FBQXVELElBQUF3QyxFQUFBQyxHQUFBOUMsRUFDQSxPQUFBK0MsRUFFQSxJQUFBRSxHQUFBeEQsRUFBQW9ELElBQUFDLEVBQUFELElBQUFHLEVBQUFELEdBQUFBLEVBVUEsT0FUQTdDLElBQ0E4QyxFQUFBRCxFQUNBRSxFQUFBRCxFQUFBQyxFQUFBRCxFQUNBQyxFQUFBRixJQUFBRSxFQUFBRixHQUVBRSxFQUFBRCxFQUFBQyxFQUFBRCxFQUNBQyxFQUFBRixJQUFBRSxFQUFBRixJQUdBRSxHQXVCQUMsU0FBQXpDLEVBQUEsR0FDQTBDLFNBQUExQyxFQUFBLEdBQ0EyQyxTQUFBM0MsRUFBQSxvREM1TUEsSUFBQTRDLEVBQUE5SSxFQUFBLGVBQ0ErSSxFQUFBL0ksRUFBQSxpQkFDQXVGLEVBQUF2RixFQUFBLFdBcVVBVSxFQUFBSixRQW5VQSxTQUFBMEksRUFBQUMsR0FDQUEsRUFBQTFELEVBQUEwRCxFQUFBLE1BQ0EsSUFDQUMsRUFDQUMsRUFDQUMsRUFIQUMsRUFBQTlHLEtBQUEzQixPQUlBMEksRUFBQSxLQUNBQyxHQUFBLEVBSUEsT0FGQUMsRUFBQVAsR0FFQSxDQUNBL0QsTUFBQUEsRUFDQThELGFBQUEsU0FBQUMsR0FDQSxPQUFBRCxFQUFBQyxJQUVBTyxRQUFBQSxFQUNBQyxRQWlEQSxXQUNBLE9BQUFQLEdBakRBUSxjQW9EQSxXQUVBLE9BREFDLE9BQUFwSCxLQUFBQyxNQUFBLElBQUFELEtBQUEzQixZQXBEQWdKLGFBeUNBLFdBRUEsSUFEQSxJQUFBM0osRUFBQSxFQUNBLElBQUFBLEdBQUFBLEVBQUFpRixJQUNBLE9BQUFqRixHQTNDQTRKLGFBMkRBLFdBQ0FULEVBQUFVLEtBM0RBQyxRQThEQSxTQUFBMUcsRUFBQTJHLEVBQUFDLEdBQ0EsSUFBQWhFLFNBQUE1QyxHQUFBLE1BQUEsSUFBQWdDLFVBQUEsMENBR0EsT0FGQTJFLEVBQUF6RSxFQUFBeUUsRUFBQSxJQUNBQyxFQUFBMUUsRUFBQTBFLEVBQUEsSUFDQWIsRUFBQWMsUUFBQTdHLEVBQUEyRyxFQUFBLElBakVBRSxRQW9FQSxTQUFBN0csRUFBQUMsRUFBQTBHLEVBQUFDLEdBQ0EsSUFBQWhFLFNBQUE1QyxHQUFBLE1BQUEsSUFBQWdDLFVBQUEsMENBQ0EsSUFBQVksU0FBQTNDLEdBQUEsTUFBQSxJQUFBK0IsVUFBQSwwQ0FHQSxPQUZBMkUsRUFBQXpFLEVBQUF5RSxFQUFBLElBQ0FDLEVBQUExRSxFQUFBMEUsRUFBQSxJQUNBYixFQUFBYyxRQUFBN0csRUFBQTJHLEVBQUExRyxFQUFBMEcsSUF4RUF4RyxRQTJFQSxTQUFBSCxFQUFBQyxFQUFBNkcsRUFBQUgsRUFBQUMsR0FDQSxJQUFBaEUsU0FBQTVDLEdBQUEsTUFBQSxJQUFBZ0MsVUFBQSwwQ0FDQSxJQUFBWSxTQUFBM0MsR0FBQSxNQUFBLElBQUErQixVQUFBLDBDQUNBLElBQUFZLFNBQUFrRSxHQUFBLE1BQUEsSUFBQTlFLFVBQUEsMENBR0EsT0FGQTJFLEVBQUF6RSxFQUFBeUUsRUFBQSxJQUNBQyxFQUFBMUUsRUFBQTBFLEVBQUEsSUFDQWIsRUFBQTVGLFFBQ0FILEVBQUEyRyxFQUNBMUcsRUFBQTBHLEVBQ0FHLEVBQUFILElBbkZBSSxRQXVGQSxTQUFBL0csRUFBQUMsRUFBQTZHLEVBQUE1RyxFQUFBeUcsRUFBQUMsR0FDQSxJQUFBaEUsU0FBQTVDLEdBQUEsTUFBQSxJQUFBZ0MsVUFBQSwwQ0FDQSxJQUFBWSxTQUFBM0MsR0FBQSxNQUFBLElBQUErQixVQUFBLDBDQUNBLElBQUFZLFNBQUFrRSxHQUFBLE1BQUEsSUFBQTlFLFVBQUEsMENBQ0EsSUFBQVksU0FBQTFDLEdBQUEsTUFBQSxJQUFBOEIsVUFBQSwwQ0FHQSxPQUZBMkUsRUFBQXpFLEVBQUF5RSxFQUFBLElBQ0FDLEVBQUExRSxFQUFBMEUsRUFBQSxJQUNBYixFQUFBZ0IsUUFDQS9HLEVBQUEyRyxFQUNBMUcsRUFBQTBHLEVBQ0FHLEVBQUFILEVBQ0F6RyxFQUFBeUcsSUFqR0EvQyxLQXFHQSxXQUNBLE9BQUFvRCxJQUFBLEdBQUEsR0FyR0FBLFFBQUFBLEVBQ0FDLE9BMkdBLFNBQUE1SyxHQUVBLEdBQUEsaUJBREFBLEVBQUE2RixFQUFBN0YsRUFBQSxLQUNBLE1BQUEsSUFBQTJGLFVBQUEsNkJBQ0EsT0FBQUgsSUFBQXhGLEdBN0dBNkssTUFBQUEsRUFDQUMsV0FBQUEsRUFDQUMsS0F3SUEsU0FBQUMsR0FDQSxPQUFBLElBQUFBLEVBQUFsSyxZQUFBLEVBQ0FrSyxFQUFBRixFQUFBLEVBQUFFLEVBQUFsSyxVQXpJQW1LLFFBNElBLFNBQUFDLEdBQ0EsSUFBQTVDLE1BQUFDLFFBQUEyQyxHQUNBLE1BQUEsSUFBQXZGLFVBQUEsOEJBQUF1RixHQU9BLElBSkEsSUFBQUMsRUFDQUMsRUFDQWpELEVBQUErQyxFQUFBcEssT0FDQXVLLEVBQUFILEVBQUFJLFFBQ0FuRCxHQUNBZ0QsRUFBQXRJLEtBQUFDLE1BQUEwQyxJQUFBMkMsS0FDQWlELEVBQUFDLEVBQUFsRCxHQUNBa0QsRUFBQWxELEdBQUFrRCxFQUFBRixHQUNBRSxFQUFBRixHQUFBQyxFQUVBLE9BQUFDLEdBMUpBRSxTQUFBQSxFQUNBQyxhQXFLQSxTQUFBQyxFQUFBOUUsR0FDQThFLEVBQUE1RixFQUFBNEYsRUFBQSxHQUVBRixFQUFBLEVBREE1RSxFQUFBQSxHQUFBLElBRUEsSUFBQTdHLEVBQUEyTCxFQUFBNUksS0FBQTZJLEtBQUFsRyxLQUdBLE9BRkFtQixFQUFBLElBQUE3RyxFQUNBNkcsRUFBQSxJQUFBN0csRUFDQTZHLEdBM0tBZ0YsU0E4S0EsU0FBQUYsRUFBQTlFLEdBQ0E4RSxFQUFBNUYsRUFBQTRGLEVBQUEsR0FDQTlFLEVBQUFBLEdBQUEsR0FDQSxJQUFBcEcsRUFBQWlGLElBQUEzQyxLQUFBbUIsR0FBQSxFQUNBeUUsRUFBQSxFQUFBakQsSUFBQSxFQUNBb0csRUFBQXJMLEVBQ0FzTCxFQUFBaEosS0FBQWlKLEtBQUFyRCxHQUlBLE9BSEE5QixFQUFBLEdBQUE4RSxFQUFBNUksS0FBQWtKLElBQUFGLEdBQUFoSixLQUFBbUosSUFBQUosR0FDQWpGLEVBQUEsR0FBQThFLEVBQUE1SSxLQUFBa0osSUFBQUYsR0FBQWhKLEtBQUFrSixJQUFBSCxHQUNBakYsRUFBQSxHQUFBOEUsRUFBQTVJLEtBQUFtSixJQUFBSCxHQUNBbEYsR0F2TEFzRixhQTBMQSxTQUFBUixFQUFBOUUsR0FDQThFLEVBQUE1RixFQUFBNEYsRUFBQSxHQUNBOUUsRUFBQUEsR0FBQSxHQUNBLElBQUFwRyxFQUFBaUYsSUFBQTNDLEtBQUFtQixHQUFBLEVBQ0F5RSxFQUFBLEVBQUFqRCxJQUFBLEVBQ0EwRyxFQUFBMUcsSUFFQW9HLEVBQUFyTCxFQUNBc0wsRUFBQWhKLEtBQUFpSixLQUFBckQsR0FDQTNJLEVBQUEyTCxFQUFBNUksS0FBQXNKLEtBQUFELEdBSUEsT0FIQXZGLEVBQUEsR0FBQTdHLEVBQUErQyxLQUFBa0osSUFBQUYsR0FBQWhKLEtBQUFtSixJQUFBSixHQUNBakYsRUFBQSxHQUFBN0csRUFBQStDLEtBQUFrSixJQUFBRixHQUFBaEosS0FBQWtKLElBQUFILEdBQ0FqRixFQUFBLEdBQUE3RyxFQUFBK0MsS0FBQW1KLElBQUFILEdBQ0FsRixHQXRNQXlGLFdBeU1BLFNBQUF6RixHQUNBQSxFQUFBQSxHQUFBLEdBQ0EsSUFBQTBGLEVBQUE3RyxJQUNBOEcsRUFBQTlHLElBQ0ErRyxFQUFBL0csSUFFQWdILEVBQUEzSixLQUFBNkksS0FBQSxFQUFBVyxHQUNBSSxFQUFBNUosS0FBQTZJLEtBQUFXLEdBRUFLLEVBQUEsRUFBQTdKLEtBQUFtQixHQUFBc0ksRUFDQUssRUFBQSxFQUFBOUosS0FBQW1CLEdBQUF1SSxFQUVBNUksRUFBQWQsS0FBQWtKLElBQUFXLEdBQUFGLEVBQ0E1SSxFQUFBZixLQUFBbUosSUFBQVUsR0FBQUYsRUFDQS9CLEVBQUE1SCxLQUFBa0osSUFBQVksR0FBQUYsRUFDQTVJLEVBQUFoQixLQUFBbUosSUFBQVcsR0FBQUYsRUFLQSxPQUpBOUYsRUFBQSxHQUFBaEQsRUFDQWdELEVBQUEsR0FBQS9DLEVBQ0ErQyxFQUFBLEdBQUE4RCxFQUNBOUQsRUFBQSxHQUFBOUMsRUFDQThDLEdBNU5BaUcsU0FBQUEsRUFDQUMsWUE4TkEsU0FBQUMsR0FFQSxPQUFBLEtBREFBLEVBQUFBLEdBQUEsSUFDQWhNLE9BQUEsS0FDQWdNLEVBQUFDLEVBQUFELElBQUF0SCxPQWhPQXVILGlCQUFBQSxFQUNBQyxTQWdRQSxTQUFBQyxFQUFBQyxHQUtBLEdBSkFELEVBQUFwSCxFQUFBb0gsRUFBQSxHQUNBQyxFQUFBckgsRUFBQXFILEVBQUEsR0FHQXJELEVBQUEsQ0FDQUEsR0FBQSxFQUNBLElBQUFzRCxFQUFBdkQsRUFFQSxPQURBQSxFQUFBLEtBQ0FxRCxFQUFBQyxFQUFBQyxFQUVBLElBQUFDLEVBQUEsRUFDQUMsRUFBQSxFQUNBQyxFQUFBLEVBQ0EsR0FDQUYsRUFBQSxFQUFBNUgsSUFBQSxFQUNBNkgsRUFBQSxFQUFBN0gsSUFBQSxFQUNBOEgsRUFBQUYsRUFBQUEsRUFBQUMsRUFBQUEsUUFDQUMsR0FBQSxHQUFBLElBQUFBLEdBQ0EsSUFBQUMsRUFBQTFLLEtBQUE2SSxNQUFBLEVBQUE3SSxLQUFBMkssSUFBQUYsR0FBQUEsR0FHQSxPQUZBMUQsRUFBQXlELEVBQUFFLEVBQ0ExRCxHQUFBLEVBQ0FvRCxFQUFBQyxHQUFBRSxFQUFBRyxLQW5SQSxTQUFBekQsRUFBQTJELEVBQUFDLEdBQ0EsaUJBQUFELEdBQUEsaUJBQUFBLEVBRUFoRSxFQUFBTCxFQURBSSxFQUFBaUUsRUFDQUMsSUFFQWxFLE9BQUFtRSxFQUNBbEUsRUFBQUUsR0FFQUQsRUFBQVUsSUFDQVIsRUFBQSxLQUNBQyxHQUFBLEVBR0EsU0FBQXJFLElBQ0EsT0FBQWlFLElBa0JBLFNBQUFXLElBQ0EsT0FBQSxJQUFBZixFQUFBSSxHQXNEQSxTQUFBa0IsSUFDQSxPQUFBbkYsSUFBQSxHQVNBLFNBQUFxRixFQUFBNUYsRUFBQUMsR0FNQSxRQUxBeUksSUFBQXpJLElBQ0FBLEVBQUFELEVBQ0FBLEVBQUEsR0FHQSxpQkFBQUEsR0FBQSxpQkFBQUMsRUFDQSxNQUFBLElBQUFTLFVBQUEsd0NBR0EsT0FBQUgsS0FBQU4sRUFBQUQsR0FBQUEsRUFHQSxTQUFBNkYsRUFBQTdGLEVBQUFDLEdBTUEsUUFMQXlJLElBQUF6SSxJQUNBQSxFQUFBRCxFQUNBQSxFQUFBLEdBR0EsaUJBQUFBLEdBQUEsaUJBQUFDLEVBQ0EsTUFBQSxJQUFBUyxVQUFBLHdDQUdBLE9BQUE5QyxLQUFBQyxNQUFBK0gsRUFBQTVGLEVBQUFDLElBMEJBLFNBQUFxRyxFQUFBRSxFQUFBOUUsR0FDQThFLEVBQUE1RixFQUFBNEYsRUFBQSxHQUNBOUUsRUFBQUEsR0FBQSxHQUNBLElBQUFrRixFQUFBLEVBQUFyRyxJQUFBM0MsS0FBQW1CLEdBR0EsT0FGQTJDLEVBQUEsR0FBQThFLEVBQUE1SSxLQUFBbUosSUFBQUgsR0FDQWxGLEVBQUEsR0FBQThFLEVBQUE1SSxLQUFBa0osSUFBQUYsR0FDQWxGLEVBdUVBLFNBQUFvRyxFQUFBRCxHQUVBLE9BQUEsS0FEQUEsRUFBQUEsR0FBQSxJQUNBaE0sUUFBQSxFQUNBOEwsRUFBQUUsRUFBQS9FLElBQUEsU0FBQXVGLEdBQ0EsT0FBQUEsRUFBQU0sVUFJQSxTQUFBaEIsRUFBQWlCLEdBRUEsR0FBQSxLQURBQSxFQUFBQSxHQUFBLElBQ0EvTSxPQUFBLE9BQUEsRUFDQSxJQUNBWCxFQURBMk4sRUFBQSxFQUdBLElBQUEzTixFQUFBLEVBQUFBLEVBQUEwTixFQUFBL00sT0FBQVgsSUFDQTJOLEdBQUFELEVBQUExTixHQUdBLEdBQUEyTixHQUFBLEVBQUEsTUFBQSxJQUFBck4sTUFBQSwyQkFFQSxJQUFBUyxFQUFBc0UsSUFBQXNJLEVBQ0EsSUFBQTNOLEVBQUEsRUFBQUEsRUFBQTBOLEVBQUEvTSxPQUFBWCxJQUFBLENBQ0EsR0FBQWUsRUFBQTJNLEVBQUExTixHQUNBLE9BQUFBLEVBRUFlLEdBQUEyTSxFQUFBMU4sR0FFQSxPQUFBLEdBOEJBbUosK09DL1RBLElBQUl5RSxFQUF3QkMsT0FBT0Qsc0JBQy9CRSxFQUFpQkQsT0FBT0UsVUFBVUQsZUFDbENFLEVBQW1CSCxPQUFPRSxVQUFVRSxxQkFzRHhDLElBQUFDLEVBNUNBLFdBQ0MsSUFDQyxJQUFLTCxPQUFPTSxPQUNYLE9BQU8sRUFNUixJQUFJQyxFQUFRLElBQUl0RSxPQUFPLE9BRXZCLEdBREFzRSxFQUFNLEdBQUssS0FDa0MsTUFBekNQLE9BQU9RLG9CQUFvQkQsR0FBTyxHQUNyQyxPQUFPLEVBS1IsSUFEQSxJQUFJRSxFQUFRLEdBQ0h0TyxFQUFJLEVBQUdBLEVBQUksR0FBSUEsSUFDdkJzTyxFQUFNLElBQU14RSxPQUFPeUUsYUFBYXZPLElBQU1BLEVBS3ZDLEdBQXdCLGVBSFg2TixPQUFPUSxvQkFBb0JDLEdBQU8xRyxJQUFJLFNBQVUvSCxHQUM1RCxPQUFPeU8sRUFBTXpPLEtBRUgyTyxLQUFLLElBQ2YsT0FBTyxFQUlSLElBQUlDLEVBQVEsR0FJWixNQUhBLHVCQUF1QkMsTUFBTSxJQUFJQyxRQUFRLFNBQVVDLEdBQ2xESCxFQUFNRyxHQUFVQSxJQUdmLHlCQURFZixPQUFPZ0IsS0FBS2hCLE9BQU9NLE9BQU8sR0FBSU0sSUFBUUQsS0FBSyxJQU05QyxNQUFPTSxHQUVSLE9BQU8sR0FJUUMsR0FBb0JsQixPQUFPTSxPQUFTLFNBQVVhLEVBQVFDLEdBS3RFLElBSkEsSUFBSTNKLEVBRUE0SixFQURBM0osRUF0REwsU0FBa0I0SixHQUNqQixHQUFJQSxNQUFBQSxFQUNILE1BQU0sSUFBSTNKLFVBQVUseURBR3JCLE9BQU9xSSxPQUFPc0IsR0FpRExDLENBQVNKLEdBR1Q3QixFQUFJLEVBQUdBLEVBQUlrQyxVQUFVMU8sT0FBUXdNLElBQUssQ0FHMUMsSUFBSyxJQUFJbUMsS0FGVGhLLEVBQU91SSxPQUFPd0IsVUFBVWxDLElBR25CVyxFQUFlcE4sS0FBSzRFLEVBQU1nSyxLQUM3Qi9KLEVBQUcrSixHQUFPaEssRUFBS2dLLElBSWpCLEdBQUkxQixFQUF1QixDQUMxQnNCLEVBQVV0QixFQUFzQnRJLEdBQ2hDLElBQUssSUFBSXRGLEVBQUksRUFBR0EsRUFBSWtQLEVBQVF2TyxPQUFRWCxJQUMvQmdPLEVBQWlCdE4sS0FBSzRFLEVBQU00SixFQUFRbFAsTUFDdkN1RixFQUFHMkosRUFBUWxQLElBQU1zRixFQUFLNEosRUFBUWxQLE1BTWxDLE9BQU91RixrSkN4RlIsSUFBQWdLLEVBQ0VDLEVBQU9DLGFBQ1BELEVBQU9DLFlBQVlDLElBQU0sV0FDdkIsT0FBT0QsWUFBWUMsT0FDakJDLEtBQUtELEtBQU8sV0FDZCxPQUFRLElBQUlDLE1DTGhCQyxFQUVBLFNBQW1CQyxHQUNqQixRQUFTQSxJQUF1QixpQkFBUkEsR0FBbUMsbUJBQVJBLElBQTJDLG1CQUFiQSxFQUFJQyxNQ0h2RixJQUFBQyxFQUVBLFNBQWlCWixHQUNmLFNBQVNBLEdBQXNCLGlCQUFSQSxLQUVBLGlCQUFYYSxRQUE4QyxpQkFBaEJBLE9BQU9DLEtBQzFDZCxhQUFlYSxPQUFPQyxLQUNFLGlCQUFqQmQsRUFBSWUsVUFDYSxpQkFBakJmLEVBQUlnQixXQ0piLFNBQVNDLElBQ2QsTUFBeUIsb0JBQVhKLFFBQTBCQSxPQUFPLHFCQUcxQyxTQUFTdEssSUFDZCxvQkFBUzFGLEVBQUksRUFBR0EsRUFBSXFQLFVBQVUxTyxPQUFRWCxJQUNwQyxHQUFvQixNQUFoQnFRLEVBQVVyUSxHQUNaLE9BQU9xUSxFQUFVclEsR0FNaEIsU0FBU3NRLElBQ2QsTUFBMkIsb0JBQWI5TixhQ0paK04sb0JDVkosU0FBU0MsRUFBTVgsR0FDYixJQUFJaEIsRUFBTyxHQUNYLElBQUssSUFBSVMsS0FBT08sRUFBS2hCLEVBQUtqSSxLQUFLMEksR0FDL0IsT0FBT1QsR0FQQ2hPLEVBQUFKLFFBQXdDLG1CQUFoQm9OLE9BQU9nQixLQUNyQ2hCLE9BQU9nQixLQUFPMkIsR0FFbEJBLEtBQWVBLHNCQ0hmLElBQUlDLEVBRUksc0JBRnFCLFdBQzNCLE9BQU81QyxPQUFPRSxVQUFVMkMsU0FBU2hRLEtBQUsyTyxXQURYLEdBTzdCLFNBQVNzQixFQUFVQyxHQUNqQixNQUFpRCxzQkFBMUMvQyxPQUFPRSxVQUFVMkMsU0FBU2hRLEtBQUtrUSxHQUl4QyxTQUFTQyxFQUFZRCxHQUNuQixPQUFPQSxHQUNZLGlCQUFWQSxHQUNpQixpQkFBakJBLEVBQU9qUSxRQUNka04sT0FBT0UsVUFBVUQsZUFBZXBOLEtBQUtrUSxFQUFRLFlBQzVDL0MsT0FBT0UsVUFBVUUscUJBQXFCdk4sS0FBS2tRLEVBQVEsWUFDcEQsR0FkSm5RLEVBQVVJLEVBQUFKLFFBQWlCZ1EsRUFBeUJFLEVBQVlFLEdBRWhFRixVQUFvQkEsRUFLcEJsUSxFQUFBb1EsWUFBc0JBLG9CQ1h0QixJQUFJQyxFQUFTM0ksTUFBTTRGLFVBQVU1QyxNQUl6QjRGLEVBQVlsUSxFQUFBSixRQUFpQixTQUFVdVEsRUFBUUMsRUFBVXhKLEdBRzNELE9BRktBLElBQU1BLEVBQU8sSUFFZHVKLElBQVdDLElBR0pELGFBQWtCckIsTUFBUXNCLGFBQW9CdEIsS0FDaERxQixFQUFPRSxZQUFjRCxFQUFTQyxXQUkzQkYsSUFBV0MsR0FBNkIsaUJBQVZELEdBQXlDLGlCQUFaQyxFQUM5RHhKLEVBQUswSixPQUFTSCxJQUFXQyxFQUFXRCxHQUFVQyxFQTBCekQsU0FBa0I1USxFQUFHeUcsRUFBR1csR0FDdEIsSUFBSXpILEVBQUdzUCxFQUNQLEdBQUk4QixFQUFrQi9RLElBQU0rUSxFQUFrQnRLLEdBQzVDLE9BQU8sRUFFVCxHQUFJekcsRUFBRTBOLFlBQWNqSCxFQUFFaUgsVUFBVyxPQUFPLEVBR3hDLEdBQUlzRCxFQUFZaFIsR0FDZCxRQUFLZ1IsRUFBWXZLLEtBR2pCekcsRUFBSXlRLEVBQU9wUSxLQUFLTCxHQUNoQnlHLEVBQUlnSyxFQUFPcFEsS0FBS29HLEdBQ1RpSyxFQUFVMVEsRUFBR3lHLEVBQUdXLElBRXpCLEdBQUk2SixFQUFTalIsR0FBSSxDQUNmLElBQUtpUixFQUFTeEssR0FDWixPQUFPLEVBRVQsR0FBSXpHLEVBQUVNLFNBQVdtRyxFQUFFbkcsT0FBUSxPQUFPLEVBQ2xDLElBQUtYLEVBQUksRUFBR0EsRUFBSUssRUFBRU0sT0FBUVgsSUFDeEIsR0FBSUssRUFBRUwsS0FBTzhHLEVBQUU5RyxHQUFJLE9BQU8sRUFFNUIsT0FBTyxFQUVULElBQ0UsSUFBSXVSLEVBQUsxQyxFQUFXeE8sR0FDaEJtUixFQUFLM0MsRUFBVy9ILEdBQ3BCLE1BQU9sSCxHQUNQLE9BQU8sRUFJVCxHQUFJMlIsRUFBRzVRLFFBQVU2USxFQUFHN1EsT0FDbEIsT0FBTyxFQUtULElBSEE0USxFQUFHRSxPQUNIRCxFQUFHQyxPQUVFelIsRUFBSXVSLEVBQUc1USxPQUFTLEVBQUdYLEdBQUssRUFBR0EsSUFDOUIsR0FBSXVSLEVBQUd2UixJQUFNd1IsRUFBR3hSLEdBQ2QsT0FBTyxFQUlYLElBQUtBLEVBQUl1UixFQUFHNVEsT0FBUyxFQUFHWCxHQUFLLEVBQUdBLElBRTlCLElBQUsrUSxFQUFVMVEsRUFEZmlQLEVBQU1pQyxFQUFHdlIsSUFDYzhHLEVBQUV3SSxHQUFNN0gsR0FBTyxPQUFPLEVBRS9DLGNBQWNwSCxVQUFheUcsRUFuRWxCNEssQ0FBU1YsRUFBUUMsRUFBVXhKLEtBSXRDLFNBQVMySixFQUFrQi9MLEdBQ3pCLE9BQU9BLE1BQUFBLEVBR1QsU0FBU2lNLEVBQVU5TixHQUNqQixTQUFLQSxHQUFrQixpQkFBTkEsR0FBc0MsaUJBQWJBLEVBQUU3QyxVQUN0QixtQkFBWDZDLEVBQUVtTyxNQUEwQyxtQkFBWm5PLEVBQUUySCxTQUd6QzNILEVBQUU3QyxPQUFTLEdBQXFCLGlCQUFUNkMsRUFBRSwyQkN4Qi9CLFNBQVVvTyxHQUdSLElBQ1FDLEVBQ0FDLEVBQ0FDLEVBSEpDLEdBQ0lILEVBQVEsbUVBQ1JDLEVBQVcsdUlBQ1hDLEVBQWUsY0FHWixTQUFVRSxFQUFNQyxFQUFNQyxFQUFLQyxHQWNoQyxHQVh5QixJQUFyQi9DLFVBQVUxTyxRQUFpQyxZQTJLekMsUUFERXdPLEVBMUs2QjhDLEdBNEtsQyxZQUdHekUsSUFBUjJCLEVBQ0ssWUFHVSxpQkFBUkEsU0FDS0EsRUFHWmhILE1BQU1DLFFBQVErRyxHQUNULFFBR0YsR0FBR3VCLFNBQVNoUSxLQUFLeU8sR0FDckJoRSxNQUFNLEdBQUksR0FBR2tILGdCQTVMa0QsS0FBS0MsS0FBS0wsS0FDcEVDLEVBQU9ELEVBQ1BBLE9BQU96RSxJQUdUeUUsRUFBT0EsR0FBUSxJQUFJdEMsZ0JBRUVBLE9BQ25Cc0MsRUFBTyxJQUFJdEMsS0FBS3NDLElBR2RNLE1BQU1OLEdBQ1IsTUFBTXpNLFVBQVUsZ0JBOEoxQixJQUFnQjJKLEVBeEpKcUQsR0FISk4sRUFBT3BJLE9BQU9rSSxFQUFXUyxNQUFNUCxJQUFTQSxHQUFRRixFQUFXUyxNQUFlLFVBR3JEdEgsTUFBTSxFQUFHLEdBQ1osU0FBZHFILEdBQXNDLFNBQWRBLElBQzFCTixFQUFPQSxFQUFLL0csTUFBTSxHQUNsQmdILEdBQU0sRUFDWSxTQUFkSyxJQUNGSixHQUFNLElBSVYsSUFBSXZLLEVBQUlzSyxFQUFNLFNBQVcsTUFDckJPLEVBQUlULEVBQUtwSyxFQUFJLFVBQ2I4SyxFQUFJVixFQUFLcEssRUFBSSxTQUNiK0ssRUFBSVgsRUFBS3BLLEVBQUksV0FDYnBFLEVBQUl3TyxFQUFLcEssRUFBSSxjQUNiZ0wsRUFBSVosRUFBS3BLLEVBQUksV0FDYmlMLEVBQUliLEVBQUtwSyxFQUFJLGFBQ2JzRixFQUFJOEUsRUFBS3BLLEVBQUksYUFDYmtMLEVBQUlkLEVBQUtwSyxFQUFJLGtCQUNiOUgsRUFBSW9TLEVBQU0sRUFBSUYsRUFBS2Usb0JBQ25CQyxFQTJGWixTQUFpQmhCLEdBRWYsSUFBSWlCLEVBQWlCLElBQUl2RCxLQUFLc0MsRUFBS2tCLGNBQWVsQixFQUFLbUIsV0FBWW5CLEVBQUtvQixXQUd4RUgsRUFBZUksUUFBUUosRUFBZUcsV0FBY0gsRUFBZUssU0FBVyxHQUFLLEVBQUssR0FHeEYsSUFBSUMsRUFBZ0IsSUFBSTdELEtBQUt1RCxFQUFlQyxjQUFlLEVBQUcsR0FHOURLLEVBQWNGLFFBQVFFLEVBQWNILFdBQWNHLEVBQWNELFNBQVcsR0FBSyxFQUFLLEdBR3JGLElBQUlFLEVBQUtQLEVBQWVGLG9CQUFzQlEsRUFBY1Isb0JBSzVELE9BSkFFLEVBQWVRLFNBQVNSLEVBQWVTLFdBQWFGLEdBSTdDLEVBQUkvUSxLQUFLQyxPQURBdVEsRUFBaUJNLEdBQWEsUUE3R2hDSSxDQUFRM0IsR0FDWjRCLEVBdUhaLFNBQXNCNUIsR0FDcEIsSUFBSTZCLEVBQU03QixFQUFLc0IsU0FJZixPQUhXLElBQVJPLElBQ0RBLEVBQU0sR0FFREEsRUE1SE9DLENBQWE5QixHQUNqQitCLEVBQVEsQ0FDVnRCLEVBQU1BLEVBQ051QixHQUFNQyxFQUFJeEIsR0FDVnlCLElBQU1uQyxFQUFXb0MsS0FBS0MsU0FBUzFCLEdBQy9CMkIsS0FBTXRDLEVBQVdvQyxLQUFLQyxTQUFTMUIsRUFBSSxHQUNuQ0MsRUFBTUEsRUFBSSxFQUNWMkIsR0FBTUwsRUFBSXRCLEVBQUksR0FDZDRCLElBQU14QyxFQUFXb0MsS0FBS0ssV0FBVzdCLEdBQ2pDOEIsS0FBTTFDLEVBQVdvQyxLQUFLSyxXQUFXN0IsRUFBSSxJQUNyQytCLEdBQU03SyxPQUFPckcsR0FBRzBILE1BQU0sR0FDdEJ5SixLQUFNblIsRUFDTm9SLEVBQU1oQyxFQUFJLElBQU0sR0FDaEJpQyxHQUFNWixFQUFJckIsRUFBSSxJQUFNLElBQ3BCQSxFQUFNQSxFQUNOa0MsR0FBTWIsRUFBSXJCLEdBQ1ZDLEVBQU1BLEVBQ05rQyxHQUFNZCxFQUFJcEIsR0FDVjNGLEVBQU1BLEVBQ044SCxHQUFNZixFQUFJL0csR0FDVitILEVBQU1oQixFQUFJbkIsRUFBRyxHQUNiQSxFQUFNbUIsRUFBSXhSLEtBQUt5UyxNQUFNcEMsRUFBSSxLQUN6QmpULEVBQU0rUyxFQUFJLEdBQUtiLEVBQVdvQyxLQUFLZ0IsVUFBVSxHQUFLcEQsRUFBV29DLEtBQUtnQixVQUFVLEdBQ3hFQyxHQUFNeEMsRUFBSSxHQUFLYixFQUFXb0MsS0FBS2dCLFVBQVUsR0FBS3BELEVBQVdvQyxLQUFLZ0IsVUFBVSxHQUN4RUUsRUFBTXpDLEVBQUksR0FBS2IsRUFBV29DLEtBQUtnQixVQUFVLEdBQUtwRCxFQUFXb0MsS0FBS2dCLFVBQVUsR0FDeEVHLEdBQU0xQyxFQUFJLEdBQUtiLEVBQVdvQyxLQUFLZ0IsVUFBVSxHQUFLcEQsRUFBV29DLEtBQUtnQixVQUFVLEdBQ3hFSSxFQUFNcEQsRUFBTSxNQUFRRCxFQUFNLE9BQVNySSxPQUFPbUksR0FBTXdELE1BQU0zRCxJQUFhLENBQUMsS0FBSzRELE1BQU1DLFFBQVE1RCxFQUFjLElBQ3JHaFMsR0FBT0EsRUFBSSxFQUFJLElBQU0sS0FBT21VLEVBQW1DLElBQS9CeFIsS0FBS0MsTUFBTUQsS0FBS3VELElBQUlsRyxHQUFLLElBQVkyQyxLQUFLdUQsSUFBSWxHLEdBQUssR0FBSSxHQUN2RjZWLEVBQU0sQ0FBQyxLQUFNLEtBQU0sS0FBTSxNQUFNbEQsRUFBSSxHQUFLLEVBQUksR0FBS0EsRUFBSSxJQUFNQSxFQUFJLElBQU0sSUFBTUEsRUFBSSxJQUMvRU8sRUFBTUEsRUFDTlksRUFBTUEsR0FHUixPQUFPM0IsRUFBS3lELFFBQVE5RCxFQUFPLFNBQVU0RCxHQUNuQyxPQUFJQSxLQUFTekIsRUFDSkEsRUFBTXlCLEdBRVJBLEVBQU10SyxNQUFNLEVBQUdzSyxFQUFNOVUsT0FBUyxPQW9DL0MsU0FBU3VULEVBQUkvRSxFQUFLbkgsR0FHaEIsSUFGQW1ILEVBQU1yRixPQUFPcUYsR0FDYm5ILEVBQU1BLEdBQU8sRUFDTm1ILEVBQUl4TyxPQUFTcUgsR0FDbEJtSCxFQUFNLElBQU1BLEVBRWQsT0FBT0EsRUFyQ1A2QyxFQUFXUyxNQUFRLENBQ2pCb0QsUUFBeUIsMkJBQ3pCQyxVQUF5QixTQUN6QkMsV0FBeUIsY0FDekJDLFNBQXlCLGVBQ3pCQyxTQUF5QixxQkFDekJDLFVBQXlCLFVBQ3pCQyxXQUF5QixhQUN6QkMsU0FBeUIsZUFDekJDLFFBQXlCLGFBQ3pCQyxRQUF5QixXQUN6QkMsWUFBeUIseUJBQ3pCQyxlQUF5QiwrQkFDekJDLG9CQUF5QiwrQkFJM0J6RSxFQUFXb0MsS0FBTyxDQUNoQkMsU0FBVSxDQUNSLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQzFDLFNBQVUsU0FBVSxVQUFXLFlBQWEsV0FBWSxTQUFVLFlBRXBFSSxXQUFZLENBQ1YsTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQU8sTUFBTyxNQUFPLE1BQzdFLFVBQVcsV0FBWSxRQUFTLFFBQVMsTUFBTyxPQUFRLE9BQVEsU0FBVSxZQUFhLFVBQVcsV0FBWSxZQUVoSFcsVUFBVyxDQUNULElBQUssSUFBSyxLQUFNLEtBQU0sSUFBSyxJQUFLLEtBQU0sT0EyRnhDdlUsRUFBQUosUUFBaUJ1UixFQWxOckIsS0pESTBFLEVBQU0sR0FPVkMsRUFvQkEsU0FBZ0JDLEVBQUtDLEdBQ25CLEdBQW1CLGlCQUFSRCxFQUNULE1BQU0sSUFBSXBSLFVBQVUscUJBSXRCLEdBQVksSUFBUnFSLEVBQVcsT0FBT0QsRUFDdEIsR0FBWSxJQUFSQyxFQUFXLE9BQU9ELEVBQU1BLEVBRTVCLElBQUk3UixFQUFNNlIsRUFBSWpXLE9BQVNrVyxFQUN2QixHQUFJdEcsSUFBVXFHLFFBQXdCLElBQVZyRyxFQUMxQkEsRUFBUXFHLEVBQ1JGLEVBQU0sUUFDRCxHQUFJQSxFQUFJL1YsUUFBVW9FLEVBQ3ZCLE9BQU8yUixFQUFJSSxPQUFPLEVBQUcvUixHQUd2QixLQUFPQSxFQUFNMlIsRUFBSS9WLFFBQVVrVyxFQUFNLEdBQ3JCLEVBQU5BLElBQ0ZILEdBQU9FLEdBR1RDLElBQVEsRUFDUkQsR0FBT0EsRUFLVCxPQURBRixHQURBQSxHQUFPRSxHQUNHRSxPQUFPLEVBQUcvUixJS3hEdEIsSUNMSWdTLEVES0pDLEVBQWlCLFNBQWlCSixFQUFLQyxFQUFLSSxHQUcxQyxPQUZBTCxFQUFNQSxFQUFJbEcsZ0JBRVMsSUFBUm1HLEVBQ0ZELEdBSVBLLEVBRFMsSUFBUEEsRUFDRyxJQUNJQSxFQUNKQSxFQUFHdkcsV0FFSCxJQUdBaUcsRUFBT00sRUFBSUosRUFBTUQsRUFBSWpXLFFBQVVpVyxJQ3JCbENNLEVBQUEsYUFFRkMsRUFBYyxDQUFFQyxVQUFXLEdBQUlDLE9BQVEsR0FBSUMsT0FBUSxJQVFqREMsRUFBcUIsQ0FDekIsWUFDQSxhQUNBLGNBR0YsU0FBU0MsRUFBUUMsRUFBU2hRLEdBQ3hCLHNCQUQrQixJQUN4QixJQUFJaVEsUUFBSixTQUFhQyxFQUFTQyxHQUMzQm5RLEVBQU95RyxFQUFPLEdBQUlpSixFQUFhMVAsR0FDL0IsSUFBTW9RLEVBQVdDLEVBQWdCakssT0FBT00sT0FBTyxHQUFJMUcsRUFBTSxDQUN2RDJQLFVBQVcsR0FDWHhWLFdBQU80TCxLQUVIdUssRUFBT04sRUFBVSxjQUFnQixZQUNqQ08sRUFBUzVILElBQ2YsT0FBSTRILEdBQVVBLEVBQU9DLFFBQWtDLG1CQUFqQkQsRUFBT0QsR0FDcENDLEVBQU9ELEdBQU03SixFQUFPLEdBQUl6RyxFQUFNLFVBQUVvUSxLQUNwQy9ILEtBREksU0FDQ29JLEdBQUEsT0FBTVAsRUFBUU8sS0FFZlAsRUFBUSxVQUFFRSxFQUFVRyxRQUFRLE1BOENsQyxTQUFTRyxFQUFhQyxFQUFTM1EsR0FDcEMsc0JBRDJDLElBckI3QyxTQUFnQzJRLEdBQzlCLE9BQU8sSUFBSVYsUUFBSixTQUFhQyxHQUNsQixJQUFNVSxFQUFhRCxFQUFRRSxRQUFRLEtBQ25DLElBQW9CLElBQWhCRCxFQUFKLENBV0EsSUFQQSxJQUFNRSxFQUFTSCxFQUFRak4sTUFBTWtOLEVBQWEsR0FDcENHLEVBQWF4SSxPQUFPeUksS0FBS0YsR0FDekJHLEVBQU9OLEVBQVFqTixNQUFNLEVBQUdrTixHQUN4Qk0sRUFBWSxlQUFlQyxLQUFLRixHQUNoQ0csR0FBUUYsRUFBWUEsRUFBVSxHQUFLLFVBQU9uTCxFQUMxQ3NMLEVBQUssSUFBSUMsWUFBWVAsRUFBVzdYLFFBQ2hDcVksRUFBSyxJQUFJQyxXQUFXSCxHQUNqQjlZLEVBQUksRUFBR0EsRUFBSXdZLEVBQVc3WCxPQUFRWCxJQUNyQ2daLEVBQUdoWixHQUFLd1ksRUFBV1UsV0FBV2xaLEdBRWhDMlgsRUFBUSxJQUFJM0gsT0FBT21KLEtBQUssQ0FBRUwsR0FBTSxDQUFFSixLQUFNRyxVQWJ0Q2xCLEVBQVEsSUFBSTNILE9BQU9tSixRQWtCaEJDLENBQXNCaEIsR0FDMUJ0SSxLQURJLFNBQ0N1SixHQUFBLE9BQVFDLEVBQVNELEVBQU01UixLQUcxQixTQUFTNlIsRUFBVUQsRUFBTTVSLEdBQzlCLHNCQURxQyxJQUM5QixJQUFJaVEsUUFBSixTQUFZQyxHQUVqQixJQUFNRSxHQUROcFEsRUFBT3lHLEVBQU8sR0FBSWlKLEVBQWExUCxJQUNUb1EsU0FFaEJHLEVBQVM1SCxJQUNmLEdBQUk0SCxHQUFxQyxtQkFBcEJBLEVBQU9zQixVQUEyQnRCLEVBQU9DLE9BRTVELE9BQU9ELEVBQU9zQixTQUFTRCxFQUFNbkwsRUFBTyxHQUFJekcsRUFBTSxVQUFFb1EsS0FDN0MvSCxLQURJLFNBQ0NvSSxHQUFBLE9BQU1QLEVBQVFPLEtBR2pCbkIsS0FDSEEsRUFBT3ZVLFNBQVMrVyxjQUFjLE1BQ3pCQyxNQUFNQyxXQUFhLFNBQ3hCMUMsRUFBSy9ILE9BQVMsVUFFaEIrSCxFQUFLMkMsU0FBVzdCLEVBQ2hCZCxFQUFLNEMsS0FBTzNKLE9BQU80SixJQUFJQyxnQkFBZ0JSLEdBQ3ZDN1csU0FBU3NYLEtBQUtDLFlBQVloRCxHQUMxQkEsRUFBS2lELFFBQUwsV0FDRWpELEVBQUtpRCxRQUFVOUMsRUFDZitDLFdBQUEsV0FDRWpLLE9BQU80SixJQUFJTSxnQkFBZ0JiLEdBQ3ZCdEMsRUFBS29ELGVBQWVwRCxFQUFLb0QsY0FBY0MsWUFBWXJELEdBQ3ZEQSxFQUFLc0QsZ0JBQWdCLFFBQ3JCMUMsRUFBUSxVQUFFRSxFQUFVRyxRQUFRLE9BR2hDakIsRUFBS3VELFVBc0JKLFNBQVN4QyxFQUFpQnZLLEdBSS9CLGtCQUpxQyxJQUliLG1CQUh4QkEsRUFBTVcsRUFBTyxHQUFJWCxJQUdGZ04sS0FDYixPQUFPaE4sRUFBSWdOLEtBQUtoTixHQUNYLEdBQUlBLEVBQUlnTixLQUNiLE9BQU9oTixFQUFJZ04sS0FHYixJQUtNQyxFQUxGNVksRUFBUSxLQUNSd1YsRUFBWSxJQUNhLGlCQUFsQjdKLEVBQUk2SixZQUF3QkEsRUFBWTdKLEVBQUk2SixXQUU5QixpQkFBZDdKLEVBQUkzTCxTQUdYNFksRUFENkIsaUJBQXBCak4sRUFBSWlOLFlBQ0NqTixFQUFJaU4sWUFFSjlYLEtBQUtxQyxJQUFJLElBQU93SSxFQUFJM0wsT0FFcENBLEVBQVFvVixFQUFRbE4sT0FBT3lELEVBQUkzTCxPQUFRa0ksT0FBTzBRLEdBQWE3WixPQUFRLE1BR2pFLElBQU04WixFQUFXclUsU0FBU21ILEVBQUltTixjQUFnQnRVLFNBQVNtSCxFQUFJb04sUUFBVXBOLEVBQUltTixZQUFjLEVBQXRFLEdBQTZFbk4sRUFBSSxNQUFVLEdBQzVHLE9BQWEsTUFBVDNMLEVBQ0ssQ0FBRTZZLEVBQVU3WSxHQUFRZ1osT0FBT0MsU0FBU3JNLEtBQUssS0FBTzRJLEVBR2hELENBQUU3SixFQUFJOEosT0FBUTlKLEVBQUl1TixNQUREdk4sRUFBSXdOLFVBQ3NCTixFQUFVbE4sRUFBSXlOLEtBQU16TixFQUFJK0osUUFBU3NELE9BQU9DLFNBQVNyTSxLQUFLLEtBQU80SSxFQ3BLbkgsSUFBTTZELEVBQWMsQ0FDbEJDLFVBQVcsYUFDWEMsU0FBVSxVQUNWQyxVQUFXLFVBQ1hDLEtBQU0sUUFDTkMsR0FBSSxLQUNKQyxXQUFZLFlBQ1pDLFFBQVMsT0FDVEMsYUFBYyxVQUlWQyxFQUFVLENBQ2QsYUFBYyxRQUFTLGdCQUFpQixjQUN4QyxhQUFjLGNBQWUsUUFBUyxhQUN0QyxtQkFBb0IsZ0JBQWlCLGVBQ3JDLGVBQWdCLGNBQWUsU0FBVSxVQUFXLGFBQ3BELFNBQVUsT0FBUSxPQUFRLFNBQVUsU0FBVSxVQUFXLFVBQ3pELE9BQVEsV0FBWSxjQUFlLE1BQU8sZUFBZ0IsWUFDMUQsUUFBUyxPQUFRLFFBQVMsWUFBYSxVQUFXLEtBQU0sS0FDeEQsb0JBQXFCLE9BQVEsU0FBVSxXQUFZLG1CQUt4Q0MsRUFBQSxTQUFpQnphLEdBQ2YyTSxPQUFPZ0IsS0FBSzNOLEdBQ3BCeU4sUUFBTCxTQUFhVyxHQUNQQSxLQUFPMkwsRUFFVFcsUUFBUUMsS0FBUixvREFBaUV2TSxFQUFBLG9CQURsRDJMLEVBQVkzTCxHQUM2RCxNQUM5RW9NLEVBQVFJLFNBQVN4TSxJQUMzQnNNLFFBQVFDLEtBQVIsb0RBQWlFdk0sRUFBQSxRQ2pDdkUsSUF3RkF5TSxFQXRGYSxDQUdYLENBQUUsV0FBWSxNQUFPLE9BQ3JCLENBQUUsZUFBZ0IsSUFBSyxLQUN2QixDQUFFLFNBQVUsSUFBSyxLQUNqQixDQUFFLGVBQWdCLElBQUssS0FDdkIsQ0FBRSxnQkFBaUIsS0FBTSxNQUd6QixDQUFFLEtBQU0sR0FBSSxJQUNaLENBQUUsS0FBTSxHQUFJLEtBQ1osQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLE1BQU8sSUFBSyxLQUNkLENBQUUsTUFBTyxJQUFLLEtBQ2QsQ0FBRSxNQUFPLElBQUssS0FHZCxDQUFFLEtBQU0sSUFBSyxNQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxHQUFJLEtBQ1osQ0FBRSxLQUFNLEdBQUksSUFDWixDQUFFLEtBQU0sR0FBSSxJQUNaLENBQUUsTUFBTyxHQUFJLElBQ2IsQ0FBRSxNQUFPLEtBQU0sTUFDZixDQUFFLE1BQU8sS0FBTSxNQUNmLENBQUUsS0FBTSxJQUFNLE1BQ2QsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLE1BQU8sSUFBSyxNQUNkLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxNQUFPLElBQUssS0FDZCxDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxHQUFJLEtBQ1osQ0FBRSxLQUFNLEdBQUksSUFDWixDQUFFLEtBQU0sR0FBSSxJQUNaLENBQUUsTUFBTyxHQUFJLElBQ2IsQ0FBRSxNQUFPLEdBQUksSUFDYixDQUFFLE1BQU8sR0FBSSxJQUNiLENBQUUsS0FBTSxJQUFLLE1BQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLElBQUssS0FDYixDQUFFLEtBQU0sSUFBSyxLQUNiLENBQUUsS0FBTSxJQUFLLEtBQ2IsQ0FBRSxLQUFNLEdBQUksS0FDWixDQUFFLEtBQU0sR0FBSSxJQUNaLENBQUUsS0FBTSxHQUFJLElBQ1osQ0FBRSxNQUFPLEdBQUksSUFDYixDQUFFLE1BQU8sR0FBSSxJQUNiLENBQUUsTUFBTyxHQUFJLElBSWIsQ0FBRSxjQUFlLElBQUssSUFBSyxNQUMzQixDQUFFLFNBQVUsSUFBSyxHQUFJLE1BQ3JCLENBQUUsUUFBUyxJQUFLLEdBQUksTUFDcEIsQ0FBRSxlQUFnQixFQUFHLEVBQUcsTUFDeEIsQ0FBRSxTQUFVLEdBQUksR0FBSSxNQUNwQixDQUFFLFVBQVcsR0FBSSxHQUFJLE1BQ3JCLENBQUUsU0FBVSxJQUFLLEdBQU0sTUFDdkIsQ0FBRSxTQUFVLEdBQU0sR0FBTSxNQUN4QixDQUFFLFNBQVUsR0FBTSxHQUFNLE1BQ3hCLENBQUUsU0FBVSxHQUFNLEdBQU0sTUFDeEIsQ0FBRSxTQUFVLEdBQU0sR0FBTSxNQUN4QixDQUFFLFNBQVUsRUFBRyxHQUFJLE1BQ25CLENBQUUsU0FBVSxHQUFJLEdBQUksTUFDcEIsQ0FBRSxTQUFVLEdBQUksR0FBSSxNQUNwQixDQUFFLFNBQVUsR0FBSSxHQUFJLE1BQ3BCLENBQUUsU0FBVSxHQUFJLEdBQUksTUFDcEIsQ0FBRSxVQUFXLEdBQUksR0FBSSxNQUNyQixDQUFFLFVBQVcsR0FBSSxHQUFJLE1BQ3JCLENBQUUsVUFBVyxHQUFJLEdBQUksT0FHSEMsT0FBTCxTQUFhQyxFQUFNQyxHQUNoQyxJQUFNQyxFQUFPLENBQ1hDLE1BQU9GLEVBQU8sSUExRkcsS0EyRmpCL2EsV0FBWSxDQUFFK2EsRUFBTyxHQUFJQSxFQUFPLEtBSWxDLE9BRkFELEVBQUtDLEVBQU8sSUFBTUMsRUFDbEJGLEVBQUtDLEVBQU8sR0FBR3ZHLFFBQVEsS0FBTSxNQUFRd0csRUFDOUJGLEdBQ04sSUNoR0hJLEVBQWlCLFdBQ2IsSUFBSyxJQUFJcmMsRUFBSSxFQUFHQSxFQUFJcVAsVUFBVTFPLE9BQVFYLElBQ2xDLFFBQXFCd04sSUFBakI2QixVQUFVclAsR0FBa0IsT0FBT3FQLFVBQVVyUCxJQ0RyRG9jLEVBQVEsQ0FBRSxLQUFNLEtBQU0sSUFBSyxLQUFNLEtBQU0sS0FBTSxLQUFNLE1BRW5ERSxFQUFjLENBRWhCMUosRUFBRyxDQUNEMkosT0FBUSxTQUNSQyxPQUFRLEdBRVZDLEdBQUksQ0FDRkYsT0FBUSxTQUNSQyxPQUFRLEtBRVZqSSxHQUFJLENBQ0ZnSSxPQUFRLFNBQ1JDLE9BQVEsTUFHVkUsR0FBSSxDQUNGSCxPQUFRLFdBQ1JDLE9BQVEsRUFBSSxJQUVkRyxHQUFJLENBQ0ZKLE9BQVEsV0FDUkMsT0FBUSxFQUFJLEdBRWRJLEdBQUksQ0FDRkwsT0FBUSxXQUNSQyxPQUFRLEdBRVZLLEdBQUksQ0FDRk4sT0FBUSxXQUNSQyxPQUFRLEtBSVosTUFBTU0sRUFBVSxDQUNkQyxPQUFRLENBQ04xQixLQUFNLElBQ04yQixNQUFPLEVBQUksT0FFYkMsU0FBVSxDQUNSNUIsS0FBTSxLQUNOMkIsTUFBTyxRQStEWCxJQUFBRSxFQXZEQSxTQUEwQjdYLEVBQU84WCxFQUFVQyxFQUFRM1YsR0FDakQsR0FBcUIsaUJBQVZwQyxJQUF1QmUsU0FBU2YsR0FBUSxNQUFNLElBQUkvRSxNQUFNLGlDQUNuRSxJQUFLNmMsSUFBYUMsRUFBUSxNQUFNLElBQUk5YyxNQUFNLGtDQUcxQyxJQUFJK2MsRUFBZ0JoQixHQURwQjVVLEVBQU9BLEdBQVEsSUFDa0I0VixjQUFlLElBQzVDQyxFQUFZN1YsRUFBSzZWLFVBQ2pCQyxHQUFpQyxJQUFwQjlWLEVBQUs4VixXQUt0QixHQUhBSixFQUFXQSxFQUFTOUssY0FDcEIrSyxFQUFTQSxFQUFPL0ssZUFFaUIsSUFBN0IrSixFQUFNOUQsUUFBUTZFLEdBQWtCLE1BQU0sSUFBSTdjLE1BQU0sc0JBQXdCNmMsRUFBVyxzQkFBd0JmLEVBQU01TixLQUFLLE9BQzFILElBQStCLElBQTNCNE4sRUFBTTlELFFBQVE4RSxHQUFnQixNQUFNLElBQUk5YyxNQUFNLHNCQUF3QjhjLEVBQVMsc0JBQXdCaEIsRUFBTTVOLEtBQUssT0FFdEgsR0FBSTJPLElBQWFDLEVBRWYsT0FBTy9YLEVBR1QsSUFBSW1ZLEVBQVcsRUFDWEMsRUFBYSxFQUNiQyxHQUFZLEVBRUMsT0FBYlAsSUFDRk0sRUFBYSxFQUFJSixFQUNqQkYsRUFBVyxNQUVFLE9BQVhDLElBQ0ZNLEdBQVksRUFDWkYsRUFBV0gsRUFDWEQsRUFBUyxNQUdYLElBQUlPLEVBQWVyQixFQUFZYSxHQUMzQlMsRUFBYXRCLEVBQVljLEdBR3pCUyxFQUFTeFksRUFBUXNZLEVBQWFuQixPQUFTaUIsRUFHdkNFLEVBQWFwQixTQUFXcUIsRUFBV3JCLFNBRXJDc0IsR0FBVWYsRUFBUWEsRUFBYXBCLFFBQVFTLE9BR3pDLElBQUloUSxFQUFTNlEsRUFBU0QsRUFBV3BCLE9BQVNnQixFQU0xQyxPQUxJRSxHQUFhSCxFQUNmdlEsRUFBU3RLLEtBQUt5UyxNQUFNbkksR0FDVSxpQkFBZHNRLEdBQTBCbFgsU0FBU2tYLEtBQ25EdFEsRUF0REosU0FBZ0IzSCxFQUFPeVksR0FDckIsT0FBT2pZLE9BQU9uRCxLQUFLeVMsTUFBTTlQLEVBQVEsSUFBTXlZLEdBQVksS0FBT0EsR0FxRC9DM0ksQ0FBTW5JLEVBQVFzUSxJQUVsQnRRLEdDckZGLFNBQVMrUSxFQUFpQjdDLEVBQVc4QyxFQUFrQkMsRUFBZ0JaLEdBQzVFLHNCQURzRCxxQkFBZ0IscUJBQXNCLElBQ3JGSCxFQUFjaEMsRUFBVzhDLEVBQVdDLEVBQVMsZUFDbERaLEVBQ0FDLFVBQVcsRUFDWEMsWUFBWSxJQ01ELFNBQVNXLEVBQWNDLEVBQU9qZCxHQUMzQyxJQUFJMkIsRUFBT0MsRUFDUHNiLEVBQVlDLEVBQ1pDLEVBQWFDLEVBRVhoUCxFQUFVZSxJQUNWblAsRUFBYUQsRUFBU0MsV0FDdEJxZCxFQWhDUixTQUErQnRkLEdBQzdCLFNBQUtBLEVBQVNDLFlBQ3FCLGlCQUF4QkQsRUFBU0MsY0FDaEJnSCxNQUFNQyxRQUFRbEgsRUFBU0MsYUFBZUQsRUFBU0MsV0FBV1IsUUFBVSxJQTZCbEQ4ZCxDQUFxQnZkLEdBQ3JDd2QsRUFBWVAsRUFBTU8sVUFDcEJDLElBQWFILElBQXdDLElBQXhCdGQsRUFBU3lkLFdBQ3RDQyxLQUFnQkYsR0FBYUYsSUFBaUJ0ZCxFQUFTMGQsWUFFdERyUCxJQUFTb1AsRUFBYUMsR0FBYyxHQUN6QyxJQU9JQyxFQUFZQyxFQVBWMUMsRUFBUWxiLEVBQVNrYixNQUNqQmlCLEVBQW1ELGlCQUEzQm5jLEVBQVNtYyxlQUE4QmpYLFNBQVNsRixFQUFTbWMsZUFBa0JuYyxFQUFTbWMsY0FBZ0IsR0FDNUgwQixFQUFRclosRUFBUXhFLEVBQVM2ZCxNQUFPLEdBRWhDQyxFQUFtQnpQLEVBQVVTLE9BQU9nUCxpQkFBbUIsRUFDdkRDLEVBQWlCTCxFQUFjSSxFQUFtQixFQVFyQixpQkFBeEI5ZCxFQUFTMmQsWUFBMkJ6WSxTQUFTbEYsRUFBUzJkLFlBRy9EQyxFQUFtQnBaLEVBQVF4RSxFQUFTNGQsaUJBRHBDRCxFQUFhM2QsRUFBUzJkLFlBR2xCTCxHQUVGSyxFQUFhSSxFQUdiSCxFQUFtQnBaLEVBQVF4RSxFQUFTNGQsaUJBQWtCLElBS3REQSxFQUFtQnBaLEVBQVF4RSxFQUFTNGQsaUJBRnBDRCxFQUFhRyxHQU9xQixpQkFBM0I5ZCxFQUFTZ2UsZUFBOEI5WSxTQUFTbEYsRUFBU2dlLGlCQUNsRUwsRUFBYW5jLEtBQUtvQyxJQUFJNUQsRUFBU2dlLGNBQWVMLElBSTVDSCxJQUNGRyxFQUFhQyxHQU1mLElBQ0lLLEVBQVdDLEVBRGZDLEVBNUVGLFNBQXdCbEIsRUFBT2pkLEdBRTdCLElBQUtvUCxJQUNILE1BQU8sQ0FBRSxJQUFLLEtBR2hCLElBQUlnUCxFQUFVcGUsRUFBU3FlLFFBQVV2UCxPQUVqQyxHQUFJc1AsSUFBWXRQLFFBQ1pzUCxJQUFZOWMsVUFDWjhjLElBQVk5YyxTQUFTc1gsS0FDdkIsTUFBTyxDQUFFOUosT0FBT3dQLFdBQVl4UCxPQUFPeVAsYUFFbkMsSUFBQUosRUFBMEJDLEVBQVFJLHdCQUNsQyxNQUFPLENBRENMLEVBQUF4YyxNQUFPd2MsRUFBQXZjLFFBK0RtQjZjLENBQWN4QixFQUFPamQsR0FBbkQwZSxFQUFBUCxFQUFBLEdBQWFRLEVBQUFSLEVBQUEsR0FJbkIsR0FBSWIsRUFBZSxDQUNqQixJQUFNeFIsRUR4RkgsU0FBa0M3TCxFQUFZOGMsRUFBZ0JaLEdBQ25FLGtCQUQ2RCxxQkFBc0IsSUFDekQsaUJBQWZsYyxFQUF5QixDQUNsQyxJQUFNbU8sRUFBTW5PLEVBQVdrUixjQUN2QixLQUFNL0MsS0FBT3lNLEdBQ1gsTUFBTSxJQUFJemIsTUFBSix5QkFBbUNhLEVBQUEsc0ZBRTNDLElBQU0rYSxFQUFTSCxFQUFXek0sR0FDMUIsT0FBTzRNLEVBQU8vYSxXQUFXeUcsSUFBbEIsU0FBc0I4SyxHQUFBLE9BQ3BCcUwsRUFBZ0JyTCxFQUFHd0osRUFBT0UsTUFBTzZCLEVBQVNaLEtBR25ELE9BQU9sYyxFQzZFUTJlLENBQXdCM2UsRUFBWWliLEVBQU9pQixHQUNwRDBDLEVBQVVyZCxLQUFLcUMsSUFBSWlJLEVBQU8sR0FBSUEsRUFBTyxJQUNyQ2dULEVBQVN0ZCxLQUFLb0MsSUFBSWtJLEVBQU8sR0FBSUEsRUFBTyxJQUMxQyxHQUFJOUwsRUFBUytlLFlBQWEsQ0FDeEIsSUFBTUMsRUFBcUMsY0FBekJoZixFQUFTK2UsWUFDM0JwZCxFQUFRcWQsRUFBWUgsRUFBVUMsRUFDOUJsZCxFQUFTb2QsRUFBWUYsRUFBU0QsT0FFOUJsZCxFQUFRbUssRUFBTyxHQUNmbEssRUFBU2tLLEVBQU8sR0FHbEJtUyxFQUFZdGMsRUFDWnVjLEVBQWF0YyxFQUdiRCxHQUFpQixFQUFSa2MsRUFDVGpjLEdBQWtCLEVBQVJpYyxPQUlWSSxFQUZBdGMsRUFBUStjLEVBR1JSLEVBRkF0YyxFQUFTK2MsRUFNWCxJQUFJTSxFQUFZdGQsRUFDWnVkLEVBQWF0ZCxFQVlqQixHQVhJMGIsR0FBaUJwQyxJQUVuQitELEVBQVlwQyxFQUFnQmxiLEVBQU91WixFQUFPLEtBQU1pQixHQUNoRCtDLEVBQWFyQyxFQUFnQmpiLEVBQVFzWixFQUFPLEtBQU1pQixJQUlwRGUsRUFBYTFiLEtBQUt5UyxNQUFNZ0wsR0FDeEI5QixFQUFjM2IsS0FBS3lTLE1BQU1pTCxHQUdyQnpCLElBQWVELEdBQWFGLEVBQWUsQ0FDN0MsSUFBTTZCLEVBQVN4ZCxFQUFRQyxFQUNqQndkLEVBQWVWLEVBQWNDLEVBQzdCVSxFQUFvQjdhLEVBQVF4RSxFQUFTcWYsa0JBQW1CLElBQ3hEQyxFQUFXOWQsS0FBS3lTLE1BQU15SyxFQUFrQyxFQUFwQlcsR0FDcENFLEVBQVkvZCxLQUFLeVMsTUFBTTBLLEVBQW1DLEVBQXBCVSxJQUN4Q25DLEVBQWFvQyxHQUFZbkMsRUFBY29DLEtBQ3JDSCxFQUFlRCxHQUNqQmhDLEVBQWNvQyxFQUNkckMsRUFBYTFiLEtBQUt5UyxNQUFNa0osRUFBY2dDLEtBRXRDakMsRUFBYW9DLEVBQ2JuQyxFQUFjM2IsS0FBS3lTLE1BQU1pSixFQUFhaUMsS0FlNUMsTUFBTyxPQUNMdEIsYUFDQUYsUUFDQWhjLFNBQ0FDLEVBQ0EzQixXQUFZLENBQUUwQixFQUFPQyxHQUNyQnNaLE1BQU9BLEdBQVMsYUFoQmxCa0MsRUFBY00sRUFBY2xjLEtBQUt5UyxNQUFNMEosRUFBYVQsR0FBYzFiLEtBQUt5UyxNQUFNMEosRUFBYXNCLElBTTdEdGQsVUFMN0IwYixFQUFlSyxFQUFjbGMsS0FBS3lTLE1BQU0wSixFQUFhUixHQUFlM2IsS0FBS3lTLE1BQU0wSixFQUFhdUIsSUFNOUR0ZCxnQkFZNUJ1YSxnQkFoQm9CdUIsRUFBY2xjLEtBQUt5UyxNQUFNaUosR0FBYzFiLEtBQUt5UyxNQUFNZ0wsa0JBQ2pEdkIsRUFBY2xjLEtBQUt5UyxNQUFNa0osR0FBZTNiLEtBQUt5UyxNQUFNaUwsZUFrQnhFOUIsZUFDQUMsWUFDQVksYUFDQUMsYUFDQWhCLGNBQ0FDLFdGbkVtQmpDLEVHM0d2QixJQUFBc0UsRUFDQSxTQUEyQmhJLEVBQU1qUixHQUMvQixHQUFvQixpQkFBVGlSLEVBQ1QsTUFBTSxJQUFJbFQsVUFBVSw0QkFLdEIsR0FGQWlDLEVBQU9BLEdBQVEsR0FFUyxvQkFBYmpGLFdBQTZCaUYsRUFBS2taLE9BQzNDLE9BQU8sS0FHVCxJQUFJQSxFQUFTbFosRUFBS2taLFFBQVVuZSxTQUFTK1csY0FBYyxVQUN6QixpQkFBZjlSLEVBQUs1RSxRQUNkOGQsRUFBTzlkLE1BQVE0RSxFQUFLNUUsT0FFSyxpQkFBaEI0RSxFQUFLM0UsU0FDZDZkLEVBQU83ZCxPQUFTMkUsRUFBSzNFLFFBR3ZCLElBQ0k4ZCxFQURBQyxFQUFVcFosRUFFZCxJQUNFLElBQUlxWixFQUFRLENBQUVwSSxHQUVnQixJQUExQkEsRUFBS0osUUFBUSxVQUNmd0ksRUFBTWxhLEtBQUssZ0JBQWtCOFIsR0FHL0IsSUFBSyxJQUFJMVksRUFBSSxFQUFHQSxFQUFJOGdCLEVBQU1uZ0IsT0FBUVgsSUFFaEMsR0FEQTRnQixFQUFLRCxFQUFPSSxXQUFXRCxFQUFNOWdCLEdBQUk2Z0IsR0FDekIsT0FBT0QsRUFFakIsTUFBT2hoQixHQUNQZ2hCLEVBQUssS0FFUCxPQUFRQSxHQUFNLE1DekJELFNBQVNJLEVBQWM5ZixHQUNwQyxJQUFJMEIsRUFBUytkLGlCQURrQyxJQUUvQyxJQUFJTSxHQUFhLEVBQ2pCLElBQXdCLElBQXBCL2YsRUFBU3lmLE9BQWtCLENBRzdCLEtBREEvZCxFQUFVMUIsRUFBUzBCLFVBQ2dCLGlCQUFaQSxFQUFzQixDQUMzQyxJQUFJc2UsRUFBWWhnQixFQUFTeWYsT0FDcEJPLElBQ0hBLEVBaEJSLFdBQ0UsSUFBSzVRLElBQ0gsTUFBTSxJQUFJaFEsTUFBTSxpSUFFbEIsT0FBT2tDLFNBQVMrVyxjQUFjLFVBWVo0SCxHQUNaRixHQUFhLEdBRWYsSUFBTXZJLEVBQU85VixHQUFXLEtBQ3hCLEdBQW9DLG1CQUF6QnNlLEVBQVVILFdBQ25CLE1BQU0sSUFBSXpnQixNQUFNLDJHQUdsQixLQURBc0MsRUFBVThkLEVBQWlCaEksRUFBTXhLLEVBQU8sR0FBSWhOLEVBQVNrZ0IsV0FBWSxDQUFFVCxPQUFRTyxNQUV6RSxNQUFNLElBQUk1Z0IsTUFBSixnQ0FBMENvWSxFQUFBLGlIQU1wRCxHQUZBaUksRUFBUy9kLEVBQVErZCxPQUViemYsRUFBU3lmLFFBQVVBLElBQVd6ZixFQUFTeWYsT0FDekMsTUFBTSxJQUFJcmdCLE1BQU0sNEZBSWRZLEVBQVNtZ0IsWUFDWHplLEVBQVEwZSx1QkFBd0IsRUFDaEMxZSxFQUFRMmUsMEJBQTJCLEVBQ25DM2UsRUFBUTRlLHdCQUF5QixFQUNqQzVlLEVBQVE2ZSw2QkFBOEIsRUFDdEM3ZSxFQUFROGUseUJBQTBCLEVBQ2xDZixFQUFPbkgsTUFBTSxtQkFBcUIsYUFHdEMsTUFBTyxRQUFFbUgsVUFBUS9kLGFBQVNxZSxHQzdCNUIsSUFBTVUsRUFDSiwyQkFDT0MsVUFBWSxRQUNaQyxPQUFTLFFBQ1RDLGFBQVV0VSxPQUNWdVUsS0FBTyxVQUNQQyxlQUFpQixVQUdqQkMsdUJBQW9CelUsT0FDcEIwVSxlQUFnQixPQUVoQkMsbUJDOUJNLFNBQVU1VSxrQkFBTSxJQUM3QixJQUFNNlUsRUFBQSxTQUFVbEssR0FDZCxHQUFLM0ssRUFBSThVLFVBQVQsQ0FFQSxJQUFNckssRUFBUzVILElBQ0ksS0FBZjhILEVBQUdvSyxTQUFtQnBLLEVBQUdxSyxTQUFXckssRUFBR3NLLFVBQVd0SyxFQUFHdUssUUFJL0IsS0FBZnZLLEVBQUdvSyxRQUdaL1UsRUFBSW1WLFdBQVd4SyxHQUNORixJQUFXRSxFQUFHcUssUUFBeUIsS0FBZnJLLEVBQUdvSyxVQUFtQnBLLEVBQUdzSyxTQUFXdEssRUFBR3VLLFdBRXhFdkssRUFBR3lLLGlCQUNIcFYsRUFBSXFWLE9BQU8xSyxLQVRYQSxFQUFHeUssaUJBQ0hwVixFQUFJeEosS0FBS21VLE1Bb0JiLE1BQU8sUUFSRCxXQUNKbEksT0FBT3ZOLGlCQUFpQixVQUFXMmYsV0FHL0IsV0FDSnBTLE9BQU82UyxvQkFBb0IsVUFBV1QsS0RLWlUsQ0FBa0Isb0JBQ2pDLE9BQWdDLElBQTFCQyxFQUFLN2hCLFNBQVM4aEIsdUJBQ3RCOUssR0FDREEsRUFBRytLLFNBQ0RGLEVBQUs1RSxNQUFNK0UsYUFDUkMsY0FDQUMsT0FDQUwsRUFBS00sU0FDRk4sRUFBSzVFLE1BQU0rRSxhQUNoQkkscUNBSUhQLEVBQUs1RSxNQUFNb0YsUUFBU1IsRUFBS1MsUUFDeEJULEVBQUszZ0Isd0JBRUg4VixLQUNGb0wsWUFBWSxTQUFVLFlBSTFCRyxnQkFBTCxXQUF1QixPQUFNVixFQUFLM2hCLGdCQUU3QnNpQixlQUFMLFdBQ2tCWCxFQUFLWSxZQUdkQyw2RkFLUDloQixPQUFBK2hCLElBQUEsa0JBQ0tDLEtBQUtoQyxXQUdWNWdCLFNBQUEyaUIsSUFBQSxrQkFDS0MsS0FBS2xDLGFBR1Z6RCxNQUFBMEYsSUFBQSxrQkFDS0MsS0FBS2pDLG9CQUdka0MsaUJBQUEsU0FBa0JDLEVBQWFDLFNBQ1csaUJBQWJBLEdBQXlCN2QsU0FBUzZkLEdBQ3hDRCxFQUFjQyxFQUFXLGVBR2hEQyxjQUFBLFNBQWVDLEVBQVVDLEVBQU01SixFQUFhNkosVUFDbENqZSxTQUFTb1UsSUFBZ0JBLEVBQWMsRUFDM0M5WCxLQUFLQyxNQUFNd2hCLEdBQVkzSixFQUFjLElBQ3JDOVgsS0FBS0MsTUFBTTBoQixFQUFNRCxnQkFHdkJFLHFCQUFBLGtCQUNTUixLQUFLSSxjQUNWSixLQUFLM0YsTUFBTWdHLFNBQVVMLEtBQUszRixNQUFNaUcsS0FDaENOLEtBQUszRixNQUFNM0QsWUFBYXNKLEtBQUszRixNQUFNa0csa0JBSXZDRSxjQUFBLGVBQ1FwRyxFQUFRMkYsS0FBSzNGLFlBQ1osT0FDRUEsRUFBTXRiLGFBQ0xzYixFQUFNcmIsa0JBQ0ZxYixFQUFNVSx1QkFDTFYsRUFBTUcseUJBQ0xILEVBQU1JLDJCQUNMSixFQUFNcUcsNkJBQ0xyRyxFQUFNc0csNkJBSTFCckIsSUFBQSxlQUNPVSxLQUFLaGlCLE9BQVEsTUFBTSxJQUFJeEIsTUFBTSxxRUFHSixJQUExQndqQixLQUFLNWlCLFNBQVNxaUIsY0FDWG5oQixPQUk0QixtQkFBeEIwaEIsS0FBS2hpQixPQUFPNGlCLGlCQUNiN0ksS0FBSyw0RUFJVmlJLEtBQUszRixNQUFNd0csZUFDVEMsb0JBQ0F6RyxNQUFNd0csU0FBVSxRQUlsQkUsWUFDQWpCLFNBQ0VFLGtCQUdUZ0IsZ0JBQUEsV0FDbUIsTUFBYmhCLEtBQUsvQixNQUFrQyxvQkFBWC9SLFFBQWlFLG1CQUFoQ0EsT0FBTytVLDhCQUMvREEscUJBQXFCakIsS0FBSy9CLFdBQzVCQSxLQUFPLE1BRWEsTUFBdkIrQixLQUFLOUIsOEJBQ004QixLQUFLOUIscUJBQ2JBLGVBQWlCLG1CQUkxQjVmLEtBQUEsZUFDTWhCLEVBQVUwaUIsS0FBSzVpQixTQUFTRSxRQUN4QixjQUFlMGlCLEtBQUs1aUIsY0FDWixVQUNGMmEsS0FBSyxrRUFFVnphLElBQ0FrUCxJQUlEd1QsS0FBSzNGLE1BQU1vRixVQUNWTyxLQUFLM0YsTUFBTXdHLGVBQ1RDLG9CQUNBekcsTUFBTXdHLFNBQVUsUUFNbEJ4RyxNQUFNb0YsU0FBVSxPQUNoQnVCLHVCQUNBRSxVQUFZelYsU0FDWndTLEtBQU8vUixPQUFPaVYsc0JBQXNCbkIsS0FBS0wsMEJBZnBDeUIsTUFBTSx5RkFrQmxCMUIsTUFBQSxXQUNNTSxLQUFLM0YsTUFBTStFLFdBQVdZLEtBQUtYLGlCQUMxQmhGLE1BQU1vRixTQUFVLE9BRWhCdUIsK0JBR1BwQyxXQUFBLFdBQ01vQixLQUFLM0YsTUFBTW9GLFFBQVNPLEtBQUtOLFFBQ3hCTSxLQUFLMWhCLG9CQUlaK2lCLEtBQUEsZ0JBQ08zQixhQUNBckYsTUFBTXZjLE1BQVEsT0FDZHVjLE1BQU1nRyxTQUFXLE9BQ2pCaEcsTUFBTWlHLEtBQU8sT0FDYmpHLE1BQU1pSCxVQUFZLE9BQ2xCakgsTUFBTXdHLFNBQVUsT0FDaEJmLHNCQUdQUCxPQUFBLDBCQUNNUyxLQUFLM0YsTUFBTStFLGFBQ1Y1UyxVQUtBNlUsWUFDQWhILE1BQU1vRixTQUFVLE9BQ2hCcEYsTUFBTStFLFdBQVksTUFFakJtQyxFQUFhdkIsS0FBS3dCLHFCQUFxQixXQUFZLElBRW5EQyxFQUFnQixFQUFJekIsS0FBSzNGLE1BQU1rRyxTQUVoQ1Msc0JUeEtvQnJkLEVTeUtuQm9kLEVBQUEsa0JBQ0M5QixFQUFLNUUsTUFBTStFLGFBQ1gvRSxNQUFNaUgsVUFBWUcsSUFDbEJWLE9BQ0U5QixFQUFLTyxZQUFZK0IsR0FDckJ2VixLQURJLFdBRUVpVCxFQUFLNUUsTUFBTStFLGNBQ1gvRSxNQUFNaUgsVUFBWSxJQUNsQmpILE1BQU12YyxRQUNQbWhCLEVBQUs1RSxNQUFNdmMsTUFBUW1oQixFQUFLNUUsTUFBTTNELGVBQzNCMkQsTUFBTWlHLE1BQVFtQixJQUNkcEgsTUFBTWdHLFNBQVdwQixFQUFLZ0IsaUJBQWlCaEIsRUFBSzVFLE1BQU1pRyxLQUFNckIsRUFBSzVFLE1BQU04RixZQUNuRWpDLGVBQWlCL0gsV0FBVzRLLEVBQU0sYUFFL0J4WCxJQUFJLHdCQUNQbVksZUFDQXJDLGNBQ0FnQyxTQUNBL0IsV0FqQnVCMUwsUUFBUUMsV0F1QnZDbU0sS0FBSzNGLE1BQU13RyxlQUNUQyxvQkFDQXpHLE1BQU13RyxTQUFVLEdBSW5CYixLQUFLaGlCLFFBQTZDLG1CQUE1QmdpQixLQUFLaGlCLE9BQU8yakIsa0JBQy9CQyxrQkFBTCxTQUF1QnZILEdBQUEsT0FBUzRFLEVBQUtqaEIsT0FBTzJqQixZQUFZdEgsTVR4TWpDMVcsRVM0TWI0ZCxpQlQ1TW9CLElBQzNCN04sR0FBTyxFQUFNL1AsSVM0TWZrZSxNQURILFNBQ1M3VyxXQUNHb1csTUFBTXBXLEtBRWZnQixLQUpILFNBSVE4VixLQUNDN0QsS0FBTy9SLE9BQU9pVixzQkFBc0JKLGtCQXJEbkNLLE1BQU0sa0ZBeURsQk4sYUFBQSxzQkFDTWQsS0FBS2hpQixRQUF1QyxtQkFBdEJnaUIsS0FBS2hpQixPQUFPK2pCLFlBQy9CSCxrQkFBTCxTQUF1QnZILEdBQUEsT0FBUzRFLEVBQUtqaEIsT0FBTytqQixNQUFNMUgsa0JBSXREcUgsV0FBQSxzQkFDTTFCLEtBQUtoaUIsUUFBcUMsbUJBQXBCZ2lCLEtBQUtoaUIsT0FBT2drQixVQUMvQkosa0JBQUwsU0FBdUJ2SCxHQUFBLE9BQVM0RSxFQUFLamhCLE9BQU9na0IsSUFBSTNILGtCQUlwRGdGLFVBQUEsZVQ3TnlCMWIsU1M4TmpCc2UsRUFBZWpDLEtBQUszRixNQUFNK0Usc0JBRTNCNEIsdUJBQ0EzRyxNQUFNK0UsV0FBWSxPQUNsQi9FLE1BQU1pSCxVQUFZLE9BQ2xCakgsTUFBTW9GLFNBQVUsa0JUbk9TLElBQ3pCL0wsR0FBTyxFQUFPL1AsSVNzT2hCa2UsTUFESSxTQUNFN1csV0FDR29XLE1BQU1wVyxLQUVmZ0IsS0FKSSxXQU1DaVcsR0FBZ0JoRCxFQUFLamhCLFFBQTJDLG1CQUExQmloQixFQUFLamhCLE9BQU9xaEIsYUFDL0N1QyxrQkFBTCxTQUF1QnZILEdBQUEsT0FBUzRFLEVBQUtqaEIsT0FBT3FoQixVQUFVaEYsb0JBSzlEbUgscUJBQUEsU0FBc0IvWCx5QkFBTSxJQUNuQixVQUNLQSxFQUFJeVksY0FDUnpZLEVBQUl4SixTQUNMK2YsS0FBSzNGLE1BQU1rRyxVQUNUOVcsRUFBSXlZLFNBQVdsQyxLQUFLM0YsTUFBTXZjLFdBQVE0TCxPQUNuQ3NXLEtBQUs1aUIsU0FBU3FaLFVBQ2R1SixLQUFLNWlCLFNBQVM0WixZQUNaZ0osS0FBSzVpQixTQUFTbVcsY0FDZHlNLEtBQUs1aUIsU0FBU29XLGdCQUNad00sS0FBSzVpQixTQUFTK2tCLHlCQUNQbkMsS0FBSzVpQixTQUFTZ2xCLDBCQUNwQjNZLEVBQUl3TixXVDFLWm9MLEVBQVcsSUFBSXhXLEtBREEsbUNTNEtMdkosU0FBUzBkLEtBQUszRixNQUFNM0QsYUFBZTlYLEtBQUtxQyxJQUFJLEVBQUcrZSxLQUFLM0YsTUFBTTNELGFBQWUsa0JBSTFGOEksWUFBQSxTQUFhL1YsZ0NBQU0sS0FDWnVXLEtBQUtoaUIsT0FBUSxPQUFPNFYsUUFBUTBPLElBQUksSUFDQSxtQkFBMUJ0QyxLQUFLaGlCLE9BQU91a0IsZ0JBQ2hCdmtCLE9BQU91a0IsZ0JBSVZoQixFQUFhdkIsS0FBS3dCLHFCQUFxQi9YLEdBRXJDeUssRUFBUzVILElBQ1g1UCxFQUFJa1gsUUFBUUMsYUFDWkssR0FBVXpLLEVBQUlxVixRQUFtQyxtQkFBbEI1SyxFQUFPNEssT0FBdUIsS0FDekQwRCxFQUFhcFksRUFBTyxHQUFJbVgsR0FDeEJySyxFQUFPaEQsRUFBTzRLLE9BQU8wRCxHQUNOOWxCLEVBQWpCb1AsRUFBVW9MLEdBQVdBLEVBQ2hCdEQsUUFBUUMsUUFBUXFELFVBR3BCeGEsRUFBRXNQLEtBQUYsU0FBT2tMLEdBQUEsT0FDTCtILEVBQUt3RCxlQUFlclksRUFBTyxHQUFJbVgsRUFBWSxNQUFRckssR0FBUSxRQUNqRWxMLEtBRkksU0FFQzlDLFVBR2dCLElBQWxCQSxFQUFPck0sT0FBcUJxTSxFQUFPLEdBQzNCQSxpQkFJaEJ1WixlQUFBLFNBQWdCbEIsNkJBQWEsU0FDdEJ4RCxPQUFPbkQsV0FBWSxPQUduQmlGLGFBR0Q2QyxFQUFhMUMsS0FBS0YscUJBTUksSUFBZjRDLE1BQ0ksQ0FKQTFDLEtBQUszRixNQUFNd0MsY0FNYixHQUFHOEYsT0FBT0QsR0FBWTVMLE9BQU9DLFVBSWxCalQsSUFBWCxTQUFlb0YsT2hCclVOc1MsRWdCc1Vkb0gsRUFBa0MsaUJBQVgxWixHQUF1QkEsSUFBVyxTQUFVQSxHQUFVLFlBQWFBLEdBQzFGMlosRUFBT0QsRUFBZ0IxWixFQUFPMlosS0FBTzNaLEVBQ3JDdkYsRUFBT2lmLEVBQWdCeFksRUFBTyxHQUFJbEIsRUFBUSxNQUFFMlosSUFBVSxNQUFFQSxNaEJ2VTNENVcsRUFEaUJ1UCxFZ0J5VVBxSCxJaEJ4VVEsVUFBVXJVLEtBQUtnTixFQUFRblAsV0FBMkMsbUJBQXZCbVAsRUFBUXlCLFdnQndVcEQsT1RuVG5CLFNBQXVCSixFQUFRcFQsa0JBQU0sSUFDMUMsSUFBTTBZLEVBQVcxWSxFQUFJMFksVUFBWSxZQUNqQyxJQUFLMU8sRUFBbUJ1RSxTQUFTbUssR0FBVyxNQUFNLElBQUkzbEIsTUFBSiwyQkFBcUMybEIsR0FDdkYsSUFBSTdPLEdBQWE2TyxFQUFTdlgsTUFBTSxLQUFLLElBQU0sSUFBSWlILFFBQVEsUUFBUyxPQUVoRSxPQURJeUIsSUFBV0EsR0FBWSxJQUFJQSxHQUFZL0UsZUFDcEMsV0FDTCtFLEVBQ0FzQixLQUFNdU4sRUFDTjdOLFFBQVN1SSxFQUFPaUcsVUFBVVgsRUFBVTFZLEVBQUkyWSxrQlM4U0NXLENBQWFGLEVBQU0sVUFGdkNsZixFQUFLd2UsVUFBWVosRUFBV1kseUJBQ3JCdmdCLEVBQVErQixFQUFLeWUsZ0JBQWlCYixFQUFXYSxnQkFBaUIsY0FFM0VyWSxPQUFPTSxPQUFPMUcsRUFBTSxTQURuQjRYLEVBQUFqSCxrQkFBU2lILEVBQUFqSSxlQUFXaUksRUFBQTNHLGNBR3JCalIsU0FLTm9hLE9BQU9uRCxXQUFZLE9BQ25CaUYsY0FDQUMsU0FHRWxNLFFBQVEwTyxJQUFJSSxFQUFXNWUsSUFBWCxTQUFnQm9GLEVBQVFoTixFQUFHOG1CLE9BRXRDQyxFQUFTN1ksRUFBTyxXQUNULFVBQ0gsVUFDQSxJQUNQbVgsRUFBWXJZLEVBQVEsT0FDZGhOLGNBQ004bUIsRUFBVW5tQixTQUtuQnFtQixHQUFnQyxJQUFwQjNCLEVBQVd0aEIsTUFBeUJpSixFQUFPakosU0FXeEQsSUFBSWdJLE9BVkZoSSxNQUFxQixJQUFkaWpCLElBR1BuUCxTQUFXQyxFQUFnQmlQLFVBRzNCQSxFQUFPZCxnQkFDUGMsRUFBT2IsZ0JBR0FhLE9BQ2EsSUFBZEEsRUFBT2hiLFdBQTJCZ2IsRUFBT2hiLE9BR2xEa2IsRUFBY3ZQLFFBQVFDLFFBQVEsT0FDOUJvUCxFQUFPaGpCLEtBQU0sS0FFVDRpQixFQUFPSSxFQUFPSixRQUNoQkksRUFBTzNPLFVBRUtELEVBREU0TyxFQUFPM08sUUFDWTJPLFVUN1J0QyxTQUFtQkosRUFBTWxmLGtCQUFPLElBQ3JDLElBQU15ZixFQUFRL2UsTUFBTUMsUUFBUXVlLEdBQVFBLEVBQU8sQ0FBRUEsR0FFN0MsT0FBT3JOLEVBRE0sSUFBSXRKLE9BQU9tSixLQUFLK04sRUFBTyxDQUFFeE8sS0FBTWpSLEVBQUtpUixNQUFRLEtBQ25DalIsR1M0UkEwZixDQUFTUixFQUFNSSxVQUcxQkUsRUFBWW5YLEtBQVosU0FBaUJzWCxHQUFBLE9BQ2Z2WixPQUFPTSxPQUFPLEdBQUk0WSxFQUFRSyxRQUVqQ3RYLEtBMUNHLFNBMENFb0ksT0FDRG1QLEVBQWNuUCxFQUFHMEMsT0FBSCxTQUFVaGIsR0FBQSxPQUFLQSxFQUFFbUUsVUFDakNzakIsRUFBWTFtQixPQUFTLEVBQUcsS0FLdEJ3YixFQUhFbUwsRUFBa0JELEVBQVlFLEtBQVosU0FBaUIzbkIsR0FBQSxPQUFLQSxFQUFFNG5CLGFBQzFDQyxFQUFXSixFQUFZSyxLQUFaLFNBQWlCOW5CLEdBQUEsT0FBS0EsRUFBRW9ZLFNBQ25DMlAsRUFBY04sRUFBWUssS0FBWixTQUFpQjluQixHQUFBLE9BQUtBLEVBQUU0WCxTQUdoQjJFLEVBQXhCa0wsRUFBWTFtQixPQUFTLEVBQVUwbUIsRUFBWTFtQixPQUV0QzJtQixFQUEyQkEsRUFBZ0IsV0FBQSxJQUFjRCxFQUFZLEdBQUcsU0FFckUsR0FBR0EsRUFBWSxHQUFHLGFBQzFCTyxFQUFRLE1BQ1J2QyxFQUFXVyxXQUNVNWYsU0FBUzJjLEVBQUs1RSxNQUFNM0QsYUFDbkMsWUFBNEI2SyxFQUFXempCLE1BQVEsR0FBQSxNQUFPbWhCLEVBQUs1RSxNQUFNLFlBQUEsSUFBQSxXQUE0QmtILEVBQVcsTUFBQSxTQUN2R2dDLEVBQVkxbUIsT0FBUyxNQUN0QixrQkFJRjBNLElBQVIsT0FGZW9hLEVBQVcsb0JBQXNCLGlCQUU5QixRQURIRSxFQUFjLGlCQUFtQixZQUNqQixNQUFZeEwsRUFBQSxLQUFTeUwsRUFBUyxrQkFBbUIsa0JBQW1CLHFCQUFzQiwrQkFFckYsbUJBQTNCN0UsRUFBS2poQixPQUFPK2xCLGNBQ2hCL2xCLE9BQU8rbEIsYUFFUDNQLGlCQUlYd04sa0JBQUEsU0FBbUJvQyxRQUNaQyxlQUNGakUsS0FBSzNGLFlBQ0g2SiwyQkFHUEQsV0FBQSxlQUNRNUosRUFBUTJGLEtBQUszRixNQUdkMkYsS0FBSzNGLE1BQU15QyxLQUFNekMsRUFBTXZiLFNBQVl1YixFQUFNOEosR0FLbkM5SixFQUFNOEosTUFDVEEsR0FBR0MsTUFBTS9KLEVBQU1nSyxPQUFTaEssRUFBTVUsV0FBWVYsRUFBTWlLLE9BQVNqSyxFQUFNVSxlQUwvRGpjLFFBQVFtQixRQUNxQixJQUEvQitmLEtBQUs1aUIsU0FBU21uQixnQkFDVnpsQixRQUFRc2xCLE1BQU0vSixFQUFNZ0ssT0FBUWhLLEVBQU1pSyxzQkFPOUNKLFlBQUEsZUFDUTdKLEVBQVEyRixLQUFLM0YsTUFFZDJGLEtBQUszRixNQUFNeUMsS0FBTXpDLEVBQU12YixTQUFZdWIsRUFBTThKLE1BQ3RDcmxCLFFBQVEyQixVQU9aNFosRUFBTXlDLEtBQThCLElBQXhCa0QsS0FBSzVpQixTQUFTb25CLFFBQW9CbkssRUFBTThKLE1BQ2hEckgsR0FBRzBILHFCQUliekQsS0FBQSxXQUNNZixLQUFLaGlCLFFBQXNDLG1CQUFyQmdpQixLQUFLaGlCLE9BQU8raUIsWUFDL0JrRCxrQkFDQWptQixPQUFPK2lCLEtBQUtmLEtBQUszRixZQUNqQjZKLDRCQUlUcEUsT0FBQSxrQkFDTUUsS0FBSzNGLE1BQU04SixTQUNSaEcsdUJBQW9CelUsT0FDcEIyUSxNQUFNOEosR0FBR00sU0FDUHpFLEtBQUs3QixtQkFFTDZCLEtBQUswRSw4QkFJaEJBLGVBQUEsY0FDTzFFLEtBQUtoaUIsWUFLTjBrQixFQUhFckksRUFBUTJGLEtBQUszRixrQkFDZDRKLGFBSXNCLG1CQUFoQmpFLEtBQUtoaUIsU0FDRGdpQixLQUFLaGlCLE9BQU9xYyxHQUNjLG1CQUF2QjJGLEtBQUtoaUIsT0FBTzhoQixXQUNmRSxLQUFLaGlCLE9BQU84aEIsT0FBT3pGLFNBRzdCNkosY0FFRXhCLGdCQUdUaUMsT0FBQSxTQUFRbGIsNkJBQU0sUUFJTm1iLEVBQWtCLENBQ3RCLGtCQUdLN1osS0FBS3RCLEdBQUtvQixRQUFqQixTQUF5QlcsTUFDbkJvWixFQUFnQnBRLFFBQVFoSixJQUFRLFFBQzVCLElBQUloUCxNQUFKLGdCQUEwQmdQLEVBQUEsdURBSTlCcVosRUFBWTdFLEtBQUtsQyxVQUFVakIsT0FDM0JpSSxFQUFhOUUsS0FBS2xDLFVBQVVoZixZQUc3QixJQUFJME0sS0FBTy9CLEVBQUssS0FDYmxJLEVBQVFrSSxFQUFJK0IsUUFDRyxJQUFWakssTUFDSnVjLFVBQVV0UyxHQUFPakssT0FLcEJ3akIsRUFBV2hiLE9BQU9NLE9BQU8sR0FBSTJWLEtBQUtsQyxVQUFXclUsTUFDL0MsU0FBVUEsR0FBTyxVQUFXQSxFQUFLLE1BQU0sSUFBSWpOLE1BQU0sNERBQzVDLFNBQVVpTixTQUFZc2IsRUFBU2puQixNQUMvQixVQUFXMkwsVUFBWXNiLEVBQVN6RSxLQUNyQyxhQUFjN1csR0FBTyxnQkFBaUJBLEVBQUssTUFBTSxJQUFJak4sTUFBTSxtRUFDdEQsYUFBY2lOLFNBQVlzYixFQUFTck8sWUFDbkMsZ0JBQWlCak4sVUFBWXNiLEVBQVM1RSxTQUczQyxTQUFVMVcsSUFBS3VXLEtBQUtqQyxPQUFPOEUsS0FBT3BaLEVBQUlvWixVQUVwQ21DLEVBQVloRixLQUFLaUYsYUFBYUYsYUFDN0IxYSxPQUFPMlYsS0FBS2pDLE9BQVFpSCxHQUd2QkgsSUFBYzdFLEtBQUtsQyxVQUFVakIsUUFBVWlJLElBQWU5RSxLQUFLbEMsVUFBVWhmLFFBQVMsT0FDcERvZSxFQUFhOEMsS0FBS2xDLFdBQTlCaGYsRUFBQXljLEVBQUF6YyxhQUVYdWIsTUFBTXdDLE9BRkh0QixFQUFBc0IsWUFHSHhDLE1BQU12YixRQUFVQSxPQUdoQm9tQixtQkFHQUMsK0JBSUgxYixFQUFJMGEsSUFBd0IsbUJBQVgxYSxFQUFJMGEsVUFDbEI5SixNQUFNOEosR0FBSzFhLEVBQUkwYSxRQUNmOUosTUFBTThKLEdBQUdpQixLQUFkLFdBQ01uRyxFQUFLYixrQkFDSkQsa0JBQW9CYyxFQUFLeUYsb0JBSzlCLFlBQWFqYixJQUNYQSxFQUFJZ1csUUFBU08sS0FBSzFoQixPQUNqQjBoQixLQUFLTixXQUdFTSxLQUFLbEMsZ0JBR2QrQixjQUNBQyxTQUNFRSxLQUFLM0YsbUJBR2R3RixPQUFBLGVBQ1F3RixFQUFXckYsS0FBS1MsZ0JBRWhCcmpCLEVBQVc0aUIsS0FBSzVpQixTQUNoQmlkLEVBQVEyRixLQUFLM0YsTUFHYmlMLEVBQVdsTCxFQUFhQyxFQUFPamQsVUFHOUJpTixPQUFPMlYsS0FBS2pDLE9BQVF1SCxTQVN2QnRGLEtBQUszRixNQUxQVSxFQUFBUSxFQUFBUixXQUNBUCxFQUFBZSxFQUFBZixZQUNBQyxFQUFBYyxFQUFBZCxhQUNBSCxFQUFBaUIsRUFBQWpCLFdBQ0FDLEVBQUFnQixFQUFBaEIsWUFJSXNDLEVBQVNtRCxLQUFLM0YsTUFBTXdDLE9BQ3RCQSxJQUFvQyxJQUExQnpmLEVBQVNnZCxlQUNqQkMsRUFBTThKLEdBRUp0SCxFQUFPOWQsUUFBVXliLEdBQWVxQyxFQUFPN2QsU0FBV3liLFNBQy9DMkQsZUFBZ0IsSUFFZitGLEdBQUdvQixhQUFheEssS0FDaEJvSixHQUFHL0osYUFBYUksRUFBY08sRUFBWU4sRUFBZU0sR0FBWSxRQUN0RXFELGVBQWdCLElBSW5CdkIsRUFBTzlkLFFBQVV5YixJQUFhcUMsRUFBTzlkLE1BQVF5YixHQUM3Q3FDLEVBQU83ZCxTQUFXeWIsSUFBY29DLEVBQU83ZCxPQUFTeWIsSUFHbERqTyxNQUF3QyxJQUF6QnBQLEVBQVNvb0IsZ0JBQ25COVAsTUFBTTNXLE1BQVF1YixFQUFBLE9BQ2Q1RSxNQUFNMVcsT0FBU3ViLEVBQUEsV0FJcEJrTCxFQUFXekYsS0FBS1MsZ0JBQ2xCaUYsR0FBV0MsRUFBVU4sRUFBVUksVUFDL0JDLFFBQ0dFLGVBRUFGLGVBR1RFLGFBQUEsV0FFTTVGLEtBQUtoaUIsUUFBd0MsbUJBQXZCZ2lCLEtBQUtoaUIsT0FBTzZoQixhQUMvQjdoQixPQUFPNmhCLE9BQU9HLEtBQUszRixvQkFJNUIvYyxRQUFBLGNBQ08waUIsS0FBSzNGLE1BQU1vRixXQUNYalQsVUFJQXlSLEtBQU8vUixPQUFPaVYsc0JBQXNCbkIsS0FBS0wscUJBRTFDL1QsRUFBTUgsSUFHSm9hLEVBQWtCLElBRFo3RixLQUFLM0YsTUFBTWtHLElBRW5CdUYsRUFBY2xhLEVBQU1vVSxLQUFLa0IsVUFFdkJmLEVBQVdILEtBQUszRixNQUFNOEYsU0FDdEI0RixFQUFrQyxpQkFBYjVGLEdBQXlCN2QsU0FBUzZkLEdBRXpENkYsR0FBYSxFQUNYdm5CLEVBQWV1aEIsS0FBSzVpQixTQUFTcUIsYUFDZCxVQUFqQkEsSUFDWW9uQixFQUNZLGFBQWpCcG5CLEVBQ0xxbkIsRUFBY0QsT0FFWDNFLGFBRFE0RSxFQUFjRCxLQUdkLE9BR1YzRSxVQUFZdFYsTUFHYjBWLEVBQVl3RSxFQUFjLElBQzVCRyxFQUFVakcsS0FBSzNGLE1BQU1pRyxLQUFPZ0IsRUFBWXRCLEtBQUszRixNQUFNNkwsVUFHbkRELEVBQVUsR0FBS0YsTUFDUDVGLEVBQVc4RixPQUluQkUsR0FBYSxFQUNiQyxHQUFjLEtBSWRMLEdBQWVFLEdBQVc5RixLQUZTLElBQXZCSCxLQUFLNWlCLFNBQVNvQixTQUtiLEtBQ08yaEIsS0FDTixPQUVELElBQ0hBLEtBQ0csUUFHVnVCLGNBR0hzRSxFQUFZLE1BQ1QzTCxNQUFNaUgsVUFBWUEsT0FDbEJqSCxNQUFNaUcsS0FBTzJGLE9BQ2I1TCxNQUFNZ0csU0FBV0wsS0FBS0MsaUJBQWlCZ0csRUFBUzlGLE9BQy9Da0csRUFBWXJHLEtBQUszRixNQUFNdmMsV0FDeEJ1YyxNQUFNdmMsTUFBUWtpQixLQUFLUSx1QkFDcEI0RixHQUFhcEcsS0FBS2MsZUFDbEJ1RixJQUFjckcsS0FBSzNGLE1BQU12YyxPQUFPa2lCLEtBQUtlLFlBQ3BDakIsY0FDQXpGLE1BQU1pSCxVQUFZLEVBR3JCNkUsUUFDR3pHLHFCQXZFRzBCLE1BQU0sZ0ZBMkVsQmtGLFNBQUEsU0FBVXRDLE1BQ1UsbUJBQVBBLEVBQW1CLE1BQU0sSUFBSXhuQixNQUFNLHdDQUMzQ3dqQixLQUFLM0YsWUFDSHlGLHNCQUdQeUcsTUFBQSxnQkFDT3BCLHFDQUdQcUIsUUFBQSxXQUNNaGEsYUFDS3VTLG9CQUFvQixTQUFVaUIsS0FBS0oscUJBQ3JDdkIsbUJBQW1Cb0ksVUFFdEJ6RyxLQUFLM0YsTUFBTXdDLE9BQU94RyxvQkFDZmdFLE1BQU13QyxPQUFPeEcsY0FBY0MsWUFBWTBKLEtBQUszRixNQUFNd0MscUJBSTNEc0ksc0JBQUEsV0FDTzNZLE9BQ3dCLElBQXpCd1QsS0FBSzVpQixTQUFTcWUsUUFBcUJ1RSxLQUFLM0YsTUFBTXdDLFNBQVdtRCxLQUFLM0YsTUFBTXdDLE9BQU94RyxnQkFDdkQySixLQUFLNWlCLFNBQVNxZSxRQUFVL2MsU0FBU3NYLE1BQ3pDQyxZQUFZK0osS0FBSzNGLE1BQU13QyxzQkFJekNxSSxZQUFBLFdoQm51QkssSUFBeUJ3QixFZ0JvdUJ4QjFHLEtBQUszRixNQUFNdmIsVWhCbnVCVyxtQkFERTRuQixFZ0JxdUJQMUcsS0FBSzNGLE1BQU12YixTaEJwdUJoQjZuQixPQUFrRCxtQkFBbkJELEVBQUlFLFlBQXVELG1CQUFuQkYsRUFBSUcsZ0JnQnF1QmxGOUksT0FBT2pCLEdBQUtrRCxLQUFLM0YsTUFBTXZiLGVBRXJCa2hCLEtBQUtqQyxPQUFPakIsaUJBS3pCbUksYUFBQSxTQUFjN25CLGtCQUFXLFFBRW5CK2lCLEVBQVcvaUIsRUFBUytpQixTQUNwQnpKLEVBQWN0WixFQUFTc1osWUFDckJ3UCxFQUFZdGtCLEVBQVF4RSxFQUFTOG9CLFVBQVcsR0FDeEMzRixFQUFNM2UsRUFBUXhFLEVBQVNtakIsSUFBSyxJQUM1QndGLEVBQWtDLGlCQUFiNUYsR0FBeUI3ZCxTQUFTNmQsR0FDdkQyRyxFQUF3QyxpQkFBaEJwUSxHQUE0QnBVLFNBQVNvVSxHQUU3RHFRLEVBQTBCaEIsRUFBY25uQixLQUFLQyxNQUFNMGhCLEVBQU1KLFFBQVl6VyxFQUNyRXNkLEVBQTBCRixFQUFrQnBRLEVBQWM2SixPQUFPN1csS0FDbkVxYyxHQUFlZSxHQUFrQkMsSUFBNEJyUSxRQUN6RCxJQUFJbGEsTUFBTSxzR0FHaUIsSUFBeEJZLEVBQVNDLGlCQUF3RCxJQUFuQkQsRUFBU2tiLGVBQ3hEUCxLQUFLLDhGQUdEblcsRUFBUThVLEVBQWFxUSxFQUF5QkUsWUFDakRybEIsRUFBUXVlLEVBQVU2RyxFQUF5QkMsY0FFaERDLEVBQVk5cEIsRUFBU2tqQixLQUNyQjZHLEVBQWEvcEIsRUFBU1UsTUFDdEJzcEIsRUFBb0MsaUJBQWRGLEdBQTBCNWtCLFNBQVM0a0IsR0FDekRHLEVBQXNDLGlCQUFmRixHQUEyQjdrQixTQUFTNmtCLEdBRzdEN0csRUFBTyxFQUNQeGlCLEVBQVEsRUFDUnVpQixFQUFXLEtBQ1grRyxHQUFnQkMsUUFDWixJQUFJN3FCLE1BQU0sdUVBQ1A0cUIsS0FHRXBILEtBQUtDLG1CQURUaUgsRUFDZ0MvRyxLQUMvQkgsS0FBS0ksY0FDWEMsRUFBVUMsRUFDVjVKLEVBQWE2SixJQUVOOEcsTUFJRXJILEtBQUtDLHNCQUZSa0gsR0FDTzVHLEVBQ3dCSixJQUdsQyxVQUNMRSxPQUNBQyxRQUNBeGlCLFdBQ0FxaUIsY0FDQXpKLE1BQ0E2SixZQUNBMkYsZ0JBSUpvQixNQUFBLFNBQU9scUIsZ0NBQVcsSUFDWjRpQixLQUFLaGlCLE9BQVEsTUFBTSxJQUFJeEIsTUFBTSxrREFFNUJzaEIsVUFBWS9ULE9BQU9NLE9BQU8sR0FBSWpOLEVBQVU0aUIsS0FBS2xDLGFBRXBDa0MsS0FBS2xDLGlCQUdTWixFQUFhOEMsS0FBS2xDLFdBQXRDaGYsRUFBQXljLEVBQUF6YyxRQUFTK2QsRUFBQXRCLEVBQUFzQixPQUVYbUksRUFBWWhGLEtBQUtpRixhQUFhakYsS0FBS2xDLGdCQUdwQ0MsT0FBU2hVLE9BQUFNLE9BQUEsR0FDVDJhLFVBQ0huSSxVQUNBL2QsWUFDVyxXQUNGLGFBQ0UsV0FDRixhQUNFLFdBQ0RraEIsS0FBSzVpQixjQUNUNGlCLEtBQUs1aUIsU0FBU3lsQix1QkFHWixPQUFNNUQsRUFBS2EsZ0NBQ1AsT0FBTWIsRUFBS0wsZ0NBQ1pvRixHQUFBLE9BQU8vRSxFQUFLcUgsU0FBU3RDLG9CQUMxQixPQUFNL0UsRUFBSzhCLDBCQUNULE9BQU05QixFQUFLWSwwQkFDVnBXLEdBQUEsT0FBUXdWLEVBQUswRixPQUFPbGIseUJBQ2hCQSxHQUFBLE9BQU93VixFQUFLTyxZQUFZL1Ysc0JBQzdCLE9BQU13VixFQUFLTSwwQkFDYixPQUFNTixFQUFLM2dCLHlCQUNWLE9BQU0yZ0IsRUFBS1MseUJBQ1osT0FBTVQsRUFBS29DLGVBSWQ2RCxtQkFJQXJGLHNCQUdQMEgsV0FBQSxTQUFZdnFCLEVBQWN3cUIscUJBQ2pCeEgsS0FBS3lILEtBQUt6cUIsRUFBY3dxQixHQUFheGIsS0FBckMsb0JBQ0FzVCxNQUNFTCxpQkFJWHlJLE9BQUEsMkJBQ09oSSxRQUNBTSxLQUFLaGlCLFNBQ3dCLG1CQUF2QmdpQixLQUFLaGlCLE9BQU8wcEIsYUFDaEI5RixrQkFBTCxTQUF1QnZILEdBQUEsT0FBUzRFLEVBQUtqaEIsT0FBTzBwQixPQUFPck4sVUFFaEQyRCxRQUFVLG1CQUdqQjJKLFFBQUEsZ0JBQ09ELGNBQ0FsQix1QkFHUGlCLEtBQUEsU0FBTUcsRUFBY0osaUJBRVUsbUJBQWpCSSxRQUNILElBQUlwckIsTUFBTSxvSEFHZHdqQixLQUFLaGlCLGFBQ0YwcEIsY0FHb0IsSUFBaEJGLFFBQ0o3QyxPQUFPNkMsUUFNVHZELGlCQUVENEQsRUFBVWpVLFFBQVFDLGFBSWxCbU0sS0FBSzVpQixTQUFTK21CLEdBQUksS0FDZjNYLFVBQ0csSUFBSWhRLE1BQU0sb0VBRVIsSUFBSW9YLFFBQUosU0FBWUMsT0FFaEJnVSxFQURBQyxFQUFnQjdJLEVBQUs3aEIsU0FBUyttQixHQUU5QjJELEVBQWMzRCxPQUNOMkQsRUFBY0QsVUFDUkMsRUFBYzNELFFBSTFCNEQsRUFBQSxTQUFXNUQsR0FFWDBELElBQVMxRCxFQUFHMEQsUUFBSCxXQUFhLE9BQU1BLEVBQVExRCxPQUNyQ21ELE1BQUgsZUFDUWpOLEVBQVE0RSxFQUFLNUUsTUFDYjJOLEVBQWlDLFVBQTFCL0ksRUFBSzdoQixTQUFTMEIsUUFDckJtcEIsRUFBV0QsRUFBTzdELEVBQUcrRCxNQUFRL0QsRUFBR2dFLE1BQ25DQyxXQUNBN0MsYUFBYWxMLEVBQU1VLGNBQ25CbUMsYUFBYTdDLEVBQU1xRyxjQUFlckcsRUFBTXNHLGVBQWdCc0gsR0FDdkRELEdBQVEvSSxFQUFLN2hCLFNBQVNrZ0IsY0FDckIrSyxjQUFjcEosRUFBSzdoQixTQUFTa2dCLGNBRzVCcUgsT0FBTyxJQUFFUixTQUFZQSxFQUFHdEgsZUFBaUJzSCxFQUFHbUUsVUFBVUMsMEJBTWxDLG1CQUFsQlQsTUFDTEEsRUFBY0MsT0FDYixJQUM4QixtQkFBeEI3YixPQUFPZ1IsbUJBQ1YsSUFBSTFnQixNQUFNLDhKQUVUMFAsa0JBS1IyYixFQUFRN2IsS0FBUixlQUVEd2MsRUFBU1osRUFBYTNJLEVBQUs1RSxjQUMxQnZPLEVBQVUwYyxPQUNKNVUsUUFBUUMsUUFBUTJVLElBRXBCQSxJQUNOeGMsS0FQSSxTQU9DaE8sVUFDREEsSUFBUUEsRUFBUyxNQUNqQmdnQixRQUFVaGdCLEVBR1h3TyxRQUNHNlIsbUJBQW1Cb0ssZ0JBQ2pCOXBCLGlCQUFpQixTQUFVc2dCLEVBQUtXLG1CQUdwQ3NFLGdCQU1BMEIsZUFDRTNHLElBQ040QyxNQXpCSSxTQXlCRTdXLGlCQUNDK00sS0FBSywwRkFBNEYvTSxFQUFJMGQsU0FDdkcxZCw0Q0UzOUJaLElBQU0yZCxFQUFRLGVBQ1JDLEVBQW9CLEdBMEIxQixTQUFTNXJCLEVBQWNnQixFQUFRWixHQUM3QixrQkFEd0MsSUFDcENBLEVBQVMrbUIsR0FBSSxDQUNmLEdBQUkvbUIsRUFBU3lmLFFBQVd6ZixFQUFTMEIsU0FBdUMsaUJBQXJCMUIsRUFBUzBCLFFBQzFELE1BQU0sSUFBSXRDLE1BQU0sOEdBS2xCWSxFQUFXMk0sT0FBT00sT0FBTyxHQUFJak4sRUFBVSxDQUFFeWYsUUFBUSxVQURMLGlCQUFyQnpmLEVBQVMwQixTQUF1QjFCLEVBQVMwQixVQUlsRSxJQWxDTW9WLEVBbUNGMlUsRUFERUMsR0FsQ0E1VSxFQUFTNUgsTUFDRTRILEVBQU82VSxJQW1DcEJELElBSUZELEVBQVFqbkIsRUFBUXhFLEVBQVM0ckIsR0FBSSxtQ0FFL0IsSUFBSUMsRUFBY0gsR0FBMEIsaUJBQVZELEVBRTlCSSxHQUFlTCxFQUFrQjVRLFNBQVM2USxLQUM1Qy9RLFFBQVFDLEtBQUssb0tBQXFLOFEsR0FDbExJLEdBQWMsR0FHaEIsSUFBSXBCLEVBQVVqVSxRQUFRQyxVQUV0QixHQUFJb1YsRUFBYSxDQUVmTCxFQUFrQjlsQixLQUFLK2xCLEdBRXZCLElBQU1LLEVBbkRWLFNBQW1CRixHQUNqQixJQUFNOVUsRUFBUzVILElBQ2YsR0FBSzRILEVBRUwsT0FEQUEsRUFBT3lVLEdBQVN6VSxFQUFPeVUsSUFBVSxHQUMxQnpVLEVBQU95VSxHQUFPSyxHQStDRUcsQ0FBU04sR0FDOUIsR0FBSUssRUFBYyxDQUNoQixJQUFNRSxFQUFBLFdBRUosSUF6Q2NDLEVBeUNSL0QsR0F6Q1ErRCxFQXlDZUgsRUFBYTduQixRQUFTakUsRUF2Q3RDRSxRQUFVLENBQUVnakIsS0FBTStJLEVBQVdoUCxNQUFNaUcsV0FBUzVXLEdBMkN6RCxPQUZBd2YsRUFBYTduQixRQUFRc21CLFVBRWRyQyxHQUlUdUMsRUFBVXFCLEVBQWF6QixLQUFLemIsS0FBS29kLEdBQU12SCxNQUFNdUgsSUFJakQsT0FBT3ZCLEVBQVE3YixLQUFSLFNBQWFzWixHQUNsQixJQUNJcGMsRUE5RFc4ZixFQUFJbkcsRUFDZjNPLEVBNERFN1MsRUFBVSxJQUFJd2MsRUFvQnBCLE9BbEJJN2YsR0FFRlosRUFBVzJNLE9BQU9NLE9BQU8sR0FBSWpOLEVBQVVrb0IsR0FHdkNqa0IsRUFBUWltQixNQUFNbHFCLEdBR2RpRSxFQUFRa2xCLFFBR1JyZCxFQUFTN0gsRUFBUWttQixXQUFXdnBCLElBRTVCa0wsRUFBUzBLLFFBQVFDLFFBQVF4UyxHQUV2QjRuQixJQTlFV0QsRUErRUpILEVBL0VRaEcsRUErRUQsQ0FBRTRFLEtBQU12ZSxVQUFRN0gsSUE5RTlCNlMsRUFBUzVILE9BRWY0SCxFQUFPeVUsR0FBU3pVLEVBQU95VSxJQUFVLEdBQ2pDelUsRUFBT3lVLEdBQU9LLEdBQU1uRyxJQTZFWDNaLFdBS1hsTSxFQUFhQSxhQUFlQSxFQUM1QkEsRUFBYXNzQixXQUFhclIsNkpDMUcxQmxiLEVBQUFKLFFBQUEsV0FDQSxJQUFBLElBQUFULEVBQUEsRUFBQUEsRUFBQXFQLFVBQUExTyxPQUFBWCxJQUNBLFFBQUF3TixJQUFBNkIsVUFBQXJQLEdBQUEsT0FBQXFQLFVBQUFyUCxxRENGQSxhQUVBLElBQUE2QyxFQUFBLElBR0F3cUIsRUFBQSxHQUNBQyxPQUFBLElBQUExYixFQUFBNUIsT0FBQTRCLEVBS0EyYixFQUFBN3FCLEtBQUE4cUIsSUFBQTNxQixFQVJBLEdBU0E0cUIsRUFBQS9xQixLQUFBOHFCLElBQUEsRUFSQSxJQVNBRSxFQUFBLEVBQUFELEVBQ0F2YixFQUFBclAsRUFBQSxFQUdBOHFCLEVBQUFqckIsS0FBQTNCLE9BaUVBLFNBQUE2c0IsRUFBQXRlLEdBQ0EsSUFBQXhQLEVBQUErdEIsRUFBQXZlLEVBQUEzTyxPQUNBbXRCLEVBQUFoSyxLQUFBOWpCLEVBQUEsRUFBQSt0QixFQUFBRCxFQUFBOXRCLEVBQUE4dEIsRUFBQUMsRUFBQSxFQUFBNWdCLEVBQUEyZ0IsRUFBQWxZLEVBQUEsR0FNQSxJQUhBaVksSUFBQXZlLEVBQUEsQ0FBQXVlLE1BR0E3dEIsRUFBQTZDLEdBQ0FzSyxFQUFBbk4sR0FBQUEsSUFFQSxJQUFBQSxFQUFBLEVBQUFBLEVBQUE2QyxFQUFBN0MsSUFDQW1OLEVBQUFuTixHQUFBbU4sRUFBQTRnQixFQUFBN2IsRUFBQTZiLEVBQUF6ZSxFQUFBdFAsRUFBQTZ0QixJQUFBL3RCLEVBQUFxTixFQUFBbk4sS0FDQW1OLEVBQUE0Z0IsR0FBQWp1QixHQUlBZ3VCLEVBQUFFLEVBQUEsU0FBQUMsR0FJQSxJQUZBLElBQUFudUIsRUFBQUgsRUFBQSxFQUNBSyxFQUFBOHRCLEVBQUE5dEIsRUFBQSt0QixFQUFBRCxFQUFBQyxFQUFBNWdCLEVBQUEyZ0IsRUFBQWxZLEVBQ0FxWSxLQUNBbnVCLEVBQUFxTixFQUFBbk4sRUFBQWtTLEVBQUFsUyxFQUFBLEdBQ0FMLEVBQUFBLEVBQUFrRCxFQUFBc0ssRUFBQStFLEdBQUEvRSxFQUFBbk4sR0FBQW1OLEVBQUE0Z0IsRUFBQTdiLEVBQUE2YixFQUFBanVCLEtBQUFxTixFQUFBNGdCLEdBQUFqdUIsSUFHQSxPQURBZ3VCLEVBQUE5dEIsRUFBQUEsRUFBQTh0QixFQUFBQyxFQUFBQSxFQUNBcHVCLElBR0FrRCxHQXNCQSxTQUFBcXJCLEVBQUE1Z0IsRUFBQWdDLEdBRUEsSUFEQSxJQUFBNmUsRUFBQUMsRUFBQTlnQixFQUFBLEdBQUF5Z0IsRUFBQSxFQUNBQSxFQUFBSyxFQUFBenRCLFFBQ0EyTyxFQUFBNEMsRUFBQTZiLEdBQ0E3YixHQUFBaWMsR0FBQSxHQUFBN2UsRUFBQTRDLEVBQUE2YixJQUFBSyxFQUFBbFYsV0FBQTZVLEtBRUEsT0FBQU0sRUFBQS9lLEdBc0JBLFNBQUErZSxFQUFBaHVCLEdBQ0EsT0FBQXlKLE9BQUF5RSxhQUFBK2YsTUFBQSxFQUFBanVCLEdBM0lBUSxFQUFBSixRQUFBLFNBQUE2TSxFQUFBaWhCLEdBQ0EsR0FBQUEsSUFBQSxJQUFBQSxFQUFBM2MsT0FJQSxPQUhBMmMsRUFBQTNjLFFBQUEsRUFDQWxQLEtBQUEzQixPQUFBRixFQUFBSixRQUFBNk0sRUFBQWloQixHQUNBQSxFQUFBM2MsUUFBQSxFQUNBbFAsS0FBQTNCLE9BRUEsSUFDQXVPLEVBQUEsR0FRQWtmLEdBTEFOLEVBb0ZBLFNBQUFPLEVBQUE1ZSxFQUFBNmUsR0FDQSxJQUFBQyxFQUFBM2hCLEVBQUEsR0FBQTRoQixVQUFBL2UsR0FBQSxHQUNBLEdBQUE2ZSxHQUFBLEtBQUFFLEVBQ0EsSUFBQUQsS0FBQTllLEVBQ0EsSUFBQTdDLEVBQUFwRyxLQUFBNm5CLEVBQUE1ZSxFQUFBOGUsR0FBQUQsRUFBQSxJQUFBLE1BQUE5dUIsSUFHQSxPQUFBb04sRUFBQXJNLE9BQUFxTSxFQUFBLEtBQUE0aEIsRUFBQS9lLEVBQUFBLEVBQUEsS0EzRkE0ZSxDQUpBRixHQUFBQSxFQUFBTSxVQUFBLEVBS0EsQ0FBQXZoQixFQUFBK2dCLEVBQUFoQixJQUNBLEtBQUFoZSxVQUFBL0IsRUErR0EsU0FBQUEsR0FDQSxJQUVBLE9BREFnZ0IsRUFBQXdCLE9BQUFDLGdCQUFBemhCLEVBQUEsSUFBQTJMLFdBQUFwVyxJQUNBd3JCLEVBQUEvZ0IsR0FDQSxNQUFBMU4sR0FDQSxNQUFBLEVBQUEsSUFBQStQLEtBQUEyZCxFQUFBQSxFQUFBMEIsV0FBQTFCLEVBQUEwQixVQUFBQyxRQUNBM0IsRUFBQTRCLE9BQUFiLEVBQUFoQixLQXJIQThCLEdBQUEsR0FBQTdmLEdBR0EsSUFBQXNlLEVBQUF0ZSxJQVVBLE9BUEE0ZSxFQUFBRyxFQUFBRyxFQUFBNVksR0FBQXlYLEdBT0EsV0FJQSxJQUhBLElBQUF4dEIsRUFBQTJ1QixFQUFBUixFQS9DQSxHQWdEQXRiLEVBQUE2YSxFQUNBL3BCLEVBQUEsRUFDQTNELEVBQUE0dEIsR0FDQTV0QixHQUFBQSxFQUFBMkQsR0FBQVgsRUFDQTZQLEdBQUE3UCxFQUNBVyxFQUFBZ3JCLEVBQUFSLEVBQUEsR0FFQSxLQUFBbnVCLEdBQUE2dEIsR0FDQTd0QixHQUFBLEVBQ0E2UyxHQUFBLEVBQ0FsUCxLQUFBLEVBRUEsT0FBQTNELEVBQUEyRCxHQUFBa1AsSUFJQTdSLEVBQUFKLFFBQUEydUIsWUFBQSxXQUNBMXNCLEtBQUEzQixPQUFBNHNCLEdBd0dBTyxFQUFBeHJCLEtBQUEzQixTQUFBc3NCLDJKQy9JQSxXQUNBLGFBRUEsSUFBQWdDLEVBQUEsSUFBQTNzQixLQUFBNkksS0FBQSxHQUFBLEdBQ0ErakIsR0FBQSxFQUFBNXNCLEtBQUE2SSxLQUFBLElBQUEsRUFFQWdrQixFQUFBLEVBQUEsRUFDQUMsR0FBQTlzQixLQUFBNkksS0FBQSxHQUFBLEdBQUEsRUFDQWtrQixHQUFBLEVBQUEvc0IsS0FBQTZJLEtBQUEsSUFBQSxHQUVBLFNBQUFyQyxFQUFBd21CLEdBQ0EsSUFBQTN1QixFQUVBQSxFQURBLG1CQUFBMnVCLEVBQ0FBLEVBRUFBLEVBNldBLFdBRUEsSUFBQUMsRUFBQSxFQUNBQyxFQUFBLEVBQ0FDLEVBQUEsRUFDQTN2QixFQUFBLEVBRUE0dkIsR0E0QkFqd0IsRUFBQSxXQUNBLFNBQUE4bUIsR0FDQUEsRUFBQUEsRUFBQWpXLFdBQ0EsSUFBQSxJQUFBMVEsRUFBQSxFQUFBQSxFQUFBMm1CLEVBQUFobUIsT0FBQVgsSUFBQSxDQUVBLElBQUE2VSxFQUFBLG9CQURBaFYsR0FBQThtQixFQUFBek4sV0FBQWxaLElBR0E2VSxHQURBaFYsRUFBQWdWLElBQUEsRUFHQWhWLEdBREFnVixHQUFBaFYsS0FDQSxFQUVBQSxHQUFBLFlBREFnVixHQUFBaFYsR0FHQSxPQUFBLHdCQUFBQSxJQUFBLEtBZEEsSUFDQUEsRUEzQkE4dkIsRUFBQUcsRUFBQSxLQUNBRixFQUFBRSxFQUFBLEtBQ0FELEVBQUFDLEVBQUEsS0FFQSxJQUFBLElBQUE5dkIsRUFBQSxFQUFBQSxFQUFBcVAsVUFBQTFPLE9BQUFYLEtBQ0EydkIsR0FBQUcsRUFBQXpnQixVQUFBclAsS0FDQSxJQUNBMnZCLEdBQUEsSUFFQUMsR0FBQUUsRUFBQXpnQixVQUFBclAsS0FDQSxJQUNBNHZCLEdBQUEsSUFFQUMsR0FBQUMsRUFBQXpnQixVQUFBclAsS0FDQSxJQUNBNnZCLEdBQUEsR0FJQSxPQURBQyxFQUFBLEtBQ0EsV0FDQSxJQUFBaHdCLEVBQUEsUUFBQTZ2QixFQUFBLHVCQUFBenZCLEVBR0EsT0FGQXl2QixFQUFBQyxFQUNBQSxFQUFBQyxFQUNBQSxFQUFBL3ZCLEdBQUFJLEVBQUEsRUFBQUosSUEzWUFpd0IsQ0FBQUwsR0FFQWh0QixLQUFBM0IsT0FFQStpQixLQUFBdGpCLEVBQUF3dkIsRUFBQWp2QixHQUNBK2lCLEtBQUFtTSxLQUFBLElBQUFoWCxXQUFBLEtBQ0E2SyxLQUFBb00sVUFBQSxJQUFBalgsV0FBQSxLQUNBLElBQUEsSUFBQWpaLEVBQUEsRUFBQUEsRUFBQSxJQUFBQSxJQUNBOGpCLEtBQUFtTSxLQUFBandCLEdBQUE4akIsS0FBQXRqQixFQUFBLElBQUFSLEdBQ0E4akIsS0FBQW9NLFVBQUFsd0IsR0FBQThqQixLQUFBbU0sS0FBQWp3QixHQUFBLEdBbVZBLFNBQUFnd0IsRUFBQWp2QixHQUNBLElBQUFmLEVBQ0FRLEVBQUEsSUFBQXlZLFdBQUEsS0FDQSxJQUFBalosRUFBQSxFQUFBQSxFQUFBLElBQUFBLElBQ0FRLEVBQUFSLEdBQUFBLEVBRUEsSUFBQUEsRUFBQSxFQUFBQSxFQUFBLElBQUFBLElBQUEsQ0FDQSxJQUFBTCxFQUFBSyxLQUFBZSxLQUFBLElBQUFmLElBQ0Ftd0IsRUFBQTN2QixFQUFBUixHQUNBUSxFQUFBUixHQUFBUSxFQUFBYixHQUNBYSxFQUFBYixHQUFBd3dCLEVBRUEsT0FBQTN2QixFQTNWQTBJLEVBQUE2RSxVQUFBLENBQ0FxaUIsTUFBQSxJQUFBQyxhQUFBLENBQUEsRUFBQSxFQUFBLEdBQ0EsRUFBQSxFQUFBLEVBQ0EsR0FBQSxFQUFBLEdBRUEsR0FBQSxFQUFBLEVBQ0EsRUFBQSxFQUFBLEdBQ0EsRUFBQSxFQUFBLEVBRUEsRUFBQSxHQUFBLEdBQ0EsRUFBQSxHQUFBLEVBQ0EsRUFBQSxFQUFBLEVBRUEsR0FBQSxFQUFBLEVBQ0EsRUFBQSxHQUFBLEVBQ0EsR0FBQSxHQUFBLElBQ0FDLE1BQUEsSUFBQUQsYUFBQSxDQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEdBQUEsRUFBQSxFQUFBLEdBQUEsRUFBQSxFQUFBLEVBQUEsR0FBQSxHQUFBLEVBQ0EsR0FBQSxFQUFBLEVBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsR0FBQSxHQUFBLEdBQUEsRUFDQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxHQUFBLEVBQUEsRUFBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLEdBQUEsR0FBQSxHQUNBLEVBQUEsRUFBQSxFQUFBLEdBQUEsRUFBQSxFQUFBLEdBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxHQUFBLEVBQUEsR0FBQSxHQUFBLEVBQ0EsRUFBQSxFQUFBLEVBQUEsRUFBQSxFQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsRUFBQSxFQUFBLEVBQUEsR0FBQSxFQUFBLEdBQUEsR0FDQSxFQUFBLEVBQUEsRUFBQSxHQUFBLEVBQUEsRUFBQSxHQUFBLEdBQUEsR0FBQSxFQUFBLEVBQUEsR0FBQSxHQUFBLEVBQUEsR0FBQSxFQUNBLEVBQUEsRUFBQSxFQUFBLEVBQUEsRUFBQSxHQUFBLEVBQUEsRUFBQSxHQUFBLEVBQUEsRUFBQSxF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QUFBQSxHQUNBbnBDLEVBQUF5eEQsUUFBQUEsR0FDQXp4RCxFQUFBbzBCLGNBQUFBLEVBQ0FwMEIsRUFBQTR5RCxRQUFBQSxHQUVBeGxELE9BQUE0bUQsZUFBQWgwRCxFQUFBLGFBQUEsQ0FBQTRFLE9BQUEsS0FyN05BLGlCQUFBNUUsUUFBQSxJQUFBSSxFQUFBdXpCLEVBQUEzekIsR0FDQSxtQkFBQXl6QixRQUFBQSxPQUFBQyxJQUFBRCxPQUFBLENBQUEsV0FBQUUsR0FDQUEsR0FBQXhpQixFQUFBLG9CQUFBOGlELFdBQUFBLFdBQUE5aUQsR0FBQStpRCxNQUFBMXpELFVBQUEsc0RDSEEyUSxFQUFBZ2pELGtDQUFBNWtELE9BQUE2a0QsU0FBQWw3QyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbigpe2Z1bmN0aW9uIHIoZSxuLHQpe2Z1bmN0aW9uIG8oaSxmKXtpZighbltpXSl7aWYoIWVbaV0pe3ZhciBjPVwiZnVuY3Rpb25cIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIWYmJmMpcmV0dXJuIGMoaSwhMCk7aWYodSlyZXR1cm4gdShpLCEwKTt2YXIgYT1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK2krXCInXCIpO3Rocm93IGEuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIixhfXZhciBwPW5baV09e2V4cG9ydHM6e319O2VbaV1bMF0uY2FsbChwLmV4cG9ydHMsZnVuY3Rpb24ocil7dmFyIG49ZVtpXVsxXVtyXTtyZXR1cm4gbyhufHxyKX0scCxwLmV4cG9ydHMscixlLG4sdCl9cmV0dXJuIG5baV0uZXhwb3J0c31mb3IodmFyIHU9XCJmdW5jdGlvblwiPT10eXBlb2YgcmVxdWlyZSYmcmVxdWlyZSxpPTA7aTx0Lmxlbmd0aDtpKyspbyh0W2ldKTtyZXR1cm4gb31yZXR1cm4gcn0pKCkiLCJjb25zdCBjYW52YXNTa2V0Y2ggPSByZXF1aXJlKCdjYW52YXMtc2tldGNoJyk7XG5jb25zdCByYW5kb20gPSByZXF1aXJlKCdjYW52YXMtc2tldGNoLXV0aWwvcmFuZG9tJyk7XG5jb25zdCBtYXRoID0gcmVxdWlyZSgnY2FudmFzLXNrZXRjaC11dGlsL21hdGgnKTtcbmNvbnN0IFR3ZWFrcGFuZSA9IHJlcXVpcmUoJ3R3ZWFrcGFuZScpO1xuXG5jb25zdCBzZXR0aW5ncyA9IHtcblx0ZGltZW5zaW9uczogWydwb3N0ZXInXSxcblx0YW5pbWF0ZTogdHJ1ZVxufTtcblxuY29uc3QgcGFyYW1zID0ge1xuXHRjb2xzOiAxMCxcblx0cm93czogMTAsXG5cdHNjYWxlTWluOiAxLFxuXHRzY2FsZU1heDogMzAsXG5cdGZyZXE6IDAuMDAxLFxuXHRhbXA6IDAuMixcblx0ZnJhbWU6IDAsXG5cdGFuaW1hdGU6IHRydWUsXG5cdGxpbmVDYXA6ICdidXR0Jyxcbn07XG5cbmNvbnN0IHNrZXRjaCA9ICgpID0+IHtcblxuXHRcblx0XG5cdFx0dmFyIGltZyA9IG5ldyBJbWFnZSgpO1xuXHRcdGltZy5zcmMgPSBcIi4vMTkucG5nXCJcblx0XHR2YXIgYXVkaW8gPSBuZXcgQXVkaW8oKTtcblx0XHRhdWRpby5wbGF5KCk7XG5cdFx0IFxuICAgICAgICBjb25zdCBtdXNpYyA9IG5ldyBBdWRpbygnLi9tdXNlby5tcDMnKTtcblx0XHRtdXNpYy5wbGF5KCk7XG5cdFx0bXVzaWMubG9vcCA9dHJ1ZTtcblx0XHRtdXNpYy5wbGF5YmFja1JhdGUgPSAxO1xuICAgICAgIFxuICAgICAgICBcblxuXHRcdGNvbnN0IG9uQ2xpY2sgPSAoZSkgPT4ge1xuXHRcdFx0XG5cdFx0XHRpbWcuc3JjID0gTWF0aC5mbG9vciggTWF0aC5yYW5kb20oKSAqIDIwICkgKyBcIi5wbmdcIjtcblx0XHRcdGF1ZGlvLnNyYyA9IFwiLi9hdWRpb3MvXCIrTWF0aC5mbG9vciggTWF0aC5yYW5kb20oKSAqMjAgKSArIFwiLm1wM1wiO1xuXHRcdFx0YXVkaW8ucGxheSgpO1xuXHRcdFx0bXVzaWMucGxheSgpO1xuXHRcdFx0XG5cdFx0XHRcblxuXHRcdH07XG5cdFx0XG5cdFx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvbkNsaWNrKTtcblxuXG5cblxuXHRcdFxuXHRyZXR1cm4gKHsgY29udGV4dCwgd2lkdGgsIGhlaWdodCwgZnJhbWUgfSkgPT4ge1xuXHRcdGNvbnRleHQuZmlsbFN0eWxlID0gJ3doaXRlJztcblx0XHRjb250ZXh0LmZpbGxSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuXG5cdFx0Y29uc3QgY29scyA9IHBhcmFtcy5jb2xzO1xuXHRcdGNvbnN0IHJvd3MgPSBwYXJhbXMucm93cztcblx0XHRjb25zdCBudW1DZWxscyA9IGNvbHMgKiByb3dzO1xuXG5cdFx0Y29uc3QgZ3JpZHcgPSB3aWR0aCAgKiAxO1xuXHRcdGNvbnN0IGdyaWRoID0gaGVpZ2h0ICogMTtcblx0XHRjb25zdCBjZWxsdyA9IGdyaWR3IC8gY29scztcblx0XHRjb25zdCBjZWxsaCA9IGdyaWRoIC8gcm93cztcblx0XHRjb25zdCBtYXJneCA9ICh3aWR0aCAgLSBncmlkdykgKiAwLjU7XG5cdFx0Y29uc3QgbWFyZ3kgPSAoaGVpZ2h0IC0gZ3JpZGgpICogMC41O1xuXG5cdFx0XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG51bUNlbGxzOyBpKyspIHtcblx0XHRcdGNvbnN0IGNvbCA9IGkgJSBjb2xzOyAgICAgLy8gdXNhIGVsIHJlc3RvIHBhcmEgdmVyIGxhcyBjb2x1bW5hcyAwLzQsIDEvNCwyLzQsMy80LDQvNCAtLT4gYWjDrSB2dWVsdmUgYVxuXHRcdFx0Y29uc3Qgcm93ID0gTWF0aC5mbG9vcihpIC8gY29scyk7XG5cblx0XHRcdGNvbnN0IHggPSBjb2wgKiBjZWxsdztcblx0XHRcdGNvbnN0IHkgPSByb3cgKiBjZWxsaDtcblx0XHRcdGNvbnN0IHcgPSBjZWxsdyAqIDAuODtcblx0XHRcdGNvbnN0IGggPSBjZWxsaCAqIDAuODtcblxuXHRcdFx0Y29uc3QgZiA9IHBhcmFtcy5hbmltYXRlID8gZnJhbWUgOiBwYXJhbXMuZnJhbWU7XG5cblx0XHRcdC8vIGNvbnN0IG4gPSByYW5kb20ubm9pc2UyRCh4ICsgZnJhbWUgKiAxMCwgeSwgcGFyYW1zLmZyZXEpO1xuXHRcdFx0Y29uc3QgbiA9IHJhbmRvbS5ub2lzZTNEKHgsIHksIGYgKiAxMCwgcGFyYW1zLmZyZXEpO1xuXG5cblx0XHRcdGNvbnN0IGFuZ2xlID0gbiAqIE1hdGguUEkgKiBwYXJhbXMuYW1wO1xuXHRcdFx0XG5cdFx0XHQvLyBjb25zdCBzY2FsZSA9IChuICsgMSkgLyAyICogMzA7XG5cdFx0XHQvLyBjb25zdCBzY2FsZSA9IChuICogMC41ICsgMC41KSAqIDMwO1xuXHRcdFx0Y29uc3Qgc2NhbGUgPSBtYXRoLm1hcFJhbmdlKG4sIC0xLCAxLCBwYXJhbXMuc2NhbGVNaW4sIHBhcmFtcy5zY2FsZU1heCk7XG5cblx0XHRcdGNvbnRleHQuc2F2ZSgpO1xuXHRcdFx0Y29udGV4dC50cmFuc2xhdGUoeCwgeSk7XG5cdFx0XHRjb250ZXh0LnRyYW5zbGF0ZShtYXJneCwgbWFyZ3kpO1xuXHRcdFx0Y29udGV4dC50cmFuc2xhdGUoY2VsbHcgKiAwLjUsIGNlbGxoICogMC41KTtcblx0XHRcdGNvbnRleHQucm90YXRlKGFuZ2xlKTtcblxuXHRcdFx0XG5cdFx0XHRcblx0XHRcdGNvbnRleHQuZHJhd0ltYWdlKGltZywgLTEyNSwgLTEwMCk7XG5cblx0XHRcdC8vY29udGV4dC5saW5lV2lkdGggPSBzY2FsZTtcblx0XHRcdGNvbnRleHQubGluZUNhcCA9IHBhcmFtcy5saW5lQ2FwO1xuXG5cdFx0XHRjb250ZXh0LmJlZ2luUGF0aCgpO1xuXHRcdFx0Y29udGV4dC5tb3ZlVG8odyAqIC0wLjUsIDApO1xuXHRcdFx0Y29udGV4dC5saW5lVG8odyAqICAwLjUsIDApO1xuXHRcdFx0Y29udGV4dC5zdHJva2UoKTtcblxuXHRcdFx0Y29udGV4dC5yZXN0b3JlKCk7XG5cblx0XHR9XG5cblx0fTtcbn07XG5cbmNvbnN0IGNyZWF0ZVBhbmUgPSAoKSA9PiB7XG5cdGNvbnN0IHBhbmUgPSBuZXcgVHdlYWtwYW5lLlBhbmUoKTtcblxuICAgXG5cdCAgXG5cdCBcblxuXHRsZXQgZm9sZGVyO1xuXG5cdGZvbGRlciA9IHBhbmUuYWRkRm9sZGVyKHsgdGl0bGU6ICdtdXNlbyBkZWwga2FtaWthemUgZGVsIGNvcmF6w7NuJ30pO1xuXHRcblx0Zm9sZGVyLmFkZElucHV0KHBhcmFtcywgJ2NvbHMnLCB7IG1pbjogMiwgbWF4OiAyMCwgc3RlcDogMSB9KTtcblx0Zm9sZGVyLmFkZElucHV0KHBhcmFtcywgJ3Jvd3MnLCB7IG1pbjogMiwgbWF4OiAyMCwgc3RlcDogMSB9KTtcblx0Zm9sZGVyLmFkZElucHV0KHBhcmFtcywgJ3NjYWxlTWluJywgeyBtaW46IDEsIG1heDogMTAwIH0pO1xuXHRmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnc2NhbGVNYXgnLCB7IG1pbjogMSwgbWF4OiAxMDAgfSk7XG5cblx0XG5cblxuXHRmb2xkZXIgPSBwYW5lLmFkZEZvbGRlcih7IHRpdGxlOiAnbXVzZW8gZGVsIGNvcmF6w7NuIGRlbCBrYW1pa2F6ZScgfSk7XG5cdGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdmcmVxJywgeyBtaW46IC0wLjAxLCBtYXg6IDAuMDEgfSk7XG5cdGZvbGRlci5hZGRJbnB1dChwYXJhbXMsICdhbXAnLCB7IG1pbjogMCwgbWF4OiAxIH0pO1xuXHRmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnYW5pbWF0ZScpO1xuXHRmb2xkZXIuYWRkSW5wdXQocGFyYW1zLCAnZnJhbWUnLCB7IG1pbjogMCwgbWF4OiA5OTkgfSk7XG59O1xuXG5jcmVhdGVQYW5lKCk7XG5jYW52YXNTa2V0Y2goc2tldGNoLCBzZXR0aW5ncyk7XG5cbi8vXG5cblxuXG5jb25zdCBzdGFydCA9IGFzeW5jICgpID0+IHtcblx0bWFuYWdlciA9IGF3YWl0IGNhbnZhc1NrZXRjaChza2V0Y2gsIHNldHRpbmdzKTtcbn07XG5cbnN0YXJ0KCk7XG5cblxuXG5cblxuICBcbiAgXG5cblxuXG5cbiIsIm1vZHVsZS5leHBvcnRzID0gd3JhcDtcbmZ1bmN0aW9uIHdyYXAgKHZhbHVlLCBmcm9tLCB0bykge1xuICBpZiAodHlwZW9mIGZyb20gIT09ICdudW1iZXInIHx8IHR5cGVvZiB0byAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNdXN0IHNwZWNpZnkgXCJ0b1wiIGFuZCBcImZyb21cIiBhcmd1bWVudHMgYXMgbnVtYmVycycpO1xuICB9XG4gIC8vIGFsZ29yaXRobSBmcm9tIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzU4NTI2MjgvNTk5ODg0XG4gIGlmIChmcm9tID4gdG8pIHtcbiAgICB2YXIgdCA9IGZyb207XG4gICAgZnJvbSA9IHRvO1xuICAgIHRvID0gdDtcbiAgfVxuICB2YXIgY3ljbGUgPSB0byAtIGZyb207XG4gIGlmIChjeWNsZSA9PT0gMCkge1xuICAgIHJldHVybiB0bztcbiAgfVxuICByZXR1cm4gdmFsdWUgLSBjeWNsZSAqIE1hdGguZmxvb3IoKHZhbHVlIC0gZnJvbSkgLyBjeWNsZSk7XG59XG4iLCJ2YXIgZGVmaW5lZCA9IHJlcXVpcmUoJ2RlZmluZWQnKTtcbnZhciB3cmFwID0gcmVxdWlyZSgnLi9saWIvd3JhcCcpO1xudmFyIEVQU0lMT04gPSBOdW1iZXIuRVBTSUxPTjtcblxuZnVuY3Rpb24gY2xhbXAgKHZhbHVlLCBtaW4sIG1heCkge1xuICByZXR1cm4gbWluIDwgbWF4XG4gICAgPyAodmFsdWUgPCBtaW4gPyBtaW4gOiB2YWx1ZSA+IG1heCA/IG1heCA6IHZhbHVlKVxuICAgIDogKHZhbHVlIDwgbWF4ID8gbWF4IDogdmFsdWUgPiBtaW4gPyBtaW4gOiB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGNsYW1wMDEgKHYpIHtcbiAgcmV0dXJuIGNsYW1wKHYsIDAsIDEpO1xufVxuXG5mdW5jdGlvbiBsZXJwIChtaW4sIG1heCwgdCkge1xuICByZXR1cm4gbWluICogKDEgLSB0KSArIG1heCAqIHQ7XG59XG5cbmZ1bmN0aW9uIGludmVyc2VMZXJwIChtaW4sIG1heCwgdCkge1xuICBpZiAoTWF0aC5hYnMobWluIC0gbWF4KSA8IEVQU0lMT04pIHJldHVybiAwO1xuICBlbHNlIHJldHVybiAodCAtIG1pbikgLyAobWF4IC0gbWluKTtcbn1cblxuZnVuY3Rpb24gc21vb3Roc3RlcCAobWluLCBtYXgsIHQpIHtcbiAgdmFyIHggPSBjbGFtcChpbnZlcnNlTGVycChtaW4sIG1heCwgdCksIDAsIDEpO1xuICByZXR1cm4geCAqIHggKiAoMyAtIDIgKiB4KTtcbn1cblxuZnVuY3Rpb24gdG9GaW5pdGUgKG4sIGRlZmF1bHRWYWx1ZSkge1xuICBkZWZhdWx0VmFsdWUgPSBkZWZpbmVkKGRlZmF1bHRWYWx1ZSwgMCk7XG4gIHJldHVybiB0eXBlb2YgbiA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUobikgPyBuIDogZGVmYXVsdFZhbHVlO1xufVxuXG5mdW5jdGlvbiBleHBhbmRWZWN0b3IgKGRpbXMpIHtcbiAgaWYgKHR5cGVvZiBkaW1zICE9PSAnbnVtYmVyJykgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgZGltcyBhcmd1bWVudCcpO1xuICByZXR1cm4gZnVuY3Rpb24gKHAsIGRlZmF1bHRWYWx1ZSkge1xuICAgIGRlZmF1bHRWYWx1ZSA9IGRlZmluZWQoZGVmYXVsdFZhbHVlLCAwKTtcbiAgICB2YXIgc2NhbGFyO1xuICAgIGlmIChwID09IG51bGwpIHtcbiAgICAgIC8vIE5vIHZlY3RvciwgY3JlYXRlIGEgZGVmYXVsdCBvbmVcbiAgICAgIHNjYWxhciA9IGRlZmF1bHRWYWx1ZTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBwID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShwKSkge1xuICAgICAgLy8gRXhwYW5kIHNpbmdsZSBjaGFubmVsIHRvIG11bHRpcGxlIHZlY3RvclxuICAgICAgc2NhbGFyID0gcDtcbiAgICB9XG5cbiAgICB2YXIgb3V0ID0gW107XG4gICAgdmFyIGk7XG4gICAgaWYgKHNjYWxhciA9PSBudWxsKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZGltczsgaSsrKSB7XG4gICAgICAgIG91dFtpXSA9IHRvRmluaXRlKHBbaV0sIGRlZmF1bHRWYWx1ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBkaW1zOyBpKyspIHtcbiAgICAgICAgb3V0W2ldID0gc2NhbGFyO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0O1xuICB9O1xufVxuXG5mdW5jdGlvbiBsZXJwQXJyYXkgKG1pbiwgbWF4LCB0LCBvdXQpIHtcbiAgb3V0ID0gb3V0IHx8IFtdO1xuICBpZiAobWluLmxlbmd0aCAhPT0gbWF4Lmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pbiBhbmQgbWF4IGFycmF5IGFyZSBleHBlY3RlZCB0byBoYXZlIHRoZSBzYW1lIGxlbmd0aCcpO1xuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbWluLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0W2ldID0gbGVycChtaW5baV0sIG1heFtpXSwgdCk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gbmV3QXJyYXkgKG4sIGluaXRpYWxWYWx1ZSkge1xuICBuID0gZGVmaW5lZChuLCAwKTtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJykgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbiBhcmd1bWVudCB0byBiZSBhIG51bWJlcicpO1xuICB2YXIgb3V0ID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSsrKSBvdXQucHVzaChpbml0aWFsVmFsdWUpO1xuICByZXR1cm4gb3V0O1xufVxuXG5mdW5jdGlvbiBsaW5zcGFjZSAobiwgb3B0cykge1xuICBuID0gZGVmaW5lZChuLCAwKTtcbiAgaWYgKHR5cGVvZiBuICE9PSAnbnVtYmVyJykgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgbiBhcmd1bWVudCB0byBiZSBhIG51bWJlcicpO1xuICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgaWYgKHR5cGVvZiBvcHRzID09PSAnYm9vbGVhbicpIHtcbiAgICBvcHRzID0geyBlbmRwb2ludDogdHJ1ZSB9O1xuICB9XG4gIHZhciBvZmZzZXQgPSBkZWZpbmVkKG9wdHMub2Zmc2V0LCAwKTtcbiAgaWYgKG9wdHMuZW5kcG9pbnQpIHtcbiAgICByZXR1cm4gbmV3QXJyYXkobikubWFwKGZ1bmN0aW9uIChfLCBpKSB7XG4gICAgICByZXR1cm4gbiA8PSAxID8gMCA6ICgoaSArIG9mZnNldCkgLyAobiAtIDEpKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3QXJyYXkobikubWFwKGZ1bmN0aW9uIChfLCBpKSB7XG4gICAgICByZXR1cm4gKGkgKyBvZmZzZXQpIC8gbjtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsZXJwRnJhbWVzICh2YWx1ZXMsIHQsIG91dCkge1xuICB0ID0gY2xhbXAodCwgMCwgMSk7XG5cbiAgdmFyIGxlbiA9IHZhbHVlcy5sZW5ndGggLSAxO1xuICB2YXIgd2hvbGUgPSB0ICogbGVuO1xuICB2YXIgZnJhbWUgPSBNYXRoLmZsb29yKHdob2xlKTtcbiAgdmFyIGZyYWN0ID0gd2hvbGUgLSBmcmFtZTtcblxuICB2YXIgbmV4dEZyYW1lID0gTWF0aC5taW4oZnJhbWUgKyAxLCBsZW4pO1xuICB2YXIgYSA9IHZhbHVlc1tmcmFtZSAlIHZhbHVlcy5sZW5ndGhdO1xuICB2YXIgYiA9IHZhbHVlc1tuZXh0RnJhbWUgJSB2YWx1ZXMubGVuZ3RoXTtcbiAgaWYgKHR5cGVvZiBhID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgYiA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gbGVycChhLCBiLCBmcmFjdCk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShhKSAmJiBBcnJheS5pc0FycmF5KGIpKSB7XG4gICAgcmV0dXJuIGxlcnBBcnJheShhLCBiLCBmcmFjdCwgb3V0KTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNaXNtYXRjaCBpbiB2YWx1ZSB0eXBlIG9mIHR3byBhcnJheSBlbGVtZW50czogJyArIGZyYW1lICsgJyBhbmQgJyArIG5leHRGcmFtZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbW9kIChhLCBiKSB7XG4gIHJldHVybiAoKGEgJSBiKSArIGIpICUgYjtcbn1cblxuZnVuY3Rpb24gZGVnVG9SYWQgKG4pIHtcbiAgcmV0dXJuIG4gKiBNYXRoLlBJIC8gMTgwO1xufVxuXG5mdW5jdGlvbiByYWRUb0RlZyAobikge1xuICByZXR1cm4gbiAqIDE4MCAvIE1hdGguUEk7XG59XG5cbmZ1bmN0aW9uIGZyYWN0IChuKSB7XG4gIHJldHVybiBuIC0gTWF0aC5mbG9vcihuKTtcbn1cblxuZnVuY3Rpb24gc2lnbiAobikge1xuICBpZiAobiA+IDApIHJldHVybiAxO1xuICBlbHNlIGlmIChuIDwgMCkgcmV0dXJuIC0xO1xuICBlbHNlIHJldHVybiAwO1xufVxuXG4vLyBTcGVjaWZpYyBmdW5jdGlvbiBmcm9tIFVuaXR5IC8gb2ZNYXRoLCBub3Qgc3VyZSBpdHMgbmVlZGVkP1xuLy8gZnVuY3Rpb24gbGVycFdyYXAgKGEsIGIsIHQsIG1pbiwgbWF4KSB7XG4vLyAgIHJldHVybiB3cmFwKGEgKyB3cmFwKGIgLSBhLCBtaW4sIG1heCkgKiB0LCBtaW4sIG1heClcbi8vIH1cblxuZnVuY3Rpb24gcGluZ1BvbmcgKHQsIGxlbmd0aCkge1xuICB0ID0gbW9kKHQsIGxlbmd0aCAqIDIpO1xuICByZXR1cm4gbGVuZ3RoIC0gTWF0aC5hYnModCAtIGxlbmd0aCk7XG59XG5cbmZ1bmN0aW9uIGRhbXAgKGEsIGIsIGxhbWJkYSwgZHQpIHtcbiAgcmV0dXJuIGxlcnAoYSwgYiwgMSAtIE1hdGguZXhwKC1sYW1iZGEgKiBkdCkpO1xufVxuXG5mdW5jdGlvbiBkYW1wQXJyYXkgKGEsIGIsIGxhbWJkYSwgZHQsIG91dCkge1xuICBvdXQgPSBvdXQgfHwgW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkrKykge1xuICAgIG91dFtpXSA9IGRhbXAoYVtpXSwgYltpXSwgbGFtYmRhLCBkdCk7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuZnVuY3Rpb24gbWFwUmFuZ2UgKHZhbHVlLCBpbnB1dE1pbiwgaW5wdXRNYXgsIG91dHB1dE1pbiwgb3V0cHV0TWF4LCBjbGFtcCkge1xuICAvLyBSZWZlcmVuY2U6XG4gIC8vIGh0dHBzOi8vb3BlbmZyYW1ld29ya3MuY2MvZG9jdW1lbnRhdGlvbi9tYXRoL29mTWF0aC9cbiAgaWYgKE1hdGguYWJzKGlucHV0TWluIC0gaW5wdXRNYXgpIDwgRVBTSUxPTikge1xuICAgIHJldHVybiBvdXRwdXRNaW47XG4gIH0gZWxzZSB7XG4gICAgdmFyIG91dFZhbCA9ICgodmFsdWUgLSBpbnB1dE1pbikgLyAoaW5wdXRNYXggLSBpbnB1dE1pbikgKiAob3V0cHV0TWF4IC0gb3V0cHV0TWluKSArIG91dHB1dE1pbik7XG4gICAgaWYgKGNsYW1wKSB7XG4gICAgICBpZiAob3V0cHV0TWF4IDwgb3V0cHV0TWluKSB7XG4gICAgICAgIGlmIChvdXRWYWwgPCBvdXRwdXRNYXgpIG91dFZhbCA9IG91dHB1dE1heDtcbiAgICAgICAgZWxzZSBpZiAob3V0VmFsID4gb3V0cHV0TWluKSBvdXRWYWwgPSBvdXRwdXRNaW47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAob3V0VmFsID4gb3V0cHV0TWF4KSBvdXRWYWwgPSBvdXRwdXRNYXg7XG4gICAgICAgIGVsc2UgaWYgKG91dFZhbCA8IG91dHB1dE1pbikgb3V0VmFsID0gb3V0cHV0TWluO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0VmFsO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtb2Q6IG1vZCxcbiAgZnJhY3Q6IGZyYWN0LFxuICBzaWduOiBzaWduLFxuICBkZWdUb1JhZDogZGVnVG9SYWQsXG4gIHJhZFRvRGVnOiByYWRUb0RlZyxcbiAgd3JhcDogd3JhcCxcbiAgcGluZ1Bvbmc6IHBpbmdQb25nLFxuICBsaW5zcGFjZTogbGluc3BhY2UsXG4gIGxlcnA6IGxlcnAsXG4gIGxlcnBBcnJheTogbGVycEFycmF5LFxuICBpbnZlcnNlTGVycDogaW52ZXJzZUxlcnAsXG4gIGxlcnBGcmFtZXM6IGxlcnBGcmFtZXMsXG4gIGNsYW1wOiBjbGFtcCxcbiAgY2xhbXAwMTogY2xhbXAwMSxcbiAgc21vb3Roc3RlcDogc21vb3Roc3RlcCxcbiAgZGFtcDogZGFtcCxcbiAgZGFtcEFycmF5OiBkYW1wQXJyYXksXG4gIG1hcFJhbmdlOiBtYXBSYW5nZSxcbiAgZXhwYW5kMkQ6IGV4cGFuZFZlY3RvcigyKSxcbiAgZXhwYW5kM0Q6IGV4cGFuZFZlY3RvcigzKSxcbiAgZXhwYW5kNEQ6IGV4cGFuZFZlY3Rvcig0KVxufTtcbiIsInZhciBzZWVkUmFuZG9tID0gcmVxdWlyZSgnc2VlZC1yYW5kb20nKTtcbnZhciBTaW1wbGV4Tm9pc2UgPSByZXF1aXJlKCdzaW1wbGV4LW5vaXNlJyk7XG52YXIgZGVmaW5lZCA9IHJlcXVpcmUoJ2RlZmluZWQnKTtcblxuZnVuY3Rpb24gY3JlYXRlUmFuZG9tIChkZWZhdWx0U2VlZCkge1xuICBkZWZhdWx0U2VlZCA9IGRlZmluZWQoZGVmYXVsdFNlZWQsIG51bGwpO1xuICB2YXIgZGVmYXVsdFJhbmRvbSA9IE1hdGgucmFuZG9tO1xuICB2YXIgY3VycmVudFNlZWQ7XG4gIHZhciBjdXJyZW50UmFuZG9tO1xuICB2YXIgbm9pc2VHZW5lcmF0b3I7XG4gIHZhciBfbmV4dEdhdXNzaWFuID0gbnVsbDtcbiAgdmFyIF9oYXNOZXh0R2F1c3NpYW4gPSBmYWxzZTtcblxuICBzZXRTZWVkKGRlZmF1bHRTZWVkKTtcblxuICByZXR1cm4ge1xuICAgIHZhbHVlOiB2YWx1ZSxcbiAgICBjcmVhdGVSYW5kb206IGZ1bmN0aW9uIChkZWZhdWx0U2VlZCkge1xuICAgICAgcmV0dXJuIGNyZWF0ZVJhbmRvbShkZWZhdWx0U2VlZCk7XG4gICAgfSxcbiAgICBzZXRTZWVkOiBzZXRTZWVkLFxuICAgIGdldFNlZWQ6IGdldFNlZWQsXG4gICAgZ2V0UmFuZG9tU2VlZDogZ2V0UmFuZG9tU2VlZCxcbiAgICB2YWx1ZU5vblplcm86IHZhbHVlTm9uWmVybyxcbiAgICBwZXJtdXRlTm9pc2U6IHBlcm11dGVOb2lzZSxcbiAgICBub2lzZTFEOiBub2lzZTFELFxuICAgIG5vaXNlMkQ6IG5vaXNlMkQsXG4gICAgbm9pc2UzRDogbm9pc2UzRCxcbiAgICBub2lzZTREOiBub2lzZTRELFxuICAgIHNpZ246IHNpZ24sXG4gICAgYm9vbGVhbjogYm9vbGVhbixcbiAgICBjaGFuY2U6IGNoYW5jZSxcbiAgICByYW5nZTogcmFuZ2UsXG4gICAgcmFuZ2VGbG9vcjogcmFuZ2VGbG9vcixcbiAgICBwaWNrOiBwaWNrLFxuICAgIHNodWZmbGU6IHNodWZmbGUsXG4gICAgb25DaXJjbGU6IG9uQ2lyY2xlLFxuICAgIGluc2lkZUNpcmNsZTogaW5zaWRlQ2lyY2xlLFxuICAgIG9uU3BoZXJlOiBvblNwaGVyZSxcbiAgICBpbnNpZGVTcGhlcmU6IGluc2lkZVNwaGVyZSxcbiAgICBxdWF0ZXJuaW9uOiBxdWF0ZXJuaW9uLFxuICAgIHdlaWdodGVkOiB3ZWlnaHRlZCxcbiAgICB3ZWlnaHRlZFNldDogd2VpZ2h0ZWRTZXQsXG4gICAgd2VpZ2h0ZWRTZXRJbmRleDogd2VpZ2h0ZWRTZXRJbmRleCxcbiAgICBnYXVzc2lhbjogZ2F1c3NpYW5cbiAgfTtcblxuICBmdW5jdGlvbiBzZXRTZWVkIChzZWVkLCBvcHQpIHtcbiAgICBpZiAodHlwZW9mIHNlZWQgPT09ICdudW1iZXInIHx8IHR5cGVvZiBzZWVkID09PSAnc3RyaW5nJykge1xuICAgICAgY3VycmVudFNlZWQgPSBzZWVkO1xuICAgICAgY3VycmVudFJhbmRvbSA9IHNlZWRSYW5kb20oY3VycmVudFNlZWQsIG9wdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnRTZWVkID0gdW5kZWZpbmVkO1xuICAgICAgY3VycmVudFJhbmRvbSA9IGRlZmF1bHRSYW5kb207XG4gICAgfVxuICAgIG5vaXNlR2VuZXJhdG9yID0gY3JlYXRlTm9pc2UoKTtcbiAgICBfbmV4dEdhdXNzaWFuID0gbnVsbDtcbiAgICBfaGFzTmV4dEdhdXNzaWFuID0gZmFsc2U7XG4gIH1cblxuICBmdW5jdGlvbiB2YWx1ZSAoKSB7XG4gICAgcmV0dXJuIGN1cnJlbnRSYW5kb20oKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHZhbHVlTm9uWmVybyAoKSB7XG4gICAgdmFyIHUgPSAwO1xuICAgIHdoaWxlICh1ID09PSAwKSB1ID0gdmFsdWUoKTtcbiAgICByZXR1cm4gdTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFNlZWQgKCkge1xuICAgIHJldHVybiBjdXJyZW50U2VlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGdldFJhbmRvbVNlZWQgKCkge1xuICAgIHZhciBzZWVkID0gU3RyaW5nKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMDAwMDApKTtcbiAgICByZXR1cm4gc2VlZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNyZWF0ZU5vaXNlICgpIHtcbiAgICByZXR1cm4gbmV3IFNpbXBsZXhOb2lzZShjdXJyZW50UmFuZG9tKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHBlcm11dGVOb2lzZSAoKSB7XG4gICAgbm9pc2VHZW5lcmF0b3IgPSBjcmVhdGVOb2lzZSgpO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9pc2UxRCAoeCwgZnJlcXVlbmN5LCBhbXBsaXR1ZGUpIHtcbiAgICBpZiAoIWlzRmluaXRlKHgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd4IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGZyZXF1ZW5jeSA9IGRlZmluZWQoZnJlcXVlbmN5LCAxKTtcbiAgICBhbXBsaXR1ZGUgPSBkZWZpbmVkKGFtcGxpdHVkZSwgMSk7XG4gICAgcmV0dXJuIGFtcGxpdHVkZSAqIG5vaXNlR2VuZXJhdG9yLm5vaXNlMkQoeCAqIGZyZXF1ZW5jeSwgMCk7XG4gIH1cblxuICBmdW5jdGlvbiBub2lzZTJEICh4LCB5LCBmcmVxdWVuY3ksIGFtcGxpdHVkZSkge1xuICAgIGlmICghaXNGaW5pdGUoeCkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ggY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh5KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneSBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBmcmVxdWVuY3kgPSBkZWZpbmVkKGZyZXF1ZW5jeSwgMSk7XG4gICAgYW1wbGl0dWRlID0gZGVmaW5lZChhbXBsaXR1ZGUsIDEpO1xuICAgIHJldHVybiBhbXBsaXR1ZGUgKiBub2lzZUdlbmVyYXRvci5ub2lzZTJEKHggKiBmcmVxdWVuY3ksIHkgKiBmcmVxdWVuY3kpO1xuICB9XG5cbiAgZnVuY3Rpb24gbm9pc2UzRCAoeCwgeSwgeiwgZnJlcXVlbmN5LCBhbXBsaXR1ZGUpIHtcbiAgICBpZiAoIWlzRmluaXRlKHgpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd4IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUoeSkpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3kgY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh6KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneiBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBmcmVxdWVuY3kgPSBkZWZpbmVkKGZyZXF1ZW5jeSwgMSk7XG4gICAgYW1wbGl0dWRlID0gZGVmaW5lZChhbXBsaXR1ZGUsIDEpO1xuICAgIHJldHVybiBhbXBsaXR1ZGUgKiBub2lzZUdlbmVyYXRvci5ub2lzZTNEKFxuICAgICAgeCAqIGZyZXF1ZW5jeSxcbiAgICAgIHkgKiBmcmVxdWVuY3ksXG4gICAgICB6ICogZnJlcXVlbmN5XG4gICAgKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG5vaXNlNEQgKHgsIHksIHosIHcsIGZyZXF1ZW5jeSwgYW1wbGl0dWRlKSB7XG4gICAgaWYgKCFpc0Zpbml0ZSh4KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigneCBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBpZiAoIWlzRmluaXRlKHkpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCd5IGNvbXBvbmVudCBmb3Igbm9pc2UoKSBtdXN0IGJlIGZpbml0ZScpO1xuICAgIGlmICghaXNGaW5pdGUoeikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ogY29tcG9uZW50IGZvciBub2lzZSgpIG11c3QgYmUgZmluaXRlJyk7XG4gICAgaWYgKCFpc0Zpbml0ZSh3KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigndyBjb21wb25lbnQgZm9yIG5vaXNlKCkgbXVzdCBiZSBmaW5pdGUnKTtcbiAgICBmcmVxdWVuY3kgPSBkZWZpbmVkKGZyZXF1ZW5jeSwgMSk7XG4gICAgYW1wbGl0dWRlID0gZGVmaW5lZChhbXBsaXR1ZGUsIDEpO1xuICAgIHJldHVybiBhbXBsaXR1ZGUgKiBub2lzZUdlbmVyYXRvci5ub2lzZTREKFxuICAgICAgeCAqIGZyZXF1ZW5jeSxcbiAgICAgIHkgKiBmcmVxdWVuY3ksXG4gICAgICB6ICogZnJlcXVlbmN5LFxuICAgICAgdyAqIGZyZXF1ZW5jeVxuICAgICk7XG4gIH1cblxuICBmdW5jdGlvbiBzaWduICgpIHtcbiAgICByZXR1cm4gYm9vbGVhbigpID8gMSA6IC0xO1xuICB9XG5cbiAgZnVuY3Rpb24gYm9vbGVhbiAoKSB7XG4gICAgcmV0dXJuIHZhbHVlKCkgPiAwLjU7XG4gIH1cblxuICBmdW5jdGlvbiBjaGFuY2UgKG4pIHtcbiAgICBuID0gZGVmaW5lZChuLCAwLjUpO1xuICAgIGlmICh0eXBlb2YgbiAhPT0gJ251bWJlcicpIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4cGVjdGVkIG4gdG8gYmUgYSBudW1iZXInKTtcbiAgICByZXR1cm4gdmFsdWUoKSA8IG47XG4gIH1cblxuICBmdW5jdGlvbiByYW5nZSAobWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtaW4gIT09ICdudW1iZXInIHx8IHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhbGwgYXJndW1lbnRzIHRvIGJlIG51bWJlcnMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWUoKSAqIChtYXggLSBtaW4pICsgbWluO1xuICB9XG5cbiAgZnVuY3Rpb24gcmFuZ2VGbG9vciAobWluLCBtYXgpIHtcbiAgICBpZiAobWF4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIG1heCA9IG1pbjtcbiAgICAgIG1pbiA9IDA7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtaW4gIT09ICdudW1iZXInIHx8IHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhbGwgYXJndW1lbnRzIHRvIGJlIG51bWJlcnMnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gTWF0aC5mbG9vcihyYW5nZShtaW4sIG1heCkpO1xuICB9XG5cbiAgZnVuY3Rpb24gcGljayAoYXJyYXkpIHtcbiAgICBpZiAoYXJyYXkubGVuZ3RoID09PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiBhcnJheVtyYW5nZUZsb29yKDAsIGFycmF5Lmxlbmd0aCldO1xuICB9XG5cbiAgZnVuY3Rpb24gc2h1ZmZsZSAoYXJyKSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGFycikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIEFycmF5LCBnb3QgJyArIHR5cGVvZiBhcnIpO1xuICAgIH1cblxuICAgIHZhciByYW5kO1xuICAgIHZhciB0bXA7XG4gICAgdmFyIGxlbiA9IGFyci5sZW5ndGg7XG4gICAgdmFyIHJldCA9IGFyci5zbGljZSgpO1xuICAgIHdoaWxlIChsZW4pIHtcbiAgICAgIHJhbmQgPSBNYXRoLmZsb29yKHZhbHVlKCkgKiBsZW4tLSk7XG4gICAgICB0bXAgPSByZXRbbGVuXTtcbiAgICAgIHJldFtsZW5dID0gcmV0W3JhbmRdO1xuICAgICAgcmV0W3JhbmRdID0gdG1wO1xuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgZnVuY3Rpb24gb25DaXJjbGUgKHJhZGl1cywgb3V0KSB7XG4gICAgcmFkaXVzID0gZGVmaW5lZChyYWRpdXMsIDEpO1xuICAgIG91dCA9IG91dCB8fCBbXTtcbiAgICB2YXIgdGhldGEgPSB2YWx1ZSgpICogMi4wICogTWF0aC5QSTtcbiAgICBvdXRbMF0gPSByYWRpdXMgKiBNYXRoLmNvcyh0aGV0YSk7XG4gICAgb3V0WzFdID0gcmFkaXVzICogTWF0aC5zaW4odGhldGEpO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNpZGVDaXJjbGUgKHJhZGl1cywgb3V0KSB7XG4gICAgcmFkaXVzID0gZGVmaW5lZChyYWRpdXMsIDEpO1xuICAgIG91dCA9IG91dCB8fCBbXTtcbiAgICBvbkNpcmNsZSgxLCBvdXQpO1xuICAgIHZhciByID0gcmFkaXVzICogTWF0aC5zcXJ0KHZhbHVlKCkpO1xuICAgIG91dFswXSAqPSByO1xuICAgIG91dFsxXSAqPSByO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmdW5jdGlvbiBvblNwaGVyZSAocmFkaXVzLCBvdXQpIHtcbiAgICByYWRpdXMgPSBkZWZpbmVkKHJhZGl1cywgMSk7XG4gICAgb3V0ID0gb3V0IHx8IFtdO1xuICAgIHZhciB1ID0gdmFsdWUoKSAqIE1hdGguUEkgKiAyO1xuICAgIHZhciB2ID0gdmFsdWUoKSAqIDIgLSAxO1xuICAgIHZhciBwaGkgPSB1O1xuICAgIHZhciB0aGV0YSA9IE1hdGguYWNvcyh2KTtcbiAgICBvdXRbMF0gPSByYWRpdXMgKiBNYXRoLnNpbih0aGV0YSkgKiBNYXRoLmNvcyhwaGkpO1xuICAgIG91dFsxXSA9IHJhZGl1cyAqIE1hdGguc2luKHRoZXRhKSAqIE1hdGguc2luKHBoaSk7XG4gICAgb3V0WzJdID0gcmFkaXVzICogTWF0aC5jb3ModGhldGEpO1xuICAgIHJldHVybiBvdXQ7XG4gIH1cblxuICBmdW5jdGlvbiBpbnNpZGVTcGhlcmUgKHJhZGl1cywgb3V0KSB7XG4gICAgcmFkaXVzID0gZGVmaW5lZChyYWRpdXMsIDEpO1xuICAgIG91dCA9IG91dCB8fCBbXTtcbiAgICB2YXIgdSA9IHZhbHVlKCkgKiBNYXRoLlBJICogMjtcbiAgICB2YXIgdiA9IHZhbHVlKCkgKiAyIC0gMTtcbiAgICB2YXIgayA9IHZhbHVlKCk7XG5cbiAgICB2YXIgcGhpID0gdTtcbiAgICB2YXIgdGhldGEgPSBNYXRoLmFjb3Modik7XG4gICAgdmFyIHIgPSByYWRpdXMgKiBNYXRoLmNicnQoayk7XG4gICAgb3V0WzBdID0gciAqIE1hdGguc2luKHRoZXRhKSAqIE1hdGguY29zKHBoaSk7XG4gICAgb3V0WzFdID0gciAqIE1hdGguc2luKHRoZXRhKSAqIE1hdGguc2luKHBoaSk7XG4gICAgb3V0WzJdID0gciAqIE1hdGguY29zKHRoZXRhKTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgZnVuY3Rpb24gcXVhdGVybmlvbiAob3V0KSB7XG4gICAgb3V0ID0gb3V0IHx8IFtdO1xuICAgIHZhciB1MSA9IHZhbHVlKCk7XG4gICAgdmFyIHUyID0gdmFsdWUoKTtcbiAgICB2YXIgdTMgPSB2YWx1ZSgpO1xuXG4gICAgdmFyIHNxMSA9IE1hdGguc3FydCgxIC0gdTEpO1xuICAgIHZhciBzcTIgPSBNYXRoLnNxcnQodTEpO1xuXG4gICAgdmFyIHRoZXRhMSA9IE1hdGguUEkgKiAyICogdTI7XG4gICAgdmFyIHRoZXRhMiA9IE1hdGguUEkgKiAyICogdTM7XG5cbiAgICB2YXIgeCA9IE1hdGguc2luKHRoZXRhMSkgKiBzcTE7XG4gICAgdmFyIHkgPSBNYXRoLmNvcyh0aGV0YTEpICogc3ExO1xuICAgIHZhciB6ID0gTWF0aC5zaW4odGhldGEyKSAqIHNxMjtcbiAgICB2YXIgdyA9IE1hdGguY29zKHRoZXRhMikgKiBzcTI7XG4gICAgb3V0WzBdID0geDtcbiAgICBvdXRbMV0gPSB5O1xuICAgIG91dFsyXSA9IHo7XG4gICAgb3V0WzNdID0gdztcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgZnVuY3Rpb24gd2VpZ2h0ZWRTZXQgKHNldCkge1xuICAgIHNldCA9IHNldCB8fCBbXTtcbiAgICBpZiAoc2V0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHNldFt3ZWlnaHRlZFNldEluZGV4KHNldCldLnZhbHVlO1xuICB9XG5cbiAgZnVuY3Rpb24gd2VpZ2h0ZWRTZXRJbmRleCAoc2V0KSB7XG4gICAgc2V0ID0gc2V0IHx8IFtdO1xuICAgIGlmIChzZXQubGVuZ3RoID09PSAwKSByZXR1cm4gLTE7XG4gICAgcmV0dXJuIHdlaWdodGVkKHNldC5tYXAoZnVuY3Rpb24gKHMpIHtcbiAgICAgIHJldHVybiBzLndlaWdodDtcbiAgICB9KSk7XG4gIH1cblxuICBmdW5jdGlvbiB3ZWlnaHRlZCAod2VpZ2h0cykge1xuICAgIHdlaWdodHMgPSB3ZWlnaHRzIHx8IFtdO1xuICAgIGlmICh3ZWlnaHRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xO1xuICAgIHZhciB0b3RhbFdlaWdodCA9IDA7XG4gICAgdmFyIGk7XG5cbiAgICBmb3IgKGkgPSAwOyBpIDwgd2VpZ2h0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdG90YWxXZWlnaHQgKz0gd2VpZ2h0c1tpXTtcbiAgICB9XG5cbiAgICBpZiAodG90YWxXZWlnaHQgPD0gMCkgdGhyb3cgbmV3IEVycm9yKCdXZWlnaHRzIG11c3Qgc3VtIHRvID4gMCcpO1xuXG4gICAgdmFyIHJhbmRvbSA9IHZhbHVlKCkgKiB0b3RhbFdlaWdodDtcbiAgICBmb3IgKGkgPSAwOyBpIDwgd2VpZ2h0cy5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJhbmRvbSA8IHdlaWdodHNbaV0pIHtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgICB9XG4gICAgICByYW5kb20gLT0gd2VpZ2h0c1tpXTtcbiAgICB9XG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBmdW5jdGlvbiBnYXVzc2lhbiAobWVhbiwgc3RhbmRhcmREZXJpdmF0aW9uKSB7XG4gICAgbWVhbiA9IGRlZmluZWQobWVhbiwgMCk7XG4gICAgc3RhbmRhcmREZXJpdmF0aW9uID0gZGVmaW5lZChzdGFuZGFyZERlcml2YXRpb24sIDEpO1xuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29wZW5qZGstbWlycm9yL2pkazd1LWpkay9ibG9iL2Y0ZDgwOTU3ZTg5YTE5YTI5YmI5Zjk4MDdkMmEyODM1MWVkN2Y3ZGYvc3JjL3NoYXJlL2NsYXNzZXMvamF2YS91dGlsL1JhbmRvbS5qYXZhI0w0OTZcbiAgICBpZiAoX2hhc05leHRHYXVzc2lhbikge1xuICAgICAgX2hhc05leHRHYXVzc2lhbiA9IGZhbHNlO1xuICAgICAgdmFyIHJlc3VsdCA9IF9uZXh0R2F1c3NpYW47XG4gICAgICBfbmV4dEdhdXNzaWFuID0gbnVsbDtcbiAgICAgIHJldHVybiBtZWFuICsgc3RhbmRhcmREZXJpdmF0aW9uICogcmVzdWx0O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdjEgPSAwO1xuICAgICAgdmFyIHYyID0gMDtcbiAgICAgIHZhciBzID0gMDtcbiAgICAgIGRvIHtcbiAgICAgICAgdjEgPSB2YWx1ZSgpICogMiAtIDE7IC8vIGJldHdlZW4gLTEgYW5kIDFcbiAgICAgICAgdjIgPSB2YWx1ZSgpICogMiAtIDE7IC8vIGJldHdlZW4gLTEgYW5kIDFcbiAgICAgICAgcyA9IHYxICogdjEgKyB2MiAqIHYyO1xuICAgICAgfSB3aGlsZSAocyA+PSAxIHx8IHMgPT09IDApO1xuICAgICAgdmFyIG11bHRpcGxpZXIgPSBNYXRoLnNxcnQoLTIgKiBNYXRoLmxvZyhzKSAvIHMpO1xuICAgICAgX25leHRHYXVzc2lhbiA9ICh2MiAqIG11bHRpcGxpZXIpO1xuICAgICAgX2hhc05leHRHYXVzc2lhbiA9IHRydWU7XG4gICAgICByZXR1cm4gbWVhbiArIHN0YW5kYXJkRGVyaXZhdGlvbiAqICh2MSAqIG11bHRpcGxpZXIpO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNyZWF0ZVJhbmRvbSgpO1xuIiwiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID1cbiAgZ2xvYmFsLnBlcmZvcm1hbmNlICYmXG4gIGdsb2JhbC5wZXJmb3JtYW5jZS5ub3cgPyBmdW5jdGlvbiBub3coKSB7XG4gICAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpXG4gIH0gOiBEYXRlLm5vdyB8fCBmdW5jdGlvbiBub3coKSB7XG4gICAgcmV0dXJuICtuZXcgRGF0ZVxuICB9XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGlzUHJvbWlzZTtcblxuZnVuY3Rpb24gaXNQcm9taXNlKG9iaikge1xuICByZXR1cm4gISFvYmogJiYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpICYmIHR5cGVvZiBvYmoudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gaXNOb2RlXG5cbmZ1bmN0aW9uIGlzTm9kZSAodmFsKSB7XG4gIHJldHVybiAoIXZhbCB8fCB0eXBlb2YgdmFsICE9PSAnb2JqZWN0JylcbiAgICA/IGZhbHNlXG4gICAgOiAodHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHdpbmRvdy5Ob2RlID09PSAnb2JqZWN0JylcbiAgICAgID8gKHZhbCBpbnN0YW5jZW9mIHdpbmRvdy5Ob2RlKVxuICAgICAgOiAodHlwZW9mIHZhbC5ub2RlVHlwZSA9PT0gJ251bWJlcicpICYmXG4gICAgICAgICh0eXBlb2YgdmFsLm5vZGVOYW1lID09PSAnc3RyaW5nJylcbn1cbiIsIi8vIFRPRE86IFdlIGNhbiByZW1vdmUgYSBodWdlIGNodW5rIG9mIGJ1bmRsZSBzaXplIGJ5IHVzaW5nIGEgc21hbGxlclxuLy8gdXRpbGl0eSBtb2R1bGUgZm9yIGNvbnZlcnRpbmcgdW5pdHMuXG5pbXBvcnQgaXNET00gZnJvbSAnaXMtZG9tJztcblxuZXhwb3J0IGZ1bmN0aW9uIGdldENsaWVudEFQSSAoKSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3dbJ2NhbnZhcy1za2V0Y2gtY2xpJ107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWZpbmVkICgpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJndW1lbnRzW2ldICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBhcmd1bWVudHNbaV07XG4gICAgfVxuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0Jyb3dzZXIgKCkge1xuICByZXR1cm4gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzV2ViR0xDb250ZXh0IChjdHgpIHtcbiAgcmV0dXJuIHR5cGVvZiBjdHguY2xlYXIgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGN0eC5jbGVhckNvbG9yID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjdHguYnVmZmVyRGF0YSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ2FudmFzIChlbGVtZW50KSB7XG4gIHJldHVybiBpc0RPTShlbGVtZW50KSAmJiAvY2FudmFzL2kudGVzdChlbGVtZW50Lm5vZGVOYW1lKSAmJiB0eXBlb2YgZWxlbWVudC5nZXRDb250ZXh0ID09PSAnZnVuY3Rpb24nO1xufVxuIiwiLyohXG4gKiByZXBlYXQtc3RyaW5nIDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9yZXBlYXQtc3RyaW5nPlxuICpcbiAqIENvcHlyaWdodCAoYykgMjAxNC0yMDE1LCBKb24gU2NobGlua2VydC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbi8qKlxuICogUmVzdWx0cyBjYWNoZVxuICovXG5cbnZhciByZXMgPSAnJztcbnZhciBjYWNoZTtcblxuLyoqXG4gKiBFeHBvc2UgYHJlcGVhdGBcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcGVhdDtcblxuLyoqXG4gKiBSZXBlYXQgdGhlIGdpdmVuIGBzdHJpbmdgIHRoZSBzcGVjaWZpZWQgYG51bWJlcmBcbiAqIG9mIHRpbWVzLlxuICpcbiAqICoqRXhhbXBsZToqKlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVwZWF0ID0gcmVxdWlyZSgncmVwZWF0LXN0cmluZycpO1xuICogcmVwZWF0KCdBJywgNSk7XG4gKiAvLz0+IEFBQUFBXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYHN0cmluZ2AgVGhlIHN0cmluZyB0byByZXBlYXRcbiAqIEBwYXJhbSB7TnVtYmVyfSBgbnVtYmVyYCBUaGUgbnVtYmVyIG9mIHRpbWVzIHRvIHJlcGVhdCB0aGUgc3RyaW5nXG4gKiBAcmV0dXJuIHtTdHJpbmd9IFJlcGVhdGVkIHN0cmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiByZXBlYXQoc3RyLCBudW0pIHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZXhwZWN0ZWQgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIC8vIGNvdmVyIGNvbW1vbiwgcXVpY2sgdXNlIGNhc2VzXG4gIGlmIChudW0gPT09IDEpIHJldHVybiBzdHI7XG4gIGlmIChudW0gPT09IDIpIHJldHVybiBzdHIgKyBzdHI7XG5cbiAgdmFyIG1heCA9IHN0ci5sZW5ndGggKiBudW07XG4gIGlmIChjYWNoZSAhPT0gc3RyIHx8IHR5cGVvZiBjYWNoZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBjYWNoZSA9IHN0cjtcbiAgICByZXMgPSAnJztcbiAgfSBlbHNlIGlmIChyZXMubGVuZ3RoID49IG1heCkge1xuICAgIHJldHVybiByZXMuc3Vic3RyKDAsIG1heCk7XG4gIH1cblxuICB3aGlsZSAobWF4ID4gcmVzLmxlbmd0aCAmJiBudW0gPiAxKSB7XG4gICAgaWYgKG51bSAmIDEpIHtcbiAgICAgIHJlcyArPSBzdHI7XG4gICAgfVxuXG4gICAgbnVtID4+PSAxO1xuICAgIHN0ciArPSBzdHI7XG4gIH1cblxuICByZXMgKz0gc3RyO1xuICByZXMgPSByZXMuc3Vic3RyKDAsIG1heCk7XG4gIHJldHVybiByZXM7XG59XG4iLCJleHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2YgT2JqZWN0LmtleXMgPT09ICdmdW5jdGlvbidcbiAgPyBPYmplY3Qua2V5cyA6IHNoaW07XG5cbmV4cG9ydHMuc2hpbSA9IHNoaW07XG5mdW5jdGlvbiBzaGltIChvYmopIHtcbiAgdmFyIGtleXMgPSBbXTtcbiAgZm9yICh2YXIga2V5IGluIG9iaikga2V5cy5wdXNoKGtleSk7XG4gIHJldHVybiBrZXlzO1xufVxuIiwidmFyIHN1cHBvcnRzQXJndW1lbnRzQ2xhc3MgPSAoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudHMpXG59KSgpID09ICdbb2JqZWN0IEFyZ3VtZW50c10nO1xuXG5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMgPSBzdXBwb3J0c0FyZ3VtZW50c0NsYXNzID8gc3VwcG9ydGVkIDogdW5zdXBwb3J0ZWQ7XG5cbmV4cG9ydHMuc3VwcG9ydGVkID0gc3VwcG9ydGVkO1xuZnVuY3Rpb24gc3VwcG9ydGVkKG9iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT0gJ1tvYmplY3QgQXJndW1lbnRzXSc7XG59O1xuXG5leHBvcnRzLnVuc3VwcG9ydGVkID0gdW5zdXBwb3J0ZWQ7XG5mdW5jdGlvbiB1bnN1cHBvcnRlZChvYmplY3Qpe1xuICByZXR1cm4gb2JqZWN0ICYmXG4gICAgdHlwZW9mIG9iamVjdCA9PSAnb2JqZWN0JyAmJlxuICAgIHR5cGVvZiBvYmplY3QubGVuZ3RoID09ICdudW1iZXInICYmXG4gICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgJ2NhbGxlZScpICYmXG4gICAgIU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChvYmplY3QsICdjYWxsZWUnKSB8fFxuICAgIGZhbHNlO1xufTtcbiIsInZhciBwU2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgb2JqZWN0S2V5cyA9IHJlcXVpcmUoJy4vbGliL2tleXMuanMnKTtcbnZhciBpc0FyZ3VtZW50cyA9IHJlcXVpcmUoJy4vbGliL2lzX2FyZ3VtZW50cy5qcycpO1xuXG52YXIgZGVlcEVxdWFsID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYWN0dWFsLCBleHBlY3RlZCwgb3B0cykge1xuICBpZiAoIW9wdHMpIG9wdHMgPSB7fTtcbiAgLy8gNy4xLiBBbGwgaWRlbnRpY2FsIHZhbHVlcyBhcmUgZXF1aXZhbGVudCwgYXMgZGV0ZXJtaW5lZCBieSA9PT0uXG4gIGlmIChhY3R1YWwgPT09IGV4cGVjdGVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG5cbiAgfSBlbHNlIGlmIChhY3R1YWwgaW5zdGFuY2VvZiBEYXRlICYmIGV4cGVjdGVkIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgIHJldHVybiBhY3R1YWwuZ2V0VGltZSgpID09PSBleHBlY3RlZC5nZXRUaW1lKCk7XG5cbiAgLy8gNy4zLiBPdGhlciBwYWlycyB0aGF0IGRvIG5vdCBib3RoIHBhc3MgdHlwZW9mIHZhbHVlID09ICdvYmplY3QnLFxuICAvLyBlcXVpdmFsZW5jZSBpcyBkZXRlcm1pbmVkIGJ5ID09LlxuICB9IGVsc2UgaWYgKCFhY3R1YWwgfHwgIWV4cGVjdGVkIHx8IHR5cGVvZiBhY3R1YWwgIT0gJ29iamVjdCcgJiYgdHlwZW9mIGV4cGVjdGVkICE9ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIG9wdHMuc3RyaWN0ID8gYWN0dWFsID09PSBleHBlY3RlZCA6IGFjdHVhbCA9PSBleHBlY3RlZDtcblxuICAvLyA3LjQuIEZvciBhbGwgb3RoZXIgT2JqZWN0IHBhaXJzLCBpbmNsdWRpbmcgQXJyYXkgb2JqZWN0cywgZXF1aXZhbGVuY2UgaXNcbiAgLy8gZGV0ZXJtaW5lZCBieSBoYXZpbmcgdGhlIHNhbWUgbnVtYmVyIG9mIG93bmVkIHByb3BlcnRpZXMgKGFzIHZlcmlmaWVkXG4gIC8vIHdpdGggT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKSwgdGhlIHNhbWUgc2V0IG9mIGtleXNcbiAgLy8gKGFsdGhvdWdoIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBvcmRlciksIGVxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeVxuICAvLyBjb3JyZXNwb25kaW5nIGtleSwgYW5kIGFuIGlkZW50aWNhbCAncHJvdG90eXBlJyBwcm9wZXJ0eS4gTm90ZTogdGhpc1xuICAvLyBhY2NvdW50cyBmb3IgYm90aCBuYW1lZCBhbmQgaW5kZXhlZCBwcm9wZXJ0aWVzIG9uIEFycmF5cy5cbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gb2JqRXF1aXYoYWN0dWFsLCBleHBlY3RlZCwgb3B0cyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNVbmRlZmluZWRPck51bGwodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyICh4KSB7XG4gIGlmICgheCB8fCB0eXBlb2YgeCAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHgubGVuZ3RoICE9PSAnbnVtYmVyJykgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIHguY29weSAhPT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgeC5zbGljZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBpZiAoeC5sZW5ndGggPiAwICYmIHR5cGVvZiB4WzBdICE9PSAnbnVtYmVyJykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gb2JqRXF1aXYoYSwgYiwgb3B0cykge1xuICB2YXIgaSwga2V5O1xuICBpZiAoaXNVbmRlZmluZWRPck51bGwoYSkgfHwgaXNVbmRlZmluZWRPck51bGwoYikpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvLyBhbiBpZGVudGljYWwgJ3Byb3RvdHlwZScgcHJvcGVydHkuXG4gIGlmIChhLnByb3RvdHlwZSAhPT0gYi5wcm90b3R5cGUpIHJldHVybiBmYWxzZTtcbiAgLy9+fn5JJ3ZlIG1hbmFnZWQgdG8gYnJlYWsgT2JqZWN0LmtleXMgdGhyb3VnaCBzY3Jld3kgYXJndW1lbnRzIHBhc3NpbmcuXG4gIC8vICAgQ29udmVydGluZyB0byBhcnJheSBzb2x2ZXMgdGhlIHByb2JsZW0uXG4gIGlmIChpc0FyZ3VtZW50cyhhKSkge1xuICAgIGlmICghaXNBcmd1bWVudHMoYikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgYSA9IHBTbGljZS5jYWxsKGEpO1xuICAgIGIgPSBwU2xpY2UuY2FsbChiKTtcbiAgICByZXR1cm4gZGVlcEVxdWFsKGEsIGIsIG9wdHMpO1xuICB9XG4gIGlmIChpc0J1ZmZlcihhKSkge1xuICAgIGlmICghaXNCdWZmZXIoYikpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKGEubGVuZ3RoICE9PSBiLmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICAgIGZvciAoaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYVtpXSAhPT0gYltpXSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICB0cnkge1xuICAgIHZhciBrYSA9IG9iamVjdEtleXMoYSksXG4gICAgICAgIGtiID0gb2JqZWN0S2V5cyhiKTtcbiAgfSBjYXRjaCAoZSkgey8vaGFwcGVucyB3aGVuIG9uZSBpcyBhIHN0cmluZyBsaXRlcmFsIGFuZCB0aGUgb3RoZXIgaXNuJ3RcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgLy8gaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBvd25lZCBwcm9wZXJ0aWVzIChrZXlzIGluY29ycG9yYXRlc1xuICAvLyBoYXNPd25Qcm9wZXJ0eSlcbiAgaWYgKGthLmxlbmd0aCAhPSBrYi5sZW5ndGgpXG4gICAgcmV0dXJuIGZhbHNlO1xuICAvL3RoZSBzYW1lIHNldCBvZiBrZXlzIChhbHRob3VnaCBub3QgbmVjZXNzYXJpbHkgdGhlIHNhbWUgb3JkZXIpLFxuICBrYS5zb3J0KCk7XG4gIGtiLnNvcnQoKTtcbiAgLy9+fn5jaGVhcCBrZXkgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChrYVtpXSAhPSBrYltpXSlcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICAvL2VxdWl2YWxlbnQgdmFsdWVzIGZvciBldmVyeSBjb3JyZXNwb25kaW5nIGtleSwgYW5kXG4gIC8vfn5+cG9zc2libHkgZXhwZW5zaXZlIGRlZXAgdGVzdFxuICBmb3IgKGkgPSBrYS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGtleSA9IGthW2ldO1xuICAgIGlmICghZGVlcEVxdWFsKGFba2V5XSwgYltrZXldLCBvcHRzKSkgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB0eXBlb2YgYSA9PT0gdHlwZW9mIGI7XG59XG4iLCIvKlxuICogRGF0ZSBGb3JtYXQgMS4yLjNcbiAqIChjKSAyMDA3LTIwMDkgU3RldmVuIExldml0aGFuIDxzdGV2ZW5sZXZpdGhhbi5jb20+XG4gKiBNSVQgbGljZW5zZVxuICpcbiAqIEluY2x1ZGVzIGVuaGFuY2VtZW50cyBieSBTY290dCBUcmVuZGEgPHNjb3R0LnRyZW5kYS5uZXQ+XG4gKiBhbmQgS3JpcyBLb3dhbCA8Y2l4YXIuY29tL35rcmlzLmtvd2FsLz5cbiAqXG4gKiBBY2NlcHRzIGEgZGF0ZSwgYSBtYXNrLCBvciBhIGRhdGUgYW5kIGEgbWFzay5cbiAqIFJldHVybnMgYSBmb3JtYXR0ZWQgdmVyc2lvbiBvZiB0aGUgZ2l2ZW4gZGF0ZS5cbiAqIFRoZSBkYXRlIGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGRhdGUvdGltZS5cbiAqIFRoZSBtYXNrIGRlZmF1bHRzIHRvIGRhdGVGb3JtYXQubWFza3MuZGVmYXVsdC5cbiAqL1xuXG4oZnVuY3Rpb24oZ2xvYmFsKSB7XG4gICd1c2Ugc3RyaWN0JztcblxuICB2YXIgZGF0ZUZvcm1hdCA9IChmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0b2tlbiA9IC9kezEsNH18bXsxLDR9fHl5KD86eXkpP3woW0hoTXNUdF0pXFwxP3xbTGxvU1pXTl18XCJbXlwiXSpcInwnW14nXSonL2c7XG4gICAgICB2YXIgdGltZXpvbmUgPSAvXFxiKD86W1BNQ0VBXVtTRFBdVHwoPzpQYWNpZmljfE1vdW50YWlufENlbnRyYWx8RWFzdGVybnxBdGxhbnRpYykgKD86U3RhbmRhcmR8RGF5bGlnaHR8UHJldmFpbGluZykgVGltZXwoPzpHTVR8VVRDKSg/OlstK11cXGR7NH0pPylcXGIvZztcbiAgICAgIHZhciB0aW1lem9uZUNsaXAgPSAvW14tK1xcZEEtWl0vZztcbiAgXG4gICAgICAvLyBSZWdleGVzIGFuZCBzdXBwb3J0aW5nIGZ1bmN0aW9ucyBhcmUgY2FjaGVkIHRocm91Z2ggY2xvc3VyZVxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChkYXRlLCBtYXNrLCB1dGMsIGdtdCkge1xuICBcbiAgICAgICAgLy8gWW91IGNhbid0IHByb3ZpZGUgdXRjIGlmIHlvdSBza2lwIG90aGVyIGFyZ3MgKHVzZSB0aGUgJ1VUQzonIG1hc2sgcHJlZml4KVxuICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMSAmJiBraW5kT2YoZGF0ZSkgPT09ICdzdHJpbmcnICYmICEvXFxkLy50ZXN0KGRhdGUpKSB7XG4gICAgICAgICAgbWFzayA9IGRhdGU7XG4gICAgICAgICAgZGF0ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICBcbiAgICAgICAgZGF0ZSA9IGRhdGUgfHwgbmV3IERhdGU7XG4gIFxuICAgICAgICBpZighKGRhdGUgaW5zdGFuY2VvZiBEYXRlKSkge1xuICAgICAgICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlKTtcbiAgICAgICAgfVxuICBcbiAgICAgICAgaWYgKGlzTmFOKGRhdGUpKSB7XG4gICAgICAgICAgdGhyb3cgVHlwZUVycm9yKCdJbnZhbGlkIGRhdGUnKTtcbiAgICAgICAgfVxuICBcbiAgICAgICAgbWFzayA9IFN0cmluZyhkYXRlRm9ybWF0Lm1hc2tzW21hc2tdIHx8IG1hc2sgfHwgZGF0ZUZvcm1hdC5tYXNrc1snZGVmYXVsdCddKTtcbiAgXG4gICAgICAgIC8vIEFsbG93IHNldHRpbmcgdGhlIHV0Yy9nbXQgYXJndW1lbnQgdmlhIHRoZSBtYXNrXG4gICAgICAgIHZhciBtYXNrU2xpY2UgPSBtYXNrLnNsaWNlKDAsIDQpO1xuICAgICAgICBpZiAobWFza1NsaWNlID09PSAnVVRDOicgfHwgbWFza1NsaWNlID09PSAnR01UOicpIHtcbiAgICAgICAgICBtYXNrID0gbWFzay5zbGljZSg0KTtcbiAgICAgICAgICB1dGMgPSB0cnVlO1xuICAgICAgICAgIGlmIChtYXNrU2xpY2UgPT09ICdHTVQ6Jykge1xuICAgICAgICAgICAgZ210ID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgXG4gICAgICAgIHZhciBfID0gdXRjID8gJ2dldFVUQycgOiAnZ2V0JztcbiAgICAgICAgdmFyIGQgPSBkYXRlW18gKyAnRGF0ZSddKCk7XG4gICAgICAgIHZhciBEID0gZGF0ZVtfICsgJ0RheSddKCk7XG4gICAgICAgIHZhciBtID0gZGF0ZVtfICsgJ01vbnRoJ10oKTtcbiAgICAgICAgdmFyIHkgPSBkYXRlW18gKyAnRnVsbFllYXInXSgpO1xuICAgICAgICB2YXIgSCA9IGRhdGVbXyArICdIb3VycyddKCk7XG4gICAgICAgIHZhciBNID0gZGF0ZVtfICsgJ01pbnV0ZXMnXSgpO1xuICAgICAgICB2YXIgcyA9IGRhdGVbXyArICdTZWNvbmRzJ10oKTtcbiAgICAgICAgdmFyIEwgPSBkYXRlW18gKyAnTWlsbGlzZWNvbmRzJ10oKTtcbiAgICAgICAgdmFyIG8gPSB1dGMgPyAwIDogZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpO1xuICAgICAgICB2YXIgVyA9IGdldFdlZWsoZGF0ZSk7XG4gICAgICAgIHZhciBOID0gZ2V0RGF5T2ZXZWVrKGRhdGUpO1xuICAgICAgICB2YXIgZmxhZ3MgPSB7XG4gICAgICAgICAgZDogICAgZCxcbiAgICAgICAgICBkZDogICBwYWQoZCksXG4gICAgICAgICAgZGRkOiAgZGF0ZUZvcm1hdC5pMThuLmRheU5hbWVzW0RdLFxuICAgICAgICAgIGRkZGQ6IGRhdGVGb3JtYXQuaTE4bi5kYXlOYW1lc1tEICsgN10sXG4gICAgICAgICAgbTogICAgbSArIDEsXG4gICAgICAgICAgbW06ICAgcGFkKG0gKyAxKSxcbiAgICAgICAgICBtbW06ICBkYXRlRm9ybWF0LmkxOG4ubW9udGhOYW1lc1ttXSxcbiAgICAgICAgICBtbW1tOiBkYXRlRm9ybWF0LmkxOG4ubW9udGhOYW1lc1ttICsgMTJdLFxuICAgICAgICAgIHl5OiAgIFN0cmluZyh5KS5zbGljZSgyKSxcbiAgICAgICAgICB5eXl5OiB5LFxuICAgICAgICAgIGg6ICAgIEggJSAxMiB8fCAxMixcbiAgICAgICAgICBoaDogICBwYWQoSCAlIDEyIHx8IDEyKSxcbiAgICAgICAgICBIOiAgICBILFxuICAgICAgICAgIEhIOiAgIHBhZChIKSxcbiAgICAgICAgICBNOiAgICBNLFxuICAgICAgICAgIE1NOiAgIHBhZChNKSxcbiAgICAgICAgICBzOiAgICBzLFxuICAgICAgICAgIHNzOiAgIHBhZChzKSxcbiAgICAgICAgICBsOiAgICBwYWQoTCwgMyksXG4gICAgICAgICAgTDogICAgcGFkKE1hdGgucm91bmQoTCAvIDEwKSksXG4gICAgICAgICAgdDogICAgSCA8IDEyID8gZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1swXSA6IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbMV0sXG4gICAgICAgICAgdHQ6ICAgSCA8IDEyID8gZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1syXSA6IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbM10sXG4gICAgICAgICAgVDogICAgSCA8IDEyID8gZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1s0XSA6IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbNV0sXG4gICAgICAgICAgVFQ6ICAgSCA8IDEyID8gZGF0ZUZvcm1hdC5pMThuLnRpbWVOYW1lc1s2XSA6IGRhdGVGb3JtYXQuaTE4bi50aW1lTmFtZXNbN10sXG4gICAgICAgICAgWjogICAgZ210ID8gJ0dNVCcgOiB1dGMgPyAnVVRDJyA6IChTdHJpbmcoZGF0ZSkubWF0Y2godGltZXpvbmUpIHx8IFsnJ10pLnBvcCgpLnJlcGxhY2UodGltZXpvbmVDbGlwLCAnJyksXG4gICAgICAgICAgbzogICAgKG8gPiAwID8gJy0nIDogJysnKSArIHBhZChNYXRoLmZsb29yKE1hdGguYWJzKG8pIC8gNjApICogMTAwICsgTWF0aC5hYnMobykgJSA2MCwgNCksXG4gICAgICAgICAgUzogICAgWyd0aCcsICdzdCcsICduZCcsICdyZCddW2QgJSAxMCA+IDMgPyAwIDogKGQgJSAxMDAgLSBkICUgMTAgIT0gMTApICogZCAlIDEwXSxcbiAgICAgICAgICBXOiAgICBXLFxuICAgICAgICAgIE46ICAgIE5cbiAgICAgICAgfTtcbiAgXG4gICAgICAgIHJldHVybiBtYXNrLnJlcGxhY2UodG9rZW4sIGZ1bmN0aW9uIChtYXRjaCkge1xuICAgICAgICAgIGlmIChtYXRjaCBpbiBmbGFncykge1xuICAgICAgICAgICAgcmV0dXJuIGZsYWdzW21hdGNoXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG1hdGNoLnNsaWNlKDEsIG1hdGNoLmxlbmd0aCAtIDEpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfSkoKTtcblxuICBkYXRlRm9ybWF0Lm1hc2tzID0ge1xuICAgICdkZWZhdWx0JzogICAgICAgICAgICAgICAnZGRkIG1tbSBkZCB5eXl5IEhIOk1NOnNzJyxcbiAgICAnc2hvcnREYXRlJzogICAgICAgICAgICAgJ20vZC95eScsXG4gICAgJ21lZGl1bURhdGUnOiAgICAgICAgICAgICdtbW0gZCwgeXl5eScsXG4gICAgJ2xvbmdEYXRlJzogICAgICAgICAgICAgICdtbW1tIGQsIHl5eXknLFxuICAgICdmdWxsRGF0ZSc6ICAgICAgICAgICAgICAnZGRkZCwgbW1tbSBkLCB5eXl5JyxcbiAgICAnc2hvcnRUaW1lJzogICAgICAgICAgICAgJ2g6TU0gVFQnLFxuICAgICdtZWRpdW1UaW1lJzogICAgICAgICAgICAnaDpNTTpzcyBUVCcsXG4gICAgJ2xvbmdUaW1lJzogICAgICAgICAgICAgICdoOk1NOnNzIFRUIFonLFxuICAgICdpc29EYXRlJzogICAgICAgICAgICAgICAneXl5eS1tbS1kZCcsXG4gICAgJ2lzb1RpbWUnOiAgICAgICAgICAgICAgICdISDpNTTpzcycsXG4gICAgJ2lzb0RhdGVUaW1lJzogICAgICAgICAgICd5eXl5LW1tLWRkXFwnVFxcJ0hIOk1NOnNzbycsXG4gICAgJ2lzb1V0Y0RhdGVUaW1lJzogICAgICAgICdVVEM6eXl5eS1tbS1kZFxcJ1RcXCdISDpNTTpzc1xcJ1pcXCcnLFxuICAgICdleHBpcmVzSGVhZGVyRm9ybWF0JzogICAnZGRkLCBkZCBtbW0geXl5eSBISDpNTTpzcyBaJ1xuICB9O1xuXG4gIC8vIEludGVybmF0aW9uYWxpemF0aW9uIHN0cmluZ3NcbiAgZGF0ZUZvcm1hdC5pMThuID0ge1xuICAgIGRheU5hbWVzOiBbXG4gICAgICAnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJywgJ1RodScsICdGcmknLCAnU2F0JyxcbiAgICAgICdTdW5kYXknLCAnTW9uZGF5JywgJ1R1ZXNkYXknLCAnV2VkbmVzZGF5JywgJ1RodXJzZGF5JywgJ0ZyaWRheScsICdTYXR1cmRheSdcbiAgICBdLFxuICAgIG1vbnRoTmFtZXM6IFtcbiAgICAgICdKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsICdKdWwnLCAnQXVnJywgJ1NlcCcsICdPY3QnLCAnTm92JywgJ0RlYycsXG4gICAgICAnSmFudWFyeScsICdGZWJydWFyeScsICdNYXJjaCcsICdBcHJpbCcsICdNYXknLCAnSnVuZScsICdKdWx5JywgJ0F1Z3VzdCcsICdTZXB0ZW1iZXInLCAnT2N0b2JlcicsICdOb3ZlbWJlcicsICdEZWNlbWJlcidcbiAgICBdLFxuICAgIHRpbWVOYW1lczogW1xuICAgICAgJ2EnLCAncCcsICdhbScsICdwbScsICdBJywgJ1AnLCAnQU0nLCAnUE0nXG4gICAgXVxuICB9O1xuXG5mdW5jdGlvbiBwYWQodmFsLCBsZW4pIHtcbiAgdmFsID0gU3RyaW5nKHZhbCk7XG4gIGxlbiA9IGxlbiB8fCAyO1xuICB3aGlsZSAodmFsLmxlbmd0aCA8IGxlbikge1xuICAgIHZhbCA9ICcwJyArIHZhbDtcbiAgfVxuICByZXR1cm4gdmFsO1xufVxuXG4vKipcbiAqIEdldCB0aGUgSVNPIDg2MDEgd2VlayBudW1iZXJcbiAqIEJhc2VkIG9uIGNvbW1lbnRzIGZyb21cbiAqIGh0dHA6Ly90ZWNoYmxvZy5wcm9jdXJpb3Mubmwvay9uNjE4L25ld3Mvdmlldy8zMzc5Ni8xNDg2My9DYWxjdWxhdGUtSVNPLTg2MDEtd2Vlay1hbmQteWVhci1pbi1qYXZhc2NyaXB0Lmh0bWxcbiAqXG4gKiBAcGFyYW0gIHtPYmplY3R9IGBkYXRlYFxuICogQHJldHVybiB7TnVtYmVyfVxuICovXG5mdW5jdGlvbiBnZXRXZWVrKGRhdGUpIHtcbiAgLy8gUmVtb3ZlIHRpbWUgY29tcG9uZW50cyBvZiBkYXRlXG4gIHZhciB0YXJnZXRUaHVyc2RheSA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSk7XG5cbiAgLy8gQ2hhbmdlIGRhdGUgdG8gVGh1cnNkYXkgc2FtZSB3ZWVrXG4gIHRhcmdldFRodXJzZGF5LnNldERhdGUodGFyZ2V0VGh1cnNkYXkuZ2V0RGF0ZSgpIC0gKCh0YXJnZXRUaHVyc2RheS5nZXREYXkoKSArIDYpICUgNykgKyAzKTtcblxuICAvLyBUYWtlIEphbnVhcnkgNHRoIGFzIGl0IGlzIGFsd2F5cyBpbiB3ZWVrIDEgKHNlZSBJU08gODYwMSlcbiAgdmFyIGZpcnN0VGh1cnNkYXkgPSBuZXcgRGF0ZSh0YXJnZXRUaHVyc2RheS5nZXRGdWxsWWVhcigpLCAwLCA0KTtcblxuICAvLyBDaGFuZ2UgZGF0ZSB0byBUaHVyc2RheSBzYW1lIHdlZWtcbiAgZmlyc3RUaHVyc2RheS5zZXREYXRlKGZpcnN0VGh1cnNkYXkuZ2V0RGF0ZSgpIC0gKChmaXJzdFRodXJzZGF5LmdldERheSgpICsgNikgJSA3KSArIDMpO1xuXG4gIC8vIENoZWNrIGlmIGRheWxpZ2h0LXNhdmluZy10aW1lLXN3aXRjaCBvY2N1cnJlZCBhbmQgY29ycmVjdCBmb3IgaXRcbiAgdmFyIGRzID0gdGFyZ2V0VGh1cnNkYXkuZ2V0VGltZXpvbmVPZmZzZXQoKSAtIGZpcnN0VGh1cnNkYXkuZ2V0VGltZXpvbmVPZmZzZXQoKTtcbiAgdGFyZ2V0VGh1cnNkYXkuc2V0SG91cnModGFyZ2V0VGh1cnNkYXkuZ2V0SG91cnMoKSAtIGRzKTtcblxuICAvLyBOdW1iZXIgb2Ygd2Vla3MgYmV0d2VlbiB0YXJnZXQgVGh1cnNkYXkgYW5kIGZpcnN0IFRodXJzZGF5XG4gIHZhciB3ZWVrRGlmZiA9ICh0YXJnZXRUaHVyc2RheSAtIGZpcnN0VGh1cnNkYXkpIC8gKDg2NDAwMDAwKjcpO1xuICByZXR1cm4gMSArIE1hdGguZmxvb3Iod2Vla0RpZmYpO1xufVxuXG4vKipcbiAqIEdldCBJU08tODYwMSBudW1lcmljIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBkYXkgb2YgdGhlIHdlZWtcbiAqIDEgKGZvciBNb25kYXkpIHRocm91Z2ggNyAoZm9yIFN1bmRheSlcbiAqIFxuICogQHBhcmFtICB7T2JqZWN0fSBgZGF0ZWBcbiAqIEByZXR1cm4ge051bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0RGF5T2ZXZWVrKGRhdGUpIHtcbiAgdmFyIGRvdyA9IGRhdGUuZ2V0RGF5KCk7XG4gIGlmKGRvdyA9PT0gMCkge1xuICAgIGRvdyA9IDc7XG4gIH1cbiAgcmV0dXJuIGRvdztcbn1cblxuLyoqXG4gKiBraW5kLW9mIHNob3J0Y3V0XG4gKiBAcGFyYW0gIHsqfSB2YWxcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqL1xuZnVuY3Rpb24ga2luZE9mKHZhbCkge1xuICBpZiAodmFsID09PSBudWxsKSB7XG4gICAgcmV0dXJuICdudWxsJztcbiAgfVxuXG4gIGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiAndW5kZWZpbmVkJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB0eXBlb2YgdmFsO1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgIHJldHVybiAnYXJyYXknO1xuICB9XG5cbiAgcmV0dXJuIHt9LnRvU3RyaW5nLmNhbGwodmFsKVxuICAgIC5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKTtcbn07XG5cblxuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGRhdGVGb3JtYXQ7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBkYXRlRm9ybWF0O1xuICB9IGVsc2Uge1xuICAgIGdsb2JhbC5kYXRlRm9ybWF0ID0gZGF0ZUZvcm1hdDtcbiAgfVxufSkodGhpcyk7XG4iLCIvKiFcbiAqIHBhZC1sZWZ0IDxodHRwczovL2dpdGh1Yi5jb20vam9uc2NobGlua2VydC9wYWQtbGVmdD5cbiAqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTQtMjAxNSwgSm9uIFNjaGxpbmtlcnQuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4gKi9cblxuJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVwZWF0ID0gcmVxdWlyZSgncmVwZWF0LXN0cmluZycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHBhZExlZnQoc3RyLCBudW0sIGNoKSB7XG4gIHN0ciA9IHN0ci50b1N0cmluZygpO1xuXG4gIGlmICh0eXBlb2YgbnVtID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICBpZiAoY2ggPT09IDApIHtcbiAgICBjaCA9ICcwJztcbiAgfSBlbHNlIGlmIChjaCkge1xuICAgIGNoID0gY2gudG9TdHJpbmcoKTtcbiAgfSBlbHNlIHtcbiAgICBjaCA9ICcgJztcbiAgfVxuXG4gIHJldHVybiByZXBlYXQoY2gsIG51bSAtIHN0ci5sZW5ndGgpICsgc3RyO1xufTtcbiIsImltcG9ydCBkYXRlZm9ybWF0IGZyb20gJ2RhdGVmb3JtYXQnO1xuaW1wb3J0IGFzc2lnbiBmcm9tICdvYmplY3QtYXNzaWduJztcbmltcG9ydCBwYWRMZWZ0IGZyb20gJ3BhZC1sZWZ0JztcbmltcG9ydCB7IGdldENsaWVudEFQSSB9IGZyb20gJy4vdXRpbCc7XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fTtcbmxldCBsaW5rO1xubGV0IGRlZmF1bHRFeHRzID0geyBleHRlbnNpb246ICcnLCBwcmVmaXg6ICcnLCBzdWZmaXg6ICcnIH07XG5cbi8vIEFsdGVybmF0aXZlIHNvbHV0aW9uIGZvciBzYXZpbmcgZmlsZXMsXG4vLyBhIGJpdCBzbG93ZXIgYW5kIGRvZXMgbm90IHdvcmsgaW4gU2FmYXJpXG4vLyBmdW5jdGlvbiBmZXRjaEJsb2JGcm9tRGF0YVVSTCAoZGF0YVVSTCkge1xuLy8gICByZXR1cm4gd2luZG93LmZldGNoKGRhdGFVUkwpLnRoZW4ocmVzID0+IHJlcy5ibG9iKCkpO1xuLy8gfVxuXG5jb25zdCBzdXBwb3J0ZWRFbmNvZGluZ3MgPSBbXG4gICdpbWFnZS9wbmcnLFxuICAnaW1hZ2UvanBlZycsXG4gICdpbWFnZS93ZWJwJ1xuXTtcblxuZnVuY3Rpb24gc3RyZWFtIChpc1N0YXJ0LCBvcHRzID0ge30pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBvcHRzID0gYXNzaWduKHt9LCBkZWZhdWx0RXh0cywgb3B0cyk7XG4gICAgY29uc3QgZmlsZW5hbWUgPSByZXNvbHZlRmlsZW5hbWUoT2JqZWN0LmFzc2lnbih7fSwgb3B0cywge1xuICAgICAgZXh0ZW5zaW9uOiAnJyxcbiAgICAgIGZyYW1lOiB1bmRlZmluZWRcbiAgICB9KSk7XG4gICAgY29uc3QgZnVuYyA9IGlzU3RhcnQgPyAnc3RyZWFtU3RhcnQnIDogJ3N0cmVhbUVuZCc7XG4gICAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gICAgaWYgKGNsaWVudCAmJiBjbGllbnQub3V0cHV0ICYmIHR5cGVvZiBjbGllbnRbZnVuY10gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBjbGllbnRbZnVuY10oYXNzaWduKHt9LCBvcHRzLCB7IGZpbGVuYW1lIH0pKVxuICAgICAgICAudGhlbihldiA9PiByZXNvbHZlKGV2KSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXNvbHZlKHsgZmlsZW5hbWUsIGNsaWVudDogZmFsc2UgfSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbVN0YXJ0IChvcHRzID0ge30pIHtcbiAgcmV0dXJuIHN0cmVhbSh0cnVlLCBvcHRzKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmVhbUVuZCAob3B0cyA9IHt9KSB7XG4gIHJldHVybiBzdHJlYW0oZmFsc2UsIG9wdHMpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhwb3J0Q2FudmFzIChjYW52YXMsIG9wdCA9IHt9KSB7XG4gIGNvbnN0IGVuY29kaW5nID0gb3B0LmVuY29kaW5nIHx8ICdpbWFnZS9wbmcnO1xuICBpZiAoIXN1cHBvcnRlZEVuY29kaW5ncy5pbmNsdWRlcyhlbmNvZGluZykpIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBjYW52YXMgZW5jb2RpbmcgJHtlbmNvZGluZ31gKTtcbiAgbGV0IGV4dGVuc2lvbiA9IChlbmNvZGluZy5zcGxpdCgnLycpWzFdIHx8ICcnKS5yZXBsYWNlKC9qcGVnL2ksICdqcGcnKTtcbiAgaWYgKGV4dGVuc2lvbikgZXh0ZW5zaW9uID0gYC4ke2V4dGVuc2lvbn1gLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiB7XG4gICAgZXh0ZW5zaW9uLFxuICAgIHR5cGU6IGVuY29kaW5nLFxuICAgIGRhdGFVUkw6IGNhbnZhcy50b0RhdGFVUkwoZW5jb2RpbmcsIG9wdC5lbmNvZGluZ1F1YWxpdHkpXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJsb2JGcm9tRGF0YVVSTCAoZGF0YVVSTCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICBjb25zdCBzcGxpdEluZGV4ID0gZGF0YVVSTC5pbmRleE9mKCcsJyk7XG4gICAgaWYgKHNwbGl0SW5kZXggPT09IC0xKSB7XG4gICAgICByZXNvbHZlKG5ldyB3aW5kb3cuQmxvYigpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgYmFzZTY0ID0gZGF0YVVSTC5zbGljZShzcGxpdEluZGV4ICsgMSk7XG4gICAgY29uc3QgYnl0ZVN0cmluZyA9IHdpbmRvdy5hdG9iKGJhc2U2NCk7XG4gICAgY29uc3QgdHlwZSA9IGRhdGFVUkwuc2xpY2UoMCwgc3BsaXRJbmRleCk7XG4gICAgY29uc3QgbWltZU1hdGNoID0gL2RhdGE6KFteO10rKS8uZXhlYyh0eXBlKTtcbiAgICBjb25zdCBtaW1lID0gKG1pbWVNYXRjaCA/IG1pbWVNYXRjaFsxXSA6ICcnKSB8fCB1bmRlZmluZWQ7XG4gICAgY29uc3QgYWIgPSBuZXcgQXJyYXlCdWZmZXIoYnl0ZVN0cmluZy5sZW5ndGgpO1xuICAgIGNvbnN0IGlhID0gbmV3IFVpbnQ4QXJyYXkoYWIpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZVN0cmluZy5sZW5ndGg7IGkrKykge1xuICAgICAgaWFbaV0gPSBieXRlU3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIHJlc29sdmUobmV3IHdpbmRvdy5CbG9iKFsgYWIgXSwgeyB0eXBlOiBtaW1lIH0pKTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzYXZlRGF0YVVSTCAoZGF0YVVSTCwgb3B0cyA9IHt9KSB7XG4gIHJldHVybiBjcmVhdGVCbG9iRnJvbURhdGFVUkwoZGF0YVVSTClcbiAgICAudGhlbihibG9iID0+IHNhdmVCbG9iKGJsb2IsIG9wdHMpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhdmVCbG9iIChibG9iLCBvcHRzID0ge30pIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgIG9wdHMgPSBhc3NpZ24oe30sIGRlZmF1bHRFeHRzLCBvcHRzKTtcbiAgICBjb25zdCBmaWxlbmFtZSA9IG9wdHMuZmlsZW5hbWU7XG5cbiAgICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgICBpZiAoY2xpZW50ICYmIHR5cGVvZiBjbGllbnQuc2F2ZUJsb2IgPT09ICdmdW5jdGlvbicgJiYgY2xpZW50Lm91dHB1dCkge1xuICAgICAgLy8gbmF0aXZlIHNhdmluZyB1c2luZyBhIENMSSB0b29sXG4gICAgICByZXR1cm4gY2xpZW50LnNhdmVCbG9iKGJsb2IsIGFzc2lnbih7fSwgb3B0cywgeyBmaWxlbmFtZSB9KSlcbiAgICAgICAgLnRoZW4oZXYgPT4gcmVzb2x2ZShldikpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBmb3JjZSBkb3dubG9hZFxuICAgICAgaWYgKCFsaW5rKSB7XG4gICAgICAgIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgIGxpbmsuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICBsaW5rLnRhcmdldCA9ICdfYmxhbmsnO1xuICAgICAgfVxuICAgICAgbGluay5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgICAgbGluay5ocmVmID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGxpbmspO1xuICAgICAgbGluay5vbmNsaWNrID0gKCkgPT4ge1xuICAgICAgICBsaW5rLm9uY2xpY2sgPSBub29wO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgICBpZiAobGluay5wYXJlbnRFbGVtZW50KSBsaW5rLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQobGluayk7XG4gICAgICAgICAgbGluay5yZW1vdmVBdHRyaWJ1dGUoJ2hyZWYnKTtcbiAgICAgICAgICByZXNvbHZlKHsgZmlsZW5hbWUsIGNsaWVudDogZmFsc2UgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICAgIGxpbmsuY2xpY2soKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2F2ZUZpbGUgKGRhdGEsIG9wdHMgPSB7fSkge1xuICBjb25zdCBwYXJ0cyA9IEFycmF5LmlzQXJyYXkoZGF0YSkgPyBkYXRhIDogWyBkYXRhIF07XG4gIGNvbnN0IGJsb2IgPSBuZXcgd2luZG93LkJsb2IocGFydHMsIHsgdHlwZTogb3B0cy50eXBlIHx8ICcnIH0pO1xuICByZXR1cm4gc2F2ZUJsb2IoYmxvYiwgb3B0cyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUaW1lU3RhbXAgKCkge1xuICBjb25zdCBkYXRlRm9ybWF0U3RyID0gYHl5eXkubW0uZGQtSEguTU0uc3NgO1xuICByZXR1cm4gZGF0ZWZvcm1hdChuZXcgRGF0ZSgpLCBkYXRlRm9ybWF0U3RyKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldERlZmF1bHRGaWxlIChwcmVmaXggPSAnJywgc3VmZml4ID0gJycsIGV4dCkge1xuICAvLyBjb25zdCBkYXRlRm9ybWF0U3RyID0gYHl5eXkubW0uZGQtSEguTU0uc3NgO1xuICBjb25zdCBkYXRlRm9ybWF0U3RyID0gYHl5eXktbW0tZGQgJ2F0JyBoLk1NLnNzIFRUYDtcbiAgcmV0dXJuIGAke3ByZWZpeH0ke2RhdGVmb3JtYXQobmV3IERhdGUoKSwgZGF0ZUZvcm1hdFN0cil9JHtzdWZmaXh9JHtleHR9YDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVGaWxlbmFtZSAob3B0ID0ge30pIHtcbiAgb3B0ID0gYXNzaWduKHt9LCBvcHQpO1xuXG4gIC8vIEN1c3RvbSBmaWxlbmFtZSBmdW5jdGlvblxuICBpZiAodHlwZW9mIG9wdC5maWxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG9wdC5maWxlKG9wdCk7XG4gIH0gZWxzZSBpZiAob3B0LmZpbGUpIHtcbiAgICByZXR1cm4gb3B0LmZpbGU7XG4gIH1cblxuICBsZXQgZnJhbWUgPSBudWxsO1xuICBsZXQgZXh0ZW5zaW9uID0gJyc7XG4gIGlmICh0eXBlb2Ygb3B0LmV4dGVuc2lvbiA9PT0gJ3N0cmluZycpIGV4dGVuc2lvbiA9IG9wdC5leHRlbnNpb247XG5cbiAgaWYgKHR5cGVvZiBvcHQuZnJhbWUgPT09ICdudW1iZXInKSB7XG4gICAgbGV0IHRvdGFsRnJhbWVzO1xuICAgIGlmICh0eXBlb2Ygb3B0LnRvdGFsRnJhbWVzID09PSAnbnVtYmVyJykge1xuICAgICAgdG90YWxGcmFtZXMgPSBvcHQudG90YWxGcmFtZXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRvdGFsRnJhbWVzID0gTWF0aC5tYXgoMTAwMDAsIG9wdC5mcmFtZSk7XG4gICAgfVxuICAgIGZyYW1lID0gcGFkTGVmdChTdHJpbmcob3B0LmZyYW1lKSwgU3RyaW5nKHRvdGFsRnJhbWVzKS5sZW5ndGgsICcwJyk7XG4gIH1cblxuICBjb25zdCBsYXllclN0ciA9IGlzRmluaXRlKG9wdC50b3RhbExheWVycykgJiYgaXNGaW5pdGUob3B0LmxheWVyKSAmJiBvcHQudG90YWxMYXllcnMgPiAxID8gYCR7b3B0LmxheWVyfWAgOiAnJztcbiAgaWYgKGZyYW1lICE9IG51bGwpIHtcbiAgICByZXR1cm4gWyBsYXllclN0ciwgZnJhbWUgXS5maWx0ZXIoQm9vbGVhbikuam9pbignLScpICsgZXh0ZW5zaW9uO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IGRlZmF1bHRGaWxlTmFtZSA9IG9wdC50aW1lU3RhbXA7XG4gICAgcmV0dXJuIFsgb3B0LnByZWZpeCwgb3B0Lm5hbWUgfHwgZGVmYXVsdEZpbGVOYW1lLCBsYXllclN0ciwgb3B0Lmhhc2gsIG9wdC5zdWZmaXggXS5maWx0ZXIoQm9vbGVhbikuam9pbignLScpICsgZXh0ZW5zaW9uO1xuICB9XG59XG4iLCIvLyBIYW5kbGUgc29tZSBjb21tb24gdHlwb3NcbmNvbnN0IGNvbW1vblR5cG9zID0ge1xuICBkaW1lbnNpb246ICdkaW1lbnNpb25zJyxcbiAgYW5pbWF0ZWQ6ICdhbmltYXRlJyxcbiAgYW5pbWF0aW5nOiAnYW5pbWF0ZScsXG4gIHVuaXQ6ICd1bml0cycsXG4gIFA1OiAncDUnLFxuICBwaXhlbGxhdGVkOiAncGl4ZWxhdGVkJyxcbiAgbG9vcGluZzogJ2xvb3AnLFxuICBwaXhlbFBlckluY2g6ICdwaXhlbHMnXG59O1xuXG4vLyBIYW5kbGUgYWxsIG90aGVyIHR5cG9zXG5jb25zdCBhbGxLZXlzID0gW1xuICAnZGltZW5zaW9ucycsICd1bml0cycsICdwaXhlbHNQZXJJbmNoJywgJ29yaWVudGF0aW9uJyxcbiAgJ3NjYWxlVG9GaXQnLCAnc2NhbGVUb1ZpZXcnLCAnYmxlZWQnLCAncGl4ZWxSYXRpbycsXG4gICdleHBvcnRQaXhlbFJhdGlvJywgJ21heFBpeGVsUmF0aW8nLCAnc2NhbGVDb250ZXh0JyxcbiAgJ3Jlc2l6ZUNhbnZhcycsICdzdHlsZUNhbnZhcycsICdjYW52YXMnLCAnY29udGV4dCcsICdhdHRyaWJ1dGVzJyxcbiAgJ3BhcmVudCcsICdmaWxlJywgJ25hbWUnLCAncHJlZml4JywgJ3N1ZmZpeCcsICdhbmltYXRlJywgJ3BsYXlpbmcnLFxuICAnbG9vcCcsICdkdXJhdGlvbicsICd0b3RhbEZyYW1lcycsICdmcHMnLCAncGxheWJhY2tSYXRlJywgJ3RpbWVTY2FsZScsXG4gICdmcmFtZScsICd0aW1lJywgJ2ZsdXNoJywgJ3BpeGVsYXRlZCcsICdob3RrZXlzJywgJ3A1JywgJ2lkJyxcbiAgJ3NjYWxlVG9GaXRQYWRkaW5nJywgJ2RhdGEnLCAncGFyYW1zJywgJ2VuY29kaW5nJywgJ2VuY29kaW5nUXVhbGl0eSdcbl07XG5cbi8vIFRoaXMgaXMgZmFpcmx5IG9waW5pb25hdGVkIGFuZCBmb3JjZXMgdXNlcnMgdG8gdXNlIHRoZSAnZGF0YScgcGFyYW1ldGVyXG4vLyBpZiB0aGV5IHdhbnQgdG8gcGFzcyBhbG9uZyBub24tc2V0dGluZyBvYmplY3RzLi4uXG5leHBvcnQgY29uc3QgY2hlY2tTZXR0aW5ncyA9IChzZXR0aW5ncykgPT4ge1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc2V0dGluZ3MpO1xuICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICBpZiAoa2V5IGluIGNvbW1vblR5cG9zKSB7XG4gICAgICBjb25zdCBhY3R1YWwgPSBjb21tb25UeXBvc1trZXldO1xuICAgICAgY29uc29sZS53YXJuKGBbY2FudmFzLXNrZXRjaF0gQ291bGQgbm90IHJlY29nbml6ZSB0aGUgc2V0dGluZyBcIiR7a2V5fVwiLCBkaWQgeW91IG1lYW4gXCIke2FjdHVhbH1cIj9gKTtcbiAgICB9IGVsc2UgaWYgKCFhbGxLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIGNvbnNvbGUud2FybihgW2NhbnZhcy1za2V0Y2hdIENvdWxkIG5vdCByZWNvZ25pemUgdGhlIHNldHRpbmcgXCIke2tleX1cImApO1xuICAgIH1cbiAgfSk7XG59O1xuIiwiY29uc3QgZGVmYXVsdFVuaXRzID0gJ21tJztcblxuY29uc3QgZGF0YSA9IFtcbiAgLy8gQ29tbW9uIFBhcGVyIFNpemVzXG4gIC8vIChNb3N0bHkgTm9ydGgtQW1lcmljYW4gYmFzZWQpXG4gIFsgJ3Bvc3RjYXJkJywgMTAxLjYsIDE1Mi40IF0sXG4gIFsgJ3Bvc3Rlci1zbWFsbCcsIDI4MCwgNDMwIF0sXG4gIFsgJ3Bvc3RlcicsIDQ2MCwgNjEwIF0sXG4gIFsgJ3Bvc3Rlci1sYXJnZScsIDYxMCwgOTEwIF0sXG4gIFsgJ2J1c2luZXNzLWNhcmQnLCA1MC44LCA4OC45IF0sXG5cbiAgLy8gUGhvdG9ncmFwaGljIFByaW50IFBhcGVyIFNpemVzXG4gIFsgJzJyJywgNjQsIDg5IF0sXG4gIFsgJzNyJywgODksIDEyNyBdLFxuICBbICc0cicsIDEwMiwgMTUyIF0sXG4gIFsgJzVyJywgMTI3LCAxNzggXSwgLy8gNeKAs3g34oCzXG4gIFsgJzZyJywgMTUyLCAyMDMgXSwgLy8gNuKAs3g44oCzXG4gIFsgJzhyJywgMjAzLCAyNTQgXSwgLy8gOOKAs3gxMOKAs1xuICBbICcxMHInLCAyNTQsIDMwNSBdLCAvLyAxMOKAs3gxMuKAs1xuICBbICcxMXInLCAyNzksIDM1NiBdLCAvLyAxMeKAs3gxNOKAs1xuICBbICcxMnInLCAzMDUsIDM4MSBdLFxuXG4gIC8vIFN0YW5kYXJkIFBhcGVyIFNpemVzXG4gIFsgJ2EwJywgODQxLCAxMTg5IF0sXG4gIFsgJ2ExJywgNTk0LCA4NDEgXSxcbiAgWyAnYTInLCA0MjAsIDU5NCBdLFxuICBbICdhMycsIDI5NywgNDIwIF0sXG4gIFsgJ2E0JywgMjEwLCAyOTcgXSxcbiAgWyAnYTUnLCAxNDgsIDIxMCBdLFxuICBbICdhNicsIDEwNSwgMTQ4IF0sXG4gIFsgJ2E3JywgNzQsIDEwNSBdLFxuICBbICdhOCcsIDUyLCA3NCBdLFxuICBbICdhOScsIDM3LCA1MiBdLFxuICBbICdhMTAnLCAyNiwgMzcgXSxcbiAgWyAnMmEwJywgMTE4OSwgMTY4MiBdLFxuICBbICc0YTAnLCAxNjgyLCAyMzc4IF0sXG4gIFsgJ2IwJywgMTAwMCwgMTQxNCBdLFxuICBbICdiMScsIDcwNywgMTAwMCBdLFxuICBbICdiMSsnLCA3MjAsIDEwMjAgXSxcbiAgWyAnYjInLCA1MDAsIDcwNyBdLFxuICBbICdiMisnLCA1MjAsIDcyMCBdLFxuICBbICdiMycsIDM1MywgNTAwIF0sXG4gIFsgJ2I0JywgMjUwLCAzNTMgXSxcbiAgWyAnYjUnLCAxNzYsIDI1MCBdLFxuICBbICdiNicsIDEyNSwgMTc2IF0sXG4gIFsgJ2I3JywgODgsIDEyNSBdLFxuICBbICdiOCcsIDYyLCA4OCBdLFxuICBbICdiOScsIDQ0LCA2MiBdLFxuICBbICdiMTAnLCAzMSwgNDQgXSxcbiAgWyAnYjExJywgMjIsIDMyIF0sXG4gIFsgJ2IxMicsIDE2LCAyMiBdLFxuICBbICdjMCcsIDkxNywgMTI5NyBdLFxuICBbICdjMScsIDY0OCwgOTE3IF0sXG4gIFsgJ2MyJywgNDU4LCA2NDggXSxcbiAgWyAnYzMnLCAzMjQsIDQ1OCBdLFxuICBbICdjNCcsIDIyOSwgMzI0IF0sXG4gIFsgJ2M1JywgMTYyLCAyMjkgXSxcbiAgWyAnYzYnLCAxMTQsIDE2MiBdLFxuICBbICdjNycsIDgxLCAxMTQgXSxcbiAgWyAnYzgnLCA1NywgODEgXSxcbiAgWyAnYzknLCA0MCwgNTcgXSxcbiAgWyAnYzEwJywgMjgsIDQwIF0sXG4gIFsgJ2MxMScsIDIyLCAzMiBdLFxuICBbICdjMTInLCAxNiwgMjIgXSxcblxuICAvLyBVc2UgaW5jaGVzIGZvciBOb3J0aCBBbWVyaWNhbiBzaXplcyxcbiAgLy8gYXMgaXQgcHJvZHVjZXMgbGVzcyBmbG9hdCBwcmVjaXNpb24gZXJyb3JzXG4gIFsgJ2hhbGYtbGV0dGVyJywgNS41LCA4LjUsICdpbicgXSxcbiAgWyAnbGV0dGVyJywgOC41LCAxMSwgJ2luJyBdLFxuICBbICdsZWdhbCcsIDguNSwgMTQsICdpbicgXSxcbiAgWyAnanVuaW9yLWxlZ2FsJywgNSwgOCwgJ2luJyBdLFxuICBbICdsZWRnZXInLCAxMSwgMTcsICdpbicgXSxcbiAgWyAndGFibG9pZCcsIDExLCAxNywgJ2luJyBdLFxuICBbICdhbnNpLWEnLCA4LjUsIDExLjAsICdpbicgXSxcbiAgWyAnYW5zaS1iJywgMTEuMCwgMTcuMCwgJ2luJyBdLFxuICBbICdhbnNpLWMnLCAxNy4wLCAyMi4wLCAnaW4nIF0sXG4gIFsgJ2Fuc2ktZCcsIDIyLjAsIDM0LjAsICdpbicgXSxcbiAgWyAnYW5zaS1lJywgMzQuMCwgNDQuMCwgJ2luJyBdLFxuICBbICdhcmNoLWEnLCA5LCAxMiwgJ2luJyBdLFxuICBbICdhcmNoLWInLCAxMiwgMTgsICdpbicgXSxcbiAgWyAnYXJjaC1jJywgMTgsIDI0LCAnaW4nIF0sXG4gIFsgJ2FyY2gtZCcsIDI0LCAzNiwgJ2luJyBdLFxuICBbICdhcmNoLWUnLCAzNiwgNDgsICdpbicgXSxcbiAgWyAnYXJjaC1lMScsIDMwLCA0MiwgJ2luJyBdLFxuICBbICdhcmNoLWUyJywgMjYsIDM4LCAnaW4nIF0sXG4gIFsgJ2FyY2gtZTMnLCAyNywgMzksICdpbicgXVxuXTtcblxuZXhwb3J0IGRlZmF1bHQgZGF0YS5yZWR1Y2UoKGRpY3QsIHByZXNldCkgPT4ge1xuICBjb25zdCBpdGVtID0ge1xuICAgIHVuaXRzOiBwcmVzZXRbM10gfHwgZGVmYXVsdFVuaXRzLFxuICAgIGRpbWVuc2lvbnM6IFsgcHJlc2V0WzFdLCBwcmVzZXRbMl0gXVxuICB9O1xuICBkaWN0W3ByZXNldFswXV0gPSBpdGVtO1xuICBkaWN0W3ByZXNldFswXS5yZXBsYWNlKC8tL2csICcgJyldID0gaXRlbTtcbiAgcmV0dXJuIGRpY3Q7XG59LCB7fSk7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYXJndW1lbnRzW2ldICE9PSB1bmRlZmluZWQpIHJldHVybiBhcmd1bWVudHNbaV07XG4gICAgfVxufTtcbiIsInZhciBkZWZpbmVkID0gcmVxdWlyZSgnZGVmaW5lZCcpO1xudmFyIHVuaXRzID0gWyAnbW0nLCAnY20nLCAnbScsICdwYycsICdwdCcsICdpbicsICdmdCcsICdweCcgXTtcblxudmFyIGNvbnZlcnNpb25zID0ge1xuICAvLyBtZXRyaWNcbiAgbToge1xuICAgIHN5c3RlbTogJ21ldHJpYycsXG4gICAgZmFjdG9yOiAxXG4gIH0sXG4gIGNtOiB7XG4gICAgc3lzdGVtOiAnbWV0cmljJyxcbiAgICBmYWN0b3I6IDEgLyAxMDBcbiAgfSxcbiAgbW06IHtcbiAgICBzeXN0ZW06ICdtZXRyaWMnLFxuICAgIGZhY3RvcjogMSAvIDEwMDBcbiAgfSxcbiAgLy8gaW1wZXJpYWxcbiAgcHQ6IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxIC8gNzJcbiAgfSxcbiAgcGM6IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxIC8gNlxuICB9LFxuICBpbjoge1xuICAgIHN5c3RlbTogJ2ltcGVyaWFsJyxcbiAgICBmYWN0b3I6IDFcbiAgfSxcbiAgZnQ6IHtcbiAgICBzeXN0ZW06ICdpbXBlcmlhbCcsXG4gICAgZmFjdG9yOiAxMlxuICB9XG59O1xuXG5jb25zdCBhbmNob3JzID0ge1xuICBtZXRyaWM6IHtcbiAgICB1bml0OiAnbScsXG4gICAgcmF0aW86IDEgLyAwLjAyNTRcbiAgfSxcbiAgaW1wZXJpYWw6IHtcbiAgICB1bml0OiAnaW4nLFxuICAgIHJhdGlvOiAwLjAyNTRcbiAgfVxufTtcblxuZnVuY3Rpb24gcm91bmQgKHZhbHVlLCBkZWNpbWFscykge1xuICByZXR1cm4gTnVtYmVyKE1hdGgucm91bmQodmFsdWUgKyAnZScgKyBkZWNpbWFscykgKyAnZS0nICsgZGVjaW1hbHMpO1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0RGlzdGFuY2UgKHZhbHVlLCBmcm9tVW5pdCwgdG9Vbml0LCBvcHRzKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInIHx8ICFpc0Zpbml0ZSh2YWx1ZSkpIHRocm93IG5ldyBFcnJvcignVmFsdWUgbXVzdCBiZSBhIGZpbml0ZSBudW1iZXInKTtcbiAgaWYgKCFmcm9tVW5pdCB8fCAhdG9Vbml0KSB0aHJvdyBuZXcgRXJyb3IoJ011c3Qgc3BlY2lmeSBmcm9tIGFuZCB0byB1bml0cycpO1xuXG4gIG9wdHMgPSBvcHRzIHx8IHt9O1xuICB2YXIgcGl4ZWxzUGVySW5jaCA9IGRlZmluZWQob3B0cy5waXhlbHNQZXJJbmNoLCA5Nik7XG4gIHZhciBwcmVjaXNpb24gPSBvcHRzLnByZWNpc2lvbjtcbiAgdmFyIHJvdW5kUGl4ZWwgPSBvcHRzLnJvdW5kUGl4ZWwgIT09IGZhbHNlO1xuXG4gIGZyb21Vbml0ID0gZnJvbVVuaXQudG9Mb3dlckNhc2UoKTtcbiAgdG9Vbml0ID0gdG9Vbml0LnRvTG93ZXJDYXNlKCk7XG5cbiAgaWYgKHVuaXRzLmluZGV4T2YoZnJvbVVuaXQpID09PSAtMSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGZyb20gdW5pdCBcIicgKyBmcm9tVW5pdCArICdcIiwgbXVzdCBiZSBvbmUgb2Y6ICcgKyB1bml0cy5qb2luKCcsICcpKTtcbiAgaWYgKHVuaXRzLmluZGV4T2YodG9Vbml0KSA9PT0gLTEpIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBmcm9tIHVuaXQgXCInICsgdG9Vbml0ICsgJ1wiLCBtdXN0IGJlIG9uZSBvZjogJyArIHVuaXRzLmpvaW4oJywgJykpO1xuXG4gIGlmIChmcm9tVW5pdCA9PT0gdG9Vbml0KSB7XG4gICAgLy8gV2UgZG9uJ3QgbmVlZCB0byBjb252ZXJ0IGZyb20gQSB0byBCIHNpbmNlIHRoZXkgYXJlIHRoZSBzYW1lIGFscmVhZHlcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICB2YXIgdG9GYWN0b3IgPSAxO1xuICB2YXIgZnJvbUZhY3RvciA9IDE7XG4gIHZhciBpc1RvUGl4ZWwgPSBmYWxzZTtcblxuICBpZiAoZnJvbVVuaXQgPT09ICdweCcpIHtcbiAgICBmcm9tRmFjdG9yID0gMSAvIHBpeGVsc1BlckluY2g7XG4gICAgZnJvbVVuaXQgPSAnaW4nO1xuICB9XG4gIGlmICh0b1VuaXQgPT09ICdweCcpIHtcbiAgICBpc1RvUGl4ZWwgPSB0cnVlO1xuICAgIHRvRmFjdG9yID0gcGl4ZWxzUGVySW5jaDtcbiAgICB0b1VuaXQgPSAnaW4nO1xuICB9XG5cbiAgdmFyIGZyb21Vbml0RGF0YSA9IGNvbnZlcnNpb25zW2Zyb21Vbml0XTtcbiAgdmFyIHRvVW5pdERhdGEgPSBjb252ZXJzaW9uc1t0b1VuaXRdO1xuXG4gIC8vIHNvdXJjZSB0byBhbmNob3IgaW5zaWRlIHNvdXJjZSdzIHN5c3RlbVxuICB2YXIgYW5jaG9yID0gdmFsdWUgKiBmcm9tVW5pdERhdGEuZmFjdG9yICogZnJvbUZhY3RvcjtcblxuICAvLyBpZiBzeXN0ZW1zIGRpZmZlciwgY29udmVydCBvbmUgdG8gYW5vdGhlclxuICBpZiAoZnJvbVVuaXREYXRhLnN5c3RlbSAhPT0gdG9Vbml0RGF0YS5zeXN0ZW0pIHtcbiAgICAvLyByZWd1bGFyICdtJyB0byAnaW4nIGFuZCBzbyBmb3J0aFxuICAgIGFuY2hvciAqPSBhbmNob3JzW2Zyb21Vbml0RGF0YS5zeXN0ZW1dLnJhdGlvO1xuICB9XG5cbiAgdmFyIHJlc3VsdCA9IGFuY2hvciAvIHRvVW5pdERhdGEuZmFjdG9yICogdG9GYWN0b3I7XG4gIGlmIChpc1RvUGl4ZWwgJiYgcm91bmRQaXhlbCkge1xuICAgIHJlc3VsdCA9IE1hdGgucm91bmQocmVzdWx0KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJlY2lzaW9uID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShwcmVjaXNpb24pKSB7XG4gICAgcmVzdWx0ID0gcm91bmQocmVzdWx0LCBwcmVjaXNpb24pO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29udmVydERpc3RhbmNlO1xubW9kdWxlLmV4cG9ydHMudW5pdHMgPSB1bml0cztcbiIsImltcG9ydCBwYXBlclNpemVzIGZyb20gJy4vcGFwZXItc2l6ZXMnO1xuaW1wb3J0IGNvbnZlcnRMZW5ndGggZnJvbSAnY29udmVydC1sZW5ndGgnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGltZW5zaW9uc0Zyb21QcmVzZXQgKGRpbWVuc2lvbnMsIHVuaXRzVG8gPSAncHgnLCBwaXhlbHNQZXJJbmNoID0gNzIpIHtcbiAgaWYgKHR5cGVvZiBkaW1lbnNpb25zID09PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGtleSA9IGRpbWVuc2lvbnMudG9Mb3dlckNhc2UoKTtcbiAgICBpZiAoIShrZXkgaW4gcGFwZXJTaXplcykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIGRpbWVuc2lvbiBwcmVzZXQgXCIke2RpbWVuc2lvbnN9XCIgaXMgbm90IHN1cHBvcnRlZCBvciBjb3VsZCBub3QgYmUgZm91bmQ7IHRyeSB1c2luZyBhNCwgYTMsIHBvc3RjYXJkLCBsZXR0ZXIsIGV0Yy5gKVxuICAgIH1cbiAgICBjb25zdCBwcmVzZXQgPSBwYXBlclNpemVzW2tleV07XG4gICAgcmV0dXJuIHByZXNldC5kaW1lbnNpb25zLm1hcChkID0+IHtcbiAgICAgIHJldHVybiBjb252ZXJ0RGlzdGFuY2UoZCwgcHJlc2V0LnVuaXRzLCB1bml0c1RvLCBwaXhlbHNQZXJJbmNoKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGltZW5zaW9ucztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udmVydERpc3RhbmNlIChkaW1lbnNpb24sIHVuaXRzRnJvbSA9ICdweCcsIHVuaXRzVG8gPSAncHgnLCBwaXhlbHNQZXJJbmNoID0gNzIpIHtcbiAgcmV0dXJuIGNvbnZlcnRMZW5ndGgoZGltZW5zaW9uLCB1bml0c0Zyb20sIHVuaXRzVG8sIHtcbiAgICBwaXhlbHNQZXJJbmNoLFxuICAgIHByZWNpc2lvbjogNCxcbiAgICByb3VuZFBpeGVsOiB0cnVlXG4gIH0pO1xufVxuIiwiaW1wb3J0IHsgZ2V0RGltZW5zaW9uc0Zyb21QcmVzZXQsIGNvbnZlcnREaXN0YW5jZSB9IGZyb20gJy4uL2Rpc3RhbmNlcyc7XG5pbXBvcnQgeyBpc0Jyb3dzZXIsIGRlZmluZWQgfSBmcm9tICcuLi91dGlsJztcblxuZnVuY3Rpb24gY2hlY2tJZkhhc0RpbWVuc2lvbnMgKHNldHRpbmdzKSB7XG4gIGlmICghc2V0dGluZ3MuZGltZW5zaW9ucykgcmV0dXJuIGZhbHNlO1xuICBpZiAodHlwZW9mIHNldHRpbmdzLmRpbWVuc2lvbnMgPT09ICdzdHJpbmcnKSByZXR1cm4gdHJ1ZTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc2V0dGluZ3MuZGltZW5zaW9ucykgJiYgc2V0dGluZ3MuZGltZW5zaW9ucy5sZW5ndGggPj0gMikgcmV0dXJuIHRydWU7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gZ2V0UGFyZW50U2l6ZSAocHJvcHMsIHNldHRpbmdzKSB7XG4gIC8vIFdoZW4gbm8geyBkaW1lbnNpb24gfSBpcyBwYXNzZWQgaW4gbm9kZSwgd2UgZGVmYXVsdCB0byBIVE1MIGNhbnZhcyBzaXplXG4gIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICByZXR1cm4gWyAzMDAsIDE1MCBdO1xuICB9XG5cbiAgbGV0IGVsZW1lbnQgPSBzZXR0aW5ncy5wYXJlbnQgfHwgd2luZG93O1xuXG4gIGlmIChlbGVtZW50ID09PSB3aW5kb3cgfHxcbiAgICAgIGVsZW1lbnQgPT09IGRvY3VtZW50IHx8XG4gICAgICBlbGVtZW50ID09PSBkb2N1bWVudC5ib2R5KSB7XG4gICAgcmV0dXJuIFsgd2luZG93LmlubmVyV2lkdGgsIHdpbmRvdy5pbm5lckhlaWdodCBdO1xuICB9IGVsc2Uge1xuICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCB9ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4gWyB3aWR0aCwgaGVpZ2h0IF07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVzaXplQ2FudmFzIChwcm9wcywgc2V0dGluZ3MpIHtcbiAgbGV0IHdpZHRoLCBoZWlnaHQ7XG4gIGxldCBzdHlsZVdpZHRoLCBzdHlsZUhlaWdodDtcbiAgbGV0IGNhbnZhc1dpZHRoLCBjYW52YXNIZWlnaHQ7XG5cbiAgY29uc3QgYnJvd3NlciA9IGlzQnJvd3NlcigpO1xuICBjb25zdCBkaW1lbnNpb25zID0gc2V0dGluZ3MuZGltZW5zaW9ucztcbiAgY29uc3QgaGFzRGltZW5zaW9ucyA9IGNoZWNrSWZIYXNEaW1lbnNpb25zKHNldHRpbmdzKTtcbiAgY29uc3QgZXhwb3J0aW5nID0gcHJvcHMuZXhwb3J0aW5nO1xuICBsZXQgc2NhbGVUb0ZpdCA9IGhhc0RpbWVuc2lvbnMgPyBzZXR0aW5ncy5zY2FsZVRvRml0ICE9PSBmYWxzZSA6IGZhbHNlO1xuICBsZXQgc2NhbGVUb1ZpZXcgPSAoIWV4cG9ydGluZyAmJiBoYXNEaW1lbnNpb25zKSA/IHNldHRpbmdzLnNjYWxlVG9WaWV3IDogdHJ1ZTtcbiAgLy8gaW4gbm9kZSwgY2FuY2VsIGJvdGggb2YgdGhlc2Ugb3B0aW9uc1xuICBpZiAoIWJyb3dzZXIpIHNjYWxlVG9GaXQgPSBzY2FsZVRvVmlldyA9IGZhbHNlO1xuICBjb25zdCB1bml0cyA9IHNldHRpbmdzLnVuaXRzO1xuICBjb25zdCBwaXhlbHNQZXJJbmNoID0gKHR5cGVvZiBzZXR0aW5ncy5waXhlbHNQZXJJbmNoID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShzZXR0aW5ncy5waXhlbHNQZXJJbmNoKSkgPyBzZXR0aW5ncy5waXhlbHNQZXJJbmNoIDogNzI7XG4gIGNvbnN0IGJsZWVkID0gZGVmaW5lZChzZXR0aW5ncy5ibGVlZCwgMCk7XG5cbiAgY29uc3QgZGV2aWNlUGl4ZWxSYXRpbyA9IGJyb3dzZXIgPyB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyA6IDE7XG4gIGNvbnN0IGJhc2VQaXhlbFJhdGlvID0gc2NhbGVUb1ZpZXcgPyBkZXZpY2VQaXhlbFJhdGlvIDogMTtcblxuICBsZXQgcGl4ZWxSYXRpbywgZXhwb3J0UGl4ZWxSYXRpbztcblxuICAvLyBJZiBhIHBpeGVsIHJhdGlvIGlzIHNwZWNpZmllZCwgd2Ugd2lsbCB1c2UgaXQuXG4gIC8vIE90aGVyd2lzZTpcbiAgLy8gIC0+IElmIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIHVzZSBiYXNlIHJhdGlvIChpLmUuIHNpemUgZm9yIGV4cG9ydClcbiAgLy8gIC0+IElmIG5vIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIHVzZSBkZXZpY2UgcmF0aW8gKGkuZS4gc2l6ZSBmb3Igc2NyZWVuKVxuICBpZiAodHlwZW9mIHNldHRpbmdzLnBpeGVsUmF0aW8gPT09ICdudW1iZXInICYmIGlzRmluaXRlKHNldHRpbmdzLnBpeGVsUmF0aW8pKSB7XG4gICAgLy8gV2hlbiB7IHBpeGVsUmF0aW8gfSBpcyBzcGVjaWZpZWQsIGl0J3MgYWxzbyB1c2VkIGFzIGRlZmF1bHQgZXhwb3J0UGl4ZWxSYXRpby5cbiAgICBwaXhlbFJhdGlvID0gc2V0dGluZ3MucGl4ZWxSYXRpbztcbiAgICBleHBvcnRQaXhlbFJhdGlvID0gZGVmaW5lZChzZXR0aW5ncy5leHBvcnRQaXhlbFJhdGlvLCBwaXhlbFJhdGlvKTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoaGFzRGltZW5zaW9ucykge1xuICAgICAgLy8gV2hlbiBhIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIHVzZSB0aGUgYmFzZSByYXRpbyByYXRoZXIgdGhhbiBzY3JlZW4gcmF0aW9cbiAgICAgIHBpeGVsUmF0aW8gPSBiYXNlUGl4ZWxSYXRpbztcbiAgICAgIC8vIERlZmF1bHQgdG8gYSBwaXhlbCByYXRpbyBvZiAxIHNvIHRoYXQgeW91IGVuZCB1cCB3aXRoIHRoZSBzYW1lIGRpbWVuc2lvblxuICAgICAgLy8geW91IHNwZWNpZmllZCwgaS5lLiBbIDUwMCwgNTAwIF0gaXMgZXhwb3J0ZWQgYXMgNTAweDUwMCBweFxuICAgICAgZXhwb3J0UGl4ZWxSYXRpbyA9IGRlZmluZWQoc2V0dGluZ3MuZXhwb3J0UGl4ZWxSYXRpbywgMSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE5vIGRpbWVuc2lvbiBpcyBzcGVjaWZpZWQsIGFzc3VtZSBmdWxsLXNjcmVlbiByZXRpbmEgc2l6aW5nXG4gICAgICBwaXhlbFJhdGlvID0gZGV2aWNlUGl4ZWxSYXRpbztcbiAgICAgIC8vIERlZmF1bHQgdG8gc2NyZWVuIHBpeGVsIHJhdGlvLCBzbyB0aGF0IGl0J3MgbGlrZSB0YWtpbmcgYSBkZXZpY2Ugc2NyZWVuc2hvdFxuICAgICAgZXhwb3J0UGl4ZWxSYXRpbyA9IGRlZmluZWQoc2V0dGluZ3MuZXhwb3J0UGl4ZWxSYXRpbywgcGl4ZWxSYXRpbyk7XG4gICAgfVxuICB9XG5cbiAgLy8gQ2xhbXAgcGl4ZWwgcmF0aW9cbiAgaWYgKHR5cGVvZiBzZXR0aW5ncy5tYXhQaXhlbFJhdGlvID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShzZXR0aW5ncy5tYXhQaXhlbFJhdGlvKSkge1xuICAgIHBpeGVsUmF0aW8gPSBNYXRoLm1pbihzZXR0aW5ncy5tYXhQaXhlbFJhdGlvLCBwaXhlbFJhdGlvKTtcbiAgfVxuXG4gIC8vIEhhbmRsZSBleHBvcnQgcGl4ZWwgcmF0aW9cbiAgaWYgKGV4cG9ydGluZykge1xuICAgIHBpeGVsUmF0aW8gPSBleHBvcnRQaXhlbFJhdGlvO1xuICB9XG5cbiAgLy8gcGFyZW50V2lkdGggPSB0eXBlb2YgcGFyZW50V2lkdGggPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdE5vZGVTaXplWzBdIDogcGFyZW50V2lkdGg7XG4gIC8vIHBhcmVudEhlaWdodCA9IHR5cGVvZiBwYXJlbnRIZWlnaHQgPT09ICd1bmRlZmluZWQnID8gZGVmYXVsdE5vZGVTaXplWzFdIDogcGFyZW50SGVpZ2h0O1xuXG4gIGxldCBbIHBhcmVudFdpZHRoLCBwYXJlbnRIZWlnaHQgXSA9IGdldFBhcmVudFNpemUocHJvcHMsIHNldHRpbmdzKTtcbiAgbGV0IHRyaW1XaWR0aCwgdHJpbUhlaWdodDtcblxuICAvLyBZb3UgY2FuIHNwZWNpZnkgYSBkaW1lbnNpb25zIGluIHBpeGVscyBvciBjbS9tL2luL2V0Y1xuICBpZiAoaGFzRGltZW5zaW9ucykge1xuICAgIGNvbnN0IHJlc3VsdCA9IGdldERpbWVuc2lvbnNGcm9tUHJlc2V0KGRpbWVuc2lvbnMsIHVuaXRzLCBwaXhlbHNQZXJJbmNoKTtcbiAgICBjb25zdCBoaWdoZXN0ID0gTWF0aC5tYXgocmVzdWx0WzBdLCByZXN1bHRbMV0pO1xuICAgIGNvbnN0IGxvd2VzdCA9IE1hdGgubWluKHJlc3VsdFswXSwgcmVzdWx0WzFdKTtcbiAgICBpZiAoc2V0dGluZ3Mub3JpZW50YXRpb24pIHtcbiAgICAgIGNvbnN0IGxhbmRzY2FwZSA9IHNldHRpbmdzLm9yaWVudGF0aW9uID09PSAnbGFuZHNjYXBlJztcbiAgICAgIHdpZHRoID0gbGFuZHNjYXBlID8gaGlnaGVzdCA6IGxvd2VzdDtcbiAgICAgIGhlaWdodCA9IGxhbmRzY2FwZSA/IGxvd2VzdCA6IGhpZ2hlc3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIHdpZHRoID0gcmVzdWx0WzBdO1xuICAgICAgaGVpZ2h0ID0gcmVzdWx0WzFdO1xuICAgIH1cblxuICAgIHRyaW1XaWR0aCA9IHdpZHRoO1xuICAgIHRyaW1IZWlnaHQgPSBoZWlnaHQ7XG5cbiAgICAvLyBBcHBseSBibGVlZCB3aGljaCBpcyBhc3N1bWVkIHRvIGJlIGluIHRoZSBzYW1lIHVuaXRzXG4gICAgd2lkdGggKz0gYmxlZWQgKiAyO1xuICAgIGhlaWdodCArPSBibGVlZCAqIDI7XG4gIH0gZWxzZSB7XG4gICAgd2lkdGggPSBwYXJlbnRXaWR0aDtcbiAgICBoZWlnaHQgPSBwYXJlbnRIZWlnaHQ7XG4gICAgdHJpbVdpZHRoID0gd2lkdGg7XG4gICAgdHJpbUhlaWdodCA9IGhlaWdodDtcbiAgfVxuXG4gIC8vIFJlYWwgc2l6ZSBpbiBwaXhlbHMgYWZ0ZXIgUFBJIGlzIHRha2VuIGludG8gYWNjb3VudFxuICBsZXQgcmVhbFdpZHRoID0gd2lkdGg7XG4gIGxldCByZWFsSGVpZ2h0ID0gaGVpZ2h0O1xuICBpZiAoaGFzRGltZW5zaW9ucyAmJiB1bml0cykge1xuICAgIC8vIENvbnZlcnQgdG8gZGlnaXRhbC9waXhlbCB1bml0cyBpZiBuZWNlc3NhcnlcbiAgICByZWFsV2lkdGggPSBjb252ZXJ0RGlzdGFuY2Uod2lkdGgsIHVuaXRzLCAncHgnLCBwaXhlbHNQZXJJbmNoKTtcbiAgICByZWFsSGVpZ2h0ID0gY29udmVydERpc3RhbmNlKGhlaWdodCwgdW5pdHMsICdweCcsIHBpeGVsc1BlckluY2gpO1xuICB9XG5cbiAgLy8gSG93IGJpZyB0byBzZXQgdGhlICd2aWV3JyBvZiB0aGUgY2FudmFzIGluIHRoZSBicm93c2VyIChpLmUuIHN0eWxlKVxuICBzdHlsZVdpZHRoID0gTWF0aC5yb3VuZChyZWFsV2lkdGgpO1xuICBzdHlsZUhlaWdodCA9IE1hdGgucm91bmQocmVhbEhlaWdodCk7XG5cbiAgLy8gSWYgd2Ugd2lzaCB0byBzY2FsZSB0aGUgdmlldyB0byB0aGUgYnJvd3NlciB3aW5kb3dcbiAgaWYgKHNjYWxlVG9GaXQgJiYgIWV4cG9ydGluZyAmJiBoYXNEaW1lbnNpb25zKSB7XG4gICAgY29uc3QgYXNwZWN0ID0gd2lkdGggLyBoZWlnaHQ7XG4gICAgY29uc3Qgd2luZG93QXNwZWN0ID0gcGFyZW50V2lkdGggLyBwYXJlbnRIZWlnaHQ7XG4gICAgY29uc3Qgc2NhbGVUb0ZpdFBhZGRpbmcgPSBkZWZpbmVkKHNldHRpbmdzLnNjYWxlVG9GaXRQYWRkaW5nLCA0MCk7XG4gICAgY29uc3QgbWF4V2lkdGggPSBNYXRoLnJvdW5kKHBhcmVudFdpZHRoIC0gc2NhbGVUb0ZpdFBhZGRpbmcgKiAyKTtcbiAgICBjb25zdCBtYXhIZWlnaHQgPSBNYXRoLnJvdW5kKHBhcmVudEhlaWdodCAtIHNjYWxlVG9GaXRQYWRkaW5nICogMik7XG4gICAgaWYgKHN0eWxlV2lkdGggPiBtYXhXaWR0aCB8fCBzdHlsZUhlaWdodCA+IG1heEhlaWdodCkge1xuICAgICAgaWYgKHdpbmRvd0FzcGVjdCA+IGFzcGVjdCkge1xuICAgICAgICBzdHlsZUhlaWdodCA9IG1heEhlaWdodDtcbiAgICAgICAgc3R5bGVXaWR0aCA9IE1hdGgucm91bmQoc3R5bGVIZWlnaHQgKiBhc3BlY3QpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc3R5bGVXaWR0aCA9IG1heFdpZHRoO1xuICAgICAgICBzdHlsZUhlaWdodCA9IE1hdGgucm91bmQoc3R5bGVXaWR0aCAvIGFzcGVjdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY2FudmFzV2lkdGggPSBzY2FsZVRvVmlldyA/IE1hdGgucm91bmQocGl4ZWxSYXRpbyAqIHN0eWxlV2lkdGgpIDogTWF0aC5yb3VuZChwaXhlbFJhdGlvICogcmVhbFdpZHRoKTtcbiAgY2FudmFzSGVpZ2h0ID0gc2NhbGVUb1ZpZXcgPyBNYXRoLnJvdW5kKHBpeGVsUmF0aW8gKiBzdHlsZUhlaWdodCkgOiBNYXRoLnJvdW5kKHBpeGVsUmF0aW8gKiByZWFsSGVpZ2h0KTtcblxuICBjb25zdCB2aWV3cG9ydFdpZHRoID0gc2NhbGVUb1ZpZXcgPyBNYXRoLnJvdW5kKHN0eWxlV2lkdGgpIDogTWF0aC5yb3VuZChyZWFsV2lkdGgpO1xuICBjb25zdCB2aWV3cG9ydEhlaWdodCA9IHNjYWxlVG9WaWV3ID8gTWF0aC5yb3VuZChzdHlsZUhlaWdodCkgOiBNYXRoLnJvdW5kKHJlYWxIZWlnaHQpO1xuXG4gIGNvbnN0IHNjYWxlWCA9IGNhbnZhc1dpZHRoIC8gd2lkdGg7XG4gIGNvbnN0IHNjYWxlWSA9IGNhbnZhc0hlaWdodCAvIGhlaWdodDtcblxuICAvLyBBc3NpZ24gdG8gY3VycmVudCBwcm9wc1xuICByZXR1cm4ge1xuICAgIGJsZWVkLFxuICAgIHBpeGVsUmF0aW8sXG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIGRpbWVuc2lvbnM6IFsgd2lkdGgsIGhlaWdodCBdLFxuICAgIHVuaXRzOiB1bml0cyB8fCAncHgnLFxuICAgIHNjYWxlWCxcbiAgICBzY2FsZVksXG4gICAgcGl4ZWxzUGVySW5jaCxcbiAgICB2aWV3cG9ydFdpZHRoLFxuICAgIHZpZXdwb3J0SGVpZ2h0LFxuICAgIGNhbnZhc1dpZHRoLFxuICAgIGNhbnZhc0hlaWdodCxcbiAgICB0cmltV2lkdGgsXG4gICAgdHJpbUhlaWdodCxcbiAgICBzdHlsZVdpZHRoLFxuICAgIHN0eWxlSGVpZ2h0XG4gIH07XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGdldENhbnZhc0NvbnRleHRcbmZ1bmN0aW9uIGdldENhbnZhc0NvbnRleHQgKHR5cGUsIG9wdHMpIHtcbiAgaWYgKHR5cGVvZiB0eXBlICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ211c3Qgc3BlY2lmeSB0eXBlIHN0cmluZycpXG4gIH1cblxuICBvcHRzID0gb3B0cyB8fCB7fVxuXG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnICYmICFvcHRzLmNhbnZhcykge1xuICAgIHJldHVybiBudWxsIC8vIGNoZWNrIGZvciBOb2RlXG4gIH1cblxuICB2YXIgY2FudmFzID0gb3B0cy5jYW52YXMgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJylcbiAgaWYgKHR5cGVvZiBvcHRzLndpZHRoID09PSAnbnVtYmVyJykge1xuICAgIGNhbnZhcy53aWR0aCA9IG9wdHMud2lkdGhcbiAgfVxuICBpZiAodHlwZW9mIG9wdHMuaGVpZ2h0ID09PSAnbnVtYmVyJykge1xuICAgIGNhbnZhcy5oZWlnaHQgPSBvcHRzLmhlaWdodFxuICB9XG5cbiAgdmFyIGF0dHJpYnMgPSBvcHRzXG4gIHZhciBnbFxuICB0cnkge1xuICAgIHZhciBuYW1lcyA9IFsgdHlwZSBdXG4gICAgLy8gcHJlZml4IEdMIGNvbnRleHRzXG4gICAgaWYgKHR5cGUuaW5kZXhPZignd2ViZ2wnKSA9PT0gMCkge1xuICAgICAgbmFtZXMucHVzaCgnZXhwZXJpbWVudGFsLScgKyB0eXBlKVxuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGdsID0gY2FudmFzLmdldENvbnRleHQobmFtZXNbaV0sIGF0dHJpYnMpXG4gICAgICBpZiAoZ2wpIHJldHVybiBnbFxuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIGdsID0gbnVsbFxuICB9XG4gIHJldHVybiAoZ2wgfHwgbnVsbCkgLy8gZW5zdXJlIG51bGwgb24gZmFpbFxufVxuIiwiaW1wb3J0IGFzc2lnbiBmcm9tICdvYmplY3QtYXNzaWduJztcbmltcG9ydCBnZXRDYW52YXNDb250ZXh0IGZyb20gJ2dldC1jYW52YXMtY29udGV4dCc7XG5pbXBvcnQgeyBpc0Jyb3dzZXIgfSBmcm9tICcuLi91dGlsJztcblxuZnVuY3Rpb24gY3JlYXRlQ2FudmFzRWxlbWVudCAoKSB7XG4gIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0l0IGFwcGVhcnMgeW91IGFyZSBydW5pbmcgZnJvbSBOb2RlLmpzIG9yIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQuIFRyeSBwYXNzaW5nIGluIGFuIGV4aXN0aW5nIHsgY2FudmFzIH0gaW50ZXJmYWNlIGluc3RlYWQuJyk7XG4gIH1cbiAgcmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVDYW52YXMgKHNldHRpbmdzID0ge30pIHtcbiAgbGV0IGNvbnRleHQsIGNhbnZhcztcbiAgbGV0IG93bnNDYW52YXMgPSBmYWxzZTtcbiAgaWYgKHNldHRpbmdzLmNhbnZhcyAhPT0gZmFsc2UpIHtcbiAgICAvLyBEZXRlcm1pbmUgdGhlIGNhbnZhcyBhbmQgY29udGV4dCB0byBjcmVhdGVcbiAgICBjb250ZXh0ID0gc2V0dGluZ3MuY29udGV4dDtcbiAgICBpZiAoIWNvbnRleHQgfHwgdHlwZW9mIGNvbnRleHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBsZXQgbmV3Q2FudmFzID0gc2V0dGluZ3MuY2FudmFzO1xuICAgICAgaWYgKCFuZXdDYW52YXMpIHtcbiAgICAgICAgbmV3Q2FudmFzID0gY3JlYXRlQ2FudmFzRWxlbWVudCgpO1xuICAgICAgICBvd25zQ2FudmFzID0gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHR5cGUgPSBjb250ZXh0IHx8ICcyZCc7XG4gICAgICBpZiAodHlwZW9mIG5ld0NhbnZhcy5nZXRDb250ZXh0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlIHNwZWNpZmllZCB7IGNhbnZhcyB9IGVsZW1lbnQgZG9lcyBub3QgaGF2ZSBhIGdldENvbnRleHQoKSBmdW5jdGlvbiwgbWF5YmUgaXQgaXMgbm90IGEgPGNhbnZhcz4gdGFnP2ApO1xuICAgICAgfVxuICAgICAgY29udGV4dCA9IGdldENhbnZhc0NvbnRleHQodHlwZSwgYXNzaWduKHt9LCBzZXR0aW5ncy5hdHRyaWJ1dGVzLCB7IGNhbnZhczogbmV3Q2FudmFzIH0pKTtcbiAgICAgIGlmICghY29udGV4dCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCBhdCBjYW52YXMuZ2V0Q29udGV4dCgnJHt0eXBlfScpIC0gdGhlIGJyb3dzZXIgbWF5IG5vdCBzdXBwb3J0IHRoaXMgY29udGV4dCwgb3IgYSBkaWZmZXJlbnQgY29udGV4dCBtYXkgYWxyZWFkeSBiZSBpbiB1c2Ugd2l0aCB0aGlzIGNhbnZhcy5gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjYW52YXMgPSBjb250ZXh0LmNhbnZhcztcbiAgICAvLyBFbnN1cmUgY29udGV4dCBtYXRjaGVzIHVzZXIncyBjYW52YXMgZXhwZWN0YXRpb25zXG4gICAgaWYgKHNldHRpbmdzLmNhbnZhcyAmJiBjYW52YXMgIT09IHNldHRpbmdzLmNhbnZhcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgeyBjYW52YXMgfSBhbmQgeyBjb250ZXh0IH0gc2V0dGluZ3MgbXVzdCBwb2ludCB0byB0aGUgc2FtZSB1bmRlcmx5aW5nIGNhbnZhcyBlbGVtZW50Jyk7XG4gICAgfVxuXG4gICAgLy8gQXBwbHkgcGl4ZWxhdGlvbiB0byBjYW52YXMgaWYgbmVjZXNzYXJ5LCB0aGlzIGlzIG1vc3RseSBhIGNvbnZlbmllbmNlIHV0aWxpdHlcbiAgICBpZiAoc2V0dGluZ3MucGl4ZWxhdGVkKSB7XG4gICAgICBjb250ZXh0LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgY29udGV4dC5tb3pJbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQub0ltYWdlU21vb3RoaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgICAgY29udGV4dC53ZWJraXRJbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNvbnRleHQubXNJbWFnZVNtb290aGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgIGNhbnZhcy5zdHlsZVsnaW1hZ2UtcmVuZGVyaW5nJ10gPSAncGl4ZWxhdGVkJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgY2FudmFzLCBjb250ZXh0LCBvd25zQ2FudmFzIH07XG59XG4iLCJpbXBvcnQgYXNzaWduIGZyb20gJ29iamVjdC1hc3NpZ24nO1xuaW1wb3J0IHJpZ2h0Tm93IGZyb20gJ3JpZ2h0LW5vdyc7XG5pbXBvcnQgaXNQcm9taXNlIGZyb20gJ2lzLXByb21pc2UnO1xuaW1wb3J0IHsgaXNCcm93c2VyLCBkZWZpbmVkLCBpc1dlYkdMQ29udGV4dCwgaXNDYW52YXMsIGdldENsaWVudEFQSSB9IGZyb20gJy4uL3V0aWwnO1xuaW1wb3J0IGRlZXBFcXVhbCBmcm9tICdkZWVwLWVxdWFsJztcbmltcG9ydCB7XG4gIHJlc29sdmVGaWxlbmFtZSxcbiAgc2F2ZUZpbGUsXG4gIHNhdmVEYXRhVVJMLFxuICBnZXRUaW1lU3RhbXAsXG4gIGV4cG9ydENhbnZhcyxcbiAgc3RyZWFtU3RhcnQsXG4gIHN0cmVhbUVuZFxufSBmcm9tICcuLi9zYXZlJztcbmltcG9ydCB7IGNoZWNrU2V0dGluZ3MgfSBmcm9tICcuLi9hY2Nlc3NpYmlsaXR5JztcblxuaW1wb3J0IGtleWJvYXJkU2hvcnRjdXRzIGZyb20gJy4va2V5Ym9hcmRTaG9ydGN1dHMnO1xuaW1wb3J0IHJlc2l6ZUNhbnZhcyBmcm9tICcuL3Jlc2l6ZUNhbnZhcyc7XG5pbXBvcnQgY3JlYXRlQ2FudmFzIGZyb20gJy4vY3JlYXRlQ2FudmFzJztcblxuY2xhc3MgU2tldGNoTWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICB0aGlzLl9zZXR0aW5ncyA9IHt9O1xuICAgIHRoaXMuX3Byb3BzID0ge307XG4gICAgdGhpcy5fc2tldGNoID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX3JhZiA9IG51bGw7XG4gICAgdGhpcy5fcmVjb3JkVGltZW91dCA9IG51bGw7XG5cbiAgICAvLyBTb21lIGhhY2t5IHRoaW5ncyByZXF1aXJlZCB0byBnZXQgYXJvdW5kIHA1LmpzIHN0cnVjdHVyZVxuICAgIHRoaXMuX2xhc3RSZWRyYXdSZXN1bHQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5faXNQNVJlc2l6aW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLl9rZXlib2FyZFNob3J0Y3V0cyA9IGtleWJvYXJkU2hvcnRjdXRzKHtcbiAgICAgIGVuYWJsZWQ6ICgpID0+IHRoaXMuc2V0dGluZ3MuaG90a2V5cyAhPT0gZmFsc2UsXG4gICAgICBzYXZlOiAoZXYpID0+IHtcbiAgICAgICAgaWYgKGV2LnNoaWZ0S2V5KSB7XG4gICAgICAgICAgaWYgKHRoaXMucHJvcHMucmVjb3JkaW5nKSB7XG4gICAgICAgICAgICB0aGlzLmVuZFJlY29yZCgpO1xuICAgICAgICAgICAgdGhpcy5ydW4oKTtcbiAgICAgICAgICB9IGVsc2UgdGhpcy5yZWNvcmQoKTtcbiAgICAgICAgfSBlbHNlIGlmICghdGhpcy5wcm9wcy5yZWNvcmRpbmcpIHtcbiAgICAgICAgICB0aGlzLmV4cG9ydEZyYW1lKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB0b2dnbGVQbGF5OiAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnByb3BzLnBsYXlpbmcpIHRoaXMucGF1c2UoKTtcbiAgICAgICAgZWxzZSB0aGlzLnBsYXkoKTtcbiAgICAgIH0sXG4gICAgICBjb21taXQ6IChldikgPT4ge1xuICAgICAgICB0aGlzLmV4cG9ydEZyYW1lKHsgY29tbWl0OiB0cnVlIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgdGhpcy5fYW5pbWF0ZUhhbmRsZXIgPSAoKSA9PiB0aGlzLmFuaW1hdGUoKTtcblxuICAgIHRoaXMuX3Jlc2l6ZUhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5yZXNpemUoKTtcbiAgICAgIC8vIE9ubHkgcmUtcmVuZGVyIHdoZW4gc2l6ZSBhY3R1YWxseSBjaGFuZ2VzXG4gICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBnZXQgc2tldGNoICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2tldGNoO1xuICB9XG5cbiAgZ2V0IHNldHRpbmdzICgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2V0dGluZ3M7XG4gIH1cblxuICBnZXQgcHJvcHMgKCkge1xuICAgIHJldHVybiB0aGlzLl9wcm9wcztcbiAgfVxuXG4gIF9jb21wdXRlUGxheWhlYWQgKGN1cnJlbnRUaW1lLCBkdXJhdGlvbikge1xuICAgIGNvbnN0IGhhc0R1cmF0aW9uID0gdHlwZW9mIGR1cmF0aW9uID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShkdXJhdGlvbik7XG4gICAgcmV0dXJuIGhhc0R1cmF0aW9uID8gY3VycmVudFRpbWUgLyBkdXJhdGlvbiA6IDA7XG4gIH1cblxuICBfY29tcHV0ZUZyYW1lIChwbGF5aGVhZCwgdGltZSwgdG90YWxGcmFtZXMsIGZwcykge1xuICAgIHJldHVybiAoaXNGaW5pdGUodG90YWxGcmFtZXMpICYmIHRvdGFsRnJhbWVzID4gMSlcbiAgICAgID8gTWF0aC5mbG9vcihwbGF5aGVhZCAqICh0b3RhbEZyYW1lcyAtIDEpKVxuICAgICAgOiBNYXRoLmZsb29yKGZwcyAqIHRpbWUpO1xuICB9XG5cbiAgX2NvbXB1dGVDdXJyZW50RnJhbWUgKCkge1xuICAgIHJldHVybiB0aGlzLl9jb21wdXRlRnJhbWUoXG4gICAgICB0aGlzLnByb3BzLnBsYXloZWFkLCB0aGlzLnByb3BzLnRpbWUsXG4gICAgICB0aGlzLnByb3BzLnRvdGFsRnJhbWVzLCB0aGlzLnByb3BzLmZwc1xuICAgICk7XG4gIH1cblxuICBfZ2V0U2l6ZVByb3BzICgpIHtcbiAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdpZHRoOiBwcm9wcy53aWR0aCxcbiAgICAgIGhlaWdodDogcHJvcHMuaGVpZ2h0LFxuICAgICAgcGl4ZWxSYXRpbzogcHJvcHMucGl4ZWxSYXRpbyxcbiAgICAgIGNhbnZhc1dpZHRoOiBwcm9wcy5jYW52YXNXaWR0aCxcbiAgICAgIGNhbnZhc0hlaWdodDogcHJvcHMuY2FudmFzSGVpZ2h0LFxuICAgICAgdmlld3BvcnRXaWR0aDogcHJvcHMudmlld3BvcnRXaWR0aCxcbiAgICAgIHZpZXdwb3J0SGVpZ2h0OiBwcm9wcy52aWV3cG9ydEhlaWdodFxuICAgIH07XG4gIH1cblxuICBydW4gKCkge1xuICAgIGlmICghdGhpcy5za2V0Y2gpIHRocm93IG5ldyBFcnJvcignc2hvdWxkIHdhaXQgdW50aWwgc2tldGNoIGlzIGxvYWRlZCBiZWZvcmUgdHJ5aW5nIHRvIHBsYXkoKScpO1xuXG4gICAgLy8gU3RhcnQgYW4gYW5pbWF0aW9uIGZyYW1lIGxvb3AgaWYgbmVjZXNzYXJ5XG4gICAgaWYgKHRoaXMuc2V0dGluZ3MucGxheWluZyAhPT0gZmFsc2UpIHtcbiAgICAgIHRoaXMucGxheSgpO1xuICAgIH1cblxuICAgIC8vIExldCdzIGxldCB0aGlzIHdhcm5pbmcgaGFuZyBhcm91bmQgZm9yIGEgZmV3IHZlcnNpb25zLi4uXG4gICAgaWYgKHR5cGVvZiB0aGlzLnNrZXRjaC5kaXNwb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ0luIGNhbnZhcy1za2V0Y2hAMC4wLjIzIHRoZSBkaXNwb3NlKCkgZXZlbnQgaGFzIGJlZW4gcmVuYW1lZCB0byB1bmxvYWQoKScpO1xuICAgIH1cblxuICAgIC8vIEluIGNhc2Ugd2UgYXJlbid0IHBsYXlpbmcgb3IgYW5pbWF0ZWQsIG1ha2Ugc3VyZSB3ZSBzdGlsbCB0cmlnZ2VyIGJlZ2luIG1lc3NhZ2UuLi5cbiAgICBpZiAoIXRoaXMucHJvcHMuc3RhcnRlZCkge1xuICAgICAgdGhpcy5fc2lnbmFsQmVnaW4oKTtcbiAgICAgIHRoaXMucHJvcHMuc3RhcnRlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gUmVuZGVyIGFuIGluaXRpYWwgZnJhbWVcbiAgICB0aGlzLnRpY2soKTtcbiAgICB0aGlzLnJlbmRlcigpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgX2NhbmNlbFRpbWVvdXRzICgpIHtcbiAgICBpZiAodGhpcy5fcmFmICE9IG51bGwgJiYgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMuX3JhZik7XG4gICAgICB0aGlzLl9yYWYgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5fcmVjb3JkVGltZW91dCAhPSBudWxsKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5fcmVjb3JkVGltZW91dCk7XG4gICAgICB0aGlzLl9yZWNvcmRUaW1lb3V0ID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwbGF5ICgpIHtcbiAgICBsZXQgYW5pbWF0ZSA9IHRoaXMuc2V0dGluZ3MuYW5pbWF0ZTtcbiAgICBpZiAoJ2FuaW1hdGlvbicgaW4gdGhpcy5zZXR0aW5ncykge1xuICAgICAgYW5pbWF0ZSA9IHRydWU7XG4gICAgICBjb25zb2xlLndhcm4oJ1tjYW52YXMtc2tldGNoXSB7IGFuaW1hdGlvbiB9IGhhcyBiZWVuIHJlbmFtZWQgdG8geyBhbmltYXRlIH0nKTtcbiAgICB9XG4gICAgaWYgKCFhbmltYXRlKSByZXR1cm47XG4gICAgaWYgKCFpc0Jyb3dzZXIoKSkge1xuICAgICAgY29uc29sZS5lcnJvcignW2NhbnZhcy1za2V0Y2hdIFdBUk46IFVzaW5nIHsgYW5pbWF0ZSB9IGluIE5vZGUuanMgaXMgbm90IHlldCBzdXBwb3J0ZWQnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMucGxheWluZykgcmV0dXJuO1xuICAgIGlmICghdGhpcy5wcm9wcy5zdGFydGVkKSB7XG4gICAgICB0aGlzLl9zaWduYWxCZWdpbigpO1xuICAgICAgdGhpcy5wcm9wcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBjb25zb2xlLmxvZygncGxheScsIHRoaXMucHJvcHMudGltZSlcblxuICAgIC8vIFN0YXJ0IGEgcmVuZGVyIGxvb3BcbiAgICB0aGlzLnByb3BzLnBsYXlpbmcgPSB0cnVlO1xuICAgIHRoaXMuX2NhbmNlbFRpbWVvdXRzKCk7XG4gICAgdGhpcy5fbGFzdFRpbWUgPSByaWdodE5vdygpO1xuICAgIHRoaXMuX3JhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0ZUhhbmRsZXIpO1xuICB9XG5cbiAgcGF1c2UgKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnJlY29yZGluZykgdGhpcy5lbmRSZWNvcmQoKTtcbiAgICB0aGlzLnByb3BzLnBsYXlpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMuX2NhbmNlbFRpbWVvdXRzKCk7XG4gIH1cblxuICB0b2dnbGVQbGF5ICgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wbGF5aW5nKSB0aGlzLnBhdXNlKCk7XG4gICAgZWxzZSB0aGlzLnBsYXkoKTtcbiAgfVxuXG4gIC8vIFN0b3AgYW5kIHJlc2V0IHRvIGZyYW1lIHplcm9cbiAgc3RvcCAoKSB7XG4gICAgdGhpcy5wYXVzZSgpO1xuICAgIHRoaXMucHJvcHMuZnJhbWUgPSAwO1xuICAgIHRoaXMucHJvcHMucGxheWhlYWQgPSAwO1xuICAgIHRoaXMucHJvcHMudGltZSA9IDA7XG4gICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSAwO1xuICAgIHRoaXMucHJvcHMuc3RhcnRlZCA9IGZhbHNlO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gIH1cblxuICByZWNvcmQgKCkge1xuICAgIGlmICh0aGlzLnByb3BzLnJlY29yZGluZykgcmV0dXJuO1xuICAgIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tjYW52YXMtc2tldGNoXSBXQVJOOiBSZWNvcmRpbmcgZnJvbSBOb2RlLmpzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zdG9wKCk7XG4gICAgdGhpcy5wcm9wcy5wbGF5aW5nID0gdHJ1ZTtcbiAgICB0aGlzLnByb3BzLnJlY29yZGluZyA9IHRydWU7XG5cbiAgICBjb25zdCBleHBvcnRPcHRzID0gdGhpcy5fY3JlYXRlRXhwb3J0T3B0aW9ucyh7IHNlcXVlbmNlOiB0cnVlIH0pO1xuXG4gICAgY29uc3QgZnJhbWVJbnRlcnZhbCA9IDEgLyB0aGlzLnByb3BzLmZwcztcbiAgICAvLyBSZW5kZXIgZWFjaCBmcmFtZSBpbiB0aGUgc2VxdWVuY2VcbiAgICB0aGlzLl9jYW5jZWxUaW1lb3V0cygpO1xuICAgIGNvbnN0IHRpY2sgPSAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMucHJvcHMucmVjb3JkaW5nKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IGZyYW1lSW50ZXJ2YWw7XG4gICAgICB0aGlzLnRpY2soKTtcbiAgICAgIHJldHVybiB0aGlzLmV4cG9ydEZyYW1lKGV4cG9ydE9wdHMpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBpZiAoIXRoaXMucHJvcHMucmVjb3JkaW5nKSByZXR1cm47IC8vIHdhcyBjYW5jZWxsZWQgYmVmb3JlXG4gICAgICAgICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSAwO1xuICAgICAgICAgIHRoaXMucHJvcHMuZnJhbWUrKztcbiAgICAgICAgICBpZiAodGhpcy5wcm9wcy5mcmFtZSA8IHRoaXMucHJvcHMudG90YWxGcmFtZXMpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMudGltZSArPSBmcmFtZUludGVydmFsO1xuICAgICAgICAgICAgdGhpcy5wcm9wcy5wbGF5aGVhZCA9IHRoaXMuX2NvbXB1dGVQbGF5aGVhZCh0aGlzLnByb3BzLnRpbWUsIHRoaXMucHJvcHMuZHVyYXRpb24pO1xuICAgICAgICAgICAgdGhpcy5fcmVjb3JkVGltZW91dCA9IHNldFRpbWVvdXQodGljaywgMCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdGaW5pc2hlZCByZWNvcmRpbmcnKTtcbiAgICAgICAgICAgIHRoaXMuX3NpZ25hbEVuZCgpO1xuICAgICAgICAgICAgdGhpcy5lbmRSZWNvcmQoKTtcbiAgICAgICAgICAgIHRoaXMuc3RvcCgpO1xuICAgICAgICAgICAgdGhpcy5ydW4oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICAvLyBUcmlnZ2VyIGEgc3RhcnQgZXZlbnQgYmVmb3JlIHdlIGJlZ2luIHJlY29yZGluZ1xuICAgIGlmICghdGhpcy5wcm9wcy5zdGFydGVkKSB7XG4gICAgICB0aGlzLl9zaWduYWxCZWdpbigpO1xuICAgICAgdGhpcy5wcm9wcy5zdGFydGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBUcmlnZ2VyICdiZWdpbiByZWNvcmQnIGV2ZW50XG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5iZWdpblJlY29yZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fd3JhcENvbnRleHRTY2FsZShwcm9wcyA9PiB0aGlzLnNrZXRjaC5iZWdpblJlY29yZChwcm9wcykpO1xuICAgIH1cblxuICAgIC8vIEluaXRpYXRlIGEgc3RyZWFtaW5nIHN0YXJ0IGlmIG5lY2Vzc2FyeVxuICAgIHN0cmVhbVN0YXJ0KGV4cG9ydE9wdHMpXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHJlc3BvbnNlID0+IHtcbiAgICAgICAgdGhpcy5fcmFmID0gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgX3NpZ25hbEJlZ2luICgpIHtcbiAgICBpZiAodGhpcy5za2V0Y2ggJiYgdHlwZW9mIHRoaXMuc2tldGNoLmJlZ2luID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl93cmFwQ29udGV4dFNjYWxlKHByb3BzID0+IHRoaXMuc2tldGNoLmJlZ2luKHByb3BzKSk7XG4gICAgfVxuICB9XG5cbiAgX3NpZ25hbEVuZCAoKSB7XG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5lbmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuX3dyYXBDb250ZXh0U2NhbGUocHJvcHMgPT4gdGhpcy5za2V0Y2guZW5kKHByb3BzKSk7XG4gICAgfVxuICB9XG5cbiAgZW5kUmVjb3JkICgpIHtcbiAgICBjb25zdCB3YXNSZWNvcmRpbmcgPSB0aGlzLnByb3BzLnJlY29yZGluZztcblxuICAgIHRoaXMuX2NhbmNlbFRpbWVvdXRzKCk7XG4gICAgdGhpcy5wcm9wcy5yZWNvcmRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IDA7XG4gICAgdGhpcy5wcm9wcy5wbGF5aW5nID0gZmFsc2U7XG5cbiAgICAvLyB0ZWxsIENMSSB0aGF0IHN0cmVhbSBoYXMgZmluaXNoZWRcbiAgICByZXR1cm4gc3RyZWFtRW5kKClcbiAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICB9KVxuICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAvLyBUcmlnZ2VyICdlbmQgcmVjb3JkJyBldmVudFxuICAgICAgICBpZiAod2FzUmVjb3JkaW5nICYmIHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC5lbmRSZWNvcmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aGlzLl93cmFwQ29udGV4dFNjYWxlKHByb3BzID0+IHRoaXMuc2tldGNoLmVuZFJlY29yZChwcm9wcykpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIF9jcmVhdGVFeHBvcnRPcHRpb25zIChvcHQgPSB7fSkge1xuICAgIHJldHVybiB7XG4gICAgICBzZXF1ZW5jZTogb3B0LnNlcXVlbmNlLFxuICAgICAgc2F2ZTogb3B0LnNhdmUsXG4gICAgICBmcHM6IHRoaXMucHJvcHMuZnBzLFxuICAgICAgZnJhbWU6IG9wdC5zZXF1ZW5jZSA/IHRoaXMucHJvcHMuZnJhbWUgOiB1bmRlZmluZWQsXG4gICAgICBmaWxlOiB0aGlzLnNldHRpbmdzLmZpbGUsXG4gICAgICBuYW1lOiB0aGlzLnNldHRpbmdzLm5hbWUsXG4gICAgICBwcmVmaXg6IHRoaXMuc2V0dGluZ3MucHJlZml4LFxuICAgICAgc3VmZml4OiB0aGlzLnNldHRpbmdzLnN1ZmZpeCxcbiAgICAgIGVuY29kaW5nOiB0aGlzLnNldHRpbmdzLmVuY29kaW5nLFxuICAgICAgZW5jb2RpbmdRdWFsaXR5OiB0aGlzLnNldHRpbmdzLmVuY29kaW5nUXVhbGl0eSxcbiAgICAgIHRpbWVTdGFtcDogb3B0LnRpbWVTdGFtcCB8fCBnZXRUaW1lU3RhbXAoKSxcbiAgICAgIHRvdGFsRnJhbWVzOiBpc0Zpbml0ZSh0aGlzLnByb3BzLnRvdGFsRnJhbWVzKSA/IE1hdGgubWF4KDAsIHRoaXMucHJvcHMudG90YWxGcmFtZXMpIDogMTAwMFxuICAgIH07XG4gIH1cblxuICBleHBvcnRGcmFtZSAob3B0ID0ge30pIHtcbiAgICBpZiAoIXRoaXMuc2tldGNoKSByZXR1cm4gUHJvbWlzZS5hbGwoW10pO1xuICAgIGlmICh0eXBlb2YgdGhpcy5za2V0Y2gucHJlRXhwb3J0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLnNrZXRjaC5wcmVFeHBvcnQoKTtcbiAgICB9XG5cbiAgICAvLyBPcHRpb25zIGZvciBleHBvcnQgZnVuY3Rpb25cbiAgICBsZXQgZXhwb3J0T3B0cyA9IHRoaXMuX2NyZWF0ZUV4cG9ydE9wdGlvbnMob3B0KTtcblxuICAgIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICAgIGxldCBwID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgaWYgKGNsaWVudCAmJiBvcHQuY29tbWl0ICYmIHR5cGVvZiBjbGllbnQuY29tbWl0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBjb21taXRPcHRzID0gYXNzaWduKHt9LCBleHBvcnRPcHRzKTtcbiAgICAgIGNvbnN0IGhhc2ggPSBjbGllbnQuY29tbWl0KGNvbW1pdE9wdHMpO1xuICAgICAgaWYgKGlzUHJvbWlzZShoYXNoKSkgcCA9IGhhc2g7XG4gICAgICBlbHNlIHAgPSBQcm9taXNlLnJlc29sdmUoaGFzaCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHAudGhlbihoYXNoID0+IHtcbiAgICAgIHJldHVybiB0aGlzLl9kb0V4cG9ydEZyYW1lKGFzc2lnbih7fSwgZXhwb3J0T3B0cywgeyBoYXNoOiBoYXNoIHx8ICcnIH0pKTtcbiAgICB9KS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAvLyBNb3N0IGNvbW1vbiB1c2VjYXNlIGlzIHRvIGV4cG9ydCBhIHNpbmdsZSBsYXllcixcbiAgICAgIC8vIHNvIGxldCdzIG9wdGltaXplIHRoZSB1c2VyIGV4cGVyaWVuY2UgZm9yIHRoYXQuXG4gICAgICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMSkgcmV0dXJuIHJlc3VsdFswXTtcbiAgICAgIGVsc2UgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgfVxuXG4gIF9kb0V4cG9ydEZyYW1lIChleHBvcnRPcHRzID0ge30pIHtcbiAgICB0aGlzLl9wcm9wcy5leHBvcnRpbmcgPSB0cnVlO1xuXG4gICAgLy8gUmVzaXplIHRvIG91dHB1dCByZXNvbHV0aW9uXG4gICAgdGhpcy5yZXNpemUoKTtcblxuICAgIC8vIERyYXcgYXQgdGhpcyBvdXRwdXQgcmVzb2x1dGlvblxuICAgIGxldCBkcmF3UmVzdWx0ID0gdGhpcy5yZW5kZXIoKTtcblxuICAgIC8vIFRoZSBzZWxmIG93bmVkIGNhbnZhcyAobWF5IGJlIHVuZGVmaW5lZC4uLiEpXG4gICAgY29uc3QgY2FudmFzID0gdGhpcy5wcm9wcy5jYW52YXM7XG5cbiAgICAvLyBHZXQgbGlzdCBvZiByZXN1bHRzIGZyb20gcmVuZGVyXG4gICAgaWYgKHR5cGVvZiBkcmF3UmVzdWx0ID09PSAndW5kZWZpbmVkJykge1xuICAgICAgZHJhd1Jlc3VsdCA9IFsgY2FudmFzIF07XG4gICAgfVxuICAgIGRyYXdSZXN1bHQgPSBbXS5jb25jYXQoZHJhd1Jlc3VsdCkuZmlsdGVyKEJvb2xlYW4pO1xuXG4gICAgLy8gVHJhbnNmb3JtIHRoZSBjYW52YXMvZmlsZSBkZXNjcmlwdG9ycyBpbnRvIGEgY29uc2lzdGVudCBmb3JtYXQsXG4gICAgLy8gYW5kIHB1bGwgb3V0IGFueSBkYXRhIFVSTHMgZnJvbSBjYW52YXMgZWxlbWVudHNcbiAgICBkcmF3UmVzdWx0ID0gZHJhd1Jlc3VsdC5tYXAocmVzdWx0ID0+IHtcbiAgICAgIGNvbnN0IGhhc0RhdGFPYmplY3QgPSB0eXBlb2YgcmVzdWx0ID09PSAnb2JqZWN0JyAmJiByZXN1bHQgJiYgKCdkYXRhJyBpbiByZXN1bHQgfHwgJ2RhdGFVUkwnIGluIHJlc3VsdCk7XG4gICAgICBjb25zdCBkYXRhID0gaGFzRGF0YU9iamVjdCA/IHJlc3VsdC5kYXRhIDogcmVzdWx0O1xuICAgICAgY29uc3Qgb3B0cyA9IGhhc0RhdGFPYmplY3QgPyBhc3NpZ24oe30sIHJlc3VsdCwgeyBkYXRhIH0pIDogeyBkYXRhIH07XG4gICAgICBpZiAoaXNDYW52YXMoZGF0YSkpIHtcbiAgICAgICAgY29uc3QgZW5jb2RpbmcgPSBvcHRzLmVuY29kaW5nIHx8IGV4cG9ydE9wdHMuZW5jb2Rpbmc7XG4gICAgICAgIGNvbnN0IGVuY29kaW5nUXVhbGl0eSA9IGRlZmluZWQob3B0cy5lbmNvZGluZ1F1YWxpdHksIGV4cG9ydE9wdHMuZW5jb2RpbmdRdWFsaXR5LCAwLjk1KTtcbiAgICAgICAgY29uc3QgeyBkYXRhVVJMLCBleHRlbnNpb24sIHR5cGUgfSA9IGV4cG9ydENhbnZhcyhkYXRhLCB7IGVuY29kaW5nLCBlbmNvZGluZ1F1YWxpdHkgfSk7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG9wdHMsIHsgZGF0YVVSTCwgZXh0ZW5zaW9uLCB0eXBlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG9wdHM7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBOb3cgcmV0dXJuIHRvIHJlZ3VsYXIgcmVuZGVyaW5nIG1vZGVcbiAgICB0aGlzLl9wcm9wcy5leHBvcnRpbmcgPSBmYWxzZTtcbiAgICB0aGlzLnJlc2l6ZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG5cbiAgICAvLyBBbmQgbm93IHdlIGNhbiBzYXZlIGVhY2ggcmVzdWx0XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKGRyYXdSZXN1bHQubWFwKChyZXN1bHQsIGksIGxheWVyTGlzdCkgPT4ge1xuICAgICAgLy8gQnkgZGVmYXVsdCwgaWYgcmVuZGVyaW5nIG11bHRpcGxlIGxheWVycyB3ZSB3aWxsIGdpdmUgdGhlbSBpbmRpY2VzXG4gICAgICBjb25zdCBjdXJPcHQgPSBhc3NpZ24oe1xuICAgICAgICBleHRlbnNpb246ICcnLFxuICAgICAgICBwcmVmaXg6ICcnLFxuICAgICAgICBzdWZmaXg6ICcnXG4gICAgICB9LCBleHBvcnRPcHRzLCByZXN1bHQsIHtcbiAgICAgICAgbGF5ZXI6IGksXG4gICAgICAgIHRvdGFsTGF5ZXJzOiBsYXllckxpc3QubGVuZ3RoXG4gICAgICB9KTtcblxuICAgICAgLy8gSWYgZXhwb3J0IGlzIGV4cGxpY2l0bHkgbm90IHNhdmluZywgbWFrZSBzdXJlIG5vdGhpbmcgc2F2ZXNcbiAgICAgIC8vIE90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBsYXllciBzYXZlIG9wdGlvbiwgb3IgZmFsbGJhY2sgdG8gdHJ1ZVxuICAgICAgY29uc3Qgc2F2ZVBhcmFtID0gZXhwb3J0T3B0cy5zYXZlID09PSBmYWxzZSA/IGZhbHNlIDogcmVzdWx0LnNhdmU7XG4gICAgICBjdXJPcHQuc2F2ZSA9IHNhdmVQYXJhbSAhPT0gZmFsc2U7XG5cbiAgICAgIC8vIFJlc29sdmUgYSBmdWxsIGZpbGVuYW1lIGZyb20gYWxsIHRoZSBvcHRpb25zXG4gICAgICBjdXJPcHQuZmlsZW5hbWUgPSByZXNvbHZlRmlsZW5hbWUoY3VyT3B0KTtcblxuICAgICAgLy8gQ2xlYW4gdXAgc29tZSBwYXJhbWV0ZXJzIHRoYXQgbWF5IGJlIGFtYmlndW91cyB0byB0aGUgdXNlclxuICAgICAgZGVsZXRlIGN1ck9wdC5lbmNvZGluZztcbiAgICAgIGRlbGV0ZSBjdXJPcHQuZW5jb2RpbmdRdWFsaXR5O1xuXG4gICAgICAvLyBDbGVhbiBpdCB1cCBmdXJ0aGVyIGJ5IGp1c3QgcmVtb3ZpbmcgdW5kZWZpbmVkIHZhbHVlc1xuICAgICAgZm9yIChsZXQgayBpbiBjdXJPcHQpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjdXJPcHRba10gPT09ICd1bmRlZmluZWQnKSBkZWxldGUgY3VyT3B0W2tdO1xuICAgICAgfVxuXG4gICAgICBsZXQgc2F2ZVByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoe30pO1xuICAgICAgaWYgKGN1ck9wdC5zYXZlKSB7XG4gICAgICAgIC8vIFdoZXRoZXIgdG8gYWN0dWFsbHkgc2F2ZSAoZG93bmxvYWQpIHRoaXMgZnJhZ21lbnRcbiAgICAgICAgY29uc3QgZGF0YSA9IGN1ck9wdC5kYXRhO1xuICAgICAgICBpZiAoY3VyT3B0LmRhdGFVUkwpIHtcbiAgICAgICAgICBjb25zdCBkYXRhVVJMID0gY3VyT3B0LmRhdGFVUkw7XG4gICAgICAgICAgc2F2ZVByb21pc2UgPSBzYXZlRGF0YVVSTChkYXRhVVJMLCBjdXJPcHQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNhdmVQcm9taXNlID0gc2F2ZUZpbGUoZGF0YSwgY3VyT3B0KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHNhdmVQcm9taXNlLnRoZW4oc2F2ZVJlc3VsdCA9PiB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjdXJPcHQsIHNhdmVSZXN1bHQpO1xuICAgICAgfSk7XG4gICAgfSkpLnRoZW4oZXYgPT4ge1xuICAgICAgY29uc3Qgc2F2ZWRFdmVudHMgPSBldi5maWx0ZXIoZSA9PiBlLnNhdmUpO1xuICAgICAgaWYgKHNhdmVkRXZlbnRzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gTG9nIHRoZSBzYXZlZCBleHBvcnRzXG4gICAgICAgIGNvbnN0IGV2ZW50V2l0aE91dHB1dCA9IHNhdmVkRXZlbnRzLmZpbmQoZSA9PiBlLm91dHB1dE5hbWUpO1xuICAgICAgICBjb25zdCBpc0NsaWVudCA9IHNhdmVkRXZlbnRzLnNvbWUoZSA9PiBlLmNsaWVudCk7XG4gICAgICAgIGNvbnN0IGlzU3RyZWFtaW5nID0gc2F2ZWRFdmVudHMuc29tZShlID0+IGUuc3RyZWFtKTtcbiAgICAgICAgbGV0IGl0ZW07XG4gICAgICAgIC8vIG1hbnkgZmlsZXMsIGp1c3QgbG9nIGhvdyBtYW55IHdlcmUgZXhwb3J0ZWRcbiAgICAgICAgaWYgKHNhdmVkRXZlbnRzLmxlbmd0aCA+IDEpIGl0ZW0gPSBzYXZlZEV2ZW50cy5sZW5ndGg7XG4gICAgICAgIC8vIGluIENMSSwgd2Uga25vdyBleGFjdCBwYXRoIGRpcm5hbWVcbiAgICAgICAgZWxzZSBpZiAoZXZlbnRXaXRoT3V0cHV0KSBpdGVtID0gYCR7ZXZlbnRXaXRoT3V0cHV0Lm91dHB1dE5hbWV9LyR7c2F2ZWRFdmVudHNbMF0uZmlsZW5hbWV9YDtcbiAgICAgICAgLy8gaW4gYnJvd3Nlciwgd2UgY2FuIG9ubHkga25vdyBpdCB3ZW50IHRvIFwiYnJvd3NlciBkb3dubG9hZCBmb2xkZXJcIlxuICAgICAgICBlbHNlIGl0ZW0gPSBgJHtzYXZlZEV2ZW50c1swXS5maWxlbmFtZX1gO1xuICAgICAgICBsZXQgb2ZTZXEgPSAnJztcbiAgICAgICAgaWYgKGV4cG9ydE9wdHMuc2VxdWVuY2UpIHtcbiAgICAgICAgICBjb25zdCBoYXNUb3RhbEZyYW1lcyA9IGlzRmluaXRlKHRoaXMucHJvcHMudG90YWxGcmFtZXMpO1xuICAgICAgICAgIG9mU2VxID0gaGFzVG90YWxGcmFtZXMgPyBgIChmcmFtZSAke2V4cG9ydE9wdHMuZnJhbWUgKyAxfSAvICR7dGhpcy5wcm9wcy50b3RhbEZyYW1lc30pYCA6IGAgKGZyYW1lICR7ZXhwb3J0T3B0cy5mcmFtZX0pYDtcbiAgICAgICAgfSBlbHNlIGlmIChzYXZlZEV2ZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgb2ZTZXEgPSBgIGZpbGVzYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjbGllbnQgPSBpc0NsaWVudCA/ICdjYW52YXMtc2tldGNoLWNsaScgOiAnY2FudmFzLXNrZXRjaCc7XG4gICAgICAgIGNvbnN0IGFjdGlvbiA9IGlzU3RyZWFtaW5nID8gJ1N0cmVhbWluZyBpbnRvJyA6ICdFeHBvcnRlZCc7XG4gICAgICAgIGNvbnNvbGUubG9nKGAlY1ske2NsaWVudH1dJWMgJHthY3Rpb259ICVjJHtpdGVtfSVjJHtvZlNlcX1gLCAnY29sb3I6ICM4ZThlOGU7JywgJ2NvbG9yOiBpbml0aWFsOycsICdmb250LXdlaWdodDogYm9sZDsnLCAnZm9udC13ZWlnaHQ6IGluaXRpYWw7Jyk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHRoaXMuc2tldGNoLnBvc3RFeHBvcnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5za2V0Y2gucG9zdEV4cG9ydCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV2O1xuICAgIH0pO1xuICB9XG5cbiAgX3dyYXBDb250ZXh0U2NhbGUgKGNiKSB7XG4gICAgdGhpcy5fcHJlUmVuZGVyKCk7XG4gICAgY2IodGhpcy5wcm9wcyk7XG4gICAgdGhpcy5fcG9zdFJlbmRlcigpO1xuICB9XG5cbiAgX3ByZVJlbmRlciAoKSB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gU2NhbGUgY29udGV4dCBmb3IgdW5pdCBzaXppbmdcbiAgICBpZiAoIXRoaXMucHJvcHMuZ2wgJiYgcHJvcHMuY29udGV4dCAmJiAhcHJvcHMucDUpIHtcbiAgICAgIHByb3BzLmNvbnRleHQuc2F2ZSgpO1xuICAgICAgaWYgKHRoaXMuc2V0dGluZ3Muc2NhbGVDb250ZXh0ICE9PSBmYWxzZSkge1xuICAgICAgICBwcm9wcy5jb250ZXh0LnNjYWxlKHByb3BzLnNjYWxlWCwgcHJvcHMuc2NhbGVZKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHByb3BzLnA1KSB7XG4gICAgICBwcm9wcy5wNS5zY2FsZShwcm9wcy5zY2FsZVggLyBwcm9wcy5waXhlbFJhdGlvLCBwcm9wcy5zY2FsZVkgLyBwcm9wcy5waXhlbFJhdGlvKTtcbiAgICB9XG4gIH1cblxuICBfcG9zdFJlbmRlciAoKSB7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgaWYgKCF0aGlzLnByb3BzLmdsICYmIHByb3BzLmNvbnRleHQgJiYgIXByb3BzLnA1KSB7XG4gICAgICBwcm9wcy5jb250ZXh0LnJlc3RvcmUoKTtcbiAgICB9XG5cbiAgICAvLyBGbHVzaCBieSBkZWZhdWx0LCB0aGlzIG1heSBiZSByZXZpc2l0ZWQgYXQgYSBsYXRlciBwb2ludC5cbiAgICAvLyBXZSBkbyB0aGlzIHRvIGVuc3VyZSB0b0RhdGFVUkwgY2FuIGJlIGNhbGxlZCBpbW1lZGlhdGVseSBhZnRlci5cbiAgICAvLyBNb3N0IGxpa2VseSBicm93c2VycyBhbHJlYWR5IGhhbmRsZSB0aGlzLCBzbyB3ZSBtYXkgcmV2aXNpdCB0aGlzIGFuZFxuICAgIC8vIHJlbW92ZSBpdCBpZiBpdCBpbXByb3ZlcyBwZXJmb3JtYW5jZSB3aXRob3V0IGFueSB1c2FiaWxpdHkgaXNzdWVzLlxuICAgIGlmIChwcm9wcy5nbCAmJiB0aGlzLnNldHRpbmdzLmZsdXNoICE9PSBmYWxzZSAmJiAhcHJvcHMucDUpIHtcbiAgICAgIHByb3BzLmdsLmZsdXNoKCk7XG4gICAgfVxuICB9XG5cbiAgdGljayAoKSB7XG4gICAgaWYgKHRoaXMuc2tldGNoICYmIHR5cGVvZiB0aGlzLnNrZXRjaC50aWNrID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl9wcmVSZW5kZXIoKTtcbiAgICAgIHRoaXMuc2tldGNoLnRpY2sodGhpcy5wcm9wcyk7XG4gICAgICB0aGlzLl9wb3N0UmVuZGVyKCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyICgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5wNSkge1xuICAgICAgdGhpcy5fbGFzdFJlZHJhd1Jlc3VsdCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMucHJvcHMucDUucmVkcmF3KCk7XG4gICAgICByZXR1cm4gdGhpcy5fbGFzdFJlZHJhd1Jlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuc3VibWl0RHJhd0NhbGwoKTtcbiAgICB9XG4gIH1cblxuICBzdWJtaXREcmF3Q2FsbCAoKSB7XG4gICAgaWYgKCF0aGlzLnNrZXRjaCkgcmV0dXJuO1xuXG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuICAgIHRoaXMuX3ByZVJlbmRlcigpO1xuXG4gICAgbGV0IGRyYXdSZXN1bHQ7XG5cbiAgICBpZiAodHlwZW9mIHRoaXMuc2tldGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBkcmF3UmVzdWx0ID0gdGhpcy5za2V0Y2gocHJvcHMpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuc2tldGNoLnJlbmRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZHJhd1Jlc3VsdCA9IHRoaXMuc2tldGNoLnJlbmRlcihwcm9wcyk7XG4gICAgfVxuXG4gICAgdGhpcy5fcG9zdFJlbmRlcigpO1xuXG4gICAgcmV0dXJuIGRyYXdSZXN1bHQ7XG4gIH1cblxuICB1cGRhdGUgKG9wdCA9IHt9KSB7XG4gICAgLy8gQ3VycmVudGx5IHVwZGF0ZSgpIGlzIG9ubHkgZm9jdXNlZCBvbiByZXNpemluZyxcbiAgICAvLyBidXQgbGF0ZXIgd2Ugd2lsbCBzdXBwb3J0IG90aGVyIG9wdGlvbnMgbGlrZSBzd2l0Y2hpbmdcbiAgICAvLyBmcmFtZXMgYW5kIHN1Y2guXG4gICAgY29uc3Qgbm90WWV0U3VwcG9ydGVkID0gW1xuICAgICAgJ2FuaW1hdGUnXG4gICAgXTtcblxuICAgIE9iamVjdC5rZXlzKG9wdCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgaWYgKG5vdFlldFN1cHBvcnRlZC5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFNvcnJ5LCB0aGUgeyAke2tleX0gfSBvcHRpb24gaXMgbm90IHlldCBzdXBwb3J0ZWQgd2l0aCB1cGRhdGUoKS5gKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIGNvbnN0IG9sZENhbnZhcyA9IHRoaXMuX3NldHRpbmdzLmNhbnZhcztcbiAgICBjb25zdCBvbGRDb250ZXh0ID0gdGhpcy5fc2V0dGluZ3MuY29udGV4dDtcblxuICAgIC8vIE1lcmdlIG5ldyBvcHRpb25zIGludG8gc2V0dGluZ3NcbiAgICBmb3IgKGxldCBrZXkgaW4gb3B0KSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG9wdFtrZXldO1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcpIHsgLy8gaWdub3JlIHVuZGVmaW5lZFxuICAgICAgICB0aGlzLl9zZXR0aW5nc1trZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gTWVyZ2UgaW4gdGltZSBwcm9wc1xuICAgIGNvbnN0IHRpbWVPcHRzID0gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fc2V0dGluZ3MsIG9wdCk7XG4gICAgaWYgKCd0aW1lJyBpbiBvcHQgJiYgJ2ZyYW1lJyBpbiBvcHQpIHRocm93IG5ldyBFcnJvcignWW91IHNob3VsZCBzcGVjaWZ5IHsgdGltZSB9IG9yIHsgZnJhbWUgfSBidXQgbm90IGJvdGgnKTtcbiAgICBlbHNlIGlmICgndGltZScgaW4gb3B0KSBkZWxldGUgdGltZU9wdHMuZnJhbWU7XG4gICAgZWxzZSBpZiAoJ2ZyYW1lJyBpbiBvcHQpIGRlbGV0ZSB0aW1lT3B0cy50aW1lO1xuICAgIGlmICgnZHVyYXRpb24nIGluIG9wdCAmJiAndG90YWxGcmFtZXMnIGluIG9wdCkgdGhyb3cgbmV3IEVycm9yKCdZb3Ugc2hvdWxkIHNwZWNpZnkgeyBkdXJhdGlvbiB9IG9yIHsgdG90YWxGcmFtZXMgfSBidXQgbm90IGJvdGgnKTtcbiAgICBlbHNlIGlmICgnZHVyYXRpb24nIGluIG9wdCkgZGVsZXRlIHRpbWVPcHRzLnRvdGFsRnJhbWVzO1xuICAgIGVsc2UgaWYgKCd0b3RhbEZyYW1lcycgaW4gb3B0KSBkZWxldGUgdGltZU9wdHMuZHVyYXRpb247XG5cbiAgICAvLyBNZXJnZSBpbiB1c2VyIGRhdGEgd2l0aG91dCBjb3B5aW5nXG4gICAgaWYgKCdkYXRhJyBpbiBvcHQpIHRoaXMuX3Byb3BzLmRhdGEgPSBvcHQuZGF0YTtcblxuICAgIGNvbnN0IHRpbWVQcm9wcyA9IHRoaXMuZ2V0VGltZVByb3BzKHRpbWVPcHRzKTtcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX3Byb3BzLCB0aW1lUHJvcHMpO1xuXG4gICAgLy8gSWYgZWl0aGVyIGNhbnZhcyBvciBjb250ZXh0IGlzIGNoYW5nZWQsIHdlIHNob3VsZCByZS11cGRhdGVcbiAgICBpZiAob2xkQ2FudmFzICE9PSB0aGlzLl9zZXR0aW5ncy5jYW52YXMgfHwgb2xkQ29udGV4dCAhPT0gdGhpcy5fc2V0dGluZ3MuY29udGV4dCkge1xuICAgICAgY29uc3QgeyBjYW52YXMsIGNvbnRleHQgfSA9IGNyZWF0ZUNhbnZhcyh0aGlzLl9zZXR0aW5ncyk7XG5cbiAgICAgIHRoaXMucHJvcHMuY2FudmFzID0gY2FudmFzO1xuICAgICAgdGhpcy5wcm9wcy5jb250ZXh0ID0gY29udGV4dDtcblxuICAgICAgLy8gRGVsZXRlIG9yIGFkZCBhICdnbCcgcHJvcCBmb3IgY29udmVuaWVuY2VcbiAgICAgIHRoaXMuX3NldHVwR0xLZXkoKTtcblxuICAgICAgLy8gUmUtbW91bnQgdGhlIG5ldyBjYW52YXMgaWYgaXQgaGFzIG5vIHBhcmVudFxuICAgICAgdGhpcy5fYXBwZW5kQ2FudmFzSWZOZWVkZWQoKTtcbiAgICB9XG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgdG8gc3VwcG9ydCBQNS5qc1xuICAgIGlmIChvcHQucDUgJiYgdHlwZW9mIG9wdC5wNSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5wcm9wcy5wNSA9IG9wdC5wNTtcbiAgICAgIHRoaXMucHJvcHMucDUuZHJhdyA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2lzUDVSZXNpemluZykgcmV0dXJuO1xuICAgICAgICB0aGlzLl9sYXN0UmVkcmF3UmVzdWx0ID0gdGhpcy5zdWJtaXREcmF3Q2FsbCgpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgcGxheWluZyBzdGF0ZSBpZiBuZWNlc3NhcnlcbiAgICBpZiAoJ3BsYXlpbmcnIGluIG9wdCkge1xuICAgICAgaWYgKG9wdC5wbGF5aW5nKSB0aGlzLnBsYXkoKTtcbiAgICAgIGVsc2UgdGhpcy5wYXVzZSgpO1xuICAgIH1cblxuICAgIGNoZWNrU2V0dGluZ3ModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgLy8gRHJhdyBuZXcgZnJhbWVcbiAgICB0aGlzLnJlc2l6ZSgpO1xuICAgIHRoaXMucmVuZGVyKCk7XG4gICAgcmV0dXJuIHRoaXMucHJvcHM7XG4gIH1cblxuICByZXNpemUgKCkge1xuICAgIGNvbnN0IG9sZFNpemVzID0gdGhpcy5fZ2V0U2l6ZVByb3BzKCk7XG5cbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuc2V0dGluZ3M7XG4gICAgY29uc3QgcHJvcHMgPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gUmVjb21wdXRlIG5ldyBwcm9wZXJ0aWVzIGJhc2VkIG9uIGN1cnJlbnQgc2V0dXBcbiAgICBjb25zdCBuZXdQcm9wcyA9IHJlc2l6ZUNhbnZhcyhwcm9wcywgc2V0dGluZ3MpO1xuXG4gICAgLy8gQXNzaWduIHRvIGN1cnJlbnQgcHJvcHNcbiAgICBPYmplY3QuYXNzaWduKHRoaXMuX3Byb3BzLCBuZXdQcm9wcyk7XG5cbiAgICAvLyBOb3cgd2UgYWN0dWFsbHkgdXBkYXRlIHRoZSBjYW52YXMgd2lkdGgvaGVpZ2h0IGFuZCBzdHlsZSBwcm9wc1xuICAgIGNvbnN0IHtcbiAgICAgIHBpeGVsUmF0aW8sXG4gICAgICBjYW52YXNXaWR0aCxcbiAgICAgIGNhbnZhc0hlaWdodCxcbiAgICAgIHN0eWxlV2lkdGgsXG4gICAgICBzdHlsZUhlaWdodFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgLy8gVXBkYXRlIGNhbnZhcyBzZXR0aW5nc1xuICAgIGNvbnN0IGNhbnZhcyA9IHRoaXMucHJvcHMuY2FudmFzO1xuICAgIGlmIChjYW52YXMgJiYgc2V0dGluZ3MucmVzaXplQ2FudmFzICE9PSBmYWxzZSkge1xuICAgICAgaWYgKHByb3BzLnA1KSB7XG4gICAgICAgIC8vIFA1LmpzIHNwZWNpZmljIGVkZ2UgY2FzZVxuICAgICAgICBpZiAoY2FudmFzLndpZHRoICE9PSBjYW52YXNXaWR0aCB8fCBjYW52YXMuaGVpZ2h0ICE9PSBjYW52YXNIZWlnaHQpIHtcbiAgICAgICAgICB0aGlzLl9pc1A1UmVzaXppbmcgPSB0cnVlO1xuICAgICAgICAgIC8vIFRoaXMgY2F1c2VzIGEgcmUtZHJhdyA6XFwgc28gd2UgaWdub3JlIGRyYXdzIGluIHRoZSBtZWFuIHRpbWUuLi4gc29ydGEgaGFja3lcbiAgICAgICAgICBwcm9wcy5wNS5waXhlbERlbnNpdHkocGl4ZWxSYXRpbyk7XG4gICAgICAgICAgcHJvcHMucDUucmVzaXplQ2FudmFzKGNhbnZhc1dpZHRoIC8gcGl4ZWxSYXRpbywgY2FudmFzSGVpZ2h0IC8gcGl4ZWxSYXRpbywgZmFsc2UpO1xuICAgICAgICAgIHRoaXMuX2lzUDVSZXNpemluZyA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBGb3JjZSBjYW52YXMgc2l6ZVxuICAgICAgICBpZiAoY2FudmFzLndpZHRoICE9PSBjYW52YXNXaWR0aCkgY2FudmFzLndpZHRoID0gY2FudmFzV2lkdGg7XG4gICAgICAgIGlmIChjYW52YXMuaGVpZ2h0ICE9PSBjYW52YXNIZWlnaHQpIGNhbnZhcy5oZWlnaHQgPSBjYW52YXNIZWlnaHQ7XG4gICAgICB9XG4gICAgICAvLyBVcGRhdGUgY2FudmFzIHN0eWxlXG4gICAgICBpZiAoaXNCcm93c2VyKCkgJiYgc2V0dGluZ3Muc3R5bGVDYW52YXMgIT09IGZhbHNlKSB7XG4gICAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IGAke3N0eWxlV2lkdGh9cHhgO1xuICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7c3R5bGVIZWlnaHR9cHhgO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG5ld1NpemVzID0gdGhpcy5fZ2V0U2l6ZVByb3BzKCk7XG4gICAgbGV0IGNoYW5nZWQgPSAhZGVlcEVxdWFsKG9sZFNpemVzLCBuZXdTaXplcyk7XG4gICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgIHRoaXMuX3NpemVDaGFuZ2VkKCk7XG4gICAgfVxuICAgIHJldHVybiBjaGFuZ2VkO1xuICB9XG5cbiAgX3NpemVDaGFuZ2VkICgpIHtcbiAgICAvLyBTZW5kIHJlc2l6ZSBldmVudCB0byBza2V0Y2hcbiAgICBpZiAodGhpcy5za2V0Y2ggJiYgdHlwZW9mIHRoaXMuc2tldGNoLnJlc2l6ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5za2V0Y2gucmVzaXplKHRoaXMucHJvcHMpO1xuICAgIH1cbiAgfVxuXG4gIGFuaW1hdGUgKCkge1xuICAgIGlmICghdGhpcy5wcm9wcy5wbGF5aW5nKSByZXR1cm47XG4gICAgaWYgKCFpc0Jyb3dzZXIoKSkge1xuICAgICAgY29uc29sZS5lcnJvcignW2NhbnZhcy1za2V0Y2hdIFdBUk46IEFuaW1hdGlvbiBpbiBOb2RlLmpzIGlzIG5vdCB5ZXQgc3VwcG9ydGVkJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuX3JhZiA9IHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5fYW5pbWF0ZUhhbmRsZXIpO1xuXG4gICAgbGV0IG5vdyA9IHJpZ2h0Tm93KCk7XG5cbiAgICBjb25zdCBmcHMgPSB0aGlzLnByb3BzLmZwcztcbiAgICBjb25zdCBmcmFtZUludGVydmFsTVMgPSAxMDAwIC8gZnBzO1xuICAgIGxldCBkZWx0YVRpbWVNUyA9IG5vdyAtIHRoaXMuX2xhc3RUaW1lO1xuXG4gICAgY29uc3QgZHVyYXRpb24gPSB0aGlzLnByb3BzLmR1cmF0aW9uO1xuICAgIGNvbnN0IGhhc0R1cmF0aW9uID0gdHlwZW9mIGR1cmF0aW9uID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZShkdXJhdGlvbik7XG5cbiAgICBsZXQgaXNOZXdGcmFtZSA9IHRydWU7XG4gICAgY29uc3QgcGxheWJhY2tSYXRlID0gdGhpcy5zZXR0aW5ncy5wbGF5YmFja1JhdGU7XG4gICAgaWYgKHBsYXliYWNrUmF0ZSA9PT0gJ2ZpeGVkJykge1xuICAgICAgZGVsdGFUaW1lTVMgPSBmcmFtZUludGVydmFsTVM7XG4gICAgfSBlbHNlIGlmIChwbGF5YmFja1JhdGUgPT09ICd0aHJvdHRsZScpIHtcbiAgICAgIGlmIChkZWx0YVRpbWVNUyA+IGZyYW1lSW50ZXJ2YWxNUykge1xuICAgICAgICBub3cgPSBub3cgLSAoZGVsdGFUaW1lTVMgJSBmcmFtZUludGVydmFsTVMpO1xuICAgICAgICB0aGlzLl9sYXN0VGltZSA9IG5vdztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlzTmV3RnJhbWUgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGFzdFRpbWUgPSBub3c7XG4gICAgfVxuXG4gICAgY29uc3QgZGVsdGFUaW1lID0gZGVsdGFUaW1lTVMgLyAxMDAwO1xuICAgIGxldCBuZXdUaW1lID0gdGhpcy5wcm9wcy50aW1lICsgZGVsdGFUaW1lICogdGhpcy5wcm9wcy50aW1lU2NhbGU7XG5cbiAgICAvLyBIYW5kbGUgcmV2ZXJzZSB0aW1lIHNjYWxlXG4gICAgaWYgKG5ld1RpbWUgPCAwICYmIGhhc0R1cmF0aW9uKSB7XG4gICAgICBuZXdUaW1lID0gZHVyYXRpb24gKyBuZXdUaW1lO1xuICAgIH1cblxuICAgIC8vIFJlLXN0YXJ0IGFuaW1hdGlvblxuICAgIGxldCBpc0ZpbmlzaGVkID0gZmFsc2U7XG4gICAgbGV0IGlzTG9vcFN0YXJ0ID0gZmFsc2U7XG5cbiAgICBjb25zdCBsb29waW5nID0gdGhpcy5zZXR0aW5ncy5sb29wICE9PSBmYWxzZTtcblxuICAgIGlmIChoYXNEdXJhdGlvbiAmJiBuZXdUaW1lID49IGR1cmF0aW9uKSB7XG4gICAgICAvLyBSZS1zdGFydCBhbmltYXRpb25cbiAgICAgIGlmIChsb29waW5nKSB7XG4gICAgICAgIGlzTmV3RnJhbWUgPSB0cnVlO1xuICAgICAgICBuZXdUaW1lID0gbmV3VGltZSAlIGR1cmF0aW9uO1xuICAgICAgICBpc0xvb3BTdGFydCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpc05ld0ZyYW1lID0gZmFsc2U7XG4gICAgICAgIG5ld1RpbWUgPSBkdXJhdGlvbjtcbiAgICAgICAgaXNGaW5pc2hlZCA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3NpZ25hbEVuZCgpO1xuICAgIH1cblxuICAgIGlmIChpc05ld0ZyYW1lKSB7XG4gICAgICB0aGlzLnByb3BzLmRlbHRhVGltZSA9IGRlbHRhVGltZTtcbiAgICAgIHRoaXMucHJvcHMudGltZSA9IG5ld1RpbWU7XG4gICAgICB0aGlzLnByb3BzLnBsYXloZWFkID0gdGhpcy5fY29tcHV0ZVBsYXloZWFkKG5ld1RpbWUsIGR1cmF0aW9uKTtcbiAgICAgIGNvbnN0IGxhc3RGcmFtZSA9IHRoaXMucHJvcHMuZnJhbWU7XG4gICAgICB0aGlzLnByb3BzLmZyYW1lID0gdGhpcy5fY29tcHV0ZUN1cnJlbnRGcmFtZSgpO1xuICAgICAgaWYgKGlzTG9vcFN0YXJ0KSB0aGlzLl9zaWduYWxCZWdpbigpO1xuICAgICAgaWYgKGxhc3RGcmFtZSAhPT0gdGhpcy5wcm9wcy5mcmFtZSkgdGhpcy50aWNrKCk7XG4gICAgICB0aGlzLnJlbmRlcigpO1xuICAgICAgdGhpcy5wcm9wcy5kZWx0YVRpbWUgPSAwO1xuICAgIH1cblxuICAgIGlmIChpc0ZpbmlzaGVkKSB7XG4gICAgICB0aGlzLnBhdXNlKCk7XG4gICAgfVxuICB9XG5cbiAgZGlzcGF0Y2ggKGNiKSB7XG4gICAgaWYgKHR5cGVvZiBjYiAhPT0gJ2Z1bmN0aW9uJykgdGhyb3cgbmV3IEVycm9yKCdtdXN0IHBhc3MgZnVuY3Rpb24gaW50byBkaXNwYXRjaCgpJyk7XG4gICAgY2IodGhpcy5wcm9wcyk7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxuXG4gIG1vdW50ICgpIHtcbiAgICB0aGlzLl9hcHBlbmRDYW52YXNJZk5lZWRlZCgpO1xuICB9XG5cbiAgdW5tb3VudCAoKSB7XG4gICAgaWYgKGlzQnJvd3NlcigpKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fcmVzaXplSGFuZGxlcik7XG4gICAgICB0aGlzLl9rZXlib2FyZFNob3J0Y3V0cy5kZXRhY2goKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucHJvcHMuY2FudmFzLnBhcmVudEVsZW1lbnQpIHtcbiAgICAgIHRoaXMucHJvcHMuY2FudmFzLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcy5wcm9wcy5jYW52YXMpO1xuICAgIH1cbiAgfVxuXG4gIF9hcHBlbmRDYW52YXNJZk5lZWRlZCAoKSB7XG4gICAgaWYgKCFpc0Jyb3dzZXIoKSkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnNldHRpbmdzLnBhcmVudCAhPT0gZmFsc2UgJiYgKHRoaXMucHJvcHMuY2FudmFzICYmICF0aGlzLnByb3BzLmNhbnZhcy5wYXJlbnRFbGVtZW50KSkge1xuICAgICAgY29uc3QgZGVmYXVsdFBhcmVudCA9IHRoaXMuc2V0dGluZ3MucGFyZW50IHx8IGRvY3VtZW50LmJvZHk7XG4gICAgICBkZWZhdWx0UGFyZW50LmFwcGVuZENoaWxkKHRoaXMucHJvcHMuY2FudmFzKTtcbiAgICB9XG4gIH1cblxuICBfc2V0dXBHTEtleSAoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuY29udGV4dCkge1xuICAgICAgaWYgKGlzV2ViR0xDb250ZXh0KHRoaXMucHJvcHMuY29udGV4dCkpIHtcbiAgICAgICAgdGhpcy5fcHJvcHMuZ2wgPSB0aGlzLnByb3BzLmNvbnRleHQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWxldGUgdGhpcy5fcHJvcHMuZ2w7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZ2V0VGltZVByb3BzIChzZXR0aW5ncyA9IHt9KSB7XG4gICAgLy8gR2V0IHRpbWluZyBkYXRhXG4gICAgbGV0IGR1cmF0aW9uID0gc2V0dGluZ3MuZHVyYXRpb247XG4gICAgbGV0IHRvdGFsRnJhbWVzID0gc2V0dGluZ3MudG90YWxGcmFtZXM7XG4gICAgY29uc3QgdGltZVNjYWxlID0gZGVmaW5lZChzZXR0aW5ncy50aW1lU2NhbGUsIDEpO1xuICAgIGNvbnN0IGZwcyA9IGRlZmluZWQoc2V0dGluZ3MuZnBzLCAyNCk7XG4gICAgY29uc3QgaGFzRHVyYXRpb24gPSB0eXBlb2YgZHVyYXRpb24gPT09ICdudW1iZXInICYmIGlzRmluaXRlKGR1cmF0aW9uKTtcbiAgICBjb25zdCBoYXNUb3RhbEZyYW1lcyA9IHR5cGVvZiB0b3RhbEZyYW1lcyA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUodG90YWxGcmFtZXMpO1xuXG4gICAgY29uc3QgdG90YWxGcmFtZXNGcm9tRHVyYXRpb24gPSBoYXNEdXJhdGlvbiA/IE1hdGguZmxvb3IoZnBzICogZHVyYXRpb24pIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IGR1cmF0aW9uRnJvbVRvdGFsRnJhbWVzID0gaGFzVG90YWxGcmFtZXMgPyAodG90YWxGcmFtZXMgLyBmcHMpIDogdW5kZWZpbmVkO1xuICAgIGlmIChoYXNEdXJhdGlvbiAmJiBoYXNUb3RhbEZyYW1lcyAmJiB0b3RhbEZyYW1lc0Zyb21EdXJhdGlvbiAhPT0gdG90YWxGcmFtZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IHNob3VsZCBzcGVjaWZ5IGVpdGhlciBkdXJhdGlvbiBvciB0b3RhbEZyYW1lcywgYnV0IG5vdCBib3RoLiBPciwgdGhleSBtdXN0IG1hdGNoIGV4YWN0bHkuJyk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzZXR0aW5ncy5kaW1lbnNpb25zID09PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygc2V0dGluZ3MudW5pdHMgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBjb25zb2xlLndhcm4oYFlvdSd2ZSBzcGVjaWZpZWQgYSB7IHVuaXRzIH0gc2V0dGluZyBidXQgbm8geyBkaW1lbnNpb24gfSwgc28gdGhlIHVuaXRzIHdpbGwgYmUgaWdub3JlZC5gKTtcbiAgICB9XG5cbiAgICB0b3RhbEZyYW1lcyA9IGRlZmluZWQodG90YWxGcmFtZXMsIHRvdGFsRnJhbWVzRnJvbUR1cmF0aW9uLCBJbmZpbml0eSk7XG4gICAgZHVyYXRpb24gPSBkZWZpbmVkKGR1cmF0aW9uLCBkdXJhdGlvbkZyb21Ub3RhbEZyYW1lcywgSW5maW5pdHkpO1xuXG4gICAgY29uc3Qgc3RhcnRUaW1lID0gc2V0dGluZ3MudGltZTtcbiAgICBjb25zdCBzdGFydEZyYW1lID0gc2V0dGluZ3MuZnJhbWU7XG4gICAgY29uc3QgaGFzU3RhcnRUaW1lID0gdHlwZW9mIHN0YXJ0VGltZSA9PT0gJ251bWJlcicgJiYgaXNGaW5pdGUoc3RhcnRUaW1lKTtcbiAgICBjb25zdCBoYXNTdGFydEZyYW1lID0gdHlwZW9mIHN0YXJ0RnJhbWUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHN0YXJ0RnJhbWUpO1xuXG4gICAgLy8gc3RhcnQgYXQgemVybyB1bmxlc3MgdXNlciBzcGVjaWZpZXMgZnJhbWUgb3IgdGltZSAoYnV0IG5vdCBib3RoIG1pc21hdGNoZWQpXG4gICAgbGV0IHRpbWUgPSAwO1xuICAgIGxldCBmcmFtZSA9IDA7XG4gICAgbGV0IHBsYXloZWFkID0gMDtcbiAgICBpZiAoaGFzU3RhcnRUaW1lICYmIGhhc1N0YXJ0RnJhbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignWW91IHNob3VsZCBzcGVjaWZ5IGVpdGhlciBzdGFydCBmcmFtZSBvciB0aW1lLCBidXQgbm90IGJvdGguJyk7XG4gICAgfSBlbHNlIGlmIChoYXNTdGFydFRpbWUpIHtcbiAgICAgIC8vIFVzZXIgc3BlY2lmaWVzIHRpbWUsIHdlIGluZmVyIGZyYW1lcyBmcm9tIEZQU1xuICAgICAgdGltZSA9IHN0YXJ0VGltZTtcbiAgICAgIHBsYXloZWFkID0gdGhpcy5fY29tcHV0ZVBsYXloZWFkKHRpbWUsIGR1cmF0aW9uKTtcbiAgICAgIGZyYW1lID0gdGhpcy5fY29tcHV0ZUZyYW1lKFxuICAgICAgICBwbGF5aGVhZCwgdGltZSxcbiAgICAgICAgdG90YWxGcmFtZXMsIGZwc1xuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKGhhc1N0YXJ0RnJhbWUpIHtcbiAgICAgIC8vIFVzZXIgc3BlY2lmaWVzIGZyYW1lIG51bWJlciwgd2UgaW5mZXIgdGltZSBmcm9tIEZQU1xuICAgICAgZnJhbWUgPSBzdGFydEZyYW1lO1xuICAgICAgdGltZSA9IGZyYW1lIC8gZnBzO1xuICAgICAgcGxheWhlYWQgPSB0aGlzLl9jb21wdXRlUGxheWhlYWQodGltZSwgZHVyYXRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBwbGF5aGVhZCxcbiAgICAgIHRpbWUsXG4gICAgICBmcmFtZSxcbiAgICAgIGR1cmF0aW9uLFxuICAgICAgdG90YWxGcmFtZXMsXG4gICAgICBmcHMsXG4gICAgICB0aW1lU2NhbGVcbiAgICB9O1xuICB9XG5cbiAgc2V0dXAgKHNldHRpbmdzID0ge30pIHtcbiAgICBpZiAodGhpcy5za2V0Y2gpIHRocm93IG5ldyBFcnJvcignTXVsdGlwbGUgc2V0dXAoKSBjYWxscyBub3QgeWV0IHN1cHBvcnRlZC4nKTtcblxuICAgIHRoaXMuX3NldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgc2V0dGluZ3MsIHRoaXMuX3NldHRpbmdzKTtcblxuICAgIGNoZWNrU2V0dGluZ3ModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgLy8gR2V0IGluaXRpYWwgY2FudmFzICYgY29udGV4dFxuICAgIGNvbnN0IHsgY29udGV4dCwgY2FudmFzIH0gPSBjcmVhdGVDYW52YXModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgY29uc3QgdGltZVByb3BzID0gdGhpcy5nZXRUaW1lUHJvcHModGhpcy5fc2V0dGluZ3MpO1xuXG4gICAgLy8gSW5pdGlhbCByZW5kZXIgc3RhdGUgZmVhdHVyZXNcbiAgICB0aGlzLl9wcm9wcyA9IHtcbiAgICAgIC4uLnRpbWVQcm9wcyxcbiAgICAgIGNhbnZhcyxcbiAgICAgIGNvbnRleHQsXG4gICAgICBkZWx0YVRpbWU6IDAsXG4gICAgICBzdGFydGVkOiBmYWxzZSxcbiAgICAgIGV4cG9ydGluZzogZmFsc2UsXG4gICAgICBwbGF5aW5nOiBmYWxzZSxcbiAgICAgIHJlY29yZGluZzogZmFsc2UsXG4gICAgICBzZXR0aW5nczogdGhpcy5zZXR0aW5ncyxcbiAgICAgIGRhdGE6IHRoaXMuc2V0dGluZ3MuZGF0YSxcblxuICAgICAgLy8gRXhwb3J0IHNvbWUgc3BlY2lmaWMgYWN0aW9ucyB0byB0aGUgc2tldGNoXG4gICAgICByZW5kZXI6ICgpID0+IHRoaXMucmVuZGVyKCksXG4gICAgICB0b2dnbGVQbGF5OiAoKSA9PiB0aGlzLnRvZ2dsZVBsYXkoKSxcbiAgICAgIGRpc3BhdGNoOiAoY2IpID0+IHRoaXMuZGlzcGF0Y2goY2IpLFxuICAgICAgdGljazogKCkgPT4gdGhpcy50aWNrKCksXG4gICAgICByZXNpemU6ICgpID0+IHRoaXMucmVzaXplKCksXG4gICAgICB1cGRhdGU6IChvcHQpID0+IHRoaXMudXBkYXRlKG9wdCksXG4gICAgICBleHBvcnRGcmFtZTogb3B0ID0+IHRoaXMuZXhwb3J0RnJhbWUob3B0KSxcbiAgICAgIHJlY29yZDogKCkgPT4gdGhpcy5yZWNvcmQoKSxcbiAgICAgIHBsYXk6ICgpID0+IHRoaXMucGxheSgpLFxuICAgICAgcGF1c2U6ICgpID0+IHRoaXMucGF1c2UoKSxcbiAgICAgIHN0b3A6ICgpID0+IHRoaXMuc3RvcCgpXG4gICAgfTtcblxuICAgIC8vIEZvciBXZWJHTCBza2V0Y2hlcywgYSBnbCB2YXJpYWJsZSByZWFkcyBhIGJpdCBiZXR0ZXJcbiAgICB0aGlzLl9zZXR1cEdMS2V5KCk7XG5cbiAgICAvLyBUcmlnZ2VyIGluaXRpYWwgcmVzaXplIG5vdyBzbyB0aGF0IGNhbnZhcyBpcyBhbHJlYWR5IHNpemVkXG4gICAgLy8gYnkgdGhlIHRpbWUgd2UgbG9hZCB0aGUgc2tldGNoXG4gICAgdGhpcy5yZXNpemUoKTtcbiAgfVxuXG4gIGxvYWRBbmRSdW4gKGNhbnZhc1NrZXRjaCwgbmV3U2V0dGluZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5sb2FkKGNhbnZhc1NrZXRjaCwgbmV3U2V0dGluZ3MpLnRoZW4oKCkgPT4ge1xuICAgICAgdGhpcy5ydW4oKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0pO1xuICB9XG5cbiAgdW5sb2FkICgpIHtcbiAgICB0aGlzLnBhdXNlKCk7XG4gICAgaWYgKCF0aGlzLnNrZXRjaCkgcmV0dXJuO1xuICAgIGlmICh0eXBlb2YgdGhpcy5za2V0Y2gudW5sb2FkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLl93cmFwQ29udGV4dFNjYWxlKHByb3BzID0+IHRoaXMuc2tldGNoLnVubG9hZChwcm9wcykpO1xuICAgIH1cbiAgICB0aGlzLl9za2V0Y2ggPSBudWxsO1xuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgdGhpcy51bmxvYWQoKTtcbiAgICB0aGlzLnVubW91bnQoKTtcbiAgfVxuXG4gIGxvYWQgKGNyZWF0ZVNrZXRjaCwgbmV3U2V0dGluZ3MpIHtcbiAgICAvLyBVc2VyIGRpZG4ndCBzcGVjaWZ5IGEgZnVuY3Rpb25cbiAgICBpZiAodHlwZW9mIGNyZWF0ZVNrZXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZnVuY3Rpb24gbXVzdCB0YWtlIGluIGEgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IHBhcmFtZXRlci4gRXhhbXBsZTpcXG4gIGNhbnZhc1NrZXRjaGVyKCgpID0+IHsgLi4uIH0sIHNldHRpbmdzKScpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNrZXRjaCkge1xuICAgICAgdGhpcy51bmxvYWQoKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG5ld1NldHRpbmdzICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpcy51cGRhdGUobmV3U2V0dGluZ3MpO1xuICAgIH1cblxuICAgIC8vIFRoaXMgaXMgYSBiaXQgb2YgYSB0cmlja3kgY2FzZTsgd2Ugc2V0IHVwIHRoZSBhdXRvLXNjYWxpbmcgaGVyZVxuICAgIC8vIGluIGNhc2UgdGhlIHVzZXIgZGVjaWRlcyB0byByZW5kZXIgYW55dGhpbmcgdG8gdGhlIGNvbnRleHQgKmJlZm9yZSogdGhlXG4gICAgLy8gcmVuZGVyKCkgZnVuY3Rpb24uLi4gSG93ZXZlciwgdXNlcnMgc2hvdWxkIGluc3RlYWQgdXNlIGJlZ2luKCkgZnVuY3Rpb24gZm9yIHRoYXQuXG4gICAgdGhpcy5fcHJlUmVuZGVyKCk7XG5cbiAgICBsZXQgcHJlbG9hZCA9IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gICAgLy8gQmVjYXVzZSBvZiBQNS5qcydzIHVudXN1YWwgc3RydWN0dXJlLCB3ZSBoYXZlIHRvIGRvIGEgYml0IG9mXG4gICAgLy8gbGlicmFyeS1zcGVjaWZpYyBjaGFuZ2VzIHRvIHN1cHBvcnQgaXQgcHJvcGVybHkuXG4gICAgaWYgKHRoaXMuc2V0dGluZ3MucDUpIHtcbiAgICAgIGlmICghaXNCcm93c2VyKCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdbY2FudmFzLXNrZXRjaF0gRVJST1I6IFVzaW5nIHA1LmpzIGluIE5vZGUuanMgaXMgbm90IHN1cHBvcnRlZCcpO1xuICAgICAgfVxuICAgICAgcHJlbG9hZCA9IG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgICBsZXQgUDVDb25zdHJ1Y3RvciA9IHRoaXMuc2V0dGluZ3MucDU7XG4gICAgICAgIGxldCBwcmVsb2FkO1xuICAgICAgICBpZiAoUDVDb25zdHJ1Y3Rvci5wNSkge1xuICAgICAgICAgIHByZWxvYWQgPSBQNUNvbnN0cnVjdG9yLnByZWxvYWQ7XG4gICAgICAgICAgUDVDb25zdHJ1Y3RvciA9IFA1Q29uc3RydWN0b3IucDU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGUgc2tldGNoIHNldHVwOyBkaXNhYmxlIGxvb3AsIHNldCBzaXppbmcsIGV0Yy5cbiAgICAgICAgY29uc3QgcDVTa2V0Y2ggPSBwNSA9PiB7XG4gICAgICAgICAgLy8gSG9vayBpbiBwcmVsb2FkIGlmIG5lY2Vzc2FyeVxuICAgICAgICAgIGlmIChwcmVsb2FkKSBwNS5wcmVsb2FkID0gKCkgPT4gcHJlbG9hZChwNSk7XG4gICAgICAgICAgcDUuc2V0dXAgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMucHJvcHM7XG4gICAgICAgICAgICBjb25zdCBpc0dMID0gdGhpcy5zZXR0aW5ncy5jb250ZXh0ID09PSAnd2ViZ2wnO1xuICAgICAgICAgICAgY29uc3QgcmVuZGVyZXIgPSBpc0dMID8gcDUuV0VCR0wgOiBwNS5QMkQ7XG4gICAgICAgICAgICBwNS5ub0xvb3AoKTtcbiAgICAgICAgICAgIHA1LnBpeGVsRGVuc2l0eShwcm9wcy5waXhlbFJhdGlvKTtcbiAgICAgICAgICAgIHA1LmNyZWF0ZUNhbnZhcyhwcm9wcy52aWV3cG9ydFdpZHRoLCBwcm9wcy52aWV3cG9ydEhlaWdodCwgcmVuZGVyZXIpO1xuICAgICAgICAgICAgaWYgKGlzR0wgJiYgdGhpcy5zZXR0aW5ncy5hdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgIHA1LnNldEF0dHJpYnV0ZXModGhpcy5zZXR0aW5ncy5hdHRyaWJ1dGVzKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy51cGRhdGUoeyBwNSwgY2FudmFzOiBwNS5jYW52YXMsIGNvbnRleHQ6IHA1Ll9yZW5kZXJlci5kcmF3aW5nQ29udGV4dCB9KTtcbiAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuXG4gICAgICAgIC8vIFN1cHBvcnQgZ2xvYmFsIGFuZCBpbnN0YW5jZSBQNS5qcyBtb2Rlc1xuICAgICAgICBpZiAodHlwZW9mIFA1Q29uc3RydWN0b3IgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBuZXcgUDVDb25zdHJ1Y3RvcihwNVNrZXRjaCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB3aW5kb3cuY3JlYXRlQ2FudmFzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJ7IHA1IH0gc2V0dGluZyBpcyBwYXNzZWQgYnV0IGNhbid0IGZpbmQgcDUuanMgaW4gZ2xvYmFsICh3aW5kb3cpIHNjb3BlLiBNYXliZSB5b3UgZGlkIG5vdCBjcmVhdGUgaXQgZ2xvYmFsbHk/XFxubmV3IHA1KCk7IC8vIDwtLSBhdHRhY2hlcyB0byBnbG9iYWwgc2NvcGVcIik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHA1U2tldGNoKHdpbmRvdyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBwcmVsb2FkLnRoZW4oKCkgPT4ge1xuICAgICAgLy8gTG9hZCB0aGUgdXNlcidzIHNrZXRjaFxuICAgICAgbGV0IGxvYWRlciA9IGNyZWF0ZVNrZXRjaCh0aGlzLnByb3BzKTtcbiAgICAgIGlmICghaXNQcm9taXNlKGxvYWRlcikpIHtcbiAgICAgICAgbG9hZGVyID0gUHJvbWlzZS5yZXNvbHZlKGxvYWRlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gbG9hZGVyO1xuICAgIH0pLnRoZW4oc2tldGNoID0+IHtcbiAgICAgIGlmICghc2tldGNoKSBza2V0Y2ggPSB7fTtcbiAgICAgIHRoaXMuX3NrZXRjaCA9IHNrZXRjaDtcblxuICAgICAgLy8gT25jZSB0aGUgc2tldGNoIGlzIGxvYWRlZCB3ZSBjYW4gYWRkIHRoZSBldmVudHNcbiAgICAgIGlmIChpc0Jyb3dzZXIoKSkge1xuICAgICAgICB0aGlzLl9rZXlib2FyZFNob3J0Y3V0cy5hdHRhY2goKTtcbiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMuX3Jlc2l6ZUhhbmRsZXIpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9wb3N0UmVuZGVyKCk7XG5cbiAgICAgIC8vIFRoZSBpbml0aWFsIHJlc2l6ZSgpIGluIHRoZSBjb25zdHJ1Y3RvciB3aWxsIG5vdCBoYXZlXG4gICAgICAvLyB0cmlnZ2VyZWQgYSByZXNpemUoKSBldmVudCBvbiB0aGUgc2tldGNoLCBzaW5jZSBpdCB3YXMgYmVmb3JlXG4gICAgICAvLyB0aGUgc2tldGNoIHdhcyBsb2FkZWQuIFNvIHdlIHNlbmQgdGhlIHNpZ25hbCBoZXJlLCBhbGxvd2luZ1xuICAgICAgLy8gdXNlcnMgdG8gcmVhY3QgdG8gdGhlIGluaXRpYWwgc2l6ZSBiZWZvcmUgZmlyc3QgcmVuZGVyLlxuICAgICAgdGhpcy5fc2l6ZUNoYW5nZWQoKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH0pLmNhdGNoKGVyciA9PiB7XG4gICAgICBjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBzdGFydCBza2V0Y2gsIHRoZSBhc3luYyBsb2FkaW5nIGZ1bmN0aW9uIHJlamVjdGVkIHdpdGggYW4gZXJyb3I6XFxuICAgIEVycm9yOiAnICsgZXJyLm1lc3NhZ2UpO1xuICAgICAgdGhyb3cgZXJyO1xuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNrZXRjaE1hbmFnZXI7XG4iLCJpbXBvcnQgeyBnZXRDbGllbnRBUEkgfSBmcm9tICcuLi91dGlsJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gKG9wdCA9IHt9KSB7XG4gIGNvbnN0IGhhbmRsZXIgPSBldiA9PiB7XG4gICAgaWYgKCFvcHQuZW5hYmxlZCgpKSByZXR1cm47XG5cbiAgICBjb25zdCBjbGllbnQgPSBnZXRDbGllbnRBUEkoKTtcbiAgICBpZiAoZXYua2V5Q29kZSA9PT0gODMgJiYgIWV2LmFsdEtleSAmJiAoZXYubWV0YUtleSB8fCBldi5jdHJsS2V5KSkge1xuICAgICAgLy8gQ21kICsgU1xuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG9wdC5zYXZlKGV2KTtcbiAgICB9IGVsc2UgaWYgKGV2LmtleUNvZGUgPT09IDMyKSB7XG4gICAgICAvLyBTcGFjZVxuICAgICAgLy8gVE9ETzogd2hhdCB0byBkbyB3aXRoIHRoaXM/IGtlZXAgaXQsIG9yIHJlbW92ZSBpdD9cbiAgICAgIG9wdC50b2dnbGVQbGF5KGV2KTtcbiAgICB9IGVsc2UgaWYgKGNsaWVudCAmJiAhZXYuYWx0S2V5ICYmIGV2LmtleUNvZGUgPT09IDc1ICYmIChldi5tZXRhS2V5IHx8IGV2LmN0cmxLZXkpKSB7XG4gICAgICAvLyBDbWQgKyBLLCBvbmx5IHdoZW4gY2FudmFzLXNrZXRjaC1jbGkgaXMgdXNlZFxuICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG9wdC5jb21taXQoZXYpO1xuICAgIH1cbiAgfTtcblxuICBjb25zdCBhdHRhY2ggPSAoKSA9PiB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVyKTtcbiAgfTtcblxuICBjb25zdCBkZXRhY2ggPSAoKSA9PiB7XG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBoYW5kbGVyKTtcbiAgfTtcblxuICByZXR1cm4ge1xuICAgIGF0dGFjaCxcbiAgICBkZXRhY2hcbiAgfTtcbn1cbiIsImltcG9ydCBTa2V0Y2hNYW5hZ2VyIGZyb20gJy4vY29yZS9Ta2V0Y2hNYW5hZ2VyJztcbmltcG9ydCBQYXBlclNpemVzIGZyb20gJy4vcGFwZXItc2l6ZXMnO1xuaW1wb3J0IHsgZ2V0Q2xpZW50QVBJLCBkZWZpbmVkIH0gZnJvbSAnLi91dGlsJztcblxuY29uc3QgQ0FDSEUgPSAnaG90LWlkLWNhY2hlJztcbmNvbnN0IHJ1bnRpbWVDb2xsaXNpb25zID0gW107XG5cbmZ1bmN0aW9uIGlzSG90UmVsb2FkICgpIHtcbiAgY29uc3QgY2xpZW50ID0gZ2V0Q2xpZW50QVBJKCk7XG4gIHJldHVybiBjbGllbnQgJiYgY2xpZW50LmhvdDtcbn1cblxuZnVuY3Rpb24gY2FjaGVHZXQgKGlkKSB7XG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICBpZiAoIWNsaWVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY2xpZW50W0NBQ0hFXSA9IGNsaWVudFtDQUNIRV0gfHwge307XG4gIHJldHVybiBjbGllbnRbQ0FDSEVdW2lkXTtcbn1cblxuZnVuY3Rpb24gY2FjaGVQdXQgKGlkLCBkYXRhKSB7XG4gIGNvbnN0IGNsaWVudCA9IGdldENsaWVudEFQSSgpO1xuICBpZiAoIWNsaWVudCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgY2xpZW50W0NBQ0hFXSA9IGNsaWVudFtDQUNIRV0gfHwge307XG4gIGNsaWVudFtDQUNIRV1baWRdID0gZGF0YTtcbn1cblxuZnVuY3Rpb24gZ2V0VGltZVByb3AgKG9sZE1hbmFnZXIsIG5ld1NldHRpbmdzKSB7XG4gIC8vIFN0YXRpYyBza2V0Y2hlcyBpZ25vcmUgdGhlIHRpbWUgcGVyc2lzdGVuY3lcbiAgcmV0dXJuIG5ld1NldHRpbmdzLmFuaW1hdGUgPyB7IHRpbWU6IG9sZE1hbmFnZXIucHJvcHMudGltZSB9IDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBjYW52YXNTa2V0Y2ggKHNrZXRjaCwgc2V0dGluZ3MgPSB7fSkge1xuICBpZiAoc2V0dGluZ3MucDUpIHtcbiAgICBpZiAoc2V0dGluZ3MuY2FudmFzIHx8IChzZXR0aW5ncy5jb250ZXh0ICYmIHR5cGVvZiBzZXR0aW5ncy5jb250ZXh0ICE9PSAnc3RyaW5nJykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgSW4geyBwNSB9IG1vZGUsIHlvdSBjYW4ndCBwYXNzIHlvdXIgb3duIGNhbnZhcyBvciBjb250ZXh0LCB1bmxlc3MgdGhlIGNvbnRleHQgaXMgYSBcIndlYmdsXCIgb3IgXCIyZFwiIHN0cmluZ2ApO1xuICAgIH1cblxuICAgIC8vIERvIG5vdCBjcmVhdGUgYSBjYW52YXMgb24gc3RhcnR1cCwgc2luY2UgUDUuanMgZG9lcyB0aGF0IGZvciB1c1xuICAgIGNvbnN0IGNvbnRleHQgPSB0eXBlb2Ygc2V0dGluZ3MuY29udGV4dCA9PT0gJ3N0cmluZycgPyBzZXR0aW5ncy5jb250ZXh0IDogZmFsc2U7XG4gICAgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHt9LCBzZXR0aW5ncywgeyBjYW52YXM6IGZhbHNlLCBjb250ZXh0IH0pO1xuICB9XG5cbiAgY29uc3QgaXNIb3QgPSBpc0hvdFJlbG9hZCgpO1xuICBsZXQgaG90SUQ7XG4gIGlmIChpc0hvdCkge1xuICAgIC8vIFVzZSBhIG1hZ2ljIG5hbWUgYnkgZGVmYXVsdCwgZm9yY2UgdXNlciB0byBkZWZpbmUgZWFjaCBza2V0Y2ggaWYgdGhleVxuICAgIC8vIHJlcXVpcmUgbW9yZSB0aGFuIG9uZSBpbiBhbiBhcHBsaWNhdGlvbi4gT3BlbiB0byBvdGhlciBpZGVhcyBvbiBob3cgdG8gdGFja2xlXG4gICAgLy8gdGhpcyBhcyB3ZWxsLi4uXG4gICAgaG90SUQgPSBkZWZpbmVkKHNldHRpbmdzLmlkLCAnJF9fREVGQVVMVF9DQU5WQVNfU0tFVENIX0lEX18kJyk7XG4gIH1cbiAgbGV0IGlzSW5qZWN0aW5nID0gaXNIb3QgJiYgdHlwZW9mIGhvdElEID09PSAnc3RyaW5nJztcblxuICBpZiAoaXNJbmplY3RpbmcgJiYgcnVudGltZUNvbGxpc2lvbnMuaW5jbHVkZXMoaG90SUQpKSB7XG4gICAgY29uc29sZS53YXJuKGBXYXJuaW5nOiBZb3UgaGF2ZSBtdWx0aXBsZSBjYWxscyB0byBjYW52YXNTa2V0Y2goKSBpbiAtLWhvdCBtb2RlLiBZb3UgbXVzdCBwYXNzIHVuaXF1ZSB7IGlkIH0gc3RyaW5ncyBpbiBzZXR0aW5ncyB0byBlbmFibGUgaG90IHJlbG9hZCBhY3Jvc3MgbXVsdGlwbGUgc2tldGNoZXMuIGAsIGhvdElEKTtcbiAgICBpc0luamVjdGluZyA9IGZhbHNlO1xuICB9XG5cbiAgbGV0IHByZWxvYWQgPSBQcm9taXNlLnJlc29sdmUoKTtcblxuICBpZiAoaXNJbmplY3RpbmcpIHtcbiAgICAvLyBNYXJrIHRoaXMgYXMgYWxyZWFkeSBzcG90dGVkIGluIHRoaXMgcnVudGltZSBpbnN0YW5jZVxuICAgIHJ1bnRpbWVDb2xsaXNpb25zLnB1c2goaG90SUQpO1xuXG4gICAgY29uc3QgcHJldmlvdXNEYXRhID0gY2FjaGVHZXQoaG90SUQpO1xuICAgIGlmIChwcmV2aW91c0RhdGEpIHtcbiAgICAgIGNvbnN0IG5leHQgPSAoKSA9PiB7XG4gICAgICAgIC8vIEdyYWIgbmV3IHByb3BzIGZyb20gb2xkIHNrZXRjaCBpbnN0YW5jZVxuICAgICAgICBjb25zdCBuZXdQcm9wcyA9IGdldFRpbWVQcm9wKHByZXZpb3VzRGF0YS5tYW5hZ2VyLCBzZXR0aW5ncyk7XG4gICAgICAgIC8vIERlc3Ryb3kgdGhlIG9sZCBpbnN0YW5jZVxuICAgICAgICBwcmV2aW91c0RhdGEubWFuYWdlci5kZXN0cm95KCk7XG4gICAgICAgIC8vIFBhc3MgYWxvbmcgbmV3IHByb3BzXG4gICAgICAgIHJldHVybiBuZXdQcm9wcztcbiAgICAgIH07XG5cbiAgICAgIC8vIE1vdmUgYWxvbmcgdGhlIG5leHQgZGF0YS4uLlxuICAgICAgcHJlbG9hZCA9IHByZXZpb3VzRGF0YS5sb2FkLnRoZW4obmV4dCkuY2F0Y2gobmV4dCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByZWxvYWQudGhlbihuZXdQcm9wcyA9PiB7XG4gICAgY29uc3QgbWFuYWdlciA9IG5ldyBTa2V0Y2hNYW5hZ2VyKCk7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAoc2tldGNoKSB7XG4gICAgICAvLyBNZXJnZSB3aXRoIGluY29taW5nIGRhdGFcbiAgICAgIHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbih7fSwgc2V0dGluZ3MsIG5ld1Byb3BzKTtcblxuICAgICAgLy8gQXBwbHkgc2V0dGluZ3MgYW5kIGNyZWF0ZSBhIGNhbnZhc1xuICAgICAgbWFuYWdlci5zZXR1cChzZXR0aW5ncyk7XG5cbiAgICAgIC8vIE1vdW50IHRvIERPTVxuICAgICAgbWFuYWdlci5tb3VudCgpO1xuXG4gICAgICAvLyBsb2FkIHRoZSBza2V0Y2ggZmlyc3RcbiAgICAgIHJlc3VsdCA9IG1hbmFnZXIubG9hZEFuZFJ1bihza2V0Y2gpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQgPSBQcm9taXNlLnJlc29sdmUobWFuYWdlcik7XG4gICAgfVxuICAgIGlmIChpc0luamVjdGluZykge1xuICAgICAgY2FjaGVQdXQoaG90SUQsIHsgbG9hZDogcmVzdWx0LCBtYW5hZ2VyIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9KTtcbn1cblxuLy8gVE9ETzogRmlndXJlIG91dCBhIG5pY2Ugd2F5IHRvIGV4cG9ydCB0aGluZ3MuXG5jYW52YXNTa2V0Y2guY2FudmFzU2tldGNoID0gY2FudmFzU2tldGNoO1xuY2FudmFzU2tldGNoLlBhcGVyU2l6ZXMgPSBQYXBlclNpemVzO1xuXG5leHBvcnQgZGVmYXVsdCBjYW52YXNTa2V0Y2g7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoYXJndW1lbnRzW2ldICE9PSB1bmRlZmluZWQpIHJldHVybiBhcmd1bWVudHNbaV07XG4gICAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcclxuXHJcbnZhciB3aWR0aCA9IDI1NjsvLyBlYWNoIFJDNCBvdXRwdXQgaXMgMCA8PSB4IDwgMjU2XHJcbnZhciBjaHVua3MgPSA2Oy8vIGF0IGxlYXN0IHNpeCBSQzQgb3V0cHV0cyBmb3IgZWFjaCBkb3VibGVcclxudmFyIGRpZ2l0cyA9IDUyOy8vIHRoZXJlIGFyZSA1MiBzaWduaWZpY2FudCBkaWdpdHMgaW4gYSBkb3VibGVcclxudmFyIHBvb2wgPSBbXTsvLyBwb29sOiBlbnRyb3B5IHBvb2wgc3RhcnRzIGVtcHR5XHJcbnZhciBHTE9CQUwgPSB0eXBlb2YgZ2xvYmFsID09PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbDtcclxuXHJcbi8vXHJcbi8vIFRoZSBmb2xsb3dpbmcgY29uc3RhbnRzIGFyZSByZWxhdGVkIHRvIElFRUUgNzU0IGxpbWl0cy5cclxuLy9cclxudmFyIHN0YXJ0ZGVub20gPSBNYXRoLnBvdyh3aWR0aCwgY2h1bmtzKSxcclxuICAgIHNpZ25pZmljYW5jZSA9IE1hdGgucG93KDIsIGRpZ2l0cyksXHJcbiAgICBvdmVyZmxvdyA9IHNpZ25pZmljYW5jZSAqIDIsXHJcbiAgICBtYXNrID0gd2lkdGggLSAxO1xyXG5cclxuXHJcbnZhciBvbGRSYW5kb20gPSBNYXRoLnJhbmRvbTtcclxuXHJcbi8vXHJcbi8vIHNlZWRyYW5kb20oKVxyXG4vLyBUaGlzIGlzIHRoZSBzZWVkcmFuZG9tIGZ1bmN0aW9uIGRlc2NyaWJlZCBhYm92ZS5cclxuLy9cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihzZWVkLCBvcHRpb25zKSB7XHJcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5nbG9iYWwgPT09IHRydWUpIHtcclxuICAgIG9wdGlvbnMuZ2xvYmFsID0gZmFsc2U7XHJcbiAgICBNYXRoLnJhbmRvbSA9IG1vZHVsZS5leHBvcnRzKHNlZWQsIG9wdGlvbnMpO1xyXG4gICAgb3B0aW9ucy5nbG9iYWwgPSB0cnVlO1xyXG4gICAgcmV0dXJuIE1hdGgucmFuZG9tO1xyXG4gIH1cclxuICB2YXIgdXNlX2VudHJvcHkgPSAob3B0aW9ucyAmJiBvcHRpb25zLmVudHJvcHkpIHx8IGZhbHNlO1xyXG4gIHZhciBrZXkgPSBbXTtcclxuXHJcbiAgLy8gRmxhdHRlbiB0aGUgc2VlZCBzdHJpbmcgb3IgYnVpbGQgb25lIGZyb20gbG9jYWwgZW50cm9weSBpZiBuZWVkZWQuXHJcbiAgdmFyIHNob3J0c2VlZCA9IG1peGtleShmbGF0dGVuKFxyXG4gICAgdXNlX2VudHJvcHkgPyBbc2VlZCwgdG9zdHJpbmcocG9vbCldIDpcclxuICAgIDAgaW4gYXJndW1lbnRzID8gc2VlZCA6IGF1dG9zZWVkKCksIDMpLCBrZXkpO1xyXG5cclxuICAvLyBVc2UgdGhlIHNlZWQgdG8gaW5pdGlhbGl6ZSBhbiBBUkM0IGdlbmVyYXRvci5cclxuICB2YXIgYXJjNCA9IG5ldyBBUkM0KGtleSk7XHJcblxyXG4gIC8vIE1peCB0aGUgcmFuZG9tbmVzcyBpbnRvIGFjY3VtdWxhdGVkIGVudHJvcHkuXHJcbiAgbWl4a2V5KHRvc3RyaW5nKGFyYzQuUyksIHBvb2wpO1xyXG5cclxuICAvLyBPdmVycmlkZSBNYXRoLnJhbmRvbVxyXG5cclxuICAvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSByYW5kb20gZG91YmxlIGluIFswLCAxKSB0aGF0IGNvbnRhaW5zXHJcbiAgLy8gcmFuZG9tbmVzcyBpbiBldmVyeSBiaXQgb2YgdGhlIG1hbnRpc3NhIG9mIHRoZSBJRUVFIDc1NCB2YWx1ZS5cclxuXHJcbiAgcmV0dXJuIGZ1bmN0aW9uKCkgeyAgICAgICAgIC8vIENsb3N1cmUgdG8gcmV0dXJuIGEgcmFuZG9tIGRvdWJsZTpcclxuICAgIHZhciBuID0gYXJjNC5nKGNodW5rcyksICAgICAgICAgICAgIC8vIFN0YXJ0IHdpdGggYSBudW1lcmF0b3IgbiA8IDIgXiA0OFxyXG4gICAgICAgIGQgPSBzdGFydGRlbm9tLCAgICAgICAgICAgICAgICAgLy8gICBhbmQgZGVub21pbmF0b3IgZCA9IDIgXiA0OC5cclxuICAgICAgICB4ID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgYW5kIG5vICdleHRyYSBsYXN0IGJ5dGUnLlxyXG4gICAgd2hpbGUgKG4gPCBzaWduaWZpY2FuY2UpIHsgICAgICAgICAgLy8gRmlsbCB1cCBhbGwgc2lnbmlmaWNhbnQgZGlnaXRzIGJ5XHJcbiAgICAgIG4gPSAobiArIHgpICogd2lkdGg7ICAgICAgICAgICAgICAvLyAgIHNoaWZ0aW5nIG51bWVyYXRvciBhbmRcclxuICAgICAgZCAqPSB3aWR0aDsgICAgICAgICAgICAgICAgICAgICAgIC8vICAgZGVub21pbmF0b3IgYW5kIGdlbmVyYXRpbmcgYVxyXG4gICAgICB4ID0gYXJjNC5nKDEpOyAgICAgICAgICAgICAgICAgICAgLy8gICBuZXcgbGVhc3Qtc2lnbmlmaWNhbnQtYnl0ZS5cclxuICAgIH1cclxuICAgIHdoaWxlIChuID49IG92ZXJmbG93KSB7ICAgICAgICAgICAgIC8vIFRvIGF2b2lkIHJvdW5kaW5nIHVwLCBiZWZvcmUgYWRkaW5nXHJcbiAgICAgIG4gLz0gMjsgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGxhc3QgYnl0ZSwgc2hpZnQgZXZlcnl0aGluZ1xyXG4gICAgICBkIC89IDI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICByaWdodCB1c2luZyBpbnRlZ2VyIE1hdGggdW50aWxcclxuICAgICAgeCA+Pj49IDE7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgd2UgaGF2ZSBleGFjdGx5IHRoZSBkZXNpcmVkIGJpdHMuXHJcbiAgICB9XHJcbiAgICByZXR1cm4gKG4gKyB4KSAvIGQ7ICAgICAgICAgICAgICAgICAvLyBGb3JtIHRoZSBudW1iZXIgd2l0aGluIFswLCAxKS5cclxuICB9O1xyXG59O1xyXG5cclxubW9kdWxlLmV4cG9ydHMucmVzZXRHbG9iYWwgPSBmdW5jdGlvbiAoKSB7XHJcbiAgTWF0aC5yYW5kb20gPSBvbGRSYW5kb207XHJcbn07XHJcblxyXG4vL1xyXG4vLyBBUkM0XHJcbi8vXHJcbi8vIEFuIEFSQzQgaW1wbGVtZW50YXRpb24uICBUaGUgY29uc3RydWN0b3IgdGFrZXMgYSBrZXkgaW4gdGhlIGZvcm0gb2ZcclxuLy8gYW4gYXJyYXkgb2YgYXQgbW9zdCAod2lkdGgpIGludGVnZXJzIHRoYXQgc2hvdWxkIGJlIDAgPD0geCA8ICh3aWR0aCkuXHJcbi8vXHJcbi8vIFRoZSBnKGNvdW50KSBtZXRob2QgcmV0dXJucyBhIHBzZXVkb3JhbmRvbSBpbnRlZ2VyIHRoYXQgY29uY2F0ZW5hdGVzXHJcbi8vIHRoZSBuZXh0IChjb3VudCkgb3V0cHV0cyBmcm9tIEFSQzQuICBJdHMgcmV0dXJuIHZhbHVlIGlzIGEgbnVtYmVyIHhcclxuLy8gdGhhdCBpcyBpbiB0aGUgcmFuZ2UgMCA8PSB4IDwgKHdpZHRoIF4gY291bnQpLlxyXG4vL1xyXG4vKiogQGNvbnN0cnVjdG9yICovXHJcbmZ1bmN0aW9uIEFSQzQoa2V5KSB7XHJcbiAgdmFyIHQsIGtleWxlbiA9IGtleS5sZW5ndGgsXHJcbiAgICAgIG1lID0gdGhpcywgaSA9IDAsIGogPSBtZS5pID0gbWUuaiA9IDAsIHMgPSBtZS5TID0gW107XHJcblxyXG4gIC8vIFRoZSBlbXB0eSBrZXkgW10gaXMgdHJlYXRlZCBhcyBbMF0uXHJcbiAgaWYgKCFrZXlsZW4pIHsga2V5ID0gW2tleWxlbisrXTsgfVxyXG5cclxuICAvLyBTZXQgdXAgUyB1c2luZyB0aGUgc3RhbmRhcmQga2V5IHNjaGVkdWxpbmcgYWxnb3JpdGhtLlxyXG4gIHdoaWxlIChpIDwgd2lkdGgpIHtcclxuICAgIHNbaV0gPSBpKys7XHJcbiAgfVxyXG4gIGZvciAoaSA9IDA7IGkgPCB3aWR0aDsgaSsrKSB7XHJcbiAgICBzW2ldID0gc1tqID0gbWFzayAmIChqICsga2V5W2kgJSBrZXlsZW5dICsgKHQgPSBzW2ldKSldO1xyXG4gICAgc1tqXSA9IHQ7XHJcbiAgfVxyXG5cclxuICAvLyBUaGUgXCJnXCIgbWV0aG9kIHJldHVybnMgdGhlIG5leHQgKGNvdW50KSBvdXRwdXRzIGFzIG9uZSBudW1iZXIuXHJcbiAgKG1lLmcgPSBmdW5jdGlvbihjb3VudCkge1xyXG4gICAgLy8gVXNpbmcgaW5zdGFuY2UgbWVtYmVycyBpbnN0ZWFkIG9mIGNsb3N1cmUgc3RhdGUgbmVhcmx5IGRvdWJsZXMgc3BlZWQuXHJcbiAgICB2YXIgdCwgciA9IDAsXHJcbiAgICAgICAgaSA9IG1lLmksIGogPSBtZS5qLCBzID0gbWUuUztcclxuICAgIHdoaWxlIChjb3VudC0tKSB7XHJcbiAgICAgIHQgPSBzW2kgPSBtYXNrICYgKGkgKyAxKV07XHJcbiAgICAgIHIgPSByICogd2lkdGggKyBzW21hc2sgJiAoKHNbaV0gPSBzW2ogPSBtYXNrICYgKGogKyB0KV0pICsgKHNbal0gPSB0KSldO1xyXG4gICAgfVxyXG4gICAgbWUuaSA9IGk7IG1lLmogPSBqO1xyXG4gICAgcmV0dXJuIHI7XHJcbiAgICAvLyBGb3Igcm9idXN0IHVucHJlZGljdGFiaWxpdHkgZGlzY2FyZCBhbiBpbml0aWFsIGJhdGNoIG9mIHZhbHVlcy5cclxuICAgIC8vIFNlZSBodHRwOi8vd3d3LnJzYS5jb20vcnNhbGFicy9ub2RlLmFzcD9pZD0yMDA5XHJcbiAgfSkod2lkdGgpO1xyXG59XHJcblxyXG4vL1xyXG4vLyBmbGF0dGVuKClcclxuLy8gQ29udmVydHMgYW4gb2JqZWN0IHRyZWUgdG8gbmVzdGVkIGFycmF5cyBvZiBzdHJpbmdzLlxyXG4vL1xyXG5mdW5jdGlvbiBmbGF0dGVuKG9iaiwgZGVwdGgpIHtcclxuICB2YXIgcmVzdWx0ID0gW10sIHR5cCA9ICh0eXBlb2Ygb2JqKVswXSwgcHJvcDtcclxuICBpZiAoZGVwdGggJiYgdHlwID09ICdvJykge1xyXG4gICAgZm9yIChwcm9wIGluIG9iaikge1xyXG4gICAgICB0cnkgeyByZXN1bHQucHVzaChmbGF0dGVuKG9ialtwcm9wXSwgZGVwdGggLSAxKSk7IH0gY2F0Y2ggKGUpIHt9XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiAocmVzdWx0Lmxlbmd0aCA/IHJlc3VsdCA6IHR5cCA9PSAncycgPyBvYmogOiBvYmogKyAnXFwwJyk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIG1peGtleSgpXHJcbi8vIE1peGVzIGEgc3RyaW5nIHNlZWQgaW50byBhIGtleSB0aGF0IGlzIGFuIGFycmF5IG9mIGludGVnZXJzLCBhbmRcclxuLy8gcmV0dXJucyBhIHNob3J0ZW5lZCBzdHJpbmcgc2VlZCB0aGF0IGlzIGVxdWl2YWxlbnQgdG8gdGhlIHJlc3VsdCBrZXkuXHJcbi8vXHJcbmZ1bmN0aW9uIG1peGtleShzZWVkLCBrZXkpIHtcclxuICB2YXIgc3RyaW5nc2VlZCA9IHNlZWQgKyAnJywgc21lYXIsIGogPSAwO1xyXG4gIHdoaWxlIChqIDwgc3RyaW5nc2VlZC5sZW5ndGgpIHtcclxuICAgIGtleVttYXNrICYgal0gPVxyXG4gICAgICBtYXNrICYgKChzbWVhciBePSBrZXlbbWFzayAmIGpdICogMTkpICsgc3RyaW5nc2VlZC5jaGFyQ29kZUF0KGorKykpO1xyXG4gIH1cclxuICByZXR1cm4gdG9zdHJpbmcoa2V5KTtcclxufVxyXG5cclxuLy9cclxuLy8gYXV0b3NlZWQoKVxyXG4vLyBSZXR1cm5zIGFuIG9iamVjdCBmb3IgYXV0b3NlZWRpbmcsIHVzaW5nIHdpbmRvdy5jcnlwdG8gaWYgYXZhaWxhYmxlLlxyXG4vL1xyXG4vKiogQHBhcmFtIHtVaW50OEFycmF5PX0gc2VlZCAqL1xyXG5mdW5jdGlvbiBhdXRvc2VlZChzZWVkKSB7XHJcbiAgdHJ5IHtcclxuICAgIEdMT0JBTC5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHNlZWQgPSBuZXcgVWludDhBcnJheSh3aWR0aCkpO1xyXG4gICAgcmV0dXJuIHRvc3RyaW5nKHNlZWQpO1xyXG4gIH0gY2F0Y2ggKGUpIHtcclxuICAgIHJldHVybiBbK25ldyBEYXRlLCBHTE9CQUwsIEdMT0JBTC5uYXZpZ2F0b3IgJiYgR0xPQkFMLm5hdmlnYXRvci5wbHVnaW5zLFxyXG4gICAgICAgICAgICBHTE9CQUwuc2NyZWVuLCB0b3N0cmluZyhwb29sKV07XHJcbiAgfVxyXG59XHJcblxyXG4vL1xyXG4vLyB0b3N0cmluZygpXHJcbi8vIENvbnZlcnRzIGFuIGFycmF5IG9mIGNoYXJjb2RlcyB0byBhIHN0cmluZ1xyXG4vL1xyXG5mdW5jdGlvbiB0b3N0cmluZyhhKSB7XHJcbiAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoMCwgYSk7XHJcbn1cclxuXHJcbi8vXHJcbi8vIFdoZW4gc2VlZHJhbmRvbS5qcyBpcyBsb2FkZWQsIHdlIGltbWVkaWF0ZWx5IG1peCBhIGZldyBiaXRzXHJcbi8vIGZyb20gdGhlIGJ1aWx0LWluIFJORyBpbnRvIHRoZSBlbnRyb3B5IHBvb2wuICBCZWNhdXNlIHdlIGRvXHJcbi8vIG5vdCB3YW50IHRvIGludGVmZXJlIHdpdGggZGV0ZXJtaW5zdGljIFBSTkcgc3RhdGUgbGF0ZXIsXHJcbi8vIHNlZWRyYW5kb20gd2lsbCBub3QgY2FsbCBNYXRoLnJhbmRvbSBvbiBpdHMgb3duIGFnYWluIGFmdGVyXHJcbi8vIGluaXRpYWxpemF0aW9uLlxyXG4vL1xyXG5taXhrZXkoTWF0aC5yYW5kb20oKSwgcG9vbCk7XHJcbiIsIi8qXG4gKiBBIGZhc3QgamF2YXNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiBzaW1wbGV4IG5vaXNlIGJ5IEpvbmFzIFdhZ25lclxuXG5CYXNlZCBvbiBhIHNwZWVkLWltcHJvdmVkIHNpbXBsZXggbm9pc2UgYWxnb3JpdGhtIGZvciAyRCwgM0QgYW5kIDREIGluIEphdmEuXG5XaGljaCBpcyBiYXNlZCBvbiBleGFtcGxlIGNvZGUgYnkgU3RlZmFuIEd1c3RhdnNvbiAoc3RlZ3VAaXRuLmxpdS5zZSkuXG5XaXRoIE9wdGltaXNhdGlvbnMgYnkgUGV0ZXIgRWFzdG1hbiAocGVhc3RtYW5AZHJpenpsZS5zdGFuZm9yZC5lZHUpLlxuQmV0dGVyIHJhbmsgb3JkZXJpbmcgbWV0aG9kIGJ5IFN0ZWZhbiBHdXN0YXZzb24gaW4gMjAxMi5cblxuXG4gQ29weXJpZ2h0IChjKSAyMDE4IEpvbmFzIFdhZ25lclxuXG4gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvIGRlYWxcbiBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzXG4gdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbFxuIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5cbiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGxcbiBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuXG4gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLFxuIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLFxuIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFXG4gU09GVFdBUkUuXG4gKi9cbihmdW5jdGlvbigpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIHZhciBGMiA9IDAuNSAqIChNYXRoLnNxcnQoMy4wKSAtIDEuMCk7XG4gIHZhciBHMiA9ICgzLjAgLSBNYXRoLnNxcnQoMy4wKSkgLyA2LjA7XG4gIHZhciBGMyA9IDEuMCAvIDMuMDtcbiAgdmFyIEczID0gMS4wIC8gNi4wO1xuICB2YXIgRjQgPSAoTWF0aC5zcXJ0KDUuMCkgLSAxLjApIC8gNC4wO1xuICB2YXIgRzQgPSAoNS4wIC0gTWF0aC5zcXJ0KDUuMCkpIC8gMjAuMDtcblxuICBmdW5jdGlvbiBTaW1wbGV4Tm9pc2UocmFuZG9tT3JTZWVkKSB7XG4gICAgdmFyIHJhbmRvbTtcbiAgICBpZiAodHlwZW9mIHJhbmRvbU9yU2VlZCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICByYW5kb20gPSByYW5kb21PclNlZWQ7XG4gICAgfVxuICAgIGVsc2UgaWYgKHJhbmRvbU9yU2VlZCkge1xuICAgICAgcmFuZG9tID0gYWxlYShyYW5kb21PclNlZWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICByYW5kb20gPSBNYXRoLnJhbmRvbTtcbiAgICB9XG4gICAgdGhpcy5wID0gYnVpbGRQZXJtdXRhdGlvblRhYmxlKHJhbmRvbSk7XG4gICAgdGhpcy5wZXJtID0gbmV3IFVpbnQ4QXJyYXkoNTEyKTtcbiAgICB0aGlzLnBlcm1Nb2QxMiA9IG5ldyBVaW50OEFycmF5KDUxMik7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1MTI7IGkrKykge1xuICAgICAgdGhpcy5wZXJtW2ldID0gdGhpcy5wW2kgJiAyNTVdO1xuICAgICAgdGhpcy5wZXJtTW9kMTJbaV0gPSB0aGlzLnBlcm1baV0gJSAxMjtcbiAgICB9XG5cbiAgfVxuICBTaW1wbGV4Tm9pc2UucHJvdG90eXBlID0ge1xuICAgIGdyYWQzOiBuZXcgRmxvYXQzMkFycmF5KFsxLCAxLCAwLFxuICAgICAgLTEsIDEsIDAsXG4gICAgICAxLCAtMSwgMCxcblxuICAgICAgLTEsIC0xLCAwLFxuICAgICAgMSwgMCwgMSxcbiAgICAgIC0xLCAwLCAxLFxuXG4gICAgICAxLCAwLCAtMSxcbiAgICAgIC0xLCAwLCAtMSxcbiAgICAgIDAsIDEsIDEsXG5cbiAgICAgIDAsIC0xLCAxLFxuICAgICAgMCwgMSwgLTEsXG4gICAgICAwLCAtMSwgLTFdKSxcbiAgICBncmFkNDogbmV3IEZsb2F0MzJBcnJheShbMCwgMSwgMSwgMSwgMCwgMSwgMSwgLTEsIDAsIDEsIC0xLCAxLCAwLCAxLCAtMSwgLTEsXG4gICAgICAwLCAtMSwgMSwgMSwgMCwgLTEsIDEsIC0xLCAwLCAtMSwgLTEsIDEsIDAsIC0xLCAtMSwgLTEsXG4gICAgICAxLCAwLCAxLCAxLCAxLCAwLCAxLCAtMSwgMSwgMCwgLTEsIDEsIDEsIDAsIC0xLCAtMSxcbiAgICAgIC0xLCAwLCAxLCAxLCAtMSwgMCwgMSwgLTEsIC0xLCAwLCAtMSwgMSwgLTEsIDAsIC0xLCAtMSxcbiAgICAgIDEsIDEsIDAsIDEsIDEsIDEsIDAsIC0xLCAxLCAtMSwgMCwgMSwgMSwgLTEsIDAsIC0xLFxuICAgICAgLTEsIDEsIDAsIDEsIC0xLCAxLCAwLCAtMSwgLTEsIC0xLCAwLCAxLCAtMSwgLTEsIDAsIC0xLFxuICAgICAgMSwgMSwgMSwgMCwgMSwgMSwgLTEsIDAsIDEsIC0xLCAxLCAwLCAxLCAtMSwgLTEsIDAsXG4gICAgICAtMSwgMSwgMSwgMCwgLTEsIDEsIC0xLCAwLCAtMSwgLTEsIDEsIDAsIC0xLCAtMSwgLTEsIDBdKSxcbiAgICBub2lzZTJEOiBmdW5jdGlvbih4aW4sIHlpbikge1xuICAgICAgdmFyIHBlcm1Nb2QxMiA9IHRoaXMucGVybU1vZDEyO1xuICAgICAgdmFyIHBlcm0gPSB0aGlzLnBlcm07XG4gICAgICB2YXIgZ3JhZDMgPSB0aGlzLmdyYWQzO1xuICAgICAgdmFyIG4wID0gMDsgLy8gTm9pc2UgY29udHJpYnV0aW9ucyBmcm9tIHRoZSB0aHJlZSBjb3JuZXJzXG4gICAgICB2YXIgbjEgPSAwO1xuICAgICAgdmFyIG4yID0gMDtcbiAgICAgIC8vIFNrZXcgdGhlIGlucHV0IHNwYWNlIHRvIGRldGVybWluZSB3aGljaCBzaW1wbGV4IGNlbGwgd2UncmUgaW5cbiAgICAgIHZhciBzID0gKHhpbiArIHlpbikgKiBGMjsgLy8gSGFpcnkgZmFjdG9yIGZvciAyRFxuICAgICAgdmFyIGkgPSBNYXRoLmZsb29yKHhpbiArIHMpO1xuICAgICAgdmFyIGogPSBNYXRoLmZsb29yKHlpbiArIHMpO1xuICAgICAgdmFyIHQgPSAoaSArIGopICogRzI7XG4gICAgICB2YXIgWDAgPSBpIC0gdDsgLy8gVW5za2V3IHRoZSBjZWxsIG9yaWdpbiBiYWNrIHRvICh4LHkpIHNwYWNlXG4gICAgICB2YXIgWTAgPSBqIC0gdDtcbiAgICAgIHZhciB4MCA9IHhpbiAtIFgwOyAvLyBUaGUgeCx5IGRpc3RhbmNlcyBmcm9tIHRoZSBjZWxsIG9yaWdpblxuICAgICAgdmFyIHkwID0geWluIC0gWTA7XG4gICAgICAvLyBGb3IgdGhlIDJEIGNhc2UsIHRoZSBzaW1wbGV4IHNoYXBlIGlzIGFuIGVxdWlsYXRlcmFsIHRyaWFuZ2xlLlxuICAgICAgLy8gRGV0ZXJtaW5lIHdoaWNoIHNpbXBsZXggd2UgYXJlIGluLlxuICAgICAgdmFyIGkxLCBqMTsgLy8gT2Zmc2V0cyBmb3Igc2Vjb25kIChtaWRkbGUpIGNvcm5lciBvZiBzaW1wbGV4IGluIChpLGopIGNvb3Jkc1xuICAgICAgaWYgKHgwID4geTApIHtcbiAgICAgICAgaTEgPSAxO1xuICAgICAgICBqMSA9IDA7XG4gICAgICB9IC8vIGxvd2VyIHRyaWFuZ2xlLCBYWSBvcmRlcjogKDAsMCktPigxLDApLT4oMSwxKVxuICAgICAgZWxzZSB7XG4gICAgICAgIGkxID0gMDtcbiAgICAgICAgajEgPSAxO1xuICAgICAgfSAvLyB1cHBlciB0cmlhbmdsZSwgWVggb3JkZXI6ICgwLDApLT4oMCwxKS0+KDEsMSlcbiAgICAgIC8vIEEgc3RlcCBvZiAoMSwwKSBpbiAoaSxqKSBtZWFucyBhIHN0ZXAgb2YgKDEtYywtYykgaW4gKHgseSksIGFuZFxuICAgICAgLy8gYSBzdGVwIG9mICgwLDEpIGluIChpLGopIG1lYW5zIGEgc3RlcCBvZiAoLWMsMS1jKSBpbiAoeCx5KSwgd2hlcmVcbiAgICAgIC8vIGMgPSAoMy1zcXJ0KDMpKS82XG4gICAgICB2YXIgeDEgPSB4MCAtIGkxICsgRzI7IC8vIE9mZnNldHMgZm9yIG1pZGRsZSBjb3JuZXIgaW4gKHgseSkgdW5za2V3ZWQgY29vcmRzXG4gICAgICB2YXIgeTEgPSB5MCAtIGoxICsgRzI7XG4gICAgICB2YXIgeDIgPSB4MCAtIDEuMCArIDIuMCAqIEcyOyAvLyBPZmZzZXRzIGZvciBsYXN0IGNvcm5lciBpbiAoeCx5KSB1bnNrZXdlZCBjb29yZHNcbiAgICAgIHZhciB5MiA9IHkwIC0gMS4wICsgMi4wICogRzI7XG4gICAgICAvLyBXb3JrIG91dCB0aGUgaGFzaGVkIGdyYWRpZW50IGluZGljZXMgb2YgdGhlIHRocmVlIHNpbXBsZXggY29ybmVyc1xuICAgICAgdmFyIGlpID0gaSAmIDI1NTtcbiAgICAgIHZhciBqaiA9IGogJiAyNTU7XG4gICAgICAvLyBDYWxjdWxhdGUgdGhlIGNvbnRyaWJ1dGlvbiBmcm9tIHRoZSB0aHJlZSBjb3JuZXJzXG4gICAgICB2YXIgdDAgPSAwLjUgLSB4MCAqIHgwIC0geTAgKiB5MDtcbiAgICAgIGlmICh0MCA+PSAwKSB7XG4gICAgICAgIHZhciBnaTAgPSBwZXJtTW9kMTJbaWkgKyBwZXJtW2pqXV0gKiAzO1xuICAgICAgICB0MCAqPSB0MDtcbiAgICAgICAgbjAgPSB0MCAqIHQwICogKGdyYWQzW2dpMF0gKiB4MCArIGdyYWQzW2dpMCArIDFdICogeTApOyAvLyAoeCx5KSBvZiBncmFkMyB1c2VkIGZvciAyRCBncmFkaWVudFxuICAgICAgfVxuICAgICAgdmFyIHQxID0gMC41IC0geDEgKiB4MSAtIHkxICogeTE7XG4gICAgICBpZiAodDEgPj0gMCkge1xuICAgICAgICB2YXIgZ2kxID0gcGVybU1vZDEyW2lpICsgaTEgKyBwZXJtW2pqICsgajFdXSAqIDM7XG4gICAgICAgIHQxICo9IHQxO1xuICAgICAgICBuMSA9IHQxICogdDEgKiAoZ3JhZDNbZ2kxXSAqIHgxICsgZ3JhZDNbZ2kxICsgMV0gKiB5MSk7XG4gICAgICB9XG4gICAgICB2YXIgdDIgPSAwLjUgLSB4MiAqIHgyIC0geTIgKiB5MjtcbiAgICAgIGlmICh0MiA+PSAwKSB7XG4gICAgICAgIHZhciBnaTIgPSBwZXJtTW9kMTJbaWkgKyAxICsgcGVybVtqaiArIDFdXSAqIDM7XG4gICAgICAgIHQyICo9IHQyO1xuICAgICAgICBuMiA9IHQyICogdDIgKiAoZ3JhZDNbZ2kyXSAqIHgyICsgZ3JhZDNbZ2kyICsgMV0gKiB5Mik7XG4gICAgICB9XG4gICAgICAvLyBBZGQgY29udHJpYnV0aW9ucyBmcm9tIGVhY2ggY29ybmVyIHRvIGdldCB0aGUgZmluYWwgbm9pc2UgdmFsdWUuXG4gICAgICAvLyBUaGUgcmVzdWx0IGlzIHNjYWxlZCB0byByZXR1cm4gdmFsdWVzIGluIHRoZSBpbnRlcnZhbCBbLTEsMV0uXG4gICAgICByZXR1cm4gNzAuMCAqIChuMCArIG4xICsgbjIpO1xuICAgIH0sXG4gICAgLy8gM0Qgc2ltcGxleCBub2lzZVxuICAgIG5vaXNlM0Q6IGZ1bmN0aW9uKHhpbiwgeWluLCB6aW4pIHtcbiAgICAgIHZhciBwZXJtTW9kMTIgPSB0aGlzLnBlcm1Nb2QxMjtcbiAgICAgIHZhciBwZXJtID0gdGhpcy5wZXJtO1xuICAgICAgdmFyIGdyYWQzID0gdGhpcy5ncmFkMztcbiAgICAgIHZhciBuMCwgbjEsIG4yLCBuMzsgLy8gTm9pc2UgY29udHJpYnV0aW9ucyBmcm9tIHRoZSBmb3VyIGNvcm5lcnNcbiAgICAgIC8vIFNrZXcgdGhlIGlucHV0IHNwYWNlIHRvIGRldGVybWluZSB3aGljaCBzaW1wbGV4IGNlbGwgd2UncmUgaW5cbiAgICAgIHZhciBzID0gKHhpbiArIHlpbiArIHppbikgKiBGMzsgLy8gVmVyeSBuaWNlIGFuZCBzaW1wbGUgc2tldyBmYWN0b3IgZm9yIDNEXG4gICAgICB2YXIgaSA9IE1hdGguZmxvb3IoeGluICsgcyk7XG4gICAgICB2YXIgaiA9IE1hdGguZmxvb3IoeWluICsgcyk7XG4gICAgICB2YXIgayA9IE1hdGguZmxvb3IoemluICsgcyk7XG4gICAgICB2YXIgdCA9IChpICsgaiArIGspICogRzM7XG4gICAgICB2YXIgWDAgPSBpIC0gdDsgLy8gVW5za2V3IHRoZSBjZWxsIG9yaWdpbiBiYWNrIHRvICh4LHkseikgc3BhY2VcbiAgICAgIHZhciBZMCA9IGogLSB0O1xuICAgICAgdmFyIFowID0gayAtIHQ7XG4gICAgICB2YXIgeDAgPSB4aW4gLSBYMDsgLy8gVGhlIHgseSx6IGRpc3RhbmNlcyBmcm9tIHRoZSBjZWxsIG9yaWdpblxuICAgICAgdmFyIHkwID0geWluIC0gWTA7XG4gICAgICB2YXIgejAgPSB6aW4gLSBaMDtcbiAgICAgIC8vIEZvciB0aGUgM0QgY2FzZSwgdGhlIHNpbXBsZXggc2hhcGUgaXMgYSBzbGlnaHRseSBpcnJlZ3VsYXIgdGV0cmFoZWRyb24uXG4gICAgICAvLyBEZXRlcm1pbmUgd2hpY2ggc2ltcGxleCB3ZSBhcmUgaW4uXG4gICAgICB2YXIgaTEsIGoxLCBrMTsgLy8gT2Zmc2V0cyBmb3Igc2Vjb25kIGNvcm5lciBvZiBzaW1wbGV4IGluIChpLGosaykgY29vcmRzXG4gICAgICB2YXIgaTIsIGoyLCBrMjsgLy8gT2Zmc2V0cyBmb3IgdGhpcmQgY29ybmVyIG9mIHNpbXBsZXggaW4gKGksaixrKSBjb29yZHNcbiAgICAgIGlmICh4MCA+PSB5MCkge1xuICAgICAgICBpZiAoeTAgPj0gejApIHtcbiAgICAgICAgICBpMSA9IDE7XG4gICAgICAgICAgajEgPSAwO1xuICAgICAgICAgIGsxID0gMDtcbiAgICAgICAgICBpMiA9IDE7XG4gICAgICAgICAgajIgPSAxO1xuICAgICAgICAgIGsyID0gMDtcbiAgICAgICAgfSAvLyBYIFkgWiBvcmRlclxuICAgICAgICBlbHNlIGlmICh4MCA+PSB6MCkge1xuICAgICAgICAgIGkxID0gMTtcbiAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgazEgPSAwO1xuICAgICAgICAgIGkyID0gMTtcbiAgICAgICAgICBqMiA9IDA7XG4gICAgICAgICAgazIgPSAxO1xuICAgICAgICB9IC8vIFggWiBZIG9yZGVyXG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGkxID0gMDtcbiAgICAgICAgICBqMSA9IDA7XG4gICAgICAgICAgazEgPSAxO1xuICAgICAgICAgIGkyID0gMTtcbiAgICAgICAgICBqMiA9IDA7XG4gICAgICAgICAgazIgPSAxO1xuICAgICAgICB9IC8vIFogWCBZIG9yZGVyXG4gICAgICB9XG4gICAgICBlbHNlIHsgLy8geDA8eTBcbiAgICAgICAgaWYgKHkwIDwgejApIHtcbiAgICAgICAgICBpMSA9IDA7XG4gICAgICAgICAgajEgPSAwO1xuICAgICAgICAgIGsxID0gMTtcbiAgICAgICAgICBpMiA9IDA7XG4gICAgICAgICAgajIgPSAxO1xuICAgICAgICAgIGsyID0gMTtcbiAgICAgICAgfSAvLyBaIFkgWCBvcmRlclxuICAgICAgICBlbHNlIGlmICh4MCA8IHowKSB7XG4gICAgICAgICAgaTEgPSAwO1xuICAgICAgICAgIGoxID0gMTtcbiAgICAgICAgICBrMSA9IDA7XG4gICAgICAgICAgaTIgPSAwO1xuICAgICAgICAgIGoyID0gMTtcbiAgICAgICAgICBrMiA9IDE7XG4gICAgICAgIH0gLy8gWSBaIFggb3JkZXJcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgaTEgPSAwO1xuICAgICAgICAgIGoxID0gMTtcbiAgICAgICAgICBrMSA9IDA7XG4gICAgICAgICAgaTIgPSAxO1xuICAgICAgICAgIGoyID0gMTtcbiAgICAgICAgICBrMiA9IDA7XG4gICAgICAgIH0gLy8gWSBYIFogb3JkZXJcbiAgICAgIH1cbiAgICAgIC8vIEEgc3RlcCBvZiAoMSwwLDApIGluIChpLGosaykgbWVhbnMgYSBzdGVwIG9mICgxLWMsLWMsLWMpIGluICh4LHkseiksXG4gICAgICAvLyBhIHN0ZXAgb2YgKDAsMSwwKSBpbiAoaSxqLGspIG1lYW5zIGEgc3RlcCBvZiAoLWMsMS1jLC1jKSBpbiAoeCx5LHopLCBhbmRcbiAgICAgIC8vIGEgc3RlcCBvZiAoMCwwLDEpIGluIChpLGosaykgbWVhbnMgYSBzdGVwIG9mICgtYywtYywxLWMpIGluICh4LHkseiksIHdoZXJlXG4gICAgICAvLyBjID0gMS82LlxuICAgICAgdmFyIHgxID0geDAgLSBpMSArIEczOyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgY29ybmVyIGluICh4LHkseikgY29vcmRzXG4gICAgICB2YXIgeTEgPSB5MCAtIGoxICsgRzM7XG4gICAgICB2YXIgejEgPSB6MCAtIGsxICsgRzM7XG4gICAgICB2YXIgeDIgPSB4MCAtIGkyICsgMi4wICogRzM7IC8vIE9mZnNldHMgZm9yIHRoaXJkIGNvcm5lciBpbiAoeCx5LHopIGNvb3Jkc1xuICAgICAgdmFyIHkyID0geTAgLSBqMiArIDIuMCAqIEczO1xuICAgICAgdmFyIHoyID0gejAgLSBrMiArIDIuMCAqIEczO1xuICAgICAgdmFyIHgzID0geDAgLSAxLjAgKyAzLjAgKiBHMzsgLy8gT2Zmc2V0cyBmb3IgbGFzdCBjb3JuZXIgaW4gKHgseSx6KSBjb29yZHNcbiAgICAgIHZhciB5MyA9IHkwIC0gMS4wICsgMy4wICogRzM7XG4gICAgICB2YXIgejMgPSB6MCAtIDEuMCArIDMuMCAqIEczO1xuICAgICAgLy8gV29yayBvdXQgdGhlIGhhc2hlZCBncmFkaWVudCBpbmRpY2VzIG9mIHRoZSBmb3VyIHNpbXBsZXggY29ybmVyc1xuICAgICAgdmFyIGlpID0gaSAmIDI1NTtcbiAgICAgIHZhciBqaiA9IGogJiAyNTU7XG4gICAgICB2YXIga2sgPSBrICYgMjU1O1xuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjb250cmlidXRpb24gZnJvbSB0aGUgZm91ciBjb3JuZXJzXG4gICAgICB2YXIgdDAgPSAwLjYgLSB4MCAqIHgwIC0geTAgKiB5MCAtIHowICogejA7XG4gICAgICBpZiAodDAgPCAwKSBuMCA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kwID0gcGVybU1vZDEyW2lpICsgcGVybVtqaiArIHBlcm1ba2tdXV0gKiAzO1xuICAgICAgICB0MCAqPSB0MDtcbiAgICAgICAgbjAgPSB0MCAqIHQwICogKGdyYWQzW2dpMF0gKiB4MCArIGdyYWQzW2dpMCArIDFdICogeTAgKyBncmFkM1tnaTAgKyAyXSAqIHowKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MSA9IDAuNiAtIHgxICogeDEgLSB5MSAqIHkxIC0gejEgKiB6MTtcbiAgICAgIGlmICh0MSA8IDApIG4xID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTEgPSBwZXJtTW9kMTJbaWkgKyBpMSArIHBlcm1bamogKyBqMSArIHBlcm1ba2sgKyBrMV1dXSAqIDM7XG4gICAgICAgIHQxICo9IHQxO1xuICAgICAgICBuMSA9IHQxICogdDEgKiAoZ3JhZDNbZ2kxXSAqIHgxICsgZ3JhZDNbZ2kxICsgMV0gKiB5MSArIGdyYWQzW2dpMSArIDJdICogejEpO1xuICAgICAgfVxuICAgICAgdmFyIHQyID0gMC42IC0geDIgKiB4MiAtIHkyICogeTIgLSB6MiAqIHoyO1xuICAgICAgaWYgKHQyIDwgMCkgbjIgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMiA9IHBlcm1Nb2QxMltpaSArIGkyICsgcGVybVtqaiArIGoyICsgcGVybVtrayArIGsyXV1dICogMztcbiAgICAgICAgdDIgKj0gdDI7XG4gICAgICAgIG4yID0gdDIgKiB0MiAqIChncmFkM1tnaTJdICogeDIgKyBncmFkM1tnaTIgKyAxXSAqIHkyICsgZ3JhZDNbZ2kyICsgMl0gKiB6Mik7XG4gICAgICB9XG4gICAgICB2YXIgdDMgPSAwLjYgLSB4MyAqIHgzIC0geTMgKiB5MyAtIHozICogejM7XG4gICAgICBpZiAodDMgPCAwKSBuMyA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kzID0gcGVybU1vZDEyW2lpICsgMSArIHBlcm1bamogKyAxICsgcGVybVtrayArIDFdXV0gKiAzO1xuICAgICAgICB0MyAqPSB0MztcbiAgICAgICAgbjMgPSB0MyAqIHQzICogKGdyYWQzW2dpM10gKiB4MyArIGdyYWQzW2dpMyArIDFdICogeTMgKyBncmFkM1tnaTMgKyAyXSAqIHozKTtcbiAgICAgIH1cbiAgICAgIC8vIEFkZCBjb250cmlidXRpb25zIGZyb20gZWFjaCBjb3JuZXIgdG8gZ2V0IHRoZSBmaW5hbCBub2lzZSB2YWx1ZS5cbiAgICAgIC8vIFRoZSByZXN1bHQgaXMgc2NhbGVkIHRvIHN0YXkganVzdCBpbnNpZGUgWy0xLDFdXG4gICAgICByZXR1cm4gMzIuMCAqIChuMCArIG4xICsgbjIgKyBuMyk7XG4gICAgfSxcbiAgICAvLyA0RCBzaW1wbGV4IG5vaXNlLCBiZXR0ZXIgc2ltcGxleCByYW5rIG9yZGVyaW5nIG1ldGhvZCAyMDEyLTAzLTA5XG4gICAgbm9pc2U0RDogZnVuY3Rpb24oeCwgeSwgeiwgdykge1xuICAgICAgdmFyIHBlcm0gPSB0aGlzLnBlcm07XG4gICAgICB2YXIgZ3JhZDQgPSB0aGlzLmdyYWQ0O1xuXG4gICAgICB2YXIgbjAsIG4xLCBuMiwgbjMsIG40OyAvLyBOb2lzZSBjb250cmlidXRpb25zIGZyb20gdGhlIGZpdmUgY29ybmVyc1xuICAgICAgLy8gU2tldyB0aGUgKHgseSx6LHcpIHNwYWNlIHRvIGRldGVybWluZSB3aGljaCBjZWxsIG9mIDI0IHNpbXBsaWNlcyB3ZSdyZSBpblxuICAgICAgdmFyIHMgPSAoeCArIHkgKyB6ICsgdykgKiBGNDsgLy8gRmFjdG9yIGZvciA0RCBza2V3aW5nXG4gICAgICB2YXIgaSA9IE1hdGguZmxvb3IoeCArIHMpO1xuICAgICAgdmFyIGogPSBNYXRoLmZsb29yKHkgKyBzKTtcbiAgICAgIHZhciBrID0gTWF0aC5mbG9vcih6ICsgcyk7XG4gICAgICB2YXIgbCA9IE1hdGguZmxvb3IodyArIHMpO1xuICAgICAgdmFyIHQgPSAoaSArIGogKyBrICsgbCkgKiBHNDsgLy8gRmFjdG9yIGZvciA0RCB1bnNrZXdpbmdcbiAgICAgIHZhciBYMCA9IGkgLSB0OyAvLyBVbnNrZXcgdGhlIGNlbGwgb3JpZ2luIGJhY2sgdG8gKHgseSx6LHcpIHNwYWNlXG4gICAgICB2YXIgWTAgPSBqIC0gdDtcbiAgICAgIHZhciBaMCA9IGsgLSB0O1xuICAgICAgdmFyIFcwID0gbCAtIHQ7XG4gICAgICB2YXIgeDAgPSB4IC0gWDA7IC8vIFRoZSB4LHkseix3IGRpc3RhbmNlcyBmcm9tIHRoZSBjZWxsIG9yaWdpblxuICAgICAgdmFyIHkwID0geSAtIFkwO1xuICAgICAgdmFyIHowID0geiAtIFowO1xuICAgICAgdmFyIHcwID0gdyAtIFcwO1xuICAgICAgLy8gRm9yIHRoZSA0RCBjYXNlLCB0aGUgc2ltcGxleCBpcyBhIDREIHNoYXBlIEkgd29uJ3QgZXZlbiB0cnkgdG8gZGVzY3JpYmUuXG4gICAgICAvLyBUbyBmaW5kIG91dCB3aGljaCBvZiB0aGUgMjQgcG9zc2libGUgc2ltcGxpY2VzIHdlJ3JlIGluLCB3ZSBuZWVkIHRvXG4gICAgICAvLyBkZXRlcm1pbmUgdGhlIG1hZ25pdHVkZSBvcmRlcmluZyBvZiB4MCwgeTAsIHowIGFuZCB3MC5cbiAgICAgIC8vIFNpeCBwYWlyLXdpc2UgY29tcGFyaXNvbnMgYXJlIHBlcmZvcm1lZCBiZXR3ZWVuIGVhY2ggcG9zc2libGUgcGFpclxuICAgICAgLy8gb2YgdGhlIGZvdXIgY29vcmRpbmF0ZXMsIGFuZCB0aGUgcmVzdWx0cyBhcmUgdXNlZCB0byByYW5rIHRoZSBudW1iZXJzLlxuICAgICAgdmFyIHJhbmt4ID0gMDtcbiAgICAgIHZhciByYW5reSA9IDA7XG4gICAgICB2YXIgcmFua3ogPSAwO1xuICAgICAgdmFyIHJhbmt3ID0gMDtcbiAgICAgIGlmICh4MCA+IHkwKSByYW5reCsrO1xuICAgICAgZWxzZSByYW5reSsrO1xuICAgICAgaWYgKHgwID4gejApIHJhbmt4Kys7XG4gICAgICBlbHNlIHJhbmt6Kys7XG4gICAgICBpZiAoeDAgPiB3MCkgcmFua3grKztcbiAgICAgIGVsc2UgcmFua3crKztcbiAgICAgIGlmICh5MCA+IHowKSByYW5reSsrO1xuICAgICAgZWxzZSByYW5reisrO1xuICAgICAgaWYgKHkwID4gdzApIHJhbmt5Kys7XG4gICAgICBlbHNlIHJhbmt3Kys7XG4gICAgICBpZiAoejAgPiB3MCkgcmFua3orKztcbiAgICAgIGVsc2UgcmFua3crKztcbiAgICAgIHZhciBpMSwgajEsIGsxLCBsMTsgLy8gVGhlIGludGVnZXIgb2Zmc2V0cyBmb3IgdGhlIHNlY29uZCBzaW1wbGV4IGNvcm5lclxuICAgICAgdmFyIGkyLCBqMiwgazIsIGwyOyAvLyBUaGUgaW50ZWdlciBvZmZzZXRzIGZvciB0aGUgdGhpcmQgc2ltcGxleCBjb3JuZXJcbiAgICAgIHZhciBpMywgajMsIGszLCBsMzsgLy8gVGhlIGludGVnZXIgb2Zmc2V0cyBmb3IgdGhlIGZvdXJ0aCBzaW1wbGV4IGNvcm5lclxuICAgICAgLy8gc2ltcGxleFtjXSBpcyBhIDQtdmVjdG9yIHdpdGggdGhlIG51bWJlcnMgMCwgMSwgMiBhbmQgMyBpbiBzb21lIG9yZGVyLlxuICAgICAgLy8gTWFueSB2YWx1ZXMgb2YgYyB3aWxsIG5ldmVyIG9jY3VyLCBzaW5jZSBlLmcuIHg+eT56PncgbWFrZXMgeDx6LCB5PHcgYW5kIHg8d1xuICAgICAgLy8gaW1wb3NzaWJsZS4gT25seSB0aGUgMjQgaW5kaWNlcyB3aGljaCBoYXZlIG5vbi16ZXJvIGVudHJpZXMgbWFrZSBhbnkgc2Vuc2UuXG4gICAgICAvLyBXZSB1c2UgYSB0aHJlc2hvbGRpbmcgdG8gc2V0IHRoZSBjb29yZGluYXRlcyBpbiB0dXJuIGZyb20gdGhlIGxhcmdlc3QgbWFnbml0dWRlLlxuICAgICAgLy8gUmFuayAzIGRlbm90ZXMgdGhlIGxhcmdlc3QgY29vcmRpbmF0ZS5cbiAgICAgIGkxID0gcmFua3ggPj0gMyA/IDEgOiAwO1xuICAgICAgajEgPSByYW5reSA+PSAzID8gMSA6IDA7XG4gICAgICBrMSA9IHJhbmt6ID49IDMgPyAxIDogMDtcbiAgICAgIGwxID0gcmFua3cgPj0gMyA/IDEgOiAwO1xuICAgICAgLy8gUmFuayAyIGRlbm90ZXMgdGhlIHNlY29uZCBsYXJnZXN0IGNvb3JkaW5hdGUuXG4gICAgICBpMiA9IHJhbmt4ID49IDIgPyAxIDogMDtcbiAgICAgIGoyID0gcmFua3kgPj0gMiA/IDEgOiAwO1xuICAgICAgazIgPSByYW5reiA+PSAyID8gMSA6IDA7XG4gICAgICBsMiA9IHJhbmt3ID49IDIgPyAxIDogMDtcbiAgICAgIC8vIFJhbmsgMSBkZW5vdGVzIHRoZSBzZWNvbmQgc21hbGxlc3QgY29vcmRpbmF0ZS5cbiAgICAgIGkzID0gcmFua3ggPj0gMSA/IDEgOiAwO1xuICAgICAgajMgPSByYW5reSA+PSAxID8gMSA6IDA7XG4gICAgICBrMyA9IHJhbmt6ID49IDEgPyAxIDogMDtcbiAgICAgIGwzID0gcmFua3cgPj0gMSA/IDEgOiAwO1xuICAgICAgLy8gVGhlIGZpZnRoIGNvcm5lciBoYXMgYWxsIGNvb3JkaW5hdGUgb2Zmc2V0cyA9IDEsIHNvIG5vIG5lZWQgdG8gY29tcHV0ZSB0aGF0LlxuICAgICAgdmFyIHgxID0geDAgLSBpMSArIEc0OyAvLyBPZmZzZXRzIGZvciBzZWNvbmQgY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgIHZhciB5MSA9IHkwIC0gajEgKyBHNDtcbiAgICAgIHZhciB6MSA9IHowIC0gazEgKyBHNDtcbiAgICAgIHZhciB3MSA9IHcwIC0gbDEgKyBHNDtcbiAgICAgIHZhciB4MiA9IHgwIC0gaTIgKyAyLjAgKiBHNDsgLy8gT2Zmc2V0cyBmb3IgdGhpcmQgY29ybmVyIGluICh4LHkseix3KSBjb29yZHNcbiAgICAgIHZhciB5MiA9IHkwIC0gajIgKyAyLjAgKiBHNDtcbiAgICAgIHZhciB6MiA9IHowIC0gazIgKyAyLjAgKiBHNDtcbiAgICAgIHZhciB3MiA9IHcwIC0gbDIgKyAyLjAgKiBHNDtcbiAgICAgIHZhciB4MyA9IHgwIC0gaTMgKyAzLjAgKiBHNDsgLy8gT2Zmc2V0cyBmb3IgZm91cnRoIGNvcm5lciBpbiAoeCx5LHosdykgY29vcmRzXG4gICAgICB2YXIgeTMgPSB5MCAtIGozICsgMy4wICogRzQ7XG4gICAgICB2YXIgejMgPSB6MCAtIGszICsgMy4wICogRzQ7XG4gICAgICB2YXIgdzMgPSB3MCAtIGwzICsgMy4wICogRzQ7XG4gICAgICB2YXIgeDQgPSB4MCAtIDEuMCArIDQuMCAqIEc0OyAvLyBPZmZzZXRzIGZvciBsYXN0IGNvcm5lciBpbiAoeCx5LHosdykgY29vcmRzXG4gICAgICB2YXIgeTQgPSB5MCAtIDEuMCArIDQuMCAqIEc0O1xuICAgICAgdmFyIHo0ID0gejAgLSAxLjAgKyA0LjAgKiBHNDtcbiAgICAgIHZhciB3NCA9IHcwIC0gMS4wICsgNC4wICogRzQ7XG4gICAgICAvLyBXb3JrIG91dCB0aGUgaGFzaGVkIGdyYWRpZW50IGluZGljZXMgb2YgdGhlIGZpdmUgc2ltcGxleCBjb3JuZXJzXG4gICAgICB2YXIgaWkgPSBpICYgMjU1O1xuICAgICAgdmFyIGpqID0gaiAmIDI1NTtcbiAgICAgIHZhciBrayA9IGsgJiAyNTU7XG4gICAgICB2YXIgbGwgPSBsICYgMjU1O1xuICAgICAgLy8gQ2FsY3VsYXRlIHRoZSBjb250cmlidXRpb24gZnJvbSB0aGUgZml2ZSBjb3JuZXJzXG4gICAgICB2YXIgdDAgPSAwLjYgLSB4MCAqIHgwIC0geTAgKiB5MCAtIHowICogejAgLSB3MCAqIHcwO1xuICAgICAgaWYgKHQwIDwgMCkgbjAgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMCA9IChwZXJtW2lpICsgcGVybVtqaiArIHBlcm1ba2sgKyBwZXJtW2xsXV1dXSAlIDMyKSAqIDQ7XG4gICAgICAgIHQwICo9IHQwO1xuICAgICAgICBuMCA9IHQwICogdDAgKiAoZ3JhZDRbZ2kwXSAqIHgwICsgZ3JhZDRbZ2kwICsgMV0gKiB5MCArIGdyYWQ0W2dpMCArIDJdICogejAgKyBncmFkNFtnaTAgKyAzXSAqIHcwKTtcbiAgICAgIH1cbiAgICAgIHZhciB0MSA9IDAuNiAtIHgxICogeDEgLSB5MSAqIHkxIC0gejEgKiB6MSAtIHcxICogdzE7XG4gICAgICBpZiAodDEgPCAwKSBuMSA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2kxID0gKHBlcm1baWkgKyBpMSArIHBlcm1bamogKyBqMSArIHBlcm1ba2sgKyBrMSArIHBlcm1bbGwgKyBsMV1dXV0gJSAzMikgKiA0O1xuICAgICAgICB0MSAqPSB0MTtcbiAgICAgICAgbjEgPSB0MSAqIHQxICogKGdyYWQ0W2dpMV0gKiB4MSArIGdyYWQ0W2dpMSArIDFdICogeTEgKyBncmFkNFtnaTEgKyAyXSAqIHoxICsgZ3JhZDRbZ2kxICsgM10gKiB3MSk7XG4gICAgICB9XG4gICAgICB2YXIgdDIgPSAwLjYgLSB4MiAqIHgyIC0geTIgKiB5MiAtIHoyICogejIgLSB3MiAqIHcyO1xuICAgICAgaWYgKHQyIDwgMCkgbjIgPSAwLjA7XG4gICAgICBlbHNlIHtcbiAgICAgICAgdmFyIGdpMiA9IChwZXJtW2lpICsgaTIgKyBwZXJtW2pqICsgajIgKyBwZXJtW2trICsgazIgKyBwZXJtW2xsICsgbDJdXV1dICUgMzIpICogNDtcbiAgICAgICAgdDIgKj0gdDI7XG4gICAgICAgIG4yID0gdDIgKiB0MiAqIChncmFkNFtnaTJdICogeDIgKyBncmFkNFtnaTIgKyAxXSAqIHkyICsgZ3JhZDRbZ2kyICsgMl0gKiB6MiArIGdyYWQ0W2dpMiArIDNdICogdzIpO1xuICAgICAgfVxuICAgICAgdmFyIHQzID0gMC42IC0geDMgKiB4MyAtIHkzICogeTMgLSB6MyAqIHozIC0gdzMgKiB3MztcbiAgICAgIGlmICh0MyA8IDApIG4zID0gMC4wO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBnaTMgPSAocGVybVtpaSArIGkzICsgcGVybVtqaiArIGozICsgcGVybVtrayArIGszICsgcGVybVtsbCArIGwzXV1dXSAlIDMyKSAqIDQ7XG4gICAgICAgIHQzICo9IHQzO1xuICAgICAgICBuMyA9IHQzICogdDMgKiAoZ3JhZDRbZ2kzXSAqIHgzICsgZ3JhZDRbZ2kzICsgMV0gKiB5MyArIGdyYWQ0W2dpMyArIDJdICogejMgKyBncmFkNFtnaTMgKyAzXSAqIHczKTtcbiAgICAgIH1cbiAgICAgIHZhciB0NCA9IDAuNiAtIHg0ICogeDQgLSB5NCAqIHk0IC0gejQgKiB6NCAtIHc0ICogdzQ7XG4gICAgICBpZiAodDQgPCAwKSBuNCA9IDAuMDtcbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgZ2k0ID0gKHBlcm1baWkgKyAxICsgcGVybVtqaiArIDEgKyBwZXJtW2trICsgMSArIHBlcm1bbGwgKyAxXV1dXSAlIDMyKSAqIDQ7XG4gICAgICAgIHQ0ICo9IHQ0O1xuICAgICAgICBuNCA9IHQ0ICogdDQgKiAoZ3JhZDRbZ2k0XSAqIHg0ICsgZ3JhZDRbZ2k0ICsgMV0gKiB5NCArIGdyYWQ0W2dpNCArIDJdICogejQgKyBncmFkNFtnaTQgKyAzXSAqIHc0KTtcbiAgICAgIH1cbiAgICAgIC8vIFN1bSB1cCBhbmQgc2NhbGUgdGhlIHJlc3VsdCB0byBjb3ZlciB0aGUgcmFuZ2UgWy0xLDFdXG4gICAgICByZXR1cm4gMjcuMCAqIChuMCArIG4xICsgbjIgKyBuMyArIG40KTtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gYnVpbGRQZXJtdXRhdGlvblRhYmxlKHJhbmRvbSkge1xuICAgIHZhciBpO1xuICAgIHZhciBwID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHtcbiAgICAgIHBbaV0gPSBpO1xuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgMjU1OyBpKyspIHtcbiAgICAgIHZhciByID0gaSArIH5+KHJhbmRvbSgpICogKDI1NiAtIGkpKTtcbiAgICAgIHZhciBhdXggPSBwW2ldO1xuICAgICAgcFtpXSA9IHBbcl07XG4gICAgICBwW3JdID0gYXV4O1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfVxuICBTaW1wbGV4Tm9pc2UuX2J1aWxkUGVybXV0YXRpb25UYWJsZSA9IGJ1aWxkUGVybXV0YXRpb25UYWJsZTtcblxuICBmdW5jdGlvbiBhbGVhKCkge1xuICAgIC8vIEpvaGFubmVzIEJhYWfDuGUgPGJhYWdvZUBiYWFnb2UuY29tPiwgMjAxMFxuICAgIHZhciBzMCA9IDA7XG4gICAgdmFyIHMxID0gMDtcbiAgICB2YXIgczIgPSAwO1xuICAgIHZhciBjID0gMTtcblxuICAgIHZhciBtYXNoID0gbWFzaGVyKCk7XG4gICAgczAgPSBtYXNoKCcgJyk7XG4gICAgczEgPSBtYXNoKCcgJyk7XG4gICAgczIgPSBtYXNoKCcgJyk7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgczAgLT0gbWFzaChhcmd1bWVudHNbaV0pO1xuICAgICAgaWYgKHMwIDwgMCkge1xuICAgICAgICBzMCArPSAxO1xuICAgICAgfVxuICAgICAgczEgLT0gbWFzaChhcmd1bWVudHNbaV0pO1xuICAgICAgaWYgKHMxIDwgMCkge1xuICAgICAgICBzMSArPSAxO1xuICAgICAgfVxuICAgICAgczIgLT0gbWFzaChhcmd1bWVudHNbaV0pO1xuICAgICAgaWYgKHMyIDwgMCkge1xuICAgICAgICBzMiArPSAxO1xuICAgICAgfVxuICAgIH1cbiAgICBtYXNoID0gbnVsbDtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdCA9IDIwOTE2MzkgKiBzMCArIGMgKiAyLjMyODMwNjQzNjUzODY5NjNlLTEwOyAvLyAyXi0zMlxuICAgICAgczAgPSBzMTtcbiAgICAgIHMxID0gczI7XG4gICAgICByZXR1cm4gczIgPSB0IC0gKGMgPSB0IHwgMCk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBtYXNoZXIoKSB7XG4gICAgdmFyIG4gPSAweGVmYzgyNDlkO1xuICAgIHJldHVybiBmdW5jdGlvbihkYXRhKSB7XG4gICAgICBkYXRhID0gZGF0YS50b1N0cmluZygpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG4gKz0gZGF0YS5jaGFyQ29kZUF0KGkpO1xuICAgICAgICB2YXIgaCA9IDAuMDI1MTk2MDMyODI0MTY5MzggKiBuO1xuICAgICAgICBuID0gaCA+Pj4gMDtcbiAgICAgICAgaCAtPSBuO1xuICAgICAgICBoICo9IG47XG4gICAgICAgIG4gPSBoID4+PiAwO1xuICAgICAgICBoIC09IG47XG4gICAgICAgIG4gKz0gaCAqIDB4MTAwMDAwMDAwOyAvLyAyXjMyXG4gICAgICB9XG4gICAgICByZXR1cm4gKG4gPj4+IDApICogMi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDsgLy8gMl4tMzJcbiAgICB9O1xuICB9XG5cbiAgLy8gYW1kXG4gIGlmICh0eXBlb2YgZGVmaW5lICE9PSAndW5kZWZpbmVkJyAmJiBkZWZpbmUuYW1kKSBkZWZpbmUoZnVuY3Rpb24oKSB7cmV0dXJuIFNpbXBsZXhOb2lzZTt9KTtcbiAgLy8gY29tbW9uIGpzXG4gIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIGV4cG9ydHMuU2ltcGxleE5vaXNlID0gU2ltcGxleE5vaXNlO1xuICAvLyBicm93c2VyXG4gIGVsc2UgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB3aW5kb3cuU2ltcGxleE5vaXNlID0gU2ltcGxleE5vaXNlO1xuICAvLyBub2RlanNcbiAgaWYgKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBTaW1wbGV4Tm9pc2U7XG4gIH1cblxufSkoKTtcbiIsIi8qISBUd2Vha3BhbmUgMy4wLjUgKGMpIDIwMTYgY29jb3BvbiwgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLiAqL1xuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBmYWN0b3J5KGV4cG9ydHMpIDpcbiAgICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoWydleHBvcnRzJ10sIGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBmYWN0b3J5KGdsb2JhbC5Ud2Vha3BhbmUgPSB7fSkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKGV4cG9ydHMpIHsgJ3VzZSBzdHJpY3QnO1xuXG4gICAgLyoqKlxuICAgICAqIEEgc2ltcGxlIHNlbWFudGljIHZlcnNpb25pbmcgcGVyc2VyLlxuICAgICAqL1xuICAgIGNsYXNzIFNlbXZlciB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAaGlkZGVuXG4gICAgICAgICAqL1xuICAgICAgICBjb25zdHJ1Y3Rvcih0ZXh0KSB7XG4gICAgICAgICAgICBjb25zdCBbY29yZSwgcHJlcmVsZWFzZV0gPSB0ZXh0LnNwbGl0KCctJyk7XG4gICAgICAgICAgICBjb25zdCBjb3JlQ29tcHMgPSBjb3JlLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICB0aGlzLm1ham9yID0gcGFyc2VJbnQoY29yZUNvbXBzWzBdLCAxMCk7XG4gICAgICAgICAgICB0aGlzLm1pbm9yID0gcGFyc2VJbnQoY29yZUNvbXBzWzFdLCAxMCk7XG4gICAgICAgICAgICB0aGlzLnBhdGNoID0gcGFyc2VJbnQoY29yZUNvbXBzWzJdLCAxMCk7XG4gICAgICAgICAgICB0aGlzLnByZXJlbGVhc2UgPSBwcmVyZWxlYXNlICE9PSBudWxsICYmIHByZXJlbGVhc2UgIT09IHZvaWQgMCA/IHByZXJlbGVhc2UgOiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgY29uc3QgY29yZSA9IFt0aGlzLm1ham9yLCB0aGlzLm1pbm9yLCB0aGlzLnBhdGNoXS5qb2luKCcuJyk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wcmVyZWxlYXNlICE9PSBudWxsID8gW2NvcmUsIHRoaXMucHJlcmVsZWFzZV0uam9pbignLScpIDogY29yZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIEJsYWRlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlcikge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXyA9IGNvbnRyb2xsZXI7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGRpc2FibGVkKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmlld1Byb3BzLmdldCgnZGlzYWJsZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgZGlzYWJsZWQoZGlzYWJsZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmlld1Byb3BzLnNldCgnZGlzYWJsZWQnLCBkaXNhYmxlZCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGhpZGRlbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZpZXdQcm9wcy5nZXQoJ2hpZGRlbicpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBoaWRkZW4oaGlkZGVuKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZpZXdQcm9wcy5zZXQoJ2hpZGRlbicsIGhpZGRlbik7XG4gICAgICAgIH1cbiAgICAgICAgZGlzcG9zZSgpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmlld1Byb3BzLnNldCgnZGlzcG9zZWQnLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRwRXZlbnQge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0YXJnZXQpIHtcbiAgICAgICAgICAgIHRoaXMudGFyZ2V0ID0gdGFyZ2V0O1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsYXNzIFRwQ2hhbmdlRXZlbnQgZXh0ZW5kcyBUcEV2ZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodGFyZ2V0LCB2YWx1ZSwgcHJlc2V0S2V5LCBsYXN0KSB7XG4gICAgICAgICAgICBzdXBlcih0YXJnZXQpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5wcmVzZXRLZXkgPSBwcmVzZXRLZXk7XG4gICAgICAgICAgICB0aGlzLmxhc3QgPSBsYXN0ICE9PSBudWxsICYmIGxhc3QgIT09IHZvaWQgMCA/IGxhc3QgOiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNsYXNzIFRwVXBkYXRlRXZlbnQgZXh0ZW5kcyBUcEV2ZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodGFyZ2V0LCB2YWx1ZSwgcHJlc2V0S2V5KSB7XG4gICAgICAgICAgICBzdXBlcih0YXJnZXQpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgdGhpcy5wcmVzZXRLZXkgPSBwcmVzZXRLZXk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2xhc3MgVHBGb2xkRXZlbnQgZXh0ZW5kcyBUcEV2ZW50IHtcbiAgICAgICAgY29uc3RydWN0b3IodGFyZ2V0LCBleHBhbmRlZCkge1xuICAgICAgICAgICAgc3VwZXIodGFyZ2V0KTtcbiAgICAgICAgICAgIHRoaXMuZXhwYW5kZWQgPSBleHBhbmRlZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZvcmNlQ2FzdCh2KSB7XG4gICAgICAgIHJldHVybiB2O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0VtcHR5KHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBkZWVwRXF1YWxzQXJyYXkoYTEsIGEyKSB7XG4gICAgICAgIGlmIChhMS5sZW5ndGggIT09IGEyLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYTEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChhMVtpXSAhPT0gYTJbaV0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgQ1JFQVRFX01FU1NBR0VfTUFQID0ge1xuICAgICAgICBhbHJlYWR5ZGlzcG9zZWQ6ICgpID0+ICdWaWV3IGhhcyBiZWVuIGFscmVhZHkgZGlzcG9zZWQnLFxuICAgICAgICBpbnZhbGlkcGFyYW1zOiAoY29udGV4dCkgPT4gYEludmFsaWQgcGFyYW1ldGVycyBmb3IgJyR7Y29udGV4dC5uYW1lfSdgLFxuICAgICAgICBub21hdGNoaW5nY29udHJvbGxlcjogKGNvbnRleHQpID0+IGBObyBtYXRjaGluZyBjb250cm9sbGVyIGZvciAnJHtjb250ZXh0LmtleX0nYCxcbiAgICAgICAgbm9tYXRjaGluZ3ZpZXc6IChjb250ZXh0KSA9PiBgTm8gbWF0Y2hpbmcgdmlldyBmb3IgJyR7SlNPTi5zdHJpbmdpZnkoY29udGV4dC5wYXJhbXMpfSdgLFxuICAgICAgICBub3RiaW5kYWJsZTogKCkgPT4gYFZhbHVlIGlzIG5vdCBiaW5kYWJsZWAsXG4gICAgICAgIHByb3BlcnR5bm90Zm91bmQ6IChjb250ZXh0KSA9PiBgUHJvcGVydHkgJyR7Y29udGV4dC5uYW1lfScgbm90IGZvdW5kYCxcbiAgICAgICAgc2hvdWxkbmV2ZXJoYXBwZW46ICgpID0+ICdUaGlzIGVycm9yIHNob3VsZCBuZXZlciBoYXBwZW4nLFxuICAgIH07XG4gICAgY2xhc3MgVHBFcnJvciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdGhpcy5tZXNzYWdlID1cbiAgICAgICAgICAgICAgICAoX2EgPSBDUkVBVEVfTUVTU0FHRV9NQVBbY29uZmlnLnR5cGVdKGZvcmNlQ2FzdChjb25maWcuY29udGV4dCkpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnVW5leHBlY3RlZCBlcnJvcic7XG4gICAgICAgICAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgICAgICAgICB0aGlzLnN0YWNrID0gbmV3IEVycm9yKHRoaXMubWVzc2FnZSkuc3RhY2s7XG4gICAgICAgICAgICB0aGlzLnR5cGUgPSBjb25maWcudHlwZTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgYWxyZWFkeURpc3Bvc2VkKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUcEVycm9yKHsgdHlwZTogJ2FscmVhZHlkaXNwb3NlZCcgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIG5vdEJpbmRhYmxlKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUcEVycm9yKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAnbm90YmluZGFibGUnLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIHByb3BlcnR5Tm90Rm91bmQobmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBUcEVycm9yKHtcbiAgICAgICAgICAgICAgICB0eXBlOiAncHJvcGVydHlub3Rmb3VuZCcsXG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgc2hvdWxkTmV2ZXJIYXBwZW4oKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRwRXJyb3IoeyB0eXBlOiAnc2hvdWxkbmV2ZXJoYXBwZW4nIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQmluZGluZ1RhcmdldCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKG9iaiwga2V5LCBvcHRfaWQpIHtcbiAgICAgICAgICAgIHRoaXMub2JqXyA9IG9iajtcbiAgICAgICAgICAgIHRoaXMua2V5XyA9IGtleTtcbiAgICAgICAgICAgIHRoaXMucHJlc2V0S2V5XyA9IG9wdF9pZCAhPT0gbnVsbCAmJiBvcHRfaWQgIT09IHZvaWQgMCA/IG9wdF9pZCA6IGtleTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgaXNCaW5kYWJsZShvYmopIHtcbiAgICAgICAgICAgIGlmIChvYmogPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBnZXQga2V5KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMua2V5XztcbiAgICAgICAgfVxuICAgICAgICBnZXQgcHJlc2V0S2V5KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJlc2V0S2V5XztcbiAgICAgICAgfVxuICAgICAgICByZWFkKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub2JqX1t0aGlzLmtleV9dO1xuICAgICAgICB9XG4gICAgICAgIHdyaXRlKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLm9ial9bdGhpcy5rZXlfXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHdyaXRlUHJvcGVydHkobmFtZSwgdmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlT2JqID0gdGhpcy5yZWFkKCk7XG4gICAgICAgICAgICBpZiAoIUJpbmRpbmdUYXJnZXQuaXNCaW5kYWJsZSh2YWx1ZU9iaikpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLm5vdEJpbmRhYmxlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIShuYW1lIGluIHZhbHVlT2JqKSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3IucHJvcGVydHlOb3RGb3VuZChuYW1lKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhbHVlT2JqW25hbWVdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBCdXR0b25BcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgICAgIGdldCBsYWJlbCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLmdldCgnbGFiZWwnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgbGFiZWwobGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuc2V0KCdsYWJlbCcsIGxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdGl0bGUoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIucHJvcHMuZ2V0KCd0aXRsZScpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICAgICAgfVxuICAgICAgICBzZXQgdGl0bGUodGl0bGUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnByb3BzLnNldCgndGl0bGUnLCB0aXRsZSk7XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaCA9IGhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IGVtaXR0ZXIgPSB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5lbWl0dGVyO1xuICAgICAgICAgICAgZW1pdHRlci5vbihldmVudE5hbWUsICgpID0+IHtcbiAgICAgICAgICAgICAgICBiaChuZXcgVHBFdmVudCh0aGlzKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgRW1pdHRlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgdGhpcy5vYnNlcnZlcnNfID0ge307XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBsZXQgb2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnNfW2V2ZW50TmFtZV07XG4gICAgICAgICAgICBpZiAoIW9ic2VydmVycykge1xuICAgICAgICAgICAgICAgIG9ic2VydmVycyA9IHRoaXMub2JzZXJ2ZXJzX1tldmVudE5hbWVdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvYnNlcnZlcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgaGFuZGxlcjogaGFuZGxlcixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgb2ZmKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnNfW2V2ZW50TmFtZV07XG4gICAgICAgICAgICBpZiAob2JzZXJ2ZXJzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vYnNlcnZlcnNfW2V2ZW50TmFtZV0gPSBvYnNlcnZlcnMuZmlsdGVyKChvYnNlcnZlcikgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JzZXJ2ZXIuaGFuZGxlciAhPT0gaGFuZGxlcjtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGVtaXQoZXZlbnROYW1lLCBldmVudCkge1xuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZXJzID0gdGhpcy5vYnNlcnZlcnNfW2V2ZW50TmFtZV07XG4gICAgICAgICAgICBpZiAoIW9ic2VydmVycykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG9ic2VydmVycy5mb3JFYWNoKChvYnNlcnZlcikgPT4ge1xuICAgICAgICAgICAgICAgIG9ic2VydmVyLmhhbmRsZXIoZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBQUkVGSVggPSAndHAnO1xuICAgIGZ1bmN0aW9uIENsYXNzTmFtZSh2aWV3TmFtZSkge1xuICAgICAgICBjb25zdCBmbiA9IChvcHRfZWxlbWVudE5hbWUsIG9wdF9tb2RpZmllcikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBQUkVGSVgsXG4gICAgICAgICAgICAgICAgJy0nLFxuICAgICAgICAgICAgICAgIHZpZXdOYW1lLFxuICAgICAgICAgICAgICAgICd2JyxcbiAgICAgICAgICAgICAgICBvcHRfZWxlbWVudE5hbWUgPyBgXyR7b3B0X2VsZW1lbnROYW1lfWAgOiAnJyxcbiAgICAgICAgICAgICAgICBvcHRfbW9kaWZpZXIgPyBgLSR7b3B0X21vZGlmaWVyfWAgOiAnJyxcbiAgICAgICAgICAgIF0uam9pbignJyk7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBmbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wb3NlKGgxLCBoMikge1xuICAgICAgICByZXR1cm4gKGlucHV0KSA9PiBoMihoMShpbnB1dCkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBleHRyYWN0VmFsdWUoZXYpIHtcbiAgICAgICAgcmV0dXJuIGV2LnJhd1ZhbHVlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBiaW5kVmFsdWUodmFsdWUsIGFwcGx5VmFsdWUpIHtcbiAgICAgICAgdmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgY29tcG9zZShleHRyYWN0VmFsdWUsIGFwcGx5VmFsdWUpKTtcbiAgICAgICAgYXBwbHlWYWx1ZSh2YWx1ZS5yYXdWYWx1ZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGJpbmRWYWx1ZU1hcCh2YWx1ZU1hcCwga2V5LCBhcHBseVZhbHVlKSB7XG4gICAgICAgIGJpbmRWYWx1ZSh2YWx1ZU1hcC52YWx1ZShrZXkpLCBhcHBseVZhbHVlKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhcHBseUNsYXNzKGVsZW0sIGNsYXNzTmFtZSwgYWN0aXZlKSB7XG4gICAgICAgIGlmIChhY3RpdmUpIHtcbiAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZWxlbS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdmFsdWVUb0NsYXNzTmFtZShlbGVtLCBjbGFzc05hbWUpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgYXBwbHlDbGFzcyhlbGVtLCBjbGFzc05hbWUsIHZhbHVlKTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYmluZFZhbHVlVG9UZXh0Q29udGVudCh2YWx1ZSwgZWxlbSkge1xuICAgICAgICBiaW5kVmFsdWUodmFsdWUsICh0ZXh0KSA9PiB7XG4gICAgICAgICAgICBlbGVtLnRleHRDb250ZW50ID0gdGV4dCAhPT0gbnVsbCAmJiB0ZXh0ICE9PSB2b2lkIDAgPyB0ZXh0IDogJyc7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRxID0gQ2xhc3NOYW1lKCdidG4nKTtcbiAgICBjbGFzcyBCdXR0b25WaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRxKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgICAgICBidXR0b25FbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJHEoJ2InKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmREaXNhYmxlZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudCA9IGJ1dHRvbkVsZW07XG4gICAgICAgICAgICBjb25zdCB0aXRsZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aXRsZUVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkcSgndCcpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZVRvVGV4dENvbnRlbnQoY29uZmlnLnByb3BzLnZhbHVlKCd0aXRsZScpLCB0aXRsZUVsZW0pO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50LmFwcGVuZENoaWxkKHRpdGxlRWxlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBCdXR0b25Db250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLm9uQ2xpY2tfID0gdGhpcy5vbkNsaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBCdXR0b25WaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy5idXR0b25FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkNsaWNrXyk7XG4gICAgICAgIH1cbiAgICAgICAgb25DbGlja18oKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnY2xpY2snLCB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBCb3VuZFZhbHVlIHtcbiAgICAgICAgY29uc3RydWN0b3IoaW5pdGlhbFZhbHVlLCBjb25maWcpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHRoaXMuY29uc3RyYWludF8gPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcuY29uc3RyYWludDtcbiAgICAgICAgICAgIHRoaXMuZXF1YWxzXyA9IChfYSA9IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5lcXVhbHMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICgodjEsIHYyKSA9PiB2MSA9PT0gdjIpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMucmF3VmFsdWVfID0gaW5pdGlhbFZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGdldCBjb25zdHJhaW50KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29uc3RyYWludF87XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHJhd1ZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmF3VmFsdWVfO1xuICAgICAgICB9XG4gICAgICAgIHNldCByYXdWYWx1ZShyYXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5zZXRSYXdWYWx1ZShyYXdWYWx1ZSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHNldFJhd1ZhbHVlKHJhd1ZhbHVlLCBvcHRpb25zKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRzID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDoge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBjb25zdHJhaW5lZFZhbHVlID0gdGhpcy5jb25zdHJhaW50X1xuICAgICAgICAgICAgICAgID8gdGhpcy5jb25zdHJhaW50Xy5jb25zdHJhaW4ocmF3VmFsdWUpXG4gICAgICAgICAgICAgICAgOiByYXdWYWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZWQgPSAhdGhpcy5lcXVhbHNfKHRoaXMucmF3VmFsdWVfLCBjb25zdHJhaW5lZFZhbHVlKTtcbiAgICAgICAgICAgIGlmICghY2hhbmdlZCAmJiAhb3B0cy5mb3JjZUVtaXQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnYmVmb3JlY2hhbmdlJywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5yYXdWYWx1ZV8gPSBjb25zdHJhaW5lZFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBvcHRzLFxuICAgICAgICAgICAgICAgIHJhd1ZhbHVlOiBjb25zdHJhaW5lZFZhbHVlLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUHJpbWl0aXZlVmFsdWUge1xuICAgICAgICBjb25zdHJ1Y3Rvcihpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlXyA9IGluaXRpYWxWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgcmF3VmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZV87XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHJhd1ZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnNldFJhd1ZhbHVlKHZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0UmF3VmFsdWUodmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IG9wdHMgPSBvcHRpb25zICE9PSBudWxsICYmIG9wdGlvbnMgIT09IHZvaWQgMCA/IG9wdGlvbnMgOiB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbHVlXyA9PT0gdmFsdWUgJiYgIW9wdHMuZm9yY2VFbWl0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2JlZm9yZWNoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVfID0gdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgIG9wdGlvbnM6IG9wdHMsXG4gICAgICAgICAgICAgICAgcmF3VmFsdWU6IHRoaXMudmFsdWVfLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlVmFsdWUoaW5pdGlhbFZhbHVlLCBjb25maWcpIHtcbiAgICAgICAgY29uc3QgY29uc3RyYWludCA9IGNvbmZpZyA9PT0gbnVsbCB8fCBjb25maWcgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNvbmZpZy5jb25zdHJhaW50O1xuICAgICAgICBjb25zdCBlcXVhbHMgPSBjb25maWcgPT09IG51bGwgfHwgY29uZmlnID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb25maWcuZXF1YWxzO1xuICAgICAgICBpZiAoIWNvbnN0cmFpbnQgJiYgIWVxdWFscykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcmltaXRpdmVWYWx1ZShpbml0aWFsVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQm91bmRWYWx1ZShpbml0aWFsVmFsdWUsIGNvbmZpZyk7XG4gICAgfVxuXG4gICAgY2xhc3MgVmFsdWVNYXAge1xuICAgICAgICBjb25zdHJ1Y3Rvcih2YWx1ZU1hcCkge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMudmFsTWFwXyA9IHZhbHVlTWFwO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy52YWxNYXBfKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMudmFsTWFwX1trZXldO1xuICAgICAgICAgICAgICAgIHYuZW1pdHRlci5vbignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBjcmVhdGVDb3JlKGluaXRpYWxWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGluaXRpYWxWYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4ga2V5cy5yZWR1Y2UoKG8sIGtleSkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKG8sIHtcbiAgICAgICAgICAgICAgICAgICAgW2tleV06IGNyZWF0ZVZhbHVlKGluaXRpYWxWYWx1ZVtrZXldKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIHt9KTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZnJvbU9iamVjdChpbml0aWFsVmFsdWUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvcmUgPSB0aGlzLmNyZWF0ZUNvcmUoaW5pdGlhbFZhbHVlKTtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVmFsdWVNYXAoY29yZSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0KGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsTWFwX1trZXldLnJhd1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbE1hcF9ba2V5XS5yYXdWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHZhbHVlKGtleSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsTWFwX1trZXldO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VPYmplY3QodmFsdWUsIGtleVRvUGFyc2VyTWFwKSB7XG4gICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhrZXlUb1BhcnNlck1hcCk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGtleXMucmVkdWNlKCh0bXAsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKHRtcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHBhcnNlciA9IGtleVRvUGFyc2VyTWFwW2tleV07XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZXIodmFsdWVba2V5XSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnN1Y2NlZWRlZFxuICAgICAgICAgICAgICAgID8gT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCB0bXApLCB7IFtrZXldOiByZXN1bHQudmFsdWUgfSkgOiB1bmRlZmluZWQ7XG4gICAgICAgIH0sIHt9KTtcbiAgICAgICAgcmV0dXJuIGZvcmNlQ2FzdChyZXN1bHQpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZUFycmF5KHZhbHVlLCBwYXJzZUl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlLnJlZHVjZSgodG1wLCBpdGVtKSA9PiB7XG4gICAgICAgICAgICBpZiAodG1wID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VJdGVtKGl0ZW0pO1xuICAgICAgICAgICAgaWYgKCFyZXN1bHQuc3VjY2VlZGVkIHx8IHJlc3VsdC52YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBbLi4udG1wLCByZXN1bHQudmFsdWVdO1xuICAgICAgICB9LCBbXSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGlzT2JqZWN0KHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKHBhcnNlKSB7XG4gICAgICAgIHJldHVybiAob3B0aW9uYWwpID0+ICh2KSA9PiB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbmFsICYmIHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHN1Y2NlZWRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHRpb25hbCAmJiB2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzdWNjZWVkZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlKHYpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIHN1Y2NlZWRlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgIHN1Y2NlZWRlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcnMob3B0aW9uYWwpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGN1c3RvbTogKHBhcnNlKSA9PiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKHBhcnNlKShvcHRpb25hbCksXG4gICAgICAgICAgICBib29sZWFuOiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PiB0eXBlb2YgdiA9PT0gJ2Jvb2xlYW4nID8gdiA6IHVuZGVmaW5lZCkob3B0aW9uYWwpLFxuICAgICAgICAgICAgbnVtYmVyOiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicgPyB2IDogdW5kZWZpbmVkKShvcHRpb25hbCksXG4gICAgICAgICAgICBzdHJpbmc6IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIoKHYpID0+IHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IHYgOiB1bmRlZmluZWQpKG9wdGlvbmFsKSxcbiAgICAgICAgICAgIGZ1bmN0aW9uOiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PlxuICAgICAgICAgICAgdHlwZW9mIHYgPT09ICdmdW5jdGlvbicgPyB2IDogdW5kZWZpbmVkKShvcHRpb25hbCksXG4gICAgICAgICAgICBjb25zdGFudDogKHZhbHVlKSA9PiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVyKCh2KSA9PiAodiA9PT0gdmFsdWUgPyB2YWx1ZSA6IHVuZGVmaW5lZCkpKG9wdGlvbmFsKSxcbiAgICAgICAgICAgIHJhdzogY3JlYXRlUGFyYW1zUGFyc2VyQnVpbGRlcigodikgPT4gdikob3B0aW9uYWwpLFxuICAgICAgICAgICAgb2JqZWN0OiAoa2V5VG9QYXJzZXJNYXApID0+IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIoKHYpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzT2JqZWN0KHYpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZU9iamVjdCh2LCBrZXlUb1BhcnNlck1hcCk7XG4gICAgICAgICAgICB9KShvcHRpb25hbCksXG4gICAgICAgICAgICBhcnJheTogKGl0ZW1QYXJzZXIpID0+IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXIoKHYpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlQXJyYXkodiwgaXRlbVBhcnNlcik7XG4gICAgICAgICAgICB9KShvcHRpb25hbCksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IFBhcmFtc1BhcnNlcnMgPSB7XG4gICAgICAgIG9wdGlvbmFsOiBjcmVhdGVQYXJhbXNQYXJzZXJCdWlsZGVycyh0cnVlKSxcbiAgICAgICAgcmVxdWlyZWQ6IGNyZWF0ZVBhcmFtc1BhcnNlckJ1aWxkZXJzKGZhbHNlKSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHBhcnNlUGFyYW1zKHZhbHVlLCBrZXlUb1BhcnNlck1hcCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBQYXJhbXNQYXJzZXJzLnJlcXVpcmVkLm9iamVjdChrZXlUb1BhcnNlck1hcCkodmFsdWUpO1xuICAgICAgICByZXR1cm4gcmVzdWx0LnN1Y2NlZWRlZCA/IHJlc3VsdC52YWx1ZSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBkaXNwb3NlRWxlbWVudChlbGVtKSB7XG4gICAgICAgIGlmIChlbGVtICYmIGVsZW0ucGFyZW50RWxlbWVudCkge1xuICAgICAgICAgICAgZWxlbS5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKGVsZW0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGdldEFsbEJsYWRlUG9zaXRpb25zKCkge1xuICAgICAgICByZXR1cm4gWyd2ZXJ5Zmlyc3QnLCAnZmlyc3QnLCAnbGFzdCcsICd2ZXJ5bGFzdCddO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRwID0gQ2xhc3NOYW1lKCcnKTtcbiAgICBjb25zdCBQT1NfVE9fQ0xBU1NfTkFNRV9NQVAgPSB7XG4gICAgICAgIHZlcnlmaXJzdDogJ3Zmc3QnLFxuICAgICAgICBmaXJzdDogJ2ZzdCcsXG4gICAgICAgIGxhc3Q6ICdsc3QnLFxuICAgICAgICB2ZXJ5bGFzdDogJ3Zsc3QnLFxuICAgIH07XG4gICAgY2xhc3MgQmxhZGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudF8gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5ibGFkZSA9IGNvbmZpZy5ibGFkZTtcbiAgICAgICAgICAgIHRoaXMudmlldyA9IGNvbmZpZy52aWV3O1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgY29uc3QgZWxlbSA9IHRoaXMudmlldy5lbGVtZW50O1xuICAgICAgICAgICAgdGhpcy5ibGFkZS52YWx1ZSgncG9zaXRpb25zJykuZW1pdHRlci5vbignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGdldEFsbEJsYWRlUG9zaXRpb25zKCkuZm9yRWFjaCgocG9zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUkcCh1bmRlZmluZWQsIFBPU19UT19DTEFTU19OQU1FX01BUFtwb3NdKSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5ibGFkZS5nZXQoJ3Bvc2l0aW9ucycpLmZvckVhY2goKHBvcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJHAodW5kZWZpbmVkLCBQT1NfVE9fQ0xBU1NfTkFNRV9NQVBbcG9zXSkpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcy5oYW5kbGVEaXNwb3NlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBkaXNwb3NlRWxlbWVudChlbGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBwYXJlbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnRfO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgU1ZHX05TID0gJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJztcbiAgICBmdW5jdGlvbiBmb3JjZVJlZmxvdyhlbGVtZW50KSB7XG4gICAgICAgIGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAgIH1cbiAgICBmdW5jdGlvbiBkaXNhYmxlVHJhbnNpdGlvblRlbXBvcmFyaWx5KGVsZW1lbnQsIGNhbGxiYWNrKSB7XG4gICAgICAgIGNvbnN0IHQgPSBlbGVtZW50LnN0eWxlLnRyYW5zaXRpb247XG4gICAgICAgIGVsZW1lbnQuc3R5bGUudHJhbnNpdGlvbiA9ICdub25lJztcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgZWxlbWVudC5zdHlsZS50cmFuc2l0aW9uID0gdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3VwcG9ydHNUb3VjaChkb2MpIHtcbiAgICAgICAgcmV0dXJuIGRvYy5vbnRvdWNoc3RhcnQgIT09IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0R2xvYmFsT2JqZWN0KCkge1xuICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFdpbmRvd0RvY3VtZW50KCkge1xuICAgICAgICBjb25zdCBnbG9iYWxPYmogPSBmb3JjZUNhc3QoZ2V0R2xvYmFsT2JqZWN0KCkpO1xuICAgICAgICByZXR1cm4gZ2xvYmFsT2JqLmRvY3VtZW50O1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0Jyb3dzZXIoKSB7XG4gICAgICAgIHJldHVybiAnZG9jdW1lbnQnIGluIGdldEdsb2JhbE9iamVjdCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRDYW52YXNDb250ZXh0KGNhbnZhc0VsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGlzQnJvd3NlcigpID8gY2FudmFzRWxlbWVudC5nZXRDb250ZXh0KCcyZCcpIDogbnVsbDtcbiAgICB9XG4gICAgY29uc3QgSUNPTl9JRF9UT19JTk5FUl9IVE1MX01BUCA9IHtcbiAgICAgICAgY2hlY2s6ICc8cGF0aCBkPVwiTTIgOGw0IDRsOCAtOFwiLz4nLFxuICAgICAgICBkcm9wZG93bjogJzxwYXRoIGQ9XCJNNSA3aDZsLTMgMyB6XCIvPicsXG4gICAgICAgIHAyZHBhZDogJzxwYXRoIGQ9XCJNOCA0djhcIi8+PHBhdGggZD1cIk00IDhoOFwiLz48Y2lyY2xlIGN4PVwiMTJcIiBjeT1cIjEyXCIgcj1cIjEuMlwiLz4nLFxuICAgIH07XG4gICAgZnVuY3Rpb24gY3JlYXRlU3ZnSWNvbkVsZW1lbnQoZG9jdW1lbnQsIGljb25JZCkge1xuICAgICAgICBjb25zdCBlbGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3N2ZycpO1xuICAgICAgICBlbGVtLmlubmVySFRNTCA9IElDT05fSURfVE9fSU5ORVJfSFRNTF9NQVBbaWNvbklkXTtcbiAgICAgICAgcmV0dXJuIGVsZW07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGluc2VydEVsZW1lbnRBdChwYXJlbnRFbGVtZW50LCBlbGVtZW50LCBpbmRleCkge1xuICAgICAgICBwYXJlbnRFbGVtZW50Lmluc2VydEJlZm9yZShlbGVtZW50LCBwYXJlbnRFbGVtZW50LmNoaWxkcmVuW2luZGV4XSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZUVsZW1lbnQoZWxlbWVudCkge1xuICAgICAgICBpZiAoZWxlbWVudC5wYXJlbnRFbGVtZW50KSB7XG4gICAgICAgICAgICBlbGVtZW50LnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQ2hpbGRFbGVtZW50cyhlbGVtZW50KSB7XG4gICAgICAgIHdoaWxlIChlbGVtZW50LmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGVsZW1lbnQucmVtb3ZlQ2hpbGQoZWxlbWVudC5jaGlsZHJlblswXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gcmVtb3ZlQ2hpbGROb2RlcyhlbGVtZW50KSB7XG4gICAgICAgIHdoaWxlIChlbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgZWxlbWVudC5yZW1vdmVDaGlsZChlbGVtZW50LmNoaWxkTm9kZXNbMF0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmROZXh0VGFyZ2V0KGV2KSB7XG4gICAgICAgIGlmIChldi5yZWxhdGVkVGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gZm9yY2VDYXN0KGV2LnJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgnZXhwbGljaXRPcmlnaW5hbFRhcmdldCcgaW4gZXYpIHtcbiAgICAgICAgICAgIHJldHVybiBldi5leHBsaWNpdE9yaWdpbmFsVGFyZ2V0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRvID0gQ2xhc3NOYW1lKCdsYmwnKTtcbiAgICBmdW5jdGlvbiBjcmVhdGVMYWJlbE5vZGUoZG9jLCBsYWJlbCkge1xuICAgICAgICBjb25zdCBmcmFnID0gZG9jLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgY29uc3QgbGluZU5vZGVzID0gbGFiZWwuc3BsaXQoJ1xcbicpLm1hcCgobGluZSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGRvYy5jcmVhdGVUZXh0Tm9kZShsaW5lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxpbmVOb2Rlcy5mb3JFYWNoKChsaW5lTm9kZSwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IDApIHtcbiAgICAgICAgICAgICAgICBmcmFnLmFwcGVuZENoaWxkKGRvYy5jcmVhdGVFbGVtZW50KCdicicpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZyYWcuYXBwZW5kQ2hpbGQobGluZU5vZGUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZyYWc7XG4gICAgfVxuICAgIGNsYXNzIExhYmVsVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbygpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBsYWJlbEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBsYWJlbEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbygnbCcpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcChjb25maWcucHJvcHMsICdsYWJlbCcsICh2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc0VtcHR5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbyh1bmRlZmluZWQsICdub2wnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUkbyh1bmRlZmluZWQsICdub2wnKSk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUNoaWxkTm9kZXMobGFiZWxFbGVtKTtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWxFbGVtLmFwcGVuZENoaWxkKGNyZWF0ZUxhYmVsTm9kZShkb2MsIHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQobGFiZWxFbGVtKTtcbiAgICAgICAgICAgIHRoaXMubGFiZWxFbGVtZW50ID0gbGFiZWxFbGVtO1xuICAgICAgICAgICAgY29uc3QgdmFsdWVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdmFsdWVFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJG8oJ3YnKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodmFsdWVFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVFbGVtZW50ID0gdmFsdWVFbGVtO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgTGFiZWxDb250cm9sbGVyIGV4dGVuZHMgQmxhZGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdQcm9wcyA9IGNvbmZpZy52YWx1ZUNvbnRyb2xsZXIudmlld1Byb3BzO1xuICAgICAgICAgICAgc3VwZXIoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjb25maWcpLCB7IHZpZXc6IG5ldyBMYWJlbFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBjb25maWcucHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pLCB2aWV3UHJvcHM6IHZpZXdQcm9wcyB9KSk7XG4gICAgICAgICAgICB0aGlzLnByb3BzID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy52YWx1ZUNvbnRyb2xsZXIgPSBjb25maWcudmFsdWVDb250cm9sbGVyO1xuICAgICAgICAgICAgdGhpcy52aWV3LnZhbHVlRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnZhbHVlQ29udHJvbGxlci52aWV3LmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgQnV0dG9uQmxhZGVQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnYnV0dG9uJyxcbiAgICAgICAgdHlwZTogJ2JsYWRlJyxcbiAgICAgICAgYWNjZXB0KHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogcC5yZXF1aXJlZC5zdHJpbmcsXG4gICAgICAgICAgICAgICAgdmlldzogcC5yZXF1aXJlZC5jb25zdGFudCgnYnV0dG9uJyksXG4gICAgICAgICAgICAgICAgbGFiZWw6IHAub3B0aW9uYWwuc3RyaW5nLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0ID8geyBwYXJhbXM6IHJlc3VsdCB9IDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcihhcmdzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IExhYmVsQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGFyZ3MuYmxhZGUsXG4gICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBsYWJlbDogYXJncy5wYXJhbXMubGFiZWwsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdmFsdWVDb250cm9sbGVyOiBuZXcgQnV0dG9uQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBhcmdzLnBhcmFtcy50aXRsZSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgYXBpKGFyZ3MpIHtcbiAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlciBpbnN0YW5jZW9mIExhYmVsQ29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlci52YWx1ZUNvbnRyb2xsZXIgaW5zdGFuY2VvZiBCdXR0b25Db250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBCdXR0b25BcGkoYXJncy5jb250cm9sbGVyKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xhc3MgVmFsdWVCbGFkZUNvbnRyb2xsZXIgZXh0ZW5kcyBCbGFkZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQmxhZGUoKSB7XG4gICAgICAgIHJldHVybiBuZXcgVmFsdWVNYXAoe1xuICAgICAgICAgICAgcG9zaXRpb25zOiBjcmVhdGVWYWx1ZShbXSwge1xuICAgICAgICAgICAgICAgIGVxdWFsczogZGVlcEVxdWFsc0FycmF5LFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsYXNzIEZvbGRhYmxlIGV4dGVuZHMgVmFsdWVNYXAge1xuICAgICAgICBjb25zdHJ1Y3Rvcih2YWx1ZU1hcCkge1xuICAgICAgICAgICAgc3VwZXIodmFsdWVNYXApO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBjcmVhdGUoZXhwYW5kZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvcmVPYmogPSB7XG4gICAgICAgICAgICAgICAgY29tcGxldGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBleHBhbmRlZCxcbiAgICAgICAgICAgICAgICBleHBhbmRlZEhlaWdodDogbnVsbCxcbiAgICAgICAgICAgICAgICBzaG91bGRGaXhIZWlnaHQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIHRlbXBvcmFyeUV4cGFuZGVkOiBudWxsLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGNvcmUgPSBWYWx1ZU1hcC5jcmVhdGVDb3JlKGNvcmVPYmopO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBGb2xkYWJsZShjb3JlKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgc3R5bGVFeHBhbmRlZCgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiAoX2EgPSB0aGlzLmdldCgndGVtcG9yYXJ5RXhwYW5kZWQnKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5nZXQoJ2V4cGFuZGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHN0eWxlSGVpZ2h0KCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnN0eWxlRXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gJzAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZXhIZWlnaHQgPSB0aGlzLmdldCgnZXhwYW5kZWRIZWlnaHQnKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldCgnc2hvdWxkRml4SGVpZ2h0JykgJiYgIWlzRW1wdHkoZXhIZWlnaHQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke2V4SGVpZ2h0fXB4YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAnYXV0byc7XG4gICAgICAgIH1cbiAgICAgICAgYmluZEV4cGFuZGVkQ2xhc3MoZWxlbSwgZXhwYW5kZWRDbGFzc05hbWUpIHtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcCh0aGlzLCAnZXhwYW5kZWQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXhwYW5kZWQgPSB0aGlzLnN0eWxlRXhwYW5kZWQ7XG4gICAgICAgICAgICAgICAgaWYgKGV4cGFuZGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGVsZW0uY2xhc3NMaXN0LmFkZChleHBhbmRlZENsYXNzTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbGVtLmNsYXNzTGlzdC5yZW1vdmUoZXhwYW5kZWRDbGFzc05hbWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbXB1dGVFeHBhbmRlZEZvbGRlckhlaWdodChmb2xkZXIsIGNvbnRhaW5lckVsZW1lbnQpIHtcbiAgICAgICAgbGV0IGhlaWdodCA9IDA7XG4gICAgICAgIGRpc2FibGVUcmFuc2l0aW9uVGVtcG9yYXJpbHkoY29udGFpbmVyRWxlbWVudCwgKCkgPT4ge1xuICAgICAgICAgICAgZm9sZGVyLnNldCgnZXhwYW5kZWRIZWlnaHQnLCBudWxsKTtcbiAgICAgICAgICAgIGZvbGRlci5zZXQoJ3RlbXBvcmFyeUV4cGFuZGVkJywgdHJ1ZSk7XG4gICAgICAgICAgICBmb3JjZVJlZmxvdyhjb250YWluZXJFbGVtZW50KTtcbiAgICAgICAgICAgIGhlaWdodCA9IGNvbnRhaW5lckVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgZm9sZGVyLnNldCgndGVtcG9yYXJ5RXhwYW5kZWQnLCBudWxsKTtcbiAgICAgICAgICAgIGZvcmNlUmVmbG93KGNvbnRhaW5lckVsZW1lbnQpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGhlaWdodDtcbiAgICB9XG4gICAgZnVuY3Rpb24gYXBwbHlIZWlnaHQoZm9sZGFibGUsIGVsZW0pIHtcbiAgICAgICAgZWxlbS5zdHlsZS5oZWlnaHQgPSBmb2xkYWJsZS5zdHlsZUhlaWdodDtcbiAgICB9XG4gICAgZnVuY3Rpb24gYmluZEZvbGRhYmxlKGZvbGRhYmxlLCBlbGVtKSB7XG4gICAgICAgIGZvbGRhYmxlLnZhbHVlKCdleHBhbmRlZCcpLmVtaXR0ZXIub24oJ2JlZm9yZWNoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgIGZvbGRhYmxlLnNldCgnY29tcGxldGVkJywgZmFsc2UpO1xuICAgICAgICAgICAgaWYgKGlzRW1wdHkoZm9sZGFibGUuZ2V0KCdleHBhbmRlZEhlaWdodCcpKSkge1xuICAgICAgICAgICAgICAgIGZvbGRhYmxlLnNldCgnZXhwYW5kZWRIZWlnaHQnLCBjb21wdXRlRXhwYW5kZWRGb2xkZXJIZWlnaHQoZm9sZGFibGUsIGVsZW0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvbGRhYmxlLnNldCgnc2hvdWxkRml4SGVpZ2h0JywgdHJ1ZSk7XG4gICAgICAgICAgICBmb3JjZVJlZmxvdyhlbGVtKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZvbGRhYmxlLmVtaXR0ZXIub24oJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgIGFwcGx5SGVpZ2h0KGZvbGRhYmxlLCBlbGVtKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFwcGx5SGVpZ2h0KGZvbGRhYmxlLCBlbGVtKTtcbiAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKCd0cmFuc2l0aW9uZW5kJywgKGV2KSA9PiB7XG4gICAgICAgICAgICBpZiAoZXYucHJvcGVydHlOYW1lICE9PSAnaGVpZ2h0Jykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvbGRhYmxlLnNldCgnc2hvdWxkRml4SGVpZ2h0JywgZmFsc2UpO1xuICAgICAgICAgICAgZm9sZGFibGUuc2V0KCdleHBhbmRlZEhlaWdodCcsIG51bGwpO1xuICAgICAgICAgICAgZm9sZGFibGUuc2V0KCdjb21wbGV0ZWQnLCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xhc3MgUmFja0xpa2VBcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIsIHJhY2tBcGkpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgdGhpcy5yYWNrQXBpXyA9IHJhY2tBcGk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBhZGRCdXR0b25Bc0JsYWRlKGFwaSwgcGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBhcGkuYWRkQmxhZGUoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMpLCB7IHZpZXc6ICdidXR0b24nIH0pKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkRm9sZGVyQXNCbGFkZShhcGksIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gYXBpLmFkZEJsYWRlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zKSwgeyB2aWV3OiAnZm9sZGVyJyB9KSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFkZFNlcGFyYXRvckFzQmxhZGUoYXBpLCBvcHRfcGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IG9wdF9wYXJhbXMgfHwge307XG4gICAgICAgIHJldHVybiBhcGkuYWRkQmxhZGUoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBwYXJhbXMpLCB7IHZpZXc6ICdzZXBhcmF0b3InIH0pKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gYWRkVGFiQXNCbGFkZShhcGksIHBhcmFtcykge1xuICAgICAgICByZXR1cm4gYXBpLmFkZEJsYWRlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgcGFyYW1zKSwgeyB2aWV3OiAndGFiJyB9KSk7XG4gICAgfVxuXG4gICAgY2xhc3MgTmVzdGVkT3JkZXJlZFNldCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGV4dHJhY3QpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLml0ZW1zXyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5jYWNoZV8gPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICB0aGlzLm9uU3ViTGlzdEFkZF8gPSB0aGlzLm9uU3ViTGlzdEFkZF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25TdWJMaXN0UmVtb3ZlXyA9IHRoaXMub25TdWJMaXN0UmVtb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5leHRyYWN0XyA9IGV4dHJhY3Q7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGl0ZW1zKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXNfO1xuICAgICAgICB9XG4gICAgICAgIGFsbEl0ZW1zKCkge1xuICAgICAgICAgICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy5jYWNoZV8pO1xuICAgICAgICB9XG4gICAgICAgIGZpbmQoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLmFsbEl0ZW1zKCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2soaXRlbSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgaW5jbHVkZXMoaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVfLmhhcyhpdGVtKTtcbiAgICAgICAgfVxuICAgICAgICBhZGQoaXRlbSwgb3B0X2luZGV4KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbmNsdWRlcyhpdGVtKSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gb3B0X2luZGV4ICE9PSB1bmRlZmluZWQgPyBvcHRfaW5kZXggOiB0aGlzLml0ZW1zXy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLml0ZW1zXy5zcGxpY2UoaW5kZXgsIDAsIGl0ZW0pO1xuICAgICAgICAgICAgdGhpcy5jYWNoZV8uYWRkKGl0ZW0pO1xuICAgICAgICAgICAgY29uc3Qgc3ViTGlzdCA9IHRoaXMuZXh0cmFjdF8oaXRlbSk7XG4gICAgICAgICAgICBpZiAoc3ViTGlzdCkge1xuICAgICAgICAgICAgICAgIHN1Ykxpc3QuZW1pdHRlci5vbignYWRkJywgdGhpcy5vblN1Ykxpc3RBZGRfKTtcbiAgICAgICAgICAgICAgICBzdWJMaXN0LmVtaXR0ZXIub24oJ3JlbW92ZScsIHRoaXMub25TdWJMaXN0UmVtb3ZlXyk7XG4gICAgICAgICAgICAgICAgc3ViTGlzdC5hbGxJdGVtcygpLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWNoZV8uYWRkKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2FkZCcsIHtcbiAgICAgICAgICAgICAgICBpbmRleDogaW5kZXgsXG4gICAgICAgICAgICAgICAgaXRlbTogaXRlbSxcbiAgICAgICAgICAgICAgICByb290OiB0aGlzLFxuICAgICAgICAgICAgICAgIHRhcmdldDogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShpdGVtKSB7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuaXRlbXNfLmluZGV4T2YoaXRlbSk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPCAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5pdGVtc18uc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVfLmRlbGV0ZShpdGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHN1Ykxpc3QgPSB0aGlzLmV4dHJhY3RfKGl0ZW0pO1xuICAgICAgICAgICAgaWYgKHN1Ykxpc3QpIHtcbiAgICAgICAgICAgICAgICBzdWJMaXN0LmVtaXR0ZXIub2ZmKCdhZGQnLCB0aGlzLm9uU3ViTGlzdEFkZF8pO1xuICAgICAgICAgICAgICAgIHN1Ykxpc3QuZW1pdHRlci5vZmYoJ3JlbW92ZScsIHRoaXMub25TdWJMaXN0UmVtb3ZlXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgncmVtb3ZlJywge1xuICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICBpdGVtOiBpdGVtLFxuICAgICAgICAgICAgICAgIHJvb3Q6IHRoaXMsXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25TdWJMaXN0QWRkXyhldikge1xuICAgICAgICAgICAgdGhpcy5jYWNoZV8uYWRkKGV2Lml0ZW0pO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2FkZCcsIHtcbiAgICAgICAgICAgICAgICBpbmRleDogZXYuaW5kZXgsXG4gICAgICAgICAgICAgICAgaXRlbTogZXYuaXRlbSxcbiAgICAgICAgICAgICAgICByb290OiB0aGlzLFxuICAgICAgICAgICAgICAgIHRhcmdldDogZXYudGFyZ2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25TdWJMaXN0UmVtb3ZlXyhldikge1xuICAgICAgICAgICAgdGhpcy5jYWNoZV8uZGVsZXRlKGV2Lml0ZW0pO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ3JlbW92ZScsIHtcbiAgICAgICAgICAgICAgICBpbmRleDogZXYuaW5kZXgsXG4gICAgICAgICAgICAgICAgaXRlbTogZXYuaXRlbSxcbiAgICAgICAgICAgICAgICByb290OiB0aGlzLFxuICAgICAgICAgICAgICAgIHRhcmdldDogZXYudGFyZ2V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBJbnB1dEJpbmRpbmdBcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgdGhpcy5vbkJpbmRpbmdDaGFuZ2VfID0gdGhpcy5vbkJpbmRpbmdDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8uYmluZGluZy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQmluZGluZ0NoYW5nZV8pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBsYWJlbCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLmdldCgnbGFiZWwnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgbGFiZWwobGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuc2V0KCdsYWJlbCcsIGxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJoID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5vbihldmVudE5hbWUsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIGJoKGV2LmV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgcmVmcmVzaCgpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8uYmluZGluZy5yZWFkKCk7XG4gICAgICAgIH1cbiAgICAgICAgb25CaW5kaW5nQ2hhbmdlXyhldikge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBldi5zZW5kZXIudGFyZ2V0LnJlYWQoKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgIGV2ZW50OiBuZXcgVHBDaGFuZ2VFdmVudCh0aGlzLCBmb3JjZUNhc3QodmFsdWUpLCB0aGlzLmNvbnRyb2xsZXJfLmJpbmRpbmcudGFyZ2V0LnByZXNldEtleSwgZXYub3B0aW9ucy5sYXN0KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgSW5wdXRCaW5kaW5nQ29udHJvbGxlciBleHRlbmRzIExhYmVsQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBzdXBlcihkb2MsIGNvbmZpZyk7XG4gICAgICAgICAgICB0aGlzLmJpbmRpbmcgPSBjb25maWcuYmluZGluZztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIE1vbml0b3JCaW5kaW5nQXBpIGV4dGVuZHMgQmxhZGVBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyKTtcbiAgICAgICAgICAgIHRoaXMub25CaW5kaW5nVXBkYXRlXyA9IHRoaXMub25CaW5kaW5nVXBkYXRlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXyA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLmJpbmRpbmcuZW1pdHRlci5vbigndXBkYXRlJywgdGhpcy5vbkJpbmRpbmdVcGRhdGVfKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbGFiZWwoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5wcm9wcy5nZXQoJ2xhYmVsJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGxhYmVsKGxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLnNldCgnbGFiZWwnLCBsYWJlbCk7XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaCA9IGhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8ub24oZXZlbnROYW1lLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICBiaChldi5ldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHJlZnJlc2goKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLmJpbmRpbmcucmVhZCgpO1xuICAgICAgICB9XG4gICAgICAgIG9uQmluZGluZ1VwZGF0ZV8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZXYuc2VuZGVyLnRhcmdldC5yZWFkKCk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ3VwZGF0ZScsIHtcbiAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwVXBkYXRlRXZlbnQodGhpcywgZm9yY2VDYXN0KHZhbHVlKSwgdGhpcy5jb250cm9sbGVyXy5iaW5kaW5nLnRhcmdldC5wcmVzZXRLZXkpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIgZXh0ZW5kcyBMYWJlbENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgc3VwZXIoZG9jLCBjb25maWcpO1xuICAgICAgICAgICAgdGhpcy5iaW5kaW5nID0gY29uZmlnLmJpbmRpbmc7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQodGhpcy5iaW5kaW5nLnRpY2tlcik7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcy5oYW5kbGVEaXNwb3NlKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRpbmcuZGlzcG9zZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBmaW5kU3ViQmxhZGVBcGlTZXQoYXBpKSB7XG4gICAgICAgIGlmIChhcGkgaW5zdGFuY2VvZiBSYWNrQXBpKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBpWydhcGlTZXRfJ107XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGFwaSBpbnN0YW5jZW9mIFJhY2tMaWtlQXBpKSB7XG4gICAgICAgICAgICByZXR1cm4gYXBpWydyYWNrQXBpXyddWydhcGlTZXRfJ107XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEFwaUJ5Q29udHJvbGxlcihhcGlTZXQsIGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgYXBpID0gYXBpU2V0LmZpbmQoKGFwaSkgPT4gYXBpLmNvbnRyb2xsZXJfID09PSBjb250cm9sbGVyKTtcbiAgICAgICAgaWYgKCFhcGkpIHtcbiAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXBpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVCaW5kaW5nVGFyZ2V0KG9iaiwga2V5LCBvcHRfaWQpIHtcbiAgICAgICAgaWYgKCFCaW5kaW5nVGFyZ2V0LmlzQmluZGFibGUob2JqKSkge1xuICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5ub3RCaW5kYWJsZSgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQmluZGluZ1RhcmdldChvYmosIGtleSwgb3B0X2lkKTtcbiAgICB9XG4gICAgY2xhc3MgUmFja0FwaSBleHRlbmRzIEJsYWRlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlciwgcG9vbCkge1xuICAgICAgICAgICAgc3VwZXIoY29udHJvbGxlcik7XG4gICAgICAgICAgICB0aGlzLm9uUmFja0FkZF8gPSB0aGlzLm9uUmFja0FkZF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25SYWNrUmVtb3ZlXyA9IHRoaXMub25SYWNrUmVtb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblJhY2tJbnB1dENoYW5nZV8gPSB0aGlzLm9uUmFja0lucHV0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblJhY2tNb25pdG9yVXBkYXRlXyA9IHRoaXMub25SYWNrTW9uaXRvclVwZGF0ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8gPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5hcGlTZXRfID0gbmV3IE5lc3RlZE9yZGVyZWRTZXQoZmluZFN1YkJsYWRlQXBpU2V0KTtcbiAgICAgICAgICAgIHRoaXMucG9vbF8gPSBwb29sO1xuICAgICAgICAgICAgY29uc3QgcmFjayA9IHRoaXMuY29udHJvbGxlcl8ucmFjaztcbiAgICAgICAgICAgIHJhY2suZW1pdHRlci5vbignYWRkJywgdGhpcy5vblJhY2tBZGRfKTtcbiAgICAgICAgICAgIHJhY2suZW1pdHRlci5vbigncmVtb3ZlJywgdGhpcy5vblJhY2tSZW1vdmVfKTtcbiAgICAgICAgICAgIHJhY2suZW1pdHRlci5vbignaW5wdXRjaGFuZ2UnLCB0aGlzLm9uUmFja0lucHV0Q2hhbmdlXyk7XG4gICAgICAgICAgICByYWNrLmVtaXR0ZXIub24oJ21vbml0b3J1cGRhdGUnLCB0aGlzLm9uUmFja01vbml0b3JVcGRhdGVfKTtcbiAgICAgICAgICAgIHJhY2suY2hpbGRyZW4uZm9yRWFjaCgoYmMpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFVwQXBpXyhiYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgY2hpbGRyZW4oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5yYWNrLmNoaWxkcmVuLm1hcCgoYmMpID0+IGdldEFwaUJ5Q29udHJvbGxlcih0aGlzLmFwaVNldF8sIGJjKSk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkSW5wdXQob2JqZWN0LCBrZXksIG9wdF9wYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IG9wdF9wYXJhbXMgfHwge307XG4gICAgICAgICAgICBjb25zdCBkb2MgPSB0aGlzLmNvbnRyb2xsZXJfLnZpZXcuZWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgYmMgPSB0aGlzLnBvb2xfLmNyZWF0ZUlucHV0KGRvYywgY3JlYXRlQmluZGluZ1RhcmdldChvYmplY3QsIGtleSwgcGFyYW1zLnByZXNldEtleSksIHBhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCBhcGkgPSBuZXcgSW5wdXRCaW5kaW5nQXBpKGJjKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZChhcGksIHBhcmFtcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkTW9uaXRvcihvYmplY3QsIGtleSwgb3B0X3BhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gb3B0X3BhcmFtcyB8fCB7fTtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IHRoaXMuY29udHJvbGxlcl8udmlldy5lbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBiYyA9IHRoaXMucG9vbF8uY3JlYXRlTW9uaXRvcihkb2MsIGNyZWF0ZUJpbmRpbmdUYXJnZXQob2JqZWN0LCBrZXkpLCBwYXJhbXMpO1xuICAgICAgICAgICAgY29uc3QgYXBpID0gbmV3IE1vbml0b3JCaW5kaW5nQXBpKGJjKTtcbiAgICAgICAgICAgIHJldHVybiBmb3JjZUNhc3QodGhpcy5hZGQoYXBpLCBwYXJhbXMuaW5kZXgpKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRGb2xkZXIocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gYWRkRm9sZGVyQXNCbGFkZSh0aGlzLCBwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZEJ1dHRvbihwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhZGRCdXR0b25Bc0JsYWRlKHRoaXMsIHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkU2VwYXJhdG9yKG9wdF9wYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhZGRTZXBhcmF0b3JBc0JsYWRlKHRoaXMsIG9wdF9wYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFRhYihwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiBhZGRUYWJBc0JsYWRlKHRoaXMsIHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkKGFwaSwgb3B0X2luZGV4KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnJhY2suYWRkKGFwaS5jb250cm9sbGVyXywgb3B0X2luZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IGdhcGkgPSB0aGlzLmFwaVNldF8uZmluZCgoYSkgPT4gYS5jb250cm9sbGVyXyA9PT0gYXBpLmNvbnRyb2xsZXJfKTtcbiAgICAgICAgICAgIGlmIChnYXBpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcGlTZXRfLnJlbW92ZShnYXBpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuYXBpU2V0Xy5hZGQoYXBpKTtcbiAgICAgICAgICAgIHJldHVybiBhcGk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlKGFwaSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5yYWNrLnJlbW92ZShhcGkuY29udHJvbGxlcl8pO1xuICAgICAgICB9XG4gICAgICAgIGFkZEJsYWRlKHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5jb250cm9sbGVyXy52aWV3LmVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gdGhpcy5wb29sXy5jcmVhdGVCbGFkZShkb2MsIHBhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCBhcGkgPSB0aGlzLnBvb2xfLmNyZWF0ZUJsYWRlQXBpKGJjKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFkZChhcGksIHBhcmFtcy5pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaCA9IGhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8ub24oZXZlbnROYW1lLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICBiaChldi5ldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIHNldFVwQXBpXyhiYykge1xuICAgICAgICAgICAgY29uc3QgYXBpID0gdGhpcy5hcGlTZXRfLmZpbmQoKGFwaSkgPT4gYXBpLmNvbnRyb2xsZXJfID09PSBiYyk7XG4gICAgICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYXBpU2V0Xy5hZGQodGhpcy5wb29sXy5jcmVhdGVCbGFkZUFwaShiYykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uUmFja0FkZF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0VXBBcGlfKGV2LmJsYWRlQ29udHJvbGxlcik7XG4gICAgICAgIH1cbiAgICAgICAgb25SYWNrUmVtb3ZlXyhldikge1xuICAgICAgICAgICAgaWYgKGV2LmlzUm9vdCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFwaSA9IGdldEFwaUJ5Q29udHJvbGxlcih0aGlzLmFwaVNldF8sIGV2LmJsYWRlQ29udHJvbGxlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5hcGlTZXRfLnJlbW92ZShhcGkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uUmFja0lucHV0Q2hhbmdlXyhldikge1xuICAgICAgICAgICAgY29uc3QgYmMgPSBldi5ibGFkZUNvbnRyb2xsZXI7XG4gICAgICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBJbnB1dEJpbmRpbmdDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXBpID0gZ2V0QXBpQnlDb250cm9sbGVyKHRoaXMuYXBpU2V0XywgYmMpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGJpbmRpbmcgPSBiYy5iaW5kaW5nO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwQ2hhbmdlRXZlbnQoYXBpLCBmb3JjZUNhc3QoYmluZGluZy50YXJnZXQucmVhZCgpKSwgYmluZGluZy50YXJnZXQucHJlc2V0S2V5LCBldi5vcHRpb25zLmxhc3QpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYmMgaW5zdGFuY2VvZiBWYWx1ZUJsYWRlQ29udHJvbGxlcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFwaSA9IGdldEFwaUJ5Q29udHJvbGxlcih0aGlzLmFwaVNldF8sIGJjKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcENoYW5nZUV2ZW50KGFwaSwgYmMudmFsdWUucmF3VmFsdWUsIHVuZGVmaW5lZCwgZXYub3B0aW9ucy5sYXN0KSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblJhY2tNb25pdG9yVXBkYXRlXyhldikge1xuICAgICAgICAgICAgaWYgKCEoZXYuYmxhZGVDb250cm9sbGVyIGluc3RhbmNlb2YgTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IGdldEFwaUJ5Q29udHJvbGxlcih0aGlzLmFwaVNldF8sIGV2LmJsYWRlQ29udHJvbGxlcik7XG4gICAgICAgICAgICBjb25zdCBiaW5kaW5nID0gZXYuYmxhZGVDb250cm9sbGVyLmJpbmRpbmc7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ3VwZGF0ZScsIHtcbiAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwVXBkYXRlRXZlbnQoYXBpLCBmb3JjZUNhc3QoYmluZGluZy50YXJnZXQucmVhZCgpKSwgYmluZGluZy50YXJnZXQucHJlc2V0S2V5KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgRm9sZGVyQXBpIGV4dGVuZHMgUmFja0xpa2VBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyLCBwb29sKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyLCBuZXcgUmFja0FwaShjb250cm9sbGVyLnJhY2tDb250cm9sbGVyLCBwb29sKSk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8uZm9sZGFibGVcbiAgICAgICAgICAgICAgICAudmFsdWUoJ2V4cGFuZGVkJylcbiAgICAgICAgICAgICAgICAuZW1pdHRlci5vbignY2hhbmdlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdmb2xkJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwRm9sZEV2ZW50KHRoaXMsIGV2LnNlbmRlci5yYXdWYWx1ZSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmFja0FwaV8ub24oJ2NoYW5nZScsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogZXYsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmFja0FwaV8ub24oJ3VwZGF0ZScsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgndXBkYXRlJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogZXYsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgZXhwYW5kZWQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5mb2xkYWJsZS5nZXQoJ2V4cGFuZGVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGV4cGFuZGVkKGV4cGFuZGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLmZvbGRhYmxlLnNldCgnZXhwYW5kZWQnLCBleHBhbmRlZCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHRpdGxlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuZ2V0KCd0aXRsZScpO1xuICAgICAgICB9XG4gICAgICAgIHNldCB0aXRsZSh0aXRsZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wcm9wcy5zZXQoJ3RpdGxlJywgdGl0bGUpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBjaGlsZHJlbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmNoaWxkcmVuO1xuICAgICAgICB9XG4gICAgICAgIGFkZElucHV0KG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRJbnB1dChvYmplY3QsIGtleSwgb3B0X3BhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkTW9uaXRvcihvYmplY3QsIGtleSwgb3B0X3BhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkTW9uaXRvcihvYmplY3QsIGtleSwgb3B0X3BhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkRm9sZGVyKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkRm9sZGVyKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkQnV0dG9uKHBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkQnV0dG9uKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkU2VwYXJhdG9yKG9wdF9wYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZFNlcGFyYXRvcihvcHRfcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRUYWIocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRUYWIocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGQoYXBpLCBvcHRfaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZChhcGksIG9wdF9pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlKGFwaSkge1xuICAgICAgICAgICAgdGhpcy5yYWNrQXBpXy5yZW1vdmUoYXBpKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRCbGFkZShwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZEJsYWRlKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICAgICAgb24oZXZlbnROYW1lLCBoYW5kbGVyKSB7XG4gICAgICAgICAgICBjb25zdCBiaCA9IGhhbmRsZXIuYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8ub24oZXZlbnROYW1lLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICBiaChldi5ldmVudCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUmFja0xpa2VDb250cm9sbGVyIGV4dGVuZHMgQmxhZGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgICAgICBzdXBlcih7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGNvbmZpZy5ibGFkZSxcbiAgICAgICAgICAgICAgICB2aWV3OiBjb25maWcudmlldyxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy5yYWNrQ29udHJvbGxlci52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucmFja0NvbnRyb2xsZXIgPSBjb25maWcucmFja0NvbnRyb2xsZXI7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBQbGFpblZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gQ2xhc3NOYW1lKGNvbmZpZy52aWV3TmFtZSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmluZElucHV0QmluZGluZ0NvbnRyb2xsZXIoYmNzLCBiKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYmNzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IGJjc1tpXTtcbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIElucHV0QmluZGluZ0NvbnRyb2xsZXIgJiYgYmMuYmluZGluZyA9PT0gYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZE1vbml0b3JCaW5kaW5nQ29udHJvbGxlcihiY3MsIGIpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gYmNzW2ldO1xuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgTW9uaXRvckJpbmRpbmdDb250cm9sbGVyICYmIGJjLmJpbmRpbmcgPT09IGIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRWYWx1ZUJsYWRlQ29udHJvbGxlcihiY3MsIHYpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiY3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGJjID0gYmNzW2ldO1xuICAgICAgICAgICAgaWYgKGJjIGluc3RhbmNlb2YgVmFsdWVCbGFkZUNvbnRyb2xsZXIgJiYgYmMudmFsdWUgPT09IHYpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmM7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRTdWJSYWNrKGJjKSB7XG4gICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIFJhY2tDb250cm9sbGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gYmMucmFjaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBSYWNrTGlrZUNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBiYy5yYWNrQ29udHJvbGxlci5yYWNrO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmaW5kU3ViQmxhZGVDb250cm9sbGVyU2V0KGJjKSB7XG4gICAgICAgIGNvbnN0IHJhY2sgPSBmaW5kU3ViUmFjayhiYyk7XG4gICAgICAgIHJldHVybiByYWNrID8gcmFja1snYmNTZXRfJ10gOiBudWxsO1xuICAgIH1cbiAgICBjbGFzcyBCbGFkZVJhY2sge1xuICAgICAgICBjb25zdHJ1Y3RvcihibGFkZSkge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgdGhpcy5vbkJsYWRlUG9zaXRpb25zQ2hhbmdlXyA9IHRoaXMub25CbGFkZVBvc2l0aW9uc0NoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25TZXRBZGRfID0gdGhpcy5vblNldEFkZF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25TZXRSZW1vdmVfID0gdGhpcy5vblNldFJlbW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGlsZERpc3Bvc2VfID0gdGhpcy5vbkNoaWxkRGlzcG9zZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGlsZFBvc2l0aW9uc0NoYW5nZV8gPSB0aGlzLm9uQ2hpbGRQb3NpdGlvbnNDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uQ2hpbGRJbnB1dENoYW5nZV8gPSB0aGlzLm9uQ2hpbGRJbnB1dENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGlsZE1vbml0b3JVcGRhdGVfID0gdGhpcy5vbkNoaWxkTW9uaXRvclVwZGF0ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25DaGlsZFZhbHVlQ2hhbmdlXyA9IHRoaXMub25DaGlsZFZhbHVlQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkNoaWxkVmlld1Byb3BzQ2hhbmdlXyA9IHRoaXMub25DaGlsZFZpZXdQcm9wc0NoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25EZXNjZW5kYW50TGF5b3V0XyA9IHRoaXMub25EZXNjZW5kYW50TGF5b3V0Xy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkRlc2NlbmRhbnRJbnB1dENoYW5nZV8gPSB0aGlzLm9uRGVzY2VuZGFudElucHV0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkRlc2NlbmRhbnRNb25pdG9yVXBkYXRlXyA9XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRlc2NlbmRhbnRNb25pdG9yVXBkYXRlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuYmxhZGVfID0gYmxhZGUgIT09IG51bGwgJiYgYmxhZGUgIT09IHZvaWQgMCA/IGJsYWRlIDogbnVsbDtcbiAgICAgICAgICAgIChfYSA9IHRoaXMuYmxhZGVfKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudmFsdWUoJ3Bvc2l0aW9ucycpLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25CbGFkZVBvc2l0aW9uc0NoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy5iY1NldF8gPSBuZXcgTmVzdGVkT3JkZXJlZFNldChmaW5kU3ViQmxhZGVDb250cm9sbGVyU2V0KTtcbiAgICAgICAgICAgIHRoaXMuYmNTZXRfLmVtaXR0ZXIub24oJ2FkZCcsIHRoaXMub25TZXRBZGRfKTtcbiAgICAgICAgICAgIHRoaXMuYmNTZXRfLmVtaXR0ZXIub24oJ3JlbW92ZScsIHRoaXMub25TZXRSZW1vdmVfKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgY2hpbGRyZW4oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5iY1NldF8uaXRlbXM7XG4gICAgICAgIH1cbiAgICAgICAgYWRkKGJjLCBvcHRfaW5kZXgpIHtcbiAgICAgICAgICAgIGlmIChiYy5wYXJlbnQpIHtcbiAgICAgICAgICAgICAgICBiYy5wYXJlbnQucmVtb3ZlKGJjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJjWydwYXJlbnRfJ10gPSB0aGlzO1xuICAgICAgICAgICAgdGhpcy5iY1NldF8uYWRkKGJjLCBvcHRfaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShiYykge1xuICAgICAgICAgICAgYmNbJ3BhcmVudF8nXSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmJjU2V0Xy5yZW1vdmUoYmMpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmQoY29udHJvbGxlckNsYXNzKSB7XG4gICAgICAgICAgICByZXR1cm4gZm9yY2VDYXN0KHRoaXMuYmNTZXRfLmFsbEl0ZW1zKCkuZmlsdGVyKChiYykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYyBpbnN0YW5jZW9mIGNvbnRyb2xsZXJDbGFzcztcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBvblNldEFkZF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zXygpO1xuICAgICAgICAgICAgY29uc3QgaXNSb290ID0gZXYudGFyZ2V0ID09PSBldi5yb290O1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2FkZCcsIHtcbiAgICAgICAgICAgICAgICBibGFkZUNvbnRyb2xsZXI6IGV2Lml0ZW0sXG4gICAgICAgICAgICAgICAgaW5kZXg6IGV2LmluZGV4LFxuICAgICAgICAgICAgICAgIGlzUm9vdDogaXNSb290LFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFpc1Jvb3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBiYyA9IGV2Lml0ZW07XG4gICAgICAgICAgICBiYy52aWV3UHJvcHMuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoaWxkVmlld1Byb3BzQ2hhbmdlXyk7XG4gICAgICAgICAgICBiYy5ibGFkZVxuICAgICAgICAgICAgICAgIC52YWx1ZSgncG9zaXRpb25zJylcbiAgICAgICAgICAgICAgICAuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoaWxkUG9zaXRpb25zQ2hhbmdlXyk7XG4gICAgICAgICAgICBiYy52aWV3UHJvcHMuaGFuZGxlRGlzcG9zZSh0aGlzLm9uQ2hpbGREaXNwb3NlXyk7XG4gICAgICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBJbnB1dEJpbmRpbmdDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgYmMuYmluZGluZy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hpbGRJbnB1dENoYW5nZV8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYmMgaW5zdGFuY2VvZiBNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBiYy5iaW5kaW5nLmVtaXR0ZXIub24oJ3VwZGF0ZScsIHRoaXMub25DaGlsZE1vbml0b3JVcGRhdGVfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGJjIGluc3RhbmNlb2YgVmFsdWVCbGFkZUNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBiYy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hpbGRWYWx1ZUNoYW5nZV8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmFjayA9IGZpbmRTdWJSYWNrKGJjKTtcbiAgICAgICAgICAgICAgICBpZiAocmFjaykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbWl0dGVyID0gcmFjay5lbWl0dGVyO1xuICAgICAgICAgICAgICAgICAgICBlbWl0dGVyLm9uKCdsYXlvdXQnLCB0aGlzLm9uRGVzY2VuZGFudExheW91dF8pO1xuICAgICAgICAgICAgICAgICAgICBlbWl0dGVyLm9uKCdpbnB1dGNoYW5nZScsIHRoaXMub25EZXNjZW5kYW50SW5wdXRDaGFuZ2VfKTtcbiAgICAgICAgICAgICAgICAgICAgZW1pdHRlci5vbignbW9uaXRvcnVwZGF0ZScsIHRoaXMub25EZXNjZW5kYW50TW9uaXRvclVwZGF0ZV8pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvblNldFJlbW92ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9zaXRpb25zXygpO1xuICAgICAgICAgICAgY29uc3QgaXNSb290ID0gZXYudGFyZ2V0ID09PSBldi5yb290O1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ3JlbW92ZScsIHtcbiAgICAgICAgICAgICAgICBibGFkZUNvbnRyb2xsZXI6IGV2Lml0ZW0sXG4gICAgICAgICAgICAgICAgaXNSb290OiBpc1Jvb3QsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWlzUm9vdCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJjID0gZXYuaXRlbTtcbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIElucHV0QmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBiYy5iaW5kaW5nLmVtaXR0ZXIub2ZmKCdjaGFuZ2UnLCB0aGlzLm9uQ2hpbGRJbnB1dENoYW5nZV8pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYmMgaW5zdGFuY2VvZiBNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICBiYy5iaW5kaW5nLmVtaXR0ZXIub2ZmKCd1cGRhdGUnLCB0aGlzLm9uQ2hpbGRNb25pdG9yVXBkYXRlXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChiYyBpbnN0YW5jZW9mIFZhbHVlQmxhZGVDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgYmMudmFsdWUuZW1pdHRlci5vZmYoJ2NoYW5nZScsIHRoaXMub25DaGlsZFZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByYWNrID0gZmluZFN1YlJhY2soYmMpO1xuICAgICAgICAgICAgICAgIGlmIChyYWNrKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVtaXR0ZXIgPSByYWNrLmVtaXR0ZXI7XG4gICAgICAgICAgICAgICAgICAgIGVtaXR0ZXIub2ZmKCdsYXlvdXQnLCB0aGlzLm9uRGVzY2VuZGFudExheW91dF8pO1xuICAgICAgICAgICAgICAgICAgICBlbWl0dGVyLm9mZignaW5wdXRjaGFuZ2UnLCB0aGlzLm9uRGVzY2VuZGFudElucHV0Q2hhbmdlXyk7XG4gICAgICAgICAgICAgICAgICAgIGVtaXR0ZXIub2ZmKCdtb25pdG9ydXBkYXRlJywgdGhpcy5vbkRlc2NlbmRhbnRNb25pdG9yVXBkYXRlXyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZVBvc2l0aW9uc18oKSB7XG4gICAgICAgICAgICBjb25zdCB2aXNpYmxlSXRlbXMgPSB0aGlzLmJjU2V0Xy5pdGVtcy5maWx0ZXIoKGJjKSA9PiAhYmMudmlld1Byb3BzLmdldCgnaGlkZGVuJykpO1xuICAgICAgICAgICAgY29uc3QgZmlyc3RWaXNpYmxlSXRlbSA9IHZpc2libGVJdGVtc1swXTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RWaXNpYmxlSXRlbSA9IHZpc2libGVJdGVtc1t2aXNpYmxlSXRlbXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICB0aGlzLmJjU2V0Xy5pdGVtcy5mb3JFYWNoKChiYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBzID0gW107XG4gICAgICAgICAgICAgICAgaWYgKGJjID09PSBmaXJzdFZpc2libGVJdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgIHBzLnB1c2goJ2ZpcnN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5ibGFkZV8gfHxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYmxhZGVfLmdldCgncG9zaXRpb25zJykuaW5jbHVkZXMoJ3ZlcnlmaXJzdCcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcy5wdXNoKCd2ZXJ5Zmlyc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYmMgPT09IGxhc3RWaXNpYmxlSXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBwcy5wdXNoKCdsYXN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5ibGFkZV8gfHwgdGhpcy5ibGFkZV8uZ2V0KCdwb3NpdGlvbnMnKS5pbmNsdWRlcygndmVyeWxhc3QnKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHMucHVzaCgndmVyeWxhc3QnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBiYy5ibGFkZS5zZXQoJ3Bvc2l0aW9ucycsIHBzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hpbGRQb3NpdGlvbnNDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnNfKCk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnbGF5b3V0Jywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hpbGRWaWV3UHJvcHNDaGFuZ2VfKF9ldikge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnNfKCk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnbGF5b3V0Jywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hpbGREaXNwb3NlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc3Bvc2VkVWNzID0gdGhpcy5iY1NldF8uaXRlbXMuZmlsdGVyKChiYykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBiYy52aWV3UHJvcHMuZ2V0KCdkaXNwb3NlZCcpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBkaXNwb3NlZFVjcy5mb3JFYWNoKChiYykgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYmNTZXRfLnJlbW92ZShiYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbkNoaWxkSW5wdXRDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IGZpbmRJbnB1dEJpbmRpbmdDb250cm9sbGVyKHRoaXMuZmluZChJbnB1dEJpbmRpbmdDb250cm9sbGVyKSwgZXYuc2VuZGVyKTtcbiAgICAgICAgICAgIGlmICghYmMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnaW5wdXRjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgYmxhZGVDb250cm9sbGVyOiBiYyxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBldi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hpbGRNb25pdG9yVXBkYXRlXyhldikge1xuICAgICAgICAgICAgY29uc3QgYmMgPSBmaW5kTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKHRoaXMuZmluZChNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIpLCBldi5zZW5kZXIpO1xuICAgICAgICAgICAgaWYgKCFiYykge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdtb25pdG9ydXBkYXRlJywge1xuICAgICAgICAgICAgICAgIGJsYWRlQ29udHJvbGxlcjogYmMsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGlsZFZhbHVlQ2hhbmdlXyhldikge1xuICAgICAgICAgICAgY29uc3QgYmMgPSBmaW5kVmFsdWVCbGFkZUNvbnRyb2xsZXIodGhpcy5maW5kKFZhbHVlQmxhZGVDb250cm9sbGVyKSwgZXYuc2VuZGVyKTtcbiAgICAgICAgICAgIGlmICghYmMpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnaW5wdXRjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgYmxhZGVDb250cm9sbGVyOiBiYyxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBldi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uRGVzY2VuZGFudExheW91dF8oXykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnNfKCk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnbGF5b3V0Jywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uRGVzY2VuZGFudElucHV0Q2hhbmdlXyhldikge1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2lucHV0Y2hhbmdlJywge1xuICAgICAgICAgICAgICAgIGJsYWRlQ29udHJvbGxlcjogZXYuYmxhZGVDb250cm9sbGVyLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IGV2Lm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25EZXNjZW5kYW50TW9uaXRvclVwZGF0ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdtb25pdG9ydXBkYXRlJywge1xuICAgICAgICAgICAgICAgIGJsYWRlQ29udHJvbGxlcjogZXYuYmxhZGVDb250cm9sbGVyLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uQmxhZGVQb3NpdGlvbnNDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVQb3NpdGlvbnNfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBSYWNrQ29udHJvbGxlciBleHRlbmRzIEJsYWRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBzdXBlcihPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sIGNvbmZpZyksIHsgdmlldzogbmV3IFBsYWluVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICAgICAgdmlld05hbWU6ICdicmsnLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSkgfSkpO1xuICAgICAgICAgICAgdGhpcy5vblJhY2tBZGRfID0gdGhpcy5vblJhY2tBZGRfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUmFja1JlbW92ZV8gPSB0aGlzLm9uUmFja1JlbW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIGNvbnN0IHJhY2sgPSBuZXcgQmxhZGVSYWNrKGNvbmZpZy5yb290ID8gdW5kZWZpbmVkIDogY29uZmlnLmJsYWRlKTtcbiAgICAgICAgICAgIHJhY2suZW1pdHRlci5vbignYWRkJywgdGhpcy5vblJhY2tBZGRfKTtcbiAgICAgICAgICAgIHJhY2suZW1pdHRlci5vbigncmVtb3ZlJywgdGhpcy5vblJhY2tSZW1vdmVfKTtcbiAgICAgICAgICAgIHRoaXMucmFjayA9IHJhY2s7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcy5oYW5kbGVEaXNwb3NlKCgpID0+IHtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5yYWNrLmNoaWxkcmVuLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJjID0gdGhpcy5yYWNrLmNoaWxkcmVuW2ldO1xuICAgICAgICAgICAgICAgICAgICBiYy52aWV3UHJvcHMuc2V0KCdkaXNwb3NlZCcsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUmFja0FkZF8oZXYpIHtcbiAgICAgICAgICAgIGlmICghZXYuaXNSb290KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaW5zZXJ0RWxlbWVudEF0KHRoaXMudmlldy5lbGVtZW50LCBldi5ibGFkZUNvbnRyb2xsZXIudmlldy5lbGVtZW50LCBldi5pbmRleCk7XG4gICAgICAgIH1cbiAgICAgICAgb25SYWNrUmVtb3ZlXyhldikge1xuICAgICAgICAgICAgaWYgKCFldi5pc1Jvb3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZW1vdmVFbGVtZW50KGV2LmJsYWRlQ29udHJvbGxlci52aWV3LmVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYmxhZGVDb250YWluZXJDbGFzc05hbWUgPSBDbGFzc05hbWUoJ2NudCcpO1xuXG4gICAgY2xhc3MgRm9sZGVyVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmNsYXNzTmFtZV8gPSBDbGFzc05hbWUoY29uZmlnLnZpZXdOYW1lIHx8ICdmbGQnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKHRoaXMuY2xhc3NOYW1lXygpLCBibGFkZUNvbnRhaW5lckNsYXNzTmFtZSgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmZvbGRhYmxlXyA9IGNvbmZpZy5mb2xkYWJsZTtcbiAgICAgICAgICAgIHRoaXMuZm9sZGFibGVfLmJpbmRFeHBhbmRlZENsYXNzKHRoaXMuZWxlbWVudCwgdGhpcy5jbGFzc05hbWVfKHVuZGVmaW5lZCwgJ2V4cGFuZGVkJykpO1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKHRoaXMuZm9sZGFibGVfLCAnY29tcGxldGVkJywgdmFsdWVUb0NsYXNzTmFtZSh0aGlzLmVsZW1lbnQsIHRoaXMuY2xhc3NOYW1lXyh1bmRlZmluZWQsICdjcGwnKSkpO1xuICAgICAgICAgICAgY29uc3QgYnV0dG9uRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgICAgIGJ1dHRvbkVsZW0uY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZV8oJ2InKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAoY29uZmlnLnByb3BzLCAndGl0bGUnLCAodGl0bGUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoaXNFbXB0eSh0aXRsZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc05hbWVfKHVuZGVmaW5lZCwgJ25vdCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKHRoaXMuY2xhc3NOYW1lXyh1bmRlZmluZWQsICdub3QnKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmREaXNhYmxlZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudCA9IGJ1dHRvbkVsZW07XG4gICAgICAgICAgICBjb25zdCB0aXRsZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aXRsZUVsZW0uY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZV8oJ3QnKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVUb1RleHRDb250ZW50KGNvbmZpZy5wcm9wcy52YWx1ZSgndGl0bGUnKSwgdGl0bGVFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudC5hcHBlbmRDaGlsZCh0aXRsZUVsZW0pO1xuICAgICAgICAgICAgdGhpcy50aXRsZUVsZW1lbnQgPSB0aXRsZUVsZW07XG4gICAgICAgICAgICBjb25zdCBtYXJrRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG1hcmtFbGVtLmNsYXNzTGlzdC5hZGQodGhpcy5jbGFzc05hbWVfKCdtJykpO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50LmFwcGVuZENoaWxkKG1hcmtFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lckVsZW0gPSBjb25maWcuY29udGFpbmVyRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnRhaW5lckVsZW0uY2xhc3NMaXN0LmFkZCh0aGlzLmNsYXNzTmFtZV8oJ2MnKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGFpbmVyRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQgPSBjb250YWluZXJFbGVtO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgRm9sZGVyQ29udHJvbGxlciBleHRlbmRzIFJhY2tMaWtlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCBmb2xkYWJsZSA9IEZvbGRhYmxlLmNyZWF0ZSgoX2EgPSBjb25maWcuZXhwYW5kZWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRydWUpO1xuICAgICAgICAgICAgY29uc3QgcmMgPSBuZXcgUmFja0NvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGNvbmZpZy5ibGFkZSxcbiAgICAgICAgICAgICAgICByb290OiBjb25maWcucm9vdCxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGNvbmZpZy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHN1cGVyKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnKSwgeyByYWNrQ29udHJvbGxlcjogcmMsIHZpZXc6IG5ldyBGb2xkZXJWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgICAgICBjb250YWluZXJFbGVtZW50OiByYy52aWV3LmVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIGZvbGRhYmxlOiBmb2xkYWJsZSxcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5wcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgdmlld05hbWU6IGNvbmZpZy5yb290ID8gJ3JvdCcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KSB9KSk7XG4gICAgICAgICAgICB0aGlzLm9uVGl0bGVDbGlja18gPSB0aGlzLm9uVGl0bGVDbGlja18uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLmZvbGRhYmxlID0gZm9sZGFibGU7XG4gICAgICAgICAgICBiaW5kRm9sZGFibGUodGhpcy5mb2xkYWJsZSwgdGhpcy52aWV3LmNvbnRhaW5lckVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy52aWV3LmJ1dHRvbkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uVGl0bGVDbGlja18pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBkb2N1bWVudCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnZpZXcuZWxlbWVudC5vd25lckRvY3VtZW50O1xuICAgICAgICB9XG4gICAgICAgIG9uVGl0bGVDbGlja18oKSB7XG4gICAgICAgICAgICB0aGlzLmZvbGRhYmxlLnNldCgnZXhwYW5kZWQnLCAhdGhpcy5mb2xkYWJsZS5nZXQoJ2V4cGFuZGVkJykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgRm9sZGVyQmxhZGVQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnZm9sZGVyJyxcbiAgICAgICAgdHlwZTogJ2JsYWRlJyxcbiAgICAgICAgYWNjZXB0KHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICB0aXRsZTogcC5yZXF1aXJlZC5zdHJpbmcsXG4gICAgICAgICAgICAgICAgdmlldzogcC5yZXF1aXJlZC5jb25zdGFudCgnZm9sZGVyJyksXG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IHAub3B0aW9uYWwuYm9vbGVhbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdCA/IHsgcGFyYW1zOiByZXN1bHQgfSA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXIoYXJncykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBGb2xkZXJDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBibGFkZTogYXJncy5ibGFkZSxcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogYXJncy5wYXJhbXMuZXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogYXJncy5wYXJhbXMudGl0bGUsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBhcGkoYXJncykge1xuICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyIGluc3RhbmNlb2YgRm9sZGVyQ29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgRm9sZGVyQXBpKGFyZ3MuY29udHJvbGxlciwgYXJncy5wb29sKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xhc3MgTGFiZWxlZFZhbHVlQ29udHJvbGxlciBleHRlbmRzIFZhbHVlQmxhZGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdQcm9wcyA9IGNvbmZpZy52YWx1ZUNvbnRyb2xsZXIudmlld1Byb3BzO1xuICAgICAgICAgICAgc3VwZXIoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBjb25maWcpLCB7IHZhbHVlOiBjb25maWcudmFsdWVDb250cm9sbGVyLnZhbHVlLCB2aWV3OiBuZXcgTGFiZWxWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgICAgICBwcm9wczogY29uZmlnLnByb3BzLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KSwgdmlld1Byb3BzOiB2aWV3UHJvcHMgfSkpO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMudmFsdWVDb250cm9sbGVyID0gY29uZmlnLnZhbHVlQ29udHJvbGxlcjtcbiAgICAgICAgICAgIHRoaXMudmlldy52YWx1ZUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy52YWx1ZUNvbnRyb2xsZXIudmlldy5lbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFNlcGFyYXRvckFwaSBleHRlbmRzIEJsYWRlQXBpIHtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkbiA9IENsYXNzTmFtZSgnc3ByJyk7XG4gICAgY2xhc3MgU2VwYXJhdG9yVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbigpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBockVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnaHInKTtcbiAgICAgICAgICAgIGhyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRuKCdyJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGhyRWxlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBTZXBhcmF0b3JDb250cm9sbGVyIGV4dGVuZHMgQmxhZGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHN1cGVyKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnKSwgeyB2aWV3OiBuZXcgU2VwYXJhdG9yVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pIH0pKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IFNlcGFyYXRvckJsYWRlUGx1Z2luID0ge1xuICAgICAgICBpZDogJ3NlcGFyYXRvcicsXG4gICAgICAgIHR5cGU6ICdibGFkZScsXG4gICAgICAgIGFjY2VwdChwYXJhbXMpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgdmlldzogcC5yZXF1aXJlZC5jb25zdGFudCgnc2VwYXJhdG9yJyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyB7IHBhcmFtczogcmVzdWx0IH0gOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyKGFyZ3MpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgU2VwYXJhdG9yQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgYmxhZGU6IGFyZ3MuYmxhZGUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgICAgICBhcGkoYXJncykge1xuICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyIGluc3RhbmNlb2YgU2VwYXJhdG9yQ29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgU2VwYXJhdG9yQXBpKGFyZ3MuY29udHJvbGxlcik7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IGNsYXNzTmFtZSRtID0gQ2xhc3NOYW1lKCcnKTtcbiAgICBmdW5jdGlvbiB2YWx1ZVRvTW9kaWZpZXIoZWxlbSwgbW9kaWZpZXIpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlVG9DbGFzc05hbWUoZWxlbSwgY2xhc3NOYW1lJG0odW5kZWZpbmVkLCBtb2RpZmllcikpO1xuICAgIH1cbiAgICBjbGFzcyBWaWV3UHJvcHMgZXh0ZW5kcyBWYWx1ZU1hcCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHZhbHVlTWFwKSB7XG4gICAgICAgICAgICBzdXBlcih2YWx1ZU1hcCk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGNyZWF0ZShvcHRfaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbFZhbHVlID0gb3B0X2luaXRpYWxWYWx1ZSAhPT0gbnVsbCAmJiBvcHRfaW5pdGlhbFZhbHVlICE9PSB2b2lkIDAgPyBvcHRfaW5pdGlhbFZhbHVlIDoge307XG4gICAgICAgICAgICBjb25zdCBjb3JlT2JqID0ge1xuICAgICAgICAgICAgICAgIGRpc2FibGVkOiAoX2EgPSBpbml0aWFsVmFsdWUuZGlzYWJsZWQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGRpc3Bvc2VkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBoaWRkZW46IChfYiA9IGluaXRpYWxWYWx1ZS5oaWRkZW4pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGZhbHNlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGNvbnN0IGNvcmUgPSBWYWx1ZU1hcC5jcmVhdGVDb3JlKGNvcmVPYmopO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBWaWV3UHJvcHMoY29yZSk7XG4gICAgICAgIH1cbiAgICAgICAgYmluZENsYXNzTW9kaWZpZXJzKGVsZW0pIHtcbiAgICAgICAgICAgIGJpbmRWYWx1ZU1hcCh0aGlzLCAnZGlzYWJsZWQnLCB2YWx1ZVRvTW9kaWZpZXIoZWxlbSwgJ2Rpc2FibGVkJykpO1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKHRoaXMsICdoaWRkZW4nLCB2YWx1ZVRvTW9kaWZpZXIoZWxlbSwgJ2hpZGRlbicpKTtcbiAgICAgICAgfVxuICAgICAgICBiaW5kRGlzYWJsZWQodGFyZ2V0KSB7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAodGhpcywgJ2Rpc2FibGVkJywgKGRpc2FibGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgdGFyZ2V0LmRpc2FibGVkID0gZGlzYWJsZWQ7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBiaW5kVGFiSW5kZXgoZWxlbSkge1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKHRoaXMsICdkaXNhYmxlZCcsIChkaXNhYmxlZCkgPT4ge1xuICAgICAgICAgICAgICAgIGVsZW0udGFiSW5kZXggPSBkaXNhYmxlZCA/IC0xIDogMDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZURpc3Bvc2UoY2FsbGJhY2spIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUoJ2Rpc3Bvc2VkJykuZW1pdHRlci5vbignY2hhbmdlJywgKGRpc3Bvc2VkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRpc3Bvc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkbCA9IENsYXNzTmFtZSgndGJpJyk7XG4gICAgY2xhc3MgVGFiSXRlbVZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGwoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKGNvbmZpZy5wcm9wcywgJ3NlbGVjdGVkJywgKHNlbGVjdGVkKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRsKHVuZGVmaW5lZCwgJ3NlbCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSRsKHVuZGVmaW5lZCwgJ3NlbCcpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgICAgICBidXR0b25FbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGwoJ2InKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmREaXNhYmxlZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudCA9IGJ1dHRvbkVsZW07XG4gICAgICAgICAgICBjb25zdCB0aXRsZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aXRsZUVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkbCgndCcpKTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZVRvVGV4dENvbnRlbnQoY29uZmlnLnByb3BzLnZhbHVlKCd0aXRsZScpLCB0aXRsZUVsZW0pO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50LmFwcGVuZENoaWxkKHRpdGxlRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnRpdGxlRWxlbWVudCA9IHRpdGxlRWxlbTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRhYkl0ZW1Db250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlciA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLm9uQ2xpY2tfID0gdGhpcy5vbkNsaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBUYWJJdGVtVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBwcm9wczogY29uZmlnLnByb3BzLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmJ1dHRvbkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uQ2xpY2tfKTtcbiAgICAgICAgfVxuICAgICAgICBvbkNsaWNrXygpIHtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdjbGljaycsIHtcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFRhYlBhZ2VDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25JdGVtQ2xpY2tfID0gdGhpcy5vbkl0ZW1DbGlja18uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuaWNfID0gbmV3IFRhYkl0ZW1Db250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIHByb3BzOiBjb25maWcuaXRlbVByb3BzLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogVmlld1Byb3BzLmNyZWF0ZSgpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmljXy5lbWl0dGVyLm9uKCdjbGljaycsIHRoaXMub25JdGVtQ2xpY2tfKTtcbiAgICAgICAgICAgIHRoaXMuY2NfID0gbmV3IFJhY2tDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGJsYWRlOiBjcmVhdGVCbGFkZSgpLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogVmlld1Byb3BzLmNyZWF0ZSgpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnByb3BzID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKHRoaXMucHJvcHMsICdzZWxlY3RlZCcsIChzZWxlY3RlZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaXRlbUNvbnRyb2xsZXIucHJvcHMuc2V0KCdzZWxlY3RlZCcsIHNlbGVjdGVkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRlbnRDb250cm9sbGVyLnZpZXdQcm9wcy5zZXQoJ2hpZGRlbicsICFzZWxlY3RlZCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgaXRlbUNvbnRyb2xsZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pY187XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGNvbnRlbnRDb250cm9sbGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2NfO1xuICAgICAgICB9XG4gICAgICAgIG9uSXRlbUNsaWNrXygpIHtcbiAgICAgICAgICAgIHRoaXMucHJvcHMuc2V0KCdzZWxlY3RlZCcsIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgVGFiUGFnZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIsIGNvbnRlbnRSYWNrQXBpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfID0gY29udHJvbGxlcjtcbiAgICAgICAgICAgIHRoaXMucmFja0FwaV8gPSBjb250ZW50UmFja0FwaTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdGl0bGUoKSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gKF9hID0gdGhpcy5jb250cm9sbGVyXy5pdGVtQ29udHJvbGxlci5wcm9wcy5nZXQoJ3RpdGxlJykpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnO1xuICAgICAgICB9XG4gICAgICAgIHNldCB0aXRsZSh0aXRsZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5pdGVtQ29udHJvbGxlci5wcm9wcy5zZXQoJ3RpdGxlJywgdGl0bGUpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBzZWxlY3RlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLmdldCgnc2VsZWN0ZWQnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgc2VsZWN0ZWQoc2VsZWN0ZWQpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuc2V0KCdzZWxlY3RlZCcsIHNlbGVjdGVkKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgY2hpbGRyZW4oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5jaGlsZHJlbjtcbiAgICAgICAgfVxuICAgICAgICBhZGRCdXR0b24ocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRCdXR0b24ocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRGb2xkZXIocGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRGb2xkZXIocGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRTZXBhcmF0b3Iob3B0X3BhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmFja0FwaV8uYWRkU2VwYXJhdG9yKG9wdF9wYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZFRhYihwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZFRhYihwYXJhbXMpO1xuICAgICAgICB9XG4gICAgICAgIGFkZChhcGksIG9wdF9pbmRleCkge1xuICAgICAgICAgICAgdGhpcy5yYWNrQXBpXy5hZGQoYXBpLCBvcHRfaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShhcGkpIHtcbiAgICAgICAgICAgIHRoaXMucmFja0FwaV8ucmVtb3ZlKGFwaSk7XG4gICAgICAgIH1cbiAgICAgICAgYWRkSW5wdXQob2JqZWN0LCBrZXksIG9wdF9wYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZElucHV0KG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRNb25pdG9yKG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yYWNrQXBpXy5hZGRNb25pdG9yKG9iamVjdCwga2V5LCBvcHRfcGFyYW1zKTtcbiAgICAgICAgfVxuICAgICAgICBhZGRCbGFkZShwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJhY2tBcGlfLmFkZEJsYWRlKHBhcmFtcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUYWJBcGkgZXh0ZW5kcyBSYWNrTGlrZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIsIHBvb2wpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIsIG5ldyBSYWNrQXBpKGNvbnRyb2xsZXIucmFja0NvbnRyb2xsZXIsIHBvb2wpKTtcbiAgICAgICAgICAgIHRoaXMub25QYWdlQWRkXyA9IHRoaXMub25QYWdlQWRkXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBhZ2VSZW1vdmVfID0gdGhpcy5vblBhZ2VSZW1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMucGFnZUFwaU1hcF8gPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICB0aGlzLnJhY2tBcGlfLm9uKCdjaGFuZ2UnLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IGV2LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJhY2tBcGlfLm9uKCd1cGRhdGUnLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ3VwZGF0ZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IGV2LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnBhZ2VTZXQuZW1pdHRlci5vbignYWRkJywgdGhpcy5vblBhZ2VBZGRfKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucGFnZVNldC5lbWl0dGVyLm9uKCdyZW1vdmUnLCB0aGlzLm9uUGFnZVJlbW92ZV8pO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wYWdlU2V0Lml0ZW1zLmZvckVhY2goKHBjKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXRVcFBhZ2VBcGlfKHBjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBwYWdlcygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnBhZ2VTZXQuaXRlbXMubWFwKChwYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFwaSA9IHRoaXMucGFnZUFwaU1hcF8uZ2V0KHBjKTtcbiAgICAgICAgICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhcGk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBhZGRQYWdlKHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5jb250cm9sbGVyXy52aWV3LmVsZW1lbnQub3duZXJEb2N1bWVudDtcbiAgICAgICAgICAgIGNvbnN0IHBjID0gbmV3IFRhYlBhZ2VDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGl0ZW1Qcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHBhcmFtcy50aXRsZSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5hZGQocGMsIHBhcmFtcy5pbmRleCk7XG4gICAgICAgICAgICBjb25zdCBhcGkgPSB0aGlzLnBhZ2VBcGlNYXBfLmdldChwYyk7XG4gICAgICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcGk7XG4gICAgICAgIH1cbiAgICAgICAgcmVtb3ZlUGFnZShpbmRleCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5yZW1vdmUoaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLm9uKGV2ZW50TmFtZSwgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgYmgoZXYuZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBzZXRVcFBhZ2VBcGlfKHBjKSB7XG4gICAgICAgICAgICBjb25zdCByYWNrQXBpID0gdGhpcy5yYWNrQXBpX1snYXBpU2V0XyddLmZpbmQoKGFwaSkgPT4gYXBpLmNvbnRyb2xsZXJfID09PSBwYy5jb250ZW50Q29udHJvbGxlcik7XG4gICAgICAgICAgICBpZiAoIXJhY2tBcGkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhcGkgPSBuZXcgVGFiUGFnZUFwaShwYywgcmFja0FwaSk7XG4gICAgICAgICAgICB0aGlzLnBhZ2VBcGlNYXBfLnNldChwYywgYXBpKTtcbiAgICAgICAgfVxuICAgICAgICBvblBhZ2VBZGRfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLnNldFVwUGFnZUFwaV8oZXYuaXRlbSk7XG4gICAgICAgIH1cbiAgICAgICAgb25QYWdlUmVtb3ZlXyhldikge1xuICAgICAgICAgICAgY29uc3QgYXBpID0gdGhpcy5wYWdlQXBpTWFwXy5nZXQoZXYuaXRlbSk7XG4gICAgICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMucGFnZUFwaU1hcF8uZGVsZXRlKGV2Lml0ZW0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJGsgPSBDbGFzc05hbWUoJ3RhYicpO1xuICAgIGNsYXNzIFRhYlZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGsoKSwgYmxhZGVDb250YWluZXJDbGFzc05hbWUoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgYmluZFZhbHVlKGNvbmZpZy5lbXB0eSwgdmFsdWVUb0NsYXNzTmFtZSh0aGlzLmVsZW1lbnQsIGNsYXNzTmFtZSRrKHVuZGVmaW5lZCwgJ25vcCcpKSk7XG4gICAgICAgICAgICBjb25zdCBpdGVtc0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBpdGVtc0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkaygnaScpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChpdGVtc0VsZW0pO1xuICAgICAgICAgICAgdGhpcy5pdGVtc0VsZW1lbnQgPSBpdGVtc0VsZW07XG4gICAgICAgICAgICBjb25zdCBjb250ZW50c0VsZW0gPSBjb25maWcuY29udGVudHNFbGVtZW50O1xuICAgICAgICAgICAgY29udGVudHNFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGsoJ2MnKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoY29udGVudHNFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuY29udGVudHNFbGVtZW50ID0gY29udGVudHNFbGVtO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgVGFiQ29udHJvbGxlciBleHRlbmRzIFJhY2tMaWtlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBjb25zdCBjciA9IG5ldyBSYWNrQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBibGFkZTogY29uZmlnLmJsYWRlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZW1wdHkgPSBjcmVhdGVWYWx1ZSh0cnVlKTtcbiAgICAgICAgICAgIHN1cGVyKHtcbiAgICAgICAgICAgICAgICBibGFkZTogY29uZmlnLmJsYWRlLFxuICAgICAgICAgICAgICAgIHJhY2tDb250cm9sbGVyOiBjcixcbiAgICAgICAgICAgICAgICB2aWV3OiBuZXcgVGFiVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGVudHNFbGVtZW50OiBjci52aWV3LmVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIGVtcHR5OiBlbXB0eSxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLm9uUGFnZUFkZF8gPSB0aGlzLm9uUGFnZUFkZF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25QYWdlUmVtb3ZlXyA9IHRoaXMub25QYWdlUmVtb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBhZ2VTZWxlY3RlZENoYW5nZV8gPSB0aGlzLm9uUGFnZVNlbGVjdGVkQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wYWdlU2V0XyA9IG5ldyBOZXN0ZWRPcmRlcmVkU2V0KCgpID0+IG51bGwpO1xuICAgICAgICAgICAgdGhpcy5wYWdlU2V0Xy5lbWl0dGVyLm9uKCdhZGQnLCB0aGlzLm9uUGFnZUFkZF8pO1xuICAgICAgICAgICAgdGhpcy5wYWdlU2V0Xy5lbWl0dGVyLm9uKCdyZW1vdmUnLCB0aGlzLm9uUGFnZVJlbW92ZV8pO1xuICAgICAgICAgICAgdGhpcy5lbXB0eV8gPSBlbXB0eTtcbiAgICAgICAgICAgIHRoaXMuYXBwbHlQYWdlc18oKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgcGFnZVNldCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBhZ2VTZXRfO1xuICAgICAgICB9XG4gICAgICAgIGFkZChwYywgb3B0X2luZGV4KSB7XG4gICAgICAgICAgICB0aGlzLnBhZ2VTZXRfLmFkZChwYywgb3B0X2luZGV4ICE9PSBudWxsICYmIG9wdF9pbmRleCAhPT0gdm9pZCAwID8gb3B0X2luZGV4IDogdGhpcy5wYWdlU2V0Xy5pdGVtcy5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJlbW92ZShpbmRleCkge1xuICAgICAgICAgICAgdGhpcy5wYWdlU2V0Xy5yZW1vdmUodGhpcy5wYWdlU2V0Xy5pdGVtc1tpbmRleF0pO1xuICAgICAgICB9XG4gICAgICAgIGFwcGx5UGFnZXNfKCkge1xuICAgICAgICAgICAgdGhpcy5rZWVwU2VsZWN0aW9uXygpO1xuICAgICAgICAgICAgdGhpcy5lbXB0eV8ucmF3VmFsdWUgPSB0aGlzLnBhZ2VTZXRfLml0ZW1zLmxlbmd0aCA9PT0gMDtcbiAgICAgICAgfVxuICAgICAgICBvblBhZ2VBZGRfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBwYyA9IGV2Lml0ZW07XG4gICAgICAgICAgICBpbnNlcnRFbGVtZW50QXQodGhpcy52aWV3Lml0ZW1zRWxlbWVudCwgcGMuaXRlbUNvbnRyb2xsZXIudmlldy5lbGVtZW50LCBldi5pbmRleCk7XG4gICAgICAgICAgICB0aGlzLnJhY2tDb250cm9sbGVyLnJhY2suYWRkKHBjLmNvbnRlbnRDb250cm9sbGVyLCBldi5pbmRleCk7XG4gICAgICAgICAgICBwYy5wcm9wcy52YWx1ZSgnc2VsZWN0ZWQnKS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uUGFnZVNlbGVjdGVkQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLmFwcGx5UGFnZXNfKCk7XG4gICAgICAgIH1cbiAgICAgICAgb25QYWdlUmVtb3ZlXyhldikge1xuICAgICAgICAgICAgY29uc3QgcGMgPSBldi5pdGVtO1xuICAgICAgICAgICAgcmVtb3ZlRWxlbWVudChwYy5pdGVtQ29udHJvbGxlci52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5yYWNrQ29udHJvbGxlci5yYWNrLnJlbW92ZShwYy5jb250ZW50Q29udHJvbGxlcik7XG4gICAgICAgICAgICBwYy5wcm9wc1xuICAgICAgICAgICAgICAgIC52YWx1ZSgnc2VsZWN0ZWQnKVxuICAgICAgICAgICAgICAgIC5lbWl0dGVyLm9mZignY2hhbmdlJywgdGhpcy5vblBhZ2VTZWxlY3RlZENoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy5hcHBseVBhZ2VzXygpO1xuICAgICAgICB9XG4gICAgICAgIGtlZXBTZWxlY3Rpb25fKCkge1xuICAgICAgICAgICAgaWYgKHRoaXMucGFnZVNldF8uaXRlbXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmlyc3RTZWxJbmRleCA9IHRoaXMucGFnZVNldF8uaXRlbXMuZmluZEluZGV4KChwYykgPT4gcGMucHJvcHMuZ2V0KCdzZWxlY3RlZCcpKTtcbiAgICAgICAgICAgIGlmIChmaXJzdFNlbEluZGV4IDwgMCkge1xuICAgICAgICAgICAgICAgIHRoaXMucGFnZVNldF8uaXRlbXMuZm9yRWFjaCgocGMsIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGMucHJvcHMuc2V0KCdzZWxlY3RlZCcsIGkgPT09IDApO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlU2V0Xy5pdGVtcy5mb3JFYWNoKChwYywgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYy5wcm9wcy5zZXQoJ3NlbGVjdGVkJywgaSA9PT0gZmlyc3RTZWxJbmRleCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25QYWdlU2VsZWN0ZWRDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBpZiAoZXYucmF3VmFsdWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucGFnZVNldF8uaXRlbXMuZmluZEluZGV4KChwYykgPT4gcGMucHJvcHMudmFsdWUoJ3NlbGVjdGVkJykgPT09IGV2LnNlbmRlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5wYWdlU2V0Xy5pdGVtcy5mb3JFYWNoKChwYywgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYy5wcm9wcy5zZXQoJ3NlbGVjdGVkJywgaSA9PT0gaW5kZXgpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5rZWVwU2VsZWN0aW9uXygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgVGFiQmxhZGVQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAndGFiJyxcbiAgICAgICAgdHlwZTogJ2JsYWRlJyxcbiAgICAgICAgYWNjZXB0KHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBwYWdlczogcC5yZXF1aXJlZC5hcnJheShwLnJlcXVpcmVkLm9iamVjdCh7IHRpdGxlOiBwLnJlcXVpcmVkLnN0cmluZyB9KSksXG4gICAgICAgICAgICAgICAgdmlldzogcC5yZXF1aXJlZC5jb25zdGFudCgndGFiJyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghcmVzdWx0IHx8IHJlc3VsdC5wYWdlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHBhcmFtczogcmVzdWx0IH07XG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXIoYXJncykge1xuICAgICAgICAgICAgY29uc3QgYyA9IG5ldyBUYWJDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBibGFkZTogYXJncy5ibGFkZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBhcmdzLnBhcmFtcy5wYWdlcy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGMgPSBuZXcgVGFiUGFnZUNvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICBpdGVtUHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHAudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGMuYWRkKHBjKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgIH0sXG4gICAgICAgIGFwaShhcmdzKSB7XG4gICAgICAgICAgICBpZiAoIShhcmdzLmNvbnRyb2xsZXIgaW5zdGFuY2VvZiBUYWJDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBUYWJBcGkoYXJncy5jb250cm9sbGVyLCBhcmdzLnBvb2wpO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVCbGFkZUNvbnRyb2xsZXIocGx1Z2luLCBhcmdzKSB7XG4gICAgICAgIGNvbnN0IGFjID0gcGx1Z2luLmFjY2VwdChhcmdzLnBhcmFtcyk7XG4gICAgICAgIGlmICghYWMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpc2FibGVkID0gUGFyYW1zUGFyc2Vycy5vcHRpb25hbC5ib29sZWFuKGFyZ3MucGFyYW1zWydkaXNhYmxlZCddKS52YWx1ZTtcbiAgICAgICAgY29uc3QgaGlkZGVuID0gUGFyYW1zUGFyc2Vycy5vcHRpb25hbC5ib29sZWFuKGFyZ3MucGFyYW1zWydoaWRkZW4nXSkudmFsdWU7XG4gICAgICAgIHJldHVybiBwbHVnaW4uY29udHJvbGxlcih7XG4gICAgICAgICAgICBibGFkZTogY3JlYXRlQmxhZGUoKSxcbiAgICAgICAgICAgIGRvY3VtZW50OiBhcmdzLmRvY3VtZW50LFxuICAgICAgICAgICAgcGFyYW1zOiBmb3JjZUNhc3QoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LCBhYy5wYXJhbXMpLCB7IGRpc2FibGVkOiBkaXNhYmxlZCwgaGlkZGVuOiBoaWRkZW4gfSkpLFxuICAgICAgICAgICAgdmlld1Byb3BzOiBWaWV3UHJvcHMuY3JlYXRlKHtcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiBoaWRkZW4sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xhc3MgTWFudWFsVGlja2VyIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICB0aGlzLmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICB9XG4gICAgICAgIGRpc3Bvc2UoKSB7IH1cbiAgICAgICAgdGljaygpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ3RpY2snLCB7XG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBJbnRlcnZhbFRpY2tlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgaW50ZXJ2YWwpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRfID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLnRpbWVySWRfID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMub25UaWNrXyA9IHRoaXMub25UaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kb2NfID0gZG9jO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuaW50ZXJ2YWxfID0gaW50ZXJ2YWw7XG4gICAgICAgICAgICB0aGlzLnNldFRpbWVyXygpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBkaXNhYmxlZCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRpc2FibGVkXztcbiAgICAgICAgfVxuICAgICAgICBzZXQgZGlzYWJsZWQoaW5hY3RpdmUpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZWRfID0gaW5hY3RpdmU7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlZF8pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNsZWFyVGltZXJfKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldFRpbWVyXygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGRpc3Bvc2UoKSB7XG4gICAgICAgICAgICB0aGlzLmNsZWFyVGltZXJfKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2xlYXJUaW1lcl8oKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50aW1lcklkXyA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHdpbiA9IHRoaXMuZG9jXy5kZWZhdWx0VmlldztcbiAgICAgICAgICAgIGlmICh3aW4pIHtcbiAgICAgICAgICAgICAgICB3aW4uY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVySWRfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudGltZXJJZF8gPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVyXygpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUaW1lcl8oKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmludGVydmFsXyA8PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgd2luID0gdGhpcy5kb2NfLmRlZmF1bHRWaWV3O1xuICAgICAgICAgICAgaWYgKHdpbikge1xuICAgICAgICAgICAgICAgIHRoaXMudGltZXJJZF8gPSB3aW4uc2V0SW50ZXJ2YWwodGhpcy5vblRpY2tfLCB0aGlzLmludGVydmFsXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25UaWNrXygpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmRpc2FibGVkXykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCd0aWNrJywge1xuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQ29tcG9zaXRlQ29uc3RyYWludCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnN0cmFpbnRzKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnN0cmFpbnRzID0gY29uc3RyYWludHM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RyYWluKHZhbHVlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb25zdHJhaW50cy5yZWR1Y2UoKHJlc3VsdCwgYykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjLmNvbnN0cmFpbihyZXN1bHQpO1xuICAgICAgICAgICAgfSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRDb25zdHJhaW50KGMsIGNvbnN0cmFpbnRDbGFzcykge1xuICAgICAgICBpZiAoYyBpbnN0YW5jZW9mIGNvbnN0cmFpbnRDbGFzcykge1xuICAgICAgICAgICAgcmV0dXJuIGM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGMgaW5zdGFuY2VvZiBDb21wb3NpdGVDb25zdHJhaW50KSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBjLmNvbnN0cmFpbnRzLnJlZHVjZSgodG1wUmVzdWx0LCBzYykgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0bXBSZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRtcFJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNjIGluc3RhbmNlb2YgY29uc3RyYWludENsYXNzID8gc2MgOiBudWxsO1xuICAgICAgICAgICAgfSwgbnVsbCk7XG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjbGFzcyBMaXN0Q29uc3RyYWludCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3RyYWluKHZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRzID0gdGhpcy5vcHRpb25zO1xuICAgICAgICAgICAgaWYgKG9wdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IG9wdHMuZmlsdGVyKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0udmFsdWUgPT09IHZhbHVlO1xuICAgICAgICAgICAgfSkubGVuZ3RoID4gMDtcbiAgICAgICAgICAgIHJldHVybiBtYXRjaGVkID8gdmFsdWUgOiBvcHRzWzBdLnZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUmFuZ2VDb25zdHJhaW50IHtcbiAgICAgICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm1heFZhbHVlID0gY29uZmlnLm1heDtcbiAgICAgICAgICAgIHRoaXMubWluVmFsdWUgPSBjb25maWcubWluO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cmFpbih2YWx1ZSkge1xuICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKCFpc0VtcHR5KHRoaXMubWluVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmVzdWx0ID0gTWF0aC5tYXgocmVzdWx0LCB0aGlzLm1pblZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghaXNFbXB0eSh0aGlzLm1heFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJlc3VsdCA9IE1hdGgubWluKHJlc3VsdCwgdGhpcy5tYXhWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgU3RlcENvbnN0cmFpbnQge1xuICAgICAgICBjb25zdHJ1Y3RvcihzdGVwKSB7XG4gICAgICAgICAgICB0aGlzLnN0ZXAgPSBzdGVwO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cmFpbih2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgciA9IHZhbHVlIDwgMFxuICAgICAgICAgICAgICAgID8gLU1hdGgucm91bmQoLXZhbHVlIC8gdGhpcy5zdGVwKVxuICAgICAgICAgICAgICAgIDogTWF0aC5yb3VuZCh2YWx1ZSAvIHRoaXMuc3RlcCk7XG4gICAgICAgICAgICByZXR1cm4gciAqIHRoaXMuc3RlcDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRqID0gQ2xhc3NOYW1lKCdsc3QnKTtcbiAgICBjbGFzcyBMaXN0VmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VfID0gdGhpcy5vblZhbHVlQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9wc18gPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkaigpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpO1xuICAgICAgICAgICAgc2VsZWN0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRqKCdzJykpO1xuICAgICAgICAgICAgYmluZFZhbHVlTWFwKHRoaXMucHJvcHNfLCAnb3B0aW9ucycsIChvcHRzKSA9PiB7XG4gICAgICAgICAgICAgICAgcmVtb3ZlQ2hpbGRFbGVtZW50cyhzZWxlY3RFbGVtKTtcbiAgICAgICAgICAgICAgICBvcHRzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbkVsZW0uZGF0YXNldC5pbmRleCA9IFN0cmluZyhpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbkVsZW0udGV4dENvbnRlbnQgPSBpdGVtLnRleHQ7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbkVsZW0udmFsdWUgPSBTdHJpbmcoaXRlbS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEVsZW0uYXBwZW5kQ2hpbGQob3B0aW9uRWxlbSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKHNlbGVjdEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHNlbGVjdEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5zZWxlY3RFbGVtZW50ID0gc2VsZWN0RWxlbTtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgbWFya0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkaignbScpKTtcbiAgICAgICAgICAgIG1hcmtFbGVtLmFwcGVuZENoaWxkKGNyZWF0ZVN2Z0ljb25FbGVtZW50KGRvYywgJ2Ryb3Bkb3duJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKG1hcmtFbGVtKTtcbiAgICAgICAgICAgIGNvbmZpZy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWVfID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RWxlbWVudC52YWx1ZSA9IFN0cmluZyh0aGlzLnZhbHVlXy5yYXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgb25WYWx1ZUNoYW5nZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIExpc3RDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25TZWxlY3RDaGFuZ2VfID0gdGhpcy5vblNlbGVjdENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IExpc3RWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy5zZWxlY3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIHRoaXMub25TZWxlY3RDaGFuZ2VfKTtcbiAgICAgICAgfVxuICAgICAgICBvblNlbGVjdENoYW5nZV8oZSkge1xuICAgICAgICAgICAgY29uc3Qgc2VsZWN0RWxlbSA9IGZvcmNlQ2FzdChlLmN1cnJlbnRUYXJnZXQpO1xuICAgICAgICAgICAgY29uc3Qgb3B0RWxlbSA9IHNlbGVjdEVsZW0uc2VsZWN0ZWRPcHRpb25zLml0ZW0oMCk7XG4gICAgICAgICAgICBpZiAoIW9wdEVsZW0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpdGVtSW5kZXggPSBOdW1iZXIob3B0RWxlbS5kYXRhc2V0LmluZGV4KTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUucmF3VmFsdWUgPSB0aGlzLnByb3BzLmdldCgnb3B0aW9ucycpW2l0ZW1JbmRleF0udmFsdWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkaSA9IENsYXNzTmFtZSgncG9wJyk7XG4gICAgY2xhc3MgUG9wdXBWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRpKCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kQ2xhc3NNb2RpZmllcnModGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGJpbmRWYWx1ZShjb25maWcuc2hvd3MsIHZhbHVlVG9DbGFzc05hbWUodGhpcy5lbGVtZW50LCBjbGFzc05hbWUkaSh1bmRlZmluZWQsICd2JykpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFBvcHVwQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dzID0gY3JlYXRlVmFsdWUoZmFsc2UpO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IFBvcHVwVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBzaG93czogdGhpcy5zaG93cyxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkaCA9IENsYXNzTmFtZSgndHh0Jyk7XG4gICAgY2xhc3MgVGV4dFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZV8gPSB0aGlzLm9uQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGgoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5wcm9wc18gPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnByb3BzXy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlXyk7XG4gICAgICAgICAgICBjb25zdCBpbnB1dEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRoKCdpJykpO1xuICAgICAgICAgICAgaW5wdXRFbGVtLnR5cGUgPSAndGV4dCc7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmREaXNhYmxlZChpbnB1dEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGlucHV0RWxlbSk7XG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudCA9IGlucHV0RWxlbTtcbiAgICAgICAgICAgIGNvbmZpZy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlXyA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIHJlZnJlc2goKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSB0aGlzLnByb3BzXy5nZXQoJ2Zvcm1hdHRlcicpO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUgPSBmb3JtYXR0ZXIodGhpcy52YWx1ZV8ucmF3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgVGV4dENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbklucHV0Q2hhbmdlXyA9IHRoaXMub25JbnB1dENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucGFyc2VyXyA9IGNvbmZpZy5wYXJzZXI7XG4gICAgICAgICAgICB0aGlzLnByb3BzID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBUZXh0Vmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBwcm9wczogY29uZmlnLnByb3BzLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5vbklucHV0Q2hhbmdlXyk7XG4gICAgICAgIH1cbiAgICAgICAgb25JbnB1dENoYW5nZV8oZSkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtID0gZm9yY2VDYXN0KGUuY3VycmVudFRhcmdldCk7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGlucHV0RWxlbS52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFZhbHVlID0gdGhpcy5wYXJzZXJfKHZhbHVlKTtcbiAgICAgICAgICAgIGlmICghaXNFbXB0eShwYXJzZWRWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlID0gcGFyc2VkVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZpZXcucmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gYm9vbFRvU3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBib29sRnJvbVVua25vd24odmFsdWUpIHtcbiAgICAgICAgaWYgKHZhbHVlID09PSAnZmFsc2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICEhdmFsdWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIEJvb2xlYW5Gb3JtYXR0ZXIodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGJvb2xUb1N0cmluZyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgY2xhc3MgTnVtYmVyTGl0ZXJhbE5vZGUge1xuICAgICAgICBjb25zdHJ1Y3Rvcih0ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLnRleHQgPSB0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGV2YWx1YXRlKCkge1xuICAgICAgICAgICAgcmV0dXJuIE51bWJlcih0aGlzLnRleHQpO1xuICAgICAgICB9XG4gICAgICAgIHRvU3RyaW5nKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBCSU5BUllfT1BFUkFUSU9OX01BUCA9IHtcbiAgICAgICAgJyoqJzogKHYxLCB2MikgPT4gTWF0aC5wb3codjEsIHYyKSxcbiAgICAgICAgJyonOiAodjEsIHYyKSA9PiB2MSAqIHYyLFxuICAgICAgICAnLyc6ICh2MSwgdjIpID0+IHYxIC8gdjIsXG4gICAgICAgICclJzogKHYxLCB2MikgPT4gdjEgJSB2MixcbiAgICAgICAgJysnOiAodjEsIHYyKSA9PiB2MSArIHYyLFxuICAgICAgICAnLSc6ICh2MSwgdjIpID0+IHYxIC0gdjIsXG4gICAgICAgICc8PCc6ICh2MSwgdjIpID0+IHYxIDw8IHYyLFxuICAgICAgICAnPj4nOiAodjEsIHYyKSA9PiB2MSA+PiB2MixcbiAgICAgICAgJz4+Pic6ICh2MSwgdjIpID0+IHYxID4+PiB2MixcbiAgICAgICAgJyYnOiAodjEsIHYyKSA9PiB2MSAmIHYyLFxuICAgICAgICAnXic6ICh2MSwgdjIpID0+IHYxIF4gdjIsXG4gICAgICAgICd8JzogKHYxLCB2MikgPT4gdjEgfCB2MixcbiAgICB9O1xuICAgIGNsYXNzIEJpbmFyeU9wZXJhdGlvbk5vZGUge1xuICAgICAgICBjb25zdHJ1Y3RvcihvcGVyYXRvciwgbGVmdCwgcmlnaHQpIHtcbiAgICAgICAgICAgIHRoaXMubGVmdCA9IGxlZnQ7XG4gICAgICAgICAgICB0aGlzLm9wZXJhdG9yID0gb3BlcmF0b3I7XG4gICAgICAgICAgICB0aGlzLnJpZ2h0ID0gcmlnaHQ7XG4gICAgICAgIH1cbiAgICAgICAgZXZhbHVhdGUoKSB7XG4gICAgICAgICAgICBjb25zdCBvcCA9IEJJTkFSWV9PUEVSQVRJT05fTUFQW3RoaXMub3BlcmF0b3JdO1xuICAgICAgICAgICAgaWYgKCFvcCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5leHBlY3RlZCBiaW5hcnkgb3BlcmF0b3I6ICcke3RoaXMub3BlcmF0b3J9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3AodGhpcy5sZWZ0LmV2YWx1YXRlKCksIHRoaXMucmlnaHQuZXZhbHVhdGUoKSk7XG4gICAgICAgIH1cbiAgICAgICAgdG9TdHJpbmcoKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICdiKCcsXG4gICAgICAgICAgICAgICAgdGhpcy5sZWZ0LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVyYXRvcixcbiAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0LnRvU3RyaW5nKCksXG4gICAgICAgICAgICAgICAgJyknLFxuICAgICAgICAgICAgXS5qb2luKCcgJyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgVU5BUllfT1BFUkFUSU9OX01BUCA9IHtcbiAgICAgICAgJysnOiAodikgPT4gdixcbiAgICAgICAgJy0nOiAodikgPT4gLXYsXG4gICAgICAgICd+JzogKHYpID0+IH52LFxuICAgIH07XG4gICAgY2xhc3MgVW5hcnlPcGVyYXRpb25Ob2RlIHtcbiAgICAgICAgY29uc3RydWN0b3Iob3BlcmF0b3IsIGV4cHIpIHtcbiAgICAgICAgICAgIHRoaXMub3BlcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvbiA9IGV4cHI7XG4gICAgICAgIH1cbiAgICAgICAgZXZhbHVhdGUoKSB7XG4gICAgICAgICAgICBjb25zdCBvcCA9IFVOQVJZX09QRVJBVElPTl9NQVBbdGhpcy5vcGVyYXRvcl07XG4gICAgICAgICAgICBpZiAoIW9wKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIHVuYXJ5IG9wZXJhdG9yOiAnJHt0aGlzLm9wZXJhdG9yfWApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG9wKHRoaXMuZXhwcmVzc2lvbi5ldmFsdWF0ZSgpKTtcbiAgICAgICAgfVxuICAgICAgICB0b1N0cmluZygpIHtcbiAgICAgICAgICAgIHJldHVybiBbJ3UoJywgdGhpcy5vcGVyYXRvciwgdGhpcy5leHByZXNzaW9uLnRvU3RyaW5nKCksICcpJ10uam9pbignICcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tYmluZVJlYWRlcihwYXJzZXJzKSB7XG4gICAgICAgIHJldHVybiAodGV4dCwgY3Vyc29yKSA9PiB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhcnNlcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZXJzW2ldKHRleHQsIGN1cnNvcik7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRXaGl0ZXNwYWNlKHRleHQsIGN1cnNvcikge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0LnN1YnN0cihjdXJzb3IpLm1hdGNoKC9eXFxzKy8pO1xuICAgICAgICByZXR1cm4gKF9hID0gKG0gJiYgbVswXSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkTm9uWmVyb0RpZ2l0KHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBjaCA9IHRleHQuc3Vic3RyKGN1cnNvciwgMSk7XG4gICAgICAgIHJldHVybiBjaC5tYXRjaCgvXlsxLTldJC8pID8gY2ggOiAnJztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZERlY2ltYWxEaWdpdHModGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgbSA9IHRleHQuc3Vic3RyKGN1cnNvcikubWF0Y2goL15bMC05XSsvKTtcbiAgICAgICAgcmV0dXJuIChfYSA9IChtICYmIG1bMF0pKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAnJztcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZFNpZ25lZEludGVnZXIodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IGRzID0gcmVhZERlY2ltYWxEaWdpdHModGV4dCwgY3Vyc29yKTtcbiAgICAgICAgaWYgKGRzICE9PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIGRzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNpZ24gPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDEpO1xuICAgICAgICBjdXJzb3IgKz0gMTtcbiAgICAgICAgaWYgKHNpZ24gIT09ICctJyAmJiBzaWduICE9PSAnKycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZHMgPSByZWFkRGVjaW1hbERpZ2l0cyh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBpZiAoc2RzID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaWduICsgc2RzO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkRXhwb25lbnRQYXJ0KHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBlID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAxKTtcbiAgICAgICAgY3Vyc29yICs9IDE7XG4gICAgICAgIGlmIChlLnRvTG93ZXJDYXNlKCkgIT09ICdlJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNpID0gcmVhZFNpZ25lZEludGVnZXIodGV4dCwgY3Vyc29yKTtcbiAgICAgICAgaWYgKHNpID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlICsgc2k7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWREZWNpbWFsSW50ZWdlckxpdGVyYWwodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IGNoID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAxKTtcbiAgICAgICAgaWYgKGNoID09PSAnMCcpIHtcbiAgICAgICAgICAgIHJldHVybiBjaDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuemQgPSByZWFkTm9uWmVyb0RpZ2l0KHRleHQsIGN1cnNvcik7XG4gICAgICAgIGN1cnNvciArPSBuemQubGVuZ3RoO1xuICAgICAgICBpZiAobnpkID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuemQgKyByZWFkRGVjaW1hbERpZ2l0cyh0ZXh0LCBjdXJzb3IpO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkRGVjaW1hbExpdGVyYWwxKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBkaWwgPSByZWFkRGVjaW1hbEludGVnZXJMaXRlcmFsKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGN1cnNvciArPSBkaWwubGVuZ3RoO1xuICAgICAgICBpZiAoZGlsID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvdCA9IHRleHQuc3Vic3RyKGN1cnNvciwgMSk7XG4gICAgICAgIGN1cnNvciArPSBkb3QubGVuZ3RoO1xuICAgICAgICBpZiAoZG90ICE9PSAnLicpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZHMgPSByZWFkRGVjaW1hbERpZ2l0cyh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBjdXJzb3IgKz0gZGRzLmxlbmd0aDtcbiAgICAgICAgcmV0dXJuIGRpbCArIGRvdCArIGRkcyArIHJlYWRFeHBvbmVudFBhcnQodGV4dCwgY3Vyc29yKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZERlY2ltYWxMaXRlcmFsMih0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgZG90ID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAxKTtcbiAgICAgICAgY3Vyc29yICs9IGRvdC5sZW5ndGg7XG4gICAgICAgIGlmIChkb3QgIT09ICcuJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRkcyA9IHJlYWREZWNpbWFsRGlnaXRzKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGN1cnNvciArPSBkZHMubGVuZ3RoO1xuICAgICAgICBpZiAoZGRzID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkb3QgKyBkZHMgKyByZWFkRXhwb25lbnRQYXJ0KHRleHQsIGN1cnNvcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWREZWNpbWFsTGl0ZXJhbDModGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IGRpbCA9IHJlYWREZWNpbWFsSW50ZWdlckxpdGVyYWwodGV4dCwgY3Vyc29yKTtcbiAgICAgICAgY3Vyc29yICs9IGRpbC5sZW5ndGg7XG4gICAgICAgIGlmIChkaWwgPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRpbCArIHJlYWRFeHBvbmVudFBhcnQodGV4dCwgY3Vyc29yKTtcbiAgICB9XG4gICAgY29uc3QgcmVhZERlY2ltYWxMaXRlcmFsID0gY29tYmluZVJlYWRlcihbXG4gICAgICAgIHJlYWREZWNpbWFsTGl0ZXJhbDEsXG4gICAgICAgIHJlYWREZWNpbWFsTGl0ZXJhbDIsXG4gICAgICAgIHJlYWREZWNpbWFsTGl0ZXJhbDMsXG4gICAgXSk7XG4gICAgZnVuY3Rpb24gcGFyc2VCaW5hcnlEaWdpdHModGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgbSA9IHRleHQuc3Vic3RyKGN1cnNvcikubWF0Y2goL15bMDFdKy8pO1xuICAgICAgICByZXR1cm4gKF9hID0gKG0gJiYgbVswXSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkQmluYXJ5SW50ZWdlckxpdGVyYWwodGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IHRleHQuc3Vic3RyKGN1cnNvciwgMik7XG4gICAgICAgIGN1cnNvciArPSBwcmVmaXgubGVuZ3RoO1xuICAgICAgICBpZiAocHJlZml4LnRvTG93ZXJDYXNlKCkgIT09ICcwYicpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBiZHMgPSBwYXJzZUJpbmFyeURpZ2l0cyh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBpZiAoYmRzID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmVmaXggKyBiZHM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRPY3RhbERpZ2l0cyh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBtID0gdGV4dC5zdWJzdHIoY3Vyc29yKS5tYXRjaCgvXlswLTddKy8pO1xuICAgICAgICByZXR1cm4gKF9hID0gKG0gJiYgbVswXSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6ICcnO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkT2N0YWxJbnRlZ2VyTGl0ZXJhbCh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAyKTtcbiAgICAgICAgY3Vyc29yICs9IHByZWZpeC5sZW5ndGg7XG4gICAgICAgIGlmIChwcmVmaXgudG9Mb3dlckNhc2UoKSAhPT0gJzBvJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9kcyA9IHJlYWRPY3RhbERpZ2l0cyh0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBpZiAob2RzID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwcmVmaXggKyBvZHM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRIZXhEaWdpdHModGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3QgbSA9IHRleHQuc3Vic3RyKGN1cnNvcikubWF0Y2goL15bMC05YS1mXSsvaSk7XG4gICAgICAgIHJldHVybiAoX2EgPSAobSAmJiBtWzBdKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlYWRIZXhJbnRlZ2VyTGl0ZXJhbCh0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAyKTtcbiAgICAgICAgY3Vyc29yICs9IHByZWZpeC5sZW5ndGg7XG4gICAgICAgIGlmIChwcmVmaXgudG9Mb3dlckNhc2UoKSAhPT0gJzB4Jykge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGhkcyA9IHJlYWRIZXhEaWdpdHModGV4dCwgY3Vyc29yKTtcbiAgICAgICAgaWYgKGhkcyA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiAnJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJlZml4ICsgaGRzO1xuICAgIH1cbiAgICBjb25zdCByZWFkTm9uRGVjaW1hbEludGVnZXJMaXRlcmFsID0gY29tYmluZVJlYWRlcihbXG4gICAgICAgIHJlYWRCaW5hcnlJbnRlZ2VyTGl0ZXJhbCxcbiAgICAgICAgcmVhZE9jdGFsSW50ZWdlckxpdGVyYWwsXG4gICAgICAgIHJlYWRIZXhJbnRlZ2VyTGl0ZXJhbCxcbiAgICBdKTtcbiAgICBjb25zdCByZWFkTnVtZXJpY0xpdGVyYWwgPSBjb21iaW5lUmVhZGVyKFtcbiAgICAgICAgcmVhZE5vbkRlY2ltYWxJbnRlZ2VyTGl0ZXJhbCxcbiAgICAgICAgcmVhZERlY2ltYWxMaXRlcmFsLFxuICAgIF0pO1xuXG4gICAgZnVuY3Rpb24gcGFyc2VMaXRlcmFsKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBudW0gPSByZWFkTnVtZXJpY0xpdGVyYWwodGV4dCwgY3Vyc29yKTtcbiAgICAgICAgY3Vyc29yICs9IG51bS5sZW5ndGg7XG4gICAgICAgIGlmIChudW0gPT09ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZXZhbHVhYmxlOiBuZXcgTnVtYmVyTGl0ZXJhbE5vZGUobnVtKSxcbiAgICAgICAgICAgIGN1cnNvcjogY3Vyc29yLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjb25zdCBvcCA9IHRleHQuc3Vic3RyKGN1cnNvciwgMSk7XG4gICAgICAgIGN1cnNvciArPSBvcC5sZW5ndGg7XG4gICAgICAgIGlmIChvcCAhPT0gJygnKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBleHByID0gcGFyc2VFeHByZXNzaW9uKHRleHQsIGN1cnNvcik7XG4gICAgICAgIGlmICghZXhwcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY3Vyc29yID0gZXhwci5jdXJzb3I7XG4gICAgICAgIGN1cnNvciArPSByZWFkV2hpdGVzcGFjZSh0ZXh0LCBjdXJzb3IpLmxlbmd0aDtcbiAgICAgICAgY29uc3QgY2wgPSB0ZXh0LnN1YnN0cihjdXJzb3IsIDEpO1xuICAgICAgICBjdXJzb3IgKz0gY2wubGVuZ3RoO1xuICAgICAgICBpZiAoY2wgIT09ICcpJykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGV2YWx1YWJsZTogZXhwci5ldmFsdWFibGUsXG4gICAgICAgICAgICBjdXJzb3I6IGN1cnNvcixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VQcmltYXJ5RXhwcmVzc2lvbih0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgcmV0dXJuIChwYXJzZUxpdGVyYWwodGV4dCwgY3Vyc29yKSB8fCBwYXJzZVBhcmVudGhlc2l6ZWRFeHByZXNzaW9uKHRleHQsIGN1cnNvcikpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZVVuYXJ5RXhwcmVzc2lvbih0ZXh0LCBjdXJzb3IpIHtcbiAgICAgICAgY29uc3QgZXhwciA9IHBhcnNlUHJpbWFyeUV4cHJlc3Npb24odGV4dCwgY3Vyc29yKTtcbiAgICAgICAgaWYgKGV4cHIpIHtcbiAgICAgICAgICAgIHJldHVybiBleHByO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG9wID0gdGV4dC5zdWJzdHIoY3Vyc29yLCAxKTtcbiAgICAgICAgY3Vyc29yICs9IG9wLmxlbmd0aDtcbiAgICAgICAgaWYgKG9wICE9PSAnKycgJiYgb3AgIT09ICctJyAmJiBvcCAhPT0gJ34nKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBudW0gPSBwYXJzZVVuYXJ5RXhwcmVzc2lvbih0ZXh0LCBjdXJzb3IpO1xuICAgICAgICBpZiAoIW51bSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY3Vyc29yID0gbnVtLmN1cnNvcjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGN1cnNvcjogY3Vyc29yLFxuICAgICAgICAgICAgZXZhbHVhYmxlOiBuZXcgVW5hcnlPcGVyYXRpb25Ob2RlKG9wLCBudW0uZXZhbHVhYmxlKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcmVhZEJpbmFyeU9wZXJhdG9yKG9wcywgdGV4dCwgY3Vyc29yKSB7XG4gICAgICAgIGN1cnNvciArPSByZWFkV2hpdGVzcGFjZSh0ZXh0LCBjdXJzb3IpLmxlbmd0aDtcbiAgICAgICAgY29uc3Qgb3AgPSBvcHMuZmlsdGVyKChvcCkgPT4gdGV4dC5zdGFydHNXaXRoKG9wLCBjdXJzb3IpKVswXTtcbiAgICAgICAgaWYgKCFvcCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY3Vyc29yICs9IG9wLmxlbmd0aDtcbiAgICAgICAgY3Vyc29yICs9IHJlYWRXaGl0ZXNwYWNlKHRleHQsIGN1cnNvcikubGVuZ3RoO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3Vyc29yOiBjdXJzb3IsXG4gICAgICAgICAgICBvcGVyYXRvcjogb3AsXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUJpbmFyeU9wZXJhdGlvbkV4cHJlc3Npb25QYXJzZXIoZXhwclBhcnNlciwgb3BzKSB7XG4gICAgICAgIHJldHVybiAodGV4dCwgY3Vyc29yKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdEV4cHIgPSBleHByUGFyc2VyKHRleHQsIGN1cnNvcik7XG4gICAgICAgICAgICBpZiAoIWZpcnN0RXhwcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3Vyc29yID0gZmlyc3RFeHByLmN1cnNvcjtcbiAgICAgICAgICAgIGxldCBleHByID0gZmlyc3RFeHByLmV2YWx1YWJsZTtcbiAgICAgICAgICAgIGZvciAoOzspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvcCA9IHJlYWRCaW5hcnlPcGVyYXRvcihvcHMsIHRleHQsIGN1cnNvcik7XG4gICAgICAgICAgICAgICAgaWYgKCFvcCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY3Vyc29yID0gb3AuY3Vyc29yO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5leHRFeHByID0gZXhwclBhcnNlcih0ZXh0LCBjdXJzb3IpO1xuICAgICAgICAgICAgICAgIGlmICghbmV4dEV4cHIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGN1cnNvciA9IG5leHRFeHByLmN1cnNvcjtcbiAgICAgICAgICAgICAgICBleHByID0gbmV3IEJpbmFyeU9wZXJhdGlvbk5vZGUob3Aub3BlcmF0b3IsIGV4cHIsIG5leHRFeHByLmV2YWx1YWJsZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZXhwclxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBjdXJzb3I6IGN1cnNvcixcbiAgICAgICAgICAgICAgICAgICAgZXZhbHVhYmxlOiBleHByLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlQmluYXJ5T3BlcmF0aW9uRXhwcmVzc2lvbiA9IFtcbiAgICAgICAgWycqKiddLFxuICAgICAgICBbJyonLCAnLycsICclJ10sXG4gICAgICAgIFsnKycsICctJ10sXG4gICAgICAgIFsnPDwnLCAnPj4+JywgJz4+J10sXG4gICAgICAgIFsnJiddLFxuICAgICAgICBbJ14nXSxcbiAgICAgICAgWyd8J10sXG4gICAgXS5yZWR1Y2UoKHBhcnNlciwgb3BzKSA9PiB7XG4gICAgICAgIHJldHVybiBjcmVhdGVCaW5hcnlPcGVyYXRpb25FeHByZXNzaW9uUGFyc2VyKHBhcnNlciwgb3BzKTtcbiAgICB9LCBwYXJzZVVuYXJ5RXhwcmVzc2lvbik7XG4gICAgZnVuY3Rpb24gcGFyc2VFeHByZXNzaW9uKHRleHQsIGN1cnNvcikge1xuICAgICAgICBjdXJzb3IgKz0gcmVhZFdoaXRlc3BhY2UodGV4dCwgY3Vyc29yKS5sZW5ndGg7XG4gICAgICAgIHJldHVybiBwYXJzZUJpbmFyeU9wZXJhdGlvbkV4cHJlc3Npb24odGV4dCwgY3Vyc29yKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VFY21hTnVtYmVyRXhwcmVzc2lvbih0ZXh0KSB7XG4gICAgICAgIGNvbnN0IGV4cHIgPSBwYXJzZUV4cHJlc3Npb24odGV4dCwgMCk7XG4gICAgICAgIGlmICghZXhwcikge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY3Vyc29yID0gZXhwci5jdXJzb3IgKyByZWFkV2hpdGVzcGFjZSh0ZXh0LCBleHByLmN1cnNvcikubGVuZ3RoO1xuICAgICAgICBpZiAoY3Vyc29yICE9PSB0ZXh0Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGV4cHIuZXZhbHVhYmxlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHBhcnNlTnVtYmVyKHRleHQpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCByID0gcGFyc2VFY21hTnVtYmVyRXhwcmVzc2lvbih0ZXh0KTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHIgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogci5ldmFsdWF0ZSgpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBudW1iZXJGcm9tVW5rbm93bih2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBwdiA9IHBhcnNlTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgIGlmICghaXNFbXB0eShwdikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHY7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG51bWJlclRvU3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoZGlnaXRzKSB7XG4gICAgICAgIHJldHVybiAodmFsdWUpID0+IHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b0ZpeGVkKE1hdGgubWF4KE1hdGgubWluKGRpZ2l0cywgMjApLCAwKSk7XG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgaW5uZXJGb3JtYXR0ZXIgPSBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoMCk7XG4gICAgZnVuY3Rpb24gZm9ybWF0UGVyY2VudGFnZSh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gaW5uZXJGb3JtYXR0ZXIodmFsdWUpICsgJyUnO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHN0cmluZ0Zyb21Vbmtub3duKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmb3JtYXRTdHJpbmcodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGZpbGxCdWZmZXIoYnVmZmVyLCBidWZmZXJTaXplKSB7XG4gICAgICAgIHdoaWxlIChidWZmZXIubGVuZ3RoIDwgYnVmZmVyU2l6ZSkge1xuICAgICAgICAgICAgYnVmZmVyLnB1c2godW5kZWZpbmVkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBpbml0aWFsaXplQnVmZmVyKGJ1ZmZlclNpemUpIHtcbiAgICAgICAgY29uc3QgYnVmZmVyID0gW107XG4gICAgICAgIGZpbGxCdWZmZXIoYnVmZmVyLCBidWZmZXJTaXplKTtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVZhbHVlKGJ1ZmZlcik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVRyaW1tZWRCdWZmZXIoYnVmZmVyKSB7XG4gICAgICAgIGNvbnN0IGluZGV4ID0gYnVmZmVyLmluZGV4T2YodW5kZWZpbmVkKTtcbiAgICAgICAgcmV0dXJuIGZvcmNlQ2FzdChpbmRleCA8IDAgPyBidWZmZXIgOiBidWZmZXIuc2xpY2UoMCwgaW5kZXgpKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlUHVzaGVkQnVmZmVyKGJ1ZmZlciwgbmV3VmFsdWUpIHtcbiAgICAgICAgY29uc3QgbmV3QnVmZmVyID0gWy4uLmNyZWF0ZVRyaW1tZWRCdWZmZXIoYnVmZmVyKSwgbmV3VmFsdWVdO1xuICAgICAgICBpZiAobmV3QnVmZmVyLmxlbmd0aCA+IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgICAgIG5ld0J1ZmZlci5zcGxpY2UoMCwgbmV3QnVmZmVyLmxlbmd0aCAtIGJ1ZmZlci5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZmlsbEJ1ZmZlcihuZXdCdWZmZXIsIGJ1ZmZlci5sZW5ndGgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXdCdWZmZXI7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29ubmVjdFZhbHVlcyh7IHByaW1hcnksIHNlY29uZGFyeSwgZm9yd2FyZCwgYmFja3dhcmQsIH0pIHtcbiAgICAgICAgbGV0IGNoYW5naW5nID0gZmFsc2U7XG4gICAgICAgIGZ1bmN0aW9uIHByZXZlbnRGZWVkYmFjayhjYWxsYmFjaykge1xuICAgICAgICAgICAgaWYgKGNoYW5naW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2hhbmdpbmcgPSB0cnVlO1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICAgIGNoYW5naW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcHJpbWFyeS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCAoZXYpID0+IHtcbiAgICAgICAgICAgIHByZXZlbnRGZWVkYmFjaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgc2Vjb25kYXJ5LnNldFJhd1ZhbHVlKGZvcndhcmQocHJpbWFyeSwgc2Vjb25kYXJ5KSwgZXYub3B0aW9ucyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHNlY29uZGFyeS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCAoZXYpID0+IHtcbiAgICAgICAgICAgIHByZXZlbnRGZWVkYmFjaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgcHJpbWFyeS5zZXRSYXdWYWx1ZShiYWNrd2FyZChwcmltYXJ5LCBzZWNvbmRhcnkpLCBldi5vcHRpb25zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcHJldmVudEZlZWRiYWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICBzZWNvbmRhcnkuc2V0UmF3VmFsdWUoZm9yd2FyZChwcmltYXJ5LCBzZWNvbmRhcnkpLCBldi5vcHRpb25zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcHJldmVudEZlZWRiYWNrKCgpID0+IHtcbiAgICAgICAgICAgIHNlY29uZGFyeS5zZXRSYXdWYWx1ZShmb3J3YXJkKHByaW1hcnksIHNlY29uZGFyeSksIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZ2V0U3RlcEZvcktleShiYXNlU3RlcCwga2V5cykge1xuICAgICAgICBjb25zdCBzdGVwID0gYmFzZVN0ZXAgKiAoa2V5cy5hbHRLZXkgPyAwLjEgOiAxKSAqIChrZXlzLnNoaWZ0S2V5ID8gMTAgOiAxKTtcbiAgICAgICAgaWYgKGtleXMudXBLZXkpIHtcbiAgICAgICAgICAgIHJldHVybiArc3RlcDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChrZXlzLmRvd25LZXkpIHtcbiAgICAgICAgICAgIHJldHVybiAtc3RlcDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0VmVydGljYWxTdGVwS2V5cyhldikge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWx0S2V5OiBldi5hbHRLZXksXG4gICAgICAgICAgICBkb3duS2V5OiBldi5rZXkgPT09ICdBcnJvd0Rvd24nLFxuICAgICAgICAgICAgc2hpZnRLZXk6IGV2LnNoaWZ0S2V5LFxuICAgICAgICAgICAgdXBLZXk6IGV2LmtleSA9PT0gJ0Fycm93VXAnLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFsdEtleTogZXYuYWx0S2V5LFxuICAgICAgICAgICAgZG93bktleTogZXYua2V5ID09PSAnQXJyb3dMZWZ0JyxcbiAgICAgICAgICAgIHNoaWZ0S2V5OiBldi5zaGlmdEtleSxcbiAgICAgICAgICAgIHVwS2V5OiBldi5rZXkgPT09ICdBcnJvd1JpZ2h0JyxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNWZXJ0aWNhbEFycm93S2V5KGtleSkge1xuICAgICAgICByZXR1cm4ga2V5ID09PSAnQXJyb3dVcCcgfHwga2V5ID09PSAnQXJyb3dEb3duJztcbiAgICB9XG4gICAgZnVuY3Rpb24gaXNBcnJvd0tleShrZXkpIHtcbiAgICAgICAgcmV0dXJuIGlzVmVydGljYWxBcnJvd0tleShrZXkpIHx8IGtleSA9PT0gJ0Fycm93TGVmdCcgfHwga2V5ID09PSAnQXJyb3dSaWdodCc7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY29tcHV0ZU9mZnNldCQxKGV2LCBlbGVtKSB7XG4gICAgICAgIGNvbnN0IHdpbiA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldztcbiAgICAgICAgY29uc3QgcmVjdCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBldi5wYWdlWCAtICgoKHdpbiAmJiB3aW4uc2Nyb2xsWCkgfHwgMCkgKyByZWN0LmxlZnQpLFxuICAgICAgICAgICAgeTogZXYucGFnZVkgLSAoKCh3aW4gJiYgd2luLnNjcm9sbFkpIHx8IDApICsgcmVjdC50b3ApLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjbGFzcyBQb2ludGVySGFuZGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMubGFzdFRvdWNoXyA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLm9uRG9jdW1lbnRNb3VzZU1vdmVfID0gdGhpcy5vbkRvY3VtZW50TW91c2VNb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkRvY3VtZW50TW91c2VVcF8gPSB0aGlzLm9uRG9jdW1lbnRNb3VzZVVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbk1vdXNlRG93bl8gPSB0aGlzLm9uTW91c2VEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblRvdWNoRW5kXyA9IHRoaXMub25Ub3VjaEVuZF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaE1vdmVfID0gdGhpcy5vblRvdWNoTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Ub3VjaFN0YXJ0XyA9IHRoaXMub25Ub3VjaFN0YXJ0Xy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbGVtXyA9IGVsZW1lbnQ7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5vblRvdWNoU3RhcnRfKTtcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2htb3ZlJywgdGhpcy5vblRvdWNoTW92ZV8pO1xuICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGVuZCcsIHRoaXMub25Ub3VjaEVuZF8pO1xuICAgICAgICAgICAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLCB0aGlzLm9uTW91c2VEb3duXyk7XG4gICAgICAgIH1cbiAgICAgICAgY29tcHV0ZVBvc2l0aW9uXyhvZmZzZXQpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmVsZW1fLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBib3VuZHM6IHtcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogcmVjdC5oZWlnaHQsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBwb2ludDogb2Zmc2V0XG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogb2Zmc2V0LngsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBvZmZzZXQueSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIG9uTW91c2VEb3duXyhldikge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIChfYSA9IGV2LmN1cnJlbnRUYXJnZXQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb2N1cygpO1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5lbGVtXy5vd25lckRvY3VtZW50O1xuICAgICAgICAgICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Eb2N1bWVudE1vdXNlTW92ZV8pO1xuICAgICAgICAgICAgZG9jLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uRG9jdW1lbnRNb3VzZVVwXyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnZG93bicsIHtcbiAgICAgICAgICAgICAgICBhbHRLZXk6IGV2LmFsdEtleSxcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmNvbXB1dGVQb3NpdGlvbl8oY29tcHV0ZU9mZnNldCQxKGV2LCB0aGlzLmVsZW1fKSksXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiBldi5zaGlmdEtleSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uRG9jdW1lbnRNb3VzZU1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgnbW92ZScsIHtcbiAgICAgICAgICAgICAgICBhbHRLZXk6IGV2LmFsdEtleSxcbiAgICAgICAgICAgICAgICBkYXRhOiB0aGlzLmNvbXB1dGVQb3NpdGlvbl8oY29tcHV0ZU9mZnNldCQxKGV2LCB0aGlzLmVsZW1fKSksXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiBldi5zaGlmdEtleSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uRG9jdW1lbnRNb3VzZVVwXyhldikge1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5lbGVtXy5vd25lckRvY3VtZW50O1xuICAgICAgICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25Eb2N1bWVudE1vdXNlTW92ZV8pO1xuICAgICAgICAgICAgZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLCB0aGlzLm9uRG9jdW1lbnRNb3VzZVVwXyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgndXAnLCB7XG4gICAgICAgICAgICAgICAgYWx0S2V5OiBldi5hbHRLZXksXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5jb21wdXRlUG9zaXRpb25fKGNvbXB1dGVPZmZzZXQkMShldiwgdGhpcy5lbGVtXykpLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblRvdWNoU3RhcnRfKGV2KSB7XG4gICAgICAgICAgICBldi5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgY29uc3QgdG91Y2ggPSBldi50YXJnZXRUb3VjaGVzLml0ZW0oMCk7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5lbGVtXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdkb3duJywge1xuICAgICAgICAgICAgICAgIGFsdEtleTogZXYuYWx0S2V5LFxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuY29tcHV0ZVBvc2l0aW9uXyh0b3VjaFxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHRvdWNoLmNsaWVudFggLSByZWN0LmxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB0b3VjaC5jbGllbnRZIC0gcmVjdC50b3AsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubGFzdFRvdWNoXyA9IHRvdWNoO1xuICAgICAgICB9XG4gICAgICAgIG9uVG91Y2hNb3ZlXyhldikge1xuICAgICAgICAgICAgY29uc3QgdG91Y2ggPSBldi50YXJnZXRUb3VjaGVzLml0ZW0oMCk7XG4gICAgICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5lbGVtXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdtb3ZlJywge1xuICAgICAgICAgICAgICAgIGFsdEtleTogZXYuYWx0S2V5LFxuICAgICAgICAgICAgICAgIGRhdGE6IHRoaXMuY29tcHV0ZVBvc2l0aW9uXyh0b3VjaFxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IHRvdWNoLmNsaWVudFggLSByZWN0LmxlZnQsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiB0b3VjaC5jbGllbnRZIC0gcmVjdC50b3AsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgICAgICBzaGlmdEtleTogZXYuc2hpZnRLZXksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMubGFzdFRvdWNoXyA9IHRvdWNoO1xuICAgICAgICB9XG4gICAgICAgIG9uVG91Y2hFbmRfKGV2KSB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCB0b3VjaCA9IChfYSA9IGV2LnRhcmdldFRvdWNoZXMuaXRlbSgwKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogdGhpcy5sYXN0VG91Y2hfO1xuICAgICAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMuZWxlbV8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgndXAnLCB7XG4gICAgICAgICAgICAgICAgYWx0S2V5OiBldi5hbHRLZXksXG4gICAgICAgICAgICAgICAgZGF0YTogdGhpcy5jb21wdXRlUG9zaXRpb25fKHRvdWNoXG4gICAgICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogdG91Y2guY2xpZW50WCAtIHJlY3QubGVmdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IHRvdWNoLmNsaWVudFkgLSByZWN0LnRvcCxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIHNoaWZ0S2V5OiBldi5zaGlmdEtleSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gbWFwUmFuZ2UodmFsdWUsIHN0YXJ0MSwgZW5kMSwgc3RhcnQyLCBlbmQyKSB7XG4gICAgICAgIGNvbnN0IHAgPSAodmFsdWUgLSBzdGFydDEpIC8gKGVuZDEgLSBzdGFydDEpO1xuICAgICAgICByZXR1cm4gc3RhcnQyICsgcCAqIChlbmQyIC0gc3RhcnQyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0RGVjaW1hbERpZ2l0cyh2YWx1ZSkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gU3RyaW5nKHZhbHVlLnRvRml4ZWQoMTApKTtcbiAgICAgICAgY29uc3QgZnJhYyA9IHRleHQuc3BsaXQoJy4nKVsxXTtcbiAgICAgICAgcmV0dXJuIGZyYWMucmVwbGFjZSgvMCskLywgJycpLmxlbmd0aDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29uc3RyYWluUmFuZ2UodmFsdWUsIG1pbiwgbWF4KSB7XG4gICAgICAgIHJldHVybiBNYXRoLm1pbihNYXRoLm1heCh2YWx1ZSwgbWluKSwgbWF4KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbG9vcFJhbmdlKHZhbHVlLCBtYXgpIHtcbiAgICAgICAgcmV0dXJuICgodmFsdWUgJSBtYXgpICsgbWF4KSAlIG1heDtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkZyA9IENsYXNzTmFtZSgndHh0Jyk7XG4gICAgY2xhc3MgTnVtYmVyVGV4dFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbkNoYW5nZV8gPSB0aGlzLm9uQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5wcm9wc18gPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnByb3BzXy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygpLCBjbGFzc05hbWUkZyh1bmRlZmluZWQsICdudW0nKSk7XG4gICAgICAgICAgICBpZiAoY29uZmlnLmFycmF5UG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZyh1bmRlZmluZWQsIGNvbmZpZy5hcnJheVBvc2l0aW9uKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICBpbnB1dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygnaScpKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS50eXBlID0gJ3RleHQnO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kRGlzYWJsZWQoaW5wdXRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChpbnB1dEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQgPSBpbnB1dEVsZW07XG4gICAgICAgICAgICB0aGlzLm9uRHJhZ2dpbmdDaGFuZ2VfID0gdGhpcy5vbkRyYWdnaW5nQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2luZ18gPSBjb25maWcuZHJhZ2dpbmc7XG4gICAgICAgICAgICB0aGlzLmRyYWdnaW5nXy5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uRHJhZ2dpbmdDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRnKCkpO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygnaScpKTtcbiAgICAgICAgICAgIGNvbnN0IGtub2JFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAga25vYkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygnaycpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChrbm9iRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmtub2JFbGVtZW50ID0ga25vYkVsZW07XG4gICAgICAgICAgICBjb25zdCBndWlkZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3N2ZycpO1xuICAgICAgICAgICAgZ3VpZGVFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGcoJ2cnKSk7XG4gICAgICAgICAgICB0aGlzLmtub2JFbGVtZW50LmFwcGVuZENoaWxkKGd1aWRlRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBib2R5RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAncGF0aCcpO1xuICAgICAgICAgICAgYm9keUVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZygnZ2InKSk7XG4gICAgICAgICAgICBndWlkZUVsZW0uYXBwZW5kQ2hpbGQoYm9keUVsZW0pO1xuICAgICAgICAgICAgdGhpcy5ndWlkZUJvZHlFbGVtXyA9IGJvZHlFbGVtO1xuICAgICAgICAgICAgY29uc3QgaGVhZEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudE5TKFNWR19OUywgJ3BhdGgnKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGcoJ2doJykpO1xuICAgICAgICAgICAgZ3VpZGVFbGVtLmFwcGVuZENoaWxkKGhlYWRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZ3VpZGVIZWFkRWxlbV8gPSBoZWFkRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHRvb2x0aXBFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdG9vbHRpcEVsZW0uY2xhc3NMaXN0LmFkZChDbGFzc05hbWUoJ3R0JykoKSk7XG4gICAgICAgICAgICB0aGlzLmtub2JFbGVtZW50LmFwcGVuZENoaWxkKHRvb2x0aXBFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcEVsZW1fID0gdG9vbHRpcEVsZW07XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpO1xuICAgICAgICB9XG4gICAgICAgIG9uRHJhZ2dpbmdDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBpZiAoZXYucmF3VmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUkZyh1bmRlZmluZWQsICdkcmcnKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGcodW5kZWZpbmVkLCAnZHJnJykpO1xuICAgICAgICAgICAgY29uc3QgeCA9IGV2LnJhd1ZhbHVlIC8gdGhpcy5wcm9wc18uZ2V0KCdkcmFnZ2luZ1NjYWxlJyk7XG4gICAgICAgICAgICBjb25zdCBhb3ggPSB4ICsgKHggPiAwID8gLTEgOiB4IDwgMCA/ICsxIDogMCk7XG4gICAgICAgICAgICBjb25zdCBhZHggPSBjb25zdHJhaW5SYW5nZSgtYW94LCAtNCwgKzQpO1xuICAgICAgICAgICAgdGhpcy5ndWlkZUhlYWRFbGVtXy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAnZCcsIFtgTSAke2FveCArIGFkeH0sMCBMJHthb3h9LDQgTCR7YW94ICsgYWR4fSw4YCwgYE0gJHt4fSwtMSBMJHt4fSw5YF0uam9pbignICcpKTtcbiAgICAgICAgICAgIHRoaXMuZ3VpZGVCb2R5RWxlbV8uc2V0QXR0cmlidXRlTlMobnVsbCwgJ2QnLCBgTSAwLDQgTCR7eH0sNGApO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gdGhpcy5wcm9wc18uZ2V0KCdmb3JtYXR0ZXInKTtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcEVsZW1fLnRleHRDb250ZW50ID0gZm9ybWF0dGVyKHRoaXMudmFsdWUucmF3VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy50b29sdGlwRWxlbV8uc3R5bGUubGVmdCA9IGAke3h9cHhgO1xuICAgICAgICB9XG4gICAgICAgIHJlZnJlc2goKSB7XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSB0aGlzLnByb3BzXy5nZXQoJ2Zvcm1hdHRlcicpO1xuICAgICAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQudmFsdWUgPSBmb3JtYXR0ZXIodGhpcy52YWx1ZS5yYXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgb25DaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBOdW1iZXJUZXh0Q29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9yaWdpblJhd1ZhbHVlXyA9IDA7XG4gICAgICAgICAgICB0aGlzLm9uSW5wdXRDaGFuZ2VfID0gdGhpcy5vbklucHV0Q2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbklucHV0S2V5RG93bl8gPSB0aGlzLm9uSW5wdXRLZXlEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbklucHV0S2V5VXBfID0gdGhpcy5vbklucHV0S2V5VXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlckRvd25fID0gdGhpcy5vblBvaW50ZXJEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJNb3ZlXyA9IHRoaXMub25Qb2ludGVyTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyVXBfID0gdGhpcy5vblBvaW50ZXJVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuYmFzZVN0ZXBfID0gY29uZmlnLmJhc2VTdGVwO1xuICAgICAgICAgICAgdGhpcy5wYXJzZXJfID0gY29uZmlnLnBhcnNlcjtcbiAgICAgICAgICAgIHRoaXMucHJvcHMgPSBjb25maWcucHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5kcmFnZ2luZ18gPSBjcmVhdGVWYWx1ZShudWxsKTtcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBOdW1iZXJUZXh0Vmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBhcnJheVBvc2l0aW9uOiBjb25maWcuYXJyYXlQb3NpdGlvbixcbiAgICAgICAgICAgICAgICBkcmFnZ2luZzogdGhpcy5kcmFnZ2luZ18sXG4gICAgICAgICAgICAgICAgcHJvcHM6IHRoaXMucHJvcHMsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmlucHV0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCB0aGlzLm9uSW5wdXRDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25JbnB1dEtleURvd25fKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLm9uSW5wdXRLZXlVcF8pO1xuICAgICAgICAgICAgY29uc3QgcGggPSBuZXcgUG9pbnRlckhhbmRsZXIodGhpcy52aWV3Lmtub2JFbGVtZW50KTtcbiAgICAgICAgICAgIHBoLmVtaXR0ZXIub24oJ2Rvd24nLCB0aGlzLm9uUG9pbnRlckRvd25fKTtcbiAgICAgICAgICAgIHBoLmVtaXR0ZXIub24oJ21vdmUnLCB0aGlzLm9uUG9pbnRlck1vdmVfKTtcbiAgICAgICAgICAgIHBoLmVtaXR0ZXIub24oJ3VwJywgdGhpcy5vblBvaW50ZXJVcF8pO1xuICAgICAgICB9XG4gICAgICAgIG9uSW5wdXRDaGFuZ2VfKGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0RWxlbSA9IGZvcmNlQ2FzdChlLmN1cnJlbnRUYXJnZXQpO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBpbnB1dEVsZW0udmFsdWU7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRWYWx1ZSA9IHRoaXMucGFyc2VyXyh2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIWlzRW1wdHkocGFyc2VkVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZSA9IHBhcnNlZFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52aWV3LnJlZnJlc2goKTtcbiAgICAgICAgfVxuICAgICAgICBvbklucHV0S2V5RG93bl8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRm9yS2V5KHRoaXMuYmFzZVN0ZXBfLCBnZXRWZXJ0aWNhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoc3RlcCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodGhpcy52YWx1ZS5yYXdWYWx1ZSArIHN0ZXAsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25JbnB1dEtleVVwXyhldikge1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IGdldFN0ZXBGb3JLZXkodGhpcy5iYXNlU3RlcF8sIGdldFZlcnRpY2FsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlLnJhd1ZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duXygpIHtcbiAgICAgICAgICAgIHRoaXMub3JpZ2luUmF3VmFsdWVfID0gdGhpcy52YWx1ZS5yYXdWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dpbmdfLnJhd1ZhbHVlID0gMDtcbiAgICAgICAgfVxuICAgICAgICBjb21wdXRlRHJhZ2dpbmdWYWx1ZV8oZGF0YSkge1xuICAgICAgICAgICAgaWYgKCFkYXRhLnBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkeCA9IGRhdGEucG9pbnQueCAtIGRhdGEuYm91bmRzLndpZHRoIC8gMjtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9yaWdpblJhd1ZhbHVlXyArIGR4ICogdGhpcy5wcm9wcy5nZXQoJ2RyYWdnaW5nU2NhbGUnKTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJNb3ZlXyhldikge1xuICAgICAgICAgICAgY29uc3QgdiA9IHRoaXMuY29tcHV0ZURyYWdnaW5nVmFsdWVfKGV2LmRhdGEpO1xuICAgICAgICAgICAgaWYgKHYgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKHYsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmRyYWdnaW5nXy5yYXdWYWx1ZSA9IHRoaXMudmFsdWUucmF3VmFsdWUgLSB0aGlzLm9yaWdpblJhd1ZhbHVlXztcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJVcF8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHYgPSB0aGlzLmNvbXB1dGVEcmFnZ2luZ1ZhbHVlXyhldi5kYXRhKTtcbiAgICAgICAgICAgIGlmICh2ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh2LCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZHJhZ2dpbmdfLnJhd1ZhbHVlID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRmID0gQ2xhc3NOYW1lKCdzbGQnKTtcbiAgICBjbGFzcyBTbGlkZXJWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25DaGFuZ2VfID0gdGhpcy5vbkNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMucHJvcHNfID0gY29uZmlnLnByb3BzO1xuICAgICAgICAgICAgdGhpcy5wcm9wc18uZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGYoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgdHJhY2tFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdHJhY2tFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGYoJ3QnKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRUYWJJbmRleCh0cmFja0VsZW0pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRyYWNrRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnRyYWNrRWxlbWVudCA9IHRyYWNrRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IGtub2JFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAga25vYkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZignaycpKTtcbiAgICAgICAgICAgIHRoaXMudHJhY2tFbGVtZW50LmFwcGVuZENoaWxkKGtub2JFbGVtKTtcbiAgICAgICAgICAgIHRoaXMua25vYkVsZW1lbnQgPSBrbm9iRWxlbTtcbiAgICAgICAgICAgIGNvbmZpZy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IHAgPSBjb25zdHJhaW5SYW5nZShtYXBSYW5nZSh0aGlzLnZhbHVlLnJhd1ZhbHVlLCB0aGlzLnByb3BzXy5nZXQoJ21pblZhbHVlJyksIHRoaXMucHJvcHNfLmdldCgnbWF4VmFsdWUnKSwgMCwgMTAwKSwgMCwgMTAwKTtcbiAgICAgICAgICAgIHRoaXMua25vYkVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtwfSVgO1xuICAgICAgICB9XG4gICAgICAgIG9uQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgU2xpZGVyQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uS2V5RG93bl8gPSB0aGlzLm9uS2V5RG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25LZXlVcF8gPSB0aGlzLm9uS2V5VXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlckRvd25Pck1vdmVfID0gdGhpcy5vblBvaW50ZXJEb3duT3JNb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJVcF8gPSB0aGlzLm9uUG9pbnRlclVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5iYXNlU3RlcF8gPSBjb25maWcuYmFzZVN0ZXA7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5wcm9wcyA9IGNvbmZpZy5wcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBTbGlkZXJWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHByb3BzOiB0aGlzLnByb3BzLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXyA9IG5ldyBQb2ludGVySGFuZGxlcih0aGlzLnZpZXcudHJhY2tFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdkb3duJywgdGhpcy5vblBvaW50ZXJEb3duT3JNb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbignbW92ZScsIHRoaXMub25Qb2ludGVyRG93bk9yTW92ZV8pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ3VwJywgdGhpcy5vblBvaW50ZXJVcF8pO1xuICAgICAgICAgICAgdGhpcy52aWV3LnRyYWNrRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbktleURvd25fKTtcbiAgICAgICAgICAgIHRoaXMudmlldy50cmFja0VsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLCB0aGlzLm9uS2V5VXBfKTtcbiAgICAgICAgfVxuICAgICAgICBoYW5kbGVQb2ludGVyRXZlbnRfKGQsIG9wdHMpIHtcbiAgICAgICAgICAgIGlmICghZC5wb2ludCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUobWFwUmFuZ2UoY29uc3RyYWluUmFuZ2UoZC5wb2ludC54LCAwLCBkLmJvdW5kcy53aWR0aCksIDAsIGQuYm91bmRzLndpZHRoLCB0aGlzLnByb3BzLmdldCgnbWluVmFsdWUnKSwgdGhpcy5wcm9wcy5nZXQoJ21heFZhbHVlJykpLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duT3JNb3ZlXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyVXBfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25LZXlEb3duXyhldikge1xuICAgICAgICAgICAgY29uc3Qgc3RlcCA9IGdldFN0ZXBGb3JLZXkodGhpcy5iYXNlU3RlcF8sIGdldEhvcml6b250YWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgaWYgKHN0ZXAgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKHRoaXMudmFsdWUucmF3VmFsdWUgKyBzdGVwLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5VXBfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBzdGVwID0gZ2V0U3RlcEZvcktleSh0aGlzLmJhc2VTdGVwXywgZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoc3RlcCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodGhpcy52YWx1ZS5yYXdWYWx1ZSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkZSA9IENsYXNzTmFtZSgnc2xkdHh0Jyk7XG4gICAgY2xhc3MgU2xpZGVyVGV4dFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGUoKSk7XG4gICAgICAgICAgICBjb25zdCBzbGlkZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgc2xpZGVyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRlKCdzJykpO1xuICAgICAgICAgICAgdGhpcy5zbGlkZXJWaWV3XyA9IGNvbmZpZy5zbGlkZXJWaWV3O1xuICAgICAgICAgICAgc2xpZGVyRWxlbS5hcHBlbmRDaGlsZCh0aGlzLnNsaWRlclZpZXdfLmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHNsaWRlckVsZW0pO1xuICAgICAgICAgICAgY29uc3QgdGV4dEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0ZXh0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRlKCd0JykpO1xuICAgICAgICAgICAgdGhpcy50ZXh0Vmlld18gPSBjb25maWcudGV4dFZpZXc7XG4gICAgICAgICAgICB0ZXh0RWxlbS5hcHBlbmRDaGlsZCh0aGlzLnRleHRWaWV3Xy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0RWxlbSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBTbGlkZXJUZXh0Q29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5zbGlkZXJDXyA9IG5ldyBTbGlkZXJDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGJhc2VTdGVwOiBjb25maWcuYmFzZVN0ZXAsXG4gICAgICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5zbGlkZXJQcm9wcyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogY29uZmlnLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudGV4dENfID0gbmV3IE51bWJlclRleHRDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGJhc2VTdGVwOiBjb25maWcuYmFzZVN0ZXAsXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBjb25maWcucGFyc2VyLFxuICAgICAgICAgICAgICAgIHByb3BzOiBjb25maWcudGV4dFByb3BzLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBjb25maWcudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgU2xpZGVyVGV4dFZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgc2xpZGVyVmlldzogdGhpcy5zbGlkZXJDXy52aWV3LFxuICAgICAgICAgICAgICAgIHRleHRWaWV3OiB0aGlzLnRleHRDXy52aWV3LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHNsaWRlckNvbnRyb2xsZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zbGlkZXJDXztcbiAgICAgICAgfVxuICAgICAgICBnZXQgdGV4dENvbnRyb2xsZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0Q187XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiB3cml0ZVByaW1pdGl2ZSh0YXJnZXQsIHZhbHVlKSB7XG4gICAgICAgIHRhcmdldC53cml0ZSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VMaXN0T3B0aW9ucyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gcC5yZXF1aXJlZC5hcnJheShwLnJlcXVpcmVkLm9iamVjdCh7XG4gICAgICAgICAgICAgICAgdGV4dDogcC5yZXF1aXJlZC5zdHJpbmcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHAucmVxdWlyZWQucmF3LFxuICAgICAgICAgICAgfSkpKHZhbHVlKS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgcmV0dXJuIHAucmVxdWlyZWQucmF3KHZhbHVlKVxuICAgICAgICAgICAgICAgIC52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBwYXJzZVBpY2tlckxheW91dCh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT09ICdpbmxpbmUnIHx8IHZhbHVlID09PSAncG9wdXAnKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgcmV0dXJuIHAucmVxdWlyZWQub2JqZWN0KHtcbiAgICAgICAgICAgIG1heDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICBtaW46IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgc3RlcDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgIH0pKHZhbHVlKS52YWx1ZTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbm9ybWFsaXplTGlzdE9wdGlvbnMob3B0aW9ucykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgaXRlbXMgPSBbXTtcbiAgICAgICAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaCgodGV4dCkgPT4ge1xuICAgICAgICAgICAgaXRlbXMucHVzaCh7IHRleHQ6IHRleHQsIHZhbHVlOiBvcHRpb25zW3RleHRdIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGl0ZW1zO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVMaXN0Q29uc3RyYWludChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiAhaXNFbXB0eShvcHRpb25zKVxuICAgICAgICAgICAgPyBuZXcgTGlzdENvbnN0cmFpbnQobm9ybWFsaXplTGlzdE9wdGlvbnMoZm9yY2VDYXN0KG9wdGlvbnMpKSlcbiAgICAgICAgICAgIDogbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gZmluZExpc3RJdGVtcyhjb25zdHJhaW50KSB7XG4gICAgICAgIGNvbnN0IGMgPSBjb25zdHJhaW50XG4gICAgICAgICAgICA/IGZpbmRDb25zdHJhaW50KGNvbnN0cmFpbnQsIExpc3RDb25zdHJhaW50KVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICBpZiAoIWMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjLm9wdGlvbnM7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRTdGVwKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgY29uc3QgYyA9IGNvbnN0cmFpbnQgPyBmaW5kQ29uc3RyYWludChjb25zdHJhaW50LCBTdGVwQ29uc3RyYWludCkgOiBudWxsO1xuICAgICAgICBpZiAoIWMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjLnN0ZXA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldFN1aXRhYmxlRGVjaW1hbERpZ2l0cyhjb25zdHJhaW50LCByYXdWYWx1ZSkge1xuICAgICAgICBjb25zdCBzYyA9IGNvbnN0cmFpbnQgJiYgZmluZENvbnN0cmFpbnQoY29uc3RyYWludCwgU3RlcENvbnN0cmFpbnQpO1xuICAgICAgICBpZiAoc2MpIHtcbiAgICAgICAgICAgIHJldHVybiBnZXREZWNpbWFsRGlnaXRzKHNjLnN0ZXApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBNYXRoLm1heChnZXREZWNpbWFsRGlnaXRzKHJhd1ZhbHVlKSwgMik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEJhc2VTdGVwKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgY29uc3Qgc3RlcCA9IGZpbmRTdGVwKGNvbnN0cmFpbnQpO1xuICAgICAgICByZXR1cm4gc3RlcCAhPT0gbnVsbCAmJiBzdGVwICE9PSB2b2lkIDAgPyBzdGVwIDogMTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlKGNvbnN0cmFpbnQsIHJhd1ZhbHVlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgY29uc3Qgc2MgPSBjb25zdHJhaW50ICYmIGZpbmRDb25zdHJhaW50KGNvbnN0cmFpbnQsIFN0ZXBDb25zdHJhaW50KTtcbiAgICAgICAgY29uc3QgYmFzZSA9IE1hdGguYWJzKChfYSA9IHNjID09PSBudWxsIHx8IHNjID09PSB2b2lkIDAgPyB2b2lkIDAgOiBzYy5zdGVwKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiByYXdWYWx1ZSk7XG4gICAgICAgIHJldHVybiBiYXNlID09PSAwID8gMC4xIDogTWF0aC5wb3coMTAsIE1hdGguZmxvb3IoTWF0aC5sb2cxMChiYXNlKSkgLSAxKTtcbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkZCA9IENsYXNzTmFtZSgnY2tiJyk7XG4gICAgY2xhc3MgQ2hlY2tib3hWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZCgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBsYWJlbEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcbiAgICAgICAgICAgIGxhYmVsRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRkKCdsJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGxhYmVsRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBpbnB1dEVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRkKCdpJykpO1xuICAgICAgICAgICAgaW5wdXRFbGVtLnR5cGUgPSAnY2hlY2tib3gnO1xuICAgICAgICAgICAgbGFiZWxFbGVtLmFwcGVuZENoaWxkKGlucHV0RWxlbSk7XG4gICAgICAgICAgICB0aGlzLmlucHV0RWxlbWVudCA9IGlucHV0RWxlbTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKHRoaXMuaW5wdXRFbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IHdyYXBwZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgd3JhcHBlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkZCgndycpKTtcbiAgICAgICAgICAgIGxhYmVsRWxlbS5hcHBlbmRDaGlsZCh3cmFwcGVyRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBtYXJrRWxlbSA9IGNyZWF0ZVN2Z0ljb25FbGVtZW50KGRvYywgJ2NoZWNrJyk7XG4gICAgICAgICAgICB3cmFwcGVyRWxlbS5hcHBlbmRDaGlsZChtYXJrRWxlbSk7XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LmNoZWNrZWQgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBDaGVja2JveENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbklucHV0Q2hhbmdlXyA9IHRoaXMub25JbnB1dENoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgQ2hlY2tib3hWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy5pbnB1dEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5vbklucHV0Q2hhbmdlXyk7XG4gICAgICAgIH1cbiAgICAgICAgb25JbnB1dENoYW5nZV8oZSkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtID0gZm9yY2VDYXN0KGUuY3VycmVudFRhcmdldCk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlID0gaW5wdXRFbGVtLmNoZWNrZWQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50JDUocGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gW107XG4gICAgICAgIGNvbnN0IGxjID0gY3JlYXRlTGlzdENvbnN0cmFpbnQocGFyYW1zLm9wdGlvbnMpO1xuICAgICAgICBpZiAobGMpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2gobGMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ29tcG9zaXRlQ29uc3RyYWludChjb25zdHJhaW50cyk7XG4gICAgfVxuICAgIGNvbnN0IEJvb2xlYW5JbnB1dFBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdpbnB1dC1ib29sJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlTGlzdE9wdGlvbnMpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKF9hcmdzKSA9PiBib29sRnJvbVVua25vd24sXG4gICAgICAgICAgICBjb25zdHJhaW50OiAoYXJncykgPT4gY3JlYXRlQ29uc3RyYWludCQ1KGFyZ3MucGFyYW1zKSxcbiAgICAgICAgICAgIHdyaXRlcjogKF9hcmdzKSA9PiB3cml0ZVByaW1pdGl2ZSxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IGRvYyA9IGFyZ3MuZG9jdW1lbnQ7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ3MudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBjID0gYXJncy5jb25zdHJhaW50O1xuICAgICAgICAgICAgaWYgKGMgJiYgZmluZENvbnN0cmFpbnQoYywgTGlzdENvbnN0cmFpbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBMaXN0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogKF9hID0gZmluZExpc3RJdGVtcyhjKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10sXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IENoZWNrYm94Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBjbGFzc05hbWUkYyA9IENsYXNzTmFtZSgnY29sJyk7XG4gICAgY2xhc3MgQ29sb3JWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRjKCkpO1xuICAgICAgICAgICAgY29uZmlnLmZvbGRhYmxlLmJpbmRFeHBhbmRlZENsYXNzKHRoaXMuZWxlbWVudCwgY2xhc3NOYW1lJGModW5kZWZpbmVkLCAnZXhwYW5kZWQnKSk7XG4gICAgICAgICAgICBiaW5kVmFsdWVNYXAoY29uZmlnLmZvbGRhYmxlLCAnY29tcGxldGVkJywgdmFsdWVUb0NsYXNzTmFtZSh0aGlzLmVsZW1lbnQsIGNsYXNzTmFtZSRjKHVuZGVmaW5lZCwgJ2NwbCcpKSk7XG4gICAgICAgICAgICBjb25zdCBoZWFkRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGMoJ2gnKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaGVhZEVsZW0pO1xuICAgICAgICAgICAgY29uc3Qgc3dhdGNoRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHN3YXRjaEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYygncycpKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmFwcGVuZENoaWxkKHN3YXRjaEVsZW0pO1xuICAgICAgICAgICAgdGhpcy5zd2F0Y2hFbGVtZW50ID0gc3dhdGNoRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGV4dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYygndCcpKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmFwcGVuZENoaWxkKHRleHRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudGV4dEVsZW1lbnQgPSB0ZXh0RWxlbTtcbiAgICAgICAgICAgIGlmIChjb25maWcucGlja2VyTGF5b3V0ID09PSAnaW5saW5lJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpY2tlckVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgcGlja2VyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRjKCdwJykpO1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChwaWNrZXJFbGVtKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlckVsZW1lbnQgPSBwaWNrZXJFbGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIHJnYlRvSHNsKHIsIGcsIGIpIHtcbiAgICAgICAgY29uc3QgcnAgPSBjb25zdHJhaW5SYW5nZShyIC8gMjU1LCAwLCAxKTtcbiAgICAgICAgY29uc3QgZ3AgPSBjb25zdHJhaW5SYW5nZShnIC8gMjU1LCAwLCAxKTtcbiAgICAgICAgY29uc3QgYnAgPSBjb25zdHJhaW5SYW5nZShiIC8gMjU1LCAwLCAxKTtcbiAgICAgICAgY29uc3QgY21heCA9IE1hdGgubWF4KHJwLCBncCwgYnApO1xuICAgICAgICBjb25zdCBjbWluID0gTWF0aC5taW4ocnAsIGdwLCBicCk7XG4gICAgICAgIGNvbnN0IGMgPSBjbWF4IC0gY21pbjtcbiAgICAgICAgbGV0IGggPSAwO1xuICAgICAgICBsZXQgcyA9IDA7XG4gICAgICAgIGNvbnN0IGwgPSAoY21pbiArIGNtYXgpIC8gMjtcbiAgICAgICAgaWYgKGMgIT09IDApIHtcbiAgICAgICAgICAgIHMgPSBjIC8gKDEgLSBNYXRoLmFicyhjbWF4ICsgY21pbiAtIDEpKTtcbiAgICAgICAgICAgIGlmIChycCA9PT0gY21heCkge1xuICAgICAgICAgICAgICAgIGggPSAoZ3AgLSBicCkgLyBjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZ3AgPT09IGNtYXgpIHtcbiAgICAgICAgICAgICAgICBoID0gMiArIChicCAtIHJwKSAvIGM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBoID0gNCArIChycCAtIGdwKSAvIGM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBoID0gaCAvIDYgKyAoaCA8IDAgPyAxIDogMCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtoICogMzYwLCBzICogMTAwLCBsICogMTAwXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaHNsVG9SZ2IoaCwgcywgbCkge1xuICAgICAgICBjb25zdCBocCA9ICgoaCAlIDM2MCkgKyAzNjApICUgMzYwO1xuICAgICAgICBjb25zdCBzcCA9IGNvbnN0cmFpblJhbmdlKHMgLyAxMDAsIDAsIDEpO1xuICAgICAgICBjb25zdCBscCA9IGNvbnN0cmFpblJhbmdlKGwgLyAxMDAsIDAsIDEpO1xuICAgICAgICBjb25zdCBjID0gKDEgLSBNYXRoLmFicygyICogbHAgLSAxKSkgKiBzcDtcbiAgICAgICAgY29uc3QgeCA9IGMgKiAoMSAtIE1hdGguYWJzKCgoaHAgLyA2MCkgJSAyKSAtIDEpKTtcbiAgICAgICAgY29uc3QgbSA9IGxwIC0gYyAvIDI7XG4gICAgICAgIGxldCBycCwgZ3AsIGJwO1xuICAgICAgICBpZiAoaHAgPj0gMCAmJiBocCA8IDYwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbYywgeCwgMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gNjAgJiYgaHAgPCAxMjApIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFt4LCBjLCAwXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChocCA+PSAxMjAgJiYgaHAgPCAxODApIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFswLCBjLCB4XTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChocCA+PSAxODAgJiYgaHAgPCAyNDApIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFswLCB4LCBjXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChocCA+PSAyNDAgJiYgaHAgPCAzMDApIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFt4LCAwLCBjXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIFtycCwgZ3AsIGJwXSA9IFtjLCAwLCB4XTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWyhycCArIG0pICogMjU1LCAoZ3AgKyBtKSAqIDI1NSwgKGJwICsgbSkgKiAyNTVdO1xuICAgIH1cbiAgICBmdW5jdGlvbiByZ2JUb0hzdihyLCBnLCBiKSB7XG4gICAgICAgIGNvbnN0IHJwID0gY29uc3RyYWluUmFuZ2UociAvIDI1NSwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGdwID0gY29uc3RyYWluUmFuZ2UoZyAvIDI1NSwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGJwID0gY29uc3RyYWluUmFuZ2UoYiAvIDI1NSwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGNtYXggPSBNYXRoLm1heChycCwgZ3AsIGJwKTtcbiAgICAgICAgY29uc3QgY21pbiA9IE1hdGgubWluKHJwLCBncCwgYnApO1xuICAgICAgICBjb25zdCBkID0gY21heCAtIGNtaW47XG4gICAgICAgIGxldCBoO1xuICAgICAgICBpZiAoZCA9PT0gMCkge1xuICAgICAgICAgICAgaCA9IDA7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY21heCA9PT0gcnApIHtcbiAgICAgICAgICAgIGggPSA2MCAqICgoKCgoZ3AgLSBicCkgLyBkKSAlIDYpICsgNikgJSA2KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjbWF4ID09PSBncCkge1xuICAgICAgICAgICAgaCA9IDYwICogKChicCAtIHJwKSAvIGQgKyAyKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGggPSA2MCAqICgocnAgLSBncCkgLyBkICsgNCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcyA9IGNtYXggPT09IDAgPyAwIDogZCAvIGNtYXg7XG4gICAgICAgIGNvbnN0IHYgPSBjbWF4O1xuICAgICAgICByZXR1cm4gW2gsIHMgKiAxMDAsIHYgKiAxMDBdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoc3ZUb1JnYihoLCBzLCB2KSB7XG4gICAgICAgIGNvbnN0IGhwID0gbG9vcFJhbmdlKGgsIDM2MCk7XG4gICAgICAgIGNvbnN0IHNwID0gY29uc3RyYWluUmFuZ2UocyAvIDEwMCwgMCwgMSk7XG4gICAgICAgIGNvbnN0IHZwID0gY29uc3RyYWluUmFuZ2UodiAvIDEwMCwgMCwgMSk7XG4gICAgICAgIGNvbnN0IGMgPSB2cCAqIHNwO1xuICAgICAgICBjb25zdCB4ID0gYyAqICgxIC0gTWF0aC5hYnMoKChocCAvIDYwKSAlIDIpIC0gMSkpO1xuICAgICAgICBjb25zdCBtID0gdnAgLSBjO1xuICAgICAgICBsZXQgcnAsIGdwLCBicDtcbiAgICAgICAgaWYgKGhwID49IDAgJiYgaHAgPCA2MCkge1xuICAgICAgICAgICAgW3JwLCBncCwgYnBdID0gW2MsIHgsIDBdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGhwID49IDYwICYmIGhwIDwgMTIwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbeCwgYywgMF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gMTIwICYmIGhwIDwgMTgwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbMCwgYywgeF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gMTgwICYmIGhwIDwgMjQwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbMCwgeCwgY107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaHAgPj0gMjQwICYmIGhwIDwgMzAwKSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbeCwgMCwgY107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBbcnAsIGdwLCBicF0gPSBbYywgMCwgeF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFsocnAgKyBtKSAqIDI1NSwgKGdwICsgbSkgKiAyNTUsIChicCArIG0pICogMjU1XTtcbiAgICB9XG4gICAgZnVuY3Rpb24gaHNsVG9Ic3YoaCwgcywgbCkge1xuICAgICAgICBjb25zdCBzZCA9IGwgKyAocyAqICgxMDAgLSBNYXRoLmFicygyICogbCAtIDEwMCkpKSAvICgyICogMTAwKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIGgsXG4gICAgICAgICAgICBzZCAhPT0gMCA/IChzICogKDEwMCAtIE1hdGguYWJzKDIgKiBsIC0gMTAwKSkpIC8gc2QgOiAwLFxuICAgICAgICAgICAgbCArIChzICogKDEwMCAtIE1hdGguYWJzKDIgKiBsIC0gMTAwKSkpIC8gKDIgKiAxMDApLFxuICAgICAgICBdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBoc3ZUb0hzbChoLCBzLCB2KSB7XG4gICAgICAgIGNvbnN0IHNkID0gMTAwIC0gTWF0aC5hYnMoKHYgKiAoMjAwIC0gcykpIC8gMTAwIC0gMTAwKTtcbiAgICAgICAgcmV0dXJuIFtoLCBzZCAhPT0gMCA/IChzICogdikgLyBzZCA6IDAsICh2ICogKDIwMCAtIHMpKSAvICgyICogMTAwKV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHJlbW92ZUFscGhhQ29tcG9uZW50KGNvbXBzKSB7XG4gICAgICAgIHJldHVybiBbY29tcHNbMF0sIGNvbXBzWzFdLCBjb21wc1syXV07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGFwcGVuZEFscGhhQ29tcG9uZW50KGNvbXBzLCBhbHBoYSkge1xuICAgICAgICByZXR1cm4gW2NvbXBzWzBdLCBjb21wc1sxXSwgY29tcHNbMl0sIGFscGhhXTtcbiAgICB9XG4gICAgY29uc3QgTU9ERV9DT05WRVJURVJfTUFQID0ge1xuICAgICAgICBoc2w6IHtcbiAgICAgICAgICAgIGhzbDogKGgsIHMsIGwpID0+IFtoLCBzLCBsXSxcbiAgICAgICAgICAgIGhzdjogaHNsVG9Ic3YsXG4gICAgICAgICAgICByZ2I6IGhzbFRvUmdiLFxuICAgICAgICB9LFxuICAgICAgICBoc3Y6IHtcbiAgICAgICAgICAgIGhzbDogaHN2VG9Ic2wsXG4gICAgICAgICAgICBoc3Y6IChoLCBzLCB2KSA9PiBbaCwgcywgdl0sXG4gICAgICAgICAgICByZ2I6IGhzdlRvUmdiLFxuICAgICAgICB9LFxuICAgICAgICByZ2I6IHtcbiAgICAgICAgICAgIGhzbDogcmdiVG9Ic2wsXG4gICAgICAgICAgICBoc3Y6IHJnYlRvSHN2LFxuICAgICAgICAgICAgcmdiOiAociwgZywgYikgPT4gW3IsIGcsIGJdLFxuICAgICAgICB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gY29udmVydENvbG9yTW9kZShjb21wb25lbnRzLCBmcm9tTW9kZSwgdG9Nb2RlKSB7XG4gICAgICAgIHJldHVybiBNT0RFX0NPTlZFUlRFUl9NQVBbZnJvbU1vZGVdW3RvTW9kZV0oLi4uY29tcG9uZW50cyk7XG4gICAgfVxuXG4gICAgY29uc3QgQ09OU1RSQUlOVF9NQVAgPSB7XG4gICAgICAgIGhzbDogKGNvbXBzKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIGxvb3BSYW5nZShjb21wc1swXSwgMzYwKSxcbiAgICAgICAgICAgICAgICBjb25zdHJhaW5SYW5nZShjb21wc1sxXSwgMCwgMTAwKSxcbiAgICAgICAgICAgICAgICBjb25zdHJhaW5SYW5nZShjb21wc1syXSwgMCwgMTAwKSxcbiAgICAgICAgICAgICAgICBjb25zdHJhaW5SYW5nZSgoX2EgPSBjb21wc1szXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogMSwgMCwgMSksXG4gICAgICAgICAgICBdO1xuICAgICAgICB9LFxuICAgICAgICBoc3Y6IChjb21wcykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICBsb29wUmFuZ2UoY29tcHNbMF0sIDM2MCksXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoY29tcHNbMV0sIDAsIDEwMCksXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoY29tcHNbMl0sIDAsIDEwMCksXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoKF9hID0gY29tcHNbM10pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDEsIDAsIDEpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSxcbiAgICAgICAgcmdiOiAoY29tcHMpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoY29tcHNbMF0sIDAsIDI1NSksXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoY29tcHNbMV0sIDAsIDI1NSksXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoY29tcHNbMl0sIDAsIDI1NSksXG4gICAgICAgICAgICAgICAgY29uc3RyYWluUmFuZ2UoKF9hID0gY29tcHNbM10pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDEsIDAsIDEpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgfSxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGlzUmdiQ29sb3JDb21wb25lbnQob2JqLCBrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnIHx8IGlzRW1wdHkob2JqKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBrZXkgaW4gb2JqICYmIHR5cGVvZiBvYmpba2V5XSA9PT0gJ251bWJlcic7XG4gICAgfVxuICAgIGNsYXNzIENvbG9yIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29tcHMsIG1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZV8gPSBtb2RlO1xuICAgICAgICAgICAgdGhpcy5jb21wc18gPSBDT05TVFJBSU5UX01BUFttb2RlXShjb21wcyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGJsYWNrKCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbMCwgMCwgMF0sICdyZ2InKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZnJvbU9iamVjdChvYmopIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbXBzID0gJ2EnIGluIG9iaiA/IFtvYmouciwgb2JqLmcsIG9iai5iLCBvYmouYV0gOiBbb2JqLnIsIG9iai5nLCBvYmouYl07XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKGNvbXBzLCAncmdiJyk7XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIHRvUmdiYU9iamVjdChjb2xvcikge1xuICAgICAgICAgICAgcmV0dXJuIGNvbG9yLnRvUmdiYU9iamVjdCgpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBpc1JnYkNvbG9yT2JqZWN0KG9iaikge1xuICAgICAgICAgICAgcmV0dXJuIChpc1JnYkNvbG9yQ29tcG9uZW50KG9iaiwgJ3InKSAmJlxuICAgICAgICAgICAgICAgIGlzUmdiQ29sb3JDb21wb25lbnQob2JqLCAnZycpICYmXG4gICAgICAgICAgICAgICAgaXNSZ2JDb2xvckNvbXBvbmVudChvYmosICdiJykpO1xuICAgICAgICB9XG4gICAgICAgIHN0YXRpYyBpc1JnYmFDb2xvck9iamVjdChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzUmdiQ29sb3JPYmplY3Qob2JqKSAmJiBpc1JnYkNvbG9yQ29tcG9uZW50KG9iaiwgJ2EnKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgaXNDb2xvck9iamVjdChvYmopIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmlzUmdiQ29sb3JPYmplY3Qob2JqKTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZXF1YWxzKHYxLCB2Mikge1xuICAgICAgICAgICAgaWYgKHYxLm1vZGVfICE9PSB2Mi5tb2RlXykge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNvbXBzMSA9IHYxLmNvbXBzXztcbiAgICAgICAgICAgIGNvbnN0IGNvbXBzMiA9IHYyLmNvbXBzXztcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY29tcHMxLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbXBzMVtpXSAhPT0gY29tcHMyW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbW9kZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGVfO1xuICAgICAgICB9XG4gICAgICAgIGdldENvbXBvbmVudHMob3B0X21vZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBhcHBlbmRBbHBoYUNvbXBvbmVudChjb252ZXJ0Q29sb3JNb2RlKHJlbW92ZUFscGhhQ29tcG9uZW50KHRoaXMuY29tcHNfKSwgdGhpcy5tb2RlXywgb3B0X21vZGUgfHwgdGhpcy5tb2RlXyksIHRoaXMuY29tcHNfWzNdKTtcbiAgICAgICAgfVxuICAgICAgICB0b1JnYmFPYmplY3QoKSB7XG4gICAgICAgICAgICBjb25zdCByZ2JDb21wcyA9IHRoaXMuZ2V0Q29tcG9uZW50cygncmdiJyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHI6IHJnYkNvbXBzWzBdLFxuICAgICAgICAgICAgICAgIGc6IHJnYkNvbXBzWzFdLFxuICAgICAgICAgICAgICAgIGI6IHJnYkNvbXBzWzJdLFxuICAgICAgICAgICAgICAgIGE6IHJnYkNvbXBzWzNdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRiID0gQ2xhc3NOYW1lKCdjb2xwJyk7XG4gICAgY2xhc3MgQ29sb3JQaWNrZXJWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuYWxwaGFWaWV3c18gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGIoKSk7XG4gICAgICAgICAgICBjb25zdCBoc3ZFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgaHN2RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRiKCdoc3YnKSk7XG4gICAgICAgICAgICBjb25zdCBzdkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBzdkVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYignc3YnKSk7XG4gICAgICAgICAgICB0aGlzLnN2UGFsZXR0ZVZpZXdfID0gY29uZmlnLnN2UGFsZXR0ZVZpZXc7XG4gICAgICAgICAgICBzdkVsZW0uYXBwZW5kQ2hpbGQodGhpcy5zdlBhbGV0dGVWaWV3Xy5lbGVtZW50KTtcbiAgICAgICAgICAgIGhzdkVsZW0uYXBwZW5kQ2hpbGQoc3ZFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGhFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgaEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYignaCcpKTtcbiAgICAgICAgICAgIHRoaXMuaFBhbGV0dGVWaWV3XyA9IGNvbmZpZy5oUGFsZXR0ZVZpZXc7XG4gICAgICAgICAgICBoRWxlbS5hcHBlbmRDaGlsZCh0aGlzLmhQYWxldHRlVmlld18uZWxlbWVudCk7XG4gICAgICAgICAgICBoc3ZFbGVtLmFwcGVuZENoaWxkKGhFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChoc3ZFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IHJnYkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICByZ2JFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGIoJ3JnYicpKTtcbiAgICAgICAgICAgIHRoaXMudGV4dFZpZXdfID0gY29uZmlnLnRleHRWaWV3O1xuICAgICAgICAgICAgcmdiRWxlbS5hcHBlbmRDaGlsZCh0aGlzLnRleHRWaWV3Xy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChyZ2JFbGVtKTtcbiAgICAgICAgICAgIGlmIChjb25maWcuYWxwaGFWaWV3cykge1xuICAgICAgICAgICAgICAgIHRoaXMuYWxwaGFWaWV3c18gPSB7XG4gICAgICAgICAgICAgICAgICAgIHBhbGV0dGU6IGNvbmZpZy5hbHBoYVZpZXdzLnBhbGV0dGUsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGNvbmZpZy5hbHBoYVZpZXdzLnRleHQsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCBhRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBhRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRiKCdhJykpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGFwRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBhcEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYignYXAnKSk7XG4gICAgICAgICAgICAgICAgYXBFbGVtLmFwcGVuZENoaWxkKHRoaXMuYWxwaGFWaWV3c18ucGFsZXR0ZS5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBhRWxlbS5hcHBlbmRDaGlsZChhcEVsZW0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBhdEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYignYXQnKSk7XG4gICAgICAgICAgICAgICAgYXRFbGVtLmFwcGVuZENoaWxkKHRoaXMuYWxwaGFWaWV3c18udGV4dC5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBhRWxlbS5hcHBlbmRDaGlsZChhdEVsZW0pO1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChhRWxlbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGFsbEZvY3VzYWJsZUVsZW1lbnRzKCkge1xuICAgICAgICAgICAgY29uc3QgZWxlbXMgPSBbXG4gICAgICAgICAgICAgICAgdGhpcy5zdlBhbGV0dGVWaWV3Xy5lbGVtZW50LFxuICAgICAgICAgICAgICAgIHRoaXMuaFBhbGV0dGVWaWV3Xy5lbGVtZW50LFxuICAgICAgICAgICAgICAgIHRoaXMudGV4dFZpZXdfLm1vZGVTZWxlY3RFbGVtZW50LFxuICAgICAgICAgICAgICAgIC4uLnRoaXMudGV4dFZpZXdfLnRleHRWaWV3cy5tYXAoKHYpID0+IHYuaW5wdXRFbGVtZW50KSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAodGhpcy5hbHBoYVZpZXdzXykge1xuICAgICAgICAgICAgICAgIGVsZW1zLnB1c2godGhpcy5hbHBoYVZpZXdzXy5wYWxldHRlLmVsZW1lbnQsIHRoaXMuYWxwaGFWaWV3c18udGV4dC5pbnB1dEVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGVsZW1zO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcGFyc2VDb2xvcklucHV0UGFyYW1zKHBhcmFtcykge1xuICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgcmV0dXJuIHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgYWxwaGE6IHAub3B0aW9uYWwuYm9vbGVhbixcbiAgICAgICAgICAgIGV4cGFuZGVkOiBwLm9wdGlvbmFsLmJvb2xlYW4sXG4gICAgICAgICAgICBwaWNrZXI6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlUGlja2VyTGF5b3V0KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGdldEJhc2VTdGVwRm9yQ29sb3IoZm9yQWxwaGEpIHtcbiAgICAgICAgcmV0dXJuIGZvckFscGhhID8gMC4xIDogMTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZSh0ZXh0LCBtYXhWYWx1ZSkge1xuICAgICAgICBjb25zdCBtID0gdGV4dC5tYXRjaCgvXiguKyklJC8pO1xuICAgICAgICBpZiAoIW0pIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihwYXJzZUZsb2F0KHRleHQpLCBtYXhWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE1hdGgubWluKHBhcnNlRmxvYXQobVsxXSkgKiAwLjAxICogbWF4VmFsdWUsIG1heFZhbHVlKTtcbiAgICB9XG4gICAgY29uc3QgQU5HTEVfVE9fREVHX01BUCA9IHtcbiAgICAgICAgZGVnOiAoYW5nbGUpID0+IGFuZ2xlLFxuICAgICAgICBncmFkOiAoYW5nbGUpID0+IChhbmdsZSAqIDM2MCkgLyA0MDAsXG4gICAgICAgIHJhZDogKGFuZ2xlKSA9PiAoYW5nbGUgKiAzNjApIC8gKDIgKiBNYXRoLlBJKSxcbiAgICAgICAgdHVybjogKGFuZ2xlKSA9PiBhbmdsZSAqIDM2MCxcbiAgICB9O1xuICAgIGZ1bmN0aW9uIHBhcnNlQ3NzTnVtYmVyT3JBbmdsZSh0ZXh0KSB7XG4gICAgICAgIGNvbnN0IG0gPSB0ZXh0Lm1hdGNoKC9eKFswLTkuXSs/KShkZWd8Z3JhZHxyYWR8dHVybikkLyk7XG4gICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQodGV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYW5nbGUgPSBwYXJzZUZsb2F0KG1bMV0pO1xuICAgICAgICBjb25zdCB1bml0ID0gbVsyXTtcbiAgICAgICAgcmV0dXJuIEFOR0xFX1RPX0RFR19NQVBbdW5pdF0oYW5nbGUpO1xuICAgIH1cbiAgICBjb25zdCBOT1RBVElPTl9UT19QQVJTRVJfTUFQID0ge1xuICAgICAgICAnZnVuYy5yZ2InOiAodGV4dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbSA9IHRleHQubWF0Y2goL15yZ2JcXChcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKlxcKSQvKTtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcHMgPSBbXG4gICAgICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVsxXSwgMjU1KSxcbiAgICAgICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzJdLCAyNTUpLFxuICAgICAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bM10sIDI1NSksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgaWYgKGlzTmFOKGNvbXBzWzBdKSB8fCBpc05hTihjb21wc1sxXSkgfHwgaXNOYU4oY29tcHNbMl0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKGNvbXBzLCAncmdiJyk7XG4gICAgICAgIH0sXG4gICAgICAgICdmdW5jLnJnYmEnOiAodGV4dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbSA9IHRleHQubWF0Y2goL15yZ2JhXFwoXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKlxcKSQvKTtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcHMgPSBbXG4gICAgICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVsxXSwgMjU1KSxcbiAgICAgICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzJdLCAyNTUpLFxuICAgICAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bM10sIDI1NSksXG4gICAgICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVs0XSwgMSksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgaWYgKGlzTmFOKGNvbXBzWzBdKSB8fFxuICAgICAgICAgICAgICAgIGlzTmFOKGNvbXBzWzFdKSB8fFxuICAgICAgICAgICAgICAgIGlzTmFOKGNvbXBzWzJdKSB8fFxuICAgICAgICAgICAgICAgIGlzTmFOKGNvbXBzWzNdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihjb21wcywgJ3JnYicpO1xuICAgICAgICB9LFxuICAgICAgICAnZnVuYy5oc2wnOiAodGV4dCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbSA9IHRleHQubWF0Y2goL15oc2xcXChcXHMqKFswLTlBLUZhLWYuXSsoPzpkZWd8Z3JhZHxyYWR8dHVybik/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqXFwpJC8pO1xuICAgICAgICAgICAgaWYgKCFtKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBjb21wcyA9IFtcbiAgICAgICAgICAgICAgICBwYXJzZUNzc051bWJlck9yQW5nbGUobVsxXSksXG4gICAgICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVsyXSwgMTAwKSxcbiAgICAgICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzNdLCAxMDApLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGlmIChpc05hTihjb21wc1swXSkgfHwgaXNOYU4oY29tcHNbMV0pIHx8IGlzTmFOKGNvbXBzWzJdKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihjb21wcywgJ2hzbCcpO1xuICAgICAgICB9LFxuICAgICAgICAnZnVuYy5oc2xhJzogKHRleHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSB0ZXh0Lm1hdGNoKC9eaHNsYVxcKFxccyooWzAtOUEtRmEtZi5dKyg/OmRlZ3xncmFkfHJhZHx0dXJuKT8pXFxzKixcXHMqKFswLTlBLUZhLWYuXSslPylcXHMqLFxccyooWzAtOUEtRmEtZi5dKyU/KVxccyosXFxzKihbMC05QS1GYS1mLl0rJT8pXFxzKlxcKSQvKTtcbiAgICAgICAgICAgIGlmICghbSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY29tcHMgPSBbXG4gICAgICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPckFuZ2xlKG1bMV0pLFxuICAgICAgICAgICAgICAgIHBhcnNlQ3NzTnVtYmVyT3JQZXJjZW50YWdlKG1bMl0sIDEwMCksXG4gICAgICAgICAgICAgICAgcGFyc2VDc3NOdW1iZXJPclBlcmNlbnRhZ2UobVszXSwgMTAwKSxcbiAgICAgICAgICAgICAgICBwYXJzZUNzc051bWJlck9yUGVyY2VudGFnZShtWzRdLCAxKSxcbiAgICAgICAgICAgIF07XG4gICAgICAgICAgICBpZiAoaXNOYU4oY29tcHNbMF0pIHx8XG4gICAgICAgICAgICAgICAgaXNOYU4oY29tcHNbMV0pIHx8XG4gICAgICAgICAgICAgICAgaXNOYU4oY29tcHNbMl0pIHx8XG4gICAgICAgICAgICAgICAgaXNOYU4oY29tcHNbM10pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKGNvbXBzLCAnaHNsJyk7XG4gICAgICAgIH0sXG4gICAgICAgICdoZXgucmdiJzogKHRleHQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG1SZ2IgPSB0ZXh0Lm1hdGNoKC9eIyhbMC05QS1GYS1mXSkoWzAtOUEtRmEtZl0pKFswLTlBLUZhLWZdKSQvKTtcbiAgICAgICAgICAgIGlmIChtUmdiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbMV0gKyBtUmdiWzFdLCAxNiksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbMl0gKyBtUmdiWzJdLCAxNiksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbM10gKyBtUmdiWzNdLCAxNiksXG4gICAgICAgICAgICAgICAgXSwgJ3JnYicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbVJyZ2diYiA9IHRleHQubWF0Y2goL14oPzojfDB4KShbMC05QS1GYS1mXXsyfSkoWzAtOUEtRmEtZl17Mn0pKFswLTlBLUZhLWZdezJ9KSQvKTtcbiAgICAgICAgICAgIGlmIChtUnJnZ2JiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1ScmdnYmJbMV0sIDE2KSxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQobVJyZ2diYlsyXSwgMTYpLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChtUnJnZ2JiWzNdLCAxNiksXG4gICAgICAgICAgICAgICAgXSwgJ3JnYicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgICdoZXgucmdiYSc6ICh0ZXh0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBtUmdiID0gdGV4dC5tYXRjaCgvXiM/KFswLTlBLUZhLWZdKShbMC05QS1GYS1mXSkoWzAtOUEtRmEtZl0pKFswLTlBLUZhLWZdKSQvKTtcbiAgICAgICAgICAgIGlmIChtUmdiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbMV0gKyBtUmdiWzFdLCAxNiksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbMl0gKyBtUmdiWzJdLCAxNiksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1SZ2JbM10gKyBtUmdiWzNdLCAxNiksXG4gICAgICAgICAgICAgICAgICAgIG1hcFJhbmdlKHBhcnNlSW50KG1SZ2JbNF0gKyBtUmdiWzRdLCAxNiksIDAsIDI1NSwgMCwgMSksXG4gICAgICAgICAgICAgICAgXSwgJ3JnYicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbVJyZ2diYiA9IHRleHQubWF0Y2goL14oPzojfDB4KT8oWzAtOUEtRmEtZl17Mn0pKFswLTlBLUZhLWZdezJ9KShbMC05QS1GYS1mXXsyfSkoWzAtOUEtRmEtZl17Mn0pJC8pO1xuICAgICAgICAgICAgaWYgKG1ScmdnYmIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKFtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQobVJyZ2diYlsxXSwgMTYpLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZUludChtUnJnZ2JiWzJdLCAxNiksXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlSW50KG1ScmdnYmJbM10sIDE2KSxcbiAgICAgICAgICAgICAgICAgICAgbWFwUmFuZ2UocGFyc2VJbnQobVJyZ2diYls0XSwgMTYpLCAwLCAyNTUsIDAsIDEpLFxuICAgICAgICAgICAgICAgIF0sICdyZ2InKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gZ2V0Q29sb3JOb3RhdGlvbih0ZXh0KSB7XG4gICAgICAgIGNvbnN0IG5vdGF0aW9ucyA9IE9iamVjdC5rZXlzKE5PVEFUSU9OX1RPX1BBUlNFUl9NQVApO1xuICAgICAgICByZXR1cm4gbm90YXRpb25zLnJlZHVjZSgocmVzdWx0LCBub3RhdGlvbikgPT4ge1xuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzdWJwYXJzZXIgPSBOT1RBVElPTl9UT19QQVJTRVJfTUFQW25vdGF0aW9uXTtcbiAgICAgICAgICAgIHJldHVybiBzdWJwYXJzZXIodGV4dCkgPyBub3RhdGlvbiA6IG51bGw7XG4gICAgICAgIH0sIG51bGwpO1xuICAgIH1cbiAgICBjb25zdCBDb21wb3NpdGVDb2xvclBhcnNlciA9ICh0ZXh0KSA9PiB7XG4gICAgICAgIGNvbnN0IG5vdGF0aW9uID0gZ2V0Q29sb3JOb3RhdGlvbih0ZXh0KTtcbiAgICAgICAgcmV0dXJuIG5vdGF0aW9uID8gTk9UQVRJT05fVE9fUEFSU0VSX01BUFtub3RhdGlvbl0odGV4dCkgOiBudWxsO1xuICAgIH07XG4gICAgZnVuY3Rpb24gaGFzQWxwaGFDb21wb25lbnQobm90YXRpb24pIHtcbiAgICAgICAgcmV0dXJuIChub3RhdGlvbiA9PT0gJ2Z1bmMuaHNsYScgfHxcbiAgICAgICAgICAgIG5vdGF0aW9uID09PSAnZnVuYy5yZ2JhJyB8fFxuICAgICAgICAgICAgbm90YXRpb24gPT09ICdoZXgucmdiYScpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2xvckZyb21TdHJpbmcodmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGNvbnN0IGN2ID0gQ29tcG9zaXRlQ29sb3JQYXJzZXIodmFsdWUpO1xuICAgICAgICAgICAgaWYgKGN2KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN2O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBDb2xvci5ibGFjaygpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB6ZXJvZmlsbChjb21wKSB7XG4gICAgICAgIGNvbnN0IGhleCA9IGNvbnN0cmFpblJhbmdlKE1hdGguZmxvb3IoY29tcCksIDAsIDI1NSkudG9TdHJpbmcoMTYpO1xuICAgICAgICByZXR1cm4gaGV4Lmxlbmd0aCA9PT0gMSA/IGAwJHtoZXh9YCA6IGhleDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JUb0hleFJnYlN0cmluZyh2YWx1ZSwgcHJlZml4ID0gJyMnKSB7XG4gICAgICAgIGNvbnN0IGhleGVzID0gcmVtb3ZlQWxwaGFDb21wb25lbnQodmFsdWUuZ2V0Q29tcG9uZW50cygncmdiJykpXG4gICAgICAgICAgICAubWFwKHplcm9maWxsKVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuICAgICAgICByZXR1cm4gYCR7cHJlZml4fSR7aGV4ZXN9YDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JUb0hleFJnYmFTdHJpbmcodmFsdWUsIHByZWZpeCA9ICcjJykge1xuICAgICAgICBjb25zdCByZ2JhQ29tcHMgPSB2YWx1ZS5nZXRDb21wb25lbnRzKCdyZ2InKTtcbiAgICAgICAgY29uc3QgaGV4ZXMgPSBbcmdiYUNvbXBzWzBdLCByZ2JhQ29tcHNbMV0sIHJnYmFDb21wc1syXSwgcmdiYUNvbXBzWzNdICogMjU1XVxuICAgICAgICAgICAgLm1hcCh6ZXJvZmlsbClcbiAgICAgICAgICAgIC5qb2luKCcnKTtcbiAgICAgICAgcmV0dXJuIGAke3ByZWZpeH0ke2hleGVzfWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9GdW5jdGlvbmFsUmdiU3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlciA9IGNyZWF0ZU51bWJlckZvcm1hdHRlcigwKTtcbiAgICAgICAgY29uc3QgY29tcHMgPSByZW1vdmVBbHBoYUNvbXBvbmVudCh2YWx1ZS5nZXRDb21wb25lbnRzKCdyZ2InKSkubWFwKChjb21wKSA9PiBmb3JtYXR0ZXIoY29tcCkpO1xuICAgICAgICByZXR1cm4gYHJnYigke2NvbXBzLmpvaW4oJywgJyl9KWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9GdW5jdGlvbmFsUmdiYVN0cmluZyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBhRm9ybWF0dGVyID0gY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDIpO1xuICAgICAgICBjb25zdCByZ2JGb3JtYXR0ZXIgPSBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoMCk7XG4gICAgICAgIGNvbnN0IGNvbXBzID0gdmFsdWUuZ2V0Q29tcG9uZW50cygncmdiJykubWFwKChjb21wLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gaW5kZXggPT09IDMgPyBhRm9ybWF0dGVyIDogcmdiRm9ybWF0dGVyO1xuICAgICAgICAgICAgcmV0dXJuIGZvcm1hdHRlcihjb21wKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBgcmdiYSgke2NvbXBzLmpvaW4oJywgJyl9KWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9GdW5jdGlvbmFsSHNsU3RyaW5nKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlcnMgPSBbXG4gICAgICAgICAgICBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoMCksXG4gICAgICAgICAgICBmb3JtYXRQZXJjZW50YWdlLFxuICAgICAgICAgICAgZm9ybWF0UGVyY2VudGFnZSxcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgY29tcHMgPSByZW1vdmVBbHBoYUNvbXBvbmVudCh2YWx1ZS5nZXRDb21wb25lbnRzKCdoc2wnKSkubWFwKChjb21wLCBpbmRleCkgPT4gZm9ybWF0dGVyc1tpbmRleF0oY29tcCkpO1xuICAgICAgICByZXR1cm4gYGhzbCgke2NvbXBzLmpvaW4oJywgJyl9KWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9GdW5jdGlvbmFsSHNsYVN0cmluZyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBmb3JtYXR0ZXJzID0gW1xuICAgICAgICAgICAgY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDApLFxuICAgICAgICAgICAgZm9ybWF0UGVyY2VudGFnZSxcbiAgICAgICAgICAgIGZvcm1hdFBlcmNlbnRhZ2UsXG4gICAgICAgICAgICBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoMiksXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGNvbXBzID0gdmFsdWVcbiAgICAgICAgICAgIC5nZXRDb21wb25lbnRzKCdoc2wnKVxuICAgICAgICAgICAgLm1hcCgoY29tcCwgaW5kZXgpID0+IGZvcm1hdHRlcnNbaW5kZXhdKGNvbXApKTtcbiAgICAgICAgcmV0dXJuIGBoc2xhKCR7Y29tcHMuam9pbignLCAnKX0pYDtcbiAgICB9XG4gICAgY29uc3QgTk9UQVRJT05fVE9fU1RSSU5HSUZJRVJfTUFQID0ge1xuICAgICAgICAnZnVuYy5oc2wnOiBjb2xvclRvRnVuY3Rpb25hbEhzbFN0cmluZyxcbiAgICAgICAgJ2Z1bmMuaHNsYSc6IGNvbG9yVG9GdW5jdGlvbmFsSHNsYVN0cmluZyxcbiAgICAgICAgJ2Z1bmMucmdiJzogY29sb3JUb0Z1bmN0aW9uYWxSZ2JTdHJpbmcsXG4gICAgICAgICdmdW5jLnJnYmEnOiBjb2xvclRvRnVuY3Rpb25hbFJnYmFTdHJpbmcsXG4gICAgICAgICdoZXgucmdiJzogY29sb3JUb0hleFJnYlN0cmluZyxcbiAgICAgICAgJ2hleC5yZ2JhJzogY29sb3JUb0hleFJnYmFTdHJpbmcsXG4gICAgfTtcbiAgICBmdW5jdGlvbiBnZXRDb2xvclN0cmluZ2lmaWVyKG5vdGF0aW9uKSB7XG4gICAgICAgIHJldHVybiBOT1RBVElPTl9UT19TVFJJTkdJRklFUl9NQVBbbm90YXRpb25dO1xuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSRhID0gQ2xhc3NOYW1lKCdhcGwnKTtcbiAgICBjbGFzcyBBUGFsZXR0ZVZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlQ2hhbmdlXyA9IHRoaXMub25WYWx1ZUNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZUNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJGEoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRUYWJJbmRleCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgYmFyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGJhckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYSgnYicpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChiYXJFbGVtKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbG9yRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRhKCdjJykpO1xuICAgICAgICAgICAgYmFyRWxlbS5hcHBlbmRDaGlsZChjb2xvckVsZW0pO1xuICAgICAgICAgICAgdGhpcy5jb2xvckVsZW1fID0gY29sb3JFbGVtO1xuICAgICAgICAgICAgY29uc3QgbWFya2VyRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIG1hcmtlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkYSgnbScpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChtYXJrZXJFbGVtKTtcbiAgICAgICAgICAgIHRoaXMubWFya2VyRWxlbV8gPSBtYXJrZXJFbGVtO1xuICAgICAgICAgICAgY29uc3QgcHJldmlld0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBwcmV2aWV3RWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSRhKCdwJykpO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5hcHBlbmRDaGlsZChwcmV2aWV3RWxlbSk7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdFbGVtXyA9IHByZXZpZXdFbGVtO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgcmdiYUNvbXBzID0gYy5nZXRDb21wb25lbnRzKCdyZ2InKTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnRDb2xvciA9IG5ldyBDb2xvcihbcmdiYUNvbXBzWzBdLCByZ2JhQ29tcHNbMV0sIHJnYmFDb21wc1syXSwgMF0sICdyZ2InKTtcbiAgICAgICAgICAgIGNvbnN0IHJpZ2h0Q29sb3IgPSBuZXcgQ29sb3IoW3JnYmFDb21wc1swXSwgcmdiYUNvbXBzWzFdLCByZ2JhQ29tcHNbMl0sIDI1NV0sICdyZ2InKTtcbiAgICAgICAgICAgIGNvbnN0IGdyYWRpZW50Q29tcHMgPSBbXG4gICAgICAgICAgICAgICAgJ3RvIHJpZ2h0JyxcbiAgICAgICAgICAgICAgICBjb2xvclRvRnVuY3Rpb25hbFJnYmFTdHJpbmcobGVmdENvbG9yKSxcbiAgICAgICAgICAgICAgICBjb2xvclRvRnVuY3Rpb25hbFJnYmFTdHJpbmcocmlnaHRDb2xvciksXG4gICAgICAgICAgICBdO1xuICAgICAgICAgICAgdGhpcy5jb2xvckVsZW1fLnN0eWxlLmJhY2tncm91bmQgPSBgbGluZWFyLWdyYWRpZW50KCR7Z3JhZGllbnRDb21wcy5qb2luKCcsJyl9KWA7XG4gICAgICAgICAgICB0aGlzLnByZXZpZXdFbGVtXy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvclRvRnVuY3Rpb25hbFJnYmFTdHJpbmcoYyk7XG4gICAgICAgICAgICBjb25zdCBsZWZ0ID0gbWFwUmFuZ2UocmdiYUNvbXBzWzNdLCAwLCAxLCAwLCAxMDApO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5zdHlsZS5sZWZ0ID0gYCR7bGVmdH0lYDtcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgQVBhbGV0dGVDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25LZXlEb3duXyA9IHRoaXMub25LZXlEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbktleVVwXyA9IHRoaXMub25LZXlVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyRG93bl8gPSB0aGlzLm9uUG9pbnRlckRvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlck1vdmVfID0gdGhpcy5vblBvaW50ZXJNb3ZlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJVcF8gPSB0aGlzLm9uUG9pbnRlclVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBBUGFsZXR0ZVZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfID0gbmV3IFBvaW50ZXJIYW5kbGVyKHRoaXMudmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdkb3duJywgdGhpcy5vblBvaW50ZXJEb3duXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbignbW92ZScsIHRoaXMub25Qb2ludGVyTW92ZV8pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ3VwJywgdGhpcy5vblBvaW50ZXJVcF8pO1xuICAgICAgICAgICAgdGhpcy52aWV3LmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25LZXlEb3duXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25LZXlVcF8pO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZVBvaW50ZXJFdmVudF8oZCwgb3B0cykge1xuICAgICAgICAgICAgaWYgKCFkLnBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYWxwaGEgPSBkLnBvaW50LnggLyBkLmJvdW5kcy53aWR0aDtcbiAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgW2gsIHMsIHZdID0gYy5nZXRDb21wb25lbnRzKCdoc3YnKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUobmV3IENvbG9yKFtoLCBzLCB2LCBhbHBoYV0sICdoc3YnKSwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyRG93bl8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlck1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJVcF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbktleURvd25fKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBzdGVwID0gZ2V0U3RlcEZvcktleShnZXRCYXNlU3RlcEZvckNvbG9yKHRydWUpLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBbaCwgcywgdiwgYV0gPSBjLmdldENvbXBvbmVudHMoJ2hzdicpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZShuZXcgQ29sb3IoW2gsIHMsIHYsIGEgKyBzdGVwXSwgJ2hzdicpLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5VXBfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBzdGVwID0gZ2V0U3RlcEZvcktleShnZXRCYXNlU3RlcEZvckNvbG9yKHRydWUpLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlLnJhd1ZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSQ5ID0gQ2xhc3NOYW1lKCdjb2x0eHQnKTtcbiAgICBmdW5jdGlvbiBjcmVhdGVNb2RlU2VsZWN0RWxlbWVudChkb2MpIHtcbiAgICAgICAgY29uc3Qgc2VsZWN0RWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTtcbiAgICAgICAgY29uc3QgaXRlbXMgPSBbXG4gICAgICAgICAgICB7IHRleHQ6ICdSR0InLCB2YWx1ZTogJ3JnYicgfSxcbiAgICAgICAgICAgIHsgdGV4dDogJ0hTTCcsIHZhbHVlOiAnaHNsJyB9LFxuICAgICAgICAgICAgeyB0ZXh0OiAnSFNWJywgdmFsdWU6ICdoc3YnIH0sXG4gICAgICAgIF07XG4gICAgICAgIHNlbGVjdEVsZW0uYXBwZW5kQ2hpbGQoaXRlbXMucmVkdWNlKChmcmFnLCBpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcHRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuICAgICAgICAgICAgb3B0RWxlbS50ZXh0Q29udGVudCA9IGl0ZW0udGV4dDtcbiAgICAgICAgICAgIG9wdEVsZW0udmFsdWUgPSBpdGVtLnZhbHVlO1xuICAgICAgICAgICAgZnJhZy5hcHBlbmRDaGlsZChvcHRFbGVtKTtcbiAgICAgICAgICAgIHJldHVybiBmcmFnO1xuICAgICAgICB9LCBkb2MuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKSk7XG4gICAgICAgIHJldHVybiBzZWxlY3RFbGVtO1xuICAgIH1cbiAgICBjbGFzcyBDb2xvclRleHRWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ5KCkpO1xuICAgICAgICAgICAgY29uc3QgbW9kZUVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBtb2RlRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ5KCdtJykpO1xuICAgICAgICAgICAgdGhpcy5tb2RlRWxlbV8gPSBjcmVhdGVNb2RlU2VsZWN0RWxlbWVudChkb2MpO1xuICAgICAgICAgICAgdGhpcy5tb2RlRWxlbV8uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOSgnbXMnKSk7XG4gICAgICAgICAgICBtb2RlRWxlbS5hcHBlbmRDaGlsZCh0aGlzLm1vZGVTZWxlY3RFbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IG1vZGVNYXJrZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgbW9kZU1hcmtlckVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOSgnbW0nKSk7XG4gICAgICAgICAgICBtb2RlTWFya2VyRWxlbS5hcHBlbmRDaGlsZChjcmVhdGVTdmdJY29uRWxlbWVudChkb2MsICdkcm9wZG93bicpKTtcbiAgICAgICAgICAgIG1vZGVFbGVtLmFwcGVuZENoaWxkKG1vZGVNYXJrZXJFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChtb2RlRWxlbSk7XG4gICAgICAgICAgICBjb25zdCB0ZXh0c0VsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0ZXh0c0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkOSgndycpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0ZXh0c0VsZW0pO1xuICAgICAgICAgICAgdGhpcy50ZXh0c0VsZW1fID0gdGV4dHNFbGVtO1xuICAgICAgICAgICAgdGhpcy50ZXh0Vmlld3NfID0gY29uZmlnLnRleHRWaWV3cztcbiAgICAgICAgICAgIHRoaXMuYXBwbHlUZXh0Vmlld3NfKCk7XG4gICAgICAgICAgICBiaW5kVmFsdWUoY29uZmlnLmNvbG9yTW9kZSwgKG1vZGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVFbGVtXy52YWx1ZSA9IG1vZGU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbW9kZVNlbGVjdEVsZW1lbnQoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlRWxlbV87XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHRleHRWaWV3cygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHRWaWV3c187XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHRleHRWaWV3cyh0ZXh0Vmlld3MpIHtcbiAgICAgICAgICAgIHRoaXMudGV4dFZpZXdzXyA9IHRleHRWaWV3cztcbiAgICAgICAgICAgIHRoaXMuYXBwbHlUZXh0Vmlld3NfKCk7XG4gICAgICAgIH1cbiAgICAgICAgYXBwbHlUZXh0Vmlld3NfKCkge1xuICAgICAgICAgICAgcmVtb3ZlQ2hpbGRFbGVtZW50cyh0aGlzLnRleHRzRWxlbV8pO1xuICAgICAgICAgICAgY29uc3QgZG9jID0gdGhpcy5lbGVtZW50Lm93bmVyRG9jdW1lbnQ7XG4gICAgICAgICAgICB0aGlzLnRleHRWaWV3c18uZm9yRWFjaCgodikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIGNvbXBFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDkoJ2MnKSk7XG4gICAgICAgICAgICAgICAgY29tcEVsZW0uYXBwZW5kQ2hpbGQodi5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLnRleHRzRWxlbV8uYXBwZW5kQ2hpbGQoY29tcEVsZW0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBGT1JNQVRURVIgPSBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoMCk7XG4gICAgY29uc3QgTU9ERV9UT19DT05TVFJBSU5UX01BUCA9IHtcbiAgICAgICAgcmdiOiAoKSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlQ29uc3RyYWludCh7IG1pbjogMCwgbWF4OiAyNTUgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGhzbDogKGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gaW5kZXggPT09IDBcbiAgICAgICAgICAgICAgICA/IG5ldyBSYW5nZUNvbnN0cmFpbnQoeyBtaW46IDAsIG1heDogMzYwIH0pXG4gICAgICAgICAgICAgICAgOiBuZXcgUmFuZ2VDb25zdHJhaW50KHsgbWluOiAwLCBtYXg6IDEwMCB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgaHN2OiAoaW5kZXgpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBpbmRleCA9PT0gMFxuICAgICAgICAgICAgICAgID8gbmV3IFJhbmdlQ29uc3RyYWludCh7IG1pbjogMCwgbWF4OiAzNjAgfSlcbiAgICAgICAgICAgICAgICA6IG5ldyBSYW5nZUNvbnN0cmFpbnQoeyBtaW46IDAsIG1heDogMTAwIH0pO1xuICAgICAgICB9LFxuICAgIH07XG4gICAgZnVuY3Rpb24gY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcihkb2MsIGNvbmZpZywgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBOdW1iZXJUZXh0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgIGFycmF5UG9zaXRpb246IGluZGV4ID09PSAwID8gJ2ZzdCcgOiBpbmRleCA9PT0gMyAtIDEgPyAnbHN0JyA6ICdtaWQnLFxuICAgICAgICAgICAgYmFzZVN0ZXA6IGdldEJhc2VTdGVwRm9yQ29sb3IoZmFsc2UpLFxuICAgICAgICAgICAgcGFyc2VyOiBjb25maWcucGFyc2VyLFxuICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgIGRyYWdnaW5nU2NhbGU6IDEsXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBGT1JNQVRURVIsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHZhbHVlOiBjcmVhdGVWYWx1ZSgwLCB7XG4gICAgICAgICAgICAgICAgY29uc3RyYWludDogTU9ERV9UT19DT05TVFJBSU5UX01BUFtjb25maWcuY29sb3JNb2RlXShpbmRleCksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGNsYXNzIENvbG9yVGV4dENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbk1vZGVTZWxlY3RDaGFuZ2VfID0gdGhpcy5vbk1vZGVTZWxlY3RDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnBhcnNlcl8gPSBjb25maWcucGFyc2VyO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMuY29sb3JNb2RlID0gY3JlYXRlVmFsdWUodGhpcy52YWx1ZS5yYXdWYWx1ZS5tb2RlKTtcbiAgICAgICAgICAgIHRoaXMuY2NzXyA9IHRoaXMuY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcnNfKGRvYyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgQ29sb3JUZXh0Vmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBjb2xvck1vZGU6IHRoaXMuY29sb3JNb2RlLFxuICAgICAgICAgICAgICAgIHRleHRWaWV3czogW3RoaXMuY2NzX1swXS52aWV3LCB0aGlzLmNjc19bMV0udmlldywgdGhpcy5jY3NfWzJdLnZpZXddLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcubW9kZVNlbGVjdEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgdGhpcy5vbk1vZGVTZWxlY3RDaGFuZ2VfKTtcbiAgICAgICAgfVxuICAgICAgICBjcmVhdGVDb21wb25lbnRDb250cm9sbGVyc18oZG9jKSB7XG4gICAgICAgICAgICBjb25zdCBjYyA9IHtcbiAgICAgICAgICAgICAgICBjb2xvck1vZGU6IHRoaXMuY29sb3JNb2RlLnJhd1ZhbHVlLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogdGhpcy5wYXJzZXJfLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgY29uc3QgY2NzID0gW1xuICAgICAgICAgICAgICAgIGNyZWF0ZUNvbXBvbmVudENvbnRyb2xsZXIoZG9jLCBjYywgMCksXG4gICAgICAgICAgICAgICAgY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcihkb2MsIGNjLCAxKSxcbiAgICAgICAgICAgICAgICBjcmVhdGVDb21wb25lbnRDb250cm9sbGVyKGRvYywgY2MsIDIpLFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIGNjcy5mb3JFYWNoKChjcywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25uZWN0VmFsdWVzKHtcbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5OiBjcy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgZm9yd2FyZDogKHApID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwLnJhd1ZhbHVlLmdldENvbXBvbmVudHModGhpcy5jb2xvck1vZGUucmF3VmFsdWUpW2luZGV4XTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgYmFja3dhcmQ6IChwLCBzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwaWNrZWRNb2RlID0gdGhpcy5jb2xvck1vZGUucmF3VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wcyA9IHAucmF3VmFsdWUuZ2V0Q29tcG9uZW50cyhwaWNrZWRNb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBzW2luZGV4XSA9IHMucmF3VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKGFwcGVuZEFscGhhQ29tcG9uZW50KHJlbW92ZUFscGhhQ29tcG9uZW50KGNvbXBzKSwgY29tcHNbM10pLCBwaWNrZWRNb2RlKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGNjcztcbiAgICAgICAgfVxuICAgICAgICBvbk1vZGVTZWxlY3RDaGFuZ2VfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBzZWxlY3RFbGVtID0gZXYuY3VycmVudFRhcmdldDtcbiAgICAgICAgICAgIHRoaXMuY29sb3JNb2RlLnJhd1ZhbHVlID0gc2VsZWN0RWxlbS52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY2NzXyA9IHRoaXMuY3JlYXRlQ29tcG9uZW50Q29udHJvbGxlcnNfKHRoaXMudmlldy5lbGVtZW50Lm93bmVyRG9jdW1lbnQpO1xuICAgICAgICAgICAgdGhpcy52aWV3LnRleHRWaWV3cyA9IFtcbiAgICAgICAgICAgICAgICB0aGlzLmNjc19bMF0udmlldyxcbiAgICAgICAgICAgICAgICB0aGlzLmNjc19bMV0udmlldyxcbiAgICAgICAgICAgICAgICB0aGlzLmNjc19bMl0udmlldyxcbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkOCA9IENsYXNzTmFtZSgnaHBsJyk7XG4gICAgY2xhc3MgSFBhbGV0dGVWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ4KCkpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kVGFiSW5kZXgodGhpcy5lbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbG9yRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIGNvbG9yRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ4KCdjJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGNvbG9yRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBtYXJrZXJFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgbWFya2VyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ4KCdtJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKG1hcmtlckVsZW0pO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXyA9IG1hcmtlckVsZW07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfKCkge1xuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBbaF0gPSBjLmdldENvbXBvbmVudHMoJ2hzdicpO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvclRvRnVuY3Rpb25hbFJnYlN0cmluZyhuZXcgQ29sb3IoW2gsIDEwMCwgMTAwXSwgJ2hzdicpKTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBtYXBSYW5nZShoLCAwLCAzNjAsIDAsIDEwMCk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fLnN0eWxlLmxlZnQgPSBgJHtsZWZ0fSVgO1xuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBIUGFsZXR0ZUNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbktleURvd25fID0gdGhpcy5vbktleURvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uS2V5VXBfID0gdGhpcy5vbktleVVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJEb3duXyA9IHRoaXMub25Qb2ludGVyRG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyTW92ZV8gPSB0aGlzLm9uUG9pbnRlck1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlclVwXyA9IHRoaXMub25Qb2ludGVyVXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IEhQYWxldHRlVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8gPSBuZXcgUG9pbnRlckhhbmRsZXIodGhpcy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ2Rvd24nLCB0aGlzLm9uUG9pbnRlckRvd25fKTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbigndXAnLCB0aGlzLm9uUG9pbnRlclVwXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbktleURvd25fKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5vbktleVVwXyk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlUG9pbnRlckV2ZW50XyhkLCBvcHRzKSB7XG4gICAgICAgICAgICBpZiAoIWQucG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBodWUgPSBtYXBSYW5nZShkLnBvaW50LngsIDAsIGQuYm91bmRzLndpZHRoLCAwLCAzNjApO1xuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBbLCBzLCB2LCBhXSA9IGMuZ2V0Q29tcG9uZW50cygnaHN2Jyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKG5ldyBDb2xvcihbaHVlLCBzLCB2LCBhXSwgJ2hzdicpLCBvcHRzKTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJEb3duXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyTW92ZV8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlclVwXyhldikge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVQb2ludGVyRXZlbnRfKGV2LmRhdGEsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5RG93bl8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRTdGVwRm9yS2V5KGdldEJhc2VTdGVwRm9yQ29sb3IoZmFsc2UpLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGlmIChzdGVwID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgYyA9IHRoaXMudmFsdWUucmF3VmFsdWU7XG4gICAgICAgICAgICBjb25zdCBbaCwgcywgdiwgYV0gPSBjLmdldENvbXBvbmVudHMoJ2hzdicpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZShuZXcgQ29sb3IoW2ggKyBzdGVwLCBzLCB2LCBhXSwgJ2hzdicpLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5VXBfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBzdGVwID0gZ2V0U3RlcEZvcktleShnZXRCYXNlU3RlcEZvckNvbG9yKGZhbHNlKSwgZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzKGV2KSk7XG4gICAgICAgICAgICBpZiAoc3RlcCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUodGhpcy52YWx1ZS5yYXdWYWx1ZSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICBsYXN0OiB0cnVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbGFzc05hbWUkNyA9IENsYXNzTmFtZSgnc3ZwJyk7XG4gICAgY29uc3QgQ0FOVkFTX1JFU09MID0gNjQ7XG4gICAgY2xhc3MgU3ZQYWxldHRlVmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VfID0gdGhpcy5vblZhbHVlQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNygpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZFRhYkluZGV4KHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBjYW52YXNFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuICAgICAgICAgICAgY2FudmFzRWxlbS5oZWlnaHQgPSBDQU5WQVNfUkVTT0w7XG4gICAgICAgICAgICBjYW52YXNFbGVtLndpZHRoID0gQ0FOVkFTX1JFU09MO1xuICAgICAgICAgICAgY2FudmFzRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ3KCdjJykpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGNhbnZhc0VsZW0pO1xuICAgICAgICAgICAgdGhpcy5jYW52YXNFbGVtZW50ID0gY2FudmFzRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtlckVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBtYXJrZXJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDcoJ20nKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQobWFya2VyRWxlbSk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fID0gbWFya2VyRWxlbTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSBnZXRDYW52YXNDb250ZXh0KHRoaXMuY2FudmFzRWxlbWVudCk7XG4gICAgICAgICAgICBpZiAoIWN0eCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGMgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgaHN2Q29tcHMgPSBjLmdldENvbXBvbmVudHMoJ2hzdicpO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSB0aGlzLmNhbnZhc0VsZW1lbnQud2lkdGg7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSB0aGlzLmNhbnZhc0VsZW1lbnQuaGVpZ2h0O1xuICAgICAgICAgICAgY29uc3QgaW1nRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgICBjb25zdCBkYXRhID0gaW1nRGF0YS5kYXRhO1xuICAgICAgICAgICAgZm9yIChsZXQgaXkgPSAwOyBpeSA8IGhlaWdodDsgaXkrKykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGl4ID0gMDsgaXggPCB3aWR0aDsgaXgrKykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0gbWFwUmFuZ2UoaXgsIDAsIHdpZHRoLCAwLCAxMDApO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2ID0gbWFwUmFuZ2UoaXksIDAsIGhlaWdodCwgMTAwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmdiQ29tcHMgPSBoc3ZUb1JnYihoc3ZDb21wc1swXSwgcywgdik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGkgPSAoaXkgKiB3aWR0aCArIGl4KSAqIDQ7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFbaV0gPSByZ2JDb21wc1swXTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtpICsgMV0gPSByZ2JDb21wc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtpICsgMl0gPSByZ2JDb21wc1syXTtcbiAgICAgICAgICAgICAgICAgICAgZGF0YVtpICsgM10gPSAyNTU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY3R4LnB1dEltYWdlRGF0YShpbWdEYXRhLCAwLCAwKTtcbiAgICAgICAgICAgIGNvbnN0IGxlZnQgPSBtYXBSYW5nZShoc3ZDb21wc1sxXSwgMCwgMTAwLCAwLCAxMDApO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5zdHlsZS5sZWZ0ID0gYCR7bGVmdH0lYDtcbiAgICAgICAgICAgIGNvbnN0IHRvcCA9IG1hcFJhbmdlKGhzdkNvbXBzWzJdLCAwLCAxMDAsIDEwMCwgMCk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fLnN0eWxlLnRvcCA9IGAke3RvcH0lYDtcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgU3ZQYWxldHRlQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uS2V5RG93bl8gPSB0aGlzLm9uS2V5RG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25LZXlVcF8gPSB0aGlzLm9uS2V5VXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlckRvd25fID0gdGhpcy5vblBvaW50ZXJEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJNb3ZlXyA9IHRoaXMub25Qb2ludGVyTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyVXBfID0gdGhpcy5vblBvaW50ZXJVcF8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgU3ZQYWxldHRlVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8gPSBuZXcgUG9pbnRlckhhbmRsZXIodGhpcy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ2Rvd24nLCB0aGlzLm9uUG9pbnRlckRvd25fKTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdtb3ZlJywgdGhpcy5vblBvaW50ZXJNb3ZlXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbigndXAnLCB0aGlzLm9uUG9pbnRlclVwXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vbktleURvd25fKTtcbiAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJywgdGhpcy5vbktleVVwXyk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlUG9pbnRlckV2ZW50XyhkLCBvcHRzKSB7XG4gICAgICAgICAgICBpZiAoIWQucG9pbnQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBzYXR1cmF0aW9uID0gbWFwUmFuZ2UoZC5wb2ludC54LCAwLCBkLmJvdW5kcy53aWR0aCwgMCwgMTAwKTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbWFwUmFuZ2UoZC5wb2ludC55LCAwLCBkLmJvdW5kcy5oZWlnaHQsIDEwMCwgMCk7XG4gICAgICAgICAgICBjb25zdCBbaCwgLCAsIGFdID0gdGhpcy52YWx1ZS5yYXdWYWx1ZS5nZXRDb21wb25lbnRzKCdoc3YnKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUobmV3IENvbG9yKFtoLCBzYXR1cmF0aW9uLCB2YWx1ZSwgYV0sICdoc3YnKSwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyRG93bl8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlck1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJVcF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvbktleURvd25fKGV2KSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJvd0tleShldi5rZXkpKSB7XG4gICAgICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IFtoLCBzLCB2LCBhXSA9IHRoaXMudmFsdWUucmF3VmFsdWUuZ2V0Q29tcG9uZW50cygnaHN2Jyk7XG4gICAgICAgICAgICBjb25zdCBiYXNlU3RlcCA9IGdldEJhc2VTdGVwRm9yQ29sb3IoZmFsc2UpO1xuICAgICAgICAgICAgY29uc3QgZHMgPSBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGNvbnN0IGR2ID0gZ2V0U3RlcEZvcktleShiYXNlU3RlcCwgZ2V0VmVydGljYWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgaWYgKGRzID09PSAwICYmIGR2ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZShuZXcgQ29sb3IoW2gsIHMgKyBkcywgdiArIGR2LCBhXSwgJ2hzdicpLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uS2V5VXBfKGV2KSB7XG4gICAgICAgICAgICBjb25zdCBiYXNlU3RlcCA9IGdldEJhc2VTdGVwRm9yQ29sb3IoZmFsc2UpO1xuICAgICAgICAgICAgY29uc3QgZHMgPSBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwLCBnZXRIb3Jpem9udGFsU3RlcEtleXMoZXYpKTtcbiAgICAgICAgICAgIGNvbnN0IGR2ID0gZ2V0U3RlcEZvcktleShiYXNlU3RlcCwgZ2V0VmVydGljYWxTdGVwS2V5cyhldikpO1xuICAgICAgICAgICAgaWYgKGRzID09PSAwICYmIGR2ID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy52YWx1ZS5zZXRSYXdWYWx1ZSh0aGlzLnZhbHVlLnJhd1ZhbHVlLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIENvbG9yUGlja2VyQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5oUGFsZXR0ZUNfID0gbmV3IEhQYWxldHRlQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnN2UGFsZXR0ZUNfID0gbmV3IFN2UGFsZXR0ZUNvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5hbHBoYUljc18gPSBjb25maWcuc3VwcG9ydHNBbHBoYVxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBwYWxldHRlOiBuZXcgQVBhbGV0dGVDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogbmV3IE51bWJlclRleHRDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyOiBwYXJzZU51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VTdGVwOiAwLjEsXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogMC4wMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNyZWF0ZU51bWJlckZvcm1hdHRlcigyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNyZWF0ZVZhbHVlKDAsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50OiBuZXcgUmFuZ2VDb25zdHJhaW50KHsgbWluOiAwLCBtYXg6IDEgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy5hbHBoYUljc18pIHtcbiAgICAgICAgICAgICAgICBjb25uZWN0VmFsdWVzKHtcbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgc2Vjb25kYXJ5OiB0aGlzLmFscGhhSWNzXy50ZXh0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBmb3J3YXJkOiAocCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAucmF3VmFsdWUuZ2V0Q29tcG9uZW50cygpWzNdO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBiYWNrd2FyZDogKHAsIHMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBzID0gcC5yYXdWYWx1ZS5nZXRDb21wb25lbnRzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wc1szXSA9IHMucmF3VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yKGNvbXBzLCBwLnJhd1ZhbHVlLm1vZGUpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy50ZXh0Q18gPSBuZXcgQ29sb3JUZXh0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBwYXJzZXI6IHBhcnNlTnVtYmVyLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBDb2xvclBpY2tlclZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgYWxwaGFWaWV3czogdGhpcy5hbHBoYUljc19cbiAgICAgICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwYWxldHRlOiB0aGlzLmFscGhhSWNzXy5wYWxldHRlLnZpZXcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB0aGlzLmFscGhhSWNzXy50ZXh0LnZpZXcsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiBudWxsLFxuICAgICAgICAgICAgICAgIGhQYWxldHRlVmlldzogdGhpcy5oUGFsZXR0ZUNfLnZpZXcsXG4gICAgICAgICAgICAgICAgc3VwcG9ydHNBbHBoYTogY29uZmlnLnN1cHBvcnRzQWxwaGEsXG4gICAgICAgICAgICAgICAgc3ZQYWxldHRlVmlldzogdGhpcy5zdlBhbGV0dGVDXy52aWV3LFxuICAgICAgICAgICAgICAgIHRleHRWaWV3OiB0aGlzLnRleHRDXy52aWV3LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHRleHRDb250cm9sbGVyKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dENfO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJDYgPSBDbGFzc05hbWUoJ2NvbHN3Jyk7XG4gICAgY2xhc3MgQ29sb3JTd2F0Y2hWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlQ2hhbmdlXyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDYoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3Qgc3dhdGNoRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHN3YXRjaEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNignc3cnKSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoc3dhdGNoRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnN3YXRjaEVsZW1fID0gc3dhdGNoRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbkVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgICAgICBidXR0b25FbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDYoJ2InKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmREaXNhYmxlZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uRWxlbWVudCA9IGJ1dHRvbkVsZW07XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfKCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgdGhpcy5zd2F0Y2hFbGVtXy5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvclRvSGV4UmdiYVN0cmluZyh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgb25WYWx1ZUNoYW5nZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIENvbG9yU3dhdGNoQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IENvbG9yU3dhdGNoVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBDb2xvckNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbkJ1dHRvbkJsdXJfID0gdGhpcy5vbkJ1dHRvbkJsdXJfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uQnV0dG9uQ2xpY2tfID0gdGhpcy5vbkJ1dHRvbkNsaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvcHVwQ2hpbGRCbHVyXyA9IHRoaXMub25Qb3B1cENoaWxkQmx1cl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb3B1cENoaWxkS2V5ZG93bl8gPSB0aGlzLm9uUG9wdXBDaGlsZEtleWRvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5mb2xkYWJsZV8gPSBGb2xkYWJsZS5jcmVhdGUoY29uZmlnLmV4cGFuZGVkKTtcbiAgICAgICAgICAgIHRoaXMuc3dhdGNoQ18gPSBuZXcgQ29sb3JTd2F0Y2hDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbkVsZW0gPSB0aGlzLnN3YXRjaENfLnZpZXcuYnV0dG9uRWxlbWVudDtcbiAgICAgICAgICAgIGJ1dHRvbkVsZW0uYWRkRXZlbnRMaXN0ZW5lcignYmx1cicsIHRoaXMub25CdXR0b25CbHVyXyk7XG4gICAgICAgICAgICBidXR0b25FbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdGhpcy5vbkJ1dHRvbkNsaWNrXyk7XG4gICAgICAgICAgICB0aGlzLnRleHRDXyA9IG5ldyBUZXh0Q29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBwYXJzZXI6IGNvbmZpZy5wYXJzZXIsXG4gICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNvbmZpZy5mb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IENvbG9yVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBmb2xkYWJsZTogdGhpcy5mb2xkYWJsZV8sXG4gICAgICAgICAgICAgICAgcGlja2VyTGF5b3V0OiBjb25maWcucGlja2VyTGF5b3V0LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcuc3dhdGNoRWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnN3YXRjaENfLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLnZpZXcudGV4dEVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy50ZXh0Q18udmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMucG9wQ18gPVxuICAgICAgICAgICAgICAgIGNvbmZpZy5waWNrZXJMYXlvdXQgPT09ICdwb3B1cCdcbiAgICAgICAgICAgICAgICAgICAgPyBuZXcgUG9wdXBDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgICAgY29uc3QgcGlja2VyQyA9IG5ldyBDb2xvclBpY2tlckNvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgc3VwcG9ydHNBbHBoYTogY29uZmlnLnN1cHBvcnRzQWxwaGEsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcGlja2VyQy52aWV3LmFsbEZvY3VzYWJsZUVsZW1lbnRzLmZvckVhY2goKGVsZW0pID0+IHtcbiAgICAgICAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2JsdXInLCB0aGlzLm9uUG9wdXBDaGlsZEJsdXJfKTtcbiAgICAgICAgICAgICAgICBlbGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCB0aGlzLm9uUG9wdXBDaGlsZEtleWRvd25fKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5waWNrZXJDXyA9IHBpY2tlckM7XG4gICAgICAgICAgICBpZiAodGhpcy5wb3BDXykge1xuICAgICAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMucG9wQ18udmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcENfLnZpZXcuZWxlbWVudC5hcHBlbmRDaGlsZChwaWNrZXJDLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgY29ubmVjdFZhbHVlcyh7XG4gICAgICAgICAgICAgICAgICAgIHByaW1hcnk6IHRoaXMuZm9sZGFibGVfLnZhbHVlKCdleHBhbmRlZCcpLFxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnk6IHRoaXMucG9wQ18uc2hvd3MsXG4gICAgICAgICAgICAgICAgICAgIGZvcndhcmQ6IChwKSA9PiBwLnJhd1ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBiYWNrd2FyZDogKF8sIHMpID0+IHMucmF3VmFsdWUsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnZpZXcucGlja2VyRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMudmlldy5waWNrZXJFbGVtZW50LmFwcGVuZENoaWxkKHRoaXMucGlja2VyQ18udmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBiaW5kRm9sZGFibGUodGhpcy5mb2xkYWJsZV8sIHRoaXMudmlldy5waWNrZXJFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBnZXQgdGV4dENvbnRyb2xsZXIoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZXh0Q187XG4gICAgICAgIH1cbiAgICAgICAgb25CdXR0b25CbHVyXyhlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucG9wQ18pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbGVtID0gdGhpcy52aWV3LmVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBuZXh0VGFyZ2V0ID0gZm9yY2VDYXN0KGUucmVsYXRlZFRhcmdldCk7XG4gICAgICAgICAgICBpZiAoIW5leHRUYXJnZXQgfHwgIWVsZW0uY29udGFpbnMobmV4dFRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcENfLnNob3dzLnJhd1ZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25CdXR0b25DbGlja18oKSB7XG4gICAgICAgICAgICB0aGlzLmZvbGRhYmxlXy5zZXQoJ2V4cGFuZGVkJywgIXRoaXMuZm9sZGFibGVfLmdldCgnZXhwYW5kZWQnKSk7XG4gICAgICAgICAgICBpZiAodGhpcy5mb2xkYWJsZV8uZ2V0KCdleHBhbmRlZCcpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJDXy52aWV3LmFsbEZvY3VzYWJsZUVsZW1lbnRzWzBdLmZvY3VzKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25Qb3B1cENoaWxkQmx1cl8oZXYpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5wb3BDXykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLnBvcENfLnZpZXcuZWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IG5leHRUYXJnZXQgPSBmaW5kTmV4dFRhcmdldChldik7XG4gICAgICAgICAgICBpZiAobmV4dFRhcmdldCAmJiBlbGVtLmNvbnRhaW5zKG5leHRUYXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5leHRUYXJnZXQgJiZcbiAgICAgICAgICAgICAgICBuZXh0VGFyZ2V0ID09PSB0aGlzLnN3YXRjaENfLnZpZXcuYnV0dG9uRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgICFzdXBwb3J0c1RvdWNoKGVsZW0ub3duZXJEb2N1bWVudCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBvcENfLnNob3dzLnJhd1ZhbHVlID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb3B1cENoaWxkS2V5ZG93bl8oZXYpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcENfKSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3BDXy5zaG93cy5yYXdWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudmlldy5waWNrZXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgaWYgKGV2LmtleSA9PT0gJ0VzY2FwZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zd2F0Y2hDXy52aWV3LmJ1dHRvbkVsZW1lbnQuZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb2xvckZyb21PYmplY3QodmFsdWUpIHtcbiAgICAgICAgaWYgKENvbG9yLmlzQ29sb3JPYmplY3QodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gQ29sb3IuZnJvbU9iamVjdCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIENvbG9yLmJsYWNrKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yVG9SZ2JOdW1iZXIodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHJlbW92ZUFscGhhQ29tcG9uZW50KHZhbHVlLmdldENvbXBvbmVudHMoJ3JnYicpKS5yZWR1Y2UoKHJlc3VsdCwgY29tcCkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIChyZXN1bHQgPDwgOCkgfCAoTWF0aC5mbG9vcihjb21wKSAmIDB4ZmYpO1xuICAgICAgICB9LCAwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY29sb3JUb1JnYmFOdW1iZXIodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuICh2YWx1ZS5nZXRDb21wb25lbnRzKCdyZ2InKS5yZWR1Y2UoKHJlc3VsdCwgY29tcCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGhleCA9IE1hdGguZmxvb3IoaW5kZXggPT09IDMgPyBjb21wICogMjU1IDogY29tcCkgJiAweGZmO1xuICAgICAgICAgICAgcmV0dXJuIChyZXN1bHQgPDwgOCkgfCBoZXg7XG4gICAgICAgIH0sIDApID4+PiAwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbnVtYmVyVG9SZ2JDb2xvcihudW0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBDb2xvcihbKG51bSA+PiAxNikgJiAweGZmLCAobnVtID4+IDgpICYgMHhmZiwgbnVtICYgMHhmZl0sICdyZ2InKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gbnVtYmVyVG9SZ2JhQ29sb3IobnVtKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29sb3IoW1xuICAgICAgICAgICAgKG51bSA+PiAyNCkgJiAweGZmLFxuICAgICAgICAgICAgKG51bSA+PiAxNikgJiAweGZmLFxuICAgICAgICAgICAgKG51bSA+PiA4KSAmIDB4ZmYsXG4gICAgICAgICAgICBtYXBSYW5nZShudW0gJiAweGZmLCAwLCAyNTUsIDAsIDEpLFxuICAgICAgICBdLCAncmdiJyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbG9yRnJvbVJnYk51bWJlcih2YWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuIENvbG9yLmJsYWNrKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bWJlclRvUmdiQ29sb3IodmFsdWUpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjb2xvckZyb21SZ2JhTnVtYmVyKHZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gQ29sb3IuYmxhY2soKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVtYmVyVG9SZ2JhQ29sb3IodmFsdWUpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbG9yU3RyaW5nV3JpdGVyKG5vdGF0aW9uKSB7XG4gICAgICAgIGNvbnN0IHN0cmluZ2lmeSA9IGdldENvbG9yU3RyaW5naWZpZXIobm90YXRpb24pO1xuICAgICAgICByZXR1cm4gKHRhcmdldCwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIHdyaXRlUHJpbWl0aXZlKHRhcmdldCwgc3RyaW5naWZ5KHZhbHVlKSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbG9yTnVtYmVyV3JpdGVyKHN1cHBvcnRzQWxwaGEpIHtcbiAgICAgICAgY29uc3QgY29sb3JUb051bWJlciA9IHN1cHBvcnRzQWxwaGEgPyBjb2xvclRvUmdiYU51bWJlciA6IGNvbG9yVG9SZ2JOdW1iZXI7XG4gICAgICAgIHJldHVybiAodGFyZ2V0LCB2YWx1ZSkgPT4ge1xuICAgICAgICAgICAgd3JpdGVQcmltaXRpdmUodGFyZ2V0LCBjb2xvclRvTnVtYmVyKHZhbHVlKSk7XG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdyaXRlUmdiYUNvbG9yT2JqZWN0KHRhcmdldCwgdmFsdWUpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gdmFsdWUudG9SZ2JhT2JqZWN0KCk7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCdyJywgb2JqLnIpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgnZycsIG9iai5nKTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ2InLCBvYmouYik7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCdhJywgb2JqLmEpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3cml0ZVJnYkNvbG9yT2JqZWN0KHRhcmdldCwgdmFsdWUpIHtcbiAgICAgICAgY29uc3Qgb2JqID0gdmFsdWUudG9SZ2JhT2JqZWN0KCk7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCdyJywgb2JqLnIpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgnZycsIG9iai5nKTtcbiAgICAgICAgdGFyZ2V0LndyaXRlUHJvcGVydHkoJ2InLCBvYmouYik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbG9yT2JqZWN0V3JpdGVyKHN1cHBvcnRzQWxwaGEpIHtcbiAgICAgICAgcmV0dXJuIHN1cHBvcnRzQWxwaGEgPyB3cml0ZVJnYmFDb2xvck9iamVjdCA6IHdyaXRlUmdiQ29sb3JPYmplY3Q7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gc2hvdWxkU3VwcG9ydEFscGhhJDEoaW5wdXRQYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuICdhbHBoYScgaW4gaW5wdXRQYXJhbXMgJiYgaW5wdXRQYXJhbXMuYWxwaGEgPT09IHRydWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUZvcm1hdHRlciQxKHN1cHBvcnRzQWxwaGEpIHtcbiAgICAgICAgcmV0dXJuIHN1cHBvcnRzQWxwaGFcbiAgICAgICAgICAgID8gKHYpID0+IGNvbG9yVG9IZXhSZ2JhU3RyaW5nKHYsICcweCcpXG4gICAgICAgICAgICA6ICh2KSA9PiBjb2xvclRvSGV4UmdiU3RyaW5nKHYsICcweCcpO1xuICAgIH1cbiAgICBjb25zdCBOdW1iZXJDb2xvcklucHV0UGx1Z2luID0ge1xuICAgICAgICBpZDogJ2lucHV0LWNvbG9yLW51bWJlcicsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoISgndmlldycgaW4gcGFyYW1zKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHBhcmFtcy52aWV3ICE9PSAnY29sb3InKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZUNvbG9ySW5wdXRQYXJhbXMocGFyYW1zKTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBzaG91bGRTdXBwb3J0QWxwaGEkMShhcmdzLnBhcmFtcylcbiAgICAgICAgICAgICAgICAgICAgPyBjb2xvckZyb21SZ2JhTnVtYmVyXG4gICAgICAgICAgICAgICAgICAgIDogY29sb3JGcm9tUmdiTnVtYmVyO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVxdWFsczogQ29sb3IuZXF1YWxzLFxuICAgICAgICAgICAgd3JpdGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVDb2xvck51bWJlcldyaXRlcihzaG91bGRTdXBwb3J0QWxwaGEkMShhcmdzLnBhcmFtcykpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1cHBvcnRzQWxwaGEgPSBzaG91bGRTdXBwb3J0QWxwaGEkMShhcmdzLnBhcmFtcyk7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZCA9ICdleHBhbmRlZCcgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5leHBhbmRlZCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IHBpY2tlciA9ICdwaWNrZXInIGluIGFyZ3MucGFyYW1zID8gYXJncy5wYXJhbXMucGlja2VyIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb2xvckNvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBleHBhbmRlZCAhPT0gbnVsbCAmJiBleHBhbmRlZCAhPT0gdm9pZCAwID8gZXhwYW5kZWQgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNyZWF0ZUZvcm1hdHRlciQxKHN1cHBvcnRzQWxwaGEpLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogQ29tcG9zaXRlQ29sb3JQYXJzZXIsXG4gICAgICAgICAgICAgICAgcGlja2VyTGF5b3V0OiBwaWNrZXIgIT09IG51bGwgJiYgcGlja2VyICE9PSB2b2lkIDAgPyBwaWNrZXIgOiAncG9wdXAnLFxuICAgICAgICAgICAgICAgIHN1cHBvcnRzQWxwaGE6IHN1cHBvcnRzQWxwaGEsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGFyZ3MudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBzaG91bGRTdXBwb3J0QWxwaGEoaW5pdGlhbFZhbHVlKSB7XG4gICAgICAgIHJldHVybiBDb2xvci5pc1JnYmFDb2xvck9iamVjdChpbml0aWFsVmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCBPYmplY3RDb2xvcklucHV0UGx1Z2luID0ge1xuICAgICAgICBpZDogJ2lucHV0LWNvbG9yLW9iamVjdCcsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICghQ29sb3IuaXNDb2xvck9iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlQ29sb3JJbnB1dFBhcmFtcyhwYXJhbXMpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChfYXJncykgPT4gY29sb3JGcm9tT2JqZWN0LFxuICAgICAgICAgICAgZXF1YWxzOiBDb2xvci5lcXVhbHMsXG4gICAgICAgICAgICB3cml0ZXI6IChhcmdzKSA9PiBjcmVhdGVDb2xvck9iamVjdFdyaXRlcihzaG91bGRTdXBwb3J0QWxwaGEoYXJncy5pbml0aWFsVmFsdWUpKSxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1cHBvcnRzQWxwaGEgPSBDb2xvci5pc1JnYmFDb2xvck9iamVjdChhcmdzLmluaXRpYWxWYWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZCA9ICdleHBhbmRlZCcgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5leHBhbmRlZCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IHBpY2tlciA9ICdwaWNrZXInIGluIGFyZ3MucGFyYW1zID8gYXJncy5wYXJhbXMucGlja2VyIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVyID0gc3VwcG9ydHNBbHBoYVxuICAgICAgICAgICAgICAgID8gY29sb3JUb0hleFJnYmFTdHJpbmdcbiAgICAgICAgICAgICAgICA6IGNvbG9yVG9IZXhSZ2JTdHJpbmc7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGV4cGFuZGVkICE9PSBudWxsICYmIGV4cGFuZGVkICE9PSB2b2lkIDAgPyBleHBhbmRlZCA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogQ29tcG9zaXRlQ29sb3JQYXJzZXIsXG4gICAgICAgICAgICAgICAgcGlja2VyTGF5b3V0OiBwaWNrZXIgIT09IG51bGwgJiYgcGlja2VyICE9PSB2b2lkIDAgPyBwaWNrZXIgOiAncG9wdXAnLFxuICAgICAgICAgICAgICAgIHN1cHBvcnRzQWxwaGE6IHN1cHBvcnRzQWxwaGEsXG4gICAgICAgICAgICAgICAgdmFsdWU6IGFyZ3MudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBTdHJpbmdDb2xvcklucHV0UGx1Z2luID0ge1xuICAgICAgICBpZDogJ2lucHV0LWNvbG9yLXN0cmluZycsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoJ3ZpZXcnIGluIHBhcmFtcyAmJiBwYXJhbXMudmlldyA9PT0gJ3RleHQnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBub3RhdGlvbiA9IGdldENvbG9yTm90YXRpb24odmFsdWUpO1xuICAgICAgICAgICAgaWYgKCFub3RhdGlvbikge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VDb2xvcklucHV0UGFyYW1zKHBhcmFtcyk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKF9hcmdzKSA9PiBjb2xvckZyb21TdHJpbmcsXG4gICAgICAgICAgICBlcXVhbHM6IENvbG9yLmVxdWFscyxcbiAgICAgICAgICAgIHdyaXRlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBub3RhdGlvbiA9IGdldENvbG9yTm90YXRpb24oYXJncy5pbml0aWFsVmFsdWUpO1xuICAgICAgICAgICAgICAgIGlmICghbm90YXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlQ29sb3JTdHJpbmdXcml0ZXIobm90YXRpb24pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5vdGF0aW9uID0gZ2V0Q29sb3JOb3RhdGlvbihhcmdzLmluaXRpYWxWYWx1ZSk7XG4gICAgICAgICAgICBpZiAoIW5vdGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgVHBFcnJvci5zaG91bGROZXZlckhhcHBlbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc3RyaW5naWZpZXIgPSBnZXRDb2xvclN0cmluZ2lmaWVyKG5vdGF0aW9uKTtcbiAgICAgICAgICAgIGNvbnN0IGV4cGFuZGVkID0gJ2V4cGFuZGVkJyBpbiBhcmdzLnBhcmFtcyA/IGFyZ3MucGFyYW1zLmV4cGFuZGVkIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgY29uc3QgcGlja2VyID0gJ3BpY2tlcicgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5waWNrZXIgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbG9yQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgZXhwYW5kZWQ6IGV4cGFuZGVkICE9PSBudWxsICYmIGV4cGFuZGVkICE9PSB2b2lkIDAgPyBleHBhbmRlZCA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogc3RyaW5naWZpZXIsXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBDb21wb3NpdGVDb2xvclBhcnNlcixcbiAgICAgICAgICAgICAgICBwaWNrZXJMYXlvdXQ6IHBpY2tlciAhPT0gbnVsbCAmJiBwaWNrZXIgIT09IHZvaWQgMCA/IHBpY2tlciA6ICdwb3B1cCcsXG4gICAgICAgICAgICAgICAgc3VwcG9ydHNBbHBoYTogaGFzQWxwaGFDb21wb25lbnQobm90YXRpb24pLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xhc3MgUG9pbnROZENvbnN0cmFpbnQge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMuY29tcG9uZW50cyA9IGNvbmZpZy5jb21wb25lbnRzO1xuICAgICAgICAgICAgdGhpcy5hc21fID0gY29uZmlnLmFzc2VtYmx5O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0cmFpbih2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgY29tcHMgPSB0aGlzLmFzbV9cbiAgICAgICAgICAgICAgICAudG9Db21wb25lbnRzKHZhbHVlKVxuICAgICAgICAgICAgICAgIC5tYXAoKGNvbXAsIGluZGV4KSA9PiB7IHZhciBfYSwgX2I7IHJldHVybiAoX2IgPSAoX2EgPSB0aGlzLmNvbXBvbmVudHNbaW5kZXhdKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29uc3RyYWluKGNvbXApKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBjb21wOyB9KTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFzbV8uZnJvbUNvbXBvbmVudHMoY29tcHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lJDUgPSBDbGFzc05hbWUoJ3BuZHR4dCcpO1xuICAgIGNsYXNzIFBvaW50TmRUZXh0VmlldyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnRleHRWaWV3cyA9IGNvbmZpZy50ZXh0Vmlld3M7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQgPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNSgpKTtcbiAgICAgICAgICAgIHRoaXMudGV4dFZpZXdzLmZvckVhY2goKHYpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBheGlzRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBheGlzRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ1KCdhJykpO1xuICAgICAgICAgICAgICAgIGF4aXNFbGVtLmFwcGVuZENoaWxkKHYuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGF4aXNFbGVtKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlQXhpc0NvbnRyb2xsZXIoZG9jLCBjb25maWcsIGluZGV4KSB7XG4gICAgICAgIHJldHVybiBuZXcgTnVtYmVyVGV4dENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICBhcnJheVBvc2l0aW9uOiBpbmRleCA9PT0gMCA/ICdmc3QnIDogaW5kZXggPT09IGNvbmZpZy5heGVzLmxlbmd0aCAtIDEgPyAnbHN0JyA6ICdtaWQnLFxuICAgICAgICAgICAgYmFzZVN0ZXA6IGNvbmZpZy5heGVzW2luZGV4XS5iYXNlU3RlcCxcbiAgICAgICAgICAgIHBhcnNlcjogY29uZmlnLnBhcnNlcixcbiAgICAgICAgICAgIHByb3BzOiBjb25maWcuYXhlc1tpbmRleF0udGV4dFByb3BzLFxuICAgICAgICAgICAgdmFsdWU6IGNyZWF0ZVZhbHVlKDAsIHtcbiAgICAgICAgICAgICAgICBjb25zdHJhaW50OiBjb25maWcuYXhlc1tpbmRleF0uY29uc3RyYWludCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdmlld1Byb3BzOiBjb25maWcudmlld1Byb3BzLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2xhc3MgUG9pbnROZFRleHRDb250cm9sbGVyIHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZpZXdQcm9wcyA9IGNvbmZpZy52aWV3UHJvcHM7XG4gICAgICAgICAgICB0aGlzLmFjc18gPSBjb25maWcuYXhlcy5tYXAoKF8sIGluZGV4KSA9PiBjcmVhdGVBeGlzQ29udHJvbGxlcihkb2MsIGNvbmZpZywgaW5kZXgpKTtcbiAgICAgICAgICAgIHRoaXMuYWNzXy5mb3JFYWNoKChjLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbm5lY3RWYWx1ZXMoe1xuICAgICAgICAgICAgICAgICAgICBwcmltYXJ5OiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBzZWNvbmRhcnk6IGMudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGZvcndhcmQ6IChwKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnLmFzc2VtYmx5LnRvQ29tcG9uZW50cyhwLnJhd1ZhbHVlKVtpbmRleF07XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkOiAocCwgcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tcHMgPSBjb25maWcuYXNzZW1ibHkudG9Db21wb25lbnRzKHAucmF3VmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29tcHNbaW5kZXhdID0gcy5yYXdWYWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25maWcuYXNzZW1ibHkuZnJvbUNvbXBvbmVudHMoY29tcHMpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgUG9pbnROZFRleHRWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIHRleHRWaWV3czogdGhpcy5hY3NfLm1hcCgoYWMpID0+IGFjLnZpZXcpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVTdGVwQ29uc3RyYWludChwYXJhbXMpIHtcbiAgICAgICAgaWYgKCdzdGVwJyBpbiBwYXJhbXMgJiYgIWlzRW1wdHkocGFyYW1zLnN0ZXApKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFN0ZXBDb25zdHJhaW50KHBhcmFtcy5zdGVwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlUmFuZ2VDb25zdHJhaW50KHBhcmFtcykge1xuICAgICAgICBpZiAoKCdtYXgnIGluIHBhcmFtcyAmJiAhaXNFbXB0eShwYXJhbXMubWF4KSkgfHxcbiAgICAgICAgICAgICgnbWluJyBpbiBwYXJhbXMgJiYgIWlzRW1wdHkocGFyYW1zLm1pbikpKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFJhbmdlQ29uc3RyYWludCh7XG4gICAgICAgICAgICAgICAgbWF4OiBwYXJhbXMubWF4LFxuICAgICAgICAgICAgICAgIG1pbjogcGFyYW1zLm1pbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50JDQocGFyYW1zKSB7XG4gICAgICAgIGNvbnN0IGNvbnN0cmFpbnRzID0gW107XG4gICAgICAgIGNvbnN0IHNjID0gY3JlYXRlU3RlcENvbnN0cmFpbnQocGFyYW1zKTtcbiAgICAgICAgaWYgKHNjKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKHNjKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByYyA9IGNyZWF0ZVJhbmdlQ29uc3RyYWludChwYXJhbXMpO1xuICAgICAgICBpZiAocmMpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2gocmMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGxjID0gY3JlYXRlTGlzdENvbnN0cmFpbnQocGFyYW1zLm9wdGlvbnMpO1xuICAgICAgICBpZiAobGMpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2gobGMpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ29tcG9zaXRlQ29uc3RyYWludChjb25zdHJhaW50cyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZpbmRSYW5nZShjb25zdHJhaW50KSB7XG4gICAgICAgIGNvbnN0IGMgPSBjb25zdHJhaW50ID8gZmluZENvbnN0cmFpbnQoY29uc3RyYWludCwgUmFuZ2VDb25zdHJhaW50KSA6IG51bGw7XG4gICAgICAgIGlmICghYykge1xuICAgICAgICAgICAgcmV0dXJuIFt1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFtjLm1pblZhbHVlLCBjLm1heFZhbHVlXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZXN0aW1hdGVTdWl0YWJsZVJhbmdlKGNvbnN0cmFpbnQpIHtcbiAgICAgICAgY29uc3QgW21pbiwgbWF4XSA9IGZpbmRSYW5nZShjb25zdHJhaW50KTtcbiAgICAgICAgcmV0dXJuIFttaW4gIT09IG51bGwgJiYgbWluICE9PSB2b2lkIDAgPyBtaW4gOiAwLCBtYXggIT09IG51bGwgJiYgbWF4ICE9PSB2b2lkIDAgPyBtYXggOiAxMDBdO1xuICAgIH1cbiAgICBjb25zdCBOdW1iZXJJbnB1dFBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdpbnB1dC1udW1iZXInLFxuICAgICAgICB0eXBlOiAnaW5wdXQnLFxuICAgICAgICBhY2NlcHQ6ICh2YWx1ZSwgcGFyYW1zKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBmb3JtYXQ6IHAub3B0aW9uYWwuZnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgbWF4OiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgICAgICBtaW46IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlTGlzdE9wdGlvbnMpLFxuICAgICAgICAgICAgICAgIHN0ZXA6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKF9hcmdzKSA9PiBudW1iZXJGcm9tVW5rbm93bixcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IChhcmdzKSA9PiBjcmVhdGVDb25zdHJhaW50JDQoYXJncy5wYXJhbXMpLFxuICAgICAgICAgICAgd3JpdGVyOiAoX2FyZ3MpID0+IHdyaXRlUHJpbWl0aXZlLFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJncy52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBhcmdzLmNvbnN0cmFpbnQ7XG4gICAgICAgICAgICBpZiAoYyAmJiBmaW5kQ29uc3RyYWludChjLCBMaXN0Q29uc3RyYWludCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExpc3RDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogKF9hID0gZmluZExpc3RJdGVtcyhjKSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW10sXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIgPSAoX2IgPSAoJ2Zvcm1hdCcgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5mb3JtYXQgOiB1bmRlZmluZWQpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoZ2V0U3VpdGFibGVEZWNpbWFsRGlnaXRzKGMsIHZhbHVlLnJhd1ZhbHVlKSk7XG4gICAgICAgICAgICBpZiAoYyAmJiBmaW5kQ29uc3RyYWludChjLCBSYW5nZUNvbnN0cmFpbnQpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgW21pbiwgbWF4XSA9IGVzdGltYXRlU3VpdGFibGVSYW5nZShjKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNsaWRlclRleHRDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgYmFzZVN0ZXA6IGdldEJhc2VTdGVwKGMpLFxuICAgICAgICAgICAgICAgICAgICBwYXJzZXI6IHBhcnNlTnVtYmVyLFxuICAgICAgICAgICAgICAgICAgICBzbGlkZXJQcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhWYWx1ZTogbWF4LFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluVmFsdWU6IG1pbixcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHRleHRQcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkcmFnZ2luZ1NjYWxlOiBnZXRTdWl0YWJsZURyYWdnaW5nU2NhbGUoYywgdmFsdWUucmF3VmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbmV3IE51bWJlclRleHRDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBiYXNlU3RlcDogZ2V0QmFzZVN0ZXAoYyksXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBwYXJzZU51bWJlcixcbiAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIGRyYWdnaW5nU2NhbGU6IGdldFN1aXRhYmxlRHJhZ2dpbmdTY2FsZShjLCB2YWx1ZS5yYXdWYWx1ZSksXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogZm9ybWF0dGVyLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNsYXNzIFBvaW50MmQge1xuICAgICAgICBjb25zdHJ1Y3Rvcih4ID0gMCwgeSA9IDApIHtcbiAgICAgICAgICAgIHRoaXMueCA9IHg7XG4gICAgICAgICAgICB0aGlzLnkgPSB5O1xuICAgICAgICB9XG4gICAgICAgIGdldENvbXBvbmVudHMoKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMueCwgdGhpcy55XTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgaXNPYmplY3Qob2JqKSB7XG4gICAgICAgICAgICBpZiAoaXNFbXB0eShvYmopKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgeCA9IG9iai54O1xuICAgICAgICAgICAgY29uc3QgeSA9IG9iai55O1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB4ICE9PSAnbnVtYmVyJyB8fCB0eXBlb2YgeSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZXF1YWxzKHYxLCB2Mikge1xuICAgICAgICAgICAgcmV0dXJuIHYxLnggPT09IHYyLnggJiYgdjEueSA9PT0gdjIueTtcbiAgICAgICAgfVxuICAgICAgICB0b09iamVjdCgpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgeDogdGhpcy54LFxuICAgICAgICAgICAgICAgIHk6IHRoaXMueSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgUG9pbnQyZEFzc2VtYmx5ID0ge1xuICAgICAgICB0b0NvbXBvbmVudHM6IChwKSA9PiBwLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgZnJvbUNvbXBvbmVudHM6IChjb21wcykgPT4gbmV3IFBvaW50MmQoLi4uY29tcHMpLFxuICAgIH07XG5cbiAgICBjb25zdCBjbGFzc05hbWUkNCA9IENsYXNzTmFtZSgncDJkJyk7XG4gICAgY2xhc3MgUG9pbnQyZFZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDQoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgYmluZFZhbHVlKGNvbmZpZy5leHBhbmRlZCwgdmFsdWVUb0NsYXNzTmFtZSh0aGlzLmVsZW1lbnQsIGNsYXNzTmFtZSQ0KHVuZGVmaW5lZCwgJ2V4cGFuZGVkJykpKTtcbiAgICAgICAgICAgIGNvbnN0IGhlYWRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgaGVhZEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNCgnaCcpKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChoZWFkRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBidXR0b25FbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xuICAgICAgICAgICAgYnV0dG9uRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ0KCdiJykpO1xuICAgICAgICAgICAgYnV0dG9uRWxlbS5hcHBlbmRDaGlsZChjcmVhdGVTdmdJY29uRWxlbWVudChkb2MsICdwMmRwYWQnKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmREaXNhYmxlZChidXR0b25FbGVtKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmFwcGVuZENoaWxkKGJ1dHRvbkVsZW0pO1xuICAgICAgICAgICAgdGhpcy5idXR0b25FbGVtZW50ID0gYnV0dG9uRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHRleHRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGV4dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkNCgndCcpKTtcbiAgICAgICAgICAgIGhlYWRFbGVtLmFwcGVuZENoaWxkKHRleHRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudGV4dEVsZW1lbnQgPSB0ZXh0RWxlbTtcbiAgICAgICAgICAgIGlmIChjb25maWcucGlja2VyTGF5b3V0ID09PSAnaW5saW5lJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBpY2tlckVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICAgICAgcGlja2VyRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQ0KCdwJykpO1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZChwaWNrZXJFbGVtKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBpY2tlckVsZW1lbnQgPSBwaWNrZXJFbGVtO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5waWNrZXJFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSQzID0gQ2xhc3NOYW1lKCdwMmRwJyk7XG4gICAgY2xhc3MgUG9pbnQyZFBpY2tlclZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbkZvbGRhYmxlQ2hhbmdlXyA9IHRoaXMub25Gb2xkYWJsZUNoYW5nZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZUNoYW5nZV8gPSB0aGlzLm9uVmFsdWVDaGFuZ2VfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmludmVydHNZXyA9IGNvbmZpZy5pbnZlcnRzWTtcbiAgICAgICAgICAgIHRoaXMubWF4VmFsdWVfID0gY29uZmlnLm1heFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDMoKSk7XG4gICAgICAgICAgICBpZiAoY29uZmlnLmxheW91dCA9PT0gJ3BvcHVwJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQzKHVuZGVmaW5lZCwgJ3AnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYWRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgcGFkRWxlbS5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSQzKCdwJykpO1xuICAgICAgICAgICAgY29uZmlnLnZpZXdQcm9wcy5iaW5kVGFiSW5kZXgocGFkRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQocGFkRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnBhZEVsZW1lbnQgPSBwYWRFbGVtO1xuICAgICAgICAgICAgY29uc3Qgc3ZnRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAnc3ZnJyk7XG4gICAgICAgICAgICBzdmdFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDMoJ2cnKSk7XG4gICAgICAgICAgICB0aGlzLnBhZEVsZW1lbnQuYXBwZW5kQ2hpbGQoc3ZnRWxlbSk7XG4gICAgICAgICAgICB0aGlzLnN2Z0VsZW1fID0gc3ZnRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHhBeGlzRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAnbGluZScpO1xuICAgICAgICAgICAgeEF4aXNFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDMoJ2F4JykpO1xuICAgICAgICAgICAgeEF4aXNFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd4MScsICcwJyk7XG4gICAgICAgICAgICB4QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3kxJywgJzUwJScpO1xuICAgICAgICAgICAgeEF4aXNFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd4MicsICcxMDAlJyk7XG4gICAgICAgICAgICB4QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3kyJywgJzUwJScpO1xuICAgICAgICAgICAgdGhpcy5zdmdFbGVtXy5hcHBlbmRDaGlsZCh4QXhpc0VsZW0pO1xuICAgICAgICAgICAgY29uc3QgeUF4aXNFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnROUyhTVkdfTlMsICdsaW5lJyk7XG4gICAgICAgICAgICB5QXhpc0VsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMygnYXgnKSk7XG4gICAgICAgICAgICB5QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3gxJywgJzUwJScpO1xuICAgICAgICAgICAgeUF4aXNFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd5MScsICcwJyk7XG4gICAgICAgICAgICB5QXhpc0VsZW0uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3gyJywgJzUwJScpO1xuICAgICAgICAgICAgeUF4aXNFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd5MicsICcxMDAlJyk7XG4gICAgICAgICAgICB0aGlzLnN2Z0VsZW1fLmFwcGVuZENoaWxkKHlBeGlzRWxlbSk7XG4gICAgICAgICAgICBjb25zdCBsaW5lRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAnbGluZScpO1xuICAgICAgICAgICAgbGluZUVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMygnbCcpKTtcbiAgICAgICAgICAgIGxpbmVFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd4MScsICc1MCUnKTtcbiAgICAgICAgICAgIGxpbmVFbGVtLnNldEF0dHJpYnV0ZU5TKG51bGwsICd5MScsICc1MCUnKTtcbiAgICAgICAgICAgIHRoaXMuc3ZnRWxlbV8uYXBwZW5kQ2hpbGQobGluZUVsZW0pO1xuICAgICAgICAgICAgdGhpcy5saW5lRWxlbV8gPSBsaW5lRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IG1hcmtlckVsZW0gPSBkb2MuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBtYXJrZXJFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDMoJ20nKSk7XG4gICAgICAgICAgICB0aGlzLnBhZEVsZW1lbnQuYXBwZW5kQ2hpbGQobWFya2VyRWxlbSk7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fID0gbWFya2VyRWxlbTtcbiAgICAgICAgICAgIGNvbmZpZy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVDaGFuZ2VfKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgYWxsRm9jdXNhYmxlRWxlbWVudHMoKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMucGFkRWxlbWVudF07XG4gICAgICAgIH1cbiAgICAgICAgdXBkYXRlXygpIHtcbiAgICAgICAgICAgIGNvbnN0IFt4LCB5XSA9IHRoaXMudmFsdWUucmF3VmFsdWUuZ2V0Q29tcG9uZW50cygpO1xuICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXhWYWx1ZV87XG4gICAgICAgICAgICBjb25zdCBweCA9IG1hcFJhbmdlKHgsIC1tYXgsICttYXgsIDAsIDEwMCk7XG4gICAgICAgICAgICBjb25zdCBweSA9IG1hcFJhbmdlKHksIC1tYXgsICttYXgsIDAsIDEwMCk7XG4gICAgICAgICAgICBjb25zdCBpcHkgPSB0aGlzLmludmVydHNZXyA/IDEwMCAtIHB5IDogcHk7XG4gICAgICAgICAgICB0aGlzLmxpbmVFbGVtXy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneDInLCBgJHtweH0lYCk7XG4gICAgICAgICAgICB0aGlzLmxpbmVFbGVtXy5zZXRBdHRyaWJ1dGVOUyhudWxsLCAneTInLCBgJHtpcHl9JWApO1xuICAgICAgICAgICAgdGhpcy5tYXJrZXJFbGVtXy5zdHlsZS5sZWZ0ID0gYCR7cHh9JWA7XG4gICAgICAgICAgICB0aGlzLm1hcmtlckVsZW1fLnN0eWxlLnRvcCA9IGAke2lweX0lYDtcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlQ2hhbmdlXygpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIG9uRm9sZGFibGVDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjb21wdXRlT2Zmc2V0KGV2LCBiYXNlU3RlcHMsIGludmVydHNZKSB7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwc1swXSwgZ2V0SG9yaXpvbnRhbFN0ZXBLZXlzKGV2KSksXG4gICAgICAgICAgICBnZXRTdGVwRm9yS2V5KGJhc2VTdGVwc1sxXSwgZ2V0VmVydGljYWxTdGVwS2V5cyhldikpICogKGludmVydHNZID8gMSA6IC0xKSxcbiAgICAgICAgXTtcbiAgICB9XG4gICAgY2xhc3MgUG9pbnQyZFBpY2tlckNvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblBhZEtleURvd25fID0gdGhpcy5vblBhZEtleURvd25fLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUGFkS2V5VXBfID0gdGhpcy5vblBhZEtleVVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBvaW50ZXJEb3duXyA9IHRoaXMub25Qb2ludGVyRG93bl8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25Qb2ludGVyTW92ZV8gPSB0aGlzLm9uUG9pbnRlck1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9pbnRlclVwXyA9IHRoaXMub25Qb2ludGVyVXBfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy5iYXNlU3RlcHNfID0gY29uZmlnLmJhc2VTdGVwcztcbiAgICAgICAgICAgIHRoaXMubWF4VmFsdWVfID0gY29uZmlnLm1heFZhbHVlO1xuICAgICAgICAgICAgdGhpcy5pbnZlcnRzWV8gPSBjb25maWcuaW52ZXJ0c1k7XG4gICAgICAgICAgICB0aGlzLnZpZXcgPSBuZXcgUG9pbnQyZFBpY2tlclZpZXcoZG9jLCB7XG4gICAgICAgICAgICAgICAgaW52ZXJ0c1k6IHRoaXMuaW52ZXJ0c1lfLFxuICAgICAgICAgICAgICAgIGxheW91dDogY29uZmlnLmxheW91dCxcbiAgICAgICAgICAgICAgICBtYXhWYWx1ZTogdGhpcy5tYXhWYWx1ZV8sXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUsXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiB0aGlzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfID0gbmV3IFBvaW50ZXJIYW5kbGVyKHRoaXMudmlldy5wYWRFbGVtZW50KTtcbiAgICAgICAgICAgIHRoaXMucHRIYW5kbGVyXy5lbWl0dGVyLm9uKCdkb3duJywgdGhpcy5vblBvaW50ZXJEb3duXyk7XG4gICAgICAgICAgICB0aGlzLnB0SGFuZGxlcl8uZW1pdHRlci5vbignbW92ZScsIHRoaXMub25Qb2ludGVyTW92ZV8pO1xuICAgICAgICAgICAgdGhpcy5wdEhhbmRsZXJfLmVtaXR0ZXIub24oJ3VwJywgdGhpcy5vblBvaW50ZXJVcF8pO1xuICAgICAgICAgICAgdGhpcy52aWV3LnBhZEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsIHRoaXMub25QYWRLZXlEb3duXyk7XG4gICAgICAgICAgICB0aGlzLnZpZXcucGFkRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXl1cCcsIHRoaXMub25QYWRLZXlVcF8pO1xuICAgICAgICB9XG4gICAgICAgIGhhbmRsZVBvaW50ZXJFdmVudF8oZCwgb3B0cykge1xuICAgICAgICAgICAgaWYgKCFkLnBvaW50KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbWF4ID0gdGhpcy5tYXhWYWx1ZV87XG4gICAgICAgICAgICBjb25zdCBweCA9IG1hcFJhbmdlKGQucG9pbnQueCwgMCwgZC5ib3VuZHMud2lkdGgsIC1tYXgsICttYXgpO1xuICAgICAgICAgICAgY29uc3QgcHkgPSBtYXBSYW5nZSh0aGlzLmludmVydHNZXyA/IGQuYm91bmRzLmhlaWdodCAtIGQucG9pbnQueSA6IGQucG9pbnQueSwgMCwgZC5ib3VuZHMuaGVpZ2h0LCAtbWF4LCArbWF4KTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUuc2V0UmF3VmFsdWUobmV3IFBvaW50MmQocHgsIHB5KSwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgb25Qb2ludGVyRG93bl8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsYXN0OiBmYWxzZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9pbnRlck1vdmVfKGV2KSB7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZVBvaW50ZXJFdmVudF8oZXYuZGF0YSwge1xuICAgICAgICAgICAgICAgIGZvcmNlRW1pdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbGFzdDogZmFsc2UsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBvaW50ZXJVcF8oZXYpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlUG9pbnRlckV2ZW50Xyhldi5kYXRhLCB7XG4gICAgICAgICAgICAgICAgZm9yY2VFbWl0OiB0cnVlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IHRydWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBvblBhZEtleURvd25fKGV2KSB7XG4gICAgICAgICAgICBpZiAoaXNBcnJvd0tleShldi5rZXkpKSB7XG4gICAgICAgICAgICAgICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IFtkeCwgZHldID0gY29tcHV0ZU9mZnNldChldiwgdGhpcy5iYXNlU3RlcHNfLCB0aGlzLmludmVydHNZXyk7XG4gICAgICAgICAgICBpZiAoZHggPT09IDAgJiYgZHkgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKG5ldyBQb2ludDJkKHRoaXMudmFsdWUucmF3VmFsdWUueCArIGR4LCB0aGlzLnZhbHVlLnJhd1ZhbHVlLnkgKyBkeSksIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGxhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgb25QYWRLZXlVcF8oZXYpIHtcbiAgICAgICAgICAgIGNvbnN0IFtkeCwgZHldID0gY29tcHV0ZU9mZnNldChldiwgdGhpcy5iYXNlU3RlcHNfLCB0aGlzLmludmVydHNZXyk7XG4gICAgICAgICAgICBpZiAoZHggPT09IDAgJiYgZHkgPT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnNldFJhd1ZhbHVlKHRoaXMudmFsdWUucmF3VmFsdWUsIHtcbiAgICAgICAgICAgICAgICBmb3JjZUVtaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgbGFzdDogdHJ1ZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xhc3MgUG9pbnQyZENvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIHRoaXMub25Qb3B1cENoaWxkQmx1cl8gPSB0aGlzLm9uUG9wdXBDaGlsZEJsdXJfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUG9wdXBDaGlsZEtleWRvd25fID0gdGhpcy5vblBvcHVwQ2hpbGRLZXlkb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblBhZEJ1dHRvbkJsdXJfID0gdGhpcy5vblBhZEJ1dHRvbkJsdXJfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uUGFkQnV0dG9uQ2xpY2tfID0gdGhpcy5vblBhZEJ1dHRvbkNsaWNrXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMuZm9sZGFibGVfID0gRm9sZGFibGUuY3JlYXRlKGNvbmZpZy5leHBhbmRlZCk7XG4gICAgICAgICAgICB0aGlzLnBvcENfID1cbiAgICAgICAgICAgICAgICBjb25maWcucGlja2VyTGF5b3V0ID09PSAncG9wdXAnXG4gICAgICAgICAgICAgICAgICAgID8gbmV3IFBvcHVwQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IHBhZEMgPSBuZXcgUG9pbnQyZFBpY2tlckNvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgYmFzZVN0ZXBzOiBbY29uZmlnLmF4ZXNbMF0uYmFzZVN0ZXAsIGNvbmZpZy5heGVzWzFdLmJhc2VTdGVwXSxcbiAgICAgICAgICAgICAgICBpbnZlcnRzWTogY29uZmlnLmludmVydHNZLFxuICAgICAgICAgICAgICAgIGxheW91dDogY29uZmlnLnBpY2tlckxheW91dCxcbiAgICAgICAgICAgICAgICBtYXhWYWx1ZTogY29uZmlnLm1heFZhbHVlLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBhZEMudmlldy5hbGxGb2N1c2FibGVFbGVtZW50cy5mb3JFYWNoKChlbGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5vblBvcHVwQ2hpbGRCbHVyXyk7XG4gICAgICAgICAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgdGhpcy5vblBvcHVwQ2hpbGRLZXlkb3duXyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMucGlja2VyQ18gPSBwYWRDO1xuICAgICAgICAgICAgdGhpcy50ZXh0Q18gPSBuZXcgUG9pbnROZFRleHRDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGFzc2VtYmx5OiBQb2ludDJkQXNzZW1ibHksXG4gICAgICAgICAgICAgICAgYXhlczogY29uZmlnLmF4ZXMsXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBjb25maWcucGFyc2VyLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBQb2ludDJkVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogdGhpcy5mb2xkYWJsZV8udmFsdWUoJ2V4cGFuZGVkJyksXG4gICAgICAgICAgICAgICAgcGlja2VyTGF5b3V0OiBjb25maWcucGlja2VyTGF5b3V0LFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMudmlldy50ZXh0RWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLnRleHRDXy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgKF9hID0gdGhpcy52aWV3LmJ1dHRvbkVsZW1lbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5hZGRFdmVudExpc3RlbmVyKCdibHVyJywgdGhpcy5vblBhZEJ1dHRvbkJsdXJfKTtcbiAgICAgICAgICAgIChfYiA9IHRoaXMudmlldy5idXR0b25FbGVtZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCB0aGlzLm9uUGFkQnV0dG9uQ2xpY2tfKTtcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcENfKSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3LmVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5wb3BDXy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMucG9wQ18udmlldy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMucGlja2VyQ18udmlldy5lbGVtZW50KTtcbiAgICAgICAgICAgICAgICBjb25uZWN0VmFsdWVzKHtcbiAgICAgICAgICAgICAgICAgICAgcHJpbWFyeTogdGhpcy5mb2xkYWJsZV8udmFsdWUoJ2V4cGFuZGVkJyksXG4gICAgICAgICAgICAgICAgICAgIHNlY29uZGFyeTogdGhpcy5wb3BDXy5zaG93cyxcbiAgICAgICAgICAgICAgICAgICAgZm9yd2FyZDogKHApID0+IHAucmF3VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGJhY2t3YXJkOiAoXywgcykgPT4gcy5yYXdWYWx1ZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMudmlldy5waWNrZXJFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgdGhpcy52aWV3LnBpY2tlckVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5waWNrZXJDXy52aWV3LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGJpbmRGb2xkYWJsZSh0aGlzLmZvbGRhYmxlXywgdGhpcy52aWV3LnBpY2tlckVsZW1lbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uUGFkQnV0dG9uQmx1cl8oZSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBvcENfKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZWxlbSA9IHRoaXMudmlldy5lbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgbmV4dFRhcmdldCA9IGZvcmNlQ2FzdChlLnJlbGF0ZWRUYXJnZXQpO1xuICAgICAgICAgICAgaWYgKCFuZXh0VGFyZ2V0IHx8ICFlbGVtLmNvbnRhaW5zKG5leHRUYXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BDXy5zaG93cy5yYXdWYWx1ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uUGFkQnV0dG9uQ2xpY2tfKCkge1xuICAgICAgICAgICAgdGhpcy5mb2xkYWJsZV8uc2V0KCdleHBhbmRlZCcsICF0aGlzLmZvbGRhYmxlXy5nZXQoJ2V4cGFuZGVkJykpO1xuICAgICAgICAgICAgaWYgKHRoaXMuZm9sZGFibGVfLmdldCgnZXhwYW5kZWQnKSkge1xuICAgICAgICAgICAgICAgIHRoaXMucGlja2VyQ18udmlldy5hbGxGb2N1c2FibGVFbGVtZW50c1swXS5mb2N1cygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uUG9wdXBDaGlsZEJsdXJfKGV2KSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMucG9wQ18pIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlbGVtID0gdGhpcy5wb3BDXy52aWV3LmVsZW1lbnQ7XG4gICAgICAgICAgICBjb25zdCBuZXh0VGFyZ2V0ID0gZmluZE5leHRUYXJnZXQoZXYpO1xuICAgICAgICAgICAgaWYgKG5leHRUYXJnZXQgJiYgZWxlbS5jb250YWlucyhuZXh0VGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXh0VGFyZ2V0ICYmXG4gICAgICAgICAgICAgICAgbmV4dFRhcmdldCA9PT0gdGhpcy52aWV3LmJ1dHRvbkVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICAhc3VwcG9ydHNUb3VjaChlbGVtLm93bmVyRG9jdW1lbnQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wb3BDXy5zaG93cy5yYXdWYWx1ZSA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIG9uUG9wdXBDaGlsZEtleWRvd25fKGV2KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wb3BDXykge1xuICAgICAgICAgICAgICAgIGlmIChldi5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9wQ18uc2hvd3MucmF3VmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnZpZXcucGlja2VyRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIGlmIChldi5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlldy5idXR0b25FbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gcG9pbnQyZEZyb21Vbmtub3duKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBQb2ludDJkLmlzT2JqZWN0KHZhbHVlKVxuICAgICAgICAgICAgPyBuZXcgUG9pbnQyZCh2YWx1ZS54LCB2YWx1ZS55KVxuICAgICAgICAgICAgOiBuZXcgUG9pbnQyZCgpO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3cml0ZVBvaW50MmQodGFyZ2V0LCB2YWx1ZSkge1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgneCcsIHZhbHVlLngpO1xuICAgICAgICB0YXJnZXQud3JpdGVQcm9wZXJ0eSgneScsIHZhbHVlLnkpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQkMihwYXJhbXMpIHtcbiAgICAgICAgaWYgKCFwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29uc3RyYWludHMgPSBbXTtcbiAgICAgICAgaWYgKCFpc0VtcHR5KHBhcmFtcy5zdGVwKSkge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChuZXcgU3RlcENvbnN0cmFpbnQocGFyYW1zLnN0ZXApKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRW1wdHkocGFyYW1zLm1heCkgfHwgIWlzRW1wdHkocGFyYW1zLm1pbikpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2gobmV3IFJhbmdlQ29uc3RyYWludCh7XG4gICAgICAgICAgICAgICAgbWF4OiBwYXJhbXMubWF4LFxuICAgICAgICAgICAgICAgIG1pbjogcGFyYW1zLm1pbixcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENvbXBvc2l0ZUNvbnN0cmFpbnQoY29uc3RyYWludHMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50JDMocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnROZENvbnN0cmFpbnQoe1xuICAgICAgICAgICAgYXNzZW1ibHk6IFBvaW50MmRBc3NlbWJseSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICAgICAgICBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50JDIoJ3gnIGluIHBhcmFtcyA/IHBhcmFtcy54IDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50JDIoJ3knIGluIHBhcmFtcyA/IHBhcmFtcy55IDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRTdWl0YWJsZU1heERpbWVuc2lvblZhbHVlKGNvbnN0cmFpbnQsIHJhd1ZhbHVlKSB7XG4gICAgICAgIGNvbnN0IHJjID0gY29uc3RyYWludCAmJiBmaW5kQ29uc3RyYWludChjb25zdHJhaW50LCBSYW5nZUNvbnN0cmFpbnQpO1xuICAgICAgICBpZiAocmMpIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1heChNYXRoLmFicyhyYy5taW5WYWx1ZSB8fCAwKSwgTWF0aC5hYnMocmMubWF4VmFsdWUgfHwgMCkpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0ZXAgPSBnZXRCYXNlU3RlcChjb25zdHJhaW50KTtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KE1hdGguYWJzKHN0ZXApICogMTAsIE1hdGguYWJzKHJhd1ZhbHVlKSAqIDEwKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U3VpdGFibGVNYXhWYWx1ZShpbml0aWFsVmFsdWUsIGNvbnN0cmFpbnQpIHtcbiAgICAgICAgY29uc3QgeGMgPSBjb25zdHJhaW50IGluc3RhbmNlb2YgUG9pbnROZENvbnN0cmFpbnRcbiAgICAgICAgICAgID8gY29uc3RyYWludC5jb21wb25lbnRzWzBdXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgeWMgPSBjb25zdHJhaW50IGluc3RhbmNlb2YgUG9pbnROZENvbnN0cmFpbnRcbiAgICAgICAgICAgID8gY29uc3RyYWludC5jb21wb25lbnRzWzFdXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgeHIgPSBnZXRTdWl0YWJsZU1heERpbWVuc2lvblZhbHVlKHhjLCBpbml0aWFsVmFsdWUueCk7XG4gICAgICAgIGNvbnN0IHlyID0gZ2V0U3VpdGFibGVNYXhEaW1lbnNpb25WYWx1ZSh5YywgaW5pdGlhbFZhbHVlLnkpO1xuICAgICAgICByZXR1cm4gTWF0aC5tYXgoeHIsIHlyKTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQXhpcyQyKGluaXRpYWxWYWx1ZSwgY29uc3RyYWludCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYmFzZVN0ZXA6IGdldEJhc2VTdGVwKGNvbnN0cmFpbnQpLFxuICAgICAgICAgICAgY29uc3RyYWludDogY29uc3RyYWludCxcbiAgICAgICAgICAgIHRleHRQcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlKGNvbnN0cmFpbnQsIGluaXRpYWxWYWx1ZSksXG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBjcmVhdGVOdW1iZXJGb3JtYXR0ZXIoZ2V0U3VpdGFibGVEZWNpbWFsRGlnaXRzKGNvbnN0cmFpbnQsIGluaXRpYWxWYWx1ZSkpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNob3VsZEludmVydFkocGFyYW1zKSB7XG4gICAgICAgIGlmICghKCd5JyBpbiBwYXJhbXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgeVBhcmFtcyA9IHBhcmFtcy55O1xuICAgICAgICBpZiAoIXlQYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJ2ludmVydGVkJyBpbiB5UGFyYW1zID8gISF5UGFyYW1zLmludmVydGVkIDogZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IFBvaW50MmRJbnB1dFBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdpbnB1dC1wb2ludDJkJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKCFQb2ludDJkLmlzT2JqZWN0KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogcC5vcHRpb25hbC5ib29sZWFuLFxuICAgICAgICAgICAgICAgIHBpY2tlcjogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQaWNrZXJMYXlvdXQpLFxuICAgICAgICAgICAgICAgIHg6IHAub3B0aW9uYWwuY3VzdG9tKHBhcnNlUG9pbnREaW1lbnNpb25QYXJhbXMpLFxuICAgICAgICAgICAgICAgIHk6IHAub3B0aW9uYWwub2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgaW52ZXJ0ZWQ6IHAub3B0aW9uYWwuYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgICAgbWF4OiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgbWluOiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgICAgICAgICAgc3RlcDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IHBvaW50MmRGcm9tVW5rbm93bixcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IChhcmdzKSA9PiBjcmVhdGVDb25zdHJhaW50JDMoYXJncy5wYXJhbXMpLFxuICAgICAgICAgICAgZXF1YWxzOiBQb2ludDJkLmVxdWFscyxcbiAgICAgICAgICAgIHdyaXRlcjogKF9hcmdzKSA9PiB3cml0ZVBvaW50MmQsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkb2MgPSBhcmdzLmRvY3VtZW50O1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhcmdzLnZhbHVlO1xuICAgICAgICAgICAgY29uc3QgYyA9IGFyZ3MuY29uc3RyYWludDtcbiAgICAgICAgICAgIGlmICghKGMgaW5zdGFuY2VvZiBQb2ludE5kQ29uc3RyYWludCkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLnNob3VsZE5ldmVySGFwcGVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBleHBhbmRlZCA9ICdleHBhbmRlZCcgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5leHBhbmRlZCA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IHBpY2tlciA9ICdwaWNrZXInIGluIGFyZ3MucGFyYW1zID8gYXJncy5wYXJhbXMucGlja2VyIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQb2ludDJkQ29udHJvbGxlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBheGVzOiBbXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUF4aXMkMih2YWx1ZS5yYXdWYWx1ZS54LCBjLmNvbXBvbmVudHNbMF0pLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVBeGlzJDIodmFsdWUucmF3VmFsdWUueSwgYy5jb21wb25lbnRzWzFdKSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBleHBhbmRlZCAhPT0gbnVsbCAmJiBleHBhbmRlZCAhPT0gdm9pZCAwID8gZXhwYW5kZWQgOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBpbnZlcnRzWTogc2hvdWxkSW52ZXJ0WShhcmdzLnBhcmFtcyksXG4gICAgICAgICAgICAgICAgbWF4VmFsdWU6IGdldFN1aXRhYmxlTWF4VmFsdWUodmFsdWUucmF3VmFsdWUsIGMpLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogcGFyc2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgcGlja2VyTGF5b3V0OiBwaWNrZXIgIT09IG51bGwgJiYgcGlja2VyICE9PSB2b2lkIDAgPyBwaWNrZXIgOiAncG9wdXAnLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNsYXNzIFBvaW50M2Qge1xuICAgICAgICBjb25zdHJ1Y3Rvcih4ID0gMCwgeSA9IDAsIHogPSAwKSB7XG4gICAgICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICAgICAgdGhpcy55ID0geTtcbiAgICAgICAgICAgIHRoaXMueiA9IHo7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0Q29tcG9uZW50cygpIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy54LCB0aGlzLnksIHRoaXMuel07XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGlzT2JqZWN0KG9iaikge1xuICAgICAgICAgICAgaWYgKGlzRW1wdHkob2JqKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHggPSBvYmoueDtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBvYmoueTtcbiAgICAgICAgICAgIGNvbnN0IHogPSBvYmouejtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgeCAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgeSAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgeiAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZXF1YWxzKHYxLCB2Mikge1xuICAgICAgICAgICAgcmV0dXJuIHYxLnggPT09IHYyLnggJiYgdjEueSA9PT0gdjIueSAmJiB2MS56ID09PSB2Mi56O1xuICAgICAgICB9XG4gICAgICAgIHRvT2JqZWN0KCkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB4OiB0aGlzLngsXG4gICAgICAgICAgICAgICAgeTogdGhpcy55LFxuICAgICAgICAgICAgICAgIHo6IHRoaXMueixcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgUG9pbnQzZEFzc2VtYmx5ID0ge1xuICAgICAgICB0b0NvbXBvbmVudHM6IChwKSA9PiBwLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgZnJvbUNvbXBvbmVudHM6IChjb21wcykgPT4gbmV3IFBvaW50M2QoLi4uY29tcHMpLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBwb2ludDNkRnJvbVVua25vd24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFBvaW50M2QuaXNPYmplY3QodmFsdWUpXG4gICAgICAgICAgICA/IG5ldyBQb2ludDNkKHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnopXG4gICAgICAgICAgICA6IG5ldyBQb2ludDNkKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdyaXRlUG9pbnQzZCh0YXJnZXQsIHZhbHVlKSB7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd4JywgdmFsdWUueCk7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd5JywgdmFsdWUueSk7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd6JywgdmFsdWUueik7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCQxKHBhcmFtcykge1xuICAgICAgICBpZiAoIXBhcmFtcykge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjb25zdHJhaW50cyA9IFtdO1xuICAgICAgICBpZiAoIWlzRW1wdHkocGFyYW1zLnN0ZXApKSB7XG4gICAgICAgICAgICBjb25zdHJhaW50cy5wdXNoKG5ldyBTdGVwQ29uc3RyYWludChwYXJhbXMuc3RlcCkpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghaXNFbXB0eShwYXJhbXMubWF4KSB8fCAhaXNFbXB0eShwYXJhbXMubWluKSkge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChuZXcgUmFuZ2VDb25zdHJhaW50KHtcbiAgICAgICAgICAgICAgICBtYXg6IHBhcmFtcy5tYXgsXG4gICAgICAgICAgICAgICAgbWluOiBwYXJhbXMubWluLFxuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgQ29tcG9zaXRlQ29uc3RyYWludChjb25zdHJhaW50cyk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUNvbnN0cmFpbnQkMihwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQb2ludE5kQ29uc3RyYWludCh7XG4gICAgICAgICAgICBhc3NlbWJseTogUG9pbnQzZEFzc2VtYmx5LFxuICAgICAgICAgICAgY29tcG9uZW50czogW1xuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQkMSgneCcgaW4gcGFyYW1zID8gcGFyYW1zLnggOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQkMSgneScgaW4gcGFyYW1zID8gcGFyYW1zLnkgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQkMSgneicgaW4gcGFyYW1zID8gcGFyYW1zLnogOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUF4aXMkMShpbml0aWFsVmFsdWUsIGNvbnN0cmFpbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJhc2VTdGVwOiBnZXRCYXNlU3RlcChjb25zdHJhaW50KSxcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IGNvbnN0cmFpbnQsXG4gICAgICAgICAgICB0ZXh0UHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgIGRyYWdnaW5nU2NhbGU6IGdldFN1aXRhYmxlRHJhZ2dpbmdTY2FsZShjb25zdHJhaW50LCBpbml0aWFsVmFsdWUpLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY3JlYXRlTnVtYmVyRm9ybWF0dGVyKGdldFN1aXRhYmxlRGVjaW1hbERpZ2l0cyhjb25zdHJhaW50LCBpbml0aWFsVmFsdWUpKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBQb2ludDNkSW5wdXRQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnaW5wdXQtcG9pbnQzZCcsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICghUG9pbnQzZC5pc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgeDogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyksXG4gICAgICAgICAgICAgICAgeTogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyksXG4gICAgICAgICAgICAgICAgejogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IHBvaW50M2RGcm9tVW5rbm93bixcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IChhcmdzKSA9PiBjcmVhdGVDb25zdHJhaW50JDIoYXJncy5wYXJhbXMpLFxuICAgICAgICAgICAgZXF1YWxzOiBQb2ludDNkLmVxdWFscyxcbiAgICAgICAgICAgIHdyaXRlcjogKF9hcmdzKSA9PiB3cml0ZVBvaW50M2QsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ3MudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBjID0gYXJncy5jb25zdHJhaW50O1xuICAgICAgICAgICAgaWYgKCEoYyBpbnN0YW5jZW9mIFBvaW50TmRDb25zdHJhaW50KSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9pbnROZFRleHRDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBhc3NlbWJseTogUG9pbnQzZEFzc2VtYmx5LFxuICAgICAgICAgICAgICAgIGF4ZXM6IFtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlQXhpcyQxKHZhbHVlLnJhd1ZhbHVlLngsIGMuY29tcG9uZW50c1swXSksXG4gICAgICAgICAgICAgICAgICAgIGNyZWF0ZUF4aXMkMSh2YWx1ZS5yYXdWYWx1ZS55LCBjLmNvbXBvbmVudHNbMV0pLFxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVBeGlzJDEodmFsdWUucmF3VmFsdWUueiwgYy5jb21wb25lbnRzWzJdKSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogcGFyc2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xhc3MgUG9pbnQ0ZCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHggPSAwLCB5ID0gMCwgeiA9IDAsIHcgPSAwKSB7XG4gICAgICAgICAgICB0aGlzLnggPSB4O1xuICAgICAgICAgICAgdGhpcy55ID0geTtcbiAgICAgICAgICAgIHRoaXMueiA9IHo7XG4gICAgICAgICAgICB0aGlzLncgPSB3O1xuICAgICAgICB9XG4gICAgICAgIGdldENvbXBvbmVudHMoKSB7XG4gICAgICAgICAgICByZXR1cm4gW3RoaXMueCwgdGhpcy55LCB0aGlzLnosIHRoaXMud107XG4gICAgICAgIH1cbiAgICAgICAgc3RhdGljIGlzT2JqZWN0KG9iaikge1xuICAgICAgICAgICAgaWYgKGlzRW1wdHkob2JqKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHggPSBvYmoueDtcbiAgICAgICAgICAgIGNvbnN0IHkgPSBvYmoueTtcbiAgICAgICAgICAgIGNvbnN0IHogPSBvYmouejtcbiAgICAgICAgICAgIGNvbnN0IHcgPSBvYmoudztcbiAgICAgICAgICAgIGlmICh0eXBlb2YgeCAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgeSAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgeiAhPT0gJ251bWJlcicgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgdyAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBzdGF0aWMgZXF1YWxzKHYxLCB2Mikge1xuICAgICAgICAgICAgcmV0dXJuIHYxLnggPT09IHYyLnggJiYgdjEueSA9PT0gdjIueSAmJiB2MS56ID09PSB2Mi56ICYmIHYxLncgPT09IHYyLnc7XG4gICAgICAgIH1cbiAgICAgICAgdG9PYmplY3QoKSB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIHg6IHRoaXMueCxcbiAgICAgICAgICAgICAgICB5OiB0aGlzLnksXG4gICAgICAgICAgICAgICAgejogdGhpcy56LFxuICAgICAgICAgICAgICAgIHc6IHRoaXMudyxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgUG9pbnQ0ZEFzc2VtYmx5ID0ge1xuICAgICAgICB0b0NvbXBvbmVudHM6IChwKSA9PiBwLmdldENvbXBvbmVudHMoKSxcbiAgICAgICAgZnJvbUNvbXBvbmVudHM6IChjb21wcykgPT4gbmV3IFBvaW50NGQoLi4uY29tcHMpLFxuICAgIH07XG5cbiAgICBmdW5jdGlvbiBwb2ludDRkRnJvbVVua25vd24odmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIFBvaW50NGQuaXNPYmplY3QodmFsdWUpXG4gICAgICAgICAgICA/IG5ldyBQb2ludDRkKHZhbHVlLngsIHZhbHVlLnksIHZhbHVlLnosIHZhbHVlLncpXG4gICAgICAgICAgICA6IG5ldyBQb2ludDRkKCk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdyaXRlUG9pbnQ0ZCh0YXJnZXQsIHZhbHVlKSB7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd4JywgdmFsdWUueCk7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd5JywgdmFsdWUueSk7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd6JywgdmFsdWUueik7XG4gICAgICAgIHRhcmdldC53cml0ZVByb3BlcnR5KCd3JywgdmFsdWUudyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludChwYXJhbXMpIHtcbiAgICAgICAgaWYgKCFwYXJhbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29uc3RyYWludHMgPSBbXTtcbiAgICAgICAgaWYgKCFpc0VtcHR5KHBhcmFtcy5zdGVwKSkge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChuZXcgU3RlcENvbnN0cmFpbnQocGFyYW1zLnN0ZXApKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRW1wdHkocGFyYW1zLm1heCkgfHwgIWlzRW1wdHkocGFyYW1zLm1pbikpIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnRzLnB1c2gobmV3IFJhbmdlQ29uc3RyYWludCh7XG4gICAgICAgICAgICAgICAgbWF4OiBwYXJhbXMubWF4LFxuICAgICAgICAgICAgICAgIG1pbjogcGFyYW1zLm1pbixcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IENvbXBvc2l0ZUNvbnN0cmFpbnQoY29uc3RyYWludHMpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDb25zdHJhaW50JDEocGFyYW1zKSB7XG4gICAgICAgIHJldHVybiBuZXcgUG9pbnROZENvbnN0cmFpbnQoe1xuICAgICAgICAgICAgYXNzZW1ibHk6IFBvaW50NGRBc3NlbWJseSxcbiAgICAgICAgICAgIGNvbXBvbmVudHM6IFtcbiAgICAgICAgICAgICAgICBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50KCd4JyBpbiBwYXJhbXMgPyBwYXJhbXMueCA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICAgICAgY3JlYXRlRGltZW5zaW9uQ29uc3RyYWludCgneScgaW4gcGFyYW1zID8gcGFyYW1zLnkgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgIGNyZWF0ZURpbWVuc2lvbkNvbnN0cmFpbnQoJ3onIGluIHBhcmFtcyA/IHBhcmFtcy56IDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICBjcmVhdGVEaW1lbnNpb25Db25zdHJhaW50KCd3JyBpbiBwYXJhbXMgPyBwYXJhbXMudyA6IHVuZGVmaW5lZCksXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlQXhpcyhpbml0aWFsVmFsdWUsIGNvbnN0cmFpbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJhc2VTdGVwOiBnZXRCYXNlU3RlcChjb25zdHJhaW50KSxcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IGNvbnN0cmFpbnQsXG4gICAgICAgICAgICB0ZXh0UHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgIGRyYWdnaW5nU2NhbGU6IGdldFN1aXRhYmxlRHJhZ2dpbmdTY2FsZShjb25zdHJhaW50LCBpbml0aWFsVmFsdWUpLFxuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY3JlYXRlTnVtYmVyRm9ybWF0dGVyKGdldFN1aXRhYmxlRGVjaW1hbERpZ2l0cyhjb25zdHJhaW50LCBpbml0aWFsVmFsdWUpKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBjb25zdCBQb2ludDRkSW5wdXRQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnaW5wdXQtcG9pbnQ0ZCcsXG4gICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICghUG9pbnQ0ZC5pc09iamVjdCh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgeDogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyksXG4gICAgICAgICAgICAgICAgeTogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyksXG4gICAgICAgICAgICAgICAgejogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyksXG4gICAgICAgICAgICAgICAgdzogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VQb2ludERpbWVuc2lvblBhcmFtcyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IHBvaW50NGRGcm9tVW5rbm93bixcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IChhcmdzKSA9PiBjcmVhdGVDb25zdHJhaW50JDEoYXJncy5wYXJhbXMpLFxuICAgICAgICAgICAgZXF1YWxzOiBQb2ludDRkLmVxdWFscyxcbiAgICAgICAgICAgIHdyaXRlcjogKF9hcmdzKSA9PiB3cml0ZVBvaW50NGQsXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ3MudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBjID0gYXJncy5jb25zdHJhaW50O1xuICAgICAgICAgICAgaWYgKCEoYyBpbnN0YW5jZW9mIFBvaW50TmRDb25zdHJhaW50KSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgUG9pbnROZFRleHRDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBhc3NlbWJseTogUG9pbnQ0ZEFzc2VtYmx5LFxuICAgICAgICAgICAgICAgIGF4ZXM6IHZhbHVlLnJhd1ZhbHVlXG4gICAgICAgICAgICAgICAgICAgIC5nZXRDb21wb25lbnRzKClcbiAgICAgICAgICAgICAgICAgICAgLm1hcCgoY29tcCwgaW5kZXgpID0+IGNyZWF0ZUF4aXMoY29tcCwgYy5jb21wb25lbnRzW2luZGV4XSkpLFxuICAgICAgICAgICAgICAgIHBhcnNlcjogcGFyc2VOdW1iZXIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlQ29uc3RyYWludChwYXJhbXMpIHtcbiAgICAgICAgY29uc3QgY29uc3RyYWludHMgPSBbXTtcbiAgICAgICAgY29uc3QgbGMgPSBjcmVhdGVMaXN0Q29uc3RyYWludChwYXJhbXMub3B0aW9ucyk7XG4gICAgICAgIGlmIChsYykge1xuICAgICAgICAgICAgY29uc3RyYWludHMucHVzaChsYyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBDb21wb3NpdGVDb25zdHJhaW50KGNvbnN0cmFpbnRzKTtcbiAgICB9XG4gICAgY29uc3QgU3RyaW5nSW5wdXRQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnaW5wdXQtc3RyaW5nJyxcbiAgICAgICAgdHlwZTogJ2lucHV0JyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgb3B0aW9uczogcC5vcHRpb25hbC5jdXN0b20ocGFyc2VMaXN0T3B0aW9ucyksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQsXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgfSxcbiAgICAgICAgYmluZGluZzoge1xuICAgICAgICAgICAgcmVhZGVyOiAoX2FyZ3MpID0+IHN0cmluZ0Zyb21Vbmtub3duLFxuICAgICAgICAgICAgY29uc3RyYWludDogKGFyZ3MpID0+IGNyZWF0ZUNvbnN0cmFpbnQoYXJncy5wYXJhbXMpLFxuICAgICAgICAgICAgd3JpdGVyOiAoX2FyZ3MpID0+IHdyaXRlUHJpbWl0aXZlLFxuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyOiAoYXJncykgPT4ge1xuICAgICAgICAgICAgdmFyIF9hO1xuICAgICAgICAgICAgY29uc3QgZG9jID0gYXJncy5kb2N1bWVudDtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJncy52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IGMgPSBhcmdzLmNvbnN0cmFpbnQ7XG4gICAgICAgICAgICBpZiAoYyAmJiBmaW5kQ29uc3RyYWludChjLCBMaXN0Q29uc3RyYWludCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IExpc3RDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiAoX2EgPSBmaW5kTGlzdEl0ZW1zKGMpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBbXSxcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgVGV4dENvbnRyb2xsZXIoZG9jLCB7XG4gICAgICAgICAgICAgICAgcGFyc2VyOiAodikgPT4gdixcbiAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogZm9ybWF0U3RyaW5nLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbnN0IENvbnN0YW50cyA9IHtcbiAgICAgICAgbW9uaXRvcjoge1xuICAgICAgICAgICAgZGVmYXVsdEludGVydmFsOiAyMDAsXG4gICAgICAgICAgICBkZWZhdWx0TGluZUNvdW50OiAzLFxuICAgICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCBjbGFzc05hbWUkMiA9IENsYXNzTmFtZSgnbWxsJyk7XG4gICAgY2xhc3MgTXVsdGlMb2dWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZVVwZGF0ZV8gPSB0aGlzLm9uVmFsdWVVcGRhdGVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlcl8gPSBjb25maWcuZm9ybWF0dGVyO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDIoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgdGV4dGFyZWFFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gICAgICAgICAgICB0ZXh0YXJlYUVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMignaScpKTtcbiAgICAgICAgICAgIHRleHRhcmVhRWxlbS5zdHlsZS5oZWlnaHQgPSBgY2FsYyh2YXIoLS1ibGQtdXMpICogJHtjb25maWcubGluZUNvdW50fSlgO1xuICAgICAgICAgICAgdGV4dGFyZWFFbGVtLnJlYWRPbmx5ID0gdHJ1ZTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKHRleHRhcmVhRWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQodGV4dGFyZWFFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudGV4dGFyZWFFbGVtXyA9IHRleHRhcmVhRWxlbTtcbiAgICAgICAgICAgIGNvbmZpZy52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCB0aGlzLm9uVmFsdWVVcGRhdGVfKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgICAgICB1cGRhdGVfKCkge1xuICAgICAgICAgICAgY29uc3QgZWxlbSA9IHRoaXMudGV4dGFyZWFFbGVtXztcbiAgICAgICAgICAgIGNvbnN0IHNob3VsZFNjcm9sbCA9IGVsZW0uc2Nyb2xsVG9wID09PSBlbGVtLnNjcm9sbEhlaWdodCAtIGVsZW0uY2xpZW50SGVpZ2h0O1xuICAgICAgICAgICAgY29uc3QgbGluZXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUucmF3VmFsdWUuZm9yRWFjaCgodmFsdWUpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICBsaW5lcy5wdXNoKHRoaXMuZm9ybWF0dGVyXyh2YWx1ZSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZWxlbS50ZXh0Q29udGVudCA9IGxpbmVzLmpvaW4oJ1xcbicpO1xuICAgICAgICAgICAgaWYgKHNob3VsZFNjcm9sbCkge1xuICAgICAgICAgICAgICAgIGVsZW0uc2Nyb2xsVG9wID0gZWxlbS5zY3JvbGxIZWlnaHQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb25WYWx1ZVVwZGF0ZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIE11bHRpTG9nQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy52aWV3UHJvcHMgPSBjb25maWcudmlld1Byb3BzO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IE11bHRpTG9nVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNvbmZpZy5mb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgbGluZUNvdW50OiBjb25maWcubGluZUNvdW50LFxuICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogdGhpcy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNsYXNzTmFtZSQxID0gQ2xhc3NOYW1lKCdzZ2wnKTtcbiAgICBjbGFzcyBTaW5nbGVMb2dWaWV3IHtcbiAgICAgICAgY29uc3RydWN0b3IoZG9jLCBjb25maWcpIHtcbiAgICAgICAgICAgIHRoaXMub25WYWx1ZVVwZGF0ZV8gPSB0aGlzLm9uVmFsdWVVcGRhdGVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlcl8gPSBjb25maWcuZm9ybWF0dGVyO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50ID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lJDEoKSk7XG4gICAgICAgICAgICBjb25maWcudmlld1Byb3BzLmJpbmRDbGFzc01vZGlmaWVycyh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgY29uc3QgaW5wdXRFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICBpbnB1dEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUkMSgnaScpKTtcbiAgICAgICAgICAgIGlucHV0RWxlbS5yZWFkT25seSA9IHRydWU7XG4gICAgICAgICAgICBpbnB1dEVsZW0udHlwZSA9ICd0ZXh0JztcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZERpc2FibGVkKGlucHV0RWxlbSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQuYXBwZW5kQ2hpbGQoaW5wdXRFbGVtKTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50ID0gaW5wdXRFbGVtO1xuICAgICAgICAgICAgY29uZmlnLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZVVwZGF0ZV8pO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlXygpO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgbGFzdFZhbHVlID0gdmFsdWVzW3ZhbHVlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIHRoaXMuaW5wdXRFbGVtZW50LnZhbHVlID1cbiAgICAgICAgICAgICAgICBsYXN0VmFsdWUgIT09IHVuZGVmaW5lZCA/IHRoaXMuZm9ybWF0dGVyXyhsYXN0VmFsdWUpIDogJyc7XG4gICAgICAgIH1cbiAgICAgICAgb25WYWx1ZVVwZGF0ZV8oKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZV8oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFNpbmdsZUxvZ0NvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMudmlldyA9IG5ldyBTaW5nbGVMb2dWaWV3KGRvYywge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY29uZmlnLmZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBCb29sZWFuTW9uaXRvclBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdtb25pdG9yLWJvb2wnLFxuICAgICAgICB0eXBlOiAnbW9uaXRvcicsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBsaW5lQ291bnQ6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgIGluaXRpYWxWYWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgIH0sXG4gICAgICAgIGJpbmRpbmc6IHtcbiAgICAgICAgICAgIHJlYWRlcjogKF9hcmdzKSA9PiBib29sRnJvbVVua25vd24sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBpZiAoYXJncy52YWx1ZS5yYXdWYWx1ZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFNpbmdsZUxvZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IEJvb2xlYW5Gb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBNdWx0aUxvZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogQm9vbGVhbkZvcm1hdHRlcixcbiAgICAgICAgICAgICAgICBsaW5lQ291bnQ6IChfYSA9IGFyZ3MucGFyYW1zLmxpbmVDb3VudCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogQ29uc3RhbnRzLm1vbml0b3IuZGVmYXVsdExpbmVDb3VudCxcbiAgICAgICAgICAgICAgICB2YWx1ZTogYXJncy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgfTtcblxuICAgIGNsYXNzIEdyYXBoQ3Vyc29yIHtcbiAgICAgICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5pbmRleF8gPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgaW5kZXgoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pbmRleF87XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGluZGV4KGluZGV4KSB7XG4gICAgICAgICAgICBjb25zdCBjaGFuZ2VkID0gdGhpcy5pbmRleF8gIT09IGluZGV4O1xuICAgICAgICAgICAgaWYgKGNoYW5nZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmluZGV4XyA9IGluZGV4O1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgICAgICAgICAgICAgICAgc2VuZGVyOiB0aGlzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xhc3NOYW1lID0gQ2xhc3NOYW1lKCdncmwnKTtcbiAgICBjbGFzcyBHcmFwaExvZ1ZpZXcge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbkN1cnNvckNoYW5nZV8gPSB0aGlzLm9uQ3Vyc29yQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vblZhbHVlVXBkYXRlXyA9IHRoaXMub25WYWx1ZVVwZGF0ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudCA9IGRvYy5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHRoaXMuZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSgpKTtcbiAgICAgICAgICAgIGNvbmZpZy52aWV3UHJvcHMuYmluZENsYXNzTW9kaWZpZXJzKHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdHRlcl8gPSBjb25maWcuZm9ybWF0dGVyO1xuICAgICAgICAgICAgdGhpcy5taW5WYWx1ZV8gPSBjb25maWcubWluVmFsdWU7XG4gICAgICAgICAgICB0aGlzLm1heFZhbHVlXyA9IGNvbmZpZy5tYXhWYWx1ZTtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yXyA9IGNvbmZpZy5jdXJzb3I7XG4gICAgICAgICAgICB0aGlzLmN1cnNvcl8uZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vbkN1cnNvckNoYW5nZV8pO1xuICAgICAgICAgICAgY29uc3Qgc3ZnRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAnc3ZnJyk7XG4gICAgICAgICAgICBzdmdFbGVtLmNsYXNzTGlzdC5hZGQoY2xhc3NOYW1lKCdnJykpO1xuICAgICAgICAgICAgc3ZnRWxlbS5zdHlsZS5oZWlnaHQgPSBgY2FsYyh2YXIoLS1ibGQtdXMpICogJHtjb25maWcubGluZUNvdW50fSlgO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHN2Z0VsZW0pO1xuICAgICAgICAgICAgdGhpcy5zdmdFbGVtXyA9IHN2Z0VsZW07XG4gICAgICAgICAgICBjb25zdCBsaW5lRWxlbSA9IGRvYy5jcmVhdGVFbGVtZW50TlMoU1ZHX05TLCAncG9seWxpbmUnKTtcbiAgICAgICAgICAgIHRoaXMuc3ZnRWxlbV8uYXBwZW5kQ2hpbGQobGluZUVsZW0pO1xuICAgICAgICAgICAgdGhpcy5saW5lRWxlbV8gPSBsaW5lRWxlbTtcbiAgICAgICAgICAgIGNvbnN0IHRvb2x0aXBFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgdG9vbHRpcEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ3QnKSwgQ2xhc3NOYW1lKCd0dCcpKCkpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRvb2x0aXBFbGVtKTtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcEVsZW1fID0gdG9vbHRpcEVsZW07XG4gICAgICAgICAgICBjb25maWcudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgdGhpcy5vblZhbHVlVXBkYXRlXyk7XG4gICAgICAgICAgICB0aGlzLnZhbHVlID0gY29uZmlnLnZhbHVlO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGdyYXBoRWxlbWVudCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnN2Z0VsZW1fO1xuICAgICAgICB9XG4gICAgICAgIHVwZGF0ZV8oKSB7XG4gICAgICAgICAgICBjb25zdCBib3VuZHMgPSB0aGlzLnN2Z0VsZW1fLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgY29uc3QgbWF4SW5kZXggPSB0aGlzLnZhbHVlLnJhd1ZhbHVlLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICBjb25zdCBtaW4gPSB0aGlzLm1pblZhbHVlXztcbiAgICAgICAgICAgIGNvbnN0IG1heCA9IHRoaXMubWF4VmFsdWVfO1xuICAgICAgICAgICAgY29uc3QgcG9pbnRzID0gW107XG4gICAgICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlLmZvckVhY2goKHYsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHYgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHggPSBtYXBSYW5nZShpbmRleCwgMCwgbWF4SW5kZXgsIDAsIGJvdW5kcy53aWR0aCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeSA9IG1hcFJhbmdlKHYsIG1pbiwgbWF4LCBib3VuZHMuaGVpZ2h0LCAwKTtcbiAgICAgICAgICAgICAgICBwb2ludHMucHVzaChbeCwgeV0uam9pbignLCcpKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5saW5lRWxlbV8uc2V0QXR0cmlidXRlTlMobnVsbCwgJ3BvaW50cycsIHBvaW50cy5qb2luKCcgJykpO1xuICAgICAgICAgICAgY29uc3QgdG9vbHRpcEVsZW0gPSB0aGlzLnRvb2x0aXBFbGVtXztcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZS5yYXdWYWx1ZVt0aGlzLmN1cnNvcl8uaW5kZXhdO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0b29sdGlwRWxlbS5jbGFzc0xpc3QucmVtb3ZlKGNsYXNzTmFtZSgndCcsICdhJykpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHR4ID0gbWFwUmFuZ2UodGhpcy5jdXJzb3JfLmluZGV4LCAwLCBtYXhJbmRleCwgMCwgYm91bmRzLndpZHRoKTtcbiAgICAgICAgICAgIGNvbnN0IHR5ID0gbWFwUmFuZ2UodmFsdWUsIG1pbiwgbWF4LCBib3VuZHMuaGVpZ2h0LCAwKTtcbiAgICAgICAgICAgIHRvb2x0aXBFbGVtLnN0eWxlLmxlZnQgPSBgJHt0eH1weGA7XG4gICAgICAgICAgICB0b29sdGlwRWxlbS5zdHlsZS50b3AgPSBgJHt0eX1weGA7XG4gICAgICAgICAgICB0b29sdGlwRWxlbS50ZXh0Q29udGVudCA9IGAke3RoaXMuZm9ybWF0dGVyXyh2YWx1ZSl9YDtcbiAgICAgICAgICAgIGlmICghdG9vbHRpcEVsZW0uY2xhc3NMaXN0LmNvbnRhaW5zKGNsYXNzTmFtZSgndCcsICdhJykpKSB7XG4gICAgICAgICAgICAgICAgdG9vbHRpcEVsZW0uY2xhc3NMaXN0LmFkZChjbGFzc05hbWUoJ3QnLCAnYScpLCBjbGFzc05hbWUoJ3QnLCAnaW4nKSk7XG4gICAgICAgICAgICAgICAgZm9yY2VSZWZsb3codG9vbHRpcEVsZW0pO1xuICAgICAgICAgICAgICAgIHRvb2x0aXBFbGVtLmNsYXNzTGlzdC5yZW1vdmUoY2xhc3NOYW1lKCd0JywgJ2luJykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG9uVmFsdWVVcGRhdGVfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICAgICAgb25DdXJzb3JDaGFuZ2VfKCkge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVfKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBHcmFwaExvZ0NvbnRyb2xsZXIge1xuICAgICAgICBjb25zdHJ1Y3Rvcihkb2MsIGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vbkdyYXBoTW91c2VNb3ZlXyA9IHRoaXMub25HcmFwaE1vdXNlTW92ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25HcmFwaE1vdXNlTGVhdmVfID0gdGhpcy5vbkdyYXBoTW91c2VMZWF2ZV8uYmluZCh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMub25HcmFwaFBvaW50ZXJEb3duXyA9IHRoaXMub25HcmFwaFBvaW50ZXJEb3duXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5vbkdyYXBoUG9pbnRlck1vdmVfID0gdGhpcy5vbkdyYXBoUG9pbnRlck1vdmVfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLm9uR3JhcGhQb2ludGVyVXBfID0gdGhpcy5vbkdyYXBoUG9pbnRlclVwXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IGNvbmZpZy52YWx1ZTtcbiAgICAgICAgICAgIHRoaXMudmlld1Byb3BzID0gY29uZmlnLnZpZXdQcm9wcztcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yXyA9IG5ldyBHcmFwaEN1cnNvcigpO1xuICAgICAgICAgICAgdGhpcy52aWV3ID0gbmV3IEdyYXBoTG9nVmlldyhkb2MsIHtcbiAgICAgICAgICAgICAgICBjdXJzb3I6IHRoaXMuY3Vyc29yXyxcbiAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGNvbmZpZy5mb3JtYXR0ZXIsXG4gICAgICAgICAgICAgICAgbGluZUNvdW50OiBjb25maWcubGluZUNvdW50LFxuICAgICAgICAgICAgICAgIG1heFZhbHVlOiBjb25maWcubWF4VmFsdWUsXG4gICAgICAgICAgICAgICAgbWluVmFsdWU6IGNvbmZpZy5taW5WYWx1ZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IHRoaXMudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIXN1cHBvcnRzVG91Y2goZG9jKSkge1xuICAgICAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIHRoaXMub25HcmFwaE1vdXNlTW92ZV8pO1xuICAgICAgICAgICAgICAgIHRoaXMudmlldy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCB0aGlzLm9uR3JhcGhNb3VzZUxlYXZlXyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwaCA9IG5ldyBQb2ludGVySGFuZGxlcih0aGlzLnZpZXcuZWxlbWVudCk7XG4gICAgICAgICAgICAgICAgcGguZW1pdHRlci5vbignZG93bicsIHRoaXMub25HcmFwaFBvaW50ZXJEb3duXyk7XG4gICAgICAgICAgICAgICAgcGguZW1pdHRlci5vbignbW92ZScsIHRoaXMub25HcmFwaFBvaW50ZXJNb3ZlXyk7XG4gICAgICAgICAgICAgICAgcGguZW1pdHRlci5vbigndXAnLCB0aGlzLm9uR3JhcGhQb2ludGVyVXBfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvbkdyYXBoTW91c2VMZWF2ZV8oKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnNvcl8uaW5kZXggPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBvbkdyYXBoTW91c2VNb3ZlXyhldikge1xuICAgICAgICAgICAgY29uc3QgYm91bmRzID0gdGhpcy52aWV3LmVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICB0aGlzLmN1cnNvcl8uaW5kZXggPSBNYXRoLmZsb29yKG1hcFJhbmdlKGV2Lm9mZnNldFgsIDAsIGJvdW5kcy53aWR0aCwgMCwgdGhpcy52YWx1ZS5yYXdWYWx1ZS5sZW5ndGgpKTtcbiAgICAgICAgfVxuICAgICAgICBvbkdyYXBoUG9pbnRlckRvd25fKGV2KSB7XG4gICAgICAgICAgICB0aGlzLm9uR3JhcGhQb2ludGVyTW92ZV8oZXYpO1xuICAgICAgICB9XG4gICAgICAgIG9uR3JhcGhQb2ludGVyTW92ZV8oZXYpIHtcbiAgICAgICAgICAgIGlmICghZXYuZGF0YS5wb2ludCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yXy5pbmRleCA9IC0xO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuY3Vyc29yXy5pbmRleCA9IE1hdGguZmxvb3IobWFwUmFuZ2UoZXYuZGF0YS5wb2ludC54LCAwLCBldi5kYXRhLmJvdW5kcy53aWR0aCwgMCwgdGhpcy52YWx1ZS5yYXdWYWx1ZS5sZW5ndGgpKTtcbiAgICAgICAgfVxuICAgICAgICBvbkdyYXBoUG9pbnRlclVwXygpIHtcbiAgICAgICAgICAgIHRoaXMuY3Vyc29yXy5pbmRleCA9IC0xO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gY3JlYXRlRm9ybWF0dGVyKHBhcmFtcykge1xuICAgICAgICByZXR1cm4gJ2Zvcm1hdCcgaW4gcGFyYW1zICYmICFpc0VtcHR5KHBhcmFtcy5mb3JtYXQpXG4gICAgICAgICAgICA/IHBhcmFtcy5mb3JtYXRcbiAgICAgICAgICAgIDogY3JlYXRlTnVtYmVyRm9ybWF0dGVyKDIpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVUZXh0TW9uaXRvcihhcmdzKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKGFyZ3MudmFsdWUucmF3VmFsdWUubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFNpbmdsZUxvZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogY3JlYXRlRm9ybWF0dGVyKGFyZ3MucGFyYW1zKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogYXJncy52YWx1ZSxcbiAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5ldyBNdWx0aUxvZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgZm9ybWF0dGVyOiBjcmVhdGVGb3JtYXR0ZXIoYXJncy5wYXJhbXMpLFxuICAgICAgICAgICAgbGluZUNvdW50OiAoX2EgPSBhcmdzLnBhcmFtcy5saW5lQ291bnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IENvbnN0YW50cy5tb25pdG9yLmRlZmF1bHRMaW5lQ291bnQsXG4gICAgICAgICAgICB2YWx1ZTogYXJncy52YWx1ZSxcbiAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVHcmFwaE1vbml0b3IoYXJncykge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgcmV0dXJuIG5ldyBHcmFwaExvZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgZm9ybWF0dGVyOiBjcmVhdGVGb3JtYXR0ZXIoYXJncy5wYXJhbXMpLFxuICAgICAgICAgICAgbGluZUNvdW50OiAoX2EgPSBhcmdzLnBhcmFtcy5saW5lQ291bnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IENvbnN0YW50cy5tb25pdG9yLmRlZmF1bHRMaW5lQ291bnQsXG4gICAgICAgICAgICBtYXhWYWx1ZTogKF9iID0gKCdtYXgnIGluIGFyZ3MucGFyYW1zID8gYXJncy5wYXJhbXMubWF4IDogbnVsbCkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IDEwMCxcbiAgICAgICAgICAgIG1pblZhbHVlOiAoX2MgPSAoJ21pbicgaW4gYXJncy5wYXJhbXMgPyBhcmdzLnBhcmFtcy5taW4gOiBudWxsKSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogMCxcbiAgICAgICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlLFxuICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHNob3VsZFNob3dHcmFwaChwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuICd2aWV3JyBpbiBwYXJhbXMgJiYgcGFyYW1zLnZpZXcgPT09ICdncmFwaCc7XG4gICAgfVxuICAgIGNvbnN0IE51bWJlck1vbml0b3JQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnbW9uaXRvci1udW1iZXInLFxuICAgICAgICB0eXBlOiAnbW9uaXRvcicsXG4gICAgICAgIGFjY2VwdDogKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgIGZvcm1hdDogcC5vcHRpb25hbC5mdW5jdGlvbixcbiAgICAgICAgICAgICAgICBsaW5lQ291bnQ6IHAub3B0aW9uYWwubnVtYmVyLFxuICAgICAgICAgICAgICAgIG1heDogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICAgICAgbWluOiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgICAgICB2aWV3OiBwLm9wdGlvbmFsLnN0cmluZyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICBkZWZhdWx0QnVmZmVyU2l6ZTogKHBhcmFtcykgPT4gKHNob3VsZFNob3dHcmFwaChwYXJhbXMpID8gNjQgOiAxKSxcbiAgICAgICAgICAgIHJlYWRlcjogKF9hcmdzKSA9PiBudW1iZXJGcm9tVW5rbm93bixcbiAgICAgICAgfSxcbiAgICAgICAgY29udHJvbGxlcjogKGFyZ3MpID0+IHtcbiAgICAgICAgICAgIGlmIChzaG91bGRTaG93R3JhcGgoYXJncy5wYXJhbXMpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUdyYXBoTW9uaXRvcihhcmdzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBjcmVhdGVUZXh0TW9uaXRvcihhcmdzKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgU3RyaW5nTW9uaXRvclBsdWdpbiA9IHtcbiAgICAgICAgaWQ6ICdtb25pdG9yLXN0cmluZycsXG4gICAgICAgIHR5cGU6ICdtb25pdG9yJyxcbiAgICAgICAgYWNjZXB0OiAodmFsdWUsIHBhcmFtcykgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgbGluZUNvdW50OiBwLm9wdGlvbmFsLm51bWJlcixcbiAgICAgICAgICAgICAgICBtdWx0aWxpbmU6IHAub3B0aW9uYWwuYm9vbGVhbixcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICBpbml0aWFsVmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXJhbXM6IHJlc3VsdCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBiaW5kaW5nOiB7XG4gICAgICAgICAgICByZWFkZXI6IChfYXJncykgPT4gc3RyaW5nRnJvbVVua25vd24sXG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRyb2xsZXI6IChhcmdzKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGFyZ3MudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBtdWx0aWxpbmUgPSB2YWx1ZS5yYXdWYWx1ZS5sZW5ndGggPiAxIHx8XG4gICAgICAgICAgICAgICAgKCdtdWx0aWxpbmUnIGluIGFyZ3MucGFyYW1zICYmIGFyZ3MucGFyYW1zLm11bHRpbGluZSk7XG4gICAgICAgICAgICBpZiAobXVsdGlsaW5lKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBNdWx0aUxvZ0NvbnRyb2xsZXIoYXJncy5kb2N1bWVudCwge1xuICAgICAgICAgICAgICAgICAgICBmb3JtYXR0ZXI6IGZvcm1hdFN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgbGluZUNvdW50OiAoX2EgPSBhcmdzLnBhcmFtcy5saW5lQ291bnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IENvbnN0YW50cy5tb25pdG9yLmRlZmF1bHRMaW5lQ291bnQsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXcgU2luZ2xlTG9nQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgZm9ybWF0dGVyOiBmb3JtYXRTdHJpbmcsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogYXJncy52aWV3UHJvcHMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY2xhc3MgSW5wdXRCaW5kaW5nIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29uZmlnKSB7XG4gICAgICAgICAgICB0aGlzLm9uVmFsdWVDaGFuZ2VfID0gdGhpcy5vblZhbHVlQ2hhbmdlXy5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5yZWFkZXIgPSBjb25maWcucmVhZGVyO1xuICAgICAgICAgICAgdGhpcy53cml0ZXIgPSBjb25maWcud3JpdGVyO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIHRoaXMub25WYWx1ZUNoYW5nZV8pO1xuICAgICAgICAgICAgdGhpcy50YXJnZXQgPSBjb25maWcudGFyZ2V0O1xuICAgICAgICAgICAgdGhpcy5yZWFkKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVhZCgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldFZhbHVlID0gdGhpcy50YXJnZXQucmVhZCgpO1xuICAgICAgICAgICAgaWYgKHRhcmdldFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnZhbHVlLnJhd1ZhbHVlID0gdGhpcy5yZWFkZXIodGFyZ2V0VmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHdyaXRlXyhyYXdWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy53cml0ZXIodGhpcy50YXJnZXQsIHJhd1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBvblZhbHVlQ2hhbmdlXyhldikge1xuICAgICAgICAgICAgdGhpcy53cml0ZV8oZXYucmF3VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBldi5vcHRpb25zLFxuICAgICAgICAgICAgICAgIHJhd1ZhbHVlOiBldi5yYXdWYWx1ZSxcbiAgICAgICAgICAgICAgICBzZW5kZXI6IHRoaXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNyZWF0ZUlucHV0QmluZGluZ0NvbnRyb2xsZXIocGx1Z2luLCBhcmdzKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBsdWdpbi5hY2NlcHQoYXJncy50YXJnZXQucmVhZCgpLCBhcmdzLnBhcmFtcyk7XG4gICAgICAgIGlmIChpc0VtcHR5KHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICBjb25zdCB2YWx1ZUFyZ3MgPSB7XG4gICAgICAgICAgICB0YXJnZXQ6IGFyZ3MudGFyZ2V0LFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiByZXN1bHQuaW5pdGlhbFZhbHVlLFxuICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQucGFyYW1zLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZWFkZXIgPSBwbHVnaW4uYmluZGluZy5yZWFkZXIodmFsdWVBcmdzKTtcbiAgICAgICAgY29uc3QgY29uc3RyYWludCA9IHBsdWdpbi5iaW5kaW5nLmNvbnN0cmFpbnRcbiAgICAgICAgICAgID8gcGx1Z2luLmJpbmRpbmcuY29uc3RyYWludCh2YWx1ZUFyZ3MpXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBjcmVhdGVWYWx1ZShyZWFkZXIocmVzdWx0LmluaXRpYWxWYWx1ZSksIHtcbiAgICAgICAgICAgIGNvbnN0cmFpbnQ6IGNvbnN0cmFpbnQsXG4gICAgICAgICAgICBlcXVhbHM6IHBsdWdpbi5iaW5kaW5nLmVxdWFscyxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGJpbmRpbmcgPSBuZXcgSW5wdXRCaW5kaW5nKHtcbiAgICAgICAgICAgIHJlYWRlcjogcmVhZGVyLFxuICAgICAgICAgICAgdGFyZ2V0OiBhcmdzLnRhcmdldCxcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHdyaXRlcjogcGx1Z2luLmJpbmRpbmcud3JpdGVyKHZhbHVlQXJncyksXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkaXNhYmxlZCA9IHAub3B0aW9uYWwuYm9vbGVhbihhcmdzLnBhcmFtcy5kaXNhYmxlZCkudmFsdWU7XG4gICAgICAgIGNvbnN0IGhpZGRlbiA9IHAub3B0aW9uYWwuYm9vbGVhbihhcmdzLnBhcmFtcy5oaWRkZW4pLnZhbHVlO1xuICAgICAgICBjb25zdCBjb250cm9sbGVyID0gcGx1Z2luLmNvbnRyb2xsZXIoe1xuICAgICAgICAgICAgY29uc3RyYWludDogY29uc3RyYWludCxcbiAgICAgICAgICAgIGRvY3VtZW50OiBhcmdzLmRvY3VtZW50LFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiByZXN1bHQuaW5pdGlhbFZhbHVlLFxuICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQucGFyYW1zLFxuICAgICAgICAgICAgdmFsdWU6IGJpbmRpbmcudmFsdWUsXG4gICAgICAgICAgICB2aWV3UHJvcHM6IFZpZXdQcm9wcy5jcmVhdGUoe1xuICAgICAgICAgICAgICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICAgICAgICAgICAgICBoaWRkZW46IGhpZGRlbixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbGFiZWwgPSBwLm9wdGlvbmFsLnN0cmluZyhhcmdzLnBhcmFtcy5sYWJlbCkudmFsdWU7XG4gICAgICAgIHJldHVybiBuZXcgSW5wdXRCaW5kaW5nQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICBiaW5kaW5nOiBiaW5kaW5nLFxuICAgICAgICAgICAgYmxhZGU6IGNyZWF0ZUJsYWRlKCksXG4gICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgbGFiZWw6IGxhYmVsIHx8IGFyZ3MudGFyZ2V0LmtleSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgdmFsdWVDb250cm9sbGVyOiBjb250cm9sbGVyLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbGFzcyBNb25pdG9yQmluZGluZyB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgICAgICAgICAgdGhpcy5vblRpY2tfID0gdGhpcy5vblRpY2tfLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLnJlYWRlcl8gPSBjb25maWcucmVhZGVyO1xuICAgICAgICAgICAgdGhpcy50YXJnZXQgPSBjb25maWcudGFyZ2V0O1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBjb25maWcudmFsdWU7XG4gICAgICAgICAgICB0aGlzLnRpY2tlciA9IGNvbmZpZy50aWNrZXI7XG4gICAgICAgICAgICB0aGlzLnRpY2tlci5lbWl0dGVyLm9uKCd0aWNrJywgdGhpcy5vblRpY2tfKTtcbiAgICAgICAgICAgIHRoaXMucmVhZCgpO1xuICAgICAgICB9XG4gICAgICAgIGRpc3Bvc2UoKSB7XG4gICAgICAgICAgICB0aGlzLnRpY2tlci5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVhZCgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRhcmdldFZhbHVlID0gdGhpcy50YXJnZXQucmVhZCgpO1xuICAgICAgICAgICAgaWYgKHRhcmdldFZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLnJlYWRlcl8odGFyZ2V0VmFsdWUpO1xuICAgICAgICAgICAgdGhpcy52YWx1ZS5yYXdWYWx1ZSA9IGNyZWF0ZVB1c2hlZEJ1ZmZlcihidWZmZXIsIG5ld1ZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCd1cGRhdGUnLCB7XG4gICAgICAgICAgICAgICAgcmF3VmFsdWU6IG5ld1ZhbHVlLFxuICAgICAgICAgICAgICAgIHNlbmRlcjogdGhpcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIG9uVGlja18oXykge1xuICAgICAgICAgICAgdGhpcy5yZWFkKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVUaWNrZXIoZG9jdW1lbnQsIGludGVydmFsKSB7XG4gICAgICAgIHJldHVybiBpbnRlcnZhbCA9PT0gMFxuICAgICAgICAgICAgPyBuZXcgTWFudWFsVGlja2VyKClcbiAgICAgICAgICAgIDogbmV3IEludGVydmFsVGlja2VyKGRvY3VtZW50LCBpbnRlcnZhbCAhPT0gbnVsbCAmJiBpbnRlcnZhbCAhPT0gdm9pZCAwID8gaW50ZXJ2YWwgOiBDb25zdGFudHMubW9uaXRvci5kZWZhdWx0SW50ZXJ2YWwpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIocGx1Z2luLCBhcmdzKSB7XG4gICAgICAgIHZhciBfYSwgX2IsIF9jO1xuICAgICAgICBjb25zdCBQID0gUGFyYW1zUGFyc2VycztcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gcGx1Z2luLmFjY2VwdChhcmdzLnRhcmdldC5yZWFkKCksIGFyZ3MucGFyYW1zKTtcbiAgICAgICAgaWYgKGlzRW1wdHkocmVzdWx0KSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYmluZGluZ0FyZ3MgPSB7XG4gICAgICAgICAgICB0YXJnZXQ6IGFyZ3MudGFyZ2V0LFxuICAgICAgICAgICAgaW5pdGlhbFZhbHVlOiByZXN1bHQuaW5pdGlhbFZhbHVlLFxuICAgICAgICAgICAgcGFyYW1zOiByZXN1bHQucGFyYW1zLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCByZWFkZXIgPSBwbHVnaW4uYmluZGluZy5yZWFkZXIoYmluZGluZ0FyZ3MpO1xuICAgICAgICBjb25zdCBidWZmZXJTaXplID0gKF9iID0gKF9hID0gUC5vcHRpb25hbC5udW1iZXIoYXJncy5wYXJhbXMuYnVmZmVyU2l6ZSkudmFsdWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IChwbHVnaW4uYmluZGluZy5kZWZhdWx0QnVmZmVyU2l6ZSAmJlxuICAgICAgICAgICAgcGx1Z2luLmJpbmRpbmcuZGVmYXVsdEJ1ZmZlclNpemUocmVzdWx0LnBhcmFtcykpKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiAxO1xuICAgICAgICBjb25zdCBpbnRlcnZhbCA9IFAub3B0aW9uYWwubnVtYmVyKGFyZ3MucGFyYW1zLmludGVydmFsKS52YWx1ZTtcbiAgICAgICAgY29uc3QgYmluZGluZyA9IG5ldyBNb25pdG9yQmluZGluZyh7XG4gICAgICAgICAgICByZWFkZXI6IHJlYWRlcixcbiAgICAgICAgICAgIHRhcmdldDogYXJncy50YXJnZXQsXG4gICAgICAgICAgICB0aWNrZXI6IGNyZWF0ZVRpY2tlcihhcmdzLmRvY3VtZW50LCBpbnRlcnZhbCksXG4gICAgICAgICAgICB2YWx1ZTogaW5pdGlhbGl6ZUJ1ZmZlcihidWZmZXJTaXplKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGRpc2FibGVkID0gUC5vcHRpb25hbC5ib29sZWFuKGFyZ3MucGFyYW1zLmRpc2FibGVkKS52YWx1ZTtcbiAgICAgICAgY29uc3QgaGlkZGVuID0gUC5vcHRpb25hbC5ib29sZWFuKGFyZ3MucGFyYW1zLmhpZGRlbikudmFsdWU7XG4gICAgICAgIGNvbnN0IGNvbnRyb2xsZXIgPSBwbHVnaW4uY29udHJvbGxlcih7XG4gICAgICAgICAgICBkb2N1bWVudDogYXJncy5kb2N1bWVudCxcbiAgICAgICAgICAgIHBhcmFtczogcmVzdWx0LnBhcmFtcyxcbiAgICAgICAgICAgIHZhbHVlOiBiaW5kaW5nLnZhbHVlLFxuICAgICAgICAgICAgdmlld1Byb3BzOiBWaWV3UHJvcHMuY3JlYXRlKHtcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgICAgICAgICAgICAgaGlkZGVuOiBoaWRkZW4sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGxhYmVsID0gKF9jID0gUC5vcHRpb25hbC5zdHJpbmcoYXJncy5wYXJhbXMubGFiZWwpLnZhbHVlKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBhcmdzLnRhcmdldC5rZXk7XG4gICAgICAgIHJldHVybiBuZXcgTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgIGJpbmRpbmc6IGJpbmRpbmcsXG4gICAgICAgICAgICBibGFkZTogY3JlYXRlQmxhZGUoKSxcbiAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICBsYWJlbDogbGFiZWwsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHZhbHVlQ29udHJvbGxlcjogY29udHJvbGxlcixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xhc3MgUGx1Z2luUG9vbCB7XG4gICAgICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICAgICAgdGhpcy5wbHVnaW5zTWFwXyA9IHtcbiAgICAgICAgICAgICAgICBibGFkZXM6IFtdLFxuICAgICAgICAgICAgICAgIGlucHV0czogW10sXG4gICAgICAgICAgICAgICAgbW9uaXRvcnM6IFtdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBnZXRBbGwoKSB7XG4gICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMucGx1Z2luc01hcF8uYmxhZGVzLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMucGx1Z2luc01hcF8uaW5wdXRzLFxuICAgICAgICAgICAgICAgIC4uLnRoaXMucGx1Z2luc01hcF8ubW9uaXRvcnMsXG4gICAgICAgICAgICBdO1xuICAgICAgICB9XG4gICAgICAgIHJlZ2lzdGVyKHIpIHtcbiAgICAgICAgICAgIGlmIChyLnR5cGUgPT09ICdibGFkZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBsdWdpbnNNYXBfLmJsYWRlcy51bnNoaWZ0KHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoci50eXBlID09PSAnaW5wdXQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zTWFwXy5pbnB1dHMudW5zaGlmdChyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHIudHlwZSA9PT0gJ21vbml0b3InKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wbHVnaW5zTWFwXy5tb25pdG9ycy51bnNoaWZ0KHIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNyZWF0ZUlucHV0KGRvY3VtZW50LCB0YXJnZXQsIHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgaW5pdGlhbFZhbHVlID0gdGFyZ2V0LnJlYWQoKTtcbiAgICAgICAgICAgIGlmIChpc0VtcHR5KGluaXRpYWxWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHBFcnJvcih7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleTogdGFyZ2V0LmtleSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ25vbWF0Y2hpbmdjb250cm9sbGVyJyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGJjID0gdGhpcy5wbHVnaW5zTWFwXy5pbnB1dHMucmVkdWNlKChyZXN1bHQsIHBsdWdpbikgPT4gcmVzdWx0IHx8XG4gICAgICAgICAgICAgICAgY3JlYXRlSW5wdXRCaW5kaW5nQ29udHJvbGxlcihwbHVnaW4sIHtcbiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQ6IGRvY3VtZW50LFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgfSksIG51bGwpO1xuICAgICAgICAgICAgaWYgKGJjKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJjO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhyb3cgbmV3IFRwRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAga2V5OiB0YXJnZXQua2V5LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdHlwZTogJ25vbWF0Y2hpbmdjb250cm9sbGVyJyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNyZWF0ZU1vbml0b3IoZG9jdW1lbnQsIHRhcmdldCwgcGFyYW1zKSB7XG4gICAgICAgICAgICBjb25zdCBiYyA9IHRoaXMucGx1Z2luc01hcF8ubW9uaXRvcnMucmVkdWNlKChyZXN1bHQsIHBsdWdpbikgPT4gcmVzdWx0IHx8XG4gICAgICAgICAgICAgICAgY3JlYXRlTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKHBsdWdpbiwge1xuICAgICAgICAgICAgICAgICAgICBkb2N1bWVudDogZG9jdW1lbnQsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHRhcmdldCxcbiAgICAgICAgICAgICAgICB9KSwgbnVsbCk7XG4gICAgICAgICAgICBpZiAoYmMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYmM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHBFcnJvcih7XG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICBrZXk6IHRhcmdldC5rZXksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB0eXBlOiAnbm9tYXRjaGluZ2NvbnRyb2xsZXInLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlQmxhZGUoZG9jdW1lbnQsIHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgYmMgPSB0aGlzLnBsdWdpbnNNYXBfLmJsYWRlcy5yZWR1Y2UoKHJlc3VsdCwgcGx1Z2luKSA9PiByZXN1bHQgfHxcbiAgICAgICAgICAgICAgICBjcmVhdGVCbGFkZUNvbnRyb2xsZXIocGx1Z2luLCB7XG4gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50OiBkb2N1bWVudCxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgfSksIG51bGwpO1xuICAgICAgICAgICAgaWYgKCFiYykge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBUcEVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ25vbWF0Y2hpbmd2aWV3JyxcbiAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zOiBwYXJhbXMsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYmM7XG4gICAgICAgIH1cbiAgICAgICAgY3JlYXRlQmxhZGVBcGkoYmMpIHtcbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIElucHV0QmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IElucHV0QmluZGluZ0FwaShiYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYmMgaW5zdGFuY2VvZiBNb25pdG9yQmluZGluZ0NvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IE1vbml0b3JCaW5kaW5nQXBpKGJjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChiYyBpbnN0YW5jZW9mIFJhY2tDb250cm9sbGVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBSYWNrQXBpKGJjLCB0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGFwaSA9IHRoaXMucGx1Z2luc01hcF8uYmxhZGVzLnJlZHVjZSgocmVzdWx0LCBwbHVnaW4pID0+IHJlc3VsdCB8fFxuICAgICAgICAgICAgICAgIHBsdWdpbi5hcGkoe1xuICAgICAgICAgICAgICAgICAgICBjb250cm9sbGVyOiBiYyxcbiAgICAgICAgICAgICAgICAgICAgcG9vbDogdGhpcyxcbiAgICAgICAgICAgICAgICB9KSwgbnVsbCk7XG4gICAgICAgICAgICBpZiAoIWFwaSkge1xuICAgICAgICAgICAgICAgIHRocm93IFRwRXJyb3Iuc2hvdWxkTmV2ZXJIYXBwZW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBhcGk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjcmVhdGVEZWZhdWx0UGx1Z2luUG9vbCgpIHtcbiAgICAgICAgY29uc3QgcG9vbCA9IG5ldyBQbHVnaW5Qb29sKCk7XG4gICAgICAgIFtcbiAgICAgICAgICAgIFBvaW50MmRJbnB1dFBsdWdpbixcbiAgICAgICAgICAgIFBvaW50M2RJbnB1dFBsdWdpbixcbiAgICAgICAgICAgIFBvaW50NGRJbnB1dFBsdWdpbixcbiAgICAgICAgICAgIFN0cmluZ0lucHV0UGx1Z2luLFxuICAgICAgICAgICAgTnVtYmVySW5wdXRQbHVnaW4sXG4gICAgICAgICAgICBTdHJpbmdDb2xvcklucHV0UGx1Z2luLFxuICAgICAgICAgICAgT2JqZWN0Q29sb3JJbnB1dFBsdWdpbixcbiAgICAgICAgICAgIE51bWJlckNvbG9ySW5wdXRQbHVnaW4sXG4gICAgICAgICAgICBCb29sZWFuSW5wdXRQbHVnaW4sXG4gICAgICAgICAgICBCb29sZWFuTW9uaXRvclBsdWdpbixcbiAgICAgICAgICAgIFN0cmluZ01vbml0b3JQbHVnaW4sXG4gICAgICAgICAgICBOdW1iZXJNb25pdG9yUGx1Z2luLFxuICAgICAgICAgICAgQnV0dG9uQmxhZGVQbHVnaW4sXG4gICAgICAgICAgICBGb2xkZXJCbGFkZVBsdWdpbixcbiAgICAgICAgICAgIFNlcGFyYXRvckJsYWRlUGx1Z2luLFxuICAgICAgICAgICAgVGFiQmxhZGVQbHVnaW4sXG4gICAgICAgIF0uZm9yRWFjaCgocCkgPT4ge1xuICAgICAgICAgICAgcG9vbC5yZWdpc3RlcihwKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwb29sO1xuICAgIH1cblxuICAgIGNsYXNzIExpc3RBcGkgZXh0ZW5kcyBCbGFkZUFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXyA9IG5ldyBFbWl0dGVyKCk7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci52YWx1ZS5lbWl0dGVyLm9uKCdjaGFuZ2UnLCAoZXYpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLmVtaXQoJ2NoYW5nZScsIHtcbiAgICAgICAgICAgICAgICAgICAgZXZlbnQ6IG5ldyBUcENoYW5nZUV2ZW50KHRoaXMsIGV2LnJhd1ZhbHVlKSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGdldCBsYWJlbCgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLmdldCgnbGFiZWwnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgbGFiZWwobGFiZWwpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuc2V0KCdsYWJlbCcsIGxhYmVsKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgb3B0aW9ucygpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5wcm9wcy5nZXQoJ29wdGlvbnMnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgb3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5wcm9wcy5zZXQoJ29wdGlvbnMnLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgdmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUucmF3VmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci52YWx1ZS5yYXdWYWx1ZSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIG9uKGV2ZW50TmFtZSwgaGFuZGxlcikge1xuICAgICAgICAgICAgY29uc3QgYmggPSBoYW5kbGVyLmJpbmQodGhpcyk7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfLm9uKGV2ZW50TmFtZSwgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgYmgoZXYuZXZlbnQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFNsaWRlckFwaSBleHRlbmRzIEJsYWRlQXBpIHtcbiAgICAgICAgY29uc3RydWN0b3IoY29udHJvbGxlcikge1xuICAgICAgICAgICAgc3VwZXIoY29udHJvbGxlcik7XG4gICAgICAgICAgICB0aGlzLmVtaXR0ZXJfID0gbmV3IEVtaXR0ZXIoKTtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnZhbHVlLmVtaXR0ZXIub24oJ2NoYW5nZScsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8uZW1pdCgnY2hhbmdlJywge1xuICAgICAgICAgICAgICAgICAgICBldmVudDogbmV3IFRwQ2hhbmdlRXZlbnQodGhpcywgZXYucmF3VmFsdWUpLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGxhYmVsKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8ucHJvcHMuZ2V0KCdsYWJlbCcpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBsYWJlbChsYWJlbCkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5wcm9wcy5zZXQoJ2xhYmVsJywgbGFiZWwpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBtYXhWYWx1ZSgpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5zbGlkZXJDb250cm9sbGVyLnByb3BzLmdldCgnbWF4VmFsdWUnKTtcbiAgICAgICAgfVxuICAgICAgICBzZXQgbWF4VmFsdWUobWF4VmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnNsaWRlckNvbnRyb2xsZXIucHJvcHMuc2V0KCdtYXhWYWx1ZScsIG1heFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbWluVmFsdWUoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIuc2xpZGVyQ29udHJvbGxlci5wcm9wcy5nZXQoJ21pblZhbHVlJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IG1pblZhbHVlKG1pblZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5zbGlkZXJDb250cm9sbGVyLnByb3BzLnNldCgnbWluVmFsdWUnLCBtaW5WYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUucmF3VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJoID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5vbihldmVudE5hbWUsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIGJoKGV2LmV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjbGFzcyBUZXh0QXBpIGV4dGVuZHMgQmxhZGVBcGkge1xuICAgICAgICBjb25zdHJ1Y3Rvcihjb250cm9sbGVyKSB7XG4gICAgICAgICAgICBzdXBlcihjb250cm9sbGVyKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdHRlcl8gPSBuZXcgRW1pdHRlcigpO1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUuZW1pdHRlci5vbignY2hhbmdlJywgKGV2KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5lbWl0KCdjaGFuZ2UnLCB7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50OiBuZXcgVHBDaGFuZ2VFdmVudCh0aGlzLCBldi5yYXdWYWx1ZSksXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBnZXQgbGFiZWwoKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sbGVyXy5wcm9wcy5nZXQoJ2xhYmVsJyk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0IGxhYmVsKGxhYmVsKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnByb3BzLnNldCgnbGFiZWwnLCBsYWJlbCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGZvcm1hdHRlcigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5wcm9wcy5nZXQoJ2Zvcm1hdHRlcicpO1xuICAgICAgICB9XG4gICAgICAgIHNldCBmb3JtYXR0ZXIoZm9ybWF0dGVyKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2xsZXJfLnZhbHVlQ29udHJvbGxlci5wcm9wcy5zZXQoJ2Zvcm1hdHRlcicsIGZvcm1hdHRlcik7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmFsdWVDb250cm9sbGVyLnZhbHVlLnJhd1ZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy52YWx1ZUNvbnRyb2xsZXIudmFsdWUucmF3VmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBvbihldmVudE5hbWUsIGhhbmRsZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGJoID0gaGFuZGxlci5iaW5kKHRoaXMpO1xuICAgICAgICAgICAgdGhpcy5lbWl0dGVyXy5vbihldmVudE5hbWUsIChldikgPT4ge1xuICAgICAgICAgICAgICAgIGJoKGV2LmV2ZW50KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBMaXN0QmxhZGVQbHVnaW4gPSAoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaWQ6ICdsaXN0JyxcbiAgICAgICAgICAgIHR5cGU6ICdibGFkZScsXG4gICAgICAgICAgICBhY2NlcHQocGFyYW1zKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFyc2VQYXJhbXMocGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IHAucmVxdWlyZWQuY3VzdG9tKHBhcnNlTGlzdE9wdGlvbnMpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcC5yZXF1aXJlZC5yYXcsXG4gICAgICAgICAgICAgICAgICAgIHZpZXc6IHAucmVxdWlyZWQuY29uc3RhbnQoJ2xpc3QnKSxcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHAub3B0aW9uYWwuc3RyaW5nLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyB7IHBhcmFtczogcmVzdWx0IH0gOiBudWxsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRyb2xsZXIoYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGljID0gbmV3IExpc3RDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczogbm9ybWFsaXplTGlzdE9wdGlvbnMoYXJncy5wYXJhbXMub3B0aW9ucyksXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY3JlYXRlVmFsdWUoYXJncy5wYXJhbXMudmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGFiZWxlZFZhbHVlQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGJsYWRlOiBhcmdzLmJsYWRlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogYXJncy5wYXJhbXMubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUNvbnRyb2xsZXI6IGljLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFwaShhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyIGluc3RhbmNlb2YgTGFiZWxlZFZhbHVlQ29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlci52YWx1ZUNvbnRyb2xsZXIgaW5zdGFuY2VvZiBMaXN0Q29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGlzdEFwaShhcmdzLmNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9KSgpO1xuXG4gICAgLyoqXG4gICAgICogQGhpZGRlblxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGV4cG9ydFByZXNldEpzb24odGFyZ2V0cykge1xuICAgICAgICByZXR1cm4gdGFyZ2V0cy5yZWR1Y2UoKHJlc3VsdCwgdGFyZ2V0KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihyZXN1bHQsIHtcbiAgICAgICAgICAgICAgICBbdGFyZ2V0LnByZXNldEtleV06IHRhcmdldC5yZWFkKCksXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwge30pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaW1wb3J0UHJlc2V0SnNvbih0YXJnZXRzLCBwcmVzZXQpIHtcbiAgICAgICAgdGFyZ2V0cy5mb3JFYWNoKCh0YXJnZXQpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gcHJlc2V0W3RhcmdldC5wcmVzZXRLZXldO1xuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0YXJnZXQud3JpdGUodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBjbGFzcyBSb290QXBpIGV4dGVuZHMgRm9sZGVyQXBpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBoaWRkZW5cbiAgICAgICAgICovXG4gICAgICAgIGNvbnN0cnVjdG9yKGNvbnRyb2xsZXIsIHBvb2wpIHtcbiAgICAgICAgICAgIHN1cGVyKGNvbnRyb2xsZXIsIHBvb2wpO1xuICAgICAgICB9XG4gICAgICAgIGdldCBlbGVtZW50KCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbGxlcl8udmlldy5lbGVtZW50O1xuICAgICAgICB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbXBvcnRzIGEgcHJlc2V0IG9mIGFsbCBpbnB1dHMuXG4gICAgICAgICAqIEBwYXJhbSBwcmVzZXQgVGhlIHByZXNldCBvYmplY3QgdG8gaW1wb3J0LlxuICAgICAgICAgKi9cbiAgICAgICAgaW1wb3J0UHJlc2V0KHByZXNldCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0cyA9IHRoaXMuY29udHJvbGxlcl8ucmFja0NvbnRyb2xsZXIucmFja1xuICAgICAgICAgICAgICAgIC5maW5kKElucHV0QmluZGluZ0NvbnRyb2xsZXIpXG4gICAgICAgICAgICAgICAgLm1hcCgoaWJjKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGliYy5iaW5kaW5nLnRhcmdldDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaW1wb3J0UHJlc2V0SnNvbih0YXJnZXRzLCBwcmVzZXQpO1xuICAgICAgICAgICAgdGhpcy5yZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEV4cG9ydHMgYSBwcmVzZXQgb2YgYWxsIGlucHV0cy5cbiAgICAgICAgICogQHJldHVybiBBbiBleHBvcnRlZCBwcmVzZXQgb2JqZWN0LlxuICAgICAgICAgKi9cbiAgICAgICAgZXhwb3J0UHJlc2V0KCkge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0cyA9IHRoaXMuY29udHJvbGxlcl8ucmFja0NvbnRyb2xsZXIucmFja1xuICAgICAgICAgICAgICAgIC5maW5kKElucHV0QmluZGluZ0NvbnRyb2xsZXIpXG4gICAgICAgICAgICAgICAgLm1hcCgoaWJjKSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGliYy5iaW5kaW5nLnRhcmdldDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIGV4cG9ydFByZXNldEpzb24odGFyZ2V0cyk7XG4gICAgICAgIH1cbiAgICAgICAgLyoqXG4gICAgICAgICAqIFJlZnJlc2hlcyBhbGwgYmluZGluZ3Mgb2YgdGhlIHBhbmUuXG4gICAgICAgICAqL1xuICAgICAgICByZWZyZXNoKCkge1xuICAgICAgICAgICAgLy8gRm9yY2UtcmVhZCBhbGwgaW5wdXQgYmluZGluZ3NcbiAgICAgICAgICAgIHRoaXMuY29udHJvbGxlcl8ucmFja0NvbnRyb2xsZXIucmFja1xuICAgICAgICAgICAgICAgIC5maW5kKElucHV0QmluZGluZ0NvbnRyb2xsZXIpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKGliYykgPT4ge1xuICAgICAgICAgICAgICAgIGliYy5iaW5kaW5nLnJlYWQoKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gRm9yY2UtcmVhZCBhbGwgbW9uaXRvciBiaW5kaW5nc1xuICAgICAgICAgICAgdGhpcy5jb250cm9sbGVyXy5yYWNrQ29udHJvbGxlci5yYWNrXG4gICAgICAgICAgICAgICAgLmZpbmQoTW9uaXRvckJpbmRpbmdDb250cm9sbGVyKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChtYmMpID0+IHtcbiAgICAgICAgICAgICAgICBtYmMuYmluZGluZy5yZWFkKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNsYXNzIFJvb3RDb250cm9sbGVyIGV4dGVuZHMgRm9sZGVyQ29udHJvbGxlciB7XG4gICAgICAgIGNvbnN0cnVjdG9yKGRvYywgY29uZmlnKSB7XG4gICAgICAgICAgICBzdXBlcihkb2MsIHtcbiAgICAgICAgICAgICAgICBleHBhbmRlZDogY29uZmlnLmV4cGFuZGVkLFxuICAgICAgICAgICAgICAgIGJsYWRlOiBjb25maWcuYmxhZGUsXG4gICAgICAgICAgICAgICAgcHJvcHM6IGNvbmZpZy5wcm9wcyxcbiAgICAgICAgICAgICAgICByb290OiB0cnVlLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogY29uZmlnLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgU2xpZGVyQmxhZGVQbHVnaW4gPSB7XG4gICAgICAgIGlkOiAnc2xpZGVyJyxcbiAgICAgICAgdHlwZTogJ2JsYWRlJyxcbiAgICAgICAgYWNjZXB0KHBhcmFtcykge1xuICAgICAgICAgICAgY29uc3QgcCA9IFBhcmFtc1BhcnNlcnM7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYXJzZVBhcmFtcyhwYXJhbXMsIHtcbiAgICAgICAgICAgICAgICBtYXg6IHAucmVxdWlyZWQubnVtYmVyLFxuICAgICAgICAgICAgICAgIG1pbjogcC5yZXF1aXJlZC5udW1iZXIsXG4gICAgICAgICAgICAgICAgdmlldzogcC5yZXF1aXJlZC5jb25zdGFudCgnc2xpZGVyJyksXG4gICAgICAgICAgICAgICAgZm9ybWF0OiBwLm9wdGlvbmFsLmZ1bmN0aW9uLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBwLm9wdGlvbmFsLnN0cmluZyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogcC5vcHRpb25hbC5udW1iZXIsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyB7IHBhcmFtczogcmVzdWx0IH0gOiBudWxsO1xuICAgICAgICB9LFxuICAgICAgICBjb250cm9sbGVyKGFyZ3MpIHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBjb25zdCB2ID0gKF9hID0gYXJncy5wYXJhbXMudmFsdWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDA7XG4gICAgICAgICAgICBjb25zdCB2YyA9IG5ldyBTbGlkZXJUZXh0Q29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgYmFzZVN0ZXA6IDEsXG4gICAgICAgICAgICAgICAgcGFyc2VyOiBwYXJzZU51bWJlcixcbiAgICAgICAgICAgICAgICBzbGlkZXJQcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIG1heFZhbHVlOiBhcmdzLnBhcmFtcy5tYXgsXG4gICAgICAgICAgICAgICAgICAgIG1pblZhbHVlOiBhcmdzLnBhcmFtcy5taW4sXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGV4dFByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dpbmdTY2FsZTogZ2V0U3VpdGFibGVEcmFnZ2luZ1NjYWxlKHVuZGVmaW5lZCwgdiksXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogKF9iID0gYXJncy5wYXJhbXMuZm9ybWF0KSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBudW1iZXJUb1N0cmluZyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogY3JlYXRlVmFsdWUodiksXG4gICAgICAgICAgICAgICAgdmlld1Byb3BzOiBhcmdzLnZpZXdQcm9wcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBMYWJlbGVkVmFsdWVDb250cm9sbGVyKGFyZ3MuZG9jdW1lbnQsIHtcbiAgICAgICAgICAgICAgICBibGFkZTogYXJncy5ibGFkZSxcbiAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBhcmdzLnBhcmFtcy5sYWJlbCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB2YWx1ZUNvbnRyb2xsZXI6IHZjLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFwaShhcmdzKSB7XG4gICAgICAgICAgICBpZiAoIShhcmdzLmNvbnRyb2xsZXIgaW5zdGFuY2VvZiBMYWJlbGVkVmFsdWVDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyLnZhbHVlQ29udHJvbGxlciBpbnN0YW5jZW9mIFNsaWRlclRleHRDb250cm9sbGVyKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG5ldyBTbGlkZXJBcGkoYXJncy5jb250cm9sbGVyKTtcbiAgICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3QgVGV4dEJsYWRlUGx1Z2luID0gKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlkOiAndGV4dCcsXG4gICAgICAgICAgICB0eXBlOiAnYmxhZGUnLFxuICAgICAgICAgICAgYWNjZXB0KHBhcmFtcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHAgPSBQYXJhbXNQYXJzZXJzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlUGFyYW1zKHBhcmFtcywge1xuICAgICAgICAgICAgICAgICAgICBwYXJzZTogcC5yZXF1aXJlZC5mdW5jdGlvbixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHAucmVxdWlyZWQucmF3LFxuICAgICAgICAgICAgICAgICAgICB2aWV3OiBwLnJlcXVpcmVkLmNvbnN0YW50KCd0ZXh0JyksXG4gICAgICAgICAgICAgICAgICAgIGZvcm1hdDogcC5vcHRpb25hbC5mdW5jdGlvbixcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHAub3B0aW9uYWwuc3RyaW5nLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQgPyB7IHBhcmFtczogcmVzdWx0IH0gOiBudWxsO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRyb2xsZXIoYXJncykge1xuICAgICAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgICAgICBjb25zdCBpYyA9IG5ldyBUZXh0Q29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIHBhcnNlcjogYXJncy5wYXJhbXMucGFyc2UsXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBWYWx1ZU1hcC5mcm9tT2JqZWN0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdHRlcjogKF9hID0gYXJncy5wYXJhbXMuZm9ybWF0KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiAoKHYpID0+IFN0cmluZyh2KSksXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY3JlYXRlVmFsdWUoYXJncy5wYXJhbXMudmFsdWUpLFxuICAgICAgICAgICAgICAgICAgICB2aWV3UHJvcHM6IGFyZ3Mudmlld1Byb3BzLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgTGFiZWxlZFZhbHVlQ29udHJvbGxlcihhcmdzLmRvY3VtZW50LCB7XG4gICAgICAgICAgICAgICAgICAgIGJsYWRlOiBhcmdzLmJsYWRlLFxuICAgICAgICAgICAgICAgICAgICBwcm9wczogVmFsdWVNYXAuZnJvbU9iamVjdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogYXJncy5wYXJhbXMubGFiZWwsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZUNvbnRyb2xsZXI6IGljLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGFwaShhcmdzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCEoYXJncy5jb250cm9sbGVyIGluc3RhbmNlb2YgTGFiZWxlZFZhbHVlQ29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghKGFyZ3MuY29udHJvbGxlci52YWx1ZUNvbnRyb2xsZXIgaW5zdGFuY2VvZiBUZXh0Q29udHJvbGxlcikpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgVGV4dEFwaShhcmdzLmNvbnRyb2xsZXIpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9KSgpO1xuXG4gICAgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdFdyYXBwZXJFbGVtZW50KGRvYykge1xuICAgICAgICBjb25zdCBlbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBlbGVtLmNsYXNzTGlzdC5hZGQoQ2xhc3NOYW1lKCdkZncnKSgpKTtcbiAgICAgICAgaWYgKGRvYy5ib2R5KSB7XG4gICAgICAgICAgICBkb2MuYm9keS5hcHBlbmRDaGlsZChlbGVtKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZWxlbTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZW1iZWRTdHlsZShkb2MsIGlkLCBjc3MpIHtcbiAgICAgICAgaWYgKGRvYy5xdWVyeVNlbGVjdG9yKGBzdHlsZVtkYXRhLXRwLXN0eWxlPSR7aWR9XWApKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3R5bGVFbGVtID0gZG9jLmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7XG4gICAgICAgIHN0eWxlRWxlbS5kYXRhc2V0LnRwU3R5bGUgPSBpZDtcbiAgICAgICAgc3R5bGVFbGVtLnRleHRDb250ZW50ID0gY3NzO1xuICAgICAgICBkb2MuaGVhZC5hcHBlbmRDaGlsZChzdHlsZUVsZW0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgcm9vdCBwYW5lIG9mIFR3ZWFrcGFuZS5cbiAgICAgKi9cbiAgICBjbGFzcyBQYW5lIGV4dGVuZHMgUm9vdEFwaSB7XG4gICAgICAgIGNvbnN0cnVjdG9yKG9wdF9jb25maWcpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IG9wdF9jb25maWcgfHwge307XG4gICAgICAgICAgICBjb25zdCBkb2MgPSAoX2EgPSBjb25maWcuZG9jdW1lbnQpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGdldFdpbmRvd0RvY3VtZW50KCk7XG4gICAgICAgICAgICBjb25zdCBwb29sID0gY3JlYXRlRGVmYXVsdFBsdWdpblBvb2woKTtcbiAgICAgICAgICAgIGNvbnN0IHJvb3RDb250cm9sbGVyID0gbmV3IFJvb3RDb250cm9sbGVyKGRvYywge1xuICAgICAgICAgICAgICAgIGV4cGFuZGVkOiBjb25maWcuZXhwYW5kZWQsXG4gICAgICAgICAgICAgICAgYmxhZGU6IGNyZWF0ZUJsYWRlKCksXG4gICAgICAgICAgICAgICAgcHJvcHM6IFZhbHVlTWFwLmZyb21PYmplY3Qoe1xuICAgICAgICAgICAgICAgICAgICB0aXRsZTogY29uZmlnLnRpdGxlLFxuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHZpZXdQcm9wczogVmlld1Byb3BzLmNyZWF0ZSgpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzdXBlcihyb290Q29udHJvbGxlciwgcG9vbCk7XG4gICAgICAgICAgICB0aGlzLnBvb2xfID0gcG9vbDtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyRWxlbV8gPSBjb25maWcuY29udGFpbmVyIHx8IGNyZWF0ZURlZmF1bHRXcmFwcGVyRWxlbWVudChkb2MpO1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXJFbGVtXy5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpO1xuICAgICAgICAgICAgdGhpcy5kb2NfID0gZG9jO1xuICAgICAgICAgICAgdGhpcy51c2VzRGVmYXVsdFdyYXBwZXJfID0gIWNvbmZpZy5jb250YWluZXI7XG4gICAgICAgICAgICB0aGlzLnNldFVwRGVmYXVsdFBsdWdpbnNfKCk7XG4gICAgICAgIH1cbiAgICAgICAgZ2V0IGRvY3VtZW50KCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmRvY18pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLmFscmVhZHlEaXNwb3NlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZG9jXztcbiAgICAgICAgfVxuICAgICAgICBkaXNwb3NlKCkge1xuICAgICAgICAgICAgY29uc3QgY29udGFpbmVyRWxlbSA9IHRoaXMuY29udGFpbmVyRWxlbV87XG4gICAgICAgICAgICBpZiAoIWNvbnRhaW5lckVsZW0pIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBUcEVycm9yLmFscmVhZHlEaXNwb3NlZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMudXNlc0RlZmF1bHRXcmFwcGVyXykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmVudEVsZW0gPSBjb250YWluZXJFbGVtLnBhcmVudEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgaWYgKHBhcmVudEVsZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50RWxlbS5yZW1vdmVDaGlsZChjb250YWluZXJFbGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lckVsZW1fID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMuZG9jXyA9IG51bGw7XG4gICAgICAgICAgICBzdXBlci5kaXNwb3NlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmVnaXN0ZXJQbHVnaW4oYnVuZGxlKSB7XG4gICAgICAgICAgICBjb25zdCBwbHVnaW5zID0gJ3BsdWdpbicgaW4gYnVuZGxlXG4gICAgICAgICAgICAgICAgPyBbYnVuZGxlLnBsdWdpbl1cbiAgICAgICAgICAgICAgICA6ICdwbHVnaW5zJyBpbiBidW5kbGVcbiAgICAgICAgICAgICAgICAgICAgPyBidW5kbGUucGx1Z2luc1xuICAgICAgICAgICAgICAgICAgICA6IFtdO1xuICAgICAgICAgICAgcGx1Z2lucy5mb3JFYWNoKChwKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb29sXy5yZWdpc3RlcihwKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtYmVkUGx1Z2luU3R5bGVfKHApO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZW1iZWRQbHVnaW5TdHlsZV8ocGx1Z2luKSB7XG4gICAgICAgICAgICBpZiAocGx1Z2luLmNzcykge1xuICAgICAgICAgICAgICAgIGVtYmVkU3R5bGUodGhpcy5kb2N1bWVudCwgYHBsdWdpbi0ke3BsdWdpbi5pZH1gLCBwbHVnaW4uY3NzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBzZXRVcERlZmF1bHRQbHVnaW5zXygpIHtcbiAgICAgICAgICAgIC8vIE5PVEU6IFRoaXMgc3RyaW5nIGxpdGVyYWwgd2lsbCBiZSByZXBsYWNlZCB3aXRoIHRoZSBkZWZhdWx0IENTUyBieSBSb2xsdXAgYXQgdGhlIGNvbXBpbGF0aW9uIHRpbWVcbiAgICAgICAgICAgIGVtYmVkU3R5bGUodGhpcy5kb2N1bWVudCwgJ2RlZmF1bHQnLCAnLnRwLWxzdHZfcywudHAtYnRudl9iLC50cC1wMmR2X2IsLnRwLWNvbHN3dl9zdywudHAtcDJkcHZfcCwudHAtdHh0dl9pLC50cC1ncmx2X2csLnRwLXNnbHZfaSwudHAtbWxsdl9pLC50cC1mbGR2X2IsLnRwLXJvdHZfYiwudHAtY2tidl9pLC50cC1jb2x0eHR2X21zLC50cC10Yml2X2J7LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmU7LW1vei1hcHBlYXJhbmNlOm5vbmU7YXBwZWFyYW5jZTpub25lO2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Ym9yZGVyLXdpZHRoOjA7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6aW5oZXJpdDtmb250LXdlaWdodDppbmhlcml0O21hcmdpbjowO291dGxpbmU6bm9uZTtwYWRkaW5nOjB9LnRwLWxzdHZfcywudHAtYnRudl9iLC50cC1wMmR2X2J7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1idG4tYmcpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtjb2xvcjp2YXIoLS1idG4tZmcpO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7Zm9udC13ZWlnaHQ6Ym9sZDtoZWlnaHQ6dmFyKC0tYmxkLXVzKTtsaW5lLWhlaWdodDp2YXIoLS1ibGQtdXMpO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0udHAtbHN0dl9zOmhvdmVyLC50cC1idG52X2I6aG92ZXIsLnRwLXAyZHZfYjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZy1oKX0udHAtbHN0dl9zOmZvY3VzLC50cC1idG52X2I6Zm9jdXMsLnRwLXAyZHZfYjpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZy1mKX0udHAtbHN0dl9zOmFjdGl2ZSwudHAtYnRudl9iOmFjdGl2ZSwudHAtcDJkdl9iOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZy1hKX0udHAtbHN0dl9zOmRpc2FibGVkLC50cC1idG52X2I6ZGlzYWJsZWQsLnRwLXAyZHZfYjpkaXNhYmxlZHtvcGFjaXR5OjAuNX0udHAtY29sc3d2X3N3LC50cC1wMmRwdl9wLC50cC10eHR2X2l7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZyk7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb2xvcjp2YXIoLS1pbi1mZyk7Zm9udC1mYW1pbHk6aW5oZXJpdDtoZWlnaHQ6dmFyKC0tYmxkLXVzKTtsaW5lLWhlaWdodDp2YXIoLS1ibGQtdXMpO21pbi13aWR0aDowO3dpZHRoOjEwMCV9LnRwLWNvbHN3dl9zdzpob3ZlciwudHAtcDJkcHZfcDpob3ZlciwudHAtdHh0dl9pOmhvdmVye2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctaCl9LnRwLWNvbHN3dl9zdzpmb2N1cywudHAtcDJkcHZfcDpmb2N1cywudHAtdHh0dl9pOmZvY3Vze2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctZil9LnRwLWNvbHN3dl9zdzphY3RpdmUsLnRwLXAyZHB2X3A6YWN0aXZlLC50cC10eHR2X2k6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctYSl9LnRwLWNvbHN3dl9zdzpkaXNhYmxlZCwudHAtcDJkcHZfcDpkaXNhYmxlZCwudHAtdHh0dl9pOmRpc2FibGVke29wYWNpdHk6MC41fS50cC1ncmx2X2csLnRwLXNnbHZfaSwudHAtbWxsdl9pe2JhY2tncm91bmQtY29sb3I6dmFyKC0tbW8tYmcpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Y29sb3I6dmFyKC0tbW8tZmcpO2hlaWdodDp2YXIoLS1ibGQtdXMpO3dpZHRoOjEwMCV9LnRwLXJvdHZ7LS1mb250LWZhbWlseTogdmFyKC0tdHAtZm9udC1mYW1pbHksIFJvYm90byBNb25vLFNvdXJjZSBDb2RlIFBybyxNZW5sbyxDb3VyaWVyLG1vbm9zcGFjZSk7LS1icy1icjogdmFyKC0tdHAtYmFzZS1ib3JkZXItcmFkaXVzLCA2cHgpOy0tY250LWgtcDogdmFyKC0tdHAtY29udGFpbmVyLWhvcml6b250YWwtcGFkZGluZywgNHB4KTstLWNudC12LXA6IHZhcigtLXRwLWNvbnRhaW5lci12ZXJ0aWNhbC1wYWRkaW5nLCA0cHgpOy0tZWxtLWJyOiB2YXIoLS10cC1lbGVtZW50LWJvcmRlci1yYWRpdXMsIDJweCk7LS1ibGQtczogdmFyKC0tdHAtYmxhZGUtc3BhY2luZywgNHB4KTstLWJsZC11czogdmFyKC0tdHAtYmxhZGUtdW5pdC1zaXplLCAyMHB4KTstLWJzLWJnOiB2YXIoLS10cC1iYXNlLWJhY2tncm91bmQtY29sb3IsICMyZjMxMzcpOy0tYnMtc2g6IHZhcigtLXRwLWJhc2Utc2hhZG93LWNvbG9yLCByZ2JhKDAsMCwwLDAuMikpOy0tYnRuLWJnOiB2YXIoLS10cC1idXR0b24tYmFja2dyb3VuZC1jb2xvciwgI2FkYWZiOCk7LS1idG4tYmctYTogdmFyKC0tdHAtYnV0dG9uLWJhY2tncm91bmQtY29sb3ItYWN0aXZlLCAjZDZkN2RiKTstLWJ0bi1iZy1mOiB2YXIoLS10cC1idXR0b24tYmFja2dyb3VuZC1jb2xvci1mb2N1cywgI2M4Y2FkMCk7LS1idG4tYmctaDogdmFyKC0tdHAtYnV0dG9uLWJhY2tncm91bmQtY29sb3ItaG92ZXIsICNiYmJjYzQpOy0tYnRuLWZnOiB2YXIoLS10cC1idXR0b24tZm9yZWdyb3VuZC1jb2xvciwgIzJmMzEzNyk7LS1jbnQtYmc6IHZhcigtLXRwLWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yLCByZ2JhKDE4NywxODgsMTk2LDAuMSkpOy0tY250LWJnLWE6IHZhcigtLXRwLWNvbnRhaW5lci1iYWNrZ3JvdW5kLWNvbG9yLWFjdGl2ZSwgcmdiYSgxODcsMTg4LDE5NiwwLjI1KSk7LS1jbnQtYmctZjogdmFyKC0tdHAtY29udGFpbmVyLWJhY2tncm91bmQtY29sb3ItZm9jdXMsIHJnYmEoMTg3LDE4OCwxOTYsMC4yKSk7LS1jbnQtYmctaDogdmFyKC0tdHAtY29udGFpbmVyLWJhY2tncm91bmQtY29sb3ItaG92ZXIsIHJnYmEoMTg3LDE4OCwxOTYsMC4xNSkpOy0tY250LWZnOiB2YXIoLS10cC1jb250YWluZXItZm9yZWdyb3VuZC1jb2xvciwgI2JiYmNjNCk7LS1pbi1iZzogdmFyKC0tdHAtaW5wdXQtYmFja2dyb3VuZC1jb2xvciwgcmdiYSgwLDAsMCwwLjIpKTstLWluLWJnLWE6IHZhcigtLXRwLWlucHV0LWJhY2tncm91bmQtY29sb3ItYWN0aXZlLCByZ2JhKDAsMCwwLDAuMzUpKTstLWluLWJnLWY6IHZhcigtLXRwLWlucHV0LWJhY2tncm91bmQtY29sb3ItZm9jdXMsIHJnYmEoMCwwLDAsMC4zKSk7LS1pbi1iZy1oOiB2YXIoLS10cC1pbnB1dC1iYWNrZ3JvdW5kLWNvbG9yLWhvdmVyLCByZ2JhKDAsMCwwLDAuMjUpKTstLWluLWZnOiB2YXIoLS10cC1pbnB1dC1mb3JlZ3JvdW5kLWNvbG9yLCAjYmJiY2M0KTstLWxibC1mZzogdmFyKC0tdHAtbGFiZWwtZm9yZWdyb3VuZC1jb2xvciwgcmdiYSgxODcsMTg4LDE5NiwwLjcpKTstLW1vLWJnOiB2YXIoLS10cC1tb25pdG9yLWJhY2tncm91bmQtY29sb3IsIHJnYmEoMCwwLDAsMC4yKSk7LS1tby1mZzogdmFyKC0tdHAtbW9uaXRvci1mb3JlZ3JvdW5kLWNvbG9yLCByZ2JhKDE4NywxODgsMTk2LDAuNykpOy0tZ3J2LWZnOiB2YXIoLS10cC1ncm9vdmUtZm9yZWdyb3VuZC1jb2xvciwgcmdiYSgwLDAsMCwwLjIpKX0udHAtZmxkdl9jPi50cC1jbnR2LnRwLXYtbHN0LC50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWNudHYudHAtdi1sc3QsLnRwLXJvdHZfYz4udHAtY250di50cC12LWxzdHttYXJnaW4tYm90dG9tOmNhbGMoLTEgKiB2YXIoLS1jbnQtdi1wKSl9LnRwLWZsZHZfYz4udHAtZmxkdi50cC12LWxzdCAudHAtZmxkdl9jLC50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWZsZHYudHAtdi1sc3QgLnRwLWZsZHZfYywudHAtcm90dl9jPi50cC1mbGR2LnRwLXYtbHN0IC50cC1mbGR2X2N7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czowfS50cC1mbGR2X2M+LnRwLWZsZHYudHAtdi1sc3QgLnRwLWZsZHZfYiwudHAtdGFidl9jIC50cC1icmt2Pi50cC1mbGR2LnRwLXYtbHN0IC50cC1mbGR2X2IsLnRwLXJvdHZfYz4udHAtZmxkdi50cC12LWxzdCAudHAtZmxkdl9ie2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0udHAtZmxkdl9jPio6bm90KC50cC12LWZzdCksLnRwLXRhYnZfYyAudHAtYnJrdj4qOm5vdCgudHAtdi1mc3QpLC50cC1yb3R2X2M+Kjpub3QoLnRwLXYtZnN0KXttYXJnaW4tdG9wOnZhcigtLWJsZC1zKX0udHAtZmxkdl9jPi50cC1zcHJ2Om5vdCgudHAtdi1mc3QpLC50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLXNwcnY6bm90KC50cC12LWZzdCksLnRwLXJvdHZfYz4udHAtc3Bydjpub3QoLnRwLXYtZnN0KSwudHAtZmxkdl9jPi50cC1jbnR2Om5vdCgudHAtdi1mc3QpLC50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWNudHY6bm90KC50cC12LWZzdCksLnRwLXJvdHZfYz4udHAtY250djpub3QoLnRwLXYtZnN0KXttYXJnaW4tdG9wOnZhcigtLWNudC12LXApfS50cC1mbGR2X2M+LnRwLXNwcnYrKjpub3QoLnRwLXYtaGlkZGVuKSwudHAtdGFidl9jIC50cC1icmt2Pi50cC1zcHJ2Kyo6bm90KC50cC12LWhpZGRlbiksLnRwLXJvdHZfYz4udHAtc3BydisqOm5vdCgudHAtdi1oaWRkZW4pLC50cC1mbGR2X2M+LnRwLWNudHYrKjpub3QoLnRwLXYtaGlkZGVuKSwudHAtdGFidl9jIC50cC1icmt2Pi50cC1jbnR2Kyo6bm90KC50cC12LWhpZGRlbiksLnRwLXJvdHZfYz4udHAtY250disqOm5vdCgudHAtdi1oaWRkZW4pe21hcmdpbi10b3A6dmFyKC0tY250LXYtcCl9LnRwLWZsZHZfYz4udHAtc3Bydjpub3QoLnRwLXYtaGlkZGVuKSsudHAtc3BydiwudHAtdGFidl9jIC50cC1icmt2Pi50cC1zcHJ2Om5vdCgudHAtdi1oaWRkZW4pKy50cC1zcHJ2LC50cC1yb3R2X2M+LnRwLXNwcnY6bm90KC50cC12LWhpZGRlbikrLnRwLXNwcnYsLnRwLWZsZHZfYz4udHAtY250djpub3QoLnRwLXYtaGlkZGVuKSsudHAtY250diwudHAtdGFidl9jIC50cC1icmt2Pi50cC1jbnR2Om5vdCgudHAtdi1oaWRkZW4pKy50cC1jbnR2LC50cC1yb3R2X2M+LnRwLWNudHY6bm90KC50cC12LWhpZGRlbikrLnRwLWNudHZ7bWFyZ2luLXRvcDowfS50cC1mbGR2X2M+LnRwLWNudHYsLnRwLXRhYnZfYyAudHAtYnJrdj4udHAtY250dnttYXJnaW4tbGVmdDo0cHh9LnRwLWZsZHZfYz4udHAtZmxkdj4udHAtZmxkdl9iLC50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWZsZHY+LnRwLWZsZHZfYntib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWVsbS1icik7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1lbG0tYnIpfS50cC1mbGR2X2M+LnRwLWZsZHYudHAtZmxkdi1leHBhbmRlZD4udHAtZmxkdl9iLC50cC10YWJ2X2MgLnRwLWJya3Y+LnRwLWZsZHYudHAtZmxkdi1leHBhbmRlZD4udHAtZmxkdl9ie2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MH0udHAtZmxkdl9jIC50cC1mbGR2Pi50cC1mbGR2X2MsLnRwLXRhYnZfYyAudHAtYnJrdiAudHAtZmxkdj4udHAtZmxkdl9je2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tZWxtLWJyKX0udHAtZmxkdl9jPi50cC10YWJ2Pi50cC10YWJ2X2ksLnRwLXRhYnZfYyAudHAtYnJrdj4udHAtdGFidj4udHAtdGFidl9pe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tZWxtLWJyKX0udHAtZmxkdl9jIC50cC10YWJ2Pi50cC10YWJ2X2MsLnRwLXRhYnZfYyAudHAtYnJrdiAudHAtdGFidj4udHAtdGFidl9je2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tZWxtLWJyKX0udHAtZmxkdl9iLC50cC1yb3R2X2J7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmcpO2NvbG9yOnZhcigtLWNudC1mZyk7Y3Vyc29yOnBvaW50ZXI7ZGlzcGxheTpibG9jaztoZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KTtsaW5lLWhlaWdodDpjYWxjKHZhcigtLWJsZC11cykgKyA0cHgpO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1jbnQtaC1wKSArIDhweCk7cGFkZGluZy1yaWdodDpjYWxjKDJweCAqIDIgKyB2YXIoLS1ibGQtdXMpICsgdmFyKC0tY250LWgtcCkpO3Bvc2l0aW9uOnJlbGF0aXZlO3RleHQtYWxpZ246bGVmdDt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcDt3aWR0aDoxMDAlO3RyYW5zaXRpb246Ym9yZGVyLXJhZGl1cyAuMnMgZWFzZS1pbi1vdXQgLjJzfS50cC1mbGR2X2I6aG92ZXIsLnRwLXJvdHZfYjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZy1oKX0udHAtZmxkdl9iOmZvY3VzLC50cC1yb3R2X2I6Zm9jdXN7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmctZil9LnRwLWZsZHZfYjphY3RpdmUsLnRwLXJvdHZfYjphY3RpdmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmctYSl9LnRwLWZsZHZfYjpkaXNhYmxlZCwudHAtcm90dl9iOmRpc2FibGVke29wYWNpdHk6MC41fS50cC1mbGR2X20sLnRwLXJvdHZfbXtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCB2YXIoLS1jbnQtZmcpLCB2YXIoLS1jbnQtZmcpIDJweCwgdHJhbnNwYXJlbnQgMnB4LCB0cmFuc3BhcmVudCA0cHgsIHZhcigtLWNudC1mZykgNHB4KTtib3JkZXItcmFkaXVzOjJweDtib3R0b206MDtjb250ZW50OlxcJ1xcJztkaXNwbGF5OmJsb2NrO2hlaWdodDo2cHg7cmlnaHQ6Y2FsYyh2YXIoLS1jbnQtaC1wKSArICh2YXIoLS1ibGQtdXMpICsgNHB4IC0gNnB4KSAvIDIgLSAycHgpO21hcmdpbjphdXRvO29wYWNpdHk6MC41O3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3RyYW5zZm9ybTpyb3RhdGUoOTBkZWcpO3RyYW5zaXRpb246dHJhbnNmb3JtIC4ycyBlYXNlLWluLW91dDt3aWR0aDo2cHh9LnRwLWZsZHYudHAtZmxkdi1leHBhbmRlZD4udHAtZmxkdl9iPi50cC1mbGR2X20sLnRwLXJvdHYudHAtcm90di1leHBhbmRlZCAudHAtcm90dl9te3RyYW5zZm9ybTpub25lfS50cC1mbGR2X2MsLnRwLXJvdHZfY3tib3gtc2l6aW5nOmJvcmRlci1ib3g7aGVpZ2h0OjA7b3BhY2l0eTowO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWJvdHRvbTowO3BhZGRpbmctdG9wOjA7cG9zaXRpb246cmVsYXRpdmU7dHJhbnNpdGlvbjpoZWlnaHQgLjJzIGVhc2UtaW4tb3V0LG9wYWNpdHkgLjJzIGxpbmVhcixwYWRkaW5nIC4ycyBlYXNlLWluLW91dH0udHAtZmxkdi50cC1mbGR2LWNwbDpub3QoLnRwLWZsZHYtZXhwYW5kZWQpPi50cC1mbGR2X2MsLnRwLXJvdHYudHAtcm90di1jcGw6bm90KC50cC1yb3R2LWV4cGFuZGVkKSAudHAtcm90dl9je2Rpc3BsYXk6bm9uZX0udHAtZmxkdi50cC1mbGR2LWV4cGFuZGVkPi50cC1mbGR2X2MsLnRwLXJvdHYudHAtcm90di1leHBhbmRlZCAudHAtcm90dl9je29wYWNpdHk6MTtwYWRkaW5nLWJvdHRvbTp2YXIoLS1jbnQtdi1wKTtwYWRkaW5nLXRvcDp2YXIoLS1jbnQtdi1wKTt0cmFuc2Zvcm06bm9uZTtvdmVyZmxvdzp2aXNpYmxlO3RyYW5zaXRpb246aGVpZ2h0IC4ycyBlYXNlLWluLW91dCxvcGFjaXR5IC4ycyBsaW5lYXIgLjJzLHBhZGRpbmcgLjJzIGVhc2UtaW4tb3V0fS50cC1jb2x0eHR2X20sLnRwLWxzdHZ7cG9zaXRpb246cmVsYXRpdmV9LnRwLWxzdHZfc3twYWRkaW5nOjAgMjBweCAwIDRweDt3aWR0aDoxMDAlfS50cC1jb2x0eHR2X21tLC50cC1sc3R2X217Ym90dG9tOjA7bWFyZ2luOmF1dG87cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDoycHg7dG9wOjB9LnRwLWNvbHR4dHZfbW0gc3ZnLC50cC1sc3R2X20gc3Zne2JvdHRvbTowO2hlaWdodDoxNnB4O21hcmdpbjphdXRvO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7d2lkdGg6MTZweH0udHAtY29sdHh0dl9tbSBzdmcgcGF0aCwudHAtbHN0dl9tIHN2ZyBwYXRoe2ZpbGw6Y3VycmVudENvbG9yfS50cC1jb2x0eHR2X3csLnRwLXBuZHR4dHZ7ZGlzcGxheTpmbGV4fS50cC1jb2x0eHR2X2MsLnRwLXBuZHR4dHZfYXt3aWR0aDoxMDAlfS50cC1jb2x0eHR2X2MrLnRwLWNvbHR4dHZfYywudHAtcG5kdHh0dl9hKy50cC1jb2x0eHR2X2MsLnRwLWNvbHR4dHZfYysudHAtcG5kdHh0dl9hLC50cC1wbmR0eHR2X2ErLnRwLXBuZHR4dHZfYXttYXJnaW4tbGVmdDoycHh9LnRwLWJ0bnZfYnt3aWR0aDoxMDAlfS50cC1idG52X3R7dGV4dC1hbGlnbjpjZW50ZXJ9LnRwLWNrYnZfbHtkaXNwbGF5OmJsb2NrO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1ja2J2X2l7bGVmdDowO29wYWNpdHk6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH0udHAtY2tidl93e2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmcpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtjdXJzb3I6cG9pbnRlcjtkaXNwbGF5OmJsb2NrO2hlaWdodDp2YXIoLS1ibGQtdXMpO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOnZhcigtLWJsZC11cyl9LnRwLWNrYnZfdyBzdmd7Ym90dG9tOjA7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTZweDtsZWZ0OjA7bWFyZ2luOmF1dG87b3BhY2l0eTowO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjA7d2lkdGg6MTZweH0udHAtY2tidl93IHN2ZyBwYXRoe2ZpbGw6bm9uZTtzdHJva2U6dmFyKC0taW4tZmcpO3N0cm9rZS13aWR0aDoyfS50cC1ja2J2X2k6aG92ZXIrLnRwLWNrYnZfd3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWgpfS50cC1ja2J2X2k6Zm9jdXMrLnRwLWNrYnZfd3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWYpfS50cC1ja2J2X2k6YWN0aXZlKy50cC1ja2J2X3d7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1iZy1hKX0udHAtY2tidl9pOmNoZWNrZWQrLnRwLWNrYnZfdyBzdmd7b3BhY2l0eToxfS50cC1ja2J2LnRwLXYtZGlzYWJsZWQgLnRwLWNrYnZfd3tvcGFjaXR5OjAuNX0udHAtY29sdntwb3NpdGlvbjpyZWxhdGl2ZX0udHAtY29sdl9oe2Rpc3BsYXk6ZmxleH0udHAtY29sdl9ze2ZsZXgtZ3JvdzowO2ZsZXgtc2hyaW5rOjA7d2lkdGg6dmFyKC0tYmxkLXVzKX0udHAtY29sdl90e2ZsZXg6MTttYXJnaW4tbGVmdDo0cHh9LnRwLWNvbHZfcHtoZWlnaHQ6MDttYXJnaW4tdG9wOjA7b3BhY2l0eTowO292ZXJmbG93OmhpZGRlbjt0cmFuc2l0aW9uOmhlaWdodCAuMnMgZWFzZS1pbi1vdXQsb3BhY2l0eSAuMnMgbGluZWFyLG1hcmdpbiAuMnMgZWFzZS1pbi1vdXR9LnRwLWNvbHYudHAtY29sdi1jcGwgLnRwLWNvbHZfcHtvdmVyZmxvdzp2aXNpYmxlfS50cC1jb2x2LnRwLWNvbHYtZXhwYW5kZWQgLnRwLWNvbHZfcHttYXJnaW4tdG9wOnZhcigtLWJsZC1zKTtvcGFjaXR5OjF9LnRwLWNvbHYgLnRwLXBvcHZ7bGVmdDpjYWxjKC0xICogdmFyKC0tY250LWgtcCkpO3JpZ2h0OmNhbGMoLTEgKiB2YXIoLS1jbnQtaC1wKSk7dG9wOnZhcigtLWJsZC11cyl9LnRwLWNvbHB2X2gsLnRwLWNvbHB2X2Fwe21hcmdpbi1sZWZ0OjZweDttYXJnaW4tcmlnaHQ6NnB4fS50cC1jb2xwdl9oe21hcmdpbi10b3A6dmFyKC0tYmxkLXMpfS50cC1jb2xwdl9yZ2J7ZGlzcGxheTpmbGV4O21hcmdpbi10b3A6dmFyKC0tYmxkLXMpO3dpZHRoOjEwMCV9LnRwLWNvbHB2X2F7ZGlzcGxheTpmbGV4O21hcmdpbi10b3A6dmFyKC0tY250LXYtcCk7cGFkZGluZy10b3A6Y2FsYyh2YXIoLS1jbnQtdi1wKSArIDJweCk7cG9zaXRpb246cmVsYXRpdmV9LnRwLWNvbHB2X2E6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tZ3J2LWZnKTtjb250ZW50OlxcJ1xcJztoZWlnaHQ6MnB4O2xlZnQ6Y2FsYygtMSAqIHZhcigtLWNudC1oLXApKTtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDpjYWxjKC0xICogdmFyKC0tY250LWgtcCkpO3RvcDowfS50cC1jb2xwdl9hcHthbGlnbi1pdGVtczpjZW50ZXI7ZGlzcGxheTpmbGV4O2ZsZXg6M30udHAtY29scHZfYXR7ZmxleDoxO21hcmdpbi1sZWZ0OjRweH0udHAtc3Zwdntib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7b3V0bGluZTpub25lO292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0udHAtc3Zwdl9je2N1cnNvcjpjcm9zc2hhaXI7ZGlzcGxheTpibG9jaztoZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpICogNCk7d2lkdGg6MTAwJX0udHAtc3Zwdl9te2JvcmRlci1yYWRpdXM6MTAwJTtib3JkZXI6cmdiYSgyNTUsMjU1LDI1NSwwLjc1KSBzb2xpZCAycHg7Ym94LXNpemluZzpib3JkZXItYm94O2ZpbHRlcjpkcm9wLXNoYWRvdygwIDAgMXB4IHJnYmEoMCwwLDAsMC4zKSk7aGVpZ2h0OjEycHg7bWFyZ2luLWxlZnQ6LTZweDttYXJnaW4tdG9wOi02cHg7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoxMnB4fS50cC1zdnB2OmZvY3VzIC50cC1zdnB2X217Ym9yZGVyLWNvbG9yOiNmZmZ9LnRwLWhwbHZ7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLWJsZC11cyk7b3V0bGluZTpub25lO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1ocGx2X2N7YmFja2dyb3VuZC1pbWFnZTp1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFFQUFBQUFCQ0FZQUFBQnViYWdYQUFBQVEwbEVRVlFvVTJQOHo4RHduMEdDZ1FFRGkyT0svUkJnWUhqQmdJcGZvdkZoOGo4WUJJZ3pGR1F4dXFFZ1BoYURPVDVnT2hQa2RDeE9aZUJnK0lERlpaaUdBZ0NhU1NNWXRjUkhMZ0FBQUFCSlJVNUVya0pnZ2c9PSk7YmFja2dyb3VuZC1wb3NpdGlvbjpsZWZ0IHRvcDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7YmFja2dyb3VuZC1zaXplOjEwMCUgMTAwJTtib3JkZXItcmFkaXVzOjJweDtkaXNwbGF5OmJsb2NrO2hlaWdodDo0cHg7bGVmdDowO21hcmdpbi10b3A6LTJweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOjEwMCV9LnRwLWhwbHZfbXtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Ym9yZGVyOnJnYmEoMjU1LDI1NSwyNTUsMC43NSkgc29saWQgMnB4O2JveC1zaGFkb3c6MCAwIDJweCByZ2JhKDAsMCwwLDAuMSk7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDoxMnB4O2xlZnQ6NTAlO21hcmdpbi1sZWZ0Oi02cHg7bWFyZ2luLXRvcDotNnB4O3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTt3aWR0aDoxMnB4fS50cC1ocGx2OmZvY3VzIC50cC1ocGx2X217Ym9yZGVyLWNvbG9yOiNmZmZ9LnRwLWFwbHZ7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLWJsZC11cyk7b3V0bGluZTpub25lO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOjEwMCV9LnRwLWFwbHZfYntiYWNrZ3JvdW5kLWNvbG9yOiNmZmY7YmFja2dyb3VuZC1pbWFnZTpsaW5lYXItZ3JhZGllbnQodG8gdG9wIHJpZ2h0LCAjZGRkIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsICNkZGQgNzUlKSxsaW5lYXItZ3JhZGllbnQodG8gdG9wIHJpZ2h0LCAjZGRkIDI1JSwgdHJhbnNwYXJlbnQgMjUlLCB0cmFuc3BhcmVudCA3NSUsICNkZGQgNzUlKTtiYWNrZ3JvdW5kLXNpemU6NHB4IDRweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMCwycHggMnB4O2JvcmRlci1yYWRpdXM6MnB4O2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjRweDtsZWZ0OjA7bWFyZ2luLXRvcDotMnB4O292ZXJmbG93OmhpZGRlbjtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOjEwMCV9LnRwLWFwbHZfY3tib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0udHAtYXBsdl9te2JhY2tncm91bmQtY29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0byB0b3AgcmlnaHQsICNkZGQgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDc1JSwgI2RkZCA3NSUpLGxpbmVhci1ncmFkaWVudCh0byB0b3AgcmlnaHQsICNkZGQgMjUlLCB0cmFuc3BhcmVudCAyNSUsIHRyYW5zcGFyZW50IDc1JSwgI2RkZCA3NSUpO2JhY2tncm91bmQtc2l6ZToxMnB4IDEycHg7YmFja2dyb3VuZC1wb3NpdGlvbjowIDAsNnB4IDZweDtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Ym94LXNoYWRvdzowIDAgMnB4IHJnYmEoMCwwLDAsMC4xKTtoZWlnaHQ6MTJweDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotNnB4O21hcmdpbi10b3A6LTZweDtvdmVyZmxvdzpoaWRkZW47cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOjEycHh9LnRwLWFwbHZfcHtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Ym9yZGVyOnJnYmEoMjU1LDI1NSwyNTUsMC43NSkgc29saWQgMnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtib3R0b206MDtsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0udHAtYXBsdjpmb2N1cyAudHAtYXBsdl9we2JvcmRlci1jb2xvcjojZmZmfS50cC1jb2xzd3Z7YmFja2dyb3VuZC1jb2xvcjojZmZmO2JhY2tncm91bmQtaW1hZ2U6bGluZWFyLWdyYWRpZW50KHRvIHRvcCByaWdodCwgI2RkZCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZGRkIDc1JSksbGluZWFyLWdyYWRpZW50KHRvIHRvcCByaWdodCwgI2RkZCAyNSUsIHRyYW5zcGFyZW50IDI1JSwgdHJhbnNwYXJlbnQgNzUlLCAjZGRkIDc1JSk7YmFja2dyb3VuZC1zaXplOjEwcHggMTBweDtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgMCw1cHggNXB4O2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKX0udHAtY29sc3d2LnRwLXYtZGlzYWJsZWR7b3BhY2l0eTowLjV9LnRwLWNvbHN3dl9iey13ZWJraXQtYXBwZWFyYW5jZTpub25lOy1tb3otYXBwZWFyYW5jZTpub25lO2FwcGVhcmFuY2U6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci13aWR0aDowO2N1cnNvcjpwb2ludGVyO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OnZhcigtLWJsZC11cyk7bGVmdDowO21hcmdpbjowO291dGxpbmU6bm9uZTtwYWRkaW5nOjA7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6dmFyKC0tYmxkLXVzKX0udHAtY29sc3d2X2I6Zm9jdXM6OmFmdGVye2JvcmRlcjpyZ2JhKDI1NSwyNTUsMjU1LDAuNzUpIHNvbGlkIDJweDtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Ym90dG9tOjA7Y29udGVudDpcXCdcXCc7ZGlzcGxheTpibG9jaztsZWZ0OjA7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0udHAtY29sdHh0dntkaXNwbGF5OmZsZXg7d2lkdGg6MTAwJX0udHAtY29sdHh0dl9te21hcmdpbi1yaWdodDo0cHh9LnRwLWNvbHR4dHZfbXN7Ym9yZGVyLXJhZGl1czp2YXIoLS1lbG0tYnIpO2NvbG9yOnZhcigtLWxibC1mZyk7Y3Vyc29yOnBvaW50ZXI7aGVpZ2h0OnZhcigtLWJsZC11cyk7bGluZS1oZWlnaHQ6dmFyKC0tYmxkLXVzKTtwYWRkaW5nOjAgMThweCAwIDRweH0udHAtY29sdHh0dl9tczpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWJnLWgpfS50cC1jb2x0eHR2X21zOmZvY3Vze2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctZil9LnRwLWNvbHR4dHZfbXM6YWN0aXZle2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmctYSl9LnRwLWNvbHR4dHZfbW17Y29sb3I6dmFyKC0tbGJsLWZnKX0udHAtY29sdHh0dl93e2ZsZXg6MX0udHAtZGZ3dntwb3NpdGlvbjphYnNvbHV0ZTt0b3A6OHB4O3JpZ2h0OjhweDt3aWR0aDoyNTZweH0udHAtZmxkdi50cC1mbGR2LW5vdCAudHAtZmxkdl9ie2Rpc3BsYXk6bm9uZX0udHAtZmxkdl9je2JvcmRlci1sZWZ0OnZhcigtLWNudC1iZykgc29saWQgNHB4fS50cC1mbGR2X2I6aG92ZXIrLnRwLWZsZHZfY3tib3JkZXItbGVmdC1jb2xvcjp2YXIoLS1jbnQtYmctaCl9LnRwLWZsZHZfYjpmb2N1cysudHAtZmxkdl9je2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWNudC1iZy1mKX0udHAtZmxkdl9iOmFjdGl2ZSsudHAtZmxkdl9je2JvcmRlci1sZWZ0LWNvbG9yOnZhcigtLWNudC1iZy1hKX0udHAtZ3Jsdntwb3NpdGlvbjpyZWxhdGl2ZX0udHAtZ3Jsdl9ne2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSAqIDMpfS50cC1ncmx2X2cgcG9seWxpbmV7ZmlsbDpub25lO3N0cm9rZTp2YXIoLS1tby1mZyk7c3Ryb2tlLWxpbmVqb2luOnJvdW5kfS50cC1ncmx2X3R7bWFyZ2luLXRvcDotNHB4O3RyYW5zaXRpb246bGVmdCAwLjA1cywgdG9wIDAuMDVzO3Zpc2liaWxpdHk6aGlkZGVufS50cC1ncmx2X3QudHAtZ3Jsdl90LWF7dmlzaWJpbGl0eTp2aXNpYmxlfS50cC1ncmx2X3QudHAtZ3Jsdl90LWlue3RyYW5zaXRpb246bm9uZX0udHAtZ3Jsdi50cC12LWRpc2FibGVkIC50cC1ncmx2X2d7b3BhY2l0eTowLjV9LnRwLWdybHYgLnRwLXR0dntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLW1vLWZnKX0udHAtZ3JsdiAudHAtdHR2OjpiZWZvcmV7Ym9yZGVyLXRvcC1jb2xvcjp2YXIoLS1tby1mZyl9LnRwLWxibHZ7YWxpZ24taXRlbXM6Y2VudGVyO2Rpc3BsYXk6ZmxleDtsaW5lLWhlaWdodDoxLjM7cGFkZGluZy1sZWZ0OnZhcigtLWNudC1oLXApO3BhZGRpbmctcmlnaHQ6dmFyKC0tY250LWgtcCl9LnRwLWxibHYudHAtbGJsdi1ub2x7ZGlzcGxheTpibG9ja30udHAtbGJsdl9se2NvbG9yOnZhcigtLWxibC1mZyk7ZmxleDoxOy13ZWJraXQtaHlwaGVuczphdXRvOy1tcy1oeXBoZW5zOmF1dG87aHlwaGVuczphdXRvO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWxlZnQ6NHB4O3BhZGRpbmctcmlnaHQ6MTZweH0udHAtbGJsdi50cC12LWRpc2FibGVkIC50cC1sYmx2X2x7b3BhY2l0eTowLjV9LnRwLWxibHYudHAtbGJsdi1ub2wgLnRwLWxibHZfbHtkaXNwbGF5Om5vbmV9LnRwLWxibHZfdnthbGlnbi1zZWxmOmZsZXgtc3RhcnQ7ZmxleC1ncm93OjA7ZmxleC1zaHJpbms6MDt3aWR0aDoxNjBweH0udHAtbGJsdi50cC1sYmx2LW5vbCAudHAtbGJsdl92e3dpZHRoOjEwMCV9LnRwLWxzdHZfc3twYWRkaW5nOjAgMjBweCAwIDRweDt3aWR0aDoxMDAlfS50cC1sc3R2X217Y29sb3I6dmFyKC0tYnRuLWZnKX0udHAtc2dsdl9pe3BhZGRpbmc6MCA0cHh9LnRwLXNnbHYudHAtdi1kaXNhYmxlZCAudHAtc2dsdl9pe29wYWNpdHk6MC41fS50cC1tbGx2X2l7ZGlzcGxheTpibG9jaztoZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpICogMyk7bGluZS1oZWlnaHQ6dmFyKC0tYmxkLXVzKTtwYWRkaW5nOjAgNHB4O3Jlc2l6ZTpub25lO3doaXRlLXNwYWNlOnByZX0udHAtbWxsdi50cC12LWRpc2FibGVkIC50cC1tbGx2X2l7b3BhY2l0eTowLjV9LnRwLXAyZHZ7cG9zaXRpb246cmVsYXRpdmV9LnRwLXAyZHZfaHtkaXNwbGF5OmZsZXh9LnRwLXAyZHZfYntoZWlnaHQ6dmFyKC0tYmxkLXVzKTttYXJnaW4tcmlnaHQ6NHB4O3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOnZhcigtLWJsZC11cyl9LnRwLXAyZHZfYiBzdmd7ZGlzcGxheTpibG9jaztoZWlnaHQ6MTZweDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotOHB4O21hcmdpbi10b3A6LThweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6NTAlO3dpZHRoOjE2cHh9LnRwLXAyZHZfYiBzdmcgcGF0aHtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDoyfS50cC1wMmR2X2Igc3ZnIGNpcmNsZXtmaWxsOmN1cnJlbnRDb2xvcn0udHAtcDJkdl90e2ZsZXg6MX0udHAtcDJkdl9we2hlaWdodDowO21hcmdpbi10b3A6MDtvcGFjaXR5OjA7b3ZlcmZsb3c6aGlkZGVuO3RyYW5zaXRpb246aGVpZ2h0IC4ycyBlYXNlLWluLW91dCxvcGFjaXR5IC4ycyBsaW5lYXIsbWFyZ2luIC4ycyBlYXNlLWluLW91dH0udHAtcDJkdi50cC1wMmR2LWV4cGFuZGVkIC50cC1wMmR2X3B7bWFyZ2luLXRvcDp2YXIoLS1ibGQtcyk7b3BhY2l0eToxfS50cC1wMmR2IC50cC1wb3B2e2xlZnQ6Y2FsYygtMSAqIHZhcigtLWNudC1oLXApKTtyaWdodDpjYWxjKC0xICogdmFyKC0tY250LWgtcCkpO3RvcDp2YXIoLS1ibGQtdXMpfS50cC1wMmRwdntwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KX0udHAtcDJkcHZfcHtjdXJzb3I6Y3Jvc3NoYWlyO2hlaWdodDowO292ZXJmbG93OmhpZGRlbjtwYWRkaW5nLWJvdHRvbToxMDAlO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC1wMmRwdl9ne2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjEwMCU7bGVmdDowO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTAwJX0udHAtcDJkcHZfYXh7b3BhY2l0eTowLjE7c3Ryb2tlOnZhcigtLWluLWZnKTtzdHJva2UtZGFzaGFycmF5OjF9LnRwLXAyZHB2X2x7b3BhY2l0eTowLjU7c3Ryb2tlOnZhcigtLWluLWZnKTtzdHJva2UtZGFzaGFycmF5OjF9LnRwLXAyZHB2X217Ym9yZGVyOnZhcigtLWluLWZnKSBzb2xpZCAxcHg7Ym9yZGVyLXJhZGl1czo1MCU7Ym94LXNpemluZzpib3JkZXItYm94O2hlaWdodDo0cHg7bWFyZ2luLWxlZnQ6LTJweDttYXJnaW4tdG9wOi0ycHg7cG9zaXRpb246YWJzb2x1dGU7d2lkdGg6NHB4fS50cC1wMmRwdl9wOmZvY3VzIC50cC1wMmRwdl9te2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tZmcpO2JvcmRlci13aWR0aDowfS50cC1wb3B2e2JhY2tncm91bmQtY29sb3I6dmFyKC0tYnMtYmcpO2JvcmRlci1yYWRpdXM6NnB4O2JveC1zaGFkb3c6MCAycHggNHB4IHZhcigtLWJzLXNoKTtkaXNwbGF5Om5vbmU7bWF4LXdpZHRoOjE2OHB4O3BhZGRpbmc6dmFyKC0tY250LXYtcCkgdmFyKC0tY250LWgtcCk7cG9zaXRpb246YWJzb2x1dGU7dmlzaWJpbGl0eTpoaWRkZW47ei1pbmRleDoxMDAwfS50cC1wb3B2LnRwLXBvcHYtdntkaXNwbGF5OmJsb2NrO3Zpc2liaWxpdHk6dmlzaWJsZX0udHAtc3Bydl9ye2JhY2tncm91bmQtY29sb3I6dmFyKC0tZ3J2LWZnKTtib3JkZXItd2lkdGg6MDtkaXNwbGF5OmJsb2NrO2hlaWdodDoycHg7bWFyZ2luOjA7d2lkdGg6MTAwJX0udHAtc2xkdi50cC12LWRpc2FibGVke29wYWNpdHk6MC41fS50cC1zbGR2X3R7Ym94LXNpemluZzpib3JkZXItYm94O2N1cnNvcjpwb2ludGVyO2hlaWdodDp2YXIoLS1ibGQtdXMpO21hcmdpbjowIDZweDtvdXRsaW5lOm5vbmU7cG9zaXRpb246cmVsYXRpdmV9LnRwLXNsZHZfdDo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0taW4tYmcpO2JvcmRlci1yYWRpdXM6MXB4O2JvdHRvbTowO2NvbnRlbnQ6XFwnXFwnO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjJweDtsZWZ0OjA7bWFyZ2luOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MDt0b3A6MH0udHAtc2xkdl9re2hlaWdodDoxMDAlO2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH0udHAtc2xkdl9rOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1mZyk7Ym9yZGVyLXJhZGl1czoxcHg7Ym90dG9tOjA7Y29udGVudDpcXCdcXCc7ZGlzcGxheTpibG9jaztoZWlnaHQ6MnB4O2xlZnQ6MDttYXJnaW4tYm90dG9tOmF1dG87bWFyZ2luLXRvcDphdXRvO3Bvc2l0aW9uOmFic29sdXRlO3JpZ2h0OjA7dG9wOjB9LnRwLXNsZHZfazo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1idG4tYmcpO2JvcmRlci1yYWRpdXM6dmFyKC0tZWxtLWJyKTtib3R0b206MDtjb250ZW50OlxcJ1xcJztkaXNwbGF5OmJsb2NrO2hlaWdodDoxMnB4O21hcmdpbi1ib3R0b206YXV0bzttYXJnaW4tdG9wOmF1dG87cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6LTZweDt0b3A6MDt3aWR0aDoxMnB4fS50cC1zbGR2X3Q6aG92ZXIgLnRwLXNsZHZfazo6YWZ0ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1idG4tYmctaCl9LnRwLXNsZHZfdDpmb2N1cyAudHAtc2xkdl9rOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZy1mKX0udHAtc2xkdl90OmFjdGl2ZSAudHAtc2xkdl9rOjphZnRlcntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJ0bi1iZy1hKX0udHAtc2xkdHh0dntkaXNwbGF5OmZsZXh9LnRwLXNsZHR4dHZfc3tmbGV4OjJ9LnRwLXNsZHR4dHZfdHtmbGV4OjE7bWFyZ2luLWxlZnQ6NHB4fS50cC10YWJ2LnRwLXYtZGlzYWJsZWR7b3BhY2l0eTowLjV9LnRwLXRhYnZfaXthbGlnbi1pdGVtczpmbGV4LWVuZDtkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6aGlkZGVufS50cC10YWJ2LnRwLXRhYnYtbm9wIC50cC10YWJ2X2l7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSArIDRweCk7cG9zaXRpb246cmVsYXRpdmV9LnRwLXRhYnYudHAtdGFidi1ub3AgLnRwLXRhYnZfaTo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnKTtib3R0b206MDtjb250ZW50OlxcJ1xcJztoZWlnaHQ6MnB4O2xlZnQ6MDtwb3NpdGlvbjphYnNvbHV0ZTtyaWdodDowfS50cC10YWJ2X2N7Ym9yZGVyLWxlZnQ6dmFyKC0tY250LWJnKSBzb2xpZCA0cHg7cGFkZGluZy1ib3R0b206dmFyKC0tY250LXYtcCk7cGFkZGluZy10b3A6dmFyKC0tY250LXYtcCl9LnRwLXRiaXZ7ZmxleDoxO21pbi13aWR0aDowO3Bvc2l0aW9uOnJlbGF0aXZlfS50cC10Yml2Ky50cC10Yml2e21hcmdpbi1sZWZ0OjJweH0udHAtdGJpdisudHAtdGJpdjo6YmVmb3Jle2JhY2tncm91bmQtY29sb3I6dmFyKC0tY250LWJnKTtib3R0b206MDtjb250ZW50OlxcJ1xcJztoZWlnaHQ6MnB4O2xlZnQ6LTJweDtwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDoycHh9LnRwLXRiaXZfYntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZyk7ZGlzcGxheTpibG9jaztwYWRkaW5nLWxlZnQ6Y2FsYyh2YXIoLS1jbnQtaC1wKSArIDRweCk7cGFkZGluZy1yaWdodDpjYWxjKHZhcigtLWNudC1oLXApICsgNHB4KTt3aWR0aDoxMDAlfS50cC10Yml2X2I6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1jbnQtYmctaCl9LnRwLXRiaXZfYjpmb2N1c3tiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZy1mKX0udHAtdGJpdl9iOmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWNudC1iZy1hKX0udHAtdGJpdl9iOmRpc2FibGVke29wYWNpdHk6MC41fS50cC10Yml2X3R7Y29sb3I6dmFyKC0tY250LWZnKTtoZWlnaHQ6Y2FsYyh2YXIoLS1ibGQtdXMpICsgNHB4KTtsaW5lLWhlaWdodDpjYWxjKHZhcigtLWJsZC11cykgKyA0cHgpO29wYWNpdHk6MC41O292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzfS50cC10Yml2LnRwLXRiaXYtc2VsIC50cC10Yml2X3R7b3BhY2l0eToxfS50cC10eHR2e3Bvc2l0aW9uOnJlbGF0aXZlfS50cC10eHR2X2l7cGFkZGluZzowIDRweH0udHAtdHh0di50cC10eHR2LWZzdCAudHAtdHh0dl9pe2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjA7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MH0udHAtdHh0di50cC10eHR2LW1pZCAudHAtdHh0dl9pe2JvcmRlci1yYWRpdXM6MH0udHAtdHh0di50cC10eHR2LWxzdCAudHAtdHh0dl9pe2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjB9LnRwLXR4dHYudHAtdHh0di1udW0gLnRwLXR4dHZfaXt0ZXh0LWFsaWduOnJpZ2h0fS50cC10eHR2LnRwLXR4dHYtZHJnIC50cC10eHR2X2l7b3BhY2l0eTowLjN9LnRwLXR4dHZfa3tjdXJzb3I6cG9pbnRlcjtoZWlnaHQ6MTAwJTtsZWZ0Oi0zcHg7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7d2lkdGg6MTJweH0udHAtdHh0dl9rOjpiZWZvcmV7YmFja2dyb3VuZC1jb2xvcjp2YXIoLS1pbi1mZyk7Ym9yZGVyLXJhZGl1czoxcHg7Ym90dG9tOjA7Y29udGVudDpcXCdcXCc7aGVpZ2h0OmNhbGModmFyKC0tYmxkLXVzKSAtIDRweCk7bGVmdDo1MCU7bWFyZ2luLWJvdHRvbTphdXRvO21hcmdpbi1sZWZ0Oi0xcHg7bWFyZ2luLXRvcDphdXRvO29wYWNpdHk6MC4xO3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO3RyYW5zaXRpb246Ym9yZGVyLXJhZGl1cyAwLjFzLCBoZWlnaHQgMC4xcywgdHJhbnNmb3JtIDAuMXMsIHdpZHRoIDAuMXM7d2lkdGg6MnB4fS50cC10eHR2X2s6aG92ZXI6OmJlZm9yZSwudHAtdHh0di50cC10eHR2LWRyZyAudHAtdHh0dl9rOjpiZWZvcmV7b3BhY2l0eToxfS50cC10eHR2LnRwLXR4dHYtZHJnIC50cC10eHR2X2s6OmJlZm9yZXtib3JkZXItcmFkaXVzOjUwJTtoZWlnaHQ6NHB4O3RyYW5zZm9ybTp0cmFuc2xhdGVYKC0xcHgpO3dpZHRoOjRweH0udHAtdHh0dl9ne2JvdHRvbTowO2Rpc3BsYXk6YmxvY2s7aGVpZ2h0OjhweDtsZWZ0OjUwJTttYXJnaW46YXV0bztvdmVyZmxvdzp2aXNpYmxlO3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7dmlzaWJpbGl0eTpoaWRkZW47d2lkdGg6MTAwJX0udHAtdHh0di50cC10eHR2LWRyZyAudHAtdHh0dl9ne3Zpc2liaWxpdHk6dmlzaWJsZX0udHAtdHh0dl9nYntmaWxsOm5vbmU7c3Ryb2tlOnZhcigtLWluLWZnKTtzdHJva2UtZGFzaGFycmF5OjF9LnRwLXR4dHZfZ2h7ZmlsbDpub25lO3N0cm9rZTp2YXIoLS1pbi1mZyl9LnRwLXR4dHYgLnRwLXR0dnttYXJnaW4tbGVmdDo2cHg7dmlzaWJpbGl0eTpoaWRkZW59LnRwLXR4dHYudHAtdHh0di1kcmcgLnRwLXR0dnt2aXNpYmlsaXR5OnZpc2libGV9LnRwLXR0dntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWluLWZnKTtib3JkZXItcmFkaXVzOnZhcigtLWVsbS1icik7Y29sb3I6dmFyKC0tYnMtYmcpO3BhZGRpbmc6MnB4IDRweDtwb2ludGVyLWV2ZW50czpub25lO3Bvc2l0aW9uOmFic29sdXRlO3RyYW5zZm9ybTp0cmFuc2xhdGUoLTUwJSwgLTEwMCUpfS50cC10dHY6OmJlZm9yZXtib3JkZXItY29sb3I6dmFyKC0taW4tZmcpIHRyYW5zcGFyZW50IHRyYW5zcGFyZW50IHRyYW5zcGFyZW50O2JvcmRlci1zdHlsZTpzb2xpZDtib3JkZXItd2lkdGg6MnB4O2JveC1zaXppbmc6Ym9yZGVyLWJveDtjb250ZW50OlxcJ1xcJztmb250LXNpemU6MC45ZW07aGVpZ2h0OjRweDtsZWZ0OjUwJTttYXJnaW4tbGVmdDotMnB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoxMDAlO3dpZHRoOjRweH0udHAtcm90dntiYWNrZ3JvdW5kLWNvbG9yOnZhcigtLWJzLWJnKTtib3JkZXItcmFkaXVzOnZhcigtLWJzLWJyKTtib3gtc2hhZG93OjAgMnB4IDRweCB2YXIoLS1icy1zaCk7Zm9udC1mYW1pbHk6dmFyKC0tZm9udC1mYW1pbHkpO2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjUwMDtsaW5lLWhlaWdodDoxO3RleHQtYWxpZ246bGVmdH0udHAtcm90dl9ie2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tYnMtYnIpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icik7cGFkZGluZy1sZWZ0OmNhbGMoMnB4ICogMiArIHZhcigtLWJsZC11cykgKyB2YXIoLS1jbnQtaC1wKSk7dGV4dC1hbGlnbjpjZW50ZXJ9LnRwLXJvdHYudHAtcm90di1leHBhbmRlZCAudHAtcm90dl9ie2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6MDtib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czowfS50cC1yb3R2LnRwLXJvdHYtbm90IC50cC1yb3R2X2J7ZGlzcGxheTpub25lfS50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1sc3Q+LnRwLWZsZHZfYywudHAtcm90dl9jPi50cC10YWJ2LnRwLXYtbHN0Pi50cC10YWJ2X2N7Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czp2YXIoLS1icy1icik7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYnIpfS50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1sc3Q6bm90KC50cC1mbGR2LWV4cGFuZGVkKT4udHAtZmxkdl9ie2JvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6dmFyKC0tYnMtYnIpO2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOnZhcigtLWJzLWJyKX0udHAtcm90dl9jIC50cC1mbGR2LnRwLXYtdmxzdDpub3QoLnRwLWZsZHYtZXhwYW5kZWQpPi50cC1mbGR2X2J7Ym9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6dmFyKC0tYnMtYnIpfS50cC1yb3R2LnRwLXJvdHYtbm90IC50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1mc3R7bWFyZ2luLXRvcDpjYWxjKC0xICogdmFyKC0tY250LXYtcCkpfS50cC1yb3R2LnRwLXJvdHYtbm90IC50cC1yb3R2X2M+LnRwLWZsZHYudHAtdi1mc3Q+LnRwLWZsZHZfYntib3JkZXItdG9wLWxlZnQtcmFkaXVzOnZhcigtLWJzLWJyKTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czp2YXIoLS1icy1icil9LnRwLXJvdHYudHAtcm90di1ub3QgLnRwLXJvdHZfYz4udHAtdGFidi50cC12LWZzdHttYXJnaW4tdG9wOmNhbGMoLTEgKiB2YXIoLS1jbnQtdi1wKSl9LnRwLXJvdHYudHAtcm90di1ub3QgLnRwLXJvdHZfYz4udHAtdGFidi50cC12LWZzdD4udHAtdGFidl9pe2JvcmRlci10b3AtbGVmdC1yYWRpdXM6dmFyKC0tYnMtYnIpO2JvcmRlci10b3AtcmlnaHQtcmFkaXVzOnZhcigtLWJzLWJyKX0udHAtcm90di50cC12LWRpc2FibGVkLC50cC1yb3R2IC50cC12LWRpc2FibGVke3BvaW50ZXItZXZlbnRzOm5vbmV9LnRwLXJvdHYudHAtdi1oaWRkZW4sLnRwLXJvdHYgLnRwLXYtaGlkZGVue2Rpc3BsYXk6bm9uZX0nKTtcbiAgICAgICAgICAgIHRoaXMucG9vbF8uZ2V0QWxsKCkuZm9yRWFjaCgocGx1Z2luKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWJlZFBsdWdpblN0eWxlXyhwbHVnaW4pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnJlZ2lzdGVyUGx1Z2luKHtcbiAgICAgICAgICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgICAgICAgICAgIFNsaWRlckJsYWRlUGx1Z2luLFxuICAgICAgICAgICAgICAgICAgICBMaXN0QmxhZGVQbHVnaW4sXG4gICAgICAgICAgICAgICAgICAgIFRhYkJsYWRlUGx1Z2luLFxuICAgICAgICAgICAgICAgICAgICBUZXh0QmxhZGVQbHVnaW4sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgVkVSU0lPTiA9IG5ldyBTZW12ZXIoJzMuMC41Jyk7XG5cbiAgICBleHBvcnRzLkJsYWRlQXBpID0gQmxhZGVBcGk7XG4gICAgZXhwb3J0cy5CdXR0b25BcGkgPSBCdXR0b25BcGk7XG4gICAgZXhwb3J0cy5Gb2xkZXJBcGkgPSBGb2xkZXJBcGk7XG4gICAgZXhwb3J0cy5JbnB1dEJpbmRpbmdBcGkgPSBJbnB1dEJpbmRpbmdBcGk7XG4gICAgZXhwb3J0cy5MaXN0QXBpID0gTGlzdEFwaTtcbiAgICBleHBvcnRzLk1vbml0b3JCaW5kaW5nQXBpID0gTW9uaXRvckJpbmRpbmdBcGk7XG4gICAgZXhwb3J0cy5QYW5lID0gUGFuZTtcbiAgICBleHBvcnRzLlNlcGFyYXRvckFwaSA9IFNlcGFyYXRvckFwaTtcbiAgICBleHBvcnRzLlNsaWRlckFwaSA9IFNsaWRlckFwaTtcbiAgICBleHBvcnRzLlRhYkFwaSA9IFRhYkFwaTtcbiAgICBleHBvcnRzLlRhYlBhZ2VBcGkgPSBUYWJQYWdlQXBpO1xuICAgIGV4cG9ydHMuVGV4dEFwaSA9IFRleHRBcGk7XG4gICAgZXhwb3J0cy5UcENoYW5nZUV2ZW50ID0gVHBDaGFuZ2VFdmVudDtcbiAgICBleHBvcnRzLlZFUlNJT04gPSBWRVJTSU9OO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcblxufSkpKTtcbiIsIlxuZ2xvYmFsLkNBTlZBU19TS0VUQ0hfREVGQVVMVF9TVE9SQUdFX0tFWSA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmO1xuIl19