From 7b5cac4d69c8fad291e374b3140a230dcf8ba358 Mon Sep 17 00:00:00 2001 From: jamie-bitflight Date: Mon, 16 Oct 2023 12:12:17 -0400 Subject: [PATCH] fix(test): inputs test was failing due to node20 bundling error --- dist/index.js | 14 +-- package-lock.json | 282 ++++++++++++++++++++++------------------------ package.json | 4 +- src/inputs.ts | 8 +- 4 files changed, 147 insertions(+), 161 deletions(-) diff --git a/dist/index.js b/dist/index.js index 95eeba06..feab8229 100755 --- a/dist/index.js +++ b/dist/index.js @@ -1,16 +1,16 @@ #!/usr/bin/env node -"use strict";var fu=Object.create;var z=Object.defineProperty;var du=Object.getOwnPropertyDescriptor;var Fu=Object.getOwnPropertyNames;var Au=Object.getPrototypeOf,Cu=Object.prototype.hasOwnProperty;var Eu=(t,u,r,n)=>{if(u&&typeof u=="object"||typeof u=="function")for(let e of Fu(u))!Cu.call(t,e)&&e!==r&&z(t,e,{get:()=>u[e],enumerable:!(n=du(u,e))||n.enumerable});return t};var F=(t,u,r)=>(r=t!=null?fu(Au(t)):{},Eu(u||!t||!t.__esModule?z(r,"default",{value:t,enumerable:!0}):r,t));var Du=F(require("node:fs")),x=F(require("node:path")),au=F(require("js-yaml")),cu=F(require("nconf"));var X=F(require("node:fs")),k=F(require("js-yaml"));var f=F(require("@actions/core")),Q=F(require("chalk")),C=F(require("node-emoji")),mu=0,Z=1,hu=2,w=3,O=5,Bu=6,d=Q.default,P=class t{static ingroup_setting={};static indentWidth=5;static isDebug(){return f.isDebug()||!!process.env.DEBUG}name;constructor(u){this.name=u?.trim(),this.ingroup=!1}get ingroup(){return t.ingroup_setting[this.name]??!1}set ingroup(u){t.ingroup_setting[this.name]=u}async logStep(u,r,n,e=mu){r.length>t.indentWidth&&(t.indentWidth=r.length);let i;switch(r){case"START":{i=d.yellowBright(`${n}`);break}case"INFO":{i=d.green(`${n}`);break}case"WARN":{i=d.yellow(`${n}`);break}case"SUCCESS":{i=d.greenBright(`${n}`);break}case"FAILURE":{i=d.redBright(`${n}`);break}case"ERROR":{i=d.redBright(`${n}`);break}case"#####":{i=d.cyan(`${n}`);break}default:{i=d.white(`${n}`);break}}let o;switch(this.ingroup&&!process.env.GITHUB_ACTIONS?o=`${[...Array.from({length:t.indentWidth}).fill(" ")].join("")} ${u}: ${this.name} > ${i}`:o=`[${[r,...Array.from({length:t.indentWidth-r.length}).fill(" ")].join("")}] ${u}: ${i}`,r){case"START":{o=d.yellowBright(`${o}`);break}case"SUCCESS":{o=d.whiteBright(`${o}`);break}case"FAILURE":{o=d.red(`${o}`);break}case"ERROR":{o=d.red(`${o}`);break}default:break}let c=e===w||e===O;if(process.env.GITHUB_ACTIONS)switch(e){case Z:{f.startGroup(o);break}case hu:{f.endGroup();break}case w:{f.error(d.bgRedBright(o));break}case O:{f.setFailed(d.bgRedBright(o));break}default:f.info(o)}else c?f.error(o):f.info(o)}debug(u=""){t.isDebug()&&u!==""&&this.logStep("\u{1F441}\uFE0F\u200D\u{1F5E8}\uFE0F","DEBUG",u)}start(u=""){let r=u===""?`Starting ${this.name}...`:u;this.logStep(C.get("rocket")??"","START",r,Z)}info(u=""){this.logStep(C.get("sparkles")??"","INFO",u)}warn(u=""){this.logStep(C.get("anger")??"","WARN",u)}success(u="",r=!0){let n=u===""?`Completed ${this.name}.`:u;r&&(this.ingroup=!1,process.env.GITHUB_ACTIONS&&f.endGroup()),this.logStep(C.get("white_check_mark")??"","SUCCESS",n)}fail(u="",r=!0){let n=u===""?`Failed ${this.name}.`:u;r&&(this.ingroup=!1,process.env.GITHUB_ACTIONS&&f.endGroup());let e=process.env.GITHUB_ACTIONS?O:w;this.logStep(C.get("x")??"","FAILURE",n,e)}error(u=""){this.logStep(C.get("x")??"","ERROR",u,w)}title(u=""){this.logStep("\u{1F4D3}","#####",u,Bu)}},a=P;var h=class{name;description;branding;inputs;outputs;runs;constructor(u){let r=new a("action"),n=null;try{r.debug(`loading action.yml from ${u}`),n=k.load(X.readFileSync(u,"utf8")),r.success("loaded configuration successfully")}catch{r.error(`failed to load ${u}`)}(typeof n!="object"||n===null)&&r.error("action.yml file read in isn't an object (no yaml in it)");let e=n;this.name=e.name,this.description=e.description,this.branding=e.branding,this.inputs=e.inputs,this.outputs=e.outputs,this.runs=e.runs}stringify(){try{return k.dump(this,{skipInvalid:!0})}catch{return new a("action:stringify").error("failed to stringify action.yml"),""}}};var B=F(require("node:fs"));var bu=/(?:[\dA-Za-z\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])\S*/g;function yu(t){if(t){if(typeof t!="string")throw new TypeError(`Invalid argument type provided to titlecase(): ${typeof t}`);return t.replaceAll(bu,u=>u[0]?u[0].toUpperCase()+u.slice(1).toLowerCase():u)}}function uu(t,u){let r=new a("repositoryFinder"),e={};if(t)return[e.owner,e.repo]=t.split("/"),r.info(`repositoryFinder using input ${t} and returns ${JSON.stringify(e)}`),e;if(process.env.GITHUB_REPOSITORY)return[e.owner,e.repo]=process.env.GITHUB_REPOSITORY.split("/"),r.info(`repositoryFinder using GITHUB_REPOSITORY ${process.env.GITHUB_REPOSITORY} and returns ${JSON.stringify(e)}`),e;if(u)return e.owner=u.repo.owner,e.repo=u.repo.repo,r.info(`repositoryFinder using GITHUB_REPOSITORY ${process.env.GITHUB_REPOSITORY} and returns ${JSON.stringify(e)}`),e;if(process.env.INPUT_OWNER&&process.env.INPUT_REPO)return e.owner=process.env.INPUT_OWNER,e.repo=process.env.INPUT_REPO,e;try{let i=B.readFileSync(".git/config","utf8"),o=/url( )?=( )?.*github\.com[/:](?.*)\/(?.*)\.git/,c=i.match(o);return c!==null&&(r.debug(JSON.stringify(c.groups)),e.owner=c.groups?.owner??"",e.repo=c.groups?.repo??""),e}catch(i){r.debug(`Couldn't find any owner or repo: ${i}`)}return e}function $(t){if(!t)return"";let u=yu(t.trim().replace(/^[*_~]+/,"").replace(/[*_~]+$/,""));return u?`**${u}**`:""}function I(t){return t?`\`**${t.trim().replace(/^\*+/,"").replace(/\*+$/,"")}**\``:""}function eu(t){let u="",r=new a("getCurrentVersionString");if(t.config.get("versioning:enabled")){r.debug("version string in generated example is enabled");let n=t.config.get("versioning:override"),e=process.env.npm_package_version;if(r.debug(`version string in env:npm_package_version is ${e??"not found"}`),!e){r.debug("version string in env:npm_package_version is not found, trying to use git");try{B.accessSync("package.json"),e=JSON.parse(B.readFileSync("package.json","utf8")).version}catch(i){r.debug(`package.json not found. ${i}`)}r.debug(`version string in package.json:version is ${e??"not found"}`)}u=n&&n.length>0?n:e??"0.0.0",u&&!u.startsWith(t.config.get("versioning:prefix"))&&(u=`${t.config.get("versioning:prefix")}${u}`)}else u=t.config.get("versioning:branch");return r.debug(`version to use in generated example is ${u}`),u}var T=F(require("node:fs")),nu=require("node:os");var U=require("prettier");async function tu(t,u){return(0,U.format)(t,{semi:!1,parser:"markdown",embeddedLanguageFormatting:"auto",...u?{filepath:u}:{}})}async function ru(t,u,r){if(!t)return u??[];let n=r?t.replace(r,""):t,e=await(0,U.format)(`${r??""}${n}`,{semi:!1,parser:"yaml",proseWrap:"always"});return u.push(...e.split(` -`)),u}var vu="",wu="",b=class{filePath;fileContent;constructor(u){this.filePath=u,this.fileContent=T.readFileSync(u,"utf8")}updateSection(u,r){let n=new a(u),e=Array.isArray(r)?r.join(nu.EOL):r;n.info(`Looking for the ${u} token in ${this.filePath}`);let i=vu.replace("%s",u),o=wu.replace("%s",u),c=this.fileContent.indexOf(i),l=this.fileContent.indexOf(o);if(c!==-1&&l!==-1){let g=this.fileContent.slice(0,Math.max(0,c+i.length)),s=this.fileContent.slice(l);this.fileContent=g+e+s}else if(l{if(n.key.startsWith("input_")){let e={key:n.key,value:n.value},i=n.key.replace(/^(INPUT|input)_/,"");switch(i){case"readme":{e.key=H;break}case"action":{e.key=N;break}case"versioning_enabled":{e.key="versioning:enabled";break}case"version_prefix":{e.key="versioning:prefix";break}case"versioning_default_branch":{e.key="versioning:branch";break}case"version_override":{e.key="versioning:override";break}case"include_github_version_badge":{e.key="versioning:badge";break}default:{e.key=i;break}}return e.value&&this.config.set(e.key,e.value),e}}}).argv({save:{alias:"save",describe:`Save this config to ${su}`,parseValues:!0,type:"boolean"},"paths:action":{alias:["pathsAction","action"],type:"string",describe:"Path to the action.yml"},"paths:readme":{alias:["pathsReadme","readme"],type:"string",describe:"Path to the README file"},show_logo:{alias:"logo",describe:"Display the action's logo in the README"},owner:{alias:"owner",describe:"The GitHub Action repository owner. i.e: `bitflight-devops`"},repo:{alias:"repo",describe:"The GitHub Action repository name. i.e: `github-action-readme-generator`"},prettier:{alias:"pretty",describe:"Format the markdown using prettier formatter",parseValues:!0,type:"boolean"},"versioning:enabled":{alias:["versioning","versioning_enabled"],describe:"Enable the update of the usage version to match the latest version in the package.json file",parseValues:!0,type:"boolean"},"versioning:override":{alias:["setversion","versioning_override","version_override"],describe:"Set a specific version to display in the README.md",parseValues:!0},"versioning:prefix":{alias:["vp","version_prefix"],describe:"Prefix the version with this value (if it isn't already prefixed)",parseValues:!0},"versioning:branch":{alias:["branch","versioning_default_branch"],describe:"If versioning is disabled show this branch instead",parseValues:!0},"versioning:badge":{alias:["version-badge","versioning_badge"],describe:"Display the current version as a badge",parseValues:!0,type:"boolean"},title_prefix:{alias:["prefix","title_prefix"],describe:"Add a prefix to the README title",parseValues:!0}}).defaults({save:!0,owner:u?.owner,repo:u?.repo,paths:{action:"action.yml",readme:"README.md"},show_logo:!0,pretty:!0,versioning:{enabled:!0,override:"",prefix:"v",branch:"main",badges:!0},title_prefix:"GitHub Action: ",sections:["title","description","usage","inputs","outputs","contents","badges"]}).required(["owner","repo"]),this.sections=this.config.get("sections"),this.readmePath=x.resolve(this.config.get(H));let r=x.resolve(this.config.get(N));this.action=new h(r),this.readmeEditor=new b(this.readmePath),a.isDebug()&&(m.debug("resolved inputs:"),m.debug(this.stringify()),m.debug("resolved action:"),m.debug(this.action.stringify()))}stringify(){if(this){let u=[];for(let r of ku)u.push(`${r}: ${this.config.get(r)}`);return au.dump(u,{skipInvalid:!0})}return""}};var j=F(require("node:fs")),pu=F(require("node:path"));var S=class{owner;repo;title_prefix;title;paths;show_logo;versioning;readmePath;outpath;pretty;loadInputs(u){this.owner=u.config.get("owner"),this.repo=u.config.get("repo"),this.title_prefix=u.config.get("title_prefix"),this.title=u.config.get("title"),this.paths=u.config.get("paths"),this.show_logo=u.config.get("show_logo"),this.versioning={enabled:u.config.get("versioning:enabled"),prefix:u.config.get("versioning:prefix"),override:u.config.get("versioning:override"),branch:u.config.get("versioning:branch")},this.outpath=u.config.get("outpath"),this.pretty=u.config.get("pretty")}save(u){let r=new a("config:save"),n=pu.default.dirname(u);return j.default.mkdir(n,{recursive:!0},e=>{e&&r.error(`Error creating directory: ${n}. Error: ${e}`)}),j.default.writeFile(u,JSON.stringify(this,null,2),e=>{e?r.error(`Error writing config file: ${u}. Error: ${e}`):r.info(`Config file written to: ${u}`)})}};function G(t){let u=new S;u.loadInputs(t),t.config.get("save").toString()==="true"&&u.save(t.configPath)}function L(t,u){let r=new a(t),n=u.config.get("versioning:badges"),e=[],i={owner:u.config.get("owner"),repo:u.config.get("repo")};function o(){let s=`https://github.com/${i.owner}/${i.repo}`;return[{img:`https://img.shields.io/github/v/release/${i.owner}/${i.repo}?display_name=tag&sort=semver&logo=github&style=flat-square`,alt:"Release",url:`${s}/releases/latest`},{img:`https://img.shields.io/github/release-date/${i.owner}/${i.repo}?display_name=tag&sort=semver&logo=github&style=flat-square`,alt:"Release",url:`${s}/releases/latest`},{img:`https://img.shields.io/github/last-commit/${i.owner}/${i.repo}?logo=github&style=flat-square`,alt:"Commit"},{img:`https://img.shields.io/github/issues/${i.owner}/${i.repo}?logo=github&style=flat-square`,alt:"Open Issues",url:`${s}/issues`},{img:`https://img.shields.io/github/downloads/${i.owner}/${i.repo}/total?logo=github&style=flat-square`,alt:"Downloads"}]}function c(s){let D=`${s.alt||`;return s.url?`${D}`:D}function l(){let s=[];for(let D of e)s.push(c(D));return[s.join("")]}r.start(),n&&e.push(...o());let g=l();u.readmeEditor.updateSection(t,g),r.success()}function V(t,u){let r=new a(t),n=[];if(u?.action?.description){r.start();let e=u.action.description.trim().replaceAll(`\r +"use strict";var fu=Object.create;var Z=Object.defineProperty;var du=Object.getOwnPropertyDescriptor;var Fu=Object.getOwnPropertyNames;var Au=Object.getPrototypeOf,Cu=Object.prototype.hasOwnProperty;var Eu=(t,u,r,n)=>{if(u&&typeof u=="object"||typeof u=="function")for(let e of Fu(u))!Cu.call(t,e)&&e!==r&&Z(t,e,{get:()=>u[e],enumerable:!(n=du(u,e))||n.enumerable});return t};var F=(t,u,r)=>(r=t!=null?fu(Au(t)):{},Eu(u||!t||!t.__esModule?Z(r,"default",{value:t,enumerable:!0}):r,t));var S=F(require("node:fs")),T=F(require("node:path")),au=F(require("js-yaml")),cu=F(require("nconf"));var uu=F(require("node:fs")),k=F(require("js-yaml"));var f=F(require("@actions/core")),X=F(require("chalk")),E=F(require("node-emoji")),mu=0,Q=1,hu=2,w=3,P=5,Bu=6,d=X.default,U=class t{static ingroup_setting={};static indentWidth=5;static isDebug(){return f.isDebug()||!!process.env.DEBUG}name;constructor(u){this.name=u?.trim(),this.ingroup=!1}get ingroup(){return t.ingroup_setting[this.name]??!1}set ingroup(u){t.ingroup_setting[this.name]=u}async logStep(u,r,n,e=mu){r.length>t.indentWidth&&(t.indentWidth=r.length);let i;switch(r){case"START":{i=d.yellowBright(`${n}`);break}case"INFO":{i=d.green(`${n}`);break}case"WARN":{i=d.yellow(`${n}`);break}case"SUCCESS":{i=d.greenBright(`${n}`);break}case"FAILURE":{i=d.redBright(`${n}`);break}case"ERROR":{i=d.redBright(`${n}`);break}case"#####":{i=d.cyan(`${n}`);break}default:{i=d.white(`${n}`);break}}let o;switch(this.ingroup&&!process.env.GITHUB_ACTIONS?o=`${[...Array.from({length:t.indentWidth}).fill(" ")].join("")} ${u}: ${this.name} > ${i}`:o=`[${[r,...Array.from({length:t.indentWidth-r.length}).fill(" ")].join("")}] ${u}: ${i}`,r){case"START":{o=d.yellowBright(`${o}`);break}case"SUCCESS":{o=d.whiteBright(`${o}`);break}case"FAILURE":{o=d.red(`${o}`);break}case"ERROR":{o=d.red(`${o}`);break}default:break}let c=e===w||e===P;if(process.env.GITHUB_ACTIONS)switch(e){case Q:{f.startGroup(o);break}case hu:{f.endGroup();break}case w:{f.error(d.bgRedBright(o));break}case P:{f.setFailed(d.bgRedBright(o));break}default:f.info(o)}else c?f.error(o):f.info(o)}debug(u=""){t.isDebug()&&u!==""&&this.logStep("\u{1F441}\uFE0F\u200D\u{1F5E8}\uFE0F","DEBUG",u)}start(u=""){let r=u===""?`Starting ${this.name}...`:u;this.logStep(E.get("rocket")??"","START",r,Q)}info(u=""){this.logStep(E.get("sparkles")??"","INFO",u)}warn(u=""){this.logStep(E.get("anger")??"","WARN",u)}success(u="",r=!0){let n=u===""?`Completed ${this.name}.`:u;r&&(this.ingroup=!1,process.env.GITHUB_ACTIONS&&f.endGroup()),this.logStep(E.get("white_check_mark")??"","SUCCESS",n)}fail(u="",r=!0){let n=u===""?`Failed ${this.name}.`:u;r&&(this.ingroup=!1,process.env.GITHUB_ACTIONS&&f.endGroup());let e=process.env.GITHUB_ACTIONS?P:w;this.logStep(E.get("x")??"","FAILURE",n,e)}error(u=""){this.logStep(E.get("x")??"","ERROR",u,w)}title(u=""){this.logStep("\u{1F4D3}","#####",u,Bu)}},a=U;var h=class{name;description;branding;inputs;outputs;runs;constructor(u){let r=new a("action"),n=null;try{r.debug(`loading action.yml from ${u}`),n=k.load(uu.readFileSync(u,"utf8")),r.success("loaded configuration successfully")}catch{r.error(`failed to load ${u}`)}(typeof n!="object"||n===null)&&r.error("action.yml file read in isn't an object (no yaml in it)");let e=n;this.name=e.name,this.description=e.description,this.branding=e.branding,this.inputs=e.inputs,this.outputs=e.outputs,this.runs=e.runs}stringify(){try{return k.dump(this,{skipInvalid:!0})}catch{return new a("action:stringify").error("failed to stringify action.yml"),""}}};var B=F(require("node:fs"));var bu=/(?:[\dA-Za-z\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])\S*/g;function yu(t){if(t){if(typeof t!="string")throw new TypeError(`Invalid argument type provided to titlecase(): ${typeof t}`);return t.replaceAll(bu,u=>u[0]?u[0].toUpperCase()+u.slice(1).toLowerCase():u)}}function eu(t,u){let r=new a("repositoryFinder"),e={};if(t)return[e.owner,e.repo]=t.split("/"),r.info(`repositoryFinder using input ${t} and returns ${JSON.stringify(e)}`),e;if(process.env.GITHUB_REPOSITORY)return[e.owner,e.repo]=process.env.GITHUB_REPOSITORY.split("/"),r.info(`repositoryFinder using GITHUB_REPOSITORY ${process.env.GITHUB_REPOSITORY} and returns ${JSON.stringify(e)}`),e;if(u)return e.owner=u.repo.owner,e.repo=u.repo.repo,r.info(`repositoryFinder using GITHUB_REPOSITORY ${process.env.GITHUB_REPOSITORY} and returns ${JSON.stringify(e)}`),e;if(process.env.INPUT_OWNER&&process.env.INPUT_REPO)return e.owner=process.env.INPUT_OWNER,e.repo=process.env.INPUT_REPO,e;try{let i=B.readFileSync(".git/config","utf8"),o=/url( )?=( )?.*github\.com[/:](?.*)\/(?.*)\.git/,c=i.match(o);return c!==null&&(r.debug(JSON.stringify(c.groups)),e.owner=c.groups?.owner??"",e.repo=c.groups?.repo??""),e}catch(i){r.debug(`Couldn't find any owner or repo: ${i}`)}return e}function $(t){if(!t)return"";let u=yu(t.trim().replace(/^[*_~]+/,"").replace(/[*_~]+$/,""));return u?`**${u}**`:""}function x(t){return t?`\`**${t.trim().replace(/^\*+/,"").replace(/\*+$/,"")}**\``:""}function tu(t){let u="",r=new a("getCurrentVersionString");if(t.config.get("versioning:enabled")){r.debug("version string in generated example is enabled");let n=t.config.get("versioning:override"),e=process.env.npm_package_version;if(r.debug(`version string in env:npm_package_version is ${e??"not found"}`),!e){r.debug("version string in env:npm_package_version is not found, trying to use git");try{B.accessSync("package.json"),e=JSON.parse(B.readFileSync("package.json","utf8")).version}catch(i){r.debug(`package.json not found. ${i}`)}r.debug(`version string in package.json:version is ${e??"not found"}`)}u=n&&n.length>0?n:e??"0.0.0",u&&!u.startsWith(t.config.get("versioning:prefix"))&&(u=`${t.config.get("versioning:prefix")}${u}`)}else u=t.config.get("versioning:branch");return r.debug(`version to use in generated example is ${u}`),u}var I=F(require("node:fs")),iu=require("node:os");var N=require("prettier");async function ru(t,u){return(0,N.format)(t,{semi:!1,parser:"markdown",embeddedLanguageFormatting:"auto",...u?{filepath:u}:{}})}async function nu(t,u,r){if(!t)return u??[];let n=r?t.replace(r,""):t,e=await(0,N.format)(`${r??""}${n}`,{semi:!1,parser:"yaml",proseWrap:"always"});return u.push(...e.split(` +`)),u}var vu="",wu="",b=class{filePath;fileContent;constructor(u){this.filePath=u,this.fileContent=I.readFileSync(u,"utf8")}updateSection(u,r){let n=new a(u),e=Array.isArray(r)?r.join(iu.EOL):r;n.info(`Looking for the ${u} token in ${this.filePath}`);let i=vu.replace("%s",u),o=wu.replace("%s",u),c=this.fileContent.indexOf(i),l=this.fileContent.indexOf(o);if(c!==-1&&l!==-1){let g=this.fileContent.slice(0,Math.max(0,c+i.length)),s=this.fileContent.slice(l);this.fileContent=g+e+s}else if(l{if(n.key.startsWith("input_")){let e={key:n.key,value:n.value},i=n.key.replace(/^(INPUT|input)_/,"");switch(i){case"readme":{e.key=j;break}case"action":{e.key=H;break}case"versioning_enabled":{e.key="versioning:enabled";break}case"version_prefix":{e.key="versioning:prefix";break}case"versioning_default_branch":{e.key="versioning:branch";break}case"version_override":{e.key="versioning:override";break}case"include_github_version_badge":{e.key="versioning:badge";break}default:{e.key=i;break}}return e.value&&this.config.set(e.key,e.value),e}}}).argv({save:{alias:"save",describe:`Save this config to ${Du}`,parseValues:!0,type:"boolean"},"paths:action":{alias:["pathsAction","action"],type:"string",describe:"Path to the action.yml"},"paths:readme":{alias:["pathsReadme","readme"],type:"string",describe:"Path to the README file"},show_logo:{alias:"logo",describe:"Display the action's logo in the README"},owner:{alias:"owner",describe:"The GitHub Action repository owner. i.e: `bitflight-devops`"},repo:{alias:"repo",describe:"The GitHub Action repository name. i.e: `github-action-readme-generator`"},prettier:{alias:"pretty",describe:"Format the markdown using prettier formatter",parseValues:!0,type:"boolean"},"versioning:enabled":{alias:["versioning","versioning_enabled"],describe:"Enable the update of the usage version to match the latest version in the package.json file",parseValues:!0,type:"boolean"},"versioning:override":{alias:["setversion","versioning_override","version_override"],describe:"Set a specific version to display in the README.md",parseValues:!0},"versioning:prefix":{alias:["vp","version_prefix"],describe:"Prefix the version with this value (if it isn't already prefixed)",parseValues:!0},"versioning:branch":{alias:["branch","versioning_default_branch"],describe:"If versioning is disabled show this branch instead",parseValues:!0},"versioning:badge":{alias:["version-badge","versioning_badge"],describe:"Display the current version as a badge",parseValues:!0,type:"boolean"},title_prefix:{alias:["prefix","title_prefix"],describe:"Add a prefix to the README title",parseValues:!0}}).file(this.configPath).defaults({save:!0,owner:u?.owner,repo:u?.repo,paths:{action:"action.yml",readme:"README.md"},show_logo:!0,pretty:!0,versioning:{enabled:!0,override:"",prefix:"v",branch:"main",badges:!0},title_prefix:"GitHub Action: ",sections:["title","description","usage","inputs","outputs","contents","badges"]}).required(["owner","repo"]),this.sections=this.config.get("sections"),this.readmePath=T.resolve(this.config.get(j));let r=T.resolve(this.config.get(H));this.action=new h(r),this.readmeEditor=new b(this.readmePath),a.isDebug()&&(A.debug("resolved inputs:"),A.debug(this.stringify()),A.debug("resolved action:"),A.debug(this.action.stringify()))}stringify(){if(this){let u=[];for(let r of ku)u.push(`${r}: ${this.config.get(r)}`);return au.dump(u,{skipInvalid:!0})}return""}};var G=F(require("node:fs")),pu=F(require("node:path"));var _=class{owner;repo;title_prefix;title;paths;show_logo;versioning;readmePath;outpath;pretty;loadInputs(u){this.owner=u.config.get("owner"),this.repo=u.config.get("repo"),this.title_prefix=u.config.get("title_prefix"),this.title=u.config.get("title"),this.paths=u.config.get("paths"),this.show_logo=u.config.get("show_logo"),this.versioning={enabled:u.config.get("versioning:enabled"),prefix:u.config.get("versioning:prefix"),override:u.config.get("versioning:override"),branch:u.config.get("versioning:branch")},this.outpath=u.config.get("outpath"),this.pretty=u.config.get("pretty")}save(u){let r=new a("config:save"),n=pu.default.dirname(u);return G.default.mkdir(n,{recursive:!0},e=>{e&&r.error(`Error creating directory: ${n}. Error: ${e}`)}),G.default.writeFile(u,JSON.stringify(this,null,2),e=>{e?r.error(`Error writing config file: ${u}. Error: ${e}`):r.info(`Config file written to: ${u}`)})}};function L(t){let u=new _;u.loadInputs(t),t.config.get("save").toString()==="true"&&u.save(t.configPath)}function V(t,u){let r=new a(t),n=u.config.get("versioning:badges"),e=[],i={owner:u.config.get("owner"),repo:u.config.get("repo")};function o(){let s=`https://github.com/${i.owner}/${i.repo}`;return[{img:`https://img.shields.io/github/v/release/${i.owner}/${i.repo}?display_name=tag&sort=semver&logo=github&style=flat-square`,alt:"Release",url:`${s}/releases/latest`},{img:`https://img.shields.io/github/release-date/${i.owner}/${i.repo}?display_name=tag&sort=semver&logo=github&style=flat-square`,alt:"Release",url:`${s}/releases/latest`},{img:`https://img.shields.io/github/last-commit/${i.owner}/${i.repo}?logo=github&style=flat-square`,alt:"Commit"},{img:`https://img.shields.io/github/issues/${i.owner}/${i.repo}?logo=github&style=flat-square`,alt:"Open Issues",url:`${s}/issues`},{img:`https://img.shields.io/github/downloads/${i.owner}/${i.repo}/total?logo=github&style=flat-square`,alt:"Downloads"}]}function c(s){let D=`${s.alt||`;return s.url?`${D}`:D}function l(){let s=[];for(let D of e)s.push(c(D));return[s.join("")]}r.start(),n&&e.push(...o());let g=l();u.readmeEditor.updateSection(t,g),r.success()}function W(t,u){let r=new a(t),n=[];if(u?.action?.description){r.start();let e=u.action.description.trim().replaceAll(`\r `,` `).replaceAll(/ +/g," ").replaceAll(` `,` `).replaceAll(` `,"
");r.info(`Writing ${e.length} characters to the description section`),n.push(e),u.readmeEditor.updateSection(t,n),r.success()}}function $u(t){return t.replaceAll(` -`,"
").replaceAll("|","\\|")}function Iu(t){return t.includes("|")?t.replaceAll(/([\s*_]|^)`([^`]+)`([\s*_]|$)/g,"$1$2$3"):t}function Tu(t){let u=[],r=[];for(let D of t)u.push([...D]);let n=u.length,e=0,i=0,o=0;for(let D of u){if(u[o]!==void 0){let p=D.length;p>e&&(e=p),(p1?s-1:0,lu=u[A];for(let E=0;E0){r.start();for(let g of Object.keys(c)){let s=c[g],D=s?.description??"",p=D.match(`(.*?) +`,"
").replaceAll("|","\\|")}function xu(t){return t.includes("|")?t.replaceAll(/([\s*_]|^)`([^`]+)`([\s*_]|$)/g,"$1$2$3"):t}function Iu(t){let u=[],r=[];for(let D of t)u.push([...D]);let n=u.length,e=0,i=0,o=0;for(let D of u){if(u[o]!==void 0){let p=D.length;p>e&&(e=p),(p1?s-1:0,lu=u[C];for(let m=0;m0){r.start();for(let g of Object.keys(c)){let s=c[g],D=s?.description??"",p=D.match(`(.*?) ([Ss]*)`);p&&p.length>=2&&(D=p[1]||D),D=D.trim().replace(` -`,"
");let A=[I(g),D,s?.default?`\`${s.default}\``:"",s?.required?"**true**":"__false__"];r.debug(JSON.stringify(A)),e.push(A)}n.push(_(e)),r.info(`Action has ${l} total ${t}`),u.readmeEditor.updateSection(t,n),r.success()}else r.debug(`Action has no ${t}`)}function M(t,u){let r=new a(t),n=[],e=[],i=["Output","Description"],o=[];for(let g of i)o.push($(g));e.push(o);let c=u.action.outputs,l=c?Object.keys(c).length:0;if(l>0){r.start();for(let g of Object.keys(c)){let D=c[g]?.description??"",p=/(.*?)\n\n([Ss]*)/.exec(D);p&&p.length>=2&&(D=p[1]||D),D=D.trim().replace(` -`,"
");let A=[I(g),D];r.debug(JSON.stringify(A)),e.push(A)}n.push(_(e)),r.info(`Action has ${l} total ${t}`),u.readmeEditor.updateSection(t,n),r.success()}else r.debug(`Action has no ${t}`)}function J(t,u){let r=new a(t),n=[],e="";if(u.action.name){r.start(),e=u.action.name,r.info(`Writing ${e.length} characters to the title`);let i=`# ${u.config.get("title_prefix")}${u.action.name}`;r.info(`Title: ${i}`),n.push(i),u.readmeEditor.updateSection(t,n),r.success()}}function q(t,u){let r=new a(t);r.start();let n=`${u.config.get("owner")}/${u.config.get("repo")}`;r.info(`Action name: ${n}`);let e=eu(u);r.info(`Version string: ${e}`);let i=`${n}@${e}`;if(!i)throw new Error("Parameter actionReference must not be empty");let o=[];o.push("```yaml",`- uses: ${i}`," with:");let c=u.action.inputs,l=!0;if(c)for(let g of Object.keys(c)){let s=c[g];s!==void 0&&(l||o.push(""),ru(s.description,o," # "),s.default!==void 0&&(s.description?.trimEnd().match(/\n *\r?\n/)&&o.push(" #"),o.push(` # Default: ${s.default}`)),o.push(` ${g}: ''`),l=!1)}o.push("```\n"),u.readmeEditor.updateSection(t,o),r.success()}function Y(t,u){let r=new a("updateSection");switch(t){case"badges":{L(t,u);break}case"usage":{q(t,u);break}case"title":{J(t,u);break}case"description":{V(t,u);break}case"inputs":{W(t,u);break}case"outputs":{M(t,u);break}default:r.debug(`unknown section ${t}`)}}var R=new y;function K(){let t=new a("generating readme");for(let u of R.sections)try{Y(u,R)}catch(r){r&&"message"in r&&r.message&&t.error(`Error occured in section ${u}. ${r.message}`)}R.readmeEditor.dumpToFile(),G(R)}K(); -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2lucHV0cy50cyIsICIuLi9zcmMvQWN0aW9uLnRzIiwgIi4uL3NyYy9sb2d0YXNrL2luZGV4LnRzIiwgIi4uL3NyYy9oZWxwZXJzLnRzIiwgIi4uL3NyYy9yZWFkbWUtZWRpdG9yLnRzIiwgIi4uL3NyYy9wcmV0dGllci50cyIsICIuLi9zcmMvd29ya2luZy1kaXJlY3RvcnkudHMiLCAiLi4vc3JjL2NvbmZpZy50cyIsICIuLi9zcmMvc2F2ZS50cyIsICIuLi9zcmMvc2VjdGlvbnMvdXBkYXRlLWJhZGdlcy50cyIsICIuLi9zcmMvc2VjdGlvbnMvdXBkYXRlLWRlc2NyaXB0aW9uLnRzIiwgIi4uL3NyYy9tYXJrZG93bmVyL2luZGV4LnRzIiwgIi4uL3NyYy9zZWN0aW9ucy91cGRhdGUtaW5wdXRzLnRzIiwgIi4uL3NyYy9zZWN0aW9ucy91cGRhdGUtb3V0cHV0cy50cyIsICIuLi9zcmMvc2VjdGlvbnMvdXBkYXRlLXRpdGxlLnRzIiwgIi4uL3NyYy9zZWN0aW9ucy91cGRhdGUtdXNhZ2UudHMiLCAiLi4vc3JjL3NlY3Rpb25zL2luZGV4LnRzIiwgIi4uL3NyYy9nZW5lcmF0ZS1kb2NzLnRzIiwgIi4uL3NyYy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1lbWJlci1hY2Nlc3NpYmlsaXR5ICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgdHlwZSB7IENvbnRleHQgfSBmcm9tICdAYWN0aW9ucy9naXRodWIvbGliL2NvbnRleHQnO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tICdqcy15YW1sJztcbmltcG9ydCAqIGFzIG5jb25mIGZyb20gJ25jb25mJztcblxuaW1wb3J0IEFjdGlvbiBmcm9tICcuL0FjdGlvbic7XG5pbXBvcnQgeyByZXBvc2l0b3J5RmluZGVyIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCBMb2dUYXNrIGZyb20gJy4vbG9ndGFzayc7XG5pbXBvcnQgUmVhZG1lRWRpdG9yIGZyb20gJy4vcmVhZG1lLWVkaXRvcic7XG5pbXBvcnQgeyB3b3JraW5nRGlyZWN0b3J5IH0gZnJvbSAnLi93b3JraW5nLWRpcmVjdG9yeSc7XG5cbmNvbnN0IGxvZyA9IG5ldyBMb2dUYXNrKCdpbnB1dHMnKTtcbnByb2Nlc3MuY2hkaXIod29ya2luZ0RpcmVjdG9yeSgpKTtcbmNvbnN0IGdpdGh1YkV2ZW50UGF0aCA9IHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRIID8/ICcnO1xubGV0IGdpdGh1YkV2ZW50OiBDb250ZXh0IHwgbnVsbCA9IG51bGw7XG50cnkge1xuICBnaXRodWJFdmVudCA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGdpdGh1YkV2ZW50UGF0aCwgJ3V0ZjgnKSkgYXMgQ29udGV4dDtcbn0gY2F0Y2gge1xuICAvLyBGaWxlIG5vdCB0aGVyZVxuICBsb2cuZGVidWcoYEdJVEhVQl9FVkVOVF9QQVRIIG5vdCBmb3VuZDogJHtnaXRodWJFdmVudFBhdGh9YCk7XG59XG5leHBvcnQgY29uc3QgY29uZmlnRmlsZU5hbWUgPSAnLmdoYWRvY3MuanNvbic7XG5jb25zdCBwYXRoc0FjdGlvbiA9ICdwYXRoczphY3Rpb24nO1xuY29uc3QgcGF0aHNSZWFkbWUgPSAncGF0aHM6cmVhZG1lJztcbmV4cG9ydCBjb25zdCBjb25maWdLZXlzOiBzdHJpbmdbXSA9IFtcbiAgJ3NhdmUnLFxuICBwYXRoc0FjdGlvbixcbiAgcGF0aHNSZWFkbWUsXG4gICdzaG93X2xvZ28nLFxuICAndmVyc2lvbmluZzplbmFibGVkJyxcbiAgJ3ZlcnNpb25pbmc6b3ZlcnJpZGUnLFxuICAndmVyc2lvbmluZzpwcmVmaXgnLFxuICAndmVyc2lvbmluZzpicmFuY2gnLFxuICAnb3duZXInLFxuICAncmVwbycsXG4gICd0aXRsZV9wcmVmaXgnLFxuICAncHJldHR5JyxcbiAgJ2luY2x1ZGVfZ2l0aHViX3ZlcnNpb25fYmFkZ2UnLFxuXTtcbmludGVyZmFjZSBLVlBhaXJUeXBlIHtcbiAga2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnB1dHMge1xuICBwdWJsaWMgY29uZmlnOiBuY29uZi5Qcm92aWRlcjtcblxuICBwdWJsaWMgc2VjdGlvbnM6IHN0cmluZ1tdO1xuXG4gIHB1YmxpYyByZWFkbWVQYXRoOiBzdHJpbmc7XG5cbiAgcHVibGljIGNvbmZpZ1BhdGg6IHN0cmluZztcblxuICBwdWJsaWMgYWN0aW9uOiBBY3Rpb247XG5cbiAgcHVibGljIHJlYWRtZUVkaXRvcjogUmVhZG1lRWRpdG9yO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29uZmlnUGF0aCA9IHBhdGgucmVzb2x2ZShjb25maWdGaWxlTmFtZSk7XG4gICAgdGhpcy5jb25maWcgPSBuZXcgbmNvbmYuUHJvdmlkZXIoKTtcbiAgICBjb25zdCByZXBvc2l0b3J5RGV0YWlsID0gcmVwb3NpdG9yeUZpbmRlcihudWxsLCBnaXRodWJFdmVudCk7XG4gICAgaWYgKHByb2Nlc3MuZW52LkdJVEhVQl9BQ1RJT04pIHtcbiAgICAgIGxvZy5pbmZvKCdydW5uaW5nIGluIEdpdEh1YiBhY3Rpb24nKTtcbiAgICB9XG4gICAgdGhpcy5jb25maWdcbiAgICAgIC51c2UoJ21lbW9yeScpXG4gICAgICAuZmlsZSh7IGZpbGU6IHRoaXMuY29uZmlnUGF0aCB9KVxuICAgICAgLmVudih7XG4gICAgICAgIGxvd2VyQ2FzZTogdHJ1ZSxcbiAgICAgICAgcGFyc2VWYWx1ZXM6IHRydWUsXG4gICAgICAgIG1hdGNoOiAvXklOUFVUXy8sXG4gICAgICAgIHRyYW5zZm9ybTogKG9iajogS1ZQYWlyVHlwZSk6IHVuZGVmaW5lZCB8IEtWUGFpclR5cGUgPT4ge1xuICAgICAgICAgIGlmIChvYmoua2V5LnN0YXJ0c1dpdGgoJ2lucHV0XycpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdPYmo6IEtWUGFpclR5cGUgPSB7XG4gICAgICAgICAgICAgIGtleTogb2JqLmtleSxcbiAgICAgICAgICAgICAgdmFsdWU6IG9iai52YWx1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBrZXlQYXJzZWQgPSBvYmoua2V5LnJlcGxhY2UoL14oSU5QVVR8aW5wdXQpXy8sICcnKTtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5UGFyc2VkKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3JlYWRtZSc6IHtcbiAgICAgICAgICAgICAgICBuZXdPYmoua2V5ID0gcGF0aHNSZWFkbWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSAnYWN0aW9uJzoge1xuICAgICAgICAgICAgICAgIG5ld09iai5rZXkgPSBwYXRoc0FjdGlvbjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlICd2ZXJzaW9uaW5nX2VuYWJsZWQnOiB7XG4gICAgICAgICAgICAgICAgbmV3T2JqLmtleSA9ICd2ZXJzaW9uaW5nOmVuYWJsZWQnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgJ3ZlcnNpb25fcHJlZml4Jzoge1xuICAgICAgICAgICAgICAgIG5ld09iai5rZXkgPSAndmVyc2lvbmluZzpwcmVmaXgnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgJ3ZlcnNpb25pbmdfZGVmYXVsdF9icmFuY2gnOiB7XG4gICAgICAgICAgICAgICAgbmV3T2JqLmtleSA9ICd2ZXJzaW9uaW5nOmJyYW5jaCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSAndmVyc2lvbl9vdmVycmlkZSc6IHtcbiAgICAgICAgICAgICAgICBuZXdPYmoua2V5ID0gJ3ZlcnNpb25pbmc6b3ZlcnJpZGUnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgJ2luY2x1ZGVfZ2l0aHViX3ZlcnNpb25fYmFkZ2UnOiB7XG4gICAgICAgICAgICAgICAgbmV3T2JqLmtleSA9ICd2ZXJzaW9uaW5nOmJhZGdlJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgbmV3T2JqLmtleSA9IGtleVBhcnNlZDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5ld09iai52YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zZXQobmV3T2JqLmtleSwgbmV3T2JqLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXdPYmo7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLmFyZ3Yoe1xuICAgICAgICAnc2F2ZSc6IHtcbiAgICAgICAgICBhbGlhczogJ3NhdmUnLFxuICAgICAgICAgIGRlc2NyaWJlOiBgU2F2ZSB0aGlzIGNvbmZpZyB0byAke2NvbmZpZ0ZpbGVOYW1lfWAsXG4gICAgICAgICAgcGFyc2VWYWx1ZXM6IHRydWUsXG4gICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICB9LFxuICAgICAgICAncGF0aHM6YWN0aW9uJzoge1xuICAgICAgICAgIGFsaWFzOiBbJ3BhdGhzQWN0aW9uJywgJ2FjdGlvbiddLFxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIGRlc2NyaWJlOiAnUGF0aCB0byB0aGUgYWN0aW9uLnltbCcsXG4gICAgICAgIH0sXG4gICAgICAgICdwYXRoczpyZWFkbWUnOiB7XG4gICAgICAgICAgYWxpYXM6IFsncGF0aHNSZWFkbWUnLCAncmVhZG1lJ10sXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgZGVzY3JpYmU6ICdQYXRoIHRvIHRoZSBSRUFETUUgZmlsZScsXG4gICAgICAgIH0sXG4gICAgICAgICdzaG93X2xvZ28nOiB7XG4gICAgICAgICAgYWxpYXM6ICdsb2dvJyxcbiAgICAgICAgICBkZXNjcmliZTogXCJEaXNwbGF5IHRoZSBhY3Rpb24ncyBsb2dvIGluIHRoZSBSRUFETUVcIixcbiAgICAgICAgfSxcbiAgICAgICAgJ293bmVyJzoge1xuICAgICAgICAgIGFsaWFzOiAnb3duZXInLFxuICAgICAgICAgIGRlc2NyaWJlOiAnVGhlIEdpdEh1YiBBY3Rpb24gcmVwb3NpdG9yeSBvd25lci4gaS5lOiBgYml0ZmxpZ2h0LWRldm9wc2AnLFxuICAgICAgICB9LFxuICAgICAgICAncmVwbyc6IHtcbiAgICAgICAgICBhbGlhczogJ3JlcG8nLFxuICAgICAgICAgIGRlc2NyaWJlOiAnVGhlIEdpdEh1YiBBY3Rpb24gcmVwb3NpdG9yeSBuYW1lLiBpLmU6IGBnaXRodWItYWN0aW9uLXJlYWRtZS1nZW5lcmF0b3JgJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByZXR0aWVyJzoge1xuICAgICAgICAgIGFsaWFzOiAncHJldHR5JyxcbiAgICAgICAgICBkZXNjcmliZTogJ0Zvcm1hdCB0aGUgbWFya2Rvd24gdXNpbmcgcHJldHRpZXIgZm9ybWF0dGVyJyxcbiAgICAgICAgICBwYXJzZVZhbHVlczogdHJ1ZSxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIH0sXG4gICAgICAgICd2ZXJzaW9uaW5nOmVuYWJsZWQnOiB7XG4gICAgICAgICAgYWxpYXM6IFsndmVyc2lvbmluZycsICd2ZXJzaW9uaW5nX2VuYWJsZWQnXSxcbiAgICAgICAgICBkZXNjcmliZTpcbiAgICAgICAgICAgICdFbmFibGUgdGhlIHVwZGF0ZSBvZiB0aGUgdXNhZ2UgdmVyc2lvbiB0byBtYXRjaCB0aGUgbGF0ZXN0IHZlcnNpb24gaW4gdGhlIHBhY2thZ2UuanNvbiBmaWxlJyxcbiAgICAgICAgICBwYXJzZVZhbHVlczogdHJ1ZSxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIH0sXG4gICAgICAgICd2ZXJzaW9uaW5nOm92ZXJyaWRlJzoge1xuICAgICAgICAgIGFsaWFzOiBbJ3NldHZlcnNpb24nLCAndmVyc2lvbmluZ19vdmVycmlkZScsICd2ZXJzaW9uX292ZXJyaWRlJ10sXG4gICAgICAgICAgZGVzY3JpYmU6ICdTZXQgYSBzcGVjaWZpYyB2ZXJzaW9uIHRvIGRpc3BsYXkgaW4gdGhlIFJFQURNRS5tZCcsXG4gICAgICAgICAgcGFyc2VWYWx1ZXM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgICd2ZXJzaW9uaW5nOnByZWZpeCc6IHtcbiAgICAgICAgICBhbGlhczogWyd2cCcsICd2ZXJzaW9uX3ByZWZpeCddLFxuICAgICAgICAgIGRlc2NyaWJlOiBcIlByZWZpeCB0aGUgdmVyc2lvbiB3aXRoIHRoaXMgdmFsdWUgKGlmIGl0IGlzbid0IGFscmVhZHkgcHJlZml4ZWQpXCIsXG4gICAgICAgICAgcGFyc2VWYWx1ZXM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgICd2ZXJzaW9uaW5nOmJyYW5jaCc6IHtcbiAgICAgICAgICBhbGlhczogWydicmFuY2gnLCAndmVyc2lvbmluZ19kZWZhdWx0X2JyYW5jaCddLFxuICAgICAgICAgIGRlc2NyaWJlOiAnSWYgdmVyc2lvbmluZyBpcyBkaXNhYmxlZCBzaG93IHRoaXMgYnJhbmNoIGluc3RlYWQnLFxuICAgICAgICAgIHBhcnNlVmFsdWVzOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICAndmVyc2lvbmluZzpiYWRnZSc6IHtcbiAgICAgICAgICBhbGlhczogWyd2ZXJzaW9uLWJhZGdlJywgJ3ZlcnNpb25pbmdfYmFkZ2UnXSxcbiAgICAgICAgICBkZXNjcmliZTogJ0Rpc3BsYXkgdGhlIGN1cnJlbnQgdmVyc2lvbiBhcyBhIGJhZGdlJyxcbiAgICAgICAgICBwYXJzZVZhbHVlczogdHJ1ZSxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIH0sXG4gICAgICAgICd0aXRsZV9wcmVmaXgnOiB7XG4gICAgICAgICAgYWxpYXM6IFsncHJlZml4JywgJ3RpdGxlX3ByZWZpeCddLFxuICAgICAgICAgIGRlc2NyaWJlOiAnQWRkIGEgcHJlZml4IHRvIHRoZSBSRUFETUUgdGl0bGUnLFxuICAgICAgICAgIHBhcnNlVmFsdWVzOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC5kZWZhdWx0cyh7XG4gICAgICAgIHNhdmU6IHRydWUsXG4gICAgICAgIG93bmVyOiByZXBvc2l0b3J5RGV0YWlsPy5vd25lcixcbiAgICAgICAgcmVwbzogcmVwb3NpdG9yeURldGFpbD8ucmVwbyxcbiAgICAgICAgcGF0aHM6IHtcbiAgICAgICAgICBhY3Rpb246ICdhY3Rpb24ueW1sJyxcbiAgICAgICAgICByZWFkbWU6ICdSRUFETUUubWQnLFxuICAgICAgICB9LFxuICAgICAgICBzaG93X2xvZ286IHRydWUsXG4gICAgICAgIHByZXR0eTogdHJ1ZSxcbiAgICAgICAgdmVyc2lvbmluZzoge1xuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgb3ZlcnJpZGU6ICcnLFxuICAgICAgICAgIHByZWZpeDogJ3YnLFxuICAgICAgICAgIGJyYW5jaDogJ21haW4nLFxuICAgICAgICAgIGJhZGdlczogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdGl0bGVfcHJlZml4OiAnR2l0SHViIEFjdGlvbjogJyxcbiAgICAgICAgc2VjdGlvbnM6IFsndGl0bGUnLCAnZGVzY3JpcHRpb24nLCAndXNhZ2UnLCAnaW5wdXRzJywgJ291dHB1dHMnLCAnY29udGVudHMnLCAnYmFkZ2VzJ10sXG4gICAgICB9KVxuICAgICAgLnJlcXVpcmVkKFsnb3duZXInLCAncmVwbyddKTtcblxuICAgIHRoaXMuc2VjdGlvbnMgPSB0aGlzLmNvbmZpZy5nZXQoJ3NlY3Rpb25zJykgYXMgc3RyaW5nW107XG4gICAgdGhpcy5yZWFkbWVQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMuY29uZmlnLmdldChwYXRoc1JlYWRtZSkgYXMgc3RyaW5nKTtcbiAgICBjb25zdCBhY3Rpb25QYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMuY29uZmlnLmdldChwYXRoc0FjdGlvbikgYXMgc3RyaW5nKTtcbiAgICB0aGlzLmFjdGlvbiA9IG5ldyBBY3Rpb24oYWN0aW9uUGF0aCk7XG4gICAgdGhpcy5yZWFkbWVFZGl0b3IgPSBuZXcgUmVhZG1lRWRpdG9yKHRoaXMucmVhZG1lUGF0aCk7XG4gICAgaWYgKExvZ1Rhc2suaXNEZWJ1ZygpKSB7XG4gICAgICBsb2cuZGVidWcoJ3Jlc29sdmVkIGlucHV0czonKTtcbiAgICAgIGxvZy5kZWJ1Zyh0aGlzLnN0cmluZ2lmeSgpKTtcbiAgICAgIGxvZy5kZWJ1ZygncmVzb2x2ZWQgYWN0aW9uOicpO1xuICAgICAgbG9nLmRlYnVnKHRoaXMuYWN0aW9uLnN0cmluZ2lmeSgpKTtcbiAgICB9XG4gIH1cblxuICBzdHJpbmdpZnkoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcykge1xuICAgICAgY29uc3Qgb3V0cHV0OiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBrIG9mIGNvbmZpZ0tleXMpIHtcbiAgICAgICAgb3V0cHV0LnB1c2goYCR7a306ICR7dGhpcy5jb25maWcuZ2V0KGspfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHlhbWwuZHVtcChvdXRwdXQsIHtcbiAgICAgICAgc2tpcEludmFsaWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG4iLCAiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1lbWJlci1hY2Nlc3NpYmlsaXR5ICovXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJztcblxuaW1wb3J0ICogYXMgeWFtbCBmcm9tICdqcy15YW1sJztcblxuaW1wb3J0IExvZ1Rhc2sgZnJvbSAnLi9sb2d0YXNrJztcblxuZXhwb3J0IGludGVyZmFjZSBJbnB1dFR5cGUge1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICBkZWZhdWx0Pzogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBPdXRwdXRUeXBlIHtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIFJ1bnMge1xuICB1c2luZzogc3RyaW5nO1xuICBtYWluOiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIEJyYW5kaW5nIHtcbiAgY29sb3I6IHN0cmluZztcbiAgaWNvbjogc3RyaW5nO1xufVxuZXhwb3J0IHR5cGUgSW5wdXRzVHlwZSA9IHsgW2lkOiBzdHJpbmddOiBJbnB1dFR5cGUgfTtcbmV4cG9ydCB0eXBlIE91dHB1dHNUeXBlID0geyBbaWQ6IHN0cmluZ106IE91dHB1dFR5cGUgfTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWN0aW9uIHtcbiAgLy8gTG9hZCB0aGUgYWN0aW9uLnltbFxuXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG5cbiAgcHVibGljIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgcHVibGljIGJyYW5kaW5nOiBCcmFuZGluZztcblxuICBwdWJsaWMgaW5wdXRzOiBJbnB1dHNUeXBlO1xuXG4gIHB1YmxpYyBvdXRwdXRzOiBPdXRwdXRzVHlwZTtcblxuICBwdWJsaWMgcnVuczogUnVucztcblxuICBjb25zdHJ1Y3RvcihhY3Rpb25QYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCBsb2cgPSBuZXcgTG9nVGFzaygnYWN0aW9uJyk7XG4gICAgbGV0IHRtcEFjdGlvbllhbWwgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICBsb2cuZGVidWcoYGxvYWRpbmcgYWN0aW9uLnltbCBmcm9tICR7YWN0aW9uUGF0aH1gKTtcbiAgICAgIHRtcEFjdGlvbllhbWwgPSB5YW1sLmxvYWQoZnMucmVhZEZpbGVTeW5jKGFjdGlvblBhdGgsICd1dGY4JykpIGFzIEFjdGlvbjtcbiAgICAgIGxvZy5zdWNjZXNzKCdsb2FkZWQgY29uZmlndXJhdGlvbiBzdWNjZXNzZnVsbHknKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGxvZy5lcnJvcihgZmFpbGVkIHRvIGxvYWQgJHthY3Rpb25QYXRofWApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRtcEFjdGlvbllhbWwgIT09ICdvYmplY3QnIHx8IHRtcEFjdGlvbllhbWwgPT09IG51bGwpIHtcbiAgICAgIGxvZy5lcnJvcihcImFjdGlvbi55bWwgZmlsZSByZWFkIGluIGlzbid0IGFuIG9iamVjdCAobm8geWFtbCBpbiBpdClcIik7XG4gICAgfVxuICAgIGNvbnN0IGFjdGlvbllhbWwgPSB0bXBBY3Rpb25ZYW1sIGFzIEFjdGlvbjtcbiAgICB0aGlzLm5hbWUgPSBhY3Rpb25ZYW1sLm5hbWU7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGFjdGlvbllhbWwuZGVzY3JpcHRpb247XG4gICAgdGhpcy5icmFuZGluZyA9IGFjdGlvbllhbWwuYnJhbmRpbmc7XG4gICAgdGhpcy5pbnB1dHMgPSBhY3Rpb25ZYW1sLmlucHV0cztcbiAgICB0aGlzLm91dHB1dHMgPSBhY3Rpb25ZYW1sLm91dHB1dHM7XG4gICAgdGhpcy5ydW5zID0gYWN0aW9uWWFtbC5ydW5zO1xuICB9XG5cbiAgc3RyaW5naWZ5KCk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB5YW1sLmR1bXAodGhpcywge1xuICAgICAgICBza2lwSW52YWxpZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgY29uc3QgbG9nID0gbmV3IExvZ1Rhc2soJ2FjdGlvbjpzdHJpbmdpZnknKTtcbiAgICAgIGxvZy5lcnJvcignZmFpbGVkIHRvIHN0cmluZ2lmeSBhY3Rpb24ueW1sJyk7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0ICogYXMgY29yZSBmcm9tICdAYWN0aW9ucy9jb3JlJztcbmltcG9ydCAqIGFzIGNoYWxrQ2xhc3MgZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgZW1vamkgZnJvbSAnbm9kZS1lbW9qaSc7XG5cbmNvbnN0IE5PX0dST1VQID0gMDtcbmNvbnN0IFNUQVJUX0dST1VQID0gMTtcbmNvbnN0IEVORF9HUk9VUCA9IDI7XG5jb25zdCBJU19FUlJPUiA9IDM7XG5jb25zdCBJU19GQUlMRUQgPSA1O1xuY29uc3QgSVNfVElUTEUgPSA2O1xuY29uc3QgY2hhbGsgPSBjaGFsa0NsYXNzLmRlZmF1bHQ7XG5jbGFzcyBMb2dUYXNrIHtcbiAgc3RhdGljIGluZ3JvdXBfc2V0dGluZzogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcblxuICBzdGF0aWMgaW5kZW50V2lkdGggPSA1O1xuXG4gIHN0YXRpYyBpc0RlYnVnKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb3JlLmlzRGVidWcoKSB8fCAhIXByb2Nlc3MuZW52LkRFQlVHO1xuICB9XG5cbiAgbmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMubmFtZSA9IG5hbWU/LnRyaW0oKTtcbiAgICB0aGlzLmluZ3JvdXAgPSBmYWxzZTtcbiAgfVxuXG4gIGdldCBpbmdyb3VwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBMb2dUYXNrLmluZ3JvdXBfc2V0dGluZ1t0aGlzLm5hbWVdID8/IGZhbHNlO1xuICB9XG5cbiAgc2V0IGluZ3JvdXAodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBMb2dUYXNrLmluZ3JvdXBfc2V0dGluZ1t0aGlzLm5hbWVdID0gdmFsdWU7XG4gIH1cblxuICBhc3luYyBsb2dTdGVwKFxuICAgIGVtb2ppU3RyOiBzdHJpbmcsXG4gICAgc3RlcDogc3RyaW5nLFxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgc3RhcnRHcm91cCA9IE5PX0dST1VQLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoc3RlcC5sZW5ndGggPiBMb2dUYXNrLmluZGVudFdpZHRoKSB7XG4gICAgICBMb2dUYXNrLmluZGVudFdpZHRoID0gc3RlcC5sZW5ndGg7XG4gICAgfVxuICAgIGxldCBkZXNjOiBzdHJpbmc7XG4gICAgc3dpdGNoIChzdGVwKSB7XG4gICAgICBjYXNlICdTVEFSVCc6IHtcbiAgICAgICAgZGVzYyA9IGNoYWxrLnllbGxvd0JyaWdodChgJHtkZXNjcmlwdGlvbn1gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdJTkZPJzoge1xuICAgICAgICBkZXNjID0gY2hhbGsuZ3JlZW4oYCR7ZGVzY3JpcHRpb259YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnV0FSTic6IHtcbiAgICAgICAgZGVzYyA9IGNoYWxrLnllbGxvdyhgJHtkZXNjcmlwdGlvbn1gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdTVUNDRVNTJzoge1xuICAgICAgICBkZXNjID0gY2hhbGsuZ3JlZW5CcmlnaHQoYCR7ZGVzY3JpcHRpb259YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnRkFJTFVSRSc6IHtcbiAgICAgICAgZGVzYyA9IGNoYWxrLnJlZEJyaWdodChgJHtkZXNjcmlwdGlvbn1gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdFUlJPUic6IHtcbiAgICAgICAgZGVzYyA9IGNoYWxrLnJlZEJyaWdodChgJHtkZXNjcmlwdGlvbn1gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICcjIyMjIyc6IHtcbiAgICAgICAgZGVzYyA9IGNoYWxrLmN5YW4oYCR7ZGVzY3JpcHRpb259YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBkZXNjID0gY2hhbGsud2hpdGUoYCR7ZGVzY3JpcHRpb259YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBtc2c6IHN0cmluZztcbiAgICBpZiAodGhpcy5pbmdyb3VwICYmICFwcm9jZXNzLmVudi5HSVRIVUJfQUNUSU9OUykge1xuICAgICAgY29uc3QgaW5kZW50U3RyID0gWy4uLkFycmF5LmZyb20oeyBsZW5ndGg6IExvZ1Rhc2suaW5kZW50V2lkdGggfSkuZmlsbCgnICcpXS5qb2luKCcnKTtcbiAgICAgIG1zZyA9IGAke2luZGVudFN0cn0gICAke2Vtb2ppU3RyfTogJHt0aGlzLm5hbWV9ID4gJHtkZXNjfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0ZXBTdHIgPSBbXG4gICAgICAgIHN0ZXAsXG4gICAgICAgIC4uLkFycmF5LmZyb20oeyBsZW5ndGg6IExvZ1Rhc2suaW5kZW50V2lkdGggLSBzdGVwLmxlbmd0aCB9KS5maWxsKCcgJyksXG4gICAgICBdLmpvaW4oJycpO1xuXG4gICAgICBtc2cgPSBgWyR7c3RlcFN0cn1dICR7ZW1vamlTdHJ9OiAke2Rlc2N9YDtcbiAgICB9XG4gICAgc3dpdGNoIChzdGVwKSB7XG4gICAgICBjYXNlICdTVEFSVCc6IHtcbiAgICAgICAgbXNnID0gY2hhbGsueWVsbG93QnJpZ2h0KGAke21zZ31gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdTVUNDRVNTJzoge1xuICAgICAgICBtc2cgPSBjaGFsay53aGl0ZUJyaWdodChgJHttc2d9YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnRkFJTFVSRSc6IHtcbiAgICAgICAgbXNnID0gY2hhbGsucmVkKGAke21zZ31gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdFUlJPUic6IHtcbiAgICAgICAgbXNnID0gY2hhbGsucmVkKGAke21zZ31gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBpc0Vycm9yaW5nID0gc3RhcnRHcm91cCA9PT0gSVNfRVJST1IgfHwgc3RhcnRHcm91cCA9PT0gSVNfRkFJTEVEO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52LkdJVEhVQl9BQ1RJT05TKSB7XG4gICAgICBzd2l0Y2ggKHN0YXJ0R3JvdXApIHtcbiAgICAgICAgY2FzZSBTVEFSVF9HUk9VUDoge1xuICAgICAgICAgIGNvcmUuc3RhcnRHcm91cChtc2cpO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFTkRfR1JPVVA6IHtcbiAgICAgICAgICBjb3JlLmVuZEdyb3VwKCk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElTX0VSUk9SOiB7XG4gICAgICAgICAgY29yZS5lcnJvcihjaGFsay5iZ1JlZEJyaWdodChtc2cpKTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSVNfRkFJTEVEOiB7XG4gICAgICAgICAgY29yZS5zZXRGYWlsZWQoY2hhbGsuYmdSZWRCcmlnaHQobXNnKSk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgY29yZS5pbmZvKG1zZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzRXJyb3JpbmcpIHtcbiAgICAgIGNvcmUuZXJyb3IobXNnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29yZS5pbmZvKG1zZyk7XG4gICAgfVxuICB9XG5cbiAgZGVidWcoZGVzY3JpcHRpb24gPSAnJyk6IHZvaWQge1xuICAgIGlmIChMb2dUYXNrLmlzRGVidWcoKSAmJiBkZXNjcmlwdGlvbiAhPT0gJycpIHtcbiAgICAgIHRoaXMubG9nU3RlcCgnXHVEODNEXHVEQzQxXHVGRTBGXHUyMDBEXHVEODNEXHVEREU4XHVGRTBGJywgJ0RFQlVHJywgZGVzY3JpcHRpb24pO1xuICAgIH1cbiAgfVxuXG4gIHN0YXJ0KGRlc2NyaXB0aW9uID0gJycpOiB2b2lkIHtcbiAgICBjb25zdCBkZXNjID0gZGVzY3JpcHRpb24gPT09ICcnID8gYFN0YXJ0aW5nICR7dGhpcy5uYW1lfS4uLmAgOiBkZXNjcmlwdGlvbjtcblxuICAgIHRoaXMubG9nU3RlcChlbW9qaS5nZXQoJ3JvY2tldCcpID8/ICcnLCAnU1RBUlQnLCBkZXNjLCBTVEFSVF9HUk9VUCk7XG4gIH1cblxuICBpbmZvKGRlc2NyaXB0aW9uID0gJycpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ1N0ZXAoZW1vamkuZ2V0KCdzcGFya2xlcycpID8/ICcnLCAnSU5GTycsIGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIHdhcm4oZGVzY3JpcHRpb24gPSAnJyk6IHZvaWQge1xuICAgIHRoaXMubG9nU3RlcChlbW9qaS5nZXQoJ2FuZ2VyJykgPz8gJycsICdXQVJOJywgZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgc3VjY2VzcyhkZXNjcmlwdGlvbiA9ICcnLCBpbmdyb3VwID0gdHJ1ZSk6IHZvaWQge1xuICAgIGNvbnN0IGRlc2MgPSBkZXNjcmlwdGlvbiA9PT0gJycgPyBgQ29tcGxldGVkICR7dGhpcy5uYW1lfS5gIDogZGVzY3JpcHRpb247XG4gICAgaWYgKGluZ3JvdXApIHtcbiAgICAgIHRoaXMuaW5ncm91cCA9IGZhbHNlO1xuICAgICAgaWYgKHByb2Nlc3MuZW52LkdJVEhVQl9BQ1RJT05TKSB7XG4gICAgICAgIGNvcmUuZW5kR3JvdXAoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5sb2dTdGVwKGVtb2ppLmdldCgnd2hpdGVfY2hlY2tfbWFyaycpID8/ICcnLCAnU1VDQ0VTUycsIGRlc2MpO1xuICB9XG5cbiAgZmFpbChkZXNjcmlwdGlvbiA9ICcnLCBpbmdyb3VwID0gdHJ1ZSk6IHZvaWQge1xuICAgIGNvbnN0IGRlc2MgPSBkZXNjcmlwdGlvbiA9PT0gJycgPyBgRmFpbGVkICR7dGhpcy5uYW1lfS5gIDogZGVzY3JpcHRpb247XG4gICAgaWYgKGluZ3JvdXApIHtcbiAgICAgIHRoaXMuaW5ncm91cCA9IGZhbHNlO1xuICAgICAgaWYgKHByb2Nlc3MuZW52LkdJVEhVQl9BQ1RJT05TKSB7XG4gICAgICAgIGNvcmUuZW5kR3JvdXAoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbXNndHlwZSA9IHByb2Nlc3MuZW52LkdJVEhVQl9BQ1RJT05TID8gSVNfRkFJTEVEIDogSVNfRVJST1I7XG4gICAgdGhpcy5sb2dTdGVwKGVtb2ppLmdldCgneCcpID8/ICcnLCAnRkFJTFVSRScsIGRlc2MsIG1zZ3R5cGUpO1xuICB9XG5cbiAgZXJyb3IoZGVzY3JpcHRpb24gPSAnJyk6IHZvaWQge1xuICAgIHRoaXMubG9nU3RlcChlbW9qaS5nZXQoJ3gnKSA/PyAnJywgJ0VSUk9SJywgZGVzY3JpcHRpb24sIElTX0VSUk9SKTtcbiAgfVxuXG4gIHRpdGxlKGRlc2NyaXB0aW9uID0gJycpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ1N0ZXAoJ1x1RDgzRFx1RENEMycsICcjIyMjIycsIGRlc2NyaXB0aW9uLCBJU19USVRMRSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9nVGFzaztcbiIsICJpbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJztcblxuaW1wb3J0IHR5cGUgeyBDb250ZXh0IH0gZnJvbSAnQGFjdGlvbnMvZ2l0aHViL2xpYi9jb250ZXh0JztcbmltcG9ydCB0eXBlIHsgUGFja2FnZUpzb24gfSBmcm9tICd0eXBlcy1wYWNrYWdlLWpzb24nO1xuXG5pbXBvcnQgdHlwZSBJbnB1dHMgZnJvbSAnLi9pbnB1dHMnO1xuaW1wb3J0IExvZ1Rhc2sgZnJvbSAnLi9sb2d0YXNrJztcblxuLy9cbi8vIFJlZ2V4IGJlbG93IG1hdGNoZXMgYW55IFVuaWNvZGUgd29yZCBhbmQgbnVtYmVyIGNvbXBhdGlibGUgd2l0aCBFUzUuIEluIEVTMjAxOCB0aGUgc2FtZSByZXN1bHRcbi8vIGNhbiBiZSBhY2hpZXZlZCBieSB1c2luZyAvWzAtOVxccHtMfV1cXFMqL2d1IGFuZCBhbHNvIGtub3duIGFzIFVuaWNvZGUgUHJvcGVydHkgRXNjYXBlc1xuLy8gKGh0dHBzOi8vMmFsaXR5LmNvbS8yMDE3LzA3L3JlZ2V4cC11bmljb2RlLXByb3BlcnR5LWVzY2FwZXMuaHRtbCkuIFNpbmNlIHRoZXJlIGlzIG5vXG4vLyB0cmFuc3BpbGF0aW9uIG9mIHRoaXMgZnVuY3Rpb25hbGl0eSBkb3duIHRvIEVTNSB3aXRob3V0IGV4dGVybmFsIHRvb2wsIHRoZSBvbmx5IHNvbHV0aW9uIGlzXG4vLyB0byB1c2UgYWxyZWFkeSB0cmFuc3BpbGVkIGZvcm0uIEV4YW1wbGUgY2FuIGJlIGZvdW5kIGhlcmUgLVxuLy8gaHR0cHM6Ly9tb3RoZXJlZmYuaW4vcmVnZXhwdSNpbnB1dD12YXIrcmVnZXgrJTNEKyUyRiU1QjAtOSU1Q3AlN0JMJTdEJTVEJTVDUyolMkZndSUzQiUwQSUwQSZ1bmljb2RlUHJvcGVydHlFc2NhcGU9MVxuLy9cblxuY29uc3QgdW5pY29kZVdvcmRNYXRjaCA9XG4gIC8vIHRydW5rLWlnbm9yZShlc2xpbnQvdW5pY29ybi9iZXR0ZXItcmVnZXgsZXNsaW50L3VuaWNvcm4vbm8taGV4LWVzY2FwZSxlc2xpbnQvb3B0aW1pemUtcmVnZXgvb3B0aW1pemUtcmVnZXgpXG4gIC8oPzpbXFxkQS1aYS16XFx1MDBBQVxcdTAwQjVcXHUwMEJBXFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkMxXFx1MDJDNi1cXHUwMkQxXFx1MDJFMC1cXHUwMkU0XFx1MDJFQ1xcdTAyRUVcXHUwMzcwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N1xcdTAzN0EtXFx1MDM3RFxcdTAzN0ZcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNVxcdTAzRjctXFx1MDQ4MVxcdTA0OEEtXFx1MDUyRlxcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYwLVxcdTA1ODhcXHUwNUQwLVxcdTA1RUFcXHUwNUVGLVxcdTA1RjJcXHUwNjIwLVxcdTA2NEFcXHUwNjZFXFx1MDY2RlxcdTA2NzEtXFx1MDZEM1xcdTA2RDVcXHUwNkU1XFx1MDZFNlxcdTA2RUVcXHUwNkVGXFx1MDZGQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTBcXHUwNzEyLVxcdTA3MkZcXHUwNzRELVxcdTA3QTVcXHUwN0IxXFx1MDdDQS1cXHUwN0VBXFx1MDdGNFxcdTA3RjVcXHUwN0ZBXFx1MDgwMC1cXHUwODE1XFx1MDgxQVxcdTA4MjRcXHUwODI4XFx1MDg0MC1cXHUwODU4XFx1MDg2MC1cXHUwODZBXFx1MDg3MC1cXHUwODg3XFx1MDg4OS1cXHUwODhFXFx1MDhBMC1cXHUwOEM5XFx1MDkwNC1cXHUwOTM5XFx1MDkzRFxcdTA5NTBcXHUwOTU4LVxcdTA5NjFcXHUwOTcxLVxcdTA5ODBcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJcXHUwOUI2LVxcdTA5QjlcXHUwOUJEXFx1MDlDRVxcdTA5RENcXHUwOUREXFx1MDlERi1cXHUwOUUxXFx1MDlGMFxcdTA5RjFcXHUwOUZDXFx1MEEwNS1cXHUwQTBBXFx1MEEwRlxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyXFx1MEEzM1xcdTBBMzVcXHUwQTM2XFx1MEEzOFxcdTBBMzlcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE3Mi1cXHUwQTc0XFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJEXFx1MEFEMFxcdTBBRTBcXHUwQUUxXFx1MEFGOVxcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNEXFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjFcXHUwQjcxXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkQwXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzM5XFx1MEMzRFxcdTBDNTgtXFx1MEM1QVxcdTBDNURcXHUwQzYwXFx1MEM2MVxcdTBDODBcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERFxcdTBDREVcXHUwQ0UwXFx1MENFMVxcdTBDRjFcXHUwQ0YyXFx1MEQwNC1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDNBXFx1MEQzRFxcdTBENEVcXHUwRDU0LVxcdTBENTZcXHUwRDVGLVxcdTBENjFcXHUwRDdBLVxcdTBEN0ZcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MEUwMS1cXHUwRTMwXFx1MEUzMlxcdTBFMzNcXHUwRTQwLVxcdTBFNDZcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg2LVxcdTBFOEFcXHUwRThDLVxcdTBFQTNcXHUwRUE1XFx1MEVBNy1cXHUwRUIwXFx1MEVCMlxcdTBFQjNcXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjQwLVxcdTBGNDdcXHUwRjQ5LVxcdTBGNkNcXHUwRjg4LVxcdTBGOENcXHUxMDAwLVxcdTEwMkFcXHUxMDNGXFx1MTA1MC1cXHUxMDU1XFx1MTA1QS1cXHUxMDVEXFx1MTA2MVxcdTEwNjVcXHUxMDY2XFx1MTA2RS1cXHUxMDcwXFx1MTA3NS1cXHUxMDgxXFx1MTA4RVxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjVcXHUxM0Y4LVxcdTEzRkRcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkYxLVxcdTE2RjhcXHUxNzAwLVxcdTE3MTFcXHUxNzFGLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0Q3XFx1MTdEQ1xcdTE4MjAtXFx1MTg3OFxcdTE4ODAtXFx1MTg4NFxcdTE4ODctXFx1MThBOFxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUVcXHUxOTUwLVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxQTAwLVxcdTFBMTZcXHUxQTIwLVxcdTFBNTRcXHUxQUE3XFx1MUIwNS1cXHUxQjMzXFx1MUI0NS1cXHUxQjRDXFx1MUI4My1cXHUxQkEwXFx1MUJBRVxcdTFCQUZcXHUxQkJBLVxcdTFCRTVcXHUxQzAwLVxcdTFDMjNcXHUxQzRELVxcdTFDNEZcXHUxQzVBLVxcdTFDN0RcXHUxQzgwLVxcdTFDODhcXHUxQzkwLVxcdTFDQkFcXHUxQ0JELVxcdTFDQkZcXHUxQ0U5LVxcdTFDRUNcXHUxQ0VFLVxcdTFDRjNcXHUxQ0Y1XFx1MUNGNlxcdTFDRkFcXHUxRDAwLVxcdTFEQkZcXHUxRTAwLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjA3MVxcdTIwN0ZcXHUyMDkwLVxcdTIwOUNcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE4M1xcdTIxODRcXHUyQzAwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRUVcXHUyQ0YyXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEODAtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJFMkZcXHUzMDA1XFx1MzAwNlxcdTMwMzEtXFx1MzAzNVxcdTMwM0JcXHUzMDNDXFx1MzA0MS1cXHUzMDk2XFx1MzA5RC1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1MzEwNS1cXHUzMTJGXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJGXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REJGXFx1NEUwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjFGXFx1QTYyQVxcdUE2MkJcXHVBNjQwLVxcdUE2NkVcXHVBNjdGLVxcdUE2OURcXHVBNkEwLVxcdUE2RTVcXHVBNzE3LVxcdUE3MUZcXHVBNzIyLVxcdUE3ODhcXHVBNzhCLVxcdUE3Q0FcXHVBN0QwXFx1QTdEMVxcdUE3RDNcXHVBN0Q1LVxcdUE3RDlcXHVBN0YyLVxcdUE4MDFcXHVBODAzLVxcdUE4MDVcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXFx1QThGRFxcdUE4RkVcXHVBOTBBLVxcdUE5MjVcXHVBOTMwLVxcdUE5NDZcXHVBOTYwLVxcdUE5N0NcXHVBOTg0LVxcdUE5QjJcXHVBOUNGXFx1QTlFMC1cXHVBOUU0XFx1QTlFNi1cXHVBOUVGXFx1QTlGQS1cXHVBOUZFXFx1QUEwMC1cXHVBQTI4XFx1QUE0MC1cXHVBQTQyXFx1QUE0NC1cXHVBQTRCXFx1QUE2MC1cXHVBQTc2XFx1QUE3QVxcdUFBN0UtXFx1QUFBRlxcdUFBQjFcXHVBQUI1XFx1QUFCNlxcdUFBQjktXFx1QUFCRFxcdUFBQzBcXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVBXFx1QUFGMi1cXHVBQUY0XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUIzMC1cXHVBQjVBXFx1QUI1Qy1cXHVBQjY5XFx1QUI3MC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXXxcXHVEODAwW1xcdURDMDAtXFx1REMwQlxcdURDMEQtXFx1REMyNlxcdURDMjgtXFx1REMzQVxcdURDM0NcXHVEQzNEXFx1REMzRi1cXHVEQzREXFx1REM1MC1cXHVEQzVEXFx1REM4MC1cXHVEQ0ZBXFx1REU4MC1cXHVERTlDXFx1REVBMC1cXHVERUQwXFx1REYwMC1cXHVERjFGXFx1REYyRC1cXHVERjQwXFx1REY0Mi1cXHVERjQ5XFx1REY1MC1cXHVERjc1XFx1REY4MC1cXHVERjlEXFx1REZBMC1cXHVERkMzXFx1REZDOC1cXHVERkNGXXxcXHVEODAxW1xcdURDMDAtXFx1REM5RFxcdURDQjAtXFx1RENEM1xcdURDRDgtXFx1RENGQlxcdUREMDAtXFx1REQyN1xcdUREMzAtXFx1REQ2M1xcdURENzAtXFx1REQ3QVxcdUREN0MtXFx1REQ4QVxcdUREOEMtXFx1REQ5MlxcdUREOTRcXHVERDk1XFx1REQ5Ny1cXHVEREExXFx1RERBMy1cXHVEREIxXFx1RERCMy1cXHVEREI5XFx1RERCQlxcdUREQkNcXHVERTAwLVxcdURGMzZcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNjdcXHVERjgwLVxcdURGODVcXHVERjg3LVxcdURGQjBcXHVERkIyLVxcdURGQkFdfFxcdUQ4MDJbXFx1REMwMC1cXHVEQzA1XFx1REMwOFxcdURDMEEtXFx1REMzNVxcdURDMzdcXHVEQzM4XFx1REMzQ1xcdURDM0YtXFx1REM1NVxcdURDNjAtXFx1REM3NlxcdURDODAtXFx1REM5RVxcdURDRTAtXFx1RENGMlxcdURDRjRcXHVEQ0Y1XFx1REQwMC1cXHVERDE1XFx1REQyMC1cXHVERDM5XFx1REQ4MC1cXHVEREI3XFx1RERCRVxcdUREQkZcXHVERTAwXFx1REUxMC1cXHVERTEzXFx1REUxNS1cXHVERTE3XFx1REUxOS1cXHVERTM1XFx1REU2MC1cXHVERTdDXFx1REU4MC1cXHVERTlDXFx1REVDMC1cXHVERUM3XFx1REVDOS1cXHVERUU0XFx1REYwMC1cXHVERjM1XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjcyXFx1REY4MC1cXHVERjkxXXxcXHVEODAzW1xcdURDMDAtXFx1REM0OFxcdURDODAtXFx1RENCMlxcdURDQzAtXFx1RENGMlxcdUREMDAtXFx1REQyM1xcdURFODAtXFx1REVBOVxcdURFQjBcXHVERUIxXFx1REYwMC1cXHVERjFDXFx1REYyN1xcdURGMzAtXFx1REY0NVxcdURGNzAtXFx1REY4MVxcdURGQjAtXFx1REZDNFxcdURGRTAtXFx1REZGNl18XFx1RDgwNFtcXHVEQzAzLVxcdURDMzdcXHVEQzcxXFx1REM3MlxcdURDNzVcXHVEQzgzLVxcdURDQUZcXHVEQ0QwLVxcdURDRThcXHVERDAzLVxcdUREMjZcXHVERDQ0XFx1REQ0N1xcdURENTAtXFx1REQ3MlxcdURENzZcXHVERDgzLVxcdUREQjJcXHVEREMxLVxcdUREQzRcXHVERERBXFx1REREQ1xcdURFMDAtXFx1REUxMVxcdURFMTMtXFx1REUyQlxcdURFODAtXFx1REU4NlxcdURFODhcXHVERThBLVxcdURFOERcXHVERThGLVxcdURFOURcXHVERTlGLVxcdURFQThcXHVERUIwLVxcdURFREVcXHVERjA1LVxcdURGMENcXHVERjBGXFx1REYxMFxcdURGMTMtXFx1REYyOFxcdURGMkEtXFx1REYzMFxcdURGMzJcXHVERjMzXFx1REYzNS1cXHVERjM5XFx1REYzRFxcdURGNTBcXHVERjVELVxcdURGNjFdfFxcdUQ4MDVbXFx1REMwMC1cXHVEQzM0XFx1REM0Ny1cXHVEQzRBXFx1REM1Ri1cXHVEQzYxXFx1REM4MC1cXHVEQ0FGXFx1RENDNFxcdURDQzVcXHVEQ0M3XFx1REQ4MC1cXHVEREFFXFx1REREOC1cXHVERERCXFx1REUwMC1cXHVERTJGXFx1REU0NFxcdURFODAtXFx1REVBQVxcdURFQjhcXHVERjAwLVxcdURGMUFcXHVERjQwLVxcdURGNDZdfFxcdUQ4MDZbXFx1REMwMC1cXHVEQzJCXFx1RENBMC1cXHVEQ0RGXFx1RENGRi1cXHVERDA2XFx1REQwOVxcdUREMEMtXFx1REQxM1xcdUREMTVcXHVERDE2XFx1REQxOC1cXHVERDJGXFx1REQzRlxcdURENDFcXHVEREEwLVxcdUREQTdcXHVEREFBLVxcdURERDBcXHVEREUxXFx1RERFM1xcdURFMDBcXHVERTBCLVxcdURFMzJcXHVERTNBXFx1REU1MFxcdURFNUMtXFx1REU4OVxcdURFOURcXHVERUIwLVxcdURFRjhdfFxcdUQ4MDdbXFx1REMwMC1cXHVEQzA4XFx1REMwQS1cXHVEQzJFXFx1REM0MFxcdURDNzItXFx1REM4RlxcdUREMDAtXFx1REQwNlxcdUREMDhcXHVERDA5XFx1REQwQi1cXHVERDMwXFx1REQ0NlxcdURENjAtXFx1REQ2NVxcdURENjdcXHVERDY4XFx1REQ2QS1cXHVERDg5XFx1REQ5OFxcdURFRTAtXFx1REVGMlxcdURGQjBdfFxcdUQ4MDhbXFx1REMwMC1cXHVERjk5XXxcXHVEODA5W1xcdURDODAtXFx1REQ0M118XFx1RDgwQltcXHVERjkwLVxcdURGRjBdfFtcXHVEODBDXFx1RDgxQy1cXHVEODIwXFx1RDgyMlxcdUQ4NDAtXFx1RDg2OFxcdUQ4NkEtXFx1RDg2Q1xcdUQ4NkYtXFx1RDg3MlxcdUQ4NzQtXFx1RDg3OVxcdUQ4ODAtXFx1RDg4M11bXFx1REMwMC1cXHVERkZGXXxcXHVEODBEW1xcdURDMDAtXFx1REMyRV18XFx1RDgxMVtcXHVEQzAwLVxcdURFNDZdfFxcdUQ4MUFbXFx1REMwMC1cXHVERTM4XFx1REU0MC1cXHVERTVFXFx1REU3MC1cXHVERUJFXFx1REVEMC1cXHVERUVEXFx1REYwMC1cXHVERjJGXFx1REY0MC1cXHVERjQzXFx1REY2My1cXHVERjc3XFx1REY3RC1cXHVERjhGXXxcXHVEODFCW1xcdURFNDAtXFx1REU3RlxcdURGMDAtXFx1REY0QVxcdURGNTBcXHVERjkzLVxcdURGOUZcXHVERkUwXFx1REZFMVxcdURGRTNdfFxcdUQ4MjFbXFx1REMwMC1cXHVERkY3XXxcXHVEODIzW1xcdURDMDAtXFx1RENENVxcdUREMDAtXFx1REQwOF18XFx1RDgyQltcXHVERkYwLVxcdURGRjNcXHVERkY1LVxcdURGRkJcXHVERkZEXFx1REZGRV18XFx1RDgyQ1tcXHVEQzAwLVxcdUREMjJcXHVERDUwLVxcdURENTJcXHVERDY0LVxcdURENjdcXHVERDcwLVxcdURFRkJdfFxcdUQ4MkZbXFx1REMwMC1cXHVEQzZBXFx1REM3MC1cXHVEQzdDXFx1REM4MC1cXHVEQzg4XFx1REM5MC1cXHVEQzk5XXxcXHVEODM1W1xcdURDMDAtXFx1REM1NFxcdURDNTYtXFx1REM5Q1xcdURDOUVcXHVEQzlGXFx1RENBMlxcdURDQTVcXHVEQ0E2XFx1RENBOS1cXHVEQ0FDXFx1RENBRS1cXHVEQ0I5XFx1RENCQlxcdURDQkQtXFx1RENDM1xcdURDQzUtXFx1REQwNVxcdUREMDctXFx1REQwQVxcdUREMEQtXFx1REQxNFxcdUREMTYtXFx1REQxQ1xcdUREMUUtXFx1REQzOVxcdUREM0ItXFx1REQzRVxcdURENDAtXFx1REQ0NFxcdURENDZcXHVERDRBLVxcdURENTBcXHVERDUyLVxcdURFQTVcXHVERUE4LVxcdURFQzBcXHVERUMyLVxcdURFREFcXHVERURDLVxcdURFRkFcXHVERUZDLVxcdURGMTRcXHVERjE2LVxcdURGMzRcXHVERjM2LVxcdURGNEVcXHVERjUwLVxcdURGNkVcXHVERjcwLVxcdURGODhcXHVERjhBLVxcdURGQThcXHVERkFBLVxcdURGQzJcXHVERkM0LVxcdURGQ0JdfFxcdUQ4MzdbXFx1REYwMC1cXHVERjFFXXxcXHVEODM4W1xcdUREMDAtXFx1REQyQ1xcdUREMzctXFx1REQzRFxcdURENEVcXHVERTkwLVxcdURFQURcXHVERUMwLVxcdURFRUJdfFxcdUQ4MzlbXFx1REZFMC1cXHVERkU2XFx1REZFOC1cXHVERkVCXFx1REZFRFxcdURGRUVcXHVERkYwLVxcdURGRkVdfFxcdUQ4M0FbXFx1REMwMC1cXHVEQ0M0XFx1REQwMC1cXHVERDQzXFx1REQ0Ql18XFx1RDgzQltcXHVERTAwLVxcdURFMDNcXHVERTA1LVxcdURFMUZcXHVERTIxXFx1REUyMlxcdURFMjRcXHVERTI3XFx1REUyOS1cXHVERTMyXFx1REUzNC1cXHVERTM3XFx1REUzOVxcdURFM0JcXHVERTQyXFx1REU0N1xcdURFNDlcXHVERTRCXFx1REU0RC1cXHVERTRGXFx1REU1MVxcdURFNTJcXHVERTU0XFx1REU1N1xcdURFNTlcXHVERTVCXFx1REU1RFxcdURFNUZcXHVERTYxXFx1REU2MlxcdURFNjRcXHVERTY3LVxcdURFNkFcXHVERTZDLVxcdURFNzJcXHVERTc0LVxcdURFNzdcXHVERTc5LVxcdURFN0NcXHVERTdFXFx1REU4MC1cXHVERTg5XFx1REU4Qi1cXHVERTlCXFx1REVBMS1cXHVERUEzXFx1REVBNS1cXHVERUE5XFx1REVBQi1cXHVERUJCXXxcXHVEODY5W1xcdURDMDAtXFx1REVERlxcdURGMDAtXFx1REZGRl18XFx1RDg2RFtcXHVEQzAwLVxcdURGMzhcXHVERjQwLVxcdURGRkZdfFxcdUQ4NkVbXFx1REMwMC1cXHVEQzFEXFx1REMyMC1cXHVERkZGXXxcXHVEODczW1xcdURDMDAtXFx1REVBMVxcdURFQjAtXFx1REZGRl18XFx1RDg3QVtcXHVEQzAwLVxcdURGRTBdfFxcdUQ4N0VbXFx1REMwMC1cXHVERTFEXXxcXHVEODg0W1xcdURDMDAtXFx1REY0QV0pXFxTKi9nO1xuXG5leHBvcnQgZnVuY3Rpb24gdW5kZWZpbmVkT25FbXB0eSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF2YWx1ZSB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBiYXNlbmFtZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIXBhdGgpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGxvZyA9IG5ldyBMb2dUYXNrKCdiYXNlbmFtZScpO1xuICBjb25zdCByZXN1bHQgPSBwYXRoLnNwbGl0KCcvJykucmV2ZXJzZSgpWzBdO1xuICBsb2cuZGVidWcoYEJhc2VuYW1lIHBhc3NlZCAke3BhdGh9IGFuZCByZXR1cm5zICR7cmVzdWx0fWApO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBSZWZzKHBhdGg6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIXBhdGgpIHJldHVybiBudWxsO1xuICBjb25zdCBsb2cgPSBuZXcgTG9nVGFzaygnc3RyaXBSZWZzJyk7XG4gIGNvbnN0IHJlc3VsdCA9IHBhdGgucmVwbGFjZSgncmVmcy9oZWFkcy8nLCAnJykucmVwbGFjZSgncmVmcy90YWdzLycsICcnKTtcbiAgbG9nLmRlYnVnKGBzdHJpcFJlZnMgcGFzc2VkICR7cGF0aH0gYW5kIHJldHVybnMgJHtyZXN1bHR9YCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnQgZnVuY3Rpb24gdGl0bGVjYXNlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghdGV4dCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiB0ZXh0ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXJndW1lbnQgdHlwZSBwcm92aWRlZCB0byB0aXRsZWNhc2UoKTogJHt0eXBlb2YgdGV4dH1gKTtcbiAgfVxuICByZXR1cm4gdGV4dC5yZXBsYWNlQWxsKHVuaWNvZGVXb3JkTWF0Y2gsICh0eHQpID0+XG4gICAgdHh0WzBdID8gdHh0WzBdLnRvVXBwZXJDYXNlKCkgKyB0eHQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKSA6IHR4dCxcbiAgKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhQYXJzZXIodGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF0ZXh0KSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAodHlwZW9mIHRleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBhcmd1bWVudCB0eXBlIHByb3ZpZGVkIHRvIHByZWZpeFBhcnNlcigpOiAke3R5cGVvZiB0ZXh0fWApO1xuICB9XG4gIHJldHVybiB0aXRsZWNhc2UodGV4dC5yZXBsYWNlKC9bXy1dKy8sICcgJykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JhcFRleHQodGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb250ZW50OiBzdHJpbmdbXSwgcHJlcGVuZCA9ICcnKTogc3RyaW5nW10ge1xuICAvLyBDb25zdHJhaW4gdGhlIHdpZHRoIG9mIHRoZSBkZXNjcmlwdGlvblxuICBpZiAoIXRleHQpIHJldHVybiBjb250ZW50O1xuICBjb25zdCB3aWR0aCA9IDgwO1xuXG4gIGxldCBkZXNjcmlwdGlvbiA9IHRleHRcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2VBbGwoJ1xcclxcbicsICdcXG4nKSAvLyBDb252ZXJ0IENSIHRvIExGXG4gICAgLnJlcGxhY2VBbGwoLyArL2csICcgJykgLy8gICAgU3F1YXNoIGNvbnNlY3V0aXZlIHNwYWNlc1xuICAgIC5yZXBsYWNlQWxsKCcgXFxuJywgJ1xcbicpOyAvLyAgU3F1YXNoIHNwYWNlIGZvbGxvd2VkIGJ5IG5ld2xpbmVcblxuICB3aGlsZSAoZGVzY3JpcHRpb24pIHtcbiAgICAvLyBMb25nZXIgdGhhbiB3aWR0aD8gRmluZCBhIHNwYWNlIHRvIGJyZWFrIGFwYXJ0XG4gICAgbGV0IHNlZ21lbnQ6IHN0cmluZztcbiAgICBpZiAoZGVzY3JpcHRpb24ubGVuZ3RoID4gd2lkdGgpIHtcbiAgICAgIHNlZ21lbnQgPSBkZXNjcmlwdGlvbi5zbGljZSgwLCBNYXRoLm1heCgwLCB3aWR0aCArIDEpKTtcbiAgICAgIHdoaWxlICghc2VnbWVudC5lbmRzV2l0aCgnICcpICYmICFzZWdtZW50LmVuZHNXaXRoKCdcXG4nKSAmJiBzZWdtZW50KSB7XG4gICAgICAgIHNlZ21lbnQgPSBzZWdtZW50LnNsaWNlKDAsIE1hdGgubWF4KDAsIHNlZ21lbnQubGVuZ3RoIC0gMSkpO1xuICAgICAgfVxuXG4gICAgICAvLyBUcmltbWVkIHRvbyBtdWNoP1xuICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoIDwgd2lkdGggKiAwLjY3KSB7XG4gICAgICAgIHNlZ21lbnQgPSBkZXNjcmlwdGlvbjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2VnbWVudCA9IGRlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBuZXdsaW5lXG4gICAgY29uc3QgbmV3bGluZUluZGV4ID0gc2VnbWVudC5pbmRleE9mKCdcXG4nKTtcbiAgICBpZiAobmV3bGluZUluZGV4ID49IDApIHtcbiAgICAgIHNlZ21lbnQgPSBzZWdtZW50LnNsaWNlKDAsIE1hdGgubWF4KDAsIG5ld2xpbmVJbmRleCArIDEpKTtcbiAgICB9XG4gICAgY29udGVudC5wdXNoKGAke3ByZXBlbmR9JHtzZWdtZW50fWAudHJpbUVuZCgpKTtcbiAgICAvLyBSZW1haW5pbmdcbiAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLnNsaWNlKHNlZ21lbnQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUmVwbyB7XG4gIG93bmVyOiBzdHJpbmc7XG4gIHJlcG86IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcG9zaXRvcnlGaW5kZXIoXG4gIGlucHV0UmVwbzogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCxcbiAgY29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZCB8IG51bGwsXG4pOiBSZXBvIHwgbnVsbCB7XG4gIGNvbnN0IGxvZyA9IG5ldyBMb2dUYXNrKCdyZXBvc2l0b3J5RmluZGVyJyk7XG4gIGNvbnN0IG9iaiA9IHt9IGFzIHVua25vd247XG4gIGNvbnN0IHJlc3VsdCA9IG9iaiBhcyBSZXBvO1xuICBpZiAoaW5wdXRSZXBvKSB7XG4gICAgW3Jlc3VsdC5vd25lciwgcmVzdWx0LnJlcG9dID0gaW5wdXRSZXBvLnNwbGl0KCcvJykgYXMgW3N0cmluZywgc3RyaW5nXTtcbiAgICBsb2cuaW5mbyhgcmVwb3NpdG9yeUZpbmRlciB1c2luZyBpbnB1dCAke2lucHV0UmVwb30gYW5kIHJldHVybnMgJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52LkdJVEhVQl9SRVBPU0lUT1JZKSB7XG4gICAgW3Jlc3VsdC5vd25lciwgcmVzdWx0LnJlcG9dID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1JFUE9TSVRPUlkuc3BsaXQoJy8nKSBhcyBbc3RyaW5nLCBzdHJpbmddO1xuICAgIGxvZy5pbmZvKFxuICAgICAgYHJlcG9zaXRvcnlGaW5kZXIgdXNpbmcgR0lUSFVCX1JFUE9TSVRPUlkgJHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuR0lUSFVCX1JFUE9TSVRPUllcbiAgICAgIH0gYW5kIHJldHVybnMgJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWAsXG4gICAgKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjb250ZXh0KSB7XG4gICAgcmVzdWx0Lm93bmVyID0gY29udGV4dC5yZXBvLm93bmVyO1xuICAgIHJlc3VsdC5yZXBvID0gY29udGV4dC5yZXBvLnJlcG87XG5cbiAgICBsb2cuaW5mbyhcbiAgICAgIGByZXBvc2l0b3J5RmluZGVyIHVzaW5nIEdJVEhVQl9SRVBPU0lUT1JZICR7XG4gICAgICAgIHByb2Nlc3MuZW52LkdJVEhVQl9SRVBPU0lUT1JZXG4gICAgICB9IGFuZCByZXR1cm5zICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gLFxuICAgICk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuSU5QVVRfT1dORVIgJiYgcHJvY2Vzcy5lbnYuSU5QVVRfUkVQTykge1xuICAgIHJlc3VsdC5vd25lciA9IHByb2Nlc3MuZW52LklOUFVUX09XTkVSO1xuICAgIHJlc3VsdC5yZXBvID0gcHJvY2Vzcy5lbnYuSU5QVVRfUkVQTztcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgZmlsZUNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoJy5naXQvY29uZmlnJywgJ3V0ZjgnKTtcbiAgICBjb25zdCBwYXR0ZXJuID0gL3VybCggKT89KCApPy4qZ2l0aHViXFwuY29tWy86XSg/PG93bmVyPi4qKVxcLyg/PHJlcG8+LiopXFwuZ2l0LztcblxuICAgIGludGVyZmFjZSBPd25lclJlcG9JbnRlcmZhY2UgZXh0ZW5kcyBSZWdFeHBFeGVjQXJyYXkge1xuICAgICAgZ3JvdXBzPzoge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gICAgICAgIG93bmVyOiBzdHJpbmc7XG4gICAgICAgIHJlcG86IHN0cmluZztcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0cyA9IGZpbGVDb250ZW50Lm1hdGNoKHBhdHRlcm4pIGFzIE93bmVyUmVwb0ludGVyZmFjZTtcbiAgICBpZiAocmVzdWx0cyAhPT0gbnVsbCkge1xuICAgICAgbG9nLmRlYnVnKEpTT04uc3RyaW5naWZ5KHJlc3VsdHMuZ3JvdXBzKSk7XG4gICAgICByZXN1bHQub3duZXIgPSByZXN1bHRzLmdyb3Vwcz8ub3duZXIgPz8gJyc7XG4gICAgICByZXN1bHQucmVwbyA9IHJlc3VsdHMuZ3JvdXBzPy5yZXBvID8/ICcnO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIGNhbid0IGZpbmQgaXRcbiAgICBsb2cuZGVidWcoYENvdWxkbid0IGZpbmQgYW55IG93bmVyIG9yIHJlcG86ICR7ZXJyb3J9YCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdpdF9kZWZhdWx0X2JyYW5jaCgpOiBzdHJpbmcge1xuICAvLyBnaXQgc3ltYm9saWMtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRCB8IHNlZCAnc0BecmVmcy9yZW1vdGVzL29yaWdpbi9AQCdcbiAgcmV0dXJuICcnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29sdW1uSGVhZGVyKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGNvbnN0IG5vcm1hbGlzZWRIZWFkZXIgPSB0aXRsZWNhc2UoXG4gICAgdmFsdWVcbiAgICAgIC50cmltKClcbiAgICAgIC5yZXBsYWNlKC9eWypffl0rLywgJycpXG4gICAgICAucmVwbGFjZSgvWypffl0rJC8sICcnKSxcbiAgKTtcbiAgaWYgKG5vcm1hbGlzZWRIZWFkZXIpIHtcbiAgICByZXR1cm4gYCoqJHtub3JtYWxpc2VkSGVhZGVyfSoqYDtcbiAgfVxuICByZXR1cm4gJyc7XG59XG5leHBvcnQgZnVuY3Rpb24gcm93SGVhZGVyKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGNvbnN0IG5vcm1hbGlzZWRIZWFkZXIgPSB2YWx1ZS50cmltKCkucmVwbGFjZSgvXlxcKisvLCAnJykucmVwbGFjZSgvXFwqKyQvLCAnJyk7XG4gIHJldHVybiBgXFxgKioke25vcm1hbGlzZWRIZWFkZXJ9KipcXGBgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFZlcnNpb25TdHJpbmcoaW5wdXRzOiBJbnB1dHMpOiBzdHJpbmcge1xuICBsZXQgdmVyc2lvblN0cmluZyA9ICcnO1xuICBjb25zdCBsb2cgPSBuZXcgTG9nVGFzaygnZ2V0Q3VycmVudFZlcnNpb25TdHJpbmcnKTtcbiAgaWYgKGlucHV0cy5jb25maWcuZ2V0KCd2ZXJzaW9uaW5nOmVuYWJsZWQnKSkge1xuICAgIGxvZy5kZWJ1ZygndmVyc2lvbiBzdHJpbmcgaW4gZ2VuZXJhdGVkIGV4YW1wbGUgaXMgZW5hYmxlZCcpO1xuICAgIGNvbnN0IG9SaWRlID0gaW5wdXRzLmNvbmZpZy5nZXQoJ3ZlcnNpb25pbmc6b3ZlcnJpZGUnKSBhcyBzdHJpbmc7XG4gICAgbGV0IHBhY2thZ2VWZXJzaW9uID0gcHJvY2Vzcy5lbnYubnBtX3BhY2thZ2VfdmVyc2lvbjtcbiAgICBsb2cuZGVidWcoYHZlcnNpb24gc3RyaW5nIGluIGVudjpucG1fcGFja2FnZV92ZXJzaW9uIGlzICR7cGFja2FnZVZlcnNpb24gPz8gJ25vdCBmb3VuZCd9YCk7XG4gICAgaWYgKCFwYWNrYWdlVmVyc2lvbikge1xuICAgICAgbG9nLmRlYnVnKCd2ZXJzaW9uIHN0cmluZyBpbiBlbnY6bnBtX3BhY2thZ2VfdmVyc2lvbiBpcyBub3QgZm91bmQsIHRyeWluZyB0byB1c2UgZ2l0Jyk7XG4gICAgICB0cnkge1xuICAgICAgICBmcy5hY2Nlc3NTeW5jKCdwYWNrYWdlLmpzb24nKTtcbiAgICAgICAgY29uc3QgcGFja2FnZURhdGE6IFBhcnRpYWw8UGFja2FnZUpzb24+ID0gSlNPTi5wYXJzZShcbiAgICAgICAgICBmcy5yZWFkRmlsZVN5bmMoJ3BhY2thZ2UuanNvbicsICd1dGY4JyksXG4gICAgICAgICk7XG4gICAgICAgIHBhY2thZ2VWZXJzaW9uID0gcGFja2FnZURhdGEudmVyc2lvbjtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgcGFja2FnZS5qc29uIG5vdCBmb3VuZC4gJHtlcnJvcn1gKTtcbiAgICAgIH1cbiAgICAgIGxvZy5kZWJ1ZyhgdmVyc2lvbiBzdHJpbmcgaW4gcGFja2FnZS5qc29uOnZlcnNpb24gaXMgJHtwYWNrYWdlVmVyc2lvbiA/PyAnbm90IGZvdW5kJ31gKTtcbiAgICB9XG5cbiAgICB2ZXJzaW9uU3RyaW5nID0gb1JpZGUgJiYgb1JpZGUubGVuZ3RoID4gMCA/IG9SaWRlIDogcGFja2FnZVZlcnNpb24gPz8gJzAuMC4wJztcblxuICAgIGlmIChcbiAgICAgIHZlcnNpb25TdHJpbmcgJiZcbiAgICAgICF2ZXJzaW9uU3RyaW5nLnN0YXJ0c1dpdGgoaW5wdXRzLmNvbmZpZy5nZXQoJ3ZlcnNpb25pbmc6cHJlZml4JykgYXMgc3RyaW5nKVxuICAgICkge1xuICAgICAgdmVyc2lvblN0cmluZyA9IGAke2lucHV0cy5jb25maWcuZ2V0KCd2ZXJzaW9uaW5nOnByZWZpeCcpIGFzIHN0cmluZ30ke3ZlcnNpb25TdHJpbmd9YDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmVyc2lvblN0cmluZyA9IGlucHV0cy5jb25maWcuZ2V0KCd2ZXJzaW9uaW5nOmJyYW5jaCcpIGFzIHN0cmluZztcbiAgfVxuICBsb2cuZGVidWcoYHZlcnNpb24gdG8gdXNlIGluIGdlbmVyYXRlZCBleGFtcGxlIGlzICR7dmVyc2lvblN0cmluZ31gKTtcbiAgcmV0dXJuIHZlcnNpb25TdHJpbmc7XG59XG4iLCAiaW1wb3J0ICogYXMgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBFT0wgfSBmcm9tICdub2RlOm9zJztcblxuaW1wb3J0IExvZ1Rhc2sgZnJvbSAnLi9sb2d0YXNrJztcbmltcG9ydCB7IGZvcm1hdE1hcmtkb3duIH0gZnJvbSAnLi9wcmV0dGllcic7XG5cbmV4cG9ydCBjb25zdCBzdGFydFRva2VuRm9ybWF0ID0gJzwhLS0gc3RhcnQgJXMgLS0+JztcbmV4cG9ydCBjb25zdCBlbmRUb2tlbkZvcm1hdCA9ICc8IS0tIGVuZCAlcyAtLT4nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkbWVFZGl0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBmaWxlQ29udGVudDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGZpbGVQYXRoOiBzdHJpbmcpIHtcbiAgICB0aGlzLmZpbGVQYXRoID0gZmlsZVBhdGg7XG4gICAgdGhpcy5maWxlQ29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcbiAgfVxuXG4gIHVwZGF0ZVNlY3Rpb24obmFtZTogc3RyaW5nLCBwcm92aWRlZENvbnRlbnQ6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgY29uc3QgbG9nID0gbmV3IExvZ1Rhc2sobmFtZSk7XG4gICAgY29uc3QgY29udGVudCA9IEFycmF5LmlzQXJyYXkocHJvdmlkZWRDb250ZW50KSA/IHByb3ZpZGVkQ29udGVudC5qb2luKEVPTCkgOiBwcm92aWRlZENvbnRlbnQ7XG4gICAgbG9nLmluZm8oYExvb2tpbmcgZm9yIHRoZSAke25hbWV9IHRva2VuIGluICR7dGhpcy5maWxlUGF0aH1gKTtcbiAgICBjb25zdCBzdGFydFRva2VuID0gc3RhcnRUb2tlbkZvcm1hdC5yZXBsYWNlKCclcycsIG5hbWUpO1xuICAgIGNvbnN0IHN0b3BUb2tlbiA9IGVuZFRva2VuRm9ybWF0LnJlcGxhY2UoJyVzJywgbmFtZSk7XG5cbiAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy5maWxlQ29udGVudC5pbmRleE9mKHN0YXJ0VG9rZW4pO1xuICAgIGNvbnN0IHN0b3BJbmRleCA9IHRoaXMuZmlsZUNvbnRlbnQuaW5kZXhPZihzdG9wVG9rZW4pO1xuXG4gICAgaWYgKHN0YXJ0SW5kZXggIT09IC0xICYmIHN0b3BJbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IGJlZm9yZUNvbnRlbnQgPSB0aGlzLmZpbGVDb250ZW50LnNsaWNlKDAsIE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggKyBzdGFydFRva2VuLmxlbmd0aCkpO1xuICAgICAgY29uc3QgYWZ0ZXJDb250ZW50ID0gdGhpcy5maWxlQ29udGVudC5zbGljZShzdG9wSW5kZXgpO1xuXG4gICAgICB0aGlzLmZpbGVDb250ZW50ID0gYmVmb3JlQ29udGVudCArIGNvbnRlbnQgKyBhZnRlckNvbnRlbnQ7XG4gICAgfSBlbHNlIGlmIChzdG9wSW5kZXggPCBzdGFydEluZGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFN0YXJ0IHRva2VuIGZvciBzZWN0aW9uICcke25hbWV9IG11c3QgYXBwZWFyIGJlZm9yZSBlbmQgdG9rZW5gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkdW1wVG9GaWxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmb3JtYXRNYXJrZG93bih0aGlzLmZpbGVDb250ZW50KTtcbiAgICByZXR1cm4gZnMud3JpdGVGaWxlU3luYyh0aGlzLmZpbGVQYXRoLCBjb250ZW50LCAndXRmOCcpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAncHJldHRpZXInO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZm9ybWF0WWFtbCh2YWx1ZTogc3RyaW5nLCBmaWxlcGF0aD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGZwID0gZmlsZXBhdGggPyB7IGZpbGVwYXRoIH0gOiB7fTtcbiAgcmV0dXJuIGZvcm1hdCh2YWx1ZSwge1xuICAgIHNlbWk6IGZhbHNlLFxuICAgIHBhcnNlcjogJ3lhbWwnLFxuICAgIGVtYmVkZGVkTGFuZ3VhZ2VGb3JtYXR0aW5nOiAnYXV0bycsXG4gICAgLi4uZnAsXG4gIH0pO1xufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZvcm1hdE1hcmtkb3duKHZhbHVlOiBzdHJpbmcsIGZpbGVwYXRoPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZnAgPSBmaWxlcGF0aCA/IHsgZmlsZXBhdGggfSA6IHt9O1xuICByZXR1cm4gZm9ybWF0KHZhbHVlLCB7XG4gICAgc2VtaTogZmFsc2UsXG4gICAgcGFyc2VyOiAnbWFya2Rvd24nLFxuICAgIGVtYmVkZGVkTGFuZ3VhZ2VGb3JtYXR0aW5nOiAnYXV0bycsXG4gICAgLi4uZnAsXG4gIH0pO1xufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyYXBEZXNjcmlwdGlvbihcbiAgdmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgY29udGVudDogc3RyaW5nW10sXG4gIHByZWZpeDogc3RyaW5nLFxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gY29udGVudCA/PyBbXTtcbiAgY29uc3QgdmFsdWVXaXRob3V0UHJlZml4ID0gcHJlZml4ID8gdmFsdWUucmVwbGFjZShwcmVmaXgsICcnKSA6IHZhbHVlO1xuICBjb25zdCBmb3JtYXR0ZWRTdHJpbmcgPSBhd2FpdCBmb3JtYXQoYCR7cHJlZml4ID8/ICcnfSR7dmFsdWVXaXRob3V0UHJlZml4fWAsIHtcbiAgICBzZW1pOiBmYWxzZSxcbiAgICBwYXJzZXI6ICd5YW1sJyxcbiAgICBwcm9zZVdyYXA6ICdhbHdheXMnLFxuICB9KTtcbiAgY29udGVudC5wdXNoKC4uLmZvcm1hdHRlZFN0cmluZy5zcGxpdCgnXFxuJykpO1xuICByZXR1cm4gY29udGVudDtcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gd29ya2luZ0RpcmVjdG9yeSgpOiBzdHJpbmcge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuR0lUSFVCX1dPUktTUEFDRSA/PyBwcm9jZXNzLmVudi5JTklUX0NXRCA/PyBwcm9jZXNzLmN3ZCgpO1xufVxuZXhwb3J0IGRlZmF1bHQgd29ya2luZ0RpcmVjdG9yeTtcbiIsICJpbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgdHlwZSBJbnB1dHMgZnJvbSAnLi9pbnB1dHMnO1xuaW1wb3J0IExvZ1Rhc2sgZnJvbSAnLi9sb2d0YXNrJztcblxuZXhwb3J0IGludGVyZmFjZSBWZXJzaW9uaW5nIHtcbiAgZW5hYmxlZD86IGJvb2xlYW47XG4gIHByZWZpeD86IHN0cmluZztcbiAgb3ZlcnJpZGU/OiBzdHJpbmc7XG4gIGJyYW5jaD86IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUGF0aHMge1xuICBhY3Rpb246IHN0cmluZztcbiAgcmVhZG1lOiBzdHJpbmc7XG59XG5leHBvcnQgY2xhc3MgR0hBY3Rpb25Eb2NzQ29uZmlnIHtcbiAgb3duZXI/OiBzdHJpbmc7XG5cbiAgcmVwbz86IHN0cmluZztcblxuICB0aXRsZV9wcmVmaXg/OiBzdHJpbmc7XG5cbiAgdGl0bGU/OiBzdHJpbmc7XG5cbiAgcGF0aHM/OiBQYXRocztcblxuICBzaG93X2xvZ28/OiBib29sZWFuO1xuXG4gIHZlcnNpb25pbmc/OiBWZXJzaW9uaW5nO1xuXG4gIHJlYWRtZVBhdGg/OiBzdHJpbmc7XG5cbiAgb3V0cGF0aD86IHN0cmluZztcblxuICBwcmV0dHk/OiBib29sZWFuO1xuXG4gIGxvYWRJbnB1dHMoaW5wdXRzOiBJbnB1dHMpOiB2b2lkIHtcbiAgICB0aGlzLm93bmVyID0gaW5wdXRzLmNvbmZpZy5nZXQoJ293bmVyJykgYXMgc3RyaW5nO1xuICAgIHRoaXMucmVwbyA9IGlucHV0cy5jb25maWcuZ2V0KCdyZXBvJykgYXMgc3RyaW5nO1xuICAgIHRoaXMudGl0bGVfcHJlZml4ID0gaW5wdXRzLmNvbmZpZy5nZXQoJ3RpdGxlX3ByZWZpeCcpIGFzIHN0cmluZztcbiAgICB0aGlzLnRpdGxlID0gaW5wdXRzLmNvbmZpZy5nZXQoJ3RpdGxlJykgYXMgc3RyaW5nO1xuICAgIHRoaXMucGF0aHMgPSBpbnB1dHMuY29uZmlnLmdldCgncGF0aHMnKSBhcyBQYXRocztcbiAgICB0aGlzLnNob3dfbG9nbyA9IGlucHV0cy5jb25maWcuZ2V0KCdzaG93X2xvZ28nKSBhcyBib29sZWFuO1xuICAgIHRoaXMudmVyc2lvbmluZyA9IHtcbiAgICAgIGVuYWJsZWQ6IGlucHV0cy5jb25maWcuZ2V0KCd2ZXJzaW9uaW5nOmVuYWJsZWQnKSBhcyBib29sZWFuLFxuICAgICAgcHJlZml4OiBpbnB1dHMuY29uZmlnLmdldCgndmVyc2lvbmluZzpwcmVmaXgnKSBhcyBzdHJpbmcsXG4gICAgICBvdmVycmlkZTogaW5wdXRzLmNvbmZpZy5nZXQoJ3ZlcnNpb25pbmc6b3ZlcnJpZGUnKSBhcyBzdHJpbmcsXG4gICAgICBicmFuY2g6IGlucHV0cy5jb25maWcuZ2V0KCd2ZXJzaW9uaW5nOmJyYW5jaCcpIGFzIHN0cmluZyxcbiAgICB9O1xuICAgIHRoaXMub3V0cGF0aCA9IGlucHV0cy5jb25maWcuZ2V0KCdvdXRwYXRoJykgYXMgc3RyaW5nO1xuICAgIHRoaXMucHJldHR5ID0gaW5wdXRzLmNvbmZpZy5nZXQoJ3ByZXR0eScpIGFzIGJvb2xlYW47XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZ1BhdGgge3N0cmluZ31cbiAgICogQGRlc2NyaXB0aW9uIFNhdmVzIHRoZSBjb25maWcgdG8gYSBmaWxlLGlmIHRoZSBmaWxlIGV4aXN0cyBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuICAgKi9cbiAgc2F2ZShjb25maWdQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBsb2cgPSBuZXcgTG9nVGFzaygnY29uZmlnOnNhdmUnKTtcbiAgICAvLyB2YWxpZGF0ZSB0aGF0IHRoYXQgdGhlIGRpcmVjdG9yeSBleGlzdHNcbiAgICBjb25zdCBkaXJlY3RvcnkgPSBwYXRoLmRpcm5hbWUoY29uZmlnUGF0aCk7XG4gICAgLy8gbWFrZSB0aGUgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICBmcy5ta2RpcihkaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlIH0sIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgbG9nLmVycm9yKGBFcnJvciBjcmVhdGluZyBkaXJlY3Rvcnk6ICR7ZGlyZWN0b3J5fS4gRXJyb3I6ICR7ZXJyfWApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmcy53cml0ZUZpbGUoY29uZmlnUGF0aCwgSlNPTi5zdHJpbmdpZnkodGhpcywgbnVsbCwgMiksIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgbG9nLmVycm9yKGBFcnJvciB3cml0aW5nIGNvbmZpZyBmaWxlOiAke2NvbmZpZ1BhdGh9LiBFcnJvcjogJHtlcnJ9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuaW5mbyhgQ29uZmlnIGZpbGUgd3JpdHRlbiB0bzogJHtjb25maWdQYXRofWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgR0hBY3Rpb25Eb2NzQ29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IElucHV0cyBmcm9tICcuL2lucHV0cyc7XG5cbi8vIFRoaXMgc2NyaXB0IHJlYnVpbGRzIHRoZSB1c2FnZSBzZWN0aW9uIGluIHRoZSBSRUFETUUubWQgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBhY3Rpb24ueW1sXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzYXZlKGlucHV0czogSW5wdXRzKTogdm9pZCB7XG4gIGNvbnN0IGRvY3NDb25maWcgPSBuZXcgR0hBY3Rpb25Eb2NzQ29uZmlnKCk7XG4gIGRvY3NDb25maWcubG9hZElucHV0cyhpbnB1dHMpO1xuICBpZiAoaW5wdXRzLmNvbmZpZy5nZXQoJ3NhdmUnKS50b1N0cmluZygpID09PSAndHJ1ZScpIHtcbiAgICBkb2NzQ29uZmlnLnNhdmUoaW5wdXRzLmNvbmZpZ1BhdGgpO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBSZXBvIH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgdHlwZSBJbnB1dHMgZnJvbSAnLi4vaW5wdXRzJztcbmltcG9ydCBMb2dUYXNrIGZyb20gJy4uL2xvZ3Rhc2snO1xuXG5leHBvcnQgaW50ZXJmYWNlIElCYWRnZSB7XG4gIGFsdDogc3RyaW5nO1xuICBpbWc6IHN0cmluZztcbiAgdXJsPzogc3RyaW5nO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXBkYXRlQmFkZ2VzKHRva2VuOiBzdHJpbmcsIGlucHV0czogSW5wdXRzKTogdm9pZCB7XG4gIGNvbnN0IGxvZyA9IG5ldyBMb2dUYXNrKHRva2VuKTtcbiAgY29uc3QgZW5hYmxlVmVyc2lvbmluZyA9IGlucHV0cy5jb25maWcuZ2V0KCd2ZXJzaW9uaW5nOmJhZGdlcycpO1xuICBjb25zdCBiYWRnZXM6IElCYWRnZVtdID0gW107XG4gIGNvbnN0IHJlcG9zOiBSZXBvID0ge1xuICAgIG93bmVyOiBpbnB1dHMuY29uZmlnLmdldCgnb3duZXInKSxcbiAgICByZXBvOiBpbnB1dHMuY29uZmlnLmdldCgncmVwbycpLFxuICB9O1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBnaXRodWIgYmFkZ2VzLlxuICAgKiBAcGFyYW0gZ2l0aHViSWRcbiAgICovXG4gIGZ1bmN0aW9uIGdpdGh1YkJhZGdlcygpOiBJQmFkZ2VbXSB7XG4gICAgY29uc3QgcmVwb1VybCA9IGBodHRwczovL2dpdGh1Yi5jb20vJHtyZXBvcy5vd25lcn0vJHtyZXBvcy5yZXBvfWA7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgaW1nOiBgaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvdi9yZWxlYXNlLyR7cmVwb3Mub3duZXJ9LyR7cmVwb3MucmVwb30/ZGlzcGxheV9uYW1lPXRhZyZzb3J0PXNlbXZlciZsb2dvPWdpdGh1YiZzdHlsZT1mbGF0LXNxdWFyZWAsXG4gICAgICAgIGFsdDogJ1JlbGVhc2UnLFxuICAgICAgICB1cmw6IGAke3JlcG9Vcmx9L3JlbGVhc2VzL2xhdGVzdGAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpbWc6IGBodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9yZWxlYXNlLWRhdGUvJHtyZXBvcy5vd25lcn0vJHtyZXBvcy5yZXBvfT9kaXNwbGF5X25hbWU9dGFnJnNvcnQ9c2VtdmVyJmxvZ289Z2l0aHViJnN0eWxlPWZsYXQtc3F1YXJlYCxcbiAgICAgICAgYWx0OiAnUmVsZWFzZScsXG4gICAgICAgIHVybDogYCR7cmVwb1VybH0vcmVsZWFzZXMvbGF0ZXN0YCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGltZzogYGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL2xhc3QtY29tbWl0LyR7cmVwb3Mub3duZXJ9LyR7cmVwb3MucmVwb30/bG9nbz1naXRodWImc3R5bGU9ZmxhdC1zcXVhcmVgLFxuICAgICAgICBhbHQ6ICdDb21taXQnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaW1nOiBgaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvaXNzdWVzLyR7cmVwb3Mub3duZXJ9LyR7cmVwb3MucmVwb30/bG9nbz1naXRodWImc3R5bGU9ZmxhdC1zcXVhcmVgLFxuICAgICAgICBhbHQ6ICdPcGVuIElzc3VlcycsXG4gICAgICAgIHVybDogYCR7cmVwb1VybH0vaXNzdWVzYCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGltZzogYGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL2Rvd25sb2Fkcy8ke3JlcG9zLm93bmVyfS8ke3JlcG9zLnJlcG99L3RvdGFsP2xvZ289Z2l0aHViJnN0eWxlPWZsYXQtc3F1YXJlYCxcbiAgICAgICAgYWx0OiAnRG93bmxvYWRzJyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgYmFkZ2UuXG4gICAqL1xuICBmdW5jdGlvbiBnZW5lcmF0ZUJhZGdlKGl0ZW06IElCYWRnZSk6IHN0cmluZyB7XG4gICAgY29uc3QgYmFkZ2VUZW1wbGF0ZSA9IGA8aW1nIHNyYz1cIiR7aXRlbS5pbWd9XCIgYWx0PVwiJHtpdGVtLmFsdCB8fCAnJ31cIiAvPmA7XG4gICAgaWYgKGl0ZW0udXJsKSB7XG4gICAgICByZXR1cm4gYDxhIGhyZWY9XCIke2l0ZW0udXJsfVwiPiR7YmFkZ2VUZW1wbGF0ZX08L2E+YDtcbiAgICB9XG4gICAgcmV0dXJuIGJhZGdlVGVtcGxhdGU7XG4gIH1cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhbGwgYmFkZ2VzLlxuICAgKi9cbiAgZnVuY3Rpb24gZ2VuZXJhdGVCYWRnZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGJhZGdlQXJyYXkgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGIgb2YgYmFkZ2VzKSB7XG4gICAgICBiYWRnZUFycmF5LnB1c2goZ2VuZXJhdGVCYWRnZShiKSk7XG4gICAgfVxuICAgIHJldHVybiBbYmFkZ2VBcnJheS5qb2luKCcnKV07XG4gIH1cblxuICBsb2cuc3RhcnQoKTtcblxuICAvLyBBZGQgR2l0aHViIGJhZGdlc1xuICBpZiAoZW5hYmxlVmVyc2lvbmluZykge1xuICAgIGJhZGdlcy5wdXNoKC4uLmdpdGh1YkJhZGdlcygpKTtcbiAgfVxuICBjb25zdCBjb250ZW50ID0gZ2VuZXJhdGVCYWRnZXMoKTtcbiAgaW5wdXRzLnJlYWRtZUVkaXRvci51cGRhdGVTZWN0aW9uKHRva2VuLCBjb250ZW50KTtcblxuICBsb2cuc3VjY2VzcygpO1xufVxuIiwgImltcG9ydCB0eXBlIElucHV0cyBmcm9tICcuLi9pbnB1dHMnO1xuaW1wb3J0IExvZ1Rhc2sgZnJvbSAnLi4vbG9ndGFzayc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVwZGF0ZURlc2NyaXB0aW9uKHRva2VuOiBzdHJpbmcsIGlucHV0czogSW5wdXRzKTogdm9pZCB7XG4gIGNvbnN0IGxvZyA9IG5ldyBMb2dUYXNrKHRva2VuKTtcbiAgLy8gQnVpbGQgdGhlIG5ldyBSRUFETUVcbiAgY29uc3QgY29udGVudDogc3RyaW5nW10gPSBbXTtcbiAgLy8gQnVpbGQgdGhlIG5ldyBkZXNjcmlwdGlvbiBzZWN0aW9uXG4gIGlmIChpbnB1dHM/LmFjdGlvbj8uZGVzY3JpcHRpb24pIHtcbiAgICBsb2cuc3RhcnQoKTtcbiAgICBjb25zdCBkZXNjOiBzdHJpbmcgPSBpbnB1dHMuYWN0aW9uLmRlc2NyaXB0aW9uXG4gICAgICAudHJpbSgpXG4gICAgICAucmVwbGFjZUFsbCgnXFxyXFxuJywgJ1xcbicpIC8vIENvbnZlcnQgQ1IgdG8gTEZcbiAgICAgIC5yZXBsYWNlQWxsKC8gKy9nLCAnICcpIC8vICAgIFNxdWFzaCBjb25zZWN1dGl2ZSBzcGFjZXNcbiAgICAgIC5yZXBsYWNlQWxsKCcgXFxuJywgJ1xcbicpIC8vICBTcXVhc2ggc3BhY2UgZm9sbG93ZWQgYnkgbmV3bGluZVxuICAgICAgLnJlcGxhY2VBbGwoJ1xcblxcbicsICc8YnIgLz4nKTsgLy8gY29udmVydCBkb3VibGUgcmV0dXJuIHRvIGEgYnJlYWtcblxuICAgIGxvZy5pbmZvKGBXcml0aW5nICR7ZGVzYy5sZW5ndGh9IGNoYXJhY3RlcnMgdG8gdGhlIGRlc2NyaXB0aW9uIHNlY3Rpb25gKTtcbiAgICBjb250ZW50LnB1c2goZGVzYyk7XG4gICAgaW5wdXRzLnJlYWRtZUVkaXRvci51cGRhdGVTZWN0aW9uKHRva2VuLCBjb250ZW50KTtcbiAgICBsb2cuc3VjY2VzcygpO1xuICB9XG59XG4iLCAiZXhwb3J0IHR5cGUgTWFya2Rvd25BcnJheVJvd1R5cGUgPSBzdHJpbmdbXVtdO1xuZXhwb3J0IHR5cGUgTWFya2Rvd25BcnJheUl0ZW1UeXBlID0gc3RyaW5nO1xuLyoqXG4gKiBGaWxscyB0aGUgd2lkdGggb2YgdGhlIGNlbGwuXG4gKiBAcGFyYW0gdGV4dFxuICogQHBhcmFtIHdpZHRoXG4gKiBAcGFyYW0gcGFkZGluZ1N0YXJ0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWxsV2lkdGgodGV4dDogc3RyaW5nLCB3aWR0aDogbnVtYmVyLCBwYWRkaW5nU3RhcnQ6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgJyAnLnJlcGVhdChwYWRkaW5nU3RhcnQpICsgdGV4dCArICcgJy5yZXBlYXQoTWF0aC5tYXgoMSwgd2lkdGggLSB0ZXh0Lmxlbmd0aCAtIHBhZGRpbmdTdGFydCkpXG4gICk7XG59XG4vKipcbiAqIEVzY2FwZSBhIHRleHQgc28gaXQgY2FuIGJlIHVzZWQgaW4gYSBtYXJrZG93biB0YWJsZVxuICogQHBhcmFtIHRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtkb3duRXNjYXBlVGFibGVDZWxsKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoJ1xcbicsICc8YnIgLz4nKS5yZXBsYWNlQWxsKCd8JywgJ1xcXFx8Jyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrZG93bkVzY2FwZUlubGluZUNvZGUoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gcmVwbGFjZSBncmF2ZSBhY2NlbnRzIHdpdGggPGNvZGU+IEhUTUwgZWxlbWVudCB0byByZXNvbHZlIHVuaWNvZGUgY2hhcmFjdGVyIGluIG1hcmtkb3duXG4gIC8vIGxldCBpc0Nsb3NpbmdUYWcgPSBmYWxzZTtcbiAgaWYgKGNvbnRlbnQuaW5jbHVkZXMoJ3wnKSkge1xuICAgIHJldHVybiBjb250ZW50LnJlcGxhY2VBbGwoLyhbXFxzKl9dfF4pYChbXmBdKylgKFtcXHMqX118JCkvZywgJyQxPGNvZGU+JDI8L2NvZGU+JDMnKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcblxuICAvLyA/LmZvckVhY2goKG1hdGNoKSA9PiB7XG4gIC8vICAgaWYgKCFpc0Nsb3NpbmdUYWcpIHtcbiAgLy8gICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UobWF0Y2gsICc8Y29kZT4nKTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZShtYXRjaCwgJzwvY29kZT4nKTtcbiAgLy8gICB9XG4gIC8vICAgaXNDbG9zaW5nVGFnID0gIWlzQ2xvc2luZ1RhZztcbiAgLy8gfSk7XG4gIC8vIHJldHVybiBjb250ZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBcnJheU9mQXJyYXlzVG9NYXJrZG93blRhYmxlKHByb3ZpZGVkVGFibGVDb250ZW50OiBNYXJrZG93bkFycmF5Um93VHlwZSk6IHN0cmluZyB7XG4gIGNvbnN0IHRhYmxlQ29udGVudDogTWFya2Rvd25BcnJheVJvd1R5cGUgPSBbXTtcbiAgY29uc3Qgb3V0cHV0U3RyaW5nczogc3RyaW5nW10gPSBbXTtcbiAgLy8gQ2xvbmUgdGhlIGFycmF5cyBzbyB3ZSBkb24ndCBtb2RpZnkgdGhlIG9yaWdpbmFsXG4gIGZvciAoY29uc3Qgcm93QSBvZiBwcm92aWRlZFRhYmxlQ29udGVudCkge1xuICAgIHRhYmxlQ29udGVudC5wdXNoKFsuLi5yb3dBXSBhcyBzdHJpbmdbXSk7XG4gIH1cbiAgY29uc3QgbWF4Um93cyA9IHRhYmxlQ29udGVudC5sZW5ndGg7XG4gIGxldCBtYXhDb2xzID0gMDtcbiAgbGV0IG1pbkNvbHMgPSAwO1xuICAvLyBGaW5kIHRoZSBtYXggYW5kIG1pbiBjb2x1bW5zIHNvIHdlIGNhbiBwYWQgdGhlIHJvd3NcbiAgLy8gZm9yIChjb25zdCBbaSwgZV0gb2YgdGFibGVDb250ZW50LmVudHJpZXMoKSkge1xuICBsZXQgdGJsSWR4ID0gMDtcbiAgZm9yIChjb25zdCBlIG9mIHRhYmxlQ29udGVudCkge1xuICAgIGlmICh0YWJsZUNvbnRlbnRbdGJsSWR4XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBudW1Db2xzID0gZS5sZW5ndGg7XG4gICAgICBpZiAobnVtQ29scyA+IG1heENvbHMpIHtcbiAgICAgICAgbWF4Q29scyA9IG51bUNvbHM7XG4gICAgICB9XG4gICAgICBpZiAobnVtQ29scyA8IG1pbkNvbHMgfHwgbWluQ29scyA9PT0gMCkge1xuICAgICAgICBtaW5Db2xzID0gbnVtQ29scztcbiAgICAgIH1cbiAgICB9XG4gICAgdGJsSWR4ICs9IDE7XG4gIH1cbiAgaWYgKG1heENvbHMgIT09IG1pbkNvbHMpIHtcbiAgICBsZXQgY250SWR4ID0gMDtcbiAgICBmb3IgKGNvbnN0IGUgb2YgdGFibGVDb250ZW50KSB7XG4gICAgICBpZiAodGFibGVDb250ZW50W2NudElkeF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0YWJsZUNvbnRlbnRbY250SWR4XSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IG1heENvbHMgfSkuZmlsbCgnJykgYXMgc3RyaW5nW107XG4gICAgICB9IGVsc2UgaWYgKGUubGVuZ3RoIDwgbWF4Q29scykge1xuICAgICAgICB0YWJsZUNvbnRlbnRbY250SWR4XSA9IFtcbiAgICAgICAgICAuLi5lLFxuICAgICAgICAgIC4uLkFycmF5LmZyb20oeyBsZW5ndGg6IG1heENvbHMgLSBlLmxlbmd0aCB9KS5maWxsKCd1bmRlZmluZWQnKSxcbiAgICAgICAgXSBhcyBzdHJpbmdbXTtcbiAgICAgIH1cbiAgICAgIGNudElkeCArPSAxO1xuICAgIH1cbiAgfVxuICBjb25zdCBtYXJrZG93bkFycmF5Um93c0xlbmd0aCA9IG1heFJvd3MgKyAxO1xuICBjb25zdCBtYXJrZG93bkFycmF5RW50cmllc0xlbmd0aCA9IG1heENvbHMgKiAyICsgMTtcbiAgY29uc3QgbWFya2Rvd25BcnJheXM6IE1hcmtkb3duQXJyYXlSb3dUeXBlID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogbWFya2Rvd25BcnJheVJvd3NMZW5ndGggfSkuZmlsbChcbiAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBtYXJrZG93bkFycmF5RW50cmllc0xlbmd0aCB9KS5maWxsKCd8JyBhcyBzdHJpbmcpIGFzIHN0cmluZ1tdLFxuICApIGFzIE1hcmtkb3duQXJyYXlSb3dUeXBlO1xuICBsZXQgaSA9IDA7XG4gIGZvciAoY29uc3Qgcm93IG9mIG1hcmtkb3duQXJyYXlzKSB7XG4gICAgbGV0IGNvbCA9IDA7XG5cbiAgICBjb25zdCBpZHggPSBpID4gMSA/IGkgLSAxIDogMDtcbiAgICBjb25zdCBkYXRhUm93ID0gdGFibGVDb250ZW50W2lkeF07XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcbiAgICAgIGxldCBjb250ZW50ID0gbWFya2Rvd25Fc2NhcGVUYWJsZUNlbGwoZGF0YVJvd1tjb2xdID8/ICcnKTtcblxuICAgICAgY29udGVudCA9IG1hcmtkb3duRXNjYXBlSW5saW5lQ29kZShjb250ZW50KTtcblxuICAgICAgaWYgKGogJSAyID09PSAxKSB7XG4gICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgbWFya2Rvd25BcnJheXNbaV1bal0gPSBgICoqJHtjb250ZW50LnRyaW0oKX0qKiBgO1xuICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDEpIHtcbiAgICAgICAgICBtYXJrZG93bkFycmF5c1tpXVtqXSA9ICctLS0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1hcmtkb3duQXJyYXlzW2ldW2pdID0gYCAke2NvbnRlbnQudHJpbSgpfSBgO1xuICAgICAgICB9XG4gICAgICAgIGNvbCArPSAxO1xuICAgICAgfVxuICAgIH1cbiAgICBvdXRwdXRTdHJpbmdzLnB1c2goYCR7bWFya2Rvd25BcnJheXNbaV0uam9pbignJyl9XFxuYCk7XG4gICAgaSArPSAxO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dFN0cmluZ3Muam9pbignJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFycmF5T2ZBcnJheXNUb01hcmtkb3duVGFibGU7XG4iLCAiaW1wb3J0IHsgY29sdW1uSGVhZGVyLCByb3dIZWFkZXIgfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCB0eXBlIElucHV0cyBmcm9tICcuLi9pbnB1dHMnO1xuaW1wb3J0IExvZ1Rhc2sgZnJvbSAnLi4vbG9ndGFzayc7XG5pbXBvcnQgbWFya2Rvd25lciBmcm9tICcuLi9tYXJrZG93bmVyJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXBkYXRlSW5wdXRzKHRva2VuOiBzdHJpbmcsIGlucHV0czogSW5wdXRzKTogdm9pZCB7XG4gIGNvbnN0IGxvZyA9IG5ldyBMb2dUYXNrKHRva2VuKTtcbiAgLy8gQnVpbGQgdGhlIG5ldyBSRUFETUVcbiAgY29uc3QgY29udGVudDogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgbWFya2Rvd25BcnJheTogc3RyaW5nW11bXSA9IFtdO1xuICBjb25zdCB0aXRsZUFycmF5ID0gWydJbnB1dCcsICdEZXNjcmlwdGlvbicsICdEZWZhdWx0JywgJ1JlcXVpcmVkJ107XG4gIGNvbnN0IHRpdGxlczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCB0IG9mIHRpdGxlQXJyYXkpIHtcbiAgICB0aXRsZXMucHVzaChjb2x1bW5IZWFkZXIodCkpO1xuICB9XG4gIG1hcmtkb3duQXJyYXkucHVzaCh0aXRsZXMpO1xuICBjb25zdCB2YXJzID0gaW5wdXRzLmFjdGlvbi5pbnB1dHM7XG4gIGNvbnN0IHRJID0gdmFycyA/IE9iamVjdC5rZXlzKHZhcnMpLmxlbmd0aCA6IDA7XG4gIGlmICh0SSA+IDApIHtcbiAgICBsb2cuc3RhcnQoKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh2YXJzKSkge1xuICAgICAgY29uc3QgdmFsdWVzID0gdmFyc1trZXldO1xuXG4gICAgICBsZXQgZGVzY3JpcHRpb24gPSB2YWx1ZXM/LmRlc2NyaXB0aW9uID8/ICcnO1xuXG4gICAgICAvLyBDaGVjayBpZiBvbmx5IGZpcnN0IGxpbmUgc2hvdWxkIGJlIGFkZGVkIChvbmx5IHN1YmplY3Qgd2l0aG91dCBib2R5KVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gICAgICBjb25zdCBtYXRjaGVzID0gZGVzY3JpcHRpb24ubWF0Y2goJyguKj8pXFxuXFxuKFtTc10qKScpO1xuICAgICAgaWYgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPj0gMikge1xuICAgICAgICBkZXNjcmlwdGlvbiA9IG1hdGNoZXNbMV0gfHwgZGVzY3JpcHRpb247XG4gICAgICB9XG5cbiAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24udHJpbSgpLnJlcGxhY2UoJ1xcbicsICc8YnIgLz4nKTtcblxuICAgICAgY29uc3Qgcm93OiBzdHJpbmdbXSA9IFtcbiAgICAgICAgcm93SGVhZGVyKGtleSksXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICB2YWx1ZXM/LmRlZmF1bHQgPyBgXFxgJHt2YWx1ZXMuZGVmYXVsdH1cXGBgIDogJycsXG4gICAgICAgIHZhbHVlcz8ucmVxdWlyZWQgPyAnKip0cnVlKionIDogJ19fZmFsc2VfXycsXG4gICAgICBdO1xuICAgICAgbG9nLmRlYnVnKEpTT04uc3RyaW5naWZ5KHJvdykpO1xuICAgICAgbWFya2Rvd25BcnJheS5wdXNoKHJvdyk7XG4gICAgfVxuICAgIGNvbnRlbnQucHVzaChtYXJrZG93bmVyKG1hcmtkb3duQXJyYXkpKTtcbiAgICBsb2cuaW5mbyhgQWN0aW9uIGhhcyAke3RJfSB0b3RhbCAke3Rva2VufWApO1xuICAgIGlucHV0cy5yZWFkbWVFZGl0b3IudXBkYXRlU2VjdGlvbih0b2tlbiwgY29udGVudCk7XG4gICAgbG9nLnN1Y2Nlc3MoKTtcbiAgfSBlbHNlIHtcbiAgICBsb2cuZGVidWcoYEFjdGlvbiBoYXMgbm8gJHt0b2tlbn1gKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNvbHVtbkhlYWRlciwgcm93SGVhZGVyIH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgdHlwZSBJbnB1dHMgZnJvbSAnLi4vaW5wdXRzJztcbmltcG9ydCBMb2dUYXNrIGZyb20gJy4uL2xvZ3Rhc2snO1xuaW1wb3J0IG1hcmtkb3duZXIgZnJvbSAnLi4vbWFya2Rvd25lcic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVwZGF0ZU91dHB1dHModG9rZW46IHN0cmluZywgaW5wdXRzOiBJbnB1dHMpOiB2b2lkIHtcbiAgY29uc3QgbG9nID0gbmV3IExvZ1Rhc2sodG9rZW4pO1xuXG4gIC8vIEJ1aWxkIHRoZSBuZXcgUkVBRE1FXG4gIGNvbnN0IGNvbnRlbnQ6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3QgbWFya2Rvd25BcnJheTogc3RyaW5nW11bXSA9IFtdO1xuICBjb25zdCB0aXRsZUFycmF5ID0gWydPdXRwdXQnLCAnRGVzY3JpcHRpb24nXTtcbiAgY29uc3QgdGl0bGVzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHQgb2YgdGl0bGVBcnJheSkge1xuICAgIHRpdGxlcy5wdXNoKGNvbHVtbkhlYWRlcih0KSk7XG4gIH1cbiAgbWFya2Rvd25BcnJheS5wdXNoKHRpdGxlcyk7XG4gIGNvbnN0IHZhcnMgPSBpbnB1dHMuYWN0aW9uLm91dHB1dHM7XG4gIGNvbnN0IHRJID0gdmFycyA/IE9iamVjdC5rZXlzKHZhcnMpLmxlbmd0aCA6IDA7XG4gIGlmICh0SSA+IDApIHtcbiAgICBsb2cuc3RhcnQoKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh2YXJzKSkge1xuICAgICAgY29uc3QgdmFsdWVzID0gdmFyc1trZXldO1xuXG4gICAgICBsZXQgZGVzY3JpcHRpb24gPSB2YWx1ZXM/LmRlc2NyaXB0aW9uID8/ICcnO1xuXG4gICAgICAvLyBDaGVjayBpZiBvbmx5IGZpcnN0IGxpbmUgc2hvdWxkIGJlIGFkZGVkIChvbmx5IHN1YmplY3Qgd2l0aG91dCBib2R5KVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gICAgICBjb25zdCBtYXRjaGVzID0gLyguKj8pXFxuXFxuKFtTc10qKS8uZXhlYyhkZXNjcmlwdGlvbik7XG4gICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgIGRlc2NyaXB0aW9uID0gbWF0Y2hlc1sxXSB8fCBkZXNjcmlwdGlvbjtcbiAgICAgIH1cblxuICAgICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbi50cmltKCkucmVwbGFjZSgnXFxuJywgJzxiciAvPicpO1xuICAgICAgY29uc3Qgcm93OiBzdHJpbmdbXSA9IFtyb3dIZWFkZXIoa2V5KSwgZGVzY3JpcHRpb25dO1xuXG4gICAgICBsb2cuZGVidWcoSlNPTi5zdHJpbmdpZnkocm93KSk7XG4gICAgICBtYXJrZG93bkFycmF5LnB1c2gocm93KTtcbiAgICB9XG4gICAgY29udGVudC5wdXNoKG1hcmtkb3duZXIobWFya2Rvd25BcnJheSkpO1xuICAgIGxvZy5pbmZvKGBBY3Rpb24gaGFzICR7dEl9IHRvdGFsICR7dG9rZW59YCk7XG4gICAgaW5wdXRzLnJlYWRtZUVkaXRvci51cGRhdGVTZWN0aW9uKHRva2VuLCBjb250ZW50KTtcbiAgICBsb2cuc3VjY2VzcygpO1xuICB9IGVsc2Uge1xuICAgIGxvZy5kZWJ1ZyhgQWN0aW9uIGhhcyBubyAke3Rva2VufWApO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgSW5wdXRzIGZyb20gJy4uL2lucHV0cyc7XG5pbXBvcnQgTG9nVGFzayBmcm9tICcuLi9sb2d0YXNrJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXBkYXRlVGl0bGUodG9rZW46IHN0cmluZywgaW5wdXRzOiBJbnB1dHMpOiB2b2lkIHtcbiAgY29uc3QgbG9nID0gbmV3IExvZ1Rhc2sodG9rZW4pO1xuICAvLyBCdWlsZCB0aGUgbmV3IFJFQURNRVxuICBjb25zdCBjb250ZW50OiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgbmFtZSA9ICcnO1xuICBpZiAoaW5wdXRzLmFjdGlvbi5uYW1lKSB7XG4gICAgbG9nLnN0YXJ0KCk7XG4gICAgbmFtZSA9IGlucHV0cy5hY3Rpb24ubmFtZTtcblxuICAgIGxvZy5pbmZvKGBXcml0aW5nICR7bmFtZS5sZW5ndGh9IGNoYXJhY3RlcnMgdG8gdGhlIHRpdGxlYCk7XG4gICAgY29uc3QgdGl0bGUgPSBgIyAke2lucHV0cy5jb25maWcuZ2V0KCd0aXRsZV9wcmVmaXgnKSBhcyBzdHJpbmd9JHtpbnB1dHMuYWN0aW9uLm5hbWV9YDtcbiAgICBsb2cuaW5mbyhgVGl0bGU6ICR7dGl0bGV9YCk7XG4gICAgLy8gQnVpbGQgdGhlIG5ldyB1c2FnZSBzZWN0aW9uXG4gICAgY29udGVudC5wdXNoKHRpdGxlKTtcblxuICAgIGlucHV0cy5yZWFkbWVFZGl0b3IudXBkYXRlU2VjdGlvbih0b2tlbiwgY29udGVudCk7XG4gICAgbG9nLnN1Y2Nlc3MoKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGdldEN1cnJlbnRWZXJzaW9uU3RyaW5nIH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgdHlwZSBJbnB1dHMgZnJvbSAnLi4vaW5wdXRzJztcbmltcG9ydCBMb2dUYXNrIGZyb20gJy4uL2xvZ3Rhc2snO1xuaW1wb3J0IHsgd3JhcERlc2NyaXB0aW9uIH0gZnJvbSAnLi4vcHJldHRpZXInO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1cGRhdGVVc2FnZSh0b2tlbjogc3RyaW5nLCBpbnB1dHM6IElucHV0cyk6IHZvaWQge1xuICBjb25zdCBsb2cgPSBuZXcgTG9nVGFzayh0b2tlbik7XG4gIGxvZy5zdGFydCgpO1xuICBjb25zdCBhY3Rpb25OYW1lID0gYCR7aW5wdXRzLmNvbmZpZy5nZXQoJ293bmVyJykgYXMgc3RyaW5nfS8ke2lucHV0cy5jb25maWcuZ2V0KCdyZXBvJyl9YDtcbiAgbG9nLmluZm8oYEFjdGlvbiBuYW1lOiAke2FjdGlvbk5hbWV9YCk7XG4gIGNvbnN0IHZlcnNpb25TdHJpbmc6IHN0cmluZyA9IGdldEN1cnJlbnRWZXJzaW9uU3RyaW5nKGlucHV0cyk7XG5cbiAgbG9nLmluZm8oYFZlcnNpb24gc3RyaW5nOiAke3ZlcnNpb25TdHJpbmd9YCk7XG5cbiAgY29uc3QgYWN0aW9uUmVmZXJlbmNlID0gYCR7YWN0aW9uTmFtZX1AJHt2ZXJzaW9uU3RyaW5nfWA7XG5cbiAgaWYgKCFhY3Rpb25SZWZlcmVuY2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciBhY3Rpb25SZWZlcmVuY2UgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgfVxuXG4gIC8vIEJ1aWxkIHRoZSBuZXcgUkVBRE1FXG4gIGNvbnN0IGNvbnRlbnQ6IHN0cmluZ1tdID0gW107XG4gIC8vIEJ1aWxkIHRoZSBuZXcgdXNhZ2Ugc2VjdGlvblxuICBjb250ZW50LnB1c2goJ2BgYHlhbWwnLCBgLSB1c2VzOiAke2FjdGlvblJlZmVyZW5jZX1gLCAnICB3aXRoOicpO1xuXG4gIGNvbnN0IGlucCA9IGlucHV0cy5hY3Rpb24uaW5wdXRzO1xuICBsZXQgZmlyc3RJbnB1dCA9IHRydWU7XG4gIGlmIChpbnApIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhpbnApKSB7XG4gICAgICBjb25zdCBpbnB1dCA9IGlucFtrZXldO1xuICAgICAgaWYgKGlucHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gTGluZSBicmVhayBiZXR3ZWVuIGlucHV0c1xuICAgICAgICBpZiAoIWZpcnN0SW5wdXQpIHtcbiAgICAgICAgICBjb250ZW50LnB1c2goJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29uc3RyYWluIHRoZSB3aWR0aCBvZiB0aGUgZGVzY3JpcHRpb24sIGFuZCBhcHBlbmQgaXRcbiAgICAgICAgd3JhcERlc2NyaXB0aW9uKGlucHV0LmRlc2NyaXB0aW9uLCBjb250ZW50LCAnICAgICMgJyk7XG5cbiAgICAgICAgaWYgKGlucHV0LmRlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIEFwcGVuZCBibGFuayBsaW5lIGlmIGRlc2NyaXB0aW9uIGhhZCBwYXJhZ3JhcGhzXG4gICAgICAgICAgaWYgKGlucHV0LmRlc2NyaXB0aW9uPy50cmltRW5kKCkubWF0Y2goL1xcbiAqXFxyP1xcbi8pKSB7XG4gICAgICAgICAgICBjb250ZW50LnB1c2goJyAgICAjJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRGVmYXVsdFxuICAgICAgICAgIGNvbnRlbnQucHVzaChgICAgICMgRGVmYXVsdDogJHtpbnB1dC5kZWZhdWx0fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW5wdXQgbmFtZVxuICAgICAgICBjb250ZW50LnB1c2goYCAgICAke2tleX06ICcnYCk7XG5cbiAgICAgICAgZmlyc3RJbnB1dCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnRlbnQucHVzaCgnYGBgXFxuJyk7XG5cbiAgaW5wdXRzLnJlYWRtZUVkaXRvci51cGRhdGVTZWN0aW9uKHRva2VuLCBjb250ZW50KTtcbiAgbG9nLnN1Y2Nlc3MoKTtcbn1cbiIsICJpbXBvcnQgdHlwZSBJbnB1dHMgZnJvbSAnLi4vaW5wdXRzJztcbmltcG9ydCBMb2dUYXNrIGZyb20gJy4uL2xvZ3Rhc2snO1xuaW1wb3J0IHVwZGF0ZUJhZGdlcyBmcm9tICcuL3VwZGF0ZS1iYWRnZXMnO1xuaW1wb3J0IHVwZGF0ZURlc2NyaXB0aW9uIGZyb20gJy4vdXBkYXRlLWRlc2NyaXB0aW9uJztcbmltcG9ydCB1cGRhdGVJbnB1dHMgZnJvbSAnLi91cGRhdGUtaW5wdXRzJztcbmltcG9ydCB1cGRhdGVPdXRwdXRzIGZyb20gJy4vdXBkYXRlLW91dHB1dHMnO1xuaW1wb3J0IHVwZGF0ZVRpdGxlIGZyb20gJy4vdXBkYXRlLXRpdGxlJztcbmltcG9ydCB1cGRhdGVVc2FnZSBmcm9tICcuL3VwZGF0ZS11c2FnZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVwZGF0ZVNlY3Rpb24oc2VjdGlvbjogc3RyaW5nLCBpbnB1dHM6IElucHV0cyk6IHZvaWQge1xuICBjb25zdCBsb2cgPSBuZXcgTG9nVGFzaygndXBkYXRlU2VjdGlvbicpO1xuICBzd2l0Y2ggKHNlY3Rpb24pIHtcbiAgICBjYXNlICdiYWRnZXMnOiB7XG4gICAgICB1cGRhdGVCYWRnZXMoc2VjdGlvbiwgaW5wdXRzKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlICd1c2FnZSc6IHtcbiAgICAgIHVwZGF0ZVVzYWdlKHNlY3Rpb24sIGlucHV0cyk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAndGl0bGUnOiB7XG4gICAgICB1cGRhdGVUaXRsZShzZWN0aW9uLCBpbnB1dHMpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJ2Rlc2NyaXB0aW9uJzoge1xuICAgICAgdXBkYXRlRGVzY3JpcHRpb24oc2VjdGlvbiwgaW5wdXRzKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlICdpbnB1dHMnOiB7XG4gICAgICB1cGRhdGVJbnB1dHMoc2VjdGlvbiwgaW5wdXRzKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlICdvdXRwdXRzJzoge1xuICAgICAgdXBkYXRlT3V0cHV0cyhzZWN0aW9uLCBpbnB1dHMpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGxvZy5kZWJ1ZyhgdW5rbm93biBzZWN0aW9uICR7c2VjdGlvbn1gKTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgSW5wdXRzIGZyb20gJy4vaW5wdXRzJztcbmltcG9ydCBMb2dUYXNrIGZyb20gJy4vbG9ndGFzayc7XG5pbXBvcnQgc2F2ZSBmcm9tICcuL3NhdmUnO1xuaW1wb3J0IHVwZGF0ZVNlY3Rpb24gZnJvbSAnLi9zZWN0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCBpbnB1dHMgPSBuZXcgSW5wdXRzKCk7XG4vLyBUaGlzIHNjcmlwdCByZWJ1aWxkcyB0aGUgdXNhZ2Ugc2VjdGlvbiBpbiB0aGUgUkVBRE1FLm1kIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgYWN0aW9uLnltbFxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2VuZXJhdGVEb2NzKCk6IHZvaWQge1xuICBjb25zdCBsb2cgPSBuZXcgTG9nVGFzaygnZ2VuZXJhdGluZyByZWFkbWUnKTtcblxuICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgaW5wdXRzLnNlY3Rpb25zKSB7XG4gICAgdHJ5IHtcbiAgICAgIHVwZGF0ZVNlY3Rpb24oc2VjdGlvbiwgaW5wdXRzKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZiAoZXJyb3IgJiYgJ21lc3NhZ2UnIGluIGVycm9yICYmIGVycm9yLm1lc3NhZ2UpXG4gICAgICAgIGxvZy5lcnJvcihgRXJyb3Igb2NjdXJlZCBpbiBzZWN0aW9uICR7c2VjdGlvbn0uICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbiAgaW5wdXRzLnJlYWRtZUVkaXRvci5kdW1wVG9GaWxlKCk7XG5cbiAgc2F2ZShpbnB1dHMpO1xufVxuIiwgIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IGdlbmVyYXRlRG9jcyBmcm9tICcuL2dl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ZSIsICJjaGFsa0NsYXNzIiwgImVtb2ppIiwgIk5PX0dST1VQIiwgIlNUQVJUX0dST1VQIiwgIkVORF9HUk9VUCIsICJJU19FUlJPUiIsICJJU19GQUlMRUQiLCAiSVNfVElUTEUiLCAiY2hhbGsiLCAiTG9nVGFzayIsICJfTG9nVGFzayIsICJuYW1lIiwgInZhbHVlIiwgImVtb2ppU3RyIiwgInN0ZXAiLCAiZGVzY3JpcHRpb24iLCAic3RhcnRHcm91cCIsICJkZXNjIiwgIm1zZyIsICJpc0Vycm9yaW5nIiwgImluZ3JvdXAiLCAibXNndHlwZSIsICJsb2d0YXNrX2RlZmF1bHQiLCAiQWN0aW9uIiwgImFjdGlvblBhdGgiLCAibG9nIiwgImxvZ3Rhc2tfZGVmYXVsdCIsICJ0bXBBY3Rpb25ZYW1sIiwgImFjdGlvbllhbWwiLCAiZnMiLCAidW5pY29kZVdvcmRNYXRjaCIsICJ0aXRsZWNhc2UiLCAidGV4dCIsICJ1bmljb2RlV29yZE1hdGNoIiwgInR4dCIsICJyZXBvc2l0b3J5RmluZGVyIiwgImlucHV0UmVwbyIsICJjb250ZXh0IiwgImxvZyIsICJsb2d0YXNrX2RlZmF1bHQiLCAicmVzdWx0IiwgImZpbGVDb250ZW50IiwgInBhdHRlcm4iLCAicmVzdWx0cyIsICJlcnJvciIsICJjb2x1bW5IZWFkZXIiLCAidmFsdWUiLCAibm9ybWFsaXNlZEhlYWRlciIsICJ0aXRsZWNhc2UiLCAicm93SGVhZGVyIiwgImdldEN1cnJlbnRWZXJzaW9uU3RyaW5nIiwgImlucHV0cyIsICJ2ZXJzaW9uU3RyaW5nIiwgImxvZyIsICJsb2d0YXNrX2RlZmF1bHQiLCAib1JpZGUiLCAicGFja2FnZVZlcnNpb24iLCAiZXJyb3IiLCAiZnMiLCAiaW1wb3J0X25vZGVfb3MiLCAiaW1wb3J0X3ByZXR0aWVyIiwgImZvcm1hdE1hcmtkb3duIiwgInZhbHVlIiwgImZpbGVwYXRoIiwgIndyYXBEZXNjcmlwdGlvbiIsICJjb250ZW50IiwgInByZWZpeCIsICJ2YWx1ZVdpdGhvdXRQcmVmaXgiLCAiZm9ybWF0dGVkU3RyaW5nIiwgInN0YXJ0VG9rZW5Gb3JtYXQiLCAiZW5kVG9rZW5Gb3JtYXQiLCAiUmVhZG1lRWRpdG9yIiwgImZpbGVQYXRoIiwgIm5hbWUiLCAicHJvdmlkZWRDb250ZW50IiwgImxvZyIsICJsb2d0YXNrX2RlZmF1bHQiLCAiY29udGVudCIsICJzdGFydFRva2VuIiwgInN0b3BUb2tlbiIsICJzdGFydEluZGV4IiwgInN0b3BJbmRleCIsICJiZWZvcmVDb250ZW50IiwgImFmdGVyQ29udGVudCIsICJmb3JtYXRNYXJrZG93biIsICJ3b3JraW5nRGlyZWN0b3J5IiwgImxvZyIsICJsb2d0YXNrX2RlZmF1bHQiLCAid29ya2luZ0RpcmVjdG9yeSIsICJnaXRodWJFdmVudFBhdGgiLCAiZ2l0aHViRXZlbnQiLCAiY29uZmlnRmlsZU5hbWUiLCAicGF0aHNBY3Rpb24iLCAicGF0aHNSZWFkbWUiLCAiY29uZmlnS2V5cyIsICJJbnB1dHMiLCAicmVwb3NpdG9yeURldGFpbCIsICJyZXBvc2l0b3J5RmluZGVyIiwgIm9iaiIsICJuZXdPYmoiLCAia2V5UGFyc2VkIiwgImFjdGlvblBhdGgiLCAiQWN0aW9uIiwgIlJlYWRtZUVkaXRvciIsICJvdXRwdXQiLCAiayIsICJpbXBvcnRfbm9kZV9mcyIsICJpbXBvcnRfbm9kZV9wYXRoIiwgIkdIQWN0aW9uRG9jc0NvbmZpZyIsICJpbnB1dHMiLCAiY29uZmlnUGF0aCIsICJsb2ciLCAibG9ndGFza19kZWZhdWx0IiwgImRpcmVjdG9yeSIsICJwYXRoIiwgImZzIiwgImVyciIsICJzYXZlIiwgImlucHV0cyIsICJkb2NzQ29uZmlnIiwgIkdIQWN0aW9uRG9jc0NvbmZpZyIsICJ1cGRhdGVCYWRnZXMiLCAidG9rZW4iLCAiaW5wdXRzIiwgImxvZyIsICJsb2d0YXNrX2RlZmF1bHQiLCAiZW5hYmxlVmVyc2lvbmluZyIsICJiYWRnZXMiLCAicmVwb3MiLCAiZ2l0aHViQmFkZ2VzIiwgInJlcG9VcmwiLCAiZ2VuZXJhdGVCYWRnZSIsICJpdGVtIiwgImJhZGdlVGVtcGxhdGUiLCAiZ2VuZXJhdGVCYWRnZXMiLCAiYmFkZ2VBcnJheSIsICJiIiwgImNvbnRlbnQiLCAidXBkYXRlRGVzY3JpcHRpb24iLCAidG9rZW4iLCAiaW5wdXRzIiwgImxvZyIsICJsb2d0YXNrX2RlZmF1bHQiLCAiY29udGVudCIsICJkZXNjIiwgIm1hcmtkb3duRXNjYXBlVGFibGVDZWxsIiwgInRleHQiLCAibWFya2Rvd25Fc2NhcGVJbmxpbmVDb2RlIiwgImNvbnRlbnQiLCAiQXJyYXlPZkFycmF5c1RvTWFya2Rvd25UYWJsZSIsICJwcm92aWRlZFRhYmxlQ29udGVudCIsICJ0YWJsZUNvbnRlbnQiLCAib3V0cHV0U3RyaW5ncyIsICJyb3dBIiwgIm1heFJvd3MiLCAibWF4Q29scyIsICJtaW5Db2xzIiwgInRibElkeCIsICJlIiwgIm51bUNvbHMiLCAiY250SWR4IiwgIm1hcmtkb3duQXJyYXlSb3dzTGVuZ3RoIiwgIm1hcmtkb3duQXJyYXlFbnRyaWVzTGVuZ3RoIiwgIm1hcmtkb3duQXJyYXlzIiwgImkiLCAicm93IiwgImNvbCIsICJpZHgiLCAiZGF0YVJvdyIsICJqIiwgIm1hcmtkb3duZXJfZGVmYXVsdCIsICJ1cGRhdGVJbnB1dHMiLCAidG9rZW4iLCAiaW5wdXRzIiwgImxvZyIsICJsb2d0YXNrX2RlZmF1bHQiLCAiY29udGVudCIsICJtYXJrZG93bkFycmF5IiwgInRpdGxlQXJyYXkiLCAidGl0bGVzIiwgInQiLCAiY29sdW1uSGVhZGVyIiwgInZhcnMiLCAidEkiLCAia2V5IiwgInZhbHVlcyIsICJkZXNjcmlwdGlvbiIsICJtYXRjaGVzIiwgInJvdyIsICJyb3dIZWFkZXIiLCAibWFya2Rvd25lcl9kZWZhdWx0IiwgInVwZGF0ZU91dHB1dHMiLCAidG9rZW4iLCAiaW5wdXRzIiwgImxvZyIsICJsb2d0YXNrX2RlZmF1bHQiLCAiY29udGVudCIsICJtYXJrZG93bkFycmF5IiwgInRpdGxlQXJyYXkiLCAidGl0bGVzIiwgInQiLCAiY29sdW1uSGVhZGVyIiwgInZhcnMiLCAidEkiLCAia2V5IiwgImRlc2NyaXB0aW9uIiwgIm1hdGNoZXMiLCAicm93IiwgInJvd0hlYWRlciIsICJtYXJrZG93bmVyX2RlZmF1bHQiLCAidXBkYXRlVGl0bGUiLCAidG9rZW4iLCAiaW5wdXRzIiwgImxvZyIsICJsb2d0YXNrX2RlZmF1bHQiLCAiY29udGVudCIsICJuYW1lIiwgInRpdGxlIiwgInVwZGF0ZVVzYWdlIiwgInRva2VuIiwgImlucHV0cyIsICJsb2ciLCAibG9ndGFza19kZWZhdWx0IiwgImFjdGlvbk5hbWUiLCAidmVyc2lvblN0cmluZyIsICJnZXRDdXJyZW50VmVyc2lvblN0cmluZyIsICJhY3Rpb25SZWZlcmVuY2UiLCAiY29udGVudCIsICJpbnAiLCAiZmlyc3RJbnB1dCIsICJrZXkiLCAiaW5wdXQiLCAid3JhcERlc2NyaXB0aW9uIiwgInVwZGF0ZVNlY3Rpb24iLCAic2VjdGlvbiIsICJpbnB1dHMiLCAibG9nIiwgImxvZ3Rhc2tfZGVmYXVsdCIsICJ1cGRhdGVCYWRnZXMiLCAidXBkYXRlVXNhZ2UiLCAidXBkYXRlVGl0bGUiLCAidXBkYXRlRGVzY3JpcHRpb24iLCAidXBkYXRlSW5wdXRzIiwgInVwZGF0ZU91dHB1dHMiLCAiaW5wdXRzIiwgIklucHV0cyIsICJnZW5lcmF0ZURvY3MiLCAibG9nIiwgImxvZ3Rhc2tfZGVmYXVsdCIsICJzZWN0aW9uIiwgInVwZGF0ZVNlY3Rpb24iLCAiZXJyb3IiLCAic2F2ZSIsICJnZW5lcmF0ZURvY3MiXQp9Cg== +`,"
");let C=[x(g),D,s?.default?`\`${s.default}\``:"",s?.required?"**true**":"__false__"];r.debug(JSON.stringify(C)),e.push(C)}n.push(R(e)),r.info(`Action has ${l} total ${t}`),u.readmeEditor.updateSection(t,n),r.success()}else r.debug(`Action has no ${t}`)}function J(t,u){let r=new a(t),n=[],e=[],i=["Output","Description"],o=[];for(let g of i)o.push($(g));e.push(o);let c=u.action.outputs,l=c?Object.keys(c).length:0;if(l>0){r.start();for(let g of Object.keys(c)){let D=c[g]?.description??"",p=/(.*?)\n\n([Ss]*)/.exec(D);p&&p.length>=2&&(D=p[1]||D),D=D.trim().replace(` +`,"
");let C=[x(g),D];r.debug(JSON.stringify(C)),e.push(C)}n.push(R(e)),r.info(`Action has ${l} total ${t}`),u.readmeEditor.updateSection(t,n),r.success()}else r.debug(`Action has no ${t}`)}function q(t,u){let r=new a(t),n=[],e="";if(u.action.name){r.start(),e=u.action.name,r.info(`Writing ${e.length} characters to the title`);let i=`# ${u.config.get("title_prefix")}${u.action.name}`;r.info(`Title: ${i}`),n.push(i),u.readmeEditor.updateSection(t,n),r.success()}}function Y(t,u){let r=new a(t);r.start();let n=`${u.config.get("owner")}/${u.config.get("repo")}`;r.info(`Action name: ${n}`);let e=tu(u);r.info(`Version string: ${e}`);let i=`${n}@${e}`;if(!i)throw new Error("Parameter actionReference must not be empty");let o=[];o.push("```yaml",`- uses: ${i}`," with:");let c=u.action.inputs,l=!0;if(c)for(let g of Object.keys(c)){let s=c[g];s!==void 0&&(l||o.push(""),nu(s.description,o," # "),s.default!==void 0&&(s.description?.trimEnd().match(/\n *\r?\n/)&&o.push(" #"),o.push(` # Default: ${s.default}`)),o.push(` ${g}: ''`),l=!1)}o.push("```\n"),u.readmeEditor.updateSection(t,o),r.success()}function K(t,u){let r=new a("updateSection");switch(t){case"badges":{V(t,u);break}case"usage":{Y(t,u);break}case"title":{q(t,u);break}case"description":{W(t,u);break}case"inputs":{M(t,u);break}case"outputs":{J(t,u);break}default:r.debug(`unknown section ${t}`)}}var O=new y;function z(){let t=new a("generating readme");for(let u of O.sections)try{K(u,O)}catch(r){r&&"message"in r&&r.message&&t.error(`Error occured in section ${u}. ${r.message}`)}O.readmeEditor.dumpToFile(),L(O)}z(); +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2lucHV0cy50cyIsICIuLi9zcmMvQWN0aW9uLnRzIiwgIi4uL3NyYy9sb2d0YXNrL2luZGV4LnRzIiwgIi4uL3NyYy9oZWxwZXJzLnRzIiwgIi4uL3NyYy9yZWFkbWUtZWRpdG9yLnRzIiwgIi4uL3NyYy9wcmV0dGllci50cyIsICIuLi9zcmMvd29ya2luZy1kaXJlY3RvcnkudHMiLCAiLi4vc3JjL2NvbmZpZy50cyIsICIuLi9zcmMvc2F2ZS50cyIsICIuLi9zcmMvc2VjdGlvbnMvdXBkYXRlLWJhZGdlcy50cyIsICIuLi9zcmMvc2VjdGlvbnMvdXBkYXRlLWRlc2NyaXB0aW9uLnRzIiwgIi4uL3NyYy9tYXJrZG93bmVyL2luZGV4LnRzIiwgIi4uL3NyYy9zZWN0aW9ucy91cGRhdGUtaW5wdXRzLnRzIiwgIi4uL3NyYy9zZWN0aW9ucy91cGRhdGUtb3V0cHV0cy50cyIsICIuLi9zcmMvc2VjdGlvbnMvdXBkYXRlLXRpdGxlLnRzIiwgIi4uL3NyYy9zZWN0aW9ucy91cGRhdGUtdXNhZ2UudHMiLCAiLi4vc3JjL3NlY3Rpb25zL2luZGV4LnRzIiwgIi4uL3NyYy9nZW5lcmF0ZS1kb2NzLnRzIiwgIi4uL3NyYy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1lbWJlci1hY2Nlc3NpYmlsaXR5ICovXG5cbmltcG9ydCAqIGFzIGZzIGZyb20gJ25vZGU6ZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgdHlwZSB7IENvbnRleHQgfSBmcm9tICdAYWN0aW9ucy9naXRodWIvbGliL2NvbnRleHQnO1xuaW1wb3J0ICogYXMgeWFtbCBmcm9tICdqcy15YW1sJztcbmltcG9ydCAqIGFzIG5jb25mIGZyb20gJ25jb25mJztcblxuaW1wb3J0IEFjdGlvbiBmcm9tICcuL0FjdGlvbic7XG5pbXBvcnQgeyByZXBvc2l0b3J5RmluZGVyIH0gZnJvbSAnLi9oZWxwZXJzJztcbmltcG9ydCBMb2dUYXNrIGZyb20gJy4vbG9ndGFzayc7XG5pbXBvcnQgUmVhZG1lRWRpdG9yIGZyb20gJy4vcmVhZG1lLWVkaXRvcic7XG5pbXBvcnQgeyB3b3JraW5nRGlyZWN0b3J5IH0gZnJvbSAnLi93b3JraW5nLWRpcmVjdG9yeSc7XG5cbmNvbnN0IGxvZyA9IG5ldyBMb2dUYXNrKCdpbnB1dHMnKTtcbnByb2Nlc3MuY2hkaXIod29ya2luZ0RpcmVjdG9yeSgpKTtcbmNvbnN0IGdpdGh1YkV2ZW50UGF0aCA9IHByb2Nlc3MuZW52LkdJVEhVQl9FVkVOVF9QQVRIID8/ICcnO1xubGV0IGdpdGh1YkV2ZW50OiBDb250ZXh0IHwgbnVsbCA9IG51bGw7XG50cnkge1xuICBnaXRodWJFdmVudCA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGdpdGh1YkV2ZW50UGF0aCwgJ3V0ZjgnKSkgYXMgQ29udGV4dDtcbn0gY2F0Y2gge1xuICAvLyBGaWxlIG5vdCB0aGVyZVxuICBsb2cuZGVidWcoYEdJVEhVQl9FVkVOVF9QQVRIIG5vdCBmb3VuZDogJHtnaXRodWJFdmVudFBhdGh9YCk7XG59XG5leHBvcnQgY29uc3QgY29uZmlnRmlsZU5hbWUgPSAnLmdoYWRvY3MuanNvbic7XG5jb25zdCBwYXRoc0FjdGlvbiA9ICdwYXRoczphY3Rpb24nO1xuY29uc3QgcGF0aHNSZWFkbWUgPSAncGF0aHM6cmVhZG1lJztcbmV4cG9ydCBjb25zdCBjb25maWdLZXlzOiBzdHJpbmdbXSA9IFtcbiAgJ3NhdmUnLFxuICBwYXRoc0FjdGlvbixcbiAgcGF0aHNSZWFkbWUsXG4gICdzaG93X2xvZ28nLFxuICAndmVyc2lvbmluZzplbmFibGVkJyxcbiAgJ3ZlcnNpb25pbmc6b3ZlcnJpZGUnLFxuICAndmVyc2lvbmluZzpwcmVmaXgnLFxuICAndmVyc2lvbmluZzpicmFuY2gnLFxuICAnb3duZXInLFxuICAncmVwbycsXG4gICd0aXRsZV9wcmVmaXgnLFxuICAncHJldHR5JyxcbiAgJ2luY2x1ZGVfZ2l0aHViX3ZlcnNpb25fYmFkZ2UnLFxuXTtcbmludGVyZmFjZSBLVlBhaXJUeXBlIHtcbiAga2V5OiBzdHJpbmc7XG4gIHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbnB1dHMge1xuICBwdWJsaWMgY29uZmlnOiBuY29uZi5Qcm92aWRlcjtcblxuICBwdWJsaWMgc2VjdGlvbnM6IHN0cmluZ1tdO1xuXG4gIHB1YmxpYyByZWFkbWVQYXRoOiBzdHJpbmc7XG5cbiAgcHVibGljIGNvbmZpZ1BhdGg6IHN0cmluZztcblxuICBwdWJsaWMgYWN0aW9uOiBBY3Rpb247XG5cbiAgcHVibGljIHJlYWRtZUVkaXRvcjogUmVhZG1lRWRpdG9yO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29uZmlnUGF0aCA9IHBhdGgucmVzb2x2ZShjb25maWdGaWxlTmFtZSk7XG4gICAgdGhpcy5jb25maWcgPSBuZXcgbmNvbmYuUHJvdmlkZXIoKTtcbiAgICBjb25zdCByZXBvc2l0b3J5RGV0YWlsID0gcmVwb3NpdG9yeUZpbmRlcihudWxsLCBnaXRodWJFdmVudCk7XG4gICAgaWYgKHByb2Nlc3MuZW52LkdJVEhVQl9BQ1RJT04pIHtcbiAgICAgIGxvZy5pbmZvKCdydW5uaW5nIGluIEdpdEh1YiBhY3Rpb24nKTtcbiAgICB9XG4gICAgaWYgKGZzLmV4aXN0c1N5bmModGhpcy5jb25maWdQYXRoKSkge1xuICAgICAgbG9nLmluZm8oYGNvbmZpZyBmaWxlIGZvdW5kOiAke3RoaXMuY29uZmlnUGF0aH1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nLmVycm9yKGBjb25maWcgZmlsZSBub3QgZm91bmQ6ICR7dGhpcy5jb25maWdQYXRofWApO1xuICAgIH1cbiAgICB0aGlzLmNvbmZpZ1xuICAgICAgLmVudih7XG4gICAgICAgIGxvd2VyQ2FzZTogdHJ1ZSxcbiAgICAgICAgcGFyc2VWYWx1ZXM6IHRydWUsXG4gICAgICAgIG1hdGNoOiAvXklOUFVUXy8sXG4gICAgICAgIHRyYW5zZm9ybTogKG9iajogS1ZQYWlyVHlwZSk6IHVuZGVmaW5lZCB8IEtWUGFpclR5cGUgPT4ge1xuICAgICAgICAgIGlmIChvYmoua2V5LnN0YXJ0c1dpdGgoJ2lucHV0XycpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdPYmo6IEtWUGFpclR5cGUgPSB7XG4gICAgICAgICAgICAgIGtleTogb2JqLmtleSxcbiAgICAgICAgICAgICAgdmFsdWU6IG9iai52YWx1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBjb25zdCBrZXlQYXJzZWQgPSBvYmoua2V5LnJlcGxhY2UoL14oSU5QVVR8aW5wdXQpXy8sICcnKTtcbiAgICAgICAgICAgIHN3aXRjaCAoa2V5UGFyc2VkKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ3JlYWRtZSc6IHtcbiAgICAgICAgICAgICAgICBuZXdPYmoua2V5ID0gcGF0aHNSZWFkbWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSAnYWN0aW9uJzoge1xuICAgICAgICAgICAgICAgIG5ld09iai5rZXkgPSBwYXRoc0FjdGlvbjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBjYXNlICd2ZXJzaW9uaW5nX2VuYWJsZWQnOiB7XG4gICAgICAgICAgICAgICAgbmV3T2JqLmtleSA9ICd2ZXJzaW9uaW5nOmVuYWJsZWQnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgJ3ZlcnNpb25fcHJlZml4Jzoge1xuICAgICAgICAgICAgICAgIG5ld09iai5rZXkgPSAndmVyc2lvbmluZzpwcmVmaXgnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgJ3ZlcnNpb25pbmdfZGVmYXVsdF9icmFuY2gnOiB7XG4gICAgICAgICAgICAgICAgbmV3T2JqLmtleSA9ICd2ZXJzaW9uaW5nOmJyYW5jaCc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgY2FzZSAndmVyc2lvbl9vdmVycmlkZSc6IHtcbiAgICAgICAgICAgICAgICBuZXdPYmoua2V5ID0gJ3ZlcnNpb25pbmc6b3ZlcnJpZGUnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhc2UgJ2luY2x1ZGVfZ2l0aHViX3ZlcnNpb25fYmFkZ2UnOiB7XG4gICAgICAgICAgICAgICAgbmV3T2JqLmtleSA9ICd2ZXJzaW9uaW5nOmJhZGdlJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgbmV3T2JqLmtleSA9IGtleVBhcnNlZDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG5ld09iai52YWx1ZSkge1xuICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5zZXQobmV3T2JqLmtleSwgbmV3T2JqLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBuZXdPYmo7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICAgLmFyZ3Yoe1xuICAgICAgICAnc2F2ZSc6IHtcbiAgICAgICAgICBhbGlhczogJ3NhdmUnLFxuICAgICAgICAgIGRlc2NyaWJlOiBgU2F2ZSB0aGlzIGNvbmZpZyB0byAke2NvbmZpZ0ZpbGVOYW1lfWAsXG4gICAgICAgICAgcGFyc2VWYWx1ZXM6IHRydWUsXG4gICAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICB9LFxuICAgICAgICAncGF0aHM6YWN0aW9uJzoge1xuICAgICAgICAgIGFsaWFzOiBbJ3BhdGhzQWN0aW9uJywgJ2FjdGlvbiddLFxuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIGRlc2NyaWJlOiAnUGF0aCB0byB0aGUgYWN0aW9uLnltbCcsXG4gICAgICAgIH0sXG4gICAgICAgICdwYXRoczpyZWFkbWUnOiB7XG4gICAgICAgICAgYWxpYXM6IFsncGF0aHNSZWFkbWUnLCAncmVhZG1lJ10sXG4gICAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgICAgZGVzY3JpYmU6ICdQYXRoIHRvIHRoZSBSRUFETUUgZmlsZScsXG4gICAgICAgIH0sXG4gICAgICAgICdzaG93X2xvZ28nOiB7XG4gICAgICAgICAgYWxpYXM6ICdsb2dvJyxcbiAgICAgICAgICBkZXNjcmliZTogXCJEaXNwbGF5IHRoZSBhY3Rpb24ncyBsb2dvIGluIHRoZSBSRUFETUVcIixcbiAgICAgICAgfSxcbiAgICAgICAgJ293bmVyJzoge1xuICAgICAgICAgIGFsaWFzOiAnb3duZXInLFxuICAgICAgICAgIGRlc2NyaWJlOiAnVGhlIEdpdEh1YiBBY3Rpb24gcmVwb3NpdG9yeSBvd25lci4gaS5lOiBgYml0ZmxpZ2h0LWRldm9wc2AnLFxuICAgICAgICB9LFxuICAgICAgICAncmVwbyc6IHtcbiAgICAgICAgICBhbGlhczogJ3JlcG8nLFxuICAgICAgICAgIGRlc2NyaWJlOiAnVGhlIEdpdEh1YiBBY3Rpb24gcmVwb3NpdG9yeSBuYW1lLiBpLmU6IGBnaXRodWItYWN0aW9uLXJlYWRtZS1nZW5lcmF0b3JgJyxcbiAgICAgICAgfSxcbiAgICAgICAgJ3ByZXR0aWVyJzoge1xuICAgICAgICAgIGFsaWFzOiAncHJldHR5JyxcbiAgICAgICAgICBkZXNjcmliZTogJ0Zvcm1hdCB0aGUgbWFya2Rvd24gdXNpbmcgcHJldHRpZXIgZm9ybWF0dGVyJyxcbiAgICAgICAgICBwYXJzZVZhbHVlczogdHJ1ZSxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIH0sXG4gICAgICAgICd2ZXJzaW9uaW5nOmVuYWJsZWQnOiB7XG4gICAgICAgICAgYWxpYXM6IFsndmVyc2lvbmluZycsICd2ZXJzaW9uaW5nX2VuYWJsZWQnXSxcbiAgICAgICAgICBkZXNjcmliZTpcbiAgICAgICAgICAgICdFbmFibGUgdGhlIHVwZGF0ZSBvZiB0aGUgdXNhZ2UgdmVyc2lvbiB0byBtYXRjaCB0aGUgbGF0ZXN0IHZlcnNpb24gaW4gdGhlIHBhY2thZ2UuanNvbiBmaWxlJyxcbiAgICAgICAgICBwYXJzZVZhbHVlczogdHJ1ZSxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIH0sXG4gICAgICAgICd2ZXJzaW9uaW5nOm92ZXJyaWRlJzoge1xuICAgICAgICAgIGFsaWFzOiBbJ3NldHZlcnNpb24nLCAndmVyc2lvbmluZ19vdmVycmlkZScsICd2ZXJzaW9uX292ZXJyaWRlJ10sXG4gICAgICAgICAgZGVzY3JpYmU6ICdTZXQgYSBzcGVjaWZpYyB2ZXJzaW9uIHRvIGRpc3BsYXkgaW4gdGhlIFJFQURNRS5tZCcsXG4gICAgICAgICAgcGFyc2VWYWx1ZXM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgICd2ZXJzaW9uaW5nOnByZWZpeCc6IHtcbiAgICAgICAgICBhbGlhczogWyd2cCcsICd2ZXJzaW9uX3ByZWZpeCddLFxuICAgICAgICAgIGRlc2NyaWJlOiBcIlByZWZpeCB0aGUgdmVyc2lvbiB3aXRoIHRoaXMgdmFsdWUgKGlmIGl0IGlzbid0IGFscmVhZHkgcHJlZml4ZWQpXCIsXG4gICAgICAgICAgcGFyc2VWYWx1ZXM6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICAgICd2ZXJzaW9uaW5nOmJyYW5jaCc6IHtcbiAgICAgICAgICBhbGlhczogWydicmFuY2gnLCAndmVyc2lvbmluZ19kZWZhdWx0X2JyYW5jaCddLFxuICAgICAgICAgIGRlc2NyaWJlOiAnSWYgdmVyc2lvbmluZyBpcyBkaXNhYmxlZCBzaG93IHRoaXMgYnJhbmNoIGluc3RlYWQnLFxuICAgICAgICAgIHBhcnNlVmFsdWVzOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICAndmVyc2lvbmluZzpiYWRnZSc6IHtcbiAgICAgICAgICBhbGlhczogWyd2ZXJzaW9uLWJhZGdlJywgJ3ZlcnNpb25pbmdfYmFkZ2UnXSxcbiAgICAgICAgICBkZXNjcmliZTogJ0Rpc3BsYXkgdGhlIGN1cnJlbnQgdmVyc2lvbiBhcyBhIGJhZGdlJyxcbiAgICAgICAgICBwYXJzZVZhbHVlczogdHJ1ZSxcbiAgICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIH0sXG4gICAgICAgICd0aXRsZV9wcmVmaXgnOiB7XG4gICAgICAgICAgYWxpYXM6IFsncHJlZml4JywgJ3RpdGxlX3ByZWZpeCddLFxuICAgICAgICAgIGRlc2NyaWJlOiAnQWRkIGEgcHJlZml4IHRvIHRoZSBSRUFETUUgdGl0bGUnLFxuICAgICAgICAgIHBhcnNlVmFsdWVzOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICAgIC5maWxlKHRoaXMuY29uZmlnUGF0aClcbiAgICAgIC5kZWZhdWx0cyh7XG4gICAgICAgIHNhdmU6IHRydWUsXG4gICAgICAgIG93bmVyOiByZXBvc2l0b3J5RGV0YWlsPy5vd25lcixcbiAgICAgICAgcmVwbzogcmVwb3NpdG9yeURldGFpbD8ucmVwbyxcbiAgICAgICAgcGF0aHM6IHtcbiAgICAgICAgICBhY3Rpb246ICdhY3Rpb24ueW1sJyxcbiAgICAgICAgICByZWFkbWU6ICdSRUFETUUubWQnLFxuICAgICAgICB9LFxuICAgICAgICBzaG93X2xvZ286IHRydWUsXG4gICAgICAgIHByZXR0eTogdHJ1ZSxcbiAgICAgICAgdmVyc2lvbmluZzoge1xuICAgICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgICAgb3ZlcnJpZGU6ICcnLFxuICAgICAgICAgIHByZWZpeDogJ3YnLFxuICAgICAgICAgIGJyYW5jaDogJ21haW4nLFxuICAgICAgICAgIGJhZGdlczogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgdGl0bGVfcHJlZml4OiAnR2l0SHViIEFjdGlvbjogJyxcbiAgICAgICAgc2VjdGlvbnM6IFsndGl0bGUnLCAnZGVzY3JpcHRpb24nLCAndXNhZ2UnLCAnaW5wdXRzJywgJ291dHB1dHMnLCAnY29udGVudHMnLCAnYmFkZ2VzJ10sXG4gICAgICB9KVxuICAgICAgLnJlcXVpcmVkKFsnb3duZXInLCAncmVwbyddKTtcblxuICAgIHRoaXMuc2VjdGlvbnMgPSB0aGlzLmNvbmZpZy5nZXQoJ3NlY3Rpb25zJykgYXMgc3RyaW5nW107XG4gICAgdGhpcy5yZWFkbWVQYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMuY29uZmlnLmdldChwYXRoc1JlYWRtZSkgYXMgc3RyaW5nKTtcbiAgICBjb25zdCBhY3Rpb25QYXRoID0gcGF0aC5yZXNvbHZlKHRoaXMuY29uZmlnLmdldChwYXRoc0FjdGlvbikgYXMgc3RyaW5nKTtcbiAgICB0aGlzLmFjdGlvbiA9IG5ldyBBY3Rpb24oYWN0aW9uUGF0aCk7XG4gICAgdGhpcy5yZWFkbWVFZGl0b3IgPSBuZXcgUmVhZG1lRWRpdG9yKHRoaXMucmVhZG1lUGF0aCk7XG4gICAgaWYgKExvZ1Rhc2suaXNEZWJ1ZygpKSB7XG4gICAgICBsb2cuZGVidWcoJ3Jlc29sdmVkIGlucHV0czonKTtcbiAgICAgIGxvZy5kZWJ1Zyh0aGlzLnN0cmluZ2lmeSgpKTtcbiAgICAgIGxvZy5kZWJ1ZygncmVzb2x2ZWQgYWN0aW9uOicpO1xuICAgICAgbG9nLmRlYnVnKHRoaXMuYWN0aW9uLnN0cmluZ2lmeSgpKTtcbiAgICB9XG4gIH1cblxuICBzdHJpbmdpZnkoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcykge1xuICAgICAgY29uc3Qgb3V0cHV0OiBzdHJpbmdbXSA9IFtdO1xuICAgICAgZm9yIChjb25zdCBrIG9mIGNvbmZpZ0tleXMpIHtcbiAgICAgICAgb3V0cHV0LnB1c2goYCR7a306ICR7dGhpcy5jb25maWcuZ2V0KGspfWApO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHlhbWwuZHVtcChvdXRwdXQsIHtcbiAgICAgICAgc2tpcEludmFsaWQ6IHRydWUsXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG4iLCAiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1lbWJlci1hY2Nlc3NpYmlsaXR5ICovXG5pbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJztcblxuaW1wb3J0ICogYXMgeWFtbCBmcm9tICdqcy15YW1sJztcblxuaW1wb3J0IExvZ1Rhc2sgZnJvbSAnLi9sb2d0YXNrJztcblxuZXhwb3J0IGludGVyZmFjZSBJbnB1dFR5cGUge1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcmVxdWlyZWQ/OiBib29sZWFuO1xuICBkZWZhdWx0Pzogc3RyaW5nO1xufVxuZXhwb3J0IGludGVyZmFjZSBPdXRwdXRUeXBlIHtcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIFJ1bnMge1xuICB1c2luZzogc3RyaW5nO1xuICBtYWluOiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIEJyYW5kaW5nIHtcbiAgY29sb3I6IHN0cmluZztcbiAgaWNvbjogc3RyaW5nO1xufVxuZXhwb3J0IHR5cGUgSW5wdXRzVHlwZSA9IHsgW2lkOiBzdHJpbmddOiBJbnB1dFR5cGUgfTtcbmV4cG9ydCB0eXBlIE91dHB1dHNUeXBlID0geyBbaWQ6IHN0cmluZ106IE91dHB1dFR5cGUgfTtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQWN0aW9uIHtcbiAgLy8gTG9hZCB0aGUgYWN0aW9uLnltbFxuXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG5cbiAgcHVibGljIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG5cbiAgcHVibGljIGJyYW5kaW5nOiBCcmFuZGluZztcblxuICBwdWJsaWMgaW5wdXRzOiBJbnB1dHNUeXBlO1xuXG4gIHB1YmxpYyBvdXRwdXRzOiBPdXRwdXRzVHlwZTtcblxuICBwdWJsaWMgcnVuczogUnVucztcblxuICBjb25zdHJ1Y3RvcihhY3Rpb25QYXRoOiBzdHJpbmcpIHtcbiAgICBjb25zdCBsb2cgPSBuZXcgTG9nVGFzaygnYWN0aW9uJyk7XG4gICAgbGV0IHRtcEFjdGlvbllhbWwgPSBudWxsO1xuICAgIHRyeSB7XG4gICAgICBsb2cuZGVidWcoYGxvYWRpbmcgYWN0aW9uLnltbCBmcm9tICR7YWN0aW9uUGF0aH1gKTtcbiAgICAgIHRtcEFjdGlvbllhbWwgPSB5YW1sLmxvYWQoZnMucmVhZEZpbGVTeW5jKGFjdGlvblBhdGgsICd1dGY4JykpIGFzIEFjdGlvbjtcbiAgICAgIGxvZy5zdWNjZXNzKCdsb2FkZWQgY29uZmlndXJhdGlvbiBzdWNjZXNzZnVsbHknKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIGxvZy5lcnJvcihgZmFpbGVkIHRvIGxvYWQgJHthY3Rpb25QYXRofWApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRtcEFjdGlvbllhbWwgIT09ICdvYmplY3QnIHx8IHRtcEFjdGlvbllhbWwgPT09IG51bGwpIHtcbiAgICAgIGxvZy5lcnJvcihcImFjdGlvbi55bWwgZmlsZSByZWFkIGluIGlzbid0IGFuIG9iamVjdCAobm8geWFtbCBpbiBpdClcIik7XG4gICAgfVxuICAgIGNvbnN0IGFjdGlvbllhbWwgPSB0bXBBY3Rpb25ZYW1sIGFzIEFjdGlvbjtcbiAgICB0aGlzLm5hbWUgPSBhY3Rpb25ZYW1sLm5hbWU7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGFjdGlvbllhbWwuZGVzY3JpcHRpb247XG4gICAgdGhpcy5icmFuZGluZyA9IGFjdGlvbllhbWwuYnJhbmRpbmc7XG4gICAgdGhpcy5pbnB1dHMgPSBhY3Rpb25ZYW1sLmlucHV0cztcbiAgICB0aGlzLm91dHB1dHMgPSBhY3Rpb25ZYW1sLm91dHB1dHM7XG4gICAgdGhpcy5ydW5zID0gYWN0aW9uWWFtbC5ydW5zO1xuICB9XG5cbiAgc3RyaW5naWZ5KCk6IHN0cmluZyB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB5YW1sLmR1bXAodGhpcywge1xuICAgICAgICBza2lwSW52YWxpZDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2gge1xuICAgICAgY29uc3QgbG9nID0gbmV3IExvZ1Rhc2soJ2FjdGlvbjpzdHJpbmdpZnknKTtcbiAgICAgIGxvZy5lcnJvcignZmFpbGVkIHRvIHN0cmluZ2lmeSBhY3Rpb24ueW1sJyk7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG59XG4iLCAiaW1wb3J0ICogYXMgY29yZSBmcm9tICdAYWN0aW9ucy9jb3JlJztcbmltcG9ydCAqIGFzIGNoYWxrQ2xhc3MgZnJvbSAnY2hhbGsnO1xuaW1wb3J0ICogYXMgZW1vamkgZnJvbSAnbm9kZS1lbW9qaSc7XG5cbmNvbnN0IE5PX0dST1VQID0gMDtcbmNvbnN0IFNUQVJUX0dST1VQID0gMTtcbmNvbnN0IEVORF9HUk9VUCA9IDI7XG5jb25zdCBJU19FUlJPUiA9IDM7XG5jb25zdCBJU19GQUlMRUQgPSA1O1xuY29uc3QgSVNfVElUTEUgPSA2O1xuY29uc3QgY2hhbGsgPSBjaGFsa0NsYXNzLmRlZmF1bHQ7XG5jbGFzcyBMb2dUYXNrIHtcbiAgc3RhdGljIGluZ3JvdXBfc2V0dGluZzogeyBba2V5OiBzdHJpbmddOiBib29sZWFuIH0gPSB7fTtcblxuICBzdGF0aWMgaW5kZW50V2lkdGggPSA1O1xuXG4gIHN0YXRpYyBpc0RlYnVnKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjb3JlLmlzRGVidWcoKSB8fCAhIXByb2Nlc3MuZW52LkRFQlVHO1xuICB9XG5cbiAgbmFtZTogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKG5hbWU6IHN0cmluZykge1xuICAgIHRoaXMubmFtZSA9IG5hbWU/LnRyaW0oKTtcbiAgICB0aGlzLmluZ3JvdXAgPSBmYWxzZTtcbiAgfVxuXG4gIGdldCBpbmdyb3VwKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBMb2dUYXNrLmluZ3JvdXBfc2V0dGluZ1t0aGlzLm5hbWVdID8/IGZhbHNlO1xuICB9XG5cbiAgc2V0IGluZ3JvdXAodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBMb2dUYXNrLmluZ3JvdXBfc2V0dGluZ1t0aGlzLm5hbWVdID0gdmFsdWU7XG4gIH1cblxuICBhc3luYyBsb2dTdGVwKFxuICAgIGVtb2ppU3RyOiBzdHJpbmcsXG4gICAgc3RlcDogc3RyaW5nLFxuICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgc3RhcnRHcm91cCA9IE5PX0dST1VQLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAoc3RlcC5sZW5ndGggPiBMb2dUYXNrLmluZGVudFdpZHRoKSB7XG4gICAgICBMb2dUYXNrLmluZGVudFdpZHRoID0gc3RlcC5sZW5ndGg7XG4gICAgfVxuICAgIGxldCBkZXNjOiBzdHJpbmc7XG4gICAgc3dpdGNoIChzdGVwKSB7XG4gICAgICBjYXNlICdTVEFSVCc6IHtcbiAgICAgICAgZGVzYyA9IGNoYWxrLnllbGxvd0JyaWdodChgJHtkZXNjcmlwdGlvbn1gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdJTkZPJzoge1xuICAgICAgICBkZXNjID0gY2hhbGsuZ3JlZW4oYCR7ZGVzY3JpcHRpb259YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnV0FSTic6IHtcbiAgICAgICAgZGVzYyA9IGNoYWxrLnllbGxvdyhgJHtkZXNjcmlwdGlvbn1gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdTVUNDRVNTJzoge1xuICAgICAgICBkZXNjID0gY2hhbGsuZ3JlZW5CcmlnaHQoYCR7ZGVzY3JpcHRpb259YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnRkFJTFVSRSc6IHtcbiAgICAgICAgZGVzYyA9IGNoYWxrLnJlZEJyaWdodChgJHtkZXNjcmlwdGlvbn1gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdFUlJPUic6IHtcbiAgICAgICAgZGVzYyA9IGNoYWxrLnJlZEJyaWdodChgJHtkZXNjcmlwdGlvbn1gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICcjIyMjIyc6IHtcbiAgICAgICAgZGVzYyA9IGNoYWxrLmN5YW4oYCR7ZGVzY3JpcHRpb259YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICBkZXNjID0gY2hhbGsud2hpdGUoYCR7ZGVzY3JpcHRpb259YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBtc2c6IHN0cmluZztcbiAgICBpZiAodGhpcy5pbmdyb3VwICYmICFwcm9jZXNzLmVudi5HSVRIVUJfQUNUSU9OUykge1xuICAgICAgY29uc3QgaW5kZW50U3RyID0gWy4uLkFycmF5LmZyb20oeyBsZW5ndGg6IExvZ1Rhc2suaW5kZW50V2lkdGggfSkuZmlsbCgnICcpXS5qb2luKCcnKTtcbiAgICAgIG1zZyA9IGAke2luZGVudFN0cn0gICAke2Vtb2ppU3RyfTogJHt0aGlzLm5hbWV9ID4gJHtkZXNjfWA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHN0ZXBTdHIgPSBbXG4gICAgICAgIHN0ZXAsXG4gICAgICAgIC4uLkFycmF5LmZyb20oeyBsZW5ndGg6IExvZ1Rhc2suaW5kZW50V2lkdGggLSBzdGVwLmxlbmd0aCB9KS5maWxsKCcgJyksXG4gICAgICBdLmpvaW4oJycpO1xuXG4gICAgICBtc2cgPSBgWyR7c3RlcFN0cn1dICR7ZW1vamlTdHJ9OiAke2Rlc2N9YDtcbiAgICB9XG4gICAgc3dpdGNoIChzdGVwKSB7XG4gICAgICBjYXNlICdTVEFSVCc6IHtcbiAgICAgICAgbXNnID0gY2hhbGsueWVsbG93QnJpZ2h0KGAke21zZ31gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdTVUNDRVNTJzoge1xuICAgICAgICBtc2cgPSBjaGFsay53aGl0ZUJyaWdodChgJHttc2d9YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgY2FzZSAnRkFJTFVSRSc6IHtcbiAgICAgICAgbXNnID0gY2hhbGsucmVkKGAke21zZ31gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBjYXNlICdFUlJPUic6IHtcbiAgICAgICAgbXNnID0gY2hhbGsucmVkKGAke21zZ31gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICBkZWZhdWx0OiB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBpc0Vycm9yaW5nID0gc3RhcnRHcm91cCA9PT0gSVNfRVJST1IgfHwgc3RhcnRHcm91cCA9PT0gSVNfRkFJTEVEO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52LkdJVEhVQl9BQ1RJT05TKSB7XG4gICAgICBzd2l0Y2ggKHN0YXJ0R3JvdXApIHtcbiAgICAgICAgY2FzZSBTVEFSVF9HUk9VUDoge1xuICAgICAgICAgIGNvcmUuc3RhcnRHcm91cChtc2cpO1xuXG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBFTkRfR1JPVVA6IHtcbiAgICAgICAgICBjb3JlLmVuZEdyb3VwKCk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIElTX0VSUk9SOiB7XG4gICAgICAgICAgY29yZS5lcnJvcihjaGFsay5iZ1JlZEJyaWdodChtc2cpKTtcblxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgSVNfRkFJTEVEOiB7XG4gICAgICAgICAgY29yZS5zZXRGYWlsZWQoY2hhbGsuYmdSZWRCcmlnaHQobXNnKSk7XG5cbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgY29yZS5pbmZvKG1zZyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzRXJyb3JpbmcpIHtcbiAgICAgIGNvcmUuZXJyb3IobXNnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29yZS5pbmZvKG1zZyk7XG4gICAgfVxuICB9XG5cbiAgZGVidWcoZGVzY3JpcHRpb24gPSAnJyk6IHZvaWQge1xuICAgIGlmIChMb2dUYXNrLmlzRGVidWcoKSAmJiBkZXNjcmlwdGlvbiAhPT0gJycpIHtcbiAgICAgIHRoaXMubG9nU3RlcCgnXHVEODNEXHVEQzQxXHVGRTBGXHUyMDBEXHVEODNEXHVEREU4XHVGRTBGJywgJ0RFQlVHJywgZGVzY3JpcHRpb24pO1xuICAgIH1cbiAgfVxuXG4gIHN0YXJ0KGRlc2NyaXB0aW9uID0gJycpOiB2b2lkIHtcbiAgICBjb25zdCBkZXNjID0gZGVzY3JpcHRpb24gPT09ICcnID8gYFN0YXJ0aW5nICR7dGhpcy5uYW1lfS4uLmAgOiBkZXNjcmlwdGlvbjtcblxuICAgIHRoaXMubG9nU3RlcChlbW9qaS5nZXQoJ3JvY2tldCcpID8/ICcnLCAnU1RBUlQnLCBkZXNjLCBTVEFSVF9HUk9VUCk7XG4gIH1cblxuICBpbmZvKGRlc2NyaXB0aW9uID0gJycpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ1N0ZXAoZW1vamkuZ2V0KCdzcGFya2xlcycpID8/ICcnLCAnSU5GTycsIGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIHdhcm4oZGVzY3JpcHRpb24gPSAnJyk6IHZvaWQge1xuICAgIHRoaXMubG9nU3RlcChlbW9qaS5nZXQoJ2FuZ2VyJykgPz8gJycsICdXQVJOJywgZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgc3VjY2VzcyhkZXNjcmlwdGlvbiA9ICcnLCBpbmdyb3VwID0gdHJ1ZSk6IHZvaWQge1xuICAgIGNvbnN0IGRlc2MgPSBkZXNjcmlwdGlvbiA9PT0gJycgPyBgQ29tcGxldGVkICR7dGhpcy5uYW1lfS5gIDogZGVzY3JpcHRpb247XG4gICAgaWYgKGluZ3JvdXApIHtcbiAgICAgIHRoaXMuaW5ncm91cCA9IGZhbHNlO1xuICAgICAgaWYgKHByb2Nlc3MuZW52LkdJVEhVQl9BQ1RJT05TKSB7XG4gICAgICAgIGNvcmUuZW5kR3JvdXAoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5sb2dTdGVwKGVtb2ppLmdldCgnd2hpdGVfY2hlY2tfbWFyaycpID8/ICcnLCAnU1VDQ0VTUycsIGRlc2MpO1xuICB9XG5cbiAgZmFpbChkZXNjcmlwdGlvbiA9ICcnLCBpbmdyb3VwID0gdHJ1ZSk6IHZvaWQge1xuICAgIGNvbnN0IGRlc2MgPSBkZXNjcmlwdGlvbiA9PT0gJycgPyBgRmFpbGVkICR7dGhpcy5uYW1lfS5gIDogZGVzY3JpcHRpb247XG4gICAgaWYgKGluZ3JvdXApIHtcbiAgICAgIHRoaXMuaW5ncm91cCA9IGZhbHNlO1xuICAgICAgaWYgKHByb2Nlc3MuZW52LkdJVEhVQl9BQ1RJT05TKSB7XG4gICAgICAgIGNvcmUuZW5kR3JvdXAoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgbXNndHlwZSA9IHByb2Nlc3MuZW52LkdJVEhVQl9BQ1RJT05TID8gSVNfRkFJTEVEIDogSVNfRVJST1I7XG4gICAgdGhpcy5sb2dTdGVwKGVtb2ppLmdldCgneCcpID8/ICcnLCAnRkFJTFVSRScsIGRlc2MsIG1zZ3R5cGUpO1xuICB9XG5cbiAgZXJyb3IoZGVzY3JpcHRpb24gPSAnJyk6IHZvaWQge1xuICAgIHRoaXMubG9nU3RlcChlbW9qaS5nZXQoJ3gnKSA/PyAnJywgJ0VSUk9SJywgZGVzY3JpcHRpb24sIElTX0VSUk9SKTtcbiAgfVxuXG4gIHRpdGxlKGRlc2NyaXB0aW9uID0gJycpOiB2b2lkIHtcbiAgICB0aGlzLmxvZ1N0ZXAoJ1x1RDgzRFx1RENEMycsICcjIyMjIycsIGRlc2NyaXB0aW9uLCBJU19USVRMRSk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTG9nVGFzaztcbiIsICJpbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJztcblxuaW1wb3J0IHR5cGUgeyBDb250ZXh0IH0gZnJvbSAnQGFjdGlvbnMvZ2l0aHViL2xpYi9jb250ZXh0JztcbmltcG9ydCB0eXBlIHsgUGFja2FnZUpzb24gfSBmcm9tICd0eXBlcy1wYWNrYWdlLWpzb24nO1xuXG5pbXBvcnQgdHlwZSBJbnB1dHMgZnJvbSAnLi9pbnB1dHMnO1xuaW1wb3J0IExvZ1Rhc2sgZnJvbSAnLi9sb2d0YXNrJztcblxuLy9cbi8vIFJlZ2V4IGJlbG93IG1hdGNoZXMgYW55IFVuaWNvZGUgd29yZCBhbmQgbnVtYmVyIGNvbXBhdGlibGUgd2l0aCBFUzUuIEluIEVTMjAxOCB0aGUgc2FtZSByZXN1bHRcbi8vIGNhbiBiZSBhY2hpZXZlZCBieSB1c2luZyAvWzAtOVxccHtMfV1cXFMqL2d1IGFuZCBhbHNvIGtub3duIGFzIFVuaWNvZGUgUHJvcGVydHkgRXNjYXBlc1xuLy8gKGh0dHBzOi8vMmFsaXR5LmNvbS8yMDE3LzA3L3JlZ2V4cC11bmljb2RlLXByb3BlcnR5LWVzY2FwZXMuaHRtbCkuIFNpbmNlIHRoZXJlIGlzIG5vXG4vLyB0cmFuc3BpbGF0aW9uIG9mIHRoaXMgZnVuY3Rpb25hbGl0eSBkb3duIHRvIEVTNSB3aXRob3V0IGV4dGVybmFsIHRvb2wsIHRoZSBvbmx5IHNvbHV0aW9uIGlzXG4vLyB0byB1c2UgYWxyZWFkeSB0cmFuc3BpbGVkIGZvcm0uIEV4YW1wbGUgY2FuIGJlIGZvdW5kIGhlcmUgLVxuLy8gaHR0cHM6Ly9tb3RoZXJlZmYuaW4vcmVnZXhwdSNpbnB1dD12YXIrcmVnZXgrJTNEKyUyRiU1QjAtOSU1Q3AlN0JMJTdEJTVEJTVDUyolMkZndSUzQiUwQSUwQSZ1bmljb2RlUHJvcGVydHlFc2NhcGU9MVxuLy9cblxuY29uc3QgdW5pY29kZVdvcmRNYXRjaCA9XG4gIC8vIHRydW5rLWlnbm9yZShlc2xpbnQvdW5pY29ybi9iZXR0ZXItcmVnZXgsZXNsaW50L3VuaWNvcm4vbm8taGV4LWVzY2FwZSxlc2xpbnQvb3B0aW1pemUtcmVnZXgvb3B0aW1pemUtcmVnZXgpXG4gIC8oPzpbXFxkQS1aYS16XFx1MDBBQVxcdTAwQjVcXHUwMEJBXFx1MDBDMC1cXHUwMEQ2XFx1MDBEOC1cXHUwMEY2XFx1MDBGOC1cXHUwMkMxXFx1MDJDNi1cXHUwMkQxXFx1MDJFMC1cXHUwMkU0XFx1MDJFQ1xcdTAyRUVcXHUwMzcwLVxcdTAzNzRcXHUwMzc2XFx1MDM3N1xcdTAzN0EtXFx1MDM3RFxcdTAzN0ZcXHUwMzg2XFx1MDM4OC1cXHUwMzhBXFx1MDM4Q1xcdTAzOEUtXFx1MDNBMVxcdTAzQTMtXFx1MDNGNVxcdTAzRjctXFx1MDQ4MVxcdTA0OEEtXFx1MDUyRlxcdTA1MzEtXFx1MDU1NlxcdTA1NTlcXHUwNTYwLVxcdTA1ODhcXHUwNUQwLVxcdTA1RUFcXHUwNUVGLVxcdTA1RjJcXHUwNjIwLVxcdTA2NEFcXHUwNjZFXFx1MDY2RlxcdTA2NzEtXFx1MDZEM1xcdTA2RDVcXHUwNkU1XFx1MDZFNlxcdTA2RUVcXHUwNkVGXFx1MDZGQS1cXHUwNkZDXFx1MDZGRlxcdTA3MTBcXHUwNzEyLVxcdTA3MkZcXHUwNzRELVxcdTA3QTVcXHUwN0IxXFx1MDdDQS1cXHUwN0VBXFx1MDdGNFxcdTA3RjVcXHUwN0ZBXFx1MDgwMC1cXHUwODE1XFx1MDgxQVxcdTA4MjRcXHUwODI4XFx1MDg0MC1cXHUwODU4XFx1MDg2MC1cXHUwODZBXFx1MDg3MC1cXHUwODg3XFx1MDg4OS1cXHUwODhFXFx1MDhBMC1cXHUwOEM5XFx1MDkwNC1cXHUwOTM5XFx1MDkzRFxcdTA5NTBcXHUwOTU4LVxcdTA5NjFcXHUwOTcxLVxcdTA5ODBcXHUwOTg1LVxcdTA5OENcXHUwOThGXFx1MDk5MFxcdTA5OTMtXFx1MDlBOFxcdTA5QUEtXFx1MDlCMFxcdTA5QjJcXHUwOUI2LVxcdTA5QjlcXHUwOUJEXFx1MDlDRVxcdTA5RENcXHUwOUREXFx1MDlERi1cXHUwOUUxXFx1MDlGMFxcdTA5RjFcXHUwOUZDXFx1MEEwNS1cXHUwQTBBXFx1MEEwRlxcdTBBMTBcXHUwQTEzLVxcdTBBMjhcXHUwQTJBLVxcdTBBMzBcXHUwQTMyXFx1MEEzM1xcdTBBMzVcXHUwQTM2XFx1MEEzOFxcdTBBMzlcXHUwQTU5LVxcdTBBNUNcXHUwQTVFXFx1MEE3Mi1cXHUwQTc0XFx1MEE4NS1cXHUwQThEXFx1MEE4Ri1cXHUwQTkxXFx1MEE5My1cXHUwQUE4XFx1MEFBQS1cXHUwQUIwXFx1MEFCMlxcdTBBQjNcXHUwQUI1LVxcdTBBQjlcXHUwQUJEXFx1MEFEMFxcdTBBRTBcXHUwQUUxXFx1MEFGOVxcdTBCMDUtXFx1MEIwQ1xcdTBCMEZcXHUwQjEwXFx1MEIxMy1cXHUwQjI4XFx1MEIyQS1cXHUwQjMwXFx1MEIzMlxcdTBCMzNcXHUwQjM1LVxcdTBCMzlcXHUwQjNEXFx1MEI1Q1xcdTBCNURcXHUwQjVGLVxcdTBCNjFcXHUwQjcxXFx1MEI4M1xcdTBCODUtXFx1MEI4QVxcdTBCOEUtXFx1MEI5MFxcdTBCOTItXFx1MEI5NVxcdTBCOTlcXHUwQjlBXFx1MEI5Q1xcdTBCOUVcXHUwQjlGXFx1MEJBM1xcdTBCQTRcXHUwQkE4LVxcdTBCQUFcXHUwQkFFLVxcdTBCQjlcXHUwQkQwXFx1MEMwNS1cXHUwQzBDXFx1MEMwRS1cXHUwQzEwXFx1MEMxMi1cXHUwQzI4XFx1MEMyQS1cXHUwQzM5XFx1MEMzRFxcdTBDNTgtXFx1MEM1QVxcdTBDNURcXHUwQzYwXFx1MEM2MVxcdTBDODBcXHUwQzg1LVxcdTBDOENcXHUwQzhFLVxcdTBDOTBcXHUwQzkyLVxcdTBDQThcXHUwQ0FBLVxcdTBDQjNcXHUwQ0I1LVxcdTBDQjlcXHUwQ0JEXFx1MENERFxcdTBDREVcXHUwQ0UwXFx1MENFMVxcdTBDRjFcXHUwQ0YyXFx1MEQwNC1cXHUwRDBDXFx1MEQwRS1cXHUwRDEwXFx1MEQxMi1cXHUwRDNBXFx1MEQzRFxcdTBENEVcXHUwRDU0LVxcdTBENTZcXHUwRDVGLVxcdTBENjFcXHUwRDdBLVxcdTBEN0ZcXHUwRDg1LVxcdTBEOTZcXHUwRDlBLVxcdTBEQjFcXHUwREIzLVxcdTBEQkJcXHUwREJEXFx1MERDMC1cXHUwREM2XFx1MEUwMS1cXHUwRTMwXFx1MEUzMlxcdTBFMzNcXHUwRTQwLVxcdTBFNDZcXHUwRTgxXFx1MEU4MlxcdTBFODRcXHUwRTg2LVxcdTBFOEFcXHUwRThDLVxcdTBFQTNcXHUwRUE1XFx1MEVBNy1cXHUwRUIwXFx1MEVCMlxcdTBFQjNcXHUwRUJEXFx1MEVDMC1cXHUwRUM0XFx1MEVDNlxcdTBFREMtXFx1MEVERlxcdTBGMDBcXHUwRjQwLVxcdTBGNDdcXHUwRjQ5LVxcdTBGNkNcXHUwRjg4LVxcdTBGOENcXHUxMDAwLVxcdTEwMkFcXHUxMDNGXFx1MTA1MC1cXHUxMDU1XFx1MTA1QS1cXHUxMDVEXFx1MTA2MVxcdTEwNjVcXHUxMDY2XFx1MTA2RS1cXHUxMDcwXFx1MTA3NS1cXHUxMDgxXFx1MTA4RVxcdTEwQTAtXFx1MTBDNVxcdTEwQzdcXHUxMENEXFx1MTBEMC1cXHUxMEZBXFx1MTBGQy1cXHUxMjQ4XFx1MTI0QS1cXHUxMjREXFx1MTI1MC1cXHUxMjU2XFx1MTI1OFxcdTEyNUEtXFx1MTI1RFxcdTEyNjAtXFx1MTI4OFxcdTEyOEEtXFx1MTI4RFxcdTEyOTAtXFx1MTJCMFxcdTEyQjItXFx1MTJCNVxcdTEyQjgtXFx1MTJCRVxcdTEyQzBcXHUxMkMyLVxcdTEyQzVcXHUxMkM4LVxcdTEyRDZcXHUxMkQ4LVxcdTEzMTBcXHUxMzEyLVxcdTEzMTVcXHUxMzE4LVxcdTEzNUFcXHUxMzgwLVxcdTEzOEZcXHUxM0EwLVxcdTEzRjVcXHUxM0Y4LVxcdTEzRkRcXHUxNDAxLVxcdTE2NkNcXHUxNjZGLVxcdTE2N0ZcXHUxNjgxLVxcdTE2OUFcXHUxNkEwLVxcdTE2RUFcXHUxNkYxLVxcdTE2RjhcXHUxNzAwLVxcdTE3MTFcXHUxNzFGLVxcdTE3MzFcXHUxNzQwLVxcdTE3NTFcXHUxNzYwLVxcdTE3NkNcXHUxNzZFLVxcdTE3NzBcXHUxNzgwLVxcdTE3QjNcXHUxN0Q3XFx1MTdEQ1xcdTE4MjAtXFx1MTg3OFxcdTE4ODAtXFx1MTg4NFxcdTE4ODctXFx1MThBOFxcdTE4QUFcXHUxOEIwLVxcdTE4RjVcXHUxOTAwLVxcdTE5MUVcXHUxOTUwLVxcdTE5NkRcXHUxOTcwLVxcdTE5NzRcXHUxOTgwLVxcdTE5QUJcXHUxOUIwLVxcdTE5QzlcXHUxQTAwLVxcdTFBMTZcXHUxQTIwLVxcdTFBNTRcXHUxQUE3XFx1MUIwNS1cXHUxQjMzXFx1MUI0NS1cXHUxQjRDXFx1MUI4My1cXHUxQkEwXFx1MUJBRVxcdTFCQUZcXHUxQkJBLVxcdTFCRTVcXHUxQzAwLVxcdTFDMjNcXHUxQzRELVxcdTFDNEZcXHUxQzVBLVxcdTFDN0RcXHUxQzgwLVxcdTFDODhcXHUxQzkwLVxcdTFDQkFcXHUxQ0JELVxcdTFDQkZcXHUxQ0U5LVxcdTFDRUNcXHUxQ0VFLVxcdTFDRjNcXHUxQ0Y1XFx1MUNGNlxcdTFDRkFcXHUxRDAwLVxcdTFEQkZcXHUxRTAwLVxcdTFGMTVcXHUxRjE4LVxcdTFGMURcXHUxRjIwLVxcdTFGNDVcXHUxRjQ4LVxcdTFGNERcXHUxRjUwLVxcdTFGNTdcXHUxRjU5XFx1MUY1QlxcdTFGNURcXHUxRjVGLVxcdTFGN0RcXHUxRjgwLVxcdTFGQjRcXHUxRkI2LVxcdTFGQkNcXHUxRkJFXFx1MUZDMi1cXHUxRkM0XFx1MUZDNi1cXHUxRkNDXFx1MUZEMC1cXHUxRkQzXFx1MUZENi1cXHUxRkRCXFx1MUZFMC1cXHUxRkVDXFx1MUZGMi1cXHUxRkY0XFx1MUZGNi1cXHUxRkZDXFx1MjA3MVxcdTIwN0ZcXHUyMDkwLVxcdTIwOUNcXHUyMTAyXFx1MjEwN1xcdTIxMEEtXFx1MjExM1xcdTIxMTVcXHUyMTE5LVxcdTIxMURcXHUyMTI0XFx1MjEyNlxcdTIxMjhcXHUyMTJBLVxcdTIxMkRcXHUyMTJGLVxcdTIxMzlcXHUyMTNDLVxcdTIxM0ZcXHUyMTQ1LVxcdTIxNDlcXHUyMTRFXFx1MjE4M1xcdTIxODRcXHUyQzAwLVxcdTJDRTRcXHUyQ0VCLVxcdTJDRUVcXHUyQ0YyXFx1MkNGM1xcdTJEMDAtXFx1MkQyNVxcdTJEMjdcXHUyRDJEXFx1MkQzMC1cXHUyRDY3XFx1MkQ2RlxcdTJEODAtXFx1MkQ5NlxcdTJEQTAtXFx1MkRBNlxcdTJEQTgtXFx1MkRBRVxcdTJEQjAtXFx1MkRCNlxcdTJEQjgtXFx1MkRCRVxcdTJEQzAtXFx1MkRDNlxcdTJEQzgtXFx1MkRDRVxcdTJERDAtXFx1MkRENlxcdTJERDgtXFx1MkRERVxcdTJFMkZcXHUzMDA1XFx1MzAwNlxcdTMwMzEtXFx1MzAzNVxcdTMwM0JcXHUzMDNDXFx1MzA0MS1cXHUzMDk2XFx1MzA5RC1cXHUzMDlGXFx1MzBBMS1cXHUzMEZBXFx1MzBGQy1cXHUzMEZGXFx1MzEwNS1cXHUzMTJGXFx1MzEzMS1cXHUzMThFXFx1MzFBMC1cXHUzMUJGXFx1MzFGMC1cXHUzMUZGXFx1MzQwMC1cXHU0REJGXFx1NEUwMC1cXHVBNDhDXFx1QTREMC1cXHVBNEZEXFx1QTUwMC1cXHVBNjBDXFx1QTYxMC1cXHVBNjFGXFx1QTYyQVxcdUE2MkJcXHVBNjQwLVxcdUE2NkVcXHVBNjdGLVxcdUE2OURcXHVBNkEwLVxcdUE2RTVcXHVBNzE3LVxcdUE3MUZcXHVBNzIyLVxcdUE3ODhcXHVBNzhCLVxcdUE3Q0FcXHVBN0QwXFx1QTdEMVxcdUE3RDNcXHVBN0Q1LVxcdUE3RDlcXHVBN0YyLVxcdUE4MDFcXHVBODAzLVxcdUE4MDVcXHVBODA3LVxcdUE4MEFcXHVBODBDLVxcdUE4MjJcXHVBODQwLVxcdUE4NzNcXHVBODgyLVxcdUE4QjNcXHVBOEYyLVxcdUE4RjdcXHVBOEZCXFx1QThGRFxcdUE4RkVcXHVBOTBBLVxcdUE5MjVcXHVBOTMwLVxcdUE5NDZcXHVBOTYwLVxcdUE5N0NcXHVBOTg0LVxcdUE5QjJcXHVBOUNGXFx1QTlFMC1cXHVBOUU0XFx1QTlFNi1cXHVBOUVGXFx1QTlGQS1cXHVBOUZFXFx1QUEwMC1cXHVBQTI4XFx1QUE0MC1cXHVBQTQyXFx1QUE0NC1cXHVBQTRCXFx1QUE2MC1cXHVBQTc2XFx1QUE3QVxcdUFBN0UtXFx1QUFBRlxcdUFBQjFcXHVBQUI1XFx1QUFCNlxcdUFBQjktXFx1QUFCRFxcdUFBQzBcXHVBQUMyXFx1QUFEQi1cXHVBQUREXFx1QUFFMC1cXHVBQUVBXFx1QUFGMi1cXHVBQUY0XFx1QUIwMS1cXHVBQjA2XFx1QUIwOS1cXHVBQjBFXFx1QUIxMS1cXHVBQjE2XFx1QUIyMC1cXHVBQjI2XFx1QUIyOC1cXHVBQjJFXFx1QUIzMC1cXHVBQjVBXFx1QUI1Qy1cXHVBQjY5XFx1QUI3MC1cXHVBQkUyXFx1QUMwMC1cXHVEN0EzXFx1RDdCMC1cXHVEN0M2XFx1RDdDQi1cXHVEN0ZCXFx1RjkwMC1cXHVGQTZEXFx1RkE3MC1cXHVGQUQ5XFx1RkIwMC1cXHVGQjA2XFx1RkIxMy1cXHVGQjE3XFx1RkIxRFxcdUZCMUYtXFx1RkIyOFxcdUZCMkEtXFx1RkIzNlxcdUZCMzgtXFx1RkIzQ1xcdUZCM0VcXHVGQjQwXFx1RkI0MVxcdUZCNDNcXHVGQjQ0XFx1RkI0Ni1cXHVGQkIxXFx1RkJEMy1cXHVGRDNEXFx1RkQ1MC1cXHVGRDhGXFx1RkQ5Mi1cXHVGREM3XFx1RkRGMC1cXHVGREZCXFx1RkU3MC1cXHVGRTc0XFx1RkU3Ni1cXHVGRUZDXFx1RkYyMS1cXHVGRjNBXFx1RkY0MS1cXHVGRjVBXFx1RkY2Ni1cXHVGRkJFXFx1RkZDMi1cXHVGRkM3XFx1RkZDQS1cXHVGRkNGXFx1RkZEMi1cXHVGRkQ3XFx1RkZEQS1cXHVGRkRDXXxcXHVEODAwW1xcdURDMDAtXFx1REMwQlxcdURDMEQtXFx1REMyNlxcdURDMjgtXFx1REMzQVxcdURDM0NcXHVEQzNEXFx1REMzRi1cXHVEQzREXFx1REM1MC1cXHVEQzVEXFx1REM4MC1cXHVEQ0ZBXFx1REU4MC1cXHVERTlDXFx1REVBMC1cXHVERUQwXFx1REYwMC1cXHVERjFGXFx1REYyRC1cXHVERjQwXFx1REY0Mi1cXHVERjQ5XFx1REY1MC1cXHVERjc1XFx1REY4MC1cXHVERjlEXFx1REZBMC1cXHVERkMzXFx1REZDOC1cXHVERkNGXXxcXHVEODAxW1xcdURDMDAtXFx1REM5RFxcdURDQjAtXFx1RENEM1xcdURDRDgtXFx1RENGQlxcdUREMDAtXFx1REQyN1xcdUREMzAtXFx1REQ2M1xcdURENzAtXFx1REQ3QVxcdUREN0MtXFx1REQ4QVxcdUREOEMtXFx1REQ5MlxcdUREOTRcXHVERDk1XFx1REQ5Ny1cXHVEREExXFx1RERBMy1cXHVEREIxXFx1RERCMy1cXHVEREI5XFx1RERCQlxcdUREQkNcXHVERTAwLVxcdURGMzZcXHVERjQwLVxcdURGNTVcXHVERjYwLVxcdURGNjdcXHVERjgwLVxcdURGODVcXHVERjg3LVxcdURGQjBcXHVERkIyLVxcdURGQkFdfFxcdUQ4MDJbXFx1REMwMC1cXHVEQzA1XFx1REMwOFxcdURDMEEtXFx1REMzNVxcdURDMzdcXHVEQzM4XFx1REMzQ1xcdURDM0YtXFx1REM1NVxcdURDNjAtXFx1REM3NlxcdURDODAtXFx1REM5RVxcdURDRTAtXFx1RENGMlxcdURDRjRcXHVEQ0Y1XFx1REQwMC1cXHVERDE1XFx1REQyMC1cXHVERDM5XFx1REQ4MC1cXHVEREI3XFx1RERCRVxcdUREQkZcXHVERTAwXFx1REUxMC1cXHVERTEzXFx1REUxNS1cXHVERTE3XFx1REUxOS1cXHVERTM1XFx1REU2MC1cXHVERTdDXFx1REU4MC1cXHVERTlDXFx1REVDMC1cXHVERUM3XFx1REVDOS1cXHVERUU0XFx1REYwMC1cXHVERjM1XFx1REY0MC1cXHVERjU1XFx1REY2MC1cXHVERjcyXFx1REY4MC1cXHVERjkxXXxcXHVEODAzW1xcdURDMDAtXFx1REM0OFxcdURDODAtXFx1RENCMlxcdURDQzAtXFx1RENGMlxcdUREMDAtXFx1REQyM1xcdURFODAtXFx1REVBOVxcdURFQjBcXHVERUIxXFx1REYwMC1cXHVERjFDXFx1REYyN1xcdURGMzAtXFx1REY0NVxcdURGNzAtXFx1REY4MVxcdURGQjAtXFx1REZDNFxcdURGRTAtXFx1REZGNl18XFx1RDgwNFtcXHVEQzAzLVxcdURDMzdcXHVEQzcxXFx1REM3MlxcdURDNzVcXHVEQzgzLVxcdURDQUZcXHVEQ0QwLVxcdURDRThcXHVERDAzLVxcdUREMjZcXHVERDQ0XFx1REQ0N1xcdURENTAtXFx1REQ3MlxcdURENzZcXHVERDgzLVxcdUREQjJcXHVEREMxLVxcdUREQzRcXHVERERBXFx1REREQ1xcdURFMDAtXFx1REUxMVxcdURFMTMtXFx1REUyQlxcdURFODAtXFx1REU4NlxcdURFODhcXHVERThBLVxcdURFOERcXHVERThGLVxcdURFOURcXHVERTlGLVxcdURFQThcXHVERUIwLVxcdURFREVcXHVERjA1LVxcdURGMENcXHVERjBGXFx1REYxMFxcdURGMTMtXFx1REYyOFxcdURGMkEtXFx1REYzMFxcdURGMzJcXHVERjMzXFx1REYzNS1cXHVERjM5XFx1REYzRFxcdURGNTBcXHVERjVELVxcdURGNjFdfFxcdUQ4MDVbXFx1REMwMC1cXHVEQzM0XFx1REM0Ny1cXHVEQzRBXFx1REM1Ri1cXHVEQzYxXFx1REM4MC1cXHVEQ0FGXFx1RENDNFxcdURDQzVcXHVEQ0M3XFx1REQ4MC1cXHVEREFFXFx1REREOC1cXHVERERCXFx1REUwMC1cXHVERTJGXFx1REU0NFxcdURFODAtXFx1REVBQVxcdURFQjhcXHVERjAwLVxcdURGMUFcXHVERjQwLVxcdURGNDZdfFxcdUQ4MDZbXFx1REMwMC1cXHVEQzJCXFx1RENBMC1cXHVEQ0RGXFx1RENGRi1cXHVERDA2XFx1REQwOVxcdUREMEMtXFx1REQxM1xcdUREMTVcXHVERDE2XFx1REQxOC1cXHVERDJGXFx1REQzRlxcdURENDFcXHVEREEwLVxcdUREQTdcXHVEREFBLVxcdURERDBcXHVEREUxXFx1RERFM1xcdURFMDBcXHVERTBCLVxcdURFMzJcXHVERTNBXFx1REU1MFxcdURFNUMtXFx1REU4OVxcdURFOURcXHVERUIwLVxcdURFRjhdfFxcdUQ4MDdbXFx1REMwMC1cXHVEQzA4XFx1REMwQS1cXHVEQzJFXFx1REM0MFxcdURDNzItXFx1REM4RlxcdUREMDAtXFx1REQwNlxcdUREMDhcXHVERDA5XFx1REQwQi1cXHVERDMwXFx1REQ0NlxcdURENjAtXFx1REQ2NVxcdURENjdcXHVERDY4XFx1REQ2QS1cXHVERDg5XFx1REQ5OFxcdURFRTAtXFx1REVGMlxcdURGQjBdfFxcdUQ4MDhbXFx1REMwMC1cXHVERjk5XXxcXHVEODA5W1xcdURDODAtXFx1REQ0M118XFx1RDgwQltcXHVERjkwLVxcdURGRjBdfFtcXHVEODBDXFx1RDgxQy1cXHVEODIwXFx1RDgyMlxcdUQ4NDAtXFx1RDg2OFxcdUQ4NkEtXFx1RDg2Q1xcdUQ4NkYtXFx1RDg3MlxcdUQ4NzQtXFx1RDg3OVxcdUQ4ODAtXFx1RDg4M11bXFx1REMwMC1cXHVERkZGXXxcXHVEODBEW1xcdURDMDAtXFx1REMyRV18XFx1RDgxMVtcXHVEQzAwLVxcdURFNDZdfFxcdUQ4MUFbXFx1REMwMC1cXHVERTM4XFx1REU0MC1cXHVERTVFXFx1REU3MC1cXHVERUJFXFx1REVEMC1cXHVERUVEXFx1REYwMC1cXHVERjJGXFx1REY0MC1cXHVERjQzXFx1REY2My1cXHVERjc3XFx1REY3RC1cXHVERjhGXXxcXHVEODFCW1xcdURFNDAtXFx1REU3RlxcdURGMDAtXFx1REY0QVxcdURGNTBcXHVERjkzLVxcdURGOUZcXHVERkUwXFx1REZFMVxcdURGRTNdfFxcdUQ4MjFbXFx1REMwMC1cXHVERkY3XXxcXHVEODIzW1xcdURDMDAtXFx1RENENVxcdUREMDAtXFx1REQwOF18XFx1RDgyQltcXHVERkYwLVxcdURGRjNcXHVERkY1LVxcdURGRkJcXHVERkZEXFx1REZGRV18XFx1RDgyQ1tcXHVEQzAwLVxcdUREMjJcXHVERDUwLVxcdURENTJcXHVERDY0LVxcdURENjdcXHVERDcwLVxcdURFRkJdfFxcdUQ4MkZbXFx1REMwMC1cXHVEQzZBXFx1REM3MC1cXHVEQzdDXFx1REM4MC1cXHVEQzg4XFx1REM5MC1cXHVEQzk5XXxcXHVEODM1W1xcdURDMDAtXFx1REM1NFxcdURDNTYtXFx1REM5Q1xcdURDOUVcXHVEQzlGXFx1RENBMlxcdURDQTVcXHVEQ0E2XFx1RENBOS1cXHVEQ0FDXFx1RENBRS1cXHVEQ0I5XFx1RENCQlxcdURDQkQtXFx1RENDM1xcdURDQzUtXFx1REQwNVxcdUREMDctXFx1REQwQVxcdUREMEQtXFx1REQxNFxcdUREMTYtXFx1REQxQ1xcdUREMUUtXFx1REQzOVxcdUREM0ItXFx1REQzRVxcdURENDAtXFx1REQ0NFxcdURENDZcXHVERDRBLVxcdURENTBcXHVERDUyLVxcdURFQTVcXHVERUE4LVxcdURFQzBcXHVERUMyLVxcdURFREFcXHVERURDLVxcdURFRkFcXHVERUZDLVxcdURGMTRcXHVERjE2LVxcdURGMzRcXHVERjM2LVxcdURGNEVcXHVERjUwLVxcdURGNkVcXHVERjcwLVxcdURGODhcXHVERjhBLVxcdURGQThcXHVERkFBLVxcdURGQzJcXHVERkM0LVxcdURGQ0JdfFxcdUQ4MzdbXFx1REYwMC1cXHVERjFFXXxcXHVEODM4W1xcdUREMDAtXFx1REQyQ1xcdUREMzctXFx1REQzRFxcdURENEVcXHVERTkwLVxcdURFQURcXHVERUMwLVxcdURFRUJdfFxcdUQ4MzlbXFx1REZFMC1cXHVERkU2XFx1REZFOC1cXHVERkVCXFx1REZFRFxcdURGRUVcXHVERkYwLVxcdURGRkVdfFxcdUQ4M0FbXFx1REMwMC1cXHVEQ0M0XFx1REQwMC1cXHVERDQzXFx1REQ0Ql18XFx1RDgzQltcXHVERTAwLVxcdURFMDNcXHVERTA1LVxcdURFMUZcXHVERTIxXFx1REUyMlxcdURFMjRcXHVERTI3XFx1REUyOS1cXHVERTMyXFx1REUzNC1cXHVERTM3XFx1REUzOVxcdURFM0JcXHVERTQyXFx1REU0N1xcdURFNDlcXHVERTRCXFx1REU0RC1cXHVERTRGXFx1REU1MVxcdURFNTJcXHVERTU0XFx1REU1N1xcdURFNTlcXHVERTVCXFx1REU1RFxcdURFNUZcXHVERTYxXFx1REU2MlxcdURFNjRcXHVERTY3LVxcdURFNkFcXHVERTZDLVxcdURFNzJcXHVERTc0LVxcdURFNzdcXHVERTc5LVxcdURFN0NcXHVERTdFXFx1REU4MC1cXHVERTg5XFx1REU4Qi1cXHVERTlCXFx1REVBMS1cXHVERUEzXFx1REVBNS1cXHVERUE5XFx1REVBQi1cXHVERUJCXXxcXHVEODY5W1xcdURDMDAtXFx1REVERlxcdURGMDAtXFx1REZGRl18XFx1RDg2RFtcXHVEQzAwLVxcdURGMzhcXHVERjQwLVxcdURGRkZdfFxcdUQ4NkVbXFx1REMwMC1cXHVEQzFEXFx1REMyMC1cXHVERkZGXXxcXHVEODczW1xcdURDMDAtXFx1REVBMVxcdURFQjAtXFx1REZGRl18XFx1RDg3QVtcXHVEQzAwLVxcdURGRTBdfFxcdUQ4N0VbXFx1REMwMC1cXHVERTFEXXxcXHVEODg0W1xcdURDMDAtXFx1REY0QV0pXFxTKi9nO1xuXG5leHBvcnQgZnVuY3Rpb24gdW5kZWZpbmVkT25FbXB0eSh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF2YWx1ZSB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBiYXNlbmFtZShwYXRoOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIXBhdGgpIHJldHVybiB1bmRlZmluZWQ7XG4gIGNvbnN0IGxvZyA9IG5ldyBMb2dUYXNrKCdiYXNlbmFtZScpO1xuICBjb25zdCByZXN1bHQgPSBwYXRoLnNwbGl0KCcvJykucmV2ZXJzZSgpWzBdO1xuICBsb2cuZGVidWcoYEJhc2VuYW1lIHBhc3NlZCAke3BhdGh9IGFuZCByZXR1cm5zICR7cmVzdWx0fWApO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3RyaXBSZWZzKHBhdGg6IHN0cmluZyk6IHN0cmluZyB8IG51bGwge1xuICBpZiAoIXBhdGgpIHJldHVybiBudWxsO1xuICBjb25zdCBsb2cgPSBuZXcgTG9nVGFzaygnc3RyaXBSZWZzJyk7XG4gIGNvbnN0IHJlc3VsdCA9IHBhdGgucmVwbGFjZSgncmVmcy9oZWFkcy8nLCAnJykucmVwbGFjZSgncmVmcy90YWdzLycsICcnKTtcbiAgbG9nLmRlYnVnKGBzdHJpcFJlZnMgcGFzc2VkICR7cGF0aH0gYW5kIHJldHVybnMgJHtyZXN1bHR9YCk7XG4gIHJldHVybiByZXN1bHQ7XG59XG5leHBvcnQgZnVuY3Rpb24gdGl0bGVjYXNlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICghdGV4dCkgcmV0dXJuIHVuZGVmaW5lZDtcbiAgaWYgKHR5cGVvZiB0ZXh0ICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEludmFsaWQgYXJndW1lbnQgdHlwZSBwcm92aWRlZCB0byB0aXRsZWNhc2UoKTogJHt0eXBlb2YgdGV4dH1gKTtcbiAgfVxuICByZXR1cm4gdGV4dC5yZXBsYWNlQWxsKHVuaWNvZGVXb3JkTWF0Y2gsICh0eHQpID0+XG4gICAgdHh0WzBdID8gdHh0WzBdLnRvVXBwZXJDYXNlKCkgKyB0eHQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKSA6IHR4dCxcbiAgKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBwcmVmaXhQYXJzZXIodGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCF0ZXh0KSByZXR1cm4gdW5kZWZpbmVkO1xuICBpZiAodHlwZW9mIHRleHQgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgSW52YWxpZCBhcmd1bWVudCB0eXBlIHByb3ZpZGVkIHRvIHByZWZpeFBhcnNlcigpOiAke3R5cGVvZiB0ZXh0fWApO1xuICB9XG4gIHJldHVybiB0aXRsZWNhc2UodGV4dC5yZXBsYWNlKC9bXy1dKy8sICcgJykpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd3JhcFRleHQodGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkLCBjb250ZW50OiBzdHJpbmdbXSwgcHJlcGVuZCA9ICcnKTogc3RyaW5nW10ge1xuICAvLyBDb25zdHJhaW4gdGhlIHdpZHRoIG9mIHRoZSBkZXNjcmlwdGlvblxuICBpZiAoIXRleHQpIHJldHVybiBjb250ZW50O1xuICBjb25zdCB3aWR0aCA9IDgwO1xuXG4gIGxldCBkZXNjcmlwdGlvbiA9IHRleHRcbiAgICAudHJpbSgpXG4gICAgLnJlcGxhY2VBbGwoJ1xcclxcbicsICdcXG4nKSAvLyBDb252ZXJ0IENSIHRvIExGXG4gICAgLnJlcGxhY2VBbGwoLyArL2csICcgJykgLy8gICAgU3F1YXNoIGNvbnNlY3V0aXZlIHNwYWNlc1xuICAgIC5yZXBsYWNlQWxsKCcgXFxuJywgJ1xcbicpOyAvLyAgU3F1YXNoIHNwYWNlIGZvbGxvd2VkIGJ5IG5ld2xpbmVcblxuICB3aGlsZSAoZGVzY3JpcHRpb24pIHtcbiAgICAvLyBMb25nZXIgdGhhbiB3aWR0aD8gRmluZCBhIHNwYWNlIHRvIGJyZWFrIGFwYXJ0XG4gICAgbGV0IHNlZ21lbnQ6IHN0cmluZztcbiAgICBpZiAoZGVzY3JpcHRpb24ubGVuZ3RoID4gd2lkdGgpIHtcbiAgICAgIHNlZ21lbnQgPSBkZXNjcmlwdGlvbi5zbGljZSgwLCBNYXRoLm1heCgwLCB3aWR0aCArIDEpKTtcbiAgICAgIHdoaWxlICghc2VnbWVudC5lbmRzV2l0aCgnICcpICYmICFzZWdtZW50LmVuZHNXaXRoKCdcXG4nKSAmJiBzZWdtZW50KSB7XG4gICAgICAgIHNlZ21lbnQgPSBzZWdtZW50LnNsaWNlKDAsIE1hdGgubWF4KDAsIHNlZ21lbnQubGVuZ3RoIC0gMSkpO1xuICAgICAgfVxuXG4gICAgICAvLyBUcmltbWVkIHRvbyBtdWNoP1xuICAgICAgaWYgKHNlZ21lbnQubGVuZ3RoIDwgd2lkdGggKiAwLjY3KSB7XG4gICAgICAgIHNlZ21lbnQgPSBkZXNjcmlwdGlvbjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc2VnbWVudCA9IGRlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGZvciBuZXdsaW5lXG4gICAgY29uc3QgbmV3bGluZUluZGV4ID0gc2VnbWVudC5pbmRleE9mKCdcXG4nKTtcbiAgICBpZiAobmV3bGluZUluZGV4ID49IDApIHtcbiAgICAgIHNlZ21lbnQgPSBzZWdtZW50LnNsaWNlKDAsIE1hdGgubWF4KDAsIG5ld2xpbmVJbmRleCArIDEpKTtcbiAgICB9XG4gICAgY29udGVudC5wdXNoKGAke3ByZXBlbmR9JHtzZWdtZW50fWAudHJpbUVuZCgpKTtcbiAgICAvLyBSZW1haW5pbmdcbiAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uLnNsaWNlKHNlZ21lbnQubGVuZ3RoKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUmVwbyB7XG4gIG93bmVyOiBzdHJpbmc7XG4gIHJlcG86IHN0cmluZztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlcG9zaXRvcnlGaW5kZXIoXG4gIGlucHV0UmVwbzogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCxcbiAgY29udGV4dDogQ29udGV4dCB8IHVuZGVmaW5lZCB8IG51bGwsXG4pOiBSZXBvIHwgbnVsbCB7XG4gIGNvbnN0IGxvZyA9IG5ldyBMb2dUYXNrKCdyZXBvc2l0b3J5RmluZGVyJyk7XG4gIGNvbnN0IG9iaiA9IHt9IGFzIHVua25vd247XG4gIGNvbnN0IHJlc3VsdCA9IG9iaiBhcyBSZXBvO1xuICBpZiAoaW5wdXRSZXBvKSB7XG4gICAgW3Jlc3VsdC5vd25lciwgcmVzdWx0LnJlcG9dID0gaW5wdXRSZXBvLnNwbGl0KCcvJykgYXMgW3N0cmluZywgc3RyaW5nXTtcbiAgICBsb2cuaW5mbyhgcmVwb3NpdG9yeUZpbmRlciB1c2luZyBpbnB1dCAke2lucHV0UmVwb30gYW5kIHJldHVybnMgJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWApO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgaWYgKHByb2Nlc3MuZW52LkdJVEhVQl9SRVBPU0lUT1JZKSB7XG4gICAgW3Jlc3VsdC5vd25lciwgcmVzdWx0LnJlcG9dID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1JFUE9TSVRPUlkuc3BsaXQoJy8nKSBhcyBbc3RyaW5nLCBzdHJpbmddO1xuICAgIGxvZy5pbmZvKFxuICAgICAgYHJlcG9zaXRvcnlGaW5kZXIgdXNpbmcgR0lUSFVCX1JFUE9TSVRPUlkgJHtcbiAgICAgICAgcHJvY2Vzcy5lbnYuR0lUSFVCX1JFUE9TSVRPUllcbiAgICAgIH0gYW5kIHJldHVybnMgJHtKU09OLnN0cmluZ2lmeShyZXN1bHQpfWAsXG4gICAgKTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjb250ZXh0KSB7XG4gICAgcmVzdWx0Lm93bmVyID0gY29udGV4dC5yZXBvLm93bmVyO1xuICAgIHJlc3VsdC5yZXBvID0gY29udGV4dC5yZXBvLnJlcG87XG5cbiAgICBsb2cuaW5mbyhcbiAgICAgIGByZXBvc2l0b3J5RmluZGVyIHVzaW5nIEdJVEhVQl9SRVBPU0lUT1JZICR7XG4gICAgICAgIHByb2Nlc3MuZW52LkdJVEhVQl9SRVBPU0lUT1JZXG4gICAgICB9IGFuZCByZXR1cm5zICR7SlNPTi5zdHJpbmdpZnkocmVzdWx0KX1gLFxuICAgICk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuSU5QVVRfT1dORVIgJiYgcHJvY2Vzcy5lbnYuSU5QVVRfUkVQTykge1xuICAgIHJlc3VsdC5vd25lciA9IHByb2Nlc3MuZW52LklOUFVUX09XTkVSO1xuICAgIHJlc3VsdC5yZXBvID0gcHJvY2Vzcy5lbnYuSU5QVVRfUkVQTztcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIHRyeSB7XG4gICAgY29uc3QgZmlsZUNvbnRlbnQgPSBmcy5yZWFkRmlsZVN5bmMoJy5naXQvY29uZmlnJywgJ3V0ZjgnKTtcbiAgICBjb25zdCBwYXR0ZXJuID0gL3VybCggKT89KCApPy4qZ2l0aHViXFwuY29tWy86XSg/PG93bmVyPi4qKVxcLyg/PHJlcG8+LiopXFwuZ2l0LztcblxuICAgIGludGVyZmFjZSBPd25lclJlcG9JbnRlcmZhY2UgZXh0ZW5kcyBSZWdFeHBFeGVjQXJyYXkge1xuICAgICAgZ3JvdXBzPzoge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBzdHJpbmc7XG4gICAgICAgIG93bmVyOiBzdHJpbmc7XG4gICAgICAgIHJlcG86IHN0cmluZztcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgcmVzdWx0cyA9IGZpbGVDb250ZW50Lm1hdGNoKHBhdHRlcm4pIGFzIE93bmVyUmVwb0ludGVyZmFjZTtcbiAgICBpZiAocmVzdWx0cyAhPT0gbnVsbCkge1xuICAgICAgbG9nLmRlYnVnKEpTT04uc3RyaW5naWZ5KHJlc3VsdHMuZ3JvdXBzKSk7XG4gICAgICByZXN1bHQub3duZXIgPSByZXN1bHRzLmdyb3Vwcz8ub3duZXIgPz8gJyc7XG4gICAgICByZXN1bHQucmVwbyA9IHJlc3VsdHMuZ3JvdXBzPy5yZXBvID8/ICcnO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIC8vIGNhbid0IGZpbmQgaXRcbiAgICBsb2cuZGVidWcoYENvdWxkbid0IGZpbmQgYW55IG93bmVyIG9yIHJlcG86ICR7ZXJyb3J9YCk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdpdF9kZWZhdWx0X2JyYW5jaCgpOiBzdHJpbmcge1xuICAvLyBnaXQgc3ltYm9saWMtcmVmIHJlZnMvcmVtb3Rlcy9vcmlnaW4vSEVBRCB8IHNlZCAnc0BecmVmcy9yZW1vdGVzL29yaWdpbi9AQCdcbiAgcmV0dXJuICcnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29sdW1uSGVhZGVyKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGNvbnN0IG5vcm1hbGlzZWRIZWFkZXIgPSB0aXRsZWNhc2UoXG4gICAgdmFsdWVcbiAgICAgIC50cmltKClcbiAgICAgIC5yZXBsYWNlKC9eWypffl0rLywgJycpXG4gICAgICAucmVwbGFjZSgvWypffl0rJC8sICcnKSxcbiAgKTtcbiAgaWYgKG5vcm1hbGlzZWRIZWFkZXIpIHtcbiAgICByZXR1cm4gYCoqJHtub3JtYWxpc2VkSGVhZGVyfSoqYDtcbiAgfVxuICByZXR1cm4gJyc7XG59XG5leHBvcnQgZnVuY3Rpb24gcm93SGVhZGVyKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIXZhbHVlKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIGNvbnN0IG5vcm1hbGlzZWRIZWFkZXIgPSB2YWx1ZS50cmltKCkucmVwbGFjZSgvXlxcKisvLCAnJykucmVwbGFjZSgvXFwqKyQvLCAnJyk7XG4gIHJldHVybiBgXFxgKioke25vcm1hbGlzZWRIZWFkZXJ9KipcXGBgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudFZlcnNpb25TdHJpbmcoaW5wdXRzOiBJbnB1dHMpOiBzdHJpbmcge1xuICBsZXQgdmVyc2lvblN0cmluZyA9ICcnO1xuICBjb25zdCBsb2cgPSBuZXcgTG9nVGFzaygnZ2V0Q3VycmVudFZlcnNpb25TdHJpbmcnKTtcbiAgaWYgKGlucHV0cy5jb25maWcuZ2V0KCd2ZXJzaW9uaW5nOmVuYWJsZWQnKSkge1xuICAgIGxvZy5kZWJ1ZygndmVyc2lvbiBzdHJpbmcgaW4gZ2VuZXJhdGVkIGV4YW1wbGUgaXMgZW5hYmxlZCcpO1xuICAgIGNvbnN0IG9SaWRlID0gaW5wdXRzLmNvbmZpZy5nZXQoJ3ZlcnNpb25pbmc6b3ZlcnJpZGUnKSBhcyBzdHJpbmc7XG4gICAgbGV0IHBhY2thZ2VWZXJzaW9uID0gcHJvY2Vzcy5lbnYubnBtX3BhY2thZ2VfdmVyc2lvbjtcbiAgICBsb2cuZGVidWcoYHZlcnNpb24gc3RyaW5nIGluIGVudjpucG1fcGFja2FnZV92ZXJzaW9uIGlzICR7cGFja2FnZVZlcnNpb24gPz8gJ25vdCBmb3VuZCd9YCk7XG4gICAgaWYgKCFwYWNrYWdlVmVyc2lvbikge1xuICAgICAgbG9nLmRlYnVnKCd2ZXJzaW9uIHN0cmluZyBpbiBlbnY6bnBtX3BhY2thZ2VfdmVyc2lvbiBpcyBub3QgZm91bmQsIHRyeWluZyB0byB1c2UgZ2l0Jyk7XG4gICAgICB0cnkge1xuICAgICAgICBmcy5hY2Nlc3NTeW5jKCdwYWNrYWdlLmpzb24nKTtcbiAgICAgICAgY29uc3QgcGFja2FnZURhdGE6IFBhcnRpYWw8UGFja2FnZUpzb24+ID0gSlNPTi5wYXJzZShcbiAgICAgICAgICBmcy5yZWFkRmlsZVN5bmMoJ3BhY2thZ2UuanNvbicsICd1dGY4JyksXG4gICAgICAgICk7XG4gICAgICAgIHBhY2thZ2VWZXJzaW9uID0gcGFja2FnZURhdGEudmVyc2lvbjtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGxvZy5kZWJ1ZyhgcGFja2FnZS5qc29uIG5vdCBmb3VuZC4gJHtlcnJvcn1gKTtcbiAgICAgIH1cbiAgICAgIGxvZy5kZWJ1ZyhgdmVyc2lvbiBzdHJpbmcgaW4gcGFja2FnZS5qc29uOnZlcnNpb24gaXMgJHtwYWNrYWdlVmVyc2lvbiA/PyAnbm90IGZvdW5kJ31gKTtcbiAgICB9XG5cbiAgICB2ZXJzaW9uU3RyaW5nID0gb1JpZGUgJiYgb1JpZGUubGVuZ3RoID4gMCA/IG9SaWRlIDogcGFja2FnZVZlcnNpb24gPz8gJzAuMC4wJztcblxuICAgIGlmIChcbiAgICAgIHZlcnNpb25TdHJpbmcgJiZcbiAgICAgICF2ZXJzaW9uU3RyaW5nLnN0YXJ0c1dpdGgoaW5wdXRzLmNvbmZpZy5nZXQoJ3ZlcnNpb25pbmc6cHJlZml4JykgYXMgc3RyaW5nKVxuICAgICkge1xuICAgICAgdmVyc2lvblN0cmluZyA9IGAke2lucHV0cy5jb25maWcuZ2V0KCd2ZXJzaW9uaW5nOnByZWZpeCcpIGFzIHN0cmluZ30ke3ZlcnNpb25TdHJpbmd9YDtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmVyc2lvblN0cmluZyA9IGlucHV0cy5jb25maWcuZ2V0KCd2ZXJzaW9uaW5nOmJyYW5jaCcpIGFzIHN0cmluZztcbiAgfVxuICBsb2cuZGVidWcoYHZlcnNpb24gdG8gdXNlIGluIGdlbmVyYXRlZCBleGFtcGxlIGlzICR7dmVyc2lvblN0cmluZ31gKTtcbiAgcmV0dXJuIHZlcnNpb25TdHJpbmc7XG59XG4iLCAiaW1wb3J0ICogYXMgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBFT0wgfSBmcm9tICdub2RlOm9zJztcblxuaW1wb3J0IExvZ1Rhc2sgZnJvbSAnLi9sb2d0YXNrJztcbmltcG9ydCB7IGZvcm1hdE1hcmtkb3duIH0gZnJvbSAnLi9wcmV0dGllcic7XG5cbmV4cG9ydCBjb25zdCBzdGFydFRva2VuRm9ybWF0ID0gJzwhLS0gc3RhcnQgJXMgLS0+JztcbmV4cG9ydCBjb25zdCBlbmRUb2tlbkZvcm1hdCA9ICc8IS0tIGVuZCAlcyAtLT4nO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZWFkbWVFZGl0b3Ige1xuICBwcml2YXRlIHJlYWRvbmx5IGZpbGVQYXRoOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSBmaWxlQ29udGVudDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKGZpbGVQYXRoOiBzdHJpbmcpIHtcbiAgICB0aGlzLmZpbGVQYXRoID0gZmlsZVBhdGg7XG4gICAgdGhpcy5maWxlQ29udGVudCA9IGZzLnJlYWRGaWxlU3luYyhmaWxlUGF0aCwgJ3V0ZjgnKTtcbiAgfVxuXG4gIHVwZGF0ZVNlY3Rpb24obmFtZTogc3RyaW5nLCBwcm92aWRlZENvbnRlbnQ6IHN0cmluZyB8IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgY29uc3QgbG9nID0gbmV3IExvZ1Rhc2sobmFtZSk7XG4gICAgY29uc3QgY29udGVudCA9IEFycmF5LmlzQXJyYXkocHJvdmlkZWRDb250ZW50KSA/IHByb3ZpZGVkQ29udGVudC5qb2luKEVPTCkgOiBwcm92aWRlZENvbnRlbnQ7XG4gICAgbG9nLmluZm8oYExvb2tpbmcgZm9yIHRoZSAke25hbWV9IHRva2VuIGluICR7dGhpcy5maWxlUGF0aH1gKTtcbiAgICBjb25zdCBzdGFydFRva2VuID0gc3RhcnRUb2tlbkZvcm1hdC5yZXBsYWNlKCclcycsIG5hbWUpO1xuICAgIGNvbnN0IHN0b3BUb2tlbiA9IGVuZFRva2VuRm9ybWF0LnJlcGxhY2UoJyVzJywgbmFtZSk7XG5cbiAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy5maWxlQ29udGVudC5pbmRleE9mKHN0YXJ0VG9rZW4pO1xuICAgIGNvbnN0IHN0b3BJbmRleCA9IHRoaXMuZmlsZUNvbnRlbnQuaW5kZXhPZihzdG9wVG9rZW4pO1xuXG4gICAgaWYgKHN0YXJ0SW5kZXggIT09IC0xICYmIHN0b3BJbmRleCAhPT0gLTEpIHtcbiAgICAgIGNvbnN0IGJlZm9yZUNvbnRlbnQgPSB0aGlzLmZpbGVDb250ZW50LnNsaWNlKDAsIE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggKyBzdGFydFRva2VuLmxlbmd0aCkpO1xuICAgICAgY29uc3QgYWZ0ZXJDb250ZW50ID0gdGhpcy5maWxlQ29udGVudC5zbGljZShzdG9wSW5kZXgpO1xuXG4gICAgICB0aGlzLmZpbGVDb250ZW50ID0gYmVmb3JlQ29udGVudCArIGNvbnRlbnQgKyBhZnRlckNvbnRlbnQ7XG4gICAgfSBlbHNlIGlmIChzdG9wSW5kZXggPCBzdGFydEluZGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFN0YXJ0IHRva2VuIGZvciBzZWN0aW9uICcke25hbWV9IG11c3QgYXBwZWFyIGJlZm9yZSBlbmQgdG9rZW5gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBkdW1wVG9GaWxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmb3JtYXRNYXJrZG93bih0aGlzLmZpbGVDb250ZW50KTtcbiAgICByZXR1cm4gZnMud3JpdGVGaWxlU3luYyh0aGlzLmZpbGVQYXRoLCBjb250ZW50LCAndXRmOCcpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAncHJldHRpZXInO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZm9ybWF0WWFtbCh2YWx1ZTogc3RyaW5nLCBmaWxlcGF0aD86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGZwID0gZmlsZXBhdGggPyB7IGZpbGVwYXRoIH0gOiB7fTtcbiAgcmV0dXJuIGZvcm1hdCh2YWx1ZSwge1xuICAgIHNlbWk6IGZhbHNlLFxuICAgIHBhcnNlcjogJ3lhbWwnLFxuICAgIGVtYmVkZGVkTGFuZ3VhZ2VGb3JtYXR0aW5nOiAnYXV0bycsXG4gICAgLi4uZnAsXG4gIH0pO1xufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZvcm1hdE1hcmtkb3duKHZhbHVlOiBzdHJpbmcsIGZpbGVwYXRoPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZnAgPSBmaWxlcGF0aCA/IHsgZmlsZXBhdGggfSA6IHt9O1xuICByZXR1cm4gZm9ybWF0KHZhbHVlLCB7XG4gICAgc2VtaTogZmFsc2UsXG4gICAgcGFyc2VyOiAnbWFya2Rvd24nLFxuICAgIGVtYmVkZGVkTGFuZ3VhZ2VGb3JtYXR0aW5nOiAnYXV0bycsXG4gICAgLi4uZnAsXG4gIH0pO1xufVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyYXBEZXNjcmlwdGlvbihcbiAgdmFsdWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgY29udGVudDogc3RyaW5nW10sXG4gIHByZWZpeDogc3RyaW5nLFxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBpZiAoIXZhbHVlKSByZXR1cm4gY29udGVudCA/PyBbXTtcbiAgY29uc3QgdmFsdWVXaXRob3V0UHJlZml4ID0gcHJlZml4ID8gdmFsdWUucmVwbGFjZShwcmVmaXgsICcnKSA6IHZhbHVlO1xuICBjb25zdCBmb3JtYXR0ZWRTdHJpbmcgPSBhd2FpdCBmb3JtYXQoYCR7cHJlZml4ID8/ICcnfSR7dmFsdWVXaXRob3V0UHJlZml4fWAsIHtcbiAgICBzZW1pOiBmYWxzZSxcbiAgICBwYXJzZXI6ICd5YW1sJyxcbiAgICBwcm9zZVdyYXA6ICdhbHdheXMnLFxuICB9KTtcbiAgY29udGVudC5wdXNoKC4uLmZvcm1hdHRlZFN0cmluZy5zcGxpdCgnXFxuJykpO1xuICByZXR1cm4gY29udGVudDtcbn1cbiIsICJleHBvcnQgZnVuY3Rpb24gd29ya2luZ0RpcmVjdG9yeSgpOiBzdHJpbmcge1xuICByZXR1cm4gcHJvY2Vzcy5lbnYuR0lUSFVCX1dPUktTUEFDRSA/PyBwcm9jZXNzLmVudi5JTklUX0NXRCA/PyBwcm9jZXNzLmN3ZCgpO1xufVxuZXhwb3J0IGRlZmF1bHQgd29ya2luZ0RpcmVjdG9yeTtcbiIsICJpbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuXG5pbXBvcnQgdHlwZSBJbnB1dHMgZnJvbSAnLi9pbnB1dHMnO1xuaW1wb3J0IExvZ1Rhc2sgZnJvbSAnLi9sb2d0YXNrJztcblxuZXhwb3J0IGludGVyZmFjZSBWZXJzaW9uaW5nIHtcbiAgZW5hYmxlZD86IGJvb2xlYW47XG4gIHByZWZpeD86IHN0cmluZztcbiAgb3ZlcnJpZGU/OiBzdHJpbmc7XG4gIGJyYW5jaD86IHN0cmluZztcbn1cbmV4cG9ydCBpbnRlcmZhY2UgUGF0aHMge1xuICBhY3Rpb246IHN0cmluZztcbiAgcmVhZG1lOiBzdHJpbmc7XG59XG5leHBvcnQgY2xhc3MgR0hBY3Rpb25Eb2NzQ29uZmlnIHtcbiAgb3duZXI/OiBzdHJpbmc7XG5cbiAgcmVwbz86IHN0cmluZztcblxuICB0aXRsZV9wcmVmaXg/OiBzdHJpbmc7XG5cbiAgdGl0bGU/OiBzdHJpbmc7XG5cbiAgcGF0aHM/OiBQYXRocztcblxuICBzaG93X2xvZ28/OiBib29sZWFuO1xuXG4gIHZlcnNpb25pbmc/OiBWZXJzaW9uaW5nO1xuXG4gIHJlYWRtZVBhdGg/OiBzdHJpbmc7XG5cbiAgb3V0cGF0aD86IHN0cmluZztcblxuICBwcmV0dHk/OiBib29sZWFuO1xuXG4gIGxvYWRJbnB1dHMoaW5wdXRzOiBJbnB1dHMpOiB2b2lkIHtcbiAgICB0aGlzLm93bmVyID0gaW5wdXRzLmNvbmZpZy5nZXQoJ293bmVyJykgYXMgc3RyaW5nO1xuICAgIHRoaXMucmVwbyA9IGlucHV0cy5jb25maWcuZ2V0KCdyZXBvJykgYXMgc3RyaW5nO1xuICAgIHRoaXMudGl0bGVfcHJlZml4ID0gaW5wdXRzLmNvbmZpZy5nZXQoJ3RpdGxlX3ByZWZpeCcpIGFzIHN0cmluZztcbiAgICB0aGlzLnRpdGxlID0gaW5wdXRzLmNvbmZpZy5nZXQoJ3RpdGxlJykgYXMgc3RyaW5nO1xuICAgIHRoaXMucGF0aHMgPSBpbnB1dHMuY29uZmlnLmdldCgncGF0aHMnKSBhcyBQYXRocztcbiAgICB0aGlzLnNob3dfbG9nbyA9IGlucHV0cy5jb25maWcuZ2V0KCdzaG93X2xvZ28nKSBhcyBib29sZWFuO1xuICAgIHRoaXMudmVyc2lvbmluZyA9IHtcbiAgICAgIGVuYWJsZWQ6IGlucHV0cy5jb25maWcuZ2V0KCd2ZXJzaW9uaW5nOmVuYWJsZWQnKSBhcyBib29sZWFuLFxuICAgICAgcHJlZml4OiBpbnB1dHMuY29uZmlnLmdldCgndmVyc2lvbmluZzpwcmVmaXgnKSBhcyBzdHJpbmcsXG4gICAgICBvdmVycmlkZTogaW5wdXRzLmNvbmZpZy5nZXQoJ3ZlcnNpb25pbmc6b3ZlcnJpZGUnKSBhcyBzdHJpbmcsXG4gICAgICBicmFuY2g6IGlucHV0cy5jb25maWcuZ2V0KCd2ZXJzaW9uaW5nOmJyYW5jaCcpIGFzIHN0cmluZyxcbiAgICB9O1xuICAgIHRoaXMub3V0cGF0aCA9IGlucHV0cy5jb25maWcuZ2V0KCdvdXRwYXRoJykgYXMgc3RyaW5nO1xuICAgIHRoaXMucHJldHR5ID0gaW5wdXRzLmNvbmZpZy5nZXQoJ3ByZXR0eScpIGFzIGJvb2xlYW47XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZ1BhdGgge3N0cmluZ31cbiAgICogQGRlc2NyaXB0aW9uIFNhdmVzIHRoZSBjb25maWcgdG8gYSBmaWxlLGlmIHRoZSBmaWxlIGV4aXN0cyBpdCB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuICAgKi9cbiAgc2F2ZShjb25maWdQYXRoOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBsb2cgPSBuZXcgTG9nVGFzaygnY29uZmlnOnNhdmUnKTtcbiAgICAvLyB2YWxpZGF0ZSB0aGF0IHRoYXQgdGhlIGRpcmVjdG9yeSBleGlzdHNcbiAgICBjb25zdCBkaXJlY3RvcnkgPSBwYXRoLmRpcm5hbWUoY29uZmlnUGF0aCk7XG4gICAgLy8gbWFrZSB0aGUgZGlyZWN0b3J5IGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICBmcy5ta2RpcihkaXJlY3RvcnksIHsgcmVjdXJzaXZlOiB0cnVlIH0sIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgbG9nLmVycm9yKGBFcnJvciBjcmVhdGluZyBkaXJlY3Rvcnk6ICR7ZGlyZWN0b3J5fS4gRXJyb3I6ICR7ZXJyfWApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBmcy53cml0ZUZpbGUoY29uZmlnUGF0aCwgSlNPTi5zdHJpbmdpZnkodGhpcywgbnVsbCwgMiksIChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgbG9nLmVycm9yKGBFcnJvciB3cml0aW5nIGNvbmZpZyBmaWxlOiAke2NvbmZpZ1BhdGh9LiBFcnJvcjogJHtlcnJ9YCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBsb2cuaW5mbyhgQ29uZmlnIGZpbGUgd3JpdHRlbiB0bzogJHtjb25maWdQYXRofWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgR0hBY3Rpb25Eb2NzQ29uZmlnIH0gZnJvbSAnLi9jb25maWcnO1xuaW1wb3J0IElucHV0cyBmcm9tICcuL2lucHV0cyc7XG5cbi8vIFRoaXMgc2NyaXB0IHJlYnVpbGRzIHRoZSB1c2FnZSBzZWN0aW9uIGluIHRoZSBSRUFETUUubWQgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBhY3Rpb24ueW1sXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzYXZlKGlucHV0czogSW5wdXRzKTogdm9pZCB7XG4gIGNvbnN0IGRvY3NDb25maWcgPSBuZXcgR0hBY3Rpb25Eb2NzQ29uZmlnKCk7XG4gIGRvY3NDb25maWcubG9hZElucHV0cyhpbnB1dHMpO1xuICBpZiAoaW5wdXRzLmNvbmZpZy5nZXQoJ3NhdmUnKS50b1N0cmluZygpID09PSAndHJ1ZScpIHtcbiAgICBkb2NzQ29uZmlnLnNhdmUoaW5wdXRzLmNvbmZpZ1BhdGgpO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgeyBSZXBvIH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgdHlwZSBJbnB1dHMgZnJvbSAnLi4vaW5wdXRzJztcbmltcG9ydCBMb2dUYXNrIGZyb20gJy4uL2xvZ3Rhc2snO1xuXG5leHBvcnQgaW50ZXJmYWNlIElCYWRnZSB7XG4gIGFsdDogc3RyaW5nO1xuICBpbWc6IHN0cmluZztcbiAgdXJsPzogc3RyaW5nO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXBkYXRlQmFkZ2VzKHRva2VuOiBzdHJpbmcsIGlucHV0czogSW5wdXRzKTogdm9pZCB7XG4gIGNvbnN0IGxvZyA9IG5ldyBMb2dUYXNrKHRva2VuKTtcbiAgY29uc3QgZW5hYmxlVmVyc2lvbmluZyA9IGlucHV0cy5jb25maWcuZ2V0KCd2ZXJzaW9uaW5nOmJhZGdlcycpO1xuICBjb25zdCBiYWRnZXM6IElCYWRnZVtdID0gW107XG4gIGNvbnN0IHJlcG9zOiBSZXBvID0ge1xuICAgIG93bmVyOiBpbnB1dHMuY29uZmlnLmdldCgnb3duZXInKSxcbiAgICByZXBvOiBpbnB1dHMuY29uZmlnLmdldCgncmVwbycpLFxuICB9O1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBnaXRodWIgYmFkZ2VzLlxuICAgKiBAcGFyYW0gZ2l0aHViSWRcbiAgICovXG4gIGZ1bmN0aW9uIGdpdGh1YkJhZGdlcygpOiBJQmFkZ2VbXSB7XG4gICAgY29uc3QgcmVwb1VybCA9IGBodHRwczovL2dpdGh1Yi5jb20vJHtyZXBvcy5vd25lcn0vJHtyZXBvcy5yZXBvfWA7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgaW1nOiBgaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvdi9yZWxlYXNlLyR7cmVwb3Mub3duZXJ9LyR7cmVwb3MucmVwb30/ZGlzcGxheV9uYW1lPXRhZyZzb3J0PXNlbXZlciZsb2dvPWdpdGh1YiZzdHlsZT1mbGF0LXNxdWFyZWAsXG4gICAgICAgIGFsdDogJ1JlbGVhc2UnLFxuICAgICAgICB1cmw6IGAke3JlcG9Vcmx9L3JlbGVhc2VzL2xhdGVzdGAsXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBpbWc6IGBodHRwczovL2ltZy5zaGllbGRzLmlvL2dpdGh1Yi9yZWxlYXNlLWRhdGUvJHtyZXBvcy5vd25lcn0vJHtyZXBvcy5yZXBvfT9kaXNwbGF5X25hbWU9dGFnJnNvcnQ9c2VtdmVyJmxvZ289Z2l0aHViJnN0eWxlPWZsYXQtc3F1YXJlYCxcbiAgICAgICAgYWx0OiAnUmVsZWFzZScsXG4gICAgICAgIHVybDogYCR7cmVwb1VybH0vcmVsZWFzZXMvbGF0ZXN0YCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGltZzogYGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL2xhc3QtY29tbWl0LyR7cmVwb3Mub3duZXJ9LyR7cmVwb3MucmVwb30/bG9nbz1naXRodWImc3R5bGU9ZmxhdC1zcXVhcmVgLFxuICAgICAgICBhbHQ6ICdDb21taXQnLFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgaW1nOiBgaHR0cHM6Ly9pbWcuc2hpZWxkcy5pby9naXRodWIvaXNzdWVzLyR7cmVwb3Mub3duZXJ9LyR7cmVwb3MucmVwb30/bG9nbz1naXRodWImc3R5bGU9ZmxhdC1zcXVhcmVgLFxuICAgICAgICBhbHQ6ICdPcGVuIElzc3VlcycsXG4gICAgICAgIHVybDogYCR7cmVwb1VybH0vaXNzdWVzYCxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGltZzogYGh0dHBzOi8vaW1nLnNoaWVsZHMuaW8vZ2l0aHViL2Rvd25sb2Fkcy8ke3JlcG9zLm93bmVyfS8ke3JlcG9zLnJlcG99L3RvdGFsP2xvZ289Z2l0aHViJnN0eWxlPWZsYXQtc3F1YXJlYCxcbiAgICAgICAgYWx0OiAnRG93bmxvYWRzJyxcbiAgICAgIH0sXG4gICAgXTtcbiAgfVxuICAvKipcbiAgICogR2VuZXJhdGVzIGEgYmFkZ2UuXG4gICAqL1xuICBmdW5jdGlvbiBnZW5lcmF0ZUJhZGdlKGl0ZW06IElCYWRnZSk6IHN0cmluZyB7XG4gICAgY29uc3QgYmFkZ2VUZW1wbGF0ZSA9IGA8aW1nIHNyYz1cIiR7aXRlbS5pbWd9XCIgYWx0PVwiJHtpdGVtLmFsdCB8fCAnJ31cIiAvPmA7XG4gICAgaWYgKGl0ZW0udXJsKSB7XG4gICAgICByZXR1cm4gYDxhIGhyZWY9XCIke2l0ZW0udXJsfVwiPiR7YmFkZ2VUZW1wbGF0ZX08L2E+YDtcbiAgICB9XG4gICAgcmV0dXJuIGJhZGdlVGVtcGxhdGU7XG4gIH1cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhbGwgYmFkZ2VzLlxuICAgKi9cbiAgZnVuY3Rpb24gZ2VuZXJhdGVCYWRnZXMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGJhZGdlQXJyYXkgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGIgb2YgYmFkZ2VzKSB7XG4gICAgICBiYWRnZUFycmF5LnB1c2goZ2VuZXJhdGVCYWRnZShiKSk7XG4gICAgfVxuICAgIHJldHVybiBbYmFkZ2VBcnJheS5qb2luKCcnKV07XG4gIH1cblxuICBsb2cuc3RhcnQoKTtcblxuICAvLyBBZGQgR2l0aHViIGJhZGdlc1xuICBpZiAoZW5hYmxlVmVyc2lvbmluZykge1xuICAgIGJhZGdlcy5wdXNoKC4uLmdpdGh1YkJhZGdlcygpKTtcbiAgfVxuICBjb25zdCBjb250ZW50ID0gZ2VuZXJhdGVCYWRnZXMoKTtcbiAgaW5wdXRzLnJlYWRtZUVkaXRvci51cGRhdGVTZWN0aW9uKHRva2VuLCBjb250ZW50KTtcblxuICBsb2cuc3VjY2VzcygpO1xufVxuIiwgImltcG9ydCB0eXBlIElucHV0cyBmcm9tICcuLi9pbnB1dHMnO1xuaW1wb3J0IExvZ1Rhc2sgZnJvbSAnLi4vbG9ndGFzayc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVwZGF0ZURlc2NyaXB0aW9uKHRva2VuOiBzdHJpbmcsIGlucHV0czogSW5wdXRzKTogdm9pZCB7XG4gIGNvbnN0IGxvZyA9IG5ldyBMb2dUYXNrKHRva2VuKTtcbiAgLy8gQnVpbGQgdGhlIG5ldyBSRUFETUVcbiAgY29uc3QgY29udGVudDogc3RyaW5nW10gPSBbXTtcbiAgLy8gQnVpbGQgdGhlIG5ldyBkZXNjcmlwdGlvbiBzZWN0aW9uXG4gIGlmIChpbnB1dHM/LmFjdGlvbj8uZGVzY3JpcHRpb24pIHtcbiAgICBsb2cuc3RhcnQoKTtcbiAgICBjb25zdCBkZXNjOiBzdHJpbmcgPSBpbnB1dHMuYWN0aW9uLmRlc2NyaXB0aW9uXG4gICAgICAudHJpbSgpXG4gICAgICAucmVwbGFjZUFsbCgnXFxyXFxuJywgJ1xcbicpIC8vIENvbnZlcnQgQ1IgdG8gTEZcbiAgICAgIC5yZXBsYWNlQWxsKC8gKy9nLCAnICcpIC8vICAgIFNxdWFzaCBjb25zZWN1dGl2ZSBzcGFjZXNcbiAgICAgIC5yZXBsYWNlQWxsKCcgXFxuJywgJ1xcbicpIC8vICBTcXVhc2ggc3BhY2UgZm9sbG93ZWQgYnkgbmV3bGluZVxuICAgICAgLnJlcGxhY2VBbGwoJ1xcblxcbicsICc8YnIgLz4nKTsgLy8gY29udmVydCBkb3VibGUgcmV0dXJuIHRvIGEgYnJlYWtcblxuICAgIGxvZy5pbmZvKGBXcml0aW5nICR7ZGVzYy5sZW5ndGh9IGNoYXJhY3RlcnMgdG8gdGhlIGRlc2NyaXB0aW9uIHNlY3Rpb25gKTtcbiAgICBjb250ZW50LnB1c2goZGVzYyk7XG4gICAgaW5wdXRzLnJlYWRtZUVkaXRvci51cGRhdGVTZWN0aW9uKHRva2VuLCBjb250ZW50KTtcbiAgICBsb2cuc3VjY2VzcygpO1xuICB9XG59XG4iLCAiZXhwb3J0IHR5cGUgTWFya2Rvd25BcnJheVJvd1R5cGUgPSBzdHJpbmdbXVtdO1xuZXhwb3J0IHR5cGUgTWFya2Rvd25BcnJheUl0ZW1UeXBlID0gc3RyaW5nO1xuLyoqXG4gKiBGaWxscyB0aGUgd2lkdGggb2YgdGhlIGNlbGwuXG4gKiBAcGFyYW0gdGV4dFxuICogQHBhcmFtIHdpZHRoXG4gKiBAcGFyYW0gcGFkZGluZ1N0YXJ0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWxsV2lkdGgodGV4dDogc3RyaW5nLCB3aWR0aDogbnVtYmVyLCBwYWRkaW5nU3RhcnQ6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiAoXG4gICAgJyAnLnJlcGVhdChwYWRkaW5nU3RhcnQpICsgdGV4dCArICcgJy5yZXBlYXQoTWF0aC5tYXgoMSwgd2lkdGggLSB0ZXh0Lmxlbmd0aCAtIHBhZGRpbmdTdGFydCkpXG4gICk7XG59XG4vKipcbiAqIEVzY2FwZSBhIHRleHQgc28gaXQgY2FuIGJlIHVzZWQgaW4gYSBtYXJrZG93biB0YWJsZVxuICogQHBhcmFtIHRleHRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcmtkb3duRXNjYXBlVGFibGVDZWxsKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoJ1xcbicsICc8YnIgLz4nKS5yZXBsYWNlQWxsKCd8JywgJ1xcXFx8Jyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXJrZG93bkVzY2FwZUlubGluZUNvZGUoY29udGVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgLy8gcmVwbGFjZSBncmF2ZSBhY2NlbnRzIHdpdGggPGNvZGU+IEhUTUwgZWxlbWVudCB0byByZXNvbHZlIHVuaWNvZGUgY2hhcmFjdGVyIGluIG1hcmtkb3duXG4gIC8vIGxldCBpc0Nsb3NpbmdUYWcgPSBmYWxzZTtcbiAgaWYgKGNvbnRlbnQuaW5jbHVkZXMoJ3wnKSkge1xuICAgIHJldHVybiBjb250ZW50LnJlcGxhY2VBbGwoLyhbXFxzKl9dfF4pYChbXmBdKylgKFtcXHMqX118JCkvZywgJyQxPGNvZGU+JDI8L2NvZGU+JDMnKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcblxuICAvLyA/LmZvckVhY2goKG1hdGNoKSA9PiB7XG4gIC8vICAgaWYgKCFpc0Nsb3NpbmdUYWcpIHtcbiAgLy8gICAgIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UobWF0Y2gsICc8Y29kZT4nKTtcbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZShtYXRjaCwgJzwvY29kZT4nKTtcbiAgLy8gICB9XG4gIC8vICAgaXNDbG9zaW5nVGFnID0gIWlzQ2xvc2luZ1RhZztcbiAgLy8gfSk7XG4gIC8vIHJldHVybiBjb250ZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBBcnJheU9mQXJyYXlzVG9NYXJrZG93blRhYmxlKHByb3ZpZGVkVGFibGVDb250ZW50OiBNYXJrZG93bkFycmF5Um93VHlwZSk6IHN0cmluZyB7XG4gIGNvbnN0IHRhYmxlQ29udGVudDogTWFya2Rvd25BcnJheVJvd1R5cGUgPSBbXTtcbiAgY29uc3Qgb3V0cHV0U3RyaW5nczogc3RyaW5nW10gPSBbXTtcbiAgLy8gQ2xvbmUgdGhlIGFycmF5cyBzbyB3ZSBkb24ndCBtb2RpZnkgdGhlIG9yaWdpbmFsXG4gIGZvciAoY29uc3Qgcm93QSBvZiBwcm92aWRlZFRhYmxlQ29udGVudCkge1xuICAgIHRhYmxlQ29udGVudC5wdXNoKFsuLi5yb3dBXSBhcyBzdHJpbmdbXSk7XG4gIH1cbiAgY29uc3QgbWF4Um93cyA9IHRhYmxlQ29udGVudC5sZW5ndGg7XG4gIGxldCBtYXhDb2xzID0gMDtcbiAgbGV0IG1pbkNvbHMgPSAwO1xuICAvLyBGaW5kIHRoZSBtYXggYW5kIG1pbiBjb2x1bW5zIHNvIHdlIGNhbiBwYWQgdGhlIHJvd3NcbiAgLy8gZm9yIChjb25zdCBbaSwgZV0gb2YgdGFibGVDb250ZW50LmVudHJpZXMoKSkge1xuICBsZXQgdGJsSWR4ID0gMDtcbiAgZm9yIChjb25zdCBlIG9mIHRhYmxlQ29udGVudCkge1xuICAgIGlmICh0YWJsZUNvbnRlbnRbdGJsSWR4XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25zdCBudW1Db2xzID0gZS5sZW5ndGg7XG4gICAgICBpZiAobnVtQ29scyA+IG1heENvbHMpIHtcbiAgICAgICAgbWF4Q29scyA9IG51bUNvbHM7XG4gICAgICB9XG4gICAgICBpZiAobnVtQ29scyA8IG1pbkNvbHMgfHwgbWluQ29scyA9PT0gMCkge1xuICAgICAgICBtaW5Db2xzID0gbnVtQ29scztcbiAgICAgIH1cbiAgICB9XG4gICAgdGJsSWR4ICs9IDE7XG4gIH1cbiAgaWYgKG1heENvbHMgIT09IG1pbkNvbHMpIHtcbiAgICBsZXQgY250SWR4ID0gMDtcbiAgICBmb3IgKGNvbnN0IGUgb2YgdGFibGVDb250ZW50KSB7XG4gICAgICBpZiAodGFibGVDb250ZW50W2NudElkeF0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0YWJsZUNvbnRlbnRbY250SWR4XSA9IEFycmF5LmZyb20oeyBsZW5ndGg6IG1heENvbHMgfSkuZmlsbCgnJykgYXMgc3RyaW5nW107XG4gICAgICB9IGVsc2UgaWYgKGUubGVuZ3RoIDwgbWF4Q29scykge1xuICAgICAgICB0YWJsZUNvbnRlbnRbY250SWR4XSA9IFtcbiAgICAgICAgICAuLi5lLFxuICAgICAgICAgIC4uLkFycmF5LmZyb20oeyBsZW5ndGg6IG1heENvbHMgLSBlLmxlbmd0aCB9KS5maWxsKCd1bmRlZmluZWQnKSxcbiAgICAgICAgXSBhcyBzdHJpbmdbXTtcbiAgICAgIH1cbiAgICAgIGNudElkeCArPSAxO1xuICAgIH1cbiAgfVxuICBjb25zdCBtYXJrZG93bkFycmF5Um93c0xlbmd0aCA9IG1heFJvd3MgKyAxO1xuICBjb25zdCBtYXJrZG93bkFycmF5RW50cmllc0xlbmd0aCA9IG1heENvbHMgKiAyICsgMTtcbiAgY29uc3QgbWFya2Rvd25BcnJheXM6IE1hcmtkb3duQXJyYXlSb3dUeXBlID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogbWFya2Rvd25BcnJheVJvd3NMZW5ndGggfSkuZmlsbChcbiAgICBBcnJheS5mcm9tKHsgbGVuZ3RoOiBtYXJrZG93bkFycmF5RW50cmllc0xlbmd0aCB9KS5maWxsKCd8JyBhcyBzdHJpbmcpIGFzIHN0cmluZ1tdLFxuICApIGFzIE1hcmtkb3duQXJyYXlSb3dUeXBlO1xuICBsZXQgaSA9IDA7XG4gIGZvciAoY29uc3Qgcm93IG9mIG1hcmtkb3duQXJyYXlzKSB7XG4gICAgbGV0IGNvbCA9IDA7XG5cbiAgICBjb25zdCBpZHggPSBpID4gMSA/IGkgLSAxIDogMDtcbiAgICBjb25zdCBkYXRhUm93ID0gdGFibGVDb250ZW50W2lkeF07XG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCByb3cubGVuZ3RoOyBqKyspIHtcbiAgICAgIGxldCBjb250ZW50ID0gbWFya2Rvd25Fc2NhcGVUYWJsZUNlbGwoZGF0YVJvd1tjb2xdID8/ICcnKTtcblxuICAgICAgY29udGVudCA9IG1hcmtkb3duRXNjYXBlSW5saW5lQ29kZShjb250ZW50KTtcblxuICAgICAgaWYgKGogJSAyID09PSAxKSB7XG4gICAgICAgIGlmIChpID09PSAwKSB7XG4gICAgICAgICAgbWFya2Rvd25BcnJheXNbaV1bal0gPSBgICoqJHtjb250ZW50LnRyaW0oKX0qKiBgO1xuICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDEpIHtcbiAgICAgICAgICBtYXJrZG93bkFycmF5c1tpXVtqXSA9ICctLS0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG1hcmtkb3duQXJyYXlzW2ldW2pdID0gYCAke2NvbnRlbnQudHJpbSgpfSBgO1xuICAgICAgICB9XG4gICAgICAgIGNvbCArPSAxO1xuICAgICAgfVxuICAgIH1cbiAgICBvdXRwdXRTdHJpbmdzLnB1c2goYCR7bWFya2Rvd25BcnJheXNbaV0uam9pbignJyl9XFxuYCk7XG4gICAgaSArPSAxO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dFN0cmluZ3Muam9pbignJyk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEFycmF5T2ZBcnJheXNUb01hcmtkb3duVGFibGU7XG4iLCAiaW1wb3J0IHsgY29sdW1uSGVhZGVyLCByb3dIZWFkZXIgfSBmcm9tICcuLi9oZWxwZXJzJztcbmltcG9ydCB0eXBlIElucHV0cyBmcm9tICcuLi9pbnB1dHMnO1xuaW1wb3J0IExvZ1Rhc2sgZnJvbSAnLi4vbG9ndGFzayc7XG5pbXBvcnQgbWFya2Rvd25lciBmcm9tICcuLi9tYXJrZG93bmVyJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXBkYXRlSW5wdXRzKHRva2VuOiBzdHJpbmcsIGlucHV0czogSW5wdXRzKTogdm9pZCB7XG4gIGNvbnN0IGxvZyA9IG5ldyBMb2dUYXNrKHRva2VuKTtcbiAgLy8gQnVpbGQgdGhlIG5ldyBSRUFETUVcbiAgY29uc3QgY29udGVudDogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgbWFya2Rvd25BcnJheTogc3RyaW5nW11bXSA9IFtdO1xuICBjb25zdCB0aXRsZUFycmF5ID0gWydJbnB1dCcsICdEZXNjcmlwdGlvbicsICdEZWZhdWx0JywgJ1JlcXVpcmVkJ107XG4gIGNvbnN0IHRpdGxlczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCB0IG9mIHRpdGxlQXJyYXkpIHtcbiAgICB0aXRsZXMucHVzaChjb2x1bW5IZWFkZXIodCkpO1xuICB9XG4gIG1hcmtkb3duQXJyYXkucHVzaCh0aXRsZXMpO1xuICBjb25zdCB2YXJzID0gaW5wdXRzLmFjdGlvbi5pbnB1dHM7XG4gIGNvbnN0IHRJID0gdmFycyA/IE9iamVjdC5rZXlzKHZhcnMpLmxlbmd0aCA6IDA7XG4gIGlmICh0SSA+IDApIHtcbiAgICBsb2cuc3RhcnQoKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh2YXJzKSkge1xuICAgICAgY29uc3QgdmFsdWVzID0gdmFyc1trZXldO1xuXG4gICAgICBsZXQgZGVzY3JpcHRpb24gPSB2YWx1ZXM/LmRlc2NyaXB0aW9uID8/ICcnO1xuXG4gICAgICAvLyBDaGVjayBpZiBvbmx5IGZpcnN0IGxpbmUgc2hvdWxkIGJlIGFkZGVkIChvbmx5IHN1YmplY3Qgd2l0aG91dCBib2R5KVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gICAgICBjb25zdCBtYXRjaGVzID0gZGVzY3JpcHRpb24ubWF0Y2goJyguKj8pXFxuXFxuKFtTc10qKScpO1xuICAgICAgaWYgKG1hdGNoZXMgJiYgbWF0Y2hlcy5sZW5ndGggPj0gMikge1xuICAgICAgICBkZXNjcmlwdGlvbiA9IG1hdGNoZXNbMV0gfHwgZGVzY3JpcHRpb247XG4gICAgICB9XG5cbiAgICAgIGRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24udHJpbSgpLnJlcGxhY2UoJ1xcbicsICc8YnIgLz4nKTtcblxuICAgICAgY29uc3Qgcm93OiBzdHJpbmdbXSA9IFtcbiAgICAgICAgcm93SGVhZGVyKGtleSksXG4gICAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgICB2YWx1ZXM/LmRlZmF1bHQgPyBgXFxgJHt2YWx1ZXMuZGVmYXVsdH1cXGBgIDogJycsXG4gICAgICAgIHZhbHVlcz8ucmVxdWlyZWQgPyAnKip0cnVlKionIDogJ19fZmFsc2VfXycsXG4gICAgICBdO1xuICAgICAgbG9nLmRlYnVnKEpTT04uc3RyaW5naWZ5KHJvdykpO1xuICAgICAgbWFya2Rvd25BcnJheS5wdXNoKHJvdyk7XG4gICAgfVxuICAgIGNvbnRlbnQucHVzaChtYXJrZG93bmVyKG1hcmtkb3duQXJyYXkpKTtcbiAgICBsb2cuaW5mbyhgQWN0aW9uIGhhcyAke3RJfSB0b3RhbCAke3Rva2VufWApO1xuICAgIGlucHV0cy5yZWFkbWVFZGl0b3IudXBkYXRlU2VjdGlvbih0b2tlbiwgY29udGVudCk7XG4gICAgbG9nLnN1Y2Nlc3MoKTtcbiAgfSBlbHNlIHtcbiAgICBsb2cuZGVidWcoYEFjdGlvbiBoYXMgbm8gJHt0b2tlbn1gKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGNvbHVtbkhlYWRlciwgcm93SGVhZGVyIH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgdHlwZSBJbnB1dHMgZnJvbSAnLi4vaW5wdXRzJztcbmltcG9ydCBMb2dUYXNrIGZyb20gJy4uL2xvZ3Rhc2snO1xuaW1wb3J0IG1hcmtkb3duZXIgZnJvbSAnLi4vbWFya2Rvd25lcic7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVwZGF0ZU91dHB1dHModG9rZW46IHN0cmluZywgaW5wdXRzOiBJbnB1dHMpOiB2b2lkIHtcbiAgY29uc3QgbG9nID0gbmV3IExvZ1Rhc2sodG9rZW4pO1xuXG4gIC8vIEJ1aWxkIHRoZSBuZXcgUkVBRE1FXG4gIGNvbnN0IGNvbnRlbnQ6IHN0cmluZ1tdID0gW107XG5cbiAgY29uc3QgbWFya2Rvd25BcnJheTogc3RyaW5nW11bXSA9IFtdO1xuICBjb25zdCB0aXRsZUFycmF5ID0gWydPdXRwdXQnLCAnRGVzY3JpcHRpb24nXTtcbiAgY29uc3QgdGl0bGVzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHQgb2YgdGl0bGVBcnJheSkge1xuICAgIHRpdGxlcy5wdXNoKGNvbHVtbkhlYWRlcih0KSk7XG4gIH1cbiAgbWFya2Rvd25BcnJheS5wdXNoKHRpdGxlcyk7XG4gIGNvbnN0IHZhcnMgPSBpbnB1dHMuYWN0aW9uLm91dHB1dHM7XG4gIGNvbnN0IHRJID0gdmFycyA/IE9iamVjdC5rZXlzKHZhcnMpLmxlbmd0aCA6IDA7XG4gIGlmICh0SSA+IDApIHtcbiAgICBsb2cuc3RhcnQoKTtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyh2YXJzKSkge1xuICAgICAgY29uc3QgdmFsdWVzID0gdmFyc1trZXldO1xuXG4gICAgICBsZXQgZGVzY3JpcHRpb24gPSB2YWx1ZXM/LmRlc2NyaXB0aW9uID8/ICcnO1xuXG4gICAgICAvLyBDaGVjayBpZiBvbmx5IGZpcnN0IGxpbmUgc2hvdWxkIGJlIGFkZGVkIChvbmx5IHN1YmplY3Qgd2l0aG91dCBib2R5KVxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG4gICAgICBjb25zdCBtYXRjaGVzID0gLyguKj8pXFxuXFxuKFtTc10qKS8uZXhlYyhkZXNjcmlwdGlvbik7XG4gICAgICBpZiAobWF0Y2hlcyAmJiBtYXRjaGVzLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgIGRlc2NyaXB0aW9uID0gbWF0Y2hlc1sxXSB8fCBkZXNjcmlwdGlvbjtcbiAgICAgIH1cblxuICAgICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbi50cmltKCkucmVwbGFjZSgnXFxuJywgJzxiciAvPicpO1xuICAgICAgY29uc3Qgcm93OiBzdHJpbmdbXSA9IFtyb3dIZWFkZXIoa2V5KSwgZGVzY3JpcHRpb25dO1xuXG4gICAgICBsb2cuZGVidWcoSlNPTi5zdHJpbmdpZnkocm93KSk7XG4gICAgICBtYXJrZG93bkFycmF5LnB1c2gocm93KTtcbiAgICB9XG4gICAgY29udGVudC5wdXNoKG1hcmtkb3duZXIobWFya2Rvd25BcnJheSkpO1xuICAgIGxvZy5pbmZvKGBBY3Rpb24gaGFzICR7dEl9IHRvdGFsICR7dG9rZW59YCk7XG4gICAgaW5wdXRzLnJlYWRtZUVkaXRvci51cGRhdGVTZWN0aW9uKHRva2VuLCBjb250ZW50KTtcbiAgICBsb2cuc3VjY2VzcygpO1xuICB9IGVsc2Uge1xuICAgIGxvZy5kZWJ1ZyhgQWN0aW9uIGhhcyBubyAke3Rva2VufWApO1xuICB9XG59XG4iLCAiaW1wb3J0IHR5cGUgSW5wdXRzIGZyb20gJy4uL2lucHV0cyc7XG5pbXBvcnQgTG9nVGFzayBmcm9tICcuLi9sb2d0YXNrJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXBkYXRlVGl0bGUodG9rZW46IHN0cmluZywgaW5wdXRzOiBJbnB1dHMpOiB2b2lkIHtcbiAgY29uc3QgbG9nID0gbmV3IExvZ1Rhc2sodG9rZW4pO1xuICAvLyBCdWlsZCB0aGUgbmV3IFJFQURNRVxuICBjb25zdCBjb250ZW50OiBzdHJpbmdbXSA9IFtdO1xuICBsZXQgbmFtZSA9ICcnO1xuICBpZiAoaW5wdXRzLmFjdGlvbi5uYW1lKSB7XG4gICAgbG9nLnN0YXJ0KCk7XG4gICAgbmFtZSA9IGlucHV0cy5hY3Rpb24ubmFtZTtcblxuICAgIGxvZy5pbmZvKGBXcml0aW5nICR7bmFtZS5sZW5ndGh9IGNoYXJhY3RlcnMgdG8gdGhlIHRpdGxlYCk7XG4gICAgY29uc3QgdGl0bGUgPSBgIyAke2lucHV0cy5jb25maWcuZ2V0KCd0aXRsZV9wcmVmaXgnKSBhcyBzdHJpbmd9JHtpbnB1dHMuYWN0aW9uLm5hbWV9YDtcbiAgICBsb2cuaW5mbyhgVGl0bGU6ICR7dGl0bGV9YCk7XG4gICAgLy8gQnVpbGQgdGhlIG5ldyB1c2FnZSBzZWN0aW9uXG4gICAgY29udGVudC5wdXNoKHRpdGxlKTtcblxuICAgIGlucHV0cy5yZWFkbWVFZGl0b3IudXBkYXRlU2VjdGlvbih0b2tlbiwgY29udGVudCk7XG4gICAgbG9nLnN1Y2Nlc3MoKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGdldEN1cnJlbnRWZXJzaW9uU3RyaW5nIH0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgdHlwZSBJbnB1dHMgZnJvbSAnLi4vaW5wdXRzJztcbmltcG9ydCBMb2dUYXNrIGZyb20gJy4uL2xvZ3Rhc2snO1xuaW1wb3J0IHsgd3JhcERlc2NyaXB0aW9uIH0gZnJvbSAnLi4vcHJldHRpZXInO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1cGRhdGVVc2FnZSh0b2tlbjogc3RyaW5nLCBpbnB1dHM6IElucHV0cyk6IHZvaWQge1xuICBjb25zdCBsb2cgPSBuZXcgTG9nVGFzayh0b2tlbik7XG4gIGxvZy5zdGFydCgpO1xuICBjb25zdCBhY3Rpb25OYW1lID0gYCR7aW5wdXRzLmNvbmZpZy5nZXQoJ293bmVyJykgYXMgc3RyaW5nfS8ke2lucHV0cy5jb25maWcuZ2V0KCdyZXBvJyl9YDtcbiAgbG9nLmluZm8oYEFjdGlvbiBuYW1lOiAke2FjdGlvbk5hbWV9YCk7XG4gIGNvbnN0IHZlcnNpb25TdHJpbmc6IHN0cmluZyA9IGdldEN1cnJlbnRWZXJzaW9uU3RyaW5nKGlucHV0cyk7XG5cbiAgbG9nLmluZm8oYFZlcnNpb24gc3RyaW5nOiAke3ZlcnNpb25TdHJpbmd9YCk7XG5cbiAgY29uc3QgYWN0aW9uUmVmZXJlbmNlID0gYCR7YWN0aW9uTmFtZX1AJHt2ZXJzaW9uU3RyaW5nfWA7XG5cbiAgaWYgKCFhY3Rpb25SZWZlcmVuY2UpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcmFtZXRlciBhY3Rpb25SZWZlcmVuY2UgbXVzdCBub3QgYmUgZW1wdHknKTtcbiAgfVxuXG4gIC8vIEJ1aWxkIHRoZSBuZXcgUkVBRE1FXG4gIGNvbnN0IGNvbnRlbnQ6IHN0cmluZ1tdID0gW107XG4gIC8vIEJ1aWxkIHRoZSBuZXcgdXNhZ2Ugc2VjdGlvblxuICBjb250ZW50LnB1c2goJ2BgYHlhbWwnLCBgLSB1c2VzOiAke2FjdGlvblJlZmVyZW5jZX1gLCAnICB3aXRoOicpO1xuXG4gIGNvbnN0IGlucCA9IGlucHV0cy5hY3Rpb24uaW5wdXRzO1xuICBsZXQgZmlyc3RJbnB1dCA9IHRydWU7XG4gIGlmIChpbnApIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhpbnApKSB7XG4gICAgICBjb25zdCBpbnB1dCA9IGlucFtrZXldO1xuICAgICAgaWYgKGlucHV0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gTGluZSBicmVhayBiZXR3ZWVuIGlucHV0c1xuICAgICAgICBpZiAoIWZpcnN0SW5wdXQpIHtcbiAgICAgICAgICBjb250ZW50LnB1c2goJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29uc3RyYWluIHRoZSB3aWR0aCBvZiB0aGUgZGVzY3JpcHRpb24sIGFuZCBhcHBlbmQgaXRcbiAgICAgICAgd3JhcERlc2NyaXB0aW9uKGlucHV0LmRlc2NyaXB0aW9uLCBjb250ZW50LCAnICAgICMgJyk7XG5cbiAgICAgICAgaWYgKGlucHV0LmRlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIEFwcGVuZCBibGFuayBsaW5lIGlmIGRlc2NyaXB0aW9uIGhhZCBwYXJhZ3JhcGhzXG4gICAgICAgICAgaWYgKGlucHV0LmRlc2NyaXB0aW9uPy50cmltRW5kKCkubWF0Y2goL1xcbiAqXFxyP1xcbi8pKSB7XG4gICAgICAgICAgICBjb250ZW50LnB1c2goJyAgICAjJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gRGVmYXVsdFxuICAgICAgICAgIGNvbnRlbnQucHVzaChgICAgICMgRGVmYXVsdDogJHtpbnB1dC5kZWZhdWx0fWApO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW5wdXQgbmFtZVxuICAgICAgICBjb250ZW50LnB1c2goYCAgICAke2tleX06ICcnYCk7XG5cbiAgICAgICAgZmlyc3RJbnB1dCA9IGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGNvbnRlbnQucHVzaCgnYGBgXFxuJyk7XG5cbiAgaW5wdXRzLnJlYWRtZUVkaXRvci51cGRhdGVTZWN0aW9uKHRva2VuLCBjb250ZW50KTtcbiAgbG9nLnN1Y2Nlc3MoKTtcbn1cbiIsICJpbXBvcnQgdHlwZSBJbnB1dHMgZnJvbSAnLi4vaW5wdXRzJztcbmltcG9ydCBMb2dUYXNrIGZyb20gJy4uL2xvZ3Rhc2snO1xuaW1wb3J0IHVwZGF0ZUJhZGdlcyBmcm9tICcuL3VwZGF0ZS1iYWRnZXMnO1xuaW1wb3J0IHVwZGF0ZURlc2NyaXB0aW9uIGZyb20gJy4vdXBkYXRlLWRlc2NyaXB0aW9uJztcbmltcG9ydCB1cGRhdGVJbnB1dHMgZnJvbSAnLi91cGRhdGUtaW5wdXRzJztcbmltcG9ydCB1cGRhdGVPdXRwdXRzIGZyb20gJy4vdXBkYXRlLW91dHB1dHMnO1xuaW1wb3J0IHVwZGF0ZVRpdGxlIGZyb20gJy4vdXBkYXRlLXRpdGxlJztcbmltcG9ydCB1cGRhdGVVc2FnZSBmcm9tICcuL3VwZGF0ZS11c2FnZSc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVwZGF0ZVNlY3Rpb24oc2VjdGlvbjogc3RyaW5nLCBpbnB1dHM6IElucHV0cyk6IHZvaWQge1xuICBjb25zdCBsb2cgPSBuZXcgTG9nVGFzaygndXBkYXRlU2VjdGlvbicpO1xuICBzd2l0Y2ggKHNlY3Rpb24pIHtcbiAgICBjYXNlICdiYWRnZXMnOiB7XG4gICAgICB1cGRhdGVCYWRnZXMoc2VjdGlvbiwgaW5wdXRzKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlICd1c2FnZSc6IHtcbiAgICAgIHVwZGF0ZVVzYWdlKHNlY3Rpb24sIGlucHV0cyk7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSAndGl0bGUnOiB7XG4gICAgICB1cGRhdGVUaXRsZShzZWN0aW9uLCBpbnB1dHMpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGNhc2UgJ2Rlc2NyaXB0aW9uJzoge1xuICAgICAgdXBkYXRlRGVzY3JpcHRpb24oc2VjdGlvbiwgaW5wdXRzKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlICdpbnB1dHMnOiB7XG4gICAgICB1cGRhdGVJbnB1dHMoc2VjdGlvbiwgaW5wdXRzKTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBjYXNlICdvdXRwdXRzJzoge1xuICAgICAgdXBkYXRlT3V0cHV0cyhzZWN0aW9uLCBpbnB1dHMpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIGxvZy5kZWJ1ZyhgdW5rbm93biBzZWN0aW9uICR7c2VjdGlvbn1gKTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgSW5wdXRzIGZyb20gJy4vaW5wdXRzJztcbmltcG9ydCBMb2dUYXNrIGZyb20gJy4vbG9ndGFzayc7XG5pbXBvcnQgc2F2ZSBmcm9tICcuL3NhdmUnO1xuaW1wb3J0IHVwZGF0ZVNlY3Rpb24gZnJvbSAnLi9zZWN0aW9ucyc7XG5cbmV4cG9ydCBjb25zdCBpbnB1dHMgPSBuZXcgSW5wdXRzKCk7XG4vLyBUaGlzIHNjcmlwdCByZWJ1aWxkcyB0aGUgdXNhZ2Ugc2VjdGlvbiBpbiB0aGUgUkVBRE1FLm1kIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgYWN0aW9uLnltbFxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2VuZXJhdGVEb2NzKCk6IHZvaWQge1xuICBjb25zdCBsb2cgPSBuZXcgTG9nVGFzaygnZ2VuZXJhdGluZyByZWFkbWUnKTtcblxuICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgaW5wdXRzLnNlY3Rpb25zKSB7XG4gICAgdHJ5IHtcbiAgICAgIHVwZGF0ZVNlY3Rpb24oc2VjdGlvbiwgaW5wdXRzKTtcbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBpZiAoZXJyb3IgJiYgJ21lc3NhZ2UnIGluIGVycm9yICYmIGVycm9yLm1lc3NhZ2UpXG4gICAgICAgIGxvZy5lcnJvcihgRXJyb3Igb2NjdXJlZCBpbiBzZWN0aW9uICR7c2VjdGlvbn0uICR7ZXJyb3IubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cbiAgaW5wdXRzLnJlYWRtZUVkaXRvci5kdW1wVG9GaWxlKCk7XG5cbiAgc2F2ZShpbnB1dHMpO1xufVxuIiwgIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IGdlbmVyYXRlRG9jcyBmcm9tICcuL2dlbmVyYXRlLWRvY3MnO1xuXG5nZW5lcmF0ZURvY3MoKTtcbiJdLAogICJtYXBwaW5ncyI6ICI7b2VBRUEsSUFBQUEsRUFBb0Isc0JBQ3BCQyxFQUFzQix3QkFHdEJDLEdBQXNCLHNCQUN0QkMsR0FBdUIsb0JDTnZCLElBQUFDLEdBQW9CLHNCQUVwQkMsRUFBc0Isc0JDSHRCLElBQUFDLEVBQXNCLDRCQUN0QkMsRUFBNEIsb0JBQzVCQyxFQUF1Qix5QkFFakJDLEdBQVcsRUFDWEMsRUFBYyxFQUNkQyxHQUFZLEVBQ1pDLEVBQVcsRUFDWEMsRUFBWSxFQUNaQyxHQUFXLEVBQ1hDLEVBQW1CLFVBQ25CQyxFQUFOLE1BQU1DLENBQVEsQ0FDWixPQUFPLGdCQUE4QyxDQUFDLEVBRXRELE9BQU8sWUFBYyxFQUVyQixPQUFPLFNBQW1CLENBQ3hCLE9BQVksVUFBUSxHQUFLLENBQUMsQ0FBQyxRQUFRLElBQUksS0FDekMsQ0FFQSxLQUVBLFlBQVlDLEVBQWMsQ0FDeEIsS0FBSyxLQUFPQSxHQUFNLEtBQUssRUFDdkIsS0FBSyxRQUFVLEVBQ2pCLENBRUEsSUFBSSxTQUFtQixDQUNyQixPQUFPRCxFQUFRLGdCQUFnQixLQUFLLElBQUksR0FBSyxFQUMvQyxDQUVBLElBQUksUUFBUUUsRUFBZ0IsQ0FDMUJGLEVBQVEsZ0JBQWdCLEtBQUssSUFBSSxFQUFJRSxDQUN2QyxDQUVBLE1BQU0sUUFDSkMsRUFDQUMsRUFDQUMsRUFDQUMsRUFBYWQsR0FDRSxDQUNYWSxFQUFLLE9BQVNKLEVBQVEsY0FDeEJBLEVBQVEsWUFBY0ksRUFBSyxRQUU3QixJQUFJRyxFQUNKLE9BQVFILEVBQU0sQ0FDWixJQUFLLFFBQVMsQ0FDWkcsRUFBT1QsRUFBTSxhQUFhLEdBQUdPLENBQVcsRUFBRSxFQUMxQyxLQUNGLENBQ0EsSUFBSyxPQUFRLENBQ1hFLEVBQU9ULEVBQU0sTUFBTSxHQUFHTyxDQUFXLEVBQUUsRUFDbkMsS0FDRixDQUNBLElBQUssT0FBUSxDQUNYRSxFQUFPVCxFQUFNLE9BQU8sR0FBR08sQ0FBVyxFQUFFLEVBQ3BDLEtBQ0YsQ0FDQSxJQUFLLFVBQVcsQ0FDZEUsRUFBT1QsRUFBTSxZQUFZLEdBQUdPLENBQVcsRUFBRSxFQUN6QyxLQUNGLENBQ0EsSUFBSyxVQUFXLENBQ2RFLEVBQU9ULEVBQU0sVUFBVSxHQUFHTyxDQUFXLEVBQUUsRUFDdkMsS0FDRixDQUNBLElBQUssUUFBUyxDQUNaRSxFQUFPVCxFQUFNLFVBQVUsR0FBR08sQ0FBVyxFQUFFLEVBQ3ZDLEtBQ0YsQ0FDQSxJQUFLLFFBQVMsQ0FDWkUsRUFBT1QsRUFBTSxLQUFLLEdBQUdPLENBQVcsRUFBRSxFQUNsQyxLQUNGLENBQ0EsUUFBUyxDQUNQRSxFQUFPVCxFQUFNLE1BQU0sR0FBR08sQ0FBVyxFQUFFLEVBQ25DLEtBQ0YsQ0FDRixDQUVBLElBQUlHLEVBWUosT0FYSSxLQUFLLFNBQVcsQ0FBQyxRQUFRLElBQUksZUFFL0JBLEVBQU0sR0FEWSxDQUFDLEdBQUcsTUFBTSxLQUFLLENBQUUsT0FBUVIsRUFBUSxXQUFZLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUNsRSxNQUFNRyxDQUFRLEtBQUssS0FBSyxJQUFJLE1BQU1JLENBQUksR0FPeERDLEVBQU0sSUFMVSxDQUNkSixFQUNBLEdBQUcsTUFBTSxLQUFLLENBQUUsT0FBUUosRUFBUSxZQUFjSSxFQUFLLE1BQU8sQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUN2RSxFQUFFLEtBQUssRUFBRSxDQUVRLEtBQUtELENBQVEsS0FBS0ksQ0FBSSxHQUVqQ0gsRUFBTSxDQUNaLElBQUssUUFBUyxDQUNaSSxFQUFNVixFQUFNLGFBQWEsR0FBR1UsQ0FBRyxFQUFFLEVBQ2pDLEtBQ0YsQ0FDQSxJQUFLLFVBQVcsQ0FDZEEsRUFBTVYsRUFBTSxZQUFZLEdBQUdVLENBQUcsRUFBRSxFQUNoQyxLQUNGLENBQ0EsSUFBSyxVQUFXLENBQ2RBLEVBQU1WLEVBQU0sSUFBSSxHQUFHVSxDQUFHLEVBQUUsRUFDeEIsS0FDRixDQUNBLElBQUssUUFBUyxDQUNaQSxFQUFNVixFQUFNLElBQUksR0FBR1UsQ0FBRyxFQUFFLEVBQ3hCLEtBQ0YsQ0FDQSxRQUNFLEtBRUosQ0FDQSxJQUFNQyxFQUFhSCxJQUFlWCxHQUFZVyxJQUFlVixFQUU3RCxHQUFJLFFBQVEsSUFBSSxlQUNkLE9BQVFVLEVBQVksQ0FDbEIsS0FBS2IsRUFBYSxDQUNYLGFBQVdlLENBQUcsRUFFbkIsS0FDRixDQUNBLEtBQUtkLEdBQVcsQ0FDVCxXQUFTLEVBRWQsS0FDRixDQUNBLEtBQUtDLEVBQVUsQ0FDUixRQUFNRyxFQUFNLFlBQVlVLENBQUcsQ0FBQyxFQUVqQyxLQUNGLENBQ0EsS0FBS1osRUFBVyxDQUNULFlBQVVFLEVBQU0sWUFBWVUsQ0FBRyxDQUFDLEVBRXJDLEtBQ0YsQ0FDQSxRQUNPLE9BQUtBLENBQUcsQ0FFakIsTUFDU0MsRUFDSixRQUFNRCxDQUFHLEVBRVQsT0FBS0EsQ0FBRyxDQUVqQixDQUVBLE1BQU1ILEVBQWMsR0FBVSxDQUN4QkwsRUFBUSxRQUFRLEdBQUtLLElBQWdCLElBQ3ZDLEtBQUssUUFBUSx1Q0FBVyxRQUFTQSxDQUFXLENBRWhELENBRUEsTUFBTUEsRUFBYyxHQUFVLENBQzVCLElBQU1FLEVBQU9GLElBQWdCLEdBQUssWUFBWSxLQUFLLElBQUksTUFBUUEsRUFFL0QsS0FBSyxRQUFjLE1BQUksUUFBUSxHQUFLLEdBQUksUUFBU0UsRUFBTWQsQ0FBVyxDQUNwRSxDQUVBLEtBQUtZLEVBQWMsR0FBVSxDQUMzQixLQUFLLFFBQWMsTUFBSSxVQUFVLEdBQUssR0FBSSxPQUFRQSxDQUFXLENBQy9ELENBRUEsS0FBS0EsRUFBYyxHQUFVLENBQzNCLEtBQUssUUFBYyxNQUFJLE9BQU8sR0FBSyxHQUFJLE9BQVFBLENBQVcsQ0FDNUQsQ0FFQSxRQUFRQSxFQUFjLEdBQUlLLEVBQVUsR0FBWSxDQUM5QyxJQUFNSCxFQUFPRixJQUFnQixHQUFLLGFBQWEsS0FBSyxJQUFJLElBQU1BLEVBQzFESyxJQUNGLEtBQUssUUFBVSxHQUNYLFFBQVEsSUFBSSxnQkFDVCxXQUFTLEdBR2xCLEtBQUssUUFBYyxNQUFJLGtCQUFrQixHQUFLLEdBQUksVUFBV0gsQ0FBSSxDQUNuRSxDQUVBLEtBQUtGLEVBQWMsR0FBSUssRUFBVSxHQUFZLENBQzNDLElBQU1ILEVBQU9GLElBQWdCLEdBQUssVUFBVSxLQUFLLElBQUksSUFBTUEsRUFDdkRLLElBQ0YsS0FBSyxRQUFVLEdBQ1gsUUFBUSxJQUFJLGdCQUNULFdBQVMsR0FHbEIsSUFBTUMsRUFBVSxRQUFRLElBQUksZUFBaUJmLEVBQVlELEVBQ3pELEtBQUssUUFBYyxNQUFJLEdBQUcsR0FBSyxHQUFJLFVBQVdZLEVBQU1JLENBQU8sQ0FDN0QsQ0FFQSxNQUFNTixFQUFjLEdBQVUsQ0FDNUIsS0FBSyxRQUFjLE1BQUksR0FBRyxHQUFLLEdBQUksUUFBU0EsRUFBYVYsQ0FBUSxDQUNuRSxDQUVBLE1BQU1VLEVBQWMsR0FBVSxDQUM1QixLQUFLLFFBQVEsWUFBTSxRQUFTQSxFQUFhUixFQUFRLENBQ25ELENBQ0YsRUFFT2UsRUFBUWIsRUQ5S2YsSUFBcUJjLEVBQXJCLEtBQTRCLENBR25CLEtBRUEsWUFFQSxTQUVBLE9BRUEsUUFFQSxLQUVQLFlBQVlDLEVBQW9CLENBQzlCLElBQU1DLEVBQU0sSUFBSUMsRUFBUSxRQUFRLEVBQzVCQyxFQUFnQixLQUNwQixHQUFJLENBQ0ZGLEVBQUksTUFBTSwyQkFBMkJELENBQVUsRUFBRSxFQUNqREcsRUFBcUIsT0FBUSxnQkFBYUgsRUFBWSxNQUFNLENBQUMsRUFDN0RDLEVBQUksUUFBUSxtQ0FBbUMsQ0FDakQsTUFBUSxDQUNOQSxFQUFJLE1BQU0sa0JBQWtCRCxDQUFVLEVBQUUsQ0FDMUMsRUFDSSxPQUFPRyxHQUFrQixVQUFZQSxJQUFrQixPQUN6REYsRUFBSSxNQUFNLHlEQUF5RCxFQUVyRSxJQUFNRyxFQUFhRCxFQUNuQixLQUFLLEtBQU9DLEVBQVcsS0FDdkIsS0FBSyxZQUFjQSxFQUFXLFlBQzlCLEtBQUssU0FBV0EsRUFBVyxTQUMzQixLQUFLLE9BQVNBLEVBQVcsT0FDekIsS0FBSyxRQUFVQSxFQUFXLFFBQzFCLEtBQUssS0FBT0EsRUFBVyxJQUN6QixDQUVBLFdBQW9CLENBQ2xCLEdBQUksQ0FDRixPQUFZLE9BQUssS0FBTSxDQUNyQixZQUFhLEVBQ2YsQ0FBQyxDQUNILE1BQVEsQ0FFTixPQURZLElBQUlGLEVBQVEsa0JBQWtCLEVBQ3RDLE1BQU0sZ0NBQWdDLEVBQ25DLEVBQ1QsQ0FDRixDQUNGLEVFMUVBLElBQUFHLEVBQW9CLHNCQWlCcEIsSUFBTUMsR0FFSixvc1BBdUJLLFNBQVNDLEdBQVVDLEVBQWtDLENBQzFELEdBQUtBLEVBQ0wsSUFBSSxPQUFPQSxHQUFTLFNBQ2xCLE1BQU0sSUFBSSxVQUFVLGtEQUFrRCxPQUFPQSxDQUFJLEVBQUUsRUFFckYsT0FBT0EsRUFBSyxXQUFXQyxHQUFtQkMsR0FDeENBLEVBQUksQ0FBQyxFQUFJQSxFQUFJLENBQUMsRUFBRSxZQUFZLEVBQUlBLEVBQUksTUFBTSxDQUFDLEVBQUUsWUFBWSxFQUFJQSxDQUMvRCxFQUNGLENBcURPLFNBQVNDLEdBQ2RDLEVBQ0FDLEVBQ2EsQ0FDYixJQUFNQyxFQUFNLElBQUlDLEVBQVEsa0JBQWtCLEVBRXBDQyxFQURNLENBQUMsRUFFYixHQUFJSixFQUNGLE9BQUNJLEVBQU8sTUFBT0EsRUFBTyxJQUFJLEVBQUlKLEVBQVUsTUFBTSxHQUFHLEVBQ2pERSxFQUFJLEtBQUssZ0NBQWdDRixDQUFTLGdCQUFnQixLQUFLLFVBQVVJLENBQU0sQ0FBQyxFQUFFLEVBQ25GQSxFQUVULEdBQUksUUFBUSxJQUFJLGtCQUNkLE9BQUNBLEVBQU8sTUFBT0EsRUFBTyxJQUFJLEVBQUksUUFBUSxJQUFJLGtCQUFrQixNQUFNLEdBQUcsRUFDckVGLEVBQUksS0FDRiw0Q0FDRSxRQUFRLElBQUksaUJBQ2QsZ0JBQWdCLEtBQUssVUFBVUUsQ0FBTSxDQUFDLEVBQ3hDLEVBQ09BLEVBRVQsR0FBSUgsRUFDRixPQUFBRyxFQUFPLE1BQVFILEVBQVEsS0FBSyxNQUM1QkcsRUFBTyxLQUFPSCxFQUFRLEtBQUssS0FFM0JDLEVBQUksS0FDRiw0Q0FDRSxRQUFRLElBQUksaUJBQ2QsZ0JBQWdCLEtBQUssVUFBVUUsQ0FBTSxDQUFDLEVBQ3hDLEVBQ09BLEVBRVQsR0FBSSxRQUFRLElBQUksYUFBZSxRQUFRLElBQUksV0FDekMsT0FBQUEsRUFBTyxNQUFRLFFBQVEsSUFBSSxZQUMzQkEsRUFBTyxLQUFPLFFBQVEsSUFBSSxXQUNuQkEsRUFFVCxHQUFJLENBQ0YsSUFBTUMsRUFBaUIsZUFBYSxjQUFlLE1BQU0sRUFDbkRDLEVBQVUsOERBVVZDLEVBQVVGLEVBQVksTUFBTUMsQ0FBTyxFQUN6QyxPQUFJQyxJQUFZLE9BQ2RMLEVBQUksTUFBTSxLQUFLLFVBQVVLLEVBQVEsTUFBTSxDQUFDLEVBQ3hDSCxFQUFPLE1BQVFHLEVBQVEsUUFBUSxPQUFTLEdBQ3hDSCxFQUFPLEtBQU9HLEVBQVEsUUFBUSxNQUFRLElBRWpDSCxDQUNULE9BQVNJLEVBQU8sQ0FFZE4sRUFBSSxNQUFNLG9DQUFvQ00sQ0FBSyxFQUFFLENBQ3ZELENBQ0EsT0FBT0osQ0FDVCxDQU9PLFNBQVNLLEVBQWFDLEVBQXVCLENBQ2xELEdBQUksQ0FBQ0EsRUFDSCxNQUFPLEdBRVQsSUFBTUMsRUFBbUJDLEdBQ3ZCRixFQUNHLEtBQUssRUFDTCxRQUFRLFVBQVcsRUFBRSxFQUNyQixRQUFRLFVBQVcsRUFBRSxDQUMxQixFQUNBLE9BQUlDLEVBQ0ssS0FBS0EsQ0FBZ0IsS0FFdkIsRUFDVCxDQUNPLFNBQVNFLEVBQVVILEVBQXVCLENBQy9DLE9BQUtBLEVBSUUsT0FEa0JBLEVBQU0sS0FBSyxFQUFFLFFBQVEsT0FBUSxFQUFFLEVBQUUsUUFBUSxPQUFRLEVBQUUsQ0FDOUMsT0FIckIsRUFJWCxDQUVPLFNBQVNJLEdBQXdCQyxFQUF3QixDQUM5RCxJQUFJQyxFQUFnQixHQUNkQyxFQUFNLElBQUlDLEVBQVEseUJBQXlCLEVBQ2pELEdBQUlILEVBQU8sT0FBTyxJQUFJLG9CQUFvQixFQUFHLENBQzNDRSxFQUFJLE1BQU0sZ0RBQWdELEVBQzFELElBQU1FLEVBQVFKLEVBQU8sT0FBTyxJQUFJLHFCQUFxQixFQUNqREssRUFBaUIsUUFBUSxJQUFJLG9CQUVqQyxHQURBSCxFQUFJLE1BQU0sZ0RBQWdERyxHQUFrQixXQUFXLEVBQUUsRUFDckYsQ0FBQ0EsRUFBZ0IsQ0FDbkJILEVBQUksTUFBTSwyRUFBMkUsRUFDckYsR0FBSSxDQUNDLGFBQVcsY0FBYyxFQUk1QkcsRUFIMEMsS0FBSyxNQUMxQyxlQUFhLGVBQWdCLE1BQU0sQ0FDeEMsRUFDNkIsT0FDL0IsT0FBU0MsRUFBTyxDQUNkSixFQUFJLE1BQU0sMkJBQTJCSSxDQUFLLEVBQUUsQ0FDOUMsQ0FDQUosRUFBSSxNQUFNLDZDQUE2Q0csR0FBa0IsV0FBVyxFQUFFLENBQ3hGLENBRUFKLEVBQWdCRyxHQUFTQSxFQUFNLE9BQVMsRUFBSUEsRUFBUUMsR0FBa0IsUUFHcEVKLEdBQ0EsQ0FBQ0EsRUFBYyxXQUFXRCxFQUFPLE9BQU8sSUFBSSxtQkFBbUIsQ0FBVyxJQUUxRUMsRUFBZ0IsR0FBR0QsRUFBTyxPQUFPLElBQUksbUJBQW1CLENBQVcsR0FBR0MsQ0FBYSxHQUV2RixNQUNFQSxFQUFnQkQsRUFBTyxPQUFPLElBQUksbUJBQW1CLEVBRXZELE9BQUFFLEVBQUksTUFBTSwwQ0FBMENELENBQWEsRUFBRSxFQUM1REEsQ0FDVCxDQ3JPQSxJQUFBTSxFQUFvQixzQkFDcEJDLEdBQW9CLG1CQ0RwQixJQUFBQyxFQUF1QixvQkFXdkIsZUFBc0JDLEdBQWVDLEVBQWVDLEVBQW9DLENBRXRGLFNBQU8sVUFBT0QsRUFBTyxDQUNuQixLQUFNLEdBQ04sT0FBUSxXQUNSLDJCQUE0QixPQUM1QixHQUxTQyxFQUFXLENBQUUsU0FBQUEsQ0FBUyxFQUFJLENBQUMsQ0FNdEMsQ0FBQyxDQUNILENBQ0EsZUFBc0JDLEdBQ3BCRixFQUNBRyxFQUNBQyxFQUNtQixDQUNuQixHQUFJLENBQUNKLEVBQU8sT0FBT0csR0FBVyxDQUFDLEVBQy9CLElBQU1FLEVBQXFCRCxFQUFTSixFQUFNLFFBQVFJLEVBQVEsRUFBRSxFQUFJSixFQUMxRE0sRUFBa0IsUUFBTSxVQUFPLEdBQUdGLEdBQVUsRUFBRSxHQUFHQyxDQUFrQixHQUFJLENBQzNFLEtBQU0sR0FDTixPQUFRLE9BQ1IsVUFBVyxRQUNiLENBQUMsRUFDRCxPQUFBRixFQUFRLEtBQUssR0FBR0csRUFBZ0IsTUFBTTtBQUFBLENBQUksQ0FBQyxFQUNwQ0gsQ0FDVCxDRDVCTyxJQUFNSSxHQUFtQixvQkFDbkJDLEdBQWlCLGtCQUVUQyxFQUFyQixLQUFrQyxDQUNmLFNBRVQsWUFFUixZQUFZQyxFQUFrQixDQUM1QixLQUFLLFNBQVdBLEVBQ2hCLEtBQUssWUFBaUIsZUFBYUEsRUFBVSxNQUFNLENBQ3JELENBRUEsY0FBY0MsRUFBY0MsRUFBMEMsQ0FDcEUsSUFBTUMsRUFBTSxJQUFJQyxFQUFRSCxDQUFJLEVBQ3RCSSxFQUFVLE1BQU0sUUFBUUgsQ0FBZSxFQUFJQSxFQUFnQixLQUFLLE1BQUcsRUFBSUEsRUFDN0VDLEVBQUksS0FBSyxtQkFBbUJGLENBQUksYUFBYSxLQUFLLFFBQVEsRUFBRSxFQUM1RCxJQUFNSyxFQUFhVCxHQUFpQixRQUFRLEtBQU1JLENBQUksRUFDaERNLEVBQVlULEdBQWUsUUFBUSxLQUFNRyxDQUFJLEVBRTdDTyxFQUFhLEtBQUssWUFBWSxRQUFRRixDQUFVLEVBQ2hERyxFQUFZLEtBQUssWUFBWSxRQUFRRixDQUFTLEVBRXBELEdBQUlDLElBQWUsSUFBTUMsSUFBYyxHQUFJLENBQ3pDLElBQU1DLEVBQWdCLEtBQUssWUFBWSxNQUFNLEVBQUcsS0FBSyxJQUFJLEVBQUdGLEVBQWFGLEVBQVcsTUFBTSxDQUFDLEVBQ3JGSyxFQUFlLEtBQUssWUFBWSxNQUFNRixDQUFTLEVBRXJELEtBQUssWUFBY0MsRUFBZ0JMLEVBQVVNLENBQy9DLFNBQVdGLEVBQVlELEVBQ3JCLE1BQU0sSUFBSSxNQUFNLDRCQUE0QlAsQ0FBSSwrQkFBK0IsQ0FFbkYsQ0FFQSxNQUFNLFlBQTRCLENBQ2hDLElBQU1JLEVBQVUsTUFBTU8sR0FBZSxLQUFLLFdBQVcsRUFDckQsT0FBVSxnQkFBYyxLQUFLLFNBQVVQLEVBQVMsTUFBTSxDQUN4RCxDQUNGLEVFM0NPLFNBQVNRLElBQTJCLENBQ3pDLE9BQU8sUUFBUSxJQUFJLGtCQUFvQixRQUFRLElBQUksVUFBWSxRQUFRLElBQUksQ0FDN0UsQ05hQSxJQUFNQyxFQUFNLElBQUlDLEVBQVEsUUFBUSxFQUNoQyxRQUFRLE1BQU1DLEdBQWlCLENBQUMsRUFDaEMsSUFBTUMsR0FBa0IsUUFBUSxJQUFJLG1CQUFxQixHQUNyREMsR0FBOEIsS0FDbEMsR0FBSSxDQUNGQSxHQUFjLEtBQUssTUFBUyxlQUFhRCxHQUFpQixNQUFNLENBQUMsQ0FDbkUsTUFBUSxDQUVOSCxFQUFJLE1BQU0sZ0NBQWdDRyxFQUFlLEVBQUUsQ0FDN0QsQ0FDTyxJQUFNRSxHQUFpQixnQkFDeEJDLEVBQWMsZUFDZEMsRUFBYyxlQUNQQyxHQUF1QixDQUNsQyxPQUNBRixFQUNBQyxFQUNBLFlBQ0EscUJBQ0Esc0JBQ0Esb0JBQ0Esb0JBQ0EsUUFDQSxPQUNBLGVBQ0EsU0FDQSw4QkFDRixFQUtxQkUsRUFBckIsS0FBNEIsQ0FDbkIsT0FFQSxTQUVBLFdBRUEsV0FFQSxPQUVBLGFBRVAsYUFBYyxDQUNaLEtBQUssV0FBa0IsVUFBUUosRUFBYyxFQUM3QyxLQUFLLE9BQVMsSUFBVSxZQUN4QixJQUFNSyxFQUFtQkMsR0FBaUIsS0FBTVAsRUFBVyxFQUN2RCxRQUFRLElBQUksZUFDZEosRUFBSSxLQUFLLDBCQUEwQixFQUU5QixhQUFXLEtBQUssVUFBVSxFQUMvQkEsRUFBSSxLQUFLLHNCQUFzQixLQUFLLFVBQVUsRUFBRSxFQUVoREEsRUFBSSxNQUFNLDBCQUEwQixLQUFLLFVBQVUsRUFBRSxFQUV2RCxLQUFLLE9BQ0YsSUFBSSxDQUNILFVBQVcsR0FDWCxZQUFhLEdBQ2IsTUFBTyxVQUNQLFVBQVlZLEdBQTRDLENBQ3RELEdBQUlBLEVBQUksSUFBSSxXQUFXLFFBQVEsRUFBRyxDQUNoQyxJQUFNQyxFQUFxQixDQUN6QixJQUFLRCxFQUFJLElBQ1QsTUFBT0EsRUFBSSxLQUNiLEVBQ01FLEVBQVlGLEVBQUksSUFBSSxRQUFRLGtCQUFtQixFQUFFLEVBQ3ZELE9BQVFFLEVBQVcsQ0FDakIsSUFBSyxTQUFVLENBQ2JELEVBQU8sSUFBTU4sRUFDYixLQUNGLENBQ0EsSUFBSyxTQUFVLENBQ2JNLEVBQU8sSUFBTVAsRUFDYixLQUNGLENBQ0EsSUFBSyxxQkFBc0IsQ0FDekJPLEVBQU8sSUFBTSxxQkFDYixLQUNGLENBQ0EsSUFBSyxpQkFBa0IsQ0FDckJBLEVBQU8sSUFBTSxvQkFDYixLQUNGLENBQ0EsSUFBSyw0QkFBNkIsQ0FDaENBLEVBQU8sSUFBTSxvQkFDYixLQUNGLENBQ0EsSUFBSyxtQkFBb0IsQ0FDdkJBLEVBQU8sSUFBTSxzQkFDYixLQUNGLENBQ0EsSUFBSywrQkFBZ0MsQ0FDbkNBLEVBQU8sSUFBTSxtQkFDYixLQUNGLENBQ0EsUUFBUyxDQUNQQSxFQUFPLElBQU1DLEVBQ2IsS0FDRixDQUNGLENBQ0EsT0FBSUQsRUFBTyxPQUNULEtBQUssT0FBTyxJQUFJQSxFQUFPLElBQUtBLEVBQU8sS0FBSyxFQUVuQ0EsQ0FDVCxDQUVGLENBQ0YsQ0FBQyxFQUNBLEtBQUssQ0FDSixLQUFRLENBQ04sTUFBTyxPQUNQLFNBQVUsdUJBQXVCUixFQUFjLEdBQy9DLFlBQWEsR0FDYixLQUFNLFNBQ1IsRUFDQSxlQUFnQixDQUNkLE1BQU8sQ0FBQyxjQUFlLFFBQVEsRUFDL0IsS0FBTSxTQUNOLFNBQVUsd0JBQ1osRUFDQSxlQUFnQixDQUNkLE1BQU8sQ0FBQyxjQUFlLFFBQVEsRUFDL0IsS0FBTSxTQUNOLFNBQVUseUJBQ1osRUFDQSxVQUFhLENBQ1gsTUFBTyxPQUNQLFNBQVUseUNBQ1osRUFDQSxNQUFTLENBQ1AsTUFBTyxRQUNQLFNBQVUsNkRBQ1osRUFDQSxLQUFRLENBQ04sTUFBTyxPQUNQLFNBQVUsMEVBQ1osRUFDQSxTQUFZLENBQ1YsTUFBTyxTQUNQLFNBQVUsK0NBQ1YsWUFBYSxHQUNiLEtBQU0sU0FDUixFQUNBLHFCQUFzQixDQUNwQixNQUFPLENBQUMsYUFBYyxvQkFBb0IsRUFDMUMsU0FDRSw4RkFDRixZQUFhLEdBQ2IsS0FBTSxTQUNSLEVBQ0Esc0JBQXVCLENBQ3JCLE1BQU8sQ0FBQyxhQUFjLHNCQUF1QixrQkFBa0IsRUFDL0QsU0FBVSxxREFDVixZQUFhLEVBQ2YsRUFDQSxvQkFBcUIsQ0FDbkIsTUFBTyxDQUFDLEtBQU0sZ0JBQWdCLEVBQzlCLFNBQVUsb0VBQ1YsWUFBYSxFQUNmLEVBQ0Esb0JBQXFCLENBQ25CLE1BQU8sQ0FBQyxTQUFVLDJCQUEyQixFQUM3QyxTQUFVLHFEQUNWLFlBQWEsRUFDZixFQUNBLG1CQUFvQixDQUNsQixNQUFPLENBQUMsZ0JBQWlCLGtCQUFrQixFQUMzQyxTQUFVLHlDQUNWLFlBQWEsR0FDYixLQUFNLFNBQ1IsRUFDQSxhQUFnQixDQUNkLE1BQU8sQ0FBQyxTQUFVLGNBQWMsRUFDaEMsU0FBVSxtQ0FDVixZQUFhLEVBQ2YsQ0FDRixDQUFDLEVBQ0EsS0FBSyxLQUFLLFVBQVUsRUFDcEIsU0FBUyxDQUNSLEtBQU0sR0FDTixNQUFPSyxHQUFrQixNQUN6QixLQUFNQSxHQUFrQixLQUN4QixNQUFPLENBQ0wsT0FBUSxhQUNSLE9BQVEsV0FDVixFQUNBLFVBQVcsR0FDWCxPQUFRLEdBQ1IsV0FBWSxDQUNWLFFBQVMsR0FDVCxTQUFVLEdBQ1YsT0FBUSxJQUNSLE9BQVEsT0FDUixPQUFRLEVBQ1YsRUFDQSxhQUFjLGtCQUNkLFNBQVUsQ0FBQyxRQUFTLGNBQWUsUUFBUyxTQUFVLFVBQVcsV0FBWSxRQUFRLENBQ3ZGLENBQUMsRUFDQSxTQUFTLENBQUMsUUFBUyxNQUFNLENBQUMsRUFFN0IsS0FBSyxTQUFXLEtBQUssT0FBTyxJQUFJLFVBQVUsRUFDMUMsS0FBSyxXQUFrQixVQUFRLEtBQUssT0FBTyxJQUFJSCxDQUFXLENBQVcsRUFDckUsSUFBTVEsRUFBa0IsVUFBUSxLQUFLLE9BQU8sSUFBSVQsQ0FBVyxDQUFXLEVBQ3RFLEtBQUssT0FBUyxJQUFJVSxFQUFPRCxDQUFVLEVBQ25DLEtBQUssYUFBZSxJQUFJRSxFQUFhLEtBQUssVUFBVSxFQUNoRGhCLEVBQVEsUUFBUSxJQUNsQkQsRUFBSSxNQUFNLGtCQUFrQixFQUM1QkEsRUFBSSxNQUFNLEtBQUssVUFBVSxDQUFDLEVBQzFCQSxFQUFJLE1BQU0sa0JBQWtCLEVBQzVCQSxFQUFJLE1BQU0sS0FBSyxPQUFPLFVBQVUsQ0FBQyxFQUVyQyxDQUVBLFdBQW9CLENBQ2xCLEdBQUksS0FBTSxDQUNSLElBQU1rQixFQUFtQixDQUFDLEVBQzFCLFFBQVdDLEtBQUtYLEdBQ2RVLEVBQU8sS0FBSyxHQUFHQyxDQUFDLEtBQUssS0FBSyxPQUFPLElBQUlBLENBQUMsQ0FBQyxFQUFFLEVBRTNDLE9BQVksUUFBS0QsRUFBUSxDQUN2QixZQUFhLEVBQ2YsQ0FBQyxDQUNILENBQ0EsTUFBTyxFQUNULENBQ0YsRU9uUEEsSUFBQUUsRUFBZSxzQkFDZkMsR0FBaUIsd0JBZVYsSUFBTUMsRUFBTixLQUF5QixDQUM5QixNQUVBLEtBRUEsYUFFQSxNQUVBLE1BRUEsVUFFQSxXQUVBLFdBRUEsUUFFQSxPQUVBLFdBQVdDLEVBQXNCLENBQy9CLEtBQUssTUFBUUEsRUFBTyxPQUFPLElBQUksT0FBTyxFQUN0QyxLQUFLLEtBQU9BLEVBQU8sT0FBTyxJQUFJLE1BQU0sRUFDcEMsS0FBSyxhQUFlQSxFQUFPLE9BQU8sSUFBSSxjQUFjLEVBQ3BELEtBQUssTUFBUUEsRUFBTyxPQUFPLElBQUksT0FBTyxFQUN0QyxLQUFLLE1BQVFBLEVBQU8sT0FBTyxJQUFJLE9BQU8sRUFDdEMsS0FBSyxVQUFZQSxFQUFPLE9BQU8sSUFBSSxXQUFXLEVBQzlDLEtBQUssV0FBYSxDQUNoQixRQUFTQSxFQUFPLE9BQU8sSUFBSSxvQkFBb0IsRUFDL0MsT0FBUUEsRUFBTyxPQUFPLElBQUksbUJBQW1CLEVBQzdDLFNBQVVBLEVBQU8sT0FBTyxJQUFJLHFCQUFxQixFQUNqRCxPQUFRQSxFQUFPLE9BQU8sSUFBSSxtQkFBbUIsQ0FDL0MsRUFDQSxLQUFLLFFBQVVBLEVBQU8sT0FBTyxJQUFJLFNBQVMsRUFDMUMsS0FBSyxPQUFTQSxFQUFPLE9BQU8sSUFBSSxRQUFRLENBQzFDLENBT0EsS0FBS0MsRUFBMEIsQ0FDN0IsSUFBTUMsRUFBTSxJQUFJQyxFQUFRLGFBQWEsRUFFL0JDLEVBQVksR0FBQUMsUUFBSyxRQUFRSixDQUFVLEVBRXpDLFNBQUFLLFFBQUcsTUFBTUYsRUFBVyxDQUFFLFVBQVcsRUFBSyxFQUFJRyxHQUFRLENBQzVDQSxHQUNGTCxFQUFJLE1BQU0sNkJBQTZCRSxDQUFTLFlBQVlHLENBQUcsRUFBRSxDQUVyRSxDQUFDLEVBQ00sRUFBQUQsUUFBRyxVQUFVTCxFQUFZLEtBQUssVUFBVSxLQUFNLEtBQU0sQ0FBQyxFQUFJTSxHQUFRLENBQ2xFQSxFQUNGTCxFQUFJLE1BQU0sOEJBQThCRCxDQUFVLFlBQVlNLENBQUcsRUFBRSxFQUVuRUwsRUFBSSxLQUFLLDJCQUEyQkQsQ0FBVSxFQUFFLENBRXBELENBQUMsQ0FDSCxDQUNGLEVDekVlLFNBQVJPLEVBQXNCQyxFQUFzQixDQUNqRCxJQUFNQyxFQUFhLElBQUlDLEVBQ3ZCRCxFQUFXLFdBQVdELENBQU0sRUFDeEJBLEVBQU8sT0FBTyxJQUFJLE1BQU0sRUFBRSxTQUFTLElBQU0sUUFDM0NDLEVBQVcsS0FBS0QsRUFBTyxVQUFVLENBRXJDLENDRGUsU0FBUkcsRUFBOEJDLEVBQWVDLEVBQXNCLENBQ3hFLElBQU1DLEVBQU0sSUFBSUMsRUFBUUgsQ0FBSyxFQUN2QkksRUFBbUJILEVBQU8sT0FBTyxJQUFJLG1CQUFtQixFQUN4REksRUFBbUIsQ0FBQyxFQUNwQkMsRUFBYyxDQUNsQixNQUFPTCxFQUFPLE9BQU8sSUFBSSxPQUFPLEVBQ2hDLEtBQU1BLEVBQU8sT0FBTyxJQUFJLE1BQU0sQ0FDaEMsRUFNQSxTQUFTTSxHQUF5QixDQUNoQyxJQUFNQyxFQUFVLHNCQUFzQkYsRUFBTSxLQUFLLElBQUlBLEVBQU0sSUFBSSxHQUMvRCxNQUFPLENBQ0wsQ0FDRSxJQUFLLDJDQUEyQ0EsRUFBTSxLQUFLLElBQUlBLEVBQU0sSUFBSSw4REFDekUsSUFBSyxVQUNMLElBQUssR0FBR0UsQ0FBTyxrQkFDakIsRUFDQSxDQUNFLElBQUssOENBQThDRixFQUFNLEtBQUssSUFBSUEsRUFBTSxJQUFJLDhEQUM1RSxJQUFLLFVBQ0wsSUFBSyxHQUFHRSxDQUFPLGtCQUNqQixFQUNBLENBQ0UsSUFBSyw2Q0FBNkNGLEVBQU0sS0FBSyxJQUFJQSxFQUFNLElBQUksaUNBQzNFLElBQUssUUFDUCxFQUNBLENBQ0UsSUFBSyx3Q0FBd0NBLEVBQU0sS0FBSyxJQUFJQSxFQUFNLElBQUksaUNBQ3RFLElBQUssY0FDTCxJQUFLLEdBQUdFLENBQU8sU0FDakIsRUFDQSxDQUNFLElBQUssMkNBQTJDRixFQUFNLEtBQUssSUFBSUEsRUFBTSxJQUFJLHVDQUN6RSxJQUFLLFdBQ1AsQ0FDRixDQUNGLENBSUEsU0FBU0csRUFBY0MsRUFBc0IsQ0FDM0MsSUFBTUMsRUFBZ0IsYUFBYUQsRUFBSyxHQUFHLFVBQVVBLEVBQUssS0FBTyxFQUFFLE9BQ25FLE9BQUlBLEVBQUssSUFDQSxZQUFZQSxFQUFLLEdBQUcsS0FBS0MsQ0FBYSxPQUV4Q0EsQ0FDVCxDQUlBLFNBQVNDLEdBQTJCLENBQ2xDLElBQU1DLEVBQWEsQ0FBQyxFQUNwQixRQUFXQyxLQUFLVCxFQUNkUSxFQUFXLEtBQUtKLEVBQWNLLENBQUMsQ0FBQyxFQUVsQyxNQUFPLENBQUNELEVBQVcsS0FBSyxFQUFFLENBQUMsQ0FDN0IsQ0FFQVgsRUFBSSxNQUFNLEVBR05FLEdBQ0ZDLEVBQU8sS0FBSyxHQUFHRSxFQUFhLENBQUMsRUFFL0IsSUFBTVEsRUFBVUgsRUFBZSxFQUMvQlgsRUFBTyxhQUFhLGNBQWNELEVBQU9lLENBQU8sRUFFaERiLEVBQUksUUFBUSxDQUNkLENDOUVlLFNBQVJjLEVBQW1DQyxFQUFlQyxFQUFzQixDQUM3RSxJQUFNQyxFQUFNLElBQUlDLEVBQVFILENBQUssRUFFdkJJLEVBQW9CLENBQUMsRUFFM0IsR0FBSUgsR0FBUSxRQUFRLFlBQWEsQ0FDL0JDLEVBQUksTUFBTSxFQUNWLElBQU1HLEVBQWVKLEVBQU8sT0FBTyxZQUNoQyxLQUFLLEVBQ0wsV0FBVztBQUFBLEVBQVE7QUFBQSxDQUFJLEVBQ3ZCLFdBQVcsTUFBTyxHQUFHLEVBQ3JCLFdBQVc7QUFBQSxFQUFPO0FBQUEsQ0FBSSxFQUN0QixXQUFXO0FBQUE7QUFBQSxFQUFRLFFBQVEsRUFFOUJDLEVBQUksS0FBSyxXQUFXRyxFQUFLLE1BQU0sd0NBQXdDLEVBQ3ZFRCxFQUFRLEtBQUtDLENBQUksRUFDakJKLEVBQU8sYUFBYSxjQUFjRCxFQUFPSSxDQUFPLEVBQ2hERixFQUFJLFFBQVEsQ0FDZCxDQUNGLENDTE8sU0FBU0ksR0FBd0JDLEVBQXNCLENBQzVELE9BQU9BLEVBQUssV0FBVztBQUFBLEVBQU0sUUFBUSxFQUFFLFdBQVcsSUFBSyxLQUFLLENBQzlELENBRU8sU0FBU0MsR0FBeUJDLEVBQXlCLENBR2hFLE9BQUlBLEVBQVEsU0FBUyxHQUFHLEVBQ2ZBLEVBQVEsV0FBVyxpQ0FBa0MscUJBQXFCLEVBRTVFQSxDQVdULENBRU8sU0FBU0MsR0FBNkJDLEVBQW9ELENBQy9GLElBQU1DLEVBQXFDLENBQUMsRUFDdENDLEVBQTBCLENBQUMsRUFFakMsUUFBV0MsS0FBUUgsRUFDakJDLEVBQWEsS0FBSyxDQUFDLEdBQUdFLENBQUksQ0FBYSxFQUV6QyxJQUFNQyxFQUFVSCxFQUFhLE9BQ3pCSSxFQUFVLEVBQ1ZDLEVBQVUsRUFHVkMsRUFBUyxFQUNiLFFBQVdDLEtBQUtQLEVBQWMsQ0FDNUIsR0FBSUEsRUFBYU0sQ0FBTSxJQUFNLE9BQVcsQ0FDdEMsSUFBTUUsRUFBVUQsRUFBRSxPQUNkQyxFQUFVSixJQUNaQSxFQUFVSSxJQUVSQSxFQUFVSCxHQUFXQSxJQUFZLEtBQ25DQSxFQUFVRyxFQUVkLENBQ0FGLEdBQVUsQ0FDWixDQUNBLEdBQUlGLElBQVlDLEVBQVMsQ0FDdkIsSUFBSUksRUFBUyxFQUNiLFFBQVdGLEtBQUtQLEVBQ1ZBLEVBQWFTLENBQU0sSUFBTSxPQUMzQlQsRUFBYVMsQ0FBTSxFQUFJLE1BQU0sS0FBSyxDQUFFLE9BQVFMLENBQVEsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUNyREcsRUFBRSxPQUFTSCxJQUNwQkosRUFBYVMsQ0FBTSxFQUFJLENBQ3JCLEdBQUdGLEVBQ0gsR0FBRyxNQUFNLEtBQUssQ0FBRSxPQUFRSCxFQUFVRyxFQUFFLE1BQU8sQ0FBQyxFQUFFLEtBQUssV0FBVyxDQUNoRSxHQUVGRSxHQUFVLENBRWQsQ0FDQSxJQUFNQyxFQUEwQlAsRUFBVSxFQUNwQ1EsRUFBNkJQLEVBQVUsRUFBSSxFQUMzQ1EsRUFBdUMsTUFBTSxLQUFLLENBQUUsT0FBUUYsQ0FBd0IsQ0FBQyxFQUFFLEtBQzNGLE1BQU0sS0FBSyxDQUFFLE9BQVFDLENBQTJCLENBQUMsRUFBRSxLQUFLLEdBQWEsQ0FDdkUsRUFDSUUsRUFBSSxFQUNSLFFBQVdDLEtBQU9GLEVBQWdCLENBQ2hDLElBQUlHLEVBQU0sRUFFSkMsRUFBTUgsRUFBSSxFQUFJQSxFQUFJLEVBQUksRUFDdEJJLEdBQVVqQixFQUFhZ0IsQ0FBRyxFQUNoQyxRQUFTRSxFQUFJLEVBQUdBLEVBQUlKLEVBQUksT0FBUUksSUFBSyxDQUNuQyxJQUFJckIsRUFBVUgsR0FBd0J1QixHQUFRRixDQUFHLEdBQUssRUFBRSxFQUV4RGxCLEVBQVVELEdBQXlCQyxDQUFPLEVBRXRDcUIsRUFBSSxJQUFNLElBQ1JMLElBQU0sRUFDUkQsRUFBZUMsQ0FBQyxFQUFFSyxDQUFDLEVBQUksTUFBTXJCLEVBQVEsS0FBSyxDQUFDLE1BQ2xDZ0IsSUFBTSxFQUNmRCxFQUFlQyxDQUFDLEVBQUVLLENBQUMsRUFBSSxNQUV2Qk4sRUFBZUMsQ0FBQyxFQUFFSyxDQUFDLEVBQUksSUFBSXJCLEVBQVEsS0FBSyxDQUFDLElBRTNDa0IsR0FBTyxFQUVYLENBQ0FkLEVBQWMsS0FBSyxHQUFHVyxFQUFlQyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFBQSxDQUFJLEVBQ3BEQSxHQUFLLENBQ1AsQ0FFQSxPQUFPWixFQUFjLEtBQUssRUFBRSxDQUM5QixDQUVBLElBQU9rQixFQUFRckIsR0M1R0EsU0FBUnNCLEVBQThCQyxFQUFlQyxFQUFzQixDQUN4RSxJQUFNQyxFQUFNLElBQUlDLEVBQVFILENBQUssRUFFdkJJLEVBQW9CLENBQUMsRUFDckJDLEVBQTRCLENBQUMsRUFDN0JDLEVBQWEsQ0FBQyxRQUFTLGNBQWUsVUFBVyxVQUFVLEVBQzNEQyxFQUFtQixDQUFDLEVBQzFCLFFBQVdDLEtBQUtGLEVBQ2RDLEVBQU8sS0FBS0UsRUFBYUQsQ0FBQyxDQUFDLEVBRTdCSCxFQUFjLEtBQUtFLENBQU0sRUFDekIsSUFBTUcsRUFBT1QsRUFBTyxPQUFPLE9BQ3JCVSxFQUFLRCxFQUFPLE9BQU8sS0FBS0EsQ0FBSSxFQUFFLE9BQVMsRUFDN0MsR0FBSUMsRUFBSyxFQUFHLENBQ1ZULEVBQUksTUFBTSxFQUNWLFFBQVdVLEtBQU8sT0FBTyxLQUFLRixDQUFJLEVBQUcsQ0FDbkMsSUFBTUcsRUFBU0gsRUFBS0UsQ0FBRyxFQUVuQkUsRUFBY0QsR0FBUSxhQUFlLEdBSW5DRSxFQUFVRCxFQUFZLE1BQU07QUFBQTtBQUFBLFFBQWtCLEVBQ2hEQyxHQUFXQSxFQUFRLFFBQVUsSUFDL0JELEVBQWNDLEVBQVEsQ0FBQyxHQUFLRCxHQUc5QkEsRUFBY0EsRUFBWSxLQUFLLEVBQUUsUUFBUTtBQUFBLEVBQU0sUUFBUSxFQUV2RCxJQUFNRSxFQUFnQixDQUNwQkMsRUFBVUwsQ0FBRyxFQUNiRSxFQUNBRCxHQUFRLFFBQVUsS0FBS0EsRUFBTyxPQUFPLEtBQU8sR0FDNUNBLEdBQVEsU0FBVyxXQUFhLFdBQ2xDLEVBQ0FYLEVBQUksTUFBTSxLQUFLLFVBQVVjLENBQUcsQ0FBQyxFQUM3QlgsRUFBYyxLQUFLVyxDQUFHLENBQ3hCLENBQ0FaLEVBQVEsS0FBS2MsRUFBV2IsQ0FBYSxDQUFDLEVBQ3RDSCxFQUFJLEtBQUssY0FBY1MsQ0FBRSxVQUFVWCxDQUFLLEVBQUUsRUFDMUNDLEVBQU8sYUFBYSxjQUFjRCxFQUFPSSxDQUFPLEVBQ2hERixFQUFJLFFBQVEsQ0FDZCxNQUNFQSxFQUFJLE1BQU0saUJBQWlCRixDQUFLLEVBQUUsQ0FFdEMsQ0M3Q2UsU0FBUm1CLEVBQStCQyxFQUFlQyxFQUFzQixDQUN6RSxJQUFNQyxFQUFNLElBQUlDLEVBQVFILENBQUssRUFHdkJJLEVBQW9CLENBQUMsRUFFckJDLEVBQTRCLENBQUMsRUFDN0JDLEVBQWEsQ0FBQyxTQUFVLGFBQWEsRUFDckNDLEVBQW1CLENBQUMsRUFDMUIsUUFBV0MsS0FBS0YsRUFDZEMsRUFBTyxLQUFLRSxFQUFhRCxDQUFDLENBQUMsRUFFN0JILEVBQWMsS0FBS0UsQ0FBTSxFQUN6QixJQUFNRyxFQUFPVCxFQUFPLE9BQU8sUUFDckJVLEVBQUtELEVBQU8sT0FBTyxLQUFLQSxDQUFJLEVBQUUsT0FBUyxFQUM3QyxHQUFJQyxFQUFLLEVBQUcsQ0FDVlQsRUFBSSxNQUFNLEVBQ1YsUUFBV1UsS0FBTyxPQUFPLEtBQUtGLENBQUksRUFBRyxDQUduQyxJQUFJRyxFQUZXSCxFQUFLRSxDQUFHLEdBRUcsYUFBZSxHQUluQ0UsRUFBVSxtQkFBbUIsS0FBS0QsQ0FBVyxFQUMvQ0MsR0FBV0EsRUFBUSxRQUFVLElBQy9CRCxFQUFjQyxFQUFRLENBQUMsR0FBS0QsR0FHOUJBLEVBQWNBLEVBQVksS0FBSyxFQUFFLFFBQVE7QUFBQSxFQUFNLFFBQVEsRUFDdkQsSUFBTUUsRUFBZ0IsQ0FBQ0MsRUFBVUosQ0FBRyxFQUFHQyxDQUFXLEVBRWxEWCxFQUFJLE1BQU0sS0FBSyxVQUFVYSxDQUFHLENBQUMsRUFDN0JWLEVBQWMsS0FBS1UsQ0FBRyxDQUN4QixDQUNBWCxFQUFRLEtBQUthLEVBQVdaLENBQWEsQ0FBQyxFQUN0Q0gsRUFBSSxLQUFLLGNBQWNTLENBQUUsVUFBVVgsQ0FBSyxFQUFFLEVBQzFDQyxFQUFPLGFBQWEsY0FBY0QsRUFBT0ksQ0FBTyxFQUNoREYsRUFBSSxRQUFRLENBQ2QsTUFDRUEsRUFBSSxNQUFNLGlCQUFpQkYsQ0FBSyxFQUFFLENBRXRDLENDNUNlLFNBQVJrQixFQUE2QkMsRUFBZUMsRUFBc0IsQ0FDdkUsSUFBTUMsRUFBTSxJQUFJQyxFQUFRSCxDQUFLLEVBRXZCSSxFQUFvQixDQUFDLEVBQ3ZCQyxFQUFPLEdBQ1gsR0FBSUosRUFBTyxPQUFPLEtBQU0sQ0FDdEJDLEVBQUksTUFBTSxFQUNWRyxFQUFPSixFQUFPLE9BQU8sS0FFckJDLEVBQUksS0FBSyxXQUFXRyxFQUFLLE1BQU0sMEJBQTBCLEVBQ3pELElBQU1DLEVBQVEsS0FBS0wsRUFBTyxPQUFPLElBQUksY0FBYyxDQUFXLEdBQUdBLEVBQU8sT0FBTyxJQUFJLEdBQ25GQyxFQUFJLEtBQUssVUFBVUksQ0FBSyxFQUFFLEVBRTFCRixFQUFRLEtBQUtFLENBQUssRUFFbEJMLEVBQU8sYUFBYSxjQUFjRCxFQUFPSSxDQUFPLEVBQ2hERixFQUFJLFFBQVEsQ0FDZCxDQUNGLENDaEJlLFNBQVJLLEVBQTZCQyxFQUFlQyxFQUFzQixDQUN2RSxJQUFNQyxFQUFNLElBQUlDLEVBQVFILENBQUssRUFDN0JFLEVBQUksTUFBTSxFQUNWLElBQU1FLEVBQWEsR0FBR0gsRUFBTyxPQUFPLElBQUksT0FBTyxDQUFXLElBQUlBLEVBQU8sT0FBTyxJQUFJLE1BQU0sQ0FBQyxHQUN2RkMsRUFBSSxLQUFLLGdCQUFnQkUsQ0FBVSxFQUFFLEVBQ3JDLElBQU1DLEVBQXdCQyxHQUF3QkwsQ0FBTSxFQUU1REMsRUFBSSxLQUFLLG1CQUFtQkcsQ0FBYSxFQUFFLEVBRTNDLElBQU1FLEVBQWtCLEdBQUdILENBQVUsSUFBSUMsQ0FBYSxHQUV0RCxHQUFJLENBQUNFLEVBQ0gsTUFBTSxJQUFJLE1BQU0sNkNBQTZDLEVBSS9ELElBQU1DLEVBQW9CLENBQUMsRUFFM0JBLEVBQVEsS0FBSyxVQUFXLFdBQVdELENBQWUsR0FBSSxTQUFTLEVBRS9ELElBQU1FLEVBQU1SLEVBQU8sT0FBTyxPQUN0QlMsRUFBYSxHQUNqQixHQUFJRCxFQUNGLFFBQVdFLEtBQU8sT0FBTyxLQUFLRixDQUFHLEVBQUcsQ0FDbEMsSUFBTUcsRUFBUUgsRUFBSUUsQ0FBRyxFQUNqQkMsSUFBVSxTQUVQRixHQUNIRixFQUFRLEtBQUssRUFBRSxFQUlqQkssR0FBZ0JELEVBQU0sWUFBYUosRUFBUyxRQUFRLEVBRWhESSxFQUFNLFVBQVksU0FFaEJBLEVBQU0sYUFBYSxRQUFRLEVBQUUsTUFBTSxXQUFXLEdBQ2hESixFQUFRLEtBQUssT0FBTyxFQUl0QkEsRUFBUSxLQUFLLGtCQUFrQkksRUFBTSxPQUFPLEVBQUUsR0FJaERKLEVBQVEsS0FBSyxPQUFPRyxDQUFHLE1BQU0sRUFFN0JELEVBQWEsR0FFakIsQ0FHRkYsRUFBUSxLQUFLLE9BQU8sRUFFcEJQLEVBQU8sYUFBYSxjQUFjRCxFQUFPUSxDQUFPLEVBQ2hETixFQUFJLFFBQVEsQ0FDZCxDQ3BEZSxTQUFSWSxFQUErQkMsRUFBaUJDLEVBQXNCLENBQzNFLElBQU1DLEVBQU0sSUFBSUMsRUFBUSxlQUFlLEVBQ3ZDLE9BQVFILEVBQVMsQ0FDZixJQUFLLFNBQVUsQ0FDYkksRUFBYUosRUFBU0MsQ0FBTSxFQUM1QixLQUNGLENBQ0EsSUFBSyxRQUFTLENBQ1pJLEVBQVlMLEVBQVNDLENBQU0sRUFDM0IsS0FDRixDQUNBLElBQUssUUFBUyxDQUNaSyxFQUFZTixFQUFTQyxDQUFNLEVBQzNCLEtBQ0YsQ0FDQSxJQUFLLGNBQWUsQ0FDbEJNLEVBQWtCUCxFQUFTQyxDQUFNLEVBQ2pDLEtBQ0YsQ0FDQSxJQUFLLFNBQVUsQ0FDYk8sRUFBYVIsRUFBU0MsQ0FBTSxFQUM1QixLQUNGLENBQ0EsSUFBSyxVQUFXLENBQ2RRLEVBQWNULEVBQVNDLENBQU0sRUFDN0IsS0FDRixDQUNBLFFBQ0VDLEVBQUksTUFBTSxtQkFBbUJGLENBQU8sRUFBRSxDQUUxQyxDQUNGLENDbkNPLElBQU1VLEVBQVMsSUFBSUMsRUFFWCxTQUFSQyxHQUFzQyxDQUMzQyxJQUFNQyxFQUFNLElBQUlDLEVBQVEsbUJBQW1CLEVBRTNDLFFBQVdDLEtBQVdMLEVBQU8sU0FDM0IsR0FBSSxDQUNGTSxFQUFjRCxFQUFTTCxDQUFNLENBQy9CLE9BQVNPLEVBQVksQ0FDZkEsR0FBUyxZQUFhQSxHQUFTQSxFQUFNLFNBQ3ZDSixFQUFJLE1BQU0sNEJBQTRCRSxDQUFPLEtBQUtFLEVBQU0sT0FBTyxFQUFFLENBQ3JFLENBRUZQLEVBQU8sYUFBYSxXQUFXLEVBRS9CUSxFQUFLUixDQUFNLENBQ2IsQ0NqQkFTLEVBQWEiLAogICJuYW1lcyI6IFsiZnMiLCAicGF0aCIsICJ5YW1sIiwgIm5jb25mIiwgImZzIiwgInlhbWwiLCAiY29yZSIsICJjaGFsa0NsYXNzIiwgImVtb2ppIiwgIk5PX0dST1VQIiwgIlNUQVJUX0dST1VQIiwgIkVORF9HUk9VUCIsICJJU19FUlJPUiIsICJJU19GQUlMRUQiLCAiSVNfVElUTEUiLCAiY2hhbGsiLCAiTG9nVGFzayIsICJfTG9nVGFzayIsICJuYW1lIiwgInZhbHVlIiwgImVtb2ppU3RyIiwgInN0ZXAiLCAiZGVzY3JpcHRpb24iLCAic3RhcnRHcm91cCIsICJkZXNjIiwgIm1zZyIsICJpc0Vycm9yaW5nIiwgImluZ3JvdXAiLCAibXNndHlwZSIsICJsb2d0YXNrX2RlZmF1bHQiLCAiQWN0aW9uIiwgImFjdGlvblBhdGgiLCAibG9nIiwgImxvZ3Rhc2tfZGVmYXVsdCIsICJ0bXBBY3Rpb25ZYW1sIiwgImFjdGlvbllhbWwiLCAiZnMiLCAidW5pY29kZVdvcmRNYXRjaCIsICJ0aXRsZWNhc2UiLCAidGV4dCIsICJ1bmljb2RlV29yZE1hdGNoIiwgInR4dCIsICJyZXBvc2l0b3J5RmluZGVyIiwgImlucHV0UmVwbyIsICJjb250ZXh0IiwgImxvZyIsICJsb2d0YXNrX2RlZmF1bHQiLCAicmVzdWx0IiwgImZpbGVDb250ZW50IiwgInBhdHRlcm4iLCAicmVzdWx0cyIsICJlcnJvciIsICJjb2x1bW5IZWFkZXIiLCAidmFsdWUiLCAibm9ybWFsaXNlZEhlYWRlciIsICJ0aXRsZWNhc2UiLCAicm93SGVhZGVyIiwgImdldEN1cnJlbnRWZXJzaW9uU3RyaW5nIiwgImlucHV0cyIsICJ2ZXJzaW9uU3RyaW5nIiwgImxvZyIsICJsb2d0YXNrX2RlZmF1bHQiLCAib1JpZGUiLCAicGFja2FnZVZlcnNpb24iLCAiZXJyb3IiLCAiZnMiLCAiaW1wb3J0X25vZGVfb3MiLCAiaW1wb3J0X3ByZXR0aWVyIiwgImZvcm1hdE1hcmtkb3duIiwgInZhbHVlIiwgImZpbGVwYXRoIiwgIndyYXBEZXNjcmlwdGlvbiIsICJjb250ZW50IiwgInByZWZpeCIsICJ2YWx1ZVdpdGhvdXRQcmVmaXgiLCAiZm9ybWF0dGVkU3RyaW5nIiwgInN0YXJ0VG9rZW5Gb3JtYXQiLCAiZW5kVG9rZW5Gb3JtYXQiLCAiUmVhZG1lRWRpdG9yIiwgImZpbGVQYXRoIiwgIm5hbWUiLCAicHJvdmlkZWRDb250ZW50IiwgImxvZyIsICJsb2d0YXNrX2RlZmF1bHQiLCAiY29udGVudCIsICJzdGFydFRva2VuIiwgInN0b3BUb2tlbiIsICJzdGFydEluZGV4IiwgInN0b3BJbmRleCIsICJiZWZvcmVDb250ZW50IiwgImFmdGVyQ29udGVudCIsICJmb3JtYXRNYXJrZG93biIsICJ3b3JraW5nRGlyZWN0b3J5IiwgImxvZyIsICJsb2d0YXNrX2RlZmF1bHQiLCAid29ya2luZ0RpcmVjdG9yeSIsICJnaXRodWJFdmVudFBhdGgiLCAiZ2l0aHViRXZlbnQiLCAiY29uZmlnRmlsZU5hbWUiLCAicGF0aHNBY3Rpb24iLCAicGF0aHNSZWFkbWUiLCAiY29uZmlnS2V5cyIsICJJbnB1dHMiLCAicmVwb3NpdG9yeURldGFpbCIsICJyZXBvc2l0b3J5RmluZGVyIiwgIm9iaiIsICJuZXdPYmoiLCAia2V5UGFyc2VkIiwgImFjdGlvblBhdGgiLCAiQWN0aW9uIiwgIlJlYWRtZUVkaXRvciIsICJvdXRwdXQiLCAiayIsICJpbXBvcnRfbm9kZV9mcyIsICJpbXBvcnRfbm9kZV9wYXRoIiwgIkdIQWN0aW9uRG9jc0NvbmZpZyIsICJpbnB1dHMiLCAiY29uZmlnUGF0aCIsICJsb2ciLCAibG9ndGFza19kZWZhdWx0IiwgImRpcmVjdG9yeSIsICJwYXRoIiwgImZzIiwgImVyciIsICJzYXZlIiwgImlucHV0cyIsICJkb2NzQ29uZmlnIiwgIkdIQWN0aW9uRG9jc0NvbmZpZyIsICJ1cGRhdGVCYWRnZXMiLCAidG9rZW4iLCAiaW5wdXRzIiwgImxvZyIsICJsb2d0YXNrX2RlZmF1bHQiLCAiZW5hYmxlVmVyc2lvbmluZyIsICJiYWRnZXMiLCAicmVwb3MiLCAiZ2l0aHViQmFkZ2VzIiwgInJlcG9VcmwiLCAiZ2VuZXJhdGVCYWRnZSIsICJpdGVtIiwgImJhZGdlVGVtcGxhdGUiLCAiZ2VuZXJhdGVCYWRnZXMiLCAiYmFkZ2VBcnJheSIsICJiIiwgImNvbnRlbnQiLCAidXBkYXRlRGVzY3JpcHRpb24iLCAidG9rZW4iLCAiaW5wdXRzIiwgImxvZyIsICJsb2d0YXNrX2RlZmF1bHQiLCAiY29udGVudCIsICJkZXNjIiwgIm1hcmtkb3duRXNjYXBlVGFibGVDZWxsIiwgInRleHQiLCAibWFya2Rvd25Fc2NhcGVJbmxpbmVDb2RlIiwgImNvbnRlbnQiLCAiQXJyYXlPZkFycmF5c1RvTWFya2Rvd25UYWJsZSIsICJwcm92aWRlZFRhYmxlQ29udGVudCIsICJ0YWJsZUNvbnRlbnQiLCAib3V0cHV0U3RyaW5ncyIsICJyb3dBIiwgIm1heFJvd3MiLCAibWF4Q29scyIsICJtaW5Db2xzIiwgInRibElkeCIsICJlIiwgIm51bUNvbHMiLCAiY250SWR4IiwgIm1hcmtkb3duQXJyYXlSb3dzTGVuZ3RoIiwgIm1hcmtkb3duQXJyYXlFbnRyaWVzTGVuZ3RoIiwgIm1hcmtkb3duQXJyYXlzIiwgImkiLCAicm93IiwgImNvbCIsICJpZHgiLCAiZGF0YVJvdyIsICJqIiwgIm1hcmtkb3duZXJfZGVmYXVsdCIsICJ1cGRhdGVJbnB1dHMiLCAidG9rZW4iLCAiaW5wdXRzIiwgImxvZyIsICJsb2d0YXNrX2RlZmF1bHQiLCAiY29udGVudCIsICJtYXJrZG93bkFycmF5IiwgInRpdGxlQXJyYXkiLCAidGl0bGVzIiwgInQiLCAiY29sdW1uSGVhZGVyIiwgInZhcnMiLCAidEkiLCAia2V5IiwgInZhbHVlcyIsICJkZXNjcmlwdGlvbiIsICJtYXRjaGVzIiwgInJvdyIsICJyb3dIZWFkZXIiLCAibWFya2Rvd25lcl9kZWZhdWx0IiwgInVwZGF0ZU91dHB1dHMiLCAidG9rZW4iLCAiaW5wdXRzIiwgImxvZyIsICJsb2d0YXNrX2RlZmF1bHQiLCAiY29udGVudCIsICJtYXJrZG93bkFycmF5IiwgInRpdGxlQXJyYXkiLCAidGl0bGVzIiwgInQiLCAiY29sdW1uSGVhZGVyIiwgInZhcnMiLCAidEkiLCAia2V5IiwgImRlc2NyaXB0aW9uIiwgIm1hdGNoZXMiLCAicm93IiwgInJvd0hlYWRlciIsICJtYXJrZG93bmVyX2RlZmF1bHQiLCAidXBkYXRlVGl0bGUiLCAidG9rZW4iLCAiaW5wdXRzIiwgImxvZyIsICJsb2d0YXNrX2RlZmF1bHQiLCAiY29udGVudCIsICJuYW1lIiwgInRpdGxlIiwgInVwZGF0ZVVzYWdlIiwgInRva2VuIiwgImlucHV0cyIsICJsb2ciLCAibG9ndGFza19kZWZhdWx0IiwgImFjdGlvbk5hbWUiLCAidmVyc2lvblN0cmluZyIsICJnZXRDdXJyZW50VmVyc2lvblN0cmluZyIsICJhY3Rpb25SZWZlcmVuY2UiLCAiY29udGVudCIsICJpbnAiLCAiZmlyc3RJbnB1dCIsICJrZXkiLCAiaW5wdXQiLCAid3JhcERlc2NyaXB0aW9uIiwgInVwZGF0ZVNlY3Rpb24iLCAic2VjdGlvbiIsICJpbnB1dHMiLCAibG9nIiwgImxvZ3Rhc2tfZGVmYXVsdCIsICJ1cGRhdGVCYWRnZXMiLCAidXBkYXRlVXNhZ2UiLCAidXBkYXRlVGl0bGUiLCAidXBkYXRlRGVzY3JpcHRpb24iLCAidXBkYXRlSW5wdXRzIiwgInVwZGF0ZU91dHB1dHMiLCAiaW5wdXRzIiwgIklucHV0cyIsICJnZW5lcmF0ZURvY3MiLCAibG9nIiwgImxvZ3Rhc2tfZGVmYXVsdCIsICJzZWN0aW9uIiwgInVwZGF0ZVNlY3Rpb24iLCAiZXJyb3IiLCAic2F2ZSIsICJnZW5lcmF0ZURvY3MiXQp9Cg== diff --git a/package-lock.json b/package-lock.json index fc9b18de..d87f89a3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,16 +9,14 @@ "version": "1.5.1", "hasInstallScript": true, "license": "APACHE", - "os": [ - "!win32" - ], + "os": ["!win32"], "dependencies": { "@actions/core": "^1.10.1", "@actions/github": "^5.1.1", "async": "^3.2.4", "chalk": "^4", "js-yaml": "^4.1.0", - "nconf": "github:indexzero/nconf", + "nconf": "^0.12.0", "node-emoji": "^2.1.0", "prettier": "^3.0.3", "tslib": "^2.6.2" @@ -2782,14 +2780,10 @@ "version": "0.19.4", "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.4.tgz", "integrity": "sha512-uBIbiYMeSsy2U0XQoOGVVcpIktjLMEKa7ryz2RLr7L/vTnANNEsPVAh4xOv7ondGz6ac1zVb0F8Jx20rQikffQ==", - "cpu": [ - "arm" - ], + "cpu": ["arm"], "dev": true, "optional": true, - "os": [ - "android" - ], + "os": ["android"], "engines": { "node": ">=12" } @@ -2798,14 +2792,10 @@ "version": "0.19.4", "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.4.tgz", "integrity": "sha512-mRsi2vJsk4Bx/AFsNBqOH2fqedxn5L/moT58xgg51DjX1la64Z3Npicut2VbhvDFO26qjWtPMsVxCd80YTFVeg==", - "cpu": [ - "arm64" - ], + "cpu": ["arm64"], "dev": true, "optional": true, - "os": [ - "android" - ], + "os": ["android"], "engines": { "node": ">=12" } @@ -2814,14 +2804,10 @@ "version": "0.19.4", "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.4.tgz", "integrity": "sha512-4iPufZ1TMOD3oBlGFqHXBpa3KFT46aLl6Vy7gwed0ZSYgHaZ/mihbYb4t7Z9etjkC9Al3ZYIoOaHrU60gcMy7g==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "optional": true, - "os": [ - "android" - ], + "os": ["android"], "engines": { "node": ">=12" } @@ -2830,14 +2816,10 @@ "version": "0.19.4", "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.4.tgz", "integrity": "sha512-Lviw8EzxsVQKpbS+rSt6/6zjn9ashUZ7Tbuvc2YENgRl0yZTktGlachZ9KMJUsVjZEGFVu336kl5lBgDN6PmpA==", - "cpu": [ - "arm64" - ], + "cpu": ["arm64"], "dev": true, "optional": true, - "os": [ - "darwin" - ], + "os": ["darwin"], "engines": { "node": ">=12" } @@ -2846,14 +2828,10 @@ "version": "0.19.4", "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.4.tgz", "integrity": "sha512-YHbSFlLgDwglFn0lAO3Zsdrife9jcQXQhgRp77YiTDja23FrC2uwnhXMNkAucthsf+Psr7sTwYEryxz6FPAVqw==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "optional": true, - "os": [ - "darwin" - ], + "os": ["darwin"], "engines": { "node": ">=12" } @@ -2862,14 +2840,10 @@ "version": "0.19.4", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.4.tgz", "integrity": "sha512-vz59ijyrTG22Hshaj620e5yhs2dU1WJy723ofc+KUgxVCM6zxQESmWdMuVmUzxtGqtj5heHyB44PjV/HKsEmuQ==", - "cpu": [ - "arm64" - ], + "cpu": ["arm64"], "dev": true, "optional": true, - "os": [ - "freebsd" - ], + "os": ["freebsd"], "engines": { "node": ">=12" } @@ -2878,14 +2852,10 @@ "version": "0.19.4", "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.4.tgz", "integrity": "sha512-3sRbQ6W5kAiVQRBWREGJNd1YE7OgzS0AmOGjDmX/qZZecq8NFlQsQH0IfXjjmD0XtUYqr64e0EKNFjMUlPL3Cw==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "optional": true, - "os": [ - "freebsd" - ], + "os": ["freebsd"], "engines": { "node": ">=12" } @@ -2894,14 +2864,10 @@ "version": "0.19.4", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.4.tgz", "integrity": "sha512-z/4ArqOo9EImzTi4b6Vq+pthLnepFzJ92BnofU1jgNlcVb+UqynVFdoXMCFreTK7FdhqAzH0vmdwW5373Hm9pg==", - "cpu": [ - "arm" - ], + "cpu": ["arm"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -2910,14 +2876,10 @@ "version": "0.19.4", "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.4.tgz", "integrity": "sha512-ZWmWORaPbsPwmyu7eIEATFlaqm0QGt+joRE9sKcnVUG3oBbr/KYdNE2TnkzdQwX6EDRdg/x8Q4EZQTXoClUqqA==", - "cpu": [ - "arm64" - ], + "cpu": ["arm64"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -2926,14 +2888,10 @@ "version": "0.19.4", "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.4.tgz", "integrity": "sha512-EGc4vYM7i1GRUIMqRZNCTzJh25MHePYsnQfKDexD8uPTCm9mK56NIL04LUfX2aaJ+C9vyEp2fJ7jbqFEYgO9lQ==", - "cpu": [ - "ia32" - ], + "cpu": ["ia32"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -2942,14 +2900,10 @@ "version": "0.19.4", "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.4.tgz", "integrity": "sha512-WVhIKO26kmm8lPmNrUikxSpXcgd6HDog0cx12BUfA2PkmURHSgx9G6vA19lrlQOMw+UjMZ+l3PpbtzffCxFDRg==", - "cpu": [ - "loong64" - ], + "cpu": ["loong64"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -2958,14 +2912,10 @@ "version": "0.19.4", "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.4.tgz", "integrity": "sha512-keYY+Hlj5w86hNp5JJPuZNbvW4jql7c1eXdBUHIJGTeN/+0QFutU3GrS+c27L+NTmzi73yhtojHk+lr2+502Mw==", - "cpu": [ - "mips64el" - ], + "cpu": ["mips64el"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -2974,14 +2924,10 @@ "version": "0.19.4", "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.4.tgz", "integrity": "sha512-tQ92n0WMXyEsCH4m32S21fND8VxNiVazUbU4IUGVXQpWiaAxOBvtOtbEt3cXIV3GEBydYsY8pyeRMJx9kn3rvw==", - "cpu": [ - "ppc64" - ], + "cpu": ["ppc64"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -2990,14 +2936,10 @@ "version": "0.19.4", "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.4.tgz", "integrity": "sha512-tRRBey6fG9tqGH6V75xH3lFPpj9E8BH+N+zjSUCnFOX93kEzqS0WdyJHkta/mmJHn7MBaa++9P4ARiU4ykjhig==", - "cpu": [ - "riscv64" - ], + "cpu": ["riscv64"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -3006,14 +2948,10 @@ "version": "0.19.4", "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.4.tgz", "integrity": "sha512-152aLpQqKZYhThiJ+uAM4PcuLCAOxDsCekIbnGzPKVBRUDlgaaAfaUl5NYkB1hgY6WN4sPkejxKlANgVcGl9Qg==", - "cpu": [ - "s390x" - ], + "cpu": ["s390x"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -3022,14 +2960,10 @@ "version": "0.19.4", "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.4.tgz", "integrity": "sha512-Mi4aNA3rz1BNFtB7aGadMD0MavmzuuXNTaYL6/uiYIs08U7YMPETpgNn5oue3ICr+inKwItOwSsJDYkrE9ekVg==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "optional": true, - "os": [ - "linux" - ], + "os": ["linux"], "engines": { "node": ">=12" } @@ -3038,14 +2972,10 @@ "version": "0.19.4", "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.4.tgz", "integrity": "sha512-9+Wxx1i5N/CYo505CTT7T+ix4lVzEdz0uCoYGxM5JDVlP2YdDC1Bdz+Khv6IbqmisT0Si928eAxbmGkcbiuM/A==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "optional": true, - "os": [ - "netbsd" - ], + "os": ["netbsd"], "engines": { "node": ">=12" } @@ -3054,14 +2984,10 @@ "version": "0.19.4", "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.4.tgz", "integrity": "sha512-MFsHleM5/rWRW9EivFssop+OulYVUoVcqkyOkjiynKBCGBj9Lihl7kh9IzrreDyXa4sNkquei5/DTP4uCk25xw==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "optional": true, - "os": [ - "openbsd" - ], + "os": ["openbsd"], "engines": { "node": ">=12" } @@ -3070,14 +2996,10 @@ "version": "0.19.4", "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.4.tgz", "integrity": "sha512-6Xq8SpK46yLvrGxjp6HftkDwPP49puU4OF0hEL4dTxqCbfx09LyrbUj/D7tmIRMj5D5FCUPksBbxyQhp8tmHzw==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "optional": true, - "os": [ - "sunos" - ], + "os": ["sunos"], "engines": { "node": ">=12" } @@ -3086,14 +3008,10 @@ "version": "0.19.4", "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.4.tgz", "integrity": "sha512-PkIl7Jq4mP6ke7QKwyg4fD4Xvn8PXisagV/+HntWoDEdmerB2LTukRZg728Yd1Fj+LuEX75t/hKXE2Ppk8Hh1w==", - "cpu": [ - "arm64" - ], + "cpu": ["arm64"], "dev": true, "optional": true, - "os": [ - "win32" - ], + "os": ["win32"], "engines": { "node": ">=12" } @@ -3102,14 +3020,10 @@ "version": "0.19.4", "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.4.tgz", "integrity": "sha512-ga676Hnvw7/ycdKB53qPusvsKdwrWzEyJ+AtItHGoARszIqvjffTwaaW3b2L6l90i7MO9i+dlAW415INuRhSGg==", - "cpu": [ - "ia32" - ], + "cpu": ["ia32"], "dev": true, "optional": true, - "os": [ - "win32" - ], + "os": ["win32"], "engines": { "node": ">=12" } @@ -3118,14 +3032,10 @@ "version": "0.19.4", "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.4.tgz", "integrity": "sha512-HP0GDNla1T3ZL8Ko/SHAS2GgtjOg+VmWnnYLhuTksr++EnduYB0f3Y2LzHsUwb2iQ13JGoY6G3R8h6Du/WG6uA==", - "cpu": [ - "x64" - ], + "cpu": ["x64"], "dev": true, "optional": true, - "os": [ - "win32" - ], + "os": ["win32"], "engines": { "node": ">=12" } @@ -7012,6 +6922,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -7025,6 +6936,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { "node": ">=8" } @@ -7033,6 +6945,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7046,6 +6959,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -9904,9 +9818,7 @@ "dev": true, "hasInstallScript": true, "optional": true, - "os": [ - "darwin" - ], + "os": ["darwin"], "engines": { "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } @@ -12445,9 +12357,7 @@ "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, - "engines": [ - "node >= 0.2.0" - ] + "engines": ["node >= 0.2.0"] }, "node_modules/JSONStream": { "version": "1.3.5", @@ -13694,17 +13604,29 @@ "dev": true }, "node_modules/nconf": { - "version": "1.0.0-beta.0", - "resolved": "git+ssh://git@github.com/indexzero/nconf.git#ce212b2f1dbf96cee001b5f621979c564638f0e7", - "license": "MIT", + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/nconf/-/nconf-0.12.0.tgz", + "integrity": "sha512-T3fZPw3c7Dfrz8JBQEbEcZJ2s8f7cUMpKuyBtsGQe0b71pcXx6gNh4oti2xh5dxB+gO9ufNfISBlGvvWtfyMcA==", "dependencies": { + "async": "^3.0.0", "ini": "^2.0.0", - "yargs": "^17.0.0" + "secure-keys": "^1.0.0", + "yargs": "^16.1.1" }, "engines": { "node": ">= 0.4.0" } }, + "node_modules/nconf/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, "node_modules/nconf/node_modules/ini": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", @@ -13713,6 +13635,60 @@ "node": ">=10" } }, + "node_modules/nconf/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/nconf/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nconf/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/nconf/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", @@ -15359,9 +15335,7 @@ "node_modules/npm/node_modules/jsonparse": { "version": "1.3.1", "dev": true, - "engines": [ - "node >= 0.2.0" - ], + "engines": ["node >= 0.2.0"], "inBundle": true, "license": "MIT" }, @@ -19100,6 +19074,11 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "dev": true }, + "node_modules/secure-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/secure-keys/-/secure-keys-1.0.0.tgz", + "integrity": "sha512-nZi59hW3Sl5P3+wOO89eHBAAGwmCPd2aE1+dLZV5MO+ItQctIvAqihzaAXIQhvtH4KJPxM080HsnqltR2y8cWg==" + }, "node_modules/semantic-release": { "version": "22.0.5", "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-22.0.5.tgz", @@ -21376,6 +21355,7 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -21393,7 +21373,6 @@ "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, "engines": { "node": ">=10" } @@ -21402,6 +21381,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { "node": ">=8" } @@ -21410,6 +21390,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -21423,6 +21404,7 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, "engines": { "node": ">=12" } diff --git a/package.json b/package.json index cb0ad161..3ebf0330 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "build:docker": "run-script-os", "build:docker:default": "docker run --rm -t -v $(pwd):/work -w /work node:20-alpine sh -c 'npm run build'", "build:docker:win32": "docker run --rm -t -v \"%cd%\":/work -w /work node:20-alpine sh -c \"npm run build\"", - "build:inputs": "esbuild --bundle src/testInputs.ts --out-extension:.js=.cjs --color=true --sourcemap=inline --platform=node --outdir=dist --target=node20 && chmod -R +x dist/ && node ./dist/testInputs.cjs", + "build:inputs": "esbuild --bundle src/testInputs.ts --out-extension:.js=.cjs --color=true --sourcemap=inline --platform=node --outdir=dist --packages=external --target=node20 && chmod -R +x dist/ && node ./dist/testInputs.cjs", "bump": "npm version -i patch && npm run release", "bump:minor": "version -i minor && npm run release", "clean": "rimraf dist", @@ -116,7 +116,7 @@ "async": "^3.2.4", "chalk": "^4", "js-yaml": "^4.1.0", - "nconf": "github:indexzero/nconf", + "nconf": "^0.12.0", "node-emoji": "^2.1.0", "prettier": "^3.0.3", "tslib": "^2.6.2" diff --git a/src/inputs.ts b/src/inputs.ts index a3f94ec3..87db487e 100644 --- a/src/inputs.ts +++ b/src/inputs.ts @@ -65,9 +65,12 @@ export default class Inputs { if (process.env.GITHUB_ACTION) { log.info('running in GitHub action'); } + if (fs.existsSync(this.configPath)) { + log.info(`config file found: ${this.configPath}`); + } else { + log.error(`config file not found: ${this.configPath}`); + } this.config - .use('memory') - .file({ file: this.configPath }) .env({ lowerCase: true, parseValues: true, @@ -190,6 +193,7 @@ export default class Inputs { parseValues: true, }, }) + .file(this.configPath) .defaults({ save: true, owner: repositoryDetail?.owner,