@mattilsynet/design 2.2.6 → 2.2.8

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.
Files changed (96) hide show
  1. package/mtds/alert/alert.js +1 -1
  2. package/mtds/app/app-observer.js +1 -1
  3. package/mtds/app/app-toggle.js +10 -26
  4. package/mtds/app/app-toggle.js.map +1 -1
  5. package/mtds/app/app-toggle2.js +26 -10
  6. package/mtds/app/app-toggle2.js.map +1 -1
  7. package/mtds/app/app.d.ts +1 -1
  8. package/mtds/app/app.js +11 -42
  9. package/mtds/app/app.js.map +1 -1
  10. package/mtds/avatar/avatar.js +1 -1
  11. package/mtds/badge/badge.js +1 -1
  12. package/mtds/breadcrumbs/breadcrumbs.js +1 -1
  13. package/mtds/button/button.js +1 -1
  14. package/mtds/card/card.js +1 -1
  15. package/mtds/chart/chart-element.d.ts +1 -1
  16. package/mtds/chart/chart-element.js +4 -4
  17. package/mtds/chart/chart-element.js.map +1 -1
  18. package/mtds/chip/chip.js +1 -1
  19. package/mtds/details/details.d.ts +2 -0
  20. package/mtds/details/details.js.map +1 -1
  21. package/mtds/dialog/dialog-observer.js +20 -19
  22. package/mtds/dialog/dialog-observer.js.map +1 -1
  23. package/mtds/dialog/dialog.js +1 -1
  24. package/mtds/dialog/dialog.stories.d.ts +3 -1
  25. package/mtds/divider/divider.js +1 -1
  26. package/mtds/errorsummary/errorsummary.js +1 -1
  27. package/mtds/field/field-observer.js +3 -3
  28. package/mtds/field/field.d.ts +3 -5
  29. package/mtds/field/field.js +69 -99
  30. package/mtds/field/field.js.map +1 -1
  31. package/mtds/fieldset/fieldset.js +1 -1
  32. package/mtds/helptext/helptext.js +1 -1
  33. package/mtds/index.d.ts +0 -1
  34. package/mtds/index.iife.js +14 -15
  35. package/mtds/index.js +5 -5
  36. package/mtds/input/input.js +1 -1
  37. package/mtds/layout/layout.js +1 -1
  38. package/mtds/link/link.js +1 -1
  39. package/mtds/logo/logo.js +1 -1
  40. package/mtds/map/map-element.d.ts +47 -0
  41. package/mtds/map/map-element.js +74 -0
  42. package/mtds/map/map-element.js.map +1 -0
  43. package/mtds/map/map.css.js +46 -0
  44. package/mtds/map/map.css.js.map +1 -0
  45. package/mtds/map.d.ts +1 -0
  46. package/mtds/map.iife.js +722 -0
  47. package/mtds/map.js +8 -0
  48. package/mtds/map.js.map +1 -0
  49. package/mtds/package.json.js +1 -1
  50. package/mtds/pagination/pagination.d.ts +1 -1
  51. package/mtds/pagination/pagination.js +20 -51
  52. package/mtds/pagination/pagination.js.map +1 -1
  53. package/mtds/popover/popover-observer.js +29 -26
  54. package/mtds/popover/popover-observer.js.map +1 -1
  55. package/mtds/popover/popover.d.ts +2 -2
  56. package/mtds/popover/popover.js +1 -1
  57. package/mtds/popover/popover.js.map +1 -1
  58. package/mtds/react-types.d.ts +2 -3
  59. package/mtds/skeleton/skeleton.js +1 -1
  60. package/mtds/spinner/spinner.js +1 -1
  61. package/mtds/steps/steps.js +1 -1
  62. package/mtds/styles.css +1 -1
  63. package/mtds/styles.json +41 -42
  64. package/mtds/styles.module.css.js +86 -88
  65. package/mtds/styles.module.css.js.map +1 -1
  66. package/mtds/table/table.js +1 -1
  67. package/mtds/tag/tag.js +1 -1
  68. package/mtds/toast/toast-helper.js +1 -1
  69. package/mtds/toast/toast.js +1 -1
  70. package/mtds/togglegroup/togglegroup.js +1 -1
  71. package/mtds/tooltip/tooltip-observer.js +1 -1
  72. package/mtds/typography/typography.js +1 -1
  73. package/mtds/utils.js +2 -2
  74. package/mtds/validation/validation.js +1 -1
  75. package/package.json +17 -9
  76. package/mtds/external/@floating-ui/core/dist/floating-ui.core.js +0 -342
  77. package/mtds/external/@floating-ui/core/dist/floating-ui.core.js.map +0 -1
  78. package/mtds/external/@floating-ui/dom/dist/floating-ui.dom.js +0 -399
  79. package/mtds/external/@floating-ui/dom/dist/floating-ui.dom.js.map +0 -1
  80. package/mtds/external/@floating-ui/utils/dist/floating-ui.utils.dom.js +0 -137
  81. package/mtds/external/@floating-ui/utils/dist/floating-ui.utils.dom.js.map +0 -1
  82. package/mtds/external/@floating-ui/utils/dist/floating-ui.utils.js +0 -130
  83. package/mtds/external/@floating-ui/utils/dist/floating-ui.utils.js.map +0 -1
  84. package/mtds/external/@u-elements/u-combobox/dist/u-combobox.js +0 -266
  85. package/mtds/external/@u-elements/u-combobox/dist/u-combobox.js.map +0 -1
  86. package/mtds/external/@u-elements/u-datalist/dist/u-datalist.js +0 -231
  87. package/mtds/external/@u-elements/u-datalist/dist/u-datalist.js.map +0 -1
  88. package/mtds/external/@u-elements/u-details/dist/u-details.js +0 -89
  89. package/mtds/external/@u-elements/u-details/dist/u-details.js.map +0 -1
  90. package/mtds/external/@u-elements/u-progress/dist/u-progress.js +0 -94
  91. package/mtds/external/@u-elements/u-progress/dist/u-progress.js.map +0 -1
  92. package/mtds/external/@u-elements/u-tabs/dist/u-tabs.js +0 -186
  93. package/mtds/external/@u-elements/u-tabs/dist/u-tabs.js.map +0 -1
  94. package/mtds/external/clsx/dist/clsx.js +0 -18
  95. package/mtds/external/clsx/dist/clsx.js.map +0 -1
  96. package/mtds/map/map.d.ts +0 -14
@@ -1,21 +1,21 @@
1
- var mtds=function(M){"use strict";var os=Object.defineProperty,ln=Object.getOwnPropertySymbols,is=Object.prototype.hasOwnProperty,ss=Object.prototype.propertyIsEnumerable,cn=(t,e,n)=>e in t?os(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,as=(t,e)=>{for(var n in e||(e={}))is.call(e,n)&&cn(t,n,e[n]);if(ln)for(var n of ln(e))ss.call(e,n)&&cn(t,n,e[n]);return t},xt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",dn=xt&&/android/i.test(navigator.userAgent),rs=xt&&/firefox/i.test(navigator.userAgent),ls=xt&&/iPad|iPhone|iPod/.test(navigator.userAgent),un;xt&&/^Mac/i.test(((un=navigator.userAgentData)==null?void 0:un.platform)||navigator.platform);var cs="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",ds=typeof HTMLElement>"u"?class{}:HTMLElement;function _(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 fn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Dt=(t,...e)=>fn("add",t,e),us=(t,...e)=>fn("remove",t,e),Nt=new WeakMap,he=(t,e)=>{if(e===void 0)return Nt.get(t);try{Nt.get(t).disconnect(),Nt.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),Nt.set(t,n)}},fs=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},ps=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},ms=0,pn=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++ms).toString(32)}`),t.id):"",Ht=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))_(o,i,s);return o},hs={define:(t,e)=>!xt||window.customElements.get(t)||window.customElements.define(t,e)},gs=t=>{var e;const n=_(t,"aria-label")||"";return[...(((e=_(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(i=>document.getElementById(i)),...Array.from(t.labels||[])].reduce((i,s)=>{var a;return i||((a=s?.innerText)==null?void 0:a.trim())||""},n)},nt,vs=0,ge=t=>{nt||(nt=Ht("div"),nt.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",_(nt,"aria-live","assertive")),nt.isConnected||document.body.append(nt),t&&(nt.textContent=`${t}${vs++%2?" ":""}`)},mn=(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}))},ve=!1,be=t=>(t?.type==="mouseup"&&(ve=!1),t?.type==="mousedown"&&(ve=!0,Dt(document,"mouseup",be,{once:!0})),ve),bs=`:host(:not([hidden])) { display: block; -webkit-tap-highlight-color: rgba(0, 0, 0, 0) } /* Must be display block in Safari to allow focus inside */
1
+ var mtds=function(M){"use strict";var os=Object.defineProperty,ln=Object.getOwnPropertySymbols,is=Object.prototype.hasOwnProperty,ss=Object.prototype.propertyIsEnumerable,cn=(t,e,n)=>e in t?os(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,as=(t,e)=>{for(var n in e||(e={}))is.call(e,n)&&cn(t,n,e[n]);if(ln)for(var n of ln(e))ss.call(e,n)&&cn(t,n,e[n]);return t},xt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",dn=xt&&/android/i.test(navigator.userAgent),rs=xt&&/firefox/i.test(navigator.userAgent),ls=xt&&/iPad|iPhone|iPod/.test(navigator.userAgent),un;xt&&/^Mac/i.test(((un=navigator.userAgentData)==null?void 0:un.platform)||navigator.platform);var cs="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",ds=typeof HTMLElement>"u"?class{}:HTMLElement;function y(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 fn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Dt=(t,...e)=>fn("add",t,e),us=(t,...e)=>fn("remove",t,e),Nt=new WeakMap,ge=(t,e)=>{if(e===void 0)return Nt.get(t);try{Nt.get(t).disconnect(),Nt.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),Nt.set(t,n)}},fs=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},ps=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},ms=0,pn=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++ms).toString(32)}`),t.id):"",Ht=(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},hs={define:(t,e)=>!xt||window.customElements.get(t)||window.customElements.define(t,e)},gs=t=>{var e;const n=y(t,"aria-label")||"";return[...(((e=y(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(i=>document.getElementById(i)),...Array.from(t.labels||[])].reduce((i,s)=>{var a;return i||((a=s?.innerText)==null?void 0:a.trim())||""},n)},nt,bs=0,be=t=>{nt||(nt=Ht("div"),nt.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",y(nt,"aria-live","assertive")),nt.isConnected||document.body.append(nt),t&&(nt.textContent=`${t}${bs++%2?" ":""}`)},mn=(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}))},ve=!1,_e=t=>(t?.type==="mouseup"&&(ve=!1),t?.type==="mousedown"&&(ve=!0,Dt(document,"mouseup",_e,{once:!0})),ve),vs=`:host(:not([hidden])) { display: block; -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; cursor: pointer }
8
- ::slotted(data:focus) { ${cs} }`,hn="beforeinput,blur,focus,click,input,keydown,mousedown",gn={once:!0,passive:!0},ws=rs&&!dn,_s=dn||ls,vn="​".repeat(5),Bt="false",Ft={added:"Added",empty:"No selected",found:"Navigate left to find %d selected",invalid:"Invalid value",of:"of",remove:"Press to remove",removed:"Removed"},we=class extends ds{constructor(){super(),this._item="",this._speak="",this._texts=as({},Ft),this._value="",this.shadowRoot||this.attachShadow({mode:"open"}).append(Ht("slot"),Ht("style",bs))}static get observedAttributes(){return Object.keys(Ft).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=ps(this),Dt(this,hn,this,!0),he(this,{attributeFilter:["value","id"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(Ut,0,this),setTimeout(zt,0,this)}attributeChangedCallback(t,e,n){const o=t.split("data-sr-")[1];Ft[o]&&(this._texts[o]=n||Ft[o])}disconnectedCallback(){he(this,!1),us(this,hn,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;ye(this)||(t.type==="beforeinput"&&(this._value=e?.value||""),t.type==="blur"&&xs(this),t.type==="click"&&Ss(this,t),t.type==="focus"&&ys(this,t),t.type==="input"&&Ts(this,t),t.type==="keydown"&&Cs(this,t),t.type==="mousedown"&&be(t),t.type==="mutation"&&Ut(this,t))}get multiple(){var t;return((t=_(this,"data-multiple"))!=null?t:Bt)!==Bt}set multiple(t){_(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=_(this,"data-creatable"))!=null?t:Bt)!==Bt}set creatable(t){_(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)}},ot=t=>{var e;return((e=t?.textContent)==null?void 0:e.trim())||""},_e=t=>t instanceof HTMLDataElement,ye=({control:t})=>t?.disabled||t?.readOnly||!1,Ut=(t,e)=>{var n;const{_focus:o,_texts:i,items:s,control:a,list:r,multiple:c}=t;if(!a||!r)return;const l=gs(a),d=l.endsWith(vn)?_(a,"data-label"):l;_(a,"data-label",d);let u=`${d}${c?`, ${s.length?i.found.replace("%d",`${s.length}`):i.empty}`:""}`;const m=[];for(const{addedNodes:g,removedNodes:x}of e?.detail||[]){for(const y of g)_e(y)&&m.unshift(y);for(const y of x)_e(y)&&m.push(y)}const p=c?m.length===1:m[0]===o;if(o&&p){const g=_(a,"aria-expanded"),x=_(a,"inputmode"),y=_e(o)?a:o,S=!m[0].isConnected;t._speak=`${i[S?"removed":"added"]} ${ot(m[0])}, `,(_s||o===a)&&ge(t._speak),a!==y&&(_(a,"aria-expanded",null),_(a,"inputmode","none"),u=" ",a.focus()),setTimeout(()=>{var N;_(a,"aria-expanded",g),_(a,"inputmode",S?"none":x),(N=y?.focus)==null||N.call(y),_(a,"inputmode",x),t._speak="",ws?Dt(t,"blur",()=>Ut(t),gn):setTimeout(Ut,100,t)},100)}let v=0;const h=t.querySelector("select"),w=ye(t)?"":`${i.remove}, `;for(const g of s){const x=h?.options[v],y=ot(g),S=g.value||y,N=`${t._speak}${y}, ${w}${++v} ${i.of} ${s.length}`;_(g,"role","button"),_(g,"value",S),_(g,"tabindex","-1"),_(g,"aria-label",N),x?Object.assign(x,{textContent:y,value:S}):h?.appendChild(new Option(y,S,!0,!0))}h&&_(h,"multiple",c?"":null);for(const g of[...h?.options||[]].slice(v))g.remove();!c&&v>1&&console.warn("u-combobox: Multiple <data> found in single mode."),_(r,"aria-multiselectable",`${c}`),_(a,"list",pn(r)),_(a,"aria-label",`${t._speak}${u}${vn}`),r.hasAttribute("popover")&&(_(a,"popovertarget",pn(r)),_(r,"popover","manual"));const b=ot(s[0]);b!==t._item&&zt(t),t._item=b,bn(t),wn(t),(n=he(t))==null||n.takeRecords()},bn=t=>{var e;t.clear&&_(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value)||ye(t))},wn=t=>{var e;const{_speak:n,options:o=[],values:i}=t;for(const s of o){const a=(e=_(s,"value"))!=null?e:ot(s);_(s,"aria-label",n?`${n}${ot(s)}`:null),_(s,"selected",i.includes(a)?"":null)}},zt=t=>{const{multiple:e,control:n,items:o}=t,i=ot(o[0]);!e&&n&&i!==n.value&&mn(n,i,i?"insertText":"deleteContent")},xe=(t,e=!0)=>{var n;const{_texts:o,options:i=[],creatable:s,control:a,items:r,multiple:c}=t,l=((n=a?.value)==null?void 0:n.trim())||"",d=l.toLowerCase()||null;let u=[...i].find(p=>(_(p,"label")||ot(p)).trim().toLowerCase()===d);const m={bubbles:!0,cancelable:!0,detail:u};if(t.dispatchEvent(new CustomEvent("comboboxbeforematch",m))||(u=[...i].find(p=>p.selected)),e)return wn(t),u?mt(t,u,!1):s&&l?mt(t,{value:l},!1):(!c&&!l&&r[0]?mt(t,r[0]):zt(t),ge(o.invalid));for(const p of i)p.selected=p===u},mt=(t,e,n=!0)=>{const{control:o,items:i,multiple:s}=t,a=Ht("data",e.label||e.value,{value:e.value}),r=[...i].find(d=>d.value===e.value),c={bubbles:!0,cancelable:!0,detail:r||a};if(r&&!n)return zt(t);if(t.dispatchEvent(new CustomEvent("comboboxbeforeselect",c))){if(!s)for(const d of[...i])d.remove();r?r.remove():o?.insertAdjacentElement("beforebegin",a),t.dispatchEvent(new CustomEvent("comboboxafterselect",c))}},ys=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),ge()},xs=t=>be()||setTimeout(Es,0,t),Es=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(t.multiple||xe(t),t._focus=void 0)},Ss=(t,e)=>{const{clientX:n,clientY:o,target:i}=e,{clear:s,control:a,items:r}=t;if(s?.contains(i))return a&&mn(a,"","deleteContentBackward"),a?.focus();for(const c of r){const{top:l,right:d,bottom:u,left:m}=c.getBoundingClientRect();if(c.contains(i))return mt(t,c);if(o>=l&&o<=u&&n>=m&&n<=d)return c.focus()}i===t&&a?.focus()},Ts=(t,e)=>{var n;const{options:o=[],control:i,multiple:s}=t,a=((n=i?.value)==null?void 0:n.trim())||"";if(e instanceof InputEvent?!e.inputType||e.inputType==="insertReplacementText":!!a){e.stopImmediatePropagation(),i&&(i.value=t._value);for(const c of o)if(c.value&&c.value===a)return mt(t,c,s)}else s||xe(t,!1);bn(t)},Cs=(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:c}=e,l=i&&i===c,d=l&&i?.selectionEnd;let u=l?s.length:[...s].indexOf(c);if(l&&a==="Tab"&&o&&!o.hidden&&(e.preventDefault(),o.tabIndex=-1,o.focus(),Dt(o,"blur",()=>_(o,"tabindex",null),gn)),!(!l&&fs(e)||u===-1)){if(a==="ArrowRight"&&!l)u+=1;else if(a==="ArrowLeft"&&!d)u-=1;else if(a==="Enter"&&l){const m=_(i,"form");return _(i,"form","#"),requestAnimationFrame(()=>_(i,"form",m)),xe(t)}else if((a==="Backspace"||a==="Delete")&&!d){if(e.preventDefault(),!r&&s[u])return mt(t,s[u]);l&&(u-=1)}else return l||i?.focus();e.preventDefault(),(n=s[Math.max(0,u)]||i)==null||n.focus()}};hs.define("u-combobox",we);var Ee=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",$s=Ee&&/android/i.test(navigator.userAgent),_n;Ee&&/^Mac/i.test(((_n=navigator.userAgentData)==null?void 0:_n.platform)||navigator.platform);var ks=`${$s?"data":"aria"}-labelledby`,Se=":host(:not([hidden])) { display: block }",qt=typeof HTMLElement>"u"?class{}:HTMLElement;function A(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)},As=(t,...e)=>yn("add",t,e),Ls=(t,...e)=>yn("remove",t,e),Vt=(t,e)=>t.shadowRoot||t.attachShadow({mode:"open"}).append(Tn("slot"),Tn("style",e)),Wt=new WeakMap,xn=(t,e)=>{if(e===void 0)return Wt.get(t);try{Wt.get(t).disconnect(),Wt.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),Wt.set(t,n)}},Is=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},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},Ms=0,Sn=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Ms).toString(32)}`),t.id):"",Tn=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},jt={define:(t,e)=>!Ee||window.customElements.get(t)||window.customElements.define(t,e)},Os=Se,Rs=Se,Ps=Se,Ds=':host(:not([hidden])) { display: inline-block; cursor: pointer }:host([aria-disabled="true"]) { cursor: default }',Gt="aria-controls",ht="aria-selected",Cn=class extends qt{constructor(){super(),Vt(this,Os)}get tabList(){return Yt("u-tablist",this)[0]||null}get selectedIndex(){return Kt(this.tabs)}set selectedIndex(t){$e(this.tabs[t])}get tabs(){return Yt("u-tab",this)}get panels(){return Yt("u-tabpanel",this)}},$n=class extends qt{constructor(){super(),Vt(this,Rs)}connectedCallback(){A(this,"role","tablist"),As(this,"click,keydown",this),xn(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){Ls(this,"click,keydown",this),xn(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s?.setAttribute(ht,"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"&&$e(n[o]),t.type==="keydown"&&!Is(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=Kt(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 Kt(this.tabs)}set selectedIndex(t){$e(this.tabs[t])}},Te=!1,kn=class extends qt{static get observedAttributes(){return["id",ht,Gt]}constructor(){super(),Vt(this,Ds)}connectedCallback(){A(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!Te&&this.selected&&this.tabList){Te=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=Yt("u-tabpanel",this.tabsElement||this),n=Ce(this,e[t.indexOf(this)]);n&&A(n,ks,Sn(this)),t.forEach((o,i)=>{const s=Ce(o,e[i]);o.tabIndex=o===this?0:-1,A(o,ht,`${o===this}`),A(o,Gt,s?.id||null),s&&(s.hidden=s!==n)}),Te=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return t?.nodeName==="U-TABLIST"?t:null}get selected(){return A(this,ht)==="true"}set selected(t){A(this,ht,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return Ce(this)}},An=class extends qt{static get observedAttributes(){return["hidden"]}constructor(){super(),Vt(this,Ps)}connectedCallback(){A(this,"role","tabpanel"),this.hidden=Kt(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){const t=this.hidden;A(this,"aria-hidden",`${t}`),A(this,"tabindex",t||Ns(this.firstChild)?null:"0")}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${Gt}="${this.id}"]`;return En(this).querySelectorAll(t)}},Yt=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),Ce=(t,e)=>{const n=A(t,Gt)||Sn(e),o=En(t).getElementById(n);return o?.nodeName==="U-TABPANEL"?o:null},Kt=t=>[...t].findIndex(e=>A(e,ht)==="true"),$e=t=>t&&A(t,"aria-disabled")!=="true"&&A(t,"aria-selected","true"),Ns=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');jt.define("u-tabs",Cn),jt.define("u-tablist",$n),jt.define("u-tab",kn),jt.define("u-tabpanel",An);const Hs="2.2.6",Ln="_alert_1a0v1_1 _ds-alert_nwz76_3",In="_app_1a0v1_1",Mn="_sticky_1a0v1_1",On="_avatar_1a0v1_1 _ds-avatar_nwz76_1",Rn="_badge_1a0v1_1",Pn="_breadcrumbs_1a0v1_1 _ds-breadcrumbs_nwz76_5",Dn="_button_1a0v1_1 _ds-button_nwz76_1",Nn="_card_1a0v1_1",Hn="_group_1a0v1_1",Bn="_chip_1a0v1_1 _ds-chip_nwz76_5",Fn="_details_1a0v1_1 _ds-details_nwz76_3",Un="_dialog_1a0v1_1 _ds-dialog_nwz76_5",zn="__drawer_1a0v1_1",qn="_divider_1a0v1_1",Vn="_errorsummary_1a0v1_1 _ds-error-summary_nwz76_5",Wn="__errorsummary_1a0v1_1",jn="_field_1a0v1_1 _ds-field_nwz76_1",Gn="__datalist_1a0v1_1",Yn="_affixes_1a0v1_1 _ds-field-affixes_nwz76_3",Kn="_fieldset_1a0v1_1 _ds-fieldset_nwz76_3",Xn="_helptext_1a0v1_1 _ds-focus_nwz76_1",Qn="_input_1a0v1_1 _ds-input_nwz76_1",Jn="_grid_1a0v1_1",Zn="_flex_1a0v1_1",to="_link_1a0v1_1",eo="_logo_1a0v1_1",no="_map_1a0v1_1",oo="_pagination_1a0v1_1 _ds-pagination_nwz76_5",io="_popover_1a0v1_1",so="_progress_1a0v1_1",ao="__indeterminate_1a0v1_1",ro="_skeleton_1a0v1_1 _ds-skeleton_nwz76_5",lo="__skeleton_1a0v1_1",co="_spinner_1a0v1_1",uo="_steps_1a0v1_1",fo="_table_1a0v1_1 _ds-table_nwz76_5",po="__scrollShadow_1a0v1_1",mo="_tabs_1a0v1_1 _ds-tabs_nwz76_5",ho="__scrollMask_1a0v1_1",go="_tag_1a0v1_1 _ds-tag_nwz76_5",vo="_toast_1a0v1_1",bo="__toastClose_1a0v1_1",wo="__toastOpen_1a0v1_1",_o="__toastTimeout_1a0v1_1",yo="_togglegroup_1a0v1_1",xo="__tooltip_1a0v1_1",Eo="_heading_1a0v1_1 _ds-heading_nwz76_1",So="_ingress_1a0v1_1",To="_muted_1a0v1_1",Co="_info_1a0v1_1",$o="_prose_1a0v1_1",ko="_validation_1a0v1_1 _ds-validation-message_nwz76_1",Ao="_body_1a0v1_173",Lo="__checked_1a0v1_1",T={alert:Ln,app:In,sticky:Mn,avatar:On,badge:Rn,breadcrumbs:Pn,button:Dn,card:Nn,group:Hn,chip:Bn,details:Fn,dialog:Un,_drawer:zn,divider:qn,errorsummary:Vn,_errorsummary:Wn,field:jn,_datalist:Gn,affixes:Yn,fieldset:Kn,helptext:Xn,input:Qn,grid:Jn,flex:Zn,link:to,logo:eo,map:no,pagination:oo,popover:io,progress:so,_indeterminate:ao,skeleton:ro,_skeleton:lo,spinner:co,steps:uo,table:fo,_scrollShadow:po,tabs:mo,_scrollMask:ho,tag:go,toast:vo,_toastClose:bo,_toastOpen:wo,_toastTimeout:_o,togglegroup:yo,_tooltip:xo,heading:Eo,ingress:So,muted:To,info:Co,prose:$o,validation:ko,body:Ao,_checked:Lo},Bs=Object.freeze(Object.defineProperty({__proto__:null,_checked:Lo,_datalist:Gn,_drawer:zn,_errorsummary:Wn,_indeterminate:ao,_scrollMask:ho,_scrollShadow:po,_skeleton:lo,_toastClose:bo,_toastOpen:wo,_toastTimeout:_o,_tooltip:xo,affixes:Yn,alert:Ln,app:In,avatar:On,badge:Rn,body:Ao,breadcrumbs:Pn,button:Dn,card:Nn,chip:Bn,default:T,details:Fn,dialog:Un,divider:qn,errorsummary:Vn,field:jn,fieldset:Kn,flex:Zn,grid:Jn,group:Hn,heading:Eo,helptext:Xn,info:Co,ingress:So,input:Qn,link:to,logo:eo,map:no,muted:To,pagination:oo,popover:io,progress:so,prose:$o,skeleton:ro,spinner:co,steps:uo,sticky:Mn,table:fo,tabs:mo,tag:go,toast:vo,togglegroup:yo,validation:ko},Symbol.toStringTag,{value:"Module"})),gt=Math.min,O=Math.max,Xt=Math.round,Qt=Math.floor,V=t=>({x:t,y:t}),Fs={left:"right",right:"left",bottom:"top",top:"bottom"},Us={start:"end",end:"start"};function Io(t,e,n){return O(t,gt(e,n))}function Jt(t,e){return typeof t=="function"?t(e):t}function it(t){return t.split("-")[0]}function Zt(t){return t.split("-")[1]}function Mo(t){return t==="x"?"y":"x"}function Oo(t){return t==="y"?"height":"width"}const zs=new Set(["top","bottom"]);function Q(t){return zs.has(it(t))?"y":"x"}function Ro(t){return Mo(Q(t))}function qs(t,e,n){n===void 0&&(n=!1);const o=Zt(t),i=Ro(t),s=Oo(i);let a=i==="x"?o===(n?"end":"start")?"right":"left":o==="start"?"bottom":"top";return e.reference[s]>e.floating[s]&&(a=te(a)),[a,te(a)]}function Vs(t){const e=te(t);return[ke(t),e,ke(e)]}function ke(t){return t.replace(/start|end/g,e=>Us[e])}const Po=["left","right"],Do=["right","left"],Ws=["top","bottom"],js=["bottom","top"];function Gs(t,e,n){switch(t){case"top":case"bottom":return n?e?Do:Po:e?Po:Do;case"left":case"right":return e?Ws:js;default:return[]}}function Ys(t,e,n,o){const i=Zt(t);let s=Gs(it(t),n==="start",o);return i&&(s=s.map(a=>a+"-"+i),e&&(s=s.concat(s.map(ke)))),s}function te(t){return t.replace(/left|right|bottom|top/g,e=>Fs[e])}function Ks(t){return{top:0,right:0,bottom:0,left:0,...t}}function Xs(t){return typeof t!="number"?Ks(t):{top:t,right:t,bottom:t,left:t}}function ee(t){const{x:e,y:n,width:o,height:i}=t;return{width:o,height:i,top:n,left:e,right:e+o,bottom:n+i,x:e,y:n}}function No(t,e,n){let{reference:o,floating:i}=t;const s=Q(e),a=Ro(e),r=Oo(a),c=it(e),l=s==="y",d=o.x+o.width/2-i.width/2,u=o.y+o.height/2-i.height/2,m=o[r]/2-i[r]/2;let p;switch(c){case"top":p={x:d,y:o.y-i.height};break;case"bottom":p={x:d,y:o.y+o.height};break;case"right":p={x:o.x+o.width,y:u};break;case"left":p={x:o.x-i.width,y:u};break;default:p={x:o.x,y:o.y}}switch(Zt(e)){case"start":p[a]-=m*(n&&l?-1:1);break;case"end":p[a]+=m*(n&&l?-1:1);break}return p}const Qs=async(t,e,n)=>{const{placement:o="bottom",strategy:i="absolute",middleware:s=[],platform:a}=n,r=s.filter(Boolean),c=await(a.isRTL==null?void 0:a.isRTL(e));let l=await a.getElementRects({reference:t,floating:e,strategy:i}),{x:d,y:u}=No(l,o,c),m=o,p={},v=0;for(let h=0;h<r.length;h++){const{name:w,fn:b}=r[h],{x:g,y:x,data:y,reset:S}=await b({x:d,y:u,initialPlacement:o,placement:m,strategy:i,middlewareData:p,rects:l,platform:a,elements:{reference:t,floating:e}});d=g??d,u=x??u,p={...p,[w]:{...p[w],...y}},S&&v<=50&&(v++,typeof S=="object"&&(S.placement&&(m=S.placement),S.rects&&(l=S.rects===!0?await a.getElementRects({reference:t,floating:e,strategy:i}):S.rects),{x:d,y:u}=No(l,m,c)),h=-1)}return{x:d,y:u,placement:m,strategy:i,middlewareData:p}};async function Ae(t,e){var n;e===void 0&&(e={});const{x:o,y:i,platform:s,rects:a,elements:r,strategy:c}=t,{boundary:l="clippingAncestors",rootBoundary:d="viewport",elementContext:u="floating",altBoundary:m=!1,padding:p=0}=Jt(e,t),v=Xs(p),w=r[m?u==="floating"?"reference":"floating":u],b=ee(await s.getClippingRect({element:(n=await(s.isElement==null?void 0:s.isElement(w)))==null||n?w:w.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(r.floating)),boundary:l,rootBoundary:d,strategy:c})),g=u==="floating"?{x:o,y:i,width:a.floating.width,height:a.floating.height}:a.reference,x=await(s.getOffsetParent==null?void 0:s.getOffsetParent(r.floating)),y=await(s.isElement==null?void 0:s.isElement(x))?await(s.getScale==null?void 0:s.getScale(x))||{x:1,y:1}:{x:1,y:1},S=ee(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:r,rect:g,offsetParent:x,strategy:c}):g);return{top:(b.top-S.top+v.top)/y.y,bottom:(S.bottom-b.bottom+v.bottom)/y.y,left:(b.left-S.left+v.left)/y.x,right:(S.right-b.right+v.right)/y.x}}const Js=function(t){return t===void 0&&(t={}),{name:"flip",options:t,async fn(e){var n,o;const{placement:i,middlewareData:s,rects:a,initialPlacement:r,platform:c,elements:l}=e,{mainAxis:d=!0,crossAxis:u=!0,fallbackPlacements:m,fallbackStrategy:p="bestFit",fallbackAxisSideDirection:v="none",flipAlignment:h=!0,...w}=Jt(t,e);if((n=s.arrow)!=null&&n.alignmentOffset)return{};const b=it(i),g=Q(r),x=it(r)===r,y=await(c.isRTL==null?void 0:c.isRTL(l.floating)),S=m||(x||!h?[te(r)]:Vs(r)),N=v!=="none";!m&&N&&S.push(...Ys(r,h,v,y));const G=[r,...S],dt=await Ae(e,w),ut=[];let X=((o=s.flip)==null?void 0:o.overflows)||[];if(d&&ut.push(dt[b]),u){const ft=qs(i,a,y);ut.push(dt[ft[0]],dt[ft[1]])}if(X=[...X,{placement:i,overflows:ut}],!ut.every(ft=>ft<=0)){var Mt,Ot;const ft=(((Mt=s.flip)==null?void 0:Mt.index)||0)+1,rn=G[ft];if(rn&&(!(u==="alignment"?g!==Q(rn):!1)||X.every(q=>Q(q.placement)===g?q.overflows[0]>0:!0)))return{data:{index:ft,overflows:X},reset:{placement:rn}};let Pt=(Ot=X.filter(pt=>pt.overflows[0]<=0).sort((pt,q)=>pt.overflows[1]-q.overflows[1])[0])==null?void 0:Ot.placement;if(!Pt)switch(p){case"bestFit":{var Rt;const pt=(Rt=X.filter(q=>{if(N){const et=Q(q.placement);return et===g||et==="y"}return!0}).map(q=>[q.placement,q.overflows.filter(et=>et>0).reduce((et,yl)=>et+yl,0)]).sort((q,et)=>q[1]-et[1])[0])==null?void 0:Rt[0];pt&&(Pt=pt);break}case"initialPlacement":Pt=r;break}if(i!==Pt)return{reset:{placement:Pt}}}return{}}}},Zs=function(t){return t===void 0&&(t={}),{name:"shift",options:t,async fn(e){const{x:n,y:o,placement:i}=e,{mainAxis:s=!0,crossAxis:a=!1,limiter:r={fn:w=>{let{x:b,y:g}=w;return{x:b,y:g}}},...c}=Jt(t,e),l={x:n,y:o},d=await Ae(e,c),u=Q(it(i)),m=Mo(u);let p=l[m],v=l[u];if(s){const w=m==="y"?"top":"left",b=m==="y"?"bottom":"right",g=p+d[w],x=p-d[b];p=Io(g,p,x)}if(a){const w=u==="y"?"top":"left",b=u==="y"?"bottom":"right",g=v+d[w],x=v-d[b];v=Io(g,v,x)}const h=r.fn({...e,[m]:p,[u]:v});return{...h,data:{x:h.x-n,y:h.y-o,enabled:{[m]:s,[u]:a}}}}}},ta=function(t){return t===void 0&&(t={}),{name:"size",options:t,async fn(e){var n,o;const{placement:i,rects:s,platform:a,elements:r}=e,{apply:c=()=>{},...l}=Jt(t,e),d=await Ae(e,l),u=it(i),m=Zt(i),p=Q(i)==="y",{width:v,height:h}=s.floating;let w,b;u==="top"||u==="bottom"?(w=u,b=m===(await(a.isRTL==null?void 0:a.isRTL(r.floating))?"start":"end")?"left":"right"):(b=u,w=m==="end"?"top":"bottom");const g=h-d.top-d.bottom,x=v-d.left-d.right,y=gt(h-d[w],g),S=gt(v-d[b],x),N=!e.middlewareData.shift;let G=y,dt=S;if((n=e.middlewareData.shift)!=null&&n.enabled.x&&(dt=x),(o=e.middlewareData.shift)!=null&&o.enabled.y&&(G=g),N&&!m){const X=O(d.left,0),Mt=O(d.right,0),Ot=O(d.top,0),Rt=O(d.bottom,0);p?dt=v-2*(X!==0||Mt!==0?X+Mt:O(d.left,d.right)):G=h-2*(Ot!==0||Rt!==0?Ot+Rt:O(d.top,d.bottom))}await c({...e,availableWidth:dt,availableHeight:G});const ut=await a.getDimensions(r.floating);return v!==ut.width||h!==ut.height?{reset:{rects:!0}}:{}}}};function ne(){return typeof window<"u"}function vt(t){return Ho(t)?(t.nodeName||"").toLowerCase():"#document"}function R(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function W(t){var e;return(e=(Ho(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function Ho(t){return ne()?t instanceof Node||t instanceof R(t).Node:!1}function H(t){return ne()?t instanceof Element||t instanceof R(t).Element:!1}function j(t){return ne()?t instanceof HTMLElement||t instanceof R(t).HTMLElement:!1}function Bo(t){return!ne()||typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof R(t).ShadowRoot}const ea=new Set(["inline","contents"]);function Et(t){const{overflow:e,overflowX:n,overflowY:o,display:i}=B(t);return/auto|scroll|overlay|hidden|clip/.test(e+o+n)&&!ea.has(i)}const na=new Set(["table","td","th"]);function oa(t){return na.has(vt(t))}const ia=[":popover-open",":modal"];function oe(t){return ia.some(e=>{try{return t.matches(e)}catch{return!1}})}const sa=["transform","translate","scale","rotate","perspective"],aa=["transform","translate","scale","rotate","perspective","filter"],ra=["paint","layout","strict","content"];function Le(t){const e=Ie(),n=H(t)?B(t):t;return sa.some(o=>n[o]?n[o]!=="none":!1)||(n.containerType?n.containerType!=="normal":!1)||!e&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!e&&(n.filter?n.filter!=="none":!1)||aa.some(o=>(n.willChange||"").includes(o))||ra.some(o=>(n.contain||"").includes(o))}function la(t){let e=J(t);for(;j(e)&&!bt(e);){if(Le(e))return e;if(oe(e))return null;e=J(e)}return null}function Ie(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const ca=new Set(["html","body","#document"]);function bt(t){return ca.has(vt(t))}function B(t){return R(t).getComputedStyle(t)}function ie(t){return H(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function J(t){if(vt(t)==="html")return t;const e=t.assignedSlot||t.parentNode||Bo(t)&&t.host||W(t);return Bo(e)?e.host:e}function Fo(t){const e=J(t);return bt(e)?t.ownerDocument?t.ownerDocument.body:t.body:j(e)&&Et(e)?e:Fo(e)}function St(t,e,n){var o;e===void 0&&(e=[]),n===void 0&&(n=!0);const i=Fo(t),s=i===((o=t.ownerDocument)==null?void 0:o.body),a=R(i);if(s){const r=Me(a);return e.concat(a,a.visualViewport||[],Et(i)?i:[],r&&n?St(r):[])}return e.concat(i,St(i,[],n))}function Me(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function Uo(t){const e=B(t);let n=parseFloat(e.width)||0,o=parseFloat(e.height)||0;const i=j(t),s=i?t.offsetWidth:n,a=i?t.offsetHeight:o,r=Xt(n)!==s||Xt(o)!==a;return r&&(n=s,o=a),{width:n,height:o,$:r}}function Oe(t){return H(t)?t:t.contextElement}function wt(t){const e=Oe(t);if(!j(e))return V(1);const n=e.getBoundingClientRect(),{width:o,height:i,$:s}=Uo(e);let a=(s?Xt(n.width):n.width)/o,r=(s?Xt(n.height):n.height)/i;return(!a||!Number.isFinite(a))&&(a=1),(!r||!Number.isFinite(r))&&(r=1),{x:a,y:r}}const da=V(0);function zo(t){const e=R(t);return!Ie()||!e.visualViewport?da:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function ua(t,e,n){return e===void 0&&(e=!1),!n||e&&n!==R(t)?!1:e}function st(t,e,n,o){e===void 0&&(e=!1),n===void 0&&(n=!1);const i=t.getBoundingClientRect(),s=Oe(t);let a=V(1);e&&(o?H(o)&&(a=wt(o)):a=wt(t));const r=ua(s,n,o)?zo(s):V(0);let c=(i.left+r.x)/a.x,l=(i.top+r.y)/a.y,d=i.width/a.x,u=i.height/a.y;if(s){const m=R(s),p=o&&H(o)?R(o):o;let v=m,h=Me(v);for(;h&&o&&p!==v;){const w=wt(h),b=h.getBoundingClientRect(),g=B(h),x=b.left+(h.clientLeft+parseFloat(g.paddingLeft))*w.x,y=b.top+(h.clientTop+parseFloat(g.paddingTop))*w.y;c*=w.x,l*=w.y,d*=w.x,u*=w.y,c+=x,l+=y,v=R(h),h=Me(v)}}return ee({width:d,height:u,x:c,y:l})}function se(t,e){const n=ie(t).scrollLeft;return e?e.left+n:st(W(t)).left+n}function qo(t,e){const n=t.getBoundingClientRect(),o=n.left+e.scrollLeft-se(t,n),i=n.top+e.scrollTop;return{x:o,y:i}}function fa(t){let{elements:e,rect:n,offsetParent:o,strategy:i}=t;const s=i==="fixed",a=W(o),r=e?oe(e.floating):!1;if(o===a||r&&s)return n;let c={scrollLeft:0,scrollTop:0},l=V(1);const d=V(0),u=j(o);if((u||!u&&!s)&&((vt(o)!=="body"||Et(a))&&(c=ie(o)),j(o))){const p=st(o);l=wt(o),d.x=p.x+o.clientLeft,d.y=p.y+o.clientTop}const m=a&&!u&&!s?qo(a,c):V(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+d.x+m.x,y:n.y*l.y-c.scrollTop*l.y+d.y+m.y}}function pa(t){return Array.from(t.getClientRects())}function ma(t){const e=W(t),n=ie(t),o=t.ownerDocument.body,i=O(e.scrollWidth,e.clientWidth,o.scrollWidth,o.clientWidth),s=O(e.scrollHeight,e.clientHeight,o.scrollHeight,o.clientHeight);let a=-n.scrollLeft+se(t);const r=-n.scrollTop;return B(o).direction==="rtl"&&(a+=O(e.clientWidth,o.clientWidth)-i),{width:i,height:s,x:a,y:r}}const Vo=25;function ha(t,e){const n=R(t),o=W(t),i=n.visualViewport;let s=o.clientWidth,a=o.clientHeight,r=0,c=0;if(i){s=i.width,a=i.height;const d=Ie();(!d||d&&e==="fixed")&&(r=i.offsetLeft,c=i.offsetTop)}const l=se(o);if(l<=0){const d=o.ownerDocument,u=d.body,m=getComputedStyle(u),p=d.compatMode==="CSS1Compat"&&parseFloat(m.marginLeft)+parseFloat(m.marginRight)||0,v=Math.abs(o.clientWidth-u.clientWidth-p);v<=Vo&&(s-=v)}else l<=Vo&&(s+=l);return{width:s,height:a,x:r,y:c}}const ga=new Set(["absolute","fixed"]);function va(t,e){const n=st(t,!0,e==="fixed"),o=n.top+t.clientTop,i=n.left+t.clientLeft,s=j(t)?wt(t):V(1),a=t.clientWidth*s.x,r=t.clientHeight*s.y,c=i*s.x,l=o*s.y;return{width:a,height:r,x:c,y:l}}function Wo(t,e,n){let o;if(e==="viewport")o=ha(t,n);else if(e==="document")o=ma(W(t));else if(H(e))o=va(e,n);else{const i=zo(t);o={x:e.x-i.x,y:e.y-i.y,width:e.width,height:e.height}}return ee(o)}function jo(t,e){const n=J(t);return n===e||!H(n)||bt(n)?!1:B(n).position==="fixed"||jo(n,e)}function ba(t,e){const n=e.get(t);if(n)return n;let o=St(t,[],!1).filter(r=>H(r)&&vt(r)!=="body"),i=null;const s=B(t).position==="fixed";let a=s?J(t):t;for(;H(a)&&!bt(a);){const r=B(a),c=Le(a);!c&&r.position==="fixed"&&(i=null),(s?!c&&!i:!c&&r.position==="static"&&!!i&&ga.has(i.position)||Et(a)&&!c&&jo(t,a))?o=o.filter(d=>d!==a):i=r,a=J(a)}return e.set(t,o),o}function wa(t){let{element:e,boundary:n,rootBoundary:o,strategy:i}=t;const a=[...n==="clippingAncestors"?oe(e)?[]:ba(e,this._c):[].concat(n),o],r=a[0],c=a.reduce((l,d)=>{const u=Wo(e,d,i);return l.top=O(u.top,l.top),l.right=gt(u.right,l.right),l.bottom=gt(u.bottom,l.bottom),l.left=O(u.left,l.left),l},Wo(e,r,i));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function _a(t){const{width:e,height:n}=Uo(t);return{width:e,height:n}}function ya(t,e,n){const o=j(e),i=W(e),s=n==="fixed",a=st(t,!0,s,e);let r={scrollLeft:0,scrollTop:0};const c=V(0);function l(){c.x=se(i)}if(o||!o&&!s)if((vt(e)!=="body"||Et(i))&&(r=ie(e)),o){const p=st(e,!0,s,e);c.x=p.x+e.clientLeft,c.y=p.y+e.clientTop}else i&&l();s&&!o&&i&&l();const d=i&&!o&&!s?qo(i,r):V(0),u=a.left+r.scrollLeft-c.x-d.x,m=a.top+r.scrollTop-c.y-d.y;return{x:u,y:m,width:a.width,height:a.height}}function Re(t){return B(t).position==="static"}function Go(t,e){if(!j(t)||B(t).position==="fixed")return null;if(e)return e(t);let n=t.offsetParent;return W(t)===n&&(n=n.ownerDocument.body),n}function Yo(t,e){const n=R(t);if(oe(t))return n;if(!j(t)){let i=J(t);for(;i&&!bt(i);){if(H(i)&&!Re(i))return i;i=J(i)}return n}let o=Go(t,e);for(;o&&oa(o)&&Re(o);)o=Go(o,e);return o&&bt(o)&&Re(o)&&!Le(o)?n:o||la(t)||n}const xa=async function(t){const e=this.getOffsetParent||Yo,n=this.getDimensions,o=await n(t.floating);return{reference:ya(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function Ea(t){return B(t).direction==="rtl"}const Sa={convertOffsetParentRelativeRectToViewportRelativeRect:fa,getDocumentElement:W,getClippingRect:wa,getOffsetParent:Yo,getElementRects:xa,getClientRects:pa,getDimensions:_a,getScale:wt,isElement:H,isRTL:Ea};function Ko(t,e){return t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height}function Ta(t,e){let n=null,o;const i=W(t);function s(){var r;clearTimeout(o),(r=n)==null||r.disconnect(),n=null}function a(r,c){r===void 0&&(r=!1),c===void 0&&(c=1),s();const l=t.getBoundingClientRect(),{left:d,top:u,width:m,height:p}=l;if(r||e(),!m||!p)return;const v=Qt(u),h=Qt(i.clientWidth-(d+m)),w=Qt(i.clientHeight-(u+p)),b=Qt(d),x={rootMargin:-v+"px "+-h+"px "+-w+"px "+-b+"px",threshold:O(0,gt(1,c))||1};let y=!0;function S(N){const G=N[0].intersectionRatio;if(G!==c){if(!y)return a();G?a(!1,G):o=setTimeout(()=>{a(!1,1e-7)},1e3)}G===1&&!Ko(l,t.getBoundingClientRect())&&a(),y=!1}try{n=new IntersectionObserver(S,{...x,root:i.ownerDocument})}catch{n=new IntersectionObserver(S,x)}n.observe(t)}return a(!0),s}function Ca(t,e,n,o){o===void 0&&(o={});const{ancestorScroll:i=!0,ancestorResize:s=!0,elementResize:a=typeof ResizeObserver=="function",layoutShift:r=typeof IntersectionObserver=="function",animationFrame:c=!1}=o,l=Oe(t),d=i||s?[...l?St(l):[],...St(e)]:[];d.forEach(b=>{i&&b.addEventListener("scroll",n,{passive:!0}),s&&b.addEventListener("resize",n)});const u=l&&r?Ta(l,n):null;let m=-1,p=null;a&&(p=new ResizeObserver(b=>{let[g]=b;g&&g.target===l&&p&&(p.unobserve(e),cancelAnimationFrame(m),m=requestAnimationFrame(()=>{var x;(x=p)==null||x.observe(e)})),n()}),l&&!c&&p.observe(l),p.observe(e));let v,h=c?st(t):null;c&&w();function w(){const b=st(t);h&&!Ko(h,b)&&n(),h=b,v=requestAnimationFrame(w)}return n(),()=>{var b;d.forEach(g=>{i&&g.removeEventListener("scroll",n),s&&g.removeEventListener("resize",n)}),u?.(),(b=p)==null||b.disconnect(),p=null,c&&cancelAnimationFrame(v)}}const Pe=Zs,De=Js,Xo=ta,$a=(t,e,n)=>{const o=new Map,i={platform:Sa,...n},s={...i.platform,_c:o};return Qs(t,e,{...i,platform:s})};function Qo(t){var e,n,o="";if(typeof t=="string"||typeof t=="number")o+=t;else if(typeof t=="object")if(Array.isArray(t)){var i=t.length;for(e=0;e<i;e++)t[e]&&(n=Qo(t[e]))&&(o&&(o+=" "),o+=n)}else for(n in t)t[n]&&(o&&(o+=" "),o+=n);return o}function ka(){for(var t,e,n=0,o="",i=arguments.length;n<i;n++)(t=arguments[n])&&(e=Qo(t))&&(o&&(o+=" "),o+=e);return o}const P={capture:!0,passive:!0},at=typeof window<"u"&&typeof document<"u";function Aa(t,e){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>t(...o),e)}}function f(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 La=0;const Ia=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function ae(t){return t.id||(t.id=`${Ia}${++La}`),t.id}const Jo=(t,e,[...n])=>{for(const o of n[0].split(","))n[0]=o,e[`${t}EventListener`](...n)},C=(t,...e)=>{Tt&&(t===window||t===document)&&Tt.push(()=>Zo(t,...e)),Jo("add",t,e)},Zo=(t,...e)=>Jo("remove",t,e);let Tt=null;const D=t=>{if(!at||!window.requestAnimationFrame)return;window._mtdsUnbindEvents||(window._mtdsUnbindEvents=new Map);const e=()=>requestAnimationFrame(()=>{const n=String(t).replace(/(\n|\s)/g,"");window._mtdsUnbindEvents?.get(n)?.map(o=>o()),Tt=[],t(),window._mtdsUnbindEvents?.set(n,Tt?.slice(0)),Tt=null});document.readyState==="complete"?e():C(window,"load",e)},Ne=new WeakMap;function rt(t,e,n){Ne.get(t)?.(),Ne.delete(t),e&&Ne.set(t,Ca(e,t,()=>{if(!t.isConnected||!e.isConnected||t.hidden)return rt(t,!1);$a(e,t,n).then(({x:o,y:i})=>{t.style.left=`${o}px`,t.style.top=`${i}px`})}))}function ti(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 He=new WeakMap,_t=(t,e,n)=>{if(!at||!window.requestAnimationFrame)return;const o=t.getElementsByClassName(e),i=He.get(t)||[];i.length||(He.set(t,i),ti((s,a)=>{if(t.isConnected&&i?.length)for(const r of i)r();else a?.disconnect(),He.delete(t)}).observe(t,{attributeFilter:["class","hidden"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>n(o))},Be=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),$=(t,e,n)=>{const o=document.createElement(t);if(n&&(o.textContent=n),e)for(const[i,s]of Object.entries(e))f(o,i,s);return o},Ma=typeof HTMLElement>"u"?class{}:HTMLElement,Oa=`.${T.breadcrumbs.split(" ")[0]}`,Ra=`.${T.card.split(" ")[0]}`,ei=`.${T.chip.split(" ")[0]}`,Pa=`.${T.helptext.split(" ")[0]}`,Da=`.${T.pagination.split(" ")[0]}`,Na='summary,u-summary,a,button,[role="tab"],[role="button"]',Ha="click,toggle,submit,change",Fe="mattilsynet.matomo.cloud",F="mtds-analytics-banner",Ba="https://www.mattilsynet.no/om-mattilsynet/personvernerklaering/informasjonskapsler";function ni(t,e={}){if(at){if(window._paq||(window._paq=[],window._paq.push(["HeatmapSessionRecording::disable"]),window._paq.push(["enableLinkTracking"]),window._paq.push(["setTrackerUrl",`https://${Fe}/matomo.php`])),window._mtm||(window._mtm=window._mtm||[],window._mtm.push({"mtm.startTime":Date.now(),event:"mtm.Start"})),t==="init"){window._mtdsTracking={enabled:window.location.hostname!=="localhost",...window._mtdsTracking,...e};const{consent:n,enabled:o,matomoId:i,matomoTagManagerId:s}=window._mtdsTracking;if(i&&window._paq.push(["setSiteId",i]),o){n!=="custom"&&Fa();const a=s?`https://cdn.matomo.cloud/${Fe}/container_${s}.js`:`https://cdn.matomo.cloud/${Fe}/matomo.js`;document.querySelector(`script[src="${a}"]`)||document.head.append($("script",{async:"",src:a}))}}if(window._mtdsTracking?.enabled!==!1){if(window._mtdsTracking?.enabled==="debug")return console.info(`analytics("${t}", `,e,")");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];let r=location.href;window._paq.push([function(){r=this.getCurrentUrl()}]),window._paq.push(["setCustomUrl",r.split("#")[0]]),window._paq.push(a.filter(c=>c!==void 0)),window._paq.push(["setCustomUrl",r])}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)}}}function Fa(){if(document.getElementById(F)||window.localStorage.getItem(F))return;document.body.insertAdjacentHTML("afterbegin",`<dialog id="${F}" data-analytics="ignore"><style>
9
- #${F}[open] { box-sizing: border-box; display: flex; align-items: center; background: #116e6b; border-radius: .5em; border: 0; box-shadow: 0 .25em .5em rgba(0,0,0,.3); color: #fff; font-size: .875em; inset: auto auto 1em 1em; max-width: calc(100vw - 2em); outline: 0; padding: .5em; position: fixed; z-index: 99999 }
10
- #${F} button { all: unset; box-sizing: border-box; cursor: pointer; display: flex; width: 1.5em; height: 1.5em; font: 300 1.5em/1.35 sans-serif; border-radius: .25em; place-content: center; transition: .2s; transition-property: background, scale }
11
- #${F} button:focus-visible { outline: 2px solid }
12
- #${F} button:hover { background: #0a4e4f }
13
- #${F} button:active { background: #054449; scale: .9 }
14
- #${F} p { margin: 0 .25em }
8
+ ::slotted(data:focus) { ${cs} }`,hn="beforeinput,blur,focus,click,input,keydown,mousedown",gn={once:!0,passive:!0},_s=rs&&!dn,ys=dn||ls,bn="​".repeat(5),Bt="false",jt={added:"Added",empty:"No selected",found:"Navigate left to find %d selected",invalid:"Invalid value",of:"of",remove:"Press to remove",removed:"Removed"},ye=class extends ds{constructor(){super(),this._item="",this._speak="",this._texts=as({},jt),this._value="",this.shadowRoot||this.attachShadow({mode:"open"}).append(Ht("slot"),Ht("style",vs))}static get observedAttributes(){return Object.keys(jt).map(t=>`data-sr-${t}`)}connectedCallback(){this._root=ps(this),Dt(this,hn,this,!0),ge(this,{attributeFilter:["value","id"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(Ft,0,this),setTimeout(Ut,0,this)}attributeChangedCallback(t,e,n){const o=t.split("data-sr-")[1];jt[o]&&(this._texts[o]=n||jt[o])}disconnectedCallback(){ge(this,!1),us(this,hn,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;xe(this)||(t.type==="beforeinput"&&(this._value=e?.value||""),t.type==="blur"&&xs(this),t.type==="click"&&Ss(this,t),t.type==="focus"&&ws(this,t),t.type==="input"&&Ts(this,t),t.type==="keydown"&&Cs(this,t),t.type==="mousedown"&&_e(t),t.type==="mutation"&&Ft(this,t))}get multiple(){var t;return((t=y(this,"data-multiple"))!=null?t:Bt)!==Bt}set multiple(t){y(this,"data-multiple",t?"":null)}get creatable(){var t;return((t=y(this,"data-creatable"))!=null?t:Bt)!==Bt}set creatable(t){y(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)}},ot=t=>{var e;return((e=t?.textContent)==null?void 0:e.trim())||""},we=t=>t instanceof HTMLDataElement,xe=({control:t})=>t?.disabled||t?.readOnly||!1,Ft=(t,e)=>{var n;const{_focus:o,_texts:i,items:s,control:a,list:r,multiple:c}=t;if(!a||!r)return;const l=gs(a),d=l.endsWith(bn)?y(a,"data-label"):l;y(a,"data-label",d);let u=`${d}${c?`, ${s.length?i.found.replace("%d",`${s.length}`):i.empty}`:""}`;const m=[];for(const{addedNodes:g,removedNodes:x}of e?.detail||[]){for(const w of g)we(w)&&m.unshift(w);for(const w of x)we(w)&&m.push(w)}const p=c?m.length===1:m[0]===o;if(o&&p){const g=y(a,"aria-expanded"),x=y(a,"inputmode"),w=we(o)?a:o,S=!m[0].isConnected;t._speak=`${i[S?"removed":"added"]} ${ot(m[0])}, `,(ys||o===a)&&be(t._speak),a!==w&&(y(a,"aria-expanded",null),y(a,"inputmode","none"),u=" ",a.focus()),setTimeout(()=>{var N;y(a,"aria-expanded",g),y(a,"inputmode",S?"none":x),(N=w?.focus)==null||N.call(w),y(a,"inputmode",x),t._speak="",_s?Dt(t,"blur",()=>Ft(t),gn):setTimeout(Ft,100,t)},100)}let b=0;const h=t.querySelector("select"),_=xe(t)?"":`${i.remove}, `;for(const g of s){const x=h?.options[b],w=ot(g),S=g.value||w,N=`${t._speak}${w}, ${_}${++b} ${i.of} ${s.length}`;y(g,"role","button"),y(g,"value",S),y(g,"tabindex","-1"),y(g,"aria-label",N),x?Object.assign(x,{textContent:w,value:S}):h?.appendChild(new Option(w,S,!0,!0))}h&&y(h,"multiple",c?"":null);for(const g of[...h?.options||[]].slice(b))g.remove();!c&&b>1&&console.warn("u-combobox: Multiple <data> found in single mode."),y(r,"aria-multiselectable",`${c}`),y(a,"list",pn(r)),y(a,"aria-label",`${t._speak}${u}${bn}`),r.hasAttribute("popover")&&(y(a,"popovertarget",pn(r)),y(r,"popover","manual"));const v=ot(s[0]);v!==t._item&&Ut(t),t._item=v,vn(t),_n(t),(n=ge(t))==null||n.takeRecords()},vn=t=>{var e;t.clear&&y(t.clear,"role","button"),t.clear&&(t.clear.hidden=!((e=t.control)!=null&&e.value)||xe(t))},_n=t=>{var e;const{_speak:n,options:o=[],values:i}=t;for(const s of o){const a=(e=y(s,"value"))!=null?e:ot(s);y(s,"aria-label",n?`${n}${ot(s)}`:null),y(s,"selected",i.includes(a)?"":null)}},Ut=t=>{const{multiple:e,control:n,items:o}=t,i=ot(o[0]);!e&&n&&i!==n.value&&mn(n,i,i?"insertText":"deleteContent")},Ee=(t,e=!0)=>{var n;const{_texts:o,options:i=[],creatable:s,control:a,items:r,multiple:c}=t,l=((n=a?.value)==null?void 0:n.trim())||"",d=l.toLowerCase()||null;let u=[...i].find(p=>(y(p,"label")||ot(p)).trim().toLowerCase()===d);const m={bubbles:!0,cancelable:!0,detail:u};if(t.dispatchEvent(new CustomEvent("comboboxbeforematch",m))||(u=[...i].find(p=>p.selected)),e)return _n(t),u?mt(t,u,!1):s&&l?mt(t,{value:l},!1):(!c&&!l&&r[0]?mt(t,r[0]):Ut(t),be(o.invalid));for(const p of i)p.selected=p===u},mt=(t,e,n=!0)=>{const{control:o,items:i,multiple:s}=t,a=Ht("data",e.label||e.value,{value:e.value}),r=[...i].find(d=>d.value===e.value),c={bubbles:!0,cancelable:!0,detail:r||a};if(r&&!n)return Ut(t);if(t.dispatchEvent(new CustomEvent("comboboxbeforeselect",c))){if(!s)for(const d of[...i])d.remove();r?r.remove():o?.insertAdjacentElement("beforebegin",a),t.dispatchEvent(new CustomEvent("comboboxafterselect",c))}},ws=(t,{target:e})=>{e instanceof HTMLElement&&(t._focus=e),be()},xs=t=>_e()||setTimeout(Es,0,t),Es=t=>{var e;!t._focus||t.contains((e=t._root)==null?void 0:e.activeElement)||(t.multiple||Ee(t),t._focus=void 0)},Ss=(t,e)=>{const{clientX:n,clientY:o,target:i}=e,{clear:s,control:a,items:r}=t;if(s?.contains(i))return a&&mn(a,"","deleteContentBackward"),a?.focus();for(const c of r){const{top:l,right:d,bottom:u,left:m}=c.getBoundingClientRect();if(c.contains(i))return mt(t,c);if(o>=l&&o<=u&&n>=m&&n<=d)return c.focus()}i===t&&a?.focus()},Ts=(t,e)=>{var n;const{options:o=[],control:i,multiple:s}=t,a=((n=i?.value)==null?void 0:n.trim())||"";if(e instanceof InputEvent?!e.inputType||e.inputType==="insertReplacementText":!!a){e.stopImmediatePropagation(),i&&(i.value=t._value);for(const c of o)if(c.value&&c.value===a)return mt(t,c,s)}else s||Ee(t,!1);vn(t)},Cs=(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:c}=e,l=i&&i===c,d=l&&i?.selectionEnd;let u=l?s.length:[...s].indexOf(c);if(l&&a==="Tab"&&o&&!o.hidden&&(e.preventDefault(),o.tabIndex=-1,o.focus(),Dt(o,"blur",()=>y(o,"tabindex",null),gn)),!(!l&&fs(e)||u===-1)){if(a==="ArrowRight"&&!l)u+=1;else if(a==="ArrowLeft"&&!d)u-=1;else if(a==="Enter"&&l){const m=y(i,"form");return y(i,"form","#"),requestAnimationFrame(()=>y(i,"form",m)),Ee(t)}else if((a==="Backspace"||a==="Delete")&&!d){if(e.preventDefault(),!r&&s[u])return mt(t,s[u]);l&&(u-=1)}else return l||i?.focus();e.preventDefault(),(n=s[Math.max(0,u)]||i)==null||n.focus()}};hs.define("u-combobox",ye);var Se=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",$s=Se&&/android/i.test(navigator.userAgent),yn;Se&&/^Mac/i.test(((yn=navigator.userAgentData)==null?void 0:yn.platform)||navigator.platform);var ks=`${$s?"data":"aria"}-labelledby`,Te=":host(:not([hidden])) { display: block }",qt=typeof HTMLElement>"u"?class{}:HTMLElement;function A(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 wn=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},As=(t,...e)=>wn("add",t,e),Ls=(t,...e)=>wn("remove",t,e),Vt=(t,e)=>t.shadowRoot||t.attachShadow({mode:"open"}).append(Tn("slot"),Tn("style",e)),zt=new WeakMap,xn=(t,e)=>{if(e===void 0)return zt.get(t);try{zt.get(t).disconnect(),zt.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),zt.set(t,n)}},Is=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},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},Ms=0,Sn=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Ms).toString(32)}`),t.id):"",Tn=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},Wt={define:(t,e)=>!Se||window.customElements.get(t)||window.customElements.define(t,e)},Os=Te,Rs=Te,Ps=Te,Ds=':host(:not([hidden])) { display: inline-block; cursor: pointer }:host([aria-disabled="true"]) { cursor: default }',Gt="aria-controls",ht="aria-selected",Cn=class extends qt{constructor(){super(),Vt(this,Os)}get tabList(){return Yt("u-tablist",this)[0]||null}get selectedIndex(){return Kt(this.tabs)}set selectedIndex(t){ke(this.tabs[t])}get tabs(){return Yt("u-tab",this)}get panels(){return Yt("u-tabpanel",this)}},$n=class extends qt{constructor(){super(),Vt(this,Rs)}connectedCallback(){A(this,"role","tablist"),As(this,"click,keydown",this),xn(this,{childList:!0}),this.tabs.length&&this.handleEvent()}disconnectedCallback(){Ls(this,"click,keydown",this),xn(this,!1)}handleEvent(t){if(!t||t.type==="mutation"){const s=this.tabs[Math.max(this.selectedIndex,0)];return s?.setAttribute(ht,"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"&&ke(n[o]),t.type==="keydown"&&!Is(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=Kt(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 Kt(this.tabs)}set selectedIndex(t){ke(this.tabs[t])}},Ce=!1,kn=class extends qt{static get observedAttributes(){return["id",ht,Gt]}constructor(){super(),Vt(this,Ds)}connectedCallback(){A(this,"role","tab"),this.tabIndex=this.selected?0:-1}attributeChangedCallback(){if(!Ce&&this.selected&&this.tabList){Ce=!0;const t=[...this.tabList.querySelectorAll("u-tab")],e=Yt("u-tabpanel",this.tabsElement||this),n=$e(this,e[t.indexOf(this)]);n&&A(n,ks,Sn(this)),t.forEach((o,i)=>{const s=$e(o,e[i]);o.tabIndex=o===this?0:-1,A(o,ht,`${o===this}`),A(o,Gt,s?.id||null),s&&(s.hidden=s!==n)}),Ce=!1}}get tabsElement(){return this.closest("u-tabs")}get tabList(){const t=this.parentElement;return t?.nodeName==="U-TABLIST"?t:null}get selected(){return A(this,ht)==="true"}set selected(t){A(this,ht,`${!!t}`)}get index(){const t=this.tabList;return t?[...t.querySelectorAll("u-tab")].indexOf(this):0}get panel(){return $e(this)}},An=class extends qt{static get observedAttributes(){return["hidden"]}constructor(){super(),Vt(this,Ps)}connectedCallback(){A(this,"role","tabpanel"),this.hidden=Kt(this.tabs)===-1,this.attributeChangedCallback()}attributeChangedCallback(){const t=this.hidden;A(this,"aria-hidden",`${t}`),A(this,"tabindex",t||Ns(this.firstChild)?null:"0")}get tabsElement(){return this.closest("u-tabs")}get tabs(){const t=`u-tab[${Gt}="${this.id}"]`;return En(this).querySelectorAll(t)}},Yt=(t,e)=>e.querySelectorAll(`${t}:not(:scope u-tabpanel ${t})`),$e=(t,e)=>{const n=A(t,Gt)||Sn(e),o=En(t).getElementById(n);return o?.nodeName==="U-TABPANEL"?o:null},Kt=t=>[...t].findIndex(e=>A(e,ht)==="true"),ke=t=>t&&A(t,"aria-disabled")!=="true"&&A(t,"aria-selected","true"),Ns=t=>t instanceof Element&&!t.matches(':disabled,[tabindex^="-"]')&&t.matches('[contenteditable],[controls],[href],[tabindex],input:not([type="hidden"]),select,textarea,button,summary,iframe');Wt.define("u-tabs",Cn),Wt.define("u-tablist",$n),Wt.define("u-tab",kn),Wt.define("u-tabpanel",An);const Hs="2.2.8",Ln="_alert_3aj69_1 _ds-alert_14b25_3",In="_app_3aj69_1",Mn="_sticky_3aj69_1",On="_avatar_3aj69_1 _ds-avatar_14b25_1",Rn="_badge_3aj69_1",Pn="_breadcrumbs_3aj69_1 _ds-breadcrumbs_14b25_5",Dn="_button_3aj69_1 _ds-button_14b25_1",Nn="_card_3aj69_1",Hn="_group_3aj69_1",Bn="_chip_3aj69_1 _ds-chip_14b25_5",jn="_details_3aj69_1 _ds-details_14b25_3",Fn="_dialog_3aj69_1 _ds-dialog_14b25_5",Un="__drawer_3aj69_1",qn="_divider_3aj69_1",Vn="_errorsummary_3aj69_1 _ds-error-summary_14b25_5",zn="__errorsummary_3aj69_1",Wn="_field_3aj69_1 _ds-field_14b25_1",Gn="__datalist_3aj69_1",Yn="_affixes_3aj69_1 _ds-field-affixes_14b25_3",Kn="_fieldset_3aj69_1 _ds-fieldset_14b25_3",Xn="_helptext_3aj69_1 _ds-focus_14b25_1",Qn="_input_3aj69_1 _ds-input_14b25_1",Jn="_grid_3aj69_1",Zn="_flex_3aj69_1",to="_link_3aj69_1",eo="_logo_3aj69_1",no="_pagination_3aj69_1 _ds-pagination_14b25_5",oo="_popover_3aj69_1",io="_progress_3aj69_1",so="__indeterminate_3aj69_1",ao="_skeleton_3aj69_1 _ds-skeleton_14b25_5",ro="__skeleton_3aj69_1",lo="_spinner_3aj69_1",co="_steps_3aj69_1",uo="_table_3aj69_1 _ds-table_14b25_5",fo="__scrollShadow_3aj69_1",po="_tabs_3aj69_1 _ds-tabs_14b25_5",mo="__scrollMask_3aj69_1",ho="_tag_3aj69_1 _ds-tag_14b25_5",go="_toast_3aj69_1",bo="__toastClose_3aj69_1",vo="__toastOpen_3aj69_1",_o="__toastTimeout_3aj69_1",yo="_togglegroup_3aj69_1",wo="__tooltip_3aj69_1",xo="_heading_3aj69_1 _ds-heading_14b25_1",Eo="_ingress_3aj69_1",So="_muted_3aj69_1",To="_info_3aj69_1",Co="_prose_3aj69_1",$o="_validation_3aj69_1 _ds-validation-message_14b25_1",ko="_body_3aj69_173",Ao="__checked_3aj69_1",T={alert:Ln,app:In,sticky:Mn,avatar:On,badge:Rn,breadcrumbs:Pn,button:Dn,card:Nn,group:Hn,chip:Bn,details:jn,dialog:Fn,_drawer:Un,divider:qn,errorsummary:Vn,_errorsummary:zn,field:Wn,_datalist:Gn,affixes:Yn,fieldset:Kn,helptext:Xn,input:Qn,grid:Jn,flex:Zn,link:to,logo:eo,pagination:no,popover:oo,progress:io,_indeterminate:so,skeleton:ao,_skeleton:ro,spinner:lo,steps:co,table:uo,_scrollShadow:fo,tabs:po,_scrollMask:mo,tag:ho,toast:go,_toastClose:bo,_toastOpen:vo,_toastTimeout:_o,togglegroup:yo,_tooltip:wo,heading:xo,ingress:Eo,muted:So,info:To,prose:Co,validation:$o,body:ko,_checked:Ao},Bs=Object.freeze(Object.defineProperty({__proto__:null,_checked:Ao,_datalist:Gn,_drawer:Un,_errorsummary:zn,_indeterminate:so,_scrollMask:mo,_scrollShadow:fo,_skeleton:ro,_toastClose:bo,_toastOpen:vo,_toastTimeout:_o,_tooltip:wo,affixes:Yn,alert:Ln,app:In,avatar:On,badge:Rn,body:ko,breadcrumbs:Pn,button:Dn,card:Nn,chip:Bn,default:T,details:jn,dialog:Fn,divider:qn,errorsummary:Vn,field:Wn,fieldset:Kn,flex:Zn,grid:Jn,group:Hn,heading:xo,helptext:Xn,info:To,ingress:Eo,input:Qn,link:to,logo:eo,muted:So,pagination:no,popover:oo,progress:io,prose:Co,skeleton:ao,spinner:lo,steps:co,sticky:Mn,table:uo,tabs:po,tag:ho,toast:go,togglegroup:yo,validation:$o},Symbol.toStringTag,{value:"Module"})),gt=Math.min,O=Math.max,Xt=Math.round,Qt=Math.floor,V=t=>({x:t,y:t}),js={left:"right",right:"left",bottom:"top",top:"bottom"},Fs={start:"end",end:"start"};function Lo(t,e,n){return O(t,gt(e,n))}function Jt(t,e){return typeof t=="function"?t(e):t}function it(t){return t.split("-")[0]}function Zt(t){return t.split("-")[1]}function Io(t){return t==="x"?"y":"x"}function Mo(t){return t==="y"?"height":"width"}const Us=new Set(["top","bottom"]);function Q(t){return Us.has(it(t))?"y":"x"}function Oo(t){return Io(Q(t))}function qs(t,e,n){n===void 0&&(n=!1);const o=Zt(t),i=Oo(t),s=Mo(i);let a=i==="x"?o===(n?"end":"start")?"right":"left":o==="start"?"bottom":"top";return e.reference[s]>e.floating[s]&&(a=te(a)),[a,te(a)]}function Vs(t){const e=te(t);return[Ae(t),e,Ae(e)]}function Ae(t){return t.replace(/start|end/g,e=>Fs[e])}const Ro=["left","right"],Po=["right","left"],zs=["top","bottom"],Ws=["bottom","top"];function Gs(t,e,n){switch(t){case"top":case"bottom":return n?e?Po:Ro:e?Ro:Po;case"left":case"right":return e?zs:Ws;default:return[]}}function Ys(t,e,n,o){const i=Zt(t);let s=Gs(it(t),n==="start",o);return i&&(s=s.map(a=>a+"-"+i),e&&(s=s.concat(s.map(Ae)))),s}function te(t){return t.replace(/left|right|bottom|top/g,e=>js[e])}function Ks(t){return{top:0,right:0,bottom:0,left:0,...t}}function Xs(t){return typeof t!="number"?Ks(t):{top:t,right:t,bottom:t,left:t}}function ee(t){const{x:e,y:n,width:o,height:i}=t;return{width:o,height:i,top:n,left:e,right:e+o,bottom:n+i,x:e,y:n}}function Do(t,e,n){let{reference:o,floating:i}=t;const s=Q(e),a=Oo(e),r=Mo(a),c=it(e),l=s==="y",d=o.x+o.width/2-i.width/2,u=o.y+o.height/2-i.height/2,m=o[r]/2-i[r]/2;let p;switch(c){case"top":p={x:d,y:o.y-i.height};break;case"bottom":p={x:d,y:o.y+o.height};break;case"right":p={x:o.x+o.width,y:u};break;case"left":p={x:o.x-i.width,y:u};break;default:p={x:o.x,y:o.y}}switch(Zt(e)){case"start":p[a]-=m*(n&&l?-1:1);break;case"end":p[a]+=m*(n&&l?-1:1);break}return p}const Qs=async(t,e,n)=>{const{placement:o="bottom",strategy:i="absolute",middleware:s=[],platform:a}=n,r=s.filter(Boolean),c=await(a.isRTL==null?void 0:a.isRTL(e));let l=await a.getElementRects({reference:t,floating:e,strategy:i}),{x:d,y:u}=Do(l,o,c),m=o,p={},b=0;for(let h=0;h<r.length;h++){const{name:_,fn:v}=r[h],{x:g,y:x,data:w,reset:S}=await v({x:d,y:u,initialPlacement:o,placement:m,strategy:i,middlewareData:p,rects:l,platform:a,elements:{reference:t,floating:e}});d=g??d,u=x??u,p={...p,[_]:{...p[_],...w}},S&&b<=50&&(b++,typeof S=="object"&&(S.placement&&(m=S.placement),S.rects&&(l=S.rects===!0?await a.getElementRects({reference:t,floating:e,strategy:i}):S.rects),{x:d,y:u}=Do(l,m,c)),h=-1)}return{x:d,y:u,placement:m,strategy:i,middlewareData:p}};async function Le(t,e){var n;e===void 0&&(e={});const{x:o,y:i,platform:s,rects:a,elements:r,strategy:c}=t,{boundary:l="clippingAncestors",rootBoundary:d="viewport",elementContext:u="floating",altBoundary:m=!1,padding:p=0}=Jt(e,t),b=Xs(p),_=r[m?u==="floating"?"reference":"floating":u],v=ee(await s.getClippingRect({element:(n=await(s.isElement==null?void 0:s.isElement(_)))==null||n?_:_.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(r.floating)),boundary:l,rootBoundary:d,strategy:c})),g=u==="floating"?{x:o,y:i,width:a.floating.width,height:a.floating.height}:a.reference,x=await(s.getOffsetParent==null?void 0:s.getOffsetParent(r.floating)),w=await(s.isElement==null?void 0:s.isElement(x))?await(s.getScale==null?void 0:s.getScale(x))||{x:1,y:1}:{x:1,y:1},S=ee(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:r,rect:g,offsetParent:x,strategy:c}):g);return{top:(v.top-S.top+b.top)/w.y,bottom:(S.bottom-v.bottom+b.bottom)/w.y,left:(v.left-S.left+b.left)/w.x,right:(S.right-v.right+b.right)/w.x}}const Js=function(t){return t===void 0&&(t={}),{name:"flip",options:t,async fn(e){var n,o;const{placement:i,middlewareData:s,rects:a,initialPlacement:r,platform:c,elements:l}=e,{mainAxis:d=!0,crossAxis:u=!0,fallbackPlacements:m,fallbackStrategy:p="bestFit",fallbackAxisSideDirection:b="none",flipAlignment:h=!0,..._}=Jt(t,e);if((n=s.arrow)!=null&&n.alignmentOffset)return{};const v=it(i),g=Q(r),x=it(r)===r,w=await(c.isRTL==null?void 0:c.isRTL(l.floating)),S=m||(x||!h?[te(r)]:Vs(r)),N=b!=="none";!m&&N&&S.push(...Ys(r,h,b,w));const G=[r,...S],dt=await Le(e,_),ut=[];let X=((o=s.flip)==null?void 0:o.overflows)||[];if(d&&ut.push(dt[v]),u){const ft=qs(i,a,w);ut.push(dt[ft[0]],dt[ft[1]])}if(X=[...X,{placement:i,overflows:ut}],!ut.every(ft=>ft<=0)){var Mt,Ot;const ft=(((Mt=s.flip)==null?void 0:Mt.index)||0)+1,rn=G[ft];if(rn&&(!(u==="alignment"?g!==Q(rn):!1)||X.every(q=>Q(q.placement)===g?q.overflows[0]>0:!0)))return{data:{index:ft,overflows:X},reset:{placement:rn}};let Pt=(Ot=X.filter(pt=>pt.overflows[0]<=0).sort((pt,q)=>pt.overflows[1]-q.overflows[1])[0])==null?void 0:Ot.placement;if(!Pt)switch(p){case"bestFit":{var Rt;const pt=(Rt=X.filter(q=>{if(N){const et=Q(q.placement);return et===g||et==="y"}return!0}).map(q=>[q.placement,q.overflows.filter(et=>et>0).reduce((et,yl)=>et+yl,0)]).sort((q,et)=>q[1]-et[1])[0])==null?void 0:Rt[0];pt&&(Pt=pt);break}case"initialPlacement":Pt=r;break}if(i!==Pt)return{reset:{placement:Pt}}}return{}}}},Zs=function(t){return t===void 0&&(t={}),{name:"shift",options:t,async fn(e){const{x:n,y:o,placement:i}=e,{mainAxis:s=!0,crossAxis:a=!1,limiter:r={fn:_=>{let{x:v,y:g}=_;return{x:v,y:g}}},...c}=Jt(t,e),l={x:n,y:o},d=await Le(e,c),u=Q(it(i)),m=Io(u);let p=l[m],b=l[u];if(s){const _=m==="y"?"top":"left",v=m==="y"?"bottom":"right",g=p+d[_],x=p-d[v];p=Lo(g,p,x)}if(a){const _=u==="y"?"top":"left",v=u==="y"?"bottom":"right",g=b+d[_],x=b-d[v];b=Lo(g,b,x)}const h=r.fn({...e,[m]:p,[u]:b});return{...h,data:{x:h.x-n,y:h.y-o,enabled:{[m]:s,[u]:a}}}}}},ta=function(t){return t===void 0&&(t={}),{name:"size",options:t,async fn(e){var n,o;const{placement:i,rects:s,platform:a,elements:r}=e,{apply:c=()=>{},...l}=Jt(t,e),d=await Le(e,l),u=it(i),m=Zt(i),p=Q(i)==="y",{width:b,height:h}=s.floating;let _,v;u==="top"||u==="bottom"?(_=u,v=m===(await(a.isRTL==null?void 0:a.isRTL(r.floating))?"start":"end")?"left":"right"):(v=u,_=m==="end"?"top":"bottom");const g=h-d.top-d.bottom,x=b-d.left-d.right,w=gt(h-d[_],g),S=gt(b-d[v],x),N=!e.middlewareData.shift;let G=w,dt=S;if((n=e.middlewareData.shift)!=null&&n.enabled.x&&(dt=x),(o=e.middlewareData.shift)!=null&&o.enabled.y&&(G=g),N&&!m){const X=O(d.left,0),Mt=O(d.right,0),Ot=O(d.top,0),Rt=O(d.bottom,0);p?dt=b-2*(X!==0||Mt!==0?X+Mt:O(d.left,d.right)):G=h-2*(Ot!==0||Rt!==0?Ot+Rt:O(d.top,d.bottom))}await c({...e,availableWidth:dt,availableHeight:G});const ut=await a.getDimensions(r.floating);return b!==ut.width||h!==ut.height?{reset:{rects:!0}}:{}}}};function ne(){return typeof window<"u"}function bt(t){return No(t)?(t.nodeName||"").toLowerCase():"#document"}function R(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function z(t){var e;return(e=(No(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function No(t){return ne()?t instanceof Node||t instanceof R(t).Node:!1}function H(t){return ne()?t instanceof Element||t instanceof R(t).Element:!1}function W(t){return ne()?t instanceof HTMLElement||t instanceof R(t).HTMLElement:!1}function Ho(t){return!ne()||typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof R(t).ShadowRoot}const ea=new Set(["inline","contents"]);function Et(t){const{overflow:e,overflowX:n,overflowY:o,display:i}=B(t);return/auto|scroll|overlay|hidden|clip/.test(e+o+n)&&!ea.has(i)}const na=new Set(["table","td","th"]);function oa(t){return na.has(bt(t))}const ia=[":popover-open",":modal"];function oe(t){return ia.some(e=>{try{return t.matches(e)}catch{return!1}})}const sa=["transform","translate","scale","rotate","perspective"],aa=["transform","translate","scale","rotate","perspective","filter"],ra=["paint","layout","strict","content"];function Ie(t){const e=Me(),n=H(t)?B(t):t;return sa.some(o=>n[o]?n[o]!=="none":!1)||(n.containerType?n.containerType!=="normal":!1)||!e&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!e&&(n.filter?n.filter!=="none":!1)||aa.some(o=>(n.willChange||"").includes(o))||ra.some(o=>(n.contain||"").includes(o))}function la(t){let e=J(t);for(;W(e)&&!vt(e);){if(Ie(e))return e;if(oe(e))return null;e=J(e)}return null}function Me(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const ca=new Set(["html","body","#document"]);function vt(t){return ca.has(bt(t))}function B(t){return R(t).getComputedStyle(t)}function ie(t){return H(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function J(t){if(bt(t)==="html")return t;const e=t.assignedSlot||t.parentNode||Ho(t)&&t.host||z(t);return Ho(e)?e.host:e}function Bo(t){const e=J(t);return vt(e)?t.ownerDocument?t.ownerDocument.body:t.body:W(e)&&Et(e)?e:Bo(e)}function St(t,e,n){var o;e===void 0&&(e=[]),n===void 0&&(n=!0);const i=Bo(t),s=i===((o=t.ownerDocument)==null?void 0:o.body),a=R(i);if(s){const r=Oe(a);return e.concat(a,a.visualViewport||[],Et(i)?i:[],r&&n?St(r):[])}return e.concat(i,St(i,[],n))}function Oe(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function jo(t){const e=B(t);let n=parseFloat(e.width)||0,o=parseFloat(e.height)||0;const i=W(t),s=i?t.offsetWidth:n,a=i?t.offsetHeight:o,r=Xt(n)!==s||Xt(o)!==a;return r&&(n=s,o=a),{width:n,height:o,$:r}}function Re(t){return H(t)?t:t.contextElement}function _t(t){const e=Re(t);if(!W(e))return V(1);const n=e.getBoundingClientRect(),{width:o,height:i,$:s}=jo(e);let a=(s?Xt(n.width):n.width)/o,r=(s?Xt(n.height):n.height)/i;return(!a||!Number.isFinite(a))&&(a=1),(!r||!Number.isFinite(r))&&(r=1),{x:a,y:r}}const da=V(0);function Fo(t){const e=R(t);return!Me()||!e.visualViewport?da:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function ua(t,e,n){return e===void 0&&(e=!1),!n||e&&n!==R(t)?!1:e}function st(t,e,n,o){e===void 0&&(e=!1),n===void 0&&(n=!1);const i=t.getBoundingClientRect(),s=Re(t);let a=V(1);e&&(o?H(o)&&(a=_t(o)):a=_t(t));const r=ua(s,n,o)?Fo(s):V(0);let c=(i.left+r.x)/a.x,l=(i.top+r.y)/a.y,d=i.width/a.x,u=i.height/a.y;if(s){const m=R(s),p=o&&H(o)?R(o):o;let b=m,h=Oe(b);for(;h&&o&&p!==b;){const _=_t(h),v=h.getBoundingClientRect(),g=B(h),x=v.left+(h.clientLeft+parseFloat(g.paddingLeft))*_.x,w=v.top+(h.clientTop+parseFloat(g.paddingTop))*_.y;c*=_.x,l*=_.y,d*=_.x,u*=_.y,c+=x,l+=w,b=R(h),h=Oe(b)}}return ee({width:d,height:u,x:c,y:l})}function se(t,e){const n=ie(t).scrollLeft;return e?e.left+n:st(z(t)).left+n}function Uo(t,e){const n=t.getBoundingClientRect(),o=n.left+e.scrollLeft-se(t,n),i=n.top+e.scrollTop;return{x:o,y:i}}function fa(t){let{elements:e,rect:n,offsetParent:o,strategy:i}=t;const s=i==="fixed",a=z(o),r=e?oe(e.floating):!1;if(o===a||r&&s)return n;let c={scrollLeft:0,scrollTop:0},l=V(1);const d=V(0),u=W(o);if((u||!u&&!s)&&((bt(o)!=="body"||Et(a))&&(c=ie(o)),W(o))){const p=st(o);l=_t(o),d.x=p.x+o.clientLeft,d.y=p.y+o.clientTop}const m=a&&!u&&!s?Uo(a,c):V(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+d.x+m.x,y:n.y*l.y-c.scrollTop*l.y+d.y+m.y}}function pa(t){return Array.from(t.getClientRects())}function ma(t){const e=z(t),n=ie(t),o=t.ownerDocument.body,i=O(e.scrollWidth,e.clientWidth,o.scrollWidth,o.clientWidth),s=O(e.scrollHeight,e.clientHeight,o.scrollHeight,o.clientHeight);let a=-n.scrollLeft+se(t);const r=-n.scrollTop;return B(o).direction==="rtl"&&(a+=O(e.clientWidth,o.clientWidth)-i),{width:i,height:s,x:a,y:r}}const qo=25;function ha(t,e){const n=R(t),o=z(t),i=n.visualViewport;let s=o.clientWidth,a=o.clientHeight,r=0,c=0;if(i){s=i.width,a=i.height;const d=Me();(!d||d&&e==="fixed")&&(r=i.offsetLeft,c=i.offsetTop)}const l=se(o);if(l<=0){const d=o.ownerDocument,u=d.body,m=getComputedStyle(u),p=d.compatMode==="CSS1Compat"&&parseFloat(m.marginLeft)+parseFloat(m.marginRight)||0,b=Math.abs(o.clientWidth-u.clientWidth-p);b<=qo&&(s-=b)}else l<=qo&&(s+=l);return{width:s,height:a,x:r,y:c}}const ga=new Set(["absolute","fixed"]);function ba(t,e){const n=st(t,!0,e==="fixed"),o=n.top+t.clientTop,i=n.left+t.clientLeft,s=W(t)?_t(t):V(1),a=t.clientWidth*s.x,r=t.clientHeight*s.y,c=i*s.x,l=o*s.y;return{width:a,height:r,x:c,y:l}}function Vo(t,e,n){let o;if(e==="viewport")o=ha(t,n);else if(e==="document")o=ma(z(t));else if(H(e))o=ba(e,n);else{const i=Fo(t);o={x:e.x-i.x,y:e.y-i.y,width:e.width,height:e.height}}return ee(o)}function zo(t,e){const n=J(t);return n===e||!H(n)||vt(n)?!1:B(n).position==="fixed"||zo(n,e)}function va(t,e){const n=e.get(t);if(n)return n;let o=St(t,[],!1).filter(r=>H(r)&&bt(r)!=="body"),i=null;const s=B(t).position==="fixed";let a=s?J(t):t;for(;H(a)&&!vt(a);){const r=B(a),c=Ie(a);!c&&r.position==="fixed"&&(i=null),(s?!c&&!i:!c&&r.position==="static"&&!!i&&ga.has(i.position)||Et(a)&&!c&&zo(t,a))?o=o.filter(d=>d!==a):i=r,a=J(a)}return e.set(t,o),o}function _a(t){let{element:e,boundary:n,rootBoundary:o,strategy:i}=t;const a=[...n==="clippingAncestors"?oe(e)?[]:va(e,this._c):[].concat(n),o],r=a[0],c=a.reduce((l,d)=>{const u=Vo(e,d,i);return l.top=O(u.top,l.top),l.right=gt(u.right,l.right),l.bottom=gt(u.bottom,l.bottom),l.left=O(u.left,l.left),l},Vo(e,r,i));return{width:c.right-c.left,height:c.bottom-c.top,x:c.left,y:c.top}}function ya(t){const{width:e,height:n}=jo(t);return{width:e,height:n}}function wa(t,e,n){const o=W(e),i=z(e),s=n==="fixed",a=st(t,!0,s,e);let r={scrollLeft:0,scrollTop:0};const c=V(0);function l(){c.x=se(i)}if(o||!o&&!s)if((bt(e)!=="body"||Et(i))&&(r=ie(e)),o){const p=st(e,!0,s,e);c.x=p.x+e.clientLeft,c.y=p.y+e.clientTop}else i&&l();s&&!o&&i&&l();const d=i&&!o&&!s?Uo(i,r):V(0),u=a.left+r.scrollLeft-c.x-d.x,m=a.top+r.scrollTop-c.y-d.y;return{x:u,y:m,width:a.width,height:a.height}}function Pe(t){return B(t).position==="static"}function Wo(t,e){if(!W(t)||B(t).position==="fixed")return null;if(e)return e(t);let n=t.offsetParent;return z(t)===n&&(n=n.ownerDocument.body),n}function Go(t,e){const n=R(t);if(oe(t))return n;if(!W(t)){let i=J(t);for(;i&&!vt(i);){if(H(i)&&!Pe(i))return i;i=J(i)}return n}let o=Wo(t,e);for(;o&&oa(o)&&Pe(o);)o=Wo(o,e);return o&&vt(o)&&Pe(o)&&!Ie(o)?n:o||la(t)||n}const xa=async function(t){const e=this.getOffsetParent||Go,n=this.getDimensions,o=await n(t.floating);return{reference:wa(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function Ea(t){return B(t).direction==="rtl"}const Sa={convertOffsetParentRelativeRectToViewportRelativeRect:fa,getDocumentElement:z,getClippingRect:_a,getOffsetParent:Go,getElementRects:xa,getClientRects:pa,getDimensions:ya,getScale:_t,isElement:H,isRTL:Ea};function Yo(t,e){return t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height}function Ta(t,e){let n=null,o;const i=z(t);function s(){var r;clearTimeout(o),(r=n)==null||r.disconnect(),n=null}function a(r,c){r===void 0&&(r=!1),c===void 0&&(c=1),s();const l=t.getBoundingClientRect(),{left:d,top:u,width:m,height:p}=l;if(r||e(),!m||!p)return;const b=Qt(u),h=Qt(i.clientWidth-(d+m)),_=Qt(i.clientHeight-(u+p)),v=Qt(d),x={rootMargin:-b+"px "+-h+"px "+-_+"px "+-v+"px",threshold:O(0,gt(1,c))||1};let w=!0;function S(N){const G=N[0].intersectionRatio;if(G!==c){if(!w)return a();G?a(!1,G):o=setTimeout(()=>{a(!1,1e-7)},1e3)}G===1&&!Yo(l,t.getBoundingClientRect())&&a(),w=!1}try{n=new IntersectionObserver(S,{...x,root:i.ownerDocument})}catch{n=new IntersectionObserver(S,x)}n.observe(t)}return a(!0),s}function Ca(t,e,n,o){o===void 0&&(o={});const{ancestorScroll:i=!0,ancestorResize:s=!0,elementResize:a=typeof ResizeObserver=="function",layoutShift:r=typeof IntersectionObserver=="function",animationFrame:c=!1}=o,l=Re(t),d=i||s?[...l?St(l):[],...St(e)]:[];d.forEach(v=>{i&&v.addEventListener("scroll",n,{passive:!0}),s&&v.addEventListener("resize",n)});const u=l&&r?Ta(l,n):null;let m=-1,p=null;a&&(p=new ResizeObserver(v=>{let[g]=v;g&&g.target===l&&p&&(p.unobserve(e),cancelAnimationFrame(m),m=requestAnimationFrame(()=>{var x;(x=p)==null||x.observe(e)})),n()}),l&&!c&&p.observe(l),p.observe(e));let b,h=c?st(t):null;c&&_();function _(){const v=st(t);h&&!Yo(h,v)&&n(),h=v,b=requestAnimationFrame(_)}return n(),()=>{var v;d.forEach(g=>{i&&g.removeEventListener("scroll",n),s&&g.removeEventListener("resize",n)}),u?.(),(v=p)==null||v.disconnect(),p=null,c&&cancelAnimationFrame(b)}}const De=Zs,Ne=Js,Ko=ta,$a=(t,e,n)=>{const o=new Map,i={platform:Sa,...n},s={...i.platform,_c:o};return Qs(t,e,{...i,platform:s})};function Xo(t){var e,n,o="";if(typeof t=="string"||typeof t=="number")o+=t;else if(typeof t=="object")if(Array.isArray(t)){var i=t.length;for(e=0;e<i;e++)t[e]&&(n=Xo(t[e]))&&(o&&(o+=" "),o+=n)}else for(n in t)t[n]&&(o&&(o+=" "),o+=n);return o}function ka(){for(var t,e,n=0,o="",i=arguments.length;n<i;n++)(t=arguments[n])&&(e=Xo(t))&&(o&&(o+=" "),o+=e);return o}const P={capture:!0,passive:!0},at=typeof window<"u"&&typeof document<"u";function Aa(t,e){let n;return(...o)=>{clearTimeout(n),n=setTimeout(()=>t(...o),e)}}function f(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 La=0;const Ia=`${Date.now().toString(36)}${Math.random().toString(36).slice(2,5)}`;function ae(t){return t.id||(t.id=`${Ia}${++La}`),t.id}const Qo=(t,e,[...n])=>{for(const o of n[0].split(","))n[0]=o,e[`${t}EventListener`](...n)},C=(t,...e)=>{Tt&&(t===window||t===document)&&Tt.push(()=>Jo(t,...e)),Qo("add",t,e)},Jo=(t,...e)=>Qo("remove",t,e);let Tt=null;const D=t=>{if(!at||!window.requestAnimationFrame)return;window._mtdsUnbindEvents||(window._mtdsUnbindEvents=new Map);const e=()=>requestAnimationFrame(()=>{const n=String(t).replace(/(\n|\s)/g,"");window._mtdsUnbindEvents?.get(n)?.map(o=>o()),Tt=[],t(),window._mtdsUnbindEvents?.set(n,Tt?.slice(0)),Tt=null});document.readyState==="complete"?e():C(window,"load",e)},He=new WeakMap;function rt(t,e,n){He.get(t)?.(),He.delete(t),e&&He.set(t,Ca(e,t,()=>{if(!t.isConnected||!e.isConnected||t.hidden)return rt(t,!1);$a(e,t,n).then(({x:o,y:i})=>{t.style.left=`${o}px`,t.style.top=`${i}px`})}))}function Zo(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 Be=new WeakMap,yt=(t,e,n)=>{if(!at||!window.requestAnimationFrame)return;const o=t.getElementsByClassName(e),i=Be.get(t)||[];i.length||(Be.set(t,i),Zo((s,a)=>{if(t.isConnected&&i?.length)for(const r of i)r();else a?.disconnect(),Be.delete(t)}).observe(t,{attributeFilter:["class","hidden"],attributes:!0,childList:!0,subtree:!0})),i.push(()=>n(o))},je=t=>t instanceof HTMLElement&&"validity"in t&&!(t instanceof HTMLButtonElement),$=(t,e,n)=>{const o=document.createElement(t);if(n&&(o.textContent=n),e)for(const[i,s]of Object.entries(e))f(o,i,s);return o},Ma=typeof HTMLElement>"u"?class{}:HTMLElement,Oa=`.${T.breadcrumbs.split(" ")[0]}`,Ra=`.${T.card.split(" ")[0]}`,ti=`.${T.chip.split(" ")[0]}`,Pa=`.${T.helptext.split(" ")[0]}`,Da=`.${T.pagination.split(" ")[0]}`,Na='summary,u-summary,a,button,[role="tab"],[role="button"]',Ha="click,toggle,submit,change",Fe="mattilsynet.matomo.cloud",j="mtds-analytics-banner",Ba="https://www.mattilsynet.no/om-mattilsynet/personvernerklaering/informasjonskapsler";function ei(t,e={}){if(at){if(window._paq||(window._paq=[],window._paq.push(["HeatmapSessionRecording::disable"]),window._paq.push(["enableLinkTracking"]),window._paq.push(["setTrackerUrl",`https://${Fe}/matomo.php`])),window._mtm||(window._mtm=window._mtm||[],window._mtm.push({"mtm.startTime":Date.now(),event:"mtm.Start"})),t==="init"){window._mtdsTracking={enabled:window.location.hostname!=="localhost",...window._mtdsTracking,...e};const{consent:n,enabled:o,matomoId:i,matomoTagManagerId:s}=window._mtdsTracking;if(i&&window._paq.push(["setSiteId",i]),o){n!=="custom"&&ja();const a=s?`https://cdn.matomo.cloud/${Fe}/container_${s}.js`:`https://cdn.matomo.cloud/${Fe}/matomo.js`;document.querySelector(`script[src="${a}"]`)||document.head.append($("script",{async:"",src:a}))}}if(window._mtdsTracking?.enabled!==!1){if(window._mtdsTracking?.enabled==="debug")return console.info(`analytics("${t}", `,e,")");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];let r=location.href;window._paq.push([function(){r=this.getCurrentUrl()}]),window._paq.push(["setCustomUrl",r.split("#")[0]]),window._paq.push(a.filter(c=>c!==void 0)),window._paq.push(["setCustomUrl",r])}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)}}}function ja(){if(document.getElementById(j)||window.localStorage.getItem(j))return;document.body.insertAdjacentHTML("afterbegin",`<dialog id="${j}" data-analytics="ignore"><style>
9
+ #${j}[open] { box-sizing: border-box; display: flex; align-items: center; background: #116e6b; border-radius: .5em; border: 0; box-shadow: 0 .25em .5em rgba(0,0,0,.3); color: #fff; font-size: .875em; inset: auto auto 1em 1em; max-width: calc(100vw - 2em); outline: 0; padding: .5em; position: fixed; z-index: 99999 }
10
+ #${j} button { all: unset; box-sizing: border-box; cursor: pointer; display: flex; width: 1.5em; height: 1.5em; font: 300 1.5em/1.35 sans-serif; border-radius: .25em; place-content: center; transition: .2s; transition-property: background, scale }
11
+ #${j} button:focus-visible { outline: 2px solid }
12
+ #${j} button:hover { background: #0a4e4f }
13
+ #${j} button:active { background: #054449; scale: .9 }
14
+ #${j} p { margin: 0 .25em }
15
15
  </style>
16
16
  <p>Vi bruker <a href="${Ba}" target="_blank">informasjonskapsler</a> for å forbedre brukeropplevelsen.</p>
17
17
  <form method="dialog" data-analytics="ignore"><button type="submit" aria-label="OK">&times;</button></form>
18
- </dialog>`);const e=document.getElementById(F),n=()=>window.localStorage.setItem(F,"seen");e.addEventListener("close",n,{once:!0}),e.show()}function Ua(t){window._mtdsTracking?.enabled&&setTimeout(za,0,t)}function za({type:t,target:e}){const n=t==="click"?e?.closest?.(Na):e;if(!(n instanceof Element)||n.closest('[data-analytics="ignore"]'))return;let o="click",i="Button",s=oi(n)||Wa(n)||f(n,"data-tooltip")||"";if(t==="submit")i="Form",o="submit",s=s||document.title;else if(t==="toggle"){if(!n.matches("dialog:modal"))return;i="Dialog",o="open"}else if(t==="change"){const a=f(n,"type"),r=a==="checkbox"||a==="radio"?n.closest("fieldset"):null;i=n.closest(ei)?"Chip":"Form",o="change",s=oi(r||n)||Ct(r?.querySelector("legend"))||Ct(n?.labels?.[0])}else if(f(n,"role")==="tab")i="Tab",o="navigate";else if(f(n,"popovertarget")){if(!qa(n)?.matches(":popover-open"))return;i=n.closest(Pa)?"HelpText":"Popover",o="open"}else if(n.nodeName.endsWith("SUMMARY")){if(!n.parentElement.open)return;i="Details",o="open"}else if(f(n,"data-command")==="toggle-app-expanded"){const a=Va(n,"--mtds-tooltip-position")==="none";i="Sidebar",o=a?"expand":"minimize",s=a&&f(n,"data-tooltip")||Ct(n)}else if(n.closest(Oa))i="Breadcrumbs",o="navigate";else if(n.closest(Da))i="Pagintation",o="navigate";else if(n.closest(Ra))i="Card",o=n instanceof HTMLAnchorElement?"navigate":"click";else if(n.closest(ei))i="Chip",o=n.hasAttribute("data-removable")?"remove":"click";else if(n.closest("th[aria-sort]"))i="Table",o="sort";else if(n instanceof HTMLAnchorElement)i="Link",o=n.protocol==="mailto:"?"email":"navigate",n.hasAttribute("download")?o="download":n.hash&&n.href.startsWith(location.href.split("#")[0])&&(o="anchor");else if(n.hasAttribute("aria-expanded")){if(f(n,"aria-expanded")!=="true")return;i="Expand",o="open"}ni("event",{category:f(n,"data-analytics-category")??i,action:f(n,"data-analytics-action")??o,name:f(n,"data-analytics-name")??s})}const Ct=t=>t?.textContent?.trim()||"",oi=t=>t&&f(t,"aria-label")||"",qa=t=>document.getElementById(f(t,"popovertarget")||""),Va=(t,e)=>window.getComputedStyle(t).getPropertyValue(e)?.trim(),Wa=t=>{const e=Ct(t),n=Ct(t.querySelector("h1,h2,h3,h4,h5,h6"));return e.startsWith(n)&&n||e.slice(0,100).trim()};D(()=>C(document,Ha,Ua,P)),typeof window<"u"&&window.CSSStyleSheet&&document.adoptedStyleSheets&&(()=>{const t="--mtds-app-expanded",e=new CSSStyleSheet,n=()=>!window.localStorage.getItem(t)?.includes("false");document.adoptedStyleSheets.push(e),window.mtdsToggleAppExpanded=o=>{try{const i=o??!n();e.replaceSync?.(`:root { ${t}: var(${t}--${i})}`),window.localStorage.setItem(t,i)}catch{}},window.mtdsToggleAppExpanded(n())})();const ii=T.app.split(" ")[0],ja=T.sticky.split(" ")[0],Ga='[data-command="toggle-app-expanded"]',Ue=`.${ii} > dialog,.${ii} dialog ~ main`,si=t=>{document.startViewTransition?document.startViewTransition(t):t()},ai=t=>si(()=>window.mtdsToggleAppExpanded?.(t));function Ya({target:t,defaultPrevented:e}){const n=t?.closest?.("a");if(n?.closest("dialog")&&n?.closest(Ue))return ri();if(e||!(t instanceof HTMLButtonElement)||!t.matches(Ga))return;getComputedStyle(t).position==="sticky"?ai():si(()=>{const i=document.querySelector(Ue);i?.setAttribute("data-closedby","any"),i?.showModal()})}function ri(){document.querySelector(Ue)?.close()}let ze=0,yt,Y=0,L,qe=0,re=0,Ve=!1,We=0,lt=0;function Ka([t]){L=t,li()}function li(){if(!L?.isConnected)return;const t=window.scrollY,e=t<lt;lt=t,e!==yt&&(ze=(L.parentElement?.getBoundingClientRect().top||0)+lt,yt=e,qe=L.offsetHeight,re=L.getBoundingClientRect().top+lt,Ve=L.offsetHeight<=window.innerHeight,We=window.innerHeight),!(Y===-1&&Ve)&&(Y!==-1&&(Ve||yt&&lt<=re)?(L.style.setProperty("--pos","sticky"),L.style.setProperty("--top","0px"),Y=-1):Y===-1&&!yt?(L.style.setProperty("--pos","relative"),L.style.setProperty("--top",`${Math.max(0,lt-ze)}px`),Y=0):Y!==1&&!yt&&lt+We>=re+qe?(L.style.setProperty("--pos","sticky"),L.style.setProperty("--top",`${We-qe}px`),Y=1):Y===1&&yt&&(L.style.setProperty("--pos","relative"),L.style.setProperty("--top",`${re-ze}px`),Y=0))}D(()=>{_t(document.documentElement,ja,Ka),C(document,"click",Ya,P),C(window,"resize",Aa(ri,100),P),C(window,"scroll",li,P)});const Xa=(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,c)=>c+i);return n>4&&i>1&&a.splice(0,2,1,0),n>3&&s<e&&a.splice(-2,2,0,e),a},Qa=({current:t=1,total:e=10,show:n=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:Xa(t,e,n).map((o,i)=>({current:o===t&&"page",key:`key-${o}-${i}`,page:o}))});function k(t,e={}){const n=document.getElementById(e.id||"")||$("dialog");return f(n,"aria-busy",e.busy?"true":null),f(n,"class",ka(T.toast,e.className)),f(n,"data-closedby",e.closedby||null),f(n,"data-color",e.color||null),f(n,"data-icon",`${e.icon??""}`||null),f(n,"data-timeout",`${e.timeout??""}`||null),f(n,"id",e.id||`${Date.now()}`),f(n,"open",e.open===!1?null:""),n.innerHTML=t,n.addEventListener("animationend",Ja,{once:!0}),document.body.appendChild(n),n.id}function Ja({animationName:t,target:e}){t===T._toastClose&&e.remove()}k.success=(t,e)=>k(t,{color:"success",...e}),k.danger=(t,e)=>k(t,{color:"danger",...e}),k.info=(t,e)=>k(t,{color:"info",...e}),k.warning=(t,e)=>k(t,{color:"warning",...e}),k.neutral=(t,e)=>k(t,{color:"neutral",...e}),k.promise=async function(e,n){const{loading:o,success:i,error:s,...a}=n,r=k(o,{busy:!0,...a});try{const c=await e();return k.success(i,{id:r,busy:!1}),c}catch(c){throw k.danger(s,{id:r,busy:!1}),c}};const Za=T.breadcrumbs.split(" ")[0];function tr(t){for(const e of t)e.querySelectorAll("li a").forEach((n,o,{length:i})=>{f(n,"aria-current",o===i-1?"page":null)})}D(()=>_t(document.documentElement,Za,tr));const er=`:host(:not([hidden])) {
18
+ </dialog>`);const e=document.getElementById(j),n=()=>window.localStorage.setItem(j,"seen");e.addEventListener("close",n,{once:!0}),e.show()}function Fa(t){window._mtdsTracking?.enabled&&setTimeout(Ua,0,t)}function Ua({type:t,target:e}){const n=t==="click"?e?.closest?.(Na):e;if(!(n instanceof Element)||n.closest('[data-analytics="ignore"]'))return;let o="click",i="Button",s=ni(n)||za(n)||f(n,"data-tooltip")||"";if(t==="submit")i="Form",o="submit",s=s||document.title;else if(t==="toggle"){if(!n.matches("dialog:modal"))return;i="Dialog",o="open"}else if(t==="change"){const a=f(n,"type"),r=a==="checkbox"||a==="radio"?n.closest("fieldset"):null;i=n.closest(ti)?"Chip":"Form",o="change",s=ni(r||n)||Ct(r?.querySelector("legend"))||Ct(n?.labels?.[0])}else if(f(n,"role")==="tab")i="Tab",o="navigate";else if(f(n,"popovertarget")){if(!qa(n)?.matches(":popover-open"))return;i=n.closest(Pa)?"HelpText":"Popover",o="open"}else if(n.nodeName.endsWith("SUMMARY")){if(!n.parentElement.open)return;i="Details",o="open"}else if(f(n,"data-command")==="toggle-app-expanded"){const a=Va(n,"--mtds-tooltip-position")==="none";i="Sidebar",o=a?"expand":"minimize",s=a&&f(n,"data-tooltip")||Ct(n)}else if(n.closest(Oa))i="Breadcrumbs",o="navigate";else if(n.closest(Da))i="Pagintation",o="navigate";else if(n.closest(Ra))i="Card",o=n instanceof HTMLAnchorElement?"navigate":"click";else if(n.closest(ti))i="Chip",o=n.hasAttribute("data-removable")?"remove":"click";else if(n.closest("th[aria-sort]"))i="Table",o="sort";else if(n instanceof HTMLAnchorElement)i="Link",o=n.protocol==="mailto:"?"email":"navigate",n.hasAttribute("download")?o="download":n.hash&&n.href.startsWith(location.href.split("#")[0])&&(o="anchor");else if(n.hasAttribute("aria-expanded")){if(f(n,"aria-expanded")!=="true")return;i="Expand",o="open"}ei("event",{category:f(n,"data-analytics-category")??i,action:f(n,"data-analytics-action")??o,name:f(n,"data-analytics-name")??s})}const Ct=t=>t?.textContent?.trim()||"",ni=t=>t&&f(t,"aria-label")||"",qa=t=>document.getElementById(f(t,"popovertarget")||""),Va=(t,e)=>window.getComputedStyle(t).getPropertyValue(e)?.trim(),za=t=>{const e=Ct(t),n=Ct(t.querySelector("h1,h2,h3,h4,h5,h6"));return e.startsWith(n)&&n||e.slice(0,100).trim()};D(()=>C(document,Ha,Fa,P)),typeof window<"u"&&window.CSSStyleSheet&&document.adoptedStyleSheets&&(()=>{const t="--mtds-app-expanded",e=new CSSStyleSheet,n=()=>!window.localStorage.getItem(t)?.includes("false");document.adoptedStyleSheets.push(e),window.mtdsToggleAppExpanded=o=>{try{const i=o??!n();e.replaceSync?.(`:root { ${t}: var(${t}--${i})}`),window.localStorage.setItem(t,i)}catch{}},window.mtdsToggleAppExpanded(n())})();const oi=T.app.split(" ")[0],Wa=T.sticky.split(" ")[0],Ga='[data-command="toggle-app-expanded"]',Ue=`.${oi} > dialog,.${oi} dialog ~ main`,ii=t=>{document.startViewTransition?document.startViewTransition(t):t()},si=t=>ii(()=>window.mtdsToggleAppExpanded?.(t));function Ya({target:t,defaultPrevented:e}){const n=t?.closest?.("a");if(n?.closest("dialog")&&n?.closest(Ue))return ai();if(e||!(t instanceof HTMLButtonElement)||!t.matches(Ga))return;getComputedStyle(t).position==="sticky"?si():ii(()=>{const i=document.querySelector(Ue);i?.setAttribute("data-closedby","any"),i?.showModal()})}function ai(){document.querySelector(Ue)?.close()}let qe=0,wt,Y=0,L,Ve=0,re=0,ze=!1,We=0,lt=0;function Ka([t]){L=t,ri()}function ri(){if(!L?.isConnected)return;const t=window.scrollY,e=t<lt;lt=t,e!==wt&&(qe=(L.parentElement?.getBoundingClientRect().top||0)+lt,wt=e,Ve=L.offsetHeight,re=L.getBoundingClientRect().top+lt,ze=L.offsetHeight<=window.innerHeight,We=window.innerHeight),!(Y===-1&&ze)&&(Y!==-1&&(ze||wt&&lt<=re)?(L.style.setProperty("--pos","sticky"),L.style.setProperty("--top","0px"),Y=-1):Y===-1&&!wt?(L.style.setProperty("--pos","relative"),L.style.setProperty("--top",`${Math.max(0,lt-qe)}px`),Y=0):Y!==1&&!wt&&lt+We>=re+Ve?(L.style.setProperty("--pos","sticky"),L.style.setProperty("--top",`${We-Ve}px`),Y=1):Y===1&&wt&&(L.style.setProperty("--pos","relative"),L.style.setProperty("--top",`${re-qe}px`),Y=0))}D(()=>{yt(document.documentElement,Wa,Ka),C(document,"click",Ya,P),C(window,"resize",Aa(ai,100),P),C(window,"scroll",ri,P)});const Xa=(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,c)=>c+i);return n>4&&i>1&&a.splice(0,2,1,0),n>3&&s<e&&a.splice(-2,2,0,e),a},Qa=({current:t=1,total:e=10,show:n=7})=>({prev:t>1?t-1:0,next:t<e?t+1:0,pages:Xa(t,e,n).map((o,i)=>({current:o===t&&"page",key:`key-${o}-${i}`,page:o}))});function k(t,e={}){const n=document.getElementById(e.id||"")||$("dialog");return f(n,"aria-busy",e.busy?"true":null),f(n,"class",ka(T.toast,e.className)),f(n,"data-closedby",e.closedby||null),f(n,"data-color",e.color||null),f(n,"data-icon",`${e.icon??""}`||null),f(n,"data-timeout",`${e.timeout??""}`||null),f(n,"id",e.id||`${Date.now()}`),f(n,"open",e.open===!1?null:""),n.innerHTML=t,n.addEventListener("animationend",Ja,{once:!0}),document.body.appendChild(n),n.id}function Ja({animationName:t,target:e}){t===T._toastClose&&e.remove()}k.success=(t,e)=>k(t,{color:"success",...e}),k.danger=(t,e)=>k(t,{color:"danger",...e}),k.info=(t,e)=>k(t,{color:"info",...e}),k.warning=(t,e)=>k(t,{color:"warning",...e}),k.neutral=(t,e)=>k(t,{color:"neutral",...e}),k.promise=async function(e,n){const{loading:o,success:i,error:s,...a}=n,r=k(o,{busy:!0,...a});try{const c=await e();return k.success(i,{id:r,busy:!1}),c}catch(c){throw k.danger(s,{id:r,busy:!1}),c}};const Za=T.breadcrumbs.split(" ")[0];function tr(t){for(const e of t)e.querySelectorAll("li a").forEach((n,o,{length:i})=>{f(n,"aria-current",o===i-1?"page":null)})}D(()=>yt(document.documentElement,Za,tr));const er=`:host(:not([hidden])) {
19
19
  display: grid;
20
20
  gap: var(--ds-size-6);
21
21
  }
@@ -315,18 +315,17 @@ var mtds=function(M){"use strict";var os=Object.defineProperty,ln=Object.getOwnP
315
315
  vertical-align: middle;
316
316
  width: var(--ds-size-5);
317
317
  }
318
- `;function nr(t,{type:e}){const n=e==="stacked",o=t[0].reduce((d,u,m)=>{const p=t.map(h=>h[m].number),v=p.reduce((h,w)=>h+w,0);return Math.max(d,...n?[v]:p)},0),i=10**(`${~~o}`.length-1),s=o/i<5?i/2:i,a=Math.ceil(o/s)*s,r=$("div",{class:"axisGroups"}),c=$("div");c.classList.add("axisSteps"),c.append(...Array.from({length:a/s+1},(d,u)=>or(s*u)).reverse().map(d=>$("div",{class:"axisStep","data-label":d})));const l=$("div",{"aria-label":t[0][0].value||null,class:"axis",role:"figure"});return l.style.setProperty("--groups",`${t.length-1}`),l.style.setProperty("--total",`${a}`),l.append(c,r),{total:a,groups:r,axis:l}}const or=new Intl.NumberFormat().format;function ir(t){return t[0].slice(1).map(({value:e,event:n},o)=>{const i=$("div",{class:"axisGroup","data-label":e}),s=i.appendChild($("div",{class:"axisGroupContent"}));return t.slice(1).map(a=>a[o+1]).map(({tooltip:a,style:r,number:c})=>s.appendChild($("div",{"aria-label":a,"data-event":n,class:"bar",role:"img",style:`${r}; --value: ${c}`,tabindex:"0"}))),i})}function sr(t,{total:e,variant:n}){const i=$("div",{class:"axisGroup"});return t.slice(1).forEach(([,...s])=>{const a=$("div",{class:"lineContainer",role:"list",style:s[0].style}),r=ar(s.map(({number:d},u,{length:m})=>[100/(m-1)*u,100-d/e*100]),0/100),c=document.createElementNS("http://www.w3.org/2000/svg","svg");f(c,"aria-hidden","true"),f(c,"preserveAspectRatio","none"),f(c,"viewBox","0 0 100 100");const l=document.createElementNS("http://www.w3.org/2000/svg","path");if(f(l,"class","line"),f(l,"d",r),f(l,"fill","none"),f(l,"stroke","currentColor"),n==="area"){const d=l.cloneNode(!0);f(d,"d",`M-100,100 L${r.slice(1)}L200,100`),f(d,"class","lineShade"),c.append(d)}s.forEach(({number:d,tooltip:u,event:m})=>{const p=$("div",{role:"listitem"});p.appendChild($("div",{"aria-label":u,"data-event":m,tabindex:"0",class:"linePoint",role:"img",style:`--value: ${d}`})),a.append(p)}),a.appendChild(c).append(l),i.append(a)}),i}const ar=(t,e)=>t.map(([n,o],i,s)=>i?rr(i,s,e):`M${n},${o}`).join(" "),ci=([t,e],[n,o])=>[t+n,e+o],di=([t,e],[n,o])=>[t-n,e-o],ui=(t,[e,n])=>[t*e,t*n],rr=(t,e,n)=>{const o=e[t-1],i=e[t],[s,a]=ci(o,ui(n,di(i,e[t-2]||o))),[r,c]=ci(i,ui(n,di(o,e[t+1]||i)));return`C ${s},${a} ${r},${c} ${i[0]},${i[1]}`};function lr(t,{variant:e}){const n=document.createElementNS("http://www.w3.org/2000/svg","svg");f(n,"class","pie"),f(n,"viewBox","0 0 100 100");let o=0;const i=50,s=e==="doughnut"?25:0,a=t.slice(1).reduce((r,[,c])=>r+c.number,0);return t.slice(1).forEach(([,{tooltip:r,number:c,event:l,style:d}])=>{const u=document.createElementNS("http://www.w3.org/2000/svg","path"),m=o/a;o+=c;const p=o/a,v=p-m>.5?1:0,h=2*Math.PI*(m-.25),w=2*Math.PI*(p-.25),b=Math.cos(h),g=Math.sin(h),x=Math.cos(w),y=Math.sin(w),S=`M ${i+s*b} ${i+s*g} L ${i+i*b} ${i+i*g} A ${i} ${i} 0 ${v} 1 ${i+i*x} ${i+i*y} L ${i+s*x} ${i+s*y} A ${s} ${s} 0 ${v} 0 ${i+s*b} ${i+s*g}`;f(u,"aria-label",r),f(u,"data-event",l),f(u,"style",d),f(u,"d",S),f(u,"role","img"),f(u,"tabindex","0"),n.appendChild(u)}),n}const fi="click,keydown,mousemove,mouseout",pi="mtds-chart-tooltip",Z=at?document.getElementById(pi)||$("div",{class:T._tooltip,id:pi,hidden:""}):null;class cr extends Ma{_observer;static get observedAttributes(){return["data-variant"]}constructor(){super(),this.attachShadow({mode:"open"})}connectedCallback(){this._observer=new MutationObserver(this.attributeChangedCallback.bind(this)),this._observer.observe(this,{attributeFilter:["data-tooltip"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),this.attributeChangedCallback(),C(this,fi,this)}disconnectedCallback(){Z&&(Z.hidden=!0),Zo(this,fi,this),this._observer?.disconnect(),this._observer=void 0}attributeChangedCallback(){Array.from(this.shadowRoot?.children||[]).map(l=>l.remove());const e=fr(this.querySelector("table")),[n,o]=(f(this,"data-variant")||"bar").split("-"),i=$("style",{},er),s=$("div",{class:"legends"});e.slice(1).forEach(([{value:l,style:d}])=>{s.appendChild($("div",{class:"legend",style:d},l))});const{axis:a,groups:r,total:c}=nr(e,{type:o});(n==="bar"||n==="column")&&r.append(...ir(e)),(n==="line"||n==="area")&&r.append(sr(e,{total:c,variant:n})),(n==="doughnut"||n==="pie")&&this.shadowRoot?.append(lr(e,{variant:n})),this.shadowRoot?.append(i,a,s)}handleEvent(e){e.type==="click"||e.type==="keydown"?dr(e,this):ur(e)}}function dr(t,e){if(t instanceof KeyboardEvent&&t.key!=="Enter")return;const n=t.composedPath()[0],o=e.querySelector("table"),[i,s]=n instanceof Element&&f(n,"data-event")?.split("-").map(Number)||[];o?.rows[i]?.cells[s]?.querySelector("a,button")?.click?.()}let mi="";function ur(t){if(!Z)return;Z?.isConnected||document.body.append(Z);const e=t.composedPath()[0],n=e instanceof Element&&e.getAttribute("aria-label")||"";n&&(Z.style.transform=`translate(${t.pageX}px, ${t.pageY}px)`),n!==mi&&(n&&(Z.textContent=n),mi=n,Z.hidden=!n)}const $t=t=>t?.textContent?.trim()||"",fr=t=>Array.from(t?.rows||[],(e,n)=>Array.from(e.cells,(o,i)=>({number:i&&n&&Number.parseFloat($t(o))||0,event:o.querySelector("a,button")&&`${n}-${i}`,style:`--color: var(--mtdsc-chart-color-${n}, var(--mtdsc-chart-color-base))`,value:$t(o),tooltip:f(o,"data-tooltip")||`${$t(e.cells[0])}: ${$t(o)} (${$t(t?.rows[0].cells[i])})`})));at&&!window.customElements.get("mtds-chart")&&window.customElements.define("mtds-chart",cr);const pr=T.dialog.split(" ")[0],mr=at?document.getElementsByClassName(pr):[],hr=()=>{for(const t of mr)t.isConnected&&t.showModal&&t.close&&(t.matches('[open]:not([data-modal="false"]):not(:modal)')?(f(t,"open",null),t.showModal()):t.matches(":modal:not([open])")&&(f(t,"open",""),t.close()))},gr=({clientX:t,clientY:e,target:n})=>{if(n instanceof HTMLDialogElement&&f(n,"data-closedby")==="any"){const{top:s,right:a,bottom:r,left:c}=n.getBoundingClientRect();if(!(s<=e&&e<=r&&c<=t&&t<=a))return n.close()}const o=n?.closest?.("dialog");o&&n?.closest?.('[data-command="close"]')&&o.close()};D(()=>{C(document,"click",gr,P),ti(hr).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function vr(t){if(t.animationName!==T._errorsummary)return;const e=t.target?.firstElementChild;e instanceof HTMLHeadingElement&&(f(e,"tabindex","-1"),e.focus())}D(()=>C(document,"animationend",vr,P));var br=Object.defineProperty,hi=Object.getOwnPropertySymbols,wr=Object.prototype.hasOwnProperty,_r=Object.prototype.propertyIsEnumerable,gi=(t,e,n)=>e in t?br(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,yr=(t,e)=>{for(var n in e||(e={}))wr.call(e,n)&&gi(t,n,e[n]);if(hi)for(var n of hi(e))_r.call(e,n)&&gi(t,n,e[n]);return t},kt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",le=kt&&/android/i.test(navigator.userAgent),je=kt&&/iPad|iPhone|iPod/.test(navigator.userAgent),vi;kt&&/^Mac/i.test(((vi=navigator.userAgentData)==null?void 0:vi.platform)||navigator.platform);var xr=`${le?"data":"aria"}-labelledby`,Er=":host(:not([hidden])) { display: block }",Sr="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",bi=typeof HTMLElement>"u"?class{}:HTMLElement;function E(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 wi=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},At=(t,...e)=>wi("add",t,e),ce=(t,...e)=>wi("remove",t,e),Tr=(t,e)=>t.shadowRoot||t.attachShadow({mode:"open"}).append(Ke("slot"),Ke("style",e)),de=new WeakMap,Ge=(t,e)=>{if(e===void 0)return de.get(t);try{de.get(t).disconnect(),de.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),de.set(t,n)}},_i=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},Cr=0,Ye=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Cr).toString(32)}`),t.id):"",Ke=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},yi={define:(t,e)=>!kt||window.customElements.get(t)||window.customElements.define(t,e)},ct,$r=0,xi=t=>{ct||(ct=Ke("div"),ct.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",E(ct,"aria-live","assertive")),ct.isConnected||document.body.append(ct),t&&(ct.textContent=`${t}${$r++%2?" ":""}`)},kr=(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}))},Xe=!1,Qe=t=>(t?.type==="mouseup"&&(Xe=!1),t?.type==="mousedown"&&(Xe=!0,At(document,"mouseup",Qe,{once:!0})),Xe),Je="disabled",Lt="selected",Ar=class extends bi{static get observedAttributes(){return[Je,Lt]}connectedCallback(){je||(this.tabIndex=-1),this.hasAttribute("role")||E(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){E(this,"aria-disabled",`${this.disabled}`),E(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[Lt]}set defaultSelected(t){this[Lt]=t}get disabled(){return E(this,Je)!==null}set disabled(t){E(this,Je,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=E(this,"label"))!=null?t:this.text}set label(t){E(this,"label",t)}get selected(){return E(this,Lt)!==null}set selected(t){E(this,Lt,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=E(this,"value"))!=null?t:this.text}set value(t){E(this,"value",t)}};yi.define("u-option",Ar);var Lr=`${Er}
318
+ `;function nr(t,{type:e}){const n=e==="stacked",o=t[0].reduce((d,u,m)=>{const p=t.map(h=>h[m].number),b=p.reduce((h,_)=>h+_,0);return Math.max(d,...n?[b]:p)},0),i=10**(`${~~o}`.length-1),s=o/i<5?i/2:i,a=Math.ceil(o/s)*s,r=$("div",{class:"axisGroups"}),c=$("div");c.classList.add("axisSteps"),c.append(...Array.from({length:a/s+1},(d,u)=>or(s*u)).reverse().map(d=>$("div",{class:"axisStep","data-label":d})));const l=$("div",{"aria-label":t[0][0].value||null,class:"axis",role:"figure"});return l.style.setProperty("--groups",`${t.length-1}`),l.style.setProperty("--total",`${a}`),l.append(c,r),{total:a,groups:r,axis:l}}const or=new Intl.NumberFormat().format;function ir(t){return t[0].slice(1).map(({value:e,event:n},o)=>{const i=$("div",{class:"axisGroup","data-label":e}),s=i.appendChild($("div",{class:"axisGroupContent"}));return t.slice(1).map(a=>a[o+1]).map(({tooltip:a,style:r,number:c})=>s.appendChild($("div",{"aria-label":a,"data-event":n,class:"bar",role:"img",style:`${r}; --value: ${c}`,tabindex:"0"}))),i})}function sr(t,{total:e,variant:n}){const i=$("div",{class:"axisGroup"});return t.slice(1).forEach(([,...s])=>{const a=$("div",{class:"lineContainer",role:"list",style:s[0].style}),r=ar(s.map(({number:d},u,{length:m})=>[100/(m-1)*u,100-d/e*100]),0/100),c=document.createElementNS("http://www.w3.org/2000/svg","svg");f(c,"aria-hidden","true"),f(c,"preserveAspectRatio","none"),f(c,"viewBox","0 0 100 100");const l=document.createElementNS("http://www.w3.org/2000/svg","path");if(f(l,"class","line"),f(l,"d",r),f(l,"fill","none"),f(l,"stroke","currentColor"),n==="area"){const d=l.cloneNode(!0);f(d,"d",`M-100,100 L${r.slice(1)}L200,100`),f(d,"class","lineShade"),c.append(d)}s.forEach(({number:d,tooltip:u,event:m})=>{const p=$("div",{role:"listitem"});p.appendChild($("div",{"aria-label":u,"data-event":m,tabindex:"0",class:"linePoint",role:"img",style:`--value: ${d}`})),a.append(p)}),a.appendChild(c).append(l),i.append(a)}),i}const ar=(t,e)=>t.map(([n,o],i,s)=>i?rr(i,s,e):`M${n},${o}`).join(" "),li=([t,e],[n,o])=>[t+n,e+o],ci=([t,e],[n,o])=>[t-n,e-o],di=(t,[e,n])=>[t*e,t*n],rr=(t,e,n)=>{const o=e[t-1],i=e[t],[s,a]=li(o,di(n,ci(i,e[t-2]||o))),[r,c]=li(i,di(n,ci(o,e[t+1]||i)));return`C ${s},${a} ${r},${c} ${i[0]},${i[1]}`};function lr(t,{variant:e}){const n=document.createElementNS("http://www.w3.org/2000/svg","svg");f(n,"class","pie"),f(n,"viewBox","0 0 100 100");let o=0;const i=50,s=e==="doughnut"?25:0,a=t.slice(1).reduce((r,[,c])=>r+c.number,0);return t.slice(1).forEach(([,{tooltip:r,number:c,event:l,style:d}])=>{const u=document.createElementNS("http://www.w3.org/2000/svg","path"),m=o/a;o+=c;const p=o/a,b=p-m>.5?1:0,h=2*Math.PI*(m-.25),_=2*Math.PI*(p-.25),v=Math.cos(h),g=Math.sin(h),x=Math.cos(_),w=Math.sin(_),S=`M ${i+s*v} ${i+s*g} L ${i+i*v} ${i+i*g} A ${i} ${i} 0 ${b} 1 ${i+i*x} ${i+i*w} L ${i+s*x} ${i+s*w} A ${s} ${s} 0 ${b} 0 ${i+s*v} ${i+s*g}`;f(u,"aria-label",r),f(u,"data-event",l),f(u,"style",d),f(u,"d",S),f(u,"role","img"),f(u,"tabindex","0"),n.appendChild(u)}),n}const ui="click,keydown,mousemove,mouseout",fi="mtds-chart-tooltip",Z=at?document.getElementById(fi)||$("div",{class:T._tooltip,id:fi,hidden:""}):null;class cr extends Ma{_observer;static get observedAttributes(){return["data-variant"]}constructor(){super(),this.attachShadow({mode:"open"})}connectedCallback(){this._observer=new MutationObserver(this.attributeChangedCallback.bind(this)),this._observer.observe(this,{attributeFilter:["data-tooltip"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),this.attributeChangedCallback(),C(this,ui,this)}disconnectedCallback(){Z&&(Z.hidden=!0),Jo(this,ui,this),this._observer?.disconnect(),this._observer=void 0}attributeChangedCallback(){Array.from(this.shadowRoot?.children||[]).map(l=>l.remove());const e=fr(this.querySelector("table")),[n,o]=(f(this,"data-variant")||"bar").split("-"),i=$("style",{},er),s=$("div",{class:"legends"});e.slice(1).forEach(([{value:l,style:d}])=>{s.appendChild($("div",{class:"legend",style:d},l))});const{axis:a,groups:r,total:c}=nr(e,{type:o});(n==="bar"||n==="column")&&r.append(...ir(e)),(n==="line"||n==="area")&&r.append(sr(e,{total:c,variant:n})),(n==="doughnut"||n==="pie")&&this.shadowRoot?.append(lr(e,{variant:n})),this.shadowRoot?.append(i,a,s)}handleEvent(e){e.type==="click"||e.type==="keydown"?dr(e,this):ur(e)}}function dr(t,e){if(t instanceof KeyboardEvent&&t.key!=="Enter")return;const n=t.composedPath()[0],o=e.querySelector("table"),[i,s]=n instanceof Element&&f(n,"data-event")?.split("-").map(Number)||[];o?.rows[i]?.cells[s]?.querySelector("a,button")?.click?.()}let pi="";function ur(t){if(!Z)return;Z?.isConnected||document.body.append(Z);const e=t.composedPath()[0],n=e instanceof Element&&e.getAttribute("aria-label")||"";n&&(Z.style.transform=`translate(${t.pageX}px, ${t.pageY}px)`),n!==pi&&(n&&(Z.textContent=n),pi=n,Z.hidden=!n)}const $t=t=>t?.textContent?.trim()||"",fr=t=>Array.from(t?.rows||[],(e,n)=>Array.from(e.cells,(o,i)=>({number:i&&n&&Number.parseFloat($t(o))||0,event:o.querySelector("a,button")&&`${n}-${i}`,style:`--color: var(--mtdsc-chart-color-${n}, var(--mtdsc-chart-color-base))`,value:$t(o),tooltip:f(o,"data-tooltip")||`${$t(e.cells[0])}: ${$t(o)} (${$t(t?.rows[0].cells[i])})`})));at&&!window.customElements.get("mtds-chart")&&window.customElements.define("mtds-chart",cr);const pr=T.dialog.split(" ")[0],mi=at?document.getElementsByClassName(pr):[],mr=()=>{for(const t of mi)t.isConnected&&t.showModal&&t.close&&(t.matches('[open]:not([data-modal="false"]):not(:modal)')?(f(t,"open",null),t.showModal()):t.matches(":modal:not([open])")&&(f(t,"open",""),t.close()))},hr=({clientX:t,clientY:e,target:n})=>{for(const s of mi)if(s.open&&f(s,"data-closedby")==="any"){const{top:a,right:r,bottom:c,left:l}=s.getBoundingClientRect();if(!(a<=e&&e<=c&&l<=t&&t<=r))return s.close()}const o=n?.closest?.("dialog");o&&n?.closest?.('[data-command="close"]')&&o.close()};D(()=>{C(document,"click",hr,P),Zo(mr).observe(document.documentElement,{attributeFilter:["open"],attributes:!0,childList:!0,subtree:!0})});function gr(t){if(t.animationName!==T._errorsummary)return;const e=t.target?.firstElementChild;e instanceof HTMLHeadingElement&&(f(e,"tabindex","-1"),e.focus())}D(()=>C(document,"animationend",gr,P));var br=Object.defineProperty,hi=Object.getOwnPropertySymbols,vr=Object.prototype.hasOwnProperty,_r=Object.prototype.propertyIsEnumerable,gi=(t,e,n)=>e in t?br(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n,yr=(t,e)=>{for(var n in e||(e={}))vr.call(e,n)&&gi(t,n,e[n]);if(hi)for(var n of hi(e))_r.call(e,n)&&gi(t,n,e[n]);return t},kt=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",le=kt&&/android/i.test(navigator.userAgent),Ge=kt&&/iPad|iPhone|iPod/.test(navigator.userAgent),bi;kt&&/^Mac/i.test(((bi=navigator.userAgentData)==null?void 0:bi.platform)||navigator.platform);var wr=`${le?"data":"aria"}-labelledby`,xr=":host(:not([hidden])) { display: block }",Er="outline: 1px dotted; outline: 5px auto Highlight; outline: 5px auto -webkit-focus-ring-color",vi=typeof HTMLElement>"u"?class{}:HTMLElement;function E(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 _i=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},At=(t,...e)=>_i("add",t,e),ce=(t,...e)=>_i("remove",t,e),Sr=(t,e)=>t.shadowRoot||t.attachShadow({mode:"open"}).append(Xe("slot"),Xe("style",e)),de=new WeakMap,Ye=(t,e)=>{if(e===void 0)return de.get(t);try{de.get(t).disconnect(),de.delete(t)}catch{}if(e){const n=new MutationObserver(o=>t.handleEvent({type:"mutation",detail:o}));n.observe(t,e),de.set(t,n)}},yi=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},Tr=0,Ke=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++Tr).toString(32)}`),t.id):"",Xe=(t,e,n)=>{const o=document.createElement(t);return e&&(o.textContent=e),o},wi={define:(t,e)=>!kt||window.customElements.get(t)||window.customElements.define(t,e)},ct,Cr=0,xi=t=>{ct||(ct=Xe("div"),ct.style.cssText="position:fixed;overflow:hidden;width:1px;white-space:nowrap",E(ct,"aria-live","assertive")),ct.isConnected||document.body.append(ct),t&&(ct.textContent=`${t}${Cr++%2?" ":""}`)},$r=(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}))},Qe=!1,Je=t=>(t?.type==="mouseup"&&(Qe=!1),t?.type==="mousedown"&&(Qe=!0,At(document,"mouseup",Je,{once:!0})),Qe),Ze="disabled",Lt="selected",kr=class extends vi{static get observedAttributes(){return[Ze,Lt]}connectedCallback(){Ge||(this.tabIndex=-1),this.hasAttribute("role")||E(this,"role","option"),this.attributeChangedCallback()}attributeChangedCallback(){E(this,"aria-disabled",`${this.disabled}`),E(this,"aria-selected",`${this.selected}`)}get defaultSelected(){return this[Lt]}set defaultSelected(t){this[Lt]=t}get disabled(){return E(this,Ze)!==null}set disabled(t){E(this,Ze,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=E(this,"label"))!=null?t:this.text}set label(t){E(this,"label",t)}get selected(){return E(this,Lt)!==null}set selected(t){E(this,Lt,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=E(this,"value"))!=null?t:this.text}set value(t){E(this,"value",t)}};wi.define("u-option",kr);var Ar=`${xr}
319
319
  ::slotted(u-option) { display: block; cursor: pointer }
320
- ::slotted(u-option:focus) { ${Sr} }
320
+ ::slotted(u-option:focus) { ${Er} }
321
321
  ::slotted(u-option[aria-hidden="true"]),
322
322
  ::slotted(u-option[disabled]),
323
- ::slotted(u-option[hidden]) { display: none !important }`,Ei,Si=0,Ir=je||le,Ti="click,focusout,input,keydown,mousedown,mouseup",Ci="focus,focusin,blur,focusout",ue={singular:"%d hit",plural:"%d hits"},$i=class extends bi{constructor(){super(),this._texts=yr({},ue),this._value="",Tr(this,Lr)}static get observedAttributes(){return["id",...Object.keys(ue).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=_i(this),E(this,"role","listbox"),E(this,"tabindex","-1"),At(this._root,"focusin",this),At(this._root,"focus",this,!0),Ge(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){ce(this._root||this,"focus",this,!0),ce(this._root||this,"focusin",this),Ge(this,!1),Ze(this),this._root=void 0}attributeChangedCallback(t,e,n){const o=t?.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(ue[o])this._texts[o]=n||ue[o];else if(this._root){this._input&&tn(this,this._input);for(const s of this._root.querySelectorAll(i))tn(this,s)}}handleEvent(t){const{target:e,type:n}=t;t.defaultPrevented||(n==="click"&&Rr(this,t),(n==="focus"||n==="focusin")&&Mr(this,t),(n==="blur"||n==="focusout")&&Or(this,t),n==="keydown"&&Pr(this,t),n==="mousedown"&&this.contains(e)&&Qe(t),(n==="mutation"||n==="input")&&(clearTimeout(Si),Si=setTimeout(Li,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},ki=t=>t?.disabled||t?.readOnly||!1,It=(t,e)=>{var n,o,i;if(t.hidden!==e)return;t.hidden=ki(t?._input)||!e,(n=Ge(t))==null||n.takeRecords();const s=t.isConnected&&t.popover&&((o=t._input)==null?void 0:o.isConnected)&&((i=t._input)==null?void 0:i.popoverTargetElement)===t;t._input&&tn(t,t._input,e),s&&E(t,"popover","manual"),s&&t.togglePopover(e),e&&Li(t)},Ze=t=>{t._input&&(ce(t._input||t,Ci,t),ce(t._root||t,Ti,t),It(t,!1),t._input=void 0)},tn=(t,e,n=!1)=>{t.popover&&E(e,"popovertarget",Ye(t)),At(e,Ci,t,!0),E(e,"aria-autocomplete","list"),E(e,"aria-controls",Ye(t)),E(e,"aria-expanded",`${!Ir||n}`),E(e,"autocomplete","off"),E(e,"role",ki(e)?null:"combobox")},Mr=(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&&Ze(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus")),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),E(t,xr,Ye((n=t._input.labels)==null?void 0:n[0])),At(t._root||t,Ti,t),It(t,E(t._input,"inputmode")!=="none"),xi())},Or=(t,e)=>{!le&&!Qe()&&t._input&&setTimeout(Ai,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},Ai=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})),Ze(t))},Rr=(t,{target:e})=>{var n;if(!t._input||t._input===e)return It(t,!0);for(const o of t.options)if(o.contains(e))return E(t,"aria-multiselectable")!=="true"&&((n=t._input)==null||n.focus(),It(t,!1)),kr(t._input,o.value);le&&Ai(t)},Pr=(t,e)=>{var n;const{key:o,target:i,altKey:s,ctrlKey:a,shiftKey:r,metaKey:c}=e,l=o==="Escape"||o==="Esc";if(s||a||c||r||o==="Tab")return;l&&!t.hidden&&e?.preventDefault(),It(t,!l);const d=[...t.options].filter(p=>E(p,"aria-hidden")!=="true"&&p.offsetHeight),u=d.indexOf(i);let m=-1;if(o==="ArrowDown"&&(m=(u+1)%d.length),o==="ArrowUp"&&(m=(~u?u:d.length)-1),~u&&((o==="Home"||o==="PageUp")&&(m=0),(o==="End"||o==="PageDown")&&(m=d.length-1),o==="Enter"))return d[u].click(),e.preventDefault();if(d[m])for(const p of d)p.tabIndex=-1;d[m]&&e.preventDefault(),(n=d[m]||t._input)==null||n.focus(),!d[m]&&o==="ArrowUp"&&setTimeout(()=>{var p;return(p=t._input)==null?void 0:p.setSelectionRange(999,999)})},Li=(t,e)=>{const{_texts:n,_root:o,_input:i,options:s}=t,a=i?.value.toLowerCase().trim()||"",r=!t.hasAttribute("data-nofilter"),c=[],l=[];for(const u of s)(u.disabled||u.hidden||r&&!u.label.toLowerCase().includes(a)?c:l).push(u);for(const u of c)E(u,"aria-hidden","true");for(const u of l)E(u,"aria-hidden","false");const d=l.length;clearTimeout(Ei),e?.type==="input"&&a!==t._value&&(Ei=setTimeout(()=>{const u=`${!d&&t.innerText.trim()||`${n[d===1?"singular":"plural"]}`.replace("%d",`${d}`)}`;!t.hidden&&o?.activeElement===i&&xi(u),t._value=a},1e3)),je&&l.map((u,m)=>E(u,"title",`${m+1}/${d}`))};kt&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return _i(this).getElementById(E(this,"list")||"")}}),yi.define("u-datalist",$i);const en=T.field.split(" ")[0],Ii=T.validation.split(" "),Dr=Ii[0],U=(t,e)=>t.getPropertyValue(`--mtds-text-${e}`)?.slice(1,-1)||"";function Mi(t,e){for(const n of t)if(n.isConnected){const o=[],i=[],s=[];let a=null,r=null,c=!0;for(const l of n.getElementsByTagName("*"))l instanceof HTMLLabelElement?o.push(l):l instanceof we?a=l:Be(l)&&!l.hidden?r=l:l.hasAttribute("data-description")?i.push(l):l.classList.contains(Dr)?(c=f(l,"data-color")==="success"||!l.clientHeight,s.push(l),i.unshift(l)):l instanceof HTMLParagraphElement&&(i.some(d=>d.contains(l))||i.push(l));if(r){for(const l of o)l.htmlFor=ae(r);if(e&&f(n,"data-validation")==="form"){c=r.matches(":valid");for(const l of s)f(l,"hidden",c?"":null)}Nr(a),Ri(r),Oi(r),f(r,"aria-describedby",i.map(ae).join(" ")||null),f(r,"aria-invalid",`${!c}`)}}}function Oi(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function Nr(t){const{control:e,list:n}=t||{};if(t&&n&&!t.hasAttribute("data-sr-added")){const o=window.getComputedStyle(t);f(t,"data-sr-added",U(o,"combobox-added")),f(t,"data-sr-empty",U(o,"combobox-empty")),f(t,"data-sr-found",U(o,"combobox-found")),f(t,"data-sr-invalid",U(o,"combobox-invalid")),f(t,"data-sr-of",U(o,"combobox-of")),f(t,"data-sr-remove",U(o,"combobox-remove")),f(t,"data-sr-removed",U(o,"combobox-removed")),f(n,"data-sr-plural",U(o,"datalist-plural")),f(n,"data-sr-singular",U(o,"datalist-singular"))}n&&e&&!n.hasAttribute("popover")&&(f(n,"popover","manual"),f(e,"popovertarget",ae(n)))}function Ri(t){const e=t?.nextElementSibling,n=e&&f(e,"data-count");if(e&&n){const o=Number(n)-t.value.length,i=o<0,s=f(e,"aria-live")==="polite",a=window.getComputedStyle(e||t),r=U(a,"count-over"),c=U(a,"count-under");if(s!==i){f(e,"aria-live",i?"polite":"off");for(const l of Ii)e.classList.toggle(l,i)}e.textContent=(i?r:c).replace("%d",`${Math.abs(o)}`)}}function Hr(t){if(t.target instanceof $i){const e=t.target,o=e.getRootNode()?.querySelector(`[popovertarget="${e.id}"]`);t.newState==="closed"?rt(e,!1):o&&rt(e,o,{placement:f(e,"data-position")??"bottom",middleware:[De(),Pe(),Xo({padding:10,apply({availableHeight:i}){e.style.width=`${o.offsetWidth}px`,e.style.maxHeight=`${Math.max(50,i)}px`}})]})}}function Br(t){Be(t.target)&&(Ri(t.target),Oi(t.target))}function Fr(t){const e=t.target?.closest?.(`.${en}`);t.type==="invalid"&&e&&t.preventDefault(),Mi(document.getElementsByClassName(en),!0)}D(()=>{_t(document.documentElement,en,Mi),C(document,"input",Br,P),C(document,"invalid,submit",Fr,!0),C(document,"toggle",Hr,P)});const Ur=T.fieldset.split(" ")[0],zr=T.validation.split(" ")[0],Pi="aria-describedby",qr="aria-invalid";function Vr(t){setTimeout(()=>{for(const e of t)if(e.isConnected){const n=[];let o=null,i=!0;for(const s of e.getElementsByTagName("*"))s.classList.contains(zr)?(i=f(s,"data-color")==="success"||!s.clientHeight,o=ae(s)):Be(s)&&n.push(s);for(const s of n){const a=f(s,Pi)?.replace(o||"#","");f(s,Pi,`${o||""} ${a||""}`.trim()),f(s,qr,`${!i}`)}}})}D(()=>_t(document.documentElement,Ur,Vr));const Wr=T.logo.split(" ")[0];function jr([t]){if(t?.isConnected&&t?.firstElementChild instanceof SVGSVGElement){for(const r of document.head.querySelectorAll("link[rel~='icon']"))r.setAttribute("rel","disabled");const e=t.firstElementChild,n=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($("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"}))}}D(()=>_t(document.documentElement,Wr,jr));const nn=T.popover.split(" ")[0],Di="_mtds-popover-auto";function Gr({target:t,newState:e}){if(t instanceof HTMLElement&&t.classList.contains(nn)){const n=e==="closed",o=f(t,"data-overscroll")==="contain",i=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);n?rt(t,!1):i&&rt(t,i,{placement:f(t,"data-position")||"bottom",middleware:[De(),Pe({padding:10})].concat(o?Xo({padding:10,apply({availableHeight:s}){t.style.maxHeight=`${Math.max(50,s)}px`}}):[])})}}function Yr({target:t,newState:e}){e==="open"&&t instanceof HTMLElement&&t.classList.contains(nn)&&f(t,"popover")!=="manual"&&(t.classList.add(Di),f(t,"popover","manual"))}function Kr(t){const e=t.target?.closest?.("a,button"),n=e&&f(e,"popovertarget"),o=n?document.getElementById(n):e?.closest(`.${nn}`);for(const i of document.getElementsByClassName(Di))!i.contains(t.target)&&o!==i&&i.hidePopover();if(o&&e){const i=f(e,"popovertargetaction"),s=i==="show"||(i==="hide"?!1:void 0);if(e instanceof HTMLButtonElement&&!i&&o.contains(e))return;o instanceof HTMLElement&&o.isConnected&&o.togglePopover&&(t.preventDefault(),o.togglePopover(s))}}D(()=>{C(document,"click",Kr),C(document,"toggle",Gr,P),C(document,"beforetoggle",Yr,P)});const Xr=T.table.split(" ")[0],Qr='a,button,label,input,select,textarea,[role="button"]';function Jr(t){for(const e of t){const n=Array.from(e.tHead?.rows[0]?.cells||[],o=>o.innerText.trim());for(const o of e.tBodies)for(const i of o.rows)for(const s of i.cells)f(s,"data-th",n[s.cellIndex]||":empty")}}function Zr({target:t}){if(!(t instanceof Element))return;const n=t.closest("tr")?.querySelector('[data-command="row"]');n&&!t.closest(Qr)&&n.click?.()}D(()=>{_t(document.documentElement,Xr,Jr),C(document,"click",Zr)});const Ni=T.toast.split(" ")[0],fe="data-sort";function tl({animationName:t,target:e}){const n=e;if(t===T._toastTimeout&&n.close(),t!==T._toastOpen)return;const o=Number(f(n,"data-timeout"));n.style.setProperty("--mtdsc-toast-timeout",o?`${o}ms`:null),n.hasAttribute(fe)||f(n,fe,`${Date.now()}`),f(n,"tabindex","0"),[...document.querySelectorAll(`.${Ni}[open]`)].sort((i,s)=>Number(f(s,fe))-Number(f(i,fe))).reduce((i,s)=>(s.style.translate=`0 ${s===e?0:i}px`,i+s.offsetHeight+5),0)}function el({target:t,clientX:e,clientY:n}){if(t instanceof HTMLDialogElement&&t.classList.contains(Ni)&&f(t,"data-closedby")!=="none"){const o=t.getBoundingClientRect(),i=window.getComputedStyle(t),s=window.getComputedStyle(t,"::after"),a=o.top+Number.parseInt(i.paddingTop,10),r=a+Number.parseInt(s.height,10),c=o.right-Number.parseInt(i.paddingRight,10),l=c-Number.parseInt(s.width,10);a<=n&&n<=r&&l<=e&&e<=c&&t.close()}}D(()=>{C(document,"animationstart",tl),C(document,"click",el)});const nl=`.${T.togglegroup.split(" ")[0]}`;function ol(t){const{key:e,target:n}=t,o=n instanceof HTMLInputElement&&n.closest(nl);if(o&&(e==="Enter"&&n.click(),e?.startsWith("Arrow"))){t.preventDefault();const i=o.getElementsByTagName("input"),s=[...i].indexOf(n),a=e.match(/Arrow(Right|Down)/)?1:-1;i[(i.length+s+a)%i.length]?.focus()}}D(()=>C(document,"keydown",ol));const Hi="aria-describedby",Bi="Escape",pe="aria-labelledby",il="--mtds-tooltip-position",sl=300,Fi="mtds-tooltip",z=at?document.getElementById(Fi)||$("div",{class:T._tooltip,id:Fi,popover:"manual"}):null;let tt=null,Ui=Number.NEGATIVE_INFINITY,zi=0;function on({target:t,type:e,key:n}){if(e==="keydown"&&n!==Bi)return;const o=Ui+sl-Date.now();clearTimeout(zi),zi=setTimeout(al,Math.max(o,0),n===Bi?null:t)}function al(t){if(Ui=Date.now(),!z||t===z)return;z?.isConnected||document.body.append(z);let e=t?.closest?.("[data-tooltip]")||null;if(e===tt)return;const n=e&&f(e,"data-tooltip")||"",o=e&&f(e,"data-tooltip-position")||window.getComputedStyle(e||document.body).getPropertyValue(il)?.trim()||"top";(!n||n==="false"||n==="true"||o==="none")&&(e=null),e&&(z.textContent=n);const s=tt&&f(tt,pe)===z?.id,a=(e instanceof HTMLElement?e.innerText:e?.textContent)?.trim()||e?.hasAttribute(pe)||e?.hasAttribute("aria-label");tt?.removeAttribute(s?pe:Hi),rt(z,!1),tt=e,tt&&f(tt,a?Hi:pe,z?.id),tt?.isConnected&&z.hidePopover(),z.togglePopover(!!e),rt(z,e||!1,{placement:o,middleware:[De(),Pe({padding:10})]})}D(()=>{C(document,"blur,focus,mouseout,mouseover",on,P),C(window,"keydown",on,P),C(window,"blur",on,P)});var qi=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Vi;qi&&/^Mac/i.test(((Vi=navigator.userAgentData)==null?void 0:Vi.platform)||navigator.platform);var rl=":host(:not([hidden])) { display: block }",Wi=typeof HTMLElement>"u"?class{}:HTMLElement;function K(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 ji=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Gi=(t,...e)=>ji("add",t,e),Yi=(t,...e)=>ji("remove",t,e),ll=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},cl=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},sn=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))K(o,i,s);return o},Ki={define:(t,e)=>!qi||window.customElements.get(t)||window.customElements.define(t,e)},dl=`${rl}
323
+ ::slotted(u-option[hidden]) { display: none !important }`,Ei,Si=0,Lr=Ge||le,Ti="click,focusout,input,keydown,mousedown,mouseup",Ci="focus,focusin,blur,focusout",ue={singular:"%d hit",plural:"%d hits"},$i=class extends vi{constructor(){super(),this._texts=yr({},ue),this._value="",Sr(this,Ar)}static get observedAttributes(){return["id",...Object.keys(ue).map(t=>`data-sr-${t}`)]}connectedCallback(){this.hidden=!0,this._root=yi(this),E(this,"role","listbox"),E(this,"tabindex","-1"),At(this._root,"focusin",this),At(this._root,"focus",this,!0),Ye(this,{attributeFilter:["disabled","hidden","label","value"],attributes:!0,characterData:!0,childList:!0,subtree:!0}),setTimeout(()=>this.attributeChangedCallback())}disconnectedCallback(){ce(this._root||this,"focus",this,!0),ce(this._root||this,"focusin",this),Ye(this,!1),tn(this),this._root=void 0}attributeChangedCallback(t,e,n){const o=t?.split("data-sr-")[1],i=`input[list="${this.id}"]`;if(ue[o])this._texts[o]=n||ue[o];else if(this._root){this._input&&en(this,this._input);for(const s of this._root.querySelectorAll(i))en(this,s)}}handleEvent(t){const{target:e,type:n}=t;t.defaultPrevented||(n==="click"&&Or(this,t),(n==="focus"||n==="focusin")&&Ir(this,t),(n==="blur"||n==="focusout")&&Mr(this,t),n==="keydown"&&Rr(this,t),n==="mousedown"&&this.contains(e)&&Je(t),(n==="mutation"||n==="input")&&(clearTimeout(Si),Si=setTimeout(Li,0,this,t)))}get options(){return this.getElementsByTagName("u-option")}},ki=t=>t?.disabled||t?.readOnly||!1,It=(t,e)=>{var n,o,i;if(t.hidden!==e)return;t.hidden=ki(t?._input)||!e,(n=Ye(t))==null||n.takeRecords();const s=t.isConnected&&t.popover&&((o=t._input)==null?void 0:o.isConnected)&&((i=t._input)==null?void 0:i.popoverTargetElement)===t;t._input&&en(t,t._input,e),s&&E(t,"popover","manual"),s&&t.togglePopover(e),e&&Li(t)},tn=t=>{t._input&&(ce(t._input||t,Ci,t),ce(t._root||t,Ti,t),It(t,!1),t._input=void 0)},en=(t,e,n=!1)=>{t.popover&&E(e,"popovertarget",Ke(t)),At(e,Ci,t,!0),E(e,"aria-autocomplete","list"),E(e,"aria-controls",Ke(t)),E(e,"aria-expanded",`${!Lr||n}`),E(e,"autocomplete","off"),E(e,"role",ki(e)?null:"combobox")},Ir=(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&&tn(t),t._input=e.target,t._input.dispatchEvent(new FocusEvent("focus")),t._input.dispatchEvent(new FocusEvent("focusin",{bubbles:!0})),E(t,wr,Ke((n=t._input.labels)==null?void 0:n[0])),At(t._root||t,Ti,t),It(t,E(t._input,"inputmode")!=="none"),xi())},Mr=(t,e)=>{!le&&!Je()&&t._input&&setTimeout(Ai,0,t),e.target===t._input&&e.isTrusted&&e.stopImmediatePropagation()},Ai=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})),tn(t))},Or=(t,{target:e})=>{var n;if(!t._input||t._input===e)return It(t,!0);for(const o of t.options)if(o.contains(e))return E(t,"aria-multiselectable")!=="true"&&((n=t._input)==null||n.focus(),It(t,!1)),$r(t._input,o.value);le&&Ai(t)},Rr=(t,e)=>{var n;const{key:o,target:i,altKey:s,ctrlKey:a,shiftKey:r,metaKey:c}=e,l=o==="Escape"||o==="Esc";if(s||a||c||r||o==="Tab")return;l&&!t.hidden&&e?.preventDefault(),It(t,!l);const d=[...t.options].filter(p=>E(p,"aria-hidden")!=="true"&&p.offsetHeight),u=d.indexOf(i);let m=-1;if(o==="ArrowDown"&&(m=(u+1)%d.length),o==="ArrowUp"&&(m=(~u?u:d.length)-1),~u&&((o==="Home"||o==="PageUp")&&(m=0),(o==="End"||o==="PageDown")&&(m=d.length-1),o==="Enter"))return d[u].click(),e.preventDefault();if(d[m])for(const p of d)p.tabIndex=-1;d[m]&&e.preventDefault(),(n=d[m]||t._input)==null||n.focus(),!d[m]&&o==="ArrowUp"&&setTimeout(()=>{var p;return(p=t._input)==null?void 0:p.setSelectionRange(999,999)})},Li=(t,e)=>{const{_texts:n,_root:o,_input:i,options:s}=t,a=i?.value.toLowerCase().trim()||"",r=!t.hasAttribute("data-nofilter"),c=[],l=[];for(const u of s)(u.disabled||u.hidden||r&&!u.label.toLowerCase().includes(a)?c:l).push(u);for(const u of c)E(u,"aria-hidden","true");for(const u of l)E(u,"aria-hidden","false");const d=l.length;clearTimeout(Ei),e?.type==="input"&&a!==t._value&&(Ei=setTimeout(()=>{const u=`${!d&&t.innerText.trim()||`${n[d===1?"singular":"plural"]}`.replace("%d",`${d}`)}`;!t.hidden&&o?.activeElement===i&&xi(u),t._value=a},1e3)),Ge&&l.map((u,m)=>E(u,"title",`${m+1}/${d}`))};kt&&Object.defineProperty(HTMLInputElement.prototype,"list",{configurable:!0,enumerable:!0,get(){return yi(this).getElementById(E(this,"list")||"")}}),wi.define("u-datalist",$i);const nn=T.field.split(" ")[0],Ii=T.validation.split(" "),Pr=Ii[0],F=(t,e)=>t.getPropertyValue(`--mtds-text-${e}`)?.slice(1,-1)||"";function Mi(t,e){for(const n of t)if(n.isConnected){const o=[],i=[],s=[];let a=null,r=null,c=!0;for(const l of n.getElementsByTagName("*"))l instanceof HTMLLabelElement?o.push(l):l instanceof ye?a=l:je(l)&&!l.hidden?r=l:l.hasAttribute("data-description")?i.push(l):l.classList.contains(Pr)?(c=f(l,"data-color")==="success"||!l.clientHeight,s.push(l),i.unshift(l)):l instanceof HTMLParagraphElement&&(i.some(d=>d.contains(l))||i.push(l));if(r){for(const l of o)l.htmlFor=ae(r);if(e&&f(n,"data-validation")==="form"){c=r.matches(":valid");for(const l of s)f(l,"hidden",c?"":null)}Dr(a),Ri(r),Oi(r),f(r,"aria-describedby",i.map(ae).join(" ")||null),f(r,"aria-invalid",`${!c}`)}}}function Oi(t){t instanceof HTMLTextAreaElement&&(t.style.setProperty("--mtds-textarea-height","auto"),t.style.setProperty("--mtds-textarea-height",`${t.scrollHeight}px`))}function Dr(t){const{control:e,list:n}=t||{};if(t&&n&&!t.hasAttribute("data-sr-added")){const o=window.getComputedStyle(t);f(t,"data-sr-added",F(o,"combobox-added")),f(t,"data-sr-empty",F(o,"combobox-empty")),f(t,"data-sr-found",F(o,"combobox-found")),f(t,"data-sr-invalid",F(o,"combobox-invalid")),f(t,"data-sr-of",F(o,"combobox-of")),f(t,"data-sr-remove",F(o,"combobox-remove")),f(t,"data-sr-removed",F(o,"combobox-removed")),f(n,"data-sr-plural",F(o,"datalist-plural")),f(n,"data-sr-singular",F(o,"datalist-singular"))}n&&e&&!n.hasAttribute("popover")&&(f(n,"popover","manual"),f(e,"popovertarget",ae(n)))}function Ri(t){const e=t?.nextElementSibling,n=e&&f(e,"data-count");if(e&&n){const o=Number(n)-t.value.length,i=o<0,s=f(e,"aria-live")==="polite",a=window.getComputedStyle(e||t),r=F(a,"count-over"),c=F(a,"count-under");if(s!==i){f(e,"aria-live",i?"polite":"off");for(const l of Ii)e.classList.toggle(l,i)}e.textContent=(i?r:c).replace("%d",`${Math.abs(o)}`)}}function Nr(t){if(t.target instanceof $i){const e=t.target,o=e.getRootNode()?.querySelector(`[popovertarget="${e.id}"]`);t.newState==="closed"?rt(e,!1):o&&rt(e,o,{placement:f(e,"data-position")??"bottom",middleware:[Ne(),De(),Ko({padding:10,apply({availableHeight:i}){e.style.width=`${o.offsetWidth}px`,e.style.maxHeight=`${Math.max(50,i)}px`}})]})}}function Hr(t){je(t.target)&&(Ri(t.target),Oi(t.target))}function Br(t){const e=t.target?.closest?.(`.${nn}`);t.type==="invalid"&&e&&t.preventDefault(),Mi(document.getElementsByClassName(nn),!0)}D(()=>{yt(document.documentElement,nn,Mi),C(document,"input",Hr,P),C(document,"invalid,submit",Br,!0),C(document,"toggle",Nr,P)});const jr=T.fieldset.split(" ")[0],Fr=T.validation.split(" ")[0],Pi="aria-describedby",Ur="aria-invalid";function qr(t){setTimeout(()=>{for(const e of t)if(e.isConnected){const n=[];let o=null,i=!0;for(const s of e.getElementsByTagName("*"))s.classList.contains(Fr)?(i=f(s,"data-color")==="success"||!s.clientHeight,o=ae(s)):je(s)&&n.push(s);for(const s of n){const a=f(s,Pi)?.replace(o||"#","");f(s,Pi,`${o||""} ${a||""}`.trim()),f(s,Ur,`${!i}`)}}})}D(()=>yt(document.documentElement,jr,qr));const Vr=T.logo.split(" ")[0];function zr([t]){if(t?.isConnected&&t?.firstElementChild instanceof SVGSVGElement){for(const r of document.head.querySelectorAll("link[rel~='icon']"))r.setAttribute("rel","disabled");const e=t.firstElementChild,n=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($("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"}))}}D(()=>yt(document.documentElement,Vr,zr));const fe=T.popover.split(" ")[0],Di="_mtds-popover-auto";function Wr({target:t,newState:e}){if(t instanceof HTMLElement&&t.classList.contains(fe)){const n=e==="closed",o=f(t,"data-overscroll")==="contain",i=Number(f(t,"data-inset"))||20,s=t.getRootNode()?.querySelector(`[popovertarget="${t.id}"]`);n?rt(t,!1):s&&rt(t,s,{placement:f(t,"data-position")||"bottom",middleware:[Ne(),De({padding:i})].concat(o?Ko({padding:i,apply({availableHeight:a}){t.style.maxHeight=`${Math.max(50,a)}px`}}):[])})}}function Gr({target:t,newState:e}){e==="open"&&t instanceof HTMLElement&&t.classList.contains(fe)&&f(t,"popover")!=="manual"&&(t.classList.add(Di),f(t,"popover","manual"))}function Yr(t){const e=t.target?.closest?.("a,button"),n=e&&f(e,"popovertarget"),o=n?document.getElementById(n):e?.closest(`.${fe}`);for(const i of document.getElementsByClassName(Di))!i.contains(t.target)&&o!==i&&i.hidePopover();if(o?.classList.contains(fe)&&e){const i=f(e,"popovertargetaction"),s=i==="show"||(i==="hide"?!1:void 0);if(e instanceof HTMLButtonElement&&!i&&o.contains(e))return;if(o instanceof HTMLElement&&o.isConnected){if(t.preventDefault(),o.hasAttribute("popover"))return o.togglePopover(s);console.error(`Element "${o.id}" is missing "popover" attribute`)}}}D(()=>{C(document,"click",Yr),C(document,"toggle",Wr,P),C(document,"beforetoggle",Gr,P)});const Kr=T.table.split(" ")[0],Xr='a,button,label,input,select,textarea,[role="button"]';function Qr(t){for(const e of t){const n=Array.from(e.tHead?.rows[0]?.cells||[],o=>o.innerText.trim());for(const o of e.tBodies)for(const i of o.rows)for(const s of i.cells)f(s,"data-th",n[s.cellIndex]||":empty")}}function Jr({target:t}){if(!(t instanceof Element))return;const n=t.closest("tr")?.querySelector('[data-command="row"]');n&&!t.closest(Xr)&&n.click?.()}D(()=>{yt(document.documentElement,Kr,Qr),C(document,"click",Jr)});const Ni=T.toast.split(" ")[0],pe="data-sort";function Zr({animationName:t,target:e}){const n=e;if(t===T._toastTimeout&&n.close(),t!==T._toastOpen)return;const o=Number(f(n,"data-timeout"));n.style.setProperty("--mtdsc-toast-timeout",o?`${o}ms`:null),n.hasAttribute(pe)||f(n,pe,`${Date.now()}`),f(n,"tabindex","0"),[...document.querySelectorAll(`.${Ni}[open]`)].sort((i,s)=>Number(f(s,pe))-Number(f(i,pe))).reduce((i,s)=>(s.style.translate=`0 ${s===e?0:i}px`,i+s.offsetHeight+5),0)}function tl({target:t,clientX:e,clientY:n}){if(t instanceof HTMLDialogElement&&t.classList.contains(Ni)&&f(t,"data-closedby")!=="none"){const o=t.getBoundingClientRect(),i=window.getComputedStyle(t),s=window.getComputedStyle(t,"::after"),a=o.top+Number.parseInt(i.paddingTop,10),r=a+Number.parseInt(s.height,10),c=o.right-Number.parseInt(i.paddingRight,10),l=c-Number.parseInt(s.width,10);a<=n&&n<=r&&l<=e&&e<=c&&t.close()}}D(()=>{C(document,"animationstart",Zr),C(document,"click",tl)});const el=`.${T.togglegroup.split(" ")[0]}`;function nl(t){const{key:e,target:n}=t,o=n instanceof HTMLInputElement&&n.closest(el);if(o&&(e==="Enter"&&n.click(),e?.startsWith("Arrow"))){t.preventDefault();const i=o.getElementsByTagName("input"),s=[...i].indexOf(n),a=e.match(/Arrow(Right|Down)/)?1:-1;i[(i.length+s+a)%i.length]?.focus()}}D(()=>C(document,"keydown",nl));const Hi="aria-describedby",Bi="Escape",me="aria-labelledby",ol="--mtds-tooltip-position",il=300,ji="mtds-tooltip",U=at?document.getElementById(ji)||$("div",{class:T._tooltip,id:ji,popover:"manual"}):null;let tt=null,Fi=Number.NEGATIVE_INFINITY,Ui=0;function on({target:t,type:e,key:n}){if(e==="keydown"&&n!==Bi)return;const o=Fi+il-Date.now();clearTimeout(Ui),Ui=setTimeout(sl,Math.max(o,0),n===Bi?null:t)}function sl(t){if(Fi=Date.now(),!U||t===U)return;U?.isConnected||document.body.append(U);let e=t?.closest?.("[data-tooltip]")||null;if(e===tt)return;const n=e&&f(e,"data-tooltip")||"",o=e&&f(e,"data-tooltip-position")||window.getComputedStyle(e||document.body).getPropertyValue(ol)?.trim()||"top";(!n||n==="false"||n==="true"||o==="none")&&(e=null),e&&(U.textContent=n);const s=tt&&f(tt,me)===U?.id,a=(e instanceof HTMLElement?e.innerText:e?.textContent)?.trim()||e?.hasAttribute(me)||e?.hasAttribute("aria-label");tt?.removeAttribute(s?me:Hi),rt(U,!1),tt=e,tt&&f(tt,a?Hi:me,U?.id),tt?.isConnected&&U.hidePopover(),U.togglePopover(!!e),rt(U,e||!1,{placement:o,middleware:[Ne(),De({padding:10})]})}D(()=>{C(document,"blur,focus,mouseout,mouseover",on,P),C(window,"keydown",on,P),C(window,"blur",on,P)});var qi=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Vi;qi&&/^Mac/i.test(((Vi=navigator.userAgentData)==null?void 0:Vi.platform)||navigator.platform);var al=":host(:not([hidden])) { display: block }",zi=typeof HTMLElement>"u"?class{}:HTMLElement;function K(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 Wi=(t,e,n)=>{for(const o of n[0].split(","))n[0]=o,Element.prototype[`${t}EventListener`].apply(e,n)},Gi=(t,...e)=>Wi("add",t,e),Yi=(t,...e)=>Wi("remove",t,e),rl=t=>{const e="key"in t&&(t.key===" "||t.key==="Enter");return e&&t.preventDefault(),e&&t.target instanceof HTMLElement&&t.target.click(),e},ll=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},sn=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))K(o,i,s);return o},Ki={define:(t,e)=>!qi||window.customElements.get(t)||window.customElements.define(t,e)},cl=`${al}
324
324
  ::slotted(u-summary) { cursor: pointer; display: block }
325
325
  ::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 }
326
326
  ::slotted(u-summary[aria-expanded="true"])::before { rotate: 90deg }
327
- :host > [part="details-content"]:not([hidden=""]) { display: block }`,ul=class extends Wi{constructor(){super(),this._content=null,this.shadowRoot||this.attachShadow({mode:"open"}).append(sn("slot",null,{name:"summary"}),sn("slot",null,{part:"details-content"}),sn("style",dl))}static get observedAttributes(){return["open"]}connectedCallback(){var t;this._content=(t=this.shadowRoot)==null?void 0:t.children[1],K(this,"role","group"),Gi(this._content,"beforematch",this),Gi(this,"click,keydown",this),this.attributeChangedCallback()}disconnectedCallback(){this._content&&Yi(this._content,"beforematch",this),Yi(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"&&K(s,"aria-expanded",`${i}`);if(this._content&&(K(this._content,"aria-hidden",`${!i}`),K(this._content,"tabindex",i?null:"-1"),this._content.hidden=i?!1:o),i&&this.name){const s=cl(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?.contains(t.target);t.defaultPrevented||(t.type==="beforematch"&&(this.open=!0),n&&t.type==="keydown"&&ll(t),n&&t.type==="click"&&(this.open=!this.open))}get open(){return this.hasAttribute("open")}set open(t){K(this,"open",t?"":null)}get name(){return K(this,"name")||""}set name(t){K(this,"name",t)}},fl=class extends Wi{connectedCallback(){K(this,"role","button"),this.slot="summary",this.tabIndex=0}};Ki.define("u-details",ul),Ki.define("u-summary",fl);var me=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Xi=me&&/firefox/i.test(navigator.userAgent),pl=me&&/iPad|iPhone|iPod/.test(navigator.userAgent),Qi;me&&/^Mac/i.test(((Qi=navigator.userAgentData)==null?void 0:Qi.platform)||navigator.platform);var ml=typeof HTMLElement>"u"?class{}:HTMLElement;function I(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 hl=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},gl=0,vl=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++gl).toString(32)}`),t.id):"",Ji=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))I(o,i,s);return o},bl={define:(t,e)=>!me||window.customElements.get(t)||window.customElements.define(t,e)},wl=t=>{var e;const n=I(t,"aria-label")||"";return[...(((e=I(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(i=>document.getElementById(i)),...Array.from(t.labels||[])].reduce((i,s)=>{var a;return i||((a=s?.innerText)==null?void 0:a.trim())||""},n)},_l=`:host(:not([hidden])) { box-sizing: border-box; border: 1px solid; display: inline-block; height: .5em; width: 10em; overflow: hidden }
327
+ :host > [part="details-content"]:not([hidden=""]) { display: block }`,dl=class extends zi{constructor(){super(),this._content=null,this.shadowRoot||this.attachShadow({mode:"open"}).append(sn("slot",null,{name:"summary"}),sn("slot",null,{part:"details-content"}),sn("style",cl))}static get observedAttributes(){return["open"]}connectedCallback(){var t;this._content=(t=this.shadowRoot)==null?void 0:t.children[1],K(this,"role","group"),Gi(this._content,"beforematch",this),Gi(this,"click,keydown",this),this.attributeChangedCallback()}disconnectedCallback(){this._content&&Yi(this._content,"beforematch",this),Yi(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"&&K(s,"aria-expanded",`${i}`);if(this._content&&(K(this._content,"aria-hidden",`${!i}`),K(this._content,"tabindex",i?null:"-1"),this._content.hidden=i?!1:o),i&&this.name){const s=ll(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?.contains(t.target);t.defaultPrevented||(t.type==="beforematch"&&(this.open=!0),n&&t.type==="keydown"&&rl(t),n&&t.type==="click"&&(this.open=!this.open))}get open(){return this.hasAttribute("open")}set open(t){K(this,"open",t?"":null)}get name(){return K(this,"name")||""}set name(t){K(this,"name",t)}},ul=class extends zi{connectedCallback(){K(this,"role","button"),this.slot="summary",this.tabIndex=0}};Ki.define("u-details",dl),Ki.define("u-summary",ul);var he=typeof window<"u"&&typeof window.document<"u"&&typeof window.navigator<"u",Xi=he&&/firefox/i.test(navigator.userAgent),fl=he&&/iPad|iPhone|iPod/.test(navigator.userAgent),Qi;he&&/^Mac/i.test(((Qi=navigator.userAgentData)==null?void 0:Qi.platform)||navigator.platform);var pl=typeof HTMLElement>"u"?class{}:HTMLElement;function I(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 ml=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},hl=0,gl=t=>t?(t.id||(t.id=`:${t.nodeName.toLowerCase()}${(++hl).toString(32)}`),t.id):"",Ji=(t,e,n)=>{const o=document.createElement(t);if(e&&(o.textContent=e),n)for(const[i,s]of Object.entries(n))I(o,i,s);return o},bl={define:(t,e)=>!he||window.customElements.get(t)||window.customElements.define(t,e)},vl=t=>{var e;const n=I(t,"aria-label")||"";return[...(((e=I(t,"aria-labelledby"))==null?void 0:e.trim().split(/\s+/))||[]).map(i=>document.getElementById(i)),...Array.from(t.labels||[])].reduce((i,s)=>{var a;return i||((a=s?.innerText)==null?void 0:a.trim())||""},n)},_l=`:host(:not([hidden])) { box-sizing: border-box; border: 1px solid; display: inline-block; height: .5em; width: 10em; overflow: hidden }
328
328
  :host::before { content: ''; display: block; height: 100%; background: currentColor; width: var(--percentage, 0%); transition: width .2s }
329
329
  :host(:not([value])) { background: linear-gradient(90deg,currentColor 25%, transparent 50%, currentColor 75%) 50%/400% }
330
330
  @media (prefers-reduced-motion: no-preference) { :host { animation: indeterminate 2s linear infinite } }
331
- @keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`,an=!1,Zi=class extends ml{static get observedAttributes(){return["aria-label","aria-labelledby","value","max"]}constructor(){super(),this.shadowRoot||this.attachShadow({mode:"open"}).append(Ji("slot",null,{hidden:""}),Ji("style",_l))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(an)return;an=!0;const t=pl||Xi,e=Math.max(0,Math.round(this.position*100));this.style.setProperty("--percentage",`${e}%`);let n=wl(this);if(t&&(n=`${n.replace(/\d+%$/,"")} ${e}%`),Xi)for(const o of this.labels)I(o,"aria-label",n);I(this,"aria-busy",`${this.position===-1}`),I(this,"aria-label",n.trim()),I(this,"aria-labelledby",null),I(this,"aria-valuemax","100"),I(this,"aria-valuemin","0"),I(this,"aria-valuenow",`${e}`),I(this,"role",t?"img":"progressbar"),an=!1}get labels(){const t=this.closest("label:not([for])"),e=vl(this);return t&&(t.htmlFor=e),hl(this).querySelectorAll(`label[for="${e}"]`)}get position(){return this.value===null?-1:Math.min(this.value/this.max,1)}get value(){return es(this,"value")}set value(t){ns(this,"value",t)}get max(){return es(this,"max")||1}set max(t){ns(this,"max",t)}};Zi.formAssociated=!0;var ts=t=>!Number.isNaN(Number.parseFloat(`${t}`))&&Number.isFinite(Number(t)),es=(t,e)=>{const n=I(t,e);return ts(n)?Math.max(0,Number.parseFloat(n)):null},ns=(t,e,n)=>{if(n===null||ts(n))I(t,e,`${n}`);else throw new Error(`Failed to set non-numeric '${I}': '${n}'`)};return bl.define("u-progress",Zi),M.UHTMLComboboxElement=we,M.UHTMLTabElement=kn,M.UHTMLTabListElement=$n,M.UHTMLTabPanelElement=An,M.UHTMLTabsElement=Cn,M.analytics=ni,M.pagination=Qa,M.styles=Bs,M.toast=k,M.toggleAppExpanded=ai,M.version=Hs,Object.defineProperty(M,Symbol.toStringTag,{value:"Module"}),M}({});
332
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguaWlmZS5qcyIsInNvdXJjZXMiOlsiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtY29tYm9ib3gvZGlzdC91LWNvbWJvYm94LmpzIiwiLi4vbm9kZV9tb2R1bGVzL0B1LWVsZW1lbnRzL3UtdGFicy9kaXN0L3UtdGFicy5qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5tanMiLCIuLi9ub2RlX21vZHVsZXMvQGZsb2F0aW5nLXVpL2NvcmUvZGlzdC9mbG9hdGluZy11aS5jb3JlLm1qcyIsIi4uL25vZGVfbW9kdWxlcy9AZmxvYXRpbmctdWkvdXRpbHMvZGlzdC9mbG9hdGluZy11aS51dGlscy5kb20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL0BmbG9hdGluZy11aS9kb20vZGlzdC9mbG9hdGluZy11aS5kb20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL2Nsc3gvZGlzdC9jbHN4Lm1qcyIsIi4uL2Rlc2lnbnN5c3RlbS91dGlscy50cyIsIi4uL2Rlc2lnbnN5c3RlbS9hbmFseXRpY3MvYW5hbHl0aWNzLnRzIiwiLi4vZGVzaWduc3lzdGVtL2FwcC9hcHAtdG9nZ2xlLmpzIiwiLi4vZGVzaWduc3lzdGVtL2FwcC9hcHAtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vcGFnaW5hdGlvbi9wYWdpbmF0aW9uLWhlbHBlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS90b2FzdC90b2FzdC1oZWxwZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vYnJlYWRjcnVtYnMvYnJlYWRjcnVtYnMtb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vY2hhcnQvY2hhcnQuY3NzP3JhdyIsIi4uL2Rlc2lnbnN5c3RlbS9jaGFydC9jaGFydC1heGlzLnRzIiwiLi4vZGVzaWduc3lzdGVtL2NoYXJ0L2NoYXJ0LWJhcnMudHMiLCIuLi9kZXNpZ25zeXN0ZW0vY2hhcnQvY2hhcnQtbGluZXMudHMiLCIuLi9kZXNpZ25zeXN0ZW0vY2hhcnQvY2hhcnQtcGllcy50cyIsIi4uL2Rlc2lnbnN5c3RlbS9jaGFydC9jaGFydC1lbGVtZW50LnRzIiwiLi4vZGVzaWduc3lzdGVtL2RpYWxvZy9kaWFsb2ctb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vZXJyb3JzdW1tYXJ5L2Vycm9yc3VtbWFyeS1vYnNlcnZlci50cyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWRhdGFsaXN0L2Rpc3QvdS1kYXRhbGlzdC5qcyIsIi4uL2Rlc2lnbnN5c3RlbS9maWVsZC9maWVsZC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9maWVsZHNldC9maWVsZHNldC1vYnNlcnZlci50cyIsIi4uL2Rlc2lnbnN5c3RlbS9sb2dvL2xvZ28tb2JzZXJ2ZXIudHMiLCIuLi9kZXNpZ25zeXN0ZW0vcG9wb3Zlci9wb3BvdmVyLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RhYmxlL3RhYmxlLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RvYXN0L3RvYXN0LW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3RvZ2dsZWdyb3VwL3RvZ2dsZWdyb3VwLW9ic2VydmVyLnRzIiwiLi4vZGVzaWduc3lzdGVtL3Rvb2x0aXAvdG9vbHRpcC1vYnNlcnZlci50cyIsIi4uL25vZGVfbW9kdWxlcy9AdS1lbGVtZW50cy91LWRldGFpbHMvZGlzdC91LWRldGFpbHMuanMiLCIuLi9ub2RlX21vZHVsZXMvQHUtZWxlbWVudHMvdS1wcm9ncmVzcy9kaXN0L3UtcHJvZ3Jlc3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsidmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbnZhciBfX2dldE93blByb3BTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBfX2hhc093blByb3AgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O1xudmFyIF9fcHJvcElzRW51bSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG52YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5LCB2YWx1ZSkgPT4ga2V5IGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZSB9KSA6IG9ialtrZXldID0gdmFsdWU7XG52YXIgX19zcHJlYWRWYWx1ZXMgPSAoYSwgYikgPT4ge1xuICBmb3IgKHZhciBwcm9wIGluIGIgfHwgKGIgPSB7fSkpXG4gICAgaWYgKF9faGFzT3duUHJvcC5jYWxsKGIsIHByb3ApKVxuICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICBpZiAoX19nZXRPd25Qcm9wU3ltYm9scylcbiAgICBmb3IgKHZhciBwcm9wIG9mIF9fZ2V0T3duUHJvcFN5bWJvbHMoYikpIHtcbiAgICAgIGlmIChfX3Byb3BJc0VudW0uY2FsbChiLCBwcm9wKSlcbiAgICAgICAgX19kZWZOb3JtYWxQcm9wKGEsIHByb3AsIGJbcHJvcF0pO1xuICAgIH1cbiAgcmV0dXJuIGE7XG59O1xuXG4vLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgSVNfQU5EUk9JRCA9IElTX0JST1dTRVIgJiYgL2FuZHJvaWQvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIElTX0ZJUkVGT1ggPSBJU19CUk9XU0VSICYmIC9maXJlZm94L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBGT0NVU19PVVRMSU5FID0gXCJvdXRsaW5lOiAxcHggZG90dGVkOyBvdXRsaW5lOiA1cHggYXV0byBIaWdobGlnaHQ7IG91dGxpbmU6IDVweCBhdXRvIC13ZWJraXQtZm9jdXMtcmluZy1jb2xvclwiO1xudmFyIFVIVE1MRWxlbWVudCA9IHR5cGVvZiBIVE1MRWxlbWVudCA9PT0gXCJ1bmRlZmluZWRcIiA/IGNsYXNzIHtcbn0gOiBIVE1MRWxlbWVudDtcbmZ1bmN0aW9uIGF0dHIoZWwsIG5hbWUsIHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdm9pZCAwKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpO1xuICBpZiAodmFsdWUgPT09IG51bGwpIGVsLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTtcbiAgZWxzZSBpZiAoZWwuZ2V0QXR0cmlidXRlKG5hbWUpICE9PSB2YWx1ZSkgZWwuc2V0QXR0cmlidXRlKG5hbWUsIHZhbHVlKTtcbiAgcmV0dXJuIG51bGw7XG59XG52YXIgZXZlbnRzID0gKGFjdGlvbiwgZWxlbWVudCwgcmVzdCkgPT4ge1xuICBmb3IgKGNvbnN0IHR5cGUgb2YgcmVzdFswXS5zcGxpdChcIixcIikpIHtcbiAgICByZXN0WzBdID0gdHlwZTtcbiAgICBFbGVtZW50LnByb3RvdHlwZVtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdLmFwcGx5KGVsZW1lbnQsIHJlc3QpO1xuICB9XG59O1xudmFyIG9uID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcImFkZFwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBvZmYgPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwicmVtb3ZlXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9ic2VydmVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpO1xudmFyIG11dGF0aW9uT2JzZXJ2ZXIgPSAoZWxlbWVudCwgb3B0aW9ucykgPT4ge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSByZXR1cm4gb2JzZXJ2ZXJzLmdldChlbGVtZW50KTtcbiAgdHJ5IHtcbiAgICBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpLmRpc2Nvbm5lY3QoKTtcbiAgICBvYnNlcnZlcnMuZGVsZXRlKGVsZW1lbnQpO1xuICB9IGNhdGNoIChfZXJyKSB7XG4gIH1cbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuICAgICAgKGRldGFpbCkgPT4gZWxlbWVudC5oYW5kbGVFdmVudCh7IHR5cGU6IFwibXV0YXRpb25cIiwgZGV0YWlsIH0pXG4gICAgKTtcbiAgICBvYnNlcnZlci5vYnNlcnZlKGVsZW1lbnQsIG9wdGlvbnMpO1xuICAgIG9ic2VydmVycy5zZXQoZWxlbWVudCwgb2JzZXJ2ZXIpO1xuICB9XG59O1xudmFyIGFzQnV0dG9uID0gKGV2ZW50KSA9PiB7XG4gIGNvbnN0IGlzQ2xpY2sgPSBcImtleVwiIGluIGV2ZW50ICYmIChldmVudC5rZXkgPT09IFwiIFwiIHx8IGV2ZW50LmtleSA9PT0gXCJFbnRlclwiKTtcbiAgaWYgKGlzQ2xpY2spIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gIGlmIChpc0NsaWNrICYmIGV2ZW50LnRhcmdldCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50KSBldmVudC50YXJnZXQuY2xpY2soKTtcbiAgcmV0dXJuIGlzQ2xpY2s7XG59O1xudmFyIGdldFJvb3QgPSAobm9kZSkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCByb290ID0gKChfYTIgPSBub2RlLmdldFJvb3ROb2RlKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmNhbGwobm9kZSkpIHx8IG5vZGUub3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBEb2N1bWVudCB8fCByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBkb2N1bWVudDtcbn07XG52YXIgaWQgPSAwO1xudmFyIHVzZUlkID0gKGVsKSA9PiB7XG4gIGlmICghZWwpIHJldHVybiBcIlwiO1xuICBpZiAoIWVsLmlkKSBlbC5pZCA9IGA6JHtlbC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpfSR7KCsraWQpLnRvU3RyaW5nKDMyKX1gO1xuICByZXR1cm4gZWwuaWQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dDIsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQyKSBlbC50ZXh0Q29udGVudCA9IHRleHQyO1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZ2V0TGFiZWwgPSAoZWwpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgbGFiZWwgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxcIikgfHwgXCJcIjtcbiAgY29uc3QgbGFiZWxzID0gKChfYTIgPSBhdHRyKGVsLCBcImFyaWEtbGFiZWxsZWRieVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkuc3BsaXQoL1xccysvKSkgfHwgW107XG4gIHJldHVybiBbXG4gICAgLi4ubGFiZWxzLm1hcCgoaWQyKSA9PiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZDIpKSxcbiAgICAvLyBHZXQgYWxsIGxhYmVsbGVkYnkgZWxlbWVudHNcbiAgICAuLi5BcnJheS5mcm9tKGVsLmxhYmVscyB8fCBbXSlcbiAgICAvLyBHZXQgYWxsIDxsYWJlbD4gZWxlbWVudHNcbiAgXS5yZWR1Y2UoKGFjYywgZWwyKSA9PiB7XG4gICAgdmFyIF9hMztcbiAgICByZXR1cm4gYWNjIHx8ICgoX2EzID0gZWwyID09IG51bGwgPyB2b2lkIDAgOiBlbDIuaW5uZXJUZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX2EzLnRyaW0oKSkgfHwgXCJcIjtcbiAgfSwgbGFiZWwpO1xufTtcbnZhciBMSVZFO1xudmFyIExJVkVfU1JfRklYID0gMDtcbnZhciBzcGVhayA9ICh0ZXh0MikgPT4ge1xuICBpZiAoIUxJVkUpIHtcbiAgICBMSVZFID0gY3JlYXRlRWxlbWVudChcImRpdlwiKTtcbiAgICBMSVZFLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmZpeGVkO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxcHg7d2hpdGUtc3BhY2U6bm93cmFwXCI7XG4gICAgYXR0cihMSVZFLCBcImFyaWEtbGl2ZVwiLCBcImFzc2VydGl2ZVwiKTtcbiAgfVxuICBpZiAoIUxJVkUuaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKExJVkUpO1xuICBpZiAodGV4dDIpIExJVkUudGV4dENvbnRlbnQgPSBgJHt0ZXh0Mn0ke0xJVkVfU1JfRklYKysgJSAyID8gXCJcXHhBMFwiIDogXCJcIn1gO1xufTtcbnZhciBzZXRWYWx1ZSA9IChpbnB1dCwgZGF0YSwgdHlwZSA9IFwiXCIpID0+IHtcbiAgdmFyIF9hMiwgX2I7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjb21wb3NlZDogdHJ1ZSwgZGF0YSwgaW5wdXRUeXBlOiB0eXBlIH07XG4gIGNvbnN0IHByb3RvID0gSFRNTElucHV0RWxlbWVudC5wcm90b3R5cGU7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IElucHV0RXZlbnQoXCJiZWZvcmVpbnB1dFwiLCBldmVudCkpO1xuICAoX2IgPSAoX2EyID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywgXCJ2YWx1ZVwiKSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5zZXQpID09IG51bGwgPyB2b2lkIDAgOiBfYi5jYWxsKGlucHV0LCBkYXRhKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImlucHV0XCIsIGV2ZW50KSk7XG4gIGlucHV0LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFwiY2hhbmdlXCIsIHsgYnViYmxlczogdHJ1ZSB9KSk7XG59O1xudmFyIElTX1BSRVNTID0gZmFsc2U7XG52YXIgaXNNb3VzZURvd24gPSAoZXZlbnQpID0+IHtcbiAgaWYgKChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQudHlwZSkgPT09IFwibW91c2V1cFwiKSBJU19QUkVTUyA9IGZhbHNlO1xuICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtb3VzZWRvd25cIikge1xuICAgIElTX1BSRVNTID0gdHJ1ZTtcbiAgICBvbihkb2N1bWVudCwgXCJtb3VzZXVwXCIsIGlzTW91c2VEb3duLCB7IG9uY2U6IHRydWUgfSk7XG4gIH1cbiAgcmV0dXJuIElTX1BSRVNTO1xufTtcbnZhciBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QgPSAoc3R5bGUsIHNsb3QgPSBcIjxzbG90Pjwvc2xvdD5cIikgPT4gYDx0ZW1wbGF0ZSBzaGFkb3dyb290bW9kZT1cIm9wZW5cIj4ke3Nsb3R9PHN0eWxlPiR7c3R5bGV9PC9zdHlsZT48L3RlbXBsYXRlPmA7XG5cbi8vIHUtY29tYm9ib3gudHNcbnZhciBVSFRNTENvbWJvYm94U3R5bGUgPSBgOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2s7IC13ZWJraXQtdGFwLWhpZ2hsaWdodC1jb2xvcjogcmdiYSgwLCAwLCAwLCAwKSB9IC8qIE11c3QgYmUgZGlzcGxheSBibG9jayBpbiBTYWZhcmkgdG8gYWxsb3cgZm9jdXMgaW5zaWRlICovXG46aG9zdCg6bm90KFtkYXRhLW11bHRpcGxlXSkpIDo6c2xvdHRlZChkYXRhKSxcbjpob3N0KFtkYXRhLW11bHRpcGxlPVwiZmFsc2VcIl0pIDo6c2xvdHRlZChkYXRhKSB7IGRpc3BsYXk6IG5vbmUgfSAvKiBIaWRlIGRhdGEgaWYgbm90IG11bHRpcGxlICovXG46OnNsb3R0ZWQoaW5wdXRbaW5wdXRtb2RlPVwibm9uZVwiXSkgeyBvdXRsaW5lOiBub25lIH0gLyogSGlkZSB0ZW1wb3JhcnkgZm91Y3Mgb3V0bGluZSBmbGFzaCAqL1xuOjpzbG90dGVkKGRlbCkgeyB0ZXh0LWRlY29yYXRpb246IG5vbmUgfVxuOjpzbG90dGVkKGRhdGE6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHBvaW50ZXItZXZlbnRzOiBub25lIH1cbjo6c2xvdHRlZChkYXRhKTo6YWZ0ZXIgeyBjb250ZW50OiAnXFxcXDAwRDcnOyBjb250ZW50OiAnXFxcXDAwRDcnIC8gJyc7IHBhZGRpbmctaW5saW5lOiAuNWNoOyBwb2ludGVyLWV2ZW50czogYXV0bzsgY3Vyc29yOiBwb2ludGVyIH1cbjo6c2xvdHRlZChkYXRhOmZvY3VzKSB7ICR7Rk9DVVNfT1VUTElORX0gfWA7XG52YXIgVUhUTUxDb21ib2JveFNoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoVUhUTUxDb21ib2JveFN0eWxlKTtcbnZhciBFVkVOVFMgPSBcImJlZm9yZWlucHV0LGJsdXIsZm9jdXMsY2xpY2ssaW5wdXQsa2V5ZG93bixtb3VzZWRvd25cIjtcbnZhciBFVkVOVF9PTkNFID0geyBvbmNlOiB0cnVlLCBwYXNzaXZlOiB0cnVlIH07XG52YXIgSVNfRklSRUZPWF9ERVNLVE9QID0gSVNfRklSRUZPWCAmJiAhSVNfQU5EUk9JRDtcbnZhciBJU19NT0JJTEUgPSBJU19BTkRST0lEIHx8IElTX0lPUztcbnZhciBNT0RJRklFRCA9IFwiXFx1MjAwQlwiLnJlcGVhdCg1KTtcbnZhciBGQUxTRSA9IFwiZmFsc2VcIjtcbnZhciBURVhUUyA9IHtcbiAgYWRkZWQ6IFwiQWRkZWRcIixcbiAgZW1wdHk6IFwiTm8gc2VsZWN0ZWRcIixcbiAgZm91bmQ6IFwiTmF2aWdhdGUgbGVmdCB0byBmaW5kICVkIHNlbGVjdGVkXCIsXG4gIGludmFsaWQ6IFwiSW52YWxpZCB2YWx1ZVwiLFxuICBvZjogXCJvZlwiLFxuICByZW1vdmU6IFwiUHJlc3MgdG8gcmVtb3ZlXCIsXG4gIHJlbW92ZWQ6IFwiUmVtb3ZlZFwiXG59O1xudmFyIFVIVE1MQ29tYm9ib3hFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuX2l0ZW0gPSBcIlwiO1xuICAgIHRoaXMuX3NwZWFrID0gXCJcIjtcbiAgICB0aGlzLl90ZXh0cyA9IF9fc3ByZWFkVmFsdWVzKHt9LCBURVhUUyk7XG4gICAgdGhpcy5fdmFsdWUgPSBcIlwiO1xuICAgIGlmICghdGhpcy5zaGFkb3dSb290KVxuICAgICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAgICAgICAvLyBDb250ZW50IHNsb3RcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIFVIVE1MQ29tYm9ib3hTdHlsZSlcbiAgICAgICk7XG4gIH1cbiAgLy8gTG9jYWxseSBzdG9yZSB2YWx1ZSB0byBzdG9yZSB2YWx1ZSBiZWZvcmUgaW5wdXQtY2xpY2tcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKFRFWFRTKS5tYXAoKGtleSkgPT4gYGRhdGEtc3ItJHtrZXl9YCk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5fcm9vdCA9IGdldFJvb3QodGhpcyk7XG4gICAgb24odGhpcywgRVZFTlRTLCB0aGlzLCB0cnVlKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHtcbiAgICAgIGF0dHJpYnV0ZUZpbHRlcjogW1widmFsdWVcIiwgXCJpZFwiXSxcbiAgICAgIC8vIFJlc3BvbmQgdG8gY2hhbmdlcyBpbiA8ZGF0YT4gdmFsdWUgb3IgY2hhbmdlIG9mIGlkIGZvciA8ZGF0YWxpc3Q+IHRvIHJlY29ubmVjdCB3aXRoIGlucHV0XG4gICAgICBhdHRyaWJ1dGVzOiB0cnVlLFxuICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSxcbiAgICAgIC8vIFJlc3BvbmQgdG8gY2hhbmdlcyBpbiA8ZGF0YT4gdGV4dENvbnRlbnRcbiAgICAgIGNoaWxkTGlzdDogdHJ1ZSxcbiAgICAgIHN1YnRyZWU6IHRydWVcbiAgICB9KTtcbiAgICBzZXRUaW1lb3V0KHJlbmRlciwgMCwgdGhpcyk7XG4gICAgc2V0VGltZW91dChzeW5jSW5wdXRWYWx1ZSwgMCwgdGhpcyk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIF8sIHZhbCkge1xuICAgIGNvbnN0IHRleHQyID0gcHJvcC5zcGxpdChcImRhdGEtc3ItXCIpWzFdO1xuICAgIGlmIChURVhUU1t0ZXh0Ml0pIHRoaXMuX3RleHRzW3RleHQyXSA9IHZhbCB8fCBURVhUU1t0ZXh0Ml07XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gICAgb2ZmKHRoaXMsIEVWRU5UUywgdGhpcywgdHJ1ZSk7XG4gICAgdGhpcy5faXRlbXMgPSB0aGlzLl9jbGVhciA9IHRoaXMuX2ZvY3VzID0gdGhpcy5fY29udHJvbCA9IHZvaWQgMDtcbiAgICB0aGlzLl9saXN0ID0gdGhpcy5fb3B0aW9ucyA9IHRoaXMuX3Jvb3QgPSB2b2lkIDA7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHJldHVybjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJiZWZvcmVpbnB1dFwiKSB0aGlzLl92YWx1ZSA9ICh0YXJnZXQgPT0gbnVsbCA/IHZvaWQgMCA6IHRhcmdldC52YWx1ZSkgfHwgXCJcIjtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJibHVyXCIpIG9uQmx1cih0aGlzKTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSBvbkNsaWNrKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJmb2N1c1wiKSBvbkZvY3VzKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJpbnB1dFwiKSBvbklucHV0KHRoaXMsIGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJrZXlkb3duXCIpIG9uS2V5RG93bih0aGlzLCBldmVudCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09IFwibW91c2Vkb3duXCIpIGlzTW91c2VEb3duKGV2ZW50KTtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJtdXRhdGlvblwiKSByZW5kZXIodGhpcywgZXZlbnQpO1xuICB9XG4gIGdldCBtdWx0aXBsZSgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoKF9hMiA9IGF0dHIodGhpcywgXCJkYXRhLW11bHRpcGxlXCIpKSAhPSBudWxsID8gX2EyIDogRkFMU0UpICE9PSBGQUxTRTtcbiAgfVxuICBzZXQgbXVsdGlwbGUodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwiZGF0YS1tdWx0aXBsZVwiLCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBnZXQgY3JlYXRhYmxlKCkge1xuICAgIHZhciBfYTI7XG4gICAgcmV0dXJuICgoX2EyID0gYXR0cih0aGlzLCBcImRhdGEtY3JlYXRhYmxlXCIpKSAhPSBudWxsID8gX2EyIDogRkFMU0UpICE9PSBGQUxTRTtcbiAgfVxuICBzZXQgY3JlYXRhYmxlKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBcImRhdGEtY3JlYXRhYmxlXCIsIHZhbHVlID8gXCJcIiA6IG51bGwpO1xuICB9XG4gIGdldCBjb250cm9sKCkge1xuICAgIHZhciBfYTI7XG4gICAgaWYgKCEoKF9hMiA9IHRoaXMuX2NvbnRyb2wpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuaXNDb25uZWN0ZWQpKVxuICAgICAgdGhpcy5fY29udHJvbCA9IHRoaXMucXVlcnlTZWxlY3RvcihcImlucHV0XCIpO1xuICAgIHJldHVybiB0aGlzLl9jb250cm9sO1xuICB9XG4gIGdldCBsaXN0KCkge1xuICAgIHZhciBfYTI7XG4gICAgaWYgKCEoKF9hMiA9IHRoaXMuX2xpc3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuaXNDb25uZWN0ZWQpKVxuICAgICAgdGhpcy5fbGlzdCA9IHRoaXMucXVlcnlTZWxlY3RvcihcInUtZGF0YWxpc3QsZGF0YWxpc3RcIik7XG4gICAgcmV0dXJuIHRoaXMuX2xpc3Q7XG4gIH1cbiAgZ2V0IGNsZWFyKCkge1xuICAgIHZhciBfYTI7XG4gICAgaWYgKCEoKF9hMiA9IHRoaXMuX2NsZWFyKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmlzQ29ubmVjdGVkKSkgdGhpcy5fY2xlYXIgPSB0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJkZWxcIik7XG4gICAgcmV0dXJuIHRoaXMuX2NsZWFyO1xuICB9XG4gIGdldCBpdGVtcygpIHtcbiAgICBpZiAoIXRoaXMuX2l0ZW1zKSB0aGlzLl9pdGVtcyA9IHRoaXMuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJkYXRhXCIpO1xuICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgfVxuICBnZXQgb3B0aW9ucygpIHtcbiAgICB2YXIgX2EyLCBfYjtcbiAgICBpZiAoIXRoaXMuX29wdGlvbnMpIHtcbiAgICAgIGNvbnN0IHRhZyA9ICgoX2EyID0gdGhpcy5saXN0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLm5vZGVOYW1lKSA9PT0gXCJVLURBVEFMSVNUXCIgPyBcInUtb3B0aW9uXCIgOiBcIm9wdGlvblwiO1xuICAgICAgdGhpcy5fb3B0aW9ucyA9IChfYiA9IHRoaXMubGlzdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG4gIGdldCB2YWx1ZXMoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLml0ZW1zXS5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpO1xuICB9XG59O1xudmFyIHRleHQgPSAoZWwpID0+IHtcbiAgdmFyIF9hMjtcbiAgcmV0dXJuICgoX2EyID0gZWwgPT0gbnVsbCA/IHZvaWQgMCA6IGVsLnRleHRDb250ZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKSkgfHwgXCJcIjtcbn07XG52YXIgaXNEYXRhID0gKGVsKSA9PiBlbCBpbnN0YW5jZW9mIEhUTUxEYXRhRWxlbWVudDtcbnZhciBpc0Rpc2FibGVkID0gKHsgY29udHJvbCB9KSA9PiAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5kaXNhYmxlZCkgfHwgKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wucmVhZE9ubHkpIHx8IGZhbHNlO1xudmFyIHJlbmRlciA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCB7IF9mb2N1cywgX3RleHRzLCBpdGVtcywgY29udHJvbCwgbGlzdCwgbXVsdGlwbGUgfSA9IHNlbGY7XG4gIGlmICghY29udHJvbCB8fCAhbGlzdCkgcmV0dXJuO1xuICBjb25zdCBwcmV2ID0gZ2V0TGFiZWwoY29udHJvbCk7XG4gIGNvbnN0IG5leHQgPSBwcmV2LmVuZHNXaXRoKE1PRElGSUVEKSA/IGF0dHIoY29udHJvbCwgXCJkYXRhLWxhYmVsXCIpIDogcHJldjtcbiAgYXR0cihjb250cm9sLCBcImRhdGEtbGFiZWxcIiwgbmV4dCk7XG4gIGxldCBsYWJlbCA9IGAke25leHR9JHttdWx0aXBsZSA/IGAsICR7aXRlbXMubGVuZ3RoID8gX3RleHRzLmZvdW5kLnJlcGxhY2UoXCIlZFwiLCBgJHtpdGVtcy5sZW5ndGh9YCkgOiBfdGV4dHMuZW1wdHl9YCA6IFwiXCJ9YDtcbiAgY29uc3QgZWRpdHMgPSBbXTtcbiAgZm9yIChjb25zdCB7IGFkZGVkTm9kZXMsIHJlbW92ZWROb2RlcyB9IG9mIChldmVudCA9PSBudWxsID8gdm9pZCAwIDogZXZlbnQuZGV0YWlsKSB8fCBbXSkge1xuICAgIGZvciAoY29uc3QgZWwgb2YgYWRkZWROb2RlcykgaWYgKGlzRGF0YShlbCkpIGVkaXRzLnVuc2hpZnQoZWwpO1xuICAgIGZvciAoY29uc3QgZWwgb2YgcmVtb3ZlZE5vZGVzKSBpZiAoaXNEYXRhKGVsKSkgZWRpdHMucHVzaChlbCk7XG4gIH1cbiAgY29uc3Qgc2hvdWxkQW5ub3VuY2UgPSBtdWx0aXBsZSA/IGVkaXRzLmxlbmd0aCA9PT0gMSA6IGVkaXRzWzBdID09PSBfZm9jdXM7XG4gIGlmIChfZm9jdXMgJiYgc2hvdWxkQW5ub3VuY2UpIHtcbiAgICBjb25zdCBhcmlhRXhwYW5kZWQgPSBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiKTtcbiAgICBjb25zdCBpbnB1dE1vZGUgPSBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIpO1xuICAgIGNvbnN0IG5leHRGb2N1cyA9IGlzRGF0YShfZm9jdXMpID8gY29udHJvbCA6IF9mb2N1cztcbiAgICBjb25zdCBpc1JlbW92ZSA9ICFlZGl0c1swXS5pc0Nvbm5lY3RlZDtcbiAgICBzZWxmLl9zcGVhayA9IGAke190ZXh0c1tpc1JlbW92ZSA/IFwicmVtb3ZlZFwiIDogXCJhZGRlZFwiXX0gJHt0ZXh0KGVkaXRzWzBdKX0sIGA7XG4gICAgaWYgKElTX01PQklMRSB8fCBfZm9jdXMgPT09IGNvbnRyb2wpIHNwZWFrKHNlbGYuX3NwZWFrKTtcbiAgICBpZiAoY29udHJvbCAhPT0gbmV4dEZvY3VzKSB7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiYXJpYS1leHBhbmRlZFwiLCBudWxsKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgXCJub25lXCIpO1xuICAgICAgbGFiZWwgPSBcIlxceEEwXCI7XG4gICAgICBjb250cm9sLmZvY3VzKCk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdmFyIF9hMztcbiAgICAgIGF0dHIoY29udHJvbCwgXCJhcmlhLWV4cGFuZGVkXCIsIGFyaWFFeHBhbmRlZCk7XG4gICAgICBhdHRyKGNvbnRyb2wsIFwiaW5wdXRtb2RlXCIsIGlzUmVtb3ZlID8gXCJub25lXCIgOiBpbnB1dE1vZGUpO1xuICAgICAgKF9hMyA9IG5leHRGb2N1cyA9PSBudWxsID8gdm9pZCAwIDogbmV4dEZvY3VzLmZvY3VzKSA9PSBudWxsID8gdm9pZCAwIDogX2EzLmNhbGwobmV4dEZvY3VzKTtcbiAgICAgIGF0dHIoY29udHJvbCwgXCJpbnB1dG1vZGVcIiwgaW5wdXRNb2RlKTtcbiAgICAgIHNlbGYuX3NwZWFrID0gXCJcIjtcbiAgICAgIGlmIChJU19GSVJFRk9YX0RFU0tUT1ApIG9uKHNlbGYsIFwiYmx1clwiLCAoKSA9PiByZW5kZXIoc2VsZiksIEVWRU5UX09OQ0UpO1xuICAgICAgZWxzZSBzZXRUaW1lb3V0KHJlbmRlciwgMTAwLCBzZWxmKTtcbiAgICB9LCAxMDApO1xuICB9XG4gIGxldCBpZHggPSAwO1xuICBjb25zdCBzZWxlY3QgPSBzZWxmLnF1ZXJ5U2VsZWN0b3IoXCJzZWxlY3RcIik7XG4gIGNvbnN0IHJlbW92ZSA9IGlzRGlzYWJsZWQoc2VsZikgPyBcIlwiIDogYCR7X3RleHRzLnJlbW92ZX0sIGA7XG4gIGZvciAoY29uc3QgaXRlbTIgb2YgaXRlbXMpIHtcbiAgICBjb25zdCBvcHRpb24gPSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zW2lkeF07XG4gICAgY29uc3QgbGFiZWwyID0gdGV4dChpdGVtMik7XG4gICAgY29uc3QgdmFsdWUgPSBpdGVtMi52YWx1ZSB8fCBsYWJlbDI7XG4gICAgY29uc3QgYXJpYSA9IGAke3NlbGYuX3NwZWFrfSR7bGFiZWwyfSwgJHtyZW1vdmV9JHsrK2lkeH0gJHtfdGV4dHMub2Z9ICR7aXRlbXMubGVuZ3RofWA7XG4gICAgYXR0cihpdGVtMiwgXCJyb2xlXCIsIFwiYnV0dG9uXCIpO1xuICAgIGF0dHIoaXRlbTIsIFwidmFsdWVcIiwgdmFsdWUpO1xuICAgIGF0dHIoaXRlbTIsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcbiAgICBhdHRyKGl0ZW0yLCBcImFyaWEtbGFiZWxcIiwgYXJpYSk7XG4gICAgaWYgKG9wdGlvbikgT2JqZWN0LmFzc2lnbihvcHRpb24sIHsgdGV4dENvbnRlbnQ6IGxhYmVsMiwgdmFsdWUgfSk7XG4gICAgZWxzZSBzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5hcHBlbmRDaGlsZChuZXcgT3B0aW9uKGxhYmVsMiwgdmFsdWUsIHRydWUsIHRydWUpKTtcbiAgfVxuICBpZiAoc2VsZWN0KSBhdHRyKHNlbGVjdCwgXCJtdWx0aXBsZVwiLCBtdWx0aXBsZSA/IFwiXCIgOiBudWxsKTtcbiAgZm9yIChjb25zdCBvcHQgb2YgWy4uLihzZWxlY3QgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGVjdC5vcHRpb25zKSB8fCBbXV0uc2xpY2UoaWR4KSkgb3B0LnJlbW92ZSgpO1xuICBpZiAoIW11bHRpcGxlICYmIGlkeCA+IDEpXG4gICAgY29uc29sZS53YXJuKFwidS1jb21ib2JveDogTXVsdGlwbGUgPGRhdGE+IGZvdW5kIGluIHNpbmdsZSBtb2RlLlwiKTtcbiAgYXR0cihsaXN0LCBcImFyaWEtbXVsdGlzZWxlY3RhYmxlXCIsIGAke211bHRpcGxlfWApO1xuICBhdHRyKGNvbnRyb2wsIFwibGlzdFwiLCB1c2VJZChsaXN0KSk7XG4gIGF0dHIoY29udHJvbCwgXCJhcmlhLWxhYmVsXCIsIGAke3NlbGYuX3NwZWFrfSR7bGFiZWx9JHtNT0RJRklFRH1gKTtcbiAgaWYgKGxpc3QuaGFzQXR0cmlidXRlKFwicG9wb3ZlclwiKSkge1xuICAgIGF0dHIoY29udHJvbCwgXCJwb3BvdmVydGFyZ2V0XCIsIHVzZUlkKGxpc3QpKTtcbiAgICBhdHRyKGxpc3QsIFwicG9wb3ZlclwiLCBcIm1hbnVhbFwiKTtcbiAgfVxuICBjb25zdCBpdGVtID0gdGV4dChpdGVtc1swXSk7XG4gIGlmIChpdGVtICE9PSBzZWxmLl9pdGVtKSBzeW5jSW5wdXRWYWx1ZShzZWxmKTtcbiAgc2VsZi5faXRlbSA9IGl0ZW07XG4gIHN5bmNDbGVhcldpdGhJbnB1dChzZWxmKTtcbiAgc3luY09wdGlvbnNXaXRoSXRlbXMoc2VsZik7XG4gIChfYTIgPSBtdXRhdGlvbk9ic2VydmVyKHNlbGYpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRha2VSZWNvcmRzKCk7XG59O1xudmFyIHN5bmNDbGVhcldpdGhJbnB1dCA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGlmIChzZWxmLmNsZWFyKSBhdHRyKHNlbGYuY2xlYXIsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgaWYgKHNlbGYuY2xlYXIpIHNlbGYuY2xlYXIuaGlkZGVuID0gISgoX2EyID0gc2VsZi5jb250cm9sKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnZhbHVlKSB8fCBpc0Rpc2FibGVkKHNlbGYpO1xufTtcbnZhciBzeW5jT3B0aW9uc1dpdGhJdGVtcyA9IChzZWxmKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgX3NwZWFrLCBvcHRpb25zID0gW10sIHZhbHVlcyB9ID0gc2VsZjtcbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykge1xuICAgIGNvbnN0IHZhbHVlID0gKF9hMiA9IGF0dHIob3B0LCBcInZhbHVlXCIpKSAhPSBudWxsID8gX2EyIDogdGV4dChvcHQpO1xuICAgIGF0dHIob3B0LCBcImFyaWEtbGFiZWxcIiwgX3NwZWFrID8gYCR7X3NwZWFrfSR7dGV4dChvcHQpfWAgOiBudWxsKTtcbiAgICBhdHRyKG9wdCwgXCJzZWxlY3RlZFwiLCB2YWx1ZXMuaW5jbHVkZXModmFsdWUpID8gXCJcIiA6IG51bGwpO1xuICB9XG59O1xudmFyIHN5bmNJbnB1dFZhbHVlID0gKHNlbGYpID0+IHtcbiAgY29uc3QgeyBtdWx0aXBsZSwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGNvbnN0IHZhbHVlID0gdGV4dChpdGVtc1swXSk7XG4gIGlmICghbXVsdGlwbGUgJiYgY29udHJvbCAmJiB2YWx1ZSAhPT0gY29udHJvbC52YWx1ZSlcbiAgICBzZXRWYWx1ZShjb250cm9sLCB2YWx1ZSwgdmFsdWUgPyBcImluc2VydFRleHRcIiA6IFwiZGVsZXRlQ29udGVudFwiKTtcbn07XG52YXIgZGlzcGF0Y2hNYXRjaCA9IChzZWxmLCBjaGFuZ2UgPSB0cnVlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsgX3RleHRzLCBvcHRpb25zID0gW10sIGNyZWF0YWJsZSwgY29udHJvbCwgaXRlbXMsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9ICgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IHF1ZXJ5ID0gdmFsdWUudG9Mb3dlckNhc2UoKSB8fCBudWxsO1xuICBsZXQgbWF0Y2ggPSBbLi4ub3B0aW9uc10uZmluZChcbiAgICAob3B0KSA9PiAoYXR0cihvcHQsIFwibGFiZWxcIikgfHwgdGV4dChvcHQpKS50cmltKCkudG9Mb3dlckNhc2UoKSA9PT0gcXVlcnlcbiAgKTtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNhbmNlbGFibGU6IHRydWUsIGRldGFpbDogbWF0Y2ggfTtcbiAgaWYgKCFzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiY29tYm9ib3hiZWZvcmVtYXRjaFwiLCBldmVudCkpKVxuICAgIG1hdGNoID0gWy4uLm9wdGlvbnNdLmZpbmQoKG8pID0+IG8uc2VsZWN0ZWQpO1xuICBpZiAoY2hhbmdlKSB7XG4gICAgc3luY09wdGlvbnNXaXRoSXRlbXMoc2VsZik7XG4gICAgaWYgKG1hdGNoKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgbWF0Y2gsIGZhbHNlKTtcbiAgICBpZiAoY3JlYXRhYmxlICYmIHZhbHVlKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgeyB2YWx1ZSB9LCBmYWxzZSk7XG4gICAgaWYgKCFtdWx0aXBsZSAmJiAhdmFsdWUgJiYgaXRlbXNbMF0pIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW1zWzBdKTtcbiAgICBlbHNlIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICAgIHJldHVybiBzcGVhayhfdGV4dHMuaW52YWxpZCk7XG4gIH1cbiAgZm9yIChjb25zdCBvcHQgb2Ygb3B0aW9ucykgb3B0LnNlbGVjdGVkID0gb3B0ID09PSBtYXRjaDtcbn07XG52YXIgZGlzcGF0Y2hDaGFuZ2UgPSAoc2VsZiwgaXRlbSwgcmVtb3ZhYmxlID0gdHJ1ZSkgPT4ge1xuICBjb25zdCB7IGNvbnRyb2wsIGl0ZW1zLCBtdWx0aXBsZSB9ID0gc2VsZjtcbiAgY29uc3QgYWRkID0gY3JlYXRlRWxlbWVudChcImRhdGFcIiwgaXRlbS5sYWJlbCB8fCBpdGVtLnZhbHVlLCB7XG4gICAgdmFsdWU6IGl0ZW0udmFsdWVcbiAgfSk7XG4gIGNvbnN0IHJlbW92ZSA9IFsuLi5pdGVtc10uZmluZCgoaSkgPT4gaS52YWx1ZSA9PT0gaXRlbS52YWx1ZSk7XG4gIGNvbnN0IGV2ZW50ID0geyBidWJibGVzOiB0cnVlLCBjYW5jZWxhYmxlOiB0cnVlLCBkZXRhaWw6IHJlbW92ZSB8fCBhZGQgfTtcbiAgY29uc3Qgc2tpcCA9IHJlbW92ZSAmJiAhcmVtb3ZhYmxlO1xuICBpZiAoc2tpcCkgcmV0dXJuIHN5bmNJbnB1dFZhbHVlKHNlbGYpO1xuICBpZiAoc2VsZi5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudChcImNvbWJvYm94YmVmb3Jlc2VsZWN0XCIsIGV2ZW50KSkpIHtcbiAgICBpZiAoIW11bHRpcGxlKSBmb3IgKGNvbnN0IGl0ZW0yIG9mIFsuLi5pdGVtc10pIGl0ZW0yLnJlbW92ZSgpO1xuICAgIGlmIChyZW1vdmUpIHJlbW92ZS5yZW1vdmUoKTtcbiAgICBlbHNlIGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuaW5zZXJ0QWRqYWNlbnRFbGVtZW50KFwiYmVmb3JlYmVnaW5cIiwgYWRkKTtcbiAgICBzZWxmLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFwiY29tYm9ib3hhZnRlcnNlbGVjdFwiLCBldmVudCkpO1xuICB9XG59O1xudmFyIG9uRm9jdXMgPSAoc2VsZiwgeyB0YXJnZXQgfSkgPT4ge1xuICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHNlbGYuX2ZvY3VzID0gdGFyZ2V0O1xuICBzcGVhaygpO1xufTtcbnZhciBvbkJsdXIgPSAoc2VsZikgPT4gaXNNb3VzZURvd24oKSB8fCBzZXRUaW1lb3V0KG9uQmx1cnJlZCwgMCwgc2VsZik7XG52YXIgb25CbHVycmVkID0gKHNlbGYpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKCFzZWxmLl9mb2N1cyB8fCBzZWxmLmNvbnRhaW5zKChfYTIgPSBzZWxmLl9yb290KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmFjdGl2ZUVsZW1lbnQpKSByZXR1cm47XG4gIGlmICghc2VsZi5tdWx0aXBsZSkgZGlzcGF0Y2hNYXRjaChzZWxmKTtcbiAgc2VsZi5fZm9jdXMgPSB2b2lkIDA7XG59O1xudmFyIG9uQ2xpY2sgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgY29uc3QgeyBjbGllbnRYOiB4LCBjbGllbnRZOiB5LCB0YXJnZXQgfSA9IGV2ZW50O1xuICBjb25zdCB7IGNsZWFyLCBjb250cm9sLCBpdGVtcyB9ID0gc2VsZjtcbiAgaWYgKGNsZWFyID09IG51bGwgPyB2b2lkIDAgOiBjbGVhci5jb250YWlucyh0YXJnZXQpKSB7XG4gICAgaWYgKGNvbnRyb2wpIHNldFZhbHVlKGNvbnRyb2wsIFwiXCIsIFwiZGVsZXRlQ29udGVudEJhY2t3YXJkXCIpO1xuICAgIHJldHVybiBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCk7XG4gIH1cbiAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgY29uc3QgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQgfSA9IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKGl0ZW0uY29udGFpbnModGFyZ2V0KSkgcmV0dXJuIGRpc3BhdGNoQ2hhbmdlKHNlbGYsIGl0ZW0pO1xuICAgIGlmICh5ID49IHRvcCAmJiB5IDw9IGJvdHRvbSAmJiB4ID49IGxlZnQgJiYgeCA8PSByaWdodCkgcmV0dXJuIGl0ZW0uZm9jdXMoKTtcbiAgfVxuICBpZiAodGFyZ2V0ID09PSBzZWxmKSBjb250cm9sID09IG51bGwgPyB2b2lkIDAgOiBjb250cm9sLmZvY3VzKCk7XG59O1xudmFyIG9uSW5wdXQgPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgeyBvcHRpb25zID0gW10sIGNvbnRyb2wsIG11bHRpcGxlIH0gPSBzZWxmO1xuICBjb25zdCB2YWx1ZSA9ICgoX2EyID0gY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC52YWx1ZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IGlzQ2xpY2sgPSBldmVudCBpbnN0YW5jZW9mIElucHV0RXZlbnQgPyAhZXZlbnQuaW5wdXRUeXBlIHx8IGV2ZW50LmlucHV0VHlwZSA9PT0gXCJpbnNlcnRSZXBsYWNlbWVudFRleHRcIiA6ICEhdmFsdWU7XG4gIGlmIChpc0NsaWNrKSB7XG4gICAgZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG4gICAgaWYgKGNvbnRyb2wpIGNvbnRyb2wudmFsdWUgPSBzZWxmLl92YWx1ZTtcbiAgICBmb3IgKGNvbnN0IG9wdCBvZiBvcHRpb25zKVxuICAgICAgaWYgKG9wdC52YWx1ZSAmJiBvcHQudmFsdWUgPT09IHZhbHVlKVxuICAgICAgICByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgb3B0LCBtdWx0aXBsZSk7XG4gIH0gZWxzZSBpZiAoIW11bHRpcGxlKSBkaXNwYXRjaE1hdGNoKHNlbGYsIGZhbHNlKTtcbiAgc3luY0NsZWFyV2l0aElucHV0KHNlbGYpO1xufTtcbnZhciBvbktleURvd24gPSAoc2VsZiwgZXZlbnQpID0+IHtcbiAgdmFyIF9hMjtcbiAgaWYgKGV2ZW50LmFsdEtleSB8fCBldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkpIHJldHVybjtcbiAgY29uc3QgeyBjbGVhciwgY29udHJvbCwgaXRlbXMgfSA9IHNlbGY7XG4gIGNvbnN0IHsga2V5LCByZXBlYXQsIHRhcmdldCB9ID0gZXZlbnQ7XG4gIGNvbnN0IGlzQ29udHJvbCA9IGNvbnRyb2wgJiYgY29udHJvbCA9PT0gdGFyZ2V0O1xuICBjb25zdCBpblRleHQgPSBpc0NvbnRyb2wgJiYgKGNvbnRyb2wgPT0gbnVsbCA/IHZvaWQgMCA6IGNvbnRyb2wuc2VsZWN0aW9uRW5kKTtcbiAgbGV0IGluZGV4ID0gaXNDb250cm9sID8gaXRlbXMubGVuZ3RoIDogWy4uLml0ZW1zXS5pbmRleE9mKHRhcmdldCk7XG4gIGlmIChpc0NvbnRyb2wgJiYga2V5ID09PSBcIlRhYlwiICYmIGNsZWFyICYmICFjbGVhci5oaWRkZW4pIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNsZWFyLnRhYkluZGV4ID0gLTE7XG4gICAgY2xlYXIuZm9jdXMoKTtcbiAgICBvbihjbGVhciwgXCJibHVyXCIsICgpID0+IGF0dHIoY2xlYXIsIFwidGFiaW5kZXhcIiwgbnVsbCksIEVWRU5UX09OQ0UpO1xuICB9XG4gIGlmICghaXNDb250cm9sICYmIGFzQnV0dG9uKGV2ZW50KSB8fCBpbmRleCA9PT0gLTEpIHJldHVybjtcbiAgaWYgKGtleSA9PT0gXCJBcnJvd1JpZ2h0XCIgJiYgIWlzQ29udHJvbCkgaW5kZXggKz0gMTtcbiAgZWxzZSBpZiAoa2V5ID09PSBcIkFycm93TGVmdFwiICYmICFpblRleHQpIGluZGV4IC09IDE7XG4gIGVsc2UgaWYgKGtleSA9PT0gXCJFbnRlclwiICYmIGlzQ29udHJvbCkge1xuICAgIGNvbnN0IGZvcm0gPSBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiKTtcbiAgICBhdHRyKGNvbnRyb2wsIFwiZm9ybVwiLCBcIiNcIik7XG4gICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IGF0dHIoY29udHJvbCwgXCJmb3JtXCIsIGZvcm0pKTtcbiAgICByZXR1cm4gZGlzcGF0Y2hNYXRjaChzZWxmKTtcbiAgfSBlbHNlIGlmICgoa2V5ID09PSBcIkJhY2tzcGFjZVwiIHx8IGtleSA9PT0gXCJEZWxldGVcIikgJiYgIWluVGV4dCkge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgaWYgKCFyZXBlYXQgJiYgaXRlbXNbaW5kZXhdKSByZXR1cm4gZGlzcGF0Y2hDaGFuZ2Uoc2VsZiwgaXRlbXNbaW5kZXhdKTtcbiAgICBpZiAoaXNDb250cm9sKSBpbmRleCAtPSAxO1xuICB9IGVsc2UgcmV0dXJuIGlzQ29udHJvbCB8fCAoY29udHJvbCA9PSBudWxsID8gdm9pZCAwIDogY29udHJvbC5mb2N1cygpKTtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgKF9hMiA9IGl0ZW1zW01hdGgubWF4KDAsIGluZGV4KV0gfHwgY29udHJvbCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5mb2N1cygpO1xufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtY29tYm9ib3hcIiwgVUhUTUxDb21ib2JveEVsZW1lbnQpO1xuXG5leHBvcnQgeyBVSFRNTENvbWJvYm94RWxlbWVudCwgVUhUTUxDb21ib2JveFNoYWRvd1Jvb3QsIFVIVE1MQ29tYm9ib3hTdHlsZSB9O1xuIiwiLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgU0FGRV9MQUJFTExFREJZID0gYCR7SVNfQU5EUk9JRCA/IFwiZGF0YVwiIDogXCJhcmlhXCJ9LWxhYmVsbGVkYnlgO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhdHRhY2hTdHlsZSA9IChlbGVtZW50LCBjc3MpID0+IGVsZW1lbnQuc2hhZG93Um9vdCB8fCBlbGVtZW50LmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgY3JlYXRlRWxlbWVudChcInNsb3RcIiksXG4gIC8vIFVubmFtZWQgc2xvdCBkb2VzIGF1dG9tYXRpY2FsbHkgcmVuZGVyIGFsbCB0b3AgZWxlbWVudCBub2Rlc1xuICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgY3NzKVxuKTtcbnZhciBvYnNlcnZlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTtcbnZhciBtdXRhdGlvbk9ic2VydmVyID0gKGVsZW1lbnQsIG9wdGlvbnMpID0+IHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkgcmV0dXJuIG9ic2VydmVycy5nZXQoZWxlbWVudCk7XG4gIHRyeSB7XG4gICAgb2JzZXJ2ZXJzLmdldChlbGVtZW50KS5kaXNjb25uZWN0KCk7XG4gICAgb2JzZXJ2ZXJzLmRlbGV0ZShlbGVtZW50KTtcbiAgfSBjYXRjaCAoX2Vycikge1xuICB9XG4gIGlmIChvcHRpb25zKSB7XG4gICAgY29uc3Qgb2JzZXJ2ZXIgPSBuZXcgTXV0YXRpb25PYnNlcnZlcihcbiAgICAgIChkZXRhaWwpID0+IGVsZW1lbnQuaGFuZGxlRXZlbnQoeyB0eXBlOiBcIm11dGF0aW9uXCIsIGRldGFpbCB9KVxuICAgICk7XG4gICAgb2JzZXJ2ZXIub2JzZXJ2ZShlbGVtZW50LCBvcHRpb25zKTtcbiAgICBvYnNlcnZlcnMuc2V0KGVsZW1lbnQsIG9ic2VydmVyKTtcbiAgfVxufTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZGVjbGFyYXRpdmVTaGFkb3dSb290ID0gKHN0eWxlLCBzbG90ID0gXCI8c2xvdD48L3Nsb3Q+XCIpID0+IGA8dGVtcGxhdGUgc2hhZG93cm9vdG1vZGU9XCJvcGVuXCI+JHtzbG90fTxzdHlsZT4ke3N0eWxlfTwvc3R5bGU+PC90ZW1wbGF0ZT5gO1xuXG4vLyB1LXRhYnMudHNcbnZhciBVSFRNTFRhYnNTdHlsZSA9IERJU1BMQVlfQkxPQ0s7XG52YXIgVUhUTUxUYWJMaXN0U3R5bGUgPSBESVNQTEFZX0JMT0NLO1xudmFyIFVIVE1MVGFiUGFuZWxTdHlsZSA9IERJU1BMQVlfQkxPQ0s7XG52YXIgVUhUTUxUYWJTdHlsZSA9ICc6aG9zdCg6bm90KFtoaWRkZW5dKSkgeyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGN1cnNvcjogcG9pbnRlciB9Omhvc3QoW2FyaWEtZGlzYWJsZWQ9XCJ0cnVlXCJdKSB7IGN1cnNvcjogZGVmYXVsdCB9JztcbnZhciBVSFRNTFRhYnNTaGFkb3dSb290ID0gZGVjbGFyYXRpdmVTaGFkb3dSb290KFVIVE1MVGFic1N0eWxlKTtcbnZhciBVSFRNTFRhYkxpc3RTaGFkb3dSb290ID0gZGVjbGFyYXRpdmVTaGFkb3dSb290KFVIVE1MVGFiTGlzdFN0eWxlKTtcbnZhciBVSFRNTFRhYlNoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoVUhUTUxUYWJTdHlsZSk7XG52YXIgVUhUTUxUYWJQYW5lbFNoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoVUhUTUxUYWJQYW5lbFN0eWxlKTtcbnZhciBBUklBX0NPTlRST0xTID0gXCJhcmlhLWNvbnRyb2xzXCI7XG52YXIgQVJJQV9TRUxFQ1RFRCA9IFwiYXJpYS1zZWxlY3RlZFwiO1xudmFyIFVIVE1MVGFic0VsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKCk7XG4gICAgYXR0YWNoU3R5bGUodGhpcywgVUhUTUxUYWJzU3R5bGUpO1xuICB9XG4gIGdldCB0YWJMaXN0KCkge1xuICAgIHJldHVybiBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYmxpc3RcIiwgdGhpcylbMF0gfHwgbnVsbDtcbiAgfVxuICBnZXQgc2VsZWN0ZWRJbmRleCgpIHtcbiAgICByZXR1cm4gZ2V0U2VsZWN0ZWRJbmRleCh0aGlzLnRhYnMpO1xuICB9XG4gIHNldCBzZWxlY3RlZEluZGV4KGluZGV4KSB7XG4gICAgc2V0U2VsZWN0ZWQodGhpcy50YWJzW2luZGV4XSk7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFiXCIsIHRoaXMpO1xuICB9XG4gIGdldCBwYW5lbHMoKSB7XG4gICAgcmV0dXJuIHF1ZXJ5V2l0aG91dE5lc3RlZChcInUtdGFicGFuZWxcIiwgdGhpcyk7XG4gIH1cbn07XG52YXIgVUhUTUxUYWJMaXN0RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBVSFRNTFRhYkxpc3RTdHlsZSk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJ0YWJsaXN0XCIpO1xuICAgIG9uKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIHsgY2hpbGRMaXN0OiB0cnVlIH0pO1xuICAgIGlmICh0aGlzLnRhYnMubGVuZ3RoKSB0aGlzLmhhbmRsZUV2ZW50KCk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgb2ZmKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICBtdXRhdGlvbk9ic2VydmVyKHRoaXMsIGZhbHNlKTtcbiAgfVxuICBoYW5kbGVFdmVudChldmVudCkge1xuICAgIGlmICghZXZlbnQgfHwgZXZlbnQudHlwZSA9PT0gXCJtdXRhdGlvblwiKSB7XG4gICAgICBjb25zdCB0YWIgPSB0aGlzLnRhYnNbTWF0aC5tYXgodGhpcy5zZWxlY3RlZEluZGV4LCAwKV07XG4gICAgICByZXR1cm4gdGFiID09IG51bGwgPyB2b2lkIDAgOiB0YWIuc2V0QXR0cmlidXRlKEFSSUFfU0VMRUNURUQsIFwidHJ1ZVwiKTtcbiAgICB9XG4gICAgY29uc3QgeyBrZXkgfSA9IGV2ZW50O1xuICAgIGNvbnN0IHRhYnMgPSBbLi4udGhpcy50YWJzXTtcbiAgICBjb25zdCBwcmV2ID0gdGFicy5maW5kSW5kZXgoKHRhYikgPT4gdGFiLmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpO1xuICAgIGxldCBuZXh0ID0gcHJldjtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCBwcmV2ID09PSAtMSkgcmV0dXJuO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImNsaWNrXCIpIHNldFNlbGVjdGVkKHRhYnNbcHJldl0pO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImtleWRvd25cIiAmJiAhYXNCdXR0b24oZXZlbnQpKSB7XG4gICAgICBpZiAoa2V5ID09PSBcIkFycm93RG93blwiIHx8IGtleSA9PT0gXCJBcnJvd1JpZ2h0XCIpXG4gICAgICAgIG5leHQgPSAocHJldiArIDEpICUgdGFicy5sZW5ndGg7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiQXJyb3dVcFwiIHx8IGtleSA9PT0gXCJBcnJvd0xlZnRcIilcbiAgICAgICAgbmV4dCA9IChwcmV2IHx8IHRhYnMubGVuZ3RoKSAtIDE7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiRW5kXCIpIG5leHQgPSB0YWJzLmxlbmd0aCAtIDE7XG4gICAgICBlbHNlIGlmIChrZXkgPT09IFwiSG9tZVwiKSBuZXh0ID0gMDtcbiAgICAgIGVsc2UgaWYgKGtleSA9PT0gXCJUYWJcIikgbmV4dCA9IGdldFNlbGVjdGVkSW5kZXgodGFicyk7XG4gICAgICBlbHNlIHJldHVybjtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0YWJzW3ByZXZdLnRhYkluZGV4ID0gLTE7XG4gICAgICAgIHRhYnNbbmV4dF0udGFiSW5kZXggPSAwO1xuICAgICAgfSk7XG4gICAgICBpZiAoa2V5ICE9PSBcIlRhYlwiKSB7XG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIHRhYnNbbmV4dF0uZm9jdXMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgZ2V0IHRhYnNFbGVtZW50KCkge1xuICAgIHJldHVybiB0aGlzLmNsb3Nlc3QoXCJ1LXRhYnNcIik7XG4gIH1cbiAgZ2V0IHRhYnMoKSB7XG4gICAgcmV0dXJuIHRoaXMucXVlcnlTZWxlY3RvckFsbChcInUtdGFiXCIpO1xuICB9XG4gIGdldCBzZWxlY3RlZEluZGV4KCkge1xuICAgIHJldHVybiBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicyk7XG4gIH1cbiAgc2V0IHNlbGVjdGVkSW5kZXgoaW5kZXgpIHtcbiAgICBzZXRTZWxlY3RlZCh0aGlzLnRhYnNbaW5kZXhdKTtcbiAgfVxufTtcbnZhciBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG52YXIgVUhUTUxUYWJFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuICBzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcbiAgICByZXR1cm4gW1wiaWRcIiwgQVJJQV9TRUxFQ1RFRCwgQVJJQV9DT05UUk9MU107XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBVSFRNTFRhYlN0eWxlKTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcInRhYlwiKTtcbiAgICB0aGlzLnRhYkluZGV4ID0gdGhpcy5zZWxlY3RlZCA/IDAgOiAtMTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKCFTS0lQX0FUVFJfQ0hBTkdFICYmIHRoaXMuc2VsZWN0ZWQgJiYgdGhpcy50YWJMaXN0KSB7XG4gICAgICBTS0lQX0FUVFJfQ0hBTkdFID0gdHJ1ZTtcbiAgICAgIGNvbnN0IHRhYnMgPSBbLi4udGhpcy50YWJMaXN0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJ1LXRhYlwiKV07XG4gICAgICBjb25zdCBwYW5lbHMgPSBxdWVyeVdpdGhvdXROZXN0ZWQoXCJ1LXRhYnBhbmVsXCIsIHRoaXMudGFic0VsZW1lbnQgfHwgdGhpcyk7XG4gICAgICBjb25zdCBuZXh0UGFuZWwgPSBnZXRQYW5lbCh0aGlzLCBwYW5lbHNbdGFicy5pbmRleE9mKHRoaXMpXSk7XG4gICAgICBpZiAobmV4dFBhbmVsKSBhdHRyKG5leHRQYW5lbCwgU0FGRV9MQUJFTExFREJZLCB1c2VJZCh0aGlzKSk7XG4gICAgICB0YWJzLmZvckVhY2goKHRhYiwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgcGFuZWwgPSBnZXRQYW5lbCh0YWIsIHBhbmVsc1tpbmRleF0pO1xuICAgICAgICB0YWIudGFiSW5kZXggPSB0YWIgPT09IHRoaXMgPyAwIDogLTE7XG4gICAgICAgIGF0dHIodGFiLCBBUklBX1NFTEVDVEVELCBgJHt0YWIgPT09IHRoaXN9YCk7XG4gICAgICAgIGF0dHIodGFiLCBBUklBX0NPTlRST0xTLCAocGFuZWwgPT0gbnVsbCA/IHZvaWQgMCA6IHBhbmVsLmlkKSB8fCBudWxsKTtcbiAgICAgICAgaWYgKHBhbmVsKSBwYW5lbC5oaWRkZW4gPSBwYW5lbCAhPT0gbmV4dFBhbmVsO1xuICAgICAgfSk7XG4gICAgICBTS0lQX0FUVFJfQ0hBTkdFID0gZmFsc2U7XG4gICAgfVxuICB9XG4gIGdldCB0YWJzRWxlbWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbG9zZXN0KFwidS10YWJzXCIpO1xuICB9XG4gIGdldCB0YWJMaXN0KCkge1xuICAgIGNvbnN0IHRhYmxpc3QgPSB0aGlzLnBhcmVudEVsZW1lbnQ7XG4gICAgcmV0dXJuICh0YWJsaXN0ID09IG51bGwgPyB2b2lkIDAgOiB0YWJsaXN0Lm5vZGVOYW1lKSA9PT0gXCJVLVRBQkxJU1RcIiA/IHRhYmxpc3QgOiBudWxsO1xuICB9XG4gIGdldCBzZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBBUklBX1NFTEVDVEVEKSA9PT0gXCJ0cnVlXCI7XG4gIH1cbiAgc2V0IHNlbGVjdGVkKHZhbHVlKSB7XG4gICAgYXR0cih0aGlzLCBBUklBX1NFTEVDVEVELCBgJHshIXZhbHVlfWApO1xuICB9XG4gIC8qKiBSZXRyaWV2ZXMgdGhlIG9yZGluYWwgcG9zaXRpb24gb2YgYW4gdGFiIGluIGEgdGFibGlzdC4gKi9cbiAgZ2V0IGluZGV4KCkge1xuICAgIGNvbnN0IHRhYkxpc3QgPSB0aGlzLnRhYkxpc3Q7XG4gICAgcmV0dXJuIHRhYkxpc3QgPyBbLi4udGFiTGlzdC5xdWVyeVNlbGVjdG9yQWxsKFwidS10YWJcIildLmluZGV4T2YodGhpcykgOiAwO1xuICB9XG4gIGdldCBwYW5lbCgpIHtcbiAgICByZXR1cm4gZ2V0UGFuZWwodGhpcyk7XG4gIH1cbn07XG52YXIgVUhUTUxUYWJQYW5lbEVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJoaWRkZW5cIl07XG4gIH1cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICBhdHRhY2hTdHlsZSh0aGlzLCBVSFRNTFRhYlBhbmVsU3R5bGUpO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGF0dHIodGhpcywgXCJyb2xlXCIsIFwidGFicGFuZWxcIik7XG4gICAgdGhpcy5oaWRkZW4gPSBnZXRTZWxlY3RlZEluZGV4KHRoaXMudGFicykgPT09IC0xO1xuICAgIHRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCk7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKCkge1xuICAgIGNvbnN0IGhpZGRlbiA9IHRoaXMuaGlkZGVuO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWhpZGRlblwiLCBgJHtoaWRkZW59YCk7XG4gICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIGhpZGRlbiB8fCBpc0ZvY3VzYWJsZSh0aGlzLmZpcnN0Q2hpbGQpID8gbnVsbCA6IFwiMFwiKTtcbiAgfVxuICBnZXQgdGFic0VsZW1lbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcInUtdGFic1wiKTtcbiAgfVxuICBnZXQgdGFicygpIHtcbiAgICBjb25zdCBjc3MgPSBgdS10YWJbJHtBUklBX0NPTlRST0xTfT1cIiR7dGhpcy5pZH1cIl1gO1xuICAgIHJldHVybiBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoY3NzKTtcbiAgfVxufTtcbnZhciBxdWVyeVdpdGhvdXROZXN0ZWQgPSAodGFnLCBzZWxmKSA9PiBzZWxmLnF1ZXJ5U2VsZWN0b3JBbGwoYCR7dGFnfTpub3QoOnNjb3BlIHUtdGFicGFuZWwgJHt0YWd9KWApO1xudmFyIGdldFBhbmVsID0gKHRhYiwgcGFuZWwpID0+IHtcbiAgY29uc3QgaWQyID0gYXR0cih0YWIsIEFSSUFfQ09OVFJPTFMpIHx8IHVzZUlkKHBhbmVsKTtcbiAgY29uc3QgZWwgPSBnZXRSb290KHRhYikuZ2V0RWxlbWVudEJ5SWQoaWQyKTtcbiAgcmV0dXJuIChlbCA9PSBudWxsID8gdm9pZCAwIDogZWwubm9kZU5hbWUpID09PSBcIlUtVEFCUEFORUxcIiA/IGVsIDogbnVsbDtcbn07XG52YXIgZ2V0U2VsZWN0ZWRJbmRleCA9ICh0YWJzKSA9PiBbLi4udGFic10uZmluZEluZGV4KCh0YWIpID0+IGF0dHIodGFiLCBBUklBX1NFTEVDVEVEKSA9PT0gXCJ0cnVlXCIpO1xudmFyIHNldFNlbGVjdGVkID0gKHRhYikgPT4gdGFiICYmIGF0dHIodGFiLCBcImFyaWEtZGlzYWJsZWRcIikgIT09IFwidHJ1ZVwiICYmIGF0dHIodGFiLCBcImFyaWEtc2VsZWN0ZWRcIiwgXCJ0cnVlXCIpO1xudmFyIGlzRm9jdXNhYmxlID0gKGVsKSA9PiBlbCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgIWVsLm1hdGNoZXMoJzpkaXNhYmxlZCxbdGFiaW5kZXhePVwiLVwiXScpICYmIGVsLm1hdGNoZXMoXG4gIGBbY29udGVudGVkaXRhYmxlXSxbY29udHJvbHNdLFtocmVmXSxbdGFiaW5kZXhdLGlucHV0Om5vdChbdHlwZT1cImhpZGRlblwiXSksc2VsZWN0LHRleHRhcmVhLGJ1dHRvbixzdW1tYXJ5LGlmcmFtZWBcbik7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYnNcIiwgVUhUTUxUYWJzRWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYmxpc3RcIiwgVUhUTUxUYWJMaXN0RWxlbWVudCk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LXRhYlwiLCBVSFRNTFRhYkVsZW1lbnQpO1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS10YWJwYW5lbFwiLCBVSFRNTFRhYlBhbmVsRWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MVGFiRWxlbWVudCwgVUhUTUxUYWJMaXN0RWxlbWVudCwgVUhUTUxUYWJMaXN0U2hhZG93Um9vdCwgVUhUTUxUYWJMaXN0U3R5bGUsIFVIVE1MVGFiUGFuZWxFbGVtZW50LCBVSFRNTFRhYlBhbmVsU2hhZG93Um9vdCwgVUhUTUxUYWJQYW5lbFN0eWxlLCBVSFRNTFRhYlNoYWRvd1Jvb3QsIFVIVE1MVGFiU3R5bGUsIFVIVE1MVGFic0VsZW1lbnQsIFVIVE1MVGFic1NoYWRvd1Jvb3QsIFVIVE1MVGFic1N0eWxlIH07XG4iLCIvKipcbiAqIEN1c3RvbSBwb3NpdGlvbmluZyByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy92aXJ0dWFsLWVsZW1lbnRzXG4gKi9cblxuY29uc3Qgc2lkZXMgPSBbJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddO1xuY29uc3QgYWxpZ25tZW50cyA9IFsnc3RhcnQnLCAnZW5kJ107XG5jb25zdCBwbGFjZW1lbnRzID0gLyojX19QVVJFX18qL3NpZGVzLnJlZHVjZSgoYWNjLCBzaWRlKSA9PiBhY2MuY29uY2F0KHNpZGUsIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMF0sIHNpZGUgKyBcIi1cIiArIGFsaWdubWVudHNbMV0pLCBbXSk7XG5jb25zdCBtaW4gPSBNYXRoLm1pbjtcbmNvbnN0IG1heCA9IE1hdGgubWF4O1xuY29uc3Qgcm91bmQgPSBNYXRoLnJvdW5kO1xuY29uc3QgZmxvb3IgPSBNYXRoLmZsb29yO1xuY29uc3QgY3JlYXRlQ29vcmRzID0gdiA9PiAoe1xuICB4OiB2LFxuICB5OiB2XG59KTtcbmNvbnN0IG9wcG9zaXRlU2lkZU1hcCA9IHtcbiAgbGVmdDogJ3JpZ2h0JyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgdG9wOiAnYm90dG9tJ1xufTtcbmNvbnN0IG9wcG9zaXRlQWxpZ25tZW50TWFwID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmZ1bmN0aW9uIGNsYW1wKHN0YXJ0LCB2YWx1ZSwgZW5kKSB7XG4gIHJldHVybiBtYXgoc3RhcnQsIG1pbih2YWx1ZSwgZW5kKSk7XG59XG5mdW5jdGlvbiBldmFsdWF0ZSh2YWx1ZSwgcGFyYW0pIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlKHBhcmFtKSA6IHZhbHVlO1xufVxuZnVuY3Rpb24gZ2V0U2lkZShwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QXhpc0xlbmd0aChheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneScgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG59XG5jb25zdCB5QXhpc1NpZGVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWyd0b3AnLCAnYm90dG9tJ10pO1xuZnVuY3Rpb24gZ2V0U2lkZUF4aXMocGxhY2VtZW50KSB7XG4gIHJldHVybiB5QXhpc1NpZGVzLmhhcyhnZXRTaWRlKHBsYWNlbWVudCkpID8gJ3knIDogJ3gnO1xufVxuZnVuY3Rpb24gZ2V0QWxpZ25tZW50QXhpcyhwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGdldE9wcG9zaXRlQXhpcyhnZXRTaWRlQXhpcyhwbGFjZW1lbnQpKTtcbn1cbmZ1bmN0aW9uIGdldEFsaWdubWVudFNpZGVzKHBsYWNlbWVudCwgcmVjdHMsIHJ0bCkge1xuICBpZiAocnRsID09PSB2b2lkIDApIHtcbiAgICBydGwgPSBmYWxzZTtcbiAgfVxuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChhbGlnbm1lbnRBeGlzKTtcbiAgbGV0IG1haW5BbGlnbm1lbnRTaWRlID0gYWxpZ25tZW50QXhpcyA9PT0gJ3gnID8gYWxpZ25tZW50ID09PSAocnRsID8gJ2VuZCcgOiAnc3RhcnQnKSA/ICdyaWdodCcgOiAnbGVmdCcgOiBhbGlnbm1lbnQgPT09ICdzdGFydCcgPyAnYm90dG9tJyA6ICd0b3AnO1xuICBpZiAocmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gPiByZWN0cy5mbG9hdGluZ1tsZW5ndGhdKSB7XG4gICAgbWFpbkFsaWdubWVudFNpZGUgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChtYWluQWxpZ25tZW50U2lkZSk7XG4gIH1cbiAgcmV0dXJuIFttYWluQWxpZ25tZW50U2lkZSwgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpbkFsaWdubWVudFNpZGUpXTtcbn1cbmZ1bmN0aW9uIGdldEV4cGFuZGVkUGxhY2VtZW50cyhwbGFjZW1lbnQpIHtcbiAgY29uc3Qgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlQWxpZ25tZW50UGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuZnVuY3Rpb24gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvc3RhcnR8ZW5kL2csIGFsaWdubWVudCA9PiBvcHBvc2l0ZUFsaWdubWVudE1hcFthbGlnbm1lbnRdKTtcbn1cbmNvbnN0IGxyUGxhY2VtZW50ID0gWydsZWZ0JywgJ3JpZ2h0J107XG5jb25zdCBybFBsYWNlbWVudCA9IFsncmlnaHQnLCAnbGVmdCddO1xuY29uc3QgdGJQbGFjZW1lbnQgPSBbJ3RvcCcsICdib3R0b20nXTtcbmNvbnN0IGJ0UGxhY2VtZW50ID0gWydib3R0b20nLCAndG9wJ107XG5mdW5jdGlvbiBnZXRTaWRlTGlzdChzaWRlLCBpc1N0YXJ0LCBydGwpIHtcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgaWYgKHJ0bCkgcmV0dXJuIGlzU3RhcnQgPyBybFBsYWNlbWVudCA6IGxyUGxhY2VtZW50O1xuICAgICAgcmV0dXJuIGlzU3RhcnQgPyBsclBsYWNlbWVudCA6IHJsUGxhY2VtZW50O1xuICAgIGNhc2UgJ2xlZnQnOlxuICAgIGNhc2UgJ3JpZ2h0JzpcbiAgICAgIHJldHVybiBpc1N0YXJ0ID8gdGJQbGFjZW1lbnQgOiBidFBsYWNlbWVudDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIFtdO1xuICB9XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzKHBsYWNlbWVudCwgZmxpcEFsaWdubWVudCwgZGlyZWN0aW9uLCBydGwpIHtcbiAgY29uc3QgYWxpZ25tZW50ID0gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCk7XG4gIGxldCBsaXN0ID0gZ2V0U2lkZUxpc3QoZ2V0U2lkZShwbGFjZW1lbnQpLCBkaXJlY3Rpb24gPT09ICdzdGFydCcsIHJ0bCk7XG4gIGlmIChhbGlnbm1lbnQpIHtcbiAgICBsaXN0ID0gbGlzdC5tYXAoc2lkZSA9PiBzaWRlICsgXCItXCIgKyBhbGlnbm1lbnQpO1xuICAgIGlmIChmbGlwQWxpZ25tZW50KSB7XG4gICAgICBsaXN0ID0gbGlzdC5jb25jYXQobGlzdC5tYXAoZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxpc3Q7XG59XG5mdW5jdGlvbiBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9sZWZ0fHJpZ2h0fGJvdHRvbXx0b3AvZywgc2lkZSA9PiBvcHBvc2l0ZVNpZGVNYXBbc2lkZV0pO1xufVxuZnVuY3Rpb24gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSB7XG4gIHJldHVybiB7XG4gICAgdG9wOiAwLFxuICAgIHJpZ2h0OiAwLFxuICAgIGJvdHRvbTogMCxcbiAgICBsZWZ0OiAwLFxuICAgIC4uLnBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhZGRpbmdPYmplY3QocGFkZGluZykge1xuICByZXR1cm4gdHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gZXhwYW5kUGFkZGluZ09iamVjdChwYWRkaW5nKSA6IHtcbiAgICB0b3A6IHBhZGRpbmcsXG4gICAgcmlnaHQ6IHBhZGRpbmcsXG4gICAgYm90dG9tOiBwYWRkaW5nLFxuICAgIGxlZnQ6IHBhZGRpbmdcbiAgfTtcbn1cbmZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICBjb25zdCB7XG4gICAgeCxcbiAgICB5LFxuICAgIHdpZHRoLFxuICAgIGhlaWdodFxuICB9ID0gcmVjdDtcbiAgcmV0dXJuIHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHQsXG4gICAgdG9wOiB5LFxuICAgIGxlZnQ6IHgsXG4gICAgcmlnaHQ6IHggKyB3aWR0aCxcbiAgICBib3R0b206IHkgKyBoZWlnaHQsXG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmV4cG9ydCB7IGFsaWdubWVudHMsIGNsYW1wLCBjcmVhdGVDb29yZHMsIGV2YWx1YXRlLCBleHBhbmRQYWRkaW5nT2JqZWN0LCBmbG9vciwgZ2V0QWxpZ25tZW50LCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0QXhpc0xlbmd0aCwgZ2V0RXhwYW5kZWRQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZUFsaWdubWVudFBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVBeGlzLCBnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzLCBnZXRPcHBvc2l0ZVBsYWNlbWVudCwgZ2V0UGFkZGluZ09iamVjdCwgZ2V0U2lkZSwgZ2V0U2lkZUF4aXMsIG1heCwgbWluLCBwbGFjZW1lbnRzLCByZWN0VG9DbGllbnRSZWN0LCByb3VuZCwgc2lkZXMgfTtcbiIsImltcG9ydCB7IGdldFNpZGVBeGlzLCBnZXRBbGlnbm1lbnRBeGlzLCBnZXRBeGlzTGVuZ3RoLCBnZXRTaWRlLCBnZXRBbGlnbm1lbnQsIGV2YWx1YXRlLCBnZXRQYWRkaW5nT2JqZWN0LCByZWN0VG9DbGllbnRSZWN0LCBtaW4sIGNsYW1wLCBwbGFjZW1lbnRzLCBnZXRBbGlnbm1lbnRTaWRlcywgZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQsIGdldE9wcG9zaXRlUGxhY2VtZW50LCBnZXRFeHBhbmRlZFBsYWNlbWVudHMsIGdldE9wcG9zaXRlQXhpc1BsYWNlbWVudHMsIHNpZGVzLCBtYXgsIGdldE9wcG9zaXRlQXhpcyB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5leHBvcnQgeyByZWN0VG9DbGllbnRSZWN0IH0gZnJvbSAnQGZsb2F0aW5nLXVpL3V0aWxzJztcblxuZnVuY3Rpb24gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQoX3JlZiwgcGxhY2VtZW50LCBydGwpIHtcbiAgbGV0IHtcbiAgICByZWZlcmVuY2UsXG4gICAgZmxvYXRpbmdcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IHNpZGVBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25tZW50QXhpcyA9IGdldEFsaWdubWVudEF4aXMocGxhY2VtZW50KTtcbiAgY29uc3QgYWxpZ25MZW5ndGggPSBnZXRBeGlzTGVuZ3RoKGFsaWdubWVudEF4aXMpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBpc1ZlcnRpY2FsID0gc2lkZUF4aXMgPT09ICd5JztcbiAgY29uc3QgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGZsb2F0aW5nLndpZHRoIC8gMjtcbiAgY29uc3QgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBmbG9hdGluZy5oZWlnaHQgLyAyO1xuICBjb25zdCBjb21tb25BbGlnbiA9IHJlZmVyZW5jZVthbGlnbkxlbmd0aF0gLyAyIC0gZmxvYXRpbmdbYWxpZ25MZW5ndGhdIC8gMjtcbiAgbGV0IGNvb3JkcztcbiAgc3dpdGNoIChzaWRlKSB7XG4gICAgY2FzZSAndG9wJzpcbiAgICAgIGNvb3JkcyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBmbG9hdGluZy5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdib3R0b20nOlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlICdyaWdodCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICBjb29yZHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54IC0gZmxvYXRpbmcud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBkZWZhdWx0OlxuICAgICAgY29vcmRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cbiAgc3dpdGNoIChnZXRBbGlnbm1lbnQocGxhY2VtZW50KSkge1xuICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgIGNvb3Jkc1thbGlnbm1lbnRBeGlzXSAtPSBjb21tb25BbGlnbiAqIChydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMSk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdlbmQnOlxuICAgICAgY29vcmRzW2FsaWdubWVudEF4aXNdICs9IGNvbW1vbkFsaWduICogKHJ0bCAmJiBpc1ZlcnRpY2FsID8gLTEgOiAxKTtcbiAgICAgIGJyZWFrO1xuICB9XG4gIHJldHVybiBjb29yZHM7XG59XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICpcbiAqIFRoaXMgZXhwb3J0IGRvZXMgbm90IGhhdmUgYW55IGBwbGF0Zm9ybWAgaW50ZXJmYWNlIGxvZ2ljLiBZb3Ugd2lsbCBuZWVkIHRvXG4gKiB3cml0ZSBvbmUgZm9yIHRoZSBwbGF0Zm9ybSB5b3UgYXJlIHVzaW5nIEZsb2F0aW5nIFVJIHdpdGguXG4gKi9cbmNvbnN0IGNvbXB1dGVQb3NpdGlvbiA9IGFzeW5jIChyZWZlcmVuY2UsIGZsb2F0aW5nLCBjb25maWcpID0+IHtcbiAgY29uc3Qge1xuICAgIHBsYWNlbWVudCA9ICdib3R0b20nLFxuICAgIHN0cmF0ZWd5ID0gJ2Fic29sdXRlJyxcbiAgICBtaWRkbGV3YXJlID0gW10sXG4gICAgcGxhdGZvcm1cbiAgfSA9IGNvbmZpZztcbiAgY29uc3QgdmFsaWRNaWRkbGV3YXJlID0gbWlkZGxld2FyZS5maWx0ZXIoQm9vbGVhbik7XG4gIGNvbnN0IHJ0bCA9IGF3YWl0IChwbGF0Zm9ybS5pc1JUTCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uaXNSVEwoZmxvYXRpbmcpKTtcbiAgbGV0IHJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICByZWZlcmVuY2UsXG4gICAgZmxvYXRpbmcsXG4gICAgc3RyYXRlZ3lcbiAgfSk7XG4gIGxldCB7XG4gICAgeCxcbiAgICB5XG4gIH0gPSBjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudChyZWN0cywgcGxhY2VtZW50LCBydGwpO1xuICBsZXQgc3RhdGVmdWxQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gIGxldCBtaWRkbGV3YXJlRGF0YSA9IHt9O1xuICBsZXQgcmVzZXRDb3VudCA9IDA7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsaWRNaWRkbGV3YXJlLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qge1xuICAgICAgbmFtZSxcbiAgICAgIGZuXG4gICAgfSA9IHZhbGlkTWlkZGxld2FyZVtpXTtcbiAgICBjb25zdCB7XG4gICAgICB4OiBuZXh0WCxcbiAgICAgIHk6IG5leHRZLFxuICAgICAgZGF0YSxcbiAgICAgIHJlc2V0XG4gICAgfSA9IGF3YWl0IGZuKHtcbiAgICAgIHgsXG4gICAgICB5LFxuICAgICAgaW5pdGlhbFBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcbiAgICAgIHN0cmF0ZWd5LFxuICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHM6IHtcbiAgICAgICAgcmVmZXJlbmNlLFxuICAgICAgICBmbG9hdGluZ1xuICAgICAgfVxuICAgIH0pO1xuICAgIHggPSBuZXh0WCAhPSBudWxsID8gbmV4dFggOiB4O1xuICAgIHkgPSBuZXh0WSAhPSBudWxsID8gbmV4dFkgOiB5O1xuICAgIG1pZGRsZXdhcmVEYXRhID0ge1xuICAgICAgLi4ubWlkZGxld2FyZURhdGEsXG4gICAgICBbbmFtZV06IHtcbiAgICAgICAgLi4ubWlkZGxld2FyZURhdGFbbmFtZV0sXG4gICAgICAgIC4uLmRhdGFcbiAgICAgIH1cbiAgICB9O1xuICAgIGlmIChyZXNldCAmJiByZXNldENvdW50IDw9IDUwKSB7XG4gICAgICByZXNldENvdW50Kys7XG4gICAgICBpZiAodHlwZW9mIHJlc2V0ID09PSAnb2JqZWN0Jykge1xuICAgICAgICBpZiAocmVzZXQucGxhY2VtZW50KSB7XG4gICAgICAgICAgc3RhdGVmdWxQbGFjZW1lbnQgPSByZXNldC5wbGFjZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc2V0LnJlY3RzKSB7XG4gICAgICAgICAgcmVjdHMgPSByZXNldC5yZWN0cyA9PT0gdHJ1ZSA/IGF3YWl0IHBsYXRmb3JtLmdldEVsZW1lbnRSZWN0cyh7XG4gICAgICAgICAgICByZWZlcmVuY2UsXG4gICAgICAgICAgICBmbG9hdGluZyxcbiAgICAgICAgICAgIHN0cmF0ZWd5XG4gICAgICAgICAgfSkgOiByZXNldC5yZWN0cztcbiAgICAgICAgfVxuICAgICAgICAoe1xuICAgICAgICAgIHgsXG4gICAgICAgICAgeVxuICAgICAgICB9ID0gY29tcHV0ZUNvb3Jkc0Zyb21QbGFjZW1lbnQocmVjdHMsIHN0YXRlZnVsUGxhY2VtZW50LCBydGwpKTtcbiAgICAgIH1cbiAgICAgIGkgPSAtMTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4LFxuICAgIHksXG4gICAgcGxhY2VtZW50OiBzdGF0ZWZ1bFBsYWNlbWVudCxcbiAgICBzdHJhdGVneSxcbiAgICBtaWRkbGV3YXJlRGF0YVxuICB9O1xufTtcblxuLyoqXG4gKiBSZXNvbHZlcyB3aXRoIGFuIG9iamVjdCBvZiBvdmVyZmxvdyBzaWRlIG9mZnNldHMgdGhhdCBkZXRlcm1pbmUgaG93IG11Y2ggdGhlXG4gKiBlbGVtZW50IGlzIG92ZXJmbG93aW5nIGEgZ2l2ZW4gY2xpcHBpbmcgYm91bmRhcnkgb24gZWFjaCBzaWRlLlxuICogLSBwb3NpdGl2ZSA9IG92ZXJmbG93aW5nIHRoZSBib3VuZGFyeSBieSB0aGF0IG51bWJlciBvZiBwaXhlbHNcbiAqIC0gbmVnYXRpdmUgPSBob3cgbWFueSBwaXhlbHMgbGVmdCBiZWZvcmUgaXQgd2lsbCBvdmVyZmxvd1xuICogLSAwID0gbGllcyBmbHVzaCB3aXRoIHRoZSBib3VuZGFyeVxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2RldGVjdE92ZXJmbG93XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGRldGVjdE92ZXJmbG93KHN0YXRlLCBvcHRpb25zKSB7XG4gIHZhciBfYXdhaXQkcGxhdGZvcm0kaXNFbGU7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgY29uc3Qge1xuICAgIHgsXG4gICAgeSxcbiAgICBwbGF0Zm9ybSxcbiAgICByZWN0cyxcbiAgICBlbGVtZW50cyxcbiAgICBzdHJhdGVneVxuICB9ID0gc3RhdGU7XG4gIGNvbnN0IHtcbiAgICBib3VuZGFyeSA9ICdjbGlwcGluZ0FuY2VzdG9ycycsXG4gICAgcm9vdEJvdW5kYXJ5ID0gJ3ZpZXdwb3J0JyxcbiAgICBlbGVtZW50Q29udGV4dCA9ICdmbG9hdGluZycsXG4gICAgYWx0Qm91bmRhcnkgPSBmYWxzZSxcbiAgICBwYWRkaW5nID0gMFxuICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICBjb25zdCBwYWRkaW5nT2JqZWN0ID0gZ2V0UGFkZGluZ09iamVjdChwYWRkaW5nKTtcbiAgY29uc3QgYWx0Q29udGV4dCA9IGVsZW1lbnRDb250ZXh0ID09PSAnZmxvYXRpbmcnID8gJ3JlZmVyZW5jZScgOiAnZmxvYXRpbmcnO1xuICBjb25zdCBlbGVtZW50ID0gZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuICBjb25zdCBjbGlwcGluZ0NsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KGF3YWl0IHBsYXRmb3JtLmdldENsaXBwaW5nUmVjdCh7XG4gICAgZWxlbWVudDogKChfYXdhaXQkcGxhdGZvcm0kaXNFbGUgPSBhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoZWxlbWVudCkpKSAhPSBudWxsID8gX2F3YWl0JHBsYXRmb3JtJGlzRWxlIDogdHJ1ZSkgPyBlbGVtZW50IDogZWxlbWVudC5jb250ZXh0RWxlbWVudCB8fCAoYXdhaXQgKHBsYXRmb3JtLmdldERvY3VtZW50RWxlbWVudCA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnRzLmZsb2F0aW5nKSkpLFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9KSk7XG4gIGNvbnN0IHJlY3QgPSBlbGVtZW50Q29udGV4dCA9PT0gJ2Zsb2F0aW5nJyA/IHtcbiAgICB4LFxuICAgIHksXG4gICAgd2lkdGg6IHJlY3RzLmZsb2F0aW5nLndpZHRoLFxuICAgIGhlaWdodDogcmVjdHMuZmxvYXRpbmcuaGVpZ2h0XG4gIH0gOiByZWN0cy5yZWZlcmVuY2U7XG4gIGNvbnN0IG9mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBvZmZzZXRTY2FsZSA9IChhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQob2Zmc2V0UGFyZW50KSkpID8gKGF3YWl0IChwbGF0Zm9ybS5nZXRTY2FsZSA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0U2NhbGUob2Zmc2V0UGFyZW50KSkpIHx8IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfSA6IHtcbiAgICB4OiAxLFxuICAgIHk6IDFcbiAgfTtcbiAgY29uc3QgZWxlbWVudENsaWVudFJlY3QgPSByZWN0VG9DbGllbnRSZWN0KHBsYXRmb3JtLmNvbnZlcnRPZmZzZXRQYXJlbnRSZWxhdGl2ZVJlY3RUb1ZpZXdwb3J0UmVsYXRpdmVSZWN0ID8gYXdhaXQgcGxhdGZvcm0uY29udmVydE9mZnNldFBhcmVudFJlbGF0aXZlUmVjdFRvVmlld3BvcnRSZWxhdGl2ZVJlY3Qoe1xuICAgIGVsZW1lbnRzLFxuICAgIHJlY3QsXG4gICAgb2Zmc2V0UGFyZW50LFxuICAgIHN0cmF0ZWd5XG4gIH0pIDogcmVjdCk7XG4gIHJldHVybiB7XG4gICAgdG9wOiAoY2xpcHBpbmdDbGllbnRSZWN0LnRvcCAtIGVsZW1lbnRDbGllbnRSZWN0LnRvcCArIHBhZGRpbmdPYmplY3QudG9wKSAvIG9mZnNldFNjYWxlLnksXG4gICAgYm90dG9tOiAoZWxlbWVudENsaWVudFJlY3QuYm90dG9tIC0gY2xpcHBpbmdDbGllbnRSZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSAvIG9mZnNldFNjYWxlLnksXG4gICAgbGVmdDogKGNsaXBwaW5nQ2xpZW50UmVjdC5sZWZ0IC0gZWxlbWVudENsaWVudFJlY3QubGVmdCArIHBhZGRpbmdPYmplY3QubGVmdCkgLyBvZmZzZXRTY2FsZS54LFxuICAgIHJpZ2h0OiAoZWxlbWVudENsaWVudFJlY3QucmlnaHQgLSBjbGlwcGluZ0NsaWVudFJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0KSAvIG9mZnNldFNjYWxlLnhcbiAgfTtcbn1cblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIHBvc2l0aW9uIGFuIGlubmVyIGVsZW1lbnQgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgc28gdGhhdCBpdFxuICogYXBwZWFycyBjZW50ZXJlZCB0byB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXJyb3dcbiAqL1xuY29uc3QgYXJyb3cgPSBvcHRpb25zID0+ICh7XG4gIG5hbWU6ICdhcnJvdycsXG4gIG9wdGlvbnMsXG4gIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgY29uc3Qge1xuICAgICAgeCxcbiAgICAgIHksXG4gICAgICBwbGFjZW1lbnQsXG4gICAgICByZWN0cyxcbiAgICAgIHBsYXRmb3JtLFxuICAgICAgZWxlbWVudHMsXG4gICAgICBtaWRkbGV3YXJlRGF0YVxuICAgIH0gPSBzdGF0ZTtcbiAgICAvLyBTaW5jZSBgZWxlbWVudGAgaXMgcmVxdWlyZWQsIHdlIGRvbid0IFBhcnRpYWw8PiB0aGUgdHlwZS5cbiAgICBjb25zdCB7XG4gICAgICBlbGVtZW50LFxuICAgICAgcGFkZGluZyA9IDBcbiAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpIHx8IHt9O1xuICAgIGlmIChlbGVtZW50ID09IG51bGwpIHtcbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgeCxcbiAgICAgIHlcbiAgICB9O1xuICAgIGNvbnN0IGF4aXMgPSBnZXRBbGlnbm1lbnRBeGlzKHBsYWNlbWVudCk7XG4gICAgY29uc3QgbGVuZ3RoID0gZ2V0QXhpc0xlbmd0aChheGlzKTtcbiAgICBjb25zdCBhcnJvd0RpbWVuc2lvbnMgPSBhd2FpdCBwbGF0Zm9ybS5nZXREaW1lbnNpb25zKGVsZW1lbnQpO1xuICAgIGNvbnN0IGlzWUF4aXMgPSBheGlzID09PSAneSc7XG4gICAgY29uc3QgbWluUHJvcCA9IGlzWUF4aXMgPyAndG9wJyA6ICdsZWZ0JztcbiAgICBjb25zdCBtYXhQcm9wID0gaXNZQXhpcyA/ICdib3R0b20nIDogJ3JpZ2h0JztcbiAgICBjb25zdCBjbGllbnRQcm9wID0gaXNZQXhpcyA/ICdjbGllbnRIZWlnaHQnIDogJ2NsaWVudFdpZHRoJztcbiAgICBjb25zdCBlbmREaWZmID0gcmVjdHMucmVmZXJlbmNlW2xlbmd0aF0gKyByZWN0cy5yZWZlcmVuY2VbYXhpc10gLSBjb29yZHNbYXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIGNvbnN0IHN0YXJ0RGlmZiA9IGNvb3Jkc1theGlzXSAtIHJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgICBjb25zdCBhcnJvd09mZnNldFBhcmVudCA9IGF3YWl0IChwbGF0Zm9ybS5nZXRPZmZzZXRQYXJlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmdldE9mZnNldFBhcmVudChlbGVtZW50KSk7XG4gICAgbGV0IGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudCA/IGFycm93T2Zmc2V0UGFyZW50W2NsaWVudFByb3BdIDogMDtcblxuICAgIC8vIERPTSBwbGF0Zm9ybSBjYW4gcmV0dXJuIGB3aW5kb3dgIGFzIHRoZSBgb2Zmc2V0UGFyZW50YC5cbiAgICBpZiAoIWNsaWVudFNpemUgfHwgIShhd2FpdCAocGxhdGZvcm0uaXNFbGVtZW50ID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc0VsZW1lbnQoYXJyb3dPZmZzZXRQYXJlbnQpKSkpIHtcbiAgICAgIGNsaWVudFNpemUgPSBlbGVtZW50cy5mbG9hdGluZ1tjbGllbnRQcm9wXSB8fCByZWN0cy5mbG9hdGluZ1tsZW5ndGhdO1xuICAgIH1cbiAgICBjb25zdCBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjtcblxuICAgIC8vIElmIHRoZSBwYWRkaW5nIGlzIGxhcmdlIGVub3VnaCB0aGF0IGl0IGNhdXNlcyB0aGUgYXJyb3cgdG8gbm8gbG9uZ2VyIGJlXG4gICAgLy8gY2VudGVyZWQsIG1vZGlmeSB0aGUgcGFkZGluZyBzbyB0aGF0IGl0IGlzIGNlbnRlcmVkLlxuICAgIGNvbnN0IGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcgPSBjbGllbnRTaXplIC8gMiAtIGFycm93RGltZW5zaW9uc1tsZW5ndGhdIC8gMiAtIDE7XG4gICAgY29uc3QgbWluUGFkZGluZyA9IG1pbihwYWRkaW5nT2JqZWN0W21pblByb3BdLCBsYXJnZXN0UG9zc2libGVQYWRkaW5nKTtcbiAgICBjb25zdCBtYXhQYWRkaW5nID0gbWluKHBhZGRpbmdPYmplY3RbbWF4UHJvcF0sIGxhcmdlc3RQb3NzaWJsZVBhZGRpbmcpO1xuXG4gICAgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBmbG9hdGluZyBlbGVtZW50IGlmIHRoZSBjZW50ZXJcbiAgICAvLyBwb2ludCBpcyBvdXRzaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50J3MgYm91bmRzLlxuICAgIGNvbnN0IG1pbiQxID0gbWluUGFkZGluZztcbiAgICBjb25zdCBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLSBtYXhQYWRkaW5nO1xuICAgIGNvbnN0IGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dEaW1lbnNpb25zW2xlbmd0aF0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gICAgY29uc3Qgb2Zmc2V0ID0gY2xhbXAobWluJDEsIGNlbnRlciwgbWF4KTtcblxuICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGwgZW5vdWdoIHRoYXQgdGhlIGFycm93J3MgcGFkZGluZyBjYXVzZXMgaXQgdG9cbiAgICAvLyB0byBwb2ludCB0byBub3RoaW5nIGZvciBhbiBhbGlnbmVkIHBsYWNlbWVudCwgYWRqdXN0IHRoZSBvZmZzZXQgb2YgdGhlXG4gICAgLy8gZmxvYXRpbmcgZWxlbWVudCBpdHNlbGYuIFRvIGVuc3VyZSBgc2hpZnQoKWAgY29udGludWVzIHRvIHRha2UgYWN0aW9uLFxuICAgIC8vIGEgc2luZ2xlIHJlc2V0IGlzIHBlcmZvcm1lZCB3aGVuIHRoaXMgaXMgdHJ1ZS5cbiAgICBjb25zdCBzaG91bGRBZGRPZmZzZXQgPSAhbWlkZGxld2FyZURhdGEuYXJyb3cgJiYgZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT0gbnVsbCAmJiBjZW50ZXIgIT09IG9mZnNldCAmJiByZWN0cy5yZWZlcmVuY2VbbGVuZ3RoXSAvIDIgLSAoY2VudGVyIDwgbWluJDEgPyBtaW5QYWRkaW5nIDogbWF4UGFkZGluZykgLSBhcnJvd0RpbWVuc2lvbnNbbGVuZ3RoXSAvIDIgPCAwO1xuICAgIGNvbnN0IGFsaWdubWVudE9mZnNldCA9IHNob3VsZEFkZE9mZnNldCA/IGNlbnRlciA8IG1pbiQxID8gY2VudGVyIC0gbWluJDEgOiBjZW50ZXIgLSBtYXggOiAwO1xuICAgIHJldHVybiB7XG4gICAgICBbYXhpc106IGNvb3Jkc1theGlzXSArIGFsaWdubWVudE9mZnNldCxcbiAgICAgIGRhdGE6IHtcbiAgICAgICAgW2F4aXNdOiBvZmZzZXQsXG4gICAgICAgIGNlbnRlck9mZnNldDogY2VudGVyIC0gb2Zmc2V0IC0gYWxpZ25tZW50T2Zmc2V0LFxuICAgICAgICAuLi4oc2hvdWxkQWRkT2Zmc2V0ICYmIHtcbiAgICAgICAgICBhbGlnbm1lbnRPZmZzZXRcbiAgICAgICAgfSlcbiAgICAgIH0sXG4gICAgICByZXNldDogc2hvdWxkQWRkT2Zmc2V0XG4gICAgfTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIGdldFBsYWNlbWVudExpc3QoYWxpZ25tZW50LCBhdXRvQWxpZ25tZW50LCBhbGxvd2VkUGxhY2VtZW50cykge1xuICBjb25zdCBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50ID0gYWxpZ25tZW50ID8gWy4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgPT09IGFsaWdubWVudCksIC4uLmFsbG93ZWRQbGFjZW1lbnRzLmZpbHRlcihwbGFjZW1lbnQgPT4gZ2V0QWxpZ25tZW50KHBsYWNlbWVudCkgIT09IGFsaWdubWVudCldIDogYWxsb3dlZFBsYWNlbWVudHMuZmlsdGVyKHBsYWNlbWVudCA9PiBnZXRTaWRlKHBsYWNlbWVudCkgPT09IHBsYWNlbWVudCk7XG4gIHJldHVybiBhbGxvd2VkUGxhY2VtZW50c1NvcnRlZEJ5QWxpZ25tZW50LmZpbHRlcihwbGFjZW1lbnQgPT4ge1xuICAgIGlmIChhbGlnbm1lbnQpIHtcbiAgICAgIHJldHVybiBnZXRBbGlnbm1lbnQocGxhY2VtZW50KSA9PT0gYWxpZ25tZW50IHx8IChhdXRvQWxpZ25tZW50ID8gZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQocGxhY2VtZW50KSAhPT0gcGxhY2VtZW50IDogZmFsc2UpO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSk7XG59XG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnYXV0b1BsYWNlbWVudCcsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRhdXRvUCwgX21pZGRsZXdhcmVEYXRhJGF1dG9QMiwgX3BsYWNlbWVudHNUaGF0Rml0T25FO1xuICAgICAgY29uc3Qge1xuICAgICAgICByZWN0cyxcbiAgICAgICAgbWlkZGxld2FyZURhdGEsXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBhbGlnbm1lbnQsXG4gICAgICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cyxcbiAgICAgICAgYXV0b0FsaWdubWVudCA9IHRydWUsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHMkMSA9IGFsaWdubWVudCAhPT0gdW5kZWZpbmVkIHx8IGFsbG93ZWRQbGFjZW1lbnRzID09PSBwbGFjZW1lbnRzID8gZ2V0UGxhY2VtZW50TGlzdChhbGlnbm1lbnQgfHwgbnVsbCwgYXV0b0FsaWdubWVudCwgYWxsb3dlZFBsYWNlbWVudHMpIDogYWxsb3dlZFBsYWNlbWVudHM7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gKChfbWlkZGxld2FyZURhdGEkYXV0b1AgPSBtaWRkbGV3YXJlRGF0YS5hdXRvUGxhY2VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGF1dG9QLmluZGV4KSB8fCAwO1xuICAgICAgY29uc3QgY3VycmVudFBsYWNlbWVudCA9IHBsYWNlbWVudHMkMVtjdXJyZW50SW5kZXhdO1xuICAgICAgaWYgKGN1cnJlbnRQbGFjZW1lbnQgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICBjb25zdCBhbGlnbm1lbnRTaWRlcyA9IGdldEFsaWdubWVudFNpZGVzKGN1cnJlbnRQbGFjZW1lbnQsIHJlY3RzLCBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSkpO1xuXG4gICAgICAvLyBNYWtlIGBjb21wdXRlQ29vcmRzYCBzdGFydCBmcm9tIHRoZSByaWdodCBwbGFjZS5cbiAgICAgIGlmIChwbGFjZW1lbnQgIT09IGN1cnJlbnRQbGFjZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnRzJDFbMF1cbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBjdXJyZW50T3ZlcmZsb3dzID0gW292ZXJmbG93W2dldFNpZGUoY3VycmVudFBsYWNlbWVudCldLCBvdmVyZmxvd1thbGlnbm1lbnRTaWRlc1swXV0sIG92ZXJmbG93W2FsaWdubWVudFNpZGVzWzFdXV07XG4gICAgICBjb25zdCBhbGxPdmVyZmxvd3MgPSBbLi4uKCgoX21pZGRsZXdhcmVEYXRhJGF1dG9QMiA9IG1pZGRsZXdhcmVEYXRhLmF1dG9QbGFjZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkYXV0b1AyLm92ZXJmbG93cykgfHwgW10pLCB7XG4gICAgICAgIHBsYWNlbWVudDogY3VycmVudFBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzOiBjdXJyZW50T3ZlcmZsb3dzXG4gICAgICB9XTtcbiAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzJDFbY3VycmVudEluZGV4ICsgMV07XG5cbiAgICAgIC8vIFRoZXJlIGFyZSBtb3JlIHBsYWNlbWVudHMgdG8gY2hlY2suXG4gICAgICBpZiAobmV4dFBsYWNlbWVudCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGluZGV4OiBjdXJyZW50SW5kZXggKyAxLFxuICAgICAgICAgICAgb3ZlcmZsb3dzOiBhbGxPdmVyZmxvd3NcbiAgICAgICAgICB9LFxuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICBwbGFjZW1lbnQ6IG5leHRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBjb25zdCBwbGFjZW1lbnRzU29ydGVkQnlNb3N0U3BhY2UgPSBhbGxPdmVyZmxvd3MubWFwKGQgPT4ge1xuICAgICAgICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQoZC5wbGFjZW1lbnQpO1xuICAgICAgICByZXR1cm4gW2QucGxhY2VtZW50LCBhbGlnbm1lbnQgJiYgY3Jvc3NBeGlzID9cbiAgICAgICAgLy8gQ2hlY2sgYWxvbmcgdGhlIG1haW5BeGlzIGFuZCBtYWluIGNyb3NzQXhpcyBzaWRlLlxuICAgICAgICBkLm92ZXJmbG93cy5zbGljZSgwLCAyKS5yZWR1Y2UoKGFjYywgdikgPT4gYWNjICsgdiwgMCkgOlxuICAgICAgICAvLyBDaGVjayBvbmx5IHRoZSBtYWluQXhpcy5cbiAgICAgICAgZC5vdmVyZmxvd3NbMF0sIGQub3ZlcmZsb3dzXTtcbiAgICAgIH0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKTtcbiAgICAgIGNvbnN0IHBsYWNlbWVudHNUaGF0Rml0T25FYWNoU2lkZSA9IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZS5maWx0ZXIoZCA9PiBkWzJdLnNsaWNlKDAsXG4gICAgICAvLyBBbGlnbmVkIHBsYWNlbWVudHMgc2hvdWxkIG5vdCBjaGVjayB0aGVpciBvcHBvc2l0ZSBjcm9zc0F4aXNcbiAgICAgIC8vIHNpZGUuXG4gICAgICBnZXRBbGlnbm1lbnQoZFswXSkgPyAyIDogMykuZXZlcnkodiA9PiB2IDw9IDApKTtcbiAgICAgIGNvbnN0IHJlc2V0UGxhY2VtZW50ID0gKChfcGxhY2VtZW50c1RoYXRGaXRPbkUgPSBwbGFjZW1lbnRzVGhhdEZpdE9uRWFjaFNpZGVbMF0pID09IG51bGwgPyB2b2lkIDAgOiBfcGxhY2VtZW50c1RoYXRGaXRPbkVbMF0pIHx8IHBsYWNlbWVudHNTb3J0ZWRCeU1vc3RTcGFjZVswXVswXTtcbiAgICAgIGlmIChyZXNldFBsYWNlbWVudCAhPT0gcGxhY2VtZW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGF0YToge1xuICAgICAgICAgICAgaW5kZXg6IGN1cnJlbnRJbmRleCArIDEsXG4gICAgICAgICAgICBvdmVyZmxvd3M6IGFsbE92ZXJmbG93c1xuICAgICAgICAgIH0sXG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHBsYWNlbWVudDogcmVzZXRQbGFjZW1lbnRcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge307XG4gICAgfVxuICB9O1xufTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2ZsaXAnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfbWlkZGxld2FyZURhdGEkYXJyb3csIF9taWRkbGV3YXJlRGF0YSRmbGlwO1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIG1pZGRsZXdhcmVEYXRhLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgaW5pdGlhbFBsYWNlbWVudCxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIGVsZW1lbnRzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IHRydWUsXG4gICAgICAgIGZhbGxiYWNrUGxhY2VtZW50czogc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzLFxuICAgICAgICBmYWxsYmFja1N0cmF0ZWd5ID0gJ2Jlc3RGaXQnLFxuICAgICAgICBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uID0gJ25vbmUnLFxuICAgICAgICBmbGlwQWxpZ25tZW50ID0gdHJ1ZSxcbiAgICAgICAgLi4uZGV0ZWN0T3ZlcmZsb3dPcHRpb25zXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuXG4gICAgICAvLyBJZiBhIHJlc2V0IGJ5IHRoZSBhcnJvdyB3YXMgY2F1c2VkIGR1ZSB0byBhbiBhbGlnbm1lbnQgb2Zmc2V0IGJlaW5nXG4gICAgICAvLyBhZGRlZCwgd2Ugc2hvdWxkIHNraXAgYW55IGxvZ2ljIG5vdyBzaW5jZSBgZmxpcCgpYCBoYXMgYWxyZWFkeSBkb25lIGl0c1xuICAgICAgLy8gd29yay5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjU0OSNpc3N1ZWNvbW1lbnQtMTcxOTYwMTY0M1xuICAgICAgaWYgKChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHNpZGUgPSBnZXRTaWRlKHBsYWNlbWVudCk7XG4gICAgICBjb25zdCBpbml0aWFsU2lkZUF4aXMgPSBnZXRTaWRlQXhpcyhpbml0aWFsUGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGlzQmFzZVBsYWNlbWVudCA9IGdldFNpZGUoaW5pdGlhbFBsYWNlbWVudCkgPT09IGluaXRpYWxQbGFjZW1lbnQ7XG4gICAgICBjb25zdCBydGwgPSBhd2FpdCAocGxhdGZvcm0uaXNSVEwgPT0gbnVsbCA/IHZvaWQgMCA6IHBsYXRmb3JtLmlzUlRMKGVsZW1lbnRzLmZsb2F0aW5nKSk7XG4gICAgICBjb25zdCBmYWxsYmFja1BsYWNlbWVudHMgPSBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHwgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcEFsaWdubWVudCA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChpbml0aWFsUGxhY2VtZW50KV0gOiBnZXRFeHBhbmRlZFBsYWNlbWVudHMoaW5pdGlhbFBsYWNlbWVudCkpO1xuICAgICAgY29uc3QgaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiA9IGZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24gIT09ICdub25lJztcbiAgICAgIGlmICghc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzICYmIGhhc0ZhbGxiYWNrQXhpc1NpZGVEaXJlY3Rpb24pIHtcbiAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzLnB1c2goLi4uZ2V0T3Bwb3NpdGVBeGlzUGxhY2VtZW50cyhpbml0aWFsUGxhY2VtZW50LCBmbGlwQWxpZ25tZW50LCBmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uLCBydGwpKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBsYWNlbWVudHMgPSBbaW5pdGlhbFBsYWNlbWVudCwgLi4uZmFsbGJhY2tQbGFjZW1lbnRzXTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBvdmVyZmxvd3MgPSBbXTtcbiAgICAgIGxldCBvdmVyZmxvd3NEYXRhID0gKChfbWlkZGxld2FyZURhdGEkZmxpcCA9IG1pZGRsZXdhcmVEYXRhLmZsaXApID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkZmxpcC5vdmVyZmxvd3MpIHx8IFtdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZV0pO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIGNvbnN0IHNpZGVzID0gZ2V0QWxpZ25tZW50U2lkZXMocGxhY2VtZW50LCByZWN0cywgcnRsKTtcbiAgICAgICAgb3ZlcmZsb3dzLnB1c2gob3ZlcmZsb3dbc2lkZXNbMF1dLCBvdmVyZmxvd1tzaWRlc1sxXV0pO1xuICAgICAgfVxuICAgICAgb3ZlcmZsb3dzRGF0YSA9IFsuLi5vdmVyZmxvd3NEYXRhLCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgb3ZlcmZsb3dzXG4gICAgICB9XTtcblxuICAgICAgLy8gT25lIG9yIG1vcmUgc2lkZXMgaXMgb3ZlcmZsb3dpbmcuXG4gICAgICBpZiAoIW92ZXJmbG93cy5ldmVyeShzaWRlID0+IHNpZGUgPD0gMCkpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRmbGlwMiwgX292ZXJmbG93c0RhdGEkZmlsdGVyO1xuICAgICAgICBjb25zdCBuZXh0SW5kZXggPSAoKChfbWlkZGxld2FyZURhdGEkZmxpcDIgPSBtaWRkbGV3YXJlRGF0YS5mbGlwKSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJGZsaXAyLmluZGV4KSB8fCAwKSArIDE7XG4gICAgICAgIGNvbnN0IG5leHRQbGFjZW1lbnQgPSBwbGFjZW1lbnRzW25leHRJbmRleF07XG4gICAgICAgIGlmIChuZXh0UGxhY2VtZW50KSB7XG4gICAgICAgICAgY29uc3QgaWdub3JlQ3Jvc3NBeGlzT3ZlcmZsb3cgPSBjaGVja0Nyb3NzQXhpcyA9PT0gJ2FsaWdubWVudCcgPyBpbml0aWFsU2lkZUF4aXMgIT09IGdldFNpZGVBeGlzKG5leHRQbGFjZW1lbnQpIDogZmFsc2U7XG4gICAgICAgICAgaWYgKCFpZ25vcmVDcm9zc0F4aXNPdmVyZmxvdyB8fFxuICAgICAgICAgIC8vIFdlIGxlYXZlIHRoZSBjdXJyZW50IG1haW4gYXhpcyBvbmx5IGlmIGV2ZXJ5IHBsYWNlbWVudCBvbiB0aGF0IGF4aXNcbiAgICAgICAgICAvLyBvdmVyZmxvd3MgdGhlIG1haW4gYXhpcy5cbiAgICAgICAgICBvdmVyZmxvd3NEYXRhLmV2ZXJ5KGQgPT4gZ2V0U2lkZUF4aXMoZC5wbGFjZW1lbnQpID09PSBpbml0aWFsU2lkZUF4aXMgPyBkLm92ZXJmbG93c1swXSA+IDAgOiB0cnVlKSkge1xuICAgICAgICAgICAgLy8gVHJ5IG5leHQgcGxhY2VtZW50IGFuZCByZS1ydW4gdGhlIGxpZmVjeWNsZS5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICBpbmRleDogbmV4dEluZGV4LFxuICAgICAgICAgICAgICAgIG92ZXJmbG93czogb3ZlcmZsb3dzRGF0YVxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICByZXNldDoge1xuICAgICAgICAgICAgICAgIHBsYWNlbWVudDogbmV4dFBsYWNlbWVudFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZpcnN0LCBmaW5kIHRoZSBjYW5kaWRhdGVzIHRoYXQgZml0IG9uIHRoZSBtYWluQXhpcyBzaWRlIG9mIG92ZXJmbG93LFxuICAgICAgICAvLyB0aGVuIGZpbmQgdGhlIHBsYWNlbWVudCB0aGF0IGZpdHMgdGhlIGJlc3Qgb24gdGhlIG1haW4gY3Jvc3NBeGlzIHNpZGUuXG4gICAgICAgIGxldCByZXNldFBsYWNlbWVudCA9IChfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIgPSBvdmVyZmxvd3NEYXRhLmZpbHRlcihkID0+IGQub3ZlcmZsb3dzWzBdIDw9IDApLnNvcnQoKGEsIGIpID0+IGEub3ZlcmZsb3dzWzFdIC0gYi5vdmVyZmxvd3NbMV0pWzBdKSA9PSBudWxsID8gdm9pZCAwIDogX292ZXJmbG93c0RhdGEkZmlsdGVyLnBsYWNlbWVudDtcblxuICAgICAgICAvLyBPdGhlcndpc2UgZmFsbGJhY2suXG4gICAgICAgIGlmICghcmVzZXRQbGFjZW1lbnQpIHtcbiAgICAgICAgICBzd2l0Y2ggKGZhbGxiYWNrU3RyYXRlZ3kpIHtcbiAgICAgICAgICAgIGNhc2UgJ2Jlc3RGaXQnOlxuICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgdmFyIF9vdmVyZmxvd3NEYXRhJGZpbHRlcjI7XG4gICAgICAgICAgICAgICAgY29uc3QgcGxhY2VtZW50ID0gKF9vdmVyZmxvd3NEYXRhJGZpbHRlcjIgPSBvdmVyZmxvd3NEYXRhLmZpbHRlcihkID0+IHtcbiAgICAgICAgICAgICAgICAgIGlmIChoYXNGYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTaWRlQXhpcyA9IGdldFNpZGVBeGlzKGQucGxhY2VtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnRTaWRlQXhpcyA9PT0gaW5pdGlhbFNpZGVBeGlzIHx8XG4gICAgICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIGJpYXMgdG8gdGhlIGB5YCBzaWRlIGF4aXMgZHVlIHRvIGhvcml6b250YWxcbiAgICAgICAgICAgICAgICAgICAgLy8gcmVhZGluZyBkaXJlY3Rpb25zIGZhdm9yaW5nIGdyZWF0ZXIgd2lkdGguXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTaWRlQXhpcyA9PT0gJ3knO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfSkubWFwKGQgPT4gW2QucGxhY2VtZW50LCBkLm92ZXJmbG93cy5maWx0ZXIob3ZlcmZsb3cgPT4gb3ZlcmZsb3cgPiAwKS5yZWR1Y2UoKGFjYywgb3ZlcmZsb3cpID0+IGFjYyArIG92ZXJmbG93LCAwKV0pLnNvcnQoKGEsIGIpID0+IGFbMV0gLSBiWzFdKVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9vdmVyZmxvd3NEYXRhJGZpbHRlcjJbMF07XG4gICAgICAgICAgICAgICAgaWYgKHBsYWNlbWVudCkge1xuICAgICAgICAgICAgICAgICAgcmVzZXRQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICdpbml0aWFsUGxhY2VtZW50JzpcbiAgICAgICAgICAgICAgcmVzZXRQbGFjZW1lbnQgPSBpbml0aWFsUGxhY2VtZW50O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHBsYWNlbWVudCAhPT0gcmVzZXRQbGFjZW1lbnQpIHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgICAgcGxhY2VtZW50OiByZXNldFBsYWNlbWVudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5mdW5jdGlvbiBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogb3ZlcmZsb3cudG9wIC0gcmVjdC5oZWlnaHQsXG4gICAgcmlnaHQ6IG92ZXJmbG93LnJpZ2h0IC0gcmVjdC53aWR0aCxcbiAgICBib3R0b206IG92ZXJmbG93LmJvdHRvbSAtIHJlY3QuaGVpZ2h0LFxuICAgIGxlZnQ6IG92ZXJmbG93LmxlZnQgLSByZWN0LndpZHRoXG4gIH07XG59XG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIHNpZGVzLnNvbWUoc2lkZSA9PiBvdmVyZmxvd1tzaWRlXSA+PSAwKTtcbn1cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBoaWRlIHRoZSBmbG9hdGluZyBlbGVtZW50IGluIGFwcGxpY2FibGUgc2l0dWF0aW9ucywgc3VjaCBhc1xuICogd2hlbiBpdCBpcyBub3QgaW4gdGhlIHNhbWUgY2xpcHBpbmcgY29udGV4dCBhcyB0aGUgcmVmZXJlbmNlIGVsZW1lbnQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvaGlkZVxuICovXG5jb25zdCBoaWRlID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICByZXR1cm4ge1xuICAgIG5hbWU6ICdoaWRlJyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJlY3RzXG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHN0cmF0ZWd5ID0gJ3JlZmVyZW5jZUhpZGRlbicsXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIHN3aXRjaCAoc3RyYXRlZ3kpIHtcbiAgICAgICAgY2FzZSAncmVmZXJlbmNlSGlkZGVuJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgZWxlbWVudENvbnRleHQ6ICdyZWZlcmVuY2UnXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdHMucmVmZXJlbmNlKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgICByZWZlcmVuY2VIaWRkZW5PZmZzZXRzOiBvZmZzZXRzLFxuICAgICAgICAgICAgICAgIHJlZmVyZW5jZUhpZGRlbjogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBjYXNlICdlc2NhcGVkJzpcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICAgICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9ucyxcbiAgICAgICAgICAgICAgYWx0Qm91bmRhcnk6IHRydWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3Qgb2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0cy5mbG9hdGluZyk7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgICAgZXNjYXBlZE9mZnNldHM6IG9mZnNldHMsXG4gICAgICAgICAgICAgICAgZXNjYXBlZDogaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG9mZnNldHMpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiB7fTtcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gZ2V0Qm91bmRpbmdSZWN0KHJlY3RzKSB7XG4gIGNvbnN0IG1pblggPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5sZWZ0KSk7XG4gIGNvbnN0IG1pblkgPSBtaW4oLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC50b3ApKTtcbiAgY29uc3QgbWF4WCA9IG1heCguLi5yZWN0cy5tYXAocmVjdCA9PiByZWN0LnJpZ2h0KSk7XG4gIGNvbnN0IG1heFkgPSBtYXgoLi4ucmVjdHMubWFwKHJlY3QgPT4gcmVjdC5ib3R0b20pKTtcbiAgcmV0dXJuIHtcbiAgICB4OiBtaW5YLFxuICAgIHk6IG1pblksXG4gICAgd2lkdGg6IG1heFggLSBtaW5YLFxuICAgIGhlaWdodDogbWF4WSAtIG1pbllcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFJlY3RzQnlMaW5lKHJlY3RzKSB7XG4gIGNvbnN0IHNvcnRlZFJlY3RzID0gcmVjdHMuc2xpY2UoKS5zb3J0KChhLCBiKSA9PiBhLnkgLSBiLnkpO1xuICBjb25zdCBncm91cHMgPSBbXTtcbiAgbGV0IHByZXZSZWN0ID0gbnVsbDtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzb3J0ZWRSZWN0cy5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IHJlY3QgPSBzb3J0ZWRSZWN0c1tpXTtcbiAgICBpZiAoIXByZXZSZWN0IHx8IHJlY3QueSAtIHByZXZSZWN0LnkgPiBwcmV2UmVjdC5oZWlnaHQgLyAyKSB7XG4gICAgICBncm91cHMucHVzaChbcmVjdF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBncm91cHNbZ3JvdXBzLmxlbmd0aCAtIDFdLnB1c2gocmVjdCk7XG4gICAgfVxuICAgIHByZXZSZWN0ID0gcmVjdDtcbiAgfVxuICByZXR1cm4gZ3JvdXBzLm1hcChyZWN0ID0+IHJlY3RUb0NsaWVudFJlY3QoZ2V0Qm91bmRpbmdSZWN0KHJlY3QpKSk7XG59XG4vKipcbiAqIFByb3ZpZGVzIGltcHJvdmVkIHBvc2l0aW9uaW5nIGZvciBpbmxpbmUgcmVmZXJlbmNlIGVsZW1lbnRzIHRoYXQgY2FuIHNwYW5cbiAqIG92ZXIgbXVsdGlwbGUgbGluZXMsIHN1Y2ggYXMgaHlwZXJsaW5rcyBvciByYW5nZSBzZWxlY3Rpb25zLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2lubGluZVxuICovXG5jb25zdCBpbmxpbmUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ2lubGluZScsXG4gICAgb3B0aW9ucyxcbiAgICBhc3luYyBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIGVsZW1lbnRzLFxuICAgICAgICByZWN0cyxcbiAgICAgICAgcGxhdGZvcm0sXG4gICAgICAgIHN0cmF0ZWd5XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICAvLyBBIE1vdXNlRXZlbnQncyBjbGllbnR7WCxZfSBjb29yZHMgY2FuIGJlIHVwIHRvIDIgcGl4ZWxzIG9mZiBhXG4gICAgICAvLyBDbGllbnRSZWN0J3MgYm91bmRzLCBkZXNwaXRlIHRoZSBldmVudCBsaXN0ZW5lciBiZWluZyB0cmlnZ2VyZWQuIEFcbiAgICAgIC8vIHBhZGRpbmcgb2YgMiBzZWVtcyB0byBoYW5kbGUgdGhpcyBpc3N1ZS5cbiAgICAgIGNvbnN0IHtcbiAgICAgICAgcGFkZGluZyA9IDIsXG4gICAgICAgIHgsXG4gICAgICAgIHlcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBuYXRpdmVDbGllbnRSZWN0cyA9IEFycmF5LmZyb20oKGF3YWl0IChwbGF0Zm9ybS5nZXRDbGllbnRSZWN0cyA9PSBudWxsID8gdm9pZCAwIDogcGxhdGZvcm0uZ2V0Q2xpZW50UmVjdHMoZWxlbWVudHMucmVmZXJlbmNlKSkpIHx8IFtdKTtcbiAgICAgIGNvbnN0IGNsaWVudFJlY3RzID0gZ2V0UmVjdHNCeUxpbmUobmF0aXZlQ2xpZW50UmVjdHMpO1xuICAgICAgY29uc3QgZmFsbGJhY2sgPSByZWN0VG9DbGllbnRSZWN0KGdldEJvdW5kaW5nUmVjdChuYXRpdmVDbGllbnRSZWN0cykpO1xuICAgICAgY29uc3QgcGFkZGluZ09iamVjdCA9IGdldFBhZGRpbmdPYmplY3QocGFkZGluZyk7XG4gICAgICBmdW5jdGlvbiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoKSB7XG4gICAgICAgIC8vIFRoZXJlIGFyZSB0d28gcmVjdHMgYW5kIHRoZXkgYXJlIGRpc2pvaW5lZC5cbiAgICAgICAgaWYgKGNsaWVudFJlY3RzLmxlbmd0aCA9PT0gMiAmJiBjbGllbnRSZWN0c1swXS5sZWZ0ID4gY2xpZW50UmVjdHNbMV0ucmlnaHQgJiYgeCAhPSBudWxsICYmIHkgIT0gbnVsbCkge1xuICAgICAgICAgIC8vIEZpbmQgdGhlIGZpcnN0IHJlY3QgaW4gd2hpY2ggdGhlIHBvaW50IGlzIGZ1bGx5IGluc2lkZS5cbiAgICAgICAgICByZXR1cm4gY2xpZW50UmVjdHMuZmluZChyZWN0ID0+IHggPiByZWN0LmxlZnQgLSBwYWRkaW5nT2JqZWN0LmxlZnQgJiYgeCA8IHJlY3QucmlnaHQgKyBwYWRkaW5nT2JqZWN0LnJpZ2h0ICYmIHkgPiByZWN0LnRvcCAtIHBhZGRpbmdPYmplY3QudG9wICYmIHkgPCByZWN0LmJvdHRvbSArIHBhZGRpbmdPYmplY3QuYm90dG9tKSB8fCBmYWxsYmFjaztcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZXJlIGFyZSAyIG9yIG1vcmUgY29ubmVjdGVkIHJlY3RzLlxuICAgICAgICBpZiAoY2xpZW50UmVjdHMubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICBpZiAoZ2V0U2lkZUF4aXMocGxhY2VtZW50KSA9PT0gJ3knKSB7XG4gICAgICAgICAgICBjb25zdCBmaXJzdFJlY3QgPSBjbGllbnRSZWN0c1swXTtcbiAgICAgICAgICAgIGNvbnN0IGxhc3RSZWN0ID0gY2xpZW50UmVjdHNbY2xpZW50UmVjdHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBjb25zdCBpc1RvcCA9IGdldFNpZGUocGxhY2VtZW50KSA9PT0gJ3RvcCc7XG4gICAgICAgICAgICBjb25zdCB0b3AgPSBmaXJzdFJlY3QudG9wO1xuICAgICAgICAgICAgY29uc3QgYm90dG9tID0gbGFzdFJlY3QuYm90dG9tO1xuICAgICAgICAgICAgY29uc3QgbGVmdCA9IGlzVG9wID8gZmlyc3RSZWN0LmxlZnQgOiBsYXN0UmVjdC5sZWZ0O1xuICAgICAgICAgICAgY29uc3QgcmlnaHQgPSBpc1RvcCA/IGZpcnN0UmVjdC5yaWdodCA6IGxhc3RSZWN0LnJpZ2h0O1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgICAgICAgICBjb25zdCBoZWlnaHQgPSBib3R0b20gLSB0b3A7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICB0b3AsXG4gICAgICAgICAgICAgIGJvdHRvbSxcbiAgICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgICAgcmlnaHQsXG4gICAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICAgIHg6IGxlZnQsXG4gICAgICAgICAgICAgIHk6IHRvcFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3QgaXNMZWZ0U2lkZSA9IGdldFNpZGUocGxhY2VtZW50KSA9PT0gJ2xlZnQnO1xuICAgICAgICAgIGNvbnN0IG1heFJpZ2h0ID0gbWF4KC4uLmNsaWVudFJlY3RzLm1hcChyZWN0ID0+IHJlY3QucmlnaHQpKTtcbiAgICAgICAgICBjb25zdCBtaW5MZWZ0ID0gbWluKC4uLmNsaWVudFJlY3RzLm1hcChyZWN0ID0+IHJlY3QubGVmdCkpO1xuICAgICAgICAgIGNvbnN0IG1lYXN1cmVSZWN0cyA9IGNsaWVudFJlY3RzLmZpbHRlcihyZWN0ID0+IGlzTGVmdFNpZGUgPyByZWN0LmxlZnQgPT09IG1pbkxlZnQgOiByZWN0LnJpZ2h0ID09PSBtYXhSaWdodCk7XG4gICAgICAgICAgY29uc3QgdG9wID0gbWVhc3VyZVJlY3RzWzBdLnRvcDtcbiAgICAgICAgICBjb25zdCBib3R0b20gPSBtZWFzdXJlUmVjdHNbbWVhc3VyZVJlY3RzLmxlbmd0aCAtIDFdLmJvdHRvbTtcbiAgICAgICAgICBjb25zdCBsZWZ0ID0gbWluTGVmdDtcbiAgICAgICAgICBjb25zdCByaWdodCA9IG1heFJpZ2h0O1xuICAgICAgICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgICAgICAgIGNvbnN0IGhlaWdodCA9IGJvdHRvbSAtIHRvcDtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdG9wLFxuICAgICAgICAgICAgYm90dG9tLFxuICAgICAgICAgICAgbGVmdCxcbiAgICAgICAgICAgIHJpZ2h0LFxuICAgICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICB4OiBsZWZ0LFxuICAgICAgICAgICAgeTogdG9wXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsbGJhY2s7XG4gICAgICB9XG4gICAgICBjb25zdCByZXNldFJlY3RzID0gYXdhaXQgcGxhdGZvcm0uZ2V0RWxlbWVudFJlY3RzKHtcbiAgICAgICAgcmVmZXJlbmNlOiB7XG4gICAgICAgICAgZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG4gICAgICAgIH0sXG4gICAgICAgIGZsb2F0aW5nOiBlbGVtZW50cy5mbG9hdGluZyxcbiAgICAgICAgc3RyYXRlZ3lcbiAgICAgIH0pO1xuICAgICAgaWYgKHJlY3RzLnJlZmVyZW5jZS54ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS54IHx8IHJlY3RzLnJlZmVyZW5jZS55ICE9PSByZXNldFJlY3RzLnJlZmVyZW5jZS55IHx8IHJlY3RzLnJlZmVyZW5jZS53aWR0aCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2Uud2lkdGggfHwgcmVjdHMucmVmZXJlbmNlLmhlaWdodCAhPT0gcmVzZXRSZWN0cy5yZWZlcmVuY2UuaGVpZ2h0KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcmVzZXQ6IHtcbiAgICAgICAgICAgIHJlY3RzOiByZXNldFJlY3RzXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IG9yaWdpblNpZGVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWydsZWZ0JywgJ3RvcCddKTtcblxuLy8gRm9yIHR5cGUgYmFja3dhcmRzLWNvbXBhdGliaWxpdHksIHRoZSBgT2Zmc2V0T3B0aW9uc2AgdHlwZSB3YXMgYWxzb1xuLy8gRGVyaXZhYmxlLlxuXG5hc3luYyBmdW5jdGlvbiBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucykge1xuICBjb25zdCB7XG4gICAgcGxhY2VtZW50LFxuICAgIHBsYXRmb3JtLFxuICAgIGVsZW1lbnRzXG4gIH0gPSBzdGF0ZTtcbiAgY29uc3QgcnRsID0gYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpO1xuICBjb25zdCBzaWRlID0gZ2V0U2lkZShwbGFjZW1lbnQpO1xuICBjb25zdCBhbGlnbm1lbnQgPSBnZXRBbGlnbm1lbnQocGxhY2VtZW50KTtcbiAgY29uc3QgaXNWZXJ0aWNhbCA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgY29uc3QgbWFpbkF4aXNNdWx0aSA9IG9yaWdpblNpZGVzLmhhcyhzaWRlKSA/IC0xIDogMTtcbiAgY29uc3QgY3Jvc3NBeGlzTXVsdGkgPSBydGwgJiYgaXNWZXJ0aWNhbCA/IC0xIDogMTtcbiAgY29uc3QgcmF3VmFsdWUgPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICBsZXQge1xuICAgIG1haW5BeGlzLFxuICAgIGNyb3NzQXhpcyxcbiAgICBhbGlnbm1lbnRBeGlzXG4gIH0gPSB0eXBlb2YgcmF3VmFsdWUgPT09ICdudW1iZXInID8ge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZSxcbiAgICBjcm9zc0F4aXM6IDAsXG4gICAgYWxpZ25tZW50QXhpczogbnVsbFxuICB9IDoge1xuICAgIG1haW5BeGlzOiByYXdWYWx1ZS5tYWluQXhpcyB8fCAwLFxuICAgIGNyb3NzQXhpczogcmF3VmFsdWUuY3Jvc3NBeGlzIHx8IDAsXG4gICAgYWxpZ25tZW50QXhpczogcmF3VmFsdWUuYWxpZ25tZW50QXhpc1xuICB9O1xuICBpZiAoYWxpZ25tZW50ICYmIHR5cGVvZiBhbGlnbm1lbnRBeGlzID09PSAnbnVtYmVyJykge1xuICAgIGNyb3NzQXhpcyA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyBhbGlnbm1lbnRBeGlzICogLTEgOiBhbGlnbm1lbnRBeGlzO1xuICB9XG4gIHJldHVybiBpc1ZlcnRpY2FsID8ge1xuICAgIHg6IGNyb3NzQXhpcyAqIGNyb3NzQXhpc011bHRpLFxuICAgIHk6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aVxuICB9IDoge1xuICAgIHg6IG1haW5BeGlzICogbWFpbkF4aXNNdWx0aSxcbiAgICB5OiBjcm9zc0F4aXMgKiBjcm9zc0F4aXNNdWx0aVxuICB9O1xufVxuXG4vKipcbiAqIE1vZGlmaWVzIHRoZSBwbGFjZW1lbnQgYnkgdHJhbnNsYXRpbmcgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYWxvbmcgdGhlXG4gKiBzcGVjaWZpZWQgYXhlcy5cbiAqIEEgbnVtYmVyIChzaG9ydGhhbmQgZm9yIGBtYWluQXhpc2Agb3IgZGlzdGFuY2UpLCBvciBhbiBheGVzIGNvbmZpZ3VyYXRpb25cbiAqIG9iamVjdCBtYXkgYmUgcGFzc2VkLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL29mZnNldFxuICovXG5jb25zdCBvZmZzZXQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IDA7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICBvcHRpb25zLFxuICAgIGFzeW5jIGZuKHN0YXRlKSB7XG4gICAgICB2YXIgX21pZGRsZXdhcmVEYXRhJG9mZnNlLCBfbWlkZGxld2FyZURhdGEkYXJyb3c7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHgsXG4gICAgICAgIHksXG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgbWlkZGxld2FyZURhdGFcbiAgICAgIH0gPSBzdGF0ZTtcbiAgICAgIGNvbnN0IGRpZmZDb29yZHMgPSBhd2FpdCBjb252ZXJ0VmFsdWVUb0Nvb3JkcyhzdGF0ZSwgb3B0aW9ucyk7XG5cbiAgICAgIC8vIElmIHRoZSBwbGFjZW1lbnQgaXMgdGhlIHNhbWUgYW5kIHRoZSBhcnJvdyBjYXVzZWQgYW4gYWxpZ25tZW50IG9mZnNldFxuICAgICAgLy8gdGhlbiB3ZSBkb24ndCBuZWVkIHRvIGNoYW5nZSB0aGUgcG9zaXRpb25pbmcgY29vcmRpbmF0ZXMuXG4gICAgICBpZiAocGxhY2VtZW50ID09PSAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZSA9IG1pZGRsZXdhcmVEYXRhLm9mZnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9taWRkbGV3YXJlRGF0YSRvZmZzZS5wbGFjZW1lbnQpICYmIChfbWlkZGxld2FyZURhdGEkYXJyb3cgPSBtaWRkbGV3YXJlRGF0YS5hcnJvdykgIT0gbnVsbCAmJiBfbWlkZGxld2FyZURhdGEkYXJyb3cuYWxpZ25tZW50T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHg6IHggKyBkaWZmQ29vcmRzLngsXG4gICAgICAgIHk6IHkgKyBkaWZmQ29vcmRzLnksXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAuLi5kaWZmQ29vcmRzLFxuICAgICAgICAgIHBsYWNlbWVudFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfTtcbn07XG5cbi8qKlxuICogT3B0aW1pemVzIHRoZSB2aXNpYmlsaXR5IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IGJ5IHNoaWZ0aW5nIGl0IGluIG9yZGVyIHRvXG4gKiBrZWVwIGl0IGluIHZpZXcgd2hlbiBpdCB3aWxsIG92ZXJmbG93IHRoZSBjbGlwcGluZyBib3VuZGFyeS5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaGlmdFxuICovXG5jb25zdCBzaGlmdCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBvcHRpb25zID0ge307XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAnc2hpZnQnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgeCxcbiAgICAgICAgeSxcbiAgICAgICAgcGxhY2VtZW50XG4gICAgICB9ID0gc3RhdGU7XG4gICAgICBjb25zdCB7XG4gICAgICAgIG1haW5BeGlzOiBjaGVja01haW5BeGlzID0gdHJ1ZSxcbiAgICAgICAgY3Jvc3NBeGlzOiBjaGVja0Nyb3NzQXhpcyA9IGZhbHNlLFxuICAgICAgICBsaW1pdGVyID0ge1xuICAgICAgICAgIGZuOiBfcmVmID0+IHtcbiAgICAgICAgICAgIGxldCB7XG4gICAgICAgICAgICAgIHgsXG4gICAgICAgICAgICAgIHlcbiAgICAgICAgICAgIH0gPSBfcmVmO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgeCxcbiAgICAgICAgICAgICAgeVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC4uLmRldGVjdE92ZXJmbG93T3B0aW9uc1xuICAgICAgfSA9IGV2YWx1YXRlKG9wdGlvbnMsIHN0YXRlKTtcbiAgICAgIGNvbnN0IGNvb3JkcyA9IHtcbiAgICAgICAgeCxcbiAgICAgICAgeVxuICAgICAgfTtcbiAgICAgIGNvbnN0IG92ZXJmbG93ID0gYXdhaXQgZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIGRldGVjdE92ZXJmbG93T3B0aW9ucyk7XG4gICAgICBjb25zdCBjcm9zc0F4aXMgPSBnZXRTaWRlQXhpcyhnZXRTaWRlKHBsYWNlbWVudCkpO1xuICAgICAgY29uc3QgbWFpbkF4aXMgPSBnZXRPcHBvc2l0ZUF4aXMoY3Jvc3NBeGlzKTtcbiAgICAgIGxldCBtYWluQXhpc0Nvb3JkID0gY29vcmRzW21haW5BeGlzXTtcbiAgICAgIGxldCBjcm9zc0F4aXNDb29yZCA9IGNvb3Jkc1tjcm9zc0F4aXNdO1xuICAgICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgICAgY29uc3QgbWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyAndG9wJyA6ICdsZWZ0JztcbiAgICAgICAgY29uc3QgbWF4U2lkZSA9IG1haW5BeGlzID09PSAneScgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIGNvbnN0IG1pbiA9IG1haW5BeGlzQ29vcmQgKyBvdmVyZmxvd1ttaW5TaWRlXTtcbiAgICAgICAgY29uc3QgbWF4ID0gbWFpbkF4aXNDb29yZCAtIG92ZXJmbG93W21heFNpZGVdO1xuICAgICAgICBtYWluQXhpc0Nvb3JkID0gY2xhbXAobWluLCBtYWluQXhpc0Nvb3JkLCBtYXgpO1xuICAgICAgfVxuICAgICAgaWYgKGNoZWNrQ3Jvc3NBeGlzKSB7XG4gICAgICAgIGNvbnN0IG1pblNpZGUgPSBjcm9zc0F4aXMgPT09ICd5JyA/ICd0b3AnIDogJ2xlZnQnO1xuICAgICAgICBjb25zdCBtYXhTaWRlID0gY3Jvc3NBeGlzID09PSAneScgPyAnYm90dG9tJyA6ICdyaWdodCc7XG4gICAgICAgIGNvbnN0IG1pbiA9IGNyb3NzQXhpc0Nvb3JkICsgb3ZlcmZsb3dbbWluU2lkZV07XG4gICAgICAgIGNvbnN0IG1heCA9IGNyb3NzQXhpc0Nvb3JkIC0gb3ZlcmZsb3dbbWF4U2lkZV07XG4gICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gY2xhbXAobWluLCBjcm9zc0F4aXNDb29yZCwgbWF4KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxpbWl0ZWRDb29yZHMgPSBsaW1pdGVyLmZuKHtcbiAgICAgICAgLi4uc3RhdGUsXG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXG4gICAgICAgIFtjcm9zc0F4aXNdOiBjcm9zc0F4aXNDb29yZFxuICAgICAgfSk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5saW1pdGVkQ29vcmRzLFxuICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgeDogbGltaXRlZENvb3Jkcy54IC0geCxcbiAgICAgICAgICB5OiBsaW1pdGVkQ29vcmRzLnkgLSB5LFxuICAgICAgICAgIGVuYWJsZWQ6IHtcbiAgICAgICAgICAgIFttYWluQXhpc106IGNoZWNrTWFpbkF4aXMsXG4gICAgICAgICAgICBbY3Jvc3NBeGlzXTogY2hlY2tDcm9zc0F4aXNcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9O1xufTtcbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgb3B0aW9ucyxcbiAgICBmbihzdGF0ZSkge1xuICAgICAgY29uc3Qge1xuICAgICAgICB4LFxuICAgICAgICB5LFxuICAgICAgICBwbGFjZW1lbnQsXG4gICAgICAgIHJlY3RzLFxuICAgICAgICBtaWRkbGV3YXJlRGF0YVxuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBvZmZzZXQgPSAwLFxuICAgICAgICBtYWluQXhpczogY2hlY2tNYWluQXhpcyA9IHRydWUsXG4gICAgICAgIGNyb3NzQXhpczogY2hlY2tDcm9zc0F4aXMgPSB0cnVlXG4gICAgICB9ID0gZXZhbHVhdGUob3B0aW9ucywgc3RhdGUpO1xuICAgICAgY29uc3QgY29vcmRzID0ge1xuICAgICAgICB4LFxuICAgICAgICB5XG4gICAgICB9O1xuICAgICAgY29uc3QgY3Jvc3NBeGlzID0gZ2V0U2lkZUF4aXMocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IG1haW5BeGlzID0gZ2V0T3Bwb3NpdGVBeGlzKGNyb3NzQXhpcyk7XG4gICAgICBsZXQgbWFpbkF4aXNDb29yZCA9IGNvb3Jkc1ttYWluQXhpc107XG4gICAgICBsZXQgY3Jvc3NBeGlzQ29vcmQgPSBjb29yZHNbY3Jvc3NBeGlzXTtcbiAgICAgIGNvbnN0IHJhd09mZnNldCA9IGV2YWx1YXRlKG9mZnNldCwgc3RhdGUpO1xuICAgICAgY29uc3QgY29tcHV0ZWRPZmZzZXQgPSB0eXBlb2YgcmF3T2Zmc2V0ID09PSAnbnVtYmVyJyA/IHtcbiAgICAgICAgbWFpbkF4aXM6IHJhd09mZnNldCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwXG4gICAgICB9IDoge1xuICAgICAgICBtYWluQXhpczogMCxcbiAgICAgICAgY3Jvc3NBeGlzOiAwLFxuICAgICAgICAuLi5yYXdPZmZzZXRcbiAgICAgIH07XG4gICAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgICBjb25zdCBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgICAgICBjb25zdCBsaW1pdE1pbiA9IHJlY3RzLnJlZmVyZW5jZVttYWluQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGNvbnN0IGxpbWl0TWF4ID0gcmVjdHMucmVmZXJlbmNlW21haW5BeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dIC0gY29tcHV0ZWRPZmZzZXQubWFpbkF4aXM7XG4gICAgICAgIGlmIChtYWluQXhpc0Nvb3JkIDwgbGltaXRNaW4pIHtcbiAgICAgICAgICBtYWluQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAobWFpbkF4aXNDb29yZCA+IGxpbWl0TWF4KSB7XG4gICAgICAgICAgbWFpbkF4aXNDb29yZCA9IGxpbWl0TWF4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2hlY2tDcm9zc0F4aXMpIHtcbiAgICAgICAgdmFyIF9taWRkbGV3YXJlRGF0YSRvZmZzZSwgX21pZGRsZXdhcmVEYXRhJG9mZnNlMjtcbiAgICAgICAgY29uc3QgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcbiAgICAgICAgY29uc3QgaXNPcmlnaW5TaWRlID0gb3JpZ2luU2lkZXMuaGFzKGdldFNpZGUocGxhY2VtZW50KSk7XG4gICAgICAgIGNvbnN0IGxpbWl0TWluID0gcmVjdHMucmVmZXJlbmNlW2Nyb3NzQXhpc10gLSByZWN0cy5mbG9hdGluZ1tsZW5dICsgKGlzT3JpZ2luU2lkZSA/ICgoX21pZGRsZXdhcmVEYXRhJG9mZnNlID0gbWlkZGxld2FyZURhdGEub2Zmc2V0KSA9PSBudWxsID8gdm9pZCAwIDogX21pZGRsZXdhcmVEYXRhJG9mZnNlW2Nyb3NzQXhpc10pIHx8IDAgOiAwKSArIChpc09yaWdpblNpZGUgPyAwIDogY29tcHV0ZWRPZmZzZXQuY3Jvc3NBeGlzKTtcbiAgICAgICAgY29uc3QgbGltaXRNYXggPSByZWN0cy5yZWZlcmVuY2VbY3Jvc3NBeGlzXSArIHJlY3RzLnJlZmVyZW5jZVtsZW5dICsgKGlzT3JpZ2luU2lkZSA/IDAgOiAoKF9taWRkbGV3YXJlRGF0YSRvZmZzZTIgPSBtaWRkbGV3YXJlRGF0YS5vZmZzZXQpID09IG51bGwgPyB2b2lkIDAgOiBfbWlkZGxld2FyZURhdGEkb2Zmc2UyW2Nyb3NzQXhpc10pIHx8IDApIC0gKGlzT3JpZ2luU2lkZSA/IGNvbXB1dGVkT2Zmc2V0LmNyb3NzQXhpcyA6IDApO1xuICAgICAgICBpZiAoY3Jvc3NBeGlzQ29vcmQgPCBsaW1pdE1pbikge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNaW47XG4gICAgICAgIH0gZWxzZSBpZiAoY3Jvc3NBeGlzQ29vcmQgPiBsaW1pdE1heCkge1xuICAgICAgICAgIGNyb3NzQXhpc0Nvb3JkID0gbGltaXRNYXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB7XG4gICAgICAgIFttYWluQXhpc106IG1haW5BeGlzQ29vcmQsXG4gICAgICAgIFtjcm9zc0F4aXNdOiBjcm9zc0F4aXNDb29yZFxuICAgICAgfTtcbiAgICB9XG4gIH07XG59O1xuXG4vKipcbiAqIFByb3ZpZGVzIGRhdGEgdGhhdCBhbGxvd3MgeW91IHRvIGNoYW5nZSB0aGUgc2l6ZSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCDigJRcbiAqIGZvciBpbnN0YW5jZSwgcHJldmVudCBpdCBmcm9tIG92ZXJmbG93aW5nIHRoZSBjbGlwcGluZyBib3VuZGFyeSBvciBtYXRjaCB0aGVcbiAqIHdpZHRoIG9mIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9zaXplXG4gKi9cbmNvbnN0IHNpemUgPSBmdW5jdGlvbiAob3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIHJldHVybiB7XG4gICAgbmFtZTogJ3NpemUnLFxuICAgIG9wdGlvbnMsXG4gICAgYXN5bmMgZm4oc3RhdGUpIHtcbiAgICAgIHZhciBfc3RhdGUkbWlkZGxld2FyZURhdGEsIF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTI7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHBsYWNlbWVudCxcbiAgICAgICAgcmVjdHMsXG4gICAgICAgIHBsYXRmb3JtLFxuICAgICAgICBlbGVtZW50c1xuICAgICAgfSA9IHN0YXRlO1xuICAgICAgY29uc3Qge1xuICAgICAgICBhcHBseSA9ICgpID0+IHt9LFxuICAgICAgICAuLi5kZXRlY3RPdmVyZmxvd09wdGlvbnNcbiAgICAgIH0gPSBldmFsdWF0ZShvcHRpb25zLCBzdGF0ZSk7XG4gICAgICBjb25zdCBvdmVyZmxvdyA9IGF3YWl0IGRldGVjdE92ZXJmbG93KHN0YXRlLCBkZXRlY3RPdmVyZmxvd09wdGlvbnMpO1xuICAgICAgY29uc3Qgc2lkZSA9IGdldFNpZGUocGxhY2VtZW50KTtcbiAgICAgIGNvbnN0IGFsaWdubWVudCA9IGdldEFsaWdubWVudChwbGFjZW1lbnQpO1xuICAgICAgY29uc3QgaXNZQXhpcyA9IGdldFNpZGVBeGlzKHBsYWNlbWVudCkgPT09ICd5JztcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgd2lkdGgsXG4gICAgICAgIGhlaWdodFxuICAgICAgfSA9IHJlY3RzLmZsb2F0aW5nO1xuICAgICAgbGV0IGhlaWdodFNpZGU7XG4gICAgICBsZXQgd2lkdGhTaWRlO1xuICAgICAgaWYgKHNpZGUgPT09ICd0b3AnIHx8IHNpZGUgPT09ICdib3R0b20nKSB7XG4gICAgICAgIGhlaWdodFNpZGUgPSBzaWRlO1xuICAgICAgICB3aWR0aFNpZGUgPSBhbGlnbm1lbnQgPT09ICgoYXdhaXQgKHBsYXRmb3JtLmlzUlRMID09IG51bGwgPyB2b2lkIDAgOiBwbGF0Zm9ybS5pc1JUTChlbGVtZW50cy5mbG9hdGluZykpKSA/ICdzdGFydCcgOiAnZW5kJykgPyAnbGVmdCcgOiAncmlnaHQnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd2lkdGhTaWRlID0gc2lkZTtcbiAgICAgICAgaGVpZ2h0U2lkZSA9IGFsaWdubWVudCA9PT0gJ2VuZCcgPyAndG9wJyA6ICdib3R0b20nO1xuICAgICAgfVxuICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nSGVpZ2h0ID0gaGVpZ2h0IC0gb3ZlcmZsb3cudG9wIC0gb3ZlcmZsb3cuYm90dG9tO1xuICAgICAgY29uc3QgbWF4aW11bUNsaXBwaW5nV2lkdGggPSB3aWR0aCAtIG92ZXJmbG93LmxlZnQgLSBvdmVyZmxvdy5yaWdodDtcbiAgICAgIGNvbnN0IG92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0ID0gbWluKGhlaWdodCAtIG92ZXJmbG93W2hlaWdodFNpZGVdLCBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQpO1xuICAgICAgY29uc3Qgb3ZlcmZsb3dBdmFpbGFibGVXaWR0aCA9IG1pbih3aWR0aCAtIG92ZXJmbG93W3dpZHRoU2lkZV0sIG1heGltdW1DbGlwcGluZ1dpZHRoKTtcbiAgICAgIGNvbnN0IG5vU2hpZnQgPSAhc3RhdGUubWlkZGxld2FyZURhdGEuc2hpZnQ7XG4gICAgICBsZXQgYXZhaWxhYmxlSGVpZ2h0ID0gb3ZlcmZsb3dBdmFpbGFibGVIZWlnaHQ7XG4gICAgICBsZXQgYXZhaWxhYmxlV2lkdGggPSBvdmVyZmxvd0F2YWlsYWJsZVdpZHRoO1xuICAgICAgaWYgKChfc3RhdGUkbWlkZGxld2FyZURhdGEgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEuZW5hYmxlZC54KSB7XG4gICAgICAgIGF2YWlsYWJsZVdpZHRoID0gbWF4aW11bUNsaXBwaW5nV2lkdGg7XG4gICAgICB9XG4gICAgICBpZiAoKF9zdGF0ZSRtaWRkbGV3YXJlRGF0YTIgPSBzdGF0ZS5taWRkbGV3YXJlRGF0YS5zaGlmdCkgIT0gbnVsbCAmJiBfc3RhdGUkbWlkZGxld2FyZURhdGEyLmVuYWJsZWQueSkge1xuICAgICAgICBhdmFpbGFibGVIZWlnaHQgPSBtYXhpbXVtQ2xpcHBpbmdIZWlnaHQ7XG4gICAgICB9XG4gICAgICBpZiAobm9TaGlmdCAmJiAhYWxpZ25tZW50KSB7XG4gICAgICAgIGNvbnN0IHhNaW4gPSBtYXgob3ZlcmZsb3cubGVmdCwgMCk7XG4gICAgICAgIGNvbnN0IHhNYXggPSBtYXgob3ZlcmZsb3cucmlnaHQsIDApO1xuICAgICAgICBjb25zdCB5TWluID0gbWF4KG92ZXJmbG93LnRvcCwgMCk7XG4gICAgICAgIGNvbnN0IHlNYXggPSBtYXgob3ZlcmZsb3cuYm90dG9tLCAwKTtcbiAgICAgICAgaWYgKGlzWUF4aXMpIHtcbiAgICAgICAgICBhdmFpbGFibGVXaWR0aCA9IHdpZHRoIC0gMiAqICh4TWluICE9PSAwIHx8IHhNYXggIT09IDAgPyB4TWluICsgeE1heCA6IG1heChvdmVyZmxvdy5sZWZ0LCBvdmVyZmxvdy5yaWdodCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGF2YWlsYWJsZUhlaWdodCA9IGhlaWdodCAtIDIgKiAoeU1pbiAhPT0gMCB8fCB5TWF4ICE9PSAwID8geU1pbiArIHlNYXggOiBtYXgob3ZlcmZsb3cudG9wLCBvdmVyZmxvdy5ib3R0b20pKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgYXdhaXQgYXBwbHkoe1xuICAgICAgICAuLi5zdGF0ZSxcbiAgICAgICAgYXZhaWxhYmxlV2lkdGgsXG4gICAgICAgIGF2YWlsYWJsZUhlaWdodFxuICAgICAgfSk7XG4gICAgICBjb25zdCBuZXh0RGltZW5zaW9ucyA9IGF3YWl0IHBsYXRmb3JtLmdldERpbWVuc2lvbnMoZWxlbWVudHMuZmxvYXRpbmcpO1xuICAgICAgaWYgKHdpZHRoICE9PSBuZXh0RGltZW5zaW9ucy53aWR0aCB8fCBoZWlnaHQgIT09IG5leHREaW1lbnNpb25zLmhlaWdodCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHJlc2V0OiB7XG4gICAgICAgICAgICByZWN0czogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB7fTtcbiAgICB9XG4gIH07XG59O1xuXG5leHBvcnQgeyBhcnJvdywgYXV0b1BsYWNlbWVudCwgY29tcHV0ZVBvc2l0aW9uLCBkZXRlY3RPdmVyZmxvdywgZmxpcCwgaGlkZSwgaW5saW5lLCBsaW1pdFNoaWZ0LCBvZmZzZXQsIHNoaWZ0LCBzaXplIH07XG4iLCJmdW5jdGlvbiBoYXNXaW5kb3coKSB7XG4gIHJldHVybiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJztcbn1cbmZ1bmN0aW9uIGdldE5vZGVOYW1lKG5vZGUpIHtcbiAgaWYgKGlzTm9kZShub2RlKSkge1xuICAgIHJldHVybiAobm9kZS5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKTtcbiAgfVxuICAvLyBNb2NrZWQgbm9kZXMgaW4gdGVzdGluZyBlbnZpcm9ubWVudHMgbWF5IG5vdCBiZSBpbnN0YW5jZXMgb2YgTm9kZS4gQnlcbiAgLy8gcmV0dXJuaW5nIGAjZG9jdW1lbnRgIGFuIGluZmluaXRlIGxvb3Agd29uJ3Qgb2NjdXIuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mbG9hdGluZy11aS9mbG9hdGluZy11aS9pc3N1ZXMvMjMxN1xuICByZXR1cm4gJyNkb2N1bWVudCc7XG59XG5mdW5jdGlvbiBnZXRXaW5kb3cobm9kZSkge1xuICB2YXIgX25vZGUkb3duZXJEb2N1bWVudDtcbiAgcmV0dXJuIChub2RlID09IG51bGwgfHwgKF9ub2RlJG93bmVyRG9jdW1lbnQgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50LmRlZmF1bHRWaWV3KSB8fCB3aW5kb3c7XG59XG5mdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQobm9kZSkge1xuICB2YXIgX3JlZjtcbiAgcmV0dXJuIChfcmVmID0gKGlzTm9kZShub2RlKSA/IG5vZGUub3duZXJEb2N1bWVudCA6IG5vZGUuZG9jdW1lbnQpIHx8IHdpbmRvdy5kb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9yZWYuZG9jdW1lbnRFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNOb2RlKHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgTm9kZSB8fCB2YWx1ZSBpbnN0YW5jZW9mIGdldFdpbmRvdyh2YWx1ZSkuTm9kZTtcbn1cbmZ1bmN0aW9uIGlzRWxlbWVudCh2YWx1ZSkge1xuICBpZiAoIWhhc1dpbmRvdygpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkVsZW1lbnQ7XG59XG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLkhUTUxFbGVtZW50O1xufVxuZnVuY3Rpb24gaXNTaGFkb3dSb290KHZhbHVlKSB7XG4gIGlmICghaGFzV2luZG93KCkgfHwgdHlwZW9mIFNoYWRvd1Jvb3QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgfHwgdmFsdWUgaW5zdGFuY2VvZiBnZXRXaW5kb3codmFsdWUpLlNoYWRvd1Jvb3Q7XG59XG5jb25zdCBpbnZhbGlkT3ZlcmZsb3dEaXNwbGF5VmFsdWVzID0gLyojX19QVVJFX18qL25ldyBTZXQoWydpbmxpbmUnLCAnY29udGVudHMnXSk7XG5mdW5jdGlvbiBpc092ZXJmbG93RWxlbWVudChlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICBvdmVyZmxvdyxcbiAgICBvdmVyZmxvd1gsXG4gICAgb3ZlcmZsb3dZLFxuICAgIGRpc3BsYXlcbiAgfSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW58Y2xpcC8udGVzdChvdmVyZmxvdyArIG92ZXJmbG93WSArIG92ZXJmbG93WCkgJiYgIWludmFsaWRPdmVyZmxvd0Rpc3BsYXlWYWx1ZXMuaGFzKGRpc3BsYXkpO1xufVxuY29uc3QgdGFibGVFbGVtZW50cyA9IC8qI19fUFVSRV9fKi9uZXcgU2V0KFsndGFibGUnLCAndGQnLCAndGgnXSk7XG5mdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiB0YWJsZUVsZW1lbnRzLmhhcyhnZXROb2RlTmFtZShlbGVtZW50KSk7XG59XG5jb25zdCB0b3BMYXllclNlbGVjdG9ycyA9IFsnOnBvcG92ZXItb3BlbicsICc6bW9kYWwnXTtcbmZ1bmN0aW9uIGlzVG9wTGF5ZXIoZWxlbWVudCkge1xuICByZXR1cm4gdG9wTGF5ZXJTZWxlY3RvcnMuc29tZShzZWxlY3RvciA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBlbGVtZW50Lm1hdGNoZXMoc2VsZWN0b3IpO1xuICAgIH0gY2F0Y2ggKF9lKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9KTtcbn1cbmNvbnN0IHRyYW5zZm9ybVByb3BlcnRpZXMgPSBbJ3RyYW5zZm9ybScsICd0cmFuc2xhdGUnLCAnc2NhbGUnLCAncm90YXRlJywgJ3BlcnNwZWN0aXZlJ107XG5jb25zdCB3aWxsQ2hhbmdlVmFsdWVzID0gWyd0cmFuc2Zvcm0nLCAndHJhbnNsYXRlJywgJ3NjYWxlJywgJ3JvdGF0ZScsICdwZXJzcGVjdGl2ZScsICdmaWx0ZXInXTtcbmNvbnN0IGNvbnRhaW5WYWx1ZXMgPSBbJ3BhaW50JywgJ2xheW91dCcsICdzdHJpY3QnLCAnY29udGVudCddO1xuZnVuY3Rpb24gaXNDb250YWluaW5nQmxvY2soZWxlbWVudE9yQ3NzKSB7XG4gIGNvbnN0IHdlYmtpdCA9IGlzV2ViS2l0KCk7XG4gIGNvbnN0IGNzcyA9IGlzRWxlbWVudChlbGVtZW50T3JDc3MpID8gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50T3JDc3MpIDogZWxlbWVudE9yQ3NzO1xuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG4gIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdHJhbnNmb3Jtcy0yLyNpbmRpdmlkdWFsLXRyYW5zZm9ybXNcbiAgcmV0dXJuIHRyYW5zZm9ybVByb3BlcnRpZXMuc29tZSh2YWx1ZSA9PiBjc3NbdmFsdWVdID8gY3NzW3ZhbHVlXSAhPT0gJ25vbmUnIDogZmFsc2UpIHx8IChjc3MuY29udGFpbmVyVHlwZSA/IGNzcy5jb250YWluZXJUeXBlICE9PSAnbm9ybWFsJyA6IGZhbHNlKSB8fCAhd2Via2l0ICYmIChjc3MuYmFja2Ryb3BGaWx0ZXIgPyBjc3MuYmFja2Ryb3BGaWx0ZXIgIT09ICdub25lJyA6IGZhbHNlKSB8fCAhd2Via2l0ICYmIChjc3MuZmlsdGVyID8gY3NzLmZpbHRlciAhPT0gJ25vbmUnIDogZmFsc2UpIHx8IHdpbGxDaGFuZ2VWYWx1ZXMuc29tZSh2YWx1ZSA9PiAoY3NzLndpbGxDaGFuZ2UgfHwgJycpLmluY2x1ZGVzKHZhbHVlKSkgfHwgY29udGFpblZhbHVlcy5zb21lKHZhbHVlID0+IChjc3MuY29udGFpbiB8fCAnJykuaW5jbHVkZXModmFsdWUpKTtcbn1cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiAhaXNMYXN0VHJhdmVyc2FibGVOb2RlKGN1cnJlbnROb2RlKSkge1xuICAgIGlmIChpc0NvbnRhaW5pbmdCbG9jayhjdXJyZW50Tm9kZSkpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2UgaWYgKGlzVG9wTGF5ZXIoY3VycmVudE5vZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzV2ViS2l0KCkge1xuICBpZiAodHlwZW9mIENTUyA9PT0gJ3VuZGVmaW5lZCcgfHwgIUNTUy5zdXBwb3J0cykgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gQ1NTLnN1cHBvcnRzKCctd2Via2l0LWJhY2tkcm9wLWZpbHRlcicsICdub25lJyk7XG59XG5jb25zdCBsYXN0VHJhdmVyc2FibGVOb2RlTmFtZXMgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXSk7XG5mdW5jdGlvbiBpc0xhc3RUcmF2ZXJzYWJsZU5vZGUobm9kZSkge1xuICByZXR1cm4gbGFzdFRyYXZlcnNhYmxlTm9kZU5hbWVzLmhhcyhnZXROb2RlTmFtZShub2RlKSk7XG59XG5mdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufVxuZnVuY3Rpb24gZ2V0Tm9kZVNjcm9sbChlbGVtZW50KSB7XG4gIGlmIChpc0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFRvcFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBzY3JvbGxMZWZ0OiBlbGVtZW50LnNjcm9sbFgsXG4gICAgc2Nyb2xsVG9wOiBlbGVtZW50LnNjcm9sbFlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldFBhcmVudE5vZGUobm9kZSkge1xuICBpZiAoZ2V0Tm9kZU5hbWUobm9kZSkgPT09ICdodG1sJykge1xuICAgIHJldHVybiBub2RlO1xuICB9XG4gIGNvbnN0IHJlc3VsdCA9XG4gIC8vIFN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlLlxuICBub2RlLmFzc2lnbmVkU2xvdCB8fFxuICAvLyBET00gRWxlbWVudCBkZXRlY3RlZC5cbiAgbm9kZS5wYXJlbnROb2RlIHx8XG4gIC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWQuXG4gIGlzU2hhZG93Um9vdChub2RlKSAmJiBub2RlLmhvc3QgfHxcbiAgLy8gRmFsbGJhY2suXG4gIGdldERvY3VtZW50RWxlbWVudChub2RlKTtcbiAgcmV0dXJuIGlzU2hhZG93Um9vdChyZXN1bHQpID8gcmVzdWx0Lmhvc3QgOiByZXN1bHQ7XG59XG5mdW5jdGlvbiBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3Rvcihub2RlKSB7XG4gIGNvbnN0IHBhcmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKG5vZGUpO1xuICBpZiAoaXNMYXN0VHJhdmVyc2FibGVOb2RlKHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudCA/IG5vZGUub3duZXJEb2N1bWVudC5ib2R5IDogbm9kZS5ib2R5O1xuICB9XG4gIGlmIChpc0hUTUxFbGVtZW50KHBhcmVudE5vZGUpICYmIGlzT3ZlcmZsb3dFbGVtZW50KHBhcmVudE5vZGUpKSB7XG4gICAgcmV0dXJuIHBhcmVudE5vZGU7XG4gIH1cbiAgcmV0dXJuIGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKHBhcmVudE5vZGUpO1xufVxuZnVuY3Rpb24gZ2V0T3ZlcmZsb3dBbmNlc3RvcnMobm9kZSwgbGlzdCwgdHJhdmVyc2VJZnJhbWVzKSB7XG4gIHZhciBfbm9kZSRvd25lckRvY3VtZW50MjtcbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuICBpZiAodHJhdmVyc2VJZnJhbWVzID09PSB2b2lkIDApIHtcbiAgICB0cmF2ZXJzZUlmcmFtZXMgPSB0cnVlO1xuICB9XG4gIGNvbnN0IHNjcm9sbGFibGVBbmNlc3RvciA9IGdldE5lYXJlc3RPdmVyZmxvd0FuY2VzdG9yKG5vZGUpO1xuICBjb25zdCBpc0JvZHkgPSBzY3JvbGxhYmxlQW5jZXN0b3IgPT09ICgoX25vZGUkb3duZXJEb2N1bWVudDIgPSBub2RlLm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfbm9kZSRvd25lckRvY3VtZW50Mi5ib2R5KTtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KHNjcm9sbGFibGVBbmNlc3Rvcik7XG4gIGlmIChpc0JvZHkpIHtcbiAgICBjb25zdCBmcmFtZUVsZW1lbnQgPSBnZXRGcmFtZUVsZW1lbnQod2luKTtcbiAgICByZXR1cm4gbGlzdC5jb25jYXQod2luLCB3aW4udmlzdWFsVmlld3BvcnQgfHwgW10sIGlzT3ZlcmZsb3dFbGVtZW50KHNjcm9sbGFibGVBbmNlc3RvcikgPyBzY3JvbGxhYmxlQW5jZXN0b3IgOiBbXSwgZnJhbWVFbGVtZW50ICYmIHRyYXZlcnNlSWZyYW1lcyA/IGdldE92ZXJmbG93QW5jZXN0b3JzKGZyYW1lRWxlbWVudCkgOiBbXSk7XG4gIH1cbiAgcmV0dXJuIGxpc3QuY29uY2F0KHNjcm9sbGFibGVBbmNlc3RvciwgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoc2Nyb2xsYWJsZUFuY2VzdG9yLCBbXSwgdHJhdmVyc2VJZnJhbWVzKSk7XG59XG5mdW5jdGlvbiBnZXRGcmFtZUVsZW1lbnQod2luKSB7XG4gIHJldHVybiB3aW4ucGFyZW50ICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih3aW4ucGFyZW50KSA/IHdpbi5mcmFtZUVsZW1lbnQgOiBudWxsO1xufVxuXG5leHBvcnQgeyBnZXRDb21wdXRlZFN0eWxlLCBnZXRDb250YWluaW5nQmxvY2ssIGdldERvY3VtZW50RWxlbWVudCwgZ2V0RnJhbWVFbGVtZW50LCBnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvciwgZ2V0Tm9kZU5hbWUsIGdldE5vZGVTY3JvbGwsIGdldE92ZXJmbG93QW5jZXN0b3JzLCBnZXRQYXJlbnROb2RlLCBnZXRXaW5kb3csIGlzQ29udGFpbmluZ0Jsb2NrLCBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQsIGlzTGFzdFRyYXZlcnNhYmxlTm9kZSwgaXNOb2RlLCBpc092ZXJmbG93RWxlbWVudCwgaXNTaGFkb3dSb290LCBpc1RhYmxlRWxlbWVudCwgaXNUb3BMYXllciwgaXNXZWJLaXQgfTtcbiIsImltcG9ydCB7IHJlY3RUb0NsaWVudFJlY3QsIGFycm93IGFzIGFycm93JDEsIGF1dG9QbGFjZW1lbnQgYXMgYXV0b1BsYWNlbWVudCQxLCBkZXRlY3RPdmVyZmxvdyBhcyBkZXRlY3RPdmVyZmxvdyQxLCBmbGlwIGFzIGZsaXAkMSwgaGlkZSBhcyBoaWRlJDEsIGlubGluZSBhcyBpbmxpbmUkMSwgbGltaXRTaGlmdCBhcyBsaW1pdFNoaWZ0JDEsIG9mZnNldCBhcyBvZmZzZXQkMSwgc2hpZnQgYXMgc2hpZnQkMSwgc2l6ZSBhcyBzaXplJDEsIGNvbXB1dGVQb3NpdGlvbiBhcyBjb21wdXRlUG9zaXRpb24kMSB9IGZyb20gJ0BmbG9hdGluZy11aS9jb3JlJztcbmltcG9ydCB7IHJvdW5kLCBjcmVhdGVDb29yZHMsIG1heCwgbWluLCBmbG9vciB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscyc7XG5pbXBvcnQgeyBnZXRDb21wdXRlZFN0eWxlIGFzIGdldENvbXB1dGVkU3R5bGUkMSwgaXNIVE1MRWxlbWVudCwgaXNFbGVtZW50LCBnZXRXaW5kb3csIGlzV2ViS2l0LCBnZXRGcmFtZUVsZW1lbnQsIGdldE5vZGVTY3JvbGwsIGdldERvY3VtZW50RWxlbWVudCwgaXNUb3BMYXllciwgZ2V0Tm9kZU5hbWUsIGlzT3ZlcmZsb3dFbGVtZW50LCBnZXRPdmVyZmxvd0FuY2VzdG9ycywgZ2V0UGFyZW50Tm9kZSwgaXNMYXN0VHJhdmVyc2FibGVOb2RlLCBpc0NvbnRhaW5pbmdCbG9jaywgaXNUYWJsZUVsZW1lbnQsIGdldENvbnRhaW5pbmdCbG9jayB9IGZyb20gJ0BmbG9hdGluZy11aS91dGlscy9kb20nO1xuZXhwb3J0IHsgZ2V0T3ZlcmZsb3dBbmNlc3RvcnMgfSBmcm9tICdAZmxvYXRpbmctdWkvdXRpbHMvZG9tJztcblxuZnVuY3Rpb24gZ2V0Q3NzRGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IGNzcyA9IGdldENvbXB1dGVkU3R5bGUkMShlbGVtZW50KTtcbiAgLy8gSW4gdGVzdGluZyBlbnZpcm9ubWVudHMsIHRoZSBgd2lkdGhgIGFuZCBgaGVpZ2h0YCBwcm9wZXJ0aWVzIGFyZSBlbXB0eVxuICAvLyBzdHJpbmdzIGZvciBTVkcgZWxlbWVudHMsIHJldHVybmluZyBOYU4uIEZhbGxiYWNrIHRvIGAwYCBpbiB0aGlzIGNhc2UuXG4gIGxldCB3aWR0aCA9IHBhcnNlRmxvYXQoY3NzLndpZHRoKSB8fCAwO1xuICBsZXQgaGVpZ2h0ID0gcGFyc2VGbG9hdChjc3MuaGVpZ2h0KSB8fCAwO1xuICBjb25zdCBoYXNPZmZzZXQgPSBpc0hUTUxFbGVtZW50KGVsZW1lbnQpO1xuICBjb25zdCBvZmZzZXRXaWR0aCA9IGhhc09mZnNldCA/IGVsZW1lbnQub2Zmc2V0V2lkdGggOiB3aWR0aDtcbiAgY29uc3Qgb2Zmc2V0SGVpZ2h0ID0gaGFzT2Zmc2V0ID8gZWxlbWVudC5vZmZzZXRIZWlnaHQgOiBoZWlnaHQ7XG4gIGNvbnN0IHNob3VsZEZhbGxiYWNrID0gcm91bmQod2lkdGgpICE9PSBvZmZzZXRXaWR0aCB8fCByb3VuZChoZWlnaHQpICE9PSBvZmZzZXRIZWlnaHQ7XG4gIGlmIChzaG91bGRGYWxsYmFjaykge1xuICAgIHdpZHRoID0gb2Zmc2V0V2lkdGg7XG4gICAgaGVpZ2h0ID0gb2Zmc2V0SGVpZ2h0O1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICQ6IHNob3VsZEZhbGxiYWNrXG4gIH07XG59XG5cbmZ1bmN0aW9uIHVud3JhcEVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gIWlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQuY29udGV4dEVsZW1lbnQgOiBlbGVtZW50O1xufVxuXG5mdW5jdGlvbiBnZXRTY2FsZShlbGVtZW50KSB7XG4gIGNvbnN0IGRvbUVsZW1lbnQgPSB1bndyYXBFbGVtZW50KGVsZW1lbnQpO1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZG9tRWxlbWVudCkpIHtcbiAgICByZXR1cm4gY3JlYXRlQ29vcmRzKDEpO1xuICB9XG4gIGNvbnN0IHJlY3QgPSBkb21FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgICRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZG9tRWxlbWVudCk7XG4gIGxldCB4ID0gKCQgPyByb3VuZChyZWN0LndpZHRoKSA6IHJlY3Qud2lkdGgpIC8gd2lkdGg7XG4gIGxldCB5ID0gKCQgPyByb3VuZChyZWN0LmhlaWdodCkgOiByZWN0LmhlaWdodCkgLyBoZWlnaHQ7XG5cbiAgLy8gMCwgTmFOLCBvciBJbmZpbml0eSBzaG91bGQgYWx3YXlzIGZhbGxiYWNrIHRvIDEuXG5cbiAgaWYgKCF4IHx8ICFOdW1iZXIuaXNGaW5pdGUoeCkpIHtcbiAgICB4ID0gMTtcbiAgfVxuICBpZiAoIXkgfHwgIU51bWJlci5pc0Zpbml0ZSh5KSkge1xuICAgIHkgPSAxO1xuICB9XG4gIHJldHVybiB7XG4gICAgeCxcbiAgICB5XG4gIH07XG59XG5cbmNvbnN0IG5vT2Zmc2V0cyA9IC8qI19fUFVSRV9fKi9jcmVhdGVDb29yZHMoMCk7XG5mdW5jdGlvbiBnZXRWaXN1YWxPZmZzZXRzKGVsZW1lbnQpIHtcbiAgY29uc3Qgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICBpZiAoIWlzV2ViS2l0KCkgfHwgIXdpbi52aXN1YWxWaWV3cG9ydCkge1xuICAgIHJldHVybiBub09mZnNldHM7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICB4OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdCxcbiAgICB5OiB3aW4udmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wXG4gIH07XG59XG5mdW5jdGlvbiBzaG91bGRBZGRWaXN1YWxPZmZzZXRzKGVsZW1lbnQsIGlzRml4ZWQsIGZsb2F0aW5nT2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpc0ZpeGVkID09PSB2b2lkIDApIHtcbiAgICBpc0ZpeGVkID0gZmFsc2U7XG4gIH1cbiAgaWYgKCFmbG9hdGluZ09mZnNldFBhcmVudCB8fCBpc0ZpeGVkICYmIGZsb2F0aW5nT2Zmc2V0UGFyZW50ICE9PSBnZXRXaW5kb3coZWxlbWVudCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgcmV0dXJuIGlzRml4ZWQ7XG59XG5cbmZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCBpbmNsdWRlU2NhbGUsIGlzRml4ZWRTdHJhdGVneSwgb2Zmc2V0UGFyZW50KSB7XG4gIGlmIChpbmNsdWRlU2NhbGUgPT09IHZvaWQgMCkge1xuICAgIGluY2x1ZGVTY2FsZSA9IGZhbHNlO1xuICB9XG4gIGlmIChpc0ZpeGVkU3RyYXRlZ3kgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWRTdHJhdGVneSA9IGZhbHNlO1xuICB9XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICBjb25zdCBkb21FbGVtZW50ID0gdW53cmFwRWxlbWVudChlbGVtZW50KTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBpZiAoaW5jbHVkZVNjYWxlKSB7XG4gICAgaWYgKG9mZnNldFBhcmVudCkge1xuICAgICAgaWYgKGlzRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHNjYWxlID0gZ2V0U2NhbGUob2Zmc2V0UGFyZW50KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2NhbGUgPSBnZXRTY2FsZShlbGVtZW50KTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IHNob3VsZEFkZFZpc3VhbE9mZnNldHMoZG9tRWxlbWVudCwgaXNGaXhlZFN0cmF0ZWd5LCBvZmZzZXRQYXJlbnQpID8gZ2V0VmlzdWFsT2Zmc2V0cyhkb21FbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgbGV0IHggPSAoY2xpZW50UmVjdC5sZWZ0ICsgdmlzdWFsT2Zmc2V0cy54KSAvIHNjYWxlLng7XG4gIGxldCB5ID0gKGNsaWVudFJlY3QudG9wICsgdmlzdWFsT2Zmc2V0cy55KSAvIHNjYWxlLnk7XG4gIGxldCB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGggLyBzY2FsZS54O1xuICBsZXQgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQgLyBzY2FsZS55O1xuICBpZiAoZG9tRWxlbWVudCkge1xuICAgIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhkb21FbGVtZW50KTtcbiAgICBjb25zdCBvZmZzZXRXaW4gPSBvZmZzZXRQYXJlbnQgJiYgaXNFbGVtZW50KG9mZnNldFBhcmVudCkgPyBnZXRXaW5kb3cob2Zmc2V0UGFyZW50KSA6IG9mZnNldFBhcmVudDtcbiAgICBsZXQgY3VycmVudFdpbiA9IHdpbjtcbiAgICBsZXQgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB3aGlsZSAoY3VycmVudElGcmFtZSAmJiBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0V2luICE9PSBjdXJyZW50V2luKSB7XG4gICAgICBjb25zdCBpZnJhbWVTY2FsZSA9IGdldFNjYWxlKGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY29uc3QgaWZyYW1lUmVjdCA9IGN1cnJlbnRJRnJhbWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBjc3MgPSBnZXRDb21wdXRlZFN0eWxlJDEoY3VycmVudElGcmFtZSk7XG4gICAgICBjb25zdCBsZWZ0ID0gaWZyYW1lUmVjdC5sZWZ0ICsgKGN1cnJlbnRJRnJhbWUuY2xpZW50TGVmdCArIHBhcnNlRmxvYXQoY3NzLnBhZGRpbmdMZWZ0KSkgKiBpZnJhbWVTY2FsZS54O1xuICAgICAgY29uc3QgdG9wID0gaWZyYW1lUmVjdC50b3AgKyAoY3VycmVudElGcmFtZS5jbGllbnRUb3AgKyBwYXJzZUZsb2F0KGNzcy5wYWRkaW5nVG9wKSkgKiBpZnJhbWVTY2FsZS55O1xuICAgICAgeCAqPSBpZnJhbWVTY2FsZS54O1xuICAgICAgeSAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgd2lkdGggKj0gaWZyYW1lU2NhbGUueDtcbiAgICAgIGhlaWdodCAqPSBpZnJhbWVTY2FsZS55O1xuICAgICAgeCArPSBsZWZ0O1xuICAgICAgeSArPSB0b3A7XG4gICAgICBjdXJyZW50V2luID0gZ2V0V2luZG93KGN1cnJlbnRJRnJhbWUpO1xuICAgICAgY3VycmVudElGcmFtZSA9IGdldEZyYW1lRWxlbWVudChjdXJyZW50V2luKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3Qoe1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfSk7XG59XG5cbi8vIElmIDxodG1sPiBoYXMgYSBDU1Mgd2lkdGggZ3JlYXRlciB0aGFuIHRoZSB2aWV3cG9ydCwgdGhlbiB0aGlzIHdpbGwgYmVcbi8vIGluY29ycmVjdCBmb3IgUlRMLlxuZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50LCByZWN0KSB7XG4gIGNvbnN0IGxlZnRTY3JvbGwgPSBnZXROb2RlU2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG4gIGlmICghcmVjdCkge1xuICAgIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgbGVmdFNjcm9sbDtcbiAgfVxuICByZXR1cm4gcmVjdC5sZWZ0ICsgbGVmdFNjcm9sbDtcbn1cblxuZnVuY3Rpb24gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCkge1xuICBjb25zdCBodG1sUmVjdCA9IGRvY3VtZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgY29uc3QgeCA9IGh0bWxSZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50LCBodG1sUmVjdCk7XG4gIGNvbnN0IHkgPSBodG1sUmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wO1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5mdW5jdGlvbiBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdChfcmVmKSB7XG4gIGxldCB7XG4gICAgZWxlbWVudHMsXG4gICAgcmVjdCxcbiAgICBvZmZzZXRQYXJlbnQsXG4gICAgc3RyYXRlZ3lcbiAgfSA9IF9yZWY7XG4gIGNvbnN0IGlzRml4ZWQgPSBzdHJhdGVneSA9PT0gJ2ZpeGVkJztcbiAgY29uc3QgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IHRvcExheWVyID0gZWxlbWVudHMgPyBpc1RvcExheWVyKGVsZW1lbnRzLmZsb2F0aW5nKSA6IGZhbHNlO1xuICBpZiAob2Zmc2V0UGFyZW50ID09PSBkb2N1bWVudEVsZW1lbnQgfHwgdG9wTGF5ZXIgJiYgaXNGaXhlZCkge1xuICAgIHJldHVybiByZWN0O1xuICB9XG4gIGxldCBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgbGV0IHNjYWxlID0gY3JlYXRlQ29vcmRzKDEpO1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuICBjb25zdCBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpKSB7XG4gICAgICBjb25zdCBvZmZzZXRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KG9mZnNldFBhcmVudCk7XG4gICAgICBzY2FsZSA9IGdldFNjYWxlKG9mZnNldFBhcmVudCk7XG4gICAgICBvZmZzZXRzLnggPSBvZmZzZXRSZWN0LnggKyBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSA9IG9mZnNldFJlY3QueSArIG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfVxuICB9XG4gIGNvbnN0IGh0bWxPZmZzZXQgPSBkb2N1bWVudEVsZW1lbnQgJiYgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkID8gZ2V0SFRNTE9mZnNldChkb2N1bWVudEVsZW1lbnQsIHNjcm9sbCkgOiBjcmVhdGVDb29yZHMoMCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHJlY3Qud2lkdGggKiBzY2FsZS54LFxuICAgIGhlaWdodDogcmVjdC5oZWlnaHQgKiBzY2FsZS55LFxuICAgIHg6IHJlY3QueCAqIHNjYWxlLnggLSBzY3JvbGwuc2Nyb2xsTGVmdCAqIHNjYWxlLnggKyBvZmZzZXRzLnggKyBodG1sT2Zmc2V0LngsXG4gICAgeTogcmVjdC55ICogc2NhbGUueSAtIHNjcm9sbC5zY3JvbGxUb3AgKiBzY2FsZS55ICsgb2Zmc2V0cy55ICsgaHRtbE9mZnNldC55XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RzKGVsZW1lbnQpIHtcbiAgcmV0dXJuIEFycmF5LmZyb20oZWxlbWVudC5nZXRDbGllbnRSZWN0cygpKTtcbn1cblxuLy8gR2V0cyB0aGUgZW50aXJlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgZG9jdW1lbnQgYXJlYSwgZXZlbiBleHRlbmRpbmcgb3V0c2lkZVxuLy8gb2YgdGhlIGA8aHRtbD5gIGFuZCBgPGJvZHk+YCByZWN0IGJvdW5kcyBpZiBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZS5cbmZ1bmN0aW9uIGdldERvY3VtZW50UmVjdChlbGVtZW50KSB7XG4gIGNvbnN0IGh0bWwgPSBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCk7XG4gIGNvbnN0IHNjcm9sbCA9IGdldE5vZGVTY3JvbGwoZWxlbWVudCk7XG4gIGNvbnN0IGJvZHkgPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgY29uc3Qgd2lkdGggPSBtYXgoaHRtbC5zY3JvbGxXaWR0aCwgaHRtbC5jbGllbnRXaWR0aCwgYm9keS5zY3JvbGxXaWR0aCwgYm9keS5jbGllbnRXaWR0aCk7XG4gIGNvbnN0IGhlaWdodCA9IG1heChodG1sLnNjcm9sbEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGJvZHkuc2Nyb2xsSGVpZ2h0LCBib2R5LmNsaWVudEhlaWdodCk7XG4gIGxldCB4ID0gLXNjcm9sbC5zY3JvbGxMZWZ0ICsgZ2V0V2luZG93U2Nyb2xsQmFyWChlbGVtZW50KTtcbiAgY29uc3QgeSA9IC1zY3JvbGwuc2Nyb2xsVG9wO1xuICBpZiAoZ2V0Q29tcHV0ZWRTdHlsZSQxKGJvZHkpLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICB4ICs9IG1heChodG1sLmNsaWVudFdpZHRoLCBib2R5LmNsaWVudFdpZHRoKSAtIHdpZHRoO1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG4vLyBTYWZldHkgY2hlY2s6IGVuc3VyZSB0aGUgc2Nyb2xsYmFyIHNwYWNlIGlzIHJlYXNvbmFibGUgaW4gY2FzZSB0aGlzXG4vLyBjYWxjdWxhdGlvbiBpcyBhZmZlY3RlZCBieSB1bnVzdWFsIHN0eWxlcy5cbi8vIE1vc3Qgc2Nyb2xsYmFycyBsZWF2ZSAxNS0xOHB4IG9mIHNwYWNlLlxuY29uc3QgU0NST0xMQkFSX01BWCA9IDI1O1xuZnVuY3Rpb24gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgY29uc3QgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgY29uc3QgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIGxldCB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIGxldCBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgbGV0IHggPSAwO1xuICBsZXQgeSA9IDA7XG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0O1xuICAgIGNvbnN0IHZpc3VhbFZpZXdwb3J0QmFzZWQgPSBpc1dlYktpdCgpO1xuICAgIGlmICghdmlzdWFsVmlld3BvcnRCYXNlZCB8fCB2aXN1YWxWaWV3cG9ydEJhc2VkICYmIHN0cmF0ZWd5ID09PSAnZml4ZWQnKSB7XG4gICAgICB4ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdDtcbiAgICAgIHkgPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3A7XG4gICAgfVxuICB9XG4gIGNvbnN0IHdpbmRvd1Njcm9sbGJhclggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGh0bWwpO1xuICAvLyA8aHRtbD4gYG92ZXJmbG93OiBoaWRkZW5gICsgYHNjcm9sbGJhci1ndXR0ZXI6IHN0YWJsZWAgcmVkdWNlcyB0aGVcbiAgLy8gdmlzdWFsIHdpZHRoIG9mIHRoZSA8aHRtbD4gYnV0IHRoaXMgaXMgbm90IGNvbnNpZGVyZWQgaW4gdGhlIHNpemVcbiAgLy8gb2YgYGh0bWwuY2xpZW50V2lkdGhgLlxuICBpZiAod2luZG93U2Nyb2xsYmFyWCA8PSAwKSB7XG4gICAgY29uc3QgZG9jID0gaHRtbC5vd25lckRvY3VtZW50O1xuICAgIGNvbnN0IGJvZHkgPSBkb2MuYm9keTtcbiAgICBjb25zdCBib2R5U3R5bGVzID0gZ2V0Q29tcHV0ZWRTdHlsZShib2R5KTtcbiAgICBjb25zdCBib2R5TWFyZ2luSW5saW5lID0gZG9jLmNvbXBhdE1vZGUgPT09ICdDU1MxQ29tcGF0JyA/IHBhcnNlRmxvYXQoYm9keVN0eWxlcy5tYXJnaW5MZWZ0KSArIHBhcnNlRmxvYXQoYm9keVN0eWxlcy5tYXJnaW5SaWdodCkgfHwgMCA6IDA7XG4gICAgY29uc3QgY2xpcHBpbmdTdGFibGVTY3JvbGxiYXJXaWR0aCA9IE1hdGguYWJzKGh0bWwuY2xpZW50V2lkdGggLSBib2R5LmNsaWVudFdpZHRoIC0gYm9keU1hcmdpbklubGluZSk7XG4gICAgaWYgKGNsaXBwaW5nU3RhYmxlU2Nyb2xsYmFyV2lkdGggPD0gU0NST0xMQkFSX01BWCkge1xuICAgICAgd2lkdGggLT0gY2xpcHBpbmdTdGFibGVTY3JvbGxiYXJXaWR0aDtcbiAgICB9XG4gIH0gZWxzZSBpZiAod2luZG93U2Nyb2xsYmFyWCA8PSBTQ1JPTExCQVJfTUFYKSB7XG4gICAgLy8gSWYgdGhlIDxib2R5PiBzY3JvbGxiYXIgaXMgb24gdGhlIGxlZnQsIHRoZSB3aWR0aCBuZWVkcyB0byBiZSBleHRlbmRlZFxuICAgIC8vIGJ5IHRoZSBzY3JvbGxiYXIgYW1vdW50IHNvIHRoZXJlIGlzbid0IGV4dHJhIHNwYWNlIG9uIHRoZSByaWdodC5cbiAgICB3aWR0aCArPSB3aW5kb3dTY3JvbGxiYXJYO1xuICB9XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0LFxuICAgIHgsXG4gICAgeVxuICB9O1xufVxuXG5jb25zdCBhYnNvbHV0ZU9yRml4ZWQgPSAvKiNfX1BVUkVfXyovbmV3IFNldChbJ2Fic29sdXRlJywgJ2ZpeGVkJ10pO1xuLy8gUmV0dXJucyB0aGUgaW5uZXIgY2xpZW50IHJlY3QsIHN1YnRyYWN0aW5nIHNjcm9sbGJhcnMgaWYgcHJlc2VudC5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KSB7XG4gIGNvbnN0IGNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgc3RyYXRlZ3kgPT09ICdmaXhlZCcpO1xuICBjb25zdCB0b3AgPSBjbGllbnRSZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50VG9wO1xuICBjb25zdCBsZWZ0ID0gY2xpZW50UmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICBjb25zdCBzY2FsZSA9IGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRTY2FsZShlbGVtZW50KSA6IGNyZWF0ZUNvb3JkcygxKTtcbiAgY29uc3Qgd2lkdGggPSBlbGVtZW50LmNsaWVudFdpZHRoICogc2NhbGUueDtcbiAgY29uc3QgaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQgKiBzY2FsZS55O1xuICBjb25zdCB4ID0gbGVmdCAqIHNjYWxlLng7XG4gIGNvbnN0IHkgPSB0b3AgKiBzY2FsZS55O1xuICByZXR1cm4ge1xuICAgIHdpZHRoLFxuICAgIGhlaWdodCxcbiAgICB4LFxuICAgIHlcbiAgfTtcbn1cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvcihlbGVtZW50LCBjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkge1xuICBsZXQgcmVjdDtcbiAgaWYgKGNsaXBwaW5nQW5jZXN0b3IgPT09ICd2aWV3cG9ydCcpIHtcbiAgICByZWN0ID0gZ2V0Vmlld3BvcnRSZWN0KGVsZW1lbnQsIHN0cmF0ZWd5KTtcbiAgfSBlbHNlIGlmIChjbGlwcGluZ0FuY2VzdG9yID09PSAnZG9jdW1lbnQnKSB7XG4gICAgcmVjdCA9IGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpO1xuICB9IGVsc2UgaWYgKGlzRWxlbWVudChjbGlwcGluZ0FuY2VzdG9yKSkge1xuICAgIHJlY3QgPSBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChjbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgdmlzdWFsT2Zmc2V0cyA9IGdldFZpc3VhbE9mZnNldHMoZWxlbWVudCk7XG4gICAgcmVjdCA9IHtcbiAgICAgIHg6IGNsaXBwaW5nQW5jZXN0b3IueCAtIHZpc3VhbE9mZnNldHMueCxcbiAgICAgIHk6IGNsaXBwaW5nQW5jZXN0b3IueSAtIHZpc3VhbE9mZnNldHMueSxcbiAgICAgIHdpZHRoOiBjbGlwcGluZ0FuY2VzdG9yLndpZHRoLFxuICAgICAgaGVpZ2h0OiBjbGlwcGluZ0FuY2VzdG9yLmhlaWdodFxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHJlY3RUb0NsaWVudFJlY3QocmVjdCk7XG59XG5mdW5jdGlvbiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgc3RvcE5vZGUpIHtcbiAgY29uc3QgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoZWxlbWVudCk7XG4gIGlmIChwYXJlbnROb2RlID09PSBzdG9wTm9kZSB8fCAhaXNFbGVtZW50KHBhcmVudE5vZGUpIHx8IGlzTGFzdFRyYXZlcnNhYmxlTm9kZShwYXJlbnROb2RlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSQxKHBhcmVudE5vZGUpLnBvc2l0aW9uID09PSAnZml4ZWQnIHx8IGhhc0ZpeGVkUG9zaXRpb25BbmNlc3RvcihwYXJlbnROb2RlLCBzdG9wTm9kZSk7XG59XG5cbi8vIEEgXCJjbGlwcGluZyBhbmNlc3RvclwiIGlzIGFuIGBvdmVyZmxvd2AgZWxlbWVudCB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgY2hpbGQgZWxlbWVudHMuIFRoaXMgcmV0dXJucyBhbGwgY2xpcHBpbmcgYW5jZXN0b3JzXG4vLyBvZiB0aGUgZ2l2ZW4gZWxlbWVudCB1cCB0aGUgdHJlZS5cbmZ1bmN0aW9uIGdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9ycyhlbGVtZW50LCBjYWNoZSkge1xuICBjb25zdCBjYWNoZWRSZXN1bHQgPSBjYWNoZS5nZXQoZWxlbWVudCk7XG4gIGlmIChjYWNoZWRSZXN1bHQpIHtcbiAgICByZXR1cm4gY2FjaGVkUmVzdWx0O1xuICB9XG4gIGxldCByZXN1bHQgPSBnZXRPdmVyZmxvd0FuY2VzdG9ycyhlbGVtZW50LCBbXSwgZmFsc2UpLmZpbHRlcihlbCA9PiBpc0VsZW1lbnQoZWwpICYmIGdldE5vZGVOYW1lKGVsKSAhPT0gJ2JvZHknKTtcbiAgbGV0IGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgY29uc3QgZWxlbWVudElzRml4ZWQgPSBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCc7XG4gIGxldCBjdXJyZW50Tm9kZSA9IGVsZW1lbnRJc0ZpeGVkID8gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSA6IGVsZW1lbnQ7XG5cbiAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcbiAgd2hpbGUgKGlzRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShjdXJyZW50Tm9kZSkpIHtcbiAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZSQxKGN1cnJlbnROb2RlKTtcbiAgICBjb25zdCBjdXJyZW50Tm9kZUlzQ29udGFpbmluZyA9IGlzQ29udGFpbmluZ0Jsb2NrKGN1cnJlbnROb2RlKTtcbiAgICBpZiAoIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgc2hvdWxkRHJvcEN1cnJlbnROb2RlID0gZWxlbWVudElzRml4ZWQgPyAhY3VycmVudE5vZGVJc0NvbnRhaW5pbmcgJiYgIWN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlIDogIWN1cnJlbnROb2RlSXNDb250YWluaW5nICYmIGNvbXB1dGVkU3R5bGUucG9zaXRpb24gPT09ICdzdGF0aWMnICYmICEhY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUgJiYgYWJzb2x1dGVPckZpeGVkLmhhcyhjdXJyZW50Q29udGFpbmluZ0Jsb2NrQ29tcHV0ZWRTdHlsZS5wb3NpdGlvbikgfHwgaXNPdmVyZmxvd0VsZW1lbnQoY3VycmVudE5vZGUpICYmICFjdXJyZW50Tm9kZUlzQ29udGFpbmluZyAmJiBoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IoZWxlbWVudCwgY3VycmVudE5vZGUpO1xuICAgIGlmIChzaG91bGREcm9wQ3VycmVudE5vZGUpIHtcbiAgICAgIC8vIERyb3Agbm9uLWNvbnRhaW5pbmcgYmxvY2tzLlxuICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihhbmNlc3RvciA9PiBhbmNlc3RvciAhPT0gY3VycmVudE5vZGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBSZWNvcmQgbGFzdCBjb250YWluaW5nIGJsb2NrIGZvciBuZXh0IGl0ZXJhdGlvbi5cbiAgICAgIGN1cnJlbnRDb250YWluaW5nQmxvY2tDb21wdXRlZFN0eWxlID0gY29tcHV0ZWRTdHlsZTtcbiAgICB9XG4gICAgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGN1cnJlbnROb2RlKTtcbiAgfVxuICBjYWNoZS5zZXQoZWxlbWVudCwgcmVzdWx0KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gR2V0cyB0aGUgbWF4aW11bSBhcmVhIHRoYXQgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSBpbiBkdWUgdG8gYW55IG51bWJlciBvZlxuLy8gY2xpcHBpbmcgYW5jZXN0b3JzLlxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KF9yZWYpIHtcbiAgbGV0IHtcbiAgICBlbGVtZW50LFxuICAgIGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeSxcbiAgICBzdHJhdGVneVxuICB9ID0gX3JlZjtcbiAgY29uc3QgZWxlbWVudENsaXBwaW5nQW5jZXN0b3JzID0gYm91bmRhcnkgPT09ICdjbGlwcGluZ0FuY2VzdG9ycycgPyBpc1RvcExheWVyKGVsZW1lbnQpID8gW10gOiBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnMoZWxlbWVudCwgdGhpcy5fYykgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICBjb25zdCBjbGlwcGluZ0FuY2VzdG9ycyA9IFsuLi5lbGVtZW50Q2xpcHBpbmdBbmNlc3RvcnMsIHJvb3RCb3VuZGFyeV07XG4gIGNvbnN0IGZpcnN0Q2xpcHBpbmdBbmNlc3RvciA9IGNsaXBwaW5nQW5jZXN0b3JzWzBdO1xuICBjb25zdCBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ0FuY2VzdG9ycy5yZWR1Y2UoKGFjY1JlY3QsIGNsaXBwaW5nQW5jZXN0b3IpID0+IHtcbiAgICBjb25zdCByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21DbGlwcGluZ0FuY2VzdG9yKGVsZW1lbnQsIGNsaXBwaW5nQW5jZXN0b3IsIHN0cmF0ZWd5KTtcbiAgICBhY2NSZWN0LnRvcCA9IG1heChyZWN0LnRvcCwgYWNjUmVjdC50b3ApO1xuICAgIGFjY1JlY3QucmlnaHQgPSBtaW4ocmVjdC5yaWdodCwgYWNjUmVjdC5yaWdodCk7XG4gICAgYWNjUmVjdC5ib3R0b20gPSBtaW4ocmVjdC5ib3R0b20sIGFjY1JlY3QuYm90dG9tKTtcbiAgICBhY2NSZWN0LmxlZnQgPSBtYXgocmVjdC5sZWZ0LCBhY2NSZWN0LmxlZnQpO1xuICAgIHJldHVybiBhY2NSZWN0O1xuICB9LCBnZXRDbGllbnRSZWN0RnJvbUNsaXBwaW5nQW5jZXN0b3IoZWxlbWVudCwgZmlyc3RDbGlwcGluZ0FuY2VzdG9yLCBzdHJhdGVneSkpO1xuICByZXR1cm4ge1xuICAgIHdpZHRoOiBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdCxcbiAgICBoZWlnaHQ6IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wLFxuICAgIHg6IGNsaXBwaW5nUmVjdC5sZWZ0LFxuICAgIHk6IGNsaXBwaW5nUmVjdC50b3BcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0RGltZW5zaW9ucyhlbGVtZW50KSB7XG4gIGNvbnN0IHtcbiAgICB3aWR0aCxcbiAgICBoZWlnaHRcbiAgfSA9IGdldENzc0RpbWVuc2lvbnMoZWxlbWVudCk7XG4gIHJldHVybiB7XG4gICAgd2lkdGgsXG4gICAgaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50KGVsZW1lbnQsIG9mZnNldFBhcmVudCwgc3RyYXRlZ3kpIHtcbiAgY29uc3QgaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIGNvbnN0IGRvY3VtZW50RWxlbWVudCA9IGdldERvY3VtZW50RWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICBjb25zdCBpc0ZpeGVkID0gc3RyYXRlZ3kgPT09ICdmaXhlZCc7XG4gIGNvbnN0IHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCwgdHJ1ZSwgaXNGaXhlZCwgb2Zmc2V0UGFyZW50KTtcbiAgbGV0IHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICBjb25zdCBvZmZzZXRzID0gY3JlYXRlQ29vcmRzKDApO1xuXG4gIC8vIElmIHRoZSA8Ym9keT4gc2Nyb2xsYmFyIGFwcGVhcnMgb24gdGhlIGxlZnQgKGUuZy4gUlRMIHN5c3RlbXMpLiBVc2VcbiAgLy8gRmlyZWZveCB3aXRoIGxheW91dC5zY3JvbGxiYXIuc2lkZSA9IDMgaW4gYWJvdXQ6Y29uZmlnIHRvIHRlc3QgdGhpcy5cbiAgZnVuY3Rpb24gc2V0TGVmdFJUTFNjcm9sbGJhck9mZnNldCgpIHtcbiAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gIH1cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgaXNPdmVyZmxvd0VsZW1lbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cbiAgICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQpIHtcbiAgICAgIGNvbnN0IG9mZnNldFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlLCBpc0ZpeGVkLCBvZmZzZXRQYXJlbnQpO1xuICAgICAgb2Zmc2V0cy54ID0gb2Zmc2V0UmVjdC54ICsgb2Zmc2V0UGFyZW50LmNsaWVudExlZnQ7XG4gICAgICBvZmZzZXRzLnkgPSBvZmZzZXRSZWN0LnkgKyBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBzZXRMZWZ0UlRMU2Nyb2xsYmFyT2Zmc2V0KCk7XG4gICAgfVxuICB9XG4gIGlmIChpc0ZpeGVkICYmICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiBkb2N1bWVudEVsZW1lbnQpIHtcbiAgICBzZXRMZWZ0UlRMU2Nyb2xsYmFyT2Zmc2V0KCk7XG4gIH1cbiAgY29uc3QgaHRtbE9mZnNldCA9IGRvY3VtZW50RWxlbWVudCAmJiAhaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgJiYgIWlzRml4ZWQgPyBnZXRIVE1MT2Zmc2V0KGRvY3VtZW50RWxlbWVudCwgc2Nyb2xsKSA6IGNyZWF0ZUNvb3JkcygwKTtcbiAgY29uc3QgeCA9IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54IC0gaHRtbE9mZnNldC54O1xuICBjb25zdCB5ID0gcmVjdC50b3AgKyBzY3JvbGwuc2Nyb2xsVG9wIC0gb2Zmc2V0cy55IC0gaHRtbE9mZnNldC55O1xuICByZXR1cm4ge1xuICAgIHgsXG4gICAgeSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzU3RhdGljUG9zaXRpb25lZChlbGVtZW50KSB7XG4gIHJldHVybiBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnO1xufVxuXG5mdW5jdGlvbiBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCBnZXRDb21wdXRlZFN0eWxlJDEoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBpZiAocG9seWZpbGwpIHtcbiAgICByZXR1cm4gcG9seWZpbGwoZWxlbWVudCk7XG4gIH1cbiAgbGV0IHJhd09mZnNldFBhcmVudCA9IGVsZW1lbnQub2Zmc2V0UGFyZW50O1xuXG4gIC8vIEZpcmVmb3ggcmV0dXJucyB0aGUgPGh0bWw+IGVsZW1lbnQgYXMgdGhlIG9mZnNldFBhcmVudCBpZiBpdCdzIG5vbi1zdGF0aWMsXG4gIC8vIHdoaWxlIENocm9tZSBhbmQgU2FmYXJpIHJldHVybiB0aGUgPGJvZHk+IGVsZW1lbnQuIFRoZSA8Ym9keT4gZWxlbWVudCBtdXN0XG4gIC8vIGJlIHVzZWQgdG8gcGVyZm9ybSB0aGUgY29ycmVjdCBjYWxjdWxhdGlvbnMgZXZlbiBpZiB0aGUgPGh0bWw+IGVsZW1lbnQgaXNcbiAgLy8gbm9uLXN0YXRpYy5cbiAgaWYgKGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSA9PT0gcmF3T2Zmc2V0UGFyZW50KSB7XG4gICAgcmF3T2Zmc2V0UGFyZW50ID0gcmF3T2Zmc2V0UGFyZW50Lm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuICByZXR1cm4gcmF3T2Zmc2V0UGFyZW50O1xufVxuXG4vLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuZnVuY3Rpb24gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQsIHBvbHlmaWxsKSB7XG4gIGNvbnN0IHdpbiA9IGdldFdpbmRvdyhlbGVtZW50KTtcbiAgaWYgKGlzVG9wTGF5ZXIoZWxlbWVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIGxldCBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuICAgIHdoaWxlIChzdmdPZmZzZXRQYXJlbnQgJiYgIWlzTGFzdFRyYXZlcnNhYmxlTm9kZShzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICBpZiAoaXNFbGVtZW50KHN2Z09mZnNldFBhcmVudCkgJiYgIWlzU3RhdGljUG9zaXRpb25lZChzdmdPZmZzZXRQYXJlbnQpKSB7XG4gICAgICAgIHJldHVybiBzdmdPZmZzZXRQYXJlbnQ7XG4gICAgICB9XG4gICAgICBzdmdPZmZzZXRQYXJlbnQgPSBnZXRQYXJlbnROb2RlKHN2Z09mZnNldFBhcmVudCk7XG4gICAgfVxuICAgIHJldHVybiB3aW47XG4gIH1cbiAgbGV0IG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCwgcG9seWZpbGwpO1xuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkpIHtcbiAgICBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KG9mZnNldFBhcmVudCwgcG9seWZpbGwpO1xuICB9XG4gIGlmIChvZmZzZXRQYXJlbnQgJiYgaXNMYXN0VHJhdmVyc2FibGVOb2RlKG9mZnNldFBhcmVudCkgJiYgaXNTdGF0aWNQb3NpdGlvbmVkKG9mZnNldFBhcmVudCkgJiYgIWlzQ29udGFpbmluZ0Jsb2NrKG9mZnNldFBhcmVudCkpIHtcbiAgICByZXR1cm4gd2luO1xuICB9XG4gIHJldHVybiBvZmZzZXRQYXJlbnQgfHwgZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHx8IHdpbjtcbn1cblxuY29uc3QgZ2V0RWxlbWVudFJlY3RzID0gYXN5bmMgZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgZ2V0T2Zmc2V0UGFyZW50Rm4gPSB0aGlzLmdldE9mZnNldFBhcmVudCB8fCBnZXRPZmZzZXRQYXJlbnQ7XG4gIGNvbnN0IGdldERpbWVuc2lvbnNGbiA9IHRoaXMuZ2V0RGltZW5zaW9ucztcbiAgY29uc3QgZmxvYXRpbmdEaW1lbnNpb25zID0gYXdhaXQgZ2V0RGltZW5zaW9uc0ZuKGRhdGEuZmxvYXRpbmcpO1xuICByZXR1cm4ge1xuICAgIHJlZmVyZW5jZTogZ2V0UmVjdFJlbGF0aXZlVG9PZmZzZXRQYXJlbnQoZGF0YS5yZWZlcmVuY2UsIGF3YWl0IGdldE9mZnNldFBhcmVudEZuKGRhdGEuZmxvYXRpbmcpLCBkYXRhLnN0cmF0ZWd5KSxcbiAgICBmbG9hdGluZzoge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDAsXG4gICAgICB3aWR0aDogZmxvYXRpbmdEaW1lbnNpb25zLndpZHRoLFxuICAgICAgaGVpZ2h0OiBmbG9hdGluZ0RpbWVuc2lvbnMuaGVpZ2h0XG4gICAgfVxuICB9O1xufTtcblxuZnVuY3Rpb24gaXNSVEwoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSQxKGVsZW1lbnQpLmRpcmVjdGlvbiA9PT0gJ3J0bCc7XG59XG5cbmNvbnN0IHBsYXRmb3JtID0ge1xuICBjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCxcbiAgZ2V0RG9jdW1lbnRFbGVtZW50LFxuICBnZXRDbGlwcGluZ1JlY3QsXG4gIGdldE9mZnNldFBhcmVudCxcbiAgZ2V0RWxlbWVudFJlY3RzLFxuICBnZXRDbGllbnRSZWN0cyxcbiAgZ2V0RGltZW5zaW9ucyxcbiAgZ2V0U2NhbGUsXG4gIGlzRWxlbWVudCxcbiAgaXNSVExcbn07XG5cbmZ1bmN0aW9uIHJlY3RzQXJlRXF1YWwoYSwgYikge1xuICByZXR1cm4gYS54ID09PSBiLnggJiYgYS55ID09PSBiLnkgJiYgYS53aWR0aCA9PT0gYi53aWR0aCAmJiBhLmhlaWdodCA9PT0gYi5oZWlnaHQ7XG59XG5cbi8vIGh0dHBzOi8vc2FtdGhvci5hdS8yMDIxL29ic2VydmluZy1kb20vXG5mdW5jdGlvbiBvYnNlcnZlTW92ZShlbGVtZW50LCBvbk1vdmUpIHtcbiAgbGV0IGlvID0gbnVsbDtcbiAgbGV0IHRpbWVvdXRJZDtcbiAgY29uc3Qgcm9vdCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgZnVuY3Rpb24gY2xlYW51cCgpIHtcbiAgICB2YXIgX2lvO1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgIChfaW8gPSBpbykgPT0gbnVsbCB8fCBfaW8uZGlzY29ubmVjdCgpO1xuICAgIGlvID0gbnVsbDtcbiAgfVxuICBmdW5jdGlvbiByZWZyZXNoKHNraXAsIHRocmVzaG9sZCkge1xuICAgIGlmIChza2lwID09PSB2b2lkIDApIHtcbiAgICAgIHNraXAgPSBmYWxzZTtcbiAgICB9XG4gICAgaWYgKHRocmVzaG9sZCA9PT0gdm9pZCAwKSB7XG4gICAgICB0aHJlc2hvbGQgPSAxO1xuICAgIH1cbiAgICBjbGVhbnVwKCk7XG4gICAgY29uc3QgZWxlbWVudFJlY3RGb3JSb290TWFyZ2luID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCB7XG4gICAgICBsZWZ0LFxuICAgICAgdG9wLFxuICAgICAgd2lkdGgsXG4gICAgICBoZWlnaHRcbiAgICB9ID0gZWxlbWVudFJlY3RGb3JSb290TWFyZ2luO1xuICAgIGlmICghc2tpcCkge1xuICAgICAgb25Nb3ZlKCk7XG4gICAgfVxuICAgIGlmICghd2lkdGggfHwgIWhlaWdodCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBpbnNldFRvcCA9IGZsb29yKHRvcCk7XG4gICAgY29uc3QgaW5zZXRSaWdodCA9IGZsb29yKHJvb3QuY2xpZW50V2lkdGggLSAobGVmdCArIHdpZHRoKSk7XG4gICAgY29uc3QgaW5zZXRCb3R0b20gPSBmbG9vcihyb290LmNsaWVudEhlaWdodCAtICh0b3AgKyBoZWlnaHQpKTtcbiAgICBjb25zdCBpbnNldExlZnQgPSBmbG9vcihsZWZ0KTtcbiAgICBjb25zdCByb290TWFyZ2luID0gLWluc2V0VG9wICsgXCJweCBcIiArIC1pbnNldFJpZ2h0ICsgXCJweCBcIiArIC1pbnNldEJvdHRvbSArIFwicHggXCIgKyAtaW5zZXRMZWZ0ICsgXCJweFwiO1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICByb290TWFyZ2luLFxuICAgICAgdGhyZXNob2xkOiBtYXgoMCwgbWluKDEsIHRocmVzaG9sZCkpIHx8IDFcbiAgICB9O1xuICAgIGxldCBpc0ZpcnN0VXBkYXRlID0gdHJ1ZTtcbiAgICBmdW5jdGlvbiBoYW5kbGVPYnNlcnZlKGVudHJpZXMpIHtcbiAgICAgIGNvbnN0IHJhdGlvID0gZW50cmllc1swXS5pbnRlcnNlY3Rpb25SYXRpbztcbiAgICAgIGlmIChyYXRpbyAhPT0gdGhyZXNob2xkKSB7XG4gICAgICAgIGlmICghaXNGaXJzdFVwZGF0ZSkge1xuICAgICAgICAgIHJldHVybiByZWZyZXNoKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFyYXRpbykge1xuICAgICAgICAgIC8vIElmIHRoZSByZWZlcmVuY2UgaXMgY2xpcHBlZCwgdGhlIHJhdGlvIGlzIDAuIFRocm90dGxlIHRoZSByZWZyZXNoXG4gICAgICAgICAgLy8gdG8gcHJldmVudCBhbiBpbmZpbml0ZSBsb29wIG9mIHVwZGF0ZXMuXG4gICAgICAgICAgdGltZW91dElkID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICByZWZyZXNoKGZhbHNlLCAxZS03KTtcbiAgICAgICAgICB9LCAxMDAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZWZyZXNoKGZhbHNlLCByYXRpbyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyYXRpbyA9PT0gMSAmJiAhcmVjdHNBcmVFcXVhbChlbGVtZW50UmVjdEZvclJvb3RNYXJnaW4sIGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpKSB7XG4gICAgICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCBldmVuIHRob3VnaCB0aGUgcmF0aW8gaXMgcmVwb3J0ZWQgYXMgMSwgdGhlXG4gICAgICAgIC8vIGVsZW1lbnQgaXMgbm90IGFjdHVhbGx5IGZ1bGx5IHdpdGhpbiB0aGUgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIncyByb290XG4gICAgICAgIC8vIGFyZWEgYW55bW9yZS4gVGhpcyBjYW4gaGFwcGVuIHVuZGVyIHBlcmZvcm1hbmNlIGNvbnN0cmFpbnRzLiBUaGlzIG1heVxuICAgICAgICAvLyBiZSBhIGJ1ZyBpbiB0aGUgYnJvd3NlcidzIEludGVyc2VjdGlvbk9ic2VydmVyIGltcGxlbWVudGF0aW9uLiBUb1xuICAgICAgICAvLyB3b3JrIGFyb3VuZCB0aGlzLCB3ZSBjb21wYXJlIHRoZSBlbGVtZW50J3MgYm91bmRpbmcgcmVjdCBub3cgd2l0aFxuICAgICAgICAvLyB3aGF0IGl0IHdhcyBhdCB0aGUgdGltZSB3ZSBjcmVhdGVkIHRoZSBJbnRlcnNlY3Rpb25PYnNlcnZlci4gSWYgdGhleVxuICAgICAgICAvLyBhcmUgbm90IGVxdWFsIHRoZW4gdGhlIGVsZW1lbnQgbW92ZWQsIHNvIHdlIHJlZnJlc2guXG4gICAgICAgIHJlZnJlc2goKTtcbiAgICAgIH1cbiAgICAgIGlzRmlyc3RVcGRhdGUgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBPbGRlciBicm93c2VycyBkb24ndCBzdXBwb3J0IGEgYGRvY3VtZW50YCBhcyB0aGUgcm9vdCBhbmQgd2lsbCB0aHJvdyBhblxuICAgIC8vIGVycm9yLlxuICAgIHRyeSB7XG4gICAgICBpbyA9IG5ldyBJbnRlcnNlY3Rpb25PYnNlcnZlcihoYW5kbGVPYnNlcnZlLCB7XG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIC8vIEhhbmRsZSA8aWZyYW1lPnNcbiAgICAgICAgcm9vdDogcm9vdC5vd25lckRvY3VtZW50XG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChfZSkge1xuICAgICAgaW8gPSBuZXcgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoaGFuZGxlT2JzZXJ2ZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlvLm9ic2VydmUoZWxlbWVudCk7XG4gIH1cbiAgcmVmcmVzaCh0cnVlKTtcbiAgcmV0dXJuIGNsZWFudXA7XG59XG5cbi8qKlxuICogQXV0b21hdGljYWxseSB1cGRhdGVzIHRoZSBwb3NpdGlvbiBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCB3aGVuIG5lY2Vzc2FyeS5cbiAqIFNob3VsZCBvbmx5IGJlIGNhbGxlZCB3aGVuIHRoZSBmbG9hdGluZyBlbGVtZW50IGlzIG1vdW50ZWQgb24gdGhlIERPTSBvclxuICogdmlzaWJsZSBvbiB0aGUgc2NyZWVuLlxuICogQHJldHVybnMgY2xlYW51cCBmdW5jdGlvbiB0aGF0IHNob3VsZCBiZSBpbnZva2VkIHdoZW4gdGhlIGZsb2F0aW5nIGVsZW1lbnQgaXNcbiAqIHJlbW92ZWQgZnJvbSB0aGUgRE9NIG9yIGhpZGRlbiBmcm9tIHRoZSBzY3JlZW4uXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3MvYXV0b1VwZGF0ZVxuICovXG5mdW5jdGlvbiBhdXRvVXBkYXRlKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHVwZGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG4gIGNvbnN0IHtcbiAgICBhbmNlc3RvclNjcm9sbCA9IHRydWUsXG4gICAgYW5jZXN0b3JSZXNpemUgPSB0cnVlLFxuICAgIGVsZW1lbnRSZXNpemUgPSB0eXBlb2YgUmVzaXplT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgbGF5b3V0U2hpZnQgPSB0eXBlb2YgSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgPT09ICdmdW5jdGlvbicsXG4gICAgYW5pbWF0aW9uRnJhbWUgPSBmYWxzZVxuICB9ID0gb3B0aW9ucztcbiAgY29uc3QgcmVmZXJlbmNlRWwgPSB1bndyYXBFbGVtZW50KHJlZmVyZW5jZSk7XG4gIGNvbnN0IGFuY2VzdG9ycyA9IGFuY2VzdG9yU2Nyb2xsIHx8IGFuY2VzdG9yUmVzaXplID8gWy4uLihyZWZlcmVuY2VFbCA/IGdldE92ZXJmbG93QW5jZXN0b3JzKHJlZmVyZW5jZUVsKSA6IFtdKSwgLi4uZ2V0T3ZlcmZsb3dBbmNlc3RvcnMoZmxvYXRpbmcpXSA6IFtdO1xuICBhbmNlc3RvcnMuZm9yRWFjaChhbmNlc3RvciA9PiB7XG4gICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlLCB7XG4gICAgICBwYXNzaXZlOiB0cnVlXG4gICAgfSk7XG4gICAgYW5jZXN0b3JSZXNpemUgJiYgYW5jZXN0b3IuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdXBkYXRlKTtcbiAgfSk7XG4gIGNvbnN0IGNsZWFudXBJbyA9IHJlZmVyZW5jZUVsICYmIGxheW91dFNoaWZ0ID8gb2JzZXJ2ZU1vdmUocmVmZXJlbmNlRWwsIHVwZGF0ZSkgOiBudWxsO1xuICBsZXQgcmVvYnNlcnZlRnJhbWUgPSAtMTtcbiAgbGV0IHJlc2l6ZU9ic2VydmVyID0gbnVsbDtcbiAgaWYgKGVsZW1lbnRSZXNpemUpIHtcbiAgICByZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcihfcmVmID0+IHtcbiAgICAgIGxldCBbZmlyc3RFbnRyeV0gPSBfcmVmO1xuICAgICAgaWYgKGZpcnN0RW50cnkgJiYgZmlyc3RFbnRyeS50YXJnZXQgPT09IHJlZmVyZW5jZUVsICYmIHJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgIC8vIFByZXZlbnQgdXBkYXRlIGxvb3BzIHdoZW4gdXNpbmcgdGhlIGBzaXplYCBtaWRkbGV3YXJlLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmxvYXRpbmctdWkvZmxvYXRpbmctdWkvaXNzdWVzLzE3NDBcbiAgICAgICAgcmVzaXplT2JzZXJ2ZXIudW5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUocmVvYnNlcnZlRnJhbWUpO1xuICAgICAgICByZW9ic2VydmVGcmFtZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgdmFyIF9yZXNpemVPYnNlcnZlcjtcbiAgICAgICAgICAoX3Jlc2l6ZU9ic2VydmVyID0gcmVzaXplT2JzZXJ2ZXIpID09IG51bGwgfHwgX3Jlc2l6ZU9ic2VydmVyLm9ic2VydmUoZmxvYXRpbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHVwZGF0ZSgpO1xuICAgIH0pO1xuICAgIGlmIChyZWZlcmVuY2VFbCAmJiAhYW5pbWF0aW9uRnJhbWUpIHtcbiAgICAgIHJlc2l6ZU9ic2VydmVyLm9ic2VydmUocmVmZXJlbmNlRWwpO1xuICAgIH1cbiAgICByZXNpemVPYnNlcnZlci5vYnNlcnZlKGZsb2F0aW5nKTtcbiAgfVxuICBsZXQgZnJhbWVJZDtcbiAgbGV0IHByZXZSZWZSZWN0ID0gYW5pbWF0aW9uRnJhbWUgPyBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlKSA6IG51bGw7XG4gIGlmIChhbmltYXRpb25GcmFtZSkge1xuICAgIGZyYW1lTG9vcCgpO1xuICB9XG4gIGZ1bmN0aW9uIGZyYW1lTG9vcCgpIHtcbiAgICBjb25zdCBuZXh0UmVmUmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChyZWZlcmVuY2UpO1xuICAgIGlmIChwcmV2UmVmUmVjdCAmJiAhcmVjdHNBcmVFcXVhbChwcmV2UmVmUmVjdCwgbmV4dFJlZlJlY3QpKSB7XG4gICAgICB1cGRhdGUoKTtcbiAgICB9XG4gICAgcHJldlJlZlJlY3QgPSBuZXh0UmVmUmVjdDtcbiAgICBmcmFtZUlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZyYW1lTG9vcCk7XG4gIH1cbiAgdXBkYXRlKCk7XG4gIHJldHVybiAoKSA9PiB7XG4gICAgdmFyIF9yZXNpemVPYnNlcnZlcjI7XG4gICAgYW5jZXN0b3JzLmZvckVhY2goYW5jZXN0b3IgPT4ge1xuICAgICAgYW5jZXN0b3JTY3JvbGwgJiYgYW5jZXN0b3IucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdXBkYXRlKTtcbiAgICAgIGFuY2VzdG9yUmVzaXplICYmIGFuY2VzdG9yLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHVwZGF0ZSk7XG4gICAgfSk7XG4gICAgY2xlYW51cElvID09IG51bGwgfHwgY2xlYW51cElvKCk7XG4gICAgKF9yZXNpemVPYnNlcnZlcjIgPSByZXNpemVPYnNlcnZlcikgPT0gbnVsbCB8fCBfcmVzaXplT2JzZXJ2ZXIyLmRpc2Nvbm5lY3QoKTtcbiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7XG4gICAgaWYgKGFuaW1hdGlvbkZyYW1lKSB7XG4gICAgICBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZUlkKTtcbiAgICB9XG4gIH07XG59XG5cbi8qKlxuICogUmVzb2x2ZXMgd2l0aCBhbiBvYmplY3Qgb2Ygb3ZlcmZsb3cgc2lkZSBvZmZzZXRzIHRoYXQgZGV0ZXJtaW5lIGhvdyBtdWNoIHRoZVxuICogZWxlbWVudCBpcyBvdmVyZmxvd2luZyBhIGdpdmVuIGNsaXBwaW5nIGJvdW5kYXJ5IG9uIGVhY2ggc2lkZS5cbiAqIC0gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgYm91bmRhcnkgYnkgdGhhdCBudW1iZXIgb2YgcGl4ZWxzXG4gKiAtIG5lZ2F0aXZlID0gaG93IG1hbnkgcGl4ZWxzIGxlZnQgYmVmb3JlIGl0IHdpbGwgb3ZlcmZsb3dcbiAqIC0gMCA9IGxpZXMgZmx1c2ggd2l0aCB0aGUgYm91bmRhcnlcbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9kZXRlY3RPdmVyZmxvd1xuICovXG5jb25zdCBkZXRlY3RPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93JDE7XG5cbi8qKlxuICogTW9kaWZpZXMgdGhlIHBsYWNlbWVudCBieSB0cmFuc2xhdGluZyB0aGUgZmxvYXRpbmcgZWxlbWVudCBhbG9uZyB0aGVcbiAqIHNwZWNpZmllZCBheGVzLlxuICogQSBudW1iZXIgKHNob3J0aGFuZCBmb3IgYG1haW5BeGlzYCBvciBkaXN0YW5jZSksIG9yIGFuIGF4ZXMgY29uZmlndXJhdGlvblxuICogb2JqZWN0IG1heSBiZSBwYXNzZWQuXG4gKiBAc2VlIGh0dHBzOi8vZmxvYXRpbmctdWkuY29tL2RvY3Mvb2Zmc2V0XG4gKi9cbmNvbnN0IG9mZnNldCA9IG9mZnNldCQxO1xuXG4vKipcbiAqIE9wdGltaXplcyB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgZmxvYXRpbmcgZWxlbWVudCBieSBjaG9vc2luZyB0aGUgcGxhY2VtZW50XG4gKiB0aGF0IGhhcyB0aGUgbW9zdCBzcGFjZSBhdmFpbGFibGUgYXV0b21hdGljYWxseSwgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpZnkgYVxuICogcHJlZmVycmVkIHBsYWNlbWVudC4gQWx0ZXJuYXRpdmUgdG8gYGZsaXBgLlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2F1dG9QbGFjZW1lbnRcbiAqL1xuY29uc3QgYXV0b1BsYWNlbWVudCA9IGF1dG9QbGFjZW1lbnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgc2hpZnRpbmcgaXQgaW4gb3JkZXIgdG9cbiAqIGtlZXAgaXQgaW4gdmlldyB3aGVuIGl0IHdpbGwgb3ZlcmZsb3cgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NoaWZ0XG4gKi9cbmNvbnN0IHNoaWZ0ID0gc2hpZnQkMTtcblxuLyoqXG4gKiBPcHRpbWl6ZXMgdGhlIHZpc2liaWxpdHkgb2YgdGhlIGZsb2F0aW5nIGVsZW1lbnQgYnkgZmxpcHBpbmcgdGhlIGBwbGFjZW1lbnRgXG4gKiBpbiBvcmRlciB0byBrZWVwIGl0IGluIHZpZXcgd2hlbiB0aGUgcHJlZmVycmVkIHBsYWNlbWVudChzKSB3aWxsIG92ZXJmbG93IHRoZVxuICogY2xpcHBpbmcgYm91bmRhcnkuIEFsdGVybmF0aXZlIHRvIGBhdXRvUGxhY2VtZW50YC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9mbGlwXG4gKi9cbmNvbnN0IGZsaXAgPSBmbGlwJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0aGF0IGFsbG93cyB5b3UgdG8gY2hhbmdlIHRoZSBzaXplIG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IOKAlFxuICogZm9yIGluc3RhbmNlLCBwcmV2ZW50IGl0IGZyb20gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIGJvdW5kYXJ5IG9yIG1hdGNoIHRoZVxuICogd2lkdGggb2YgdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL3NpemVcbiAqL1xuY29uc3Qgc2l6ZSA9IHNpemUkMTtcblxuLyoqXG4gKiBQcm92aWRlcyBkYXRhIHRvIGhpZGUgdGhlIGZsb2F0aW5nIGVsZW1lbnQgaW4gYXBwbGljYWJsZSBzaXR1YXRpb25zLCBzdWNoIGFzXG4gKiB3aGVuIGl0IGlzIG5vdCBpbiB0aGUgc2FtZSBjbGlwcGluZyBjb250ZXh0IGFzIHRoZSByZWZlcmVuY2UgZWxlbWVudC5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9oaWRlXG4gKi9cbmNvbnN0IGhpZGUgPSBoaWRlJDE7XG5cbi8qKlxuICogUHJvdmlkZXMgZGF0YSB0byBwb3NpdGlvbiBhbiBpbm5lciBlbGVtZW50IG9mIHRoZSBmbG9hdGluZyBlbGVtZW50IHNvIHRoYXQgaXRcbiAqIGFwcGVhcnMgY2VudGVyZWQgdG8gdGhlIHJlZmVyZW5jZSBlbGVtZW50LlxuICogQHNlZSBodHRwczovL2Zsb2F0aW5nLXVpLmNvbS9kb2NzL2Fycm93XG4gKi9cbmNvbnN0IGFycm93ID0gYXJyb3ckMTtcblxuLyoqXG4gKiBQcm92aWRlcyBpbXByb3ZlZCBwb3NpdGlvbmluZyBmb3IgaW5saW5lIHJlZmVyZW5jZSBlbGVtZW50cyB0aGF0IGNhbiBzcGFuXG4gKiBvdmVyIG11bHRpcGxlIGxpbmVzLCBzdWNoIGFzIGh5cGVybGlua3Mgb3IgcmFuZ2Ugc2VsZWN0aW9ucy5cbiAqIEBzZWUgaHR0cHM6Ly9mbG9hdGluZy11aS5jb20vZG9jcy9pbmxpbmVcbiAqL1xuY29uc3QgaW5saW5lID0gaW5saW5lJDE7XG5cbi8qKlxuICogQnVpbHQtaW4gYGxpbWl0ZXJgIHRoYXQgd2lsbCBzdG9wIGBzaGlmdCgpYCBhdCBhIGNlcnRhaW4gcG9pbnQuXG4gKi9cbmNvbnN0IGxpbWl0U2hpZnQgPSBsaW1pdFNoaWZ0JDE7XG5cbi8qKlxuICogQ29tcHV0ZXMgdGhlIGB4YCBhbmQgYHlgIGNvb3JkaW5hdGVzIHRoYXQgd2lsbCBwbGFjZSB0aGUgZmxvYXRpbmcgZWxlbWVudFxuICogbmV4dCB0byBhIGdpdmVuIHJlZmVyZW5jZSBlbGVtZW50LlxuICovXG5jb25zdCBjb21wdXRlUG9zaXRpb24gPSAocmVmZXJlbmNlLCBmbG9hdGluZywgb3B0aW9ucykgPT4ge1xuICAvLyBUaGlzIGNhY2hlcyB0aGUgZXhwZW5zaXZlIGBnZXRDbGlwcGluZ0VsZW1lbnRBbmNlc3RvcnNgIGZ1bmN0aW9uIHNvIHRoYXRcbiAgLy8gbXVsdGlwbGUgbGlmZWN5Y2xlIHJlc2V0cyByZS11c2UgdGhlIHNhbWUgcmVzdWx0LiBJdCBvbmx5IGxpdmVzIGZvciBhXG4gIC8vIHNpbmdsZSBjYWxsLiBJZiBvdGhlciBmdW5jdGlvbnMgYmVjb21lIGV4cGVuc2l2ZSwgd2UgY2FuIGFkZCB0aGVtIGFzIHdlbGwuXG4gIGNvbnN0IGNhY2hlID0gbmV3IE1hcCgpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0ge1xuICAgIHBsYXRmb3JtLFxuICAgIC4uLm9wdGlvbnNcbiAgfTtcbiAgY29uc3QgcGxhdGZvcm1XaXRoQ2FjaGUgPSB7XG4gICAgLi4ubWVyZ2VkT3B0aW9ucy5wbGF0Zm9ybSxcbiAgICBfYzogY2FjaGVcbiAgfTtcbiAgcmV0dXJuIGNvbXB1dGVQb3NpdGlvbiQxKHJlZmVyZW5jZSwgZmxvYXRpbmcsIHtcbiAgICAuLi5tZXJnZWRPcHRpb25zLFxuICAgIHBsYXRmb3JtOiBwbGF0Zm9ybVdpdGhDYWNoZVxuICB9KTtcbn07XG5cbmV4cG9ydCB7IGFycm93LCBhdXRvUGxhY2VtZW50LCBhdXRvVXBkYXRlLCBjb21wdXRlUG9zaXRpb24sIGRldGVjdE92ZXJmbG93LCBmbGlwLCBoaWRlLCBpbmxpbmUsIGxpbWl0U2hpZnQsIG9mZnNldCwgcGxhdGZvcm0sIHNoaWZ0LCBzaXplIH07XG4iLCJmdW5jdGlvbiByKGUpe3ZhciB0LGYsbj1cIlwiO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlfHxcIm51bWJlclwiPT10eXBlb2YgZSluKz1lO2Vsc2UgaWYoXCJvYmplY3RcIj09dHlwZW9mIGUpaWYoQXJyYXkuaXNBcnJheShlKSl7dmFyIG89ZS5sZW5ndGg7Zm9yKHQ9MDt0PG87dCsrKWVbdF0mJihmPXIoZVt0XSkpJiYobiYmKG4rPVwiIFwiKSxuKz1mKX1lbHNlIGZvcihmIGluIGUpZVtmXSYmKG4mJihuKz1cIiBcIiksbis9Zik7cmV0dXJuIG59ZXhwb3J0IGZ1bmN0aW9uIGNsc3goKXtmb3IodmFyIGUsdCxmPTAsbj1cIlwiLG89YXJndW1lbnRzLmxlbmd0aDtmPG87ZisrKShlPWFyZ3VtZW50c1tmXSkmJih0PXIoZSkpJiYobiYmKG4rPVwiIFwiKSxuKz10KTtyZXR1cm4gbn1leHBvcnQgZGVmYXVsdCBjbHN4OyIsImltcG9ydCB7IGF1dG9VcGRhdGUsIGNvbXB1dGVQb3NpdGlvbiB9IGZyb20gXCJAZmxvYXRpbmctdWkvZG9tXCI7XG5pbXBvcnQgY2xzeCBmcm9tIFwiY2xzeFwiO1xuXG5leHBvcnQgY29uc3QgUVVJQ0tfRVZFTlQgPSB7IGNhcHR1cmU6IHRydWUsIHBhc3NpdmU6IHRydWUgfTtcbmV4cG9ydCBjb25zdCBJU19CUk9XU0VSID1cblx0dHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2YgZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCI7XG5cbi8vIFRPRE86IERvY3VtZW50YXRpb24gZm9yIHByZXR0eU51bWJlclxubGV0IElOVExfTlVNOiBJbnRsLk51bWJlckZvcm1hdCB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBwcmV0dHlOdW1iZXIobnVtYmVyOiBudW1iZXIgfCBzdHJpbmcpIHtcblx0aWYgKCFJTlRMX05VTSlcblx0XHRJTlRMX05VTSA9IG5ldyBJbnRsLk51bWJlckZvcm1hdChcblx0XHRcdChJU19CUk9XU0VSICYmIGF0dHIoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBcImxhbmdcIikpIHx8IFwibm9cIixcblx0XHQpO1xuXHRyZXR1cm4gSU5UTF9OVU0uZm9ybWF0KE51bWJlcihudW1iZXIpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlYm91bmNlPFQgZXh0ZW5kcyB1bmtub3duW10+KFxuXHRjYWxsYmFjazogKC4uLmFyZ3M6IFQpID0+IHZvaWQsXG5cdGRlbGF5OiBudW1iZXIsXG4pIHtcblx0bGV0IHRpbWVyOiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcblxuXHRyZXR1cm4gKC4uLmFyZ3M6IFQpID0+IHtcblx0XHRjbGVhclRpbWVvdXQodGltZXIpO1xuXHRcdHRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBjYWxsYmFjayguLi5hcmdzKSwgZGVsYXkpO1xuXHR9O1xufVxuXG4vKipcbiAqIGF0dHJcbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgZ2V0LCBzZXQgYW5kIHJlbW92ZSBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0gZWwgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gbmFtZSBUaGUgYXR0cmlidXRlIG5hbWUgdG8gZ2V0LCBzZXQgb3IgcmVtb3ZlLCBvciBhIG9iamVjdCB0byBzZXQgbXVsdGlwbGUgYXR0cmlidXRlc1xuICogQHBhcmFtIHZhbHVlIEEgdmFsaWQgYXR0cmlidXRlIHZhbHVlIG9yIG51bGwgdG8gcmVtb3ZlIGF0dHJpYnV0ZVxuICovXG5leHBvcnQgZnVuY3Rpb24gYXR0cihcblx0ZWw6IEVsZW1lbnQsXG5cdG5hbWU6IHN0cmluZyxcblx0dmFsdWU/OiBzdHJpbmcgfCBudWxsLFxuKTogc3RyaW5nIHwgbnVsbCB7XG5cdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSByZXR1cm4gZWwuZ2V0QXR0cmlidXRlKG5hbWUpID8/IG51bGw7IC8vIEZhbGxiYWNrIHRvIG51bGwgb25seSBpZiBlbCBpcyB1bmRlZmluZWRcblx0aWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG5cdGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG5cdHJldHVybiBudWxsO1xufVxuXG4vKipcbiAqIHVzZUlkXG4gKiBAcmV0dXJuIEEgZ2VuZXJhdGVkIHVuaXF1ZSBJRFxuICovXG5sZXQgaWQgPSAwO1xuY29uc3QgVVVJRCA9IGAke0RhdGUubm93KCkudG9TdHJpbmcoMzYpfSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiwgNSl9YDtcbmV4cG9ydCBmdW5jdGlvbiB1c2VJZChlbDogRWxlbWVudCkge1xuXHRpZiAoIWVsLmlkKSBlbC5pZCA9IGAke1VVSUR9JHsrK2lkfWA7XG5cdHJldHVybiBlbC5pZDtcbn1cblxuLy8gSW50ZXJuYWwgaGVscGVyIGZvciBvbiAvIG9mZlxuY29uc3QgZXZlbnRzID0gKFxuXHRhY3Rpb246IFwiYWRkXCIgfCBcInJlbW92ZVwiLFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHRbLi4ucmVzdF06IFBhcmFtZXRlcnM8dHlwZW9mIEVsZW1lbnQucHJvdG90eXBlLmFkZEV2ZW50TGlzdGVuZXI+LCAvLyBTcHJlYXQgdG8gbWFrZSBhIGNvcHkgb2YgdGhlIGFycmF5XG4pOiB2b2lkID0+IHtcblx0Zm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG5cdFx0cmVzdFswXSA9IHR5cGU7XG5cdFx0ZWxlbWVudFtgJHthY3Rpb259RXZlbnRMaXN0ZW5lcmBdKC4uLnJlc3QpO1xuXHR9XG59O1xuXG4vKipcbiAqIG9uXG4gKiBAcGFyYW0gZWxlbWVudCBUaGUgRWxlbWVudCB0byB1c2UgYXMgRXZlbnRUYXJnZXRcbiAqIEBwYXJhbSB0eXBlcyBBIGNvbW1hIHNlcGFyYXRlZCBzdHJpbmcgb2YgZXZlbnQgdHlwZXNcbiAqIEBwYXJhbSBsaXN0ZW5lciBBbiBldmVudCBsaXN0ZW5lciBmdW5jdGlvbiBvciBsaXN0ZW5lciBvYmplY3RcbiAqL1xuZXhwb3J0IGNvbnN0IG9uID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5hZGRFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiB7XG5cdGlmIChVTkJJTkQgJiYgKGVsZW1lbnQgPT09IHdpbmRvdyB8fCBlbGVtZW50ID09PSBkb2N1bWVudCkpXG5cdFx0VU5CSU5ELnB1c2goKCkgPT4gb2ZmKGVsZW1lbnQsIC4uLnJlc3QpKTtcblx0ZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xufTtcblxuLyoqXG4gKiBvZmZcbiAqIEBwYXJhbSBlbGVtZW50IFRoZSBFbGVtZW50IHRvIHVzZSBhcyBFdmVudFRhcmdldFxuICogQHBhcmFtIHR5cGVzIEEgY29tbWEgc2VwYXJhdGVkIHN0cmluZyBvZiBldmVudCB0eXBlc1xuICogQHBhcmFtIGxpc3RlbmVyIEFuIGV2ZW50IGxpc3RlbmVyIGZ1bmN0aW9uIG9yIGxpc3RlbmVyIG9iamVjdFxuICovXG5leHBvcnQgY29uc3Qgb2ZmID0gKFxuXHRlbGVtZW50OiBOb2RlIHwgV2luZG93LFxuXHQuLi5yZXN0OiBQYXJhbWV0ZXJzPHR5cGVvZiBFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVFdmVudExpc3RlbmVyPlxuKTogdm9pZCA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIFdpbmRvdyB7XG5cdFx0X210ZHNVbmJpbmRFdmVudHM/OiBNYXA8c3RyaW5nLCBBcnJheTwoKSA9PiB2b2lkPj47XG5cdH1cbn1cblxuLyoqXG4gKiBvbkxvYWRlZFxuICogQGRlc2NyaXB0aW9uIFJ1bnMgYSBjYWxsYmFjayB3aGVuIHdpbmRvdyBpcyBsb2FkZWQgaW4gYnJvd3NlciwgYW5kIGVuc3VyZXMgZXZlbnRzIGFyZSB1bmJvdW5kIGlmIGhvdCByZWxvYWRpbmdcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gdGhlIHBhZ2UgaXMgcmVhZHlcbiAqL1xubGV0IFVOQklORDogQXJyYXk8KCkgPT4gdm9pZD4gfCBudWxsID0gbnVsbDtcbmV4cG9ydCBjb25zdCBvbkxvYWRlZCA9IChjYWxsYmFjazogKCkgPT4gdm9pZCkgPT4ge1xuXHRpZiAoIUlTX0JST1dTRVIgfHwgIXdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpIHJldHVybjsgLy8gU2tpcCBpZiBub3QgaW4gYnJvd3NlciBlbnZpcm9ubWVudFxuXHRpZiAoIXdpbmRvdy5fbXRkc1VuYmluZEV2ZW50cykgd2luZG93Ll9tdGRzVW5iaW5kRXZlbnRzID0gbmV3IE1hcCgpO1xuXG5cdGNvbnN0IHJ1biA9ICgpID0+XG5cdFx0cmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcblx0XHRcdGNvbnN0IGtleSA9IFN0cmluZyhjYWxsYmFjaykucmVwbGFjZSgvKFxcbnxcXHMpL2csIFwiXCIpO1xuXHRcdFx0d2luZG93Ll9tdGRzVW5iaW5kRXZlbnRzPy5nZXQoa2V5KT8ubWFwKCh1bmJpbmQpID0+IHVuYmluZCgpKTsgLy8gVW5iaW5kIHByZXZpb3VzIGV2ZW50c1xuXHRcdFx0VU5CSU5EID0gW107IC8vIFByZXBhcmUgdG8gbGlzdGVuIGZvciBuZXdseSBib3VuZCBldmVudHNcblx0XHRcdGNhbGxiYWNrKCk7IC8vIFJ1biBiaW5kaW5nXG5cdFx0XHR3aW5kb3cuX210ZHNVbmJpbmRFdmVudHM/LnNldChrZXksIFVOQklORD8uc2xpY2UoMCkpOyAvLyBTdG9yZSBmb3IgbGF0ZXIgdW5iaW5kaW5nXG5cdFx0XHRVTkJJTkQgPSBudWxsOyAvLyBTdG9wIGxpc3RlbmluZyBmb3IgbmV3bHkgYm91bmQgZXZlbnRzXG5cdFx0fSk7XG5cblx0aWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIikgcnVuKCk7XG5cdGVsc2Ugb24od2luZG93LCBcImxvYWRcIiwgcnVuKTtcbn07XG5cbmNvbnN0IEFOQ0hPUkVEID0gbmV3IFdlYWtNYXA8RWxlbWVudCwgUmV0dXJuVHlwZTx0eXBlb2YgYXV0b1VwZGF0ZT4+KCk7XG5leHBvcnQgZnVuY3Rpb24gYW5jaG9yUG9zaXRpb24oXG5cdHRhcmdldDogSFRNTEVsZW1lbnQsXG5cdGFuY2hvcjogZmFsc2UgfCBFbGVtZW50LFxuXHRvcHRpb25zPzogUGFyYW1ldGVyczx0eXBlb2YgY29tcHV0ZVBvc2l0aW9uPlsyXSxcbikge1xuXHRBTkNIT1JFRC5nZXQodGFyZ2V0KT8uKCk7IC8vIFVuYmluZCBwcmV2aW91cyBhbmNob3IgcG9zaXRpb25cblx0QU5DSE9SRUQuZGVsZXRlKHRhcmdldCk7XG5cblx0aWYgKGFuY2hvcilcblx0XHRBTkNIT1JFRC5zZXQoXG5cdFx0XHR0YXJnZXQsXG5cdFx0XHRhdXRvVXBkYXRlKGFuY2hvciwgdGFyZ2V0LCAoKSA9PiB7XG5cdFx0XHRcdGlmICghdGFyZ2V0LmlzQ29ubmVjdGVkIHx8ICFhbmNob3IuaXNDb25uZWN0ZWQgfHwgdGFyZ2V0LmhpZGRlbilcblx0XHRcdFx0XHRyZXR1cm4gYW5jaG9yUG9zaXRpb24odGFyZ2V0LCBmYWxzZSk7XG5cdFx0XHRcdGNvbXB1dGVQb3NpdGlvbihhbmNob3IsIHRhcmdldCwgb3B0aW9ucykudGhlbigoeyB4LCB5IH0pID0+IHtcblx0XHRcdFx0XHR0YXJnZXQuc3R5bGUubGVmdCA9IGAke3h9cHhgO1xuXHRcdFx0XHRcdHRhcmdldC5zdHlsZS50b3AgPSBgJHt5fXB4YDtcblx0XHRcdFx0fSk7XG5cdFx0XHR9KSxcblx0XHQpO1xufVxuXG4vKipcbiAqIFNwZWVkIHVwIE11dGF0aW9uT2JzZXJ2ZXIgYnkgZGVib3VuY2luZyBhbmQgb25seSBydW5uaW5nIHdoZW4gcGFnZSBpcyB2aXNpYmxlXG4gKiBAcmV0dXJuIG5ldyBNdXRhaW9uT2JzZXJ2ZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoY2FsbGJhY2s6IE11dGF0aW9uQ2FsbGJhY2spIHtcblx0bGV0IHF1ZXVlID0gMDtcblxuXHRjb25zdCBvbkZyYW1lID0gKCkgPT4gc2V0VGltZW91dChvblRpbWVyLCAyMDApOyAvLyBVc2UgYm90aCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgYW5kIHNldFRpbWVvdXQgdG8gZGVib3VuY2UgYW5kIG9ubHkgcnVuIHdoZW4gdmlzaWJsZVxuXHRjb25zdCBvblRpbWVyID0gKCkgPT4ge1xuXHRcdGNhbGxiYWNrKFtdLCBvYnNlcnZlcik7XG5cdFx0b2JzZXJ2ZXIudGFrZVJlY29yZHMoKTsgLy8gQ2xlYXIgcmVjb3JkcyB0byBhdm9pZCBydW5uaW5nIGNhbGxiYWNrIG11bHRpcGxlIHRpbWVzXG5cdFx0cXVldWUgPSAwO1xuXHR9O1xuXHRjb25zdCBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHtcblx0XHRpZiAoIXF1ZXVlKSBxdWV1ZSA9IHJlcXVlc3RBbmltYXRpb25GcmFtZShvbkZyYW1lKTtcblx0fSk7XG5cblx0cmV0dXJuIG9ic2VydmVyO1xufVxuXG4vKipcbiAqIG9uTXV0YXRpb25cbiAqIEBkZXNjcmlwdGlvbiBVdGlsaXR5IHRvIHF1aWNrbHkgb2JzZXJ2ZSBtdXRhdGlvbnMgb24gYSBzcGVjaWZpYyBjbGFzcyBuYW1lXG4gKiBAcGFyYW0gZWwgVGhlIEVsZW1lbnQgdG8gdXNlIGFzIEV2ZW50VGFyZ2V0XG4gKiBAcGFyYW0gY2xhc3NOYW1lIFRoZSBjbGFzcyBuYW1lIHRvIG9ic2VydmVcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgY2FsbGJhY2sgdG8gcnVuIHdoZW4gbXV0YXRpb25zIGFyZSBkZXRlY3RlZFxuICovXG5jb25zdCBNVVRBVE9SUyA9IG5ldyBXZWFrTWFwPEVsZW1lbnQsIEFycmF5PCgpID0+IHZvaWQ+PigpO1xuZXhwb3J0IGNvbnN0IG9uTXV0YXRpb24gPSA8VCBleHRlbmRzIEVsZW1lbnQ+KFxuXHRlbDogRWxlbWVudCxcblx0Y2xhc3NOYW1lOiBzdHJpbmcsXG5cdGNhbGxiYWNrOiAoZWxlbXM6IEhUTUxDb2xsZWN0aW9uT2Y8VD4pID0+IHZvaWQsXG4pID0+IHtcblx0aWYgKCFJU19CUk9XU0VSIHx8ICF3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKSByZXR1cm47IC8vIFNraXAgaWYgbm90IGluIGJyb3dzZXIgZW52aXJvbm1lbnRcblx0Y29uc3QgZWxlbXMgPSBlbC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKGNsYXNzTmFtZSk7XG5cdGNvbnN0IG11dGF0b3IgPSBNVVRBVE9SUy5nZXQoZWwpIHx8IFtdO1xuXG5cdGlmICghbXV0YXRvci5sZW5ndGgpIHtcblx0XHRNVVRBVE9SUy5zZXQoZWwsIG11dGF0b3IpO1xuXHRcdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoKF8sIG9ic2VydmVyKSA9PiB7XG5cdFx0XHRpZiAoZWwuaXNDb25uZWN0ZWQgJiYgbXV0YXRvcj8ubGVuZ3RoKSB7XG5cdFx0XHRcdGZvciAoY29uc3QgY2FsbGJhY2sgb2YgbXV0YXRvcikgY2FsbGJhY2soKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdE1VVEFUT1JTLmRlbGV0ZShlbCk7XG5cdFx0XHR9XG5cdFx0fSkub2JzZXJ2ZShlbCwge1xuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbXCJjbGFzc1wiLCBcImhpZGRlblwiXSxcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdH0pO1xuXHR9XG5cdG11dGF0b3IucHVzaCgoKSA9PiBjYWxsYmFjayhlbGVtcyBhcyBIVE1MQ29sbGVjdGlvbk9mPFQ+KSk7XG59O1xuXG4vKipcbiAqIGlzSW5wdXRMaWtlXG4gKiBAZGVzY3JpcHRpb24gQ2hlY2sgaWYgZWxlbWVudCBpcyBhbiBpbnB1dCBsaWtlIGVsZW1lbnRcbiAqIEBwYXJhbSBlbCBUaGUgZWxlbWVudCB0byBjaGVja1xuICogQHJldHVybnMgVHJ1ZSBpZiB0aGUgZWxlbWVudCBpcyBhbiBpbnB1dCBsaWtlIGVsZW1lbnRcbiAqL1xuZXhwb3J0IGNvbnN0IGlzSW5wdXRMaWtlID0gKGVsOiB1bmtub3duKTogZWwgaXMgSFRNTElucHV0RWxlbWVudCA9PlxuXHRlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG5cdFwidmFsaWRpdHlcIiBpbiBlbCAmJlxuXHQhKGVsIGluc3RhbmNlb2YgSFRNTEJ1dHRvbkVsZW1lbnQpO1xuXG4vKipcbiAqIHRvQ3VzdG9tRWxlbWVudFByb3BzXG4gKiBAZGVzY3JpcHRpb24gVXRpbGl0eSB0byBxdWlja2x5IGNvbnZlcnQgcHJvcHMgdG8gY3VzdG9tIGVsZW1lbnQgYXR0cmlidXRlc1xuICogQHBhcmFtIHByb3BzIFRoZSBwcm9wcyB0byBjb252ZXJ0XG4gKiBAcmV0dXJucyBUaGUgY29udmVydGVkIHByb3BzXG4gKi9cbmNvbnN0IFNFTEVDVEVEID0gXCJhcmlhLXNlbGVjdGVkXCI7XG5leHBvcnQgY29uc3QgdG9DdXN0b21FbGVtZW50UHJvcHMgPSAoXG5cdHsgY2xhc3NOYW1lLCBoaWRkZW4sIG9wZW4sIC4uLnJlc3QgfTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG5cdGtsYXNzPzogc3RyaW5nLFxuKSA9PiB7XG5cdHJlc3Quc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nID0gdHJ1ZTsgLy8gTWFrZSBOZXh0LmpzIGhhcHB5XG5cdGlmIChyZXN0W1NFTEVDVEVEXSAhPT0gdW5kZWZpbmVkKVxuXHRcdHJlc3RbU0VMRUNURURdID0gYCR7KHJlc3RbU0VMRUNURURdIHx8IFwiZmFsc2VcIikgIT09IFwiZmFsc2VcIn1gOyAvLyBFbnN1cmUgYXJpYS1zZWxlY3RlZCBib29sZWFuIGlzIHN0cmluZ1xuXHRpZiAoY2xhc3NOYW1lIHx8IGtsYXNzKSByZXN0LmNsYXNzID0gY2xzeChrbGFzcywgY2xhc3NOYW1lIGFzIHN0cmluZyk7IC8vIFVzZSBjbGFzcyBpbnN0ZWFkIG9mIGNsYXNzTmFtZVxuXHRpZiAoaGlkZGVuKSByZXN0LmhpZGRlbiA9IHRydWU7IC8vIEVuc3VyZSBib29sZWFuIHByb3AgYmVoYXZpb3VyXG5cdGlmIChvcGVuKSByZXN0Lm9wZW4gPSB0cnVlOyAvLyBFbnN1cmUgYm9vbGVhbiBwcm9wIGJlaGF2aW91clxuXHRyZXR1cm4gcmVzdDtcbn07XG5cbi8qKlxuICogdGFnXG4gKiBAZGVzY3JpcHRpb24gY3JlYXRlcyBlbGVtZW50IGFuZCBhc3NpZ25zIHByb3BlcnRpZXNcbiAqIEBwYXJhbSB0YWdOYW1lIFRoZSB0YWduYW1lIG9mIGVsZW1lbnQgdG8gY3JlYXRlXG4gKiBAcGFyYW0gYXR0cnMgT3B0aW9uYWwgYXR0cmlidXRlcyB0byBhZGQgdG8gdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSB0ZXh0IE9wdGlvbmFsIHRleHQgY29udGVudCB0byBhZGQgdG8gdGhlIGVsZW1lbnRcbiAqIEByZXR1cm4gSFRNTEVsZW1lbnQgd2l0aCBwcm9wc1xuICovXG5leHBvcnQgY29uc3QgdGFnID0gPFRhZ05hbWUgZXh0ZW5kcyBrZXlvZiBIVE1MRWxlbWVudFRhZ05hbWVNYXA+KFxuXHR0YWdOYW1lOiBUYWdOYW1lLFxuXHRhdHRycz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGw+LFxuXHR0ZXh0Pzogc3RyaW5nIHwgbnVsbCxcbik6IEhUTUxFbGVtZW50VGFnTmFtZU1hcFtUYWdOYW1lXSA9PiB7XG5cdGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcblx0aWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcblx0aWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG5cdHJldHVybiBlbDtcbn07XG5cbi8vIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgSFRNTEVsZW1lbnQgdG8gZXh0ZW5kIChmb3Igc2VydmVyIHNpZGUgcmVuZGVyaW5nKVxuZXhwb3J0IGNvbnN0IE1URFNFbGVtZW50ID1cblx0dHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiXG5cdFx0PyAoY2xhc3Mge30gYXMgdHlwZW9mIEhUTUxFbGVtZW50KVxuXHRcdDogSFRNTEVsZW1lbnQ7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgSVNfQlJPV1NFUiwgb24sIG9uTG9hZGVkLCBRVUlDS19FVkVOVCwgdGFnIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19CUkVBRENSVU1CUyA9IGAuJHtzdHlsZXMuYnJlYWRjcnVtYnMuc3BsaXQoXCIgXCIpWzBdfWA7XG5jb25zdCBDU1NfQ0FSRCA9IGAuJHtzdHlsZXMuY2FyZC5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENTU19DSElQID0gYC4ke3N0eWxlcy5jaGlwLnNwbGl0KFwiIFwiKVswXX1gO1xuY29uc3QgQ1NTX0hFTFBURVhUID0gYC4ke3N0eWxlcy5oZWxwdGV4dC5zcGxpdChcIiBcIilbMF19YDtcbmNvbnN0IENTU19QQUdJTkFUSU9OID0gYC4ke3N0eWxlcy5wYWdpbmF0aW9uLnNwbGl0KFwiIFwiKVswXX1gO1xuY29uc3QgQ0xJQ0tTID0gYHN1bW1hcnksdS1zdW1tYXJ5LGEsYnV0dG9uLFtyb2xlPVwidGFiXCJdLFtyb2xlPVwiYnV0dG9uXCJdYDtcbmNvbnN0IEVWRU5UUyA9IFwiY2xpY2ssdG9nZ2xlLHN1Ym1pdCxjaGFuZ2VcIjtcbmNvbnN0IE1BVE9NTyA9IFwibWF0dGlsc3luZXQubWF0b21vLmNsb3VkXCI7XG5jb25zdCBCQU5ORVIgPSBcIm10ZHMtYW5hbHl0aWNzLWJhbm5lclwiOyAvLyBEaWFsb2cgdG8gc2hvdyBNYXRvbW8gc2NyaXB0IGxvYWRpbmdcbmNvbnN0IEJBTk5FUl9VUkwgPVxuXHRcImh0dHBzOi8vd3d3Lm1hdHRpbHN5bmV0Lm5vL29tLW1hdHRpbHN5bmV0L3BlcnNvbnZlcm5lcmtsYWVyaW5nL2luZm9ybWFzam9uc2thcHNsZXJcIjtcblxudHlwZSBNYXRvbW8gPSAoXG5cdHwgc3RyaW5nXG5cdHwgbnVtYmVyXG5cdHwgYm9vbGVhblxuXHR8IERvY3VtZW50XG5cdHwgRWxlbWVudFxuXHR8ICgodGhpczogUmVjb3JkPHN0cmluZywgPFQ+KCkgPT4gVD4pID0+IHZvaWQpXG4pW107XG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBXaW5kb3cge1xuXHRcdF9wYXE/OiBNYXRvbW9bXTtcblx0XHRfbXRtPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyPltdO1xuXHRcdF9tdGRzVHJhY2tpbmc/OiBBbmFseXRpY3NBY3Rpb25zW1wiaW5pdFwiXTtcblx0XHRfbXRkc1VudHJhY2s/OiAoKSA9PiB2b2lkO1xuXHR9XG59XG5cbmV4cG9ydCB0eXBlIEFuYWx5dGljc0FjdGlvbnMgPSB7XG5cdGluaXQ6IHtcblx0XHRlbmFibGVkPzogYm9vbGVhbiB8IFwiZGVidWdcIjtcblx0XHRjb25zZW50PzogXCJjdXN0b21cIiB8IHRydWU7XG5cdH0gJiAoXG5cdFx0fCB7XG5cdFx0XHRcdG1hdG9tb0lkOiBudW1iZXIgfCBzdHJpbmc7XG5cdFx0XHRcdG1hdG9tb1RhZ01hbmFnZXJJZD86IG5ldmVyO1xuXHRcdCAgfVxuXHRcdHwge1xuXHRcdFx0XHRtYXRvbW9JZD86IG5ldmVyO1xuXHRcdFx0XHRtYXRvbW9UYWdNYW5hZ2VySWQ6IHN0cmluZztcblx0XHQgIH1cblx0KTtcblx0cGFnZXZpZXc6IHtcblx0XHR1cmw/OiBzdHJpbmc7XG5cdFx0dGl0bGU/OiBzdHJpbmc7XG5cdH07XG5cdGV2ZW50OiB7XG5cdFx0Y2F0ZWdvcnk6IHN0cmluZztcblx0XHRhY3Rpb246IHN0cmluZztcblx0XHRuYW1lPzogc3RyaW5nO1xuXHRcdHZhbHVlPzogbnVtYmVyO1xuXHR9O1xuXHRzZWFyY2g6IHtcblx0XHRxdWVyeTogc3RyaW5nO1xuXHRcdGNhdGVnb3J5Pzogc3RyaW5nO1xuXHRcdHJlc3VsdHM/OiBudW1iZXI7XG5cdH07XG5cdG1hdG9tbzogTWF0b21vO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGFuYWx5dGljczxBY3Rpb24gZXh0ZW5kcyBrZXlvZiBBbmFseXRpY3NBY3Rpb25zPihcblx0YWN0aW9uOiBBY3Rpb24sXG5cdGFyZ3MgPSB7fSBhcyBBbmFseXRpY3NBY3Rpb25zW0FjdGlvbl0sXG4pIHtcblx0aWYgKCFJU19CUk9XU0VSKSByZXR1cm47XG5cdGlmICghd2luZG93Ll9wYXEpIHtcblx0XHR3aW5kb3cuX3BhcSA9IFtdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wiSGVhdG1hcFNlc3Npb25SZWNvcmRpbmc6OmRpc2FibGVcIl0pOyAvLyBEaXNhYmxlIGhlYXRtYXBzIGJ5IGRlZmF1bHQgYXMgdGhpcyByZXF1aXJlIGNvb2tpZXNcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcImVuYWJsZUxpbmtUcmFja2luZ1wiXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRUcmFja2VyVXJsXCIsIGBodHRwczovLyR7TUFUT01PfS9tYXRvbW8ucGhwYF0pO1xuXHR9XG5cdGlmICghd2luZG93Ll9tdG0pIHtcblx0XHR3aW5kb3cuX210bSA9IHdpbmRvdy5fbXRtIHx8IFtdOyAvLyBQcmVwYXJlIE1hdG9tbyBUYWcgTWFuYWdlclxuXHRcdHdpbmRvdy5fbXRtLnB1c2goeyBcIm10bS5zdGFydFRpbWVcIjogRGF0ZS5ub3coKSwgZXZlbnQ6IFwibXRtLlN0YXJ0XCIgfSk7XG5cdH1cblxuXHRpZiAoYWN0aW9uID09PSBcImluaXRcIikge1xuXHRcdHdpbmRvdy5fbXRkc1RyYWNraW5nID0ge1xuXHRcdFx0ZW5hYmxlZDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lICE9PSBcImxvY2FsaG9zdFwiLFxuXHRcdFx0Li4ud2luZG93Ll9tdGRzVHJhY2tpbmcsXG5cdFx0XHQuLi5hcmdzLFxuXHRcdH0gYXMgQW5hbHl0aWNzQWN0aW9uc1tcImluaXRcIl07XG5cdFx0Y29uc3QgeyBjb25zZW50LCBlbmFibGVkLCBtYXRvbW9JZCwgbWF0b21vVGFnTWFuYWdlcklkIH0gPVxuXHRcdFx0d2luZG93Ll9tdGRzVHJhY2tpbmc7XG5cblx0XHRpZiAobWF0b21vSWQpIHdpbmRvdy5fcGFxLnB1c2goW1wic2V0U2l0ZUlkXCIsIG1hdG9tb0lkXSk7XG5cdFx0aWYgKGVuYWJsZWQpIHtcblx0XHRcdGlmIChjb25zZW50ICE9PSBcImN1c3RvbVwiKSByZW5kZXJCYW5uZXIoKTtcblx0XHRcdGNvbnN0IHNyYyA9IG1hdG9tb1RhZ01hbmFnZXJJZFxuXHRcdFx0XHQ/IGBodHRwczovL2Nkbi5tYXRvbW8uY2xvdWQvJHtNQVRPTU99L2NvbnRhaW5lcl8ke21hdG9tb1RhZ01hbmFnZXJJZH0uanNgXG5cdFx0XHRcdDogYGh0dHBzOi8vY2RuLm1hdG9tby5jbG91ZC8ke01BVE9NT30vbWF0b21vLmpzYDtcblxuXHRcdFx0ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcihgc2NyaXB0W3NyYz1cIiR7c3JjfVwiXWApIHx8XG5cdFx0XHRcdGRvY3VtZW50LmhlYWQuYXBwZW5kKHRhZyhcInNjcmlwdFwiLCB7IGFzeW5jOiBcIlwiLCBzcmMgfSkpO1xuXHRcdH1cblx0fVxuXG5cdGlmICh3aW5kb3cuX210ZHNUcmFja2luZz8uZW5hYmxlZCA9PT0gZmFsc2UpIHJldHVybjtcblx0aWYgKHdpbmRvdy5fbXRkc1RyYWNraW5nPy5lbmFibGVkID09PSBcImRlYnVnXCIpXG5cdFx0cmV0dXJuIGNvbnNvbGUuaW5mbyhgYW5hbHl0aWNzKFwiJHthY3Rpb259XCIsIGAsIGFyZ3MsIFwiKVwiKTtcblxuXHRpZiAoYWN0aW9uID09PSBcInBhZ2V2aWV3XCIpIHtcblx0XHRjb25zdCB7IHVybCwgdGl0bGUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcInBhZ2V2aWV3XCJdO1xuXHRcdHdpbmRvdy5fcGFxLnB1c2goW1wic2V0Q3VzdG9tVXJsXCIsIHVybCB8fCBsb2NhdGlvbi5ocmVmXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXREb2N1bWVudFRpdGxlXCIsIHRpdGxlIHx8IGRvY3VtZW50LnRpdGxlXSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJ0cmFja1BhZ2VWaWV3XCJdKTtcblx0fSBlbHNlIGlmIChhY3Rpb24gPT09IFwiZXZlbnRcIikge1xuXHRcdGNvbnN0IHsgY2F0ZWdvcnksIGFjdGlvbiwgbmFtZSwgdmFsdWUgfSA9IGFyZ3MgYXMgQW5hbHl0aWNzQWN0aW9uc1tcImV2ZW50XCJdO1xuXHRcdGNvbnN0IGV2ZW50ID0gW1widHJhY2tFdmVudFwiLCBjYXRlZ29yeSwgYWN0aW9uLCBuYW1lLCB2YWx1ZV07XG5cblx0XHQvLyBXZSBkbyBub3Qgd2FudCB0byB0cmFjayBldmVudHMgd2l0aCBoYXNoIGluIFVSTCBhcyB0aGlzIGNhdXNlcyBoYXJkLXRvLXJlYWQgZGF0YSxcblx0XHQvLyBzbyB0ZW1wb3JhcmlseSByZW1vdmUgdGhlIGhhc2ggcGFydCwgYW5kIGFkZCBpdCBiYWNrIGFmdGVyIHRoZSBldmVudCBpcyBwdXNoZWRcblx0XHRsZXQgdXJsID0gbG9jYXRpb24uaHJlZjtcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcblx0XHRcdGZ1bmN0aW9uICgpIHtcblx0XHRcdFx0dXJsID0gdGhpcy5nZXRDdXJyZW50VXJsPHN0cmluZz4oKTtcblx0XHRcdH0sXG5cdFx0XSk7XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJzZXRDdXN0b21VcmxcIiwgdXJsLnNwbGl0KFwiI1wiKVswXV0pOyAvLyBTa2lwIGhhc2ggcGFydCBvZiBVUkxcblx0XHR3aW5kb3cuX3BhcS5wdXNoKGV2ZW50LmZpbHRlcigodikgPT4gdiAhPT0gdW5kZWZpbmVkKSk7IC8vIFB1c2ggZXZlbnRcblx0XHR3aW5kb3cuX3BhcS5wdXNoKFtcInNldEN1c3RvbVVybFwiLCB1cmxdKTsgLy8gUmV2ZXJydCB0byBvcmlnaW5hbCBVUkwgd2l0aCBoYXNoXG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcInNlYXJjaFwiKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0cXVlcnksXG5cdFx0XHRjYXRlZ29yeSA9IGZhbHNlLFxuXHRcdFx0cmVzdWx0cyA9IGZhbHNlLFxuXHRcdH0gPSBhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJzZWFyY2hcIl07XG5cdFx0d2luZG93Ll9wYXEucHVzaChbXCJ0cmFja1NpdGVTZWFyY2hcIiwgcXVlcnksIGNhdGVnb3J5LCByZXN1bHRzXSk7XG5cdH0gZWxzZSBpZiAoYWN0aW9uID09PSBcIm1hdG9tb1wiKSB7XG5cdFx0d2luZG93Ll9wYXEucHVzaChhcmdzIGFzIEFuYWx5dGljc0FjdGlvbnNbXCJtYXRvbW9cIl0pO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlbmRlckJhbm5lcigpIHtcblx0Y29uc3QgaGFzU2VlbkJhbm5lciA9XG5cdFx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoQkFOTkVSKSB8fCB3aW5kb3cubG9jYWxTdG9yYWdlLmdldEl0ZW0oQkFOTkVSKTtcblxuXHRpZiAoaGFzU2VlbkJhbm5lcikgcmV0dXJuO1xuXG5cdGRvY3VtZW50LmJvZHkuaW5zZXJ0QWRqYWNlbnRIVE1MKFxuXHRcdFwiYWZ0ZXJiZWdpblwiLFxuXHRcdGA8ZGlhbG9nIGlkPVwiJHtCQU5ORVJ9XCIgZGF0YS1hbmFseXRpY3M9XCJpZ25vcmVcIj48c3R5bGU+XG5cdFx0XHRcdCMke0JBTk5FUn1bb3Blbl0geyBib3gtc2l6aW5nOiBib3JkZXItYm94OyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBiYWNrZ3JvdW5kOiAjMTE2ZTZiOyBib3JkZXItcmFkaXVzOiAuNWVtOyBib3JkZXI6IDA7IGJveC1zaGFkb3c6IDAgLjI1ZW0gLjVlbSByZ2JhKDAsMCwwLC4zKTsgY29sb3I6ICNmZmY7IGZvbnQtc2l6ZTogLjg3NWVtOyBpbnNldDogYXV0byBhdXRvIDFlbSAxZW07IG1heC13aWR0aDogY2FsYygxMDB2dyAtIDJlbSk7IG91dGxpbmU6IDA7IHBhZGRpbmc6IC41ZW07IHBvc2l0aW9uOiBmaXhlZDsgei1pbmRleDogOTk5OTkgfVxuXHRcdFx0XHQjJHtCQU5ORVJ9IGJ1dHRvbiB7IGFsbDogdW5zZXQ7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogZmxleDsgd2lkdGg6IDEuNWVtOyBoZWlnaHQ6IDEuNWVtOyBmb250OiAzMDAgMS41ZW0vMS4zNSBzYW5zLXNlcmlmOyBib3JkZXItcmFkaXVzOiAuMjVlbTsgcGxhY2UtY29udGVudDogY2VudGVyOyB0cmFuc2l0aW9uOiAuMnM7IHRyYW5zaXRpb24tcHJvcGVydHk6IGJhY2tncm91bmQsIHNjYWxlIH1cblx0XHRcdFx0IyR7QkFOTkVSfSBidXR0b246Zm9jdXMtdmlzaWJsZSB7IG91dGxpbmU6IDJweCBzb2xpZCB9XG5cdFx0XHRcdCMke0JBTk5FUn0gYnV0dG9uOmhvdmVyIHsgYmFja2dyb3VuZDogIzBhNGU0ZiB9XG5cdFx0XHRcdCMke0JBTk5FUn0gYnV0dG9uOmFjdGl2ZSB7IGJhY2tncm91bmQ6ICMwNTQ0NDk7IHNjYWxlOiAuOSB9XG5cdFx0XHRcdCMke0JBTk5FUn0gcCB7IG1hcmdpbjogMCAuMjVlbSB9XG5cdFx0XHQ8L3N0eWxlPlxuXHRcdFx0PHA+VmkgYnJ1a2VyIDxhIGhyZWY9XCIke0JBTk5FUl9VUkx9XCIgdGFyZ2V0PVwiX2JsYW5rXCI+aW5mb3JtYXNqb25za2Fwc2xlcjwvYT4gZm9yIMOlIGZvcmJlZHJlIGJydWtlcm9wcGxldmVsc2VuLjwvcD5cblx0XHRcdDxmb3JtIG1ldGhvZD1cImRpYWxvZ1wiIGRhdGEtYW5hbHl0aWNzPVwiaWdub3JlXCI+PGJ1dHRvbiB0eXBlPVwic3VibWl0XCIgYXJpYS1sYWJlbD1cIk9LXCI+JnRpbWVzOzwvYnV0dG9uPjwvZm9ybT5cblx0XHQ8L2RpYWxvZz5gLFxuXHQpO1xuXHRjb25zdCBiYW5uZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChCQU5ORVIpIGFzIEhUTUxEaWFsb2dFbGVtZW50O1xuXHRjb25zdCBvbkNsb3NlID0gKCkgPT4gd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKEJBTk5FUiwgXCJzZWVuXCIpO1xuXHRiYW5uZXIuYWRkRXZlbnRMaXN0ZW5lcihcImNsb3NlXCIsIG9uQ2xvc2UsIHsgb25jZTogdHJ1ZSB9KTtcblx0YmFubmVyLnNob3coKTtcbn1cblxuZnVuY3Rpb24gaGFuZGxlVHJhY2soZXZlbnQ6IEV2ZW50KSB7XG5cdGlmICh3aW5kb3cuX210ZHNUcmFja2luZz8uZW5hYmxlZCkgc2V0VGltZW91dChwcm9jZXNzVHJhY2ssIDAsIGV2ZW50KTsgLy8gTGV0IG90aGVyIGV2ZW50cyBwcm9jZXNzIGZpcnN0XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NUcmFjayh7IHR5cGUsIHRhcmdldCB9OiBFdmVudCkge1xuXHRjb25zdCBlbCA9IHR5cGUgPT09IFwiY2xpY2tcIiA/ICh0YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihDTElDS1MpIDogdGFyZ2V0O1xuXHRpZiAoIShlbCBpbnN0YW5jZW9mIEVsZW1lbnQpIHx8IGVsLmNsb3Nlc3QoJ1tkYXRhLWFuYWx5dGljcz1cImlnbm9yZVwiXScpKVxuXHRcdHJldHVybjtcblxuXHRsZXQgYWN0aW9uID0gXCJjbGlja1wiO1xuXHRsZXQgY2F0ZWdvcnkgPSBcIkJ1dHRvblwiO1xuXHRsZXQgbmFtZSA9IGxhYmVsKGVsKSB8fCBoZWFkaW5nKGVsKSB8fCBhdHRyKGVsLCBcImRhdGEtdG9vbHRpcFwiKSB8fCBcIlwiO1xuXG5cdGlmICh0eXBlID09PSBcInN1Ym1pdFwiKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkZvcm1cIjtcblx0XHRhY3Rpb24gPSBcInN1Ym1pdFwiO1xuXHRcdG5hbWUgPSBuYW1lIHx8IGRvY3VtZW50LnRpdGxlO1xuXHR9IGVsc2UgaWYgKHR5cGUgPT09IFwidG9nZ2xlXCIpIHtcblx0XHRpZiAoIWVsLm1hdGNoZXMoXCJkaWFsb2c6bW9kYWxcIikpIHJldHVybjsgLy8gU2tpcCBub24tbW9kYWwgZGlhbG9nc1xuXHRcdGNhdGVnb3J5ID0gXCJEaWFsb2dcIjtcblx0XHRhY3Rpb24gPSBcIm9wZW5cIjtcblx0fSBlbHNlIGlmICh0eXBlID09PSBcImNoYW5nZVwiKSB7XG5cdFx0Y29uc3QgdHlwZSA9IGF0dHIoZWwsIFwidHlwZVwiKTtcblx0XHRjb25zdCBncm91cCA9XG5cdFx0XHR0eXBlID09PSBcImNoZWNrYm94XCIgfHwgdHlwZSA9PT0gXCJyYWRpb1wiID8gZWwuY2xvc2VzdChcImZpZWxkc2V0XCIpIDogbnVsbDtcblxuXHRcdGNhdGVnb3J5ID0gZWwuY2xvc2VzdChDU1NfQ0hJUCkgPyBcIkNoaXBcIiA6IFwiRm9ybVwiO1xuXHRcdGFjdGlvbiA9IFwiY2hhbmdlXCI7XG5cdFx0bmFtZSA9XG5cdFx0XHRsYWJlbChncm91cCB8fCBlbCkgfHxcblx0XHRcdHRleHQoZ3JvdXA/LnF1ZXJ5U2VsZWN0b3IoXCJsZWdlbmRcIikpIHx8XG5cdFx0XHR0ZXh0KChlbCBhcyBIVE1MSW5wdXRFbGVtZW50KT8ubGFiZWxzPy5bMF0pO1xuXHR9IGVsc2UgaWYgKGF0dHIoZWwsIFwicm9sZVwiKSA9PT0gXCJ0YWJcIikge1xuXHRcdGNhdGVnb3J5ID0gXCJUYWJcIjtcblx0XHRhY3Rpb24gPSBcIm5hdmlnYXRlXCI7XG5cdH0gZWxzZSBpZiAoYXR0cihlbCwgXCJwb3BvdmVydGFyZ2V0XCIpKSB7XG5cdFx0aWYgKCFwb3BvdmVyKGVsKT8ubWF0Y2hlcyhcIjpwb3BvdmVyLW9wZW5cIikpIHJldHVybjsgLy8gU2tpcCBpZiBub3Qgb3BlblxuXHRcdGNhdGVnb3J5ID0gZWwuY2xvc2VzdChDU1NfSEVMUFRFWFQpID8gXCJIZWxwVGV4dFwiIDogXCJQb3BvdmVyXCI7XG5cdFx0YWN0aW9uID0gXCJvcGVuXCI7XG5cdH0gZWxzZSBpZiAoZWwubm9kZU5hbWUuZW5kc1dpdGgoXCJTVU1NQVJZXCIpKSB7XG5cdFx0aWYgKCEoZWwucGFyZW50RWxlbWVudCBhcyBIVE1MRGV0YWlsc0VsZW1lbnQpLm9wZW4pIHJldHVybjsgLy8gU2tpcCBpZiBub3Qgb3BlblxuXHRcdGNhdGVnb3J5ID0gXCJEZXRhaWxzXCI7XG5cdFx0YWN0aW9uID0gXCJvcGVuXCI7XG5cdH0gZWxzZSBpZiAoYXR0cihlbCwgXCJkYXRhLWNvbW1hbmRcIikgPT09IFwidG9nZ2xlLWFwcC1leHBhbmRlZFwiKSB7XG5cdFx0Y29uc3Qgb3BlbiA9IHN0eWxlKGVsLCBcIi0tbXRkcy10b29sdGlwLXBvc2l0aW9uXCIpID09PSBcIm5vbmVcIjtcblx0XHRjYXRlZ29yeSA9IFwiU2lkZWJhclwiO1xuXHRcdGFjdGlvbiA9IG9wZW4gPyBcImV4cGFuZFwiIDogXCJtaW5pbWl6ZVwiO1xuXHRcdG5hbWUgPSAob3BlbiAmJiBhdHRyKGVsLCBcImRhdGEtdG9vbHRpcFwiKSkgfHwgdGV4dChlbCk7XG5cdH0gZWxzZSBpZiAoZWwuY2xvc2VzdChDU1NfQlJFQURDUlVNQlMpKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkJyZWFkY3J1bWJzXCI7XG5cdFx0YWN0aW9uID0gXCJuYXZpZ2F0ZVwiO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoQ1NTX1BBR0lOQVRJT04pKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIlBhZ2ludGF0aW9uXCI7XG5cdFx0YWN0aW9uID0gXCJuYXZpZ2F0ZVwiO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoQ1NTX0NBUkQpKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkNhcmRcIjtcblx0XHRhY3Rpb24gPSBlbCBpbnN0YW5jZW9mIEhUTUxBbmNob3JFbGVtZW50ID8gXCJuYXZpZ2F0ZVwiIDogXCJjbGlja1wiO1xuXHR9IGVsc2UgaWYgKGVsLmNsb3Nlc3QoQ1NTX0NISVApKSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkNoaXBcIjtcblx0XHRhY3Rpb24gPSBlbC5oYXNBdHRyaWJ1dGUoXCJkYXRhLXJlbW92YWJsZVwiKSA/IFwicmVtb3ZlXCIgOiBcImNsaWNrXCI7XG5cdH0gZWxzZSBpZiAoZWwuY2xvc2VzdChcInRoW2FyaWEtc29ydF1cIikpIHtcblx0XHRjYXRlZ29yeSA9IFwiVGFibGVcIjtcblx0XHRhY3Rpb24gPSBcInNvcnRcIjtcblx0fSBlbHNlIGlmIChlbCBpbnN0YW5jZW9mIEhUTUxBbmNob3JFbGVtZW50KSB7XG5cdFx0Y2F0ZWdvcnkgPSBcIkxpbmtcIjtcblx0XHRhY3Rpb24gPSBlbC5wcm90b2NvbCA9PT0gXCJtYWlsdG86XCIgPyBcImVtYWlsXCIgOiBcIm5hdmlnYXRlXCI7XG5cdFx0aWYgKGVsLmhhc0F0dHJpYnV0ZShcImRvd25sb2FkXCIpKSBhY3Rpb24gPSBcImRvd25sb2FkXCI7XG5cdFx0ZWxzZSBpZiAoZWwuaGFzaCAmJiBlbC5ocmVmLnN0YXJ0c1dpdGgobG9jYXRpb24uaHJlZi5zcGxpdChcIiNcIilbMF0pKVxuXHRcdFx0YWN0aW9uID0gXCJhbmNob3JcIjsgLy8gT25seSB0cmFjayBhcyBhbmNob3IgaWYgc2FtZSBwYWdlXG5cdH0gZWxzZSBpZiAoZWwuaGFzQXR0cmlidXRlKFwiYXJpYS1leHBhbmRlZFwiKSkge1xuXHRcdGlmIChhdHRyKGVsLCBcImFyaWEtZXhwYW5kZWRcIikgIT09IFwidHJ1ZVwiKSByZXR1cm47IC8vIFNraXAgaWYgbm90IG9wZW5cblx0XHRjYXRlZ29yeSA9IFwiRXhwYW5kXCI7XG5cdFx0YWN0aW9uID0gXCJvcGVuXCI7XG5cdH1cblxuXHQvLyBSZXNwZWN0IGF0dHJpYnV0ZXMgYW5kIHNlbmRcblx0YW5hbHl0aWNzKFwiZXZlbnRcIiwge1xuXHRcdGNhdGVnb3J5OiBhdHRyKGVsLCBcImRhdGEtYW5hbHl0aWNzLWNhdGVnb3J5XCIpID8/IGNhdGVnb3J5LFxuXHRcdGFjdGlvbjogYXR0cihlbCwgXCJkYXRhLWFuYWx5dGljcy1hY3Rpb25cIikgPz8gYWN0aW9uLFxuXHRcdG5hbWU6IGF0dHIoZWwsIFwiZGF0YS1hbmFseXRpY3MtbmFtZVwiKSA/PyBuYW1lLFxuXHR9KTtcbn1cblxuLy8gVXRpbGl0aWVzXG5jb25zdCB0ZXh0ID0gKGVsPzogRWxlbWVudCB8IG51bGwpID0+IGVsPy50ZXh0Q29udGVudD8udHJpbSgpIHx8IFwiXCI7XG5jb25zdCBsYWJlbCA9IChlbD86IEVsZW1lbnQgfCBudWxsKSA9PiAoZWwgJiYgYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIpKSB8fCBcIlwiO1xuY29uc3QgcG9wb3ZlciA9IChlbDogRWxlbWVudCkgPT5cblx0ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXR0cihlbCwgXCJwb3BvdmVydGFyZ2V0XCIpIHx8IFwiXCIpO1xuY29uc3Qgc3R5bGUgPSAoZWw6IEVsZW1lbnQsIGtleTogc3RyaW5nKSA9PlxuXHR3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbCkuZ2V0UHJvcGVydHlWYWx1ZShrZXkpPy50cmltKCk7XG5jb25zdCBoZWFkaW5nID0gKGVsOiBFbGVtZW50KSA9PiB7XG5cdGNvbnN0IGJvZHkgPSB0ZXh0KGVsKTtcblx0Y29uc3QgaGVhZCA9IHRleHQoZWwucXVlcnlTZWxlY3RvcihcImgxLGgyLGgzLGg0LGg1LGg2XCIpKTsgLy8gTm90ZTogaGVhZCBtaWdodCBiZSBlbXB0eSBzdHJpbmcgJydcblx0cmV0dXJuIChib2R5LnN0YXJ0c1dpdGgoaGVhZCkgJiYgaGVhZCkgfHwgYm9keS5zbGljZSgwLCAxMDApLnRyaW0oKTsgLy8gTGltaXQgdG8gMTAwIGNoYXJhY3RlcnNcbn07XG5cbm9uTG9hZGVkKCgpID0+IG9uKGRvY3VtZW50LCBFVkVOVFMsIGhhbmRsZVRyYWNrLCBRVUlDS19FVkVOVCkpO1xuIiwiaWYgKFxuXHR0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdHdpbmRvdy5DU1NTdHlsZVNoZWV0ICYmXG5cdGRvY3VtZW50LmFkb3B0ZWRTdHlsZVNoZWV0c1xuKVxuXHQoKCkgPT4ge1xuXHRcdGNvbnN0IGtleSA9IFwiLS1tdGRzLWFwcC1leHBhbmRlZFwiO1xuXHRcdGNvbnN0IHNoZWV0ID0gbmV3IENTU1N0eWxlU2hlZXQoKTtcblx0XHRjb25zdCBwcmV2ID0gKCkgPT4gIXdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbShrZXkpPy5pbmNsdWRlcyhcImZhbHNlXCIpO1xuXG5cdFx0ZG9jdW1lbnQuYWRvcHRlZFN0eWxlU2hlZXRzLnB1c2goc2hlZXQpO1xuXHRcdHdpbmRvdy5tdGRzVG9nZ2xlQXBwRXhwYW5kZWQgPSAoZm9yY2UpID0+IHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbnN0IG5leHQgPSBmb3JjZSA/PyAhcHJldigpO1xuXHRcdFx0XHRzaGVldC5yZXBsYWNlU3luYz8uKGA6cm9vdCB7ICR7a2V5fTogdmFyKCR7a2V5fS0tJHtuZXh0fSl9YCk7XG5cdFx0XHRcdHdpbmRvdy5sb2NhbFN0b3JhZ2Uuc2V0SXRlbShrZXksIG5leHQpO1xuXHRcdFx0fSBjYXRjaCAoX2Vycikge30gLy8gbG9jYWxTdG9yYWdlIGlzIGZ1bGwgb3IgcmVwbGFjZVN5bmMgaXMgbm90IHN1cHBvcnRlZFxuXHRcdH07XG5cblx0XHQvLyBTZXQgYW5kIHN0b3JlIGluaXRpYWwgc3RhdGVcblx0XHR3aW5kb3cubXRkc1RvZ2dsZUFwcEV4cGFuZGVkKHByZXYoKSk7XG5cdH0pKCk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgZGVib3VuY2UsIG9uLCBvbkxvYWRlZCwgb25NdXRhdGlvbiwgUVVJQ0tfRVZFTlQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCBcIi4vYXBwLXRvZ2dsZVwiO1xuXG5jb25zdCBDU1NfQVBQID0gc3R5bGVzLmFwcC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfU1RJQ0tZID0gc3R5bGVzLnN0aWNreS5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVE9HR0xFID0gJ1tkYXRhLWNvbW1hbmQ9XCJ0b2dnbGUtYXBwLWV4cGFuZGVkXCJdJztcbmNvbnN0IENTU19TSURFQkFSID0gYC4ke0NTU19BUFB9ID4gZGlhbG9nLC4ke0NTU19BUFB9IGRpYWxvZyB+IG1haW5gO1xuXG5jb25zdCB1c2VUcmFuc2l0aW9uID0gKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiB7XG5cdGlmICghZG9jdW1lbnQuc3RhcnRWaWV3VHJhbnNpdGlvbikgY2FsbGJhY2soKTtcblx0ZWxzZSBkb2N1bWVudC5zdGFydFZpZXdUcmFuc2l0aW9uKGNhbGxiYWNrKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0b2dnbGVBcHBFeHBhbmRlZCA9IChmb3JjZT86IGJvb2xlYW4pID0+XG5cdC8vIEB0cy1leHBlY3QtZXJyb3Igd2luZG93Lm10ZHNBcHBUb2dnbGUgY29tZXMgZnJvbSBhcHAtdG9nZ2xlLmpzXG5cdHVzZVRyYW5zaXRpb24oKCkgPT4gd2luZG93Lm10ZHNUb2dnbGVBcHBFeHBhbmRlZD8uKGZvcmNlKSk7XG5cbmZ1bmN0aW9uIGhhbmRsZUFwcFRvZ2dsZUNsaWNrKHsgdGFyZ2V0OiBlbCwgZGVmYXVsdFByZXZlbnRlZDogc3RvcCB9OiBFdmVudCkge1xuXHRjb25zdCBsaW5rID0gKGVsIGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oXCJhXCIpO1xuXHRpZiAobGluaz8uY2xvc2VzdChcImRpYWxvZ1wiKSAmJiBsaW5rPy5jbG9zZXN0KENTU19TSURFQkFSKSlcblx0XHRyZXR1cm4gY2xvc2VTaWRlYmFyKCk7IC8vIENsb3NlIHNpZGViYXIgaWYgbGluayBpcyBjbGlja2VkIGluc2lkZSBzaWRlYmFyXG5cblx0aWYgKHN0b3AgfHwgIShlbCBpbnN0YW5jZW9mIEhUTUxCdXR0b25FbGVtZW50KSB8fCAhZWwubWF0Y2hlcyhDU1NfVE9HR0xFKSlcblx0XHRyZXR1cm47XG5cdGNvbnN0IGlzRGVza3RvcCA9IGdldENvbXB1dGVkU3R5bGUoZWwpLnBvc2l0aW9uID09PSBcInN0aWNreVwiO1xuXG5cdGlmIChpc0Rlc2t0b3ApIHRvZ2dsZUFwcEV4cGFuZGVkKCk7XG5cdGVsc2Vcblx0XHR1c2VUcmFuc2l0aW9uKCgpID0+IHtcblx0XHRcdGNvbnN0IHNpZGViYXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaWFsb2dFbGVtZW50PihDU1NfU0lERUJBUik7XG5cdFx0XHRzaWRlYmFyPy5zZXRBdHRyaWJ1dGUoXCJkYXRhLWNsb3NlZGJ5XCIsIFwiYW55XCIpOyAvLyBBbGxvdyBjbG9zaW5nIGJ5IGNsaWNraW5nIG91dHNpZGVcblx0XHRcdHNpZGViYXI/LnNob3dNb2RhbCgpO1xuXHRcdH0pO1xufVxuXG5mdW5jdGlvbiBjbG9zZVNpZGViYXIoKSB7XG5cdGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTERpYWxvZ0VsZW1lbnQ+KENTU19TSURFQkFSKT8uY2xvc2UoKTtcbn1cblxuLy8gU2Nyb2xsIHN0YXRlXG5sZXQgTUlOX1kgPSAwOyAvLyBPZmZzZXQgdG8gYXZvaWQgc2Nyb2xsIGp1bXAgd2hlbiBzdGlja3kgaXMgc2V0IHRvIHJlbGF0aXZlXG5sZXQgU0NST0xMX1VQOiBib29sZWFuO1xubGV0IFNUSUNLID0gMDsgLy8gLTEgPSBzdGljayB0b3AsIDAgPSByZWxhdGl2ZSwgMSA9IHN0aWNrIGJvdHRvbVxubGV0IFNUSUNLX0VMOiBIVE1MRWxlbWVudDtcbmxldCBTVElDS19IID0gMDtcbmxldCBTVElDS19ZID0gMDtcbmxldCBTVFVDSyA9IGZhbHNlOyAvLyBVc2VkIHRvIGZpZ3VyZSBpZiBuYXYgaXMgbGFyZ2VyIHRoYW4gdmlld3BvcnRcbmxldCBXSU5fSCA9IDA7XG5sZXQgV0lOX1kgPSAwO1xuXG5mdW5jdGlvbiBoYW5kbGVNdXRhdGlvbihbc3RpY2t5XTogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0U1RJQ0tfRUwgPSBzdGlja3k7XG5cdGhhbmRsZUFwcFNjcm9sbCgpOyAvLyBSdW4gb24gY29ubmVjdFxufVxuXG5mdW5jdGlvbiBoYW5kbGVBcHBTY3JvbGwoKSB7XG5cdGlmICghU1RJQ0tfRUw/LmlzQ29ubmVjdGVkKSByZXR1cm47XG5cdGNvbnN0IE5FWFRfWSA9IHdpbmRvdy5zY3JvbGxZO1xuXHRjb25zdCBORVhUX1VQID0gTkVYVF9ZIDwgV0lOX1k7XG5cdFdJTl9ZID0gTkVYVF9ZO1xuXG5cdC8vIE9ubHkgY2FsY3VsYXRlIGlmIHNjcm9sbCBkaXJlY3Rpb24gaGFzIGNoYW5nZWRcblx0aWYgKE5FWFRfVVAgIT09IFNDUk9MTF9VUCkge1xuXHRcdE1JTl9ZID0gKFNUSUNLX0VMLnBhcmVudEVsZW1lbnQ/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCB8fCAwKSArIFdJTl9ZO1xuXHRcdFNDUk9MTF9VUCA9IE5FWFRfVVA7XG5cdFx0U1RJQ0tfSCA9IFNUSUNLX0VMLm9mZnNldEhlaWdodDtcblx0XHRTVElDS19ZID0gU1RJQ0tfRUwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgV0lOX1k7XG5cdFx0U1RVQ0sgPSBTVElDS19FTC5vZmZzZXRIZWlnaHQgPD0gd2luZG93LmlubmVySGVpZ2h0O1xuXHRcdFdJTl9IID0gd2luZG93LmlubmVySGVpZ2h0O1xuXHR9XG5cblx0aWYgKFNUSUNLID09PSAtMSAmJiBTVFVDSykgcmV0dXJuOyAvLyBBbGx3YXlzIHN0aWNreSB3aGVuIHNpZGViYXIgaXMgc21hbGxlciB0aGFuIHZpZXdwb3J0XG5cdGlmIChTVElDSyAhPT0gLTEgJiYgKFNUVUNLIHx8IChTQ1JPTExfVVAgJiYgV0lOX1kgPD0gU1RJQ0tfWSkpKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInN0aWNreVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIFwiMHB4XCIpO1xuXHRcdFNUSUNLID0gLTE7IC8vIE5vdCBzdGlja2luZyB0byB0b3AgYW5kIHNpZGViYXIgaXMgc21hbGxlciB0aGFuIHZpZXdwb3J0IG9yIHNjcm9sbGluZyB1cFxuXHR9IGVsc2UgaWYgKFNUSUNLID09PSAtMSAmJiAhU0NST0xMX1VQKSB7XG5cdFx0U1RJQ0tfRUwuc3R5bGUuc2V0UHJvcGVydHkoXCItLXBvc1wiLCBcInJlbGF0aXZlXCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7TWF0aC5tYXgoMCwgV0lOX1kgLSBNSU5fWSl9cHhgKTtcblx0XHRTVElDSyA9IDA7IC8vIFN0aWNraW5nIHRvIHRvcCBhbmQgc2Nyb2xsaW5nIGRvd25cblx0fSBlbHNlIGlmIChTVElDSyAhPT0gMSAmJiAhU0NST0xMX1VQICYmIFdJTl9ZICsgV0lOX0ggPj0gU1RJQ0tfWSArIFNUSUNLX0gpIHtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcG9zXCIsIFwic3RpY2t5XCIpO1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3BcIiwgYCR7V0lOX0ggLSBTVElDS19IfXB4YCk7XG5cdFx0U1RJQ0sgPSAxOyAvLyBOb3Qgc3RpY2tpbmcgdG8gYm90dG9tIGFuZCBzY3JvbGxpbmcgZG93blxuXHR9IGVsc2UgaWYgKFNUSUNLID09PSAxICYmIFNDUk9MTF9VUCkge1xuXHRcdFNUSUNLX0VMLnN0eWxlLnNldFByb3BlcnR5KFwiLS1wb3NcIiwgXCJyZWxhdGl2ZVwiKTtcblx0XHRTVElDS19FTC5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tdG9wXCIsIGAke1NUSUNLX1kgLSBNSU5fWX1weGApO1xuXHRcdFNUSUNLID0gMDsgLy8gU3RpY2tpbmcgdG8gYm90dG9tIGFuZCBzY3JvbGxpbmcgdXBcblx0fVxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfU1RJQ0tZLCBoYW5kbGVNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZUFwcFRvZ2dsZUNsaWNrLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJyZXNpemVcIiwgZGVib3VuY2UoY2xvc2VTaWRlYmFyLCAxMDApLCBRVUlDS19FVkVOVCk7XG5cdG9uKHdpbmRvdywgXCJzY3JvbGxcIiwgaGFuZGxlQXBwU2Nyb2xsLCBRVUlDS19FVkVOVCk7XG59KTtcbiIsImNvbnN0IGdldFN0ZXBzID0gKFxuXHRub3c6IG51bWJlcixcblx0bWF4OiBudW1iZXIsXG5cdHNob3cgPSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksXG4pID0+IHtcblx0Y29uc3Qgb2Zmc2V0ID0gKHNob3cgLSAxKSAvIDI7XG5cdGNvbnN0IHN0YXJ0ID0gTWF0aC5tYXgoTWF0aC5taW4obm93IC0gTWF0aC5mbG9vcihvZmZzZXQpLCBtYXggLSBzaG93ICsgMSksIDEpO1xuXHRjb25zdCBlbmQgPSBNYXRoLm1pbihNYXRoLm1heChub3cgKyBNYXRoLmNlaWwob2Zmc2V0KSwgc2hvdyksIG1heCk7XG5cdGNvbnN0IHBhZ2VzID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogZW5kICsgMSAtIHN0YXJ0IH0sIChfLCBpKSA9PiBpICsgc3RhcnQpO1xuXG5cdGlmIChzaG93ID4gNCAmJiBzdGFydCA+IDEpIHBhZ2VzLnNwbGljZSgwLCAyLCAxLCAwKTtcblx0aWYgKHNob3cgPiAzICYmIGVuZCA8IG1heCkgcGFnZXMuc3BsaWNlKC0yLCAyLCAwLCBtYXgpO1xuXHRyZXR1cm4gcGFnZXM7XG59O1xuXG5leHBvcnQgY29uc3QgcGFnaW5hdGlvbiA9ICh7IGN1cnJlbnQgPSAxLCB0b3RhbCA9IDEwLCBzaG93ID0gNyB9KSA9PiAoe1xuXHRwcmV2OiBjdXJyZW50ID4gMSA/IGN1cnJlbnQgLSAxIDogMCxcblx0bmV4dDogY3VycmVudCA8IHRvdGFsID8gY3VycmVudCArIDEgOiAwLFxuXHRwYWdlczogZ2V0U3RlcHMoY3VycmVudCwgdG90YWwsIHNob3cpLm1hcCgocGFnZSwgaW5kZXgpID0+ICh7XG5cdFx0Y3VycmVudDogcGFnZSA9PT0gY3VycmVudCAmJiAoXCJwYWdlXCIgYXMgY29uc3QpLFxuXHRcdGtleTogYGtleS0ke3BhZ2V9LSR7aW5kZXh9YCxcblx0XHRwYWdlLFxuXHR9KSksXG59KTtcbiIsImltcG9ydCBjbHN4IGZyb20gXCJjbHN4XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgdGFnIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmV4cG9ydCB0eXBlIFRvYXN0T3B0aW9ucyA9IHtcblx0Y2xhc3NOYW1lPzogc3RyaW5nO1xuXHRjbG9zZWRieT86IFwibm9uZVwiO1xuXHRjb2xvcj86IFwibWFpblwiIHwgXCJuZXV0cmFsXCIgfCBcInN1Y2Nlc3NcIiB8IFwiZGFuZ2VyXCIgfCBcImluZm9cIiB8IFwid2FybmluZ1wiO1xuXHRpY29uPzogYm9vbGVhbiB8IFwibm9uZVwiO1xuXHR0aW1lb3V0PzogbnVtYmVyIHwgZmFsc2U7XG5cdGJ1c3k/OiBib29sZWFuO1xuXHRvcGVuPzogYm9vbGVhbjtcblx0aWQ/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdG9hc3QoY29udGVudDogc3RyaW5nLCBvcHQ6IFRvYXN0T3B0aW9ucyA9IHt9KSB7XG5cdGNvbnN0IGRpYWxvZyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG9wdC5pZCB8fCBcIlwiKSB8fCB0YWcoXCJkaWFsb2dcIik7XG5cblx0YXR0cihkaWFsb2csIFwiYXJpYS1idXN5XCIsIG9wdC5idXN5ID8gXCJ0cnVlXCIgOiBudWxsKTtcblx0YXR0cihkaWFsb2csIFwiY2xhc3NcIiwgY2xzeChzdHlsZXMudG9hc3QsIG9wdC5jbGFzc05hbWUpKTtcblx0YXR0cihkaWFsb2csIFwiZGF0YS1jbG9zZWRieVwiLCBvcHQuY2xvc2VkYnkgfHwgbnVsbCk7XG5cdGF0dHIoZGlhbG9nLCBcImRhdGEtY29sb3JcIiwgb3B0LmNvbG9yIHx8IG51bGwpO1xuXHRhdHRyKGRpYWxvZywgXCJkYXRhLWljb25cIiwgYCR7b3B0Lmljb24gPz8gXCJcIn1gIHx8IG51bGwpO1xuXHRhdHRyKGRpYWxvZywgXCJkYXRhLXRpbWVvdXRcIiwgYCR7b3B0LnRpbWVvdXQgPz8gXCJcIn1gIHx8IG51bGwpO1xuXHRhdHRyKGRpYWxvZywgXCJpZFwiLCBvcHQuaWQgfHwgYCR7RGF0ZS5ub3coKX1gKTtcblx0YXR0cihkaWFsb2csIFwib3BlblwiLCBvcHQub3BlbiA9PT0gZmFsc2UgPyBudWxsIDogXCJcIik7XG5cblx0ZGlhbG9nLmlubmVySFRNTCA9IGNvbnRlbnQ7XG5cdGRpYWxvZy5hZGRFdmVudExpc3RlbmVyKFwiYW5pbWF0aW9uZW5kXCIsIGhhbmRsZVRvYXN0Q2xvc2UsIHsgb25jZTogdHJ1ZSB9KTtcblx0ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaWFsb2cpO1xuXHRyZXR1cm4gZGlhbG9nLmlkO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVUb2FzdENsb3NlKHsgYW5pbWF0aW9uTmFtZSwgdGFyZ2V0IH06IFBhcnRpYWw8QW5pbWF0aW9uRXZlbnQ+KSB7XG5cdGlmIChhbmltYXRpb25OYW1lID09PSBzdHlsZXMuX3RvYXN0Q2xvc2UpXG5cdFx0KHRhcmdldCBhcyBIVE1MRGlhbG9nRWxlbWVudCkucmVtb3ZlKCk7XG59XG5cbi8vIEV4cG9zZSB0b2FzdC5kYW5nZXIsIHRvYXN0LmluZm8sIHRvYXN0LnN1Y2Nlc3MgZXRjLlxudG9hc3Quc3VjY2VzcyA9IChjb250ZW50OiBzdHJpbmcsIG9wdD86IFRvYXN0T3B0aW9ucykgPT5cblx0dG9hc3QoY29udGVudCwgeyBjb2xvcjogXCJzdWNjZXNzXCIsIC4uLm9wdCB9KTtcbnRvYXN0LmRhbmdlciA9IChjb250ZW50OiBzdHJpbmcsIG9wdD86IFRvYXN0T3B0aW9ucykgPT5cblx0dG9hc3QoY29udGVudCwgeyBjb2xvcjogXCJkYW5nZXJcIiwgLi4ub3B0IH0pO1xudG9hc3QuaW5mbyA9IChjb250ZW50OiBzdHJpbmcsIG9wdDogVG9hc3RPcHRpb25zKSA9PlxuXHR0b2FzdChjb250ZW50LCB7IGNvbG9yOiBcImluZm9cIiwgLi4ub3B0IH0pO1xudG9hc3Qud2FybmluZyA9IChjb250ZW50OiBzdHJpbmcsIG9wdD86IFRvYXN0T3B0aW9ucykgPT5cblx0dG9hc3QoY29udGVudCwgeyBjb2xvcjogXCJ3YXJuaW5nXCIsIC4uLm9wdCB9KTtcbnRvYXN0Lm5ldXRyYWwgPSAoY29udGVudDogc3RyaW5nLCBvcHQ/OiBUb2FzdE9wdGlvbnMpID0+XG5cdHRvYXN0KGNvbnRlbnQsIHsgY29sb3I6IFwibmV1dHJhbFwiLCAuLi5vcHQgfSk7XG50b2FzdC5wcm9taXNlID0gYXN5bmMgZnVuY3Rpb24gcHJvbWlzZTxUPihcblx0YWN0aW9uOiAoKSA9PiBQcm9taXNlPFQ+LFxuXHRwcm9wczogVG9hc3RPcHRpb25zICYge1xuXHRcdGxvYWRpbmc6IHN0cmluZztcblx0XHRzdWNjZXNzOiBzdHJpbmc7XG5cdFx0ZXJyb3I6IHN0cmluZztcblx0fSxcbik6IFByb21pc2U8VD4ge1xuXHRjb25zdCB7IGxvYWRpbmcsIHN1Y2Nlc3MsIGVycm9yLCAuLi5vcHQgfSA9IHByb3BzO1xuXHRjb25zdCBpZCA9IHRvYXN0KGxvYWRpbmcsIHsgYnVzeTogdHJ1ZSwgLi4ub3B0IH0pO1xuXHR0cnkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFjdGlvbigpO1xuXHRcdHRvYXN0LnN1Y2Nlc3Moc3VjY2VzcywgeyBpZCwgYnVzeTogZmFsc2UgfSk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSBjYXRjaCAoX2Vycm9yKSB7XG5cdFx0dG9hc3QuZGFuZ2VyKGVycm9yLCB7IGlkLCBidXN5OiBmYWxzZSB9KTtcblx0XHR0aHJvdyBfZXJyb3I7XG5cdH1cbn07XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb25Mb2FkZWQsIG9uTXV0YXRpb24gfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0JSRUFEQ1JVTUJTID0gc3R5bGVzLmJyZWFkY3J1bWJzLnNwbGl0KFwiIFwiKVswXTtcblxuZnVuY3Rpb24gaGFuZGxlQnJlYWRjcnVtYnNNdXRhdGlvbihicmVhZGNydW1iczogSFRNTENvbGxlY3Rpb25PZjxIVE1MRWxlbWVudD4pIHtcblx0Zm9yIChjb25zdCBicmVhZGN1bWJzIG9mIGJyZWFkY3J1bWJzKVxuXHRcdGJyZWFkY3VtYnMucXVlcnlTZWxlY3RvckFsbChcImxpIGFcIikuZm9yRWFjaCgoY3J1bWIsIGluZGV4LCB7IGxlbmd0aCB9KSA9PiB7XG5cdFx0XHRhdHRyKGNydW1iLCBcImFyaWEtY3VycmVudFwiLCBpbmRleCA9PT0gbGVuZ3RoIC0gMSA/IFwicGFnZVwiIDogbnVsbCk7XG5cdFx0fSk7XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRcdENTU19CUkVBRENSVU1CUyxcblx0XHRoYW5kbGVCcmVhZGNydW1ic011dGF0aW9uLFxuXHQpLFxuKTtcbiIsImV4cG9ydCBkZWZhdWx0IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHtcXG5cXHRkaXNwbGF5OiBncmlkO1xcblxcdGdhcDogdmFyKC0tZHMtc2l6ZS02KTtcXG59XFxuXFxuW2RhdGEtZXZlbnQtcHJveHldIHtcXG5cXHRjdXJzb3I6IHBvaW50ZXI7XFxufVxcblxcbi5waWUge1xcblxcdG92ZXJmbG93OiB2aXNpYmxlO1xcblxcdGFzcGVjdC1yYXRpbzogdmFyKC0tbXRkc2MtY2hhcnQtYXNwZWN0KTtcXG59XFxuLnBpZSA+IHBhdGgge1xcblxcdGZpbGw6IHZhcigtLWNvbG9yKTtcXG5cXHRvdXRsaW5lOiBub25lO1xcblxcdHN0cm9rZS13aWR0aDogdmFyKC0tbXRkc2MtY2hhcnQtYm9yZGVyLXdpZHRoKTtcXG5cXHRzdHJva2U6IHZhcigtLW10ZHNjLWNoYXJ0LWJvcmRlci1jb2xvcik7XFxuXFx0dHJhbnNmb3JtLW9yaWdpbjogY2VudGVyO1xcblxcdHRyYW5zaXRpb246IHNjYWxlIDAuMnM7XFxuXFx0dmVjdG9yLWVmZmVjdDogbm9uLXNjYWxpbmctc3Ryb2tlO1xcbn1cXG4ucGllID4gcGF0aDpmb2N1cy12aXNpYmxlLFxcbi5waWUgPiBwYXRoOmhvdmVyIHtcXG5cXHRzY2FsZTogMS4wNTtcXG59XFxuXFxuOmhvc3QoW2RhdGEtdmFyaWFudD1cXFwiZG91Z2hudXRcXFwiXSkgLmF4aXMsXFxuOmhvc3QoW2RhdGEtdmFyaWFudD1cXFwicGllXFxcIl0pIC5heGlzIHtcXG5cXHRkaXNwbGF5OiBub25lO1xcbn1cXG5cXG4uYXhpcyB7XFxuXFx0Zm9udC1zaXplOiB2YXIoLS1kcy1ib2R5LXNtLWZvbnQtc2l6ZSk7XFxuXFx0YXNwZWN0LXJhdGlvOiB2YXIoLS1tdGRzYy1jaGFydC1hc3BlY3QpO1xcblxcdGRpc3BsYXk6IGdyaWQ7XFxuXFx0Z2FwOiB2YXIoLS1tdGRzYy1jaGFydC1heGlzLWdhcCk7XFxuXFx0Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBmaXQtY29udGVudCg3ZW0pIDFmcjtcXG5cXHRncmlkLXRlbXBsYXRlLXJvd3M6IDFmciBhdXRvO1xcblxcdGdyaWQtdGVtcGxhdGUtYXJlYXM6XFxuXFx0XFx0XFxcInktYXhpcyBjaGFydFxcXCJcXG5cXHRcXHRcXFwieS1heGlzIHgtYXhpc1xcXCI7XFxufVxcblxcbi5heGlzOjpiZWZvcmUge1xcblxcdGNvbnRlbnQ6IFxcXCJcXFwiO1xcblxcdGdyaWQtYXJlYTogY2hhcnQ7XFxuXFx0Ym9yZGVyLXN0eWxlOiBzb2xpZDtcXG5cXHRib3JkZXItd2lkdGg6IDAgMCB2YXIoLS1kcy1ib3JkZXItd2lkdGgtZGVmYXVsdClcXG5cXHRcXHR2YXIoLS1kcy1ib3JkZXItd2lkdGgtZGVmYXVsdCk7XFxuXFx0Ym9yZGVyLWJvdHRvbS1sZWZ0LXJhZGl1czogdmFyKC0tZHMtYm9yZGVyLXJhZGl1cy1sZyk7XFxufVxcblxcbi5heGlzU3RlcHMsXFxuLmF4aXNTdGVwLFxcbi5heGlzR3JvdXBzLFxcbi5heGlzR3JvdXAge1xcblxcdGJveC1zaXppbmc6IGJvcmRlci1ib3g7XFxuXFx0ZGlzcGxheTogZ3JpZDtcXG5cXHRwb3NpdGlvbjogcmVsYXRpdmU7IC8qIEhlbHAgLmxpbmVDb250YWluZXIgcG9zaXRpb25pbmcgKi9cXG59XFxuXFxuLmF4aXNHcm91cHMge1xcblxcdGdhcDogdmFyKC0tbXRkc2MtY2hhcnQtYXhpcy1nYXApO1xcblxcdGdyaWQtYXJlYTogY2hhcnQgLyBjaGFydCAvIHgtYXhpcyAvIGNoYXJ0O1xcblxcdGdyaWQtdGVtcGxhdGUtcm93czogc3ViZ3JpZDtcXG5cXHRncmlkLWF1dG8tY29sdW1uczogbWlubWF4KDAsIDFmcik7XFxuXFx0cGFkZGluZzogMCB2YXIoLS1tdGRzYy1jaGFydC1heGlzLWdhcCk7XFxuXFx0dGV4dC1hbGlnbjogY2VudGVyO1xcbn1cXG4uYXhpc0dyb3VwIHtcXG5cXHRncmlkLXJvdzogaW5oZXJpdDtcXG5cXHRncmlkLXRlbXBsYXRlOiBpbmhlcml0O1xcbn1cXG4uYXhpc0dyb3VwOjphZnRlciB7XFxuXFx0Y29udGVudDogYXR0cihkYXRhLWxhYmVsKTtcXG59XFxuLmF4aXNTdGVwcyB7XFxuXFx0Z3JpZC1hdXRvLXJvd3M6IDFmcjtcXG5cXHRncmlkLWFyZWE6IGNoYXJ0IC8geS1heGlzIC8gY2hhcnQgLyBjaGFydDtcXG5cXHRncmlkLXRlbXBsYXRlOiAxcHggLyBzdWJncmlkO1xcbn1cXG4uYXhpc1N0ZXAge1xcblxcdGdyaWQtY29sdW1uOiBpbmhlcml0O1xcblxcdGdyaWQtdGVtcGxhdGUtY29sdW1uczogaW5oZXJpdDtcXG5cXHRwbGFjZS1jb250ZW50OiBlbmQgc3RhcnQ7XFxuXFx0dGV4dC1hbGlnbjogcmlnaHQ7XFxufVxcbi5heGlzU3RlcDo6YWZ0ZXIge1xcblxcdGJvcmRlci1ib3R0b206IHZhcigtLW10ZHNjLWNoYXJ0LWF4aXMtYm9yZGVyKTtcXG5cXHRjb250ZW50OiBcXFwiXFxcIjtcXG59XFxuLmF4aXNTdGVwOjpiZWZvcmUge1xcblxcdGNvbnRlbnQ6IGF0dHIoZGF0YS1sYWJlbCk7XFxuXFx0dHJhbnNsYXRlOiAwIDUwJTtcXG59XFxuLmF4aXNTdGVwW2RhdGEtbGFiZWw9XFxcIjBcXFwiXTo6YWZ0ZXIge1xcblxcdG9wYWNpdHk6IDA7IC8qIEhpZGUgMCBsaW5lIGFzIGl0IG92ZXJsYXBwcyB3aXRoIC5heGlzOjpiZWZvcmUgKi9cXG59XFxuXFxuOmhvc3QoW2RhdGEtdmFyaWFudHw9XFxcImNvbHVtblxcXCJdKSAuYXhpc1N0ZXBzLFxcbjpob3N0KFtkYXRhLXZhcmlhbnR8PVxcXCJjb2x1bW5cXFwiXSkgLmF4aXNHcm91cCB7XFxuXFx0ZGlyZWN0aW9uOiBydGw7IC8qIFJldmVyc2Ugb3JkZXJzICovXFxufVxcbjpob3N0KFtkYXRhLXZhcmlhbnR8PVxcXCJjb2x1bW5cXFwiXSkgLmF4aXNTdGVwcyA+ICosXFxuOmhvc3QoW2RhdGEtdmFyaWFudHw9XFxcImNvbHVtblxcXCJdKSAuYXhpc0dyb3VwID4gKiB7XFxuXFx0ZGlyZWN0aW9uOiBsdHI7XFxufVxcbjpob3N0KFtkYXRhLXZhcmlhbnR8PVxcXCJjb2x1bW5cXFwiXSkgLmF4aXNHcm91cHMge1xcblxcdGdyaWQtYXJlYTogY2hhcnQgLyB5LWF4aXMgLyBjaGFydCAvIGNoYXJ0O1xcblxcdGdyaWQtdGVtcGxhdGU6IG5vbmUgLyBzdWJncmlkO1xcblxcdHBhZGRpbmc6IHZhcigtLW10ZHNjLWNoYXJ0LWF4aXMtZ2FwKSAwO1xcblxcdHJvdy1nYXA6IHZhcigtLW10ZHNjLWNoYXJ0LWF4aXMtZ2FwKTtcXG5cXHR0ZXh0LWFsaWduOiByaWdodDtcXG59XFxuOmhvc3QoW2RhdGEtdmFyaWFudHw9XFxcImNvbHVtblxcXCJdKSAuYXhpc0dyb3VwOjphZnRlciB7XFxuXFx0YWxpZ24tc2VsZjogY2VudGVyOyAvKiBTaW5jZSB0ZXh0LWFsaWduIGRvZXMgbm90IHdvcmsgdmVydGljYWxseSAqL1xcbn1cXG46aG9zdChbZGF0YS12YXJpYW50fD1cXFwiY29sdW1uXFxcIl0pIC5heGlzR3JvdXAge1xcblxcdGdyaWQtY29sdW1uOiBpbmhlcml0O1xcblxcdGdyaWQtcm93OiBhdXRvO1xcbn1cXG46aG9zdChbZGF0YS12YXJpYW50fD1cXFwiY29sdW1uXFxcIl0pIC5heGlzU3RlcHMge1xcblxcdGdyaWQtYXV0by1jb2x1bW5zOiAxZnI7XFxuXFx0Z3JpZC1hcmVhOiBjaGFydCAvIGNoYXJ0IC8geC1heGlzIC8gY2hhcnQ7XFxuXFx0Z3JpZC10ZW1wbGF0ZTogc3ViZ3JpZCAvIDFweDtcXG59XFxuOmhvc3QoW2RhdGEtdmFyaWFudHw9XFxcImNvbHVtblxcXCJdKSAuYXhpc1N0ZXAge1xcblxcdGdyaWQtcm93OiBpbmhlcml0O1xcblxcdGdyaWQtY29sdW1uOiBhdXRvO1xcblxcdGdyaWQtdGVtcGxhdGUtcm93czogaW5oZXJpdDtcXG5cXHRncmlkLXRlbXBsYXRlLWNvbHVtbnM6IG5vbmU7XFxufVxcbjpob3N0KFtkYXRhLXZhcmlhbnR8PVxcXCJjb2x1bW5cXFwiXSkgLmF4aXNTdGVwOjphZnRlciB7XFxuXFx0b3JkZXI6IC0xO1xcblxcdGJvcmRlci1sZWZ0OiB2YXIoLS1tdGRzYy1jaGFydC1heGlzLWJvcmRlcik7XFxuXFx0Ym9yZGVyLWJvdHRvbTogMDtcXG59XFxuOmhvc3QoW2RhdGEtdmFyaWFudHw9XFxcImNvbHVtblxcXCJdKSAuYXhpc1N0ZXA6OmJlZm9yZSB7XFxuXFx0dHJhbnNsYXRlOiAtNTAlIDA7XFxufVxcblxcbi5heGlzR3JvdXBDb250ZW50IHtcXG5cXHRkaXNwbGF5OiBmbGV4O1xcbn1cXG46aG9zdChbZGF0YS12YXJpYW50PVxcXCJiYXItc3RhY2tlZFxcXCJdKSAuYXhpc0dyb3VwQ29udGVudCB7XFxuXFx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbi1yZXZlcnNlO1xcbn1cXG46aG9zdChbZGF0YS12YXJpYW50PVxcXCJjb2x1bW5cXFwiXSkgLmF4aXNHcm91cENvbnRlbnQge1xcblxcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxufVxcbjpob3N0KFtkYXRhLXZhcmlhbnQ9XFxcImNvbHVtbi1zdGFja2VkXFxcIl0pIC5heGlzR3JvdXBDb250ZW50IHtcXG5cXHRmbGV4LWRpcmVjdGlvbjogcm93O1xcbn1cXG5cXG4uYmFyIHtcXG5cXHQtLXNpemU6IGNhbGModmFyKC0tdmFsdWUpIC8gdmFyKC0tdG90YWwsIDEpICogMTAwJSk7XFxuXFx0YWxpZ24tc2VsZjogZW5kO1xcblxcdGJhY2tncm91bmQ6IHZhcigtLWNvbG9yKTtcXG5cXHRib3JkZXI6IHZhcigtLW10ZHNjLWNoYXJ0LWJvcmRlci1jb2xvcikgc29saWQgdmFyKC0tbXRkc2MtY2hhcnQtYm9yZGVyLXdpZHRoKTtcXG5cXHRib3JkZXItcmFkaXVzOiB2YXIoLS1kcy1ib3JkZXItcmFkaXVzLXNtKSB2YXIoLS1kcy1ib3JkZXItcmFkaXVzLXNtKSAwIDA7XFxuXFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcXG5cXHRoZWlnaHQ6IHZhcigtLXNpemUpO1xcblxcdHdpZHRoOiAxMDAlO1xcbn1cXG4uYmFyOmZvY3VzLXZpc2libGUsXFxuLmxpbmVQb2ludDpmb2N1cy12aXNpYmxlIHtcXG5cXHRib3gtc2hhZG93OiB2YXIoLS1kc2MtZm9jdXMtYm94U2hhZG93KTtcXG5cXHRvdXRsaW5lOiB2YXIoLS1kc2MtZm9jdXMtb3V0bGluZSk7XFxuXFx0b3V0bGluZS1vZmZzZXQ6IHZhcigtLWRzLWJvcmRlci13aWR0aC1mb2N1cyk7XFxuXFx0ei1pbmRleDogMjsgLyogei1pbmRleCB0byBwbGFjZSBvbiB0b3Agd2hlbiBvdXRsaW5lZCAqL1xcbn1cXG5cXG46aG9zdChbZGF0YS12YXJpYW50fD1cXFwiY29sdW1uXFxcIl0pIC5iYXIge1xcblxcdGJvcmRlci1yYWRpdXM6IDAgdmFyKC0tZHMtYm9yZGVyLXJhZGl1cy1zbSkgdmFyKC0tZHMtYm9yZGVyLXJhZGl1cy1zbSkgMDtcXG5cXHR3aWR0aDogdmFyKC0tc2l6ZSk7XFxuXFx0aGVpZ2h0OiAxMDAlO1xcblxcdGFsaWduLXNlbGY6IHN0YXJ0O1xcbn1cXG5cXG4vKiBQcmV2ZW50IGRvdWJsZSBib3JkZXIgLSB1c2luZyBtYXJnaW4gdG8gc2VlIGJvcmRlciBhcm91bmQgYmFycyAqL1xcbi8qIFByZXZlbnQgZG91YmxlIGJvcmRlciAtIHVzaW5nIGJvcmRlciB0byBhdm9pZCBhZmZlY3Rpbmcgc2l6ZSAqL1xcbjpob3N0KDpub3QoW2RhdGEtdmFyaWFudF0pKSAuYmFyICsgLmJhcixcXG46aG9zdChbZGF0YS12YXJpYW50PVxcXCJiYXJcXFwiXSkgLmJhciArIC5iYXIge1xcblxcdG1hcmdpbi1sZWZ0OiAtMXB4O1xcbn1cXG46aG9zdChbZGF0YS12YXJpYW50PVxcXCJiYXItc3RhY2tlZFxcXCJdKSAuYmFyOm5vdCg6bGFzdC1jaGlsZCkge1xcblxcdGJvcmRlci1yYWRpdXM6IDA7XFxufVxcbjpob3N0KFtkYXRhLXZhcmlhbnQ9XFxcImJhci1zdGFja2VkXFxcIl0pIC5iYXIgKyAuYmFyIHtcXG5cXHRib3JkZXItYm90dG9tOiBub25lO1xcbn1cXG46aG9zdChbZGF0YS12YXJpYW50PVxcXCJjb2x1bW5cXFwiXSkgLmJhciArIC5iYXIge1xcblxcdG1hcmdpbi10b3A6IC0xcHg7XFxufVxcbjpob3N0KFtkYXRhLXZhcmlhbnQ9XFxcImNvbHVtbi1zdGFja2VkXFxcIl0pIC5iYXI6bm90KDpsYXN0LWNoaWxkKSB7XFxuXFx0Ym9yZGVyLXJhZGl1czogMDtcXG59XFxuOmhvc3QoW2RhdGEtdmFyaWFudD1cXFwiY29sdW1uLXN0YWNrZWRcXFwiXSkgLmJhciArIC5iYXIge1xcblxcdGJvcmRlci1sZWZ0OiBub25lO1xcbn1cXG5cXG4ubGluZUNvbnRhaW5lciB7XFxuXFx0YWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7XFxuXFx0ZGlzcGxheTogZmxleDtcXG5cXHRqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47XFxuXFx0cG9pbnRlci1ldmVudHM6IG5vbmU7XFxuXFx0Z3JpZC1yb3c6IGNoYXJ0O1xcbn1cXG4ubGluZUNvbnRhaW5lciA+IHN2ZyxcXG4ubGluZUNvbnRhaW5lciB7XFxuXFx0cG9zaXRpb246IGFic29sdXRlO1xcblxcdHdpZHRoOiAxMDAlO1xcblxcdGhlaWdodDogMTAwJTtcXG59XFxuLmxpbmVDb250YWluZXIgPiBzdmcge1xcblxcdG92ZXJmbG93OiBjbGlwIHZpc2libGU7XFxufVxcbi5saW5lQ29udGFpbmVyID4gZGl2W3JvbGU9XFxcImxpc3RpdGVtXFxcIl0ge1xcblxcdGRpc3BsYXk6IGNvbnRlbnRzO1xcbn1cXG5cXG46aG9zdChbZGF0YS12YXJpYW50fD1cXFwibGluZVxcXCJdKSAuYXhpc0dyb3VwcyxcXG46aG9zdChbZGF0YS12YXJpYW50fD1cXFwiYXJlYVxcXCJdKSAuYXhpc0dyb3VwcyB7XFxuXFx0cGFkZGluZzogMDtcXG59XFxuXFxuLmxpbmUsXFxuLmxpbmVTaGFkZSB7XFxuXFx0ZmlsbDogbm9uZTtcXG5cXHRzdHJva2U6IHZhcigtLWNvbG9yKTtcXG5cXHRzdHJva2UtbGluZWpvaW46IHJvdW5kO1xcblxcdHN0cm9rZS1saW5lY2FwOiByb3VuZDtcXG5cXHRzdHJva2Utd2lkdGg6IDEuNTtcXG5cXHR2ZWN0b3ItZWZmZWN0OiBub24tc2NhbGluZy1zdHJva2U7XFxufVxcblxcbi5saW5lU2hhZGUge1xcblxcdHN0cm9rZTogbm9uZTtcXG5cXHRmaWxsOiB2YXIoLS1jb2xvcik7XFxuXFx0b3BhY2l0eTogMC4zO1xcblxcdG1hc2s6IGxpbmVhci1ncmFkaWVudCh0byBib3R0b20sIGJsYWNrLCB0cmFuc3BhcmVudCk7XFxufVxcblxcbi5saW5lLFxcbi5saW5lUG9pbnQsXFxuOmhvc3Q6aGFzKC5saW5lUG9pbnQpIC5sZWdlbmQ6OmJlZm9yZSB7XFxuXFx0ZmlsdGVyOiBicmlnaHRuZXNzKDAuOCkgc2F0dXJhdGUoMik7IC8qIEVuc3VyZSBtb3JlIGNvbnRyYXN0IGZvciBsaW5lIGNvbG9ycyAqL1xcbn1cXG5cXG4ubGluZVBvaW50IHtcXG5cXHQtLXNpemU6IHZhcigtLWRzLXNpemUtMyk7XFxuXFx0YmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3IpO1xcblxcdGJvcmRlci1yYWRpdXM6IHZhcigtLWRzLWJvcmRlci1yYWRpdXMtZnVsbCk7XFxuXFx0Ym9yZGVyOiB2YXIoLS1tdGRzYy1jaGFydC1ib3JkZXItd2lkdGgpIHNvbGlkIHZhcigtLW10ZHNjLWNoYXJ0LWJvcmRlci1jb2xvcik7XFxuXFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcXG5cXHRmaWx0ZXI6IGJyaWdodG5lc3MoMC44KSBzYXR1cmF0ZSgyKTtcXG5cXHRoZWlnaHQ6IHZhcigtLXNpemUpO1xcblxcdG1hcmdpbjogY2FsYyh2YXIoLS1zaXplKSAvIC0yKTtcXG5cXHRwYWRkaW5nOiAwO1xcblxcdHBvaW50ZXItZXZlbnRzOiBhbGw7XFxuXFx0cG9zaXRpb246IHJlbGF0aXZlO1xcblxcdHRvcDogY2FsYygxMDAlIC0gdmFyKC0tdmFsdWUpIC8gdmFyKC0tdG90YWwsIDEpICogMTAwJSk7XFxuXFx0dHJhbnNpdGlvbjogc2NhbGUgMC4ycztcXG5cXHR3aWR0aDogdmFyKC0tc2l6ZSk7XFxuXFx0ei1pbmRleDogMjtcXG59XFxuLmxpbmVQb2ludDpmb2N1cy12aXNpYmxlLFxcbi5saW5lUG9pbnQ6aG92ZXIge1xcblxcdHNjYWxlOiAxLjM7XFxufVxcbi5saW5lUG9pbnQ6OmJlZm9yZSB7XFxuXFx0Y29udGVudDogXFxcIlxcXCI7XFxuXFx0aW5zZXQ6IGNhbGModmFyKC0tZHMtc2l6ZS0yKSAqIC0xKTsgLyogSW5jcmVhc2UgY2xpY2sgc3VyZmFjZSAqL1xcblxcdHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG59XFxuXFxuLmxlZ2VuZHMge1xcblxcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuXFx0ZGlzcGxheTogZmxleDtcXG5cXHRmbGV4LXdyYXA6IHdyYXA7XFxuXFx0Z2FwOiB2YXIoLS1kcy1zaXplLTIpIHZhcigtLWRzLXNpemUtNSk7XFxuXFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxufVxcbi5sZWdlbmQge1xcblxcdGRpc3BsYXk6IGZsZXg7XFxuXFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cXHRnYXA6IHZhcigtLWRzLXNpemUtMik7XFxufVxcbi5sZWdlbmQ6OmJlZm9yZSB7XFxuXFx0YmFja2dyb3VuZDogdmFyKC0tY29sb3IpO1xcblxcdGJvcmRlci1yYWRpdXM6IHZhcigtLWRzLWJvcmRlci1yYWRpdXMtZnVsbCk7XFxuXFx0Ym9yZGVyOiB2YXIoLS1tdGRzYy1jaGFydC1ib3JkZXItY29sb3IpIHNvbGlkIHZhcigtLW10ZHNjLWNoYXJ0LWJvcmRlci13aWR0aCk7XFxuXFx0Ym94LXNpemluZzogYm9yZGVyLWJveDtcXG5cXHRjb250ZW50OiBcXFwiXFxcIjtcXG5cXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuXFx0aGVpZ2h0OiB2YXIoLS1kcy1zaXplLTUpO1xcblxcdHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7XFxuXFx0d2lkdGg6IHZhcigtLWRzLXNpemUtNSk7XFxufVxcblwiIiwiaW1wb3J0IHsgdGFnIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQgdHlwZSB7IENoYXJ0RGF0YSB9IGZyb20gXCIuL2NoYXJ0LWVsZW1lbnRcIjtcblxudHlwZSBDb25maWcgPSB7IHR5cGU6IHN0cmluZyB9O1xuXG5leHBvcnQgZnVuY3Rpb24gdG9BeGlzKGRhdGE6IENoYXJ0RGF0YSwgeyB0eXBlIH06IENvbmZpZykge1xuXHRjb25zdCBpc1N0YWNrZWQgPSB0eXBlID09PSBcInN0YWNrZWRcIjtcblx0Y29uc3QgbWF4ID0gZGF0YVswXS5yZWR1Y2UoKGFjYywgXywgaW5kZXgpID0+IHtcblx0XHRjb25zdCBhbGwgPSBkYXRhLm1hcCgocm93KSA9PiByb3dbaW5kZXhdLm51bWJlcik7XG5cdFx0Y29uc3Qgc3VtID0gYWxsLnJlZHVjZSgoYWNjLCBudW0pID0+IGFjYyArIG51bSwgMCk7XG5cdFx0cmV0dXJuIE1hdGgubWF4KGFjYywgLi4uKGlzU3RhY2tlZCA/IFtzdW1dIDogYWxsKSk7XG5cdH0sIDApO1xuXG5cdGNvbnN0IGRpZ2l0cyA9IDEwICoqIChgJHt+fm1heH1gLmxlbmd0aCAtIDEpOyAvLyBHZXQgYW1vdW50IG9mIGRpZ2l0cyBpbiB0b3RhbCBudW1iZXJcblx0Y29uc3Qgc3RlcCA9IG1heCAvIGRpZ2l0cyA8IDUgPyBkaWdpdHMgLyAyIDogZGlnaXRzOyAvLyBJZiB3ZSBnZXQgbGVzcyB0aGFuIDUgc3RlcHMsIG1ha2Ugc21hbGxlciBzdGVwc1xuXHRjb25zdCB0b3RhbCA9IE1hdGguY2VpbChtYXggLyBzdGVwKSAqIHN0ZXA7XG5cdGNvbnN0IGdyb3VwcyA9IHRhZyhcImRpdlwiLCB7IGNsYXNzOiBcImF4aXNHcm91cHNcIiB9KTtcblx0Y29uc3Qgc3RlcHMgPSB0YWcoXCJkaXZcIik7XG5cblx0c3RlcHMuY2xhc3NMaXN0LmFkZChcImF4aXNTdGVwc1wiKTtcblx0c3RlcHMuYXBwZW5kKFxuXHRcdC4uLkFycmF5LmZyb20oeyBsZW5ndGg6IHRvdGFsIC8gc3RlcCArIDEgfSwgKF8sIGkpID0+IGdldE51bShzdGVwICogaSkpXG5cdFx0XHQucmV2ZXJzZSgpXG5cdFx0XHQubWFwKChudW0pID0+IHRhZyhcImRpdlwiLCB7IGNsYXNzOiBcImF4aXNTdGVwXCIsIFwiZGF0YS1sYWJlbFwiOiBudW0gfSkpLFxuXHQpO1xuXG5cdGNvbnN0IGF4aXMgPSB0YWcoXCJkaXZcIiwge1xuXHRcdFwiYXJpYS1sYWJlbFwiOiBkYXRhWzBdWzBdLnZhbHVlIHx8IG51bGwsXG5cdFx0Y2xhc3M6IFwiYXhpc1wiLFxuXHRcdHJvbGU6IFwiZmlndXJlXCIsXG5cdH0pO1xuXHRheGlzLnN0eWxlLnNldFByb3BlcnR5KFwiLS1ncm91cHNcIiwgYCR7ZGF0YS5sZW5ndGggLSAxfWApO1xuXHRheGlzLnN0eWxlLnNldFByb3BlcnR5KFwiLS10b3RhbFwiLCBgJHt0b3RhbH1gKTtcblx0YXhpcy5hcHBlbmQoc3RlcHMsIGdyb3Vwcyk7XG5cblx0cmV0dXJuIHsgdG90YWwsIGdyb3VwcywgYXhpcyB9O1xufVxuXG5jb25zdCBnZXROdW0gPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoKS5mb3JtYXQ7XG4iLCJpbXBvcnQgeyB0YWcgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnREYXRhIH0gZnJvbSBcIi4vY2hhcnQtZWxlbWVudFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gdG9CYXJzKGRhdGE6IENoYXJ0RGF0YSkge1xuXHRyZXR1cm4gZGF0YVswXS5zbGljZSgxKS5tYXAoKHsgdmFsdWUsIGV2ZW50IH0sIGluZGV4KSA9PiB7XG5cdFx0Y29uc3QgZ3JvdXAgPSB0YWcoXCJkaXZcIiwgeyBjbGFzczogXCJheGlzR3JvdXBcIiwgXCJkYXRhLWxhYmVsXCI6IHZhbHVlIH0pO1xuXHRcdGNvbnN0IGNvbnRlbnQgPSBncm91cC5hcHBlbmRDaGlsZChcblx0XHRcdHRhZyhcImRpdlwiLCB7IGNsYXNzOiBcImF4aXNHcm91cENvbnRlbnRcIiB9KSxcblx0XHQpO1xuXG5cdFx0ZGF0YVxuXHRcdFx0LnNsaWNlKDEpXG5cdFx0XHQubWFwKCh2YWx1ZXMpID0+IHZhbHVlc1tpbmRleCArIDFdKVxuXHRcdFx0Lm1hcCgoeyB0b29sdGlwLCBzdHlsZSwgbnVtYmVyIH0pID0+XG5cdFx0XHRcdGNvbnRlbnQuYXBwZW5kQ2hpbGQoXG5cdFx0XHRcdFx0dGFnKFwiZGl2XCIsIHtcblx0XHRcdFx0XHRcdFwiYXJpYS1sYWJlbFwiOiB0b29sdGlwLFxuXHRcdFx0XHRcdFx0XCJkYXRhLWV2ZW50XCI6IGV2ZW50LFxuXHRcdFx0XHRcdFx0Y2xhc3M6IFwiYmFyXCIsXG5cdFx0XHRcdFx0XHRyb2xlOiBcImltZ1wiLFxuXHRcdFx0XHRcdFx0c3R5bGU6IGAke3N0eWxlfTsgLS12YWx1ZTogJHtudW1iZXJ9YCxcblx0XHRcdFx0XHRcdHRhYmluZGV4OiBcIjBcIixcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0KSxcblx0XHRcdCk7XG5cdFx0cmV0dXJuIGdyb3VwO1xuXHR9KTtcbn1cbiIsImltcG9ydCB7IGF0dHIsIHRhZyB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IHR5cGUgeyBDaGFydERhdGEgfSBmcm9tIFwiLi9jaGFydC1lbGVtZW50XCI7XG5cbnR5cGUgQ29uZmlnID0ge1xuXHR0b3RhbDogbnVtYmVyO1xuXHR0eXBlOiBzdHJpbmc7XG5cdHZhcmlhbnQ6IHN0cmluZztcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiB0b0xpbmVzKGRhdGE6IENoYXJ0RGF0YSwgeyB0b3RhbCwgdmFyaWFudCB9OiBDb25maWcpIHtcblx0Y29uc3Qgc21vb3RoaW5nID0gMDsgLy8gTnVtYmVyLnBhcnNlRmxvYXQodHlwZSB8fCBcIjEwXCIpIHx8IDA7XG5cdGNvbnN0IGdyb3VwID0gdGFnKFwiZGl2XCIsIHsgY2xhc3M6IFwiYXhpc0dyb3VwXCIgfSk7XG5cdGRhdGEuc2xpY2UoMSkuZm9yRWFjaCgoWywgLi4udmFsdWVzXSkgPT4ge1xuXHRcdGNvbnN0IGxpbmVDb250YWluZXIgPSB0YWcoXCJkaXZcIiwge1xuXHRcdFx0Y2xhc3M6IGBsaW5lQ29udGFpbmVyYCxcblx0XHRcdHJvbGU6IFwibGlzdFwiLFxuXHRcdFx0c3R5bGU6IHZhbHVlc1swXS5zdHlsZSxcblx0XHR9KTtcblxuXHRcdGNvbnN0IHBhdGhEZWZpbnRpb24gPSB0b1BhdGgoXG5cdFx0XHR2YWx1ZXMubWFwKCh7IG51bWJlciB9LCBpbmRleCwgeyBsZW5ndGggfSkgPT4gW1xuXHRcdFx0XHQoMTAwIC8gKGxlbmd0aCAtIDEpKSAqIGluZGV4LFxuXHRcdFx0XHQxMDAgLSAobnVtYmVyIC8gdG90YWwpICogMTAwLFxuXHRcdFx0XSksXG5cdFx0XHRzbW9vdGhpbmcgLyAxMDAsXG5cdFx0KTtcblxuXHRcdGNvbnN0IGxpbmUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLCBcInN2Z1wiKTtcblx0XHRhdHRyKGxpbmUsIFwiYXJpYS1oaWRkZW5cIiwgXCJ0cnVlXCIpO1xuXHRcdGF0dHIobGluZSwgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCIsIFwibm9uZVwiKTtcblx0XHRhdHRyKGxpbmUsIFwidmlld0JveFwiLCBcIjAgMCAxMDAgMTAwXCIpO1xuXG5cdFx0Y29uc3QgcGF0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwicGF0aFwiKTtcblx0XHRhdHRyKHBhdGgsIFwiY2xhc3NcIiwgXCJsaW5lXCIpO1xuXHRcdGF0dHIocGF0aCwgXCJkXCIsIHBhdGhEZWZpbnRpb24pO1xuXHRcdGF0dHIocGF0aCwgXCJmaWxsXCIsIFwibm9uZVwiKTtcblx0XHRhdHRyKHBhdGgsIFwic3Ryb2tlXCIsIFwiY3VycmVudENvbG9yXCIpO1xuXG5cdFx0aWYgKHZhcmlhbnQgPT09IFwiYXJlYVwiKSB7XG5cdFx0XHRjb25zdCBsaW5lU2hhZGUgPSBwYXRoLmNsb25lTm9kZSh0cnVlKSBhcyBTVkdQYXRoRWxlbWVudDtcblx0XHRcdGF0dHIobGluZVNoYWRlLCBcImRcIiwgYE0tMTAwLDEwMCBMJHtwYXRoRGVmaW50aW9uLnNsaWNlKDEpfUwyMDAsMTAwYCk7XG5cdFx0XHRhdHRyKGxpbmVTaGFkZSwgXCJjbGFzc1wiLCBcImxpbmVTaGFkZVwiKTtcblx0XHRcdGxpbmUuYXBwZW5kKGxpbmVTaGFkZSk7XG5cdFx0fVxuXG5cdFx0dmFsdWVzLmZvckVhY2goKHsgbnVtYmVyLCB0b29sdGlwLCBldmVudCB9KSA9PiB7XG5cdFx0XHRjb25zdCBjb2wgPSB0YWcoXCJkaXZcIiwgeyByb2xlOiBcImxpc3RpdGVtXCIgfSk7XG5cdFx0XHRjb2wuYXBwZW5kQ2hpbGQoXG5cdFx0XHRcdHRhZyhcImRpdlwiLCB7XG5cdFx0XHRcdFx0XCJhcmlhLWxhYmVsXCI6IHRvb2x0aXAsXG5cdFx0XHRcdFx0XCJkYXRhLWV2ZW50XCI6IGV2ZW50LFxuXHRcdFx0XHRcdHRhYmluZGV4OiBcIjBcIixcblx0XHRcdFx0XHRjbGFzczogXCJsaW5lUG9pbnRcIixcblx0XHRcdFx0XHRyb2xlOiBcImltZ1wiLFxuXHRcdFx0XHRcdHN0eWxlOiBgLS12YWx1ZTogJHtudW1iZXJ9YCxcblx0XHRcdFx0fSksXG5cdFx0XHQpO1xuXHRcdFx0bGluZUNvbnRhaW5lci5hcHBlbmQoY29sKTtcblx0XHR9KTtcblxuXHRcdGxpbmVDb250YWluZXIuYXBwZW5kQ2hpbGQobGluZSkuYXBwZW5kKHBhdGgpO1xuXHRcdGdyb3VwLmFwcGVuZChsaW5lQ29udGFpbmVyKTtcblx0fSk7XG5cdHJldHVybiBncm91cDtcbn1cblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9vYnNlcnZhYmxlaHEuY29tL0BuZHJ5L3Ntb290aC1hLXN2Zy1wYXRoLXdpdGgtY3ViaWMtYmV6aWVyLWN1cnZlc1xuY29uc3QgdG9QYXRoID0gKHBvaW50czogbnVtYmVyW11bXSwgczogbnVtYmVyKSA9PlxuXHRwb2ludHMubWFwKChbeCwgeV0sIGksIGEpID0+IChpID8gc21vb3RoKGksIGEsIHMpIDogYE0ke3h9LCR7eX1gKSkuam9pbihcIiBcIik7XG5jb25zdCBhZGQgPSAoW2F4LCBheV06IG51bWJlcltdLCBbYngsIGJ5XTogbnVtYmVyW10pID0+IFtheCArIGJ4LCBheSArIGJ5XTtcbmNvbnN0IHN1YiA9IChbYXgsIGF5XTogbnVtYmVyW10sIFtieCwgYnldOiBudW1iZXJbXSkgPT4gW2F4IC0gYngsIGF5IC0gYnldO1xuY29uc3Qgc2NhbGUgPSAoczogbnVtYmVyLCBbeCwgeV06IG51bWJlcltdKSA9PiBbcyAqIHgsIHMgKiB5XTtcbmNvbnN0IHNtb290aCA9IChpOiBudW1iZXIsIGFsbDogbnVtYmVyW11bXSwgc21vb3RoOiBudW1iZXIpID0+IHtcblx0Y29uc3Qgc3RhcnQgPSBhbGxbaSAtIDFdO1xuXHRjb25zdCBlbmQgPSBhbGxbaV07XG5cdGNvbnN0IFtjc1gsIGNzWV0gPSBhZGQoc3RhcnQsIHNjYWxlKHNtb290aCwgc3ViKGVuZCwgYWxsW2kgLSAyXSB8fCBzdGFydCkpKTsgLy8gc3RhcnQgY29udHJvbCBwb2ludFxuXHRjb25zdCBbY2VYLCBjZVldID0gYWRkKGVuZCwgc2NhbGUoc21vb3RoLCBzdWIoc3RhcnQsIGFsbFtpICsgMV0gfHwgZW5kKSkpOyAvLyBlbmQgY29udHJvbCBwb2ludFxuXHRyZXR1cm4gYEMgJHtjc1h9LCR7Y3NZfSAke2NlWH0sJHtjZVl9ICR7ZW5kWzBdfSwke2VuZFsxXX1gO1xufTtcbiIsImltcG9ydCB7IGF0dHIgfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB0eXBlIHsgQ2hhcnREYXRhIH0gZnJvbSBcIi4vY2hhcnQtZWxlbWVudFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gdG9QaWVzKGRhdGE6IENoYXJ0RGF0YSwgeyB2YXJpYW50IH06IHsgdmFyaWFudDogc3RyaW5nIH0pIHtcblx0Y29uc3QgcGllID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiwgXCJzdmdcIik7XG5cdGF0dHIocGllLCBcImNsYXNzXCIsIFwicGllXCIpO1xuXHRhdHRyKHBpZSwgXCJ2aWV3Qm94XCIsIFwiMCAwIDEwMCAxMDBcIik7XG5cblx0bGV0IG9mZnNldCA9IDA7XG5cdGNvbnN0IHJhZGl1cyA9IDUwO1xuXHRjb25zdCBpbm5lciA9IHZhcmlhbnQgPT09IFwiZG91Z2hudXRcIiA/IDI1IDogMDtcblx0Y29uc3QgdG90YWwgPSBkYXRhLnNsaWNlKDEpLnJlZHVjZSgodG90LCBbLCB0ZF0pID0+IHRvdCArIHRkLm51bWJlciwgMCk7XG5cblx0ZGF0YS5zbGljZSgxKS5mb3JFYWNoKChbLCB7IHRvb2x0aXAsIG51bWJlciwgZXZlbnQsIHN0eWxlIH1dKSA9PiB7XG5cdFx0Y29uc3QgcGF0aCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsIFwicGF0aFwiKTtcblx0XHRjb25zdCBzdGFydCA9IG9mZnNldCAvIHRvdGFsO1xuXHRcdG9mZnNldCArPSBudW1iZXI7XG5cdFx0Y29uc3QgZW5kID0gb2Zmc2V0IC8gdG90YWw7XG5cdFx0Y29uc3QgbGFyZ2VBcmMgPSBlbmQgLSBzdGFydCA+IDAuNSA/IDEgOiAwO1xuXHRcdGNvbnN0IGEwID0gMiAqIE1hdGguUEkgKiAoc3RhcnQgLSAwLjI1KTtcblx0XHRjb25zdCBhMSA9IDIgKiBNYXRoLlBJICogKGVuZCAtIDAuMjUpO1xuXHRcdGNvbnN0IHgwID0gTWF0aC5jb3MoYTApO1xuXHRcdGNvbnN0IHkwID0gTWF0aC5zaW4oYTApO1xuXHRcdGNvbnN0IHgxID0gTWF0aC5jb3MoYTEpO1xuXHRcdGNvbnN0IHkxID0gTWF0aC5zaW4oYTEpO1xuXHRcdGNvbnN0IGQgPSBgTSAke3JhZGl1cyArIGlubmVyICogeDB9ICR7cmFkaXVzICsgaW5uZXIgKiB5MH0gTCAke3JhZGl1cyArIHJhZGl1cyAqIHgwfSAke3JhZGl1cyArIHJhZGl1cyAqIHkwfSBBICR7cmFkaXVzfSAke3JhZGl1c30gMCAke2xhcmdlQXJjfSAxICR7cmFkaXVzICsgcmFkaXVzICogeDF9ICR7cmFkaXVzICsgcmFkaXVzICogeTF9IEwgJHtyYWRpdXMgKyBpbm5lciAqIHgxfSAke3JhZGl1cyArIGlubmVyICogeTF9IEEgJHtpbm5lcn0gJHtpbm5lcn0gMCAke2xhcmdlQXJjfSAwICR7cmFkaXVzICsgaW5uZXIgKiB4MH0gJHtyYWRpdXMgKyBpbm5lciAqIHkwfWA7XG5cblx0XHRhdHRyKHBhdGgsIFwiYXJpYS1sYWJlbFwiLCB0b29sdGlwKTtcblx0XHRhdHRyKHBhdGgsIFwiZGF0YS1ldmVudFwiLCBldmVudCk7XG5cdFx0YXR0cihwYXRoLCBcInN0eWxlXCIsIHN0eWxlKTtcblx0XHRhdHRyKHBhdGgsIFwiZFwiLCBkKTtcblx0XHRhdHRyKHBhdGgsIFwicm9sZVwiLCBcImltZ1wiKTtcblx0XHRhdHRyKHBhdGgsIFwidGFiaW5kZXhcIiwgXCIwXCIpO1xuXHRcdHBpZS5hcHBlbmRDaGlsZChwYXRoKTtcblx0fSk7XG5cdHJldHVybiBwaWU7XG59XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgSVNfQlJPV1NFUiwgTVREU0VsZW1lbnQsIG9mZiwgb24sIHRhZyB9IGZyb20gXCIuLi91dGlsc1wiO1xuaW1wb3J0IGNzcyBmcm9tIFwiLi9jaGFydC5jc3M/cmF3XCI7XG5pbXBvcnQgeyB0b0F4aXMgfSBmcm9tIFwiLi9jaGFydC1heGlzXCI7XG5pbXBvcnQgeyB0b0JhcnMgfSBmcm9tIFwiLi9jaGFydC1iYXJzXCI7XG5pbXBvcnQgeyB0b0xpbmVzIH0gZnJvbSBcIi4vY2hhcnQtbGluZXNcIjtcbmltcG9ydCB7IHRvUGllcyB9IGZyb20gXCIuL2NoYXJ0LXBpZXNcIjtcblxuZXhwb3J0IHR5cGUgQ2hhcnREYXRhID0gUmV0dXJuVHlwZTx0eXBlb2YgdG9EYXRhPjtcblxuY29uc3QgRVZFTlRTID0gXCJjbGljayxrZXlkb3duLG1vdXNlbW92ZSxtb3VzZW91dFwiO1xuY29uc3QgVE9PTFRJUF9JRCA9IFwibXRkcy1jaGFydC10b29sdGlwXCI7XG5jb25zdCBUT09MVElQID0gSVNfQlJPV1NFUlxuXHQ/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFRPT0xUSVBfSUQpIHx8XG5cdFx0dGFnKFwiZGl2XCIsIHsgY2xhc3M6IHN0eWxlcy5fdG9vbHRpcCwgaWQ6IFRPT0xUSVBfSUQsIGhpZGRlbjogXCJcIiB9KVxuXHQ6IG51bGw7XG5leHBvcnQgY2xhc3MgTVREU0NoYXJ0IGV4dGVuZHMgTVREU0VsZW1lbnQge1xuXHRfb2JzZXJ2ZXI/OiBNdXRhdGlvbk9ic2VydmVyOyAvLyBVc2luZyB1bmRlcnNjb3JlIGluc3RlYWQgb2YgIyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblxuXHRzdGF0aWMgZ2V0IG9ic2VydmVkQXR0cmlidXRlcygpIHtcblx0XHRyZXR1cm4gW1wiZGF0YS12YXJpYW50XCJdOyAvLyBVc2luZyBFUzIwMTUgc3ludGF4IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuXHR9XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcblx0fVxuXHRjb25uZWN0ZWRDYWxsYmFjaygpIHtcblx0XHR0aGlzLl9vYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKFxuXHRcdFx0dGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2suYmluZCh0aGlzKSxcblx0XHQpO1xuXHRcdHRoaXMuX29ic2VydmVyLm9ic2VydmUodGhpcywge1xuXHRcdFx0YXR0cmlidXRlRmlsdGVyOiBbXCJkYXRhLXRvb2x0aXBcIl0sXG5cdFx0XHRhdHRyaWJ1dGVzOiB0cnVlLFxuXHRcdFx0Y2hhcmFjdGVyRGF0YTogdHJ1ZSxcblx0XHRcdGNoaWxkTGlzdDogdHJ1ZSxcblx0XHRcdHN1YnRyZWU6IHRydWUsXG5cdFx0fSk7XG5cdFx0dGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTsgLy8gSW5pdGlhbCBzZXR1cFxuXHRcdG9uKHRoaXMsIEVWRU5UUywgdGhpcyk7XG5cdH1cblx0ZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG5cdFx0aWYgKFRPT0xUSVApIFRPT0xUSVAuaGlkZGVuID0gdHJ1ZTtcblx0XHRvZmYodGhpcywgRVZFTlRTLCB0aGlzKTtcblx0XHR0aGlzLl9vYnNlcnZlcj8uZGlzY29ubmVjdCgpO1xuXHRcdHRoaXMuX29ic2VydmVyID0gdW5kZWZpbmVkO1xuXHR9XG5cdGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcblx0XHRBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdD8uY2hpbGRyZW4gfHwgW10pLm1hcCgoZWwpID0+IGVsLnJlbW92ZSgpKTsgLy8gQ2xlYXIgc2hhZG93Um9vdFxuXG5cdFx0Y29uc3QgZGF0YSA9IHRvRGF0YSh0aGlzLnF1ZXJ5U2VsZWN0b3IoXCJ0YWJsZVwiKSk7XG5cdFx0Y29uc3QgW3ZhcmlhbnQsIHR5cGVdID0gKGF0dHIodGhpcywgXCJkYXRhLXZhcmlhbnRcIikgfHwgXCJiYXJcIikuc3BsaXQoXCItXCIpO1xuXHRcdGNvbnN0IHN0eWxlID0gdGFnKFwic3R5bGVcIiwge30sIGNzcyk7XG5cdFx0Y29uc3QgbGVnZW5kID0gdGFnKFwiZGl2XCIsIHsgY2xhc3M6IFwibGVnZW5kc1wiIH0pO1xuXHRcdGRhdGEuc2xpY2UoMSkuZm9yRWFjaCgoW3sgdmFsdWUsIHN0eWxlIH1dKSA9PiB7XG5cdFx0XHRsZWdlbmQuYXBwZW5kQ2hpbGQodGFnKFwiZGl2XCIsIHsgY2xhc3M6IFwibGVnZW5kXCIsIHN0eWxlIH0sIHZhbHVlKSk7XG5cdFx0fSk7XG5cblx0XHRjb25zdCB7IGF4aXMsIGdyb3VwcywgdG90YWwgfSA9IHRvQXhpcyhkYXRhLCB7IHR5cGUgfSk7XG5cdFx0aWYgKHZhcmlhbnQgPT09IFwiYmFyXCIgfHwgdmFyaWFudCA9PT0gXCJjb2x1bW5cIilcblx0XHRcdGdyb3Vwcy5hcHBlbmQoLi4udG9CYXJzKGRhdGEpKTtcblx0XHRpZiAodmFyaWFudCA9PT0gXCJsaW5lXCIgfHwgdmFyaWFudCA9PT0gXCJhcmVhXCIpXG5cdFx0XHRncm91cHMuYXBwZW5kKHRvTGluZXMoZGF0YSwgeyB0b3RhbCwgdmFyaWFudCwgdHlwZSB9KSk7XG5cdFx0aWYgKHZhcmlhbnQgPT09IFwiZG91Z2hudXRcIiB8fCB2YXJpYW50ID09PSBcInBpZVwiKVxuXHRcdFx0dGhpcy5zaGFkb3dSb290Py5hcHBlbmQodG9QaWVzKGRhdGEsIHsgdmFyaWFudCB9KSk7XG5cblx0XHR0aGlzLnNoYWRvd1Jvb3Q/LmFwcGVuZChzdHlsZSwgYXhpcywgbGVnZW5kKTtcblx0fVxuXHRoYW5kbGVFdmVudChlOiBFdmVudCkge1xuXHRcdGlmIChlLnR5cGUgPT09IFwiY2xpY2tcIiB8fCBlLnR5cGUgPT09IFwia2V5ZG93blwiKSBvbkNsaWNrKGUsIHRoaXMpO1xuXHRcdGVsc2Ugb25Nb3ZlVG9vbHRpcChlIGFzIE1vdXNlRXZlbnQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIG9uQ2xpY2soZXZlbnQ6IEV2ZW50LCBzZWxmOiBNVERTQ2hhcnQpIHtcblx0aWYgKGV2ZW50IGluc3RhbmNlb2YgS2V5Ym9hcmRFdmVudCAmJiBldmVudC5rZXkgIT09IFwiRW50ZXJcIikgcmV0dXJuOyAvLyBPbmx5IGhhbmRsZSBlbnRlciBrZXlcblx0Y29uc3QgZWwgPSBldmVudC5jb21wb3NlZFBhdGgoKVswXTtcblx0Y29uc3QgdGFibGUgPSBzZWxmLnF1ZXJ5U2VsZWN0b3IoXCJ0YWJsZVwiKTtcblx0Y29uc3QgW3RyLCB0ZF0gPVxuXHRcdChlbCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgYXR0cihlbCwgXCJkYXRhLWV2ZW50XCIpPy5zcGxpdChcIi1cIikubWFwKE51bWJlcikpIHx8XG5cdFx0W107XG5cblx0dGFibGU/LnJvd3NbdHJdPy5jZWxsc1t0ZF0/LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KFwiYSxidXR0b25cIik/LmNsaWNrPy4oKTtcbn1cblxubGV0IFRPT0xUSVBfVEVYVCA9IFwiXCI7XG5mdW5jdGlvbiBvbk1vdmVUb29sdGlwKGV2ZW50OiBNb3VzZUV2ZW50KSB7XG5cdGlmICghVE9PTFRJUCkgcmV0dXJuO1xuXHRpZiAoIVRPT0xUSVA/LmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChUT09MVElQKTsgLy8gRW5zdXJlIGNvbm5lY3RlZFxuXG5cdGNvbnN0IGVsID0gZXZlbnQuY29tcG9zZWRQYXRoKClbMF07XG5cdGNvbnN0IHRpcCA9IChlbCBpbnN0YW5jZW9mIEVsZW1lbnQgJiYgZWwuZ2V0QXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKSkgfHwgXCJcIjtcblxuXHRpZiAodGlwKVxuXHRcdFRPT0xUSVAuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZSgke2V2ZW50LnBhZ2VYfXB4LCAke2V2ZW50LnBhZ2VZfXB4KWA7XG5cdGlmICh0aXAgIT09IFRPT0xUSVBfVEVYVCkge1xuXHRcdGlmICh0aXApIFRPT0xUSVAudGV4dENvbnRlbnQgPSB0aXA7XG5cdFx0VE9PTFRJUF9URVhUID0gdGlwO1xuXHRcdFRPT0xUSVAuaGlkZGVuID0gIXRpcDtcblx0fVxufVxuXG5jb25zdCB0ZXh0ID0gKGVsPzogRWxlbWVudCB8IG51bGwpID0+IGVsPy50ZXh0Q29udGVudD8udHJpbSgpIHx8IFwiXCI7IC8vIEhlbHBlciB0byBnZXQgdHJpbW1lZCB0ZXh0XG5jb25zdCB0b0RhdGEgPSAodGFibGU/OiBIVE1MVGFibGVFbGVtZW50IHwgbnVsbCkgPT5cblx0QXJyYXkuZnJvbSh0YWJsZT8ucm93cyB8fCBbXSwgKHJvdywgcm93SW5kZXgpID0+XG5cdFx0QXJyYXkuZnJvbShyb3cuY2VsbHMsIChjZWxsLCBjZWxsSW5kZXgpID0+ICh7XG5cdFx0XHRudW1iZXI6IChjZWxsSW5kZXggJiYgcm93SW5kZXggJiYgTnVtYmVyLnBhcnNlRmxvYXQodGV4dChjZWxsKSkpIHx8IDAsIC8vIEZpcnN0IHJvdyBhbmQgY29sdW1uIGlzIG5vdCBhIG51bWJlclxuXHRcdFx0ZXZlbnQ6IGNlbGwucXVlcnlTZWxlY3RvcihcImEsYnV0dG9uXCIpICYmIGAke3Jvd0luZGV4fS0ke2NlbGxJbmRleH1gLCAvLyBSZWZlcmVuY2UgdG8gcHJveHkgZXZlbnRzXG5cdFx0XHRzdHlsZTogYC0tY29sb3I6IHZhcigtLW10ZHNjLWNoYXJ0LWNvbG9yLSR7cm93SW5kZXh9LCB2YXIoLS1tdGRzYy1jaGFydC1jb2xvci1iYXNlKSlgLFxuXHRcdFx0dmFsdWU6IHRleHQoY2VsbCksXG5cdFx0XHR0b29sdGlwOlxuXHRcdFx0XHRhdHRyKGNlbGwsIFwiZGF0YS10b29sdGlwXCIpIHx8XG5cdFx0XHRcdGAke3RleHQocm93LmNlbGxzWzBdKX06ICR7dGV4dChjZWxsKX0gKCR7dGV4dCh0YWJsZT8ucm93c1swXS5jZWxsc1tjZWxsSW5kZXhdKX0pYCxcblx0XHR9KSksXG5cdCk7XG5cbmlmIChJU19CUk9XU0VSICYmICF3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KFwibXRkcy1jaGFydFwiKSlcblx0d2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShcIm10ZHMtY2hhcnRcIiwgTVREU0NoYXJ0KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQge1xuXHRhdHRyLFxuXHRjcmVhdGVPcHRpbWl6ZWRNdXRhdGlvbk9ic2VydmVyLFxuXHRJU19CUk9XU0VSLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdFFVSUNLX0VWRU5ULFxufSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0RJQUxPRyA9IHN0eWxlcy5kaWFsb2cuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgRElBTE9HUyA9IElTX0JST1dTRVJcblx0PyAoZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcblx0XHRcdENTU19ESUFMT0csXG5cdFx0KSBhcyBIVE1MQ29sbGVjdGlvbk9mPEhUTUxEaWFsb2dFbGVtZW50Pilcblx0OiBbXTtcblxuY29uc3QgaGFuZGxlTW9kYWwgPSAoKSA9PiB7XG5cdGZvciAoY29uc3QgZGlhbG9nIG9mIERJQUxPR1MpXG5cdFx0aWYgKGRpYWxvZy5pc0Nvbm5lY3RlZCAmJiBkaWFsb2cuc2hvd01vZGFsICYmIGRpYWxvZy5jbG9zZSkge1xuXHRcdFx0aWYgKGRpYWxvZy5tYXRjaGVzKCdbb3Blbl06bm90KFtkYXRhLW1vZGFsPVwiZmFsc2VcIl0pOm5vdCg6bW9kYWwpJykpIHtcblx0XHRcdFx0YXR0cihkaWFsb2csIFwib3BlblwiLCBudWxsKTsgLy8gVXNpbmcgYXR0cmlidXRlIGluc3RlYWQgb2YgLmNsb3NlIHRvIGF2b2lkIGBjbG9zZWAgZXZlbnRcblx0XHRcdFx0ZGlhbG9nLnNob3dNb2RhbCgpO1xuXHRcdFx0fSBlbHNlIGlmIChkaWFsb2cubWF0Y2hlcyhcIjptb2RhbDpub3QoW29wZW5dKVwiKSkge1xuXHRcdFx0XHRhdHRyKGRpYWxvZywgXCJvcGVuXCIsIFwiXCIpOyAvLyBTZXQgYXMgb3BlblxuXHRcdFx0XHRkaWFsb2cuY2xvc2UoKTsgLy8gU28gd2UgY29ycmVjbHR5IGNhbiBjYWxsIC5jbG9zZSwgcmVtb3ZpbmcgPGRpYWxvZz4gZnJvbSAjdG9wLWxheWVyXG5cdFx0XHR9XG5cdFx0fVxufTtcblxuY29uc3QgaGFuZGxlRGlhbG9nQ2xpY2sgPSAoe1xuXHRjbGllbnRYOiB4LFxuXHRjbGllbnRZOiB5LFxuXHR0YXJnZXQ6IGVsLFxufTogTW91c2VFdmVudCkgPT4ge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MRGlhbG9nRWxlbWVudCAmJiBhdHRyKGVsLCBcImRhdGEtY2xvc2VkYnlcIikgPT09IFwiYW55XCIpIHtcblx0XHRjb25zdCB7IHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdCB9ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0Y29uc3QgaXNJbnNpZGUgPSB0b3AgPD0geSAmJiB5IDw9IGJvdHRvbSAmJiBsZWZ0IDw9IHggJiYgeCA8PSByaWdodDtcblx0XHRpZiAoIWlzSW5zaWRlKSByZXR1cm4gZWwuY2xvc2UoKTtcblx0fVxuXHRjb25zdCBkaWFsb2cgPSAoZWwgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImRpYWxvZ1wiKTtcblx0Y29uc3QgY2xvc2UgPSBkaWFsb2cgJiYgKGVsIGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oJ1tkYXRhLWNvbW1hbmQ9XCJjbG9zZVwiXScpO1xuXHRpZiAoY2xvc2UpIGRpYWxvZy5jbG9zZSgpO1xufTtcblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVEaWFsb2dDbGljayBhcyBFdmVudExpc3RlbmVyLCBRVUlDS19FVkVOVCk7XG5cdGNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIoaGFuZGxlTW9kYWwpLm9ic2VydmUoXG5cdFx0ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LFxuXHRcdHtcblx0XHRcdGF0dHJpYnV0ZUZpbHRlcjogW1wib3BlblwiXSxcblx0XHRcdGF0dHJpYnV0ZXM6IHRydWUsXG5cdFx0XHRjaGlsZExpc3Q6IHRydWUsXG5cdFx0XHRzdWJ0cmVlOiB0cnVlLFxuXHRcdH0sXG5cdCk7XG59KTtcbiIsImltcG9ydCBzdHlsZXMgZnJvbSBcIi4uL3N0eWxlcy5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBhdHRyLCBvbiwgb25Mb2FkZWQsIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmZ1bmN0aW9uIGhhbmRsZUVycm9zdW1tYXJ5SW5qZWN0KGV2ZW50OiBFdmVudCAmIHsgYW5pbWF0aW9uTmFtZT86IHN0cmluZyB9KSB7XG5cdGlmIChldmVudC5hbmltYXRpb25OYW1lICE9PSBzdHlsZXMuX2Vycm9yc3VtbWFyeSkgcmV0dXJuO1xuXHRjb25zdCBmaXJzdCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmZpcnN0RWxlbWVudENoaWxkO1xuXG5cdGlmIChmaXJzdCBpbnN0YW5jZW9mIEhUTUxIZWFkaW5nRWxlbWVudCkge1xuXHRcdGF0dHIoZmlyc3QsIFwidGFiaW5kZXhcIiwgXCItMVwiKTtcblx0XHRmaXJzdC5mb2N1cygpOyAvLyBBdXRvZm9jdXMgZmlyc3QgaGVhZGluZ1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uKGRvY3VtZW50LCBcImFuaW1hdGlvbmVuZFwiLCBoYW5kbGVFcnJvc3VtbWFyeUluamVjdCwgUVVJQ0tfRVZFTlQpLFxuKTtcbiIsInZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wU3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX3Byb3BJc0VudW0gPSBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO1xudmFyIF9fZGVmTm9ybWFsUHJvcCA9IChvYmosIGtleSwgdmFsdWUpID0+IGtleSBpbiBvYmogPyBfX2RlZlByb3Aob2JqLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWUgfSkgOiBvYmpba2V5XSA9IHZhbHVlO1xudmFyIF9fc3ByZWFkVmFsdWVzID0gKGEsIGIpID0+IHtcbiAgZm9yICh2YXIgcHJvcCBpbiBiIHx8IChiID0ge30pKVxuICAgIGlmIChfX2hhc093blByb3AuY2FsbChiLCBwcm9wKSlcbiAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgaWYgKF9fZ2V0T3duUHJvcFN5bWJvbHMpXG4gICAgZm9yICh2YXIgcHJvcCBvZiBfX2dldE93blByb3BTeW1ib2xzKGIpKSB7XG4gICAgICBpZiAoX19wcm9wSXNFbnVtLmNhbGwoYiwgcHJvcCkpXG4gICAgICAgIF9fZGVmTm9ybWFsUHJvcChhLCBwcm9wLCBiW3Byb3BdKTtcbiAgICB9XG4gIHJldHVybiBhO1xufTtcblxuLy8gLi4vdXRpbHMudHNcbnZhciBJU19CUk9XU0VSID0gdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93LmRvY3VtZW50ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cubmF2aWdhdG9yICE9PSBcInVuZGVmaW5lZFwiO1xudmFyIElTX0FORFJPSUQgPSBJU19CUk9XU0VSICYmIC9hbmRyb2lkL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBJU19JT1MgPSBJU19CUk9XU0VSICYmIC9pUGFkfGlQaG9uZXxpUG9kLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xudmFyIF9hO1xuSVNfQlJPV1NFUiAmJiAvLyBAdHMtZXhwZWN0LWVycm9yIFR5cGVzY3JpcHQgaGFzIG5vdCBpbXBsZW1lbnRlZCB1c2VyQWdlbnREYXRhIHlldCBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNzEzOTI0NzRcbi9eTWFjL2kudGVzdCgoKF9hID0gbmF2aWdhdG9yLnVzZXJBZ2VudERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBfYS5wbGF0Zm9ybSkgfHwgbmF2aWdhdG9yLnBsYXRmb3JtKTtcbnZhciBTQUZFX0xBQkVMTEVEQlkgPSBgJHtJU19BTkRST0lEID8gXCJkYXRhXCIgOiBcImFyaWFcIn0tbGFiZWxsZWRieWA7XG52YXIgRElTUExBWV9CTE9DSyA9IFwiOmhvc3QoOm5vdChbaGlkZGVuXSkpIHsgZGlzcGxheTogYmxvY2sgfVwiO1xudmFyIEZPQ1VTX09VVExJTkUgPSBcIm91dGxpbmU6IDFweCBkb3R0ZWQ7IG91dGxpbmU6IDVweCBhdXRvIEhpZ2hsaWdodDsgb3V0bGluZTogNXB4IGF1dG8gLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yXCI7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBldmVudHMgPSAoYWN0aW9uLCBlbGVtZW50LCByZXN0KSA9PiB7XG4gIGZvciAoY29uc3QgdHlwZSBvZiByZXN0WzBdLnNwbGl0KFwiLFwiKSkge1xuICAgIHJlc3RbMF0gPSB0eXBlO1xuICAgIEVsZW1lbnQucHJvdG90eXBlW2Ake2FjdGlvbn1FdmVudExpc3RlbmVyYF0uYXBwbHkoZWxlbWVudCwgcmVzdCk7XG4gIH1cbn07XG52YXIgb24gPSAoZWxlbWVudCwgLi4ucmVzdCkgPT4gZXZlbnRzKFwiYWRkXCIsIGVsZW1lbnQsIHJlc3QpO1xudmFyIG9mZiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJyZW1vdmVcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgYXR0YWNoU3R5bGUgPSAoZWxlbWVudCwgY3NzKSA9PiBlbGVtZW50LnNoYWRvd1Jvb3QgfHwgZWxlbWVudC5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIpLFxuICAvLyBVbm5hbWVkIHNsb3QgZG9lcyBhdXRvbWF0aWNhbGx5IHJlbmRlciBhbGwgdG9wIGVsZW1lbnQgbm9kZXNcbiAgY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIGNzcylcbik7XG52YXIgb2JzZXJ2ZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7XG52YXIgbXV0YXRpb25PYnNlcnZlciA9IChlbGVtZW50LCBvcHRpb25zKSA9PiB7XG4gIGlmIChvcHRpb25zID09PSB2b2lkIDApIHJldHVybiBvYnNlcnZlcnMuZ2V0KGVsZW1lbnQpO1xuICB0cnkge1xuICAgIG9ic2VydmVycy5nZXQoZWxlbWVudCkuZGlzY29ubmVjdCgpO1xuICAgIG9ic2VydmVycy5kZWxldGUoZWxlbWVudCk7XG4gIH0gY2F0Y2ggKF9lcnIpIHtcbiAgfVxuICBpZiAob3B0aW9ucykge1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoXG4gICAgICAoZGV0YWlsKSA9PiBlbGVtZW50LmhhbmRsZUV2ZW50KHsgdHlwZTogXCJtdXRhdGlvblwiLCBkZXRhaWwgfSlcbiAgICApO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwgb3B0aW9ucyk7XG4gICAgb2JzZXJ2ZXJzLnNldChlbGVtZW50LCBvYnNlcnZlcik7XG4gIH1cbn07XG52YXIgZ2V0Um9vdCA9IChub2RlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHJvb3QgPSAoKF9hMiA9IG5vZGUuZ2V0Um9vdE5vZGUpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2FsbChub2RlKSkgfHwgbm9kZS5vd25lckRvY3VtZW50O1xuICByZXR1cm4gcm9vdCBpbnN0YW5jZW9mIERvY3VtZW50IHx8IHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IGRvY3VtZW50O1xufTtcbnZhciBpZCA9IDA7XG52YXIgdXNlSWQgPSAoZWwpID0+IHtcbiAgaWYgKCFlbCkgcmV0dXJuIFwiXCI7XG4gIGlmICghZWwuaWQpIGVsLmlkID0gYDoke2VsLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCl9JHsoKytpZCkudG9TdHJpbmcoMzIpfWA7XG4gIHJldHVybiBlbC5pZDtcbn07XG52YXIgY3JlYXRlRWxlbWVudCA9ICh0YWdOYW1lLCB0ZXh0LCBhdHRycykgPT4ge1xuICBjb25zdCBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7XG4gIGlmICh0ZXh0KSBlbC50ZXh0Q29udGVudCA9IHRleHQ7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIExJVkU7XG52YXIgTElWRV9TUl9GSVggPSAwO1xudmFyIHNwZWFrID0gKHRleHQpID0+IHtcbiAgaWYgKCFMSVZFKSB7XG4gICAgTElWRSA9IGNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gICAgTElWRS5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjpmaXhlZDtvdmVyZmxvdzpoaWRkZW47d2lkdGg6MXB4O3doaXRlLXNwYWNlOm5vd3JhcFwiO1xuICAgIGF0dHIoTElWRSwgXCJhcmlhLWxpdmVcIiwgXCJhc3NlcnRpdmVcIik7XG4gIH1cbiAgaWYgKCFMSVZFLmlzQ29ubmVjdGVkKSBkb2N1bWVudC5ib2R5LmFwcGVuZChMSVZFKTtcbiAgaWYgKHRleHQpIExJVkUudGV4dENvbnRlbnQgPSBgJHt0ZXh0fSR7TElWRV9TUl9GSVgrKyAlIDIgPyBcIlxceEEwXCIgOiBcIlwifWA7XG59O1xudmFyIHNldFZhbHVlID0gKGlucHV0LCBkYXRhLCB0eXBlID0gXCJcIikgPT4ge1xuICB2YXIgX2EyLCBfYjtcbiAgY29uc3QgZXZlbnQgPSB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlLCBkYXRhLCBpbnB1dFR5cGU6IHR5cGUgfTtcbiAgY29uc3QgcHJvdG8gPSBIVE1MSW5wdXRFbGVtZW50LnByb3RvdHlwZTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgSW5wdXRFdmVudChcImJlZm9yZWlucHV0XCIsIGV2ZW50KSk7XG4gIChfYiA9IChfYTIgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBcInZhbHVlXCIpKSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnNldCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9iLmNhbGwoaW5wdXQsIGRhdGEpO1xuICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBJbnB1dEV2ZW50KFwiaW5wdXRcIiwgZXZlbnQpKTtcbiAgaW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoXCJjaGFuZ2VcIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbn07XG52YXIgSVNfUFJFU1MgPSBmYWxzZTtcbnZhciBpc01vdXNlRG93biA9IChldmVudCkgPT4ge1xuICBpZiAoKGV2ZW50ID09IG51bGwgPyB2b2lkIDAgOiBldmVudC50eXBlKSA9PT0gXCJtb3VzZXVwXCIpIElTX1BSRVNTID0gZmFsc2U7XG4gIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSBcIm1vdXNlZG93blwiKSB7XG4gICAgSVNfUFJFU1MgPSB0cnVlO1xuICAgIG9uKGRvY3VtZW50LCBcIm1vdXNldXBcIiwgaXNNb3VzZURvd24sIHsgb25jZTogdHJ1ZSB9KTtcbiAgfVxuICByZXR1cm4gSVNfUFJFU1M7XG59O1xudmFyIGRlY2xhcmF0aXZlU2hhZG93Um9vdCA9IChzdHlsZSwgc2xvdCA9IFwiPHNsb3Q+PC9zbG90PlwiKSA9PiBgPHRlbXBsYXRlIHNoYWRvd3Jvb3Rtb2RlPVwib3BlblwiPiR7c2xvdH08c3R5bGU+JHtzdHlsZX08L3N0eWxlPjwvdGVtcGxhdGU+YDtcblxuLy8gdS1vcHRpb24udHNcbnZhciBESVNBQkxFRCA9IFwiZGlzYWJsZWRcIjtcbnZhciBTRUxFQ1RFRCA9IFwic2VsZWN0ZWRcIjtcbnZhciBVSFRNTE9wdGlvbkVsZW1lbnQgPSBjbGFzcyBleHRlbmRzIFVIVE1MRWxlbWVudCB7XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbRElTQUJMRUQsIFNFTEVDVEVEXTtcbiAgfVxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBpZiAoIUlTX0lPUykgdGhpcy50YWJJbmRleCA9IC0xO1xuICAgIGlmICghdGhpcy5oYXNBdHRyaWJ1dGUoXCJyb2xlXCIpKSBhdHRyKHRoaXMsIFwicm9sZVwiLCBcIm9wdGlvblwiKTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1kaXNhYmxlZFwiLCBgJHt0aGlzLmRpc2FibGVkfWApO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXNlbGVjdGVkXCIsIGAke3RoaXMuc2VsZWN0ZWR9YCk7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHdoZXRoZXIgdGhlIG9wdGlvbiBpbiB0aGUgbGlzdCBib3ggaXMgdGhlIGRlZmF1bHQgaXRlbS4gKi9cbiAgZ2V0IGRlZmF1bHRTZWxlY3RlZCgpIHtcbiAgICByZXR1cm4gdGhpc1tTRUxFQ1RFRF07XG4gIH1cbiAgc2V0IGRlZmF1bHRTZWxlY3RlZCh2YWx1ZSkge1xuICAgIHRoaXNbU0VMRUNURURdID0gdmFsdWU7XG4gIH1cbiAgZ2V0IGRpc2FibGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIERJU0FCTEVEKSAhPT0gbnVsbDtcbiAgfVxuICBzZXQgZGlzYWJsZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIERJU0FCTEVELCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICAvKiogUmV0cmlldmVzIGEgcmVmZXJlbmNlIHRvIHRoZSBmb3JtIHRoYXQgdGhlIG9iamVjdCBpcyBlbWJlZGRlZCBpbi4gKi9cbiAgZ2V0IGZvcm0oKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xvc2VzdChcImZvcm1cIik7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSBvcmRpbmFsIHBvc2l0aW9uIG9mIGFuIG9wdGlvbiBpbiBhIGxpc3QgYm94LiAqL1xuICBnZXQgaW5kZXgoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gW1xuICAgICAgLi4uKChfYTIgPSB0aGlzLnBhcmVudEVsZW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIub3B0aW9ucykgfHwgW3RoaXNdXG4gICAgXS5pbmRleE9mKHRoaXMpO1xuICB9XG4gIC8qKiBTZXRzIG9yIHJldHJpZXZlcyBhIHZhbHVlIHRoYXQgeW91IGNhbiB1c2UgdG8gaW1wbGVtZW50IHlvdXIgb3duIGxhYmVsIGZ1bmN0aW9uYWxpdHkgZm9yIHRoZSBvYmplY3QuICovXG4gIGdldCBsYWJlbCgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoX2EyID0gYXR0cih0aGlzLCBcImxhYmVsXCIpKSAhPSBudWxsID8gX2EyIDogdGhpcy50ZXh0O1xuICB9XG4gIHNldCBsYWJlbCh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJsYWJlbFwiLCB2YWx1ZSk7XG4gIH1cbiAgZ2V0IHNlbGVjdGVkKCkge1xuICAgIHJldHVybiBhdHRyKHRoaXMsIFNFTEVDVEVEKSAhPT0gbnVsbDtcbiAgfVxuICBzZXQgc2VsZWN0ZWQodmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFNFTEVDVEVELCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICAvKiogU2V0cyBvciByZXRyaWV2ZXMgdGhlIHRleHQgc3RyaW5nIHNwZWNpZmllZCBieSB0aGUgb3B0aW9uIHRhZy4gKi9cbiAgZ2V0IHRleHQoKSB7XG4gICAgdmFyIF9hMjtcbiAgICByZXR1cm4gKChfYTIgPSB0aGlzLnRleHRDb250ZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLnRyaW0oKSkgfHwgXCJcIjtcbiAgfVxuICBzZXQgdGV4dCh0ZXh0KSB7XG4gICAgdGhpcy50ZXh0Q29udGVudCA9IHRleHQ7XG4gIH1cbiAgLyoqIFNldHMgb3IgcmV0cmlldmVzIHRoZSB2YWx1ZSB3aGljaCBpcyByZXR1cm5lZCB0byB0aGUgc2VydmVyIHdoZW4gdGhlIGZvcm0gY29udHJvbCBpcyBzdWJtaXR0ZWQuICovXG4gIGdldCB2YWx1ZSgpIHtcbiAgICB2YXIgX2EyO1xuICAgIHJldHVybiAoX2EyID0gYXR0cih0aGlzLCBcInZhbHVlXCIpKSAhPSBudWxsID8gX2EyIDogdGhpcy50ZXh0O1xuICB9XG4gIHNldCB2YWx1ZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJ2YWx1ZVwiLCB2YWx1ZSk7XG4gIH1cbn07XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LW9wdGlvblwiLCBVSFRNTE9wdGlvbkVsZW1lbnQpO1xuXG4vLyB1LWRhdGFsaXN0LnRzXG52YXIgVUhUTUxEYXRhTGlzdFN0eWxlID0gYCR7RElTUExBWV9CTE9DS31cbjo6c2xvdHRlZCh1LW9wdGlvbikgeyBkaXNwbGF5OiBibG9jazsgY3Vyc29yOiBwb2ludGVyIH1cbjo6c2xvdHRlZCh1LW9wdGlvbjpmb2N1cykgeyAke0ZPQ1VTX09VVExJTkV9IH1cbjo6c2xvdHRlZCh1LW9wdGlvblthcmlhLWhpZGRlbj1cInRydWVcIl0pLFxuOjpzbG90dGVkKHUtb3B0aW9uW2Rpc2FibGVkXSksXG46OnNsb3R0ZWQodS1vcHRpb25baGlkZGVuXSkgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQgfWA7XG52YXIgVUhUTUxEYXRhTGlzdFNoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoVUhUTUxEYXRhTGlzdFN0eWxlKTtcbnZhciBMSVZFX1RJTUVSO1xudmFyIElOUFVUX0RFQk9VTkNFID0gMDtcbnZhciBJU19NT0JJTEUgPSBJU19JT1MgfHwgSVNfQU5EUk9JRDtcbnZhciBFVkVOVFMgPSBcImNsaWNrLGZvY3Vzb3V0LGlucHV0LGtleWRvd24sbW91c2Vkb3duLG1vdXNldXBcIjtcbnZhciBFVkVOVFNfSU5QVVQgPSBcImZvY3VzLGZvY3VzaW4sYmx1cixmb2N1c291dFwiO1xudmFyIFRFWFRTID0ge1xuICBzaW5ndWxhcjogXCIlZCBoaXRcIixcbiAgcGx1cmFsOiBcIiVkIGhpdHNcIlxufTtcbnZhciBVSFRNTERhdGFMaXN0RWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLl90ZXh0cyA9IF9fc3ByZWFkVmFsdWVzKHt9LCBURVhUUyk7XG4gICAgdGhpcy5fdmFsdWUgPSBcIlwiO1xuICAgIGF0dGFjaFN0eWxlKHRoaXMsIFVIVE1MRGF0YUxpc3RTdHlsZSk7XG4gIH1cbiAgLy8gVXNlZCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IGFubm91bmNlbWVudHNcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImlkXCIsIC4uLk9iamVjdC5rZXlzKFRFWFRTKS5tYXAoKGtleSkgPT4gYGRhdGEtc3ItJHtrZXl9YCldO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHRoaXMuaGlkZGVuID0gdHJ1ZTtcbiAgICB0aGlzLl9yb290ID0gZ2V0Um9vdCh0aGlzKTtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcImxpc3Rib3hcIik7XG4gICAgYXR0cih0aGlzLCBcInRhYmluZGV4XCIsIFwiLTFcIik7XG4gICAgb24odGhpcy5fcm9vdCwgXCJmb2N1c2luXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMuX3Jvb3QsIFwiZm9jdXNcIiwgdGhpcywgdHJ1ZSk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCB7XG4gICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFtcImRpc2FibGVkXCIsIFwiaGlkZGVuXCIsIFwibGFiZWxcIiwgXCJ2YWx1ZVwiXSxcbiAgICAgIGF0dHJpYnV0ZXM6IHRydWUsXG4gICAgICBjaGFyYWN0ZXJEYXRhOiB0cnVlLFxuICAgICAgY2hpbGRMaXN0OiB0cnVlLFxuICAgICAgc3VidHJlZTogdHJ1ZVxuICAgIH0pO1xuICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSk7XG4gIH1cbiAgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgb2ZmKHRoaXMuX3Jvb3QgfHwgdGhpcywgXCJmb2N1c1wiLCB0aGlzLCB0cnVlKTtcbiAgICBvZmYodGhpcy5fcm9vdCB8fCB0aGlzLCBcImZvY3VzaW5cIiwgdGhpcyk7XG4gICAgbXV0YXRpb25PYnNlcnZlcih0aGlzLCBmYWxzZSk7XG4gICAgZGlzY29ubmVjdElucHV0KHRoaXMpO1xuICAgIHRoaXMuX3Jvb3QgPSB2b2lkIDA7XG4gIH1cbiAgYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKHByb3AsIF9wcmV2LCBuZXh0KSB7XG4gICAgY29uc3QgdGV4dCA9IHByb3AgPT0gbnVsbCA/IHZvaWQgMCA6IHByb3Auc3BsaXQoXCJkYXRhLXNyLVwiKVsxXTtcbiAgICBjb25zdCBjc3MgPSBgaW5wdXRbbGlzdD1cIiR7dGhpcy5pZH1cIl1gO1xuICAgIGlmIChURVhUU1t0ZXh0XSkgdGhpcy5fdGV4dHNbdGV4dF0gPSBuZXh0IHx8IFRFWFRTW3RleHRdO1xuICAgIGVsc2UgaWYgKHRoaXMuX3Jvb3QpIHtcbiAgICAgIGlmICh0aGlzLl9pbnB1dCkgc2V0dXBJbnB1dCh0aGlzLCB0aGlzLl9pbnB1dCk7XG4gICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIHRoaXMuX3Jvb3QucXVlcnlTZWxlY3RvckFsbChjc3MpKVxuICAgICAgICBzZXR1cElucHV0KHRoaXMsIGlucHV0KTtcbiAgICB9XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCB7IHRhcmdldCwgdHlwZSB9ID0gZXZlbnQ7XG4gICAgaWYgKGV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHJldHVybjtcbiAgICBpZiAodHlwZSA9PT0gXCJjbGlja1wiKSBvbkNsaWNrKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJmb2N1c1wiIHx8IHR5cGUgPT09IFwiZm9jdXNpblwiKSBvbkZvY3VzKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJibHVyXCIgfHwgdHlwZSA9PT0gXCJmb2N1c291dFwiKSBvbkJsdXIodGhpcywgZXZlbnQpO1xuICAgIGlmICh0eXBlID09PSBcImtleWRvd25cIikgb25LZXlEb3duKHRoaXMsIGV2ZW50KTtcbiAgICBpZiAodHlwZSA9PT0gXCJtb3VzZWRvd25cIiAmJiB0aGlzLmNvbnRhaW5zKHRhcmdldCkpXG4gICAgICBpc01vdXNlRG93bihldmVudCk7XG4gICAgaWYgKHR5cGUgPT09IFwibXV0YXRpb25cIiB8fCB0eXBlID09PSBcImlucHV0XCIpIHtcbiAgICAgIGNsZWFyVGltZW91dChJTlBVVF9ERUJPVU5DRSk7XG4gICAgICBJTlBVVF9ERUJPVU5DRSA9IHNldFRpbWVvdXQob25JbnB1dCwgMCwgdGhpcywgZXZlbnQpO1xuICAgIH1cbiAgfVxuICBnZXQgb3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRFbGVtZW50c0J5VGFnTmFtZShcInUtb3B0aW9uXCIpO1xuICB9XG59O1xudmFyIGlzRGlzYWJsZWQgPSAoaW5wdXQpID0+IChpbnB1dCA9PSBudWxsID8gdm9pZCAwIDogaW5wdXQuZGlzYWJsZWQpIHx8IChpbnB1dCA9PSBudWxsID8gdm9pZCAwIDogaW5wdXQucmVhZE9ubHkpIHx8IGZhbHNlO1xudmFyIHNldEV4cGFuZGVkID0gKHNlbGYsIG9wZW4pID0+IHtcbiAgdmFyIF9hMiwgX2IsIF9jO1xuICBpZiAoc2VsZi5oaWRkZW4gIT09IG9wZW4pIHJldHVybjtcbiAgc2VsZi5oaWRkZW4gPSBpc0Rpc2FibGVkKHNlbGYgPT0gbnVsbCA/IHZvaWQgMCA6IHNlbGYuX2lucHV0KSB8fCAhb3BlbjtcbiAgKF9hMiA9IG11dGF0aW9uT2JzZXJ2ZXIoc2VsZikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudGFrZVJlY29yZHMoKTtcbiAgY29uc3QgaXNQb3BvdmVyID0gc2VsZi5pc0Nvbm5lY3RlZCAmJiBzZWxmLnBvcG92ZXIgJiYgKChfYiA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2IuaXNDb25uZWN0ZWQpICYmICgoX2MgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9jLnBvcG92ZXJUYXJnZXRFbGVtZW50KSA9PT0gc2VsZjtcbiAgaWYgKHNlbGYuX2lucHV0KSBzZXR1cElucHV0KHNlbGYsIHNlbGYuX2lucHV0LCBvcGVuKTtcbiAgaWYgKGlzUG9wb3ZlcikgYXR0cihzZWxmLCBcInBvcG92ZXJcIiwgXCJtYW51YWxcIik7XG4gIGlmIChpc1BvcG92ZXIpIHNlbGYudG9nZ2xlUG9wb3ZlcihvcGVuKTtcbiAgaWYgKG9wZW4pIG9uSW5wdXQoc2VsZik7XG59O1xudmFyIGRpc2Nvbm5lY3RJbnB1dCA9IChzZWxmKSA9PiB7XG4gIGlmICghc2VsZi5faW5wdXQpIHJldHVybjtcbiAgb2ZmKHNlbGYuX2lucHV0IHx8IHNlbGYsIEVWRU5UU19JTlBVVCwgc2VsZik7XG4gIG9mZihzZWxmLl9yb290IHx8IHNlbGYsIEVWRU5UUywgc2VsZik7XG4gIHNldEV4cGFuZGVkKHNlbGYsIGZhbHNlKTtcbiAgc2VsZi5faW5wdXQgPSB2b2lkIDA7XG59O1xudmFyIHNldHVwSW5wdXQgPSAoc2VsZiwgaW5wdXQsIG9wZW4gPSBmYWxzZSkgPT4ge1xuICBpZiAoc2VsZi5wb3BvdmVyKSBhdHRyKGlucHV0LCBcInBvcG92ZXJ0YXJnZXRcIiwgdXNlSWQoc2VsZikpO1xuICBvbihpbnB1dCwgRVZFTlRTX0lOUFVULCBzZWxmLCB0cnVlKTtcbiAgYXR0cihpbnB1dCwgXCJhcmlhLWF1dG9jb21wbGV0ZVwiLCBcImxpc3RcIik7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1jb250cm9sc1wiLCB1c2VJZChzZWxmKSk7XG4gIGF0dHIoaW5wdXQsIFwiYXJpYS1leHBhbmRlZFwiLCBgJHshSVNfTU9CSUxFIHx8IG9wZW59YCk7XG4gIGF0dHIoaW5wdXQsIFwiYXV0b2NvbXBsZXRlXCIsIFwib2ZmXCIpO1xuICBhdHRyKGlucHV0LCBcInJvbGVcIiwgaXNEaXNhYmxlZChpbnB1dCkgPyBudWxsIDogXCJjb21ib2JveFwiKTtcbn07XG52YXIgb25Gb2N1cyA9IChzZWxmLCBldmVudCkgPT4ge1xuICB2YXIgX2EyO1xuICBjb25zdCBpc0lucHV0ID0gZXZlbnQudGFyZ2V0IGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudDtcbiAgaWYgKGlzSW5wdXQgJiYgZXZlbnQuaXNUcnVzdGVkKSBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbiAgaWYgKHNlbGYuX2lucHV0ICE9PSBldmVudC50YXJnZXQgJiYgaXNJbnB1dCAmJiBldmVudC50YXJnZXQubGlzdCA9PT0gc2VsZikge1xuICAgIGlmIChzZWxmLl9pbnB1dCkgZGlzY29ubmVjdElucHV0KHNlbGYpO1xuICAgIHNlbGYuX2lucHV0ID0gZXZlbnQudGFyZ2V0O1xuICAgIHNlbGYuX2lucHV0LmRpc3BhdGNoRXZlbnQobmV3IEZvY3VzRXZlbnQoXCJmb2N1c1wiKSk7XG4gICAgc2VsZi5faW5wdXQuZGlzcGF0Y2hFdmVudChuZXcgRm9jdXNFdmVudChcImZvY3VzaW5cIiwgeyBidWJibGVzOiB0cnVlIH0pKTtcbiAgICBhdHRyKHNlbGYsIFNBRkVfTEFCRUxMRURCWSwgdXNlSWQoKF9hMiA9IHNlbGYuX2lucHV0LmxhYmVscykgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMlswXSkpO1xuICAgIG9uKHNlbGYuX3Jvb3QgfHwgc2VsZiwgRVZFTlRTLCBzZWxmKTtcbiAgICBzZXRFeHBhbmRlZChzZWxmLCBhdHRyKHNlbGYuX2lucHV0LCBcImlucHV0bW9kZVwiKSAhPT0gXCJub25lXCIpO1xuICAgIHNwZWFrKCk7XG4gIH1cbn07XG52YXIgb25CbHVyID0gKHNlbGYsIGV2ZW50KSA9PiB7XG4gIGlmICghSVNfQU5EUk9JRCAmJiAhaXNNb3VzZURvd24oKSAmJiBzZWxmLl9pbnB1dClcbiAgICBzZXRUaW1lb3V0KG9uQmx1cnJlZCwgMCwgc2VsZik7XG4gIGlmIChldmVudC50YXJnZXQgPT09IHNlbGYuX2lucHV0ICYmIGV2ZW50LmlzVHJ1c3RlZClcbiAgICBldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcbn07XG52YXIgb25CbHVycmVkID0gKHNlbGYpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3QgcmVsYXRlZFRhcmdldCA9ICgoX2EyID0gc2VsZi5fcm9vdCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5hY3RpdmVFbGVtZW50KSB8fCBudWxsO1xuICBjb25zdCBpbnB1dCA9IHNlbGYuX2lucHV0O1xuICBpZiAoaW5wdXQgJiYgaW5wdXQgIT09IHJlbGF0ZWRUYXJnZXQgJiYgIXNlbGYuY29udGFpbnMocmVsYXRlZFRhcmdldCkpIHtcbiAgICBpbnB1dC5kaXNwYXRjaEV2ZW50KG5ldyBGb2N1c0V2ZW50KFwiYmx1clwiLCB7IHJlbGF0ZWRUYXJnZXQgfSkpO1xuICAgIGlucHV0LmRpc3BhdGNoRXZlbnQoXG4gICAgICBuZXcgRm9jdXNFdmVudChcImZvY3Vzb3V0XCIsIHsgYnViYmxlczogdHJ1ZSwgcmVsYXRlZFRhcmdldCB9KVxuICAgICk7XG4gICAgZGlzY29ubmVjdElucHV0KHNlbGYpO1xuICB9XG59O1xudmFyIG9uQ2xpY2sgPSAoc2VsZiwgeyB0YXJnZXQgfSkgPT4ge1xuICB2YXIgX2EyO1xuICBpZiAoIXNlbGYuX2lucHV0IHx8IHNlbGYuX2lucHV0ID09PSB0YXJnZXQpIHJldHVybiBzZXRFeHBhbmRlZChzZWxmLCB0cnVlKTtcbiAgZm9yIChjb25zdCBvcHQgb2Ygc2VsZi5vcHRpb25zKVxuICAgIGlmIChvcHQuY29udGFpbnModGFyZ2V0KSkge1xuICAgICAgaWYgKGF0dHIoc2VsZiwgXCJhcmlhLW11bHRpc2VsZWN0YWJsZVwiKSAhPT0gXCJ0cnVlXCIpIHtcbiAgICAgICAgKF9hMiA9IHNlbGYuX2lucHV0KSA9PSBudWxsID8gdm9pZCAwIDogX2EyLmZvY3VzKCk7XG4gICAgICAgIHNldEV4cGFuZGVkKHNlbGYsIGZhbHNlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZXRWYWx1ZShzZWxmLl9pbnB1dCwgb3B0LnZhbHVlKTtcbiAgICB9XG4gIGlmIChJU19BTkRST0lEKSBvbkJsdXJyZWQoc2VsZik7XG59O1xudmFyIG9uS2V5RG93biA9IChzZWxmLCBlKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IHsga2V5LCB0YXJnZXQsIGFsdEtleSwgY3RybEtleSwgc2hpZnRLZXksIG1ldGFLZXkgfSA9IGU7XG4gIGNvbnN0IGlzRXNjYXBlID0ga2V5ID09PSBcIkVzY2FwZVwiIHx8IGtleSA9PT0gXCJFc2NcIjtcbiAgaWYgKGFsdEtleSB8fCBjdHJsS2V5IHx8IG1ldGFLZXkgfHwgc2hpZnRLZXkgfHwga2V5ID09PSBcIlRhYlwiKSByZXR1cm47XG4gIGlmIChpc0VzY2FwZSAmJiAhc2VsZi5oaWRkZW4pIGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUucHJldmVudERlZmF1bHQoKTtcbiAgc2V0RXhwYW5kZWQoc2VsZiwgIWlzRXNjYXBlKTtcbiAgY29uc3Qgb3B0aW9ucyA9IFsuLi5zZWxmLm9wdGlvbnNdLmZpbHRlcihcbiAgICAoZWwpID0+IGF0dHIoZWwsIFwiYXJpYS1oaWRkZW5cIikgIT09IFwidHJ1ZVwiICYmIGVsLm9mZnNldEhlaWdodFxuICApO1xuICBjb25zdCBwcmV2ID0gb3B0aW9ucy5pbmRleE9mKHRhcmdldCk7XG4gIGxldCBuZXh0ID0gLTE7XG4gIGlmIChrZXkgPT09IFwiQXJyb3dEb3duXCIpIG5leHQgPSAocHJldiArIDEpICUgb3B0aW9ucy5sZW5ndGg7XG4gIGlmIChrZXkgPT09IFwiQXJyb3dVcFwiKSBuZXh0ID0gKH5wcmV2ID8gcHJldiA6IG9wdGlvbnMubGVuZ3RoKSAtIDE7XG4gIGlmICh+cHJldikge1xuICAgIGlmIChrZXkgPT09IFwiSG9tZVwiIHx8IGtleSA9PT0gXCJQYWdlVXBcIikgbmV4dCA9IDA7XG4gICAgaWYgKGtleSA9PT0gXCJFbmRcIiB8fCBrZXkgPT09IFwiUGFnZURvd25cIikgbmV4dCA9IG9wdGlvbnMubGVuZ3RoIC0gMTtcbiAgICBpZiAoa2V5ID09PSBcIkVudGVyXCIpIHtcbiAgICAgIG9wdGlvbnNbcHJldl0uY2xpY2soKTtcbiAgICAgIHJldHVybiBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICB9XG4gIGlmIChvcHRpb25zW25leHRdKSBmb3IgKGNvbnN0IG9wdGlvbiBvZiBvcHRpb25zKSBvcHRpb24udGFiSW5kZXggPSAtMTtcbiAgaWYgKG9wdGlvbnNbbmV4dF0pIGUucHJldmVudERlZmF1bHQoKTtcbiAgKF9hMiA9IG9wdGlvbnNbbmV4dF0gfHwgc2VsZi5faW5wdXQpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuZm9jdXMoKTtcbiAgaWYgKCFvcHRpb25zW25leHRdICYmIGtleSA9PT0gXCJBcnJvd1VwXCIpXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB2YXIgX2EzO1xuICAgICAgcmV0dXJuIChfYTMgPSBzZWxmLl9pbnB1dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy5zZXRTZWxlY3Rpb25SYW5nZSg5OTksIDk5OSk7XG4gICAgfSk7XG59O1xudmFyIG9uSW5wdXQgPSAoc2VsZiwgZSkgPT4ge1xuICBjb25zdCB7IF90ZXh0cywgX3Jvb3QsIF9pbnB1dCwgb3B0aW9ucyB9ID0gc2VsZjtcbiAgY29uc3QgdmFsdWUgPSAoX2lucHV0ID09IG51bGwgPyB2b2lkIDAgOiBfaW5wdXQudmFsdWUudG9Mb3dlckNhc2UoKS50cmltKCkpIHx8IFwiXCI7XG4gIGNvbnN0IGZpbHRlciA9ICFzZWxmLmhhc0F0dHJpYnV0ZShcImRhdGEtbm9maWx0ZXJcIik7XG4gIGNvbnN0IGhpZGRlbiA9IFtdO1xuICBjb25zdCB2aXNpYmxlID0gW107XG4gIGZvciAoY29uc3Qgb3B0IG9mIG9wdGlvbnMpIHtcbiAgICBjb25zdCBoaWRlID0gb3B0LmRpc2FibGVkIHx8IG9wdC5oaWRkZW4gfHwgZmlsdGVyICYmICFvcHQubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh2YWx1ZSk7XG4gICAgKGhpZGUgPyBoaWRkZW4gOiB2aXNpYmxlKS5wdXNoKG9wdCk7XG4gIH1cbiAgZm9yIChjb25zdCBvcHQgb2YgaGlkZGVuKSBhdHRyKG9wdCwgXCJhcmlhLWhpZGRlblwiLCBcInRydWVcIik7XG4gIGZvciAoY29uc3Qgb3B0IG9mIHZpc2libGUpIGF0dHIob3B0LCBcImFyaWEtaGlkZGVuXCIsIFwiZmFsc2VcIik7XG4gIGNvbnN0IHRvdGFsID0gdmlzaWJsZS5sZW5ndGg7XG4gIGNsZWFyVGltZW91dChMSVZFX1RJTUVSKTtcbiAgaWYgKChlID09IG51bGwgPyB2b2lkIDAgOiBlLnR5cGUpID09PSBcImlucHV0XCIgJiYgdmFsdWUgIT09IHNlbGYuX3ZhbHVlKVxuICAgIExJVkVfVElNRVIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IHRleHQgPSBgJHshdG90YWwgJiYgc2VsZi5pbm5lclRleHQudHJpbSgpIHx8IGAke190ZXh0c1t0b3RhbCA9PT0gMSA/IFwic2luZ3VsYXJcIiA6IFwicGx1cmFsXCJdfWAucmVwbGFjZShcIiVkXCIsIGAke3RvdGFsfWApfWA7XG4gICAgICBpZiAoIXNlbGYuaGlkZGVuICYmIChfcm9vdCA9PSBudWxsID8gdm9pZCAwIDogX3Jvb3QuYWN0aXZlRWxlbWVudCkgPT09IF9pbnB1dCkgc3BlYWsodGV4dCk7XG4gICAgICBzZWxmLl92YWx1ZSA9IHZhbHVlO1xuICAgIH0sIDFlMyk7XG4gIGlmIChJU19JT1MpXG4gICAgdmlzaWJsZS5tYXAoKG9wdCwgaWR4KSA9PiBhdHRyKG9wdCwgXCJ0aXRsZVwiLCBgJHtpZHggKyAxfS8ke3RvdGFsfWApKTtcbn07XG5pZiAoSVNfQlJPV1NFUilcbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEhUTUxJbnB1dEVsZW1lbnQucHJvdG90eXBlLCBcImxpc3RcIiwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgIGdldCgpIHtcbiAgICAgIHJldHVybiBnZXRSb290KHRoaXMpLmdldEVsZW1lbnRCeUlkKGF0dHIodGhpcywgXCJsaXN0XCIpIHx8IFwiXCIpO1xuICAgIH1cbiAgfSk7XG5jdXN0b21FbGVtZW50cy5kZWZpbmUoXCJ1LWRhdGFsaXN0XCIsIFVIVE1MRGF0YUxpc3RFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxEYXRhTGlzdEVsZW1lbnQsIFVIVE1MRGF0YUxpc3RTaGFkb3dSb290LCBVSFRNTERhdGFMaXN0U3R5bGUgfTtcbiIsImltcG9ydCB7IGZsaXAsIHR5cGUgUGxhY2VtZW50LCBzaGlmdCwgc2l6ZSB9IGZyb20gXCJAZmxvYXRpbmctdWkvZG9tXCI7XG5pbXBvcnQgeyBVSFRNTENvbWJvYm94RWxlbWVudCB9IGZyb20gXCJAdS1lbGVtZW50cy91LWNvbWJvYm94XCI7XG5pbXBvcnQgeyBVSFRNTERhdGFMaXN0RWxlbWVudCB9IGZyb20gXCJAdS1lbGVtZW50cy91LWRhdGFsaXN0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHtcblx0YW5jaG9yUG9zaXRpb24sXG5cdGF0dHIsXG5cdGlzSW5wdXRMaWtlLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdG9uTXV0YXRpb24sXG5cdFFVSUNLX0VWRU5ULFxuXHR1c2VJZCxcbn0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19GSUVMRCA9IHN0eWxlcy5maWVsZC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBDU1NfVkFMSURBVElPTlMgPSBzdHlsZXMudmFsaWRhdGlvbi5zcGxpdChcIiBcIik7XG5jb25zdCBDU1NfVkFMSURBVElPTiA9IENTU19WQUxJREFUSU9OU1swXTtcblxuY29uc3QgZ2V0VGV4dCA9IChzdHlsZTogQ1NTU3R5bGVEZWNsYXJhdGlvbiwga2V5OiBzdHJpbmcpID0+XG5cdHN0eWxlLmdldFByb3BlcnR5VmFsdWUoYC0tbXRkcy10ZXh0LSR7a2V5fWApPy5zbGljZSgxLCAtMSkgfHwgXCJcIjsgLy8gc2xpY2UgdG8gdHJpbSBxdW90ZXNcblxuZnVuY3Rpb24gaGFuZGxlRmllbGRNdXRhdGlvbihcblx0ZmllbGRzOiBIVE1MQ29sbGVjdGlvbk9mPEVsZW1lbnQ+LFxuXHR2YWxpZGF0ZT86IGJvb2xlYW4sXG4pIHtcblx0Zm9yIChjb25zdCBmaWVsZCBvZiBmaWVsZHMpXG5cdFx0aWYgKGZpZWxkLmlzQ29ubmVjdGVkKSB7XG5cdFx0XHRjb25zdCBsYWJlbHM6IEhUTUxMYWJlbEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0Y29uc3QgZGVzY3M6IEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0Y29uc3QgdmFsaWRzOiBFbGVtZW50W10gPSBbXTtcblx0XHRcdGxldCBjb21ib2JveDogVUhUTUxDb21ib2JveEVsZW1lbnQgfCBudWxsID0gbnVsbDtcblx0XHRcdGxldCBpbnB1dDogSFRNTElucHV0RWxlbWVudCB8IG51bGwgPSBudWxsO1xuXHRcdFx0bGV0IHZhbGlkID0gdHJ1ZTtcblxuXHRcdFx0Zm9yIChjb25zdCBlbCBvZiBmaWVsZC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikpIHtcblx0XHRcdFx0aWYgKGVsIGluc3RhbmNlb2YgSFRNTExhYmVsRWxlbWVudCkgbGFiZWxzLnB1c2goZWwpO1xuXHRcdFx0XHRlbHNlIGlmIChlbCBpbnN0YW5jZW9mIFVIVE1MQ29tYm9ib3hFbGVtZW50KSBjb21ib2JveCA9IGVsO1xuXHRcdFx0XHRlbHNlIGlmIChpc0lucHV0TGlrZShlbCkgJiYgIWVsLmhpZGRlbikgaW5wdXQgPSBlbDtcblx0XHRcdFx0ZWxzZSBpZiAoZWwuaGFzQXR0cmlidXRlKFwiZGF0YS1kZXNjcmlwdGlvblwiKSkgZGVzY3MucHVzaChlbCk7XG5cdFx0XHRcdGVsc2UgaWYgKGVsLmNsYXNzTGlzdC5jb250YWlucyhDU1NfVkFMSURBVElPTikpIHtcblx0XHRcdFx0XHR2YWxpZCA9IGF0dHIoZWwsIFwiZGF0YS1jb2xvclwiKSA9PT0gXCJzdWNjZXNzXCIgfHwgIWVsLmNsaWVudEhlaWdodDsgLy8gT25seSBzZXQgaW52YWxpZCBpZiBWYWxpZGF0aW9uIGlzIHZpc2libGVcblx0XHRcdFx0XHR2YWxpZHMucHVzaChlbCk7XG5cdFx0XHRcdFx0ZGVzY3MudW5zaGlmdChlbCk7XG5cdFx0XHRcdH0gZWxzZSBpZiAoZWwgaW5zdGFuY2VvZiBIVE1MUGFyYWdyYXBoRWxlbWVudClcblx0XHRcdFx0XHRkZXNjcy5zb21lKChkZXNjKSA9PiBkZXNjLmNvbnRhaW5zKGVsKSkgfHwgZGVzY3MucHVzaChlbCk7IC8vIE9ubHkgYWRkIGlmIG5vdCBhbHJlYWR5IGluc2lkZSBkZXNjcmlwdGlvblxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoaW5wdXQpIHtcblx0XHRcdFx0Zm9yIChjb25zdCBsYWJlbCBvZiBsYWJlbHMpIGxhYmVsLmh0bWxGb3IgPSB1c2VJZChpbnB1dCk7XG5cdFx0XHRcdGlmICh2YWxpZGF0ZSAmJiBhdHRyKGZpZWxkLCBcImRhdGEtdmFsaWRhdGlvblwiKSA9PT0gXCJmb3JtXCIpIHtcblx0XHRcdFx0XHR2YWxpZCA9IGlucHV0Lm1hdGNoZXMoXCI6dmFsaWRcIik7XG5cdFx0XHRcdFx0Zm9yIChjb25zdCBlbCBvZiB2YWxpZHMpIGF0dHIoZWwsIFwiaGlkZGVuXCIsIHZhbGlkID8gXCJcIiA6IG51bGwpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlbmRlckNvbWJvYm94KGNvbWJvYm94KTtcblx0XHRcdFx0cmVuZGVyQ291bnRlcihpbnB1dCk7XG5cdFx0XHRcdHJlbmRlclRleHRhcmVhU2l6ZShpbnB1dCk7XG5cdFx0XHRcdGF0dHIoaW5wdXQsIFwiYXJpYS1kZXNjcmliZWRieVwiLCBkZXNjcy5tYXAodXNlSWQpLmpvaW4oXCIgXCIpIHx8IG51bGwpOyAvLyBSZW1vdmUgaWYgZW1wdHlcblx0XHRcdFx0YXR0cihpbnB1dCwgXCJhcmlhLWludmFsaWRcIiwgYCR7IXZhbGlkfWApO1xuXHRcdFx0fVxuXHRcdH1cbn1cblxuLy8gaU9TIGRvZXMgbm90IHN1cHBvcnQgZmllbGQtc2l6aW5nOiBjb250ZW50LCBzbyB3ZSBuZWVkIHRvIG1hbnVhbGx5IHJlc2l6ZVxuZnVuY3Rpb24gcmVuZGVyVGV4dGFyZWFTaXplKHRleHRhcmVhOiBFbGVtZW50KSB7XG5cdGlmICh0ZXh0YXJlYSBpbnN0YW5jZW9mIEhUTUxUZXh0QXJlYUVsZW1lbnQpIHtcblx0XHR0ZXh0YXJlYS5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tbXRkcy10ZXh0YXJlYS1oZWlnaHRcIiwgXCJhdXRvXCIpO1xuXHRcdHRleHRhcmVhLnN0eWxlLnNldFByb3BlcnR5KFxuXHRcdFx0XCItLW10ZHMtdGV4dGFyZWEtaGVpZ2h0XCIsXG5cdFx0XHRgJHt0ZXh0YXJlYS5zY3JvbGxIZWlnaHR9cHhgLFxuXHRcdCk7XG5cdH1cbn1cblxuLy8gU2V0dXAgdHJhbnNsYXRpb25zIGZyb20gQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzXG5mdW5jdGlvbiByZW5kZXJDb21ib2JveChlbDogVUhUTUxDb21ib2JveEVsZW1lbnQgfCBudWxsKSB7XG5cdGNvbnN0IHsgY29udHJvbCwgbGlzdCB9ID0gZWwgfHwge307XG5cblx0aWYgKGVsICYmIGxpc3QgJiYgIWVsLmhhc0F0dHJpYnV0ZShcImRhdGEtc3ItYWRkZWRcIikpIHtcblx0XHRjb25zdCBzdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItYWRkZWRcIiwgZ2V0VGV4dChzdHlsZSwgXCJjb21ib2JveC1hZGRlZFwiKSk7XG5cdFx0YXR0cihlbCwgXCJkYXRhLXNyLWVtcHR5XCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtZW1wdHlcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1mb3VuZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWZvdW5kXCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItaW52YWxpZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LWludmFsaWRcIikpO1xuXHRcdGF0dHIoZWwsIFwiZGF0YS1zci1vZlwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LW9mXCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItcmVtb3ZlXCIsIGdldFRleHQoc3R5bGUsIFwiY29tYm9ib3gtcmVtb3ZlXCIpKTtcblx0XHRhdHRyKGVsLCBcImRhdGEtc3ItcmVtb3ZlZFwiLCBnZXRUZXh0KHN0eWxlLCBcImNvbWJvYm94LXJlbW92ZWRcIikpO1xuXHRcdGF0dHIobGlzdCwgXCJkYXRhLXNyLXBsdXJhbFwiLCBnZXRUZXh0KHN0eWxlLCBcImRhdGFsaXN0LXBsdXJhbFwiKSk7XG5cdFx0YXR0cihsaXN0LCBcImRhdGEtc3Itc2luZ3VsYXJcIiwgZ2V0VGV4dChzdHlsZSwgXCJkYXRhbGlzdC1zaW5ndWxhclwiKSk7XG5cdH1cblx0aWYgKGxpc3QgJiYgY29udHJvbCAmJiAhbGlzdC5oYXNBdHRyaWJ1dGUoXCJwb3BvdmVyXCIpKSB7XG5cdFx0YXR0cihsaXN0LCBcInBvcG92ZXJcIiwgXCJtYW51YWxcIik7XG5cdFx0YXR0cihjb250cm9sLCBcInBvcG92ZXJ0YXJnZXRcIiwgdXNlSWQobGlzdCkpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlbmRlckNvdW50ZXIoaW5wdXQ6IEhUTUxJbnB1dEVsZW1lbnQpIHtcblx0Y29uc3QgZWwgPSBpbnB1dD8ubmV4dEVsZW1lbnRTaWJsaW5nO1xuXHRjb25zdCBsaW1pdCA9IGVsICYmIGF0dHIoZWwsIFwiZGF0YS1jb3VudFwiKTtcblxuXHRpZiAoZWwgJiYgbGltaXQpIHtcblx0XHRjb25zdCByZW1haW5kZXIgPSBOdW1iZXIobGltaXQpIC0gaW5wdXQudmFsdWUubGVuZ3RoO1xuXHRcdGNvbnN0IG5leHRJbnZhbGlkID0gcmVtYWluZGVyIDwgMDtcblx0XHRjb25zdCBwcmV2SW52YWxpZCA9IGF0dHIoZWwsIFwiYXJpYS1saXZlXCIpID09PSBcInBvbGl0ZVwiO1xuXHRcdGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWwgfHwgaW5wdXQpO1xuXHRcdGNvbnN0IG92ZXIgPSBnZXRUZXh0KHN0eWxlLCBcImNvdW50LW92ZXJcIik7XG5cdFx0Y29uc3QgdW5kZXIgPSBnZXRUZXh0KHN0eWxlLCBcImNvdW50LXVuZGVyXCIpO1xuXG5cdFx0aWYgKHByZXZJbnZhbGlkICE9PSBuZXh0SW52YWxpZCkge1xuXHRcdFx0YXR0cihlbCwgXCJhcmlhLWxpdmVcIiwgbmV4dEludmFsaWQgPyBcInBvbGl0ZVwiIDogXCJvZmZcIik7XG5cdFx0XHRmb3IgKGNvbnN0IGNzcyBvZiBDU1NfVkFMSURBVElPTlMpIGVsLmNsYXNzTGlzdC50b2dnbGUoY3NzLCBuZXh0SW52YWxpZCk7XG5cdFx0fVxuXHRcdGVsLnRleHRDb250ZW50ID0gKG5leHRJbnZhbGlkID8gb3ZlciA6IHVuZGVyKS5yZXBsYWNlKFxuXHRcdFx0XCIlZFwiLFxuXHRcdFx0YCR7TWF0aC5hYnMocmVtYWluZGVyKX1gLFxuXHRcdCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRmllbGRUb2dnbGUoZXZlbnQ6IEV2ZW50ICYgeyBuZXdTdGF0ZT86IHN0cmluZyB9KSB7XG5cdGlmIChldmVudC50YXJnZXQgaW5zdGFuY2VvZiBVSFRNTERhdGFMaXN0RWxlbWVudCkge1xuXHRcdGNvbnN0IGxpc3QgPSBldmVudC50YXJnZXQ7XG5cdFx0Y29uc3Qgcm9vdCA9IGxpc3QuZ2V0Um9vdE5vZGUoKSBhcyBTaGFkb3dSb290IHwgbnVsbDtcblx0XHRjb25zdCBhbmNob3IgPSByb290Py5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pihcblx0XHRcdGBbcG9wb3ZlcnRhcmdldD1cIiR7bGlzdC5pZH1cIl1gLFxuXHRcdCk7XG5cblx0XHRpZiAoZXZlbnQubmV3U3RhdGUgPT09IFwiY2xvc2VkXCIpIGFuY2hvclBvc2l0aW9uKGxpc3QsIGZhbHNlKTtcblx0XHRlbHNlIGlmIChhbmNob3IpXG5cdFx0XHRhbmNob3JQb3NpdGlvbihsaXN0LCBhbmNob3IsIHtcblx0XHRcdFx0cGxhY2VtZW50OiAoYXR0cihsaXN0LCBcImRhdGEtcG9zaXRpb25cIikgPz8gXCJib3R0b21cIikgYXMgUGxhY2VtZW50LFxuXHRcdFx0XHRtaWRkbGV3YXJlOiBbXG5cdFx0XHRcdFx0ZmxpcCgpLFxuXHRcdFx0XHRcdHNoaWZ0KCksXG5cdFx0XHRcdFx0c2l6ZSh7XG5cdFx0XHRcdFx0XHRwYWRkaW5nOiAxMCxcblx0XHRcdFx0XHRcdGFwcGx5KHsgYXZhaWxhYmxlSGVpZ2h0IH0pIHtcblx0XHRcdFx0XHRcdFx0bGlzdC5zdHlsZS53aWR0aCA9IGAke2FuY2hvci5vZmZzZXRXaWR0aH1weGA7XG5cdFx0XHRcdFx0XHRcdGxpc3Quc3R5bGUubWF4SGVpZ2h0ID0gYCR7TWF0aC5tYXgoNTAsIGF2YWlsYWJsZUhlaWdodCl9cHhgO1xuXHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XSxcblx0XHRcdH0pO1xuXHR9XG59XG4vLyBVcGRhdGUgd2hlbiB0eXBpbmdcbmZ1bmN0aW9uIGhhbmRsZUZpZWxkSW5wdXQoZXZlbnQ6IEV2ZW50KSB7XG5cdGlmIChpc0lucHV0TGlrZShldmVudC50YXJnZXQpKSB7XG5cdFx0cmVuZGVyQ291bnRlcihldmVudC50YXJnZXQpO1xuXHRcdHJlbmRlclRleHRhcmVhU2l6ZShldmVudC50YXJnZXQpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZpZWxkVmFsZGlhdGlvbihldmVudDogRXZlbnQpIHtcblx0Y29uc3QgZmllbGQgPSAoZXZlbnQudGFyZ2V0IGFzIEVsZW1lbnQpPy5jbG9zZXN0Py4oYC4ke0NTU19GSUVMRH1gKTtcblx0aWYgKGV2ZW50LnR5cGUgPT09IFwiaW52YWxpZFwiICYmIGZpZWxkKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpOyAvLyBQcmV2ZW50IGJyb3dzZXJzIGZyb20gc2hvd2luZyBkZWZhdWx0IHZhbGlkYXRpb24gYnViYmxlc1xuXHRoYW5kbGVGaWVsZE11dGF0aW9uKGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ1NTX0ZJRUxEKSwgdHJ1ZSk7IC8vIFVwZGF0ZSBzdGF0ZVxufVxuXG5vbkxvYWRlZCgoKSA9PiB7XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfRklFTEQsIGhhbmRsZUZpZWxkTXV0YXRpb24pO1xuXHRvbihkb2N1bWVudCwgXCJpbnB1dFwiLCBoYW5kbGVGaWVsZElucHV0LCBRVUlDS19FVkVOVCk7XG5cdG9uKGRvY3VtZW50LCBcImludmFsaWQsc3VibWl0XCIsIGhhbmRsZUZpZWxkVmFsZGlhdGlvbiwgdHJ1ZSk7IC8vIFVzZSBjYXB0dXJlIGFzIGludmFsaWQgYW5kIHN1Ym1pdCBkb2VzIG5vdCBidWJibGVcblx0b24oZG9jdW1lbnQsIFwidG9nZ2xlXCIsIGhhbmRsZUZpZWxkVG9nZ2xlLCBRVUlDS19FVkVOVCk7IC8vIFVzZSBjYXB0dXJlIHNpbmNlIHRvZ2dsZSBkb2VzIG5vdCBidWJibGVcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGF0dHIsIGlzSW5wdXRMaWtlLCBvbkxvYWRlZCwgb25NdXRhdGlvbiwgdXNlSWQgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0ZJRUxEU0VUID0gc3R5bGVzLmZpZWxkc2V0LnNwbGl0KFwiIFwiKVswXTtcbmNvbnN0IENTU19WQUxJREFUSU9OID0gc3R5bGVzLnZhbGlkYXRpb24uc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQVJJQV9ERVNDID0gXCJhcmlhLWRlc2NyaWJlZGJ5XCI7XG5jb25zdCBBUklBX0lOVkFMSUQgPSBcImFyaWEtaW52YWxpZFwiO1xuXG4vLyBVc2luZyBzZXRUaW1lb3V0IHRvIGVuc3VyZSBpdCBydW5zIGFmdGVyIGZpZWxkLW9ic2VydmVyXG5mdW5jdGlvbiBoYW5kbGVGaWVsZHNldE11dGF0aW9uKGZpZWxkc2V0czogSFRNTENvbGxlY3Rpb25PZjxFbGVtZW50Pikge1xuXHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRmb3IgKGNvbnN0IGZpZWxkc2V0IG9mIGZpZWxkc2V0cylcblx0XHRcdGlmIChmaWVsZHNldC5pc0Nvbm5lY3RlZCkge1xuXHRcdFx0XHRjb25zdCBpbnB1dHM6IEhUTUxJbnB1dEVsZW1lbnRbXSA9IFtdO1xuXHRcdFx0XHRsZXQgdmFsaWRJZDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG5cdFx0XHRcdGxldCB2YWxpZCA9IHRydWU7XG5cblx0XHRcdFx0Zm9yIChjb25zdCBlbCBvZiBmaWVsZHNldC5nZXRFbGVtZW50c0J5VGFnTmFtZShcIipcIikpIHtcblx0XHRcdFx0XHRpZiAoZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19WQUxJREFUSU9OKSkge1xuXHRcdFx0XHRcdFx0dmFsaWQgPSBhdHRyKGVsLCBcImRhdGEtY29sb3JcIikgPT09IFwic3VjY2Vzc1wiIHx8ICFlbC5jbGllbnRIZWlnaHQ7IC8vIE9ubHkgc2V0IGludmFsaWQgaWYgVmFsaWRhdGlvbiBpcyB2aXNpYmxlXG5cdFx0XHRcdFx0XHR2YWxpZElkID0gdXNlSWQoZWwpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoaXNJbnB1dExpa2UoZWwpKSBpbnB1dHMucHVzaChlbCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykge1xuXHRcdFx0XHRcdGNvbnN0IGRlc2MgPSBhdHRyKGlucHV0LCBBUklBX0RFU0MpPy5yZXBsYWNlKHZhbGlkSWQgfHwgXCIjXCIsIFwiXCIpO1xuXG5cdFx0XHRcdFx0YXR0cihpbnB1dCwgQVJJQV9ERVNDLCBgJHt2YWxpZElkIHx8IFwiXCJ9ICR7ZGVzYyB8fCBcIlwifWAudHJpbSgpKTtcblx0XHRcdFx0XHRhdHRyKGlucHV0LCBBUklBX0lOVkFMSUQsIGAkeyF2YWxpZH1gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT5cblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19GSUVMRFNFVCwgaGFuZGxlRmllbGRzZXRNdXRhdGlvbiksXG4pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IG9uTG9hZGVkLCBvbk11dGF0aW9uLCB0YWcgfSBmcm9tIFwiLi4vdXRpbHNcIjtcblxuY29uc3QgQ1NTX0xPR08gPSBzdHlsZXMubG9nby5zcGxpdChcIiBcIilbMF07XG5cbmZ1bmN0aW9uIGhhbmRsZUxvZ29NdXRhdGlvbihbbG9nb106IEhUTUxDb2xsZWN0aW9uT2Y8SFRNTEVsZW1lbnQ+KSB7XG5cdGlmIChsb2dvPy5pc0Nvbm5lY3RlZCAmJiBsb2dvPy5maXJzdEVsZW1lbnRDaGlsZCBpbnN0YW5jZW9mIFNWR1NWR0VsZW1lbnQpIHtcblx0XHRmb3IgKGNvbnN0IGljb24gb2YgZG9jdW1lbnQuaGVhZC5xdWVyeVNlbGVjdG9yQWxsKFwibGlua1tyZWx+PSdpY29uJ11cIikpXG5cdFx0XHRpY29uLnNldEF0dHJpYnV0ZShcInJlbFwiLCBcImRpc2FibGVkXCIpOyAvLyBEaXNhYmxlIHByZXZpb3VzIGljb24gKGJ1dCBub3QgcmVtb3ZlIGlzIGFzIHRoaXMgbWFrZXMgTmV4dC5qcyBzYWQpXG5cblx0XHRjb25zdCBzdmcgPSBsb2dvLmZpcnN0RWxlbWVudENoaWxkO1xuXHRcdGNvbnN0IGlzRG90ID0gbG9nbz8uaGFzQXR0cmlidXRlKFwiZGF0YS1lbnZcIik7XG5cdFx0Y29uc3Qgc3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShzdmcpO1xuXHRcdGNvbnN0IHRleHQgPSBzdHlsZS5nZXRQcm9wZXJ0eVZhbHVlKFwiY29sb3JcIik7XG5cdFx0Y29uc3QgYmFjayA9IHN0eWxlLmdldFByb3BlcnR5VmFsdWUoXCItLW10ZHMtbG9nby1jb2xvclwiKTtcblx0XHRjb25zdCBpY29uID0gc3ZnLm91dGVySFRNTFxuXHRcdFx0LnJlcGxhY2UoL1xcbisvZywgXCIgXCIpIC8vIFByZXZlbnQgbGluZSBicmVha3Ncblx0XHRcdC5yZXBsYWNlKC8oZmlsbHx3aWR0aHxoZWlnaHR8eG1sbnMpPVwiW15cIl0rXCIvZ2ksIFwiXCIpXG5cdFx0XHQucmVwbGFjZShcIjxzdmdcIiwgYDxzdmcgd2lkdGg9XCI0MFwiIGhlaWdodD1cIjQwXCIgZmlsbD1cIiR7dGV4dH1cImApO1xuXG5cdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChcblx0XHRcdHRhZyhcImxpbmtcIiwge1xuXHRcdFx0XHRocmVmOiBgZGF0YTppbWFnZS9zdmcreG1sLCR7ZW5jb2RlVVJJQ29tcG9uZW50KGA8c3ZnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zycgdmlld0JveD0nMCAwIDU1IDU1Jz48cmVjdCBmaWxsPScke2lzRG90ID8gXCJub25lXCIgOiBiYWNrfScgd2lkdGg9JzUxJyBoZWlnaHQ9JzUxJyB4PScyJyB5PScyJyBzdHJva2U9JyR7dGV4dH0nIHN0cm9rZS1kYXNoYXJyYXk9JzAuMDkgNi4zOCcgc3Ryb2tlLWxpbmVjYXA9J3JvdW5kJyBzdHJva2Utb3BhY2l0eT0nJHtpc0RvdCA/IDAuNiA6IDB9JyBzdHJva2Utd2lkdGg9JzIuMycgcng9JzI1LjUnLz48ZyB0cmFuc2Zvcm09XCJ0cmFuc2xhdGUoNy41IDcuNSlcIj4ke2ljb259PC9nPjwvc3ZnPmApfWAsXG5cdFx0XHRcdHJlbDogXCJpY29uXCIsXG5cdFx0XHR9KSxcblx0XHQpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+XG5cdG9uTXV0YXRpb24oZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCBDU1NfTE9HTywgaGFuZGxlTG9nb011dGF0aW9uKSxcbik7XG4iLCJpbXBvcnQgeyBmbGlwLCB0eXBlIFBsYWNlbWVudCwgc2hpZnQsIHNpemUgfSBmcm9tIFwiQGZsb2F0aW5nLXVpL2RvbVwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IGFuY2hvclBvc2l0aW9uLCBhdHRyLCBvbiwgb25Mb2FkZWQsIFFVSUNLX0VWRU5UIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19QT1BPVkVSID0gc3R5bGVzLnBvcG92ZXIuc3BsaXQoXCIgXCIpWzBdO1xuY29uc3QgQ1NTX0FVVE8gPSBgX210ZHMtcG9wb3Zlci1hdXRvYDtcblxudHlwZSBFdmVudFRvZ2dsZSA9IEV2ZW50ICYgUGFydGlhbDxUb2dnbGVFdmVudD47XG5cbmZ1bmN0aW9uIGhhbmRsZVBvcG92ZXJUb2dnbGUoeyB0YXJnZXQ6IGVsLCBuZXdTdGF0ZSB9OiBFdmVudFRvZ2dsZSkge1xuXHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBlbC5jbGFzc0xpc3QuY29udGFpbnMoQ1NTX1BPUE9WRVIpKSB7XG5cdFx0Y29uc3QgaXNDbG9zaW5nID0gbmV3U3RhdGUgPT09IFwiY2xvc2VkXCI7XG5cdFx0Y29uc3QgaXNDb250YWluID0gYXR0cihlbCwgXCJkYXRhLW92ZXJzY3JvbGxcIikgPT09IFwiY29udGFpblwiO1xuXHRcdGNvbnN0IGFuY2hvciA9IChlbC5nZXRSb290Tm9kZSgpIGFzIFNoYWRvd1Jvb3QpPy5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50Pihcblx0XHRcdGBbcG9wb3ZlcnRhcmdldD1cIiR7ZWwuaWR9XCJdYCxcblx0XHQpO1xuXG5cdFx0aWYgKGlzQ2xvc2luZykgYW5jaG9yUG9zaXRpb24oZWwsIGZhbHNlKTtcblx0XHRlbHNlIGlmIChhbmNob3IpXG5cdFx0XHRhbmNob3JQb3NpdGlvbihlbCwgYW5jaG9yLCB7XG5cdFx0XHRcdHBsYWNlbWVudDogKGF0dHIoZWwsIFwiZGF0YS1wb3NpdGlvblwiKSB8fCBcImJvdHRvbVwiKSBhcyBQbGFjZW1lbnQsXG5cdFx0XHRcdG1pZGRsZXdhcmU6IFtmbGlwKCksIHNoaWZ0KHsgcGFkZGluZzogMTAgfSldLmNvbmNhdChcblx0XHRcdFx0XHRpc0NvbnRhaW5cblx0XHRcdFx0XHRcdD8gc2l6ZSh7XG5cdFx0XHRcdFx0XHRcdFx0cGFkZGluZzogMTAsXG5cdFx0XHRcdFx0XHRcdFx0YXBwbHkoeyBhdmFpbGFibGVIZWlnaHQgfSkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZWwuc3R5bGUubWF4SGVpZ2h0ID0gYCR7TWF0aC5tYXgoNTAsIGF2YWlsYWJsZUhlaWdodCl9cHhgO1xuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdH0pXG5cdFx0XHRcdFx0XHQ6IFtdLFxuXHRcdFx0XHQpLFxuXHRcdFx0fSk7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlUG9wb3ZlckJlZm9yZXRvZ2dsZSh7IHRhcmdldDogZWwsIG5ld1N0YXRlIH06IEV2ZW50VG9nZ2xlKSB7XG5cdGlmIChcblx0XHRuZXdTdGF0ZSA9PT0gXCJvcGVuXCIgJiZcblx0XHRlbCBpbnN0YW5jZW9mIEhUTUxFbGVtZW50ICYmXG5cdFx0ZWwuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19QT1BPVkVSKSAmJlxuXHRcdGF0dHIoZWwsIFwicG9wb3ZlclwiKSAhPT0gXCJtYW51YWxcIlxuXHQpIHtcblx0XHRlbC5jbGFzc0xpc3QuYWRkKENTU19BVVRPKTtcblx0XHRhdHRyKGVsLCBcInBvcG92ZXJcIiwgXCJtYW51YWxcIik7IC8vIE1ha2UgbWFudWFsIHRvIHByZXZlbnQgY2xvc2luZyB3aGVuIGNsaWNraW5nIHNjcm9sbGJhclxuXHR9XG59XG5cbi8vIFBvbHlmaWxsIHBvcG92ZXJ0YXJnZXQgZm9yIDxhPiAobm90IHN1cHBvcnRlZCBieSBuYXRpdmUpXG4vLyBhbmQgYXV0b21hdGljYWxseSBhc3N1bWUgcG9wb3ZlcnRhcmdldCBpcyB0aGUgY2xvc2VzdCBwYXJlbnQgcG9wb3ZlclxuLy8gYnV0IHJlc3BlY3QgdGhlIHBvcG92ZXJ0YXJnZXQgYW5kIHBvcG92ZXJ0YXJnZXRhY3Rpb24gYXR0cmlidXRlXG5mdW5jdGlvbiBoYW5kbGVQb3BvdmVyTGlua0NsaWNrKGV2ZW50OiBFdmVudCkge1xuXHRjb25zdCBlbCA9IChldmVudC50YXJnZXQgYXMgRWxlbWVudCk/LmNsb3Nlc3Q/LihcImEsYnV0dG9uXCIpO1xuXHRjb25zdCBpZCA9IGVsICYmIGF0dHIoZWwsIFwicG9wb3ZlcnRhcmdldFwiKTtcblx0Y29uc3QgcG9wID0gaWQgPyBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkgOiBlbD8uY2xvc2VzdChgLiR7Q1NTX1BPUE9WRVJ9YCk7XG5cblx0Ly8gTWFudWFsbHkgY2xvc2UgcG9wb3ZlcnMgd2hlcmUgY2xpY2sgd2FzIG91dHNpZGVcblx0Zm9yIChjb25zdCBvcGVuIG9mIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoQ1NTX0FVVE8pKVxuXHRcdGlmICghb3Blbi5jb250YWlucyhldmVudC50YXJnZXQgYXMgTm9kZSkgJiYgcG9wICE9PSBvcGVuKVxuXHRcdFx0KG9wZW4gYXMgSFRNTEVsZW1lbnQpLmhpZGVQb3BvdmVyKCk7XG5cblx0aWYgKHBvcCAmJiBlbCkge1xuXHRcdGNvbnN0IGFjdGlvbiA9IGF0dHIoZWwsIFwicG9wb3ZlcnRhcmdldGFjdGlvblwiKTtcblx0XHRjb25zdCBvcGVuID0gYWN0aW9uID09PSBcInNob3dcIiB8fCAoYWN0aW9uID09PSBcImhpZGVcIiA/IGZhbHNlIDogdW5kZWZpbmVkKTtcblxuXHRcdC8vIFBvcG92ZXIgY2FuIGJlIGRpc2Nvbm5ldGVkIGJ5IGNsaWNrIGhhbmRsZXIgZGVlcGVyIGRvd24gaW4gdGhlIERPTSB0aHJlZSBiZWZvcmUgcmVhY2hpbmcgZG9jdW1lbnRcblx0XHRpZiAoZWwgaW5zdGFuY2VvZiBIVE1MQnV0dG9uRWxlbWVudCAmJiAhYWN0aW9uICYmIHBvcC5jb250YWlucyhlbCkpIHJldHVybjsgLy8gUmVxdWlyZSBcInBvcG92ZXJ0YXJnZXRhY3Rpb25cIiBhdHRyaWJ1dGUgdG8gbWFrZSBidXR0b25zIGluc2lkZSBwb3BvdmVyIHRvZ2dsZVxuXHRcdGlmIChwb3AgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiBwb3AuaXNDb25uZWN0ZWQgJiYgcG9wLnRvZ2dsZVBvcG92ZXIpIHtcblx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7IC8vIFByZXZlbnQgYnJvd3NlciBwb3BvdmVyIEFQSSBzaW5jZSB3ZSBhcmUgZG9pbmcgaXQgb3Vyc2VsdmVzXG5cdFx0XHRwb3AudG9nZ2xlUG9wb3ZlcihvcGVuKTtcblx0XHR9XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJjbGlja1wiLCBoYW5kbGVQb3BvdmVyTGlua0NsaWNrKTsgLy8gQWxsb3cgYDxhPmAgdG8gdXNlIGBwb3BvdmVydGFyZ2V0YCBhcyB3ZWxsXG5cdG9uKGRvY3VtZW50LCBcInRvZ2dsZVwiLCBoYW5kbGVQb3BvdmVyVG9nZ2xlLCBRVUlDS19FVkVOVCk7IC8vIFVzZSBjYXB0dXJlIHNpbmNlIHRvZ2dsZSBkb2VzIG5vdCBidWJibGVcblx0b24oZG9jdW1lbnQsIFwiYmVmb3JldG9nZ2xlXCIsIGhhbmRsZVBvcG92ZXJCZWZvcmV0b2dnbGUsIFFVSUNLX0VWRU5UKTsgLy8gVXNlIGNhcHR1cmUgc2luY2UgdG9nZ2xlIGRvZXMgbm90IGJ1YmJsZVxufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb24sIG9uTG9hZGVkLCBvbk11dGF0aW9uIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19UQUJMRSA9IHN0eWxlcy50YWJsZS5zcGxpdChcIiBcIilbMF07XG5jb25zdCBJTlRFUkFDVElWRSA9ICdhLGJ1dHRvbixsYWJlbCxpbnB1dCxzZWxlY3QsdGV4dGFyZWEsW3JvbGU9XCJidXR0b25cIl0nO1xuXG5mdW5jdGlvbiBoYW5kbGVUYWJsZU11dGF0aW9uKHRhYmxlczogSFRNTENvbGxlY3Rpb25PZjxIVE1MVGFibGVFbGVtZW50Pikge1xuXHRmb3IgKGNvbnN0IHRhYmxlIG9mIHRhYmxlcykge1xuXHRcdGNvbnN0IHRocyA9IEFycmF5LmZyb20odGFibGUudEhlYWQ/LnJvd3NbMF0/LmNlbGxzIHx8IFtdLCAodGgpID0+XG5cdFx0XHR0aC5pbm5lclRleHQudHJpbSgpLFxuXHRcdCk7XG5cblx0XHRmb3IgKGNvbnN0IHRib2R5IG9mIHRhYmxlLnRCb2RpZXMpXG5cdFx0XHRmb3IgKGNvbnN0IHJvdyBvZiB0Ym9keS5yb3dzKVxuXHRcdFx0XHRmb3IgKGNvbnN0IGNlbGwgb2Ygcm93LmNlbGxzKVxuXHRcdFx0XHRcdGF0dHIoY2VsbCwgXCJkYXRhLXRoXCIsIHRoc1tjZWxsLmNlbGxJbmRleF0gfHwgXCI6ZW1wdHlcIik7XG5cdH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlVGFibGVDbGljayh7IHRhcmdldDogZWwgfTogRXZlbnQpIHtcblx0aWYgKCEoZWwgaW5zdGFuY2VvZiBFbGVtZW50KSkgcmV0dXJuO1xuXHRjb25zdCByb3cgPSBlbC5jbG9zZXN0KFwidHJcIik7XG5cdGNvbnN0IGFjdGlvbiA9IHJvdz8ucXVlcnlTZWxlY3RvcjxIVE1MSW5wdXRFbGVtZW50PignW2RhdGEtY29tbWFuZD1cInJvd1wiXScpO1xuXHRpZiAoYWN0aW9uICYmICFlbC5jbG9zZXN0KElOVEVSQUNUSVZFKSkgYWN0aW9uLmNsaWNrPy4oKTsgLy8gRm9yd2FyZCBjbGljayB0byBkYXRhLWNvbW1hbmQ9XCJyb3dcIiBlbGVtZW50XG59XG5cbm9uTG9hZGVkKCgpID0+IHtcblx0b25NdXRhdGlvbihkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsIENTU19UQUJMRSwgaGFuZGxlVGFibGVNdXRhdGlvbik7XG5cdG9uKGRvY3VtZW50LCBcImNsaWNrXCIsIGhhbmRsZVRhYmxlQ2xpY2spO1xufSk7XG4iLCJpbXBvcnQgc3R5bGVzIGZyb20gXCIuLi9zdHlsZXMubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgYXR0ciwgb24sIG9uTG9hZGVkIH0gZnJvbSBcIi4uL3V0aWxzXCI7XG5cbmNvbnN0IENTU19UT0FTVCA9IHN0eWxlcy50b2FzdC5zcGxpdChcIiBcIilbMF07XG5jb25zdCBBVFRSX1NPUlQgPSBcImRhdGEtc29ydFwiO1xuXG5mdW5jdGlvbiBoYW5kbGVUb2FzdFN0YXRlKHsgYW5pbWF0aW9uTmFtZSwgdGFyZ2V0IH06IFBhcnRpYWw8QW5pbWF0aW9uRXZlbnQ+KSB7XG5cdGNvbnN0IGRpYWxvZyA9IHRhcmdldCBhcyBIVE1MRGlhbG9nRWxlbWVudDtcblx0aWYgKGFuaW1hdGlvbk5hbWUgPT09IHN0eWxlcy5fdG9hc3RUaW1lb3V0KSBkaWFsb2cuY2xvc2UoKTtcblx0aWYgKGFuaW1hdGlvbk5hbWUgIT09IHN0eWxlcy5fdG9hc3RPcGVuKSByZXR1cm47XG5cblx0Y29uc3QgbXMgPSBOdW1iZXIoYXR0cihkaWFsb2csIFwiZGF0YS10aW1lb3V0XCIpKTtcblx0ZGlhbG9nLnN0eWxlLnNldFByb3BlcnR5KFwiLS1tdGRzYy10b2FzdC10aW1lb3V0XCIsIG1zID8gYCR7bXN9bXNgIDogbnVsbCk7XG5cdGRpYWxvZy5oYXNBdHRyaWJ1dGUoQVRUUl9TT1JUKSB8fCBhdHRyKGRpYWxvZywgQVRUUl9TT1JULCBgJHtEYXRlLm5vdygpfWApO1xuXHRhdHRyKGRpYWxvZywgXCJ0YWJpbmRleFwiLCBcIjBcIik7IC8vIE1ha2UgZm9jdXNhYmxlXG5cblx0Ly8gU2V0dXAgbGF5b3V0XG5cdFsuLi5kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsPEhUTUxEaWFsb2dFbGVtZW50PihgLiR7Q1NTX1RPQVNUfVtvcGVuXWApXVxuXHRcdC5zb3J0KChhLCBiKSA9PiBOdW1iZXIoYXR0cihiLCBBVFRSX1NPUlQpKSAtIE51bWJlcihhdHRyKGEsIEFUVFJfU09SVCkpKVxuXHRcdC5yZWR1Y2UoKHRvcCwgdG9hc3QpID0+IHtcblx0XHRcdHRvYXN0LnN0eWxlLnRyYW5zbGF0ZSA9IGAwICR7dG9hc3QgPT09IHRhcmdldCA/IDAgOiB0b3B9cHhgO1xuXHRcdFx0cmV0dXJuIHRvcCArIHRvYXN0Lm9mZnNldEhlaWdodCArIDU7XG5cdFx0fSwgMCk7XG59XG5cbmZ1bmN0aW9uIGhhbmRsZVRvYXN0Q2xpY2soeyB0YXJnZXQsIGNsaWVudFg6IHgsIGNsaWVudFk6IHkgfTogTW91c2VFdmVudCkge1xuXHRpZiAoXG5cdFx0dGFyZ2V0IGluc3RhbmNlb2YgSFRNTERpYWxvZ0VsZW1lbnQgJiZcblx0XHR0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENTU19UT0FTVCkgJiZcblx0XHRhdHRyKHRhcmdldCwgXCJkYXRhLWNsb3NlZGJ5XCIpICE9PSBcIm5vbmVcIlxuXHQpIHtcblx0XHRjb25zdCByZWN0ID0gdGFyZ2V0LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdGNvbnN0IHRvYXN0ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGFyZ2V0KTtcblx0XHRjb25zdCBjbG9zZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRhcmdldCwgXCI6OmFmdGVyXCIpO1xuXHRcdGNvbnN0IHRvcCA9IHJlY3QudG9wICsgTnVtYmVyLnBhcnNlSW50KHRvYXN0LnBhZGRpbmdUb3AsIDEwKTtcblx0XHRjb25zdCBib3R0b20gPSB0b3AgKyBOdW1iZXIucGFyc2VJbnQoY2xvc2UuaGVpZ2h0LCAxMCk7XG5cdFx0Y29uc3QgcmlnaHQgPSByZWN0LnJpZ2h0IC0gTnVtYmVyLnBhcnNlSW50KHRvYXN0LnBhZGRpbmdSaWdodCwgMTApO1xuXHRcdGNvbnN0IGxlZnQgPSByaWdodCAtIE51bWJlci5wYXJzZUludChjbG9zZS53aWR0aCwgMTApO1xuXHRcdGNvbnN0IGlzQ2xvc2UgPSB0b3AgPD0geSAmJiB5IDw9IGJvdHRvbSAmJiBsZWZ0IDw9IHggJiYgeCA8PSByaWdodDtcblxuXHRcdGlmIChpc0Nsb3NlKSB0YXJnZXQuY2xvc2UoKTsgLy8gQ2xpY2sgaXMgb24gOjphZnRlciBlbGVtZW50XG5cdH1cbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJhbmltYXRpb25zdGFydFwiLCBoYW5kbGVUb2FzdFN0YXRlKTtcblx0b24oZG9jdW1lbnQsIFwiY2xpY2tcIiwgaGFuZGxlVG9hc3RDbGljayBhcyBFdmVudExpc3RlbmVyKTtcbn0pO1xuIiwiaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IG9uLCBvbkxvYWRlZCB9IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBDU1NfVE9HR0xFR1JPVVAgPSBgLiR7c3R5bGVzLnRvZ2dsZWdyb3VwLnNwbGl0KFwiIFwiKVswXX1gO1xuXG4vLyBQcmV2ZW50IGJyb3dzZXJzIGZyb20gc2hvd2luZyBkZWZhdWx0IHZhbGlkYXRpb24gYnViYmxlc1xuZnVuY3Rpb24gaGFuZGxlVG9nZ2xlZ3JvdXBLZXlkb3duKGV2ZW50OiBFdmVudCAmIFBhcnRpYWw8S2V5Ym9hcmRFdmVudD4pIHtcblx0Y29uc3QgeyBrZXksIHRhcmdldDogZWwgfSA9IGV2ZW50O1xuXHRjb25zdCBncm91cCA9IGVsIGluc3RhbmNlb2YgSFRNTElucHV0RWxlbWVudCAmJiBlbC5jbG9zZXN0KENTU19UT0dHTEVHUk9VUCk7XG5cblx0aWYgKCFncm91cCkgcmV0dXJuO1xuXHRpZiAoa2V5ID09PSBcIkVudGVyXCIpIGVsLmNsaWNrKCk7XG5cdGlmIChrZXk/LnN0YXJ0c1dpdGgoXCJBcnJvd1wiKSkge1xuXHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0Y29uc3QgaW5wdXRzID0gZ3JvdXAuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJpbnB1dFwiKTtcblx0XHRjb25zdCBpbmRleCA9IFsuLi5pbnB1dHNdLmluZGV4T2YoZWwpO1xuXHRcdGNvbnN0IG1vdmUgPSBrZXkubWF0Y2goL0Fycm93KFJpZ2h0fERvd24pLykgPyAxIDogLTE7XG5cdFx0aW5wdXRzWyhpbnB1dHMubGVuZ3RoICsgaW5kZXggKyBtb3ZlKSAlIGlucHV0cy5sZW5ndGhdPy5mb2N1cygpO1xuXHR9XG59XG5cbm9uTG9hZGVkKCgpID0+IG9uKGRvY3VtZW50LCBcImtleWRvd25cIiwgaGFuZGxlVG9nZ2xlZ3JvdXBLZXlkb3duKSk7XG4iLCJpbXBvcnQgeyBmbGlwLCB0eXBlIFBsYWNlbWVudCwgc2hpZnQgfSBmcm9tIFwiQGZsb2F0aW5nLXVpL2RvbVwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi4vc3R5bGVzLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7XG5cdGFuY2hvclBvc2l0aW9uLFxuXHRhdHRyLFxuXHRJU19CUk9XU0VSLFxuXHRvbixcblx0b25Mb2FkZWQsXG5cdFFVSUNLX0VWRU5ULFxuXHR0YWcsXG59IGZyb20gXCIuLi91dGlsc1wiO1xuXG5jb25zdCBERVNDUklCRURCWSA9IFwiYXJpYS1kZXNjcmliZWRieVwiO1xuY29uc3QgRVNDID0gXCJFc2NhcGVcIjtcbmNvbnN0IExBQkVMTEVEQlkgPSBcImFyaWEtbGFiZWxsZWRieVwiO1xuY29uc3QgUE9TSVRJT05fQ1NTX1BST1BFUlRZID0gXCItLW10ZHMtdG9vbHRpcC1wb3NpdGlvblwiO1xuY29uc3QgVEhST1RUTEVfREVMQVkgPSAzMDA7XG5jb25zdCBUT09MVElQX0lEID0gXCJtdGRzLXRvb2x0aXBcIjtcbmNvbnN0IFRPT0xUSVAgPSBJU19CUk9XU0VSXG5cdD8gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoVE9PTFRJUF9JRCkgfHxcblx0XHR0YWcoXCJkaXZcIiwge1xuXHRcdFx0Y2xhc3M6IHN0eWxlcy5fdG9vbHRpcCxcblx0XHRcdGlkOiBUT09MVElQX0lELFxuXHRcdFx0cG9wb3ZlcjogXCJtYW51YWxcIixcblx0XHR9KVxuXHQ6IG51bGw7XG5cbmxldCBBTkNIT1I6IEVsZW1lbnQgfCBudWxsID0gbnVsbDtcbmxldCBMQVNUX0NBTEwgPSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFk7XG5sZXQgVEhST1RUTEU6IG51bWJlciB8IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+ID0gMDtcblxuZnVuY3Rpb24gaGFuZGxlVG9vbHRpcE1vdmUoeyB0YXJnZXQsIHR5cGUsIGtleSB9OiBFdmVudCAmIHsga2V5Pzogc3RyaW5nIH0pIHtcblx0aWYgKHR5cGUgPT09IFwia2V5ZG93blwiICYmIGtleSAhPT0gRVNDKSByZXR1cm47IC8vIEFsbG93IEVTQyBkaXNtaXNzIHRvIGZvbGxvdyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL3Rvb2x0aXAvXG5cdGNvbnN0IHdhaXQgPSBMQVNUX0NBTEwgKyBUSFJPVFRMRV9ERUxBWSAtIERhdGUubm93KCk7XG5cdGNsZWFyVGltZW91dChUSFJPVFRMRSk7XG5cdFRIUk9UVExFID0gc2V0VGltZW91dChcblx0XHRoYW5kbGVUb29sdGlwTW92ZVRocm90dGxlZCxcblx0XHRNYXRoLm1heCh3YWl0LCAwKSxcblx0XHRrZXkgPT09IEVTQyA/IG51bGwgOiB0YXJnZXQsXG5cdCk7XG59XG5cbi8vIFVzaW5nIGEgdGhyb3R0bGVkIGZ1bmN0aW9uIHRvIGF2b2lkIHBlcmZvcm1hbmNlIGlzc3Vlc1xuZnVuY3Rpb24gaGFuZGxlVG9vbHRpcE1vdmVUaHJvdHRsZWQodGFyZ2V0OiBFbGVtZW50IHwgbnVsbCkge1xuXHRMQVNUX0NBTEwgPSBEYXRlLm5vdygpO1xuXG5cdC8vIEJ1aWxkIGFuZCBhcHBlbmQgdG9vbHRpcCBpZiBub3QgZXhpc3Rpbmdcblx0aWYgKCFUT09MVElQIHx8IHRhcmdldCA9PT0gVE9PTFRJUCkgcmV0dXJuOyAvLyBBbGxvdyB0b29sdGlwIHRvIGJlIGhvdmVyZWQsIGZvbGxvd2luZyBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIxLyNjb250ZW50LW9uLWhvdmVyLW9yLWZvY3VzXG5cdGlmICghVE9PTFRJUD8uaXNDb25uZWN0ZWQpIGRvY3VtZW50LmJvZHkuYXBwZW5kKFRPT0xUSVApOyAvLyBFbnN1cmUgY29ubmVjdGVkXG5cdGxldCBhbmNob3IgPSB0YXJnZXQ/LmNsb3Nlc3Q/LjxFbGVtZW50PihcIltkYXRhLXRvb2x0aXBdXCIpIHx8IG51bGw7XG5cblx0Ly8gTm8gbmVlZCB0byB1cGRhdGVcblx0aWYgKGFuY2hvciA9PT0gQU5DSE9SKSByZXR1cm47XG5cblx0Y29uc3QgY29udGVudCA9IChhbmNob3IgJiYgYXR0cihhbmNob3IsIFwiZGF0YS10b29sdGlwXCIpKSB8fCBcIlwiO1xuXHRjb25zdCBwb3NpdGlvbiA9XG5cdFx0KGFuY2hvciAmJiBhdHRyKGFuY2hvciwgXCJkYXRhLXRvb2x0aXAtcG9zaXRpb25cIikpIHx8XG5cdFx0d2luZG93XG5cdFx0XHQuZ2V0Q29tcHV0ZWRTdHlsZShhbmNob3IgfHwgZG9jdW1lbnQuYm9keSlcblx0XHRcdC5nZXRQcm9wZXJ0eVZhbHVlKFBPU0lUSU9OX0NTU19QUk9QRVJUWSlcblx0XHRcdD8udHJpbSgpIHx8XG5cdFx0XCJ0b3BcIjtcblxuXHRjb25zdCBpc0hpZGRlbiA9XG5cdFx0IWNvbnRlbnQgfHxcblx0XHRjb250ZW50ID09PSBcImZhbHNlXCIgfHxcblx0XHRjb250ZW50ID09PSBcInRydWVcIiB8fFxuXHRcdHBvc2l0aW9uID09PSBcIm5vbmVcIjtcblxuXHRpZiAoaXNIaWRkZW4pIGFuY2hvciA9IG51bGw7IC8vIERvIG5vdCBzaG93IHRvb2x0aXAgaWYgYm9vbGlzaCB2YWx1ZVxuXHRpZiAoYW5jaG9yKSBUT09MVElQLnRleHRDb250ZW50ID0gY29udGVudDsgLy8gT25seSB1cGRhdGUgY29udGVudCBpZiBuZXcgYW5jaG9yXG5cblx0Y29uc3QgaGFkTGFiZWwgPSBBTkNIT1IgJiYgYXR0cihBTkNIT1IsIExBQkVMTEVEQlkpID09PSBUT09MVElQPy5pZDtcblx0Y29uc3QgaGFzTGFiZWwgPVxuXHRcdChhbmNob3IgaW5zdGFuY2VvZiBIVE1MRWxlbWVudFxuXHRcdFx0PyBhbmNob3IuaW5uZXJUZXh0XG5cdFx0XHQ6IGFuY2hvcj8udGV4dENvbnRlbnRcblx0XHQpPy50cmltKCkgfHxcblx0XHRhbmNob3I/Lmhhc0F0dHJpYnV0ZShMQUJFTExFREJZKSB8fFxuXHRcdGFuY2hvcj8uaGFzQXR0cmlidXRlKFwiYXJpYS1sYWJlbFwiKTtcblxuXHRBTkNIT1I/LnJlbW92ZUF0dHJpYnV0ZShoYWRMYWJlbCA/IExBQkVMTEVEQlkgOiBERVNDUklCRURCWSk7IC8vIFVubGluayBwcmV2aW91cyBhbmNob3Jcblx0YW5jaG9yUG9zaXRpb24oVE9PTFRJUCwgZmFsc2UpOyAvLyBSZXNldCBhbmNob3IgcG9zaXRpb25cblxuXHRBTkNIT1IgPSBhbmNob3I7IC8vIFN0b3JlIG5ldyBhbmNob3IgLSBtaWdodCBiZSBudWxsIGlmIG5vIG5ldyBhbmNob3Jcblx0aWYgKEFOQ0hPUikgYXR0cihBTkNIT1IsIGhhc0xhYmVsID8gREVTQ1JJQkVEQlkgOiBMQUJFTExFREJZLCBUT09MVElQPy5pZCk7IC8vIFVzZSB0b29sdGlwIGFzIGRlc2NyaXB0aW9uIGlmIGFsbHJlYWR5IGhhcyBsYWJlbFxuXHRpZiAoQU5DSE9SPy5pc0Nvbm5lY3RlZCkgVE9PTFRJUC5oaWRlUG9wb3ZlcigpOyAvLyBIaWRlIHRvb2x0aXAgc28gaXQgY2FuIGJlIHBsYWNlZCBvbiB0b3AtbGF5ZXIgb24gbmV4dCBzaG93XG5cdFRPT0xUSVAudG9nZ2xlUG9wb3ZlcighIWFuY2hvcik7XG5cdGFuY2hvclBvc2l0aW9uKFRPT0xUSVAsIGFuY2hvciB8fCBmYWxzZSwge1xuXHRcdHBsYWNlbWVudDogcG9zaXRpb24gYXMgUGxhY2VtZW50LFxuXHRcdG1pZGRsZXdhcmU6IFtmbGlwKCksIHNoaWZ0KHsgcGFkZGluZzogMTAgfSldLFxuXHR9KTtcbn1cblxub25Mb2FkZWQoKCkgPT4ge1xuXHRvbihkb2N1bWVudCwgXCJibHVyLGZvY3VzLG1vdXNlb3V0LG1vdXNlb3ZlclwiLCBoYW5kbGVUb29sdGlwTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwia2V5ZG93blwiLCBoYW5kbGVUb29sdGlwTW92ZSwgUVVJQ0tfRVZFTlQpO1xuXHRvbih3aW5kb3csIFwiYmx1clwiLCBoYW5kbGVUb29sdGlwTW92ZSwgUVVJQ0tfRVZFTlQpO1xufSk7XG4iLCIvLyAuLi91dGlscy50c1xudmFyIElTX0JST1dTRVIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiB3aW5kb3cuZG9jdW1lbnQgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5uYXZpZ2F0b3IgIT09IFwidW5kZWZpbmVkXCI7XG52YXIgX2E7XG5JU19CUk9XU0VSICYmIC8vIEB0cy1leHBlY3QtZXJyb3IgVHlwZXNjcmlwdCBoYXMgbm90IGltcGxlbWVudGVkIHVzZXJBZ2VudERhdGEgeWV0IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS83MTM5MjQ3NFxuL15NYWMvaS50ZXN0KCgoX2EgPSBuYXZpZ2F0b3IudXNlckFnZW50RGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hLnBsYXRmb3JtKSB8fCBuYXZpZ2F0b3IucGxhdGZvcm0pO1xudmFyIERJU1BMQVlfQkxPQ0sgPSBcIjpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGRpc3BsYXk6IGJsb2NrIH1cIjtcbnZhciBVSFRNTEVsZW1lbnQgPSB0eXBlb2YgSFRNTEVsZW1lbnQgPT09IFwidW5kZWZpbmVkXCIgPyBjbGFzcyB7XG59IDogSFRNTEVsZW1lbnQ7XG5mdW5jdGlvbiBhdHRyKGVsLCBuYW1lLCB2YWx1ZSkge1xuICBpZiAodmFsdWUgPT09IHZvaWQgMCkgcmV0dXJuIGVsLmdldEF0dHJpYnV0ZShuYW1lKTtcbiAgaWYgKHZhbHVlID09PSBudWxsKSBlbC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gIGVsc2UgaWYgKGVsLmdldEF0dHJpYnV0ZShuYW1lKSAhPT0gdmFsdWUpIGVsLnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7XG4gIHJldHVybiBudWxsO1xufVxudmFyIGV2ZW50cyA9IChhY3Rpb24sIGVsZW1lbnQsIHJlc3QpID0+IHtcbiAgZm9yIChjb25zdCB0eXBlIG9mIHJlc3RbMF0uc3BsaXQoXCIsXCIpKSB7XG4gICAgcmVzdFswXSA9IHR5cGU7XG4gICAgRWxlbWVudC5wcm90b3R5cGVbYCR7YWN0aW9ufUV2ZW50TGlzdGVuZXJgXS5hcHBseShlbGVtZW50LCByZXN0KTtcbiAgfVxufTtcbnZhciBvbiA9IChlbGVtZW50LCAuLi5yZXN0KSA9PiBldmVudHMoXCJhZGRcIiwgZWxlbWVudCwgcmVzdCk7XG52YXIgb2ZmID0gKGVsZW1lbnQsIC4uLnJlc3QpID0+IGV2ZW50cyhcInJlbW92ZVwiLCBlbGVtZW50LCByZXN0KTtcbnZhciBhc0J1dHRvbiA9IChldmVudCkgPT4ge1xuICBjb25zdCBpc0NsaWNrID0gXCJrZXlcIiBpbiBldmVudCAmJiAoZXZlbnQua2V5ID09PSBcIiBcIiB8fCBldmVudC5rZXkgPT09IFwiRW50ZXJcIik7XG4gIGlmIChpc0NsaWNrKSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICBpZiAoaXNDbGljayAmJiBldmVudC50YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkgZXZlbnQudGFyZ2V0LmNsaWNrKCk7XG4gIHJldHVybiBpc0NsaWNrO1xufTtcbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGNyZWF0ZUVsZW1lbnQgPSAodGFnTmFtZSwgdGV4dCwgYXR0cnMpID0+IHtcbiAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO1xuICBpZiAodGV4dCkgZWwudGV4dENvbnRlbnQgPSB0ZXh0O1xuICBpZiAoYXR0cnMpIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBPYmplY3QuZW50cmllcyhhdHRycykpIGF0dHIoZWwsIGtleSwgdmFsKTtcbiAgcmV0dXJuIGVsO1xufTtcbnZhciBjdXN0b21FbGVtZW50cyA9IHtcbiAgZGVmaW5lOiAobmFtZSwgaW5zdGFuY2UpID0+ICFJU19CUk9XU0VSIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQobmFtZSkgfHwgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZShuYW1lLCBpbnN0YW5jZSlcbn07XG52YXIgZGVjbGFyYXRpdmVTaGFkb3dSb290ID0gKHN0eWxlLCBzbG90ID0gXCI8c2xvdD48L3Nsb3Q+XCIpID0+IGA8dGVtcGxhdGUgc2hhZG93cm9vdG1vZGU9XCJvcGVuXCI+JHtzbG90fTxzdHlsZT4ke3N0eWxlfTwvc3R5bGU+PC90ZW1wbGF0ZT5gO1xuXG4vLyB1LWRldGFpbHMudHNcbnZhciBVSFRNTERldGFpbHNTdHlsZSA9IGAke0RJU1BMQVlfQkxPQ0t9XG46OnNsb3R0ZWQodS1zdW1tYXJ5KSB7IGN1cnNvcjogcG9pbnRlcjsgZGlzcGxheTogYmxvY2sgfVxuOjpzbG90dGVkKHUtc3VtbWFyeSk6OmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IG1hcmdpbi1pbmxpbmU6IC4wNWVtIC4zMTI1ZW07IGJvcmRlci1ibG9jazogLjMxMjVlbSBzb2xpZCB0cmFuc3BhcmVudDsgYm9yZGVyLWlubGluZS1zdGFydDogLjVlbSBzb2xpZCB9XG46OnNsb3R0ZWQodS1zdW1tYXJ5W2FyaWEtZXhwYW5kZWQ9XCJ0cnVlXCJdKTo6YmVmb3JlIHsgcm90YXRlOiA5MGRlZyB9XG46aG9zdCA+IFtwYXJ0PVwiZGV0YWlscy1jb250ZW50XCJdOm5vdChbaGlkZGVuPVwiXCJdKSB7IGRpc3BsYXk6IGJsb2NrIH1gO1xudmFyIFVIVE1MRGV0YWlsc1NoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoXG4gIFVIVE1MRGV0YWlsc1N0eWxlLFxuICAnPHNsb3QgbmFtZT1cInN1bW1hcnlcIj48L3Nsb3Q+PHNsb3QgcGFydD1cImRldGFpbHMtY29udGVudFwiIGhpZGRlbj1cInVudGlsLWZvdW5kXCI+PC9zbG90Pidcbik7XG52YXIgVUhUTUxEZXRhaWxzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvLyBVc2luZyB1bmRlcnNjb3JlIGluc3RlYWQgb2YgcHJpdmF0ZSBmaWVsZHMgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgdGhpcy5fY29udGVudCA9IG51bGw7XG4gICAgaWYgKCF0aGlzLnNoYWRvd1Jvb3QpXG4gICAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pLmFwcGVuZChcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBuYW1lOiBcInN1bW1hcnlcIiB9KSxcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInNsb3RcIiwgbnVsbCwgeyBwYXJ0OiBcImRldGFpbHMtY29udGVudFwiIH0pLFxuICAgICAgICBjcmVhdGVFbGVtZW50KFwic3R5bGVcIiwgVUhUTUxEZXRhaWxzU3R5bGUpXG4gICAgICApO1xuICB9XG4gIC8vIFVzaW5nIEVTMjAxNSBzeW50YXggZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gIHN0YXRpYyBnZXQgb2JzZXJ2ZWRBdHRyaWJ1dGVzKCkge1xuICAgIHJldHVybiBbXCJvcGVuXCJdO1xuICB9XG4gIGNvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIHZhciBfYTI7XG4gICAgdGhpcy5fY29udGVudCA9IChfYTIgPSB0aGlzLnNoYWRvd1Jvb3QpID09IG51bGwgPyB2b2lkIDAgOiBfYTIuY2hpbGRyZW5bMV07XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgXCJncm91cFwiKTtcbiAgICBvbih0aGlzLl9jb250ZW50LCBcImJlZm9yZW1hdGNoXCIsIHRoaXMpO1xuICAgIG9uKHRoaXMsIFwiY2xpY2ssa2V5ZG93blwiLCB0aGlzKTtcbiAgICB0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaygpO1xuICB9XG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLl9jb250ZW50KSBvZmYodGhpcy5fY29udGVudCwgXCJiZWZvcmVtYXRjaFwiLCB0aGlzKTtcbiAgICBvZmYodGhpcywgXCJjbGljayxrZXlkb3duXCIsIHRoaXMpO1xuICAgIHRoaXMuX2NvbnRlbnQgPSBudWxsO1xuICB9XG4gIGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayhwcm9wLCBwcmV2LCBuZXh0KSB7XG4gICAgY29uc3QgaGlkZSA9IFwib25iZWZvcmVtYXRjaFwiIGluIHRoaXMgPyBcInVudGlsLWZvdW5kXCIgOiB0cnVlO1xuICAgIGNvbnN0IG9wZW4gPSB0aGlzLm9wZW47XG4gICAgZm9yIChjb25zdCBlbCBvZiB0aGlzLmNoaWxkcmVuKVxuICAgICAgaWYgKGVsLm5vZGVOYW1lID09PSBcIlUtU1VNTUFSWVwiKSBhdHRyKGVsLCBcImFyaWEtZXhwYW5kZWRcIiwgYCR7b3Blbn1gKTtcbiAgICBpZiAodGhpcy5fY29udGVudCkge1xuICAgICAgYXR0cih0aGlzLl9jb250ZW50LCBcImFyaWEtaGlkZGVuXCIsIGAkeyFvcGVufWApO1xuICAgICAgYXR0cih0aGlzLl9jb250ZW50LCBcInRhYmluZGV4XCIsIG9wZW4gPyBudWxsIDogXCItMVwiKTtcbiAgICAgIHRoaXMuX2NvbnRlbnQuaGlkZGVuID0gb3BlbiA/IGZhbHNlIDogaGlkZTtcbiAgICB9XG4gICAgaWYgKG9wZW4gJiYgdGhpcy5uYW1lKSB7XG4gICAgICBjb25zdCB1RGV0YWlsc0xpc3QgPSBnZXRSb290KHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoXG4gICAgICAgIGAke3RoaXMubm9kZU5hbWV9W25hbWU9XCIke3RoaXMubmFtZX1cIl1gXG4gICAgICApO1xuICAgICAgZm9yIChjb25zdCB1RGV0YWlscyBvZiB1RGV0YWlsc0xpc3QpXG4gICAgICAgIGlmICh1RGV0YWlscyAhPT0gdGhpcykgdURldGFpbHMub3BlbiA9IGZhbHNlO1xuICAgIH1cbiAgICBpZiAocHJvcCA9PT0gXCJvcGVuXCIgJiYgcHJldiA9PT0gbnVsbCAhPT0gKG5leHQgPT09IG51bGwpKVxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChcInRvZ2dsZVwiKSk7XG4gIH1cbiAgaGFuZGxlRXZlbnQoZXZlbnQpIHtcbiAgICBjb25zdCBzdW1tYXJ5ID0gdGhpcy5xdWVyeVNlbGVjdG9yKFwiOnNjb3BlID4gdS1zdW1tYXJ5XCIpO1xuICAgIGNvbnN0IGlzU3VtbWFyeSA9IHN1bW1hcnkgPT0gbnVsbCA/IHZvaWQgMCA6IHN1bW1hcnkuY29udGFpbnMoZXZlbnQudGFyZ2V0KTtcbiAgICBpZiAoZXZlbnQuZGVmYXVsdFByZXZlbnRlZCkgcmV0dXJuO1xuICAgIGlmIChldmVudC50eXBlID09PSBcImJlZm9yZW1hdGNoXCIpIHRoaXMub3BlbiA9IHRydWU7XG4gICAgaWYgKGlzU3VtbWFyeSAmJiBldmVudC50eXBlID09PSBcImtleWRvd25cIikgYXNCdXR0b24oZXZlbnQpO1xuICAgIGlmIChpc1N1bW1hcnkgJiYgZXZlbnQudHlwZSA9PT0gXCJjbGlja1wiKSB0aGlzLm9wZW4gPSAhdGhpcy5vcGVuO1xuICB9XG4gIGdldCBvcGVuKCkge1xuICAgIHJldHVybiB0aGlzLmhhc0F0dHJpYnV0ZShcIm9wZW5cIik7XG4gIH1cbiAgc2V0IG9wZW4odmFsdWUpIHtcbiAgICBhdHRyKHRoaXMsIFwib3BlblwiLCB2YWx1ZSA/IFwiXCIgOiBudWxsKTtcbiAgfVxuICBnZXQgbmFtZSgpIHtcbiAgICByZXR1cm4gYXR0cih0aGlzLCBcIm5hbWVcIikgfHwgXCJcIjtcbiAgfVxuICBzZXQgbmFtZSh2YWx1ZSkge1xuICAgIGF0dHIodGhpcywgXCJuYW1lXCIsIHZhbHVlKTtcbiAgfVxufTtcbnZhciBVSFRNTFN1bW1hcnlFbGVtZW50ID0gY2xhc3MgZXh0ZW5kcyBVSFRNTEVsZW1lbnQge1xuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICBhdHRyKHRoaXMsIFwicm9sZVwiLCBcImJ1dHRvblwiKTtcbiAgICB0aGlzLnNsb3QgPSBcInN1bW1hcnlcIjtcbiAgICB0aGlzLnRhYkluZGV4ID0gMDtcbiAgfVxufTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtZGV0YWlsc1wiLCBVSFRNTERldGFpbHNFbGVtZW50KTtcbmN1c3RvbUVsZW1lbnRzLmRlZmluZShcInUtc3VtbWFyeVwiLCBVSFRNTFN1bW1hcnlFbGVtZW50KTtcblxuZXhwb3J0IHsgVUhUTUxEZXRhaWxzRWxlbWVudCwgVUhUTUxEZXRhaWxzU2hhZG93Um9vdCwgVUhUTUxEZXRhaWxzU3R5bGUsIFVIVE1MU3VtbWFyeUVsZW1lbnQgfTtcbiIsIi8vIC4uL3V0aWxzLnRzXG52YXIgSVNfQlJPV1NFUiA9IHR5cGVvZiB3aW5kb3cgIT09IFwidW5kZWZpbmVkXCIgJiYgdHlwZW9mIHdpbmRvdy5kb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIiAmJiB0eXBlb2Ygd2luZG93Lm5hdmlnYXRvciAhPT0gXCJ1bmRlZmluZWRcIjtcbnZhciBJU19GSVJFRk9YID0gSVNfQlJPV1NFUiAmJiAvZmlyZWZveC9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCk7XG52YXIgSVNfSU9TID0gSVNfQlJPV1NFUiAmJiAvaVBhZHxpUGhvbmV8aVBvZC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcbnZhciBfYTtcbklTX0JST1dTRVIgJiYgLy8gQHRzLWV4cGVjdC1lcnJvciBUeXBlc2NyaXB0IGhhcyBub3QgaW1wbGVtZW50ZWQgdXNlckFnZW50RGF0YSB5ZXQgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzcxMzkyNDc0XG4vXk1hYy9pLnRlc3QoKChfYSA9IG5hdmlnYXRvci51c2VyQWdlbnREYXRhKSA9PSBudWxsID8gdm9pZCAwIDogX2EucGxhdGZvcm0pIHx8IG5hdmlnYXRvci5wbGF0Zm9ybSk7XG52YXIgVUhUTUxFbGVtZW50ID0gdHlwZW9mIEhUTUxFbGVtZW50ID09PSBcInVuZGVmaW5lZFwiID8gY2xhc3Mge1xufSA6IEhUTUxFbGVtZW50O1xuZnVuY3Rpb24gYXR0cihlbCwgbmFtZSwgdmFsdWUpIHtcbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHJldHVybiBlbC5nZXRBdHRyaWJ1dGUobmFtZSk7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkgZWwucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICBlbHNlIGlmIChlbC5nZXRBdHRyaWJ1dGUobmFtZSkgIT09IHZhbHVlKSBlbC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICByZXR1cm4gbnVsbDtcbn1cbnZhciBnZXRSb290ID0gKG5vZGUpID0+IHtcbiAgdmFyIF9hMjtcbiAgY29uc3Qgcm9vdCA9ICgoX2EyID0gbm9kZS5nZXRSb290Tm9kZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMi5jYWxsKG5vZGUpKSB8fCBub2RlLm93bmVyRG9jdW1lbnQ7XG4gIHJldHVybiByb290IGluc3RhbmNlb2YgRG9jdW1lbnQgfHwgcm9vdCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QgPyByb290IDogZG9jdW1lbnQ7XG59O1xudmFyIGlkID0gMDtcbnZhciB1c2VJZCA9IChlbCkgPT4ge1xuICBpZiAoIWVsKSByZXR1cm4gXCJcIjtcbiAgaWYgKCFlbC5pZCkgZWwuaWQgPSBgOiR7ZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKX0keygrK2lkKS50b1N0cmluZygzMil9YDtcbiAgcmV0dXJuIGVsLmlkO1xufTtcbnZhciBjcmVhdGVFbGVtZW50ID0gKHRhZ05hbWUsIHRleHQsIGF0dHJzKSA9PiB7XG4gIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtcbiAgaWYgKHRleHQpIGVsLnRleHRDb250ZW50ID0gdGV4dDtcbiAgaWYgKGF0dHJzKSBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cnMpKSBhdHRyKGVsLCBrZXksIHZhbCk7XG4gIHJldHVybiBlbDtcbn07XG52YXIgY3VzdG9tRWxlbWVudHMgPSB7XG4gIGRlZmluZTogKG5hbWUsIGluc3RhbmNlKSA9PiAhSVNfQlJPV1NFUiB8fCB3aW5kb3cuY3VzdG9tRWxlbWVudHMuZ2V0KG5hbWUpIHx8IHdpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUobmFtZSwgaW5zdGFuY2UpXG59O1xudmFyIGdldExhYmVsID0gKGVsKSA9PiB7XG4gIHZhciBfYTI7XG4gIGNvbnN0IGxhYmVsID0gYXR0cihlbCwgXCJhcmlhLWxhYmVsXCIpIHx8IFwiXCI7XG4gIGNvbnN0IGxhYmVscyA9ICgoX2EyID0gYXR0cihlbCwgXCJhcmlhLWxhYmVsbGVkYnlcIikpID09IG51bGwgPyB2b2lkIDAgOiBfYTIudHJpbSgpLnNwbGl0KC9cXHMrLykpIHx8IFtdO1xuICByZXR1cm4gW1xuICAgIC4uLmxhYmVscy5tYXAoKGlkMikgPT4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQyKSksXG4gICAgLy8gR2V0IGFsbCBsYWJlbGxlZGJ5IGVsZW1lbnRzXG4gICAgLi4uQXJyYXkuZnJvbShlbC5sYWJlbHMgfHwgW10pXG4gICAgLy8gR2V0IGFsbCA8bGFiZWw+IGVsZW1lbnRzXG4gIF0ucmVkdWNlKChhY2MsIGVsMikgPT4ge1xuICAgIHZhciBfYTM7XG4gICAgcmV0dXJuIGFjYyB8fCAoKF9hMyA9IGVsMiA9PSBudWxsID8gdm9pZCAwIDogZWwyLmlubmVyVGV4dCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9hMy50cmltKCkpIHx8IFwiXCI7XG4gIH0sIGxhYmVsKTtcbn07XG52YXIgZGVjbGFyYXRpdmVTaGFkb3dSb290ID0gKHN0eWxlLCBzbG90ID0gXCI8c2xvdD48L3Nsb3Q+XCIpID0+IGA8dGVtcGxhdGUgc2hhZG93cm9vdG1vZGU9XCJvcGVuXCI+JHtzbG90fTxzdHlsZT4ke3N0eWxlfTwvc3R5bGU+PC90ZW1wbGF0ZT5gO1xuXG4vLyB1LXByb2dyZXNzLnRzXG52YXIgVUhUTUxQcm9ncmVzc1N0eWxlID0gYDpob3N0KDpub3QoW2hpZGRlbl0pKSB7IGJveC1zaXppbmc6IGJvcmRlci1ib3g7IGJvcmRlcjogMXB4IHNvbGlkOyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IGhlaWdodDogLjVlbTsgd2lkdGg6IDEwZW07IG92ZXJmbG93OiBoaWRkZW4gfVxuOmhvc3Q6OmJlZm9yZSB7IGNvbnRlbnQ6ICcnOyBkaXNwbGF5OiBibG9jazsgaGVpZ2h0OiAxMDAlOyBiYWNrZ3JvdW5kOiBjdXJyZW50Q29sb3I7IHdpZHRoOiB2YXIoLS1wZXJjZW50YWdlLCAwJSk7IHRyYW5zaXRpb246IHdpZHRoIC4ycyB9XG46aG9zdCg6bm90KFt2YWx1ZV0pKSB7IGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCg5MGRlZyxjdXJyZW50Q29sb3IgMjUlLCB0cmFuc3BhcmVudCA1MCUsIGN1cnJlbnRDb2xvciA3NSUpIDUwJS80MDAlIH1cbkBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogbm8tcHJlZmVyZW5jZSkgeyA6aG9zdCB7IGFuaW1hdGlvbjogaW5kZXRlcm1pbmF0ZSAycyBsaW5lYXIgaW5maW5pdGUgfSAgfVxuQGtleWZyYW1lcyBpbmRldGVybWluYXRlIHsgZnJvbSB7IGJhY2tncm91bmQtcG9zaXRpb24teDogMTAwJSB9IHRvIHsgYmFja2dyb3VuZC1wb3NpdGlvbi14OiAwIH0gfWA7XG52YXIgVUhUTUxQcm9ncmVzc1NoYWRvd1Jvb3QgPSBkZWNsYXJhdGl2ZVNoYWRvd1Jvb3QoXG4gIFVIVE1MUHJvZ3Jlc3NTdHlsZSxcbiAgXCI8c2xvdCBoaWRkZW4+PC9zbG90PlwiXG4pO1xudmFyIFNLSVBfQVRUUl9DSEFOR0UgPSBmYWxzZTtcbnZhciBVSFRNTFByb2dyZXNzRWxlbWVudCA9IGNsYXNzIGV4dGVuZHMgVUhUTUxFbGVtZW50IHtcbiAgLy8gVXNpbmcgRVMyMDE1IHN5bnRheCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7XG4gICAgcmV0dXJuIFtcImFyaWEtbGFiZWxcIiwgXCJhcmlhLWxhYmVsbGVkYnlcIiwgXCJ2YWx1ZVwiLCBcIm1heFwiXTtcbiAgfVxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpO1xuICAgIGlmICghdGhpcy5zaGFkb3dSb290KVxuICAgICAgdGhpcy5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KS5hcHBlbmQoXG4gICAgICAgIGNyZWF0ZUVsZW1lbnQoXCJzbG90XCIsIG51bGwsIHsgaGlkZGVuOiBcIlwiIH0pLFxuICAgICAgICAvLyBTbG90IGhpZGluZyBjb250ZW50IGFsbG93cyBsZWdhY3kgYnJvd3NlciB0byBkaXNwbGF5IGZhbGxiYWNrIHRleHRcbiAgICAgICAgY3JlYXRlRWxlbWVudChcInN0eWxlXCIsIFVIVE1MUHJvZ3Jlc3NTdHlsZSlcbiAgICAgICk7XG4gIH1cbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5hdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKTtcbiAgfVxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soKSB7XG4gICAgaWYgKFNLSVBfQVRUUl9DSEFOR0UpIHJldHVybjtcbiAgICBTS0lQX0FUVFJfQ0hBTkdFID0gdHJ1ZTtcbiAgICBjb25zdCByb2xlSW1hZ2UgPSBJU19JT1MgfHwgSVNfRklSRUZPWDtcbiAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCh0aGlzLnBvc2l0aW9uICogMTAwKSk7XG4gICAgdGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShcIi0tcGVyY2VudGFnZVwiLCBgJHtwZXJjZW50YWdlfSVgKTtcbiAgICBsZXQgbGFiZWwgPSBnZXRMYWJlbCh0aGlzKTtcbiAgICBpZiAocm9sZUltYWdlKSBsYWJlbCA9IGAke2xhYmVsLnJlcGxhY2UoL1xcZCslJC8sIFwiXCIpfSAke3BlcmNlbnRhZ2V9JWA7XG4gICAgaWYgKElTX0ZJUkVGT1gpIGZvciAoY29uc3QgZWwgb2YgdGhpcy5sYWJlbHMpIGF0dHIoZWwsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtYnVzeVwiLCBgJHt0aGlzLnBvc2l0aW9uID09PSAtMX1gKTtcbiAgICBhdHRyKHRoaXMsIFwiYXJpYS1sYWJlbFwiLCBsYWJlbC50cmltKCkpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLWxhYmVsbGVkYnlcIiwgbnVsbCk7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtYXhcIiwgXCIxMDBcIik7XG4gICAgYXR0cih0aGlzLCBcImFyaWEtdmFsdWVtaW5cIiwgXCIwXCIpO1xuICAgIGF0dHIodGhpcywgXCJhcmlhLXZhbHVlbm93XCIsIGAke3BlcmNlbnRhZ2V9YCk7XG4gICAgYXR0cih0aGlzLCBcInJvbGVcIiwgcm9sZUltYWdlID8gXCJpbWdcIiA6IFwicHJvZ3Jlc3NiYXJcIik7XG4gICAgU0tJUF9BVFRSX0NIQU5HRSA9IGZhbHNlO1xuICB9XG4gIGdldCBsYWJlbHMoKSB7XG4gICAgY29uc3QgbGFiZWwgPSB0aGlzLmNsb3Nlc3QoXCJsYWJlbDpub3QoW2Zvcl0pXCIpO1xuICAgIGNvbnN0IGlkMiA9IHVzZUlkKHRoaXMpO1xuICAgIGlmIChsYWJlbCkgbGFiZWwuaHRtbEZvciA9IGlkMjtcbiAgICBjb25zdCBlbCA9IGdldFJvb3QodGhpcykucXVlcnlTZWxlY3RvckFsbChcbiAgICAgIGBsYWJlbFtmb3I9XCIke2lkMn1cIl1gXG4gICAgKTtcbiAgICByZXR1cm4gZWw7XG4gIH1cbiAgZ2V0IHBvc2l0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlID09PSBudWxsID8gLTEgOiBNYXRoLm1pbih0aGlzLnZhbHVlIC8gdGhpcy5tYXgsIDEpO1xuICB9XG4gIGdldCB2YWx1ZSgpIHtcbiAgICByZXR1cm4gZ2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIik7XG4gIH1cbiAgc2V0IHZhbHVlKHZhbHVlKSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwidmFsdWVcIiwgdmFsdWUpO1xuICB9XG4gIGdldCBtYXgoKSB7XG4gICAgcmV0dXJuIGdldE51bWJlcih0aGlzLCBcIm1heFwiKSB8fCAxO1xuICB9XG4gIHNldCBtYXgobWF4KSB7XG4gICAgc2V0TnVtYmVyKHRoaXMsIFwibWF4XCIsIG1heCk7XG4gIH1cbn07XG4vLyBQcmV2ZW50IENocm9tZSBEZXZUb29scyB3YXJuaW5nIGFib3V0IDxsYWJlbCBmb3I9XCJcIj4gcG9pbnRpbmcgdG8gPHUtcHJvZ3Jlc3M+XG5VSFRNTFByb2dyZXNzRWxlbWVudC5mb3JtQXNzb2NpYXRlZCA9IHRydWU7XG52YXIgaXNOdW1lcmljID0gKHZhbHVlKSA9PiAhTnVtYmVyLmlzTmFOKE51bWJlci5wYXJzZUZsb2F0KGAke3ZhbHVlfWApKSAmJiBOdW1iZXIuaXNGaW5pdGUoTnVtYmVyKHZhbHVlKSk7XG52YXIgZ2V0TnVtYmVyID0gKGVsLCBrZXkpID0+IHtcbiAgY29uc3QgdmFsdWUgPSBhdHRyKGVsLCBrZXkpO1xuICByZXR1cm4gaXNOdW1lcmljKHZhbHVlKSA/IE1hdGgubWF4KDAsIE51bWJlci5wYXJzZUZsb2F0KHZhbHVlKSkgOiBudWxsO1xufTtcbnZhciBzZXROdW1iZXIgPSAoZWwsIGtleSwgdmFsKSA9PiB7XG4gIGlmICh2YWwgPT09IG51bGwgfHwgaXNOdW1lcmljKHZhbCkpIGF0dHIoZWwsIGtleSwgYCR7dmFsfWApO1xuICBlbHNlIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHNldCBub24tbnVtZXJpYyAnJHthdHRyfSc6ICcke3ZhbH0nYCk7XG59O1xuY3VzdG9tRWxlbWVudHMuZGVmaW5lKFwidS1wcm9ncmVzc1wiLCBVSFRNTFByb2dyZXNzRWxlbWVudCk7XG5cbmV4cG9ydCB7IFVIVE1MUHJvZ3Jlc3NFbGVtZW50LCBVSFRNTFByb2dyZXNzU2hhZG93Um9vdCwgVUhUTUxQcm9ncmVzc1N0eWxlIH07XG4iXSwibmFtZXMiOlsiX19kZWZQcm9wIiwiX19nZXRPd25Qcm9wU3ltYm9scyIsIl9faGFzT3duUHJvcCIsIl9fcHJvcElzRW51bSIsIl9fZGVmTm9ybWFsUHJvcCIsIm9iaiIsImtleSIsInZhbHVlIiwiX19zcHJlYWRWYWx1ZXMiLCJhIiwiYiIsInByb3AiLCJJU19CUk9XU0VSIiwiSVNfQU5EUk9JRCIsIklTX0ZJUkVGT1giLCJJU19JT1MiLCJfYSIsIkZPQ1VTX09VVExJTkUiLCJVSFRNTEVsZW1lbnQiLCJhdHRyIiwiZWwiLCJuYW1lIiwiZXZlbnRzIiwiYWN0aW9uIiwiZWxlbWVudCIsInJlc3QiLCJ0eXBlIiwib24iLCJvZmYiLCJvYnNlcnZlcnMiLCJtdXRhdGlvbk9ic2VydmVyIiwib3B0aW9ucyIsIm9ic2VydmVyIiwiZGV0YWlsIiwiYXNCdXR0b24iLCJldmVudCIsImlzQ2xpY2siLCJnZXRSb290Iiwibm9kZSIsIl9hMiIsInJvb3QiLCJpZCIsInVzZUlkIiwiY3JlYXRlRWxlbWVudCIsInRhZ05hbWUiLCJ0ZXh0MiIsImF0dHJzIiwidmFsIiwiY3VzdG9tRWxlbWVudHMiLCJpbnN0YW5jZSIsImdldExhYmVsIiwibGFiZWwiLCJpZDIiLCJhY2MiLCJlbDIiLCJfYTMiLCJMSVZFIiwiTElWRV9TUl9GSVgiLCJzcGVhayIsInNldFZhbHVlIiwiaW5wdXQiLCJkYXRhIiwiX2IiLCJwcm90byIsIklTX1BSRVNTIiwiaXNNb3VzZURvd24iLCJVSFRNTENvbWJvYm94U3R5bGUiLCJFVkVOVFMiLCJFVkVOVF9PTkNFIiwiSVNfRklSRUZPWF9ERVNLVE9QIiwiSVNfTU9CSUxFIiwiTU9ESUZJRUQiLCJGQUxTRSIsIlRFWFRTIiwiVUhUTUxDb21ib2JveEVsZW1lbnQiLCJyZW5kZXIiLCJzeW5jSW5wdXRWYWx1ZSIsIl8iLCJ0YXJnZXQiLCJpc0Rpc2FibGVkIiwib25CbHVyIiwib25DbGljayIsIm9uRm9jdXMiLCJvbklucHV0Iiwib25LZXlEb3duIiwidGFnIiwidGV4dCIsImlzRGF0YSIsImNvbnRyb2wiLCJzZWxmIiwiX2ZvY3VzIiwiX3RleHRzIiwiaXRlbXMiLCJsaXN0IiwibXVsdGlwbGUiLCJwcmV2IiwibmV4dCIsImVkaXRzIiwiYWRkZWROb2RlcyIsInJlbW92ZWROb2RlcyIsInNob3VsZEFubm91bmNlIiwiYXJpYUV4cGFuZGVkIiwiaW5wdXRNb2RlIiwibmV4dEZvY3VzIiwiaXNSZW1vdmUiLCJpZHgiLCJzZWxlY3QiLCJyZW1vdmUiLCJpdGVtMiIsIm9wdGlvbiIsImxhYmVsMiIsImFyaWEiLCJvcHQiLCJpdGVtIiwic3luY0NsZWFyV2l0aElucHV0Iiwic3luY09wdGlvbnNXaXRoSXRlbXMiLCJfc3BlYWsiLCJ2YWx1ZXMiLCJkaXNwYXRjaE1hdGNoIiwiY2hhbmdlIiwiY3JlYXRhYmxlIiwicXVlcnkiLCJtYXRjaCIsIm8iLCJkaXNwYXRjaENoYW5nZSIsInJlbW92YWJsZSIsImFkZCIsImkiLCJvbkJsdXJyZWQiLCJ4IiwieSIsImNsZWFyIiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwicmVwZWF0IiwiaXNDb250cm9sIiwiaW5UZXh0IiwiaW5kZXgiLCJmb3JtIiwiU0FGRV9MQUJFTExFREJZIiwiRElTUExBWV9CTE9DSyIsImF0dGFjaFN0eWxlIiwiY3NzIiwiVUhUTUxUYWJzU3R5bGUiLCJVSFRNTFRhYkxpc3RTdHlsZSIsIlVIVE1MVGFiUGFuZWxTdHlsZSIsIlVIVE1MVGFiU3R5bGUiLCJBUklBX0NPTlRST0xTIiwiQVJJQV9TRUxFQ1RFRCIsIlVIVE1MVGFic0VsZW1lbnQiLCJxdWVyeVdpdGhvdXROZXN0ZWQiLCJnZXRTZWxlY3RlZEluZGV4Iiwic2V0U2VsZWN0ZWQiLCJVSFRNTFRhYkxpc3RFbGVtZW50IiwidGFiIiwidGFicyIsIlNLSVBfQVRUUl9DSEFOR0UiLCJVSFRNTFRhYkVsZW1lbnQiLCJwYW5lbHMiLCJuZXh0UGFuZWwiLCJnZXRQYW5lbCIsInBhbmVsIiwidGFibGlzdCIsInRhYkxpc3QiLCJVSFRNTFRhYlBhbmVsRWxlbWVudCIsImhpZGRlbiIsImlzRm9jdXNhYmxlIiwibWluIiwibWF4Iiwicm91bmQiLCJmbG9vciIsImNyZWF0ZUNvb3JkcyIsInYiLCJvcHBvc2l0ZVNpZGVNYXAiLCJvcHBvc2l0ZUFsaWdubWVudE1hcCIsImNsYW1wIiwic3RhcnQiLCJlbmQiLCJldmFsdWF0ZSIsInBhcmFtIiwiZ2V0U2lkZSIsInBsYWNlbWVudCIsImdldEFsaWdubWVudCIsImdldE9wcG9zaXRlQXhpcyIsImF4aXMiLCJnZXRBeGlzTGVuZ3RoIiwieUF4aXNTaWRlcyIsImdldFNpZGVBeGlzIiwiZ2V0QWxpZ25tZW50QXhpcyIsImdldEFsaWdubWVudFNpZGVzIiwicmVjdHMiLCJydGwiLCJhbGlnbm1lbnQiLCJhbGlnbm1lbnRBeGlzIiwibGVuZ3RoIiwibWFpbkFsaWdubWVudFNpZGUiLCJnZXRPcHBvc2l0ZVBsYWNlbWVudCIsImdldEV4cGFuZGVkUGxhY2VtZW50cyIsIm9wcG9zaXRlUGxhY2VtZW50IiwiZ2V0T3Bwb3NpdGVBbGlnbm1lbnRQbGFjZW1lbnQiLCJsclBsYWNlbWVudCIsInJsUGxhY2VtZW50IiwidGJQbGFjZW1lbnQiLCJidFBsYWNlbWVudCIsImdldFNpZGVMaXN0Iiwic2lkZSIsImlzU3RhcnQiLCJnZXRPcHBvc2l0ZUF4aXNQbGFjZW1lbnRzIiwiZmxpcEFsaWdubWVudCIsImRpcmVjdGlvbiIsImV4cGFuZFBhZGRpbmdPYmplY3QiLCJwYWRkaW5nIiwiZ2V0UGFkZGluZ09iamVjdCIsInJlY3RUb0NsaWVudFJlY3QiLCJyZWN0Iiwid2lkdGgiLCJoZWlnaHQiLCJjb21wdXRlQ29vcmRzRnJvbVBsYWNlbWVudCIsIl9yZWYiLCJyZWZlcmVuY2UiLCJmbG9hdGluZyIsInNpZGVBeGlzIiwiYWxpZ25MZW5ndGgiLCJpc1ZlcnRpY2FsIiwiY29tbW9uWCIsImNvbW1vblkiLCJjb21tb25BbGlnbiIsImNvb3JkcyIsImNvbXB1dGVQb3NpdGlvbiIsImNvbmZpZyIsInN0cmF0ZWd5IiwibWlkZGxld2FyZSIsInBsYXRmb3JtIiwidmFsaWRNaWRkbGV3YXJlIiwic3RhdGVmdWxQbGFjZW1lbnQiLCJtaWRkbGV3YXJlRGF0YSIsInJlc2V0Q291bnQiLCJmbiIsIm5leHRYIiwibmV4dFkiLCJyZXNldCIsImRldGVjdE92ZXJmbG93Iiwic3RhdGUiLCJfYXdhaXQkcGxhdGZvcm0kaXNFbGUiLCJlbGVtZW50cyIsImJvdW5kYXJ5Iiwicm9vdEJvdW5kYXJ5IiwiZWxlbWVudENvbnRleHQiLCJhbHRCb3VuZGFyeSIsInBhZGRpbmdPYmplY3QiLCJjbGlwcGluZ0NsaWVudFJlY3QiLCJvZmZzZXRQYXJlbnQiLCJvZmZzZXRTY2FsZSIsImVsZW1lbnRDbGllbnRSZWN0IiwiZmxpcCIsIl9taWRkbGV3YXJlRGF0YSRhcnJvdyIsIl9taWRkbGV3YXJlRGF0YSRmbGlwIiwiaW5pdGlhbFBsYWNlbWVudCIsImNoZWNrTWFpbkF4aXMiLCJjaGVja0Nyb3NzQXhpcyIsInNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyIsImZhbGxiYWNrU3RyYXRlZ3kiLCJmYWxsYmFja0F4aXNTaWRlRGlyZWN0aW9uIiwiZGV0ZWN0T3ZlcmZsb3dPcHRpb25zIiwiaW5pdGlhbFNpZGVBeGlzIiwiaXNCYXNlUGxhY2VtZW50IiwiZmFsbGJhY2tQbGFjZW1lbnRzIiwiaGFzRmFsbGJhY2tBeGlzU2lkZURpcmVjdGlvbiIsInBsYWNlbWVudHMiLCJvdmVyZmxvdyIsIm92ZXJmbG93cyIsIm92ZXJmbG93c0RhdGEiLCJzaWRlcyIsIl9taWRkbGV3YXJlRGF0YSRmbGlwMiIsIl9vdmVyZmxvd3NEYXRhJGZpbHRlciIsIm5leHRJbmRleCIsIm5leHRQbGFjZW1lbnQiLCJkIiwicmVzZXRQbGFjZW1lbnQiLCJfb3ZlcmZsb3dzRGF0YSRmaWx0ZXIyIiwiY3VycmVudFNpZGVBeGlzIiwic2hpZnQiLCJsaW1pdGVyIiwiY3Jvc3NBeGlzIiwibWFpbkF4aXMiLCJtYWluQXhpc0Nvb3JkIiwiY3Jvc3NBeGlzQ29vcmQiLCJtaW5TaWRlIiwibWF4U2lkZSIsImxpbWl0ZWRDb29yZHMiLCJzaXplIiwiX3N0YXRlJG1pZGRsZXdhcmVEYXRhIiwiX3N0YXRlJG1pZGRsZXdhcmVEYXRhMiIsImFwcGx5IiwiaXNZQXhpcyIsImhlaWdodFNpZGUiLCJ3aWR0aFNpZGUiLCJtYXhpbXVtQ2xpcHBpbmdIZWlnaHQiLCJtYXhpbXVtQ2xpcHBpbmdXaWR0aCIsIm92ZXJmbG93QXZhaWxhYmxlSGVpZ2h0Iiwib3ZlcmZsb3dBdmFpbGFibGVXaWR0aCIsIm5vU2hpZnQiLCJhdmFpbGFibGVIZWlnaHQiLCJhdmFpbGFibGVXaWR0aCIsInhNaW4iLCJ4TWF4IiwieU1pbiIsInlNYXgiLCJuZXh0RGltZW5zaW9ucyIsImhhc1dpbmRvdyIsImdldE5vZGVOYW1lIiwiaXNOb2RlIiwiZ2V0V2luZG93IiwiX25vZGUkb3duZXJEb2N1bWVudCIsImdldERvY3VtZW50RWxlbWVudCIsImlzRWxlbWVudCIsImlzSFRNTEVsZW1lbnQiLCJpc1NoYWRvd1Jvb3QiLCJpbnZhbGlkT3ZlcmZsb3dEaXNwbGF5VmFsdWVzIiwiaXNPdmVyZmxvd0VsZW1lbnQiLCJvdmVyZmxvd1giLCJvdmVyZmxvd1kiLCJkaXNwbGF5IiwiZ2V0Q29tcHV0ZWRTdHlsZSIsInRhYmxlRWxlbWVudHMiLCJpc1RhYmxlRWxlbWVudCIsInRvcExheWVyU2VsZWN0b3JzIiwiaXNUb3BMYXllciIsInNlbGVjdG9yIiwidHJhbnNmb3JtUHJvcGVydGllcyIsIndpbGxDaGFuZ2VWYWx1ZXMiLCJjb250YWluVmFsdWVzIiwiaXNDb250YWluaW5nQmxvY2siLCJlbGVtZW50T3JDc3MiLCJ3ZWJraXQiLCJpc1dlYktpdCIsImdldENvbnRhaW5pbmdCbG9jayIsImN1cnJlbnROb2RlIiwiZ2V0UGFyZW50Tm9kZSIsImlzTGFzdFRyYXZlcnNhYmxlTm9kZSIsImxhc3RUcmF2ZXJzYWJsZU5vZGVOYW1lcyIsImdldE5vZGVTY3JvbGwiLCJyZXN1bHQiLCJnZXROZWFyZXN0T3ZlcmZsb3dBbmNlc3RvciIsInBhcmVudE5vZGUiLCJnZXRPdmVyZmxvd0FuY2VzdG9ycyIsInRyYXZlcnNlSWZyYW1lcyIsIl9ub2RlJG93bmVyRG9jdW1lbnQyIiwic2Nyb2xsYWJsZUFuY2VzdG9yIiwiaXNCb2R5Iiwid2luIiwiZnJhbWVFbGVtZW50IiwiZ2V0RnJhbWVFbGVtZW50IiwiZ2V0Q3NzRGltZW5zaW9ucyIsImdldENvbXB1dGVkU3R5bGUkMSIsImhhc09mZnNldCIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0Iiwic2hvdWxkRmFsbGJhY2siLCJ1bndyYXBFbGVtZW50IiwiZ2V0U2NhbGUiLCJkb21FbGVtZW50IiwiJCIsIm5vT2Zmc2V0cyIsImdldFZpc3VhbE9mZnNldHMiLCJzaG91bGRBZGRWaXN1YWxPZmZzZXRzIiwiaXNGaXhlZCIsImZsb2F0aW5nT2Zmc2V0UGFyZW50IiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiaW5jbHVkZVNjYWxlIiwiaXNGaXhlZFN0cmF0ZWd5IiwiY2xpZW50UmVjdCIsInNjYWxlIiwidmlzdWFsT2Zmc2V0cyIsIm9mZnNldFdpbiIsImN1cnJlbnRXaW4iLCJjdXJyZW50SUZyYW1lIiwiaWZyYW1lU2NhbGUiLCJpZnJhbWVSZWN0IiwiZ2V0V2luZG93U2Nyb2xsQmFyWCIsImxlZnRTY3JvbGwiLCJnZXRIVE1MT2Zmc2V0IiwiZG9jdW1lbnRFbGVtZW50Iiwic2Nyb2xsIiwiaHRtbFJlY3QiLCJjb252ZXJ0T2Zmc2V0UGFyZW50UmVsYXRpdmVSZWN0VG9WaWV3cG9ydFJlbGF0aXZlUmVjdCIsInRvcExheWVyIiwib2Zmc2V0cyIsImlzT2Zmc2V0UGFyZW50QW5FbGVtZW50Iiwib2Zmc2V0UmVjdCIsImh0bWxPZmZzZXQiLCJnZXRDbGllbnRSZWN0cyIsImdldERvY3VtZW50UmVjdCIsImh0bWwiLCJib2R5IiwiU0NST0xMQkFSX01BWCIsImdldFZpZXdwb3J0UmVjdCIsInZpc3VhbFZpZXdwb3J0IiwidmlzdWFsVmlld3BvcnRCYXNlZCIsIndpbmRvd1Njcm9sbGJhclgiLCJkb2MiLCJib2R5U3R5bGVzIiwiYm9keU1hcmdpbklubGluZSIsImNsaXBwaW5nU3RhYmxlU2Nyb2xsYmFyV2lkdGgiLCJhYnNvbHV0ZU9yRml4ZWQiLCJnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdCIsImdldENsaWVudFJlY3RGcm9tQ2xpcHBpbmdBbmNlc3RvciIsImNsaXBwaW5nQW5jZXN0b3IiLCJoYXNGaXhlZFBvc2l0aW9uQW5jZXN0b3IiLCJzdG9wTm9kZSIsImdldENsaXBwaW5nRWxlbWVudEFuY2VzdG9ycyIsImNhY2hlIiwiY2FjaGVkUmVzdWx0IiwiY3VycmVudENvbnRhaW5pbmdCbG9ja0NvbXB1dGVkU3R5bGUiLCJlbGVtZW50SXNGaXhlZCIsImNvbXB1dGVkU3R5bGUiLCJjdXJyZW50Tm9kZUlzQ29udGFpbmluZyIsImFuY2VzdG9yIiwiZ2V0Q2xpcHBpbmdSZWN0IiwiY2xpcHBpbmdBbmNlc3RvcnMiLCJmaXJzdENsaXBwaW5nQW5jZXN0b3IiLCJjbGlwcGluZ1JlY3QiLCJhY2NSZWN0IiwiZ2V0RGltZW5zaW9ucyIsImdldFJlY3RSZWxhdGl2ZVRvT2Zmc2V0UGFyZW50Iiwic2V0TGVmdFJUTFNjcm9sbGJhck9mZnNldCIsImlzU3RhdGljUG9zaXRpb25lZCIsImdldFRydWVPZmZzZXRQYXJlbnQiLCJwb2x5ZmlsbCIsInJhd09mZnNldFBhcmVudCIsImdldE9mZnNldFBhcmVudCIsInN2Z09mZnNldFBhcmVudCIsImdldEVsZW1lbnRSZWN0cyIsImdldE9mZnNldFBhcmVudEZuIiwiZ2V0RGltZW5zaW9uc0ZuIiwiZmxvYXRpbmdEaW1lbnNpb25zIiwiaXNSVEwiLCJyZWN0c0FyZUVxdWFsIiwib2JzZXJ2ZU1vdmUiLCJvbk1vdmUiLCJpbyIsInRpbWVvdXRJZCIsImNsZWFudXAiLCJfaW8iLCJyZWZyZXNoIiwic2tpcCIsInRocmVzaG9sZCIsImVsZW1lbnRSZWN0Rm9yUm9vdE1hcmdpbiIsImluc2V0VG9wIiwiaW5zZXRSaWdodCIsImluc2V0Qm90dG9tIiwiaW5zZXRMZWZ0IiwiaXNGaXJzdFVwZGF0ZSIsImhhbmRsZU9ic2VydmUiLCJlbnRyaWVzIiwicmF0aW8iLCJhdXRvVXBkYXRlIiwidXBkYXRlIiwiYW5jZXN0b3JTY3JvbGwiLCJhbmNlc3RvclJlc2l6ZSIsImVsZW1lbnRSZXNpemUiLCJsYXlvdXRTaGlmdCIsImFuaW1hdGlvbkZyYW1lIiwicmVmZXJlbmNlRWwiLCJhbmNlc3RvcnMiLCJjbGVhbnVwSW8iLCJyZW9ic2VydmVGcmFtZSIsInJlc2l6ZU9ic2VydmVyIiwiZmlyc3RFbnRyeSIsIl9yZXNpemVPYnNlcnZlciIsImZyYW1lSWQiLCJwcmV2UmVmUmVjdCIsImZyYW1lTG9vcCIsIm5leHRSZWZSZWN0IiwiX3Jlc2l6ZU9ic2VydmVyMiIsInNoaWZ0JDEiLCJmbGlwJDEiLCJzaXplJDEiLCJtZXJnZWRPcHRpb25zIiwicGxhdGZvcm1XaXRoQ2FjaGUiLCJjb21wdXRlUG9zaXRpb24kMSIsInIiLCJlIiwidCIsImYiLCJuIiwiY2xzeCIsIlFVSUNLX0VWRU5UIiwiZGVib3VuY2UiLCJjYWxsYmFjayIsImRlbGF5IiwidGltZXIiLCJhcmdzIiwiVVVJRCIsIlVOQklORCIsIm9uTG9hZGVkIiwicnVuIiwidW5iaW5kIiwiQU5DSE9SRUQiLCJhbmNob3JQb3NpdGlvbiIsImFuY2hvciIsImNyZWF0ZU9wdGltaXplZE11dGF0aW9uT2JzZXJ2ZXIiLCJxdWV1ZSIsIm9uRnJhbWUiLCJvblRpbWVyIiwiTVVUQVRPUlMiLCJvbk11dGF0aW9uIiwiY2xhc3NOYW1lIiwiZWxlbXMiLCJtdXRhdG9yIiwiaXNJbnB1dExpa2UiLCJNVERTRWxlbWVudCIsIkNTU19CUkVBRENSVU1CUyIsInN0eWxlcyIsIkNTU19DQVJEIiwiQ1NTX0NISVAiLCJDU1NfSEVMUFRFWFQiLCJDU1NfUEFHSU5BVElPTiIsIkNMSUNLUyIsIk1BVE9NTyIsIkJBTk5FUiIsIkJBTk5FUl9VUkwiLCJhbmFseXRpY3MiLCJjb25zZW50IiwiZW5hYmxlZCIsIm1hdG9tb0lkIiwibWF0b21vVGFnTWFuYWdlcklkIiwicmVuZGVyQmFubmVyIiwic3JjIiwidXJsIiwidGl0bGUiLCJjYXRlZ29yeSIsInJlc3VsdHMiLCJiYW5uZXIiLCJvbkNsb3NlIiwiaGFuZGxlVHJhY2siLCJwcm9jZXNzVHJhY2siLCJoZWFkaW5nIiwiZ3JvdXAiLCJwb3BvdmVyIiwib3BlbiIsInN0eWxlIiwiaGVhZCIsInNoZWV0IiwiZm9yY2UiLCJDU1NfQVBQIiwiQ1NTX1NUSUNLWSIsIkNTU19UT0dHTEUiLCJDU1NfU0lERUJBUiIsInVzZVRyYW5zaXRpb24iLCJ0b2dnbGVBcHBFeHBhbmRlZCIsImhhbmRsZUFwcFRvZ2dsZUNsaWNrIiwic3RvcCIsImxpbmsiLCJjbG9zZVNpZGViYXIiLCJzaWRlYmFyIiwiTUlOX1kiLCJTQ1JPTExfVVAiLCJTVElDSyIsIlNUSUNLX0VMIiwiU1RJQ0tfSCIsIlNUSUNLX1kiLCJTVFVDSyIsIldJTl9IIiwiV0lOX1kiLCJoYW5kbGVNdXRhdGlvbiIsInN0aWNreSIsImhhbmRsZUFwcFNjcm9sbCIsIk5FWFRfWSIsIk5FWFRfVVAiLCJnZXRTdGVwcyIsIm5vdyIsInNob3ciLCJvZmZzZXQiLCJwYWdlcyIsInBhZ2luYXRpb24iLCJjdXJyZW50IiwidG90YWwiLCJwYWdlIiwidG9hc3QiLCJjb250ZW50IiwiZGlhbG9nIiwiaGFuZGxlVG9hc3RDbG9zZSIsImFuaW1hdGlvbk5hbWUiLCJwcm9wcyIsImxvYWRpbmciLCJzdWNjZXNzIiwiZXJyb3IiLCJfZXJyb3IiLCJoYW5kbGVCcmVhZGNydW1ic011dGF0aW9uIiwiYnJlYWRjcnVtYnMiLCJicmVhZGN1bWJzIiwiY3J1bWIiLCJ0b0F4aXMiLCJpc1N0YWNrZWQiLCJhbGwiLCJyb3ciLCJzdW0iLCJudW0iLCJkaWdpdHMiLCJzdGVwIiwiZ3JvdXBzIiwic3RlcHMiLCJnZXROdW0iLCJ0b0JhcnMiLCJ0b29sdGlwIiwibnVtYmVyIiwidG9MaW5lcyIsInZhcmlhbnQiLCJsaW5lQ29udGFpbmVyIiwicGF0aERlZmludGlvbiIsInRvUGF0aCIsImxpbmUiLCJwYXRoIiwibGluZVNoYWRlIiwiY29sIiwicG9pbnRzIiwicyIsInNtb290aCIsImF4IiwiYXkiLCJieCIsImJ5Iiwic3ViIiwiY3NYIiwiY3NZIiwiY2VYIiwiY2VZIiwidG9QaWVzIiwicGllIiwicmFkaXVzIiwiaW5uZXIiLCJ0b3QiLCJ0ZCIsImxhcmdlQXJjIiwiYTAiLCJhMSIsIngwIiwieTAiLCJ4MSIsInkxIiwiVE9PTFRJUF9JRCIsIlRPT0xUSVAiLCJNVERTQ2hhcnQiLCJ0b0RhdGEiLCJsZWdlbmQiLCJ0YWJsZSIsInRyIiwiVE9PTFRJUF9URVhUIiwib25Nb3ZlVG9vbHRpcCIsInRpcCIsInJvd0luZGV4IiwiY2VsbCIsImNlbGxJbmRleCIsIkNTU19ESUFMT0ciLCJESUFMT0dTIiwiaGFuZGxlTW9kYWwiLCJoYW5kbGVEaWFsb2dDbGljayIsImhhbmRsZUVycm9zdW1tYXJ5SW5qZWN0IiwiZmlyc3QiLCJESVNBQkxFRCIsIlNFTEVDVEVEIiwiVUhUTUxPcHRpb25FbGVtZW50IiwiVUhUTUxEYXRhTGlzdFN0eWxlIiwiTElWRV9USU1FUiIsIklOUFVUX0RFQk9VTkNFIiwiRVZFTlRTX0lOUFVUIiwiVUhUTUxEYXRhTGlzdEVsZW1lbnQiLCJkaXNjb25uZWN0SW5wdXQiLCJfcHJldiIsInNldHVwSW5wdXQiLCJzZXRFeHBhbmRlZCIsIl9jIiwiaXNQb3BvdmVyIiwiaXNJbnB1dCIsInJlbGF0ZWRUYXJnZXQiLCJhbHRLZXkiLCJjdHJsS2V5Iiwic2hpZnRLZXkiLCJtZXRhS2V5IiwiaXNFc2NhcGUiLCJfcm9vdCIsIl9pbnB1dCIsImZpbHRlciIsInZpc2libGUiLCJDU1NfRklFTEQiLCJDU1NfVkFMSURBVElPTlMiLCJDU1NfVkFMSURBVElPTiIsImdldFRleHQiLCJoYW5kbGVGaWVsZE11dGF0aW9uIiwiZmllbGRzIiwidmFsaWRhdGUiLCJmaWVsZCIsImxhYmVscyIsImRlc2NzIiwidmFsaWRzIiwiY29tYm9ib3giLCJ2YWxpZCIsImRlc2MiLCJyZW5kZXJDb21ib2JveCIsInJlbmRlckNvdW50ZXIiLCJyZW5kZXJUZXh0YXJlYVNpemUiLCJ0ZXh0YXJlYSIsImxpbWl0IiwicmVtYWluZGVyIiwibmV4dEludmFsaWQiLCJwcmV2SW52YWxpZCIsIm92ZXIiLCJ1bmRlciIsImhhbmRsZUZpZWxkVG9nZ2xlIiwiaGFuZGxlRmllbGRJbnB1dCIsImhhbmRsZUZpZWxkVmFsZGlhdGlvbiIsIkNTU19GSUVMRFNFVCIsIkFSSUFfREVTQyIsIkFSSUFfSU5WQUxJRCIsImhhbmRsZUZpZWxkc2V0TXV0YXRpb24iLCJmaWVsZHNldHMiLCJmaWVsZHNldCIsImlucHV0cyIsInZhbGlkSWQiLCJDU1NfTE9HTyIsImhhbmRsZUxvZ29NdXRhdGlvbiIsImxvZ28iLCJpY29uIiwic3ZnIiwiaXNEb3QiLCJiYWNrIiwiQ1NTX1BPUE9WRVIiLCJDU1NfQVVUTyIsImhhbmRsZVBvcG92ZXJUb2dnbGUiLCJuZXdTdGF0ZSIsImlzQ2xvc2luZyIsImlzQ29udGFpbiIsImhhbmRsZVBvcG92ZXJCZWZvcmV0b2dnbGUiLCJoYW5kbGVQb3BvdmVyTGlua0NsaWNrIiwicG9wIiwiQ1NTX1RBQkxFIiwiSU5URVJBQ1RJVkUiLCJoYW5kbGVUYWJsZU11dGF0aW9uIiwidGFibGVzIiwidGhzIiwidGgiLCJ0Ym9keSIsImhhbmRsZVRhYmxlQ2xpY2siLCJDU1NfVE9BU1QiLCJBVFRSX1NPUlQiLCJoYW5kbGVUb2FzdFN0YXRlIiwibXMiLCJoYW5kbGVUb2FzdENsaWNrIiwiY2xvc2UiLCJDU1NfVE9HR0xFR1JPVVAiLCJoYW5kbGVUb2dnbGVncm91cEtleWRvd24iLCJtb3ZlIiwiREVTQ1JJQkVEQlkiLCJFU0MiLCJMQUJFTExFREJZIiwiUE9TSVRJT05fQ1NTX1BST1BFUlRZIiwiVEhST1RUTEVfREVMQVkiLCJBTkNIT1IiLCJMQVNUX0NBTEwiLCJUSFJPVFRMRSIsImhhbmRsZVRvb2x0aXBNb3ZlIiwid2FpdCIsImhhbmRsZVRvb2x0aXBNb3ZlVGhyb3R0bGVkIiwicG9zaXRpb24iLCJoYWRMYWJlbCIsImhhc0xhYmVsIiwiVUhUTUxEZXRhaWxzU3R5bGUiLCJVSFRNTERldGFpbHNFbGVtZW50IiwiaGlkZSIsInVEZXRhaWxzTGlzdCIsInVEZXRhaWxzIiwic3VtbWFyeSIsImlzU3VtbWFyeSIsIlVIVE1MU3VtbWFyeUVsZW1lbnQiLCJVSFRNTFByb2dyZXNzU3R5bGUiLCJVSFRNTFByb2dyZXNzRWxlbWVudCIsInJvbGVJbWFnZSIsInBlcmNlbnRhZ2UiLCJnZXROdW1iZXIiLCJzZXROdW1iZXIiLCJpc051bWVyaWMiXSwibWFwcGluZ3MiOiJrQ0FBQSxJQUFJQSxHQUFZLE9BQU8sZUFDbkJDLEdBQXNCLE9BQU8sc0JBQzdCQyxHQUFlLE9BQU8sVUFBVSxlQUNoQ0MsR0FBZSxPQUFPLFVBQVUscUJBQ2hDQyxHQUFrQixDQUFDQyxFQUFLQyxFQUFLQyxJQUFVRCxLQUFPRCxFQUFNTCxHQUFVSyxFQUFLQyxFQUFLLENBQUUsV0FBWSxHQUFNLGFBQWMsR0FBTSxTQUFVLEdBQU0sTUFBQUMsQ0FBSyxDQUFFLEVBQUlGLEVBQUlDLENBQUcsRUFBSUMsRUFDdEpDLEdBQWlCLENBQUNDLEVBQUdDLElBQU0sQ0FDN0IsUUFBU0MsS0FBUUQsSUFBTUEsRUFBSSxDQUFBLEdBQ3JCUixHQUFhLEtBQUtRLEVBQUdDLENBQUksR0FDM0JQLEdBQWdCSyxFQUFHRSxFQUFNRCxFQUFFQyxDQUFJLENBQUMsRUFDcEMsR0FBSVYsR0FDRixRQUFTVSxLQUFRVixHQUFvQlMsQ0FBQyxFQUNoQ1AsR0FBYSxLQUFLTyxFQUFHQyxDQUFJLEdBQzNCUCxHQUFnQkssRUFBR0UsRUFBTUQsRUFBRUMsQ0FBSSxDQUFDLEVBRXRDLE9BQU9GLENBQ1QsRUFHSUcsR0FBYSxPQUFPLE9BQVcsS0FBZSxPQUFPLE9BQU8sU0FBYSxLQUFlLE9BQU8sT0FBTyxVQUFjLElBQ3BIQyxHQUFhRCxJQUFjLFdBQVcsS0FBSyxVQUFVLFNBQVMsRUFDOURFLEdBQWFGLElBQWMsV0FBVyxLQUFLLFVBQVUsU0FBUyxFQUM5REcsR0FBU0gsSUFBYyxtQkFBbUIsS0FBSyxVQUFVLFNBQVMsRUFDbEVJLEdBQ0pKLElBQ0EsUUFBUSxPQUFPSSxHQUFLLFVBQVUsZ0JBQWtCLEtBQU8sT0FBU0EsR0FBRyxXQUFhLFVBQVUsUUFBUSxFQUNsRyxJQUFJQyxHQUFnQiwrRkFDaEJDLEdBQWUsT0FBTyxZQUFnQixJQUFjLEtBQU0sQ0FDOUQsRUFBSSxZQUNKLFNB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
331
+ @keyframes indeterminate { from { background-position-x: 100% } to { background-position-x: 0 } }`,an=!1,Zi=class extends pl{static get observedAttributes(){return["aria-label","aria-labelledby","value","max"]}constructor(){super(),this.shadowRoot||this.attachShadow({mode:"open"}).append(Ji("slot",null,{hidden:""}),Ji("style",_l))}connectedCallback(){this.attributeChangedCallback()}attributeChangedCallback(){if(an)return;an=!0;const t=fl||Xi,e=Math.max(0,Math.round(this.position*100));this.style.setProperty("--percentage",`${e}%`);let n=vl(this);if(t&&(n=`${n.replace(/\d+%$/,"")} ${e}%`),Xi)for(const o of this.labels)I(o,"aria-label",n);I(this,"aria-busy",`${this.position===-1}`),I(this,"aria-label",n.trim()),I(this,"aria-labelledby",null),I(this,"aria-valuemax","100"),I(this,"aria-valuemin","0"),I(this,"aria-valuenow",`${e}`),I(this,"role",t?"img":"progressbar"),an=!1}get labels(){const t=this.closest("label:not([for])"),e=gl(this);return t&&(t.htmlFor=e),ml(this).querySelectorAll(`label[for="${e}"]`)}get position(){return this.value===null?-1:Math.min(this.value/this.max,1)}get value(){return es(this,"value")}set value(t){ns(this,"value",t)}get max(){return es(this,"max")||1}set max(t){ns(this,"max",t)}};Zi.formAssociated=!0;var ts=t=>!Number.isNaN(Number.parseFloat(`${t}`))&&Number.isFinite(Number(t)),es=(t,e)=>{const n=I(t,e);return ts(n)?Math.max(0,Number.parseFloat(n)):null},ns=(t,e,n)=>{if(n===null||ts(n))I(t,e,`${n}`);else throw new Error(`Failed to set non-numeric '${I}': '${n}'`)};return bl.define("u-progress",Zi),M.UHTMLComboboxElement=ye,M.UHTMLTabElement=kn,M.UHTMLTabListElement=$n,M.UHTMLTabPanelElement=An,M.UHTMLTabsElement=Cn,M.analytics=ei,M.pagination=Qa,M.styles=Bs,M.toast=k,M.toggleAppExpanded=si,M.version=Hs,Object.defineProperty(M,Symbol.toStringTag,{value:"Module"}),M}({});