@mattilsynet/design 1.3.3 → 1.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,22 +1,22 @@
1
- var mtds=function($){"use strict";var bt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",ao=bt&&/android/i.test(navigator.userAgent),Gt;bt&&/^Mac/i.test(((Gt=navigator.userAgentData)==null?void 0:Gt.platform)||navigator.platform);var ro=`${ao?"data":"aria"}-labelledby`,gt=":host(:not([hidden])) { display: block }",z=typeof HTMLElement>"u"?class{}:HTMLElement;function S(t,e,n){var o;return n===void 0?(o=t.getAttribute(e))!=null?o:null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var Xt=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},lo=(t,...e)=>Xt("add",t,e),co=(t,...e)=>Xt("remove",t,e),Q=(t,e)=>t.attachShadow({mode:"open"}).append(Zt("slot"),Zt("style",e)),J=new WeakMap,zt=(t,e)=>{if(e===void 0)return J.get(t);try{J.get(t).disconnect(),J.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),J.set(t,n)}},uo=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},Qt=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},po=0,Jt=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++po).toString(32)}`),t.id):"",Zt=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},Z={define:(t,e)=>!bt||window.customElements.get(t)||window.customElements.define(t,e)},tt="aria-controls",R="aria-selected",te=class extends z{constructor(){super(),Q(this,gt)}get tabList(){return et("u-tablist",this)[0]||null}get selectedIndex(){return nt(this.tabs)}set selectedIndex(t){Et(this.tabs[t])}get tabs(){return et("u-tab",this)}get panels(){return et("u-tabpanel",this)}},ee=class extends z{constructor(){super(),Q(this,gt)}connectedCallback(){S(this,"role","tablist"),lo(this,"click,keydown",this),zt(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){co(this,"click,keydown",this),zt(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s==null?void 0:s.setAttribute(R,"true")}const{key:e}=t,n=[...this.tabs],o=n.findIndex(s=>s.contains(t.target));let i=o;if(!(t.defaultPrevented||o===-1)&&(t.type==="click"&&Et(n[o]),t.type==="keydown"&&!uo(t))){if(e==="ArrowDown"||e==="ArrowRight")i=(o+1)%n.length;else if(e==="ArrowUp"||e==="ArrowLeft")i=(o||n.length)-1;else if(e==="End")i=n.length-1;else if(e==="Home")i=0;else if(e==="Tab")i=nt(n);else return;setTimeout(()=>{n[o].tabIndex=-1,n[i].tabIndex=0}),e!=="Tab"&&(t.preventDefault(),n[i].focus())}}get tabsElement(){return this.closest("u-tabs")}get tabs(){return this.querySelectorAll("u-tab")}get selectedIndex(){return nt(this.tabs)}set selectedIndex(t){Et(this.tabs[t])}},yt=!1,ne=class extends z{static get observedAttributes(){return["id",R,tt]}constructor(){super(),Q(this,":host(:not([hidden])) { cursor: pointer; display: inline-block }")}connectedCallback(){S(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!yt&&this.selected&&this.tabList){yt=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=et("u-tabpanel",this.tabsElement||this),n=wt(this,e[t.indexOf(this)]);n&&S(n,ro,Jt(this)),t.forEach((o,i)=>{const s=wt(o,e[i]);o.tabIndex=o===this?0:-1,S(o,R,`${o===this}`),s&&(s.hidden=s!==n),s&&S(o,tt,s.id)}),yt=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return(t==null?void 0:t.nodeName)==="U-TABLIST"?t:null}get selected(){return S(this,R)==="true"}set selected(t){S(this,R,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return wt(this)}},oe=class extends z{static get observedAttributes(){return["hidden"]}constructor(){super(),Q(this,gt)}connectedCallback(){S(this,"role","tabpanel"),this.hidden=nt(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){this.hidden||fo(this.firstChild)?S(this,"tabindex",null):this.tabIndex=0}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${tt}="${this.id}"]`;return Qt(this).querySelectorAll(t)}},et=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),wt=(t,e)=>{const n=S(t,tt)||Jt(e),o=Qt(t).getElementById(n);return(o==null?void 0:o.nodeName)==="U-TABPANEL"?o:null},nt=t=>[...t].findIndex(e=>S(e,R)==="true"),Et=t=>t&&S(t,"aria-selected","true"),fo=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');Z.define("u-tabs",te),Z.define("u-tablist",ee),Z.define("u-tab",ne),Z.define("u-tabpanel",oe);var mo=Object.defineProperty,ie=Object.getOwnPropertySymbols,ho=Object.prototype.hasOwnProperty,vo=Object.prototype.propertyIsEnumerable,se=(t,e,n)=>e in t?mo(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,_o=(t,e)=>{for(var n in e||(e={}))ho.call(e,n)&&se(t,n,e[n]);if(ie)for(var n of ie(e))vo.call(e,n)&&se(t,n,e[n]);return t},Y=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",ae=Y&&/android/i.test(navigator.userAgent),bo=Y&&/firefox/i.test(navigator.userAgent),go=Y&&/iPad|iPhone|iPod/.test(navigator.userAgent),re;Y&&/^Mac/i.test(((re=navigator.userAgentData)==null?void 0:re.platform)||navigator.platform);var yo="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",wo=typeof HTMLElement>"u"?class{}:HTMLElement;function f(t,e,n){return n===void 0?t.getAttribute(e):(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var le=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},xt=(t,...e)=>le("add",t,e),Eo=(t,...e)=>le("remove",t,e),ot=new WeakMap,$t=(t,e)=>{if(e===void 0)return ot.get(t);try{ot.get(t).disconnect(),ot.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),ot.set(t,n)}},xo=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},$o=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},So=0,To=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++So).toString(32)}`),t.id):"",it=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))f(o,i,s);return o},Co={define:(t,e)=>!Y||window.customElements.get(t)||window.customElements.define(t,e)},D,ko=0,St=t=>{D||(D=it("div"),D.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",f(D,"aria-live","assertive")),D.isConnected||document.body.append(D),t&&(D.textContent=`${t}${ko++%2?" ":""}`)},ce=(t,e,n="")=>{var o,i;const s={bubbles:!0,composed:!0,data:e,inputType:n},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(o=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:o.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},Tt=!1,de="beforeinput,blur,focus,click,input,keydown,mousedown,mouseup",ue={once:!0,passive:!0},Io=bo&&!ae,Ao=ae||go,st="false",Lo="insertReplacementText",at={added:"Added",empty:"No selected",found:"Navigate left to find %d selected",invalid:"Invalid value",of:"of",remove:"Press to remove",removed:"Removed"},rt=class extends wo{constructor(){super(),this._speak="",this._texts=_o({},at),this._value="",this.attachShadow({mode:"open"}).append(it("slot"),it("style",`:host(:not([hidden])) { display: block; cursor: pointer; -webkit-tap-highlight-color: rgba(0, 0, 0, 0) } /* Must be display block in Safari to allow focus inside */
1
+ var mtds=function(S){"use strict";var _t=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",ro=_t&&/android/i.test(navigator.userAgent),Gt;_t&&/^Mac/i.test(((Gt=navigator.userAgentData)==null?void 0:Gt.platform)||navigator.platform);var lo=`${ro?"data":"aria"}-labelledby`,gt=":host(:not([hidden])) { display: block }",z=typeof HTMLElement>"u"?class{}:HTMLElement;function T(t,e,n){var o;return n===void 0?(o=t.getAttribute(e))!=null?o:null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var Xt=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},co=(t,...e)=>Xt("add",t,e),uo=(t,...e)=>Xt("remove",t,e),Q=(t,e)=>t.attachShadow({mode:"open"}).append(Zt("slot"),Zt("style",e)),J=new WeakMap,zt=(t,e)=>{if(e===void 0)return J.get(t);try{J.get(t).disconnect(),J.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),J.set(t,n)}},fo=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},Qt=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},po=0,Jt=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++po).toString(32)}`),t.id):"",Zt=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},Z={define:(t,e)=>!_t||window.customElements.get(t)||window.customElements.define(t,e)},tt="aria-controls",B="aria-selected",te=class extends z{constructor(){super(),Q(this,gt)}get tabList(){return et("u-tablist",this)[0]||null}get selectedIndex(){return nt(this.tabs)}set selectedIndex(t){Et(this.tabs[t])}get tabs(){return et("u-tab",this)}get panels(){return et("u-tabpanel",this)}},ee=class extends z{constructor(){super(),Q(this,gt)}connectedCallback(){T(this,"role","tablist"),co(this,"click,keydown",this),zt(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){uo(this,"click,keydown",this),zt(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s==null?void 0:s.setAttribute(B,"true")}const{key:e}=t,n=[...this.tabs],o=n.findIndex(s=>s.contains(t.target));let i=o;if(!(t.defaultPrevented||o===-1)&&(t.type==="click"&&Et(n[o]),t.type==="keydown"&&!fo(t))){if(e==="ArrowDown"||e==="ArrowRight")i=(o+1)%n.length;else if(e==="ArrowUp"||e==="ArrowLeft")i=(o||n.length)-1;else if(e==="End")i=n.length-1;else if(e==="Home")i=0;else if(e==="Tab")i=nt(n);else return;setTimeout(()=>{n[o].tabIndex=-1,n[i].tabIndex=0}),e!=="Tab"&&(t.preventDefault(),n[i].focus())}}get tabsElement(){return this.closest("u-tabs")}get tabs(){return this.querySelectorAll("u-tab")}get selectedIndex(){return nt(this.tabs)}set selectedIndex(t){Et(this.tabs[t])}},yt=!1,ne=class extends z{static get observedAttributes(){return["id",B,tt]}constructor(){super(),Q(this,":host(:not([hidden])) { cursor: pointer; display: inline-block }")}connectedCallback(){T(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!yt&&this.selected&&this.tabList){yt=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=et("u-tabpanel",this.tabsElement||this),n=wt(this,e[t.indexOf(this)]);n&&T(n,lo,Jt(this)),t.forEach((o,i)=>{const s=wt(o,e[i]);o.tabIndex=o===this?0:-1,T(o,B,`${o===this}`),s&&(s.hidden=s!==n),s&&T(o,tt,s.id)}),yt=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return(t==null?void 0:t.nodeName)==="U-TABLIST"?t:null}get selected(){return T(this,B)==="true"}set selected(t){T(this,B,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return wt(this)}},oe=class extends z{static get observedAttributes(){return["hidden"]}constructor(){super(),Q(this,gt)}connectedCallback(){T(this,"role","tabpanel"),this.hidden=nt(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){this.hidden||mo(this.firstChild)?T(this,"tabindex",null):this.tabIndex=0}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${tt}="${this.id}"]`;return Qt(this).querySelectorAll(t)}},et=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),wt=(t,e)=>{const n=T(t,tt)||Jt(e),o=Qt(t).getElementById(n);return(o==null?void 0:o.nodeName)==="U-TABPANEL"?o:null},nt=t=>[...t].findIndex(e=>T(e,B)==="true"),Et=t=>t&&T(t,"aria-selected","true"),mo=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');Z.define("u-tabs",te),Z.define("u-tablist",ee),Z.define("u-tab",ne),Z.define("u-tabpanel",oe);var ho=Object.defineProperty,ie=Object.getOwnPropertySymbols,bo=Object.prototype.hasOwnProperty,vo=Object.prototype.propertyIsEnumerable,se=(t,e,n)=>e in t?ho(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,_o=(t,e)=>{for(var n in e||(e={}))bo.call(e,n)&&se(t,n,e[n]);if(ie)for(var n of ie(e))vo.call(e,n)&&se(t,n,e[n]);return t},Y=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",ae=Y&&/android/i.test(navigator.userAgent),go=Y&&/firefox/i.test(navigator.userAgent),yo=Y&&/iPad|iPhone|iPod/.test(navigator.userAgent),re;Y&&/^Mac/i.test(((re=navigator.userAgentData)==null?void 0:re.platform)||navigator.platform);var wo="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",Eo=typeof HTMLElement>"u"?class{}:HTMLElement;function p(t,e,n){return n===void 0?t.getAttribute(e):(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var le=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},$t=(t,...e)=>le("add",t,e),$o=(t,...e)=>le("remove",t,e),ot=new WeakMap,St=(t,e)=>{if(e===void 0)return ot.get(t);try{ot.get(t).disconnect(),ot.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),ot.set(t,n)}},So=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},To=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},xo=0,ko=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++xo).toString(32)}`),t.id):"",it=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))p(o,i,s);return o},Co={define:(t,e)=>!Y||window.customElements.get(t)||window.customElements.define(t,e)},P,Io=0,Tt=t=>{P||(P=it("div"),P.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",p(P,"aria-live","assertive")),P.isConnected||document.body.append(P),t&&(P.textContent=`${t}${Io++%2?" ":""}`)},ce=(t,e,n="")=>{var o,i;const s={bubbles:!0,composed:!0,data:e,inputType:n},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(o=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:o.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},xt=!1,de="beforeinput,blur,focus,click,input,keydown,mousedown,mouseup",ue={once:!0,passive:!0},Ao=go&&!ae,Lo=ae||yo,st="false",Mo="insertReplacementText",at={added:"Added",empty:"No selected",found:"Navigate left to find %d selected",invalid:"Invalid value",of:"of",remove:"Press to remove",removed:"Removed"},rt=class extends Eo{constructor(){super(),this._speak="",this._texts=_o({},at),this._value="",this.attachShadow({mode:"open"}).append(it("slot"),it("style",`:host(:not([hidden])) { display: block; cursor: pointer; -webkit-tap-highlight-color: rgba(0, 0, 0, 0) } /* Must be display block in Safari to allow focus inside */
2
2
  :host(:not([data-multiple])) ::slotted(data),
3
3
  :host([data-multiple="false"]) ::slotted(data) { display: none } /* Hide data if not multiple */
4
4
  ::slotted(input[inputmode="none"]) { outline: none } /* Hide temporary foucs outline flash */
5
5
  ::slotted(del) { text-decoration: none }
6
6
  ::slotted(data:not([hidden])) { display: inline-block; pointer-events: none }
7
7
  ::slotted(data)::after { content: '\\00D7'; content: '\\00D7' / ''; padding-inline: .5ch; pointer-events: auto }
8
- ::slotted(data:focus) { ${yo} }`))}static get observedAttributes(){return Object.keys(at).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=$o(this),xt(this,de,this,!0),$t(this,{childList:!0,subtree:!0}),setTimeout(lt,0,this),setTimeout(kt,0,this)}attributeChangedCallback(t,e,n){const o=t.split("data-sr-")[1];at[o]&&(this._texts[o]=n||at[o])}disconnectedCallback(){$t(this,!1),Eo(this,de,this,!0),this._items=this._clear=this._focus=this._control=void 0,this._list=this._options=this._root=void 0}handleEvent(t){const e=t.target;t.type==="beforeinput"&&(this._value=(e==null?void 0:e.value)||""),t.type==="blur"&&Oo(this),t.type==="click"&&Do(this,t),t.type==="focus"&&Mo(this,t),t.type==="input"&&Po(this,t),t.type==="keydown"&&Ho(this,t),t.type==="mousedown"&&(Tt=this.contains(e)),t.type==="mouseup"&&(Tt=!1),t.type==="mutation"&&lt(this,t)}get multiple(){var t;return((t=f(this,"data-multiple"))!=null?t:st)!==st}set multiple(t){f(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=f(this,"data-creatable"))!=null?t:st)!==st}set creatable(t){f(this,"data-creatable",t?"":null)}get control(){var t;return(t=this._control)!=null&&t.isConnected||(this._control=this.querySelector("input")),this._control}get list(){var t;return(t=this._list)!=null&&t.isConnected||(this._list=this.querySelector("u-datalist,datalist")),this._list}get clear(){var t;return(t=this._clear)!=null&&t.isConnected||(this._clear=this.querySelector("del")),this._clear}get items(){return this._items||(this._items=this.getElementsByTagName("data")),this._items}get options(){var t,e;if(!this._options){const n=((t=this.list)==null?void 0:t.nodeName)==="U-DATALIST"?"u-option":"option";this._options=(e=this.list)==null?void 0:e.getElementsByTagName(n)}return this._options}get values(){return[...this.items].map(({value:t})=>t)}},B=t=>{var e;return((e=t==null?void 0:t.textContent)==null?void 0:e.trim())||""},Ct=t=>t instanceof HTMLDataElement,lt=(t,e)=>{var n,o;const{_focus:i,_texts:s,items:a,control:r,list:l,multiple:u}=t;let h=`${B((n=r==null?void 0:r.labels)==null?void 0:n[0])}, ${u?a.length?s.found.replace("%d",`${a.length}`):s.empty:""}`;const c=[];for(const{addedNodes:g,removedNodes:A}of(e==null?void 0:e.detail)||[]){for(const C of g)Ct(C)&&c.unshift(C);for(const C of A)Ct(C)&&c.push(C)}const T=u?c.length===1:c[0]===i;if(i&&r&&T){const g=f(r,"inputmode"),A=Ct(i)?r:i;t._speak=`${s[c[0].isConnected?"added":"removed"]} ${B(c[0])}, `,(Ao||i===r)&&St(t._speak),r!==A&&(f(r,"aria-expanded",null),f(r,"inputmode","none"),h=" ",r.focus()),setTimeout(()=>{var C;f(r,"aria-expanded","true"),f(r,"inputmode",g),(C=A==null?void 0:A.focus)==null||C.call(A),t._speak="",Io?xt(t,"blur",()=>lt(t),ue):setTimeout(lt,100,t)},100)}let w=0;for(const g of a){const A=B(g),C=g.value||A,Kt=`${t._speak}${A}, ${s.remove}, ${++w} ${s.of} ${a.length}`;f(g,"role","button"),f(g,"value",C),f(g,"tabindex","-1"),f(g,"aria-label",Kt)}!u&&w>1&&console.warn("u-combobox: Multiple <data> found in single mode."),l&&f(l,"aria-multiselectable",`${u}`),r&&f(r,"list",To(l)),r&&f(r,"aria-label",`${t._speak}${h}`);const x=t.querySelector("select");x&&(x.multiple=u),x&&(x.textContent=""),x==null||x.append(...t.values.map(g=>new Option(g,g,!0,!0))),pe(t),fe(t),(o=$t(t))==null||o.takeRecords()},pe=t=>{var e;t.clear&&f(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value))},fe=t=>{var e;const{_speak:n,options:o=[],values:i}=t;for(const s of o){const a=(e=f(s,"value"))!=null?e:B(s);f(s,"aria-label",n?`${n}${B(s)}`:null),f(s,"selected",i.includes(a)?"":null)}},kt=t=>{const{multiple:e,control:n,items:o}=t,i=B(o[0]);!e&&n&&i!==n.value&&ce(n,i,"insertText")},me=(t,e=!0)=>{var n;const{_texts:o,options:i=[],creatable:s,control:a,items:r,multiple:l}=t,u=((n=a==null?void 0:a.value)==null?void 0:n.trim())||"",h=u.toLowerCase()||null;let c=[...i].find(w=>w.label.trim().toLowerCase()===h);const T={bubbles:!0,cancelable:!0,detail:c};if(t.dispatchEvent(new CustomEvent("beforematch",T)))for(const w of i)w.selected=w===c;if(c=[...i].find(w=>w.selected),fe(t),c)return U(t,c,!1,!!e);if(s&&u)return U(t,{value:u},!1);!l&&r[0]&&U(t,r[0],!0,!1),e&&St(o.invalid)},U=(t,e,n=!0,o=!0)=>{const{control:i,items:s,multiple:a}=t,r=it("data",e.label||e.value,{value:e.value}),l=[...s].find(c=>c.value===e.value),u={bubbles:!0,cancelable:!0,detail:l||r};if(!(l&&!n)&&t.dispatchEvent(new CustomEvent("beforechange",u))){if(!a)for(const c of[...s])c.remove();l?l.remove():i==null||i.insertAdjacentElement("beforebegin",r),t.dispatchEvent(new CustomEvent("afterchange",u))}o&&setTimeout(kt,10,t)},Mo=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),St()},Oo=t=>Tt||setTimeout(qo,0,t),qo=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||kt(t)},Do=(t,e)=>{const{clientX:n,clientY:o,target:i}=e,{clear:s,control:a,items:r}=t;if(s!=null&&s.contains(i))return a&&ce(a,"","deleteContentBackward"),a==null?void 0:a.focus();for(const l of r){const{top:u,right:h,bottom:c,left:T}=l.getBoundingClientRect();if(l.contains(i))return U(t,l);if(o>=u&&o<=c&&n>=T&&n<=h)return l.focus()}i===t&&(a==null||a.focus())},Po=(t,e)=>{var n;const{options:o=[],control:i,multiple:s}=t,a=((n=i==null?void 0:i.value)==null?void 0:n.trim())||"";if(e instanceof InputEvent?!e.inputType||e.inputType===Lo:!!a){e.stopImmediatePropagation(),i&&(i.value=t._value);for(const l of o)if(l.value&&l.value===a)return U(t,l,s)}else s||me(t,!1);pe(t)},Ho=(t,e)=>{var n;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;const{clear:o,control:i,items:s}=t,{key:a,repeat:r,target:l}=e,u=i&&i===l,h=u&&(i==null?void 0:i.selectionEnd);let c=u?s.length:[...s].indexOf(l);if(u&&a==="Tab"&&o&&!o.hidden&&(e.preventDefault(),o.tabIndex=-1,o.focus(),xt(o,"blur",()=>f(o,"tabindex",null),ue)),!(!u&&xo(e)||c===-1)){if(a==="ArrowRight"&&!u)c+=1;else if(a==="ArrowLeft"&&!h)c-=1;else if(a==="Enter"&&u){const T=f(i,"form");return f(i,"form","#"),requestAnimationFrame(()=>f(i,"form",T)),me(t)}else if((a==="Backspace"||a==="Delete")&&!h){if(e.preventDefault(),!r&&s[c])return U(t,s[c]);u&&(c-=1)}else return u||(i==null?void 0:i.focus());e.preventDefault(),(n=s[Math.max(0,c)]||i)==null||n.focus()}};Co.define("u-combobox",rt);const No="1.3.3",E={capture:!0,passive:!0},j=typeof window<"u"&&typeof document<"u";function Ro(t,e){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>t(...o),e)}}function d(t,e,n){return n===void 0?t.getAttribute(e)??null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}let Bo=0;const Uo=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function It(t){return t.id||(t.id=`${Uo}${++Bo}`),t.id}const Fo=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,e[`${t}EventListener`](...n)},m=(t,...e)=>Fo("add",t,e),L=j?document.createElement("div"):null,ct=new Map,Vo=()=>{for(const[t,e]of ct)e()};L&&(L.style.cssText="position:absolute;padding:1px;top:0;left:0px",m(window,"load,resize,scroll",Vo,E));const F={top:0,right:1,bottom:2,left:3};function q(t,e,n,o){var so;if(e===!1||!e.isConnected||!t.isConnected)return ct.delete(t);if(L!=null&&L.isConnected||document.body.append(L||""),!ct.has(t)){const ss=F[n]??F.bottom;return(so=ct.set(t,()=>q(t,e,ss,o)).get(t))==null?void 0:so()}const i=e instanceof HTMLElement,{offsetWidth:s,offsetHeight:a}=t,r=i?e.offsetWidth:e.clientWidth,l=i?e.offsetHeight:e.clientHeight,{width:u,height:h,left:c,top:T}=e.getBoundingClientRect(),w=Math.round(c-(r-u)/2),x=Math.round(T-(l-h)/2),g=w-s>0,A=r+r+s<window.innerWidth,C=x-a>0,Kt=x+l+a<window.innerHeight,ns=n===F.right&&(o||A)||!g,oo=n===F.bottom&&(o||Kt)||!C,os=Math.min(Math.max(10,w-(s-r)/2),window.innerWidth-s-10),is=Math.min(Math.max(10,x-(a-l)/2),window.innerHeight-a-10),io=n===F.top||n===F.bottom;t.style.left=`${Math.round(io?os:ns?w+r:w-s)}px`,t.style.top=`${Math.round(io?oo?x+l:x-a:is)}px`,L==null||L.style.setProperty("translate",`0px ${Math.round(oo?window.scrollY+x+l+a+30:0)}px`)}function he(t){let e=0;const n=()=>setTimeout(o,200),o=()=>{t([],i),i.takeRecords(),e=0},i=new MutationObserver(()=>{e||(e=requestAnimationFrame(n))});return i}const At=new WeakMap,V=(t,e,n)=>{const o=t.getElementsByClassName(e),i=At.get(t)||[];i.length||(At.set(t,i),he((s,a)=>{if(t.isConnected&&(i!=null&&i.length))for(const r of i)r();else a==null||a.disconnect(),At.delete(t)}).observe(t,{attributeFilter:["class"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>n(o))},k=t=>{if(!j)return;const e=()=>requestAnimationFrame(t);document.readyState==="complete"?e():m(window,"load",e)},Lt=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),ve="mattilsynet.matomo.cloud";let Mt=!0;function Wo(t,e={}){if(j){if(window._paq||(window._paq=[],window._paq.push(["HeatmapSessionRecording::disable"]),window._paq.push(["enableLinkTracking"]),window._paq.push(["setTrackerUrl",`https://${ve}/matomo.php`]),document.querySelector('script[src*="matomo.js"]')||document.documentElement.append(Object.assign(document.createElement("script"),{async:!0,src:`https://cdn.matomo.cloud/${ve}/matomo.js`}))),t==="init"){const{matomoId:n,enabled:o=!0}=e;Mt=o,window._paq.push(["setSiteId",n])}if(Mt==="debug")return console.info(`Analytics: "${t}"`,e);if(!(Mt===!1||window.location.hostname==="localhost"))if(t==="pageview"){const{url:n,title:o}=e;window._paq.push(["setCustomUrl",n||location.href]),window._paq.push(["setDocumentTitle",o||document.title]),window._paq.push(["trackPageView"])}else if(t==="event"){const{category:n,action:o,name:i,value:s}=e,a=["trackEvent",n,o,i,s];window._paq.push(a.filter(r=>r!==void 0))}else if(t==="search"){const{query:n,category:o=!1,results:i=!1}=e;window._paq.push(["trackSiteSearch",n,o,i])}else t==="matomo"&&window._paq.push(e)}}const Yo=(t,e,n=Number.POSITIVE_INFINITY)=>{const o=(n-1)/2,i=Math.max(Math.min(t-Math.floor(o),e-n+1),1),s=Math.min(Math.max(t+Math.ceil(o),n),e),a=Array.from({length:s+1-i},(r,l)=>l+i);return n>4&&i>1&&a.splice(0,2,1,0),n>3&&s<e&&a.splice(-2,2,0,e),a},jo=({current:t=1,total:e=10,show:n=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:Yo(t,e,n).map((o,i)=>({current:o===t&&"page",key:`key-${o}-${i}`,page:o}))}),_e="_alert_1x2xq_1 _ds-alert_1ymwv_1",be="_app_1x2xq_1",ge="_sticky_1x2xq_1",ye="_avatar_1x2xq_1 _ds-avatar_1ymwv_1",we="_badge_1x2xq_1",Ee="_breadcrumbs_1x2xq_1 _ds-breadcrumbs_1ymwv_1",xe="_button_1x2xq_1 _ds-button_1ymwv_1",$e="_card_1x2xq_1",Se="_group_1x2xq_1",Te="_chip_1x2xq_1 _ds-chip_1ymwv_1",Ce="_details_1x2xq_1 _ds-details_1ymwv_1",ke="_dialog_1x2xq_1 _ds-dialog_1ymwv_1",Ie="_divider_1x2xq_1",Ae="_errorsummary_1x2xq_1 _ds-error-summary_1ymwv_1",Le="__errorsummary_1x2xq_1",Me="_field_1x2xq_1 _ds-field_1ymwv_1",Oe="_affixes_1x2xq_1 _ds-field-affixes_1ymwv_1",qe="_fieldset_1x2xq_1 _ds-fieldset_1ymwv_1",De="_heading_1x2xq_1 _ds-heading_1ymwv_1",Pe="_ingress_1x2xq_1",He="_muted_1x2xq_1",Ne="_info_1x2xq_1",Re="_prose_1x2xq_1",Be="_helptext_1x2xq_1 _ds-focus_1ymwv_1",Ue="_input_1x2xq_1 _ds-input_1ymwv_1",Fe="_grid_1x2xq_1",Ve="_flex_1x2xq_1",We="_link_1x2xq_1",Ye="_logo_1x2xq_1",je="_pagination_1x2xq_1 _ds-pagination_1ymwv_1",Ke="_popover_1x2xq_1",Ge="_progress_1x2xq_1",Xe="__indeterminate_1x2xq_1",ze="_skeleton_1x2xq_1 _ds-skeleton_1ymwv_1",Qe="__skeleton_1x2xq_1",Je="_spinner_1x2xq_1",Ze="_steps_1x2xq_1",tn="_table_1x2xq_1 _ds-table_1ymwv_1",en="__scrollShadow_1x2xq_1",nn="_tabs_1x2xq_1 _ds-tabs_1ymwv_1",on="__scrollMask_1x2xq_1",sn="_tag_1x2xq_1 _ds-tag_1ymwv_1",an="_togglegroup_1x2xq_1",rn="__tooltip_1x2xq_1",ln="_validation_1x2xq_1 _ds-validation-message_1ymwv_1",cn="_body_1x2xq_154",b={alert:_e,app:be,sticky:ge,avatar:ye,badge:we,breadcrumbs:Ee,button:xe,card:$e,group:Se,chip:Te,details:Ce,dialog:ke,divider:Ie,errorsummary:Ae,_errorsummary:Le,field:Me,affixes:Oe,fieldset:qe,heading:De,ingress:Pe,muted:He,info:Ne,prose:Re,helptext:Be,input:Ue,grid:Fe,flex:Ve,link:We,logo:Ye,pagination:je,popover:Ke,progress:Ge,_indeterminate:Xe,skeleton:ze,_skeleton:Qe,spinner:Je,steps:Ze,table:tn,_scrollShadow:en,tabs:nn,_scrollMask:on,tag:sn,togglegroup:an,_tooltip:rn,validation:ln,body:cn},Ko=Object.freeze(Object.defineProperty({__proto__:null,_errorsummary:Le,_indeterminate:Xe,_scrollMask:on,_scrollShadow:en,_skeleton:Qe,_tooltip:rn,affixes:Oe,alert:_e,app:be,avatar:ye,badge:we,body:cn,breadcrumbs:Ee,button:xe,card:$e,chip:Te,default:b,details:Ce,dialog:ke,divider:Ie,errorsummary:Ae,field:Me,fieldset:qe,flex:Ve,grid:Fe,group:Se,heading:De,helptext:Be,info:Ne,ingress:Pe,input:Ue,link:We,logo:Ye,muted:He,pagination:je,popover:Ke,progress:Ge,prose:Re,skeleton:ze,spinner:Je,steps:Ze,sticky:ge,table:tn,tabs:nn,tag:sn,togglegroup:an,validation:ln},Symbol.toStringTag,{value:"Module"}));typeof window<"u"&&window.CSSStyleSheet&&document.adoptedStyleSheets&&(()=>{const t="--mtds-app-expanded",e=new CSSStyleSheet,n=()=>{var o;return!((o=window.localStorage.getItem(t))!=null&&o.includes("false"))};document.adoptedStyleSheets.push(e),window.mtdsToggleAppExpanded=o=>{var i;try{const s=o??!n();(i=e.replaceSync)==null||i.call(e,`:root { ${t}: var(${t}--${s})}`),window.localStorage.setItem(t,s)}catch{}},window.mtdsToggleAppExpanded(n())})();const dn=b.app.split(" ")[0],Go=b.sticky.split(" ")[0],Xo='[data-command="toggle-app-expanded"]',un=`.${dn} > dialog,.${dn} dialog ~ main`,pn=t=>{document.startViewTransition?document.startViewTransition(t):t()},fn=t=>pn(()=>{var e;return(e=window.mtdsToggleAppExpanded)==null?void 0:e.call(window,t)});function zo({target:t,defaultPrevented:e}){if(!(e||!(t instanceof HTMLButtonElement)||!t.matches(Xo))){if(getComputedStyle(t).position==="sticky")return fn();pn(()=>{const n=document.querySelector(un);n==null||n.setAttribute("data-closedby","any"),n==null||n.showModal()})}}function Qo(){var t;(t=document.querySelector(un))==null||t.close()}let Ot=0,W,M=0,v,qt=0,dt=0,Dt=!1,Pt=0,P=0;function Jo([t]){v=t,mn()}function mn(){var n;if(!(v!=null&&v.isConnected))return;const t=window.scrollY,e=t<P;P=t,e!==W&&(Ot=(((n=v.parentElement)==null?void 0:n.getBoundingClientRect().top)||0)+P,W=e,qt=v.offsetHeight,dt=v.getBoundingClientRect().top+P,Dt=v.offsetHeight<=window.innerHeight,Pt=window.innerHeight),!(M===-1&&Dt)&&(M!==-1&&(Dt||W&&P<=dt)?(v.style.setProperty("--pos","sticky"),v.style.setProperty("--top","0px"),M=-1):M===-1&&!W?(v.style.setProperty("--pos","relative"),v.style.setProperty("--top",`${Math.max(0,P-Ot)}px`),M=0):M!==1&&!W&&P+Pt>=dt+qt?(v.style.setProperty("--pos","sticky"),v.style.setProperty("--top",`${Pt-qt}px`),M=1):M===1&&W&&(v.style.setProperty("--pos","relative"),v.style.setProperty("--top",`${dt-Ot}px`),M=0))}k(()=>{V(document.documentElement,Go,Jo),m(document,"click",zo,E),m(window,"resize",Ro(Qo,100),E),m(window,"scroll",mn,E)});const Zo=b.breadcrumbs.split(" ")[0];function ti(t){for(const e of t)e.querySelectorAll("li a").forEach((n,o,{length:i})=>{d(n,"aria-current",o===i-1?"page":null)})}k(()=>V(document.documentElement,Zo,ti));const ei=b.dialog.split(" ")[0],ni=j?document.getElementsByClassName(ei):[],oi=()=>{for(const t of ni)t.isConnected&&t.showModal&&t.close&&(t.matches('[open]:not([data-modal="false"]):not(:modal)')?(d(t,"open",null),t.showModal()):t.matches(":modal:not([open])")&&(d(t,"open",""),t.close()))},ii=({clientX:t,clientY:e,target:n})=>{var o;if(n instanceof HTMLDialogElement&&d(n,"data-closedby")==="any"){const{top:i,right:s,bottom:a,left:r}=n.getBoundingClientRect();i<=e&&e<=a&&r<=t&&t<=s||n.close()}else n instanceof Element&&n.closest('button[data-command="close"]')&&((o=n==null?void 0:n.closest("dialog"))==null||o.close())};k(()=>{m(document,"click",ii,E),he(oi).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function si(t){var n;if(t.animationName!==b._errorsummary)return;const e=(n=t.target)==null?void 0:n.firstElementChild;e instanceof HTMLHeadingElement&&(d(e,"tabindex","-1"),e.focus())}k(()=>m(document,"animationend",si,E));var ai=Object.defineProperty,hn=Object.getOwnPropertySymbols,ri=Object.prototype.hasOwnProperty,li=Object.prototype.propertyIsEnumerable,vn=(t,e,n)=>e in t?ai(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,ci=(t,e)=>{for(var n in e||(e={}))ri.call(e,n)&&vn(t,n,e[n]);if(hn)for(var n of hn(e))li.call(e,n)&&vn(t,n,e[n]);return t},K=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",ut=K&&/android/i.test(navigator.userAgent),Ht=K&&/iPad|iPhone|iPod/.test(navigator.userAgent),_n;K&&/^Mac/i.test(((_n=navigator.userAgentData)==null?void 0:_n.platform)||navigator.platform);var di=`${ut?"data":"aria"}-labelledby`,ui=":host(:not([hidden])) { display: block }",pi="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",bn=typeof HTMLElement>"u"?class{}:HTMLElement;function p(t,e,n){return n===void 0?t.getAttribute(e):(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var gn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},pt=(t,...e)=>gn("add",t,e),ft=(t,...e)=>gn("remove",t,e),fi=(t,e)=>t.attachShadow({mode:"open"}).append(Rt("slot"),Rt("style",e)),mt=new WeakMap,yn=(t,e)=>{if(e===void 0)return mt.get(t);try{mt.get(t).disconnect(),mt.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),mt.set(t,n)}},wn=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},mi=0,Nt=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++mi).toString(32)}`),t.id):"",Rt=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},En={define:(t,e)=>!K||window.customElements.get(t)||window.customElements.define(t,e)},H,hi=0,xn=t=>{H||(H=Rt("div"),H.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",p(H,"aria-live","assertive")),H.isConnected||document.body.append(H),t&&(H.textContent=`${t}${hi++%2?" ":""}`)},vi=(t,e,n="")=>{var o,i;const s={bubbles:!0,composed:!0,data:e,inputType:n},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(o=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:o.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},Bt="disabled",G="selected",_i=class extends bn{static get observedAttributes(){return[Bt,G]}connectedCallback(){Ht||(this.tabIndex=-1),this.hasAttribute("role")||p(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){p(this,"aria-disabled",`${this.disabled}`),p(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[G]}set defaultSelected(t){this[G]=t}get disabled(){return p(this,Bt)!==null}set disabled(t){p(this,Bt,t?"":null)}get form(){return this.closest("form")}get index(){var t;return[...((t=this.parentElement)==null?void 0:t.options)||[this]].indexOf(this)}get label(){var t;return(t=p(this,"label"))!=null?t:this.text}set label(t){p(this,"label",t)}get selected(){return p(this,G)!==null}set selected(t){p(this,G,t?"":null)}get text(){var t;return((t=this.textContent)==null?void 0:t.trim())||""}set text(t){this.textContent=t}get value(){var t;return(t=p(this,"value"))!=null?t:this.text}set value(t){p(this,"value",t)}};En.define("u-option",_i);var $n,Sn=0,Ut=!1,bi=Ht||ut,Tn="click,focusout,input,keydown,mousedown,mouseup",Cn="focus,focusin,blur,focusout",ht={singular:"%d hit",plural:"%d hits"},kn=class extends bn{constructor(){super(),this._texts=ci({},ht),this._value="",fi(this,`${ui}
8
+ ::slotted(data:focus) { ${wo} }`))}static get observedAttributes(){return Object.keys(at).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=To(this),$t(this,de,this,!0),St(this,{childList:!0,subtree:!0}),setTimeout(lt,0,this),setTimeout(Ct,0,this)}attributeChangedCallback(t,e,n){const o=t.split("data-sr-")[1];at[o]&&(this._texts[o]=n||at[o])}disconnectedCallback(){St(this,!1),$o(this,de,this,!0),this._items=this._clear=this._focus=this._control=void 0,this._list=this._options=this._root=void 0}handleEvent(t){const e=t.target;t.type==="beforeinput"&&(this._value=(e==null?void 0:e.value)||""),t.type==="blur"&&Do(this),t.type==="click"&&Ho(this,t),t.type==="focus"&&Oo(this,t),t.type==="input"&&No(this,t),t.type==="keydown"&&Ro(this,t),t.type==="mousedown"&&(xt=this.contains(e)),t.type==="mouseup"&&(xt=!1),t.type==="mutation"&&lt(this,t)}get multiple(){var t;return((t=p(this,"data-multiple"))!=null?t:st)!==st}set multiple(t){p(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=p(this,"data-creatable"))!=null?t:st)!==st}set creatable(t){p(this,"data-creatable",t?"":null)}get control(){var t;return(t=this._control)!=null&&t.isConnected||(this._control=this.querySelector("input")),this._control}get list(){var t;return(t=this._list)!=null&&t.isConnected||(this._list=this.querySelector("u-datalist,datalist")),this._list}get clear(){var t;return(t=this._clear)!=null&&t.isConnected||(this._clear=this.querySelector("del")),this._clear}get items(){return this._items||(this._items=this.getElementsByTagName("data")),this._items}get options(){var t,e;if(!this._options){const n=((t=this.list)==null?void 0:t.nodeName)==="U-DATALIST"?"u-option":"option";this._options=(e=this.list)==null?void 0:e.getElementsByTagName(n)}return this._options}get values(){return[...this.items].map(({value:t})=>t)}},U=t=>{var e;return((e=t==null?void 0:t.textContent)==null?void 0:e.trim())||""},kt=t=>t instanceof HTMLDataElement,lt=(t,e)=>{var n,o;const{_focus:i,_texts:s,items:a,control:r,list:l,multiple:u}=t;let h=`${U((n=r==null?void 0:r.labels)==null?void 0:n[0])}, ${u?a.length?s.found.replace("%d",`${a.length}`):s.empty:""}`;const c=[];for(const{addedNodes:g,removedNodes:A}of(e==null?void 0:e.detail)||[]){for(const k of g)kt(k)&&c.unshift(k);for(const k of A)kt(k)&&c.push(k)}const x=u?c.length===1:c[0]===i;if(i&&r&&x){const g=p(r,"inputmode"),A=kt(i)?r:i;t._speak=`${s[c[0].isConnected?"added":"removed"]} ${U(c[0])}, `,(Lo||i===r)&&Tt(t._speak),r!==A&&(p(r,"aria-expanded",null),p(r,"inputmode","none"),h=" ",r.focus()),setTimeout(()=>{var k;p(r,"aria-expanded","true"),p(r,"inputmode",g),(k=A==null?void 0:A.focus)==null||k.call(A),t._speak="",Ao?$t(t,"blur",()=>lt(t),ue):setTimeout(lt,100,t)},100)}let w=0;for(const g of a){const A=U(g),k=g.value||A,Kt=`${t._speak}${A}, ${s.remove}, ${++w} ${s.of} ${a.length}`;p(g,"role","button"),p(g,"value",k),p(g,"tabindex","-1"),p(g,"aria-label",Kt)}!u&&w>1&&console.warn("u-combobox: Multiple <data> found in single mode."),l&&p(l,"aria-multiselectable",`${u}`),r&&p(r,"list",ko(l)),r&&p(r,"aria-label",`${t._speak}${h}`);const $=t.querySelector("select");$&&($.multiple=u),$&&($.textContent=""),$==null||$.append(...t.values.map(g=>new Option(g,g,!0,!0))),fe(t),pe(t),(o=St(t))==null||o.takeRecords()},fe=t=>{var e;t.clear&&p(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value))},pe=t=>{var e;const{_speak:n,options:o=[],values:i}=t;for(const s of o){const a=(e=p(s,"value"))!=null?e:U(s);p(s,"aria-label",n?`${n}${U(s)}`:null),p(s,"selected",i.includes(a)?"":null)}},Ct=t=>{const{multiple:e,control:n,items:o}=t,i=U(o[0]);!e&&n&&i!==n.value&&ce(n,i,"insertText")},me=(t,e=!0)=>{var n;const{_texts:o,options:i=[],creatable:s,control:a,items:r,multiple:l}=t,u=((n=a==null?void 0:a.value)==null?void 0:n.trim())||"",h=u.toLowerCase()||null;let c=[...i].find(w=>w.label.trim().toLowerCase()===h);const x={bubbles:!0,cancelable:!0,detail:c};if(t.dispatchEvent(new CustomEvent("beforematch",x)))for(const w of i)w.selected=w===c;if(c=[...i].find(w=>w.selected),pe(t),c)return q(t,c,!1,!!e);if(s&&u)return q(t,{value:u},!1);!l&&r[0]&&q(t,r[0],!0,!1),e&&Tt(o.invalid)},q=(t,e,n=!0,o=!0)=>{const{control:i,items:s,multiple:a}=t,r=it("data",e.label||e.value,{value:e.value}),l=[...s].find(c=>c.value===e.value),u={bubbles:!0,cancelable:!0,detail:l||r};if(!(l&&!n)&&t.dispatchEvent(new CustomEvent("beforechange",u))){if(!a)for(const c of[...s])c.remove();l?l.remove():i==null||i.insertAdjacentElement("beforebegin",r),t.dispatchEvent(new CustomEvent("afterchange",u))}o&&setTimeout(Ct,10,t)},Oo=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),Tt()},Do=t=>xt||setTimeout(Po,0,t),Po=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(t._focus=void 0,Ct(t))},Ho=(t,e)=>{const{clientX:n,clientY:o,target:i}=e,{clear:s,control:a,items:r}=t;if(s!=null&&s.contains(i))return a&&ce(a,"","deleteContentBackward"),a==null?void 0:a.focus();for(const l of r){const{top:u,right:h,bottom:c,left:x}=l.getBoundingClientRect();if(l.contains(i))return q(t,l);if(o>=u&&o<=c&&n>=x&&n<=h)return l.focus()}i===t&&(a==null||a.focus())},No=(t,e)=>{var n;const{options:o=[],control:i,multiple:s}=t,a=((n=i==null?void 0:i.value)==null?void 0:n.trim())||"";if(e instanceof InputEvent?!e.inputType||e.inputType===Mo:!!a){e.stopImmediatePropagation(),i&&(i.value=t._value);for(const l of o)if(l.value&&l.value===a)return q(t,l,s)}else s||me(t,!1);fe(t)},Ro=(t,e)=>{var n;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)return;const{clear:o,control:i,items:s}=t,{key:a,repeat:r,target:l}=e,u=i&&i===l,h=u&&(i==null?void 0:i.selectionEnd);let c=u?s.length:[...s].indexOf(l);if(u&&a==="Tab"&&o&&!o.hidden&&(e.preventDefault(),o.tabIndex=-1,o.focus(),$t(o,"blur",()=>p(o,"tabindex",null),ue)),!(!u&&So(e)||c===-1)){if(a==="ArrowRight"&&!u)c+=1;else if(a==="ArrowLeft"&&!h)c-=1;else if(a==="Enter"&&u){const x=p(i,"form");return p(i,"form","#"),requestAnimationFrame(()=>p(i,"form",x)),me(t)}else if((a==="Backspace"||a==="Delete")&&!h){if(e.preventDefault(),!r&&s[c])return q(t,s[c]);u&&(c-=1)}else return u||(i==null?void 0:i.focus());e.preventDefault(),(n=s[Math.max(0,c)]||i)==null||n.focus()}};Co.define("u-combobox",rt);const Bo="1.3.5",E={capture:!0,passive:!0},j=typeof window<"u"&&typeof document<"u";function Uo(t,e){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>t(...o),e)}}function d(t,e,n){return n===void 0?t.getAttribute(e)??null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}let qo=0;const Fo=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function It(t){return t.id||(t.id=`${Fo}${++qo}`),t.id}const Vo=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,e[`${t}EventListener`](...n)},m=(t,...e)=>Vo("add",t,e),L=j?document.createElement("div"):null,ct=new Map,Wo=()=>{for(const[t,e]of ct)e()};L&&(L.style.cssText="position:absolute;padding:1px;top:0;left:0px",m(window,"load,resize,scroll",Wo,E));const F={top:0,right:1,bottom:2,left:3};function D(t,e,n,o){var ao;if(e===!1||!e.isConnected||!t.isConnected)return ct.delete(t);if(L!=null&&L.isConnected||document.body.append(L||""),!ct.has(t)){const as=F[n]??F.bottom;return(ao=ct.set(t,()=>D(t,e,as,o)).get(t))==null?void 0:ao()}const i=e instanceof HTMLElement,{offsetWidth:s,offsetHeight:a}=t,r=i?e.offsetWidth:e.clientWidth,l=i?e.offsetHeight:e.clientHeight,{width:u,height:h,left:c,top:x}=e.getBoundingClientRect(),w=Math.round(c-(r-u)/2),$=Math.round(x-(l-h)/2),g=w-s>0,A=r+r+s<window.innerWidth,k=$-a>0,Kt=$+l+a<window.innerHeight,os=n===F.right&&(o||A)||!g,io=n===F.bottom&&(o||Kt)||!k,is=Math.min(Math.max(10,w-(s-r)/2),window.innerWidth-s-10),ss=Math.min(Math.max(10,$-(a-l)/2),window.innerHeight-a-10),so=n===F.top||n===F.bottom;t.style.left=`${Math.round(so?is:os?w+r:w-s)}px`,t.style.top=`${Math.round(so?io?$+l:$-a:ss)}px`,L==null||L.style.setProperty("translate",`0px ${Math.round(io?window.scrollY+$+l+a+30:0)}px`)}function he(t){let e=0;const n=()=>setTimeout(o,200),o=()=>{t([],i),i.takeRecords(),e=0},i=new MutationObserver(()=>{e||(e=requestAnimationFrame(n))});return i}const At=new WeakMap,V=(t,e,n)=>{const o=t.getElementsByClassName(e),i=At.get(t)||[];i.length||(At.set(t,i),he((s,a)=>{if(t.isConnected&&(i!=null&&i.length))for(const r of i)r();else a==null||a.disconnect(),At.delete(t)}).observe(t,{attributeFilter:["class"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>n(o))},C=t=>{if(!j)return;const e=()=>requestAnimationFrame(t);document.readyState==="complete"?e():m(window,"load",e)},Lt=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),be="mattilsynet.matomo.cloud";let Mt=!0;function Yo(t,e={}){if(j){if(window._paq||(window._paq=[],window._paq.push(["HeatmapSessionRecording::disable"]),window._paq.push(["enableLinkTracking"]),window._paq.push(["setTrackerUrl",`https://${be}/matomo.php`]),document.querySelector('script[src*="matomo.js"]')||document.documentElement.append(Object.assign(document.createElement("script"),{async:!0,src:`https://cdn.matomo.cloud/${be}/matomo.js`}))),t==="init"){const{matomoId:n,enabled:o=!0}=e;Mt=o,window._paq.push(["setSiteId",n])}if(Mt==="debug")return console.info(`Analytics: "${t}"`,e);if(!(Mt===!1||window.location.hostname==="localhost"))if(t==="pageview"){const{url:n,title:o}=e;window._paq.push(["setCustomUrl",n||location.href]),window._paq.push(["setDocumentTitle",o||document.title]),window._paq.push(["trackPageView"])}else if(t==="event"){const{category:n,action:o,name:i,value:s}=e,a=["trackEvent",n,o,i,s];window._paq.push(a.filter(r=>r!==void 0))}else if(t==="search"){const{query:n,category:o=!1,results:i=!1}=e;window._paq.push(["trackSiteSearch",n,o,i])}else t==="matomo"&&window._paq.push(e)}}const jo=(t,e,n=Number.POSITIVE_INFINITY)=>{const o=(n-1)/2,i=Math.max(Math.min(t-Math.floor(o),e-n+1),1),s=Math.min(Math.max(t+Math.ceil(o),n),e),a=Array.from({length:s+1-i},(r,l)=>l+i);return n>4&&i>1&&a.splice(0,2,1,0),n>3&&s<e&&a.splice(-2,2,0,e),a},Ko=({current:t=1,total:e=10,show:n=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:jo(t,e,n).map((o,i)=>({current:o===t&&"page",key:`key-${o}-${i}`,page:o}))}),ve="_alert_1bf95_1 _ds-alert_1ymwv_1",_e="_app_1bf95_1",ge="_sticky_1bf95_1",ye="_avatar_1bf95_1 _ds-avatar_1ymwv_1",we="_badge_1bf95_1",Ee="_breadcrumbs_1bf95_1 _ds-breadcrumbs_1ymwv_1",$e="_button_1bf95_1 _ds-button_1ymwv_1",Se="_card_1bf95_1",Te="_group_1bf95_1",xe="_chip_1bf95_1 _ds-chip_1ymwv_1",ke="_details_1bf95_1 _ds-details_1ymwv_1",Ce="_dialog_1bf95_1 _ds-dialog_1ymwv_1",Ie="_divider_1bf95_1",Ae="_errorsummary_1bf95_1 _ds-error-summary_1ymwv_1",Le="__errorsummary_1bf95_1",Me="_field_1bf95_1 _ds-field_1ymwv_1",Oe="_affixes_1bf95_1 _ds-field-affixes_1ymwv_1",De="_fieldset_1bf95_1 _ds-fieldset_1ymwv_1",Pe="_heading_1bf95_1 _ds-heading_1ymwv_1",He="_ingress_1bf95_1",Ne="_muted_1bf95_1",Re="_info_1bf95_1",Be="_prose_1bf95_1",Ue="_helptext_1bf95_1 _ds-focus_1ymwv_1",qe="_input_1bf95_1 _ds-input_1ymwv_1",Fe="_grid_1bf95_1",Ve="_flex_1bf95_1",We="_link_1bf95_1",Ye="_logo_1bf95_1",je="_pagination_1bf95_1 _ds-pagination_1ymwv_1",Ke="_popover_1bf95_1",Ge="_progress_1bf95_1",Xe="__indeterminate_1bf95_1",ze="_skeleton_1bf95_1 _ds-skeleton_1ymwv_1",Qe="__skeleton_1bf95_1",Je="_spinner_1bf95_1",Ze="_steps_1bf95_1",tn="_table_1bf95_1 _ds-table_1ymwv_1",en="__scrollShadow_1bf95_1",nn="_tabs_1bf95_1 _ds-tabs_1ymwv_1",on="__scrollMask_1bf95_1",sn="_tag_1bf95_1 _ds-tag_1ymwv_1",an="_togglegroup_1bf95_1",rn="__tooltip_1bf95_1",ln="_validation_1bf95_1 _ds-validation-message_1ymwv_1",cn="_body_1bf95_153",dn="__checked_1bf95_1",_={alert:ve,app:_e,sticky:ge,avatar:ye,badge:we,breadcrumbs:Ee,button:$e,card:Se,group:Te,chip:xe,details:ke,dialog:Ce,divider:Ie,errorsummary:Ae,_errorsummary:Le,field:Me,affixes:Oe,fieldset:De,heading:Pe,ingress:He,muted:Ne,info:Re,prose:Be,helptext:Ue,input:qe,grid:Fe,flex:Ve,link:We,logo:Ye,pagination:je,popover:Ke,progress:Ge,_indeterminate:Xe,skeleton:ze,_skeleton:Qe,spinner:Je,steps:Ze,table:tn,_scrollShadow:en,tabs:nn,_scrollMask:on,tag:sn,togglegroup:an,_tooltip:rn,validation:ln,body:cn,_checked:dn},Go=Object.freeze(Object.defineProperty({__proto__:null,_checked:dn,_errorsummary:Le,_indeterminate:Xe,_scrollMask:on,_scrollShadow:en,_skeleton:Qe,_tooltip:rn,affixes:Oe,alert:ve,app:_e,avatar:ye,badge:we,body:cn,breadcrumbs:Ee,button:$e,card:Se,chip:xe,default:_,details:ke,dialog:Ce,divider:Ie,errorsummary:Ae,field:Me,fieldset:De,flex:Ve,grid:Fe,group:Te,heading:Pe,helptext:Ue,info:Re,ingress:He,input:qe,link:We,logo:Ye,muted:Ne,pagination:je,popover:Ke,progress:Ge,prose:Be,skeleton:ze,spinner:Je,steps:Ze,sticky:ge,table:tn,tabs:nn,tag:sn,togglegroup:an,validation:ln},Symbol.toStringTag,{value:"Module"}));typeof window<"u"&&window.CSSStyleSheet&&document.adoptedStyleSheets&&(()=>{const t="--mtds-app-expanded",e=new CSSStyleSheet,n=()=>{var o;return!((o=window.localStorage.getItem(t))!=null&&o.includes("false"))};document.adoptedStyleSheets.push(e),window.mtdsToggleAppExpanded=o=>{var i;try{const s=o??!n();(i=e.replaceSync)==null||i.call(e,`:root { ${t}: var(${t}--${s})}`),window.localStorage.setItem(t,s)}catch{}},window.mtdsToggleAppExpanded(n())})();const un=_.app.split(" ")[0],Xo=_.sticky.split(" ")[0],zo='[data-command="toggle-app-expanded"]',fn=`.${un} > dialog,.${un} dialog ~ main`,pn=t=>{document.startViewTransition?document.startViewTransition(t):t()},mn=t=>pn(()=>{var e;return(e=window.mtdsToggleAppExpanded)==null?void 0:e.call(window,t)});function Qo({target:t,defaultPrevented:e}){if(!(e||!(t instanceof HTMLButtonElement)||!t.matches(zo))){if(getComputedStyle(t).position==="sticky")return mn();pn(()=>{const n=document.querySelector(fn);n==null||n.setAttribute("data-closedby","any"),n==null||n.showModal()})}}function Jo(){var t;(t=document.querySelector(fn))==null||t.close()}let Ot=0,W,M=0,b,Dt=0,dt=0,Pt=!1,Ht=0,H=0;function Zo([t]){b=t,hn()}function hn(){var n;if(!(b!=null&&b.isConnected))return;const t=window.scrollY,e=t<H;H=t,e!==W&&(Ot=(((n=b.parentElement)==null?void 0:n.getBoundingClientRect().top)||0)+H,W=e,Dt=b.offsetHeight,dt=b.getBoundingClientRect().top+H,Pt=b.offsetHeight<=window.innerHeight,Ht=window.innerHeight),!(M===-1&&Pt)&&(M!==-1&&(Pt||W&&H<=dt)?(b.style.setProperty("--pos","sticky"),b.style.setProperty("--top","0px"),M=-1):M===-1&&!W?(b.style.setProperty("--pos","relative"),b.style.setProperty("--top",`${Math.max(0,H-Ot)}px`),M=0):M!==1&&!W&&H+Ht>=dt+Dt?(b.style.setProperty("--pos","sticky"),b.style.setProperty("--top",`${Ht-Dt}px`),M=1):M===1&&W&&(b.style.setProperty("--pos","relative"),b.style.setProperty("--top",`${dt-Ot}px`),M=0))}C(()=>{V(document.documentElement,Xo,Zo),m(document,"click",Qo,E),m(window,"resize",Uo(Jo,100),E),m(window,"scroll",hn,E)});const ti=_.breadcrumbs.split(" ")[0];function ei(t){for(const e of t)e.querySelectorAll("li a").forEach((n,o,{length:i})=>{d(n,"aria-current",o===i-1?"page":null)})}C(()=>V(document.documentElement,ti,ei));const ni=_.dialog.split(" ")[0],oi=j?document.getElementsByClassName(ni):[],ii=()=>{for(const t of oi)t.isConnected&&t.showModal&&t.close&&(t.matches('[open]:not([data-modal="false"]):not(:modal)')?(d(t,"open",null),t.showModal()):t.matches(":modal:not([open])")&&(d(t,"open",""),t.close()))},si=({clientX:t,clientY:e,target:n})=>{var o;if(n instanceof HTMLDialogElement&&d(n,"data-closedby")==="any"){const{top:i,right:s,bottom:a,left:r}=n.getBoundingClientRect();i<=e&&e<=a&&r<=t&&t<=s||n.close()}else n instanceof Element&&n.closest('button[data-command="close"]')&&((o=n==null?void 0:n.closest("dialog"))==null||o.close())};C(()=>{m(document,"click",si,E),he(ii).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function ai(t){var n;if(t.animationName!==_._errorsummary)return;const e=(n=t.target)==null?void 0:n.firstElementChild;e instanceof HTMLHeadingElement&&(d(e,"tabindex","-1"),e.focus())}C(()=>m(document,"animationend",ai,E));var ri=Object.defineProperty,bn=Object.getOwnPropertySymbols,li=Object.prototype.hasOwnProperty,ci=Object.prototype.propertyIsEnumerable,vn=(t,e,n)=>e in t?ri(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,di=(t,e)=>{for(var n in e||(e={}))li.call(e,n)&&vn(t,n,e[n]);if(bn)for(var n of bn(e))ci.call(e,n)&&vn(t,n,e[n]);return t},K=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",ut=K&&/android/i.test(navigator.userAgent),Nt=K&&/iPad|iPhone|iPod/.test(navigator.userAgent),_n;K&&/^Mac/i.test(((_n=navigator.userAgentData)==null?void 0:_n.platform)||navigator.platform);var ui=`${ut?"data":"aria"}-labelledby`,fi=":host(:not([hidden])) { display: block }",pi="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",gn=typeof HTMLElement>"u"?class{}:HTMLElement;function f(t,e,n){return n===void 0?t.getAttribute(e):(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var yn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},ft=(t,...e)=>yn("add",t,e),pt=(t,...e)=>yn("remove",t,e),mi=(t,e)=>t.attachShadow({mode:"open"}).append(Bt("slot"),Bt("style",e)),mt=new WeakMap,wn=(t,e)=>{if(e===void 0)return mt.get(t);try{mt.get(t).disconnect(),mt.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),mt.set(t,n)}},En=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},hi=0,Rt=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++hi).toString(32)}`),t.id):"",Bt=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},$n={define:(t,e)=>!K||window.customElements.get(t)||window.customElements.define(t,e)},N,bi=0,Sn=t=>{N||(N=Bt("div"),N.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",f(N,"aria-live","assertive")),N.isConnected||document.body.append(N),t&&(N.textContent=`${t}${bi++%2?" ":""}`)},vi=(t,e,n="")=>{var o,i;const s={bubbles:!0,composed:!0,data:e,inputType:n},a=HTMLInputElement.prototype;t.dispatchEvent(new InputEvent("beforeinput",s)),(i=(o=Object.getOwnPropertyDescriptor(a,"value"))==null?void 0:o.set)==null||i.call(t,e),t.dispatchEvent(new InputEvent("input",s)),t.dispatchEvent(new Event("change",{bubbles:!0}))},Ut="disabled",G="selected",_i=class extends gn{static get observedAttributes(){return[Ut,G]}connectedCallback(){Nt||(this.tabIndex=-1),this.hasAttribute("role")||f(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){f(this,"aria-disabled",`${this.disabled}`),f(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[G]}set defaultSelected(t){this[G]=t}get disabled(){return f(this,Ut)!==null}set disabled(t){f(this,Ut,t?"":null)}get form(){return this.closest("form")}get index(){var t;return[...((t=this.parentElement)==null?void 0:t.options)||[this]].indexOf(this)}get label(){var t;return(t=f(this,"label"))!=null?t:this.text}set label(t){f(this,"label",t)}get selected(){return f(this,G)!==null}set selected(t){f(this,G,t?"":null)}get text(){var t;return((t=this.textContent)==null?void 0:t.trim())||""}set text(t){this.textContent=t}get value(){var t;return(t=f(this,"value"))!=null?t:this.text}set value(t){f(this,"value",t)}};$n.define("u-option",_i);var Tn,xn=0,qt=!1,gi=Nt||ut,kn="click,focusout,input,keydown,mousedown,mouseup",Cn="focus,focusin,blur,focusout",ht={singular:"%d hit",plural:"%d hits"},In=class extends gn{constructor(){super(),this._texts=di({},ht),this._value="",mi(this,`${fi}
9
9
  ::slotted(u-option) { display: block; cursor: pointer }
10
10
  ::slotted(u-option:focus) { ${pi} }
11
11
  ::slotted(u-option[aria-hidden="true"]),
12
12
  ::slotted(u-option[disabled]),
13
- ::slotted(u-option[hidden]) { display: none !important }`)}static get observedAttributes(){return["id",...Object.keys(ht).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=wn(this),p(this,"role","listbox"),p(this,"tabindex","-1"),pt(this._root,"focusin",this),pt(this._root,"focus",this,!0),yn(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){ft(this._root||this,"focus",this,!0),ft(this._root||this,"focusin",this),yn(this,!1),Ft(this),this._root=void 0}attributeChangedCallback(t,e,n){const o=t==null?void 0:t.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(ht[o])this._texts[o]=n||ht[o];else if(this._root)for(const s of this._root.querySelectorAll(i))In(this,s)}handleEvent(t){const{target:e,type:n}=t;t.defaultPrevented||(n==="click"&&wi(this,t),(n==="focus"||n==="focusin")&&gi(this,t),(n==="blur"||n==="focusout")&&yi(this,t),n==="keydown"&&Ei(this,t),n==="mousedown"&&(Ut=this.contains(e)),n==="mouseup"&&(Ut=!1),(n==="mutation"||n==="input")&&(clearTimeout(Sn),Sn=setTimeout(Ln,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},X=(t,e)=>{var n;t.hidden===e&&(t.hidden=!e,t._input&&In(t,t._input,e),t.popover&&((n=t._input)!=null&&n.isConnected)&&(p(t._input,"popovertarget",Nt(t)),p(t,"popover","manual"),t.togglePopover(e)),e&&Ln(t))},Ft=t=>{t._input&&(ft(t._input||t,Cn,t),ft(t._root||t,Tn,t),X(t,!1),t._input=void 0)},In=(t,e,n=!1)=>{pt(e,Cn,t,!0),p(e,"aria-autocomplete","list"),p(e,"aria-controls",Nt(t)),p(e,"aria-expanded",`${bi?n:"true"}`),p(e,"autocomplete","off"),p(e,"role","combobox")},gi=(t,e)=>{var n;const o=e.target instanceof HTMLInputElement;o&&e.isTrusted&&e.stopImmediatePropagation(),t._input!==e.target&&o&&e.target.list===t&&(t._input&&Ft(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus")),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),p(t,di,Nt((n=t._input.labels)==null?void 0:n[0])),pt(t._root||t,Tn,t),X(t,!0),xn())},yi=(t,e)=>{!ut&&!Ut&&t._input&&setTimeout(An,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},An=t=>{var e;const n=((e=t._root)==null?void 0:e.activeElement)||null,o=t._input;o&&o!==n&&!t.contains(n)&&(o.dispatchEvent(new FocusEvent("blur",{relatedTarget:n})),o.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:n})),Ft(t))},wi=(t,{target:e})=>{var n;if(!t._input||t._input===e)return X(t,!0);for(const o of t.options)if(o.contains(e))return p(t,"aria-multiselectable")!=="true"&&((n=t._input)==null||n.focus(),X(t,!1)),vi(t._input,o.value);ut&&An(t)},Ei=(t,e)=>{var n;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey||e.key==="Tab")return;X(t,e.key!=="Escape");const{key:o,target:i}=e,s=[...t.options].filter(l=>p(l,"aria-hidden")!=="true"&&l.offsetHeight),a=s.indexOf(i);let r=-1;if(o==="ArrowDown"&&(r=(a+1)%s.length),o==="ArrowUp"&&(r=(~a?a:s.length)-1),~a&&((o==="Home"||o==="PageUp")&&(r=0),(o==="End"||o==="PageDown")&&(r=s.length-1),o==="Enter"))return s[a].click(),e.preventDefault();if(s[r])for(const l of s)l.tabIndex=-1;s[r]&&e.preventDefault(),(n=s[r]||t._input)==null||n.focus()},Ln=(t,e)=>{const{_texts:n,_root:o,_input:i,options:s}=t,a=(i==null?void 0:i.value.toLowerCase().trim())||"",r=!t.hasAttribute("data-nofilter"),l=[],u=[];for(const c of s)(c.disabled||c.hidden||r&&!c.label.toLowerCase().includes(a)||!c.offsetHeight?l:u).push(c);for(const c of l)p(c,"aria-hidden","true");for(const c of u)p(c,"aria-hidden","false");const h=u.length;clearTimeout($n),(e==null?void 0:e.type)==="input"&&a!==t._value&&($n=setTimeout(()=>{const c=`${!h&&t.innerText.trim()||`${n[h===1?"singular":"plural"]}`.replace("%d",`${h}`)}`;!t.hidden&&(o==null?void 0:o.activeElement)===i&&xn(c),t._value=a},1e3)),Ht&&u.forEach((c,T)=>p(c,"title",`${T+1}/${h}`))};K&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return wn(this).getElementById(p(this,"list")||"")}}),En.define("u-datalist",kn);const Mn=b.field.split(" ")[0],On=b.validation.split(" "),xi=On[0],I=(t,e)=>{var n;return((n=t.getPropertyValue(`--mtds-text-${e}`))==null?void 0:n.slice(1,-1))||""};function $i(t){for(const e of t)if(e.isConnected){const n=[],o=[];let i=null,s=null,a=!0;for(const r of e.getElementsByTagName("*"))r instanceof HTMLLabelElement?n.push(r):r instanceof rt?i=r:Lt(r)?s=r:r.hasAttribute("data-description")?o.push(r):r.classList.contains(xi)?(a=d(r,"data-color")==="success"||!r.clientWidth||!r.clientHeight,o.unshift(r)):r instanceof HTMLParagraphElement&&(o.some(l=>l.contains(r))||o.push(r));if(s){for(const r of n)r.htmlFor=It(s);Si(i),Dn(s),qn(s),d(s,"aria-describedby",o.map(It).join(" ")||null),d(s,"aria-invalid",`${!a}`)}}}function qn(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function Si(t){var n;if(!(t!=null&&t.list)||(n=t.list)!=null&&n.hasAttribute("popover"))return;const e=window.getComputedStyle(t);d(t,"data-sr-added",I(e,"combobox-added")),d(t,"data-sr-empty",I(e,"combobox-empty")),d(t,"data-sr-found",I(e,"combobox-found")),d(t,"data-sr-invalid",I(e,"combobox-invalid")),d(t,"data-sr-of",I(e,"combobox-of")),d(t,"data-sr-remove",I(e,"combobox-remove")),d(t,"data-sr-removed",I(e,"combobox-removed")),d(t.list,"data-sr-plural",I(e,"datalist-plural")),d(t.list,"data-sr-singular",I(e,"datalist-singular")),d(t.list,"popover","manual")}function Dn(t){const e=t==null?void 0:t.nextElementSibling,n=e&&d(e,"data-count");if(e&&n){const o=Number(n)-t.value.length,i=o<0,s=d(e,"aria-live")==="polite",a=window.getComputedStyle(e||t),r=I(a,"count-over"),l=I(a,"count-under");if(s!==i){d(e,"aria-live",i?"polite":"off");for(const u of On)e.classList.toggle(u,i)}e.textContent=(i?r:l).replace("%d",`${Math.abs(o)}`)}}function Ti({target:t,newState:e}){if(t instanceof kn){const n=t.getRootNode(),o=n==null?void 0:n.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?q(t,!1):o&&(t.style.width=`${o.clientWidth}px`,q(t,o,"bottom",!0))}}function Ci({target:t}){Lt(t)&&(Dn(t),qn(t))}function ki(t){var e,n;(n=(e=t.target)==null?void 0:e.closest)!=null&&n.call(e,`.${Mn}`)&&t.preventDefault()}function Ii({target:t}){const e=t instanceof rt&&t.list;e&&!(e!=null&&e.hidden)&&setTimeout(()=>q(e,t,2,!0),10)}k(()=>{V(document.documentElement,Mn,$i),m(document,"beforechange",Ii,E),m(document,"input",Ci,E),m(document,"invalid",ki,!0),m(document,"toggle",Ti,E)});const Ai=b.fieldset.split(" ")[0],Li=b.validation.split(" ")[0],Pn="aria-describedby",Mi="aria-invalid";function Oi(t){requestAnimationFrame(()=>{var e;for(const n of t)if(n.isConnected){const o=[];let i=null;for(const s of n.getElementsByTagName("*"))s.classList.contains(Li)?i=It(s):Lt(s)&&o.push(s);for(const s of o){const a=(e=d(s,Pn))==null?void 0:e.replace(i||"#","");d(s,Pn,`${i||""} ${a||""}`.trim()),d(s,Mi,`${!!i}`)}}})}k(()=>V(document.documentElement,Ai,Oi));const qi=b.logo.split(" ")[0];function Di([t]){if(t!=null&&t.isConnected&&(t==null?void 0:t.firstElementChild)instanceof SVGSVGElement){for(const r of document.head.querySelectorAll("link[rel~='icon']"))r.setAttribute("rel","disabled");const e=t.firstElementChild,n=t==null?void 0:t.hasAttribute("data-env"),o=window.getComputedStyle(e),i=o.getPropertyValue("color"),s=o.getPropertyValue("--mtds-logo-color"),a=e.outerHTML.replace(/\n+/g," ").replace(/(fill|width|height|xmlns)="[^"]+"/gi,"").replace("<svg",`<svg width="40" height="40" fill="${i}"`);document.head.appendChild(Object.assign(document.createElement("link"),{href:`data:image/svg+xml,${encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 55 55'><rect fill='${n?"none":s}' width='51' height='51' x='2' y='2' stroke='${i}' stroke-dasharray='0.09 6.38' stroke-linecap='round' stroke-opacity='${n?.6:0}' stroke-width='2.3' rx='25.5'/><g transform="translate(7.5 7.5)">${a}</g></svg>`)}`,rel:"icon"}))}}k(()=>V(document.documentElement,qi,Di));const Hn=b.popover.split(" ")[0];let Vt=0;function Pi({target:t,newState:e}){var n;if(t instanceof HTMLElement&&t.classList.contains(Hn)){const o=(n=t.getRootNode())==null?void 0:n.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?(Vt-=1,q(t,!1)):o&&(Vt+=1,q(t,o,d(t,"data-position")||"bottom"))}}function Hi({target:t}){var n;const e=Vt&&((n=t==null?void 0:t.closest)==null?void 0:n.call(t,"a,[popovertargetaction]"));if(e){const o=d(e,"popovertargetaction")||"toggle",i=o==="show"||(o==="hide"?!1:void 0),a=(document.getElementById(d(e,"popovertarget")||"")||e).closest(`.${Hn}`);a!=null&&a.isConnected&&(a!=null&&a.togglePopover)&&a.togglePopover(i)}}k(()=>{m(document,"toggle",Pi,E),m(document,"click",Hi)});const Ni=b.table.split(" ")[0];function Ri(t){for(const e of t){const n=[];d(e,"role","table"),e.caption&&d(e.caption,"role","caption");for(const o of[e.tHead,e.tFoot,...e.tBodies])if(o){d(o,"role","rowgroup");const i=o.nodeName==="TBODY";for(const s of o.rows){d(s,"role","row");for(const a of s.cells)i?d(a,"data-th",n[a.cellIndex]||":empty"):n.push(a.innerText.trim()),a.nodeName==="TD"?d(a,"role","cell"):(d(a,"role",i?"rowheader":"columnheader"),d(a,"scope",i?"row":"col"))}}}}k(()=>V(document.documentElement,Ni,Ri));const Bi=`.${b.togglegroup.split(" ")[0]}`;function Ui(t){var i;const{key:e,target:n}=t,o=n instanceof HTMLInputElement&&n.closest(Bi);if(o&&(e==="Enter"&&n.click(),e!=null&&e.startsWith("Arrow"))){t.preventDefault();const s=o.getElementsByTagName("input"),a=[...s].indexOf(n),r=e.match(/Arrow(Right|Down)/)?1:-1;(i=s[(s.length+a+r)%s.length])==null||i.focus()}}k(()=>m(document,"keydown",Ui));const Nn="aria-describedby",Rn="Escape",vt="aria-labelledby",Fi="--mtds-tooltip-position",Vi=300,_=j?Object.assign(document.createElement("div"),{className:b._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let O=null,Bn=Number.NEGATIVE_INFINITY,Un=0;function Wt({target:t,type:e,key:n}){if(e==="keydown"&&n!==Rn)return;const o=Bn+Vi-Date.now();clearTimeout(Un),Un=setTimeout(Wi,Math.max(o,0),n===Rn?null:t)}function Wi(t){var r,l,u;if(Bn=Date.now(),!_||t===_)return;_!=null&&_.isConnected||document.body.append(_);let e=((r=t==null?void 0:t.closest)==null?void 0:r.call(t,"[data-tooltip]"))||null;if(e===O)return;const n=e&&d(e,"data-tooltip")||"",o=e&&d(e,"data-tooltip-position")||((l=window.getComputedStyle(e||document.body).getPropertyValue(Fi))==null?void 0:l.trim())||"top";(!n||n==="false"||n==="true"||o==="none")&&(e=null),e&&(_.textContent=n);const s=O&&d(O,vt)===(_==null?void 0:_.id),a=((u=e instanceof HTMLElement?e.innerText:e==null?void 0:e.textContent)==null?void 0:u.trim())||(e==null?void 0:e.hasAttribute(vt))||(e==null?void 0:e.hasAttribute("aria-label"));O==null||O.removeAttribute(s?vt:Nn),q(_,!1),O=e,O&&d(O,a?Nn:vt,_==null?void 0:_.id),_.togglePopover(!!e),q(_,e||!1,o)}k(()=>{m(document,"blur,focus,mouseout,mouseover",Wt,E),m(window,"keydown",Wt,E),m(window,"blur",Wt,E)});var Fn=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Vn;Fn&&/^Mac/i.test(((Vn=navigator.userAgentData)==null?void 0:Vn.platform)||navigator.platform);var Yi=":host(:not([hidden])) { display: block }",Wn=typeof HTMLElement>"u"?class{}:HTMLElement;function N(t,e,n){var o;return n===void 0?(o=t.getAttribute(e))!=null?o:null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var Yn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},jn=(t,...e)=>Yn("add",t,e),Kn=(t,...e)=>Yn("remove",t,e),ji=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},Ki=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},Yt=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))N(o,i,s);return o},Gn={define:(t,e)=>!Fn||window.customElements.get(t)||window.customElements.define(t,e)},Gi=class extends Wn{constructor(){super(),this._content=null,this.attachShadow({mode:"open"}).append(Yt("slot",null,{name:"summary"}),Yt("slot",null,{part:"details-content"}),Yt("style",`${Yi}
13
+ ::slotted(u-option[hidden]) { display: none !important }`)}static get observedAttributes(){return["id",...Object.keys(ht).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=En(this),f(this,"role","listbox"),f(this,"tabindex","-1"),ft(this._root,"focusin",this),ft(this._root,"focus",this,!0),wn(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){pt(this._root||this,"focus",this,!0),pt(this._root||this,"focusin",this),wn(this,!1),Ft(this),this._root=void 0}attributeChangedCallback(t,e,n){const o=t==null?void 0:t.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(ht[o])this._texts[o]=n||ht[o];else if(this._root)for(const s of this._root.querySelectorAll(i))An(this,s)}handleEvent(t){const{target:e,type:n}=t;t.defaultPrevented||(n==="click"&&Ei(this,t),(n==="focus"||n==="focusin")&&yi(this,t),(n==="blur"||n==="focusout")&&wi(this,t),n==="keydown"&&$i(this,t),n==="mousedown"&&(qt=this.contains(e)),n==="mouseup"&&(qt=!1),(n==="mutation"||n==="input")&&(clearTimeout(xn),xn=setTimeout(Mn,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},X=(t,e)=>{var n;t.hidden===e&&(t.hidden=!e,t._input&&An(t,t._input,e),t.popover&&((n=t._input)!=null&&n.isConnected)&&(f(t._input,"popovertarget",Rt(t)),f(t,"popover","manual"),t.togglePopover(e)),e&&Mn(t))},Ft=t=>{t._input&&(pt(t._input||t,Cn,t),pt(t._root||t,kn,t),X(t,!1),t._input=void 0)},An=(t,e,n=!1)=>{ft(e,Cn,t,!0),f(e,"aria-autocomplete","list"),f(e,"aria-controls",Rt(t)),f(e,"aria-expanded",`${gi?n:"true"}`),f(e,"autocomplete","off"),f(e,"role","combobox")},yi=(t,e)=>{var n;const o=e.target instanceof HTMLInputElement;o&&e.isTrusted&&e.stopImmediatePropagation(),t._input!==e.target&&o&&e.target.list===t&&(t._input&&Ft(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus")),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),f(t,ui,Rt((n=t._input.labels)==null?void 0:n[0])),ft(t._root||t,kn,t),X(t,!0),Sn())},wi=(t,e)=>{!ut&&!qt&&t._input&&setTimeout(Ln,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},Ln=t=>{var e;const n=((e=t._root)==null?void 0:e.activeElement)||null,o=t._input;o&&o!==n&&!t.contains(n)&&(o.dispatchEvent(new FocusEvent("blur",{relatedTarget:n})),o.dispatchEvent(new FocusEvent("focusout",{bubbles:!0,relatedTarget:n})),Ft(t))},Ei=(t,{target:e})=>{var n;if(!t._input||t._input===e)return X(t,!0);for(const o of t.options)if(o.contains(e))return f(t,"aria-multiselectable")!=="true"&&((n=t._input)==null||n.focus(),X(t,!1)),vi(t._input,o.value);ut&&Ln(t)},$i=(t,e)=>{var n;if(e.altKey||e.ctrlKey||e.metaKey||e.shiftKey||e.key==="Tab")return;X(t,e.key!=="Escape");const{key:o,target:i}=e,s=[...t.options].filter(l=>f(l,"aria-hidden")!=="true"&&l.offsetHeight),a=s.indexOf(i);let r=-1;if(o==="ArrowDown"&&(r=(a+1)%s.length),o==="ArrowUp"&&(r=(~a?a:s.length)-1),~a&&((o==="Home"||o==="PageUp")&&(r=0),(o==="End"||o==="PageDown")&&(r=s.length-1),o==="Enter"))return s[a].click(),e.preventDefault();if(s[r])for(const l of s)l.tabIndex=-1;s[r]&&e.preventDefault(),(n=s[r]||t._input)==null||n.focus()},Mn=(t,e)=>{const{_texts:n,_root:o,_input:i,options:s}=t,a=(i==null?void 0:i.value.toLowerCase().trim())||"",r=!t.hasAttribute("data-nofilter"),l=[],u=[];for(const c of s)(c.disabled||c.hidden||r&&!c.label.toLowerCase().includes(a)?l:u).push(c);for(const c of l)f(c,"aria-hidden","true");for(const c of u)f(c,"aria-hidden","false");const h=u.length;clearTimeout(Tn),(e==null?void 0:e.type)==="input"&&a!==t._value&&(Tn=setTimeout(()=>{const c=`${!h&&t.innerText.trim()||`${n[h===1?"singular":"plural"]}`.replace("%d",`${h}`)}`;!t.hidden&&(o==null?void 0:o.activeElement)===i&&Sn(c),t._value=a},1e3)),Nt&&u.forEach((c,x)=>f(c,"title",`${x+1}/${h}`))};K&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return En(this).getElementById(f(this,"list")||"")}}),$n.define("u-datalist",In);const On=_.field.split(" ")[0],Dn=_.validation.split(" "),Si=Dn[0],I=(t,e)=>{var n;return((n=t.getPropertyValue(`--mtds-text-${e}`))==null?void 0:n.slice(1,-1))||""};function Ti(t){for(const e of t)if(e.isConnected){const n=[],o=[];let i=null,s=null,a=!0;for(const r of e.getElementsByTagName("*"))r instanceof HTMLLabelElement?n.push(r):r instanceof rt?i=r:Lt(r)?s=r:r.hasAttribute("data-description")?o.push(r):r.classList.contains(Si)?(a=d(r,"data-color")==="success"||!r.clientWidth||!r.clientHeight,o.unshift(r)):r instanceof HTMLParagraphElement&&(o.some(l=>l.contains(r))||o.push(r));if(s){for(const r of n)r.htmlFor=It(s);xi(i),Hn(s),Pn(s),d(s,"aria-describedby",o.map(It).join(" ")||null),d(s,"aria-invalid",`${!a}`)}}}function Pn(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function xi(t){var n;if(!(t!=null&&t.list)||(n=t.list)!=null&&n.hasAttribute("popover"))return;const e=window.getComputedStyle(t);d(t,"data-sr-added",I(e,"combobox-added")),d(t,"data-sr-empty",I(e,"combobox-empty")),d(t,"data-sr-found",I(e,"combobox-found")),d(t,"data-sr-invalid",I(e,"combobox-invalid")),d(t,"data-sr-of",I(e,"combobox-of")),d(t,"data-sr-remove",I(e,"combobox-remove")),d(t,"data-sr-removed",I(e,"combobox-removed")),d(t.list,"data-sr-plural",I(e,"datalist-plural")),d(t.list,"data-sr-singular",I(e,"datalist-singular")),d(t.list,"popover","manual")}function Hn(t){const e=t==null?void 0:t.nextElementSibling,n=e&&d(e,"data-count");if(e&&n){const o=Number(n)-t.value.length,i=o<0,s=d(e,"aria-live")==="polite",a=window.getComputedStyle(e||t),r=I(a,"count-over"),l=I(a,"count-under");if(s!==i){d(e,"aria-live",i?"polite":"off");for(const u of Dn)e.classList.toggle(u,i)}e.textContent=(i?r:l).replace("%d",`${Math.abs(o)}`)}}function ki({target:t,newState:e}){if(t instanceof In){const n=t.getRootNode(),o=n==null?void 0:n.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?D(t,!1):o&&(t.style.width=`${o.clientWidth}px`,D(t,o,"bottom",!0))}}function Ci({target:t}){Lt(t)&&(Hn(t),Pn(t))}function Ii(t){var e,n;(n=(e=t.target)==null?void 0:e.closest)!=null&&n.call(e,`.${On}`)&&t.preventDefault()}function Ai({target:t}){const e=t instanceof rt&&t.list;e&&!(e!=null&&e.hidden)&&setTimeout(()=>D(e,t,2,!0),10)}C(()=>{V(document.documentElement,On,Ti),m(document,"beforechange",Ai,E),m(document,"input",Ci,E),m(document,"invalid",Ii,!0),m(document,"toggle",ki,E)});const Li=_.fieldset.split(" ")[0],Mi=_.validation.split(" ")[0],Nn="aria-describedby",Oi="aria-invalid";function Di(t){requestAnimationFrame(()=>{var e;for(const n of t)if(n.isConnected){const o=[];let i=null;for(const s of n.getElementsByTagName("*"))s.classList.contains(Mi)?i=It(s):Lt(s)&&o.push(s);for(const s of o){const a=(e=d(s,Nn))==null?void 0:e.replace(i||"#","");d(s,Nn,`${i||""} ${a||""}`.trim()),d(s,Oi,`${!!i}`)}}})}C(()=>V(document.documentElement,Li,Di));const Pi=_.logo.split(" ")[0];function Hi([t]){if(t!=null&&t.isConnected&&(t==null?void 0:t.firstElementChild)instanceof SVGSVGElement){for(const r of document.head.querySelectorAll("link[rel~='icon']"))r.setAttribute("rel","disabled");const e=t.firstElementChild,n=t==null?void 0:t.hasAttribute("data-env"),o=window.getComputedStyle(e),i=o.getPropertyValue("color"),s=o.getPropertyValue("--mtds-logo-color"),a=e.outerHTML.replace(/\n+/g," ").replace(/(fill|width|height|xmlns)="[^"]+"/gi,"").replace("<svg",`<svg width="40" height="40" fill="${i}"`);document.head.appendChild(Object.assign(document.createElement("link"),{href:`data:image/svg+xml,${encodeURIComponent(`<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 55 55'><rect fill='${n?"none":s}' width='51' height='51' x='2' y='2' stroke='${i}' stroke-dasharray='0.09 6.38' stroke-linecap='round' stroke-opacity='${n?.6:0}' stroke-width='2.3' rx='25.5'/><g transform="translate(7.5 7.5)">${a}</g></svg>`)}`,rel:"icon"}))}}C(()=>V(document.documentElement,Pi,Hi));const Rn=_.popover.split(" ")[0];let Vt=0;function Ni({target:t,newState:e}){var n;if(t instanceof HTMLElement&&t.classList.contains(Rn)){const o=(n=t.getRootNode())==null?void 0:n.querySelector(`[popovertarget="${t.id}"]`);e==="closed"?(Vt-=1,D(t,!1)):o&&(Vt+=1,D(t,o,d(t,"data-position")||"bottom"))}}function Ri({target:t}){var n;const e=Vt&&((n=t==null?void 0:t.closest)==null?void 0:n.call(t,"a,[popovertargetaction]"));if(e){const o=d(e,"popovertargetaction")||"toggle",i=o==="show"||(o==="hide"?!1:void 0),a=(document.getElementById(d(e,"popovertarget")||"")||e).closest(`.${Rn}`);a!=null&&a.isConnected&&(a!=null&&a.togglePopover)&&a.togglePopover(i)}}C(()=>{m(document,"toggle",Ni,E),m(document,"click",Ri)});const Bi=_.table.split(" ")[0];function Ui(t){for(const e of t){const n=[];d(e,"role","table"),e.caption&&d(e.caption,"role","caption");for(const o of[e.tHead,e.tFoot,...e.tBodies])if(o){d(o,"role","rowgroup");const i=o.nodeName==="TBODY";for(const s of o.rows){d(s,"role","row");for(const a of s.cells)i?d(a,"data-th",n[a.cellIndex]||":empty"):n.push(a.innerText.trim()),a.nodeName==="TD"?d(a,"role","cell"):(d(a,"role",i?"rowheader":"columnheader"),d(a,"scope",i?"row":"col"))}}}}C(()=>V(document.documentElement,Bi,Ui));const qi=`.${_.togglegroup.split(" ")[0]}`;function Fi(t){var i;const{key:e,target:n}=t,o=n instanceof HTMLInputElement&&n.closest(qi);if(o&&(e==="Enter"&&n.click(),e!=null&&e.startsWith("Arrow"))){t.preventDefault();const s=o.getElementsByTagName("input"),a=[...s].indexOf(n),r=e.match(/Arrow(Right|Down)/)?1:-1;(i=s[(s.length+a+r)%s.length])==null||i.focus()}}C(()=>m(document,"keydown",Fi));const Bn="aria-describedby",Un="Escape",bt="aria-labelledby",Vi="--mtds-tooltip-position",Wi=300,v=j?Object.assign(document.createElement("div"),{className:_._tooltip,id:"mtds-tooltip",popover:"manual"}):null;let O=null,qn=Number.NEGATIVE_INFINITY,Fn=0;function Wt({target:t,type:e,key:n}){if(e==="keydown"&&n!==Un)return;const o=qn+Wi-Date.now();clearTimeout(Fn),Fn=setTimeout(Yi,Math.max(o,0),n===Un?null:t)}function Yi(t){var r,l,u;if(qn=Date.now(),!v||t===v)return;v!=null&&v.isConnected||document.body.append(v);let e=((r=t==null?void 0:t.closest)==null?void 0:r.call(t,"[data-tooltip]"))||null;if(e===O)return;const n=e&&d(e,"data-tooltip")||"",o=e&&d(e,"data-tooltip-position")||((l=window.getComputedStyle(e||document.body).getPropertyValue(Vi))==null?void 0:l.trim())||"top";(!n||n==="false"||n==="true"||o==="none")&&(e=null),e&&(v.textContent=n);const s=O&&d(O,bt)===(v==null?void 0:v.id),a=((u=e instanceof HTMLElement?e.innerText:e==null?void 0:e.textContent)==null?void 0:u.trim())||(e==null?void 0:e.hasAttribute(bt))||(e==null?void 0:e.hasAttribute("aria-label"));O==null||O.removeAttribute(s?bt:Bn),D(v,!1),O=e,O&&d(O,a?Bn:bt,v==null?void 0:v.id),v.togglePopover(!!e),D(v,e||!1,o)}C(()=>{m(document,"blur,focus,mouseout,mouseover",Wt,E),m(window,"keydown",Wt,E),m(window,"blur",Wt,E)});var Vn=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Wn;Vn&&/^Mac/i.test(((Wn=navigator.userAgentData)==null?void 0:Wn.platform)||navigator.platform);var ji=":host(:not([hidden])) { display: block }",Yn=typeof HTMLElement>"u"?class{}:HTMLElement;function R(t,e,n){var o;return n===void 0?(o=t.getAttribute(e))!=null?o:null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var jn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Kn=(t,...e)=>jn("add",t,e),Gn=(t,...e)=>jn("remove",t,e),Ki=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},Gi=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},Yt=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))R(o,i,s);return o},Xn={define:(t,e)=>!Vn||window.customElements.get(t)||window.customElements.define(t,e)},Xi=class extends Yn{constructor(){super(),this._content=null,this.attachShadow({mode:"open"}).append(Yt("slot",null,{name:"summary"}),Yt("slot",null,{part:"details-content"}),Yt("style",`${ji}
14
14
  ::slotted(u-summary) { cursor: pointer; display: block }
15
15
  ::slotted(u-summary)::before { content: ''; display: inline-block; vertical-align: middle; margin-inline: .05em .3125em; border-block: .3125em solid transparent; border-inline-start: .5em solid }
16
16
  ::slotted(u-summary[aria-expanded="true"])::before { rotate: 90deg }
17
- :host > [part="details-content"]:not([hidden=""]) { display: block }`))}static get observedAttributes(){return["open"]}connectedCallback(){var t;this._content=(t=this.shadowRoot)==null?void 0:t.children[1],jn(this._content,"beforematch",this),jn(this,"click,keydown",this),this.attributeChangedCallback()}disconnectedCallback(){this._content&&Kn(this._content,"beforematch",this),Kn(this,"click,keydown",this),this._content=null}attributeChangedCallback(t,e,n){const o="onbeforematch"in this?"until-found":!0,i=this.open;for(const s of this.children)s.nodeName==="U-SUMMARY"&&N(s,"aria-expanded",`${i}`);if(this._content&&(N(this._content,"aria-hidden",`${!i}`),this._content.hidden=i?!1:o),i&&this.name){const s=Ki(this).querySelectorAll(`${this.nodeName}[name="${this.name}"]`);for(const a of s)a!==this&&(a.open=!1)}t==="open"&&e===null!=(n===null)&&this.dispatchEvent(new Event("toggle"))}handleEvent(t){const e=this.querySelector(":scope > u-summary"),n=e==null?void 0:e.contains(t.target);t.defaultPrevented||(t.type==="beforematch"&&(this.open=!0),n&&t.type==="keydown"&&ji(t),n&&t.type==="click"&&(this.open=!this.open))}get open(){return this.hasAttribute("open")}set open(t){N(this,"open",t?"":null)}get name(){return N(this,"name")||""}set name(t){N(this,"name",t)}},Xi=class extends Wn{connectedCallback(){N(this,"role","button"),this.slot="summary",this.tabIndex=0}};Gn.define("u-details",Gi),Gn.define("u-summary",Xi);var _t=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Xn=_t&&/firefox/i.test(navigator.userAgent),zi=_t&&/iPad|iPhone|iPod/.test(navigator.userAgent),zn;_t&&/^Mac/i.test(((zn=navigator.userAgentData)==null?void 0:zn.platform)||navigator.platform);var Qi=typeof HTMLElement>"u"?class{}:HTMLElement;function y(t,e,n){var o;return n===void 0?(o=t.getAttribute(e))!=null?o:null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var Qn=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},Ji=0,Zi=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Ji).toString(32)}`),t.id):"",Jn=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))y(o,i,s);return o},ts={define:(t,e)=>!_t||window.customElements.get(t)||window.customElements.define(t,e)},es=t=>{var e;const n=Qn(t),o=y(t,"aria-label")||"";return[...(((e=y(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(s=>n==null?void 0:n.querySelector(`[id="${s}"]`)),...Array.from(t.labels||[])].reduce((s,a)=>{var r;return s||((r=a==null?void 0:a.innerText)==null?void 0:r.trim())||""},o)},jt=!1,Zn=class extends Qi{static get observedAttributes(){return["aria-label","aria-labelledby","value","max"]}constructor(){super(),this.attachShadow({mode:"open"}).append(Jn("slot",null,{hidden:""}),Jn("style",`:host(:not([hidden])) { box-sizing: border-box; border: 1px solid; display: inline-block; height: .5em; width: 10em; overflow: hidden }
17
+ :host > [part="details-content"]:not([hidden=""]) { display: block }`))}static get observedAttributes(){return["open"]}connectedCallback(){var t;this._content=(t=this.shadowRoot)==null?void 0:t.children[1],Kn(this._content,"beforematch",this),Kn(this,"click,keydown",this),this.attributeChangedCallback()}disconnectedCallback(){this._content&&Gn(this._content,"beforematch",this),Gn(this,"click,keydown",this),this._content=null}attributeChangedCallback(t,e,n){const o="onbeforematch"in this?"until-found":!0,i=this.open;for(const s of this.children)s.nodeName==="U-SUMMARY"&&R(s,"aria-expanded",`${i}`);if(this._content&&(R(this._content,"aria-hidden",`${!i}`),this._content.hidden=i?!1:o),i&&this.name){const s=Gi(this).querySelectorAll(`${this.nodeName}[name="${this.name}"]`);for(const a of s)a!==this&&(a.open=!1)}t==="open"&&e===null!=(n===null)&&this.dispatchEvent(new Event("toggle"))}handleEvent(t){const e=this.querySelector(":scope > u-summary"),n=e==null?void 0:e.contains(t.target);t.defaultPrevented||(t.type==="beforematch"&&(this.open=!0),n&&t.type==="keydown"&&Ki(t),n&&t.type==="click"&&(this.open=!this.open))}get open(){return this.hasAttribute("open")}set open(t){R(this,"open",t?"":null)}get name(){return R(this,"name")||""}set name(t){R(this,"name",t)}},zi=class extends Yn{connectedCallback(){R(this,"role","button"),this.slot="summary",this.tabIndex=0}};Xn.define("u-details",Xi),Xn.define("u-summary",zi);var vt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",zn=vt&&/firefox/i.test(navigator.userAgent),Qi=vt&&/iPad|iPhone|iPod/.test(navigator.userAgent),Qn;vt&&/^Mac/i.test(((Qn=navigator.userAgentData)==null?void 0:Qn.platform)||navigator.platform);var Ji=typeof HTMLElement>"u"?class{}:HTMLElement;function y(t,e,n){var o;return n===void 0?(o=t.getAttribute(e))!=null?o:null:(n===null?t.removeAttribute(e):t.getAttribute(e)!==n&&t.setAttribute(e,n),null)}var Jn=t=>{var e;const n=((e=t.getRootNode)==null?void 0:e.call(t))||t.ownerDocument;return n instanceof Document||n instanceof ShadowRoot?n:document},Zi=0,ts=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Zi).toString(32)}`),t.id):"",Zn=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))y(o,i,s);return o},es={define:(t,e)=>!vt||window.customElements.get(t)||window.customElements.define(t,e)},ns=t=>{var e;const n=Jn(t),o=y(t,"aria-label")||"";return[...(((e=y(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(s=>n==null?void 0:n.querySelector(`[id="${s}"]`)),...Array.from(t.labels||[])].reduce((s,a)=>{var r;return s||((r=a==null?void 0:a.innerText)==null?void 0:r.trim())||""},o)},jt=!1,to=class extends Ji{static get observedAttributes(){return["aria-label","aria-labelledby","value","max"]}constructor(){super(),this.attachShadow({mode:"open"}).append(Zn("slot",null,{hidden:""}),Zn("style",`:host(:not([hidden])) { box-sizing: border-box; border: 1px solid; display: inline-block; height: .5em; width: 10em; overflow: hidden }
18
18
  :host::before { content: ''; display: block; height: 100%; background: currentColor; width: var(--percentage, 0%); transition: width .2s }
19
19
  :host(:not([value])) { background: linear-gradient(90deg,currentColor 25%, transparent 50%, currentColor 75%) 50%/400% }
20
20
  @media (prefers-reduced-motion: no-preference) { :host { animation: indeterminate 2s linear infinite } }
21
- @keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(jt)return;jt=!0;const t=zi||Xn,e=Math.max(0,Math.round(this.position*100));this.style.setProperty("--percentage",`${e}%`);let n=es(this);if(t&&(n=`${n.replace(/\d+%$/,"")} ${e}%`),Xn)for(const o of this.labels)y(o,"aria-label",n);y(this,"aria-busy",`${this.position===-1}`),y(this,"aria-label",n.trim()),y(this,"aria-labelledby",null),y(this,"aria-valuemax","100"),y(this,"aria-valuemin","0"),y(this,"aria-valuenow",`${e}`),y(this,"role",t?"img":"progressbar"),jt=!1}get labels(){const t=this.closest("label:not([for])"),e=Zi(this);return t&&(t.htmlFor=e),Qn(this).querySelectorAll(`label[for="${e}"]`)}get position(){return this.value===null?-1:Math.min(this.value/this.max,1)}get value(){return eo(this,"value")}set value(t){no(this,"value",t)}get max(){return eo(this,"max")||1}set max(t){no(this,"max",t)}};Zn.formAssociated=!0;var to=t=>!Number.isNaN(Number.parseFloat(`${t}`))&&Number.isFinite(Number(t)),eo=(t,e)=>{const n=y(t,e);return to(n)?Math.max(0,Number.parseFloat(n)):null},no=(t,e,n)=>{if(n===null||to(n))y(t,e,`${n}`);else throw new Error(`Failed to set non-numeric '${y}': '${n}'`)};return ts.define("u-progress",Zn),$.UHTMLComboboxElement=rt,$.UHTMLTabElement=ne,$.UHTMLTabListElement=ee,$.UHTMLTabPanelElement=oe,$.UHTMLTabsElement=te,$.analytics=Wo,$.pagination=jo,$.styles=Ko,$.toggleAppExpanded=fn,$.version=No,Object.defineProperty($,Symbol.toStringTag,{value:"Module"}),$}({});
22
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWNvbWJvYm94L2Rpc3QvdS1jb21ib2JveC5qcyIsIi4uL2Rlc2lnbnN5c3RlbS91dGlscy50cyIsIi4uL2Rlc2lnbnN5c3RlbS9hbmFseXRpY3MvYW5hbHl0aWNzLnRzIiwiLi4vZGVzaWduc3lzdGVtL3BhZ2luYXRpb24vcGFnaW5hdGlvbi1oZWxwZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC10b2dnbGUuanMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9icmVhZGNydW1icy9icmVhZGNydW1icy1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9kaWFsb2cvZGlhbG9nLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2Vycm9yc3VtbWFyeS9lcnJvcnN1bW1hcnktb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kYXRhbGlzdC9kaXN0L3UtZGF0YWxpc3QuanMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGQvZmllbGQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGRzZXQvZmllbGRzZXQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vbG9nby9sb2dvLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3BvcG92ZXIvcG9wb3Zlci1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90YWJsZS90YWJsZS1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b2dnbGVncm91cC90b2dnbGVncm91cC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b29sdGlwL3Rvb2x0aXAtb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kZXRhaWxzL2Rpc3QvdS1kZXRhaWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtcHJvZ3Jlc3MvZGlzdC91LXByb2dyZXNzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgLy8gVW5uYW1lZCBzbG90IGRvZXMgYXV0b21hdGljYWxseSByZW5kZXIgYWxsIHRvcCBlbGVtZW50IG5vZGVzXG4gIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBjc3MpXG4pO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xuXG4vLyB1LXRhYnMudHNcbnZhciBBUklBX0NPTlRST0xTID0gXCJhcmlhLWNvbnRyb2xzXCI7XG52YXIgQVJJQV9TRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xudmFyIFVIVE1MVGFic0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgRElTUExBWV9CTE9DSyk7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFibGlzdFwiLCB0aGlzKVswXSB8fCBudWxsO1xuICB9XG4gIGdldCBzZWxlY3RlZEluZGV4KCkge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicyk7XG4gIH1cbiAgc2V0IHNlbGVjdGVkSW5kZXgoaW5kZXgpIHtcbiAgICBzZXRTZWxlY3RlZCh0aGlzLnRhYnNbaW5kZXhdKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJcIiwgdGhpcyk7XG4gIH1cbiAgZ2V0IHBhbmVscygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJwYW5lbFwiLCB0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYkxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFibGlzdFwiKTtcbiAgICBvbih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCkgdGhpcy5oYW5kbGVFdmVudCgpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG9mZih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LnR5cGUgPT09IFwibXV0YXRpb25cIikge1xuICAgICAgY29uc3QgdGFiID0gdGhpcy50YWJzW01hdGgubWF4KHRoaXMuc2VsZWN0ZWRJbmRleCwgMCldO1xuICAgICAgcmV0dXJuIHRhYiA9PSBudWxsID8gdm9pZCAwIDogdGFiLnNldEF0dHJpYnV0ZShBUklBX1NFTEVDVEVELCBcInRydWVcIik7XG4gICAgfVxuICAgIGNvbnN0IHsga2V5IH0gPSBldmVudDtcbiAgICBjb25zdCB0YWJzID0gWy4uLnRoaXMudGFic107XG4gICAgY29uc3QgcHJldiA9IHRhYnMuZmluZEluZGV4KCh0YWIpID0+IHRhYi5jb250YWlucyhldmVudC50YXJnZXQpKTtcbiAgICBsZXQgbmV4dCA9IHByZXY7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgcHJldiA9PT0gLTEpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSBzZXRTZWxlY3RlZCh0YWJzW3ByZXZdKTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIgJiYgIWFzQnV0dG9uKGV2ZW50KSkge1xuICAgICAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIiB8fCBrZXkgPT09IFwiQXJyb3dSaWdodFwiKVxuICAgICAgICBuZXh0ID0gKHByZXYgKyAxKSAlIHRhYnMubGVuZ3RoO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93VXBcIiB8fCBrZXkgPT09IFwiQXJyb3dMZWZ0XCIpXG4gICAgICAgIG5leHQgPSAocHJldiB8fCB0YWJzLmxlbmd0aCkgLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkVuZFwiKSBuZXh0ID0gdGFicy5sZW5ndGggLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkhvbWVcIikgbmV4dCA9IDA7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiVGFiXCIpIG5leHQgPSBnZXRTZWxlY3RlZEluZGV4KHRhYnMpO1xuICAgICAgZWxzZSByZXR1cm47XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGFic1twcmV2XS50YWJJbmRleCA9IC0xO1xuICAgICAgICB0YWJzW25leHRdLnRhYkluZGV4ID0gMDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGtleSAhPT0gXCJUYWJcIikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0YWJzW25leHRdLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJzKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWRJbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpO1xuICB9XG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgc2V0U2VsZWN0ZWQodGhpcy50YWJzW2luZGV4XSk7XG4gIH1cbn07XG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MVGFiRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImlkXCIsIEFSSUFfU0VMRUNURUQsIEFSSUFfQ09OVFJPTFNdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jayB9XCJcbiAgICApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFiXCIpO1xuICAgIHRoaXMudGFiSW5kZXggPSB0aGlzLnNlbGVjdGVkID8gMCA6IC0xO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoIVNLSVBfQVRUUl9DSEFOR0UgJiYgdGhpcy5zZWxlY3RlZCAmJiB0aGlzLnRhYkxpc3QpIHtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSB0cnVlO1xuICAgICAgY29uc3QgdGFicyA9IFsuLi50aGlzLnRhYkxpc3QucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpXTtcbiAgICAgIGNvbnN0IHBhbmVscyA9IHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFicGFuZWxcIiwgdGhpcy50YWJzRWxlbWVudCB8fCB0aGlzKTtcbiAgICAgIGNvbnN0IG5leHRQYW5lbCA9IGdldFBhbmVsKHRoaXMsIHBhbmVsc1t0YWJzLmluZGV4T2YodGhpcyldKTtcbiAgICAgIGlmIChuZXh0UGFuZWwpIGF0dHIobmV4dFBhbmVsLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKHRoaXMpKTtcbiAgICAgIHRhYnMuZm9yRWFjaCgodGFiLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBwYW5lbCA9IGdldFBhbmVsKHRhYiwgcGFuZWxzW2luZGV4XSk7XG4gICAgICAgIHRhYi50YWJJbmRleCA9IHRhYiA9PT0gdGhpcyA/IDAgOiAtMTtcbiAgICAgICAgYXR0cih0YWIsIEFSSUFfU0VMRUNURUQsIGAke3RhYiA9PT0gdGhpc31gKTtcbiAgICAgICAgaWYgKHBhbmVsKSBwYW5lbC5oaWRkZW4gPSBwYW5lbCAhPT0gbmV4dFBhbmVsO1xuICAgICAgICBpZiAocGFuZWwpIGF0dHIodGFiLCBBUklBX0NPTlRST0xTLCBwYW5lbC5pZCk7XG4gICAgICB9KTtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgY29uc3QgdGFibGlzdCA9IHRoaXMucGFyZW50RWxlbWVudDtcbiAgICByZXR1cm4gKHRhYmxpc3QgPT0gbnVsbCA/IHZvaWQgMCA6IHRhYmxpc3Qubm9kZU5hbWUpID09PSBcIlUtVEFCTElTVFwiID8gdGFibGlzdCA6IG51bGw7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQpID09PSBcInRydWVcIjtcbiAgfVxuICBzZXQgc2VsZWN0ZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQsIGAkeyEhdmFsdWV9YCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiB0YWIgaW4gYSB0YWJsaXN0LiAqL1xuICBnZXQgaW5kZXgoKSB7XG4gICAgY29uc3QgdGFiTGlzdCA9IHRoaXMudGFiTGlzdDtcbiAgICByZXR1cm4gdGFiTGlzdCA/IFsuLi50YWJMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKV0uaW5kZXhPZih0aGlzKSA6IDA7XG4gIH1cbiAgZ2V0IHBhbmVsKCkge1xuICAgIHJldHVybiBnZXRQYW5lbCh0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYlBhbmVsRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImhpZGRlblwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFicGFuZWxcIik7XG4gICAgdGhpcy5oaWRkZW4gPSBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicykgPT09IC0xO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLmhpZGRlbiB8fCBpc0ZvY3VzYWJsZSh0aGlzLmZpcnN0Q2hpbGQpKVxuICAgICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIG51bGwpO1xuICAgIGVsc2UgdGhpcy50YWJJbmRleCA9IDA7XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgY29uc3QgY3NzID0gYHUtdGFiWyR7QVJJQV9DT05UUk9MU309XCIke3RoaXMuaWR9XCJdYDtcbiAgICByZXR1cm4gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKGNzcyk7XG4gIH1cbn07XG52YXIgcXVlcnlXaXRob3V0TmVzdGVkID0gKHRhZywgc2VsZikgPT4gc2VsZi5xdWVyeVNlbGVjdG9yQWxsKGAke3RhZ306bm90KDpzY29wZSB1LXRhYnBhbmVsICR7dGFnfSlgKTtcbnZhciBnZXRQYW5lbCA9ICh0YWIsIHBhbmVsKSA9PiB7XG4gIGNvbnN0IGlkMiA9IGF0dHIodGFiLCBBUklBX0NPTlRST0xTKSB8fCB1c2VJZChwYW5lbCk7XG4gIGNvbnN0IGVsID0gZ2V0Um9vdCh0YWIpLmdldEVsZW1lbnRCeUlkKGlkMik7XG4gIHJldHVybiAoZWwgPT0gbnVsbCA/IHZvaWQgMCA6IGVsLm5vZGVOYW1lKSA9PT0gXCJVLVRBQlBBTkVMXCIgPyBlbCA6IG51bGw7XG59O1xudmFyIGdldFNlbGVjdGVkSW5kZXggPSAodGFicykgPT4gWy4uLnRhYnNdLmZpbmRJbmRleCgodGFiKSA9PiBhdHRyKHRhYiwgQVJJQV9TRUxFQ1RFRCkgPT09IFwidHJ1ZVwiKTtcbnZhciBzZXRTZWxlY3RlZCA9ICh0YWIpID0+IHRhYiAmJiBhdHRyKHRhYiwgXCJhcmlhLXNlbGVjdGVkXCIsIFwidHJ1ZVwiKTtcbnZhciBpc0ZvY3VzYWJsZSA9IChlbCkgPT4gZWwgaW5zdGFuY2VvZiBFbGVtZW50ICYmICFlbC5tYXRjaGVzKCc6ZGlzYWJsZWQsW3RhYmluZGV4Xj1cIi1cIl0nKSAmJiBlbC5tYXRjaGVzKFxuICBgW2NvbnRlbnRlZGl0YWJsZV0sW2NvbnRyb2xzXSxbaHJlZl0sW3RhYmluZGV4XSxpbnB1dDpub3QoW3R5cGU9XCJoaWRkZW5cIl0pLHNlbGVjdCx0ZXh0YXJlYSxidXR0b24sc3VtbWFyeSxpZnJhbWVgXG4pO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJzXCIsIFVIVE1MVGFic0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJsaXN0XCIsIFVIVE1MVGFiTGlzdEVsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJcIiwgVUhUTUxUYWJFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtdGFicGFuZWxcIiwgVUhUTUxUYWJQYW5lbEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTFRhYkVsZW1lbnQsIFVIVE1MVGFiTGlzdEVsZW1lbnQsIFVIVE1MVGFiUGFuZWxFbGVtZW50LCBVSFRNTFRhYnNFbGVtZW50IH07XG4iLCJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5cbi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfRklSRUZPWCA9IElTX0JST1dTRVIgJiYgL2ZpcmVmb3gvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIEZPQ1VTX09VVExJTkUgPSBcIm91dGxpbmU6IDFweCBkb3R0ZWQ7IG91dGxpbmU6IDVweCBhdXRvIEhpZ2hsaWdodDsgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yXCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2JzZXJ2ZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgbXV0YXRpb25PYnNlcnZlciA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHJldHVybiBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICB0cnkge1xuICAgIG9ic2VydmVycy5nZXQoZWxlbWVudCkuZGlzY29ubmVjdCgpO1xuICAgIG9ic2VydmVycy5kZWxldGUoZWxlbWVudCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQyLCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0MikgZWwudGV4dENvbnRlbnQgPSB0ZXh0MjtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIExJVkU7XG52YXIgTElWRV9TUl9GSVggPSAwO1xudmFyIHNwZWFrID0gKHRleHQyKSA9PiB7XG4gIGlmICghTElWRSkge1xuICAgIExJVkUgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIExJVkUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246Zml4ZWQ7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXBcIjtcbiAgICBhdHRyKExJVkUsIFwiYXJpYS1saXZlXCIsIFwiYXNzZXJ0aXZlXCIpO1xuICB9XG4gIGlmICghTElWRS5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoTElWRSk7XG4gIGlmICh0ZXh0MikgTElWRS50ZXh0Q29udGVudCA9IGAke3RleHQyfSR7TElWRV9TUl9GSVgrKyAlIDIgPyBcIlxceEEwXCIgOiBcIlwifWA7XG59O1xudmFyIHNldFZhbHVlID0gKGlucHV0LCBkYXRhLCB0eXBlID0gXCJcIikgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlLCBkYXRhLCBpbnB1dFR5cGU6IHR5cGUgfTtcbiAgY29uc3QgcHJvdG8gPSBIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImJlZm9yZWlucHV0XCIsIGV2ZW50KSk7XG4gIChfYiA9IChfYTIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBcInZhbHVlXCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwoaW5wdXQsIGRhdGEpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiaW5wdXRcIiwgZXZlbnQpKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJjaGFuZ2VcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbn07XG5cbi8vIHUtY29tYm9ib3gudHNcbnZhciBJU19QUkVTUyA9IGZhbHNlO1xudmFyIEVWRU5UUyA9IFwiYmVmb3JlaW5wdXQsYmx1cixmb2N1cyxjbGljayxpbnB1dCxrZXlkb3duLG1vdXNlZG93bixtb3VzZXVwXCI7XG52YXIgRVZFTlRfT05DRSA9IHsgb25jZTogdHJ1ZSwgcGFzc2l2ZTogdHJ1ZSB9O1xudmFyIElTX0ZJUkVGT1hfTUFDID0gSVNfRklSRUZPWCAmJiAhSVNfQU5EUk9JRDtcbnZhciBJU19NT0JJTEUgPSBJU19BTkRST0lEIHx8IElTX0lPUztcbnZhciBGQUxTRSA9IFwiZmFsc2VcIjtcbnZhciBDTElDSyA9IFwiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0XCI7XG52YXIgVEVYVFMgPSB7XG4gIGFkZGVkOiBcIkFkZGVkXCIsXG4gIGVtcHR5OiBcIk5vIHNlbGVjdGVkXCIsXG4gIGZvdW5kOiBcIk5hdmlnYXRlIGxlZnQgdG8gZmluZCAlZCBzZWxlY3RlZFwiLFxuICBpbnZhbGlkOiBcIkludmFsaWQgdmFsdWVcIixcbiAgb2Y6IFwib2ZcIixcbiAgcmVtb3ZlOiBcIlByZXNzIHRvIHJlbW92ZVwiLFxuICByZW1vdmVkOiBcIlJlbW92ZWRcIlxufTtcbnZhciBVSFRNTENvbWJvYm94RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9zcGVhayA9IFwiXCI7XG4gICAgdGhpcy5fdGV4dHMgPSBfX3NwcmVhZFZhbHVlcyh7fSwgVEVYVFMpO1xuICAgIHRoaXMuX3ZhbHVlID0gXCJcIjtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAgICAgLy8gQ29udGVudCBzbG90XG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGA6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jazsgY3Vyc29yOiBwb2ludGVyOyAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCkgfSAvKiBNdXN0IGJlIGRpc3BsYXkgYmxvY2sgaW4gU2FmYXJpIHRvIGFsbG93IGZvY3VzIGluc2lkZSAqL1xuXHRcdFx0XHQ6aG9zdCg6bm90KFtkYXRhLW11bHRpcGxlXSkpIDo6c2xvdHRlZChkYXRhKSxcblx0XHRcdFx0Omhvc3QoW2RhdGEtbXVsdGlwbGU9XCJmYWxzZVwiXSkgOjpzbG90dGVkKGRhdGEpIHsgZGlzcGxheTogbm9uZSB9IC8qIEhpZGUgZGF0YSBpZiBub3QgbXVsdGlwbGUgKi9cblx0XHRcdFx0OjpzbG90dGVkKGlucHV0W2lucHV0bW9kZT1cIm5vbmVcIl0pIHsgb3V0bGluZTogbm9uZSB9IC8qIEhpZGUgdGVtcG9yYXJ5IGZvdWNzIG91dGxpbmUgZmxhc2ggKi9cblx0XHRcdFx0OjpzbG90dGVkKGRlbCkgeyB0ZXh0LWRlY29yYXRpb246IG5vbmUgfVxuXHRcdFx0XHQ6OnNsb3R0ZWQoZGF0YTpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcG9pbnRlci1ldmVudHM6IG5vbmUgfVxuICAgICAgICA6OnNsb3R0ZWQoZGF0YSk6OmFmdGVyIHsgY29udGVudDogJ1xcXFwwMEQ3JzsgY29udGVudDogJ1xcXFwwMEQ3JyAvICcnOyBwYWRkaW5nLWlubGluZTogLjVjaDsgcG9pbnRlci1ldmVudHM6IGF1dG8gfVxuICAgICAgICA6OnNsb3R0ZWQoZGF0YTpmb2N1cykgeyAke0ZPQ1VTX09VVExJTkV9IH1gXG4gICAgICApXG4gICAgKTtcbiAgfVxuICAvLyBMb2NhbGx5IHN0b3JlIHZhbHVlIHRvIHN0b3JlIHZhbHVlIGJlZm9yZSBpbnB1dC1jbGlja1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoVEVYVFMpLm1hcCgoa2V5KSA9PiBgZGF0YS1zci0ke2tleX1gKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLl9yb290ID0gZ2V0Um9vdCh0aGlzKTtcbiAgICBvbih0aGlzLCBFVkVOVFMsIHRoaXMsIHRydWUpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG4gICAgc2V0VGltZW91dChyZW5kZXIsIDAsIHRoaXMpO1xuICAgIHNldFRpbWVvdXQoc3luY0lucHV0VmFsdWUsIDAsIHRoaXMpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBfLCB2YWwpIHtcbiAgICBjb25zdCB0ZXh0MiA9IHByb3Auc3BsaXQoXCJkYXRhLXNyLVwiKVsxXTtcbiAgICBpZiAoVEVYVFNbdGV4dDJdKSB0aGlzLl90ZXh0c1t0ZXh0Ml0gPSB2YWwgfHwgVEVYVFNbdGV4dDJdO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICAgIG9mZih0aGlzLCBFVkVOVFMsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5fY2xlYXIgPSB0aGlzLl9mb2N1cyA9IHRoaXMuX2NvbnRyb2wgPSB2b2lkIDA7XG4gICAgdGhpcy5fbGlzdCA9IHRoaXMuX29wdGlvbnMgPSB0aGlzLl9yb290ID0gdm9pZCAwO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJlZm9yZWlucHV0XCIpIHRoaXMuX3ZhbHVlID0gKHRhcmdldCA9PSBudWxsID8gdm9pZCAwIDogdGFyZ2V0LnZhbHVlKSB8fCBcIlwiO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJsdXJcIikgb25CbHVyKHRoaXMpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIpIG9uQ2xpY2sodGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImZvY3VzXCIpIG9uRm9jdXModGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImlucHV0XCIpIG9uSW5wdXQodGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgb25LZXlEb3duKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgSVNfUFJFU1MgPSB0aGlzLmNvbnRhaW5zKHRhcmdldCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwibW91c2V1cFwiKSBJU19QUkVTUyA9IGZhbHNlO1xuICAgIGlmIChldmVudC50eXBlID09PSBcIm11dGF0aW9uXCIpIHJlbmRlcih0aGlzLCBldmVudCk7XG4gIH1cbiAgZ2V0IG11bHRpcGxlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gYXR0cih0aGlzLCBcImRhdGEtbXVsdGlwbGVcIikpICE9IG51bGwgPyBfYTIgOiBGQUxTRSkgIT09IEZBTFNFO1xuICB9XG4gIHNldCBtdWx0aXBsZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJkYXRhLW11bHRpcGxlXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBjcmVhdGFibGUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKChfYTIgPSBhdHRyKHRoaXMsIFwiZGF0YS1jcmVhdGFibGVcIikpICE9IG51bGwgPyBfYTIgOiBGQUxTRSkgIT09IEZBTFNFO1xuICB9XG4gIHNldCBjcmVhdGFibGUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwiZGF0YS1jcmVhdGFibGVcIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IGNvbnRyb2woKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpXG4gICAgICB0aGlzLl9jb250cm9sID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIik7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2w7XG4gIH1cbiAgZ2V0IGxpc3QoKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fbGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpXG4gICAgICB0aGlzLl9saXN0ID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwidS1kYXRhbGlzdCxkYXRhbGlzdFwiKTtcbiAgICByZXR1cm4gdGhpcy5fbGlzdDtcbiAgfVxuICBnZXQgY2xlYXIoKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fY2xlYXIpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuaXNDb25uZWN0ZWQpKSB0aGlzLl9jbGVhciA9IHRoaXMucXVlcnlTZWxlY3RvcihcImRlbFwiKTtcbiAgICByZXR1cm4gdGhpcy5fY2xlYXI7XG4gIH1cbiAgZ2V0IGl0ZW1zKCkge1xuICAgIGlmICghdGhpcy5faXRlbXMpIHRoaXMuX2l0ZW1zID0gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImRhdGFcIik7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICB9XG4gIGdldCBvcHRpb25zKCkge1xuICAgIHZhciBfYTIsIF9iO1xuICAgIGlmICghdGhpcy5fb3B0aW9ucykge1xuICAgICAgY29uc3QgdGFnID0gKChfYTIgPSB0aGlzLmxpc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIubm9kZU5hbWUpID09PSBcIlUtREFUQUxJU1RcIiA/IFwidS1vcHRpb25cIiA6IFwib3B0aW9uXCI7XG4gICAgICB0aGlzLl9vcHRpb25zID0gKF9iID0gdGhpcy5saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cbiAgZ2V0IHZhbHVlcygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuaXRlbXNdLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSk7XG4gIH1cbn07XG52YXIgdGV4dCA9IChlbCkgPT4ge1xuICB2YXIgX2EyO1xuICByZXR1cm4gKChfYTIgPSBlbCA9PSBudWxsID8gdm9pZCAwIDogZWwudGV4dENvbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xufTtcbnZhciBpc0RhdGEgPSAoZWwpID0+IGVsIGluc3RhbmNlb2YgSFRNTERhdGFFbGVtZW50O1xudmFyIHJlbmRlciA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgY29uc3QgeyBfZm9jdXMsIF90ZXh0cywgaXRlbXMsIGNvbnRyb2wsIGxpc3QsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBsZXQgbGFiZWwgPSBgJHt0ZXh0KChfYTIgPSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmxhYmVscykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMlswXSl9LCAke211bHRpcGxlID8gaXRlbXMubGVuZ3RoID8gX3RleHRzLmZvdW5kLnJlcGxhY2UoXCIlZFwiLCBgJHtpdGVtcy5sZW5ndGh9YCkgOiBfdGV4dHMuZW1wdHkgOiBcIlwifWA7XG4gIGNvbnN0IGVkaXRzID0gW107XG4gIGZvciAoY29uc3QgeyBhZGRlZE5vZGVzLCByZW1vdmVkTm9kZXMgfSBvZiAoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LmRldGFpbCkgfHwgW10pIHtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIGFkZGVkTm9kZXMpIGlmIChpc0RhdGEoZWwpKSBlZGl0cy51bnNoaWZ0KGVsKTtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIHJlbW92ZWROb2RlcykgaWYgKGlzRGF0YShlbCkpIGVkaXRzLnB1c2goZWwpO1xuICB9XG4gIGNvbnN0IHNob3VsZEFubm91bmNlID0gbXVsdGlwbGUgPyBlZGl0cy5sZW5ndGggPT09IDEgOiBlZGl0c1swXSA9PT0gX2ZvY3VzO1xuICBpZiAoX2ZvY3VzICYmIGNvbnRyb2wgJiYgc2hvdWxkQW5ub3VuY2UpIHtcbiAgICBjb25zdCBpbnB1dE1vZGUgPSBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIpO1xuICAgIGNvbnN0IG5leHRGb2N1cyA9IGlzRGF0YShfZm9jdXMpID8gY29udHJvbCA6IF9mb2N1cztcbiAgICBzZWxmLl9zcGVhayA9IGAke190ZXh0c1tlZGl0c1swXS5pc0Nvbm5lY3RlZCA/IFwiYWRkZWRcIiA6IFwicmVtb3ZlZFwiXX0gJHt0ZXh0KGVkaXRzWzBdKX0sIGA7XG4gICAgaWYgKElTX01PQklMRSB8fCBfZm9jdXMgPT09IGNvbnRyb2wpIHNwZWFrKHNlbGYuX3NwZWFrKTtcbiAgICBpZiAoY29udHJvbCAhPT0gbmV4dEZvY3VzKSB7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiLCBudWxsKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgXCJub25lXCIpO1xuICAgICAgbGFiZWwgPSBcIlxceEEwXCI7XG4gICAgICBjb250cm9sLmZvY3VzKCk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIF9hMztcbiAgICAgIGF0dHIoY29udHJvbCwgXCJhcmlhLWV4cGFuZGVkXCIsIFwidHJ1ZVwiKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgaW5wdXRNb2RlKTtcbiAgICAgIChfYTMgPSBuZXh0Rm9jdXMgPT0gbnVsbCA/IHZvaWQgMCA6IG5leHRGb2N1cy5mb2N1cykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy5jYWxsKG5leHRGb2N1cyk7XG4gICAgICBzZWxmLl9zcGVhayA9IFwiXCI7XG4gICAgICBpZiAoSVNfRklSRUZPWF9NQUMpIG9uKHNlbGYsIFwiYmx1clwiLCAoKSA9PiByZW5kZXIoc2VsZiksIEVWRU5UX09OQ0UpO1xuICAgICAgZWxzZSBzZXRUaW1lb3V0KHJlbmRlciwgMTAwLCBzZWxmKTtcbiAgICB9LCAxMDApO1xuICB9XG4gIGxldCBpZHggPSAwO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBjb25zdCBsYWJlbDIgPSB0ZXh0KGl0ZW0pO1xuICAgIGNvbnN0IHZhbHVlID0gaXRlbS52YWx1ZSB8fCBsYWJlbDI7XG4gICAgY29uc3QgYXJpYSA9IGAke3NlbGYuX3NwZWFrfSR7bGFiZWwyfSwgJHtfdGV4dHMucmVtb3ZlfSwgJHsrK2lkeH0gJHtfdGV4dHMub2Z9ICR7aXRlbXMubGVuZ3RofWA7XG4gICAgYXR0cihpdGVtLCBcInJvbGVcIiwgXCJidXR0b25cIik7XG4gICAgYXR0cihpdGVtLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgICBhdHRyKGl0ZW0sIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICBhdHRyKGl0ZW0sIFwiYXJpYS1sYWJlbFwiLCBhcmlhKTtcbiAgfVxuICBpZiAoIW11bHRpcGxlICYmIGlkeCA+IDEpXG4gICAgY29uc29sZS53YXJuKFwidS1jb21ib2JveDogTXVsdGlwbGUgPGRhdGE+IGZvdW5kIGluIHNpbmdsZSBtb2RlLlwiKTtcbiAgaWYgKGxpc3QpIGF0dHIobGlzdCwgXCJhcmlhLW11bHRpc2VsZWN0YWJsZVwiLCBgJHttdWx0aXBsZX1gKTtcbiAgaWYgKGNvbnRyb2wpIGF0dHIoY29udHJvbCwgXCJsaXN0XCIsIHVzZUlkKGxpc3QpKTtcbiAgaWYgKGNvbnRyb2wpIGF0dHIoY29udHJvbCwgXCJhcmlhLWxhYmVsXCIsIGAke3NlbGYuX3NwZWFrfSR7bGFiZWx9YCk7XG4gIGNvbnN0IHNlbGVjdCA9IHNlbGYucXVlcnlTZWxlY3RvcihcInNlbGVjdFwiKTtcbiAgaWYgKHNlbGVjdCkgc2VsZWN0Lm11bHRpcGxlID0gbXVsdGlwbGU7XG4gIGlmIChzZWxlY3QpIHNlbGVjdC50ZXh0Q29udGVudCA9IFwiXCI7XG4gIHNlbGVjdCA9PSBudWxsID8gdm9pZCAwIDogc2VsZWN0LmFwcGVuZCguLi5zZWxmLnZhbHVlcy5tYXAoKHZhbCkgPT4gbmV3IE9wdGlvbih2YWwsIHZhbCwgdHJ1ZSwgdHJ1ZSkpKTtcbiAgc3luY0NsZWFyV2l0aElucHV0KHNlbGYpO1xuICBzeW5jT3B0aW9uc1dpdGhJdGVtcyhzZWxmKTtcbiAgKF9iID0gbXV0YXRpb25PYnNlcnZlcihzZWxmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLnRha2VSZWNvcmRzKCk7XG59O1xudmFyIHN5bmNDbGVhcldpdGhJbnB1dCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChzZWxmLmNsZWFyKSBhdHRyKHNlbGYuY2xlYXIsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgaWYgKHNlbGYuY2xlYXIpIHNlbGYuY2xlYXIuaGlkZGVuID0gISgoX2EyID0gc2VsZi5jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnZhbHVlKTtcbn07XG52YXIgc3luY09wdGlvbnNXaXRoSXRlbXMgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF9zcGVhaywgb3B0aW9ucyA9IFtdLCB2YWx1ZXMgfSA9IHNlbGY7XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IChfYTIgPSBhdHRyKG9wdCwgXCJ2YWx1ZVwiKSkgIT0gbnVsbCA/IF9hMiA6IHRleHQob3B0KTtcbiAgICBhdHRyKG9wdCwgXCJhcmlhLWxhYmVsXCIsIF9zcGVhayA/IGAke19zcGVha30ke3RleHQob3B0KX1gIDogbnVsbCk7XG4gICAgYXR0cihvcHQsIFwic2VsZWN0ZWRcIiwgdmFsdWVzLmluY2x1ZGVzKHZhbHVlKSA/IFwiXCIgOiBudWxsKTtcbiAgfVxufTtcbnZhciBzeW5jSW5wdXRWYWx1ZSA9IChzZWxmKSA9PiB7XG4gIGNvbnN0IHsgbXVsdGlwbGUsIGNvbnRyb2wsIGl0ZW1zIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9IHRleHQoaXRlbXNbMF0pO1xuICBpZiAoIW11bHRpcGxlICYmIGNvbnRyb2wgJiYgdmFsdWUgIT09IGNvbnRyb2wudmFsdWUpXG4gICAgc2V0VmFsdWUoY29udHJvbCwgdmFsdWUsIFwiaW5zZXJ0VGV4dFwiKTtcbn07XG52YXIgZGlzcGF0Y2hNYXRjaCA9IChzZWxmLCBzeW5jID0gdHJ1ZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF90ZXh0cywgb3B0aW9ucyA9IFtdLCBjcmVhdGFibGUsIGNvbnRyb2wsIGl0ZW1zLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgdmFsdWUgPSAoKF9hMiA9IGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBxdWVyeSA9IHZhbHVlLnRvTG93ZXJDYXNlKCkgfHwgbnVsbDtcbiAgbGV0IG1hdGNoID0gWy4uLm9wdGlvbnNdLmZpbmQoKG8pID0+IG8ubGFiZWwudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IHF1ZXJ5KTtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGRldGFpbDogbWF0Y2ggfTtcbiAgaWYgKHNlbGYuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJiZWZvcmVtYXRjaFwiLCBldmVudCkpKVxuICAgIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIG9wdC5zZWxlY3RlZCA9IG9wdCA9PT0gbWF0Y2g7XG4gIG1hdGNoID0gWy4uLm9wdGlvbnNdLmZpbmQoKG8pID0+IG8uc2VsZWN0ZWQpO1xuICBzeW5jT3B0aW9uc1dpdGhJdGVtcyhzZWxmKTtcbiAgaWYgKG1hdGNoKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgbWF0Y2gsIGZhbHNlLCAhIXN5bmMpO1xuICBpZiAoY3JlYXRhYmxlICYmIHZhbHVlKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgeyB2YWx1ZSB9LCBmYWxzZSk7XG4gIGlmICghbXVsdGlwbGUgJiYgaXRlbXNbMF0pIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW1zWzBdLCB0cnVlLCBmYWxzZSk7XG4gIGlmIChzeW5jKSBzcGVhayhfdGV4dHMuaW52YWxpZCk7XG59O1xudmFyIGRpc3BhdGNoQ2hhbmdlID0gKHNlbGYsIGl0ZW0sIHJlbW92YWJsZSA9IHRydWUsIHN5bmMgPSB0cnVlKSA9PiB7XG4gIGNvbnN0IHsgY29udHJvbCwgaXRlbXMsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCBhZGQgPSBjcmVhdGVFbGVtZW50KFwiZGF0YVwiLCBpdGVtLmxhYmVsIHx8IGl0ZW0udmFsdWUsIHtcbiAgICB2YWx1ZTogaXRlbS52YWx1ZVxuICB9KTtcbiAgY29uc3QgcmVtb3ZlID0gWy4uLml0ZW1zXS5maW5kKChpKSA9PiBpLnZhbHVlID09PSBpdGVtLnZhbHVlKTtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGRldGFpbDogcmVtb3ZlIHx8IGFkZCB9O1xuICBjb25zdCBza2lwID0gcmVtb3ZlICYmICFyZW1vdmFibGU7XG4gIGlmICghc2tpcCAmJiBzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiYmVmb3JlY2hhbmdlXCIsIGV2ZW50KSkpIHtcbiAgICBpZiAoIW11bHRpcGxlKSBmb3IgKGNvbnN0IGl0ZW0yIG9mIFsuLi5pdGVtc10pIGl0ZW0yLnJlbW92ZSgpO1xuICAgIGlmIChyZW1vdmUpIHJlbW92ZS5yZW1vdmUoKTtcbiAgICBlbHNlIGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYmVmb3JlYmVnaW5cIiwgYWRkKTtcbiAgICBzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiYWZ0ZXJjaGFuZ2VcIiwgZXZlbnQpKTtcbiAgfVxuICBpZiAoc3luYykgc2V0VGltZW91dChzeW5jSW5wdXRWYWx1ZSwgMTAsIHNlbGYpO1xufTtcbnZhciBvbkZvY3VzID0gKHNlbGYsIHsgdGFyZ2V0IH0pID0+IHtcbiAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBzZWxmLl9mb2N1cyA9IHRhcmdldDtcbiAgc3BlYWsoKTtcbn07XG52YXIgb25CbHVyID0gKHNlbGYpID0+IElTX1BSRVNTIHx8IHNldFRpbWVvdXQob25CbHVycmVkLCAwLCBzZWxmKTtcbnZhciBvbkJsdXJyZWQgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoIXNlbGYuX2ZvY3VzIHx8IHNlbGYuY29udGFpbnMoKF9hMiA9IHNlbGYuX3Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuYWN0aXZlRWxlbWVudCkpIHJldHVybjtcbiAgc3luY0lucHV0VmFsdWUoc2VsZik7XG59O1xudmFyIG9uQ2xpY2sgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgY29uc3QgeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5LCB0YXJnZXQgfSA9IGV2ZW50O1xuICBjb25zdCB7IGNsZWFyLCBjb250cm9sLCBpdGVtcyB9ID0gc2VsZjtcbiAgaWYgKGNsZWFyID09IG51bGwgPyB2b2lkIDAgOiBjbGVhci5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgaWYgKGNvbnRyb2wpIHNldFZhbHVlKGNvbnRyb2wsIFwiXCIsIFwiZGVsZXRlQ29udGVudEJhY2t3YXJkXCIpO1xuICAgIHJldHVybiBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCk7XG4gIH1cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfSA9IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKGl0ZW0uY29udGFpbnModGFyZ2V0KSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW0pO1xuICAgIGlmICh5ID49IHRvcCAmJiB5IDw9IGJvdHRvbSAmJiB4ID49IGxlZnQgJiYgeCA8PSByaWdodCkgcmV0dXJuIGl0ZW0uZm9jdXMoKTtcbiAgfVxuICBpZiAodGFyZ2V0ID09PSBzZWxmKSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCk7XG59O1xudmFyIG9uSW5wdXQgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgeyBvcHRpb25zID0gW10sIGNvbnRyb2wsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9ICgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IGlzQ2xpY2sgPSBldmVudCBpbnN0YW5jZW9mIElucHV0RXZlbnQgPyAhZXZlbnQuaW5wdXRUeXBlIHx8IGV2ZW50LmlucHV0VHlwZSA9PT0gQ0xJQ0sgOiAhIXZhbHVlO1xuICBpZiAoaXNDbGljaykge1xuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICAgIGlmIChjb250cm9sKSBjb250cm9sLnZhbHVlID0gc2VsZi5fdmFsdWU7XG4gICAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucylcbiAgICAgIGlmIChvcHQudmFsdWUgJiYgb3B0LnZhbHVlID09PSB2YWx1ZSlcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIG9wdCwgbXVsdGlwbGUpO1xuICB9IGVsc2UgaWYgKCFtdWx0aXBsZSkgZGlzcGF0Y2hNYXRjaChzZWxmLCBmYWxzZSk7XG4gIHN5bmNDbGVhcldpdGhJbnB1dChzZWxmKTtcbn07XG52YXIgb25LZXlEb3duID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChldmVudC5hbHRLZXkgfHwgZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LnNoaWZ0S2V5KSByZXR1cm47XG4gIGNvbnN0IHsgY2xlYXIsIGNvbnRyb2wsIGl0ZW1zIH0gPSBzZWxmO1xuICBjb25zdCB7IGtleSwgcmVwZWF0LCB0YXJnZXQgfSA9IGV2ZW50O1xuICBjb25zdCBpc0NvbnRyb2wgPSBjb250cm9sICYmIGNvbnRyb2wgPT09IHRhcmdldDtcbiAgY29uc3QgaW5UZXh0ID0gaXNDb250cm9sICYmIChjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLnNlbGVjdGlvbkVuZCk7XG4gIGxldCBpbmRleCA9IGlzQ29udHJvbCA/IGl0ZW1zLmxlbmd0aCA6IFsuLi5pdGVtc10uaW5kZXhPZih0YXJnZXQpO1xuICBpZiAoaXNDb250cm9sICYmIGtleSA9PT0gXCJUYWJcIiAmJiBjbGVhciAmJiAhY2xlYXIuaGlkZGVuKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBjbGVhci50YWJJbmRleCA9IC0xO1xuICAgIGNsZWFyLmZvY3VzKCk7XG4gICAgb24oY2xlYXIsIFwiYmx1clwiLCAoKSA9PiBhdHRyKGNsZWFyLCBcInRhYmluZGV4XCIsIG51bGwpLCBFVkVOVF9PTkNFKTtcbiAgfVxuICBpZiAoIWlzQ29udHJvbCAmJiBhc0J1dHRvbihldmVudCkgfHwgaW5kZXggPT09IC0xKSByZXR1cm47XG4gIGlmIChrZXkgPT09IFwiQXJyb3dSaWdodFwiICYmICFpc0NvbnRyb2wpIGluZGV4ICs9IDE7XG4gIGVsc2UgaWYgKGtleSA9PT0gXCJBcnJvd0xlZnRcIiAmJiAhaW5UZXh0KSBpbmRleCAtPSAxO1xuICBlbHNlIGlmIChrZXkgPT09IFwiRW50ZXJcIiAmJiBpc0NvbnRyb2wpIHtcbiAgICBjb25zdCBmb3JtID0gYXR0cihjb250cm9sLCBcImZvcm1cIik7XG4gICAgYXR0cihjb250cm9sLCBcImZvcm1cIiwgXCIjXCIpO1xuICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiLCBmb3JtKSk7XG4gICAgcmV0dXJuIGRpc3BhdGNoTWF0Y2goc2VsZik7XG4gIH0gZWxzZSBpZiAoKGtleSA9PT0gXCJCYWNrc3BhY2VcIiB8fCBrZXkgPT09IFwiRGVsZXRlXCIpICYmICFpblRleHQpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGlmICghcmVwZWF0ICYmIGl0ZW1zW2luZGV4XSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW1zW2luZGV4XSk7XG4gICAgaWYgKGlzQ29udHJvbCkgaW5kZXggLT0gMTtcbiAgfSBlbHNlIHJldHVybiBpc0NvbnRyb2wgfHwgKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuZm9jdXMoKSk7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIChfYTIgPSBpdGVtc1tNYXRoLm1heCgwLCBpbmRleCldIHx8IGNvbnRyb2wpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZm9jdXMoKTtcbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWNvbWJvYm94XCIsIFVIVE1MQ29tYm9ib3hFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxDb21ib2JveEVsZW1lbnQgfTtcbiIsImltcG9ydCB7IGNsc3ggfSBmcm9tIFwiY2xzeFwiO1xuXG5leHBvcnQgY29uc3QgUVVJQ0tfRVZFTlQgPSB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IHRydWUgfTtcbmV4cG9ydCBjb25zdCBJU19CUk9XU0VSID1cblx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCI7XG5cbi8vIFRPRE86IERvY3VtZW50YXRpb24gZm9yIHByZXR0eU51bWJlclxubGV0IElOVExfTlVNOiBJbnRsLk51bWJlckZvcm1hdCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBwcmV0dHlOdW1iZXIobnVtYmVyOiBudW1iZXIgfCBzdHJpbmcpIHtcblx0aWYgKCFJTlRMX05VTSlcblx0XHRJTlRMX05VTSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcblx0XHRcdChJU19CUk9XU0VSICYmIGF0dHIoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBcImxhbmdcIikpIHx8IFwibm9cIixcblx0XHQpO1xuXHRyZXR1cm4gSU5UTF9OVU0uZm9ybWF0KE51bWJlcihudW1iZXIpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlPFQgZXh0ZW5kcyB1bmtub3duW10+KFxuXHRjYWxsYmFjazogKC4uLmFyZ3M6IFQpID0+IHZvaWQsXG5cdGRlbGF5OiBudW1iZXIsXG4pIHtcblx0bGV0IHRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcblxuXHRyZXR1cm4gKC4uLmFyZ3M6IFQpID0+IHtcblx0XHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRcdHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBjYWxsYmFjayguLi5hcmdzKSwgZGVsYXkpO1xuXHR9O1xufVxuXG4vKipcbiAqIGF0dHJcbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgZ2V0LCBzZXQgYW5kIHJlbW92ZSBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0gZWwgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gbmFtZSBUaGUgYXR0cmlidXRlIG5hbWUgdG8gZ2V0LCBzZXQgb3IgcmVtb3ZlLCBvciBhIG9iamVjdCB0byBzZXQgbXVsdGlwbGUgYXR0cmlidXRlc1xuICogQHBhcmFtIHZhbHVlIEEgdmFsaWQgYXR0cmlidXRlIHZhbHVlIG9yIG51bGwgdG8gcmVtb3ZlIGF0dHJpYnV0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0cihcblx0ZWw6IEVsZW1lbnQsXG5cdG5hbWU6IHN0cmluZyxcblx0dmFsdWU/OiBzdHJpbmcgfCBudWxsLFxuKTogc3RyaW5nIHwgbnVsbCB7XG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpID8/IG51bGw7IC8vIEZhbGxiYWNrIHRvIG51bGwgb25seSBpZiBlbCBpcyB1bmRlZmluZWRcblx0aWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG5cdHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIHVzZUlkXG4gKiBAcmV0dXJuIEEgZ2VuZXJhdGVkIHVuaXF1ZSBJRFxuICovXG5sZXQgaWQgPSAwO1xuY29uc3QgVVVJRCA9IGAke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgNSl9YDtcbmV4cG9ydCBmdW5jdGlvbiB1c2VJZChlbDogRWxlbWVudCkge1xuXHRpZiAoIWVsLmlkKSBlbC5pZCA9IGAke1VVSUR9JHsrK2lkfWA7XG5cdHJldHVybiBlbC5pZDtcbn1cblxuLy8gSW50ZXJuYWwgaGVscGVyIGZvciBvbiAvIG9mZlxuY29uc3QgZXZlbnRzID0gKFxuXHRhY3Rpb246IFwiYWRkXCIgfCBcInJlbW92ZVwiLFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHRyZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPixcbik6IHZvaWQgPT4ge1xuXHRmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcblx0XHRyZXN0WzBdID0gdHlwZTtcblx0XHRlbGVtZW50W2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0oLi4ucmVzdCk7XG5cdH1cbn07XG5cbi8qKlxuICogb25cbiAqIEBwYXJhbSBlbGVtZW50IFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIHR5cGVzIEEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBldmVudCB0eXBlc1xuICogQHBhcmFtIGxpc3RlbmVyIEFuIGV2ZW50IGxpc3RlbmVyIGZ1bmN0aW9uIG9yIGxpc3RlbmVyIG9iamVjdFxuICovXG5leHBvcnQgY29uc3Qgb24gPSAoXG5cdGVsZW1lbnQ6IE5vZGUgfCBXaW5kb3csXG5cdC4uLnJlc3Q6IFBhcmFtZXRlcnM8dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI+XG4pOiB2b2lkID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcblxuLyoqXG4gKiBvZmZcbiAqIEBwYXJhbSBlbGVtZW50IFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIHR5cGVzIEEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBldmVudCB0eXBlc1xuICogQHBhcmFtIGxpc3RlbmVyIEFuIGV2ZW50IGxpc3RlbmVyIGZ1bmN0aW9uIG9yIGxpc3RlbmVyIG9iamVjdFxuICovXG5leHBvcnQgY29uc3Qgb2ZmID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG5cbi8qKlxuICogU2Nyb2xsZXIgdGFyZ2VzIGhlbHBpbmcgYW5jaG9yUG9zaXRpb25cbiAqL1xuY29uc3QgU0NST0xMRVIgPSBJU19CUk9XU0VSID8gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSA6IG51bGw7IC8vIFVzZWQgdG8gZW5zdXJlIHdlIGhhdmUgc2Nyb2xsYWJpbGl0eSB1bmRlclxuY29uc3QgVEFSR0VUUyA9IG5ldyBNYXA8RWxlbWVudCwgKCkgPT4gdm9pZD4oKTsgLy8gU3RvcmUgY3VycmVudCBvcGVuIHBvcHBlcnMgYW5kIHRoZWlyIHVwZGF0ZSBmdW5jdGlvbnNcbmNvbnN0IFRBUkdFVFNfVVBEQVRFID0gKCkgPT4ge1xuXHRmb3IgKGNvbnN0IFtfLCB1cGRhdGVdIG9mIFRBUkdFVFMpIHVwZGF0ZSgpO1xufTtcblxuaWYgKFNDUk9MTEVSKSB7XG5cdFNDUk9MTEVSLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO3BhZGRpbmc6MXB4O3RvcDowO2xlZnQ6MHB4XCI7XG5cdG9uKHdpbmRvdywgXCJsb2FkLHJlc2l6ZSxzY3JvbGxcIiwgVEFSR0VUU19VUERBVEUsIFFVSUNLX0VWRU5UKTtcbn1cblxuLyoqXG4gKiBhbmNob3JQb3NpdGlvblxuICogQHBhcmFtIHRhcmdldCBUaGUgRWxlbWVudCB0byBwb3NpdGlvblxuICogQHBhcmFtIGFuY2hvciBUaGUgRWxlbWVudCB0byB1c2UgYXMgYW5jaG9yXG4gKi9cbmNvbnN0IFBPU0lUSU9OID0geyB0b3A6IDAsIHJpZ2h0OiAxLCBib3R0b206IDIsIGxlZnQ6IDMgfTsgLy8gU3BlZWQgdXAgYnkgdXNpbmcgYSBjb25zdCBtYXBcblxuZXhwb3J0IGZ1bmN0aW9uIGFuY2hvclBvc2l0aW9uKFxuXHR0YXJnZXQ6IEhUTUxFbGVtZW50LFxuXHRhbmNob3I6IEVsZW1lbnQgfCBmYWxzZSxcblx0cG9zaXRpb24/OiBzdHJpbmcgfCBudW1iZXIsXG5cdGZvcmNlPzogYm9vbGVhbixcbikge1xuXHRpZiAoYW5jaG9yID09PSBmYWxzZSB8fCAhYW5jaG9yLmlzQ29ubmVjdGVkIHx8ICF0YXJnZXQuaXNDb25uZWN0ZWQpXG5cdFx0cmV0dXJuIFRBUkdFVFMuZGVsZXRlKHRhcmdldCk7IC8vIFN0b3Agd2F0Y2hpbmcgaWYgYW5jaG9yIGlzIHJlbW92ZWQgZnJvbSBET01cblx0aWYgKCFTQ1JPTExFUj8uaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKFNDUk9MTEVSIHx8IFwiXCIpOyAvLyBFbnN1cmUgd2UgaGF2ZSB0aGUgc2Nyb2xsZXJcblx0aWYgKCFUQVJHRVRTLmhhcyh0YXJnZXQpKSB7XG5cdFx0Ly8gU2V0dXAgbmV3IHRhcmdldCBvciB1cGRhdGUgcG9zaXRpb25cblx0XHRjb25zdCBwbGFjZSA9XG5cdFx0XHRQT1NJVElPTltwb3NpdGlvbiBhcyBrZXlvZiB0eXBlb2YgUE9TSVRJT05dID8/IFBPU0lUSU9OLmJvdHRvbTsgLy8gVXNlIENTUyBwcm9wZXJ0eSB0byBzdG9yZSBwb3NpdGlvbiBmb3IgbW9yZSBmbGV4aWJpbGl0eVxuXHRcdHJldHVybiBUQVJHRVRTLnNldCh0YXJnZXQsICgpID0+XG5cdFx0XHRhbmNob3JQb3NpdGlvbih0YXJnZXQsIGFuY2hvciwgcGxhY2UsIGZvcmNlKSxcblx0XHQpLmdldCh0YXJnZXQpPy4oKTsgLy8gU3RhcnQgd2F0Y2hpbmcgaWYgbm90IGFscmVhZHkgd2F0Y2hpbmdcblx0fVxuXG5cdGNvbnN0IGlzSFRNTEFuY2hvciA9IGFuY2hvciBpbnN0YW5jZW9mIEhUTUxFbGVtZW50OyAvLyBTVkcgb3IgWE1MIGVsZW1lbnRzIGRvZXMgbm90IGhhdmUgb2Zmc2V0V2lkdGggb3Igb2Zmc2V0SGVpZ2h0XG5cdGNvbnN0IHsgb2Zmc2V0V2lkdGg6IHRhcmdldFcsIG9mZnNldEhlaWdodDogdGFyZ2V0SCB9ID0gdGFyZ2V0O1xuXHRjb25zdCBhbmNob3JXID0gaXNIVE1MQW5jaG9yID8gYW5jaG9yLm9mZnNldFdpZHRoIDogYW5jaG9yLmNsaWVudFdpZHRoO1xuXHRjb25zdCBhbmNob3JIID0gaXNIVE1MQW5jaG9yID8gYW5jaG9yLm9mZnNldEhlaWdodCA6IGFuY2hvci5jbGllbnRIZWlnaHQ7XG5cdGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wIH0gPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdGNvbnN0IGFuY2hvclggPSBNYXRoLnJvdW5kKGxlZnQgLSAoYW5jaG9yVyAtIHdpZHRoKSAvIDIpOyAvLyBDb3JyZWN0IGZvciBDU1MgdHJhbnNmb3JtIHNjYWxlXG5cdGNvbnN0IGFuY2hvclkgPSBNYXRoLnJvdW5kKHRvcCAtIChhbmNob3JIIC0gaGVpZ2h0KSAvIDIpOyAvLyBDb3JyZWN0IGZvciBDU1MgdHJhbnNmb3JtIHNjYWxlXG5cblx0Y29uc3QgaGFzU3BhY2VMZWZ0ID0gYW5jaG9yWCAtIHRhcmdldFcgPiAwO1xuXHRjb25zdCBoYXNTcGFjZVJpZ2h0ID0gYW5jaG9yVyArIGFuY2hvclcgKyB0YXJnZXRXIDwgd2luZG93LmlubmVyV2lkdGg7XG5cdGNvbnN0IGhhc1NwYWNlT3ZlciA9IGFuY2hvclkgLSB0YXJnZXRIID4gMDtcblx0Y29uc3QgaGFzU3BhY2VVbmRlciA9IGFuY2hvclkgKyBhbmNob3JIICsgdGFyZ2V0SCA8IHdpbmRvdy5pbm5lckhlaWdodDtcblx0Y29uc3QgcG9zaXRpb25SaWdodCA9XG5cdFx0KHBvc2l0aW9uID09PSBQT1NJVElPTi5yaWdodCAmJiAoZm9yY2UgfHwgaGFzU3BhY2VSaWdodCkpIHx8ICFoYXNTcGFjZUxlZnQ7IC8vIEFsd2F5cyBwb3NpdGlvbiByaWdodCB3aGVuIG5vIGhhc1NwYWNlTGVmdCwgYXMgbm8gT1Mgc2Nyb2xscyBmdXJ0aGVyIHVwIHRoYW4gMFxuXHRjb25zdCBwb3NpdGlvblVuZGVyID1cblx0XHQocG9zaXRpb24gPT09IFBPU0lUSU9OLmJvdHRvbSAmJiAoZm9yY2UgfHwgaGFzU3BhY2VVbmRlcikpIHx8ICFoYXNTcGFjZU92ZXI7IC8vIEFsd2F5cyBwb3NpdGlvbiB1bmRlciB3aGVuIG5vIGhhc1NwYWNlT3ZlciwgYXMgbm8gT1Mgc2Nyb2xscyBmdXJ0aGVyIHVwIHRoYW4gMFxuXHRjb25zdCBjZW50ZXJYID0gTWF0aC5taW4oXG5cdFx0TWF0aC5tYXgoMTAsIGFuY2hvclggLSAodGFyZ2V0VyAtIGFuY2hvclcpIC8gMiksXG5cdFx0d2luZG93LmlubmVyV2lkdGggLSB0YXJnZXRXIC0gMTAsXG5cdCk7XG5cdGNvbnN0IGNlbnRlclkgPSBNYXRoLm1pbihcblx0XHRNYXRoLm1heCgxMCwgYW5jaG9yWSAtICh0YXJnZXRIIC0gYW5jaG9ySCkgLyAyKSxcblx0XHR3aW5kb3cuaW5uZXJIZWlnaHQgLSB0YXJnZXRIIC0gMTAsXG5cdCk7XG5cdGNvbnN0IGlzVmVydGljYWwgPSBwb3NpdGlvbiA9PT0gUE9TSVRJT04udG9wIHx8IHBvc2l0aW9uID09PSBQT1NJVElPTi5ib3R0b207XG5cblx0dGFyZ2V0LnN0eWxlLmxlZnQgPSBgJHtNYXRoLnJvdW5kKGlzVmVydGljYWwgPyBjZW50ZXJYIDogcG9zaXRpb25SaWdodCA/IGFuY2hvclggKyBhbmNob3JXIDogYW5jaG9yWCAtIHRhcmdldFcpfXB4YDtcblx0dGFyZ2V0LnN0eWxlLnRvcCA9IGAke01hdGgucm91bmQoaXNWZXJ0aWNhbCA/IChwb3NpdGlvblVuZGVyID8gYW5jaG9yWSArIGFuY2hvckggOiBhbmNob3JZIC0gdGFyZ2V0SCkgOiBjZW50ZXJZKX1weGA7XG5cdFNDUk9MTEVSPy5zdHlsZS5zZXRQcm9wZXJ0eShcblx0XHRcInRyYW5zbGF0ZVwiLFxuXHRcdGAwcHggJHtNYXRoLnJvdW5kKHBvc2l0aW9uVW5kZXIgPyB3aW5kb3cuc2Nyb2xsWSArIGFuY2hvclkgKyBhbmNob3JIICsgdGFyZ2V0SCArIDMwIDogMCl9cHhgLFxuXHQpO1xufVxuXG4vKipcbiAqIFNwZWVkIHVwIE11dGF0aW9uT2JzZXJ2ZXIgYnkgZGVib3VuY2luZyBhbmQgb25seSBydW5uaW5nIHdoZW4gcGFnZSBpcyB2aXNpYmxlXG4gKiBAcmV0dXJuIG5ldyBNdXRhaW9uT2JzZXJ2ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2s6IE11dGF0aW9uQ2FsbGJhY2spIHtcblx0bGV0IHF1ZXVlID0gMDtcblxuXHRjb25zdCBvbkZyYW1lID0gKCkgPT4gc2V0VGltZW91dChvblRpbWVyLCAyMDApOyAvLyBVc2UgYm90aCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgYW5kIHNldFRpbWVvdXQgdG8gZGVib3VuY2UgYW5kIG9ubHkgcnVuIHdoZW4gdmlzaWJsZVxuXHRjb25zdCBvblRpbWVyID0gKCkgPT4ge1xuXHRcdGNhbGxiYWNrKFtdLCBvYnNlcnZlcik7XG5cdFx0b2JzZXJ2ZXIudGFrZVJlY29yZHMoKTsgLy8gQ2xlYXIgcmVjb3JkcyB0byBhdm9pZCBydW5uaW5nIGNhbGxiYWNrIG11bHRpcGxlIHRpbWVzXG5cdFx0cXVldWUgPSAwO1xuXHR9O1xuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcblx0XHRpZiAoIXF1ZXVlKSBxdWV1ZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShvbkZyYW1lKTtcblx0fSk7XG5cblx0cmV0dXJuIG9ic2VydmVyO1xufVxuXG4vKipcbiAqIG9uTXV0YXRpb25cbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgb2JzZXJ2ZSBtdXRhdGlvbnMgb24gYSBzcGVjaWZpYyBjbGFzcyBuYW1lXG4gKiBAcGFyYW0gZWwgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gY2xhc3NOYW1lIFRoZSBjbGFzcyBuYW1lIHRvIG9ic2VydmVcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gbXV0YXRpb25zIGFyZSBkZXRlY3RlZFxuICovXG5jb25zdCBNVVRBVE9SUyA9IG5ldyBXZWFrTWFwPEVsZW1lbnQsIEFycmF5PCgpID0+IHZvaWQ+PigpO1xuZXhwb3J0IGNvbnN0IG9uTXV0YXRpb24gPSA8VCBleHRlbmRzIEVsZW1lbnQ+KFxuXHRlbDogRWxlbWVudCxcblx0Y2xhc3NOYW1lOiBzdHJpbmcsXG5cdGNhbGxiYWNrOiAoZWxlbXM6IEhUTUxDb2xsZWN0aW9uT2Y8VD4pID0+IHZvaWQsXG4pID0+IHtcblx0Y29uc3QgZWxlbXMgPSBlbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7XG5cdGNvbnN0IG11dGF0b3IgPSBNVVRBVE9SUy5nZXQoZWwpIHx8IFtdO1xuXG5cdGlmICghbXV0YXRvci5sZW5ndGgpIHtcblx0XHRNVVRBVE9SUy5zZXQoZWwsIG11dGF0b3IpO1xuXHRcdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoKF8sIG9ic2VydmVyKSA9PiB7XG5cdFx0XHRpZiAoZWwuaXNDb25uZWN0ZWQgJiYgbXV0YXRvcj8ubGVuZ3RoKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgY2FsbGJhY2sgb2YgbXV0YXRvcikgY2FsbGJhY2soKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdE1VVEFUT1JTLmRlbGV0ZShlbCk7XG5cdFx0XHR9XG5cdFx0fSkub2JzZXJ2ZShlbCwge1xuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbXCJjbGFzc1wiXSxcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdH0pO1xuXHR9XG5cdG11dGF0b3IucHVzaCgoKSA9PiBjYWxsYmFjayhlbGVtcyBhcyBIVE1MQ29sbGVjdGlvbk9mPFQ+KSk7XG59O1xuXG4vKipcbiAqIG9uTG9hZGVkXG4gKiBAZGVzY3JpcHRpb24gUnVucyBhIGNhbGxiYWNrIHdoZW4gd2luZG93IGlzIGxvYWRlZCBpbiBicm93c2VyXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIHJ1biB3aGVuIHRoZSBwYWdlIGlzIHJlYWR5XG4gKi9cbmV4cG9ydCBjb25zdCBvbkxvYWRlZCA9IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4ge1xuXHRpZiAoIUlTX0JST1dTRVIpIHJldHVybjtcblx0Y29uc3QgcnVuID0gKCkgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKTsgLy8gRW5zdXJlIHdlIHJ1biBhZnRlciBhbGwgb3RoZXIgbG9hZCBldmVudHNcblx0aWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikgcnVuKCk7XG5cdGVsc2Ugb24od2luZG93LCBcImxvYWRcIiwgcnVuKTtcbn07XG5cbi8qKlxuICogaXNJbnB1dExpa2VcbiAqIEBkZXNjcmlwdGlvbiBDaGVjayBpZiBlbGVtZW50IGlzIGFuIGlucHV0IGxpa2UgZWxlbWVudFxuICogQHBhcmFtIGVsIFRoZSBlbGVtZW50IHRvIGNoZWNrXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBlbGVtZW50IGlzIGFuIGlucHV0IGxpa2UgZWxlbWVudFxuICovXG5leHBvcnQgY29uc3QgaXNJbnB1dExpa2UgPSAoZWw6IHVua25vd24pOiBlbCBpcyBIVE1MSW5wdXRFbGVtZW50ID0+XG5cdGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiZcblx0XCJ2YWxpZGl0eVwiIGluIGVsICYmXG5cdCEoZWwgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCk7XG5cbi8qKlxuICogdG9DdXN0b21FbGVtZW50UHJvcHNcbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgY29udmVydCBwcm9wcyB0byBjdXN0b20gZWxlbWVudCBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0gcHJvcHMgVGhlIHByb3BzIHRvIGNvbnZlcnRcbiAqIEByZXR1cm5zIFRoZSBjb252ZXJ0ZWQgcHJvcHNcbiAqL1xuZXhwb3J0IGNvbnN0IHRvQ3VzdG9tRWxlbWVudFByb3BzID0gKFxuXHR7IGNsYXNzTmFtZSwgaGlkZGVuLCBvcGVuLCAuLi5yZXN0IH06IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuXHRrbGFzcz86IHN0cmluZyxcbikgPT4ge1xuXHRyZXN0LnN1cHByZXNzSHlkcmF0aW9uV2FybmluZyA9IHRydWU7IC8vIE1ha2UgTmV4dC5qcyBoYXBweVxuXHRyZXN0LmNsYXNzID0gY2xzeChrbGFzcywgY2xhc3NOYW1lIHx8IFwiXCIpIHx8IHVuZGVmaW5lZDsgLy8gVXNlIGNsYXNzIGluc3RlYWQgb2YgY2xhc3NOYW1lXG5cdGlmIChoaWRkZW4pIHJlc3QuaGlkZGVuID0gdHJ1ZTsgLy8gRW5zdXJlIGJvb2xlYW4gcHJvcCBiZWhhdmlvdXJcblx0aWYgKG9wZW4pIHJlc3Qub3BlbiA9IHRydWU7IC8vIEVuc3VyZSBib29sZWFuIHByb3AgYmVoYXZpb3VyXG5cdHJldHVybiByZXN0O1xufTtcbiIsImltcG9ydCB7IElTX0JST1dTRVIgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgTUFUT01PID0gXCJtYXR0aWxzeW5ldC5tYXRvbW8uY2xvdWRcIjtcbmxldCBFTkFCTEVEOiBBbmFseXRpY3NBY3Rpb25zW1wiaW5pdFwiXVtcImVuYWJsZWRcIl0gPSB0cnVlO1xuXG50eXBlIE1hdG9tbyA9IChzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKVtdO1xuZGVjbGFyZSBnbG9iYWwge1xuXHRpbnRlcmZhY2UgV2luZG93IHtcblx0XHRfcGFxPzogTWF0b21vW107XG5cdH1cbn1cblxuZXhwb3J0IHR5cGUgQW5hbHl0aWNzQWN0aW9ucyA9IHtcblx0aW5pdDoge1xuXHRcdG1hdG9tb0lkOiBudW1iZXIgfCBzdHJpbmc7XG5cdFx0ZW5hYmxlZD86IGJvb2xlYW4gfCBcImRlYnVnXCI7XG5cdH07XG5cdHBhZ2V2aWV3OiB7XG5cdFx0dXJsPzogc3RyaW5nO1xuXHRcdHRpdGxlPzogc3RyaW5nO1xuXHR9O1xuXHRldmVudDoge1xuXHRcdGNhdGVnb3J5OiBzdHJpbmc7XG5cdFx0YWN0aW9uOiBzdHJpbmc7XG5cdFx0bmFtZT86IHN0cmluZztcblx0XHR2YWx1ZT86IG51bWJlcjtcblx0fTtcblx0c2VhcmNoOiB7XG5cdFx0cXVlcnk6IHN0cmluZztcblx0XHRjYXRlZ29yeT86IHN0cmluZztcblx0XHRyZXN1bHRzPzogbnVtYmVyO1xuXHR9O1xuXHRtYXRvbW86IE1hdG9tbztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBhbmFseXRpY3M8QWN0aW9uIGV4dGVuZHMga2V5b2YgQW5hbHl0aWNzQWN0aW9ucz4oXG5cdGFjdGlvbjogQWN0aW9uLFxuXHRhcmdzID0ge30gYXMgQW5hbHl0aWNzQWN0aW9uc1tBY3Rpb25dLFxuKSB7XG5cdGlmICghSVNfQlJPV1NFUikgcmV0dXJuO1xuXHRpZiAoIXdpbmRvdy5fcGFxKSB7XG5cdFx0d2luZG93Ll9wYXEgPSBbXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcIkhlYXRtYXBTZXNzaW9uUmVjb3JkaW5nOjpkaXNhYmxlXCJdKTsgLy8gRGlzYWJsZSBoZWF0bWFwcyBieSBkZWZhdWx0IGFzIHRoaXMgcmVxdWlyZSBjb29raWVzXG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJlbmFibGVMaW5rVHJhY2tpbmdcIl0pO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0VHJhY2tlclVybFwiLCBgaHR0cHM6Ly8ke01BVE9NT30vbWF0b21vLnBocGBdKTtcblx0XHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdzY3JpcHRbc3JjKj1cIm1hdG9tby5qc1wiXScpIHx8XG5cdFx0XHRkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kKFxuXHRcdFx0XHRPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIiksIHtcblx0XHRcdFx0XHRhc3luYzogdHJ1ZSxcblx0XHRcdFx0XHRzcmM6IGBodHRwczovL2Nkbi5tYXRvbW8uY2xvdWQvJHtNQVRPTU99L21hdG9tby5qc2AsXG5cdFx0XHRcdH0pLFxuXHRcdFx0KTtcblx0fVxuXHRpZiAoYWN0aW9uID09PSBcImluaXRcIikge1xuXHRcdGNvbnN0IHsgbWF0b21vSWQsIGVuYWJsZWQgPSB0cnVlIH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJpbml0XCJdO1xuXHRcdEVOQUJMRUQgPSBlbmFibGVkO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0U2l0ZUlkXCIsIG1hdG9tb0lkXSk7XG5cdH1cblxuXHRpZiAoRU5BQkxFRCA9PT0gXCJkZWJ1Z1wiKSByZXR1cm4gY29uc29sZS5pbmZvKGBBbmFseXRpY3M6IFwiJHthY3Rpb259XCJgLCBhcmdzKTtcblx0aWYgKEVOQUJMRUQgPT09IGZhbHNlIHx8IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSA9PT0gXCJsb2NhbGhvc3RcIikgcmV0dXJuO1xuXG5cdGlmIChhY3Rpb24gPT09IFwicGFnZXZpZXdcIikge1xuXHRcdGNvbnN0IHsgdXJsLCB0aXRsZSB9ID0gYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wicGFnZXZpZXdcIl07XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRDdXN0b21VcmxcIiwgdXJsIHx8IGxvY2F0aW9uLmhyZWZdKTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldERvY3VtZW50VGl0bGVcIiwgdGl0bGUgfHwgZG9jdW1lbnQudGl0bGVdKTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInRyYWNrUGFnZVZpZXdcIl0pO1xuXHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJldmVudFwiKSB7XG5cdFx0Y29uc3QgeyBjYXRlZ29yeSwgYWN0aW9uLCBuYW1lLCB2YWx1ZSB9ID0gYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wiZXZlbnRcIl07XG5cdFx0Y29uc3QgZXZlbnQgPSBbXCJ0cmFja0V2ZW50XCIsIGNhdGVnb3J5LCBhY3Rpb24sIG5hbWUsIHZhbHVlXTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKGV2ZW50LmZpbHRlcigodikgPT4gdiAhPT0gdW5kZWZpbmVkKSk7XG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcInNlYXJjaFwiKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0cXVlcnksXG5cdFx0XHRjYXRlZ29yeSA9IGZhbHNlLFxuXHRcdFx0cmVzdWx0cyA9IGZhbHNlLFxuXHRcdH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJzZWFyY2hcIl07XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJ0cmFja1NpdGVTZWFyY2hcIiwgcXVlcnksIGNhdGVnb3J5LCByZXN1bHRzXSk7XG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcIm1hdG9tb1wiKSB7XG5cdFx0d2luZG93Ll9wYXEucHVzaChhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJtYXRvbW9cIl0pO1xuXHR9XG59XG4iLCJjb25zdCBnZXRTdGVwcyA9IChcblx0bm93OiBudW1iZXIsXG5cdG1heDogbnVtYmVyLFxuXHRzaG93ID0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZLFxuKSA9PiB7XG5cdGNvbnN0IG9mZnNldCA9IChzaG93IC0gMSkgLyAyO1xuXHRjb25zdCBzdGFydCA9IE1hdGgubWF4KE1hdGgubWluKG5vdyAtIE1hdGguZmxvb3Iob2Zmc2V0KSwgbWF4IC0gc2hvdyArIDEpLCAxKTtcblx0Y29uc3QgZW5kID0gTWF0aC5taW4oTWF0aC5tYXgobm93ICsgTWF0aC5jZWlsKG9mZnNldCksIHNob3cpLCBtYXgpO1xuXHRjb25zdCBwYWdlcyA9IEFycmF5LmZyb20oeyBsZW5ndGg6IGVuZCArIDEgLSBzdGFydCB9LCAoXywgaSkgPT4gaSArIHN0YXJ0KTtcblxuXHRpZiAoc2hvdyA+IDQgJiYgc3RhcnQgPiAxKSBwYWdlcy5zcGxpY2UoMCwgMiwgMSwgMCk7XG5cdGlmIChzaG93ID4gMyAmJiBlbmQgPCBtYXgpIHBhZ2VzLnNwbGljZSgtMiwgMiwgMCwgbWF4KTtcblx0cmV0dXJuIHBhZ2VzO1xufTtcblxuZXhwb3J0IGNvbnN0IHBhZ2luYXRpb24gPSAoeyBjdXJyZW50ID0gMSwgdG90YWwgPSAxMCwgc2hvdyA9IDcgfSkgPT4gKHtcblx0cHJldjogY3VycmVudCA+IDEgPyBjdXJyZW50IC0gMSA6IDAsXG5cdG5leHQ6IGN1cnJlbnQgPCB0b3RhbCA/IGN1cnJlbnQgKyAxIDogMCxcblx0cGFnZXM6IGdldFN0ZXBzKGN1cnJlbnQsIHRvdGFsLCBzaG93KS5tYXAoKHBhZ2UsIGluZGV4KSA9PiAoe1xuXHRcdGN1cnJlbnQ6IHBhZ2UgPT09IGN1cnJlbnQgJiYgKFwicGFnZVwiIGFzIGNvbnN0KSxcblx0XHRrZXk6IGBrZXktJHtwYWdlfS0ke2luZGV4fWAsXG5cdFx0cGFnZSxcblx0fSkpLFxufSk7XG4iLCJpZiAoXG5cdHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0d2luZG93LkNTU1N0eWxlU2hlZXQgJiZcblx0ZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzXG4pXG5cdCgoKSA9PiB7XG5cdFx0Y29uc3Qga2V5ID0gXCItLW10ZHMtYXBwLWV4cGFuZGVkXCI7XG5cdFx0Y29uc3Qgc2hlZXQgPSBuZXcgQ1NTU3R5bGVTaGVldCgpO1xuXHRcdGNvbnN0IHByZXYgPSAoKSA9PiAhd2luZG93LmxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk/LmluY2x1ZGVzKFwiZmFsc2VcIik7XG5cblx0XHRkb2N1bWVudC5hZG9wdGVkU3R5bGVTaGVldHMucHVzaChzaGVldCk7XG5cdFx0d2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZCA9IChmb3JjZSkgPT4ge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0Y29uc3QgbmV4dCA9IGZvcmNlID8/ICFwcmV2KCk7XG5cdFx0XHRcdHNoZWV0LnJlcGxhY2VTeW5jPy4oYDpyb290IHsgJHtrZXl9OiB2YXIoJHtrZXl9LS0ke25leHR9KX1gKTtcblx0XHRcdFx0d2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKGtleSwgbmV4dCk7XG5cdFx0XHR9IGNhdGNoIChlcnIpIHt9IC8vIGxvY2FsU3RvcmFnZSBpcyBmdWxsIG9yIHJlcGxhY2VTeW5jIGlzIG5vdCBzdXBwb3J0ZWRcblx0XHR9O1xuXG5cdFx0Ly8gU2V0IGFuZCBzdG9yZSBpbml0aWFsIHN0YXRlXG5cdFx0d2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZChwcmV2KCkpO1xuXHR9KSgpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFFVSUNLX0VWRU5ULCBkZWJvdW5jZSwgb24sIG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgXCIuL2FwcC10b2dnbGVcIjtcblxuY29uc3QgQ1NTX0FQUCA9IHN0eWxlcy5hcHAuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1NUSUNLWSA9IHN0eWxlcy5zdGlja3kuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1RPR0dMRSA9ICdbZGF0YS1jb21tYW5kPVwidG9nZ2xlLWFwcC1leHBhbmRlZFwiXSc7XG5jb25zdCBDU1NfU0lERUJBUiA9IGAuJHtDU1NfQVBQfSA+IGRpYWxvZywuJHtDU1NfQVBQfSBkaWFsb2cgfiBtYWluYDtcblxuY29uc3QgdXNlVHJhbnNpdGlvbiA9IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4ge1xuXHRpZiAoIWRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24pIGNhbGxiYWNrKCk7XG5cdGVsc2UgZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbihjYWxsYmFjayk7XG59O1xuXG5leHBvcnQgY29uc3QgdG9nZ2xlQXBwRXhwYW5kZWQgPSAoZm9yY2U/OiBib29sZWFuKSA9PlxuXHQvLyBAdHMtZXhwZWN0LWVycm9yIHdpbmRvdy5tdGRzQXBwVG9nZ2xlIGNvbWVzIGZyb20gYXBwLXRvZ2dsZS5qc1xuXHR1c2VUcmFuc2l0aW9uKCgpID0+IHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQ/Lihmb3JjZSkpO1xuXG5mdW5jdGlvbiBoYW5kbGVUb2dnbGVDbGljayh7IHRhcmdldDogZWwsIGRlZmF1bHRQcmV2ZW50ZWQ6IHN0b3AgfTogRXZlbnQpIHtcblx0aWYgKHN0b3AgfHwgIShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSB8fCAhZWwubWF0Y2hlcyhDU1NfVE9HR0xFKSlcblx0XHRyZXR1cm47XG5cdGlmIChnZXRDb21wdXRlZFN0eWxlKGVsKS5wb3NpdGlvbiA9PT0gXCJzdGlja3lcIikgcmV0dXJuIHRvZ2dsZUFwcEV4cGFuZGVkKCk7XG5cdHVzZVRyYW5zaXRpb24oKCkgPT4ge1xuXHRcdGNvbnN0IHNpZGViYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaWFsb2dFbGVtZW50PihDU1NfU0lERUJBUik7XG5cdFx0c2lkZWJhcj8uc2V0QXR0cmlidXRlKFwiZGF0YS1jbG9zZWRieVwiLCBcImFueVwiKTsgLy8gQWxsb3cgY2xvc2luZyBieSBjbGlja2luZyBvdXRzaWRlXG5cdFx0c2lkZWJhcj8uc2hvd01vZGFsKCk7XG5cdH0pO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVSZXNpemUoKSB7XG5cdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpYWxvZ0VsZW1lbnQ+KENTU19TSURFQkFSKT8uY2xvc2UoKTtcbn1cblxuLy8gU2Nyb2xsIHN0YXRlXG5sZXQgTUlOX1kgPSAwOyAvLyBPZmZzZXQgdG8gYXZvaWQgc2Nyb2xsIGp1bXAgd2hlbiBzdGlja3kgaXMgc2V0IHRvIHJlbGF0aXZlXG5sZXQgU0NST0xMX1VQOiBib29sZWFuO1xubGV0IFNUSUNLID0gMDsgLy8gLTEgPSBzdGljayB0b3AsIDAgPSByZWxhdGl2ZSwgMSA9IHN0aWNrIGJvdHRvbVxubGV0IFNUSUNLX0VMOiBIVE1MRWxlbWVudDtcbmxldCBTVElDS19IID0gMDtcbmxldCBTVElDS19ZID0gMDtcbmxldCBTVFVDSyA9IGZhbHNlOyAvLyBVc2VkIHRvIGZpZ3VyZSBpZiBuYXYgaXMgbGFyZ2VyIHRoYW4gdmlld3BvcnRcbmxldCBXSU5fSCA9IDA7XG5sZXQgV0lOX1kgPSAwO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihbc3RpY2t5XTogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0U1RJQ0tfRUwgPSBzdGlja3k7XG5cdGhhbmRsZVNjcm9sbCgpOyAvLyBSdW4gb24gY29ubmVjdFxufVxuXG5mdW5jdGlvbiBoYW5kbGVTY3JvbGwoKSB7XG5cdGlmICghU1RJQ0tfRUw/LmlzQ29ubmVjdGVkKSByZXR1cm47XG5cdGNvbnN0IE5FWFRfWSA9IHdpbmRvdy5zY3JvbGxZO1xuXHRjb25zdCBORVhUX1VQID0gTkVYVF9ZIDwgV0lOX1k7XG5cdFdJTl9ZID0gTkVYVF9ZO1xuXG5cdC8vIE9ubHkgY2FsY3VsYXRlIGlmIHNjcm9sbCBkaXJlY3Rpb24gaGFzIGNoYW5nZWRcblx0aWYgKE5FWFRfVVAgIT09IFNDUk9MTF9VUCkge1xuXHRcdE1JTl9ZID0gKFNUSUNLX0VMLnBhcmVudEVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCB8fCAwKSArIFdJTl9ZO1xuXHRcdFNDUk9MTF9VUCA9IE5FWFRfVVA7XG5cdFx0U1RJQ0tfSCA9IFNUSUNLX0VMLm9mZnNldEhlaWdodDtcblx0XHRTVElDS19ZID0gU1RJQ0tfRUwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgV0lOX1k7XG5cdFx0U1RVQ0sgPSBTVElDS19FTC5vZmZzZXRIZWlnaHQgPD0gd2luZG93LmlubmVySGVpZ2h0O1xuXHRcdFdJTl9IID0gd2luZG93LmlubmVySGVpZ2h0O1xuXHR9XG5cblx0aWYgKFNUSUNLID09PSAtMSAmJiBTVFVDSykgcmV0dXJuOyAvLyBBbGx3YXlzIHN0aWNreSB3aGVuIHNpZGViYXIgaXMgc21hbGxlciB0aGFuIHZpZXdwb3J0XG5cdGlmIChTVElDSyAhPT0gLTEgJiYgKFNUVUNLIHx8IChTQ1JPTExfVVAgJiYgV0lOX1kgPD0gU1RJQ0tfWSkpKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInN0aWNreVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIFwiMHB4XCIpO1xuXHRcdFNUSUNLID0gLTE7IC8vIE5vdCBzdGlja2luZyB0byB0b3AgYW5kIHNpZGViYXIgaXMgc21hbGxlciB0aGFuIHZpZXdwb3J0IG9yIHNjcm9sbGluZyB1cFxuXHR9IGVsc2UgaWYgKFNUSUNLID09PSAtMSAmJiAhU0NST0xMX1VQKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInJlbGF0aXZlXCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7TWF0aC5tYXgoMCwgV0lOX1kgLSBNSU5fWSl9cHhgKTtcblx0XHRTVElDSyA9IDA7IC8vIFN0aWNraW5nIHRvIHRvcCBhbmQgc2Nyb2xsaW5nIGRvd25cblx0fSBlbHNlIGlmIChTVElDSyAhPT0gMSAmJiAhU0NST0xMX1VQICYmIFdJTl9ZICsgV0lOX0ggPj0gU1RJQ0tfWSArIFNUSUNLX0gpIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwic3RpY2t5XCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7V0lOX0ggLSBTVElDS19IfXB4YCk7XG5cdFx0U1RJQ0sgPSAxOyAvLyBOb3Qgc3RpY2tpbmcgdG8gYm90dG9tIGFuZCBzY3JvbGxpbmcgZG93blxuXHR9IGVsc2UgaWYgKFNUSUNLID09PSAxICYmIFNDUk9MTF9VUCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJyZWxhdGl2ZVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke1NUSUNLX1kgLSBNSU5fWX1weGApO1xuXHRcdFNUSUNLID0gMDsgLy8gU3RpY2tpbmcgdG8gYm90dG9tIGFuZCBzY3JvbGxpbmcgdXBcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfU1RJQ0tZLCBoYW5kbGVNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZVRvZ2dsZUNsaWNrLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJyZXNpemVcIiwgZGVib3VuY2UoaGFuZGxlUmVzaXplLCAxMDApLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJzY3JvbGxcIiwgaGFuZGxlU2Nyb2xsLCBRVUlDS19FVkVOVCk7XG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfQlJFQURDUlVNQlMgPSBzdHlsZXMuYnJlYWRjcnVtYnMuc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihicmVhZGNydW1iczogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCBicmVhZGN1bWJzIG9mIGJyZWFkY3J1bWJzKVxuXHRcdGJyZWFkY3VtYnMucXVlcnlTZWxlY3RvckFsbChcImxpIGFcIikuZm9yRWFjaCgoY3J1bWIsIGluZGV4LCB7IGxlbmd0aCB9KSA9PiB7XG5cdFx0XHRhdHRyKGNydW1iLCBcImFyaWEtY3VycmVudFwiLCBpbmRleCA9PT0gbGVuZ3RoIC0gMSA/IFwicGFnZVwiIDogbnVsbCk7XG5cdFx0fSk7XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfQlJFQURDUlVNQlMsIGhhbmRsZU11dGF0aW9uKSxcbik7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0SVNfQlJPV1NFUixcblx0UVVJQ0tfRVZFTlQsXG5cdGF0dHIsXG5cdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIsXG5cdG9uLFxuXHRvbkxvYWRlZCxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19ESUFMT0cgPSBzdHlsZXMuZGlhbG9nLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IERJQUxPR1MgPSBJU19CUk9XU0VSXG5cdD8gKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXG5cdFx0XHRDU1NfRElBTE9HLFxuXHRcdCkgYXMgSFRNTENvbGxlY3Rpb25PZjxIVE1MRGlhbG9nRWxlbWVudD4pXG5cdDogW107XG5cbmNvbnN0IGhhbmRsZU1vZGFsID0gKCkgPT4ge1xuXHRmb3IgKGNvbnN0IGRpYWxvZyBvZiBESUFMT0dTKVxuXHRcdGlmIChkaWFsb2cuaXNDb25uZWN0ZWQgJiYgZGlhbG9nLnNob3dNb2RhbCAmJiBkaWFsb2cuY2xvc2UpIHtcblx0XHRcdGlmIChkaWFsb2cubWF0Y2hlcygnW29wZW5dOm5vdChbZGF0YS1tb2RhbD1cImZhbHNlXCJdKTpub3QoOm1vZGFsKScpKSB7XG5cdFx0XHRcdGF0dHIoZGlhbG9nLCBcIm9wZW5cIiwgbnVsbCk7IC8vIFVzaW5nIGF0dHJpYnV0ZSBpbnN0ZWFkIG9mIC5jbG9zZSB0byBhdm9pZCBgY2xvc2VgIGV2ZW50XG5cdFx0XHRcdGRpYWxvZy5zaG93TW9kYWwoKTtcblx0XHRcdH0gZWxzZSBpZiAoZGlhbG9nLm1hdGNoZXMoXCI6bW9kYWw6bm90KFtvcGVuXSlcIikpIHtcblx0XHRcdFx0YXR0cihkaWFsb2csIFwib3BlblwiLCBcIlwiKTsgLy8gU2V0IGFzIG9wZW5cblx0XHRcdFx0ZGlhbG9nLmNsb3NlKCk7IC8vIFNvIHdlIGNvcnJlY2x0eSBjYW4gY2FsbCAuY2xvc2UsIHJlbW92aW5nIDxkaWFsb2c+IGZyb20gI3RvcC1sYXllclxuXHRcdFx0fVxuXHRcdH1cbn07XG5cbmNvbnN0IGhhbmRsZUNsaWNrID0gKHsgY2xpZW50WDogeCwgY2xpZW50WTogeSwgdGFyZ2V0OiBlbCB9OiBNb3VzZUV2ZW50KSA9PiB7XG5cdGlmIChlbCBpbnN0YW5jZW9mIEhUTUxEaWFsb2dFbGVtZW50ICYmIGF0dHIoZWwsIFwiZGF0YS1jbG9zZWRieVwiKSA9PT0gXCJhbnlcIikge1xuXHRcdGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSBlbC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0XHRjb25zdCBpc0luc2lkZSA9IHRvcCA8PSB5ICYmIHkgPD0gYm90dG9tICYmIGxlZnQgPD0geCAmJiB4IDw9IHJpZ2h0O1xuXG5cdFx0aWYgKCFpc0luc2lkZSkgZWwuY2xvc2UoKTtcblx0fSBlbHNlIGlmIChcblx0XHRlbCBpbnN0YW5jZW9mIEVsZW1lbnQgJiZcblx0XHRlbC5jbG9zZXN0KCdidXR0b25bZGF0YS1jb21tYW5kPVwiY2xvc2VcIl0nKVxuXHQpIHtcblx0XHRlbD8uY2xvc2VzdChcImRpYWxvZ1wiKT8uY2xvc2UoKTtcblx0fVxufTtcblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVDbGljayBhcyBFdmVudExpc3RlbmVyLCBRVUlDS19FVkVOVCk7XG5cdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoaGFuZGxlTW9kYWwpLm9ic2VydmUoXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRcdHtcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogW1wib3BlblwiXSxcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdH0sXG5cdCk7XG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBRVUlDS19FVkVOVCwgYXR0ciwgb24sIG9uTG9hZGVkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmZ1bmN0aW9uIGhhbmRsZUluamVjdChldmVudDogRXZlbnQgJiB7IGFuaW1hdGlvbk5hbWU/OiBzdHJpbmcgfSkge1xuXHRpZiAoZXZlbnQuYW5pbWF0aW9uTmFtZSAhPT0gc3R5bGVzLl9lcnJvcnN1bW1hcnkpIHJldHVybjtcblx0Y29uc3QgZmlyc3QgPSAoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpPy5maXJzdEVsZW1lbnRDaGlsZDtcblxuXHRpZiAoZmlyc3QgaW5zdGFuY2VvZiBIVE1MSGVhZGluZ0VsZW1lbnQpIHtcblx0XHRhdHRyKGZpcnN0LCBcInRhYmluZGV4XCIsIFwiLTFcIik7XG5cdFx0Zmlyc3QuZm9jdXMoKTsgLy8gQXV0b2ZvY3VzIGZpcnN0IGhlYWRpbmdcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiBvbihkb2N1bWVudCwgXCJhbmltYXRpb25lbmRcIiwgaGFuZGxlSW5qZWN0LCBRVUlDS19FVkVOVCkpO1xuIiwidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuXG4vLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgRk9DVVNfT1VUTElORSA9IFwib3V0bGluZTogMXB4IGRvdHRlZDsgb3V0bGluZTogNXB4IGF1dG8gSGlnaGxpZ2h0OyBvdXRsaW5lOiA1cHggYXV0byAtd2Via2l0LWZvY3VzLXJpbmctY29sb3JcIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgLy8gVW5uYW1lZCBzbG90IGRvZXMgYXV0b21hdGljYWxseSByZW5kZXIgYWxsIHRvcCBlbGVtZW50IG5vZGVzXG4gIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBjc3MpXG4pO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIExJVkU7XG52YXIgTElWRV9TUl9GSVggPSAwO1xudmFyIHNwZWFrID0gKHRleHQpID0+IHtcbiAgaWYgKCFMSVZFKSB7XG4gICAgTElWRSA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgTElWRS5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjpmaXhlZDtvdmVyZmxvdzpoaWRkZW47d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcFwiO1xuICAgIGF0dHIoTElWRSwgXCJhcmlhLWxpdmVcIiwgXCJhc3NlcnRpdmVcIik7XG4gIH1cbiAgaWYgKCFMSVZFLmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChMSVZFKTtcbiAgaWYgKHRleHQpIExJVkUudGV4dENvbnRlbnQgPSBgJHt0ZXh0fSR7TElWRV9TUl9GSVgrKyAlIDIgPyBcIlxceEEwXCIgOiBcIlwifWA7XG59O1xudmFyIHNldFZhbHVlID0gKGlucHV0LCBkYXRhLCB0eXBlID0gXCJcIikgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlLCBkYXRhLCBpbnB1dFR5cGU6IHR5cGUgfTtcbiAgY29uc3QgcHJvdG8gPSBIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImJlZm9yZWlucHV0XCIsIGV2ZW50KSk7XG4gIChfYiA9IChfYTIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBcInZhbHVlXCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwoaW5wdXQsIGRhdGEpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiaW5wdXRcIiwgZXZlbnQpKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJjaGFuZ2VcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbn07XG5cbi8vIHUtb3B0aW9uLnRzXG52YXIgRElTQUJMRUQgPSBcImRpc2FibGVkXCI7XG52YXIgU0VMRUNURUQgPSBcInNlbGVjdGVkXCI7XG52YXIgVUhUTUxPcHRpb25FbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW0RJU0FCTEVELCBTRUxFQ1RFRF07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKCFJU19JT1MpIHRoaXMudGFiSW5kZXggPSAtMTtcbiAgICBpZiAoIXRoaXMuaGFzQXR0cmlidXRlKFwicm9sZVwiKSkgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJvcHRpb25cIik7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtZGlzYWJsZWRcIiwgYCR7dGhpcy5kaXNhYmxlZH1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1zZWxlY3RlZFwiLCBgJHt0aGlzLnNlbGVjdGVkfWApO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB3aGV0aGVyIHRoZSBvcHRpb24gaW4gdGhlIGxpc3QgYm94IGlzIHRoZSBkZWZhdWx0IGl0ZW0uICovXG4gIGdldCBkZWZhdWx0U2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIHRoaXNbU0VMRUNURURdO1xuICB9XG4gIHNldCBkZWZhdWx0U2VsZWN0ZWQodmFsdWUpIHtcbiAgICB0aGlzW1NFTEVDVEVEXSA9IHZhbHVlO1xuICB9XG4gIGdldCBkaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBESVNBQkxFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IGRpc2FibGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBESVNBQkxFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyBhIHJlZmVyZW5jZSB0byB0aGUgZm9ybSB0aGF0IHRoZSBvYmplY3QgaXMgZW1iZWRkZWQgaW4uICovXG4gIGdldCBmb3JtKCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJmb3JtXCIpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiBvcHRpb24gaW4gYSBsaXN0IGJveC4gKi9cbiAgZ2V0IGluZGV4KCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIFtcbiAgICAgIC4uLigoX2EyID0gdGhpcy5wYXJlbnRFbGVtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLm9wdGlvbnMpIHx8IFt0aGlzXVxuICAgIF0uaW5kZXhPZih0aGlzKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgYSB2YWx1ZSB0aGF0IHlvdSBjYW4gdXNlIHRvIGltcGxlbWVudCB5b3VyIG93biBsYWJlbCBmdW5jdGlvbmFsaXR5IGZvciB0aGUgb2JqZWN0LiAqL1xuICBnZXQgbGFiZWwoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKF9hMiA9IGF0dHIodGhpcywgXCJsYWJlbFwiKSkgIT0gbnVsbCA/IF9hMiA6IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgbGFiZWwodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwibGFiZWxcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBTRUxFQ1RFRCkgIT09IG51bGw7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBTRUxFQ1RFRCwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSB0ZXh0IHN0cmluZyBzcGVjaWZpZWQgYnkgdGhlIG9wdGlvbiB0YWcuICovXG4gIGdldCB0ZXh0KCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gdGhpcy50ZXh0Q29udGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIH1cbiAgc2V0IHRleHQodGV4dCkge1xuICAgIHRoaXMudGV4dENvbnRlbnQgPSB0ZXh0O1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdmFsdWUgd2hpY2ggaXMgcmV0dXJuZWQgdG8gdGhlIHNlcnZlciB3aGVuIHRoZSBmb3JtIGNvbnRyb2wgaXMgc3VibWl0dGVkLiAqL1xuICBnZXQgdmFsdWUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKF9hMiA9IGF0dHIodGhpcywgXCJ2YWx1ZVwiKSkgIT0gbnVsbCA/IF9hMiA6IHRoaXMudGV4dDtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1vcHRpb25cIiwgVUhUTUxPcHRpb25FbGVtZW50KTtcblxuLy8gdS1kYXRhbGlzdC50c1xudmFyIExJVkVfVElNRVI7XG52YXIgSU5QVVRfREVCT1VOQ0UgPSAwO1xudmFyIElTX1BSRVNTID0gZmFsc2U7XG52YXIgSVNfTU9CSUxFID0gSVNfSU9TIHx8IElTX0FORFJPSUQ7XG52YXIgRVZFTlRTID0gXCJjbGljayxmb2N1c291dCxpbnB1dCxrZXlkb3duLG1vdXNlZG93bixtb3VzZXVwXCI7XG52YXIgRVZFTlRTX0lOUFVUID0gXCJmb2N1cyxmb2N1c2luLGJsdXIsZm9jdXNvdXRcIjtcbnZhciBURVhUUyA9IHtcbiAgc2luZ3VsYXI6IFwiJWQgaGl0XCIsXG4gIHBsdXJhbDogXCIlZCBoaXRzXCJcbn07XG52YXIgVUhUTUxEYXRhTGlzdEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5fdGV4dHMgPSBfX3NwcmVhZFZhbHVlcyh7fSwgVEVYVFMpO1xuICAgIHRoaXMuX3ZhbHVlID0gXCJcIjtcbiAgICBhdHRhY2hTdHlsZShcbiAgICAgIHRoaXMsXG4gICAgICBgJHtESVNQTEFZX0JMT0NLfVxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uKSB7IGRpc3BsYXk6IGJsb2NrOyBjdXJzb3I6IHBvaW50ZXIgfVxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uOmZvY3VzKSB7ICR7Rk9DVVNfT1VUTElORX0gfVxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uW2FyaWEtaGlkZGVuPVwidHJ1ZVwiXSksXG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb25bZGlzYWJsZWRdKSxcblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbltoaWRkZW5dKSB7IGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudCB9YFxuICAgICk7XG4gIH1cbiAgLy8gVXNlZCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IGFubm91bmNlbWVudHNcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImlkXCIsIC4uLk9iamVjdC5rZXlzKFRFWFRTKS5tYXAoKGtleSkgPT4gYGRhdGEtc3ItJHtrZXl9YCldO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuaGlkZGVuID0gdHJ1ZTtcbiAgICB0aGlzLl9yb290ID0gZ2V0Um9vdCh0aGlzKTtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcImxpc3Rib3hcIik7XG4gICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIFwiLTFcIik7XG4gICAgb24odGhpcy5fcm9vdCwgXCJmb2N1c2luXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMuX3Jvb3QsIFwiZm9jdXNcIiwgdGhpcywgdHJ1ZSk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7XG4gICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFtcImRpc2FibGVkXCIsIFwiaGlkZGVuXCIsIFwibGFiZWxcIiwgXCJ2YWx1ZVwiXSxcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICBjaGlsZExpc3Q6IHRydWUsXG4gICAgICBzdWJ0cmVlOiB0cnVlXG4gICAgfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpKTtcbiAgfVxuICBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBvZmYodGhpcy5fcm9vdCB8fCB0aGlzLCBcImZvY3VzXCIsIHRoaXMsIHRydWUpO1xuICAgIG9mZih0aGlzLl9yb290IHx8IHRoaXMsIFwiZm9jdXNpblwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIGZhbHNlKTtcbiAgICBkaXNjb25uZWN0SW5wdXQodGhpcyk7XG4gICAgdGhpcy5fcm9vdCA9IHZvaWQgMDtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2socHJvcCwgX3ByZXYsIG5leHQpIHtcbiAgICBjb25zdCB0ZXh0ID0gcHJvcCA9PSBudWxsID8gdm9pZCAwIDogcHJvcC5zcGxpdChcImRhdGEtc3ItXCIpWzFdO1xuICAgIGNvbnN0IGNzcyA9IGBpbnB1dFtsaXN0PVwiJHt0aGlzLmlkfVwiXWA7XG4gICAgaWYgKFRFWFRTW3RleHRdKSB0aGlzLl90ZXh0c1t0ZXh0XSA9IG5leHQgfHwgVEVYVFNbdGV4dF07XG4gICAgZWxzZSBpZiAodGhpcy5fcm9vdClcbiAgICAgIGZvciAoY29uc3QgaW5wdXQgb2YgdGhpcy5fcm9vdC5xdWVyeVNlbGVjdG9yQWxsKGNzcykpXG4gICAgICAgIHNldHVwSW5wdXQodGhpcywgaW5wdXQpO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgeyB0YXJnZXQsIHR5cGUgfSA9IGV2ZW50O1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKHR5cGUgPT09IFwiY2xpY2tcIikgb25DbGljayh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiZm9jdXNcIiB8fCB0eXBlID09PSBcImZvY3VzaW5cIikgb25Gb2N1cyh0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwiYmx1clwiIHx8IHR5cGUgPT09IFwiZm9jdXNvdXRcIikgb25CbHVyKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIpIG9uS2V5RG93bih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwibW91c2Vkb3duXCIpIElTX1BSRVNTID0gdGhpcy5jb250YWlucyh0YXJnZXQpO1xuICAgIGlmICh0eXBlID09PSBcIm1vdXNldXBcIikgSVNfUFJFU1MgPSBmYWxzZTtcbiAgICBpZiAodHlwZSA9PT0gXCJtdXRhdGlvblwiIHx8IHR5cGUgPT09IFwiaW5wdXRcIikge1xuICAgICAgY2xlYXJUaW1lb3V0KElOUFVUX0RFQk9VTkNFKTtcbiAgICAgIElOUFVUX0RFQk9VTkNFID0gc2V0VGltZW91dChvbklucHV0LCAwLCB0aGlzLCBldmVudCk7XG4gICAgfVxuICB9XG4gIGdldCBvcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwidS1vcHRpb25cIik7XG4gIH1cbn07XG52YXIgc2V0RXhwYW5kZWQgPSAoc2VsZiwgb3BlbikgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoc2VsZi5oaWRkZW4gIT09IG9wZW4pIHJldHVybjtcbiAgc2VsZi5oaWRkZW4gPSAhb3BlbjtcbiAgaWYgKHNlbGYuX2lucHV0KSBzZXR1cElucHV0KHNlbGYsIHNlbGYuX2lucHV0LCBvcGVuKTtcbiAgaWYgKHNlbGYucG9wb3ZlciAmJiAoKF9hMiA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmlzQ29ubmVjdGVkKSkge1xuICAgIGF0dHIoc2VsZi5faW5wdXQsIFwicG9wb3ZlcnRhcmdldFwiLCB1c2VJZChzZWxmKSk7XG4gICAgYXR0cihzZWxmLCBcInBvcG92ZXJcIiwgXCJtYW51YWxcIik7XG4gICAgc2VsZi50b2dnbGVQb3BvdmVyKG9wZW4pO1xuICB9XG4gIGlmIChvcGVuKSBvbklucHV0KHNlbGYpO1xufTtcbnZhciBkaXNjb25uZWN0SW5wdXQgPSAoc2VsZikgPT4ge1xuICBpZiAoIXNlbGYuX2lucHV0KSByZXR1cm47XG4gIG9mZihzZWxmLl9pbnB1dCB8fCBzZWxmLCBFVkVOVFNfSU5QVVQsIHNlbGYpO1xuICBvZmYoc2VsZi5fcm9vdCB8fCBzZWxmLCBFVkVOVFMsIHNlbGYpO1xuICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gIHNlbGYuX2lucHV0ID0gdm9pZCAwO1xufTtcbnZhciBzZXR1cElucHV0ID0gKHNlbGYsIGlucHV0LCBvcGVuID0gZmFsc2UpID0+IHtcbiAgb24oaW5wdXQsIEVWRU5UU19JTlBVVCwgc2VsZiwgdHJ1ZSk7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1hdXRvY29tcGxldGVcIiwgXCJsaXN0XCIpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtY29udHJvbHNcIiwgdXNlSWQoc2VsZikpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7SVNfTU9CSUxFID8gb3BlbiA6IFwidHJ1ZVwifWApO1xuICBhdHRyKGlucHV0LCBcImF1dG9jb21wbGV0ZVwiLCBcIm9mZlwiKTtcbiAgYXR0cihpbnB1dCwgXCJyb2xlXCIsIFwiY29tYm9ib3hcIik7XG59O1xudmFyIG9uRm9jdXMgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgaXNJbnB1dCA9IGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxJbnB1dEVsZW1lbnQ7XG4gIGlmIChpc0lucHV0ICYmIGV2ZW50LmlzVHJ1c3RlZCkgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gIGlmIChzZWxmLl9pbnB1dCAhPT0gZXZlbnQudGFyZ2V0ICYmIGlzSW5wdXQgJiYgZXZlbnQudGFyZ2V0Lmxpc3QgPT09IHNlbGYpIHtcbiAgICBpZiAoc2VsZi5faW5wdXQpIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgICBzZWxmLl9pbnB1dCA9IGV2ZW50LnRhcmdldDtcbiAgICBzZWxmLl9pbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNcIikpO1xuICAgIHNlbGYuX2lucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJmb2N1c2luXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG4gICAgYXR0cihzZWxmLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKChfYTIgPSBzZWxmLl9pbnB1dC5sYWJlbHMpID09IG51bGwgPyB2b2lkIDAgOiBfYTJbMF0pKTtcbiAgICBvbihzZWxmLl9yb290IHx8IHNlbGYsIEVWRU5UUywgc2VsZik7XG4gICAgc2V0RXhwYW5kZWQoc2VsZiwgdHJ1ZSk7XG4gICAgc3BlYWsoKTtcbiAgfVxufTtcbnZhciBvbkJsdXIgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgaWYgKCFJU19BTkRST0lEICYmICFJU19QUkVTUyAmJiBzZWxmLl9pbnB1dCkgc2V0VGltZW91dChvbkJsdXJyZWQsIDAsIHNlbGYpO1xuICBpZiAoZXZlbnQudGFyZ2V0ID09PSBzZWxmLl9pbnB1dCAmJiBldmVudC5pc1RydXN0ZWQpXG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG59O1xudmFyIG9uQmx1cnJlZCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSAoKF9hMiA9IHNlbGYuX3Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuYWN0aXZlRWxlbWVudCkgfHwgbnVsbDtcbiAgY29uc3QgaW5wdXQgPSBzZWxmLl9pbnB1dDtcbiAgaWYgKGlucHV0ICYmIGlucHV0ICE9PSByZWxhdGVkVGFyZ2V0ICYmICFzZWxmLmNvbnRhaW5zKHJlbGF0ZWRUYXJnZXQpKSB7XG4gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImJsdXJcIiwgeyByZWxhdGVkVGFyZ2V0IH0pKTtcbiAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KFxuICAgICAgbmV3IEZvY3VzRXZlbnQoXCJmb2N1c291dFwiLCB7IGJ1YmJsZXM6IHRydWUsIHJlbGF0ZWRUYXJnZXQgfSlcbiAgICApO1xuICAgIGRpc2Nvbm5lY3RJbnB1dChzZWxmKTtcbiAgfVxufTtcbnZhciBvbkNsaWNrID0gKHNlbGYsIHsgdGFyZ2V0IH0pID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9pbnB1dCB8fCBzZWxmLl9pbnB1dCA9PT0gdGFyZ2V0KSByZXR1cm4gc2V0RXhwYW5kZWQoc2VsZiwgdHJ1ZSk7XG4gIGZvciAoY29uc3Qgb3B0IG9mIHNlbGYub3B0aW9ucylcbiAgICBpZiAob3B0LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgIGlmIChhdHRyKHNlbGYsIFwiYXJpYS1tdWx0aXNlbGVjdGFibGVcIikgIT09IFwidHJ1ZVwiKSB7XG4gICAgICAgIChfYTIgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xuICAgICAgICBzZXRFeHBhbmRlZChzZWxmLCBmYWxzZSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc2V0VmFsdWUoc2VsZi5faW5wdXQsIG9wdC52YWx1ZSk7XG4gICAgfVxuICBpZiAoSVNfQU5EUk9JRCkgb25CbHVycmVkKHNlbGYpO1xufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZSkgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoZS5hbHRLZXkgfHwgZS5jdHJsS2V5IHx8IGUubWV0YUtleSB8fCBlLnNoaWZ0S2V5IHx8IGUua2V5ID09PSBcIlRhYlwiKVxuICAgIHJldHVybjtcbiAgc2V0RXhwYW5kZWQoc2VsZiwgZS5rZXkgIT09IFwiRXNjYXBlXCIpO1xuICBjb25zdCB7IGtleSwgdGFyZ2V0IH0gPSBlO1xuICBjb25zdCBvcHRpb25zID0gWy4uLnNlbGYub3B0aW9uc10uZmlsdGVyKFxuICAgIChlbCkgPT4gYXR0cihlbCwgXCJhcmlhLWhpZGRlblwiKSAhPT0gXCJ0cnVlXCIgJiYgZWwub2Zmc2V0SGVpZ2h0XG4gICk7XG4gIGNvbnN0IHByZXYgPSBvcHRpb25zLmluZGV4T2YodGFyZ2V0KTtcbiAgbGV0IG5leHQgPSAtMTtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIikgbmV4dCA9IChwcmV2ICsgMSkgJSBvcHRpb25zLmxlbmd0aDtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd1VwXCIpIG5leHQgPSAofnByZXYgPyBwcmV2IDogb3B0aW9ucy5sZW5ndGgpIC0gMTtcbiAgaWYgKH5wcmV2KSB7XG4gICAgaWYgKGtleSA9PT0gXCJIb21lXCIgfHwga2V5ID09PSBcIlBhZ2VVcFwiKSBuZXh0ID0gMDtcbiAgICBpZiAoa2V5ID09PSBcIkVuZFwiIHx8IGtleSA9PT0gXCJQYWdlRG93blwiKSBuZXh0ID0gb3B0aW9ucy5sZW5ndGggLSAxO1xuICAgIGlmIChrZXkgPT09IFwiRW50ZXJcIikge1xuICAgICAgb3B0aW9uc1twcmV2XS5jbGljaygpO1xuICAgICAgcmV0dXJuIGUucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG4gIH1cbiAgaWYgKG9wdGlvbnNbbmV4dF0pIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIG9wdGlvbi50YWJJbmRleCA9IC0xO1xuICBpZiAob3B0aW9uc1tuZXh0XSkgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAoX2EyID0gb3B0aW9uc1tuZXh0XSB8fCBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xufTtcbnZhciBvbklucHV0ID0gKHNlbGYsIGUpID0+IHtcbiAgY29uc3QgeyBfdGV4dHMsIF9yb290LCBfaW5wdXQsIG9wdGlvbnMgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gKF9pbnB1dCA9PSBudWxsID8gdm9pZCAwIDogX2lucHV0LnZhbHVlLnRvTG93ZXJDYXNlKCkudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBmaWx0ZXIgPSAhc2VsZi5oYXNBdHRyaWJ1dGUoXCJkYXRhLW5vZmlsdGVyXCIpO1xuICBjb25zdCBoaWRkZW4gPSBbXTtcbiAgY29uc3QgdmlzaWJsZSA9IFtdO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKSB7XG4gICAgY29uc3QgaGlkZSA9IG9wdC5kaXNhYmxlZCB8fCBvcHQuaGlkZGVuIHx8IGZpbHRlciAmJiAhb3B0LmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUpIHx8ICFvcHQub2Zmc2V0SGVpZ2h0O1xuICAgIChoaWRlID8gaGlkZGVuIDogdmlzaWJsZSkucHVzaChvcHQpO1xuICB9XG4gIGZvciAoY29uc3Qgb3B0IG9mIGhpZGRlbikgYXR0cihvcHQsIFwiYXJpYS1oaWRkZW5cIiwgXCJ0cnVlXCIpO1xuICBmb3IgKGNvbnN0IG9wdCBvZiB2aXNpYmxlKSBhdHRyKG9wdCwgXCJhcmlhLWhpZGRlblwiLCBcImZhbHNlXCIpO1xuICBjb25zdCB0b3RhbCA9IHZpc2libGUubGVuZ3RoO1xuICBjbGVhclRpbWVvdXQoTElWRV9USU1FUik7XG4gIGlmICgoZSA9PSBudWxsID8gdm9pZCAwIDogZS50eXBlKSA9PT0gXCJpbnB1dFwiICYmIHZhbHVlICE9PSBzZWxmLl92YWx1ZSlcbiAgICBMSVZFX1RJTUVSID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB0ZXh0ID0gYCR7IXRvdGFsICYmIHNlbGYuaW5uZXJUZXh0LnRyaW0oKSB8fCBgJHtfdGV4dHNbdG90YWwgPT09IDEgPyBcInNpbmd1bGFyXCIgOiBcInBsdXJhbFwiXX1gLnJlcGxhY2UoXCIlZFwiLCBgJHt0b3RhbH1gKX1gO1xuICAgICAgaWYgKCFzZWxmLmhpZGRlbiAmJiAoX3Jvb3QgPT0gbnVsbCA/IHZvaWQgMCA6IF9yb290LmFjdGl2ZUVsZW1lbnQpID09PSBfaW5wdXQpIHNwZWFrKHRleHQpO1xuICAgICAgc2VsZi5fdmFsdWUgPSB2YWx1ZTtcbiAgICB9LCAxZTMpO1xuICBpZiAoSVNfSU9TKVxuICAgIHZpc2libGUuZm9yRWFjaCgob3B0LCBpZHgpID0+IGF0dHIob3B0LCBcInRpdGxlXCIsIGAke2lkeCArIDF9LyR7dG90YWx9YCkpO1xufTtcbmlmIChJU19CUk9XU0VSKVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGUsIFwibGlzdFwiLCB7XG4gICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgZ2V0KCkge1xuICAgICAgcmV0dXJuIGdldFJvb3QodGhpcykuZ2V0RWxlbWVudEJ5SWQoYXR0cih0aGlzLCBcImxpc3RcIikgfHwgXCJcIik7XG4gICAgfVxuICB9KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtZGF0YWxpc3RcIiwgVUhUTUxEYXRhTGlzdEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERhdGFMaXN0RWxlbWVudCB9O1xuIiwiaW1wb3J0IHsgVUhUTUxDb21ib2JveEVsZW1lbnQgfSBmcm9tIFwiQHUtZWxlbWVudHMvdS1jb21ib2JveFwiO1xuaW1wb3J0IHsgVUhUTUxEYXRhTGlzdEVsZW1lbnQgfSBmcm9tIFwiQHUtZWxlbWVudHMvdS1kYXRhbGlzdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdFFVSUNLX0VWRU5ULFxuXHRhbmNob3JQb3NpdGlvbixcblx0YXR0cixcblx0aXNJbnB1dExpa2UsXG5cdG9uLFxuXHRvbkxvYWRlZCxcblx0b25NdXRhdGlvbixcblx0dXNlSWQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRklFTEQgPSBzdHlsZXMuZmllbGQuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1ZBTElEQVRJT05TID0gc3R5bGVzLnZhbGlkYXRpb24uc3BsaXQoXCIgXCIpO1xuY29uc3QgQ1NTX1ZBTElEQVRJT04gPSBDU1NfVkFMSURBVElPTlNbMF07XG5cbmNvbnN0IGdldFRleHQgPSAoc3R5bGU6IENTU1N0eWxlRGVjbGFyYXRpb24sIGtleTogc3RyaW5nKSA9PlxuXHRzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKGAtLW10ZHMtdGV4dC0ke2tleX1gKT8uc2xpY2UoMSwgLTEpIHx8IFwiXCI7IC8vIHNsaWNlIHRvIHRyaW0gcXVvdGVzXG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKGZpZWxkczogSFRNTENvbGxlY3Rpb25PZjxFbGVtZW50Pikge1xuXHRmb3IgKGNvbnN0IGZpZWxkIG9mIGZpZWxkcylcblx0XHRpZiAoZmllbGQuaXNDb25uZWN0ZWQpIHtcblx0XHRcdGNvbnN0IGxhYmVsczogSFRNTExhYmVsRWxlbWVudFtdID0gW107XG5cdFx0XHRjb25zdCBkZXNjczogRWxlbWVudFtdID0gW107XG5cdFx0XHRsZXQgY29tYm9ib3g6IFVIVE1MQ29tYm9ib3hFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblx0XHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRcdGZvciAoY29uc3QgZWwgb2YgZmllbGQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpKSB7XG5cdFx0XHRcdGlmIChlbCBpbnN0YW5jZW9mIEhUTUxMYWJlbEVsZW1lbnQpIGxhYmVscy5wdXNoKGVsKTtcblx0XHRcdFx0ZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBVSFRNTENvbWJvYm94RWxlbWVudCkgY29tYm9ib3ggPSBlbDtcblx0XHRcdFx0ZWxzZSBpZiAoaXNJbnB1dExpa2UoZWwpKSBpbnB1dCA9IGVsO1xuXHRcdFx0XHRlbHNlIGlmIChlbC5oYXNBdHRyaWJ1dGUoXCJkYXRhLWRlc2NyaXB0aW9uXCIpKSBkZXNjcy5wdXNoKGVsKTtcblx0XHRcdFx0ZWxzZSBpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdHZhbGlkID1cblx0XHRcdFx0XHRcdGF0dHIoZWwsIFwiZGF0YS1jb2xvclwiKSA9PT0gXCJzdWNjZXNzXCIgfHxcblx0XHRcdFx0XHRcdCFlbC5jbGllbnRXaWR0aCB8fFxuXHRcdFx0XHRcdFx0IWVsLmNsaWVudEhlaWdodDsgLy8gT25seSBzZXQgaW52YWxpZCBpZiBWYWxpZGF0aW9uIGlzIHZpc2libGVcblx0XHRcdFx0XHRkZXNjcy51bnNoaWZ0KGVsKTtcblx0XHRcdFx0fSBlbHNlIGlmIChlbCBpbnN0YW5jZW9mIEhUTUxQYXJhZ3JhcGhFbGVtZW50KVxuXHRcdFx0XHRcdGRlc2NzLnNvbWUoKGRlc2MpID0+IGRlc2MuY29udGFpbnMoZWwpKSB8fCBkZXNjcy5wdXNoKGVsKTsgLy8gT25seSBhZGQgaWYgbm90IGFscmVhZHkgaW5zaWRlIGRlc2NyaXB0aW9uXG5cdFx0XHR9XG5cblx0XHRcdGlmIChpbnB1dCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGxhYmVsIG9mIGxhYmVscykgbGFiZWwuaHRtbEZvciA9IHVzZUlkKGlucHV0KTtcblx0XHRcdFx0cmVuZGVyQ29tYm9ib3goY29tYm9ib3gpO1xuXHRcdFx0XHRyZW5kZXJDb3VudGVyKGlucHV0KTtcblx0XHRcdFx0cmVuZGVyVGV4dGFyZWFTaXplKGlucHV0KTtcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIGRlc2NzLm1hcCh1c2VJZCkuam9pbihcIiBcIikgfHwgbnVsbCk7IC8vIFJlbW92ZSBpZiBlbXB0eVxuXHRcdFx0XHRhdHRyKGlucHV0LCBcImFyaWEtaW52YWxpZFwiLCBgJHshdmFsaWR9YCk7XG5cdFx0XHR9XG5cdFx0fVxufVxuXG4vLyBpT1MgZG9lcyBub3Qgc3VwcG9ydCBmaWVsZC1zaXppbmc6IGNvbnRlbnQsIHNvIHdlIG5lZWQgdG8gbWFudWFsbHkgcmVzaXplXG5mdW5jdGlvbiByZW5kZXJUZXh0YXJlYVNpemUodGV4dGFyZWE6IEVsZW1lbnQpIHtcblx0aWYgKHRleHRhcmVhIGluc3RhbmNlb2YgSFRNTFRleHRBcmVhRWxlbWVudCkge1xuXHRcdHRleHRhcmVhLnN0eWxlLnNldFByb3BlcnR5KFwiLS1tdGRzLXRleHRhcmVhLWhlaWdodFwiLCBcImF1dG9cIik7XG5cdFx0dGV4dGFyZWEuc3R5bGUuc2V0UHJvcGVydHkoXG5cdFx0XHRcIi0tbXRkcy10ZXh0YXJlYS1oZWlnaHRcIixcblx0XHRcdGAke3RleHRhcmVhLnNjcm9sbEhlaWdodH1weGAsXG5cdFx0KTtcblx0fVxufVxuXG4vLyBTZXR1cCB0cmFuc2xhdGlvbnMgZnJvbSBDU1MgY3VzdG9tIHByb3BlcnRpZXNcbmZ1bmN0aW9uIHJlbmRlckNvbWJvYm94KGVsOiBVSFRNTENvbWJvYm94RWxlbWVudCB8IG51bGwpIHtcblx0aWYgKCFlbD8ubGlzdCB8fCBlbC5saXN0Py5oYXNBdHRyaWJ1dGUoXCJwb3BvdmVyXCIpKSByZXR1cm47XG5cdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwpO1xuXHRhdHRyKGVsLCBcImRhdGEtc3ItYWRkZWRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1hZGRlZFwiKSk7XG5cdGF0dHIoZWwsIFwiZGF0YS1zci1lbXB0eVwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWVtcHR5XCIpKTtcblx0YXR0cihlbCwgXCJkYXRhLXNyLWZvdW5kXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtZm91bmRcIikpO1xuXHRhdHRyKGVsLCBcImRhdGEtc3ItaW52YWxpZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWludmFsaWRcIikpO1xuXHRhdHRyKGVsLCBcImRhdGEtc3Itb2ZcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1vZlwiKSk7XG5cdGF0dHIoZWwsIFwiZGF0YS1zci1yZW1vdmVcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1yZW1vdmVcIikpO1xuXHRhdHRyKGVsLCBcImRhdGEtc3ItcmVtb3ZlZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LXJlbW92ZWRcIikpO1xuXHRhdHRyKGVsLmxpc3QsIFwiZGF0YS1zci1wbHVyYWxcIiwgZ2V0VGV4dChzdHlsZSwgXCJkYXRhbGlzdC1wbHVyYWxcIikpO1xuXHRhdHRyKGVsLmxpc3QsIFwiZGF0YS1zci1zaW5ndWxhclwiLCBnZXRUZXh0KHN0eWxlLCBcImRhdGFsaXN0LXNpbmd1bGFyXCIpKTtcblx0YXR0cihlbC5saXN0LCBcInBvcG92ZXJcIiwgXCJtYW51YWxcIik7XG59XG5cbmZ1bmN0aW9uIHJlbmRlckNvdW50ZXIoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0Y29uc3QgZWwgPSBpbnB1dD8ubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRjb25zdCBsaW1pdCA9IGVsICYmIGF0dHIoZWwsIFwiZGF0YS1jb3VudFwiKTtcblxuXHRpZiAoZWwgJiYgbGltaXQpIHtcblx0XHRjb25zdCByZW1haW5kZXIgPSBOdW1iZXIobGltaXQpIC0gaW5wdXQudmFsdWUubGVuZ3RoO1xuXHRcdGNvbnN0IG5leHRJbnZhbGlkID0gcmVtYWluZGVyIDwgMDtcblx0XHRjb25zdCBwcmV2SW52YWxpZCA9IGF0dHIoZWwsIFwiYXJpYS1saXZlXCIpID09PSBcInBvbGl0ZVwiO1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwgfHwgaW5wdXQpO1xuXHRcdGNvbnN0IG92ZXIgPSBnZXRUZXh0KHN0eWxlLCBcImNvdW50LW92ZXJcIik7XG5cdFx0Y29uc3QgdW5kZXIgPSBnZXRUZXh0KHN0eWxlLCBcImNvdW50LXVuZGVyXCIpO1xuXG5cdFx0aWYgKHByZXZJbnZhbGlkICE9PSBuZXh0SW52YWxpZCkge1xuXHRcdFx0YXR0cihlbCwgXCJhcmlhLWxpdmVcIiwgbmV4dEludmFsaWQgPyBcInBvbGl0ZVwiIDogXCJvZmZcIik7XG5cdFx0XHRmb3IgKGNvbnN0IGNzcyBvZiBDU1NfVkFMSURBVElPTlMpIGVsLmNsYXNzTGlzdC50b2dnbGUoY3NzLCBuZXh0SW52YWxpZCk7XG5cdFx0fVxuXHRcdGVsLnRleHRDb250ZW50ID0gKG5leHRJbnZhbGlkID8gb3ZlciA6IHVuZGVyKS5yZXBsYWNlKFxuXHRcdFx0XCIlZFwiLFxuXHRcdFx0YCR7TWF0aC5hYnMocmVtYWluZGVyKX1gLFxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlKHsgdGFyZ2V0OiBlbCwgbmV3U3RhdGUgfTogRXZlbnQgJiB7IG5ld1N0YXRlPzogc3RyaW5nIH0pIHtcblx0aWYgKGVsIGluc3RhbmNlb2YgVUhUTUxEYXRhTGlzdEVsZW1lbnQpIHtcblx0XHRjb25zdCByb290ID0gZWwuZ2V0Um9vdE5vZGUoKSBhcyBTaGFkb3dSb290IHwgbnVsbDtcblx0XHRjb25zdCBhbmNob3IgPSByb290Py5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pihcblx0XHRcdGBbcG9wb3ZlcnRhcmdldD1cIiR7ZWwuaWR9XCJdYCxcblx0XHQpO1xuXG5cdFx0aWYgKG5ld1N0YXRlID09PSBcImNsb3NlZFwiKSBhbmNob3JQb3NpdGlvbihlbCwgZmFsc2UpO1xuXHRcdGVsc2UgaWYgKGFuY2hvcikge1xuXHRcdFx0ZWwuc3R5bGUud2lkdGggPSBgJHthbmNob3IuY2xpZW50V2lkdGh9cHhgO1xuXHRcdFx0YW5jaG9yUG9zaXRpb24oZWwsIGFuY2hvciwgXCJib3R0b21cIiwgdHJ1ZSk7XG5cdFx0fVxuXHR9XG59XG4vLyBVcGRhdGUgd2hlbiB0eXBpbmdcbmZ1bmN0aW9uIGhhbmRsZUlucHV0KHsgdGFyZ2V0IH06IEV2ZW50KSB7XG5cdGlmIChpc0lucHV0TGlrZSh0YXJnZXQpKSB7XG5cdFx0cmVuZGVyQ291bnRlcih0YXJnZXQpO1xuXHRcdHJlbmRlclRleHRhcmVhU2l6ZSh0YXJnZXQpO1xuXHR9XG59XG5cbi8vIFByZXZlbnQgYnJvd3NlcnMgZnJvbSBzaG93aW5nIGRlZmF1bHQgdmFsaWRhdGlvbiBidWJibGVzXG5mdW5jdGlvbiBoYW5kbGVJbnZhbGlkKGV2ZW50OiBFdmVudCkge1xuXHRpZiAoKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKGAuJHtDU1NfRklFTER9YCkpXG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcbn1cblxuLy8gUG9zaXRpb24gY29tYm9ib3ggd2hlbiBjaGFuZ2luZyBjb250ZW50XG5mdW5jdGlvbiBoYW5kbGVCZWZvcmVDaGFuZ2UoeyB0YXJnZXQ6IGVsIH06IEV2ZW50KSB7XG5cdGNvbnN0IGxpc3QgPSBlbCBpbnN0YW5jZW9mIFVIVE1MQ29tYm9ib3hFbGVtZW50ICYmIGVsLmxpc3Q7XG5cdGlmIChsaXN0ICYmICFsaXN0Py5oaWRkZW4pXG5cdFx0c2V0VGltZW91dCgoKSA9PiBhbmNob3JQb3NpdGlvbihsaXN0LCBlbCwgMiwgdHJ1ZSksIDEwKTsgLy8gUmVwb3NpdGlvbiBsaXN0IGlmIG5vdCBoaWRkZW5cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0ZJRUxELCBoYW5kbGVNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImJlZm9yZWNoYW5nZVwiLCBoYW5kbGVCZWZvcmVDaGFuZ2UsIFFVSUNLX0VWRU5UKTtcblx0b24oZG9jdW1lbnQsIFwiaW5wdXRcIiwgaGFuZGxlSW5wdXQsIFFVSUNLX0VWRU5UKTtcblx0b24oZG9jdW1lbnQsIFwiaW52YWxpZFwiLCBoYW5kbGVJbnZhbGlkLCB0cnVlKTsgLy8gVXNlIGNhcHR1cmUgYXMgaW52YWxpZCBkb2VzIG5vZSBidWJibGVcblx0b24oZG9jdW1lbnQsIFwidG9nZ2xlXCIsIGhhbmRsZVRvZ2dsZSwgUVVJQ0tfRVZFTlQpOyAvLyBVc2UgY2FwdHVyZSBzaW5jZSB0b2dnbGUgZG9lcyBub3QgYnViYmxlXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBpc0lucHV0TGlrZSwgb25Mb2FkZWQsIG9uTXV0YXRpb24sIHVzZUlkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19GSUVMRFNFVCA9IHN0eWxlcy5maWVsZHNldC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVkFMSURBVElPTiA9IHN0eWxlcy52YWxpZGF0aW9uLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IEFSSUFfREVTQyA9IFwiYXJpYS1kZXNjcmliZWRieVwiO1xuY29uc3QgQVJJQV9JTlZBTElEID0gXCJhcmlhLWludmFsaWRcIjtcblxuLy8gVXNpbmcgcmVxdWVzdEFuaW1hdGlvbkZyYW1lIHRvIGVuc3VyZSBpdCBydW5zIGFmdGVyIGZpZWxkLW9ic2VydmVyXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihmaWVsZHNldHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4pIHtcblx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRmb3IgKGNvbnN0IGZpZWxkc2V0IG9mIGZpZWxkc2V0cylcblx0XHRcdGlmIChmaWVsZHNldC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0XHRjb25zdCBpbnB1dHM6IEhUTUxJbnB1dEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0XHRsZXQgdmFsaWRhdGlvbklkOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuXHRcdFx0XHRmb3IgKGNvbnN0IGVsIG9mIGZpZWxkc2V0LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSkge1xuXHRcdFx0XHRcdGlmIChlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1ZBTElEQVRJT04pKSB2YWxpZGF0aW9uSWQgPSB1c2VJZChlbCk7XG5cdFx0XHRcdFx0ZWxzZSBpZiAoaXNJbnB1dExpa2UoZWwpKSBpbnB1dHMucHVzaChlbCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykge1xuXHRcdFx0XHRcdGNvbnN0IGRlc2MgPSBhdHRyKGlucHV0LCBBUklBX0RFU0MpPy5yZXBsYWNlKHZhbGlkYXRpb25JZCB8fCBcIiNcIiwgXCJcIik7XG5cblx0XHRcdFx0XHRhdHRyKGlucHV0LCBBUklBX0RFU0MsIGAke3ZhbGlkYXRpb25JZCB8fCBcIlwifSAke2Rlc2MgfHwgXCJcIn1gLnRyaW0oKSk7XG5cdFx0XHRcdFx0YXR0cihpbnB1dCwgQVJJQV9JTlZBTElELCBgJHshIXZhbGlkYXRpb25JZH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRFNFVCwgaGFuZGxlTXV0YXRpb24pLFxuKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfTE9HTyA9IHN0eWxlcy5sb2dvLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oW2xvZ29dOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxFbGVtZW50Pikge1xuXHRpZiAobG9nbz8uaXNDb25uZWN0ZWQgJiYgbG9nbz8uZmlyc3RFbGVtZW50Q2hpbGQgaW5zdGFuY2VvZiBTVkdTVkdFbGVtZW50KSB7XG5cdFx0Zm9yIChjb25zdCBpY29uIG9mIGRvY3VtZW50LmhlYWQucXVlcnlTZWxlY3RvckFsbChcImxpbmtbcmVsfj0naWNvbiddXCIpKVxuXHRcdFx0aWNvbi5zZXRBdHRyaWJ1dGUoXCJyZWxcIiwgXCJkaXNhYmxlZFwiKTsgLy8gRGlzYWJsZSBwcmV2aW91cyBpY29uIChidXQgbm90IHJlbW92ZSBpcyBhcyB0aGlzIG1ha2VzIE5leHQuanMgc2FkKVxuXG5cdFx0Y29uc3Qgc3ZnID0gbG9nby5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRjb25zdCBpc0RvdCA9IGxvZ28/Lmhhc0F0dHJpYnV0ZShcImRhdGEtZW52XCIpO1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoc3ZnKTtcblx0XHRjb25zdCB0ZXh0ID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcImNvbG9yXCIpO1xuXHRcdGNvbnN0IGJhY2sgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiLS1tdGRzLWxvZ28tY29sb3JcIik7XG5cdFx0Y29uc3QgaWNvbiA9IHN2Zy5vdXRlckhUTUxcblx0XHRcdC5yZXBsYWNlKC9cXG4rL2csIFwiIFwiKSAvLyBQcmV2ZW50IGxpbmUgYnJlYWtzXG5cdFx0XHQucmVwbGFjZSgvKGZpbGx8d2lkdGh8aGVpZ2h0fHhtbG5zKT1cIlteXCJdK1wiL2dpLCBcIlwiKVxuXHRcdFx0LnJlcGxhY2UoXCI8c3ZnXCIsIGA8c3ZnIHdpZHRoPVwiNDBcIiBoZWlnaHQ9XCI0MFwiIGZpbGw9XCIke3RleHR9XCJgKTtcblxuXHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoXG5cdFx0XHRPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJsaW5rXCIpLCB7XG5cdFx0XHRcdGhyZWY6IGBkYXRhOmltYWdlL3N2Zyt4bWwsJHtlbmNvZGVVUklDb21wb25lbnQoYDxzdmcgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB2aWV3Qm94PScwIDAgNTUgNTUnPjxyZWN0IGZpbGw9JyR7aXNEb3QgPyBcIm5vbmVcIiA6IGJhY2t9JyB3aWR0aD0nNTEnIGhlaWdodD0nNTEnIHg9JzInIHk9JzInIHN0cm9rZT0nJHt0ZXh0fScgc3Ryb2tlLWRhc2hhcnJheT0nMC4wOSA2LjM4JyBzdHJva2UtbGluZWNhcD0ncm91bmQnIHN0cm9rZS1vcGFjaXR5PScke2lzRG90ID8gMC42IDogMH0nIHN0cm9rZS13aWR0aD0nMi4zJyByeD0nMjUuNScvPjxnIHRyYW5zZm9ybT1cInRyYW5zbGF0ZSg3LjUgNy41KVwiPiR7aWNvbn08L2c+PC9zdmc+YCl9YCxcblx0XHRcdFx0cmVsOiBcImljb25cIixcblx0XHRcdH0pLFxuXHRcdCk7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19MT0dPLCBoYW5kbGVNdXRhdGlvbikpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFFVSUNLX0VWRU5ULCBhbmNob3JQb3NpdGlvbiwgYXR0ciwgb24sIG9uTG9hZGVkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19QT1BPVkVSID0gc3R5bGVzLnBvcG92ZXIuc3BsaXQoXCIgXCIpWzBdO1xubGV0IE9QRU5fUE9QT1ZFUlMgPSAwOyAvLyBTcGVlZCB1cCBieSBvbmx5IGNoZWNraW5nIGNsaWNrcyBpZiB3ZSBoYXZlIG9wZW4gcG9wb3ZlcnNcblxuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlKHsgdGFyZ2V0OiBlbCwgbmV3U3RhdGUgfTogRXZlbnQgJiB7IG5ld1N0YXRlPzogc3RyaW5nIH0pIHtcblx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgJiYgZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19QT1BPVkVSKSkge1xuXHRcdGNvbnN0IGFuY2hvciA9IChlbC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QpPy5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pihcblx0XHRcdGBbcG9wb3ZlcnRhcmdldD1cIiR7ZWwuaWR9XCJdYCxcblx0XHQpO1xuXG5cdFx0aWYgKG5ld1N0YXRlID09PSBcImNsb3NlZFwiKSB7XG5cdFx0XHRPUEVOX1BPUE9WRVJTIC09IDE7XG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgZmFsc2UpO1xuXHRcdH0gZWxzZSBpZiAoYW5jaG9yKSB7XG5cdFx0XHRPUEVOX1BPUE9WRVJTICs9IDE7XG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgYW5jaG9yLCBhdHRyKGVsLCBcImRhdGEtcG9zaXRpb25cIikgfHwgXCJib3R0b21cIik7XG5cdFx0fVxuXHR9XG59XG5cbi8vIFBvbHlmaWxsIHBvcG92ZXJ0YXJnZXQgZm9yIDxhPiAobm90IHN1cHBvcnRlZCBieSBuYXRpdmUpXG4vLyBhbmQgYXV0b21hdGljYWxseSBhc3N1bWUgcG9wb3ZlcnRhcmdldCBpcyB0aGUgY2xvc2VzdCBwYXJlbnQgcG9wb3ZlclxuLy8gYnV0IHJlc3BlY3QgdGhlIHBvcG92ZXJ0YXJnZXQgYW5kIHBvcG92ZXJ0YXJnZXRhY3Rpb24gYXR0cmlidXRlXG5mdW5jdGlvbiBoYW5kbGVMaW5rQ2xpY2soeyB0YXJnZXQgfTogRXZlbnQpIHtcblx0Y29uc3QgY2xvc2UgPVxuXHRcdE9QRU5fUE9QT1ZFUlMgJiYgKHRhcmdldCBhcyBFbGVtZW50KT8uY2xvc2VzdD8uKFwiYSxbcG9wb3ZlcnRhcmdldGFjdGlvbl1cIik7XG5cblx0aWYgKGNsb3NlKSB7XG5cdFx0Y29uc3QgYWN0aW9uID0gYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0YWN0aW9uXCIpIHx8IFwidG9nZ2xlXCI7XG5cdFx0Y29uc3Qgb3BlbiA9IGFjdGlvbiA9PT0gXCJzaG93XCIgfHwgKGFjdGlvbiA9PT0gXCJoaWRlXCIgPyBmYWxzZSA6IHVuZGVmaW5lZCk7XG5cdFx0Y29uc3QgdGFyZ2V0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXR0cihjbG9zZSwgXCJwb3BvdmVydGFyZ2V0XCIpIHx8IFwiXCIpO1xuXHRcdGNvbnN0IHBvcG92ZXIgPSAodGFyZ2V0IHx8IGNsb3NlKS5jbG9zZXN0PEhUTUxFbGVtZW50PihgLiR7Q1NTX1BPUE9WRVJ9YCk7XG5cblx0XHQvLyBQb3BvdmVyIGNhbiBiZSBkaXNjb25uZXRlZCBieSBjbGljayBoYW5kbGVyIGRlZXBlciBkb3duIGluIHRoZSBET00gdGhyZWUgYmVmb3JlIHJlYWNoaW5nIGRvY3VtZW50XG5cdFx0aWYgKHBvcG92ZXI/LmlzQ29ubmVjdGVkICYmIHBvcG92ZXI/LnRvZ2dsZVBvcG92ZXIpXG5cdFx0XHRwb3BvdmVyLnRvZ2dsZVBvcG92ZXIob3Blbik7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJ0b2dnbGVcIiwgaGFuZGxlVG9nZ2xlLCBRVUlDS19FVkVOVCk7IC8vIFVzZSBjYXB0dXJlIHNpbmNlIHRvZ2dsZSBkb2VzIG5vdCBidWJibGVcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlTGlua0NsaWNrKTsgLy8gQWxsb3cgYDxhPmAgdG8gdXNlIGBwb3BvdmVydGFyZ2V0YCBhcyB3ZWxsXG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfVEFCTEUgPSBzdHlsZXMudGFibGUuc3BsaXQoXCIgXCIpWzBdO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbih0YWJsZXM6IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTFRhYmxlRWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCB0YWJsZSBvZiB0YWJsZXMpIHtcblx0XHRjb25zdCB0aHM6IHN0cmluZ1tdID0gW107IC8vIEFkZCBkYXRhLXRoPVwiXCIgdG8gZWFjaCBjZWxsIHRvIHN1cHBvcnQgZGF0YS1tb2JpbGUgZGVzaWduc1xuXG5cdFx0YXR0cih0YWJsZSwgXCJyb2xlXCIsIFwidGFibGVcIik7IC8vIEFkZCBoZWxwaW5nIHJvbGU9XCJcIiB0byBlbnN1cmUgc2NyZWVuIHJlYWRlcnMgdW5kZXJzdGFuZCB0aGUgdGFibGUgcmVnYXJkbGVzcyBvZiBDU1MgZGlzcGxheVxuXHRcdGlmICh0YWJsZS5jYXB0aW9uKSBhdHRyKHRhYmxlLmNhcHRpb24sIFwicm9sZVwiLCBcImNhcHRpb25cIik7XG5cdFx0Zm9yIChjb25zdCBncm91cCBvZiBbdGFibGUudEhlYWQsIHRhYmxlLnRGb290LCAuLi50YWJsZS50Qm9kaWVzXSlcblx0XHRcdGlmIChncm91cCkge1xuXHRcdFx0XHRhdHRyKGdyb3VwLCBcInJvbGVcIiwgXCJyb3dncm91cFwiKTtcblx0XHRcdFx0Y29uc3QgaXNUYm9keSA9IGdyb3VwLm5vZGVOYW1lID09PSBcIlRCT0RZXCI7XG5cblx0XHRcdFx0Zm9yIChjb25zdCByb3cgb2YgZ3JvdXAucm93cykge1xuXHRcdFx0XHRcdGF0dHIocm93LCBcInJvbGVcIiwgXCJyb3dcIik7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBjZWxsIG9mIHJvdy5jZWxscykge1xuXHRcdFx0XHRcdFx0aWYgKGlzVGJvZHkpIGF0dHIoY2VsbCwgXCJkYXRhLXRoXCIsIHRoc1tjZWxsLmNlbGxJbmRleF0gfHwgXCI6ZW1wdHlcIik7XG5cdFx0XHRcdFx0XHRlbHNlIHRocy5wdXNoKGNlbGwuaW5uZXJUZXh0LnRyaW0oKSk7IC8vIFVzaW5nIGlubmVyVGV4dCB0byBvbmx5IGluY2x1ZGUgdmlzaWJsZSB0ZXh0XG5cdFx0XHRcdFx0XHRpZiAoY2VsbC5ub2RlTmFtZSA9PT0gXCJURFwiKSBhdHRyKGNlbGwsIFwicm9sZVwiLCBcImNlbGxcIik7XG5cdFx0XHRcdFx0XHRlbHNlIHtcblx0XHRcdFx0XHRcdFx0YXR0cihjZWxsLCBcInJvbGVcIiwgaXNUYm9keSA/IFwicm93aGVhZGVyXCIgOiBcImNvbHVtbmhlYWRlclwiKTtcblx0XHRcdFx0XHRcdFx0YXR0cihjZWxsLCBcInNjb3BlXCIsIGlzVGJvZHkgPyBcInJvd1wiIDogXCJjb2xcIik7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19UQUJMRSwgaGFuZGxlTXV0YXRpb24pKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBvbiwgb25Mb2FkZWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1RPR0dMRUdST1VQID0gYC4ke3N0eWxlcy50b2dnbGVncm91cC5zcGxpdChcIiBcIilbMF19YDtcblxuLy8gUHJldmVudCBicm93c2VycyBmcm9tIHNob3dpbmcgZGVmYXVsdCB2YWxpZGF0aW9uIGJ1YmJsZXNcbmZ1bmN0aW9uIGhhbmRsZUtleURvd24oZXZlbnQ6IEV2ZW50ICYgUGFydGlhbDxLZXlib2FyZEV2ZW50Pikge1xuXHRjb25zdCB7IGtleSwgdGFyZ2V0OiBlbCB9ID0gZXZlbnQ7XG5cdGNvbnN0IGdyb3VwID0gZWwgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50ICYmIGVsLmNsb3Nlc3QoQ1NTX1RPR0dMRUdST1VQKTtcblxuXHRpZiAoIWdyb3VwKSByZXR1cm47XG5cdGlmIChrZXkgPT09IFwiRW50ZXJcIikgZWwuY2xpY2soKTtcblx0aWYgKGtleT8uc3RhcnRzV2l0aChcIkFycm93XCIpKSB7XG5cdFx0ZXZlbnQucHJldmVudERlZmF1bHQoKTtcblx0XHRjb25zdCBpbnB1dHMgPSBncm91cC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImlucHV0XCIpO1xuXHRcdGNvbnN0IGluZGV4ID0gWy4uLmlucHV0c10uaW5kZXhPZihlbCk7XG5cdFx0Y29uc3QgbW92ZSA9IGtleS5tYXRjaCgvQXJyb3coUmlnaHR8RG93bikvKSA/IDEgOiAtMTtcblx0XHRpbnB1dHNbKGlucHV0cy5sZW5ndGggKyBpbmRleCArIG1vdmUpICUgaW5wdXRzLmxlbmd0aF0/LmZvY3VzKCk7XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb24oZG9jdW1lbnQsIFwia2V5ZG93blwiLCBoYW5kbGVLZXlEb3duKSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0SVNfQlJPV1NFUixcblx0UVVJQ0tfRVZFTlQsXG5cdGFuY2hvclBvc2l0aW9uLFxuXHRhdHRyLFxuXHRvbixcblx0b25Mb2FkZWQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBERVNDUklCRURCWSA9IFwiYXJpYS1kZXNjcmliZWRieVwiO1xuY29uc3QgRVNDID0gXCJFc2NhcGVcIjtcbmNvbnN0IExBQkVMTEVEQlkgPSBcImFyaWEtbGFiZWxsZWRieVwiO1xuY29uc3QgUE9TSVRJT05fQ1NTX1BST1BFUlRZID0gXCItLW10ZHMtdG9vbHRpcC1wb3NpdGlvblwiO1xuY29uc3QgVEhST1RUTEVfREVMQVkgPSAzMDA7XG5jb25zdCBUT09MVElQID0gSVNfQlJPV1NFUlxuXHQ/IE9iamVjdC5hc3NpZ24oZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKSwge1xuXHRcdFx0Y2xhc3NOYW1lOiBzdHlsZXMuX3Rvb2x0aXAsXG5cdFx0XHRpZDogXCJtdGRzLXRvb2x0aXBcIixcblx0XHRcdHBvcG92ZXI6IFwibWFudWFsXCIsXG5cdFx0fSlcblx0OiBudWxsOyAvLyBDcmVhdGUgYSBkdW1teSBlbGVtZW50IHRvIGF2b2lkIG51bGwgY2hlY2tzXG5cbmxldCBBTkNIT1I6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbmxldCBMQVNUX0NBTEwgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5sZXQgVEhST1RUTEU6IG51bWJlciB8IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+ID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlTW92ZSh7IHRhcmdldCwgdHlwZSwga2V5IH06IEV2ZW50ICYgeyBrZXk/OiBzdHJpbmcgfSkge1xuXHRpZiAodHlwZSA9PT0gXCJrZXlkb3duXCIgJiYga2V5ICE9PSBFU0MpIHJldHVybjsgLy8gQWxsb3cgRVNDIGRpc21pc3MgdG8gZm9sbG93IGh0dHBzOi8vd3d3LnczLm9yZy9XQUkvQVJJQS9hcGcvcGF0dGVybnMvdG9vbHRpcC9cblx0Y29uc3Qgd2FpdCA9IExBU1RfQ0FMTCArIFRIUk9UVExFX0RFTEFZIC0gRGF0ZS5ub3coKTtcblx0Y2xlYXJUaW1lb3V0KFRIUk9UVExFKTtcblx0VEhST1RUTEUgPSBzZXRUaW1lb3V0KFxuXHRcdGhhbmRsZU1vdmVUaHJvdHRsZWQsXG5cdFx0TWF0aC5tYXgod2FpdCwgMCksXG5cdFx0a2V5ID09PSBFU0MgPyBudWxsIDogdGFyZ2V0LFxuXHQpO1xufVxuXG4vLyBVc2luZyBhIHRocm90dGxlZCBmdW5jdGlvbiB0byBhdm9pZCBwZXJmb3JtYW5jZSBpc3N1ZXNcbmZ1bmN0aW9uIGhhbmRsZU1vdmVUaHJvdHRsZWQodGFyZ2V0OiBFbGVtZW50IHwgbnVsbCkge1xuXHRMQVNUX0NBTEwgPSBEYXRlLm5vdygpO1xuXG5cdC8vIEJ1aWxkIGFuZCBhcHBlbmQgdG9vbHRpcCBpZiBub3QgZXhpc3Rpbmdcblx0aWYgKCFUT09MVElQIHx8IHRhcmdldCA9PT0gVE9PTFRJUCkgcmV0dXJuOyAvLyBBbGxvdyB0b29sdGlwIHRvIGJlIGhvdmVyZWQsIGZvbGxvd2luZyBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIxLyNjb250ZW50LW9uLWhvdmVyLW9yLWZvY3VzXG5cdGlmICghVE9PTFRJUD8uaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKFRPT0xUSVApOyAvLyBFbnN1cmUgY29ubmVjdGVkXG5cdGxldCBhbmNob3IgPSB0YXJnZXQ/LmNsb3Nlc3Q/LjxFbGVtZW50PihcIltkYXRhLXRvb2x0aXBdXCIpIHx8IG51bGw7XG5cblx0Ly8gTm8gbmVlZCB0byB1cGRhdGVcblx0aWYgKGFuY2hvciA9PT0gQU5DSE9SKSByZXR1cm47XG5cblx0Y29uc3QgY29udGVudCA9IChhbmNob3IgJiYgYXR0cihhbmNob3IsIFwiZGF0YS10b29sdGlwXCIpKSB8fCBcIlwiO1xuXHRjb25zdCBwb3NpdGlvbiA9XG5cdFx0KGFuY2hvciAmJiBhdHRyKGFuY2hvciwgXCJkYXRhLXRvb2x0aXAtcG9zaXRpb25cIikpIHx8XG5cdFx0d2luZG93XG5cdFx0XHQuZ2V0Q29tcHV0ZWRTdHlsZShhbmNob3IgfHwgZG9jdW1lbnQuYm9keSlcblx0XHRcdC5nZXRQcm9wZXJ0eVZhbHVlKFBPU0lUSU9OX0NTU19QUk9QRVJUWSlcblx0XHRcdD8udHJpbSgpIHx8XG5cdFx0XCJ0b3BcIjtcblxuXHRjb25zdCBpc0hpZGRlbiA9XG5cdFx0IWNvbnRlbnQgfHxcblx0XHRjb250ZW50ID09PSBcImZhbHNlXCIgfHxcblx0XHRjb250ZW50ID09PSBcInRydWVcIiB8fFxuXHRcdHBvc2l0aW9uID09PSBcIm5vbmVcIjtcblxuXHRpZiAoaXNIaWRkZW4pIGFuY2hvciA9IG51bGw7IC8vIERvIG5vdCBzaG93IHRvb2x0aXAgaWYgYm9vbGlzaCB2YWx1ZVxuXHRpZiAoYW5jaG9yKSBUT09MVElQLnRleHRDb250ZW50ID0gY29udGVudDsgLy8gT25seSB1cGRhdGUgY29udGVudCBpZiBuZXcgYW5jaG9yXG5cblx0Y29uc3QgaGFkTGFiZWwgPSBBTkNIT1IgJiYgYXR0cihBTkNIT1IsIExBQkVMTEVEQlkpID09PSBUT09MVElQPy5pZDtcblx0Y29uc3QgaGFzTGFiZWwgPVxuXHRcdChhbmNob3IgaW5zdGFuY2VvZiBIVE1MRWxlbWVudFxuXHRcdFx0PyBhbmNob3IuaW5uZXJUZXh0XG5cdFx0XHQ6IGFuY2hvcj8udGV4dENvbnRlbnRcblx0XHQpPy50cmltKCkgfHxcblx0XHRhbmNob3I/Lmhhc0F0dHJpYnV0ZShMQUJFTExFREJZKSB8fFxuXHRcdGFuY2hvcj8uaGFzQXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKTtcblxuXHRBTkNIT1I/LnJlbW92ZUF0dHJpYnV0ZShoYWRMYWJlbCA/IExBQkVMTEVEQlkgOiBERVNDUklCRURCWSk7IC8vIFVubGluayBwcmV2aW91cyBhbmNob3Jcblx0YW5jaG9yUG9zaXRpb24oVE9PTFRJUCwgZmFsc2UpOyAvLyBSZXNldCBhbmNob3IgcG9zaXRpb25cblxuXHRBTkNIT1IgPSBhbmNob3I7IC8vIFN0b3JlIG5ldyBhbmNob3IgLSBtaWdodCBiZSBudWxsIGlmIG5vIG5ldyBhbmNob3Jcblx0aWYgKEFOQ0hPUikgYXR0cihBTkNIT1IsIGhhc0xhYmVsID8gREVTQ1JJQkVEQlkgOiBMQUJFTExFREJZLCBUT09MVElQPy5pZCk7IC8vIFVzZSB0b29sdGlwIGFzIGRlc2NyaXB0aW9uIGlmIGFsbHJlYWR5IGhhcyBsYWJlbFxuXHRUT09MVElQLnRvZ2dsZVBvcG92ZXIoISFhbmNob3IpO1xuXHRhbmNob3JQb3NpdGlvbihUT09MVElQLCBhbmNob3IgfHwgZmFsc2UsIHBvc2l0aW9uKTtcbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJibHVyLGZvY3VzLG1vdXNlb3V0LG1vdXNlb3ZlclwiLCBoYW5kbGVNb3ZlLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJrZXlkb3duXCIsIGhhbmRsZU1vdmUsIFFVSUNLX0VWRU5UKTtcblx0b24od2luZG93LCBcImJsdXJcIiwgaGFuZGxlTW92ZSwgUVVJQ0tfRVZFTlQpO1xufSk7XG4iLCIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICB2YXIgX2EyO1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIChfYTIgPSBlbC5nZXRBdHRyaWJ1dGUobmFtZSkpICE9IG51bGwgPyBfYTIgOiBudWxsO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIGFzQnV0dG9uID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGlzQ2xpY2sgPSBcImtleVwiIGluIGV2ZW50ICYmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKTtcbiAgaWYgKGlzQ2xpY2spIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGlmIChpc0NsaWNrICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBldmVudC50YXJnZXQuY2xpY2soKTtcbiAgcmV0dXJuIGlzQ2xpY2s7XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIGlmIChhdHRycykgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJzKSkgYXR0cihlbCwga2V5LCB2YWwpO1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcblxuLy8gdS1kZXRhaWxzLnRzXG52YXIgVUhUTUxEZXRhaWxzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvLyBVc2luZyB1bmRlcnNjb3JlIGluc3RlYWQgb2YgcHJpdmF0ZSBmaWVsZHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgdGhpcy5fY29udGVudCA9IG51bGw7XG4gICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IG5hbWU6IFwic3VtbWFyeVwiIH0pLFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBwYXJ0OiBcImRldGFpbHMtY29udGVudFwiIH0pLFxuICAgICAgY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgJHtESVNQTEFZX0JMT0NLfVxuICAgICAgICA6OnNsb3R0ZWQodS1zdW1tYXJ5KSB7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogYmxvY2sgfVxuXHRcdFx0XHQ6OnNsb3R0ZWQodS1zdW1tYXJ5KTo6YmVmb3JlIHsgY29udGVudDogJyc7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgdmVydGljYWwtYWxpZ246IG1pZGRsZTsgbWFyZ2luLWlubGluZTogLjA1ZW0gLjMxMjVlbTsgYm9yZGVyLWJsb2NrOiAuMzEyNWVtIHNvbGlkIHRyYW5zcGFyZW50OyBib3JkZXItaW5saW5lLXN0YXJ0OiAuNWVtIHNvbGlkIH1cblx0XHRcdFx0OjpzbG90dGVkKHUtc3VtbWFyeVthcmlhLWV4cGFuZGVkPVwidHJ1ZVwiXSk6OmJlZm9yZSB7IHJvdGF0ZTogOTBkZWcgfVxuXHRcdFx0XHQ6aG9zdCA+IFtwYXJ0PVwiZGV0YWlscy1jb250ZW50XCJdOm5vdChbaGlkZGVuPVwiXCJdKSB7IGRpc3BsYXk6IGJsb2NrIH1gXG4gICAgICApXG4gICAgKTtcbiAgfVxuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wib3BlblwiXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB2YXIgX2EyO1xuICAgIHRoaXMuX2NvbnRlbnQgPSAoX2EyID0gdGhpcy5zaGFkb3dSb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNoaWxkcmVuWzFdO1xuICAgIG9uKHRoaXMuX2NvbnRlbnQsIFwiYmVmb3JlbWF0Y2hcIiwgdGhpcyk7XG4gICAgb24odGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgaWYgKHRoaXMuX2NvbnRlbnQpIG9mZih0aGlzLl9jb250ZW50LCBcImJlZm9yZW1hdGNoXCIsIHRoaXMpO1xuICAgIG9mZih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgdGhpcy5fY29udGVudCA9IG51bGw7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIHByZXYsIG5leHQpIHtcbiAgICBjb25zdCBoaWRlID0gXCJvbmJlZm9yZW1hdGNoXCIgaW4gdGhpcyA/IFwidW50aWwtZm91bmRcIiA6IHRydWU7XG4gICAgY29uc3Qgb3BlbiA9IHRoaXMub3BlbjtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMuY2hpbGRyZW4pXG4gICAgICBpZiAoZWwubm9kZU5hbWUgPT09IFwiVS1TVU1NQVJZXCIpIGF0dHIoZWwsIFwiYXJpYS1leHBhbmRlZFwiLCBgJHtvcGVufWApO1xuICAgIGlmICh0aGlzLl9jb250ZW50KSB7XG4gICAgICBhdHRyKHRoaXMuX2NvbnRlbnQsIFwiYXJpYS1oaWRkZW5cIiwgYCR7IW9wZW59YCk7XG4gICAgICB0aGlzLl9jb250ZW50LmhpZGRlbiA9IG9wZW4gPyBmYWxzZSA6IGhpZGU7XG4gICAgfVxuICAgIGlmIChvcGVuICYmIHRoaXMubmFtZSkge1xuICAgICAgY29uc3QgdURldGFpbHNMaXN0ID0gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICBgJHt0aGlzLm5vZGVOYW1lfVtuYW1lPVwiJHt0aGlzLm5hbWV9XCJdYFxuICAgICAgKTtcbiAgICAgIGZvciAoY29uc3QgdURldGFpbHMgb2YgdURldGFpbHNMaXN0KVxuICAgICAgICBpZiAodURldGFpbHMgIT09IHRoaXMpIHVEZXRhaWxzLm9wZW4gPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHByb3AgPT09IFwib3BlblwiICYmIHByZXYgPT09IG51bGwgIT09IChuZXh0ID09PSBudWxsKSlcbiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJ0b2dnbGVcIikpO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3Qgc3VtbWFyeSA9IHRoaXMucXVlcnlTZWxlY3RvcihcIjpzY29wZSA+IHUtc3VtbWFyeVwiKTtcbiAgICBjb25zdCBpc1N1bW1hcnkgPSBzdW1tYXJ5ID09IG51bGwgPyB2b2lkIDAgOiBzdW1tYXJ5LmNvbnRhaW5zKGV2ZW50LnRhcmdldCk7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJiZWZvcmVtYXRjaFwiKSB0aGlzLm9wZW4gPSB0cnVlO1xuICAgIGlmIChpc1N1bW1hcnkgJiYgZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIGFzQnV0dG9uKGV2ZW50KTtcbiAgICBpZiAoaXNTdW1tYXJ5ICYmIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIikgdGhpcy5vcGVuID0gIXRoaXMub3BlbjtcbiAgfVxuICBnZXQgb3BlbigpIHtcbiAgICByZXR1cm4gdGhpcy5oYXNBdHRyaWJ1dGUoXCJvcGVuXCIpO1xuICB9XG4gIHNldCBvcGVuKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcIm9wZW5cIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IG5hbWUoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgXCJuYW1lXCIpIHx8IFwiXCI7XG4gIH1cbiAgc2V0IG5hbWUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwibmFtZVwiLCB2YWx1ZSk7XG4gIH1cbn07XG52YXIgVUhUTUxTdW1tYXJ5RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJidXR0b25cIik7XG4gICAgdGhpcy5zbG90ID0gXCJzdW1tYXJ5XCI7XG4gICAgdGhpcy50YWJJbmRleCA9IDA7XG4gIH1cbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWRldGFpbHNcIiwgVUhUTUxEZXRhaWxzRWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXN1bW1hcnlcIiwgVUhUTUxTdW1tYXJ5RWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MRGV0YWlsc0VsZW1lbnQsIFVIVE1MU3VtbWFyeUVsZW1lbnQgfTtcbiIsIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19GSVJFRk9YID0gSVNfQlJPV1NFUiAmJiAvZmlyZWZveC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfSU9TID0gSVNfQlJPV1NFUiAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZ2V0TGFiZWwgPSAoZWwpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9IGdldFJvb3QoZWwpO1xuICBjb25zdCBsYWJlbCA9IGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiKSB8fCBcIlwiO1xuICBjb25zdCBsYWJlbHMgPSAoKF9hMiA9IGF0dHIoZWwsIFwiYXJpYS1sYWJlbGxlZGJ5XCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKS5zcGxpdCgvXFxzKy8pKSB8fCBbXTtcbiAgcmV0dXJuIFtcbiAgICAuLi5sYWJlbHMubWFwKChpZDIpID0+IHJvb3QgPT0gbnVsbCA/IHZvaWQgMCA6IHJvb3QucXVlcnlTZWxlY3RvcihgW2lkPVwiJHtpZDJ9XCJdYCkpLFxuICAgIC8vIEdldCBhbGwgbGFiZWxsZWRieSBlbGVtZW50c1xuICAgIC4uLkFycmF5LmZyb20oZWwubGFiZWxzIHx8IFtdKVxuICAgIC8vIEdldCBhbGwgPGxhYmVsPiBlbGVtZW50c1xuICBdLnJlZHVjZSgoYWNjLCBlbDIpID0+IHtcbiAgICB2YXIgX2EzO1xuICAgIHJldHVybiBhY2MgfHwgKChfYTMgPSBlbDIgPT0gbnVsbCA/IHZvaWQgMCA6IGVsMi5pbm5lclRleHQpID09IG51bGwgPyB2b2lkIDAgOiBfYTMudHJpbSgpKSB8fCBcIlwiO1xuICB9LCBsYWJlbCk7XG59O1xuXG4vLyB1LXByb2dyZXNzLnRzXG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MUHJvZ3Jlc3NFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiYXJpYS1sYWJlbFwiLCBcImFyaWEtbGFiZWxsZWRieVwiLCBcInZhbHVlXCIsIFwibWF4XCJdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICBjcmVhdGVFbGVtZW50KFwic2xvdFwiLCBudWxsLCB7IGhpZGRlbjogXCJcIiB9KSxcbiAgICAgIC8vIFNsb3QgaGlkaW5nIGNvbnRlbnQgYWxsb3dzIGxlZ2FjeSBicm93c2VyIHRvIGRpc3BsYXkgZmFsbGJhY2sgdGV4dFxuICAgICAgY3JlYXRlRWxlbWVudChcbiAgICAgICAgXCJzdHlsZVwiLFxuICAgICAgICBgOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgYm94LXNpemluZzogYm9yZGVyLWJveDsgYm9yZGVyOiAxcHggc29saWQ7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgaGVpZ2h0OiAuNWVtOyB3aWR0aDogMTBlbTsgb3ZlcmZsb3c6IGhpZGRlbiB9XG4gICAgICAgIDpob3N0OjpiZWZvcmUgeyBjb250ZW50OiAnJzsgZGlzcGxheTogYmxvY2s7IGhlaWdodDogMTAwJTsgYmFja2dyb3VuZDogY3VycmVudENvbG9yOyB3aWR0aDogdmFyKC0tcGVyY2VudGFnZSwgMCUpOyB0cmFuc2l0aW9uOiB3aWR0aCAuMnMgfVxuICAgICAgICA6aG9zdCg6bm90KFt2YWx1ZV0pKSB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZyxjdXJyZW50Q29sb3IgMjUlLCB0cmFuc3BhcmVudCA1MCUsIGN1cnJlbnRDb2xvciA3NSUpIDUwJS80MDAlIH1cbiAgICAgICAgQG1lZGlhIChwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiBuby1wcmVmZXJlbmNlKSB7IDpob3N0IHsgYW5pbWF0aW9uOiBpbmRldGVybWluYXRlIDJzIGxpbmVhciBpbmZpbml0ZSB9ICB9XG4gICAgICAgIEBrZXlmcmFtZXMgaW5kZXRlcm1pbmF0ZSB7IGZyb20geyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IDEwMCUgfSB0byB7IGJhY2tncm91bmQtcG9zaXRpb24teDogMCB9IH1gXG4gICAgICApXG4gICAgKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoU0tJUF9BVFRSX0NIQU5HRSkgcmV0dXJuO1xuICAgIFNLSVBfQVRUUl9DSEFOR0UgPSB0cnVlO1xuICAgIGNvbnN0IHJvbGVJbWFnZSA9IElTX0lPUyB8fCBJU19GSVJFRk9YO1xuICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKHRoaXMucG9zaXRpb24gKiAxMDApKTtcbiAgICB0aGlzLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wZXJjZW50YWdlXCIsIGAke3BlcmNlbnRhZ2V9JWApO1xuICAgIGxldCBsYWJlbCA9IGdldExhYmVsKHRoaXMpO1xuICAgIGlmIChyb2xlSW1hZ2UpIGxhYmVsID0gYCR7bGFiZWwucmVwbGFjZSgvXFxkKyUkLywgXCJcIil9ICR7cGVyY2VudGFnZX0lYDtcbiAgICBpZiAoSVNfRklSRUZPWCkgZm9yIChjb25zdCBlbCBvZiB0aGlzLmxhYmVscykgYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIsIGxhYmVsKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1idXN5XCIsIGAke3RoaXMucG9zaXRpb24gPT09IC0xfWApO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWxhYmVsXCIsIGxhYmVsLnRyaW0oKSk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtbGFiZWxsZWRieVwiLCBudWxsKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW1heFwiLCBcIjEwMFwiKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS12YWx1ZW1pblwiLCBcIjBcIik7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVub3dcIiwgYCR7cGVyY2VudGFnZX1gKTtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCByb2xlSW1hZ2UgPyBcImltZ1wiIDogXCJwcm9ncmVzc2JhclwiKTtcbiAgICBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG4gIH1cbiAgZ2V0IGxhYmVscygpIHtcbiAgICBjb25zdCBsYWJlbCA9IHRoaXMuY2xvc2VzdChcImxhYmVsOm5vdChbZm9yXSlcIik7XG4gICAgY29uc3QgaWQyID0gdXNlSWQodGhpcyk7XG4gICAgaWYgKGxhYmVsKSBsYWJlbC5odG1sRm9yID0gaWQyO1xuICAgIGNvbnN0IGVsID0gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgYGxhYmVsW2Zvcj1cIiR7aWQyfVwiXWBcbiAgICApO1xuICAgIHJldHVybiBlbDtcbiAgfVxuICBnZXQgcG9zaXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWUgPT09IG51bGwgPyAtMSA6IE1hdGgubWluKHRoaXMudmFsdWUgLyB0aGlzLm1heCwgMSk7XG4gIH1cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHJldHVybiBnZXROdW1iZXIodGhpcywgXCJ2YWx1ZVwiKTtcbiAgfVxuICBzZXQgdmFsdWUodmFsdWUpIHtcbiAgICBzZXROdW1iZXIodGhpcywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IG1heCgpIHtcbiAgICByZXR1cm4gZ2V0TnVtYmVyKHRoaXMsIFwibWF4XCIpIHx8IDE7XG4gIH1cbiAgc2V0IG1heChtYXgpIHtcbiAgICBzZXROdW1iZXIodGhpcywgXCJtYXhcIiwgbWF4KTtcbiAgfVxufTtcbi8vIFByZXZlbnQgQ2hyb21lIERldlRvb2xzIHdhcm5pbmcgYWJvdXQgPGxhYmVsIGZvcj1cIlwiPiBwb2ludGluZyB0byA8dS1wcm9ncmVzcz5cblVIVE1MUHJvZ3Jlc3NFbGVtZW50LmZvcm1Bc3NvY2lhdGVkID0gdHJ1ZTtcbnZhciBpc051bWVyaWMgPSAodmFsdWUpID0+ICFOdW1iZXIuaXNOYU4oTnVtYmVyLnBhcnNlRmxvYXQoYCR7dmFsdWV9YCkpICYmIE51bWJlci5pc0Zpbml0ZShOdW1iZXIodmFsdWUpKTtcbnZhciBnZXROdW1iZXIgPSAoZWwsIGtleSkgPT4ge1xuICBjb25zdCB2YWx1ZSA9IGF0dHIoZWwsIGtleSk7XG4gIHJldHVybiBpc051bWVyaWModmFsdWUpID8gTWF0aC5tYXgoMCwgTnVtYmVyLnBhcnNlRmxvYXQodmFsdWUpKSA6IG51bGw7XG59O1xudmFyIHNldE51bWJlciA9IChlbCwga2V5LCB2YWwpID0+IHtcbiAgaWYgKHZhbCA9PT0gbnVsbCB8fCBpc051bWVyaWModmFsKSkgYXR0cihlbCwga2V5LCBgJHt2YWx9YCk7XG4gIGVsc2UgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc2V0IG5vbi1udW1lcmljICcke2F0dHJ9JzogJyR7dmFsfSdgKTtcbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXByb2dyZXNzXCIsIFVIVE1MUHJvZ3Jlc3NFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxQcm9ncmVzc0VsZW1lbnQgfTtcbiJdLCJuYW1lcyI6WyJJU19CUk9XU0VSIiwiSVNfQU5EUk9JRCIsIl9hIiwiSVNfQlJPV1NFUiQ1IiwiU0FGRV9MQUJFTExFREJZIiwiRElTUExBWV9CTE9DSyIsIlVIVE1MRWxlbWVudCIsImF0dHIiLCJlbCIsIm5hbWUiLCJ2YWx1ZSIsIl9hMiIsImV2ZW50cyIsImFjdGlvbiIsImVsZW1lbnQiLCJyZXN0IiwidHlwZSIsIm9uIiwib2ZmIiwiYXR0YWNoU3R5bGUiLCJjc3MiLCJjcmVhdGVFbGVtZW50Iiwib2JzZXJ2ZXJzIiwibXV0YXRpb25PYnNlcnZlciIsIm9wdGlvbnMiLCJvYnNlcnZlciIsImRldGFpbCIsImFzQnV0dG9uIiwiZXZlbnQiLCJpc0NsaWNrIiwiZ2V0Um9vdCIsIm5vZGUiLCJyb290IiwiaWQiLCJ1c2VJZCIsInRhZ05hbWUiLCJ0ZXh0IiwiYXR0cnMiLCJjdXN0b21FbGVtZW50cyIsImluc3RhbmNlIiwiQVJJQV9DT05UUk9MUyIsIkFSSUFfU0VMRUNURUQiLCJVSFRNTFRhYnNFbGVtZW50IiwicXVlcnlXaXRob3V0TmVzdGVkIiwiZ2V0U2VsZWN0ZWRJbmRleCIsImluZGV4Iiwic2V0U2VsZWN0ZWQiLCJVSFRNTFRhYkxpc3RFbGVtZW50IiwidGFiIiwia2V5IiwidGFicyIsInByZXYiLCJuZXh0IiwiU0tJUF9BVFRSX0NIQU5HRSIsIlVIVE1MVGFiRWxlbWVudCIsInBhbmVscyIsIm5leHRQYW5lbCIsImdldFBhbmVsIiwicGFuZWwiLCJ0YWJsaXN0IiwidGFiTGlzdCIsIlVIVE1MVGFiUGFuZWxFbGVtZW50IiwiaXNGb2N1c2FibGUiLCJ0YWciLCJzZWxmIiwiaWQyIiwiX19kZWZQcm9wIiwiX19nZXRPd25Qcm9wU3ltYm9scyIsIl9faGFzT3duUHJvcCIsIl9fcHJvcElzRW51bSIsIl9fZGVmTm9ybWFsUHJvcCIsIm9iaiIsIl9fc3ByZWFkVmFsdWVzIiwiYSIsImIiLCJwcm9wIiwiSVNfRklSRUZPWCIsIklTX0lPUyIsIklTX0JST1dTRVIkNCIsIkZPQ1VTX09VVExJTkUiLCJ0ZXh0MiIsInZhbCIsIkxJVkUiLCJMSVZFX1NSX0ZJWCIsInNwZWFrIiwic2V0VmFsdWUiLCJpbnB1dCIsImRhdGEiLCJfYiIsInByb3RvIiwiSVNfUFJFU1MiLCJFVkVOVFMiLCJFVkVOVF9PTkNFIiwiSVNfRklSRUZPWF9NQUMiLCJJU19NT0JJTEUiLCJGQUxTRSIsIkNMSUNLIiwiVEVYVFMiLCJVSFRNTENvbWJvYm94RWxlbWVudCIsInJlbmRlciIsInN5bmNJbnB1dFZhbHVlIiwiXyIsInRhcmdldCIsIm9uQmx1ciIsIm9uQ2xpY2siLCJvbkZvY3VzIiwib25JbnB1dCIsIm9uS2V5RG93biIsImlzRGF0YSIsIl9mb2N1cyIsIl90ZXh0cyIsIml0ZW1zIiwiY29udHJvbCIsImxpc3QiLCJtdWx0aXBsZSIsImxhYmVsIiwiZWRpdHMiLCJhZGRlZE5vZGVzIiwicmVtb3ZlZE5vZGVzIiwic2hvdWxkQW5ub3VuY2UiLCJpbnB1dE1vZGUiLCJuZXh0Rm9jdXMiLCJfYTMiLCJpZHgiLCJpdGVtIiwibGFiZWwyIiwiYXJpYSIsInNlbGVjdCIsInN5bmNDbGVhcldpdGhJbnB1dCIsInN5bmNPcHRpb25zV2l0aEl0ZW1zIiwiX3NwZWFrIiwidmFsdWVzIiwib3B0IiwiZGlzcGF0Y2hNYXRjaCIsInN5bmMiLCJjcmVhdGFibGUiLCJxdWVyeSIsIm1hdGNoIiwibyIsImRpc3BhdGNoQ2hhbmdlIiwicmVtb3ZhYmxlIiwiYWRkIiwicmVtb3ZlIiwiaSIsIml0ZW0yIiwib25CbHVycmVkIiwieCIsInkiLCJjbGVhciIsInRvcCIsInJpZ2h0IiwiYm90dG9tIiwibGVmdCIsInJlcGVhdCIsImlzQ29udHJvbCIsImluVGV4dCIsImZvcm0iLCJRVUlDS19FVkVOVCIsImRlYm91bmNlIiwiY2FsbGJhY2siLCJkZWxheSIsInRpbWVyIiwiYXJncyIsIlVVSUQiLCJTQ1JPTExFUiIsIlRBUkdFVFMiLCJUQVJHRVRTX1VQREFURSIsInVwZGF0ZSIsIlBPU0lUSU9OIiwiYW5jaG9yUG9zaXRpb24iLCJhbmNob3IiLCJwb3NpdGlvbiIsImZvcmNlIiwicGxhY2UiLCJpc0hUTUxBbmNob3IiLCJ0YXJnZXRXIiwidGFyZ2V0SCIsImFuY2hvclciLCJhbmNob3JIIiwid2lkdGgiLCJoZWlnaHQiLCJhbmNob3JYIiwiYW5jaG9yWSIsImhhc1NwYWNlTGVmdCIsImhhc1NwYWNlUmlnaHQiLCJoYXNTcGFjZU92ZXIiLCJoYXNTcGFjZVVuZGVyIiwicG9zaXRpb25SaWdodCIsInBvc2l0aW9uVW5kZXIiLCJjZW50ZXJYIiwiY2VudGVyWSIsImlzVmVydGljYWwiLCJjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyIiwicXVldWUiLCJvbkZyYW1lIiwib25UaW1lciIsIk1VVEFUT1JTIiwib25NdXRhdGlvbiIsImNsYXNzTmFtZSIsImVsZW1zIiwibXV0YXRvciIsIm9uTG9hZGVkIiwicnVuIiwiaXNJbnB1dExpa2UiLCJNQVRPTU8iLCJFTkFCTEVEIiwiYW5hbHl0aWNzIiwibWF0b21vSWQiLCJlbmFibGVkIiwidXJsIiwidGl0bGUiLCJjYXRlZ29yeSIsInYiLCJyZXN1bHRzIiwiZ2V0U3RlcHMiLCJub3ciLCJtYXgiLCJzaG93Iiwib2Zmc2V0Iiwic3RhcnQiLCJlbmQiLCJwYWdlcyIsInBhZ2luYXRpb24iLCJjdXJyZW50IiwidG90YWwiLCJwYWdlIiwic2hlZXQiLCJDU1NfQVBQIiwic3R5bGVzIiwiQ1NTX1NUSUNLWSIsIkNTU19UT0dHTEUiLCJDU1NfU0lERUJBUiIsInVzZVRyYW5zaXRpb24iLCJ0b2dnbGVBcHBFeHBhbmRlZCIsImhhbmRsZVRvZ2dsZUNsaWNrIiwic3RvcCIsInNpZGViYXIiLCJoYW5kbGVSZXNpemUiLCJNSU5fWSIsIlNDUk9MTF9VUCIsIlNUSUNLIiwiU1RJQ0tfRUwiLCJTVElDS19IIiwiU1RJQ0tfWSIsIlNUVUNLIiwiV0lOX0giLCJXSU5fWSIsImhhbmRsZU11dGF0aW9uIiwic3RpY2t5IiwiaGFuZGxlU2Nyb2xsIiwiTkVYVF9ZIiwiTkVYVF9VUCIsIkNTU19CUkVBRENSVU1CUyIsImJyZWFkY3J1bWJzIiwiYnJlYWRjdW1icyIsImNydW1iIiwibGVuZ3RoIiwiQ1NTX0RJQUxPRyIsIkRJQUxPR1MiLCJoYW5kbGVNb2RhbCIsImRpYWxvZyIsImhhbmRsZUNsaWNrIiwiaGFuZGxlSW5qZWN0IiwiZmlyc3QiLCJJU19CUk9XU0VSJDIiLCJESVNBQkxFRCIsIlNFTEVDVEVEIiwiVUhUTUxPcHRpb25FbGVtZW50IiwiTElWRV9USU1FUiIsIklOUFVUX0RFQk9VTkNFIiwiRVZFTlRTX0lOUFVUIiwiVUhUTUxEYXRhTGlzdEVsZW1lbnQiLCJkaXNjb25uZWN0SW5wdXQiLCJfcHJldiIsInNldHVwSW5wdXQiLCJzZXRFeHBhbmRlZCIsIm9wZW4iLCJpc0lucHV0IiwicmVsYXRlZFRhcmdldCIsIm9wdGlvbiIsIl9yb290IiwiX2lucHV0IiwiZmlsdGVyIiwiaGlkZGVuIiwidmlzaWJsZSIsIkNTU19GSUVMRCIsIkNTU19WQUxJREFUSU9OUyIsIkNTU19WQUxJREFUSU9OIiwiZ2V0VGV4dCIsInN0eWxlIiwiZmllbGRzIiwiZmllbGQiLCJsYWJlbHMiLCJkZXNjcyIsImNvbWJvYm94IiwidmFsaWQiLCJkZXNjIiwicmVuZGVyQ29tYm9ib3giLCJyZW5kZXJDb3VudGVyIiwicmVuZGVyVGV4dGFyZWFTaXplIiwidGV4dGFyZWEiLCJsaW1pdCIsInJlbWFpbmRlciIsIm5leHRJbnZhbGlkIiwicHJldkludmFsaWQiLCJvdmVyIiwidW5kZXIiLCJoYW5kbGVUb2dnbGUiLCJuZXdTdGF0ZSIsImhhbmRsZUlucHV0IiwiaGFuZGxlSW52YWxpZCIsImhhbmRsZUJlZm9yZUNoYW5nZSIsIkNTU19GSUVMRFNFVCIsIkFSSUFfREVTQyIsIkFSSUFfSU5WQUxJRCIsImZpZWxkc2V0cyIsImZpZWxkc2V0IiwiaW5wdXRzIiwidmFsaWRhdGlvbklkIiwiQ1NTX0xPR08iLCJsb2dvIiwiaWNvbiIsInN2ZyIsImlzRG90IiwiYmFjayIsIkNTU19QT1BPVkVSIiwiT1BFTl9QT1BPVkVSUyIsImhhbmRsZUxpbmtDbGljayIsImNsb3NlIiwicG9wb3ZlciIsIkNTU19UQUJMRSIsInRhYmxlcyIsInRhYmxlIiwidGhzIiwiZ3JvdXAiLCJpc1Rib2R5Iiwicm93IiwiY2VsbCIsIkNTU19UT0dHTEVHUk9VUCIsImhhbmRsZUtleURvd24iLCJtb3ZlIiwiREVTQ1JJQkVEQlkiLCJFU0MiLCJMQUJFTExFREJZIiwiUE9TSVRJT05fQ1NTX1BST1BFUlRZIiwiVEhST1RUTEVfREVMQVkiLCJUT09MVElQIiwiQU5DSE9SIiwiTEFTVF9DQUxMIiwiVEhST1RUTEUiLCJoYW5kbGVNb3ZlIiwid2FpdCIsImhhbmRsZU1vdmVUaHJvdHRsZWQiLCJjb250ZW50IiwiaGFkTGFiZWwiLCJoYXNMYWJlbCIsIl9jIiwiSVNfQlJPV1NFUiQxIiwiVUhUTUxEZXRhaWxzRWxlbWVudCIsImhpZGUiLCJ1RGV0YWlsc0xpc3QiLCJ1RGV0YWlscyIsInN1bW1hcnkiLCJpc1N1bW1hcnkiLCJVSFRNTFN1bW1hcnlFbGVtZW50IiwiZ2V0TGFiZWwiLCJhY2MiLCJlbDIiLCJVSFRNTFByb2dyZXNzRWxlbWVudCIsInJvbGVJbWFnZSIsInBlcmNlbnRhZ2UiLCJnZXROdW1iZXIiLCJzZXROdW1iZXIiLCJpc051bWVyaWMiXSwibWFwcGluZ3MiOiJrQ0FDQSxJQUFJQSxHQUFhLE9BQU8sT0FBVyxLQUFlLE9BQU8sT0FBTyxTQUFhLEtBQWUsT0FBTyxPQUFPLFVBQWMsSUFDcEhDLEdBQWFELElBQWMsV0FBVyxLQUFLLFVBQVUsU0FBUyxFQUM5REUsR0FDTUMsSUFDVixRQUFRLE9BQU9ELEdBQUssVUFBVSxnQkFBa0IsS0FBTyxPQUFTQSxHQUFHLFdBQWEsVUFBVSxRQUFRLEVBQ2xHLElBQUlFLEdBQWtCLEdBQUdILEdBQWEsT0FBUyxNQUFNLGNBQ2pESSxHQUFnQiwyQ0FDaEJDLEVBQWUsT0FBTyxZQUFnQixJQUFjLEtBQU0sQ0FDOUQsRUFBSSxZQUNKLFNBQVNDLEVBQUtDLEVBQUlDLEVBQU1DLEVBQU8sQ0FDN0IsSUFBSUMsRUFDSixPQUFJRCxJQUFVLFFBQWdCQyxFQUFNSCxFQUFHLGFBQWFDLENBQUksSUFBTSxLQUFPRSxFQUFNLE1BQ3ZFRCxJQUFVLEtBQU1GLEVBQUcsZ0JBQWdCQyxDQUFJLEVBQ2xDRCxFQUFHLGFBQWFDLENBQUksSUFBTUMsR0FBT0YsRUFBRyxhQUFhQyxFQUFNQyxDQUFLLEVBQzlELEtBQ1QsQ0FDQSxJQUFJRSxHQUFTLENBQUNDLEVBQVFDLEVBQVNDLElBQVMsQ0FDdEMsVUFBV0MsS0FBUUQsRUFBSyxDQUFDLEVBQUUsTUFBTSxHQUFHLEVBQ2xDQSxFQUFLLENBQUMsRUFBSUMsRUFDVixR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QUFXLEdBQUdBLENBQUssRUFBRSxDQUFDLEdBQUssT0FBTyxTQUFTLE9BQU9BLENBQUssQ0FBQyxFQUNwR3lXLEdBQVksQ0FBQzNXLEVBQUl5QyxJQUFRLENBQzNCLE1BQU12QyxFQUFRSCxFQUFLQyxFQUFJeUMsQ0FBRyxFQUMxQixPQUFPb1UsR0FBVTNXLENBQUssRUFBSSxLQUFLLElBQUksRUFBRyxPQUFPLFdBQVdBLENBQUssQ0FBQyxFQUFJLElBQ3BFLEVBQ0kwVyxHQUFZLENBQUM1VyxFQUFJeUMsRUFBS2dDLElBQVEsQ0FDaEMsR0FBSUEsSUFBUSxNQUFRb1MsR0FBVXBTLENBQUcsRUFBRzFFLEVBQUtDLEVBQUl5QyxFQUFLLEdBQUdnQyxDQUFHLEVBQUUsTUFDckQsT0FBTSxJQUFJLE1BQU0sOEJBQThCMUUsQ0FBSSxPQUFPMEUsQ0FBRyxHQUFHLENBQ3RFLEVBQ0EsT0FBQTNDLEdBQWUsT0FBTyxhQUFjMFUsRUFBb0IiLCJ4X2dvb2dsZV9pZ25vcmVMaXN0IjpbMCwxLDEwLDE4LDE5XX0=
21
+ @keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(jt)return;jt=!0;const t=Qi||zn,e=Math.max(0,Math.round(this.position*100));this.style.setProperty("--percentage",`${e}%`);let n=ns(this);if(t&&(n=`${n.replace(/\d+%$/,"")} ${e}%`),zn)for(const o of this.labels)y(o,"aria-label",n);y(this,"aria-busy",`${this.position===-1}`),y(this,"aria-label",n.trim()),y(this,"aria-labelledby",null),y(this,"aria-valuemax","100"),y(this,"aria-valuemin","0"),y(this,"aria-valuenow",`${e}`),y(this,"role",t?"img":"progressbar"),jt=!1}get labels(){const t=this.closest("label:not([for])"),e=ts(this);return t&&(t.htmlFor=e),Jn(this).querySelectorAll(`label[for="${e}"]`)}get position(){return this.value===null?-1:Math.min(this.value/this.max,1)}get value(){return no(this,"value")}set value(t){oo(this,"value",t)}get max(){return no(this,"max")||1}set max(t){oo(this,"max",t)}};to.formAssociated=!0;var eo=t=>!Number.isNaN(Number.parseFloat(`${t}`))&&Number.isFinite(Number(t)),no=(t,e)=>{const n=y(t,e);return eo(n)?Math.max(0,Number.parseFloat(n)):null},oo=(t,e,n)=>{if(n===null||eo(n))y(t,e,`${n}`);else throw new Error(`Failed to set non-numeric '${y}': '${n}'`)};return es.define("u-progress",to),S.UHTMLComboboxElement=rt,S.UHTMLTabElement=ne,S.UHTMLTabListElement=ee,S.UHTMLTabPanelElement=oe,S.UHTMLTabsElement=te,S.analytics=Yo,S.pagination=Ko,S.styles=Go,S.toggleAppExpanded=mn,S.version=Bo,Object.defineProperty(S,Symbol.toStringTag,{value:"Module"}),S}({});
22
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWNvbWJvYm94L2Rpc3QvdS1jb21ib2JveC5qcyIsIi4uL2Rlc2lnbnN5c3RlbS91dGlscy50cyIsIi4uL2Rlc2lnbnN5c3RlbS9hbmFseXRpY3MvYW5hbHl0aWNzLnRzIiwiLi4vZGVzaWduc3lzdGVtL3BhZ2luYXRpb24vcGFnaW5hdGlvbi1oZWxwZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC10b2dnbGUuanMiLCIuLi9kZXNpZ25zeXN0ZW0vYXBwL2FwcC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9icmVhZGNydW1icy9icmVhZGNydW1icy1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9kaWFsb2cvZGlhbG9nLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL2Vycm9yc3VtbWFyeS9lcnJvcnN1bW1hcnktb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kYXRhbGlzdC9kaXN0L3UtZGF0YWxpc3QuanMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGQvZmllbGQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZmllbGRzZXQvZmllbGRzZXQtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vbG9nby9sb2dvLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3BvcG92ZXIvcG9wb3Zlci1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90YWJsZS90YWJsZS1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b2dnbGVncm91cC90b2dnbGVncm91cC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b29sdGlwL3Rvb2x0aXAtb2JzZXJ2ZXIudHMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1kZXRhaWxzL2Rpc3QvdS1kZXRhaWxzLmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtcHJvZ3Jlc3MvZGlzdC91LXByb2dyZXNzLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFNBRkVfTEFCRUxMRURCWSA9IGAke0lTX0FORFJPSUQgPyBcImRhdGFcIiA6IFwiYXJpYVwifS1sYWJlbGxlZGJ5YDtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICBjcmVhdGVFbGVtZW50KFwic2xvdFwiKSxcbiAgLy8gVW5uYW1lZCBzbG90IGRvZXMgYXV0b21hdGljYWxseSByZW5kZXIgYWxsIHRvcCBlbGVtZW50IG5vZGVzXG4gIGNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiLCBjc3MpXG4pO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgYXNCdXR0b24gPSAoZXZlbnQpID0+IHtcbiAgY29uc3QgaXNDbGljayA9IFwia2V5XCIgaW4gZXZlbnQgJiYgKGV2ZW50LmtleSA9PT0gXCIgXCIgfHwgZXZlbnQua2V5ID09PSBcIkVudGVyXCIpO1xuICBpZiAoaXNDbGljaykgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgaWYgKGlzQ2xpY2sgJiYgZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIGV2ZW50LnRhcmdldC5jbGljaygpO1xuICByZXR1cm4gaXNDbGljaztcbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xuXG4vLyB1LXRhYnMudHNcbnZhciBBUklBX0NPTlRST0xTID0gXCJhcmlhLWNvbnRyb2xzXCI7XG52YXIgQVJJQV9TRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xudmFyIFVIVE1MVGFic0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgRElTUExBWV9CTE9DSyk7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFibGlzdFwiLCB0aGlzKVswXSB8fCBudWxsO1xuICB9XG4gIGdldCBzZWxlY3RlZEluZGV4KCkge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicyk7XG4gIH1cbiAgc2V0IHNlbGVjdGVkSW5kZXgoaW5kZXgpIHtcbiAgICBzZXRTZWxlY3RlZCh0aGlzLnRhYnNbaW5kZXhdKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJcIiwgdGhpcyk7XG4gIH1cbiAgZ2V0IHBhbmVscygpIHtcbiAgICByZXR1cm4gcXVlcnlXaXRob3V0TmVzdGVkKFwidS10YWJwYW5lbFwiLCB0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYkxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFibGlzdFwiKTtcbiAgICBvbih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7IGNoaWxkTGlzdDogdHJ1ZSB9KTtcbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCkgdGhpcy5oYW5kbGVFdmVudCgpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG9mZih0aGlzLCBcImNsaWNrLGtleWRvd25cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50IHx8IGV2ZW50LnR5cGUgPT09IFwibXV0YXRpb25cIikge1xuICAgICAgY29uc3QgdGFiID0gdGhpcy50YWJzW01hdGgubWF4KHRoaXMuc2VsZWN0ZWRJbmRleCwgMCldO1xuICAgICAgcmV0dXJuIHRhYiA9PSBudWxsID8gdm9pZCAwIDogdGFiLnNldEF0dHJpYnV0ZShBUklBX1NFTEVDVEVELCBcInRydWVcIik7XG4gICAgfVxuICAgIGNvbnN0IHsga2V5IH0gPSBldmVudDtcbiAgICBjb25zdCB0YWJzID0gWy4uLnRoaXMudGFic107XG4gICAgY29uc3QgcHJldiA9IHRhYnMuZmluZEluZGV4KCh0YWIpID0+IHRhYi5jb250YWlucyhldmVudC50YXJnZXQpKTtcbiAgICBsZXQgbmV4dCA9IHByZXY7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgcHJldiA9PT0gLTEpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSBzZXRTZWxlY3RlZCh0YWJzW3ByZXZdKTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIgJiYgIWFzQnV0dG9uKGV2ZW50KSkge1xuICAgICAgaWYgKGtleSA9PT0gXCJBcnJvd0Rvd25cIiB8fCBrZXkgPT09IFwiQXJyb3dSaWdodFwiKVxuICAgICAgICBuZXh0ID0gKHByZXYgKyAxKSAlIHRhYnMubGVuZ3RoO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93VXBcIiB8fCBrZXkgPT09IFwiQXJyb3dMZWZ0XCIpXG4gICAgICAgIG5leHQgPSAocHJldiB8fCB0YWJzLmxlbmd0aCkgLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkVuZFwiKSBuZXh0ID0gdGFicy5sZW5ndGggLSAxO1xuICAgICAgZWxzZSBpZiAoa2V5ID09PSBcIkhvbWVcIikgbmV4dCA9IDA7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiVGFiXCIpIG5leHQgPSBnZXRTZWxlY3RlZEluZGV4KHRhYnMpO1xuICAgICAgZWxzZSByZXR1cm47XG4gICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgdGFic1twcmV2XS50YWJJbmRleCA9IC0xO1xuICAgICAgICB0YWJzW25leHRdLnRhYkluZGV4ID0gMDtcbiAgICAgIH0pO1xuICAgICAgaWYgKGtleSAhPT0gXCJUYWJcIikge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0YWJzW25leHRdLmZvY3VzKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJzKCkge1xuICAgIHJldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWRJbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpO1xuICB9XG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgc2V0U2VsZWN0ZWQodGhpcy50YWJzW2luZGV4XSk7XG4gIH1cbn07XG52YXIgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xudmFyIFVIVE1MVGFiRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImlkXCIsIEFSSUFfU0VMRUNURUQsIEFSSUFfQ09OVFJPTFNdO1xuICB9XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGlubGluZS1ibG9jayB9XCJcbiAgICApO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFiXCIpO1xuICAgIHRoaXMudGFiSW5kZXggPSB0aGlzLnNlbGVjdGVkID8gMCA6IC0xO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoIVNLSVBfQVRUUl9DSEFOR0UgJiYgdGhpcy5zZWxlY3RlZCAmJiB0aGlzLnRhYkxpc3QpIHtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSB0cnVlO1xuICAgICAgY29uc3QgdGFicyA9IFsuLi50aGlzLnRhYkxpc3QucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpXTtcbiAgICAgIGNvbnN0IHBhbmVscyA9IHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFicGFuZWxcIiwgdGhpcy50YWJzRWxlbWVudCB8fCB0aGlzKTtcbiAgICAgIGNvbnN0IG5leHRQYW5lbCA9IGdldFBhbmVsKHRoaXMsIHBhbmVsc1t0YWJzLmluZGV4T2YodGhpcyldKTtcbiAgICAgIGlmIChuZXh0UGFuZWwpIGF0dHIobmV4dFBhbmVsLCBTQUZFX0xBQkVMTEVEQlksIHVzZUlkKHRoaXMpKTtcbiAgICAgIHRhYnMuZm9yRWFjaCgodGFiLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBwYW5lbCA9IGdldFBhbmVsKHRhYiwgcGFuZWxzW2luZGV4XSk7XG4gICAgICAgIHRhYi50YWJJbmRleCA9IHRhYiA9PT0gdGhpcyA/IDAgOiAtMTtcbiAgICAgICAgYXR0cih0YWIsIEFSSUFfU0VMRUNURUQsIGAke3RhYiA9PT0gdGhpc31gKTtcbiAgICAgICAgaWYgKHBhbmVsKSBwYW5lbC5oaWRkZW4gPSBwYW5lbCAhPT0gbmV4dFBhbmVsO1xuICAgICAgICBpZiAocGFuZWwpIGF0dHIodGFiLCBBUklBX0NPTlRST0xTLCBwYW5lbC5pZCk7XG4gICAgICB9KTtcbiAgICAgIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbiAgICB9XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYkxpc3QoKSB7XG4gICAgY29uc3QgdGFibGlzdCA9IHRoaXMucGFyZW50RWxlbWVudDtcbiAgICByZXR1cm4gKHRhYmxpc3QgPT0gbnVsbCA/IHZvaWQgMCA6IHRhYmxpc3Qubm9kZU5hbWUpID09PSBcIlUtVEFCTElTVFwiID8gdGFibGlzdCA6IG51bGw7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQpID09PSBcInRydWVcIjtcbiAgfVxuICBzZXQgc2VsZWN0ZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIEFSSUFfU0VMRUNURUQsIGAkeyEhdmFsdWV9YCk7XG4gIH1cbiAgLyoqIFJldHJpZXZlcyB0aGUgb3JkaW5hbCBwb3NpdGlvbiBvZiBhbiB0YWIgaW4gYSB0YWJsaXN0LiAqL1xuICBnZXQgaW5kZXgoKSB7XG4gICAgY29uc3QgdGFiTGlzdCA9IHRoaXMudGFiTGlzdDtcbiAgICByZXR1cm4gdGFiTGlzdCA/IFsuLi50YWJMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKV0uaW5kZXhPZih0aGlzKSA6IDA7XG4gIH1cbiAgZ2V0IHBhbmVsKCkge1xuICAgIHJldHVybiBnZXRQYW5lbCh0aGlzKTtcbiAgfVxufTtcbnZhciBVSFRNTFRhYlBhbmVsRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImhpZGRlblwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIERJU1BMQVlfQkxPQ0spO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFicGFuZWxcIik7XG4gICAgdGhpcy5oaWRkZW4gPSBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicykgPT09IC0xO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLmhpZGRlbiB8fCBpc0ZvY3VzYWJsZSh0aGlzLmZpcnN0Q2hpbGQpKVxuICAgICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIG51bGwpO1xuICAgIGVsc2UgdGhpcy50YWJJbmRleCA9IDA7XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgY29uc3QgY3NzID0gYHUtdGFiWyR7QVJJQV9DT05UUk9MU309XCIke3RoaXMuaWR9XCJdYDtcbiAgICByZXR1cm4gZ2V0Um9vdCh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKGNzcyk7XG4gIH1cbn07XG52YXIgcXVlcnlXaXRob3V0TmVzdGVkID0gKHRhZywgc2VsZikgPT4gc2VsZi5xdWVyeVNlbGVjdG9yQWxsKGAke3RhZ306bm90KDpzY29wZSB1LXRhYnBhbmVsICR7dGFnfSlgKTtcbnZhciBnZXRQYW5lbCA9ICh0YWIsIHBhbmVsKSA9PiB7XG4gIGNvbnN0IGlkMiA9IGF0dHIodGFiLCBBUklBX0NPTlRST0xTKSB8fCB1c2VJZChwYW5lbCk7XG4gIGNvbnN0IGVsID0gZ2V0Um9vdCh0YWIpLmdldEVsZW1lbnRCeUlkKGlkMik7XG4gIHJldHVybiAoZWwgPT0gbnVsbCA/IHZvaWQgMCA6IGVsLm5vZGVOYW1lKSA9PT0gXCJVLVRBQlBBTkVMXCIgPyBlbCA6IG51bGw7XG59O1xudmFyIGdldFNlbGVjdGVkSW5kZXggPSAodGFicykgPT4gWy4uLnRhYnNdLmZpbmRJbmRleCgodGFiKSA9PiBhdHRyKHRhYiwgQVJJQV9TRUxFQ1RFRCkgPT09IFwidHJ1ZVwiKTtcbnZhciBzZXRTZWxlY3RlZCA9ICh0YWIpID0+IHRhYiAmJiBhdHRyKHRhYiwgXCJhcmlhLXNlbGVjdGVkXCIsIFwidHJ1ZVwiKTtcbnZhciBpc0ZvY3VzYWJsZSA9IChlbCkgPT4gZWwgaW5zdGFuY2VvZiBFbGVtZW50ICYmICFlbC5tYXRjaGVzKCc6ZGlzYWJsZWQsW3RhYmluZGV4Xj1cIi1cIl0nKSAmJiBlbC5tYXRjaGVzKFxuICBgW2NvbnRlbnRlZGl0YWJsZV0sW2NvbnRyb2xzXSxbaHJlZl0sW3RhYmluZGV4XSxpbnB1dDpub3QoW3R5cGU9XCJoaWRkZW5cIl0pLHNlbGVjdCx0ZXh0YXJlYSxidXR0b24sc3VtbWFyeSxpZnJhbWVgXG4pO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJzXCIsIFVIVE1MVGFic0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJsaXN0XCIsIFVIVE1MVGFiTGlzdEVsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJcIiwgVUhUTUxUYWJFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtdGFicGFuZWxcIiwgVUhUTUxUYWJQYW5lbEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTFRhYkVsZW1lbnQsIFVIVE1MVGFiTGlzdEVsZW1lbnQsIFVIVE1MVGFiUGFuZWxFbGVtZW50LCBVSFRNTFRhYnNFbGVtZW50IH07XG4iLCJ2YXIgX19kZWZQcm9wID0gT2JqZWN0LmRlZmluZVByb3BlcnR5O1xudmFyIF9fZ2V0T3duUHJvcFN5bWJvbHMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzO1xudmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgX19wcm9wSXNFbnVtID0gT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZTtcbnZhciBfX2RlZk5vcm1hbFByb3AgPSAob2JqLCBrZXksIHZhbHVlKSA9PiBrZXkgaW4gb2JqID8gX19kZWZQcm9wKG9iaiwga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlIH0pIDogb2JqW2tleV0gPSB2YWx1ZTtcbnZhciBfX3NwcmVhZFZhbHVlcyA9IChhLCBiKSA9PiB7XG4gIGZvciAodmFyIHByb3AgaW4gYiB8fCAoYiA9IHt9KSlcbiAgICBpZiAoX19oYXNPd25Qcm9wLmNhbGwoYiwgcHJvcCkpXG4gICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gIGlmIChfX2dldE93blByb3BTeW1ib2xzKVxuICAgIGZvciAodmFyIHByb3Agb2YgX19nZXRPd25Qcm9wU3ltYm9scyhiKSkge1xuICAgICAgaWYgKF9fcHJvcElzRW51bS5jYWxsKGIsIHByb3ApKVxuICAgICAgICBfX2RlZk5vcm1hbFByb3AoYSwgcHJvcCwgYltwcm9wXSk7XG4gICAgfVxuICByZXR1cm4gYTtcbn07XG5cbi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19BTkRST0lEID0gSVNfQlJPV1NFUiAmJiAvYW5kcm9pZC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfRklSRUZPWCA9IElTX0JST1dTRVIgJiYgL2ZpcmVmb3gvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIEZPQ1VTX09VVExJTkUgPSBcIm91dGxpbmU6IDFweCBkb3R0ZWQ7IG91dGxpbmU6IDVweCBhdXRvIEhpZ2hsaWdodDsgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yXCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2JzZXJ2ZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgbXV0YXRpb25PYnNlcnZlciA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHJldHVybiBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICB0cnkge1xuICAgIG9ic2VydmVycy5nZXQoZWxlbWVudCkuZGlzY29ubmVjdCgpO1xuICAgIG9ic2VydmVycy5kZWxldGUoZWxlbWVudCk7XG4gIH0gY2F0Y2ggKGVycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQyLCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0MikgZWwudGV4dENvbnRlbnQgPSB0ZXh0MjtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIExJVkU7XG52YXIgTElWRV9TUl9GSVggPSAwO1xudmFyIHNwZWFrID0gKHRleHQyKSA9PiB7XG4gIGlmICghTElWRSkge1xuICAgIExJVkUgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIExJVkUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246Zml4ZWQ7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXBcIjtcbiAgICBhdHRyKExJVkUsIFwiYXJpYS1saXZlXCIsIFwiYXNzZXJ0aXZlXCIpO1xuICB9XG4gIGlmICghTElWRS5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoTElWRSk7XG4gIGlmICh0ZXh0MikgTElWRS50ZXh0Q29udGVudCA9IGAke3RleHQyfSR7TElWRV9TUl9GSVgrKyAlIDIgPyBcIlxceEEwXCIgOiBcIlwifWA7XG59O1xudmFyIHNldFZhbHVlID0gKGlucHV0LCBkYXRhLCB0eXBlID0gXCJcIikgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlLCBkYXRhLCBpbnB1dFR5cGU6IHR5cGUgfTtcbiAgY29uc3QgcHJvdG8gPSBIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImJlZm9yZWlucHV0XCIsIGV2ZW50KSk7XG4gIChfYiA9IChfYTIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBcInZhbHVlXCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwoaW5wdXQsIGRhdGEpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiaW5wdXRcIiwgZXZlbnQpKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJjaGFuZ2VcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbn07XG5cbi8vIHUtY29tYm9ib3gudHNcbnZhciBJU19QUkVTUyA9IGZhbHNlO1xudmFyIEVWRU5UUyA9IFwiYmVmb3JlaW5wdXQsYmx1cixmb2N1cyxjbGljayxpbnB1dCxrZXlkb3duLG1vdXNlZG93bixtb3VzZXVwXCI7XG52YXIgRVZFTlRfT05DRSA9IHsgb25jZTogdHJ1ZSwgcGFzc2l2ZTogdHJ1ZSB9O1xudmFyIElTX0ZJUkVGT1hfTUFDID0gSVNfRklSRUZPWCAmJiAhSVNfQU5EUk9JRDtcbnZhciBJU19NT0JJTEUgPSBJU19BTkRST0lEIHx8IElTX0lPUztcbnZhciBGQUxTRSA9IFwiZmFsc2VcIjtcbnZhciBDTElDSyA9IFwiaW5zZXJ0UmVwbGFjZW1lbnRUZXh0XCI7XG52YXIgVEVYVFMgPSB7XG4gIGFkZGVkOiBcIkFkZGVkXCIsXG4gIGVtcHR5OiBcIk5vIHNlbGVjdGVkXCIsXG4gIGZvdW5kOiBcIk5hdmlnYXRlIGxlZnQgdG8gZmluZCAlZCBzZWxlY3RlZFwiLFxuICBpbnZhbGlkOiBcIkludmFsaWQgdmFsdWVcIixcbiAgb2Y6IFwib2ZcIixcbiAgcmVtb3ZlOiBcIlByZXNzIHRvIHJlbW92ZVwiLFxuICByZW1vdmVkOiBcIlJlbW92ZWRcIlxufTtcbnZhciBVSFRNTENvbWJvYm94RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl9zcGVhayA9IFwiXCI7XG4gICAgdGhpcy5fdGV4dHMgPSBfX3NwcmVhZFZhbHVlcyh7fSwgVEVYVFMpO1xuICAgIHRoaXMuX3ZhbHVlID0gXCJcIjtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAgICAgLy8gQ29udGVudCBzbG90XG4gICAgICBjcmVhdGVFbGVtZW50KFxuICAgICAgICBcInN0eWxlXCIsXG4gICAgICAgIGA6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jazsgY3Vyc29yOiBwb2ludGVyOyAtd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMCkgfSAvKiBNdXN0IGJlIGRpc3BsYXkgYmxvY2sgaW4gU2FmYXJpIHRvIGFsbG93IGZvY3VzIGluc2lkZSAqL1xuXHRcdFx0XHQ6aG9zdCg6bm90KFtkYXRhLW11bHRpcGxlXSkpIDo6c2xvdHRlZChkYXRhKSxcblx0XHRcdFx0Omhvc3QoW2RhdGEtbXVsdGlwbGU9XCJmYWxzZVwiXSkgOjpzbG90dGVkKGRhdGEpIHsgZGlzcGxheTogbm9uZSB9IC8qIEhpZGUgZGF0YSBpZiBub3QgbXVsdGlwbGUgKi9cblx0XHRcdFx0OjpzbG90dGVkKGlucHV0W2lucHV0bW9kZT1cIm5vbmVcIl0pIHsgb3V0bGluZTogbm9uZSB9IC8qIEhpZGUgdGVtcG9yYXJ5IGZvdWNzIG91dGxpbmUgZmxhc2ggKi9cblx0XHRcdFx0OjpzbG90dGVkKGRlbCkgeyB0ZXh0LWRlY29yYXRpb246IG5vbmUgfVxuXHRcdFx0XHQ6OnNsb3R0ZWQoZGF0YTpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGlubGluZS1ibG9jazsgcG9pbnRlci1ldmVudHM6IG5vbmUgfVxuICAgICAgICA6OnNsb3R0ZWQoZGF0YSk6OmFmdGVyIHsgY29udGVudDogJ1xcXFwwMEQ3JzsgY29udGVudDogJ1xcXFwwMEQ3JyAvICcnOyBwYWRkaW5nLWlubGluZTogLjVjaDsgcG9pbnRlci1ldmVudHM6IGF1dG8gfVxuICAgICAgICA6OnNsb3R0ZWQoZGF0YTpmb2N1cykgeyAke0ZPQ1VTX09VVExJTkV9IH1gXG4gICAgICApXG4gICAgKTtcbiAgfVxuICAvLyBMb2NhbGx5IHN0b3JlIHZhbHVlIHRvIHN0b3JlIHZhbHVlIGJlZm9yZSBpbnB1dC1jbGlja1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMoVEVYVFMpLm1hcCgoa2V5KSA9PiBgZGF0YS1zci0ke2tleX1gKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLl9yb290ID0gZ2V0Um9vdCh0aGlzKTtcbiAgICBvbih0aGlzLCBFVkVOVFMsIHRoaXMsIHRydWUpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgeyBjaGlsZExpc3Q6IHRydWUsIHN1YnRyZWU6IHRydWUgfSk7XG4gICAgc2V0VGltZW91dChyZW5kZXIsIDAsIHRoaXMpO1xuICAgIHNldFRpbWVvdXQoc3luY0lucHV0VmFsdWUsIDAsIHRoaXMpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBfLCB2YWwpIHtcbiAgICBjb25zdCB0ZXh0MiA9IHByb3Auc3BsaXQoXCJkYXRhLXNyLVwiKVsxXTtcbiAgICBpZiAoVEVYVFNbdGV4dDJdKSB0aGlzLl90ZXh0c1t0ZXh0Ml0gPSB2YWwgfHwgVEVYVFNbdGV4dDJdO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywgZmFsc2UpO1xuICAgIG9mZih0aGlzLCBFVkVOVFMsIHRoaXMsIHRydWUpO1xuICAgIHRoaXMuX2l0ZW1zID0gdGhpcy5fY2xlYXIgPSB0aGlzLl9mb2N1cyA9IHRoaXMuX2NvbnRyb2wgPSB2b2lkIDA7XG4gICAgdGhpcy5fbGlzdCA9IHRoaXMuX29wdGlvbnMgPSB0aGlzLl9yb290ID0gdm9pZCAwO1xuICB9XG4gIGhhbmRsZUV2ZW50KGV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJlZm9yZWlucHV0XCIpIHRoaXMuX3ZhbHVlID0gKHRhcmdldCA9PSBudWxsID8gdm9pZCAwIDogdGFyZ2V0LnZhbHVlKSB8fCBcIlwiO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJsdXJcIikgb25CbHVyKHRoaXMpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIpIG9uQ2xpY2sodGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImZvY3VzXCIpIG9uRm9jdXModGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImlucHV0XCIpIG9uSW5wdXQodGhpcywgZXZlbnQpO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIikgb25LZXlEb3duKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJtb3VzZWRvd25cIikgSVNfUFJFU1MgPSB0aGlzLmNvbnRhaW5zKHRhcmdldCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwibW91c2V1cFwiKSBJU19QUkVTUyA9IGZhbHNlO1xuICAgIGlmIChldmVudC50eXBlID09PSBcIm11dGF0aW9uXCIpIHJlbmRlcih0aGlzLCBldmVudCk7XG4gIH1cbiAgZ2V0IG11bHRpcGxlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gYXR0cih0aGlzLCBcImRhdGEtbXVsdGlwbGVcIikpICE9IG51bGwgPyBfYTIgOiBGQUxTRSkgIT09IEZBTFNFO1xuICB9XG4gIHNldCBtdWx0aXBsZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJkYXRhLW11bHRpcGxlXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBjcmVhdGFibGUoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKChfYTIgPSBhdHRyKHRoaXMsIFwiZGF0YS1jcmVhdGFibGVcIikpICE9IG51bGwgPyBfYTIgOiBGQUxTRSkgIT09IEZBTFNFO1xuICB9XG4gIHNldCBjcmVhdGFibGUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwiZGF0YS1jcmVhdGFibGVcIiwgdmFsdWUgPyBcIlwiIDogbnVsbCk7XG4gIH1cbiAgZ2V0IGNvbnRyb2woKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpXG4gICAgICB0aGlzLl9jb250cm9sID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwiaW5wdXRcIik7XG4gICAgcmV0dXJuIHRoaXMuX2NvbnRyb2w7XG4gIH1cbiAgZ2V0IGxpc3QoKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fbGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpXG4gICAgICB0aGlzLl9saXN0ID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwidS1kYXRhbGlzdCxkYXRhbGlzdFwiKTtcbiAgICByZXR1cm4gdGhpcy5fbGlzdDtcbiAgfVxuICBnZXQgY2xlYXIoKSB7XG4gICAgdmFyIF9hMjtcbiAgICBpZiAoISgoX2EyID0gdGhpcy5fY2xlYXIpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuaXNDb25uZWN0ZWQpKSB0aGlzLl9jbGVhciA9IHRoaXMucXVlcnlTZWxlY3RvcihcImRlbFwiKTtcbiAgICByZXR1cm4gdGhpcy5fY2xlYXI7XG4gIH1cbiAgZ2V0IGl0ZW1zKCkge1xuICAgIGlmICghdGhpcy5faXRlbXMpIHRoaXMuX2l0ZW1zID0gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShcImRhdGFcIik7XG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zO1xuICB9XG4gIGdldCBvcHRpb25zKCkge1xuICAgIHZhciBfYTIsIF9iO1xuICAgIGlmICghdGhpcy5fb3B0aW9ucykge1xuICAgICAgY29uc3QgdGFnID0gKChfYTIgPSB0aGlzLmxpc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIubm9kZU5hbWUpID09PSBcIlUtREFUQUxJU1RcIiA/IFwidS1vcHRpb25cIiA6IFwib3B0aW9uXCI7XG4gICAgICB0aGlzLl9vcHRpb25zID0gKF9iID0gdGhpcy5saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbnM7XG4gIH1cbiAgZ2V0IHZhbHVlcygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuaXRlbXNdLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSk7XG4gIH1cbn07XG52YXIgdGV4dCA9IChlbCkgPT4ge1xuICB2YXIgX2EyO1xuICByZXR1cm4gKChfYTIgPSBlbCA9PSBudWxsID8gdm9pZCAwIDogZWwudGV4dENvbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xufTtcbnZhciBpc0RhdGEgPSAoZWwpID0+IGVsIGluc3RhbmNlb2YgSFRNTERhdGFFbGVtZW50O1xudmFyIHJlbmRlciA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgY29uc3QgeyBfZm9jdXMsIF90ZXh0cywgaXRlbXMsIGNvbnRyb2wsIGxpc3QsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBsZXQgbGFiZWwgPSBgJHt0ZXh0KChfYTIgPSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmxhYmVscykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMlswXSl9LCAke211bHRpcGxlID8gaXRlbXMubGVuZ3RoID8gX3RleHRzLmZvdW5kLnJlcGxhY2UoXCIlZFwiLCBgJHtpdGVtcy5sZW5ndGh9YCkgOiBfdGV4dHMuZW1wdHkgOiBcIlwifWA7XG4gIGNvbnN0IGVkaXRzID0gW107XG4gIGZvciAoY29uc3QgeyBhZGRlZE5vZGVzLCByZW1vdmVkTm9kZXMgfSBvZiAoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LmRldGFpbCkgfHwgW10pIHtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIGFkZGVkTm9kZXMpIGlmIChpc0RhdGEoZWwpKSBlZGl0cy51bnNoaWZ0KGVsKTtcbiAgICBmb3IgKGNvbnN0IGVsIG9mIHJlbW92ZWROb2RlcykgaWYgKGlzRGF0YShlbCkpIGVkaXRzLnB1c2goZWwpO1xuICB9XG4gIGNvbnN0IHNob3VsZEFubm91bmNlID0gbXVsdGlwbGUgPyBlZGl0cy5sZW5ndGggPT09IDEgOiBlZGl0c1swXSA9PT0gX2ZvY3VzO1xuICBpZiAoX2ZvY3VzICYmIGNvbnRyb2wgJiYgc2hvdWxkQW5ub3VuY2UpIHtcbiAgICBjb25zdCBpbnB1dE1vZGUgPSBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIpO1xuICAgIGNvbnN0IG5leHRGb2N1cyA9IGlzRGF0YShfZm9jdXMpID8gY29udHJvbCA6IF9mb2N1cztcbiAgICBzZWxmLl9zcGVhayA9IGAke190ZXh0c1tlZGl0c1swXS5pc0Nvbm5lY3RlZCA/IFwiYWRkZWRcIiA6IFwicmVtb3ZlZFwiXX0gJHt0ZXh0KGVkaXRzWzBdKX0sIGA7XG4gICAgaWYgKElTX01PQklMRSB8fCBfZm9jdXMgPT09IGNvbnRyb2wpIHNwZWFrKHNlbGYuX3NwZWFrKTtcbiAgICBpZiAoY29udHJvbCAhPT0gbmV4dEZvY3VzKSB7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiLCBudWxsKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgXCJub25lXCIpO1xuICAgICAgbGFiZWwgPSBcIlxceEEwXCI7XG4gICAgICBjb250cm9sLmZvY3VzKCk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIF9hMztcbiAgICAgIGF0dHIoY29udHJvbCwgXCJhcmlhLWV4cGFuZGVkXCIsIFwidHJ1ZVwiKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgaW5wdXRNb2RlKTtcbiAgICAgIChfYTMgPSBuZXh0Rm9jdXMgPT0gbnVsbCA/IHZvaWQgMCA6IG5leHRGb2N1cy5mb2N1cykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy5jYWxsKG5leHRGb2N1cyk7XG4gICAgICBzZWxmLl9zcGVhayA9IFwiXCI7XG4gICAgICBpZiAoSVNfRklSRUZPWF9NQUMpIG9uKHNlbGYsIFwiYmx1clwiLCAoKSA9PiByZW5kZXIoc2VsZiksIEVWRU5UX09OQ0UpO1xuICAgICAgZWxzZSBzZXRUaW1lb3V0KHJlbmRlciwgMTAwLCBzZWxmKTtcbiAgICB9LCAxMDApO1xuICB9XG4gIGxldCBpZHggPSAwO1xuICBmb3IgKGNvbnN0IGl0ZW0gb2YgaXRlbXMpIHtcbiAgICBjb25zdCBsYWJlbDIgPSB0ZXh0KGl0ZW0pO1xuICAgIGNvbnN0IHZhbHVlID0gaXRlbS52YWx1ZSB8fCBsYWJlbDI7XG4gICAgY29uc3QgYXJpYSA9IGAke3NlbGYuX3NwZWFrfSR7bGFiZWwyfSwgJHtfdGV4dHMucmVtb3ZlfSwgJHsrK2lkeH0gJHtfdGV4dHMub2Z9ICR7aXRlbXMubGVuZ3RofWA7XG4gICAgYXR0cihpdGVtLCBcInJvbGVcIiwgXCJidXR0b25cIik7XG4gICAgYXR0cihpdGVtLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgICBhdHRyKGl0ZW0sIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICBhdHRyKGl0ZW0sIFwiYXJpYS1sYWJlbFwiLCBhcmlhKTtcbiAgfVxuICBpZiAoIW11bHRpcGxlICYmIGlkeCA+IDEpXG4gICAgY29uc29sZS53YXJuKFwidS1jb21ib2JveDogTXVsdGlwbGUgPGRhdGE+IGZvdW5kIGluIHNpbmdsZSBtb2RlLlwiKTtcbiAgaWYgKGxpc3QpIGF0dHIobGlzdCwgXCJhcmlhLW11bHRpc2VsZWN0YWJsZVwiLCBgJHttdWx0aXBsZX1gKTtcbiAgaWYgKGNvbnRyb2wpIGF0dHIoY29udHJvbCwgXCJsaXN0XCIsIHVzZUlkKGxpc3QpKTtcbiAgaWYgKGNvbnRyb2wpIGF0dHIoY29udHJvbCwgXCJhcmlhLWxhYmVsXCIsIGAke3NlbGYuX3NwZWFrfSR7bGFiZWx9YCk7XG4gIGNvbnN0IHNlbGVjdCA9IHNlbGYucXVlcnlTZWxlY3RvcihcInNlbGVjdFwiKTtcbiAgaWYgKHNlbGVjdCkgc2VsZWN0Lm11bHRpcGxlID0gbXVsdGlwbGU7XG4gIGlmIChzZWxlY3QpIHNlbGVjdC50ZXh0Q29udGVudCA9IFwiXCI7XG4gIHNlbGVjdCA9PSBudWxsID8gdm9pZCAwIDogc2VsZWN0LmFwcGVuZCguLi5zZWxmLnZhbHVlcy5tYXAoKHZhbCkgPT4gbmV3IE9wdGlvbih2YWwsIHZhbCwgdHJ1ZSwgdHJ1ZSkpKTtcbiAgc3luY0NsZWFyV2l0aElucHV0KHNlbGYpO1xuICBzeW5jT3B0aW9uc1dpdGhJdGVtcyhzZWxmKTtcbiAgKF9iID0gbXV0YXRpb25PYnNlcnZlcihzZWxmKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLnRha2VSZWNvcmRzKCk7XG59O1xudmFyIHN5bmNDbGVhcldpdGhJbnB1dCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChzZWxmLmNsZWFyKSBhdHRyKHNlbGYuY2xlYXIsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgaWYgKHNlbGYuY2xlYXIpIHNlbGYuY2xlYXIuaGlkZGVuID0gISgoX2EyID0gc2VsZi5jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnZhbHVlKTtcbn07XG52YXIgc3luY09wdGlvbnNXaXRoSXRlbXMgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF9zcGVhaywgb3B0aW9ucyA9IFtdLCB2YWx1ZXMgfSA9IHNlbGY7XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIHtcbiAgICBjb25zdCB2YWx1ZSA9IChfYTIgPSBhdHRyKG9wdCwgXCJ2YWx1ZVwiKSkgIT0gbnVsbCA/IF9hMiA6IHRleHQob3B0KTtcbiAgICBhdHRyKG9wdCwgXCJhcmlhLWxhYmVsXCIsIF9zcGVhayA/IGAke19zcGVha30ke3RleHQob3B0KX1gIDogbnVsbCk7XG4gICAgYXR0cihvcHQsIFwic2VsZWN0ZWRcIiwgdmFsdWVzLmluY2x1ZGVzKHZhbHVlKSA/IFwiXCIgOiBudWxsKTtcbiAgfVxufTtcbnZhciBzeW5jSW5wdXRWYWx1ZSA9IChzZWxmKSA9PiB7XG4gIGNvbnN0IHsgbXVsdGlwbGUsIGNvbnRyb2wsIGl0ZW1zIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9IHRleHQoaXRlbXNbMF0pO1xuICBpZiAoIW11bHRpcGxlICYmIGNvbnRyb2wgJiYgdmFsdWUgIT09IGNvbnRyb2wudmFsdWUpXG4gICAgc2V0VmFsdWUoY29udHJvbCwgdmFsdWUsIFwiaW5zZXJ0VGV4dFwiKTtcbn07XG52YXIgZGlzcGF0Y2hNYXRjaCA9IChzZWxmLCBzeW5jID0gdHJ1ZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF90ZXh0cywgb3B0aW9ucyA9IFtdLCBjcmVhdGFibGUsIGNvbnRyb2wsIGl0ZW1zLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgdmFsdWUgPSAoKF9hMiA9IGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBxdWVyeSA9IHZhbHVlLnRvTG93ZXJDYXNlKCkgfHwgbnVsbDtcbiAgbGV0IG1hdGNoID0gWy4uLm9wdGlvbnNdLmZpbmQoKG8pID0+IG8ubGFiZWwudHJpbSgpLnRvTG93ZXJDYXNlKCkgPT09IHF1ZXJ5KTtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGRldGFpbDogbWF0Y2ggfTtcbiAgaWYgKHNlbGYuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoXCJiZWZvcmVtYXRjaFwiLCBldmVudCkpKVxuICAgIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIG9wdC5zZWxlY3RlZCA9IG9wdCA9PT0gbWF0Y2g7XG4gIG1hdGNoID0gWy4uLm9wdGlvbnNdLmZpbmQoKG8pID0+IG8uc2VsZWN0ZWQpO1xuICBzeW5jT3B0aW9uc1dpdGhJdGVtcyhzZWxmKTtcbiAgaWYgKG1hdGNoKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgbWF0Y2gsIGZhbHNlLCAhIXN5bmMpO1xuICBpZiAoY3JlYXRhYmxlICYmIHZhbHVlKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgeyB2YWx1ZSB9LCBmYWxzZSk7XG4gIGlmICghbXVsdGlwbGUgJiYgaXRlbXNbMF0pIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW1zWzBdLCB0cnVlLCBmYWxzZSk7XG4gIGlmIChzeW5jKSBzcGVhayhfdGV4dHMuaW52YWxpZCk7XG59O1xudmFyIGRpc3BhdGNoQ2hhbmdlID0gKHNlbGYsIGl0ZW0sIHJlbW92YWJsZSA9IHRydWUsIHN5bmMgPSB0cnVlKSA9PiB7XG4gIGNvbnN0IHsgY29udHJvbCwgaXRlbXMsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCBhZGQgPSBjcmVhdGVFbGVtZW50KFwiZGF0YVwiLCBpdGVtLmxhYmVsIHx8IGl0ZW0udmFsdWUsIHtcbiAgICB2YWx1ZTogaXRlbS52YWx1ZVxuICB9KTtcbiAgY29uc3QgcmVtb3ZlID0gWy4uLml0ZW1zXS5maW5kKChpKSA9PiBpLnZhbHVlID09PSBpdGVtLnZhbHVlKTtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGRldGFpbDogcmVtb3ZlIHx8IGFkZCB9O1xuICBjb25zdCBza2lwID0gcmVtb3ZlICYmICFyZW1vdmFibGU7XG4gIGlmICghc2tpcCAmJiBzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiYmVmb3JlY2hhbmdlXCIsIGV2ZW50KSkpIHtcbiAgICBpZiAoIW11bHRpcGxlKSBmb3IgKGNvbnN0IGl0ZW0yIG9mIFsuLi5pdGVtc10pIGl0ZW0yLnJlbW92ZSgpO1xuICAgIGlmIChyZW1vdmUpIHJlbW92ZS5yZW1vdmUoKTtcbiAgICBlbHNlIGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYmVmb3JlYmVnaW5cIiwgYWRkKTtcbiAgICBzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiYWZ0ZXJjaGFuZ2VcIiwgZXZlbnQpKTtcbiAgfVxuICBpZiAoc3luYykgc2V0VGltZW91dChzeW5jSW5wdXRWYWx1ZSwgMTAsIHNlbGYpO1xufTtcbnZhciBvbkZvY3VzID0gKHNlbGYsIHsgdGFyZ2V0IH0pID0+IHtcbiAgaWYgKHRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBzZWxmLl9mb2N1cyA9IHRhcmdldDtcbiAgc3BlYWsoKTtcbn07XG52YXIgb25CbHVyID0gKHNlbGYpID0+IElTX1BSRVNTIHx8IHNldFRpbWVvdXQob25CbHVycmVkLCAwLCBzZWxmKTtcbnZhciBvbkJsdXJyZWQgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoIXNlbGYuX2ZvY3VzIHx8IHNlbGYuY29udGFpbnMoKF9hMiA9IHNlbGYuX3Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuYWN0aXZlRWxlbWVudCkpIHJldHVybjtcbiAgc2VsZi5fZm9jdXMgPSB2b2lkIDA7XG4gIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xufTtcbnZhciBvbkNsaWNrID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIGNvbnN0IHsgY2xpZW50WDogeCwgY2xpZW50WTogeSwgdGFyZ2V0IH0gPSBldmVudDtcbiAgY29uc3QgeyBjbGVhciwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGlmIChjbGVhciA9PSBudWxsID8gdm9pZCAwIDogY2xlYXIuY29udGFpbnModGFyZ2V0KSkge1xuICAgIGlmIChjb250cm9sKSBzZXRWYWx1ZShjb250cm9sLCBcIlwiLCBcImRlbGV0ZUNvbnRlbnRCYWNrd2FyZFwiKTtcbiAgICByZXR1cm4gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpO1xuICB9XG4gIGZvciAoY29uc3QgaXRlbSBvZiBpdGVtcykge1xuICAgIGNvbnN0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0IH0gPSBpdGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGlmIChpdGVtLmNvbnRhaW5zKHRhcmdldCkpIHJldHVybiBkaXNwYXRjaENoYW5nZShzZWxmLCBpdGVtKTtcbiAgICBpZiAoeSA+PSB0b3AgJiYgeSA8PSBib3R0b20gJiYgeCA+PSBsZWZ0ICYmIHggPD0gcmlnaHQpIHJldHVybiBpdGVtLmZvY3VzKCk7XG4gIH1cbiAgaWYgKHRhcmdldCA9PT0gc2VsZikgY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpO1xufTtcbnZhciBvbklucHV0ID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgb3B0aW9ucyA9IFtdLCBjb250cm9sLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgdmFsdWUgPSAoKF9hMiA9IGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wudmFsdWUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICBjb25zdCBpc0NsaWNrID0gZXZlbnQgaW5zdGFuY2VvZiBJbnB1dEV2ZW50ID8gIWV2ZW50LmlucHV0VHlwZSB8fCBldmVudC5pbnB1dFR5cGUgPT09IENMSUNLIDogISF2YWx1ZTtcbiAgaWYgKGlzQ2xpY2spIHtcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgICBpZiAoY29udHJvbCkgY29udHJvbC52YWx1ZSA9IHNlbGYuX3ZhbHVlO1xuICAgIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpXG4gICAgICBpZiAob3B0LnZhbHVlICYmIG9wdC52YWx1ZSA9PT0gdmFsdWUpXG4gICAgICAgIHJldHVybiBkaXNwYXRjaENoYW5nZShzZWxmLCBvcHQsIG11bHRpcGxlKTtcbiAgfSBlbHNlIGlmICghbXVsdGlwbGUpIGRpc3BhdGNoTWF0Y2goc2VsZiwgZmFsc2UpO1xuICBzeW5jQ2xlYXJXaXRoSW5wdXQoc2VsZik7XG59O1xudmFyIG9uS2V5RG93biA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoZXZlbnQuYWx0S2V5IHx8IGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSB8fCBldmVudC5zaGlmdEtleSkgcmV0dXJuO1xuICBjb25zdCB7IGNsZWFyLCBjb250cm9sLCBpdGVtcyB9ID0gc2VsZjtcbiAgY29uc3QgeyBrZXksIHJlcGVhdCwgdGFyZ2V0IH0gPSBldmVudDtcbiAgY29uc3QgaXNDb250cm9sID0gY29udHJvbCAmJiBjb250cm9sID09PSB0YXJnZXQ7XG4gIGNvbnN0IGluVGV4dCA9IGlzQ29udHJvbCAmJiAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5zZWxlY3Rpb25FbmQpO1xuICBsZXQgaW5kZXggPSBpc0NvbnRyb2wgPyBpdGVtcy5sZW5ndGggOiBbLi4uaXRlbXNdLmluZGV4T2YodGFyZ2V0KTtcbiAgaWYgKGlzQ29udHJvbCAmJiBrZXkgPT09IFwiVGFiXCIgJiYgY2xlYXIgJiYgIWNsZWFyLmhpZGRlbikge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgY2xlYXIudGFiSW5kZXggPSAtMTtcbiAgICBjbGVhci5mb2N1cygpO1xuICAgIG9uKGNsZWFyLCBcImJsdXJcIiwgKCkgPT4gYXR0cihjbGVhciwgXCJ0YWJpbmRleFwiLCBudWxsKSwgRVZFTlRfT05DRSk7XG4gIH1cbiAgaWYgKCFpc0NvbnRyb2wgJiYgYXNCdXR0b24oZXZlbnQpIHx8IGluZGV4ID09PSAtMSkgcmV0dXJuO1xuICBpZiAoa2V5ID09PSBcIkFycm93UmlnaHRcIiAmJiAhaXNDb250cm9sKSBpbmRleCArPSAxO1xuICBlbHNlIGlmIChrZXkgPT09IFwiQXJyb3dMZWZ0XCIgJiYgIWluVGV4dCkgaW5kZXggLT0gMTtcbiAgZWxzZSBpZiAoa2V5ID09PSBcIkVudGVyXCIgJiYgaXNDb250cm9sKSB7XG4gICAgY29uc3QgZm9ybSA9IGF0dHIoY29udHJvbCwgXCJmb3JtXCIpO1xuICAgIGF0dHIoY29udHJvbCwgXCJmb3JtXCIsIFwiI1wiKTtcbiAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gYXR0cihjb250cm9sLCBcImZvcm1cIiwgZm9ybSkpO1xuICAgIHJldHVybiBkaXNwYXRjaE1hdGNoKHNlbGYpO1xuICB9IGVsc2UgaWYgKChrZXkgPT09IFwiQmFja3NwYWNlXCIgfHwga2V5ID09PSBcIkRlbGV0ZVwiKSAmJiAhaW5UZXh0KSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICBpZiAoIXJlcGVhdCAmJiBpdGVtc1tpbmRleF0pIHJldHVybiBkaXNwYXRjaENoYW5nZShzZWxmLCBpdGVtc1tpbmRleF0pO1xuICAgIGlmIChpc0NvbnRyb2wpIGluZGV4IC09IDE7XG4gIH0gZWxzZSByZXR1cm4gaXNDb250cm9sIHx8IChjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCkpO1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAoX2EyID0gaXRlbXNbTWF0aC5tYXgoMCwgaW5kZXgpXSB8fCBjb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1jb21ib2JveFwiLCBVSFRNTENvbWJvYm94RWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MQ29tYm9ib3hFbGVtZW50IH07XG4iLCJpbXBvcnQgeyBjbHN4IH0gZnJvbSBcImNsc3hcIjtcblxuZXhwb3J0IGNvbnN0IFFVSUNLX0VWRU5UID0geyBjYXB0dXJlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH07XG5leHBvcnQgY29uc3QgSVNfQlJPV1NFUiA9XG5cdHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiO1xuXG4vLyBUT0RPOiBEb2N1bWVudGF0aW9uIGZvciBwcmV0dHlOdW1iZXJcbmxldCBJTlRMX05VTTogSW50bC5OdW1iZXJGb3JtYXQgfCB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gcHJldHR5TnVtYmVyKG51bWJlcjogbnVtYmVyIHwgc3RyaW5nKSB7XG5cdGlmICghSU5UTF9OVU0pXG5cdFx0SU5UTF9OVU0gPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoXG5cdFx0XHQoSVNfQlJPV1NFUiAmJiBhdHRyKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgXCJsYW5nXCIpKSB8fCBcIm5vXCIsXG5cdFx0KTtcblx0cmV0dXJuIElOVExfTlVNLmZvcm1hdChOdW1iZXIobnVtYmVyKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWJvdW5jZTxUIGV4dGVuZHMgdW5rbm93bltdPihcblx0Y2FsbGJhY2s6ICguLi5hcmdzOiBUKSA9PiB2b2lkLFxuXHRkZWxheTogbnVtYmVyLFxuKSB7XG5cdGxldCB0aW1lcjogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0VGltZW91dD47XG5cblx0cmV0dXJuICguLi5hcmdzOiBUKSA9PiB7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVyKTtcblx0XHR0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4gY2FsbGJhY2soLi4uYXJncyksIGRlbGF5KTtcblx0fTtcbn1cblxuLyoqXG4gKiBhdHRyXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IGdldCwgc2V0IGFuZCByZW1vdmUgYXR0cmlidXRlc1xuICogQHBhcmFtIGVsIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIG5hbWUgVGhlIGF0dHJpYnV0ZSBuYW1lIHRvIGdldCwgc2V0IG9yIHJlbW92ZSwgb3IgYSBvYmplY3QgdG8gc2V0IG11bHRpcGxlIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB2YWx1ZSBBIHZhbGlkIGF0dHJpYnV0ZSB2YWx1ZSBvciBudWxsIHRvIHJlbW92ZSBhdHRyaWJ1dGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dHIoXG5cdGVsOiBFbGVtZW50LFxuXHRuYW1lOiBzdHJpbmcsXG5cdHZhbHVlPzogc3RyaW5nIHwgbnVsbCxcbik6IHN0cmluZyB8IG51bGwge1xuXHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKSA/PyBudWxsOyAvLyBGYWxsYmFjayB0byBudWxsIG9ubHkgaWYgZWwgaXMgdW5kZWZpbmVkXG5cdGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuXHRlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuXHRyZXR1cm4gbnVsbDtcbn1cblxuLyoqXG4gKiB1c2VJZFxuICogQHJldHVybiBBIGdlbmVyYXRlZCB1bmlxdWUgSURcbiAqL1xubGV0IGlkID0gMDtcbmNvbnN0IFVVSUQgPSBgJHtEYXRlLm5vdygpLnRvU3RyaW5nKDM2KX0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnNsaWNlKDIsIDUpfWA7XG5leHBvcnQgZnVuY3Rpb24gdXNlSWQoZWw6IEVsZW1lbnQpIHtcblx0aWYgKCFlbC5pZCkgZWwuaWQgPSBgJHtVVUlEfSR7KytpZH1gO1xuXHRyZXR1cm4gZWwuaWQ7XG59XG5cbi8vIEludGVybmFsIGhlbHBlciBmb3Igb24gLyBvZmZcbmNvbnN0IGV2ZW50cyA9IChcblx0YWN0aW9uOiBcImFkZFwiIHwgXCJyZW1vdmVcIixcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0cmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUuYWRkRXZlbnRMaXN0ZW5lcj4sXG4pOiB2b2lkID0+IHtcblx0Zm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG5cdFx0cmVzdFswXSA9IHR5cGU7XG5cdFx0ZWxlbWVudFtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdKC4uLnJlc3QpO1xuXHR9XG59O1xuXG4vKipcbiAqIG9uXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9uID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG5cbi8qKlxuICogb2ZmXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9mZiA9IChcblx0ZWxlbWVudDogTm9kZSB8IFdpbmRvdyxcblx0Li4ucmVzdDogUGFyYW1ldGVyczx0eXBlb2YgRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj5cbik6IHZvaWQgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xuXG4vKipcbiAqIFNjcm9sbGVyIHRhcmdlcyBoZWxwaW5nIGFuY2hvclBvc2l0aW9uXG4gKi9cbmNvbnN0IFNDUk9MTEVSID0gSVNfQlJPV1NFUiA/IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIikgOiBudWxsOyAvLyBVc2VkIHRvIGVuc3VyZSB3ZSBoYXZlIHNjcm9sbGFiaWxpdHkgdW5kZXJcbmNvbnN0IFRBUkdFVFMgPSBuZXcgTWFwPEVsZW1lbnQsICgpID0+IHZvaWQ+KCk7IC8vIFN0b3JlIGN1cnJlbnQgb3BlbiBwb3BwZXJzIGFuZCB0aGVpciB1cGRhdGUgZnVuY3Rpb25zXG5jb25zdCBUQVJHRVRTX1VQREFURSA9ICgpID0+IHtcblx0Zm9yIChjb25zdCBbXywgdXBkYXRlXSBvZiBUQVJHRVRTKSB1cGRhdGUoKTtcbn07XG5cbmlmIChTQ1JPTExFUikge1xuXHRTQ1JPTExFUi5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtwYWRkaW5nOjFweDt0b3A6MDtsZWZ0OjBweFwiO1xuXHRvbih3aW5kb3csIFwibG9hZCxyZXNpemUsc2Nyb2xsXCIsIFRBUkdFVFNfVVBEQVRFLCBRVUlDS19FVkVOVCk7XG59XG5cbi8qKlxuICogYW5jaG9yUG9zaXRpb25cbiAqIEBwYXJhbSB0YXJnZXQgVGhlIEVsZW1lbnQgdG8gcG9zaXRpb25cbiAqIEBwYXJhbSBhbmNob3IgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIGFuY2hvclxuICovXG5jb25zdCBQT1NJVElPTiA9IHsgdG9wOiAwLCByaWdodDogMSwgYm90dG9tOiAyLCBsZWZ0OiAzIH07IC8vIFNwZWVkIHVwIGJ5IHVzaW5nIGEgY29uc3QgbWFwXG5cbmV4cG9ydCBmdW5jdGlvbiBhbmNob3JQb3NpdGlvbihcblx0dGFyZ2V0OiBIVE1MRWxlbWVudCxcblx0YW5jaG9yOiBFbGVtZW50IHwgZmFsc2UsXG5cdHBvc2l0aW9uPzogc3RyaW5nIHwgbnVtYmVyLFxuXHRmb3JjZT86IGJvb2xlYW4sXG4pIHtcblx0aWYgKGFuY2hvciA9PT0gZmFsc2UgfHwgIWFuY2hvci5pc0Nvbm5lY3RlZCB8fCAhdGFyZ2V0LmlzQ29ubmVjdGVkKVxuXHRcdHJldHVybiBUQVJHRVRTLmRlbGV0ZSh0YXJnZXQpOyAvLyBTdG9wIHdhdGNoaW5nIGlmIGFuY2hvciBpcyByZW1vdmVkIGZyb20gRE9NXG5cdGlmICghU0NST0xMRVI/LmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChTQ1JPTExFUiB8fCBcIlwiKTsgLy8gRW5zdXJlIHdlIGhhdmUgdGhlIHNjcm9sbGVyXG5cdGlmICghVEFSR0VUUy5oYXModGFyZ2V0KSkge1xuXHRcdC8vIFNldHVwIG5ldyB0YXJnZXQgb3IgdXBkYXRlIHBvc2l0aW9uXG5cdFx0Y29uc3QgcGxhY2UgPVxuXHRcdFx0UE9TSVRJT05bcG9zaXRpb24gYXMga2V5b2YgdHlwZW9mIFBPU0lUSU9OXSA/PyBQT1NJVElPTi5ib3R0b207IC8vIFVzZSBDU1MgcHJvcGVydHkgdG8gc3RvcmUgcG9zaXRpb24gZm9yIG1vcmUgZmxleGliaWxpdHlcblx0XHRyZXR1cm4gVEFSR0VUUy5zZXQodGFyZ2V0LCAoKSA9PlxuXHRcdFx0YW5jaG9yUG9zaXRpb24odGFyZ2V0LCBhbmNob3IsIHBsYWNlLCBmb3JjZSksXG5cdFx0KS5nZXQodGFyZ2V0KT8uKCk7IC8vIFN0YXJ0IHdhdGNoaW5nIGlmIG5vdCBhbHJlYWR5IHdhdGNoaW5nXG5cdH1cblxuXHRjb25zdCBpc0hUTUxBbmNob3IgPSBhbmNob3IgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDsgLy8gU1ZHIG9yIFhNTCBlbGVtZW50cyBkb2VzIG5vdCBoYXZlIG9mZnNldFdpZHRoIG9yIG9mZnNldEhlaWdodFxuXHRjb25zdCB7IG9mZnNldFdpZHRoOiB0YXJnZXRXLCBvZmZzZXRIZWlnaHQ6IHRhcmdldEggfSA9IHRhcmdldDtcblx0Y29uc3QgYW5jaG9yVyA9IGlzSFRNTEFuY2hvciA/IGFuY2hvci5vZmZzZXRXaWR0aCA6IGFuY2hvci5jbGllbnRXaWR0aDtcblx0Y29uc3QgYW5jaG9ySCA9IGlzSFRNTEFuY2hvciA/IGFuY2hvci5vZmZzZXRIZWlnaHQgOiBhbmNob3IuY2xpZW50SGVpZ2h0O1xuXHRjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGxlZnQsIHRvcCB9ID0gYW5jaG9yLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRjb25zdCBhbmNob3JYID0gTWF0aC5yb3VuZChsZWZ0IC0gKGFuY2hvclcgLSB3aWR0aCkgLyAyKTsgLy8gQ29ycmVjdCBmb3IgQ1NTIHRyYW5zZm9ybSBzY2FsZVxuXHRjb25zdCBhbmNob3JZID0gTWF0aC5yb3VuZCh0b3AgLSAoYW5jaG9ySCAtIGhlaWdodCkgLyAyKTsgLy8gQ29ycmVjdCBmb3IgQ1NTIHRyYW5zZm9ybSBzY2FsZVxuXG5cdGNvbnN0IGhhc1NwYWNlTGVmdCA9IGFuY2hvclggLSB0YXJnZXRXID4gMDtcblx0Y29uc3QgaGFzU3BhY2VSaWdodCA9IGFuY2hvclcgKyBhbmNob3JXICsgdGFyZ2V0VyA8IHdpbmRvdy5pbm5lcldpZHRoO1xuXHRjb25zdCBoYXNTcGFjZU92ZXIgPSBhbmNob3JZIC0gdGFyZ2V0SCA+IDA7XG5cdGNvbnN0IGhhc1NwYWNlVW5kZXIgPSBhbmNob3JZICsgYW5jaG9ySCArIHRhcmdldEggPCB3aW5kb3cuaW5uZXJIZWlnaHQ7XG5cdGNvbnN0IHBvc2l0aW9uUmlnaHQgPVxuXHRcdChwb3NpdGlvbiA9PT0gUE9TSVRJT04ucmlnaHQgJiYgKGZvcmNlIHx8IGhhc1NwYWNlUmlnaHQpKSB8fCAhaGFzU3BhY2VMZWZ0OyAvLyBBbHdheXMgcG9zaXRpb24gcmlnaHQgd2hlbiBubyBoYXNTcGFjZUxlZnQsIGFzIG5vIE9TIHNjcm9sbHMgZnVydGhlciB1cCB0aGFuIDBcblx0Y29uc3QgcG9zaXRpb25VbmRlciA9XG5cdFx0KHBvc2l0aW9uID09PSBQT1NJVElPTi5ib3R0b20gJiYgKGZvcmNlIHx8IGhhc1NwYWNlVW5kZXIpKSB8fCAhaGFzU3BhY2VPdmVyOyAvLyBBbHdheXMgcG9zaXRpb24gdW5kZXIgd2hlbiBubyBoYXNTcGFjZU92ZXIsIGFzIG5vIE9TIHNjcm9sbHMgZnVydGhlciB1cCB0aGFuIDBcblx0Y29uc3QgY2VudGVyWCA9IE1hdGgubWluKFxuXHRcdE1hdGgubWF4KDEwLCBhbmNob3JYIC0gKHRhcmdldFcgLSBhbmNob3JXKSAvIDIpLFxuXHRcdHdpbmRvdy5pbm5lcldpZHRoIC0gdGFyZ2V0VyAtIDEwLFxuXHQpO1xuXHRjb25zdCBjZW50ZXJZID0gTWF0aC5taW4oXG5cdFx0TWF0aC5tYXgoMTAsIGFuY2hvclkgLSAodGFyZ2V0SCAtIGFuY2hvckgpIC8gMiksXG5cdFx0d2luZG93LmlubmVySGVpZ2h0IC0gdGFyZ2V0SCAtIDEwLFxuXHQpO1xuXHRjb25zdCBpc1ZlcnRpY2FsID0gcG9zaXRpb24gPT09IFBPU0lUSU9OLnRvcCB8fCBwb3NpdGlvbiA9PT0gUE9TSVRJT04uYm90dG9tO1xuXG5cdHRhcmdldC5zdHlsZS5sZWZ0ID0gYCR7TWF0aC5yb3VuZChpc1ZlcnRpY2FsID8gY2VudGVyWCA6IHBvc2l0aW9uUmlnaHQgPyBhbmNob3JYICsgYW5jaG9yVyA6IGFuY2hvclggLSB0YXJnZXRXKX1weGA7XG5cdHRhcmdldC5zdHlsZS50b3AgPSBgJHtNYXRoLnJvdW5kKGlzVmVydGljYWwgPyAocG9zaXRpb25VbmRlciA/IGFuY2hvclkgKyBhbmNob3JIIDogYW5jaG9yWSAtIHRhcmdldEgpIDogY2VudGVyWSl9cHhgO1xuXHRTQ1JPTExFUj8uc3R5bGUuc2V0UHJvcGVydHkoXG5cdFx0XCJ0cmFuc2xhdGVcIixcblx0XHRgMHB4ICR7TWF0aC5yb3VuZChwb3NpdGlvblVuZGVyID8gd2luZG93LnNjcm9sbFkgKyBhbmNob3JZICsgYW5jaG9ySCArIHRhcmdldEggKyAzMCA6IDApfXB4YCxcblx0KTtcbn1cblxuLyoqXG4gKiBTcGVlZCB1cCBNdXRhdGlvbk9ic2VydmVyIGJ5IGRlYm91bmNpbmcgYW5kIG9ubHkgcnVubmluZyB3aGVuIHBhZ2UgaXMgdmlzaWJsZVxuICogQHJldHVybiBuZXcgTXV0YWlvbk9ic2VydmVyXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKGNhbGxiYWNrOiBNdXRhdGlvbkNhbGxiYWNrKSB7XG5cdGxldCBxdWV1ZSA9IDA7XG5cblx0Y29uc3Qgb25GcmFtZSA9ICgpID0+IHNldFRpbWVvdXQob25UaW1lciwgMjAwKTsgLy8gVXNlIGJvdGggcmVxdWVzdEFuaW1hdGlvbkZyYW1lIGFuZCBzZXRUaW1lb3V0IHRvIGRlYm91bmNlIGFuZCBvbmx5IHJ1biB3aGVuIHZpc2libGVcblx0Y29uc3Qgb25UaW1lciA9ICgpID0+IHtcblx0XHRjYWxsYmFjayhbXSwgb2JzZXJ2ZXIpO1xuXHRcdG9ic2VydmVyLnRha2VSZWNvcmRzKCk7IC8vIENsZWFyIHJlY29yZHMgdG8gYXZvaWQgcnVubmluZyBjYWxsYmFjayBtdWx0aXBsZSB0aW1lc1xuXHRcdHF1ZXVlID0gMDtcblx0fTtcblx0Y29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcigoKSA9PiB7XG5cdFx0aWYgKCFxdWV1ZSkgcXVldWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUob25GcmFtZSk7XG5cdH0pO1xuXG5cdHJldHVybiBvYnNlcnZlcjtcbn1cblxuLyoqXG4gKiBvbk11dGF0aW9uXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IG9ic2VydmUgbXV0YXRpb25zIG9uIGEgc3BlY2lmaWMgY2xhc3MgbmFtZVxuICogQHBhcmFtIGVsIFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIGNsYXNzTmFtZSBUaGUgY2xhc3MgbmFtZSB0byBvYnNlcnZlXG4gKiBAcGFyYW0gY2FsbGJhY2sgVGhlIGNhbGxiYWNrIHRvIHJ1biB3aGVuIG11dGF0aW9ucyBhcmUgZGV0ZWN0ZWRcbiAqL1xuY29uc3QgTVVUQVRPUlMgPSBuZXcgV2Vha01hcDxFbGVtZW50LCBBcnJheTwoKSA9PiB2b2lkPj4oKTtcbmV4cG9ydCBjb25zdCBvbk11dGF0aW9uID0gPFQgZXh0ZW5kcyBFbGVtZW50Pihcblx0ZWw6IEVsZW1lbnQsXG5cdGNsYXNzTmFtZTogc3RyaW5nLFxuXHRjYWxsYmFjazogKGVsZW1zOiBIVE1MQ29sbGVjdGlvbk9mPFQ+KSA9PiB2b2lkLFxuKSA9PiB7XG5cdGNvbnN0IGVsZW1zID0gZWwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShjbGFzc05hbWUpO1xuXHRjb25zdCBtdXRhdG9yID0gTVVUQVRPUlMuZ2V0KGVsKSB8fCBbXTtcblxuXHRpZiAoIW11dGF0b3IubGVuZ3RoKSB7XG5cdFx0TVVUQVRPUlMuc2V0KGVsLCBtdXRhdG9yKTtcblx0XHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKChfLCBvYnNlcnZlcikgPT4ge1xuXHRcdFx0aWYgKGVsLmlzQ29ubmVjdGVkICYmIG11dGF0b3I/Lmxlbmd0aCkge1xuXHRcdFx0XHRmb3IgKGNvbnN0IGNhbGxiYWNrIG9mIG11dGF0b3IpIGNhbGxiYWNrKCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuXHRcdFx0XHRNVVRBVE9SUy5kZWxldGUoZWwpO1xuXHRcdFx0fVxuXHRcdH0pLm9ic2VydmUoZWwsIHtcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogW1wiY2xhc3NcIl0sXG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdFx0c3VidHJlZTogdHJ1ZSxcblx0XHR9KTtcblx0fVxuXHRtdXRhdG9yLnB1c2goKCkgPT4gY2FsbGJhY2soZWxlbXMgYXMgSFRNTENvbGxlY3Rpb25PZjxUPikpO1xufTtcblxuLyoqXG4gKiBvbkxvYWRlZFxuICogQGRlc2NyaXB0aW9uIFJ1bnMgYSBjYWxsYmFjayB3aGVuIHdpbmRvdyBpcyBsb2FkZWQgaW4gYnJvd3NlclxuICogQHBhcmFtIGNhbGxiYWNrIFRoZSBjYWxsYmFjayB0byBydW4gd2hlbiB0aGUgcGFnZSBpcyByZWFkeVxuICovXG5leHBvcnQgY29uc3Qgb25Mb2FkZWQgPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcblx0aWYgKCFJU19CUk9XU0VSKSByZXR1cm47XG5cdGNvbnN0IHJ1biA9ICgpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjayk7IC8vIEVuc3VyZSB3ZSBydW4gYWZ0ZXIgYWxsIG90aGVyIGxvYWQgZXZlbnRzXG5cdGlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSBcImNvbXBsZXRlXCIpIHJ1bigpO1xuXHRlbHNlIG9uKHdpbmRvdywgXCJsb2FkXCIsIHJ1bik7XG59O1xuXG4vKipcbiAqIGlzSW5wdXRMaWtlXG4gKiBAZGVzY3JpcHRpb24gQ2hlY2sgaWYgZWxlbWVudCBpcyBhbiBpbnB1dCBsaWtlIGVsZW1lbnRcbiAqIEBwYXJhbSBlbCBUaGUgZWxlbWVudCB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBhbiBpbnB1dCBsaWtlIGVsZW1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGlzSW5wdXRMaWtlID0gKGVsOiB1bmtub3duKTogZWwgaXMgSFRNTElucHV0RWxlbWVudCA9PlxuXHRlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG5cdFwidmFsaWRpdHlcIiBpbiBlbCAmJlxuXHQhKGVsIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpO1xuXG4vKipcbiAqIHRvQ3VzdG9tRWxlbWVudFByb3BzXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IGNvbnZlcnQgcHJvcHMgdG8gY3VzdG9tIGVsZW1lbnQgYXR0cmlidXRlc1xuICogQHBhcmFtIHByb3BzIFRoZSBwcm9wcyB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIHByb3BzXG4gKi9cbmV4cG9ydCBjb25zdCB0b0N1c3RvbUVsZW1lbnRQcm9wcyA9IChcblx0eyBjbGFzc05hbWUsIGhpZGRlbiwgb3BlbiwgLi4ucmVzdCB9OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcblx0a2xhc3M/OiBzdHJpbmcsXG4pID0+IHtcblx0cmVzdC5zdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcgPSB0cnVlOyAvLyBNYWtlIE5leHQuanMgaGFwcHlcblx0cmVzdC5jbGFzcyA9IGNsc3goa2xhc3MsIGNsYXNzTmFtZSB8fCBcIlwiKSB8fCB1bmRlZmluZWQ7IC8vIFVzZSBjbGFzcyBpbnN0ZWFkIG9mIGNsYXNzTmFtZVxuXHRpZiAoaGlkZGVuKSByZXN0LmhpZGRlbiA9IHRydWU7IC8vIEVuc3VyZSBib29sZWFuIHByb3AgYmVoYXZpb3VyXG5cdGlmIChvcGVuKSByZXN0Lm9wZW4gPSB0cnVlOyAvLyBFbnN1cmUgYm9vbGVhbiBwcm9wIGJlaGF2aW91clxuXHRyZXR1cm4gcmVzdDtcbn07XG4iLCJpbXBvcnQgeyBJU19CUk9XU0VSIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IE1BVE9NTyA9IFwibWF0dGlsc3luZXQubWF0b21vLmNsb3VkXCI7XG5sZXQgRU5BQkxFRDogQW5hbHl0aWNzQWN0aW9uc1tcImluaXRcIl1bXCJlbmFibGVkXCJdID0gdHJ1ZTtcblxudHlwZSBNYXRvbW8gPSAoc3RyaW5nIHwgbnVtYmVyIHwgYm9vbGVhbilbXTtcbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIFdpbmRvdyB7XG5cdFx0X3BhcT86IE1hdG9tb1tdO1xuXHR9XG59XG5cbmV4cG9ydCB0eXBlIEFuYWx5dGljc0FjdGlvbnMgPSB7XG5cdGluaXQ6IHtcblx0XHRtYXRvbW9JZDogbnVtYmVyIHwgc3RyaW5nO1xuXHRcdGVuYWJsZWQ/OiBib29sZWFuIHwgXCJkZWJ1Z1wiO1xuXHR9O1xuXHRwYWdldmlldzoge1xuXHRcdHVybD86IHN0cmluZztcblx0XHR0aXRsZT86IHN0cmluZztcblx0fTtcblx0ZXZlbnQ6IHtcblx0XHRjYXRlZ29yeTogc3RyaW5nO1xuXHRcdGFjdGlvbjogc3RyaW5nO1xuXHRcdG5hbWU/OiBzdHJpbmc7XG5cdFx0dmFsdWU/OiBudW1iZXI7XG5cdH07XG5cdHNlYXJjaDoge1xuXHRcdHF1ZXJ5OiBzdHJpbmc7XG5cdFx0Y2F0ZWdvcnk/OiBzdHJpbmc7XG5cdFx0cmVzdWx0cz86IG51bWJlcjtcblx0fTtcblx0bWF0b21vOiBNYXRvbW87XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gYW5hbHl0aWNzPEFjdGlvbiBleHRlbmRzIGtleW9mIEFuYWx5dGljc0FjdGlvbnM+KFxuXHRhY3Rpb246IEFjdGlvbixcblx0YXJncyA9IHt9IGFzIEFuYWx5dGljc0FjdGlvbnNbQWN0aW9uXSxcbikge1xuXHRpZiAoIUlTX0JST1dTRVIpIHJldHVybjtcblx0aWYgKCF3aW5kb3cuX3BhcSkge1xuXHRcdHdpbmRvdy5fcGFxID0gW107XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJIZWF0bWFwU2Vzc2lvblJlY29yZGluZzo6ZGlzYWJsZVwiXSk7IC8vIERpc2FibGUgaGVhdG1hcHMgYnkgZGVmYXVsdCBhcyB0aGlzIHJlcXVpcmUgY29va2llc1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wiZW5hYmxlTGlua1RyYWNraW5nXCJdKTtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldFRyYWNrZXJVcmxcIiwgYGh0dHBzOi8vJHtNQVRPTU99L21hdG9tby5waHBgXSk7XG5cdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc2NyaXB0W3NyYyo9XCJtYXRvbW8uanNcIl0nKSB8fFxuXHRcdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmFwcGVuZChcblx0XHRcdFx0T2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpLCB7XG5cdFx0XHRcdFx0YXN5bmM6IHRydWUsXG5cdFx0XHRcdFx0c3JjOiBgaHR0cHM6Ly9jZG4ubWF0b21vLmNsb3VkLyR7TUFUT01PfS9tYXRvbW8uanNgLFxuXHRcdFx0XHR9KSxcblx0XHRcdCk7XG5cdH1cblx0aWYgKGFjdGlvbiA9PT0gXCJpbml0XCIpIHtcblx0XHRjb25zdCB7IG1hdG9tb0lkLCBlbmFibGVkID0gdHJ1ZSB9ID0gYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wiaW5pdFwiXTtcblx0XHRFTkFCTEVEID0gZW5hYmxlZDtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldFNpdGVJZFwiLCBtYXRvbW9JZF0pO1xuXHR9XG5cblx0aWYgKEVOQUJMRUQgPT09IFwiZGVidWdcIikgcmV0dXJuIGNvbnNvbGUuaW5mbyhgQW5hbHl0aWNzOiBcIiR7YWN0aW9ufVwiYCwgYXJncyk7XG5cdGlmIChFTkFCTEVEID09PSBmYWxzZSB8fCB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUgPT09IFwibG9jYWxob3N0XCIpIHJldHVybjtcblxuXHRpZiAoYWN0aW9uID09PSBcInBhZ2V2aWV3XCIpIHtcblx0XHRjb25zdCB7IHVybCwgdGl0bGUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcInBhZ2V2aWV3XCJdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0Q3VzdG9tVXJsXCIsIHVybCB8fCBsb2NhdGlvbi5ocmVmXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXREb2N1bWVudFRpdGxlXCIsIHRpdGxlIHx8IGRvY3VtZW50LnRpdGxlXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJ0cmFja1BhZ2VWaWV3XCJdKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwiZXZlbnRcIikge1xuXHRcdGNvbnN0IHsgY2F0ZWdvcnksIGFjdGlvbiwgbmFtZSwgdmFsdWUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcImV2ZW50XCJdO1xuXHRcdGNvbnN0IGV2ZW50ID0gW1widHJhY2tFdmVudFwiLCBjYXRlZ29yeSwgYWN0aW9uLCBuYW1lLCB2YWx1ZV07XG5cdFx0d2luZG93Ll9wYXEucHVzaChldmVudC5maWx0ZXIoKHYpID0+IHYgIT09IHVuZGVmaW5lZCkpO1xuXHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJzZWFyY2hcIikge1xuXHRcdGNvbnN0IHtcblx0XHRcdHF1ZXJ5LFxuXHRcdFx0Y2F0ZWdvcnkgPSBmYWxzZSxcblx0XHRcdHJlc3VsdHMgPSBmYWxzZSxcblx0XHR9ID0gYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wic2VhcmNoXCJdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1widHJhY2tTaXRlU2VhcmNoXCIsIHF1ZXJ5LCBjYXRlZ29yeSwgcmVzdWx0c10pO1xuXHR9IGVsc2UgaWYgKGFjdGlvbiA9PT0gXCJtYXRvbW9cIikge1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goYXJncyBhcyBBbmFseXRpY3NBY3Rpb25zW1wibWF0b21vXCJdKTtcblx0fVxufVxuIiwiY29uc3QgZ2V0U3RlcHMgPSAoXG5cdG5vdzogbnVtYmVyLFxuXHRtYXg6IG51bWJlcixcblx0c2hvdyA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSxcbikgPT4ge1xuXHRjb25zdCBvZmZzZXQgPSAoc2hvdyAtIDEpIC8gMjtcblx0Y29uc3Qgc3RhcnQgPSBNYXRoLm1heChNYXRoLm1pbihub3cgLSBNYXRoLmZsb29yKG9mZnNldCksIG1heCAtIHNob3cgKyAxKSwgMSk7XG5cdGNvbnN0IGVuZCA9IE1hdGgubWluKE1hdGgubWF4KG5vdyArIE1hdGguY2VpbChvZmZzZXQpLCBzaG93KSwgbWF4KTtcblx0Y29uc3QgcGFnZXMgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBlbmQgKyAxIC0gc3RhcnQgfSwgKF8sIGkpID0+IGkgKyBzdGFydCk7XG5cblx0aWYgKHNob3cgPiA0ICYmIHN0YXJ0ID4gMSkgcGFnZXMuc3BsaWNlKDAsIDIsIDEsIDApO1xuXHRpZiAoc2hvdyA+IDMgJiYgZW5kIDwgbWF4KSBwYWdlcy5zcGxpY2UoLTIsIDIsIDAsIG1heCk7XG5cdHJldHVybiBwYWdlcztcbn07XG5cbmV4cG9ydCBjb25zdCBwYWdpbmF0aW9uID0gKHsgY3VycmVudCA9IDEsIHRvdGFsID0gMTAsIHNob3cgPSA3IH0pID0+ICh7XG5cdHByZXY6IGN1cnJlbnQgPiAxID8gY3VycmVudCAtIDEgOiAwLFxuXHRuZXh0OiBjdXJyZW50IDwgdG90YWwgPyBjdXJyZW50ICsgMSA6IDAsXG5cdHBhZ2VzOiBnZXRTdGVwcyhjdXJyZW50LCB0b3RhbCwgc2hvdykubWFwKChwYWdlLCBpbmRleCkgPT4gKHtcblx0XHRjdXJyZW50OiBwYWdlID09PSBjdXJyZW50ICYmIChcInBhZ2VcIiBhcyBjb25zdCksXG5cdFx0a2V5OiBga2V5LSR7cGFnZX0tJHtpbmRleH1gLFxuXHRcdHBhZ2UsXG5cdH0pKSxcbn0pO1xuIiwiaWYgKFxuXHR0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdHdpbmRvdy5DU1NTdHlsZVNoZWV0ICYmXG5cdGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0c1xuKVxuXHQoKCkgPT4ge1xuXHRcdGNvbnN0IGtleSA9IFwiLS1tdGRzLWFwcC1leHBhbmRlZFwiO1xuXHRcdGNvbnN0IHNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblx0XHRjb25zdCBwcmV2ID0gKCkgPT4gIXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpPy5pbmNsdWRlcyhcImZhbHNlXCIpO1xuXG5cdFx0ZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzLnB1c2goc2hlZXQpO1xuXHRcdHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQgPSAoZm9yY2UpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IG5leHQgPSBmb3JjZSA/PyAhcHJldigpO1xuXHRcdFx0XHRzaGVldC5yZXBsYWNlU3luYz8uKGA6cm9vdCB7ICR7a2V5fTogdmFyKCR7a2V5fS0tJHtuZXh0fSl9YCk7XG5cdFx0XHRcdHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIG5leHQpO1xuXHRcdFx0fSBjYXRjaCAoZXJyKSB7fSAvLyBsb2NhbFN0b3JhZ2UgaXMgZnVsbCBvciByZXBsYWNlU3luYyBpcyBub3Qgc3VwcG9ydGVkXG5cdFx0fTtcblxuXHRcdC8vIFNldCBhbmQgc3RvcmUgaW5pdGlhbCBzdGF0ZVxuXHRcdHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQocHJldigpKTtcblx0fSkoKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBRVUlDS19FVkVOVCwgZGVib3VuY2UsIG9uLCBvbkxvYWRlZCwgb25NdXRhdGlvbiB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IFwiLi9hcHAtdG9nZ2xlXCI7XG5cbmNvbnN0IENTU19BUFAgPSBzdHlsZXMuYXBwLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19TVElDS1kgPSBzdHlsZXMuc3RpY2t5LnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19UT0dHTEUgPSAnW2RhdGEtY29tbWFuZD1cInRvZ2dsZS1hcHAtZXhwYW5kZWRcIl0nO1xuY29uc3QgQ1NTX1NJREVCQVIgPSBgLiR7Q1NTX0FQUH0gPiBkaWFsb2csLiR7Q1NTX0FQUH0gZGlhbG9nIH4gbWFpbmA7XG5cbmNvbnN0IHVzZVRyYW5zaXRpb24gPSAoY2FsbGJhY2s6ICgpID0+IHZvaWQpID0+IHtcblx0aWYgKCFkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKSBjYWxsYmFjaygpO1xuXHRlbHNlIGRvY3VtZW50LnN0YXJ0Vmlld1RyYW5zaXRpb24oY2FsbGJhY2spO1xufTtcblxuZXhwb3J0IGNvbnN0IHRvZ2dsZUFwcEV4cGFuZGVkID0gKGZvcmNlPzogYm9vbGVhbikgPT5cblx0Ly8gQHRzLWV4cGVjdC1lcnJvciB3aW5kb3cubXRkc0FwcFRvZ2dsZSBjb21lcyBmcm9tIGFwcC10b2dnbGUuanNcblx0dXNlVHJhbnNpdGlvbigoKSA9PiB3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkPy4oZm9yY2UpKTtcblxuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlQ2xpY2soeyB0YXJnZXQ6IGVsLCBkZWZhdWx0UHJldmVudGVkOiBzdG9wIH06IEV2ZW50KSB7XG5cdGlmIChzdG9wIHx8ICEoZWwgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCkgfHwgIWVsLm1hdGNoZXMoQ1NTX1RPR0dMRSkpXG5cdFx0cmV0dXJuO1xuXHRpZiAoZ2V0Q29tcHV0ZWRTdHlsZShlbCkucG9zaXRpb24gPT09IFwic3RpY2t5XCIpIHJldHVybiB0b2dnbGVBcHBFeHBhbmRlZCgpO1xuXHR1c2VUcmFuc2l0aW9uKCgpID0+IHtcblx0XHRjb25zdCBzaWRlYmFyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRGlhbG9nRWxlbWVudD4oQ1NTX1NJREVCQVIpO1xuXHRcdHNpZGViYXI/LnNldEF0dHJpYnV0ZShcImRhdGEtY2xvc2VkYnlcIiwgXCJhbnlcIik7IC8vIEFsbG93IGNsb3NpbmcgYnkgY2xpY2tpbmcgb3V0c2lkZVxuXHRcdHNpZGViYXI/LnNob3dNb2RhbCgpO1xuXHR9KTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlUmVzaXplKCkge1xuXHRkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaWFsb2dFbGVtZW50PihDU1NfU0lERUJBUik/LmNsb3NlKCk7XG59XG5cbi8vIFNjcm9sbCBzdGF0ZVxubGV0IE1JTl9ZID0gMDsgLy8gT2Zmc2V0IHRvIGF2b2lkIHNjcm9sbCBqdW1wIHdoZW4gc3RpY2t5IGlzIHNldCB0byByZWxhdGl2ZVxubGV0IFNDUk9MTF9VUDogYm9vbGVhbjtcbmxldCBTVElDSyA9IDA7IC8vIC0xID0gc3RpY2sgdG9wLCAwID0gcmVsYXRpdmUsIDEgPSBzdGljayBib3R0b21cbmxldCBTVElDS19FTDogSFRNTEVsZW1lbnQ7XG5sZXQgU1RJQ0tfSCA9IDA7XG5sZXQgU1RJQ0tfWSA9IDA7XG5sZXQgU1RVQ0sgPSBmYWxzZTsgLy8gVXNlZCB0byBmaWd1cmUgaWYgbmF2IGlzIGxhcmdlciB0aGFuIHZpZXdwb3J0XG5sZXQgV0lOX0ggPSAwO1xubGV0IFdJTl9ZID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oW3N0aWNreV06IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdFNUSUNLX0VMID0gc3RpY2t5O1xuXHRoYW5kbGVTY3JvbGwoKTsgLy8gUnVuIG9uIGNvbm5lY3Rcbn1cblxuZnVuY3Rpb24gaGFuZGxlU2Nyb2xsKCkge1xuXHRpZiAoIVNUSUNLX0VMPy5pc0Nvbm5lY3RlZCkgcmV0dXJuO1xuXHRjb25zdCBORVhUX1kgPSB3aW5kb3cuc2Nyb2xsWTtcblx0Y29uc3QgTkVYVF9VUCA9IE5FWFRfWSA8IFdJTl9ZO1xuXHRXSU5fWSA9IE5FWFRfWTtcblxuXHQvLyBPbmx5IGNhbGN1bGF0ZSBpZiBzY3JvbGwgZGlyZWN0aW9uIGhhcyBjaGFuZ2VkXG5cdGlmIChORVhUX1VQICE9PSBTQ1JPTExfVVApIHtcblx0XHRNSU5fWSA9IChTVElDS19FTC5wYXJlbnRFbGVtZW50Py5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3AgfHwgMCkgKyBXSU5fWTtcblx0XHRTQ1JPTExfVVAgPSBORVhUX1VQO1xuXHRcdFNUSUNLX0ggPSBTVElDS19FTC5vZmZzZXRIZWlnaHQ7XG5cdFx0U1RJQ0tfWSA9IFNUSUNLX0VMLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCArIFdJTl9ZO1xuXHRcdFNUVUNLID0gU1RJQ0tfRUwub2Zmc2V0SGVpZ2h0IDw9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0XHRXSU5fSCA9IHdpbmRvdy5pbm5lckhlaWdodDtcblx0fVxuXG5cdGlmIChTVElDSyA9PT0gLTEgJiYgU1RVQ0spIHJldHVybjsgLy8gQWxsd2F5cyBzdGlja3kgd2hlbiBzaWRlYmFyIGlzIHNtYWxsZXIgdGhhbiB2aWV3cG9ydFxuXHRpZiAoU1RJQ0sgIT09IC0xICYmIChTVFVDSyB8fCAoU0NST0xMX1VQICYmIFdJTl9ZIDw9IFNUSUNLX1kpKSkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJzdGlja3lcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBcIjBweFwiKTtcblx0XHRTVElDSyA9IC0xOyAvLyBOb3Qgc3RpY2tpbmcgdG8gdG9wIGFuZCBzaWRlYmFyIGlzIHNtYWxsZXIgdGhhbiB2aWV3cG9ydCBvciBzY3JvbGxpbmcgdXBcblx0fSBlbHNlIGlmIChTVElDSyA9PT0gLTEgJiYgIVNDUk9MTF9VUCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJyZWxhdGl2ZVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke01hdGgubWF4KDAsIFdJTl9ZIC0gTUlOX1kpfXB4YCk7XG5cdFx0U1RJQ0sgPSAwOyAvLyBTdGlja2luZyB0byB0b3AgYW5kIHNjcm9sbGluZyBkb3duXG5cdH0gZWxzZSBpZiAoU1RJQ0sgIT09IDEgJiYgIVNDUk9MTF9VUCAmJiBXSU5fWSArIFdJTl9IID49IFNUSUNLX1kgKyBTVElDS19IKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInN0aWNreVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke1dJTl9IIC0gU1RJQ0tfSH1weGApO1xuXHRcdFNUSUNLID0gMTsgLy8gTm90IHN0aWNraW5nIHRvIGJvdHRvbSBhbmQgc2Nyb2xsaW5nIGRvd25cblx0fSBlbHNlIGlmIChTVElDSyA9PT0gMSAmJiBTQ1JPTExfVVApIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwicmVsYXRpdmVcIik7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXRvcFwiLCBgJHtTVElDS19ZIC0gTUlOX1l9cHhgKTtcblx0XHRTVElDSyA9IDA7IC8vIFN0aWNraW5nIHRvIGJvdHRvbSBhbmQgc2Nyb2xsaW5nIHVwXG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX1NUSUNLWSwgaGFuZGxlTXV0YXRpb24pO1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVUb2dnbGVDbGljaywgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwicmVzaXplXCIsIGRlYm91bmNlKGhhbmRsZVJlc2l6ZSwgMTAwKSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwic2Nyb2xsXCIsIGhhbmRsZVNjcm9sbCwgUVVJQ0tfRVZFTlQpO1xufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0JSRUFEQ1JVTUJTID0gc3R5bGVzLmJyZWFkY3J1bWJzLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oYnJlYWRjcnVtYnM6IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgYnJlYWRjdW1icyBvZiBicmVhZGNydW1icylcblx0XHRicmVhZGN1bWJzLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaSBhXCIpLmZvckVhY2goKGNydW1iLCBpbmRleCwgeyBsZW5ndGggfSkgPT4ge1xuXHRcdFx0YXR0cihjcnVtYiwgXCJhcmlhLWN1cnJlbnRcIiwgaW5kZXggPT09IGxlbmd0aCAtIDEgPyBcInBhZ2VcIiA6IG51bGwpO1xuXHRcdH0pO1xufVxuXG5vbkxvYWRlZCgoKSA9PlxuXHRvbk11dGF0aW9uKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgQ1NTX0JSRUFEQ1JVTUJTLCBoYW5kbGVNdXRhdGlvbiksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdElTX0JST1dTRVIsXG5cdFFVSUNLX0VWRU5ULFxuXHRhdHRyLFxuXHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyLFxuXHRvbixcblx0b25Mb2FkZWQsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRElBTE9HID0gc3R5bGVzLmRpYWxvZy5zcGxpdChcIiBcIilbMF07XG5jb25zdCBESUFMT0dTID0gSVNfQlJPV1NFUlxuXHQ/IChkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKFxuXHRcdFx0Q1NTX0RJQUxPRyxcblx0XHQpIGFzIEhUTUxDb2xsZWN0aW9uT2Y8SFRNTERpYWxvZ0VsZW1lbnQ+KVxuXHQ6IFtdO1xuXG5jb25zdCBoYW5kbGVNb2RhbCA9ICgpID0+IHtcblx0Zm9yIChjb25zdCBkaWFsb2cgb2YgRElBTE9HUylcblx0XHRpZiAoZGlhbG9nLmlzQ29ubmVjdGVkICYmIGRpYWxvZy5zaG93TW9kYWwgJiYgZGlhbG9nLmNsb3NlKSB7XG5cdFx0XHRpZiAoZGlhbG9nLm1hdGNoZXMoJ1tvcGVuXTpub3QoW2RhdGEtbW9kYWw9XCJmYWxzZVwiXSk6bm90KDptb2RhbCknKSkge1xuXHRcdFx0XHRhdHRyKGRpYWxvZywgXCJvcGVuXCIsIG51bGwpOyAvLyBVc2luZyBhdHRyaWJ1dGUgaW5zdGVhZCBvZiAuY2xvc2UgdG8gYXZvaWQgYGNsb3NlYCBldmVudFxuXHRcdFx0XHRkaWFsb2cuc2hvd01vZGFsKCk7XG5cdFx0XHR9IGVsc2UgaWYgKGRpYWxvZy5tYXRjaGVzKFwiOm1vZGFsOm5vdChbb3Blbl0pXCIpKSB7XG5cdFx0XHRcdGF0dHIoZGlhbG9nLCBcIm9wZW5cIiwgXCJcIik7IC8vIFNldCBhcyBvcGVuXG5cdFx0XHRcdGRpYWxvZy5jbG9zZSgpOyAvLyBTbyB3ZSBjb3JyZWNsdHkgY2FuIGNhbGwgLmNsb3NlLCByZW1vdmluZyA8ZGlhbG9nPiBmcm9tICN0b3AtbGF5ZXJcblx0XHRcdH1cblx0XHR9XG59O1xuXG5jb25zdCBoYW5kbGVDbGljayA9ICh7IGNsaWVudFg6IHgsIGNsaWVudFk6IHksIHRhcmdldDogZWwgfTogTW91c2VFdmVudCkgPT4ge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MRGlhbG9nRWxlbWVudCAmJiBhdHRyKGVsLCBcImRhdGEtY2xvc2VkYnlcIikgPT09IFwiYW55XCIpIHtcblx0XHRjb25zdCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCB9ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0Y29uc3QgaXNJbnNpZGUgPSB0b3AgPD0geSAmJiB5IDw9IGJvdHRvbSAmJiBsZWZ0IDw9IHggJiYgeCA8PSByaWdodDtcblxuXHRcdGlmICghaXNJbnNpZGUpIGVsLmNsb3NlKCk7XG5cdH0gZWxzZSBpZiAoXG5cdFx0ZWwgaW5zdGFuY2VvZiBFbGVtZW50ICYmXG5cdFx0ZWwuY2xvc2VzdCgnYnV0dG9uW2RhdGEtY29tbWFuZD1cImNsb3NlXCJdJylcblx0KSB7XG5cdFx0ZWw/LmNsb3Nlc3QoXCJkaWFsb2dcIik/LmNsb3NlKCk7XG5cdH1cbn07XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlQ2xpY2sgYXMgRXZlbnRMaXN0ZW5lciwgUVVJQ0tfRVZFTlQpO1xuXHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyKGhhbmRsZU1vZGFsKS5vYnNlcnZlKFxuXHRcdGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxcblx0XHR7XG5cdFx0XHRhdHRyaWJ1dGVGaWx0ZXI6IFtcIm9wZW5cIl0sXG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0Y2hpbGRMaXN0OiB0cnVlLFxuXHRcdFx0c3VidHJlZTogdHJ1ZSxcblx0XHR9LFxuXHQpO1xufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgUVVJQ0tfRVZFTlQsIGF0dHIsIG9uLCBvbkxvYWRlZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5mdW5jdGlvbiBoYW5kbGVJbmplY3QoZXZlbnQ6IEV2ZW50ICYgeyBhbmltYXRpb25OYW1lPzogc3RyaW5nIH0pIHtcblx0aWYgKGV2ZW50LmFuaW1hdGlvbk5hbWUgIT09IHN0eWxlcy5fZXJyb3JzdW1tYXJ5KSByZXR1cm47XG5cdGNvbnN0IGZpcnN0ID0gKGV2ZW50LnRhcmdldCBhcyBFbGVtZW50KT8uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cblx0aWYgKGZpcnN0IGluc3RhbmNlb2YgSFRNTEhlYWRpbmdFbGVtZW50KSB7XG5cdFx0YXR0cihmaXJzdCwgXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuXHRcdGZpcnN0LmZvY3VzKCk7IC8vIEF1dG9mb2N1cyBmaXJzdCBoZWFkaW5nXG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4gb24oZG9jdW1lbnQsIFwiYW5pbWF0aW9uZW5kXCIsIGhhbmRsZUluamVjdCwgUVVJQ0tfRVZFTlQpKTtcbiIsInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcblxuLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBTQUZFX0xBQkVMTEVEQlkgPSBgJHtJU19BTkRST0lEID8gXCJkYXRhXCIgOiBcImFyaWFcIn0tbGFiZWxsZWRieWA7XG52YXIgRElTUExBWV9CTE9DSyA9IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2sgfVwiO1xudmFyIEZPQ1VTX09VVExJTkUgPSBcIm91dGxpbmU6IDFweCBkb3R0ZWQ7IG91dGxpbmU6IDVweCBhdXRvIEhpZ2hsaWdodDsgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yXCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXR0YWNoU3R5bGUgPSAoZWxlbWVudCwgY3NzKSA9PiBlbGVtZW50LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gIC8vIFVubmFtZWQgc2xvdCBkb2VzIGF1dG9tYXRpY2FsbHkgcmVuZGVyIGFsbCB0b3AgZWxlbWVudCBub2Rlc1xuICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgY3NzKVxuKTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gIH1cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgKGRldGFpbCkgPT4gZWxlbWVudC5oYW5kbGVFdmVudCh7IHR5cGU6IFwibXV0YXRpb25cIiwgZGV0YWlsIH0pXG4gICAgKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIG9ic2VydmVycy5zZXQoZWxlbWVudCwgb2JzZXJ2ZXIpO1xuICB9XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICByZXR1cm4gZWw7XG59O1xudmFyIGN1c3RvbUVsZW1lbnRzID0ge1xuICBkZWZpbmU6IChuYW1lLCBpbnN0YW5jZSkgPT4gIUlTX0JST1dTRVIgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmdldChuYW1lKSB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKG5hbWUsIGluc3RhbmNlKVxufTtcbnZhciBMSVZFO1xudmFyIExJVkVfU1JfRklYID0gMDtcbnZhciBzcGVhayA9ICh0ZXh0KSA9PiB7XG4gIGlmICghTElWRSkge1xuICAgIExJVkUgPSBjcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgIExJVkUuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246Zml4ZWQ7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjFweDt3aGl0ZS1zcGFjZTpub3dyYXBcIjtcbiAgICBhdHRyKExJVkUsIFwiYXJpYS1saXZlXCIsIFwiYXNzZXJ0aXZlXCIpO1xuICB9XG4gIGlmICghTElWRS5pc0Nvbm5lY3RlZCkgZG9jdW1lbnQuYm9keS5hcHBlbmQoTElWRSk7XG4gIGlmICh0ZXh0KSBMSVZFLnRleHRDb250ZW50ID0gYCR7dGV4dH0ke0xJVkVfU1JfRklYKysgJSAyID8gXCJcXHhBMFwiIDogXCJcIn1gO1xufTtcbnZhciBzZXRWYWx1ZSA9IChpbnB1dCwgZGF0YSwgdHlwZSA9IFwiXCIpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSwgZGF0YSwgaW5wdXRUeXBlOiB0eXBlIH07XG4gIGNvbnN0IHByb3RvID0gSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGU7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJiZWZvcmVpbnB1dFwiLCBldmVudCkpO1xuICAoX2IgPSAoX2EyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgXCJ2YWx1ZVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5zZXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKGlucHV0LCBkYXRhKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImlucHV0XCIsIGV2ZW50KSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2hhbmdlXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG59O1xuXG4vLyB1LW9wdGlvbi50c1xudmFyIERJU0FCTEVEID0gXCJkaXNhYmxlZFwiO1xudmFyIFNFTEVDVEVEID0gXCJzZWxlY3RlZFwiO1xudmFyIFVIVE1MT3B0aW9uRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtESVNBQkxFRCwgU0VMRUNURURdO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICghSVNfSU9TKSB0aGlzLnRhYkluZGV4ID0gLTE7XG4gICAgaWYgKCF0aGlzLmhhc0F0dHJpYnV0ZShcInJvbGVcIikpIGF0dHIodGhpcywgXCJyb2xlXCIsIFwib3B0aW9uXCIpO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWRpc2FibGVkXCIsIGAke3RoaXMuZGlzYWJsZWR9YCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtc2VsZWN0ZWRcIiwgYCR7dGhpcy5zZWxlY3RlZH1gKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgd2hldGhlciB0aGUgb3B0aW9uIGluIHRoZSBsaXN0IGJveCBpcyB0aGUgZGVmYXVsdCBpdGVtLiAqL1xuICBnZXQgZGVmYXVsdFNlbGVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzW1NFTEVDVEVEXTtcbiAgfVxuICBzZXQgZGVmYXVsdFNlbGVjdGVkKHZhbHVlKSB7XG4gICAgdGhpc1tTRUxFQ1RFRF0gPSB2YWx1ZTtcbiAgfVxuICBnZXQgZGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgRElTQUJMRUQpICE9PSBudWxsO1xuICB9XG4gIHNldCBkaXNhYmxlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgRElTQUJMRUQsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIC8qKiBSZXRyaWV2ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGZvcm0gdGhhdCB0aGUgb2JqZWN0IGlzIGVtYmVkZGVkIGluLiAqL1xuICBnZXQgZm9ybSgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwiZm9ybVwiKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIG9yZGluYWwgcG9zaXRpb24gb2YgYW4gb3B0aW9uIGluIGEgbGlzdCBib3guICovXG4gIGdldCBpbmRleCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiBbXG4gICAgICAuLi4oKF9hMiA9IHRoaXMucGFyZW50RWxlbWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5vcHRpb25zKSB8fCBbdGhpc11cbiAgICBdLmluZGV4T2YodGhpcyk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIGEgdmFsdWUgdGhhdCB5b3UgY2FuIHVzZSB0byBpbXBsZW1lbnQgeW91ciBvd24gbGFiZWwgZnVuY3Rpb25hbGl0eSBmb3IgdGhlIG9iamVjdC4gKi9cbiAgZ2V0IGxhYmVsKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIChfYTIgPSBhdHRyKHRoaXMsIFwibGFiZWxcIikpICE9IG51bGwgPyBfYTIgOiB0aGlzLnRleHQ7XG4gIH1cbiAgc2V0IGxhYmVsKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImxhYmVsXCIsIHZhbHVlKTtcbiAgfVxuICBnZXQgc2VsZWN0ZWQoKSB7XG4gICAgcmV0dXJuIGF0dHIodGhpcywgU0VMRUNURUQpICE9PSBudWxsO1xuICB9XG4gIHNldCBzZWxlY3RlZCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgU0VMRUNURUQsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyB0aGUgdGV4dCBzdHJpbmcgc3BlY2lmaWVkIGJ5IHRoZSBvcHRpb24gdGFnLiAqL1xuICBnZXQgdGV4dCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IHRoaXMudGV4dENvbnRlbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpKSB8fCBcIlwiO1xuICB9XG4gIHNldCB0ZXh0KHRleHQpIHtcbiAgICB0aGlzLnRleHRDb250ZW50ID0gdGV4dDtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIHZhbHVlIHdoaWNoIGlzIHJldHVybmVkIHRvIHRoZSBzZXJ2ZXIgd2hlbiB0aGUgZm9ybSBjb250cm9sIGlzIHN1Ym1pdHRlZC4gKi9cbiAgZ2V0IHZhbHVlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuIChfYTIgPSBhdHRyKHRoaXMsIFwidmFsdWVcIikpICE9IG51bGwgPyBfYTIgOiB0aGlzLnRleHQ7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcInZhbHVlXCIsIHZhbHVlKTtcbiAgfVxufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtb3B0aW9uXCIsIFVIVE1MT3B0aW9uRWxlbWVudCk7XG5cbi8vIHUtZGF0YWxpc3QudHNcbnZhciBMSVZFX1RJTUVSO1xudmFyIElOUFVUX0RFQk9VTkNFID0gMDtcbnZhciBJU19QUkVTUyA9IGZhbHNlO1xudmFyIElTX01PQklMRSA9IElTX0lPUyB8fCBJU19BTkRST0lEO1xudmFyIEVWRU5UUyA9IFwiY2xpY2ssZm9jdXNvdXQsaW5wdXQsa2V5ZG93bixtb3VzZWRvd24sbW91c2V1cFwiO1xudmFyIEVWRU5UU19JTlBVVCA9IFwiZm9jdXMsZm9jdXNpbixibHVyLGZvY3Vzb3V0XCI7XG52YXIgVEVYVFMgPSB7XG4gIHNpbmd1bGFyOiBcIiVkIGhpdFwiLFxuICBwbHVyYWw6IFwiJWQgaGl0c1wiXG59O1xudmFyIFVIVE1MRGF0YUxpc3RFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX3RleHRzID0gX19zcHJlYWRWYWx1ZXMoe30sIFRFWFRTKTtcbiAgICB0aGlzLl92YWx1ZSA9IFwiXCI7XG4gICAgYXR0YWNoU3R5bGUoXG4gICAgICB0aGlzLFxuICAgICAgYCR7RElTUExBWV9CTE9DS31cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbikgeyBkaXNwbGF5OiBibG9jazsgY3Vyc29yOiBwb2ludGVyIH1cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvbjpmb2N1cykgeyAke0ZPQ1VTX09VVExJTkV9IH1cblx0XHRcdDo6c2xvdHRlZCh1LW9wdGlvblthcmlhLWhpZGRlbj1cInRydWVcIl0pLFxuXHRcdFx0OjpzbG90dGVkKHUtb3B0aW9uW2Rpc2FibGVkXSksXG5cdFx0XHQ6OnNsb3R0ZWQodS1vcHRpb25baGlkZGVuXSkgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQgfWBcbiAgICApO1xuICB9XG4gIC8vIFVzZWQgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBhbm5vdW5jZW1lbnRzXG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJpZFwiLCAuLi5PYmplY3Qua2V5cyhURVhUUykubWFwKChrZXkpID0+IGBkYXRhLXNyLSR7a2V5fWApXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmhpZGRlbiA9IHRydWU7XG4gICAgdGhpcy5fcm9vdCA9IGdldFJvb3QodGhpcyk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJsaXN0Ym94XCIpO1xuICAgIGF0dHIodGhpcywgXCJ0YWJpbmRleFwiLCBcIi0xXCIpO1xuICAgIG9uKHRoaXMuX3Jvb3QsIFwiZm9jdXNpblwiLCB0aGlzKTtcbiAgICBvbih0aGlzLl9yb290LCBcImZvY3VzXCIsIHRoaXMsIHRydWUpO1xuICAgIG11dGF0aW9uT2JzZXJ2ZXIodGhpcywge1xuICAgICAgYXR0cmlidXRlRmlsdGVyOiBbXCJkaXNhYmxlZFwiLCBcImhpZGRlblwiLCBcImxhYmVsXCIsIFwidmFsdWVcIl0sXG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgc3VidHJlZTogdHJ1ZVxuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgb2ZmKHRoaXMuX3Jvb3QgfHwgdGhpcywgXCJmb2N1c1wiLCB0aGlzLCB0cnVlKTtcbiAgICBvZmYodGhpcy5fcm9vdCB8fCB0aGlzLCBcImZvY3VzaW5cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gICAgZGlzY29ubmVjdElucHV0KHRoaXMpO1xuICAgIHRoaXMuX3Jvb3QgPSB2b2lkIDA7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIF9wcmV2LCBuZXh0KSB7XG4gICAgY29uc3QgdGV4dCA9IHByb3AgPT0gbnVsbCA/IHZvaWQgMCA6IHByb3Auc3BsaXQoXCJkYXRhLXNyLVwiKVsxXTtcbiAgICBjb25zdCBjc3MgPSBgaW5wdXRbbGlzdD1cIiR7dGhpcy5pZH1cIl1gO1xuICAgIGlmIChURVhUU1t0ZXh0XSkgdGhpcy5fdGV4dHNbdGV4dF0gPSBuZXh0IHx8IFRFWFRTW3RleHRdO1xuICAgIGVsc2UgaWYgKHRoaXMuX3Jvb3QpXG4gICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHRoaXMuX3Jvb3QucXVlcnlTZWxlY3RvckFsbChjc3MpKVxuICAgICAgICBzZXR1cElucHV0KHRoaXMsIGlucHV0KTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHsgdGFyZ2V0LCB0eXBlIH0gPSBldmVudDtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmICh0eXBlID09PSBcImNsaWNrXCIpIG9uQ2xpY2sodGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImZvY3VzXCIgfHwgdHlwZSA9PT0gXCJmb2N1c2luXCIpIG9uRm9jdXModGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImJsdXJcIiB8fCB0eXBlID09PSBcImZvY3Vzb3V0XCIpIG9uQmx1cih0aGlzLCBldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwia2V5ZG93blwiKSBvbktleURvd24odGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcIm1vdXNlZG93blwiKSBJU19QUkVTUyA9IHRoaXMuY29udGFpbnModGFyZ2V0KTtcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZXVwXCIpIElTX1BSRVNTID0gZmFsc2U7XG4gICAgaWYgKHR5cGUgPT09IFwibXV0YXRpb25cIiB8fCB0eXBlID09PSBcImlucHV0XCIpIHtcbiAgICAgIGNsZWFyVGltZW91dChJTlBVVF9ERUJPVU5DRSk7XG4gICAgICBJTlBVVF9ERUJPVU5DRSA9IHNldFRpbWVvdXQob25JbnB1dCwgMCwgdGhpcywgZXZlbnQpO1xuICAgIH1cbiAgfVxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShcInUtb3B0aW9uXCIpO1xuICB9XG59O1xudmFyIHNldEV4cGFuZGVkID0gKHNlbGYsIG9wZW4pID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKHNlbGYuaGlkZGVuICE9PSBvcGVuKSByZXR1cm47XG4gIHNlbGYuaGlkZGVuID0gIW9wZW47XG4gIGlmIChzZWxmLl9pbnB1dCkgc2V0dXBJbnB1dChzZWxmLCBzZWxmLl9pbnB1dCwgb3Blbik7XG4gIGlmIChzZWxmLnBvcG92ZXIgJiYgKChfYTIgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5pc0Nvbm5lY3RlZCkpIHtcbiAgICBhdHRyKHNlbGYuX2lucHV0LCBcInBvcG92ZXJ0YXJnZXRcIiwgdXNlSWQoc2VsZikpO1xuICAgIGF0dHIoc2VsZiwgXCJwb3BvdmVyXCIsIFwibWFudWFsXCIpO1xuICAgIHNlbGYudG9nZ2xlUG9wb3ZlcihvcGVuKTtcbiAgfVxuICBpZiAob3Blbikgb25JbnB1dChzZWxmKTtcbn07XG52YXIgZGlzY29ubmVjdElucHV0ID0gKHNlbGYpID0+IHtcbiAgaWYgKCFzZWxmLl9pbnB1dCkgcmV0dXJuO1xuICBvZmYoc2VsZi5faW5wdXQgfHwgc2VsZiwgRVZFTlRTX0lOUFVULCBzZWxmKTtcbiAgb2ZmKHNlbGYuX3Jvb3QgfHwgc2VsZiwgRVZFTlRTLCBzZWxmKTtcbiAgc2V0RXhwYW5kZWQoc2VsZiwgZmFsc2UpO1xuICBzZWxmLl9pbnB1dCA9IHZvaWQgMDtcbn07XG52YXIgc2V0dXBJbnB1dCA9IChzZWxmLCBpbnB1dCwgb3BlbiA9IGZhbHNlKSA9PiB7XG4gIG9uKGlucHV0LCBFVkVOVFNfSU5QVVQsIHNlbGYsIHRydWUpO1xuICBhdHRyKGlucHV0LCBcImFyaWEtYXV0b2NvbXBsZXRlXCIsIFwibGlzdFwiKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWNvbnRyb2xzXCIsIHVzZUlkKHNlbGYpKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWV4cGFuZGVkXCIsIGAke0lTX01PQklMRSA/IG9wZW4gOiBcInRydWVcIn1gKTtcbiAgYXR0cihpbnB1dCwgXCJhdXRvY29tcGxldGVcIiwgXCJvZmZcIik7XG4gIGF0dHIoaW5wdXQsIFwicm9sZVwiLCBcImNvbWJvYm94XCIpO1xufTtcbnZhciBvbkZvY3VzID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IGlzSW5wdXQgPSBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MSW5wdXRFbGVtZW50O1xuICBpZiAoaXNJbnB1dCAmJiBldmVudC5pc1RydXN0ZWQpIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuICBpZiAoc2VsZi5faW5wdXQgIT09IGV2ZW50LnRhcmdldCAmJiBpc0lucHV0ICYmIGV2ZW50LnRhcmdldC5saXN0ID09PSBzZWxmKSB7XG4gICAgaWYgKHNlbGYuX2lucHV0KSBkaXNjb25uZWN0SW5wdXQoc2VsZik7XG4gICAgc2VsZi5faW5wdXQgPSBldmVudC50YXJnZXQ7XG4gICAgc2VsZi5faW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImZvY3VzXCIpKTtcbiAgICBzZWxmLl9pbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNpblwiLCB7IGJ1YmJsZXM6IHRydWUgfSkpO1xuICAgIGF0dHIoc2VsZiwgU0FGRV9MQUJFTExFREJZLCB1c2VJZCgoX2EyID0gc2VsZi5faW5wdXQubGFiZWxzKSA9PSBudWxsID8gdm9pZCAwIDogX2EyWzBdKSk7XG4gICAgb24oc2VsZi5fcm9vdCB8fCBzZWxmLCBFVkVOVFMsIHNlbGYpO1xuICAgIHNldEV4cGFuZGVkKHNlbGYsIHRydWUpO1xuICAgIHNwZWFrKCk7XG4gIH1cbn07XG52YXIgb25CbHVyID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIGlmICghSVNfQU5EUk9JRCAmJiAhSVNfUFJFU1MgJiYgc2VsZi5faW5wdXQpIHNldFRpbWVvdXQob25CbHVycmVkLCAwLCBzZWxmKTtcbiAgaWYgKGV2ZW50LnRhcmdldCA9PT0gc2VsZi5faW5wdXQgJiYgZXZlbnQuaXNUcnVzdGVkKVxuICAgIGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xufTtcbnZhciBvbkJsdXJyZWQgPSAoc2VsZikgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByZWxhdGVkVGFyZ2V0ID0gKChfYTIgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQpIHx8IG51bGw7XG4gIGNvbnN0IGlucHV0ID0gc2VsZi5faW5wdXQ7XG4gIGlmIChpbnB1dCAmJiBpbnB1dCAhPT0gcmVsYXRlZFRhcmdldCAmJiAhc2VsZi5jb250YWlucyhyZWxhdGVkVGFyZ2V0KSkge1xuICAgIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJibHVyXCIsIHsgcmVsYXRlZFRhcmdldCB9KSk7XG4gICAgaW5wdXQuZGlzcGF0Y2hFdmVudChcbiAgICAgIG5ldyBGb2N1c0V2ZW50KFwiZm9jdXNvdXRcIiwgeyBidWJibGVzOiB0cnVlLCByZWxhdGVkVGFyZ2V0IH0pXG4gICAgKTtcbiAgICBkaXNjb25uZWN0SW5wdXQoc2VsZik7XG4gIH1cbn07XG52YXIgb25DbGljayA9IChzZWxmLCB7IHRhcmdldCB9KSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmICghc2VsZi5faW5wdXQgfHwgc2VsZi5faW5wdXQgPT09IHRhcmdldCkgcmV0dXJuIHNldEV4cGFuZGVkKHNlbGYsIHRydWUpO1xuICBmb3IgKGNvbnN0IG9wdCBvZiBzZWxmLm9wdGlvbnMpXG4gICAgaWYgKG9wdC5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgICBpZiAoYXR0cihzZWxmLCBcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCIpICE9PSBcInRydWVcIikge1xuICAgICAgICAoX2EyID0gc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZm9jdXMoKTtcbiAgICAgICAgc2V0RXhwYW5kZWQoc2VsZiwgZmFsc2UpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNldFZhbHVlKHNlbGYuX2lucHV0LCBvcHQudmFsdWUpO1xuICAgIH1cbiAgaWYgKElTX0FORFJPSUQpIG9uQmx1cnJlZChzZWxmKTtcbn07XG52YXIgb25LZXlEb3duID0gKHNlbGYsIGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKGUuYWx0S2V5IHx8IGUuY3RybEtleSB8fCBlLm1ldGFLZXkgfHwgZS5zaGlmdEtleSB8fCBlLmtleSA9PT0gXCJUYWJcIilcbiAgICByZXR1cm47XG4gIHNldEV4cGFuZGVkKHNlbGYsIGUua2V5ICE9PSBcIkVzY2FwZVwiKTtcbiAgY29uc3QgeyBrZXksIHRhcmdldCB9ID0gZTtcbiAgY29uc3Qgb3B0aW9ucyA9IFsuLi5zZWxmLm9wdGlvbnNdLmZpbHRlcihcbiAgICAoZWwpID0+IGF0dHIoZWwsIFwiYXJpYS1oaWRkZW5cIikgIT09IFwidHJ1ZVwiICYmIGVsLm9mZnNldEhlaWdodFxuICApO1xuICBjb25zdCBwcmV2ID0gb3B0aW9ucy5pbmRleE9mKHRhcmdldCk7XG4gIGxldCBuZXh0ID0gLTE7XG4gIGlmIChrZXkgPT09IFwiQXJyb3dEb3duXCIpIG5leHQgPSAocHJldiArIDEpICUgb3B0aW9ucy5sZW5ndGg7XG4gIGlmIChrZXkgPT09IFwiQXJyb3dVcFwiKSBuZXh0ID0gKH5wcmV2ID8gcHJldiA6IG9wdGlvbnMubGVuZ3RoKSAtIDE7XG4gIGlmICh+cHJldikge1xuICAgIGlmIChrZXkgPT09IFwiSG9tZVwiIHx8IGtleSA9PT0gXCJQYWdlVXBcIikgbmV4dCA9IDA7XG4gICAgaWYgKGtleSA9PT0gXCJFbmRcIiB8fCBrZXkgPT09IFwiUGFnZURvd25cIikgbmV4dCA9IG9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICBpZiAoa2V5ID09PSBcIkVudGVyXCIpIHtcbiAgICAgIG9wdGlvbnNbcHJldl0uY2xpY2soKTtcbiAgICAgIHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG4gIGlmIChvcHRpb25zW25leHRdKSBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSBvcHRpb24udGFiSW5kZXggPSAtMTtcbiAgaWYgKG9wdGlvbnNbbmV4dF0pIGUucHJldmVudERlZmF1bHQoKTtcbiAgKF9hMiA9IG9wdGlvbnNbbmV4dF0gfHwgc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZm9jdXMoKTtcbn07XG52YXIgb25JbnB1dCA9IChzZWxmLCBlKSA9PiB7XG4gIGNvbnN0IHsgX3RleHRzLCBfcm9vdCwgX2lucHV0LCBvcHRpb25zIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9IChfaW5wdXQgPT0gbnVsbCA/IHZvaWQgMCA6IF9pbnB1dC52YWx1ZS50b0xvd2VyQ2FzZSgpLnRyaW0oKSkgfHwgXCJcIjtcbiAgY29uc3QgZmlsdGVyID0gIXNlbGYuaGFzQXR0cmlidXRlKFwiZGF0YS1ub2ZpbHRlclwiKTtcbiAgY29uc3QgaGlkZGVuID0gW107XG4gIGNvbnN0IHZpc2libGUgPSBbXTtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGNvbnN0IGhpZGUgPSBvcHQuZGlzYWJsZWQgfHwgb3B0LmhpZGRlbiB8fCBmaWx0ZXIgJiYgIW9wdC5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHZhbHVlKTtcbiAgICAoaGlkZSA/IGhpZGRlbiA6IHZpc2libGUpLnB1c2gob3B0KTtcbiAgfVxuICBmb3IgKGNvbnN0IG9wdCBvZiBoaWRkZW4pIGF0dHIob3B0LCBcImFyaWEtaGlkZGVuXCIsIFwidHJ1ZVwiKTtcbiAgZm9yIChjb25zdCBvcHQgb2YgdmlzaWJsZSkgYXR0cihvcHQsIFwiYXJpYS1oaWRkZW5cIiwgXCJmYWxzZVwiKTtcbiAgY29uc3QgdG90YWwgPSB2aXNpYmxlLmxlbmd0aDtcbiAgY2xlYXJUaW1lb3V0KExJVkVfVElNRVIpO1xuICBpZiAoKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUudHlwZSkgPT09IFwiaW5wdXRcIiAmJiB2YWx1ZSAhPT0gc2VsZi5fdmFsdWUpXG4gICAgTElWRV9USU1FUiA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgdGV4dCA9IGAkeyF0b3RhbCAmJiBzZWxmLmlubmVyVGV4dC50cmltKCkgfHwgYCR7X3RleHRzW3RvdGFsID09PSAxID8gXCJzaW5ndWxhclwiIDogXCJwbHVyYWxcIl19YC5yZXBsYWNlKFwiJWRcIiwgYCR7dG90YWx9YCl9YDtcbiAgICAgIGlmICghc2VsZi5oaWRkZW4gJiYgKF9yb290ID09IG51bGwgPyB2b2lkIDAgOiBfcm9vdC5hY3RpdmVFbGVtZW50KSA9PT0gX2lucHV0KSBzcGVhayh0ZXh0KTtcbiAgICAgIHNlbGYuX3ZhbHVlID0gdmFsdWU7XG4gICAgfSwgMWUzKTtcbiAgaWYgKElTX0lPUylcbiAgICB2aXNpYmxlLmZvckVhY2goKG9wdCwgaWR4KSA9PiBhdHRyKG9wdCwgXCJ0aXRsZVwiLCBgJHtpZHggKyAxfS8ke3RvdGFsfWApKTtcbn07XG5pZiAoSVNfQlJPV1NFUilcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcImxpc3RcIiwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBnZXRSb290KHRoaXMpLmdldEVsZW1lbnRCeUlkKGF0dHIodGhpcywgXCJsaXN0XCIpIHx8IFwiXCIpO1xuICAgIH1cbiAgfSk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWRhdGFsaXN0XCIsIFVIVE1MRGF0YUxpc3RFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxEYXRhTGlzdEVsZW1lbnQgfTtcbiIsImltcG9ydCB7IFVIVE1MQ29tYm9ib3hFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtY29tYm9ib3hcIjtcbmltcG9ydCB7IFVIVE1MRGF0YUxpc3RFbGVtZW50IH0gZnJvbSBcIkB1LWVsZW1lbnRzL3UtZGF0YWxpc3RcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRRVUlDS19FVkVOVCxcblx0YW5jaG9yUG9zaXRpb24sXG5cdGF0dHIsXG5cdGlzSW5wdXRMaWtlLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdG9uTXV0YXRpb24sXG5cdHVzZUlkLFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0ZJRUxEID0gc3R5bGVzLmZpZWxkLnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19WQUxJREFUSU9OUyA9IHN0eWxlcy52YWxpZGF0aW9uLnNwbGl0KFwiIFwiKTtcbmNvbnN0IENTU19WQUxJREFUSU9OID0gQ1NTX1ZBTElEQVRJT05TWzBdO1xuXG5jb25zdCBnZXRUZXh0ID0gKHN0eWxlOiBDU1NTdHlsZURlY2xhcmF0aW9uLCBrZXk6IHN0cmluZykgPT5cblx0c3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShgLS1tdGRzLXRleHQtJHtrZXl9YCk/LnNsaWNlKDEsIC0xKSB8fCBcIlwiOyAvLyBzbGljZSB0byB0cmltIHF1b3Rlc1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihmaWVsZHM6IEhUTUxDb2xsZWN0aW9uT2Y8RWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpXG5cdFx0aWYgKGZpZWxkLmlzQ29ubmVjdGVkKSB7XG5cdFx0XHRjb25zdCBsYWJlbHM6IEhUTUxMYWJlbEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0Y29uc3QgZGVzY3M6IEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0bGV0IGNvbWJvYm94OiBVSFRNTENvbWJvYm94RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXHRcdFx0bGV0IGlucHV0OiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5cdFx0XHRsZXQgdmFsaWQgPSB0cnVlO1xuXG5cdFx0XHRmb3IgKGNvbnN0IGVsIG9mIGZpZWxkLmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSkge1xuXHRcdFx0XHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MTGFiZWxFbGVtZW50KSBsYWJlbHMucHVzaChlbCk7XG5cdFx0XHRcdGVsc2UgaWYgKGVsIGluc3RhbmNlb2YgVUhUTUxDb21ib2JveEVsZW1lbnQpIGNvbWJvYm94ID0gZWw7XG5cdFx0XHRcdGVsc2UgaWYgKGlzSW5wdXRMaWtlKGVsKSkgaW5wdXQgPSBlbDtcblx0XHRcdFx0ZWxzZSBpZiAoZWwuaGFzQXR0cmlidXRlKFwiZGF0YS1kZXNjcmlwdGlvblwiKSkgZGVzY3MucHVzaChlbCk7XG5cdFx0XHRcdGVsc2UgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhDU1NfVkFMSURBVElPTikpIHtcblx0XHRcdFx0XHR2YWxpZCA9XG5cdFx0XHRcdFx0XHRhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8XG5cdFx0XHRcdFx0XHQhZWwuY2xpZW50V2lkdGggfHxcblx0XHRcdFx0XHRcdCFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0ZGVzY3MudW5zaGlmdChlbCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBIVE1MUGFyYWdyYXBoRWxlbWVudClcblx0XHRcdFx0XHRkZXNjcy5zb21lKChkZXNjKSA9PiBkZXNjLmNvbnRhaW5zKGVsKSkgfHwgZGVzY3MucHVzaChlbCk7IC8vIE9ubHkgYWRkIGlmIG5vdCBhbHJlYWR5IGluc2lkZSBkZXNjcmlwdGlvblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaW5wdXQpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBsYWJlbCBvZiBsYWJlbHMpIGxhYmVsLmh0bWxGb3IgPSB1c2VJZChpbnB1dCk7XG5cdFx0XHRcdHJlbmRlckNvbWJvYm94KGNvbWJvYm94KTtcblx0XHRcdFx0cmVuZGVyQ291bnRlcihpbnB1dCk7XG5cdFx0XHRcdHJlbmRlclRleHRhcmVhU2l6ZShpbnB1dCk7XG5cdFx0XHRcdGF0dHIoaW5wdXQsIFwiYXJpYS1kZXNjcmliZWRieVwiLCBkZXNjcy5tYXAodXNlSWQpLmpvaW4oXCIgXCIpIHx8IG51bGwpOyAvLyBSZW1vdmUgaWYgZW1wdHlcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWludmFsaWRcIiwgYCR7IXZhbGlkfWApO1xuXHRcdFx0fVxuXHRcdH1cbn1cblxuLy8gaU9TIGRvZXMgbm90IHN1cHBvcnQgZmllbGQtc2l6aW5nOiBjb250ZW50LCBzbyB3ZSBuZWVkIHRvIG1hbnVhbGx5IHJlc2l6ZVxuZnVuY3Rpb24gcmVuZGVyVGV4dGFyZWFTaXplKHRleHRhcmVhOiBFbGVtZW50KSB7XG5cdGlmICh0ZXh0YXJlYSBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcblx0XHR0ZXh0YXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tbXRkcy10ZXh0YXJlYS1oZWlnaHRcIiwgXCJhdXRvXCIpO1xuXHRcdHRleHRhcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuXHRcdFx0XCItLW10ZHMtdGV4dGFyZWEtaGVpZ2h0XCIsXG5cdFx0XHRgJHt0ZXh0YXJlYS5zY3JvbGxIZWlnaHR9cHhgLFxuXHRcdCk7XG5cdH1cbn1cblxuLy8gU2V0dXAgdHJhbnNsYXRpb25zIGZyb20gQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzXG5mdW5jdGlvbiByZW5kZXJDb21ib2JveChlbDogVUhUTUxDb21ib2JveEVsZW1lbnQgfCBudWxsKSB7XG5cdGlmICghZWw/Lmxpc3QgfHwgZWwubGlzdD8uaGFzQXR0cmlidXRlKFwicG9wb3ZlclwiKSkgcmV0dXJuO1xuXHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKTtcblx0YXR0cihlbCwgXCJkYXRhLXNyLWFkZGVkXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtYWRkZWRcIikpO1xuXHRhdHRyKGVsLCBcImRhdGEtc3ItZW1wdHlcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1lbXB0eVwiKSk7XG5cdGF0dHIoZWwsIFwiZGF0YS1zci1mb3VuZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWZvdW5kXCIpKTtcblx0YXR0cihlbCwgXCJkYXRhLXNyLWludmFsaWRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1pbnZhbGlkXCIpKTtcblx0YXR0cihlbCwgXCJkYXRhLXNyLW9mXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtb2ZcIikpO1xuXHRhdHRyKGVsLCBcImRhdGEtc3ItcmVtb3ZlXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtcmVtb3ZlXCIpKTtcblx0YXR0cihlbCwgXCJkYXRhLXNyLXJlbW92ZWRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1yZW1vdmVkXCIpKTtcblx0YXR0cihlbC5saXN0LCBcImRhdGEtc3ItcGx1cmFsXCIsIGdldFRleHQoc3R5bGUsIFwiZGF0YWxpc3QtcGx1cmFsXCIpKTtcblx0YXR0cihlbC5saXN0LCBcImRhdGEtc3Itc2luZ3VsYXJcIiwgZ2V0VGV4dChzdHlsZSwgXCJkYXRhbGlzdC1zaW5ndWxhclwiKSk7XG5cdGF0dHIoZWwubGlzdCwgXCJwb3BvdmVyXCIsIFwibWFudWFsXCIpO1xufVxuXG5mdW5jdGlvbiByZW5kZXJDb3VudGVyKGlucHV0OiBIVE1MSW5wdXRFbGVtZW50KSB7XG5cdGNvbnN0IGVsID0gaW5wdXQ/Lm5leHRFbGVtZW50U2libGluZztcblx0Y29uc3QgbGltaXQgPSBlbCAmJiBhdHRyKGVsLCBcImRhdGEtY291bnRcIik7XG5cblx0aWYgKGVsICYmIGxpbWl0KSB7XG5cdFx0Y29uc3QgcmVtYWluZGVyID0gTnVtYmVyKGxpbWl0KSAtIGlucHV0LnZhbHVlLmxlbmd0aDtcblx0XHRjb25zdCBuZXh0SW52YWxpZCA9IHJlbWFpbmRlciA8IDA7XG5cdFx0Y29uc3QgcHJldkludmFsaWQgPSBhdHRyKGVsLCBcImFyaWEtbGl2ZVwiKSA9PT0gXCJwb2xpdGVcIjtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsIHx8IGlucHV0KTtcblx0XHRjb25zdCBvdmVyID0gZ2V0VGV4dChzdHlsZSwgXCJjb3VudC1vdmVyXCIpO1xuXHRcdGNvbnN0IHVuZGVyID0gZ2V0VGV4dChzdHlsZSwgXCJjb3VudC11bmRlclwiKTtcblxuXHRcdGlmIChwcmV2SW52YWxpZCAhPT0gbmV4dEludmFsaWQpIHtcblx0XHRcdGF0dHIoZWwsIFwiYXJpYS1saXZlXCIsIG5leHRJbnZhbGlkID8gXCJwb2xpdGVcIiA6IFwib2ZmXCIpO1xuXHRcdFx0Zm9yIChjb25zdCBjc3Mgb2YgQ1NTX1ZBTElEQVRJT05TKSBlbC5jbGFzc0xpc3QudG9nZ2xlKGNzcywgbmV4dEludmFsaWQpO1xuXHRcdH1cblx0XHRlbC50ZXh0Q29udGVudCA9IChuZXh0SW52YWxpZCA/IG92ZXIgOiB1bmRlcikucmVwbGFjZShcblx0XHRcdFwiJWRcIixcblx0XHRcdGAke01hdGguYWJzKHJlbWFpbmRlcil9YCxcblx0XHQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRvZ2dsZSh7IHRhcmdldDogZWwsIG5ld1N0YXRlIH06IEV2ZW50ICYgeyBuZXdTdGF0ZT86IHN0cmluZyB9KSB7XG5cdGlmIChlbCBpbnN0YW5jZW9mIFVIVE1MRGF0YUxpc3RFbGVtZW50KSB7XG5cdFx0Y29uc3Qgcm9vdCA9IGVsLmdldFJvb3ROb2RlKCkgYXMgU2hhZG93Um9vdCB8IG51bGw7XG5cdFx0Y29uc3QgYW5jaG9yID0gcm9vdD8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG5cdFx0XHRgW3BvcG92ZXJ0YXJnZXQ9XCIke2VsLmlkfVwiXWAsXG5cdFx0KTtcblxuXHRcdGlmIChuZXdTdGF0ZSA9PT0gXCJjbG9zZWRcIikgYW5jaG9yUG9zaXRpb24oZWwsIGZhbHNlKTtcblx0XHRlbHNlIGlmIChhbmNob3IpIHtcblx0XHRcdGVsLnN0eWxlLndpZHRoID0gYCR7YW5jaG9yLmNsaWVudFdpZHRofXB4YDtcblx0XHRcdGFuY2hvclBvc2l0aW9uKGVsLCBhbmNob3IsIFwiYm90dG9tXCIsIHRydWUpO1xuXHRcdH1cblx0fVxufVxuLy8gVXBkYXRlIHdoZW4gdHlwaW5nXG5mdW5jdGlvbiBoYW5kbGVJbnB1dCh7IHRhcmdldCB9OiBFdmVudCkge1xuXHRpZiAoaXNJbnB1dExpa2UodGFyZ2V0KSkge1xuXHRcdHJlbmRlckNvdW50ZXIodGFyZ2V0KTtcblx0XHRyZW5kZXJUZXh0YXJlYVNpemUodGFyZ2V0KTtcblx0fVxufVxuXG4vLyBQcmV2ZW50IGJyb3dzZXJzIGZyb20gc2hvd2luZyBkZWZhdWx0IHZhbGlkYXRpb24gYnViYmxlc1xuZnVuY3Rpb24gaGFuZGxlSW52YWxpZChldmVudDogRXZlbnQpIHtcblx0aWYgKChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihgLiR7Q1NTX0ZJRUxEfWApKVxuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG59XG5cbi8vIFBvc2l0aW9uIGNvbWJvYm94IHdoZW4gY2hhbmdpbmcgY29udGVudFxuZnVuY3Rpb24gaGFuZGxlQmVmb3JlQ2hhbmdlKHsgdGFyZ2V0OiBlbCB9OiBFdmVudCkge1xuXHRjb25zdCBsaXN0ID0gZWwgaW5zdGFuY2VvZiBVSFRNTENvbWJvYm94RWxlbWVudCAmJiBlbC5saXN0O1xuXHRpZiAobGlzdCAmJiAhbGlzdD8uaGlkZGVuKVxuXHRcdHNldFRpbWVvdXQoKCkgPT4gYW5jaG9yUG9zaXRpb24obGlzdCwgZWwsIDIsIHRydWUpLCAxMCk7IC8vIFJlcG9zaXRpb24gbGlzdCBpZiBub3QgaGlkZGVuXG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRCwgaGFuZGxlTXV0YXRpb24pO1xuXHRvbihkb2N1bWVudCwgXCJiZWZvcmVjaGFuZ2VcIiwgaGFuZGxlQmVmb3JlQ2hhbmdlLCBRVUlDS19FVkVOVCk7XG5cdG9uKGRvY3VtZW50LCBcImlucHV0XCIsIGhhbmRsZUlucHV0LCBRVUlDS19FVkVOVCk7XG5cdG9uKGRvY3VtZW50LCBcImludmFsaWRcIiwgaGFuZGxlSW52YWxpZCwgdHJ1ZSk7IC8vIFVzZSBjYXB0dXJlIGFzIGludmFsaWQgZG9lcyBub2UgYnViYmxlXG5cdG9uKGRvY3VtZW50LCBcInRvZ2dsZVwiLCBoYW5kbGVUb2dnbGUsIFFVSUNLX0VWRU5UKTsgLy8gVXNlIGNhcHR1cmUgc2luY2UgdG9nZ2xlIGRvZXMgbm90IGJ1YmJsZVxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgaXNJbnB1dExpa2UsIG9uTG9hZGVkLCBvbk11dGF0aW9uLCB1c2VJZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfRklFTERTRVQgPSBzdHlsZXMuZmllbGRzZXQuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX1ZBTElEQVRJT04gPSBzdHlsZXMudmFsaWRhdGlvbi5zcGxpdChcIiBcIilbMF07XG5jb25zdCBBUklBX0RFU0MgPSBcImFyaWEtZGVzY3JpYmVkYnlcIjtcbmNvbnN0IEFSSUFfSU5WQUxJRCA9IFwiYXJpYS1pbnZhbGlkXCI7XG5cbi8vIFVzaW5nIHJlcXVlc3RBbmltYXRpb25GcmFtZSB0byBlbnN1cmUgaXQgcnVucyBhZnRlciBmaWVsZC1vYnNlcnZlclxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24oZmllbGRzZXRzOiBIVE1MQ29sbGVjdGlvbk9mPEVsZW1lbnQ+KSB7XG5cdHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG5cdFx0Zm9yIChjb25zdCBmaWVsZHNldCBvZiBmaWVsZHNldHMpXG5cdFx0XHRpZiAoZmllbGRzZXQuaXNDb25uZWN0ZWQpIHtcblx0XHRcdFx0Y29uc3QgaW5wdXRzOiBIVE1MSW5wdXRFbGVtZW50W10gPSBbXTtcblx0XHRcdFx0bGV0IHZhbGlkYXRpb25JZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBlbCBvZiBmaWVsZHNldC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikpIHtcblx0XHRcdFx0XHRpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkgdmFsaWRhdGlvbklkID0gdXNlSWQoZWwpO1xuXHRcdFx0XHRcdGVsc2UgaWYgKGlzSW5wdXRMaWtlKGVsKSkgaW5wdXRzLnB1c2goZWwpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCBpbnB1dCBvZiBpbnB1dHMpIHtcblx0XHRcdFx0XHRjb25zdCBkZXNjID0gYXR0cihpbnB1dCwgQVJJQV9ERVNDKT8ucmVwbGFjZSh2YWxpZGF0aW9uSWQgfHwgXCIjXCIsIFwiXCIpO1xuXG5cdFx0XHRcdFx0YXR0cihpbnB1dCwgQVJJQV9ERVNDLCBgJHt2YWxpZGF0aW9uSWQgfHwgXCJcIn0gJHtkZXNjIHx8IFwiXCJ9YC50cmltKCkpO1xuXHRcdFx0XHRcdGF0dHIoaW5wdXQsIEFSSUFfSU5WQUxJRCwgYCR7ISF2YWxpZGF0aW9uSWR9YCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0fSk7XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfRklFTERTRVQsIGhhbmRsZU11dGF0aW9uKSxcbik7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0xPR08gPSBzdHlsZXMubG9nby5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZU11dGF0aW9uKFtsb2dvXTogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0aWYgKGxvZ28/LmlzQ29ubmVjdGVkICYmIGxvZ28/LmZpcnN0RWxlbWVudENoaWxkIGluc3RhbmNlb2YgU1ZHU1ZHRWxlbWVudCkge1xuXHRcdGZvciAoY29uc3QgaWNvbiBvZiBkb2N1bWVudC5oZWFkLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaW5rW3JlbH49J2ljb24nXVwiKSlcblx0XHRcdGljb24uc2V0QXR0cmlidXRlKFwicmVsXCIsIFwiZGlzYWJsZWRcIik7IC8vIERpc2FibGUgcHJldmlvdXMgaWNvbiAoYnV0IG5vdCByZW1vdmUgaXMgYXMgdGhpcyBtYWtlcyBOZXh0LmpzIHNhZClcblxuXHRcdGNvbnN0IHN2ZyA9IGxvZ28uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0Y29uc3QgaXNEb3QgPSBsb2dvPy5oYXNBdHRyaWJ1dGUoXCJkYXRhLWVudlwiKTtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHN2Zyk7XG5cdFx0Y29uc3QgdGV4dCA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCJjb2xvclwiKTtcblx0XHRjb25zdCBiYWNrID0gc3R5bGUuZ2V0UHJvcGVydHlWYWx1ZShcIi0tbXRkcy1sb2dvLWNvbG9yXCIpO1xuXHRcdGNvbnN0IGljb24gPSBzdmcub3V0ZXJIVE1MXG5cdFx0XHQucmVwbGFjZSgvXFxuKy9nLCBcIiBcIikgLy8gUHJldmVudCBsaW5lIGJyZWFrc1xuXHRcdFx0LnJlcGxhY2UoLyhmaWxsfHdpZHRofGhlaWdodHx4bWxucyk9XCJbXlwiXStcIi9naSwgXCJcIilcblx0XHRcdC5yZXBsYWNlKFwiPHN2Z1wiLCBgPHN2ZyB3aWR0aD1cIjQwXCIgaGVpZ2h0PVwiNDBcIiBmaWxsPVwiJHt0ZXh0fVwiYCk7XG5cblx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKFxuXHRcdFx0T2JqZWN0LmFzc2lnbihkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwibGlua1wiKSwge1xuXHRcdFx0XHRocmVmOiBgZGF0YTppbWFnZS9zdmcreG1sLCR7ZW5jb2RlVVJJQ29tcG9uZW50KGA8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDU1IDU1Jz48cmVjdCBmaWxsPScke2lzRG90ID8gXCJub25lXCIgOiBiYWNrfScgd2lkdGg9JzUxJyBoZWlnaHQ9JzUxJyB4PScyJyB5PScyJyBzdHJva2U9JyR7dGV4dH0nIHN0cm9rZS1kYXNoYXJyYXk9JzAuMDkgNi4zOCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2Utb3BhY2l0eT0nJHtpc0RvdCA/IDAuNiA6IDB9JyBzdHJva2Utd2lkdGg9JzIuMycgcng9JzI1LjUnLz48ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNy41IDcuNSlcIj4ke2ljb259PC9nPjwvc3ZnPmApfWAsXG5cdFx0XHRcdHJlbDogXCJpY29uXCIsXG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfTE9HTywgaGFuZGxlTXV0YXRpb24pKTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBRVUlDS19FVkVOVCwgYW5jaG9yUG9zaXRpb24sIGF0dHIsIG9uLCBvbkxvYWRlZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfUE9QT1ZFUiA9IHN0eWxlcy5wb3BvdmVyLnNwbGl0KFwiIFwiKVswXTtcbmxldCBPUEVOX1BPUE9WRVJTID0gMDsgLy8gU3BlZWQgdXAgYnkgb25seSBjaGVja2luZyBjbGlja3MgaWYgd2UgaGF2ZSBvcGVuIHBvcG92ZXJzXG5cbmZ1bmN0aW9uIGhhbmRsZVRvZ2dsZSh7IHRhcmdldDogZWwsIG5ld1N0YXRlIH06IEV2ZW50ICYgeyBuZXdTdGF0ZT86IHN0cmluZyB9KSB7XG5cdGlmIChlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmIGVsLmNsYXNzTGlzdC5jb250YWlucyhDU1NfUE9QT1ZFUikpIHtcblx0XHRjb25zdCBhbmNob3IgPSAoZWwuZ2V0Um9vdE5vZGUoKSBhcyBTaGFkb3dSb290KT8ucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oXG5cdFx0XHRgW3BvcG92ZXJ0YXJnZXQ9XCIke2VsLmlkfVwiXWAsXG5cdFx0KTtcblxuXHRcdGlmIChuZXdTdGF0ZSA9PT0gXCJjbG9zZWRcIikge1xuXHRcdFx0T1BFTl9QT1BPVkVSUyAtPSAxO1xuXHRcdFx0YW5jaG9yUG9zaXRpb24oZWwsIGZhbHNlKTtcblx0XHR9IGVsc2UgaWYgKGFuY2hvcikge1xuXHRcdFx0T1BFTl9QT1BPVkVSUyArPSAxO1xuXHRcdFx0YW5jaG9yUG9zaXRpb24oZWwsIGFuY2hvciwgYXR0cihlbCwgXCJkYXRhLXBvc2l0aW9uXCIpIHx8IFwiYm90dG9tXCIpO1xuXHRcdH1cblx0fVxufVxuXG4vLyBQb2x5ZmlsbCBwb3BvdmVydGFyZ2V0IGZvciA8YT4gKG5vdCBzdXBwb3J0ZWQgYnkgbmF0aXZlKVxuLy8gYW5kIGF1dG9tYXRpY2FsbHkgYXNzdW1lIHBvcG92ZXJ0YXJnZXQgaXMgdGhlIGNsb3Nlc3QgcGFyZW50IHBvcG92ZXJcbi8vIGJ1dCByZXNwZWN0IHRoZSBwb3BvdmVydGFyZ2V0IGFuZCBwb3BvdmVydGFyZ2V0YWN0aW9uIGF0dHJpYnV0ZVxuZnVuY3Rpb24gaGFuZGxlTGlua0NsaWNrKHsgdGFyZ2V0IH06IEV2ZW50KSB7XG5cdGNvbnN0IGNsb3NlID1cblx0XHRPUEVOX1BPUE9WRVJTICYmICh0YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImEsW3BvcG92ZXJ0YXJnZXRhY3Rpb25dXCIpO1xuXG5cdGlmIChjbG9zZSkge1xuXHRcdGNvbnN0IGFjdGlvbiA9IGF0dHIoY2xvc2UsIFwicG9wb3ZlcnRhcmdldGFjdGlvblwiKSB8fCBcInRvZ2dsZVwiO1xuXHRcdGNvbnN0IG9wZW4gPSBhY3Rpb24gPT09IFwic2hvd1wiIHx8IChhY3Rpb24gPT09IFwiaGlkZVwiID8gZmFsc2UgOiB1bmRlZmluZWQpO1xuXHRcdGNvbnN0IHRhcmdldCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGF0dHIoY2xvc2UsIFwicG9wb3ZlcnRhcmdldFwiKSB8fCBcIlwiKTtcblx0XHRjb25zdCBwb3BvdmVyID0gKHRhcmdldCB8fCBjbG9zZSkuY2xvc2VzdDxIVE1MRWxlbWVudD4oYC4ke0NTU19QT1BPVkVSfWApO1xuXG5cdFx0Ly8gUG9wb3ZlciBjYW4gYmUgZGlzY29ubmV0ZWQgYnkgY2xpY2sgaGFuZGxlciBkZWVwZXIgZG93biBpbiB0aGUgRE9NIHRocmVlIGJlZm9yZSByZWFjaGluZyBkb2N1bWVudFxuXHRcdGlmIChwb3BvdmVyPy5pc0Nvbm5lY3RlZCAmJiBwb3BvdmVyPy50b2dnbGVQb3BvdmVyKVxuXHRcdFx0cG9wb3Zlci50b2dnbGVQb3BvdmVyKG9wZW4pO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwidG9nZ2xlXCIsIGhhbmRsZVRvZ2dsZSwgUVVJQ0tfRVZFTlQpOyAvLyBVc2UgY2FwdHVyZSBzaW5jZSB0b2dnbGUgZG9lcyBub3QgYnViYmxlXG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZUxpbmtDbGljayk7IC8vIEFsbG93IGA8YT5gIHRvIHVzZSBgcG9wb3ZlcnRhcmdldGAgYXMgd2VsbFxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX1RBQkxFID0gc3R5bGVzLnRhYmxlLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlTXV0YXRpb24odGFibGVzOiBIVE1MQ29sbGVjdGlvbk9mPEhUTUxUYWJsZUVsZW1lbnQ+KSB7XG5cdGZvciAoY29uc3QgdGFibGUgb2YgdGFibGVzKSB7XG5cdFx0Y29uc3QgdGhzOiBzdHJpbmdbXSA9IFtdOyAvLyBBZGQgZGF0YS10aD1cIlwiIHRvIGVhY2ggY2VsbCB0byBzdXBwb3J0IGRhdGEtbW9iaWxlIGRlc2lnbnNcblxuXHRcdGF0dHIodGFibGUsIFwicm9sZVwiLCBcInRhYmxlXCIpOyAvLyBBZGQgaGVscGluZyByb2xlPVwiXCIgdG8gZW5zdXJlIHNjcmVlbiByZWFkZXJzIHVuZGVyc3RhbmQgdGhlIHRhYmxlIHJlZ2FyZGxlc3Mgb2YgQ1NTIGRpc3BsYXlcblx0XHRpZiAodGFibGUuY2FwdGlvbikgYXR0cih0YWJsZS5jYXB0aW9uLCBcInJvbGVcIiwgXCJjYXB0aW9uXCIpO1xuXHRcdGZvciAoY29uc3QgZ3JvdXAgb2YgW3RhYmxlLnRIZWFkLCB0YWJsZS50Rm9vdCwgLi4udGFibGUudEJvZGllc10pXG5cdFx0XHRpZiAoZ3JvdXApIHtcblx0XHRcdFx0YXR0cihncm91cCwgXCJyb2xlXCIsIFwicm93Z3JvdXBcIik7XG5cdFx0XHRcdGNvbnN0IGlzVGJvZHkgPSBncm91cC5ub2RlTmFtZSA9PT0gXCJUQk9EWVwiO1xuXG5cdFx0XHRcdGZvciAoY29uc3Qgcm93IG9mIGdyb3VwLnJvd3MpIHtcblx0XHRcdFx0XHRhdHRyKHJvdywgXCJyb2xlXCIsIFwicm93XCIpO1xuXHRcdFx0XHRcdGZvciAoY29uc3QgY2VsbCBvZiByb3cuY2VsbHMpIHtcblx0XHRcdFx0XHRcdGlmIChpc1Rib2R5KSBhdHRyKGNlbGwsIFwiZGF0YS10aFwiLCB0aHNbY2VsbC5jZWxsSW5kZXhdIHx8IFwiOmVtcHR5XCIpO1xuXHRcdFx0XHRcdFx0ZWxzZSB0aHMucHVzaChjZWxsLmlubmVyVGV4dC50cmltKCkpOyAvLyBVc2luZyBpbm5lclRleHQgdG8gb25seSBpbmNsdWRlIHZpc2libGUgdGV4dFxuXHRcdFx0XHRcdFx0aWYgKGNlbGwubm9kZU5hbWUgPT09IFwiVERcIikgYXR0cihjZWxsLCBcInJvbGVcIiwgXCJjZWxsXCIpO1xuXHRcdFx0XHRcdFx0ZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGF0dHIoY2VsbCwgXCJyb2xlXCIsIGlzVGJvZHkgPyBcInJvd2hlYWRlclwiIDogXCJjb2x1bW5oZWFkZXJcIik7XG5cdFx0XHRcdFx0XHRcdGF0dHIoY2VsbCwgXCJzY29wZVwiLCBpc1Rib2R5ID8gXCJyb3dcIiA6IFwiY29sXCIpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfVEFCTEUsIGhhbmRsZU11dGF0aW9uKSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgb24sIG9uTG9hZGVkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19UT0dHTEVHUk9VUCA9IGAuJHtzdHlsZXMudG9nZ2xlZ3JvdXAuc3BsaXQoXCIgXCIpWzBdfWA7XG5cbi8vIFByZXZlbnQgYnJvd3NlcnMgZnJvbSBzaG93aW5nIGRlZmF1bHQgdmFsaWRhdGlvbiBidWJibGVzXG5mdW5jdGlvbiBoYW5kbGVLZXlEb3duKGV2ZW50OiBFdmVudCAmIFBhcnRpYWw8S2V5Ym9hcmRFdmVudD4pIHtcblx0Y29uc3QgeyBrZXksIHRhcmdldDogZWwgfSA9IGV2ZW50O1xuXHRjb25zdCBncm91cCA9IGVsIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiBlbC5jbG9zZXN0KENTU19UT0dHTEVHUk9VUCk7XG5cblx0aWYgKCFncm91cCkgcmV0dXJuO1xuXHRpZiAoa2V5ID09PSBcIkVudGVyXCIpIGVsLmNsaWNrKCk7XG5cdGlmIChrZXk/LnN0YXJ0c1dpdGgoXCJBcnJvd1wiKSkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0Y29uc3QgaW5wdXRzID0gZ3JvdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKTtcblx0XHRjb25zdCBpbmRleCA9IFsuLi5pbnB1dHNdLmluZGV4T2YoZWwpO1xuXHRcdGNvbnN0IG1vdmUgPSBrZXkubWF0Y2goL0Fycm93KFJpZ2h0fERvd24pLykgPyAxIDogLTE7XG5cdFx0aW5wdXRzWyhpbnB1dHMubGVuZ3RoICsgaW5kZXggKyBtb3ZlKSAlIGlucHV0cy5sZW5ndGhdPy5mb2N1cygpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uKGRvY3VtZW50LCBcImtleWRvd25cIiwgaGFuZGxlS2V5RG93bikpO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdElTX0JST1dTRVIsXG5cdFFVSUNLX0VWRU5ULFxuXHRhbmNob3JQb3NpdGlvbixcblx0YXR0cixcblx0b24sXG5cdG9uTG9hZGVkLFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgREVTQ1JJQkVEQlkgPSBcImFyaWEtZGVzY3JpYmVkYnlcIjtcbmNvbnN0IEVTQyA9IFwiRXNjYXBlXCI7XG5jb25zdCBMQUJFTExFREJZID0gXCJhcmlhLWxhYmVsbGVkYnlcIjtcbmNvbnN0IFBPU0lUSU9OX0NTU19QUk9QRVJUWSA9IFwiLS1tdGRzLXRvb2x0aXAtcG9zaXRpb25cIjtcbmNvbnN0IFRIUk9UVExFX0RFTEFZID0gMzAwO1xuY29uc3QgVE9PTFRJUCA9IElTX0JST1dTRVJcblx0PyBPYmplY3QuYXNzaWduKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIHtcblx0XHRcdGNsYXNzTmFtZTogc3R5bGVzLl90b29sdGlwLFxuXHRcdFx0aWQ6IFwibXRkcy10b29sdGlwXCIsXG5cdFx0XHRwb3BvdmVyOiBcIm1hbnVhbFwiLFxuXHRcdH0pXG5cdDogbnVsbDsgLy8gQ3JlYXRlIGEgZHVtbXkgZWxlbWVudCB0byBhdm9pZCBudWxsIGNoZWNrc1xuXG5sZXQgQU5DSE9SOiBFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5sZXQgTEFTVF9DQUxMID0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO1xubGV0IFRIUk9UVExFOiBudW1iZXIgfCBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiA9IDA7XG5cbmZ1bmN0aW9uIGhhbmRsZU1vdmUoeyB0YXJnZXQsIHR5cGUsIGtleSB9OiBFdmVudCAmIHsga2V5Pzogc3RyaW5nIH0pIHtcblx0aWYgKHR5cGUgPT09IFwia2V5ZG93blwiICYmIGtleSAhPT0gRVNDKSByZXR1cm47IC8vIEFsbG93IEVTQyBkaXNtaXNzIHRvIGZvbGxvdyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL3Rvb2x0aXAvXG5cdGNvbnN0IHdhaXQgPSBMQVNUX0NBTEwgKyBUSFJPVFRMRV9ERUxBWSAtIERhdGUubm93KCk7XG5cdGNsZWFyVGltZW91dChUSFJPVFRMRSk7XG5cdFRIUk9UVExFID0gc2V0VGltZW91dChcblx0XHRoYW5kbGVNb3ZlVGhyb3R0bGVkLFxuXHRcdE1hdGgubWF4KHdhaXQsIDApLFxuXHRcdGtleSA9PT0gRVNDID8gbnVsbCA6IHRhcmdldCxcblx0KTtcbn1cblxuLy8gVXNpbmcgYSB0aHJvdHRsZWQgZnVuY3Rpb24gdG8gYXZvaWQgcGVyZm9ybWFuY2UgaXNzdWVzXG5mdW5jdGlvbiBoYW5kbGVNb3ZlVGhyb3R0bGVkKHRhcmdldDogRWxlbWVudCB8IG51bGwpIHtcblx0TEFTVF9DQUxMID0gRGF0ZS5ub3coKTtcblxuXHQvLyBCdWlsZCBhbmQgYXBwZW5kIHRvb2x0aXAgaWYgbm90IGV4aXN0aW5nXG5cdGlmICghVE9PTFRJUCB8fCB0YXJnZXQgPT09IFRPT0xUSVApIHJldHVybjsgLy8gQWxsb3cgdG9vbHRpcCB0byBiZSBob3ZlcmVkLCBmb2xsb3dpbmcgaHR0cHM6Ly93d3cudzMub3JnL1RSL1dDQUcyMS8jY29udGVudC1vbi1ob3Zlci1vci1mb2N1c1xuXHRpZiAoIVRPT0xUSVA/LmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChUT09MVElQKTsgLy8gRW5zdXJlIGNvbm5lY3RlZFxuXHRsZXQgYW5jaG9yID0gdGFyZ2V0Py5jbG9zZXN0Py48RWxlbWVudD4oXCJbZGF0YS10b29sdGlwXVwiKSB8fCBudWxsO1xuXG5cdC8vIE5vIG5lZWQgdG8gdXBkYXRlXG5cdGlmIChhbmNob3IgPT09IEFOQ0hPUikgcmV0dXJuO1xuXG5cdGNvbnN0IGNvbnRlbnQgPSAoYW5jaG9yICYmIGF0dHIoYW5jaG9yLCBcImRhdGEtdG9vbHRpcFwiKSkgfHwgXCJcIjtcblx0Y29uc3QgcG9zaXRpb24gPVxuXHRcdChhbmNob3IgJiYgYXR0cihhbmNob3IsIFwiZGF0YS10b29sdGlwLXBvc2l0aW9uXCIpKSB8fFxuXHRcdHdpbmRvd1xuXHRcdFx0LmdldENvbXB1dGVkU3R5bGUoYW5jaG9yIHx8IGRvY3VtZW50LmJvZHkpXG5cdFx0XHQuZ2V0UHJvcGVydHlWYWx1ZShQT1NJVElPTl9DU1NfUFJPUEVSVFkpXG5cdFx0XHQ/LnRyaW0oKSB8fFxuXHRcdFwidG9wXCI7XG5cblx0Y29uc3QgaXNIaWRkZW4gPVxuXHRcdCFjb250ZW50IHx8XG5cdFx0Y29udGVudCA9PT0gXCJmYWxzZVwiIHx8XG5cdFx0Y29udGVudCA9PT0gXCJ0cnVlXCIgfHxcblx0XHRwb3NpdGlvbiA9PT0gXCJub25lXCI7XG5cblx0aWYgKGlzSGlkZGVuKSBhbmNob3IgPSBudWxsOyAvLyBEbyBub3Qgc2hvdyB0b29sdGlwIGlmIGJvb2xpc2ggdmFsdWVcblx0aWYgKGFuY2hvcikgVE9PTFRJUC50ZXh0Q29udGVudCA9IGNvbnRlbnQ7IC8vIE9ubHkgdXBkYXRlIGNvbnRlbnQgaWYgbmV3IGFuY2hvclxuXG5cdGNvbnN0IGhhZExhYmVsID0gQU5DSE9SICYmIGF0dHIoQU5DSE9SLCBMQUJFTExFREJZKSA9PT0gVE9PTFRJUD8uaWQ7XG5cdGNvbnN0IGhhc0xhYmVsID1cblx0XHQoYW5jaG9yIGluc3RhbmNlb2YgSFRNTEVsZW1lbnRcblx0XHRcdD8gYW5jaG9yLmlubmVyVGV4dFxuXHRcdFx0OiBhbmNob3I/LnRleHRDb250ZW50XG5cdFx0KT8udHJpbSgpIHx8XG5cdFx0YW5jaG9yPy5oYXNBdHRyaWJ1dGUoTEFCRUxMRURCWSkgfHxcblx0XHRhbmNob3I/Lmhhc0F0dHJpYnV0ZShcImFyaWEtbGFiZWxcIik7XG5cblx0QU5DSE9SPy5yZW1vdmVBdHRyaWJ1dGUoaGFkTGFiZWwgPyBMQUJFTExFREJZIDogREVTQ1JJQkVEQlkpOyAvLyBVbmxpbmsgcHJldmlvdXMgYW5jaG9yXG5cdGFuY2hvclBvc2l0aW9uKFRPT0xUSVAsIGZhbHNlKTsgLy8gUmVzZXQgYW5jaG9yIHBvc2l0aW9uXG5cblx0QU5DSE9SID0gYW5jaG9yOyAvLyBTdG9yZSBuZXcgYW5jaG9yIC0gbWlnaHQgYmUgbnVsbCBpZiBubyBuZXcgYW5jaG9yXG5cdGlmIChBTkNIT1IpIGF0dHIoQU5DSE9SLCBoYXNMYWJlbCA/IERFU0NSSUJFREJZIDogTEFCRUxMRURCWSwgVE9PTFRJUD8uaWQpOyAvLyBVc2UgdG9vbHRpcCBhcyBkZXNjcmlwdGlvbiBpZiBhbGxyZWFkeSBoYXMgbGFiZWxcblx0VE9PTFRJUC50b2dnbGVQb3BvdmVyKCEhYW5jaG9yKTtcblx0YW5jaG9yUG9zaXRpb24oVE9PTFRJUCwgYW5jaG9yIHx8IGZhbHNlLCBwb3NpdGlvbik7XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b24oZG9jdW1lbnQsIFwiYmx1cixmb2N1cyxtb3VzZW91dCxtb3VzZW92ZXJcIiwgaGFuZGxlTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwia2V5ZG93blwiLCBoYW5kbGVNb3ZlLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJibHVyXCIsIGhhbmRsZU1vdmUsIFFVSUNLX0VWRU5UKTtcbn0pO1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBESVNQTEFZX0JMT0NLID0gXCI6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBibG9jayB9XCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgdmFyIF9hMjtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiAoX2EyID0gZWwuZ2V0QXR0cmlidXRlKG5hbWUpKSAhPSBudWxsID8gX2EyIDogbnVsbDtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG5cbi8vIHUtZGV0YWlscy50c1xudmFyIFVIVE1MRGV0YWlsc0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgLy8gVXNpbmcgdW5kZXJzY29yZSBpbnN0ZWFkIG9mIHByaXZhdGUgZmllbGRzIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICAgIHRoaXMuX2NvbnRlbnQgPSBudWxsO1xuICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBuYW1lOiBcInN1bW1hcnlcIiB9KSxcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgcGFydDogXCJkZXRhaWxzLWNvbnRlbnRcIiB9KSxcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYCR7RElTUExBWV9CTE9DS31cbiAgICAgICAgOjpzbG90dGVkKHUtc3VtbWFyeSkgeyBjdXJzb3I6IHBvaW50ZXI7IGRpc3BsYXk6IGJsb2NrIH1cblx0XHRcdFx0OjpzbG90dGVkKHUtc3VtbWFyeSk6OmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1hcmdpbi1pbmxpbmU6IC4wNWVtIC4zMTI1ZW07IGJvcmRlci1ibG9jazogLjMxMjVlbSBzb2xpZCB0cmFuc3BhcmVudDsgYm9yZGVyLWlubGluZS1zdGFydDogLjVlbSBzb2xpZCB9XG5cdFx0XHRcdDo6c2xvdHRlZCh1LXN1bW1hcnlbYXJpYS1leHBhbmRlZD1cInRydWVcIl0pOjpiZWZvcmUgeyByb3RhdGU6IDkwZGVnIH1cblx0XHRcdFx0Omhvc3QgPiBbcGFydD1cImRldGFpbHMtY29udGVudFwiXTpub3QoW2hpZGRlbj1cIlwiXSkgeyBkaXNwbGF5OiBibG9jayB9YFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcIm9wZW5cIl07XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdmFyIF9hMjtcbiAgICB0aGlzLl9jb250ZW50ID0gKF9hMiA9IHRoaXMuc2hhZG93Um9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jaGlsZHJlblsxXTtcbiAgICBvbih0aGlzLl9jb250ZW50LCBcImJlZm9yZW1hdGNoXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLl9jb250ZW50KSBvZmYodGhpcy5fY29udGVudCwgXCJiZWZvcmVtYXRjaFwiLCB0aGlzKTtcbiAgICBvZmYodGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIHRoaXMuX2NvbnRlbnQgPSBudWxsO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBwcmV2LCBuZXh0KSB7XG4gICAgY29uc3QgaGlkZSA9IFwib25iZWZvcmVtYXRjaFwiIGluIHRoaXMgPyBcInVudGlsLWZvdW5kXCIgOiB0cnVlO1xuICAgIGNvbnN0IG9wZW4gPSB0aGlzLm9wZW47XG4gICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLmNoaWxkcmVuKVxuICAgICAgaWYgKGVsLm5vZGVOYW1lID09PSBcIlUtU1VNTUFSWVwiKSBhdHRyKGVsLCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7b3Blbn1gKTtcbiAgICBpZiAodGhpcy5fY29udGVudCkge1xuICAgICAgYXR0cih0aGlzLl9jb250ZW50LCBcImFyaWEtaGlkZGVuXCIsIGAkeyFvcGVufWApO1xuICAgICAgdGhpcy5fY29udGVudC5oaWRkZW4gPSBvcGVuID8gZmFsc2UgOiBoaWRlO1xuICAgIH1cbiAgICBpZiAob3BlbiAmJiB0aGlzLm5hbWUpIHtcbiAgICAgIGNvbnN0IHVEZXRhaWxzTGlzdCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgICAgYCR7dGhpcy5ub2RlTmFtZX1bbmFtZT1cIiR7dGhpcy5uYW1lfVwiXWBcbiAgICAgICk7XG4gICAgICBmb3IgKGNvbnN0IHVEZXRhaWxzIG9mIHVEZXRhaWxzTGlzdClcbiAgICAgICAgaWYgKHVEZXRhaWxzICE9PSB0aGlzKSB1RGV0YWlscy5vcGVuID0gZmFsc2U7XG4gICAgfVxuICAgIGlmIChwcm9wID09PSBcIm9wZW5cIiAmJiBwcmV2ID09PSBudWxsICE9PSAobmV4dCA9PT0gbnVsbCkpXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwidG9nZ2xlXCIpKTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGNvbnN0IHN1bW1hcnkgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCI6c2NvcGUgPiB1LXN1bW1hcnlcIik7XG4gICAgY29uc3QgaXNTdW1tYXJ5ID0gc3VtbWFyeSA9PSBudWxsID8gdm9pZCAwIDogc3VtbWFyeS5jb250YWlucyhldmVudC50YXJnZXQpO1xuICAgIGlmIChldmVudC5kZWZhdWx0UHJldmVudGVkKSByZXR1cm47XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwiYmVmb3JlbWF0Y2hcIikgdGhpcy5vcGVuID0gdHJ1ZTtcbiAgICBpZiAoaXNTdW1tYXJ5ICYmIGV2ZW50LnR5cGUgPT09IFwia2V5ZG93blwiKSBhc0J1dHRvbihldmVudCk7XG4gICAgaWYgKGlzU3VtbWFyeSAmJiBldmVudC50eXBlID09PSBcImNsaWNrXCIpIHRoaXMub3BlbiA9ICF0aGlzLm9wZW47XG4gIH1cbiAgZ2V0IG9wZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKFwib3BlblwiKTtcbiAgfVxuICBzZXQgb3Blbih2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJvcGVuXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBuYW1lKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIFwibmFtZVwiKSB8fCBcIlwiO1xuICB9XG4gIHNldCBuYW1lKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcIm5hbWVcIiwgdmFsdWUpO1xuICB9XG59O1xudmFyIFVIVE1MU3VtbWFyeUVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIHRoaXMuc2xvdCA9IFwic3VtbWFyeVwiO1xuICAgIHRoaXMudGFiSW5kZXggPSAwO1xuICB9XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1kZXRhaWxzXCIsIFVIVE1MRGV0YWlsc0VsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1zdW1tYXJ5XCIsIFVIVE1MU3VtbWFyeUVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTERldGFpbHNFbGVtZW50LCBVSFRNTFN1bW1hcnlFbGVtZW50IH07XG4iLCIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfRklSRUZPWCA9IElTX0JST1dTRVIgJiYgL2ZpcmVmb3gvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0lPUyA9IElTX0JST1dTRVIgJiYgL2lQYWR8aVBob25lfGlQb2QvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIHZhciBfYTI7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gKF9hMiA9IGVsLmdldEF0dHJpYnV0ZShuYW1lKSkgIT0gbnVsbCA/IF9hMiA6IG51bGw7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIGdldExhYmVsID0gKGVsKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSBnZXRSb290KGVsKTtcbiAgY29uc3QgbGFiZWwgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIikgfHwgXCJcIjtcbiAgY29uc3QgbGFiZWxzID0gKChfYTIgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxsZWRieVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkuc3BsaXQoL1xccysvKSkgfHwgW107XG4gIHJldHVybiBbXG4gICAgLi4ubGFiZWxzLm1hcCgoaWQyKSA9PiByb290ID09IG51bGwgPyB2b2lkIDAgOiByb290LnF1ZXJ5U2VsZWN0b3IoYFtpZD1cIiR7aWQyfVwiXWApKSxcbiAgICAvLyBHZXQgYWxsIGxhYmVsbGVkYnkgZWxlbWVudHNcbiAgICAuLi5BcnJheS5mcm9tKGVsLmxhYmVscyB8fCBbXSlcbiAgICAvLyBHZXQgYWxsIDxsYWJlbD4gZWxlbWVudHNcbiAgXS5yZWR1Y2UoKGFjYywgZWwyKSA9PiB7XG4gICAgdmFyIF9hMztcbiAgICByZXR1cm4gYWNjIHx8ICgoX2EzID0gZWwyID09IG51bGwgPyB2b2lkIDAgOiBlbDIuaW5uZXJUZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLnRyaW0oKSkgfHwgXCJcIjtcbiAgfSwgbGFiZWwpO1xufTtcblxuLy8gdS1wcm9ncmVzcy50c1xudmFyIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbnZhciBVSFRNTFByb2dyZXNzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIiwgXCJ2YWx1ZVwiLCBcIm1heFwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuYXR0YWNoU2hhZG93KHsgbW9kZTogXCJvcGVuXCIgfSkuYXBwZW5kKFxuICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBoaWRkZW46IFwiXCIgfSksXG4gICAgICAvLyBTbG90IGhpZGluZyBjb250ZW50IGFsbG93cyBsZWdhY3kgYnJvd3NlciB0byBkaXNwbGF5IGZhbGxiYWNrIHRleHRcbiAgICAgIGNyZWF0ZUVsZW1lbnQoXG4gICAgICAgIFwic3R5bGVcIixcbiAgICAgICAgYDpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGJvcmRlcjogMXB4IHNvbGlkOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGhlaWdodDogLjVlbTsgd2lkdGg6IDEwZW07IG92ZXJmbG93OiBoaWRkZW4gfVxuICAgICAgICA6aG9zdDo6YmVmb3JlIHsgY29udGVudDogJyc7IGRpc3BsYXk6IGJsb2NrOyBoZWlnaHQ6IDEwMCU7IGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsgd2lkdGg6IHZhcigtLXBlcmNlbnRhZ2UsIDAlKTsgdHJhbnNpdGlvbjogd2lkdGggLjJzIH1cbiAgICAgICAgOmhvc3QoOm5vdChbdmFsdWVdKSkgeyBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsY3VycmVudENvbG9yIDI1JSwgdHJhbnNwYXJlbnQgNTAlLCBjdXJyZW50Q29sb3IgNzUlKSA1MCUvNDAwJSB9XG4gICAgICAgIEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSkgeyA6aG9zdCB7IGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZSAycyBsaW5lYXIgaW5maW5pdGUgfSAgfVxuICAgICAgICBAa2V5ZnJhbWVzIGluZGV0ZXJtaW5hdGUgeyBmcm9tIHsgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAxMDAlIH0gdG8geyBiYWNrZ3JvdW5kLXBvc2l0aW9uLXg6IDAgfSB9YFxuICAgICAgKVxuICAgICk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKFNLSVBfQVRUUl9DSEFOR0UpIHJldHVybjtcbiAgICBTS0lQX0FUVFJfQ0hBTkdFID0gdHJ1ZTtcbiAgICBjb25zdCByb2xlSW1hZ2UgPSBJU19JT1MgfHwgSVNfRklSRUZPWDtcbiAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCh0aGlzLnBvc2l0aW9uICogMTAwKSk7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcGVyY2VudGFnZVwiLCBgJHtwZXJjZW50YWdlfSVgKTtcbiAgICBsZXQgbGFiZWwgPSBnZXRMYWJlbCh0aGlzKTtcbiAgICBpZiAocm9sZUltYWdlKSBsYWJlbCA9IGAke2xhYmVsLnJlcGxhY2UoL1xcZCslJC8sIFwiXCIpfSAke3BlcmNlbnRhZ2V9JWA7XG4gICAgaWYgKElTX0ZJUkVGT1gpIGZvciAoY29uc3QgZWwgb2YgdGhpcy5sYWJlbHMpIGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtYnVzeVwiLCBgJHt0aGlzLnBvc2l0aW9uID09PSAtMX1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbC50cmltKCkpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWxhYmVsbGVkYnlcIiwgbnVsbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtYXhcIiwgXCIxMDBcIik7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtaW5cIiwgXCIwXCIpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbm93XCIsIGAke3BlcmNlbnRhZ2V9YCk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgcm9sZUltYWdlID8gXCJpbWdcIiA6IFwicHJvZ3Jlc3NiYXJcIik7XG4gICAgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xuICB9XG4gIGdldCBsYWJlbHMoKSB7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLmNsb3Nlc3QoXCJsYWJlbDpub3QoW2Zvcl0pXCIpO1xuICAgIGNvbnN0IGlkMiA9IHVzZUlkKHRoaXMpO1xuICAgIGlmIChsYWJlbCkgbGFiZWwuaHRtbEZvciA9IGlkMjtcbiAgICBjb25zdCBlbCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGBsYWJlbFtmb3I9XCIke2lkMn1cIl1gXG4gICAgKTtcbiAgICByZXR1cm4gZWw7XG4gIH1cbiAgZ2V0IHBvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlID09PSBudWxsID8gLTEgOiBNYXRoLm1pbih0aGlzLnZhbHVlIC8gdGhpcy5tYXgsIDEpO1xuICB9XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIik7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBtYXgoKSB7XG4gICAgcmV0dXJuIGdldE51bWJlcih0aGlzLCBcIm1heFwiKSB8fCAxO1xuICB9XG4gIHNldCBtYXgobWF4KSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwibWF4XCIsIG1heCk7XG4gIH1cbn07XG4vLyBQcmV2ZW50IENocm9tZSBEZXZUb29scyB3YXJuaW5nIGFib3V0IDxsYWJlbCBmb3I9XCJcIj4gcG9pbnRpbmcgdG8gPHUtcHJvZ3Jlc3M+XG5VSFRNTFByb2dyZXNzRWxlbWVudC5mb3JtQXNzb2NpYXRlZCA9IHRydWU7XG52YXIgaXNOdW1lcmljID0gKHZhbHVlKSA9PiAhTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUZsb2F0KGAke3ZhbHVlfWApKSAmJiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKHZhbHVlKSk7XG52YXIgZ2V0TnVtYmVyID0gKGVsLCBrZXkpID0+IHtcbiAgY29uc3QgdmFsdWUgPSBhdHRyKGVsLCBrZXkpO1xuICByZXR1cm4gaXNOdW1lcmljKHZhbHVlKSA/IE1hdGgubWF4KDAsIE51bWJlci5wYXJzZUZsb2F0KHZhbHVlKSkgOiBudWxsO1xufTtcbnZhciBzZXROdW1iZXIgPSAoZWwsIGtleSwgdmFsKSA9PiB7XG4gIGlmICh2YWwgPT09IG51bGwgfHwgaXNOdW1lcmljKHZhbCkpIGF0dHIoZWwsIGtleSwgYCR7dmFsfWApO1xuICBlbHNlIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNldCBub24tbnVtZXJpYyAnJHthdHRyfSc6ICcke3ZhbH0nYCk7XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1wcm9ncmVzc1wiLCBVSFRNTFByb2dyZXNzRWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MUHJvZ3Jlc3NFbGVtZW50IH07XG4iXSwibmFtZXMiOlsiSVNfQlJPV1NFUiIsIklTX0FORFJPSUQiLCJfYSIsIklTX0JST1dTRVIkNSIsIlNBRkVfTEFCRUxMRURCWSIsIkRJU1BMQVlfQkxPQ0siLCJVSFRNTEVsZW1lbnQiLCJhdHRyIiwiZWwiLCJuYW1lIiwidmFsdWUiLCJfYTIiLCJldmVudHMiLCJhY3Rpb24iLCJlbGVtZW50IiwicmVzdCIsInR5cGUiLCJvbiIsIm9mZiIsImF0dGFjaFN0eWxlIiwiY3NzIiwiY3JlYXRlRWxlbWVudCIsIm9ic2VydmVycyIsIm11dGF0aW9uT2JzZXJ2ZXIiLCJvcHRpb25zIiwib2JzZXJ2ZXIiLCJkZXRhaWwiLCJhc0J1dHRvbiIsImV2ZW50IiwiaXNDbGljayIsImdldFJvb3QiLCJub2RlIiwicm9vdCIsImlkIiwidXNlSWQiLCJ0YWdOYW1lIiwidGV4dCIsImF0dHJzIiwiY3VzdG9tRWxlbWVudHMiLCJpbnN0YW5jZSIsIkFSSUFfQ09OVFJPTFMiLCJBUklBX1NFTEVDVEVEIiwiVUhUTUxUYWJzRWxlbWVudCIsInF1ZXJ5V2l0aG91dE5lc3RlZCIsImdldFNlbGVjdGVkSW5kZXgiLCJpbmRleCIsInNldFNlbGVjdGVkIiwiVUhUTUxUYWJMaXN0RWxlbWVudCIsInRhYiIsImtleSIsInRhYnMiLCJwcmV2IiwibmV4dCIsIlNLSVBfQVRUUl9DSEFOR0UiLCJVSFRNTFRhYkVsZW1lbnQiLCJwYW5lbHMiLCJuZXh0UGFuZWwiLCJnZXRQYW5lbCIsInBhbmVsIiwidGFibGlzdCIsInRhYkxpc3QiLCJVSFRNTFRhYlBhbmVsRWxlbWVudCIsImlzRm9jdXNhYmxlIiwidGFnIiwic2VsZiIsImlkMiIsIl9fZGVmUHJvcCIsIl9fZ2V0T3duUHJvcFN5bWJvbHMiLCJfX2hhc093blByb3AiLCJfX3Byb3BJc0VudW0iLCJfX2RlZk5vcm1hbFByb3AiLCJvYmoiLCJfX3NwcmVhZFZhbHVlcyIsImEiLCJiIiwicHJvcCIsIklTX0ZJUkVGT1giLCJJU19JT1MiLCJJU19CUk9XU0VSJDQiLCJGT0NVU19PVVRMSU5FIiwidGV4dDIiLCJ2YWwiLCJMSVZFIiwiTElWRV9TUl9GSVgiLCJzcGVhayIsInNldFZhbHVlIiwiaW5wdXQiLCJkYXRhIiwiX2IiLCJwcm90byIsIklTX1BSRVNTIiwiRVZFTlRTIiwiRVZFTlRfT05DRSIsIklTX0ZJUkVGT1hfTUFDIiwiSVNfTU9CSUxFIiwiRkFMU0UiLCJDTElDSyIsIlRFWFRTIiwiVUhUTUxDb21ib2JveEVsZW1lbnQiLCJyZW5kZXIiLCJzeW5jSW5wdXRWYWx1ZSIsIl8iLCJ0YXJnZXQiLCJvbkJsdXIiLCJvbkNsaWNrIiwib25Gb2N1cyIsIm9uSW5wdXQiLCJvbktleURvd24iLCJpc0RhdGEiLCJfZm9jdXMiLCJfdGV4dHMiLCJpdGVtcyIsImNvbnRyb2wiLCJsaXN0IiwibXVsdGlwbGUiLCJsYWJlbCIsImVkaXRzIiwiYWRkZWROb2RlcyIsInJlbW92ZWROb2RlcyIsInNob3VsZEFubm91bmNlIiwiaW5wdXRNb2RlIiwibmV4dEZvY3VzIiwiX2EzIiwiaWR4IiwiaXRlbSIsImxhYmVsMiIsImFyaWEiLCJzZWxlY3QiLCJzeW5jQ2xlYXJXaXRoSW5wdXQiLCJzeW5jT3B0aW9uc1dpdGhJdGVtcyIsIl9zcGVhayIsInZhbHVlcyIsIm9wdCIsImRpc3BhdGNoTWF0Y2giLCJzeW5jIiwiY3JlYXRhYmxlIiwicXVlcnkiLCJtYXRjaCIsIm8iLCJkaXNwYXRjaENoYW5nZSIsInJlbW92YWJsZSIsImFkZCIsInJlbW92ZSIsImkiLCJpdGVtMiIsIm9uQmx1cnJlZCIsIngiLCJ5IiwiY2xlYXIiLCJ0b3AiLCJyaWdodCIsImJvdHRvbSIsImxlZnQiLCJyZXBlYXQiLCJpc0NvbnRyb2wiLCJpblRleHQiLCJmb3JtIiwiUVVJQ0tfRVZFTlQiLCJkZWJvdW5jZSIsImNhbGxiYWNrIiwiZGVsYXkiLCJ0aW1lciIsImFyZ3MiLCJVVUlEIiwiU0NST0xMRVIiLCJUQVJHRVRTIiwiVEFSR0VUU19VUERBVEUiLCJ1cGRhdGUiLCJQT1NJVElPTiIsImFuY2hvclBvc2l0aW9uIiwiYW5jaG9yIiwicG9zaXRpb24iLCJmb3JjZSIsInBsYWNlIiwiaXNIVE1MQW5jaG9yIiwidGFyZ2V0VyIsInRhcmdldEgiLCJhbmNob3JXIiwiYW5jaG9ySCIsIndpZHRoIiwiaGVpZ2h0IiwiYW5jaG9yWCIsImFuY2hvclkiLCJoYXNTcGFjZUxlZnQiLCJoYXNTcGFjZVJpZ2h0IiwiaGFzU3BhY2VPdmVyIiwiaGFzU3BhY2VVbmRlciIsInBvc2l0aW9uUmlnaHQiLCJwb3NpdGlvblVuZGVyIiwiY2VudGVyWCIsImNlbnRlclkiLCJpc1ZlcnRpY2FsIiwiY3JlYXRlT3B0aW1pemVkTXV0YXRpb25PYnNlcnZlciIsInF1ZXVlIiwib25GcmFtZSIsIm9uVGltZXIiLCJNVVRBVE9SUyIsIm9uTXV0YXRpb24iLCJjbGFzc05hbWUiLCJlbGVtcyIsIm11dGF0b3IiLCJvbkxvYWRlZCIsInJ1biIsImlzSW5wdXRMaWtlIiwiTUFUT01PIiwiRU5BQkxFRCIsImFuYWx5dGljcyIsIm1hdG9tb0lkIiwiZW5hYmxlZCIsInVybCIsInRpdGxlIiwiY2F0ZWdvcnkiLCJ2IiwicmVzdWx0cyIsImdldFN0ZXBzIiwibm93IiwibWF4Iiwic2hvdyIsIm9mZnNldCIsInN0YXJ0IiwiZW5kIiwicGFnZXMiLCJwYWdpbmF0aW9uIiwiY3VycmVudCIsInRvdGFsIiwicGFnZSIsInNoZWV0IiwiQ1NTX0FQUCIsInN0eWxlcyIsIkNTU19TVElDS1kiLCJDU1NfVE9HR0xFIiwiQ1NTX1NJREVCQVIiLCJ1c2VUcmFuc2l0aW9uIiwidG9nZ2xlQXBwRXhwYW5kZWQiLCJoYW5kbGVUb2dnbGVDbGljayIsInN0b3AiLCJzaWRlYmFyIiwiaGFuZGxlUmVzaXplIiwiTUlOX1kiLCJTQ1JPTExfVVAiLCJTVElDSyIsIlNUSUNLX0VMIiwiU1RJQ0tfSCIsIlNUSUNLX1kiLCJTVFVDSyIsIldJTl9IIiwiV0lOX1kiLCJoYW5kbGVNdXRhdGlvbiIsInN0aWNreSIsImhhbmRsZVNjcm9sbCIsIk5FWFRfWSIsIk5FWFRfVVAiLCJDU1NfQlJFQURDUlVNQlMiLCJicmVhZGNydW1icyIsImJyZWFkY3VtYnMiLCJjcnVtYiIsImxlbmd0aCIsIkNTU19ESUFMT0ciLCJESUFMT0dTIiwiaGFuZGxlTW9kYWwiLCJkaWFsb2ciLCJoYW5kbGVDbGljayIsImhhbmRsZUluamVjdCIsImZpcnN0IiwiSVNfQlJPV1NFUiQyIiwiRElTQUJMRUQiLCJTRUxFQ1RFRCIsIlVIVE1MT3B0aW9uRWxlbWVudCIsIkxJVkVfVElNRVIiLCJJTlBVVF9ERUJPVU5DRSIsIkVWRU5UU19JTlBVVCIsIlVIVE1MRGF0YUxpc3RFbGVtZW50IiwiZGlzY29ubmVjdElucHV0IiwiX3ByZXYiLCJzZXR1cElucHV0Iiwic2V0RXhwYW5kZWQiLCJvcGVuIiwiaXNJbnB1dCIsInJlbGF0ZWRUYXJnZXQiLCJvcHRpb24iLCJfcm9vdCIsIl9pbnB1dCIsImZpbHRlciIsImhpZGRlbiIsInZpc2libGUiLCJDU1NfRklFTEQiLCJDU1NfVkFMSURBVElPTlMiLCJDU1NfVkFMSURBVElPTiIsImdldFRleHQiLCJzdHlsZSIsImZpZWxkcyIsImZpZWxkIiwibGFiZWxzIiwiZGVzY3MiLCJjb21ib2JveCIsInZhbGlkIiwiZGVzYyIsInJlbmRlckNvbWJvYm94IiwicmVuZGVyQ291bnRlciIsInJlbmRlclRleHRhcmVhU2l6ZSIsInRleHRhcmVhIiwibGltaXQiLCJyZW1haW5kZXIiLCJuZXh0SW52YWxpZCIsInByZXZJbnZhbGlkIiwib3ZlciIsInVuZGVyIiwiaGFuZGxlVG9nZ2xlIiwibmV3U3RhdGUiLCJoYW5kbGVJbnB1dCIsImhhbmRsZUludmFsaWQiLCJoYW5kbGVCZWZvcmVDaGFuZ2UiLCJDU1NfRklFTERTRVQiLCJBUklBX0RFU0MiLCJBUklBX0lOVkFMSUQiLCJmaWVsZHNldHMiLCJmaWVsZHNldCIsImlucHV0cyIsInZhbGlkYXRpb25JZCIsIkNTU19MT0dPIiwibG9nbyIsImljb24iLCJzdmciLCJpc0RvdCIsImJhY2siLCJDU1NfUE9QT1ZFUiIsIk9QRU5fUE9QT1ZFUlMiLCJoYW5kbGVMaW5rQ2xpY2siLCJjbG9zZSIsInBvcG92ZXIiLCJDU1NfVEFCTEUiLCJ0YWJsZXMiLCJ0YWJsZSIsInRocyIsImdyb3VwIiwiaXNUYm9keSIsInJvdyIsImNlbGwiLCJDU1NfVE9HR0xFR1JPVVAiLCJoYW5kbGVLZXlEb3duIiwibW92ZSIsIkRFU0NSSUJFREJZIiwiRVNDIiwiTEFCRUxMRURCWSIsIlBPU0lUSU9OX0NTU19QUk9QRVJUWSIsIlRIUk9UVExFX0RFTEFZIiwiVE9PTFRJUCIsIkFOQ0hPUiIsIkxBU1RfQ0FMTCIsIlRIUk9UVExFIiwiaGFuZGxlTW92ZSIsIndhaXQiLCJoYW5kbGVNb3ZlVGhyb3R0bGVkIiwiY29udGVudCIsImhhZExhYmVsIiwiaGFzTGFiZWwiLCJfYyIsIklTX0JST1dTRVIkMSIsIlVIVE1MRGV0YWlsc0VsZW1lbnQiLCJoaWRlIiwidURldGFpbHNMaXN0IiwidURldGFpbHMiLCJzdW1tYXJ5IiwiaXNTdW1tYXJ5IiwiVUhUTUxTdW1tYXJ5RWxlbWVudCIsImdldExhYmVsIiwiYWNjIiwiZWwyIiwiVUhUTUxQcm9ncmVzc0VsZW1lbnQiLCJyb2xlSW1hZ2UiLCJwZXJjZW50YWdlIiwiZ2V0TnVtYmVyIiwic2V0TnVtYmVyIiwiaXNOdW1lcmljIl0sIm1hcHBpbmdzIjoia0NBQ0EsSUFBSUEsR0FBYSxPQUFPLE9BQVcsS0FBZSxPQUFPLE9BQU8sU0FBYSxLQUFlLE9BQU8sT0FBTyxVQUFjLElBQ3BIQyxHQUFhRCxJQUFjLFdBQVcsS0FBSyxVQUFVLFNBQVMsRUFDOURFLEdBQ01DLElBQ1YsUUFBUSxPQUFPRCxHQUFLLFVBQVUsZ0JBQWtCLEtBQU8sT0FBU0EsR0FBRyxXQUFhLFVBQVUsUUFBUSxFQUNsRyxJQUFJRSxHQUFrQixHQUFHSCxHQUFhLE9BQVMsTUFBTSxjQUNqREksR0FBZ0IsMkNBQ2hCQyxFQUFlLE9BQU8sWUFBZ0IsSUFBYyxLQUFNLENBQzlELEVBQUksWUFDSixTQUFTQyxFQUFLQyxFQUFJQyxFQUFNQyxFQUFPLENBQzdCLElBQUlDLEVBQ0osT0FBSUQsSUFBVSxRQUFnQkMsRUFBTUgsRUFBRyxhQUFhQyxDQUFJLElBQU0sS0FBT0UsRUFBTSxNQUN2RUQsSUFBVSxLQUFNRixFQUFHLGdCQUFnQkMsQ0FBSSxFQUNsQ0QsRUFBRyxhQUFhQyxDQUFJLElBQU1DLEdBQU9GLEVBQUcsYUFBYUMsRUFBTUMsQ0FBSyxFQUM5RCxLQUNULENBQ0EsSUFBSUUsR0FBUyxDQUFDQyxFQUFRQyxFQUFTQyxJQUFTLENBQ3RDLFVBQVdDLEtBQVFELEVBQUssQ0FBQyxFQUFFLE1BQU0sR0FBRyxFQUNsQ0EsRUFBSyxDQUFDLEVBQUlDLEVB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QVcsR0FBR0EsQ0FBSyxFQUFFLENBQUMsR0FBSyxPQUFPLFNBQVMsT0FBT0EsQ0FBSyxDQUFDLEVBQ3BHeVcsR0FBWSxDQUFDM1csRUFBSXlDLElBQVEsQ0FDM0IsTUFBTXZDLEVBQVFILEVBQUtDLEVBQUl5QyxDQUFHLEVBQzFCLE9BQU9vVSxHQUFVM1csQ0FBSyxFQUFJLEtBQUssSUFBSSxFQUFHLE9BQU8sV0FBV0EsQ0FBSyxDQUFDLEVBQUksSUFDcEUsRUFDSTBXLEdBQVksQ0FBQzVXLEVBQUl5QyxFQUFLZ0MsSUFBUSxDQUNoQyxHQUFJQSxJQUFRLE1BQVFvUyxHQUFVcFMsQ0FBRyxFQUFHMUUsRUFBS0MsRUFBSXlDLEVBQUssR0FBR2dDLENBQUcsRUFBRSxNQUNyRCxPQUFNLElBQUksTUFBTSw4QkFBOEIxRSxDQUFJLE9BQU8wRSxDQUFHLEdBQUcsQ0FDdEUsRUFDQSxPQUFBM0MsR0FBZSxPQUFPLGFBQWMwVSxFQUFvQiIsInhfZ29vZ2xlX2lnbm9yZUxpc3QiOlswLDEsMTAsMTgsMTldfQ==