User:Eejit43/scripts/rmtr-helper.js
Appearance
< User:Eejit43 | scripts
Code that you insert on this page could contain malicious content capable of compromising your account. If you import a script from another page with "importScript", "mw.loader.load", "iusc", or "lusc", take note that this causes you to dynamically load a remote script, which could be changed by others. Editors are responsible for all edits and actions they perform, including by scripts. User scripts are not centrally supported and may malfunction or become inoperable due to software changes. A guide to help you find broken scripts is available. If you are unsure whether code you are adding to this page is safe, you can ask at the appropriate village pump. This code will be executed when previewing this page. |
![]() | This user script seems to have a documentation page at User:Eejit43/scripts/rmtr-helper. |
// <nowiki>
// Note: This script was compiled and minified from TypeScript. For a more readable version, see https://github.com/Eejit43/wikipedia-scripts/blob/main/scripts/rmtr-helper.ts
"use strict";(()=>{var T=`#rmtr-review-result{margin:1em;border:1px solid #a2a9b1;border-radius:2px;background-color:#f5f5f5;padding:2.5%;color:#202122;font-size:.8em}#rmtr-review-header{margin-bottom:.5em;font-weight:700;font-size:1.5em}.rmtr-review-header{margin:.5em 0;font-weight:700;font-size:1em}.rmtr-review-invalid-warning{color:#cd5c5c;font-weight:700}.rmtr-review-request-checkbox{margin:3px 3px 0}.rmtr-review-section-content{margin-left:1em;line-height:1.3}.rmtr-review-section-content li+li{margin-top:.4rem;margin-bottom:.4rem}#rmtr-review-submit{margin-top:.2em}#rmtr-review-loading{display:inline-block;vertical-align:text-bottom;margin-top:-.3em;margin-left:3px;height:1.3em;overflow:hidden;line-height:1.5em}#rmtr-review-loading:after{display:inline-table;animation:rmtr-review-loading .8s steps(10) infinite;content:"\\280b\\a\\2819\\a\\2839\\a\\2838\\a\\283c\\a\\2834\\a\\2826\\a\\2827\\a\\2807\\a\\280f";text-align:left;white-space:pre}@keyframes rmtr-review-loading{to{transform:translateY(-15em)}}
`;mw.loader.using(["mediawiki.util"],()=>{if(mw.config.get("wgPageName")!=="Wikipedia:Requested_moves/Technical_requests")return;mw.util.addCSS(T);let x=mw.config.get("wgNamespaceIds"),k=!1;mw.util.addPortletLink(mw.config.get("skin")==="minerva"?"p-tb":"p-cactions","#","Review move requests","review-rmtr-requests").addEventListener("click",async P=>{if(P.preventDefault(),k)return document.querySelector("#rmtr-review-result")?.scrollIntoView();k=!0;let L=await I(),O=L.revid,S=L.slots.main.content,y=["Uncontroversial technical requests","Requests to revert undiscussed moves","Contested technical requests","Administrator needed"],N=y[2],j=y[3],d={};function A(c){let t=[],n=["[","{"],l=["]","}"],r=!1,s="";for(let i=0;i<c.length;i++){let o=c[i],a=c[i+1];if(o==="|"&&!r||i===c.length-1){o!=="|"&&(s+=o),t.push(s),s="";continue}s+=o,n.some(m=>m===o&&m===a)?r=!0:l.some(m=>m===o&&m===a)&&(r=!1)}let e={};for(let[i,o]of t.entries()){let a=o.split("=").map(m=>m.trim());a.length===1&&a.unshift((i+1).toString()),e[a.shift()]=a.join("=")}return e}for(let c of y){let n=S.split(new RegExp(`={3,} ?${c} ?={3,}`))[1].split(/={3,}/m)[0].trim().match(/(?:\* ?\n)?[ *:]*{{rmassist\/core.+?(?=[ *:]*{{rmassist\/core|$)/gis);if(n)d[c]=n.map(l=>{l=l.trim();let r=A(l.replaceAll(/(?:\* ?\n)?[ *:]*{{rmassist\/core\s*\||}}(?![^\n]*}}).*/gis,""));return r.full=l,r.original=r[1]?.replace(/^\[+/,"").replace(/]+$/,"")??"UNKNOWN",r.destination=r[2]?.replace(/^\[+/,"").replace(/]+$/,"")??"UNKNOWN",r.requester||(r.requester=r.sig?.match(/\[\[User:(.*?)(\||]])/)?.[1].trim()),delete r[1],delete r[2],r});else{d[c]=[];continue}}await Promise.all(Object.entries(d).map(async([,c])=>{await Promise.all(c.map(async t=>{let n=mw.Title.newFromText(t.original),l=mw.Title.newFromText(t.destination);if(!n)return mw.notify(`Invalid title "${t.original}"!`,{type:"error"});if(!l)return mw.notify(`Invalid title "${t.destination}"!`,{type:"error"});let r=!/[#<>[\]{|}]/.test(t.destination)&&l,s=document.createElement("span");s.classList.add("rmtr-review-invalid-warning"),s.textContent=`Invalid title "${t.destination}"!`;let e=![x.file,x.category].some(u=>n.getNamespaceId()===u||l.getNamespaceId()===u),i=document.createElement("span");i.classList.add("rmtr-review-invalid-warning"),i.textContent=`Warning: original or destination page is in namespace "${l.getNamespaceId()===x.file?"file":"category"}"!`;let o=await new mw.Api().parse(`[[:${t.original}]] \u2192 ${r?`[[:${t.destination}]]`:s.outerHTML} requested by ${t.requester?mw.util.isIPAddress(t.requester)?`[[Special:Contributions/${t.requester}|${t.requester}]]`:`[[User:${t.requester}|${t.requester}]]`:/(\[{2}Special:Contributions\/(.*?)\|\2]{2})/.exec(t.sig)?.[1]??"(unknown)"} with reasoning "${t.reason}"`),a=new DOMParser().parseFromString(o,"text/html"),m=document.createElement("li");m.innerHTML=a.querySelector("div.mw-parser-output").firstElementChild.innerHTML,e||m.append(i),t.element=m}))}));let f=document.createElement("div");f.id="rmtr-review-result";let E=document.createElement("div");E.id="rmtr-review-header",E.textContent="Technical move requests review",f.append(E);for(let[c,[t,n]]of Object.entries(d).entries()){let l=document.createElement("div");l.classList.add("rmtr-review-header"),l.textContent=t,f.append(l);let r=document.createElement("div");if(r.classList.add("rmtr-review-section-content"),n.length===0){let s=document.createElement("div");s.textContent="No requests in this section",r.append(s)}else{let s=document.createElement("ul");for(let[e,i]of n.entries()){let o=i.element,a=document.createElement("input");a.type="checkbox",a.classList.add("rmtr-review-request-checkbox"),a.id=`rmtr-review-remove-request-${c}-${e}`,a.addEventListener("change",()=>{a.checked?(d[t][e].result={remove:!0,reason:R.value},u.style.display="inline",v.disabled=!0):(delete d[t][e].result,u.style.display="none",v.disabled=!1)});let m=document.createElement("label");m.htmlFor=`rmtr-review-remove-request-${c}-${e}`,m.textContent="Remove request",o.append(a),o.append(m);let u=document.createElement("span");u.style.display="none",u.append(document.createTextNode(" as "));let R=document.createElement("select");t==="Contested technical requests"&&(R.value="Contested"),R.addEventListener("change",()=>{d[t][e].result.reason=R.value});let M=["Completed","Contested","Already done","Invalid page name","Incorrect venue","Withdrawn","Stale","Not done"];for(let h of M){let g=document.createElement("option");g.value=h,g.textContent=h,R.append(g)}u.append(R),o.append(u);let v=document.createElement("input");v.type="checkbox",v.classList.add("rmtr-review-request-checkbox"),v.id=`rmtr-review-move-request-${c}-${e}`,v.addEventListener("change",()=>{v.checked?(d[t][e].result={move:!0,section:$.value},p.style.display="inline",a.disabled=!0):(delete d[t][e].result,p.style.display="none",a.disabled=!1)});let C=document.createElement("label");C.htmlFor=`rmtr-review-move-request-${c}-${e}`,C.textContent="Switch section",o.append(v),o.append(C);let p=document.createElement("span");p.style.display="none",p.append(document.createTextNode(" to "));let $=document.createElement("select");$.addEventListener("change",()=>{d[t][e].result.section=$.value});for(let h of y){if(h===t)continue;let g=document.createElement("option");g.selected=h===(t===N?j:N),g.value=h,g.textContent=h,$.append(g)}p.append($),p.append(document.createTextNode(" with reasoning "));let q=document.createElement("input");q.type="text",q.addEventListener("input",()=>{d[t][e].result.reason=q.value}),p.append(q),p.append(document.createTextNode(" (optional, automatically pings requestor and signs)")),o.append(p),s.append(o)}r.append(s)}f.append(r)}let w=document.createElement("button");w.id="rmtr-review-submit",w.textContent="Submit",w.addEventListener("click",async()=>{if((await I()).revid!==O)return mw.notify("rmtr-helper: An edit conflict occurred, please start over!",{type:"error"});w.disabled=!0,b.style.display="inline-block";let t=S,n={remove:{},move:{},total:0};for(let s of Object.values(d))for(let e of s)if(e.result){if("remove"in e.result)t=t.replace(e.full+`
`,"").replace(e.full,""),e.result.reason in n.remove||(n.remove[e.result.reason]=[]),n.remove[e.result.reason].push(e),n.total++;else if("move"in e.result){let i=y[y.indexOf(e.result.section)+1];t=t.replace(e.full+`
`,"").replace(e.full,""),t=t.replace(new RegExp(`(
?
?(?:={3,} ?${i} ?={3,}|$))`),`
${e.full}${e.result.reason?`
:: ${e.requester&&e.requester.length>0?mw.util.isIPAddress(e.requester)?"":`@[[User:${e.requester}|${e.requester}]] `:""} ${e.result.reason} ~~~~`:""}$1`),e.result.section in n.move||(n.move[e.result.section]=[]),n.move[e.result.section].push(e),n.total++}}if(n.total===0)return w.disabled=!1,b.style.display="none",mw.notify("No changes to make!",{type:"error"});let l=Object.values(d).every(s=>s.every(e=>e.result&&"remove"in e.result)),r=`Handled ${n.total} request${n.total>1?"s":""}: ${Object.entries(n.remove).length>0?`Removed ${Object.entries(n.remove).map(([s,e])=>`${e.map(i=>`[[${i.original}]]`).join(", ")} as ${s.toLowerCase()}`).join(", ")}`:""}${Object.entries(n.move).length>0?`${Object.entries(n.remove).length>0?", ":""}Moved ${Object.entries(n.move).map(([s,e])=>`${e.map(i=>`[[${i.original}]]`).join(", ")} to "${s}"`).join(", ")}`:""}${l?" (no requests remain)":""} (via [[User:Eejit43/scripts/rmtr-helper|script]])`;await new mw.Api().edit(mw.config.get("wgPageName"),()=>({text:t,summary:r})),mw.notify(`Successfully handled ${n.total} requests, reloading...`,{type:"success"}),window.location.reload()});let b=document.createElement("span");b.id="rmtr-review-loading",b.style.display="none",w.append(b),f.append(w),mw.util.$content[0].prepend(f),f.scrollIntoView()})});async function I(){return(await new mw.Api().get({action:"query",formatversion:"2",prop:"revisions",rvprop:["content","ids"],rvslots:"main",titles:mw.config.get("wgPageName")})).query.pages[0].revisions[0]}})();
// </nowiki>
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3R5bGVzL3JtdHItaGVscGVyLmNzcyIsICIuLi9zY3JpcHRzL3JtdHItaGVscGVyLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIjcm10ci1yZXZpZXctcmVzdWx0e21hcmdpbjoxZW07Ym9yZGVyOjFweCBzb2xpZCAjYTJhOWIxO2JvcmRlci1yYWRpdXM6MnB4O2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtwYWRkaW5nOjIuNSU7Y29sb3I6IzIwMjEyMjtmb250LXNpemU6LjhlbX0jcm10ci1yZXZpZXctaGVhZGVye21hcmdpbi1ib3R0b206LjVlbTtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjEuNWVtfS5ybXRyLXJldmlldy1oZWFkZXJ7bWFyZ2luOi41ZW0gMDtmb250LXdlaWdodDo3MDA7Zm9udC1zaXplOjFlbX0ucm10ci1yZXZpZXctaW52YWxpZC13YXJuaW5ne2NvbG9yOiNjZDVjNWM7Zm9udC13ZWlnaHQ6NzAwfS5ybXRyLXJldmlldy1yZXF1ZXN0LWNoZWNrYm94e21hcmdpbjozcHggM3B4IDB9LnJtdHItcmV2aWV3LXNlY3Rpb24tY29udGVudHttYXJnaW4tbGVmdDoxZW07bGluZS1oZWlnaHQ6MS4zfS5ybXRyLXJldmlldy1zZWN0aW9uLWNvbnRlbnQgbGkrbGl7bWFyZ2luLXRvcDouNHJlbTttYXJnaW4tYm90dG9tOi40cmVtfSNybXRyLXJldmlldy1zdWJtaXR7bWFyZ2luLXRvcDouMmVtfSNybXRyLXJldmlldy1sb2FkaW5ne2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tO21hcmdpbi10b3A6LS4zZW07bWFyZ2luLWxlZnQ6M3B4O2hlaWdodDoxLjNlbTtvdmVyZmxvdzpoaWRkZW47bGluZS1oZWlnaHQ6MS41ZW19I3JtdHItcmV2aWV3LWxvYWRpbmc6YWZ0ZXJ7ZGlzcGxheTppbmxpbmUtdGFibGU7YW5pbWF0aW9uOnJtdHItcmV2aWV3LWxvYWRpbmcgLjhzIHN0ZXBzKDEwKSBpbmZpbml0ZTtjb250ZW50OlwiXFwyODBiXFxhXFwyODE5XFxhXFwyODM5XFxhXFwyODM4XFxhXFwyODNjXFxhXFwyODM0XFxhXFwyODI2XFxhXFwyODI3XFxhXFwyODA3XFxhXFwyODBmXCI7dGV4dC1hbGlnbjpsZWZ0O3doaXRlLXNwYWNlOnByZX1Aa2V5ZnJhbWVzIHJtdHItcmV2aWV3LWxvYWRpbmd7dG97dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTE1ZW0pfX1cbiIsICJpbXBvcnQgdHlwZSB7IEFwaVF1ZXJ5UmV2aXNpb25zUGFyYW1zIH0gZnJvbSAndHlwZXMtbWVkaWF3aWtpL2FwaV9wYXJhbXMnO1xuaW1wb3J0IHR5cGUgeyBQYWdlUmV2aXNpb25zUmVzdWx0IH0gZnJvbSAnLi4vZ2xvYmFsLXR5cGVzJztcbmltcG9ydCBjc3NDb250ZW50IGZyb20gJy4uL3N0eWxlcy9ybXRyLWhlbHBlci5jc3MnIHdpdGggeyB0eXBlOiAnY3NzJyB9O1xuXG5tdy5sb2FkZXIudXNpbmcoWydtZWRpYXdpa2kudXRpbCddLCAoKSA9PiB7XG4gICAgaWYgKG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSAhPT0gJ1dpa2lwZWRpYTpSZXF1ZXN0ZWRfbW92ZXMvVGVjaG5pY2FsX3JlcXVlc3RzJykgcmV0dXJuO1xuXG4gICAgbXcudXRpbC5hZGRDU1MoY3NzQ29udGVudCk7XG5cbiAgICBjb25zdCBuYW1lc3BhY2VzID0gbXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VJZHMnKTtcblxuICAgIGxldCBkaXNwbGF5ZWQgPSBmYWxzZTtcblxuICAgIGNvbnN0IGxpbmsgPSBtdy51dGlsLmFkZFBvcnRsZXRMaW5rKFxuICAgICAgICBtdy5jb25maWcuZ2V0KCdza2luJykgPT09ICdtaW5lcnZhJyA/ICdwLXRiJyA6ICdwLWNhY3Rpb25zJyxcbiAgICAgICAgJyMnLFxuICAgICAgICAnUmV2aWV3IG1vdmUgcmVxdWVzdHMnLFxuICAgICAgICAncmV2aWV3LXJtdHItcmVxdWVzdHMnLFxuICAgICkhO1xuXG4gICAgbGluay5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGlmIChkaXNwbGF5ZWQpIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjcm10ci1yZXZpZXctcmVzdWx0Jyk/LnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgIGVsc2UgZGlzcGxheWVkID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBwYWdlUmV2aXNpb24gPSBhd2FpdCBnZXRQYWdlUmV2aXNpb24oKTtcblxuICAgICAgICBjb25zdCByZXZJZCA9IHBhZ2VSZXZpc2lvbi5yZXZpZDtcbiAgICAgICAgY29uc3QgcGFnZUNvbnRlbnQgPSBwYWdlUmV2aXNpb24uc2xvdHMubWFpbi5jb250ZW50O1xuXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gW1xuICAgICAgICAgICAgJ1VuY29udHJvdmVyc2lhbCB0ZWNobmljYWwgcmVxdWVzdHMnLFxuICAgICAgICAgICAgJ1JlcXVlc3RzIHRvIHJldmVydCB1bmRpc2N1c3NlZCBtb3ZlcycsXG4gICAgICAgICAgICAnQ29udGVzdGVkIHRlY2huaWNhbCByZXF1ZXN0cycsXG4gICAgICAgICAgICAnQWRtaW5pc3RyYXRvciBuZWVkZWQnLFxuICAgICAgICBdO1xuXG4gICAgICAgIGNvbnN0IGRlZmF1bHRNb3ZlU2VjdGlvbiA9IHNlY3Rpb25zWzJdO1xuICAgICAgICBjb25zdCBmYWxsYmFja0RlZmF1bHRNb3ZlU2VjdGlvbiA9IHNlY3Rpb25zWzNdO1xuXG4gICAgICAgIGludGVyZmFjZSBSZXF1ZXN0IHtcbiAgICAgICAgICAgIHNpZzogc3RyaW5nO1xuICAgICAgICAgICAgcmVxdWVzdGVyPzogc3RyaW5nO1xuICAgICAgICAgICAgcmVhc29uOiBzdHJpbmc7XG4gICAgICAgICAgICBmdWxsOiBzdHJpbmc7XG4gICAgICAgICAgICBvcmlnaW5hbDogc3RyaW5nO1xuICAgICAgICAgICAgZGVzdGluYXRpb246IHN0cmluZztcbiAgICAgICAgICAgIGVsZW1lbnQ6IEhUTUxMSUVsZW1lbnQ7XG4gICAgICAgICAgICByZXN1bHQ/OiBSZXF1ZXN0UmVzdWx0TW92ZSB8IFJlcXVlc3RSZXN1bHRSZW1vdmU7XG4gICAgICAgIH1cblxuICAgICAgICBpbnRlcmZhY2UgUmVxdWVzdFJlc3VsdE1vdmUge1xuICAgICAgICAgICAgbW92ZTogYm9vbGVhbjtcbiAgICAgICAgICAgIHNlY3Rpb246IHN0cmluZztcbiAgICAgICAgICAgIHJlYXNvbj86IHN0cmluZztcbiAgICAgICAgfVxuXG4gICAgICAgIGludGVyZmFjZSBSZXF1ZXN0UmVzdWx0UmVtb3ZlIHtcbiAgICAgICAgICAgIHJlbW92ZTogYm9vbGVhbjtcbiAgICAgICAgICAgIHJlYXNvbjogc3RyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYWxsUmVxdWVzdHM6IFJlY29yZDxzdHJpbmcsIFJlcXVlc3RbXT4gPSB7fTtcblxuICAgICAgICAvKipcbiAgICAgICAgICogUGFyc2VzIHRoZSBwYXJhbWV0ZXJzIG9mIGEgZ2l2ZW4gV2lraXRleHQgdGVtcGxhdGUuXG4gICAgICAgICAqIEBwYXJhbSB0ZW1wbGF0ZSBUaGUgdGVtcGxhdGUgdG8gcGFyc2UuXG4gICAgICAgICAqL1xuICAgICAgICBmdW5jdGlvbiBwYXJzZVRlbXBsYXRlUGFyYW1ldGVycyh0ZW1wbGF0ZTogc3RyaW5nKSB7XG4gICAgICAgICAgICBjb25zdCByYXdQYXJhbWV0ZXJzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICAgICAgICBjb25zdCBpZ25vcmVkU3RhcnRTeW1ib2xzID0gWydbJywgJ3snXTtcbiAgICAgICAgICAgIGNvbnN0IGlnbm9yZWRFbmRTeW1ib2xzID0gWyddJywgJ30nXTtcblxuICAgICAgICAgICAgbGV0IGluc2lkZUxpbmtPclRlbXBsYXRlID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgY3VycmVudFRleHQgPSAnJztcblxuICAgICAgICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRlbXBsYXRlLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJhY3RlciA9IHRlbXBsYXRlW2luZGV4XTtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXh0Q2hhcmFjdGVyOiBzdHJpbmcgfCB1bmRlZmluZWQgPSB0ZW1wbGF0ZVtpbmRleCArIDFdO1xuXG4gICAgICAgICAgICAgICAgaWYgKChjaGFyYWN0ZXIgPT09ICd8JyAmJiAhaW5zaWRlTGlua09yVGVtcGxhdGUpIHx8IGluZGV4ID09PSB0ZW1wbGF0ZS5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXIgIT09ICd8JykgY3VycmVudFRleHQgKz0gY2hhcmFjdGVyO1xuXG4gICAgICAgICAgICAgICAgICAgIHJhd1BhcmFtZXRlcnMucHVzaChjdXJyZW50VGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUZXh0ID0gJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY3VycmVudFRleHQgKz0gY2hhcmFjdGVyO1xuXG4gICAgICAgICAgICAgICAgaWYgKGlnbm9yZWRTdGFydFN5bWJvbHMuc29tZSgoc3ltYm9sKSA9PiBzeW1ib2wgPT09IGNoYXJhY3RlciAmJiBzeW1ib2wgPT09IG5leHRDaGFyYWN0ZXIpKSBpbnNpZGVMaW5rT3JUZW1wbGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaWdub3JlZEVuZFN5bWJvbHMuc29tZSgoc3ltYm9sKSA9PiBzeW1ib2wgPT09IGNoYXJhY3RlciAmJiBzeW1ib2wgPT09IG5leHRDaGFyYWN0ZXIpKSBpbnNpZGVMaW5rT3JUZW1wbGF0ZSA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwYXJhbWV0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+ID0ge307XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgW2luZGV4LCBwYXJhbWV0ZXJdIG9mIHJhd1BhcmFtZXRlcnMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3BsaXRQYXJhbWV0ZXIgPSBwYXJhbWV0ZXIuc3BsaXQoJz0nKS5tYXAoKHZhbHVlKSA9PiB2YWx1ZS50cmltKCkpO1xuXG4gICAgICAgICAgICAgICAgaWYgKHNwbGl0UGFyYW1ldGVyLmxlbmd0aCA9PT0gMSkgc3BsaXRQYXJhbWV0ZXIudW5zaGlmdCgoaW5kZXggKyAxKS50b1N0cmluZygpKTtcblxuICAgICAgICAgICAgICAgIHBhcmFtZXRlcnNbc3BsaXRQYXJhbWV0ZXIuc2hpZnQoKSFdID0gc3BsaXRQYXJhbWV0ZXIuam9pbignPScpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVycztcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkNvbnRlbnQgPSBwYWdlQ29udGVudFxuICAgICAgICAgICAgICAgIC5zcGxpdChuZXcgUmVnRXhwKGA9ezMsfSA/JHtzZWN0aW9ufSA/PXszLH1gKSlbMV1cbiAgICAgICAgICAgICAgICAuc3BsaXQoLz17Myx9L20pWzBdXG4gICAgICAgICAgICAgICAgLnRyaW0oKTtcblxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZFJlcXVlc3RzID0gc2VjdGlvbkNvbnRlbnQubWF0Y2goLyg/OlxcKiA/XFxuKT9bICo6XSp7e3JtYXNzaXN0XFwvY29yZS4rPyg/PVsgKjpdKnt7cm1hc3Npc3RcXC9jb3JlfCQpL2dpcyk7XG5cbiAgICAgICAgICAgIGlmIChtYXRjaGVkUmVxdWVzdHMpXG4gICAgICAgICAgICAgICAgYWxsUmVxdWVzdHNbc2VjdGlvbl0gPSBtYXRjaGVkUmVxdWVzdHMubWFwKChyZXF1ZXN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgPSByZXF1ZXN0LnRyaW0oKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbWV0ZXJzID0gcGFyc2VUZW1wbGF0ZVBhcmFtZXRlcnMoXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnJlcGxhY2VBbGwoLyg/OlxcKiA/XFxuKT9bICo6XSp7e3JtYXNzaXN0XFwvY29yZVxccypcXHx8fX0oPyFbXlxcbl0qfX0pLiovZ2lzLCAnJyksXG4gICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5mdWxsID0gcmVxdWVzdDtcblxuICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXJzLm9yaWdpbmFsID0gcGFyYW1ldGVyc1sxXT8ucmVwbGFjZSgvXlxcWysvLCAnJykucmVwbGFjZSgvXSskLywgJycpID8/ICdVTktOT1dOJztcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1ldGVycy5kZXN0aW5hdGlvbiA9IHBhcmFtZXRlcnNbMl0/LnJlcGxhY2UoL15cXFsrLywgJycpLnJlcGxhY2UoL10rJC8sICcnKSA/PyAnVU5LTk9XTic7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCFwYXJhbWV0ZXJzLnJlcXVlc3RlcikgcGFyYW1ldGVycy5yZXF1ZXN0ZXIgPSBwYXJhbWV0ZXJzLnNpZz8ubWF0Y2goL1xcW1xcW1VzZXI6KC4qPykoXFx8fF1dKS8pPy5bMV0udHJpbSgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBwYXJhbWV0ZXJzWzFdO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcGFyYW1ldGVyc1syXTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyYW1ldGVycyBhcyB1bmtub3duIGFzIFJlcXVlc3Q7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0c1tzZWN0aW9uXSA9IFtdO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhhbGxSZXF1ZXN0cykubWFwKGFzeW5jIChbLCByZXF1ZXN0c10pID0+IHtcbiAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMubWFwKGFzeW5jIChyZXF1ZXN0KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtd09sZFRpdGxlID0gbXcuVGl0bGUubmV3RnJvbVRleHQocmVxdWVzdC5vcmlnaW5hbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtd05ld1RpdGxlID0gbXcuVGl0bGUubmV3RnJvbVRleHQocmVxdWVzdC5kZXN0aW5hdGlvbik7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbXdPbGRUaXRsZSkgcmV0dXJuIG13Lm5vdGlmeShgSW52YWxpZCB0aXRsZSBcIiR7cmVxdWVzdC5vcmlnaW5hbH1cIiFgLCB7IHR5cGU6ICdlcnJvcicgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW13TmV3VGl0bGUpIHJldHVybiBtdy5ub3RpZnkoYEludmFsaWQgdGl0bGUgXCIke3JlcXVlc3QuZGVzdGluYXRpb259XCIhYCwgeyB0eXBlOiAnZXJyb3InIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZFRpdGxlID0gIS9bIzw+W1xcXXt8fV0vLnRlc3QocmVxdWVzdC5kZXN0aW5hdGlvbikgJiYgbXdOZXdUaXRsZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW52YWxpZFRpdGxlV2FybmluZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRUaXRsZVdhcm5pbmcuY2xhc3NMaXN0LmFkZCgncm10ci1yZXZpZXctaW52YWxpZC13YXJuaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkVGl0bGVXYXJuaW5nLnRleHRDb250ZW50ID0gYEludmFsaWQgdGl0bGUgXCIke3JlcXVlc3QuZGVzdGluYXRpb259XCIhYDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWROYW1lc3BhY2UgPSAhW25hbWVzcGFjZXMuZmlsZSwgbmFtZXNwYWNlcy5jYXRlZ29yeV0uc29tZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmFtZXNwYWNlKSA9PiBtd09sZFRpdGxlLmdldE5hbWVzcGFjZUlkKCkgPT09IG5hbWVzcGFjZSB8fCBtd05ld1RpdGxlLmdldE5hbWVzcGFjZUlkKCkgPT09IG5hbWVzcGFjZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludmFsaWROYW1lc3BhY2VXYXJuaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZE5hbWVzcGFjZVdhcm5pbmcuY2xhc3NMaXN0LmFkZCgncm10ci1yZXZpZXctaW52YWxpZC13YXJuaW5nJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkTmFtZXNwYWNlV2FybmluZy50ZXh0Q29udGVudCA9IGBXYXJuaW5nOiBvcmlnaW5hbCBvciBkZXN0aW5hdGlvbiBwYWdlIGlzIGluIG5hbWVzcGFjZSBcIiR7bXdOZXdUaXRsZS5nZXROYW1lc3BhY2VJZCgpID09PSBuYW1lc3BhY2VzLmZpbGUgPyAnZmlsZScgOiAnY2F0ZWdvcnknfVwiIWA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFdpa2l0ZXh0ID0gYXdhaXQgbmV3IG13LkFwaSgpLnBhcnNlKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBbWzoke3JlcXVlc3Qub3JpZ2luYWx9XV0gXHUyMTkyICR7dmFsaWRUaXRsZSA/IGBbWzoke3JlcXVlc3QuZGVzdGluYXRpb259XV1gIDogaW52YWxpZFRpdGxlV2FybmluZy5vdXRlckhUTUx9IHJlcXVlc3RlZCBieSAke1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnJlcXVlc3RlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBtdy51dGlsLmlzSVBBZGRyZXNzKHJlcXVlc3QucmVxdWVzdGVyKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gYFtbU3BlY2lhbDpDb250cmlidXRpb25zLyR7cmVxdWVzdC5yZXF1ZXN0ZXJ9fCR7cmVxdWVzdC5yZXF1ZXN0ZXJ9XV1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBgW1tVc2VyOiR7cmVxdWVzdC5yZXF1ZXN0ZXJ9fCR7cmVxdWVzdC5yZXF1ZXN0ZXJ9XV1gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICgvKFxcW3syfVNwZWNpYWw6Q29udHJpYnV0aW9uc1xcLyguKj8pXFx8XFwyXXsyfSkvLmV4ZWMocmVxdWVzdC5zaWcpPy5bMV0gPz8gJyh1bmtub3duKScpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSB3aXRoIHJlYXNvbmluZyBcIiR7cmVxdWVzdC5yZWFzb259XCJgLFxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZEh0bWwgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKHBhcnNlZFdpa2l0ZXh0LCAndGV4dC9odG1sJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGknKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RFbGVtZW50LmlubmVySFRNTCA9IHBhcnNlZEh0bWwucXVlcnlTZWxlY3RvcignZGl2Lm13LXBhcnNlci1vdXRwdXQnKSEuZmlyc3RFbGVtZW50Q2hpbGQhLmlubmVySFRNTCE7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsaWROYW1lc3BhY2UpIHJlcXVlc3RFbGVtZW50LmFwcGVuZChpbnZhbGlkTmFtZXNwYWNlV2FybmluZyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuZWxlbWVudCA9IHJlcXVlc3RFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSksXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3Qgb3V0cHV0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBvdXRwdXRFbGVtZW50LmlkID0gJ3JtdHItcmV2aWV3LXJlc3VsdCc7XG5cbiAgICAgICAgY29uc3QgaGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgIGhlYWRlci5pZCA9ICdybXRyLXJldmlldy1oZWFkZXInO1xuICAgICAgICBoZWFkZXIudGV4dENvbnRlbnQgPSAnVGVjaG5pY2FsIG1vdmUgcmVxdWVzdHMgcmV2aWV3JztcblxuICAgICAgICBvdXRwdXRFbGVtZW50LmFwcGVuZChoZWFkZXIpO1xuXG4gICAgICAgIGZvciAoY29uc3QgW3NlY3Rpb25JbmRleCwgW3NlY3Rpb24sIHJlcXVlc3RzXV0gb2YgT2JqZWN0LmVudHJpZXMoYWxsUmVxdWVzdHMpLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgc2VjdGlvbkhlYWRlci5jbGFzc0xpc3QuYWRkKCdybXRyLXJldmlldy1oZWFkZXInKTtcbiAgICAgICAgICAgIHNlY3Rpb25IZWFkZXIudGV4dENvbnRlbnQgPSBzZWN0aW9uO1xuXG4gICAgICAgICAgICBvdXRwdXRFbGVtZW50LmFwcGVuZChzZWN0aW9uSGVhZGVyKTtcblxuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkNvbnRlbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHNlY3Rpb25Db250ZW50LmNsYXNzTGlzdC5hZGQoJ3JtdHItcmV2aWV3LXNlY3Rpb24tY29udGVudCcpO1xuXG4gICAgICAgICAgICBpZiAocmVxdWVzdHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm9SZXF1ZXN0cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICAgICAgICAgIG5vUmVxdWVzdHMudGV4dENvbnRlbnQgPSAnTm8gcmVxdWVzdHMgaW4gdGhpcyBzZWN0aW9uJztcblxuICAgICAgICAgICAgICAgIHNlY3Rpb25Db250ZW50LmFwcGVuZChub1JlcXVlc3RzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVxdWVzdHNMaXN0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndWwnKTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW3JlcXVlc3RJbmRleCwgcmVxdWVzdF0gb2YgcmVxdWVzdHMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RFbGVtZW50ID0gcmVxdWVzdC5lbGVtZW50O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZVJlcXVlc3RDaGVja2JveCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RDaGVja2JveC50eXBlID0gJ2NoZWNrYm94JztcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdENoZWNrYm94LmNsYXNzTGlzdC5hZGQoJ3JtdHItcmV2aWV3LXJlcXVlc3QtY2hlY2tib3gnKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdENoZWNrYm94LmlkID0gYHJtdHItcmV2aWV3LXJlbW92ZS1yZXF1ZXN0LSR7c2VjdGlvbkluZGV4fS0ke3JlcXVlc3RJbmRleH1gO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0Q2hlY2tib3guYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbW92ZVJlcXVlc3RDaGVja2JveC5jaGVja2VkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsUmVxdWVzdHNbc2VjdGlvbl1bcmVxdWVzdEluZGV4XS5yZXN1bHQgPSB7IHJlbW92ZTogdHJ1ZSwgcmVhc29uOiByZW1vdmVSZXF1ZXN0RHJvcGRvd24udmFsdWUgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0RXh0cmFJbnB1dHMuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25DaGVja2JveC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhbGxSZXF1ZXN0c1tzZWN0aW9uXVtyZXF1ZXN0SW5kZXhdLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0RXh0cmFJbnB1dHMuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uQ2hlY2tib3guZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlUmVxdWVzdExhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdExhYmVsLmh0bWxGb3IgPSBgcm10ci1yZXZpZXctcmVtb3ZlLXJlcXVlc3QtJHtzZWN0aW9uSW5kZXh9LSR7cmVxdWVzdEluZGV4fWA7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RMYWJlbC50ZXh0Q29udGVudCA9ICdSZW1vdmUgcmVxdWVzdCc7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEVsZW1lbnQuYXBwZW5kKHJlbW92ZVJlcXVlc3RDaGVja2JveCk7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RFbGVtZW50LmFwcGVuZChyZW1vdmVSZXF1ZXN0TGFiZWwpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZVJlcXVlc3RFeHRyYUlucHV0cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzLmFwcGVuZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnIGFzICcpKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVSZXF1ZXN0RHJvcGRvd24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWxlY3QnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlY3Rpb24gPT09ICdDb250ZXN0ZWQgdGVjaG5pY2FsIHJlcXVlc3RzJykgcmVtb3ZlUmVxdWVzdERyb3Bkb3duLnZhbHVlID0gJ0NvbnRlc3RlZCc7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3REcm9wZG93bi5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoYWxsUmVxdWVzdHNbc2VjdGlvbl1bcmVxdWVzdEluZGV4XS5yZXN1bHQgYXMgUmVxdWVzdFJlc3VsdFJlbW92ZSkucmVhc29uID0gcmVtb3ZlUmVxdWVzdERyb3Bkb3duLnZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVSZXF1ZXN0RHJvcGRvd25PcHRpb25zID0gW1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbXBsZXRlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQ29udGVzdGVkJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdBbHJlYWR5IGRvbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ0ludmFsaWQgcGFnZSBuYW1lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdJbmNvcnJlY3QgdmVudWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1dpdGhkcmF3bicsXG4gICAgICAgICAgICAgICAgICAgICAgICAnU3RhbGUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ05vdCBkb25lJyxcbiAgICAgICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiByZW1vdmVSZXF1ZXN0RHJvcGRvd25PcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25FbGVtZW50LnZhbHVlID0gb3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uRWxlbWVudC50ZXh0Q29udGVudCA9IG9wdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdERyb3Bkb3duLmFwcGVuZChvcHRpb25FbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RFeHRyYUlucHV0cy5hcHBlbmQocmVtb3ZlUmVxdWVzdERyb3Bkb3duKTtcblxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RWxlbWVudC5hcHBlbmQocmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzd2l0Y2hTZWN0aW9uQ2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uQ2hlY2tib3gudHlwZSA9ICdjaGVja2JveCc7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25DaGVja2JveC5jbGFzc0xpc3QuYWRkKCdybXRyLXJldmlldy1yZXF1ZXN0LWNoZWNrYm94Jyk7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25DaGVja2JveC5pZCA9IGBybXRyLXJldmlldy1tb3ZlLXJlcXVlc3QtJHtzZWN0aW9uSW5kZXh9LSR7cmVxdWVzdEluZGV4fWA7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25DaGVja2JveC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3dpdGNoU2VjdGlvbkNoZWNrYm94LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWxsUmVxdWVzdHNbc2VjdGlvbl1bcmVxdWVzdEluZGV4XS5yZXN1bHQgYXMgUmVxdWVzdFJlc3VsdE1vdmUpID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb3ZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWN0aW9uOiBzd2l0Y2hTZWN0aW9uRHJvcGRvd24udmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RDaGVja2JveC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhbGxSZXF1ZXN0c1tzZWN0aW9uXVtyZXF1ZXN0SW5kZXhdLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0Q2hlY2tib3guZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3dpdGNoU2VjdGlvbkxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkxhYmVsLmh0bWxGb3IgPSBgcm10ci1yZXZpZXctbW92ZS1yZXF1ZXN0LSR7c2VjdGlvbkluZGV4fS0ke3JlcXVlc3RJbmRleH1gO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uTGFiZWwudGV4dENvbnRlbnQgPSAnU3dpdGNoIHNlY3Rpb24nO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RFbGVtZW50LmFwcGVuZChzd2l0Y2hTZWN0aW9uQ2hlY2tib3gpO1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RWxlbWVudC5hcHBlbmQoc3dpdGNoU2VjdGlvbkxhYmVsKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cy5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyB0byAnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3dpdGNoU2VjdGlvbkRyb3Bkb3duID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25Ecm9wZG93bi5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoYWxsUmVxdWVzdHNbc2VjdGlvbl1bcmVxdWVzdEluZGV4XS5yZXN1bHQgYXMgUmVxdWVzdFJlc3VsdE1vdmUpLnNlY3Rpb24gPSBzd2l0Y2hTZWN0aW9uRHJvcGRvd24udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHNlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uID09PSBzZWN0aW9uKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uRWxlbWVudC5zZWxlY3RlZCA9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uID09PSAoc2VjdGlvbiA9PT0gZGVmYXVsdE1vdmVTZWN0aW9uID8gZmFsbGJhY2tEZWZhdWx0TW92ZVNlY3Rpb24gOiBkZWZhdWx0TW92ZVNlY3Rpb24pO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uRWxlbWVudC52YWx1ZSA9IG9wdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQudGV4dENvbnRlbnQgPSBvcHRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25Ecm9wZG93bi5hcHBlbmQob3B0aW9uRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMuYXBwZW5kKHN3aXRjaFNlY3Rpb25Ecm9wZG93bik7XG5cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzLmFwcGVuZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnIHdpdGggcmVhc29uaW5nICcpKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzd2l0Y2hTZWN0aW9uUmVhc29uaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvblJlYXNvbmluZy50eXBlID0gJ3RleHQnO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uUmVhc29uaW5nLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgKGFsbFJlcXVlc3RzW3NlY3Rpb25dW3JlcXVlc3RJbmRleF0ucmVzdWx0IGFzIFJlcXVlc3RSZXN1bHRSZW1vdmUpLnJlYXNvbiA9IHN3aXRjaFNlY3Rpb25SZWFzb25pbmcudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cy5hcHBlbmQoc3dpdGNoU2VjdGlvblJlYXNvbmluZyk7XG5cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzLmFwcGVuZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnIChvcHRpb25hbCwgYXV0b21hdGljYWxseSBwaW5ncyByZXF1ZXN0b3IgYW5kIHNpZ25zKScpKTtcblxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RWxlbWVudC5hcHBlbmQoc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzKTtcblxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0c0xpc3QuYXBwZW5kKHJlcXVlc3RFbGVtZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzZWN0aW9uQ29udGVudC5hcHBlbmQocmVxdWVzdHNMaXN0KTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb3V0cHV0RWxlbWVudC5hcHBlbmQoc2VjdGlvbkNvbnRlbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgc3VibWl0QnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XG4gICAgICAgIHN1Ym1pdEJ1dHRvbi5pZCA9ICdybXRyLXJldmlldy1zdWJtaXQnO1xuICAgICAgICBzdWJtaXRCdXR0b24udGV4dENvbnRlbnQgPSAnU3VibWl0JztcbiAgICAgICAgc3VibWl0QnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbmV3UGFnZVJldmlzaW9uID0gYXdhaXQgZ2V0UGFnZVJldmlzaW9uKCk7XG5cbiAgICAgICAgICAgIGlmIChuZXdQYWdlUmV2aXNpb24ucmV2aWQgIT09IHJldklkKVxuICAgICAgICAgICAgICAgIHJldHVybiBtdy5ub3RpZnkoJ3JtdHItaGVscGVyOiBBbiBlZGl0IGNvbmZsaWN0IG9jY3VycmVkLCBwbGVhc2Ugc3RhcnQgb3ZlciEnLCB7IHR5cGU6ICdlcnJvcicgfSk7XG5cbiAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICBsb2FkaW5nU3Bpbm5lci5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG5cbiAgICAgICAgICAgIGxldCBlbmRSZXN1bHQgPSBwYWdlQ29udGVudDtcblxuICAgICAgICAgICAgaW50ZXJmYWNlIEFsbENoYW5nZXMge1xuICAgICAgICAgICAgICAgIHJlbW92ZTogUmVjb3JkPHN0cmluZywgUmVxdWVzdFtdPjtcbiAgICAgICAgICAgICAgICBtb3ZlOiBSZWNvcmQ8c3RyaW5nLCBSZXF1ZXN0W10+O1xuICAgICAgICAgICAgICAgIHRvdGFsOiBudW1iZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZXM6IEFsbENoYW5nZXMgPSB7IHJlbW92ZToge30sIG1vdmU6IHt9LCB0b3RhbDogMCB9O1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgT2JqZWN0LnZhbHVlcyhhbGxSZXF1ZXN0cykpXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHNlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0LnJlc3VsdCkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCdyZW1vdmUnIGluIHJlcXVlc3QucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRSZXN1bHQgPSBlbmRSZXN1bHQucmVwbGFjZShyZXF1ZXN0LmZ1bGwgKyAnXFxuJywgJycpLnJlcGxhY2UocmVxdWVzdC5mdWxsLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZXF1ZXN0LnJlc3VsdC5yZWFzb24gaW4gY2hhbmdlcy5yZW1vdmUpKSBjaGFuZ2VzLnJlbW92ZVtyZXF1ZXN0LnJlc3VsdC5yZWFzb25dID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLnJlbW92ZVtyZXF1ZXN0LnJlc3VsdC5yZWFzb25dLnB1c2gocmVxdWVzdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLnRvdGFsKys7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ21vdmUnIGluIHJlcXVlc3QucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZWN0aW9uVGl0bGVBZnRlciA9IHNlY3Rpb25zW3NlY3Rpb25zLmluZGV4T2YocmVxdWVzdC5yZXN1bHQuc2VjdGlvbikgKyAxXTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kUmVzdWx0ID0gZW5kUmVzdWx0LnJlcGxhY2UocmVxdWVzdC5mdWxsICsgJ1xcbicsICcnKS5yZXBsYWNlKHJlcXVlc3QuZnVsbCwgJycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kUmVzdWx0ID0gZW5kUmVzdWx0LnJlcGxhY2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFJlZ0V4cChgKFxcbj9cXG4/KD86PXszLH0gPyR7c2VjdGlvblRpdGxlQWZ0ZXJ9ID89ezMsfXwkKSlgKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgXFxuJHtyZXF1ZXN0LmZ1bGx9JHtyZXF1ZXN0LnJlc3VsdC5yZWFzb24gPyBgXFxuOjogJHtyZXF1ZXN0LnJlcXVlc3RlciAmJiByZXF1ZXN0LnJlcXVlc3Rlci5sZW5ndGggPiAwID8gKG13LnV0aWwuaXNJUEFkZHJlc3MocmVxdWVzdC5yZXF1ZXN0ZXIpID8gJycgOiBgQFtbVXNlcjoke3JlcXVlc3QucmVxdWVzdGVyfXwke3JlcXVlc3QucmVxdWVzdGVyfV1dIGApIDogJyd9ICR7cmVxdWVzdC5yZXN1bHQucmVhc29ufSB+fn5+YCA6ICcnfSQxYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShyZXF1ZXN0LnJlc3VsdC5zZWN0aW9uIGluIGNoYW5nZXMubW92ZSkpIGNoYW5nZXMubW92ZVtyZXF1ZXN0LnJlc3VsdC5zZWN0aW9uXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLm1vdmVbcmVxdWVzdC5yZXN1bHQuc2VjdGlvbl0ucHVzaChyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMudG90YWwrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNoYW5nZXMudG90YWwgPT09IDApIHtcbiAgICAgICAgICAgICAgICBzdWJtaXRCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsb2FkaW5nU3Bpbm5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgICAgIHJldHVybiBtdy5ub3RpZnkoJ05vIGNoYW5nZXMgdG8gbWFrZSEnLCB7IHR5cGU6ICdlcnJvcicgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5vUmVtYWluaW5nID0gT2JqZWN0LnZhbHVlcyhhbGxSZXF1ZXN0cykuZXZlcnkoKHNlY3Rpb24pID0+XG4gICAgICAgICAgICAgICAgc2VjdGlvbi5ldmVyeSgocmVxdWVzdCkgPT4gcmVxdWVzdC5yZXN1bHQgJiYgJ3JlbW92ZScgaW4gcmVxdWVzdC5yZXN1bHQpLFxuICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3QgZWRpdFN1bW1hcnkgPSBgSGFuZGxlZCAke2NoYW5nZXMudG90YWx9IHJlcXVlc3Qke2NoYW5nZXMudG90YWwgPiAxID8gJ3MnIDogJyd9OiAke1xuICAgICAgICAgICAgICAgIE9iamVjdC5lbnRyaWVzKGNoYW5nZXMucmVtb3ZlKS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgID8gYFJlbW92ZWQgJHtPYmplY3QuZW50cmllcyhjaGFuZ2VzLnJlbW92ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoW3JlYXNvbiwgcGFnZXNdKSA9PiBgJHtwYWdlcy5tYXAoKHBhZ2UpID0+IGBbWyR7cGFnZS5vcmlnaW5hbH1dXWApLmpvaW4oJywgJyl9IGFzICR7cmVhc29uLnRvTG93ZXJDYXNlKCl9YClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJywgJyl9YFxuICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICB9JHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhjaGFuZ2VzLm1vdmUpLmxlbmd0aCA+IDBcbiAgICAgICAgICAgICAgICAgICAgPyBgJHtPYmplY3QuZW50cmllcyhjaGFuZ2VzLnJlbW92ZSkubGVuZ3RoID4gMCA/ICcsICcgOiAnJ31Nb3ZlZCAke09iamVjdC5lbnRyaWVzKGNoYW5nZXMubW92ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgoW2Rlc3RpbmF0aW9uLCBwYWdlc10pID0+IGAke3BhZ2VzLm1hcCgocGFnZSkgPT4gYFtbJHtwYWdlLm9yaWdpbmFsfV1dYCkuam9pbignLCAnKX0gdG8gXCIke2Rlc3RpbmF0aW9ufVwiYClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLmpvaW4oJywgJyl9YFxuICAgICAgICAgICAgICAgICAgICA6ICcnXG4gICAgICAgICAgICB9JHtub1JlbWFpbmluZyA/ICcgKG5vIHJlcXVlc3RzIHJlbWFpbiknIDogJyd9ICh2aWEgW1tVc2VyOkVlaml0NDMvc2NyaXB0cy9ybXRyLWhlbHBlcnxzY3JpcHRdXSlgO1xuXG4gICAgICAgICAgICBhd2FpdCBuZXcgbXcuQXBpKCkuZWRpdChtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksICgpID0+ICh7IHRleHQ6IGVuZFJlc3VsdCwgc3VtbWFyeTogZWRpdFN1bW1hcnkgfSkpO1xuXG4gICAgICAgICAgICBtdy5ub3RpZnkoYFN1Y2Nlc3NmdWxseSBoYW5kbGVkICR7Y2hhbmdlcy50b3RhbH0gcmVxdWVzdHMsIHJlbG9hZGluZy4uLmAsIHsgdHlwZTogJ3N1Y2Nlc3MnIH0pO1xuXG4gICAgICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGxvYWRpbmdTcGlubmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1xuICAgICAgICBsb2FkaW5nU3Bpbm5lci5pZCA9ICdybXRyLXJldmlldy1sb2FkaW5nJztcbiAgICAgICAgbG9hZGluZ1NwaW5uZXIuc3R5bGUuZGlzcGxheSA9ICdub25lJztcblxuICAgICAgICBzdWJtaXRCdXR0b24uYXBwZW5kKGxvYWRpbmdTcGlubmVyKTtcblxuICAgICAgICBvdXRwdXRFbGVtZW50LmFwcGVuZChzdWJtaXRCdXR0b24pO1xuXG4gICAgICAgIG13LnV0aWwuJGNvbnRlbnRbMF0ucHJlcGVuZChvdXRwdXRFbGVtZW50KTtcblxuICAgICAgICBvdXRwdXRFbGVtZW50LnNjcm9sbEludG9WaWV3KCk7XG4gICAgfSk7XG59KTtcblxuLyoqXG4gKiBHZXRzIGluZm9ybWF0aW9uIGFib3V0IGEgd2lraSBwYWdlJ3MgbGF0ZXN0IHJldmlzaW9uLlxuICovXG5hc3luYyBmdW5jdGlvbiBnZXRQYWdlUmV2aXNpb24oKSB7XG4gICAgcmV0dXJuIChcbiAgICAgICAgKGF3YWl0IG5ldyBtdy5BcGkoKS5nZXQoe1xuICAgICAgICAgICAgYWN0aW9uOiAncXVlcnknLFxuICAgICAgICAgICAgZm9ybWF0dmVyc2lvbjogJzInLFxuICAgICAgICAgICAgcHJvcDogJ3JldmlzaW9ucycsXG4gICAgICAgICAgICBydnByb3A6IFsnY29udGVudCcsICdpZHMnXSxcbiAgICAgICAgICAgIHJ2c2xvdHM6ICdtYWluJyxcbiAgICAgICAgICAgIHRpdGxlczogbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpLFxuICAgICAgICB9IHNhdGlzZmllcyBBcGlRdWVyeVJldmlzaW9uc1BhcmFtcykpIGFzIFBhZ2VSZXZpc2lvbnNSZXN1bHRcbiAgICApLnF1ZXJ5IS5wYWdlc1swXS5yZXZpc2lvbnNbMF07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7bUJBQUEsSUFBQUEsRUFBQTtFQ0lBLEdBQUcsT0FBTyxNQUFNLENBQUMsZ0JBQWdCLEVBQUcsSUFBTSxDQUN0QyxHQUFJLEdBQUcsT0FBTyxJQUFJLFlBQVksSUFBTSwrQ0FBZ0QsT0FFcEYsR0FBRyxLQUFLLE9BQU9DLENBQVUsRUFFekIsSUFBTUMsRUFBYSxHQUFHLE9BQU8sSUFBSSxnQkFBZ0IsRUFFN0NDLEVBQVksR0FFSCxHQUFHLEtBQUssZUFDakIsR0FBRyxPQUFPLElBQUksTUFBTSxJQUFNLFVBQVksT0FBUyxhQUMvQyxJQUNBLHVCQUNBLHNCQUNKLEVBRUssaUJBQWlCLFFBQVMsTUFBT0MsR0FBVSxDQUc1QyxHQUZBQSxFQUFNLGVBQWUsRUFFakJELEVBQVcsT0FBTyxTQUFTLGNBQWMscUJBQXFCLEdBQUcsZUFBZSxFQUMvRUEsRUFBWSxHQUVqQixJQUFNRSxFQUFlLE1BQU1DLEVBQWdCLEVBRXJDQyxFQUFRRixFQUFhLE1BQ3JCRyxFQUFjSCxFQUFhLE1BQU0sS0FBSyxRQUV0Q0ksRUFBVyxDQUNiLHFDQUNBLHVDQUNBLCtCQUNBLHNCQUNKLEVBRU1DLEVBQXFCRCxFQUFTLENBQUMsRUFDL0JFLEVBQTZCRixFQUFTLENBQUMsRUF3QnZDRyxFQUF5QyxDQUFDLEVBTWhELFNBQVNDLEVBQXdCQyxFQUFrQixDQUMvQyxJQUFNQyxFQUEwQixDQUFDLEVBRTNCQyxFQUFzQixDQUFDLElBQUssR0FBRyxFQUMvQkMsRUFBb0IsQ0FBQyxJQUFLLEdBQUcsRUFFL0JDLEVBQXVCLEdBQ3ZCQyxFQUFjLEdBRWxCLFFBQVNDLEVBQVEsRUFBR0EsRUFBUU4sRUFBUyxPQUFRTSxJQUFTLENBQ2xELElBQU1DLEVBQVlQLEVBQVNNLENBQUssRUFDMUJFLEVBQW9DUixFQUFTTSxFQUFRLENBQUMsRUFFNUQsR0FBS0MsSUFBYyxLQUFPLENBQUNILEdBQXlCRSxJQUFVTixFQUFTLE9BQVMsRUFBRyxDQUMzRU8sSUFBYyxNQUFLRixHQUFlRSxHQUV0Q04sRUFBYyxLQUFLSSxDQUFXLEVBQzlCQSxFQUFjLEdBRWQsUUFDSixDQUVBQSxHQUFlRSxFQUVYTCxFQUFvQixLQUFNTyxHQUFXQSxJQUFXRixHQUFhRSxJQUFXRCxDQUFhLEVBQUdKLEVBQXVCLEdBQzFHRCxFQUFrQixLQUFNTSxHQUFXQSxJQUFXRixHQUFhRSxJQUFXRCxDQUFhLElBQUdKLEVBQXVCLEdBQzFILENBRUEsSUFBTU0sRUFBaUQsQ0FBQyxFQUV4RCxPQUFXLENBQUNKLEVBQU9LLENBQVMsSUFBS1YsRUFBYyxRQUFRLEVBQUcsQ0FDdEQsSUFBTVcsRUFBaUJELEVBQVUsTUFBTSxHQUFHLEVBQUUsSUFBS0UsR0FBVUEsRUFBTSxLQUFLLENBQUMsRUFFbkVELEVBQWUsU0FBVyxHQUFHQSxFQUFlLFNBQVNOLEVBQVEsR0FBRyxTQUFTLENBQUMsRUFFOUVJLEVBQVdFLEVBQWUsTUFBTSxDQUFFLEVBQUlBLEVBQWUsS0FBSyxHQUFHLENBQ2pFLENBRUEsT0FBT0YsQ0FDWCxDQUVBLFFBQVdJLEtBQVduQixFQUFVLENBTTVCLElBQU1vQixFQUxpQnJCLEVBQ2xCLE1BQU0sSUFBSSxPQUFPLFVBQVVvQixDQUFPLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFDL0MsTUFBTSxRQUFRLEVBQUUsQ0FBQyxFQUNqQixLQUFLLEVBRTZCLE1BQU0scUVBQXFFLEVBRWxILEdBQUlDLEVBQ0FqQixFQUFZZ0IsQ0FBTyxFQUFJQyxFQUFnQixJQUFLQyxHQUFZLENBQ3BEQSxFQUFVQSxFQUFRLEtBQUssRUFFdkIsSUFBTU4sRUFBYVgsRUFDZmlCLEVBQVEsV0FBVyw2REFBOEQsRUFBRSxDQUN2RixFQUVBLE9BQUFOLEVBQVcsS0FBT00sRUFFbEJOLEVBQVcsU0FBV0EsRUFBVyxDQUFDLEdBQUcsUUFBUSxPQUFRLEVBQUUsRUFBRSxRQUFRLE1BQU8sRUFBRSxHQUFLLFVBQy9FQSxFQUFXLFlBQWNBLEVBQVcsQ0FBQyxHQUFHLFFBQVEsT0FBUSxFQUFFLEVBQUUsUUFBUSxNQUFPLEVBQUUsR0FBSyxVQUU3RUEsRUFBVyxZQUFXQSxFQUFXLFVBQVlBLEVBQVcsS0FBSyxNQUFNLHVCQUF1QixJQUFJLENBQUMsRUFBRSxLQUFLLEdBRTNHLE9BQU9BLEVBQVcsQ0FBQyxFQUNuQixPQUFPQSxFQUFXLENBQUMsRUFFWkEsQ0FDWCxDQUFDLE1BQ0EsQ0FDRFosRUFBWWdCLENBQU8sRUFBSSxDQUFDLEVBQ3hCLFFBQ0osQ0FDSixDQUVBLE1BQU0sUUFBUSxJQUNWLE9BQU8sUUFBUWhCLENBQVcsRUFBRSxJQUFJLE1BQU8sQ0FBQyxDQUFFbUIsQ0FBUSxJQUFNLENBQ3BELE1BQU0sUUFBUSxJQUNWQSxFQUFTLElBQUksTUFBT0QsR0FBWSxDQUM1QixJQUFNRSxFQUFhLEdBQUcsTUFBTSxZQUFZRixFQUFRLFFBQVEsRUFDbERHLEVBQWEsR0FBRyxNQUFNLFlBQVlILEVBQVEsV0FBVyxFQUUzRCxHQUFJLENBQUNFLEVBQVksT0FBTyxHQUFHLE9BQU8sa0JBQWtCRixFQUFRLFFBQVEsS0FBTSxDQUFFLEtBQU0sT0FBUSxDQUFDLEVBQzNGLEdBQUksQ0FBQ0csRUFBWSxPQUFPLEdBQUcsT0FBTyxrQkFBa0JILEVBQVEsV0FBVyxLQUFNLENBQUUsS0FBTSxPQUFRLENBQUMsRUFFOUYsSUFBTUksRUFBYSxDQUFDLGNBQWMsS0FBS0osRUFBUSxXQUFXLEdBQUtHLEVBRXpERSxFQUFzQixTQUFTLGNBQWMsTUFBTSxFQUN6REEsRUFBb0IsVUFBVSxJQUFJLDZCQUE2QixFQUMvREEsRUFBb0IsWUFBYyxrQkFBa0JMLEVBQVEsV0FBVyxLQUV2RSxJQUFNTSxFQUFpQixDQUFDLENBQUNsQyxFQUFXLEtBQU1BLEVBQVcsUUFBUSxFQUFFLEtBQzFEbUMsR0FBY0wsRUFBVyxlQUFlLElBQU1LLEdBQWFKLEVBQVcsZUFBZSxJQUFNSSxDQUNoRyxFQUVNQyxFQUEwQixTQUFTLGNBQWMsTUFBTSxFQUM3REEsRUFBd0IsVUFBVSxJQUFJLDZCQUE2QixFQUNuRUEsRUFBd0IsWUFBYywwREFBMERMLEVBQVcsZUFBZSxJQUFNL0IsRUFBVyxLQUFPLE9BQVMsVUFBVSxLQUVySyxJQUFNcUMsRUFBaUIsTUFBTSxJQUFJLEdBQUcsSUFBSSxFQUFFLE1BQ3RDLE1BQU1ULEVBQVEsUUFBUSxhQUFRSSxFQUFhLE1BQU1KLEVBQVEsV0FBVyxLQUFPSyxFQUFvQixTQUFTLGlCQUNwR0wsRUFBUSxVQUNGLEdBQUcsS0FBSyxZQUFZQSxFQUFRLFNBQVMsRUFDakMsMkJBQTJCQSxFQUFRLFNBQVMsSUFBSUEsRUFBUSxTQUFTLEtBQ2pFLFVBQVVBLEVBQVEsU0FBUyxJQUFJQSxFQUFRLFNBQVMsS0FDbkQsOENBQThDLEtBQUtBLEVBQVEsR0FBRyxJQUFJLENBQUMsR0FBSyxXQUNuRixvQkFBb0JBLEVBQVEsTUFBTSxHQUN0QyxFQUNNVSxFQUFhLElBQUksVUFBVSxFQUFFLGdCQUFnQkQsRUFBZ0IsV0FBVyxFQUV4RUUsRUFBaUIsU0FBUyxjQUFjLElBQUksRUFDbERBLEVBQWUsVUFBWUQsRUFBVyxjQUFjLHNCQUFzQixFQUFHLGtCQUFtQixVQUUzRkosR0FBZ0JLLEVBQWUsT0FBT0gsQ0FBdUIsRUFFbEVSLEVBQVEsUUFBVVcsQ0FDdEIsQ0FBQyxDQUNMLENBQ0osQ0FBQyxDQUNMLEVBRUEsSUFBTUMsRUFBZ0IsU0FBUyxjQUFjLEtBQUssRUFDbERBLEVBQWMsR0FBSyxxQkFFbkIsSUFBTUMsRUFBUyxTQUFTLGNBQWMsS0FBSyxFQUMzQ0EsRUFBTyxHQUFLLHFCQUNaQSxFQUFPLFlBQWMsaUNBRXJCRCxFQUFjLE9BQU9DLENBQU0sRUFFM0IsT0FBVyxDQUFDQyxFQUFjLENBQUNoQixFQUFTRyxDQUFRLENBQUMsSUFBSyxPQUFPLFFBQVFuQixDQUFXLEVBQUUsUUFBUSxFQUFHLENBQ3JGLElBQU1pQyxFQUFnQixTQUFTLGNBQWMsS0FBSyxFQUNsREEsRUFBYyxVQUFVLElBQUksb0JBQW9CLEVBQ2hEQSxFQUFjLFlBQWNqQixFQUU1QmMsRUFBYyxPQUFPRyxDQUFhLEVBRWxDLElBQU1DLEVBQWlCLFNBQVMsY0FBYyxLQUFLLEVBR25ELEdBRkFBLEVBQWUsVUFBVSxJQUFJLDZCQUE2QixFQUV0RGYsRUFBUyxTQUFXLEVBQUcsQ0FDdkIsSUFBTWdCLEVBQWEsU0FBUyxjQUFjLEtBQUssRUFDL0NBLEVBQVcsWUFBYyw4QkFFekJELEVBQWUsT0FBT0MsQ0FBVSxDQUNwQyxLQUFPLENBQ0gsSUFBTUMsRUFBZSxTQUFTLGNBQWMsSUFBSSxFQUVoRCxPQUFXLENBQUNDLEVBQWNuQixDQUFPLElBQUtDLEVBQVMsUUFBUSxFQUFHLENBQ3RELElBQU1VLEVBQWlCWCxFQUFRLFFBRXpCb0IsRUFBd0IsU0FBUyxjQUFjLE9BQU8sRUFDNURBLEVBQXNCLEtBQU8sV0FDN0JBLEVBQXNCLFVBQVUsSUFBSSw4QkFBOEIsRUFDbEVBLEVBQXNCLEdBQUssOEJBQThCTixDQUFZLElBQUlLLENBQVksR0FDckZDLEVBQXNCLGlCQUFpQixTQUFVLElBQU0sQ0FDL0NBLEVBQXNCLFNBQ3RCdEMsRUFBWWdCLENBQU8sRUFBRXFCLENBQVksRUFBRSxPQUFTLENBQUUsT0FBUSxHQUFNLE9BQVFFLEVBQXNCLEtBQU0sRUFDaEdDLEVBQXlCLE1BQU0sUUFBVSxTQUN6Q0MsRUFBc0IsU0FBVyxLQUVqQyxPQUFPekMsRUFBWWdCLENBQU8sRUFBRXFCLENBQVksRUFBRSxPQUMxQ0csRUFBeUIsTUFBTSxRQUFVLE9BQ3pDQyxFQUFzQixTQUFXLEdBRXpDLENBQUMsRUFFRCxJQUFNQyxFQUFxQixTQUFTLGNBQWMsT0FBTyxFQUN6REEsRUFBbUIsUUFBVSw4QkFBOEJWLENBQVksSUFBSUssQ0FBWSxHQUN2RkssRUFBbUIsWUFBYyxpQkFFakNiLEVBQWUsT0FBT1MsQ0FBcUIsRUFDM0NULEVBQWUsT0FBT2EsQ0FBa0IsRUFFeEMsSUFBTUYsRUFBMkIsU0FBUyxjQUFjLE1BQU0sRUFDOURBLEVBQXlCLE1BQU0sUUFBVSxPQUV6Q0EsRUFBeUIsT0FBTyxTQUFTLGVBQWUsTUFBTSxDQUFDLEVBRS9ELElBQU1ELEVBQXdCLFNBQVMsY0FBYyxRQUFRLEVBQ3pEdkIsSUFBWSxpQ0FBZ0N1QixFQUFzQixNQUFRLGFBQzlFQSxFQUFzQixpQkFBaUIsU0FBVSxJQUFNLENBQ2xEdkMsRUFBWWdCLENBQU8sRUFBRXFCLENBQVksRUFBRSxPQUErQixPQUFTRSxFQUFzQixLQUN0RyxDQUFDLEVBRUQsSUFBTUksRUFBK0IsQ0FDakMsWUFDQSxZQUNBLGVBQ0Esb0JBQ0Esa0JBQ0EsWUFDQSxRQUNBLFVBQ0osRUFFQSxRQUFXQyxLQUFVRCxFQUE4QixDQUMvQyxJQUFNRSxFQUFnQixTQUFTLGNBQWMsUUFBUSxFQUNyREEsRUFBYyxNQUFRRCxFQUN0QkMsRUFBYyxZQUFjRCxFQUU1QkwsRUFBc0IsT0FBT00sQ0FBYSxDQUM5QyxDQUVBTCxFQUF5QixPQUFPRCxDQUFxQixFQUVyRFYsRUFBZSxPQUFPVyxDQUF3QixFQUU5QyxJQUFNQyxFQUF3QixTQUFTLGNBQWMsT0FBTyxFQUM1REEsRUFBc0IsS0FBTyxXQUM3QkEsRUFBc0IsVUFBVSxJQUFJLDhCQUE4QixFQUNsRUEsRUFBc0IsR0FBSyw0QkFBNEJULENBQVksSUFBSUssQ0FBWSxHQUNuRkksRUFBc0IsaUJBQWlCLFNBQVUsSUFBTSxDQUMvQ0EsRUFBc0IsU0FDckJ6QyxFQUFZZ0IsQ0FBTyxFQUFFcUIsQ0FBWSxFQUFFLE9BQStCLENBQy9ELEtBQU0sR0FDTixRQUFTUyxFQUFzQixLQUNuQyxFQUNBQyxFQUF5QixNQUFNLFFBQVUsU0FDekNULEVBQXNCLFNBQVcsS0FFakMsT0FBT3RDLEVBQVlnQixDQUFPLEVBQUVxQixDQUFZLEVBQUUsT0FDMUNVLEVBQXlCLE1BQU0sUUFBVSxPQUN6Q1QsRUFBc0IsU0FBVyxHQUV6QyxDQUFDLEVBRUQsSUFBTVUsRUFBcUIsU0FBUyxjQUFjLE9BQU8sRUFDekRBLEVBQW1CLFFBQVUsNEJBQTRCaEIsQ0FBWSxJQUFJSyxDQUFZLEdBQ3JGVyxFQUFtQixZQUFjLGlCQUVqQ25CLEVBQWUsT0FBT1ksQ0FBcUIsRUFDM0NaLEVBQWUsT0FBT21CLENBQWtCLEVBRXhDLElBQU1ELEVBQTJCLFNBQVMsY0FBYyxNQUFNLEVBQzlEQSxFQUF5QixNQUFNLFFBQVUsT0FFekNBLEVBQXlCLE9BQU8sU0FBUyxlQUFlLE1BQU0sQ0FBQyxFQUUvRCxJQUFNRCxFQUF3QixTQUFTLGNBQWMsUUFBUSxFQUM3REEsRUFBc0IsaUJBQWlCLFNBQVUsSUFBTSxDQUNsRDlDLEVBQVlnQixDQUFPLEVBQUVxQixDQUFZLEVBQUUsT0FBNkIsUUFBVVMsRUFBc0IsS0FDckcsQ0FBQyxFQUVELFFBQVdGLEtBQVUvQyxFQUFVLENBQzNCLEdBQUkrQyxJQUFXNUIsRUFBUyxTQUV4QixJQUFNNkIsRUFBZ0IsU0FBUyxjQUFjLFFBQVEsRUFDckRBLEVBQWMsU0FDVkQsS0FBWTVCLElBQVlsQixFQUFxQkMsRUFBNkJELEdBQzlFK0MsRUFBYyxNQUFRRCxFQUN0QkMsRUFBYyxZQUFjRCxFQUU1QkUsRUFBc0IsT0FBT0QsQ0FBYSxDQUM5QyxDQUVBRSxFQUF5QixPQUFPRCxDQUFxQixFQUVyREMsRUFBeUIsT0FBTyxTQUFTLGVBQWUsa0JBQWtCLENBQUMsRUFFM0UsSUFBTUUsRUFBeUIsU0FBUyxjQUFjLE9BQU8sRUFDN0RBLEVBQXVCLEtBQU8sT0FDOUJBLEVBQXVCLGlCQUFpQixRQUFTLElBQU0sQ0FDbERqRCxFQUFZZ0IsQ0FBTyxFQUFFcUIsQ0FBWSxFQUFFLE9BQStCLE9BQVNZLEVBQXVCLEtBQ3ZHLENBQUMsRUFFREYsRUFBeUIsT0FBT0UsQ0FBc0IsRUFFdERGLEVBQXlCLE9BQU8sU0FBUyxlQUFlLHNEQUFzRCxDQUFDLEVBRS9HbEIsRUFBZSxPQUFPa0IsQ0FBd0IsRUFFOUNYLEVBQWEsT0FBT1AsQ0FBYyxDQUN0QyxDQUVBSyxFQUFlLE9BQU9FLENBQVksQ0FDdEMsQ0FFQU4sRUFBYyxPQUFPSSxDQUFjLENBQ3ZDLENBRUEsSUFBTWdCLEVBQWUsU0FBUyxjQUFjLFFBQVEsRUFDcERBLEVBQWEsR0FBSyxxQkFDbEJBLEVBQWEsWUFBYyxTQUMzQkEsRUFBYSxpQkFBaUIsUUFBUyxTQUFZLENBRy9DLElBRndCLE1BQU14RCxFQUFnQixHQUUxQixRQUFVQyxFQUMxQixPQUFPLEdBQUcsT0FBTyw2REFBOEQsQ0FBRSxLQUFNLE9BQVEsQ0FBQyxFQUVwR3VELEVBQWEsU0FBVyxHQUN4QkMsRUFBZSxNQUFNLFFBQVUsZUFFL0IsSUFBSUMsRUFBWXhELEVBUVZ5RCxFQUFzQixDQUFFLE9BQVEsQ0FBQyxFQUFHLEtBQU0sQ0FBQyxFQUFHLE1BQU8sQ0FBRSxFQUU3RCxRQUFXckMsS0FBVyxPQUFPLE9BQU9oQixDQUFXLEVBQzNDLFFBQVdrQixLQUFXRixFQUNsQixHQUFLRSxFQUFRLFFBRWIsR0FBSSxXQUFZQSxFQUFRLE9BQ3BCa0MsRUFBWUEsRUFBVSxRQUFRbEMsRUFBUSxLQUFPO0FBQUEsRUFBTSxFQUFFLEVBQUUsUUFBUUEsRUFBUSxLQUFNLEVBQUUsRUFDekVBLEVBQVEsT0FBTyxVQUFVbUMsRUFBUSxTQUFTQSxFQUFRLE9BQU9uQyxFQUFRLE9BQU8sTUFBTSxFQUFJLENBQUMsR0FDekZtQyxFQUFRLE9BQU9uQyxFQUFRLE9BQU8sTUFBTSxFQUFFLEtBQUtBLENBQU8sRUFDbERtQyxFQUFRLGdCQUNELFNBQVVuQyxFQUFRLE9BQVEsQ0FDakMsSUFBTW9DLEVBQW9CekQsRUFBU0EsRUFBUyxRQUFRcUIsRUFBUSxPQUFPLE9BQU8sRUFBSSxDQUFDLEVBRS9Fa0MsRUFBWUEsRUFBVSxRQUFRbEMsRUFBUSxLQUFPO0FBQUEsRUFBTSxFQUFFLEVBQUUsUUFBUUEsRUFBUSxLQUFNLEVBQUUsRUFDL0VrQyxFQUFZQSxFQUFVLFFBQ2xCLElBQUksT0FBTztBQUFBO0FBQUEsYUFBb0JFLENBQWlCLGFBQWEsRUFDN0Q7QUFBQSxFQUFLcEMsRUFBUSxJQUFJLEdBQUdBLEVBQVEsT0FBTyxPQUFTO0FBQUEsS0FBUUEsRUFBUSxXQUFhQSxFQUFRLFVBQVUsT0FBUyxFQUFLLEdBQUcsS0FBSyxZQUFZQSxFQUFRLFNBQVMsRUFBSSxHQUFLLFdBQVdBLEVBQVEsU0FBUyxJQUFJQSxFQUFRLFNBQVMsTUFBUyxFQUFFLElBQUlBLEVBQVEsT0FBTyxNQUFNLFFBQVUsRUFBRSxJQUM1UCxFQUNNQSxFQUFRLE9BQU8sV0FBV21DLEVBQVEsT0FBT0EsRUFBUSxLQUFLbkMsRUFBUSxPQUFPLE9BQU8sRUFBSSxDQUFDLEdBRXZGbUMsRUFBUSxLQUFLbkMsRUFBUSxPQUFPLE9BQU8sRUFBRSxLQUFLQSxDQUFPLEVBQ2pEbUMsRUFBUSxPQUNaLEVBR1IsR0FBSUEsRUFBUSxRQUFVLEVBQ2xCLE9BQUFILEVBQWEsU0FBVyxHQUN4QkMsRUFBZSxNQUFNLFFBQVUsT0FDeEIsR0FBRyxPQUFPLHNCQUF1QixDQUFFLEtBQU0sT0FBUSxDQUFDLEVBRzdELElBQU1JLEVBQWMsT0FBTyxPQUFPdkQsQ0FBVyxFQUFFLE1BQU9nQixHQUNsREEsRUFBUSxNQUFPRSxHQUFZQSxFQUFRLFFBQVUsV0FBWUEsRUFBUSxNQUFNLENBQzNFLEVBRU1zQyxFQUFjLFdBQVdILEVBQVEsS0FBSyxXQUFXQSxFQUFRLE1BQVEsRUFBSSxJQUFNLEVBQUUsS0FDL0UsT0FBTyxRQUFRQSxFQUFRLE1BQU0sRUFBRSxPQUFTLEVBQ2xDLFdBQVcsT0FBTyxRQUFRQSxFQUFRLE1BQU0sRUFDbkMsSUFBSSxDQUFDLENBQUNJLEVBQVFDLENBQUssSUFBTSxHQUFHQSxFQUFNLElBQUtDLEdBQVMsS0FBS0EsRUFBSyxRQUFRLElBQUksRUFBRSxLQUFLLElBQUksQ0FBQyxPQUFPRixFQUFPLFlBQVksQ0FBQyxFQUFFLEVBQy9HLEtBQUssSUFBSSxDQUFDLEdBQ2YsRUFDVixHQUNJLE9BQU8sUUFBUUosRUFBUSxJQUFJLEVBQUUsT0FBUyxFQUNoQyxHQUFHLE9BQU8sUUFBUUEsRUFBUSxNQUFNLEVBQUUsT0FBUyxFQUFJLEtBQU8sRUFBRSxTQUFTLE9BQU8sUUFBUUEsRUFBUSxJQUFJLEVBQ3ZGLElBQUksQ0FBQyxDQUFDTyxFQUFhRixDQUFLLElBQU0sR0FBR0EsRUFBTSxJQUFLQyxHQUFTLEtBQUtBLEVBQUssUUFBUSxJQUFJLEVBQUUsS0FBSyxJQUFJLENBQUMsUUFBUUMsQ0FBVyxHQUFHLEVBQzdHLEtBQUssSUFBSSxDQUFDLEdBQ2YsRUFDVixHQUFHTCxFQUFjLHdCQUEwQixFQUFFLHFEQUU3QyxNQUFNLElBQUksR0FBRyxJQUFJLEVBQUUsS0FBSyxHQUFHLE9BQU8sSUFBSSxZQUFZLEVBQUcsS0FBTyxDQUFFLEtBQU1ILEVBQVcsUUFBU0ksQ0FBWSxFQUFFLEVBRXRHLEdBQUcsT0FBTyx3QkFBd0JILEVBQVEsS0FBSywwQkFBMkIsQ0FBRSxLQUFNLFNBQVUsQ0FBQyxFQUU3RixPQUFPLFNBQVMsT0FBTyxDQUMzQixDQUFDLEVBRUQsSUFBTUYsRUFBaUIsU0FBUyxjQUFjLE1BQU0sRUFDcERBLEVBQWUsR0FBSyxzQkFDcEJBLEVBQWUsTUFBTSxRQUFVLE9BRS9CRCxFQUFhLE9BQU9DLENBQWMsRUFFbENyQixFQUFjLE9BQU9vQixDQUFZLEVBRWpDLEdBQUcsS0FBSyxTQUFTLENBQUMsRUFBRSxRQUFRcEIsQ0FBYSxFQUV6Q0EsRUFBYyxlQUFlLENBQ2pDLENBQUMsQ0FDTCxDQUFDLEVBS0QsZUFBZXBDLEdBQWtCLENBQzdCLE9BQ0ssTUFBTSxJQUFJLEdBQUcsSUFBSSxFQUFFLElBQUksQ0FDcEIsT0FBUSxRQUNSLGNBQWUsSUFDZixLQUFNLFlBQ04sT0FBUSxDQUFDLFVBQVcsS0FBSyxFQUN6QixRQUFTLE9BQ1QsT0FBUSxHQUFHLE9BQU8sSUFBSSxZQUFZLENBQ3RDLENBQW1DLEdBQ3JDLE1BQU8sTUFBTSxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQ2pDIiwKICAibmFtZXMiOiBbInJtdHJfaGVscGVyX2RlZmF1bHQiLCAicm10cl9oZWxwZXJfZGVmYXVsdCIsICJuYW1lc3BhY2VzIiwgImRpc3BsYXllZCIsICJldmVudCIsICJwYWdlUmV2aXNpb24iLCAiZ2V0UGFnZVJldmlzaW9uIiwgInJldklkIiwgInBhZ2VDb250ZW50IiwgInNlY3Rpb25zIiwgImRlZmF1bHRNb3ZlU2VjdGlvbiIsICJmYWxsYmFja0RlZmF1bHRNb3ZlU2VjdGlvbiIsICJhbGxSZXF1ZXN0cyIsICJwYXJzZVRlbXBsYXRlUGFyYW1ldGVycyIsICJ0ZW1wbGF0ZSIsICJyYXdQYXJhbWV0ZXJzIiwgImlnbm9yZWRTdGFydFN5bWJvbHMiLCAiaWdub3JlZEVuZFN5bWJvbHMiLCAiaW5zaWRlTGlua09yVGVtcGxhdGUiLCAiY3VycmVudFRleHQiLCAiaW5kZXgiLCAiY2hhcmFjdGVyIiwgIm5leHRDaGFyYWN0ZXIiLCAic3ltYm9sIiwgInBhcmFtZXRlcnMiLCAicGFyYW1ldGVyIiwgInNwbGl0UGFyYW1ldGVyIiwgInZhbHVlIiwgInNlY3Rpb24iLCAibWF0Y2hlZFJlcXVlc3RzIiwgInJlcXVlc3QiLCAicmVxdWVzdHMiLCAibXdPbGRUaXRsZSIsICJtd05ld1RpdGxlIiwgInZhbGlkVGl0bGUiLCAiaW52YWxpZFRpdGxlV2FybmluZyIsICJ2YWxpZE5hbWVzcGFjZSIsICJuYW1lc3BhY2UiLCAiaW52YWxpZE5hbWVzcGFjZVdhcm5pbmciLCAicGFyc2VkV2lraXRleHQiLCAicGFyc2VkSHRtbCIsICJyZXF1ZXN0RWxlbWVudCIsICJvdXRwdXRFbGVtZW50IiwgImhlYWRlciIsICJzZWN0aW9uSW5kZXgiLCAic2VjdGlvbkhlYWRlciIsICJzZWN0aW9uQ29udGVudCIsICJub1JlcXVlc3RzIiwgInJlcXVlc3RzTGlzdCIsICJyZXF1ZXN0SW5kZXgiLCAicmVtb3ZlUmVxdWVzdENoZWNrYm94IiwgInJlbW92ZVJlcXVlc3REcm9wZG93biIsICJyZW1vdmVSZXF1ZXN0RXh0cmFJbnB1dHMiLCAic3dpdGNoU2VjdGlvbkNoZWNrYm94IiwgInJlbW92ZVJlcXVlc3RMYWJlbCIsICJyZW1vdmVSZXF1ZXN0RHJvcGRvd25PcHRpb25zIiwgIm9wdGlvbiIsICJvcHRpb25FbGVtZW50IiwgInN3aXRjaFNlY3Rpb25Ecm9wZG93biIsICJzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMiLCAic3dpdGNoU2VjdGlvbkxhYmVsIiwgInN3aXRjaFNlY3Rpb25SZWFzb25pbmciLCAic3VibWl0QnV0dG9uIiwgImxvYWRpbmdTcGlubmVyIiwgImVuZFJlc3VsdCIsICJjaGFuZ2VzIiwgInNlY3Rpb25UaXRsZUFmdGVyIiwgIm5vUmVtYWluaW5nIiwgImVkaXRTdW1tYXJ5IiwgInJlYXNvbiIsICJwYWdlcyIsICJwYWdlIiwgImRlc3RpbmF0aW9uIl0KfQo=