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 from TypeScript. For a more readable version, see https://github.com/Eejit43/wikipedia-scripts/blob/main/scripts/rmtr-helper.ts
"use strict";mw.loader.using(["mediawiki.util"],()=>{if(mw.config.get("wgPageName")!=="Wikipedia:Requested_moves/Technical_requests")return;importStylesheet("User:Eejit43/scripts/rmtr-helper.css");const x=mw.config.get("wgNamespaceIds");let L=!1;mw.util.addPortletLink(mw.config.get("skin")==="minerva"?"p-tb":"p-cactions","#","Review move requests","review-rmtr-requests").addEventListener("click",async a=>{if(a.preventDefault(),L)return document.querySelector("#rmtr-review-result")?.scrollIntoView();L=!0;const w=await getPageRevision(),$=w.revid,f=w.slots.main.content,u=["Uncontroversial technical requests","Requests to revert undiscussed moves","Contested technical requests","Administrator needed"],o={};for(const l of u){const n=f.split(new RegExp(`={3,} ?${l} ?={3,}`))[1].split(/={3,}/m)[0].trim().match(/(?:\* ?\n)?\* {{rmassist\/core.+?(?=\* {{rmassist\/core|$)/gis);if(n)o[l]=n.map(i=>{i=i.trim();const d=i,s=i.replaceAll(/(?:\* ?\n)?\* {{rmassist\/core \||}}.*/gis,"").split(" | ").map(r=>r.trim()),e=Object.fromEntries(s.map(r=>r.split(" = ").map(c=>c.trim())));return e.full=d,e.original=e[1],e.destination=e[2],delete e[1],delete e[2],e});else{o[l]=[];continue}}await Promise.all(Object.entries(o).map(async([,l])=>{await Promise.all(l.map(async t=>{const n=mw.Title.newFromText(t.original),i=mw.Title.newFromText(t.destination);if(!n)return mw.notify(`Invalid title "${t.original}"!`,{type:"error"});if(!i)return mw.notify(`Invalid title "${t.destination}"!`,{type:"error"});const d=!/[#<>[\]{|}]/.test(t.destination)&&i,s=document.createElement("span");s.classList.add("rmtr-review-invalid-warning"),s.textContent=`Invalid title "${t.destination}"!`;const e=![x.file,x.category].some(p=>n.getNamespaceId()===p||i.getNamespaceId()===p),r=document.createElement("span");r.classList.add("rmtr-review-invalid-warning"),r.textContent=`Warning: original or destination page is in namespace "${i.getNamespaceId()===x.file?"file":"category"}"!`;const c=await new mw.Api().parse(`[[:${t.original}]] \u2192 ${d?`[[:${t.destination}]]`:s.outerHTML} requested by ${t.requester?mw.util.isIPAddress(t.requester)?`[[Special:Contributions/${t.requester}|${t.requester}]]`:`[[User:${t.requester}|${t.requester}]]`:t.sig?.match(/(\[{2}Special:Contributions\/(.*?)\|\2]{2})/)?.[1]??"(unknown)"} with reasoning "${t.reason}"`),m=new DOMParser().parseFromString(c,"text/html"),R=document.createElement("li");R.innerHTML=m.querySelector("div.mw-parser-output").firstElementChild.innerHTML,e||R.append(r),t.element=R}))}));const h=document.createElement("div");h.id="rmtr-review-result";const k=document.createElement("div");k.id="rmtr-review-header",k.textContent="Technical move requests review",h.append(k);for(const[l,[t,n]]of Object.entries(o).entries()){const i=document.createElement("div");i.classList.add("rmtr-review-header"),i.textContent=t,h.append(i);const d=document.createElement("div");if(d.classList.add("rmtr-review-section-content"),n.length===0){const s=document.createElement("div");s.textContent="No requests in this section",d.append(s)}else{const s=document.createElement("ul");for(const[e,r]of n.entries()){const c=r.element,m=document.createElement("input");m.type="checkbox",m.classList.add("rmtr-review-request-checkbox"),m.id=`rmtr-review-remove-request-${l}-${e}`,m.addEventListener("change",()=>{m.checked?(o[t][e].result={remove:!0,reason:b.value},p.style.display="inline",g.disabled=!0):(delete o[t][e].result,p.style.display="none",g.disabled=!1)});const R=document.createElement("label");R.htmlFor=`rmtr-review-remove-request-${l}-${e}`,R.textContent="Remove request",c.append(m),c.append(R);const p=document.createElement("span");p.style.display="none",p.append(document.createTextNode(" as "));const b=document.createElement("select");t==="Contested technical requests"&&(b.value="Contested"),b.addEventListener("change",()=>{o[t][e].result.reason=b.value});const j=["Completed","Contested","Already done","Invalid page name","Incorrect venue","Withdrawn","Not done"];for(const q of j){const E=document.createElement("option");E.value=q,E.textContent=q,b.append(E)}p.append(b),c.append(p);const g=document.createElement("input");g.type="checkbox",g.classList.add("rmtr-review-request-checkbox"),g.id=`rmtr-review-move-request-${l}-${e}`,g.addEventListener("change",()=>{g.checked?(o[t][e].result={move:!0,section:I.value},v.style.display="inline",m.disabled=!0):(delete o[t][e].result,v.style.display="none",m.disabled=!1)});const P=document.createElement("label");P.htmlFor=`rmtr-review-move-request-${l}-${e}`,P.textContent="Switch section",c.append(g),c.append(P);const v=document.createElement("span");v.style.display="none",v.append(document.createTextNode(" to "));const I=document.createElement("select");I.addEventListener("change",()=>{o[t][e].result.section=I.value});for(const q of u){if(q===t)continue;const E=document.createElement("option");E.value=q,E.textContent=q,I.append(E)}v.append(I),v.append(document.createTextNode(" with reasoning "));const S=document.createElement("input");S.type="text",S.addEventListener("input",()=>{o[t][e].result.reason=S.value}),v.append(S),v.append(document.createTextNode(" (optional, automatically signed)")),c.append(v),s.append(c)}d.append(s)}h.append(d)}const y=document.createElement("button");y.id="rmtr-review-submit",y.textContent="Submit",y.addEventListener("click",async()=>{if((await getPageRevision()).revid!==$)return mw.notify("rmtr-helper: An edit conflict occurred, please start over!",{type:"error"});y.disabled=!0,C.style.display="inline-block";let t=f;const n={remove:{},move:{},total:0};for(const s of Object.values(o))for(const e of s)if(e.result){if("remove"in e.result)t=t.replace(e.full+`
`,"").replace(e.full,""),n.remove[e.result.reason]||(n.remove[e.result.reason]=[]),n.remove[e.result.reason].push(e),n.total++;else if("move"in e.result){const r=u[u.indexOf(e.result.section)+1];t=t.replace(e.full+`
`,"").replace(e.full,""),t=t.replace(new RegExp(`(
?
?(?:={3,} ?${r} ?={3,}|$))`),`
${e.full}${e.result.reason?`
:: ${e.result.reason} ~~~~`:""}$1`),n.move[e.result.section]||(n.move[e.result.section]=[]),n.move[e.result.section].push(e),n.total++}}if(n.total===0)return y.disabled=!1,C.style.display="none",mw.notify("No changes to make!",{type:"error"});const i=Object.values(o).every(s=>s.every(e=>e.result&&"remove"in e.result)),d=`Handled ${n.total} request${n.total>1?"s":""}: ${Object.entries(n.remove).length>0?`Removed ${Object.entries(n.remove).map(([s,e])=>`${e.map(r=>`[[${r.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(r=>`[[${r.original}]]`).join(", ")} to "${s}"`).join(", ")}`:""}${i?" (no requests remain)":""} (via [[User:Eejit43/scripts/rmtr-helper|script]])`;await new mw.Api().edit(mw.config.get("wgPageName"),()=>({text:t,summary:d})),mw.notify(`Successfully handled ${n.total} requests, reloading...`,{type:"success"}),window.location.reload()});const C=document.createElement("span");C.id="rmtr-review-loading",C.style.display="none",y.append(C),h.append(y),mw.util.$content[0].prepend(h),h.scrollIntoView()})});async function getPageRevision(){return(await new mw.Api().get({action:"query",formatversion:2,prop:"revisions",rvprop:"content|ids",rvslots:"*",titles:mw.config.get("wgPageName")})).query.pages[0].revisions[0]}function showEditPreview(T,x,L){const N=mw.config.get("wgServer")+mw.config.get("wgScriptPath")+"/",a=document.createElement("form");a.action=`${N}index.php?title=${encodeURIComponent(T)}&action=submit`,a.method="POST";const w=document.createElement("input");w.type="hidden",w.name="wpTextbox1",w.value=x,a.append(w);const $=document.createElement("input");$.type="hidden",$.name="wpSummary",$.value=L,a.append($);const f=document.createElement("input");f.type="hidden",f.name="mode",f.value="preview",a.append(f);const u=document.createElement("input");u.type="hidden",u.name="wpDiff",u.value="Show changes",a.append(u);const o=document.createElement("input");o.type="hidden",o.name="wpUltimateParam",o.value="1",a.append(o),document.body.append(a),a.submit()}
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc2NyaXB0cy9ybXRyLWhlbHBlci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgUGFnZVJldmlzaW9uc1Jlc3VsdCB9IGZyb20gJy4uL2dsb2JhbC10eXBlcyc7XG5cbm13LmxvYWRlci51c2luZyhbJ21lZGlhd2lraS51dGlsJ10sICgpID0+IHtcbiAgICBjb25zdCBkZXZlbG9wbWVudE1vZGUgPSBmYWxzZTtcblxuICAgIGlmIChtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJykgIT09IChkZXZlbG9wbWVudE1vZGUgPyAnVXNlcjpFZWppdDQzL3NhbmRib3gnIDogJ1dpa2lwZWRpYTpSZXF1ZXN0ZWRfbW92ZXMvVGVjaG5pY2FsX3JlcXVlc3RzJykpIHJldHVybjtcblxuICAgIGltcG9ydFN0eWxlc2hlZXQoJ1VzZXI6RWVqaXQ0My9zY3JpcHRzL3JtdHItaGVscGVyLmNzcycpO1xuXG4gICAgY29uc3QgbmFtZXNwYWNlcyA9IG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlSWRzJyk7XG5cbiAgICBsZXQgZGlzcGxheWVkID0gZmFsc2U7XG5cbiAgICBjb25zdCBsaW5rID0gbXcudXRpbC5hZGRQb3J0bGV0TGluayhtdy5jb25maWcuZ2V0KCdza2luJykgPT09ICdtaW5lcnZhJyA/ICdwLXRiJyA6ICdwLWNhY3Rpb25zJywgJyMnLCBgUmV2aWV3IG1vdmUgcmVxdWVzdHMke2RldmVsb3BtZW50TW9kZSA/ICcgKERFViknIDogJyd9YCwgJ3Jldmlldy1ybXRyLXJlcXVlc3RzJykhO1xuXG4gICAgbGluay5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGlmIChkaXNwbGF5ZWQpIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjcm10ci1yZXZpZXctcmVzdWx0Jyk/LnNjcm9sbEludG9WaWV3KCk7XG4gICAgICAgIGVsc2UgZGlzcGxheWVkID0gdHJ1ZTtcblxuICAgICAgICBjb25zdCBwYWdlUmV2aXNpb24gPSBhd2FpdCBnZXRQYWdlUmV2aXNpb24oKTtcblxuICAgICAgICBjb25zdCByZXZJZCA9IHBhZ2VSZXZpc2lvbi5yZXZpZDtcbiAgICAgICAgY29uc3QgcGFnZUNvbnRlbnQgPSBwYWdlUmV2aXNpb24uc2xvdHMubWFpbi5jb250ZW50O1xuXG4gICAgICAgIGNvbnN0IHNlY3Rpb25zID0gWydVbmNvbnRyb3ZlcnNpYWwgdGVjaG5pY2FsIHJlcXVlc3RzJywgJ1JlcXVlc3RzIHRvIHJldmVydCB1bmRpc2N1c3NlZCBtb3ZlcycsICdDb250ZXN0ZWQgdGVjaG5pY2FsIHJlcXVlc3RzJywgJ0FkbWluaXN0cmF0b3IgbmVlZGVkJ107XG5cbiAgICAgICAgaW50ZXJmYWNlIFJlcXVlc3Qge1xuICAgICAgICAgICAgc2lnOiBzdHJpbmc7XG4gICAgICAgICAgICByZXF1ZXN0ZXI/OiBzdHJpbmc7XG4gICAgICAgICAgICByZWFzb246IHN0cmluZztcbiAgICAgICAgICAgIGZ1bGw6IHN0cmluZztcbiAgICAgICAgICAgIG9yaWdpbmFsOiBzdHJpbmc7XG4gICAgICAgICAgICBkZXN0aW5hdGlvbjogc3RyaW5nO1xuICAgICAgICAgICAgZWxlbWVudDogSFRNTExJRWxlbWVudDtcbiAgICAgICAgICAgIHJlc3VsdD86IFJlcXVlc3RSZXN1bHRNb3ZlIHwgUmVxdWVzdFJlc3VsdFJlbW92ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGludGVyZmFjZSBSZXF1ZXN0UmVzdWx0TW92ZSB7XG4gICAgICAgICAgICBtb3ZlOiBib29sZWFuO1xuICAgICAgICAgICAgc2VjdGlvbjogc3RyaW5nO1xuICAgICAgICAgICAgcmVhc29uPzogc3RyaW5nO1xuICAgICAgICB9XG5cbiAgICAgICAgaW50ZXJmYWNlIFJlcXVlc3RSZXN1bHRSZW1vdmUge1xuICAgICAgICAgICAgcmVtb3ZlOiBib29sZWFuO1xuICAgICAgICAgICAgcmVhc29uOiBzdHJpbmc7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhbGxSZXF1ZXN0czogUmVjb3JkPHN0cmluZywgUmVxdWVzdFtdPiA9IHt9O1xuXG4gICAgICAgIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBzZWN0aW9ucykge1xuICAgICAgICAgICAgY29uc3Qgc2VjdGlvbkNvbnRlbnQgPSBwYWdlQ29udGVudFxuICAgICAgICAgICAgICAgIC5zcGxpdChuZXcgUmVnRXhwKGA9ezMsfSA/JHtzZWN0aW9ufSA/PXszLH1gKSlbMV1cbiAgICAgICAgICAgICAgICAuc3BsaXQoLz17Myx9L20pWzBdXG4gICAgICAgICAgICAgICAgLnRyaW0oKTtcblxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZFJlcXVlc3RzID0gc2VjdGlvbkNvbnRlbnQubWF0Y2goLyg/OlxcKiA/XFxuKT9cXCoge3tybWFzc2lzdFxcL2NvcmUuKz8oPz1cXCoge3tybWFzc2lzdFxcL2NvcmV8JCkvZ2lzKTtcblxuICAgICAgICAgICAgaWYgKG1hdGNoZWRSZXF1ZXN0cylcbiAgICAgICAgICAgICAgICBhbGxSZXF1ZXN0c1tzZWN0aW9uXSA9IG1hdGNoZWRSZXF1ZXN0cy5tYXAoKHJlcXVlc3QpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCA9IHJlcXVlc3QudHJpbSgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmdWxsID0gcmVxdWVzdDtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGFyYW1ldGVycyA9IHJlcXVlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIC5yZXBsYWNlQWxsKC8oPzpcXCogP1xcbik/XFwqIHt7cm1hc3Npc3RcXC9jb3JlIFxcfHx9fS4qL2dpcywgJycpXG4gICAgICAgICAgICAgICAgICAgICAgICAuc3BsaXQoJyB8ICcpXG4gICAgICAgICAgICAgICAgICAgICAgICAubWFwKChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci50cmltKCkpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpbmFsUGFyYW1ldGVycyA9IE9iamVjdC5mcm9tRW50cmllcyhwYXJhbWV0ZXJzLm1hcCgocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIuc3BsaXQoJyA9ICcpLm1hcCgodmFsdWUpID0+IHZhbHVlLnRyaW0oKSkpKSBhcyBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gICAgICAgICAgICAgICAgICAgIGZpbmFsUGFyYW1ldGVycy5mdWxsID0gZnVsbDtcblxuICAgICAgICAgICAgICAgICAgICBmaW5hbFBhcmFtZXRlcnMub3JpZ2luYWwgPSBmaW5hbFBhcmFtZXRlcnNbMV07XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsUGFyYW1ldGVycy5kZXN0aW5hdGlvbiA9IGZpbmFsUGFyYW1ldGVyc1syXTtcblxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZmluYWxQYXJhbWV0ZXJzWzFdO1xuICAgICAgICAgICAgICAgICAgICBkZWxldGUgZmluYWxQYXJhbWV0ZXJzWzJdO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmaW5hbFBhcmFtZXRlcnMgYXMgdW5rbm93biBhcyBSZXF1ZXN0O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgYWxsUmVxdWVzdHNbc2VjdGlvbl0gPSBbXTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoYWxsUmVxdWVzdHMpLm1hcChhc3luYyAoWywgcmVxdWVzdHNdKSA9PiB7XG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzLm1hcChhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXdPbGRUaXRsZSA9IG13LlRpdGxlLm5ld0Zyb21UZXh0KHJlcXVlc3Qub3JpZ2luYWwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXdOZXdUaXRsZSA9IG13LlRpdGxlLm5ld0Zyb21UZXh0KHJlcXVlc3QuZGVzdGluYXRpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW13T2xkVGl0bGUpIHJldHVybiBtdy5ub3RpZnkoYEludmFsaWQgdGl0bGUgXCIke3JlcXVlc3Qub3JpZ2luYWx9XCIhYCwgeyB0eXBlOiAnZXJyb3InIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtd05ld1RpdGxlKSByZXR1cm4gbXcubm90aWZ5KGBJbnZhbGlkIHRpdGxlIFwiJHtyZXF1ZXN0LmRlc3RpbmF0aW9ufVwiIWAsIHsgdHlwZTogJ2Vycm9yJyB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsaWRUaXRsZSA9ICEvWyM8PltcXF17fH1dLy50ZXN0KHJlcXVlc3QuZGVzdGluYXRpb24pICYmIG13TmV3VGl0bGU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludmFsaWRUaXRsZVdhcm5pbmcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpbnZhbGlkVGl0bGVXYXJuaW5nLmNsYXNzTGlzdC5hZGQoJ3JtdHItcmV2aWV3LWludmFsaWQtd2FybmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZFRpdGxlV2FybmluZy50ZXh0Q29udGVudCA9IGBJbnZhbGlkIHRpdGxlIFwiJHtyZXF1ZXN0LmRlc3RpbmF0aW9ufVwiIWA7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbGlkTmFtZXNwYWNlID0gIVtuYW1lc3BhY2VzLmZpbGUsIG5hbWVzcGFjZXMuY2F0ZWdvcnldLnNvbWUoKG5hbWVzcGFjZSkgPT4gbXdPbGRUaXRsZS5nZXROYW1lc3BhY2VJZCgpID09PSBuYW1lc3BhY2UgfHwgbXdOZXdUaXRsZS5nZXROYW1lc3BhY2VJZCgpID09PSBuYW1lc3BhY2UpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnZhbGlkTmFtZXNwYWNlV2FybmluZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWROYW1lc3BhY2VXYXJuaW5nLmNsYXNzTGlzdC5hZGQoJ3JtdHItcmV2aWV3LWludmFsaWQtd2FybmluZycpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaW52YWxpZE5hbWVzcGFjZVdhcm5pbmcudGV4dENvbnRlbnQgPSBgV2FybmluZzogb3JpZ2luYWwgb3IgZGVzdGluYXRpb24gcGFnZSBpcyBpbiBuYW1lc3BhY2UgXCIke213TmV3VGl0bGUuZ2V0TmFtZXNwYWNlSWQoKSA9PT0gbmFtZXNwYWNlcy5maWxlID8gJ2ZpbGUnIDogJ2NhdGVnb3J5J31cIiFgO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRXaWtpdGV4dCA9IGF3YWl0IG5ldyBtdy5BcGkoKS5wYXJzZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgW1s6JHtyZXF1ZXN0Lm9yaWdpbmFsfV1dIFx1MjE5MiAke3ZhbGlkVGl0bGUgPyBgW1s6JHtyZXF1ZXN0LmRlc3RpbmF0aW9ufV1dYCA6IGludmFsaWRUaXRsZVdhcm5pbmcub3V0ZXJIVE1MfSByZXF1ZXN0ZWQgYnkgJHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5yZXF1ZXN0ZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gbXcudXRpbC5pc0lQQWRkcmVzcyhyZXF1ZXN0LnJlcXVlc3RlcilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGBbW1NwZWNpYWw6Q29udHJpYnV0aW9ucy8ke3JlcXVlc3QucmVxdWVzdGVyfXwke3JlcXVlc3QucmVxdWVzdGVyfV1dYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogYFtbVXNlcjoke3JlcXVlc3QucmVxdWVzdGVyfXwke3JlcXVlc3QucmVxdWVzdGVyfV1dYFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZXF1ZXN0LnNpZz8ubWF0Y2goLyhcXFt7Mn1TcGVjaWFsOkNvbnRyaWJ1dGlvbnNcXC8oLio/KVxcfFxcMl17Mn0pLyk/LlsxXSA/PyAnKHVua25vd24pJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gd2l0aCByZWFzb25pbmcgXCIke3JlcXVlc3QucmVhc29ufVwiYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJzZWRIdG1sID0gbmV3IERPTVBhcnNlcigpLnBhcnNlRnJvbVN0cmluZyhwYXJzZWRXaWtpdGV4dCwgJ3RleHQvaHRtbCcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RWxlbWVudC5pbm5lckhUTUwgPSBwYXJzZWRIdG1sLnF1ZXJ5U2VsZWN0b3IoJ2Rpdi5tdy1wYXJzZXItb3V0cHV0JykhLmZpcnN0RWxlbWVudENoaWxkIS5pbm5lckhUTUwhO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXZhbGlkTmFtZXNwYWNlKSByZXF1ZXN0RWxlbWVudC5hcHBlbmQoaW52YWxpZE5hbWVzcGFjZVdhcm5pbmcpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmVsZW1lbnQgPSByZXF1ZXN0RWxlbWVudDtcbiAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICApO1xuXG4gICAgICAgIGNvbnN0IG91dHB1dEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgb3V0cHV0RWxlbWVudC5pZCA9ICdybXRyLXJldmlldy1yZXN1bHQnO1xuXG4gICAgICAgIGNvbnN0IGhlYWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBoZWFkZXIuaWQgPSAncm10ci1yZXZpZXctaGVhZGVyJztcbiAgICAgICAgaGVhZGVyLnRleHRDb250ZW50ID0gJ1RlY2huaWNhbCBtb3ZlIHJlcXVlc3RzIHJldmlldyc7XG5cbiAgICAgICAgb3V0cHV0RWxlbWVudC5hcHBlbmQoaGVhZGVyKTtcblxuICAgICAgICBmb3IgKGNvbnN0IFtzZWN0aW9uSW5kZXgsIFtzZWN0aW9uLCByZXF1ZXN0c11dIG9mIE9iamVjdC5lbnRyaWVzKGFsbFJlcXVlc3RzKS5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25IZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgIHNlY3Rpb25IZWFkZXIuY2xhc3NMaXN0LmFkZCgncm10ci1yZXZpZXctaGVhZGVyJyk7XG4gICAgICAgICAgICBzZWN0aW9uSGVhZGVyLnRleHRDb250ZW50ID0gc2VjdGlvbjtcblxuICAgICAgICAgICAgb3V0cHV0RWxlbWVudC5hcHBlbmQoc2VjdGlvbkhlYWRlcik7XG5cbiAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25Db250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICAgICAgICBzZWN0aW9uQ29udGVudC5jbGFzc0xpc3QuYWRkKCdybXRyLXJldmlldy1zZWN0aW9uLWNvbnRlbnQnKTtcblxuICAgICAgICAgICAgaWYgKHJlcXVlc3RzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vUmVxdWVzdHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICAgICAgICAgICAgICBub1JlcXVlc3RzLnRleHRDb250ZW50ID0gJ05vIHJlcXVlc3RzIGluIHRoaXMgc2VjdGlvbic7XG5cbiAgICAgICAgICAgICAgICBzZWN0aW9uQ29udGVudC5hcHBlbmQobm9SZXF1ZXN0cyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RzTGlzdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3VsJyk7XG5cbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtyZXF1ZXN0SW5kZXgsIHJlcXVlc3RdIG9mIHJlcXVlc3RzLmVudHJpZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0RWxlbWVudCA9IHJlcXVlc3QuZWxlbWVudDtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVSZXF1ZXN0Q2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0Q2hlY2tib3gudHlwZSA9ICdjaGVja2JveCc7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RDaGVja2JveC5jbGFzc0xpc3QuYWRkKCdybXRyLXJldmlldy1yZXF1ZXN0LWNoZWNrYm94Jyk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RDaGVja2JveC5pZCA9IGBybXRyLXJldmlldy1yZW1vdmUtcmVxdWVzdC0ke3NlY3Rpb25JbmRleH0tJHtyZXF1ZXN0SW5kZXh9YDtcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdENoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZW1vdmVSZXF1ZXN0Q2hlY2tib3guY2hlY2tlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbFJlcXVlc3RzW3NlY3Rpb25dW3JlcXVlc3RJbmRleF0ucmVzdWx0ID0geyByZW1vdmU6IHRydWUsIHJlYXNvbjogcmVtb3ZlUmVxdWVzdERyb3Bkb3duLnZhbHVlIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uQ2hlY2tib3guZGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgYWxsUmVxdWVzdHNbc2VjdGlvbl1bcmVxdWVzdEluZGV4XS5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkNoZWNrYm94LmRpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbW92ZVJlcXVlc3RMYWJlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RMYWJlbC5odG1sRm9yID0gYHJtdHItcmV2aWV3LXJlbW92ZS1yZXF1ZXN0LSR7c2VjdGlvbkluZGV4fS0ke3JlcXVlc3RJbmRleH1gO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0TGFiZWwudGV4dENvbnRlbnQgPSAnUmVtb3ZlIHJlcXVlc3QnO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RFbGVtZW50LmFwcGVuZChyZW1vdmVSZXF1ZXN0Q2hlY2tib3gpO1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RWxlbWVudC5hcHBlbmQocmVtb3ZlUmVxdWVzdExhYmVsKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZW1vdmVSZXF1ZXN0RXh0cmFJbnB1dHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RFeHRyYUlucHV0cy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RFeHRyYUlucHV0cy5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyBhcyAnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlUmVxdWVzdERyb3Bkb3duID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWN0aW9uID09PSAnQ29udGVzdGVkIHRlY2huaWNhbCByZXF1ZXN0cycpIHJlbW92ZVJlcXVlc3REcm9wZG93bi52YWx1ZSA9ICdDb250ZXN0ZWQnO1xuICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0RHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgKGFsbFJlcXVlc3RzW3NlY3Rpb25dW3JlcXVlc3RJbmRleF0ucmVzdWx0IGFzIFJlcXVlc3RSZXN1bHRSZW1vdmUpLnJlYXNvbiA9IHJlbW92ZVJlcXVlc3REcm9wZG93bi52YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVtb3ZlUmVxdWVzdERyb3Bkb3duT3B0aW9ucyA9IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICdDb21wbGV0ZWQnLCAvL1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0NvbnRlc3RlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAnQWxyZWFkeSBkb25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdJbnZhbGlkIHBhZ2UgbmFtZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAnSW5jb3JyZWN0IHZlbnVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICdXaXRoZHJhd24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgJ05vdCBkb25lJyxcbiAgICAgICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9wdGlvbiBvZiByZW1vdmVSZXF1ZXN0RHJvcGRvd25PcHRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25FbGVtZW50LnZhbHVlID0gb3B0aW9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uRWxlbWVudC50ZXh0Q29udGVudCA9IG9wdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUmVxdWVzdERyb3Bkb3duLmFwcGVuZChvcHRpb25FbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RFeHRyYUlucHV0cy5hcHBlbmQocmVtb3ZlUmVxdWVzdERyb3Bkb3duKTtcblxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RWxlbWVudC5hcHBlbmQocmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzd2l0Y2hTZWN0aW9uQ2hlY2tib3ggPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uQ2hlY2tib3gudHlwZSA9ICdjaGVja2JveCc7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25DaGVja2JveC5jbGFzc0xpc3QuYWRkKCdybXRyLXJldmlldy1yZXF1ZXN0LWNoZWNrYm94Jyk7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25DaGVja2JveC5pZCA9IGBybXRyLXJldmlldy1tb3ZlLXJlcXVlc3QtJHtzZWN0aW9uSW5kZXh9LSR7cmVxdWVzdEluZGV4fWA7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25DaGVja2JveC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3dpdGNoU2VjdGlvbkNoZWNrYm94LmNoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWxsUmVxdWVzdHNbc2VjdGlvbl1bcmVxdWVzdEluZGV4XS5yZXN1bHQgYXMgUmVxdWVzdFJlc3VsdE1vdmUpID0geyBtb3ZlOiB0cnVlLCBzZWN0aW9uOiBzd2l0Y2hTZWN0aW9uRHJvcGRvd24udmFsdWUgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMuc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZVJlcXVlc3RDaGVja2JveC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhbGxSZXF1ZXN0c1tzZWN0aW9uXVtyZXF1ZXN0SW5kZXhdLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSZXF1ZXN0Q2hlY2tib3guZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3dpdGNoU2VjdGlvbkxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGFiZWwnKTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkxhYmVsLmh0bWxGb3IgPSBgcm10ci1yZXZpZXctbW92ZS1yZXF1ZXN0LSR7c2VjdGlvbkluZGV4fS0ke3JlcXVlc3RJbmRleH1gO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uTGFiZWwudGV4dENvbnRlbnQgPSAnU3dpdGNoIHNlY3Rpb24nO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RFbGVtZW50LmFwcGVuZChzd2l0Y2hTZWN0aW9uQ2hlY2tib3gpO1xuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0RWxlbWVudC5hcHBlbmQoc3dpdGNoU2VjdGlvbkxhYmVsKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cy5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cy5hcHBlbmQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJyB0byAnKSk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3dpdGNoU2VjdGlvbkRyb3Bkb3duID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7XG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25Ecm9wZG93bi5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAoYWxsUmVxdWVzdHNbc2VjdGlvbl1bcmVxdWVzdEluZGV4XS5yZXN1bHQgYXMgUmVxdWVzdFJlc3VsdE1vdmUpLnNlY3Rpb24gPSBzd2l0Y2hTZWN0aW9uRHJvcGRvd24udmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHNlY3Rpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9uID09PSBzZWN0aW9uKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uRWxlbWVudC52YWx1ZSA9IG9wdGlvbjtcbiAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbkVsZW1lbnQudGV4dENvbnRlbnQgPSBvcHRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25Ecm9wZG93bi5hcHBlbmQob3B0aW9uRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMuYXBwZW5kKHN3aXRjaFNlY3Rpb25Ecm9wZG93bik7XG5cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzLmFwcGVuZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnIHdpdGggcmVhc29uaW5nICcpKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBzd2l0Y2hTZWN0aW9uUmVhc29uaW5nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvblJlYXNvbmluZy50eXBlID0gJ3RleHQnO1xuICAgICAgICAgICAgICAgICAgICBzd2l0Y2hTZWN0aW9uUmVhc29uaW5nLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgKGFsbFJlcXVlc3RzW3NlY3Rpb25dW3JlcXVlc3RJbmRleF0ucmVzdWx0IGFzIFJlcXVlc3RSZXN1bHRSZW1vdmUpLnJlYXNvbiA9IHN3aXRjaFNlY3Rpb25SZWFzb25pbmcudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaFNlY3Rpb25FeHRyYUlucHV0cy5hcHBlbmQoc3dpdGNoU2VjdGlvblJlYXNvbmluZyk7XG5cbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzLmFwcGVuZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnIChvcHRpb25hbCwgYXV0b21hdGljYWxseSBzaWduZWQpJykpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RFbGVtZW50LmFwcGVuZChzd2l0Y2hTZWN0aW9uRXh0cmFJbnB1dHMpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzTGlzdC5hcHBlbmQocmVxdWVzdEVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHNlY3Rpb25Db250ZW50LmFwcGVuZChyZXF1ZXN0c0xpc3QpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBvdXRwdXRFbGVtZW50LmFwcGVuZChzZWN0aW9uQ29udGVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzdWJtaXRCdXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcbiAgICAgICAgc3VibWl0QnV0dG9uLmlkID0gJ3JtdHItcmV2aWV3LXN1Ym1pdCc7XG4gICAgICAgIHN1Ym1pdEJ1dHRvbi50ZXh0Q29udGVudCA9ICdTdWJtaXQnO1xuICAgICAgICBzdWJtaXRCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuZXdQYWdlUmV2aXNpb24gPSBhd2FpdCBnZXRQYWdlUmV2aXNpb24oKTtcblxuICAgICAgICAgICAgaWYgKG5ld1BhZ2VSZXZpc2lvbi5yZXZpZCAhPT0gcmV2SWQpIHJldHVybiBtdy5ub3RpZnkoJ3JtdHItaGVscGVyOiBBbiBlZGl0IGNvbmZsaWN0IG9jY3VycmVkLCBwbGVhc2Ugc3RhcnQgb3ZlciEnLCB7IHR5cGU6ICdlcnJvcicgfSk7XG5cbiAgICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICBsb2FkaW5nU3Bpbm5lci5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XG5cbiAgICAgICAgICAgIGxldCBlbmRSZXN1bHQgPSBwYWdlQ29udGVudDtcblxuICAgICAgICAgICAgaW50ZXJmYWNlIEFsbENoYW5nZXMge1xuICAgICAgICAgICAgICAgIHJlbW92ZTogUmVjb3JkPHN0cmluZywgUmVxdWVzdFtdPjtcbiAgICAgICAgICAgICAgICBtb3ZlOiBSZWNvcmQ8c3RyaW5nLCBSZXF1ZXN0W10+O1xuICAgICAgICAgICAgICAgIHRvdGFsOiBudW1iZXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGNoYW5nZXM6IEFsbENoYW5nZXMgPSB7IHJlbW92ZToge30sIG1vdmU6IHt9LCB0b3RhbDogMCB9O1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgT2JqZWN0LnZhbHVlcyhhbGxSZXF1ZXN0cykpXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHNlY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyZXF1ZXN0LnJlc3VsdCkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKCdyZW1vdmUnIGluIHJlcXVlc3QucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRSZXN1bHQgPSBlbmRSZXN1bHQucmVwbGFjZShyZXF1ZXN0LmZ1bGwgKyAnXFxuJywgJycpLnJlcGxhY2UocmVxdWVzdC5mdWxsLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNoYW5nZXMucmVtb3ZlW3JlcXVlc3QucmVzdWx0LnJlYXNvbl0pIGNoYW5nZXMucmVtb3ZlW3JlcXVlc3QucmVzdWx0LnJlYXNvbl0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMucmVtb3ZlW3JlcXVlc3QucmVzdWx0LnJlYXNvbl0ucHVzaChyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMudG90YWwrKztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgnbW92ZScgaW4gcmVxdWVzdC5yZXN1bHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNlY3Rpb25UaXRsZUFmdGVyID0gc2VjdGlvbnNbc2VjdGlvbnMuaW5kZXhPZihyZXF1ZXN0LnJlc3VsdC5zZWN0aW9uKSArIDFdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRSZXN1bHQgPSBlbmRSZXN1bHQucmVwbGFjZShyZXF1ZXN0LmZ1bGwgKyAnXFxuJywgJycpLnJlcGxhY2UocmVxdWVzdC5mdWxsLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRSZXN1bHQgPSBlbmRSZXN1bHQucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgUmVnRXhwKGAoXFxuP1xcbj8oPzo9ezMsfSA/JHtzZWN0aW9uVGl0bGVBZnRlcn0gPz17Myx9fCQpKWApLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBcXG4ke3JlcXVlc3QuZnVsbH0ke3JlcXVlc3QucmVzdWx0LnJlYXNvbiA/IGBcXG46OiAke3JlcXVlc3QucmVzdWx0LnJlYXNvbn0gfn5+fmAgOiAnJ30kMWAsXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjaGFuZ2VzLm1vdmVbcmVxdWVzdC5yZXN1bHQuc2VjdGlvbl0pIGNoYW5nZXMubW92ZVtyZXF1ZXN0LnJlc3VsdC5zZWN0aW9uXSA9IFtdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VzLm1vdmVbcmVxdWVzdC5yZXN1bHQuc2VjdGlvbl0ucHVzaChyZXF1ZXN0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYW5nZXMudG90YWwrKztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNoYW5nZXMudG90YWwgPT09IDApIHtcbiAgICAgICAgICAgICAgICBzdWJtaXRCdXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBsb2FkaW5nU3Bpbm5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICAgICAgICAgIHJldHVybiBtdy5ub3RpZnkoJ05vIGNoYW5nZXMgdG8gbWFrZSEnLCB7IHR5cGU6ICdlcnJvcicgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG5vUmVtYWluaW5nID0gT2JqZWN0LnZhbHVlcyhhbGxSZXF1ZXN0cykuZXZlcnkoKHNlY3Rpb24pID0+IHNlY3Rpb24uZXZlcnkoKHJlcXVlc3QpID0+IHJlcXVlc3QucmVzdWx0ICYmICdyZW1vdmUnIGluIHJlcXVlc3QucmVzdWx0KSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGVkaXRTdW1tYXJ5ID0gYEhhbmRsZWQgJHtjaGFuZ2VzLnRvdGFsfSByZXF1ZXN0JHtjaGFuZ2VzLnRvdGFsID4gMSA/ICdzJyA6ICcnfTogJHtcbiAgICAgICAgICAgICAgICBPYmplY3QuZW50cmllcyhjaGFuZ2VzLnJlbW92ZSkubGVuZ3RoID4gMFxuICAgICAgICAgICAgICAgICAgICA/IGBSZW1vdmVkICR7T2JqZWN0LmVudHJpZXMoY2hhbmdlcy5yZW1vdmUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKFtyZWFzb24sIHBhZ2VzXSkgPT4gYCR7cGFnZXMubWFwKChwYWdlKSA9PiBgW1ske3BhZ2Uub3JpZ2luYWx9XV1gKS5qb2luKCcsICcpfSBhcyAke3JlYXNvbi50b0xvd2VyQ2FzZSgpfWApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcsICcpfWBcbiAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgfSR7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hhbmdlcy5tb3ZlKS5sZW5ndGggPiAwXG4gICAgICAgICAgICAgICAgICAgID8gYCR7T2JqZWN0LmVudHJpZXMoY2hhbmdlcy5yZW1vdmUpLmxlbmd0aCA+IDAgPyAnLCAnIDogJyd9TW92ZWQgJHtPYmplY3QuZW50cmllcyhjaGFuZ2VzLm1vdmUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5tYXAoKFtkZXN0aW5hdGlvbiwgcGFnZXNdKSA9PiBgJHtwYWdlcy5tYXAoKHBhZ2UpID0+IGBbWyR7cGFnZS5vcmlnaW5hbH1dXWApLmpvaW4oJywgJyl9IHRvIFwiJHtkZXN0aW5hdGlvbn1cImApXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCcsICcpfWBcbiAgICAgICAgICAgICAgICAgICAgOiAnJ1xuICAgICAgICAgICAgfSR7bm9SZW1haW5pbmcgPyAnIChubyByZXF1ZXN0cyByZW1haW4pJyA6ICcnfSAodmlhIFtbVXNlcjpFZWppdDQzL3NjcmlwdHMvcm10ci1oZWxwZXJ8c2NyaXB0XV0pYDtcblxuICAgICAgICAgICAgaWYgKGRldmVsb3BtZW50TW9kZSkgc2hvd0VkaXRQcmV2aWV3KG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSwgZW5kUmVzdWx0LCBlZGl0U3VtbWFyeSk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBuZXcgbXcuQXBpKCkuZWRpdChtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJyksICgpID0+ICh7IHRleHQ6IGVuZFJlc3VsdCwgc3VtbWFyeTogZWRpdFN1bW1hcnkgfSkpO1xuXG4gICAgICAgICAgICAgICAgbXcubm90aWZ5KGBTdWNjZXNzZnVsbHkgaGFuZGxlZCAke2NoYW5nZXMudG90YWx9IHJlcXVlc3RzLCByZWxvYWRpbmcuLi5gLCB7IHR5cGU6ICdzdWNjZXNzJyB9KTtcblxuICAgICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgbG9hZGluZ1NwaW5uZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7XG4gICAgICAgIGxvYWRpbmdTcGlubmVyLmlkID0gJ3JtdHItcmV2aWV3LWxvYWRpbmcnO1xuICAgICAgICBsb2FkaW5nU3Bpbm5lci5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuXG4gICAgICAgIHN1Ym1pdEJ1dHRvbi5hcHBlbmQobG9hZGluZ1NwaW5uZXIpO1xuXG4gICAgICAgIG91dHB1dEVsZW1lbnQuYXBwZW5kKHN1Ym1pdEJ1dHRvbik7XG5cbiAgICAgICAgbXcudXRpbC4kY29udGVudFswXS5wcmVwZW5kKG91dHB1dEVsZW1lbnQpO1xuXG4gICAgICAgIG91dHB1dEVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoKTtcbiAgICB9KTtcbn0pO1xuXG4vKipcbiAqIEdldHMgaW5mb3JtYXRpb24gYWJvdXQgYSB3aWtpIHBhZ2UncyBsYXRlc3QgcmV2aXNpb24uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdldFBhZ2VSZXZpc2lvbigpIHtcbiAgICByZXR1cm4gKChhd2FpdCBuZXcgbXcuQXBpKCkuZ2V0KHsgYWN0aW9uOiAncXVlcnknLCBmb3JtYXR2ZXJzaW9uOiAyLCBwcm9wOiAncmV2aXNpb25zJywgcnZwcm9wOiAnY29udGVudHxpZHMnLCBydnNsb3RzOiAnKicsIHRpdGxlczogbXcuY29uZmlnLmdldCgnd2dQYWdlTmFtZScpIH0pKSBhcyBQYWdlUmV2aXNpb25zUmVzdWx0KS5xdWVyeVxuICAgICAgICAucGFnZXNbMF0ucmV2aXNpb25zWzBdO1xufVxuXG4vKipcbiAqIFNob3dzIGEgZGlmZiBlZGl0IHByZXZpZXcgZm9yIHRoZSBnaXZlbiB3aWtpdGV4dCBvbiBhIGdpdmVuIHBhZ2UuXG4gKiBAcGFyYW0gdGl0bGUgVGhlIHRpdGxlIG9mIHRoZSBwYWdlIHRvIGVkaXQuXG4gKiBAcGFyYW0gdGV4dCBUaGUgcmVzdWx0aW5nIHdpa2l0ZXh0IG9mIHRoZSBwYWdlLlxuICogQHBhcmFtIHN1bW1hcnkgVGhlIGVkaXQgc3VtbWFyeS5cbiAqL1xuZnVuY3Rpb24gc2hvd0VkaXRQcmV2aWV3KHRpdGxlOiBzdHJpbmcsIHRleHQ6IHN0cmluZywgc3VtbWFyeTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgYmFzZVVybCA9IG13LmNvbmZpZy5nZXQoJ3dnU2VydmVyJykgKyBtdy5jb25maWcuZ2V0KCd3Z1NjcmlwdFBhdGgnKSArICcvJztcblxuICAgIGNvbnN0IGZvcm0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdmb3JtJyk7XG4gICAgZm9ybS5hY3Rpb24gPSBgJHtiYXNlVXJsfWluZGV4LnBocD90aXRsZT0ke2VuY29kZVVSSUNvbXBvbmVudCh0aXRsZSl9JmFjdGlvbj1zdWJtaXRgO1xuICAgIGZvcm0ubWV0aG9kID0gJ1BPU1QnO1xuXG4gICAgY29uc3QgdGV4dGJveElucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW5wdXQnKTtcbiAgICB0ZXh0Ym94SW5wdXQudHlwZSA9ICdoaWRkZW4nO1xuICAgIHRleHRib3hJbnB1dC5uYW1lID0gJ3dwVGV4dGJveDEnO1xuICAgIHRleHRib3hJbnB1dC52YWx1ZSA9IHRleHQ7XG4gICAgZm9ybS5hcHBlbmQodGV4dGJveElucHV0KTtcblxuICAgIGNvbnN0IHN1bW1hcnlJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgc3VtbWFyeUlucHV0LnR5cGUgPSAnaGlkZGVuJztcbiAgICBzdW1tYXJ5SW5wdXQubmFtZSA9ICd3cFN1bW1hcnknO1xuICAgIHN1bW1hcnlJbnB1dC52YWx1ZSA9IHN1bW1hcnk7XG4gICAgZm9ybS5hcHBlbmQoc3VtbWFyeUlucHV0KTtcblxuICAgIGNvbnN0IHByZXZpZXdJbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgcHJldmlld0lucHV0LnR5cGUgPSAnaGlkZGVuJztcbiAgICBwcmV2aWV3SW5wdXQubmFtZSA9ICdtb2RlJztcbiAgICBwcmV2aWV3SW5wdXQudmFsdWUgPSAncHJldmlldyc7XG4gICAgZm9ybS5hcHBlbmQocHJldmlld0lucHV0KTtcblxuICAgIGNvbnN0IHNob3dDaGFuZ2VzSW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgIHNob3dDaGFuZ2VzSW5wdXQudHlwZSA9ICdoaWRkZW4nO1xuICAgIHNob3dDaGFuZ2VzSW5wdXQubmFtZSA9ICd3cERpZmYnO1xuICAgIHNob3dDaGFuZ2VzSW5wdXQudmFsdWUgPSAnU2hvdyBjaGFuZ2VzJztcbiAgICBmb3JtLmFwcGVuZChzaG93Q2hhbmdlc0lucHV0KTtcblxuICAgIGNvbnN0IHVsdGltYXRlUGFyYW1ldGVySW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgIHVsdGltYXRlUGFyYW1ldGVySW5wdXQudHlwZSA9ICdoaWRkZW4nO1xuICAgIHVsdGltYXRlUGFyYW1ldGVySW5wdXQubmFtZSA9ICd3cFVsdGltYXRlUGFyYW0nO1xuICAgIHVsdGltYXRlUGFyYW1ldGVySW5wdXQudmFsdWUgPSAnMSc7XG4gICAgZm9ybS5hcHBlbmQodWx0aW1hdGVQYXJhbWV0ZXJJbnB1dCk7XG5cbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZChmb3JtKTtcbiAgICBmb3JtLnN1Ym1pdCgpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogImFBRUEsR0FBRyxPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRyxJQUFNLENBR3RDLEdBQUksR0FBRyxPQUFPLElBQUksWUFBWSxJQUFrRCwrQ0FBaUQsT0FFakksaUJBQWlCLHNDQUFzQyxFQUV2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YyxPQUFPLEVBQ3ZEQSxFQUFpQixLQUFPLFNBQ3hCQSxFQUFpQixLQUFPLFNBQ3hCQSxFQUFpQixNQUFRLGVBQ3pCSixFQUFLLE9BQU9JLENBQWdCLEVBRTVCLE1BQU1DLEVBQXlCLFNBQVMsY0FBYyxPQUFPLEVBQzdEQSxFQUF1QixLQUFPLFNBQzlCQSxFQUF1QixLQUFPLGtCQUM5QkEsRUFBdUIsTUFBUSxJQUMvQkwsRUFBSyxPQUFPSyxDQUFzQixFQUVsQyxTQUFTLEtBQUssT0FBT0wsQ0FBSSxFQUN6QkEsRUFBSyxPQUFPLENBQ2hCIiwKICAibmFtZXMiOiBbIm5hbWVzcGFjZXMiLCAiZGlzcGxheWVkIiwgImV2ZW50IiwgInBhZ2VSZXZpc2lvbiIsICJyZXZJZCIsICJwYWdlQ29udGVudCIsICJzZWN0aW9ucyIsICJhbGxSZXF1ZXN0cyIsICJzZWN0aW9uIiwgIm1hdGNoZWRSZXF1ZXN0cyIsICJyZXF1ZXN0IiwgImZ1bGwiLCAicGFyYW1ldGVycyIsICJwYXJhbWV0ZXIiLCAiZmluYWxQYXJhbWV0ZXJzIiwgInZhbHVlIiwgInJlcXVlc3RzIiwgIm13T2xkVGl0bGUiLCAibXdOZXdUaXRsZSIsICJ2YWxpZFRpdGxlIiwgImludmFsaWRUaXRsZVdhcm5pbmciLCAidmFsaWROYW1lc3BhY2UiLCAibmFtZXNwYWNlIiwgImludmFsaWROYW1lc3BhY2VXYXJuaW5nIiwgInBhcnNlZFdpa2l0ZXh0IiwgInBhcnNlZEh0bWwiLCAicmVxdWVzdEVsZW1lbnQiLCAib3V0cHV0RWxlbWVudCIsICJoZWFkZXIiLCAic2VjdGlvbkluZGV4IiwgInNlY3Rpb25IZWFkZXIiLCAic2VjdGlvbkNvbnRlbnQiLCAibm9SZXF1ZXN0cyIsICJyZXF1ZXN0c0xpc3QiLCAicmVxdWVzdEluZGV4IiwgInJlbW92ZVJlcXVlc3RDaGVja2JveCIsICJyZW1vdmVSZXF1ZXN0RHJvcGRvd24iLCAicmVtb3ZlUmVxdWVzdEV4dHJhSW5wdXRzIiwgInN3aXRjaFNlY3Rpb25DaGVja2JveCIsICJyZW1vdmVSZXF1ZXN0TGFiZWwiLCAicmVtb3ZlUmVxdWVzdERyb3Bkb3duT3B0aW9ucyIsICJvcHRpb24iLCAib3B0aW9uRWxlbWVudCIsICJzd2l0Y2hTZWN0aW9uRHJvcGRvd24iLCAic3dpdGNoU2VjdGlvbkV4dHJhSW5wdXRzIiwgInN3aXRjaFNlY3Rpb25MYWJlbCIsICJzd2l0Y2hTZWN0aW9uUmVhc29uaW5nIiwgInN1Ym1pdEJ1dHRvbiIsICJsb2FkaW5nU3Bpbm5lciIsICJlbmRSZXN1bHQiLCAiY2hhbmdlcyIsICJzZWN0aW9uVGl0bGVBZnRlciIsICJub1JlbWFpbmluZyIsICJlZGl0U3VtbWFyeSIsICJyZWFzb24iLCAicGFnZXMiLCAicGFnZSIsICJkZXN0aW5hdGlvbiIsICJ0aXRsZSIsICJ0ZXh0IiwgInN1bW1hcnkiLCAiYmFzZVVybCIsICJmb3JtIiwgInRleHRib3hJbnB1dCIsICJzdW1tYXJ5SW5wdXQiLCAicHJldmlld0lucHV0IiwgInNob3dDaGFuZ2VzSW5wdXQiLCAidWx0aW1hdGVQYXJhbWV0ZXJJbnB1dCJdCn0K
// </nowiki>