User:Eejit43/scripts/to-monitor-list.js
Appearance
From Wikipedia, the free encyclopedia
< 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.
Documentation for this user script can be added at User:Eejit43/scripts/to-monitor-list. This user script seems to have an accompanying .json page at User:Eejit43/scripts/to-monitor-list.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/to-monitor-list.ts "use strict";(()=>{vara=newmw.Api;asyncfunctionl(c){return(awaita.get({action:"query",formatversion:"2",prop:"revisions",rvprop:"content",rvslots:"main",titles:c})).query.pages[0].revisions?.[0].slots.main.content.trim()}varo=class{link;toCheck;totalToCheck;isRunning=!1;handledRequests=0;load(){mw.util.addCSS(` .to-monitor-list-count { cursor: pointer; }`);leti=document.querySelector(".mw-editsection").cloneNode(!0);this.link=document.createElement("a"),this.link.href="#",this.link.style.fontWeight="bold",this.link.textContent="Add missing counts",this.link.addEventListener("click",asyncr=>{if(r.preventDefault(),!this.isRunning){this.isRunning=!0;for(leteofdocument.querySelectorAll(".to-monitor-list-count"))e.id&&(e.innerHTML='<span style="color: #ed8e07; font-weight: bold">?</span>');awaitthis.loadToCheckData();for(leteofthis.toCheck.categories)this.handleCheck(e,async()=>{lett=awaita.get({action:"query",list:"search",srinfo:"totalhits",srnamespace:this.getCategory(e),srsearch:`incategory:"${e.category}"`}).catch((s,n)=>(mw.notify(`An error occurred while trying to get category members: ${n?.error?.info??"Unknown error"} (${s})`,{type:"error"}),null));if(t)returnt.query.searchinfo.totalhits});for(leteofthis.toCheck.searches)this.handleCheck(e,async()=>{lett=awaita.get({action:"query",list:"search",srinfo:"totalhits",srnamespace:this.getCategory(e),srsearch:e.search}).catch((s,n)=>(mw.notify(`An error occurred while trying to get search results: ${n?.error?.info??"Unknown error"} (${s})`,{type:"error"}),null));if(t)returnt.query.searchinfo.totalhits});for(leteofthis.toCheck.whatLinksHere)this.handleCheck(e,async()=>{lett=awaita.get({action:"query",list:"backlinks",bllimit:500,blnamespace:this.getCategory(e),bltitle:e.title}).catch((s,n)=>(mw.notify(`An error occurred while trying to get backlinks: ${n?.error?.info??"Unknown error"} (${s})`,{type:"error"}),null));if(t)returnt.query.backlinks.length});for(leteofthis.toCheck.transclusions)this.handleCheck(e,async()=>{lett=awaita.get({action:"query",list:"embeddedin",eilimit:500,einamespace:this.getCategory(e),eititle:e.title}).catch((s,n)=>(mw.notify(`An error occurred while trying to get transclusions: ${n?.error?.info??"Unknown error"} (${s})`,{type:"error"}),null));if(t)returnt.query.embeddedin.length})}}),i.querySelector("a").replaceWith(this.link),document.querySelector("h2#Stuff_to_monitor + .mw-editsection").after(i);for(letrofdocument.querySelectorAll(".to-monitor-list-count"))r.addEventListener("click",()=>{r.innerHTML='<span style="color: #00733f">None</span>'})}asyncloadToCheckData(){this.toCheck=JSON.parse(awaitl("User:Eejit43/scripts/to-monitor-list.json")??"{}"),this.totalToCheck=Object.values(this.toCheck).flat().length}asynchandleCheck(i,r){lete=awaitr();if(e===void0)return;lett=document.querySelector(`#to-monitor-list-${i.id}`);if(!t)returnmw.notify(`Failed to find element for ID "${i.id}"`);t.innerHTML=e===0?'<span style="color: #00733f">None</span>':`<b><span style="color: #bd2828">${e===500?"500+":e}</span></b>`,this.handledRequests++,this.link.textContent=`Add missing counts (${this.handledRequests}/${this.totalToCheck} loaded)`,this.handledRequests===this.totalToCheck&&setTimeout(()=>{this.isRunning=!1,this.handledRequests=0,this.link.textContent="Add missing counts"},1e3)}getCategory({namespaces:i,notNamespaces:r}){if(!i&&!r)return0;if(i){lete=i.map(t=>Object.entries(mw.config.get("wgFormattedNamespaces")).find(([,s])=>s===t)).filter(Boolean);returne.length>0?e.map(t=>Number.parseInt(t[0])):0}elsereturnObject.entries(mw.config.get("wgFormattedNamespaces")).filter(([,e])=>!r.includes(e||"Article")).map(([e])=>Number.parseInt(e))}};mw.loader.using(["mediawiki.util"],()=>{mw.config.get("wgPageName")==="User:Eejit43"&&newo().load()});})(); // </pre> //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vdXRpbGl0eS50cyIsICIuLi9zY3JpcHRzL3RvLW1vbml0b3ItbGlzdC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHR5cGUgeyBBcGlRdWVyeVJldmlzaW9uc1BhcmFtcyB9IGZyb20gJ3R5cGVzLW1lZGlhd2lraS1hcGknO1xuaW1wb3J0IHR5cGUgeyBQYWdlUmV2aXNpb25zUmVzdWx0IH0gZnJvbSAnLi9nbG9iYWwtdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgYXBpID0gbmV3IG13LkFwaSgpO1xuXG4vKipcbiAqIEZldGNoZXMgdGhlIGNvbnRlbnQgb2YgYSBnaXZlbiBwYWdlLlxuICogQHBhcmFtIHRpdGxlIFRoZSB0aXRsZSB0byBmZXRjaC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFBhZ2VDb250ZW50KHRpdGxlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gKFxuICAgICAgICAoYXdhaXQgYXBpLmdldCh7XG4gICAgICAgICAgICBhY3Rpb246ICdxdWVyeScsXG4gICAgICAgICAgICBmb3JtYXR2ZXJzaW9uOiAnMicsXG4gICAgICAgICAgICBwcm9wOiAncmV2aXNpb25zJyxcbiAgICAgICAgICAgIHJ2cHJvcDogJ2NvbnRlbnQnLFxuICAgICAgICAgICAgcnZzbG90czogJ21haW4nLFxuICAgICAgICAgICAgdGl0bGVzOiB0aXRsZSxcbiAgICAgICAgfSBzYXRpc2ZpZXMgQXBpUXVlcnlSZXZpc2lvbnNQYXJhbXMpKSBhcyBQYWdlUmV2aXNpb25zUmVzdWx0XG4gICAgKS5xdWVyeS5wYWdlc1swXS5yZXZpc2lvbnM/LlswXS5zbG90cy5tYWluLmNvbnRlbnQudHJpbSgpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQXBpUXVlcnlCYWNrbGlua3NQYXJhbXMsIEFwaVF1ZXJ5U2VhcmNoUGFyYW1zIH0gZnJvbSAndHlwZXMtbWVkaWF3aWtpLWFwaSc7XG5pbXBvcnQgdHlwZSB7IEJhY2tsaW5rc1Jlc3VsdCwgRW1iZWRkZWRpblJlc3VsdCwgTWVkaWFXaWtpRGF0YUVycm9yLCBTZWFyY2hSZXN1bHQgfSBmcm9tICcuLi9nbG9iYWwtdHlwZXMnO1xuaW1wb3J0IHsgYXBpLCBnZXRQYWdlQ29udGVudCB9IGZyb20gJy4uL3V0aWxpdHknO1xuXG5pbnRlcmZhY2UgU2VhcmNoRGF0YSB7XG4gICAgY2F0ZWdvcmllczogeyBpZDogc3RyaW5nOyBjYXRlZ29yeTogc3RyaW5nOyBuYW1lc3BhY2VzPzogc3RyaW5nW107IG5vdE5hbWVzcGFjZXM/OiBzdHJpbmdbXSB9W107XG4gICAgc2VhcmNoZXM6IHsgaWQ6IHN0cmluZzsgc2VhcmNoOiBzdHJpbmc7IG5hbWVzcGFjZXM/OiBzdHJpbmdbXTsgbm90TmFtZXNwYWNlcz86IHN0cmluZ1tdIH1bXTtcbiAgICB3aGF0TGlua3NIZXJlOiB7IGlkOiBzdHJpbmc7IHRpdGxlOiBzdHJpbmc7IG5hbWVzcGFjZXM/OiBzdHJpbmdbXTsgbm90TmFtZXNwYWNlcz86IHN0cmluZ1tdIH1bXTtcbiAgICB0cmFuc2NsdXNpb25zOiB7IGlkOiBzdHJpbmc7IHRpdGxlOiBzdHJpbmc7IG5hbWVzcGFjZXM/OiBzdHJpbmdbXTsgbm90TmFtZXNwYWNlcz86IHN0cmluZ1tdIH1bXTtcbn1cblxudHlwZSBTZWFyY2hEYXRhQ2hlY2sgPSBTZWFyY2hEYXRhW2tleW9mIFNlYXJjaERhdGFdWzBdO1xuXG4vKipcbiAqIEFuIGluc3RhbmNlIG9mIHRoaXMgY2xhc3MgaGFuZGxlcyB0aGUgZW50aXJlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIHRvLW1vbml0b3ItbGlzdCBzY3JpcHQuXG4gKi9cbmNsYXNzIE1vbml0b3JpbmdMaXN0TWFuYWdlciB7XG4gICAgcHJpdmF0ZSBsaW5rITogSFRNTEFuY2hvckVsZW1lbnQ7XG5cbiAgICBwcml2YXRlIHRvQ2hlY2shOiBTZWFyY2hEYXRhO1xuICAgIHByaXZhdGUgdG90YWxUb0NoZWNrITogbnVtYmVyO1xuXG4gICAgcHJpdmF0ZSBpc1J1bm5pbmcgPSBmYWxzZTtcblxuICAgIHByaXZhdGUgaGFuZGxlZFJlcXVlc3RzID0gMDtcblxuICAgIC8qKlxuICAgICAqIExvYWRzIHRoZSBcIkFkZCBtaXNzaW5nIGNvdW50c1wiIGxpbmsgZWxlbWVudC5cbiAgICAgKi9cbiAgICBwdWJsaWMgbG9hZCgpIHtcbiAgICAgICAgbXcudXRpbC5hZGRDU1MoYFxuLnRvLW1vbml0b3ItbGlzdC1jb3VudCB7XG4gICAgY3Vyc29yOiBwb2ludGVyO1xufWApO1xuXG4gICAgICAgIGNvbnN0IGZ1bGxMaW5rRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5tdy1lZGl0c2VjdGlvbicpIS5jbG9uZU5vZGUodHJ1ZSkgYXMgSFRNTFNwYW5FbGVtZW50O1xuXG4gICAgICAgIHRoaXMubGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcbiAgICAgICAgdGhpcy5saW5rLmhyZWYgPSAnIyc7XG4gICAgICAgIHRoaXMubGluay5zdHlsZS5mb250V2VpZ2h0ID0gJ2JvbGQnO1xuICAgICAgICB0aGlzLmxpbmsudGV4dENvbnRlbnQgPSAnQWRkIG1pc3NpbmcgY291bnRzJztcbiAgICAgICAgdGhpcy5saW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5pc1J1bm5pbmcpIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuaXNSdW5uaW5nID0gdHJ1ZTtcblxuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50by1tb25pdG9yLWxpc3QtY291bnQnKSlcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5pZCkgZWxlbWVudC5pbm5lckhUTUwgPSAnPHNwYW4gc3R5bGU9XCJjb2xvcjogI2VkOGUwNzsgZm9udC13ZWlnaHQ6IGJvbGRcIj4/PC9zcGFuPic7XG5cbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFRvQ2hlY2tEYXRhKCk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hlY2sgb2YgdGhpcy50b0NoZWNrLmNhdGVnb3JpZXMpXG4gICAgICAgICAgICAgICAgdm9pZCB0aGlzLmhhbmRsZUNoZWNrKGNoZWNrLCBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSAoYXdhaXQgYXBpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZ2V0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb246ICdxdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdDogJ3NlYXJjaCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JpbmZvOiAndG90YWxoaXRzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcm5hbWVzcGFjZTogdGhpcy5nZXRDYXRlZ29yeShjaGVjayksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JzZWFyY2g6IGBpbmNhdGVnb3J5OlwiJHtjaGVjay5jYXRlZ29yeX1cImAsXG4gICAgICAgICAgICAgICAgICAgICAgICB9IHNhdGlzZmllcyBBcGlRdWVyeVNlYXJjaFBhcmFtcylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3JDb2RlLCBlcnJvckluZm8pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdy5ub3RpZnkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gZ2V0IGNhdGVnb3J5IG1lbWJlcnM6ICR7KGVycm9ySW5mbyBhcyBNZWRpYVdpa2lEYXRhRXJyb3IpPy5lcnJvcj8uaW5mbyA/PyAnVW5rbm93biBlcnJvcid9ICgke2Vycm9yQ29kZX0pYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB0eXBlOiAnZXJyb3InIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKSBhcyBTZWFyY2hSZXN1bHQgfCBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWRhdGEpIHJldHVybjtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGF0YS5xdWVyeSEuc2VhcmNoaW5mby50b3RhbGhpdHM7XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGZvciAoY29uc3QgY2hlY2sgb2YgdGhpcy50b0NoZWNrLnNlYXJjaGVzKVxuICAgICAgICAgICAgICAgIHZvaWQgdGhpcy5oYW5kbGVDaGVjayhjaGVjaywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gKGF3YWl0IGFwaVxuICAgICAgICAgICAgICAgICAgICAgICAgLmdldCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAncXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Q6ICdzZWFyY2gnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyaW5mbzogJ3RvdGFsaGl0cycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3JuYW1lc3BhY2U6IHRoaXMuZ2V0Q2F0ZWdvcnkoY2hlY2spLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyc2VhcmNoOiBjaGVjay5zZWFyY2gsXG4gICAgICAgICAgICAgICAgICAgICAgICB9IHNhdGlzZmllcyBBcGlRdWVyeVNlYXJjaFBhcmFtcylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3JDb2RlLCBlcnJvckluZm8pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdy5ub3RpZnkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gZ2V0IHNlYXJjaCByZXN1bHRzOiAkeyhlcnJvckluZm8gYXMgTWVkaWFXaWtpRGF0YUVycm9yKT8uZXJyb3I/LmluZm8gPz8gJ1Vua25vd24gZXJyb3InfSAoJHtlcnJvckNvZGV9KWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ2Vycm9yJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSkgYXMgU2VhcmNoUmVzdWx0IHwgbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRhdGEucXVlcnkhLnNlYXJjaGluZm8udG90YWxoaXRzO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoZWNrIG9mIHRoaXMudG9DaGVjay53aGF0TGlua3NIZXJlKVxuICAgICAgICAgICAgICAgIHZvaWQgdGhpcy5oYW5kbGVDaGVjayhjaGVjaywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gKGF3YWl0IGFwaVxuICAgICAgICAgICAgICAgICAgICAgICAgLmdldCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAncXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Q6ICdiYWNrbGlua3MnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsbGltaXQ6IDUwMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG5hbWVzcGFjZTogdGhpcy5nZXRDYXRlZ29yeShjaGVjayksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmx0aXRsZTogY2hlY2sudGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9IHNhdGlzZmllcyBBcGlRdWVyeUJhY2tsaW5rc1BhcmFtcylcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaCgoZXJyb3JDb2RlLCBlcnJvckluZm8pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdy5ub3RpZnkoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSB0cnlpbmcgdG8gZ2V0IGJhY2tsaW5rczogJHsoZXJyb3JJbmZvIGFzIE1lZGlhV2lraURhdGFFcnJvcik/LmVycm9yPy5pbmZvID8/ICdVbmtub3duIGVycm9yJ30gKCR7ZXJyb3JDb2RlfSlgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHR5cGU6ICdlcnJvcicgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSkpIGFzIEJhY2tsaW5rc1Jlc3VsdCB8IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLnF1ZXJ5IS5iYWNrbGlua3MubGVuZ3RoO1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoZWNrIG9mIHRoaXMudG9DaGVjay50cmFuc2NsdXNpb25zKVxuICAgICAgICAgICAgICAgIHZvaWQgdGhpcy5oYW5kbGVDaGVjayhjaGVjaywgYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXRhID0gKGF3YWl0IGFwaVxuICAgICAgICAgICAgICAgICAgICAgICAgLmdldCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uOiAncXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3Q6ICdlbWJlZGRlZGluJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlaWxpbWl0OiA1MDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWluYW1lc3BhY2U6IHRoaXMuZ2V0Q2F0ZWdvcnkoY2hlY2spLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVpdGl0bGU6IGNoZWNrLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBzYXRpc2ZpZXMgQXBpUXVlcnlCYWNrbGlua3NQYXJhbXMpXG4gICAgICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGVycm9yQ29kZSwgZXJyb3JJbmZvKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXcubm90aWZ5KFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgdHJ5aW5nIHRvIGdldCB0cmFuc2NsdXNpb25zOiAkeyhlcnJvckluZm8gYXMgTWVkaWFXaWtpRGF0YUVycm9yKT8uZXJyb3I/LmluZm8gPz8gJ1Vua25vd24gZXJyb3InfSAoJHtlcnJvckNvZGV9KWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdHlwZTogJ2Vycm9yJyB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSkgYXMgRW1iZWRkZWRpblJlc3VsdCB8IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZGF0YSkgcmV0dXJuO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBkYXRhLnF1ZXJ5IS5lbWJlZGRlZGluLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZnVsbExpbmtFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ2EnKSEucmVwbGFjZVdpdGgodGhpcy5saW5rKTtcblxuICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdoMiNTdHVmZl90b19tb25pdG9yICsgLm13LWVkaXRzZWN0aW9uJykhLmFmdGVyKGZ1bGxMaW5rRWxlbWVudCk7XG5cbiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy50by1tb25pdG9yLWxpc3QtY291bnQnKSlcbiAgICAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSAnPHNwYW4gc3R5bGU9XCJjb2xvcjogIzAwNzMzZlwiPk5vbmU8L3NwYW4+JztcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIExvYWRzIHRoZSBkYXRhIG9mIGNoZWNrcyB0byBoYW5kbGUuXG4gICAgICovXG4gICAgcHVibGljIGFzeW5jIGxvYWRUb0NoZWNrRGF0YSgpIHtcbiAgICAgICAgdGhpcy50b0NoZWNrID0gSlNPTi5wYXJzZSgoYXdhaXQgZ2V0UGFnZUNvbnRlbnQoJ1VzZXI6RWVqaXQ0My9zY3JpcHRzL3RvLW1vbml0b3ItbGlzdC5qc29uJykpID8/ICd7fScpIGFzIFNlYXJjaERhdGE7XG5cbiAgICAgICAgdGhpcy50b3RhbFRvQ2hlY2sgPSBPYmplY3QudmFsdWVzKHRoaXMudG9DaGVjaykuZmxhdCgpLmxlbmd0aDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBIYW5kbGVzIGEgZ2l2ZW4gY2hlY2suXG4gICAgICogQHBhcmFtIGNoZWNrIFRoZSBjaGVjayBkYXRhIHRvIGhhbmRsZS5cbiAgICAgKiBAcGFyYW0gaGFuZGxlciBUaGUgaGFuZGxlciB0byBmaW5kIHRoZSBjb3VudCBmcm9tIGEgY2hlY2suXG4gICAgICovXG4gICAgcHJpdmF0ZSBhc3luYyBoYW5kbGVDaGVjayhjaGVjazogU2VhcmNoRGF0YUNoZWNrLCBoYW5kbGVyOiAoKSA9PiBQcm9taXNlPG51bWJlciB8IHVuZGVmaW5lZD4pIHtcbiAgICAgICAgY29uc3QgY291bnQgPSBhd2FpdCBoYW5kbGVyKCk7XG4gICAgICAgIGlmIChjb3VudCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG5cbiAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCN0by1tb25pdG9yLWxpc3QtJHtjaGVjay5pZH1gKTtcbiAgICAgICAgaWYgKCFlbGVtZW50KSByZXR1cm4gbXcubm90aWZ5KGBGYWlsZWQgdG8gZmluZCBlbGVtZW50IGZvciBJRCBcIiR7Y2hlY2suaWR9XCJgKTtcbiAgICAgICAgZWxlbWVudC5pbm5lckhUTUwgPVxuICAgICAgICAgICAgY291bnQgPT09IDBcbiAgICAgICAgICAgICAgICA/ICc8c3BhbiBzdHlsZT1cImNvbG9yOiAjMDA3MzNmXCI+Tm9uZTwvc3Bhbj4nXG4gICAgICAgICAgICAgICAgOiBgPGI+PHNwYW4gc3R5bGU9XCJjb2xvcjogI2JkMjgyOFwiPiR7Y291bnQgPT09IDUwMCA/ICc1MDArJyA6IGNvdW50fTwvc3Bhbj48L2I+YDtcblxuICAgICAgICB0aGlzLmhhbmRsZWRSZXF1ZXN0cysrO1xuICAgICAgICB0aGlzLmxpbmsudGV4dENvbnRlbnQgPSBgQWRkIG1pc3NpbmcgY291bnRzICgke3RoaXMuaGFuZGxlZFJlcXVlc3RzfS8ke3RoaXMudG90YWxUb0NoZWNrfSBsb2FkZWQpYDtcblxuICAgICAgICBpZiAodGhpcy5oYW5kbGVkUmVxdWVzdHMgPT09IHRoaXMudG90YWxUb0NoZWNrKVxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSBmYWxzZTtcblxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlZFJlcXVlc3RzID0gMDtcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmsudGV4dENvbnRlbnQgPSAnQWRkIG1pc3NpbmcgY291bnRzJztcbiAgICAgICAgICAgIH0sIDEwMDApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFBhcnNlcyB0aGUgc2VhcmNoZWQgY2F0ZWdvcmllcyBmcm9tIHRoZSBjaGVjayBvYmplY3QuXG4gICAgICogQHBhcmFtIGNoZWNrIFRoZSBjaGVjayBvYmplY3QuXG4gICAgICogQHBhcmFtIGNoZWNrLm5hbWVzcGFjZXMgVGhlIG5hbWVzcGFjZSB0byBzZWFyY2ggaW4uXG4gICAgICogQHBhcmFtIGNoZWNrLm5vdE5hbWVzcGFjZXMgVGhlIG5hbWVzcGFjZXMgdG8gZXhjbHVkZSBmcm9tIHRoZSBzZWFyY2guXG4gICAgICogQHJldHVybnMgVGhlIGNhdGVnb3J5IElEIG9yIGFycmF5IG9mIGNhdGVnb3J5IElEcy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldENhdGVnb3J5KHsgbmFtZXNwYWNlcywgbm90TmFtZXNwYWNlcyB9OiB7IG5hbWVzcGFjZXM/OiBzdHJpbmdbXTsgbm90TmFtZXNwYWNlcz86IHN0cmluZ1tdIH0pIHtcbiAgICAgICAgaWYgKCFuYW1lc3BhY2VzICYmICFub3ROYW1lc3BhY2VzKSByZXR1cm4gMDtcbiAgICAgICAgZWxzZSBpZiAobmFtZXNwYWNlcykge1xuICAgICAgICAgICAgY29uc3QgZm91bmROYW1lc3BhY2VzID0gbmFtZXNwYWNlc1xuICAgICAgICAgICAgICAgIC5tYXAoKG5hbWVzcGFjZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMobXcuY29uZmlnLmdldCgnd2dGb3JtYXR0ZWROYW1lc3BhY2VzJykpLmZpbmQoKFssIG5hbWVzcGFjZU5hbWVdKSA9PiBuYW1lc3BhY2VOYW1lID09PSBuYW1lc3BhY2UpLFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pIGFzIFtzdHJpbmcsIHN0cmluZ11bXTtcblxuICAgICAgICAgICAgcmV0dXJuIGZvdW5kTmFtZXNwYWNlcy5sZW5ndGggPiAwID8gZm91bmROYW1lc3BhY2VzLm1hcCgoZm91bmROYW1lc3BhY2UpID0+IE51bWJlci5wYXJzZUludChmb3VuZE5hbWVzcGFjZVswXSkpIDogMDtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMobXcuY29uZmlnLmdldCgnd2dGb3JtYXR0ZWROYW1lc3BhY2VzJykpXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoWywgbmFtZXNwYWNlTmFtZV0pID0+ICFub3ROYW1lc3BhY2VzIS5pbmNsdWRlcyhuYW1lc3BhY2VOYW1lIHx8ICdBcnRpY2xlJykpXG4gICAgICAgICAgICAgICAgLm1hcCgoW25hbWVzcGFjZUlkXSkgPT4gTnVtYmVyLnBhcnNlSW50KG5hbWVzcGFjZUlkKSk7XG4gICAgfVxufVxuXG5tdy5sb2FkZXIudXNpbmcoWydtZWRpYXdpa2kudXRpbCddLCAoKSA9PiB7XG4gICAgaWYgKG13LmNvbmZpZy5nZXQoJ3dnUGFnZU5hbWUnKSA9PT0gJ1VzZXI6RWVqaXQ0MycpIG5ldyBNb25pdG9yaW5nTGlzdE1hbmFnZXIoKS5sb2FkKCk7XG59KTtcbiJdLAogICJtYXBwaW5ncyI6ICI7OzttQkFHTyxJQUFNQSxFQUFNLElBQUksR0FBRyxJQU0xQixlQUFzQkMsRUFBZUMsRUFBZSxDQUNoRCxPQUNLLE1BQU1GLEVBQUksSUFBSSxDQUNYLE9BQVEsUUFDUixjQUFlLElBQ2YsS0FBTSxZQUNOLE9BQVEsVUFDUixRQUFTLE9BQ1QsT0FBUUUsQ0FDWixDQUFtQyxHQUNyQyxNQUFNLE1BQU0sQ0FBQyxFQUFFLFlBQVksQ0FBQyxFQUFFLE1BQU0sS0FBSyxRQUFRLEtBQUssQ0FDNUQsQ0NKQSxJQUFNQyxFQUFOLEtBQTRCLENBQ2hCLEtBRUEsUUFDQSxhQUVBLFVBQVksR0FFWixnQkFBa0IsRUFLbkIsTUFBTyxDQUNWLEdBQUcsS0FBSyxPQUFPO0FBQUE7QUFBQTtBQUFBLEVBR3JCLEVBRU0sSUFBTUMsRUFBa0IsU0FBUyxjQUFjLGlCQUFpQixFQUFHLFVBQVUsRUFB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dEgsS0FDSSxRQUFPLE9BQU8sUUFBUSxHQUFHLE9BQU8sSUFBSSx1QkFBdUIsQ0FBQyxFQUN2RCxPQUFPLENBQUMsQ0FBQyxDQUFFRCxDQUFhLElBQU0sQ0FBQ0gsRUFBZSxTQUFTRyxHQUFpQixTQUFTLENBQUMsRUFDbEYsSUFBSSxDQUFDLENBQUNFLENBQVcsSUFBTSxPQUFPLFNBQVNBLENBQVcsQ0FBQyxDQUNoRSxDQUNKLEVBRUEsR0FBRyxPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRyxJQUFNLENBQ2xDLEdBQUcsT0FBTyxJQUFJLFlBQVksSUFBTSxnQkFBZ0IsSUFBSWxCLEVBQXNCLEVBQUUsS0FBSyxDQUN6RixDQUFDIiwKICAibmFtZXMiOiBbImFwaSIsICJnZXRQYWdlQ29udGVudCIsICJ0aXRsZSIsICJNb25pdG9yaW5nTGlzdE1hbmFnZXIiLCAiZnVsbExpbmtFbGVtZW50IiwgImV2ZW50IiwgImVsZW1lbnQiLCAiY2hlY2siLCAiZGF0YSIsICJhcGkiLCAiZXJyb3JDb2RlIiwgImVycm9ySW5mbyIsICJnZXRQYWdlQ29udGVudCIsICJoYW5kbGVyIiwgImNvdW50IiwgIm5hbWVzcGFjZXMiLCAibm90TmFtZXNwYWNlcyIsICJmb3VuZE5hbWVzcGFjZXMiLCAibmFtZXNwYWNlIiwgIm5hbWVzcGFjZU5hbWUiLCAiZm91bmROYW1lc3BhY2UiLCAibmFtZXNwYWNlSWQiXQp9Cg==