User:Eejit43/scripts/article-cleaner.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 code will be executed when previewing this page.
This user script seems to have a documentation page at User:Eejit43/scripts/article-cleaner and an accompanying .json page at User:Eejit43/scripts/article-cleaner.json.
// <pre>
// Note: This script was compiled and minified from TypeScript. For a more readable version, see https://github.com/Eejit43/wikipedia-scripts/blob/main/scripts/article-cleaner.ts
"use strict";(()=>{var N=new mw.Api;async function C(e){return(await N.get({action:"query",formatversion:"2",prop:"revisions",rvprop:"content",rvslots:"main",titles:e})).query.pages[0].revisions?.[0].slots.main.content.trim()}(()=>{if(mw.config.get("wgNamespaceNumber")<0||!mw.config.get("wgIsProbablyEditable"))return;let e=["mediawiki.util","jquery.textSelection"];mw.config.get("skin")!=="minerva"&&e.push("mobile.editor.overlay"),mw.loader.using(e,()=>{let u=!1,d="Cleaned up article content (via [[User:Eejit43/scripts/article-cleaner|article-cleaner]])";function h(n){setTimeout(()=>{n.value.includes(d.slice(1))||(n.value+=n.value&&!n.value.startsWith("/* ")&&!n.value.endsWith(" */ ")?`; ${d.charAt(0).toLowerCase()+d.slice(1)}`:d)},0),u=!1}async function o(n){n.preventDefault();let m=$(mw.config.get("skin")==="minerva"?"#wikitext-editor":"#wpTextbox1");if(m.length===0)return mw.notify("Edit box not found!",{type:"error",autoHideSeconds:"short"});let f=m.textSelection("getContents"),t=f;if(t=v(t),t=P(t),t=M(t),t=_(t),t=O(t),t=D(t,[F,H]),t=U(t),t=R(t),t=G(t),t=await W(t),t=j(t),t=R(t,!0),t=B(t),f===t)mw.notify("No changes to be made to the article!",{type:"warn",autoHideSeconds:"short"});else{if(ve.init){let i=ve.init.target.getSurface().getModel();i.getLinearFragment(i.getRangeFromSourceOffsets(0,f.length)).insertContent(t),i.setSelection(new ve.dm.LinearSelection(new ve.Range(0,0)))}else m.textSelection("setContents",t),m.textSelection("setSelection",{start:0});mw.notify("Article cleanup complete!",{type:"success",autoHideSeconds:"short"});let r=document.querySelector("#wpSummary");r?h(r):u=!0}}mw.config.get("skin")==="minerva"?(mw.hook("mobileFrontend.editorOpened").add(()=>{let n=document.querySelector(".overlay-header .switcher-container"),f=new OO.ui.ButtonWidget({icon:"articleCheck",framed:!1}).$element[0];f.addEventListener("click",o),n.before(f)}),mw.hook("wikipage.content").add(n=>{if(n[0]?.classList.contains("preview")&&u){let m=document.querySelector(".summary-input textarea");h(m)}})):(mw.util.addCSS(`
#article-cleaner {
display: none;
}
#content:has(#wpTextbox1) #article-cleaner {
display: unset;
}`),mw.util.addPortletLink(mw.config.get("skin")==="minerva"?"p-navigation":"p-cactions","#","Perform article cleanup","article-cleaner").addEventListener("click",o),mw.hook("ve.saveDialog.stateChanged").add(()=>{if(u){let m=document.querySelector(".ve-ui-mwSaveDialog-summary textarea");h(m)}}))})})();function x(e){return e.replaceAll(/[$()*+.?[\\\]^{|}]/g,"\\$&")}function v(e){let u=/[\u0000-\u0009\u000B\u000C\u000E-\u001F\u007F\u00AD\u200B-\u200F\u202A-\u202E\u2060\u2063\uFEFF]/g;return u.test(e)&&(e=e.replaceAll(u,"")),e}function P(e){let u={"See also":["also see"],References:["reference","source","sources","citation","citations"],"Further reading":["further reading"],"External links":["external link","weblink","weblinks"]},d=["and","birth","career","death","education","life","of","or"],h=Object.fromEntries(Object.entries(u).flatMap(([t,r])=>[[t.toLowerCase(),t],...r.map(i=>[i,t])])),n=[...e.matchAll(/(?<=^|\n)\n*(?<startMarkup>=+) *(?<name>.*?) *(?<endMarkup>=+)(\n+|$)/g)].map(t=>{let{name:r}=t.groups,{startMarkup:i,endMarkup:c}=t.groups;r=r.replaceAll(/'{3}/g,"");let S=r.matchAll(/\[\[(.+?)]]/g).toArray();for(let a of S)r=r.replace(a[0],a[1].split("|").at(-1));let p=Math.max(i.length,c.length,2);return{name:r,depth:p,original:t[0]}}),m=new Set(n.map(t=>t.name)),f=n.length>0&&/^\n*=+ | =+\n+$/.test(n[0].original)?" ":"";for(let t of n){let r=t.name.toLowerCase(),c=r in h&&!m.has(h[r])?h[r]:t.name;for(let p of d)c=c.replaceAll(new RegExp(`\\b${p}\\b`,"gi"),p);c=c.charAt(0).toUpperCase()+c.slice(1);let S=`${"=".repeat(t.depth)}${f}${c}${f}${"=".repeat(t.depth)}`;t.original!==S&&(e=e.replace(t.original,`
${S}
`))}return e}function M(e){return e.replaceAll(/__(INDEX|NOINDEX|NEWSECTIONLINK|NONEWSECTIONLINK|NOEDITSECTION|DISAMBIG|STATICREDIRECT|FORCETOC)__\n*/g,"")}function _(e){let d=[...e.matchAll(/{{(displaytitle|defaultsort)[:|](.*?)}}/gi)].map(o=>{let[n,m,f]=o;return{type:m.toUpperCase(),value:f,original:n}}),h=mw.Title.newFromText(mw.config.get("wgPageName"));for(let o of d){let n=new RegExp(`${x(o.original)}
*`,"g"),m=mw.Title.newFromText(o.value);if(!m)continue;let f=mw.Title.makeTitle(h.getNamespaceId(),m.getMainText());if(!f)continue;let t=o.type==="DISPLAYTITLE"?h.toText():h.getMainText(),r=o.type==="DISPLAYTITLE"?f.toText():f.getMainText();if(t===r){e=e.replace(n,"");continue}let i=`{{${o.type}:${r}}}
`;e=e.replace(n,i)}return e}function O(e){return e.replaceAll(/(\[\[|}}):?category:(.*?)(]]|}})/gi,`[[${mw.config.get("wgCanonicalNamespace")==="Draft"?":":""}Category:$2]]`)}function D(e,u){let d=[],h=[],o=!1,n=!1,m=0;function f(i,c=!0){let S=e.slice(m,m+i.length)===i;return S&&c&&(m+=i.length),S}for(;m<e.length;)if(f("<nowiki>"))o=!0;else if(f("</nowiki>"))o=!1;else if(f("<!--"))n=!0;else if(f("-->"))n=!1;else if(!o&&!n)if(f("[["))h.push({start:m-2,end:-1,isNested:h.length>0});else if(f("]]")){let i=h.pop();if(!i)continue;i.end=m,d.push(i)}else m++;else m++;let t=[],r=Object.values(mw.config.get("wgFormattedNamespaces"));for(let i of d){let c=e.slice(i.start+2,i.end-2),[S,...p]=c.split("|");e=e.slice(0,i.start+2)+"\0".repeat(S.length)+e.slice(i.start+2+S.length);let a=S.replaceAll("_"," ").trim(),s=p.join("|");s=s===" "?" ":s.trim();let E=a.startsWith(":");E&&(a=a.slice(1));let b=!1,l=a.charAt(0).toUpperCase()+a.slice(1),g=a.charAt(0).toLowerCase()+a.slice(1),T=a.split(":")[0];T=T.charAt(0).toUpperCase()+T.slice(1),a.includes(":")&&(l.startsWith("Image:")&&(a=`${a.startsWith("Image:")?"F":"f"}ile:${a.slice(6)}`),E&&(["Image","File","Category"].includes(l.split(":")[0])||!r.includes(T))&&(b=!0));let w="",L="",k=/^('{2,})(.*?)\1$/.exec(s);if(k&&!k[2].includes("''")&&(w=k[1],s=k[2].trim(),L=k[1]),/[!,.:;?]$/.test(s)&&!["Image","File","Category"].includes(l.split(":")[0])){let A=s.slice(-1);a.endsWith(A)||(L+=A,s=s.slice(0,-1))}a===s?s="":new RegExp(`^${x(a)}[a-z]+$`).test(s)&&(L=s.slice(a.length)+L,s="");for(let A of[l,g])A===s?(a=A,s=""):new RegExp(`^${x(A)}[a-z]+$`).test(s)&&(a=A,L=s.slice(A.length)+L,s="");(s&&a.includes(":")&&r.includes(T)||a.startsWith("file:")||a.startsWith("category:"))&&(a=a.charAt(0).toUpperCase()+a.slice(1)),a=`${b?":":""}${a}`,a=a.padStart(S.length,"\0");let I=`${w}[[${a}${s?`|${s}`:""}]]${L}`;t.push([i,I])}for(let i of u)e=i(e,1);for(let i=0;i<2;i++)for(let[c,S]of t)i===0&&c.isNested||i===1&&!c.isNested||(e=e.slice(0,c.start)+S.padEnd(c.end-c.start,"\0")+e.slice(c.end));for(let i of u)e=i(e,2);return e.replaceAll("\0","")}function F(e,u){return u===1?(e=e.replaceAll(/[“”„‟]/g,'"'),e=e.replaceAll(/[‘’‚‛]/g,"'"),e=e.replaceAll("\u2026","\x7F"),e=e.replaceAll("\xA0","\x9F")):(e=e.replaceAll("\x7F","..."),e=e.replaceAll("\x9F"," ")),e}function H(e,u){return u===1&&(e=e.replaceAll(/(\(\d{3,4}) ?[‒–−-] ?(\d{3,4}\))/g,(d,h,o)=>`${h}\u2013${o}`.padEnd(d.length,"\0"))),e}function U(e){let u=[/'+(Bold|Italic)( text)?'+ */g,/(<big>)+Big( text)?(<\/big>)+ */g,/(<small>)+Small( text)?(<\/small>)+ */g,/(<sup>)+Superscript( text)?(<\/sup>)+ */g,/(<sub>)+Subscript( text)?(<\/sub>)+ */g,/(<s>)+Strikethrough(<\/s>)+ */g,/(<u>)+Underline(<\/u>)+ */g,/(<code>)+Computer code(<\/code>)+ */g,/(<nowiki>)+Insert non-formatted text here(<\/nowiki>)+ */g,/=+ Heading text =+ */g,/\* Bulleted list item */g,/# Numbered list item */g,/<gallery>\nExample.jpg\|Caption1\nExample.jpg\|Caption2\n<\/gallery> */g,/#REDIRECT \[\[Target page name]] */g,/<!-- Invisible comment --> */g,/<\s*(big|small|sup|sub|s|u|code|nowiki|noinclude|onlyinclude|includeonly|center|blockquote|gallery)\s*(\s+[^<>]*)?>\s*<\s*\/\s*\1\s*>/gi];for(let d of u)for(;d.test(e);)e=e.replace(d,"");return e}function R(e,u=!1){let h=["poem","pre","references","templatedata"],o=[];e=e.replaceAll(new RegExp(`(<(${h.join("|")})(?: [^<>]*?)?>)(.*?)(</\\2>)`,"gs"),(n,m,f,t,r)=>(t=t.replaceAll(/ +$/gm,"").trim(),o.push(`${m}
${t}
${r}`),"\u{F0000}")),e=e.replaceAll(/(\b|\p{Punctuation}|\]\]|\}\}|\w>) {2,}(\b|\p{Punctuation}|\[\[|\{\{|<\w)/gu,"$1 $2"),u||(e=e.replaceAll(/^ +| +$/gm,"")),e=e.replaceAll(/\n{3,}/g,`
`),e=e.replace(/\s*({{[^}]*stub}})/i,`
$1`),e=e.replaceAll(/\s+$/g,""),e=e.replaceAll(/^([#*]+) */gm,"$1 "),e=e.replaceAll(/^([#*]+ .*)\n+(?=[#*]+ )/gm,`$1
`),u||(e=e.replaceAll(/(?<!\|)\s+(?=<ref(?!erences))/g,"")),e=e.replaceAll(/<\/([A-Za-z]+) +>/g,"</$1>"),e=e.replaceAll(/^(=+.*?=+)$\n{2,}(?=^=+.*?=+$)/gm,`$1
`),e=e.trim();for(let n of o)e=e.replace("\u{F0000}",n);return e}function G(e){e=e.replaceAll(/((?:<ref(?!erences)[^/]*?>.*?<\/ref>|<ref(?!erences).*?\/>)+)([!,.;?])?/g,(r,i,c)=>(c??"")+i);let u=[],d=!1,h=!1,o=0;function n(r){let i=e.slice(o,o+r.length)===r;return i&&(o+=r.length),i}function m(r){for(;o<e.length&&!n(r);)o++}for(;o<e.length;)if(n("<nowiki>"))d=!0;else if(n("</nowiki>"))d=!1;else if(n("<!--"))h=!0;else if(n("-->"))h=!1;else if(!d&&!h)if(!n("<references")&&n("<ref")){let r=o-4;m(">");let i=e.slice(r,o-1).trim().endsWith("/");u.push(i?{start:r,end:o,isSelfClosing:i}:{start:r,end:-1})}else n("</ref>")?u.at(-1).end=o:o++;else o++;let f=new DOMParser,t=[];for(let r of u){let i=e.slice(r.start,r.end),c=/<ref(?!erences).*?>/is.exec(i)[0],p=f.parseFromString(r.isSelfClosing?c.replace(/ *\/ *>/," />"):c+"</ref>","text/html").body.firstChild.outerHTML.replaceAll("&","&"),a=i.slice(c.length,-6).trim().replaceAll(/^\[ *([^ \]]*) *]$/gm,"$1").trim();p=r.isSelfClosing||a.length===0?p.replace(/>\s*<\/ref>/," />"):`${p.slice(0,-6)}${a}</ref>`,i!==p&&t.push([i,p])}for(let[r,i]of t)e=e.replace(r,i);return e}var y;async function W(e){let u;(b=>(b[b.Expanded=0]="Expanded",b[b.ExpandedAligned=1]="ExpandedAligned",b[b.Minimized=2]="Minimized",b[b.MinimizedSpaced=3]="MinimizedSpaced"))(u||={});let d;(E=>(E[E.User=2]="User",E[E.Template=10]="Template",E[E.Draft=118]="Draft"))(d||={}),y??=JSON.parse(await C("User:Eejit43/scripts/article-cleaner.json")??"[]");let h=Object.fromEntries(y.flatMap(p=>p.from.map(a=>[a.charAt(0).toLowerCase()+a.slice(1),p.to])));class o{location;isNested=!1;fullText;fullTextEscaped;rawName;name;parameters=[];subTemplates=[];PLACEHOLDER_STRINGS=["\u{F0000}","\u{10FFFF}","\u{FFFFE}"];PIPE_ESCAPE_REGEXES=[/(\[\[[^\]]*?)\|(.*?]])/g,/(<!--.*?)\|(.*?-->)/g,/(<nowiki>.*?)\|(.*?<\/nowiki>)/g];TAG_EQUALS_ESCAPE_REGEXES=[/<(\w+)( [^<>]+?)(?<!\/)>.*?<\/\1>/g,/<(\w+)( [^<>]+?)\/>/g];TEMPLATE_ALIASES=h;DEFAULT_TEMPLATE_STYLES={1:["album rating","album reviews","american football uniform","australian rules football kit","automatic taxobox","baseball uniform","basketball kit","beachhandball kit","blockquote","chembox","cricket uniform","election box","emblem table","episode list","external music video","extra album cover","field hockey kit","football box","football kit","footballbox","gallery","handball kit","hybridbox","icehockey kit","ichnobox","infobox","infraspeciesbox","judo bracket","judo repechage","listen","location map","medical resources","motorsport season","multiple image","music ratings","mycomorphbox","navbox","oobox","orbitbox","osm location map","quote box","repechage","rugbybox","sidebar","single ratings","singles","song ratings","speciesbox","starbox","subject bar","succession box","taxobox","team bracket","track listing","tweet","virusbox","volleyball kit","weather box","nteambracket","2nteam-nteambracket","2teambracket","3teambracket","3teamrr","4teambracket","4teamrr","5teambracket","5teamrr","6teambracket","6teamrr","7teambracket","7teamrr","8teambracket","8teamroundrobin","8teamrr","9teambracket","10teambracket","11teambracket","12teambracket","13teambracket","14teambracket","15teambracket","16teambracket","18teambracket","20teambracket","24teambracket","27teambracket","32teambracket","40teambracket","48teambracket","64teambracket","128teambracket"],2:["birth date","coord","death date","end date","lang","start date"],3:["infobox mapframe"]};NAMESPACE_SPECIFIC_TEMPLATES={118:["afc comment","afc submission","afc submission/draft","afc topic","draft article","draft categories","draft topics","draft","drafts moved from mainspace","preloaddraft submit"],2:["dashboard.wikiedu.org sandbox","user sandbox","userspace draft"]};TEMPLATES_TO_KEEP_CONTENT=["draft categories"];TEMPLATES_TO_SUBST=["articlepagename","articlespace","basepagename","fullpagename","namespace","namespacenumber","pagename","rootpagename","subjectpagename","subjectspace","subpagename","talkpagename","talkspace","pagenamebase"];IMAGE_PARAMETERS=new Set(["cover","image_flag","image_seal","image_skyline","image","logo","map_image"]);IGNORED_IMAGE_SYNTAX=new Set(["thumb","thumbnail","frame","framed","frameless","border","right","left","center","none","baseline","middle","sub","super","text-top","text-bottom","top","bottom"]);constructor(a){this.location={start:a};for(let s=1;s<=10;s++)this.IMAGE_PARAMETERS.add(`image${s}`)}parse(){this.fullText=e.slice(this.location.start,this.location.end),this.fullTextEscaped=this.fullText;for(let l of this.subTemplates)l.parse(),this.fullTextEscaped=this.fullTextEscaped.replace(l.fullText,this.PLACEHOLDER_STRINGS[0]);let a=this.fullTextEscaped.slice(2,-2).trim();for(let l of this.PIPE_ESCAPE_REGEXES)for(;l.test(a);)a=a.replaceAll(l,`$1${this.PLACEHOLDER_STRINGS[1]}$2`);for(let l of this.TAG_EQUALS_ESCAPE_REGEXES)a=a.replaceAll(l,(g,T,w)=>g.replace(w,w.replaceAll("=",this.PLACEHOLDER_STRINGS[2])));let s=a.split("|").map(l=>l.replaceAll(this.PLACEHOLDER_STRINGS[1],"|").trim());this.rawName=s.shift(),this.name=this.rawName.replaceAll("_"," "),this.name.toLowerCase().startsWith("template:")&&(this.name=this.name.slice(9));let E=this.name.charAt(0).toLowerCase()+this.name.slice(1);if(E in this.TEMPLATE_ALIASES){let l=this.name.startsWith(this.name.charAt(0).toLowerCase()),g=this.TEMPLATE_ALIASES[E],T=g.startsWith(g.slice(0,2).toUpperCase())&&/^[A-Z]+$/.exec(g.slice(0,2));this.name=l&&!T?g.charAt(0).toLowerCase()+g.slice(1):g}let b=s.map(l=>{let g=l.indexOf("=");if(g===-1)return{key:null,value:l.replaceAll(this.PLACEHOLDER_STRINGS[2],"=").trim()};let T=l.slice(g+1).replaceAll(this.PLACEHOLDER_STRINGS[2],"=");return{key:l.slice(0,g).trim(),value:`${T.startsWith(`
`)?`
`:""}${T.trim()}`}});this.parameters=b}shouldBeRemoved(){for(let[a,s]of Object.entries(this.NAMESPACE_SPECIFIC_TEMPLATES))if(mw.config.get("wgNamespaceNumber")!==Number.parseInt(a)&&s.includes(this.name.toLowerCase()))return!0;return!1}getStyle(){let a=0,s;for(let[E,b]of Object.entries(this.DEFAULT_TEMPLATE_STYLES))for(let l of b)this.name.toLowerCase().startsWith(l)&&l.length>=a&&(a=l.length,s=Number.parseInt(E));return s}cleanupParameters(){this.parameters=this.parameters.map(({key:a,value:s})=>{if(a&&this.IMAGE_PARAMETERS.has(a)){s=s.trim();let E=s,b=[];s.startsWith("[[")&&s.endsWith("]]")&&(b=s.slice(2,-2).split("|"),s=b[0].trim()),s=s.replace(/^(File|Image):/,"").replaceAll("_"," ");let l=E.slice(2,-2).split("|").slice(1).map(g=>g.trim()).filter(g=>!this.IGNORED_IMAGE_SYNTAX.has(g)).join("|");l.length>0&&(s+=` <!-- Previous additional data: "${l}" -->`)}return{key:a,value:s}})}format(){if(this.fullText||this.parse(),this.shouldBeRemoved())return this.TEMPLATES_TO_KEEP_CONTENT.includes(this.name.toLowerCase())?this.parameters[0].value:"";let a=mw.config.get("wgNamespaceNumber")!==10&&this.TEMPLATES_TO_SUBST.some(l=>l===this.name.toLowerCase()||this.name.toLowerCase().startsWith(`${l}:`)),s=this.getStyle();if(s===void 0){let l=this.name;this.name.toLowerCase().startsWith("template:")&&(l=this.name.slice(9)),a&&(l=`subst:${l}`),l!==this.rawName&&(this.fullTextEscaped=this.fullTextEscaped.replace(this.rawName,l));for(let g of this.subTemplates)this.fullTextEscaped=this.fullTextEscaped.replace(this.PLACEHOLDER_STRINGS[0],g.format());return this.fullTextEscaped}let E=[`{{${a?"subst:":""}${this.name}`];if(this.cleanupParameters(),s===0||s===1){let l=0;s===1&&(l=Math.max(...this.parameters.map(g=>g.key?.length??0)));for(let[g,T]of this.parameters.entries())!T.key&&!T.value&&this.parameters.slice(g+1).every(w=>w.key??!w.value)||E.push(`| ${T.key?`${T.key.padEnd(l)} = `:""}${T.value}`)}else for(let[l,g]of this.parameters.entries())!g.value&&(g.key||this.parameters.slice(l+1).every(T=>T.key??!T.value))||E.push(`|${g.key?`${g.key}=`:""}${g.value}`);E.push("}}"),E.length===2?(E[0]+="}}",E.pop()):s===3&&(E[E.length-2]+="}}",E.pop());let b=E.join(s===0||s===1?`
`:s===3?" ":"");for(let l of this.subTemplates)b=b.replace(this.PLACEHOLDER_STRINGS[0],l.format());return b}}let n=[],m=[],f=!1,t=!1,r=!1,i=0;function c(p){let a=e.slice(i,i+p.length)===p;return a&&(i+=p.length),a}for(;i<e.length;)if(c("<nowiki>"))t=!0;else if(c("</nowiki>"))t=!1;else if(c("<!--"))r=!0;else if(c("-->"))r=!1;else if(!t&&!r)if(c("[["))f=!0;else if(f&&c("]]"))f=!1;else if(c("{{")){let p=new o(i-2);m.length>0&&(p.isNested=!0,m.at(-1)?.subTemplates.push(p)),m.push(p)}else if(c("}}")){let p=m.pop();if(!p)continue;p.location.end=i,n.push(p)}else i++;else i++;let S=e;for(let p of n)p.isNested||(p.parse(),S=S.replace(p.fullText,p.format()));return S}function j(e){if(mw.config.get("wgNamespaceNumber")!==0)return e;let u=["Do not remove this line","EDIT BELOW THIS LINE","Important, do not remove anything above this line before article has been created","Important, do not remove this line before article has been created","Inline citations added to your article will automatically display here","Note: The following pages were redirects to "];for(let d of u)e=e.replaceAll(new RegExp(` *<!-- ?${x(d)}.*?--> *
?`,"gs"),"");return e}function B(e){let u=mw.config.get("wgNamespaceNumber")!==0,d=!!new URLSearchParams(window.location.search).get("section"),h=mw.config.get("wgCategories").includes("All disambiguation pages"),o=mw.config.get("wgIsRedirect");if(u||d||h||o)return e;let n=[...e.matchAll(/\[\[Category:/g)].length;return e=e.replaceAll(/\n*{{(uncategorized|improve categories)(\|.+?)?}}({{|\n+|$)/gi,""),n===0&&!/{{uncategorized/i.test(e)?e+=`
{{Uncategorized|{{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}}}}`:n===1&&!/{{improve categories/i.test(e)&&(e+=`
{{Improve categories|{{subst:CURRENTMONTHNAME}} {{subst:CURRENTYEAR}}}}`),e}})();
// </pre>
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vdXRpbGl0eS50cyIsICIuLi9zY3JpcHRzL2FydGljbGUtY2xlYW5lci50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHR5cGUgeyBBcGlRdWVyeVJldmlzaW9uc1BhcmFtcyB9IGZyb20gJ3R5cGVzLW1lZGlhd2lraS1hcGknO1xuaW1wb3J0IHR5cGUgeyBQYWdlUmV2aXNpb25zUmVzdWx0IH0gZnJvbSAnLi9nbG9iYWwtdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgYXBpID0gbmV3IG13LkFwaSgpO1xuXG4vKipcbiAqIEZldGNoZXMgdGhlIGNvbnRlbnQgb2YgYSBnaXZlbiBwYWdlLlxuICogQHBhcmFtIHRpdGxlIFRoZSB0aXRsZSB0byBmZXRjaC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBhZ2VDb250ZW50KHRpdGxlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICAoYXdhaXQgYXBpLmdldCh7XG4gICAgICAgICAgICBhY3Rpb246ICdxdWVyeScsXG4gICAgICAgICAgICBmb3JtYXR2ZXJzaW9uOiAnMicsXG4gICAgICAgICAgICBwcm9wOiAncmV2aXNpb25zJyxcbiAgICAgICAgICAgIHJ2cHJvcDogJ2NvbnRlbnQnLFxuICAgICAgICAgICAgcnZzbG90czogJ21haW4nLFxuICAgICAgICAgICAgdGl0bGVzOiB0aXRsZSxcbiAgICAgICAgfSBzYXRpc2ZpZXMgQXBpUXVlcnlSZXZpc2lvbnNQYXJhbXMpKSBhcyBQYWdlUmV2aXNpb25zUmVzdWx0XG4gICAgKS5xdWVyeS5wYWdlc1swXS5yZXZpc2lvbnM/LlswXS5zbG90cy5tYWluLmNvbnRlbnQudHJpbSgpO1xufVxuIiwgImltcG9ydCB7IGdldFBhZ2VDb250ZW50IH0gZnJvbSAnLi4vdXRpbGl0eSc7XG5cbmRlY2xhcmUgZ2xvYmFsIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4dHJhbmVvdXMtY2xhc3NcbiAgICBjbGFzcyBWZVJhbmdlIHtcbiAgICAgICAgY29uc3RydWN0b3Ioc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpO1xuICAgIH1cblxuICAgIGNsYXNzIFZlRnJhZ21lbnQge1xuICAgICAgICBpbnNlcnRDb250ZW50KGNvbnRlbnQ6IHN0cmluZyk6IHZvaWQ7XG4gICAgfVxuXG4gICAgY2xhc3MgVmVTdXJmYWNlTW9kZWwge1xuICAgICAgICBnZXRMaW5lYXJGcmFnbWVudChyYW5nZTogVmVSYW5nZSk6IFZlRnJhZ21lbnQ7XG4gICAgICAgIGdldFJhbmdlRnJvbVNvdXJjZU9mZnNldHMoc3RhcnQ6IG51bWJlciwgZW5kOiBudW1iZXIpOiBWZVJhbmdlO1xuICAgICAgICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uOiBWZUxpbmVhclNlbGVjdGlvbik6IHZvaWQ7XG4gICAgfVxuXG4gICAgY2xhc3MgVmVUYXJnZXQge1xuICAgICAgICBnZXRTdXJmYWNlKCk6IHsgZ2V0TW9kZWwoKTogVmVTdXJmYWNlTW9kZWwgfTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4dHJhbmVvdXMtY2xhc3NcbiAgICBjbGFzcyBWZUxpbmVhclNlbGVjdGlvbiB7XG4gICAgICAgIGNvbnN0cnVjdG9yKHJhbmdlOiBWZVJhbmdlKTtcbiAgICB9XG5cbiAgICBjb25zdCB2ZToge1xuICAgICAgICBSYW5nZTogdHlwZW9mIFZlUmFuZ2U7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgICAgIGRtOiB7IExpbmVhclNlbGVjdGlvbjogdHlwZW9mIFZlTGluZWFyU2VsZWN0aW9uIH07IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uXG4gICAgICAgIGluaXQ/OiB7IHRhcmdldDogVmVUYXJnZXQgfTtcbiAgICB9O1xufVxuXG4oKCkgPT4ge1xuICAgIGlmIChtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpIDwgMCkgcmV0dXJuOyAvLyBEb24ndCBydW4gaW4gdmlydHVhbCBuYW1lc3BhY2VzXG4gICAgaWYgKCFtdy5jb25maWcuZ2V0KCd3Z0lzUHJvYmFibHlFZGl0YWJsZScpKSByZXR1cm47IC8vIERvbid0IHJ1biBpZiB1c2VyIGNhbid0IGVkaXQgcGFnZVxuXG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gWydtZWRpYXdpa2kudXRpbCcsICdqcXVlcnkudGV4dFNlbGVjdGlvbiddO1xuXG4gICAgaWYgKG13LmNvbmZpZy5nZXQoJ3NraW4nKSAhPT0gJ21pbmVydmEnKSBkZXBlbmRlbmNpZXMucHVzaCgnbW9iaWxlLmVkaXRvci5vdmVybGF5Jyk7XG5cbiAgICBtdy5sb2FkZXIudXNpbmcoZGVwZW5kZW5jaWVzLCAoKSA9PiB7XG4gICAgICAgIGxldCBzaG91bGRBZGRTY3JpcHRNZXNzYWdlID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgU0NSSVBUX01FU1NBR0UgPSAnQ2xlYW5lZCB1cCBhcnRpY2xlIGNvbnRlbnQgKHZpYSBbW1VzZXI6RWVqaXQ0My9zY3JpcHRzL2FydGljbGUtY2xlYW5lcnxhcnRpY2xlLWNsZWFuZXJdXSknO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBVcGRhdGVzIHRoZSBzdW1tYXJ5IHRleHRhcmVhIHdpdGggdGhlIHNjcmlwdCBtZXNzYWdlIGlmIGl0IGlzIG5vdCBhbHJlYWR5IHByZXNlbnQuXG4gICAgICAgICAqIEBwYXJhbSB0ZXh0YXJlYSBUaGUgc3VtbWFyeSB0ZXh0YXJlYSBlbGVtZW50IHRvIHVwZGF0ZS5cbiAgICAgICAgICovXG4gICAgICAgIGZ1bmN0aW9uIHVwZGF0ZVN1bW1hcnkodGV4dGFyZWE6IEhUTUxUZXh0QXJlYUVsZW1lbnQgfCBIVE1MSW5wdXRFbGVtZW50KSB7XG4gICAgICAgICAgICAvLyBBZGQgdGltZW91dCBiZWZvcmUgc2V0dGluZyB0ZXh0YXJlYSB2YWx1ZSBhcyB0aGlzIGlzIG92ZXJ3cml0dGVuIHNvbWV0aW1lcyBmb3Igc29tZSByZWFzb25cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghdGV4dGFyZWEudmFsdWUuaW5jbHVkZXMoU0NSSVBUX01FU1NBR0Uuc2xpY2UoMSkpKVxuICAgICAgICAgICAgICAgICAgICB0ZXh0YXJlYS52YWx1ZSArPVxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dGFyZWEudmFsdWUgJiYgIXRleHRhcmVhLnZhbHVlLnN0YXJ0c1dpdGgoJy8qICcpICYmICF0ZXh0YXJlYS52YWx1ZS5lbmRzV2l0aCgnICovICcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBgOyAke1NDUklQVF9NRVNTQUdFLmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgU0NSSVBUX01FU1NBR0Uuc2xpY2UoMSl9YFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogU0NSSVBUX01FU1NBR0U7XG4gICAgICAgICAgICB9LCAwKTtcblxuICAgICAgICAgICAgc2hvdWxkQWRkU2NyaXB0TWVzc2FnZSA9IGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqXG4gICAgICAgICAqIEhhbmRsZXMgdGhlIGNsaWNrIGV2ZW50IGZvciB0aGUgYWN0aXZhdGlvbiBidXR0b24uXG4gICAgICAgICAqIEBwYXJhbSBldmVudCBUaGUgbW91c2UgZXZlbnQgdGhhdCB0cmlnZ2VyZWQgdGhlIGNsaWNrLlxuICAgICAgICAgKi9cbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gaGFuZGxlQWN0aXZhdGlvbihldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICAgICAgY29uc3QgZWRpdG9yID0gJChtdy5jb25maWcuZ2V0KCdza2luJykgPT09ICdtaW5lcnZhJyA/ICcjd2lraXRleHQtZWRpdG9yJyA6ICcjd3BUZXh0Ym94MScpO1xuICAgICAgICAgICAgaWYgKGVkaXRvci5sZW5ndGggPT09IDApIHJldHVybiBtdy5ub3RpZnkoJ0VkaXQgYm94IG5vdCBmb3VuZCEnLCB7IHR5cGU6ICdlcnJvcicsIGF1dG9IaWRlU2Vjb25kczogJ3Nob3J0JyB9KTtcblxuICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gZWRpdG9yLnRleHRTZWxlY3Rpb24oJ2dldENvbnRlbnRzJyk7XG5cbiAgICAgICAgICAgIGxldCBmaW5hbFRleHQgPSBvcmlnaW5hbFRleHQ7XG5cbiAgICAgICAgICAgIGZpbmFsVGV4dCA9IGNsZWFudXBTdHJheVVuaWNvZGVDaGFyYWN0ZXJzKGZpbmFsVGV4dCk7XG4gICAgICAgICAgICBmaW5hbFRleHQgPSBjbGVhbnVwU2VjdGlvbkhlYWRlcnMoZmluYWxUZXh0KTtcbiAgICAgICAgICAgIGZpbmFsVGV4dCA9IGNsZWFudXBNYWdpY1dvcmRzKGZpbmFsVGV4dCk7XG4gICAgICAgICAgICBmaW5hbFRleHQgPSBjbGVhbnVwRGlzcGxheXRpdGxlc0FuZERlZmF1bHRzb3J0cyhmaW5hbFRleHQpO1xuICAgICAgICAgICAgZmluYWxUZXh0ID0gY2xlYW51cENhdGVnb3JpZXMoZmluYWxUZXh0KTtcbiAgICAgICAgICAgIGZpbmFsVGV4dCA9IGNsZWFudXBMaW5rcyhmaW5hbFRleHQsIFtjbGVhbnVwSW1wcm9wZXJDaGFyYWN0ZXJzLCBjbGVhbnVwWWVhclJhbmdlc10pO1xuICAgICAgICAgICAgZmluYWxUZXh0ID0gY2xlYW51cFN0cmF5TWFya3VwKGZpbmFsVGV4dCk7XG4gICAgICAgICAgICBmaW5hbFRleHQgPSBjbGVhbnVwU3BhY2luZyhmaW5hbFRleHQpO1xuICAgICAgICAgICAgZmluYWxUZXh0ID0gY2xlYW51cFJlZmVyZW5jZXMoZmluYWxUZXh0KTtcbiAgICAgICAgICAgIGZpbmFsVGV4dCA9IGF3YWl0IGZvcm1hdFRlbXBsYXRlcyhmaW5hbFRleHQpO1xuICAgICAgICAgICAgZmluYWxUZXh0ID0gcmVtb3ZlQ29tbWVudHMoZmluYWxUZXh0KTtcbiAgICAgICAgICAgIGZpbmFsVGV4dCA9IGNsZWFudXBTcGFjaW5nKGZpbmFsVGV4dCwgdHJ1ZSk7XG4gICAgICAgICAgICBmaW5hbFRleHQgPSBhdXRvVGFnUGFnZShmaW5hbFRleHQpO1xuXG4gICAgICAgICAgICBpZiAob3JpZ2luYWxUZXh0ID09PSBmaW5hbFRleHQpIG13Lm5vdGlmeSgnTm8gY2hhbmdlcyB0byBiZSBtYWRlIHRvIHRoZSBhcnRpY2xlIScsIHsgdHlwZTogJ3dhcm4nLCBhdXRvSGlkZVNlY29uZHM6ICdzaG9ydCcgfSk7XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAodmUuaW5pdCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdXJmYWNlTW9kZWwgPSB2ZS5pbml0LnRhcmdldC5nZXRTdXJmYWNlKCkuZ2V0TW9kZWwoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZnJhZ21lbnQgPSBzdXJmYWNlTW9kZWwuZ2V0TGluZWFyRnJhZ21lbnQoc3VyZmFjZU1vZGVsLmdldFJhbmdlRnJvbVNvdXJjZU9mZnNldHMoMCwgb3JpZ2luYWxUZXh0Lmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgICAgICBmcmFnbWVudC5pbnNlcnRDb250ZW50KGZpbmFsVGV4dCk7XG4gICAgICAgICAgICAgICAgICAgIHN1cmZhY2VNb2RlbC5zZXRTZWxlY3Rpb24obmV3IHZlLmRtLkxpbmVhclNlbGVjdGlvbihuZXcgdmUuUmFuZ2UoMCwgMCkpKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlZGl0b3IudGV4dFNlbGVjdGlvbignc2V0Q29udGVudHMnLCBmaW5hbFRleHQpO1xuXG4gICAgICAgICAgICAgICAgICAgIGVkaXRvci50ZXh0U2VsZWN0aW9uKCdzZXRTZWxlY3Rpb24nLCB7IHN0YXJ0OiAwIH0pO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIG13Lm5vdGlmeSgnQXJ0aWNsZSBjbGVhbnVwIGNvbXBsZXRlIScsIHsgdHlwZTogJ3N1Y2Nlc3MnLCBhdXRvSGlkZVNlY29uZHM6ICdzaG9ydCcgfSk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzdW1tYXJ5SW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxJbnB1dEVsZW1lbnQ+KCcjd3BTdW1tYXJ5Jyk7XG5cbiAgICAgICAgICAgICAgICBpZiAoc3VtbWFyeUlucHV0KSB1cGRhdGVTdW1tYXJ5KHN1bW1hcnlJbnB1dCk7XG4gICAgICAgICAgICAgICAgZWxzZSBzaG91bGRBZGRTY3JpcHRNZXNzYWdlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChtdy5jb25maWcuZ2V0KCdza2luJykgPT09ICdtaW5lcnZhJykge1xuICAgICAgICAgICAgLy8gU2V0IHVwIGhvb2sgdG8gYWRkIGJ1dHRvbiB0byBlZGl0aW5nIHRvb2xiYXJcbiAgICAgICAgICAgIG13Lmhvb2soJ21vYmlsZUZyb250ZW5kLmVkaXRvck9wZW5lZCcpLmFkZCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGVhZGVyU3dpdGNoZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxEaXZFbGVtZW50PignLm92ZXJsYXktaGVhZGVyIC5zd2l0Y2hlci1jb250YWluZXInKSE7XG5cbiAgICAgICAgICAgICAgICBjb25zdCB0b29sID0gbmV3IE9PLnVpLkJ1dHRvbldpZGdldCh7IGljb246ICdhcnRpY2xlQ2hlY2snLCBmcmFtZWQ6IGZhbHNlIH0pO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gdG9vbC4kZWxlbWVudFswXTtcbiAgICAgICAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVBY3RpdmF0aW9uKTtcblxuICAgICAgICAgICAgICAgIGhlYWRlclN3aXRjaGVyLmJlZm9yZShidXR0b24pO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIFNldCB1cCBob29rIGZvciB1cGRhdGluZyBlZGl0IHN1bW1hcnlcbiAgICAgICAgICAgIG13Lmhvb2soJ3dpa2lwYWdlLmNvbnRlbnQnKS5hZGQoKGNvbnRlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBJZ25vcmUgaWYgdHJpZ2dlcmVkIGJ5IG1haW4gY29udGVudCBsb2FkIGluc3RlYWQgb2YgcHJldmlld1xuICAgICAgICAgICAgICAgIGlmICghY29udGVudFswXT8uY2xhc3NMaXN0LmNvbnRhaW5zKCdwcmV2aWV3JykpIHJldHVybjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG5cbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQWRkU2NyaXB0TWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdW1tYXJ5SW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxJbnB1dEVsZW1lbnQ+KCcuc3VtbWFyeS1pbnB1dCB0ZXh0YXJlYScpITtcblxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdW1tYXJ5KHN1bW1hcnlJbnB1dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBTZXQgdXAgbGluayBpbiBzaWRlIG1lbnVcbiAgICAgICAgICAgIG13LnV0aWwuYWRkQ1NTKGBcbiNhcnRpY2xlLWNsZWFuZXIge1xuICAgIGRpc3BsYXk6IG5vbmU7XG59XG5cbiNjb250ZW50Omhhcygjd3BUZXh0Ym94MSkgI2FydGljbGUtY2xlYW5lciB7XG4gICAgZGlzcGxheTogdW5zZXQ7XG59YCk7XG5cbiAgICAgICAgICAgIGNvbnN0IGxpbmsgPSBtdy51dGlsLmFkZFBvcnRsZXRMaW5rKFxuICAgICAgICAgICAgICAgIG13LmNvbmZpZy5nZXQoJ3NraW4nKSA9PT0gJ21pbmVydmEnID8gJ3AtbmF2aWdhdGlvbicgOiAncC1jYWN0aW9ucycsXG4gICAgICAgICAgICAgICAgJyMnLFxuICAgICAgICAgICAgICAgICdQZXJmb3JtIGFydGljbGUgY2xlYW51cCcsXG4gICAgICAgICAgICAgICAgJ2FydGljbGUtY2xlYW5lcicsXG4gICAgICAgICAgICApITtcbiAgICAgICAgICAgIGxpbmsuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBoYW5kbGVBY3RpdmF0aW9uKTtcblxuICAgICAgICAgICAgLy8gU2V0IHVwIGhvb2sgZm9yIHVwZGF0aW5nIGVkaXQgc3VtbWFyeSBpbiBWaXN1YWxFZGl0b3JcbiAgICAgICAgICAgIG13Lmhvb2soJ3ZlLnNhdmVEaWFsb2cuc3RhdGVDaGFuZ2VkJykuYWRkKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQWRkU2NyaXB0TWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdW1tYXJ5SW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxUZXh0QXJlYUVsZW1lbnQ+KCcudmUtdWktbXdTYXZlRGlhbG9nLXN1bW1hcnkgdGV4dGFyZWEnKSE7XG5cbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3VtbWFyeShzdW1tYXJ5SW5wdXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG59KSgpO1xuXG4vKipcbiAqIEVzY2FwZXMgcmVnZXggY2hhcmFjdGVycyBpbiBhIHN0cmluZy5cbiAqIEBwYXJhbSBzdHJpbmcgVGhlIHN0cmluZyB0byBlc2NhcGUgcmVnZXggY2hhcmFjdGVycyBpbi5cbiAqL1xuZnVuY3Rpb24gZXNjYXBlUmVnZXhDaGFyYWN0ZXJzKHN0cmluZzogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHN0cmluZy5yZXBsYWNlQWxsKC9bJCgpKisuP1tcXFxcXFxdXnt8fV0vZywgJ1xcXFwkJicpO1xufVxuXG4vKipcbiAqIENsZWFucyB1cCBzdHJheSBVbmljb2RlIGNoYXJhY3RlcnMgaW4gYW4gYXJ0aWNsZSdzIGNvbnRlbnQuXG4gKiBAcGFyYW0gY29udGVudCBUaGUgYXJ0aWNsZSBjb250ZW50IHRvIGNsZWFuIHVwLlxuICovXG5mdW5jdGlvbiBjbGVhbnVwU3RyYXlVbmljb2RlQ2hhcmFjdGVycyhjb250ZW50OiBzdHJpbmcpIHtcbiAgICAvLyBUaGlzIHJlZ2V4IHJlbW92ZXM6XG4gICAgLy8gICAtIEFTQ0lJIGNvbnRyb2wgY2hhcmFjdGVycyAoXFx1MDAwMC1cXHUwMDA5LCBcXHUwMDBCLVxcdTAwMEMsIFxcdTAwMEUtXFx1MDAxRilcbiAgICAvLyAgIC0gREVMIChcXHUwMDdGKVxuICAgIC8vICAgLSBTb2Z0IGh5cGhlbiAoXFx1MDBBRClcbiAgICAvLyAgIC0gWmVyby13aWR0aCBjaGFyYWN0ZXJzIGFuZCBkaXJlY3Rpb25hbGl0eSBtYXJrcyAoXFx1MjAwQi1cXHUyMDBGKVxuICAgIC8vICAgLSBCaWRpIG92ZXJyaWRlIGFuZCBmb3JtYXR0aW5nIGNoYXJhY3RlcnMgKFxcdTIwMkEtXFx1MjAyRSlcbiAgICAvLyAgIC0gV29yZCBqb2luZXIgYW5kIGludmlzaWJsZSBzZXBhcmF0b3IgKFxcdTIwNjAsIFxcdTIwNjMpXG4gICAgLy8gICAtIEJ5dGUgb3JkZXIgbWFyayAoQk9NKSAoXFx1RkVGRilcbiAgICBjb25zdCBTVFJBWV9VTklDT0RFX1JFR0VYID0gL1tcXHUwMDAwLVxcdTAwMDlcXHUwMDBCXFx1MDAwQ1xcdTAwMEUtXFx1MDAxRlxcdTAwN0ZcXHUwMEFEXFx1MjAwQi1cXHUyMDBGXFx1MjAyQS1cXHUyMDJFXFx1MjA2MFxcdTIwNjNcXHVGRUZGXS9nOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnRyb2wtcmVnZXhcblxuICAgIGlmIChTVFJBWV9VTklDT0RFX1JFR0VYLnRlc3QoY29udGVudCkpIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2VBbGwoU1RSQVlfVU5JQ09ERV9SRUdFWCwgJycpO1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8qKlxuICogQ2xlYW5zIHVwIHNlY3Rpb24gaGVhZGVycyBpbiBhbiBhcnRpY2xlJ3MgY29udGVudC5cbiAqIEBwYXJhbSBjb250ZW50IFRoZSBhcnRpY2xlIGNvbnRlbnQgdG8gY2xlYW4gdXAuXG4gKi9cbmZ1bmN0aW9uIGNsZWFudXBTZWN0aW9uSGVhZGVycyhjb250ZW50OiBzdHJpbmcpIHtcbiAgICBjb25zdCBDT01NT05fUkVQTEFDRU1FTlRTID0ge1xuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cbiAgICAgICAgJ1NlZSBhbHNvJzogWydhbHNvIHNlZSddLFxuICAgICAgICAnUmVmZXJlbmNlcyc6IFsncmVmZXJlbmNlJywgJ3NvdXJjZScsICdzb3VyY2VzJywgJ2NpdGF0aW9uJywgJ2NpdGF0aW9ucyddLFxuICAgICAgICAnRnVydGhlciByZWFkaW5nJzogWydmdXJ0aGVyIHJlYWRpbmcnXSxcbiAgICAgICAgJ0V4dGVybmFsIGxpbmtzJzogWydleHRlcm5hbCBsaW5rJywgJ3dlYmxpbmsnLCAnd2VibGlua3MnXSxcbiAgICAgICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24gKi9cbiAgICB9O1xuXG4gICAgY29uc3QgQ09NTU9OX01JU0NBUElUQUxJWkVEX1dPUkRTID0gWydhbmQnLCAnYmlydGgnLCAnY2FyZWVyJywgJ2RlYXRoJywgJ2VkdWNhdGlvbicsICdsaWZlJywgJ29mJywgJ29yJ107XG5cbiAgICBjb25zdCByZXZlcnNlQ29tbW9uUmVwbGFjZW1lbnRzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhDT01NT05fUkVQTEFDRU1FTlRTKS5mbGF0TWFwKChba2V5LCB2YWx1ZXNdKSA9PiBbXG4gICAgICAgICAgICBba2V5LnRvTG93ZXJDYXNlKCksIGtleV0sXG4gICAgICAgICAgICAuLi4odmFsdWVzLm1hcCgodmFsdWUpID0+IFt2YWx1ZSwga2V5XSkgYXMgW3N0cmluZywgc3RyaW5nXVtdKSwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktdHlwZS1hc3NlcnRpb25cbiAgICAgICAgXSksXG4gICAgKTtcblxuICAgIGNvbnN0IGhlYWRlcnMgPSBjb250ZW50Lm1hdGNoQWxsKC8oPzw9XnxcXG4pXFxuKig/PHN0YXJ0TWFya3VwPj0rKSAqKD88bmFtZT4uKj8pICooPzxlbmRNYXJrdXA+PSspKFxcbit8JCkvZyk7XG5cbiAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gWy4uLmhlYWRlcnNdLm1hcCgoaGVhZGVyKSA9PiB7XG4gICAgICAgIGxldCB7IG5hbWUgfSA9IGhlYWRlci5ncm91cHMhO1xuICAgICAgICBjb25zdCB7IHN0YXJ0TWFya3VwLCBlbmRNYXJrdXAgfSA9IGhlYWRlci5ncm91cHMhO1xuXG4gICAgICAgIG5hbWUgPSBuYW1lLnJlcGxhY2VBbGwoLyd7M30vZywgJycpO1xuXG4gICAgICAgIGNvbnN0IGxpbmtzID0gbmFtZS5tYXRjaEFsbCgvXFxbXFxbKC4rPyldXS9nKS50b0FycmF5KCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBsaW5rIG9mIGxpbmtzKSBuYW1lID0gbmFtZS5yZXBsYWNlKGxpbmtbMF0sIGxpbmtbMV0uc3BsaXQoJ3wnKS5hdCgtMSkhKTtcblxuICAgICAgICBjb25zdCBkZXB0aCA9IE1hdGgubWF4KHN0YXJ0TWFya3VwLmxlbmd0aCwgZW5kTWFya3VwLmxlbmd0aCwgMik7XG5cbiAgICAgICAgcmV0dXJuIHsgbmFtZSwgZGVwdGgsIG9yaWdpbmFsOiBoZWFkZXJbMF0gfTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGhlYWRlcnNTZXQgPSBuZXcgU2V0KHBhcnNlZEhlYWRlcnMubWFwKChoZWFkZXIpID0+IGhlYWRlci5uYW1lKSk7XG5cbiAgICBjb25zdCB0aXRsZVNwYWNlciA9IHBhcnNlZEhlYWRlcnMubGVuZ3RoID4gMCA/ICgvXlxcbio9KyB8ID0rXFxuKyQvLnRlc3QocGFyc2VkSGVhZGVyc1swXS5vcmlnaW5hbCkgPyAnICcgOiAnJykgOiAnJztcblxuICAgIGZvciAoY29uc3QgaGVhZGVyIG9mIHBhcnNlZEhlYWRlcnMpIHtcbiAgICAgICAgY29uc3QgbG93ZXJjYXNlTmFtZSA9IGhlYWRlci5uYW1lLnRvTG93ZXJDYXNlKCk7XG5cbiAgICAgICAgY29uc3QgcmVwbGFjZWROYW1lID1cbiAgICAgICAgICAgIGxvd2VyY2FzZU5hbWUgaW4gcmV2ZXJzZUNvbW1vblJlcGxhY2VtZW50cyAmJiAhaGVhZGVyc1NldC5oYXMocmV2ZXJzZUNvbW1vblJlcGxhY2VtZW50c1tsb3dlcmNhc2VOYW1lXSlcbiAgICAgICAgICAgICAgICA/IHJldmVyc2VDb21tb25SZXBsYWNlbWVudHNbbG93ZXJjYXNlTmFtZV1cbiAgICAgICAgICAgICAgICA6IGhlYWRlci5uYW1lO1xuXG4gICAgICAgIGxldCBjYXBpdGFsaXplZE5hbWUgPSByZXBsYWNlZE5hbWU7XG5cbiAgICAgICAgZm9yIChjb25zdCB3b3JkIG9mIENPTU1PTl9NSVNDQVBJVEFMSVpFRF9XT1JEUylcbiAgICAgICAgICAgIGNhcGl0YWxpemVkTmFtZSA9IGNhcGl0YWxpemVkTmFtZS5yZXBsYWNlQWxsKG5ldyBSZWdFeHAoYFxcXFxiJHt3b3JkfVxcXFxiYCwgJ2dpJyksIHdvcmQpO1xuXG4gICAgICAgIGNhcGl0YWxpemVkTmFtZSA9IGNhcGl0YWxpemVkTmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGNhcGl0YWxpemVkTmFtZS5zbGljZSgxKTtcblxuICAgICAgICBjb25zdCBvdXRwdXQgPSBgJHsnPScucmVwZWF0KGhlYWRlci5kZXB0aCl9JHt0aXRsZVNwYWNlcn0ke2NhcGl0YWxpemVkTmFtZX0ke3RpdGxlU3BhY2VyfSR7Jz0nLnJlcGVhdChoZWFkZXIuZGVwdGgpfWA7XG5cbiAgICAgICAgaWYgKGhlYWRlci5vcmlnaW5hbCAhPT0gb3V0cHV0KSBjb250ZW50ID0gY29udGVudC5yZXBsYWNlKGhlYWRlci5vcmlnaW5hbCwgYFxcblxcbiR7b3V0cHV0fVxcbmApO1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZW50O1xufVxuXG4vKipcbiAqIFJlbW92ZXMgdW5uZWNlc3NhcnkgbWFnaWMgd29yZHMgZnJvbSBhbiBhcnRpY2xlJ3MgY29udGVudC5cbiAqIEBwYXJhbSBjb250ZW50IFRoZSBhcnRpY2xlIGNvbnRlbnQgdG8gY2xlYW4gdXAuXG4gKi9cbmZ1bmN0aW9uIGNsZWFudXBNYWdpY1dvcmRzKGNvbnRlbnQ6IHN0cmluZykge1xuICAgIHJldHVybiBjb250ZW50LnJlcGxhY2VBbGwoL19fKElOREVYfE5PSU5ERVh8TkVXU0VDVElPTkxJTkt8Tk9ORVdTRUNUSU9OTElOS3xOT0VESVRTRUNUSU9OfERJU0FNQklHfFNUQVRJQ1JFRElSRUNUfEZPUkNFVE9DKV9fXFxuKi9nLCAnJyk7XG59XG5cbi8qKlxuICogQ2xlYW5zIHVwIERJU1BMQVlUSVRMRXMgYW5kIERFRkFVTFRTT1JUcyBpbiBhbiBhcnRpY2xlJ3MgY29udGVudC5cbiAqIEBwYXJhbSBjb250ZW50IFRoZSBhcnRpY2xlIGNvbnRlbnQgdG8gY2xlYW4gdXAuXG4gKi9cbmZ1bmN0aW9uIGNsZWFudXBEaXNwbGF5dGl0bGVzQW5kRGVmYXVsdHNvcnRzKGNvbnRlbnQ6IHN0cmluZykge1xuICAgIGNvbnN0IHRhZ3MgPSBjb250ZW50Lm1hdGNoQWxsKC97eyhkaXNwbGF5dGl0bGV8ZGVmYXVsdHNvcnQpWzp8XSguKj8pfX0vZ2kpO1xuXG4gICAgY29uc3QgcGFyc2VkVGFncyA9IFsuLi50YWdzXS5tYXAoKHRhZykgPT4ge1xuICAgICAgICBjb25zdCBbZnVsbFRhZywgdHlwZSwgdmFsdWVdID0gdGFnO1xuXG4gICAgICAgIHJldHVybiB7IHR5cGU6IHR5cGUudG9VcHBlckNhc2UoKSwgdmFsdWUsIG9yaWdpbmFsOiBmdWxsVGFnIH07XG4gICAgfSk7XG5cbiAgICBjb25zdCBjdXJyZW50VGl0bGUgPSBtdy5UaXRsZS5uZXdGcm9tVGV4dChtdy5jb25maWcuZ2V0KCd3Z1BhZ2VOYW1lJykpITtcblxuICAgIGZvciAoY29uc3QgdGFnIG9mIHBhcnNlZFRhZ3MpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxUYWdSZWdleCA9IG5ldyBSZWdFeHAoYCR7ZXNjYXBlUmVnZXhDaGFyYWN0ZXJzKHRhZy5vcmlnaW5hbCl9XFxuKmAsICdnJyk7XG5cbiAgICAgICAgY29uc3QgdW5wcmVmaXhlZFRpdGxlID0gbXcuVGl0bGUubmV3RnJvbVRleHQodGFnLnZhbHVlKTtcblxuICAgICAgICBpZiAoIXVucHJlZml4ZWRUaXRsZSkgY29udGludWU7XG5cbiAgICAgICAgY29uc3QgdGl0bGUgPSBtdy5UaXRsZS5tYWtlVGl0bGUoY3VycmVudFRpdGxlLmdldE5hbWVzcGFjZUlkKCksIHVucHJlZml4ZWRUaXRsZS5nZXRNYWluVGV4dCgpKTtcblxuICAgICAgICBpZiAoIXRpdGxlKSBjb250aW51ZTtcblxuICAgICAgICBjb25zdCBkZWZhdWx0S2V5ID0gdGFnLnR5cGUgPT09ICdESVNQTEFZVElUTEUnID8gY3VycmVudFRpdGxlLnRvVGV4dCgpIDogY3VycmVudFRpdGxlLmdldE1haW5UZXh0KCk7XG5cbiAgICAgICAgY29uc3QgY3VzdG9tS2V5ID0gdGFnLnR5cGUgPT09ICdESVNQTEFZVElUTEUnID8gdGl0bGUudG9UZXh0KCkgOiB0aXRsZS5nZXRNYWluVGV4dCgpO1xuXG4gICAgICAgIGlmIChkZWZhdWx0S2V5ID09PSBjdXN0b21LZXkpIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2Uob3JpZ2luYWxUYWdSZWdleCwgJycpO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuZXdUZXh0ID0gYHt7JHt0YWcudHlwZX06JHtjdXN0b21LZXl9fX1cXG5gO1xuXG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2Uob3JpZ2luYWxUYWdSZWdleCwgbmV3VGV4dCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8qKlxuICogQ2xlYW5zIHVwIGNhdGVnb3JpZXMgaW4gYW4gYXJ0aWNsZSdzIGNvbnRlbnQuXG4gKiBAcGFyYW0gY29udGVudCBUaGUgYXJ0aWNsZSBjb250ZW50IHRvIGNsZWFuIHVwLlxuICovXG5mdW5jdGlvbiBjbGVhbnVwQ2F0ZWdvcmllcyhjb250ZW50OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gY29udGVudC5yZXBsYWNlQWxsKFxuICAgICAgICAvKFxcW1xcW3x9fSk6P2NhdGVnb3J5OiguKj8pKF1dfH19KS9naSxcbiAgICAgICAgYFtbJHttdy5jb25maWcuZ2V0KCd3Z0Nhbm9uaWNhbE5hbWVzcGFjZScpID09PSAnRHJhZnQnID8gJzonIDogJyd9Q2F0ZWdvcnk6JDJdXWAsXG4gICAgKTtcbn1cblxuaW50ZXJmYWNlIExpbmtJbmZvcm1hdGlvbiB7XG4gICAgc3RhcnQ6IG51bWJlcjtcbiAgICBlbmQ6IG51bWJlcjtcbiAgICBpc05lc3RlZDogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBDbGVhbnMgdXAgbGlua3MgaW4gYW4gYXJ0aWNsZSdzIGNvbnRlbnQuXG4gKiBAcGFyYW0gY29udGVudCBUaGUgYXJ0aWNsZSBjb250ZW50IHRvIGNsZWFuIHVwLlxuICogQHBhcmFtIGZ1bmN0aW9uc0NhbGxlZFdoaWxlRXNjYXBlZCBUaGUgZnVuY3Rpb25zIGNhbGxlZCB3aGlsZSB0aGUgbGlua3MgYXJlIGVzY2FwZWQuXG4gKi9cbmZ1bmN0aW9uIGNsZWFudXBMaW5rcyhjb250ZW50OiBzdHJpbmcsIGZ1bmN0aW9uc0NhbGxlZFdoaWxlRXNjYXBlZDogKChjb250ZW50OiBzdHJpbmcsIHJ1bjogMSB8IDIpID0+IHN0cmluZylbXSkge1xuICAgIGNvbnN0IGNsb3NlZExpbmtzOiBMaW5rSW5mb3JtYXRpb25bXSA9IFtdO1xuICAgIGNvbnN0IGxpbmtzOiBMaW5rSW5mb3JtYXRpb25bXSA9IFtdO1xuXG4gICAgbGV0IGlzSW5zaWRlTm93aWtpID0gZmFsc2U7XG4gICAgbGV0IGlzSW5zaWRlQ29tbWVudCA9IGZhbHNlO1xuXG4gICAgbGV0IGN1cnJlbnRMb2NhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhlIGNvbnRlbnQgZm9sbG93aW5nIHRoZSBjdXJyZW50IGxvY2F0aW9uIG1hdGNoZXMgdGhlIGRlc2lyZWQgc3RyaW5nLlxuICAgICAqIEBwYXJhbSBkZXNpcmVkU3RyaW5nIFRoZSBzdHJpbmcgdG8gc2VhcmNoIGZvci5cbiAgICAgKiBAcGFyYW0gc2hvdWxkSW5jcmVtZW50IFdoZXRoZXIgdG8gaW5jcmVtZW50IHRoZSBjdXJyZW50IGxvY2F0aW9uIGlmIHRoZSBzdHJpbmcgaXMgZm91bmQuXG4gICAgICovXG4gICAgZnVuY3Rpb24gaXNBdFN0cmluZyhkZXNpcmVkU3RyaW5nOiBzdHJpbmcsIHNob3VsZEluY3JlbWVudCA9IHRydWUpIHtcbiAgICAgICAgY29uc3QgaXNBdFN0cmluZyA9IGNvbnRlbnQuc2xpY2UoY3VycmVudExvY2F0aW9uLCBjdXJyZW50TG9jYXRpb24gKyBkZXNpcmVkU3RyaW5nLmxlbmd0aCkgPT09IGRlc2lyZWRTdHJpbmc7XG5cbiAgICAgICAgaWYgKGlzQXRTdHJpbmcgJiYgc2hvdWxkSW5jcmVtZW50KSBjdXJyZW50TG9jYXRpb24gKz0gZGVzaXJlZFN0cmluZy5sZW5ndGg7XG5cbiAgICAgICAgcmV0dXJuIGlzQXRTdHJpbmc7XG4gICAgfVxuXG4gICAgd2hpbGUgKGN1cnJlbnRMb2NhdGlvbiA8IGNvbnRlbnQubGVuZ3RoKVxuICAgICAgICBpZiAoaXNBdFN0cmluZygnPG5vd2lraT4nKSkgaXNJbnNpZGVOb3dpa2kgPSB0cnVlO1xuICAgICAgICBlbHNlIGlmIChpc0F0U3RyaW5nKCc8L25vd2lraT4nKSkgaXNJbnNpZGVOb3dpa2kgPSBmYWxzZTtcbiAgICAgICAgZWxzZSBpZiAoaXNBdFN0cmluZygnPCEtLScpKSBpc0luc2lkZUNvbW1lbnQgPSB0cnVlO1xuICAgICAgICBlbHNlIGlmIChpc0F0U3RyaW5nKCctLT4nKSkgaXNJbnNpZGVDb21tZW50ID0gZmFsc2U7XG4gICAgICAgIGVsc2UgaWYgKCFpc0luc2lkZU5vd2lraSAmJiAhaXNJbnNpZGVDb21tZW50KVxuICAgICAgICAgICAgaWYgKGlzQXRTdHJpbmcoJ1tbJykpIGxpbmtzLnB1c2goeyBzdGFydDogY3VycmVudExvY2F0aW9uIC0gMiwgZW5kOiAtMSwgaXNOZXN0ZWQ6IGxpbmtzLmxlbmd0aCA+IDAgfSk7XG4gICAgICAgICAgICBlbHNlIGlmIChpc0F0U3RyaW5nKCddXScpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdExpbmsgPSBsaW5rcy5wb3AoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWxhc3RMaW5rKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIGxhc3RMaW5rLmVuZCA9IGN1cnJlbnRMb2NhdGlvbjtcblxuICAgICAgICAgICAgICAgIGNsb3NlZExpbmtzLnB1c2gobGFzdExpbmspO1xuICAgICAgICAgICAgfSBlbHNlIGN1cnJlbnRMb2NhdGlvbisrO1xuICAgICAgICBlbHNlIGN1cnJlbnRMb2NhdGlvbisrO1xuXG4gICAgY29uc3QgbmV3TGlua0NvbnRlbnQ6IFtMaW5rSW5mb3JtYXRpb24sIHN0cmluZ11bXSA9IFtdO1xuXG4gICAgY29uc3QgbmFtZXNwYWNlTmFtZXMgPSBPYmplY3QudmFsdWVzKG13LmNvbmZpZy5nZXQoJ3dnRm9ybWF0dGVkTmFtZXNwYWNlcycpKTtcblxuICAgIGZvciAoY29uc3QgbGlua0xvY2F0aW9uIG9mIGNsb3NlZExpbmtzKSB7XG4gICAgICAgIGNvbnN0IGlubmVyTGluayA9IGNvbnRlbnQuc2xpY2UobGlua0xvY2F0aW9uLnN0YXJ0ICsgMiwgbGlua0xvY2F0aW9uLmVuZCAtIDIpO1xuXG4gICAgICAgIGNvbnN0IFt1bnBhcnNlZExpbmssIC4uLnBhcmFtZXRlcnNdID0gaW5uZXJMaW5rLnNwbGl0KCd8Jyk7XG5cbiAgICAgICAgLy8gUmVwbGFjZSBsaW5rIG5hbWVzIHNvIHRoZXNlIHdvbid0IGJlIGFmZmVjdGVkIGJ5IGZ1bmN0aW9ucyBjYWxsZWQgd2hpbGUgZXNjYXBlZFxuICAgICAgICBjb250ZW50ID1cbiAgICAgICAgICAgIGNvbnRlbnQuc2xpY2UoMCwgbGlua0xvY2F0aW9uLnN0YXJ0ICsgMikgK1xuICAgICAgICAgICAgJ1xcMCcucmVwZWF0KHVucGFyc2VkTGluay5sZW5ndGgpICtcbiAgICAgICAgICAgIGNvbnRlbnQuc2xpY2UobGlua0xvY2F0aW9uLnN0YXJ0ICsgMiArIHVucGFyc2VkTGluay5sZW5ndGgpO1xuXG4gICAgICAgIGxldCBsaW5rID0gdW5wYXJzZWRMaW5rLnJlcGxhY2VBbGwoJ18nLCAnICcpLnRyaW0oKTtcbiAgICAgICAgbGV0IGFsdFRleHQgPSBwYXJhbWV0ZXJzLmpvaW4oJ3wnKTtcbiAgICAgICAgYWx0VGV4dCA9IGFsdFRleHQgPT09ICcgJyA/ICcgJyA6IGFsdFRleHQudHJpbSgpO1xuXG4gICAgICAgIGNvbnN0IGlzRmlyc3RDaGFyYWN0ZXJDb2xvbiA9IGxpbmsuc3RhcnRzV2l0aCgnOicpO1xuICAgICAgICBpZiAoaXNGaXJzdENoYXJhY3RlckNvbG9uKSBsaW5rID0gbGluay5zbGljZSgxKTtcblxuICAgICAgICBsZXQgc2hvdWxkRmlyc3RDaGFyYWN0ZXJCZUNvbG9uID0gZmFsc2U7XG5cbiAgICAgICAgY29uc3QgbGlua1VwcGVyY2FzZVN0YXJ0ID0gbGluay5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGxpbmsuc2xpY2UoMSk7XG4gICAgICAgIGNvbnN0IGxpbmtMb3dlcmNhc2VTdGFydCA9IGxpbmsuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBsaW5rLnNsaWNlKDEpO1xuXG4gICAgICAgIGxldCBuYW1lc3BhY2UgPSBsaW5rLnNwbGl0KCc6JylbMF07XG4gICAgICAgIG5hbWVzcGFjZSA9IG5hbWVzcGFjZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIG5hbWVzcGFjZS5zbGljZSgxKTtcblxuICAgICAgICBpZiAobGluay5pbmNsdWRlcygnOicpKSB7XG4gICAgICAgICAgICBpZiAobGlua1VwcGVyY2FzZVN0YXJ0LnN0YXJ0c1dpdGgoJ0ltYWdlOicpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkU3RhcnRVcHBlcmNhc2UgPSBsaW5rLnN0YXJ0c1dpdGgoJ0ltYWdlOicpO1xuXG4gICAgICAgICAgICAgICAgbGluayA9IGAke3Nob3VsZFN0YXJ0VXBwZXJjYXNlID8gJ0YnIDogJ2YnfWlsZToke2xpbmsuc2xpY2UoNil9YDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIGlzRmlyc3RDaGFyYWN0ZXJDb2xvbiAmJlxuICAgICAgICAgICAgICAgIChbJ0ltYWdlJywgJ0ZpbGUnLCAnQ2F0ZWdvcnknXS5pbmNsdWRlcyhsaW5rVXBwZXJjYXNlU3RhcnQuc3BsaXQoJzonKVswXSkgfHwgIW5hbWVzcGFjZU5hbWVzLmluY2x1ZGVzKG5hbWVzcGFjZSkpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgc2hvdWxkRmlyc3RDaGFyYWN0ZXJCZUNvbG9uID0gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBiZWZvcmVMaW5rVGV4dCA9ICcnO1xuICAgICAgICBsZXQgYWZ0ZXJMaW5rVGV4dCA9ICcnO1xuXG4gICAgICAgIGNvbnN0IG1hdGNoZWRNYXJrdXAgPSAvXignezIsfSkoLio/KVxcMSQvLmV4ZWMoYWx0VGV4dCk7XG5cbiAgICAgICAgaWYgKG1hdGNoZWRNYXJrdXAgJiYgIW1hdGNoZWRNYXJrdXBbMl0uaW5jbHVkZXMoXCInJ1wiKSkge1xuICAgICAgICAgICAgYmVmb3JlTGlua1RleHQgPSBtYXRjaGVkTWFya3VwWzFdO1xuICAgICAgICAgICAgYWx0VGV4dCA9IG1hdGNoZWRNYXJrdXBbMl0udHJpbSgpO1xuICAgICAgICAgICAgYWZ0ZXJMaW5rVGV4dCA9IG1hdGNoZWRNYXJrdXBbMV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoL1shLC46Oz9dJC8udGVzdChhbHRUZXh0KSAmJiAhWydJbWFnZScsICdGaWxlJywgJ0NhdGVnb3J5J10uaW5jbHVkZXMobGlua1VwcGVyY2FzZVN0YXJ0LnNwbGl0KCc6JylbMF0pKSB7XG4gICAgICAgICAgICBjb25zdCBhZGRlZFB1bmN0dWF0aW9uID0gYWx0VGV4dC5zbGljZSgtMSk7XG5cbiAgICAgICAgICAgIGlmICghbGluay5lbmRzV2l0aChhZGRlZFB1bmN0dWF0aW9uKSkge1xuICAgICAgICAgICAgICAgIGFmdGVyTGlua1RleHQgKz0gYWRkZWRQdW5jdHVhdGlvbjtcbiAgICAgICAgICAgICAgICBhbHRUZXh0ID0gYWx0VGV4dC5zbGljZSgwLCAtMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobGluayA9PT0gYWx0VGV4dCkgYWx0VGV4dCA9ICcnO1xuICAgICAgICBlbHNlIGlmIChuZXcgUmVnRXhwKGBeJHtlc2NhcGVSZWdleENoYXJhY3RlcnMobGluayl9W2Etel0rJGApLnRlc3QoYWx0VGV4dCkpIHtcbiAgICAgICAgICAgIGFmdGVyTGlua1RleHQgPSBhbHRUZXh0LnNsaWNlKGxpbmsubGVuZ3RoKSArIGFmdGVyTGlua1RleHQ7XG4gICAgICAgICAgICBhbHRUZXh0ID0gJyc7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IG5ld0xpbmsgb2YgW2xpbmtVcHBlcmNhc2VTdGFydCwgbGlua0xvd2VyY2FzZVN0YXJ0XSlcbiAgICAgICAgICAgIGlmIChuZXdMaW5rID09PSBhbHRUZXh0KSB7XG4gICAgICAgICAgICAgICAgbGluayA9IG5ld0xpbms7XG4gICAgICAgICAgICAgICAgYWx0VGV4dCA9ICcnO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChuZXcgUmVnRXhwKGBeJHtlc2NhcGVSZWdleENoYXJhY3RlcnMobmV3TGluayl9W2Etel0rJGApLnRlc3QoYWx0VGV4dCkpIHtcbiAgICAgICAgICAgICAgICBsaW5rID0gbmV3TGluaztcbiAgICAgICAgICAgICAgICBhZnRlckxpbmtUZXh0ID0gYWx0VGV4dC5zbGljZShuZXdMaW5rLmxlbmd0aCkgKyBhZnRlckxpbmtUZXh0O1xuICAgICAgICAgICAgICAgIGFsdFRleHQgPSAnJztcbiAgICAgICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICAoYWx0VGV4dCAmJiBsaW5rLmluY2x1ZGVzKCc6JykgJiYgbmFtZXNwYWNlTmFtZXMuaW5jbHVkZXMobmFtZXNwYWNlKSkgfHxcbiAgICAgICAgICAgIGxpbmsuc3RhcnRzV2l0aCgnZmlsZTonKSB8fFxuICAgICAgICAgICAgbGluay5zdGFydHNXaXRoKCdjYXRlZ29yeTonKVxuICAgICAgICApXG4gICAgICAgICAgICBsaW5rID0gbGluay5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIGxpbmsuc2xpY2UoMSk7XG5cbiAgICAgICAgbGluayA9IGAke3Nob3VsZEZpcnN0Q2hhcmFjdGVyQmVDb2xvbiA/ICc6JyA6ICcnfSR7bGlua31gO1xuXG4gICAgICAgIGxpbmsgPSBsaW5rLnBhZFN0YXJ0KHVucGFyc2VkTGluay5sZW5ndGgsICdcXDAnKTtcblxuICAgICAgICBjb25zdCBvdXRwdXQgPSBgJHtiZWZvcmVMaW5rVGV4dH1bWyR7bGlua30ke2FsdFRleHQgPyBgfCR7YWx0VGV4dH1gIDogJyd9XV0ke2FmdGVyTGlua1RleHR9YDtcblxuICAgICAgICBuZXdMaW5rQ29udGVudC5wdXNoKFtsaW5rTG9jYXRpb24sIG91dHB1dF0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgZnVuY3Rpb25Ub0NhbGwgb2YgZnVuY3Rpb25zQ2FsbGVkV2hpbGVFc2NhcGVkKSBjb250ZW50ID0gZnVuY3Rpb25Ub0NhbGwoY29udGVudCwgMSk7XG5cbiAgICBmb3IgKGxldCBsb29wQ291bnRlciA9IDA7IGxvb3BDb3VudGVyIDwgMjsgbG9vcENvdW50ZXIrKylcbiAgICAgICAgZm9yIChjb25zdCBbbGlua0RhdGEsIGxpbmtDb250ZW50XSBvZiBuZXdMaW5rQ29udGVudCkge1xuICAgICAgICAgICAgaWYgKGxvb3BDb3VudGVyID09PSAwICYmIGxpbmtEYXRhLmlzTmVzdGVkKSBjb250aW51ZTtcbiAgICAgICAgICAgIGVsc2UgaWYgKGxvb3BDb3VudGVyID09PSAxICYmICFsaW5rRGF0YS5pc05lc3RlZCkgY29udGludWU7XG5cbiAgICAgICAgICAgIGNvbnRlbnQgPVxuICAgICAgICAgICAgICAgIGNvbnRlbnQuc2xpY2UoMCwgbGlua0RhdGEuc3RhcnQpICsgbGlua0NvbnRlbnQucGFkRW5kKGxpbmtEYXRhLmVuZCAtIGxpbmtEYXRhLnN0YXJ0LCAnXFwwJykgKyBjb250ZW50LnNsaWNlKGxpbmtEYXRhLmVuZCk7XG4gICAgICAgIH1cblxuICAgIGZvciAoY29uc3QgZnVuY3Rpb25Ub0NhbGwgb2YgZnVuY3Rpb25zQ2FsbGVkV2hpbGVFc2NhcGVkKSBjb250ZW50ID0gZnVuY3Rpb25Ub0NhbGwoY29udGVudCwgMik7XG5cbiAgICByZXR1cm4gY29udGVudC5yZXBsYWNlQWxsKCdcXDAnLCAnJyk7XG59XG5cbi8qKlxuICogQ2xlYW5zIHVwIGltcHJvcGVyIGNoYXJhY3RlcnMgaW4gYW4gYXJ0aWNsZSdzIGNvbnRlbnQuXG4gKiBAcGFyYW0gY29udGVudCBUaGUgYXJ0aWNsZSBjb250ZW50IHRvIGNsZWFuIHVwLlxuICogQHBhcmFtIHJ1biBUaGUgcnVuIG51bWJlciBvZiB0aGUgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNsZWFudXBJbXByb3BlckNoYXJhY3RlcnMoY29udGVudDogc3RyaW5nLCBydW46IDEgfCAyKSB7XG4gICAgY29uc3QgRUxJUFNJU19QTEFDRUhPTERFUiA9ICdcXHUwMDdGJztcbiAgICBjb25zdCBOQlNQX1BMQUNFSE9MREVSID0gJ1xcdTAwOUYnO1xuXG4gICAgaWYgKHJ1biA9PT0gMSkge1xuICAgICAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlQWxsKC9bXHUyMDFDXHUyMDFEXHUyMDFFXHUyMDFGXS9nLCAnXCInKTtcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZUFsbCgvW1x1MjAxOFx1MjAxOVx1MjAxQVx1MjAxQl0vZywgXCInXCIpO1xuICAgICAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlQWxsKCdcdTIwMjYnLCBFTElQU0lTX1BMQUNFSE9MREVSKTtcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZUFsbCgnXHUwMEEwJywgTkJTUF9QTEFDRUhPTERFUik7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZUFsbChFTElQU0lTX1BMQUNFSE9MREVSLCAnLi4uJyk7XG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2VBbGwoTkJTUF9QTEFDRUhPTERFUiwgJyZuYnNwOycpO1xuICAgIH1cblxuICAgIHJldHVybiBjb250ZW50O1xufVxuXG4vKipcbiAqIENsZWFucyB1cCB5ZWFyIHJhbmdlcyBpbiBhbiBhcnRpY2xlJ3MgY29udGVudC5cbiAqIEBwYXJhbSBjb250ZW50IFRoZSBhcnRpY2xlIGNvbnRlbnQgdG8gY2xlYW4gdXAuXG4gKiBAcGFyYW0gcnVuIFRoZSBydW4gbnVtYmVyIG9mIHRoZSBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gY2xlYW51cFllYXJSYW5nZXMoY29udGVudDogc3RyaW5nLCBydW46IDEgfCAyKSB7XG4gICAgaWYgKHJ1biA9PT0gMSlcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZUFsbCgvKFxcKFxcZHszLDR9KSA/W1x1MjAxMlx1MjAxM1x1MjIxMi1dID8oXFxkezMsNH1cXCkpL2csIChvcmlnaW5hbCwgc3RhcnQsIGVuZCkgPT5cbiAgICAgICAgICAgIGAke3N0YXJ0fVx1MjAxMyR7ZW5kfWAucGFkRW5kKG9yaWdpbmFsLmxlbmd0aCwgJ1xcMCcpLFxuICAgICAgICApO1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8qKlxuICogUmVtb3ZlcyBzdHJheSBtYXJrdXAgaW4gYW4gYXJ0aWNsZSdzIGNvbnRlbnQuXG4gKiBAcGFyYW0gY29udGVudCBUaGUgYXJ0aWNsZSBjb250ZW50IHRvIGNsZWFuIHVwLlxuICovXG5mdW5jdGlvbiBjbGVhbnVwU3RyYXlNYXJrdXAoY29udGVudDogc3RyaW5nKSB7XG4gICAgY29uc3QgU1RSQVlfTUFSS1VQX1JFR0VYRVMgPSBbXG4gICAgICAgIC8nKyhCb2xkfEl0YWxpYykoIHRleHQpPycrICovZyxcbiAgICAgICAgLyg8YmlnPikrQmlnKCB0ZXh0KT8oPFxcL2JpZz4pKyAqL2csXG4gICAgICAgIC8oPHNtYWxsPikrU21hbGwoIHRleHQpPyg8XFwvc21hbGw+KSsgKi9nLFxuICAgICAgICAvKDxzdXA+KStTdXBlcnNjcmlwdCggdGV4dCk/KDxcXC9zdXA+KSsgKi9nLFxuICAgICAgICAvKDxzdWI+KStTdWJzY3JpcHQoIHRleHQpPyg8XFwvc3ViPikrICovZyxcbiAgICAgICAgLyg8cz4pK1N0cmlrZXRocm91Z2goPFxcL3M+KSsgKi9nLFxuICAgICAgICAvKDx1PikrVW5kZXJsaW5lKDxcXC91PikrICovZyxcbiAgICAgICAgLyg8Y29kZT4pK0NvbXB1dGVyIGNvZGUoPFxcL2NvZGU+KSsgKi9nLFxuICAgICAgICAvKDxub3dpa2k+KStJbnNlcnQgbm9uLWZvcm1hdHRlZCB0ZXh0IGhlcmUoPFxcL25vd2lraT4pKyAqL2csXG4gICAgICAgIC89KyBIZWFkaW5nIHRleHQgPSsgKi9nLFxuICAgICAgICAvXFwqIEJ1bGxldGVkIGxpc3QgaXRlbSAqL2csXG4gICAgICAgIC8jIE51bWJlcmVkIGxpc3QgaXRlbSAqL2csXG4gICAgICAgIC88Z2FsbGVyeT5cXG5FeGFtcGxlLmpwZ1xcfENhcHRpb24xXFxuRXhhbXBsZS5qcGdcXHxDYXB0aW9uMlxcbjxcXC9nYWxsZXJ5PiAqL2csXG4gICAgICAgIC8jUkVESVJFQ1QgXFxbXFxbVGFyZ2V0IHBhZ2UgbmFtZV1dICovZyxcbiAgICAgICAgLzwhLS0gSW52aXNpYmxlIGNvbW1lbnQgLS0+ICovZyxcbiAgICAgICAgLzxcXHMqKGJpZ3xzbWFsbHxzdXB8c3VifHN8dXxjb2RlfG5vd2lraXxub2luY2x1ZGV8b25seWluY2x1ZGV8aW5jbHVkZW9ubHl8Y2VudGVyfGJsb2NrcXVvdGV8Z2FsbGVyeSlcXHMqKFxccytbXjw+XSopPz5cXHMqPFxccypcXC9cXHMqXFwxXFxzKj4vZ2ksXG4gICAgXTtcblxuICAgIGZvciAoY29uc3QgcmVnZXggb2YgU1RSQVlfTUFSS1VQX1JFR0VYRVMpIHdoaWxlIChyZWdleC50ZXN0KGNvbnRlbnQpKSBjb250ZW50ID0gY29udGVudC5yZXBsYWNlKHJlZ2V4LCAnJyk7XG5cbiAgICByZXR1cm4gY29udGVudDtcbn1cblxuLyoqXG4gKiBDbGVhbnMgdXAgc3BhY2luZyBpbiBhbiBhcnRpY2xlJ3MgY29udGVudC5cbiAqIEBwYXJhbSBjb250ZW50IFRoZSBhcnRpY2xlIGNvbnRlbnQgdG8gY2xlYW4gdXAuXG4gKiBAcGFyYW0gc2Vjb25kUnVuIFdoZXRoZXIgdGhlIGZ1bmN0aW9uIGlzIGJlaW5nIHJ1biBmb3IgdGhlIHNlY29uZCB0aW1lLCBhZnRlciBvdGhlciBwcm9jZXNzaW5nLlxuICovXG5mdW5jdGlvbiBjbGVhbnVwU3BhY2luZyhjb250ZW50OiBzdHJpbmcsIHNlY29uZFJ1biA9IGZhbHNlKSB7XG4gICAgY29uc3QgUExBQ0VIT0xERVIgPSAnXFx1e0YwMDAwfSc7XG5cbiAgICBjb25zdCBUQUdTX1RPX0lHTk9SRSA9IFsncG9lbScsICdwcmUnLCAncmVmZXJlbmNlcycsICd0ZW1wbGF0ZWRhdGEnXTtcblxuICAgIGNvbnN0IGlnbm9yZWRUYWdzQ29udGVudDogc3RyaW5nW10gPSBbXTtcblxuICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2VBbGwoXG4gICAgICAgIG5ldyBSZWdFeHAoYCg8KCR7VEFHU19UT19JR05PUkUuam9pbignfCcpfSkoPzogW148Pl0qPyk/PikoLio/KSg8L1xcXFwyPilgLCAnZ3MnKSxcbiAgICAgICAgKGZ1bGxNYXRjaCwgc3RhcnRUYWc6IHN0cmluZywgdGFnTmFtZTogc3RyaW5nLCBpbm5lckNvbnRlbnQ6IHN0cmluZywgZW5kVGFnOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgIGlubmVyQ29udGVudCA9IGlubmVyQ29udGVudC5yZXBsYWNlQWxsKC8gKyQvZ20sICcnKS50cmltKCk7XG5cbiAgICAgICAgICAgIGlnbm9yZWRUYWdzQ29udGVudC5wdXNoKGAke3N0YXJ0VGFnfVxcbiR7aW5uZXJDb250ZW50fVxcbiR7ZW5kVGFnfWApO1xuXG4gICAgICAgICAgICByZXR1cm4gUExBQ0VIT0xERVI7XG4gICAgICAgIH0sXG4gICAgKTtcblxuICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2VBbGwoLyhcXGJ8XFxwe1B1bmN0dWF0aW9ufXxcXF1cXF18XFx9XFx9fFxcdz4pIHsyLH0oXFxifFxccHtQdW5jdHVhdGlvbn18XFxbXFxbfFxce1xce3w8XFx3KS9ndSwgJyQxICQyJyk7IC8vIFJlbW92ZSBleHRyYSBzcGFjZXMgYmV0d2VlbiB3b3JkcyBhbmQgc2VudGVuY2VzXG4gICAgaWYgKCFzZWNvbmRSdW4pIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2VBbGwoL14gK3wgKyQvZ20sICcnKTsgLy8gUmVtb3ZlIGV4dHJhIHNwYWNlcyBhdCB0aGUgc3RhcnQgb3IgZW5kIG9mIGxpbmVzXG4gICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZUFsbCgvXFxuezMsfS9nLCAnXFxuXFxuJyk7IC8vIFJlbW92ZSBleHRyYSBuZXdsaW5lc1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoL1xccyooe3tbXn1dKnN0dWJ9fSkvaSwgJ1xcblxcbiQxJyk7IC8vIEVuc3VyZSB0aGVyZSBpcyBvbmUgYmxhbmsgbGluZSBiZWZvcmUgdGhlIGZpcnN0IHN0dWIgdGVtcGxhdGVcbiAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlQWxsKC9cXHMrJC9nLCAnJyk7IC8vIFJlbW92ZSB0cmFpbGluZyBzcGFjZXNcbiAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlQWxsKC9eKFsjKl0rKSAqL2dtLCAnJDEgJyk7IC8vIEVuc3VyZSB0aGVyZSBpcyBhIHNwYWNlIGFmdGVyIGEgYnVsbGV0IG9yIGhhc2ggaW4gYSBsaXN0IGl0ZW1cbiAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlQWxsKC9eKFsjKl0rIC4qKVxcbisoPz1bIypdKyApL2dtLCAnJDFcXG4nKTsgLy8gUmVtb3ZlIG5ld2xpbmVzIGJldHdlZW4gbGlzdCBpdGVtc1xuICAgIGlmICghc2Vjb25kUnVuKSBjb250ZW50ID0gY29udGVudC5yZXBsYWNlQWxsKC8oPzwhXFx8KVxccysoPz08cmVmKD8hZXJlbmNlcykpL2csICcnKTsgLy8gUmVtb3ZlIHNwYWNlcyBiZWZvcmUgcmVmZXJlbmNlc1xuICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2VBbGwoLzxcXC8oW0EtWmEtel0rKSArPi9nLCAnPC8kMT4nKTsgLy8gUmVtb3ZlIGV4Y2VzcyBzcGFjZSBpbiBjbG9zaW5nIHRhZ3NcbiAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlQWxsKC9eKD0rLio/PSspJFxcbnsyLH0oPz1ePSsuKj89KyQpL2dtLCAnJDFcXG4nKTsgLy8gUmVtb3ZlIGV4dHJhIG5ld2xpbmVzIGJldHdlZW4gZW1wdHkgc2VjdGlvbiBhbmQgZm9sbG93aW5nIHNlY3Rpb25cbiAgICBjb250ZW50ID0gY29udGVudC50cmltKCk7IC8vIFJlbW92ZSB3aGl0ZXNwYWNlIGF0IHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIGNvbnRlbnRcblxuICAgIC8vIEFkZCBiYWNrIGlnbm9yZWQgdGFnc1xuICAgIGZvciAoY29uc3QgdGFnQ29udGVudCBvZiBpZ25vcmVkVGFnc0NvbnRlbnQpIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoUExBQ0VIT0xERVIsIHRhZ0NvbnRlbnQpO1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8qKlxuICogQ2xlYW5zIHVwIHJlZmVyZW5jZXMgaW4gYW4gYXJ0aWNsZSdzIGNvbnRlbnQuXG4gKiBAcGFyYW0gY29udGVudCBUaGUgYXJ0aWNsZSBjb250ZW50IHRvIGNsZWFuIHVwLlxuICovXG5mdW5jdGlvbiBjbGVhbnVwUmVmZXJlbmNlcyhjb250ZW50OiBzdHJpbmcpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlQWxsKFxuICAgICAgICAvKCg/OjxyZWYoPyFlcmVuY2VzKVteL10qPz4uKj88XFwvcmVmPnw8cmVmKD8hZXJlbmNlcykuKj9cXC8+KSspKFshLC47P10pPy9nLFxuICAgICAgICAoZnVsbE1hdGNoLCByZWZlcmVuY2VUYWc6IHN0cmluZywgcHVuY3R1YXRpb246IHN0cmluZyB8IHVuZGVmaW5lZCkgPT4gKHB1bmN0dWF0aW9uID8/ICcnKSArIHJlZmVyZW5jZVRhZyxcbiAgICApOyAvLyBGaXggcHVuY3R1YXRpb24gZm9sbG93aW5nIHJlZmVyZW5jZXNcblxuICAgIGNvbnN0IHJlZmVyZW5jZXM6IHsgc3RhcnQ6IG51bWJlcjsgZW5kOiBudW1iZXI7IGlzU2VsZkNsb3Npbmc/OiB0cnVlIH1bXSA9IFtdO1xuXG4gICAgbGV0IGlzSW5zaWRlTm93aWtpID0gZmFsc2U7XG4gICAgbGV0IGlzSW5zaWRlQ29tbWVudCA9IGZhbHNlO1xuXG4gICAgbGV0IGN1cnJlbnRMb2NhdGlvbiA9IDA7XG5cbiAgICAvKipcbiAgICAgKiBDaGVja3MgaWYgdGhlIGNvbnRlbnQgZm9sbG93aW5nIHRoZSBjdXJyZW50IGxvY2F0aW9uIG1hdGNoZXMgdGhlIGRlc2lyZWQgc3RyaW5nLlxuICAgICAqIEBwYXJhbSBkZXNpcmVkU3RyaW5nIFRoZSBzdHJpbmcgdG8gc2VhcmNoIGZvci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBpc0F0U3RyaW5nKGRlc2lyZWRTdHJpbmc6IHN0cmluZykge1xuICAgICAgICBjb25zdCBpc0F0U3RyaW5nID0gY29udGVudC5zbGljZShjdXJyZW50TG9jYXRpb24sIGN1cnJlbnRMb2NhdGlvbiArIGRlc2lyZWRTdHJpbmcubGVuZ3RoKSA9PT0gZGVzaXJlZFN0cmluZztcblxuICAgICAgICBpZiAoaXNBdFN0cmluZykgY3VycmVudExvY2F0aW9uICs9IGRlc2lyZWRTdHJpbmcubGVuZ3RoO1xuXG4gICAgICAgIHJldHVybiBpc0F0U3RyaW5nO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2NlZWRzIHRocm91Z2ggdGhlIGNvbnRlbnQgdW50aWwgdGhlIGRlc2lyZWQgc3RyaW5nIGlzIGZvdW5kLlxuICAgICAqIEBwYXJhbSBkZXNpcmVkU3RyaW5nIFRoZSBzdHJpbmcgdG8gc2VhcmNoIGZvci5cbiAgICAgKi9cbiAgICBmdW5jdGlvbiBwcm9jZWVkVW50aWxTdHJpbmcoZGVzaXJlZFN0cmluZzogc3RyaW5nKSB7XG4gICAgICAgIHdoaWxlIChjdXJyZW50TG9jYXRpb24gPCBjb250ZW50Lmxlbmd0aCAmJiAhaXNBdFN0cmluZyhkZXNpcmVkU3RyaW5nKSkgY3VycmVudExvY2F0aW9uKys7XG4gICAgfVxuXG4gICAgd2hpbGUgKGN1cnJlbnRMb2NhdGlvbiA8IGNvbnRlbnQubGVuZ3RoKVxuICAgICAgICBpZiAoaXNBdFN0cmluZygnPG5vd2lraT4nKSkgaXNJbnNpZGVOb3dpa2kgPSB0cnVlO1xuICAgICAgICBlbHNlIGlmIChpc0F0U3RyaW5nKCc8L25vd2lraT4nKSkgaXNJbnNpZGVOb3dpa2kgPSBmYWxzZTtcbiAgICAgICAgZWxzZSBpZiAoaXNBdFN0cmluZygnPCEtLScpKSBpc0luc2lkZUNvbW1lbnQgPSB0cnVlO1xuICAgICAgICBlbHNlIGlmIChpc0F0U3RyaW5nKCctLT4nKSkgaXNJbnNpZGVDb21tZW50ID0gZmFsc2U7XG4gICAgICAgIGVsc2UgaWYgKCFpc0luc2lkZU5vd2lraSAmJiAhaXNJbnNpZGVDb21tZW50KVxuICAgICAgICAgICAgaWYgKCFpc0F0U3RyaW5nKCc8cmVmZXJlbmNlcycpICYmIGlzQXRTdHJpbmcoJzxyZWYnKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gY3VycmVudExvY2F0aW9uIC0gNDtcblxuICAgICAgICAgICAgICAgIHByb2NlZWRVbnRpbFN0cmluZygnPicpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgaXNTZWxmQ2xvc2luZyA9IGNvbnRlbnRcbiAgICAgICAgICAgICAgICAgICAgLnNsaWNlKHN0YXJ0LCBjdXJyZW50TG9jYXRpb24gLSAxKVxuICAgICAgICAgICAgICAgICAgICAudHJpbSgpXG4gICAgICAgICAgICAgICAgICAgIC5lbmRzV2l0aCgnLycpO1xuXG4gICAgICAgICAgICAgICAgcmVmZXJlbmNlcy5wdXNoKGlzU2VsZkNsb3NpbmcgPyB7IHN0YXJ0LCBlbmQ6IGN1cnJlbnRMb2NhdGlvbiwgaXNTZWxmQ2xvc2luZyB9IDogeyBzdGFydCwgZW5kOiAtMSB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNBdFN0cmluZygnPC9yZWY+JykpIHJlZmVyZW5jZXMuYXQoLTEpIS5lbmQgPSBjdXJyZW50TG9jYXRpb247XG4gICAgICAgICAgICBlbHNlIGN1cnJlbnRMb2NhdGlvbisrO1xuICAgICAgICBlbHNlIGN1cnJlbnRMb2NhdGlvbisrO1xuXG4gICAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpO1xuXG4gICAgY29uc3QgcmVwbGFjZW1lbnRzOiBbc3RyaW5nLCBzdHJpbmddW10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgcmVmZXJlbmNlIG9mIHJlZmVyZW5jZXMpIHtcbiAgICAgICAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gY29udGVudC5zbGljZShyZWZlcmVuY2Uuc3RhcnQsIHJlZmVyZW5jZS5lbmQpO1xuXG4gICAgICAgIGNvbnN0IHN0YXJ0VGFnID0gLzxyZWYoPyFlcmVuY2VzKS4qPz4vaXMuZXhlYyhvcmlnaW5hbFRleHQpIVswXTtcblxuICAgICAgICBjb25zdCBwYXJzZWRUYWcgPSBwYXJzZXIucGFyc2VGcm9tU3RyaW5nKFxuICAgICAgICAgICAgcmVmZXJlbmNlLmlzU2VsZkNsb3NpbmcgPyBzdGFydFRhZy5yZXBsYWNlKC8gKlxcLyAqPi8sICcgLz4nKSA6IHN0YXJ0VGFnICsgJzwvcmVmPicsXG4gICAgICAgICAgICAndGV4dC9odG1sJyxcbiAgICAgICAgKS5ib2R5LmZpcnN0Q2hpbGQgYXMgSFRNTFVua25vd25FbGVtZW50O1xuXG4gICAgICAgIGxldCBvdXRwdXQgPSBwYXJzZWRUYWcub3V0ZXJIVE1MLnJlcGxhY2VBbGwoJyZhbXA7JywgJyYnKTtcblxuICAgICAgICBjb25zdCB0YWdDb250ZW50ID0gb3JpZ2luYWxUZXh0XG4gICAgICAgICAgICAuc2xpY2Uoc3RhcnRUYWcubGVuZ3RoLCAtNilcbiAgICAgICAgICAgIC50cmltKClcbiAgICAgICAgICAgIC5yZXBsYWNlQWxsKC9eXFxbICooW14gXFxdXSopICpdJC9nbSwgJyQxJylcbiAgICAgICAgICAgIC50cmltKCk7XG5cbiAgICAgICAgb3V0cHV0ID1cbiAgICAgICAgICAgIHJlZmVyZW5jZS5pc1NlbGZDbG9zaW5nIHx8IHRhZ0NvbnRlbnQubGVuZ3RoID09PSAwXG4gICAgICAgICAgICAgICAgPyBvdXRwdXQucmVwbGFjZSgvPlxccyo8XFwvcmVmPi8sICcgLz4nKVxuICAgICAgICAgICAgICAgIDogYCR7b3V0cHV0LnNsaWNlKDAsIC02KX0ke3RhZ0NvbnRlbnR9PC9yZWY+YDtcblxuICAgICAgICBpZiAob3JpZ2luYWxUZXh0ICE9PSBvdXRwdXQpIHJlcGxhY2VtZW50cy5wdXNoKFtvcmlnaW5hbFRleHQsIG91dHB1dF0pO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgW29yaWdpbmFsVGV4dCwgb3V0cHV0XSBvZiByZXBsYWNlbWVudHMpIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2Uob3JpZ2luYWxUZXh0LCBvdXRwdXQpO1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbmludGVyZmFjZSBUZW1wbGF0ZVJlZGlyZWN0IHtcbiAgICBmcm9tOiBzdHJpbmdbXTtcbiAgICB0bzogc3RyaW5nO1xufVxuXG5sZXQgdGVtcGxhdGVBbGlhc2VzOiBUZW1wbGF0ZVJlZGlyZWN0W10gfCB1bmRlZmluZWQ7XG5cbi8qKlxuICogRm9ybWF0cyB0ZW1wbGF0ZSBzcGFjaW5nIGluIGFuIGFydGljbGUncyBjb250ZW50LlxuICogQHBhcmFtIGNvbnRlbnQgVGhlIGFydGljbGUgY29udGVudCB0byBmb3JtYXQuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZvcm1hdFRlbXBsYXRlcyhjb250ZW50OiBzdHJpbmcpIHtcbiAgICBlbnVtIEZvcm1hdFN0eWxlIHtcbiAgICAgICAgRXhwYW5kZWQsXG4gICAgICAgIEV4cGFuZGVkQWxpZ25lZCxcbiAgICAgICAgTWluaW1pemVkLFxuICAgICAgICBNaW5pbWl6ZWRTcGFjZWQsXG4gICAgfVxuXG4gICAgZW51bSBOYW1lc3BhY2Uge1xuICAgICAgICBVc2VyID0gMixcbiAgICAgICAgVGVtcGxhdGUgPSAxMCxcbiAgICAgICAgRHJhZnQgPSAxMTgsXG4gICAgfVxuXG4gICAgdGVtcGxhdGVBbGlhc2VzID8/PSBKU09OLnBhcnNlKChhd2FpdCBnZXRQYWdlQ29udGVudCgnVXNlcjpFZWppdDQzL3NjcmlwdHMvYXJ0aWNsZS1jbGVhbmVyLmpzb24nKSkgPz8gJ1tdJykgYXMgVGVtcGxhdGVSZWRpcmVjdFtdO1xuXG4gICAgY29uc3QgbWFwcGVkVGVtcGxhdGVBbGlhc2VzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICB0ZW1wbGF0ZUFsaWFzZXMuZmxhdE1hcCgoYWxpYXMpID0+IGFsaWFzLmZyb20ubWFwKChmcm9tKSA9PiBbZnJvbS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIGZyb20uc2xpY2UoMSksIGFsaWFzLnRvXSkpLFxuICAgICk7XG5cbiAgICBjbGFzcyBUZW1wbGF0ZSB7XG4gICAgICAgIHB1YmxpYyBsb2NhdGlvbjogeyBzdGFydDogbnVtYmVyOyBlbmQ/OiBudW1iZXIgfTtcbiAgICAgICAgcHVibGljIGlzTmVzdGVkID0gZmFsc2U7XG5cbiAgICAgICAgcHVibGljIGZ1bGxUZXh0Pzogc3RyaW5nO1xuICAgICAgICBwcml2YXRlIGZ1bGxUZXh0RXNjYXBlZD86IHN0cmluZztcbiAgICAgICAgcHJpdmF0ZSByYXdOYW1lPzogc3RyaW5nO1xuICAgICAgICBwcml2YXRlIG5hbWU/OiBzdHJpbmc7XG4gICAgICAgIHByaXZhdGUgcGFyYW1ldGVyczogeyBrZXk6IHN0cmluZyB8IG51bGw7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG4gICAgICAgIHB1YmxpYyBzdWJUZW1wbGF0ZXM6IFRlbXBsYXRlW10gPSBbXTtcblxuICAgICAgICBwcml2YXRlIFBMQUNFSE9MREVSX1NUUklOR1MgPSBbJ1xcdXtGMDAwMH0nLCAnXFx1ezEwRkZGRn0nLCAnXFx1e0ZGRkZFfSddO1xuXG4gICAgICAgIHByaXZhdGUgUElQRV9FU0NBUEVfUkVHRVhFUyA9IFsvKFxcW1xcW1teXFxdXSo/KVxcfCguKj9dXSkvZywgLyg8IS0tLio/KVxcfCguKj8tLT4pL2csIC8oPG5vd2lraT4uKj8pXFx8KC4qPzxcXC9ub3dpa2k+KS9nXTtcblxuICAgICAgICBwcml2YXRlIFRBR19FUVVBTFNfRVNDQVBFX1JFR0VYRVMgPSBbLzwoXFx3KykoIFtePD5dKz8pKD88IVxcLyk+Lio/PFxcL1xcMT4vZywgLzwoXFx3KykoIFtePD5dKz8pXFwvPi9nXTtcblxuICAgICAgICBwcml2YXRlIFRFTVBMQVRFX0FMSUFTRVMgPSBtYXBwZWRUZW1wbGF0ZUFsaWFzZXM7XG5cbiAgICAgICAgcHJpdmF0ZSBERUZBVUxUX1RFTVBMQVRFX1NUWUxFUyA9IHtcbiAgICAgICAgICAgIFtGb3JtYXRTdHlsZS5FeHBhbmRlZEFsaWduZWRdOiBbXG4gICAgICAgICAgICAgICAgJ2FsYnVtIHJhdGluZycsXG4gICAgICAgICAgICAgICAgJ2FsYnVtIHJldmlld3MnLFxuICAgICAgICAgICAgICAgICdhbWVyaWNhbiBmb290YmFsbCB1bmlmb3JtJyxcbiAgICAgICAgICAgICAgICAnYXVzdHJhbGlhbiBydWxlcyBmb290YmFsbCBraXQnLFxuICAgICAgICAgICAgICAgICdhdXRvbWF0aWMgdGF4b2JveCcsXG4gICAgICAgICAgICAgICAgJ2Jhc2ViYWxsIHVuaWZvcm0nLFxuICAgICAgICAgICAgICAgICdiYXNrZXRiYWxsIGtpdCcsXG4gICAgICAgICAgICAgICAgJ2JlYWNoaGFuZGJhbGwga2l0JyxcbiAgICAgICAgICAgICAgICAnYmxvY2txdW90ZScsXG4gICAgICAgICAgICAgICAgJ2NoZW1ib3gnLFxuICAgICAgICAgICAgICAgICdjcmlja2V0IHVuaWZvcm0nLFxuICAgICAgICAgICAgICAgICdlbGVjdGlvbiBib3gnLFxuICAgICAgICAgICAgICAgICdlbWJsZW0gdGFibGUnLFxuICAgICAgICAgICAgICAgICdlcGlzb2RlIGxpc3QnLFxuICAgICAgICAgICAgICAgICdleHRlcm5hbCBtdXNpYyB2aWRlbycsXG4gICAgICAgICAgICAgICAgJ2V4dHJhIGFsYnVtIGNvdmVyJyxcbiAgICAgICAgICAgICAgICAnZmllbGQgaG9ja2V5IGtpdCcsXG4gICAgICAgICAgICAgICAgJ2Zvb3RiYWxsIGJveCcsXG4gICAgICAgICAgICAgICAgJ2Zvb3RiYWxsIGtpdCcsXG4gICAgICAgICAgICAgICAgJ2Zvb3RiYWxsYm94JyxcbiAgICAgICAgICAgICAgICAnZ2FsbGVyeScsXG4gICAgICAgICAgICAgICAgJ2hhbmRiYWxsIGtpdCcsXG4gICAgICAgICAgICAgICAgJ2h5YnJpZGJveCcsXG4gICAgICAgICAgICAgICAgJ2ljZWhvY2tleSBraXQnLFxuICAgICAgICAgICAgICAgICdpY2hub2JveCcsXG4gICAgICAgICAgICAgICAgJ2luZm9ib3gnLFxuICAgICAgICAgICAgICAgICdpbmZyYXNwZWNpZXNib3gnLFxuICAgICAgICAgICAgICAgICdqdWRvIGJyYWNrZXQnLFxuICAgICAgICAgICAgICAgICdqdWRvIHJlcGVjaGFnZScsXG4gICAgICAgICAgICAgICAgJ2xpc3RlbicsXG4gICAgICAgICAgICAgICAgJ2xvY2F0aW9uIG1hcCcsXG4gICAgICAgICAgICAgICAgJ21lZGljYWwgcmVzb3VyY2VzJyxcbiAgICAgICAgICAgICAgICAnbW90b3JzcG9ydCBzZWFzb24nLFxuICAgICAgICAgICAgICAgICdtdWx0aXBsZSBpbWFnZScsXG4gICAgICAgICAgICAgICAgJ211c2ljIHJhdGluZ3MnLFxuICAgICAgICAgICAgICAgICdteWNvbW9ycGhib3gnLFxuICAgICAgICAgICAgICAgICduYXZib3gnLFxuICAgICAgICAgICAgICAgICdvb2JveCcsXG4gICAgICAgICAgICAgICAgJ29yYml0Ym94JyxcbiAgICAgICAgICAgICAgICAnb3NtIGxvY2F0aW9uIG1hcCcsXG4gICAgICAgICAgICAgICAgJ3F1b3RlIGJveCcsXG4gICAgICAgICAgICAgICAgJ3JlcGVjaGFnZScsXG4gICAgICAgICAgICAgICAgJ3J1Z2J5Ym94JyxcbiAgICAgICAgICAgICAgICAnc2lkZWJhcicsXG4gICAgICAgICAgICAgICAgJ3NpbmdsZSByYXRpbmdzJyxcbiAgICAgICAgICAgICAgICAnc2luZ2xlcycsXG4gICAgICAgICAgICAgICAgJ3NvbmcgcmF0aW5ncycsXG4gICAgICAgICAgICAgICAgJ3NwZWNpZXNib3gnLFxuICAgICAgICAgICAgICAgICdzdGFyYm94JyxcbiAgICAgICAgICAgICAgICAnc3ViamVjdCBiYXInLFxuICAgICAgICAgICAgICAgICdzdWNjZXNzaW9uIGJveCcsXG4gICAgICAgICAgICAgICAgJ3RheG9ib3gnLFxuICAgICAgICAgICAgICAgICd0ZWFtIGJyYWNrZXQnLFxuICAgICAgICAgICAgICAgICd0cmFjayBsaXN0aW5nJyxcbiAgICAgICAgICAgICAgICAndHdlZXQnLFxuICAgICAgICAgICAgICAgICd2aXJ1c2JveCcsXG4gICAgICAgICAgICAgICAgJ3ZvbGxleWJhbGwga2l0JyxcbiAgICAgICAgICAgICAgICAnd2VhdGhlciBib3gnLFxuXG4gICAgICAgICAgICAgICAgLy8gTnVtYmVyZWQgYnJhY2tldHNcbiAgICAgICAgICAgICAgICAnbnRlYW1icmFja2V0JyxcbiAgICAgICAgICAgICAgICAnMm50ZWFtLW50ZWFtYnJhY2tldCcsXG4gICAgICAgICAgICAgICAgJzJ0ZWFtYnJhY2tldCcsXG4gICAgICAgICAgICAgICAgJzN0ZWFtYnJhY2tldCcsXG4gICAgICAgICAgICAgICAgJzN0ZWFtcnInLFxuICAgICAgICAgICAgICAgICc0dGVhbWJyYWNrZXQnLFxuICAgICAgICAgICAgICAgICc0dGVhbXJyJyxcbiAgICAgICAgICAgICAgICAnNXRlYW1icmFja2V0JyxcbiAgICAgICAgICAgICAgICAnNXRlYW1ycicsXG4gICAgICAgICAgICAgICAgJzZ0ZWFtYnJhY2tldCcsXG4gICAgICAgICAgICAgICAgJzZ0ZWFtcnInLFxuICAgICAgICAgICAgICAgICc3dGVhbWJyYWNrZXQnLFxuICAgICAgICAgICAgICAgICc3dGVhbXJyJyxcbiAgICAgICAgICAgICAgICAnOHRlYW1icmFja2V0JyxcbiAgICAgICAgICAgICAgICAnOHRlYW1yb3VuZHJvYmluJyxcbiAgICAgICAgICAgICAgICAnOHRlYW1ycicsXG4gICAgICAgICAgICAgICAgJzl0ZWFtYnJhY2tldCcsXG4gICAgICAgICAgICAgICAgJzEwdGVhbWJyYWNrZXQnLFxuICAgICAgICAgICAgICAgICcxMXRlYW1icmFja2V0JyxcbiAgICAgICAgICAgICAgICAnMTJ0ZWFtYnJhY2tldCcsXG4gICAgICAgICAgICAgICAgJzEzdGVhbWJyYWNrZXQnLFxuICAgICAgICAgICAgICAgICcxNHRlYW1icmFja2V0JyxcbiAgICAgICAgICAgICAgICAnMTV0ZWFtYnJhY2tldCcsXG4gICAgICAgICAgICAgICAgJzE2dGVhbWJyYWNrZXQnLFxuICAgICAgICAgICAgICAgICcxOHRlYW1icmFja2V0JyxcbiAgICAgICAgICAgICAgICAnMjB0ZWFtYnJhY2tldCcsXG4gICAgICAgICAgICAgICAgJzI0dGVhbWJyYWNrZXQnLFxuICAgICAgICAgICAgICAgICcyN3RlYW1icmFja2V0JyxcbiAgICAgICAgICAgICAgICAnMzJ0ZWFtYnJhY2tldCcsXG4gICAgICAgICAgICAgICAgJzQwdGVhbWJyYWNrZXQnLFxuICAgICAgICAgICAgICAgICc0OHRlYW1icmFja2V0JyxcbiAgICAgICAgICAgICAgICAnNjR0ZWFtYnJhY2tldCcsXG4gICAgICAgICAgICAgICAgJzEyOHRlYW1icmFja2V0JyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBbRm9ybWF0U3R5bGUuTWluaW1pemVkXTogWydiaXJ0aCBkYXRlJywgJ2Nvb3JkJywgJ2RlYXRoIGRhdGUnLCAnZW5kIGRhdGUnLCAnbGFuZycsICdzdGFydCBkYXRlJ10sXG4gICAgICAgICAgICBbRm9ybWF0U3R5bGUuTWluaW1pemVkU3BhY2VkXTogWydpbmZvYm94IG1hcGZyYW1lJ10sXG4gICAgICAgIH07XG5cbiAgICAgICAgcHJpdmF0ZSBOQU1FU1BBQ0VfU1BFQ0lGSUNfVEVNUExBVEVTID0ge1xuICAgICAgICAgICAgW05hbWVzcGFjZS5EcmFmdF06IFtcbiAgICAgICAgICAgICAgICAnYWZjIGNvbW1lbnQnLFxuICAgICAgICAgICAgICAgICdhZmMgc3VibWlzc2lvbicsXG4gICAgICAgICAgICAgICAgJ2FmYyBzdWJtaXNzaW9uL2RyYWZ0JyxcbiAgICAgICAgICAgICAgICAnYWZjIHRvcGljJyxcbiAgICAgICAgICAgICAgICAnZHJhZnQgYXJ0aWNsZScsXG4gICAgICAgICAgICAgICAgJ2RyYWZ0IGNhdGVnb3JpZXMnLFxuICAgICAgICAgICAgICAgICdkcmFmdCB0b3BpY3MnLFxuICAgICAgICAgICAgICAgICdkcmFmdCcsXG4gICAgICAgICAgICAgICAgJ2RyYWZ0cyBtb3ZlZCBmcm9tIG1haW5zcGFjZScsXG4gICAgICAgICAgICAgICAgJ3ByZWxvYWRkcmFmdCBzdWJtaXQnLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFtOYW1lc3BhY2UuVXNlcl06IFsnZGFzaGJvYXJkLndpa2llZHUub3JnIHNhbmRib3gnLCAndXNlciBzYW5kYm94JywgJ3VzZXJzcGFjZSBkcmFmdCddLFxuICAgICAgICB9O1xuXG4gICAgICAgIHByaXZhdGUgVEVNUExBVEVTX1RPX0tFRVBfQ09OVEVOVCA9IFsnZHJhZnQgY2F0ZWdvcmllcyddO1xuXG4gICAgICAgIHByaXZhdGUgVEVNUExBVEVTX1RPX1NVQlNUID0gW1xuICAgICAgICAgICAgLy8gTWFnaWMgd29yZHNcbiAgICAgICAgICAgICdhcnRpY2xlcGFnZW5hbWUnLFxuICAgICAgICAgICAgJ2FydGljbGVzcGFjZScsXG4gICAgICAgICAgICAnYmFzZXBhZ2VuYW1lJyxcbiAgICAgICAgICAgICdmdWxscGFnZW5hbWUnLFxuICAgICAgICAgICAgJ25hbWVzcGFjZScsXG4gICAgICAgICAgICAnbmFtZXNwYWNlbnVtYmVyJyxcbiAgICAgICAgICAgICdwYWdlbmFtZScsXG4gICAgICAgICAgICAncm9vdHBhZ2VuYW1lJyxcbiAgICAgICAgICAgICdzdWJqZWN0cGFnZW5hbWUnLFxuICAgICAgICAgICAgJ3N1YmplY3RzcGFjZScsXG4gICAgICAgICAgICAnc3VicGFnZW5hbWUnLFxuICAgICAgICAgICAgJ3RhbGtwYWdlbmFtZScsXG4gICAgICAgICAgICAndGFsa3NwYWNlJyxcblxuICAgICAgICAgICAgLy8gVGVtcGxhdGVzXG4gICAgICAgICAgICAncGFnZW5hbWViYXNlJyxcbiAgICAgICAgXTtcblxuICAgICAgICBwcml2YXRlIElNQUdFX1BBUkFNRVRFUlMgPSBuZXcgU2V0KFsnY292ZXInLCAnaW1hZ2VfZmxhZycsICdpbWFnZV9zZWFsJywgJ2ltYWdlX3NreWxpbmUnLCAnaW1hZ2UnLCAnbG9nbycsICdtYXBfaW1hZ2UnXSk7XG5cbiAgICAgICAgcHJpdmF0ZSBJR05PUkVEX0lNQUdFX1NZTlRBWCA9IG5ldyBTZXQoW1xuICAgICAgICAgICAgLy8gVHlwZVxuICAgICAgICAgICAgJ3RodW1iJyxcbiAgICAgICAgICAgICd0aHVtYm5haWwnLFxuICAgICAgICAgICAgJ2ZyYW1lJyxcbiAgICAgICAgICAgICdmcmFtZWQnLFxuICAgICAgICAgICAgJ2ZyYW1lbGVzcycsXG4gICAgICAgICAgICAvLyBCb3JkZXJcbiAgICAgICAgICAgICdib3JkZXInLFxuICAgICAgICAgICAgJ3JpZ2h0JyxcbiAgICAgICAgICAgICdsZWZ0JyxcbiAgICAgICAgICAgICdjZW50ZXInLFxuICAgICAgICAgICAgJ25vbmUnLFxuICAgICAgICAgICAgLy8gQWxpZ25tZW50XG4gICAgICAgICAgICAnYmFzZWxpbmUnLFxuICAgICAgICAgICAgJ21pZGRsZScsXG4gICAgICAgICAgICAnc3ViJyxcbiAgICAgICAgICAgICdzdXBlcicsXG4gICAgICAgICAgICAndGV4dC10b3AnLFxuICAgICAgICAgICAgJ3RleHQtYm90dG9tJyxcbiAgICAgICAgICAgICd0b3AnLFxuICAgICAgICAgICAgJ2JvdHRvbScsXG4gICAgICAgIF0pO1xuXG4gICAgICAgIGNvbnN0cnVjdG9yKHN0YXJ0TG9jYXRpb246IG51bWJlcikge1xuICAgICAgICAgICAgdGhpcy5sb2NhdGlvbiA9IHsgc3RhcnQ6IHN0YXJ0TG9jYXRpb24gfTtcblxuICAgICAgICAgICAgZm9yIChsZXQgbnVtYmVyID0gMTsgbnVtYmVyIDw9IDEwOyBudW1iZXIrKykgdGhpcy5JTUFHRV9QQVJBTUVURVJTLmFkZChgaW1hZ2Uke251bWJlcn1gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHB1YmxpYyBwYXJzZSgpIHtcbiAgICAgICAgICAgIHRoaXMuZnVsbFRleHQgPSBjb250ZW50LnNsaWNlKHRoaXMubG9jYXRpb24uc3RhcnQsIHRoaXMubG9jYXRpb24uZW5kKTtcbiAgICAgICAgICAgIHRoaXMuZnVsbFRleHRFc2NhcGVkID0gdGhpcy5mdWxsVGV4dDtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBzdWJUZW1wbGF0ZSBvZiB0aGlzLnN1YlRlbXBsYXRlcykge1xuICAgICAgICAgICAgICAgIHN1YlRlbXBsYXRlLnBhcnNlKCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLmZ1bGxUZXh0RXNjYXBlZCA9IHRoaXMuZnVsbFRleHRFc2NhcGVkLnJlcGxhY2Uoc3ViVGVtcGxhdGUuZnVsbFRleHQhLCB0aGlzLlBMQUNFSE9MREVSX1NUUklOR1NbMF0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsZXQgdHJpbW1lZElubmVyVGV4dCA9IHRoaXMuZnVsbFRleHRFc2NhcGVkLnNsaWNlKDIsIC0yKS50cmltKCk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgcGlwZUVzY2FwZVJlZ2V4IG9mIHRoaXMuUElQRV9FU0NBUEVfUkVHRVhFUylcbiAgICAgICAgICAgICAgICB3aGlsZSAocGlwZUVzY2FwZVJlZ2V4LnRlc3QodHJpbW1lZElubmVyVGV4dCkpXG4gICAgICAgICAgICAgICAgICAgIHRyaW1tZWRJbm5lclRleHQgPSB0cmltbWVkSW5uZXJUZXh0LnJlcGxhY2VBbGwocGlwZUVzY2FwZVJlZ2V4LCBgJDEke3RoaXMuUExBQ0VIT0xERVJfU1RSSU5HU1sxXX0kMmApO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlZ2V4IG9mIHRoaXMuVEFHX0VRVUFMU19FU0NBUEVfUkVHRVhFUylcbiAgICAgICAgICAgICAgICB0cmltbWVkSW5uZXJUZXh0ID0gdHJpbW1lZElubmVyVGV4dC5yZXBsYWNlQWxsKHJlZ2V4LCAoZnVsbFRleHQsIHRhZ05hbWU6IHN0cmluZywgYXR0cmlidXRlczogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmdWxsVGV4dC5yZXBsYWNlKGF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMucmVwbGFjZUFsbCgnPScsIHRoaXMuUExBQ0VIT0xERVJfU1RSSU5HU1syXSkpO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBjb25zdCBwYXJhbWV0ZXJzID0gdHJpbW1lZElubmVyVGV4dFxuICAgICAgICAgICAgICAgIC5zcGxpdCgnfCcpXG4gICAgICAgICAgICAgICAgLm1hcCgocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIucmVwbGFjZUFsbCh0aGlzLlBMQUNFSE9MREVSX1NUUklOR1NbMV0sICd8JykudHJpbSgpKTtcblxuICAgICAgICAgICAgdGhpcy5yYXdOYW1lID0gcGFyYW1ldGVycy5zaGlmdCgpITtcbiAgICAgICAgICAgIHRoaXMubmFtZSA9IHRoaXMucmF3TmFtZS5yZXBsYWNlQWxsKCdfJywgJyAnKTtcblxuICAgICAgICAgICAgLy8gU3RyaXAgbmFtZXNwYWNlIHByZWZpeCBmcm9tIG5hbWVcbiAgICAgICAgICAgIGlmICh0aGlzLm5hbWUudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCd0ZW1wbGF0ZTonKSkgdGhpcy5uYW1lID0gdGhpcy5uYW1lLnNsaWNlKDkpO1xuXG4gICAgICAgICAgICBjb25zdCBuYW1lTG93ZXJjYXNlRmlyc3QgPSB0aGlzLm5hbWUuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyB0aGlzLm5hbWUuc2xpY2UoMSk7XG5cbiAgICAgICAgICAgIC8vIFJlc29sdmUgdGVtcGxhdGUgYWxpYXMgaW4gbmFtZVxuICAgICAgICAgICAgaWYgKG5hbWVMb3dlcmNhc2VGaXJzdCBpbiB0aGlzLlRFTVBMQVRFX0FMSUFTRVMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1N0YXJ0TG93ZXIgPSB0aGlzLm5hbWUuc3RhcnRzV2l0aCh0aGlzLm5hbWUuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZmluYWxOYW1lID0gdGhpcy5URU1QTEFURV9BTElBU0VTW25hbWVMb3dlcmNhc2VGaXJzdF07XG5cbiAgICAgICAgICAgICAgICBjb25zdCBtdXN0U3RhcnRCZVVwcGVyY2FzZSA9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsTmFtZS5zdGFydHNXaXRoKGZpbmFsTmFtZS5zbGljZSgwLCAyKS50b1VwcGVyQ2FzZSgpKSAmJiAvXltBLVpdKyQvLmV4ZWMoZmluYWxOYW1lLnNsaWNlKDAsIDIpKTtcblxuICAgICAgICAgICAgICAgIHRoaXMubmFtZSA9IGlzU3RhcnRMb3dlciAmJiAhbXVzdFN0YXJ0QmVVcHBlcmNhc2UgPyBmaW5hbE5hbWUuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBmaW5hbE5hbWUuc2xpY2UoMSkgOiBmaW5hbE5hbWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IHNwbGl0UGFyYW1ldGVycyA9IHBhcmFtZXRlcnMubWFwKChwYXJhbWV0ZXJzKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXF1YWxzTG9jYXRpb24gPSBwYXJhbWV0ZXJzLmluZGV4T2YoJz0nKTtcblxuICAgICAgICAgICAgICAgIGlmIChlcXVhbHNMb2NhdGlvbiA9PT0gLTEpIHJldHVybiB7IGtleTogbnVsbCwgdmFsdWU6IHBhcmFtZXRlcnMucmVwbGFjZUFsbCh0aGlzLlBMQUNFSE9MREVSX1NUUklOR1NbMl0sICc9JykudHJpbSgpIH07XG5cbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhcmFtZXRlcnMuc2xpY2UoZXF1YWxzTG9jYXRpb24gKyAxKS5yZXBsYWNlQWxsKHRoaXMuUExBQ0VIT0xERVJfU1RSSU5HU1syXSwgJz0nKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGtleTogcGFyYW1ldGVycy5zbGljZSgwLCBlcXVhbHNMb2NhdGlvbikudHJpbSgpLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYCR7dmFsdWUuc3RhcnRzV2l0aCgnXFxuJykgPyAnXFxuJyA6ICcnfSR7dmFsdWUudHJpbSgpfWAsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnBhcmFtZXRlcnMgPSBzcGxpdFBhcmFtZXRlcnM7XG4gICAgICAgIH1cblxuICAgICAgICBwcml2YXRlIHNob3VsZEJlUmVtb3ZlZCgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgW25hbWVzcGFjZSwgdGVtcGxhdGVzXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLk5BTUVTUEFDRV9TUEVDSUZJQ19URU1QTEFURVMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgPT09IE51bWJlci5wYXJzZUludChuYW1lc3BhY2UpKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIGlmICh0ZW1wbGF0ZXMuaW5jbHVkZXModGhpcy5uYW1lIS50b0xvd2VyQ2FzZSgpKSkgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHByaXZhdGUgZ2V0U3R5bGUoKSB7XG4gICAgICAgICAgICBsZXQgbW9zdFNwZWNpZmljRGVmYXVsdFN0eWxlUHJlZml4TGVuZ3RoID0gMDtcbiAgICAgICAgICAgIGxldCBtb3N0U3BlY2lmaWNEZWZhdWx0U3R5bGVGb3JtYXRTdHlsZTogRm9ybWF0U3R5bGUgfCB1bmRlZmluZWQ7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgW2Zvcm1hdFN0eWxlLCB0ZW1wbGF0ZVByZWZpeGVzXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLkRFRkFVTFRfVEVNUExBVEVfU1RZTEVTKSlcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHRlbXBsYXRlUHJlZml4IG9mIHRlbXBsYXRlUHJlZml4ZXMpXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmFtZSEudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHRlbXBsYXRlUHJlZml4KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVQcmVmaXgubGVuZ3RoID49IG1vc3RTcGVjaWZpY0RlZmF1bHRTdHlsZVByZWZpeExlbmd0aFxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vc3RTcGVjaWZpY0RlZmF1bHRTdHlsZVByZWZpeExlbmd0aCA9IHRlbXBsYXRlUHJlZml4Lmxlbmd0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vc3RTcGVjaWZpY0RlZmF1bHRTdHlsZUZvcm1hdFN0eWxlID0gTnVtYmVyLnBhcnNlSW50KGZvcm1hdFN0eWxlKSBhcyBGb3JtYXRTdHlsZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbW9zdFNwZWNpZmljRGVmYXVsdFN0eWxlRm9ybWF0U3R5bGU7XG4gICAgICAgIH1cblxuICAgICAgICBwcml2YXRlIGNsZWFudXBQYXJhbWV0ZXJzKCkge1xuICAgICAgICAgICAgdGhpcy5wYXJhbWV0ZXJzID0gdGhpcy5wYXJhbWV0ZXJzLm1hcCgoeyBrZXksIHZhbHVlIH0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICYmIHRoaXMuSU1BR0VfUEFSQU1FVEVSUy5oYXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZUJlZm9yZSA9IHZhbHVlO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBpbWFnZVBhcmFtZXRlcnMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgnW1snKSAmJiB2YWx1ZS5lbmRzV2l0aCgnXV0nKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaW1hZ2VQYXJhbWV0ZXJzID0gdmFsdWUuc2xpY2UoMiwgLTIpLnNwbGl0KCd8Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaW1hZ2VQYXJhbWV0ZXJzWzBdLnRyaW0oKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvXihGaWxlfEltYWdlKTovLCAnJykucmVwbGFjZUFsbCgnXycsICcgJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWRkaXRpb25hbERhdGEgPSB2YWx1ZUJlZm9yZVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNsaWNlKDIsIC0yKVxuICAgICAgICAgICAgICAgICAgICAgICAgLnNwbGl0KCd8JylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zbGljZSgxKVxuICAgICAgICAgICAgICAgICAgICAgICAgLm1hcCgocGFyYW1ldGVyKSA9PiBwYXJhbWV0ZXIudHJpbSgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcigocGFyYW1ldGVyKSA9PiAhdGhpcy5JR05PUkVEX0lNQUdFX1NZTlRBWC5oYXMocGFyYW1ldGVyKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5qb2luKCd8Jyk7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGFkZGl0aW9uYWxEYXRhLmxlbmd0aCA+IDApIHZhbHVlICs9IGAgPCEtLSBQcmV2aW91cyBhZGRpdGlvbmFsIGRhdGE6IFwiJHthZGRpdGlvbmFsRGF0YX1cIiAtLT5gO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB7IGtleSwgdmFsdWUgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcHVibGljIGZvcm1hdCgpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5mdWxsVGV4dCkgdGhpcy5wYXJzZSgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zaG91bGRCZVJlbW92ZWQoKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5URU1QTEFURVNfVE9fS0VFUF9DT05URU5ULmluY2x1ZGVzKHRoaXMubmFtZSEudG9Mb3dlckNhc2UoKSkgPyB0aGlzLnBhcmFtZXRlcnNbMF0udmFsdWUgOiAnJztcblxuICAgICAgICAgICAgY29uc3Qgc2hvdWxkU3Vic3QgPVxuICAgICAgICAgICAgICAgIG13LmNvbmZpZy5nZXQoJ3dnTmFtZXNwYWNlTnVtYmVyJykgIT09IChOYW1lc3BhY2UuVGVtcGxhdGUgYXMgbnVtYmVyKSAmJlxuICAgICAgICAgICAgICAgIHRoaXMuVEVNUExBVEVTX1RPX1NVQlNULnNvbWUoXG4gICAgICAgICAgICAgICAgICAgIChuYW1lKSA9PiBuYW1lID09PSB0aGlzLm5hbWUhLnRvTG93ZXJDYXNlKCkgfHwgdGhpcy5uYW1lIS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoYCR7bmFtZX06YCksXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgY29uc3Qgc3R5bGUgPSB0aGlzLmdldFN0eWxlKCk7XG4gICAgICAgICAgICBpZiAoc3R5bGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIGxldCBuZXdOYW1lID0gdGhpcy5uYW1lITtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5uYW1lIS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgoJ3RlbXBsYXRlOicpKSBuZXdOYW1lID0gdGhpcy5uYW1lIS5zbGljZSg5KTtcblxuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdWJzdCkgbmV3TmFtZSA9IGBzdWJzdDoke25ld05hbWV9YDtcblxuICAgICAgICAgICAgICAgIGlmIChuZXdOYW1lICE9PSB0aGlzLnJhd05hbWUhKSB0aGlzLmZ1bGxUZXh0RXNjYXBlZCA9IHRoaXMuZnVsbFRleHRFc2NhcGVkIS5yZXBsYWNlKHRoaXMucmF3TmFtZSEsIG5ld05hbWUpO1xuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBzdWJUZW1wbGF0ZSBvZiB0aGlzLnN1YlRlbXBsYXRlcylcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5mdWxsVGV4dEVzY2FwZWQgPSB0aGlzLmZ1bGxUZXh0RXNjYXBlZCEucmVwbGFjZSh0aGlzLlBMQUNFSE9MREVSX1NUUklOR1NbMF0sIHN1YlRlbXBsYXRlLmZvcm1hdCgpKTtcblxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmZ1bGxUZXh0RXNjYXBlZCE7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IFtge3ske3Nob3VsZFN1YnN0ID8gJ3N1YnN0OicgOiAnJ30ke3RoaXMubmFtZSF9YF07XG5cbiAgICAgICAgICAgIHRoaXMuY2xlYW51cFBhcmFtZXRlcnMoKTtcblxuICAgICAgICAgICAgaWYgKHN0eWxlID09PSBGb3JtYXRTdHlsZS5FeHBhbmRlZCB8fCBzdHlsZSA9PT0gRm9ybWF0U3R5bGUuRXhwYW5kZWRBbGlnbmVkKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlcXVpcmVkS2V5TGVuZ3RoID0gMDtcblxuICAgICAgICAgICAgICAgIGlmIChzdHlsZSA9PT0gRm9ybWF0U3R5bGUuRXhwYW5kZWRBbGlnbmVkKVxuICAgICAgICAgICAgICAgICAgICByZXF1aXJlZEtleUxlbmd0aCA9IE1hdGgubWF4KC4uLnRoaXMucGFyYW1ldGVycy5tYXAoKHBhcmFtZXRlcikgPT4gcGFyYW1ldGVyLmtleT8ubGVuZ3RoID8/IDApKTtcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2luZGV4LCBwYXJhbWV0ZXJdIG9mIHRoaXMucGFyYW1ldGVycy5lbnRyaWVzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgIXBhcmFtZXRlci5rZXkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFwYXJhbWV0ZXIudmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGFyYW1ldGVycy5zbGljZShpbmRleCArIDEpLmV2ZXJ5KChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci5rZXkgPz8gIXBhcmFtZXRlci52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICAgICAgb3V0cHV0LnB1c2goYHwgJHtwYXJhbWV0ZXIua2V5ID8gYCR7cGFyYW1ldGVyLmtleS5wYWRFbmQocmVxdWlyZWRLZXlMZW5ndGgpfSA9IGAgOiAnJ30ke3BhcmFtZXRlci52YWx1ZX1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFtpbmRleCwgcGFyYW1ldGVyXSBvZiB0aGlzLnBhcmFtZXRlcnMuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgICFwYXJhbWV0ZXIudmFsdWUgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChwYXJhbWV0ZXIua2V5IHx8IHRoaXMucGFyYW1ldGVycy5zbGljZShpbmRleCArIDEpLmV2ZXJ5KChwYXJhbWV0ZXIpID0+IHBhcmFtZXRlci5rZXkgPz8gIXBhcmFtZXRlci52YWx1ZSkpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dC5wdXNoKGB8JHtwYXJhbWV0ZXIua2V5ID8gYCR7cGFyYW1ldGVyLmtleX09YCA6ICcnfSR7cGFyYW1ldGVyLnZhbHVlfWApO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgb3V0cHV0LnB1c2goJ319Jyk7XG5cbiAgICAgICAgICAgIGlmIChvdXRwdXQubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0WzBdICs9ICd9fSc7XG5cbiAgICAgICAgICAgICAgICBvdXRwdXQucG9wKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN0eWxlID09PSBGb3JtYXRTdHlsZS5NaW5pbWl6ZWRTcGFjZWQpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRbb3V0cHV0Lmxlbmd0aCAtIDJdICs9ICd9fSc7XG5cbiAgICAgICAgICAgICAgICBvdXRwdXQucG9wKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCBqb2luZWRPdXRwdXQgPSBvdXRwdXQuam9pbihcbiAgICAgICAgICAgICAgICBzdHlsZSA9PT0gRm9ybWF0U3R5bGUuRXhwYW5kZWQgfHwgc3R5bGUgPT09IEZvcm1hdFN0eWxlLkV4cGFuZGVkQWxpZ25lZFxuICAgICAgICAgICAgICAgICAgICA/ICdcXG4nXG4gICAgICAgICAgICAgICAgICAgIDogc3R5bGUgPT09IEZvcm1hdFN0eWxlLk1pbmltaXplZFNwYWNlZFxuICAgICAgICAgICAgICAgICAgICAgID8gJyAnXG4gICAgICAgICAgICAgICAgICAgICAgOiAnJyxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViVGVtcGxhdGUgb2YgdGhpcy5zdWJUZW1wbGF0ZXMpXG4gICAgICAgICAgICAgICAgam9pbmVkT3V0cHV0ID0gam9pbmVkT3V0cHV0LnJlcGxhY2UodGhpcy5QTEFDRUhPTERFUl9TVFJJTkdTWzBdLCBzdWJUZW1wbGF0ZS5mb3JtYXQoKSk7XG5cbiAgICAgICAgICAgIHJldHVybiBqb2luZWRPdXRwdXQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhbGxUZW1wbGF0ZXM6IFRlbXBsYXRlW10gPSBbXTtcblxuICAgIGNvbnN0IGluc2lkZVRlbXBsYXRlczogVGVtcGxhdGVbXSA9IFtdO1xuICAgIGxldCBpc0luc2lkZUxpbmsgPSBmYWxzZTtcbiAgICBsZXQgaXNJbnNpZGVOb3dpa2kgPSBmYWxzZTtcbiAgICBsZXQgaXNJbnNpZGVDb21tZW50ID0gZmFsc2U7XG5cbiAgICBsZXQgY3VycmVudExvY2F0aW9uID0gMDtcblxuICAgIC8qKlxuICAgICAqIENoZWNrcyBpZiB0aGUgY29udGVudCBmb2xsb3dpbmcgdGhlIGN1cnJlbnQgbG9jYXRpb24gbWF0Y2hlcyB0aGUgZGVzaXJlZCBzdHJpbmcuXG4gICAgICogQHBhcmFtIGRlc2lyZWRTdHJpbmcgVGhlIHN0cmluZyB0byBzZWFyY2ggZm9yLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGlzQXRTdHJpbmcoZGVzaXJlZFN0cmluZzogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGlzQXRTdHJpbmcgPSBjb250ZW50LnNsaWNlKGN1cnJlbnRMb2NhdGlvbiwgY3VycmVudExvY2F0aW9uICsgZGVzaXJlZFN0cmluZy5sZW5ndGgpID09PSBkZXNpcmVkU3RyaW5nO1xuXG4gICAgICAgIGlmIChpc0F0U3RyaW5nKSBjdXJyZW50TG9jYXRpb24gKz0gZGVzaXJlZFN0cmluZy5sZW5ndGg7XG5cbiAgICAgICAgcmV0dXJuIGlzQXRTdHJpbmc7XG4gICAgfVxuXG4gICAgd2hpbGUgKGN1cnJlbnRMb2NhdGlvbiA8IGNvbnRlbnQubGVuZ3RoKVxuICAgICAgICBpZiAoaXNBdFN0cmluZygnPG5vd2lraT4nKSkgaXNJbnNpZGVOb3dpa2kgPSB0cnVlO1xuICAgICAgICBlbHNlIGlmIChpc0F0U3RyaW5nKCc8L25vd2lraT4nKSkgaXNJbnNpZGVOb3dpa2kgPSBmYWxzZTtcbiAgICAgICAgZWxzZSBpZiAoaXNBdFN0cmluZygnPCEtLScpKSBpc0luc2lkZUNvbW1lbnQgPSB0cnVlO1xuICAgICAgICBlbHNlIGlmIChpc0F0U3RyaW5nKCctLT4nKSkgaXNJbnNpZGVDb21tZW50ID0gZmFsc2U7XG4gICAgICAgIGVsc2UgaWYgKCFpc0luc2lkZU5vd2lraSAmJiAhaXNJbnNpZGVDb21tZW50KVxuICAgICAgICAgICAgaWYgKGlzQXRTdHJpbmcoJ1tbJykpIGlzSW5zaWRlTGluayA9IHRydWU7XG4gICAgICAgICAgICBlbHNlIGlmIChpc0luc2lkZUxpbmsgJiYgaXNBdFN0cmluZygnXV0nKSkgaXNJbnNpZGVMaW5rID0gZmFsc2U7XG4gICAgICAgICAgICBlbHNlIGlmIChpc0F0U3RyaW5nKCd7eycpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBuZXcgVGVtcGxhdGUoY3VycmVudExvY2F0aW9uIC0gMik7XG5cbiAgICAgICAgICAgICAgICBpZiAoaW5zaWRlVGVtcGxhdGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGUuaXNOZXN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpbnNpZGVUZW1wbGF0ZXMuYXQoLTEpPy5zdWJUZW1wbGF0ZXMucHVzaCh0ZW1wbGF0ZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaW5zaWRlVGVtcGxhdGVzLnB1c2godGVtcGxhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChpc0F0U3RyaW5nKCd9fScpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdFRlbXBsYXRlID0gaW5zaWRlVGVtcGxhdGVzLnBvcCgpO1xuICAgICAgICAgICAgICAgIGlmICghbGFzdFRlbXBsYXRlKSBjb250aW51ZTtcblxuICAgICAgICAgICAgICAgIGxhc3RUZW1wbGF0ZS5sb2NhdGlvbi5lbmQgPSBjdXJyZW50TG9jYXRpb247XG5cbiAgICAgICAgICAgICAgICBhbGxUZW1wbGF0ZXMucHVzaChsYXN0VGVtcGxhdGUpO1xuICAgICAgICAgICAgfSBlbHNlIGN1cnJlbnRMb2NhdGlvbisrO1xuICAgICAgICBlbHNlIGN1cnJlbnRMb2NhdGlvbisrO1xuXG4gICAgbGV0IG5ld0NvbnRlbnQgPSBjb250ZW50O1xuXG4gICAgZm9yIChjb25zdCB0ZW1wbGF0ZSBvZiBhbGxUZW1wbGF0ZXMpXG4gICAgICAgIGlmICghdGVtcGxhdGUuaXNOZXN0ZWQpIHtcbiAgICAgICAgICAgIHRlbXBsYXRlLnBhcnNlKCk7XG5cbiAgICAgICAgICAgIG5ld0NvbnRlbnQgPSBuZXdDb250ZW50LnJlcGxhY2UodGVtcGxhdGUuZnVsbFRleHQhLCB0ZW1wbGF0ZS5mb3JtYXQoKSk7XG4gICAgICAgIH1cblxuICAgIHJldHVybiBuZXdDb250ZW50O1xufVxuXG4vKipcbiAqIFJlbW92ZXMgdW5uZWNlc3NhcnkgY29tbWVudHMgZnJvbSBhbiBhcnRpY2xlJ3MgY29udGVudC5cbiAqIEBwYXJhbSBjb250ZW50IFRoZSBhcnRpY2xlIGNvbnRlbnQgdG8gY2xlYW4gdXAuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUNvbW1lbnRzKGNvbnRlbnQ6IHN0cmluZykge1xuICAgIGlmIChtdy5jb25maWcuZ2V0KCd3Z05hbWVzcGFjZU51bWJlcicpICE9PSAwKSByZXR1cm4gY29udGVudDtcblxuICAgIGNvbnN0IENPTU1FTlRTX1RPX1JFTU9WRSA9IFtcbiAgICAgICAgJ0RvIG5vdCByZW1vdmUgdGhpcyBsaW5lJyxcbiAgICAgICAgJ0VESVQgQkVMT1cgVEhJUyBMSU5FJyxcbiAgICAgICAgJ0ltcG9ydGFudCwgZG8gbm90IHJlbW92ZSBhbnl0aGluZyBhYm92ZSB0aGlzIGxpbmUgYmVmb3JlIGFydGljbGUgaGFzIGJlZW4gY3JlYXRlZCcsXG4gICAgICAgICdJbXBvcnRhbnQsIGRvIG5vdCByZW1vdmUgdGhpcyBsaW5lIGJlZm9yZSBhcnRpY2xlIGhhcyBiZWVuIGNyZWF0ZWQnLFxuICAgICAgICAnSW5saW5lIGNpdGF0aW9ucyBhZGRlZCB0byB5b3VyIGFydGljbGUgd2lsbCBhdXRvbWF0aWNhbGx5IGRpc3BsYXkgaGVyZScsXG4gICAgICAgICdOb3RlOiBUaGUgZm9sbG93aW5nIHBhZ2VzIHdlcmUgcmVkaXJlY3RzIHRvICcsXG4gICAgXTtcblxuICAgIGZvciAoY29uc3QgY29tbWVudCBvZiBDT01NRU5UU19UT19SRU1PVkUpXG4gICAgICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2VBbGwobmV3IFJlZ0V4cChgICo8IS0tID8ke2VzY2FwZVJlZ2V4Q2hhcmFjdGVycyhjb21tZW50KX0uKj8tLT4gKlxcbj9gLCAnZ3MnKSwgJycpO1xuXG4gICAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbi8qKlxuICogQWRkcyByZWxldmFudCB0YWdzIHRvIGFuIGFydGljbGUncyBjb250ZW50LlxuICogQHBhcmFtIGNvbnRlbnQgVGhlIGFydGljbGUgY29udGVudCB0byBhZGQgdGFncyB0by5cbiAqL1xuZnVuY3Rpb24gYXV0b1RhZ1BhZ2UoY29udGVudDogc3RyaW5nKSB7XG4gICAgY29uc3QgaXNPdXRzaWRlTWFpbnNwYWNlID0gbXcuY29uZmlnLmdldCgnd2dOYW1lc3BhY2VOdW1iZXInKSAhPT0gMDtcbiAgICBjb25zdCBpc0VkaXRpbmdTZWN0aW9uID0gISFuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpLmdldCgnc2VjdGlvbicpO1xuICAgIGNvbnN0IGlzRGlzYW1iaWd1YXRpb24gPSBtdy5jb25maWcuZ2V0KCd3Z0NhdGVnb3JpZXMnKS5pbmNsdWRlcygnQWxsIGRpc2FtYmlndWF0aW9uIHBhZ2VzJyk7XG4gICAgY29uc3QgaXNSZWRpcmVjdCA9IG13LmNvbmZpZy5nZXQoJ3dnSXNSZWRpcmVjdCcpO1xuXG4gICAgaWYgKGlzT3V0c2lkZU1haW5zcGFjZSB8fCBpc0VkaXRpbmdTZWN0aW9uIHx8IGlzRGlzYW1iaWd1YXRpb24gfHwgaXNSZWRpcmVjdCkgcmV0dXJuIGNvbnRlbnQ7XG5cbiAgICBjb25zdCBudW1iZXJPZkNhdGVnb3JpZXMgPSBbLi4uY29udGVudC5tYXRjaEFsbCgvXFxbXFxbQ2F0ZWdvcnk6L2cpXS5sZW5ndGg7XG5cbiAgICBjb250ZW50ID0gY29udGVudC5yZXBsYWNlQWxsKC9cXG4qe3sodW5jYXRlZ29yaXplZHxpbXByb3ZlIGNhdGVnb3JpZXMpKFxcfC4rPyk/fX0oe3t8XFxuK3wkKS9naSwgJycpO1xuXG4gICAgaWYgKG51bWJlck9mQ2F0ZWdvcmllcyA9PT0gMCAmJiAhL3t7dW5jYXRlZ29yaXplZC9pLnRlc3QoY29udGVudCkpXG4gICAgICAgIGNvbnRlbnQgKz0gJ1xcblxcbnt7VW5jYXRlZ29yaXplZHx7e3N1YnN0OkNVUlJFTlRNT05USE5BTUV9fSB7e3N1YnN0OkNVUlJFTlRZRUFSfX19fSc7XG4gICAgZWxzZSBpZiAobnVtYmVyT2ZDYXRlZ29yaWVzID09PSAxICYmICEve3tpbXByb3ZlIGNhdGVnb3JpZXMvaS50ZXN0KGNvbnRlbnQpKVxuICAgICAgICBjb250ZW50ICs9ICdcXG5cXG57e0ltcHJvdmUgY2F0ZWdvcmllc3x7e3N1YnN0OkNVUlJFTlRNT05USE5BTUV9fSB7e3N1YnN0OkNVUlJFTlRZRUFSfX19fSc7XG5cbiAgICByZXR1cm4gY29udGVudDtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7OzttQkFHTyxJQUFNQSxFQUFNLElBQUksR0FBRyxJQU0xQixlQUFzQkMsRUFBZUMsRUFBZSxDQUNoRCxPQUNLLE1BQU1GLEVBQUksSUFBSSxDQUNYLE9BQVEsUUFDUixjQUFlLElBQ2YsS0FBTSxZQUNOLE9BQVEsVUFDUixRQUFTLE9BQ1QsT0FBUUUsQ0FDWixDQUFtQyxHQUNyQyxNQUFNLE1BQU0sQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLE1BQU0sS0FBSyxRQUFRLEtBQUssQ0FDNUQsRUNjQyxJQUFNLENBRUgsR0FESSxHQUFHLE9BQU8sSUFBSSxtQkFBbUIsRUFBSSxHQUNyQyxDQUFDLEdBQUcsT0FBTyxJQUFJLHNCQUFzQixFQUFHLE9BRTVDLElBQU1DLEVBQWUsQ0FBQyxpQkFBa0Isc0JBQXNCLEVBRTFELEdBQUcsT0FBTyxJQUFJLE1BQU0sSUFBTSxXQUFXQSxFQUFhLEtBQUssdUJBQXVCLEVBRWxGLEdBQUcsT0FBTyxNQUFNQSxFQUFjLElBQU0sQ0FDaEMsSUFBSUMsRUFBeUIsR0FFdkJDLEVBQWlCLDRGQU12QixTQUFTQyxFQUFjQyxFQUFrRCxDQUVyRSxXQUFXLElBQU0sQ0FDUkEsRUFBUyxNQUFNLFNBQVNGLEVBQWUsTUFBTSxDQUFDLENBQUMsSUFDaERFLEVBQVMsT0FDTEEsRUFBUyxPQUFTLENBQUNBLEVBQVMsTUFBTSxXQUFXLEtBQUssR0FBSyxDQUFDQSxFQUFTLE1BQU0sU0FBUyxNQUFNLEVBQ2hGLEtBQUtGLEVBQWUsT0FBTyxDQUFDLEVBQUUsWUFBWSxFQUFJQSxFQUFlLE1BQU0sQ0FBQyxDQUFDLEdBQ3JFQSxFQUNsQixFQUFHLENB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Q0FBQyxJQUFJLGdCQUFnQixPQUFPLFNBQVMsTUFBTSxFQUFFLElBQUksU0FBUyxFQUM5RUMsRUFBbUIsR0FBRyxPQUFPLElBQUksY0FBYyxFQUFFLFNBQVMsMEJBQTBCLEVBQ3BGQyxFQUFhLEdBQUcsT0FBTyxJQUFJLGNBQWMsRUFFL0MsR0FBSUgsR0FBc0JDLEdBQW9CQyxHQUFvQkMsRUFBWSxPQUFPeEksRUFFckYsSUFBTXlJLEVBQXFCLENBQUMsR0FBR3pJLEVBQVEsU0FBUyxnQkFBZ0IsQ0FBQyxFQUFFLE9BRW5FLE9BQUFBLEVBQVVBLEVBQVEsV0FBVyxnRUFBaUUsRUFBRSxFQUU1RnlJLElBQXVCLEdBQUssQ0FBQyxtQkFBbUIsS0FBS3pJLENBQU8sRUFDNURBLEdBQVc7QUFBQTtBQUFBLG9FQUNOeUksSUFBdUIsR0FBSyxDQUFDLHdCQUF3QixLQUFLekksQ0FBTyxJQUN0RUEsR0FBVztBQUFBO0FBQUEsMEVBRVJBLENBQ1giLAogICJuYW1lcyI6IFsiYXBpIiwgImdldFBhZ2VDb250ZW50IiwgInRpdGxlIiwgImRlcGVuZGVuY2llcyIsICJzaG91bGRBZGRTY3JpcHRNZXNzYWdlIiwgIlNDUklQVF9NRVNTQUdFIiwgInVwZGF0ZVN1bW1hcnkiLCAidGV4dGFyZWEiLCAiaGFuZGxlQWN0aXZhdGlvbiIsICJldmVudCIsICJlZGl0b3IiLCAib3JpZ2luYWxUZXh0IiwgImZpbmFsVGV4dCIsICJjbGVhbnVwU3RyYXlVbmljb2RlQ2hhcmFjdGVycyIsICJjbGVhbnVwU2VjdGlvbkhlYWRlcnMiLCAiY2xlYW51cE1hZ2ljV29yZHMiLCAiY2xlYW51cERpc3BsYXl0aXRsZXNBbmREZWZhdWx0c29ydHMiLCAiY2xlYW51cENhdGVnb3JpZXMiLCAiY2xlYW51cExpbmtzIiwgImNsZWFudXBJbXByb3BlckNoYXJhY3RlcnMiLCAiY2xlYW51cFllYXJSYW5nZXMiLCAiY2xlYW51cFN0cmF5TWFya3VwIiwgImNsZWFudXBTcGFjaW5nIiwgImNsZWFudXBSZWZlcmVuY2VzIiwgImZvcm1hdFRlbXBsYXRlcyIsICJyZW1vdmVDb21tZW50cyIsICJhdXRvVGFnUGFnZSIsICJzdXJmYWNlTW9kZWwiLCAic3VtbWFyeUlucHV0IiwgImhlYWRlclN3aXRjaGVyIiwgImJ1dHRvbiIsICJjb250ZW50IiwgImVzY2FwZVJlZ2V4Q2hhcmFjdGVycyIsICJzdHJpbmciLCAiU1RSQVlfVU5JQ09ERV9SRUdFWCIsICJDT01NT05fUkVQTEFDRU1FTlRTIiwgIkNPTU1PTl9NSVNDQVBJVEFMSVpFRF9XT1JEUyIsICJyZXZlcnNlQ29tbW9uUmVwbGFjZW1lbnRzIiwgImtleSIsICJ2YWx1ZXMiLCAidmFsdWUiLCAicGFyc2VkSGVhZGVycyIsICJoZWFkZXIiLCAibmFtZSIsICJzdGFydE1hcmt1cCIsICJlbmRNYXJrdXAiLCAibGlua3MiLCAibGluayIsICJkZXB0aCIsICJoZWFkZXJzU2V0IiwgInRpdGxlU3BhY2VyIiwgImxvd2VyY2FzZU5hbWUiLCAiY2FwaXRhbGl6ZWROYW1lIiwgIndvcmQiLCAib3V0cHV0IiwgInBhcnNlZFRhZ3MiLCAidGFnIiwgImZ1bGxUYWciLCAidHlwZSIsICJjdXJyZW50VGl0bGUiLCAib3JpZ2luYWxUYWdSZWdleCIsICJ1bnByZWZpeGVkVGl0bGUiLCAidGl0bGUiLCAiZGVmYXVsdEtleSIsICJjdXN0b21LZXkiLCAibmV3VGV4dCIsICJmdW5jdGlvbnNDYWxsZWRXaGlsZUVzY2FwZWQiLCAiY2xvc2VkTGlua3MiLCAiaXNJbnNpZGVOb3dpa2kiLCAiaXNJbnNpZGVDb21tZW50IiwgImN1cnJlbnRMb2NhdGlvbiIsICJpc0F0U3RyaW5nIiwgImRlc2lyZWRTdHJpbmciLCAic2hvdWxkSW5jcmVtZW50IiwgImxhc3RMaW5rIiwgIm5ld0xpbmtDb250ZW50IiwgIm5hbWVzcGFjZU5hbWVzIiwgImxpbmtMb2NhdGlvbiIsICJpbm5lckxpbmsiLCAidW5wYXJzZWRMaW5rIiwgInBhcmFtZXRlcnMiLCAiYWx0VGV4dCIsICJpc0ZpcnN0Q2hhcmFjdGVyQ29sb24iLCAic2hvdWxkRmlyc3RDaGFyYWN0ZXJCZUNvbG9uIiwgImxpbmtVcHBlcmNhc2VTdGFydCIsICJsaW5rTG93ZXJjYXNlU3RhcnQiLCAibmFtZXNwYWNlIiwgImJlZm9yZUxpbmtUZXh0IiwgImFmdGVyTGlua1RleHQiLCAibWF0Y2hlZE1hcmt1cCIsICJhZGRlZFB1bmN0dWF0aW9uIiwgIm5ld0xpbmsiLCAiZnVuY3Rpb25Ub0NhbGwiLCAibG9vcENvdW50ZXIiLCAibGlua0RhdGEiLCAibGlua0NvbnRlbnQiLCAicnVuIiwgIm9yaWdpbmFsIiwgInN0YXJ0IiwgImVuZCIsICJTVFJBWV9NQVJLVVBfUkVHRVhFUyIsICJyZWdleCIsICJzZWNvbmRSdW4iLCAiVEFHU19UT19JR05PUkUiLCAiaWdub3JlZFRhZ3NDb250ZW50IiwgImZ1bGxNYXRjaCIsICJzdGFydFRhZyIsICJ0YWdOYW1lIiwgImlubmVyQ29udGVudCIsICJlbmRUYWciLCAidGFnQ29udGVudCIsICJyZWZlcmVuY2VUYWciLCAicHVuY3R1YXRpb24iLCAicmVmZXJlbmNlcyIsICJwcm9jZWVkVW50aWxTdHJpbmciLCAiaXNTZWxmQ2xvc2luZyIsICJwYXJzZXIiLCAicmVwbGFjZW1lbnRzIiwgInJlZmVyZW5jZSIsICJ0ZW1wbGF0ZUFsaWFzZXMiLCAiRm9ybWF0U3R5bGUiLCAiTmFtZXNwYWNlIiwgImdldFBhZ2VDb250ZW50IiwgIm1hcHBlZFRlbXBsYXRlQWxpYXNlcyIsICJhbGlhcyIsICJmcm9tIiwgIlRlbXBsYXRlIiwgInN0YXJ0TG9jYXRpb24iLCAibnVtYmVyIiwgInN1YlRlbXBsYXRlIiwgInRyaW1tZWRJbm5lclRleHQiLCAicGlwZUVzY2FwZVJlZ2V4IiwgImZ1bGxUZXh0IiwgImF0dHJpYnV0ZXMiLCAicGFyYW1ldGVyIiwgIm5hbWVMb3dlcmNhc2VGaXJzdCIsICJpc1N0YXJ0TG93ZXIiLCAiZmluYWxOYW1lIiwgIm11c3RTdGFydEJlVXBwZXJjYXNlIiwgInNwbGl0UGFyYW1ldGVycyIsICJlcXVhbHNMb2NhdGlvbiIsICJ0ZW1wbGF0ZXMiLCAibW9zdFNwZWNpZmljRGVmYXVsdFN0eWxlUHJlZml4TGVuZ3RoIiwgIm1vc3RTcGVjaWZpY0RlZmF1bHRTdHlsZUZvcm1hdFN0eWxlIiwgImZvcm1hdFN0eWxlIiwgInRlbXBsYXRlUHJlZml4ZXMiLCAidGVtcGxhdGVQcmVmaXgiLCAidmFsdWVCZWZvcmUiLCAiaW1hZ2VQYXJhbWV0ZXJzIiwgImFkZGl0aW9uYWxEYXRhIiwgInNob3VsZFN1YnN0IiwgInN0eWxlIiwgIm5ld05hbWUiLCAicmVxdWlyZWRLZXlMZW5ndGgiLCAiaW5kZXgiLCAiam9pbmVkT3V0cHV0IiwgImFsbFRlbXBsYXRlcyIsICJpbnNpZGVUZW1wbGF0ZXMiLCAiaXNJbnNpZGVMaW5rIiwgInRlbXBsYXRlIiwgImxhc3RUZW1wbGF0ZSIsICJuZXdDb250ZW50IiwgIkNPTU1FTlRTX1RPX1JFTU9WRSIsICJjb21tZW50IiwgImlzT3V0c2lkZU1haW5zcGFjZSIsICJpc0VkaXRpbmdTZWN0aW9uIiwgImlzRGlzYW1iaWd1YXRpb24iLCAiaXNSZWRpcmVjdCIsICJudW1iZXJPZkNhdGVnb3JpZXMiXQp9Cg==