gen-pr 3.7.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli.js CHANGED
@@ -1,33 +1,2 @@
1
- import t,{statSync as e,readdirSync as n,readFileSync as s,writeFile as i}from"node:fs";import u,{resolve as r,dirname as o,normalize as a,join as D,relative as l,extname as c,basename as h}from"node:path";import f from"node:process";import{strictEqual as d,notStrictEqual as p}from"node:assert";import{format as g,inspect as F}from"node:util";import{fileURLToPath as m}from"node:url";import{createRequire as C}from"node:module";import{g as E,l as y,D as b,d as v,e as A,f as B,h as w,i as O,b as j,a as x,n as k,m as _}from"./main-BeZ-s37Y.js";import"node:os";import"node:crypto";import"node:child_process";import"node:buffer";import"node:https";import"node:stream";import"node:http";import"node:punycode";import"node:zlib";import"node:querystring";import"node:net";import"node:tls";import"node:tty";import"node:events";const M={right:function(t,e){t=t.trim();const n=P.stringWidth(t);if(n<e)return" ".repeat(e-n)+t;return t},center:function(t,e){t=t.trim();const n=P.stringWidth(t);if(n>=e)return t;return" ".repeat(e-n>>1)+t}};class S{constructor(t){var e;this.width=t.width,this.wrap=null===(e=t.wrap)||void 0===e||e,this.rows=[]}span(...t){this.div(...t).span=!0}resetOutput(){this.rows=[]}div(...t){if(0===t.length&&this.div(""),this.wrap&&this.shouldApplyLayoutDSL(...t)&&"string"==typeof t[0])return this.applyLayoutDSL(t[0]);const e=t.map(t=>"string"==typeof t?this.colFromString(t):t);return this.rows.push(e),e}shouldApplyLayoutDSL(...t){return 1===t.length&&"string"==typeof t[0]&&/[\t\n]/.test(t[0])}applyLayoutDSL(t){const e=t.split("\n").map(t=>t.split("\t"));let n=0;return e.forEach(t=>{t.length>1&&P.stringWidth(t[0])>n&&(n=Math.min(Math.floor(.5*this.width),P.stringWidth(t[0])))}),e.forEach(t=>{this.div(...t.map((e,s)=>({text:e.trim(),padding:this.measurePadding(e),width:0===s&&t.length>1?n:void 0})))}),this.rows[this.rows.length-1]}colFromString(t){return{text:t,padding:this.measurePadding(t)}}measurePadding(t){const e=P.stripAnsi(t);return[0,e.match(/\s*$/)[0].length,0,e.match(/^\s*/)[0].length]}toString(){const t=[];return this.rows.forEach(e=>{this.rowToString(e,t)}),t.filter(t=>!t.hidden).map(t=>t.text).join("\n")}rowToString(t,e){return this.rasterize(t).forEach((n,s)=>{let i="";n.forEach((n,u)=>{const{width:r}=t[u],o=this.negatePadding(t[u]);let a=n;if(o>P.stringWidth(n)&&(a+=" ".repeat(o-P.stringWidth(n))),t[u].align&&"left"!==t[u].align&&this.wrap){a=(0,M[t[u].align])(a,o),P.stringWidth(a)<o&&(a+=" ".repeat((r||0)-P.stringWidth(a)-1))}const D=t[u].padding||[0,0,0,0];D[3]&&(i+=" ".repeat(D[3])),i+=$(t[u],a,"| "),i+=a,i+=$(t[u],a," |"),D[1]&&(i+=" ".repeat(D[1])),0===s&&e.length>0&&(i=this.renderInline(i,e[e.length-1]))}),e.push({text:i.replace(/ +$/,""),span:t.span})}),e}renderInline(t,e){const n=t.match(/^ */),s=n?n[0].length:0,i=e.text,u=P.stringWidth(i.trimRight());return e.span?this.wrap?s<u?t:(e.hidden=!0,i.trimRight()+" ".repeat(s-u)+t.trimLeft()):(e.hidden=!0,i+t):t}rasterize(t){const e=[],n=this.columnWidths(t);let s;return t.forEach((t,i)=>{t.width=n[i],s=this.wrap?P.wrap(t.text,this.negatePadding(t),{hard:!0}).split("\n"):t.text.split("\n"),t.border&&(s.unshift("."+"-".repeat(this.negatePadding(t)+2)+"."),s.push("'"+"-".repeat(this.negatePadding(t)+2)+"'")),t.padding&&(s.unshift(...new Array(t.padding[0]||0).fill("")),s.push(...new Array(t.padding[2]||0).fill(""))),s.forEach((t,n)=>{e[n]||e.push([]);const s=e[n];for(let t=0;t<i;t++)void 0===s[t]&&s.push("");s.push(t)})}),e}negatePadding(t){let e=t.width||0;return t.padding&&(e-=(t.padding[3]||0)+(t.padding[1]||0)),t.border&&(e-=4),e}columnWidths(t){if(!this.wrap)return t.map(t=>t.width||P.stringWidth(t.text));let e=t.length,n=this.width;const s=t.map(t=>{if(t.width)return e--,n-=t.width,t.width}),i=e?Math.floor(n/e):0;return s.map((e,n)=>void 0===e?Math.max(i,function(t){const e=t.padding||[],n=1+(e[3]||0)+(e[1]||0);if(t.border)return n+4;return n}(t[n])):e)}}function $(t,e,n){return t.border?/[.']-+[.']/.test(e)?"":0!==e.trim().length?n:" ":""}let P;const I=function({onlyFirst:t=!1}={}){return new RegExp("(?:\\u001B\\][\\s\\S]*?(?:\\u0007|\\u001B\\u005C|\\u009C))|[\\u001B\\u009B][[\\]()#;?]*(?:\\d{1,4}(?:[;:]\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]",t?void 0:"g")}();function N(t){if("string"!=typeof t)throw new TypeError(`Expected a \`string\`, got \`${typeof t}\``);return t.replace(I,"")}function W(t,{ambiguousAsWide:e=!1}={}){return function(t){if(!Number.isSafeInteger(t))throw new TypeError(`Expected a code point, got \`${typeof t}\`.`)}(t),12288===(n=t)||n>=65281&&n<=65376||n>=65504&&n<=65510||function(t){return t>=4352&&t<=4447||8986===t||8987===t||9001===t||9002===t||t>=9193&&t<=9196||9200===t||9203===t||9725===t||9726===t||9748===t||9749===t||t>=9776&&t<=9783||t>=9800&&t<=9811||9855===t||t>=9866&&t<=9871||9875===t||9889===t||9898===t||9899===t||9917===t||9918===t||9924===t||9925===t||9934===t||9940===t||9962===t||9970===t||9971===t||9973===t||9978===t||9981===t||9989===t||9994===t||9995===t||10024===t||10060===t||10062===t||t>=10067&&t<=10069||10071===t||t>=10133&&t<=10135||10160===t||10175===t||11035===t||11036===t||11088===t||11093===t||t>=11904&&t<=11929||t>=11931&&t<=12019||t>=12032&&t<=12245||t>=12272&&t<=12287||t>=12289&&t<=12350||t>=12353&&t<=12438||t>=12441&&t<=12543||t>=12549&&t<=12591||t>=12593&&t<=12686||t>=12688&&t<=12773||t>=12783&&t<=12830||t>=12832&&t<=12871||t>=12880&&t<=42124||t>=42128&&t<=42182||t>=43360&&t<=43388||t>=44032&&t<=55203||t>=63744&&t<=64255||t>=65040&&t<=65049||t>=65072&&t<=65106||t>=65108&&t<=65126||t>=65128&&t<=65131||t>=94176&&t<=94180||t>=94192&&t<=94198||t>=94208&&t<=101589||t>=101631&&t<=101662||t>=101760&&t<=101874||t>=110576&&t<=110579||t>=110581&&t<=110587||110589===t||110590===t||t>=110592&&t<=110882||110898===t||t>=110928&&t<=110930||110933===t||t>=110948&&t<=110951||t>=110960&&t<=111355||t>=119552&&t<=119638||t>=119648&&t<=119670||126980===t||127183===t||127374===t||t>=127377&&t<=127386||t>=127488&&t<=127490||t>=127504&&t<=127547||t>=127552&&t<=127560||127568===t||127569===t||t>=127584&&t<=127589||t>=127744&&t<=127776||t>=127789&&t<=127797||t>=127799&&t<=127868||t>=127870&&t<=127891||t>=127904&&t<=127946||t>=127951&&t<=127955||t>=127968&&t<=127984||127988===t||t>=127992&&t<=128062||128064===t||t>=128066&&t<=128252||t>=128255&&t<=128317||t>=128331&&t<=128334||t>=128336&&t<=128359||128378===t||128405===t||128406===t||128420===t||t>=128507&&t<=128591||t>=128640&&t<=128709||128716===t||t>=128720&&t<=128722||t>=128725&&t<=128728||t>=128732&&t<=128735||128747===t||128748===t||t>=128756&&t<=128764||t>=128992&&t<=129003||129008===t||t>=129292&&t<=129338||t>=129340&&t<=129349||t>=129351&&t<=129535||t>=129648&&t<=129660||t>=129664&&t<=129674||t>=129678&&t<=129734||129736===t||t>=129741&&t<=129756||t>=129759&&t<=129770||t>=129775&&t<=129784||t>=131072&&t<=196605||t>=196608&&t<=262141}(t)||e&&function(t){return 161===t||164===t||167===t||168===t||170===t||173===t||174===t||t>=176&&t<=180||t>=182&&t<=186||t>=188&&t<=191||198===t||208===t||215===t||216===t||t>=222&&t<=225||230===t||t>=232&&t<=234||236===t||237===t||240===t||242===t||243===t||t>=247&&t<=250||252===t||254===t||257===t||273===t||275===t||283===t||294===t||295===t||299===t||t>=305&&t<=307||312===t||t>=319&&t<=322||324===t||t>=328&&t<=331||333===t||338===t||339===t||358===t||359===t||363===t||462===t||464===t||466===t||468===t||470===t||472===t||474===t||476===t||593===t||609===t||708===t||711===t||t>=713&&t<=715||717===t||720===t||t>=728&&t<=731||733===t||735===t||t>=768&&t<=879||t>=913&&t<=929||t>=931&&t<=937||t>=945&&t<=961||t>=963&&t<=969||1025===t||t>=1040&&t<=1103||1105===t||8208===t||t>=8211&&t<=8214||8216===t||8217===t||8220===t||8221===t||t>=8224&&t<=8226||t>=8228&&t<=8231||8240===t||8242===t||8243===t||8245===t||8251===t||8254===t||8308===t||8319===t||t>=8321&&t<=8324||8364===t||8451===t||8453===t||8457===t||8467===t||8470===t||8481===t||8482===t||8486===t||8491===t||8531===t||8532===t||t>=8539&&t<=8542||t>=8544&&t<=8555||t>=8560&&t<=8569||8585===t||t>=8592&&t<=8601||8632===t||8633===t||8658===t||8660===t||8679===t||8704===t||8706===t||8707===t||8711===t||8712===t||8715===t||8719===t||8721===t||8725===t||8730===t||t>=8733&&t<=8736||8739===t||8741===t||t>=8743&&t<=8748||8750===t||t>=8756&&t<=8759||8764===t||8765===t||8776===t||8780===t||8786===t||8800===t||8801===t||t>=8804&&t<=8807||8810===t||8811===t||8814===t||8815===t||8834===t||8835===t||8838===t||8839===t||8853===t||8857===t||8869===t||8895===t||8978===t||t>=9312&&t<=9449||t>=9451&&t<=9547||t>=9552&&t<=9587||t>=9600&&t<=9615||t>=9618&&t<=9621||9632===t||9633===t||t>=9635&&t<=9641||9650===t||9651===t||9654===t||9655===t||9660===t||9661===t||9664===t||9665===t||t>=9670&&t<=9672||9675===t||t>=9678&&t<=9681||t>=9698&&t<=9701||9711===t||9733===t||9734===t||9737===t||9742===t||9743===t||9756===t||9758===t||9792===t||9794===t||9824===t||9825===t||t>=9827&&t<=9829||t>=9831&&t<=9834||9836===t||9837===t||9839===t||9886===t||9887===t||9919===t||t>=9926&&t<=9933||t>=9935&&t<=9939||t>=9941&&t<=9953||9955===t||9960===t||9961===t||t>=9963&&t<=9969||9972===t||t>=9974&&t<=9977||9979===t||9980===t||9982===t||9983===t||10045===t||t>=10102&&t<=10111||t>=11094&&t<=11097||t>=12872&&t<=12879||t>=57344&&t<=63743||t>=65024&&t<=65039||65533===t||t>=127232&&t<=127242||t>=127248&&t<=127277||t>=127280&&t<=127337||t>=127344&&t<=127373||127375===t||127376===t||t>=127387&&t<=127404||t>=917760&&t<=917999||t>=983040&&t<=1048573||t>=1048576&&t<=1114109}(t)?2:1;var n}var L=()=>/[#*0-9]\uFE0F?\u20E3|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26AA\u26B0\u26B1\u26BD\u26BE\u26C4\u26C8\u26CF\u26D1\u26E9\u26F0-\u26F5\u26F7\u26F8\u26FA\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2757\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B55\u3030\u303D\u3297\u3299]\uFE0F?|[\u261D\u270C\u270D](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\u270A\u270B](?:\uD83C[\uDFFB-\uDFFF])?|[\u23E9-\u23EC\u23F0\u23F3\u25FD\u2693\u26A1\u26AB\u26C5\u26CE\u26D4\u26EA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2795-\u2797\u27B0\u27BF\u2B50]|\u26D3\uFE0F?(?:\u200D\uD83D\uDCA5)?|\u26F9(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\u2764\uFE0F?(?:\u200D(?:\uD83D\uDD25|\uD83E\uDE79))?|\uD83C(?:[\uDC04\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]\uFE0F?|[\uDF85\uDFC2\uDFC7](?:\uD83C[\uDFFB-\uDFFF])?|[\uDFC4\uDFCA](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDFCB\uDFCC](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF43\uDF45-\uDF4A\uDF4C-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uDDE6\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF]|\uDDE7\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF]|\uDDE8\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF7\uDDFA-\uDDFF]|\uDDE9\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF]|\uDDEA\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA]|\uDDEB\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7]|\uDDEC\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE]|\uDDED\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA]|\uDDEE\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9]|\uDDEF\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5]|\uDDF0\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF]|\uDDF1\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE]|\uDDF2\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF]|\uDDF3\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF]|\uDDF4\uD83C\uDDF2|\uDDF5\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE]|\uDDF6\uD83C\uDDE6|\uDDF7\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC]|\uDDF8\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF]|\uDDF9\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF]|\uDDFA\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF]|\uDDFB\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA]|\uDDFC\uD83C[\uDDEB\uDDF8]|\uDDFD\uD83C\uDDF0|\uDDFE\uD83C[\uDDEA\uDDF9]|\uDDFF\uD83C[\uDDE6\uDDF2\uDDFC]|\uDF44(?:\u200D\uD83D\uDFEB)?|\uDF4B(?:\u200D\uD83D\uDFE9)?|\uDFC3(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDFF3\uFE0F?(?:\u200D(?:\u26A7\uFE0F?|\uD83C\uDF08))?|\uDFF4(?:\u200D\u2620\uFE0F?|\uDB40\uDC67\uDB40\uDC62\uDB40(?:\uDC65\uDB40\uDC6E\uDB40\uDC67|\uDC73\uDB40\uDC63\uDB40\uDC74|\uDC77\uDB40\uDC6C\uDB40\uDC73)\uDB40\uDC7F)?)|\uD83D(?:[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3]\uFE0F?|[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC](?:\uD83C[\uDFFB-\uDFFF])?|[\uDC6E-\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4\uDEB5](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD74\uDD90](?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?|[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC25\uDC27-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE41\uDE43\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED8\uDEDC-\uDEDF\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB\uDFF0]|\uDC08(?:\u200D\u2B1B)?|\uDC15(?:\u200D\uD83E\uDDBA)?|\uDC26(?:\u200D(?:\u2B1B|\uD83D\uDD25))?|\uDC3B(?:\u200D\u2744\uFE0F?)?|\uDC41\uFE0F?(?:\u200D\uD83D\uDDE8\uFE0F?)?|\uDC68(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDC68\uDC69]\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?)|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFC-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFD-\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFD\uDFFF]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?\uDC68\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDD1D\uDEEF]\u200D\uD83D\uDC68\uD83C[\uDFFB-\uDFFE]|[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3])))?))?|\uDC69(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:\uDC8B\u200D\uD83D)?[\uDC68\uDC69]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?|\uDC69\u200D\uD83D(?:\uDC66(?:\u200D\uD83D\uDC66)?|\uDC67(?:\u200D\uD83D[\uDC66\uDC67])?))|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFC-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFD-\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFD\uDFFF]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D\uD83D(?:[\uDC68\uDC69]|\uDC8B\u200D\uD83D[\uDC68\uDC69])\uD83C[\uDFFB-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3]|\uDD1D\u200D\uD83D[\uDC68\uDC69]\uD83C[\uDFFB-\uDFFE]|\uDEEF\u200D\uD83D\uDC69\uD83C[\uDFFB-\uDFFE])))?))?|\uDD75(?:\uD83C[\uDFFB-\uDFFF]|\uFE0F)?(?:\u200D[\u2640\u2642]\uFE0F?)?|\uDE2E(?:\u200D\uD83D\uDCA8)?|\uDE35(?:\u200D\uD83D\uDCAB)?|\uDE36(?:\u200D\uD83C\uDF2B\uFE0F?)?|\uDE42(?:\u200D[\u2194\u2195]\uFE0F?)?|\uDEB6(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?)|\uD83E(?:[\uDD0C\uDD0F\uDD18-\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5\uDEC3-\uDEC5\uDEF0\uDEF2-\uDEF8](?:\uD83C[\uDFFB-\uDFFF])?|[\uDD26\uDD35\uDD37-\uDD39\uDD3C-\uDD3E\uDDB8\uDDB9\uDDCD\uDDCF\uDDD4\uDDD6-\uDDDD](?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDDDE\uDDDF](?:\u200D[\u2640\u2642]\uFE0F?)?|[\uDD0D\uDD0E\uDD10-\uDD17\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCC\uDDD0\uDDE0-\uDDFF\uDE70-\uDE7C\uDE80-\uDE8A\uDE8E-\uDEC2\uDEC6\uDEC8\uDECD-\uDEDC\uDEDF-\uDEEA\uDEEF]|\uDDCE(?:\uD83C[\uDFFB-\uDFFF])?(?:\u200D(?:[\u2640\u2642]\uFE0F?(?:\u200D\u27A1\uFE0F?)?|\u27A1\uFE0F?))?|\uDDD1(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1|\uDDD1\u200D\uD83E\uDDD2(?:\u200D\uD83E\uDDD2)?|\uDDD2(?:\u200D\uD83E\uDDD2)?))|\uD83C(?:\uDFFB(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFC-\uDFFF])))?|\uDFFC(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFD-\uDFFF])))?|\uDFFD(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])))?|\uDFFE(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFD\uDFFF])))?|\uDFFF(?:\u200D(?:[\u2695\u2696\u2708]\uFE0F?|\u2764\uFE0F?\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE]|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D(?:[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uDC30\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])|\uD83E(?:[\uDDAF\uDDBC\uDDBD](?:\u200D\u27A1\uFE0F?)?|[\uDDB0-\uDDB3\uDE70]|\uDD1D\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFF]|\uDEEF\u200D\uD83E\uDDD1\uD83C[\uDFFB-\uDFFE])))?))?|\uDEF1(?:\uD83C(?:\uDFFB(?:\u200D\uD83E\uDEF2\uD83C[\uDFFC-\uDFFF])?|\uDFFC(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFD-\uDFFF])?|\uDFFD(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])?|\uDFFE(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFD\uDFFF])?|\uDFFF(?:\u200D\uD83E\uDEF2\uD83C[\uDFFB-\uDFFE])?))?)/g;const z=new Intl.Segmenter,H=/^\p{Default_Ignorable_Code_Point}$/u;function R(t,e={}){if("string"!=typeof t||0===t.length)return 0;const{ambiguousIsNarrow:n=!0,countAnsiEscapeCodes:s=!1}=e;if(s||(t=N(t)),0===t.length)return 0;let i=0;const u={ambiguousAsWide:!n};for(const{segment:e}of z.segment(t)){const t=e.codePointAt(0);t<=31||t>=127&&t<=159||(t>=8203&&t<=8207||65279===t||t>=768&&t<=879||t>=6832&&t<=6911||t>=7616&&t<=7679||t>=8400&&t<=8447||t>=65056&&t<=65071||t>=55296&&t<=57343||t>=65024&&t<=65039||H.test(e)||(L().test(e)?i+=2:i+=W(t,u)))}return i}const T=(t=0)=>e=>`[${e+t}m`,U=(t=0)=>e=>`[${38+t};5;${e}m`,G=(t=0)=>(e,n,s)=>`[${38+t};2;${e};${n};${s}m`,q={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(q.modifier);Object.keys(q.color),Object.keys(q.bgColor);const V=function(){const t=new Map;for(const[e,n]of Object.entries(q)){for(const[e,s]of Object.entries(n))q[e]={open:`[${s[0]}m`,close:`[${s[1]}m`},n[e]=q[e],t.set(s[0],s[1]);Object.defineProperty(q,e,{value:n,enumerable:!1})}return Object.defineProperty(q,"codes",{value:t,enumerable:!1}),q.color.close="",q.bgColor.close="",q.color.ansi=T(),q.color.ansi256=U(),q.color.ansi16m=G(),q.bgColor.ansi=T(10),q.bgColor.ansi256=U(10),q.bgColor.ansi16m=G(10),Object.defineProperties(q,{rgbToAnsi256:{value:(t,e,n)=>t===e&&e===n?t<8?16:t>248?231:Math.round((t-8)/247*24)+232:16+36*Math.round(t/255*5)+6*Math.round(e/255*5)+Math.round(n/255*5),enumerable:!1},hexToRgb:{value(t){const e=/[a-f\d]{6}|[a-f\d]{3}/i.exec(t.toString(16));if(!e)return[0,0,0];let[n]=e;3===n.length&&(n=[...n].map(t=>t+t).join(""));const s=Number.parseInt(n,16);return[s>>16&255,s>>8&255,255&s]},enumerable:!1},hexToAnsi256:{value:t=>q.rgbToAnsi256(...q.hexToRgb(t)),enumerable:!1},ansi256ToAnsi:{value(t){if(t<8)return 30+t;if(t<16)return t-8+90;let e,n,s;if(t>=232)e=(10*(t-232)+8)/255,n=e,s=e;else{const i=(t-=16)%36;e=Math.floor(t/36)/5,n=Math.floor(i/6)/5,s=i%6/5}const i=2*Math.max(e,n,s);if(0===i)return 30;let u=30+(Math.round(s)<<2|Math.round(n)<<1|Math.round(e));return 2===i&&(u+=60),u},enumerable:!1},rgbToAnsi:{value:(t,e,n)=>q.ansi256ToAnsi(q.rgbToAnsi256(t,e,n)),enumerable:!1},hexToAnsi:{value:t=>q.ansi256ToAnsi(q.hexToAnsi256(t)),enumerable:!1}}),q}(),Y=new Set(["","›"]),K="]8;;",J=t=>`${Y.values().next().value}[${t}m`,Q=t=>`${Y.values().next().value}${K}${t}`,Z=(t,e,n)=>{const s=[...e];let i=!1,u=!1,r=R(N(t.at(-1)));for(const[e,o]of s.entries()){const a=R(o);if(r+a<=n?t[t.length-1]+=o:(t.push(o),r=0),Y.has(o)){i=!0;u=s.slice(e+1,e+1+4).join("")===K}i?u?""===o&&(i=!1,u=!1):"m"===o&&(i=!1):(r+=a,r===n&&e<s.length-1&&(t.push(""),r=0))}!r&&t.at(-1).length>0&&t.length>1&&(t[t.length-2]+=t.pop())},X=(t,e,n={})=>{if(!1!==n.trim&&""===t.trim())return"";let s,i,u="";const r=(t=>t.split(" ").map(t=>R(t)))(t);let o=[""];for(const[s,i]of t.split(" ").entries()){!1!==n.trim&&(o[o.length-1]=o.at(-1).trimStart());let t=R(o.at(-1));if(0!==s&&(t>=e&&(!1===n.wordWrap||!1===n.trim)&&(o.push(""),t=0),(t>0||!1===n.trim)&&(o[o.length-1]+=" ",t++)),n.hard&&r[s]>e){const n=e-t,u=1+Math.floor((r[s]-n-1)/e);Math.floor((r[s]-1)/e)<u&&o.push(""),Z(o,i,e);continue}if(t+r[s]>e&&t>0&&r[s]>0){if(!1===n.wordWrap&&t<e){Z(o,i,e);continue}o.push("")}t+r[s]>e&&!1===n.wordWrap?Z(o,i,e):o[o.length-1]+=i}!1!==n.trim&&(o=o.map(t=>(t=>{const e=t.split(" ");let n=e.length;for(;n>0&&!(R(e[n-1])>0);)n--;return n===e.length?t:e.slice(0,n).join(" ")+e.slice(n).join("")})(t)));const a=o.join("\n"),D=[...a];let l=0;for(const[t,e]of D.entries()){if(u+=e,Y.has(e)){const{groups:t}=new RegExp(`(?:\\[(?<code>\\d+)m|\\${K}(?<uri>.*))`).exec(a.slice(l))||{groups:{}};if(void 0!==t.code){const e=Number.parseFloat(t.code);s=39===e?void 0:e}else void 0!==t.uri&&(i=0===t.uri.length?void 0:t.uri)}const n=V.codes.get(Number(s));"\n"===D[t+1]?(i&&(u+=Q("")),s&&n&&(u+=J(n))):"\n"===e&&(s&&n&&(u+=J(s)),i&&(u+=Q(i))),l+=e.length}return u};function tt(t,e,n){return String(t).normalize().replaceAll("\r\n","\n").split("\n").map(t=>X(t,e,n)).join("\n")}
2
- /**
3
- * @license
4
- * Copyright (c) 2016, Contributors
5
- * SPDX-License-Identifier: ISC
6
- */
7
- function et(t){if(t!==t.toLowerCase()&&t!==t.toUpperCase()||(t=t.toLowerCase()),-1===t.indexOf("-")&&-1===t.indexOf("_"))return t;{let e="",n=!1;const s=t.match(/^-+/);for(let i=s?s[0].length:0;i<t.length;i++){let s=t.charAt(i);n&&(n=!1,s=s.toUpperCase()),0===i||"-"!==s&&"_"!==s?"-"!==s&&"_"!==s&&(e+=s):n=!0}return e}}function nt(t,e){const n=t.toLowerCase();e=e||"-";let s="";for(let i=0;i<t.length;i++){const u=n.charAt(i),r=t.charAt(i);s+=u!==r&&i>0?`${e}${n.charAt(i)}`:r}return s}function st(t){return null!=t&&("number"==typeof t||(!!/^0x[0-9a-f]+$/i.test(t)||!/^0[^.]/.test(t)&&/^[-]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(t)))}
8
- /**
9
- * @license
10
- * Copyright (c) 2016, Contributors
11
- * SPDX-License-Identifier: ISC
12
- */
13
- /**
14
- * @license
15
- * Copyright (c) 2016, Contributors
16
- * SPDX-License-Identifier: ISC
17
- */
18
- var it;
19
- /**
20
- * @license
21
- * Copyright (c) 2016, Contributors
22
- * SPDX-License-Identifier: ISC
23
- */
24
- let ut;!function(t){t.BOOLEAN="boolean",t.STRING="string",t.NUMBER="number",t.ARRAY="array"}(it||(it={}));function rt(t){return void 0!==t?t+1:1}function ot(t){return"__proto__"===t?"___proto___":t}
25
- /**
26
- * @fileoverview Main entrypoint for libraries using yargs-parser in Node.js
27
- *
28
- * @license
29
- * Copyright (c) 2016, Contributors
30
- * SPDX-License-Identifier: ISC
31
- */
32
- var at,Dt,lt;const ct=process&&process.env&&process.env.YARGS_MIN_NODE_VERSION?Number(process.env.YARGS_MIN_NODE_VERSION):20,ht=null!==(Dt=null===(at=null===process||void 0===process?void 0:process.versions)||void 0===at?void 0:at.node)&&void 0!==Dt?Dt:null===(lt=null===process||void 0===process?void 0:process.version)||void 0===lt?void 0:lt.slice(1);if(ht){if(Number(ht.match(/^([^.]+)/)[1])<ct)throw Error(`yargs parser supports a minimum Node.js version of ${ct}. Read our version support policy: https://github.com/yargs/yargs-parser#supported-nodejs-versions`)}const ft=process?process.env:{},dt=C?C(import.meta.url):void 0,pt=new class{constructor(t){ut=t}parse(t,e){const n=Object.assign({alias:void 0,array:void 0,boolean:void 0,config:void 0,configObjects:void 0,configuration:void 0,coerce:void 0,count:void 0,default:void 0,envPrefix:void 0,narg:void 0,normalize:void 0,string:void 0,number:void 0,__:void 0,key:void 0},e),s=function(t){if(Array.isArray(t))return t.map(t=>"string"!=typeof t?t+"":t);t=t.trim();let e=0,n=null,s=null,i=null;const u=[];for(let r=0;r<t.length;r++)n=s,s=t.charAt(r)," "!==s||i?(s===i?i=null:"'"!==s&&'"'!==s||i||(i=s),u[e]||(u[e]=""),u[e]+=s):" "!==n&&e++;return u}(t),i="string"==typeof t,u=function(t){const e=[],n=Object.create(null);let s=!0;Object.keys(t).forEach(function(n){e.push([].concat(t[n],n))});for(;s;){s=!1;for(let t=0;t<e.length;t++)for(let n=t+1;n<e.length;n++){if(e[t].filter(function(t){return-1!==e[n].indexOf(t)}).length){e[t]=e[t].concat(e[n]),e.splice(n,1),s=!0;break}}}return e.forEach(function(t){const e=(t=t.filter(function(t,e,n){return n.indexOf(t)===e})).pop();void 0!==e&&"string"==typeof e&&(n[e]=t)}),n}(Object.assign(Object.create(null),n.alias)),r=Object.assign({"boolean-negation":!0,"camel-case-expansion":!0,"combine-arrays":!1,"dot-notation":!0,"duplicate-arguments-array":!0,"flatten-duplicate-arrays":!0,"greedy-arrays":!0,"halt-at-non-option":!1,"nargs-eats-options":!1,"negation-prefix":"no-","parse-numbers":!0,"parse-positional-numbers":!0,"populate--":!1,"set-placeholder-key":!1,"short-option-groups":!0,"strip-aliased":!1,"strip-dashed":!1,"unknown-options-as-args":!1},n.configuration),o=Object.assign(Object.create(null),n.default),a=n.configObjects||[],D=n.envPrefix,l=r["populate--"],c=l?"--":"_",h=Object.create(null),f=Object.create(null),d=n.__||ut.format,p={aliases:Object.create(null),arrays:Object.create(null),bools:Object.create(null),strings:Object.create(null),numbers:Object.create(null),counts:Object.create(null),normalize:Object.create(null),configs:Object.create(null),nargs:Object.create(null),coercions:Object.create(null),keys:[]},g=/^-([0-9]+(\.[0-9]+)?|\.[0-9]+)$/,F=new RegExp("^--"+r["negation-prefix"]+"(.+)");[].concat(n.array||[]).filter(Boolean).forEach(function(t){const e="object"==typeof t?t.key:t,n=Object.keys(t).map(function(t){return{boolean:"bools",string:"strings",number:"numbers"}[t]}).filter(Boolean).pop();n&&(p[n][e]=!0),p.arrays[e]=!0,p.keys.push(e)}),[].concat(n.boolean||[]).filter(Boolean).forEach(function(t){p.bools[t]=!0,p.keys.push(t)}),[].concat(n.string||[]).filter(Boolean).forEach(function(t){p.strings[t]=!0,p.keys.push(t)}),[].concat(n.number||[]).filter(Boolean).forEach(function(t){p.numbers[t]=!0,p.keys.push(t)}),[].concat(n.count||[]).filter(Boolean).forEach(function(t){p.counts[t]=!0,p.keys.push(t)}),[].concat(n.normalize||[]).filter(Boolean).forEach(function(t){p.normalize[t]=!0,p.keys.push(t)}),"object"==typeof n.narg&&Object.entries(n.narg).forEach(([t,e])=>{"number"==typeof e&&(p.nargs[t]=e,p.keys.push(t))}),"object"==typeof n.coerce&&Object.entries(n.coerce).forEach(([t,e])=>{"function"==typeof e&&(p.coercions[t]=e,p.keys.push(t))}),void 0!==n.config&&(Array.isArray(n.config)||"string"==typeof n.config?[].concat(n.config).filter(Boolean).forEach(function(t){p.configs[t]=!0}):"object"==typeof n.config&&Object.entries(n.config).forEach(([t,e])=>{"boolean"!=typeof e&&"function"!=typeof e||(p.configs[t]=e)})),function(...t){t.forEach(function(t){Object.keys(t||{}).forEach(function(t){p.aliases[t]||(p.aliases[t]=[].concat(u[t]||[]),p.aliases[t].concat(t).forEach(function(e){if(/-/.test(e)&&r["camel-case-expansion"]){const n=et(e);n!==t&&-1===p.aliases[t].indexOf(n)&&(p.aliases[t].push(n),h[n]=!0)}}),p.aliases[t].concat(t).forEach(function(e){if(e.length>1&&/[A-Z]/.test(e)&&r["camel-case-expansion"]){const n=nt(e,"-");n!==t&&-1===p.aliases[t].indexOf(n)&&(p.aliases[t].push(n),h[n]=!0)}}),p.aliases[t].forEach(function(e){p.aliases[e]=[t].concat(p.aliases[t].filter(function(t){return e!==t}))}))})})}(n.key,u,n.default,p.arrays),Object.keys(o).forEach(function(t){(p.aliases[t]||[]).forEach(function(e){o[e]=o[t]})});let m=null;Object.keys(p.counts).find(t=>$(t,p.arrays)?(m=Error(d("Invalid configuration: %s, opts.count excludes opts.array.",t)),!0):!!$(t,p.nargs)&&(m=Error(d("Invalid configuration: %s, opts.count excludes opts.narg.",t)),!0));let C=[];const E=Object.assign(Object.create(null),{_:[]}),y={};for(let t=0;t<s.length;t++){const e=s[t],n=e.replace(/^-{3,}/,"---");let i,u,o,a,D,l;if("--"!==e&&/^-/.test(e)&&I(e))b(e);else{if(n.match(/^---+(=|$)/)){b(e);continue}if(e.match(/^--.+=/)||!r["short-option-groups"]&&e.match(/^-.+=/))a=e.match(/^--?([^=]+)=([\s\S]*)$/),null!==a&&Array.isArray(a)&&a.length>=3&&($(a[1],p.arrays)?t=A(t,a[1],s,a[2]):!1!==$(a[1],p.nargs)?t=v(t,a[1],s,a[2]):B(a[1],a[2],!0));else if(e.match(F)&&r["boolean-negation"])a=e.match(F),null!==a&&Array.isArray(a)&&a.length>=2&&(u=a[1],B(u,!!$(u,p.arrays)&&[!1]));else if(e.match(/^--.+/)||!r["short-option-groups"]&&e.match(/^-[^-]+/))a=e.match(/^--?(.+)/),null!==a&&Array.isArray(a)&&a.length>=2&&(u=a[1],$(u,p.arrays)?t=A(t,u,s):!1!==$(u,p.nargs)?t=v(t,u,s):(D=s[t+1],void 0===D||D.match(/^-/)&&!D.match(g)||$(u,p.bools)||$(u,p.counts)?/^(true|false)$/.test(D)?(B(u,D),t++):B(u,N(u)):(B(u,D),t++)));else if(e.match(/^-.\..+=/))a=e.match(/^-([^=]+)=([\s\S]*)$/),null!==a&&Array.isArray(a)&&a.length>=3&&B(a[1],a[2]);else if(e.match(/^-.\..+/)&&!e.match(g))D=s[t+1],a=e.match(/^-(.\..+)/),null!==a&&Array.isArray(a)&&a.length>=2&&(u=a[1],void 0===D||D.match(/^-/)||$(u,p.bools)||$(u,p.counts)?B(u,N(u)):(B(u,D),t++));else if(e.match(/^-[^-]+/)&&!e.match(g)){o=e.slice(1,-1).split(""),i=!1;for(let n=0;n<o.length;n++){if(D=e.slice(n+2),o[n+1]&&"="===o[n+1]){l=e.slice(n+3),u=o[n],$(u,p.arrays)?t=A(t,u,s,l):!1!==$(u,p.nargs)?t=v(t,u,s,l):B(u,l),i=!0;break}if("-"!==D){if(/[A-Za-z]/.test(o[n])&&/^-?\d+(\.\d*)?(e-?\d+)?$/.test(D)&&!1===$(D,p.bools)){B(o[n],D),i=!0;break}if(o[n+1]&&o[n+1].match(/\W/)){B(o[n],D),i=!0;break}B(o[n],N(o[n]))}else B(o[n],D)}u=e.slice(-1)[0],i||"-"===u||($(u,p.arrays)?t=A(t,u,s):!1!==$(u,p.nargs)?t=v(t,u,s):(D=s[t+1],void 0===D||/^(-|--)[^-]/.test(D)&&!D.match(g)||$(u,p.bools)||$(u,p.counts)?/^(true|false)$/.test(D)?(B(u,D),t++):B(u,N(u)):(B(u,D),t++)))}else if(e.match(/^-[0-9]$/)&&e.match(g)&&$(e.slice(1),p.bools))u=e.slice(1),B(u,N(u));else{if("--"===e){C=s.slice(t+1);break}if(r["halt-at-non-option"]){C=s.slice(t);break}b(e)}}}function b(t){const e=j("_",t);"string"!=typeof e&&"number"!=typeof e||E._.push(e)}function v(t,e,n,s){let i,u=$(e,p.nargs);if(u="number"!=typeof u||isNaN(u)?1:u,0===u)return W(s)||(m=Error(d("Argument unexpected for: %s",e))),B(e,N(e)),t;let o=W(s)?0:1;if(r["nargs-eats-options"])n.length-(t+1)+o<u&&(m=Error(d("Not enough arguments following: %s",e))),o=u;else{for(i=t+1;i<n.length&&(!n[i].match(/^-[^0-9]/)||n[i].match(g)||I(n[i]));i++)o++;o<u&&(m=Error(d("Not enough arguments following: %s",e)))}let a=Math.min(o,u);for(!W(s)&&a>0&&(B(e,s),a--),i=t+1;i<a+t+1;i++)B(e,n[i]);return t+a}function A(t,e,n,s){let u=[],a=s||n[t+1];const D=$(e,p.nargs);if($(e,p.bools)&&!/^(true|false)$/.test(a))u.push(!0);else if(W(a)||W(s)&&/^-/.test(a)&&!g.test(a)&&!I(a)){if(void 0!==o[e]){const t=o[e];u=Array.isArray(t)?t:[t]}}else{W(s)||u.push(O(e,s,!0));for(let s=t+1;s<n.length&&!(!r["greedy-arrays"]&&u.length>0||D&&"number"==typeof D&&u.length>=D)&&(a=n[s],!/^-/.test(a)||g.test(a)||I(a));s++)t=s,u.push(O(e,a,i))}return"number"==typeof D&&(D&&u.length<D||isNaN(D)&&0===u.length)&&(m=Error(d("Not enough arguments following: %s",e))),B(e,u),t}function B(t,e,n=i){if(/-/.test(t)&&r["camel-case-expansion"]){const e=t.split(".").map(function(t){return et(t)}).join(".");w(t,e)}const s=O(t,e,n),u=t.split(".");if(S(E,u,s),p.aliases[t]&&p.aliases[t].forEach(function(t){const e=t.split(".");S(E,e,s)}),u.length>1&&r["dot-notation"]&&(p.aliases[u[0]]||[]).forEach(function(e){let n=e.split(".");const i=[].concat(u);i.shift(),n=n.concat(i),(p.aliases[t]||[]).includes(n.join("."))||S(E,n,s)}),$(t,p.normalize)&&!$(t,p.arrays)){[t].concat(p.aliases[t]||[]).forEach(function(t){Object.defineProperty(y,t,{enumerable:!0,get:()=>e,set(t){e="string"==typeof t?ut.normalize(t):t}})})}}function w(t,e){p.aliases[t]&&p.aliases[t].length||(p.aliases[t]=[e],h[e]=!0),p.aliases[e]&&p.aliases[e].length||w(e,t)}function O(t,e,n){n&&(e=function(t){return"string"!=typeof t||"'"!==t[0]&&'"'!==t[0]||t[t.length-1]!==t[0]?t:t.substring(1,t.length-1)}(e)),($(t,p.bools)||$(t,p.counts))&&"string"==typeof e&&(e="true"===e);let s=Array.isArray(e)?e.map(function(e){return j(t,e)}):j(t,e);return $(t,p.counts)&&(W(s)||"boolean"==typeof s)&&(s=rt()),$(t,p.normalize)&&$(t,p.arrays)&&(s=Array.isArray(e)?e.map(t=>ut.normalize(t)):ut.normalize(e)),s}function j(t,e){if(!r["parse-positional-numbers"]&&"_"===t)return e;if(!$(t,p.strings)&&!$(t,p.bools)&&!Array.isArray(e)){(st(e)&&r["parse-numbers"]&&Number.isSafeInteger(Math.floor(parseFloat(`${e}`)))||!W(e)&&$(t,p.numbers))&&(e=Number(e))}return e}function x(t,e){Object.keys(t).forEach(function(n){const s=t[n],i=e?e+"."+n:n;"object"==typeof s&&null!==s&&!Array.isArray(s)&&r["dot-notation"]?x(s,i):(!M(E,i.split("."))||$(i,p.arrays)&&r["combine-arrays"])&&B(i,s)})}function k(t,e){if(void 0===D)return;const n="string"==typeof D?D:"",s=ut.env();Object.keys(s).forEach(function(i){if(""===n||0===i.lastIndexOf(n,0)){const u=i.split("__").map(function(t,e){return 0===e&&(t=t.substring(n.length)),et(t)});(e&&p.configs[u.join(".")]||!e)&&!M(t,u)&&B(u.join("."),s[i])}})}function _(t,e,n,s=!1){Object.keys(n).forEach(function(i){M(t,i.split("."))||(S(t,i.split("."),n[i]),s&&(f[i]=!0),(e[i]||[]).forEach(function(e){M(t,e.split("."))||S(t,e.split("."),n[i])}))})}function M(t,e){let n=t;r["dot-notation"]||(e=[e.join(".")]),e.slice(0,-1).forEach(function(t){n=n[t]||{}});const s=e[e.length-1];return"object"==typeof n&&s in n}function S(t,e,n){let s=t;r["dot-notation"]||(e=[e.join(".")]),e.slice(0,-1).forEach(function(t){t=ot(t),"object"==typeof s&&void 0===s[t]&&(s[t]={}),"object"!=typeof s[t]||Array.isArray(s[t])?(Array.isArray(s[t])?s[t].push({}):s[t]=[s[t],{}],s=s[t][s[t].length-1]):s=s[t]});const i=ot(e[e.length-1]),u=$(e.join("."),p.arrays),o=Array.isArray(n);let a=r["duplicate-arguments-array"];!a&&$(i,p.nargs)&&(a=!0,(!W(s[i])&&1===p.nargs[i]||Array.isArray(s[i])&&s[i].length===p.nargs[i])&&(s[i]=void 0)),n===rt()?s[i]=rt(s[i]):Array.isArray(s[i])?a&&u&&o?s[i]=r["flatten-duplicate-arrays"]?s[i].concat(n):(Array.isArray(s[i][0])?s[i]:[s[i]]).concat([n]):a||Boolean(u)!==Boolean(o)?s[i]=s[i].concat([n]):s[i]=n:void 0===s[i]&&u?s[i]=o?n:[n]:!a||void 0===s[i]||$(i,p.counts)||$(i,p.bools)?s[i]=n:s[i]=[s[i],n]}function $(t,e){const n=[].concat(p.aliases[t]||[],t),s=Object.keys(e),i=n.find(t=>s.includes(t));return!!i&&e[i]}function P(t){const e=Object.keys(p);return[].concat(e.map(t=>p[t])).some(function(e){return Array.isArray(e)?e.includes(t):e[t]})}function I(t){return r["unknown-options-as-args"]&&function(t){if(t=t.replace(/^-{3,}/,"--"),t.match(g))return!1;if(function(t){if(t.match(g)||!t.match(/^-[^-]+/))return!1;let e,n=!0;const s=t.slice(1).split("");for(let i=0;i<s.length;i++){if(e=t.slice(i+2),!P(s[i])){n=!1;break}if(s[i+1]&&"="===s[i+1]||"-"===e||/[A-Za-z]/.test(s[i])&&/^-?\d+(\.\d*)?(e-?\d+)?$/.test(e)||s[i+1]&&s[i+1].match(/\W/))break}return n}(t))return!1;return!function(t,...e){return[].concat(...e).some(function(e){const n=t.match(e);return n&&P(n[1])})}(t,/^-+([^=]+?)=[\s\S]*$/,F,/^-+([^=]+?)$/,/^-+([^=]+?)-$/,/^-+([^=]+?\d+)$/,/^-+([^=]+?)\W+.*$/)}(t)}function N(t){return $(t,p.bools)||$(t,p.counts)||!(`${t}`in o)?(e=function(t){let e=it.BOOLEAN;return $(t,p.strings)?e=it.STRING:$(t,p.numbers)?e=it.NUMBER:$(t,p.bools)?e=it.BOOLEAN:$(t,p.arrays)&&(e=it.ARRAY),e}(t),{[it.BOOLEAN]:!0,[it.STRING]:"",[it.NUMBER]:void 0,[it.ARRAY]:[]}[e]):o[t];var e}function W(t){return void 0===t}return k(E,!0),k(E,!1),function(t){const e=Object.create(null);_(e,p.aliases,o),Object.keys(p.configs).forEach(function(n){const s=t[n]||e[n];if(s)try{let t=null;const e=ut.resolve(ut.cwd(),s),i=p.configs[n];if("function"==typeof i){try{t=i(e)}catch(e){t=e}if(t instanceof Error)return void(m=t)}else t=ut.require(e);x(t)}catch(e){"PermissionDenied"===e.name?m=e:t[n]&&(m=Error(d("Invalid JSON config file: %s",s)))}})}(E),void 0!==a&&a.forEach(function(t){x(t)}),_(E,p.aliases,o,!0),function(t){let e;const n=new Set;Object.keys(t).forEach(function(s){if(!n.has(s)&&(e=$(s,p.coercions),"function"==typeof e))try{const i=j(s,e(t[s]));[].concat(p.aliases[s]||[],s).forEach(e=>{n.add(e),t[e]=i})}catch(t){m=t}})}(E),r["set-placeholder-key"]&&function(t){p.keys.forEach(e=>{~e.indexOf(".")||void 0===t[e]&&(t[e]=void 0)})}(E),Object.keys(p.counts).forEach(function(t){M(E,t.split("."))||B(t,0)}),l&&C.length&&(E[c]=[]),C.forEach(function(t){E[c].push(t)}),r["camel-case-expansion"]&&r["strip-dashed"]&&Object.keys(E).filter(t=>"--"!==t&&t.includes("-")).forEach(t=>{delete E[t]}),r["strip-aliased"]&&[].concat(...Object.keys(u).map(t=>u[t])).forEach(t=>{r["camel-case-expansion"]&&t.includes("-")&&delete E[t.split(".").map(t=>et(t)).join(".")],delete E[t]}),{aliases:Object.assign({},p.aliases),argv:Object.assign(y,E),configuration:r,defaulted:Object.assign({},f),error:m,newAliases:Object.assign({},h)}}}({cwd:process.cwd,env:()=>ft,format:g,normalize:a,resolve:r,require:t=>{if(void 0!==dt)return dt(t);if(t.match(/\.json$/))return JSON.parse(s(t,"utf8"));throw Error("only .json config files are supported in ESM")}}),gt=function(t,e){return pt.parse(t.slice(),e).argv};function Ft(){return process.versions.electron&&!process.defaultApp?0:1}gt.detailed=function(t,e){return pt.parse(t.slice(),e)},gt.camelCase=et,gt.decamelize=nt,gt.looksLikeNumber=st;var mt={fs:{readFileSync:s,writeFile:i},format:g,resolve:r,exists:t=>{try{return e(t).isFile()}catch(t){return!1}}};let Ct;class Et{constructor(t){t=t||{},this.directory=t.directory||"./locales",this.updateFiles="boolean"!=typeof t.updateFiles||t.updateFiles,this.locale=t.locale||"en",this.fallbackToLanguage="boolean"!=typeof t.fallbackToLanguage||t.fallbackToLanguage,this.cache=Object.create(null),this.writeQueue=[]}__(...t){if("string"!=typeof arguments[0])return this._taggedLiteral(arguments[0],...arguments);const e=t.shift();let n=function(){};return"function"==typeof t[t.length-1]&&(n=t.pop()),n=n||function(){},this.cache[this.locale]||this._readLocaleFile(),!this.cache[this.locale][e]&&this.updateFiles?(this.cache[this.locale][e]=e,this._enqueueWrite({directory:this.directory,locale:this.locale,cb:n})):n(),Ct.format.apply(Ct.format,[this.cache[this.locale][e]||e].concat(t))}__n(){const t=Array.prototype.slice.call(arguments),e=t.shift(),n=t.shift(),s=t.shift();let i=function(){};"function"==typeof t[t.length-1]&&(i=t.pop()),this.cache[this.locale]||this._readLocaleFile();let u=1===s?e:n;if(this.cache[this.locale][e]){u=this.cache[this.locale][e][1===s?"one":"other"]}!this.cache[this.locale][e]&&this.updateFiles?(this.cache[this.locale][e]={one:e,other:n},this._enqueueWrite({directory:this.directory,locale:this.locale,cb:i})):i();const r=[u];return~u.indexOf("%d")&&r.push(s),Ct.format.apply(Ct.format,r.concat(t))}setLocale(t){this.locale=t}getLocale(){return this.locale}updateLocale(t){this.cache[this.locale]||this._readLocaleFile();for(const e in t)Object.prototype.hasOwnProperty.call(t,e)&&(this.cache[this.locale][e]=t[e])}_taggedLiteral(t,...e){let n="";return t.forEach(function(t,s){const i=e[s+1];n+=t,void 0!==i&&(n+="%s")}),this.__.apply(this,[n].concat([].slice.call(e,1)))}_enqueueWrite(t){this.writeQueue.push(t),1===this.writeQueue.length&&this._processWriteQueue()}_processWriteQueue(){const t=this,e=this.writeQueue[0],n=e.directory,s=e.locale,i=e.cb,u=this._resolveLocaleFile(n,s),r=JSON.stringify(this.cache[s],null,2);Ct.fs.writeFile(u,r,"utf-8",function(e){t.writeQueue.shift(),t.writeQueue.length>0&&t._processWriteQueue(),i(e)})}_readLocaleFile(){let t={};const e=this._resolveLocaleFile(this.directory,this.locale);try{Ct.fs.readFileSync&&(t=JSON.parse(Ct.fs.readFileSync(e,"utf-8")))}catch(n){if(n instanceof SyntaxError&&(n.message="syntax error in "+e),"ENOENT"!==n.code)throw n;t={}}this.cache[this.locale]=t}_resolveLocaleFile(t,e){let n=Ct.resolve(t,"./",e+".json");if(this.fallbackToLanguage&&!this._fileExistsSync(n)&&~e.lastIndexOf("_")){const s=Ct.resolve(t,"./",e.split("_")[0]+".json");this._fileExistsSync(s)&&(n=s)}return n}_fileExistsSync(t){return Ct.exists(t)}}var yt,bt;var vt=E(bt?yt:(bt=1,yt=function(t){if(void 0===t&&(t=2),t>=Error.stackTraceLimit)throw new TypeError("getCallerFile(position) requires position be less then Error.stackTraceLimit but position was: `"+t+"` and Error.stackTraceLimit was: `"+Error.stackTraceLimit+"`");var e=Error.prepareStackTrace;Error.prepareStackTrace=function(t,e){return e};var n=(new Error).stack;if(Error.prepareStackTrace=e,null!==n&&"object"==typeof n)return n[t]?n[t].getFileName():void 0}));const At=m(import.meta.url),Bt=At.substring(0,At.lastIndexOf("node_modules")),wt=C(import.meta.url);var Ot,jt={assert:{notStrictEqual:p,strictEqual:d},cliui:function(t){return function(t,e){return P=e,new S({width:(null==t?void 0:t.width)||("object"==typeof process&&process.stdout&&process.stdout.columns?process.stdout.columns:80),wrap:null==t?void 0:t.wrap})}(t,{stringWidth:R,stripAnsi:N,wrap:tt})},findUp:function(t,s){let i,u=r(".",t);for(e(u).isDirectory()||(u=o(u));;){if(i=s(u,n(u)),i)return r(u,i);if(u=o(i=u),i===u)break}},getEnv:t=>process.env[t],inspect:F,getProcessArgvBin:function(){return process.argv[Ft()]},mainFilename:Bt||process.cwd(),Parser:gt,path:{basename:h,dirname:o,extname:c,relative:l,resolve:r,join:D},process:{argv:()=>process.argv,cwd:process.cwd,emitWarning:(t,e)=>process.emitWarning(t,e),execPath:()=>process.execPath,exit:t=>{process.exit(t)},nextTick:process.nextTick,stdColumns:void 0!==process.stdout.columns?process.stdout.columns:null},readFileSync:s,readdirSync:n,require:wt,getCallerFile:()=>{const t=vt(3);return t.match(/^file:\/\//)?m(t):t},stringWidth:R,y18n:(Ot={directory:r(At,"../../../locales"),updateFiles:!1},function(t,e){Ct=e;const n=new Et(t);return{__:n.__.bind(n),__n:n.__n.bind(n),setLocale:n.setLocale.bind(n),getLocale:n.getLocale.bind(n),updateLocale:n.updateLocale.bind(n),locale:n.locale}}(Ot,mt))};function xt(t,e,n,s){n.assert.notStrictEqual(t,e,s)}function kt(t,e){e.assert.strictEqual(typeof t,"string")}function _t(t){return Object.keys(t)}function Mt(t){return!!t&&!!t.then&&"function"==typeof t.then}class St extends Error{constructor(t){super(t||"yargs error"),this.name="YError",Error.captureStackTrace&&Error.captureStackTrace(this,St)}}function $t(t){const e=t.replace(/\s{2,}/g," ").split(/\s+(?![^[]*]|[^<]*>)/),n=/\.*[\][<>]/g,s=e.shift();if(!s)throw new Error(`No command found in: ${t}`);const i={cmd:s.replace(n,""),demanded:[],optional:[]};return e.forEach((t,s)=>{let u=!1;t=t.replace(/\s/g,""),/\.+[\]>]/.test(t)&&s===e.length-1&&(u=!0),/^\[/.test(t)?i.optional.push({cmd:t.replace(n,"").split("|"),variadic:u}):i.demanded.push({cmd:t.replace(n,"").split("|"),variadic:u})}),i}const Pt=["first","second","third","fourth","fifth","sixth"];function It(t,e,n){try{let s=0;const[i,u,r]="object"==typeof t?[{demanded:[],optional:[]},t,e]:[$t(`cmd ${t}`),e,n],o=[].slice.call(u);for(;o.length&&void 0===o[o.length-1];)o.pop();const a=r||o.length;if(a<i.demanded.length)throw new St(`Not enough arguments provided. Expected ${i.demanded.length} but received ${o.length}.`);const D=i.demanded.length+i.optional.length;if(a>D)throw new St(`Too many arguments provided. Expected max ${D} but received ${a}.`);i.demanded.forEach(t=>{const e=Nt(o.shift());0===t.cmd.filter(t=>t===e||"*"===t).length&&Wt(e,t.cmd,s),s+=1}),i.optional.forEach(t=>{if(0===o.length)return;const e=Nt(o.shift());0===t.cmd.filter(t=>t===e||"*"===t).length&&Wt(e,t.cmd,s),s+=1})}catch(t){console.warn(t.stack)}}function Nt(t){return Array.isArray(t)?"array":null===t?"null":typeof t}function Wt(t,e,n){throw new St(`Invalid ${Pt[n]||"manyith"} argument. Expected ${e.join(" or ")} but received ${t}.`)}class Lt{constructor(t){this.globalMiddleware=[],this.frozens=[],this.yargs=t}addMiddleware(t,e,n=!0,s=!1){if(It("<array|function> [boolean] [boolean] [boolean]",[t,e,n],arguments.length),Array.isArray(t)){for(let s=0;s<t.length;s++){if("function"!=typeof t[s])throw Error("middleware must be a function");const i=t[s];i.applyBeforeValidation=e,i.global=n}Array.prototype.push.apply(this.globalMiddleware,t)}else if("function"==typeof t){const i=t;i.applyBeforeValidation=e,i.global=n,i.mutates=s,this.globalMiddleware.push(t)}return this.yargs}addCoerceMiddleware(t,e){const n=this.yargs.getAliases();return this.globalMiddleware=this.globalMiddleware.filter(t=>{const s=[...n[e]||[],e];return!t.option||!s.includes(t.option)}),t.option=e,this.addMiddleware(t,!0,!0,!0)}getMiddleware(){return this.globalMiddleware}freeze(){this.frozens.push([...this.globalMiddleware])}unfreeze(){const t=this.frozens.pop();void 0!==t&&(this.globalMiddleware=t)}reset(){this.globalMiddleware=this.globalMiddleware.filter(t=>t.global)}}function zt(t,e,n,s){return n.reduce((t,n)=>{if(n.applyBeforeValidation!==s)return t;if(n.mutates){if(n.applied)return t;n.applied=!0}if(Mt(t))return t.then(t=>Promise.all([t,n(t,e)])).then(([t,e])=>Object.assign(t,e));{const s=n(t,e);return Mt(s)?s.then(e=>Object.assign(t,e)):Object.assign(t,s)}},t)}function Ht(t,e,n=t=>{throw t}){try{const n="function"==typeof t?t():t;return Mt(n)?n.then(t=>e(t)):e(n)}catch(t){return n(t)}}const Rt=/(^\*)|(^\$0)/;class Tt{constructor(t,e,n,s){this.requireCache=new Set,this.handlers={},this.aliasMap={},this.frozens=[],this.shim=s,this.usage=t,this.globalMiddleware=n,this.validation=e}addDirectory(t,e,n,s){s=s||{},this.requireCache.add(n);const i=this.shim.path.resolve(this.shim.path.dirname(n),t),u=this.shim.readdirSync(i,{recursive:!!s.recurse});Array.isArray(s.extensions)||(s.extensions=["js"]);const r="function"==typeof s.visit?s.visit:t=>t;for(const t of u){const n=t.toString();if(s.exclude){let t=!1;if(t="function"==typeof s.exclude?s.exclude(n):s.exclude.test(n),t)continue}if(s.include){let t=!1;if(t="function"==typeof s.include?s.include(n):s.include.test(n),!t)continue}let u=!1;for(const t of s.extensions)n.endsWith(t)&&(u=!0);if(u){const t=this.shim.path.join(i,n),s=e(t),u=Object.create(null,Object.getOwnPropertyDescriptors({...s}));if(r(u,t,n)){if(this.requireCache.has(t))continue;this.requireCache.add(t),u.command||(u.command=this.shim.path.basename(t,this.shim.path.extname(t))),this.addHandler(u)}}}}addHandler(t,e,n,s,i,u){let r=[];const o=function(t){return t?t.map(t=>(t.applyBeforeValidation=!1,t)):[]}(i);if(s=s||(()=>{}),Array.isArray(t))if(function(t){return t.every(t=>"string"==typeof t)}(t))[t,...r]=t;else for(const e of t)this.addHandler(e);else{if(function(t){return"object"==typeof t&&!Array.isArray(t)}(t)){let e=Array.isArray(t.command)||"string"==typeof t.command?t.command:null;if(null===e)throw new Error(`No command name given for module: ${this.shim.inspect(t)}`);return t.aliases&&(e=[].concat(e).concat(t.aliases)),void this.addHandler(e,this.extractDesc(t),t.builder,t.handler,t.middlewares,t.deprecated)}if(Ut(n))return void this.addHandler([t].concat(r),e,n.builder,n.handler,n.middlewares,n.deprecated)}if("string"==typeof t){const i=$t(t);r=r.map(t=>$t(t).cmd);let a=!1;const D=[i.cmd].concat(r).filter(t=>!Rt.test(t)||(a=!0,!1));0===D.length&&a&&D.push("$0"),a&&(i.cmd=D[0],r=D.slice(1),t=t.replace(Rt,i.cmd)),r.forEach(t=>{this.aliasMap[t]=i.cmd}),!1!==e&&this.usage.command(t,e,a,r,u),this.handlers[i.cmd]={original:t,description:e,handler:s,builder:n||{},middlewares:o,deprecated:u,demanded:i.demanded,optional:i.optional},a&&(this.defaultCommand=this.handlers[i.cmd])}}getCommandHandlers(){return this.handlers}getCommands(){return Object.keys(this.handlers).concat(Object.keys(this.aliasMap))}hasDefaultCommand(){return!!this.defaultCommand}runCommand(t,e,n,s,i,u){const r=this.handlers[t]||this.handlers[this.aliasMap[t]]||this.defaultCommand,o=e.getInternalMethods().getContext(),a=o.commands.slice(),D=!t;t&&(o.commands.push(t),o.fullCommands.push(r.original));const l=this.applyBuilderUpdateUsageAndParse(D,r,e,n.aliases,a,s,i,u);return Mt(l)?l.then(t=>this.applyMiddlewareAndGetResult(D,r,t.innerArgv,o,i,t.aliases,e)):this.applyMiddlewareAndGetResult(D,r,l.innerArgv,o,i,l.aliases,e)}applyBuilderUpdateUsageAndParse(t,e,n,s,i,u,r,o){const a=e.builder;let D=n;if(Gt(a)){n.getInternalMethods().getUsageInstance().freeze();const l=a(n.getInternalMethods().reset(s),o);if(Mt(l))return l.then(s=>{var o;return D=(o=s)&&"function"==typeof o.getInternalMethods?s:n,this.parseAndUpdateUsage(t,e,D,i,u,r)})}else(function(t){return"object"==typeof t})(a)&&(n.getInternalMethods().getUsageInstance().freeze(),D=n.getInternalMethods().reset(s),Object.keys(e.builder).forEach(t=>{D.option(t,a[t])}));return this.parseAndUpdateUsage(t,e,D,i,u,r)}parseAndUpdateUsage(t,e,n,s,i,u){t&&n.getInternalMethods().getUsageInstance().unfreeze(!0),this.shouldUpdateUsage(n)&&n.getInternalMethods().getUsageInstance().usage(this.usageFromParentCommandsCommandHandler(s,e),e.description);const r=n.getInternalMethods().runYargsParserAndExecuteCommands(null,void 0,!0,i,u);return Mt(r)?r.then(t=>({aliases:n.parsed.aliases,innerArgv:t})):{aliases:n.parsed.aliases,innerArgv:r}}shouldUpdateUsage(t){return!t.getInternalMethods().getUsageInstance().getUsageDisabled()&&0===t.getInternalMethods().getUsageInstance().getUsage().length}usageFromParentCommandsCommandHandler(t,e){const n=Rt.test(e.original)?e.original.replace(Rt,"").trim():e.original,s=t.filter(t=>!Rt.test(t));return s.push(n),`$0 ${s.join(" ")}`}handleValidationAndGetResult(t,e,n,s,i,u,r,o){if(!u.getInternalMethods().getHasOutput()){const e=u.getInternalMethods().runValidation(i,o,u.parsed.error,t);n=Ht(n,t=>(e(t),t))}if(e.handler&&!u.getInternalMethods().getHasOutput()){u.getInternalMethods().setHasOutput();const s=!!u.getOptions().configuration["populate--"];u.getInternalMethods().postProcess(n,s,!1,!1),n=Ht(n=zt(n,u,r,!1),t=>{const n=e.handler(t);return Mt(n)?n.then(()=>t):t}),t||u.getInternalMethods().getUsageInstance().cacheHelpMessage(),Mt(n)&&!u.getInternalMethods().hasParseCallback()&&n.catch(t=>{try{u.getInternalMethods().getUsageInstance().fail(null,t)}catch(t){}})}return t||(s.commands.pop(),s.fullCommands.pop()),n}applyMiddlewareAndGetResult(t,e,n,s,i,u,r){let o={};if(i)return n;r.getInternalMethods().getHasOutput()||(o=this.populatePositionals(e,n,s,r));const a=this.globalMiddleware.getMiddleware().slice(0).concat(e.middlewares),D=zt(n,r,a,!0);return Mt(D)?D.then(n=>this.handleValidationAndGetResult(t,e,n,s,u,r,a,o)):this.handleValidationAndGetResult(t,e,D,s,u,r,a,o)}populatePositionals(t,e,n,s){e._=e._.slice(n.commands.length);const i=t.demanded.slice(0),u=t.optional.slice(0),r={};for(this.validation.positionalCount(i.length,e._.length);i.length;){const t=i.shift();this.populatePositional(t,e,r)}for(;u.length;){const t=u.shift();this.populatePositional(t,e,r)}return e._=n.commands.concat(e._.map(t=>""+t)),this.postProcessPositionals(e,r,this.cmdToParseOptions(t.original),s),r}populatePositional(t,e,n){const s=t.cmd[0];t.variadic?n[s]=e._.splice(0).map(String):e._.length&&(n[s]=[String(e._.shift())])}cmdToParseOptions(t){const e={array:[],default:{},alias:{},demand:{}},n=$t(t);return n.demanded.forEach(t=>{const[n,...s]=t.cmd;t.variadic&&(e.array.push(n),e.default[n]=[]),e.alias[n]=s,e.demand[n]=!0}),n.optional.forEach(t=>{const[n,...s]=t.cmd;t.variadic&&(e.array.push(n),e.default[n]=[]),e.alias[n]=s}),e}postProcessPositionals(t,e,n,s){const i=Object.assign({},s.getOptions());i.default=Object.assign(n.default,i.default);for(const t of Object.keys(n.alias))i.alias[t]=(i.alias[t]||[]).concat(n.alias[t]);i.array=i.array.concat(n.array),i.config={};const u=[];if(Object.keys(e).forEach(t=>{e[t].map(e=>{i.configuration["unknown-options-as-args"]&&(i.key[t]=!0),u.push(`--${t}`),u.push(e)})}),!u.length)return;const r=Object.assign({},i.configuration,{"populate--":!1}),o=this.shim.Parser.detailed(u,Object.assign({},i,{configuration:r}));if(o.error)s.getInternalMethods().getUsageInstance().fail(o.error.message,o.error);else{const n=Object.keys(e);Object.keys(e).forEach(t=>{n.push(...o.aliases[t])}),Object.keys(o.argv).forEach(i=>{n.includes(i)&&(e[i]||(e[i]=o.argv[i]),!this.isInConfigs(s,i)&&!this.isDefaulted(s,i)&&Object.prototype.hasOwnProperty.call(t,i)&&Object.prototype.hasOwnProperty.call(o.argv,i)&&(Array.isArray(t[i])||Array.isArray(o.argv[i]))?t[i]=[].concat(t[i],o.argv[i]):t[i]=o.argv[i])})}}isDefaulted(t,e){const{default:n}=t.getOptions();return Object.prototype.hasOwnProperty.call(n,e)||Object.prototype.hasOwnProperty.call(n,this.shim.Parser.camelCase(e))}isInConfigs(t,e){const{configObjects:n}=t.getOptions();return n.some(t=>Object.prototype.hasOwnProperty.call(t,e))||n.some(t=>Object.prototype.hasOwnProperty.call(t,this.shim.Parser.camelCase(e)))}runDefaultBuilderOn(t){if(!this.defaultCommand)return;if(this.shouldUpdateUsage(t)){const e=Rt.test(this.defaultCommand.original)?this.defaultCommand.original:this.defaultCommand.original.replace(/^[^[\]<>]*/,"$0 ");t.getInternalMethods().getUsageInstance().usage(e,this.defaultCommand.description)}const e=this.defaultCommand.builder;if(Gt(e))return e(t,!0);Ut(e)||Object.keys(e).forEach(n=>{t.option(n,e[n])})}extractDesc({describe:t,description:e,desc:n}){for(const s of[t,e,n]){if("string"==typeof s||!1===s)return s;xt(s,!0,this.shim)}return!1}freeze(){this.frozens.push({handlers:this.handlers,aliasMap:this.aliasMap,defaultCommand:this.defaultCommand})}unfreeze(){const t=this.frozens.pop();xt(t,void 0,this.shim),({handlers:this.handlers,aliasMap:this.aliasMap,defaultCommand:this.defaultCommand}=t)}reset(){return this.handlers={},this.aliasMap={},this.defaultCommand=void 0,this.requireCache=new Set,this}}function Ut(t){return"object"==typeof t&&!!t.builder&&"function"==typeof t.handler}function Gt(t){return"function"==typeof t}function qt(t={},e=()=>!0){const n={};return _t(t).forEach(s=>{e(s,t[s])&&(n[s]=t[s])}),n}function Vt(t){"undefined"!=typeof process&&[process.stdout,process.stderr].forEach(e=>{const n=e;n._handle&&n.isTTY&&"function"==typeof n._handle.setBlocking&&n._handle.setBlocking(t)})}function Yt(t){return"boolean"==typeof t}function Kt(t,e){const n=e.y18n.__,s={},i=[];s.failFn=function(t){i.push(t)};let u=null,r=null,o=!0;s.showHelpOnFail=function(e=!0,n){const[i,a]="string"==typeof e?[!0,e]:[e,n];return t.getInternalMethods().isGlobalContext()&&(r=a),u=a,o=i,s};let a=!1;s.fail=function(e,n){const D=t.getInternalMethods().getLoggerInstance();if(!i.length){if(t.getExitProcess()&&Vt(!0),!a){a=!0,o&&(t.showHelp("error"),D.error()),(e||n)&&D.error(e||n);const s=u||r;s&&((e||n)&&D.error(""),D.error(s))}if(n=n||new St(e),t.getExitProcess())return t.exit(1);if(t.getInternalMethods().hasParseCallback())return t.exit(1,n);throw n}for(let t=i.length-1;t>=0;--t){const u=i[t];if(Yt(u)){if(n)throw n;if(e)throw Error(e)}else u(e,n,s)}};let D=[],l=!1;s.usage=(t,e)=>null===t?(l=!0,D=[],s):(l=!1,D.push([t,e||""]),s),s.getUsage=()=>D,s.getUsageDisabled=()=>l,s.getPositionalGroupName=()=>n("Positionals:");let c=[];s.example=(t,e)=>{c.push([t,e||""])};let h=[];s.command=function(t,e,n,s,i=!1){n&&(h=h.map(t=>(t[2]=!1,t))),h.push([t,e||"",n,s,i])},s.getCommands=()=>h;let f={};s.describe=function(t,e){Array.isArray(t)?t.forEach(t=>{s.describe(t,e)}):"object"==typeof t?Object.keys(t).forEach(e=>{s.describe(e,t[e])}):f[t]=e},s.getDescriptions=()=>f;let d=[];s.epilog=t=>{d.push(t)};let p,g=!1;s.wrap=t=>{g=!0,p=t},s.getWrap=()=>e.getEnv("YARGS_DISABLE_WRAP")?null:(g||(p=function(){const t=80;return e.process.stdColumns?Math.min(t,e.process.stdColumns):t}(),g=!0),p);const F="__yargsString__:";function m(t,n,s){let i=0;return Array.isArray(t)||(t=Object.values(t).map(t=>[t])),t.forEach(t=>{i=Math.max(e.stringWidth(s?`${s} ${Zt(t[0])}`:Zt(t[0]))+Qt(t[0]),i)}),n&&(i=Math.min(i,parseInt((.5*n).toString(),10))),i}let C;function E(e){return t.getOptions().hiddenOptions.indexOf(e)<0||t.parsed.argv[t.getOptions().showHiddenOpt]}function y(t,e){let s=`[${n("default:")} `;if(void 0===t&&!e)return null;if(e)s+=e;else switch(typeof t){case"string":s+=`"${t}"`;break;case"object":s+=JSON.stringify(t);break;default:s+=t}return`${s}]`}s.deferY18nLookup=t=>F+t,s.help=function(){if(C)return C;!function(){const e=t.getDemandedOptions(),n=t.getOptions();(Object.keys(n.alias)||[]).forEach(i=>{n.alias[i].forEach(u=>{f[u]&&s.describe(i,f[u]),u in e&&t.demandOption(i,e[u]),n.boolean.includes(u)&&t.boolean(i),n.count.includes(u)&&t.count(i),n.string.includes(u)&&t.string(i),n.normalize.includes(u)&&t.normalize(i),n.array.includes(u)&&t.array(i),n.number.includes(u)&&t.number(i)})})}();const i=t.customScriptName?t.$0:e.path.basename(t.$0),u=t.getDemandedOptions(),r=t.getDemandedCommands(),o=t.getDeprecatedOptions(),a=t.getGroups(),p=t.getOptions();let g=[];g=g.concat(Object.keys(f)),g=g.concat(Object.keys(u)),g=g.concat(Object.keys(r)),g=g.concat(Object.keys(p.default)),g=g.filter(E),g=Object.keys(g.reduce((t,e)=>("_"!==e&&(t[e]=!0),t),{}));const b=s.getWrap(),v=e.cliui({width:b,wrap:!!b});if(!l)if(D.length)D.forEach(t=>{v.div({text:`${t[0].replace(/\$0/g,i)}`}),t[1]&&v.div({text:`${t[1]}`,padding:[1,0,0,0]})}),v.div();else if(h.length){let t=null;t=r._?`${i} <${n("command")}>\n`:`${i} [${n("command")}]\n`,v.div(`${t}`)}if(h.length>1||1===h.length&&!h[0][2]){v.div(n("Commands:"));const e=t.getInternalMethods().getContext(),s=e.commands.length?`${e.commands.join(" ")} `:"";!0===t.getInternalMethods().getParserConfiguration()["sort-commands"]&&(h=h.sort((t,e)=>t[0].localeCompare(e[0])));const u=i?`${i} `:"";h.forEach(t=>{const e=`${u}${s}${t[0].replace(/^\$0 ?/,"")}`;v.span({text:e,padding:[0,2,0,2],width:m(h,b,`${i}${s}`)+4},{text:t[1]});const r=[];t[2]&&r.push(`[${n("default")}]`),t[3]&&t[3].length&&r.push(`[${n("aliases:")} ${t[3].join(", ")}]`),t[4]&&("string"==typeof t[4]?r.push(`[${n("deprecated: %s",t[4])}]`):r.push(`[${n("deprecated")}]`)),r.length?v.div({text:r.join(" "),padding:[0,0,0,2],align:"right"}):v.div()}),v.div()}const A=(Object.keys(p.alias)||[]).concat(Object.keys(t.parsed.newAliases)||[]);g=g.filter(e=>!t.parsed.newAliases[e]&&A.every(t=>-1===(p.alias[t]||[]).indexOf(e)));const B=n("Options:");a[B]||(a[B]=[]),function(t,e,n,s){let i=[],u=null;Object.keys(n).forEach(t=>{i=i.concat(n[t])}),t.forEach(t=>{u=[t].concat(e[t]),u.some(t=>-1!==i.indexOf(t))||n[s].push(t)})}(g,p.alias,a,B);const w=t=>/^--/.test(Zt(t)),O=Object.keys(a).filter(t=>a[t].length>0).map(t=>({groupName:t,normalizedKeys:a[t].filter(E).map(t=>{if(A.includes(t))return t;for(let e,n=0;void 0!==(e=A[n]);n++)if((p.alias[e]||[]).includes(t))return e;return t})})).filter(({normalizedKeys:t})=>t.length>0).map(({groupName:t,normalizedKeys:e})=>{const n=e.reduce((e,n)=>(e[n]=[n].concat(p.alias[n]||[]).map(e=>t===s.getPositionalGroupName()?e:(/^[0-9]$/.test(e)?p.boolean.includes(n)?"-":"--":e.length>1?"--":"-")+e).sort((t,e)=>w(t)===w(e)?0:w(t)?1:-1).join(", "),e),{});return{groupName:t,normalizedKeys:e,switches:n}});if(O.filter(({groupName:t})=>t!==s.getPositionalGroupName()).some(({normalizedKeys:t,switches:e})=>!t.every(t=>w(e[t])))&&O.filter(({groupName:t})=>t!==s.getPositionalGroupName()).forEach(({normalizedKeys:t,switches:e})=>{t.forEach(t=>{var n,s;w(e[t])&&(e[t]=(n=e[t],s=4,Jt(n)?{text:n.text,indentation:n.indentation+s}:{text:n,indentation:s}))})}),O.forEach(({groupName:e,normalizedKeys:i,switches:r})=>{v.div(e),i.forEach(e=>{const i=r[e];let a=f[e]||"",D=null;a.includes(F)&&(a=n(a.substring(16))),p.boolean.includes(e)&&(D=`[${n("boolean")}]`),p.count.includes(e)&&(D=`[${n("count")}]`),p.string.includes(e)&&(D=`[${n("string")}]`),p.normalize.includes(e)&&(D=`[${n("string")}]`),p.array.includes(e)&&(D=`[${n("array")}]`),p.number.includes(e)&&(D=`[${n("number")}]`);const l=[e in o?(c=o[e],"string"==typeof c?`[${n("deprecated: %s",c)}]`:`[${n("deprecated")}]`):null,D,e in u?`[${n("required")}]`:null,p.choices&&p.choices[e]?`[${n("choices:")} ${s.stringifiedValues(p.choices[e])}]`:null,y(p.default[e],p.defaultDescription[e])].filter(Boolean).join(" ");var c;v.span({text:Zt(i),padding:[0,2,0,2+Qt(i)],width:m(r,b)+4},a);const h=!0===t.getInternalMethods().getUsageConfiguration()["hide-types"];l&&!h?v.div({text:l,padding:[0,0,0,2],align:"right"}):v.div()}),v.div()}),c.length&&(v.div(n("Examples:")),c.forEach(t=>{t[0]=t[0].replace(/\$0/g,i)}),c.forEach(t=>{""===t[1]?v.div({text:t[0],padding:[0,2,0,2]}):v.div({text:t[0],padding:[0,2,0,2],width:m(c,b)+4},{text:t[1]})}),v.div()),d.length>0){const t=d.map(t=>t.replace(/\$0/g,i)).join("\n");v.div(`${t}\n`)}return v.toString().replace(/\s*$/,"")},s.cacheHelpMessage=function(){C=this.help()},s.clearCachedHelpMessage=function(){C=void 0},s.hasCachedHelpMessage=function(){return!!C},s.showHelp=e=>{const n=t.getInternalMethods().getLoggerInstance();e||(e="error");("function"==typeof e?e:n[e])(s.help())},s.functionDescription=t=>["(",t.name?e.Parser.decamelize(t.name,"-"):n("generated-value"),")"].join(""),s.stringifiedValues=function(t,e){let n="";const s=e||", ",i=[].concat(t);return t&&i.length?(i.forEach(t=>{n.length&&(n+=s),n+=JSON.stringify(t)}),n):n};let b=null;s.version=t=>{b=t},s.showVersion=e=>{const n=t.getInternalMethods().getLoggerInstance();e||(e="error");("function"==typeof e?e:n[e])(b)},s.reset=function(t){return u=null,a=!1,D=[],l=!1,d=[],c=[],h=[],f=qt(f,e=>!t[e]),s};const v=[];return s.freeze=function(){v.push({failMessage:u,failureOutput:a,usages:D,usageDisabled:l,epilogs:d,examples:c,commands:h,descriptions:f})},s.unfreeze=function(t=!1){const e=v.pop();e&&(t?(f={...e.descriptions,...f},h=[...e.commands,...h],D=[...e.usages,...D],c=[...e.examples,...c],d=[...e.epilogs,...d]):({failMessage:u,failureOutput:a,usages:D,usageDisabled:l,epilogs:d,examples:c,commands:h,descriptions:f}=e))},s}function Jt(t){return"object"==typeof t}function Qt(t){return Jt(t)?t.indentation:0}function Zt(t){return Jt(t)?t.text:t}class Xt{constructor(t,e,n,s){var i,u,r;this.yargs=t,this.usage=e,this.command=n,this.shim=s,this.completionKey="get-yargs-completions",this.aliases=null,this.customCompletionFunction=null,this.indexAfterLastReset=0,this.zshShell=null!==(r=(null===(i=this.shim.getEnv("SHELL"))||void 0===i?void 0:i.includes("zsh"))||(null===(u=this.shim.getEnv("ZSH_NAME"))||void 0===u?void 0:u.includes("zsh")))&&void 0!==r&&r}defaultCompletion(t,e,n,s){const i=this.command.getCommandHandlers();for(let e=0,n=t.length;e<n;++e)if(i[t[e]]&&i[t[e]].builder){const n=i[t[e]].builder;if(Gt(n)){this.indexAfterLastReset=e+1;const t=this.yargs.getInternalMethods().reset();return n(t,!0),t.argv}}const u=[];this.commandCompletions(u,t,n),this.optionCompletions(u,t,e,n),this.choicesFromOptionsCompletions(u,t,e,n),this.choicesFromPositionalsCompletions(u,t,e,n),s(null,u)}commandCompletions(t,e,n){const s=this.yargs.getInternalMethods().getContext().commands;n.match(/^-/)||s[s.length-1]===n||this.previousArgHasChoices(e)||this.usage.getCommands().forEach(n=>{const s=$t(n[0]).cmd;if(-1===e.indexOf(s))if(this.zshShell){const e=n[1]||"";t.push(s.replace(/:/g,"\\:")+":"+e)}else t.push(s)})}optionCompletions(t,e,n,s){if((s.match(/^-/)||""===s&&0===t.length)&&!this.previousArgHasChoices(e)){const n=this.yargs.getOptions(),i=this.yargs.getGroups()[this.usage.getPositionalGroupName()]||[];Object.keys(n.key).forEach(u=>{const r=!!n.configuration["boolean-negation"]&&n.boolean.includes(u);i.includes(u)||n.hiddenOptions.includes(u)||this.argsContainKey(e,u,r)||this.completeOptionKey(u,t,s,r&&!!n.default[u])})}}choicesFromOptionsCompletions(t,e,n,s){if(this.previousArgHasChoices(e)){const n=this.getPreviousArgChoices(e);n&&n.length>0&&t.push(...n.map(t=>t.replace(/:/g,"\\:")))}}choicesFromPositionalsCompletions(t,e,n,s){if(""===s&&t.length>0&&this.previousArgHasChoices(e))return;const i=this.yargs.getGroups()[this.usage.getPositionalGroupName()]||[],u=Math.max(this.indexAfterLastReset,this.yargs.getInternalMethods().getContext().commands.length+1),r=i[n._.length-u-1];if(!r)return;const o=this.yargs.getOptions().choices[r]||[];for(const e of o)e.startsWith(s)&&t.push(e.replace(/:/g,"\\:"))}getPreviousArgChoices(t){if(t.length<1)return;let e=t[t.length-1],n="";if(!e.startsWith("-")&&t.length>1&&(n=e,e=t[t.length-2]),!e.startsWith("-"))return;const s=e.replace(/^-+/,""),i=this.yargs.getOptions(),u=[s,...this.yargs.getAliases()[s]||[]];let r;for(const t of u)if(Object.prototype.hasOwnProperty.call(i.key,t)&&Array.isArray(i.choices[t])){r=i.choices[t];break}return r?r.filter(t=>!n||t.startsWith(n)):void 0}previousArgHasChoices(t){const e=this.getPreviousArgChoices(t);return void 0!==e&&e.length>0}argsContainKey(t,e,n){const s=e=>-1!==t.indexOf((/^[^0-9]$/.test(e)?"-":"--")+e);if(s(e))return!0;if(n&&s(`no-${e}`))return!0;if(this.aliases)for(const t of this.aliases[e])if(s(t))return!0;return!1}completeOptionKey(t,e,n,s){var i,u,r,o;let a=t;if(this.zshShell){const e=this.usage.getDescriptions(),n=null===(u=null===(i=null==this?void 0:this.aliases)||void 0===i?void 0:i[t])||void 0===u?void 0:u.find(t=>{const n=e[t];return"string"==typeof n&&n.length>0}),s=n?e[n]:void 0,D=null!==(o=null!==(r=e[t])&&void 0!==r?r:s)&&void 0!==o?o:"";a=`${t.replace(/:/g,"\\:")}:${D.replace("__yargsString__:","").replace(/(\r\n|\n|\r)/gm," ")}`}const D=!/^--/.test(n)&&(t=>/^[^0-9]$/.test(t))(t)?"-":"--";e.push(D+a),s&&e.push(D+"no-"+a)}customCompletion(t,e,n,s){if(xt(this.customCompletionFunction,null,this.shim),this.customCompletionFunction.length<3){const t=this.customCompletionFunction(n,e);return Mt(t)?t.then(t=>{this.shim.process.nextTick(()=>{s(null,t)})}).catch(t=>{this.shim.process.nextTick(()=>{s(t,void 0)})}):s(null,t)}return function(t){return t.length>3}(this.customCompletionFunction)?this.customCompletionFunction(n,e,(i=s)=>this.defaultCompletion(t,e,n,i),t=>{s(null,t)}):this.customCompletionFunction(n,e,t=>{s(null,t)})}getCompletion(t,e){const n=t.length?t[t.length-1]:"",s=this.yargs.parse(t,!0),i=this.customCompletionFunction?s=>this.customCompletion(t,s,n,e):s=>this.defaultCompletion(t,s,n,e);return Mt(s)?s.then(i):i(s)}generateCompletionScript(t,e){let n=this.zshShell?'#compdef {{app_name}}\n###-begin-{{app_name}}-completions-###\n#\n# yargs command completion script\n#\n# Installation: {{app_path}} {{completion_command}} >> ~/.zshrc\n# or {{app_path}} {{completion_command}} >> ~/.zprofile on OSX.\n#\n_{{app_name}}_yargs_completions()\n{\n local reply\n local si=$IFS\n IFS=$\'\n\' reply=($(COMP_CWORD="$((CURRENT-1))" COMP_LINE="$BUFFER" COMP_POINT="$CURSOR" {{app_path}} --get-yargs-completions "${words[@]}"))\n IFS=$si\n if [[ ${#reply} -gt 0 ]]; then\n _describe \'values\' reply\n else\n _default\n fi\n}\nif [[ "\'${zsh_eval_context[-1]}" == "loadautofunc" ]]; then\n _{{app_name}}_yargs_completions "$@"\nelse\n compdef _{{app_name}}_yargs_completions {{app_name}}\nfi\n###-end-{{app_name}}-completions-###\n':'###-begin-{{app_name}}-completions-###\n#\n# yargs command completion script\n#\n# Installation: {{app_path}} {{completion_command}} >> ~/.bashrc\n# or {{app_path}} {{completion_command}} >> ~/.bash_profile on OSX.\n#\n_{{app_name}}_yargs_completions()\n{\n local cur_word args type_list\n\n cur_word="${COMP_WORDS[COMP_CWORD]}"\n args=("${COMP_WORDS[@]}")\n\n # ask yargs to generate completions.\n # see https://stackoverflow.com/a/40944195/7080036 for the spaces-handling awk\n mapfile -t type_list < <({{app_path}} --get-yargs-completions "${args[@]}")\n mapfile -t COMPREPLY < <(compgen -W "$( printf \'%q \' "${type_list[@]}" )" -- "${cur_word}" |\n awk \'/ / { print "\\""$0"\\"" } /^[^ ]+$/ { print $0 }\')\n\n # if no match was found, fall back to filename completion\n if [ ${#COMPREPLY[@]} -eq 0 ]; then\n COMPREPLY=()\n fi\n\n return 0\n}\ncomplete -o bashdefault -o default -F _{{app_name}}_yargs_completions {{app_name}}\n###-end-{{app_name}}-completions-###\n';const s=this.shim.path.basename(t);return t.match(/\.js$/)&&(t=`./${t}`),n=n.replace(/{{app_name}}/g,s),n=n.replace(/{{completion_command}}/g,e),n.replace(/{{app_path}}/g,t)}registerFunction(t){this.customCompletionFunction=t}setParsed(t){this.aliases=t.aliases}}function te(t,e){if(0===t.length)return e.length;if(0===e.length)return t.length;const n=[];let s,i;for(s=0;s<=e.length;s++)n[s]=[s];for(i=0;i<=t.length;i++)n[0][i]=i;for(s=1;s<=e.length;s++)for(i=1;i<=t.length;i++)e.charAt(s-1)===t.charAt(i-1)?n[s][i]=n[s-1][i-1]:s>1&&i>1&&e.charAt(s-2)===t.charAt(i-1)&&e.charAt(s-1)===t.charAt(i-2)?n[s][i]=n[s-2][i-2]+1:n[s][i]=Math.min(n[s-1][i-1]+1,Math.min(n[s][i-1]+1,n[s-1][i]+1));return n[e.length][t.length]}const ee=["$0","--","_"];let ne,se=[];function ie(t,e,n,s){ne=s;let i={};if(Object.prototype.hasOwnProperty.call(t,"extends")){if("string"!=typeof t.extends)return i;const u=/\.json|\..*rc$/.test(t.extends);let r=null;if(u)r=function(t,e){return ne.path.resolve(t,e)}(e,t.extends);else try{r=import.meta.resolve(t.extends)}catch(e){return t}!function(t){if(se.indexOf(t)>-1)throw new St(`Circular extended configurations: '${t}'.`)}(r),se.push(r),i=u?JSON.parse(ne.readFileSync(r,"utf8")):s.require(t.extends),delete t.extends,i=ie(i,ne.path.dirname(r),n,ne)}return se=[],n?ue(i,t):Object.assign({},i,t)}function ue(t,e){const n={};function s(t){return t&&"object"==typeof t&&!Array.isArray(t)}Object.assign(n,t);for(const i of Object.keys(e))s(e[i])&&s(n[i])?n[i]=ue(t[i],e[i]):n[i]=e[i];return n}var re,oe,ae,De,le,ce,he,fe,de,pe,ge,Fe,me,Ce,Ee,ye,be,ve,Ae,Be,we,Oe,je,xe,ke,_e,Me,Se,$e,Pe,Ie,Ne,We,Le,ze,He=function(t,e,n,s,i){if("m"===s)throw new TypeError("Private method is not writable");if("a"===s&&!i)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof e?t!==e||!i:!e.has(t))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===s?i.call(t,n):i?i.value=n:e.set(t,n),n},Re=function(t,e,n,s){if("a"===n&&!s)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof e?t!==e||!s:!e.has(t))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?s:"a"===n?s.call(t):s?s.value:e.get(t)};const Te=Symbol("copyDoubleDash"),Ue=Symbol("copyDoubleDash"),Ge=Symbol("deleteFromParserHintObject"),qe=Symbol("emitWarning"),Ve=Symbol("freeze"),Ye=Symbol("getDollarZero"),Ke=Symbol("getParserConfiguration"),Je=Symbol("getUsageConfiguration"),Qe=Symbol("guessLocale"),Ze=Symbol("guessVersion"),Xe=Symbol("parsePositionalNumbers"),tn=Symbol("pkgUp"),en=Symbol("populateParserHintArray"),nn=Symbol("populateParserHintSingleValueDictionary"),sn=Symbol("populateParserHintArrayDictionary"),un=Symbol("populateParserHintDictionary"),rn=Symbol("sanitizeKey"),on=Symbol("setKey"),an=Symbol("unfreeze"),Dn=Symbol("validateAsync"),ln=Symbol("getCommandInstance"),cn=Symbol("getContext"),hn=Symbol("getHasOutput"),fn=Symbol("getLoggerInstance"),dn=Symbol("getParseContext"),pn=Symbol("getUsageInstance"),gn=Symbol("getValidationInstance"),Fn=Symbol("hasParseCallback"),mn=Symbol("isGlobalContext"),Cn=Symbol("postProcess"),En=Symbol("rebase"),yn=Symbol("reset"),bn=Symbol("runYargsParserAndExecuteCommands"),vn=Symbol("runValidation"),An=Symbol("setHasOutput"),Bn=Symbol("kTrackManuallySetKeys");class wn{constructor(t=[],e,n,s){this.customScriptName=!1,this.parsed=!1,re.set(this,void 0),oe.set(this,void 0),ae.set(this,{commands:[],fullCommands:[]}),De.set(this,null),le.set(this,null),ce.set(this,"show-hidden"),he.set(this,null),fe.set(this,!0),de.set(this,{}),pe.set(this,!0),ge.set(this,[]),Fe.set(this,void 0),me.set(this,{}),Ce.set(this,!1),Ee.set(this,null),ye.set(this,!0),be.set(this,void 0),ve.set(this,""),Ae.set(this,void 0),Be.set(this,void 0),we.set(this,{}),Oe.set(this,null),je.set(this,null),xe.set(this,{}),ke.set(this,{}),_e.set(this,void 0),Me.set(this,!1),Se.set(this,void 0),$e.set(this,!1),Pe.set(this,!1),Ie.set(this,!1),Ne.set(this,void 0),We.set(this,{}),Le.set(this,null),ze.set(this,void 0),He(this,Se,s,"f"),He(this,_e,t,"f"),He(this,oe,e,"f"),He(this,Be,n,"f"),He(this,Fe,new Lt(this),"f"),this.$0=this[Ye](),this[yn](),He(this,re,Re(this,re,"f"),"f"),He(this,Ne,Re(this,Ne,"f"),"f"),He(this,ze,Re(this,ze,"f"),"f"),He(this,Ae,Re(this,Ae,"f"),"f"),Re(this,Ae,"f").showHiddenOpt=Re(this,ce,"f"),He(this,be,this[Ue](),"f"),Re(this,Se,"f").y18n.setLocale("en_US")}addHelpOpt(t,e){return It("[string|boolean] [string]",[t,e],arguments.length),Re(this,Ee,"f")&&(this[Ge](Re(this,Ee,"f")),He(this,Ee,null,"f")),!1===t&&void 0===e||(He(this,Ee,"string"==typeof t?t:"help","f"),this.boolean(Re(this,Ee,"f")),this.describe(Re(this,Ee,"f"),e||Re(this,Ne,"f").deferY18nLookup("Show help"))),this}help(t,e){return this.addHelpOpt(t,e)}addShowHiddenOpt(t,e){if(It("[string|boolean] [string]",[t,e],arguments.length),!1===t&&void 0===e)return this;const n="string"==typeof t?t:Re(this,ce,"f");return this.boolean(n),this.describe(n,e||Re(this,Ne,"f").deferY18nLookup("Show hidden options")),Re(this,Ae,"f").showHiddenOpt=n,this}showHidden(t,e){return this.addShowHiddenOpt(t,e)}alias(t,e){return It("<object|string|array> [string|array]",[t,e],arguments.length),this[sn](this.alias.bind(this),"alias",t,e),this}array(t){return It("<array|string>",[t],arguments.length),this[en]("array",t),this[Bn](t),this}boolean(t){return It("<array|string>",[t],arguments.length),this[en]("boolean",t),this[Bn](t),this}check(t,e){return It("<function> [boolean]",[t,e],arguments.length),this.middleware((e,n)=>Ht(()=>t(e,n.getOptions()),n=>(n?("string"==typeof n||n instanceof Error)&&Re(this,Ne,"f").fail(n.toString(),n):Re(this,Ne,"f").fail(Re(this,Se,"f").y18n.__("Argument check failed: %s",t.toString())),e),t=>(Re(this,Ne,"f").fail(t.message?t.message:t.toString(),t),e)),!1,e),this}choices(t,e){return It("<object|string|array> [string|array]",[t,e],arguments.length),this[sn](this.choices.bind(this),"choices",t,e),this}coerce(t,e){if(It("<object|string|array> [function]",[t,e],arguments.length),Array.isArray(t)){if(!e)throw new St("coerce callback must be provided");for(const n of t)this.coerce(n,e);return this}if("object"==typeof t){for(const e of Object.keys(t))this.coerce(e,t[e]);return this}if(!e)throw new St("coerce callback must be provided");const n=t;return Re(this,Ae,"f").key[n]=!0,Re(this,Fe,"f").addCoerceMiddleware((t,s)=>{var i;const u=null!==(i=s.getAliases()[n])&&void 0!==i?i:[],r=[n,...u].filter(e=>Object.prototype.hasOwnProperty.call(t,e));return 0===r.length?t:Ht(()=>e(t[r[0]]),e=>(r.forEach(n=>{t[n]=e}),t),t=>{throw new St(t.message)})},n),this}conflicts(t,e){return It("<string|object> [string|array]",[t,e],arguments.length),Re(this,ze,"f").conflicts(t,e),this}config(t="config",e,n){return It("[object|string] [string|function] [function]",[t,e,n],arguments.length),"object"!=typeof t||Array.isArray(t)?("function"==typeof e&&(n=e,e=void 0),this.describe(t,e||Re(this,Ne,"f").deferY18nLookup("Path to JSON config file")),(Array.isArray(t)?t:[t]).forEach(t=>{Re(this,Ae,"f").config[t]=n||!0}),this):(t=ie(t,Re(this,oe,"f"),this[Ke]()["deep-merge-config"]||!1,Re(this,Se,"f")),Re(this,Ae,"f").configObjects=(Re(this,Ae,"f").configObjects||[]).concat(t),this)}completion(t,e,n){return It("[string] [string|boolean|function] [function]",[t,e,n],arguments.length),"function"==typeof e&&(n=e,e=void 0),He(this,le,t||Re(this,le,"f")||"completion","f"),e||!1===e||(e="generate completion script"),this.command(Re(this,le,"f"),e),n&&Re(this,De,"f").registerFunction(n),this}command(t,e,n,s,i,u){return It("<string|array|object> [string|boolean] [function|object] [function] [array] [boolean|string]",[t,e,n,s,i,u],arguments.length),Re(this,re,"f").addHandler(t,e,n,s,i,u),this}commands(t,e,n,s,i,u){return this.command(t,e,n,s,i,u)}commandDir(t,e){It("<string> [object]",[t,e],arguments.length);const n=Re(this,Be,"f")||Re(this,Se,"f").require;return Re(this,re,"f").addDirectory(t,n,Re(this,Se,"f").getCallerFile(),e),this}count(t){return It("<array|string>",[t],arguments.length),this[en]("count",t),this[Bn](t),this}default(t,e,n){return It("<object|string|array> [*] [string]",[t,e,n],arguments.length),n&&(kt(t,Re(this,Se,"f")),Re(this,Ae,"f").defaultDescription[t]=n),"function"==typeof e&&(kt(t,Re(this,Se,"f")),Re(this,Ae,"f").defaultDescription[t]||(Re(this,Ae,"f").defaultDescription[t]=Re(this,Ne,"f").functionDescription(e)),e=e.call()),this[nn](this.default.bind(this),"default",t,e),this}defaults(t,e,n){return this.default(t,e,n)}demandCommand(t=1,e,n,s){return It("[number] [number|string] [string|null|undefined] [string|null|undefined]",[t,e,n,s],arguments.length),"number"!=typeof e&&(n=e,e=1/0),this.global("_",!1),Re(this,Ae,"f").demandedCommands._={min:t,max:e,minMsg:n,maxMsg:s},this}demand(t,e,n){return Array.isArray(e)?(e.forEach(t=>{xt(n,!0,Re(this,Se,"f")),this.demandOption(t,n)}),e=1/0):"number"!=typeof e&&(n=e,e=1/0),"number"==typeof t?(xt(n,!0,Re(this,Se,"f")),this.demandCommand(t,e,n,n)):Array.isArray(t)?t.forEach(t=>{xt(n,!0,Re(this,Se,"f")),this.demandOption(t,n)}):"string"==typeof n?this.demandOption(t,n):!0!==n&&void 0!==n||this.demandOption(t),this}demandOption(t,e){return It("<object|string|array> [string]",[t,e],arguments.length),this[nn](this.demandOption.bind(this),"demandedOptions",t,e),this}deprecateOption(t,e){return It("<string> [string|boolean]",[t,e],arguments.length),Re(this,Ae,"f").deprecatedOptions[t]=e,this}describe(t,e){return It("<object|string|array> [string]",[t,e],arguments.length),this[on](t,!0),Re(this,Ne,"f").describe(t,e),this}detectLocale(t){return It("<boolean>",[t],arguments.length),He(this,fe,t,"f"),this}env(t){return It("[string|boolean]",[t],arguments.length),!1===t?delete Re(this,Ae,"f").envPrefix:Re(this,Ae,"f").envPrefix=t||"",this}epilogue(t){return It("<string>",[t],arguments.length),Re(this,Ne,"f").epilog(t),this}epilog(t){return this.epilogue(t)}example(t,e){return It("<string|array> [string]",[t,e],arguments.length),Array.isArray(t)?t.forEach(t=>this.example(...t)):Re(this,Ne,"f").example(t,e),this}exit(t,e){He(this,Ce,!0,"f"),He(this,he,e,"f"),Re(this,pe,"f")&&Re(this,Se,"f").process.exit(t)}exitProcess(t=!0){return It("[boolean]",[t],arguments.length),He(this,pe,t,"f"),this}fail(t){if(It("<function|boolean>",[t],arguments.length),"boolean"==typeof t&&!1!==t)throw new St("Invalid first argument. Expected function or boolean 'false'");return Re(this,Ne,"f").failFn(t),this}getAliases(){return this.parsed?this.parsed.aliases:{}}async getCompletion(t,e){return It("<array> [function]",[t,e],arguments.length),e?Re(this,De,"f").getCompletion(t,e):new Promise((e,n)=>{Re(this,De,"f").getCompletion(t,(t,s)=>{t?n(t):e(s)})})}getDemandedOptions(){return It([],0),Re(this,Ae,"f").demandedOptions}getDemandedCommands(){return It([],0),Re(this,Ae,"f").demandedCommands}getDeprecatedOptions(){return It([],0),Re(this,Ae,"f").deprecatedOptions}getDetectLocale(){return Re(this,fe,"f")}getExitProcess(){return Re(this,pe,"f")}getGroups(){return Object.assign({},Re(this,me,"f"),Re(this,ke,"f"))}getHelp(){if(He(this,Ce,!0,"f"),!Re(this,Ne,"f").hasCachedHelpMessage()){if(!this.parsed){const t=this[bn](Re(this,_e,"f"),void 0,void 0,0,!0);if(Mt(t))return t.then(()=>Re(this,Ne,"f").help())}const t=Re(this,re,"f").runDefaultBuilderOn(this);if(Mt(t))return t.then(()=>Re(this,Ne,"f").help())}return Promise.resolve(Re(this,Ne,"f").help())}getOptions(){return Re(this,Ae,"f")}getStrict(){return Re(this,$e,"f")}getStrictCommands(){return Re(this,Pe,"f")}getStrictOptions(){return Re(this,Ie,"f")}global(t,e){return It("<string|array> [boolean]",[t,e],arguments.length),t=[].concat(t),!1!==e?Re(this,Ae,"f").local=Re(this,Ae,"f").local.filter(e=>-1===t.indexOf(e)):t.forEach(t=>{Re(this,Ae,"f").local.includes(t)||Re(this,Ae,"f").local.push(t)}),this}group(t,e){It("<string|array> <string>",[t,e],arguments.length);const n=Re(this,ke,"f")[e]||Re(this,me,"f")[e];Re(this,ke,"f")[e]&&delete Re(this,ke,"f")[e];const s={};return Re(this,me,"f")[e]=(n||[]).concat(t).filter(t=>!s[t]&&(s[t]=!0)),this}hide(t){return It("<string>",[t],arguments.length),Re(this,Ae,"f").hiddenOptions.push(t),this}implies(t,e){return It("<string|object> [number|string|array]",[t,e],arguments.length),Re(this,ze,"f").implies(t,e),this}locale(t){return It("[string]",[t],arguments.length),void 0===t?(this[Qe](),Re(this,Se,"f").y18n.getLocale()):(He(this,fe,!1,"f"),Re(this,Se,"f").y18n.setLocale(t),this)}middleware(t,e,n){return Re(this,Fe,"f").addMiddleware(t,!!e,n)}nargs(t,e){return It("<string|object|array> [number]",[t,e],arguments.length),this[nn](this.nargs.bind(this),"narg",t,e),this}normalize(t){return It("<array|string>",[t],arguments.length),this[en]("normalize",t),this}number(t){return It("<array|string>",[t],arguments.length),this[en]("number",t),this[Bn](t),this}option(t,e){if(It("<string|object> [object]",[t,e],arguments.length),"object"==typeof t)Object.keys(t).forEach(e=>{this.options(e,t[e])});else{"object"!=typeof e&&(e={}),this[Bn](t),!Re(this,Le,"f")||"version"!==t&&"version"!==(null==e?void 0:e.alias)||this[qe](['"version" is a reserved word.',"Please do one of the following:",'- Disable version with `yargs.version(false)` if using "version" as an option',"- Use the built-in `yargs.version` method instead (if applicable)","- Use a different option key","https://yargs.js.org/docs/#api-reference-version"].join("\n"),void 0,"versionWarning"),Re(this,Ae,"f").key[t]=!0,e.alias&&this.alias(t,e.alias);const n=e.deprecate||e.deprecated;n&&this.deprecateOption(t,n);const s=e.demand||e.required||e.require;s&&this.demand(t,s),e.demandOption&&this.demandOption(t,"string"==typeof e.demandOption?e.demandOption:void 0),e.conflicts&&this.conflicts(t,e.conflicts),"default"in e&&this.default(t,e.default),void 0!==e.implies&&this.implies(t,e.implies),void 0!==e.nargs&&this.nargs(t,e.nargs),e.config&&this.config(t,e.configParser),e.normalize&&this.normalize(t),e.choices&&this.choices(t,e.choices),e.coerce&&this.coerce(t,e.coerce),e.group&&this.group(t,e.group),(e.boolean||"boolean"===e.type)&&(this.boolean(t),e.alias&&this.boolean(e.alias)),(e.array||"array"===e.type)&&(this.array(t),e.alias&&this.array(e.alias)),(e.number||"number"===e.type)&&(this.number(t),e.alias&&this.number(e.alias)),(e.string||"string"===e.type)&&(this.string(t),e.alias&&this.string(e.alias)),(e.count||"count"===e.type)&&this.count(t),"boolean"==typeof e.global&&this.global(t,e.global),e.defaultDescription&&(Re(this,Ae,"f").defaultDescription[t]=e.defaultDescription),e.skipValidation&&this.skipValidation(t);const i=e.describe||e.description||e.desc,u=Re(this,Ne,"f").getDescriptions();Object.prototype.hasOwnProperty.call(u,t)&&"string"!=typeof i||this.describe(t,i),e.hidden&&this.hide(t),e.requiresArg&&this.requiresArg(t)}return this}options(t,e){return this.option(t,e)}parse(t,e,n){It("[string|array] [function|boolean|object] [function]",[t,e,n],arguments.length),this[Ve](),void 0===t&&(t=Re(this,_e,"f")),"object"==typeof e&&(He(this,je,e,"f"),e=n),"function"==typeof e&&(He(this,Oe,e,"f"),e=!1),e||He(this,_e,t,"f"),Re(this,Oe,"f")&&He(this,pe,!1,"f");const s=this[bn](t,!!e),i=this.parsed;return Re(this,De,"f").setParsed(this.parsed),Mt(s)?s.then(t=>(Re(this,Oe,"f")&&Re(this,Oe,"f").call(this,Re(this,he,"f"),t,Re(this,ve,"f")),t)).catch(t=>{throw Re(this,Oe,"f")&&Re(this,Oe,"f")(t,this.parsed.argv,Re(this,ve,"f")),t}).finally(()=>{this[an](),this.parsed=i}):(Re(this,Oe,"f")&&Re(this,Oe,"f").call(this,Re(this,he,"f"),s,Re(this,ve,"f")),this[an](),this.parsed=i,s)}parseAsync(t,e,n){const s=this.parse(t,e,n);return Mt(s)?s:Promise.resolve(s)}parseSync(t,e,n){const s=this.parse(t,e,n);if(Mt(s))throw new St(".parseSync() must not be used with asynchronous builders, handlers, or middleware");return s}parserConfiguration(t){return It("<object>",[t],arguments.length),He(this,we,t,"f"),this}pkgConf(t,e){It("<string> [string]",[t,e],arguments.length);let n=null;const s=this[tn](e||Re(this,oe,"f"));return s[t]&&"object"==typeof s[t]&&(n=ie(s[t],e||Re(this,oe,"f"),this[Ke]()["deep-merge-config"]||!1,Re(this,Se,"f")),Re(this,Ae,"f").configObjects=(Re(this,Ae,"f").configObjects||[]).concat(n)),this}positional(t,e){It("<string> <object>",[t,e],arguments.length);const n=["default","defaultDescription","implies","normalize","choices","conflicts","coerce","type","describe","desc","description","alias"];e=qt(e,(t,e)=>!("type"===t&&!["string","number","boolean"].includes(e))&&n.includes(t));const s=Re(this,ae,"f").fullCommands[Re(this,ae,"f").fullCommands.length-1],i=s?Re(this,re,"f").cmdToParseOptions(s):{array:[],alias:{},default:{},demand:{}};return _t(i).forEach(n=>{const s=i[n];Array.isArray(s)?-1!==s.indexOf(t)&&(e[n]=!0):s[t]&&!(n in e)&&(e[n]=s[t])}),this.group(t,Re(this,Ne,"f").getPositionalGroupName()),this.option(t,e)}recommendCommands(t=!0){return It("[boolean]",[t],arguments.length),He(this,Me,t,"f"),this}required(t,e,n){return this.demand(t,e,n)}require(t,e,n){return this.demand(t,e,n)}requiresArg(t){return It("<array|string|object> [number]",[t],arguments.length),"string"==typeof t&&Re(this,Ae,"f").narg[t]||this[nn](this.requiresArg.bind(this),"narg",t,NaN),this}showCompletionScript(t,e){return It("[string] [string]",[t,e],arguments.length),t=t||this.$0,Re(this,be,"f").log(Re(this,De,"f").generateCompletionScript(t,e||Re(this,le,"f")||"completion")),this}showHelp(t){if(It("[string|function]",[t],arguments.length),He(this,Ce,!0,"f"),!Re(this,Ne,"f").hasCachedHelpMessage()){if(!this.parsed){const e=this[bn](Re(this,_e,"f"),void 0,void 0,0,!0);if(Mt(e))return e.then(()=>{Re(this,Ne,"f").showHelp(t)}),this}const e=Re(this,re,"f").runDefaultBuilderOn(this);if(Mt(e))return e.then(()=>{Re(this,Ne,"f").showHelp(t)}),this}return Re(this,Ne,"f").showHelp(t),this}scriptName(t){return this.customScriptName=!0,this.$0=t,this}showHelpOnFail(t,e){return It("[boolean|string] [string]",[t,e],arguments.length),Re(this,Ne,"f").showHelpOnFail(t,e),this}showVersion(t){return It("[string|function]",[t],arguments.length),Re(this,Ne,"f").showVersion(t),this}skipValidation(t){return It("<array|string>",[t],arguments.length),this[en]("skipValidation",t),this}strict(t){return It("[boolean]",[t],arguments.length),He(this,$e,!1!==t,"f"),this}strictCommands(t){return It("[boolean]",[t],arguments.length),He(this,Pe,!1!==t,"f"),this}strictOptions(t){return It("[boolean]",[t],arguments.length),He(this,Ie,!1!==t,"f"),this}string(t){return It("<array|string>",[t],arguments.length),this[en]("string",t),this[Bn](t),this}terminalWidth(){return It([],0),Re(this,Se,"f").process.stdColumns}updateLocale(t){return this.updateStrings(t)}updateStrings(t){return It("<object>",[t],arguments.length),He(this,fe,!1,"f"),Re(this,Se,"f").y18n.updateLocale(t),this}usage(t,e,n,s){if(It("<string|null|undefined> [string|boolean] [function|object] [function]",[t,e,n,s],arguments.length),void 0!==e){if(xt(t,null,Re(this,Se,"f")),(t||"").match(/^\$0( |$)/))return this.command(t,e,n,s);throw new St(".usage() description must start with $0 if being used as alias for .command()")}return Re(this,Ne,"f").usage(t),this}usageConfiguration(t){return It("<object>",[t],arguments.length),He(this,We,t,"f"),this}version(t,e,n){const s="version";if(It("[boolean|string] [string] [string]",[t,e,n],arguments.length),Re(this,Le,"f")&&(this[Ge](Re(this,Le,"f")),Re(this,Ne,"f").version(void 0),He(this,Le,null,"f")),0===arguments.length)n=this[Ze](),t=s;else if(1===arguments.length){if(!1===t)return this;n=t,t=s}else 2===arguments.length&&(n=e,e=void 0);return He(this,Le,"string"==typeof t?t:s,"f"),e=e||Re(this,Ne,"f").deferY18nLookup("Show version number"),Re(this,Ne,"f").version(n||void 0),this.boolean(Re(this,Le,"f")),this.describe(Re(this,Le,"f"),e),this}wrap(t){return It("<number|null|undefined>",[t],arguments.length),Re(this,Ne,"f").wrap(t),this}[(re=new WeakMap,oe=new WeakMap,ae=new WeakMap,De=new WeakMap,le=new WeakMap,ce=new WeakMap,he=new WeakMap,fe=new WeakMap,de=new WeakMap,pe=new WeakMap,ge=new WeakMap,Fe=new WeakMap,me=new WeakMap,Ce=new WeakMap,Ee=new WeakMap,ye=new WeakMap,be=new WeakMap,ve=new WeakMap,Ae=new WeakMap,Be=new WeakMap,we=new WeakMap,Oe=new WeakMap,je=new WeakMap,xe=new WeakMap,ke=new WeakMap,_e=new WeakMap,Me=new WeakMap,Se=new WeakMap,$e=new WeakMap,Pe=new WeakMap,Ie=new WeakMap,Ne=new WeakMap,We=new WeakMap,Le=new WeakMap,ze=new WeakMap,Te)](t){if(!t._||!t["--"])return t;t._.push.apply(t._,t["--"]);try{delete t["--"]}catch(t){}return t}[Ue](){return{log:(...t)=>{this[Fn]()||console.log(...t),He(this,Ce,!0,"f"),Re(this,ve,"f").length&&He(this,ve,Re(this,ve,"f")+"\n","f"),He(this,ve,Re(this,ve,"f")+t.join(" "),"f")},error:(...t)=>{this[Fn]()||console.error(...t),He(this,Ce,!0,"f"),Re(this,ve,"f").length&&He(this,ve,Re(this,ve,"f")+"\n","f"),He(this,ve,Re(this,ve,"f")+t.join(" "),"f")}}}[Ge](t){_t(Re(this,Ae,"f")).forEach(e=>{if("configObjects"===e)return;const n=Re(this,Ae,"f")[e];Array.isArray(n)?n.includes(t)&&n.splice(n.indexOf(t),1):"object"==typeof n&&delete n[t]}),delete Re(this,Ne,"f").getDescriptions()[t]}[qe](t,e,n){Re(this,de,"f")[n]||(Re(this,Se,"f").process.emitWarning(t,e),Re(this,de,"f")[n]=!0)}[Ve](){Re(this,ge,"f").push({options:Re(this,Ae,"f"),configObjects:Re(this,Ae,"f").configObjects.slice(0),exitProcess:Re(this,pe,"f"),groups:Re(this,me,"f"),strict:Re(this,$e,"f"),strictCommands:Re(this,Pe,"f"),strictOptions:Re(this,Ie,"f"),completionCommand:Re(this,le,"f"),output:Re(this,ve,"f"),exitError:Re(this,he,"f"),hasOutput:Re(this,Ce,"f"),parsed:this.parsed,parseFn:Re(this,Oe,"f"),parseContext:Re(this,je,"f")}),Re(this,Ne,"f").freeze(),Re(this,ze,"f").freeze(),Re(this,re,"f").freeze(),Re(this,Fe,"f").freeze()}[Ye](){let t,e="";return t=/\b(node|iojs|electron)(\.exe)?$/.test(Re(this,Se,"f").process.argv()[0])?Re(this,Se,"f").process.argv().slice(1,2):Re(this,Se,"f").process.argv().slice(0,1),e=t.map(t=>{const e=this[En](Re(this,oe,"f"),t);return t.match(/^(\/|([a-zA-Z]:)?\\)/)&&e.length<t.length?e:t}).join(" ").trim(),Re(this,Se,"f").getEnv("_")&&Re(this,Se,"f").getProcessArgvBin()===Re(this,Se,"f").getEnv("_")&&(e=Re(this,Se,"f").getEnv("_").replace(`${Re(this,Se,"f").path.dirname(Re(this,Se,"f").process.execPath())}/`,"")),e}[Ke](){return Re(this,we,"f")}[Je](){return Re(this,We,"f")}[Qe](){if(!Re(this,fe,"f"))return;const t=Re(this,Se,"f").getEnv("LC_ALL")||Re(this,Se,"f").getEnv("LC_MESSAGES")||Re(this,Se,"f").getEnv("LANG")||Re(this,Se,"f").getEnv("LANGUAGE")||"en_US";this.locale(t.replace(/[.:].*/,""))}[Ze](){return this[tn]().version||"unknown"}[Xe](t){const e=t["--"]?t["--"]:t._;for(let t,n=0;void 0!==(t=e[n]);n++)Re(this,Se,"f").Parser.looksLikeNumber(t)&&Number.isSafeInteger(Math.floor(parseFloat(`${t}`)))&&(e[n]=Number(t));return t}[tn](t){const e=t||"*";if(Re(this,xe,"f")[e])return Re(this,xe,"f")[e];let n={};try{let e=t||Re(this,Se,"f").mainFilename;Re(this,Se,"f").path.extname(e)&&(e=Re(this,Se,"f").path.dirname(e));const s=Re(this,Se,"f").findUp(e,(t,e)=>e.includes("package.json")?"package.json":void 0);xt(s,void 0,Re(this,Se,"f")),n=JSON.parse(Re(this,Se,"f").readFileSync(s,"utf8"))}catch(t){}return Re(this,xe,"f")[e]=n||{},Re(this,xe,"f")[e]}[en](t,e){(e=[].concat(e)).forEach(e=>{e=this[rn](e),Re(this,Ae,"f")[t].push(e)})}[nn](t,e,n,s){this[un](t,e,n,s,(t,e,n)=>{Re(this,Ae,"f")[t][e]=n})}[sn](t,e,n,s){this[un](t,e,n,s,(t,e,n)=>{Re(this,Ae,"f")[t][e]=(Re(this,Ae,"f")[t][e]||[]).concat(n)})}[un](t,e,n,s,i){if(Array.isArray(n))n.forEach(e=>{t(e,s)});else if((t=>"object"==typeof t)(n))for(const e of _t(n))t(e,n[e]);else i(e,this[rn](n),s)}[rn](t){return"__proto__"===t?"___proto___":t}[on](t,e){return this[nn](this[on].bind(this),"key",t,e),this}[an](){var t,e,n,s,i,u,r,o,a,D,l,c;const h=Re(this,ge,"f").pop();let f;xt(h,void 0,Re(this,Se,"f")),t=this,e=this,n=this,s=this,i=this,u=this,r=this,o=this,a=this,D=this,l=this,c=this,({options:{set value(e){He(t,Ae,e,"f")}}.value,configObjects:f,exitProcess:{set value(t){He(e,pe,t,"f")}}.value,groups:{set value(t){He(n,me,t,"f")}}.value,output:{set value(t){He(s,ve,t,"f")}}.value,exitError:{set value(t){He(i,he,t,"f")}}.value,hasOutput:{set value(t){He(u,Ce,t,"f")}}.value,parsed:this.parsed,strict:{set value(t){He(r,$e,t,"f")}}.value,strictCommands:{set value(t){He(o,Pe,t,"f")}}.value,strictOptions:{set value(t){He(a,Ie,t,"f")}}.value,completionCommand:{set value(t){He(D,le,t,"f")}}.value,parseFn:{set value(t){He(l,Oe,t,"f")}}.value,parseContext:{set value(t){He(c,je,t,"f")}}.value}=h),Re(this,Ae,"f").configObjects=f,Re(this,Ne,"f").unfreeze(),Re(this,ze,"f").unfreeze(),Re(this,re,"f").unfreeze(),Re(this,Fe,"f").unfreeze()}[Dn](t,e){return Ht(e,e=>(t(e),e))}getInternalMethods(){return{getCommandInstance:this[ln].bind(this),getContext:this[cn].bind(this),getHasOutput:this[hn].bind(this),getLoggerInstance:this[fn].bind(this),getParseContext:this[dn].bind(this),getParserConfiguration:this[Ke].bind(this),getUsageConfiguration:this[Je].bind(this),getUsageInstance:this[pn].bind(this),getValidationInstance:this[gn].bind(this),hasParseCallback:this[Fn].bind(this),isGlobalContext:this[mn].bind(this),postProcess:this[Cn].bind(this),reset:this[yn].bind(this),runValidation:this[vn].bind(this),runYargsParserAndExecuteCommands:this[bn].bind(this),setHasOutput:this[An].bind(this)}}[ln](){return Re(this,re,"f")}[cn](){return Re(this,ae,"f")}[hn](){return Re(this,Ce,"f")}[fn](){return Re(this,be,"f")}[dn](){return Re(this,je,"f")||{}}[pn](){return Re(this,Ne,"f")}[gn](){return Re(this,ze,"f")}[Fn](){return!!Re(this,Oe,"f")}[mn](){return Re(this,ye,"f")}[Cn](t,e,n,s){if(n)return t;if(Mt(t))return t;e||(t=this[Te](t));return(this[Ke]()["parse-positional-numbers"]||void 0===this[Ke]()["parse-positional-numbers"])&&(t=this[Xe](t)),s&&(t=zt(t,this,Re(this,Fe,"f").getMiddleware(),!1)),t}[yn](t={}){He(this,Ae,Re(this,Ae,"f")||{},"f");const e={};e.local=Re(this,Ae,"f").local||[],e.configObjects=Re(this,Ae,"f").configObjects||[];const n={};e.local.forEach(e=>{n[e]=!0,(t[e]||[]).forEach(t=>{n[t]=!0})}),Object.assign(Re(this,ke,"f"),Object.keys(Re(this,me,"f")).reduce((t,e)=>{const s=Re(this,me,"f")[e].filter(t=>!(t in n));return s.length>0&&(t[e]=s),t},{})),He(this,me,{},"f");return["array","boolean","string","skipValidation","count","normalize","number","hiddenOptions"].forEach(t=>{e[t]=(Re(this,Ae,"f")[t]||[]).filter(t=>!n[t])}),["narg","key","alias","default","defaultDescription","config","choices","demandedOptions","demandedCommands","deprecatedOptions"].forEach(t=>{e[t]=qt(Re(this,Ae,"f")[t],t=>!n[t])}),e.envPrefix=Re(this,Ae,"f").envPrefix,He(this,Ae,e,"f"),He(this,Ne,Re(this,Ne,"f")?Re(this,Ne,"f").reset(n):Kt(this,Re(this,Se,"f")),"f"),He(this,ze,Re(this,ze,"f")?Re(this,ze,"f").reset(n):function(t,e,n){const s=n.y18n.__,i=n.y18n.__n,u={nonOptionCount:function(n){const s=t.getDemandedCommands(),u=n._.length+(n["--"]?n["--"].length:0)-t.getInternalMethods().getContext().commands.length;s._&&(u<s._.min||u>s._.max)&&(u<s._.min?void 0!==s._.minMsg?e.fail(s._.minMsg?s._.minMsg.replace(/\$0/g,u.toString()).replace(/\$1/,s._.min.toString()):null):e.fail(i("Not enough non-option arguments: got %s, need at least %s","Not enough non-option arguments: got %s, need at least %s",u,u.toString(),s._.min.toString())):u>s._.max&&(void 0!==s._.maxMsg?e.fail(s._.maxMsg?s._.maxMsg.replace(/\$0/g,u.toString()).replace(/\$1/,s._.max.toString()):null):e.fail(i("Too many non-option arguments: got %s, maximum of %s","Too many non-option arguments: got %s, maximum of %s",u,u.toString(),s._.max.toString()))))},positionalCount:function(t,n){n<t&&e.fail(i("Not enough non-option arguments: got %s, need at least %s","Not enough non-option arguments: got %s, need at least %s",n,n+"",t+""))},requiredArguments:function(t,n){let s=null;for(const e of Object.keys(n))Object.prototype.hasOwnProperty.call(t,e)&&void 0!==t[e]||(s=s||{},s[e]=n[e]);if(s){const t=[];for(const e of Object.keys(s)){const n=s[e];n&&t.indexOf(n)<0&&t.push(n)}const n=t.length?`\n${t.join("\n")}`:"";e.fail(i("Missing required argument: %s","Missing required arguments: %s",Object.keys(s).length,Object.keys(s).join(", ")+n))}},unknownArguments:function(n,s,r,o,a=!0){var D;const l=t.getInternalMethods().getCommandInstance().getCommands(),c=[],h=t.getInternalMethods().getContext();if(Object.keys(n).forEach(e=>{ee.includes(e)||Object.prototype.hasOwnProperty.call(r,e)||Object.prototype.hasOwnProperty.call(t.getInternalMethods().getParseContext(),e)||u.isValidAndSomeAliasIsNotNew(e,s)||c.push(e)}),a&&(h.commands.length>0||l.length>0||o)&&n._.slice(h.commands.length).forEach(t=>{l.includes(""+t)||c.push(""+t)}),a){const e=(null===(D=t.getDemandedCommands()._)||void 0===D?void 0:D.max)||0,s=h.commands.length+e;s<n._.length&&n._.slice(s).forEach(t=>{t=String(t),h.commands.includes(t)||c.includes(t)||c.push(t)})}c.length&&e.fail(i("Unknown argument: %s","Unknown arguments: %s",c.length,c.map(t=>t.trim()?t:`"${t}"`).join(", ")))},unknownCommands:function(n){const s=t.getInternalMethods().getCommandInstance().getCommands(),u=[],r=t.getInternalMethods().getContext();return(r.commands.length>0||s.length>0)&&n._.slice(r.commands.length).forEach(t=>{s.includes(""+t)||u.push(""+t)}),u.length>0&&(e.fail(i("Unknown command: %s","Unknown commands: %s",u.length,u.join(", "))),!0)},isValidAndSomeAliasIsNotNew:function(e,n){if(!Object.prototype.hasOwnProperty.call(n,e))return!1;const s=t.parsed.newAliases;return[e,...n[e]].some(t=>!Object.prototype.hasOwnProperty.call(s,t)||!s[e])},limitedChoices:function(n){const i=t.getOptions(),u={};if(!Object.keys(i.choices).length)return;Object.keys(n).forEach(t=>{-1===ee.indexOf(t)&&Object.prototype.hasOwnProperty.call(i.choices,t)&&[].concat(n[t]).forEach(e=>{-1===i.choices[t].indexOf(e)&&void 0!==e&&(u[t]=(u[t]||[]).concat(e))})});const r=Object.keys(u);if(!r.length)return;let o=s("Invalid values:");r.forEach(t=>{o+=`\n ${s("Argument: %s, Given: %s, Choices: %s",t,e.stringifiedValues(u[t]),e.stringifiedValues(i.choices[t]))}`}),e.fail(o)}};let r={};function o(t,e){const n=Number(e);return"number"==typeof(e=isNaN(n)?e:n)?e=t._.length>=e:e.match(/^--no-.+/)?(e=e.match(/^--no-(.+)/)[1],e=!Object.prototype.hasOwnProperty.call(t,e)):e=Object.prototype.hasOwnProperty.call(t,e),e}u.implies=function(e,s){It("<string|object> [array|number|string]",[e,s],arguments.length),"object"==typeof e?Object.keys(e).forEach(t=>{u.implies(t,e[t])}):(t.global(e),r[e]||(r[e]=[]),Array.isArray(s)?s.forEach(t=>u.implies(e,t)):(xt(s,void 0,n),r[e].push(s)))},u.getImplied=function(){return r},u.implications=function(t){const n=[];if(Object.keys(r).forEach(e=>{const s=e;(r[e]||[]).forEach(e=>{let i=s;const u=e;i=o(t,i),e=o(t,e),i&&!e&&n.push(` ${s} -> ${u}`)})}),n.length){let t=`${s("Implications failed:")}\n`;n.forEach(e=>{t+=e}),e.fail(t)}};let a={};u.conflicts=function(e,n){It("<string|object> [array|string]",[e,n],arguments.length),"object"==typeof e?Object.keys(e).forEach(t=>{u.conflicts(t,e[t])}):(t.global(e),a[e]||(a[e]=[]),Array.isArray(n)?n.forEach(t=>u.conflicts(e,t)):a[e].push(n))},u.getConflicting=()=>a,u.conflicting=function(i){Object.keys(i).forEach(t=>{a[t]&&a[t].forEach(n=>{n&&void 0!==i[t]&&void 0!==i[n]&&e.fail(s("Arguments %s and %s are mutually exclusive",t,n))})}),t.getInternalMethods().getParserConfiguration()["strip-dashed"]&&Object.keys(a).forEach(t=>{a[t].forEach(u=>{u&&void 0!==i[n.Parser.camelCase(t)]&&void 0!==i[n.Parser.camelCase(u)]&&e.fail(s("Arguments %s and %s are mutually exclusive",t,u))})})},u.recommendCommands=function(t,n){n=n.sort((t,e)=>e.length-t.length);let i=null,u=1/0;for(let e,s=0;void 0!==(e=n[s]);s++){const n=te(t,e);n<=3&&n<u&&(u=n,i=e)}i&&e.fail(s("Did you mean %s?",i))},u.reset=function(t){return r=qt(r,e=>!t[e]),a=qt(a,e=>!t[e]),u};const D=[];return u.freeze=function(){D.push({implied:r,conflicting:a})},u.unfreeze=function(){const t=D.pop();xt(t,void 0,n),({implied:r,conflicting:a}=t)},u}(this,Re(this,Ne,"f"),Re(this,Se,"f")),"f"),He(this,re,Re(this,re,"f")?Re(this,re,"f").reset():function(t,e,n,s){return new Tt(t,e,n,s)}(Re(this,Ne,"f"),Re(this,ze,"f"),Re(this,Fe,"f"),Re(this,Se,"f")),"f"),Re(this,De,"f")||He(this,De,function(t,e,n,s){return new Xt(t,e,n,s)}(this,Re(this,Ne,"f"),Re(this,re,"f"),Re(this,Se,"f")),"f"),Re(this,Fe,"f").reset(),He(this,le,null,"f"),He(this,ve,"","f"),He(this,he,null,"f"),He(this,Ce,!1,"f"),this.parsed=!1,this}[En](t,e){return Re(this,Se,"f").path.relative(t,e)}[bn](t,e,n,s=0,i=!1){var u,r,o,a;let D=!!n||i;t=t||Re(this,_e,"f"),Re(this,Ae,"f").__=Re(this,Se,"f").y18n.__,Re(this,Ae,"f").configuration=this[Ke]();const l=!!Re(this,Ae,"f").configuration["populate--"],c=Object.assign({},Re(this,Ae,"f").configuration,{"populate--":!0}),h=Re(this,Se,"f").Parser.detailed(t,Object.assign({},Re(this,Ae,"f"),{configuration:{"parse-positional-numbers":!1,...c}})),f=Object.assign(h.argv,Re(this,je,"f"));let d;const p=h.aliases;let g=!1,F=!1;Object.keys(f).forEach(t=>{t===Re(this,Ee,"f")&&f[t]?g=!0:t===Re(this,Le,"f")&&f[t]&&(F=!0)}),f.$0=this.$0,this.parsed=h,0===s&&Re(this,Ne,"f").clearCachedHelpMessage();try{if(this[Qe](),e)return this[Cn](f,l,!!n,!1);if(Re(this,Ee,"f")){[Re(this,Ee,"f")].concat(p[Re(this,Ee,"f")]||[]).filter(t=>t.length>1).includes(""+f._[f._.length-1])&&(f._.pop(),g=!0)}He(this,ye,!1,"f");const c=Re(this,re,"f").getCommands(),m=!!(null===(u=Re(this,De,"f"))||void 0===u?void 0:u.completionKey)&&[null===(r=Re(this,De,"f"))||void 0===r?void 0:r.completionKey,...null!==(a=this.getAliases()[null===(o=Re(this,De,"f"))||void 0===o?void 0:o.completionKey])&&void 0!==a?a:[]].some(t=>Object.prototype.hasOwnProperty.call(f,t)),C=g||m||i;if(f._.length){if(c.length){let t;for(let e,u=s||0;void 0!==f._[u];u++){if(e=String(f._[u]),c.includes(e)&&e!==Re(this,le,"f")){const t=Re(this,re,"f").runCommand(e,this,h,u+1,i,g||F||i);return this[Cn](t,l,!!n,!1)}if(!t&&e!==Re(this,le,"f")){t=e;break}}!Re(this,re,"f").hasDefaultCommand()&&Re(this,Me,"f")&&t&&!C&&Re(this,ze,"f").recommendCommands(t,c)}Re(this,le,"f")&&f._.includes(Re(this,le,"f"))&&!m&&(Re(this,pe,"f")&&Vt(!0),this.showCompletionScript(),this.exit(0))}if(Re(this,re,"f").hasDefaultCommand()&&!C){const t=Re(this,re,"f").runCommand(null,this,h,0,i,g||F||i);return this[Cn](t,l,!!n,!1)}if(m){Re(this,pe,"f")&&Vt(!0);const e=(t=[].concat(t)).slice(t.indexOf(`--${Re(this,De,"f").completionKey}`)+1);return Re(this,De,"f").getCompletion(e,(t,e)=>{if(t)throw new St(t.message);(e||[]).forEach(t=>{Re(this,be,"f").log(t)}),this.exit(0)}),this[Cn](f,!l,!!n,!1)}if(Re(this,Ce,"f")||(g?(Re(this,pe,"f")&&Vt(!0),D=!0,this.showHelp(t=>{Re(this,be,"f").log(t),this.exit(0)})):F&&(Re(this,pe,"f")&&Vt(!0),D=!0,Re(this,Ne,"f").showVersion("log"),this.exit(0))),!D&&Re(this,Ae,"f").skipValidation.length>0&&(D=Object.keys(f).some(t=>Re(this,Ae,"f").skipValidation.indexOf(t)>=0&&!0===f[t])),!D){if(h.error)throw new St(h.error.message);if(!m){const t=this[vn](p,{},h.error);n||(d=zt(f,this,Re(this,Fe,"f").getMiddleware(),!0)),d=this[Dn](t,null!=d?d:f),Mt(d)&&!n&&(d=d.then(()=>zt(f,this,Re(this,Fe,"f").getMiddleware(),!1)))}}}catch(t){if(!(t instanceof St))throw t;Re(this,Ne,"f").fail(t.message,t)}return this[Cn](null!=d?d:f,l,!!n,!0)}[vn](t,e,n,s){const i={...this.getDemandedOptions()};return u=>{if(n)throw new St(n.message);Re(this,ze,"f").nonOptionCount(u),Re(this,ze,"f").requiredArguments(u,i);let r=!1;Re(this,Pe,"f")&&(r=Re(this,ze,"f").unknownCommands(u)),Re(this,$e,"f")&&!r?Re(this,ze,"f").unknownArguments(u,t,e,!!s):Re(this,Ie,"f")&&Re(this,ze,"f").unknownArguments(u,t,{},!1,!1),Re(this,ze,"f").limitedChoices(u),Re(this,ze,"f").implications(u),Re(this,ze,"f").conflicting(u)}}[An](){He(this,Ce,!0,"f")}[Bn](t){if("string"==typeof t)Re(this,Ae,"f").key[t]=!0;else for(const e of t)Re(this,Ae,"f").key[e]=!0}}const On=(jn=jt,(t=[],e=jn.process.cwd(),n)=>{const s=new wn(t,e,n,jn);return Object.defineProperty(s,"argv",{get:()=>s.parse(),enumerable:!0}),s.help(),s.version(),s});var jn;const xn=await On(function(t){return t.slice(Ft()+1)}(f.argv)).config(y()).option("issue-number",{alias:"i",description:"GitHub issue number to process",type:"number",demandOption:!0}).option("planning-model",{alias:"m",description:"LLM for planning code changes. Must use llmlite format: provider/model (e.g., openai/gpt-4.1, azure/gpt-4.1, gemini/gemini-2.5-pro, anthropic/claude-4-sonnet-latest, bedrock/us.anthropic.claude-sonnet-4-20250514-v1:0, vertex/gemini-2.5-pro, xai/grok-4)",type:"string"}).option("two-staged-planning",{alias:"p",description:"Enable two-staged planning: first select relevant files, then generate detailed implementation plans (increases LLM cost but improves code quality)",type:"boolean",default:!0}).option("reasoning-effort",{alias:"e",description:"Constrains effort on reasoning for planning models. Supported values are low, medium, and high.",type:"string",choices:["low","medium","high"]}).option("coding-tool",{alias:"c",description:"Coding tool to use for making changes",type:"string",choices:["aider","claude-code","codex-cli","gemini-cli"],default:b}).option("aider-extra-args",{alias:"a",description:'Additional arguments to pass to Aider ("--yes-always --no-check-update --no-show-release-notes" is always applied)',type:"string",default:v}).option("claude-code-extra-args",{description:'Additional arguments to pass to Claude Code ("--dangerously-skip-permissions" is always applied, "--print" is applied only in CI)',type:"string",default:A}).option("codex-extra-args",{description:"Additional arguments to pass to Codex CLI (nothing is always applied)",type:"string",default:B}).option("gemini-extra-args",{description:'Additional arguments to pass to Gemini CLI ("--yolo" is always applied)',type:"string",default:w}).option("repomix-extra-args",{alias:"r",description:"Additional arguments for repomix when generating context",type:"string",default:O}).option("test-command",{alias:"t",description:"Command to run after the coding tool applies changes. If it fails, the assistant will try to fix it.",type:"string"}).option("max-test-attempts",{description:"Maximum number of attempts to fix test failures",type:"number",default:j}).option("dry-run",{alias:"d",description:"Run without making actual changes (no branch creation, no PR)",type:"boolean",default:!1}).option("remove-pattern",{description:"RegExp pattern to remove from issue and PR descriptions",type:"string"}).option("no-branch",{alias:"n",description:"Do not create a new branch, commit changes directly to the base branch",type:"boolean",default:!1}).option("node-runtime",{description:"Node.js runtime to use for running tools",type:"string",choices:["node","bun","npx","bunx"],default:x}).option("working-dir",{alias:"w",description:"Working directory path for commands",type:"string"}).version(function(){let e=import.meta.dir||u.dirname(new URL(import.meta.url).pathname);for(;!t.existsSync(u.join(e,"package.json"));)e=u.dirname(e);return JSON.parse(t.readFileSync(u.join(e,"package.json"),"utf8")).version}()).help().argv;xn["working-dir"]&&(f.chdir(xn["working-dir"]),console.info(`Changed working directory to: ${f.cwd()}`));const kn=k(xn["node-runtime"]);await _({aiderExtraArgs:xn["aider-extra-args"],claudeCodeExtraArgs:xn["claude-code-extra-args"],codexExtraArgs:xn["codex-extra-args"],geminiExtraArgs:xn["gemini-extra-args"],codingTool:xn["coding-tool"],dryRun:xn["dry-run"],noBranch:xn["no-branch"],nodeRuntime:kn,twoStagePlanning:xn["two-staged-planning"],issueNumber:xn["issue-number"],maxTestAttempts:xn["max-test-attempts"],planningModel:xn["planning-model"],reasoningEffort:xn["reasoning-effort"],repomixExtraArgs:xn["repomix-extra-args"],testCommand:xn["test-command"],removePattern:xn["remove-pattern"]});
33
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9ub2RlX21vZHVsZXMvY2xpdWkvYnVpbGQvbGliL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0cmlwLWFuc2kvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvYW5zaS1yZWdleC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9nZXQtZWFzdC1hc2lhbi13aWR0aC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy9nZXQtZWFzdC1hc2lhbi13aWR0aC9sb29rdXAuanMiLCIuLi9ub2RlX21vZHVsZXMvZW1vamktcmVnZXgvaW5kZXgubWpzIiwiLi4vbm9kZV9tb2R1bGVzL3N0cmluZy13aWR0aC9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy93cmFwLWFuc2kvbm9kZV9tb2R1bGVzL2Fuc2ktc3R5bGVzL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3dyYXAtYW5zaS9pbmRleC5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy1wYXJzZXIvYnVpbGQvbGliL3N0cmluZy11dGlscy5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy1wYXJzZXIvYnVpbGQvbGliL3lhcmdzLXBhcnNlci10eXBlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy1wYXJzZXIvYnVpbGQvbGliL3lhcmdzLXBhcnNlci5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy1wYXJzZXIvYnVpbGQvbGliL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzLXBhcnNlci9idWlsZC9saWIvdG9rZW5pemUtYXJnLXN0cmluZy5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvdXRpbHMvcHJvY2Vzcy1hcmd2LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3kxOG4vYnVpbGQvbGliL3BsYXRmb3JtLXNoaW1zL25vZGUuanMiLCIuLi9ub2RlX21vZHVsZXMveTE4bi9idWlsZC9saWIvaW5kZXguanMiLCIuLi9ub2RlX21vZHVsZXMvZ2V0LWNhbGxlci1maWxlL2luZGV4LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2xpYi9wbGF0Zm9ybS1zaGltcy9lc20ubWpzIiwiLi4vbm9kZV9tb2R1bGVzL3kxOG4vaW5kZXgubWpzIiwiLi4vbm9kZV9tb2R1bGVzL2NsaXVpL2luZGV4Lm1qcyIsIi4uL25vZGVfbW9kdWxlcy9lc2NhbGFkZS9zeW5jL2luZGV4Lm1qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvdHlwaW5ncy9jb21tb24tdHlwZXMuanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvbGliL3V0aWxzL2lzLXByb21pc2UuanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvbGliL3llcnJvci5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvcGFyc2UtY29tbWFuZC5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvYXJnc2VydC5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvbWlkZGxld2FyZS5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvdXRpbHMvbWF5YmUtYXN5bmMtcmVzdWx0LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi9jb21tYW5kLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi95YXJncy1mYWN0b3J5LmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi91dGlscy9vYmotZmlsdGVyLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi91dGlscy9zZXQtYmxvY2tpbmcuanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvbGliL3VzYWdlLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi9jb21wbGV0aW9uLmpzIiwiLi4vbm9kZV9tb2R1bGVzL3lhcmdzL2J1aWxkL2xpYi9jb21wbGV0aW9uLXRlbXBsYXRlcy5qcyIsIi4uL25vZGVfbW9kdWxlcy95YXJncy9idWlsZC9saWIvdXRpbHMvbGV2ZW5zaHRlaW4uanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvbGliL3ZhbGlkYXRpb24uanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvYnVpbGQvbGliL3V0aWxzL2FwcGx5LWV4dGVuZHMuanMiLCIuLi9ub2RlX21vZHVsZXMveWFyZ3MvaW5kZXgubWpzIiwiLi4vc3JjL2NsaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIndXNlIHN0cmljdCc7XG5jb25zdCBhbGlnbiA9IHtcbiAgICByaWdodDogYWxpZ25SaWdodCxcbiAgICBjZW50ZXI6IGFsaWduQ2VudGVyXG59O1xuY29uc3QgdG9wID0gMDtcbmNvbnN0IHJpZ2h0ID0gMTtcbmNvbnN0IGJvdHRvbSA9IDI7XG5jb25zdCBsZWZ0ID0gMztcbmV4cG9ydCBjbGFzcyBVSSB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMud2lkdGggPSBvcHRzLndpZHRoO1xuICAgICAgICB0aGlzLndyYXAgPSAoX2EgPSBvcHRzLndyYXApICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHRydWU7XG4gICAgICAgIHRoaXMucm93cyA9IFtdO1xuICAgIH1cbiAgICBzcGFuKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3QgY29scyA9IHRoaXMuZGl2KC4uLmFyZ3MpO1xuICAgICAgICBjb2xzLnNwYW4gPSB0cnVlO1xuICAgIH1cbiAgICByZXNldE91dHB1dCgpIHtcbiAgICAgICAgdGhpcy5yb3dzID0gW107XG4gICAgfVxuICAgIGRpdiguLi5hcmdzKSB7XG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhpcy5kaXYoJycpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLndyYXAgJiYgdGhpcy5zaG91bGRBcHBseUxheW91dERTTCguLi5hcmdzKSAmJiB0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGx5TGF5b3V0RFNMKGFyZ3NbMF0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvbHMgPSBhcmdzLm1hcChhcmcgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sRnJvbVN0cmluZyhhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucm93cy5wdXNoKGNvbHMpO1xuICAgICAgICByZXR1cm4gY29scztcbiAgICB9XG4gICAgc2hvdWxkQXBwbHlMYXlvdXREU0woLi4uYXJncykge1xuICAgICAgICByZXR1cm4gYXJncy5sZW5ndGggPT09IDEgJiYgdHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgICAvW1xcdFxcbl0vLnRlc3QoYXJnc1swXSk7XG4gICAgfVxuICAgIGFwcGx5TGF5b3V0RFNMKHN0cikge1xuICAgICAgICBjb25zdCByb3dzID0gc3RyLnNwbGl0KCdcXG4nKS5tYXAocm93ID0+IHJvdy5zcGxpdCgnXFx0JykpO1xuICAgICAgICBsZXQgbGVmdENvbHVtbldpZHRoID0gMDtcbiAgICAgICAgLy8gc2ltcGxlIGhldXJpc3RpYyBmb3IgbGF5b3V0LCBtYWtlIHN1cmUgdGhlXG4gICAgICAgIC8vIHNlY29uZCBjb2x1bW4gbGluZXMgdXAgYWxvbmcgdGhlIGxlZnQtaGFuZC5cbiAgICAgICAgLy8gZG9uJ3QgYWxsb3cgdGhlIGZpcnN0IGNvbHVtbiB0byB0YWtlIHVwIG1vcmVcbiAgICAgICAgLy8gdGhhbiA1MCUgb2YgdGhlIHNjcmVlbi5cbiAgICAgICAgcm93cy5mb3JFYWNoKGNvbHVtbnMgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbHVtbnMubGVuZ3RoID4gMSAmJiBtaXhpbi5zdHJpbmdXaWR0aChjb2x1bW5zWzBdKSA+IGxlZnRDb2x1bW5XaWR0aCkge1xuICAgICAgICAgICAgICAgIGxlZnRDb2x1bW5XaWR0aCA9IE1hdGgubWluKE1hdGguZmxvb3IodGhpcy53aWR0aCAqIDAuNSksIG1peGluLnN0cmluZ1dpZHRoKGNvbHVtbnNbMF0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8vIGdlbmVyYXRlIGEgdGFibGU6XG4gICAgICAgIC8vICByZXBsYWNpbmcgJyAnIHdpdGggcGFkZGluZyBjYWxjdWxhdGlvbnMuXG4gICAgICAgIC8vICB1c2luZyB0aGUgYWxnb3JpdGhtaWNhbGx5IGdlbmVyYXRlZCB3aWR0aC5cbiAgICAgICAgcm93cy5mb3JFYWNoKGNvbHVtbnMgPT4ge1xuICAgICAgICAgICAgdGhpcy5kaXYoLi4uY29sdW1ucy5tYXAoKHIsIGkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiByLnRyaW0oKSxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogdGhpcy5tZWFzdXJlUGFkZGluZyhyKSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IChpID09PSAwICYmIGNvbHVtbnMubGVuZ3RoID4gMSkgPyBsZWZ0Q29sdW1uV2lkdGggOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMucm93c1t0aGlzLnJvd3MubGVuZ3RoIC0gMV07XG4gICAgfVxuICAgIGNvbEZyb21TdHJpbmcodGV4dCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdGV4dCxcbiAgICAgICAgICAgIHBhZGRpbmc6IHRoaXMubWVhc3VyZVBhZGRpbmcodGV4dClcbiAgICAgICAgfTtcbiAgICB9XG4gICAgbWVhc3VyZVBhZGRpbmcoc3RyKSB7XG4gICAgICAgIC8vIG1lYXN1cmUgcGFkZGluZyB3aXRob3V0IGFuc2kgZXNjYXBlIGNvZGVzXG4gICAgICAgIGNvbnN0IG5vQW5zaSA9IG1peGluLnN0cmlwQW5zaShzdHIpO1xuICAgICAgICByZXR1cm4gWzAsIG5vQW5zaS5tYXRjaCgvXFxzKiQvKVswXS5sZW5ndGgsIDAsIG5vQW5zaS5tYXRjaCgvXlxccyovKVswXS5sZW5ndGhdO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgY29uc3QgbGluZXMgPSBbXTtcbiAgICAgICAgdGhpcy5yb3dzLmZvckVhY2gocm93ID0+IHtcbiAgICAgICAgICAgIHRoaXMucm93VG9TdHJpbmcocm93LCBsaW5lcyk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyBkb24ndCBkaXNwbGF5IGFueSBsaW5lcyB3aXRoIHRoZVxuICAgICAgICAvLyBoaWRkZW4gZmxhZyBzZXQuXG4gICAgICAgIHJldHVybiBsaW5lc1xuICAgICAgICAgICAgLmZpbHRlcihsaW5lID0+ICFsaW5lLmhpZGRlbilcbiAgICAgICAgICAgIC5tYXAobGluZSA9PiBsaW5lLnRleHQpXG4gICAgICAgICAgICAuam9pbignXFxuJyk7XG4gICAgfVxuICAgIHJvd1RvU3RyaW5nKHJvdywgbGluZXMpIHtcbiAgICAgICAgdGhpcy5yYXN0ZXJpemUocm93KS5mb3JFYWNoKChycm93LCByKSA9PiB7XG4gICAgICAgICAgICBsZXQgc3RyID0gJyc7XG4gICAgICAgICAgICBycm93LmZvckVhY2goKGNvbCwgYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgd2lkdGggfSA9IHJvd1tjXTsgLy8gdGhlIHdpZHRoIHdpdGggcGFkZGluZy5cbiAgICAgICAgICAgICAgICBjb25zdCB3cmFwV2lkdGggPSB0aGlzLm5lZ2F0ZVBhZGRpbmcocm93W2NdKTsgLy8gdGhlIHdpZHRoIHdpdGhvdXQgcGFkZGluZy5cbiAgICAgICAgICAgICAgICBsZXQgdHMgPSBjb2w7IC8vIHRlbXBvcmFyeSBzdHJpbmcgdXNlZCBkdXJpbmcgYWxpZ25tZW50L3BhZGRpbmcuXG4gICAgICAgICAgICAgICAgaWYgKHdyYXBXaWR0aCA+IG1peGluLnN0cmluZ1dpZHRoKGNvbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdHMgKz0gJyAnLnJlcGVhdCh3cmFwV2lkdGggLSBtaXhpbi5zdHJpbmdXaWR0aChjb2wpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gYWxpZ24gdGhlIHN0cmluZyB3aXRoaW4gaXRzIGNvbHVtbi5cbiAgICAgICAgICAgICAgICBpZiAocm93W2NdLmFsaWduICYmIHJvd1tjXS5hbGlnbiAhPT0gJ2xlZnQnICYmIHRoaXMud3JhcCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmbiA9IGFsaWduW3Jvd1tjXS5hbGlnbl07XG4gICAgICAgICAgICAgICAgICAgIHRzID0gZm4odHMsIHdyYXBXaWR0aCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChtaXhpbi5zdHJpbmdXaWR0aCh0cykgPCB3cmFwV2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRzICs9ICcgJy5yZXBlYXQoKHdpZHRoIHx8IDApIC0gbWl4aW4uc3RyaW5nV2lkdGgodHMpIC0gMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gYXBwbHkgYm9yZGVyIGFuZCBwYWRkaW5nIHRvIHN0cmluZy5cbiAgICAgICAgICAgICAgICBjb25zdCBwYWRkaW5nID0gcm93W2NdLnBhZGRpbmcgfHwgWzAsIDAsIDAsIDBdO1xuICAgICAgICAgICAgICAgIGlmIChwYWRkaW5nW2xlZnRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHN0ciArPSAnICcucmVwZWF0KHBhZGRpbmdbbGVmdF0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdHIgKz0gYWRkQm9yZGVyKHJvd1tjXSwgdHMsICd8ICcpO1xuICAgICAgICAgICAgICAgIHN0ciArPSB0cztcbiAgICAgICAgICAgICAgICBzdHIgKz0gYWRkQm9yZGVyKHJvd1tjXSwgdHMsICcgfCcpO1xuICAgICAgICAgICAgICAgIGlmIChwYWRkaW5nW3JpZ2h0XSkge1xuICAgICAgICAgICAgICAgICAgICBzdHIgKz0gJyAnLnJlcGVhdChwYWRkaW5nW3JpZ2h0XSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIGlmIHByaW9yIHJvdyBpcyBzcGFuLCB0cnkgdG8gcmVuZGVyIHRoZVxuICAgICAgICAgICAgICAgIC8vIGN1cnJlbnQgcm93IG9uIHRoZSBwcmlvciBsaW5lLlxuICAgICAgICAgICAgICAgIGlmIChyID09PSAwICYmIGxpbmVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gdGhpcy5yZW5kZXJJbmxpbmUoc3RyLCBsaW5lc1tsaW5lcy5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZS5cbiAgICAgICAgICAgIGxpbmVzLnB1c2goe1xuICAgICAgICAgICAgICAgIHRleHQ6IHN0ci5yZXBsYWNlKC8gKyQvLCAnJyksXG4gICAgICAgICAgICAgICAgc3Bhbjogcm93LnNwYW5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGxpbmVzO1xuICAgIH1cbiAgICAvLyBpZiB0aGUgZnVsbCAnc291cmNlJyBjYW4gcmVuZGVyIGluXG4gICAgLy8gdGhlIHRhcmdldCBsaW5lLCBkbyBzby5cbiAgICByZW5kZXJJbmxpbmUoc291cmNlLCBwcmV2aW91c0xpbmUpIHtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBzb3VyY2UubWF0Y2goL14gKi8pO1xuICAgICAgICBjb25zdCBsZWFkaW5nV2hpdGVzcGFjZSA9IG1hdGNoID8gbWF0Y2hbMF0ubGVuZ3RoIDogMDtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gcHJldmlvdXNMaW5lLnRleHQ7XG4gICAgICAgIGNvbnN0IHRhcmdldFRleHRXaWR0aCA9IG1peGluLnN0cmluZ1dpZHRoKHRhcmdldC50cmltUmlnaHQoKSk7XG4gICAgICAgIGlmICghcHJldmlvdXNMaW5lLnNwYW4pIHtcbiAgICAgICAgICAgIHJldHVybiBzb3VyY2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgd2UncmUgbm90IGFwcGx5aW5nIHdyYXBwaW5nIGxvZ2ljLFxuICAgICAgICAvLyBqdXN0IGFsd2F5cyBhcHBlbmQgdG8gdGhlIHNwYW4uXG4gICAgICAgIGlmICghdGhpcy53cmFwKSB7XG4gICAgICAgICAgICBwcmV2aW91c0xpbmUuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0YXJnZXQgKyBzb3VyY2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxlYWRpbmdXaGl0ZXNwYWNlIDwgdGFyZ2V0VGV4dFdpZHRoKSB7XG4gICAgICAgICAgICByZXR1cm4gc291cmNlO1xuICAgICAgICB9XG4gICAgICAgIHByZXZpb3VzTGluZS5oaWRkZW4gPSB0cnVlO1xuICAgICAgICByZXR1cm4gdGFyZ2V0LnRyaW1SaWdodCgpICsgJyAnLnJlcGVhdChsZWFkaW5nV2hpdGVzcGFjZSAtIHRhcmdldFRleHRXaWR0aCkgKyBzb3VyY2UudHJpbUxlZnQoKTtcbiAgICB9XG4gICAgcmFzdGVyaXplKHJvdykge1xuICAgICAgICBjb25zdCBycm93cyA9IFtdO1xuICAgICAgICBjb25zdCB3aWR0aHMgPSB0aGlzLmNvbHVtbldpZHRocyhyb3cpO1xuICAgICAgICBsZXQgd3JhcHBlZDtcbiAgICAgICAgLy8gd29yZCB3cmFwIGFsbCBjb2x1bW5zLCBhbmQgY3JlYXRlXG4gICAgICAgIC8vIGEgZGF0YS1zdHJ1Y3R1cmUgdGhhdCBpcyBlYXN5IHRvIHJhc3Rlcml6ZS5cbiAgICAgICAgcm93LmZvckVhY2goKGNvbCwgYykgPT4ge1xuICAgICAgICAgICAgLy8gbGVhdmUgcm9vbSBmb3IgbGVmdCBhbmQgcmlnaHQgcGFkZGluZy5cbiAgICAgICAgICAgIGNvbC53aWR0aCA9IHdpZHRoc1tjXTtcbiAgICAgICAgICAgIGlmICh0aGlzLndyYXApIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVkID0gbWl4aW4ud3JhcChjb2wudGV4dCwgdGhpcy5uZWdhdGVQYWRkaW5nKGNvbCksIHsgaGFyZDogdHJ1ZSB9KS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVkID0gY29sLnRleHQuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNvbC5ib3JkZXIpIHtcbiAgICAgICAgICAgICAgICB3cmFwcGVkLnVuc2hpZnQoJy4nICsgJy0nLnJlcGVhdCh0aGlzLm5lZ2F0ZVBhZGRpbmcoY29sKSArIDIpICsgJy4nKTtcbiAgICAgICAgICAgICAgICB3cmFwcGVkLnB1c2goXCInXCIgKyAnLScucmVwZWF0KHRoaXMubmVnYXRlUGFkZGluZyhjb2wpICsgMikgKyBcIidcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBhZGQgdG9wIGFuZCBib3R0b20gcGFkZGluZy5cbiAgICAgICAgICAgIGlmIChjb2wucGFkZGluZykge1xuICAgICAgICAgICAgICAgIHdyYXBwZWQudW5zaGlmdCguLi5uZXcgQXJyYXkoY29sLnBhZGRpbmdbdG9wXSB8fCAwKS5maWxsKCcnKSk7XG4gICAgICAgICAgICAgICAgd3JhcHBlZC5wdXNoKC4uLm5ldyBBcnJheShjb2wucGFkZGluZ1tib3R0b21dIHx8IDApLmZpbGwoJycpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdyYXBwZWQuZm9yRWFjaCgoc3RyLCByKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFycm93c1tyXSkge1xuICAgICAgICAgICAgICAgICAgICBycm93cy5wdXNoKFtdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgcnJvdyA9IHJyb3dzW3JdO1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYzsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChycm93W2ldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJyb3cucHVzaCgnJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcnJvdy5wdXNoKHN0cik7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBycm93cztcbiAgICB9XG4gICAgbmVnYXRlUGFkZGluZyhjb2wpIHtcbiAgICAgICAgbGV0IHdyYXBXaWR0aCA9IGNvbC53aWR0aCB8fCAwO1xuICAgICAgICBpZiAoY29sLnBhZGRpbmcpIHtcbiAgICAgICAgICAgIHdyYXBXaWR0aCAtPSAoY29sLnBhZGRpbmdbbGVmdF0gfHwgMCkgKyAoY29sLnBhZGRpbmdbcmlnaHRdIHx8IDApO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2wuYm9yZGVyKSB7XG4gICAgICAgICAgICB3cmFwV2lkdGggLT0gNDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd3JhcFdpZHRoO1xuICAgIH1cbiAgICBjb2x1bW5XaWR0aHMocm93KSB7XG4gICAgICAgIGlmICghdGhpcy53cmFwKSB7XG4gICAgICAgICAgICByZXR1cm4gcm93Lm1hcChjb2wgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2wud2lkdGggfHwgbWl4aW4uc3RyaW5nV2lkdGgoY29sLnRleHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHVuc2V0ID0gcm93Lmxlbmd0aDtcbiAgICAgICAgbGV0IHJlbWFpbmluZ1dpZHRoID0gdGhpcy53aWR0aDtcbiAgICAgICAgLy8gY29sdW1uIHdpZHRocyBjYW4gYmUgc2V0IGluIGNvbmZpZy5cbiAgICAgICAgY29uc3Qgd2lkdGhzID0gcm93Lm1hcChjb2wgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbC53aWR0aCkge1xuICAgICAgICAgICAgICAgIHVuc2V0LS07XG4gICAgICAgICAgICAgICAgcmVtYWluaW5nV2lkdGggLT0gY29sLndpZHRoO1xuICAgICAgICAgICAgICAgIHJldHVybiBjb2wud2lkdGg7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gYW55IHVuc2V0IHdpZHRocyBzaG91bGQgYmUgY2FsY3VsYXRlZC5cbiAgICAgICAgY29uc3QgdW5zZXRXaWR0aCA9IHVuc2V0ID8gTWF0aC5mbG9vcihyZW1haW5pbmdXaWR0aCAvIHVuc2V0KSA6IDA7XG4gICAgICAgIHJldHVybiB3aWR0aHMubWFwKCh3LCBpKSA9PiB7XG4gICAgICAgICAgICBpZiAodyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KHVuc2V0V2lkdGgsIF9taW5XaWR0aChyb3dbaV0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB3O1xuICAgICAgICB9KTtcbiAgICB9XG59XG5mdW5jdGlvbiBhZGRCb3JkZXIoY29sLCB0cywgc3R5bGUpIHtcbiAgICBpZiAoY29sLmJvcmRlcikge1xuICAgICAgICBpZiAoL1suJ10tK1suJ10vLnRlc3QodHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRzLnRyaW0oKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyAgJztcbiAgICB9XG4gICAgcmV0dXJuICcnO1xufVxuLy8gY2FsY3VsYXRlcyB0aGUgbWluaW11bSB3aWR0aCBvZlxuLy8gYSBjb2x1bW4sIGJhc2VkIG9uIHBhZGRpbmcgcHJlZmVyZW5jZXMuXG5mdW5jdGlvbiBfbWluV2lkdGgoY29sKSB7XG4gICAgY29uc3QgcGFkZGluZyA9IGNvbC5wYWRkaW5nIHx8IFtdO1xuICAgIGNvbnN0IG1pbldpZHRoID0gMSArIChwYWRkaW5nW2xlZnRdIHx8IDApICsgKHBhZGRpbmdbcmlnaHRdIHx8IDApO1xuICAgIGlmIChjb2wuYm9yZGVyKSB7XG4gICAgICAgIHJldHVybiBtaW5XaWR0aCArIDQ7XG4gICAgfVxuICAgIHJldHVybiBtaW5XaWR0aDtcbn1cbmZ1bmN0aW9uIGdldFdpbmRvd1dpZHRoKCkge1xuICAgIC8qIGM4IGlnbm9yZSBuZXh0IDU6IGRlcGVuZHMgb24gdGVybWluYWwgKi9cbiAgICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3Muc3Rkb3V0ICYmIHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMpIHtcbiAgICAgICAgcmV0dXJuIHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnM7XG4gICAgfVxuICAgIHJldHVybiA4MDtcbn1cbmZ1bmN0aW9uIGFsaWduUmlnaHQoc3RyLCB3aWR0aCkge1xuICAgIHN0ciA9IHN0ci50cmltKCk7XG4gICAgY29uc3Qgc3RyV2lkdGggPSBtaXhpbi5zdHJpbmdXaWR0aChzdHIpO1xuICAgIGlmIChzdHJXaWR0aCA8IHdpZHRoKSB7XG4gICAgICAgIHJldHVybiAnICcucmVwZWF0KHdpZHRoIC0gc3RyV2lkdGgpICsgc3RyO1xuICAgIH1cbiAgICByZXR1cm4gc3RyO1xufVxuZnVuY3Rpb24gYWxpZ25DZW50ZXIoc3RyLCB3aWR0aCkge1xuICAgIHN0ciA9IHN0ci50cmltKCk7XG4gICAgY29uc3Qgc3RyV2lkdGggPSBtaXhpbi5zdHJpbmdXaWR0aChzdHIpO1xuICAgIC8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbiAgICBpZiAoc3RyV2lkdGggPj0gd2lkdGgpIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgcmV0dXJuICcgJy5yZXBlYXQoKHdpZHRoIC0gc3RyV2lkdGgpID4+IDEpICsgc3RyO1xufVxubGV0IG1peGluO1xuZXhwb3J0IGZ1bmN0aW9uIGNsaXVpKG9wdHMsIF9taXhpbikge1xuICAgIG1peGluID0gX21peGluO1xuICAgIHJldHVybiBuZXcgVUkoe1xuICAgICAgICB3aWR0aDogKG9wdHMgPT09IG51bGwgfHwgb3B0cyA9PT0gdm9pZCAwID8gdm9pZCAwIDogb3B0cy53aWR0aCkgfHwgZ2V0V2luZG93V2lkdGgoKSxcbiAgICAgICAgd3JhcDogb3B0cyA9PT0gbnVsbCB8fCBvcHRzID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRzLndyYXBcbiAgICB9KTtcbn1cbiIsImltcG9ydCBhbnNpUmVnZXggZnJvbSAnYW5zaS1yZWdleCc7XG5cbmNvbnN0IHJlZ2V4ID0gYW5zaVJlZ2V4KCk7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0cmlwQW5zaShzdHJpbmcpIHtcblx0aWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgYSBcXGBzdHJpbmdcXGAsIGdvdCBcXGAke3R5cGVvZiBzdHJpbmd9XFxgYCk7XG5cdH1cblxuXHQvLyBFdmVuIHRob3VnaCB0aGUgcmVnZXggaXMgZ2xvYmFsLCB3ZSBkb24ndCBuZWVkIHRvIHJlc2V0IHRoZSBgLmxhc3RJbmRleGBcblx0Ly8gYmVjYXVzZSB1bmxpa2UgYC5leGVjKClgIGFuZCBgLnRlc3QoKWAsIGAucmVwbGFjZSgpYCBkb2VzIGl0IGF1dG9tYXRpY2FsbHlcblx0Ly8gYW5kIGRvaW5nIGl0IG1hbnVhbGx5IGhhcyBhIHBlcmZvcm1hbmNlIHBlbmFsdHkuXG5cdHJldHVybiBzdHJpbmcucmVwbGFjZShyZWdleCwgJycpO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYW5zaVJlZ2V4KHtvbmx5Rmlyc3QgPSBmYWxzZX0gPSB7fSkge1xuXHQvLyBWYWxpZCBzdHJpbmcgdGVybWluYXRvciBzZXF1ZW5jZXMgYXJlIEJFTCwgRVNDXFwsIGFuZCAweDljXG5cdGNvbnN0IFNUID0gJyg/OlxcXFx1MDAwN3xcXFxcdTAwMUJcXFxcdTAwNUN8XFxcXHUwMDlDKSc7XG5cblx0Ly8gT1NDIHNlcXVlbmNlcyBvbmx5OiBFU0MgXSAuLi4gU1QgKG5vbi1ncmVlZHkgdW50aWwgdGhlIGZpcnN0IFNUKVxuXHRjb25zdCBvc2MgPSBgKD86XFxcXHUwMDFCXFxcXF1bXFxcXHNcXFxcU10qPyR7U1R9KWA7XG5cblx0Ly8gQ1NJIGFuZCByZWxhdGVkOiBFU0MvQzEsIG9wdGlvbmFsIGludGVybWVkaWF0ZXMsIG9wdGlvbmFsIHBhcmFtcyAoc3VwcG9ydHMgOyBhbmQgOikgdGhlbiBmaW5hbCBieXRlXG5cdGNvbnN0IGNzaSA9ICdbXFxcXHUwMDFCXFxcXHUwMDlCXVtbXFxcXF0oKSM7P10qKD86XFxcXGR7MSw0fSg/Ols7Ol1cXFxcZHswLDR9KSopP1tcXFxcZEEtUFItVFpjZi1ucS11eT0+PH5dJztcblxuXHRjb25zdCBwYXR0ZXJuID0gYCR7b3NjfXwke2NzaX1gO1xuXG5cdHJldHVybiBuZXcgUmVnRXhwKHBhdHRlcm4sIG9ubHlGaXJzdCA/IHVuZGVmaW5lZCA6ICdnJyk7XG59XG4iLCJpbXBvcnQge2dldENhdGVnb3J5LCBpc0FtYmlndW91cywgaXNGdWxsV2lkdGgsIGlzV2lkZX0gZnJvbSAnLi9sb29rdXAuanMnO1xuXG5mdW5jdGlvbiB2YWxpZGF0ZShjb2RlUG9pbnQpIHtcblx0aWYgKCFOdW1iZXIuaXNTYWZlSW50ZWdlcihjb2RlUG9pbnQpKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgYSBjb2RlIHBvaW50LCBnb3QgXFxgJHt0eXBlb2YgY29kZVBvaW50fVxcYC5gKTtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZWFzdEFzaWFuV2lkdGhUeXBlKGNvZGVQb2ludCkge1xuXHR2YWxpZGF0ZShjb2RlUG9pbnQpO1xuXG5cdHJldHVybiBnZXRDYXRlZ29yeShjb2RlUG9pbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZWFzdEFzaWFuV2lkdGgoY29kZVBvaW50LCB7YW1iaWd1b3VzQXNXaWRlID0gZmFsc2V9ID0ge30pIHtcblx0dmFsaWRhdGUoY29kZVBvaW50KTtcblxuXHRpZiAoXG5cdFx0aXNGdWxsV2lkdGgoY29kZVBvaW50KVxuXHRcdHx8IGlzV2lkZShjb2RlUG9pbnQpXG5cdFx0fHwgKGFtYmlndW91c0FzV2lkZSAmJiBpc0FtYmlndW91cyhjb2RlUG9pbnQpKVxuXHQpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdHJldHVybiAxO1xufVxuXG4vLyBQcml2YXRlIGV4cG9ydHMgZm9yIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvaXMtZnVsbHdpZHRoLWNvZGUtcG9pbnRcbmV4cG9ydCB7aXNGdWxsV2lkdGggYXMgX2lzRnVsbFdpZHRoLCBpc1dpZGUgYXMgX2lzV2lkZX0gZnJvbSAnLi9sb29rdXAuanMnO1xuIiwiLy8gR2VuZXJhdGVkIGNvZGUuXG5cbmZ1bmN0aW9uIGlzQW1iaWd1b3VzKHgpIHtcblx0cmV0dXJuIHggPT09IDB4QTFcblx0XHR8fCB4ID09PSAweEE0XG5cdFx0fHwgeCA9PT0gMHhBN1xuXHRcdHx8IHggPT09IDB4QThcblx0XHR8fCB4ID09PSAweEFBXG5cdFx0fHwgeCA9PT0gMHhBRFxuXHRcdHx8IHggPT09IDB4QUVcblx0XHR8fCB4ID49IDB4QjAgJiYgeCA8PSAweEI0XG5cdFx0fHwgeCA+PSAweEI2ICYmIHggPD0gMHhCQVxuXHRcdHx8IHggPj0gMHhCQyAmJiB4IDw9IDB4QkZcblx0XHR8fCB4ID09PSAweEM2XG5cdFx0fHwgeCA9PT0gMHhEMFxuXHRcdHx8IHggPT09IDB4RDdcblx0XHR8fCB4ID09PSAweEQ4XG5cdFx0fHwgeCA+PSAweERFICYmIHggPD0gMHhFMVxuXHRcdHx8IHggPT09IDB4RTZcblx0XHR8fCB4ID49IDB4RTggJiYgeCA8PSAweEVBXG5cdFx0fHwgeCA9PT0gMHhFQ1xuXHRcdHx8IHggPT09IDB4RURcblx0XHR8fCB4ID09PSAweEYwXG5cdFx0fHwgeCA9PT0gMHhGMlxuXHRcdHx8IHggPT09IDB4RjNcblx0XHR8fCB4ID49IDB4RjcgJiYgeCA8PSAweEZBXG5cdFx0fHwgeCA9PT0gMHhGQ1xuXHRcdHx8IHggPT09IDB4RkVcblx0XHR8fCB4ID09PSAweDEwMVxuXHRcdHx8IHggPT09IDB4MTExXG5cdFx0fHwgeCA9PT0gMHgxMTNcblx0XHR8fCB4ID09PSAweDExQlxuXHRcdHx8IHggPT09IDB4MTI2XG5cdFx0fHwgeCA9PT0gMHgxMjdcblx0XHR8fCB4ID09PSAweDEyQlxuXHRcdHx8IHggPj0gMHgxMzEgJiYgeCA8PSAweDEzM1xuXHRcdHx8IHggPT09IDB4MTM4XG5cdFx0fHwgeCA+PSAweDEzRiAmJiB4IDw9IDB4MTQyXG5cdFx0fHwgeCA9PT0gMHgxNDRcblx0XHR8fCB4ID49IDB4MTQ4ICYmIHggPD0gMHgxNEJcblx0XHR8fCB4ID09PSAweDE0RFxuXHRcdHx8IHggPT09IDB4MTUyXG5cdFx0fHwgeCA9PT0gMHgxNTNcblx0XHR8fCB4ID09PSAweDE2NlxuXHRcdHx8IHggPT09IDB4MTY3XG5cdFx0fHwgeCA9PT0gMHgxNkJcblx0XHR8fCB4ID09PSAweDFDRVxuXHRcdHx8IHggPT09IDB4MUQwXG5cdFx0fHwgeCA9PT0gMHgxRDJcblx0XHR8fCB4ID09PSAweDFENFxuXHRcdHx8IHggPT09IDB4MUQ2XG5cdFx0fHwgeCA9PT0gMHgxRDhcblx0XHR8fCB4ID09PSAweDFEQVxuXHRcdHx8IHggPT09IDB4MURDXG5cdFx0fHwgeCA9PT0gMHgyNTFcblx0XHR8fCB4ID09PSAweDI2MVxuXHRcdHx8IHggPT09IDB4MkM0XG5cdFx0fHwgeCA9PT0gMHgyQzdcblx0XHR8fCB4ID49IDB4MkM5ICYmIHggPD0gMHgyQ0Jcblx0XHR8fCB4ID09PSAweDJDRFxuXHRcdHx8IHggPT09IDB4MkQwXG5cdFx0fHwgeCA+PSAweDJEOCAmJiB4IDw9IDB4MkRCXG5cdFx0fHwgeCA9PT0gMHgyRERcblx0XHR8fCB4ID09PSAweDJERlxuXHRcdHx8IHggPj0gMHgzMDAgJiYgeCA8PSAweDM2RlxuXHRcdHx8IHggPj0gMHgzOTEgJiYgeCA8PSAweDNBMVxuXHRcdHx8IHggPj0gMHgzQTMgJiYgeCA8PSAweDNBOVxuXHRcdHx8IHggPj0gMHgzQjEgJiYgeCA8PSAweDNDMVxuXHRcdHx8IHggPj0gMHgzQzMgJiYgeCA8PSAweDNDOVxuXHRcdHx8IHggPT09IDB4NDAxXG5cdFx0fHwgeCA+PSAweDQxMCAmJiB4IDw9IDB4NDRGXG5cdFx0fHwgeCA9PT0gMHg0NTFcblx0XHR8fCB4ID09PSAweDIwMTBcblx0XHR8fCB4ID49IDB4MjAxMyAmJiB4IDw9IDB4MjAxNlxuXHRcdHx8IHggPT09IDB4MjAxOFxuXHRcdHx8IHggPT09IDB4MjAxOVxuXHRcdHx8IHggPT09IDB4MjAxQ1xuXHRcdHx8IHggPT09IDB4MjAxRFxuXHRcdHx8IHggPj0gMHgyMDIwICYmIHggPD0gMHgyMDIyXG5cdFx0fHwgeCA+PSAweDIwMjQgJiYgeCA8PSAweDIwMjdcblx0XHR8fCB4ID09PSAweDIwMzBcblx0XHR8fCB4ID09PSAweDIwMzJcblx0XHR8fCB4ID09PSAweDIwMzNcblx0XHR8fCB4ID09PSAweDIwMzVcblx0XHR8fCB4ID09PSAweDIwM0Jcblx0XHR8fCB4ID09PSAweDIwM0Vcblx0XHR8fCB4ID09PSAweDIwNzRcblx0XHR8fCB4ID09PSAweDIwN0Zcblx0XHR8fCB4ID49IDB4MjA4MSAmJiB4IDw9IDB4MjA4NFxuXHRcdHx8IHggPT09IDB4MjBBQ1xuXHRcdHx8IHggPT09IDB4MjEwM1xuXHRcdHx8IHggPT09IDB4MjEwNVxuXHRcdHx8IHggPT09IDB4MjEwOVxuXHRcdHx8IHggPT09IDB4MjExM1xuXHRcdHx8IHggPT09IDB4MjExNlxuXHRcdHx8IHggPT09IDB4MjEyMVxuXHRcdHx8IHggPT09IDB4MjEyMlxuXHRcdHx8IHggPT09IDB4MjEyNlxuXHRcdHx8IHggPT09IDB4MjEyQlxuXHRcdHx8IHggPT09IDB4MjE1M1xuXHRcdHx8IHggPT09IDB4MjE1NFxuXHRcdHx8IHggPj0gMHgyMTVCICYmIHggPD0gMHgyMTVFXG5cdFx0fHwgeCA+PSAweDIxNjAgJiYgeCA8PSAweDIxNkJcblx0XHR8fCB4ID49IDB4MjE3MCAmJiB4IDw9IDB4MjE3OVxuXHRcdHx8IHggPT09IDB4MjE4OVxuXHRcdHx8IHggPj0gMHgyMTkwICYmIHggPD0gMHgyMTk5XG5cdFx0fHwgeCA9PT0gMHgyMUI4XG5cdFx0fHwgeCA9PT0gMHgyMUI5XG5cdFx0fHwgeCA9PT0gMHgyMUQyXG5cdFx0fHwgeCA9PT0gMHgyMUQ0XG5cdFx0fHwgeCA9PT0gMHgyMUU3XG5cdFx0fHwgeCA9PT0gMHgyMjAwXG5cdFx0fHwgeCA9PT0gMHgyMjAyXG5cdFx0fHwgeCA9PT0gMHgyMjAzXG5cdFx0fHwgeCA9PT0gMHgyMjA3XG5cdFx0fHwgeCA9PT0gMHgyMjA4XG5cdFx0fHwgeCA9PT0gMHgyMjBCXG5cdFx0fHwgeCA9PT0gMHgyMjBGXG5cdFx0fHwgeCA9PT0gMHgyMjExXG5cdFx0fHwgeCA9PT0gMHgyMjE1XG5cdFx0fHwgeCA9PT0gMHgyMjFBXG5cdFx0fHwgeCA+PSAweDIyMUQgJiYgeCA8PSAweDIyMjBcblx0XHR8fCB4ID09PSAweDIyMjNcblx0XHR8fCB4ID09PSAweDIyMjVcblx0XHR8fCB4ID49IDB4MjIyNyAmJiB4IDw9IDB4MjIyQ1xuXHRcdHx8IHggPT09IDB4MjIyRVxuXHRcdHx8IHggPj0gMHgyMjM0ICYmIHggPD0gMHgyMjM3XG5cdFx0fHwgeCA9PT0gMHgyMjNDXG5cdFx0fHwgeCA9PT0gMHgyMjNEXG5cdFx0fHwgeCA9PT0gMHgyMjQ4XG5cdFx0fHwgeCA9PT0gMHgyMjRDXG5cdFx0fHwgeCA9PT0gMHgyMjUyXG5cdFx0fHwgeCA9PT0gMHgyMjYwXG5cdFx0fHwgeCA9PT0gMHgyMjYxXG5cdFx0fHwgeCA+PSAweDIyNjQgJiYgeCA8PSAweDIyNjdcblx0XHR8fCB4ID09PSAweDIyNkFcblx0XHR8fCB4ID09PSAweDIyNkJcblx0XHR8fCB4ID09PSAweDIyNkVcblx0XHR8fCB4ID09PSAweDIyNkZcblx0XHR8fCB4ID09PSAweDIyODJcblx0XHR8fCB4ID09PSAweDIyODNcblx0XHR8fCB4ID09PSAweDIyODZcblx0XHR8fCB4ID09PSAweDIyODdcblx0XHR8fCB4ID09PSAweDIyOTVcblx0XHR8fCB4ID09PSAweDIyOTlcblx0XHR8fCB4ID09PSAweDIyQTVcblx0XHR8fCB4ID09PSAweDIyQkZcblx0XHR8fCB4ID09PSAweDIzMTJcblx0XHR8fCB4ID49IDB4MjQ2MCAmJiB4IDw9IDB4MjRFOVxuXHRcdHx8IHggPj0gMHgyNEVCICYmIHggPD0gMHgyNTRCXG5cdFx0fHwgeCA+PSAweDI1NTAgJiYgeCA8PSAweDI1NzNcblx0XHR8fCB4ID49IDB4MjU4MCAmJiB4IDw9IDB4MjU4RlxuXHRcdHx8IHggPj0gMHgyNTkyICYmIHggPD0gMHgyNTk1XG5cdFx0fHwgeCA9PT0gMHgyNUEwXG5cdFx0fHwgeCA9PT0gMHgyNUExXG5cdFx0fHwgeCA+PSAweDI1QTMgJiYgeCA8PSAweDI1QTlcblx0XHR8fCB4ID09PSAweDI1QjJcblx0XHR8fCB4ID09PSAweDI1QjNcblx0XHR8fCB4ID09PSAweDI1QjZcblx0XHR8fCB4ID09PSAweDI1Qjdcblx0XHR8fCB4ID09PSAweDI1QkNcblx0XHR8fCB4ID09PSAweDI1QkRcblx0XHR8fCB4ID09PSAweDI1QzBcblx0XHR8fCB4ID09PSAweDI1QzFcblx0XHR8fCB4ID49IDB4MjVDNiAmJiB4IDw9IDB4MjVDOFxuXHRcdHx8IHggPT09IDB4MjVDQlxuXHRcdHx8IHggPj0gMHgyNUNFICYmIHggPD0gMHgyNUQxXG5cdFx0fHwgeCA+PSAweDI1RTIgJiYgeCA8PSAweDI1RTVcblx0XHR8fCB4ID09PSAweDI1RUZcblx0XHR8fCB4ID09PSAweDI2MDVcblx0XHR8fCB4ID09PSAweDI2MDZcblx0XHR8fCB4ID09PSAweDI2MDlcblx0XHR8fCB4ID09PSAweDI2MEVcblx0XHR8fCB4ID09PSAweDI2MEZcblx0XHR8fCB4ID09PSAweDI2MUNcblx0XHR8fCB4ID09PSAweDI2MUVcblx0XHR8fCB4ID09PSAweDI2NDBcblx0XHR8fCB4ID09PSAweDI2NDJcblx0XHR8fCB4ID09PSAweDI2NjBcblx0XHR8fCB4ID09PSAweDI2NjFcblx0XHR8fCB4ID49IDB4MjY2MyAmJiB4IDw9IDB4MjY2NVxuXHRcdHx8IHggPj0gMHgyNjY3ICYmIHggPD0gMHgyNjZBXG5cdFx0fHwgeCA9PT0gMHgyNjZDXG5cdFx0fHwgeCA9PT0gMHgyNjZEXG5cdFx0fHwgeCA9PT0gMHgyNjZGXG5cdFx0fHwgeCA9PT0gMHgyNjlFXG5cdFx0fHwgeCA9PT0gMHgyNjlGXG5cdFx0fHwgeCA9PT0gMHgyNkJGXG5cdFx0fHwgeCA+PSAweDI2QzYgJiYgeCA8PSAweDI2Q0Rcblx0XHR8fCB4ID49IDB4MjZDRiAmJiB4IDw9IDB4MjZEM1xuXHRcdHx8IHggPj0gMHgyNkQ1ICYmIHggPD0gMHgyNkUxXG5cdFx0fHwgeCA9PT0gMHgyNkUzXG5cdFx0fHwgeCA9PT0gMHgyNkU4XG5cdFx0fHwgeCA9PT0gMHgyNkU5XG5cdFx0fHwgeCA+PSAweDI2RUIgJiYgeCA8PSAweDI2RjFcblx0XHR8fCB4ID09PSAweDI2RjRcblx0XHR8fCB4ID49IDB4MjZGNiAmJiB4IDw9IDB4MjZGOVxuXHRcdHx8IHggPT09IDB4MjZGQlxuXHRcdHx8IHggPT09IDB4MjZGQ1xuXHRcdHx8IHggPT09IDB4MjZGRVxuXHRcdHx8IHggPT09IDB4MjZGRlxuXHRcdHx8IHggPT09IDB4MjczRFxuXHRcdHx8IHggPj0gMHgyNzc2ICYmIHggPD0gMHgyNzdGXG5cdFx0fHwgeCA+PSAweDJCNTYgJiYgeCA8PSAweDJCNTlcblx0XHR8fCB4ID49IDB4MzI0OCAmJiB4IDw9IDB4MzI0RlxuXHRcdHx8IHggPj0gMHhFMDAwICYmIHggPD0gMHhGOEZGXG5cdFx0fHwgeCA+PSAweEZFMDAgJiYgeCA8PSAweEZFMEZcblx0XHR8fCB4ID09PSAweEZGRkRcblx0XHR8fCB4ID49IDB4MUYxMDAgJiYgeCA8PSAweDFGMTBBXG5cdFx0fHwgeCA+PSAweDFGMTEwICYmIHggPD0gMHgxRjEyRFxuXHRcdHx8IHggPj0gMHgxRjEzMCAmJiB4IDw9IDB4MUYxNjlcblx0XHR8fCB4ID49IDB4MUYxNzAgJiYgeCA8PSAweDFGMThEXG5cdFx0fHwgeCA9PT0gMHgxRjE4RlxuXHRcdHx8IHggPT09IDB4MUYxOTBcblx0XHR8fCB4ID49IDB4MUYxOUIgJiYgeCA8PSAweDFGMUFDXG5cdFx0fHwgeCA+PSAweEUwMTAwICYmIHggPD0gMHhFMDFFRlxuXHRcdHx8IHggPj0gMHhGMDAwMCAmJiB4IDw9IDB4RkZGRkRcblx0XHR8fCB4ID49IDB4MTAwMDAwICYmIHggPD0gMHgxMEZGRkQ7XG59XG5cbmZ1bmN0aW9uIGlzRnVsbFdpZHRoKHgpIHtcblx0cmV0dXJuIHggPT09IDB4MzAwMFxuXHRcdHx8IHggPj0gMHhGRjAxICYmIHggPD0gMHhGRjYwXG5cdFx0fHwgeCA+PSAweEZGRTAgJiYgeCA8PSAweEZGRTY7XG59XG5cbmZ1bmN0aW9uIGlzV2lkZSh4KSB7XG5cdHJldHVybiB4ID49IDB4MTEwMCAmJiB4IDw9IDB4MTE1RlxuXHRcdHx8IHggPT09IDB4MjMxQVxuXHRcdHx8IHggPT09IDB4MjMxQlxuXHRcdHx8IHggPT09IDB4MjMyOVxuXHRcdHx8IHggPT09IDB4MjMyQVxuXHRcdHx8IHggPj0gMHgyM0U5ICYmIHggPD0gMHgyM0VDXG5cdFx0fHwgeCA9PT0gMHgyM0YwXG5cdFx0fHwgeCA9PT0gMHgyM0YzXG5cdFx0fHwgeCA9PT0gMHgyNUZEXG5cdFx0fHwgeCA9PT0gMHgyNUZFXG5cdFx0fHwgeCA9PT0gMHgyNjE0XG5cdFx0fHwgeCA9PT0gMHgyNjE1XG5cdFx0fHwgeCA+PSAweDI2MzAgJiYgeCA8PSAweDI2Mzdcblx0XHR8fCB4ID49IDB4MjY0OCAmJiB4IDw9IDB4MjY1M1xuXHRcdHx8IHggPT09IDB4MjY3RlxuXHRcdHx8IHggPj0gMHgyNjhBICYmIHggPD0gMHgyNjhGXG5cdFx0fHwgeCA9PT0gMHgyNjkzXG5cdFx0fHwgeCA9PT0gMHgyNkExXG5cdFx0fHwgeCA9PT0gMHgyNkFBXG5cdFx0fHwgeCA9PT0gMHgyNkFCXG5cdFx0fHwgeCA9PT0gMHgyNkJEXG5cdFx0fHwgeCA9PT0gMHgyNkJFXG5cdFx0fHwgeCA9PT0gMHgyNkM0XG5cdFx0fHwgeCA9PT0gMHgyNkM1XG5cdFx0fHwgeCA9PT0gMHgyNkNFXG5cdFx0fHwgeCA9PT0gMHgyNkQ0XG5cdFx0fHwgeCA9PT0gMHgyNkVBXG5cdFx0fHwgeCA9PT0gMHgyNkYyXG5cdFx0fHwgeCA9PT0gMHgyNkYzXG5cdFx0fHwgeCA9PT0gMHgyNkY1XG5cdFx0fHwgeCA9PT0gMHgyNkZBXG5cdFx0fHwgeCA9PT0gMHgyNkZEXG5cdFx0fHwgeCA9PT0gMHgyNzA1XG5cdFx0fHwgeCA9PT0gMHgyNzBBXG5cdFx0fHwgeCA9PT0gMHgyNzBCXG5cdFx0fHwgeCA9PT0gMHgyNzI4XG5cdFx0fHwgeCA9PT0gMHgyNzRDXG5cdFx0fHwgeCA9PT0gMHgyNzRFXG5cdFx0fHwgeCA+PSAweDI3NTMgJiYgeCA8PSAweDI3NTVcblx0XHR8fCB4ID09PSAweDI3NTdcblx0XHR8fCB4ID49IDB4Mjc5NSAmJiB4IDw9IDB4Mjc5N1xuXHRcdHx8IHggPT09IDB4MjdCMFxuXHRcdHx8IHggPT09IDB4MjdCRlxuXHRcdHx8IHggPT09IDB4MkIxQlxuXHRcdHx8IHggPT09IDB4MkIxQ1xuXHRcdHx8IHggPT09IDB4MkI1MFxuXHRcdHx8IHggPT09IDB4MkI1NVxuXHRcdHx8IHggPj0gMHgyRTgwICYmIHggPD0gMHgyRTk5XG5cdFx0fHwgeCA+PSAweDJFOUIgJiYgeCA8PSAweDJFRjNcblx0XHR8fCB4ID49IDB4MkYwMCAmJiB4IDw9IDB4MkZENVxuXHRcdHx8IHggPj0gMHgyRkYwICYmIHggPD0gMHgyRkZGXG5cdFx0fHwgeCA+PSAweDMwMDEgJiYgeCA8PSAweDMwM0Vcblx0XHR8fCB4ID49IDB4MzA0MSAmJiB4IDw9IDB4MzA5NlxuXHRcdHx8IHggPj0gMHgzMDk5ICYmIHggPD0gMHgzMEZGXG5cdFx0fHwgeCA+PSAweDMxMDUgJiYgeCA8PSAweDMxMkZcblx0XHR8fCB4ID49IDB4MzEzMSAmJiB4IDw9IDB4MzE4RVxuXHRcdHx8IHggPj0gMHgzMTkwICYmIHggPD0gMHgzMUU1XG5cdFx0fHwgeCA+PSAweDMxRUYgJiYgeCA8PSAweDMyMUVcblx0XHR8fCB4ID49IDB4MzIyMCAmJiB4IDw9IDB4MzI0N1xuXHRcdHx8IHggPj0gMHgzMjUwICYmIHggPD0gMHhBNDhDXG5cdFx0fHwgeCA+PSAweEE0OTAgJiYgeCA8PSAweEE0QzZcblx0XHR8fCB4ID49IDB4QTk2MCAmJiB4IDw9IDB4QTk3Q1xuXHRcdHx8IHggPj0gMHhBQzAwICYmIHggPD0gMHhEN0EzXG5cdFx0fHwgeCA+PSAweEY5MDAgJiYgeCA8PSAweEZBRkZcblx0XHR8fCB4ID49IDB4RkUxMCAmJiB4IDw9IDB4RkUxOVxuXHRcdHx8IHggPj0gMHhGRTMwICYmIHggPD0gMHhGRTUyXG5cdFx0fHwgeCA+PSAweEZFNTQgJiYgeCA8PSAweEZFNjZcblx0XHR8fCB4ID49IDB4RkU2OCAmJiB4IDw9IDB4RkU2QlxuXHRcdHx8IHggPj0gMHgxNkZFMCAmJiB4IDw9IDB4MTZGRTRcblx0XHR8fCB4ID49IDB4MTZGRjAgJiYgeCA8PSAweDE2RkY2XG5cdFx0fHwgeCA+PSAweDE3MDAwICYmIHggPD0gMHgxOENENVxuXHRcdHx8IHggPj0gMHgxOENGRiAmJiB4IDw9IDB4MThEMUVcblx0XHR8fCB4ID49IDB4MThEODAgJiYgeCA8PSAweDE4REYyXG5cdFx0fHwgeCA+PSAweDFBRkYwICYmIHggPD0gMHgxQUZGM1xuXHRcdHx8IHggPj0gMHgxQUZGNSAmJiB4IDw9IDB4MUFGRkJcblx0XHR8fCB4ID09PSAweDFBRkZEXG5cdFx0fHwgeCA9PT0gMHgxQUZGRVxuXHRcdHx8IHggPj0gMHgxQjAwMCAmJiB4IDw9IDB4MUIxMjJcblx0XHR8fCB4ID09PSAweDFCMTMyXG5cdFx0fHwgeCA+PSAweDFCMTUwICYmIHggPD0gMHgxQjE1MlxuXHRcdHx8IHggPT09IDB4MUIxNTVcblx0XHR8fCB4ID49IDB4MUIxNjQgJiYgeCA8PSAweDFCMTY3XG5cdFx0fHwgeCA+PSAweDFCMTcwICYmIHggPD0gMHgxQjJGQlxuXHRcdHx8IHggPj0gMHgxRDMwMCAmJiB4IDw9IDB4MUQzNTZcblx0XHR8fCB4ID49IDB4MUQzNjAgJiYgeCA8PSAweDFEMzc2XG5cdFx0fHwgeCA9PT0gMHgxRjAwNFxuXHRcdHx8IHggPT09IDB4MUYwQ0Zcblx0XHR8fCB4ID09PSAweDFGMThFXG5cdFx0fHwgeCA+PSAweDFGMTkxICYmIHggPD0gMHgxRjE5QVxuXHRcdHx8IHggPj0gMHgxRjIwMCAmJiB4IDw9IDB4MUYyMDJcblx0XHR8fCB4ID49IDB4MUYyMTAgJiYgeCA8PSAweDFGMjNCXG5cdFx0fHwgeCA+PSAweDFGMjQwICYmIHggPD0gMHgxRjI0OFxuXHRcdHx8IHggPT09IDB4MUYyNTBcblx0XHR8fCB4ID09PSAweDFGMjUxXG5cdFx0fHwgeCA+PSAweDFGMjYwICYmIHggPD0gMHgxRjI2NVxuXHRcdHx8IHggPj0gMHgxRjMwMCAmJiB4IDw9IDB4MUYzMjBcblx0XHR8fCB4ID49IDB4MUYzMkQgJiYgeCA8PSAweDFGMzM1XG5cdFx0fHwgeCA+PSAweDFGMzM3ICYmIHggPD0gMHgxRjM3Q1xuXHRcdHx8IHggPj0gMHgxRjM3RSAmJiB4IDw9IDB4MUYzOTNcblx0XHR8fCB4ID49IDB4MUYzQTAgJiYgeCA8PSAweDFGM0NBXG5cdFx0fHwgeCA+PSAweDFGM0NGICYmIHggPD0gMHgxRjNEM1xuXHRcdHx8IHggPj0gMHgxRjNFMCAmJiB4IDw9IDB4MUYzRjBcblx0XHR8fCB4ID09PSAweDFGM0Y0XG5cdFx0fHwgeCA+PSAweDFGM0Y4ICYmIHggPD0gMHgxRjQzRVxuXHRcdHx8IHggPT09IDB4MUY0NDBcblx0XHR8fCB4ID49IDB4MUY0NDIgJiYgeCA8PSAweDFGNEZDXG5cdFx0fHwgeCA+PSAweDFGNEZGICYmIHggPD0gMHgxRjUzRFxuXHRcdHx8IHggPj0gMHgxRjU0QiAmJiB4IDw9IDB4MUY1NEVcblx0XHR8fCB4ID49IDB4MUY1NTAgJiYgeCA8PSAweDFGNTY3XG5cdFx0fHwgeCA9PT0gMHgxRjU3QVxuXHRcdHx8IHggPT09IDB4MUY1OTVcblx0XHR8fCB4ID09PSAweDFGNTk2XG5cdFx0fHwgeCA9PT0gMHgxRjVBNFxuXHRcdHx8IHggPj0gMHgxRjVGQiAmJiB4IDw9IDB4MUY2NEZcblx0XHR8fCB4ID49IDB4MUY2ODAgJiYgeCA8PSAweDFGNkM1XG5cdFx0fHwgeCA9PT0gMHgxRjZDQ1xuXHRcdHx8IHggPj0gMHgxRjZEMCAmJiB4IDw9IDB4MUY2RDJcblx0XHR8fCB4ID49IDB4MUY2RDUgJiYgeCA8PSAweDFGNkQ4XG5cdFx0fHwgeCA+PSAweDFGNkRDICYmIHggPD0gMHgxRjZERlxuXHRcdHx8IHggPT09IDB4MUY2RUJcblx0XHR8fCB4ID09PSAweDFGNkVDXG5cdFx0fHwgeCA+PSAweDFGNkY0ICYmIHggPD0gMHgxRjZGQ1xuXHRcdHx8IHggPj0gMHgxRjdFMCAmJiB4IDw9IDB4MUY3RUJcblx0XHR8fCB4ID09PSAweDFGN0YwXG5cdFx0fHwgeCA+PSAweDFGOTBDICYmIHggPD0gMHgxRjkzQVxuXHRcdHx8IHggPj0gMHgxRjkzQyAmJiB4IDw9IDB4MUY5NDVcblx0XHR8fCB4ID49IDB4MUY5NDcgJiYgeCA8PSAweDFGOUZGXG5cdFx0fHwgeCA+PSAweDFGQTcwICYmIHggPD0gMHgxRkE3Q1xuXHRcdHx8IHggPj0gMHgxRkE4MCAmJiB4IDw9IDB4MUZBOEFcblx0XHR8fCB4ID49IDB4MUZBOEUgJiYgeCA8PSAweDFGQUM2XG5cdFx0fHwgeCA9PT0gMHgxRkFDOFxuXHRcdHx8IHggPj0gMHgxRkFDRCAmJiB4IDw9IDB4MUZBRENcblx0XHR8fCB4ID49IDB4MUZBREYgJiYgeCA8PSAweDFGQUVBXG5cdFx0fHwgeCA+PSAweDFGQUVGICYmIHggPD0gMHgxRkFGOFxuXHRcdHx8IHggPj0gMHgyMDAwMCAmJiB4IDw9IDB4MkZGRkRcblx0XHR8fCB4ID49IDB4MzAwMDAgJiYgeCA8PSAweDNGRkZEO1xufVxuXG5mdW5jdGlvbiBnZXRDYXRlZ29yeSh4KSB7XG5cdGlmIChpc0FtYmlndW91cyh4KSkgcmV0dXJuICdhbWJpZ3VvdXMnO1xuXG5cdGlmIChpc0Z1bGxXaWR0aCh4KSkgcmV0dXJuICdmdWxsd2lkdGgnO1xuXG5cdGlmIChcblx0XHR4ID09PSAweDIwQTlcblx0XHR8fCB4ID49IDB4RkY2MSAmJiB4IDw9IDB4RkZCRVxuXHRcdHx8IHggPj0gMHhGRkMyICYmIHggPD0gMHhGRkM3XG5cdFx0fHwgeCA+PSAweEZGQ0EgJiYgeCA8PSAweEZGQ0Zcblx0XHR8fCB4ID49IDB4RkZEMiAmJiB4IDw9IDB4RkZEN1xuXHRcdHx8IHggPj0gMHhGRkRBICYmIHggPD0gMHhGRkRDXG5cdFx0fHwgeCA+PSAweEZGRTggJiYgeCA8PSAweEZGRUVcblx0KSB7XG5cdFx0cmV0dXJuICdoYWxmd2lkdGgnO1xuXHR9XG5cblx0aWYgKFxuXHRcdHggPj0gMHgyMCAmJiB4IDw9IDB4N0Vcblx0XHR8fCB4ID09PSAweEEyXG5cdFx0fHwgeCA9PT0gMHhBM1xuXHRcdHx8IHggPT09IDB4QTVcblx0XHR8fCB4ID09PSAweEE2XG5cdFx0fHwgeCA9PT0gMHhBQ1xuXHRcdHx8IHggPT09IDB4QUZcblx0XHR8fCB4ID49IDB4MjdFNiAmJiB4IDw9IDB4MjdFRFxuXHRcdHx8IHggPT09IDB4Mjk4NVxuXHRcdHx8IHggPT09IDB4Mjk4NlxuXHQpIHtcblx0XHRyZXR1cm4gJ25hcnJvdyc7XG5cdH1cblxuXHRpZiAoaXNXaWRlKHgpKSByZXR1cm4gJ3dpZGUnO1xuXG5cdHJldHVybiAnbmV1dHJhbCc7XG59XG5cbmV4cG9ydCB7aXNBbWJpZ3VvdXMsIGlzRnVsbFdpZHRoLCBpc1dpZGUsIGdldENhdGVnb3J5fTtcbiIsImV4cG9ydCBkZWZhdWx0ICgpID0+IHtcblx0Ly8gaHR0cHM6Ly9tdGhzLmJlL2Vtb2ppXG5cdHJldHVybiAvWyMqMC05XVxcdUZFMEY/XFx1MjBFM3xbXFx4QTlcXHhBRVxcdTIwM0NcXHUyMDQ5XFx1MjEyMlxcdTIxMzlcXHUyMTk0LVxcdTIxOTlcXHUyMUE5XFx1MjFBQVxcdTIzMUFcXHUyMzFCXFx1MjMyOFxcdTIzQ0ZcXHUyM0VELVxcdTIzRUZcXHUyM0YxXFx1MjNGMlxcdTIzRjgtXFx1MjNGQVxcdTI0QzJcXHUyNUFBXFx1MjVBQlxcdTI1QjZcXHUyNUMwXFx1MjVGQlxcdTI1RkNcXHUyNUZFXFx1MjYwMC1cXHUyNjA0XFx1MjYwRVxcdTI2MTFcXHUyNjE0XFx1MjYxNVxcdTI2MThcXHUyNjIwXFx1MjYyMlxcdTI2MjNcXHUyNjI2XFx1MjYyQVxcdTI2MkVcXHUyNjJGXFx1MjYzOC1cXHUyNjNBXFx1MjY0MFxcdTI2NDJcXHUyNjQ4LVxcdTI2NTNcXHUyNjVGXFx1MjY2MFxcdTI2NjNcXHUyNjY1XFx1MjY2NlxcdTI2NjhcXHUyNjdCXFx1MjY3RVxcdTI2N0ZcXHUyNjkyXFx1MjY5NC1cXHUyNjk3XFx1MjY5OVxcdTI2OUJcXHUyNjlDXFx1MjZBMFxcdTI2QTdcXHUyNkFBXFx1MjZCMFxcdTI2QjFcXHUyNkJEXFx1MjZCRVxcdTI2QzRcXHUyNkM4XFx1MjZDRlxcdTI2RDFcXHUyNkU5XFx1MjZGMC1cXHUyNkY1XFx1MjZGN1xcdTI2RjhcXHUyNkZBXFx1MjcwMlxcdTI3MDhcXHUyNzA5XFx1MjcwRlxcdTI3MTJcXHUyNzE0XFx1MjcxNlxcdTI3MURcXHUyNzIxXFx1MjczM1xcdTI3MzRcXHUyNzQ0XFx1Mjc0N1xcdTI3NTdcXHUyNzYzXFx1MjdBMVxcdTI5MzRcXHUyOTM1XFx1MkIwNS1cXHUyQjA3XFx1MkIxQlxcdTJCMUNcXHUyQjU1XFx1MzAzMFxcdTMwM0RcXHUzMjk3XFx1MzI5OV1cXHVGRTBGP3xbXFx1MjYxRFxcdTI3MENcXHUyNzBEXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVGRTBGKT98W1xcdTI3MEFcXHUyNzBCXSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFtcXHUyM0U5LVxcdTIzRUNcXHUyM0YwXFx1MjNGM1xcdTI1RkRcXHUyNjkzXFx1MjZBMVxcdTI2QUJcXHUyNkM1XFx1MjZDRVxcdTI2RDRcXHUyNkVBXFx1MjZGRFxcdTI3MDVcXHUyNzI4XFx1Mjc0Q1xcdTI3NEVcXHUyNzUzLVxcdTI3NTVcXHUyNzk1LVxcdTI3OTdcXHUyN0IwXFx1MjdCRlxcdTJCNTBdfFxcdTI2RDNcXHVGRTBGPyg/OlxcdTIwMERcXHVEODNEXFx1RENBNSk/fFxcdTI2RjkoPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RkUwRik/KD86XFx1MjAwRFtcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyk/fFxcdTI3NjRcXHVGRTBGPyg/OlxcdTIwMEQoPzpcXHVEODNEXFx1REQyNXxcXHVEODNFXFx1REU3OSkpP3xcXHVEODNDKD86W1xcdURDMDRcXHVERDcwXFx1REQ3MVxcdUREN0VcXHVERDdGXFx1REUwMlxcdURFMzdcXHVERjIxXFx1REYyNC1cXHVERjJDXFx1REYzNlxcdURGN0RcXHVERjk2XFx1REY5N1xcdURGOTktXFx1REY5QlxcdURGOUVcXHVERjlGXFx1REZDRFxcdURGQ0VcXHVERkQ0LVxcdURGREZcXHVERkY1XFx1REZGN11cXHVGRTBGP3xbXFx1REY4NVxcdURGQzJcXHVERkM3XSg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/fFtcXHVERkM0XFx1REZDQV0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1REZDQlxcdURGQ0NdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUZFMEYpPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1RENDRlxcdUREOEVcXHVERDkxLVxcdUREOUFcXHVERTAxXFx1REUxQVxcdURFMkZcXHVERTMyLVxcdURFMzZcXHVERTM4LVxcdURFM0FcXHVERTUwXFx1REU1MVxcdURGMDAtXFx1REYyMFxcdURGMkQtXFx1REYzNVxcdURGMzctXFx1REY0M1xcdURGNDUtXFx1REY0QVxcdURGNEMtXFx1REY3Q1xcdURGN0UtXFx1REY4NFxcdURGODYtXFx1REY5M1xcdURGQTAtXFx1REZDMVxcdURGQzVcXHVERkM2XFx1REZDOFxcdURGQzlcXHVERkNGLVxcdURGRDNcXHVERkUwLVxcdURGRjBcXHVERkY4LVxcdURGRkZdfFxcdURERTZcXHVEODNDW1xcdURERTgtXFx1RERFQ1xcdURERUVcXHVEREYxXFx1RERGMlxcdURERjRcXHVEREY2LVxcdURERkFcXHVEREZDXFx1RERGRFxcdURERkZdfFxcdURERTdcXHVEODNDW1xcdURERTZcXHVEREU3XFx1RERFOS1cXHVEREVGXFx1RERGMS1cXHVEREY0XFx1RERGNi1cXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZFXFx1RERGRl18XFx1RERFOFxcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREU5XFx1RERFQi1cXHVEREVFXFx1RERGMC1cXHVEREY3XFx1RERGQS1cXHVEREZGXXxcXHVEREU5XFx1RDgzQ1tcXHVEREVBXFx1RERFQ1xcdURERUZcXHVEREYwXFx1RERGMlxcdURERjRcXHVEREZGXXxcXHVEREVBXFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUFcXHVEREVDXFx1RERFRFxcdURERjctXFx1RERGQV18XFx1RERFQlxcdUQ4M0NbXFx1RERFRS1cXHVEREYwXFx1RERGMlxcdURERjRcXHVEREY3XXxcXHVEREVDXFx1RDgzQ1tcXHVEREU2XFx1RERFN1xcdURERTktXFx1RERFRVxcdURERjEtXFx1RERGM1xcdURERjUtXFx1RERGQVxcdURERkNcXHVEREZFXXxcXHVEREVEXFx1RDgzQ1tcXHVEREYwXFx1RERGMlxcdURERjNcXHVEREY3XFx1RERGOVxcdURERkFdfFxcdURERUVcXHVEODNDW1xcdURERTgtXFx1RERFQVxcdURERjEtXFx1RERGNFxcdURERjYtXFx1RERGOV18XFx1RERFRlxcdUQ4M0NbXFx1RERFQVxcdURERjJcXHVEREY0XFx1RERGNV18XFx1RERGMFxcdUQ4M0NbXFx1RERFQVxcdURERUMtXFx1RERFRVxcdURERjJcXHVEREYzXFx1RERGNVxcdURERjdcXHVEREZDXFx1RERGRVxcdURERkZdfFxcdURERjFcXHVEODNDW1xcdURERTYtXFx1RERFOFxcdURERUVcXHVEREYwXFx1RERGNy1cXHVEREZCXFx1RERGRV18XFx1RERGMlxcdUQ4M0NbXFx1RERFNlxcdURERTgtXFx1RERFRFxcdURERjAtXFx1RERGRl18XFx1RERGM1xcdUQ4M0NbXFx1RERFNlxcdURERThcXHVEREVBLVxcdURERUNcXHVEREVFXFx1RERGMVxcdURERjRcXHVEREY1XFx1RERGN1xcdURERkFcXHVEREZGXXxcXHVEREY0XFx1RDgzQ1xcdURERjJ8XFx1RERGNVxcdUQ4M0NbXFx1RERFNlxcdURERUEtXFx1RERFRFxcdURERjAtXFx1RERGM1xcdURERjctXFx1RERGOVxcdURERkNcXHVEREZFXXxcXHVEREY2XFx1RDgzQ1xcdURERTZ8XFx1RERGN1xcdUQ4M0NbXFx1RERFQVxcdURERjRcXHVEREY4XFx1RERGQVxcdURERkNdfFxcdURERjhcXHVEODNDW1xcdURERTYtXFx1RERFQVxcdURERUMtXFx1RERGNFxcdURERjctXFx1RERGOVxcdURERkJcXHVEREZELVxcdURERkZdfFxcdURERjlcXHVEODNDW1xcdURERTZcXHVEREU4XFx1RERFOVxcdURERUItXFx1RERFRFxcdURERUYtXFx1RERGNFxcdURERjdcXHVEREY5XFx1RERGQlxcdURERkNcXHVEREZGXXxcXHVEREZBXFx1RDgzQ1tcXHVEREU2XFx1RERFQ1xcdURERjJcXHVEREYzXFx1RERGOFxcdURERkVcXHVEREZGXXxcXHVEREZCXFx1RDgzQ1tcXHVEREU2XFx1RERFOFxcdURERUFcXHVEREVDXFx1RERFRVxcdURERjNcXHVEREZBXXxcXHVEREZDXFx1RDgzQ1tcXHVEREVCXFx1RERGOF18XFx1RERGRFxcdUQ4M0NcXHVEREYwfFxcdURERkVcXHVEODNDW1xcdURERUFcXHVEREY5XXxcXHVEREZGXFx1RDgzQ1tcXHVEREU2XFx1RERGMlxcdURERkNdfFxcdURGNDQoPzpcXHUyMDBEXFx1RDgzRFxcdURGRUIpP3xcXHVERjRCKD86XFx1MjAwRFxcdUQ4M0RcXHVERkU5KT98XFx1REZDMyg/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRCg/OltcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xcXHUyN0ExXFx1RkUwRj8pKT98XFx1REZGM1xcdUZFMEY/KD86XFx1MjAwRCg/OlxcdTI2QTdcXHVGRTBGP3xcXHVEODNDXFx1REYwOCkpP3xcXHVERkY0KD86XFx1MjAwRFxcdTI2MjBcXHVGRTBGP3xcXHVEQjQwXFx1REM2N1xcdURCNDBcXHVEQzYyXFx1REI0MCg/OlxcdURDNjVcXHVEQjQwXFx1REM2RVxcdURCNDBcXHVEQzY3fFxcdURDNzNcXHVEQjQwXFx1REM2M1xcdURCNDBcXHVEQzc0fFxcdURDNzdcXHVEQjQwXFx1REM2Q1xcdURCNDBcXHVEQzczKVxcdURCNDBcXHVEQzdGKT8pfFxcdUQ4M0QoPzpbXFx1REMzRlxcdURDRkRcXHVERDQ5XFx1REQ0QVxcdURENkZcXHVERDcwXFx1REQ3M1xcdURENzYtXFx1REQ3OVxcdUREODdcXHVERDhBLVxcdUREOERcXHVEREE1XFx1RERBOFxcdUREQjFcXHVEREIyXFx1RERCQ1xcdUREQzItXFx1RERDNFxcdURERDEtXFx1REREM1xcdUREREMtXFx1RERERVxcdURERTFcXHVEREUzXFx1RERFOFxcdURERUZcXHVEREYzXFx1RERGQVxcdURFQ0JcXHVERUNELVxcdURFQ0ZcXHVERUUwLVxcdURFRTVcXHVERUU5XFx1REVGMFxcdURFRjNdXFx1RkUwRj98W1xcdURDNDJcXHVEQzQzXFx1REM0Ni1cXHVEQzUwXFx1REM2NlxcdURDNjdcXHVEQzZCLVxcdURDNkRcXHVEQzcyXFx1REM3NC1cXHVEQzc2XFx1REM3OFxcdURDN0NcXHVEQzgzXFx1REM4NVxcdURDOEZcXHVEQzkxXFx1RENBQVxcdUREN0FcXHVERDk1XFx1REQ5NlxcdURFNENcXHVERTRGXFx1REVDMFxcdURFQ0NdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdURDNkUtXFx1REM3MVxcdURDNzNcXHVEQzc3XFx1REM4MVxcdURDODJcXHVEQzg2XFx1REM4N1xcdURFNDUtXFx1REU0N1xcdURFNEJcXHVERTREXFx1REU0RVxcdURFQTNcXHVERUI0XFx1REVCNV0oPzpcXHVEODNDW1xcdURGRkItXFx1REZGRl0pPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1REQ3NFxcdUREOTBdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUZFMEYpP3xbXFx1REMwMC1cXHVEQzA3XFx1REMwOS1cXHVEQzE0XFx1REMxNi1cXHVEQzI1XFx1REMyNy1cXHVEQzNBXFx1REMzQy1cXHVEQzNFXFx1REM0MFxcdURDNDRcXHVEQzQ1XFx1REM1MS1cXHVEQzY1XFx1REM2QVxcdURDNzktXFx1REM3QlxcdURDN0QtXFx1REM4MFxcdURDODRcXHVEQzg4LVxcdURDOEVcXHVEQzkwXFx1REM5Mi1cXHVEQ0E5XFx1RENBQi1cXHVEQ0ZDXFx1RENGRi1cXHVERDNEXFx1REQ0Qi1cXHVERDRFXFx1REQ1MC1cXHVERDY3XFx1RERBNFxcdURERkItXFx1REUyRFxcdURFMkYtXFx1REUzNFxcdURFMzctXFx1REU0MVxcdURFNDNcXHVERTQ0XFx1REU0OC1cXHVERTRBXFx1REU4MC1cXHVERUEyXFx1REVBNC1cXHVERUIzXFx1REVCNy1cXHVERUJGXFx1REVDMS1cXHVERUM1XFx1REVEMC1cXHVERUQyXFx1REVENS1cXHVERUQ4XFx1REVEQy1cXHVERURGXFx1REVFQlxcdURFRUNcXHVERUY0LVxcdURFRkNcXHVERkUwLVxcdURGRUJcXHVERkYwXXxcXHVEQzA4KD86XFx1MjAwRFxcdTJCMUIpP3xcXHVEQzE1KD86XFx1MjAwRFxcdUQ4M0VcXHVEREJBKT98XFx1REMyNig/OlxcdTIwMEQoPzpcXHUyQjFCfFxcdUQ4M0RcXHVERDI1KSk/fFxcdURDM0IoPzpcXHUyMDBEXFx1Mjc0NFxcdUZFMEY/KT98XFx1REM0MVxcdUZFMEY/KD86XFx1MjAwRFxcdUQ4M0RcXHVEREU4XFx1RkUwRj8pP3xcXHVEQzY4KD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjh8XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQzY4XFx1REM2OV1cXHUyMDBEXFx1RDgzRCg/OlxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT8pfFtcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT8pfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXSkpfFxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDMzBcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkMtXFx1REZGRl0pfFxcdUQ4M0UoPzpbXFx1REQxRFxcdURFRUZdXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdfFtcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdKSkpP3xcXHVERkZDKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDMzBcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKXxcXHVEODNFKD86W1xcdUREMURcXHVERUVGXVxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl18W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM10pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEXFx1RDgzRCg/OlxcdURDOEJcXHUyMDBEXFx1RDgzRCk/XFx1REM2OFxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEKD86W1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1REMzMFxcdTIwMERcXHVEODNEXFx1REM2OFxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl0pfFxcdUQ4M0UoPzpbXFx1REQxRFxcdURFRUZdXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXXxbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXSkpKT98XFx1REZGRSg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMERcXHVEODNEKD86XFx1REM4QlxcdTIwMERcXHVEODNEKT9cXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSl8XFx1RDgzRSg/OltcXHVERDFEXFx1REVFRl1cXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdfFtcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdKSkpP3xcXHVERkZGKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1xcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDMzBcXHUyMDBEXFx1RDgzRFxcdURDNjhcXHVEODNDW1xcdURGRkItXFx1REZGRV0pfFxcdUQ4M0UoPzpbXFx1REQxRFxcdURFRUZdXFx1MjAwRFxcdUQ4M0RcXHVEQzY4XFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdfFtcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdKSkpPykpP3xcXHVEQzY5KD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpcXHVEQzhCXFx1MjAwRFxcdUQ4M0QpP1tcXHVEQzY4XFx1REM2OV18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDNjYoPzpcXHUyMDBEXFx1RDgzRFxcdURDNjYpP3xcXHVEQzY3KD86XFx1MjAwRFxcdUQ4M0RbXFx1REM2NlxcdURDNjddKT98XFx1REM2OVxcdTIwMERcXHVEODNEKD86XFx1REM2Nig/OlxcdTIwMERcXHVEODNEXFx1REM2Nik/fFxcdURDNjcoPzpcXHUyMDBEXFx1RDgzRFtcXHVEQzY2XFx1REM2N10pPykpfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXSkpfFxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXXxcXHVERUVGXFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKSkpP3xcXHVERkZDKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXSl8XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdfFxcdURFRUZcXHUyMDBEXFx1RDgzRFxcdURDNjlcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKSkpP3xcXHVERkZEKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSl8XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdfFxcdURFRUZcXHUyMDBEXFx1RDgzRFxcdURDNjlcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKSkpP3xcXHVERkZFKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSl8XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNdfFxcdUREMURcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV1cXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdfFxcdURFRUZcXHUyMDBEXFx1RDgzRFxcdURDNjlcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdKSkpP3xcXHVERkZGKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRFxcdUQ4M0QoPzpbXFx1REM2OFxcdURDNjldfFxcdURDOEJcXHUyMDBEXFx1RDgzRFtcXHVEQzY4XFx1REM2OV0pXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM118XFx1REQxRFxcdTIwMERcXHVEODNEW1xcdURDNjhcXHVEQzY5XVxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXXxcXHVERUVGXFx1MjAwRFxcdUQ4M0RcXHVEQzY5XFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdKSkpPykpP3xcXHVERDc1KD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdUZFMEYpPyg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xcXHVERTJFKD86XFx1MjAwRFxcdUQ4M0RcXHVEQ0E4KT98XFx1REUzNSg/OlxcdTIwMERcXHVEODNEXFx1RENBQik/fFxcdURFMzYoPzpcXHUyMDBEXFx1RDgzQ1xcdURGMkJcXHVGRTBGPyk/fFxcdURFNDIoPzpcXHUyMDBEW1xcdTIxOTRcXHUyMTk1XVxcdUZFMEY/KT98XFx1REVCNig/OlxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXSk/KD86XFx1MjAwRCg/OltcXHUyNjQwXFx1MjY0Ml1cXHVGRTBGPyg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xcXHUyN0ExXFx1RkUwRj8pKT8pfFxcdUQ4M0UoPzpbXFx1REQwQ1xcdUREMEZcXHVERDE4LVxcdUREMUZcXHVERDMwLVxcdUREMzRcXHVERDM2XFx1REQ3N1xcdUREQjVcXHVEREI2XFx1RERCQlxcdURERDJcXHVEREQzXFx1RERENVxcdURFQzMtXFx1REVDNVxcdURFRjBcXHVERUYyLVxcdURFRjhdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT98W1xcdUREMjZcXHVERDM1XFx1REQzNy1cXHVERDM5XFx1REQzQy1cXHVERDNFXFx1RERCOFxcdUREQjlcXHVERENEXFx1RERDRlxcdURERDRcXHVEREQ2LVxcdURERERdKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEW1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KT98W1xcdUREREVcXHVERERGXSg/OlxcdTIwMERbXFx1MjY0MFxcdTI2NDJdXFx1RkUwRj8pP3xbXFx1REQwRFxcdUREMEVcXHVERDEwLVxcdUREMTdcXHVERDIwLVxcdUREMjVcXHVERDI3LVxcdUREMkZcXHVERDNBXFx1REQzRi1cXHVERDQ1XFx1REQ0Ny1cXHVERDc2XFx1REQ3OC1cXHVEREI0XFx1RERCN1xcdUREQkFcXHVEREJDLVxcdUREQ0NcXHVEREQwXFx1RERFMC1cXHVEREZGXFx1REU3MC1cXHVERTdDXFx1REU4MC1cXHVERThBXFx1REU4RS1cXHVERUMyXFx1REVDNlxcdURFQzhcXHVERUNELVxcdURFRENcXHVERURGLVxcdURFRUFcXHVERUVGXXxcXHVERENFKD86XFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdKT8oPzpcXHUyMDBEKD86W1xcdTI2NDBcXHUyNjQyXVxcdUZFMEY/KD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFxcdTI3QTFcXHVGRTBGPykpP3xcXHVEREQxKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0RbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM1xcdURFNzBdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDF8XFx1REREMVxcdTIwMERcXHVEODNFXFx1REREMig/OlxcdTIwMERcXHVEODNFXFx1REREMik/fFxcdURERDIoPzpcXHUyMDBEXFx1RDgzRVxcdURERDIpPykpfFxcdUQ4M0MoPzpcXHVERkZCKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkMtXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZDLVxcdURGRkZdKXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM1xcdURFNzBdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1REVFRlxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXSkpKT98XFx1REZGQyg/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCXFx1REZGRC1cXHVERkZGXXxcXHVEODNDW1xcdURGM0VcXHVERjczXFx1REY3Q1xcdURGODRcXHVERjkzXFx1REZBNFxcdURGQThcXHVERkVCXFx1REZFRF18XFx1RDgzRCg/OltcXHVEQ0JCXFx1RENCQ1xcdUREMjdcXHVERDJDXFx1REU4MFxcdURFOTJdfFxcdURDMzBcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKXxcXHVEODNFKD86W1xcdUREQUZcXHVEREJDXFx1RERCRF0oPzpcXHUyMDBEXFx1MjdBMVxcdUZFMEY/KT98W1xcdUREQjAtXFx1RERCM1xcdURFNzBdfFxcdUREMURcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRl18XFx1REVFRlxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQlxcdURGRkQtXFx1REZGRl0pKSk/fFxcdURGRkQoPzpcXHUyMDBEKD86W1xcdTI2OTVcXHUyNjk2XFx1MjcwOF1cXHVGRTBGP3xcXHUyNzY0XFx1RkUwRj9cXHUyMDBEKD86XFx1RDgzRFxcdURDOEJcXHUyMDBEKT9cXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl18XFx1RDgzQ1tcXHVERjNFXFx1REY3M1xcdURGN0NcXHVERjg0XFx1REY5M1xcdURGQTRcXHVERkE4XFx1REZFQlxcdURGRURdfFxcdUQ4M0QoPzpbXFx1RENCQlxcdURDQkNcXHVERDI3XFx1REQyQ1xcdURFODBcXHVERTkyXXxcXHVEQzMwXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCXFx1REZGQ1xcdURGRkVcXHVERkZGXSl8XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNcXHVERTcwXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdURFRUZcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkJcXHVERkZDXFx1REZGRVxcdURGRkZdKSkpP3xcXHVERkZFKD86XFx1MjAwRCg/OltcXHUyNjk1XFx1MjY5NlxcdTI3MDhdXFx1RkUwRj98XFx1Mjc2NFxcdUZFMEY/XFx1MjAwRCg/OlxcdUQ4M0RcXHVEQzhCXFx1MjAwRCk/XFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRFxcdURGRkZdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEKD86W1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1REMzMFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZEXFx1REZGRl0pfFxcdUQ4M0UoPzpbXFx1RERBRlxcdUREQkNcXHVEREJEXSg/OlxcdTIwMERcXHUyN0ExXFx1RkUwRj8pP3xbXFx1RERCMC1cXHVEREIzXFx1REU3MF18XFx1REQxRFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZGXXxcXHVERUVGXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSkpKT98XFx1REZGRig/OlxcdTIwMEQoPzpbXFx1MjY5NVxcdTI2OTZcXHUyNzA4XVxcdUZFMEY/fFxcdTI3NjRcXHVGRTBGP1xcdTIwMEQoPzpcXHVEODNEXFx1REM4QlxcdTIwMEQpP1xcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkVdfFxcdUQ4M0NbXFx1REYzRVxcdURGNzNcXHVERjdDXFx1REY4NFxcdURGOTNcXHVERkE0XFx1REZBOFxcdURGRUJcXHVERkVEXXxcXHVEODNEKD86W1xcdURDQkJcXHVEQ0JDXFx1REQyN1xcdUREMkNcXHVERTgwXFx1REU5Ml18XFx1REMzMFxcdTIwMERcXHVEODNFXFx1REREMVxcdUQ4M0NbXFx1REZGQi1cXHVERkZFXSl8XFx1RDgzRSg/OltcXHVEREFGXFx1RERCQ1xcdUREQkRdKD86XFx1MjAwRFxcdTI3QTFcXHVGRTBGPyk/fFtcXHVEREIwLVxcdUREQjNcXHVERTcwXXxcXHVERDFEXFx1MjAwRFxcdUQ4M0VcXHVEREQxXFx1RDgzQ1tcXHVERkZCLVxcdURGRkZdfFxcdURFRUZcXHUyMDBEXFx1RDgzRVxcdURERDFcXHVEODNDW1xcdURGRkItXFx1REZGRV0pKSk/KSk/fFxcdURFRjEoPzpcXHVEODNDKD86XFx1REZGQig/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQy1cXHVERkZGXSk/fFxcdURGRkMoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkJcXHVERkZELVxcdURGRkZdKT98XFx1REZGRCg/OlxcdTIwMERcXHVEODNFXFx1REVGMlxcdUQ4M0NbXFx1REZGQlxcdURGRkNcXHVERkZFXFx1REZGRl0pP3xcXHVERkZFKD86XFx1MjAwRFxcdUQ4M0VcXHVERUYyXFx1RDgzQ1tcXHVERkZCLVxcdURGRkRcXHVERkZGXSk/fFxcdURGRkYoPzpcXHUyMDBEXFx1RDgzRVxcdURFRjJcXHVEODNDW1xcdURGRkItXFx1REZGRV0pPykpPykvZztcbn07XG4iLCJpbXBvcnQgc3RyaXBBbnNpIGZyb20gJ3N0cmlwLWFuc2knO1xuaW1wb3J0IHtlYXN0QXNpYW5XaWR0aH0gZnJvbSAnZ2V0LWVhc3QtYXNpYW4td2lkdGgnO1xuaW1wb3J0IGVtb2ppUmVnZXggZnJvbSAnZW1vamktcmVnZXgnO1xuXG5jb25zdCBzZWdtZW50ZXIgPSBuZXcgSW50bC5TZWdtZW50ZXIoKTtcblxuY29uc3QgZGVmYXVsdElnbm9yYWJsZUNvZGVQb2ludFJlZ2V4ID0gL15cXHB7RGVmYXVsdF9JZ25vcmFibGVfQ29kZV9Qb2ludH0kL3U7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHN0cmluZ1dpZHRoKHN0cmluZywgb3B0aW9ucyA9IHt9KSB7XG5cdGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJyB8fCBzdHJpbmcubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRjb25zdCB7XG5cdFx0YW1iaWd1b3VzSXNOYXJyb3cgPSB0cnVlLFxuXHRcdGNvdW50QW5zaUVzY2FwZUNvZGVzID0gZmFsc2UsXG5cdH0gPSBvcHRpb25zO1xuXG5cdGlmICghY291bnRBbnNpRXNjYXBlQ29kZXMpIHtcblx0XHRzdHJpbmcgPSBzdHJpcEFuc2koc3RyaW5nKTtcblx0fVxuXG5cdGlmIChzdHJpbmcubGVuZ3RoID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRsZXQgd2lkdGggPSAwO1xuXHRjb25zdCBlYXN0QXNpYW5XaWR0aE9wdGlvbnMgPSB7YW1iaWd1b3VzQXNXaWRlOiAhYW1iaWd1b3VzSXNOYXJyb3d9O1xuXG5cdGZvciAoY29uc3Qge3NlZ21lbnQ6IGNoYXJhY3Rlcn0gb2Ygc2VnbWVudGVyLnNlZ21lbnQoc3RyaW5nKSkge1xuXHRcdGNvbnN0IGNvZGVQb2ludCA9IGNoYXJhY3Rlci5jb2RlUG9pbnRBdCgwKTtcblxuXHRcdC8vIElnbm9yZSBjb250cm9sIGNoYXJhY3RlcnNcblx0XHRpZiAoY29kZVBvaW50IDw9IDB4MUYgfHwgKGNvZGVQb2ludCA+PSAweDdGICYmIGNvZGVQb2ludCA8PSAweDlGKSkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gSWdub3JlIHplcm8td2lkdGggY2hhcmFjdGVyc1xuXHRcdGlmIChcblx0XHRcdChjb2RlUG9pbnQgPj0gMHgyMF8wQiAmJiBjb2RlUG9pbnQgPD0gMHgyMF8wRikgLy8gWmVyby13aWR0aCBzcGFjZSwgbm9uLWpvaW5lciwgam9pbmVyLCBsZWZ0LXRvLXJpZ2h0IG1hcmssIHJpZ2h0LXRvLWxlZnQgbWFya1xuXHRcdFx0fHwgY29kZVBvaW50ID09PSAweEZFX0ZGIC8vIFplcm8td2lkdGggbm8tYnJlYWsgc3BhY2Vcblx0XHQpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIElnbm9yZSBjb21iaW5pbmcgY2hhcmFjdGVyc1xuXHRcdGlmIChcblx0XHRcdChjb2RlUG9pbnQgPj0gMHgzXzAwICYmIGNvZGVQb2ludCA8PSAweDNfNkYpIC8vIENvbWJpbmluZyBkaWFjcml0aWNhbCBtYXJrc1xuXHRcdFx0fHwgKGNvZGVQb2ludCA+PSAweDFBX0IwICYmIGNvZGVQb2ludCA8PSAweDFBX0ZGKSAvLyBDb21iaW5pbmcgZGlhY3JpdGljYWwgbWFya3MgZXh0ZW5kZWRcblx0XHRcdHx8IChjb2RlUG9pbnQgPj0gMHgxRF9DMCAmJiBjb2RlUG9pbnQgPD0gMHgxRF9GRikgLy8gQ29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzIHN1cHBsZW1lbnRcblx0XHRcdHx8IChjb2RlUG9pbnQgPj0gMHgyMF9EMCAmJiBjb2RlUG9pbnQgPD0gMHgyMF9GRikgLy8gQ29tYmluaW5nIGRpYWNyaXRpY2FsIG1hcmtzIGZvciBzeW1ib2xzXG5cdFx0XHR8fCAoY29kZVBvaW50ID49IDB4RkVfMjAgJiYgY29kZVBvaW50IDw9IDB4RkVfMkYpIC8vIENvbWJpbmluZyBoYWxmIG1hcmtzXG5cdFx0KSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHQvLyBJZ25vcmUgc3Vycm9nYXRlIHBhaXJzXG5cdFx0aWYgKGNvZGVQb2ludCA+PSAweEQ4XzAwICYmIGNvZGVQb2ludCA8PSAweERGX0ZGKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHQvLyBJZ25vcmUgdmFyaWF0aW9uIHNlbGVjdG9yc1xuXHRcdGlmIChjb2RlUG9pbnQgPj0gMHhGRV8wMCAmJiBjb2RlUG9pbnQgPD0gMHhGRV8wRikge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0Ly8gVGhpcyBjb3ZlcnMgc29tZSBvZiB0aGUgYWJvdmUgY2FzZXMsIGJ1dCB3ZSBzdGlsbCBrZWVwIHRoZW0gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuXG5cdFx0aWYgKGRlZmF1bHRJZ25vcmFibGVDb2RlUG9pbnRSZWdleC50ZXN0KGNoYXJhY3RlcikpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdC8vIFRPRE86IFVzZSBgL1xccHtSR0lfRW1vaml9L3ZgIHdoZW4gdGFyZ2V0aW5nIE5vZGUuanMgMjAuXG5cdFx0aWYgKGVtb2ppUmVnZXgoKS50ZXN0KGNoYXJhY3RlcikpIHtcblx0XHRcdHdpZHRoICs9IDI7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHR3aWR0aCArPSBlYXN0QXNpYW5XaWR0aChjb2RlUG9pbnQsIGVhc3RBc2lhbldpZHRoT3B0aW9ucyk7XG5cdH1cblxuXHRyZXR1cm4gd2lkdGg7XG59XG4iLCJjb25zdCBBTlNJX0JBQ0tHUk9VTkRfT0ZGU0VUID0gMTA7XG5cbmNvbnN0IHdyYXBBbnNpMTYgPSAob2Zmc2V0ID0gMCkgPT4gY29kZSA9PiBgXFx1MDAxQlske2NvZGUgKyBvZmZzZXR9bWA7XG5cbmNvbnN0IHdyYXBBbnNpMjU2ID0gKG9mZnNldCA9IDApID0+IGNvZGUgPT4gYFxcdTAwMUJbJHszOCArIG9mZnNldH07NTske2NvZGV9bWA7XG5cbmNvbnN0IHdyYXBBbnNpMTZtID0gKG9mZnNldCA9IDApID0+IChyZWQsIGdyZWVuLCBibHVlKSA9PiBgXFx1MDAxQlskezM4ICsgb2Zmc2V0fTsyOyR7cmVkfTske2dyZWVufTske2JsdWV9bWA7XG5cbmNvbnN0IHN0eWxlcyA9IHtcblx0bW9kaWZpZXI6IHtcblx0XHRyZXNldDogWzAsIDBdLFxuXHRcdC8vIDIxIGlzbid0IHdpZGVseSBzdXBwb3J0ZWQgYW5kIDIyIGRvZXMgdGhlIHNhbWUgdGhpbmdcblx0XHRib2xkOiBbMSwgMjJdLFxuXHRcdGRpbTogWzIsIDIyXSxcblx0XHRpdGFsaWM6IFszLCAyM10sXG5cdFx0dW5kZXJsaW5lOiBbNCwgMjRdLFxuXHRcdG92ZXJsaW5lOiBbNTMsIDU1XSxcblx0XHRpbnZlcnNlOiBbNywgMjddLFxuXHRcdGhpZGRlbjogWzgsIDI4XSxcblx0XHRzdHJpa2V0aHJvdWdoOiBbOSwgMjldLFxuXHR9LFxuXHRjb2xvcjoge1xuXHRcdGJsYWNrOiBbMzAsIDM5XSxcblx0XHRyZWQ6IFszMSwgMzldLFxuXHRcdGdyZWVuOiBbMzIsIDM5XSxcblx0XHR5ZWxsb3c6IFszMywgMzldLFxuXHRcdGJsdWU6IFszNCwgMzldLFxuXHRcdG1hZ2VudGE6IFszNSwgMzldLFxuXHRcdGN5YW46IFszNiwgMzldLFxuXHRcdHdoaXRlOiBbMzcsIDM5XSxcblxuXHRcdC8vIEJyaWdodCBjb2xvclxuXHRcdGJsYWNrQnJpZ2h0OiBbOTAsIDM5XSxcblx0XHRncmF5OiBbOTAsIDM5XSwgLy8gQWxpYXMgb2YgYGJsYWNrQnJpZ2h0YFxuXHRcdGdyZXk6IFs5MCwgMzldLCAvLyBBbGlhcyBvZiBgYmxhY2tCcmlnaHRgXG5cdFx0cmVkQnJpZ2h0OiBbOTEsIDM5XSxcblx0XHRncmVlbkJyaWdodDogWzkyLCAzOV0sXG5cdFx0eWVsbG93QnJpZ2h0OiBbOTMsIDM5XSxcblx0XHRibHVlQnJpZ2h0OiBbOTQsIDM5XSxcblx0XHRtYWdlbnRhQnJpZ2h0OiBbOTUsIDM5XSxcblx0XHRjeWFuQnJpZ2h0OiBbOTYsIDM5XSxcblx0XHR3aGl0ZUJyaWdodDogWzk3LCAzOV0sXG5cdH0sXG5cdGJnQ29sb3I6IHtcblx0XHRiZ0JsYWNrOiBbNDAsIDQ5XSxcblx0XHRiZ1JlZDogWzQxLCA0OV0sXG5cdFx0YmdHcmVlbjogWzQyLCA0OV0sXG5cdFx0YmdZZWxsb3c6IFs0MywgNDldLFxuXHRcdGJnQmx1ZTogWzQ0LCA0OV0sXG5cdFx0YmdNYWdlbnRhOiBbNDUsIDQ5XSxcblx0XHRiZ0N5YW46IFs0NiwgNDldLFxuXHRcdGJnV2hpdGU6IFs0NywgNDldLFxuXG5cdFx0Ly8gQnJpZ2h0IGNvbG9yXG5cdFx0YmdCbGFja0JyaWdodDogWzEwMCwgNDldLFxuXHRcdGJnR3JheTogWzEwMCwgNDldLCAvLyBBbGlhcyBvZiBgYmdCbGFja0JyaWdodGBcblx0XHRiZ0dyZXk6IFsxMDAsIDQ5XSwgLy8gQWxpYXMgb2YgYGJnQmxhY2tCcmlnaHRgXG5cdFx0YmdSZWRCcmlnaHQ6IFsxMDEsIDQ5XSxcblx0XHRiZ0dyZWVuQnJpZ2h0OiBbMTAyLCA0OV0sXG5cdFx0YmdZZWxsb3dCcmlnaHQ6IFsxMDMsIDQ5XSxcblx0XHRiZ0JsdWVCcmlnaHQ6IFsxMDQsIDQ5XSxcblx0XHRiZ01hZ2VudGFCcmlnaHQ6IFsxMDUsIDQ5XSxcblx0XHRiZ0N5YW5CcmlnaHQ6IFsxMDYsIDQ5XSxcblx0XHRiZ1doaXRlQnJpZ2h0OiBbMTA3LCA0OV0sXG5cdH0sXG59O1xuXG5leHBvcnQgY29uc3QgbW9kaWZpZXJOYW1lcyA9IE9iamVjdC5rZXlzKHN0eWxlcy5tb2RpZmllcik7XG5leHBvcnQgY29uc3QgZm9yZWdyb3VuZENvbG9yTmFtZXMgPSBPYmplY3Qua2V5cyhzdHlsZXMuY29sb3IpO1xuZXhwb3J0IGNvbnN0IGJhY2tncm91bmRDb2xvck5hbWVzID0gT2JqZWN0LmtleXMoc3R5bGVzLmJnQ29sb3IpO1xuZXhwb3J0IGNvbnN0IGNvbG9yTmFtZXMgPSBbLi4uZm9yZWdyb3VuZENvbG9yTmFtZXMsIC4uLmJhY2tncm91bmRDb2xvck5hbWVzXTtcblxuZnVuY3Rpb24gYXNzZW1ibGVTdHlsZXMoKSB7XG5cdGNvbnN0IGNvZGVzID0gbmV3IE1hcCgpO1xuXG5cdGZvciAoY29uc3QgW2dyb3VwTmFtZSwgZ3JvdXBdIG9mIE9iamVjdC5lbnRyaWVzKHN0eWxlcykpIHtcblx0XHRmb3IgKGNvbnN0IFtzdHlsZU5hbWUsIHN0eWxlXSBvZiBPYmplY3QuZW50cmllcyhncm91cCkpIHtcblx0XHRcdHN0eWxlc1tzdHlsZU5hbWVdID0ge1xuXHRcdFx0XHRvcGVuOiBgXFx1MDAxQlske3N0eWxlWzBdfW1gLFxuXHRcdFx0XHRjbG9zZTogYFxcdTAwMUJbJHtzdHlsZVsxXX1tYCxcblx0XHRcdH07XG5cblx0XHRcdGdyb3VwW3N0eWxlTmFtZV0gPSBzdHlsZXNbc3R5bGVOYW1lXTtcblxuXHRcdFx0Y29kZXMuc2V0KHN0eWxlWzBdLCBzdHlsZVsxXSk7XG5cdFx0fVxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KHN0eWxlcywgZ3JvdXBOYW1lLCB7XG5cdFx0XHR2YWx1ZTogZ3JvdXAsXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9KTtcblx0fVxuXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzdHlsZXMsICdjb2RlcycsIHtcblx0XHR2YWx1ZTogY29kZXMsXG5cdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdH0pO1xuXG5cdHN0eWxlcy5jb2xvci5jbG9zZSA9ICdcXHUwMDFCWzM5bSc7XG5cdHN0eWxlcy5iZ0NvbG9yLmNsb3NlID0gJ1xcdTAwMUJbNDltJztcblxuXHRzdHlsZXMuY29sb3IuYW5zaSA9IHdyYXBBbnNpMTYoKTtcblx0c3R5bGVzLmNvbG9yLmFuc2kyNTYgPSB3cmFwQW5zaTI1NigpO1xuXHRzdHlsZXMuY29sb3IuYW5zaTE2bSA9IHdyYXBBbnNpMTZtKCk7XG5cdHN0eWxlcy5iZ0NvbG9yLmFuc2kgPSB3cmFwQW5zaTE2KEFOU0lfQkFDS0dST1VORF9PRkZTRVQpO1xuXHRzdHlsZXMuYmdDb2xvci5hbnNpMjU2ID0gd3JhcEFuc2kyNTYoQU5TSV9CQUNLR1JPVU5EX09GRlNFVCk7XG5cdHN0eWxlcy5iZ0NvbG9yLmFuc2kxNm0gPSB3cmFwQW5zaTE2bShBTlNJX0JBQ0tHUk9VTkRfT0ZGU0VUKTtcblxuXHQvLyBGcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9RaXgtL2NvbG9yLWNvbnZlcnQvYmxvYi8zZjBlMGQ0ZTkyZTIzNTc5NmNjYjE3ZjZlODVjNzIwOTRhNjUxZjQ5L2NvbnZlcnNpb25zLmpzXG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHN0eWxlcywge1xuXHRcdHJnYlRvQW5zaTI1Njoge1xuXHRcdFx0dmFsdWUocmVkLCBncmVlbiwgYmx1ZSkge1xuXHRcdFx0XHQvLyBXZSB1c2UgdGhlIGV4dGVuZGVkIGdyZXlzY2FsZSBwYWxldHRlIGhlcmUsIHdpdGggdGhlIGV4Y2VwdGlvbiBvZlxuXHRcdFx0XHQvLyBibGFjayBhbmQgd2hpdGUuIG5vcm1hbCBwYWxldHRlIG9ubHkgaGFzIDQgZ3JleXNjYWxlIHNoYWRlcy5cblx0XHRcdFx0aWYgKHJlZCA9PT0gZ3JlZW4gJiYgZ3JlZW4gPT09IGJsdWUpIHtcblx0XHRcdFx0XHRpZiAocmVkIDwgOCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIDE2O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGlmIChyZWQgPiAyNDgpIHtcblx0XHRcdFx0XHRcdHJldHVybiAyMzE7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgucm91bmQoKChyZWQgLSA4KSAvIDI0NykgKiAyNCkgKyAyMzI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gMTZcblx0XHRcdFx0XHQrICgzNiAqIE1hdGgucm91bmQocmVkIC8gMjU1ICogNSkpXG5cdFx0XHRcdFx0KyAoNiAqIE1hdGgucm91bmQoZ3JlZW4gLyAyNTUgKiA1KSlcblx0XHRcdFx0XHQrIE1hdGgucm91bmQoYmx1ZSAvIDI1NSAqIDUpO1xuXHRcdFx0fSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0aGV4VG9SZ2I6IHtcblx0XHRcdHZhbHVlKGhleCkge1xuXHRcdFx0XHRjb25zdCBtYXRjaGVzID0gL1thLWZcXGRdezZ9fFthLWZcXGRdezN9L2kuZXhlYyhoZXgudG9TdHJpbmcoMTYpKTtcblx0XHRcdFx0aWYgKCFtYXRjaGVzKSB7XG5cdFx0XHRcdFx0cmV0dXJuIFswLCAwLCAwXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGxldCBbY29sb3JTdHJpbmddID0gbWF0Y2hlcztcblxuXHRcdFx0XHRpZiAoY29sb3JTdHJpbmcubGVuZ3RoID09PSAzKSB7XG5cdFx0XHRcdFx0Y29sb3JTdHJpbmcgPSBbLi4uY29sb3JTdHJpbmddLm1hcChjaGFyYWN0ZXIgPT4gY2hhcmFjdGVyICsgY2hhcmFjdGVyKS5qb2luKCcnKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNvbnN0IGludGVnZXIgPSBOdW1iZXIucGFyc2VJbnQoY29sb3JTdHJpbmcsIDE2KTtcblxuXHRcdFx0XHRyZXR1cm4gW1xuXHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWJpdHdpc2UgKi9cblx0XHRcdFx0XHQoaW50ZWdlciA+PiAxNikgJiAweEZGLFxuXHRcdFx0XHRcdChpbnRlZ2VyID4+IDgpICYgMHhGRixcblx0XHRcdFx0XHRpbnRlZ2VyICYgMHhGRixcblx0XHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWJpdHdpc2UgKi9cblx0XHRcdFx0XTtcblx0XHRcdH0sXG5cdFx0XHRlbnVtZXJhYmxlOiBmYWxzZSxcblx0XHR9LFxuXHRcdGhleFRvQW5zaTI1Njoge1xuXHRcdFx0dmFsdWU6IGhleCA9PiBzdHlsZXMucmdiVG9BbnNpMjU2KC4uLnN0eWxlcy5oZXhUb1JnYihoZXgpKSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0YW5zaTI1NlRvQW5zaToge1xuXHRcdFx0dmFsdWUoY29kZSkge1xuXHRcdFx0XHRpZiAoY29kZSA8IDgpIHtcblx0XHRcdFx0XHRyZXR1cm4gMzAgKyBjb2RlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKGNvZGUgPCAxNikge1xuXHRcdFx0XHRcdHJldHVybiA5MCArIChjb2RlIC0gOCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRsZXQgcmVkO1xuXHRcdFx0XHRsZXQgZ3JlZW47XG5cdFx0XHRcdGxldCBibHVlO1xuXG5cdFx0XHRcdGlmIChjb2RlID49IDIzMikge1xuXHRcdFx0XHRcdHJlZCA9ICgoKGNvZGUgLSAyMzIpICogMTApICsgOCkgLyAyNTU7XG5cdFx0XHRcdFx0Z3JlZW4gPSByZWQ7XG5cdFx0XHRcdFx0Ymx1ZSA9IHJlZDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRjb2RlIC09IDE2O1xuXG5cdFx0XHRcdFx0Y29uc3QgcmVtYWluZGVyID0gY29kZSAlIDM2O1xuXG5cdFx0XHRcdFx0cmVkID0gTWF0aC5mbG9vcihjb2RlIC8gMzYpIC8gNTtcblx0XHRcdFx0XHRncmVlbiA9IE1hdGguZmxvb3IocmVtYWluZGVyIC8gNikgLyA1O1xuXHRcdFx0XHRcdGJsdWUgPSAocmVtYWluZGVyICUgNikgLyA1O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y29uc3QgdmFsdWUgPSBNYXRoLm1heChyZWQsIGdyZWVuLCBibHVlKSAqIDI7XG5cblx0XHRcdFx0aWYgKHZhbHVlID09PSAwKSB7XG5cdFx0XHRcdFx0cmV0dXJuIDMwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2Vcblx0XHRcdFx0bGV0IHJlc3VsdCA9IDMwICsgKChNYXRoLnJvdW5kKGJsdWUpIDw8IDIpIHwgKE1hdGgucm91bmQoZ3JlZW4pIDw8IDEpIHwgTWF0aC5yb3VuZChyZWQpKTtcblxuXHRcdFx0XHRpZiAodmFsdWUgPT09IDIpIHtcblx0XHRcdFx0XHRyZXN1bHQgKz0gNjA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0fSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdFx0cmdiVG9BbnNpOiB7XG5cdFx0XHR2YWx1ZTogKHJlZCwgZ3JlZW4sIGJsdWUpID0+IHN0eWxlcy5hbnNpMjU2VG9BbnNpKHN0eWxlcy5yZ2JUb0Fuc2kyNTYocmVkLCBncmVlbiwgYmx1ZSkpLFxuXHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0fSxcblx0XHRoZXhUb0Fuc2k6IHtcblx0XHRcdHZhbHVlOiBoZXggPT4gc3R5bGVzLmFuc2kyNTZUb0Fuc2koc3R5bGVzLmhleFRvQW5zaTI1NihoZXgpKSxcblx0XHRcdGVudW1lcmFibGU6IGZhbHNlLFxuXHRcdH0sXG5cdH0pO1xuXG5cdHJldHVybiBzdHlsZXM7XG59XG5cbmNvbnN0IGFuc2lTdHlsZXMgPSBhc3NlbWJsZVN0eWxlcygpO1xuXG5leHBvcnQgZGVmYXVsdCBhbnNpU3R5bGVzO1xuIiwiaW1wb3J0IHN0cmluZ1dpZHRoIGZyb20gJ3N0cmluZy13aWR0aCc7XG5pbXBvcnQgc3RyaXBBbnNpIGZyb20gJ3N0cmlwLWFuc2knO1xuaW1wb3J0IGFuc2lTdHlsZXMgZnJvbSAnYW5zaS1zdHlsZXMnO1xuXG5jb25zdCBFU0NBUEVTID0gbmV3IFNldChbXG5cdCdcXHUwMDFCJyxcblx0J1xcdTAwOUInLFxuXSk7XG5cbmNvbnN0IEVORF9DT0RFID0gMzk7XG5jb25zdCBBTlNJX0VTQ0FQRV9CRUxMID0gJ1xcdTAwMDcnO1xuY29uc3QgQU5TSV9DU0kgPSAnWyc7XG5jb25zdCBBTlNJX09TQyA9ICddJztcbmNvbnN0IEFOU0lfU0dSX1RFUk1JTkFUT1IgPSAnbSc7XG5jb25zdCBBTlNJX0VTQ0FQRV9MSU5LID0gYCR7QU5TSV9PU0N9ODs7YDtcblxuY29uc3Qgd3JhcEFuc2lDb2RlID0gY29kZSA9PiBgJHtFU0NBUEVTLnZhbHVlcygpLm5leHQoKS52YWx1ZX0ke0FOU0lfQ1NJfSR7Y29kZX0ke0FOU0lfU0dSX1RFUk1JTkFUT1J9YDtcbmNvbnN0IHdyYXBBbnNpSHlwZXJsaW5rID0gdXJsID0+IGAke0VTQ0FQRVMudmFsdWVzKCkubmV4dCgpLnZhbHVlfSR7QU5TSV9FU0NBUEVfTElOS30ke3VybH0ke0FOU0lfRVNDQVBFX0JFTEx9YDtcblxuLy8gQ2FsY3VsYXRlIHRoZSBsZW5ndGggb2Ygd29yZHMgc3BsaXQgb24gJyAnLCBpZ25vcmluZ1xuLy8gdGhlIGV4dHJhIGNoYXJhY3RlcnMgYWRkZWQgYnkgYW5zaSBlc2NhcGUgY29kZXNcbmNvbnN0IHdvcmRMZW5ndGhzID0gc3RyaW5nID0+IHN0cmluZy5zcGxpdCgnICcpLm1hcChjaGFyYWN0ZXIgPT4gc3RyaW5nV2lkdGgoY2hhcmFjdGVyKSk7XG5cbi8vIFdyYXAgYSBsb25nIHdvcmQgYWNyb3NzIG11bHRpcGxlIHJvd3Ncbi8vIEFuc2kgZXNjYXBlIGNvZGVzIGRvIG5vdCBjb3VudCB0b3dhcmRzIGxlbmd0aFxuY29uc3Qgd3JhcFdvcmQgPSAocm93cywgd29yZCwgY29sdW1ucykgPT4ge1xuXHRjb25zdCBjaGFyYWN0ZXJzID0gWy4uLndvcmRdO1xuXG5cdGxldCBpc0luc2lkZUVzY2FwZSA9IGZhbHNlO1xuXHRsZXQgaXNJbnNpZGVMaW5rRXNjYXBlID0gZmFsc2U7XG5cdGxldCB2aXNpYmxlID0gc3RyaW5nV2lkdGgoc3RyaXBBbnNpKHJvd3MuYXQoLTEpKSk7XG5cblx0Zm9yIChjb25zdCBbaW5kZXgsIGNoYXJhY3Rlcl0gb2YgY2hhcmFjdGVycy5lbnRyaWVzKCkpIHtcblx0XHRjb25zdCBjaGFyYWN0ZXJMZW5ndGggPSBzdHJpbmdXaWR0aChjaGFyYWN0ZXIpO1xuXG5cdFx0aWYgKHZpc2libGUgKyBjaGFyYWN0ZXJMZW5ndGggPD0gY29sdW1ucykge1xuXHRcdFx0cm93c1tyb3dzLmxlbmd0aCAtIDFdICs9IGNoYXJhY3Rlcjtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cm93cy5wdXNoKGNoYXJhY3Rlcik7XG5cdFx0XHR2aXNpYmxlID0gMDtcblx0XHR9XG5cblx0XHRpZiAoRVNDQVBFUy5oYXMoY2hhcmFjdGVyKSkge1xuXHRcdFx0aXNJbnNpZGVFc2NhcGUgPSB0cnVlO1xuXG5cdFx0XHRjb25zdCBhbnNpRXNjYXBlTGlua0NhbmRpZGF0ZSA9IGNoYXJhY3RlcnMuc2xpY2UoaW5kZXggKyAxLCBpbmRleCArIDEgKyBBTlNJX0VTQ0FQRV9MSU5LLmxlbmd0aCkuam9pbignJyk7XG5cdFx0XHRpc0luc2lkZUxpbmtFc2NhcGUgPSBhbnNpRXNjYXBlTGlua0NhbmRpZGF0ZSA9PT0gQU5TSV9FU0NBUEVfTElOSztcblx0XHR9XG5cblx0XHRpZiAoaXNJbnNpZGVFc2NhcGUpIHtcblx0XHRcdGlmIChpc0luc2lkZUxpbmtFc2NhcGUpIHtcblx0XHRcdFx0aWYgKGNoYXJhY3RlciA9PT0gQU5TSV9FU0NBUEVfQkVMTCkge1xuXHRcdFx0XHRcdGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG5cdFx0XHRcdFx0aXNJbnNpZGVMaW5rRXNjYXBlID0gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoY2hhcmFjdGVyID09PSBBTlNJX1NHUl9URVJNSU5BVE9SKSB7XG5cdFx0XHRcdGlzSW5zaWRlRXNjYXBlID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdHZpc2libGUgKz0gY2hhcmFjdGVyTGVuZ3RoO1xuXG5cdFx0aWYgKHZpc2libGUgPT09IGNvbHVtbnMgJiYgaW5kZXggPCBjaGFyYWN0ZXJzLmxlbmd0aCAtIDEpIHtcblx0XHRcdHJvd3MucHVzaCgnJyk7XG5cdFx0XHR2aXNpYmxlID0gMDtcblx0XHR9XG5cdH1cblxuXHQvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhlIGxhc3Qgcm93IHdlIGNvcHkgb3ZlciBpcyBvbmx5XG5cdC8vIGFuc2kgZXNjYXBlIGNoYXJhY3RlcnMsIGhhbmRsZSB0aGlzIGVkZ2UtY2FzZVxuXHRpZiAoIXZpc2libGUgJiYgcm93cy5hdCgtMSkubGVuZ3RoID4gMCAmJiByb3dzLmxlbmd0aCA+IDEpIHtcblx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMl0gKz0gcm93cy5wb3AoKTtcblx0fVxufTtcblxuLy8gVHJpbXMgc3BhY2VzIGZyb20gYSBzdHJpbmcgaWdub3JpbmcgaW52aXNpYmxlIHNlcXVlbmNlc1xuY29uc3Qgc3RyaW5nVmlzaWJsZVRyaW1TcGFjZXNSaWdodCA9IHN0cmluZyA9PiB7XG5cdGNvbnN0IHdvcmRzID0gc3RyaW5nLnNwbGl0KCcgJyk7XG5cdGxldCBsYXN0ID0gd29yZHMubGVuZ3RoO1xuXG5cdHdoaWxlIChsYXN0ID4gMCkge1xuXHRcdGlmIChzdHJpbmdXaWR0aCh3b3Jkc1tsYXN0IC0gMV0pID4gMCkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXG5cdFx0bGFzdC0tO1xuXHR9XG5cblx0aWYgKGxhc3QgPT09IHdvcmRzLmxlbmd0aCkge1xuXHRcdHJldHVybiBzdHJpbmc7XG5cdH1cblxuXHRyZXR1cm4gd29yZHMuc2xpY2UoMCwgbGFzdCkuam9pbignICcpICsgd29yZHMuc2xpY2UobGFzdCkuam9pbignJyk7XG59O1xuXG4vLyBUaGUgd3JhcC1hbnNpIG1vZHVsZSBjYW4gYmUgaW52b2tlZCBpbiBlaXRoZXIgJ2hhcmQnIG9yICdzb2Z0JyB3cmFwIG1vZGUuXG4vL1xuLy8gJ2hhcmQnIHdpbGwgbmV2ZXIgYWxsb3cgYSBzdHJpbmcgdG8gdGFrZSB1cCBtb3JlIHRoYW4gY29sdW1ucyBjaGFyYWN0ZXJzLlxuLy9cbi8vICdzb2Z0JyBhbGxvd3MgbG9uZyB3b3JkcyB0byBleHBhbmQgcGFzdCB0aGUgY29sdW1uIGxlbmd0aC5cbmNvbnN0IGV4ZWMgPSAoc3RyaW5nLCBjb2x1bW5zLCBvcHRpb25zID0ge30pID0+IHtcblx0aWYgKG9wdGlvbnMudHJpbSAhPT0gZmFsc2UgJiYgc3RyaW5nLnRyaW0oKSA9PT0gJycpIHtcblx0XHRyZXR1cm4gJyc7XG5cdH1cblxuXHRsZXQgcmV0dXJuVmFsdWUgPSAnJztcblx0bGV0IGVzY2FwZUNvZGU7XG5cdGxldCBlc2NhcGVVcmw7XG5cblx0Y29uc3QgbGVuZ3RocyA9IHdvcmRMZW5ndGhzKHN0cmluZyk7XG5cdGxldCByb3dzID0gWycnXTtcblxuXHRmb3IgKGNvbnN0IFtpbmRleCwgd29yZF0gb2Ygc3RyaW5nLnNwbGl0KCcgJykuZW50cmllcygpKSB7XG5cdFx0aWYgKG9wdGlvbnMudHJpbSAhPT0gZmFsc2UpIHtcblx0XHRcdHJvd3Nbcm93cy5sZW5ndGggLSAxXSA9IHJvd3MuYXQoLTEpLnRyaW1TdGFydCgpO1xuXHRcdH1cblxuXHRcdGxldCByb3dMZW5ndGggPSBzdHJpbmdXaWR0aChyb3dzLmF0KC0xKSk7XG5cblx0XHRpZiAoaW5kZXggIT09IDApIHtcblx0XHRcdGlmIChyb3dMZW5ndGggPj0gY29sdW1ucyAmJiAob3B0aW9ucy53b3JkV3JhcCA9PT0gZmFsc2UgfHwgb3B0aW9ucy50cmltID09PSBmYWxzZSkpIHtcblx0XHRcdFx0Ly8gSWYgd2Ugc3RhcnQgd2l0aCBhIG5ldyB3b3JkIGJ1dCB0aGUgY3VycmVudCByb3cgbGVuZ3RoIGVxdWFscyB0aGUgbGVuZ3RoIG9mIHRoZSBjb2x1bW5zLCBhZGQgYSBuZXcgcm93XG5cdFx0XHRcdHJvd3MucHVzaCgnJyk7XG5cdFx0XHRcdHJvd0xlbmd0aCA9IDA7XG5cdFx0XHR9XG5cblx0XHRcdGlmIChyb3dMZW5ndGggPiAwIHx8IG9wdGlvbnMudHJpbSA9PT0gZmFsc2UpIHtcblx0XHRcdFx0cm93c1tyb3dzLmxlbmd0aCAtIDFdICs9ICcgJztcblx0XHRcdFx0cm93TGVuZ3RoKys7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSW4gJ2hhcmQnIHdyYXAgbW9kZSwgdGhlIGxlbmd0aCBvZiBhIGxpbmUgaXMgbmV2ZXIgYWxsb3dlZCB0byBleHRlbmQgcGFzdCAnY29sdW1ucydcblx0XHRpZiAob3B0aW9ucy5oYXJkICYmIGxlbmd0aHNbaW5kZXhdID4gY29sdW1ucykge1xuXHRcdFx0Y29uc3QgcmVtYWluaW5nQ29sdW1ucyA9IChjb2x1bW5zIC0gcm93TGVuZ3RoKTtcblx0XHRcdGNvbnN0IGJyZWFrc1N0YXJ0aW5nVGhpc0xpbmUgPSAxICsgTWF0aC5mbG9vcigobGVuZ3Roc1tpbmRleF0gLSByZW1haW5pbmdDb2x1bW5zIC0gMSkgLyBjb2x1bW5zKTtcblx0XHRcdGNvbnN0IGJyZWFrc1N0YXJ0aW5nTmV4dExpbmUgPSBNYXRoLmZsb29yKChsZW5ndGhzW2luZGV4XSAtIDEpIC8gY29sdW1ucyk7XG5cdFx0XHRpZiAoYnJlYWtzU3RhcnRpbmdOZXh0TGluZSA8IGJyZWFrc1N0YXJ0aW5nVGhpc0xpbmUpIHtcblx0XHRcdFx0cm93cy5wdXNoKCcnKTtcblx0XHRcdH1cblxuXHRcdFx0d3JhcFdvcmQocm93cywgd29yZCwgY29sdW1ucyk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRpZiAocm93TGVuZ3RoICsgbGVuZ3Roc1tpbmRleF0gPiBjb2x1bW5zICYmIHJvd0xlbmd0aCA+IDAgJiYgbGVuZ3Roc1tpbmRleF0gPiAwKSB7XG5cdFx0XHRpZiAob3B0aW9ucy53b3JkV3JhcCA9PT0gZmFsc2UgJiYgcm93TGVuZ3RoIDwgY29sdW1ucykge1xuXHRcdFx0XHR3cmFwV29yZChyb3dzLCB3b3JkLCBjb2x1bW5zKTtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdHJvd3MucHVzaCgnJyk7XG5cdFx0fVxuXG5cdFx0aWYgKHJvd0xlbmd0aCArIGxlbmd0aHNbaW5kZXhdID4gY29sdW1ucyAmJiBvcHRpb25zLndvcmRXcmFwID09PSBmYWxzZSkge1xuXHRcdFx0d3JhcFdvcmQocm93cywgd29yZCwgY29sdW1ucyk7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRyb3dzW3Jvd3MubGVuZ3RoIC0gMV0gKz0gd29yZDtcblx0fVxuXG5cdGlmIChvcHRpb25zLnRyaW0gIT09IGZhbHNlKSB7XG5cdFx0cm93cyA9IHJvd3MubWFwKHJvdyA9PiBzdHJpbmdWaXNpYmxlVHJpbVNwYWNlc1JpZ2h0KHJvdykpO1xuXHR9XG5cblx0Y29uc3QgcHJlU3RyaW5nID0gcm93cy5qb2luKCdcXG4nKTtcblx0Y29uc3QgcHJlID0gWy4uLnByZVN0cmluZ107XG5cblx0Ly8gV2UgbmVlZCB0byBrZWVwIGEgc2VwYXJhdGUgaW5kZXggYXMgYFN0cmluZyNzbGljZSgpYCB3b3JrcyBvbiBVbmljb2RlIGNvZGUgdW5pdHMsIHdoaWxlIGBwcmVgIGlzIGFuIGFycmF5IG9mIGNvZGVwb2ludHMuXG5cdGxldCBwcmVTdHJpbmdJbmRleCA9IDA7XG5cblx0Zm9yIChjb25zdCBbaW5kZXgsIGNoYXJhY3Rlcl0gb2YgcHJlLmVudHJpZXMoKSkge1xuXHRcdHJldHVyblZhbHVlICs9IGNoYXJhY3RlcjtcblxuXHRcdGlmIChFU0NBUEVTLmhhcyhjaGFyYWN0ZXIpKSB7XG5cdFx0XHRjb25zdCB7Z3JvdXBzfSA9IG5ldyBSZWdFeHAoYCg/OlxcXFwke0FOU0lfQ1NJfSg/PGNvZGU+XFxcXGQrKW18XFxcXCR7QU5TSV9FU0NBUEVfTElOS30oPzx1cmk+LiopJHtBTlNJX0VTQ0FQRV9CRUxMfSlgKS5leGVjKHByZVN0cmluZy5zbGljZShwcmVTdHJpbmdJbmRleCkpIHx8IHtncm91cHM6IHt9fTtcblx0XHRcdGlmIChncm91cHMuY29kZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdGNvbnN0IGNvZGUgPSBOdW1iZXIucGFyc2VGbG9hdChncm91cHMuY29kZSk7XG5cdFx0XHRcdGVzY2FwZUNvZGUgPSBjb2RlID09PSBFTkRfQ09ERSA/IHVuZGVmaW5lZCA6IGNvZGU7XG5cdFx0XHR9IGVsc2UgaWYgKGdyb3Vwcy51cmkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRlc2NhcGVVcmwgPSBncm91cHMudXJpLmxlbmd0aCA9PT0gMCA/IHVuZGVmaW5lZCA6IGdyb3Vwcy51cmk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Y29uc3QgY29kZSA9IGFuc2lTdHlsZXMuY29kZXMuZ2V0KE51bWJlcihlc2NhcGVDb2RlKSk7XG5cblx0XHRpZiAocHJlW2luZGV4ICsgMV0gPT09ICdcXG4nKSB7XG5cdFx0XHRpZiAoZXNjYXBlVXJsKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlICs9IHdyYXBBbnNpSHlwZXJsaW5rKCcnKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGVzY2FwZUNvZGUgJiYgY29kZSkge1xuXHRcdFx0XHRyZXR1cm5WYWx1ZSArPSB3cmFwQW5zaUNvZGUoY29kZSk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIGlmIChjaGFyYWN0ZXIgPT09ICdcXG4nKSB7XG5cdFx0XHRpZiAoZXNjYXBlQ29kZSAmJiBjb2RlKSB7XG5cdFx0XHRcdHJldHVyblZhbHVlICs9IHdyYXBBbnNpQ29kZShlc2NhcGVDb2RlKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKGVzY2FwZVVybCkge1xuXHRcdFx0XHRyZXR1cm5WYWx1ZSArPSB3cmFwQW5zaUh5cGVybGluayhlc2NhcGVVcmwpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHByZVN0cmluZ0luZGV4ICs9IGNoYXJhY3Rlci5sZW5ndGg7XG5cdH1cblxuXHRyZXR1cm4gcmV0dXJuVmFsdWU7XG59O1xuXG4vLyBGb3IgZWFjaCBuZXdsaW5lLCBpbnZva2UgdGhlIG1ldGhvZCBzZXBhcmF0ZWx5XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB3cmFwQW5zaShzdHJpbmcsIGNvbHVtbnMsIG9wdGlvbnMpIHtcblx0cmV0dXJuIFN0cmluZyhzdHJpbmcpXG5cdFx0Lm5vcm1hbGl6ZSgpXG5cdFx0LnJlcGxhY2VBbGwoJ1xcclxcbicsICdcXG4nKVxuXHRcdC5zcGxpdCgnXFxuJylcblx0XHQubWFwKGxpbmUgPT4gZXhlYyhsaW5lLCBjb2x1bW5zLCBvcHRpb25zKSlcblx0XHQuam9pbignXFxuJyk7XG59XG4iLCIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIENvbnRyaWJ1dG9yc1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuICovXG5leHBvcnQgZnVuY3Rpb24gY2FtZWxDYXNlKHN0cikge1xuICAgIC8vIEhhbmRsZSB0aGUgY2FzZSB3aGVyZSBhbiBhcmd1bWVudCBpcyBwcm92aWRlZCBhcyBjYW1lbCBjYXNlLCBlLmcuLCBmb29CYXIuXG4gICAgLy8gYnkgZW5zdXJpbmcgdGhhdCB0aGUgc3RyaW5nIGlzbid0IGFscmVhZHkgbWl4ZWQgY2FzZTpcbiAgICBjb25zdCBpc0NhbWVsQ2FzZSA9IHN0ciAhPT0gc3RyLnRvTG93ZXJDYXNlKCkgJiYgc3RyICE9PSBzdHIudG9VcHBlckNhc2UoKTtcbiAgICBpZiAoIWlzQ2FtZWxDYXNlKSB7XG4gICAgICAgIHN0ciA9IHN0ci50b0xvd2VyQ2FzZSgpO1xuICAgIH1cbiAgICBpZiAoc3RyLmluZGV4T2YoJy0nKSA9PT0gLTEgJiYgc3RyLmluZGV4T2YoJ18nKSA9PT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGxldCBjYW1lbGNhc2UgPSAnJztcbiAgICAgICAgbGV0IG5leHRDaHJVcHBlciA9IGZhbHNlO1xuICAgICAgICBjb25zdCBsZWFkaW5nSHlwaGVucyA9IHN0ci5tYXRjaCgvXi0rLyk7XG4gICAgICAgIGZvciAobGV0IGkgPSBsZWFkaW5nSHlwaGVucyA/IGxlYWRpbmdIeXBoZW5zWzBdLmxlbmd0aCA6IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGxldCBjaHIgPSBzdHIuY2hhckF0KGkpO1xuICAgICAgICAgICAgaWYgKG5leHRDaHJVcHBlcikge1xuICAgICAgICAgICAgICAgIG5leHRDaHJVcHBlciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNociA9IGNoci50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGkgIT09IDAgJiYgKGNociA9PT0gJy0nIHx8IGNociA9PT0gJ18nKSkge1xuICAgICAgICAgICAgICAgIG5leHRDaHJVcHBlciA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaHIgIT09ICctJyAmJiBjaHIgIT09ICdfJykge1xuICAgICAgICAgICAgICAgIGNhbWVsY2FzZSArPSBjaHI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbWVsY2FzZTtcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gZGVjYW1lbGl6ZShzdHIsIGpvaW5TdHJpbmcpIHtcbiAgICBjb25zdCBsb3dlcmNhc2UgPSBzdHIudG9Mb3dlckNhc2UoKTtcbiAgICBqb2luU3RyaW5nID0gam9pblN0cmluZyB8fCAnLSc7XG4gICAgbGV0IG5vdENhbWVsY2FzZSA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGNockxvd2VyID0gbG93ZXJjYXNlLmNoYXJBdChpKTtcbiAgICAgICAgY29uc3QgY2hyU3RyaW5nID0gc3RyLmNoYXJBdChpKTtcbiAgICAgICAgaWYgKGNockxvd2VyICE9PSBjaHJTdHJpbmcgJiYgaSA+IDApIHtcbiAgICAgICAgICAgIG5vdENhbWVsY2FzZSArPSBgJHtqb2luU3RyaW5nfSR7bG93ZXJjYXNlLmNoYXJBdChpKX1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbm90Q2FtZWxjYXNlICs9IGNoclN0cmluZztcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbm90Q2FtZWxjYXNlO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGxvb2tzTGlrZU51bWJlcih4KSB7XG4gICAgaWYgKHggPT09IG51bGwgfHwgeCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgLy8gaWYgbG9hZGVkIGZyb20gY29uZmlnLCBtYXkgYWxyZWFkeSBiZSBhIG51bWJlci5cbiAgICBpZiAodHlwZW9mIHggPT09ICdudW1iZXInKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyBoZXhhZGVjaW1hbC5cbiAgICBpZiAoL14weFswLTlhLWZdKyQvaS50ZXN0KHgpKVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAvLyBkb24ndCB0cmVhdCAwMTIzIGFzIGEgbnVtYmVyOyBhcyBpdCBkcm9wcyB0aGUgbGVhZGluZyAnMCcuXG4gICAgaWYgKC9eMFteLl0vLnRlc3QoeCkpXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICByZXR1cm4gL15bLV0/KD86XFxkKyg/OlxcLlxcZCopP3xcXC5cXGQrKShlWy0rXT9cXGQrKT8kLy50ZXN0KHgpO1xufVxuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE2LCBDb250cmlidXRvcnNcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcbiAqL1xuZXhwb3J0IHZhciBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleTtcbihmdW5jdGlvbiAoRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkpIHtcbiAgICBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleVtcIkJPT0xFQU5cIl0gPSBcImJvb2xlYW5cIjtcbiAgICBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleVtcIlNUUklOR1wiXSA9IFwic3RyaW5nXCI7XG4gICAgRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXlbXCJOVU1CRVJcIl0gPSBcIm51bWJlclwiO1xuICAgIERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5W1wiQVJSQVlcIl0gPSBcImFycmF5XCI7XG59KShEZWZhdWx0VmFsdWVzRm9yVHlwZUtleSB8fCAoRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkgPSB7fSkpO1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE2LCBDb250cmlidXRvcnNcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcbiAqL1xuLyogZXNsaW50LWRpc2FibGUgcHJlZmVyLWFycm93LWNhbGxiYWNrICovXG5pbXBvcnQgeyB0b2tlbml6ZUFyZ1N0cmluZyB9IGZyb20gJy4vdG9rZW5pemUtYXJnLXN0cmluZy5qcyc7XG5pbXBvcnQgeyBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleSB9IGZyb20gJy4veWFyZ3MtcGFyc2VyLXR5cGVzLmpzJztcbmltcG9ydCB7IGNhbWVsQ2FzZSwgZGVjYW1lbGl6ZSwgbG9va3NMaWtlTnVtYmVyIH0gZnJvbSAnLi9zdHJpbmctdXRpbHMuanMnO1xubGV0IG1peGluO1xuZXhwb3J0IGNsYXNzIFlhcmdzUGFyc2VyIHtcbiAgICBjb25zdHJ1Y3RvcihfbWl4aW4pIHtcbiAgICAgICAgbWl4aW4gPSBfbWl4aW47XG4gICAgfVxuICAgIHBhcnNlKGFyZ3NJbnB1dCwgb3B0aW9ucykge1xuICAgICAgICBjb25zdCBvcHRzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgICAgICBhbGlhczogdW5kZWZpbmVkLFxuICAgICAgICAgICAgYXJyYXk6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGJvb2xlYW46IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGNvbmZpZzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY29uZmlnT2JqZWN0czogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY29uZmlndXJhdGlvbjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgY29lcmNlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBjb3VudDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZGVmYXVsdDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgZW52UHJlZml4OiB1bmRlZmluZWQsXG4gICAgICAgICAgICBuYXJnOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBub3JtYWxpemU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHN0cmluZzogdW5kZWZpbmVkLFxuICAgICAgICAgICAgbnVtYmVyOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBfXzogdW5kZWZpbmVkLFxuICAgICAgICAgICAga2V5OiB1bmRlZmluZWRcbiAgICAgICAgfSwgb3B0aW9ucyk7XG4gICAgICAgIC8vIGFsbG93IGEgc3RyaW5nIGFyZ3VtZW50IHRvIGJlIHBhc3NlZCBpbiByYXRoZXJcbiAgICAgICAgLy8gdGhhbiBhbiBhcmd2IGFycmF5LlxuICAgICAgICBjb25zdCBhcmdzID0gdG9rZW5pemVBcmdTdHJpbmcoYXJnc0lucHV0KTtcbiAgICAgICAgLy8gdG9rZW5pemVBcmdTdHJpbmcgYWRkcyBleHRyYSBxdW90ZXMgdG8gYXJncyBpZiBhcmdzSW5wdXQgaXMgYSBzdHJpbmdcbiAgICAgICAgLy8gb25seSBzdHJpcCB0aG9zZSBleHRyYSBxdW90ZXMgaW4gcHJvY2Vzc1ZhbHVlIGlmIGFyZ3NJbnB1dCBpcyBhIHN0cmluZ1xuICAgICAgICBjb25zdCBpbnB1dElzU3RyaW5nID0gdHlwZW9mIGFyZ3NJbnB1dCA9PT0gJ3N0cmluZyc7XG4gICAgICAgIC8vIGFsaWFzZXMgbWlnaHQgaGF2ZSB0cmFuc2l0aXZlIHJlbGF0aW9uc2hpcHMsIG5vcm1hbGl6ZSB0aGlzLlxuICAgICAgICBjb25zdCBhbGlhc2VzID0gY29tYmluZUFsaWFzZXMoT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLCBvcHRzLmFsaWFzKSk7XG4gICAgICAgIGNvbnN0IGNvbmZpZ3VyYXRpb24gPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgICdib29sZWFuLW5lZ2F0aW9uJzogdHJ1ZSxcbiAgICAgICAgICAgICdjYW1lbC1jYXNlLWV4cGFuc2lvbic6IHRydWUsXG4gICAgICAgICAgICAnY29tYmluZS1hcnJheXMnOiBmYWxzZSxcbiAgICAgICAgICAgICdkb3Qtbm90YXRpb24nOiB0cnVlLFxuICAgICAgICAgICAgJ2R1cGxpY2F0ZS1hcmd1bWVudHMtYXJyYXknOiB0cnVlLFxuICAgICAgICAgICAgJ2ZsYXR0ZW4tZHVwbGljYXRlLWFycmF5cyc6IHRydWUsXG4gICAgICAgICAgICAnZ3JlZWR5LWFycmF5cyc6IHRydWUsXG4gICAgICAgICAgICAnaGFsdC1hdC1ub24tb3B0aW9uJzogZmFsc2UsXG4gICAgICAgICAgICAnbmFyZ3MtZWF0cy1vcHRpb25zJzogZmFsc2UsXG4gICAgICAgICAgICAnbmVnYXRpb24tcHJlZml4JzogJ25vLScsXG4gICAgICAgICAgICAncGFyc2UtbnVtYmVycyc6IHRydWUsXG4gICAgICAgICAgICAncGFyc2UtcG9zaXRpb25hbC1udW1iZXJzJzogdHJ1ZSxcbiAgICAgICAgICAgICdwb3B1bGF0ZS0tJzogZmFsc2UsXG4gICAgICAgICAgICAnc2V0LXBsYWNlaG9sZGVyLWtleSc6IGZhbHNlLFxuICAgICAgICAgICAgJ3Nob3J0LW9wdGlvbi1ncm91cHMnOiB0cnVlLFxuICAgICAgICAgICAgJ3N0cmlwLWFsaWFzZWQnOiBmYWxzZSxcbiAgICAgICAgICAgICdzdHJpcC1kYXNoZWQnOiBmYWxzZSxcbiAgICAgICAgICAgICd1bmtub3duLW9wdGlvbnMtYXMtYXJncyc6IGZhbHNlXG4gICAgICAgIH0sIG9wdHMuY29uZmlndXJhdGlvbik7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRzID0gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLCBvcHRzLmRlZmF1bHQpO1xuICAgICAgICBjb25zdCBjb25maWdPYmplY3RzID0gb3B0cy5jb25maWdPYmplY3RzIHx8IFtdO1xuICAgICAgICBjb25zdCBlbnZQcmVmaXggPSBvcHRzLmVudlByZWZpeDtcbiAgICAgICAgY29uc3Qgbm90RmxhZ3NPcHRpb24gPSBjb25maWd1cmF0aW9uWydwb3B1bGF0ZS0tJ107XG4gICAgICAgIGNvbnN0IG5vdEZsYWdzQXJndiA9IG5vdEZsYWdzT3B0aW9uID8gJy0tJyA6ICdfJztcbiAgICAgICAgY29uc3QgbmV3QWxpYXNlcyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRlZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIC8vIGFsbG93IGEgaTE4biBoYW5kbGVyIHRvIGJlIHBhc3NlZCBpbiwgZGVmYXVsdCB0byBhIGZha2Ugb25lICh1dGlsLmZvcm1hdCkuXG4gICAgICAgIGNvbnN0IF9fID0gb3B0cy5fXyB8fCBtaXhpbi5mb3JtYXQ7XG4gICAgICAgIGNvbnN0IGZsYWdzID0ge1xuICAgICAgICAgICAgYWxpYXNlczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIGFycmF5czogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIGJvb2xzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgc3RyaW5nczogT2JqZWN0LmNyZWF0ZShudWxsKSxcbiAgICAgICAgICAgIG51bWJlcnM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBjb3VudHM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBub3JtYWxpemU6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBjb25maWdzOiBPYmplY3QuY3JlYXRlKG51bGwpLFxuICAgICAgICAgICAgbmFyZ3M6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBjb2VyY2lvbnM6IE9iamVjdC5jcmVhdGUobnVsbCksXG4gICAgICAgICAgICBrZXlzOiBbXVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBuZWdhdGl2ZSA9IC9eLShbMC05XSsoXFwuWzAtOV0rKT98XFwuWzAtOV0rKSQvO1xuICAgICAgICBjb25zdCBuZWdhdGVkQm9vbGVhbiA9IG5ldyBSZWdFeHAoJ14tLScgKyBjb25maWd1cmF0aW9uWyduZWdhdGlvbi1wcmVmaXgnXSArICcoLispJyk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLmFycmF5IHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAob3B0KSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSB0eXBlb2Ygb3B0ID09PSAnb2JqZWN0JyA/IG9wdC5rZXkgOiBvcHQ7XG4gICAgICAgICAgICAvLyBhc3NpZ24gdG8gZmxhZ3NbYm9vbHN8c3RyaW5nc3xudW1iZXJzXVxuICAgICAgICAgICAgY29uc3QgYXNzaWdubWVudCA9IE9iamVjdC5rZXlzKG9wdCkubWFwKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhcnJheUZsYWdLZXlzID0ge1xuICAgICAgICAgICAgICAgICAgICBib29sZWFuOiAnYm9vbHMnLFxuICAgICAgICAgICAgICAgICAgICBzdHJpbmc6ICdzdHJpbmdzJyxcbiAgICAgICAgICAgICAgICAgICAgbnVtYmVyOiAnbnVtYmVycydcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBhcnJheUZsYWdLZXlzW2tleV07XG4gICAgICAgICAgICB9KS5maWx0ZXIoQm9vbGVhbikucG9wKCk7XG4gICAgICAgICAgICAvLyBhc3NpZ24ga2V5IHRvIGJlIGNvZXJjZWRcbiAgICAgICAgICAgIGlmIChhc3NpZ25tZW50KSB7XG4gICAgICAgICAgICAgICAgZmxhZ3NbYXNzaWdubWVudF1ba2V5XSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmbGFncy5hcnJheXNba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLmJvb2xlYW4gfHwgW10pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGZsYWdzLmJvb2xzW2tleV0gPSB0cnVlO1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBbXS5jb25jYXQob3B0cy5zdHJpbmcgfHwgW10pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGZsYWdzLnN0cmluZ3Nba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIFtdLmNvbmNhdChvcHRzLm51bWJlciB8fCBbXSkuZmlsdGVyKEJvb2xlYW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgZmxhZ3MubnVtYmVyc1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgW10uY29uY2F0KG9wdHMuY291bnQgfHwgW10pLmZpbHRlcihCb29sZWFuKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGZsYWdzLmNvdW50c1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICAgICAgW10uY29uY2F0KG9wdHMubm9ybWFsaXplIHx8IFtdKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBmbGFncy5ub3JtYWxpemVba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5uYXJnID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMob3B0cy5uYXJnKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5uYXJnc1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0cy5jb2VyY2UgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3QuZW50cmllcyhvcHRzLmNvZXJjZSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5jb2VyY2lvbnNba2V5XSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5rZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG9wdHMuY29uZmlnICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0cy5jb25maWcpIHx8IHR5cGVvZiBvcHRzLmNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgW10uY29uY2F0KG9wdHMuY29uZmlnKS5maWx0ZXIoQm9vbGVhbikuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIGZsYWdzLmNvbmZpZ3Nba2V5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2Ygb3B0cy5jb25maWcgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmVudHJpZXMob3B0cy5jb25maWcpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicgfHwgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5jb25maWdzW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGNyZWF0ZSBhIGxvb2t1cCB0YWJsZSB0aGF0IHRha2VzIGludG8gYWNjb3VudCBhbGxcbiAgICAgICAgLy8gY29tYmluYXRpb25zIG9mIGFsaWFzZXM6IHtmOiBbJ2ZvbyddLCBmb286IFsnZiddfVxuICAgICAgICBleHRlbmRBbGlhc2VzKG9wdHMua2V5LCBhbGlhc2VzLCBvcHRzLmRlZmF1bHQsIGZsYWdzLmFycmF5cyk7XG4gICAgICAgIC8vIGFwcGx5IGRlZmF1bHQgdmFsdWVzIHRvIGFsbCBhbGlhc2VzLlxuICAgICAgICBPYmplY3Qua2V5cyhkZWZhdWx0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAoZmxhZ3MuYWxpYXNlc1trZXldIHx8IFtdKS5mb3JFYWNoKGZ1bmN0aW9uIChhbGlhcykge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRzW2FsaWFzXSA9IGRlZmF1bHRzW2tleV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBlcnJvciA9IG51bGw7XG4gICAgICAgIGNoZWNrQ29uZmlndXJhdGlvbigpO1xuICAgICAgICBsZXQgbm90RmxhZ3MgPSBbXTtcbiAgICAgICAgY29uc3QgYXJndiA9IE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSwgeyBfOiBbXSB9KTtcbiAgICAgICAgLy8gVE9ETyhiY29lKTogZm9yIHRoZSBmaXJzdCBwYXNzIGF0IHJlbW92aW5nIG9iamVjdCBwcm90b3R5cGUgIHdlIGRpZG4ndFxuICAgICAgICAvLyByZW1vdmUgYWxsIHByb3RvdHlwZXMgZnJvbSBvYmplY3RzIHJldHVybmVkIGJ5IHRoaXMgQVBJLCB3ZSBtaWdodCB3YW50XG4gICAgICAgIC8vIHRvIGdyYWR1YWxseSBtb3ZlIHRvd2FyZHMgZG9pbmcgc28uXG4gICAgICAgIGNvbnN0IGFyZ3ZSZXR1cm4gPSB7fTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzW2ldO1xuICAgICAgICAgICAgY29uc3QgdHJ1bmNhdGVkQXJnID0gYXJnLnJlcGxhY2UoL14tezMsfS8sICctLS0nKTtcbiAgICAgICAgICAgIGxldCBicm9rZW47XG4gICAgICAgICAgICBsZXQga2V5O1xuICAgICAgICAgICAgbGV0IGxldHRlcnM7XG4gICAgICAgICAgICBsZXQgbTtcbiAgICAgICAgICAgIGxldCBuZXh0O1xuICAgICAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICAgICAgLy8gYW55IHVua25vd24gb3B0aW9uIChleGNlcHQgZm9yIGVuZC1vZi1vcHRpb25zLCBcIi0tXCIpXG4gICAgICAgICAgICBpZiAoYXJnICE9PSAnLS0nICYmIC9eLS8udGVzdChhcmcpICYmIGlzVW5rbm93bk9wdGlvbkFzQXJnKGFyZykpIHtcbiAgICAgICAgICAgICAgICBwdXNoUG9zaXRpb25hbChhcmcpO1xuICAgICAgICAgICAgICAgIC8vIC0tLSwgLS0tPSwgLS0tLSwgZXRjLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodHJ1bmNhdGVkQXJnLm1hdGNoKC9eLS0tKyg9fCQpLykpIHtcbiAgICAgICAgICAgICAgICAvLyBvcHRpb25zIHdpdGhvdXQga2V5IG5hbWUgYXJlIGludmFsaWQuXG4gICAgICAgICAgICAgICAgcHVzaFBvc2l0aW9uYWwoYXJnKTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAvLyAtLSBzZXBhcmF0ZWQgYnkgPVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eLS0uKz0vKSB8fCAoIWNvbmZpZ3VyYXRpb25bJ3Nob3J0LW9wdGlvbi1ncm91cHMnXSAmJiBhcmcubWF0Y2goL14tLis9LykpKSB7XG4gICAgICAgICAgICAgICAgLy8gVXNpbmcgW1xcc1xcU10gaW5zdGVhZCBvZiAuIGJlY2F1c2UganMgZG9lc24ndCBzdXBwb3J0IHRoZVxuICAgICAgICAgICAgICAgIC8vICdkb3RhbGwnIHJlZ2V4IG1vZGlmaWVyLiBTZWU6XG4gICAgICAgICAgICAgICAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMTA2ODMwOC8xMzIxNlxuICAgICAgICAgICAgICAgIG0gPSBhcmcubWF0Y2goL14tLT8oW149XSspPShbXFxzXFxTXSopJC8pO1xuICAgICAgICAgICAgICAgIC8vIGFycmF5cyBmb3JtYXQgPSAnLS1mPWEgYiBjJ1xuICAgICAgICAgICAgICAgIGlmIChtICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobSkgJiYgbS5sZW5ndGggPj0gMykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKG1bMV0sIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXRBcnJheShpLCBtWzFdLCBhcmdzLCBtWzJdKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMobVsxXSwgZmxhZ3MubmFyZ3MpICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbmFyZ3MgZm9ybWF0ID0gJy0tZj1tb25rZXkgd2FzaGluZyBjYXQnXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0TmFyZ3MoaSwgbVsxXSwgYXJncywgbVsyXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobVsxXSwgbVsyXSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcubWF0Y2gobmVnYXRlZEJvb2xlYW4pICYmIGNvbmZpZ3VyYXRpb25bJ2Jvb2xlYW4tbmVnYXRpb24nXSkge1xuICAgICAgICAgICAgICAgIG0gPSBhcmcubWF0Y2gobmVnYXRlZEJvb2xlYW4pO1xuICAgICAgICAgICAgICAgIGlmIChtICE9PSBudWxsICYmIEFycmF5LmlzQXJyYXkobSkgJiYgbS5sZW5ndGggPj0gMikge1xuICAgICAgICAgICAgICAgICAgICBrZXkgPSBtWzFdO1xuICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpID8gW2ZhbHNlXSA6IGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gLS0gc2VwYXJhdGVkIGJ5IHNwYWNlLlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eLS0uKy8pIHx8ICghY29uZmlndXJhdGlvblsnc2hvcnQtb3B0aW9uLWdyb3VwcyddICYmIGFyZy5tYXRjaCgvXi1bXi1dKy8pKSkge1xuICAgICAgICAgICAgICAgIG0gPSBhcmcubWF0Y2goL14tLT8oLispLyk7XG4gICAgICAgICAgICAgICAgaWYgKG0gIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShtKSAmJiBtLmxlbmd0aCA+PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIGtleSA9IG1bMV07XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhcnJheSBmb3JtYXQgPSAnLS1mb28gYSBiIGMnXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0QXJyYXkoaSwga2V5LCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncykgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBuYXJncyBmb3JtYXQgPSAnLS1mb28gYSBiIGMnXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzaG91bGQgYmUgdHJ1dGh5IGV2ZW4gaWY6IGZsYWdzLm5hcmdzW2tleV0gPT09IDBcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXROYXJncyhpLCBrZXksIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCAmJiAoIW5leHQubWF0Y2goL14tLykgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0Lm1hdGNoKG5lZ2F0aXZlKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICgvXih0cnVlfGZhbHNlKSQvLnRlc3QobmV4dCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZG90LW5vdGF0aW9uIGZsYWcgc2VwYXJhdGVkIGJ5ICc9Jy5cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZy5tYXRjaCgvXi0uXFwuLis9LykpIHtcbiAgICAgICAgICAgICAgICBtID0gYXJnLm1hdGNoKC9eLShbXj1dKyk9KFtcXHNcXFNdKikkLyk7XG4gICAgICAgICAgICAgICAgaWYgKG0gIT09IG51bGwgJiYgQXJyYXkuaXNBcnJheShtKSAmJiBtLmxlbmd0aCA+PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEFyZyhtWzFdLCBtWzJdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gZG90LW5vdGF0aW9uIGZsYWcgc2VwYXJhdGVkIGJ5IHNwYWNlLlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eLS5cXC4uKy8pICYmICFhcmcubWF0Y2gobmVnYXRpdmUpKSB7XG4gICAgICAgICAgICAgICAgbmV4dCA9IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgICAgIG0gPSBhcmcubWF0Y2goL14tKC5cXC4uKykvKTtcbiAgICAgICAgICAgICAgICBpZiAobSAhPT0gbnVsbCAmJiBBcnJheS5pc0FycmF5KG0pICYmIG0ubGVuZ3RoID49IDIpIHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gbVsxXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCAmJiAhbmV4dC5tYXRjaCgvXi0vKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgZGVmYXVsdFZhbHVlKGtleSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoYXJnLm1hdGNoKC9eLVteLV0rLykgJiYgIWFyZy5tYXRjaChuZWdhdGl2ZSkpIHtcbiAgICAgICAgICAgICAgICBsZXR0ZXJzID0gYXJnLnNsaWNlKDEsIC0xKS5zcGxpdCgnJyk7XG4gICAgICAgICAgICAgICAgYnJva2VuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBsZXR0ZXJzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSBhcmcuc2xpY2UoaiArIDIpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobGV0dGVyc1tqICsgMV0gJiYgbGV0dGVyc1tqICsgMV0gPT09ICc9Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhcmcuc2xpY2UoaiArIDMpO1xuICAgICAgICAgICAgICAgICAgICAgICAga2V5ID0gbGV0dGVyc1tqXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYXJyYXkgZm9ybWF0ID0gJy1mPWEgYiBjJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXRBcnJheShpLCBrZXksIGFyZ3MsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuYXJncyBmb3JtYXQgPSAnLWY9bW9ua2V5IHdhc2hpbmcgY2F0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXROYXJncyhpLCBrZXksIGFyZ3MsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobmV4dCA9PT0gJy0nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqXSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBjdXJyZW50IGxldHRlciBpcyBhbiBhbHBoYWJldGljIGNoYXJhY3RlciBhbmQgbmV4dCB2YWx1ZSBpcyBhIG51bWJlclxuICAgICAgICAgICAgICAgICAgICBpZiAoL1tBLVphLXpdLy50ZXN0KGxldHRlcnNbal0pICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAvXi0/XFxkKyhcXC5cXGQqKT8oZS0/XFxkKyk/JC8udGVzdChuZXh0KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tBbGxBbGlhc2VzKG5leHQsIGZsYWdzLmJvb2xzKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhsZXR0ZXJzW2pdLCBuZXh0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyb2tlbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobGV0dGVyc1tqICsgMV0gJiYgbGV0dGVyc1tqICsgMV0ubWF0Y2goL1xcVy8pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqXSwgbmV4dCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicm9rZW4gPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRBcmcobGV0dGVyc1tqXSwgZGVmYXVsdFZhbHVlKGxldHRlcnNbal0pKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBrZXkgPSBhcmcuc2xpY2UoLTEpWzBdO1xuICAgICAgICAgICAgICAgIGlmICghYnJva2VuICYmIGtleSAhPT0gJy0nKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBhcnJheSBmb3JtYXQgPSAnLWYgYSBiIGMnXG4gICAgICAgICAgICAgICAgICAgICAgICBpID0gZWF0QXJyYXkoaSwga2V5LCBhcmdzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncykgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBuYXJncyBmb3JtYXQgPSAnLWYgYSBiIGMnXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzaG91bGQgYmUgdHJ1dGh5IGV2ZW4gaWY6IGZsYWdzLm5hcmdzW2tleV0gPT09IDBcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBlYXROYXJncyhpLCBrZXksIGFyZ3MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGFyZ3NbaSArIDFdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG5leHQgIT09IHVuZGVmaW5lZCAmJiAoIS9eKC18LS0pW14tXS8udGVzdChuZXh0KSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQubWF0Y2gobmVnYXRpdmUpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuY291bnRzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKC9eKHRydWV8ZmFsc2UpJC8udGVzdChuZXh0KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIG5leHQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkrKztcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFyZyhrZXksIGRlZmF1bHRWYWx1ZShrZXkpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGFyZy5tYXRjaCgvXi1bMC05XSQvKSAmJlxuICAgICAgICAgICAgICAgIGFyZy5tYXRjaChuZWdhdGl2ZSkgJiZcbiAgICAgICAgICAgICAgICBjaGVja0FsbEFsaWFzZXMoYXJnLnNsaWNlKDEpLCBmbGFncy5ib29scykpIHtcbiAgICAgICAgICAgICAgICAvLyBzaW5nbGUtZGlnaXQgYm9vbGVhbiBhbGlhcywgZS5nOiB4YXJncyAtMFxuICAgICAgICAgICAgICAgIGtleSA9IGFyZy5zbGljZSgxKTtcbiAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBkZWZhdWx0VmFsdWUoa2V5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChhcmcgPT09ICctLScpIHtcbiAgICAgICAgICAgICAgICBub3RGbGFncyA9IGFyZ3Muc2xpY2UoaSArIDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29uZmlndXJhdGlvblsnaGFsdC1hdC1ub24tb3B0aW9uJ10pIHtcbiAgICAgICAgICAgICAgICBub3RGbGFncyA9IGFyZ3Muc2xpY2UoaSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwdXNoUG9zaXRpb25hbChhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIG9yZGVyIG9mIHByZWNlZGVuY2U6XG4gICAgICAgIC8vIDEuIGNvbW1hbmQgbGluZSBhcmdcbiAgICAgICAgLy8gMi4gdmFsdWUgZnJvbSBlbnYgdmFyXG4gICAgICAgIC8vIDMuIHZhbHVlIGZyb20gY29uZmlnIGZpbGVcbiAgICAgICAgLy8gNC4gdmFsdWUgZnJvbSBjb25maWcgb2JqZWN0c1xuICAgICAgICAvLyA1LiBjb25maWd1cmVkIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgYXBwbHlFbnZWYXJzKGFyZ3YsIHRydWUpOyAvLyBzcGVjaWFsIGNhc2U6IGNoZWNrIGVudiB2YXJzIHRoYXQgcG9pbnQgdG8gY29uZmlnIGZpbGVcbiAgICAgICAgYXBwbHlFbnZWYXJzKGFyZ3YsIGZhbHNlKTtcbiAgICAgICAgc2V0Q29uZmlnKGFyZ3YpO1xuICAgICAgICBzZXRDb25maWdPYmplY3RzKCk7XG4gICAgICAgIGFwcGx5RGVmYXVsdHNBbmRBbGlhc2VzKGFyZ3YsIGZsYWdzLmFsaWFzZXMsIGRlZmF1bHRzLCB0cnVlKTtcbiAgICAgICAgYXBwbHlDb2VyY2lvbnMoYXJndik7XG4gICAgICAgIGlmIChjb25maWd1cmF0aW9uWydzZXQtcGxhY2Vob2xkZXIta2V5J10pXG4gICAgICAgICAgICBzZXRQbGFjZWhvbGRlcktleXMoYXJndik7XG4gICAgICAgIC8vIGZvciBhbnkgY291bnRzIGVpdGhlciBub3QgaW4gYXJncyBvciB3aXRob3V0IGFuIGV4cGxpY2l0IGRlZmF1bHQsIHNldCB0byAwXG4gICAgICAgIE9iamVjdC5rZXlzKGZsYWdzLmNvdW50cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICBpZiAoIWhhc0tleShhcmd2LCBrZXkuc3BsaXQoJy4nKSkpXG4gICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgMCk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyAnLS0nIGRlZmF1bHRzIHRvIHVuZGVmaW5lZC5cbiAgICAgICAgaWYgKG5vdEZsYWdzT3B0aW9uICYmIG5vdEZsYWdzLmxlbmd0aClcbiAgICAgICAgICAgIGFyZ3Zbbm90RmxhZ3NBcmd2XSA9IFtdO1xuICAgICAgICBub3RGbGFncy5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgIGFyZ3Zbbm90RmxhZ3NBcmd2XS5wdXNoKGtleSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvblsnY2FtZWwtY2FzZS1leHBhbnNpb24nXSAmJiBjb25maWd1cmF0aW9uWydzdHJpcC1kYXNoZWQnXSkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZmlsdGVyKGtleSA9PiBrZXkgIT09ICctLScgJiYga2V5LmluY2x1ZGVzKCctJykpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBkZWxldGUgYXJndltrZXldO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ3N0cmlwLWFsaWFzZWQnXSkge1xuICAgICAgICAgICAgO1xuICAgICAgICAgICAgW10uY29uY2F0KC4uLk9iamVjdC5rZXlzKGFsaWFzZXMpLm1hcChrID0+IGFsaWFzZXNba10pKS5mb3JFYWNoKGFsaWFzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY29uZmlndXJhdGlvblsnY2FtZWwtY2FzZS1leHBhbnNpb24nXSAmJiBhbGlhcy5pbmNsdWRlcygnLScpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBhcmd2W2FsaWFzLnNwbGl0KCcuJykubWFwKHByb3AgPT4gY2FtZWxDYXNlKHByb3ApKS5qb2luKCcuJyldO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWxldGUgYXJndlthbGlhc107XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICAvLyBQdXNoIGFyZ3VtZW50IGludG8gcG9zaXRpb25hbCBhcnJheSwgYXBwbHlpbmcgbnVtZXJpYyBjb2VyY2lvbjpcbiAgICAgICAgZnVuY3Rpb24gcHVzaFBvc2l0aW9uYWwoYXJnKSB7XG4gICAgICAgICAgICBjb25zdCBtYXliZUNvZXJjZWROdW1iZXIgPSBtYXliZUNvZXJjZU51bWJlcignXycsIGFyZyk7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1heWJlQ29lcmNlZE51bWJlciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG1heWJlQ29lcmNlZE51bWJlciA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICBhcmd2Ll8ucHVzaChtYXliZUNvZXJjZWROdW1iZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGhvdyBtYW55IGFyZ3VtZW50cyBzaG91bGQgd2UgY29uc3VtZSwgYmFzZWRcbiAgICAgICAgLy8gb24gdGhlIG5hcmdzIG9wdGlvbj9cbiAgICAgICAgZnVuY3Rpb24gZWF0TmFyZ3MoaSwga2V5LCBhcmdzLCBhcmdBZnRlckVxdWFsU2lnbikge1xuICAgICAgICAgICAgbGV0IGlpO1xuICAgICAgICAgICAgbGV0IHRvRWF0ID0gY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpO1xuICAgICAgICAgICAgLy8gTmFOIGhhcyBhIHNwZWNpYWwgbWVhbmluZyBmb3IgdGhlIGFycmF5IHR5cGUsIGluZGljYXRpbmcgdGhhdCBvbmUgb3JcbiAgICAgICAgICAgIC8vIG1vcmUgdmFsdWVzIGFyZSBleHBlY3RlZC5cbiAgICAgICAgICAgIHRvRWF0ID0gdHlwZW9mIHRvRWF0ICE9PSAnbnVtYmVyJyB8fCBpc05hTih0b0VhdCkgPyAxIDogdG9FYXQ7XG4gICAgICAgICAgICBpZiAodG9FYXQgPT09IDApIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdBcmd1bWVudCB1bmV4cGVjdGVkIGZvcjogJXMnLCBrZXkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc2V0QXJnKGtleSwgZGVmYXVsdFZhbHVlKGtleSkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGF2YWlsYWJsZSA9IGlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSA/IDAgOiAxO1xuICAgICAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb25bJ25hcmdzLWVhdHMtb3B0aW9ucyddKSB7XG4gICAgICAgICAgICAgICAgLy8gY2xhc3NpYyBiZWhhdmlvciwgeWFyZ3MgZWF0cyBwb3NpdGlvbmFsIGFuZCBkYXNoIGFyZ3VtZW50cy5cbiAgICAgICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggLSAoaSArIDEpICsgYXZhaWxhYmxlIDwgdG9FYXQpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFcnJvcihfXygnTm90IGVub3VnaCBhcmd1bWVudHMgZm9sbG93aW5nOiAlcycsIGtleSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBhdmFpbGFibGUgPSB0b0VhdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIG5hcmdzIHdpbGwgbm90IGNvbnN1bWUgZmxhZyBhcmd1bWVudHMsIGUuZy4sIC1hYmMsIC0tZm9vLFxuICAgICAgICAgICAgICAgIC8vIGFuZCB0ZXJtaW5hdGVzIHdoZW4gb25lIGlzIG9ic2VydmVkLlxuICAgICAgICAgICAgICAgIGZvciAoaWkgPSBpICsgMTsgaWkgPCBhcmdzLmxlbmd0aDsgaWkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZ3NbaWldLm1hdGNoKC9eLVteMC05XS8pIHx8IGFyZ3NbaWldLm1hdGNoKG5lZ2F0aXZlKSB8fCBpc1Vua25vd25PcHRpb25Bc0FyZyhhcmdzW2lpXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFibGUrKztcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGUgPCB0b0VhdClcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFcnJvcihfXygnTm90IGVub3VnaCBhcmd1bWVudHMgZm9sbG93aW5nOiAlcycsIGtleSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGNvbnN1bWVkID0gTWF0aC5taW4oYXZhaWxhYmxlLCB0b0VhdCk7XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ0FmdGVyRXF1YWxTaWduKSAmJiBjb25zdW1lZCA+IDApIHtcbiAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBhcmdBZnRlckVxdWFsU2lnbik7XG4gICAgICAgICAgICAgICAgY29uc3VtZWQtLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoaWkgPSBpICsgMTsgaWkgPCAoY29uc3VtZWQgKyBpICsgMSk7IGlpKyspIHtcbiAgICAgICAgICAgICAgICBzZXRBcmcoa2V5LCBhcmdzW2lpXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gKGkgKyBjb25zdW1lZCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaWYgYW4gb3B0aW9uIGlzIGFuIGFycmF5LCBlYXQgYWxsIG5vbi1oeXBoZW5hdGVkIGFyZ3VtZW50c1xuICAgICAgICAvLyBmb2xsb3dpbmcgaXQuLi4gWVVNIVxuICAgICAgICAvLyBlLmcuLCAtLWZvbyBhcHBsZSBiYW5hbmEgY2F0IGJlY29tZXMgW1wiYXBwbGVcIiwgXCJiYW5hbmFcIiwgXCJjYXRcIl1cbiAgICAgICAgZnVuY3Rpb24gZWF0QXJyYXkoaSwga2V5LCBhcmdzLCBhcmdBZnRlckVxdWFsU2lnbikge1xuICAgICAgICAgICAgbGV0IGFyZ3NUb1NldCA9IFtdO1xuICAgICAgICAgICAgbGV0IG5leHQgPSBhcmdBZnRlckVxdWFsU2lnbiB8fCBhcmdzW2kgKyAxXTtcbiAgICAgICAgICAgIC8vIElmIGJvdGggYXJyYXkgYW5kIG5hcmdzIGFyZSBjb25maWd1cmVkLCBlbmZvcmNlIHRoZSBuYXJncyBjb3VudDpcbiAgICAgICAgICAgIGNvbnN0IG5hcmdzQ291bnQgPSBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5uYXJncyk7XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MuYm9vbHMpICYmICEoL14odHJ1ZXxmYWxzZSkkLy50ZXN0KG5leHQpKSkge1xuICAgICAgICAgICAgICAgIGFyZ3NUb1NldC5wdXNoKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNVbmRlZmluZWQobmV4dCkgfHxcbiAgICAgICAgICAgICAgICAoaXNVbmRlZmluZWQoYXJnQWZ0ZXJFcXVhbFNpZ24pICYmIC9eLS8udGVzdChuZXh0KSAmJiAhbmVnYXRpdmUudGVzdChuZXh0KSAmJiAhaXNVbmtub3duT3B0aW9uQXNBcmcobmV4dCkpKSB7XG4gICAgICAgICAgICAgICAgLy8gZm9yIGtleXMgd2l0aG91dCB2YWx1ZSA9PT4gYXJnc1RvU2V0IHJlbWFpbnMgYW4gZW1wdHkgW11cbiAgICAgICAgICAgICAgICAvLyBzZXQgdXNlciBkZWZhdWx0IHZhbHVlLCBpZiBhdmFpbGFibGVcbiAgICAgICAgICAgICAgICBpZiAoZGVmYXVsdHNba2V5XSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlZlZhbCA9IGRlZmF1bHRzW2tleV07XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NUb1NldCA9IEFycmF5LmlzQXJyYXkoZGVmVmFsKSA/IGRlZlZhbCA6IFtkZWZWYWxdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIHZhbHVlIGluIC0tb3B0aW9uPXZhbHVlIGlzIGVhdGVuIGFzIGlzXG4gICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChhcmdBZnRlckVxdWFsU2lnbikpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1RvU2V0LnB1c2gocHJvY2Vzc1ZhbHVlKGtleSwgYXJnQWZ0ZXJFcXVhbFNpZ24sIHRydWUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaWkgPSBpICsgMTsgaWkgPCBhcmdzLmxlbmd0aDsgaWkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKCFjb25maWd1cmF0aW9uWydncmVlZHktYXJyYXlzJ10gJiYgYXJnc1RvU2V0Lmxlbmd0aCA+IDApIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAobmFyZ3NDb3VudCAmJiB0eXBlb2YgbmFyZ3NDb3VudCA9PT0gJ251bWJlcicgJiYgYXJnc1RvU2V0Lmxlbmd0aCA+PSBuYXJnc0NvdW50KSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICBuZXh0ID0gYXJnc1tpaV07XG4gICAgICAgICAgICAgICAgICAgIGlmICgvXi0vLnRlc3QobmV4dCkgJiYgIW5lZ2F0aXZlLnRlc3QobmV4dCkgJiYgIWlzVW5rbm93bk9wdGlvbkFzQXJnKG5leHQpKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGkgPSBpaTtcbiAgICAgICAgICAgICAgICAgICAgYXJnc1RvU2V0LnB1c2gocHJvY2Vzc1ZhbHVlKGtleSwgbmV4dCwgaW5wdXRJc1N0cmluZykpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIGJvdGggYXJyYXkgYW5kIG5hcmdzIGFyZSBjb25maWd1cmVkLCBjcmVhdGUgYW4gZXJyb3IgaWYgbGVzcyB0aGFuXG4gICAgICAgICAgICAvLyBuYXJncyBwb3NpdGlvbmFscyB3ZXJlIGZvdW5kLiBOYU4gaGFzIHNwZWNpYWwgbWVhbmluZywgaW5kaWNhdGluZ1xuICAgICAgICAgICAgLy8gdGhhdCBhdCBsZWFzdCBvbmUgdmFsdWUgaXMgcmVxdWlyZWQgKG1vcmUgYXJlIG9rYXkpLlxuICAgICAgICAgICAgaWYgKHR5cGVvZiBuYXJnc0NvdW50ID09PSAnbnVtYmVyJyAmJiAoKG5hcmdzQ291bnQgJiYgYXJnc1RvU2V0Lmxlbmd0aCA8IG5hcmdzQ291bnQpIHx8XG4gICAgICAgICAgICAgICAgKGlzTmFOKG5hcmdzQ291bnQpICYmIGFyZ3NUb1NldC5sZW5ndGggPT09IDApKSkge1xuICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ05vdCBlbm91Z2ggYXJndW1lbnRzIGZvbGxvd2luZzogJXMnLCBrZXkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNldEFyZyhrZXksIGFyZ3NUb1NldCk7XG4gICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRBcmcoa2V5LCB2YWwsIHNob3VsZFN0cmlwUXVvdGVzID0gaW5wdXRJc1N0cmluZykge1xuICAgICAgICAgICAgaWYgKC8tLy50ZXN0KGtleSkgJiYgY29uZmlndXJhdGlvblsnY2FtZWwtY2FzZS1leHBhbnNpb24nXSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGFsaWFzID0ga2V5LnNwbGl0KCcuJykubWFwKGZ1bmN0aW9uIChwcm9wKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYW1lbENhc2UocHJvcCk7XG4gICAgICAgICAgICAgICAgfSkuam9pbignLicpO1xuICAgICAgICAgICAgICAgIGFkZE5ld0FsaWFzKGtleSwgYWxpYXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBwcm9jZXNzVmFsdWUoa2V5LCB2YWwsIHNob3VsZFN0cmlwUXVvdGVzKTtcbiAgICAgICAgICAgIGNvbnN0IHNwbGl0S2V5ID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgICAgICAgICBzZXRLZXkoYXJndiwgc3BsaXRLZXksIHZhbHVlKTtcbiAgICAgICAgICAgIC8vIGhhbmRsZSBwb3B1bGF0aW5nIGFsaWFzZXMgb2YgdGhlIGZ1bGwga2V5XG4gICAgICAgICAgICBpZiAoZmxhZ3MuYWxpYXNlc1trZXldKSB7XG4gICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qga2V5UHJvcGVydGllcyA9IHguc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0S2V5KGFyZ3YsIGtleVByb3BlcnRpZXMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGhhbmRsZSBwb3B1bGF0aW5nIGFsaWFzZXMgb2YgdGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGRvdC1ub3RhdGlvbiBrZXlcbiAgICAgICAgICAgIGlmIChzcGxpdEtleS5sZW5ndGggPiAxICYmIGNvbmZpZ3VyYXRpb25bJ2RvdC1ub3RhdGlvbiddKSB7XG4gICAgICAgICAgICAgICAgO1xuICAgICAgICAgICAgICAgIChmbGFncy5hbGlhc2VzW3NwbGl0S2V5WzBdXSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICBsZXQga2V5UHJvcGVydGllcyA9IHguc3BsaXQoJy4nKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXhwYW5kIGFsaWFzIHdpdGggbmVzdGVkIG9iamVjdHMgaW4ga2V5XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGEgPSBbXS5jb25jYXQoc3BsaXRLZXkpO1xuICAgICAgICAgICAgICAgICAgICBhLnNoaWZ0KCk7IC8vIG51a2UgdGhlIG9sZCBrZXkuXG4gICAgICAgICAgICAgICAgICAgIGtleVByb3BlcnRpZXMgPSBrZXlQcm9wZXJ0aWVzLmNvbmNhdChhKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gcG9wdWxhdGUgYWxpYXMgb25seSBpZiBpcyBub3QgYWxyZWFkeSBhbiBhbGlhcyBvZiB0aGUgZnVsbCBrZXlcbiAgICAgICAgICAgICAgICAgICAgLy8gKGFscmVhZHkgcG9wdWxhdGVkIGFib3ZlKVxuICAgICAgICAgICAgICAgICAgICBpZiAoIShmbGFncy5hbGlhc2VzW2tleV0gfHwgW10pLmluY2x1ZGVzKGtleVByb3BlcnRpZXMuam9pbignLicpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0S2V5KGFyZ3YsIGtleVByb3BlcnRpZXMsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2V0IG5vcm1hbGl6ZSBnZXR0ZXIgYW5kIHNldHRlciB3aGVuIGtleSBpcyBpbiAnbm9ybWFsaXplJyBidXQgaXNuJ3QgYW4gYXJyYXlcbiAgICAgICAgICAgIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ub3JtYWxpemUpICYmICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5cyA9IFtrZXldLmNvbmNhdChmbGFncy5hbGlhc2VzW2tleV0gfHwgW10pO1xuICAgICAgICAgICAgICAgIGtleXMuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShhcmd2UmV0dXJuLCBrZXksIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXQodmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnID8gbWl4aW4ubm9ybWFsaXplKHZhbHVlKSA6IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhZGROZXdBbGlhcyhrZXksIGFsaWFzKSB7XG4gICAgICAgICAgICBpZiAoIShmbGFncy5hbGlhc2VzW2tleV0gJiYgZmxhZ3MuYWxpYXNlc1trZXldLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0gPSBbYWxpYXNdO1xuICAgICAgICAgICAgICAgIG5ld0FsaWFzZXNbYWxpYXNdID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghKGZsYWdzLmFsaWFzZXNbYWxpYXNdICYmIGZsYWdzLmFsaWFzZXNbYWxpYXNdLmxlbmd0aCkpIHtcbiAgICAgICAgICAgICAgICBhZGROZXdBbGlhcyhhbGlhcywga2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBwcm9jZXNzVmFsdWUoa2V5LCB2YWwsIHNob3VsZFN0cmlwUXVvdGVzKSB7XG4gICAgICAgICAgICAvLyBzdHJpbmdzIG1heSBiZSBxdW90ZWQsIGNsZWFuIHRoaXMgdXAgYXMgd2UgYXNzaWduIHZhbHVlcy5cbiAgICAgICAgICAgIGlmIChzaG91bGRTdHJpcFF1b3Rlcykge1xuICAgICAgICAgICAgICAgIHZhbCA9IHN0cmlwUXVvdGVzKHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBoYW5kbGUgcGFyc2luZyBib29sZWFuIGFyZ3VtZW50cyAtLWZvbz10cnVlIC0tYmFyIGZhbHNlLlxuICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSB8fCBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5jb3VudHMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKVxuICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwgPT09ICd0cnVlJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IEFycmF5LmlzQXJyYXkodmFsKVxuICAgICAgICAgICAgICAgID8gdmFsLm1hcChmdW5jdGlvbiAodikgeyByZXR1cm4gbWF5YmVDb2VyY2VOdW1iZXIoa2V5LCB2KTsgfSlcbiAgICAgICAgICAgICAgICA6IG1heWJlQ29lcmNlTnVtYmVyKGtleSwgdmFsKTtcbiAgICAgICAgICAgIC8vIGluY3JlbWVudCBhIGNvdW50IGdpdmVuIGFzIGFyZyAoZWl0aGVyIG5vIHZhbHVlIG9yIHZhbHVlIHBhcnNlZCBhcyBib29sZWFuKVxuICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykgJiYgKGlzVW5kZWZpbmVkKHZhbHVlKSB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGluY3JlbWVudCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU2V0IG5vcm1hbGl6ZWQgdmFsdWUgd2hlbiBrZXkgaXMgaW4gJ25vcm1hbGl6ZScgYW5kIGluICdhcnJheXMnXG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3Mubm9ybWFsaXplKSAmJiBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSlcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWwubWFwKCh2YWwpID0+IHsgcmV0dXJuIG1peGluLm5vcm1hbGl6ZSh2YWwpOyB9KTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbWl4aW4ubm9ybWFsaXplKHZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gbWF5YmVDb2VyY2VOdW1iZXIoa2V5LCB2YWx1ZSkge1xuICAgICAgICAgICAgaWYgKCFjb25maWd1cmF0aW9uWydwYXJzZS1wb3NpdGlvbmFsLW51bWJlcnMnXSAmJiBrZXkgPT09ICdfJylcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICBpZiAoIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLnN0cmluZ3MpICYmICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc2hvdWxkQ29lcmNlTnVtYmVyID0gbG9va3NMaWtlTnVtYmVyKHZhbHVlKSAmJiBjb25maWd1cmF0aW9uWydwYXJzZS1udW1iZXJzJ10gJiYgKE51bWJlci5pc1NhZmVJbnRlZ2VyKE1hdGguZmxvb3IocGFyc2VGbG9hdChgJHt2YWx1ZX1gKSkpKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkQ29lcmNlTnVtYmVyIHx8ICghaXNVbmRlZmluZWQodmFsdWUpICYmIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm51bWJlcnMpKSkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNldCBhcmdzIGZyb20gY29uZmlnLmpzb24gZmlsZSwgdGhpcyBzaG91bGQgYmVcbiAgICAgICAgLy8gYXBwbGllZCBsYXN0IHNvIHRoYXQgZGVmYXVsdHMgY2FuIGJlIGFwcGxpZWQuXG4gICAgICAgIGZ1bmN0aW9uIHNldENvbmZpZyhhcmd2KSB7XG4gICAgICAgICAgICBjb25zdCBjb25maWdMb29rdXAgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICAgICAgLy8gZXhwYW5kIGRlZmF1bHRzL2FsaWFzZXMsIGluLWNhc2UgYW55IGhhcHBlbiB0byByZWZlcmVuY2VcbiAgICAgICAgICAgIC8vIHRoZSBjb25maWcuanNvbiBmaWxlLlxuICAgICAgICAgICAgYXBwbHlEZWZhdWx0c0FuZEFsaWFzZXMoY29uZmlnTG9va3VwLCBmbGFncy5hbGlhc2VzLCBkZWZhdWx0cyk7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhmbGFncy5jb25maWdzKS5mb3JFYWNoKGZ1bmN0aW9uIChjb25maWdLZXkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb25maWdQYXRoID0gYXJndltjb25maWdLZXldIHx8IGNvbmZpZ0xvb2t1cFtjb25maWdLZXldO1xuICAgICAgICAgICAgICAgIGlmIChjb25maWdQYXRoKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29uZmlnID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc29sdmVkQ29uZmlnUGF0aCA9IG1peGluLnJlc29sdmUobWl4aW4uY3dkKCksIGNvbmZpZ1BhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzb2x2ZUNvbmZpZyA9IGZsYWdzLmNvbmZpZ3NbY29uZmlnS2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzb2x2ZUNvbmZpZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZyA9IHJlc29sdmVDb25maWcocmVzb2x2ZWRDb25maWdQYXRoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnID0gZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZyBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gY29uZmlnO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnID0gbWl4aW4ucmVxdWlyZShyZXNvbHZlZENvbmZpZ1BhdGgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlnT2JqZWN0KGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBEZW5vIHdpbGwgcmVjZWl2ZSBhIFBlcm1pc3Npb25EZW5pZWQgZXJyb3IgaWYgYW4gYXR0ZW1wdCBpc1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWFkZSB0byBsb2FkIGNvbmZpZyB3aXRob3V0IHRoZSAtLWFsbG93LXJlYWQgZmxhZzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChleC5uYW1lID09PSAnUGVybWlzc2lvbkRlbmllZCcpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBleDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFyZ3ZbY29uZmlnS2V5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvciA9IEVycm9yKF9fKCdJbnZhbGlkIEpTT04gY29uZmlnIGZpbGU6ICVzJywgY29uZmlnUGF0aCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gc2V0IGFyZ3MgZnJvbSBjb25maWcgb2JqZWN0LlxuICAgICAgICAvLyBpdCByZWN1cnNpdmVseSBjaGVja3MgbmVzdGVkIG9iamVjdHMuXG4gICAgICAgIGZ1bmN0aW9uIHNldENvbmZpZ09iamVjdChjb25maWcsIHByZXYpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGNvbmZpZykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjb25maWdba2V5XTtcbiAgICAgICAgICAgICAgICBjb25zdCBmdWxsS2V5ID0gcHJldiA/IHByZXYgKyAnLicgKyBrZXkgOiBrZXk7XG4gICAgICAgICAgICAgICAgLy8gaWYgdGhlIHZhbHVlIGlzIGFuIGlubmVyIG9iamVjdCBhbmQgd2UgaGF2ZSBkb3Qtbm90YXRpb25cbiAgICAgICAgICAgICAgICAvLyBlbmFibGVkLCB0cmVhdCBpbm5lciBvYmplY3RzIGluIGNvbmZpZyB0aGUgc2FtZSBhc1xuICAgICAgICAgICAgICAgIC8vIGhlYXZpbHkgbmVzdGVkIGRvdCBub3RhdGlvbnMgKGZvby5iYXIuYXBwbGUpLlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlICE9PSBudWxsICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSAmJiBjb25maWd1cmF0aW9uWydkb3Qtbm90YXRpb24nXSkge1xuICAgICAgICAgICAgICAgICAgICAvLyBpZiB0aGUgdmFsdWUgaXMgYW4gb2JqZWN0IGJ1dCBub3QgYW4gYXJyYXksIGNoZWNrIG5lc3RlZCBvYmplY3RcbiAgICAgICAgICAgICAgICAgICAgc2V0Q29uZmlnT2JqZWN0KHZhbHVlLCBmdWxsS2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNldHRpbmcgYXJndW1lbnRzIHZpYSBDTEkgdGFrZXMgcHJlY2VkZW5jZSBvdmVyXG4gICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlcyB3aXRoaW4gdGhlIGNvbmZpZyBmaWxlLlxuICAgICAgICAgICAgICAgICAgICBpZiAoIWhhc0tleShhcmd2LCBmdWxsS2V5LnNwbGl0KCcuJykpIHx8IChjaGVja0FsbEFsaWFzZXMoZnVsbEtleSwgZmxhZ3MuYXJyYXlzKSAmJiBjb25maWd1cmF0aW9uWydjb21iaW5lLWFycmF5cyddKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGZ1bGxLZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNldCBhbGwgY29uZmlnIG9iamVjdHMgcGFzc2VkIGluIG9wdHNcbiAgICAgICAgZnVuY3Rpb24gc2V0Q29uZmlnT2JqZWN0cygpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZmlnT2JqZWN0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBjb25maWdPYmplY3RzLmZvckVhY2goZnVuY3Rpb24gKGNvbmZpZ09iamVjdCkge1xuICAgICAgICAgICAgICAgICAgICBzZXRDb25maWdPYmplY3QoY29uZmlnT2JqZWN0KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhcHBseUVudlZhcnMoYXJndiwgY29uZmlnT25seSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBlbnZQcmVmaXggPT09ICd1bmRlZmluZWQnKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IHR5cGVvZiBlbnZQcmVmaXggPT09ICdzdHJpbmcnID8gZW52UHJlZml4IDogJyc7XG4gICAgICAgICAgICBjb25zdCBlbnYgPSBtaXhpbi5lbnYoKTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGVudikuZm9yRWFjaChmdW5jdGlvbiAoZW52VmFyKSB7XG4gICAgICAgICAgICAgICAgaWYgKHByZWZpeCA9PT0gJycgfHwgZW52VmFyLmxhc3RJbmRleE9mKHByZWZpeCwgMCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IGFycmF5IG9mIG5lc3RlZCBrZXlzIGFuZCBjb252ZXJ0IHRoZW0gdG8gY2FtZWwgY2FzZVxuICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXlzID0gZW52VmFyLnNwbGl0KCdfXycpLm1hcChmdW5jdGlvbiAoa2V5LCBpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleSA9IGtleS5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FtZWxDYXNlKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBpZiAoKChjb25maWdPbmx5ICYmIGZsYWdzLmNvbmZpZ3Nba2V5cy5qb2luKCcuJyldKSB8fCAhY29uZmlnT25seSkgJiYgIWhhc0tleShhcmd2LCBrZXlzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QXJnKGtleXMuam9pbignLicpLCBlbnZbZW52VmFyXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhcHBseUNvZXJjaW9ucyhhcmd2KSB7XG4gICAgICAgICAgICBsZXQgY29lcmNlO1xuICAgICAgICAgICAgY29uc3QgYXBwbGllZCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGlmICghYXBwbGllZC5oYXMoa2V5KSkgeyAvLyBJZiB3ZSBoYXZlbid0IGFscmVhZHkgY29lcmNlZCB0aGlzIG9wdGlvbiB2aWEgb25lIG9mIGl0cyBhbGlhc2VzXG4gICAgICAgICAgICAgICAgICAgIGNvZXJjZSA9IGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvZXJjaW9ucyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29lcmNlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gbWF5YmVDb2VyY2VOdW1iZXIoa2V5LCBjb2VyY2UoYXJndltrZXldKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKFtdLmNvbmNhdChmbGFncy5hbGlhc2VzW2tleV0gfHwgW10sIGtleSkpLmZvckVhY2goYWxpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGllZC5hZGQoYWxpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJndlthbGldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBzZXRQbGFjZWhvbGRlcktleXMoYXJndikge1xuICAgICAgICAgICAgZmxhZ3Mua2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBkb24ndCBzZXQgcGxhY2Vob2xkZXIga2V5cyBmb3IgZG90IG5vdGF0aW9uIG9wdGlvbnMgJ2Zvby5iYXInLlxuICAgICAgICAgICAgICAgIGlmICh+a2V5LmluZGV4T2YoJy4nKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYXJndltrZXldID09PSAndW5kZWZpbmVkJylcbiAgICAgICAgICAgICAgICAgICAgYXJndltrZXldID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhcHBseURlZmF1bHRzQW5kQWxpYXNlcyhvYmosIGFsaWFzZXMsIGRlZmF1bHRzLCBjYW5Mb2cgPSBmYWxzZSkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZGVmYXVsdHMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIGlmICghaGFzS2V5KG9iaiwga2V5LnNwbGl0KCcuJykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldEtleShvYmosIGtleS5zcGxpdCgnLicpLCBkZWZhdWx0c1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbkxvZylcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRlZFtrZXldID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgKGFsaWFzZXNba2V5XSB8fCBbXSkuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhhc0tleShvYmosIHguc3BsaXQoJy4nKSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0S2V5KG9iaiwgeC5zcGxpdCgnLicpLCBkZWZhdWx0c1trZXldKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaGFzS2V5KG9iaiwga2V5cykge1xuICAgICAgICAgICAgbGV0IG8gPSBvYmo7XG4gICAgICAgICAgICBpZiAoIWNvbmZpZ3VyYXRpb25bJ2RvdC1ub3RhdGlvbiddKVxuICAgICAgICAgICAgICAgIGtleXMgPSBba2V5cy5qb2luKCcuJyldO1xuICAgICAgICAgICAga2V5cy5zbGljZSgwLCAtMSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgbyA9IChvW2tleV0gfHwge30pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2tleXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAodHlwZW9mIG8gIT09ICdvYmplY3QnKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5IGluIG87XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gc2V0S2V5KG9iaiwga2V5cywgdmFsdWUpIHtcbiAgICAgICAgICAgIGxldCBvID0gb2JqO1xuICAgICAgICAgICAgaWYgKCFjb25maWd1cmF0aW9uWydkb3Qtbm90YXRpb24nXSlcbiAgICAgICAgICAgICAgICBrZXlzID0gW2tleXMuam9pbignLicpXTtcbiAgICAgICAgICAgIGtleXMuc2xpY2UoMCwgLTEpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICAgICAgICAgIC8vIFRPRE8oYmNvZSk6IGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgeWFyZ3MsIHN3aXRjaCB0b1xuICAgICAgICAgICAgICAgIC8vIE9iamVjdC5jcmVhdGUobnVsbCkgZm9yIGRvdCBub3RhdGlvbjpcbiAgICAgICAgICAgICAgICBrZXkgPSBzYW5pdGl6ZUtleShrZXkpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgb1trZXldID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgb1trZXldID0ge307XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2Ygb1trZXldICE9PSAnb2JqZWN0JyB8fCBBcnJheS5pc0FycmF5KG9ba2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZW5zdXJlIHRoYXQgb1trZXldIGlzIGFuIGFycmF5LCBhbmQgdGhhdCB0aGUgbGFzdCBpdGVtIGlzIGFuIGVtcHR5IG9iamVjdC5cbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob1trZXldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgb1trZXldLnB1c2goe30pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgb1trZXldID0gW29ba2V5XSwge31dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIHdhbnQgdG8gdXBkYXRlIHRoZSBlbXB0eSBvYmplY3QgYXQgdGhlIGVuZCBvZiB0aGUgb1trZXldIGFycmF5LCBzbyBzZXQgbyB0byB0aGF0IG9iamVjdFxuICAgICAgICAgICAgICAgICAgICBvID0gb1trZXldW29ba2V5XS5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG8gPSBvW2tleV07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBUT0RPKGJjb2UpOiBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIHlhcmdzLCBzd2l0Y2ggdG9cbiAgICAgICAgICAgIC8vIE9iamVjdC5jcmVhdGUobnVsbCkgZm9yIGRvdCBub3RhdGlvbjpcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHNhbml0aXplS2V5KGtleXNba2V5cy5sZW5ndGggLSAxXSk7XG4gICAgICAgICAgICBjb25zdCBpc1R5cGVBcnJheSA9IGNoZWNrQWxsQWxpYXNlcyhrZXlzLmpvaW4oJy4nKSwgZmxhZ3MuYXJyYXlzKTtcbiAgICAgICAgICAgIGNvbnN0IGlzVmFsdWVBcnJheSA9IEFycmF5LmlzQXJyYXkodmFsdWUpO1xuICAgICAgICAgICAgbGV0IGR1cGxpY2F0ZSA9IGNvbmZpZ3VyYXRpb25bJ2R1cGxpY2F0ZS1hcmd1bWVudHMtYXJyYXknXTtcbiAgICAgICAgICAgIC8vIG5hcmdzIGhhcyBoaWdoZXIgcHJpb3JpdHkgdGhhbiBkdXBsaWNhdGVcbiAgICAgICAgICAgIGlmICghZHVwbGljYXRlICYmIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm5hcmdzKSkge1xuICAgICAgICAgICAgICAgIGR1cGxpY2F0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgaWYgKCghaXNVbmRlZmluZWQob1trZXldKSAmJiBmbGFncy5uYXJnc1trZXldID09PSAxKSB8fCAoQXJyYXkuaXNBcnJheShvW2tleV0pICYmIG9ba2V5XS5sZW5ndGggPT09IGZsYWdzLm5hcmdzW2tleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IGluY3JlbWVudCgpKSB7XG4gICAgICAgICAgICAgICAgb1trZXldID0gaW5jcmVtZW50KG9ba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9ba2V5XSkpIHtcbiAgICAgICAgICAgICAgICBpZiAoZHVwbGljYXRlICYmIGlzVHlwZUFycmF5ICYmIGlzVmFsdWVBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSBjb25maWd1cmF0aW9uWydmbGF0dGVuLWR1cGxpY2F0ZS1hcnJheXMnXSA/IG9ba2V5XS5jb25jYXQodmFsdWUpIDogKEFycmF5LmlzQXJyYXkob1trZXldWzBdKSA/IG9ba2V5XSA6IFtvW2tleV1dKS5jb25jYXQoW3ZhbHVlXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFkdXBsaWNhdGUgJiYgQm9vbGVhbihpc1R5cGVBcnJheSkgPT09IEJvb2xlYW4oaXNWYWx1ZUFycmF5KSkge1xuICAgICAgICAgICAgICAgICAgICBvW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG9ba2V5XSA9IG9ba2V5XS5jb25jYXQoW3ZhbHVlXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAob1trZXldID09PSB1bmRlZmluZWQgJiYgaXNUeXBlQXJyYXkpIHtcbiAgICAgICAgICAgICAgICBvW2tleV0gPSBpc1ZhbHVlQXJyYXkgPyB2YWx1ZSA6IFt2YWx1ZV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChkdXBsaWNhdGUgJiYgIShvW2tleV0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICAgIGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmNvdW50cykgfHxcbiAgICAgICAgICAgICAgICBjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykpKSB7XG4gICAgICAgICAgICAgICAgb1trZXldID0gW29ba2V5XSwgdmFsdWVdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgb1trZXldID0gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gZXh0ZW5kIHRoZSBhbGlhc2VzIGxpc3Qgd2l0aCBpbmZlcnJlZCBhbGlhc2VzLlxuICAgICAgICBmdW5jdGlvbiBleHRlbmRBbGlhc2VzKC4uLmFyZ3MpIHtcbiAgICAgICAgICAgIGFyZ3MuZm9yRWFjaChmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMob2JqIHx8IHt9KS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc2hvcnQtY2lyY3VpdCBpZiB3ZSd2ZSBhbHJlYWR5IGFkZGVkIGEga2V5XG4gICAgICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBhbGlhc2VzIGFycmF5LCBmb3IgZXhhbXBsZSBpdCBtaWdodFxuICAgICAgICAgICAgICAgICAgICAvLyBleGlzdCBpbiBib3RoICdvcHRzLmRlZmF1bHQnIGFuZCAnb3B0cy5rZXknLlxuICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MuYWxpYXNlc1trZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0gPSBbXS5jb25jYXQoYWxpYXNlc1trZXldIHx8IFtdKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRm9yIFwiLS1vcHRpb24tbmFtZVwiLCBhbHNvIHNldCBhcmd2Lm9wdGlvbk5hbWVcbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLmNvbmNhdChrZXkpLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgvLS8udGVzdCh4KSAmJiBjb25maWd1cmF0aW9uWydjYW1lbC1jYXNlLWV4cGFuc2lvbiddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYyA9IGNhbWVsQ2FzZSh4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyAhPT0ga2V5ICYmIGZsYWdzLmFsaWFzZXNba2V5XS5pbmRleE9mKGMpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0ucHVzaChjKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3QWxpYXNlc1tjXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgLy8gRm9yIFwiLS1vcHRpb25OYW1lXCIsIGFsc28gc2V0IGFyZ3ZbJ29wdGlvbi1uYW1lJ11cbiAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1trZXldLmNvbmNhdChrZXkpLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lmxlbmd0aCA+IDEgJiYgL1tBLVpdLy50ZXN0KHgpICYmIGNvbmZpZ3VyYXRpb25bJ2NhbWVsLWNhc2UtZXhwYW5zaW9uJ10pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjID0gZGVjYW1lbGl6ZSh4LCAnLScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjICE9PSBrZXkgJiYgZmxhZ3MuYWxpYXNlc1trZXldLmluZGV4T2YoYykgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsYWdzLmFsaWFzZXNba2V5XS5wdXNoKGMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdBbGlhc2VzW2NdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBmbGFncy5hbGlhc2VzW2tleV0uZm9yRWFjaChmdW5jdGlvbiAoeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MuYWxpYXNlc1t4XSA9IFtrZXldLmNvbmNhdChmbGFncy5hbGlhc2VzW2tleV0uZmlsdGVyKGZ1bmN0aW9uICh5KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHggIT09IHk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZykge1xuICAgICAgICAgICAgY29uc3QgdG9DaGVjayA9IFtdLmNvbmNhdChmbGFncy5hbGlhc2VzW2tleV0gfHwgW10sIGtleSk7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZmxhZyk7XG4gICAgICAgICAgICBjb25zdCBzZXRBbGlhcyA9IHRvQ2hlY2suZmluZChrZXkgPT4ga2V5cy5pbmNsdWRlcyhrZXkpKTtcbiAgICAgICAgICAgIHJldHVybiBzZXRBbGlhcyA/IGZsYWdbc2V0QWxpYXNdIDogZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gaGFzQW55RmxhZyhrZXkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZsYWdzS2V5cyA9IE9iamVjdC5rZXlzKGZsYWdzKTtcbiAgICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXS5jb25jYXQoZmxhZ3NLZXlzLm1hcChrID0+IGZsYWdzW2tdKSk7XG4gICAgICAgICAgICByZXR1cm4gdG9DaGVjay5zb21lKGZ1bmN0aW9uIChmbGFnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoZmxhZykgPyBmbGFnLmluY2x1ZGVzKGtleSkgOiBmbGFnW2tleV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBoYXNGbGFnc01hdGNoaW5nKGFyZywgLi4ucGF0dGVybnMpIHtcbiAgICAgICAgICAgIGNvbnN0IHRvQ2hlY2sgPSBbXS5jb25jYXQoLi4ucGF0dGVybnMpO1xuICAgICAgICAgICAgcmV0dXJuIHRvQ2hlY2suc29tZShmdW5jdGlvbiAocGF0dGVybikge1xuICAgICAgICAgICAgICAgIGNvbnN0IG1hdGNoID0gYXJnLm1hdGNoKHBhdHRlcm4pO1xuICAgICAgICAgICAgICAgIHJldHVybiBtYXRjaCAmJiBoYXNBbnlGbGFnKG1hdGNoWzFdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIGJhc2VkIG9uIGEgc2ltcGxpZmllZCB2ZXJzaW9uIG9mIHRoZSBzaG9ydCBmbGFnIGdyb3VwIHBhcnNpbmcgbG9naWNcbiAgICAgICAgZnVuY3Rpb24gaGFzQWxsU2hvcnRGbGFncyhhcmcpIHtcbiAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYSBuZWdhdGl2ZSBudW1iZXIsIG9yIGRvZXNuJ3Qgc3RhcnQgd2l0aCBhIHNpbmdsZSBoeXBoZW4sIGl0J3Mgbm90IGEgc2hvcnQgZmxhZyBncm91cFxuICAgICAgICAgICAgaWYgKGFyZy5tYXRjaChuZWdhdGl2ZSkgfHwgIWFyZy5tYXRjaCgvXi1bXi1dKy8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IGhhc0FsbEZsYWdzID0gdHJ1ZTtcbiAgICAgICAgICAgIGxldCBuZXh0O1xuICAgICAgICAgICAgY29uc3QgbGV0dGVycyA9IGFyZy5zbGljZSgxKS5zcGxpdCgnJyk7XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGxldHRlcnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgICAgICBuZXh0ID0gYXJnLnNsaWNlKGogKyAyKTtcbiAgICAgICAgICAgICAgICBpZiAoIWhhc0FueUZsYWcobGV0dGVyc1tqXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaGFzQWxsRmxhZ3MgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICgobGV0dGVyc1tqICsgMV0gJiYgbGV0dGVyc1tqICsgMV0gPT09ICc9JykgfHxcbiAgICAgICAgICAgICAgICAgICAgbmV4dCA9PT0gJy0nIHx8XG4gICAgICAgICAgICAgICAgICAgICgvW0EtWmEtel0vLnRlc3QobGV0dGVyc1tqXSkgJiYgL14tP1xcZCsoXFwuXFxkKik/KGUtP1xcZCspPyQvLnRlc3QobmV4dCkpIHx8XG4gICAgICAgICAgICAgICAgICAgIChsZXR0ZXJzW2ogKyAxXSAmJiBsZXR0ZXJzW2ogKyAxXS5tYXRjaCgvXFxXLykpKSB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBoYXNBbGxGbGFncztcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBpc1Vua25vd25PcHRpb25Bc0FyZyhhcmcpIHtcbiAgICAgICAgICAgIHJldHVybiBjb25maWd1cmF0aW9uWyd1bmtub3duLW9wdGlvbnMtYXMtYXJncyddICYmIGlzVW5rbm93bk9wdGlvbihhcmcpO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzVW5rbm93bk9wdGlvbihhcmcpIHtcbiAgICAgICAgICAgIGFyZyA9IGFyZy5yZXBsYWNlKC9eLXszLH0vLCAnLS0nKTtcbiAgICAgICAgICAgIC8vIGlnbm9yZSBuZWdhdGl2ZSBudW1iZXJzXG4gICAgICAgICAgICBpZiAoYXJnLm1hdGNoKG5lZ2F0aXZlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGlmIHRoaXMgaXMgYSBzaG9ydCBvcHRpb24gZ3JvdXAgYW5kIGFsbCBvZiB0aGVtIGFyZSBjb25maWd1cmVkLCBpdCBpc24ndCB1bmtub3duXG4gICAgICAgICAgICBpZiAoaGFzQWxsU2hvcnRGbGFncyhhcmcpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gZS5nLiAnLS1jb3VudD0yJ1xuICAgICAgICAgICAgY29uc3QgZmxhZ1dpdGhFcXVhbHMgPSAvXi0rKFtePV0rPyk9W1xcc1xcU10qJC87XG4gICAgICAgICAgICAvLyBlLmcuICctYScgb3IgJy0tYXJnJ1xuICAgICAgICAgICAgY29uc3Qgbm9ybWFsRmxhZyA9IC9eLSsoW149XSs/KSQvO1xuICAgICAgICAgICAgLy8gZS5nLiAnLWEtJ1xuICAgICAgICAgICAgY29uc3QgZmxhZ0VuZGluZ0luSHlwaGVuID0gL14tKyhbXj1dKz8pLSQvO1xuICAgICAgICAgICAgLy8gZS5nLiAnLWFiYzEyMydcbiAgICAgICAgICAgIGNvbnN0IGZsYWdFbmRpbmdJbkRpZ2l0cyA9IC9eLSsoW149XSs/XFxkKykkLztcbiAgICAgICAgICAgIC8vIGUuZy4gJy1hL3Vzci9sb2NhbCdcbiAgICAgICAgICAgIGNvbnN0IGZsYWdFbmRpbmdJbk5vbldvcmRDaGFyYWN0ZXJzID0gL14tKyhbXj1dKz8pXFxXKy4qJC87XG4gICAgICAgICAgICAvLyBjaGVjayB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIGZsYWcgc3R5bGVzLCBpbmNsdWRpbmcgbmVnYXRlZEJvb2xlYW4sIGEgcGF0dGVybiBkZWZpbmVkIG5lYXIgdGhlIHN0YXJ0IG9mIHRoZSBwYXJzZSBtZXRob2RcbiAgICAgICAgICAgIHJldHVybiAhaGFzRmxhZ3NNYXRjaGluZyhhcmcsIGZsYWdXaXRoRXF1YWxzLCBuZWdhdGVkQm9vbGVhbiwgbm9ybWFsRmxhZywgZmxhZ0VuZGluZ0luSHlwaGVuLCBmbGFnRW5kaW5nSW5EaWdpdHMsIGZsYWdFbmRpbmdJbk5vbldvcmRDaGFyYWN0ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBtYWtlIGEgYmVzdCBlZmZvcnQgdG8gcGljayBhIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgLy8gZm9yIGFuIG9wdGlvbiBiYXNlZCBvbiBuYW1lIGFuZCB0eXBlLlxuICAgICAgICBmdW5jdGlvbiBkZWZhdWx0VmFsdWUoa2V5KSB7XG4gICAgICAgICAgICBpZiAoIWNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmJvb2xzKSAmJlxuICAgICAgICAgICAgICAgICFjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5jb3VudHMpICYmXG4gICAgICAgICAgICAgICAgYCR7a2V5fWAgaW4gZGVmYXVsdHMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVmYXVsdHNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Rm9yVHlwZShndWVzc1R5cGUoa2V5KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmV0dXJuIGEgZGVmYXVsdCB2YWx1ZSwgZ2l2ZW4gdGhlIHR5cGUgb2YgYSBmbGFnLixcbiAgICAgICAgZnVuY3Rpb24gZGVmYXVsdEZvclR5cGUodHlwZSkge1xuICAgICAgICAgICAgY29uc3QgZGVmID0ge1xuICAgICAgICAgICAgICAgIFtEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5CT09MRUFOXTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBbRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuU1RSSU5HXTogJycsXG4gICAgICAgICAgICAgICAgW0RlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5Lk5VTUJFUl06IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICBbRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkuQVJSQVldOiBbXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBkZWZbdHlwZV07XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2l2ZW4gYSBmbGFnLCBlbmZvcmNlIGEgZGVmYXVsdCB0eXBlLlxuICAgICAgICBmdW5jdGlvbiBndWVzc1R5cGUoa2V5KSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkJPT0xFQU47XG4gICAgICAgICAgICBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3Muc3RyaW5ncykpXG4gICAgICAgICAgICAgICAgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LlNUUklORztcbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLm51bWJlcnMpKVxuICAgICAgICAgICAgICAgIHR5cGUgPSBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5OVU1CRVI7XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5ib29scykpXG4gICAgICAgICAgICAgICAgdHlwZSA9IERlZmF1bHRWYWx1ZXNGb3JUeXBlS2V5LkJPT0xFQU47XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVja0FsbEFsaWFzZXMoa2V5LCBmbGFncy5hcnJheXMpKVxuICAgICAgICAgICAgICAgIHR5cGUgPSBEZWZhdWx0VmFsdWVzRm9yVHlwZUtleS5BUlJBWTtcbiAgICAgICAgICAgIHJldHVybiB0eXBlO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG51bSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bSA9PT0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIGNoZWNrIHVzZXIgY29uZmlndXJhdGlvbiBzZXR0aW5ncyBmb3IgaW5jb25zaXN0ZW5jaWVzXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrQ29uZmlndXJhdGlvbigpIHtcbiAgICAgICAgICAgIC8vIGNvdW50IGtleXMgc2hvdWxkIG5vdCBiZSBzZXQgYXMgYXJyYXkvbmFyZ1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoZmxhZ3MuY291bnRzKS5maW5kKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNoZWNrQWxsQWxpYXNlcyhrZXksIGZsYWdzLmFycmF5cykpIHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBFcnJvcihfXygnSW52YWxpZCBjb25maWd1cmF0aW9uOiAlcywgb3B0cy5jb3VudCBleGNsdWRlcyBvcHRzLmFycmF5LicsIGtleSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2tBbGxBbGlhc2VzKGtleSwgZmxhZ3MubmFyZ3MpKSB7XG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gRXJyb3IoX18oJ0ludmFsaWQgY29uZmlndXJhdGlvbjogJXMsIG9wdHMuY291bnQgZXhjbHVkZXMgb3B0cy5uYXJnLicsIGtleSkpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGFsaWFzZXM6IE9iamVjdC5hc3NpZ24oe30sIGZsYWdzLmFsaWFzZXMpLFxuICAgICAgICAgICAgYXJndjogT2JqZWN0LmFzc2lnbihhcmd2UmV0dXJuLCBhcmd2KSxcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZ3VyYXRpb24sXG4gICAgICAgICAgICBkZWZhdWx0ZWQ6IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRlZCksXG4gICAgICAgICAgICBlcnJvcjogZXJyb3IsXG4gICAgICAgICAgICBuZXdBbGlhc2VzOiBPYmplY3QuYXNzaWduKHt9LCBuZXdBbGlhc2VzKVxuICAgICAgICB9O1xuICAgIH1cbn1cbi8vIGlmIGFueSBhbGlhc2VzIHJlZmVyZW5jZSBlYWNoIG90aGVyLCB3ZSBzaG91bGRcbi8vIG1lcmdlIHRoZW0gdG9nZXRoZXIuXG5mdW5jdGlvbiBjb21iaW5lQWxpYXNlcyhhbGlhc2VzKSB7XG4gICAgY29uc3QgYWxpYXNBcnJheXMgPSBbXTtcbiAgICBjb25zdCBjb21iaW5lZCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgbGV0IGNoYW5nZSA9IHRydWU7XG4gICAgLy8gdHVybiBhbGlhcyBsb29rdXAgaGFzaCB7a2V5OiBbJ2FsaWFzMScsICdhbGlhczInXX0gaW50b1xuICAgIC8vIGEgc2ltcGxlIGFycmF5IFsna2V5JywgJ2FsaWFzMScsICdhbGlhczInXVxuICAgIE9iamVjdC5rZXlzKGFsaWFzZXMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBhbGlhc0FycmF5cy5wdXNoKFtdLmNvbmNhdChhbGlhc2VzW2tleV0sIGtleSkpO1xuICAgIH0pO1xuICAgIC8vIGNvbWJpbmUgYXJyYXlzIHVudGlsIHplcm8gY2hhbmdlcyBhcmVcbiAgICAvLyBtYWRlIGluIGFuIGl0ZXJhdGlvbi5cbiAgICB3aGlsZSAoY2hhbmdlKSB7XG4gICAgICAgIGNoYW5nZSA9IGZhbHNlO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFsaWFzQXJyYXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpaSA9IGkgKyAxOyBpaSA8IGFsaWFzQXJyYXlzLmxlbmd0aDsgaWkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGludGVyc2VjdCA9IGFsaWFzQXJyYXlzW2ldLmZpbHRlcihmdW5jdGlvbiAodikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWxpYXNBcnJheXNbaWldLmluZGV4T2YodikgIT09IC0xO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpbnRlcnNlY3QubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGFsaWFzQXJyYXlzW2ldID0gYWxpYXNBcnJheXNbaV0uY29uY2F0KGFsaWFzQXJyYXlzW2lpXSk7XG4gICAgICAgICAgICAgICAgICAgIGFsaWFzQXJyYXlzLnNwbGljZShpaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBtYXAgYXJyYXlzIGJhY2sgdG8gdGhlIGhhc2gtbG9va3VwIChkZS1kdXBlIHdoaWxlXG4gICAgLy8gd2UncmUgYXQgaXQpLlxuICAgIGFsaWFzQXJyYXlzLmZvckVhY2goZnVuY3Rpb24gKGFsaWFzQXJyYXkpIHtcbiAgICAgICAgYWxpYXNBcnJheSA9IGFsaWFzQXJyYXkuZmlsdGVyKGZ1bmN0aW9uICh2LCBpLCBzZWxmKSB7XG4gICAgICAgICAgICByZXR1cm4gc2VsZi5pbmRleE9mKHYpID09PSBpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgbGFzdEFsaWFzID0gYWxpYXNBcnJheS5wb3AoKTtcbiAgICAgICAgaWYgKGxhc3RBbGlhcyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBsYXN0QWxpYXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb21iaW5lZFtsYXN0QWxpYXNdID0gYWxpYXNBcnJheTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBjb21iaW5lZDtcbn1cbi8vIHRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gYSBjb3VudCBpcyBnaXZlbiBhcyBhbiBhcmdcbi8vIGl0IGlzIE5PVCBjYWxsZWQgdG8gc2V0IGEgZGVmYXVsdCB2YWx1ZVxuLy8gdGh1cyB3ZSBjYW4gc3RhcnQgdGhlIGNvdW50IGF0IDEgaW5zdGVhZCBvZiAwXG5mdW5jdGlvbiBpbmNyZW1lbnQob3JpZykge1xuICAgIHJldHVybiBvcmlnICE9PSB1bmRlZmluZWQgPyBvcmlnICsgMSA6IDE7XG59XG4vLyBUT0RPKGJjb2UpOiBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIHlhcmdzLCBzd2l0Y2ggdG9cbi8vIE9iamVjdC5jcmVhdGUobnVsbCkgZm9yIGRvdCBub3RhdGlvbjpcbmZ1bmN0aW9uIHNhbml0aXplS2V5KGtleSkge1xuICAgIGlmIChrZXkgPT09ICdfX3Byb3RvX18nKVxuICAgICAgICByZXR1cm4gJ19fX3Byb3RvX19fJztcbiAgICByZXR1cm4ga2V5O1xufVxuZnVuY3Rpb24gc3RyaXBRdW90ZXModmFsKSB7XG4gICAgcmV0dXJuICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJyAmJlxuICAgICAgICAodmFsWzBdID09PSBcIidcIiB8fCB2YWxbMF0gPT09ICdcIicpICYmXG4gICAgICAgIHZhbFt2YWwubGVuZ3RoIC0gMV0gPT09IHZhbFswXSlcbiAgICAgICAgPyB2YWwuc3Vic3RyaW5nKDEsIHZhbC5sZW5ndGggLSAxKVxuICAgICAgICA6IHZhbDtcbn1cbiIsIi8qKlxuICogQGZpbGVvdmVydmlldyBNYWluIGVudHJ5cG9pbnQgZm9yIGxpYnJhcmllcyB1c2luZyB5YXJncy1wYXJzZXIgaW4gTm9kZS5qc1xuICpcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTYsIENvbnRyaWJ1dG9yc1xuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IElTQ1xuICovXG52YXIgX2EsIF9iLCBfYztcbi8qIGVzbGludC1kaXNhYmxlIG4vbm8tdW5wdWJsaXNoZWQtaW1wb3J0ICovXG5pbXBvcnQgeyBmb3JtYXQgfSBmcm9tICd1dGlsJztcbmltcG9ydCB7IG5vcm1hbGl6ZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgY2FtZWxDYXNlLCBkZWNhbWVsaXplLCBsb29rc0xpa2VOdW1iZXIgfSBmcm9tICcuL3N0cmluZy11dGlscy5qcyc7XG5pbXBvcnQgeyBZYXJnc1BhcnNlciB9IGZyb20gJy4veWFyZ3MtcGFyc2VyLmpzJztcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGNyZWF0ZVJlcXVpcmUgfSBmcm9tICdub2RlOm1vZHVsZSc7XG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3lhcmdzL3lhcmdzLXBhcnNlciNzdXBwb3J0ZWQtbm9kZWpzLXZlcnNpb25zIGZvciBvdXJcbi8vIHZlcnNpb24gc3VwcG9ydCBwb2xpY3kuIFRoZSBZQVJHU19NSU5fTk9ERV9WRVJTSU9OIGlzIHVzZWQgZm9yIHRlc3Rpbmcgb25seS5cbmNvbnN0IG1pbk5vZGVWZXJzaW9uID0gKHByb2Nlc3MgJiYgcHJvY2Vzcy5lbnYgJiYgcHJvY2Vzcy5lbnYuWUFSR1NfTUlOX05PREVfVkVSU0lPTilcbiAgICA/IE51bWJlcihwcm9jZXNzLmVudi5ZQVJHU19NSU5fTk9ERV9WRVJTSU9OKVxuICAgIDogMjA7XG5jb25zdCBub2RlVmVyc2lvbiA9IChfYiA9IChfYSA9IHByb2Nlc3MgPT09IG51bGwgfHwgcHJvY2VzcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJvY2Vzcy52ZXJzaW9ucykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5vZGUpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IChfYyA9IHByb2Nlc3MgPT09IG51bGwgfHwgcHJvY2VzcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcHJvY2Vzcy52ZXJzaW9uKSA9PT0gbnVsbCB8fCBfYyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Muc2xpY2UoMSk7XG5pZiAobm9kZVZlcnNpb24pIHtcbiAgICBjb25zdCBtYWpvciA9IE51bWJlcihub2RlVmVyc2lvbi5tYXRjaCgvXihbXi5dKykvKVsxXSk7XG4gICAgaWYgKG1ham9yIDwgbWluTm9kZVZlcnNpb24pIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoYHlhcmdzIHBhcnNlciBzdXBwb3J0cyBhIG1pbmltdW0gTm9kZS5qcyB2ZXJzaW9uIG9mICR7bWluTm9kZVZlcnNpb259LiBSZWFkIG91ciB2ZXJzaW9uIHN1cHBvcnQgcG9saWN5OiBodHRwczovL2dpdGh1Yi5jb20veWFyZ3MveWFyZ3MtcGFyc2VyI3N1cHBvcnRlZC1ub2RlanMtdmVyc2lvbnNgKTtcbiAgICB9XG59XG4vLyBDcmVhdGVzIGEgeWFyZ3MtcGFyc2VyIGluc3RhbmNlIHVzaW5nIE5vZGUuanMgc3RhbmRhcmQgbGlicmFyaWVzOlxuY29uc3QgZW52ID0gcHJvY2VzcyA/IHByb2Nlc3MuZW52IDoge307XG5jb25zdCByZXF1aXJlID0gY3JlYXRlUmVxdWlyZSA/IGNyZWF0ZVJlcXVpcmUoaW1wb3J0Lm1ldGEudXJsKSA6IHVuZGVmaW5lZDtcbmNvbnN0IHBhcnNlciA9IG5ldyBZYXJnc1BhcnNlcih7XG4gICAgY3dkOiBwcm9jZXNzLmN3ZCxcbiAgICBlbnY6ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGVudjtcbiAgICB9LFxuICAgIGZvcm1hdCxcbiAgICBub3JtYWxpemUsXG4gICAgcmVzb2x2ZSxcbiAgICByZXF1aXJlOiAocGF0aCkgPT4ge1xuICAgICAgICBpZiAodHlwZW9mIHJlcXVpcmUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVxdWlyZShwYXRoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChwYXRoLm1hdGNoKC9cXC5qc29uJC8pKSB7XG4gICAgICAgICAgICAvLyBBZGRyZXNzZXM6IGh0dHBzOi8vZ2l0aHViLmNvbS95YXJncy95YXJncy9pc3N1ZXMvMjA0MFxuICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKHBhdGgsICd1dGY4JykpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgRXJyb3IoJ29ubHkgLmpzb24gY29uZmlnIGZpbGVzIGFyZSBzdXBwb3J0ZWQgaW4gRVNNJyk7XG4gICAgICAgIH1cbiAgICB9XG59KTtcbmNvbnN0IHlhcmdzUGFyc2VyID0gZnVuY3Rpb24gUGFyc2VyKGFyZ3MsIG9wdHMpIHtcbiAgICBjb25zdCByZXN1bHQgPSBwYXJzZXIucGFyc2UoYXJncy5zbGljZSgpLCBvcHRzKTtcbiAgICByZXR1cm4gcmVzdWx0LmFyZ3Y7XG59O1xueWFyZ3NQYXJzZXIuZGV0YWlsZWQgPSBmdW5jdGlvbiAoYXJncywgb3B0cykge1xuICAgIHJldHVybiBwYXJzZXIucGFyc2UoYXJncy5zbGljZSgpLCBvcHRzKTtcbn07XG55YXJnc1BhcnNlci5jYW1lbENhc2UgPSBjYW1lbENhc2U7XG55YXJnc1BhcnNlci5kZWNhbWVsaXplID0gZGVjYW1lbGl6ZTtcbnlhcmdzUGFyc2VyLmxvb2tzTGlrZU51bWJlciA9IGxvb2tzTGlrZU51bWJlcjtcbmV4cG9ydCBkZWZhdWx0IHlhcmdzUGFyc2VyO1xuLy8gc3BlY2lhbCBzeW50YXggdG8gYWxsb3cgdW5xdWFsaWZpZWQgZGVmYXVsdCBleHBvcnQgZnJvbSBDb21tb25KU1xuZXhwb3J0IHsgeWFyZ3NQYXJzZXIgYXMgJ21vZHVsZS5leHBvcnRzJyB9O1xuIiwiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IChjKSAyMDE2LCBDb250cmlidXRvcnNcbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBJU0NcbiAqL1xuLy8gdGFrZSBhbiB1bi1zcGxpdCBhcmd2IHN0cmluZyBhbmQgdG9rZW5pemUgaXQuXG5leHBvcnQgZnVuY3Rpb24gdG9rZW5pemVBcmdTdHJpbmcoYXJnU3RyaW5nKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnU3RyaW5nKSkge1xuICAgICAgICByZXR1cm4gYXJnU3RyaW5nLm1hcChlID0+IHR5cGVvZiBlICE9PSAnc3RyaW5nJyA/IGUgKyAnJyA6IGUpO1xuICAgIH1cbiAgICBhcmdTdHJpbmcgPSBhcmdTdHJpbmcudHJpbSgpO1xuICAgIGxldCBpID0gMDtcbiAgICBsZXQgcHJldkMgPSBudWxsO1xuICAgIGxldCBjID0gbnVsbDtcbiAgICBsZXQgb3BlbmluZyA9IG51bGw7XG4gICAgY29uc3QgYXJncyA9IFtdO1xuICAgIGZvciAobGV0IGlpID0gMDsgaWkgPCBhcmdTdHJpbmcubGVuZ3RoOyBpaSsrKSB7XG4gICAgICAgIHByZXZDID0gYztcbiAgICAgICAgYyA9IGFyZ1N0cmluZy5jaGFyQXQoaWkpO1xuICAgICAgICAvLyBzcGxpdCBvbiBzcGFjZXMgdW5sZXNzIHdlJ3JlIGluIHF1b3Rlcy5cbiAgICAgICAgaWYgKGMgPT09ICcgJyAmJiAhb3BlbmluZykge1xuICAgICAgICAgICAgaWYgKCEocHJldkMgPT09ICcgJykpIHtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBkb24ndCBzcGxpdCB0aGUgc3RyaW5nIGlmIHdlJ3JlIGluIG1hdGNoaW5nXG4gICAgICAgIC8vIG9wZW5pbmcgb3IgY2xvc2luZyBzaW5nbGUgYW5kIGRvdWJsZSBxdW90ZXMuXG4gICAgICAgIGlmIChjID09PSBvcGVuaW5nKSB7XG4gICAgICAgICAgICBvcGVuaW5nID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoYyA9PT0gXCInXCIgfHwgYyA9PT0gJ1wiJykgJiYgIW9wZW5pbmcpIHtcbiAgICAgICAgICAgIG9wZW5pbmcgPSBjO1xuICAgICAgICB9XG4gICAgICAgIGlmICghYXJnc1tpXSlcbiAgICAgICAgICAgIGFyZ3NbaV0gPSAnJztcbiAgICAgICAgYXJnc1tpXSArPSBjO1xuICAgIH1cbiAgICByZXR1cm4gYXJncztcbn1cbiIsImZ1bmN0aW9uIGdldFByb2Nlc3NBcmd2QmluSW5kZXgoKSB7XG4gICAgaWYgKGlzQnVuZGxlZEVsZWN0cm9uQXBwKCkpXG4gICAgICAgIHJldHVybiAwO1xuICAgIHJldHVybiAxO1xufVxuZnVuY3Rpb24gaXNCdW5kbGVkRWxlY3Ryb25BcHAoKSB7XG4gICAgcmV0dXJuIGlzRWxlY3Ryb25BcHAoKSAmJiAhcHJvY2Vzcy5kZWZhdWx0QXBwO1xufVxuZnVuY3Rpb24gaXNFbGVjdHJvbkFwcCgpIHtcbiAgICByZXR1cm4gISFwcm9jZXNzLnZlcnNpb25zLmVsZWN0cm9uO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGhpZGVCaW4oYXJndikge1xuICAgIHJldHVybiBhcmd2LnNsaWNlKGdldFByb2Nlc3NBcmd2QmluSW5kZXgoKSArIDEpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFByb2Nlc3NBcmd2QmluKCkge1xuICAgIHJldHVybiBwcm9jZXNzLmFyZ3ZbZ2V0UHJvY2Vzc0FyZ3ZCaW5JbmRleCgpXTtcbn1cbiIsImltcG9ydCB7IHJlYWRGaWxlU3luYywgc3RhdFN5bmMsIHdyaXRlRmlsZSB9IGZyb20gJ2ZzJztcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ3V0aWwnO1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuZXhwb3J0IGRlZmF1bHQge1xuICAgIGZzOiB7XG4gICAgICAgIHJlYWRGaWxlU3luYyxcbiAgICAgICAgd3JpdGVGaWxlXG4gICAgfSxcbiAgICBmb3JtYXQsXG4gICAgcmVzb2x2ZSxcbiAgICBleGlzdHM6IChmaWxlKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhdFN5bmMoZmlsZSkuaXNGaWxlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxufTtcbiIsImxldCBzaGltO1xuY2xhc3MgWTE4TiB7XG4gICAgY29uc3RydWN0b3Iob3B0cykge1xuICAgICAgICAvLyBjb25maWd1cmFibGUgb3B0aW9ucy5cbiAgICAgICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgICAgIHRoaXMuZGlyZWN0b3J5ID0gb3B0cy5kaXJlY3RvcnkgfHwgJy4vbG9jYWxlcyc7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsZXMgPSB0eXBlb2Ygb3B0cy51cGRhdGVGaWxlcyA9PT0gJ2Jvb2xlYW4nID8gb3B0cy51cGRhdGVGaWxlcyA6IHRydWU7XG4gICAgICAgIHRoaXMubG9jYWxlID0gb3B0cy5sb2NhbGUgfHwgJ2VuJztcbiAgICAgICAgdGhpcy5mYWxsYmFja1RvTGFuZ3VhZ2UgPSB0eXBlb2Ygb3B0cy5mYWxsYmFja1RvTGFuZ3VhZ2UgPT09ICdib29sZWFuJyA/IG9wdHMuZmFsbGJhY2tUb0xhbmd1YWdlIDogdHJ1ZTtcbiAgICAgICAgLy8gaW50ZXJuYWwgc3R1ZmYuXG4gICAgICAgIHRoaXMuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICB0aGlzLndyaXRlUXVldWUgPSBbXTtcbiAgICB9XG4gICAgX18oLi4uYXJncykge1xuICAgICAgICBpZiAodHlwZW9mIGFyZ3VtZW50c1swXSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl90YWdnZWRMaXRlcmFsKGFyZ3VtZW50c1swXSwgLi4uYXJndW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdHIgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgIGxldCBjYiA9IGZ1bmN0aW9uICgpIHsgfTsgLy8gc3RhcnQgd2l0aCBub29wLlxuICAgICAgICBpZiAodHlwZW9mIGFyZ3NbYXJncy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJylcbiAgICAgICAgICAgIGNiID0gYXJncy5wb3AoKTtcbiAgICAgICAgY2IgPSBjYiB8fCBmdW5jdGlvbiAoKSB7IH07IC8vIG5vb3AuXG4gICAgICAgIGlmICghdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV0pXG4gICAgICAgICAgICB0aGlzLl9yZWFkTG9jYWxlRmlsZSgpO1xuICAgICAgICAvLyB3ZSd2ZSBvYnNlcnZlZCBhIG5ldyBzdHJpbmcsIHVwZGF0ZSB0aGUgbGFuZ3VhZ2UgZmlsZS5cbiAgICAgICAgaWYgKCF0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzdHJdICYmIHRoaXMudXBkYXRlRmlsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3N0cl0gPSBzdHI7XG4gICAgICAgICAgICAvLyBpbmNsdWRlIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBhbmQgbG9jYWxlLFxuICAgICAgICAgICAgLy8gc2luY2UgdGhlc2UgdmFsdWVzIGNvdWxkIGNoYW5nZSBiZWZvcmUgdGhlXG4gICAgICAgICAgICAvLyB3cml0ZSBpcyBwZXJmb3JtZWQuXG4gICAgICAgICAgICB0aGlzLl9lbnF1ZXVlV3JpdGUoe1xuICAgICAgICAgICAgICAgIGRpcmVjdG9yeTogdGhpcy5kaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgbG9jYWxlOiB0aGlzLmxvY2FsZSxcbiAgICAgICAgICAgICAgICBjYlxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjYigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzaGltLmZvcm1hdC5hcHBseShzaGltLmZvcm1hdCwgW3RoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3N0cl0gfHwgc3RyXS5jb25jYXQoYXJncykpO1xuICAgIH1cbiAgICBfX24oKSB7XG4gICAgICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgICBjb25zdCBzaW5ndWxhciA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgY29uc3QgcGx1cmFsID0gYXJncy5zaGlmdCgpO1xuICAgICAgICBjb25zdCBxdWFudGl0eSA9IGFyZ3Muc2hpZnQoKTtcbiAgICAgICAgbGV0IGNiID0gZnVuY3Rpb24gKCkgeyB9OyAvLyBzdGFydCB3aXRoIG5vb3AuXG4gICAgICAgIGlmICh0eXBlb2YgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgY2IgPSBhcmdzLnBvcCgpO1xuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdKVxuICAgICAgICAgICAgdGhpcy5fcmVhZExvY2FsZUZpbGUoKTtcbiAgICAgICAgbGV0IHN0ciA9IHF1YW50aXR5ID09PSAxID8gc2luZ3VsYXIgOiBwbHVyYWw7XG4gICAgICAgIGlmICh0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzaW5ndWxhcl0pIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1bc2luZ3VsYXJdO1xuICAgICAgICAgICAgc3RyID0gZW50cnlbcXVhbnRpdHkgPT09IDEgPyAnb25lJyA6ICdvdGhlciddO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdlJ3ZlIG9ic2VydmVkIGEgbmV3IHN0cmluZywgdXBkYXRlIHRoZSBsYW5ndWFnZSBmaWxlLlxuICAgICAgICBpZiAoIXRoaXMuY2FjaGVbdGhpcy5sb2NhbGVdW3Npbmd1bGFyXSAmJiB0aGlzLnVwZGF0ZUZpbGVzKSB7XG4gICAgICAgICAgICB0aGlzLmNhY2hlW3RoaXMubG9jYWxlXVtzaW5ndWxhcl0gPSB7XG4gICAgICAgICAgICAgICAgb25lOiBzaW5ndWxhcixcbiAgICAgICAgICAgICAgICBvdGhlcjogcGx1cmFsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgLy8gaW5jbHVkZSB0aGUgY3VycmVudCBkaXJlY3RvcnkgYW5kIGxvY2FsZSxcbiAgICAgICAgICAgIC8vIHNpbmNlIHRoZXNlIHZhbHVlcyBjb3VsZCBjaGFuZ2UgYmVmb3JlIHRoZVxuICAgICAgICAgICAgLy8gd3JpdGUgaXMgcGVyZm9ybWVkLlxuICAgICAgICAgICAgdGhpcy5fZW5xdWV1ZVdyaXRlKHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rvcnk6IHRoaXMuZGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgIGxvY2FsZTogdGhpcy5sb2NhbGUsXG4gICAgICAgICAgICAgICAgY2JcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY2IoKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiBhICVkIHBsYWNlaG9sZGVyIGlzIHByb3ZpZGVkLCBhZGQgcXVhbnRpdHlcbiAgICAgICAgLy8gdG8gdGhlIGFyZ3VtZW50cyBleHBhbmRlZCBieSB1dGlsLmZvcm1hdC5cbiAgICAgICAgY29uc3QgdmFsdWVzID0gW3N0cl07XG4gICAgICAgIGlmICh+c3RyLmluZGV4T2YoJyVkJykpXG4gICAgICAgICAgICB2YWx1ZXMucHVzaChxdWFudGl0eSk7XG4gICAgICAgIHJldHVybiBzaGltLmZvcm1hdC5hcHBseShzaGltLmZvcm1hdCwgdmFsdWVzLmNvbmNhdChhcmdzKSk7XG4gICAgfVxuICAgIHNldExvY2FsZShsb2NhbGUpIHtcbiAgICAgICAgdGhpcy5sb2NhbGUgPSBsb2NhbGU7XG4gICAgfVxuICAgIGdldExvY2FsZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubG9jYWxlO1xuICAgIH1cbiAgICB1cGRhdGVMb2NhbGUob2JqKSB7XG4gICAgICAgIGlmICghdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV0pXG4gICAgICAgICAgICB0aGlzLl9yZWFkTG9jYWxlRmlsZSgpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jYWNoZVt0aGlzLmxvY2FsZV1ba2V5XSA9IG9ialtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIF90YWdnZWRMaXRlcmFsKHBhcnRzLCAuLi5hcmdzKSB7XG4gICAgICAgIGxldCBzdHIgPSAnJztcbiAgICAgICAgcGFydHMuZm9yRWFjaChmdW5jdGlvbiAocGFydCwgaSkge1xuICAgICAgICAgICAgY29uc3QgYXJnID0gYXJnc1tpICsgMV07XG4gICAgICAgICAgICBzdHIgKz0gcGFydDtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgYXJnICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgICAgIHN0ciArPSAnJXMnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX18uYXBwbHkodGhpcywgW3N0cl0uY29uY2F0KFtdLnNsaWNlLmNhbGwoYXJncywgMSkpKTtcbiAgICB9XG4gICAgX2VucXVldWVXcml0ZSh3b3JrKSB7XG4gICAgICAgIHRoaXMud3JpdGVRdWV1ZS5wdXNoKHdvcmspO1xuICAgICAgICBpZiAodGhpcy53cml0ZVF1ZXVlLmxlbmd0aCA9PT0gMSlcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NXcml0ZVF1ZXVlKCk7XG4gICAgfVxuICAgIF9wcm9jZXNzV3JpdGVRdWV1ZSgpIHtcbiAgICAgICAgY29uc3QgX3RoaXMgPSB0aGlzO1xuICAgICAgICBjb25zdCB3b3JrID0gdGhpcy53cml0ZVF1ZXVlWzBdO1xuICAgICAgICAvLyBkZXN0cnVjdHVyZSB0aGUgZW5xdWV1ZWQgd29yay5cbiAgICAgICAgY29uc3QgZGlyZWN0b3J5ID0gd29yay5kaXJlY3Rvcnk7XG4gICAgICAgIGNvbnN0IGxvY2FsZSA9IHdvcmsubG9jYWxlO1xuICAgICAgICBjb25zdCBjYiA9IHdvcmsuY2I7XG4gICAgICAgIGNvbnN0IGxhbmd1YWdlRmlsZSA9IHRoaXMuX3Jlc29sdmVMb2NhbGVGaWxlKGRpcmVjdG9yeSwgbG9jYWxlKTtcbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZExvY2FsZSA9IEpTT04uc3RyaW5naWZ5KHRoaXMuY2FjaGVbbG9jYWxlXSwgbnVsbCwgMik7XG4gICAgICAgIHNoaW0uZnMud3JpdGVGaWxlKGxhbmd1YWdlRmlsZSwgc2VyaWFsaXplZExvY2FsZSwgJ3V0Zi04JywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgX3RoaXMud3JpdGVRdWV1ZS5zaGlmdCgpO1xuICAgICAgICAgICAgaWYgKF90aGlzLndyaXRlUXVldWUubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICBfdGhpcy5fcHJvY2Vzc1dyaXRlUXVldWUoKTtcbiAgICAgICAgICAgIGNiKGVycik7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfcmVhZExvY2FsZUZpbGUoKSB7XG4gICAgICAgIGxldCBsb2NhbGVMb29rdXAgPSB7fTtcbiAgICAgICAgY29uc3QgbGFuZ3VhZ2VGaWxlID0gdGhpcy5fcmVzb2x2ZUxvY2FsZUZpbGUodGhpcy5kaXJlY3RvcnksIHRoaXMubG9jYWxlKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gdXNpbmcgYSBidW5kbGVyIHN1Y2ggYXMgd2VicGFjaywgcmVhZEZpbGVTeW5jIG1heSBub3QgYmUgZGVmaW5lZDpcbiAgICAgICAgICAgIGlmIChzaGltLmZzLnJlYWRGaWxlU3luYykge1xuICAgICAgICAgICAgICAgIGxvY2FsZUxvb2t1cCA9IEpTT04ucGFyc2Uoc2hpbS5mcy5yZWFkRmlsZVN5bmMobGFuZ3VhZ2VGaWxlLCAndXRmLTgnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICAgICAgICAgICAgZXJyLm1lc3NhZ2UgPSAnc3ludGF4IGVycm9yIGluICcgKyBsYW5ndWFnZUZpbGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKVxuICAgICAgICAgICAgICAgIGxvY2FsZUxvb2t1cCA9IHt9O1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhY2hlW3RoaXMubG9jYWxlXSA9IGxvY2FsZUxvb2t1cDtcbiAgICB9XG4gICAgX3Jlc29sdmVMb2NhbGVGaWxlKGRpcmVjdG9yeSwgbG9jYWxlKSB7XG4gICAgICAgIGxldCBmaWxlID0gc2hpbS5yZXNvbHZlKGRpcmVjdG9yeSwgJy4vJywgbG9jYWxlICsgJy5qc29uJyk7XG4gICAgICAgIGlmICh0aGlzLmZhbGxiYWNrVG9MYW5ndWFnZSAmJiAhdGhpcy5fZmlsZUV4aXN0c1N5bmMoZmlsZSkgJiYgfmxvY2FsZS5sYXN0SW5kZXhPZignXycpKSB7XG4gICAgICAgICAgICAvLyBhdHRlbXB0IGZhbGxiYWNrIHRvIGxhbmd1YWdlIG9ubHlcbiAgICAgICAgICAgIGNvbnN0IGxhbmd1YWdlRmlsZSA9IHNoaW0ucmVzb2x2ZShkaXJlY3RvcnksICcuLycsIGxvY2FsZS5zcGxpdCgnXycpWzBdICsgJy5qc29uJyk7XG4gICAgICAgICAgICBpZiAodGhpcy5fZmlsZUV4aXN0c1N5bmMobGFuZ3VhZ2VGaWxlKSlcbiAgICAgICAgICAgICAgICBmaWxlID0gbGFuZ3VhZ2VGaWxlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmaWxlO1xuICAgIH1cbiAgICBfZmlsZUV4aXN0c1N5bmMoZmlsZSkge1xuICAgICAgICByZXR1cm4gc2hpbS5leGlzdHMoZmlsZSk7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIHkxOG4ob3B0cywgX3NoaW0pIHtcbiAgICBzaGltID0gX3NoaW07XG4gICAgY29uc3QgeTE4biA9IG5ldyBZMThOKG9wdHMpO1xuICAgIHJldHVybiB7XG4gICAgICAgIF9fOiB5MThuLl9fLmJpbmQoeTE4biksXG4gICAgICAgIF9fbjogeTE4bi5fX24uYmluZCh5MThuKSxcbiAgICAgICAgc2V0TG9jYWxlOiB5MThuLnNldExvY2FsZS5iaW5kKHkxOG4pLFxuICAgICAgICBnZXRMb2NhbGU6IHkxOG4uZ2V0TG9jYWxlLmJpbmQoeTE4biksXG4gICAgICAgIHVwZGF0ZUxvY2FsZTogeTE4bi51cGRhdGVMb2NhbGUuYmluZCh5MThuKSxcbiAgICAgICAgbG9jYWxlOiB5MThuLmxvY2FsZVxuICAgIH07XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcbi8vIENhbGwgdGhpcyBmdW5jdGlvbiBpbiBhIGFub3RoZXIgZnVuY3Rpb24gdG8gZmluZCBvdXQgdGhlIGZpbGUgZnJvbVxuLy8gd2hpY2ggdGhhdCBmdW5jdGlvbiB3YXMgY2FsbGVkIGZyb20uIChJbnNwZWN0cyB0aGUgdjggc3RhY2sgdHJhY2UpXG4vL1xuLy8gSW5zcGlyZWQgYnkgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xMzIyNzQ4OVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRDYWxsZXJGaWxlKHBvc2l0aW9uKSB7XG4gICAgaWYgKHBvc2l0aW9uID09PSB2b2lkIDApIHsgcG9zaXRpb24gPSAyOyB9XG4gICAgaWYgKHBvc2l0aW9uID49IEVycm9yLnN0YWNrVHJhY2VMaW1pdCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdnZXRDYWxsZXJGaWxlKHBvc2l0aW9uKSByZXF1aXJlcyBwb3NpdGlvbiBiZSBsZXNzIHRoZW4gRXJyb3Iuc3RhY2tUcmFjZUxpbWl0IGJ1dCBwb3NpdGlvbiB3YXM6IGAnICsgcG9zaXRpb24gKyAnYCBhbmQgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0IHdhczogYCcgKyBFcnJvci5zdGFja1RyYWNlTGltaXQgKyAnYCcpO1xuICAgIH1cbiAgICB2YXIgb2xkUHJlcGFyZVN0YWNrVHJhY2UgPSBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZTtcbiAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IGZ1bmN0aW9uIChfLCBzdGFjaykgeyByZXR1cm4gc3RhY2s7IH07XG4gICAgdmFyIHN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gICAgRXJyb3IucHJlcGFyZVN0YWNrVHJhY2UgPSBvbGRQcmVwYXJlU3RhY2tUcmFjZTtcbiAgICBpZiAoc3RhY2sgIT09IG51bGwgJiYgdHlwZW9mIHN0YWNrID09PSAnb2JqZWN0Jykge1xuICAgICAgICAvLyBzdGFja1swXSBob2xkcyB0aGlzIGZpbGVcbiAgICAgICAgLy8gc3RhY2tbMV0gaG9sZHMgd2hlcmUgdGhpcyBmdW5jdGlvbiB3YXMgY2FsbGVkXG4gICAgICAgIC8vIHN0YWNrWzJdIGhvbGRzIHRoZSBmaWxlIHdlJ3JlIGludGVyZXN0ZWQgaW5cbiAgICAgICAgcmV0dXJuIHN0YWNrW3Bvc2l0aW9uXSA/IHN0YWNrW3Bvc2l0aW9uXS5nZXRGaWxlTmFtZSgpIDogdW5kZWZpbmVkO1xuICAgIH1cbn07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCIndXNlIHN0cmljdCdcblxuaW1wb3J0IHsgbm90U3RyaWN0RXF1YWwsIHN0cmljdEVxdWFsIH0gZnJvbSAnYXNzZXJ0J1xuaW1wb3J0IGNsaXVpIGZyb20gJ2NsaXVpJ1xuaW1wb3J0IGVzY2FsYWRlIGZyb20gJ2VzY2FsYWRlL3N5bmMnXG5pbXBvcnQgeyBpbnNwZWN0IH0gZnJvbSAndXRpbCdcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICd1cmwnO1xuaW1wb3J0IFBhcnNlciBmcm9tICd5YXJncy1wYXJzZXInXG5pbXBvcnQgeyBiYXNlbmFtZSwgZGlybmFtZSwgZXh0bmFtZSwgcmVsYXRpdmUsIHJlc29sdmUsIGpvaW4gfSBmcm9tICdwYXRoJ1xuaW1wb3J0IHsgZ2V0UHJvY2Vzc0FyZ3ZCaW4gfSBmcm9tICcuLi8uLi9idWlsZC9saWIvdXRpbHMvcHJvY2Vzcy1hcmd2LmpzJ1xuaW1wb3J0IHN0cmluZ1dpZHRoIGZyb20gJ3N0cmluZy13aWR0aCc7XG5pbXBvcnQgeTE4biBmcm9tICd5MThuJ1xuaW1wb3J0IHsgY3JlYXRlUmVxdWlyZSB9IGZyb20gJ25vZGU6bW9kdWxlJztcbmltcG9ydCBnZXRDYWxsZXJGaWxlIGZyb20gJ2dldC1jYWxsZXItZmlsZSc7XG5pbXBvcnQgeyByZWFkRmlsZVN5bmMsIHJlYWRkaXJTeW5jIH0gZnJvbSAnbm9kZTpmcydcblxuY29uc3QgX19kaXJuYW1lID0gZmlsZVVSTFRvUGF0aChpbXBvcnQubWV0YS51cmwpO1xuY29uc3QgbWFpbkZpbGVuYW1lID0gX19kaXJuYW1lLnN1YnN0cmluZygwLCBfX2Rpcm5hbWUubGFzdEluZGV4T2YoJ25vZGVfbW9kdWxlcycpKTtcbmNvbnN0IHJlcXVpcmUgPSBjcmVhdGVSZXF1aXJlKGltcG9ydC5tZXRhLnVybCk7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgYXNzZXJ0OiB7XG4gICAgbm90U3RyaWN0RXF1YWwsXG4gICAgc3RyaWN0RXF1YWxcbiAgfSxcbiAgY2xpdWksXG4gIGZpbmRVcDogZXNjYWxhZGUsXG4gIGdldEVudjogKGtleSkgPT4ge1xuICAgIHJldHVybiBwcm9jZXNzLmVudltrZXldXG4gIH0sXG4gIGluc3BlY3QsXG4gIGdldFByb2Nlc3NBcmd2QmluLFxuICBtYWluRmlsZW5hbWU6IG1haW5GaWxlbmFtZSB8fCBwcm9jZXNzLmN3ZCgpLFxuICBQYXJzZXIsXG4gIHBhdGg6IHtcbiAgICBiYXNlbmFtZSxcbiAgICBkaXJuYW1lLFxuICAgIGV4dG5hbWUsXG4gICAgcmVsYXRpdmUsXG4gICAgcmVzb2x2ZSxcbiAgICBqb2luXG4gIH0sXG4gIHByb2Nlc3M6IHtcbiAgICBhcmd2OiAoKSA9PiBwcm9jZXNzLmFyZ3YsXG4gICAgY3dkOiBwcm9jZXNzLmN3ZCxcbiAgICBlbWl0V2FybmluZzogKHdhcm5pbmcsIHR5cGUpID0+IHByb2Nlc3MuZW1pdFdhcm5pbmcod2FybmluZywgdHlwZSksXG4gICAgZXhlY1BhdGg6ICgpID0+IHByb2Nlc3MuZXhlY1BhdGgsXG4gICAgZXhpdDogKGNvZGUpID0+IHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuL25vLXByb2Nlc3MtZXhpdFxuICAgICAgcHJvY2Vzcy5leGl0KGNvZGUpO1xuICAgIH0sXG4gICAgbmV4dFRpY2s6IHByb2Nlc3MubmV4dFRpY2ssXG4gICAgc3RkQ29sdW1uczogdHlwZW9mIHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgIT09ICd1bmRlZmluZWQnID8gcHJvY2Vzcy5zdGRvdXQuY29sdW1ucyA6IG51bGxcbiAgfSxcbiAgcmVhZEZpbGVTeW5jLFxuICByZWFkZGlyU3luYyxcbiAgcmVxdWlyZSxcbiAgZ2V0Q2FsbGVyRmlsZTogKCkgPT4ge1xuICAgIGNvbnN0IGNhbGxlckZpbGUgPSBnZXRDYWxsZXJGaWxlKDMpO1xuICAgIHJldHVybiBjYWxsZXJGaWxlLm1hdGNoKC9eZmlsZTpcXC9cXC8vKSA/IGZpbGVVUkxUb1BhdGgoY2FsbGVyRmlsZSkgOiBjYWxsZXJGaWxlO1xuICB9LFxuICBzdHJpbmdXaWR0aCxcbiAgeTE4bjogeTE4bih7XG4gICAgZGlyZWN0b3J5OiByZXNvbHZlKF9fZGlybmFtZSwgJy4uLy4uLy4uL2xvY2FsZXMnKSxcbiAgICB1cGRhdGVGaWxlczogZmFsc2VcbiAgfSlcbn1cbiIsImltcG9ydCBzaGltIGZyb20gJy4vYnVpbGQvbGliL3BsYXRmb3JtLXNoaW1zL25vZGUuanMnXG5pbXBvcnQgeyB5MThuIGFzIF95MThuIH0gZnJvbSAnLi9idWlsZC9saWIvaW5kZXguanMnXG5cbmNvbnN0IHkxOG4gPSAob3B0cykgPT4ge1xuICByZXR1cm4gX3kxOG4ob3B0cywgc2hpbSlcbn1cblxuZXhwb3J0IGRlZmF1bHQgeTE4blxuIiwiLy8gQm9vdHN0cmFwIGNsaXVpIHdpdGggQ29tbW9uSlMgZGVwZW5kZW5jaWVzOlxuaW1wb3J0IHsgY2xpdWkgfSBmcm9tICcuL2J1aWxkL2xpYi9pbmRleC5qcydcbmltcG9ydCBzdHJpbmdXaWR0aCBmcm9tICdzdHJpbmctd2lkdGgnXG5pbXBvcnQgc3RyaXBBbnNpIGZyb20gJ3N0cmlwLWFuc2knXG5pbXBvcnQgd3JhcEFuc2kgZnJvbSAnd3JhcC1hbnNpJ1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1aSAob3B0cykge1xuICByZXR1cm4gY2xpdWkob3B0cywge1xuICAgIHN0cmluZ1dpZHRoLFxuICAgIHN0cmlwQW5zaSxcbiAgICB3cmFwOiB3cmFwQW5zaVxuICB9KVxufVxuXG5leHBvcnQge3VpIGFzICdtb2R1bGUuZXhwb3J0cyd9O1xuIiwiaW1wb3J0IHsgZGlybmFtZSwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgcmVhZGRpclN5bmMsIHN0YXRTeW5jIH0gZnJvbSAnZnMnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiAoc3RhcnQsIGNhbGxiYWNrKSB7XG5cdGxldCBkaXIgPSByZXNvbHZlKCcuJywgc3RhcnQpO1xuXHRsZXQgdG1wLCBzdGF0cyA9IHN0YXRTeW5jKGRpcik7XG5cblx0aWYgKCFzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG5cdFx0ZGlyID0gZGlybmFtZShkaXIpO1xuXHR9XG5cblx0d2hpbGUgKHRydWUpIHtcblx0XHR0bXAgPSBjYWxsYmFjayhkaXIsIHJlYWRkaXJTeW5jKGRpcikpO1xuXHRcdGlmICh0bXApIHJldHVybiByZXNvbHZlKGRpciwgdG1wKTtcblx0XHRkaXIgPSBkaXJuYW1lKHRtcCA9IGRpcik7XG5cdFx0aWYgKHRtcCA9PT0gZGlyKSBicmVhaztcblx0fVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGFzc2VydE5vdFN0cmljdEVxdWFsKGFjdHVhbCwgZXhwZWN0ZWQsIHNoaW0sIG1lc3NhZ2UpIHtcbiAgICBzaGltLmFzc2VydC5ub3RTdHJpY3RFcXVhbChhY3R1YWwsIGV4cGVjdGVkLCBtZXNzYWdlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnRTaW5nbGVLZXkoYWN0dWFsLCBzaGltKSB7XG4gICAgc2hpbS5hc3NlcnQuc3RyaWN0RXF1YWwodHlwZW9mIGFjdHVhbCwgJ3N0cmluZycpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIG9iamVjdEtleXMob2JqZWN0KSB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCk7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gaXNQcm9taXNlKG1heWJlUHJvbWlzZSkge1xuICAgIHJldHVybiAoISFtYXliZVByb21pc2UgJiZcbiAgICAgICAgISFtYXliZVByb21pc2UudGhlbiAmJlxuICAgICAgICB0eXBlb2YgbWF5YmVQcm9taXNlLnRoZW4gPT09ICdmdW5jdGlvbicpO1xufVxuIiwiZXhwb3J0IGNsYXNzIFlFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgICBjb25zdHJ1Y3Rvcihtc2cpIHtcbiAgICAgICAgc3VwZXIobXNnIHx8ICd5YXJncyBlcnJvcicpO1xuICAgICAgICB0aGlzLm5hbWUgPSAnWUVycm9yJztcbiAgICAgICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBZRXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQ29tbWFuZChjbWQpIHtcbiAgICBjb25zdCBleHRyYVNwYWNlc1N0cmlwcGVkQ29tbWFuZCA9IGNtZC5yZXBsYWNlKC9cXHN7Mix9L2csICcgJyk7XG4gICAgY29uc3Qgc3BsaXRDb21tYW5kID0gZXh0cmFTcGFjZXNTdHJpcHBlZENvbW1hbmQuc3BsaXQoL1xccysoPyFbXltdKl18W148XSo+KS8pO1xuICAgIGNvbnN0IGJyZWdleCA9IC9cXC4qW1xcXVs8Pl0vZztcbiAgICBjb25zdCBmaXJzdENvbW1hbmQgPSBzcGxpdENvbW1hbmQuc2hpZnQoKTtcbiAgICBpZiAoIWZpcnN0Q29tbWFuZClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBObyBjb21tYW5kIGZvdW5kIGluOiAke2NtZH1gKTtcbiAgICBjb25zdCBwYXJzZWRDb21tYW5kID0ge1xuICAgICAgICBjbWQ6IGZpcnN0Q29tbWFuZC5yZXBsYWNlKGJyZWdleCwgJycpLFxuICAgICAgICBkZW1hbmRlZDogW10sXG4gICAgICAgIG9wdGlvbmFsOiBbXSxcbiAgICB9O1xuICAgIHNwbGl0Q29tbWFuZC5mb3JFYWNoKChjbWQsIGkpID0+IHtcbiAgICAgICAgbGV0IHZhcmlhZGljID0gZmFsc2U7XG4gICAgICAgIGNtZCA9IGNtZC5yZXBsYWNlKC9cXHMvZywgJycpO1xuICAgICAgICBpZiAoL1xcLitbXFxdPl0vLnRlc3QoY21kKSAmJiBpID09PSBzcGxpdENvbW1hbmQubGVuZ3RoIC0gMSlcbiAgICAgICAgICAgIHZhcmlhZGljID0gdHJ1ZTtcbiAgICAgICAgaWYgKC9eXFxbLy50ZXN0KGNtZCkpIHtcbiAgICAgICAgICAgIHBhcnNlZENvbW1hbmQub3B0aW9uYWwucHVzaCh7XG4gICAgICAgICAgICAgICAgY21kOiBjbWQucmVwbGFjZShicmVnZXgsICcnKS5zcGxpdCgnfCcpLFxuICAgICAgICAgICAgICAgIHZhcmlhZGljLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBwYXJzZWRDb21tYW5kLmRlbWFuZGVkLnB1c2goe1xuICAgICAgICAgICAgICAgIGNtZDogY21kLnJlcGxhY2UoYnJlZ2V4LCAnJykuc3BsaXQoJ3wnKSxcbiAgICAgICAgICAgICAgICB2YXJpYWRpYyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHBhcnNlZENvbW1hbmQ7XG59XG4iLCJpbXBvcnQgeyBZRXJyb3IgfSBmcm9tICcuL3llcnJvci5qcyc7XG5pbXBvcnQgeyBwYXJzZUNvbW1hbmQgfSBmcm9tICcuL3BhcnNlLWNvbW1hbmQuanMnO1xuY29uc3QgcG9zaXRpb25OYW1lID0gWydmaXJzdCcsICdzZWNvbmQnLCAndGhpcmQnLCAnZm91cnRoJywgJ2ZpZnRoJywgJ3NpeHRoJ107XG5leHBvcnQgZnVuY3Rpb24gYXJnc2VydChhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgZnVuY3Rpb24gcGFyc2VBcmdzKCkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIGFyZzEgPT09ICdvYmplY3QnXG4gICAgICAgICAgICA/IFt7IGRlbWFuZGVkOiBbXSwgb3B0aW9uYWw6IFtdIH0sIGFyZzEsIGFyZzJdXG4gICAgICAgICAgICA6IFtcbiAgICAgICAgICAgICAgICBwYXJzZUNvbW1hbmQoYGNtZCAke2FyZzF9YCksXG4gICAgICAgICAgICAgICAgYXJnMixcbiAgICAgICAgICAgICAgICBhcmczLFxuICAgICAgICAgICAgXTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgbGV0IHBvc2l0aW9uID0gMDtcbiAgICAgICAgY29uc3QgW3BhcnNlZCwgY2FsbGVyQXJndW1lbnRzLCBfbGVuZ3RoXSA9IHBhcnNlQXJncygpO1xuICAgICAgICBjb25zdCBhcmdzID0gW10uc2xpY2UuY2FsbChjYWxsZXJBcmd1bWVudHMpO1xuICAgICAgICB3aGlsZSAoYXJncy5sZW5ndGggJiYgYXJnc1thcmdzLmxlbmd0aCAtIDFdID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICBhcmdzLnBvcCgpO1xuICAgICAgICBjb25zdCBsZW5ndGggPSBfbGVuZ3RoIHx8IGFyZ3MubGVuZ3RoO1xuICAgICAgICBpZiAobGVuZ3RoIDwgcGFyc2VkLmRlbWFuZGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihgTm90IGVub3VnaCBhcmd1bWVudHMgcHJvdmlkZWQuIEV4cGVjdGVkICR7cGFyc2VkLmRlbWFuZGVkLmxlbmd0aH0gYnV0IHJlY2VpdmVkICR7YXJncy5sZW5ndGh9LmApO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRvdGFsQ29tbWFuZHMgPSBwYXJzZWQuZGVtYW5kZWQubGVuZ3RoICsgcGFyc2VkLm9wdGlvbmFsLmxlbmd0aDtcbiAgICAgICAgaWYgKGxlbmd0aCA+IHRvdGFsQ29tbWFuZHMpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IoYFRvbyBtYW55IGFyZ3VtZW50cyBwcm92aWRlZC4gRXhwZWN0ZWQgbWF4ICR7dG90YWxDb21tYW5kc30gYnV0IHJlY2VpdmVkICR7bGVuZ3RofS5gKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJzZWQuZGVtYW5kZWQuZm9yRWFjaChkZW1hbmRlZCA9PiB7XG4gICAgICAgICAgICBjb25zdCBhcmcgPSBhcmdzLnNoaWZ0KCk7XG4gICAgICAgICAgICBjb25zdCBvYnNlcnZlZFR5cGUgPSBndWVzc1R5cGUoYXJnKTtcbiAgICAgICAgICAgIGNvbnN0IG1hdGNoaW5nVHlwZXMgPSBkZW1hbmRlZC5jbWQuZmlsdGVyKHR5cGUgPT4gdHlwZSA9PT0gb2JzZXJ2ZWRUeXBlIHx8IHR5cGUgPT09ICcqJyk7XG4gICAgICAgICAgICBpZiAobWF0Y2hpbmdUeXBlcy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgYXJndW1lbnRUeXBlRXJyb3Iob2JzZXJ2ZWRUeXBlLCBkZW1hbmRlZC5jbWQsIHBvc2l0aW9uKTtcbiAgICAgICAgICAgIHBvc2l0aW9uICs9IDE7XG4gICAgICAgIH0pO1xuICAgICAgICBwYXJzZWQub3B0aW9uYWwuZm9yRWFjaChvcHRpb25hbCA9PiB7XG4gICAgICAgICAgICBpZiAoYXJncy5sZW5ndGggPT09IDApXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgYXJnID0gYXJncy5zaGlmdCgpO1xuICAgICAgICAgICAgY29uc3Qgb2JzZXJ2ZWRUeXBlID0gZ3Vlc3NUeXBlKGFyZyk7XG4gICAgICAgICAgICBjb25zdCBtYXRjaGluZ1R5cGVzID0gb3B0aW9uYWwuY21kLmZpbHRlcih0eXBlID0+IHR5cGUgPT09IG9ic2VydmVkVHlwZSB8fCB0eXBlID09PSAnKicpO1xuICAgICAgICAgICAgaWYgKG1hdGNoaW5nVHlwZXMubGVuZ3RoID09PSAwKVxuICAgICAgICAgICAgICAgIGFyZ3VtZW50VHlwZUVycm9yKG9ic2VydmVkVHlwZSwgb3B0aW9uYWwuY21kLCBwb3NpdGlvbik7XG4gICAgICAgICAgICBwb3NpdGlvbiArPSAxO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zb2xlLndhcm4oZXJyLnN0YWNrKTtcbiAgICB9XG59XG5mdW5jdGlvbiBndWVzc1R5cGUoYXJnKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYXJnKSkge1xuICAgICAgICByZXR1cm4gJ2FycmF5JztcbiAgICB9XG4gICAgZWxzZSBpZiAoYXJnID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiAnbnVsbCc7XG4gICAgfVxuICAgIHJldHVybiB0eXBlb2YgYXJnO1xufVxuZnVuY3Rpb24gYXJndW1lbnRUeXBlRXJyb3Iob2JzZXJ2ZWRUeXBlLCBhbGxvd2VkVHlwZXMsIHBvc2l0aW9uKSB7XG4gICAgdGhyb3cgbmV3IFlFcnJvcihgSW52YWxpZCAke3Bvc2l0aW9uTmFtZVtwb3NpdGlvbl0gfHwgJ21hbnlpdGgnfSBhcmd1bWVudC4gRXhwZWN0ZWQgJHthbGxvd2VkVHlwZXMuam9pbignIG9yICcpfSBidXQgcmVjZWl2ZWQgJHtvYnNlcnZlZFR5cGV9LmApO1xufVxuIiwiaW1wb3J0IHsgYXJnc2VydCB9IGZyb20gJy4vYXJnc2VydC5qcyc7XG5pbXBvcnQgeyBpc1Byb21pc2UgfSBmcm9tICcuL3V0aWxzL2lzLXByb21pc2UuanMnO1xuZXhwb3J0IGNsYXNzIEdsb2JhbE1pZGRsZXdhcmUge1xuICAgIGNvbnN0cnVjdG9yKHlhcmdzKSB7XG4gICAgICAgIHRoaXMuZ2xvYmFsTWlkZGxld2FyZSA9IFtdO1xuICAgICAgICB0aGlzLmZyb3plbnMgPSBbXTtcbiAgICAgICAgdGhpcy55YXJncyA9IHlhcmdzO1xuICAgIH1cbiAgICBhZGRNaWRkbGV3YXJlKGNhbGxiYWNrLCBhcHBseUJlZm9yZVZhbGlkYXRpb24sIGdsb2JhbCA9IHRydWUsIG11dGF0ZXMgPSBmYWxzZSkge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8ZnVuY3Rpb24+IFtib29sZWFuXSBbYm9vbGVhbl0gW2Jvb2xlYW5dJywgW2NhbGxiYWNrLCBhcHBseUJlZm9yZVZhbGlkYXRpb24sIGdsb2JhbF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjYWxsYmFjaykpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2FsbGJhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrW2ldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKCdtaWRkbGV3YXJlIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBtID0gY2FsbGJhY2tbaV07XG4gICAgICAgICAgICAgICAgbS5hcHBseUJlZm9yZVZhbGlkYXRpb24gPSBhcHBseUJlZm9yZVZhbGlkYXRpb247XG4gICAgICAgICAgICAgICAgbS5nbG9iYWwgPSBnbG9iYWw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseSh0aGlzLmdsb2JhbE1pZGRsZXdhcmUsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IG0gPSBjYWxsYmFjaztcbiAgICAgICAgICAgIG0uYXBwbHlCZWZvcmVWYWxpZGF0aW9uID0gYXBwbHlCZWZvcmVWYWxpZGF0aW9uO1xuICAgICAgICAgICAgbS5nbG9iYWwgPSBnbG9iYWw7XG4gICAgICAgICAgICBtLm11dGF0ZXMgPSBtdXRhdGVzO1xuICAgICAgICAgICAgdGhpcy5nbG9iYWxNaWRkbGV3YXJlLnB1c2goY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnlhcmdzO1xuICAgIH1cbiAgICBhZGRDb2VyY2VNaWRkbGV3YXJlKGNhbGxiYWNrLCBvcHRpb24pIHtcbiAgICAgICAgY29uc3QgYWxpYXNlcyA9IHRoaXMueWFyZ3MuZ2V0QWxpYXNlcygpO1xuICAgICAgICB0aGlzLmdsb2JhbE1pZGRsZXdhcmUgPSB0aGlzLmdsb2JhbE1pZGRsZXdhcmUuZmlsdGVyKG0gPT4ge1xuICAgICAgICAgICAgY29uc3QgdG9DaGVjayA9IFsuLi4oYWxpYXNlc1tvcHRpb25dIHx8IFtdKSwgb3B0aW9uXTtcbiAgICAgICAgICAgIGlmICghbS5vcHRpb24pXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmV0dXJuICF0b0NoZWNrLmluY2x1ZGVzKG0ub3B0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNhbGxiYWNrLm9wdGlvbiA9IG9wdGlvbjtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWRkTWlkZGxld2FyZShjYWxsYmFjaywgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7XG4gICAgfVxuICAgIGdldE1pZGRsZXdhcmUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmdsb2JhbE1pZGRsZXdhcmU7XG4gICAgfVxuICAgIGZyZWV6ZSgpIHtcbiAgICAgICAgdGhpcy5mcm96ZW5zLnB1c2goWy4uLnRoaXMuZ2xvYmFsTWlkZGxld2FyZV0pO1xuICAgIH1cbiAgICB1bmZyZWV6ZSgpIHtcbiAgICAgICAgY29uc3QgZnJvemVuID0gdGhpcy5mcm96ZW5zLnBvcCgpO1xuICAgICAgICBpZiAoZnJvemVuICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICB0aGlzLmdsb2JhbE1pZGRsZXdhcmUgPSBmcm96ZW47XG4gICAgfVxuICAgIHJlc2V0KCkge1xuICAgICAgICB0aGlzLmdsb2JhbE1pZGRsZXdhcmUgPSB0aGlzLmdsb2JhbE1pZGRsZXdhcmUuZmlsdGVyKG0gPT4gbS5nbG9iYWwpO1xuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBjb21tYW5kTWlkZGxld2FyZUZhY3RvcnkoY29tbWFuZE1pZGRsZXdhcmUpIHtcbiAgICBpZiAoIWNvbW1hbmRNaWRkbGV3YXJlKVxuICAgICAgICByZXR1cm4gW107XG4gICAgcmV0dXJuIGNvbW1hbmRNaWRkbGV3YXJlLm1hcChtaWRkbGV3YXJlID0+IHtcbiAgICAgICAgbWlkZGxld2FyZS5hcHBseUJlZm9yZVZhbGlkYXRpb24gPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIG1pZGRsZXdhcmU7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gYXBwbHlNaWRkbGV3YXJlKGFyZ3YsIHlhcmdzLCBtaWRkbGV3YXJlcywgYmVmb3JlVmFsaWRhdGlvbikge1xuICAgIHJldHVybiBtaWRkbGV3YXJlcy5yZWR1Y2UoKGFjYywgbWlkZGxld2FyZSkgPT4ge1xuICAgICAgICBpZiAobWlkZGxld2FyZS5hcHBseUJlZm9yZVZhbGlkYXRpb24gIT09IGJlZm9yZVZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG1pZGRsZXdhcmUubXV0YXRlcykge1xuICAgICAgICAgICAgaWYgKG1pZGRsZXdhcmUuYXBwbGllZClcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgbWlkZGxld2FyZS5hcHBsaWVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNQcm9taXNlKGFjYykpIHtcbiAgICAgICAgICAgIHJldHVybiBhY2NcbiAgICAgICAgICAgICAgICAudGhlbihpbml0aWFsT2JqID0+IFByb21pc2UuYWxsKFtpbml0aWFsT2JqLCBtaWRkbGV3YXJlKGluaXRpYWxPYmosIHlhcmdzKV0pKVxuICAgICAgICAgICAgICAgIC50aGVuKChbaW5pdGlhbE9iaiwgbWlkZGxld2FyZU9ial0pID0+IE9iamVjdC5hc3NpZ24oaW5pdGlhbE9iaiwgbWlkZGxld2FyZU9iaikpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gbWlkZGxld2FyZShhY2MsIHlhcmdzKTtcbiAgICAgICAgICAgIHJldHVybiBpc1Byb21pc2UocmVzdWx0KVxuICAgICAgICAgICAgICAgID8gcmVzdWx0LnRoZW4obWlkZGxld2FyZU9iaiA9PiBPYmplY3QuYXNzaWduKGFjYywgbWlkZGxld2FyZU9iaikpXG4gICAgICAgICAgICAgICAgOiBPYmplY3QuYXNzaWduKGFjYywgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgIH0sIGFyZ3YpO1xufVxuIiwiaW1wb3J0IHsgaXNQcm9taXNlIH0gZnJvbSAnLi9pcy1wcm9taXNlLmpzJztcbmV4cG9ydCBmdW5jdGlvbiBtYXliZUFzeW5jUmVzdWx0KGdldFJlc3VsdCwgcmVzdWx0SGFuZGxlciwgZXJyb3JIYW5kbGVyID0gKGVycikgPT4ge1xuICAgIHRocm93IGVycjtcbn0pIHtcbiAgICB0cnkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBpc0Z1bmN0aW9uKGdldFJlc3VsdCkgPyBnZXRSZXN1bHQoKSA6IGdldFJlc3VsdDtcbiAgICAgICAgcmV0dXJuIGlzUHJvbWlzZShyZXN1bHQpXG4gICAgICAgICAgICA/IHJlc3VsdC50aGVuKChyZXN1bHQpID0+IHJlc3VsdEhhbmRsZXIocmVzdWx0KSlcbiAgICAgICAgICAgIDogcmVzdWx0SGFuZGxlcihyZXN1bHQpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJldHVybiBlcnJvckhhbmRsZXIoZXJyKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpc0Z1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiB0eXBlb2YgYXJnID09PSAnZnVuY3Rpb24nO1xufVxuIiwiaW1wb3J0IHsgYXNzZXJ0Tm90U3RyaWN0RXF1YWwsIH0gZnJvbSAnLi90eXBpbmdzL2NvbW1vbi10eXBlcy5qcyc7XG5pbXBvcnQgeyBpc1Byb21pc2UgfSBmcm9tICcuL3V0aWxzL2lzLXByb21pc2UuanMnO1xuaW1wb3J0IHsgYXBwbHlNaWRkbGV3YXJlLCBjb21tYW5kTWlkZGxld2FyZUZhY3RvcnksIH0gZnJvbSAnLi9taWRkbGV3YXJlLmpzJztcbmltcG9ydCB7IHBhcnNlQ29tbWFuZCB9IGZyb20gJy4vcGFyc2UtY29tbWFuZC5qcyc7XG5pbXBvcnQgeyBpc1lhcmdzSW5zdGFuY2UsIH0gZnJvbSAnLi95YXJncy1mYWN0b3J5LmpzJztcbmltcG9ydCB7IG1heWJlQXN5bmNSZXN1bHQgfSBmcm9tICcuL3V0aWxzL21heWJlLWFzeW5jLXJlc3VsdC5qcyc7XG5jb25zdCBERUZBVUxUX01BUktFUiA9IC8oXlxcKil8KF5cXCQwKS87XG5leHBvcnQgY2xhc3MgQ29tbWFuZEluc3RhbmNlIHtcbiAgICBjb25zdHJ1Y3Rvcih1c2FnZSwgdmFsaWRhdGlvbiwgZ2xvYmFsTWlkZGxld2FyZSwgc2hpbSkge1xuICAgICAgICB0aGlzLnJlcXVpcmVDYWNoZSA9IG5ldyBTZXQoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVycyA9IHt9O1xuICAgICAgICB0aGlzLmFsaWFzTWFwID0ge307XG4gICAgICAgIHRoaXMuZnJvemVucyA9IFtdO1xuICAgICAgICB0aGlzLnNoaW0gPSBzaGltO1xuICAgICAgICB0aGlzLnVzYWdlID0gdXNhZ2U7XG4gICAgICAgIHRoaXMuZ2xvYmFsTWlkZGxld2FyZSA9IGdsb2JhbE1pZGRsZXdhcmU7XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbiA9IHZhbGlkYXRpb247XG4gICAgfVxuICAgIGFkZERpcmVjdG9yeShkaXIsIHJlcSwgY2FsbGVyRmlsZSwgb3B0cykge1xuICAgICAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICAgICAgdGhpcy5yZXF1aXJlQ2FjaGUuYWRkKGNhbGxlckZpbGUpO1xuICAgICAgICBjb25zdCBmdWxsRGlyUGF0aCA9IHRoaXMuc2hpbS5wYXRoLnJlc29sdmUodGhpcy5zaGltLnBhdGguZGlybmFtZShjYWxsZXJGaWxlKSwgZGlyKTtcbiAgICAgICAgY29uc3QgZmlsZXMgPSB0aGlzLnNoaW0ucmVhZGRpclN5bmMoZnVsbERpclBhdGgsIHtcbiAgICAgICAgICAgIHJlY3Vyc2l2ZTogb3B0cy5yZWN1cnNlID8gdHJ1ZSA6IGZhbHNlLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KG9wdHMuZXh0ZW5zaW9ucykpXG4gICAgICAgICAgICBvcHRzLmV4dGVuc2lvbnMgPSBbJ2pzJ107XG4gICAgICAgIGNvbnN0IHZpc2l0ID0gdHlwZW9mIG9wdHMudmlzaXQgPT09ICdmdW5jdGlvbicgPyBvcHRzLnZpc2l0IDogKG8pID0+IG87XG4gICAgICAgIGZvciAoY29uc3QgZmlsZWIgb2YgZmlsZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGUgPSBmaWxlYi50b1N0cmluZygpO1xuICAgICAgICAgICAgaWYgKG9wdHMuZXhjbHVkZSkge1xuICAgICAgICAgICAgICAgIGxldCBleGNsdWRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRzLmV4Y2x1ZGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgZXhjbHVkZSA9IG9wdHMuZXhjbHVkZShmaWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGV4Y2x1ZGUgPSBvcHRzLmV4Y2x1ZGUudGVzdChmaWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGV4Y2x1ZGUpXG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdHMuaW5jbHVkZSkge1xuICAgICAgICAgICAgICAgIGxldCBpbmNsdWRlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHRzLmluY2x1ZGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSA9IG9wdHMuaW5jbHVkZShmaWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgPSBvcHRzLmluY2x1ZGUudGVzdChmaWxlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFpbmNsdWRlKVxuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGxldCBzdXBwb3J0ZWRFeHRlbnNpb24gPSBmYWxzZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXh0IG9mIG9wdHMuZXh0ZW5zaW9ucykge1xuICAgICAgICAgICAgICAgIGlmIChmaWxlLmVuZHNXaXRoKGV4dCkpXG4gICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZEV4dGVuc2lvbiA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc3VwcG9ydGVkRXh0ZW5zaW9uKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgam9pbmVkID0gdGhpcy5zaGltLnBhdGguam9pbihmdWxsRGlyUGF0aCwgZmlsZSk7XG4gICAgICAgICAgICAgICAgY29uc3QgbW9kdWxlID0gcmVxKGpvaW5lZCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZXh0ZW5kYWJsZU1vZHVsZSA9IE9iamVjdC5jcmVhdGUobnVsbCwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoeyAuLi5tb2R1bGUgfSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHZpc2l0ZWQgPSB2aXNpdChleHRlbmRhYmxlTW9kdWxlLCBqb2luZWQsIGZpbGUpO1xuICAgICAgICAgICAgICAgIGlmICh2aXNpdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnJlcXVpcmVDYWNoZS5oYXMoam9pbmVkKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnJlcXVpcmVDYWNoZS5hZGQoam9pbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFleHRlbmRhYmxlTW9kdWxlLmNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZGFibGVNb2R1bGUuY29tbWFuZCA9IHRoaXMuc2hpbS5wYXRoLmJhc2VuYW1lKGpvaW5lZCwgdGhpcy5zaGltLnBhdGguZXh0bmFtZShqb2luZWQpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEhhbmRsZXIoZXh0ZW5kYWJsZU1vZHVsZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIGFkZEhhbmRsZXIoY21kLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlciwgY29tbWFuZE1pZGRsZXdhcmUsIGRlcHJlY2F0ZWQpIHtcbiAgICAgICAgbGV0IGFsaWFzZXMgPSBbXTtcbiAgICAgICAgY29uc3QgbWlkZGxld2FyZXMgPSBjb21tYW5kTWlkZGxld2FyZUZhY3RvcnkoY29tbWFuZE1pZGRsZXdhcmUpO1xuICAgICAgICBoYW5kbGVyID0gaGFuZGxlciB8fCAoKCkgPT4geyB9KTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY21kKSkge1xuICAgICAgICAgICAgaWYgKGlzQ29tbWFuZEFuZEFsaWFzZXMoY21kKSkge1xuICAgICAgICAgICAgICAgIFtjbWQsIC4uLmFsaWFzZXNdID0gY21kO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb21tYW5kIG9mIGNtZCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFkZEhhbmRsZXIoY29tbWFuZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzQ29tbWFuZEhhbmRsZXJEZWZpbml0aW9uKGNtZCkpIHtcbiAgICAgICAgICAgIGxldCBjb21tYW5kID0gQXJyYXkuaXNBcnJheShjbWQuY29tbWFuZCkgfHwgdHlwZW9mIGNtZC5jb21tYW5kID09PSAnc3RyaW5nJ1xuICAgICAgICAgICAgICAgID8gY21kLmNvbW1hbmRcbiAgICAgICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgICBpZiAoY29tbWFuZCA9PT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTm8gY29tbWFuZCBuYW1lIGdpdmVuIGZvciBtb2R1bGU6ICR7dGhpcy5zaGltLmluc3BlY3QoY21kKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChjbWQuYWxpYXNlcylcbiAgICAgICAgICAgICAgICBjb21tYW5kID0gW10uY29uY2F0KGNvbW1hbmQpLmNvbmNhdChjbWQuYWxpYXNlcyk7XG4gICAgICAgICAgICB0aGlzLmFkZEhhbmRsZXIoY29tbWFuZCwgdGhpcy5leHRyYWN0RGVzYyhjbWQpLCBjbWQuYnVpbGRlciwgY21kLmhhbmRsZXIsIGNtZC5taWRkbGV3YXJlcywgY21kLmRlcHJlY2F0ZWQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzQ29tbWFuZEJ1aWxkZXJEZWZpbml0aW9uKGJ1aWxkZXIpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZEhhbmRsZXIoW2NtZF0uY29uY2F0KGFsaWFzZXMpLCBkZXNjcmlwdGlvbiwgYnVpbGRlci5idWlsZGVyLCBidWlsZGVyLmhhbmRsZXIsIGJ1aWxkZXIubWlkZGxld2FyZXMsIGJ1aWxkZXIuZGVwcmVjYXRlZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBjbWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRDb21tYW5kID0gcGFyc2VDb21tYW5kKGNtZCk7XG4gICAgICAgICAgICBhbGlhc2VzID0gYWxpYXNlcy5tYXAoYWxpYXMgPT4gcGFyc2VDb21tYW5kKGFsaWFzKS5jbWQpO1xuICAgICAgICAgICAgbGV0IGlzRGVmYXVsdCA9IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkQWxpYXNlcyA9IFtwYXJzZWRDb21tYW5kLmNtZF0uY29uY2F0KGFsaWFzZXMpLmZpbHRlcihjID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoREVGQVVMVF9NQVJLRVIudGVzdChjKSkge1xuICAgICAgICAgICAgICAgICAgICBpc0RlZmF1bHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAocGFyc2VkQWxpYXNlcy5sZW5ndGggPT09IDAgJiYgaXNEZWZhdWx0KVxuICAgICAgICAgICAgICAgIHBhcnNlZEFsaWFzZXMucHVzaCgnJDAnKTtcbiAgICAgICAgICAgIGlmIChpc0RlZmF1bHQpIHtcbiAgICAgICAgICAgICAgICBwYXJzZWRDb21tYW5kLmNtZCA9IHBhcnNlZEFsaWFzZXNbMF07XG4gICAgICAgICAgICAgICAgYWxpYXNlcyA9IHBhcnNlZEFsaWFzZXMuc2xpY2UoMSk7XG4gICAgICAgICAgICAgICAgY21kID0gY21kLnJlcGxhY2UoREVGQVVMVF9NQVJLRVIsIHBhcnNlZENvbW1hbmQuY21kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFsaWFzZXMuZm9yRWFjaChhbGlhcyA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5hbGlhc01hcFthbGlhc10gPSBwYXJzZWRDb21tYW5kLmNtZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGRlc2NyaXB0aW9uICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudXNhZ2UuY29tbWFuZChjbWQsIGRlc2NyaXB0aW9uLCBpc0RlZmF1bHQsIGFsaWFzZXMsIGRlcHJlY2F0ZWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5oYW5kbGVyc1twYXJzZWRDb21tYW5kLmNtZF0gPSB7XG4gICAgICAgICAgICAgICAgb3JpZ2luYWw6IGNtZCxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgICAgICAgIGJ1aWxkZXI6IGJ1aWxkZXIgfHwge30sXG4gICAgICAgICAgICAgICAgbWlkZGxld2FyZXMsXG4gICAgICAgICAgICAgICAgZGVwcmVjYXRlZCxcbiAgICAgICAgICAgICAgICBkZW1hbmRlZDogcGFyc2VkQ29tbWFuZC5kZW1hbmRlZCxcbiAgICAgICAgICAgICAgICBvcHRpb25hbDogcGFyc2VkQ29tbWFuZC5vcHRpb25hbCxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaXNEZWZhdWx0KVxuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdENvbW1hbmQgPSB0aGlzLmhhbmRsZXJzW3BhcnNlZENvbW1hbmQuY21kXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXRDb21tYW5kSGFuZGxlcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXJzO1xuICAgIH1cbiAgICBnZXRDb21tYW5kcygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuaGFuZGxlcnMpLmNvbmNhdChPYmplY3Qua2V5cyh0aGlzLmFsaWFzTWFwKSk7XG4gICAgfVxuICAgIGhhc0RlZmF1bHRDb21tYW5kKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLmRlZmF1bHRDb21tYW5kO1xuICAgIH1cbiAgICBydW5Db21tYW5kKGNvbW1hbmQsIHlhcmdzLCBwYXJzZWQsIGNvbW1hbmRJbmRleCwgaGVscE9ubHksIGhlbHBPclZlcnNpb25TZXQpIHtcbiAgICAgICAgY29uc3QgY29tbWFuZEhhbmRsZXIgPSB0aGlzLmhhbmRsZXJzW2NvbW1hbmRdIHx8XG4gICAgICAgICAgICB0aGlzLmhhbmRsZXJzW3RoaXMuYWxpYXNNYXBbY29tbWFuZF1dIHx8XG4gICAgICAgICAgICB0aGlzLmRlZmF1bHRDb21tYW5kO1xuICAgICAgICBjb25zdCBjdXJyZW50Q29udGV4dCA9IHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldENvbnRleHQoKTtcbiAgICAgICAgY29uc3QgcGFyZW50Q29tbWFuZHMgPSBjdXJyZW50Q29udGV4dC5jb21tYW5kcy5zbGljZSgpO1xuICAgICAgICBjb25zdCBpc0RlZmF1bHRDb21tYW5kID0gIWNvbW1hbmQ7XG4gICAgICAgIGlmIChjb21tYW5kKSB7XG4gICAgICAgICAgICBjdXJyZW50Q29udGV4dC5jb21tYW5kcy5wdXNoKGNvbW1hbmQpO1xuICAgICAgICAgICAgY3VycmVudENvbnRleHQuZnVsbENvbW1hbmRzLnB1c2goY29tbWFuZEhhbmRsZXIub3JpZ2luYWwpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGJ1aWxkZXJSZXN1bHQgPSB0aGlzLmFwcGx5QnVpbGRlclVwZGF0ZVVzYWdlQW5kUGFyc2UoaXNEZWZhdWx0Q29tbWFuZCwgY29tbWFuZEhhbmRsZXIsIHlhcmdzLCBwYXJzZWQuYWxpYXNlcywgcGFyZW50Q29tbWFuZHMsIGNvbW1hbmRJbmRleCwgaGVscE9ubHksIGhlbHBPclZlcnNpb25TZXQpO1xuICAgICAgICByZXR1cm4gaXNQcm9taXNlKGJ1aWxkZXJSZXN1bHQpXG4gICAgICAgICAgICA/IGJ1aWxkZXJSZXN1bHQudGhlbihyZXN1bHQgPT4gdGhpcy5hcHBseU1pZGRsZXdhcmVBbmRHZXRSZXN1bHQoaXNEZWZhdWx0Q29tbWFuZCwgY29tbWFuZEhhbmRsZXIsIHJlc3VsdC5pbm5lckFyZ3YsIGN1cnJlbnRDb250ZXh0LCBoZWxwT25seSwgcmVzdWx0LmFsaWFzZXMsIHlhcmdzKSlcbiAgICAgICAgICAgIDogdGhpcy5hcHBseU1pZGRsZXdhcmVBbmRHZXRSZXN1bHQoaXNEZWZhdWx0Q29tbWFuZCwgY29tbWFuZEhhbmRsZXIsIGJ1aWxkZXJSZXN1bHQuaW5uZXJBcmd2LCBjdXJyZW50Q29udGV4dCwgaGVscE9ubHksIGJ1aWxkZXJSZXN1bHQuYWxpYXNlcywgeWFyZ3MpO1xuICAgIH1cbiAgICBhcHBseUJ1aWxkZXJVcGRhdGVVc2FnZUFuZFBhcnNlKGlzRGVmYXVsdENvbW1hbmQsIGNvbW1hbmRIYW5kbGVyLCB5YXJncywgYWxpYXNlcywgcGFyZW50Q29tbWFuZHMsIGNvbW1hbmRJbmRleCwgaGVscE9ubHksIGhlbHBPclZlcnNpb25TZXQpIHtcbiAgICAgICAgY29uc3QgYnVpbGRlciA9IGNvbW1hbmRIYW5kbGVyLmJ1aWxkZXI7XG4gICAgICAgIGxldCBpbm5lcllhcmdzID0geWFyZ3M7XG4gICAgICAgIGlmIChpc0NvbW1hbmRCdWlsZGVyQ2FsbGJhY2soYnVpbGRlcikpIHtcbiAgICAgICAgICAgIHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldFVzYWdlSW5zdGFuY2UoKS5mcmVlemUoKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1aWxkZXJPdXRwdXQgPSBidWlsZGVyKHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLnJlc2V0KGFsaWFzZXMpLCBoZWxwT3JWZXJzaW9uU2V0KTtcbiAgICAgICAgICAgIGlmIChpc1Byb21pc2UoYnVpbGRlck91dHB1dCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYnVpbGRlck91dHB1dC50aGVuKG91dHB1dCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlubmVyWWFyZ3MgPSBpc1lhcmdzSW5zdGFuY2Uob3V0cHV0KSA/IG91dHB1dCA6IHlhcmdzO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wYXJzZUFuZFVwZGF0ZVVzYWdlKGlzRGVmYXVsdENvbW1hbmQsIGNvbW1hbmRIYW5kbGVyLCBpbm5lcllhcmdzLCBwYXJlbnRDb21tYW5kcywgY29tbWFuZEluZGV4LCBoZWxwT25seSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNDb21tYW5kQnVpbGRlck9wdGlvbkRlZmluaXRpb25zKGJ1aWxkZXIpKSB7XG4gICAgICAgICAgICB5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRVc2FnZUluc3RhbmNlKCkuZnJlZXplKCk7XG4gICAgICAgICAgICBpbm5lcllhcmdzID0geWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkucmVzZXQoYWxpYXNlcyk7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjb21tYW5kSGFuZGxlci5idWlsZGVyKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgaW5uZXJZYXJncy5vcHRpb24oa2V5LCBidWlsZGVyW2tleV0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMucGFyc2VBbmRVcGRhdGVVc2FnZShpc0RlZmF1bHRDb21tYW5kLCBjb21tYW5kSGFuZGxlciwgaW5uZXJZYXJncywgcGFyZW50Q29tbWFuZHMsIGNvbW1hbmRJbmRleCwgaGVscE9ubHkpO1xuICAgIH1cbiAgICBwYXJzZUFuZFVwZGF0ZVVzYWdlKGlzRGVmYXVsdENvbW1hbmQsIGNvbW1hbmRIYW5kbGVyLCBpbm5lcllhcmdzLCBwYXJlbnRDb21tYW5kcywgY29tbWFuZEluZGV4LCBoZWxwT25seSkge1xuICAgICAgICBpZiAoaXNEZWZhdWx0Q29tbWFuZClcbiAgICAgICAgICAgIGlubmVyWWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0VXNhZ2VJbnN0YW5jZSgpLnVuZnJlZXplKHRydWUpO1xuICAgICAgICBpZiAodGhpcy5zaG91bGRVcGRhdGVVc2FnZShpbm5lcllhcmdzKSkge1xuICAgICAgICAgICAgaW5uZXJZYXJnc1xuICAgICAgICAgICAgICAgIC5nZXRJbnRlcm5hbE1ldGhvZHMoKVxuICAgICAgICAgICAgICAgIC5nZXRVc2FnZUluc3RhbmNlKClcbiAgICAgICAgICAgICAgICAudXNhZ2UodGhpcy51c2FnZUZyb21QYXJlbnRDb21tYW5kc0NvbW1hbmRIYW5kbGVyKHBhcmVudENvbW1hbmRzLCBjb21tYW5kSGFuZGxlciksIGNvbW1hbmRIYW5kbGVyLmRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpbm5lckFyZ3YgPSBpbm5lcllhcmdzXG4gICAgICAgICAgICAuZ2V0SW50ZXJuYWxNZXRob2RzKClcbiAgICAgICAgICAgIC5ydW5ZYXJnc1BhcnNlckFuZEV4ZWN1dGVDb21tYW5kcyhudWxsLCB1bmRlZmluZWQsIHRydWUsIGNvbW1hbmRJbmRleCwgaGVscE9ubHkpO1xuICAgICAgICByZXR1cm4gaXNQcm9taXNlKGlubmVyQXJndilcbiAgICAgICAgICAgID8gaW5uZXJBcmd2LnRoZW4oYXJndiA9PiAoe1xuICAgICAgICAgICAgICAgIGFsaWFzZXM6IGlubmVyWWFyZ3MucGFyc2VkLmFsaWFzZXMsXG4gICAgICAgICAgICAgICAgaW5uZXJBcmd2OiBhcmd2LFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBhbGlhc2VzOiBpbm5lcllhcmdzLnBhcnNlZC5hbGlhc2VzLFxuICAgICAgICAgICAgICAgIGlubmVyQXJndjogaW5uZXJBcmd2LFxuICAgICAgICAgICAgfTtcbiAgICB9XG4gICAgc2hvdWxkVXBkYXRlVXNhZ2UoeWFyZ3MpIHtcbiAgICAgICAgcmV0dXJuICgheWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0VXNhZ2VJbnN0YW5jZSgpLmdldFVzYWdlRGlzYWJsZWQoKSAmJlxuICAgICAgICAgICAgeWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0VXNhZ2VJbnN0YW5jZSgpLmdldFVzYWdlKCkubGVuZ3RoID09PSAwKTtcbiAgICB9XG4gICAgdXNhZ2VGcm9tUGFyZW50Q29tbWFuZHNDb21tYW5kSGFuZGxlcihwYXJlbnRDb21tYW5kcywgY29tbWFuZEhhbmRsZXIpIHtcbiAgICAgICAgY29uc3QgYyA9IERFRkFVTFRfTUFSS0VSLnRlc3QoY29tbWFuZEhhbmRsZXIub3JpZ2luYWwpXG4gICAgICAgICAgICA/IGNvbW1hbmRIYW5kbGVyLm9yaWdpbmFsLnJlcGxhY2UoREVGQVVMVF9NQVJLRVIsICcnKS50cmltKClcbiAgICAgICAgICAgIDogY29tbWFuZEhhbmRsZXIub3JpZ2luYWw7XG4gICAgICAgIGNvbnN0IHBjID0gcGFyZW50Q29tbWFuZHMuZmlsdGVyKGMgPT4ge1xuICAgICAgICAgICAgcmV0dXJuICFERUZBVUxUX01BUktFUi50ZXN0KGMpO1xuICAgICAgICB9KTtcbiAgICAgICAgcGMucHVzaChjKTtcbiAgICAgICAgcmV0dXJuIGAkMCAke3BjLmpvaW4oJyAnKX1gO1xuICAgIH1cbiAgICBoYW5kbGVWYWxpZGF0aW9uQW5kR2V0UmVzdWx0KGlzRGVmYXVsdENvbW1hbmQsIGNvbW1hbmRIYW5kbGVyLCBpbm5lckFyZ3YsIGN1cnJlbnRDb250ZXh0LCBhbGlhc2VzLCB5YXJncywgbWlkZGxld2FyZXMsIHBvc2l0aW9uYWxNYXApIHtcbiAgICAgICAgaWYgKCF5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRIYXNPdXRwdXQoKSkge1xuICAgICAgICAgICAgY29uc3QgdmFsaWRhdGlvbiA9IHlhcmdzXG4gICAgICAgICAgICAgICAgLmdldEludGVybmFsTWV0aG9kcygpXG4gICAgICAgICAgICAgICAgLnJ1blZhbGlkYXRpb24oYWxpYXNlcywgcG9zaXRpb25hbE1hcCwgeWFyZ3MucGFyc2VkLmVycm9yLCBpc0RlZmF1bHRDb21tYW5kKTtcbiAgICAgICAgICAgIGlubmVyQXJndiA9IG1heWJlQXN5bmNSZXN1bHQoaW5uZXJBcmd2LCByZXN1bHQgPT4ge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRpb24ocmVzdWx0KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1hbmRIYW5kbGVyLmhhbmRsZXIgJiYgIXlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldEhhc091dHB1dCgpKSB7XG4gICAgICAgICAgICB5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5zZXRIYXNPdXRwdXQoKTtcbiAgICAgICAgICAgIGNvbnN0IHBvcHVsYXRlRG91YmxlRGFzaCA9ICEheWFyZ3MuZ2V0T3B0aW9ucygpLmNvbmZpZ3VyYXRpb25bJ3BvcHVsYXRlLS0nXTtcbiAgICAgICAgICAgIHlhcmdzXG4gICAgICAgICAgICAgICAgLmdldEludGVybmFsTWV0aG9kcygpXG4gICAgICAgICAgICAgICAgLnBvc3RQcm9jZXNzKGlubmVyQXJndiwgcG9wdWxhdGVEb3VibGVEYXNoLCBmYWxzZSwgZmFsc2UpO1xuICAgICAgICAgICAgaW5uZXJBcmd2ID0gYXBwbHlNaWRkbGV3YXJlKGlubmVyQXJndiwgeWFyZ3MsIG1pZGRsZXdhcmVzLCBmYWxzZSk7XG4gICAgICAgICAgICBpbm5lckFyZ3YgPSBtYXliZUFzeW5jUmVzdWx0KGlubmVyQXJndiwgcmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBoYW5kbGVyUmVzdWx0ID0gY29tbWFuZEhhbmRsZXIuaGFuZGxlcihyZXN1bHQpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpc1Byb21pc2UoaGFuZGxlclJlc3VsdClcbiAgICAgICAgICAgICAgICAgICAgPyBoYW5kbGVyUmVzdWx0LnRoZW4oKCkgPT4gcmVzdWx0KVxuICAgICAgICAgICAgICAgICAgICA6IHJlc3VsdDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKCFpc0RlZmF1bHRDb21tYW5kKSB7XG4gICAgICAgICAgICAgICAgeWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0VXNhZ2VJbnN0YW5jZSgpLmNhY2hlSGVscE1lc3NhZ2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpc1Byb21pc2UoaW5uZXJBcmd2KSAmJlxuICAgICAgICAgICAgICAgICF5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5oYXNQYXJzZUNhbGxiYWNrKCkpIHtcbiAgICAgICAgICAgICAgICBpbm5lckFyZ3YuY2F0Y2goZXJyb3IgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgeWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0VXNhZ2VJbnN0YW5jZSgpLmZhaWwobnVsbCwgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChfZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIWlzRGVmYXVsdENvbW1hbmQpIHtcbiAgICAgICAgICAgIGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLnBvcCgpO1xuICAgICAgICAgICAgY3VycmVudENvbnRleHQuZnVsbENvbW1hbmRzLnBvcCgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBpbm5lckFyZ3Y7XG4gICAgfVxuICAgIGFwcGx5TWlkZGxld2FyZUFuZEdldFJlc3VsdChpc0RlZmF1bHRDb21tYW5kLCBjb21tYW5kSGFuZGxlciwgaW5uZXJBcmd2LCBjdXJyZW50Q29udGV4dCwgaGVscE9ubHksIGFsaWFzZXMsIHlhcmdzKSB7XG4gICAgICAgIGxldCBwb3NpdGlvbmFsTWFwID0ge307XG4gICAgICAgIGlmIChoZWxwT25seSlcbiAgICAgICAgICAgIHJldHVybiBpbm5lckFyZ3Y7XG4gICAgICAgIGlmICgheWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0SGFzT3V0cHV0KCkpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uYWxNYXAgPSB0aGlzLnBvcHVsYXRlUG9zaXRpb25hbHMoY29tbWFuZEhhbmRsZXIsIGlubmVyQXJndiwgY3VycmVudENvbnRleHQsIHlhcmdzKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtaWRkbGV3YXJlcyA9IHRoaXMuZ2xvYmFsTWlkZGxld2FyZVxuICAgICAgICAgICAgLmdldE1pZGRsZXdhcmUoKVxuICAgICAgICAgICAgLnNsaWNlKDApXG4gICAgICAgICAgICAuY29uY2F0KGNvbW1hbmRIYW5kbGVyLm1pZGRsZXdhcmVzKTtcbiAgICAgICAgY29uc3QgbWF5YmVQcm9taXNlQXJndiA9IGFwcGx5TWlkZGxld2FyZShpbm5lckFyZ3YsIHlhcmdzLCBtaWRkbGV3YXJlcywgdHJ1ZSk7XG4gICAgICAgIHJldHVybiBpc1Byb21pc2UobWF5YmVQcm9taXNlQXJndilcbiAgICAgICAgICAgID8gbWF5YmVQcm9taXNlQXJndi50aGVuKHJlc29sdmVkSW5uZXJBcmd2ID0+IHRoaXMuaGFuZGxlVmFsaWRhdGlvbkFuZEdldFJlc3VsdChpc0RlZmF1bHRDb21tYW5kLCBjb21tYW5kSGFuZGxlciwgcmVzb2x2ZWRJbm5lckFyZ3YsIGN1cnJlbnRDb250ZXh0LCBhbGlhc2VzLCB5YXJncywgbWlkZGxld2FyZXMsIHBvc2l0aW9uYWxNYXApKVxuICAgICAgICAgICAgOiB0aGlzLmhhbmRsZVZhbGlkYXRpb25BbmRHZXRSZXN1bHQoaXNEZWZhdWx0Q29tbWFuZCwgY29tbWFuZEhhbmRsZXIsIG1heWJlUHJvbWlzZUFyZ3YsIGN1cnJlbnRDb250ZXh0LCBhbGlhc2VzLCB5YXJncywgbWlkZGxld2FyZXMsIHBvc2l0aW9uYWxNYXApO1xuICAgIH1cbiAgICBwb3B1bGF0ZVBvc2l0aW9uYWxzKGNvbW1hbmRIYW5kbGVyLCBhcmd2LCBjb250ZXh0LCB5YXJncykge1xuICAgICAgICBhcmd2Ll8gPSBhcmd2Ll8uc2xpY2UoY29udGV4dC5jb21tYW5kcy5sZW5ndGgpO1xuICAgICAgICBjb25zdCBkZW1hbmRlZCA9IGNvbW1hbmRIYW5kbGVyLmRlbWFuZGVkLnNsaWNlKDApO1xuICAgICAgICBjb25zdCBvcHRpb25hbCA9IGNvbW1hbmRIYW5kbGVyLm9wdGlvbmFsLnNsaWNlKDApO1xuICAgICAgICBjb25zdCBwb3NpdGlvbmFsTWFwID0ge307XG4gICAgICAgIHRoaXMudmFsaWRhdGlvbi5wb3NpdGlvbmFsQ291bnQoZGVtYW5kZWQubGVuZ3RoLCBhcmd2Ll8ubGVuZ3RoKTtcbiAgICAgICAgd2hpbGUgKGRlbWFuZGVkLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgZGVtYW5kID0gZGVtYW5kZWQuc2hpZnQoKTtcbiAgICAgICAgICAgIHRoaXMucG9wdWxhdGVQb3NpdGlvbmFsKGRlbWFuZCwgYXJndiwgcG9zaXRpb25hbE1hcCk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKG9wdGlvbmFsLmxlbmd0aCkge1xuICAgICAgICAgICAgY29uc3QgbWF5YmUgPSBvcHRpb25hbC5zaGlmdCgpO1xuICAgICAgICAgICAgdGhpcy5wb3B1bGF0ZVBvc2l0aW9uYWwobWF5YmUsIGFyZ3YsIHBvc2l0aW9uYWxNYXApO1xuICAgICAgICB9XG4gICAgICAgIGFyZ3YuXyA9IGNvbnRleHQuY29tbWFuZHMuY29uY2F0KGFyZ3YuXy5tYXAoYSA9PiAnJyArIGEpKTtcbiAgICAgICAgdGhpcy5wb3N0UHJvY2Vzc1Bvc2l0aW9uYWxzKGFyZ3YsIHBvc2l0aW9uYWxNYXAsIHRoaXMuY21kVG9QYXJzZU9wdGlvbnMoY29tbWFuZEhhbmRsZXIub3JpZ2luYWwpLCB5YXJncyk7XG4gICAgICAgIHJldHVybiBwb3NpdGlvbmFsTWFwO1xuICAgIH1cbiAgICBwb3B1bGF0ZVBvc2l0aW9uYWwocG9zaXRpb25hbCwgYXJndiwgcG9zaXRpb25hbE1hcCkge1xuICAgICAgICBjb25zdCBjbWQgPSBwb3NpdGlvbmFsLmNtZFswXTtcbiAgICAgICAgaWYgKHBvc2l0aW9uYWwudmFyaWFkaWMpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uYWxNYXBbY21kXSA9IGFyZ3YuXy5zcGxpY2UoMCkubWFwKFN0cmluZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoYXJndi5fLmxlbmd0aClcbiAgICAgICAgICAgICAgICBwb3NpdGlvbmFsTWFwW2NtZF0gPSBbU3RyaW5nKGFyZ3YuXy5zaGlmdCgpKV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgY21kVG9QYXJzZU9wdGlvbnMoY21kU3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlT3B0aW9ucyA9IHtcbiAgICAgICAgICAgIGFycmF5OiBbXSxcbiAgICAgICAgICAgIGRlZmF1bHQ6IHt9LFxuICAgICAgICAgICAgYWxpYXM6IHt9LFxuICAgICAgICAgICAgZGVtYW5kOiB7fSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VDb21tYW5kKGNtZFN0cmluZyk7XG4gICAgICAgIHBhcnNlZC5kZW1hbmRlZC5mb3JFYWNoKGQgPT4ge1xuICAgICAgICAgICAgY29uc3QgW2NtZCwgLi4uYWxpYXNlc10gPSBkLmNtZDtcbiAgICAgICAgICAgIGlmIChkLnZhcmlhZGljKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VPcHRpb25zLmFycmF5LnB1c2goY21kKTtcbiAgICAgICAgICAgICAgICBwYXJzZU9wdGlvbnMuZGVmYXVsdFtjbWRdID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJzZU9wdGlvbnMuYWxpYXNbY21kXSA9IGFsaWFzZXM7XG4gICAgICAgICAgICBwYXJzZU9wdGlvbnMuZGVtYW5kW2NtZF0gPSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgcGFyc2VkLm9wdGlvbmFsLmZvckVhY2gobyA9PiB7XG4gICAgICAgICAgICBjb25zdCBbY21kLCAuLi5hbGlhc2VzXSA9IG8uY21kO1xuICAgICAgICAgICAgaWYgKG8udmFyaWFkaWMpIHtcbiAgICAgICAgICAgICAgICBwYXJzZU9wdGlvbnMuYXJyYXkucHVzaChjbWQpO1xuICAgICAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5kZWZhdWx0W2NtZF0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcnNlT3B0aW9ucy5hbGlhc1tjbWRdID0gYWxpYXNlcztcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXJzZU9wdGlvbnM7XG4gICAgfVxuICAgIHBvc3RQcm9jZXNzUG9zaXRpb25hbHMoYXJndiwgcG9zaXRpb25hbE1hcCwgcGFyc2VPcHRpb25zLCB5YXJncykge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgeWFyZ3MuZ2V0T3B0aW9ucygpKTtcbiAgICAgICAgb3B0aW9ucy5kZWZhdWx0ID0gT2JqZWN0LmFzc2lnbihwYXJzZU9wdGlvbnMuZGVmYXVsdCwgb3B0aW9ucy5kZWZhdWx0KTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocGFyc2VPcHRpb25zLmFsaWFzKSkge1xuICAgICAgICAgICAgb3B0aW9ucy5hbGlhc1trZXldID0gKG9wdGlvbnMuYWxpYXNba2V5XSB8fCBbXSkuY29uY2F0KHBhcnNlT3B0aW9ucy5hbGlhc1trZXldKTtcbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLmFycmF5ID0gb3B0aW9ucy5hcnJheS5jb25jYXQocGFyc2VPcHRpb25zLmFycmF5KTtcbiAgICAgICAgb3B0aW9ucy5jb25maWcgPSB7fTtcbiAgICAgICAgY29uc3QgdW5wYXJzZWQgPSBbXTtcbiAgICAgICAgT2JqZWN0LmtleXMocG9zaXRpb25hbE1hcCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgcG9zaXRpb25hbE1hcFtrZXldLm1hcCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY29uZmlndXJhdGlvblsndW5rbm93bi1vcHRpb25zLWFzLWFyZ3MnXSlcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5rZXlba2V5XSA9IHRydWU7XG4gICAgICAgICAgICAgICAgdW5wYXJzZWQucHVzaChgLS0ke2tleX1gKTtcbiAgICAgICAgICAgICAgICB1bnBhcnNlZC5wdXNoKHZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF1bnBhcnNlZC5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuY29uZmlndXJhdGlvbiwge1xuICAgICAgICAgICAgJ3BvcHVsYXRlLS0nOiBmYWxzZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXMuc2hpbS5QYXJzZXIuZGV0YWlsZWQodW5wYXJzZWQsIE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgICAgIGNvbmZpZ3VyYXRpb246IGNvbmZpZyxcbiAgICAgICAgfSkpO1xuICAgICAgICBpZiAocGFyc2VkLmVycm9yKSB7XG4gICAgICAgICAgICB5YXJnc1xuICAgICAgICAgICAgICAgIC5nZXRJbnRlcm5hbE1ldGhvZHMoKVxuICAgICAgICAgICAgICAgIC5nZXRVc2FnZUluc3RhbmNlKClcbiAgICAgICAgICAgICAgICAuZmFpbChwYXJzZWQuZXJyb3IubWVzc2FnZSwgcGFyc2VkLmVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uYWxLZXlzID0gT2JqZWN0LmtleXMocG9zaXRpb25hbE1hcCk7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhwb3NpdGlvbmFsTWFwKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgcG9zaXRpb25hbEtleXMucHVzaCguLi5wYXJzZWQuYWxpYXNlc1trZXldKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMocGFyc2VkLmFyZ3YpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAocG9zaXRpb25hbEtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXBvc2l0aW9uYWxNYXBba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uYWxNYXBba2V5XSA9IHBhcnNlZC5hcmd2W2tleV07XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0luQ29uZmlncyh5YXJncywga2V5KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuaXNEZWZhdWx0ZWQoeWFyZ3MsIGtleSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd2LCBrZXkpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFyc2VkLmFyZ3YsIGtleSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIChBcnJheS5pc0FycmF5KGFyZ3Zba2V5XSkgfHwgQXJyYXkuaXNBcnJheShwYXJzZWQuYXJndltrZXldKSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Zba2V5XSA9IFtdLmNvbmNhdChhcmd2W2tleV0sIHBhcnNlZC5hcmd2W2tleV0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJndltrZXldID0gcGFyc2VkLmFyZ3Zba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlzRGVmYXVsdGVkKHlhcmdzLCBrZXkpIHtcbiAgICAgICAgY29uc3QgeyBkZWZhdWx0OiBkZWZhdWx0cyB9ID0geWFyZ3MuZ2V0T3B0aW9ucygpO1xuICAgICAgICByZXR1cm4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkZWZhdWx0cywga2V5KSB8fFxuICAgICAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRlZmF1bHRzLCB0aGlzLnNoaW0uUGFyc2VyLmNhbWVsQ2FzZShrZXkpKSk7XG4gICAgfVxuICAgIGlzSW5Db25maWdzKHlhcmdzLCBrZXkpIHtcbiAgICAgICAgY29uc3QgeyBjb25maWdPYmplY3RzIH0gPSB5YXJncy5nZXRPcHRpb25zKCk7XG4gICAgICAgIHJldHVybiAoY29uZmlnT2JqZWN0cy5zb21lKGMgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGMsIGtleSkpIHx8XG4gICAgICAgICAgICBjb25maWdPYmplY3RzLnNvbWUoYyA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYywgdGhpcy5zaGltLlBhcnNlci5jYW1lbENhc2Uoa2V5KSkpKTtcbiAgICB9XG4gICAgcnVuRGVmYXVsdEJ1aWxkZXJPbih5YXJncykge1xuICAgICAgICBpZiAoIXRoaXMuZGVmYXVsdENvbW1hbmQpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGlmICh0aGlzLnNob3VsZFVwZGF0ZVVzYWdlKHlhcmdzKSkge1xuICAgICAgICAgICAgY29uc3QgY29tbWFuZFN0cmluZyA9IERFRkFVTFRfTUFSS0VSLnRlc3QodGhpcy5kZWZhdWx0Q29tbWFuZC5vcmlnaW5hbClcbiAgICAgICAgICAgICAgICA/IHRoaXMuZGVmYXVsdENvbW1hbmQub3JpZ2luYWxcbiAgICAgICAgICAgICAgICA6IHRoaXMuZGVmYXVsdENvbW1hbmQub3JpZ2luYWwucmVwbGFjZSgvXlteW1xcXTw+XSovLCAnJDAgJyk7XG4gICAgICAgICAgICB5YXJnc1xuICAgICAgICAgICAgICAgIC5nZXRJbnRlcm5hbE1ldGhvZHMoKVxuICAgICAgICAgICAgICAgIC5nZXRVc2FnZUluc3RhbmNlKClcbiAgICAgICAgICAgICAgICAudXNhZ2UoY29tbWFuZFN0cmluZywgdGhpcy5kZWZhdWx0Q29tbWFuZC5kZXNjcmlwdGlvbik7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnVpbGRlciA9IHRoaXMuZGVmYXVsdENvbW1hbmQuYnVpbGRlcjtcbiAgICAgICAgaWYgKGlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXIoeWFyZ3MsIHRydWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFpc0NvbW1hbmRCdWlsZGVyRGVmaW5pdGlvbihidWlsZGVyKSkge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoYnVpbGRlcikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIHlhcmdzLm9wdGlvbihrZXksIGJ1aWxkZXJba2V5XSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBleHRyYWN0RGVzYyh7IGRlc2NyaWJlLCBkZXNjcmlwdGlvbiwgZGVzYyB9KSB7XG4gICAgICAgIGZvciAoY29uc3QgdGVzdCBvZiBbZGVzY3JpYmUsIGRlc2NyaXB0aW9uLCBkZXNjXSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0ZXN0ID09PSAnc3RyaW5nJyB8fCB0ZXN0ID09PSBmYWxzZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdGVzdDtcbiAgICAgICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKHRlc3QsIHRydWUsIHRoaXMuc2hpbSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmcmVlemUoKSB7XG4gICAgICAgIHRoaXMuZnJvemVucy5wdXNoKHtcbiAgICAgICAgICAgIGhhbmRsZXJzOiB0aGlzLmhhbmRsZXJzLFxuICAgICAgICAgICAgYWxpYXNNYXA6IHRoaXMuYWxpYXNNYXAsXG4gICAgICAgICAgICBkZWZhdWx0Q29tbWFuZDogdGhpcy5kZWZhdWx0Q29tbWFuZCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHVuZnJlZXplKCkge1xuICAgICAgICBjb25zdCBmcm96ZW4gPSB0aGlzLmZyb3plbnMucG9wKCk7XG4gICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKGZyb3plbiwgdW5kZWZpbmVkLCB0aGlzLnNoaW0pO1xuICAgICAgICAoe1xuICAgICAgICAgICAgaGFuZGxlcnM6IHRoaXMuaGFuZGxlcnMsXG4gICAgICAgICAgICBhbGlhc01hcDogdGhpcy5hbGlhc01hcCxcbiAgICAgICAgICAgIGRlZmF1bHRDb21tYW5kOiB0aGlzLmRlZmF1bHRDb21tYW5kLFxuICAgICAgICB9ID0gZnJvemVuKTtcbiAgICB9XG4gICAgcmVzZXQoKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlcnMgPSB7fTtcbiAgICAgICAgdGhpcy5hbGlhc01hcCA9IHt9O1xuICAgICAgICB0aGlzLmRlZmF1bHRDb21tYW5kID0gdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnJlcXVpcmVDYWNoZSA9IG5ldyBTZXQoKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGNvbW1hbmQodXNhZ2UsIHZhbGlkYXRpb24sIGdsb2JhbE1pZGRsZXdhcmUsIHNoaW0pIHtcbiAgICByZXR1cm4gbmV3IENvbW1hbmRJbnN0YW5jZSh1c2FnZSwgdmFsaWRhdGlvbiwgZ2xvYmFsTWlkZGxld2FyZSwgc2hpbSk7XG59XG5leHBvcnQgZnVuY3Rpb24gaXNDb21tYW5kQnVpbGRlckRlZmluaXRpb24oYnVpbGRlcikge1xuICAgIHJldHVybiAodHlwZW9mIGJ1aWxkZXIgPT09ICdvYmplY3QnICYmXG4gICAgICAgICEhYnVpbGRlci5idWlsZGVyICYmXG4gICAgICAgIHR5cGVvZiBidWlsZGVyLmhhbmRsZXIgPT09ICdmdW5jdGlvbicpO1xufVxuZnVuY3Rpb24gaXNDb21tYW5kQW5kQWxpYXNlcyhjbWQpIHtcbiAgICByZXR1cm4gY21kLmV2ZXJ5KGMgPT4gdHlwZW9mIGMgPT09ICdzdHJpbmcnKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbW1hbmRCdWlsZGVyQ2FsbGJhY2soYnVpbGRlcikge1xuICAgIHJldHVybiB0eXBlb2YgYnVpbGRlciA9PT0gJ2Z1bmN0aW9uJztcbn1cbmZ1bmN0aW9uIGlzQ29tbWFuZEJ1aWxkZXJPcHRpb25EZWZpbml0aW9ucyhidWlsZGVyKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBidWlsZGVyID09PSAnb2JqZWN0Jztcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0NvbW1hbmRIYW5kbGVyRGVmaW5pdGlvbihjbWQpIHtcbiAgICByZXR1cm4gdHlwZW9mIGNtZCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkoY21kKTtcbn1cbiIsInZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0ID0gKHRoaXMgJiYgdGhpcy5fX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KSB8fCBmdW5jdGlvbiAocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcbn07XG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZEdldCA9ICh0aGlzICYmIHRoaXMuX19jbGFzc1ByaXZhdGVGaWVsZEdldCkgfHwgZnVuY3Rpb24gKHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xufTtcbnZhciBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBfWWFyZ3NJbnN0YW5jZV9jd2QsIF9ZYXJnc0luc3RhbmNlX2NvbnRleHQsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb24sIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb25Db21tYW5kLCBfWWFyZ3NJbnN0YW5jZV9kZWZhdWx0U2hvd0hpZGRlbk9wdCwgX1lhcmdzSW5zdGFuY2VfZXhpdEVycm9yLCBfWWFyZ3NJbnN0YW5jZV9kZXRlY3RMb2NhbGUsIF9ZYXJnc0luc3RhbmNlX2VtaXR0ZWRXYXJuaW5ncywgX1lhcmdzSW5zdGFuY2VfZXhpdFByb2Nlc3MsIF9ZYXJnc0luc3RhbmNlX2Zyb3plbnMsIF9ZYXJnc0luc3RhbmNlX2dsb2JhbE1pZGRsZXdhcmUsIF9ZYXJnc0luc3RhbmNlX2dyb3VwcywgX1lhcmdzSW5zdGFuY2VfaGFzT3V0cHV0LCBfWWFyZ3NJbnN0YW5jZV9oZWxwT3B0LCBfWWFyZ3NJbnN0YW5jZV9pc0dsb2JhbENvbnRleHQsIF9ZYXJnc0luc3RhbmNlX2xvZ2dlciwgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBfWWFyZ3NJbnN0YW5jZV9wYXJlbnRSZXF1aXJlLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZXJDb25maWcsIF9ZYXJnc0luc3RhbmNlX3BhcnNlRm4sIF9ZYXJnc0luc3RhbmNlX3BhcnNlQ29udGV4dCwgX1lhcmdzSW5zdGFuY2VfcGtncywgX1lhcmdzSW5zdGFuY2VfcHJlc2VydmVkR3JvdXBzLCBfWWFyZ3NJbnN0YW5jZV9wcm9jZXNzQXJncywgX1lhcmdzSW5zdGFuY2VfcmVjb21tZW5kQ29tbWFuZHMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIF9ZYXJnc0luc3RhbmNlX3N0cmljdCwgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0Q29tbWFuZHMsIF9ZYXJnc0luc3RhbmNlX3N0cmljdE9wdGlvbnMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBfWWFyZ3NJbnN0YW5jZV91c2FnZUNvbmZpZywgX1lhcmdzSW5zdGFuY2VfdmVyc2lvbk9wdCwgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbjtcbmltcG9ydCB7IGNvbW1hbmQgYXMgQ29tbWFuZCwgfSBmcm9tICcuL2NvbW1hbmQuanMnO1xuaW1wb3J0IHsgYXNzZXJ0Tm90U3RyaWN0RXF1YWwsIGFzc2VydFNpbmdsZUtleSwgb2JqZWN0S2V5cywgfSBmcm9tICcuL3R5cGluZ3MvY29tbW9uLXR5cGVzLmpzJztcbmltcG9ydCB7IFlFcnJvciB9IGZyb20gJy4veWVycm9yLmpzJztcbmltcG9ydCB7IHVzYWdlIGFzIFVzYWdlIH0gZnJvbSAnLi91c2FnZS5qcyc7XG5pbXBvcnQgeyBhcmdzZXJ0IH0gZnJvbSAnLi9hcmdzZXJ0LmpzJztcbmltcG9ydCB7IGNvbXBsZXRpb24gYXMgQ29tcGxldGlvbiwgfSBmcm9tICcuL2NvbXBsZXRpb24uanMnO1xuaW1wb3J0IHsgdmFsaWRhdGlvbiBhcyBWYWxpZGF0aW9uLCB9IGZyb20gJy4vdmFsaWRhdGlvbi5qcyc7XG5pbXBvcnQgeyBvYmpGaWx0ZXIgfSBmcm9tICcuL3V0aWxzL29iai1maWx0ZXIuanMnO1xuaW1wb3J0IHsgYXBwbHlFeHRlbmRzIH0gZnJvbSAnLi91dGlscy9hcHBseS1leHRlbmRzLmpzJztcbmltcG9ydCB7IGFwcGx5TWlkZGxld2FyZSwgR2xvYmFsTWlkZGxld2FyZSwgfSBmcm9tICcuL21pZGRsZXdhcmUuanMnO1xuaW1wb3J0IHsgaXNQcm9taXNlIH0gZnJvbSAnLi91dGlscy9pcy1wcm9taXNlLmpzJztcbmltcG9ydCB7IG1heWJlQXN5bmNSZXN1bHQgfSBmcm9tICcuL3V0aWxzL21heWJlLWFzeW5jLXJlc3VsdC5qcyc7XG5pbXBvcnQgc2V0QmxvY2tpbmcgZnJvbSAnLi91dGlscy9zZXQtYmxvY2tpbmcuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIFlhcmdzRmFjdG9yeShfc2hpbSkge1xuICAgIHJldHVybiAocHJvY2Vzc0FyZ3MgPSBbXSwgY3dkID0gX3NoaW0ucHJvY2Vzcy5jd2QoKSwgcGFyZW50UmVxdWlyZSkgPT4ge1xuICAgICAgICBjb25zdCB5YXJncyA9IG5ldyBZYXJnc0luc3RhbmNlKHByb2Nlc3NBcmdzLCBjd2QsIHBhcmVudFJlcXVpcmUsIF9zaGltKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHlhcmdzLCAnYXJndicsIHtcbiAgICAgICAgICAgIGdldDogKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB5YXJncy5wYXJzZSgpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgICB5YXJncy5oZWxwKCk7XG4gICAgICAgIHlhcmdzLnZlcnNpb24oKTtcbiAgICAgICAgcmV0dXJuIHlhcmdzO1xuICAgIH07XG59XG5jb25zdCBrQ29weURvdWJsZURhc2ggPSBTeW1ib2woJ2NvcHlEb3VibGVEYXNoJyk7XG5jb25zdCBrQ3JlYXRlTG9nZ2VyID0gU3ltYm9sKCdjb3B5RG91YmxlRGFzaCcpO1xuY29uc3Qga0RlbGV0ZUZyb21QYXJzZXJIaW50T2JqZWN0ID0gU3ltYm9sKCdkZWxldGVGcm9tUGFyc2VySGludE9iamVjdCcpO1xuY29uc3Qga0VtaXRXYXJuaW5nID0gU3ltYm9sKCdlbWl0V2FybmluZycpO1xuY29uc3Qga0ZyZWV6ZSA9IFN5bWJvbCgnZnJlZXplJyk7XG5jb25zdCBrR2V0RG9sbGFyWmVybyA9IFN5bWJvbCgnZ2V0RG9sbGFyWmVybycpO1xuY29uc3Qga0dldFBhcnNlckNvbmZpZ3VyYXRpb24gPSBTeW1ib2woJ2dldFBhcnNlckNvbmZpZ3VyYXRpb24nKTtcbmNvbnN0IGtHZXRVc2FnZUNvbmZpZ3VyYXRpb24gPSBTeW1ib2woJ2dldFVzYWdlQ29uZmlndXJhdGlvbicpO1xuY29uc3Qga0d1ZXNzTG9jYWxlID0gU3ltYm9sKCdndWVzc0xvY2FsZScpO1xuY29uc3Qga0d1ZXNzVmVyc2lvbiA9IFN5bWJvbCgnZ3Vlc3NWZXJzaW9uJyk7XG5jb25zdCBrUGFyc2VQb3NpdGlvbmFsTnVtYmVycyA9IFN5bWJvbCgncGFyc2VQb3NpdGlvbmFsTnVtYmVycycpO1xuY29uc3Qga1BrZ1VwID0gU3ltYm9sKCdwa2dVcCcpO1xuY29uc3Qga1BvcHVsYXRlUGFyc2VySGludEFycmF5ID0gU3ltYm9sKCdwb3B1bGF0ZVBhcnNlckhpbnRBcnJheScpO1xuY29uc3Qga1BvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeSA9IFN5bWJvbCgncG9wdWxhdGVQYXJzZXJIaW50U2luZ2xlVmFsdWVEaWN0aW9uYXJ5Jyk7XG5jb25zdCBrUG9wdWxhdGVQYXJzZXJIaW50QXJyYXlEaWN0aW9uYXJ5ID0gU3ltYm9sKCdwb3B1bGF0ZVBhcnNlckhpbnRBcnJheURpY3Rpb25hcnknKTtcbmNvbnN0IGtQb3B1bGF0ZVBhcnNlckhpbnREaWN0aW9uYXJ5ID0gU3ltYm9sKCdwb3B1bGF0ZVBhcnNlckhpbnREaWN0aW9uYXJ5Jyk7XG5jb25zdCBrU2FuaXRpemVLZXkgPSBTeW1ib2woJ3Nhbml0aXplS2V5Jyk7XG5jb25zdCBrU2V0S2V5ID0gU3ltYm9sKCdzZXRLZXknKTtcbmNvbnN0IGtVbmZyZWV6ZSA9IFN5bWJvbCgndW5mcmVlemUnKTtcbmNvbnN0IGtWYWxpZGF0ZUFzeW5jID0gU3ltYm9sKCd2YWxpZGF0ZUFzeW5jJyk7XG5jb25zdCBrR2V0Q29tbWFuZEluc3RhbmNlID0gU3ltYm9sKCdnZXRDb21tYW5kSW5zdGFuY2UnKTtcbmNvbnN0IGtHZXRDb250ZXh0ID0gU3ltYm9sKCdnZXRDb250ZXh0Jyk7XG5jb25zdCBrR2V0SGFzT3V0cHV0ID0gU3ltYm9sKCdnZXRIYXNPdXRwdXQnKTtcbmNvbnN0IGtHZXRMb2dnZXJJbnN0YW5jZSA9IFN5bWJvbCgnZ2V0TG9nZ2VySW5zdGFuY2UnKTtcbmNvbnN0IGtHZXRQYXJzZUNvbnRleHQgPSBTeW1ib2woJ2dldFBhcnNlQ29udGV4dCcpO1xuY29uc3Qga0dldFVzYWdlSW5zdGFuY2UgPSBTeW1ib2woJ2dldFVzYWdlSW5zdGFuY2UnKTtcbmNvbnN0IGtHZXRWYWxpZGF0aW9uSW5zdGFuY2UgPSBTeW1ib2woJ2dldFZhbGlkYXRpb25JbnN0YW5jZScpO1xuY29uc3Qga0hhc1BhcnNlQ2FsbGJhY2sgPSBTeW1ib2woJ2hhc1BhcnNlQ2FsbGJhY2snKTtcbmNvbnN0IGtJc0dsb2JhbENvbnRleHQgPSBTeW1ib2woJ2lzR2xvYmFsQ29udGV4dCcpO1xuY29uc3Qga1Bvc3RQcm9jZXNzID0gU3ltYm9sKCdwb3N0UHJvY2VzcycpO1xuY29uc3Qga1JlYmFzZSA9IFN5bWJvbCgncmViYXNlJyk7XG5jb25zdCBrUmVzZXQgPSBTeW1ib2woJ3Jlc2V0Jyk7XG5jb25zdCBrUnVuWWFyZ3NQYXJzZXJBbmRFeGVjdXRlQ29tbWFuZHMgPSBTeW1ib2woJ3J1bllhcmdzUGFyc2VyQW5kRXhlY3V0ZUNvbW1hbmRzJyk7XG5jb25zdCBrUnVuVmFsaWRhdGlvbiA9IFN5bWJvbCgncnVuVmFsaWRhdGlvbicpO1xuY29uc3Qga1NldEhhc091dHB1dCA9IFN5bWJvbCgnc2V0SGFzT3V0cHV0Jyk7XG5jb25zdCBrVHJhY2tNYW51YWxseVNldEtleXMgPSBTeW1ib2woJ2tUcmFja01hbnVhbGx5U2V0S2V5cycpO1xuY29uc3QgREVGQVVMVF9MT0NBTEUgPSAnZW5fVVMnO1xuZXhwb3J0IGNsYXNzIFlhcmdzSW5zdGFuY2Uge1xuICAgIGNvbnN0cnVjdG9yKHByb2Nlc3NBcmdzID0gW10sIGN3ZCwgcGFyZW50UmVxdWlyZSwgc2hpbSkge1xuICAgICAgICB0aGlzLmN1c3RvbVNjcmlwdE5hbWUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wYXJzZWQgPSBmYWxzZTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfY29tbWFuZC5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfY3dkLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9jb250ZXh0LnNldCh0aGlzLCB7IGNvbW1hbmRzOiBbXSwgZnVsbENvbW1hbmRzOiBbXSB9KTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbi5zZXQodGhpcywgbnVsbCk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb25Db21tYW5kLnNldCh0aGlzLCBudWxsKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfZGVmYXVsdFNob3dIaWRkZW5PcHQuc2V0KHRoaXMsICdzaG93LWhpZGRlbicpO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9leGl0RXJyb3Iuc2V0KHRoaXMsIG51bGwpO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9kZXRlY3RMb2NhbGUuc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9lbWl0dGVkV2FybmluZ3Muc2V0KHRoaXMsIHt9KTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfZXhpdFByb2Nlc3Muc2V0KHRoaXMsIHRydWUpO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9mcm96ZW5zLnNldCh0aGlzLCBbXSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX2dsb2JhbE1pZGRsZXdhcmUuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX2dyb3Vwcy5zZXQodGhpcywge30pO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9oYXNPdXRwdXQuc2V0KHRoaXMsIGZhbHNlKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfaGVscE9wdC5zZXQodGhpcywgbnVsbCk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX2lzR2xvYmFsQ29udGV4dC5zZXQodGhpcywgdHJ1ZSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX2xvZ2dlci5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LnNldCh0aGlzLCAnJyk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX3BhcmVudFJlcXVpcmUuc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX3BhcnNlckNvbmZpZy5zZXQodGhpcywge30pO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9wYXJzZUZuLnNldCh0aGlzLCBudWxsKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfcGFyc2VDb250ZXh0LnNldCh0aGlzLCBudWxsKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfcGtncy5zZXQodGhpcywge30pO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9wcmVzZXJ2ZWRHcm91cHMuc2V0KHRoaXMsIHt9KTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfcHJvY2Vzc0FyZ3Muc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX3JlY29tbWVuZENvbW1hbmRzLnNldCh0aGlzLCBmYWxzZSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX3NoaW0uc2V0KHRoaXMsIHZvaWQgMCk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX3N0cmljdC5zZXQodGhpcywgZmFsc2UpO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9zdHJpY3RDb21tYW5kcy5zZXQodGhpcywgZmFsc2UpO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV9zdHJpY3RPcHRpb25zLnNldCh0aGlzLCBmYWxzZSk7XG4gICAgICAgIF9ZYXJnc0luc3RhbmNlX3VzYWdlLnNldCh0aGlzLCB2b2lkIDApO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV91c2FnZUNvbmZpZy5zZXQodGhpcywge30pO1xuICAgICAgICBfWWFyZ3NJbnN0YW5jZV92ZXJzaW9uT3B0LnNldCh0aGlzLCBudWxsKTtcbiAgICAgICAgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbi5zZXQodGhpcywgdm9pZCAwKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBzaGltLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcHJvY2Vzc0FyZ3MsIHByb2Nlc3NBcmdzLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY3dkLCBjd2QsIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wYXJlbnRSZXF1aXJlLCBwYXJlbnRSZXF1aXJlLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ2xvYmFsTWlkZGxld2FyZSwgbmV3IEdsb2JhbE1pZGRsZXdhcmUodGhpcyksIFwiZlwiKTtcbiAgICAgICAgdGhpcy4kMCA9IHRoaXNba0dldERvbGxhclplcm9dKCk7XG4gICAgICAgIHRoaXNba1Jlc2V0XSgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgXCJmXCIpLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIiksIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuc2hvd0hpZGRlbk9wdCA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZGVmYXVsdFNob3dIaWRkZW5PcHQsIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9sb2dnZXIsIHRoaXNba0NyZWF0ZUxvZ2dlcl0oKSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS55MThuLnNldExvY2FsZShERUZBVUxUX0xPQ0FMRSk7XG4gICAgfVxuICAgIGFkZEhlbHBPcHQob3B0LCBtc2cpIHtcbiAgICAgICAgY29uc3QgZGVmYXVsdEhlbHBPcHQgPSAnaGVscCc7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmd8Ym9vbGVhbl0gW3N0cmluZ10nLCBbb3B0LCBtc2ddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGVscE9wdCwgXCJmXCIpKSB7XG4gICAgICAgICAgICB0aGlzW2tEZWxldGVGcm9tUGFyc2VySGludE9iamVjdF0oX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oZWxwT3B0LCBcImZcIikpO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oZWxwT3B0LCBudWxsLCBcImZcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdCA9PT0gZmFsc2UgJiYgbXNnID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oZWxwT3B0LCB0eXBlb2Ygb3B0ID09PSAnc3RyaW5nJyA/IG9wdCA6IGRlZmF1bHRIZWxwT3B0LCBcImZcIik7XG4gICAgICAgIHRoaXMuYm9vbGVhbihfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hlbHBPcHQsIFwiZlwiKSk7XG4gICAgICAgIHRoaXMuZGVzY3JpYmUoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oZWxwT3B0LCBcImZcIiksIG1zZyB8fCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuZGVmZXJZMThuTG9va3VwKCdTaG93IGhlbHAnKSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBoZWxwKG9wdCwgbXNnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFkZEhlbHBPcHQob3B0LCBtc2cpO1xuICAgIH1cbiAgICBhZGRTaG93SGlkZGVuT3B0KG9wdCwgbXNnKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmd8Ym9vbGVhbl0gW3N0cmluZ10nLCBbb3B0LCBtc2ddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKG9wdCA9PT0gZmFsc2UgJiYgbXNnID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgY29uc3Qgc2hvd0hpZGRlbk9wdCA9IHR5cGVvZiBvcHQgPT09ICdzdHJpbmcnID8gb3B0IDogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9kZWZhdWx0U2hvd0hpZGRlbk9wdCwgXCJmXCIpO1xuICAgICAgICB0aGlzLmJvb2xlYW4oc2hvd0hpZGRlbk9wdCk7XG4gICAgICAgIHRoaXMuZGVzY3JpYmUoc2hvd0hpZGRlbk9wdCwgbXNnIHx8IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5kZWZlclkxOG5Mb29rdXAoJ1Nob3cgaGlkZGVuIG9wdGlvbnMnKSk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLnNob3dIaWRkZW5PcHQgPSBzaG93SGlkZGVuT3B0O1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc2hvd0hpZGRlbihvcHQsIG1zZykge1xuICAgICAgICByZXR1cm4gdGhpcy5hZGRTaG93SGlkZGVuT3B0KG9wdCwgbXNnKTtcbiAgICB9XG4gICAgYWxpYXMoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0fHN0cmluZ3xhcnJheT4gW3N0cmluZ3xhcnJheV0nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB0aGlzW2tQb3B1bGF0ZVBhcnNlckhpbnRBcnJheURpY3Rpb25hcnldKHRoaXMuYWxpYXMuYmluZCh0aGlzKSwgJ2FsaWFzJywga2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBhcnJheShrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdGhpc1trUG9wdWxhdGVQYXJzZXJIaW50QXJyYXldKCdhcnJheScsIGtleXMpO1xuICAgICAgICB0aGlzW2tUcmFja01hbnVhbGx5U2V0S2V5c10oa2V5cyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBib29sZWFuKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZz4nLCBba2V5c10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB0aGlzW2tQb3B1bGF0ZVBhcnNlckhpbnRBcnJheV0oJ2Jvb2xlYW4nLCBrZXlzKTtcbiAgICAgICAgdGhpc1trVHJhY2tNYW51YWxseVNldEtleXNdKGtleXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY2hlY2soZiwgZ2xvYmFsKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxmdW5jdGlvbj4gW2Jvb2xlYW5dJywgW2YsIGdsb2JhbF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB0aGlzLm1pZGRsZXdhcmUoKGFyZ3YsIF95YXJncykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG1heWJlQXN5bmNSZXN1bHQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBmKGFyZ3YsIF95YXJncy5nZXRPcHRpb25zKCkpO1xuICAgICAgICAgICAgfSwgKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5mYWlsKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnkxOG4uX18oJ0FyZ3VtZW50IGNoZWNrIGZhaWxlZDogJXMnLCBmLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycgfHwgcmVzdWx0IGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmZhaWwocmVzdWx0LnRvU3RyaW5nKCksIHJlc3VsdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICAgICAgfSwgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5mYWlsKGVyci5tZXNzYWdlID8gZXJyLm1lc3NhZ2UgOiBlcnIudG9TdHJpbmcoKSwgZXJyKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJndjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmYWxzZSwgZ2xvYmFsKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGNob2ljZXMoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0fHN0cmluZ3xhcnJheT4gW3N0cmluZ3xhcnJheV0nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB0aGlzW2tQb3B1bGF0ZVBhcnNlckhpbnRBcnJheURpY3Rpb25hcnldKHRoaXMuY2hvaWNlcy5iaW5kKHRoaXMpLCAnY2hvaWNlcycsIGtleSwgdmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY29lcmNlKGtleXMsIHZhbHVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3R8c3RyaW5nfGFycmF5PiBbZnVuY3Rpb25dJywgW2tleXMsIHZhbHVlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleXMpKSB7XG4gICAgICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcignY29lcmNlIGNhbGxiYWNrIG11c3QgYmUgcHJvdmlkZWQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvZXJjZShrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBrZXlzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoa2V5cykpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvZXJjZShrZXksIGtleXNba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXZhbHVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgWUVycm9yKCdjb2VyY2UgY2FsbGJhY2sgbXVzdCBiZSBwcm92aWRlZCcpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNvZXJjZUtleSA9IGtleXM7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmtleVtjb2VyY2VLZXldID0gdHJ1ZTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9nbG9iYWxNaWRkbGV3YXJlLCBcImZcIikuYWRkQ29lcmNlTWlkZGxld2FyZSgoYXJndiwgeWFyZ3MpID0+IHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIGNvbnN0IGNvZXJjZUtleUFsaWFzZXMgPSAoX2EgPSB5YXJncy5nZXRBbGlhc2VzKClbY29lcmNlS2V5XSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogW107XG4gICAgICAgICAgICBjb25zdCBhcmd2S2V5cyA9IFtjb2VyY2VLZXksIC4uLmNvZXJjZUtleUFsaWFzZXNdLmZpbHRlcihrZXkgPT4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFyZ3YsIGtleSkpO1xuICAgICAgICAgICAgaWYgKGFyZ3ZLZXlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG1heWJlQXN5bmNSZXN1bHQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZShhcmd2W2FyZ3ZLZXlzWzBdXSk7XG4gICAgICAgICAgICB9LCAocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgYXJndktleXMuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhcmd2W2tleV0gPSByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgICAgICAgICB9LCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFlFcnJvcihlcnIubWVzc2FnZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSwgY29lcmNlS2V5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGNvbmZsaWN0cyhrZXkxLCBrZXkyKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8b2JqZWN0PiBbc3RyaW5nfGFycmF5XScsIFtrZXkxLCBrZXkyXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgXCJmXCIpLmNvbmZsaWN0cyhrZXkxLCBrZXkyKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGNvbmZpZyhrZXkgPSAnY29uZmlnJywgbXNnLCBwYXJzZUZuKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tvYmplY3R8c3RyaW5nXSBbc3RyaW5nfGZ1bmN0aW9uXSBbZnVuY3Rpb25dJywgW2tleSwgbXNnLCBwYXJzZUZuXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICh0eXBlb2Yga2V5ID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShrZXkpKSB7XG4gICAgICAgICAgICBrZXkgPSBhcHBseUV4dGVuZHMoa2V5LCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2N3ZCwgXCJmXCIpLCB0aGlzW2tHZXRQYXJzZXJDb25maWd1cmF0aW9uXSgpWydkZWVwLW1lcmdlLWNvbmZpZyddIHx8IGZhbHNlLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKSk7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5jb25maWdPYmplY3RzID0gKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmNvbmZpZ09iamVjdHMgfHwgW10pLmNvbmNhdChrZXkpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBtc2cgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHBhcnNlRm4gPSBtc2c7XG4gICAgICAgICAgICBtc2cgPSB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kZXNjcmliZShrZXksIG1zZyB8fCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuZGVmZXJZMThuTG9va3VwKCdQYXRoIHRvIEpTT04gY29uZmlnIGZpbGUnKSk7XG4gICAgICAgIChBcnJheS5pc0FycmF5KGtleSkgPyBrZXkgOiBba2V5XSkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmNvbmZpZ1trXSA9IHBhcnNlRm4gfHwgdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBjb21wbGV0aW9uKGNtZCwgZGVzYywgZm4pIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ10gW3N0cmluZ3xib29sZWFufGZ1bmN0aW9uXSBbZnVuY3Rpb25dJywgW2NtZCwgZGVzYywgZm5dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBkZXNjID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBmbiA9IGRlc2M7XG4gICAgICAgICAgICBkZXNjID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbkNvbW1hbmQsIGNtZCB8fCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb25Db21tYW5kLCBcImZcIikgfHwgJ2NvbXBsZXRpb24nLCBcImZcIik7XG4gICAgICAgIGlmICghZGVzYyAmJiBkZXNjICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgZGVzYyA9ICdnZW5lcmF0ZSBjb21wbGV0aW9uIHNjcmlwdCc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb21tYW5kKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbkNvbW1hbmQsIFwiZlwiKSwgZGVzYyk7XG4gICAgICAgIGlmIChmbilcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbiwgXCJmXCIpLnJlZ2lzdGVyRnVuY3Rpb24oZm4pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY29tbWFuZChjbWQsIGRlc2NyaXB0aW9uLCBidWlsZGVyLCBoYW5kbGVyLCBtaWRkbGV3YXJlcywgZGVwcmVjYXRlZCkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfGFycmF5fG9iamVjdD4gW3N0cmluZ3xib29sZWFuXSBbZnVuY3Rpb258b2JqZWN0XSBbZnVuY3Rpb25dIFthcnJheV0gW2Jvb2xlYW58c3RyaW5nXScsIFtjbWQsIGRlc2NyaXB0aW9uLCBidWlsZGVyLCBoYW5kbGVyLCBtaWRkbGV3YXJlcywgZGVwcmVjYXRlZF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIFwiZlwiKS5hZGRIYW5kbGVyKGNtZCwgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIsIG1pZGRsZXdhcmVzLCBkZXByZWNhdGVkKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGNvbW1hbmRzKGNtZCwgZGVzY3JpcHRpb24sIGJ1aWxkZXIsIGhhbmRsZXIsIG1pZGRsZXdhcmVzLCBkZXByZWNhdGVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbW1hbmQoY21kLCBkZXNjcmlwdGlvbiwgYnVpbGRlciwgaGFuZGxlciwgbWlkZGxld2FyZXMsIGRlcHJlY2F0ZWQpO1xuICAgIH1cbiAgICBjb21tYW5kRGlyKGRpciwgb3B0cykge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nPiBbb2JqZWN0XScsIFtkaXIsIG9wdHNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgY29uc3QgcmVxID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wYXJlbnRSZXF1aXJlLCBcImZcIikgfHwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikucmVxdWlyZTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBcImZcIikuYWRkRGlyZWN0b3J5KGRpciwgcmVxLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5nZXRDYWxsZXJGaWxlKCksIG9wdHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgY291bnQoa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHRoaXNba1BvcHVsYXRlUGFyc2VySGludEFycmF5XSgnY291bnQnLCBrZXlzKTtcbiAgICAgICAgdGhpc1trVHJhY2tNYW51YWxseVNldEtleXNdKGtleXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGVmYXVsdChrZXksIHZhbHVlLCBkZWZhdWx0RGVzY3JpcHRpb24pIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFsqXSBbc3RyaW5nXScsIFtrZXksIHZhbHVlLCBkZWZhdWx0RGVzY3JpcHRpb25dLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKGRlZmF1bHREZXNjcmlwdGlvbikge1xuICAgICAgICAgICAgYXNzZXJ0U2luZ2xlS2V5KGtleSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikpO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuZGVmYXVsdERlc2NyaXB0aW9uW2tleV0gPSBkZWZhdWx0RGVzY3JpcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgYXNzZXJ0U2luZ2xlS2V5KGtleSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikpO1xuICAgICAgICAgICAgaWYgKCFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5kZWZhdWx0RGVzY3JpcHRpb25ba2V5XSlcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5kZWZhdWx0RGVzY3JpcHRpb25ba2V5XSA9XG4gICAgICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5mdW5jdGlvbkRlc2NyaXB0aW9uKHZhbHVlKTtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUuY2FsbCgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXNba1BvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeV0odGhpcy5kZWZhdWx0LmJpbmQodGhpcyksICdkZWZhdWx0Jywga2V5LCB2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkZWZhdWx0cyhrZXksIHZhbHVlLCBkZWZhdWx0RGVzY3JpcHRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGVmYXVsdChrZXksIHZhbHVlLCBkZWZhdWx0RGVzY3JpcHRpb24pO1xuICAgIH1cbiAgICBkZW1hbmRDb21tYW5kKG1pbiA9IDEsIG1heCwgbWluTXNnLCBtYXhNc2cpIHtcbiAgICAgICAgYXJnc2VydCgnW251bWJlcl0gW251bWJlcnxzdHJpbmddIFtzdHJpbmd8bnVsbHx1bmRlZmluZWRdIFtzdHJpbmd8bnVsbHx1bmRlZmluZWRdJywgW21pbiwgbWF4LCBtaW5Nc2csIG1heE1zZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIG1heCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIG1pbk1zZyA9IG1heDtcbiAgICAgICAgICAgIG1heCA9IEluZmluaXR5O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZ2xvYmFsKCdfJywgZmFsc2UpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5kZW1hbmRlZENvbW1hbmRzLl8gPSB7XG4gICAgICAgICAgICBtaW4sXG4gICAgICAgICAgICBtYXgsXG4gICAgICAgICAgICBtaW5Nc2csXG4gICAgICAgICAgICBtYXhNc2csXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkZW1hbmQoa2V5cywgbWF4LCBtc2cpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWF4KSkge1xuICAgICAgICAgICAgbWF4LmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChtc2csIHRydWUsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbWFuZE9wdGlvbihrZXksIG1zZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIG1heCA9IEluZmluaXR5O1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHR5cGVvZiBtYXggIT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBtc2cgPSBtYXg7XG4gICAgICAgICAgICBtYXggPSBJbmZpbml0eTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGtleXMgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChtc2csIHRydWUsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpKTtcbiAgICAgICAgICAgIHRoaXMuZGVtYW5kQ29tbWFuZChrZXlzLCBtYXgsIG1zZywgbXNnKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleXMpKSB7XG4gICAgICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChtc2csIHRydWUsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpKTtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbWFuZE9wdGlvbihrZXksIG1zZyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbXNnID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVtYW5kT3B0aW9uKGtleXMsIG1zZyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChtc2cgPT09IHRydWUgfHwgdHlwZW9mIG1zZyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbWFuZE9wdGlvbihrZXlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGVtYW5kT3B0aW9uKGtleXMsIG1zZykge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0fHN0cmluZ3xhcnJheT4gW3N0cmluZ10nLCBba2V5cywgbXNnXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHRoaXNba1BvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeV0odGhpcy5kZW1hbmRPcHRpb24uYmluZCh0aGlzKSwgJ2RlbWFuZGVkT3B0aW9ucycsIGtleXMsIG1zZyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkZXByZWNhdGVPcHRpb24ob3B0aW9uLCBtZXNzYWdlKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmc+IFtzdHJpbmd8Ym9vbGVhbl0nLCBbb3B0aW9uLCBtZXNzYWdlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmRlcHJlY2F0ZWRPcHRpb25zW29wdGlvbl0gPSBtZXNzYWdlO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZGVzY3JpYmUoa2V5cywgZGVzY3JpcHRpb24pIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdHxzdHJpbmd8YXJyYXk+IFtzdHJpbmddJywgW2tleXMsIGRlc2NyaXB0aW9uXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHRoaXNba1NldEtleV0oa2V5cywgdHJ1ZSk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5kZXNjcmliZShrZXlzLCBkZXNjcmlwdGlvbik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBkZXRlY3RMb2NhbGUoZGV0ZWN0KSB7XG4gICAgICAgIGFyZ3NlcnQoJzxib29sZWFuPicsIFtkZXRlY3RdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9kZXRlY3RMb2NhbGUsIGRldGVjdCwgXCJmXCIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZW52KHByZWZpeCkge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nfGJvb2xlYW5dJywgW3ByZWZpeF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAocHJlZml4ID09PSBmYWxzZSlcbiAgICAgICAgICAgIGRlbGV0ZSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5lbnZQcmVmaXg7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmVudlByZWZpeCA9IHByZWZpeCB8fCAnJztcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGVwaWxvZ3VlKG1zZykge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nPicsIFttc2ddLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmVwaWxvZyhtc2cpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZXBpbG9nKG1zZykge1xuICAgICAgICByZXR1cm4gdGhpcy5lcGlsb2d1ZShtc2cpO1xuICAgIH1cbiAgICBleGFtcGxlKGNtZCwgZGVzY3JpcHRpb24pIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xhcnJheT4gW3N0cmluZ10nLCBbY21kLCBkZXNjcmlwdGlvbl0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjbWQpKSB7XG4gICAgICAgICAgICBjbWQuZm9yRWFjaChleGFtcGxlUGFyYW1zID0+IHRoaXMuZXhhbXBsZSguLi5leGFtcGxlUGFyYW1zKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuZXhhbXBsZShjbWQsIGRlc2NyaXB0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgZXhpdChjb2RlLCBlcnIpIHtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oYXNPdXRwdXQsIHRydWUsIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9leGl0RXJyb3IsIGVyciwgXCJmXCIpO1xuICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9leGl0UHJvY2VzcywgXCJmXCIpKVxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikucHJvY2Vzcy5leGl0KGNvZGUpO1xuICAgIH1cbiAgICBleGl0UHJvY2VzcyhlbmFibGVkID0gdHJ1ZSkge1xuICAgICAgICBhcmdzZXJ0KCdbYm9vbGVhbl0nLCBbZW5hYmxlZF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2V4aXRQcm9jZXNzLCBlbmFibGVkLCBcImZcIik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBmYWlsKGYpIHtcbiAgICAgICAgYXJnc2VydCgnPGZ1bmN0aW9ufGJvb2xlYW4+JywgW2ZdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBmID09PSAnYm9vbGVhbicgJiYgZiAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IoXCJJbnZhbGlkIGZpcnN0IGFyZ3VtZW50LiBFeHBlY3RlZCBmdW5jdGlvbiBvciBib29sZWFuICdmYWxzZSdcIik7XG4gICAgICAgIH1cbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmZhaWxGbihmKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGdldEFsaWFzZXMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlZCA/IHRoaXMucGFyc2VkLmFsaWFzZXMgOiB7fTtcbiAgICB9XG4gICAgYXN5bmMgZ2V0Q29tcGxldGlvbihhcmdzLCBkb25lKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheT4gW2Z1bmN0aW9uXScsIFthcmdzLCBkb25lXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmICghZG9uZSkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb24sIFwiZlwiKS5nZXRDb21wbGV0aW9uKGFyZ3MsIChlcnIsIGNvbXBsZXRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjb21wbGV0aW9ucyk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb24sIFwiZlwiKS5nZXRDb21wbGV0aW9uKGFyZ3MsIGRvbmUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldERlbWFuZGVkT3B0aW9ucygpIHtcbiAgICAgICAgYXJnc2VydChbXSwgMCk7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5kZW1hbmRlZE9wdGlvbnM7XG4gICAgfVxuICAgIGdldERlbWFuZGVkQ29tbWFuZHMoKSB7XG4gICAgICAgIGFyZ3NlcnQoW10sIDApO1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuZGVtYW5kZWRDb21tYW5kcztcbiAgICB9XG4gICAgZ2V0RGVwcmVjYXRlZE9wdGlvbnMoKSB7XG4gICAgICAgIGFyZ3NlcnQoW10sIDApO1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuZGVwcmVjYXRlZE9wdGlvbnM7XG4gICAgfVxuICAgIGdldERldGVjdExvY2FsZSgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZGV0ZWN0TG9jYWxlLCBcImZcIik7XG4gICAgfVxuICAgIGdldEV4aXRQcm9jZXNzKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9leGl0UHJvY2VzcywgXCJmXCIpO1xuICAgIH1cbiAgICBnZXRHcm91cHMoKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2dyb3VwcywgXCJmXCIpLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ByZXNlcnZlZEdyb3VwcywgXCJmXCIpKTtcbiAgICB9XG4gICAgZ2V0SGVscCgpIHtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oYXNPdXRwdXQsIHRydWUsIFwiZlwiKTtcbiAgICAgICAgaWYgKCFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuaGFzQ2FjaGVkSGVscE1lc3NhZ2UoKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBhcnNlZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlID0gdGhpc1trUnVuWWFyZ3NQYXJzZXJBbmRFeGVjdXRlQ29tbWFuZHNdKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcHJvY2Vzc0FyZ3MsIFwiZlwiKSwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIDAsIHRydWUpO1xuICAgICAgICAgICAgICAgIGlmIChpc1Byb21pc2UocGFyc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuaGVscCgpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBidWlsZGVyUmVzcG9uc2UgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIFwiZlwiKS5ydW5EZWZhdWx0QnVpbGRlck9uKHRoaXMpO1xuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShidWlsZGVyUmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXJSZXNwb25zZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5oZWxwKCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuaGVscCgpKTtcbiAgICB9XG4gICAgZ2V0T3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpO1xuICAgIH1cbiAgICBnZXRTdHJpY3QoKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3N0cmljdCwgXCJmXCIpO1xuICAgIH1cbiAgICBnZXRTdHJpY3RDb21tYW5kcygpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0Q29tbWFuZHMsIFwiZlwiKTtcbiAgICB9XG4gICAgZ2V0U3RyaWN0T3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0T3B0aW9ucywgXCJmXCIpO1xuICAgIH1cbiAgICBnbG9iYWwoZ2xvYmFscywgZ2xvYmFsKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8YXJyYXk+IFtib29sZWFuXScsIFtnbG9iYWxzLCBnbG9iYWxdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgZ2xvYmFscyA9IFtdLmNvbmNhdChnbG9iYWxzKTtcbiAgICAgICAgaWYgKGdsb2JhbCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmxvY2FsID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikubG9jYWwuZmlsdGVyKGwgPT4gZ2xvYmFscy5pbmRleE9mKGwpID09PSAtMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBnbG9iYWxzLmZvckVhY2goZyA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5sb2NhbC5pbmNsdWRlcyhnKSlcbiAgICAgICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikubG9jYWwucHVzaChnKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBncm91cChvcHRzLCBncm91cE5hbWUpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xhcnJheT4gPHN0cmluZz4nLCBbb3B0cywgZ3JvdXBOYW1lXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGV4aXN0aW5nID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wcmVzZXJ2ZWRHcm91cHMsIFwiZlwiKVtncm91cE5hbWVdIHx8IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ3JvdXBzLCBcImZcIilbZ3JvdXBOYW1lXTtcbiAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcHJlc2VydmVkR3JvdXBzLCBcImZcIilbZ3JvdXBOYW1lXSkge1xuICAgICAgICAgICAgZGVsZXRlIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcHJlc2VydmVkR3JvdXBzLCBcImZcIilbZ3JvdXBOYW1lXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzZWVuID0ge307XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ3JvdXBzLCBcImZcIilbZ3JvdXBOYW1lXSA9IChleGlzdGluZyB8fCBbXSkuY29uY2F0KG9wdHMpLmZpbHRlcihrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKHNlZW5ba2V5XSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gKHNlZW5ba2V5XSA9IHRydWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGhpZGUoa2V5KSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmc+JywgW2tleV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5oaWRkZW5PcHRpb25zLnB1c2goa2V5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGltcGxpZXMoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdD4gW251bWJlcnxzdHJpbmd8YXJyYXldJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIikuaW1wbGllcyhrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIGxvY2FsZShsb2NhbGUpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ10nLCBbbG9jYWxlXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChsb2NhbGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpc1trR3Vlc3NMb2NhbGVdKCk7XG4gICAgICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikueTE4bi5nZXRMb2NhbGUoKTtcbiAgICAgICAgfVxuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2RldGVjdExvY2FsZSwgZmFsc2UsIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikueTE4bi5zZXRMb2NhbGUobG9jYWxlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG1pZGRsZXdhcmUoY2FsbGJhY2ssIGFwcGx5QmVmb3JlVmFsaWRhdGlvbiwgZ2xvYmFsKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2dsb2JhbE1pZGRsZXdhcmUsIFwiZlwiKS5hZGRNaWRkbGV3YXJlKGNhbGxiYWNrLCAhIWFwcGx5QmVmb3JlVmFsaWRhdGlvbiwgZ2xvYmFsKTtcbiAgICB9XG4gICAgbmFyZ3Moa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdHxhcnJheT4gW251bWJlcl0nLCBba2V5LCB2YWx1ZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICB0aGlzW2tQb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnldKHRoaXMubmFyZ3MuYmluZCh0aGlzKSwgJ25hcmcnLCBrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG5vcm1hbGl6ZShrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdGhpc1trUG9wdWxhdGVQYXJzZXJIaW50QXJyYXldKCdub3JtYWxpemUnLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIG51bWJlcihrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdGhpc1trUG9wdWxhdGVQYXJzZXJIaW50QXJyYXldKCdudW1iZXInLCBrZXlzKTtcbiAgICAgICAgdGhpc1trVHJhY2tNYW51YWxseVNldEtleXNdKGtleXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgb3B0aW9uKGtleSwgb3B0KSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8b2JqZWN0PiBbb2JqZWN0XScsIFtrZXksIG9wdF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBpZiAodHlwZW9mIGtleSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKGtleSkuZm9yRWFjaChrID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9wdGlvbnMoaywga2V5W2tdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHQgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgb3B0ID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzW2tUcmFja01hbnVhbGx5U2V0S2V5c10oa2V5KTtcbiAgICAgICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZlcnNpb25PcHQsIFwiZlwiKSAmJiAoa2V5ID09PSAndmVyc2lvbicgfHwgKG9wdCA9PT0gbnVsbCB8fCBvcHQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdC5hbGlhcykgPT09ICd2ZXJzaW9uJykpIHtcbiAgICAgICAgICAgICAgICB0aGlzW2tFbWl0V2FybmluZ10oW1xuICAgICAgICAgICAgICAgICAgICAnXCJ2ZXJzaW9uXCIgaXMgYSByZXNlcnZlZCB3b3JkLicsXG4gICAgICAgICAgICAgICAgICAgICdQbGVhc2UgZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6JyxcbiAgICAgICAgICAgICAgICAgICAgJy0gRGlzYWJsZSB2ZXJzaW9uIHdpdGggYHlhcmdzLnZlcnNpb24oZmFsc2UpYCBpZiB1c2luZyBcInZlcnNpb25cIiBhcyBhbiBvcHRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnLSBVc2UgdGhlIGJ1aWx0LWluIGB5YXJncy52ZXJzaW9uYCBtZXRob2QgaW5zdGVhZCAoaWYgYXBwbGljYWJsZSknLFxuICAgICAgICAgICAgICAgICAgICAnLSBVc2UgYSBkaWZmZXJlbnQgb3B0aW9uIGtleScsXG4gICAgICAgICAgICAgICAgICAgICdodHRwczovL3lhcmdzLmpzLm9yZy9kb2NzLyNhcGktcmVmZXJlbmNlLXZlcnNpb24nLFxuICAgICAgICAgICAgICAgIF0uam9pbignXFxuJyksIHVuZGVmaW5lZCwgJ3ZlcnNpb25XYXJuaW5nJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5rZXlba2V5XSA9IHRydWU7XG4gICAgICAgICAgICBpZiAob3B0LmFsaWFzKVxuICAgICAgICAgICAgICAgIHRoaXMuYWxpYXMoa2V5LCBvcHQuYWxpYXMpO1xuICAgICAgICAgICAgY29uc3QgZGVwcmVjYXRlID0gb3B0LmRlcHJlY2F0ZSB8fCBvcHQuZGVwcmVjYXRlZDtcbiAgICAgICAgICAgIGlmIChkZXByZWNhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlcHJlY2F0ZU9wdGlvbihrZXksIGRlcHJlY2F0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBkZW1hbmQgPSBvcHQuZGVtYW5kIHx8IG9wdC5yZXF1aXJlZCB8fCBvcHQucmVxdWlyZTtcbiAgICAgICAgICAgIGlmIChkZW1hbmQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlbWFuZChrZXksIGRlbWFuZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmRlbWFuZE9wdGlvbikge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVtYW5kT3B0aW9uKGtleSwgdHlwZW9mIG9wdC5kZW1hbmRPcHRpb24gPT09ICdzdHJpbmcnID8gb3B0LmRlbWFuZE9wdGlvbiA6IHVuZGVmaW5lZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmNvbmZsaWN0cykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmxpY3RzKGtleSwgb3B0LmNvbmZsaWN0cyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoJ2RlZmF1bHQnIGluIG9wdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuZGVmYXVsdChrZXksIG9wdC5kZWZhdWx0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChvcHQuaW1wbGllcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbXBsaWVzKGtleSwgb3B0LmltcGxpZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5uYXJncyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5uYXJncyhrZXksIG9wdC5uYXJncyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmNvbmZpZykge1xuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnKGtleSwgb3B0LmNvbmZpZ1BhcnNlcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0Lm5vcm1hbGl6ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMubm9ybWFsaXplKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmNob2ljZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNob2ljZXMoa2V5LCBvcHQuY2hvaWNlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmNvZXJjZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29lcmNlKGtleSwgb3B0LmNvZXJjZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0Lmdyb3VwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cChrZXksIG9wdC5ncm91cCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmJvb2xlYW4gfHwgb3B0LnR5cGUgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgIHRoaXMuYm9vbGVhbihrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChvcHQuYWxpYXMpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYm9vbGVhbihvcHQuYWxpYXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5hcnJheSB8fCBvcHQudHlwZSA9PT0gJ2FycmF5Jykge1xuICAgICAgICAgICAgICAgIHRoaXMuYXJyYXkoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0LmFsaWFzKVxuICAgICAgICAgICAgICAgICAgICB0aGlzLmFycmF5KG9wdC5hbGlhcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0Lm51bWJlciB8fCBvcHQudHlwZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm51bWJlcihrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChvcHQuYWxpYXMpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubnVtYmVyKG9wdC5hbGlhcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LnN0cmluZyB8fCBvcHQudHlwZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0cmluZyhrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChvcHQuYWxpYXMpXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RyaW5nKG9wdC5hbGlhcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmNvdW50IHx8IG9wdC50eXBlID09PSAnY291bnQnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb3VudChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBvcHQuZ2xvYmFsID09PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmdsb2JhbChrZXksIG9wdC5nbG9iYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5kZWZhdWx0RGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5kZWZhdWx0RGVzY3JpcHRpb25ba2V5XSA9IG9wdC5kZWZhdWx0RGVzY3JpcHRpb247XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LnNraXBWYWxpZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5za2lwVmFsaWRhdGlvbihrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZGVzYyA9IG9wdC5kZXNjcmliZSB8fCBvcHQuZGVzY3JpcHRpb24gfHwgb3B0LmRlc2M7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbnMgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuZ2V0RGVzY3JpcHRpb25zKCk7XG4gICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkZXNjcmlwdGlvbnMsIGtleSkgfHxcbiAgICAgICAgICAgICAgICB0eXBlb2YgZGVzYyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlc2NyaWJlKGtleSwgZGVzYyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAob3B0LmhpZGRlbikge1xuICAgICAgICAgICAgICAgIHRoaXMuaGlkZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKG9wdC5yZXF1aXJlc0FyZykge1xuICAgICAgICAgICAgICAgIHRoaXMucmVxdWlyZXNBcmcoa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgb3B0aW9ucyhrZXksIG9wdCkge1xuICAgICAgICByZXR1cm4gdGhpcy5vcHRpb24oa2V5LCBvcHQpO1xuICAgIH1cbiAgICBwYXJzZShhcmdzLCBzaG9ydENpcmN1aXQsIF9wYXJzZUZuKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmd8YXJyYXldIFtmdW5jdGlvbnxib29sZWFufG9iamVjdF0gW2Z1bmN0aW9uXScsIFthcmdzLCBzaG9ydENpcmN1aXQsIF9wYXJzZUZuXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHRoaXNba0ZyZWV6ZV0oKTtcbiAgICAgICAgaWYgKHR5cGVvZiBhcmdzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgYXJncyA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcHJvY2Vzc0FyZ3MsIFwiZlwiKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIHNob3J0Q2lyY3VpdCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyc2VDb250ZXh0LCBzaG9ydENpcmN1aXQsIFwiZlwiKTtcbiAgICAgICAgICAgIHNob3J0Q2lyY3VpdCA9IF9wYXJzZUZuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygc2hvcnRDaXJjdWl0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcnNlRm4sIHNob3J0Q2lyY3VpdCwgXCJmXCIpO1xuICAgICAgICAgICAgc2hvcnRDaXJjdWl0ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFzaG9ydENpcmN1aXQpXG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3Byb2Nlc3NBcmdzLCBhcmdzLCBcImZcIik7XG4gICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcnNlRm4sIFwiZlwiKSlcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZXhpdFByb2Nlc3MsIGZhbHNlLCBcImZcIik7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IHRoaXNba1J1bllhcmdzUGFyc2VyQW5kRXhlY3V0ZUNvbW1hbmRzXShhcmdzLCAhIXNob3J0Q2lyY3VpdCk7XG4gICAgICAgIGNvbnN0IHRtcFBhcnNlZCA9IHRoaXMucGFyc2VkO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb24sIFwiZlwiKS5zZXRQYXJzZWQodGhpcy5wYXJzZWQpO1xuICAgICAgICBpZiAoaXNQcm9taXNlKHBhcnNlZCkpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZWRcbiAgICAgICAgICAgICAgICAudGhlbihhcmd2ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUZuLCBcImZcIikpXG4gICAgICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyc2VGbiwgXCJmXCIpLmNhbGwodGhpcywgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9leGl0RXJyb3IsIFwiZlwiKSwgYXJndiwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQsIFwiZlwiKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcnNlRm4sIFwiZlwiKSkge1xuICAgICAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcnNlRm4sIFwiZlwiKShlcnIsIHRoaXMucGFyc2VkLmFyZ3YsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LCBcImZcIikpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC5maW5hbGx5KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzW2tVbmZyZWV6ZV0oKTtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcnNlZCA9IHRtcFBhcnNlZDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyc2VGbiwgXCJmXCIpKVxuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyc2VGbiwgXCJmXCIpLmNhbGwodGhpcywgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9leGl0RXJyb3IsIFwiZlwiKSwgcGFyc2VkLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX291dHB1dCwgXCJmXCIpKTtcbiAgICAgICAgICAgIHRoaXNba1VuZnJlZXplXSgpO1xuICAgICAgICAgICAgdGhpcy5wYXJzZWQgPSB0bXBQYXJzZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlZDtcbiAgICB9XG4gICAgcGFyc2VBc3luYyhhcmdzLCBzaG9ydENpcmN1aXQsIF9wYXJzZUZuKSB7XG4gICAgICAgIGNvbnN0IG1heWJlUHJvbWlzZSA9IHRoaXMucGFyc2UoYXJncywgc2hvcnRDaXJjdWl0LCBfcGFyc2VGbik7XG4gICAgICAgIHJldHVybiAhaXNQcm9taXNlKG1heWJlUHJvbWlzZSlcbiAgICAgICAgICAgID8gUHJvbWlzZS5yZXNvbHZlKG1heWJlUHJvbWlzZSlcbiAgICAgICAgICAgIDogbWF5YmVQcm9taXNlO1xuICAgIH1cbiAgICBwYXJzZVN5bmMoYXJncywgc2hvcnRDaXJjdWl0LCBfcGFyc2VGbikge1xuICAgICAgICBjb25zdCBtYXliZVByb21pc2UgPSB0aGlzLnBhcnNlKGFyZ3MsIHNob3J0Q2lyY3VpdCwgX3BhcnNlRm4pO1xuICAgICAgICBpZiAoaXNQcm9taXNlKG1heWJlUHJvbWlzZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IoJy5wYXJzZVN5bmMoKSBtdXN0IG5vdCBiZSB1c2VkIHdpdGggYXN5bmNocm9ub3VzIGJ1aWxkZXJzLCBoYW5kbGVycywgb3IgbWlkZGxld2FyZScpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXliZVByb21pc2U7XG4gICAgfVxuICAgIHBhcnNlckNvbmZpZ3VyYXRpb24oY29uZmlnKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxvYmplY3Q+JywgW2NvbmZpZ10sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcnNlckNvbmZpZywgY29uZmlnLCBcImZcIik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBwa2dDb25mKGtleSwgcm9vdFBhdGgpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZz4gW3N0cmluZ10nLCBba2V5LCByb290UGF0aF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBsZXQgY29uZiA9IG51bGw7XG4gICAgICAgIGNvbnN0IG9iaiA9IHRoaXNba1BrZ1VwXShyb290UGF0aCB8fCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2N3ZCwgXCJmXCIpKTtcbiAgICAgICAgaWYgKG9ialtrZXldICYmIHR5cGVvZiBvYmpba2V5XSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGNvbmYgPSBhcHBseUV4dGVuZHMob2JqW2tleV0sIHJvb3RQYXRoIHx8IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY3dkLCBcImZcIiksIHRoaXNba0dldFBhcnNlckNvbmZpZ3VyYXRpb25dKClbJ2RlZXAtbWVyZ2UtY29uZmlnJ10gfHwgZmFsc2UsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpKTtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmNvbmZpZ09iamVjdHMgPSAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuY29uZmlnT2JqZWN0cyB8fCBbXSkuY29uY2F0KGNvbmYpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBwb3NpdGlvbmFsKGtleSwgb3B0cykge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nPiA8b2JqZWN0PicsIFtrZXksIG9wdHNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgY29uc3Qgc3VwcG9ydGVkT3B0cyA9IFtcbiAgICAgICAgICAgICdkZWZhdWx0JyxcbiAgICAgICAgICAgICdkZWZhdWx0RGVzY3JpcHRpb24nLFxuICAgICAgICAgICAgJ2ltcGxpZXMnLFxuICAgICAgICAgICAgJ25vcm1hbGl6ZScsXG4gICAgICAgICAgICAnY2hvaWNlcycsXG4gICAgICAgICAgICAnY29uZmxpY3RzJyxcbiAgICAgICAgICAgICdjb2VyY2UnLFxuICAgICAgICAgICAgJ3R5cGUnLFxuICAgICAgICAgICAgJ2Rlc2NyaWJlJyxcbiAgICAgICAgICAgICdkZXNjJyxcbiAgICAgICAgICAgICdkZXNjcmlwdGlvbicsXG4gICAgICAgICAgICAnYWxpYXMnLFxuICAgICAgICBdO1xuICAgICAgICBvcHRzID0gb2JqRmlsdGVyKG9wdHMsIChrLCB2KSA9PiB7XG4gICAgICAgICAgICBpZiAoayA9PT0gJ3R5cGUnICYmICFbJ3N0cmluZycsICdudW1iZXInLCAnYm9vbGVhbiddLmluY2x1ZGVzKHYpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBzdXBwb3J0ZWRPcHRzLmluY2x1ZGVzKGspO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZnVsbENvbW1hbmQgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbnRleHQsIFwiZlwiKS5mdWxsQ29tbWFuZHNbX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb250ZXh0LCBcImZcIikuZnVsbENvbW1hbmRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBwYXJzZU9wdGlvbnMgPSBmdWxsQ29tbWFuZFxuICAgICAgICAgICAgPyBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIFwiZlwiKS5jbWRUb1BhcnNlT3B0aW9ucyhmdWxsQ29tbWFuZClcbiAgICAgICAgICAgIDoge1xuICAgICAgICAgICAgICAgIGFycmF5OiBbXSxcbiAgICAgICAgICAgICAgICBhbGlhczoge30sXG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge30sXG4gICAgICAgICAgICAgICAgZGVtYW5kOiB7fSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIG9iamVjdEtleXMocGFyc2VPcHRpb25zKS5mb3JFYWNoKHBrID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlT3B0aW9uID0gcGFyc2VPcHRpb25zW3BrXTtcbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHBhcnNlT3B0aW9uKSkge1xuICAgICAgICAgICAgICAgIGlmIChwYXJzZU9wdGlvbi5pbmRleE9mKGtleSkgIT09IC0xKVxuICAgICAgICAgICAgICAgICAgICBvcHRzW3BrXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VPcHRpb25ba2V5XSAmJiAhKHBrIGluIG9wdHMpKVxuICAgICAgICAgICAgICAgICAgICBvcHRzW3BrXSA9IHBhcnNlT3B0aW9uW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLmdyb3VwKGtleSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmdldFBvc2l0aW9uYWxHcm91cE5hbWUoKSk7XG4gICAgICAgIHJldHVybiB0aGlzLm9wdGlvbihrZXksIG9wdHMpO1xuICAgIH1cbiAgICByZWNvbW1lbmRDb21tYW5kcyhyZWNvbW1lbmQgPSB0cnVlKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFuXScsIFtyZWNvbW1lbmRdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9yZWNvbW1lbmRDb21tYW5kcywgcmVjb21tZW5kLCBcImZcIik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICByZXF1aXJlZChrZXlzLCBtYXgsIG1zZykge1xuICAgICAgICByZXR1cm4gdGhpcy5kZW1hbmQoa2V5cywgbWF4LCBtc2cpO1xuICAgIH1cbiAgICByZXF1aXJlKGtleXMsIG1heCwgbXNnKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmRlbWFuZChrZXlzLCBtYXgsIG1zZyk7XG4gICAgfVxuICAgIHJlcXVpcmVzQXJnKGtleXMpIHtcbiAgICAgICAgYXJnc2VydCgnPGFycmF5fHN0cmluZ3xvYmplY3Q+IFtudW1iZXJdJywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXlzID09PSAnc3RyaW5nJyAmJiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5uYXJnW2tleXNdKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXNba1BvcHVsYXRlUGFyc2VySGludFNpbmdsZVZhbHVlRGljdGlvbmFyeV0odGhpcy5yZXF1aXJlc0FyZy5iaW5kKHRoaXMpLCAnbmFyZycsIGtleXMsIE5hTik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHNob3dDb21wbGV0aW9uU2NyaXB0KCQwLCBjbWQpIHtcbiAgICAgICAgYXJnc2VydCgnW3N0cmluZ10gW3N0cmluZ10nLCBbJDAsIGNtZF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICAkMCA9ICQwIHx8IHRoaXMuJDA7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfbG9nZ2VyLCBcImZcIikubG9nKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbiwgXCJmXCIpLmdlbmVyYXRlQ29tcGxldGlvblNjcmlwdCgkMCwgY21kIHx8IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbkNvbW1hbmQsIFwiZlwiKSB8fCAnY29tcGxldGlvbicpKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHNob3dIZWxwKGxldmVsKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tzdHJpbmd8ZnVuY3Rpb25dJywgW2xldmVsXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGFzT3V0cHV0LCB0cnVlLCBcImZcIik7XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmhhc0NhY2hlZEhlbHBNZXNzYWdlKCkpIHtcbiAgICAgICAgICAgIGlmICghdGhpcy5wYXJzZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJzZSA9IHRoaXNba1J1bllhcmdzUGFyc2VyQW5kRXhlY3V0ZUNvbW1hbmRzXShfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3Byb2Nlc3NBcmdzLCBcImZcIiksIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCAwLCB0cnVlKTtcbiAgICAgICAgICAgICAgICBpZiAoaXNQcm9taXNlKHBhcnNlKSkge1xuICAgICAgICAgICAgICAgICAgICBwYXJzZS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5zaG93SGVscChsZXZlbCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBidWlsZGVyUmVzcG9uc2UgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIFwiZlwiKS5ydW5EZWZhdWx0QnVpbGRlck9uKHRoaXMpO1xuICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShidWlsZGVyUmVzcG9uc2UpKSB7XG4gICAgICAgICAgICAgICAgYnVpbGRlclJlc3BvbnNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuc2hvd0hlbHAobGV2ZWwpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5zaG93SGVscChsZXZlbCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzY3JpcHROYW1lKHNjcmlwdE5hbWUpIHtcbiAgICAgICAgdGhpcy5jdXN0b21TY3JpcHROYW1lID0gdHJ1ZTtcbiAgICAgICAgdGhpcy4kMCA9IHNjcmlwdE5hbWU7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzaG93SGVscE9uRmFpbChlbmFibGVkLCBtZXNzYWdlKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFufHN0cmluZ10gW3N0cmluZ10nLCBbZW5hYmxlZCwgbWVzc2FnZV0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuc2hvd0hlbHBPbkZhaWwoZW5hYmxlZCwgbWVzc2FnZSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBzaG93VmVyc2lvbihsZXZlbCkge1xuICAgICAgICBhcmdzZXJ0KCdbc3RyaW5nfGZ1bmN0aW9uXScsIFtsZXZlbF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikuc2hvd1ZlcnNpb24obGV2ZWwpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc2tpcFZhbGlkYXRpb24oa2V5cykge1xuICAgICAgICBhcmdzZXJ0KCc8YXJyYXl8c3RyaW5nPicsIFtrZXlzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIHRoaXNba1BvcHVsYXRlUGFyc2VySGludEFycmF5XSgnc2tpcFZhbGlkYXRpb24nLCBrZXlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHN0cmljdChlbmFibGVkKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFuXScsIFtlbmFibGVkXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0LCBlbmFibGVkICE9PSBmYWxzZSwgXCJmXCIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc3RyaWN0Q29tbWFuZHMoZW5hYmxlZCkge1xuICAgICAgICBhcmdzZXJ0KCdbYm9vbGVhbl0nLCBbZW5hYmxlZF0sIGFyZ3VtZW50cy5sZW5ndGgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3N0cmljdENvbW1hbmRzLCBlbmFibGVkICE9PSBmYWxzZSwgXCJmXCIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc3RyaWN0T3B0aW9ucyhlbmFibGVkKSB7XG4gICAgICAgIGFyZ3NlcnQoJ1tib29sZWFuXScsIFtlbmFibGVkXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0T3B0aW9ucywgZW5hYmxlZCAhPT0gZmFsc2UsIFwiZlwiKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHN0cmluZyhrZXlzKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxhcnJheXxzdHJpbmc+JywgW2tleXNdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgdGhpc1trUG9wdWxhdGVQYXJzZXJIaW50QXJyYXldKCdzdHJpbmcnLCBrZXlzKTtcbiAgICAgICAgdGhpc1trVHJhY2tNYW51YWxseVNldEtleXNdKGtleXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdGVybWluYWxXaWR0aCgpIHtcbiAgICAgICAgYXJnc2VydChbXSwgMCk7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5wcm9jZXNzLnN0ZENvbHVtbnM7XG4gICAgfVxuICAgIHVwZGF0ZUxvY2FsZShvYmopIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlU3RyaW5ncyhvYmopO1xuICAgIH1cbiAgICB1cGRhdGVTdHJpbmdzKG9iaikge1xuICAgICAgICBhcmdzZXJ0KCc8b2JqZWN0PicsIFtvYmpdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9kZXRlY3RMb2NhbGUsIGZhbHNlLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnkxOG4udXBkYXRlTG9jYWxlKG9iaik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICB1c2FnZShtc2csIGRlc2NyaXB0aW9uLCBidWlsZGVyLCBoYW5kbGVyKSB7XG4gICAgICAgIGFyZ3NlcnQoJzxzdHJpbmd8bnVsbHx1bmRlZmluZWQ+IFtzdHJpbmd8Ym9vbGVhbl0gW2Z1bmN0aW9ufG9iamVjdF0gW2Z1bmN0aW9uXScsIFttc2csIGRlc2NyaXB0aW9uLCBidWlsZGVyLCBoYW5kbGVyXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIGlmIChkZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbChtc2csIG51bGwsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpKTtcbiAgICAgICAgICAgIGlmICgobXNnIHx8ICcnKS5tYXRjaCgvXlxcJDAoIHwkKS8pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29tbWFuZChtc2csIGRlc2NyaXB0aW9uLCBidWlsZGVyLCBoYW5kbGVyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IoJy51c2FnZSgpIGRlc2NyaXB0aW9uIG11c3Qgc3RhcnQgd2l0aCAkMCBpZiBiZWluZyB1c2VkIGFzIGFsaWFzIGZvciAuY29tbWFuZCgpJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikudXNhZ2UobXNnKTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICB9XG4gICAgfVxuICAgIHVzYWdlQ29uZmlndXJhdGlvbihjb25maWcpIHtcbiAgICAgICAgYXJnc2VydCgnPG9iamVjdD4nLCBbY29uZmlnXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2VDb25maWcsIGNvbmZpZywgXCJmXCIpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgdmVyc2lvbihvcHQsIG1zZywgdmVyKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWZXJzaW9uT3B0ID0gJ3ZlcnNpb24nO1xuICAgICAgICBhcmdzZXJ0KCdbYm9vbGVhbnxzdHJpbmddIFtzdHJpbmddIFtzdHJpbmddJywgW29wdCwgbXNnLCB2ZXJdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmVyc2lvbk9wdCwgXCJmXCIpKSB7XG4gICAgICAgICAgICB0aGlzW2tEZWxldGVGcm9tUGFyc2VySGludE9iamVjdF0oX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92ZXJzaW9uT3B0LCBcImZcIikpO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLnZlcnNpb24odW5kZWZpbmVkKTtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmVyc2lvbk9wdCwgbnVsbCwgXCJmXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB2ZXIgPSB0aGlzW2tHdWVzc1ZlcnNpb25dKCk7XG4gICAgICAgICAgICBvcHQgPSBkZWZhdWx0VmVyc2lvbk9wdDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICBpZiAob3B0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmVyID0gb3B0O1xuICAgICAgICAgICAgb3B0ID0gZGVmYXVsdFZlcnNpb25PcHQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgdmVyID0gbXNnO1xuICAgICAgICAgICAgbXNnID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmVyc2lvbk9wdCwgdHlwZW9mIG9wdCA9PT0gJ3N0cmluZycgPyBvcHQgOiBkZWZhdWx0VmVyc2lvbk9wdCwgXCJmXCIpO1xuICAgICAgICBtc2cgPSBtc2cgfHwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmRlZmVyWTE4bkxvb2t1cCgnU2hvdyB2ZXJzaW9uIG51bWJlcicpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3VzYWdlLCBcImZcIikudmVyc2lvbih2ZXIgfHwgdW5kZWZpbmVkKTtcbiAgICAgICAgdGhpcy5ib29sZWFuKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmVyc2lvbk9wdCwgXCJmXCIpKTtcbiAgICAgICAgdGhpcy5kZXNjcmliZShfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZlcnNpb25PcHQsIFwiZlwiKSwgbXNnKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIHdyYXAoY29scykge1xuICAgICAgICBhcmdzZXJ0KCc8bnVtYmVyfG51bGx8dW5kZWZpbmVkPicsIFtjb2xzXSwgYXJndW1lbnRzLmxlbmd0aCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS53cmFwKGNvbHMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgWyhfWWFyZ3NJbnN0YW5jZV9jb21tYW5kID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfY3dkID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfY29udGV4dCA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb24gPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uQ29tbWFuZCA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX2RlZmF1bHRTaG93SGlkZGVuT3B0ID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfZXhpdEVycm9yID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfZGV0ZWN0TG9jYWxlID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfZW1pdHRlZFdhcm5pbmdzID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfZXhpdFByb2Nlc3MgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9mcm96ZW5zID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfZ2xvYmFsTWlkZGxld2FyZSA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX2dyb3VwcyA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX2hhc091dHB1dCA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX2hlbHBPcHQgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9pc0dsb2JhbENvbnRleHQgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9sb2dnZXIgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfcGFyZW50UmVxdWlyZSA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX3BhcnNlckNvbmZpZyA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX3BhcnNlRm4gPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUNvbnRleHQgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9wa2dzID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfcHJlc2VydmVkR3JvdXBzID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfcHJvY2Vzc0FyZ3MgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9yZWNvbW1lbmRDb21tYW5kcyA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX3NoaW0gPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3QgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3RDb21tYW5kcyA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX3N0cmljdE9wdGlvbnMgPSBuZXcgV2Vha01hcCgpLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX3VzYWdlQ29uZmlnID0gbmV3IFdlYWtNYXAoKSwgX1lhcmdzSW5zdGFuY2VfdmVyc2lvbk9wdCA9IG5ldyBXZWFrTWFwKCksIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24gPSBuZXcgV2Vha01hcCgpLCBrQ29weURvdWJsZURhc2gpXShhcmd2KSB7XG4gICAgICAgIGlmICghYXJndi5fIHx8ICFhcmd2WyctLSddKVxuICAgICAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgICAgIGFyZ3YuXy5wdXNoLmFwcGx5KGFyZ3YuXywgYXJndlsnLS0nXSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkZWxldGUgYXJndlsnLS0nXTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoX2VycikgeyB9XG4gICAgICAgIHJldHVybiBhcmd2O1xuICAgIH1cbiAgICBba0NyZWF0ZUxvZ2dlcl0oKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBsb2c6ICguLi5hcmdzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzW2tIYXNQYXJzZUNhbGxiYWNrXSgpKVxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyguLi5hcmdzKTtcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hhc091dHB1dCwgdHJ1ZSwgXCJmXCIpO1xuICAgICAgICAgICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX291dHB1dCwgXCJmXCIpLmxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LCBcImZcIikgKyAnXFxuJywgXCJmXCIpO1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX291dHB1dCwgXCJmXCIpICsgYXJncy5qb2luKCcgJyksIFwiZlwiKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBlcnJvcjogKC4uLmFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXNba0hhc1BhcnNlQ2FsbGJhY2tdKCkpXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoLi4uYXJncyk7XG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oYXNPdXRwdXQsIHRydWUsIFwiZlwiKTtcbiAgICAgICAgICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQsIFwiZlwiKS5sZW5ndGgpXG4gICAgICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX291dHB1dCwgXCJmXCIpICsgJ1xcbicsIFwiZlwiKTtcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX291dHB1dCwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQsIFwiZlwiKSArIGFyZ3Muam9pbignICcpLCBcImZcIik7XG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBba0RlbGV0ZUZyb21QYXJzZXJIaW50T2JqZWN0XShvcHRpb25LZXkpIHtcbiAgICAgICAgb2JqZWN0S2V5cyhfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKSkuZm9yRWFjaCgoaGludEtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKCgoa2V5KSA9PiBrZXkgPT09ICdjb25maWdPYmplY3RzJykoaGludEtleSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgaGludCA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpW2hpbnRLZXldO1xuICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaGludCkpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGludC5pbmNsdWRlcyhvcHRpb25LZXkpKVxuICAgICAgICAgICAgICAgICAgICBoaW50LnNwbGljZShoaW50LmluZGV4T2Yob3B0aW9uS2V5KSwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgaGludCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgaGludFtvcHRpb25LZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZGVsZXRlIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5nZXREZXNjcmlwdGlvbnMoKVtvcHRpb25LZXldO1xuICAgIH1cbiAgICBba0VtaXRXYXJuaW5nXSh3YXJuaW5nLCB0eXBlLCBkZWR1cGxpY2F0aW9uSWQpIHtcbiAgICAgICAgaWYgKCFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2VtaXR0ZWRXYXJuaW5ncywgXCJmXCIpW2RlZHVwbGljYXRpb25JZF0pIHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnByb2Nlc3MuZW1pdFdhcm5pbmcod2FybmluZywgdHlwZSk7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2VtaXR0ZWRXYXJuaW5ncywgXCJmXCIpW2RlZHVwbGljYXRpb25JZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIFtrRnJlZXplXSgpIHtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9mcm96ZW5zLCBcImZcIikucHVzaCh7XG4gICAgICAgICAgICBvcHRpb25zOiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKSxcbiAgICAgICAgICAgIGNvbmZpZ09iamVjdHM6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmNvbmZpZ09iamVjdHMuc2xpY2UoMCksXG4gICAgICAgICAgICBleGl0UHJvY2VzczogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9leGl0UHJvY2VzcywgXCJmXCIpLFxuICAgICAgICAgICAgZ3JvdXBzOiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2dyb3VwcywgXCJmXCIpLFxuICAgICAgICAgICAgc3RyaWN0OiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3N0cmljdCwgXCJmXCIpLFxuICAgICAgICAgICAgc3RyaWN0Q29tbWFuZHM6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0Q29tbWFuZHMsIFwiZlwiKSxcbiAgICAgICAgICAgIHN0cmljdE9wdGlvbnM6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0T3B0aW9ucywgXCJmXCIpLFxuICAgICAgICAgICAgY29tcGxldGlvbkNvbW1hbmQ6IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbkNvbW1hbmQsIFwiZlwiKSxcbiAgICAgICAgICAgIG91dHB1dDogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vdXRwdXQsIFwiZlwiKSxcbiAgICAgICAgICAgIGV4aXRFcnJvcjogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9leGl0RXJyb3IsIFwiZlwiKSxcbiAgICAgICAgICAgIGhhc091dHB1dDogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oYXNPdXRwdXQsIFwiZlwiKSxcbiAgICAgICAgICAgIHBhcnNlZDogdGhpcy5wYXJzZWQsXG4gICAgICAgICAgICBwYXJzZUZuOiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcnNlRm4sIFwiZlwiKSxcbiAgICAgICAgICAgIHBhcnNlQ29udGV4dDogX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUNvbnRleHQsIFwiZlwiKSxcbiAgICAgICAgfSk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5mcmVlemUoKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIikuZnJlZXplKCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpLmZyZWV6ZSgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2dsb2JhbE1pZGRsZXdhcmUsIFwiZlwiKS5mcmVlemUoKTtcbiAgICB9XG4gICAgW2tHZXREb2xsYXJaZXJvXSgpIHtcbiAgICAgICAgbGV0ICQwID0gJyc7XG4gICAgICAgIGxldCBkZWZhdWx0JDA7XG4gICAgICAgIGlmICgvXFxiKG5vZGV8aW9qc3xlbGVjdHJvbikoXFwuZXhlKT8kLy50ZXN0KF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnByb2Nlc3MuYXJndigpWzBdKSkge1xuICAgICAgICAgICAgZGVmYXVsdCQwID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikucHJvY2Vzcy5hcmd2KCkuc2xpY2UoMSwgMik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkZWZhdWx0JDAgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5wcm9jZXNzLmFyZ3YoKS5zbGljZSgwLCAxKTtcbiAgICAgICAgfVxuICAgICAgICAkMCA9IGRlZmF1bHQkMFxuICAgICAgICAgICAgLm1hcCh4ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGIgPSB0aGlzW2tSZWJhc2VdKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY3dkLCBcImZcIiksIHgpO1xuICAgICAgICAgICAgcmV0dXJuIHgubWF0Y2goL14oXFwvfChbYS16QS1aXTopP1xcXFwpLykgJiYgYi5sZW5ndGggPCB4Lmxlbmd0aCA/IGIgOiB4O1xuICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJyAnKVxuICAgICAgICAgICAgLnRyaW0oKTtcbiAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLmdldEVudignXycpICYmXG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5nZXRQcm9jZXNzQXJndkJpbigpID09PSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5nZXRFbnYoJ18nKSkge1xuICAgICAgICAgICAgJDAgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKVxuICAgICAgICAgICAgICAgIC5nZXRFbnYoJ18nKVxuICAgICAgICAgICAgICAgIC5yZXBsYWNlKGAke19fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnBhdGguZGlybmFtZShfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5wcm9jZXNzLmV4ZWNQYXRoKCkpfS9gLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICQwO1xuICAgIH1cbiAgICBba0dldFBhcnNlckNvbmZpZ3VyYXRpb25dKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZXJDb25maWcsIFwiZlwiKTtcbiAgICB9XG4gICAgW2tHZXRVc2FnZUNvbmZpZ3VyYXRpb25dKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZUNvbmZpZywgXCJmXCIpO1xuICAgIH1cbiAgICBba0d1ZXNzTG9jYWxlXSgpIHtcbiAgICAgICAgaWYgKCFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2RldGVjdExvY2FsZSwgXCJmXCIpKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBsb2NhbGUgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5nZXRFbnYoJ0xDX0FMTCcpIHx8XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5nZXRFbnYoJ0xDX01FU1NBR0VTJykgfHxcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLmdldEVudignTEFORycpIHx8XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5nZXRFbnYoJ0xBTkdVQUdFJykgfHxcbiAgICAgICAgICAgICdlbl9VUyc7XG4gICAgICAgIHRoaXMubG9jYWxlKGxvY2FsZS5yZXBsYWNlKC9bLjpdLiovLCAnJykpO1xuICAgIH1cbiAgICBba0d1ZXNzVmVyc2lvbl0oKSB7XG4gICAgICAgIGNvbnN0IG9iaiA9IHRoaXNba1BrZ1VwXSgpO1xuICAgICAgICByZXR1cm4gb2JqLnZlcnNpb24gfHwgJ3Vua25vd24nO1xuICAgIH1cbiAgICBba1BhcnNlUG9zaXRpb25hbE51bWJlcnNdKGFyZ3YpIHtcbiAgICAgICAgY29uc3QgYXJncyA9IGFyZ3ZbJy0tJ10gPyBhcmd2WyctLSddIDogYXJndi5fO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgYXJnOyAoYXJnID0gYXJnc1tpXSkgIT09IHVuZGVmaW5lZDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikuUGFyc2VyLmxvb2tzTGlrZU51bWJlcihhcmcpICYmXG4gICAgICAgICAgICAgICAgTnVtYmVyLmlzU2FmZUludGVnZXIoTWF0aC5mbG9vcihwYXJzZUZsb2F0KGAke2FyZ31gKSkpKSB7XG4gICAgICAgICAgICAgICAgYXJnc1tpXSA9IE51bWJlcihhcmcpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhcmd2O1xuICAgIH1cbiAgICBba1BrZ1VwXShyb290UGF0aCkge1xuICAgICAgICBjb25zdCBucGF0aCA9IHJvb3RQYXRoIHx8ICcqJztcbiAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGtncywgXCJmXCIpW25wYXRoXSlcbiAgICAgICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BrZ3MsIFwiZlwiKVtucGF0aF07XG4gICAgICAgIGxldCBvYmogPSB7fTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCBzdGFydERpciA9IHJvb3RQYXRoIHx8IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLm1haW5GaWxlbmFtZTtcbiAgICAgICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5wYXRoLmV4dG5hbWUoc3RhcnREaXIpKSB7XG4gICAgICAgICAgICAgICAgc3RhcnREaXIgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5wYXRoLmRpcm5hbWUoc3RhcnREaXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGtnSnNvblBhdGggPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5maW5kVXAoc3RhcnREaXIsIChkaXIsIG5hbWVzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG5hbWVzLmluY2x1ZGVzKCdwYWNrYWdlLmpzb24nKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3BhY2thZ2UuanNvbic7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwocGtnSnNvblBhdGgsIHVuZGVmaW5lZCwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikpO1xuICAgICAgICAgICAgb2JqID0gSlNPTi5wYXJzZShfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS5yZWFkRmlsZVN5bmMocGtnSnNvblBhdGgsICd1dGY4JykpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChfbm9vcCkgeyB9XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGtncywgXCJmXCIpW25wYXRoXSA9IG9iaiB8fCB7fTtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGtncywgXCJmXCIpW25wYXRoXTtcbiAgICB9XG4gICAgW2tQb3B1bGF0ZVBhcnNlckhpbnRBcnJheV0odHlwZSwga2V5cykge1xuICAgICAgICBrZXlzID0gW10uY29uY2F0KGtleXMpO1xuICAgICAgICBrZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGtleSA9IHRoaXNba1Nhbml0aXplS2V5XShrZXkpO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIilbdHlwZV0ucHVzaChrZXkpO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgW2tQb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnldKGJ1aWxkZXIsIHR5cGUsIGtleSwgdmFsdWUpIHtcbiAgICAgICAgdGhpc1trUG9wdWxhdGVQYXJzZXJIaW50RGljdGlvbmFyeV0oYnVpbGRlciwgdHlwZSwga2V5LCB2YWx1ZSwgKHR5cGUsIGtleSwgdmFsdWUpID0+IHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpW3R5cGVdW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIFtrUG9wdWxhdGVQYXJzZXJIaW50QXJyYXlEaWN0aW9uYXJ5XShidWlsZGVyLCB0eXBlLCBrZXksIHZhbHVlKSB7XG4gICAgICAgIHRoaXNba1BvcHVsYXRlUGFyc2VySGludERpY3Rpb25hcnldKGJ1aWxkZXIsIHR5cGUsIGtleSwgdmFsdWUsICh0eXBlLCBrZXksIHZhbHVlKSA9PiB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKVt0eXBlXVtrZXldID0gKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpW3R5cGVdW2tleV0gfHwgW10pLmNvbmNhdCh2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBba1BvcHVsYXRlUGFyc2VySGludERpY3Rpb25hcnldKGJ1aWxkZXIsIHR5cGUsIGtleSwgdmFsdWUsIHNpbmdsZUtleUhhbmRsZXIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5KSkge1xuICAgICAgICAgICAga2V5LmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgYnVpbGRlcihrLCB2YWx1ZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICgoKGtleSkgPT4gdHlwZW9mIGtleSA9PT0gJ29iamVjdCcpKGtleSkpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgayBvZiBvYmplY3RLZXlzKGtleSkpIHtcbiAgICAgICAgICAgICAgICBidWlsZGVyKGssIGtleVtrXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzaW5nbGVLZXlIYW5kbGVyKHR5cGUsIHRoaXNba1Nhbml0aXplS2V5XShrZXkpLCB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgW2tTYW5pdGl6ZUtleV0oa2V5KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdfX3Byb3RvX18nKVxuICAgICAgICAgICAgcmV0dXJuICdfX19wcm90b19fXyc7XG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgfVxuICAgIFtrU2V0S2V5XShrZXksIHNldCkge1xuICAgICAgICB0aGlzW2tQb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnldKHRoaXNba1NldEtleV0uYmluZCh0aGlzKSwgJ2tleScsIGtleSwgc2V0KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIFtrVW5mcmVlemVdKCkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2csIF9oLCBfaiwgX2ssIF9sLCBfbTtcbiAgICAgICAgY29uc3QgZnJvemVuID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9mcm96ZW5zLCBcImZcIikucG9wKCk7XG4gICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKGZyb3plbiwgdW5kZWZpbmVkLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKSk7XG4gICAgICAgIGxldCBjb25maWdPYmplY3RzO1xuICAgICAgICAoX2EgPSB0aGlzLCBfYiA9IHRoaXMsIF9jID0gdGhpcywgX2QgPSB0aGlzLCBfZSA9IHRoaXMsIF9mID0gdGhpcywgX2cgPSB0aGlzLCBfaCA9IHRoaXMsIF9qID0gdGhpcywgX2sgPSB0aGlzLCBfbCA9IHRoaXMsIF9tID0gdGhpcywge1xuICAgICAgICAgICAgb3B0aW9uczogKHsgc2V0IHZhbHVlKF9vKSB7IF9fY2xhc3NQcml2YXRlRmllbGRTZXQoX2EsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIF9vLCBcImZcIik7IH0gfSkudmFsdWUsXG4gICAgICAgICAgICBjb25maWdPYmplY3RzLFxuICAgICAgICAgICAgZXhpdFByb2Nlc3M6ICh7IHNldCB2YWx1ZShfbykgeyBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9iLCBfWWFyZ3NJbnN0YW5jZV9leGl0UHJvY2VzcywgX28sIFwiZlwiKTsgfSB9KS52YWx1ZSxcbiAgICAgICAgICAgIGdyb3VwczogKHsgc2V0IHZhbHVlKF9vKSB7IF9fY2xhc3NQcml2YXRlRmllbGRTZXQoX2MsIF9ZYXJnc0luc3RhbmNlX2dyb3VwcywgX28sIFwiZlwiKTsgfSB9KS52YWx1ZSxcbiAgICAgICAgICAgIG91dHB1dDogKHsgc2V0IHZhbHVlKF9vKSB7IF9fY2xhc3NQcml2YXRlRmllbGRTZXQoX2QsIF9ZYXJnc0luc3RhbmNlX291dHB1dCwgX28sIFwiZlwiKTsgfSB9KS52YWx1ZSxcbiAgICAgICAgICAgIGV4aXRFcnJvcjogKHsgc2V0IHZhbHVlKF9vKSB7IF9fY2xhc3NQcml2YXRlRmllbGRTZXQoX2UsIF9ZYXJnc0luc3RhbmNlX2V4aXRFcnJvciwgX28sIFwiZlwiKTsgfSB9KS52YWx1ZSxcbiAgICAgICAgICAgIGhhc091dHB1dDogKHsgc2V0IHZhbHVlKF9vKSB7IF9fY2xhc3NQcml2YXRlRmllbGRTZXQoX2YsIF9ZYXJnc0luc3RhbmNlX2hhc091dHB1dCwgX28sIFwiZlwiKTsgfSB9KS52YWx1ZSxcbiAgICAgICAgICAgIHBhcnNlZDogdGhpcy5wYXJzZWQsXG4gICAgICAgICAgICBzdHJpY3Q6ICh7IHNldCB2YWx1ZShfbykgeyBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9nLCBfWWFyZ3NJbnN0YW5jZV9zdHJpY3QsIF9vLCBcImZcIik7IH0gfSkudmFsdWUsXG4gICAgICAgICAgICBzdHJpY3RDb21tYW5kczogKHsgc2V0IHZhbHVlKF9vKSB7IF9fY2xhc3NQcml2YXRlRmllbGRTZXQoX2gsIF9ZYXJnc0luc3RhbmNlX3N0cmljdENvbW1hbmRzLCBfbywgXCJmXCIpOyB9IH0pLnZhbHVlLFxuICAgICAgICAgICAgc3RyaWN0T3B0aW9uczogKHsgc2V0IHZhbHVlKF9vKSB7IF9fY2xhc3NQcml2YXRlRmllbGRTZXQoX2osIF9ZYXJnc0luc3RhbmNlX3N0cmljdE9wdGlvbnMsIF9vLCBcImZcIik7IH0gfSkudmFsdWUsXG4gICAgICAgICAgICBjb21wbGV0aW9uQ29tbWFuZDogKHsgc2V0IHZhbHVlKF9vKSB7IF9fY2xhc3NQcml2YXRlRmllbGRTZXQoX2ssIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb25Db21tYW5kLCBfbywgXCJmXCIpOyB9IH0pLnZhbHVlLFxuICAgICAgICAgICAgcGFyc2VGbjogKHsgc2V0IHZhbHVlKF9vKSB7IF9fY2xhc3NQcml2YXRlRmllbGRTZXQoX2wsIF9ZYXJnc0luc3RhbmNlX3BhcnNlRm4sIF9vLCBcImZcIik7IH0gfSkudmFsdWUsXG4gICAgICAgICAgICBwYXJzZUNvbnRleHQ6ICh7IHNldCB2YWx1ZShfbykgeyBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KF9tLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUNvbnRleHQsIF9vLCBcImZcIik7IH0gfSkudmFsdWUsXG4gICAgICAgIH0gPSBmcm96ZW4pO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5jb25maWdPYmplY3RzID0gY29uZmlnT2JqZWN0cztcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLnVuZnJlZXplKCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgXCJmXCIpLnVuZnJlZXplKCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpLnVuZnJlZXplKCk7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ2xvYmFsTWlkZGxld2FyZSwgXCJmXCIpLnVuZnJlZXplKCk7XG4gICAgfVxuICAgIFtrVmFsaWRhdGVBc3luY10odmFsaWRhdGlvbiwgYXJndikge1xuICAgICAgICByZXR1cm4gbWF5YmVBc3luY1Jlc3VsdChhcmd2LCByZXN1bHQgPT4ge1xuICAgICAgICAgICAgdmFsaWRhdGlvbihyZXN1bHQpO1xuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldEludGVybmFsTWV0aG9kcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGdldENvbW1hbmRJbnN0YW5jZTogdGhpc1trR2V0Q29tbWFuZEluc3RhbmNlXS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZ2V0Q29udGV4dDogdGhpc1trR2V0Q29udGV4dF0uYmluZCh0aGlzKSxcbiAgICAgICAgICAgIGdldEhhc091dHB1dDogdGhpc1trR2V0SGFzT3V0cHV0XS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZ2V0TG9nZ2VySW5zdGFuY2U6IHRoaXNba0dldExvZ2dlckluc3RhbmNlXS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZ2V0UGFyc2VDb250ZXh0OiB0aGlzW2tHZXRQYXJzZUNvbnRleHRdLmJpbmQodGhpcyksXG4gICAgICAgICAgICBnZXRQYXJzZXJDb25maWd1cmF0aW9uOiB0aGlzW2tHZXRQYXJzZXJDb25maWd1cmF0aW9uXS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZ2V0VXNhZ2VDb25maWd1cmF0aW9uOiB0aGlzW2tHZXRVc2FnZUNvbmZpZ3VyYXRpb25dLmJpbmQodGhpcyksXG4gICAgICAgICAgICBnZXRVc2FnZUluc3RhbmNlOiB0aGlzW2tHZXRVc2FnZUluc3RhbmNlXS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgZ2V0VmFsaWRhdGlvbkluc3RhbmNlOiB0aGlzW2tHZXRWYWxpZGF0aW9uSW5zdGFuY2VdLmJpbmQodGhpcyksXG4gICAgICAgICAgICBoYXNQYXJzZUNhbGxiYWNrOiB0aGlzW2tIYXNQYXJzZUNhbGxiYWNrXS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgaXNHbG9iYWxDb250ZXh0OiB0aGlzW2tJc0dsb2JhbENvbnRleHRdLmJpbmQodGhpcyksXG4gICAgICAgICAgICBwb3N0UHJvY2VzczogdGhpc1trUG9zdFByb2Nlc3NdLmJpbmQodGhpcyksXG4gICAgICAgICAgICByZXNldDogdGhpc1trUmVzZXRdLmJpbmQodGhpcyksXG4gICAgICAgICAgICBydW5WYWxpZGF0aW9uOiB0aGlzW2tSdW5WYWxpZGF0aW9uXS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgcnVuWWFyZ3NQYXJzZXJBbmRFeGVjdXRlQ29tbWFuZHM6IHRoaXNba1J1bllhcmdzUGFyc2VyQW5kRXhlY3V0ZUNvbW1hbmRzXS5iaW5kKHRoaXMpLFxuICAgICAgICAgICAgc2V0SGFzT3V0cHV0OiB0aGlzW2tTZXRIYXNPdXRwdXRdLmJpbmQodGhpcyksXG4gICAgICAgIH07XG4gICAgfVxuICAgIFtrR2V0Q29tbWFuZEluc3RhbmNlXSgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpO1xuICAgIH1cbiAgICBba0dldENvbnRleHRdKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb250ZXh0LCBcImZcIik7XG4gICAgfVxuICAgIFtrR2V0SGFzT3V0cHV0XSgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGFzT3V0cHV0LCBcImZcIik7XG4gICAgfVxuICAgIFtrR2V0TG9nZ2VySW5zdGFuY2VdKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9sb2dnZXIsIFwiZlwiKTtcbiAgICB9XG4gICAgW2tHZXRQYXJzZUNvbnRleHRdKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9wYXJzZUNvbnRleHQsIFwiZlwiKSB8fCB7fTtcbiAgICB9XG4gICAgW2tHZXRVc2FnZUluc3RhbmNlXSgpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKTtcbiAgICB9XG4gICAgW2tHZXRWYWxpZGF0aW9uSW5zdGFuY2VdKCkge1xuICAgICAgICByZXR1cm4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIik7XG4gICAgfVxuICAgIFtrSGFzUGFyc2VDYWxsYmFja10oKSB7XG4gICAgICAgIHJldHVybiAhIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcGFyc2VGbiwgXCJmXCIpO1xuICAgIH1cbiAgICBba0lzR2xvYmFsQ29udGV4dF0oKSB7XG4gICAgICAgIHJldHVybiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2lzR2xvYmFsQ29udGV4dCwgXCJmXCIpO1xuICAgIH1cbiAgICBba1Bvc3RQcm9jZXNzXShhcmd2LCBwb3B1bGF0ZURvdWJsZURhc2gsIGNhbGxlZEZyb21Db21tYW5kLCBydW5HbG9iYWxNaWRkbGV3YXJlKSB7XG4gICAgICAgIGlmIChjYWxsZWRGcm9tQ29tbWFuZClcbiAgICAgICAgICAgIHJldHVybiBhcmd2O1xuICAgICAgICBpZiAoaXNQcm9taXNlKGFyZ3YpKVxuICAgICAgICAgICAgcmV0dXJuIGFyZ3Y7XG4gICAgICAgIGlmICghcG9wdWxhdGVEb3VibGVEYXNoKSB7XG4gICAgICAgICAgICBhcmd2ID0gdGhpc1trQ29weURvdWJsZURhc2hdKGFyZ3YpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnNlUG9zaXRpb25hbE51bWJlcnMgPSB0aGlzW2tHZXRQYXJzZXJDb25maWd1cmF0aW9uXSgpWydwYXJzZS1wb3NpdGlvbmFsLW51bWJlcnMnXSB8fFxuICAgICAgICAgICAgdGhpc1trR2V0UGFyc2VyQ29uZmlndXJhdGlvbl0oKVsncGFyc2UtcG9zaXRpb25hbC1udW1iZXJzJ10gPT09IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKHBhcnNlUG9zaXRpb25hbE51bWJlcnMpIHtcbiAgICAgICAgICAgIGFyZ3YgPSB0aGlzW2tQYXJzZVBvc2l0aW9uYWxOdW1iZXJzXShhcmd2KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocnVuR2xvYmFsTWlkZGxld2FyZSkge1xuICAgICAgICAgICAgYXJndiA9IGFwcGx5TWlkZGxld2FyZShhcmd2LCB0aGlzLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2dsb2JhbE1pZGRsZXdhcmUsIFwiZlwiKS5nZXRNaWRkbGV3YXJlKCksIGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYXJndjtcbiAgICB9XG4gICAgW2tSZXNldF0oYWxpYXNlcyA9IHt9KSB7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikgfHwge30sIFwiZlwiKTtcbiAgICAgICAgY29uc3QgdG1wT3B0aW9ucyA9IHt9O1xuICAgICAgICB0bXBPcHRpb25zLmxvY2FsID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikubG9jYWwgfHwgW107XG4gICAgICAgIHRtcE9wdGlvbnMuY29uZmlnT2JqZWN0cyA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmNvbmZpZ09iamVjdHMgfHwgW107XG4gICAgICAgIGNvbnN0IGxvY2FsTG9va3VwID0ge307XG4gICAgICAgIHRtcE9wdGlvbnMubG9jYWwuZm9yRWFjaChsID0+IHtcbiAgICAgICAgICAgIGxvY2FsTG9va3VwW2xdID0gdHJ1ZTtcbiAgICAgICAgICAgIChhbGlhc2VzW2xdIHx8IFtdKS5mb3JFYWNoKGEgPT4ge1xuICAgICAgICAgICAgICAgIGxvY2FsTG9va3VwW2FdID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ByZXNlcnZlZEdyb3VwcywgXCJmXCIpLCBPYmplY3Qua2V5cyhfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2dyb3VwcywgXCJmXCIpKS5yZWR1Y2UoKGFjYywgZ3JvdXBOYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9ncm91cHMsIFwiZlwiKVtncm91cE5hbWVdLmZpbHRlcihrZXkgPT4gIShrZXkgaW4gbG9jYWxMb29rdXApKTtcbiAgICAgICAgICAgIGlmIChrZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBhY2NbZ3JvdXBOYW1lXSA9IGtleXM7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCB7fSkpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2dyb3Vwcywge30sIFwiZlwiKTtcbiAgICAgICAgY29uc3QgYXJyYXlPcHRpb25zID0gW1xuICAgICAgICAgICAgJ2FycmF5JyxcbiAgICAgICAgICAgICdib29sZWFuJyxcbiAgICAgICAgICAgICdzdHJpbmcnLFxuICAgICAgICAgICAgJ3NraXBWYWxpZGF0aW9uJyxcbiAgICAgICAgICAgICdjb3VudCcsXG4gICAgICAgICAgICAnbm9ybWFsaXplJyxcbiAgICAgICAgICAgICdudW1iZXInLFxuICAgICAgICAgICAgJ2hpZGRlbk9wdGlvbnMnLFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBvYmplY3RPcHRpb25zID0gW1xuICAgICAgICAgICAgJ25hcmcnLFxuICAgICAgICAgICAgJ2tleScsXG4gICAgICAgICAgICAnYWxpYXMnLFxuICAgICAgICAgICAgJ2RlZmF1bHQnLFxuICAgICAgICAgICAgJ2RlZmF1bHREZXNjcmlwdGlvbicsXG4gICAgICAgICAgICAnY29uZmlnJyxcbiAgICAgICAgICAgICdjaG9pY2VzJyxcbiAgICAgICAgICAgICdkZW1hbmRlZE9wdGlvbnMnLFxuICAgICAgICAgICAgJ2RlbWFuZGVkQ29tbWFuZHMnLFxuICAgICAgICAgICAgJ2RlcHJlY2F0ZWRPcHRpb25zJyxcbiAgICAgICAgXTtcbiAgICAgICAgYXJyYXlPcHRpb25zLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICB0bXBPcHRpb25zW2tdID0gKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpW2tdIHx8IFtdKS5maWx0ZXIoKGspID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIH0pO1xuICAgICAgICBvYmplY3RPcHRpb25zLmZvckVhY2goKGspID0+IHtcbiAgICAgICAgICAgIHRtcE9wdGlvbnNba10gPSBvYmpGaWx0ZXIoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIilba10sIGsgPT4gIWxvY2FsTG9va3VwW2tdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRtcE9wdGlvbnMuZW52UHJlZml4ID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuZW52UHJlZml4O1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIHRtcE9wdGlvbnMsIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpXG4gICAgICAgICAgICA/IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5yZXNldChsb2NhbExvb2t1cClcbiAgICAgICAgICAgIDogVXNhZ2UodGhpcywgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9zaGltLCBcImZcIikpLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIilcbiAgICAgICAgICAgID8gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIikucmVzZXQobG9jYWxMb29rdXApXG4gICAgICAgICAgICA6IFZhbGlkYXRpb24odGhpcywgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKSksIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIFwiZlwiKVxuICAgICAgICAgICAgPyBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIFwiZlwiKS5yZXNldCgpXG4gICAgICAgICAgICA6IENvbW1hbmQoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9nbG9iYWxNaWRkbGV3YXJlLCBcImZcIiksIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpKSwgXCJmXCIpO1xuICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbiwgXCJmXCIpKVxuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uLCBDb21wbGV0aW9uKHRoaXMsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKSwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBcImZcIiksIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpKSwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2dsb2JhbE1pZGRsZXdhcmUsIFwiZlwiKS5yZXNldCgpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb25Db21tYW5kLCBudWxsLCBcImZcIik7XG4gICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3V0cHV0LCAnJywgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2V4aXRFcnJvciwgbnVsbCwgXCJmXCIpO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hhc091dHB1dCwgZmFsc2UsIFwiZlwiKTtcbiAgICAgICAgdGhpcy5wYXJzZWQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIFtrUmViYXNlXShiYXNlLCBkaXIpIHtcbiAgICAgICAgcmV0dXJuIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLnBhdGgucmVsYXRpdmUoYmFzZSwgZGlyKTtcbiAgICB9XG4gICAgW2tSdW5ZYXJnc1BhcnNlckFuZEV4ZWN1dGVDb21tYW5kc10oYXJncywgc2hvcnRDaXJjdWl0LCBjYWxsZWRGcm9tQ29tbWFuZCwgY29tbWFuZEluZGV4ID0gMCwgaGVscE9ubHkgPSBmYWxzZSkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgICAgIGxldCBza2lwVmFsaWRhdGlvbiA9ICEhY2FsbGVkRnJvbUNvbW1hbmQgfHwgaGVscE9ubHk7XG4gICAgICAgIGFyZ3MgPSBhcmdzIHx8IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfcHJvY2Vzc0FyZ3MsIFwiZlwiKTtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuX18gPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3NoaW0sIFwiZlwiKS55MThuLl9fO1xuICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5jb25maWd1cmF0aW9uID0gdGhpc1trR2V0UGFyc2VyQ29uZmlndXJhdGlvbl0oKTtcbiAgICAgICAgY29uc3QgcG9wdWxhdGVEb3VibGVEYXNoID0gISFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5jb25maWd1cmF0aW9uWydwb3B1bGF0ZS0tJ107XG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfb3B0aW9ucywgXCJmXCIpLmNvbmZpZ3VyYXRpb24sIHtcbiAgICAgICAgICAgICdwb3B1bGF0ZS0tJzogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc2hpbSwgXCJmXCIpLlBhcnNlci5kZXRhaWxlZChhcmdzLCBPYmplY3QuYXNzaWduKHt9LCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKSwge1xuICAgICAgICAgICAgY29uZmlndXJhdGlvbjogeyAncGFyc2UtcG9zaXRpb25hbC1udW1iZXJzJzogZmFsc2UsIC4uLmNvbmZpZyB9LFxuICAgICAgICB9KSk7XG4gICAgICAgIGNvbnN0IGFyZ3YgPSBPYmplY3QuYXNzaWduKHBhcnNlZC5hcmd2LCBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3BhcnNlQ29udGV4dCwgXCJmXCIpKTtcbiAgICAgICAgbGV0IGFyZ3ZQcm9taXNlID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBhbGlhc2VzID0gcGFyc2VkLmFsaWFzZXM7XG4gICAgICAgIGxldCBoZWxwT3B0U2V0ID0gZmFsc2U7XG4gICAgICAgIGxldCB2ZXJzaW9uT3B0U2V0ID0gZmFsc2U7XG4gICAgICAgIE9iamVjdC5rZXlzKGFyZ3YpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGVscE9wdCwgXCJmXCIpICYmIGFyZ3Zba2V5XSkge1xuICAgICAgICAgICAgICAgIGhlbHBPcHRTZXQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoa2V5ID09PSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZlcnNpb25PcHQsIFwiZlwiKSAmJiBhcmd2W2tleV0pIHtcbiAgICAgICAgICAgICAgICB2ZXJzaW9uT3B0U2V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGFyZ3YuJDAgPSB0aGlzLiQwO1xuICAgICAgICB0aGlzLnBhcnNlZCA9IHBhcnNlZDtcbiAgICAgICAgaWYgKGNvbW1hbmRJbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLmNsZWFyQ2FjaGVkSGVscE1lc3NhZ2UoKTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpc1trR3Vlc3NMb2NhbGVdKCk7XG4gICAgICAgICAgICBpZiAoc2hvcnRDaXJjdWl0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNba1Bvc3RQcm9jZXNzXShhcmd2LCBwb3B1bGF0ZURvdWJsZURhc2gsICEhY2FsbGVkRnJvbUNvbW1hbmQsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2hlbHBPcHQsIFwiZlwiKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGhlbHBDbWRzID0gW19fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGVscE9wdCwgXCJmXCIpXVxuICAgICAgICAgICAgICAgICAgICAuY29uY2F0KGFsaWFzZXNbX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oZWxwT3B0LCBcImZcIildIHx8IFtdKVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGsgPT4gay5sZW5ndGggPiAxKTtcbiAgICAgICAgICAgICAgICBpZiAoaGVscENtZHMuaW5jbHVkZXMoJycgKyBhcmd2Ll9bYXJndi5fLmxlbmd0aCAtIDFdKSkge1xuICAgICAgICAgICAgICAgICAgICBhcmd2Ll8ucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIGhlbHBPcHRTZXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaXNHbG9iYWxDb250ZXh0LCBmYWxzZSwgXCJmXCIpO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlcktleXMgPSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbW1hbmQsIFwiZlwiKS5nZXRDb21tYW5kcygpO1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdENvbXBsZXRpb25zID0gKChfYSA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbiwgXCJmXCIpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY29tcGxldGlvbktleSlcbiAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgKF9iID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uLCBcImZcIikpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jb21wbGV0aW9uS2V5LFxuICAgICAgICAgICAgICAgICAgICAuLi4oKF9kID0gdGhpcy5nZXRBbGlhc2VzKClbKF9jID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uLCBcImZcIikpID09PSBudWxsIHx8IF9jID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYy5jb21wbGV0aW9uS2V5XSkgIT09IG51bGwgJiYgX2QgIT09IHZvaWQgMCA/IF9kIDogW10pLFxuICAgICAgICAgICAgICAgIF0uc29tZSgoa2V5KSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYXJndiwga2V5KSlcbiAgICAgICAgICAgICAgICA6IGZhbHNlO1xuICAgICAgICAgICAgY29uc3Qgc2tpcFJlY29tbWVuZGF0aW9uID0gaGVscE9wdFNldCB8fCByZXF1ZXN0Q29tcGxldGlvbnMgfHwgaGVscE9ubHk7XG4gICAgICAgICAgICBpZiAoYXJndi5fLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpcnN0VW5rbm93bkNvbW1hbmQ7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSBjb21tYW5kSW5kZXggfHwgMCwgY21kOyBhcmd2Ll9baV0gIT09IHVuZGVmaW5lZDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbWQgPSBTdHJpbmcoYXJndi5fW2ldKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChoYW5kbGVyS2V5cy5pbmNsdWRlcyhjbWQpICYmIGNtZCAhPT0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uQ29tbWFuZCwgXCJmXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5uZXJBcmd2ID0gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBcImZcIikucnVuQ29tbWFuZChjbWQsIHRoaXMsIHBhcnNlZCwgaSArIDEsIGhlbHBPbmx5LCBoZWxwT3B0U2V0IHx8IHZlcnNpb25PcHRTZXQgfHwgaGVscE9ubHkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzW2tQb3N0UHJvY2Vzc10oaW5uZXJBcmd2LCBwb3B1bGF0ZURvdWJsZURhc2gsICEhY2FsbGVkRnJvbUNvbW1hbmQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCFmaXJzdFVua25vd25Db21tYW5kICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kICE9PSBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb25Db21tYW5kLCBcImZcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFVua25vd25Db21tYW5kID0gY21kO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21tYW5kLCBcImZcIikuaGFzRGVmYXVsdENvbW1hbmQoKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9yZWNvbW1lbmRDb21tYW5kcywgXCJmXCIpICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBmaXJzdFVua25vd25Db21tYW5kICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAhc2tpcFJlY29tbWVuZGF0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKS5yZWNvbW1lbmRDb21tYW5kcyhmaXJzdFVua25vd25Db21tYW5kLCBoYW5kbGVyS2V5cyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbkNvbW1hbmQsIFwiZlwiKSAmJlxuICAgICAgICAgICAgICAgICAgICBhcmd2Ll8uaW5jbHVkZXMoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uQ29tbWFuZCwgXCJmXCIpKSAmJlxuICAgICAgICAgICAgICAgICAgICAhcmVxdWVzdENvbXBsZXRpb25zKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX2V4aXRQcm9jZXNzLCBcImZcIikpXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRCbG9ja2luZyh0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93Q29tcGxldGlvblNjcmlwdCgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXQoMCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpLmhhc0RlZmF1bHRDb21tYW5kKCkgJiYgIXNraXBSZWNvbW1lbmRhdGlvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlubmVyQXJndiA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tbWFuZCwgXCJmXCIpLnJ1bkNvbW1hbmQobnVsbCwgdGhpcywgcGFyc2VkLCAwLCBoZWxwT25seSwgaGVscE9wdFNldCB8fCB2ZXJzaW9uT3B0U2V0IHx8IGhlbHBPbmx5KTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1trUG9zdFByb2Nlc3NdKGlubmVyQXJndiwgcG9wdWxhdGVEb3VibGVEYXNoLCAhIWNhbGxlZEZyb21Db21tYW5kLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVxdWVzdENvbXBsZXRpb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZXhpdFByb2Nlc3MsIFwiZlwiKSlcbiAgICAgICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgYXJncyA9IFtdLmNvbmNhdChhcmdzKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV0aW9uQXJncyA9IGFyZ3Muc2xpY2UoYXJncy5pbmRleE9mKGAtLSR7X19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uLCBcImZcIikuY29tcGxldGlvbktleX1gKSArIDEpO1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfY29tcGxldGlvbiwgXCJmXCIpLmdldENvbXBsZXRpb24oY29tcGxldGlvbkFyZ3MsIChlcnIsIGNvbXBsZXRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWUVycm9yKGVyci5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICAgICAgKGNvbXBsZXRpb25zIHx8IFtdKS5mb3JFYWNoKGNvbXBsZXRpb24gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9sb2dnZXIsIFwiZlwiKS5sb2coY29tcGxldGlvbik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmV4aXQoMCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXNba1Bvc3RQcm9jZXNzXShhcmd2LCAhcG9wdWxhdGVEb3VibGVEYXNoLCAhIWNhbGxlZEZyb21Db21tYW5kLCBmYWxzZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIV9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfaGFzT3V0cHV0LCBcImZcIikpIHtcbiAgICAgICAgICAgICAgICBpZiAoaGVscE9wdFNldCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9leGl0UHJvY2VzcywgXCJmXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHNraXBWYWxpZGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93SGVscChtZXNzYWdlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfbG9nZ2VyLCBcImZcIikubG9nKG1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5leGl0KDApO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodmVyc2lvbk9wdFNldCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9leGl0UHJvY2VzcywgXCJmXCIpKVxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmxvY2tpbmcodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHNraXBWYWxpZGF0aW9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV91c2FnZSwgXCJmXCIpLnNob3dWZXJzaW9uKCdsb2cnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5leGl0KDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2tpcFZhbGlkYXRpb24gJiYgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuc2tpcFZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHNraXBWYWxpZGF0aW9uID0gT2JqZWN0LmtleXMoYXJndikuc29tZShrZXkgPT4gX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9vcHRpb25zLCBcImZcIikuc2tpcFZhbGlkYXRpb24uaW5kZXhPZihrZXkpID49IDAgJiYgYXJndltrZXldID09PSB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghc2tpcFZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAocGFyc2VkLmVycm9yKVxuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgWUVycm9yKHBhcnNlZC5lcnJvci5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlcXVlc3RDb21wbGV0aW9ucykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxpZGF0aW9uID0gdGhpc1trUnVuVmFsaWRhdGlvbl0oYWxpYXNlcywge30sIHBhcnNlZC5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY2FsbGVkRnJvbUNvbW1hbmQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3ZQcm9taXNlID0gYXBwbHlNaWRkbGV3YXJlKGFyZ3YsIHRoaXMsIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfZ2xvYmFsTWlkZGxld2FyZSwgXCJmXCIpLmdldE1pZGRsZXdhcmUoKSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYXJndlByb21pc2UgPSB0aGlzW2tWYWxpZGF0ZUFzeW5jXSh2YWxpZGF0aW9uLCBhcmd2UHJvbWlzZSAhPT0gbnVsbCAmJiBhcmd2UHJvbWlzZSAhPT0gdm9pZCAwID8gYXJndlByb21pc2UgOiBhcmd2KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzUHJvbWlzZShhcmd2UHJvbWlzZSkgJiYgIWNhbGxlZEZyb21Db21tYW5kKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmd2UHJvbWlzZSA9IGFyZ3ZQcm9taXNlLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBhcHBseU1pZGRsZXdhcmUoYXJndiwgdGhpcywgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9nbG9iYWxNaWRkbGV3YXJlLCBcImZcIikuZ2V0TWlkZGxld2FyZSgpLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBpZiAoZXJyIGluc3RhbmNlb2YgWUVycm9yKVxuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdXNhZ2UsIFwiZlwiKS5mYWlsKGVyci5tZXNzYWdlLCBlcnIpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpc1trUG9zdFByb2Nlc3NdKGFyZ3ZQcm9taXNlICE9PSBudWxsICYmIGFyZ3ZQcm9taXNlICE9PSB2b2lkIDAgPyBhcmd2UHJvbWlzZSA6IGFyZ3YsIHBvcHVsYXRlRG91YmxlRGFzaCwgISFjYWxsZWRGcm9tQ29tbWFuZCwgdHJ1ZSk7XG4gICAgfVxuICAgIFtrUnVuVmFsaWRhdGlvbl0oYWxpYXNlcywgcG9zaXRpb25hbE1hcCwgcGFyc2VFcnJvcnMsIGlzRGVmYXVsdENvbW1hbmQpIHtcbiAgICAgICAgY29uc3QgZGVtYW5kZWRPcHRpb25zID0geyAuLi50aGlzLmdldERlbWFuZGVkT3B0aW9ucygpIH07XG4gICAgICAgIHJldHVybiAoYXJndikgPT4ge1xuICAgICAgICAgICAgaWYgKHBhcnNlRXJyb3JzKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBZRXJyb3IocGFyc2VFcnJvcnMubWVzc2FnZSk7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24sIFwiZlwiKS5ub25PcHRpb25Db3VudChhcmd2KTtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgXCJmXCIpLnJlcXVpcmVkQXJndW1lbnRzKGFyZ3YsIGRlbWFuZGVkT3B0aW9ucyk7XG4gICAgICAgICAgICBsZXQgZmFpbGVkU3RyaWN0Q29tbWFuZHMgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3N0cmljdENvbW1hbmRzLCBcImZcIikpIHtcbiAgICAgICAgICAgICAgICBmYWlsZWRTdHJpY3RDb21tYW5kcyA9IF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgXCJmXCIpLnVua25vd25Db21tYW5kcyhhcmd2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX3N0cmljdCwgXCJmXCIpICYmICFmYWlsZWRTdHJpY3RDb21tYW5kcykge1xuICAgICAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgXCJmXCIpLnVua25vd25Bcmd1bWVudHMoYXJndiwgYWxpYXNlcywgcG9zaXRpb25hbE1hcCwgISFpc0RlZmF1bHRDb21tYW5kKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2Vfc3RyaWN0T3B0aW9ucywgXCJmXCIpKSB7XG4gICAgICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIikudW5rbm93bkFyZ3VtZW50cyhhcmd2LCBhbGlhc2VzLCB7fSwgZmFsc2UsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRHZXQodGhpcywgX1lhcmdzSW5zdGFuY2VfdmFsaWRhdGlvbiwgXCJmXCIpLmxpbWl0ZWRDaG9pY2VzKGFyZ3YpO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIikuaW1wbGljYXRpb25zKGFyZ3YpO1xuICAgICAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV92YWxpZGF0aW9uLCBcImZcIikuY29uZmxpY3RpbmcoYXJndik7XG4gICAgICAgIH07XG4gICAgfVxuICAgIFtrU2V0SGFzT3V0cHV0XSgpIHtcbiAgICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCh0aGlzLCBfWWFyZ3NJbnN0YW5jZV9oYXNPdXRwdXQsIHRydWUsIFwiZlwiKTtcbiAgICB9XG4gICAgW2tUcmFja01hbnVhbGx5U2V0S2V5c10oa2V5cykge1xuICAgICAgICBpZiAodHlwZW9mIGtleXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5rZXlba2V5c10gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIGtleXMpIHtcbiAgICAgICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ZYXJnc0luc3RhbmNlX29wdGlvbnMsIFwiZlwiKS5rZXlba10gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGlzWWFyZ3NJbnN0YW5jZSh5KSB7XG4gICAgcmV0dXJuICEheSAmJiB0eXBlb2YgeS5nZXRJbnRlcm5hbE1ldGhvZHMgPT09ICdmdW5jdGlvbic7XG59XG4iLCJpbXBvcnQgeyBvYmplY3RLZXlzIH0gZnJvbSAnLi4vdHlwaW5ncy9jb21tb24tdHlwZXMuanMnO1xuZXhwb3J0IGZ1bmN0aW9uIG9iakZpbHRlcihvcmlnaW5hbCA9IHt9LCBmaWx0ZXIgPSAoKSA9PiB0cnVlKSB7XG4gICAgY29uc3Qgb2JqID0ge307XG4gICAgb2JqZWN0S2V5cyhvcmlnaW5hbCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICBpZiAoZmlsdGVyKGtleSwgb3JpZ2luYWxba2V5XSkpIHtcbiAgICAgICAgICAgIG9ialtrZXldID0gb3JpZ2luYWxba2V5XTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBvYmo7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzZXRCbG9ja2luZyhibG9ja2luZykge1xuICAgIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgICAgIHJldHVybjtcbiAgICBbcHJvY2Vzcy5zdGRvdXQsIHByb2Nlc3Muc3RkZXJyXS5mb3JFYWNoKF9zdHJlYW0gPT4ge1xuICAgICAgICBjb25zdCBzdHJlYW0gPSBfc3RyZWFtO1xuICAgICAgICBpZiAoc3RyZWFtLl9oYW5kbGUgJiZcbiAgICAgICAgICAgIHN0cmVhbS5pc1RUWSAmJlxuICAgICAgICAgICAgdHlwZW9mIHN0cmVhbS5faGFuZGxlLnNldEJsb2NraW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBzdHJlYW0uX2hhbmRsZS5zZXRCbG9ja2luZyhibG9ja2luZyk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbiIsImltcG9ydCB7IG9iakZpbHRlciB9IGZyb20gJy4vdXRpbHMvb2JqLWZpbHRlci5qcyc7XG5pbXBvcnQgeyBZRXJyb3IgfSBmcm9tICcuL3llcnJvci5qcyc7XG5pbXBvcnQgc2V0QmxvY2tpbmcgZnJvbSAnLi91dGlscy9zZXQtYmxvY2tpbmcuanMnO1xuZnVuY3Rpb24gaXNCb29sZWFuKGZhaWwpIHtcbiAgICByZXR1cm4gdHlwZW9mIGZhaWwgPT09ICdib29sZWFuJztcbn1cbmV4cG9ydCBmdW5jdGlvbiB1c2FnZSh5YXJncywgc2hpbSkge1xuICAgIGNvbnN0IF9fID0gc2hpbS55MThuLl9fO1xuICAgIGNvbnN0IHNlbGYgPSB7fTtcbiAgICBjb25zdCBmYWlscyA9IFtdO1xuICAgIHNlbGYuZmFpbEZuID0gZnVuY3Rpb24gZmFpbEZuKGYpIHtcbiAgICAgICAgZmFpbHMucHVzaChmKTtcbiAgICB9O1xuICAgIGxldCBmYWlsTWVzc2FnZSA9IG51bGw7XG4gICAgbGV0IGdsb2JhbEZhaWxNZXNzYWdlID0gbnVsbDtcbiAgICBsZXQgc2hvd0hlbHBPbkZhaWwgPSB0cnVlO1xuICAgIHNlbGYuc2hvd0hlbHBPbkZhaWwgPSBmdW5jdGlvbiBzaG93SGVscE9uRmFpbEZuKGFyZzEgPSB0cnVlLCBhcmcyKSB7XG4gICAgICAgIGNvbnN0IFtlbmFibGVkLCBtZXNzYWdlXSA9IHR5cGVvZiBhcmcxID09PSAnc3RyaW5nJyA/IFt0cnVlLCBhcmcxXSA6IFthcmcxLCBhcmcyXTtcbiAgICAgICAgaWYgKHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmlzR2xvYmFsQ29udGV4dCgpKSB7XG4gICAgICAgICAgICBnbG9iYWxGYWlsTWVzc2FnZSA9IG1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgZmFpbE1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgICBzaG93SGVscE9uRmFpbCA9IGVuYWJsZWQ7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgbGV0IGZhaWx1cmVPdXRwdXQgPSBmYWxzZTtcbiAgICBzZWxmLmZhaWwgPSBmdW5jdGlvbiBmYWlsKG1zZywgZXJyKSB7XG4gICAgICAgIGNvbnN0IGxvZ2dlciA9IHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldExvZ2dlckluc3RhbmNlKCk7XG4gICAgICAgIGlmIChmYWlscy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBmYWlscy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZhaWwgPSBmYWlsc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoaXNCb29sZWFuKGZhaWwpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlcnIpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1zZylcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEVycm9yKG1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBmYWlsKG1zZywgZXJyLCBzZWxmKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoeWFyZ3MuZ2V0RXhpdFByb2Nlc3MoKSlcbiAgICAgICAgICAgICAgICBzZXRCbG9ja2luZyh0cnVlKTtcbiAgICAgICAgICAgIGlmICghZmFpbHVyZU91dHB1dCkge1xuICAgICAgICAgICAgICAgIGZhaWx1cmVPdXRwdXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmIChzaG93SGVscE9uRmFpbCkge1xuICAgICAgICAgICAgICAgICAgICB5YXJncy5zaG93SGVscCgnZXJyb3InKTtcbiAgICAgICAgICAgICAgICAgICAgbG9nZ2VyLmVycm9yKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChtc2cgfHwgZXJyKVxuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IobXNnIHx8IGVycik7XG4gICAgICAgICAgICAgICAgY29uc3QgZ2xvYmFsT3JDb21tYW5kRmFpbE1lc3NhZ2UgPSBmYWlsTWVzc2FnZSB8fCBnbG9iYWxGYWlsTWVzc2FnZTtcbiAgICAgICAgICAgICAgICBpZiAoZ2xvYmFsT3JDb21tYW5kRmFpbE1lc3NhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKG1zZyB8fCBlcnIpXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoJycpO1xuICAgICAgICAgICAgICAgICAgICBsb2dnZXIuZXJyb3IoZ2xvYmFsT3JDb21tYW5kRmFpbE1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVyciA9IGVyciB8fCBuZXcgWUVycm9yKG1zZyk7XG4gICAgICAgICAgICBpZiAoeWFyZ3MuZ2V0RXhpdFByb2Nlc3MoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB5YXJncy5leGl0KDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoeWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuaGFzUGFyc2VDYWxsYmFjaygpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHlhcmdzLmV4aXQoMSwgZXJyKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgbGV0IHVzYWdlcyA9IFtdO1xuICAgIGxldCB1c2FnZURpc2FibGVkID0gZmFsc2U7XG4gICAgc2VsZi51c2FnZSA9IChtc2csIGRlc2NyaXB0aW9uKSA9PiB7XG4gICAgICAgIGlmIChtc2cgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHVzYWdlRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgICAgdXNhZ2VzID0gW107XG4gICAgICAgICAgICByZXR1cm4gc2VsZjtcbiAgICAgICAgfVxuICAgICAgICB1c2FnZURpc2FibGVkID0gZmFsc2U7XG4gICAgICAgIHVzYWdlcy5wdXNoKFttc2csIGRlc2NyaXB0aW9uIHx8ICcnXSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgc2VsZi5nZXRVc2FnZSA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHVzYWdlcztcbiAgICB9O1xuICAgIHNlbGYuZ2V0VXNhZ2VEaXNhYmxlZCA9ICgpID0+IHtcbiAgICAgICAgcmV0dXJuIHVzYWdlRGlzYWJsZWQ7XG4gICAgfTtcbiAgICBzZWxmLmdldFBvc2l0aW9uYWxHcm91cE5hbWUgPSAoKSA9PiB7XG4gICAgICAgIHJldHVybiBfXygnUG9zaXRpb25hbHM6Jyk7XG4gICAgfTtcbiAgICBsZXQgZXhhbXBsZXMgPSBbXTtcbiAgICBzZWxmLmV4YW1wbGUgPSAoY21kLCBkZXNjcmlwdGlvbikgPT4ge1xuICAgICAgICBleGFtcGxlcy5wdXNoKFtjbWQsIGRlc2NyaXB0aW9uIHx8ICcnXSk7XG4gICAgfTtcbiAgICBsZXQgY29tbWFuZHMgPSBbXTtcbiAgICBzZWxmLmNvbW1hbmQgPSBmdW5jdGlvbiBjb21tYW5kKGNtZCwgZGVzY3JpcHRpb24sIGlzRGVmYXVsdCwgYWxpYXNlcywgZGVwcmVjYXRlZCA9IGZhbHNlKSB7XG4gICAgICAgIGlmIChpc0RlZmF1bHQpIHtcbiAgICAgICAgICAgIGNvbW1hbmRzID0gY29tbWFuZHMubWFwKGNtZEFycmF5ID0+IHtcbiAgICAgICAgICAgICAgICBjbWRBcnJheVsyXSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHJldHVybiBjbWRBcnJheTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGNvbW1hbmRzLnB1c2goW2NtZCwgZGVzY3JpcHRpb24gfHwgJycsIGlzRGVmYXVsdCwgYWxpYXNlcywgZGVwcmVjYXRlZF0pO1xuICAgIH07XG4gICAgc2VsZi5nZXRDb21tYW5kcyA9ICgpID0+IGNvbW1hbmRzO1xuICAgIGxldCBkZXNjcmlwdGlvbnMgPSB7fTtcbiAgICBzZWxmLmRlc2NyaWJlID0gZnVuY3Rpb24gZGVzY3JpYmUoa2V5T3JLZXlzLCBkZXNjKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleU9yS2V5cykpIHtcbiAgICAgICAgICAgIGtleU9yS2V5cy5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYuZGVzY3JpYmUoaywgZGVzYyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0eXBlb2Yga2V5T3JLZXlzID09PSAnb2JqZWN0Jykge1xuICAgICAgICAgICAgT2JqZWN0LmtleXMoa2V5T3JLZXlzKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgICAgICAgICAgIHNlbGYuZGVzY3JpYmUoaywga2V5T3JLZXlzW2tdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVzY3JpcHRpb25zW2tleU9yS2V5c10gPSBkZXNjO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLmdldERlc2NyaXB0aW9ucyA9ICgpID0+IGRlc2NyaXB0aW9ucztcbiAgICBsZXQgZXBpbG9ncyA9IFtdO1xuICAgIHNlbGYuZXBpbG9nID0gbXNnID0+IHtcbiAgICAgICAgZXBpbG9ncy5wdXNoKG1zZyk7XG4gICAgfTtcbiAgICBsZXQgd3JhcFNldCA9IGZhbHNlO1xuICAgIGxldCB3cmFwO1xuICAgIHNlbGYud3JhcCA9IGNvbHMgPT4ge1xuICAgICAgICB3cmFwU2V0ID0gdHJ1ZTtcbiAgICAgICAgd3JhcCA9IGNvbHM7XG4gICAgfTtcbiAgICBzZWxmLmdldFdyYXAgPSAoKSA9PiB7XG4gICAgICAgIGlmIChzaGltLmdldEVudignWUFSR1NfRElTQUJMRV9XUkFQJykpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmICghd3JhcFNldCkge1xuICAgICAgICAgICAgd3JhcCA9IHdpbmRvd1dpZHRoKCk7XG4gICAgICAgICAgICB3cmFwU2V0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gd3JhcDtcbiAgICB9O1xuICAgIGNvbnN0IGRlZmVyWTE4bkxvb2t1cFByZWZpeCA9ICdfX3lhcmdzU3RyaW5nX186JztcbiAgICBzZWxmLmRlZmVyWTE4bkxvb2t1cCA9IHN0ciA9PiBkZWZlclkxOG5Mb29rdXBQcmVmaXggKyBzdHI7XG4gICAgc2VsZi5oZWxwID0gZnVuY3Rpb24gaGVscCgpIHtcbiAgICAgICAgaWYgKGNhY2hlZEhlbHBNZXNzYWdlKVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZEhlbHBNZXNzYWdlO1xuICAgICAgICBub3JtYWxpemVBbGlhc2VzKCk7XG4gICAgICAgIGNvbnN0IGJhc2UkMCA9IHlhcmdzLmN1c3RvbVNjcmlwdE5hbWVcbiAgICAgICAgICAgID8geWFyZ3MuJDBcbiAgICAgICAgICAgIDogc2hpbS5wYXRoLmJhc2VuYW1lKHlhcmdzLiQwKTtcbiAgICAgICAgY29uc3QgZGVtYW5kZWRPcHRpb25zID0geWFyZ3MuZ2V0RGVtYW5kZWRPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IGRlbWFuZGVkQ29tbWFuZHMgPSB5YXJncy5nZXREZW1hbmRlZENvbW1hbmRzKCk7XG4gICAgICAgIGNvbnN0IGRlcHJlY2F0ZWRPcHRpb25zID0geWFyZ3MuZ2V0RGVwcmVjYXRlZE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgZ3JvdXBzID0geWFyZ3MuZ2V0R3JvdXBzKCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB5YXJncy5nZXRPcHRpb25zKCk7XG4gICAgICAgIGxldCBrZXlzID0gW107XG4gICAgICAgIGtleXMgPSBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhkZXNjcmlwdGlvbnMpKTtcbiAgICAgICAga2V5cyA9IGtleXMuY29uY2F0KE9iamVjdC5rZXlzKGRlbWFuZGVkT3B0aW9ucykpO1xuICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmtleXMoZGVtYW5kZWRDb21tYW5kcykpO1xuICAgICAgICBrZXlzID0ga2V5cy5jb25jYXQoT2JqZWN0LmtleXMob3B0aW9ucy5kZWZhdWx0KSk7XG4gICAgICAgIGtleXMgPSBrZXlzLmZpbHRlcihmaWx0ZXJIaWRkZW5PcHRpb25zKTtcbiAgICAgICAga2V5cyA9IE9iamVjdC5rZXlzKGtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKGtleSAhPT0gJ18nKVxuICAgICAgICAgICAgICAgIGFjY1trZXldID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgIH0sIHt9KSk7XG4gICAgICAgIGNvbnN0IHRoZVdyYXAgPSBzZWxmLmdldFdyYXAoKTtcbiAgICAgICAgY29uc3QgdWkgPSBzaGltLmNsaXVpKHtcbiAgICAgICAgICAgIHdpZHRoOiB0aGVXcmFwLFxuICAgICAgICAgICAgd3JhcDogISF0aGVXcmFwLFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCF1c2FnZURpc2FibGVkKSB7XG4gICAgICAgICAgICBpZiAodXNhZ2VzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHVzYWdlcy5mb3JFYWNoKHVzYWdlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KHsgdGV4dDogYCR7dXNhZ2VbMF0ucmVwbGFjZSgvXFwkMC9nLCBiYXNlJDApfWAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh1c2FnZVsxXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdWkuZGl2KHsgdGV4dDogYCR7dXNhZ2VbMV19YCwgcGFkZGluZzogWzEsIDAsIDAsIDBdIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb21tYW5kcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBsZXQgdSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGRlbWFuZGVkQ29tbWFuZHMuXykge1xuICAgICAgICAgICAgICAgICAgICB1ID0gYCR7YmFzZSQwfSA8JHtfXygnY29tbWFuZCcpfT5cXG5gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdSA9IGAke2Jhc2UkMH0gWyR7X18oJ2NvbW1hbmQnKX1dXFxuYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdWkuZGl2KGAke3V9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbW1hbmRzLmxlbmd0aCA+IDEgfHwgKGNvbW1hbmRzLmxlbmd0aCA9PT0gMSAmJiAhY29tbWFuZHNbMF1bMl0pKSB7XG4gICAgICAgICAgICB1aS5kaXYoX18oJ0NvbW1hbmRzOicpKTtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSB5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRDb250ZXh0KCk7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnRDb21tYW5kcyA9IGNvbnRleHQuY29tbWFuZHMubGVuZ3RoXG4gICAgICAgICAgICAgICAgPyBgJHtjb250ZXh0LmNvbW1hbmRzLmpvaW4oJyAnKX0gYFxuICAgICAgICAgICAgICAgIDogJyc7XG4gICAgICAgICAgICBpZiAoeWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0UGFyc2VyQ29uZmlndXJhdGlvbigpWydzb3J0LWNvbW1hbmRzJ10gPT09XG4gICAgICAgICAgICAgICAgdHJ1ZSkge1xuICAgICAgICAgICAgICAgIGNvbW1hbmRzID0gY29tbWFuZHMuc29ydCgoYSwgYikgPT4gYVswXS5sb2NhbGVDb21wYXJlKGJbMF0pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHByZWZpeCA9IGJhc2UkMCA/IGAke2Jhc2UkMH0gYCA6ICcnO1xuICAgICAgICAgICAgY29tbWFuZHMuZm9yRWFjaChjb21tYW5kID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBjb21tYW5kU3RyaW5nID0gYCR7cHJlZml4fSR7cGFyZW50Q29tbWFuZHN9JHtjb21tYW5kWzBdLnJlcGxhY2UoL15cXCQwID8vLCAnJyl9YDtcbiAgICAgICAgICAgICAgICB1aS5zcGFuKHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogY29tbWFuZFN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWzAsIDIsIDAsIDJdLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogbWF4V2lkdGgoY29tbWFuZHMsIHRoZVdyYXAsIGAke2Jhc2UkMH0ke3BhcmVudENvbW1hbmRzfWApICsgNCxcbiAgICAgICAgICAgICAgICB9LCB7IHRleHQ6IGNvbW1hbmRbMV0gfSk7XG4gICAgICAgICAgICAgICAgY29uc3QgaGludHMgPSBbXTtcbiAgICAgICAgICAgICAgICBpZiAoY29tbWFuZFsyXSlcbiAgICAgICAgICAgICAgICAgICAgaGludHMucHVzaChgWyR7X18oJ2RlZmF1bHQnKX1dYCk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRbM10gJiYgY29tbWFuZFszXS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaGludHMucHVzaChgWyR7X18oJ2FsaWFzZXM6Jyl9ICR7Y29tbWFuZFszXS5qb2luKCcsICcpfV1gKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRbNF0pIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjb21tYW5kWzRdID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGludHMucHVzaChgWyR7X18oJ2RlcHJlY2F0ZWQ6ICVzJywgY29tbWFuZFs0XSl9XWApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGludHMucHVzaChgWyR7X18oJ2RlcHJlY2F0ZWQnKX1dYCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGhpbnRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB1aS5kaXYoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogaGludHMuam9pbignICcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFkZGluZzogWzAsIDAsIDAsIDJdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ246ICdyaWdodCcsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB1aS5kaXYoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBhbGlhc0tleXMgPSAoT2JqZWN0LmtleXMob3B0aW9ucy5hbGlhcykgfHwgW10pLmNvbmNhdChPYmplY3Qua2V5cyh5YXJncy5wYXJzZWQubmV3QWxpYXNlcykgfHwgW10pO1xuICAgICAgICBrZXlzID0ga2V5cy5maWx0ZXIoa2V5ID0+ICF5YXJncy5wYXJzZWQubmV3QWxpYXNlc1trZXldICYmXG4gICAgICAgICAgICBhbGlhc0tleXMuZXZlcnkoYWxpYXMgPT4gKG9wdGlvbnMuYWxpYXNbYWxpYXNdIHx8IFtdKS5pbmRleE9mKGtleSkgPT09IC0xKSk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRHcm91cCA9IF9fKCdPcHRpb25zOicpO1xuICAgICAgICBpZiAoIWdyb3Vwc1tkZWZhdWx0R3JvdXBdKVxuICAgICAgICAgICAgZ3JvdXBzW2RlZmF1bHRHcm91cF0gPSBbXTtcbiAgICAgICAgYWRkVW5ncm91cGVkS2V5cyhrZXlzLCBvcHRpb25zLmFsaWFzLCBncm91cHMsIGRlZmF1bHRHcm91cCk7XG4gICAgICAgIGNvbnN0IGlzTG9uZ1N3aXRjaCA9IChzdykgPT4gL14tLS8udGVzdChnZXRUZXh0KHN3KSk7XG4gICAgICAgIGNvbnN0IGRpc3BsYXllZEdyb3VwcyA9IE9iamVjdC5rZXlzKGdyb3VwcylcbiAgICAgICAgICAgIC5maWx0ZXIoZ3JvdXBOYW1lID0+IGdyb3Vwc1tncm91cE5hbWVdLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAubWFwKGdyb3VwTmFtZSA9PiB7XG4gICAgICAgICAgICBjb25zdCBub3JtYWxpemVkS2V5cyA9IGdyb3Vwc1tncm91cE5hbWVdXG4gICAgICAgICAgICAgICAgLmZpbHRlcihmaWx0ZXJIaWRkZW5PcHRpb25zKVxuICAgICAgICAgICAgICAgIC5tYXAoa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoYWxpYXNLZXlzLmluY2x1ZGVzKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBrZXk7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDAsIGFsaWFzS2V5OyAoYWxpYXNLZXkgPSBhbGlhc0tleXNbaV0pICE9PSB1bmRlZmluZWQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKG9wdGlvbnMuYWxpYXNbYWxpYXNLZXldIHx8IFtdKS5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGFsaWFzS2V5O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4geyBncm91cE5hbWUsIG5vcm1hbGl6ZWRLZXlzIH07XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKCh7IG5vcm1hbGl6ZWRLZXlzIH0pID0+IG5vcm1hbGl6ZWRLZXlzLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAubWFwKCh7IGdyb3VwTmFtZSwgbm9ybWFsaXplZEtleXMgfSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3dpdGNoZXMgPSBub3JtYWxpemVkS2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgICAgICAgICAgICAgYWNjW2tleV0gPSBba2V5XVxuICAgICAgICAgICAgICAgICAgICAuY29uY2F0KG9wdGlvbnMuYWxpYXNba2V5XSB8fCBbXSlcbiAgICAgICAgICAgICAgICAgICAgLm1hcChzdyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChncm91cE5hbWUgPT09IHNlbGYuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSgpKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN3O1xuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKC9eWzAtOV0kLy50ZXN0KHN3KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gb3B0aW9ucy5ib29sZWFuLmluY2x1ZGVzKGtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAnLSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnLS0nXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzdy5sZW5ndGggPiAxXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gJy0tJ1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICctJykgKyBzdyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoc3cxLCBzdzIpID0+IGlzTG9uZ1N3aXRjaChzdzEpID09PSBpc0xvbmdTd2l0Y2goc3cyKVxuICAgICAgICAgICAgICAgICAgICA/IDBcbiAgICAgICAgICAgICAgICAgICAgOiBpc0xvbmdTd2l0Y2goc3cxKVxuICAgICAgICAgICAgICAgICAgICAgICAgPyAxXG4gICAgICAgICAgICAgICAgICAgICAgICA6IC0xKVxuICAgICAgICAgICAgICAgICAgICAuam9pbignLCAnKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwge30pO1xuICAgICAgICAgICAgcmV0dXJuIHsgZ3JvdXBOYW1lLCBub3JtYWxpemVkS2V5cywgc3dpdGNoZXMgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHNob3J0U3dpdGNoZXNVc2VkID0gZGlzcGxheWVkR3JvdXBzXG4gICAgICAgICAgICAuZmlsdGVyKCh7IGdyb3VwTmFtZSB9KSA9PiBncm91cE5hbWUgIT09IHNlbGYuZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSgpKVxuICAgICAgICAgICAgLnNvbWUoKHsgbm9ybWFsaXplZEtleXMsIHN3aXRjaGVzIH0pID0+ICFub3JtYWxpemVkS2V5cy5ldmVyeShrZXkgPT4gaXNMb25nU3dpdGNoKHN3aXRjaGVzW2tleV0pKSk7XG4gICAgICAgIGlmIChzaG9ydFN3aXRjaGVzVXNlZCkge1xuICAgICAgICAgICAgZGlzcGxheWVkR3JvdXBzXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoeyBncm91cE5hbWUgfSkgPT4gZ3JvdXBOYW1lICE9PSBzZWxmLmdldFBvc2l0aW9uYWxHcm91cE5hbWUoKSlcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgoeyBub3JtYWxpemVkS2V5cywgc3dpdGNoZXMgfSkgPT4ge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTG9uZ1N3aXRjaChzd2l0Y2hlc1trZXldKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoZXNba2V5XSA9IGFkZEluZGVudGF0aW9uKHN3aXRjaGVzW2tleV0sICcteCwgJy5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkaXNwbGF5ZWRHcm91cHMuZm9yRWFjaCgoeyBncm91cE5hbWUsIG5vcm1hbGl6ZWRLZXlzLCBzd2l0Y2hlcyB9KSA9PiB7XG4gICAgICAgICAgICB1aS5kaXYoZ3JvdXBOYW1lKTtcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBrc3dpdGNoID0gc3dpdGNoZXNba2V5XTtcbiAgICAgICAgICAgICAgICBsZXQgZGVzYyA9IGRlc2NyaXB0aW9uc1trZXldIHx8ICcnO1xuICAgICAgICAgICAgICAgIGxldCB0eXBlID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoZGVzYy5pbmNsdWRlcyhkZWZlclkxOG5Mb29rdXBQcmVmaXgpKVxuICAgICAgICAgICAgICAgICAgICBkZXNjID0gX18oZGVzYy5zdWJzdHJpbmcoZGVmZXJZMThuTG9va3VwUHJlZml4Lmxlbmd0aCkpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmJvb2xlYW4uaW5jbHVkZXMoa2V5KSlcbiAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGBbJHtfXygnYm9vbGVhbicpfV1gO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmNvdW50LmluY2x1ZGVzKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ2NvdW50Jyl9XWA7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuc3RyaW5nLmluY2x1ZGVzKGtleSkpXG4gICAgICAgICAgICAgICAgICAgIHR5cGUgPSBgWyR7X18oJ3N0cmluZycpfV1gO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm5vcm1hbGl6ZS5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gYFske19fKCdzdHJpbmcnKX1dYDtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5hcnJheS5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gYFske19fKCdhcnJheScpfV1gO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm51bWJlci5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAgICAgICAgICAgICB0eXBlID0gYFske19fKCdudW1iZXInKX1dYDtcbiAgICAgICAgICAgICAgICBjb25zdCBkZXByZWNhdGVkRXh0cmEgPSAoZGVwcmVjYXRlZCkgPT4gdHlwZW9mIGRlcHJlY2F0ZWQgPT09ICdzdHJpbmcnXG4gICAgICAgICAgICAgICAgICAgID8gYFske19fKCdkZXByZWNhdGVkOiAlcycsIGRlcHJlY2F0ZWQpfV1gXG4gICAgICAgICAgICAgICAgICAgIDogYFske19fKCdkZXByZWNhdGVkJyl9XWA7XG4gICAgICAgICAgICAgICAgY29uc3QgZXh0cmEgPSBbXG4gICAgICAgICAgICAgICAgICAgIGtleSBpbiBkZXByZWNhdGVkT3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBkZXByZWNhdGVkRXh0cmEoZGVwcmVjYXRlZE9wdGlvbnNba2V5XSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgdHlwZSxcbiAgICAgICAgICAgICAgICAgICAga2V5IGluIGRlbWFuZGVkT3B0aW9ucyA/IGBbJHtfXygncmVxdWlyZWQnKX1dYCA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY2hvaWNlcyAmJiBvcHRpb25zLmNob2ljZXNba2V5XVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgWyR7X18oJ2Nob2ljZXM6Jyl9ICR7c2VsZi5zdHJpbmdpZmllZFZhbHVlcyhvcHRpb25zLmNob2ljZXNba2V5XSl9XWBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFN0cmluZyhvcHRpb25zLmRlZmF1bHRba2V5XSwgb3B0aW9ucy5kZWZhdWx0RGVzY3JpcHRpb25ba2V5XSksXG4gICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKEJvb2xlYW4pXG4gICAgICAgICAgICAgICAgICAgIC5qb2luKCcgJyk7XG4gICAgICAgICAgICAgICAgdWkuc3Bhbih7XG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGdldFRleHQoa3N3aXRjaCksXG4gICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IFswLCAyLCAwLCAyICsgZ2V0SW5kZW50YXRpb24oa3N3aXRjaCldLFxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogbWF4V2lkdGgoc3dpdGNoZXMsIHRoZVdyYXApICsgNCxcbiAgICAgICAgICAgICAgICB9LCBkZXNjKTtcbiAgICAgICAgICAgICAgICBjb25zdCBzaG91bGRIaWRlT3B0aW9uRXh0cmFzID0geWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0VXNhZ2VDb25maWd1cmF0aW9uKClbJ2hpZGUtdHlwZXMnXSA9PT1cbiAgICAgICAgICAgICAgICAgICAgdHJ1ZTtcbiAgICAgICAgICAgICAgICBpZiAoZXh0cmEgJiYgIXNob3VsZEhpZGVPcHRpb25FeHRyYXMpXG4gICAgICAgICAgICAgICAgICAgIHVpLmRpdih7IHRleHQ6IGV4dHJhLCBwYWRkaW5nOiBbMCwgMCwgMCwgMl0sIGFsaWduOiAncmlnaHQnIH0pO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHVpLmRpdigpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGV4YW1wbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgdWkuZGl2KF9fKCdFeGFtcGxlczonKSk7XG4gICAgICAgICAgICBleGFtcGxlcy5mb3JFYWNoKGV4YW1wbGUgPT4ge1xuICAgICAgICAgICAgICAgIGV4YW1wbGVbMF0gPSBleGFtcGxlWzBdLnJlcGxhY2UoL1xcJDAvZywgYmFzZSQwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZXhhbXBsZXMuZm9yRWFjaChleGFtcGxlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZXhhbXBsZVsxXSA9PT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGV4YW1wbGVbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBbMCwgMiwgMCwgMl0sXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdWkuZGl2KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGV4YW1wbGVbMF0sXG4gICAgICAgICAgICAgICAgICAgICAgICBwYWRkaW5nOiBbMCwgMiwgMCwgMl0sXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogbWF4V2lkdGgoZXhhbXBsZXMsIHRoZVdyYXApICsgNCxcbiAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dDogZXhhbXBsZVsxXSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB1aS5kaXYoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZXBpbG9ncy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBjb25zdCBlID0gZXBpbG9nc1xuICAgICAgICAgICAgICAgIC5tYXAoZXBpbG9nID0+IGVwaWxvZy5yZXBsYWNlKC9cXCQwL2csIGJhc2UkMCkpXG4gICAgICAgICAgICAgICAgLmpvaW4oJ1xcbicpO1xuICAgICAgICAgICAgdWkuZGl2KGAke2V9XFxuYCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVpLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxzKiQvLCAnJyk7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBtYXhXaWR0aCh0YWJsZSwgdGhlV3JhcCwgbW9kaWZpZXIpIHtcbiAgICAgICAgbGV0IHdpZHRoID0gMDtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHRhYmxlKSkge1xuICAgICAgICAgICAgdGFibGUgPSBPYmplY3QudmFsdWVzKHRhYmxlKS5tYXAodiA9PiBbdl0pO1xuICAgICAgICB9XG4gICAgICAgIHRhYmxlLmZvckVhY2godiA9PiB7XG4gICAgICAgICAgICB3aWR0aCA9IE1hdGgubWF4KHNoaW0uc3RyaW5nV2lkdGgobW9kaWZpZXIgPyBgJHttb2RpZmllcn0gJHtnZXRUZXh0KHZbMF0pfWAgOiBnZXRUZXh0KHZbMF0pKSArIGdldEluZGVudGF0aW9uKHZbMF0pLCB3aWR0aCk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAodGhlV3JhcClcbiAgICAgICAgICAgIHdpZHRoID0gTWF0aC5taW4od2lkdGgsIHBhcnNlSW50KCh0aGVXcmFwICogMC41KS50b1N0cmluZygpLCAxMCkpO1xuICAgICAgICByZXR1cm4gd2lkdGg7XG4gICAgfVxuICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZUFsaWFzZXMoKSB7XG4gICAgICAgIGNvbnN0IGRlbWFuZGVkT3B0aW9ucyA9IHlhcmdzLmdldERlbWFuZGVkT3B0aW9ucygpO1xuICAgICAgICBjb25zdCBvcHRpb25zID0geWFyZ3MuZ2V0T3B0aW9ucygpO1xuICAgICAgICAoT2JqZWN0LmtleXMob3B0aW9ucy5hbGlhcykgfHwgW10pLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgIG9wdGlvbnMuYWxpYXNba2V5XS5mb3JFYWNoKGFsaWFzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRpb25zW2FsaWFzXSlcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5kZXNjcmliZShrZXksIGRlc2NyaXB0aW9uc1thbGlhc10pO1xuICAgICAgICAgICAgICAgIGlmIChhbGlhcyBpbiBkZW1hbmRlZE9wdGlvbnMpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLmRlbWFuZE9wdGlvbihrZXksIGRlbWFuZGVkT3B0aW9uc1thbGlhc10pO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmJvb2xlYW4uaW5jbHVkZXMoYWxpYXMpKVxuICAgICAgICAgICAgICAgICAgICB5YXJncy5ib29sZWFuKGtleSk7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMuY291bnQuaW5jbHVkZXMoYWxpYXMpKVxuICAgICAgICAgICAgICAgICAgICB5YXJncy5jb3VudChrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnN0cmluZy5pbmNsdWRlcyhhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLnN0cmluZyhrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm5vcm1hbGl6ZS5pbmNsdWRlcyhhbGlhcykpXG4gICAgICAgICAgICAgICAgICAgIHlhcmdzLm5vcm1hbGl6ZShrZXkpO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmFycmF5LmluY2x1ZGVzKGFsaWFzKSlcbiAgICAgICAgICAgICAgICAgICAgeWFyZ3MuYXJyYXkoa2V5KTtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5udW1iZXIuaW5jbHVkZXMoYWxpYXMpKVxuICAgICAgICAgICAgICAgICAgICB5YXJncy5udW1iZXIoa2V5KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgbGV0IGNhY2hlZEhlbHBNZXNzYWdlO1xuICAgIHNlbGYuY2FjaGVIZWxwTWVzc2FnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FjaGVkSGVscE1lc3NhZ2UgPSB0aGlzLmhlbHAoKTtcbiAgICB9O1xuICAgIHNlbGYuY2xlYXJDYWNoZWRIZWxwTWVzc2FnZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FjaGVkSGVscE1lc3NhZ2UgPSB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICBzZWxmLmhhc0NhY2hlZEhlbHBNZXNzYWdlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gISFjYWNoZWRIZWxwTWVzc2FnZTtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGFkZFVuZ3JvdXBlZEtleXMoa2V5cywgYWxpYXNlcywgZ3JvdXBzLCBkZWZhdWx0R3JvdXApIHtcbiAgICAgICAgbGV0IGdyb3VwZWRLZXlzID0gW107XG4gICAgICAgIGxldCB0b0NoZWNrID0gbnVsbDtcbiAgICAgICAgT2JqZWN0LmtleXMoZ3JvdXBzKS5mb3JFYWNoKGdyb3VwID0+IHtcbiAgICAgICAgICAgIGdyb3VwZWRLZXlzID0gZ3JvdXBlZEtleXMuY29uY2F0KGdyb3Vwc1tncm91cF0pO1xuICAgICAgICB9KTtcbiAgICAgICAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICB0b0NoZWNrID0gW2tleV0uY29uY2F0KGFsaWFzZXNba2V5XSk7XG4gICAgICAgICAgICBpZiAoIXRvQ2hlY2suc29tZShrID0+IGdyb3VwZWRLZXlzLmluZGV4T2YoaykgIT09IC0xKSkge1xuICAgICAgICAgICAgICAgIGdyb3Vwc1tkZWZhdWx0R3JvdXBdLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBncm91cGVkS2V5cztcbiAgICB9XG4gICAgZnVuY3Rpb24gZmlsdGVySGlkZGVuT3B0aW9ucyhrZXkpIHtcbiAgICAgICAgcmV0dXJuICh5YXJncy5nZXRPcHRpb25zKCkuaGlkZGVuT3B0aW9ucy5pbmRleE9mKGtleSkgPCAwIHx8XG4gICAgICAgICAgICB5YXJncy5wYXJzZWQuYXJndlt5YXJncy5nZXRPcHRpb25zKCkuc2hvd0hpZGRlbk9wdF0pO1xuICAgIH1cbiAgICBzZWxmLnNob3dIZWxwID0gKGxldmVsKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvZ2dlciA9IHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldExvZ2dlckluc3RhbmNlKCk7XG4gICAgICAgIGlmICghbGV2ZWwpXG4gICAgICAgICAgICBsZXZlbCA9ICdlcnJvcic7XG4gICAgICAgIGNvbnN0IGVtaXQgPSB0eXBlb2YgbGV2ZWwgPT09ICdmdW5jdGlvbicgPyBsZXZlbCA6IGxvZ2dlcltsZXZlbF07XG4gICAgICAgIGVtaXQoc2VsZi5oZWxwKCkpO1xuICAgIH07XG4gICAgc2VsZi5mdW5jdGlvbkRlc2NyaXB0aW9uID0gZm4gPT4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGZuLm5hbWVcbiAgICAgICAgICAgID8gc2hpbS5QYXJzZXIuZGVjYW1lbGl6ZShmbi5uYW1lLCAnLScpXG4gICAgICAgICAgICA6IF9fKCdnZW5lcmF0ZWQtdmFsdWUnKTtcbiAgICAgICAgcmV0dXJuIFsnKCcsIGRlc2NyaXB0aW9uLCAnKSddLmpvaW4oJycpO1xuICAgIH07XG4gICAgc2VsZi5zdHJpbmdpZmllZFZhbHVlcyA9IGZ1bmN0aW9uIHN0cmluZ2lmaWVkVmFsdWVzKHZhbHVlcywgc2VwYXJhdG9yKSB7XG4gICAgICAgIGxldCBzdHJpbmcgPSAnJztcbiAgICAgICAgY29uc3Qgc2VwID0gc2VwYXJhdG9yIHx8ICcsICc7XG4gICAgICAgIGNvbnN0IGFycmF5ID0gW10uY29uY2F0KHZhbHVlcyk7XG4gICAgICAgIGlmICghdmFsdWVzIHx8ICFhcnJheS5sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm4gc3RyaW5nO1xuICAgICAgICBhcnJheS5mb3JFYWNoKHZhbHVlID0+IHtcbiAgICAgICAgICAgIGlmIChzdHJpbmcubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHN0cmluZyArPSBzZXA7XG4gICAgICAgICAgICBzdHJpbmcgKz0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGRlZmF1bHRTdHJpbmcodmFsdWUsIGRlZmF1bHREZXNjcmlwdGlvbikge1xuICAgICAgICBsZXQgc3RyaW5nID0gYFske19fKCdkZWZhdWx0OicpfSBgO1xuICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCAmJiAhZGVmYXVsdERlc2NyaXB0aW9uKVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmIChkZWZhdWx0RGVzY3JpcHRpb24pIHtcbiAgICAgICAgICAgIHN0cmluZyArPSBkZWZhdWx0RGVzY3JpcHRpb247XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBgXCIke3ZhbHVlfVwiYDtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSAnb2JqZWN0JzpcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHtzdHJpbmd9XWA7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHdpbmRvd1dpZHRoKCkge1xuICAgICAgICBjb25zdCBtYXhXaWR0aCA9IDgwO1xuICAgICAgICBpZiAoc2hpbS5wcm9jZXNzLnN0ZENvbHVtbnMpIHtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1pbihtYXhXaWR0aCwgc2hpbS5wcm9jZXNzLnN0ZENvbHVtbnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG1heFdpZHRoO1xuICAgICAgICB9XG4gICAgfVxuICAgIGxldCB2ZXJzaW9uID0gbnVsbDtcbiAgICBzZWxmLnZlcnNpb24gPSB2ZXIgPT4ge1xuICAgICAgICB2ZXJzaW9uID0gdmVyO1xuICAgIH07XG4gICAgc2VsZi5zaG93VmVyc2lvbiA9IGxldmVsID0+IHtcbiAgICAgICAgY29uc3QgbG9nZ2VyID0geWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkuZ2V0TG9nZ2VySW5zdGFuY2UoKTtcbiAgICAgICAgaWYgKCFsZXZlbClcbiAgICAgICAgICAgIGxldmVsID0gJ2Vycm9yJztcbiAgICAgICAgY29uc3QgZW1pdCA9IHR5cGVvZiBsZXZlbCA9PT0gJ2Z1bmN0aW9uJyA/IGxldmVsIDogbG9nZ2VyW2xldmVsXTtcbiAgICAgICAgZW1pdCh2ZXJzaW9uKTtcbiAgICB9O1xuICAgIHNlbGYucmVzZXQgPSBmdW5jdGlvbiByZXNldChsb2NhbExvb2t1cCkge1xuICAgICAgICBmYWlsTWVzc2FnZSA9IG51bGw7XG4gICAgICAgIGZhaWx1cmVPdXRwdXQgPSBmYWxzZTtcbiAgICAgICAgdXNhZ2VzID0gW107XG4gICAgICAgIHVzYWdlRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgZXBpbG9ncyA9IFtdO1xuICAgICAgICBleGFtcGxlcyA9IFtdO1xuICAgICAgICBjb21tYW5kcyA9IFtdO1xuICAgICAgICBkZXNjcmlwdGlvbnMgPSBvYmpGaWx0ZXIoZGVzY3JpcHRpb25zLCBrID0+ICFsb2NhbExvb2t1cFtrXSk7XG4gICAgICAgIHJldHVybiBzZWxmO1xuICAgIH07XG4gICAgY29uc3QgZnJvemVucyA9IFtdO1xuICAgIHNlbGYuZnJlZXplID0gZnVuY3Rpb24gZnJlZXplKCkge1xuICAgICAgICBmcm96ZW5zLnB1c2goe1xuICAgICAgICAgICAgZmFpbE1lc3NhZ2UsXG4gICAgICAgICAgICBmYWlsdXJlT3V0cHV0LFxuICAgICAgICAgICAgdXNhZ2VzLFxuICAgICAgICAgICAgdXNhZ2VEaXNhYmxlZCxcbiAgICAgICAgICAgIGVwaWxvZ3MsXG4gICAgICAgICAgICBleGFtcGxlcyxcbiAgICAgICAgICAgIGNvbW1hbmRzLFxuICAgICAgICAgICAgZGVzY3JpcHRpb25zLFxuICAgICAgICB9KTtcbiAgICB9O1xuICAgIHNlbGYudW5mcmVlemUgPSBmdW5jdGlvbiB1bmZyZWV6ZShkZWZhdWx0Q29tbWFuZCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGZyb3plbiA9IGZyb3plbnMucG9wKCk7XG4gICAgICAgIGlmICghZnJvemVuKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBpZiAoZGVmYXVsdENvbW1hbmQpIHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9ucyA9IHsgLi4uZnJvemVuLmRlc2NyaXB0aW9ucywgLi4uZGVzY3JpcHRpb25zIH07XG4gICAgICAgICAgICBjb21tYW5kcyA9IFsuLi5mcm96ZW4uY29tbWFuZHMsIC4uLmNvbW1hbmRzXTtcbiAgICAgICAgICAgIHVzYWdlcyA9IFsuLi5mcm96ZW4udXNhZ2VzLCAuLi51c2FnZXNdO1xuICAgICAgICAgICAgZXhhbXBsZXMgPSBbLi4uZnJvemVuLmV4YW1wbGVzLCAuLi5leGFtcGxlc107XG4gICAgICAgICAgICBlcGlsb2dzID0gWy4uLmZyb3plbi5lcGlsb2dzLCAuLi5lcGlsb2dzXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICh7XG4gICAgICAgICAgICAgICAgZmFpbE1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgZmFpbHVyZU91dHB1dCxcbiAgICAgICAgICAgICAgICB1c2FnZXMsXG4gICAgICAgICAgICAgICAgdXNhZ2VEaXNhYmxlZCxcbiAgICAgICAgICAgICAgICBlcGlsb2dzLFxuICAgICAgICAgICAgICAgIGV4YW1wbGVzLFxuICAgICAgICAgICAgICAgIGNvbW1hbmRzLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9ucyxcbiAgICAgICAgICAgIH0gPSBmcm96ZW4pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gc2VsZjtcbn1cbmZ1bmN0aW9uIGlzSW5kZW50ZWRUZXh0KHRleHQpIHtcbiAgICByZXR1cm4gdHlwZW9mIHRleHQgPT09ICdvYmplY3QnO1xufVxuZnVuY3Rpb24gYWRkSW5kZW50YXRpb24odGV4dCwgaW5kZW50KSB7XG4gICAgcmV0dXJuIGlzSW5kZW50ZWRUZXh0KHRleHQpXG4gICAgICAgID8geyB0ZXh0OiB0ZXh0LnRleHQsIGluZGVudGF0aW9uOiB0ZXh0LmluZGVudGF0aW9uICsgaW5kZW50IH1cbiAgICAgICAgOiB7IHRleHQsIGluZGVudGF0aW9uOiBpbmRlbnQgfTtcbn1cbmZ1bmN0aW9uIGdldEluZGVudGF0aW9uKHRleHQpIHtcbiAgICByZXR1cm4gaXNJbmRlbnRlZFRleHQodGV4dCkgPyB0ZXh0LmluZGVudGF0aW9uIDogMDtcbn1cbmZ1bmN0aW9uIGdldFRleHQodGV4dCkge1xuICAgIHJldHVybiBpc0luZGVudGVkVGV4dCh0ZXh0KSA/IHRleHQudGV4dCA6IHRleHQ7XG59XG4iLCJpbXBvcnQgeyBpc0NvbW1hbmRCdWlsZGVyQ2FsbGJhY2sgfSBmcm9tICcuL2NvbW1hbmQuanMnO1xuaW1wb3J0IHsgYXNzZXJ0Tm90U3RyaWN0RXF1YWwgfSBmcm9tICcuL3R5cGluZ3MvY29tbW9uLXR5cGVzLmpzJztcbmltcG9ydCAqIGFzIHRlbXBsYXRlcyBmcm9tICcuL2NvbXBsZXRpb24tdGVtcGxhdGVzLmpzJztcbmltcG9ydCB7IGlzUHJvbWlzZSB9IGZyb20gJy4vdXRpbHMvaXMtcHJvbWlzZS5qcyc7XG5pbXBvcnQgeyBwYXJzZUNvbW1hbmQgfSBmcm9tICcuL3BhcnNlLWNvbW1hbmQuanMnO1xuZXhwb3J0IGNsYXNzIENvbXBsZXRpb24ge1xuICAgIGNvbnN0cnVjdG9yKHlhcmdzLCB1c2FnZSwgY29tbWFuZCwgc2hpbSkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYztcbiAgICAgICAgdGhpcy55YXJncyA9IHlhcmdzO1xuICAgICAgICB0aGlzLnVzYWdlID0gdXNhZ2U7XG4gICAgICAgIHRoaXMuY29tbWFuZCA9IGNvbW1hbmQ7XG4gICAgICAgIHRoaXMuc2hpbSA9IHNoaW07XG4gICAgICAgIHRoaXMuY29tcGxldGlvbktleSA9ICdnZXQteWFyZ3MtY29tcGxldGlvbnMnO1xuICAgICAgICB0aGlzLmFsaWFzZXMgPSBudWxsO1xuICAgICAgICB0aGlzLmN1c3RvbUNvbXBsZXRpb25GdW5jdGlvbiA9IG51bGw7XG4gICAgICAgIHRoaXMuaW5kZXhBZnRlckxhc3RSZXNldCA9IDA7XG4gICAgICAgIHRoaXMuenNoU2hlbGwgPVxuICAgICAgICAgICAgKF9jID0gKCgoX2EgPSB0aGlzLnNoaW0uZ2V0RW52KCdTSEVMTCcpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuaW5jbHVkZXMoJ3pzaCcpKSB8fFxuICAgICAgICAgICAgICAgICgoX2IgPSB0aGlzLnNoaW0uZ2V0RW52KCdaU0hfTkFNRScpKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuaW5jbHVkZXMoJ3pzaCcpKSkpICE9PSBudWxsICYmIF9jICE9PSB2b2lkIDAgPyBfYyA6IGZhbHNlO1xuICAgIH1cbiAgICBkZWZhdWx0Q29tcGxldGlvbihhcmdzLCBhcmd2LCBjdXJyZW50LCBkb25lKSB7XG4gICAgICAgIGNvbnN0IGhhbmRsZXJzID0gdGhpcy5jb21tYW5kLmdldENvbW1hbmRIYW5kbGVycygpO1xuICAgICAgICBmb3IgKGxldCBpID0gMCwgaWkgPSBhcmdzLmxlbmd0aDsgaSA8IGlpOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChoYW5kbGVyc1thcmdzW2ldXSAmJiBoYW5kbGVyc1thcmdzW2ldXS5idWlsZGVyKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYnVpbGRlciA9IGhhbmRsZXJzW2FyZ3NbaV1dLmJ1aWxkZXI7XG4gICAgICAgICAgICAgICAgaWYgKGlzQ29tbWFuZEJ1aWxkZXJDYWxsYmFjayhidWlsZGVyKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluZGV4QWZ0ZXJMYXN0UmVzZXQgPSBpICsgMTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeSA9IHRoaXMueWFyZ3MuZ2V0SW50ZXJuYWxNZXRob2RzKCkucmVzZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgYnVpbGRlcih5LCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHkuYXJndjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29tcGxldGlvbnMgPSBbXTtcbiAgICAgICAgdGhpcy5jb21tYW5kQ29tcGxldGlvbnMoY29tcGxldGlvbnMsIGFyZ3MsIGN1cnJlbnQpO1xuICAgICAgICB0aGlzLm9wdGlvbkNvbXBsZXRpb25zKGNvbXBsZXRpb25zLCBhcmdzLCBhcmd2LCBjdXJyZW50KTtcbiAgICAgICAgdGhpcy5jaG9pY2VzRnJvbU9wdGlvbnNDb21wbGV0aW9ucyhjb21wbGV0aW9ucywgYXJncywgYXJndiwgY3VycmVudCk7XG4gICAgICAgIHRoaXMuY2hvaWNlc0Zyb21Qb3NpdGlvbmFsc0NvbXBsZXRpb25zKGNvbXBsZXRpb25zLCBhcmdzLCBhcmd2LCBjdXJyZW50KTtcbiAgICAgICAgZG9uZShudWxsLCBjb21wbGV0aW9ucyk7XG4gICAgfVxuICAgIGNvbW1hbmRDb21wbGV0aW9ucyhjb21wbGV0aW9ucywgYXJncywgY3VycmVudCkge1xuICAgICAgICBjb25zdCBwYXJlbnRDb21tYW5kcyA9IHRoaXMueWFyZ3NcbiAgICAgICAgICAgIC5nZXRJbnRlcm5hbE1ldGhvZHMoKVxuICAgICAgICAgICAgLmdldENvbnRleHQoKS5jb21tYW5kcztcbiAgICAgICAgaWYgKCFjdXJyZW50Lm1hdGNoKC9eLS8pICYmXG4gICAgICAgICAgICBwYXJlbnRDb21tYW5kc1twYXJlbnRDb21tYW5kcy5sZW5ndGggLSAxXSAhPT0gY3VycmVudCAmJlxuICAgICAgICAgICAgIXRoaXMucHJldmlvdXNBcmdIYXNDaG9pY2VzKGFyZ3MpKSB7XG4gICAgICAgICAgICB0aGlzLnVzYWdlLmdldENvbW1hbmRzKCkuZm9yRWFjaCh1c2FnZUNvbW1hbmQgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1hbmROYW1lID0gcGFyc2VDb21tYW5kKHVzYWdlQ29tbWFuZFswXSkuY21kO1xuICAgICAgICAgICAgICAgIGlmIChhcmdzLmluZGV4T2YoY29tbWFuZE5hbWUpID09PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuenNoU2hlbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25zLnB1c2goY29tbWFuZE5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVzYyA9IHVzYWdlQ29tbWFuZFsxXSB8fCAnJztcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25zLnB1c2goY29tbWFuZE5hbWUucmVwbGFjZSgvOi9nLCAnXFxcXDonKSArICc6JyArIGRlc2MpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb3B0aW9uQ29tcGxldGlvbnMoY29tcGxldGlvbnMsIGFyZ3MsIGFyZ3YsIGN1cnJlbnQpIHtcbiAgICAgICAgaWYgKChjdXJyZW50Lm1hdGNoKC9eLS8pIHx8IChjdXJyZW50ID09PSAnJyAmJiBjb21wbGV0aW9ucy5sZW5ndGggPT09IDApKSAmJlxuICAgICAgICAgICAgIXRoaXMucHJldmlvdXNBcmdIYXNDaG9pY2VzKGFyZ3MpKSB7XG4gICAgICAgICAgICBjb25zdCBvcHRpb25zID0gdGhpcy55YXJncy5nZXRPcHRpb25zKCk7XG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbmFsS2V5cyA9IHRoaXMueWFyZ3MuZ2V0R3JvdXBzKClbdGhpcy51c2FnZS5nZXRQb3NpdGlvbmFsR3JvdXBOYW1lKCldIHx8IFtdO1xuICAgICAgICAgICAgT2JqZWN0LmtleXMob3B0aW9ucy5rZXkpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZWdhYmxlID0gISFvcHRpb25zLmNvbmZpZ3VyYXRpb25bJ2Jvb2xlYW4tbmVnYXRpb24nXSAmJlxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmJvb2xlYW4uaW5jbHVkZXMoa2V5KTtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1Bvc2l0aW9uYWxLZXkgPSBwb3NpdGlvbmFsS2V5cy5pbmNsdWRlcyhrZXkpO1xuICAgICAgICAgICAgICAgIGlmICghaXNQb3NpdGlvbmFsS2V5ICYmXG4gICAgICAgICAgICAgICAgICAgICFvcHRpb25zLmhpZGRlbk9wdGlvbnMuaW5jbHVkZXMoa2V5KSAmJlxuICAgICAgICAgICAgICAgICAgICAhdGhpcy5hcmdzQ29udGFpbktleShhcmdzLCBrZXksIG5lZ2FibGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcGxldGVPcHRpb25LZXkoa2V5LCBjb21wbGV0aW9ucywgY3VycmVudCwgbmVnYWJsZSAmJiAhIW9wdGlvbnMuZGVmYXVsdFtrZXldKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjaG9pY2VzRnJvbU9wdGlvbnNDb21wbGV0aW9ucyhjb21wbGV0aW9ucywgYXJncywgYXJndiwgY3VycmVudCkge1xuICAgICAgICBpZiAodGhpcy5wcmV2aW91c0FyZ0hhc0Nob2ljZXMoYXJncykpIHtcbiAgICAgICAgICAgIGNvbnN0IGNob2ljZXMgPSB0aGlzLmdldFByZXZpb3VzQXJnQ2hvaWNlcyhhcmdzKTtcbiAgICAgICAgICAgIGlmIChjaG9pY2VzICYmIGNob2ljZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGNvbXBsZXRpb25zLnB1c2goLi4uY2hvaWNlcy5tYXAoYyA9PiBjLnJlcGxhY2UoLzovZywgJ1xcXFw6JykpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjaG9pY2VzRnJvbVBvc2l0aW9uYWxzQ29tcGxldGlvbnMoY29tcGxldGlvbnMsIGFyZ3MsIGFyZ3YsIGN1cnJlbnQpIHtcbiAgICAgICAgaWYgKGN1cnJlbnQgPT09ICcnICYmXG4gICAgICAgICAgICBjb21wbGV0aW9ucy5sZW5ndGggPiAwICYmXG4gICAgICAgICAgICB0aGlzLnByZXZpb3VzQXJnSGFzQ2hvaWNlcyhhcmdzKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBvc2l0aW9uYWxLZXlzID0gdGhpcy55YXJncy5nZXRHcm91cHMoKVt0aGlzLnVzYWdlLmdldFBvc2l0aW9uYWxHcm91cE5hbWUoKV0gfHwgW107XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IE1hdGgubWF4KHRoaXMuaW5kZXhBZnRlckxhc3RSZXNldCwgdGhpcy55YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRDb250ZXh0KCkuY29tbWFuZHMubGVuZ3RoICtcbiAgICAgICAgICAgIDEpO1xuICAgICAgICBjb25zdCBwb3NpdGlvbmFsS2V5ID0gcG9zaXRpb25hbEtleXNbYXJndi5fLmxlbmd0aCAtIG9mZnNldCAtIDFdO1xuICAgICAgICBpZiAoIXBvc2l0aW9uYWxLZXkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjaG9pY2VzID0gdGhpcy55YXJncy5nZXRPcHRpb25zKCkuY2hvaWNlc1twb3NpdGlvbmFsS2V5XSB8fCBbXTtcbiAgICAgICAgZm9yIChjb25zdCBjaG9pY2Ugb2YgY2hvaWNlcykge1xuICAgICAgICAgICAgaWYgKGNob2ljZS5zdGFydHNXaXRoKGN1cnJlbnQpKSB7XG4gICAgICAgICAgICAgICAgY29tcGxldGlvbnMucHVzaChjaG9pY2UucmVwbGFjZSgvOi9nLCAnXFxcXDonKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0UHJldmlvdXNBcmdDaG9pY2VzKGFyZ3MpIHtcbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgbGV0IHByZXZpb3VzQXJnID0gYXJnc1thcmdzLmxlbmd0aCAtIDFdO1xuICAgICAgICBsZXQgZmlsdGVyID0gJyc7XG4gICAgICAgIGlmICghcHJldmlvdXNBcmcuc3RhcnRzV2l0aCgnLScpICYmIGFyZ3MubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgZmlsdGVyID0gcHJldmlvdXNBcmc7XG4gICAgICAgICAgICBwcmV2aW91c0FyZyA9IGFyZ3NbYXJncy5sZW5ndGggLSAyXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXByZXZpb3VzQXJnLnN0YXJ0c1dpdGgoJy0nKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgcHJldmlvdXNBcmdLZXkgPSBwcmV2aW91c0FyZy5yZXBsYWNlKC9eLSsvLCAnJyk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLnlhcmdzLmdldE9wdGlvbnMoKTtcbiAgICAgICAgY29uc3QgcG9zc2libGVBbGlhc2VzID0gW1xuICAgICAgICAgICAgcHJldmlvdXNBcmdLZXksXG4gICAgICAgICAgICAuLi4odGhpcy55YXJncy5nZXRBbGlhc2VzKClbcHJldmlvdXNBcmdLZXldIHx8IFtdKSxcbiAgICAgICAgXTtcbiAgICAgICAgbGV0IGNob2ljZXM7XG4gICAgICAgIGZvciAoY29uc3QgcG9zc2libGVBbGlhcyBvZiBwb3NzaWJsZUFsaWFzZXMpIHtcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucy5rZXksIHBvc3NpYmxlQWxpYXMpICYmXG4gICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShvcHRpb25zLmNob2ljZXNbcG9zc2libGVBbGlhc10pKSB7XG4gICAgICAgICAgICAgICAgY2hvaWNlcyA9IG9wdGlvbnMuY2hvaWNlc1twb3NzaWJsZUFsaWFzXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY2hvaWNlcykge1xuICAgICAgICAgICAgcmV0dXJuIGNob2ljZXMuZmlsdGVyKGNob2ljZSA9PiAhZmlsdGVyIHx8IGNob2ljZS5zdGFydHNXaXRoKGZpbHRlcikpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHByZXZpb3VzQXJnSGFzQ2hvaWNlcyhhcmdzKSB7XG4gICAgICAgIGNvbnN0IGNob2ljZXMgPSB0aGlzLmdldFByZXZpb3VzQXJnQ2hvaWNlcyhhcmdzKTtcbiAgICAgICAgcmV0dXJuIGNob2ljZXMgIT09IHVuZGVmaW5lZCAmJiBjaG9pY2VzLmxlbmd0aCA+IDA7XG4gICAgfVxuICAgIGFyZ3NDb250YWluS2V5KGFyZ3MsIGtleSwgbmVnYWJsZSkge1xuICAgICAgICBjb25zdCBhcmdzQ29udGFpbnMgPSAocykgPT4gYXJncy5pbmRleE9mKCgvXlteMC05XSQvLnRlc3QocykgPyAnLScgOiAnLS0nKSArIHMpICE9PSAtMTtcbiAgICAgICAgaWYgKGFyZ3NDb250YWlucyhrZXkpKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGlmIChuZWdhYmxlICYmIGFyZ3NDb250YWlucyhgbm8tJHtrZXl9YCkpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKHRoaXMuYWxpYXNlcykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBhbGlhcyBvZiB0aGlzLmFsaWFzZXNba2V5XSkge1xuICAgICAgICAgICAgICAgIGlmIChhcmdzQ29udGFpbnMoYWxpYXMpKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbXBsZXRlT3B0aW9uS2V5KGtleSwgY29tcGxldGlvbnMsIGN1cnJlbnQsIG5lZ2FibGUpIHtcbiAgICAgICAgdmFyIF9hLCBfYiwgX2MsIF9kO1xuICAgICAgICBsZXQga2V5V2l0aERlc2MgPSBrZXk7XG4gICAgICAgIGlmICh0aGlzLnpzaFNoZWxsKSB7XG4gICAgICAgICAgICBjb25zdCBkZXNjcyA9IHRoaXMudXNhZ2UuZ2V0RGVzY3JpcHRpb25zKCk7XG4gICAgICAgICAgICBjb25zdCBhbGlhc0tleSA9IChfYiA9IChfYSA9IHRoaXMgPT09IG51bGwgfHwgdGhpcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogdGhpcy5hbGlhc2VzKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Fba2V5XSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLmZpbmQoYWxpYXMgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlc2MgPSBkZXNjc1thbGlhc107XG4gICAgICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBkZXNjID09PSAnc3RyaW5nJyAmJiBkZXNjLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGNvbnN0IGRlc2NGcm9tQWxpYXMgPSBhbGlhc0tleSA/IGRlc2NzW2FsaWFzS2V5XSA6IHVuZGVmaW5lZDtcbiAgICAgICAgICAgIGNvbnN0IGRlc2MgPSAoX2QgPSAoX2MgPSBkZXNjc1trZXldKSAhPT0gbnVsbCAmJiBfYyAhPT0gdm9pZCAwID8gX2MgOiBkZXNjRnJvbUFsaWFzKSAhPT0gbnVsbCAmJiBfZCAhPT0gdm9pZCAwID8gX2QgOiAnJztcbiAgICAgICAgICAgIGtleVdpdGhEZXNjID0gYCR7a2V5LnJlcGxhY2UoLzovZywgJ1xcXFw6Jyl9OiR7ZGVzY1xuICAgICAgICAgICAgICAgIC5yZXBsYWNlKCdfX3lhcmdzU3RyaW5nX186JywgJycpXG4gICAgICAgICAgICAgICAgLnJlcGxhY2UoLyhcXHJcXG58XFxufFxccikvZ20sICcgJyl9YDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGFydHNCeVR3b0Rhc2hlcyA9IChzKSA9PiAvXi0tLy50ZXN0KHMpO1xuICAgICAgICBjb25zdCBpc1Nob3J0T3B0aW9uID0gKHMpID0+IC9eW14wLTldJC8udGVzdChzKTtcbiAgICAgICAgY29uc3QgZGFzaGVzID0gIXN0YXJ0c0J5VHdvRGFzaGVzKGN1cnJlbnQpICYmIGlzU2hvcnRPcHRpb24oa2V5KSA/ICctJyA6ICctLSc7XG4gICAgICAgIGNvbXBsZXRpb25zLnB1c2goZGFzaGVzICsga2V5V2l0aERlc2MpO1xuICAgICAgICBpZiAobmVnYWJsZSkge1xuICAgICAgICAgICAgY29tcGxldGlvbnMucHVzaChkYXNoZXMgKyAnbm8tJyArIGtleVdpdGhEZXNjKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjdXN0b21Db21wbGV0aW9uKGFyZ3MsIGFyZ3YsIGN1cnJlbnQsIGRvbmUpIHtcbiAgICAgICAgYXNzZXJ0Tm90U3RyaWN0RXF1YWwodGhpcy5jdXN0b21Db21wbGV0aW9uRnVuY3Rpb24sIG51bGwsIHRoaXMuc2hpbSk7XG4gICAgICAgIGlmIChpc1N5bmNDb21wbGV0aW9uRnVuY3Rpb24odGhpcy5jdXN0b21Db21wbGV0aW9uRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmN1c3RvbUNvbXBsZXRpb25GdW5jdGlvbihjdXJyZW50LCBhcmd2KTtcbiAgICAgICAgICAgIGlmIChpc1Byb21pc2UocmVzdWx0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHRcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4obGlzdCA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2hpbS5wcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUobnVsbCwgbGlzdCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNoaW0ucHJvY2Vzcy5uZXh0VGljaygoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkb25lKGVyciwgdW5kZWZpbmVkKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZG9uZShudWxsLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzRmFsbGJhY2tDb21wbGV0aW9uRnVuY3Rpb24odGhpcy5jdXN0b21Db21wbGV0aW9uRnVuY3Rpb24pKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXN0b21Db21wbGV0aW9uRnVuY3Rpb24oY3VycmVudCwgYXJndiwgKG9uQ29tcGxldGVkID0gZG9uZSkgPT4gdGhpcy5kZWZhdWx0Q29tcGxldGlvbihhcmdzLCBhcmd2LCBjdXJyZW50LCBvbkNvbXBsZXRlZCksIGNvbXBsZXRpb25zID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKG51bGwsIGNvbXBsZXRpb25zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VzdG9tQ29tcGxldGlvbkZ1bmN0aW9uKGN1cnJlbnQsIGFyZ3YsIGNvbXBsZXRpb25zID0+IHtcbiAgICAgICAgICAgICAgICBkb25lKG51bGwsIGNvbXBsZXRpb25zKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldENvbXBsZXRpb24oYXJncywgZG9uZSkge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gYXJncy5sZW5ndGggPyBhcmdzW2FyZ3MubGVuZ3RoIC0gMV0gOiAnJztcbiAgICAgICAgY29uc3QgYXJndiA9IHRoaXMueWFyZ3MucGFyc2UoYXJncywgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGNvbXBsZXRpb25GdW5jdGlvbiA9IHRoaXMuY3VzdG9tQ29tcGxldGlvbkZ1bmN0aW9uXG4gICAgICAgICAgICA/IChhcmd2KSA9PiB0aGlzLmN1c3RvbUNvbXBsZXRpb24oYXJncywgYXJndiwgY3VycmVudCwgZG9uZSlcbiAgICAgICAgICAgIDogKGFyZ3YpID0+IHRoaXMuZGVmYXVsdENvbXBsZXRpb24oYXJncywgYXJndiwgY3VycmVudCwgZG9uZSk7XG4gICAgICAgIHJldHVybiBpc1Byb21pc2UoYXJndilcbiAgICAgICAgICAgID8gYXJndi50aGVuKGNvbXBsZXRpb25GdW5jdGlvbilcbiAgICAgICAgICAgIDogY29tcGxldGlvbkZ1bmN0aW9uKGFyZ3YpO1xuICAgIH1cbiAgICBnZW5lcmF0ZUNvbXBsZXRpb25TY3JpcHQoJDAsIGNtZCkge1xuICAgICAgICBsZXQgc2NyaXB0ID0gdGhpcy56c2hTaGVsbFxuICAgICAgICAgICAgPyB0ZW1wbGF0ZXMuY29tcGxldGlvblpzaFRlbXBsYXRlXG4gICAgICAgICAgICA6IHRlbXBsYXRlcy5jb21wbGV0aW9uU2hUZW1wbGF0ZTtcbiAgICAgICAgY29uc3QgbmFtZSA9IHRoaXMuc2hpbS5wYXRoLmJhc2VuYW1lKCQwKTtcbiAgICAgICAgaWYgKCQwLm1hdGNoKC9cXC5qcyQvKSlcbiAgICAgICAgICAgICQwID0gYC4vJHskMH1gO1xuICAgICAgICBzY3JpcHQgPSBzY3JpcHQucmVwbGFjZSgve3thcHBfbmFtZX19L2csIG5hbWUpO1xuICAgICAgICBzY3JpcHQgPSBzY3JpcHQucmVwbGFjZSgve3tjb21wbGV0aW9uX2NvbW1hbmR9fS9nLCBjbWQpO1xuICAgICAgICByZXR1cm4gc2NyaXB0LnJlcGxhY2UoL3t7YXBwX3BhdGh9fS9nLCAkMCk7XG4gICAgfVxuICAgIHJlZ2lzdGVyRnVuY3Rpb24oZm4pIHtcbiAgICAgICAgdGhpcy5jdXN0b21Db21wbGV0aW9uRnVuY3Rpb24gPSBmbjtcbiAgICB9XG4gICAgc2V0UGFyc2VkKHBhcnNlZCkge1xuICAgICAgICB0aGlzLmFsaWFzZXMgPSBwYXJzZWQuYWxpYXNlcztcbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gY29tcGxldGlvbih5YXJncywgdXNhZ2UsIGNvbW1hbmQsIHNoaW0pIHtcbiAgICByZXR1cm4gbmV3IENvbXBsZXRpb24oeWFyZ3MsIHVzYWdlLCBjb21tYW5kLCBzaGltKTtcbn1cbmZ1bmN0aW9uIGlzU3luY0NvbXBsZXRpb25GdW5jdGlvbihjb21wbGV0aW9uRnVuY3Rpb24pIHtcbiAgICByZXR1cm4gY29tcGxldGlvbkZ1bmN0aW9uLmxlbmd0aCA8IDM7XG59XG5mdW5jdGlvbiBpc0ZhbGxiYWNrQ29tcGxldGlvbkZ1bmN0aW9uKGNvbXBsZXRpb25GdW5jdGlvbikge1xuICAgIHJldHVybiBjb21wbGV0aW9uRnVuY3Rpb24ubGVuZ3RoID4gMztcbn1cbiIsImV4cG9ydCBjb25zdCBjb21wbGV0aW9uU2hUZW1wbGF0ZSA9IGAjIyMtYmVnaW4te3thcHBfbmFtZX19LWNvbXBsZXRpb25zLSMjI1xuI1xuIyB5YXJncyBjb21tYW5kIGNvbXBsZXRpb24gc2NyaXB0XG4jXG4jIEluc3RhbGxhdGlvbjoge3thcHBfcGF0aH19IHt7Y29tcGxldGlvbl9jb21tYW5kfX0gPj4gfi8uYmFzaHJjXG4jICAgIG9yIHt7YXBwX3BhdGh9fSB7e2NvbXBsZXRpb25fY29tbWFuZH19ID4+IH4vLmJhc2hfcHJvZmlsZSBvbiBPU1guXG4jXG5fe3thcHBfbmFtZX19X3lhcmdzX2NvbXBsZXRpb25zKClcbntcbiAgICBsb2NhbCBjdXJfd29yZCBhcmdzIHR5cGVfbGlzdFxuXG4gICAgY3VyX3dvcmQ9XCJcXCR7Q09NUF9XT1JEU1tDT01QX0NXT1JEXX1cIlxuICAgIGFyZ3M9KFwiXFwke0NPTVBfV09SRFNbQF19XCIpXG5cbiAgICAjIGFzayB5YXJncyB0byBnZW5lcmF0ZSBjb21wbGV0aW9ucy5cbiAgICAjIHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDA5NDQxOTUvNzA4MDAzNiBmb3IgdGhlIHNwYWNlcy1oYW5kbGluZyBhd2tcbiAgICBtYXBmaWxlIC10IHR5cGVfbGlzdCA8IDwoe3thcHBfcGF0aH19IC0tZ2V0LXlhcmdzLWNvbXBsZXRpb25zIFwiXFwke2FyZ3NbQF19XCIpXG4gICAgbWFwZmlsZSAtdCBDT01QUkVQTFkgPCA8KGNvbXBnZW4gLVcgXCIkKCBwcmludGYgJyVxICcgXCJcXCR7dHlwZV9saXN0W0BdfVwiIClcIiAtLSBcIlxcJHtjdXJfd29yZH1cIiB8XG4gICAgICAgIGF3ayAnLyAvIHsgcHJpbnQgXCJcXFxcXCJcIiQwXCJcXFxcXCJcIiB9IC9eW14gXSskLyB7IHByaW50ICQwIH0nKVxuXG4gICAgIyBpZiBubyBtYXRjaCB3YXMgZm91bmQsIGZhbGwgYmFjayB0byBmaWxlbmFtZSBjb21wbGV0aW9uXG4gICAgaWYgWyBcXCR7I0NPTVBSRVBMWVtAXX0gLWVxIDAgXTsgdGhlblxuICAgICAgQ09NUFJFUExZPSgpXG4gICAgZmlcblxuICAgIHJldHVybiAwXG59XG5jb21wbGV0ZSAtbyBiYXNoZGVmYXVsdCAtbyBkZWZhdWx0IC1GIF97e2FwcF9uYW1lfX1feWFyZ3NfY29tcGxldGlvbnMge3thcHBfbmFtZX19XG4jIyMtZW5kLXt7YXBwX25hbWV9fS1jb21wbGV0aW9ucy0jIyNcbmA7XG5leHBvcnQgY29uc3QgY29tcGxldGlvblpzaFRlbXBsYXRlID0gYCNjb21wZGVmIHt7YXBwX25hbWV9fVxuIyMjLWJlZ2luLXt7YXBwX25hbWV9fS1jb21wbGV0aW9ucy0jIyNcbiNcbiMgeWFyZ3MgY29tbWFuZCBjb21wbGV0aW9uIHNjcmlwdFxuI1xuIyBJbnN0YWxsYXRpb246IHt7YXBwX3BhdGh9fSB7e2NvbXBsZXRpb25fY29tbWFuZH19ID4+IH4vLnpzaHJjXG4jICAgIG9yIHt7YXBwX3BhdGh9fSB7e2NvbXBsZXRpb25fY29tbWFuZH19ID4+IH4vLnpwcm9maWxlIG9uIE9TWC5cbiNcbl97e2FwcF9uYW1lfX1feWFyZ3NfY29tcGxldGlvbnMoKVxue1xuICBsb2NhbCByZXBseVxuICBsb2NhbCBzaT0kSUZTXG4gIElGUz0kJ1xcbicgcmVwbHk9KCQoQ09NUF9DV09SRD1cIiQoKENVUlJFTlQtMSkpXCIgQ09NUF9MSU5FPVwiJEJVRkZFUlwiIENPTVBfUE9JTlQ9XCIkQ1VSU09SXCIge3thcHBfcGF0aH19IC0tZ2V0LXlhcmdzLWNvbXBsZXRpb25zIFwiXFwke3dvcmRzW0BdfVwiKSlcbiAgSUZTPSRzaVxuICBpZiBbWyBcXCR7I3JlcGx5fSAtZ3QgMCBdXTsgdGhlblxuICAgIF9kZXNjcmliZSAndmFsdWVzJyByZXBseVxuICBlbHNlXG4gICAgX2RlZmF1bHRcbiAgZmlcbn1cbmlmIFtbIFwiJ1xcJHt6c2hfZXZhbF9jb250ZXh0Wy0xXX1cIiA9PSBcImxvYWRhdXRvZnVuY1wiIF1dOyB0aGVuXG4gIF97e2FwcF9uYW1lfX1feWFyZ3NfY29tcGxldGlvbnMgXCIkQFwiXG5lbHNlXG4gIGNvbXBkZWYgX3t7YXBwX25hbWV9fV95YXJnc19jb21wbGV0aW9ucyB7e2FwcF9uYW1lfX1cbmZpXG4jIyMtZW5kLXt7YXBwX25hbWV9fS1jb21wbGV0aW9ucy0jIyNcbmA7XG4iLCJleHBvcnQgZnVuY3Rpb24gbGV2ZW5zaHRlaW4oYSwgYikge1xuICAgIGlmIChhLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIGIubGVuZ3RoO1xuICAgIGlmIChiLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIGEubGVuZ3RoO1xuICAgIGNvbnN0IG1hdHJpeCA9IFtdO1xuICAgIGxldCBpO1xuICAgIGZvciAoaSA9IDA7IGkgPD0gYi5sZW5ndGg7IGkrKykge1xuICAgICAgICBtYXRyaXhbaV0gPSBbaV07XG4gICAgfVxuICAgIGxldCBqO1xuICAgIGZvciAoaiA9IDA7IGogPD0gYS5sZW5ndGg7IGorKykge1xuICAgICAgICBtYXRyaXhbMF1bal0gPSBqO1xuICAgIH1cbiAgICBmb3IgKGkgPSAxOyBpIDw9IGIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgZm9yIChqID0gMTsgaiA8PSBhLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBpZiAoYi5jaGFyQXQoaSAtIDEpID09PSBhLmNoYXJBdChqIC0gMSkpIHtcbiAgICAgICAgICAgICAgICBtYXRyaXhbaV1bal0gPSBtYXRyaXhbaSAtIDFdW2ogLSAxXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChpID4gMSAmJlxuICAgICAgICAgICAgICAgICAgICBqID4gMSAmJlxuICAgICAgICAgICAgICAgICAgICBiLmNoYXJBdChpIC0gMikgPT09IGEuY2hhckF0KGogLSAxKSAmJlxuICAgICAgICAgICAgICAgICAgICBiLmNoYXJBdChpIC0gMSkgPT09IGEuY2hhckF0KGogLSAyKSkge1xuICAgICAgICAgICAgICAgICAgICBtYXRyaXhbaV1bal0gPSBtYXRyaXhbaSAtIDJdW2ogLSAyXSArIDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBtYXRyaXhbaV1bal0gPSBNYXRoLm1pbihtYXRyaXhbaSAtIDFdW2ogLSAxXSArIDEsIE1hdGgubWluKG1hdHJpeFtpXVtqIC0gMV0gKyAxLCBtYXRyaXhbaSAtIDFdW2pdICsgMSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbWF0cml4W2IubGVuZ3RoXVthLmxlbmd0aF07XG59XG4iLCJpbXBvcnQgeyBhcmdzZXJ0IH0gZnJvbSAnLi9hcmdzZXJ0LmpzJztcbmltcG9ydCB7IGFzc2VydE5vdFN0cmljdEVxdWFsLCB9IGZyb20gJy4vdHlwaW5ncy9jb21tb24tdHlwZXMuanMnO1xuaW1wb3J0IHsgbGV2ZW5zaHRlaW4gYXMgZGlzdGFuY2UgfSBmcm9tICcuL3V0aWxzL2xldmVuc2h0ZWluLmpzJztcbmltcG9ydCB7IG9iakZpbHRlciB9IGZyb20gJy4vdXRpbHMvb2JqLWZpbHRlci5qcyc7XG5jb25zdCBzcGVjaWFsS2V5cyA9IFsnJDAnLCAnLS0nLCAnXyddO1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRpb24oeWFyZ3MsIHVzYWdlLCBzaGltKSB7XG4gICAgY29uc3QgX18gPSBzaGltLnkxOG4uX187XG4gICAgY29uc3QgX19uID0gc2hpbS55MThuLl9fbjtcbiAgICBjb25zdCBzZWxmID0ge307XG4gICAgc2VsZi5ub25PcHRpb25Db3VudCA9IGZ1bmN0aW9uIG5vbk9wdGlvbkNvdW50KGFyZ3YpIHtcbiAgICAgICAgY29uc3QgZGVtYW5kZWRDb21tYW5kcyA9IHlhcmdzLmdldERlbWFuZGVkQ29tbWFuZHMoKTtcbiAgICAgICAgY29uc3QgcG9zaXRpb25hbENvdW50ID0gYXJndi5fLmxlbmd0aCArIChhcmd2WyctLSddID8gYXJndlsnLS0nXS5sZW5ndGggOiAwKTtcbiAgICAgICAgY29uc3QgX3MgPSBwb3NpdGlvbmFsQ291bnQgLSB5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRDb250ZXh0KCkuY29tbWFuZHMubGVuZ3RoO1xuICAgICAgICBpZiAoZGVtYW5kZWRDb21tYW5kcy5fICYmXG4gICAgICAgICAgICAoX3MgPCBkZW1hbmRlZENvbW1hbmRzLl8ubWluIHx8IF9zID4gZGVtYW5kZWRDb21tYW5kcy5fLm1heCkpIHtcbiAgICAgICAgICAgIGlmIChfcyA8IGRlbWFuZGVkQ29tbWFuZHMuXy5taW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoZGVtYW5kZWRDb21tYW5kcy5fLm1pbk1zZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoZGVtYW5kZWRDb21tYW5kcy5fLm1pbk1zZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBkZW1hbmRlZENvbW1hbmRzLl8ubWluTXNnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcJDAvZywgX3MudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwkMS8sIGRlbWFuZGVkQ29tbWFuZHMuXy5taW4udG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKF9fbignTm90IGVub3VnaCBub24tb3B0aW9uIGFyZ3VtZW50czogZ290ICVzLCBuZWVkIGF0IGxlYXN0ICVzJywgJ05vdCBlbm91Z2ggbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbmVlZCBhdCBsZWFzdCAlcycsIF9zLCBfcy50b1N0cmluZygpLCBkZW1hbmRlZENvbW1hbmRzLl8ubWluLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChfcyA+IGRlbWFuZGVkQ29tbWFuZHMuXy5tYXgpIHtcbiAgICAgICAgICAgICAgICBpZiAoZGVtYW5kZWRDb21tYW5kcy5fLm1heE1zZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHVzYWdlLmZhaWwoZGVtYW5kZWRDb21tYW5kcy5fLm1heE1zZ1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBkZW1hbmRlZENvbW1hbmRzLl8ubWF4TXNnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2UoL1xcJDAvZywgX3MudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvXFwkMS8sIGRlbWFuZGVkQ29tbWFuZHMuXy5tYXgudG9TdHJpbmcoKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogbnVsbCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKF9fbignVG9vIG1hbnkgbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbWF4aW11bSBvZiAlcycsICdUb28gbWFueSBub24tb3B0aW9uIGFyZ3VtZW50czogZ290ICVzLCBtYXhpbXVtIG9mICVzJywgX3MsIF9zLnRvU3RyaW5nKCksIGRlbWFuZGVkQ29tbWFuZHMuXy5tYXgudG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi5wb3NpdGlvbmFsQ291bnQgPSBmdW5jdGlvbiBwb3NpdGlvbmFsQ291bnQocmVxdWlyZWQsIG9ic2VydmVkKSB7XG4gICAgICAgIGlmIChvYnNlcnZlZCA8IHJlcXVpcmVkKSB7XG4gICAgICAgICAgICB1c2FnZS5mYWlsKF9fbignTm90IGVub3VnaCBub24tb3B0aW9uIGFyZ3VtZW50czogZ290ICVzLCBuZWVkIGF0IGxlYXN0ICVzJywgJ05vdCBlbm91Z2ggbm9uLW9wdGlvbiBhcmd1bWVudHM6IGdvdCAlcywgbmVlZCBhdCBsZWFzdCAlcycsIG9ic2VydmVkLCBvYnNlcnZlZCArICcnLCByZXF1aXJlZCArICcnKSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYucmVxdWlyZWRBcmd1bWVudHMgPSBmdW5jdGlvbiByZXF1aXJlZEFyZ3VtZW50cyhhcmd2LCBkZW1hbmRlZE9wdGlvbnMpIHtcbiAgICAgICAgbGV0IG1pc3NpbmcgPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhkZW1hbmRlZE9wdGlvbnMpKSB7XG4gICAgICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd2LCBrZXkpIHx8XG4gICAgICAgICAgICAgICAgdHlwZW9mIGFyZ3Zba2V5XSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICBtaXNzaW5nID0gbWlzc2luZyB8fCB7fTtcbiAgICAgICAgICAgICAgICBtaXNzaW5nW2tleV0gPSBkZW1hbmRlZE9wdGlvbnNba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobWlzc2luZykge1xuICAgICAgICAgICAgY29uc3QgY3VzdG9tTXNncyA9IFtdO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMobWlzc2luZykpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtc2cgPSBtaXNzaW5nW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKG1zZyAmJiBjdXN0b21Nc2dzLmluZGV4T2YobXNnKSA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgY3VzdG9tTXNncy5wdXNoKG1zZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgY3VzdG9tTXNnID0gY3VzdG9tTXNncy5sZW5ndGggPyBgXFxuJHtjdXN0b21Nc2dzLmpvaW4oJ1xcbicpfWAgOiAnJztcbiAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50OiAlcycsICdNaXNzaW5nIHJlcXVpcmVkIGFyZ3VtZW50czogJXMnLCBPYmplY3Qua2V5cyhtaXNzaW5nKS5sZW5ndGgsIE9iamVjdC5rZXlzKG1pc3NpbmcpLmpvaW4oJywgJykgKyBjdXN0b21Nc2cpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi51bmtub3duQXJndW1lbnRzID0gZnVuY3Rpb24gdW5rbm93bkFyZ3VtZW50cyhhcmd2LCBhbGlhc2VzLCBwb3NpdGlvbmFsTWFwLCBpc0RlZmF1bHRDb21tYW5kLCBjaGVja1Bvc2l0aW9uYWxzID0gdHJ1ZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIGNvbnN0IGNvbW1hbmRLZXlzID0geWFyZ3NcbiAgICAgICAgICAgIC5nZXRJbnRlcm5hbE1ldGhvZHMoKVxuICAgICAgICAgICAgLmdldENvbW1hbmRJbnN0YW5jZSgpXG4gICAgICAgICAgICAuZ2V0Q29tbWFuZHMoKTtcbiAgICAgICAgY29uc3QgdW5rbm93biA9IFtdO1xuICAgICAgICBjb25zdCBjdXJyZW50Q29udGV4dCA9IHlhcmdzLmdldEludGVybmFsTWV0aG9kcygpLmdldENvbnRleHQoKTtcbiAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKCFzcGVjaWFsS2V5cy5pbmNsdWRlcyhrZXkpICYmXG4gICAgICAgICAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwb3NpdGlvbmFsTWFwLCBrZXkpICYmXG4gICAgICAgICAgICAgICAgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRQYXJzZUNvbnRleHQoKSwga2V5KSAmJlxuICAgICAgICAgICAgICAgICFzZWxmLmlzVmFsaWRBbmRTb21lQWxpYXNJc05vdE5ldyhrZXksIGFsaWFzZXMpKSB7XG4gICAgICAgICAgICAgICAgdW5rbm93bi5wdXNoKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY2hlY2tQb3NpdGlvbmFscyAmJlxuICAgICAgICAgICAgKGN1cnJlbnRDb250ZXh0LmNvbW1hbmRzLmxlbmd0aCA+IDAgfHxcbiAgICAgICAgICAgICAgICBjb21tYW5kS2V5cy5sZW5ndGggPiAwIHx8XG4gICAgICAgICAgICAgICAgaXNEZWZhdWx0Q29tbWFuZCkpIHtcbiAgICAgICAgICAgIGFyZ3YuXy5zbGljZShjdXJyZW50Q29udGV4dC5jb21tYW5kcy5sZW5ndGgpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbW1hbmRLZXlzLmluY2x1ZGVzKCcnICsga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICB1bmtub3duLnB1c2goJycgKyBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjaGVja1Bvc2l0aW9uYWxzKSB7XG4gICAgICAgICAgICBjb25zdCBkZW1hbmRlZENvbW1hbmRzID0geWFyZ3MuZ2V0RGVtYW5kZWRDb21tYW5kcygpO1xuICAgICAgICAgICAgY29uc3QgbWF4Tm9uT3B0RGVtYW5kZWQgPSAoKF9hID0gZGVtYW5kZWRDb21tYW5kcy5fKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EubWF4KSB8fCAwO1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWQgPSBjdXJyZW50Q29udGV4dC5jb21tYW5kcy5sZW5ndGggKyBtYXhOb25PcHREZW1hbmRlZDtcbiAgICAgICAgICAgIGlmIChleHBlY3RlZCA8IGFyZ3YuXy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICBhcmd2Ll8uc2xpY2UoZXhwZWN0ZWQpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICAgICAga2V5ID0gU3RyaW5nKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghY3VycmVudENvbnRleHQuY29tbWFuZHMuaW5jbHVkZXMoa2V5KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIXVua25vd24uaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5rbm93bi5wdXNoKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodW5rbm93bi5sZW5ndGgpIHtcbiAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdVbmtub3duIGFyZ3VtZW50OiAlcycsICdVbmtub3duIGFyZ3VtZW50czogJXMnLCB1bmtub3duLmxlbmd0aCwgdW5rbm93bi5tYXAocyA9PiAocy50cmltKCkgPyBzIDogYFwiJHtzfVwiYCkpLmpvaW4oJywgJykpKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgc2VsZi51bmtub3duQ29tbWFuZHMgPSBmdW5jdGlvbiB1bmtub3duQ29tbWFuZHMoYXJndikge1xuICAgICAgICBjb25zdCBjb21tYW5kS2V5cyA9IHlhcmdzXG4gICAgICAgICAgICAuZ2V0SW50ZXJuYWxNZXRob2RzKClcbiAgICAgICAgICAgIC5nZXRDb21tYW5kSW5zdGFuY2UoKVxuICAgICAgICAgICAgLmdldENvbW1hbmRzKCk7XG4gICAgICAgIGNvbnN0IHVua25vd24gPSBbXTtcbiAgICAgICAgY29uc3QgY3VycmVudENvbnRleHQgPSB5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRDb250ZXh0KCk7XG4gICAgICAgIGlmIChjdXJyZW50Q29udGV4dC5jb21tYW5kcy5sZW5ndGggPiAwIHx8IGNvbW1hbmRLZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGFyZ3YuXy5zbGljZShjdXJyZW50Q29udGV4dC5jb21tYW5kcy5sZW5ndGgpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbW1hbmRLZXlzLmluY2x1ZGVzKCcnICsga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICB1bmtub3duLnB1c2goJycgKyBrZXkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh1bmtub3duLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHVzYWdlLmZhaWwoX19uKCdVbmtub3duIGNvbW1hbmQ6ICVzJywgJ1Vua25vd24gY29tbWFuZHM6ICVzJywgdW5rbm93bi5sZW5ndGgsIHVua25vd24uam9pbignLCAnKSkpO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuaXNWYWxpZEFuZFNvbWVBbGlhc0lzTm90TmV3ID0gZnVuY3Rpb24gaXNWYWxpZEFuZFNvbWVBbGlhc0lzTm90TmV3KGtleSwgYWxpYXNlcykge1xuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhbGlhc2VzLCBrZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgbmV3QWxpYXNlcyA9IHlhcmdzLnBhcnNlZC5uZXdBbGlhc2VzO1xuICAgICAgICByZXR1cm4gW2tleSwgLi4uYWxpYXNlc1trZXldXS5zb21lKGEgPT4gIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuZXdBbGlhc2VzLCBhKSB8fCAhbmV3QWxpYXNlc1trZXldKTtcbiAgICB9O1xuICAgIHNlbGYubGltaXRlZENob2ljZXMgPSBmdW5jdGlvbiBsaW1pdGVkQ2hvaWNlcyhhcmd2KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB5YXJncy5nZXRPcHRpb25zKCk7XG4gICAgICAgIGNvbnN0IGludmFsaWQgPSB7fTtcbiAgICAgICAgaWYgKCFPYmplY3Qua2V5cyhvcHRpb25zLmNob2ljZXMpLmxlbmd0aClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgT2JqZWN0LmtleXMoYXJndikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgaWYgKHNwZWNpYWxLZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob3B0aW9ucy5jaG9pY2VzLCBrZXkpKSB7XG4gICAgICAgICAgICAgICAgW10uY29uY2F0KGFyZ3Zba2V5XSkuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLmNob2ljZXNba2V5XS5pbmRleE9mKHZhbHVlKSA9PT0gLTEgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRba2V5XSA9IChpbnZhbGlkW2tleV0gfHwgW10pLmNvbmNhdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGludmFsaWRLZXlzID0gT2JqZWN0LmtleXMoaW52YWxpZCk7XG4gICAgICAgIGlmICghaW52YWxpZEtleXMubGVuZ3RoKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBsZXQgbXNnID0gX18oJ0ludmFsaWQgdmFsdWVzOicpO1xuICAgICAgICBpbnZhbGlkS2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBtc2cgKz0gYFxcbiAgJHtfXygnQXJndW1lbnQ6ICVzLCBHaXZlbjogJXMsIENob2ljZXM6ICVzJywga2V5LCB1c2FnZS5zdHJpbmdpZmllZFZhbHVlcyhpbnZhbGlkW2tleV0pLCB1c2FnZS5zdHJpbmdpZmllZFZhbHVlcyhvcHRpb25zLmNob2ljZXNba2V5XSkpfWA7XG4gICAgICAgIH0pO1xuICAgICAgICB1c2FnZS5mYWlsKG1zZyk7XG4gICAgfTtcbiAgICBsZXQgaW1wbGllZCA9IHt9O1xuICAgIHNlbGYuaW1wbGllcyA9IGZ1bmN0aW9uIGltcGxpZXMoa2V5LCB2YWx1ZSkge1xuICAgICAgICBhcmdzZXJ0KCc8c3RyaW5nfG9iamVjdD4gW2FycmF5fG51bWJlcnxzdHJpbmddJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhrZXkpLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgc2VsZi5pbXBsaWVzKGssIGtleVtrXSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHlhcmdzLmdsb2JhbChrZXkpO1xuICAgICAgICAgICAgaWYgKCFpbXBsaWVkW2tleV0pIHtcbiAgICAgICAgICAgICAgICBpbXBsaWVkW2tleV0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLmZvckVhY2goaSA9PiBzZWxmLmltcGxpZXMoa2V5LCBpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBhc3NlcnROb3RTdHJpY3RFcXVhbCh2YWx1ZSwgdW5kZWZpbmVkLCBzaGltKTtcbiAgICAgICAgICAgICAgICBpbXBsaWVkW2tleV0ucHVzaCh2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHNlbGYuZ2V0SW1wbGllZCA9IGZ1bmN0aW9uIGdldEltcGxpZWQoKSB7XG4gICAgICAgIHJldHVybiBpbXBsaWVkO1xuICAgIH07XG4gICAgZnVuY3Rpb24ga2V5RXhpc3RzKGFyZ3YsIHZhbCkge1xuICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsKTtcbiAgICAgICAgdmFsID0gaXNOYU4obnVtKSA/IHZhbCA6IG51bTtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICB2YWwgPSBhcmd2Ll8ubGVuZ3RoID49IHZhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh2YWwubWF0Y2goL14tLW5vLS4rLykpIHtcbiAgICAgICAgICAgIHZhbCA9IHZhbC5tYXRjaCgvXi0tbm8tKC4rKS8pWzFdO1xuICAgICAgICAgICAgdmFsID0gIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhcmd2LCB2YWwpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdmFsID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGFyZ3YsIHZhbCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbDtcbiAgICB9XG4gICAgc2VsZi5pbXBsaWNhdGlvbnMgPSBmdW5jdGlvbiBpbXBsaWNhdGlvbnMoYXJndikge1xuICAgICAgICBjb25zdCBpbXBseUZhaWwgPSBbXTtcbiAgICAgICAgT2JqZWN0LmtleXMoaW1wbGllZCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgb3JpZ0tleSA9IGtleTtcbiAgICAgICAgICAgIChpbXBsaWVkW2tleV0gfHwgW10pLmZvckVhY2godmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgIGxldCBrZXkgPSBvcmlnS2V5O1xuICAgICAgICAgICAgICAgIGNvbnN0IG9yaWdWYWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIGtleSA9IGtleUV4aXN0cyhhcmd2LCBrZXkpO1xuICAgICAgICAgICAgICAgIHZhbHVlID0ga2V5RXhpc3RzKGFyZ3YsIHZhbHVlKTtcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICYmICF2YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBpbXBseUZhaWwucHVzaChgICR7b3JpZ0tleX0gLT4gJHtvcmlnVmFsdWV9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaW1wbHlGYWlsLmxlbmd0aCkge1xuICAgICAgICAgICAgbGV0IG1zZyA9IGAke19fKCdJbXBsaWNhdGlvbnMgZmFpbGVkOicpfVxcbmA7XG4gICAgICAgICAgICBpbXBseUZhaWwuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgbXNnICs9IHZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB1c2FnZS5mYWlsKG1zZyk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIGxldCBjb25mbGljdGluZyA9IHt9O1xuICAgIHNlbGYuY29uZmxpY3RzID0gZnVuY3Rpb24gY29uZmxpY3RzKGtleSwgdmFsdWUpIHtcbiAgICAgICAgYXJnc2VydCgnPHN0cmluZ3xvYmplY3Q+IFthcnJheXxzdHJpbmddJywgW2tleSwgdmFsdWVdLCBhcmd1bWVudHMubGVuZ3RoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhrZXkpLmZvckVhY2goayA9PiB7XG4gICAgICAgICAgICAgICAgc2VsZi5jb25mbGljdHMoaywga2V5W2tdKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgeWFyZ3MuZ2xvYmFsKGtleSk7XG4gICAgICAgICAgICBpZiAoIWNvbmZsaWN0aW5nW2tleV0pIHtcbiAgICAgICAgICAgICAgICBjb25mbGljdGluZ1trZXldID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5mb3JFYWNoKGkgPT4gc2VsZi5jb25mbGljdHMoa2V5LCBpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25mbGljdGluZ1trZXldLnB1c2godmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLmdldENvbmZsaWN0aW5nID0gKCkgPT4gY29uZmxpY3Rpbmc7XG4gICAgc2VsZi5jb25mbGljdGluZyA9IGZ1bmN0aW9uIGNvbmZsaWN0aW5nRm4oYXJndikge1xuICAgICAgICBPYmplY3Qua2V5cyhhcmd2KS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICBpZiAoY29uZmxpY3Rpbmdba2V5XSkge1xuICAgICAgICAgICAgICAgIGNvbmZsaWN0aW5nW2tleV0uZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiBhcmd2W2tleV0gIT09IHVuZGVmaW5lZCAmJiBhcmd2W3ZhbHVlXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKF9fKCdBcmd1bWVudHMgJXMgYW5kICVzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUnLCBrZXksIHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh5YXJncy5nZXRJbnRlcm5hbE1ldGhvZHMoKS5nZXRQYXJzZXJDb25maWd1cmF0aW9uKClbJ3N0cmlwLWRhc2hlZCddKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhjb25mbGljdGluZykuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbmZsaWN0aW5nW2tleV0uZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJndltzaGltLlBhcnNlci5jYW1lbENhc2Uoa2V5KV0gIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJndltzaGltLlBhcnNlci5jYW1lbENhc2UodmFsdWUpXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB1c2FnZS5mYWlsKF9fKCdBcmd1bWVudHMgJXMgYW5kICVzIGFyZSBtdXR1YWxseSBleGNsdXNpdmUnLCBrZXksIHZhbHVlKSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBzZWxmLnJlY29tbWVuZENvbW1hbmRzID0gZnVuY3Rpb24gcmVjb21tZW5kQ29tbWFuZHMoY21kLCBwb3RlbnRpYWxDb21tYW5kcykge1xuICAgICAgICBjb25zdCB0aHJlc2hvbGQgPSAzO1xuICAgICAgICBwb3RlbnRpYWxDb21tYW5kcyA9IHBvdGVudGlhbENvbW1hbmRzLnNvcnQoKGEsIGIpID0+IGIubGVuZ3RoIC0gYS5sZW5ndGgpO1xuICAgICAgICBsZXQgcmVjb21tZW5kZWQgPSBudWxsO1xuICAgICAgICBsZXQgYmVzdERpc3RhbmNlID0gSW5maW5pdHk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBjYW5kaWRhdGU7IChjYW5kaWRhdGUgPSBwb3RlbnRpYWxDb21tYW5kc1tpXSkgIT09IHVuZGVmaW5lZDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBkID0gZGlzdGFuY2UoY21kLCBjYW5kaWRhdGUpO1xuICAgICAgICAgICAgaWYgKGQgPD0gdGhyZXNob2xkICYmIGQgPCBiZXN0RGlzdGFuY2UpIHtcbiAgICAgICAgICAgICAgICBiZXN0RGlzdGFuY2UgPSBkO1xuICAgICAgICAgICAgICAgIHJlY29tbWVuZGVkID0gY2FuZGlkYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChyZWNvbW1lbmRlZClcbiAgICAgICAgICAgIHVzYWdlLmZhaWwoX18oJ0RpZCB5b3UgbWVhbiAlcz8nLCByZWNvbW1lbmRlZCkpO1xuICAgIH07XG4gICAgc2VsZi5yZXNldCA9IGZ1bmN0aW9uIHJlc2V0KGxvY2FsTG9va3VwKSB7XG4gICAgICAgIGltcGxpZWQgPSBvYmpGaWx0ZXIoaW1wbGllZCwgayA9PiAhbG9jYWxMb29rdXBba10pO1xuICAgICAgICBjb25mbGljdGluZyA9IG9iakZpbHRlcihjb25mbGljdGluZywgayA9PiAhbG9jYWxMb29rdXBba10pO1xuICAgICAgICByZXR1cm4gc2VsZjtcbiAgICB9O1xuICAgIGNvbnN0IGZyb3plbnMgPSBbXTtcbiAgICBzZWxmLmZyZWV6ZSA9IGZ1bmN0aW9uIGZyZWV6ZSgpIHtcbiAgICAgICAgZnJvemVucy5wdXNoKHtcbiAgICAgICAgICAgIGltcGxpZWQsXG4gICAgICAgICAgICBjb25mbGljdGluZyxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICBzZWxmLnVuZnJlZXplID0gZnVuY3Rpb24gdW5mcmVlemUoKSB7XG4gICAgICAgIGNvbnN0IGZyb3plbiA9IGZyb3plbnMucG9wKCk7XG4gICAgICAgIGFzc2VydE5vdFN0cmljdEVxdWFsKGZyb3plbiwgdW5kZWZpbmVkLCBzaGltKTtcbiAgICAgICAgKHsgaW1wbGllZCwgY29uZmxpY3RpbmcgfSA9IGZyb3plbik7XG4gICAgfTtcbiAgICByZXR1cm4gc2VsZjtcbn1cbiIsImltcG9ydCB7IFlFcnJvciB9IGZyb20gJy4uL3llcnJvci5qcyc7XG5sZXQgcHJldmlvdXNseVZpc2l0ZWRDb25maWdzID0gW107XG5sZXQgc2hpbTtcbmV4cG9ydCBmdW5jdGlvbiBhcHBseUV4dGVuZHMoY29uZmlnLCBjd2QsIG1lcmdlRXh0ZW5kcywgX3NoaW0pIHtcbiAgICBzaGltID0gX3NoaW07XG4gICAgbGV0IGRlZmF1bHRDb25maWcgPSB7fTtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGNvbmZpZywgJ2V4dGVuZHMnKSkge1xuICAgICAgICBpZiAodHlwZW9mIGNvbmZpZy5leHRlbmRzICE9PSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBkZWZhdWx0Q29uZmlnO1xuICAgICAgICBjb25zdCBpc1BhdGggPSAvXFwuanNvbnxcXC4uKnJjJC8udGVzdChjb25maWcuZXh0ZW5kcyk7XG4gICAgICAgIGxldCBwYXRoVG9EZWZhdWx0ID0gbnVsbDtcbiAgICAgICAgaWYgKCFpc1BhdGgpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcGF0aFRvRGVmYXVsdCA9IGltcG9ydC5tZXRhLnJlc29sdmUoY29uZmlnLmV4dGVuZHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKF9lcnIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gY29uZmlnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcGF0aFRvRGVmYXVsdCA9IGdldFBhdGhUb0RlZmF1bHRDb25maWcoY3dkLCBjb25maWcuZXh0ZW5kcyk7XG4gICAgICAgIH1cbiAgICAgICAgY2hlY2tGb3JDaXJjdWxhckV4dGVuZHMocGF0aFRvRGVmYXVsdCk7XG4gICAgICAgIHByZXZpb3VzbHlWaXNpdGVkQ29uZmlncy5wdXNoKHBhdGhUb0RlZmF1bHQpO1xuICAgICAgICBkZWZhdWx0Q29uZmlnID0gaXNQYXRoXG4gICAgICAgICAgICA/IEpTT04ucGFyc2Uoc2hpbS5yZWFkRmlsZVN5bmMocGF0aFRvRGVmYXVsdCwgJ3V0ZjgnKSlcbiAgICAgICAgICAgIDogX3NoaW0ucmVxdWlyZShjb25maWcuZXh0ZW5kcyk7XG4gICAgICAgIGRlbGV0ZSBjb25maWcuZXh0ZW5kcztcbiAgICAgICAgZGVmYXVsdENvbmZpZyA9IGFwcGx5RXh0ZW5kcyhkZWZhdWx0Q29uZmlnLCBzaGltLnBhdGguZGlybmFtZShwYXRoVG9EZWZhdWx0KSwgbWVyZ2VFeHRlbmRzLCBzaGltKTtcbiAgICB9XG4gICAgcHJldmlvdXNseVZpc2l0ZWRDb25maWdzID0gW107XG4gICAgcmV0dXJuIG1lcmdlRXh0ZW5kc1xuICAgICAgICA/IG1lcmdlRGVlcChkZWZhdWx0Q29uZmlnLCBjb25maWcpXG4gICAgICAgIDogT2JqZWN0LmFzc2lnbih7fSwgZGVmYXVsdENvbmZpZywgY29uZmlnKTtcbn1cbmZ1bmN0aW9uIGNoZWNrRm9yQ2lyY3VsYXJFeHRlbmRzKGNmZ1BhdGgpIHtcbiAgICBpZiAocHJldmlvdXNseVZpc2l0ZWRDb25maWdzLmluZGV4T2YoY2ZnUGF0aCkgPiAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgWUVycm9yKGBDaXJjdWxhciBleHRlbmRlZCBjb25maWd1cmF0aW9uczogJyR7Y2ZnUGF0aH0nLmApO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldFBhdGhUb0RlZmF1bHRDb25maWcoY3dkLCBwYXRoVG9FeHRlbmQpIHtcbiAgICByZXR1cm4gc2hpbS5wYXRoLnJlc29sdmUoY3dkLCBwYXRoVG9FeHRlbmQpO1xufVxuZnVuY3Rpb24gbWVyZ2VEZWVwKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgICBjb25zdCB0YXJnZXQgPSB7fTtcbiAgICBmdW5jdGlvbiBpc09iamVjdChvYmopIHtcbiAgICAgICAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShvYmopO1xuICAgIH1cbiAgICBPYmplY3QuYXNzaWduKHRhcmdldCwgY29uZmlnMSk7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoY29uZmlnMikpIHtcbiAgICAgICAgaWYgKGlzT2JqZWN0KGNvbmZpZzJba2V5XSkgJiYgaXNPYmplY3QodGFyZ2V0W2tleV0pKSB7XG4gICAgICAgICAgICB0YXJnZXRba2V5XSA9IG1lcmdlRGVlcChjb25maWcxW2tleV0sIGNvbmZpZzJba2V5XSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0YXJnZXRba2V5XSA9IGNvbmZpZzJba2V5XTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFyZ2V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vLyBCb290c3RyYXBzIHlhcmdzIGZvciBFU006XG5pbXBvcnQgZXNtUGxhdGZvcm1TaGltIGZyb20gJy4vbGliL3BsYXRmb3JtLXNoaW1zL2VzbS5tanMnO1xuaW1wb3J0IHtZYXJnc0ZhY3Rvcnl9IGZyb20gJy4vYnVpbGQvbGliL3lhcmdzLWZhY3RvcnkuanMnO1xuXG5jb25zdCBZYXJncyA9IFlhcmdzRmFjdG9yeShlc21QbGF0Zm9ybVNoaW0pO1xuZXhwb3J0IGRlZmF1bHQgWWFyZ3M7XG5cbmV4cG9ydCB7WWFyZ3MgYXMgJ21vZHVsZS5leHBvcnRzJ307XG4iLCJpbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHByb2Nlc3MgZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB5YXJncyBmcm9tICd5YXJncyc7XG5pbXBvcnQgeyBoaWRlQmluIH0gZnJvbSAneWFyZ3MvaGVscGVycyc7XG5pbXBvcnQgeyBsb2FkQ29uZmlnRmlsZSB9IGZyb20gJy4vY29uZmlnLmpzJztcbmltcG9ydCB7XG4gIERFRkFVTFRfQUlERVJfRVhUUkFfQVJHUyxcbiAgREVGQVVMVF9DTEFVREVfQ09ERV9FWFRSQV9BUkdTLFxuICBERUZBVUxUX0NPREVYX0VYVFJBX0FSR1MsXG4gIERFRkFVTFRfQ09ESU5HX1RPT0wsXG4gIERFRkFVTFRfR0VNSU5JX0VYVFJBX0FSR1MsXG4gIERFRkFVTFRfTUFYX1RFU1RfQVRURU1QVFMsXG4gIERFRkFVTFRfTk9ERV9SVU5USU1FLFxuICBERUZBVUxUX1JFUE9NSVhfRVhUUkFfQVJHUyxcbn0gZnJvbSAnLi9kZWZhdWx0T3B0aW9ucy5qcyc7XG5pbXBvcnQgeyBtYWluIH0gZnJvbSAnLi9tYWluLmpzJztcbmltcG9ydCB7IG5vcm1hbGl6ZU5vZGVSdW50aW1lIH0gZnJvbSAnLi9zcGF3bi5qcyc7XG5pbXBvcnQgdHlwZSB7IENvZGluZ1Rvb2wsIE5vZGVSdW50aW1lLCBOb2RlUnVudGltZUFjdHVhbCwgUmVhc29uaW5nRWZmb3J0IH0gZnJvbSAnLi90eXBlcy5qcyc7XG5cbi8vIFBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgdXNpbmcgeWFyZ3MgKENMSSBvcHRpb25zIG92ZXJyaWRlIGNvbmZpZylcbmNvbnN0IGFyZ3YgPSBhd2FpdCB5YXJncyhoaWRlQmluKHByb2Nlc3MuYXJndikpXG4gIC5jb25maWcobG9hZENvbmZpZ0ZpbGUoKSlcbiAgLy8gT3B0aW9ucyBzYW1lIHdpdGggdGhlIEdpdEh1YiBBY3Rpb25zIHdvcmtmbG93XG4gIC5vcHRpb24oJ2lzc3VlLW51bWJlcicsIHtcbiAgICBhbGlhczogJ2knLFxuICAgIGRlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciB0byBwcm9jZXNzJyxcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZW1hbmRPcHRpb246IHRydWUsXG4gIH0pXG4gIC5vcHRpb24oJ3BsYW5uaW5nLW1vZGVsJywge1xuICAgIGFsaWFzOiAnbScsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnTExNIGZvciBwbGFubmluZyBjb2RlIGNoYW5nZXMuIE11c3QgdXNlIGxsbWxpdGUgZm9ybWF0OiBwcm92aWRlci9tb2RlbCAoZS5nLiwgb3BlbmFpL2dwdC00LjEsIGF6dXJlL2dwdC00LjEsIGdlbWluaS9nZW1pbmktMi41LXBybywgYW50aHJvcGljL2NsYXVkZS00LXNvbm5ldC1sYXRlc3QsIGJlZHJvY2svdXMuYW50aHJvcGljLmNsYXVkZS1zb25uZXQtNC0yMDI1MDUxNC12MTowLCB2ZXJ0ZXgvZ2VtaW5pLTIuNS1wcm8sIHhhaS9ncm9rLTQpJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgfSlcbiAgLm9wdGlvbigndHdvLXN0YWdlZC1wbGFubmluZycsIHtcbiAgICBhbGlhczogJ3AnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0VuYWJsZSB0d28tc3RhZ2VkIHBsYW5uaW5nOiBmaXJzdCBzZWxlY3QgcmVsZXZhbnQgZmlsZXMsIHRoZW4gZ2VuZXJhdGUgZGV0YWlsZWQgaW1wbGVtZW50YXRpb24gcGxhbnMgKGluY3JlYXNlcyBMTE0gY29zdCBidXQgaW1wcm92ZXMgY29kZSBxdWFsaXR5KScsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHQ6IHRydWUsXG4gIH0pXG4gIC5vcHRpb24oJ3JlYXNvbmluZy1lZmZvcnQnLCB7XG4gICAgYWxpYXM6ICdlJyxcbiAgICBkZXNjcmlwdGlvbjogJ0NvbnN0cmFpbnMgZWZmb3J0IG9uIHJlYXNvbmluZyBmb3IgcGxhbm5pbmcgbW9kZWxzLiBTdXBwb3J0ZWQgdmFsdWVzIGFyZSBsb3csIG1lZGl1bSwgYW5kIGhpZ2guJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBjaG9pY2VzOiBbJ2xvdycsICdtZWRpdW0nLCAnaGlnaCddLFxuICB9KVxuICAub3B0aW9uKCdjb2RpbmctdG9vbCcsIHtcbiAgICBhbGlhczogJ2MnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ29kaW5nIHRvb2wgdG8gdXNlIGZvciBtYWtpbmcgY2hhbmdlcycsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgY2hvaWNlczogWydhaWRlcicsICdjbGF1ZGUtY29kZScsICdjb2RleC1jbGknLCAnZ2VtaW5pLWNsaSddLFxuICAgIGRlZmF1bHQ6IERFRkFVTFRfQ09ESU5HX1RPT0wsXG4gIH0pXG4gIC5vcHRpb24oJ2FpZGVyLWV4dHJhLWFyZ3MnLCB7XG4gICAgYWxpYXM6ICdhJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdBZGRpdGlvbmFsIGFyZ3VtZW50cyB0byBwYXNzIHRvIEFpZGVyIChcIi0teWVzLWFsd2F5cyAtLW5vLWNoZWNrLXVwZGF0ZSAtLW5vLXNob3ctcmVsZWFzZS1ub3Rlc1wiIGlzIGFsd2F5cyBhcHBsaWVkKScsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgZGVmYXVsdDogREVGQVVMVF9BSURFUl9FWFRSQV9BUkdTLFxuICB9KVxuICAub3B0aW9uKCdjbGF1ZGUtY29kZS1leHRyYS1hcmdzJywge1xuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0FkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gQ2xhdWRlIENvZGUgKFwiLS1kYW5nZXJvdXNseS1za2lwLXBlcm1pc3Npb25zXCIgaXMgYWx3YXlzIGFwcGxpZWQsIFwiLS1wcmludFwiIGlzIGFwcGxpZWQgb25seSBpbiBDSSknLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGRlZmF1bHQ6IERFRkFVTFRfQ0xBVURFX0NPREVfRVhUUkFfQVJHUyxcbiAgfSlcbiAgLm9wdGlvbignY29kZXgtZXh0cmEtYXJncycsIHtcbiAgICBkZXNjcmlwdGlvbjogJ0FkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gQ29kZXggQ0xJIChub3RoaW5nIGlzIGFsd2F5cyBhcHBsaWVkKScsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgZGVmYXVsdDogREVGQVVMVF9DT0RFWF9FWFRSQV9BUkdTLFxuICB9KVxuICAub3B0aW9uKCdnZW1pbmktZXh0cmEtYXJncycsIHtcbiAgICBkZXNjcmlwdGlvbjogJ0FkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gR2VtaW5pIENMSSAoXCItLXlvbG9cIiBpcyBhbHdheXMgYXBwbGllZCknLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGRlZmF1bHQ6IERFRkFVTFRfR0VNSU5JX0VYVFJBX0FSR1MsXG4gIH0pXG4gIC5vcHRpb24oJ3JlcG9taXgtZXh0cmEtYXJncycsIHtcbiAgICBhbGlhczogJ3InLFxuICAgIGRlc2NyaXB0aW9uOiAnQWRkaXRpb25hbCBhcmd1bWVudHMgZm9yIHJlcG9taXggd2hlbiBnZW5lcmF0aW5nIGNvbnRleHQnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGRlZmF1bHQ6IERFRkFVTFRfUkVQT01JWF9FWFRSQV9BUkdTLFxuICB9KVxuICAub3B0aW9uKCd0ZXN0LWNvbW1hbmQnLCB7XG4gICAgYWxpYXM6ICd0JyxcbiAgICBkZXNjcmlwdGlvbjogJ0NvbW1hbmQgdG8gcnVuIGFmdGVyIHRoZSBjb2RpbmcgdG9vbCBhcHBsaWVzIGNoYW5nZXMuIElmIGl0IGZhaWxzLCB0aGUgYXNzaXN0YW50IHdpbGwgdHJ5IHRvIGZpeCBpdC4nLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICB9KVxuICAub3B0aW9uKCdtYXgtdGVzdC1hdHRlbXB0cycsIHtcbiAgICBkZXNjcmlwdGlvbjogJ01heGltdW0gbnVtYmVyIG9mIGF0dGVtcHRzIHRvIGZpeCB0ZXN0IGZhaWx1cmVzJyxcbiAgICB0eXBlOiAnbnVtYmVyJyxcbiAgICBkZWZhdWx0OiBERUZBVUxUX01BWF9URVNUX0FUVEVNUFRTLFxuICB9KVxuICAub3B0aW9uKCdkcnktcnVuJywge1xuICAgIGFsaWFzOiAnZCcsXG4gICAgZGVzY3JpcHRpb246ICdSdW4gd2l0aG91dCBtYWtpbmcgYWN0dWFsIGNoYW5nZXMgKG5vIGJyYW5jaCBjcmVhdGlvbiwgbm8gUFIpJyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0pXG4gIC5vcHRpb24oJ3JlbW92ZS1wYXR0ZXJuJywge1xuICAgIGRlc2NyaXB0aW9uOiAnUmVnRXhwIHBhdHRlcm4gdG8gcmVtb3ZlIGZyb20gaXNzdWUgYW5kIFBSIGRlc2NyaXB0aW9ucycsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gIH0pXG4gIC5vcHRpb24oJ25vLWJyYW5jaCcsIHtcbiAgICBhbGlhczogJ24nLFxuICAgIGRlc2NyaXB0aW9uOiAnRG8gbm90IGNyZWF0ZSBhIG5ldyBicmFuY2gsIGNvbW1pdCBjaGFuZ2VzIGRpcmVjdGx5IHRvIHRoZSBiYXNlIGJyYW5jaCcsXG4gICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIGRlZmF1bHQ6IGZhbHNlLFxuICB9KVxuICAub3B0aW9uKCdub2RlLXJ1bnRpbWUnLCB7XG4gICAgZGVzY3JpcHRpb246ICdOb2RlLmpzIHJ1bnRpbWUgdG8gdXNlIGZvciBydW5uaW5nIHRvb2xzJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBjaG9pY2VzOiBbJ25vZGUnLCAnYnVuJywgJ25weCcsICdidW54J10sXG4gICAgZGVmYXVsdDogREVGQVVMVF9OT0RFX1JVTlRJTUUsXG4gIH0pXG4gIC8vIE9wdGlvbnMgb25seSBmb3IgdGhpcyBzdGFuZGFsb25lIHRvb2wgLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLm9wdGlvbignd29ya2luZy1kaXInLCB7XG4gICAgYWxpYXM6ICd3JyxcbiAgICBkZXNjcmlwdGlvbjogJ1dvcmtpbmcgZGlyZWN0b3J5IHBhdGggZm9yIGNvbW1hbmRzJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgfSlcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAudmVyc2lvbihnZXRWZXJzaW9uKCkpXG4gIC5oZWxwKCkuYXJndjtcblxuZnVuY3Rpb24gZ2V0VmVyc2lvbigpOiBzdHJpbmcge1xuICBsZXQgcGFja2FnZUpzb25EaXIgPSBpbXBvcnQubWV0YS5kaXIgfHwgcGF0aC5kaXJuYW1lKG5ldyBVUkwoaW1wb3J0Lm1ldGEudXJsKS5wYXRobmFtZSk7XG4gIHdoaWxlICghZnMuZXhpc3RzU3luYyhwYXRoLmpvaW4ocGFja2FnZUpzb25EaXIsICdwYWNrYWdlLmpzb24nKSkpIHtcbiAgICBwYWNrYWdlSnNvbkRpciA9IHBhdGguZGlybmFtZShwYWNrYWdlSnNvbkRpcik7XG4gIH1cbiAgcmV0dXJuIEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBhdGguam9pbihwYWNrYWdlSnNvbkRpciwgJ3BhY2thZ2UuanNvbicpLCAndXRmOCcpKS52ZXJzaW9uO1xufVxuXG5pZiAoYXJndlsnd29ya2luZy1kaXInXSkge1xuICBwcm9jZXNzLmNoZGlyKGFyZ3ZbJ3dvcmtpbmctZGlyJ10pO1xuICBjb25zb2xlLmluZm8oYENoYW5nZWQgd29ya2luZyBkaXJlY3RvcnkgdG86ICR7cHJvY2Vzcy5jd2QoKX1gKTtcbn1cblxuLy8gTm9ybWFsaXplIHRoZSBydW50aW1lIHZhbHVlIChjb252ZXJ0IGFsaWFzZXMgdG8gYWN0dWFsIGNvbW1hbmRzKVxuY29uc3Qgbm9kZVJ1bnRpbWU6IE5vZGVSdW50aW1lQWN0dWFsID0gbm9ybWFsaXplTm9kZVJ1bnRpbWUoYXJndlsnbm9kZS1ydW50aW1lJ10gYXMgTm9kZVJ1bnRpbWUpO1xuXG5hd2FpdCBtYWluKHtcbiAgYWlkZXJFeHRyYUFyZ3M6IGFyZ3ZbJ2FpZGVyLWV4dHJhLWFyZ3MnXSxcbiAgY2xhdWRlQ29kZUV4dHJhQXJnczogYXJndlsnY2xhdWRlLWNvZGUtZXh0cmEtYXJncyddLFxuICBjb2RleEV4dHJhQXJnczogYXJndlsnY29kZXgtZXh0cmEtYXJncyddLFxuICBnZW1pbmlFeHRyYUFyZ3M6IGFyZ3ZbJ2dlbWluaS1leHRyYS1hcmdzJ10sXG4gIGNvZGluZ1Rvb2w6IGFyZ3ZbJ2NvZGluZy10b29sJ10gYXMgQ29kaW5nVG9vbCxcbiAgZHJ5UnVuOiBhcmd2WydkcnktcnVuJ10sXG4gIG5vQnJhbmNoOiBhcmd2Wyduby1icmFuY2gnXSxcbiAgbm9kZVJ1bnRpbWUsXG4gIHR3b1N0YWdlUGxhbm5pbmc6IGFyZ3ZbJ3R3by1zdGFnZWQtcGxhbm5pbmcnXSxcbiAgaXNzdWVOdW1iZXI6IGFyZ3ZbJ2lzc3VlLW51bWJlciddLFxuICBtYXhUZXN0QXR0ZW1wdHM6IGFyZ3ZbJ21heC10ZXN0LWF0dGVtcHRzJ10sXG4gIHBsYW5uaW5nTW9kZWw6IGFyZ3ZbJ3BsYW5uaW5nLW1vZGVsJ10sXG4gIHJlYXNvbmluZ0VmZm9ydDogYXJndlsncmVhc29uaW5nLWVmZm9ydCddIGFzIFJlYXNvbmluZ0VmZm9ydCxcbiAgcmVwb21peEV4dHJhQXJnczogYXJndlsncmVwb21peC1leHRyYS1hcmdzJ10sXG4gIHRlc3RDb21tYW5kOiBhcmd2Wyd0ZXN0LWNvbW1hbmQnXSxcbiAgcmVtb3ZlUGF0dGVybjogYXJndlsncmVtb3ZlLXBhdHRlcm4nXSxcbn0pO1xuIl0sIm5hbWVzIjpbImFsaWduIiwicmlnaHQiLCJzdHIiLCJ3aWR0aCIsInRyaW0iLCJzdHJXaWR0aCIsIm1peGluIiwic3RyaW5nV2lkdGgiLCJyZXBlYXQiLCJjZW50ZXIiLCJVSSIsImNvbnN0cnVjdG9yIiwib3B0cyIsIl9hIiwidGhpcyIsIndyYXAiLCJyb3dzIiwic3BhbiIsImFyZ3MiLCJkaXYiLCJyZXNldE91dHB1dCIsImxlbmd0aCIsInNob3VsZEFwcGx5TGF5b3V0RFNMIiwiYXBwbHlMYXlvdXREU0wiLCJjb2xzIiwibWFwIiwiYXJnIiwiY29sRnJvbVN0cmluZyIsInB1c2giLCJ0ZXN0Iiwic3BsaXQiLCJyb3ciLCJsZWZ0Q29sdW1uV2lkdGgiLCJmb3JFYWNoIiwiY29sdW1ucyIsIk1hdGgiLCJtaW4iLCJmbG9vciIsInIiLCJpIiwidGV4dCIsInBhZGRpbmciLCJtZWFzdXJlUGFkZGluZyIsInVuZGVmaW5lZCIsIm5vQW5zaSIsInN0cmlwQW5zaSIsIm1hdGNoIiwidG9TdHJpbmciLCJsaW5lcyIsInJvd1RvU3RyaW5nIiwiZmlsdGVyIiwibGluZSIsImhpZGRlbiIsImpvaW4iLCJyYXN0ZXJpemUiLCJycm93IiwiY29sIiwiYyIsIndyYXBXaWR0aCIsIm5lZ2F0ZVBhZGRpbmciLCJ0cyIsImZuIiwiYWRkQm9yZGVyIiwicmVuZGVySW5saW5lIiwicmVwbGFjZSIsInNvdXJjZSIsInByZXZpb3VzTGluZSIsImxlYWRpbmdXaGl0ZXNwYWNlIiwidGFyZ2V0IiwidGFyZ2V0VGV4dFdpZHRoIiwidHJpbVJpZ2h0IiwidHJpbUxlZnQiLCJycm93cyIsIndpZHRocyIsImNvbHVtbldpZHRocyIsIndyYXBwZWQiLCJoYXJkIiwiYm9yZGVyIiwidW5zaGlmdCIsIkFycmF5IiwiZmlsbCIsInVuc2V0IiwicmVtYWluaW5nV2lkdGgiLCJ1bnNldFdpZHRoIiwidyIsIm1heCIsIm1pbldpZHRoIiwiX21pbldpZHRoIiwic3R5bGUiLCJyZWdleCIsIm9ubHlGaXJzdCIsIlJlZ0V4cCIsImFuc2lSZWdleCIsInN0cmluZyIsIlR5cGVFcnJvciIsImVhc3RBc2lhbldpZHRoIiwiY29kZVBvaW50IiwiYW1iaWd1b3VzQXNXaWRlIiwiTnVtYmVyIiwiaXNTYWZlSW50ZWdlciIsInZhbGlkYXRlIiwieCIsImlzV2lkZSIsImlzQW1iaWd1b3VzIiwiZW1vamlSZWdleCIsInNlZ21lbnRlciIsIkludGwiLCJTZWdtZW50ZXIiLCJkZWZhdWx0SWdub3JhYmxlQ29kZVBvaW50UmVnZXgiLCJvcHRpb25zIiwiYW1iaWd1b3VzSXNOYXJyb3ciLCJjb3VudEFuc2lFc2NhcGVDb2RlcyIsImVhc3RBc2lhbldpZHRoT3B0aW9ucyIsInNlZ21lbnQiLCJjaGFyYWN0ZXIiLCJjb2RlUG9pbnRBdCIsIndyYXBBbnNpMTYiLCJvZmZzZXQiLCJjb2RlIiwid3JhcEFuc2kyNTYiLCJ3cmFwQW5zaTE2bSIsInJlZCIsImdyZWVuIiwiYmx1ZSIsInN0eWxlcyIsIm1vZGlmaWVyIiwicmVzZXQiLCJib2xkIiwiZGltIiwiaXRhbGljIiwidW5kZXJsaW5lIiwib3ZlcmxpbmUiLCJpbnZlcnNlIiwic3RyaWtldGhyb3VnaCIsImNvbG9yIiwiYmxhY2siLCJ5ZWxsb3ciLCJtYWdlbnRhIiwiY3lhbiIsIndoaXRlIiwiYmxhY2tCcmlnaHQiLCJncmF5IiwiZ3JleSIsInJlZEJyaWdodCIsImdyZWVuQnJpZ2h0IiwieWVsbG93QnJpZ2h0IiwiYmx1ZUJyaWdodCIsIm1hZ2VudGFCcmlnaHQiLCJjeWFuQnJpZ2h0Iiwid2hpdGVCcmlnaHQiLCJiZ0NvbG9yIiwiYmdCbGFjayIsImJnUmVkIiwiYmdHcmVlbiIsImJnWWVsbG93IiwiYmdCbHVlIiwiYmdNYWdlbnRhIiwiYmdDeWFuIiwiYmdXaGl0ZSIsImJnQmxhY2tCcmlnaHQiLCJiZ0dyYXkiLCJiZ0dyZXkiLCJiZ1JlZEJyaWdodCIsImJnR3JlZW5CcmlnaHQiLCJiZ1llbGxvd0JyaWdodCIsImJnQmx1ZUJyaWdodCIsImJnTWFnZW50YUJyaWdodCIsImJnQ3lhbkJyaWdodCIsImJnV2hpdGVCcmlnaHQiLCJPYmplY3QiLCJrZXlzIiwiYW5zaVN0eWxlcyIsImNvZGVzIiwiTWFwIiwiZ3JvdXBOYW1lIiwiZ3JvdXAiLCJlbnRyaWVzIiwic3R5bGVOYW1lIiwib3BlbiIsImNsb3NlIiwic2V0IiwiZGVmaW5lUHJvcGVydHkiLCJ2YWx1ZSIsImVudW1lcmFibGUiLCJhbnNpIiwiYW5zaTI1NiIsImFuc2kxNm0iLCJkZWZpbmVQcm9wZXJ0aWVzIiwicmdiVG9BbnNpMjU2Iiwicm91bmQiLCJoZXhUb1JnYiIsImhleCIsIm1hdGNoZXMiLCJleGVjIiwiY29sb3JTdHJpbmciLCJpbnRlZ2VyIiwicGFyc2VJbnQiLCJoZXhUb0Fuc2kyNTYiLCJhbnNpMjU2VG9BbnNpIiwicmVtYWluZGVyIiwicmVzdWx0IiwicmdiVG9BbnNpIiwiaGV4VG9BbnNpIiwiYXNzZW1ibGVTdHlsZXMiLCJFU0NBUEVTIiwiU2V0IiwiQU5TSV9FU0NBUEVfTElOSyIsIndyYXBBbnNpQ29kZSIsInZhbHVlcyIsIm5leHQiLCJ3cmFwQW5zaUh5cGVybGluayIsInVybCIsIndyYXBXb3JkIiwid29yZCIsImNoYXJhY3RlcnMiLCJpc0luc2lkZUVzY2FwZSIsImlzSW5zaWRlTGlua0VzY2FwZSIsInZpc2libGUiLCJhdCIsImluZGV4IiwiY2hhcmFjdGVyTGVuZ3RoIiwiaGFzIiwic2xpY2UiLCJwb3AiLCJlc2NhcGVDb2RlIiwiZXNjYXBlVXJsIiwicmV0dXJuVmFsdWUiLCJsZW5ndGhzIiwid29yZExlbmd0aHMiLCJ0cmltU3RhcnQiLCJyb3dMZW5ndGgiLCJ3b3JkV3JhcCIsInJlbWFpbmluZ0NvbHVtbnMiLCJicmVha3NTdGFydGluZ1RoaXNMaW5lIiwid29yZHMiLCJsYXN0Iiwic3RyaW5nVmlzaWJsZVRyaW1TcGFjZXNSaWdodCIsInByZVN0cmluZyIsInByZSIsInByZVN0cmluZ0luZGV4IiwiZ3JvdXBzIiwicGFyc2VGbG9hdCIsInVyaSIsImdldCIsIndyYXBBbnNpIiwiU3RyaW5nIiwibm9ybWFsaXplIiwicmVwbGFjZUFsbCIsImNhbWVsQ2FzZSIsInRvTG93ZXJDYXNlIiwidG9VcHBlckNhc2UiLCJpbmRleE9mIiwiY2FtZWxjYXNlIiwibmV4dENoclVwcGVyIiwibGVhZGluZ0h5cGhlbnMiLCJjaHIiLCJjaGFyQXQiLCJkZWNhbWVsaXplIiwiam9pblN0cmluZyIsImxvd2VyY2FzZSIsIm5vdENhbWVsY2FzZSIsImNockxvd2VyIiwiY2hyU3RyaW5nIiwibG9va3NMaWtlTnVtYmVyIiwiRGVmYXVsdFZhbHVlc0ZvclR5cGVLZXkiLCJpbmNyZW1lbnQiLCJvcmlnIiwic2FuaXRpemVLZXkiLCJrZXkiLCJfYiIsIl9jIiwibWluTm9kZVZlcnNpb24iLCJwcm9jZXNzIiwiZW52IiwiWUFSR1NfTUlOX05PREVfVkVSU0lPTiIsIm5vZGVWZXJzaW9uIiwidmVyc2lvbnMiLCJub2RlIiwidmVyc2lvbiIsIkVycm9yIiwicmVxdWlyZSIsImNyZWF0ZVJlcXVpcmUiLCJwYXJzZXIiLCJfbWl4aW4iLCJwYXJzZSIsImFyZ3NJbnB1dCIsImFzc2lnbiIsImFsaWFzIiwiYXJyYXkiLCJib29sZWFuIiwiY29uZmlnIiwiY29uZmlnT2JqZWN0cyIsImNvbmZpZ3VyYXRpb24iLCJjb2VyY2UiLCJjb3VudCIsImRlZmF1bHQiLCJlbnZQcmVmaXgiLCJuYXJnIiwibnVtYmVyIiwiX18iLCJhcmdTdHJpbmciLCJpc0FycmF5IiwiZSIsInByZXZDIiwib3BlbmluZyIsImlpIiwidG9rZW5pemVBcmdTdHJpbmciLCJpbnB1dElzU3RyaW5nIiwiYWxpYXNlcyIsImFsaWFzQXJyYXlzIiwiY29tYmluZWQiLCJjcmVhdGUiLCJjaGFuZ2UiLCJjb25jYXQiLCJ2Iiwic3BsaWNlIiwiYWxpYXNBcnJheSIsImxhc3RBbGlhcyIsInNlbGYiLCJjb21iaW5lQWxpYXNlcyIsImRlZmF1bHRzIiwibm90RmxhZ3NPcHRpb24iLCJub3RGbGFnc0FyZ3YiLCJuZXdBbGlhc2VzIiwiZGVmYXVsdGVkIiwiZm9ybWF0IiwiZmxhZ3MiLCJhcnJheXMiLCJib29scyIsInN0cmluZ3MiLCJudW1iZXJzIiwiY291bnRzIiwiY29uZmlncyIsIm5hcmdzIiwiY29lcmNpb25zIiwibmVnYXRpdmUiLCJuZWdhdGVkQm9vbGVhbiIsIkJvb2xlYW4iLCJvcHQiLCJhc3NpZ25tZW50Iiwib2JqIiwieSIsImV4dGVuZEFsaWFzZXMiLCJlcnJvciIsImZpbmQiLCJjaGVja0FsbEFsaWFzZXMiLCJub3RGbGFncyIsImFyZ3YiLCJfIiwiYXJndlJldHVybiIsInRydW5jYXRlZEFyZyIsImJyb2tlbiIsImxldHRlcnMiLCJtIiwiaXNVbmtub3duT3B0aW9uQXNBcmciLCJwdXNoUG9zaXRpb25hbCIsImVhdEFycmF5IiwiZWF0TmFyZ3MiLCJzZXRBcmciLCJkZWZhdWx0VmFsdWUiLCJqIiwibWF5YmVDb2VyY2VkTnVtYmVyIiwibWF5YmVDb2VyY2VOdW1iZXIiLCJhcmdBZnRlckVxdWFsU2lnbiIsInRvRWF0IiwiaXNOYU4iLCJpc1VuZGVmaW5lZCIsImF2YWlsYWJsZSIsImNvbnN1bWVkIiwiYXJnc1RvU2V0IiwibmFyZ3NDb3VudCIsImRlZlZhbCIsInByb2Nlc3NWYWx1ZSIsInZhbCIsInNob3VsZFN0cmlwUXVvdGVzIiwicHJvcCIsImFkZE5ld0FsaWFzIiwic3BsaXRLZXkiLCJzZXRLZXkiLCJrZXlQcm9wZXJ0aWVzIiwiYSIsInNoaWZ0IiwiaW5jbHVkZXMiLCJzdWJzdHJpbmciLCJzdHJpcFF1b3RlcyIsInNldENvbmZpZ09iamVjdCIsInByZXYiLCJmdWxsS2V5IiwiaGFzS2V5IiwiYXBwbHlFbnZWYXJzIiwiY29uZmlnT25seSIsInByZWZpeCIsImVudlZhciIsImxhc3RJbmRleE9mIiwiYXBwbHlEZWZhdWx0c0FuZEFsaWFzZXMiLCJjYW5Mb2ciLCJvIiwiaXNUeXBlQXJyYXkiLCJpc1ZhbHVlQXJyYXkiLCJkdXBsaWNhdGUiLCJmbGFnIiwidG9DaGVjayIsInNldEFsaWFzIiwiaGFzQW55RmxhZyIsImZsYWdzS2V5cyIsImsiLCJzb21lIiwiaGFzQWxsRmxhZ3MiLCJoYXNBbGxTaG9ydEZsYWdzIiwicGF0dGVybnMiLCJwYXR0ZXJuIiwiaGFzRmxhZ3NNYXRjaGluZyIsImlzVW5rbm93bk9wdGlvbiIsInR5cGUiLCJCT09MRUFOIiwiU1RSSU5HIiwiTlVNQkVSIiwiQVJSQVkiLCJndWVzc1R5cGUiLCJudW0iLCJjb25maWdMb29rdXAiLCJjb25maWdLZXkiLCJjb25maWdQYXRoIiwicmVzb2x2ZWRDb25maWdQYXRoIiwicmVzb2x2ZSIsImN3ZCIsInJlc29sdmVDb25maWciLCJleCIsIm5hbWUiLCJzZXRDb25maWciLCJjb25maWdPYmplY3QiLCJhcHBsaWVkIiwiYWxpIiwiYWRkIiwiZXJyIiwiYXBwbHlDb2VyY2lvbnMiLCJzZXRQbGFjZWhvbGRlcktleXMiLCJwYXRoIiwiSlNPTiIsInJlYWRGaWxlU3luYyIsInlhcmdzUGFyc2VyIiwiZ2V0UHJvY2Vzc0FyZ3ZCaW5JbmRleCIsImVsZWN0cm9uIiwiZGVmYXVsdEFwcCIsImRldGFpbGVkIiwic2hpbSQzIiwiZnMiLCJ3cml0ZUZpbGUiLCJleGlzdHMiLCJmaWxlIiwic3RhdFN5bmMiLCJpc0ZpbGUiLCJzaGltIiwiWTE4TiIsImRpcmVjdG9yeSIsInVwZGF0ZUZpbGVzIiwibG9jYWxlIiwiZmFsbGJhY2tUb0xhbmd1YWdlIiwiY2FjaGUiLCJ3cml0ZVF1ZXVlIiwiYXJndW1lbnRzIiwiX3RhZ2dlZExpdGVyYWwiLCJjYiIsIl9yZWFkTG9jYWxlRmlsZSIsIl9lbnF1ZXVlV3JpdGUiLCJhcHBseSIsIl9fbiIsInByb3RvdHlwZSIsImNhbGwiLCJzaW5ndWxhciIsInBsdXJhbCIsInF1YW50aXR5Iiwib25lIiwib3RoZXIiLCJzZXRMb2NhbGUiLCJnZXRMb2NhbGUiLCJ1cGRhdGVMb2NhbGUiLCJoYXNPd25Qcm9wZXJ0eSIsInBhcnRzIiwicGFydCIsIndvcmsiLCJfcHJvY2Vzc1dyaXRlUXVldWUiLCJfdGhpcyIsImxhbmd1YWdlRmlsZSIsIl9yZXNvbHZlTG9jYWxlRmlsZSIsInNlcmlhbGl6ZWRMb2NhbGUiLCJzdHJpbmdpZnkiLCJsb2NhbGVMb29rdXAiLCJTeW50YXhFcnJvciIsIm1lc3NhZ2UiLCJfZmlsZUV4aXN0c1N5bmMiLCJnZXRDYWxsZXJGaWxlIiwicG9zaXRpb24iLCJzdGFja1RyYWNlTGltaXQiLCJvbGRQcmVwYXJlU3RhY2tUcmFjZSIsInByZXBhcmVTdGFja1RyYWNlIiwic3RhY2siLCJnZXRGaWxlTmFtZSIsIl9fZGlybmFtZSIsImZpbGVVUkxUb1BhdGgiLCJtYWluRmlsZW5hbWUiLCJzaGltJDEiLCJhc3NlcnQiLCJub3RTdHJpY3RFcXVhbCIsInN0cmljdEVxdWFsIiwiY2xpdWkiLCJzdGRvdXQiLCJmaW5kVXAiLCJzdGFydCIsImNhbGxiYWNrIiwidG1wIiwiZGlyIiwiaXNEaXJlY3RvcnkiLCJkaXJuYW1lIiwicmVhZGRpclN5bmMiLCJnZXRFbnYiLCJpbnNwZWN0IiwiZ2V0UHJvY2Vzc0FyZ3ZCaW4iLCJQYXJzZXIiLCJiYXNlbmFtZSIsImV4dG5hbWUiLCJyZWxhdGl2ZSIsImVtaXRXYXJuaW5nIiwid2FybmluZyIsImV4ZWNQYXRoIiwiZXhpdCIsIm5leHRUaWNrIiwic3RkQ29sdW1ucyIsImNhbGxlckZpbGUiLCJ5MThuIiwiX3NoaW0iLCJiaW5kIiwiX3kxOG4iLCJhc3NlcnROb3RTdHJpY3RFcXVhbCIsImFjdHVhbCIsImV4cGVjdGVkIiwiYXNzZXJ0U2luZ2xlS2V5Iiwib2JqZWN0S2V5cyIsIm9iamVjdCIsImlzUHJvbWlzZSIsIm1heWJlUHJvbWlzZSIsInRoZW4iLCJZRXJyb3IiLCJtc2ciLCJzdXBlciIsImNhcHR1cmVTdGFja1RyYWNlIiwicGFyc2VDb21tYW5kIiwiY21kIiwic3BsaXRDb21tYW5kIiwiYnJlZ2V4IiwiZmlyc3RDb21tYW5kIiwicGFyc2VkQ29tbWFuZCIsImRlbWFuZGVkIiwib3B0aW9uYWwiLCJ2YXJpYWRpYyIsInBvc2l0aW9uTmFtZSIsImFyZ3NlcnQiLCJhcmcxIiwiYXJnMiIsImFyZzMiLCJwYXJzZWQiLCJjYWxsZXJBcmd1bWVudHMiLCJfbGVuZ3RoIiwidG90YWxDb21tYW5kcyIsIm9ic2VydmVkVHlwZSIsImFyZ3VtZW50VHlwZUVycm9yIiwiY29uc29sZSIsIndhcm4iLCJhbGxvd2VkVHlwZXMiLCJHbG9iYWxNaWRkbGV3YXJlIiwieWFyZ3MiLCJnbG9iYWxNaWRkbGV3YXJlIiwiZnJvemVucyIsImFkZE1pZGRsZXdhcmUiLCJhcHBseUJlZm9yZVZhbGlkYXRpb24iLCJnbG9iYWwiLCJtdXRhdGVzIiwiYWRkQ29lcmNlTWlkZGxld2FyZSIsIm9wdGlvbiIsImdldEFsaWFzZXMiLCJnZXRNaWRkbGV3YXJlIiwiZnJlZXplIiwidW5mcmVlemUiLCJmcm96ZW4iLCJhcHBseU1pZGRsZXdhcmUiLCJtaWRkbGV3YXJlcyIsImJlZm9yZVZhbGlkYXRpb24iLCJyZWR1Y2UiLCJhY2MiLCJtaWRkbGV3YXJlIiwiaW5pdGlhbE9iaiIsIlByb21pc2UiLCJhbGwiLCJtaWRkbGV3YXJlT2JqIiwibWF5YmVBc3luY1Jlc3VsdCIsImdldFJlc3VsdCIsInJlc3VsdEhhbmRsZXIiLCJlcnJvckhhbmRsZXIiLCJERUZBVUxUX01BUktFUiIsIkNvbW1hbmRJbnN0YW5jZSIsInVzYWdlIiwidmFsaWRhdGlvbiIsInJlcXVpcmVDYWNoZSIsImhhbmRsZXJzIiwiYWxpYXNNYXAiLCJhZGREaXJlY3RvcnkiLCJyZXEiLCJmdWxsRGlyUGF0aCIsImZpbGVzIiwicmVjdXJzaXZlIiwicmVjdXJzZSIsImV4dGVuc2lvbnMiLCJ2aXNpdCIsImZpbGViIiwiZXhjbHVkZSIsImluY2x1ZGUiLCJzdXBwb3J0ZWRFeHRlbnNpb24iLCJleHQiLCJlbmRzV2l0aCIsImpvaW5lZCIsIm1vZHVsZSIsImV4dGVuZGFibGVNb2R1bGUiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzIiwiY29tbWFuZCIsImFkZEhhbmRsZXIiLCJkZXNjcmlwdGlvbiIsImJ1aWxkZXIiLCJoYW5kbGVyIiwiY29tbWFuZE1pZGRsZXdhcmUiLCJkZXByZWNhdGVkIiwiY29tbWFuZE1pZGRsZXdhcmVGYWN0b3J5IiwiZXZlcnkiLCJpc0NvbW1hbmRBbmRBbGlhc2VzIiwiaXNDb21tYW5kSGFuZGxlckRlZmluaXRpb24iLCJleHRyYWN0RGVzYyIsImlzQ29tbWFuZEJ1aWxkZXJEZWZpbml0aW9uIiwiaXNEZWZhdWx0IiwicGFyc2VkQWxpYXNlcyIsIm9yaWdpbmFsIiwiZGVmYXVsdENvbW1hbmQiLCJnZXRDb21tYW5kSGFuZGxlcnMiLCJnZXRDb21tYW5kcyIsImhhc0RlZmF1bHRDb21tYW5kIiwicnVuQ29tbWFuZCIsImNvbW1hbmRJbmRleCIsImhlbHBPbmx5IiwiaGVscE9yVmVyc2lvblNldCIsImNvbW1hbmRIYW5kbGVyIiwiY3VycmVudENvbnRleHQiLCJnZXRJbnRlcm5hbE1ldGhvZHMiLCJnZXRDb250ZXh0IiwicGFyZW50Q29tbWFuZHMiLCJjb21tYW5kcyIsImlzRGVmYXVsdENvbW1hbmQiLCJmdWxsQ29tbWFuZHMiLCJidWlsZGVyUmVzdWx0IiwiYXBwbHlCdWlsZGVyVXBkYXRlVXNhZ2VBbmRQYXJzZSIsImFwcGx5TWlkZGxld2FyZUFuZEdldFJlc3VsdCIsImlubmVyQXJndiIsImlubmVyWWFyZ3MiLCJpc0NvbW1hbmRCdWlsZGVyQ2FsbGJhY2siLCJnZXRVc2FnZUluc3RhbmNlIiwiYnVpbGRlck91dHB1dCIsIm91dHB1dCIsInBhcnNlQW5kVXBkYXRlVXNhZ2UiLCJpc0NvbW1hbmRCdWlsZGVyT3B0aW9uRGVmaW5pdGlvbnMiLCJzaG91bGRVcGRhdGVVc2FnZSIsInVzYWdlRnJvbVBhcmVudENvbW1hbmRzQ29tbWFuZEhhbmRsZXIiLCJydW5ZYXJnc1BhcnNlckFuZEV4ZWN1dGVDb21tYW5kcyIsImdldFVzYWdlRGlzYWJsZWQiLCJnZXRVc2FnZSIsInBjIiwiaGFuZGxlVmFsaWRhdGlvbkFuZEdldFJlc3VsdCIsInBvc2l0aW9uYWxNYXAiLCJnZXRIYXNPdXRwdXQiLCJydW5WYWxpZGF0aW9uIiwic2V0SGFzT3V0cHV0IiwicG9wdWxhdGVEb3VibGVEYXNoIiwiZ2V0T3B0aW9ucyIsInBvc3RQcm9jZXNzIiwiaGFuZGxlclJlc3VsdCIsImNhY2hlSGVscE1lc3NhZ2UiLCJoYXNQYXJzZUNhbGxiYWNrIiwiY2F0Y2giLCJmYWlsIiwiX2VyciIsInBvcHVsYXRlUG9zaXRpb25hbHMiLCJtYXliZVByb21pc2VBcmd2IiwicmVzb2x2ZWRJbm5lckFyZ3YiLCJjb250ZXh0IiwicG9zaXRpb25hbENvdW50IiwiZGVtYW5kIiwicG9wdWxhdGVQb3NpdGlvbmFsIiwibWF5YmUiLCJwb3N0UHJvY2Vzc1Bvc2l0aW9uYWxzIiwiY21kVG9QYXJzZU9wdGlvbnMiLCJwb3NpdGlvbmFsIiwiY21kU3RyaW5nIiwicGFyc2VPcHRpb25zIiwiZCIsInVucGFyc2VkIiwicG9zaXRpb25hbEtleXMiLCJpc0luQ29uZmlncyIsImlzRGVmYXVsdGVkIiwicnVuRGVmYXVsdEJ1aWxkZXJPbiIsImNvbW1hbmRTdHJpbmciLCJkZXNjcmliZSIsImRlc2MiLCJvYmpGaWx0ZXIiLCJzZXRCbG9ja2luZyIsImJsb2NraW5nIiwic3RkZXJyIiwiX3N0cmVhbSIsInN0cmVhbSIsIl9oYW5kbGUiLCJpc1RUWSIsImlzQm9vbGVhbiIsImZhaWxzIiwiZmFpbEZuIiwiZiIsImZhaWxNZXNzYWdlIiwiZ2xvYmFsRmFpbE1lc3NhZ2UiLCJzaG93SGVscE9uRmFpbCIsImVuYWJsZWQiLCJpc0dsb2JhbENvbnRleHQiLCJmYWlsdXJlT3V0cHV0IiwibG9nZ2VyIiwiZ2V0TG9nZ2VySW5zdGFuY2UiLCJnZXRFeGl0UHJvY2VzcyIsInNob3dIZWxwIiwiZ2xvYmFsT3JDb21tYW5kRmFpbE1lc3NhZ2UiLCJ1c2FnZXMiLCJ1c2FnZURpc2FibGVkIiwiZ2V0UG9zaXRpb25hbEdyb3VwTmFtZSIsImV4YW1wbGVzIiwiZXhhbXBsZSIsImNtZEFycmF5IiwiZGVzY3JpcHRpb25zIiwia2V5T3JLZXlzIiwiZ2V0RGVzY3JpcHRpb25zIiwiZXBpbG9ncyIsImVwaWxvZyIsIndyYXBTZXQiLCJnZXRXcmFwIiwibWF4V2lkdGgiLCJ3aW5kb3dXaWR0aCIsImRlZmVyWTE4bkxvb2t1cFByZWZpeCIsInRhYmxlIiwidGhlV3JhcCIsImdldFRleHQiLCJnZXRJbmRlbnRhdGlvbiIsImNhY2hlZEhlbHBNZXNzYWdlIiwiZmlsdGVySGlkZGVuT3B0aW9ucyIsImhpZGRlbk9wdGlvbnMiLCJzaG93SGlkZGVuT3B0IiwiZGVmYXVsdFN0cmluZyIsImRlZmF1bHREZXNjcmlwdGlvbiIsImRlZmVyWTE4bkxvb2t1cCIsImhlbHAiLCJkZW1hbmRlZE9wdGlvbnMiLCJnZXREZW1hbmRlZE9wdGlvbnMiLCJkZW1hbmRPcHRpb24iLCJub3JtYWxpemVBbGlhc2VzIiwiYmFzZSQwIiwiY3VzdG9tU2NyaXB0TmFtZSIsIiQwIiwiZGVtYW5kZWRDb21tYW5kcyIsImdldERlbWFuZGVkQ29tbWFuZHMiLCJkZXByZWNhdGVkT3B0aW9ucyIsImdldERlcHJlY2F0ZWRPcHRpb25zIiwiZ2V0R3JvdXBzIiwidWkiLCJ1IiwiZ2V0UGFyc2VyQ29uZmlndXJhdGlvbiIsInNvcnQiLCJiIiwibG9jYWxlQ29tcGFyZSIsImhpbnRzIiwiYWxpYXNLZXlzIiwiZGVmYXVsdEdyb3VwIiwiZ3JvdXBlZEtleXMiLCJhZGRVbmdyb3VwZWRLZXlzIiwiaXNMb25nU3dpdGNoIiwic3ciLCJkaXNwbGF5ZWRHcm91cHMiLCJub3JtYWxpemVkS2V5cyIsImFsaWFzS2V5Iiwic3dpdGNoZXMiLCJzdzEiLCJzdzIiLCJpbmRlbnQiLCJpc0luZGVudGVkVGV4dCIsImluZGVudGF0aW9uIiwia3N3aXRjaCIsImV4dHJhIiwiY2hvaWNlcyIsInN0cmluZ2lmaWVkVmFsdWVzIiwic2hvdWxkSGlkZU9wdGlvbkV4dHJhcyIsImdldFVzYWdlQ29uZmlndXJhdGlvbiIsImNsZWFyQ2FjaGVkSGVscE1lc3NhZ2UiLCJoYXNDYWNoZWRIZWxwTWVzc2FnZSIsImxldmVsIiwiZnVuY3Rpb25EZXNjcmlwdGlvbiIsInNlcGFyYXRvciIsInNlcCIsInZlciIsInNob3dWZXJzaW9uIiwibG9jYWxMb29rdXAiLCJDb21wbGV0aW9uIiwiY29tcGxldGlvbktleSIsImN1c3RvbUNvbXBsZXRpb25GdW5jdGlvbiIsImluZGV4QWZ0ZXJMYXN0UmVzZXQiLCJ6c2hTaGVsbCIsImRlZmF1bHRDb21wbGV0aW9uIiwiY3VycmVudCIsImRvbmUiLCJjb21wbGV0aW9ucyIsImNvbW1hbmRDb21wbGV0aW9ucyIsIm9wdGlvbkNvbXBsZXRpb25zIiwiY2hvaWNlc0Zyb21PcHRpb25zQ29tcGxldGlvbnMiLCJjaG9pY2VzRnJvbVBvc2l0aW9uYWxzQ29tcGxldGlvbnMiLCJwcmV2aW91c0FyZ0hhc0Nob2ljZXMiLCJ1c2FnZUNvbW1hbmQiLCJjb21tYW5kTmFtZSIsIm5lZ2FibGUiLCJhcmdzQ29udGFpbktleSIsImNvbXBsZXRlT3B0aW9uS2V5IiwiZ2V0UHJldmlvdXNBcmdDaG9pY2VzIiwicG9zaXRpb25hbEtleSIsImNob2ljZSIsInN0YXJ0c1dpdGgiLCJwcmV2aW91c0FyZyIsInByZXZpb3VzQXJnS2V5IiwicG9zc2libGVBbGlhc2VzIiwicG9zc2libGVBbGlhcyIsImFyZ3NDb250YWlucyIsInMiLCJfZCIsImtleVdpdGhEZXNjIiwiZGVzY3MiLCJkZXNjRnJvbUFsaWFzIiwiZGFzaGVzIiwiaXNTaG9ydE9wdGlvbiIsImN1c3RvbUNvbXBsZXRpb24iLCJsaXN0IiwiY29tcGxldGlvbkZ1bmN0aW9uIiwiaXNGYWxsYmFja0NvbXBsZXRpb25GdW5jdGlvbiIsIm9uQ29tcGxldGVkIiwiZ2V0Q29tcGxldGlvbiIsImdlbmVyYXRlQ29tcGxldGlvblNjcmlwdCIsInNjcmlwdCIsInJlZ2lzdGVyRnVuY3Rpb24iLCJzZXRQYXJzZWQiLCJsZXZlbnNodGVpbiIsIm1hdHJpeCIsInNwZWNpYWxLZXlzIiwicHJldmlvdXNseVZpc2l0ZWRDb25maWdzIiwiYXBwbHlFeHRlbmRzIiwibWVyZ2VFeHRlbmRzIiwiZGVmYXVsdENvbmZpZyIsImV4dGVuZHMiLCJpc1BhdGgiLCJwYXRoVG9EZWZhdWx0IiwicGF0aFRvRXh0ZW5kIiwiZ2V0UGF0aFRvRGVmYXVsdENvbmZpZyIsImNmZ1BhdGgiLCJjaGVja0ZvckNpcmN1bGFyRXh0ZW5kcyIsIm1lcmdlRGVlcCIsImNvbmZpZzEiLCJjb25maWcyIiwiaXNPYmplY3QiLCJfWWFyZ3NJbnN0YW5jZV9jb21tYW5kIiwiX1lhcmdzSW5zdGFuY2VfY3dkIiwiX1lhcmdzSW5zdGFuY2VfY29udGV4dCIsIl9ZYXJnc0luc3RhbmNlX2NvbXBsZXRpb24iLCJfWWFyZ3NJbnN0YW5jZV9jb21wbGV0aW9uQ29tbWFuZCIsIl9ZYXJnc0luc3RhbmNlX2RlZmF1bHRTaG93SGlkZGVuT3B0IiwiX1lhcmdzSW5zdGFuY2VfZXhpdEVycm9yIiwiX1lhcmdzSW5zdGFuY2VfZGV0ZWN0TG9jYWxlIiwiX1lhcmdzSW5zdGFuY2VfZW1pdHRlZFdhcm5pbmdzIiwiX1lhcmdzSW5zdGFuY2VfZXhpdFByb2Nlc3MiLCJfWWFyZ3NJbnN0YW5jZV9mcm96ZW5zIiwiX1lhcmdzSW5zdGFuY2VfZ2xvYmFsTWlkZGxld2FyZSIsIl9ZYXJnc0luc3RhbmNlX2dyb3VwcyIsIl9ZYXJnc0luc3RhbmNlX2hhc091dHB1dCIsIl9ZYXJnc0luc3RhbmNlX2hlbHBPcHQiLCJfWWFyZ3NJbnN0YW5jZV9pc0dsb2JhbENvbnRleHQiLCJfWWFyZ3NJbnN0YW5jZV9sb2dnZXIiLCJfWWFyZ3NJbnN0YW5jZV9vdXRwdXQiLCJfWWFyZ3NJbnN0YW5jZV9vcHRpb25zIiwiX1lhcmdzSW5zdGFuY2VfcGFyZW50UmVxdWlyZSIsIl9ZYXJnc0luc3RhbmNlX3BhcnNlckNvbmZpZyIsIl9ZYXJnc0luc3RhbmNlX3BhcnNlRm4iLCJfWWFyZ3NJbnN0YW5jZV9wYXJzZUNvbnRleHQiLCJfWWFyZ3NJbnN0YW5jZV9wa2dzIiwiX1lhcmdzSW5zdGFuY2VfcHJlc2VydmVkR3JvdXBzIiwiX1lhcmdzSW5zdGFuY2VfcHJvY2Vzc0FyZ3MiLCJfWWFyZ3NJbnN0YW5jZV9yZWNvbW1lbmRDb21tYW5kcyIsIl9ZYXJnc0luc3RhbmNlX3NoaW0iLCJfWWFyZ3NJbnN0YW5jZV9zdHJpY3QiLCJfWWFyZ3NJbnN0YW5jZV9zdHJpY3RDb21tYW5kcyIsIl9ZYXJnc0luc3RhbmNlX3N0cmljdE9wdGlvbnMiLCJfWWFyZ3NJbnN0YW5jZV91c2FnZSIsIl9ZYXJnc0luc3RhbmNlX3VzYWdlQ29uZmlnIiwiX1lhcmdzSW5zdGFuY2VfdmVyc2lvbk9wdCIsIl9ZYXJnc0luc3RhbmNlX3ZhbGlkYXRpb24iLCJfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0IiwicmVjZWl2ZXIiLCJzdGF0ZSIsImtpbmQiLCJfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0Iiwia0NvcHlEb3VibGVEYXNoIiwiU3ltYm9sIiwia0NyZWF0ZUxvZ2dlciIsImtEZWxldGVGcm9tUGFyc2VySGludE9iamVjdCIsImtFbWl0V2FybmluZyIsImtGcmVlemUiLCJrR2V0RG9sbGFyWmVybyIsImtHZXRQYXJzZXJDb25maWd1cmF0aW9uIiwia0dldFVzYWdlQ29uZmlndXJhdGlvbiIsImtHdWVzc0xvY2FsZSIsImtHdWVzc1ZlcnNpb24iLCJrUGFyc2VQb3NpdGlvbmFsTnVtYmVycyIsImtQa2dVcCIsImtQb3B1bGF0ZVBhcnNlckhpbnRBcnJheSIsImtQb3B1bGF0ZVBhcnNlckhpbnRTaW5nbGVWYWx1ZURpY3Rpb25hcnkiLCJrUG9wdWxhdGVQYXJzZXJIaW50QXJyYXlEaWN0aW9uYXJ5Iiwia1BvcHVsYXRlUGFyc2VySGludERpY3Rpb25hcnkiLCJrU2FuaXRpemVLZXkiLCJrU2V0S2V5Iiwia1VuZnJlZXplIiwia1ZhbGlkYXRlQXN5bmMiLCJrR2V0Q29tbWFuZEluc3RhbmNlIiwia0dldENvbnRleHQiLCJrR2V0SGFzT3V0cHV0Iiwia0dldExvZ2dlckluc3RhbmNlIiwia0dldFBhcnNlQ29udGV4dCIsImtHZXRVc2FnZUluc3RhbmNlIiwia0dldFZhbGlkYXRpb25JbnN0YW5jZSIsImtIYXNQYXJzZUNhbGxiYWNrIiwia0lzR2xvYmFsQ29udGV4dCIsImtQb3N0UHJvY2VzcyIsImtSZWJhc2UiLCJrUmVzZXQiLCJrUnVuWWFyZ3NQYXJzZXJBbmRFeGVjdXRlQ29tbWFuZHMiLCJrUnVuVmFsaWRhdGlvbiIsImtTZXRIYXNPdXRwdXQiLCJrVHJhY2tNYW51YWxseVNldEtleXMiLCJZYXJnc0luc3RhbmNlIiwicHJvY2Vzc0FyZ3MiLCJwYXJlbnRSZXF1aXJlIiwiYWRkSGVscE9wdCIsImFkZFNob3dIaWRkZW5PcHQiLCJzaG93SGlkZGVuIiwiY2hlY2siLCJfeWFyZ3MiLCJjb2VyY2VLZXkiLCJjb2VyY2VLZXlBbGlhc2VzIiwiYXJndktleXMiLCJjb25mbGljdHMiLCJrZXkxIiwia2V5MiIsInBhcnNlRm4iLCJjb21wbGV0aW9uIiwiY29tbWFuZERpciIsImRlbWFuZENvbW1hbmQiLCJtaW5Nc2ciLCJtYXhNc2ciLCJJbmZpbml0eSIsImRlcHJlY2F0ZU9wdGlvbiIsImRldGVjdExvY2FsZSIsImRldGVjdCIsImVwaWxvZ3VlIiwiZXhhbXBsZVBhcmFtcyIsImV4aXRQcm9jZXNzIiwicmVqZWN0IiwiZ2V0RGV0ZWN0TG9jYWxlIiwiZ2V0SGVscCIsImJ1aWxkZXJSZXNwb25zZSIsImdldFN0cmljdCIsImdldFN0cmljdENvbW1hbmRzIiwiZ2V0U3RyaWN0T3B0aW9ucyIsImdsb2JhbHMiLCJsb2NhbCIsImwiLCJnIiwiZXhpc3RpbmciLCJzZWVuIiwiaGlkZSIsImltcGxpZXMiLCJkZXByZWNhdGUiLCJyZXF1aXJlZCIsImNvbmZpZ1BhcnNlciIsInNraXBWYWxpZGF0aW9uIiwicmVxdWlyZXNBcmciLCJzaG9ydENpcmN1aXQiLCJfcGFyc2VGbiIsInRtcFBhcnNlZCIsImZpbmFsbHkiLCJwYXJzZUFzeW5jIiwicGFyc2VTeW5jIiwicGFyc2VyQ29uZmlndXJhdGlvbiIsInBrZ0NvbmYiLCJyb290UGF0aCIsImNvbmYiLCJzdXBwb3J0ZWRPcHRzIiwiZnVsbENvbW1hbmQiLCJwayIsInBhcnNlT3B0aW9uIiwicmVjb21tZW5kQ29tbWFuZHMiLCJyZWNvbW1lbmQiLCJOYU4iLCJzaG93Q29tcGxldGlvblNjcmlwdCIsImxvZyIsInNjcmlwdE5hbWUiLCJzdHJpY3QiLCJzdHJpY3RDb21tYW5kcyIsInN0cmljdE9wdGlvbnMiLCJ0ZXJtaW5hbFdpZHRoIiwidXBkYXRlU3RyaW5ncyIsInVzYWdlQ29uZmlndXJhdGlvbiIsImRlZmF1bHRWZXJzaW9uT3B0IiwiV2Vha01hcCIsIm9wdGlvbktleSIsImhpbnRLZXkiLCJoaW50IiwiZGVkdXBsaWNhdGlvbklkIiwiY29tcGxldGlvbkNvbW1hbmQiLCJleGl0RXJyb3IiLCJoYXNPdXRwdXQiLCJwYXJzZUNvbnRleHQiLCJkZWZhdWx0JDAiLCJucGF0aCIsInN0YXJ0RGlyIiwicGtnSnNvblBhdGgiLCJuYW1lcyIsIl9ub29wIiwic2luZ2xlS2V5SGFuZGxlciIsIl9lIiwiX2YiLCJfZyIsIl9oIiwiX2oiLCJfayIsIl9sIiwiX20iLCJfbyIsImdldENvbW1hbmRJbnN0YW5jZSIsImdldFBhcnNlQ29udGV4dCIsImdldFZhbGlkYXRpb25JbnN0YW5jZSIsImNhbGxlZEZyb21Db21tYW5kIiwicnVuR2xvYmFsTWlkZGxld2FyZSIsInRtcE9wdGlvbnMiLCJVc2FnZSIsIl9zIiwib2JzZXJ2ZWQiLCJtaXNzaW5nIiwiY3VzdG9tTXNncyIsImN1c3RvbU1zZyIsImNoZWNrUG9zaXRpb25hbHMiLCJjb21tYW5kS2V5cyIsInVua25vd24iLCJpc1ZhbGlkQW5kU29tZUFsaWFzSXNOb3ROZXciLCJtYXhOb25PcHREZW1hbmRlZCIsImludmFsaWQiLCJpbnZhbGlkS2V5cyIsImltcGxpZWQiLCJrZXlFeGlzdHMiLCJnZXRJbXBsaWVkIiwiaW1wbGljYXRpb25zIiwiaW1wbHlGYWlsIiwib3JpZ0tleSIsIm9yaWdWYWx1ZSIsImNvbmZsaWN0aW5nIiwiZ2V0Q29uZmxpY3RpbmciLCJwb3RlbnRpYWxDb21tYW5kcyIsInJlY29tbWVuZGVkIiwiYmVzdERpc3RhbmNlIiwiY2FuZGlkYXRlIiwiZGlzdGFuY2UiLCJWYWxpZGF0aW9uIiwiQ29tbWFuZCIsImJhc2UiLCJhcmd2UHJvbWlzZSIsImhlbHBPcHRTZXQiLCJ2ZXJzaW9uT3B0U2V0IiwiaGFuZGxlcktleXMiLCJyZXF1ZXN0Q29tcGxldGlvbnMiLCJza2lwUmVjb21tZW5kYXRpb24iLCJmaXJzdFVua25vd25Db21tYW5kIiwiY29tcGxldGlvbkFyZ3MiLCJwYXJzZUVycm9ycyIsIm5vbk9wdGlvbkNvdW50IiwicmVxdWlyZWRBcmd1bWVudHMiLCJmYWlsZWRTdHJpY3RDb21tYW5kcyIsInVua25vd25Db21tYW5kcyIsInVua25vd25Bcmd1bWVudHMiLCJsaW1pdGVkQ2hvaWNlcyIsIllhcmdzIiwiZXNtUGxhdGZvcm1TaGltIiwiaGlkZUJpbiIsImxvYWRDb25maWdGaWxlIiwiREVGQVVMVF9DT0RJTkdfVE9PTCIsIkRFRkFVTFRfQUlERVJfRVhUUkFfQVJHUyIsIkRFRkFVTFRfQ0xBVURFX0NPREVfRVhUUkFfQVJHUyIsIkRFRkFVTFRfQ09ERVhfRVhUUkFfQVJHUyIsIkRFRkFVTFRfR0VNSU5JX0VYVFJBX0FSR1MiLCJERUZBVUxUX1JFUE9NSVhfRVhUUkFfQVJHUyIsIkRFRkFVTFRfTUFYX1RFU1RfQVRURU1QVFMiLCJERUZBVUxUX05PREVfUlVOVElNRSIsInBhY2thZ2VKc29uRGlyIiwiVVJMIiwicGF0aG5hbWUiLCJleGlzdHNTeW5jIiwiZ2V0VmVyc2lvbiIsImNoZGlyIiwiaW5mbyIsIm5vZGVSdW50aW1lIiwibm9ybWFsaXplTm9kZVJ1bnRpbWUiLCJtYWluIiwiYWlkZXJFeHRyYUFyZ3MiLCJjbGF1ZGVDb2RlRXh0cmFBcmdzIiwiY29kZXhFeHRyYUFyZ3MiLCJnZW1pbmlFeHRyYUFyZ3MiLCJjb2RpbmdUb29sIiwiZHJ5UnVuIiwibm9CcmFuY2giLCJ0d29TdGFnZVBsYW5uaW5nIiwiaXNzdWVOdW1iZXIiLCJtYXhUZXN0QXR0ZW1wdHMiLCJwbGFubmluZ01vZGVsIiwicmVhc29uaW5nRWZmb3J0IiwicmVwb21peEV4dHJhQXJncyIsInRlc3RDb21tYW5kIiwicmVtb3Zl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UUFBTkEsR0FDTSxRQUFOQSxHQUNBQSxHQUFLLE9BQVVBLEdBQUssT0FDZCxRQUFOQSxHQUNBQSxHQUFLLE9BQVVBLEdBQUssT0FDZCxRQUFOQSxHQUNNLFFBQU5BLEdBQ00sUUFBTkEsR0FDTSxRQUFOQSxHQUNNLFFBQU5BLEdBQ00sUUFBTkEsR0FDQUEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFVQSxHQUFLLE9BQ3BCQSxHQUFLLE9BQVVBLEdBQUssT0FDcEJBLEdBQUssT0FBVUEsR0FBSyxPQUNwQkEsR0FBSyxPQUFXQSxHQUFLLE9BQ3JCQSxHQUFLLE9BQVdBLEdBQUssT0FDckJBLEdBQUssT0FBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ2YsU0FBTkEsR0FDTSxTQUFOQSxHQUNBQSxHQUFLLFFBQVdBLEdBQUssUUFDZixTQUFOQSxHQUNBQSxHQUFLLFFBQVdBLEdBQUssUUFDZixTQUFOQSxHQUNBQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDZixTQUFOQSxHQUNNLFNBQU5BLEdBQ00sU0FBTkEsR0FDQUEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ2YsU0FBTkEsR0FDTSxTQUFOQSxHQUNBQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNmLFNBQU5BLEdBQ0FBLEdBQUssUUFBV0EsR0FBSyxRQUNmLFNBQU5BLEdBQ0FBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNmLFNBQU5BLEdBQ00sU0FBTkEsR0FDTSxTQUFOQSxHQUNNLFNBQU5BLEdBQ0FBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ2YsU0FBTkEsR0FDQUEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNmLFNBQU5BLEdBQ00sU0FBTkEsR0FDQUEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDZixTQUFOQSxHQUNBQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ2YsU0FBTkEsR0FDQUEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssUUFDckJBLEdBQUssUUFBV0EsR0FBSyxRQUNyQkEsR0FBSyxRQUFXQSxHQUFLLFFBQ3JCQSxHQUFLLFFBQVdBLEdBQUssTUFDMUIsQ0R4VktDLENBQU9OLElBQ05DLEdDbEJOLFNBQXFCSSxHQUNwQixPQUFhLE1BQU5BLEdBQ0csTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ0FBLEdBQUssS0FBUUEsR0FBSyxLQUNsQkEsR0FBSyxLQUFRQSxHQUFLLEtBQ2xCQSxHQUFLLEtBQVFBLEdBQUssS0FDWixNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNBQSxHQUFLLEtBQVFBLEdBQUssS0FDWixNQUFOQSxHQUNBQSxHQUFLLEtBQVFBLEdBQUssS0FDWixNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ0FBLEdBQUssS0FBUUEsR0FBSyxLQUNaLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNBQSxHQUFLLEtBQVNBLEdBQUssS0FDYixNQUFOQSxHQUNBQSxHQUFLLEtBQVNBLEdBQUssS0FDYixNQUFOQSxHQUNBQSxHQUFLLEtBQVNBLEdBQUssS0FDYixNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDTSxNQUFOQSxHQUNNLE1BQU5BLEdBQ00sTUFBTkEsR0FDQUEsR0FBSyxLQUFTQSxHQUFLLEtBQ2IsTUFBTkEsR0FDTSxNQUFOQSxHQUNBQSxHQUFLLEtBQVNBLEdBQUssS0FDYixNQUFOQSxHQUNNLE1BQU5BLEdBQ0FBLEdBQUssS0FBU0EsR0FBSyxLQUNuQkEsR0FBSyxLQUFTQSxHQUFLLEtBQ25CQSxHQUFLLEtBQVNBLEdBQUssS0FDbkJBLEdBQUssS0FBU0EsR0FBSyxLQUNuQkEsR0FBSyxLQUFTQSxHQUFLLEtBQ2IsT0FBTkEsR0FDQUEsR0FBSyxNQUFTQSxHQUFLLE1BQ2IsT0FBTkEsR0FDTSxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDZCxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDcEJBLEdBQUssTUFBVUEsR0FBSyxNQUNkLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDQUEsR0FBSyxNQUFVQSxHQUFLLE1BQ2QsT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ0FBLEdBQUssTUFBVUEsR0FBSyxNQUNwQkEsR0FBSyxNQUFVQSxHQUFLLE1BQ3BCQSxHQUFLLE1BQVVBLEdBQUssTUFDZCxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDZCxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDQUEsR0FBSyxNQUFVQSxHQUFLLE1BQ2QsT0FBTkEsR0FDTSxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDZCxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDZCxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDZCxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDcEJBLEdBQUssTUFBVUEsR0FBSyxNQUNwQkEsR0FBSyxNQUFVQSxHQUFLLE1BQ3BCQSxHQUFLLE1BQVVBLEdBQUssTUFDcEJBLEdBQUssTUFBVUEsR0FBSyxNQUNkLE9BQU5BLEdBQ00sT0FBTkEsR0FDQUEsR0FBSyxNQUFVQSxHQUFLLE1BQ2QsT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDZCxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDcEJBLEdBQUssTUFBVUEsR0FBSyxNQUNkLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDcEJBLEdBQUssTUFBVUEsR0FBSyxNQUNkLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNNLE9BQU5BLEdBQ00sT0FBTkEsR0FDTSxPQUFOQSxHQUNBQSxHQUFLLE1BQVVBLEdBQUssTUFDcEJBLEdBQUss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Q2JwTixLQUFNLFdBRVBxSyxPQUFPLFlBQWEsQ0FDbkJuUyxNQUFPLElBQ1BrVixZQUFhLHlFQUNicE4sS0FBTSxVQUNOdEgsU0FBUyxJQUVWMlIsT0FBTyxlQUFnQixDQUN0QitDLFlBQWEsMkNBQ2JwTixLQUFNLFNBQ044WCxRQUFTLENBQUMsT0FBUSxNQUFPLE1BQU8sUUFDaENwZixRQUFTOHlCLElBR1ZuaEIsT0FBTyxjQUFlLENBQ3JCblMsTUFBTyxJQUNQa1YsWUFBYSxzQ0FDYnBOLEtBQU0sV0FHUHZJLFFBR0gsV0FDRSxJQUFJZzBCLGNBQTZCdmxCLEtBQU8xRSxFQUFLNEUsUUFBUSxJQUFJc2xCLGdCQUFnQnA0QixLQUFLcTRCLFVBQzlFLE1BQVExcEIsRUFBRzJwQixXQUFXcHFCLEVBQUtoWSxLQUFLaWlDLEVBQWdCLGtCQUM5Q0EsRUFBaUJqcUIsRUFBSzRFLFFBQVFxbEIsR0FFaEMsT0FBT2hxQixLQUFLMUosTUFBTWtLLEVBQUdQLGFBQWFGLEVBQUtoWSxLQUFLaWlDLEVBQWdCLGdCQUFpQixTQUFTaDBCLE9BQ3hGLENBVFdvMEIsSUFDUnBXLE9BQU8zWixLQVVOQSxHQUFLLGlCQUNQM0UsRUFBUTIwQixNQUFNaHdCLEdBQUssZ0JBQ25CMk4sUUFBUXNpQixLQUFLLGlDQUFpQzUwQixFQUFReUosVUFJeEQsTUFBTW9yQixHQUFpQ0MsRUFBcUJud0IsR0FBSyx1QkFFM0Rvd0IsRUFBSyxDQUNUQyxlQUFnQnJ3QixHQUFLLG9CQUNyQnN3QixvQkFBcUJ0d0IsR0FBSywwQkFDMUJ1d0IsZUFBZ0J2d0IsR0FBSyxvQkFDckJ3d0IsZ0JBQWlCeHdCLEdBQUsscUJBQ3RCeXdCLFdBQVl6d0IsR0FBSyxlQUNqQjB3QixPQUFRMXdCLEdBQUssV0FDYjJ3QixTQUFVM3dCLEdBQUssYUFDZmt3QixlQUNBVSxpQkFBa0I1d0IsR0FBSyx1QkFDdkI2d0IsWUFBYTd3QixHQUFLLGdCQUNsQjh3QixnQkFBaUI5d0IsR0FBSyxxQkFDdEIrd0IsY0FBZS93QixHQUFLLGtCQUNwQmd4QixnQkFBaUJoeEIsR0FBSyxvQkFDdEJpeEIsaUJBQWtCanhCLEdBQUssc0JBQ3ZCa3hCLFlBQWFseEIsR0FBSyxnQkFDbEJteEIsY0FBZW54QixHQUFLIiwieF9nb29nbGVfaWdub3JlTGlzdCI6WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzldfQ==
1
+ import e from"node:fs";import o from"node:path";import t from"node:process";import i from"yargs";import{hideBin as a}from"yargs/helpers";import{l as n,D as r,c as s,d as p,e as d,f as m,g as l,b as g,a as c,n as u,m as f}from"./main-DA3u-sLa.js";import"yaml";import"ansis";import"dotenv";import"node:child_process";import"@octokit/graphql";import"@octokit/rest";import"@ai-sdk/amazon-bedrock";import"@ai-sdk/anthropic";import"@ai-sdk/azure";import"@ai-sdk/google";import"@ai-sdk/google-vertex";import"@ai-sdk/openai";import"@ai-sdk/xai";import"@openrouter/ai-sdk-provider";import"ai";import"ai-v4";import"ollama-ai-provider-v2";const h=await i(a(t.argv)).config(n()).option("issue-number",{alias:"i",description:"GitHub issue number to process",type:"number",demandOption:!0}).option("planning-model",{alias:"m",description:"LLM for planning code changes. Must use llmlite format: provider/model (e.g., openai/gpt-4.1, azure/gpt-4.1, gemini/gemini-2.5-pro, anthropic/claude-4-sonnet-latest, bedrock/us.anthropic.claude-sonnet-4-20250514-v1:0, vertex/gemini-2.5-pro, xai/grok-4)",type:"string"}).option("two-staged-planning",{alias:"p",description:"Enable two-staged planning: first select relevant files, then generate detailed implementation plans (increases LLM cost but improves code quality)",type:"boolean",default:!0}).option("reasoning-effort",{alias:"e",description:"Constrains effort on reasoning for planning models. Supported values are low, medium, and high.",type:"string",choices:["low","medium","high"]}).option("coding-tool",{alias:"c",description:"Coding tool to use for making changes",type:"string",choices:["aider","claude-code","codex-cli","gemini-cli"],default:r}).option("aider-extra-args",{alias:"a",description:'Additional arguments to pass to Aider ("--yes-always --no-check-update --no-show-release-notes" is always applied)',type:"string",default:s}).option("claude-code-extra-args",{description:'Additional arguments to pass to Claude Code ("--dangerously-skip-permissions" is always applied, "--print" is applied only in CI)',type:"string",default:p}).option("codex-extra-args",{description:"Additional arguments to pass to Codex CLI (nothing is always applied)",type:"string",default:d}).option("gemini-extra-args",{description:'Additional arguments to pass to Gemini CLI ("--yolo" is always applied)',type:"string",default:m}).option("repomix-extra-args",{alias:"r",description:"Additional arguments for repomix when generating context",type:"string",default:l}).option("test-command",{alias:"t",description:"Command to run after the coding tool applies changes. If it fails, the assistant will try to fix it.",type:"string"}).option("max-test-attempts",{description:"Maximum number of attempts to fix test failures",type:"number",default:g}).option("dry-run",{alias:"d",description:"Run without making actual changes (no branch creation, no PR)",type:"boolean",default:!1}).option("remove-pattern",{description:"RegExp pattern to remove from issue and PR descriptions",type:"string"}).option("no-branch",{alias:"n",description:"Do not create a new branch, commit changes directly to the base branch",type:"boolean",default:!1}).option("node-runtime",{description:"Node.js runtime to use for running tools",type:"string",choices:["node","bun","npx","bunx"],default:c}).option("working-dir",{alias:"w",description:"Working directory path for commands",type:"string"}).version(function(){let t=import.meta.dir||o.dirname(new URL(import.meta.url).pathname);for(;!e.existsSync(o.join(t,"package.json"));)t=o.dirname(t);return JSON.parse(e.readFileSync(o.join(t,"package.json"),"utf8")).version}()).help().argv;h["working-dir"]&&(t.chdir(h["working-dir"]),console.info(`Changed working directory to: ${t.cwd()}`));const x=u(h["node-runtime"]);await f({aiderExtraArgs:h["aider-extra-args"],claudeCodeExtraArgs:h["claude-code-extra-args"],codexExtraArgs:h["codex-extra-args"],geminiExtraArgs:h["gemini-extra-args"],codingTool:h["coding-tool"],dryRun:h["dry-run"],noBranch:h["no-branch"],nodeRuntime:x,twoStagePlanning:h["two-staged-planning"],issueNumber:h["issue-number"],maxTestAttempts:h["max-test-attempts"],planningModel:h["planning-model"],reasoningEffort:h["reasoning-effort"],repomixExtraArgs:h["repomix-extra-args"],testCommand:h["test-command"],removePattern:h["remove-pattern"]});
2
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgcHJvY2VzcyBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHlhcmdzIGZyb20gJ3lhcmdzJztcbmltcG9ydCB7IGhpZGVCaW4gfSBmcm9tICd5YXJncy9oZWxwZXJzJztcbmltcG9ydCB7IGxvYWRDb25maWdGaWxlIH0gZnJvbSAnLi9jb25maWcuanMnO1xuaW1wb3J0IHtcbiAgREVGQVVMVF9BSURFUl9FWFRSQV9BUkdTLFxuICBERUZBVUxUX0NMQVVERV9DT0RFX0VYVFJBX0FSR1MsXG4gIERFRkFVTFRfQ09ERVhfRVhUUkFfQVJHUyxcbiAgREVGQVVMVF9DT0RJTkdfVE9PTCxcbiAgREVGQVVMVF9HRU1JTklfRVhUUkFfQVJHUyxcbiAgREVGQVVMVF9NQVhfVEVTVF9BVFRFTVBUUyxcbiAgREVGQVVMVF9OT0RFX1JVTlRJTUUsXG4gIERFRkFVTFRfUkVQT01JWF9FWFRSQV9BUkdTLFxufSBmcm9tICcuL2RlZmF1bHRPcHRpb25zLmpzJztcbmltcG9ydCB7IG1haW4gfSBmcm9tICcuL21haW4uanMnO1xuaW1wb3J0IHsgbm9ybWFsaXplTm9kZVJ1bnRpbWUgfSBmcm9tICcuL3NwYXduLmpzJztcbmltcG9ydCB0eXBlIHsgQ29kaW5nVG9vbCwgTm9kZVJ1bnRpbWUsIE5vZGVSdW50aW1lQWN0dWFsLCBSZWFzb25pbmdFZmZvcnQgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuLy8gUGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB1c2luZyB5YXJncyAoQ0xJIG9wdGlvbnMgb3ZlcnJpZGUgY29uZmlnKVxuY29uc3QgYXJndiA9IGF3YWl0IHlhcmdzKGhpZGVCaW4ocHJvY2Vzcy5hcmd2KSlcbiAgLmNvbmZpZyhsb2FkQ29uZmlnRmlsZSgpKVxuICAvLyBPcHRpb25zIHNhbWUgd2l0aCB0aGUgR2l0SHViIEFjdGlvbnMgd29ya2Zsb3dcbiAgLm9wdGlvbignaXNzdWUtbnVtYmVyJywge1xuICAgIGFsaWFzOiAnaScsXG4gICAgZGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIHRvIHByb2Nlc3MnLFxuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlbWFuZE9wdGlvbjogdHJ1ZSxcbiAgfSlcbiAgLm9wdGlvbigncGxhbm5pbmctbW9kZWwnLCB7XG4gICAgYWxpYXM6ICdtJyxcbiAgICBkZXNjcmlwdGlvbjpcbiAgICAgICdMTE0gZm9yIHBsYW5uaW5nIGNvZGUgY2hhbmdlcy4gTXVzdCB1c2UgbGxtbGl0ZSBmb3JtYXQ6IHByb3ZpZGVyL21vZGVsIChlLmcuLCBvcGVuYWkvZ3B0LTQuMSwgYXp1cmUvZ3B0LTQuMSwgZ2VtaW5pL2dlbWluaS0yLjUtcHJvLCBhbnRocm9waWMvY2xhdWRlLTQtc29ubmV0LWxhdGVzdCwgYmVkcm9jay91cy5hbnRocm9waWMuY2xhdWRlLXNvbm5ldC00LTIwMjUwNTE0LXYxOjAsIHZlcnRleC9nZW1pbmktMi41LXBybywgeGFpL2dyb2stNCknLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICB9KVxuICAub3B0aW9uKCd0d28tc3RhZ2VkLXBsYW5uaW5nJywge1xuICAgIGFsaWFzOiAncCcsXG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnRW5hYmxlIHR3by1zdGFnZWQgcGxhbm5pbmc6IGZpcnN0IHNlbGVjdCByZWxldmFudCBmaWxlcywgdGhlbiBnZW5lcmF0ZSBkZXRhaWxlZCBpbXBsZW1lbnRhdGlvbiBwbGFucyAoaW5jcmVhc2VzIExMTSBjb3N0IGJ1dCBpbXByb3ZlcyBjb2RlIHF1YWxpdHkpJyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdDogdHJ1ZSxcbiAgfSlcbiAgLm9wdGlvbigncmVhc29uaW5nLWVmZm9ydCcsIHtcbiAgICBhbGlhczogJ2UnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ29uc3RyYWlucyBlZmZvcnQgb24gcmVhc29uaW5nIGZvciBwbGFubmluZyBtb2RlbHMuIFN1cHBvcnRlZCB2YWx1ZXMgYXJlIGxvdywgbWVkaXVtLCBhbmQgaGlnaC4nLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGNob2ljZXM6IFsnbG93JywgJ21lZGl1bScsICdoaWdoJ10sXG4gIH0pXG4gIC5vcHRpb24oJ2NvZGluZy10b29sJywge1xuICAgIGFsaWFzOiAnYycsXG4gICAgZGVzY3JpcHRpb246ICdDb2RpbmcgdG9vbCB0byB1c2UgZm9yIG1ha2luZyBjaGFuZ2VzJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBjaG9pY2VzOiBbJ2FpZGVyJywgJ2NsYXVkZS1jb2RlJywgJ2NvZGV4LWNsaScsICdnZW1pbmktY2xpJ10sXG4gICAgZGVmYXVsdDogREVGQVVMVF9DT0RJTkdfVE9PTCxcbiAgfSlcbiAgLm9wdGlvbignYWlkZXItZXh0cmEtYXJncycsIHtcbiAgICBhbGlhczogJ2EnLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgJ0FkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHBhc3MgdG8gQWlkZXIgKFwiLS15ZXMtYWx3YXlzIC0tbm8tY2hlY2stdXBkYXRlIC0tbm8tc2hvdy1yZWxlYXNlLW5vdGVzXCIgaXMgYWx3YXlzIGFwcGxpZWQpJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBkZWZhdWx0OiBERUZBVUxUX0FJREVSX0VYVFJBX0FSR1MsXG4gIH0pXG4gIC5vcHRpb24oJ2NsYXVkZS1jb2RlLWV4dHJhLWFyZ3MnLCB7XG4gICAgZGVzY3JpcHRpb246XG4gICAgICAnQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byBDbGF1ZGUgQ29kZSAoXCItLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnNcIiBpcyBhbHdheXMgYXBwbGllZCwgXCItLXByaW50XCIgaXMgYXBwbGllZCBvbmx5IGluIENJKScsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgZGVmYXVsdDogREVGQVVMVF9DTEFVREVfQ09ERV9FWFRSQV9BUkdTLFxuICB9KVxuICAub3B0aW9uKCdjb2RleC1leHRyYS1hcmdzJywge1xuICAgIGRlc2NyaXB0aW9uOiAnQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byBDb2RleCBDTEkgKG5vdGhpbmcgaXMgYWx3YXlzIGFwcGxpZWQpJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICBkZWZhdWx0OiBERUZBVUxUX0NPREVYX0VYVFJBX0FSR1MsXG4gIH0pXG4gIC5vcHRpb24oJ2dlbWluaS1leHRyYS1hcmdzJywge1xuICAgIGRlc2NyaXB0aW9uOiAnQWRkaXRpb25hbCBhcmd1bWVudHMgdG8gcGFzcyB0byBHZW1pbmkgQ0xJIChcIi0teW9sb1wiIGlzIGFsd2F5cyBhcHBsaWVkKScsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgZGVmYXVsdDogREVGQVVMVF9HRU1JTklfRVhUUkFfQVJHUyxcbiAgfSlcbiAgLm9wdGlvbigncmVwb21peC1leHRyYS1hcmdzJywge1xuICAgIGFsaWFzOiAncicsXG4gICAgZGVzY3JpcHRpb246ICdBZGRpdGlvbmFsIGFyZ3VtZW50cyBmb3IgcmVwb21peCB3aGVuIGdlbmVyYXRpbmcgY29udGV4dCcsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gICAgZGVmYXVsdDogREVGQVVMVF9SRVBPTUlYX0VYVFJBX0FSR1MsXG4gIH0pXG4gIC5vcHRpb24oJ3Rlc3QtY29tbWFuZCcsIHtcbiAgICBhbGlhczogJ3QnLFxuICAgIGRlc2NyaXB0aW9uOiAnQ29tbWFuZCB0byBydW4gYWZ0ZXIgdGhlIGNvZGluZyB0b29sIGFwcGxpZXMgY2hhbmdlcy4gSWYgaXQgZmFpbHMsIHRoZSBhc3Npc3RhbnQgd2lsbCB0cnkgdG8gZml4IGl0LicsXG4gICAgdHlwZTogJ3N0cmluZycsXG4gIH0pXG4gIC5vcHRpb24oJ21heC10ZXN0LWF0dGVtcHRzJywge1xuICAgIGRlc2NyaXB0aW9uOiAnTWF4aW11bSBudW1iZXIgb2YgYXR0ZW1wdHMgdG8gZml4IHRlc3QgZmFpbHVyZXMnLFxuICAgIHR5cGU6ICdudW1iZXInLFxuICAgIGRlZmF1bHQ6IERFRkFVTFRfTUFYX1RFU1RfQVRURU1QVFMsXG4gIH0pXG4gIC5vcHRpb24oJ2RyeS1ydW4nLCB7XG4gICAgYWxpYXM6ICdkJyxcbiAgICBkZXNjcmlwdGlvbjogJ1J1biB3aXRob3V0IG1ha2luZyBhY3R1YWwgY2hhbmdlcyAobm8gYnJhbmNoIGNyZWF0aW9uLCBubyBQUiknLFxuICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICBkZWZhdWx0OiBmYWxzZSxcbiAgfSlcbiAgLm9wdGlvbigncmVtb3ZlLXBhdHRlcm4nLCB7XG4gICAgZGVzY3JpcHRpb246ICdSZWdFeHAgcGF0dGVybiB0byByZW1vdmUgZnJvbSBpc3N1ZSBhbmQgUFIgZGVzY3JpcHRpb25zJyxcbiAgICB0eXBlOiAnc3RyaW5nJyxcbiAgfSlcbiAgLm9wdGlvbignbm8tYnJhbmNoJywge1xuICAgIGFsaWFzOiAnbicsXG4gICAgZGVzY3JpcHRpb246ICdEbyBub3QgY3JlYXRlIGEgbmV3IGJyYW5jaCwgY29tbWl0IGNoYW5nZXMgZGlyZWN0bHkgdG8gdGhlIGJhc2UgYnJhbmNoJyxcbiAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgZGVmYXVsdDogZmFsc2UsXG4gIH0pXG4gIC5vcHRpb24oJ25vZGUtcnVudGltZScsIHtcbiAgICBkZXNjcmlwdGlvbjogJ05vZGUuanMgcnVudGltZSB0byB1c2UgZm9yIHJ1bm5pbmcgdG9vbHMnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGNob2ljZXM6IFsnbm9kZScsICdidW4nLCAnbnB4JywgJ2J1bngnXSxcbiAgICBkZWZhdWx0OiBERUZBVUxUX05PREVfUlVOVElNRSxcbiAgfSlcbiAgLy8gT3B0aW9ucyBvbmx5IGZvciB0aGlzIHN0YW5kYWxvbmUgdG9vbCAtLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAub3B0aW9uKCd3b3JraW5nLWRpcicsIHtcbiAgICBhbGlhczogJ3cnLFxuICAgIGRlc2NyaXB0aW9uOiAnV29ya2luZyBkaXJlY3RvcnkgcGF0aCBmb3IgY29tbWFuZHMnLFxuICAgIHR5cGU6ICdzdHJpbmcnLFxuICB9KVxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC52ZXJzaW9uKGdldFZlcnNpb24oKSlcbiAgLmhlbHAoKS5hcmd2O1xuXG5mdW5jdGlvbiBnZXRWZXJzaW9uKCk6IHN0cmluZyB7XG4gIGxldCBwYWNrYWdlSnNvbkRpciA9IGltcG9ydC5tZXRhLmRpciB8fCBwYXRoLmRpcm5hbWUobmV3IFVSTChpbXBvcnQubWV0YS51cmwpLnBhdGhuYW1lKTtcbiAgd2hpbGUgKCFmcy5leGlzdHNTeW5jKHBhdGguam9pbihwYWNrYWdlSnNvbkRpciwgJ3BhY2thZ2UuanNvbicpKSkge1xuICAgIHBhY2thZ2VKc29uRGlyID0gcGF0aC5kaXJuYW1lKHBhY2thZ2VKc29uRGlyKTtcbiAgfVxuICByZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGF0aC5qb2luKHBhY2thZ2VKc29uRGlyLCAncGFja2FnZS5qc29uJyksICd1dGY4JykpLnZlcnNpb247XG59XG5cbmlmIChhcmd2Wyd3b3JraW5nLWRpciddKSB7XG4gIHByb2Nlc3MuY2hkaXIoYXJndlsnd29ya2luZy1kaXInXSk7XG4gIGNvbnNvbGUuaW5mbyhgQ2hhbmdlZCB3b3JraW5nIGRpcmVjdG9yeSB0bzogJHtwcm9jZXNzLmN3ZCgpfWApO1xufVxuXG4vLyBOb3JtYWxpemUgdGhlIHJ1bnRpbWUgdmFsdWUgKGNvbnZlcnQgYWxpYXNlcyB0byBhY3R1YWwgY29tbWFuZHMpXG5jb25zdCBub2RlUnVudGltZTogTm9kZVJ1bnRpbWVBY3R1YWwgPSBub3JtYWxpemVOb2RlUnVudGltZShhcmd2Wydub2RlLXJ1bnRpbWUnXSBhcyBOb2RlUnVudGltZSk7XG5cbmF3YWl0IG1haW4oe1xuICBhaWRlckV4dHJhQXJnczogYXJndlsnYWlkZXItZXh0cmEtYXJncyddLFxuICBjbGF1ZGVDb2RlRXh0cmFBcmdzOiBhcmd2WydjbGF1ZGUtY29kZS1leHRyYS1hcmdzJ10sXG4gIGNvZGV4RXh0cmFBcmdzOiBhcmd2Wydjb2RleC1leHRyYS1hcmdzJ10sXG4gIGdlbWluaUV4dHJhQXJnczogYXJndlsnZ2VtaW5pLWV4dHJhLWFyZ3MnXSxcbiAgY29kaW5nVG9vbDogYXJndlsnY29kaW5nLXRvb2wnXSBhcyBDb2RpbmdUb29sLFxuICBkcnlSdW46IGFyZ3ZbJ2RyeS1ydW4nXSxcbiAgbm9CcmFuY2g6IGFyZ3ZbJ25vLWJyYW5jaCddLFxuICBub2RlUnVudGltZSxcbiAgdHdvU3RhZ2VQbGFubmluZzogYXJndlsndHdvLXN0YWdlZC1wbGFubmluZyddLFxuICBpc3N1ZU51bWJlcjogYXJndlsnaXNzdWUtbnVtYmVyJ10sXG4gIG1heFRlc3RBdHRlbXB0czogYXJndlsnbWF4LXRlc3QtYXR0ZW1wdHMnXSxcbiAgcGxhbm5pbmdNb2RlbDogYXJndlsncGxhbm5pbmctbW9kZWwnXSxcbiAgcmVhc29uaW5nRWZmb3J0OiBhcmd2WydyZWFzb25pbmctZWZmb3J0J10gYXMgUmVhc29uaW5nRWZmb3J0LFxuICByZXBvbWl4RXh0cmFBcmdzOiBhcmd2WydyZXBvbWl4LWV4dHJhLWFyZ3MnXSxcbiAgdGVzdENvbW1hbmQ6IGFyZ3ZbJ3Rlc3QtY29tbWFuZCddLFxuICByZW1vdmVQYXR0ZXJuOiBhcmd2WydyZW1vdmUtcGF0dGVybiddLFxufSk7XG4iXSwibmFtZXMiOlsiYXJndiIsInlhcmdzIiwiaGlkZUJpbiIsInByb2Nlc3MiLCJjb25maWciLCJsb2FkQ29uZmlnRmlsZSIsIm9wdGlvbiIsImFsaWFzIiwiZGVzY3JpcHRpb24iLCJ0eXBlIiwiZGVtYW5kT3B0aW9uIiwiZGVmYXVsdCIsImNob2ljZXMiLCJERUZBVUxUX0NPRElOR19UT09MIiwiREVGQVVMVF9BSURFUl9FWFRSQV9BUkdTIiwiREVGQVVMVF9DTEFVREVfQ09ERV9FWFRSQV9BUkdTIiwiREVGQVVMVF9DT0RFWF9FWFRSQV9BUkdTIiwiREVGQVVMVF9HRU1JTklfRVhUUkFfQVJHUyIsIkRFRkFVTFRfUkVQT01JWF9FWFRSQV9BUkdTIiwiREVGQVVMVF9NQVhfVEVTVF9BVFRFTVBUUyIsIkRFRkFVTFRfTk9ERV9SVU5USU1FIiwidmVyc2lvbiIsInBhY2thZ2VKc29uRGlyIiwiZGlyIiwicGF0aCIsImRpcm5hbWUiLCJVUkwiLCJ1cmwiLCJwYXRobmFtZSIsImZzIiwiZXhpc3RzU3luYyIsImpvaW4iLCJKU09OIiwicGFyc2UiLCJyZWFkRmlsZVN5bmMiLCJnZXRWZXJzaW9uIiwiaGVscCIsImNoZGlyIiwiY29uc29sZSIsImluZm8iLCJjd2QiLCJub2RlUnVudGltZSIsIm5vcm1hbGl6ZU5vZGVSdW50aW1lIiwibWFpbiIsImFpZGVyRXh0cmFBcmdzIiwiY2xhdWRlQ29kZUV4dHJhQXJncyIsImNvZGV4RXh0cmFBcmdzIiwiZ2VtaW5pRXh0cmFBcmdzIiwiY29kaW5nVG9vbCIsImRyeVJ1biIsIm5vQnJhbmNoIiwidHdvU3RhZ2VQbGFubmluZyIsImlzc3VlTnVtYmVyIiwibWF4VGVzdEF0dGVtcHRzIiwicGxhbm5pbmdNb2RlbCIsInJlYXNvbmluZ0VmZm9ydCIsInJlcG9taXhFeHRyYUFyZ3MiLCJ0ZXN0Q29tbWFuZCIsInJlbW92ZVBhdHRlcm4iXSwibWFwcGluZ3MiOiJvbkJBcUJBLE1BQU1BLFFBQWFDLEVBQU1DLEVBQVFDLEVBQVFILE9BQ3RDSSxPQUFPQyxLQUVQQyxPQUFPLGVBQWdCLENBQ3RCQyxNQUFPLElBQ1BDLFlBQWEsaUNBQ2JDLEtBQU0sU0FDTkMsY0FBYyxJQUVmSixPQUFPLGlCQUFrQixDQUN4QkMsTUFBTyxJQUNQQyxZQUNFLCtQQUNGQyxLQUFNLFdBRVBILE9BQU8sc0JBQXVCLENBQzdCQyxNQUFPLElBQ1BDLFlBQ0Usc0pBQ0ZDLEtBQU0sVUFDTkUsU0FBUyxJQUVWTCxPQUFPLG1CQUFvQixDQUMxQkMsTUFBTyxJQUNQQyxZQUFhLGtHQUNiQyxLQUFNLFNBQ05HLFFBQVMsQ0FBQyxNQUFPLFNBQVUsVUFFNUJOLE9BQU8sY0FBZSxDQUNyQkMsTUFBTyxJQUNQQyxZQUFhLHdDQUNiQyxLQUFNLFNBQ05HLFFBQVMsQ0FBQyxRQUFTLGNBQWUsWUFBYSxjQUMvQ0QsUUFBU0UsSUFFVlAsT0FBTyxtQkFBb0IsQ0FDMUJDLE1BQU8sSUFDUEMsWUFDRSxxSEFDRkMsS0FBTSxTQUNORSxRQUFTRyxJQUVWUixPQUFPLHlCQUEwQixDQUNoQ0UsWUFDRSxvSUFDRkMsS0FBTSxTQUNORSxRQUFTSSxJQUVWVCxPQUFPLG1CQUFvQixDQUMxQkUsWUFBYSx3RUFDYkMsS0FBTSxTQUNORSxRQUFTSyxJQUVWVixPQUFPLG9CQUFxQixDQUMzQkUsWUFBYSwwRUFDYkMsS0FBTSxTQUNORSxRQUFTTSxJQUVWWCxPQUFPLHFCQUFzQixDQUM1QkMsTUFBTyxJQUNQQyxZQUFhLDJEQUNiQyxLQUFNLFNBQ05FLFFBQVNPLElBRVZaLE9BQU8sZUFBZ0IsQ0FDdEJDLE1BQU8sSUFDUEMsWUFBYSx1R0FDYkMsS0FBTSxXQUVQSCxPQUFPLG9CQUFxQixDQUMzQkUsWUFBYSxrREFDYkMsS0FBTSxTQUNORSxRQUFTUSxJQUVWYixPQUFPLFVBQVcsQ0FDakJDLE1BQU8sSUFDUEMsWUFBYSxnRUFDYkMsS0FBTSxVQUNORSxTQUFTLElBRVZMLE9BQU8saUJBQWtCLENBQ3hCRSxZQUFhLDBEQUNiQyxLQUFNLFdBRVBILE9BQU8sWUFBYSxDQUNuQkMsTUFBTyxJQUNQQyxZQUFhLHlFQUNiQyxLQUFNLFVBQ05FLFNBQVMsSUFFVkwsT0FBTyxlQUFnQixDQUN0QkUsWUFBYSwyQ0FDYkMsS0FBTSxTQUNORyxRQUFTLENBQUMsT0FBUSxNQUFPLE1BQU8sUUFDaENELFFBQVNTLElBR1ZkLE9BQU8sY0FBZSxDQUNyQkMsTUFBTyxJQUNQQyxZQUFhLHNDQUNiQyxLQUFNLFdBR1BZLFFBR0gsV0FDRSxJQUFJQyxjQUE2QkMsS0FBT0MsRUFBS0MsUUFBUSxJQUFJQyxnQkFBZ0JDLEtBQUtDLFVBQzlFLE1BQVFDLEVBQUdDLFdBQVdOLEVBQUtPLEtBQUtULEVBQWdCLGtCQUM5Q0EsRUFBaUJFLEVBQUtDLFFBQVFILEdBRWhDLE9BQU9VLEtBQUtDLE1BQU1KLEVBQUdLLGFBQWFWLEVBQUtPLEtBQUtULEVBQWdCLGdCQUFpQixTQUFTRCxPQUN4RixDQVRXYyxJQUNSQyxPQUFPcEMsS0FVTkEsRUFBSyxpQkFDUEcsRUFBUWtDLE1BQU1yQyxFQUFLLGdCQUNuQnNDLFFBQVFDLEtBQUssaUNBQWlDcEMsRUFBUXFDLFVBSXhELE1BQU1DLEVBQWlDQyxFQUFxQjFDLEVBQUssdUJBRTNEMkMsRUFBSyxDQUNUQyxlQUFnQjVDLEVBQUssb0JBQ3JCNkMsb0JBQXFCN0MsRUFBSywwQkFDMUI4QyxlQUFnQjlDLEVBQUssb0JBQ3JCK0MsZ0JBQWlCL0MsRUFBSyxxQkFDdEJnRCxXQUFZaEQsRUFBSyxlQUNqQmlELE9BQVFqRCxFQUFLLFdBQ2JrRCxTQUFVbEQsRUFBSyxhQUNmeUMsY0FDQVUsaUJBQWtCbkQsRUFBSyx1QkFDdkJvRCxZQUFhcEQsRUFBSyxnQkFDbEJxRCxnQkFBaUJyRCxFQUFLLHFCQUN0QnNELGNBQWV0RCxFQUFLLGtCQUNwQnVELGdCQUFpQnZELEVBQUssb0JBQ3RCd0QsaUJBQWtCeEQsRUFBSyxzQkFDdkJ5RCxZQUFhekQsRUFBSyxnQkFDbEIwRCxjQUFlMUQsRUFBSyJ9