RevelaOS/dist/flow.bundle.js
2023-10-15 23:53:41 +01:00

3 lines
No EOL
1.7 MiB

/*! For license information please see flow.bundle.js.LICENSE.txt */
(()=>{var e,t,r,n,a={935:(e,t,r)=>{"use strict";r.d(t,{Z:()=>s});var n=r(1864),a=r.n(n),o=r(352),i=r.n(o)()(a());i.push([e.id,"@import url(https://unpkg.com/boxicons@2.1.4/css/boxicons.min.css);"]),i.push([e.id,"/* Satoshi */\n@font-face {\n font-family: 'Satoshi';\n src: url('//cdn.fontshare.com/wf/NWBQYJIM7GCZ5XWD7D26ARB3VDY55ZRT/K63EV2KZIGKLE7RANQ2U42S6SVHU5RJ7/X6XYTKIVDUW7GZTZPZNN4EUM5KH54KHF.woff2') format('woff2'), url('//cdn.fontshare.com/wf/NWBQYJIM7GCZ5XWD7D26ARB3VDY55ZRT/K63EV2KZIGKLE7RANQ2U42S6SVHU5RJ7/X6XYTKIVDUW7GZTZPZNN4EUM5KH54KHF.woff') format('woff'), url('//cdn.fontshare.com/wf/NWBQYJIM7GCZ5XWD7D26ARB3VDY55ZRT/K63EV2KZIGKLE7RANQ2U42S6SVHU5RJ7/X6XYTKIVDUW7GZTZPZNN4EUM5KH54KHF.ttf') format('truetype');\n font-weight: 300 900;\n font-display: swap;\n font-style: normal;\n}\n@font-face {\n font-family: 'Satoshi';\n src: url('//cdn.fontshare.com/wf/3JZIFUW7KLFSPLVCIUI2DLGNIER6IFCX/MMP4RUF5LYGUAZS3DCJC3GJ6F6SAGKSN/E3NEPGEAHYCHR37DSBXHV33XCYYRE2CY.woff2') format('woff2'), url('//cdn.fontshare.com/wf/3JZIFUW7KLFSPLVCIUI2DLGNIER6IFCX/MMP4RUF5LYGUAZS3DCJC3GJ6F6SAGKSN/E3NEPGEAHYCHR37DSBXHV33XCYYRE2CY.woff') format('woff'), url('//cdn.fontshare.com/wf/3JZIFUW7KLFSPLVCIUI2DLGNIER6IFCX/MMP4RUF5LYGUAZS3DCJC3GJ6F6SAGKSN/E3NEPGEAHYCHR37DSBXHV33XCYYRE2CY.ttf') format('truetype');\n font-weight: 300 900;\n font-display: swap;\n font-style: italic;\n}\n:root {\n --text: #cdd6f4;\n --surface-2: #585b70;\n --surface-1: #45475a;\n --surface-0: #313244;\n --base: #1e1e2e;\n --mantle: #181825;\n --crust: #11111b;\n}\nbody,\nhtml {\n background-color: var(--crust);\n width: 100vw;\n height: 100vh;\n margin: 10px;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n}\n*::-webkit-scrollbar {\n display: none;\n}\n* {\n -ms-overflow-style: none;\n scrollbar-width: none;\n font-family: 'Satoshi', sans-serif;\n font-weight: 600;\n color: var(--text);\n}\n.bx {\n font-size: 25px;\n}\ntoolbar {\n width: 100%;\n display: flex;\n gap: 10px;\n margin-bottom: 10px;\n justify-content: center;\n}\ntoolbar > div {\n background: var(--base);\n padding: 5px;\n border-radius: 5px;\n box-shadow: 0 10px 10px rgba(0, 0, 0, 0.1), 0 0px 10px rgba(0, 0, 0, 0.1);\n height: 40px!important;\n display: flex;\n align-items: center;\n}\ntoolbar > div app {\n display: flex;\n gap: 10px;\n align-items: center;\n}\ntoolbar > div app img {\n aspect-ratio: 1 / 1;\n height: 2em;\n border-radius: 40%;\n}\nwindow-area {\n position: relative;\n width: calc(100% - 40px);\n margin-left: 20px;\n margin-bottom: 20px;\n height: 100%;\n overflow: hidden;\n}\nwindow-area window {\n background: var(--base);\n display: flex;\n flex-direction: column;\n border-radius: 5px;\n box-shadow: 0 10px 10px rgba(0, 0, 0, 0.2), 0 0px 10px rgba(0, 0, 0, 0.2);\n overflow: hidden;\n border: 1px solid rgba(255, 255, 255, 0.2);\n background: var(--crust);\n}\nwindow-area window window-header {\n height: 20px;\n padding: 7.5px;\n display: flex;\n align-items: center;\n gap: 7.5px;\n}\nwindow-area window window-header img {\n aspect-ratio: 1 / 1;\n height: 1.2em;\n border-radius: 40%;\n}\nwindow-area window window-content {\n height: 100%;\n border-radius: 10px 10px 0 0;\n background: var(--mantle);\n overflow: scroll;\n}\nwindow-area window window-content h1 {\n margin-top: 0;\n}\nlauncher {\n position: absolute;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n top: 0;\n background: rgba(0, 0, 0, 0.5);\n z-index: 99999999999999999999999;\n width: 100vw;\n height: calc(100vh + 20px);\n gap: 20px;\n transition: 0.2s opacity, 0.2s backdrop-filter;\n}\nlauncher apps {\n max-height: 70vh;\n padding: 20px;\n margin: 40px;\n display: flex;\n justify-content: center;\n gap: 40px;\n flex-wrap: wrap;\n}\nlauncher apps app {\n justify-content: center;\n display: flex;\n flex-direction: column;\n gap: 10px;\n height: max-content;\n text-align: center;\n}\nlauncher apps app img {\n width: 100px;\n border-radius: 40%;\n aspect-ratio: 1 / 1;\n}\nlauncher input {\n background: var(--mantle);\n border: 2px solid var(--crust);\n border-radius: 10px;\n padding: 10px;\n width: 300px;\n max-width: 100vw;\n text-align: center;\n transition: border 0.2s;\n}\nlauncher input:focus {\n outline: none;\n border: 2px solid var(--text);\n}\n.ace_editor * {\n font-family: monospace;\n}\n.ace-monokai .ace_marker-layer .ace_active-line {\n background: var(--mantle) !important;\n}\n.ace_layer.ace_gutter-layer.ace_folding-enabled {\n background: var(--mantle) !important;\n}\n.ace_content {\n background: var(--base) !important;\n}\n.ace_gutter-cell.ace_info {\n background: var(--crust) !important;\n}\n.ace-monokai .ace_marker-layer .ace_selection {\n background: var(--surface-0) !important;\n}\n","",{version:3,sources:["webpack://./src/style.less","https:\\api.fontshare.com\\v2\\css?f[]=satoshi@1,2&display=swap"],names:[],mappings:"AACA,YAAY;ACAZ;EACE,sBAAA;EACA,0cAAA;EAGA,oBAAA;EACA,kBAAA;EACA,kBAAA;ADAF;ACGA;EACE,sBAAA;EACA,0cAAA;EAGA,oBAAA;EACA,kBAAA;EACA,kBAAA;ADHF;AAZA;EACE,eAAA;EACA,oBAAA;EACA,oBAAA;EACA,oBAAA;EACA,eAAA;EACA,iBAAA;EACA,gBAAA;AAcF;AAXA;;EACE,8BAAA;EAEA,YAAA;EACA,aAAA;EAEA,YAAA;EAEA,aAAA;EACA,sBAAA;EAEA,gBAAA;AAUF;AANA;EACE,aAAA;AAQF;AALA;EACE,wBAAA;EACA,qBAAA;EAEA,kCAAA;EACA,gBAAA;EAEA,kBAAA;AAKF;AAHA;EACE,eAAA;AAKF;AAFA;EACE,WAAA;EACA,aAAA;EACA,SAAA;EACA,mBAAA;EACA,uBAAA;AAIF;AAFE;EACE,uBAAA;EACA,YAAA;EACA,kBAAA;EACA,yEAAA;EACA,sBAAA;EACA,aAAA;EACA,mBAAA;AAIJ;AAXE;EAUI,aAAA;EACA,SAAA;EACA,mBAAA;AAIN;AAhBE;EAeM,mBAAA;EACA,WAAA;EACA,kBAAA;AAIR;AAEA;EACE,kBAAA;EACA,wBAAA;EACA,iBAAA;EACA,mBAAA;EACA,YAAA;EACA,gBAAA;AAAF;AANA;EASI,uBAAA;EACA,aAAA;EACA,sBAAA;EACA,kBAAA;EACA,yEAAA;EACA,gBAAA;EACA,0CAAA;EACA,wBAAA;AAAJ;AAhBA;EAmBM,YAAA;EACA,cAAA;EACA,aAAA;EACA,mBAAA;EACA,UAAA;AAAN;AAvBA;EA0BQ,mBAAA;EACA,aAAA;EACA,kBAAA;AAAR;AA5BA;EAiCM,YAAA;EACA,4BAAA;EACA,yBAAA;EACA,gBAAA;AAFN;AAlCA;EAuCQ,aAAA;AAFR;AAQA;EACE,kBAAA;EACA,aAAA;EACA,sBAAA;EACA,uBAAA;EACA,mBAAA;EACA,MAAA;EACA,8BAAA;EACA,gCAAA;EACA,YAAA;EACA,0BAAA;EACA,SAAA;EACA,8CAAA;AANF;AANA;EAeI,gBAAA;EACA,aAAA;EACA,YAAA;EACA,aAAA;EACA,uBAAA;EACA,SAAA;EACA,eAAA;AANJ;AAfA;EAwBM,uBAAA;EACA,aAAA;EACA,sBAAA;EACA,SAAA;EACA,mBAAA;EACA,kBAAA;AANN;AAvBA;EAgCQ,YAAA;EACA,kBAAA;EACA,mBAAA;AANR;AA5BA;EAwCI,yBAAA;EACA,8BAAA;EACA,mBAAA;EACA,aAAA;EACA,YAAA;EACA,gBAAA;EACA,kBAAA;EACA,uBAAA;AATJ;AAWI;EACE,aAAA;EACA,6BAAA;AATN;AAcA;EACE,sBAAA;AAZF;AAeA;EACE,oCAAA;AAbF;AAgBA;EACE,oCAAA;AAdF;AAiBA;EACE,kCAAA;AAfF;AAkBA;EACE,mCAAA;AAhBF;AAmBA;EACE,uCAAA;AAjBF",sourcesContent:["@import url(https://unpkg.com/boxicons@2.1.4/css/boxicons.min.css);\n@import url(https://api.fontshare.com/v2/css?f[]=satoshi@1,2&display=swap);\n\n:root {\n --text: #cdd6f4;\n --surface-2: #585b70;\n --surface-1: #45475a;\n --surface-0: #313244;\n --base: #1e1e2e;\n --mantle: #181825;\n --crust: #11111b;\n}\n\nbody, html {\n background-color: var(--crust);\n\n width: 100vw;\n height: 100vh;\n\n margin: 10px;\n\n display: flex;\n flex-direction: column;\n\n overflow: hidden;\n}\n\n\n*::-webkit-scrollbar {\n display: none;\n}\n\n* {\n -ms-overflow-style: none;\n scrollbar-width: none;\n\n font-family: 'Satoshi', sans-serif;\n font-weight: 600;\n\n color: var(--text);\n}\n.bx {\n font-size: 25px;\n}\n\ntoolbar {\n width: 100%;\n display: flex;\n gap: 10px;\n margin-bottom: 10px;\n justify-content: center;\n\n & > div {\n background: var(--base);\n padding: 5px;\n border-radius: 5px;\n box-shadow: 0 10px 10px rgba(0, 0, 0, 0.1), 0 0px 10px rgba(0, 0, 0, 0.1);\n height: 40px!important;\n display: flex;\n align-items: center;\n\n app {\n display: flex;\n gap: 10px;\n align-items: center;\n\n img {\n aspect-ratio: 1 / 1;\n height: 2em;\n border-radius: 40%;\n }\n }\n }\n}\n\nwindow-area {\n position: relative;\n width: calc(100% - 40px);\n margin-left: 20px;\n margin-bottom: 20px;\n height: 100%;\n overflow: hidden;\n\n window {\n background: var(--base);\n display: flex;\n flex-direction: column;\n border-radius: 5px;\n box-shadow: 0 10px 10px rgba(0, 0, 0, 0.2), 0 0px 10px rgba(0, 0, 0, 0.2);\n overflow: hidden;\n border: 1px solid rgba(255, 255, 255, 0.2);\n background: var(--crust);\n \n window-header {\n height: 20px;\n padding: 7.5px;\n display: flex;\n align-items: center;\n gap: 7.5px;\n\n img {\n aspect-ratio: 1 / 1;\n height: 1.2em;\n border-radius: 40%;\n }\n }\n \n window-content {\n height: 100%;\n border-radius: 10px 10px 0 0;\n background: var(--mantle);\n overflow: scroll;\n\n h1 {\n margin-top: 0;\n }\n }\n }\n}\n\nlauncher {\n position: absolute;\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n top: 0;\n background: rgba(0, 0, 0, 0.5);\n z-index: 99999999999999999999999;\n width: 100vw;\n height: calc(100vh + 20px);\n gap: 20px;\n transition: .2s opacity, .2s backdrop-filter;\n\n apps {\n max-height: 70vh;\n padding: 20px;\n margin: 40px;\n display: flex;\n justify-content: center;\n gap: 40px;\n flex-wrap: wrap;\n\n app {\n justify-content: center;\n display: flex;\n flex-direction: column;\n gap: 10px;\n height: max-content;\n text-align: center;\n\n img {\n width: 100px;\n border-radius: 40%;\n aspect-ratio: 1 / 1;\n }\n }\n }\n\n input {\n background: var(--mantle);\n border: 2px solid var(--crust);\n border-radius: 10px;\n padding: 10px;\n width: 300px;\n max-width: 100vw;\n text-align: center;\n transition: border .2s;\n\n &:focus {\n outline: none;\n border: 2px solid var(--text);\n }\n }\n}\n\n.ace_editor * {\n font-family: monospace;\n}\n\n.ace-monokai .ace_marker-layer .ace_active-line {\n background: var(--mantle)!important;\n}\n\n.ace_layer.ace_gutter-layer.ace_folding-enabled {\n background: var(--mantle)!important;\n}\n\n.ace_content {\n background: var(--base)!important;\n}\n\n.ace_gutter-cell.ace_info {\n background: var(--crust)!important;\n}\n\n.ace-monokai .ace_marker-layer .ace_selection {\n background: var(--surface-0)!important;\n}","/* Satoshi */\n@font-face {\n font-family: 'Satoshi';\n src: url('//cdn.fontshare.com/wf/NWBQYJIM7GCZ5XWD7D26ARB3VDY55ZRT/K63EV2KZIGKLE7RANQ2U42S6SVHU5RJ7/X6XYTKIVDUW7GZTZPZNN4EUM5KH54KHF.woff2') format('woff2'),\n url('//cdn.fontshare.com/wf/NWBQYJIM7GCZ5XWD7D26ARB3VDY55ZRT/K63EV2KZIGKLE7RANQ2U42S6SVHU5RJ7/X6XYTKIVDUW7GZTZPZNN4EUM5KH54KHF.woff') format('woff'),\n url('//cdn.fontshare.com/wf/NWBQYJIM7GCZ5XWD7D26ARB3VDY55ZRT/K63EV2KZIGKLE7RANQ2U42S6SVHU5RJ7/X6XYTKIVDUW7GZTZPZNN4EUM5KH54KHF.ttf') format('truetype');\n font-weight: 300 900;\n font-display: swap;\n font-style: normal;\n}\n\n@font-face {\n font-family: 'Satoshi';\n src: url('//cdn.fontshare.com/wf/3JZIFUW7KLFSPLVCIUI2DLGNIER6IFCX/MMP4RUF5LYGUAZS3DCJC3GJ6F6SAGKSN/E3NEPGEAHYCHR37DSBXHV33XCYYRE2CY.woff2') format('woff2'),\n url('//cdn.fontshare.com/wf/3JZIFUW7KLFSPLVCIUI2DLGNIER6IFCX/MMP4RUF5LYGUAZS3DCJC3GJ6F6SAGKSN/E3NEPGEAHYCHR37DSBXHV33XCYYRE2CY.woff') format('woff'),\n url('//cdn.fontshare.com/wf/3JZIFUW7KLFSPLVCIUI2DLGNIER6IFCX/MMP4RUF5LYGUAZS3DCJC3GJ6F6SAGKSN/E3NEPGEAHYCHR37DSBXHV33XCYYRE2CY.ttf') format('truetype');\n font-weight: 300 900;\n font-display: swap;\n font-style: italic;\n}\n\n"],sourceRoot:""}]);const s=i},4740:(e,t,r)=>{"use strict";var n=r(2821);function a(e,t){if(Array.isArray(t)){for(var r=0;r<t.length;r++)o(t[r])(e);return e}if(t)return o(t)(e),e;for(t in n)o(t)(e);return e}function o(e){var t=n[e];if(!t)throw new Error("Unknown keyword "+e);return t}e.exports=a,a.get=o},8435:(e,t,r)=>{"use strict";var n=/^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d:\d\d)?$/i,a=/t|\s/i,o={date:s,time:c,"date-time":function(e,t){if(e&&t){e=e.split(a),t=t.split(a);var r=s(e[0],t[0]);if(void 0!==r)return r||c(e[1],t[1])}}},i={type:"object",required:["$data"],properties:{$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},additionalProperties:!1};function s(e,t){if(e&&t)return e>t?1:e<t?-1:e===t?0:void 0}function c(e,t){if(e&&t&&(e=e.match(n),t=t.match(n),e&&t))return(e=e[1]+e[2]+e[3]+(e[4]||""))>(t=t[1]+t[2]+t[3]+(t[4]||""))?1:e<t?-1:e===t?0:void 0}e.exports=function(e){var t="format"+e;return function n(a){return n.definition={type:"string",inline:r(7372),statements:!0,errors:"full",dependencies:["format"],metaSchema:{anyOf:[{type:"string"},i]}},a.addKeyword(t,n.definition),a.addKeyword("formatExclusive"+e,{dependencies:["format"+e],metaSchema:{anyOf:[{type:"boolean"},i]}}),function(e){var t=e._formats;for(var r in o){var n=t[r];("object"!=typeof n||n instanceof RegExp||!n.validate)&&(n=t[r]={validate:n}),n.compare||(n.compare=o[r])}}(a),a}}},2078:e=>{"use strict";e.exports={metaSchemaRef:function(e){var r=e._opts.defaultMeta;return"string"==typeof r?{$ref:r}:e.getSchema(t)?{$ref:t}:(console.warn("meta schema not defined"),{})}};var t="http://json-schema.org/draft-07/schema"},7768:e=>{"use strict";e.exports=function e(t){return e.definition={type:"object",macro:function(e,t){if(!e)return!0;var r=Object.keys(t.properties);return 0==r.length||{required:r}},metaSchema:{type:"boolean"},dependencies:["properties"]},t.addKeyword("allRequired",e.definition),t}},7907:e=>{"use strict";e.exports=function e(t){return e.definition={type:"object",macro:function(e){return 0==e.length||(1==e.length?{required:e}:{anyOf:e.map((function(e){return{required:[e]}}))})},metaSchema:{type:"array",items:{type:"string"}}},t.addKeyword("anyRequired",e.definition),t}},8716:(e,t,r)=>{"use strict";var n=r(2078);function a(e,t){for(var r=e.split("/"),n={},a=n,o=1;o<r.length;o++){var i=r[o],s=o==r.length-1;i=i.replace(/~1/g,"/").replace(/~0/g,"~");var c=a.properties={},u=void 0;if(/[0-9]+/.test(i)){var l=+i;for(u=a.items=[];l--;)u.push({})}a=s?t:{},c[i]=a,u&&u.push(a)}return n}e.exports=function e(t){return e.definition={type:"object",macro:function(e){var t=[];for(var r in e)t.push(a(r,e[r]));return{allOf:t}},metaSchema:{type:"object",propertyNames:{type:"string",format:"json-pointer"},additionalProperties:n.metaSchemaRef(t)}},t.addKeyword("deepProperties",e.definition),t}},9489:e=>{"use strict";function t(e,t){var o="data"+(t||"");if(!e)return o;for(var i,s=o,c=e.split("/"),u=1;u<c.length;u++){s+=" && "+(o+=(i=c[u].replace(/~1/g,"/").replace(/~0/g,"~"),n.test(i)?"["+i+"]":r.test(i)?"."+i:"['"+i.replace(a,"\\$&")+"']"))}return s}e.exports=function e(r){return e.definition={type:"object",inline:function(e,r,n){for(var a="",o=0;o<n.length;o++)o&&(a+=" && "),a+="("+t(n[o],e.dataLevel)+" !== undefined)";return a},metaSchema:{type:"array",items:{type:"string",format:"json-pointer"}}},r.addKeyword("deepRequired",e.definition),r};var r=/^[a-z$_][a-z$_0-9]*$/i,n=/^[0-9]+$/,a=/'|\\/g},7372:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="valid"+a;if(n+="var "+f+" = undefined;",!1===e.opts.format)return n+" "+f+" = true; ";var h=e.schema.format,p=e.opts.$data&&h.$data,d="";if(p)n+=" var "+(m="format"+a)+" = formats["+e.util.getData(h.$data,o,e.dataPathArr)+"] , "+(v="compare"+a)+" = "+m+" && "+m+".compare;";else{var m;if(!(m=e.formats[h])||!m.compare)return n+" "+f+" = true; ";var v="formats"+e.util.getProperty(h)+".compare"}var y,g,w="formatMaximum"==t,b="formatExclusive"+(w?"Maximum":"Minimum"),E=e.schema[b],A=e.opts.$data&&E&&E.$data,P=w?"<":">",x="result"+a,S=e.opts.$data&&i&&i.$data;if(S?(n+=" var schema"+a+" = "+e.util.getData(i.$data,o,e.dataPathArr)+"; ",y="schema"+a):y=i,A){var O=e.util.getData(E.$data,o,e.dataPathArr),_="exclusive"+a,I="' + "+(D="op"+a)+" + '";n+=" var schemaExcl"+a+" = "+O+"; ",n+=" if (typeof "+(O="schemaExcl"+a)+" != 'boolean' && "+O+" !== undefined) { "+f+" = false; ";var R=b;(g=g||[]).push(n),n="",!1!==e.createErrors?(n+=" { keyword: '"+(R||"_formatExclusiveLimit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: {} ",!1!==e.opts.messages&&(n+=" , message: '"+b+" should be boolean' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var j=n;n=g.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+j+"]); ":n+=" validate.errors = ["+j+"]; return false; ":n+=" var err = "+j+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",u&&(d+="}",n+=" else { "),S&&(n+=" if ("+y+" === undefined) "+f+" = true; else if (typeof "+y+" != 'string') "+f+" = false; else { ",d+="}"),p&&(n+=" if (!"+v+") "+f+" = true; else { ",d+="}"),n+=" var "+x+" = "+v+"("+l+", ",n+=S?""+y:""+e.util.toQuotedString(i),n+=" ); if ("+x+" === undefined) "+f+" = false; var "+_+" = "+O+" === true; if ("+f+" === undefined) { "+f+" = "+_+" ? "+x+" "+P+" 0 : "+x+" "+P+"= 0; } if (!"+f+") var op"+a+" = "+_+" ? '"+P+"' : '"+P+"=';"}else{I=P,(_=!0===E)||(I+="=");var D="'"+I+"'";S&&(n+=" if ("+y+" === undefined) "+f+" = true; else if (typeof "+y+" != 'string') "+f+" = false; else { ",d+="}"),p&&(n+=" if (!"+v+") "+f+" = true; else { ",d+="}"),n+=" var "+x+" = "+v+"("+l+", ",n+=S?""+y:""+e.util.toQuotedString(i),n+=" ); if ("+x+" === undefined) "+f+" = false; if ("+f+" === undefined) "+f+" = "+x+" "+P,_||(n+="="),n+=" 0;"}return n+=d+"if (!"+f+") { ",R=t,(g=g||[]).push(n),n="",!1!==e.createErrors?(n+=" { keyword: '"+(R||"_formatLimit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { comparison: "+D+", limit: ",n+=S?""+y:""+e.util.toQuotedString(i),n+=" , exclusive: "+_+" } ",!1!==e.opts.messages&&(n+=" , message: 'should be "+I+' "',n+=S?"' + "+y+" + '":""+e.util.escapeQuotes(i),n+="\"' "),e.opts.verbose&&(n+=" , schema: ",n+=S?"validate.schema"+s:""+e.util.toQuotedString(i),n+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",j=n,n=g.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+j+"]); ":n+=" validate.errors = ["+j+"]; return false; ":n+=" var err = "+j+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+"}"}},7903:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="valid"+a,h="key"+a,p="idx"+a,d="patternMatched"+a,m="dataProperties"+a,v="",y=e.opts.ownProperties;n+="var "+f+" = true;",y&&(n+=" var "+m+" = undefined;");var g=i;if(g)for(var w,b=-1,E=g.length-1;b<E;){w=g[b+=1],n+=" var "+d+" = false; ",n+=y?" "+m+" = "+m+" || Object.keys("+l+"); for (var "+p+"=0; "+p+"<"+m+".length; "+p+"++) { var "+h+" = "+m+"["+p+"]; ":" for (var "+h+" in "+l+") { ",n+=" "+d+" = "+e.usePattern(w)+".test("+h+"); if ("+d+") break; } ";var A=e.util.escapeQuotes(w);n+=" if (!"+d+") { "+f+" = false; var err = ",!1!==e.createErrors?(n+=" { keyword: 'patternRequired' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { missingPattern: '"+A+"' } ",!1!==e.opts.messages&&(n+=" , message: 'should have property matching pattern \\'"+A+"\\'' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ",u&&(v+="}",n+=" else { ")}return n+""+v}},8157:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="valid"+a,h="errs__"+a,p=e.util.copy(e),d="";p.level++;var m,v="valid"+p.level,y="ifPassed"+e.level,g=p.baseId;n+="var "+y+";";var w=i;if(w)for(var b,E=-1,A=w.length-1;E<A;){if(b=w[E+=1],E&&!m&&(n+=" if (!"+y+") { ",d+="}"),b.if&&(e.opts.strictKeywords?"object"==typeof b.if&&Object.keys(b.if).length>0:e.util.schemaHasRules(b.if,e.RULES.all))){n+=" var "+h+" = errors; ";var P=e.compositeRule;if(e.compositeRule=p.compositeRule=!0,p.createErrors=!1,p.schema=b.if,p.schemaPath=s+"["+E+"].if",p.errSchemaPath=c+"/"+E+"/if",n+=" "+e.validate(p)+" ",p.baseId=g,p.createErrors=!0,e.compositeRule=p.compositeRule=P,n+=" "+y+" = "+v+"; if ("+y+") { ","boolean"==typeof b.then){if(!1===b.then){(S=S||[]).push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'switch' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { caseIndex: "+E+" } ",!1!==e.opts.messages&&(n+=" , message: 'should pass \"switch\" keyword validation' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var x=n;n=S.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+x+"]); ":n+=" validate.errors = ["+x+"]; return false; ":n+=" var err = "+x+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}n+=" var "+v+" = "+b.then+"; "}else p.schema=b.then,p.schemaPath=s+"["+E+"].then",p.errSchemaPath=c+"/"+E+"/then",n+=" "+e.validate(p)+" ",p.baseId=g;n+=" } else { errors = "+h+"; if (vErrors !== null) { if ("+h+") vErrors.length = "+h+"; else vErrors = null; } } "}else if(n+=" "+y+" = true; ","boolean"==typeof b.then){var S;if(!1===b.then)(S=S||[]).push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'switch' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { caseIndex: "+E+" } ",!1!==e.opts.messages&&(n+=" , message: 'should pass \"switch\" keyword validation' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",x=n,n=S.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+x+"]); ":n+=" validate.errors = ["+x+"]; return false; ":n+=" var err = "+x+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";n+=" var "+v+" = "+b.then+"; "}else p.schema=b.then,p.schemaPath=s+"["+E+"].then",p.errSchemaPath=c+"/"+E+"/then",n+=" "+e.validate(p)+" ",p.baseId=g;m=b.continue}return n+(d+"var ")+f+" = "+v+";"}},2165:e=>{"use strict";var t={},r={timestamp:function(){return Date.now()},datetime:function(){return(new Date).toISOString()},date:function(){return(new Date).toISOString().slice(0,10)},time:function(){return(new Date).toISOString().slice(11)},random:function(){return Math.random()},randomint:function(e){var t=e&&e.max||2;return function(){return Math.floor(Math.random()*t)}},seq:function(e){var r=e&&e.name||"";return t[r]=t[r]||0,function(){return t[r]++}}};e.exports=function e(t){return e.definition={compile:function(e,t,r){var a={};for(var o in e){var i=e[o],s=n("string"==typeof i?i:i.func);a[o]=s.length?s(i.args):s}return r.opts.useDefaults&&!r.compositeRule?function(t){for(var n in e)void 0!==t[n]&&("empty"!=r.opts.useDefaults||null!==t[n]&&""!==t[n])||(t[n]=a[n]());return!0}:function(){return!0}},DEFAULTS:r,metaSchema:{type:"object",additionalProperties:{type:["string","object"],additionalProperties:!1,required:["func","args"],properties:{func:{type:"string"},args:{type:"object"}}}}},t.addKeyword("dynamicDefaults",e.definition),t;function n(e){var t=r[e];if(t)return t;throw new Error('invalid "dynamicDefaults" keyword property value: '+e)}}},5955:(e,t,r)=>{"use strict";e.exports=r(8435)("Maximum")},8436:(e,t,r)=>{"use strict";e.exports=r(8435)("Minimum")},2821:(e,t,r)=>{"use strict";e.exports={instanceof:r(5211),range:r(4210),regexp:r(9945),typeof:r(4414),dynamicDefaults:r(2165),allRequired:r(7768),anyRequired:r(7907),oneRequired:r(8647),prohibited:r(4528),uniqueItemProperties:r(5246),deepProperties:r(8716),deepRequired:r(9489),formatMinimum:r(8436),formatMaximum:r(5955),patternRequired:r(1389),switch:r(9901),select:r(3561),transform:r(1733)}},5211:(e,t,r)=>{"use strict";var n=r(2486).lW,a={Object,Array,Function,Number,String,Date,RegExp};e.exports=function e(t){return void 0!==n&&(a.Buffer=n),"undefined"!=typeof Promise&&(a.Promise=Promise),e.definition={compile:function(e){if("string"==typeof e){var t=r(e);return function(e){return e instanceof t}}var n=e.map(r);return function(e){for(var t=0;t<n.length;t++)if(e instanceof n[t])return!0;return!1}},CONSTRUCTORS:a,metaSchema:{anyOf:[{type:"string"},{type:"array",items:{type:"string"}}]}},t.addKeyword("instanceof",e.definition),t;function r(e){var t=a[e];if(t)return t;throw new Error('invalid "instanceof" keyword value '+e)}}},8647:e=>{"use strict";e.exports=function e(t){return e.definition={type:"object",macro:function(e){return 0==e.length||(1==e.length?{required:e}:{oneOf:e.map((function(e){return{required:[e]}}))})},metaSchema:{type:"array",items:{type:"string"}}},t.addKeyword("oneRequired",e.definition),t}},1389:(e,t,r)=>{"use strict";e.exports=function e(t){return e.definition={type:"object",inline:r(7903),statements:!0,errors:"full",metaSchema:{type:"array",items:{type:"string",format:"regex"},uniqueItems:!0}},t.addKeyword("patternRequired",e.definition),t}},4528:e=>{"use strict";e.exports=function e(t){return e.definition={type:"object",macro:function(e){return 0==e.length||(1==e.length?{not:{required:e}}:{not:{anyOf:e.map((function(e){return{required:[e]}}))}})},metaSchema:{type:"array",items:{type:"string"}}},t.addKeyword("prohibited",e.definition),t}},4210:e=>{"use strict";e.exports=function e(t){return e.definition={type:"number",macro:function(e,t){var r=e[0],n=e[1],a=t.exclusiveRange;return function(e,t,r){if(void 0!==r&&"boolean"!=typeof r)throw new Error("Invalid schema for exclusiveRange keyword, should be boolean");if(e>t||r&&e==t)throw new Error("There are no numbers in range")}(r,n,a),!0===a?{exclusiveMinimum:r,exclusiveMaximum:n}:{minimum:r,maximum:n}},metaSchema:{type:"array",minItems:2,maxItems:2,items:{type:"number"}}},t.addKeyword("range",e.definition),t.addKeyword("exclusiveRange"),t}},9945:e=>{"use strict";e.exports=function e(t){return e.definition={type:"string",inline:function(e,t,r){return function(){try{if("object"==typeof r)return new RegExp(r.pattern,r.flags);var e=r.match(/^\/(.*)\/([gimuy]*)$/);if(e)return new RegExp(e[1],e[2]);throw new Error("cannot parse string into RegExp")}catch(e){throw console.error("regular expression",r,"is invalid"),e}}()+".test(data"+(e.dataLevel||"")+")"},metaSchema:{type:["string","object"],properties:{pattern:{type:"string"},flags:{type:"string"}},required:["pattern"],additionalProperties:!1}},t.addKeyword("regexp",e.definition),t}},3561:(e,t,r)=>{"use strict";var n=r(2078);e.exports=function e(t){if(!t._opts.$data)return console.warn("keyword select requires $data option"),t;var r=n.metaSchemaRef(t),a=[];return e.definition={validate:function e(t,r,n){if(void 0===n.selectCases)throw new Error('keyword "selectCases" is absent');var a=o(n,!1),i=a.cases[t];if(void 0===i&&(i=a.default),"boolean"==typeof i)return i;var s=i(r);return s||(e.errors=i.errors),s},$data:!0,metaSchema:{type:["string","number","boolean","null"]}},t.addKeyword("select",e.definition),t.addKeyword("selectCases",{compile:function(e,t){var r=o(t);for(var n in e)r.cases[n]=i(e[n]);return function(){return!0}},valid:!0,metaSchema:{type:"object",additionalProperties:r}}),t.addKeyword("selectDefault",{compile:function(e,t){return o(t).default=i(e),function(){return!0}},valid:!0,metaSchema:r}),t;function o(e,t){var r;return a.some((function(t){if(t.parentSchema===e)return r=t,!0})),r||!1===t||(r={parentSchema:e,cases:{},default:!0},a.push(r)),r}function i(e){return"boolean"==typeof e?e:t.compile(e)}}},9901:(e,t,r)=>{"use strict";var n=r(2078);e.exports=function e(t){if(!t.RULES.keywords.switch||!t.RULES.keywords.if){var a=n.metaSchemaRef(t);return e.definition={inline:r(8157),statements:!0,errors:"full",metaSchema:{type:"array",items:{required:["then"],properties:{if:a,then:{anyOf:[{type:"boolean"},a]},continue:{type:"boolean"}},additionalProperties:!1,dependencies:{continue:["if"]}}}},t.addKeyword("switch",e.definition),t}}},1733:e=>{"use strict";e.exports=function e(t){var r={trimLeft:function(e){return e.replace(/^[\s]+/,"")},trimRight:function(e){return e.replace(/[\s]+$/,"")},trim:function(e){return e.trim()},toLowerCase:function(e){return e.toLowerCase()},toUpperCase:function(e){return e.toUpperCase()},toEnumCase:function(e,t){return t.hash[n(e)]||e}};return e.definition={type:"string",errors:!1,modifying:!0,valid:!0,compile:function(e,t){var a;if(-1!==e.indexOf("toEnumCase")){if(a={hash:{}},!t.enum)throw new Error('Missing enum. To use `transform:["toEnumCase"]`, `enum:[...]` is required.');for(var o=t.enum.length;o--;o){var i=t.enum[o];if("string"==typeof i){var s=n(i);if(a.hash[s])throw new Error('Invalid enum uniqueness. To use `transform:["toEnumCase"]`, all values must be unique when case insensitive.');a.hash[s]=i}}}return function(t,n,o,i){if(o){for(var s=0,c=e.length;s<c;s++)t=r[e[s]](t,a);o[i]=t}}},metaSchema:{type:"array",items:{type:"string",enum:["trimLeft","trimRight","trim","toLowerCase","toUpperCase","toEnumCase"]}}},t.addKeyword("transform",e.definition),t;function n(e){return e.toLowerCase()}}},4414:e=>{"use strict";var t=["undefined","string","number","object","function","boolean","symbol"];e.exports=function e(r){return e.definition={inline:function(e,t,r){var n="data"+(e.dataLevel||"");return"string"==typeof r?"typeof "+n+' == "'+r+'"':(r="validate.schema"+e.schemaPath+"."+t)+".indexOf(typeof "+n+") >= 0"},metaSchema:{anyOf:[{type:"string",enum:t},{type:"array",items:{type:"string",enum:t}}]}},r.addKeyword("typeof",e.definition),r}},5246:e=>{"use strict";var t=["number","integer","string","boolean","null"];e.exports=function e(r){return e.definition={type:"array",compile:function(e,r,n){var a=n.util.equal,o=function(e,r){return e.map((function(e){var n=r.items&&r.items.properties,a=n&&n[e]&&n[e].type;return Array.isArray(a)?a.indexOf("object")<0&&a.indexOf("array")<0:t.indexOf(a)>=0}))}(e,r);return function(t){if(t.length>1)for(var r=0;r<e.length;r++){var n,i=e[r];if(o[r]){var s={};for(n=t.length;n--;)if(t[n]&&"object"==typeof t[n]){var c=t[n][i];if(!c||"object"!=typeof c){if("string"==typeof c&&(c='"'+c),s[c])return!1;s[c]=!0}}}else for(n=t.length;n--;)if(t[n]&&"object"==typeof t[n])for(var u=n;u--;)if(t[u]&&"object"==typeof t[u]&&a(t[n][i],t[u][i]))return!1}return!0}},metaSchema:{type:"array",items:{type:"string"}}},r.addKeyword("uniqueItemProperties",e.definition),r}},8903:(e,t,r)=>{"use strict";var n=r(5689),a=r(3969),o=r(5255),i=r(4293),s=r(3508),c=r(3368),u=r(742),l=r(9394),f=r(3724);e.exports=y,y.prototype.validate=function(e,t){var r;if("string"==typeof e){if(!(r=this.getSchema(e)))throw new Error('no schema with key or ref "'+e+'"')}else{var n=this._addSchema(e);r=n.validate||this._compile(n)}var a=r(t);return!0!==r.$async&&(this.errors=r.errors),a},y.prototype.compile=function(e,t){var r=this._addSchema(e,void 0,t);return r.validate||this._compile(r)},y.prototype.addSchema=function(e,t,r,n){if(Array.isArray(e)){for(var o=0;o<e.length;o++)this.addSchema(e[o],void 0,r,n);return this}var i=this._getId(e);if(void 0!==i&&"string"!=typeof i)throw new Error("schema id must be string");return P(this,t=a.normalizeId(t||i)),this._schemas[t]=this._addSchema(e,r,n,!0),this},y.prototype.addMetaSchema=function(e,t,r){return this.addSchema(e,t,r,!0),this},y.prototype.validateSchema=function(e,t){var r=e.$schema;if(void 0!==r&&"string"!=typeof r)throw new Error("$schema must be a string");if(!(r=r||this._opts.defaultMeta||function(e){var t=e._opts.meta;return e._opts.defaultMeta="object"==typeof t?e._getId(t)||t:e.getSchema(d)?d:void 0,e._opts.defaultMeta}(this)))return this.logger.warn("meta-schema not available"),this.errors=null,!0;var n=this.validate(r,e);if(!n&&t){var a="schema is invalid: "+this.errorsText();if("log"!=this._opts.validateSchema)throw new Error(a);this.logger.error(a)}return n},y.prototype.getSchema=function(e){var t=g(this,e);switch(typeof t){case"object":return t.validate||this._compile(t);case"string":return this.getSchema(t);case"undefined":return function(e,t){var r=a.schema.call(e,{schema:{}},t);if(r){var o=r.schema,s=r.root,c=r.baseId,u=n.call(e,o,s,void 0,c);return e._fragments[t]=new i({ref:t,fragment:!0,schema:o,root:s,baseId:c,validate:u}),u}}(this,e)}},y.prototype.removeSchema=function(e){if(e instanceof RegExp)return w(this,this._schemas,e),w(this,this._refs,e),this;switch(typeof e){case"undefined":return w(this,this._schemas),w(this,this._refs),this._cache.clear(),this;case"string":var t=g(this,e);return t&&this._cache.del(t.cacheKey),delete this._schemas[e],delete this._refs[e],this;case"object":var r=this._opts.serialize,n=r?r(e):e;this._cache.del(n);var o=this._getId(e);o&&(o=a.normalizeId(o),delete this._schemas[o],delete this._refs[o])}return this},y.prototype.addFormat=function(e,t){return"string"==typeof t&&(t=new RegExp(t)),this._formats[e]=t,this},y.prototype.errorsText=function(e,t){if(!(e=e||this.errors))return"No errors";for(var r=void 0===(t=t||{}).separator?", ":t.separator,n=void 0===t.dataVar?"data":t.dataVar,a="",o=0;o<e.length;o++){var i=e[o];i&&(a+=n+i.dataPath+" "+i.message+r)}return a.slice(0,-r.length)},y.prototype._addSchema=function(e,t,r,n){if("object"!=typeof e&&"boolean"!=typeof e)throw new Error("schema should be object or boolean");var o=this._opts.serialize,s=o?o(e):e,c=this._cache.get(s);if(c)return c;n=n||!1!==this._opts.addUsedSchema;var u=a.normalizeId(this._getId(e));u&&n&&P(this,u);var l,f=!1!==this._opts.validateSchema&&!t;f&&!(l=u&&u==a.normalizeId(e.$schema))&&this.validateSchema(e,!0);var h=a.ids.call(this,e),p=new i({id:u,schema:e,localRefs:h,cacheKey:s,meta:r});return"#"!=u[0]&&n&&(this._refs[u]=p),this._cache.put(s,p),f&&l&&this.validateSchema(e,!0),p},y.prototype._compile=function(e,t){if(e.compiling)return e.validate=o,o.schema=e.schema,o.errors=null,o.root=t||o,!0===e.schema.$async&&(o.$async=!0),o;var r,a;e.compiling=!0,e.meta&&(r=this._opts,this._opts=this._metaOpts);try{a=n.call(this,e.schema,t,e.localRefs)}catch(t){throw delete e.validate,t}finally{e.compiling=!1,e.meta&&(this._opts=r)}return e.validate=a,e.refs=a.refs,e.refVal=a.refVal,e.root=a.root,a;function o(){var t=e.validate,r=t.apply(this,arguments);return o.errors=t.errors,r}},y.prototype.compileAsync=r(9677);var h=r(7931);y.prototype.addKeyword=h.add,y.prototype.getKeyword=h.get,y.prototype.removeKeyword=h.remove,y.prototype.validateKeyword=h.validate;var p=r(5359);y.ValidationError=p.Validation,y.MissingRefError=p.MissingRef,y.$dataMetaSchema=l;var d="http://json-schema.org/draft-07/schema",m=["removeAdditional","useDefaults","coerceTypes","strictDefaults"],v=["/properties"];function y(e){if(!(this instanceof y))return new y(e);e=this._opts=f.copy(e)||{},function(e){var t=e._opts.logger;if(!1===t)e.logger={log:x,warn:x,error:x};else{if(void 0===t&&(t=console),!("object"==typeof t&&t.log&&t.warn&&t.error))throw new Error("logger must implement log, warn and error methods");e.logger=t}}(this),this._schemas={},this._refs={},this._fragments={},this._formats=c(e.format),this._cache=e.cache||new o,this._loadingSchemas={},this._compilations=[],this.RULES=u(),this._getId=function(e){switch(e.schemaId){case"auto":return A;case"id":return b;default:return E}}(e),e.loopRequired=e.loopRequired||1/0,"property"==e.errorDataPath&&(e._errorDataPathProperty=!0),void 0===e.serialize&&(e.serialize=s),this._metaOpts=function(e){for(var t=f.copy(e._opts),r=0;r<m.length;r++)delete t[m[r]];return t}(this),e.formats&&function(e){for(var t in e._opts.formats){var r=e._opts.formats[t];e.addFormat(t,r)}}(this),e.keywords&&function(e){for(var t in e._opts.keywords){var r=e._opts.keywords[t];e.addKeyword(t,r)}}(this),function(e){var t;if(e._opts.$data&&(t=r(894),e.addMetaSchema(t,t.$id,!0)),!1!==e._opts.meta){var n=r(6680);e._opts.$data&&(n=l(n,v)),e.addMetaSchema(n,d,!0),e._refs["http://json-schema.org/schema"]=d}}(this),"object"==typeof e.meta&&this.addMetaSchema(e.meta),e.nullable&&this.addKeyword("nullable",{metaSchema:{type:"boolean"}}),function(e){var t=e._opts.schemas;if(t)if(Array.isArray(t))e.addSchema(t);else for(var r in t)e.addSchema(t[r],r)}(this)}function g(e,t){return t=a.normalizeId(t),e._schemas[t]||e._refs[t]||e._fragments[t]}function w(e,t,r){for(var n in t){var a=t[n];a.meta||r&&!r.test(n)||(e._cache.del(a.cacheKey),delete t[n])}}function b(e){return e.$id&&this.logger.warn("schema $id ignored",e.$id),e.id}function E(e){return e.id&&this.logger.warn("schema id ignored",e.id),e.$id}function A(e){if(e.$id&&e.id&&e.$id!=e.id)throw new Error("schema $id is different from id");return e.$id||e.id}function P(e,t){if(e._schemas[t]||e._refs[t])throw new Error('schema with key or id "'+t+'" already exists')}function x(){}},5255:e=>{"use strict";var t=e.exports=function(){this._cache={}};t.prototype.put=function(e,t){this._cache[e]=t},t.prototype.get=function(e){return this._cache[e]},t.prototype.del=function(e){delete this._cache[e]},t.prototype.clear=function(){this._cache={}}},9677:(e,t,r)=>{"use strict";var n=r(5359).MissingRef;e.exports=function e(t,r,a){var o=this;if("function"!=typeof this._opts.loadSchema)throw new Error("options.loadSchema should be a function");"function"==typeof r&&(a=r,r=void 0);var i=s(t).then((function(){var e=o._addSchema(t,void 0,r);return e.validate||c(e)}));return a&&i.then((function(e){a(null,e)}),a),i;function s(t){var r=t.$schema;return r&&!o.getSchema(r)?e.call(o,{$ref:r},!0):Promise.resolve()}function c(e){try{return o._compile(e)}catch(t){if(t instanceof n)return function(t){var n=t.missingSchema;if(u(n))throw new Error("Schema "+n+" is loaded but "+t.missingRef+" cannot be resolved");var a=o._loadingSchemas[n];return a||(a=o._loadingSchemas[n]=o._opts.loadSchema(n)).then(i,i),a.then((function(e){if(!u(n))return s(e).then((function(){u(n)||o.addSchema(e,n,void 0,r)}))})).then((function(){return c(e)}));function i(){delete o._loadingSchemas[n]}function u(e){return o._refs[e]||o._schemas[e]}}(t);throw t}}}},5359:(e,t,r)=>{"use strict";var n=r(3969);function a(e,t,r){this.message=r||a.message(e,t),this.missingRef=n.url(e,t),this.missingSchema=n.normalizeId(n.fullPath(this.missingRef))}function o(e){return e.prototype=Object.create(Error.prototype),e.prototype.constructor=e,e}e.exports={Validation:o((function(e){this.message="validation failed",this.errors=e,this.ajv=this.validation=!0})),MissingRef:o(a)},a.message=function(e,t){return"can't resolve reference "+t+" from id "+e}},3368:(e,t,r)=>{"use strict";var n=r(3724),a=/^(\d\d\d\d)-(\d\d)-(\d\d)$/,o=[0,31,28,31,30,31,30,31,31,30,31,30,31],i=/^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d(?::?\d\d)?)?$/i,s=/^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i,c=/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,u=/^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,l=/^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-)*(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-)*(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i,f=/^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,h=/^(?:\/(?:[^~/]|~0|~1)*)*$/,p=/^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,d=/^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/;function m(e){return e="full"==e?"full":"fast",n.copy(m[e])}function v(e){var t=e.match(a);if(!t)return!1;var r=+t[1],n=+t[2],i=+t[3];return n>=1&&n<=12&&i>=1&&i<=(2==n&&function(e){return e%4==0&&(e%100!=0||e%400==0)}(r)?29:o[n])}function y(e,t){var r=e.match(i);if(!r)return!1;var n=r[1],a=r[2],o=r[3],s=r[5];return(n<=23&&a<=59&&o<=59||23==n&&59==a&&60==o)&&(!t||s)}e.exports=m,m.fast={date:/^\d\d\d\d-[0-1]\d-[0-3]\d$/,time:/^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,"date-time":/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,uri:/^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,"uri-reference":/^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,"uri-template":u,url:l,email:/^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,hostname:s,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:E,uuid:f,"json-pointer":h,"json-pointer-uri-fragment":p,"relative-json-pointer":d},m.full={date:v,time:y,"date-time":function(e){var t=e.split(g);return 2==t.length&&v(t[0])&&y(t[1],!0)},uri:function(e){return w.test(e)&&c.test(e)},"uri-reference":/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i,"uri-template":u,url:l,email:/^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,hostname:s,ipv4:/^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,ipv6:/^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,regex:E,uuid:f,"json-pointer":h,"json-pointer-uri-fragment":p,"relative-json-pointer":d};var g=/t|\s/i,w=/\/|:/,b=/[^\\]\\Z/;function E(e){if(b.test(e))return!1;try{return new RegExp(e),!0}catch(e){return!1}}},5689:(e,t,r)=>{"use strict";var n=r(3969),a=r(3724),o=r(5359),i=r(3508),s=r(1869),c=a.ucs2length,u=r(2303),l=o.Validation;function f(e,t,r){var n=p.call(this,e,t,r);return n>=0?{index:n,compiling:!0}:(n=this._compilations.length,this._compilations[n]={schema:e,root:t,baseId:r},{index:n,compiling:!1})}function h(e,t,r){var n=p.call(this,e,t,r);n>=0&&this._compilations.splice(n,1)}function p(e,t,r){for(var n=0;n<this._compilations.length;n++){var a=this._compilations[n];if(a.schema==e&&a.root==t&&a.baseId==r)return n}return-1}function d(e,t){return"var pattern"+e+" = new RegExp("+a.toQuotedString(t[e])+");"}function m(e){return"var default"+e+" = defaults["+e+"];"}function v(e,t){return void 0===t[e]?"":"var refVal"+e+" = refVal["+e+"];"}function y(e){return"var customRule"+e+" = customRules["+e+"];"}function g(e,t){if(!e.length)return"";for(var r="",n=0;n<e.length;n++)r+=t(n,e);return r}e.exports=function e(t,r,p,w){var b=this,E=this._opts,A=[void 0],P={},x=[],S={},O=[],_={},I=[];r=r||{schema:t,refVal:A,refs:P};var R=f.call(this,t,r,w),j=this._compilations[R.index];if(R.compiling)return j.callValidate=function e(){var t=j.validate,r=t.apply(this,arguments);return e.errors=t.errors,r};var D=this._formats,$=this.RULES;try{var L=F(t,r,p,w);j.validate=L;var k=j.callValidate;return k&&(k.schema=L.schema,k.errors=null,k.refs=L.refs,k.refVal=L.refVal,k.root=L.root,k.$async=L.$async,E.sourceCode&&(k.source=L.source)),L}finally{h.call(this,t,r,w)}function F(t,i,f,h){var p=!i||i&&i.schema==t;if(i.schema!=r.schema)return e.call(b,t,i,f,h);var w,S=!0===t.$async,_=s({isTop:!0,schema:t,isRoot:p,baseId:h,root:i,schemaPath:"",errSchemaPath:"#",errorPath:'""',MissingRefError:o.MissingRef,RULES:$,validate:s,util:a,resolve:n,resolveRef:C,usePattern:B,useDefault:M,useCustomRule:U,opts:E,formats:D,logger:b.logger,self:b});_=g(A,v)+g(x,d)+g(O,m)+g(I,y)+_,E.processCode&&(_=E.processCode(_,t));try{w=new Function("self","RULES","formats","root","refVal","defaults","customRules","equal","ucs2length","ValidationError",_)(b,$,D,r,A,O,I,u,c,l),A[0]=w}catch(e){throw b.logger.error("Error compiling schema, function code:",_),e}return w.schema=t,w.errors=null,w.refs=P,w.refVal=A,w.root=p?w:i,S&&(w.$async=!0),!0===E.sourceCode&&(w.source={code:_,patterns:x,defaults:O}),w}function C(t,a,o){a=n.url(t,a);var i,s,c=P[a];if(void 0!==c)return N(i=A[c],s="refVal["+c+"]");if(!o&&r.refs){var u=r.refs[a];if(void 0!==u)return N(i=r.refVal[u],s=T(a,i))}s=T(a);var l=n.call(b,F,r,a);if(void 0===l){var f=p&&p[a];f&&(l=n.inlineRef(f,E.inlineRefs)?f:e.call(b,f,r,p,t))}if(void 0!==l)return function(e,t){var r=P[e];A[r]=t}(a,l),N(l,s);!function(e){delete P[e]}(a)}function T(e,t){var r=A.length;return A[r]=t,P[e]=r,"refVal"+r}function N(e,t){return"object"==typeof e||"boolean"==typeof e?{code:t,schema:e,inline:!0}:{code:t,$async:e&&!!e.$async}}function B(e){var t=S[e];return void 0===t&&(t=S[e]=x.length,x[t]=e),"pattern"+t}function M(e){switch(typeof e){case"boolean":case"number":return""+e;case"string":return a.toQuotedString(e);case"object":if(null===e)return"null";var t=i(e),r=_[t];return void 0===r&&(r=_[t]=O.length,O[r]=e),"default"+r}}function U(e,t,r,n){if(!1!==b._opts.validateSchema){var a=e.definition.dependencies;if(a&&!a.every((function(e){return Object.prototype.hasOwnProperty.call(r,e)})))throw new Error("parent schema must have all required keywords: "+a.join(","));var o=e.definition.validateSchema;if(o&&!o(t)){var i="keyword schema is invalid: "+b.errorsText(o.errors);if("log"!=b._opts.validateSchema)throw new Error(i);b.logger.error(i)}}var s,c=e.definition.compile,u=e.definition.inline,l=e.definition.macro;if(c)s=c.call(b,t,r,n);else if(l)s=l.call(b,t,r,n),!1!==E.validateSchema&&b.validateSchema(s,!0);else if(u)s=u.call(b,n,e.keyword,t,r);else if(!(s=e.definition.validate))return;if(void 0===s)throw new Error('custom keyword "'+e.keyword+'"failed to compile');var f=I.length;return I[f]=s,{code:"customRule"+f,validate:s}}}},3969:(e,t,r)=>{"use strict";var n=r(7533),a=r(2303),o=r(3724),i=r(4293),s=r(500);function c(e,t,r){var n=this._refs[r];if("string"==typeof n){if(!this._refs[n])return c.call(this,e,t,n);n=this._refs[n]}if((n=n||this._schemas[r])instanceof i)return d(n.schema,this._opts.inlineRefs)?n.schema:n.validate||this._compile(n);var a,o,s,l=u.call(this,t,r);return l&&(a=l.schema,t=l.root,s=l.baseId),a instanceof i?o=a.validate||e.call(this,a.schema,t,void 0,s):void 0!==a&&(o=d(a,this._opts.inlineRefs)?a:e.call(this,a,t,void 0,s)),o}function u(e,t){var r=n.parse(t),a=g(r),o=y(this._getId(e.schema));if(0===Object.keys(e.schema).length||a!==o){var s=b(a),c=this._refs[s];if("string"==typeof c)return l.call(this,e,c,r);if(c instanceof i)c.validate||this._compile(c),e=c;else{if(!((c=this._schemas[s])instanceof i))return;if(c.validate||this._compile(c),s==b(t))return{schema:c,root:e,baseId:o};e=c}if(!e.schema)return;o=y(this._getId(e.schema))}return h.call(this,r,o,e.schema,e)}function l(e,t,r){var n=u.call(this,e,t);if(n){var a=n.schema,o=n.baseId;e=n.root;var i=this._getId(a);return i&&(o=E(o,i)),h.call(this,r,o,a,e)}}e.exports=c,c.normalizeId=b,c.fullPath=y,c.url=E,c.ids=function(e){var t=b(this._getId(e)),r={"":t},i={"":y(t,!1)},c={},u=this;return s(e,{allKeys:!0},(function(e,t,s,l,f,h,p){if(""!==t){var d=u._getId(e),m=r[l],v=i[l]+"/"+f;if(void 0!==p&&(v+="/"+("number"==typeof p?p:o.escapeFragment(p))),"string"==typeof d){d=m=b(m?n.resolve(m,d):d);var y=u._refs[d];if("string"==typeof y&&(y=u._refs[y]),y&&y.schema){if(!a(e,y.schema))throw new Error('id "'+d+'" resolves to more than one schema')}else if(d!=b(v))if("#"==d[0]){if(c[d]&&!a(e,c[d]))throw new Error('id "'+d+'" resolves to more than one schema');c[d]=e}else u._refs[d]=v}r[t]=m,i[t]=v}})),c},c.inlineRef=d,c.schema=u;var f=o.toHash(["properties","patternProperties","enum","dependencies","definitions"]);function h(e,t,r,n){if(e.fragment=e.fragment||"","/"==e.fragment.slice(0,1)){for(var a=e.fragment.split("/"),i=1;i<a.length;i++){var s=a[i];if(s){if(void 0===(r=r[s=o.unescapeFragment(s)]))break;var c;if(!f[s]&&((c=this._getId(r))&&(t=E(t,c)),r.$ref)){var l=E(t,r.$ref),h=u.call(this,n,l);h&&(r=h.schema,n=h.root,t=h.baseId)}}}return void 0!==r&&r!==n.schema?{schema:r,root:n,baseId:t}:void 0}}var p=o.toHash(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum"]);function d(e,t){return!1!==t&&(void 0===t||!0===t?m(e):t?v(e)<=t:void 0)}function m(e){var t;if(Array.isArray(e)){for(var r=0;r<e.length;r++)if("object"==typeof(t=e[r])&&!m(t))return!1}else for(var n in e){if("$ref"==n)return!1;if("object"==typeof(t=e[n])&&!m(t))return!1}return!0}function v(e){var t,r=0;if(Array.isArray(e)){for(var n=0;n<e.length;n++)if("object"==typeof(t=e[n])&&(r+=v(t)),r==1/0)return 1/0}else for(var a in e){if("$ref"==a)return 1/0;if(p[a])r++;else if("object"==typeof(t=e[a])&&(r+=v(t)+1),r==1/0)return 1/0}return r}function y(e,t){return!1!==t&&(e=b(e)),g(n.parse(e))}function g(e){return n.serialize(e).split("#")[0]+"#"}var w=/#\/?$/;function b(e){return e?e.replace(w,""):""}function E(e,t){return t=b(t),n.resolve(e,t)}},742:(e,t,r)=>{"use strict";var n=r(9646),a=r(3724).toHash;e.exports=function(){var e=[{type:"number",rules:[{maximum:["exclusiveMaximum"]},{minimum:["exclusiveMinimum"]},"multipleOf","format"]},{type:"string",rules:["maxLength","minLength","pattern","format"]},{type:"array",rules:["maxItems","minItems","items","contains","uniqueItems"]},{type:"object",rules:["maxProperties","minProperties","required","dependencies","propertyNames",{properties:["additionalProperties","patternProperties"]}]},{rules:["$ref","const","enum","not","anyOf","oneOf","allOf","if"]}],t=["type","$comment"];return e.all=a(t),e.types=a(["number","integer","string","array","object","boolean","null"]),e.forEach((function(r){r.rules=r.rules.map((function(r){var a;if("object"==typeof r){var o=Object.keys(r)[0];a=r[o],r=o,a.forEach((function(r){t.push(r),e.all[r]=!0}))}return t.push(r),e.all[r]={keyword:r,code:n[r],implements:a}})),e.all.$comment={keyword:"$comment",code:n.$comment},r.type&&(e.types[r.type]=r)})),e.keywords=a(t.concat(["$schema","$id","id","$data","$async","title","description","default","definitions","examples","readOnly","writeOnly","contentMediaType","contentEncoding","additionalItems","then","else"])),e.custom={},e}},4293:(e,t,r)=>{"use strict";var n=r(3724);e.exports=function(e){n.copy(e,this)}},6887:e=>{"use strict";e.exports=function(e){for(var t,r=0,n=e.length,a=0;a<n;)r++,(t=e.charCodeAt(a++))>=55296&&t<=56319&&a<n&&56320==(64512&(t=e.charCodeAt(a)))&&a++;return r}},3724:(e,t,r)=>{"use strict";function n(e,t,r,n){var a=n?" !== ":" === ",o=n?" || ":" && ",i=n?"!":"",s=n?"":"!";switch(e){case"null":return t+a+"null";case"array":return i+"Array.isArray("+t+")";case"object":return"("+i+t+o+"typeof "+t+a+'"object"'+o+s+"Array.isArray("+t+"))";case"integer":return"(typeof "+t+a+'"number"'+o+s+"("+t+" % 1)"+o+t+a+t+(r?o+i+"isFinite("+t+")":"")+")";case"number":return"(typeof "+t+a+'"'+e+'"'+(r?o+i+"isFinite("+t+")":"")+")";default:return"typeof "+t+a+'"'+e+'"'}}e.exports={copy:function(e,t){for(var r in t=t||{},e)t[r]=e[r];return t},checkDataType:n,checkDataTypes:function(e,t,r){if(1===e.length)return n(e[0],t,r,!0);var a="",i=o(e);for(var s in i.array&&i.object&&(a=i.null?"(":"(!"+t+" || ",a+="typeof "+t+' !== "object")',delete i.null,delete i.array,delete i.object),i.number&&delete i.integer,i)a+=(a?" && ":"")+n(s,t,r,!0);return a},coerceToTypes:function(e,t){if(Array.isArray(t)){for(var r=[],n=0;n<t.length;n++){var o=t[n];(a[o]||"array"===e&&"array"===o)&&(r[r.length]=o)}if(r.length)return r}else{if(a[t])return[t];if("array"===e&&"array"===t)return["array"]}},toHash:o,getProperty:c,escapeQuotes:u,equal:r(2303),ucs2length:r(6887),varOccurences:function(e,t){t+="[^0-9]";var r=e.match(new RegExp(t,"g"));return r?r.length:0},varReplace:function(e,t,r){return t+="([^0-9])",r=r.replace(/\$/g,"$$$$"),e.replace(new RegExp(t,"g"),r+"$1")},schemaHasRules:function(e,t){if("boolean"==typeof e)return!e;for(var r in e)if(t[r])return!0},schemaHasRulesExcept:function(e,t,r){if("boolean"==typeof e)return!e&&"not"!=r;for(var n in e)if(n!=r&&t[n])return!0},schemaUnknownRules:function(e,t){if("boolean"!=typeof e)for(var r in e)if(!t[r])return r},toQuotedString:l,getPathExpr:function(e,t,r,n){return p(e,r?"'/' + "+t+(n?"":".replace(/~/g, '~0').replace(/\\//g, '~1')"):n?"'[' + "+t+" + ']'":"'[\\'' + "+t+" + '\\']'")},getPath:function(e,t,r){return p(e,l(r?"/"+d(t):c(t)))},getData:function(e,t,r){var n,a,o,i;if(""===e)return"rootData";if("/"==e[0]){if(!f.test(e))throw new Error("Invalid JSON-pointer: "+e);a=e,o="rootData"}else{if(!(i=e.match(h)))throw new Error("Invalid JSON-pointer: "+e);if(n=+i[1],"#"==(a=i[2])){if(n>=t)throw new Error("Cannot access property/index "+n+" levels up, current level is "+t);return r[t-n]}if(n>t)throw new Error("Cannot access data "+n+" levels up, current level is "+t);if(o="data"+(t-n||""),!a)return o}for(var s=o,u=a.split("/"),l=0;l<u.length;l++){var p=u[l];p&&(s+=" && "+(o+=c(m(p))))}return s},unescapeFragment:function(e){return m(decodeURIComponent(e))},unescapeJsonPointer:m,escapeFragment:function(e){return encodeURIComponent(d(e))},escapeJsonPointer:d};var a=o(["string","number","integer","boolean","null"]);function o(e){for(var t={},r=0;r<e.length;r++)t[e[r]]=!0;return t}var i=/^[a-z$_][a-z$_0-9]*$/i,s=/'|\\/g;function c(e){return"number"==typeof e?"["+e+"]":i.test(e)?"."+e:"['"+u(e)+"']"}function u(e){return e.replace(s,"\\$&").replace(/\n/g,"\\n").replace(/\r/g,"\\r").replace(/\f/g,"\\f").replace(/\t/g,"\\t")}function l(e){return"'"+u(e)+"'"}var f=/^\/(?:[^~]|~0|~1)*$/,h=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function p(e,t){return'""'==e?t:(e+" + "+t).replace(/([^\\])' \+ '/g,"$1")}function d(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function m(e){return e.replace(/~1/g,"/").replace(/~0/g,"~")}},9394:e=>{"use strict";var t=["multipleOf","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","additionalItems","maxItems","minItems","uniqueItems","maxProperties","minProperties","required","additionalProperties","enum","format","const"];e.exports=function(e,r){for(var n=0;n<r.length;n++){e=JSON.parse(JSON.stringify(e));var a,o=r[n].split("/"),i=e;for(a=1;a<o.length;a++)i=i[o[a]];for(a=0;a<t.length;a++){var s=t[a],c=i[s];c&&(i[s]={anyOf:[c,{$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"}]})}}return e}},5868:(e,t,r)=>{"use strict";var n=r(6680);e.exports={$id:"https://github.com/ajv-validator/ajv/blob/master/lib/definition_schema.js",definitions:{simpleTypes:n.definitions.simpleTypes},type:"object",dependencies:{schema:["validate"],$data:["validate"],statements:["inline"],valid:{not:{required:["macro"]}}},properties:{type:n.properties.type,schema:{type:"boolean"},statements:{type:"boolean"},dependencies:{type:"array",items:{type:"string"}},metaSchema:{type:"object"},modifying:{type:"boolean"},valid:{type:"boolean"},$data:{type:"boolean"},async:{type:"boolean"},errors:{anyOf:[{type:"boolean"},{const:"full"}]}}}},1796:e=>{"use strict";e.exports=function(e,t,r){var n,a=" ",o=e.level,i=e.dataLevel,s=e.schema[t],c=e.schemaPath+e.util.getProperty(t),u=e.errSchemaPath+"/"+t,l=!e.opts.allErrors,f="data"+(i||""),h=e.opts.$data&&s&&s.$data;h?(a+=" var schema"+o+" = "+e.util.getData(s.$data,i,e.dataPathArr)+"; ",n="schema"+o):n=s;var p="maximum"==t,d=p?"exclusiveMaximum":"exclusiveMinimum",m=e.schema[d],v=e.opts.$data&&m&&m.$data,y=p?"<":">",g=p?">":"<",w=void 0;if(!h&&"number"!=typeof s&&void 0!==s)throw new Error(t+" must be number");if(!v&&void 0!==m&&"number"!=typeof m&&"boolean"!=typeof m)throw new Error(d+" must be number or boolean");if(v){var b,E=e.util.getData(m.$data,i,e.dataPathArr),A="exclusive"+o,P="exclType"+o,x="exclIsNumber"+o,S="' + "+(_="op"+o)+" + '";a+=" var schemaExcl"+o+" = "+E+"; ",a+=" var "+A+"; var "+P+" = typeof "+(E="schemaExcl"+o)+"; if ("+P+" != 'boolean' && "+P+" != 'undefined' && "+P+" != 'number') { ",w=d,(b=b||[]).push(a),a="",!1!==e.createErrors?(a+=" { keyword: '"+(w||"_exclusiveLimit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: {} ",!1!==e.opts.messages&&(a+=" , message: '"+d+" should be boolean' "),e.opts.verbose&&(a+=" , schema: validate.schema"+c+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+f+" "),a+=" } "):a+=" {} ";var O=a;a=b.pop(),!e.compositeRule&&l?e.async?a+=" throw new ValidationError(["+O+"]); ":a+=" validate.errors = ["+O+"]; return false; ":a+=" var err = "+O+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } else if ( ",h&&(a+=" ("+n+" !== undefined && typeof "+n+" != 'number') || "),a+=" "+P+" == 'number' ? ( ("+A+" = "+n+" === undefined || "+E+" "+y+"= "+n+") ? "+f+" "+g+"= "+E+" : "+f+" "+g+" "+n+" ) : ( ("+A+" = "+E+" === true) ? "+f+" "+g+"= "+n+" : "+f+" "+g+" "+n+" ) || "+f+" !== "+f+") { var op"+o+" = "+A+" ? '"+y+"' : '"+y+"='; ",void 0===s&&(w=d,u=e.errSchemaPath+"/"+d,n=E,h=v)}else if(S=y,(x="number"==typeof m)&&h){var _="'"+S+"'";a+=" if ( ",h&&(a+=" ("+n+" !== undefined && typeof "+n+" != 'number') || "),a+=" ( "+n+" === undefined || "+m+" "+y+"= "+n+" ? "+f+" "+g+"= "+m+" : "+f+" "+g+" "+n+" ) || "+f+" !== "+f+") { "}else x&&void 0===s?(A=!0,w=d,u=e.errSchemaPath+"/"+d,n=m,g+="="):(x&&(n=Math[p?"min":"max"](m,s)),m===(!x||n)?(A=!0,w=d,u=e.errSchemaPath+"/"+d,g+="="):(A=!1,S+="=")),_="'"+S+"'",a+=" if ( ",h&&(a+=" ("+n+" !== undefined && typeof "+n+" != 'number') || "),a+=" "+f+" "+g+" "+n+" || "+f+" !== "+f+") { ";return w=w||t,(b=b||[]).push(a),a="",!1!==e.createErrors?(a+=" { keyword: '"+(w||"_limit")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: { comparison: "+_+", limit: "+n+", exclusive: "+A+" } ",!1!==e.opts.messages&&(a+=" , message: 'should be "+S+" ",a+=h?"' + "+n:n+"'"),e.opts.verbose&&(a+=" , schema: ",a+=h?"validate.schema"+c:""+s,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+f+" "),a+=" } "):a+=" {} ",O=a,a=b.pop(),!e.compositeRule&&l?e.async?a+=" throw new ValidationError(["+O+"]); ":a+=" validate.errors = ["+O+"]; return false; ":a+=" var err = "+O+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } ",l&&(a+=" else { "),a}},2407:e=>{"use strict";e.exports=function(e,t,r){var n,a=" ",o=e.level,i=e.dataLevel,s=e.schema[t],c=e.schemaPath+e.util.getProperty(t),u=e.errSchemaPath+"/"+t,l=!e.opts.allErrors,f="data"+(i||""),h=e.opts.$data&&s&&s.$data;if(h?(a+=" var schema"+o+" = "+e.util.getData(s.$data,i,e.dataPathArr)+"; ",n="schema"+o):n=s,!h&&"number"!=typeof s)throw new Error(t+" must be number");a+="if ( ",h&&(a+=" ("+n+" !== undefined && typeof "+n+" != 'number') || "),a+=" "+f+".length "+("maxItems"==t?">":"<")+" "+n+") { ";var p=t,d=d||[];d.push(a),a="",!1!==e.createErrors?(a+=" { keyword: '"+(p||"_limitItems")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: { limit: "+n+" } ",!1!==e.opts.messages&&(a+=" , message: 'should NOT have ",a+="maxItems"==t?"more":"fewer",a+=" than ",a+=h?"' + "+n+" + '":""+s,a+=" items' "),e.opts.verbose&&(a+=" , schema: ",a+=h?"validate.schema"+c:""+s,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+f+" "),a+=" } "):a+=" {} ";var m=a;return a=d.pop(),!e.compositeRule&&l?e.async?a+=" throw new ValidationError(["+m+"]); ":a+=" validate.errors = ["+m+"]; return false; ":a+=" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",l&&(a+=" else { "),a}},1250:e=>{"use strict";e.exports=function(e,t,r){var n,a=" ",o=e.level,i=e.dataLevel,s=e.schema[t],c=e.schemaPath+e.util.getProperty(t),u=e.errSchemaPath+"/"+t,l=!e.opts.allErrors,f="data"+(i||""),h=e.opts.$data&&s&&s.$data;if(h?(a+=" var schema"+o+" = "+e.util.getData(s.$data,i,e.dataPathArr)+"; ",n="schema"+o):n=s,!h&&"number"!=typeof s)throw new Error(t+" must be number");var p="maxLength"==t?">":"<";a+="if ( ",h&&(a+=" ("+n+" !== undefined && typeof "+n+" != 'number') || "),!1===e.opts.unicode?a+=" "+f+".length ":a+=" ucs2length("+f+") ",a+=" "+p+" "+n+") { ";var d=t,m=m||[];m.push(a),a="",!1!==e.createErrors?(a+=" { keyword: '"+(d||"_limitLength")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: { limit: "+n+" } ",!1!==e.opts.messages&&(a+=" , message: 'should NOT be ",a+="maxLength"==t?"longer":"shorter",a+=" than ",a+=h?"' + "+n+" + '":""+s,a+=" characters' "),e.opts.verbose&&(a+=" , schema: ",a+=h?"validate.schema"+c:""+s,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+f+" "),a+=" } "):a+=" {} ";var v=a;return a=m.pop(),!e.compositeRule&&l?e.async?a+=" throw new ValidationError(["+v+"]); ":a+=" validate.errors = ["+v+"]; return false; ":a+=" var err = "+v+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",l&&(a+=" else { "),a}},2596:e=>{"use strict";e.exports=function(e,t,r){var n,a=" ",o=e.level,i=e.dataLevel,s=e.schema[t],c=e.schemaPath+e.util.getProperty(t),u=e.errSchemaPath+"/"+t,l=!e.opts.allErrors,f="data"+(i||""),h=e.opts.$data&&s&&s.$data;if(h?(a+=" var schema"+o+" = "+e.util.getData(s.$data,i,e.dataPathArr)+"; ",n="schema"+o):n=s,!h&&"number"!=typeof s)throw new Error(t+" must be number");a+="if ( ",h&&(a+=" ("+n+" !== undefined && typeof "+n+" != 'number') || "),a+=" Object.keys("+f+").length "+("maxProperties"==t?">":"<")+" "+n+") { ";var p=t,d=d||[];d.push(a),a="",!1!==e.createErrors?(a+=" { keyword: '"+(p||"_limitProperties")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: { limit: "+n+" } ",!1!==e.opts.messages&&(a+=" , message: 'should NOT have ",a+="maxProperties"==t?"more":"fewer",a+=" than ",a+=h?"' + "+n+" + '":""+s,a+=" properties' "),e.opts.verbose&&(a+=" , schema: ",a+=h?"validate.schema"+c:""+s,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+f+" "),a+=" } "):a+=" {} ";var m=a;return a=d.pop(),!e.compositeRule&&l?e.async?a+=" throw new ValidationError(["+m+"]); ":a+=" validate.errors = ["+m+"]; return false; ":a+=" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",l&&(a+=" else { "),a}},9486:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.schema[t],o=e.schemaPath+e.util.getProperty(t),i=e.errSchemaPath+"/"+t,s=!e.opts.allErrors,c=e.util.copy(e),u="";c.level++;var l="valid"+c.level,f=c.baseId,h=!0,p=a;if(p)for(var d,m=-1,v=p.length-1;m<v;)d=p[m+=1],(e.opts.strictKeywords?"object"==typeof d&&Object.keys(d).length>0||!1===d:e.util.schemaHasRules(d,e.RULES.all))&&(h=!1,c.schema=d,c.schemaPath=o+"["+m+"]",c.errSchemaPath=i+"/"+m,n+=" "+e.validate(c)+" ",c.baseId=f,s&&(n+=" if ("+l+") { ",u+="}"));return s&&(n+=h?" if (true) { ":" "+u.slice(0,-1)+" "),n}},5347:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="valid"+a,h="errs__"+a,p=e.util.copy(e),d="";p.level++;var m="valid"+p.level,v=i.every((function(t){return e.opts.strictKeywords?"object"==typeof t&&Object.keys(t).length>0||!1===t:e.util.schemaHasRules(t,e.RULES.all)}));if(v){var y=p.baseId;n+=" var "+h+" = errors; var "+f+" = false; ";var g=e.compositeRule;e.compositeRule=p.compositeRule=!0;var w=i;if(w)for(var b,E=-1,A=w.length-1;E<A;)b=w[E+=1],p.schema=b,p.schemaPath=s+"["+E+"]",p.errSchemaPath=c+"/"+E,n+=" "+e.validate(p)+" ",p.baseId=y,n+=" "+f+" = "+f+" || "+m+"; if (!"+f+") { ",d+="}";e.compositeRule=p.compositeRule=g,n+=" "+d+" if (!"+f+") { var err = ",!1!==e.createErrors?(n+=" { keyword: 'anyOf' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: {} ",!1!==e.opts.messages&&(n+=" , message: 'should match some schema in anyOf' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!e.compositeRule&&u&&(e.async?n+=" throw new ValidationError(vErrors); ":n+=" validate.errors = vErrors; return false; "),n+=" } else { errors = "+h+"; if (vErrors !== null) { if ("+h+") vErrors.length = "+h+"; else vErrors = null; } ",e.opts.allErrors&&(n+=" } ")}else u&&(n+=" if (true) { ");return n}},4767:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.schema[t],o=e.errSchemaPath+"/"+t,i=(e.opts.allErrors,e.util.toQuotedString(a));return!0===e.opts.$comment?n+=" console.log("+i+");":"function"==typeof e.opts.$comment&&(n+=" self._opts.$comment("+i+", "+e.util.toQuotedString(o)+", validate.root.schema);"),n}},2617:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="valid"+a,h=e.opts.$data&&i&&i.$data;h&&(n+=" var schema"+a+" = "+e.util.getData(i.$data,o,e.dataPathArr)+"; "),h||(n+=" var schema"+a+" = validate.schema"+s+";"),n+="var "+f+" = equal("+l+", schema"+a+"); if (!"+f+") { ";var p=p||[];p.push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'const' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { allowedValue: schema"+a+" } ",!1!==e.opts.messages&&(n+=" , message: 'should be equal to constant' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var d=n;return n=p.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+d+"]); ":n+=" validate.errors = ["+d+"]; return false; ":n+=" var err = "+d+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" }",u&&(n+=" else { "),n}},2119:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="valid"+a,h="errs__"+a,p=e.util.copy(e);p.level++;var d="valid"+p.level,m="i"+a,v=p.dataLevel=e.dataLevel+1,y="data"+v,g=e.baseId,w=e.opts.strictKeywords?"object"==typeof i&&Object.keys(i).length>0||!1===i:e.util.schemaHasRules(i,e.RULES.all);if(n+="var "+h+" = errors;var "+f+";",w){var b=e.compositeRule;e.compositeRule=p.compositeRule=!0,p.schema=i,p.schemaPath=s,p.errSchemaPath=c,n+=" var "+d+" = false; for (var "+m+" = 0; "+m+" < "+l+".length; "+m+"++) { ",p.errorPath=e.util.getPathExpr(e.errorPath,m,e.opts.jsonPointers,!0);var E=l+"["+m+"]";p.dataPathArr[v]=m;var A=e.validate(p);p.baseId=g,e.util.varOccurences(A,y)<2?n+=" "+e.util.varReplace(A,y,E)+" ":n+=" var "+y+" = "+E+"; "+A+" ",n+=" if ("+d+") break; } ",e.compositeRule=p.compositeRule=b,n+=" if (!"+d+") {"}else n+=" if ("+l+".length == 0) {";var P=P||[];P.push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'contains' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: {} ",!1!==e.opts.messages&&(n+=" , message: 'should contain a valid item' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var x=n;return n=P.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+x+"]); ":n+=" validate.errors = ["+x+"]; return false; ":n+=" var err = "+x+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else { ",w&&(n+=" errors = "+h+"; if (vErrors !== null) { if ("+h+") vErrors.length = "+h+"; else vErrors = null; } "),e.opts.allErrors&&(n+=" } "),n}},1793:e=>{"use strict";e.exports=function(e,t,r){var n,a,o=" ",i=e.level,s=e.dataLevel,c=e.schema[t],u=e.schemaPath+e.util.getProperty(t),l=e.errSchemaPath+"/"+t,f=!e.opts.allErrors,h="data"+(s||""),p="valid"+i,d="errs__"+i,m=e.opts.$data&&c&&c.$data;m?(o+=" var schema"+i+" = "+e.util.getData(c.$data,s,e.dataPathArr)+"; ",a="schema"+i):a=c;var v,y,g,w,b,E=this,A="definition"+i,P=E.definition,x="";if(m&&P.$data){b="keywordValidate"+i;var S=P.validateSchema;o+=" var "+A+" = RULES.custom['"+t+"'].definition; var "+b+" = "+A+".validate;"}else{if(!(w=e.useCustomRule(E,c,e.schema,e)))return;a="validate.schema"+u,b=w.code,v=P.compile,y=P.inline,g=P.macro}var O=b+".errors",_="i"+i,I="ruleErr"+i,R=P.async;if(R&&!e.async)throw new Error("async keyword in sync schema");if(y||g||(o+=O+" = null;"),o+="var "+d+" = errors;var "+p+";",m&&P.$data&&(x+="}",o+=" if ("+a+" === undefined) { "+p+" = true; } else { ",S&&(x+="}",o+=" "+p+" = "+A+".validateSchema("+a+"); if ("+p+") { ")),y)P.statements?o+=" "+w.validate+" ":o+=" "+p+" = "+w.validate+"; ";else if(g){var j=e.util.copy(e);x="",j.level++;var D="valid"+j.level;j.schema=w.validate,j.schemaPath="";var $=e.compositeRule;e.compositeRule=j.compositeRule=!0;var L=e.validate(j).replace(/validate\.schema/g,b);e.compositeRule=j.compositeRule=$,o+=" "+L}else{(T=T||[]).push(o),o="",o+=" "+b+".call( ",e.opts.passContext?o+="this":o+="self",v||!1===P.schema?o+=" , "+h+" ":o+=" , "+a+" , "+h+" , validate.schema"+e.schemaPath+" ",o+=" , (dataPath || '')",'""'!=e.errorPath&&(o+=" + "+e.errorPath);var k=s?"data"+(s-1||""):"parentData",F=s?e.dataPathArr[s]:"parentDataProperty",C=o+=" , "+k+" , "+F+" , rootData ) ";o=T.pop(),!1===P.errors?(o+=" "+p+" = ",R&&(o+="await "),o+=C+"; "):o+=R?" var "+(O="customErrors"+i)+" = null; try { "+p+" = await "+C+"; } catch (e) { "+p+" = false; if (e instanceof ValidationError) "+O+" = e.errors; else throw e; } ":" "+O+" = null; "+p+" = "+C+"; "}if(P.modifying&&(o+=" if ("+k+") "+h+" = "+k+"["+F+"];"),o+=""+x,P.valid)f&&(o+=" if (true) { ");else{var T;o+=" if ( ",void 0===P.valid?(o+=" !",o+=g?""+D:""+p):o+=" "+!P.valid+" ",o+=") { ",n=E.keyword,(T=T||[]).push(o),o="",(T=T||[]).push(o),o="",!1!==e.createErrors?(o+=" { keyword: '"+(n||"custom")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { keyword: '"+E.keyword+"' } ",!1!==e.opts.messages&&(o+=" , message: 'should pass \""+E.keyword+"\" keyword validation' "),e.opts.verbose&&(o+=" , schema: validate.schema"+u+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),o+=" } "):o+=" {} ";var N=o;o=T.pop(),!e.compositeRule&&f?e.async?o+=" throw new ValidationError(["+N+"]); ":o+=" validate.errors = ["+N+"]; return false; ":o+=" var err = "+N+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";var B=o;o=T.pop(),y?P.errors?"full"!=P.errors&&(o+=" for (var "+_+"="+d+"; "+_+"<errors; "+_+"++) { var "+I+" = vErrors["+_+"]; if ("+I+".dataPath === undefined) "+I+".dataPath = (dataPath || '') + "+e.errorPath+"; if ("+I+".schemaPath === undefined) { "+I+'.schemaPath = "'+l+'"; } ',e.opts.verbose&&(o+=" "+I+".schema = "+a+"; "+I+".data = "+h+"; "),o+=" } "):!1===P.errors?o+=" "+B+" ":(o+=" if ("+d+" == errors) { "+B+" } else { for (var "+_+"="+d+"; "+_+"<errors; "+_+"++) { var "+I+" = vErrors["+_+"]; if ("+I+".dataPath === undefined) "+I+".dataPath = (dataPath || '') + "+e.errorPath+"; if ("+I+".schemaPath === undefined) { "+I+'.schemaPath = "'+l+'"; } ',e.opts.verbose&&(o+=" "+I+".schema = "+a+"; "+I+".data = "+h+"; "),o+=" } } "):g?(o+=" var err = ",!1!==e.createErrors?(o+=" { keyword: '"+(n||"custom")+"' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(l)+" , params: { keyword: '"+E.keyword+"' } ",!1!==e.opts.messages&&(o+=" , message: 'should pass \""+E.keyword+"\" keyword validation' "),e.opts.verbose&&(o+=" , schema: validate.schema"+u+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+h+" "),o+=" } "):o+=" {} ",o+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!e.compositeRule&&f&&(e.async?o+=" throw new ValidationError(vErrors); ":o+=" validate.errors = vErrors; return false; ")):!1===P.errors?o+=" "+B+" ":(o+=" if (Array.isArray("+O+")) { if (vErrors === null) vErrors = "+O+"; else vErrors = vErrors.concat("+O+"); errors = vErrors.length; for (var "+_+"="+d+"; "+_+"<errors; "+_+"++) { var "+I+" = vErrors["+_+"]; if ("+I+".dataPath === undefined) "+I+".dataPath = (dataPath || '') + "+e.errorPath+"; "+I+'.schemaPath = "'+l+'"; ',e.opts.verbose&&(o+=" "+I+".schema = "+a+"; "+I+".data = "+h+"; "),o+=" } } else { "+B+" } "),o+=" } ",f&&(o+=" else { ")}return o}},9115:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="errs__"+a,h=e.util.copy(e),p="";h.level++;var d="valid"+h.level,m={},v={},y=e.opts.ownProperties;for(E in i)if("__proto__"!=E){var g=i[E],w=Array.isArray(g)?v:m;w[E]=g}n+="var "+f+" = errors;";var b=e.errorPath;for(var E in n+="var missing"+a+";",v)if((w=v[E]).length){if(n+=" if ( "+l+e.util.getProperty(E)+" !== undefined ",y&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", '"+e.util.escapeQuotes(E)+"') "),u){n+=" && ( ";var A=w;if(A)for(var P=-1,x=A.length-1;P<x;)j=A[P+=1],P&&(n+=" || "),n+=" ( ( "+(k=l+(L=e.util.getProperty(j)))+" === undefined ",y&&(n+=" || ! Object.prototype.hasOwnProperty.call("+l+", '"+e.util.escapeQuotes(j)+"') "),n+=") && (missing"+a+" = "+e.util.toQuotedString(e.opts.jsonPointers?j:L)+") ) ";n+=")) { ";var S="missing"+a,O="' + "+S+" + '";e.opts._errorDataPathProperty&&(e.errorPath=e.opts.jsonPointers?e.util.getPathExpr(b,S,!0):b+" + "+S);var _=_||[];_.push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'dependencies' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { property: '"+e.util.escapeQuotes(E)+"', missingProperty: '"+O+"', depsCount: "+w.length+", deps: '"+e.util.escapeQuotes(1==w.length?w[0]:w.join(", "))+"' } ",!1!==e.opts.messages&&(n+=" , message: 'should have ",1==w.length?n+="property "+e.util.escapeQuotes(w[0]):n+="properties "+e.util.escapeQuotes(w.join(", ")),n+=" when property "+e.util.escapeQuotes(E)+" is present' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var I=n;n=_.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+I+"]); ":n+=" validate.errors = ["+I+"]; return false; ":n+=" var err = "+I+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}else{n+=" ) { ";var R=w;if(R)for(var j,D=-1,$=R.length-1;D<$;){j=R[D+=1];var L=e.util.getProperty(j),k=(O=e.util.escapeQuotes(j),l+L);e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPath(b,j,e.opts.jsonPointers)),n+=" if ( "+k+" === undefined ",y&&(n+=" || ! Object.prototype.hasOwnProperty.call("+l+", '"+e.util.escapeQuotes(j)+"') "),n+=") { var err = ",!1!==e.createErrors?(n+=" { keyword: 'dependencies' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { property: '"+e.util.escapeQuotes(E)+"', missingProperty: '"+O+"', depsCount: "+w.length+", deps: '"+e.util.escapeQuotes(1==w.length?w[0]:w.join(", "))+"' } ",!1!==e.opts.messages&&(n+=" , message: 'should have ",1==w.length?n+="property "+e.util.escapeQuotes(w[0]):n+="properties "+e.util.escapeQuotes(w.join(", ")),n+=" when property "+e.util.escapeQuotes(E)+" is present' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } "}}n+=" } ",u&&(p+="}",n+=" else { ")}e.errorPath=b;var F=h.baseId;for(var E in m)g=m[E],(e.opts.strictKeywords?"object"==typeof g&&Object.keys(g).length>0||!1===g:e.util.schemaHasRules(g,e.RULES.all))&&(n+=" "+d+" = true; if ( "+l+e.util.getProperty(E)+" !== undefined ",y&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", '"+e.util.escapeQuotes(E)+"') "),n+=") { ",h.schema=g,h.schemaPath=s+e.util.getProperty(E),h.errSchemaPath=c+"/"+e.util.escapeFragment(E),n+=" "+e.validate(h)+" ",h.baseId=F,n+=" } ",u&&(n+=" if ("+d+") { ",p+="}"));return u&&(n+=" "+p+" if ("+f+" == errors) {"),n}},9317:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="valid"+a,h=e.opts.$data&&i&&i.$data;h&&(n+=" var schema"+a+" = "+e.util.getData(i.$data,o,e.dataPathArr)+"; ");var p="i"+a,d="schema"+a;h||(n+=" var "+d+" = validate.schema"+s+";"),n+="var "+f+";",h&&(n+=" if (schema"+a+" === undefined) "+f+" = true; else if (!Array.isArray(schema"+a+")) "+f+" = false; else {"),n+=f+" = false;for (var "+p+"=0; "+p+"<"+d+".length; "+p+"++) if (equal("+l+", "+d+"["+p+"])) { "+f+" = true; break; }",h&&(n+=" } "),n+=" if (!"+f+") { ";var m=m||[];m.push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'enum' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { allowedValues: schema"+a+" } ",!1!==e.opts.messages&&(n+=" , message: 'should be equal to one of the allowed values' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var v=n;return n=m.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+v+"]); ":n+=" validate.errors = ["+v+"]; return false; ":n+=" var err = "+v+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" }",u&&(n+=" else { "),n}},8327:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||"");if(!1===e.opts.format)return u&&(n+=" if (true) { "),n;var f,h=e.opts.$data&&i&&i.$data;h?(n+=" var schema"+a+" = "+e.util.getData(i.$data,o,e.dataPathArr)+"; ",f="schema"+a):f=i;var p=e.opts.unknownFormats,d=Array.isArray(p);if(h)n+=" var "+(m="format"+a)+" = formats["+f+"]; var "+(v="isObject"+a)+" = typeof "+m+" == 'object' && !("+m+" instanceof RegExp) && "+m+".validate; var "+(y="formatType"+a)+" = "+v+" && "+m+".type || 'string'; if ("+v+") { ",e.async&&(n+=" var async"+a+" = "+m+".async; "),n+=" "+m+" = "+m+".validate; } if ( ",h&&(n+=" ("+f+" !== undefined && typeof "+f+" != 'string') || "),n+=" (","ignore"!=p&&(n+=" ("+f+" && !"+m+" ",d&&(n+=" && self._opts.unknownFormats.indexOf("+f+") == -1 "),n+=") || "),n+=" ("+m+" && "+y+" == '"+r+"' && !(typeof "+m+" == 'function' ? ",e.async?n+=" (async"+a+" ? await "+m+"("+l+") : "+m+"("+l+")) ":n+=" "+m+"("+l+") ",n+=" : "+m+".test("+l+"))))) {";else{var m;if(!(m=e.formats[i])){if("ignore"==p)return e.logger.warn('unknown format "'+i+'" ignored in schema at path "'+e.errSchemaPath+'"'),u&&(n+=" if (true) { "),n;if(d&&p.indexOf(i)>=0)return u&&(n+=" if (true) { "),n;throw new Error('unknown format "'+i+'" is used in schema at path "'+e.errSchemaPath+'"')}var v,y=(v="object"==typeof m&&!(m instanceof RegExp)&&m.validate)&&m.type||"string";if(v){var g=!0===m.async;m=m.validate}if(y!=r)return u&&(n+=" if (true) { "),n;if(g){if(!e.async)throw new Error("async format in sync schema");n+=" if (!(await "+(w="formats"+e.util.getProperty(i)+".validate")+"("+l+"))) { "}else{n+=" if (! ";var w="formats"+e.util.getProperty(i);v&&(w+=".validate"),n+="function"==typeof m?" "+w+"("+l+") ":" "+w+".test("+l+") ",n+=") { "}}var b=b||[];b.push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'format' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { format: ",n+=h?""+f:""+e.util.toQuotedString(i),n+=" } ",!1!==e.opts.messages&&(n+=" , message: 'should match format \"",n+=h?"' + "+f+" + '":""+e.util.escapeQuotes(i),n+="\"' "),e.opts.verbose&&(n+=" , schema: ",n+=h?"validate.schema"+s:""+e.util.toQuotedString(i),n+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var E=n;return n=b.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+E+"]); ":n+=" validate.errors = ["+E+"]; return false; ":n+=" var err = "+E+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",u&&(n+=" else { "),n}},5926:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="valid"+a,h="errs__"+a,p=e.util.copy(e);p.level++;var d="valid"+p.level,m=e.schema.then,v=e.schema.else,y=void 0!==m&&(e.opts.strictKeywords?"object"==typeof m&&Object.keys(m).length>0||!1===m:e.util.schemaHasRules(m,e.RULES.all)),g=void 0!==v&&(e.opts.strictKeywords?"object"==typeof v&&Object.keys(v).length>0||!1===v:e.util.schemaHasRules(v,e.RULES.all)),w=p.baseId;if(y||g){var b;p.createErrors=!1,p.schema=i,p.schemaPath=s,p.errSchemaPath=c,n+=" var "+h+" = errors; var "+f+" = true; ";var E=e.compositeRule;e.compositeRule=p.compositeRule=!0,n+=" "+e.validate(p)+" ",p.baseId=w,p.createErrors=!0,n+=" errors = "+h+"; if (vErrors !== null) { if ("+h+") vErrors.length = "+h+"; else vErrors = null; } ",e.compositeRule=p.compositeRule=E,y?(n+=" if ("+d+") { ",p.schema=e.schema.then,p.schemaPath=e.schemaPath+".then",p.errSchemaPath=e.errSchemaPath+"/then",n+=" "+e.validate(p)+" ",p.baseId=w,n+=" "+f+" = "+d+"; ",y&&g?n+=" var "+(b="ifClause"+a)+" = 'then'; ":b="'then'",n+=" } ",g&&(n+=" else { ")):n+=" if (!"+d+") { ",g&&(p.schema=e.schema.else,p.schemaPath=e.schemaPath+".else",p.errSchemaPath=e.errSchemaPath+"/else",n+=" "+e.validate(p)+" ",p.baseId=w,n+=" "+f+" = "+d+"; ",y&&g?n+=" var "+(b="ifClause"+a)+" = 'else'; ":b="'else'",n+=" } "),n+=" if (!"+f+") { var err = ",!1!==e.createErrors?(n+=" { keyword: 'if' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { failingKeyword: "+b+" } ",!1!==e.opts.messages&&(n+=" , message: 'should match \"' + "+b+" + '\" schema' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!e.compositeRule&&u&&(e.async?n+=" throw new ValidationError(vErrors); ":n+=" validate.errors = vErrors; return false; "),n+=" } ",u&&(n+=" else { ")}else u&&(n+=" if (true) { ");return n}},9646:(e,t,r)=>{"use strict";e.exports={$ref:r(2331),allOf:r(9486),anyOf:r(5347),$comment:r(4767),const:r(2617),contains:r(2119),dependencies:r(9115),enum:r(9317),format:r(8327),if:r(5926),items:r(392),maximum:r(1796),minimum:r(1796),maxItems:r(2407),minItems:r(2407),maxLength:r(1250),minLength:r(1250),maxProperties:r(2596),minProperties:r(2596),multipleOf:r(6039),not:r(7946),oneOf:r(9344),pattern:r(9737),properties:r(2537),propertyNames:r(2127),required:r(1204),uniqueItems:r(1985),validate:r(1869)}},392:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="valid"+a,h="errs__"+a,p=e.util.copy(e),d="";p.level++;var m="valid"+p.level,v="i"+a,y=p.dataLevel=e.dataLevel+1,g="data"+y,w=e.baseId;if(n+="var "+h+" = errors;var "+f+";",Array.isArray(i)){var b=e.schema.additionalItems;if(!1===b){n+=" "+f+" = "+l+".length <= "+i.length+"; ";var E=c;c=e.errSchemaPath+"/additionalItems",n+=" if (!"+f+") { ";var A=A||[];A.push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'additionalItems' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { limit: "+i.length+" } ",!1!==e.opts.messages&&(n+=" , message: 'should NOT have more than "+i.length+" items' "),e.opts.verbose&&(n+=" , schema: false , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var P=n;n=A.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+P+"]); ":n+=" validate.errors = ["+P+"]; return false; ":n+=" var err = "+P+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ",c=E,u&&(d+="}",n+=" else { ")}var x=i;if(x)for(var S,O=-1,_=x.length-1;O<_;)if(S=x[O+=1],e.opts.strictKeywords?"object"==typeof S&&Object.keys(S).length>0||!1===S:e.util.schemaHasRules(S,e.RULES.all)){n+=" "+m+" = true; if ("+l+".length > "+O+") { ";var I=l+"["+O+"]";p.schema=S,p.schemaPath=s+"["+O+"]",p.errSchemaPath=c+"/"+O,p.errorPath=e.util.getPathExpr(e.errorPath,O,e.opts.jsonPointers,!0),p.dataPathArr[y]=O;var R=e.validate(p);p.baseId=w,e.util.varOccurences(R,g)<2?n+=" "+e.util.varReplace(R,g,I)+" ":n+=" var "+g+" = "+I+"; "+R+" ",n+=" } ",u&&(n+=" if ("+m+") { ",d+="}")}"object"==typeof b&&(e.opts.strictKeywords?"object"==typeof b&&Object.keys(b).length>0||!1===b:e.util.schemaHasRules(b,e.RULES.all))&&(p.schema=b,p.schemaPath=e.schemaPath+".additionalItems",p.errSchemaPath=e.errSchemaPath+"/additionalItems",n+=" "+m+" = true; if ("+l+".length > "+i.length+") { for (var "+v+" = "+i.length+"; "+v+" < "+l+".length; "+v+"++) { ",p.errorPath=e.util.getPathExpr(e.errorPath,v,e.opts.jsonPointers,!0),I=l+"["+v+"]",p.dataPathArr[y]=v,R=e.validate(p),p.baseId=w,e.util.varOccurences(R,g)<2?n+=" "+e.util.varReplace(R,g,I)+" ":n+=" var "+g+" = "+I+"; "+R+" ",u&&(n+=" if (!"+m+") break; "),n+=" } } ",u&&(n+=" if ("+m+") { ",d+="}"))}else(e.opts.strictKeywords?"object"==typeof i&&Object.keys(i).length>0||!1===i:e.util.schemaHasRules(i,e.RULES.all))&&(p.schema=i,p.schemaPath=s,p.errSchemaPath=c,n+=" for (var "+v+" = 0; "+v+" < "+l+".length; "+v+"++) { ",p.errorPath=e.util.getPathExpr(e.errorPath,v,e.opts.jsonPointers,!0),I=l+"["+v+"]",p.dataPathArr[y]=v,R=e.validate(p),p.baseId=w,e.util.varOccurences(R,g)<2?n+=" "+e.util.varReplace(R,g,I)+" ":n+=" var "+g+" = "+I+"; "+R+" ",u&&(n+=" if (!"+m+") break; "),n+=" }");return u&&(n+=" "+d+" if ("+h+" == errors) {"),n}},6039:e=>{"use strict";e.exports=function(e,t,r){var n,a=" ",o=e.level,i=e.dataLevel,s=e.schema[t],c=e.schemaPath+e.util.getProperty(t),u=e.errSchemaPath+"/"+t,l=!e.opts.allErrors,f="data"+(i||""),h=e.opts.$data&&s&&s.$data;if(h?(a+=" var schema"+o+" = "+e.util.getData(s.$data,i,e.dataPathArr)+"; ",n="schema"+o):n=s,!h&&"number"!=typeof s)throw new Error(t+" must be number");a+="var division"+o+";if (",h&&(a+=" "+n+" !== undefined && ( typeof "+n+" != 'number' || "),a+=" (division"+o+" = "+f+" / "+n+", ",e.opts.multipleOfPrecision?a+=" Math.abs(Math.round(division"+o+") - division"+o+") > 1e-"+e.opts.multipleOfPrecision+" ":a+=" division"+o+" !== parseInt(division"+o+") ",a+=" ) ",h&&(a+=" ) "),a+=" ) { ";var p=p||[];p.push(a),a="",!1!==e.createErrors?(a+=" { keyword: 'multipleOf' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: { multipleOf: "+n+" } ",!1!==e.opts.messages&&(a+=" , message: 'should be multiple of ",a+=h?"' + "+n:n+"'"),e.opts.verbose&&(a+=" , schema: ",a+=h?"validate.schema"+c:""+s,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+f+" "),a+=" } "):a+=" {} ";var d=a;return a=p.pop(),!e.compositeRule&&l?e.async?a+=" throw new ValidationError(["+d+"]); ":a+=" validate.errors = ["+d+"]; return false; ":a+=" var err = "+d+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",l&&(a+=" else { "),a}},7946:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="errs__"+a,h=e.util.copy(e);h.level++;var p="valid"+h.level;if(e.opts.strictKeywords?"object"==typeof i&&Object.keys(i).length>0||!1===i:e.util.schemaHasRules(i,e.RULES.all)){h.schema=i,h.schemaPath=s,h.errSchemaPath=c,n+=" var "+f+" = errors; ";var d,m=e.compositeRule;e.compositeRule=h.compositeRule=!0,h.createErrors=!1,h.opts.allErrors&&(d=h.opts.allErrors,h.opts.allErrors=!1),n+=" "+e.validate(h)+" ",h.createErrors=!0,d&&(h.opts.allErrors=d),e.compositeRule=h.compositeRule=m,n+=" if ("+p+") { ";var v=v||[];v.push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'not' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: {} ",!1!==e.opts.messages&&(n+=" , message: 'should NOT be valid' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var y=n;n=v.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+y+"]); ":n+=" validate.errors = ["+y+"]; return false; ":n+=" var err = "+y+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else { errors = "+f+"; if (vErrors !== null) { if ("+f+") vErrors.length = "+f+"; else vErrors = null; } ",e.opts.allErrors&&(n+=" } ")}else n+=" var err = ",!1!==e.createErrors?(n+=" { keyword: 'not' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: {} ",!1!==e.opts.messages&&(n+=" , message: 'should NOT be valid' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",u&&(n+=" if (false) { ");return n}},9344:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="valid"+a,h="errs__"+a,p=e.util.copy(e),d="";p.level++;var m="valid"+p.level,v=p.baseId,y="prevValid"+a,g="passingSchemas"+a;n+="var "+h+" = errors , "+y+" = false , "+f+" = false , "+g+" = null; ";var w=e.compositeRule;e.compositeRule=p.compositeRule=!0;var b=i;if(b)for(var E,A=-1,P=b.length-1;A<P;)E=b[A+=1],(e.opts.strictKeywords?"object"==typeof E&&Object.keys(E).length>0||!1===E:e.util.schemaHasRules(E,e.RULES.all))?(p.schema=E,p.schemaPath=s+"["+A+"]",p.errSchemaPath=c+"/"+A,n+=" "+e.validate(p)+" ",p.baseId=v):n+=" var "+m+" = true; ",A&&(n+=" if ("+m+" && "+y+") { "+f+" = false; "+g+" = ["+g+", "+A+"]; } else { ",d+="}"),n+=" if ("+m+") { "+f+" = "+y+" = true; "+g+" = "+A+"; }";return e.compositeRule=p.compositeRule=w,n+=d+"if (!"+f+") { var err = ",!1!==e.createErrors?(n+=" { keyword: 'oneOf' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { passingSchemas: "+g+" } ",!1!==e.opts.messages&&(n+=" , message: 'should match exactly one schema in oneOf' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!e.compositeRule&&u&&(e.async?n+=" throw new ValidationError(vErrors); ":n+=" validate.errors = vErrors; return false; "),n+="} else { errors = "+h+"; if (vErrors !== null) { if ("+h+") vErrors.length = "+h+"; else vErrors = null; }",e.opts.allErrors&&(n+=" } "),n}},9737:e=>{"use strict";e.exports=function(e,t,r){var n,a=" ",o=e.level,i=e.dataLevel,s=e.schema[t],c=e.schemaPath+e.util.getProperty(t),u=e.errSchemaPath+"/"+t,l=!e.opts.allErrors,f="data"+(i||""),h=e.opts.$data&&s&&s.$data;h?(a+=" var schema"+o+" = "+e.util.getData(s.$data,i,e.dataPathArr)+"; ",n="schema"+o):n=s,a+="if ( ",h&&(a+=" ("+n+" !== undefined && typeof "+n+" != 'string') || "),a+=" !"+(h?"(new RegExp("+n+"))":e.usePattern(s))+".test("+f+") ) { ";var p=p||[];p.push(a),a="",!1!==e.createErrors?(a+=" { keyword: 'pattern' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: { pattern: ",a+=h?""+n:""+e.util.toQuotedString(s),a+=" } ",!1!==e.opts.messages&&(a+=" , message: 'should match pattern \"",a+=h?"' + "+n+" + '":""+e.util.escapeQuotes(s),a+="\"' "),e.opts.verbose&&(a+=" , schema: ",a+=h?"validate.schema"+c:""+e.util.toQuotedString(s),a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+f+" "),a+=" } "):a+=" {} ";var d=a;return a=p.pop(),!e.compositeRule&&l?e.async?a+=" throw new ValidationError(["+d+"]); ":a+=" validate.errors = ["+d+"]; return false; ":a+=" var err = "+d+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+="} ",l&&(a+=" else { "),a}},2537:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="errs__"+a,h=e.util.copy(e),p="";h.level++;var d="valid"+h.level,m="key"+a,v="idx"+a,y=h.dataLevel=e.dataLevel+1,g="data"+y,w="dataProperties"+a,b=Object.keys(i||{}).filter(L),E=e.schema.patternProperties||{},A=Object.keys(E).filter(L),P=e.schema.additionalProperties,x=b.length||A.length,S=!1===P,O="object"==typeof P&&Object.keys(P).length,_=e.opts.removeAdditional,I=S||O||_,R=e.opts.ownProperties,j=e.baseId,D=e.schema.required;if(D&&(!e.opts.$data||!D.$data)&&D.length<e.opts.loopRequired)var $=e.util.toHash(D);function L(e){return"__proto__"!==e}if(n+="var "+f+" = errors;var "+d+" = true;",R&&(n+=" var "+w+" = undefined;"),I){if(n+=R?" "+w+" = "+w+" || Object.keys("+l+"); for (var "+v+"=0; "+v+"<"+w+".length; "+v+"++) { var "+m+" = "+w+"["+v+"]; ":" for (var "+m+" in "+l+") { ",x){if(n+=" var isAdditional"+a+" = !(false ",b.length)if(b.length>8)n+=" || validate.schema"+s+".hasOwnProperty("+m+") ";else{var k=b;if(k)for(var F=-1,C=k.length-1;F<C;)Q=k[F+=1],n+=" || "+m+" == "+e.util.toQuotedString(Q)+" "}if(A.length){var T=A;if(T)for(var N=-1,B=T.length-1;N<B;)oe=T[N+=1],n+=" || "+e.usePattern(oe)+".test("+m+") "}n+=" ); if (isAdditional"+a+") { "}if("all"==_)n+=" delete "+l+"["+m+"]; ";else{var M=e.errorPath,U="' + "+m+" + '";if(e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPathExpr(e.errorPath,m,e.opts.jsonPointers)),S)if(_)n+=" delete "+l+"["+m+"]; ";else{n+=" "+d+" = false; ";var V=c;c=e.errSchemaPath+"/additionalProperties",(re=re||[]).push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'additionalProperties' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { additionalProperty: '"+U+"' } ",!1!==e.opts.messages&&(n+=" , message: '",e.opts._errorDataPathProperty?n+="is an invalid additional property":n+="should NOT have additional properties",n+="' "),e.opts.verbose&&(n+=" , schema: false , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var q=n;n=re.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+q+"]); ":n+=" validate.errors = ["+q+"]; return false; ":n+=" var err = "+q+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",c=V,u&&(n+=" break; ")}else if(O)if("failing"==_){n+=" var "+f+" = errors; ";var K=e.compositeRule;e.compositeRule=h.compositeRule=!0,h.schema=P,h.schemaPath=e.schemaPath+".additionalProperties",h.errSchemaPath=e.errSchemaPath+"/additionalProperties",h.errorPath=e.opts._errorDataPathProperty?e.errorPath:e.util.getPathExpr(e.errorPath,m,e.opts.jsonPointers);var Y=l+"["+m+"]";h.dataPathArr[y]=m;var z=e.validate(h);h.baseId=j,e.util.varOccurences(z,g)<2?n+=" "+e.util.varReplace(z,g,Y)+" ":n+=" var "+g+" = "+Y+"; "+z+" ",n+=" if (!"+d+") { errors = "+f+"; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete "+l+"["+m+"]; } ",e.compositeRule=h.compositeRule=K}else h.schema=P,h.schemaPath=e.schemaPath+".additionalProperties",h.errSchemaPath=e.errSchemaPath+"/additionalProperties",h.errorPath=e.opts._errorDataPathProperty?e.errorPath:e.util.getPathExpr(e.errorPath,m,e.opts.jsonPointers),Y=l+"["+m+"]",h.dataPathArr[y]=m,z=e.validate(h),h.baseId=j,e.util.varOccurences(z,g)<2?n+=" "+e.util.varReplace(z,g,Y)+" ":n+=" var "+g+" = "+Y+"; "+z+" ",u&&(n+=" if (!"+d+") break; ");e.errorPath=M}x&&(n+=" } "),n+=" } ",u&&(n+=" if ("+d+") { ",p+="}")}var G=e.opts.useDefaults&&!e.compositeRule;if(b.length){var H=b;if(H)for(var Q,J=-1,X=H.length-1;J<X;){var W=i[Q=H[J+=1]];if(e.opts.strictKeywords?"object"==typeof W&&Object.keys(W).length>0||!1===W:e.util.schemaHasRules(W,e.RULES.all)){var Z=e.util.getProperty(Q),ee=(Y=l+Z,G&&void 0!==W.default);if(h.schema=W,h.schemaPath=s+Z,h.errSchemaPath=c+"/"+e.util.escapeFragment(Q),h.errorPath=e.util.getPath(e.errorPath,Q,e.opts.jsonPointers),h.dataPathArr[y]=e.util.toQuotedString(Q),z=e.validate(h),h.baseId=j,e.util.varOccurences(z,g)<2){z=e.util.varReplace(z,g,Y);var te=Y}else te=g,n+=" var "+g+" = "+Y+"; ";if(ee)n+=" "+z+" ";else{if($&&$[Q]){n+=" if ( "+te+" === undefined ",R&&(n+=" || ! Object.prototype.hasOwnProperty.call("+l+", '"+e.util.escapeQuotes(Q)+"') "),n+=") { "+d+" = false; ",M=e.errorPath,V=c;var re,ne=e.util.escapeQuotes(Q);e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPath(M,Q,e.opts.jsonPointers)),c=e.errSchemaPath+"/required",(re=re||[]).push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'required' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { missingProperty: '"+ne+"' } ",!1!==e.opts.messages&&(n+=" , message: '",e.opts._errorDataPathProperty?n+="is a required property":n+="should have required property \\'"+ne+"\\'",n+="' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",q=n,n=re.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+q+"]); ":n+=" validate.errors = ["+q+"]; return false; ":n+=" var err = "+q+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",c=V,e.errorPath=M,n+=" } else { "}else u?(n+=" if ( "+te+" === undefined ",R&&(n+=" || ! Object.prototype.hasOwnProperty.call("+l+", '"+e.util.escapeQuotes(Q)+"') "),n+=") { "+d+" = true; } else { "):(n+=" if ("+te+" !== undefined ",R&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", '"+e.util.escapeQuotes(Q)+"') "),n+=" ) { ");n+=" "+z+" } "}}u&&(n+=" if ("+d+") { ",p+="}")}}if(A.length){var ae=A;if(ae)for(var oe,ie=-1,se=ae.length-1;ie<se;)W=E[oe=ae[ie+=1]],(e.opts.strictKeywords?"object"==typeof W&&Object.keys(W).length>0||!1===W:e.util.schemaHasRules(W,e.RULES.all))&&(h.schema=W,h.schemaPath=e.schemaPath+".patternProperties"+e.util.getProperty(oe),h.errSchemaPath=e.errSchemaPath+"/patternProperties/"+e.util.escapeFragment(oe),n+=R?" "+w+" = "+w+" || Object.keys("+l+"); for (var "+v+"=0; "+v+"<"+w+".length; "+v+"++) { var "+m+" = "+w+"["+v+"]; ":" for (var "+m+" in "+l+") { ",n+=" if ("+e.usePattern(oe)+".test("+m+")) { ",h.errorPath=e.util.getPathExpr(e.errorPath,m,e.opts.jsonPointers),Y=l+"["+m+"]",h.dataPathArr[y]=m,z=e.validate(h),h.baseId=j,e.util.varOccurences(z,g)<2?n+=" "+e.util.varReplace(z,g,Y)+" ":n+=" var "+g+" = "+Y+"; "+z+" ",u&&(n+=" if (!"+d+") break; "),n+=" } ",u&&(n+=" else "+d+" = true; "),n+=" } ",u&&(n+=" if ("+d+") { ",p+="}"))}return u&&(n+=" "+p+" if ("+f+" == errors) {"),n}},2127:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="errs__"+a,h=e.util.copy(e);h.level++;var p="valid"+h.level;if(n+="var "+f+" = errors;",e.opts.strictKeywords?"object"==typeof i&&Object.keys(i).length>0||!1===i:e.util.schemaHasRules(i,e.RULES.all)){h.schema=i,h.schemaPath=s,h.errSchemaPath=c;var d="key"+a,m="idx"+a,v="i"+a,y="' + "+d+" + '",g="data"+(h.dataLevel=e.dataLevel+1),w="dataProperties"+a,b=e.opts.ownProperties,E=e.baseId;b&&(n+=" var "+w+" = undefined; "),n+=b?" "+w+" = "+w+" || Object.keys("+l+"); for (var "+m+"=0; "+m+"<"+w+".length; "+m+"++) { var "+d+" = "+w+"["+m+"]; ":" for (var "+d+" in "+l+") { ",n+=" var startErrs"+a+" = errors; ";var A=d,P=e.compositeRule;e.compositeRule=h.compositeRule=!0;var x=e.validate(h);h.baseId=E,e.util.varOccurences(x,g)<2?n+=" "+e.util.varReplace(x,g,A)+" ":n+=" var "+g+" = "+A+"; "+x+" ",e.compositeRule=h.compositeRule=P,n+=" if (!"+p+") { for (var "+v+"=startErrs"+a+"; "+v+"<errors; "+v+"++) { vErrors["+v+"].propertyName = "+d+"; } var err = ",!1!==e.createErrors?(n+=" { keyword: 'propertyNames' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { propertyName: '"+y+"' } ",!1!==e.opts.messages&&(n+=" , message: 'property name \\'"+y+"\\' is invalid' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",!e.compositeRule&&u&&(e.async?n+=" throw new ValidationError(vErrors); ":n+=" validate.errors = vErrors; return false; "),u&&(n+=" break; "),n+=" } }"}return u&&(n+=" if ("+f+" == errors) {"),n}},2331:e=>{"use strict";e.exports=function(e,t,r){var n,a,o=" ",i=e.level,s=e.dataLevel,c=e.schema[t],u=e.errSchemaPath+"/"+t,l=!e.opts.allErrors,f="data"+(s||""),h="valid"+i;if("#"==c||"#/"==c)e.isRoot?(n=e.async,a="validate"):(n=!0===e.root.schema.$async,a="root.refVal[0]");else{var p=e.resolveRef(e.baseId,c,e.isRoot);if(void 0===p){var d=e.MissingRefError.message(e.baseId,c);if("fail"==e.opts.missingRefs){e.logger.error(d),(g=g||[]).push(o),o="",!1!==e.createErrors?(o+=" { keyword: '$ref' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: { ref: '"+e.util.escapeQuotes(c)+"' } ",!1!==e.opts.messages&&(o+=" , message: 'can\\'t resolve reference "+e.util.escapeQuotes(c)+"' "),e.opts.verbose&&(o+=" , schema: "+e.util.toQuotedString(c)+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+f+" "),o+=" } "):o+=" {} ";var m=o;o=g.pop(),!e.compositeRule&&l?e.async?o+=" throw new ValidationError(["+m+"]); ":o+=" validate.errors = ["+m+"]; return false; ":o+=" var err = "+m+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",l&&(o+=" if (false) { ")}else{if("ignore"!=e.opts.missingRefs)throw new e.MissingRefError(e.baseId,c,d);e.logger.warn(d),l&&(o+=" if (true) { ")}}else if(p.inline){var v=e.util.copy(e);v.level++;var y="valid"+v.level;v.schema=p.schema,v.schemaPath="",v.errSchemaPath=c,o+=" "+e.validate(v).replace(/validate\.schema/g,p.code)+" ",l&&(o+=" if ("+y+") { ")}else n=!0===p.$async||e.async&&!1!==p.$async,a=p.code}if(a){var g;(g=g||[]).push(o),o="",e.opts.passContext?o+=" "+a+".call(this, ":o+=" "+a+"( ",o+=" "+f+", (dataPath || '')",'""'!=e.errorPath&&(o+=" + "+e.errorPath);var w=o+=" , "+(s?"data"+(s-1||""):"parentData")+" , "+(s?e.dataPathArr[s]:"parentDataProperty")+", rootData) ";if(o=g.pop(),n){if(!e.async)throw new Error("async schema referenced by sync schema");l&&(o+=" var "+h+"; "),o+=" try { await "+w+"; ",l&&(o+=" "+h+" = true; "),o+=" } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; ",l&&(o+=" "+h+" = false; "),o+=" } ",l&&(o+=" if ("+h+") { ")}else o+=" if (!"+w+") { if (vErrors === null) vErrors = "+a+".errors; else vErrors = vErrors.concat("+a+".errors); errors = vErrors.length; } ",l&&(o+=" else { ")}return o}},1204:e=>{"use strict";e.exports=function(e,t,r){var n=" ",a=e.level,o=e.dataLevel,i=e.schema[t],s=e.schemaPath+e.util.getProperty(t),c=e.errSchemaPath+"/"+t,u=!e.opts.allErrors,l="data"+(o||""),f="valid"+a,h=e.opts.$data&&i&&i.$data;h&&(n+=" var schema"+a+" = "+e.util.getData(i.$data,o,e.dataPathArr)+"; ");var p="schema"+a;if(!h)if(i.length<e.opts.loopRequired&&e.schema.properties&&Object.keys(e.schema.properties).length){var d=[],m=i;if(m)for(var v,y=-1,g=m.length-1;y<g;){v=m[y+=1];var w=e.schema.properties[v];w&&(e.opts.strictKeywords?"object"==typeof w&&Object.keys(w).length>0||!1===w:e.util.schemaHasRules(w,e.RULES.all))||(d[d.length]=v)}}else d=i;if(h||d.length){var b=e.errorPath,E=h||d.length>=e.opts.loopRequired,A=e.opts.ownProperties;if(u)if(n+=" var missing"+a+"; ",E){h||(n+=" var "+p+" = validate.schema"+s+"; ");var P="' + "+(R="schema"+a+"["+(_="i"+a)+"]")+" + '";e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPathExpr(b,R,e.opts.jsonPointers)),n+=" var "+f+" = true; ",h&&(n+=" if (schema"+a+" === undefined) "+f+" = true; else if (!Array.isArray(schema"+a+")) "+f+" = false; else {"),n+=" for (var "+_+" = 0; "+_+" < "+p+".length; "+_+"++) { "+f+" = "+l+"["+p+"["+_+"]] !== undefined ",A&&(n+=" && Object.prototype.hasOwnProperty.call("+l+", "+p+"["+_+"]) "),n+="; if (!"+f+") break; } ",h&&(n+=" } "),n+=" if (!"+f+") { ",(S=S||[]).push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'required' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { missingProperty: '"+P+"' } ",!1!==e.opts.messages&&(n+=" , message: '",e.opts._errorDataPathProperty?n+="is a required property":n+="should have required property \\'"+P+"\\'",n+="' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ";var x=n;n=S.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+x+"]); ":n+=" validate.errors = ["+x+"]; return false; ":n+=" var err = "+x+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else { "}else{n+=" if ( ";var S,O=d;if(O)for(var _=-1,I=O.length-1;_<I;)D=O[_+=1],_&&(n+=" || "),n+=" ( ( "+(F=l+(k=e.util.getProperty(D)))+" === undefined ",A&&(n+=" || ! Object.prototype.hasOwnProperty.call("+l+", '"+e.util.escapeQuotes(D)+"') "),n+=") && (missing"+a+" = "+e.util.toQuotedString(e.opts.jsonPointers?D:k)+") ) ";n+=") { ",P="' + "+(R="missing"+a)+" + '",e.opts._errorDataPathProperty&&(e.errorPath=e.opts.jsonPointers?e.util.getPathExpr(b,R,!0):b+" + "+R),(S=S||[]).push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'required' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { missingProperty: '"+P+"' } ",!1!==e.opts.messages&&(n+=" , message: '",e.opts._errorDataPathProperty?n+="is a required property":n+="should have required property \\'"+P+"\\'",n+="' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",x=n,n=S.pop(),!e.compositeRule&&u?e.async?n+=" throw new ValidationError(["+x+"]); ":n+=" validate.errors = ["+x+"]; return false; ":n+=" var err = "+x+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } else { "}else if(E){var R;h||(n+=" var "+p+" = validate.schema"+s+"; "),P="' + "+(R="schema"+a+"["+(_="i"+a)+"]")+" + '",e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPathExpr(b,R,e.opts.jsonPointers)),h&&(n+=" if ("+p+" && !Array.isArray("+p+")) { var err = ",!1!==e.createErrors?(n+=" { keyword: 'required' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { missingProperty: '"+P+"' } ",!1!==e.opts.messages&&(n+=" , message: '",e.opts._errorDataPathProperty?n+="is a required property":n+="should have required property \\'"+P+"\\'",n+="' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if ("+p+" !== undefined) { "),n+=" for (var "+_+" = 0; "+_+" < "+p+".length; "+_+"++) { if ("+l+"["+p+"["+_+"]] === undefined ",A&&(n+=" || ! Object.prototype.hasOwnProperty.call("+l+", "+p+"["+_+"]) "),n+=") { var err = ",!1!==e.createErrors?(n+=" { keyword: 'required' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { missingProperty: '"+P+"' } ",!1!==e.opts.messages&&(n+=" , message: '",e.opts._errorDataPathProperty?n+="is a required property":n+="should have required property \\'"+P+"\\'",n+="' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } ",h&&(n+=" } ")}else{var j=d;if(j)for(var D,$=-1,L=j.length-1;$<L;){D=j[$+=1];var k=e.util.getProperty(D),F=(P=e.util.escapeQuotes(D),l+k);e.opts._errorDataPathProperty&&(e.errorPath=e.util.getPath(b,D,e.opts.jsonPointers)),n+=" if ( "+F+" === undefined ",A&&(n+=" || ! Object.prototype.hasOwnProperty.call("+l+", '"+e.util.escapeQuotes(D)+"') "),n+=") { var err = ",!1!==e.createErrors?(n+=" { keyword: 'required' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(c)+" , params: { missingProperty: '"+P+"' } ",!1!==e.opts.messages&&(n+=" , message: '",e.opts._errorDataPathProperty?n+="is a required property":n+="should have required property \\'"+P+"\\'",n+="' "),e.opts.verbose&&(n+=" , schema: validate.schema"+s+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+l+" "),n+=" } "):n+=" {} ",n+="; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } "}}e.errorPath=b}else u&&(n+=" if (true) {");return n}},1985:e=>{"use strict";e.exports=function(e,t,r){var n,a=" ",o=e.level,i=e.dataLevel,s=e.schema[t],c=e.schemaPath+e.util.getProperty(t),u=e.errSchemaPath+"/"+t,l=!e.opts.allErrors,f="data"+(i||""),h="valid"+o,p=e.opts.$data&&s&&s.$data;if(p?(a+=" var schema"+o+" = "+e.util.getData(s.$data,i,e.dataPathArr)+"; ",n="schema"+o):n=s,(s||p)&&!1!==e.opts.uniqueItems){p&&(a+=" var "+h+"; if ("+n+" === false || "+n+" === undefined) "+h+" = true; else if (typeof "+n+" != 'boolean') "+h+" = false; else { "),a+=" var i = "+f+".length , "+h+" = true , j; if (i > 1) { ";var d=e.schema.items&&e.schema.items.type,m=Array.isArray(d);if(!d||"object"==d||"array"==d||m&&(d.indexOf("object")>=0||d.indexOf("array")>=0))a+=" outer: for (;i--;) { for (j = i; j--;) { if (equal("+f+"[i], "+f+"[j])) { "+h+" = false; break outer; } } } ";else{a+=" var itemIndices = {}, item; for (;i--;) { var item = "+f+"[i]; ";var v="checkDataType"+(m?"s":"");a+=" if ("+e.util[v](d,"item",e.opts.strictNumbers,!0)+") continue; ",m&&(a+=" if (typeof item == 'string') item = '\"' + item; "),a+=" if (typeof itemIndices[item] == 'number') { "+h+" = false; j = itemIndices[item]; break; } itemIndices[item] = i; } "}a+=" } ",p&&(a+=" } "),a+=" if (!"+h+") { ";var y=y||[];y.push(a),a="",!1!==e.createErrors?(a+=" { keyword: 'uniqueItems' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(u)+" , params: { i: i, j: j } ",!1!==e.opts.messages&&(a+=" , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' "),e.opts.verbose&&(a+=" , schema: ",a+=p?"validate.schema"+c:""+s,a+=" , parentSchema: validate.schema"+e.schemaPath+" , data: "+f+" "),a+=" } "):a+=" {} ";var g=a;a=y.pop(),!e.compositeRule&&l?e.async?a+=" throw new ValidationError(["+g+"]); ":a+=" validate.errors = ["+g+"]; return false; ":a+=" var err = "+g+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",a+=" } ",l&&(a+=" else { ")}else l&&(a+=" if (true) { ");return a}},1869:e=>{"use strict";e.exports=function(e,t,r){var n="",a=!0===e.schema.$async,o=e.util.schemaHasRulesExcept(e.schema,e.RULES.all,"$ref"),i=e.self._getId(e.schema);if(e.opts.strictKeywords){var s=e.util.schemaUnknownRules(e.schema,e.RULES.keywords);if(s){var c="unknown keyword: "+s;if("log"!==e.opts.strictKeywords)throw new Error(c);e.logger.warn(c)}}if(e.isTop&&(n+=" var validate = ",a&&(e.async=!0,n+="async "),n+="function(data, dataPath, parentData, parentDataProperty, rootData) { 'use strict'; ",i&&(e.opts.sourceCode||e.opts.processCode)&&(n+=" /*# sourceURL="+i+" */ ")),"boolean"==typeof e.schema||!o&&!e.schema.$ref){t="false schema";var u=e.level,l=e.dataLevel,f=e.schema[t],h=e.schemaPath+e.util.getProperty(t),p=e.errSchemaPath+"/"+t,d=!e.opts.allErrors,m="data"+(l||""),v="valid"+u;if(!1===e.schema){e.isTop?d=!0:n+=" var "+v+" = false; ",(Y=Y||[]).push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'false schema' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(p)+" , params: {} ",!1!==e.opts.messages&&(n+=" , message: 'boolean schema is false' "),e.opts.verbose&&(n+=" , schema: false , parentSchema: validate.schema"+e.schemaPath+" , data: "+m+" "),n+=" } "):n+=" {} ";var y=n;n=Y.pop(),!e.compositeRule&&d?e.async?n+=" throw new ValidationError(["+y+"]); ":n+=" validate.errors = ["+y+"]; return false; ":n+=" var err = "+y+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; "}else e.isTop?n+=a?" return data; ":" validate.errors = null; return true; ":n+=" var "+v+" = true; ";return e.isTop&&(n+=" }; return validate; "),n}if(e.isTop){var g=e.isTop;if(u=e.level=0,l=e.dataLevel=0,m="data",e.rootId=e.resolve.fullPath(e.self._getId(e.root.schema)),e.baseId=e.baseId||e.rootId,delete e.isTop,e.dataPathArr=[""],void 0!==e.schema.default&&e.opts.useDefaults&&e.opts.strictDefaults){var w="default is ignored in the schema root";if("log"!==e.opts.strictDefaults)throw new Error(w);e.logger.warn(w)}n+=" var vErrors = null; ",n+=" var errors = 0; ",n+=" if (rootData === undefined) rootData = data; "}else{if(u=e.level,m="data"+((l=e.dataLevel)||""),i&&(e.baseId=e.resolve.url(e.baseId,i)),a&&!e.async)throw new Error("async schema in sync schema");n+=" var errs_"+u+" = errors;"}v="valid"+u,d=!e.opts.allErrors;var b="",E="",A=e.schema.type,P=Array.isArray(A);if(A&&e.opts.nullable&&!0===e.schema.nullable&&(P?-1==A.indexOf("null")&&(A=A.concat("null")):"null"!=A&&(A=[A,"null"],P=!0)),P&&1==A.length&&(A=A[0],P=!1),e.schema.$ref&&o){if("fail"==e.opts.extendRefs)throw new Error('$ref: validation keywords used in schema at path "'+e.errSchemaPath+'" (see option extendRefs)');!0!==e.opts.extendRefs&&(o=!1,e.logger.warn('$ref: keywords ignored in schema at path "'+e.errSchemaPath+'"'))}if(e.schema.$comment&&e.opts.$comment&&(n+=" "+e.RULES.all.$comment.code(e,"$comment")),A){if(e.opts.coerceTypes)var x=e.util.coerceToTypes(e.opts.coerceTypes,A);var S=e.RULES.types[A];if(x||P||!0===S||S&&!X(S)){h=e.schemaPath+".type",p=e.errSchemaPath+"/type",h=e.schemaPath+".type",p=e.errSchemaPath+"/type";var O=P?"checkDataTypes":"checkDataType";if(n+=" if ("+e.util[O](A,m,e.opts.strictNumbers,!0)+") { ",x){var _="dataType"+u,I="coerced"+u;n+=" var "+_+" = typeof "+m+"; var "+I+" = undefined; ","array"==e.opts.coerceTypes&&(n+=" if ("+_+" == 'object' && Array.isArray("+m+") && "+m+".length == 1) { "+m+" = "+m+"[0]; "+_+" = typeof "+m+"; if ("+e.util.checkDataType(e.schema.type,m,e.opts.strictNumbers)+") "+I+" = "+m+"; } "),n+=" if ("+I+" !== undefined) ; ";var R=x;if(R)for(var j,D=-1,$=R.length-1;D<$;)"string"==(j=R[D+=1])?n+=" else if ("+_+" == 'number' || "+_+" == 'boolean') "+I+" = '' + "+m+"; else if ("+m+" === null) "+I+" = ''; ":"number"==j||"integer"==j?(n+=" else if ("+_+" == 'boolean' || "+m+" === null || ("+_+" == 'string' && "+m+" && "+m+" == +"+m+" ","integer"==j&&(n+=" && !("+m+" % 1)"),n+=")) "+I+" = +"+m+"; "):"boolean"==j?n+=" else if ("+m+" === 'false' || "+m+" === 0 || "+m+" === null) "+I+" = false; else if ("+m+" === 'true' || "+m+" === 1) "+I+" = true; ":"null"==j?n+=" else if ("+m+" === '' || "+m+" === 0 || "+m+" === false) "+I+" = null; ":"array"==e.opts.coerceTypes&&"array"==j&&(n+=" else if ("+_+" == 'string' || "+_+" == 'number' || "+_+" == 'boolean' || "+m+" == null) "+I+" = ["+m+"]; ");n+=" else { ",(Y=Y||[]).push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'type' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(p)+" , params: { type: '",n+=P?""+A.join(","):""+A,n+="' } ",!1!==e.opts.messages&&(n+=" , message: 'should be ",n+=P?""+A.join(","):""+A,n+="' "),e.opts.verbose&&(n+=" , schema: validate.schema"+h+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+m+" "),n+=" } "):n+=" {} ",y=n,n=Y.pop(),!e.compositeRule&&d?e.async?n+=" throw new ValidationError(["+y+"]); ":n+=" validate.errors = ["+y+"]; return false; ":n+=" var err = "+y+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } if ("+I+" !== undefined) { ";var L=l?"data"+(l-1||""):"parentData";n+=" "+m+" = "+I+"; ",l||(n+="if ("+L+" !== undefined)"),n+=" "+L+"["+(l?e.dataPathArr[l]:"parentDataProperty")+"] = "+I+"; } "}else(Y=Y||[]).push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'type' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(p)+" , params: { type: '",n+=P?""+A.join(","):""+A,n+="' } ",!1!==e.opts.messages&&(n+=" , message: 'should be ",n+=P?""+A.join(","):""+A,n+="' "),e.opts.verbose&&(n+=" , schema: validate.schema"+h+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+m+" "),n+=" } "):n+=" {} ",y=n,n=Y.pop(),!e.compositeRule&&d?e.async?n+=" throw new ValidationError(["+y+"]); ":n+=" validate.errors = ["+y+"]; return false; ":n+=" var err = "+y+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";n+=" } "}}if(e.schema.$ref&&!o)n+=" "+e.RULES.all.$ref.code(e,"$ref")+" ",d&&(n+=" } if (errors === ",n+=g?"0":"errs_"+u,n+=") { ",E+="}");else{var k=e.RULES;if(k)for(var F=-1,C=k.length-1;F<C;)if(X(S=k[F+=1])){if(S.type&&(n+=" if ("+e.util.checkDataType(S.type,m,e.opts.strictNumbers)+") { "),e.opts.useDefaults)if("object"==S.type&&e.schema.properties){f=e.schema.properties;var T=Object.keys(f);if(T)for(var N,B=-1,M=T.length-1;B<M;)if(void 0!==(q=f[N=T[B+=1]]).default){var U=m+e.util.getProperty(N);if(e.compositeRule){if(e.opts.strictDefaults){if(w="default is ignored for: "+U,"log"!==e.opts.strictDefaults)throw new Error(w);e.logger.warn(w)}}else n+=" if ("+U+" === undefined ","empty"==e.opts.useDefaults&&(n+=" || "+U+" === null || "+U+" === '' "),n+=" ) "+U+" = ","shared"==e.opts.useDefaults?n+=" "+e.useDefault(q.default)+" ":n+=" "+JSON.stringify(q.default)+" ",n+="; "}}else if("array"==S.type&&Array.isArray(e.schema.items)){var V=e.schema.items;if(V){D=-1;for(var q,K=V.length-1;D<K;)if(void 0!==(q=V[D+=1]).default)if(U=m+"["+D+"]",e.compositeRule){if(e.opts.strictDefaults){if(w="default is ignored for: "+U,"log"!==e.opts.strictDefaults)throw new Error(w);e.logger.warn(w)}}else n+=" if ("+U+" === undefined ","empty"==e.opts.useDefaults&&(n+=" || "+U+" === null || "+U+" === '' "),n+=" ) "+U+" = ","shared"==e.opts.useDefaults?n+=" "+e.useDefault(q.default)+" ":n+=" "+JSON.stringify(q.default)+" ",n+="; "}}var Y,z=S.rules;if(z)for(var G,H=-1,Q=z.length-1;H<Q;)if(W(G=z[H+=1])){var J=G.code(e,G.keyword,S.type);J&&(n+=" "+J+" ",d&&(b+="}"))}if(d&&(n+=" "+b+" ",b=""),S.type&&(n+=" } ",A&&A===S.type&&!x))n+=" else { ",h=e.schemaPath+".type",p=e.errSchemaPath+"/type",(Y=Y||[]).push(n),n="",!1!==e.createErrors?(n+=" { keyword: 'type' , dataPath: (dataPath || '') + "+e.errorPath+" , schemaPath: "+e.util.toQuotedString(p)+" , params: { type: '",n+=P?""+A.join(","):""+A,n+="' } ",!1!==e.opts.messages&&(n+=" , message: 'should be ",n+=P?""+A.join(","):""+A,n+="' "),e.opts.verbose&&(n+=" , schema: validate.schema"+h+" , parentSchema: validate.schema"+e.schemaPath+" , data: "+m+" "),n+=" } "):n+=" {} ",y=n,n=Y.pop(),!e.compositeRule&&d?e.async?n+=" throw new ValidationError(["+y+"]); ":n+=" validate.errors = ["+y+"]; return false; ":n+=" var err = "+y+"; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ",n+=" } ";d&&(n+=" if (errors === ",n+=g?"0":"errs_"+u,n+=") { ",E+="}")}}function X(e){for(var t=e.rules,r=0;r<t.length;r++)if(W(t[r]))return!0}function W(t){return void 0!==e.schema[t.keyword]||t.implements&&function(t){for(var r=t.implements,n=0;n<r.length;n++)if(void 0!==e.schema[r[n]])return!0}(t)}return d&&(n+=" "+E+" "),g?(a?(n+=" if (errors === 0) return data; ",n+=" else throw new ValidationError(vErrors); "):(n+=" validate.errors = vErrors; ",n+=" return errors === 0; "),n+=" }; return validate;"):n+=" var "+v+" = errors === errs_"+u+";",n}},7931:(e,t,r)=>{"use strict";var n=/^[a-z_$][a-z0-9_$-]*$/i,a=r(1793),o=r(5868);e.exports={add:function(e,t){var r=this.RULES;if(r.keywords[e])throw new Error("Keyword "+e+" is already defined");if(!n.test(e))throw new Error("Keyword "+e+" is not a valid identifier");if(t){this.validateKeyword(t,!0);var o=t.type;if(Array.isArray(o))for(var i=0;i<o.length;i++)c(e,o[i],t);else c(e,o,t);var s=t.metaSchema;s&&(t.$data&&this._opts.$data&&(s={anyOf:[s,{$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"}]}),t.validateSchema=this.compile(s,!0))}function c(e,t,n){for(var o,i=0;i<r.length;i++){var s=r[i];if(s.type==t){o=s;break}}o||(o={type:t,rules:[]},r.push(o));var c={keyword:e,definition:n,custom:!0,code:a,implements:n.implements};o.rules.push(c),r.custom[e]=c}return r.keywords[e]=r.all[e]=!0,this},get:function(e){var t=this.RULES.custom[e];return t?t.definition:this.RULES.keywords[e]||!1},remove:function(e){var t=this.RULES;delete t.keywords[e],delete t.all[e],delete t.custom[e];for(var r=0;r<t.length;r++)for(var n=t[r].rules,a=0;a<n.length;a++)if(n[a].keyword==e){n.splice(a,1);break}return this},validate:function e(t,r){e.errors=null;var n=this._validateKeyword=this._validateKeyword||this.compile(o,!0);if(n(t))return!0;if(e.errors=n.errors,r)throw new Error("custom keyword definition is invalid: "+this.errorsText(n.errors));return!1}}},8639:e=>{"use strict";function t(e,t,a){e instanceof RegExp&&(e=r(e,a)),t instanceof RegExp&&(t=r(t,a));var o=n(e,t,a);return o&&{start:o[0],end:o[1],pre:a.slice(0,o[0]),body:a.slice(o[0]+e.length,o[1]),post:a.slice(o[1]+t.length)}}function r(e,t){var r=t.match(e);return r?r[0]:null}function n(e,t,r){var n,a,o,i,s,c=r.indexOf(e),u=r.indexOf(t,c+1),l=c;if(c>=0&&u>0){if(e===t)return[c,u];for(n=[],o=r.length;l>=0&&!s;)l==c?(n.push(l),c=r.indexOf(e,l+1)):1==n.length?s=[n.pop(),u]:((a=n.pop())<o&&(o=a,i=u),u=r.indexOf(t,l+1)),l=c<u&&c>=0?c:u;n.length&&(s=[o,i])}return s}e.exports=t,t.range=n},5155:(e,t)=>{"use strict";t.byteLength=function(e){var t=s(e),r=t[0],n=t[1];return 3*(r+n)/4-n},t.toByteArray=function(e){var t,r,o=s(e),i=o[0],c=o[1],u=new a(function(e,t,r){return 3*(t+r)/4-r}(0,i,c)),l=0,f=c>0?i-4:i;for(r=0;r<f;r+=4)t=n[e.charCodeAt(r)]<<18|n[e.charCodeAt(r+1)]<<12|n[e.charCodeAt(r+2)]<<6|n[e.charCodeAt(r+3)],u[l++]=t>>16&255,u[l++]=t>>8&255,u[l++]=255&t;return 2===c&&(t=n[e.charCodeAt(r)]<<2|n[e.charCodeAt(r+1)]>>4,u[l++]=255&t),1===c&&(t=n[e.charCodeAt(r)]<<10|n[e.charCodeAt(r+1)]<<4|n[e.charCodeAt(r+2)]>>2,u[l++]=t>>8&255,u[l++]=255&t),u},t.fromByteArray=function(e){for(var t,n=e.length,a=n%3,o=[],i=16383,s=0,u=n-a;s<u;s+=i)o.push(c(e,s,s+i>u?u:s+i));return 1===a?(t=e[n-1],o.push(r[t>>2]+r[t<<4&63]+"==")):2===a&&(t=(e[n-2]<<8)+e[n-1],o.push(r[t>>10]+r[t>>4&63]+r[t<<2&63]+"=")),o.join("")};for(var r=[],n=[],a="undefined"!=typeof Uint8Array?Uint8Array:Array,o="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",i=0;i<64;++i)r[i]=o[i],n[o.charCodeAt(i)]=i;function s(e){var t=e.length;if(t%4>0)throw new Error("Invalid string. Length must be a multiple of 4");var r=e.indexOf("=");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function c(e,t,n){for(var a,o,i=[],s=t;s<n;s+=3)a=(e[s]<<16&16711680)+(e[s+1]<<8&65280)+(255&e[s+2]),i.push(r[(o=a)>>18&63]+r[o>>12&63]+r[o>>6&63]+r[63&o]);return i.join("")}n["-".charCodeAt(0)]=62,n["_".charCodeAt(0)]=63},8098:(e,t,r)=>{var n=r(1787),a=r(8639);e.exports=function(e){return e?("{}"===e.substr(0,2)&&(e="\\{\\}"+e.substr(2)),y(function(e){return e.split("\\\\").join(o).split("\\{").join(i).split("\\}").join(s).split("\\,").join(c).split("\\.").join(u)}(e),!0).map(f)):[]};var o="\0SLASH"+Math.random()+"\0",i="\0OPEN"+Math.random()+"\0",s="\0CLOSE"+Math.random()+"\0",c="\0COMMA"+Math.random()+"\0",u="\0PERIOD"+Math.random()+"\0";function l(e){return parseInt(e,10)==e?parseInt(e,10):e.charCodeAt(0)}function f(e){return e.split(o).join("\\").split(i).join("{").split(s).join("}").split(c).join(",").split(u).join(".")}function h(e){if(!e)return[""];var t=[],r=a("{","}",e);if(!r)return e.split(",");var n=r.pre,o=r.body,i=r.post,s=n.split(",");s[s.length-1]+="{"+o+"}";var c=h(i);return i.length&&(s[s.length-1]+=c.shift(),s.push.apply(s,c)),t.push.apply(t,s),t}function p(e){return"{"+e+"}"}function d(e){return/^-?0\d/.test(e)}function m(e,t){return e<=t}function v(e,t){return e>=t}function y(e,t){var r=[],o=a("{","}",e);if(!o||/\$$/.test(o.pre))return[e];var i,c=/^-?\d+\.\.-?\d+(?:\.\.-?\d+)?$/.test(o.body),u=/^[a-zA-Z]\.\.[a-zA-Z](?:\.\.-?\d+)?$/.test(o.body),f=c||u,g=o.body.indexOf(",")>=0;if(!f&&!g)return o.post.match(/,.*\}/)?y(e=o.pre+"{"+o.body+s+o.post):[e];if(f)i=o.body.split(/\.\./);else if(1===(i=h(o.body)).length&&1===(i=y(i[0],!1).map(p)).length)return(E=o.post.length?y(o.post,!1):[""]).map((function(e){return o.pre+i[0]+e}));var w,b=o.pre,E=o.post.length?y(o.post,!1):[""];if(f){var A=l(i[0]),P=l(i[1]),x=Math.max(i[0].length,i[1].length),S=3==i.length?Math.abs(l(i[2])):1,O=m;P<A&&(S*=-1,O=v);var _=i.some(d);w=[];for(var I=A;O(I,P);I+=S){var R;if(u)"\\"===(R=String.fromCharCode(I))&&(R="");else if(R=String(I),_){var j=x-R.length;if(j>0){var D=new Array(j+1).join("0");R=I<0?"-"+D+R.slice(1):D+R}}w.push(R)}}else w=n(i,(function(e){return y(e,!1)}));for(var $=0;$<w.length;$++)for(var L=0;L<E.length;L++){var k=b+w[$]+E[L];(!t||f||k)&&r.push(k)}return r}},1635:()=>{ace.define("ace/theme/monokai",["require","exports","module","ace/lib/dom"],(function(e,t,r){t.isDark=!0,t.cssClass="ace-monokai",t.cssText=".ace-monokai .ace_gutter {background: #2F3129;color: #8F908A}.ace-monokai .ace_print-margin {width: 1px;background: #555651}.ace-monokai {background-color: #272822;color: #F8F8F2}.ace-monokai .ace_cursor {color: #F8F8F0}.ace-monokai .ace_marker-layer .ace_selection {background: #49483E}.ace-monokai.ace_multiselect .ace_selection.ace_start {box-shadow: 0 0 3px 0px #272822;}.ace-monokai .ace_marker-layer .ace_step {background: rgb(102, 82, 0)}.ace-monokai .ace_marker-layer .ace_bracket {margin: -1px 0 0 -1px;border: 1px solid #49483E}.ace-monokai .ace_marker-layer .ace_active-line {background: #202020}.ace-monokai .ace_gutter-active-line {background-color: #272727}.ace-monokai .ace_marker-layer .ace_selected-word {border: 1px solid #49483E}.ace-monokai .ace_invisible {color: #52524d}.ace-monokai .ace_entity.ace_name.ace_tag,.ace-monokai .ace_keyword,.ace-monokai .ace_meta.ace_tag,.ace-monokai .ace_storage {color: #F92672}.ace-monokai .ace_punctuation,.ace-monokai .ace_punctuation.ace_tag {color: #fff}.ace-monokai .ace_constant.ace_character,.ace-monokai .ace_constant.ace_language,.ace-monokai .ace_constant.ace_numeric,.ace-monokai .ace_constant.ace_other {color: #AE81FF}.ace-monokai .ace_invalid {color: #F8F8F0;background-color: #F92672}.ace-monokai .ace_invalid.ace_deprecated {color: #F8F8F0;background-color: #AE81FF}.ace-monokai .ace_support.ace_constant,.ace-monokai .ace_support.ace_function {color: #66D9EF}.ace-monokai .ace_fold {background-color: #A6E22E;border-color: #F8F8F2}.ace-monokai .ace_storage.ace_type,.ace-monokai .ace_support.ace_class,.ace-monokai .ace_support.ace_type {font-style: italic;color: #66D9EF}.ace-monokai .ace_entity.ace_name.ace_function,.ace-monokai .ace_entity.ace_other,.ace-monokai .ace_entity.ace_other.ace_attribute-name,.ace-monokai .ace_variable {color: #A6E22E}.ace-monokai .ace_variable.ace_parameter {font-style: italic;color: #FD971F}.ace-monokai .ace_string {color: #E6DB74}.ace-monokai .ace_comment {color: #75715E}.ace-monokai .ace_indent-guide {background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAACCAYAAACZgbYnAAAAEklEQVQImWPQ0FD0ZXBzd/wPAAjVAoxeSgNeAAAAAElFTkSuQmCC) right repeat-y}",e("../lib/dom").importCssString(t.cssText,t.cssClass)}))},2486:(e,t,r)=>{"use strict";const n=r(5155),a=r(4525),o="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;t.lW=c,t.h2=50;const i=2147483647;function s(e){if(e>i)throw new RangeError('The value "'+e+'" is invalid for option "size"');const t=new Uint8Array(e);return Object.setPrototypeOf(t,c.prototype),t}function c(e,t,r){if("number"==typeof e){if("string"==typeof t)throw new TypeError('The "string" argument must be of type string. Received type number');return f(e)}return u(e,t,r)}function u(e,t,r){if("string"==typeof e)return function(e,t){if("string"==typeof t&&""!==t||(t="utf8"),!c.isEncoding(t))throw new TypeError("Unknown encoding: "+t);const r=0|m(e,t);let n=s(r);const a=n.write(e,t);return a!==r&&(n=n.slice(0,a)),n}(e,t);if(ArrayBuffer.isView(e))return function(e){if(Q(e,Uint8Array)){const t=new Uint8Array(e);return p(t.buffer,t.byteOffset,t.byteLength)}return h(e)}(e);if(null==e)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e);if(Q(e,ArrayBuffer)||e&&Q(e.buffer,ArrayBuffer))return p(e,t,r);if("undefined"!=typeof SharedArrayBuffer&&(Q(e,SharedArrayBuffer)||e&&Q(e.buffer,SharedArrayBuffer)))return p(e,t,r);if("number"==typeof e)throw new TypeError('The "value" argument must not be of type number. Received type number');const n=e.valueOf&&e.valueOf();if(null!=n&&n!==e)return c.from(n,t,r);const a=function(e){if(c.isBuffer(e)){const t=0|d(e.length),r=s(t);return 0===r.length||e.copy(r,0,0,t),r}return void 0!==e.length?"number"!=typeof e.length||J(e.length)?s(0):h(e):"Buffer"===e.type&&Array.isArray(e.data)?h(e.data):void 0}(e);if(a)return a;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof e[Symbol.toPrimitive])return c.from(e[Symbol.toPrimitive]("string"),t,r);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof e)}function l(e){if("number"!=typeof e)throw new TypeError('"size" argument must be of type number');if(e<0)throw new RangeError('The value "'+e+'" is invalid for option "size"')}function f(e){return l(e),s(e<0?0:0|d(e))}function h(e){const t=e.length<0?0:0|d(e.length),r=s(t);for(let n=0;n<t;n+=1)r[n]=255&e[n];return r}function p(e,t,r){if(t<0||e.byteLength<t)throw new RangeError('"offset" is outside of buffer bounds');if(e.byteLength<t+(r||0))throw new RangeError('"length" is outside of buffer bounds');let n;return n=void 0===t&&void 0===r?new Uint8Array(e):void 0===r?new Uint8Array(e,t):new Uint8Array(e,t,r),Object.setPrototypeOf(n,c.prototype),n}function d(e){if(e>=i)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+i.toString(16)+" bytes");return 0|e}function m(e,t){if(c.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||Q(e,ArrayBuffer))return e.byteLength;if("string"!=typeof e)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof e);const r=e.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===r)return 0;let a=!1;for(;;)switch(t){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":return z(e).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return G(e).length;default:if(a)return n?-1:z(e).length;t=(""+t).toLowerCase(),a=!0}}function v(e,t,r){let n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if((r>>>=0)<=(t>>>=0))return"";for(e||(e="utf8");;)switch(e){case"hex":return j(this,t,r);case"utf8":case"utf-8":return O(this,t,r);case"ascii":return I(this,t,r);case"latin1":case"binary":return R(this,t,r);case"base64":return S(this,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return D(this,t,r);default:if(n)throw new TypeError("Unknown encoding: "+e);e=(e+"").toLowerCase(),n=!0}}function y(e,t,r){const n=e[t];e[t]=e[r],e[r]=n}function g(e,t,r,n,a){if(0===e.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),J(r=+r)&&(r=a?0:e.length-1),r<0&&(r=e.length+r),r>=e.length){if(a)return-1;r=e.length-1}else if(r<0){if(!a)return-1;r=0}if("string"==typeof t&&(t=c.from(t,n)),c.isBuffer(t))return 0===t.length?-1:w(e,t,r,n,a);if("number"==typeof t)return t&=255,"function"==typeof Uint8Array.prototype.indexOf?a?Uint8Array.prototype.indexOf.call(e,t,r):Uint8Array.prototype.lastIndexOf.call(e,t,r):w(e,[t],r,n,a);throw new TypeError("val must be string, number or Buffer")}function w(e,t,r,n,a){let o,i=1,s=e.length,c=t.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(e.length<2||t.length<2)return-1;i=2,s/=2,c/=2,r/=2}function u(e,t){return 1===i?e[t]:e.readUInt16BE(t*i)}if(a){let n=-1;for(o=r;o<s;o++)if(u(e,o)===u(t,-1===n?0:o-n)){if(-1===n&&(n=o),o-n+1===c)return n*i}else-1!==n&&(o-=o-n),n=-1}else for(r+c>s&&(r=s-c),o=r;o>=0;o--){let r=!0;for(let n=0;n<c;n++)if(u(e,o+n)!==u(t,n)){r=!1;break}if(r)return o}return-1}function b(e,t,r,n){r=Number(r)||0;const a=e.length-r;n?(n=Number(n))>a&&(n=a):n=a;const o=t.length;let i;for(n>o/2&&(n=o/2),i=0;i<n;++i){const n=parseInt(t.substr(2*i,2),16);if(J(n))return i;e[r+i]=n}return i}function E(e,t,r,n){return H(z(t,e.length-r),e,r,n)}function A(e,t,r,n){return H(function(e){const t=[];for(let r=0;r<e.length;++r)t.push(255&e.charCodeAt(r));return t}(t),e,r,n)}function P(e,t,r,n){return H(G(t),e,r,n)}function x(e,t,r,n){return H(function(e,t){let r,n,a;const o=[];for(let i=0;i<e.length&&!((t-=2)<0);++i)r=e.charCodeAt(i),n=r>>8,a=r%256,o.push(a),o.push(n);return o}(t,e.length-r),e,r,n)}function S(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function O(e,t,r){r=Math.min(e.length,r);const n=[];let a=t;for(;a<r;){const t=e[a];let o=null,i=t>239?4:t>223?3:t>191?2:1;if(a+i<=r){let r,n,s,c;switch(i){case 1:t<128&&(o=t);break;case 2:r=e[a+1],128==(192&r)&&(c=(31&t)<<6|63&r,c>127&&(o=c));break;case 3:r=e[a+1],n=e[a+2],128==(192&r)&&128==(192&n)&&(c=(15&t)<<12|(63&r)<<6|63&n,c>2047&&(c<55296||c>57343)&&(o=c));break;case 4:r=e[a+1],n=e[a+2],s=e[a+3],128==(192&r)&&128==(192&n)&&128==(192&s)&&(c=(15&t)<<18|(63&r)<<12|(63&n)<<6|63&s,c>65535&&c<1114112&&(o=c))}}null===o?(o=65533,i=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|1023&o),n.push(o),a+=i}return function(e){const t=e.length;if(t<=_)return String.fromCharCode.apply(String,e);let r="",n=0;for(;n<t;)r+=String.fromCharCode.apply(String,e.slice(n,n+=_));return r}(n)}c.TYPED_ARRAY_SUPPORT=function(){try{const e=new Uint8Array(1),t={foo:function(){return 42}};return Object.setPrototypeOf(t,Uint8Array.prototype),Object.setPrototypeOf(e,t),42===e.foo()}catch(e){return!1}}(),c.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(c.prototype,"parent",{enumerable:!0,get:function(){if(c.isBuffer(this))return this.buffer}}),Object.defineProperty(c.prototype,"offset",{enumerable:!0,get:function(){if(c.isBuffer(this))return this.byteOffset}}),c.poolSize=8192,c.from=function(e,t,r){return u(e,t,r)},Object.setPrototypeOf(c.prototype,Uint8Array.prototype),Object.setPrototypeOf(c,Uint8Array),c.alloc=function(e,t,r){return function(e,t,r){return l(e),e<=0?s(e):void 0!==t?"string"==typeof r?s(e).fill(t,r):s(e).fill(t):s(e)}(e,t,r)},c.allocUnsafe=function(e){return f(e)},c.allocUnsafeSlow=function(e){return f(e)},c.isBuffer=function(e){return null!=e&&!0===e._isBuffer&&e!==c.prototype},c.compare=function(e,t){if(Q(e,Uint8Array)&&(e=c.from(e,e.offset,e.byteLength)),Q(t,Uint8Array)&&(t=c.from(t,t.offset,t.byteLength)),!c.isBuffer(e)||!c.isBuffer(t))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(e===t)return 0;let r=e.length,n=t.length;for(let a=0,o=Math.min(r,n);a<o;++a)if(e[a]!==t[a]){r=e[a],n=t[a];break}return r<n?-1:n<r?1:0},c.isEncoding=function(e){switch(String(e).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},c.concat=function(e,t){if(!Array.isArray(e))throw new TypeError('"list" argument must be an Array of Buffers');if(0===e.length)return c.alloc(0);let r;if(void 0===t)for(t=0,r=0;r<e.length;++r)t+=e[r].length;const n=c.allocUnsafe(t);let a=0;for(r=0;r<e.length;++r){let t=e[r];if(Q(t,Uint8Array))a+t.length>n.length?(c.isBuffer(t)||(t=c.from(t)),t.copy(n,a)):Uint8Array.prototype.set.call(n,t,a);else{if(!c.isBuffer(t))throw new TypeError('"list" argument must be an Array of Buffers');t.copy(n,a)}a+=t.length}return n},c.byteLength=m,c.prototype._isBuffer=!0,c.prototype.swap16=function(){const e=this.length;if(e%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(let t=0;t<e;t+=2)y(this,t,t+1);return this},c.prototype.swap32=function(){const e=this.length;if(e%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(let t=0;t<e;t+=4)y(this,t,t+3),y(this,t+1,t+2);return this},c.prototype.swap64=function(){const e=this.length;if(e%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(let t=0;t<e;t+=8)y(this,t,t+7),y(this,t+1,t+6),y(this,t+2,t+5),y(this,t+3,t+4);return this},c.prototype.toString=function(){const e=this.length;return 0===e?"":0===arguments.length?O(this,0,e):v.apply(this,arguments)},c.prototype.toLocaleString=c.prototype.toString,c.prototype.equals=function(e){if(!c.isBuffer(e))throw new TypeError("Argument must be a Buffer");return this===e||0===c.compare(this,e)},c.prototype.inspect=function(){let e="";const r=t.h2;return e=this.toString("hex",0,r).replace(/(.{2})/g,"$1 ").trim(),this.length>r&&(e+=" ... "),"<Buffer "+e+">"},o&&(c.prototype[o]=c.prototype.inspect),c.prototype.compare=function(e,t,r,n,a){if(Q(e,Uint8Array)&&(e=c.from(e,e.offset,e.byteLength)),!c.isBuffer(e))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof e);if(void 0===t&&(t=0),void 0===r&&(r=e?e.length:0),void 0===n&&(n=0),void 0===a&&(a=this.length),t<0||r>e.length||n<0||a>this.length)throw new RangeError("out of range index");if(n>=a&&t>=r)return 0;if(n>=a)return-1;if(t>=r)return 1;if(this===e)return 0;let o=(a>>>=0)-(n>>>=0),i=(r>>>=0)-(t>>>=0);const s=Math.min(o,i),u=this.slice(n,a),l=e.slice(t,r);for(let e=0;e<s;++e)if(u[e]!==l[e]){o=u[e],i=l[e];break}return o<i?-1:i<o?1:0},c.prototype.includes=function(e,t,r){return-1!==this.indexOf(e,t,r)},c.prototype.indexOf=function(e,t,r){return g(this,e,t,r,!0)},c.prototype.lastIndexOf=function(e,t,r){return g(this,e,t,r,!1)},c.prototype.write=function(e,t,r,n){if(void 0===t)n="utf8",r=this.length,t=0;else if(void 0===r&&"string"==typeof t)n=t,r=this.length,t=0;else{if(!isFinite(t))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");t>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}const a=this.length-t;if((void 0===r||r>a)&&(r=a),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");let o=!1;for(;;)switch(n){case"hex":return b(this,e,t,r);case"utf8":case"utf-8":return E(this,e,t,r);case"ascii":case"latin1":case"binary":return A(this,e,t,r);case"base64":return P(this,e,t,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return x(this,e,t,r);default:if(o)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),o=!0}},c.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};const _=4096;function I(e,t,r){let n="";r=Math.min(e.length,r);for(let a=t;a<r;++a)n+=String.fromCharCode(127&e[a]);return n}function R(e,t,r){let n="";r=Math.min(e.length,r);for(let a=t;a<r;++a)n+=String.fromCharCode(e[a]);return n}function j(e,t,r){const n=e.length;(!t||t<0)&&(t=0),(!r||r<0||r>n)&&(r=n);let a="";for(let n=t;n<r;++n)a+=X[e[n]];return a}function D(e,t,r){const n=e.slice(t,r);let a="";for(let e=0;e<n.length-1;e+=2)a+=String.fromCharCode(n[e]+256*n[e+1]);return a}function $(e,t,r){if(e%1!=0||e<0)throw new RangeError("offset is not uint");if(e+t>r)throw new RangeError("Trying to access beyond buffer length")}function L(e,t,r,n,a,o){if(!c.isBuffer(e))throw new TypeError('"buffer" argument must be a Buffer instance');if(t>a||t<o)throw new RangeError('"value" argument is out of bounds');if(r+n>e.length)throw new RangeError("Index out of range")}function k(e,t,r,n,a){V(t,n,a,e,r,7);let o=Number(t&BigInt(4294967295));e[r++]=o,o>>=8,e[r++]=o,o>>=8,e[r++]=o,o>>=8,e[r++]=o;let i=Number(t>>BigInt(32)&BigInt(4294967295));return e[r++]=i,i>>=8,e[r++]=i,i>>=8,e[r++]=i,i>>=8,e[r++]=i,r}function F(e,t,r,n,a){V(t,n,a,e,r,7);let o=Number(t&BigInt(4294967295));e[r+7]=o,o>>=8,e[r+6]=o,o>>=8,e[r+5]=o,o>>=8,e[r+4]=o;let i=Number(t>>BigInt(32)&BigInt(4294967295));return e[r+3]=i,i>>=8,e[r+2]=i,i>>=8,e[r+1]=i,i>>=8,e[r]=i,r+8}function C(e,t,r,n,a,o){if(r+n>e.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function T(e,t,r,n,o){return t=+t,r>>>=0,o||C(e,0,r,4),a.write(e,t,r,n,23,4),r+4}function N(e,t,r,n,o){return t=+t,r>>>=0,o||C(e,0,r,8),a.write(e,t,r,n,52,8),r+8}c.prototype.slice=function(e,t){const r=this.length;(e=~~e)<0?(e+=r)<0&&(e=0):e>r&&(e=r),(t=void 0===t?r:~~t)<0?(t+=r)<0&&(t=0):t>r&&(t=r),t<e&&(t=e);const n=this.subarray(e,t);return Object.setPrototypeOf(n,c.prototype),n},c.prototype.readUintLE=c.prototype.readUIntLE=function(e,t,r){e>>>=0,t>>>=0,r||$(e,t,this.length);let n=this[e],a=1,o=0;for(;++o<t&&(a*=256);)n+=this[e+o]*a;return n},c.prototype.readUintBE=c.prototype.readUIntBE=function(e,t,r){e>>>=0,t>>>=0,r||$(e,t,this.length);let n=this[e+--t],a=1;for(;t>0&&(a*=256);)n+=this[e+--t]*a;return n},c.prototype.readUint8=c.prototype.readUInt8=function(e,t){return e>>>=0,t||$(e,1,this.length),this[e]},c.prototype.readUint16LE=c.prototype.readUInt16LE=function(e,t){return e>>>=0,t||$(e,2,this.length),this[e]|this[e+1]<<8},c.prototype.readUint16BE=c.prototype.readUInt16BE=function(e,t){return e>>>=0,t||$(e,2,this.length),this[e]<<8|this[e+1]},c.prototype.readUint32LE=c.prototype.readUInt32LE=function(e,t){return e>>>=0,t||$(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},c.prototype.readUint32BE=c.prototype.readUInt32BE=function(e,t){return e>>>=0,t||$(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},c.prototype.readBigUInt64LE=W((function(e){q(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||K(e,this.length-8);const n=t+256*this[++e]+65536*this[++e]+this[++e]*2**24,a=this[++e]+256*this[++e]+65536*this[++e]+r*2**24;return BigInt(n)+(BigInt(a)<<BigInt(32))})),c.prototype.readBigUInt64BE=W((function(e){q(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||K(e,this.length-8);const n=t*2**24+65536*this[++e]+256*this[++e]+this[++e],a=this[++e]*2**24+65536*this[++e]+256*this[++e]+r;return(BigInt(n)<<BigInt(32))+BigInt(a)})),c.prototype.readIntLE=function(e,t,r){e>>>=0,t>>>=0,r||$(e,t,this.length);let n=this[e],a=1,o=0;for(;++o<t&&(a*=256);)n+=this[e+o]*a;return a*=128,n>=a&&(n-=Math.pow(2,8*t)),n},c.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||$(e,t,this.length);let n=t,a=1,o=this[e+--n];for(;n>0&&(a*=256);)o+=this[e+--n]*a;return a*=128,o>=a&&(o-=Math.pow(2,8*t)),o},c.prototype.readInt8=function(e,t){return e>>>=0,t||$(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},c.prototype.readInt16LE=function(e,t){e>>>=0,t||$(e,2,this.length);const r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},c.prototype.readInt16BE=function(e,t){e>>>=0,t||$(e,2,this.length);const r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},c.prototype.readInt32LE=function(e,t){return e>>>=0,t||$(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},c.prototype.readInt32BE=function(e,t){return e>>>=0,t||$(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},c.prototype.readBigInt64LE=W((function(e){q(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||K(e,this.length-8);const n=this[e+4]+256*this[e+5]+65536*this[e+6]+(r<<24);return(BigInt(n)<<BigInt(32))+BigInt(t+256*this[++e]+65536*this[++e]+this[++e]*2**24)})),c.prototype.readBigInt64BE=W((function(e){q(e>>>=0,"offset");const t=this[e],r=this[e+7];void 0!==t&&void 0!==r||K(e,this.length-8);const n=(t<<24)+65536*this[++e]+256*this[++e]+this[++e];return(BigInt(n)<<BigInt(32))+BigInt(this[++e]*2**24+65536*this[++e]+256*this[++e]+r)})),c.prototype.readFloatLE=function(e,t){return e>>>=0,t||$(e,4,this.length),a.read(this,e,!0,23,4)},c.prototype.readFloatBE=function(e,t){return e>>>=0,t||$(e,4,this.length),a.read(this,e,!1,23,4)},c.prototype.readDoubleLE=function(e,t){return e>>>=0,t||$(e,8,this.length),a.read(this,e,!0,52,8)},c.prototype.readDoubleBE=function(e,t){return e>>>=0,t||$(e,8,this.length),a.read(this,e,!1,52,8)},c.prototype.writeUintLE=c.prototype.writeUIntLE=function(e,t,r,n){e=+e,t>>>=0,r>>>=0,n||L(this,e,t,r,Math.pow(2,8*r)-1,0);let a=1,o=0;for(this[t]=255&e;++o<r&&(a*=256);)this[t+o]=e/a&255;return t+r},c.prototype.writeUintBE=c.prototype.writeUIntBE=function(e,t,r,n){e=+e,t>>>=0,r>>>=0,n||L(this,e,t,r,Math.pow(2,8*r)-1,0);let a=r-1,o=1;for(this[t+a]=255&e;--a>=0&&(o*=256);)this[t+a]=e/o&255;return t+r},c.prototype.writeUint8=c.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||L(this,e,t,1,255,0),this[t]=255&e,t+1},c.prototype.writeUint16LE=c.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||L(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},c.prototype.writeUint16BE=c.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||L(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},c.prototype.writeUint32LE=c.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||L(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},c.prototype.writeUint32BE=c.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||L(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},c.prototype.writeBigUInt64LE=W((function(e,t=0){return k(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),c.prototype.writeBigUInt64BE=W((function(e,t=0){return F(this,e,t,BigInt(0),BigInt("0xffffffffffffffff"))})),c.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){const n=Math.pow(2,8*r-1);L(this,e,t,r,n-1,-n)}let a=0,o=1,i=0;for(this[t]=255&e;++a<r&&(o*=256);)e<0&&0===i&&0!==this[t+a-1]&&(i=1),this[t+a]=(e/o>>0)-i&255;return t+r},c.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t>>>=0,!n){const n=Math.pow(2,8*r-1);L(this,e,t,r,n-1,-n)}let a=r-1,o=1,i=0;for(this[t+a]=255&e;--a>=0&&(o*=256);)e<0&&0===i&&0!==this[t+a+1]&&(i=1),this[t+a]=(e/o>>0)-i&255;return t+r},c.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||L(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},c.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||L(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},c.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||L(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},c.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||L(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},c.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||L(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},c.prototype.writeBigInt64LE=W((function(e,t=0){return k(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),c.prototype.writeBigInt64BE=W((function(e,t=0){return F(this,e,t,-BigInt("0x8000000000000000"),BigInt("0x7fffffffffffffff"))})),c.prototype.writeFloatLE=function(e,t,r){return T(this,e,t,!0,r)},c.prototype.writeFloatBE=function(e,t,r){return T(this,e,t,!1,r)},c.prototype.writeDoubleLE=function(e,t,r){return N(this,e,t,!0,r)},c.prototype.writeDoubleBE=function(e,t,r){return N(this,e,t,!1,r)},c.prototype.copy=function(e,t,r,n){if(!c.isBuffer(e))throw new TypeError("argument should be a Buffer");if(r||(r=0),n||0===n||(n=this.length),t>=e.length&&(t=e.length),t||(t=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===e.length||0===this.length)return 0;if(t<0)throw new RangeError("targetStart out of bounds");if(r<0||r>=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),e.length-t<n-r&&(n=e.length-t+r);const a=n-r;return this===e&&"function"==typeof Uint8Array.prototype.copyWithin?this.copyWithin(t,r,n):Uint8Array.prototype.set.call(e,this.subarray(r,n),t),a},c.prototype.fill=function(e,t,r,n){if("string"==typeof e){if("string"==typeof t?(n=t,t=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!c.isEncoding(n))throw new TypeError("Unknown encoding: "+n);if(1===e.length){const t=e.charCodeAt(0);("utf8"===n&&t<128||"latin1"===n)&&(e=t)}}else"number"==typeof e?e&=255:"boolean"==typeof e&&(e=Number(e));if(t<0||this.length<t||this.length<r)throw new RangeError("Out of range index");if(r<=t)return this;let a;if(t>>>=0,r=void 0===r?this.length:r>>>0,e||(e=0),"number"==typeof e)for(a=t;a<r;++a)this[a]=e;else{const o=c.isBuffer(e)?e:c.from(e,n),i=o.length;if(0===i)throw new TypeError('The value "'+e+'" is invalid for argument "value"');for(a=0;a<r-t;++a)this[a+t]=o[a%i]}return this};const B={};function M(e,t,r){B[e]=class extends r{constructor(){super(),Object.defineProperty(this,"message",{value:t.apply(this,arguments),writable:!0,configurable:!0}),this.name=`${this.name} [${e}]`,this.stack,delete this.name}get code(){return e}set code(e){Object.defineProperty(this,"code",{configurable:!0,enumerable:!0,value:e,writable:!0})}toString(){return`${this.name} [${e}]: ${this.message}`}}}function U(e){let t="",r=e.length;const n="-"===e[0]?1:0;for(;r>=n+4;r-=3)t=`_${e.slice(r-3,r)}${t}`;return`${e.slice(0,r)}${t}`}function V(e,t,r,n,a,o){if(e>r||e<t){const n="bigint"==typeof t?"n":"";let a;throw a=o>3?0===t||t===BigInt(0)?`>= 0${n} and < 2${n} ** ${8*(o+1)}${n}`:`>= -(2${n} ** ${8*(o+1)-1}${n}) and < 2 ** ${8*(o+1)-1}${n}`:`>= ${t}${n} and <= ${r}${n}`,new B.ERR_OUT_OF_RANGE("value",a,e)}!function(e,t,r){q(t,"offset"),void 0!==e[t]&&void 0!==e[t+r]||K(t,e.length-(r+1))}(n,a,o)}function q(e,t){if("number"!=typeof e)throw new B.ERR_INVALID_ARG_TYPE(t,"number",e)}function K(e,t,r){if(Math.floor(e)!==e)throw q(e,r),new B.ERR_OUT_OF_RANGE(r||"offset","an integer",e);if(t<0)throw new B.ERR_BUFFER_OUT_OF_BOUNDS;throw new B.ERR_OUT_OF_RANGE(r||"offset",`>= ${r?1:0} and <= ${t}`,e)}M("ERR_BUFFER_OUT_OF_BOUNDS",(function(e){return e?`${e} is outside of buffer bounds`:"Attempt to access memory outside buffer bounds"}),RangeError),M("ERR_INVALID_ARG_TYPE",(function(e,t){return`The "${e}" argument must be of type number. Received type ${typeof t}`}),TypeError),M("ERR_OUT_OF_RANGE",(function(e,t,r){let n=`The value of "${e}" is out of range.`,a=r;return Number.isInteger(r)&&Math.abs(r)>2**32?a=U(String(r)):"bigint"==typeof r&&(a=String(r),(r>BigInt(2)**BigInt(32)||r<-(BigInt(2)**BigInt(32)))&&(a=U(a)),a+="n"),n+=` It must be ${t}. Received ${a}`,n}),RangeError);const Y=/[^+/0-9A-Za-z-_]/g;function z(e,t){let r;t=t||1/0;const n=e.length;let a=null;const o=[];for(let i=0;i<n;++i){if(r=e.charCodeAt(i),r>55295&&r<57344){if(!a){if(r>56319){(t-=3)>-1&&o.push(239,191,189);continue}if(i+1===n){(t-=3)>-1&&o.push(239,191,189);continue}a=r;continue}if(r<56320){(t-=3)>-1&&o.push(239,191,189),a=r;continue}r=65536+(a-55296<<10|r-56320)}else a&&(t-=3)>-1&&o.push(239,191,189);if(a=null,r<128){if((t-=1)<0)break;o.push(r)}else if(r<2048){if((t-=2)<0)break;o.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;o.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((t-=4)<0)break;o.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return o}function G(e){return n.toByteArray(function(e){if((e=(e=e.split("=")[0]).trim().replace(Y,"")).length<2)return"";for(;e.length%4!=0;)e+="=";return e}(e))}function H(e,t,r,n){let a;for(a=0;a<n&&!(a+r>=t.length||a>=e.length);++a)t[a+r]=e[a];return a}function Q(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function J(e){return e!=e}const X=function(){const e="0123456789abcdef",t=new Array(256);for(let r=0;r<16;++r){const n=16*r;for(let a=0;a<16;++a)t[n+a]=e[r]+e[a]}return t}();function W(e){return"undefined"==typeof BigInt?Z:e}function Z(){throw new Error("BigInt not supported")}},1787:e=>{e.exports=function(e,r){for(var n=[],a=0;a<e.length;a++){var o=r(e[a],a);t(o)?n.push.apply(n,o):n.push(o)}return n};var t=Array.isArray||function(e){return"[object Array]"===Object.prototype.toString.call(e)}},352:e=>{"use strict";e.exports=function(e){var t=[];return t.toString=function(){return this.map((function(t){var r="",n=void 0!==t[5];return t[4]&&(r+="@supports (".concat(t[4],") {")),t[2]&&(r+="@media ".concat(t[2]," {")),n&&(r+="@layer".concat(t[5].length>0?" ".concat(t[5]):""," {")),r+=e(t),n&&(r+="}"),t[2]&&(r+="}"),t[4]&&(r+="}"),r})).join("")},t.i=function(e,r,n,a,o){"string"==typeof e&&(e=[[null,e,void 0]]);var i={};if(n)for(var s=0;s<this.length;s++){var c=this[s][0];null!=c&&(i[c]=!0)}for(var u=0;u<e.length;u++){var l=[].concat(e[u]);n&&i[l[0]]||(void 0!==o&&(void 0===l[5]||(l[1]="@layer".concat(l[5].length>0?" ".concat(l[5]):""," {").concat(l[1],"}")),l[5]=o),r&&(l[2]?(l[1]="@media ".concat(l[2]," {").concat(l[1],"}"),l[2]=r):l[2]=r),a&&(l[4]?(l[1]="@supports (".concat(l[4],") {").concat(l[1],"}"),l[4]=a):l[4]="".concat(a)),t.push(l))}},t}},1864:e=>{"use strict";e.exports=function(e){var t=e[1],r=e[3];if(!r)return t;if("function"==typeof btoa){var n=btoa(unescape(encodeURIComponent(JSON.stringify(r)))),a="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(n),o="/*# ".concat(a," */");return[t].concat([o]).join("\n")}return[t].join("\n")}},8658:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.promisify=n;var r="__ES6-PROMISIFY--CUSTOM-ARGUMENTS__";function n(e){if("function"!=typeof e)throw new TypeError("Argument to promisify must be a function");var t=e[r],a=n.Promise||Promise;if("function"!=typeof a)throw new Error("No Promise implementation found; do you need a polyfill?");return function(){for(var r=this,n=arguments.length,o=Array(n),i=0;i<n;i++)o[i]=arguments[i];return new a((function(n,a){o.push((function(e){if(e)return a(e);for(var r=arguments.length,o=Array(1<r?r-1:0),i=1;i<r;i++)o[i-1]=arguments[i];if(1===o.length||!t)return n(o[0]);var s={};o.forEach((function(e,r){var n=t[r];n&&(s[n]=e)})),n(s)})),e.apply(r,o)}))}}n.argumentNames="__ES6-PROMISIFY--CUSTOM-ARGUMENTS__",n.Promise=void 0},2303:e=>{"use strict";e.exports=function e(t,r){if(t===r)return!0;if(t&&r&&"object"==typeof t&&"object"==typeof r){if(t.constructor!==r.constructor)return!1;var n,a,o;if(Array.isArray(t)){if((n=t.length)!=r.length)return!1;for(a=n;0!=a--;)if(!e(t[a],r[a]))return!1;return!0}if(t.constructor===RegExp)return t.source===r.source&&t.flags===r.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===r.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===r.toString();if((n=(o=Object.keys(t)).length)!==Object.keys(r).length)return!1;for(a=n;0!=a--;)if(!Object.prototype.hasOwnProperty.call(r,o[a]))return!1;for(a=n;0!=a--;){var i=o[a];if(!e(t[i],r[i]))return!1}return!0}return t!=t&&r!=r}},3508:e=>{"use strict";e.exports=function(e,t){t||(t={}),"function"==typeof t&&(t={cmp:t});var r,n="boolean"==typeof t.cycles&&t.cycles,a=t.cmp&&(r=t.cmp,function(e){return function(t,n){var a={key:t,value:e[t]},o={key:n,value:e[n]};return r(a,o)}}),o=[];return function e(t){if(t&&t.toJSON&&"function"==typeof t.toJSON&&(t=t.toJSON()),void 0!==t){if("number"==typeof t)return isFinite(t)?""+t:"null";if("object"!=typeof t)return JSON.stringify(t);var r,i;if(Array.isArray(t)){for(i="[",r=0;r<t.length;r++)r&&(i+=","),i+=e(t[r])||"null";return i+"]"}if(null===t)return"null";if(-1!==o.indexOf(t)){if(n)return JSON.stringify("__cycle__");throw new TypeError("Converting circular structure to JSON")}var s=o.push(t)-1,c=Object.keys(t).sort(a&&a(t));for(i="",r=0;r<c.length;r++){var u=c[r],l=e(t[u]);l&&(i&&(i+=","),i+=JSON.stringify(u)+":"+l)}return o.splice(s,1),"{"+i+"}"}}(e)}},4971:(e,t,r)=>{var n,a,o=r(2530);a={},void 0!==o&&o.nextTick?(a.nextTick=o.nextTick,"undefined"!=typeof setImmediate?a.setImmediate=function(e){setImmediate(e)}:a.setImmediate=a.nextTick):"function"==typeof setImmediate?(a.nextTick=function(e){setImmediate(e)},a.setImmediate=a.nextTick):(a.nextTick=function(e){setTimeout(e,0)},a.setImmediate=a.nextTick),a.eachSeries=function(e,t,r){if(r=r||function(){},!e.length)return r();var n=0,a=function(){t(e[n],(function(t){t?(r(t),r=function(){}):(n+=1)>=e.length?r():a()}))};a()},a.forEachSeries=a.eachSeries,void 0===(n=function(){return a}.apply(t,[]))||(e.exports=n)},2040:e=>{var t=function(){};t.createInterface=function(e){var t={on:function(t,r){void 0===this[e]&&(this[e]={}),this[e].hasOwnProperty(t)||(this[e][t]=[]),this[e][t].push(r)},off:function(t,r){void 0!==this[e]&&this[e].hasOwnProperty(t)&&function(e,t){for(var r=t.length-1;r>=0;r--)t[r]===e&&t.splice(r,1)}(r,this[e][t])},trigger:function(t){if(void 0!==this[e]&&this[e].hasOwnProperty(t))for(var r=Array.prototype.slice.call(arguments,1),n=0;n<this[e][t].length;n++)this[e][t][n].apply(this[e][t][n],r)},removeAllListeners:function(t){if(void 0!==this[e]){var r=this;r[e][t].forEach((function(e){r.off(t,e)}))}}};return t};var r=t.createInterface("_handlers");t.prototype._on=r.on,t.prototype._off=r.off,t.prototype._trigger=r.trigger;var n=t.createInterface("handlers");t.prototype.on=function(){n.on.apply(this,arguments),Array.prototype.unshift.call(arguments,"on"),this._trigger.apply(this,arguments)},t.prototype.off=n.off,t.prototype.trigger=n.trigger,t.prototype.removeAllListeners=n.removeAllListeners,e.exports=t},4946:(e,t,r)=>{var n=r(2040),a=r(5123).guid;function o(e,t){var r=0;return function(){var n=Date.now();n-r>e&&(r=n,t.apply(this,arguments))}}var i=function(e){return void 0===e||void 0===e.localStorage?{getItem:function(){},setItem:function(){},removeItem:function(){}}:e.localStorage}(r.g);function s(){var e=this,t=Date.now();this.origin=a(),this.lastMessage=t,this.receivedIDs={},this.previousValues={};var n=function(){e._onStorageEvent.apply(e,arguments)};"undefined"!=typeof document&&(document.attachEvent?document.attachEvent("onstorage",n):r.g.addEventListener("storage",n,!1))}s.prototype._transaction=function(e){var t=this,r=!1,n=!1,a=null;!function o(){if(!r){var s=Date.now(),c=0|i.getItem(f);if(c&&s-c<1e3)return n||(t._on("storage",o),n=!0),void(a=setTimeout(o,20));r=!0,i.setItem(f,s),e(),n&&t._off("storage",o),a&&clearTimeout(a),i.removeItem(f)}}()},s.prototype._cleanup_emit=o(100,(function(){this._transaction((function(){var e,t=Date.now()-h,r=0;try{e=JSON.parse(i.getItem(u)||"[]")}catch(t){e=[]}for(var n=e.length-1;n>=0;n--)e[n].timestamp<t&&(e.splice(n,1),r++);r>0&&i.setItem(u,JSON.stringify(e))}))})),s.prototype._cleanup_once=o(100,(function(){var e=this;e._transaction((function(){Date.now();var t,r,n=0;try{r=JSON.parse(i.getItem(l)||"{}")}catch(e){r={}}for(t in r)e._once_expired(t,r)&&(delete r[t],n++);n>0&&i.setItem(l,JSON.stringify(r))}))})),s.prototype._once_expired=function(e,t){if(!t)return!0;if(!t.hasOwnProperty(e))return!0;if("object"!=typeof t[e])return!0;var r=t[e].ttl||p,n=Date.now();return t[e].timestamp<n-r},s.prototype._localStorageChanged=function(e,t){if(e&&e.key)return e.key===t;var r=i.getItem(t);return r!==this.previousValues[t]&&(this.previousValues[t]=r,!0)},s.prototype._onStorageEvent=function(e){e=e||r.g.event;var t=this;this._localStorageChanged(e,u)&&this._transaction((function(){var e,r=Date.now(),n=i.getItem(u);try{e=JSON.parse(n||"[]")}catch(t){e=[]}for(var a=0;a<e.length;a++)if(e[a].origin!==t.origin&&!(e[a].timestamp<t.lastMessage)){if(e[a].id){if(t.receivedIDs.hasOwnProperty(e[a].id))continue;t.receivedIDs[e[a].id]=!0}t.trigger(e[a].name,e[a].payload)}t.lastMessage=r})),this._trigger("storage",e)},s.prototype._emit=function(e,t,r){if((r="string"==typeof r||"number"==typeof r?String(r):null)&&r.length){if(this.receivedIDs.hasOwnProperty(r))return;this.receivedIDs[r]=!0}var n={id:r,name:e,origin:this.origin,timestamp:Date.now(),payload:t},a=this;this._transaction((function(){var r=i.getItem(u)||"[]",o="[]"===r?"":",";r=[r.substring(0,r.length-1),o,JSON.stringify(n),"]"].join(""),i.setItem(u,r),a.trigger(e,t),setTimeout((function(){a._cleanup_emit()}),50)}))},s.prototype.emit=function(e,t){this._emit.apply(this,arguments),this._trigger("emit",e,t)},s.prototype.once=function(e,t,r){if(s.supported){var n=this;this._transaction((function(){var a;try{a=JSON.parse(i.getItem(l)||"{}")}catch(e){a={}}n._once_expired(e,a)&&(a[e]={},a[e].timestamp=Date.now(),"number"==typeof r&&(a[e].ttl=1e3*r),i.setItem(l,JSON.stringify(a)),t(),setTimeout((function(){n._cleanup_once()}),50))}))}},function(e,t){if(void 0!==e&&e||(e={}),"object"==typeof t)for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])}(s.prototype,n.prototype),s.supported=void 0!==i;var c,u="intercom",l="intercom_once",f="intercom_lock",h=5e4,p=36e5;s.destroy=function(){i.removeItem(f),i.removeItem(u),i.removeItem(l)},s.getInstance=function(){return c||(c=new s),c},e.exports=s},3232:(e,t,r)=>{const{FileSystem:n}=r(28);let a;try{a=r(699)}catch(e){a=r(699)}const o=new a;let i,s,c=new Promise(((e,t)=>{i=e,s=t}));var u=new n({provider:o},(e=>{e?s(e):i(!0)}));function l(e,t){return t in e}const f=new Proxy(u.promises,{get(e,t){if(l(e,t))return async(...r)=>(await c,await e[t](...r))}}),h=new Proxy(u,{get(e,t){if(l(e,t))return"promises"===t?f:(...r)=>{(async()=>{await c,e[t](...r)})()}}});e.exports=h},2872:(e,t,r)=>{const{path:n}=r(28);e.exports=n},699:(e,t,r)=>{const{Default:n}=r(6119);e.exports=n},2762:e=>{var t="READ",r="WRITE",n="CREATE",a="EXCLUSIVE",o="TRUNCATE",i="APPEND";e.exports={FILE_SYSTEM_NAME:"local",FILE_STORE_NAME:"files",IDB_RO:"readonly",IDB_RW:"readwrite",WSQL_VERSION:"1",WSQL_SIZE:5242880,WSQL_DESC:"FileSystem Storage",NODE_TYPE_FILE:"FILE",NODE_TYPE_DIRECTORY:"DIRECTORY",NODE_TYPE_SYMBOLIC_LINK:"SYMLINK",NODE_TYPE_META:"META",DEFAULT_DIR_PERMISSIONS:493,DEFAULT_FILE_PERMISSIONS:420,FULL_READ_WRITE_EXEC_PERMISSIONS:511,READ_WRITE_PERMISSIONS:438,SYMLOOP_MAX:10,BINARY_MIME_TYPE:"application/octet-stream",JSON_MIME_TYPE:"application/json",ROOT_DIRECTORY_NAME:"/",FS_FORMAT:"FORMAT",FS_NOCTIME:"NOCTIME",FS_NOMTIME:"NOMTIME",FS_NODUPEIDCHECK:"FS_NODUPEIDCHECK",O_READ:t,O_WRITE:r,O_CREATE:n,O_EXCLUSIVE:a,O_TRUNCATE:o,O_APPEND:i,O_FLAGS:{r:[t],"r+":[t,r],w:[r,n,o],"w+":[r,t,n,o],wx:[r,n,a,o],"wx+":[r,t,n,a,o],a:[r,n,i],"a+":[r,t,n,i],ax:[r,n,a,i],"ax+":[r,t,n,a,i]},XATTR_CREATE:"CREATE",XATTR_REPLACE:"REPLACE",FS_READY:"READY",FS_PENDING:"PENDING",FS_ERROR:"ERROR",SUPER_NODE_ID:"00000000-0000-0000-0000-000000000000",STDIN:0,STDOUT:1,STDERR:2,FIRST_DESCRIPTOR:3,ENVIRONMENT:{TMP:"/tmp",PATH:""},fsConstants:{O_RDONLY:0,O_WRONLY:1,O_RDWR:2,S_IFMT:61440,S_IFREG:32768,S_IFDIR:16384,S_IFCHR:8192,S_IFBLK:24576,S_IFIFO:4096,S_IFLNK:40960,S_IFSOCK:49152,O_CREAT:512,O_EXCL:2048,O_NOCTTY:131072,O_TRUNC:1024,O_APPEND:8,O_DIRECTORY:1048576,O_NOFOLLOW:256,O_SYNC:128,O_DSYNC:4194304,O_SYMLINK:2097152,O_NONBLOCK:4,S_IRWXU:448,S_IRUSR:256,S_IWUSR:128,S_IXUSR:64,S_IRWXG:56,S_IRGRP:32,S_IWGRP:16,S_IXGRP:8,S_IRWXO:7,S_IROTH:4,S_IWOTH:2,S_IXOTH:1,F_OK:0,R_OK:4,W_OK:2,X_OK:1,UV_FS_COPYFILE_EXCL:1,COPYFILE_EXCL:1}}},8336:(e,t,r)=>{var n=r(2762).NODE_TYPE_FILE;e.exports=function(e,t){this.id=e,this.type=t||n}},4235:(e,t,r)=>{"use strict";const n=r(6769);function a(e,t,r){this.constructor=a,n.call(this,e,t,r)}a.prototype=n.prototype,e.exports=a},8096:e=>{var t={};["3:EACCES:permission denied","9:EBADF:bad file descriptor","10:EBUSY:resource busy or locked","18:EINVAL:invalid argument","27:ENOTDIR:not a directory","28:EISDIR:illegal operation on a directory","34:ENOENT:no such file or directory","47:EEXIST:file already exists","50:EPERM:operation not permitted","51:ELOOP:too many symbolic links encountered","53:ENOTEMPTY:directory not empty","55:EIO:i/o error","1000:ENOTMOUNTED:not mounted","1001:EFILESYSTEMERROR:missing super node, use 'FORMAT' flag to format filesystem.","1002:ENOATTR:attribute does not exist"].forEach((function(e){var r=+(e=e.split(":"))[0],n=e[1],a=e[2];function o(e,t){Error.call(this),this.name=n,this.code=n,this.errno=r,this.message=e||a,t&&(this.path=t),this.stack=new Error(this.message).stack}o.prototype=Object.create(Error.prototype),o.prototype.constructor=o,o.prototype.toString=function(){var e=this.path?", '"+this.path+"'":"";return this.name+": "+this.message+e},t[n]=t[r]=o})),e.exports=t},8726:(e,t,r)=>{var n=r(2486).lW,a=r(4148),o=a.normalize,i=a.dirname,s=a.basename,c=a.isAbsolute,u=r(5123),l=r(4971),f=r(2762),h=f.NODE_TYPE_FILE,p=f.NODE_TYPE_DIRECTORY,d=f.NODE_TYPE_SYMBOLIC_LINK,m=f.NODE_TYPE_META,v=f.FULL_READ_WRITE_EXEC_PERMISSIONS,y=f.ROOT_DIRECTORY_NAME,g=f.SUPER_NODE_ID,w=f.SYMLOOP_MAX,b=f.O_READ,E=f.O_WRITE,A=f.O_CREATE,P=f.O_EXCLUSIVE,x=f.O_APPEND,S=f.O_FLAGS,O=f.XATTR_CREATE,_=f.XATTR_REPLACE,I=f.FS_NOMTIME,R=f.FS_NOCTIME,j=r(8096),D=r(8336),$=r(7816),L=r(5471),k=r(4698),F=r(8544),C=r(4235),T=r(6769);function N(e,t,r,n,a){var o=e.flags;o.includes(R)&&delete n.ctime,o.includes(I)&&delete n.mtime;var i=!1;function s(r){e.changes.push({event:"change",path:t}),a(r)}n.ctime&&(r.ctime=n.ctime,r.atime=n.ctime,i=!0),n.atime&&(r.atime=n.atime,i=!0),n.mtime&&(r.mtime=n.mtime,i=!0),i?e.putObject(r.id,r,s):s()}function B(e,t,r){if(!(t=o(t)))return r(new j.ENOENT("path is an empty string"));var n=s(t),a=i(t),c=0;function u(t,n){if(t)return r(t);const a=new k(n);a&&a.type===m&&a.rnode?e.getObject(a.rnode,l):r(new j.EFILESYSTEMERROR)}function l(e,t){e?r(e):t?F.create(t,r):r(new j.ENOENT)}function f(n,a){n?r(n):a.type===p&&a.data?e.getObject(a.data,h):r(new j.ENOTDIR("a component of the path prefix is not a directory",t))}function h(a,o){if(a)r(a);else if(Object.prototype.hasOwnProperty.call(o,n)){var i=o[n].id;e.getObject(i,v)}else r(new j.ENOENT(null,t))}function v(e,t){if(e)return r(e);F.create(t,b)}function b(l,h){var p;l?r(l):h.type===d?++c>w?r(new j.ELOOP(null,t)):(p=h.data,p=o(p),a=i(p),n=s(p),y===n?e.getObject(g,u):B(e,a,f)):r(null,h)}y===n?e.getObject(g,u):B(e,a,f)}function M(e,t,r,n,a,o,i){var s=r.xattrs;o===O&&Object.prototype.hasOwnProperty.call(s,n)?i(new j.EEXIST("attribute already exists",t)):o!==_||Object.prototype.hasOwnProperty.call(s,n)?(s[n]=a,e.putObject(r.id,r,(function(n){n?i(n):N(e,t,r,{ctime:Date.now()},i)}))):i(new j.ENOATTR(null,t))}function U(e,t,r){t=o(t);var n,a,c,u,l=s(t),f=i(t);function h(t,n){t?r(t):(c=n,e.getObject(c.data,d))}function d(t,a){t?r(t):(u=a,F.create({guid:e.guid,type:p},(function(t,a){t?r(t):((n=a).nlinks+=1,e.putObject(n.id,n,m))})))}function m(t){t?r(t):(a={},e.putObject(n.data,a,y))}function v(t){if(t)r(t);else{var n=Date.now();N(e,f,c,{mtime:n,ctime:n},r)}}function y(t){t?r(t):(u[l]=new D(n.id,p),e.putObject(c.data,u,v))}B(e,t,(function(n,a){!n&&a?r(new j.EEXIST(null,t)):!n||n instanceof j.ENOENT?B(e,f,h):r(n)}))}function V(e,t,r){t=o(t);var n,a,c,u,l=s(t),f=i(t);function h(a,o){a?r(a):y===l?r(new j.EBUSY(null,t)):Object.prototype.hasOwnProperty.call(o,l)?(n=(u=o)[l].id,e.getObject(n,d)):r(new j.ENOENT(null,t))}function d(a,o){a?r(a):o.type!==p?r(new j.ENOTDIR(null,t)):(n=o,e.getObject(n.data,m))}function m(n,o){n?r(n):(a=o,Object.keys(a).length>0?r(new j.ENOTEMPTY(null,t)):(delete u[l],e.putObject(c.data,u,v)))}function v(t){if(t)r(t);else{var n=Date.now();N(e,f,c,{mtime:n,ctime:n},g)}}function g(t){t?r(t):e.delete(n.id,w)}function w(t){t?r(t):e.delete(n.data,r)}B(e,f,(function(t,n){t?r(t):(c=n,e.getObject(c.data,h))}))}function q(e,t,r,a,c){"function"==typeof a&&(c=a,a=null),t=o(t);var u,l,f,m,v,g=s(t),b=i(t),x=0;function S(r,n){r?c(r):n.type!==p?c(new j.ENOENT(null,t)):(u=n,e.getObject(u.data,O))}function O(n,o){n?c(n):(l=o,Object.prototype.hasOwnProperty.call(l,g)?r.includes(P)?c(new j.EEXIST("O_CREATE and O_EXCLUSIVE are set, and the named file exists",t)):(f=l[g]).type===p&&r.includes(E)?c(new j.EISDIR("the named file is a directory and O_WRITE is set",t)):e.getObject(f.id,_):r.includes(A)?F.create({guid:e.guid,type:h},(function(t,r){t?c(t):((m=r).nlinks+=1,a&&(m.mode=a),e.putObject(m.id,m,R))})):c(new j.ENOENT("O_CREATE is not set and the named file does not exist",t)))}function _(n,a){if(n)c(n);else{var u=a;u.type===d?++x>w?c(new j.ELOOP(null,t)):(l=u.data,l=o(l),b=i(l),g=s(l),y===g&&(r.includes(E)?c(new j.EISDIR("the named file is a directory and O_WRITE is set",t)):B(e,t,I)),B(e,b,S)):I(void 0,u)}var l}function I(e,t){e?c(e):c(null,m=t)}function R(t){t?c(t):(v=n.alloc(0),e.putBuffer(m.data,v,L))}function $(t){if(t)c(t);else{var r=Date.now();N(e,b,u,{mtime:r,ctime:r},k)}}function L(t){t?c(t):(l[g]=new D(m.id,h),e.putObject(u.data,l,$))}function k(e){e?c(e):c(null,m)}y===g?r.includes(E)?c(new j.EISDIR("the named file is a directory and O_WRITE is set",t)):B(e,t,I):B(e,b,S)}function K(e,t,r,a,o,i,s){var c,u;function l(e){e?s(e):s(null,o)}function f(r){if(r)s(r);else{var n=Date.now();N(e,t.path,c,{mtime:n,ctime:n},l)}}function h(t){t?s(t):e.putObject(c.id,c,f)}function p(l,f){if(l)s(l);else{if(!(u=f))return s(new j.EIO("Expected Buffer"));var p=null!=i?i:t.position,d=Math.max(u.length,p+o),m=n.alloc(d);u&&u.copy(m),r.copy(m,p,a,a+o),void 0===i&&(t.position+=o),c.size=d,c.version+=1,e.putBuffer(c.data,m,h)}}e.getObject(t.id,(function(t,r){t?s(t):(c=r,e.getBuffer(c.data,p))}))}function Y(e,t,r,n,a,o,i){var s,c;function u(e,s){if(e)i(e);else{if(!(c=s))return i(new j.EIO("Expected Buffer"));var u=null!=o?o:t.position;a=u+a>r.length?a-u:a,c.copy(r,n,u,u+a),void 0===o&&(t.position+=a),i(null,a)}}e.getObject(t.id,(function(r,n){r?i(r):n.type===p?i(new j.EISDIR("the named file is a directory",t.path)):(s=n,e.getBuffer(s.data,u))}))}function z(e,t,r){t.getNode(e,r)}function G(e,t,r){t=o(t);var n,a,c=s(t),u=i(t);function l(e,t){if(e)return r(e);F.create(t,r)}function f(n,o){n?r(n):(a=o,Object.prototype.hasOwnProperty.call(a,c)?e.getObject(a[c].id,l):r(new j.ENOENT("a component of the path does not name an existing file",t)))}y===c?B(e,t,r):B(e,u,(function(t,a){t?r(t):(n=a,e.getObject(n.data,f))}))}function H(e,t,r,n){t=o(t);var a=s(t),c=i(t);r=o(r);var u,l,f,h,d,m,v=s(r),y=i(r),g=Date.now();function w(t){t?n(t):N(e,r,m,{ctime:g},n)}function b(t,r){t?n(t):((m=r).nlinks+=1,e.putObject(m.id,m,w))}function E(t){t?n(t):e.getObject(d,b)}function A(t,r){t?n(t):(h=r,Object.prototype.hasOwnProperty.call(h,v)?n(new j.EEXIST("newpath resolves to an existing file",v)):(h[v]=l[a],d=h[v].id,e.putObject(f.data,h,E)))}function P(t,r){t?n(t):(f=r,e.getObject(f.data,A))}function x(t,r){t?n(t):(l=r,Object.prototype.hasOwnProperty.call(l,a)?l[a].type===p?n(new j.EPERM("oldpath refers to a directory")):B(e,y,P):n(new j.ENOENT("a component of either path prefix does not exist",a)))}B(e,c,(function(t,r){t?n(t):(u=r,e.getObject(u.data,x))}))}function Q(e,t,r){t=o(t);var n,a,c,u=s(t),l=i(t);function f(t){t?r(t):(delete a[u],e.putObject(n.data,a,(function(t){if(t)r(t);else{var a=Date.now();N(e,l,n,{mtime:a,ctime:a},r)}})))}function h(t){t?r(t):e.delete(c.data,f)}function d(n,a){n?r(n):a.type===p?r(new j.EPERM("unlink not permitted on directories",u)):function(n,a){(c=a).nlinks-=1,c.nlinks<1?e.delete(c.id,h):e.putObject(c.id,c,(function(n){n?r(n):N(e,t,c,{ctime:Date.now()},f)}))}(0,a)}function m(t,n){t?r(t):(a=n,Object.prototype.hasOwnProperty.call(a,u)?e.getObject(a[u].id,d):r(new j.ENOENT("a component of the path does not name an existing file",u)))}B(e,l,(function(t,a){t?r(t):(n=a,e.getObject(n.data,m))}))}function J(e){return Object.prototype.hasOwnProperty.call(S,e)?S[e]:null}function X(e,t,r){return e?"function"==typeof e?e={encoding:t,flag:r}:"string"==typeof e&&(e={encoding:e,flag:r}):e={encoding:t,flag:r},e}function W(e,t,r){!function(e,t,r){B(e,t=o(t),r)}(e,t,(function(n,a){if(n)r(n);else{var o=new T(t,a,e.name);r(null,o)}}))}function Z(e,t){if("number"==typeof e)return e;t(new j.EINVAL("Expected integer",e))}var ee=/^[0-7]+$/;function te(e){return e===e>>>0}function re(e,t,r){return"function"==typeof t&&(r=t,t=void 0),te(e)?e&v:"number"==typeof e?(Number.isInteger(e),r(new j.EINVAL("mode not a valid an integer value",e)),!1):"string"==typeof e?ee.test(e)?parseInt(e,8)&v:(r(new j.EINVAL("mode not a valid octal string",e)),!1):void 0!==t?t:(r(new j.EINVAL("mode not valid",e)),!1)}function ne(e){return"number"==typeof e?e:"object"==typeof e&&"function"==typeof e.getTime?e.getTime():void 0}e.exports={appendFile:function(e,t,r,a,o){o=arguments[arguments.length-1];var i=J((a=X(a,"utf8","a")).flag||"a");if(!i)return o(new j.EINVAL("flags is not valid",t));"number"==typeof(r=r||"")&&(r=""+r),"string"==typeof r&&"utf8"===a.encoding&&(r=n.from(r)),q(e,t,i,(function(n,a){if(n)return o(n);var s=new L(t,a.id,i,a.size),c=$.allocDescriptor(s);K(e,s,r,0,r.length,s.position,(function(e){if($.releaseDescriptor(c),e)return o(e);o(null)}))}))},access:function(e,t,r,n){"function"==typeof r&&(n=r,r=f.fsConstants.F_OK),function(e,t,r,n){const{F_OK:a,R_OK:i,W_OK:s,X_OK:c,S_IXUSR:u,S_IXGRP:l,S_IXOTH:h}=f.fsConstants;B(e,t=o(t),(function(e,o){if(e)return n(e);if(r===a)return n(null);var f=re(o.mode,n);return f?r&(i|s)||r&c&&f&(u|l|h)?n(null):void n(new j.EACCES("permission denied",t)):void 0}))}(e,t,r|=f.fsConstants.F_OK,n)},chown:function(e,t,r,n,a){return te(r)?te(n)?void function(e,t,r,n,a){t=o(t),B(e,t,(function(o,i){o?a(o):(i.uid=r,i.gid=n,N(e,t,i,{mtime:Date.now()},a))}))}(e,t,r,n,a):a(new j.EINVAL("gid must be a valid integer",n)):a(new j.EINVAL("uid must be a valid integer",r))},chmod:function(e,t,r,n){(r=re(r,n))&&function(e,t,r,n){t=o(t),"number"!=typeof r?n(new j.EINVAL("mode must be number",t)):B(e,t,(function(a,o){a?n(a):(o.mode=r,N(e,t,o,{mtime:Date.now()},n))}))}(e,t,r,n)},close:function(e,t,r){$.getOpenFileDescription(t)?($.releaseDescriptor(t),r(null)):r(new j.EBADF)},ensureRootDirectory:function(e,t){var r,n,a;function o(a){a?t(a):F.create({guid:e.guid,id:r.rnode,type:p},(function(r,a){r?t(r):((n=a).nlinks+=1,e.putObject(n.id,n,i))}))}function i(r){r?t(r):(a={},e.putObject(n.data,a,t))}e.getObject(g,(function(n,a){!n&&a?t():!n||n instanceof j.ENOENT?k.create({guid:e.guid},(function(n,a){n?t(n):(r=a,e.putObject(r.id,r,o))})):t(n)}))},exists:function(e,t,r){W(e,t,(function(e){r(!e)}))},fchown:function(e,t,r,n,a){if(!te(r))return a(new j.EINVAL("uid must be a valid integer",r));if(!te(n))return a(new j.EINVAL("gid must be a valid integer",n));var o=$.getOpenFileDescription(t);o?o.flags.includes(E)?function(e,t,r,n,a){t.getNode(e,(function(o,i){o?a(o):(i.uid=r,i.gid=n,N(e,t.path,i,{mtime:Date.now()},a))}))}(e,o,r,n,a):a(new j.EBADF("descriptor does not permit writing")):a(new j.EBADF)},fchmod:function(e,t,r,n){if(r=re(r,n)){var a=$.getOpenFileDescription(t);a?a.flags.includes(E)?function(e,t,r,n){"number"!=typeof r?n(new j.EINVAL("mode must be a number")):t.getNode(e,(function(a,o){a?n(a):(o.mode=r,N(e,t.path,o,{mtime:Date.now()},n))}))}(e,a,r,n):n(new j.EBADF("descriptor does not permit writing")):n(new j.EBADF)}},fgetxattr:function(e,t,r,n){var a=$.getOpenFileDescription(t);a?function(e,t,r,n){"string"!=typeof r?n(new j.EINVAL):r?t.getNode(e,(function(e,t){if(e)return n(e);var a=t.xattrs;Object.prototype.hasOwnProperty.call(a,r)?n(null,a[r]):n(new j.ENOATTR)})):n(new j.EINVAL("attribute name cannot be an empty string"))}(e,a,r,n):n(new j.EBADF)},fremovexattr:function(e,t,r,n){var a=$.getOpenFileDescription(t);a?a.flags.includes(E)?function(e,t,r,n){"string"!=typeof r?n(new j.EINVAL("attribute name must be a string")):r?t.getNode(e,(function(a,o){if(a)return n(a);var i=o.xattrs;Object.prototype.hasOwnProperty.call(i,r)?(delete i[r],e.putObject(o.id,o,(function(r){r?n(r):N(e,t.path,o,{ctime:Date.now()},n)}))):n(new j.ENOATTR)})):n(new j.EINVAL("attribute name cannot be an empty string"))}(e,a,r,n):n(new j.EBADF("descriptor does not permit writing")):n(new j.EBADF)},fsetxattr:function(e,t,r,n,a,o){"function"==typeof a&&(o=a,a=null);var i=$.getOpenFileDescription(t);i?i.flags.includes(E)?function(e,t,r,n,a,o){"string"!=typeof r?o(new j.EINVAL("attribute name must be a string")):r?null!==a&&a!==O&&a!==_?o(new j.EINVAL("invalid flag, must be null, XATTR_CREATE or XATTR_REPLACE")):t.getNode(e,(function(i,s){if(i)return o(i);M(e,t.path,s,r,n,a,o)})):o(new j.EINVAL("attribute name cannot be an empty string"))}(e,i,r,n,a,o):o(new j.EBADF("descriptor does not permit writing")):o(new j.EBADF)},fstat:function(e,t,r){var n=$.getOpenFileDescription(t);n?z(e,n,(function(t,a){if(t)r(t);else{var o=new T(n.path,a,e.name);r(null,o)}})):r(new j.EBADF)},fsync:function(e,t,r){Z(t,r)===t&&($.getOpenFileDescription(t)?r():r(new j.EBADF))},ftruncate:function(e,t,r,a){a=arguments[arguments.length-1],r=r||0;var o=$.getOpenFileDescription(t);if(o)if(o.flags.includes(E)){if(Z(r,a)!==r)return;!function(e,t,r,a){var o;function i(t,i){if(t)a(t);else{var s;if(!i)return a(new j.EIO("Expected Buffer"));s=i?i.slice(0,r):n.alloc(r),e.putBuffer(o.data,s,c)}}function s(r){if(r)a(r);else{var n=Date.now();N(e,t.path,o,{mtime:n,ctime:n},a)}}function c(t){t?a(t):(o.size=r,o.version+=1,e.putObject(o.id,o,s))}r<0?a(new j.EINVAL("length cannot be negative")):t.getNode(e,(function(t,r){t?a(t):r.type===p?a(new j.EISDIR):(o=r,e.getBuffer(o.data,i))}))}(e,o,r,a)}else a(new j.EBADF("descriptor does not permit writing"));else a(new j.EBADF)},futimes:function(e,t,r,n,a){var o=Date.now();r=ne(r||o),n=ne(n||o);var i=$.getOpenFileDescription(t);i?i.flags.includes(E)?function(e,t,r,n,a){"number"!=typeof r||"number"!=typeof n?a(new j.EINVAL("atime and mtime must be a number")):r<0||n<0?a(new j.EINVAL("atime and mtime must be positive integers")):t.getNode(e,(function(o,i){o?a(o):N(e,t.path,i,{atime:r,ctime:n,mtime:n},a)}))}(e,i,r,n,a):a(new j.EBADF("descriptor does not permit writing")):a(new j.EBADF)},getxattr:function(e,t,r,n){!function(e,t,r,n){t=o(t),"string"!=typeof r?n(new j.EINVAL("attribute name must be a string",t)):r?B(e,t,(function(e,a){if(e)return n(e);var o=a.xattrs;Object.prototype.hasOwnProperty.call(o,r)?n(null,o[r]):n(new j.ENOATTR(null,t))})):n(new j.EINVAL("attribute name cannot be an empty string",t))}(e,t,r,n)},link:function(e,t,r,n){H(e,t,r,n)},lseek:function(e,t,r,n,a){var o=$.getOpenFileDescription(t);o||a(new j.EBADF),"SET"===n?r<0?a(new j.EINVAL("resulting file offset would be negative")):(o.position=r,a(null,o.position)):"CUR"===n?o.position+r<0?a(new j.EINVAL("resulting file offset would be negative")):(o.position+=r,a(null,o.position)):"END"===n?z(e,o,(function(e,t){e?a(e):t.size+r<0?a(new j.EINVAL("resulting file offset would be negative")):(o.position=t.size+r,a(null,o.position))})):a(new j.EINVAL("whence argument is not a proper value"))},lstat:function(e,t,r){G(e,t,(function(n,a){if(n)r(n);else{var o=new T(t,a,e.name);r(null,o)}}))},mkdir:function(e,t,r,n){if(arguments.length<4)n=r,r=v;else if(!(r=re(r,v,n)))return;U(e,t,n)},mkdtemp:function(e,t,r,n){if(n=arguments[arguments.length-1],!t)return n(new Error("filename prefix is required"));var a=t+"-"+u.randomChars(6);U(e,a,(function(e){n(e,a)}))},mknod:function(e,t,r,n){!function(e,t,r,n){if(r!==p&&r!==h)return n(new j.EINVAL("type must be a directory or file",t));t=o(t);var a,c,u,l=s(t),f=i(t);function d(r,o){!r&&o?n(new j.EEXIST("path name already exists",t)):!r||r instanceof j.ENOENT?e.getObject(a.data,m):n(r)}function m(t,a){t?n(t):(c=a,F.create({guid:e.guid,type:r},(function(t,r){t?n(t):((u=r).nlinks+=1,e.putObject(u.id,u,y))})))}function v(t){if(t)n(t);else{var r=Date.now();N(e,f,u,{mtime:r,ctime:r},n)}}function y(t){t?n(t):(c[l]=new D(u.id,r),e.putObject(a.data,c,v))}B(e,f,(function(r,o){r?n(r):o.type!==p?n(new j.ENOTDIR("a component of the path prefix is not a directory",t)):(a=o,B(e,t,d))}))}(e,t,r,n)},open:function(e,t,r,n,a){if(arguments.length<5?(a=arguments[arguments.length-1],n=420):n=re(n,v,a),!(r=J(r)))return a(new j.EINVAL("flags is not valid"),t);q(e,t,r,n,(function(e,n){if(e)a(e);else{var o;o=r.includes(x)?n.size:0;var i=new L(t,n.id,r,o),s=$.allocDescriptor(i);a(null,s)}}))},readdir:function(e,t,r,i){!function(e,t,r,i){var s,c;function u(o,s){if(o)i(o);else{c=s;var u=Object.keys(c);if(r.encoding){var f=u.map((function(e){return n.from(e)}));u="buffer"===r.encoding?f:f.map((function(e){return e.toString(r.encoding)}))}if(r.withFileTypes){var h=[];l.eachSeries(u,(function(o,i){const s=n.from(o,r.encoding).toString(),c=a.join(t,s);!function(e,t,r){G(e,t,(function(n,a){if(n)r(n);else{var o=new C(t,a,e.name);r(null,o)}}))}(e,c,(function(e,t){e&&i(e),t.name=o,h.push(t),i()}))}),(function(e){i(e,h)}))}else i(null,u)}}t=o(t),"function"==typeof r&&(i=r,r={}),r=function(e,t){return e?"function"==typeof e?e={encoding:t}:"string"==typeof e&&(e={encoding:e}):e={encoding:t},e}(r),B(e,t,(function(r,n){r?i(r):n.type!==p?i(new j.ENOTDIR(null,t)):(s=n,e.getObject(s.data,u))}))}(e,t,r,i)},read:function(e,t,r,n,a,o,i){n=void 0===n?0:n,a=void 0===a?r.length-n:a,i=arguments[arguments.length-1];var s=$.getOpenFileDescription(t);s?s.flags.includes(b)?Y(e,s,r,n,a,o,(function(e,t){i(e,t||0,r)})):i(new j.EBADF("descriptor does not permit reading")):i(new j.EBADF)},readFile:function(e,t,r,a){a=arguments[arguments.length-1];var o=J((r=X(r,null,"r")).flag||"r");if(!o)return a(new j.EINVAL("flags is not valid",t));q(e,t,o,(function(i,s){if(i)return a(i);var c=new L(t,s.id,o,0),u=$.allocDescriptor(c);function l(){$.releaseDescriptor(u)}z(e,c,(function(o,i){if(o)return l(),a(o);var s=new T(c.path,i,e.name);if(s.isDirectory())return l(),a(new j.EISDIR("illegal operation on directory",t));var u=s.size,f=n.alloc(u);Y(e,c,f,0,u,0,(function(e){if(l(),e)return a(e);var t;t="utf8"===r.encoding?f.toString("utf8"):f,a(null,t)}))}))}))},readlink:function(e,t,r){!function(e,t,r){t=o(t);var n,a,c=s(t),u=i(t);function l(t,n){t?r(t):(a=n,Object.prototype.hasOwnProperty.call(a,c)?e.getObject(a[c].id,f):r(new j.ENOENT("a component of the path does not name an existing file",c)))}function f(e,n){if(e)r(e);else if(n.type!==d)r(new j.EINVAL("path not a symbolic link",t));else{var a=n.symlink_relpath?n.symlink_relpath:n.data;r(null,a)}}B(e,u,(function(t,a){t?r(t):(n=a,e.getObject(n.data,l))}))}(e,t,r)},removexattr:function(e,t,r,n){!function(e,t,r,n){t=o(t),"string"!=typeof r?n(new j.EINVAL("attribute name must be a string",t)):r?B(e,t,(function(a,o){if(a)return n(a);var i=o.xattrs;Object.prototype.hasOwnProperty.call(i,r)?(delete i[r],e.putObject(o.id,o,(function(r){r?n(r):N(e,t,o,{ctime:Date.now()},n)}))):n(new j.ENOATTR(null,t))})):n(new j.EINVAL("attribute name cannot be an empty string",t))}(e,t,r,n)},rename:function(e,t,r,n){t=o(t),r=o(r);var i,s,c,u,l=a.dirname(t),f=a.dirname(r),h=a.basename(t),d=a.basename(r),m=Date.now();function v(t,a){t?n(t):N(e,r,a,{ctime:m},n)}function y(t){t?n(t):e.getObject(u[d].id,v)}function g(t){t?n(t):(i.id===c.id&&(s=u),delete s[h],e.putObject(i.data,s,y))}function w(t){t?n(t):(u[d]=s[h],e.putObject(c.data,u,g))}function b(t,a){t?n(t):(u=a,Object.prototype.hasOwnProperty.call(u,d)?V(e,r,w):w())}function E(t,r){t?n(t):(c=r,e.getObject(c.data,b))}function A(t,r){t?n(t):(s=r,B(e,f,E))}function P(t,r){t?n(t):(i=r,e.getObject(r.data,A))}function x(r){r?n(r):Q(e,t,n)}B(e,t,(function(a,o){a?n(a):o.type===p?B(e,l,P):H(e,t,r,x)}))},rmdir:function(e,t,r){V(e,t,r)},setxattr:function(e,t,r,n,a,i){"function"==typeof a&&(i=a,a=null),function(e,t,r,n,a,i){t=o(t),"string"!=typeof r?i(new j.EINVAL("attribute name must be a string",t)):r?null!==a&&a!==O&&a!==_?i(new j.EINVAL("invalid flag, must be null, XATTR_CREATE or XATTR_REPLACE",t)):B(e,t,(function(o,s){if(o)return i(o);M(e,t,s,r,n,a,i)})):i(new j.EINVAL("attribute name cannot be an empty string",t))}(e,t,r,n,a,i)},stat:W,symlink:function(e,t,r,n,u){!function(e,t,r,n){r=o(r);var u,l,f,h=s(r),p=i(r);function m(r,o){r?n(r):(l=o,Object.prototype.hasOwnProperty.call(l,h)?n(new j.EEXIST(null,h)):F.create({guid:e.guid,type:d},(function(r,o){r?n(r):((f=o).nlinks+=1,c(t)||(f.symlink_relpath=t,t=a.resolve(p,t)),f.size=t.length,f.data=t,e.putObject(f.id,f,g))})))}function v(t){if(t)n(t);else{var r=Date.now();N(e,p,u,{mtime:r,ctime:r},n)}}function g(t){t?n(t):(l[h]=new D(f.id,d),e.putObject(u.data,l,v))}y===h?n(new j.EEXIST(null,h)):B(e,p,(function(t,r){t?n(t):(u=r,e.getObject(u.data,m))}))}(e,t,r,u=arguments[arguments.length-1])},truncate:function(e,t,r,a){Z(r=r||0,a=arguments[arguments.length-1])===r&&function(e,t,r,a){var i;function s(t,o){if(t)a(t);else{if(!o)return a(new j.EIO("Expected Buffer"));var s=n.alloc(r);o&&o.copy(s),e.putBuffer(i.data,s,u)}}function c(r){if(r)a(r);else{var n=Date.now();N(e,t,i,{mtime:n,ctime:n},a)}}function u(t){t?a(t):(i.size=r,i.version+=1,e.putObject(i.id,i,c))}t=o(t),r<0?a(new j.EINVAL("length cannot be negative")):B(e,t,(function(r,n){r?a(r):n.type===p?a(new j.EISDIR(null,t)):(i=n,e.getBuffer(i.data,s))}))}(e,t,r,a)},unlink:function(e,t,r){Q(e,t,r)},utimes:function(e,t,r,n,a){var i=Date.now();!function(e,t,r,n,a){t=o(t),"number"!=typeof r||"number"!=typeof n?a(new j.EINVAL("atime and mtime must be number",t)):r<0||n<0?a(new j.EINVAL("atime and mtime must be positive integers",t)):B(e,t,(function(o,i){o?a(o):N(e,t,i,{atime:r,ctime:n,mtime:n},a)}))}(e,t,r=ne(r||i),n=ne(n||i),a)},writeFile:function(e,t,r,a,o){o=arguments[arguments.length-1];var i=J((a=X(a,"utf8","w")).flag||"w");if(!i)return o(new j.EINVAL("flags is not valid",t));n.isBuffer(r)||("number"==typeof r&&(r=""+r),r="string"!=typeof(r=r||"")?n.from(r.toString()):n.from(r||"",a.encoding||"utf8")),q(e,t,i,(function(a,s){if(a)return o(a);var c=new L(t,s.id,i,0),u=$.allocDescriptor(c);!function(e,t,r,a,o,i){var s;function c(e){e?i(e):i(null,o)}function u(r){if(r)i(r);else{var n=Date.now();N(e,t.path,s,{mtime:n,ctime:n},c)}}function l(t){t?i(t):e.putObject(s.id,s,u)}e.getObject(t.id,(function(a,c){if(a)i(a);else{s=c;var u=n.alloc(o);r.copy(u,0,0,0+o),t.position=o,s.size=o,s.version+=1,e.putBuffer(s.data,u,l)}}))}(e,c,r,0,r.length,(function(e){if($.releaseDescriptor(u),e)return o(e);o(null)}))}))},write:function(e,t,r,n,a,o,i){i=arguments[arguments.length-1],n=void 0===n?0:n,a=void 0===a?r.length-n:a;var s=$.getOpenFileDescription(t);s?s.flags.includes(E)?r.length-n<a?i(new j.EIO("input buffer is too small")):K(e,s,r,n,a,o,i):i(new j.EBADF("descriptor does not permit writing")):i(new j.EBADF)}}},3397:(e,t,r)=>{"use strict";var n=r(2486).lW;const{promisify:a}=r(8658),o=r(4148),i=r(6119),s=r(4702),c=r(4946),u=r(923),l=r(8096),{nop:f,guid:h}=r(5123),{fsConstants:p,FILE_SYSTEM_NAME:d,FS_FORMAT:m,FS_READY:v,FS_PENDING:y,FS_ERROR:g,FS_NODUPEIDCHECK:w,STDIN:b,STDOUT:E,STDERR:A}=r(2762),P=r(8726);function x(e){e&&console.error("Filer error: ",e)}function S(e,t,r){let a=e[t];var i;a=function(e){if(!(e&&e.protocol&&e.pathname))return e;if("file:"!==e.protocol)throw new l.EINVAL("only file: URLs are supported for paths",e);const t=e.pathname;for(let r=0;r<t.length;r++)if("%"===t[r]){const n=32|t.codePointAt(r+2);if("2"===t[r+1]&&102===n)throw new l.EINVAL("file: URLs must not include encoded / characters",e)}return decodeURIComponent(t)}(a),i=a,a=n.isBuffer(i)?i.toString():i;let s=function(e,t){return e?o.isNull(e)?new l.EINVAL("Path must be a string without null bytes.",e):t||o.isAbsolute(e)?void 0:new l.EINVAL("Path must be absolute.",e):new l.EINVAL("Path must be a string",e)}(a,r);if(s)throw s;e[t]=a}function O(e,t){t=t||x;const r=(e=e||{}).flags||[],n=e.guid?e.guid:h,_=e.provider||new i.Default(e.name||d),I=e.name||_.name,R=r.includes(m),j=this;j.readyState=y,j.name=I,j.error=null,j.stdin=b,j.stdout=E,j.stderr=A,j.constants=p,j.F_OK=p.F_OK,j.R_OK=p.R_OK,j.W_OK=p.W_OK,j.X_OK=p.X_OK,this.Shell=s.bind(void 0,this);let D=[];function $(e){return function(t){r.includes(w)?t(null,n()):function t(r){const a=n();e.getObject(a,(function(e,n){e?r(e):n?t(r):r(null,a)}))}(t)}}this.queueOrRun=function(e){let t;return v===j.readyState?e.call(j):g===j.readyState?t=new l.EFILESYSTEMERROR("unknown error"):D.push(e),t},this.watch=function(e,t,r){if(o.isNull(e))throw new Error("Path must be a string without null bytes.");"function"==typeof t&&(r=t,t={}),t=t||{},r=r||f;const n=new u;return n.start(e,!1,t.recursive),n.on("change",r),n},_.open((function(e){function n(e){function n(e){let t=_[e]();return t.name=I,t.flags=r,t.changes=[],t.guid=$(t),t.close=function(){let e=t.changes;!function(e){if(!e.length)return;const t=c.getInstance();e.forEach((function(e){t.emit(e.event,e.path)}))}(e),e.length=0},t}j.provider={openReadWriteContext:function(){return n("getReadWriteContext")},openReadOnlyContext:function(){return n("getReadOnlyContext")}},j.readyState=e?g:v,D.forEach(function(e){e.call(this)}.bind(j)),D=null,t(e,j)}if(e)return n(e);const a=_.getReadWriteContext();a.guid=$(a),R?a.clear((function(e){if(e)return n(e);P.ensureRootDirectory(a,n)})):P.ensureRootDirectory(a,n)})),O.prototype.promises={},[{name:"appendFile",promises:!0,absPathArgs:[0]},{name:"access",promises:!0,absPathArgs:[0]},{name:"chown",promises:!0,absPathArgs:[0]},{name:"chmod",promises:!0,absPathArgs:[0]},{name:"close"},{name:"exists",absPathArgs:[0]},{name:"fchown"},{name:"fchmod"},{name:"fgetxattr"},{name:"fremovexattr"},{name:"fsetxattr"},{name:"fstat"},{name:"fsync"},{name:"ftruncate"},{name:"futimes"},{name:"getxattr",promises:!0,absPathArgs:[0]},{name:"link",promises:!0,absPathArgs:[0,1]},{name:"lseek"},{name:"lstat",promises:!0},{name:"mkdir",promises:!0,absPathArgs:[0]},{name:"mkdtemp",promises:!0},{name:"mknod",promises:!0,absPathArgs:[0]},{name:"open",promises:!0,absPathArgs:[0]},{name:"readdir",promises:!0,absPathArgs:[0]},{name:"read"},{name:"readFile",promises:!0,absPathArgs:[0]},{name:"readlink",promises:!0,absPathArgs:[0]},{name:"removexattr",promises:!0,absPathArgs:[0]},{name:"rename",promises:!0,absPathArgs:[0,1]},{name:"rmdir",promises:!0,absPathArgs:[0]},{name:"setxattr",promises:!0,absPathArgs:[0]},{name:"stat",promises:!0,absPathArgs:[0]},{name:"symlink",promises:!0,relPathArgs:[0],absPathArgs:[1]},{name:"truncate",promises:!0,absPathArgs:[0]},{name:"unlink",promises:!0,absPathArgs:[0]},{name:"utimes",promises:!0,absPathArgs:[0]},{name:"writeFile",promises:!0,absPathArgs:[0]},{name:"write"}].forEach((function(e){const t=e.name,r=!0===e.promises;O.prototype[t]=function(){const r=this,n=Array.prototype.slice.call(arguments,0),a=n.length-1,o="function"!=typeof n[a],i=function(e){return"function"==typeof e?e:function(e){if(e)throw e}}(n[a]);e.absPathArgs&&e.absPathArgs.forEach((e=>S(n,e,!1))),e.relPathArgs&&e.relPathArgs.forEach((e=>S(n,e,!0)));const s=r.queueOrRun((function(){const e=r.provider.openReadWriteContext();if(g===r.readyState){const e=new l.EFILESYSTEMERROR("filesystem unavailable, operation canceled");return i.call(r,e)}function s(){e.close(),i.apply(r,arguments)}o?n.push(s):n[a]=s;const c=[e].concat(n);P[t].apply(null,c)}));s&&i(s)},r&&(O.prototype.promises[t]=a(O.prototype[t].bind(j)))}))}O.providers=i,e.exports=O},923:(e,t,r)=>{const n=r(2040),a=r(4148),o=r(4946);function i(){n.call(this);const e=this;let t,r,i=!1;function s(n){(r===n||i&&0===n.indexOf(t))&&e.trigger("change","change",n)}e.start=function(e,n,c){if(!r){if(a.isNull(e))throw new Error("Path must be a string without null bytes.");r=a.normalize(e),i=!0===c,i&&(t="/"===r?"/":r+"/"),o.getInstance().on("change",s)}},e.close=function(){o.getInstance().off("change",s),e.removeAllListeners("change")}}i.prototype=new n,i.prototype.constructor=i,e.exports=i},28:(e,t,r)=>{var n=r(2486).lW;let a=null,o=null;e.exports=o={FileSystem:r(3397),Buffer:n,Path:r(4148),path:r(4148),Errors:r(8096),Shell:r(4702),FilerWebpackPlugin:r(5595)},Object.defineProperty(o,"fs",{enumerable:!0,get:()=>(a||(a=new o.FileSystem),a)})},8544:(e,t,r)=>{const{NODE_TYPE_FILE:n,NODE_TYPE_DIRECTORY:a,NODE_TYPE_SYMBOLIC_LINK:o,DEFAULT_FILE_PERMISSIONS:i,DEFAULT_DIR_PERMISSIONS:s}=r(2762),{S_IFREG:c,S_IFDIR:u,S_IFLNK:l}=r(2762).fsConstants;function f(e,t,r){if(e[t])return r();e.guid((function(n,a){if(n)return r(n);e[t]=a,r()}))}function h(e,t){switch(e){case a:return(t||s)|u;case o:return(t||i)|l;default:return(t||i)|c}}class p{constructor(e){var t=Date.now();this.id=e.id,this.data=e.data,this.size=e.size||0,this.atime=e.atime||t,this.ctime=e.ctime||t,this.mtime=e.mtime||t,this.flags=e.flags||[],this.xattrs=e.xattrs||{},this.nlinks=e.nlinks||0,"string"==typeof e.type?this.type=e.type:"string"==typeof e.mode?this.type=e.mode:this.type=n,this.permissions=e.permissions||h(this.type),this.uid=e.uid||0,this.gid=e.gid||0}toJSON(){return{id:this.id,data:this.data,size:this.size,atime:this.atime,ctime:this.ctime,mtime:this.ctime,flags:this.flags,xattrs:this.xattrs,nlinks:this.nlinks,mode:this.type,permissions:this.permissions,uid:this.uid,gid:this.gid}}get mode(){return h(this.type,this.permissions)}set mode(e){this.permissions=e}}e.exports.create=function(e,t){f(e,"id",(function(r){if(r)return t(r);f(e,"data",(function(r){if(r)return t(r);t(null,new p(e))}))}))}},5471:(e,t,r)=>{const n=r(8096),a=r(8544);function o(e,t,r,n){this.path=e,this.id=t,this.flags=r,this.position=n}o.prototype.getNode=function(e,t){var r=this.id,o=this.path;e.getObject(r,(function(e,r){return e?t(e):r?void a.create(r,t):t(new n.EBADF("file descriptor refers to unknown node",o))}))},e.exports=o},7816:(e,t,r)=>{const{FIRST_DESCRIPTOR:n}=r(2762),a={},o=e=>a[e];e.exports={allocDescriptor:e=>{const t=(()=>{let e=n;for(;o(e);)e++;return e})();return a[t]=e,t},releaseDescriptor:e=>delete a[e],getOpenFileDescription:o}},4148:(e,t,r)=>{r(2530).cwd=()=>"/";const n=r(9368),a=Object.assign({},n);a.basename=(e,t)=>{const r=n.basename(e,t);return""===r?"/":r},a.normalize=e=>"/"===(e=n.normalize(e))?e:a.removeTrailing(e),a.isNull=e=>-1!==(""+e).indexOf("\0"),a.addTrailing=e=>e.replace(/\/*$/,"/"),a.removeTrailing=e=>""===(e=e.replace(/\/*$/,""))?"/":e,e.exports=a},6119:(e,t,r)=>{const n=r(6535),a=r(4250);e.exports={IndexedDB:n,Default:n,Memory:a}},6535:(e,t,r)=>{var n=r(2486).lW,a=r(2762).FILE_SYSTEM_NAME,o=r(2762).FILE_STORE_NAME,i=r(2762).IDB_RW,s=r(2762).IDB_RO;function c(e,t){this.db=e,this.mode=t}function u(e){this.name=e||a,this.db=null}c.prototype._getObjectStore=function(){if(this.objectStore)return this.objectStore;var e=this.db.transaction(o,this.mode);return this.objectStore=e.objectStore(o),this.objectStore},c.prototype.clear=function(e){try{var t=this._getObjectStore().clear();t.onsuccess=function(){e()},t.onerror=function(t){t.preventDefault(),e(t.error)}}catch(t){e(t)}},c.prototype._get=function(e,t){try{var r=this._getObjectStore().get(e);r.onsuccess=function(e){var r=e.target.result;t(null,r)},r.onerror=function(e){e.preventDefault(),t(e.error)}}catch(e){t(e)}},c.prototype.getObject=function(e,t){this._get(e,t)},c.prototype.getBuffer=function(e,t){this._get(e,(function(e,r){if(e)return t(e);t(null,n.from(r))}))},c.prototype._put=function(e,t,r){try{var n=this._getObjectStore().put(t,e);n.onsuccess=function(e){var t=e.target.result;r(null,t)},n.onerror=function(e){e.preventDefault(),r(e.error)}}catch(e){r(e)}},c.prototype.putObject=function(e,t,r){this._put(e,t,r)},c.prototype.putBuffer=function(e,t,r){var n=t.buffer;this._put(e,n,r)},c.prototype.delete=function(e,t){try{var r=this._getObjectStore().delete(e);r.onsuccess=function(e){var r=e.target.result;t(null,r)},r.onerror=function(e){e.preventDefault(),t(e.error)}}catch(e){t(e)}},u.isSupported=function(){return!!(r.g.indexedDB||r.g.mozIndexedDB||r.g.webkitIndexedDB||r.g.msIndexedDB)},u.prototype.open=function(e){var t=this;if(t.db)return e();try{var n=(r.g.indexedDB||r.g.mozIndexedDB||r.g.webkitIndexedDB||r.g.msIndexedDB).open(t.name);n.onupgradeneeded=function(e){var t=e.target.result;t.objectStoreNames.contains(o)&&t.deleteObjectStore(o),t.createObjectStore(o)},n.onsuccess=function(r){t.db=r.target.result,e()},n.onerror=function(t){t.preventDefault(),e(t.error)}}catch(t){e(t)}},u.prototype.getReadOnlyContext=function(){return new c(this.db,s)},u.prototype.getReadWriteContext=function(){return new c(this.db,i)},e.exports=u},4250:(e,t,r)=>{var n,a=r(2762).FILE_SYSTEM_NAME,o=r(4971).setImmediate,i=(n={},function(e){return Object.prototype.hasOwnProperty.call(n,e)||(n[e]={}),n[e]});function s(e,t){this.readOnly=t,this.objectStore=e}function c(e){this.name=e||a}s.prototype.clear=function(e){if(this.readOnly)o((function(){e("[MemoryContext] Error: write operation on read only context")}));else{var t=this.objectStore;Object.keys(t).forEach((function(e){delete t[e]})),o(e)}},s.prototype.getObject=s.prototype.getBuffer=function(e,t){var r=this;o((function(){t(null,r.objectStore[e])}))},s.prototype.putObject=s.prototype.putBuffer=function(e,t,r){this.readOnly?o((function(){r("[MemoryContext] Error: write operation on read only context")})):(this.objectStore[e]=t,o(r))},s.prototype.delete=function(e,t){this.readOnly?o((function(){t("[MemoryContext] Error: write operation on read only context")})):(delete this.objectStore[e],o(t))},c.isSupported=function(){return!0},c.prototype.open=function(e){this.db=i(this.name),o(e)},c.prototype.getReadOnlyContext=function(){return new s(this.db,!0)},c.prototype.getReadWriteContext=function(){return new s(this.db,!1)},e.exports=c},5123:e=>{function t(e){return e.replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}))}e.exports={guid:function(){return t("xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx").toUpperCase()},nop:function(){},randomChars:function(e){return t("x".repeat(e=e||6))}}},2224:(e,t,r)=>{"use strict";const n=r(2762).ENVIRONMENT;e.exports=function(e){(e=e||{}).TMP=e.TMP||n.TMP,e.PATH=e.PATH||n.PATH,this.get=function(t){return e[t]},this.set=function(t,r){e[t]=r}}},4702:(e,t,r)=>{var{promisify:n}=r(8658),a=r(4148),o=r(8096),i=r(2224),s=r(4971),c=r(7247);function u(e,t){var r=new i((t=t||{}).env),s="/";Object.defineProperty(this,"fs",{get:function(){return e},enumerable:!0}),Object.defineProperty(this,"env",{get:function(){return r},enumerable:!0}),this.cd=function(t,r){t=a.resolve(s,t),e.stat(t,(function(e,n){e?r(new o.ENOTDIR(null,t)):"DIRECTORY"===n.type?(s=t,r()):r(new o.ENOTDIR(null,t))}))},this.pwd=function(){return s},this.promises={},["cd","exec","touch","cat","ls","rm","tempDir","mkdirp","find"].forEach((e=>{this.promises[e]=n(this[e].bind(this))}))}u.prototype.exec=function(e,t,r){var n=this.fs;"function"==typeof t&&(r=t,t=[]),t=t||[],r=r||function(){},e=a.resolve(this.pwd(),e),n.readFile(e,"utf8",(function(e,a){if(e)r(e);else try{new Function("fs","args","callback",a)(n,t,r)}catch(e){r(e)}}))},u.prototype.touch=function(e,t,r){var n=this.fs;"function"==typeof t&&(r=t,t={}),t=t||{},r=r||function(){},e=a.resolve(this.pwd(),e),n.stat(e,(function(a){a?!0===t.updateOnly?r():function(e){n.writeFile(e,"",r)}(e):function(e){var a=Date.now(),o=t.date||a,i=t.date||a;n.utimes(e,o,i,r)}(e)}))},u.prototype.cat=function(e,t){var r=this,n=r.fs,i="";t=t||function(){},e?(e="string"==typeof e?[e]:e,s.eachSeries(e,(function(e,t){var o=a.resolve(r.pwd(),e);n.readFile(o,"utf8",(function(e,r){e?t(e):(i+=r+"\n",t())}))}),(function(e){e?t(e):t(null,i.replace(/\n$/,""))}))):t(new o.EINVAL("Missing files argument"))},u.prototype.ls=function(e,t,r){var n=this,i=n.fs;"function"==typeof t&&(r=t,t={}),t=t||{},r=r||function(){},e?function e(r,o){var c=a.resolve(n.pwd(),r),u=[];i.readdir(c,(function(r,n){r?o(r):s.eachSeries(n,(function(r,n){r=a.join(c,r),i.stat(r,(function(r,o){if(r)n(r);else{var i=o;t.recursive&&"DIRECTORY"===o.type?e(a.join(c,i.name),(function(e,t){e?n(e):(i.contents=t,u.push(i),n())})):(u.push(i),n())}}))}),(function(e){o(e,u)}))}))}(e,r):r(new o.EINVAL("Missing dir argument"))},u.prototype.rm=function(e,t,r){var n=this,i=n.fs;"function"==typeof t&&(r=t,t={}),t=t||{},r=r||function(){},e?function e(r,c){r=a.resolve(n.pwd(),r),i.stat(r,(function(n,u){n?c(n):"FILE"!==u.type?i.readdir(r,(function(n,u){n?c(n):0!==u.length?t.recursive?(u=u.map((function(e){return a.join(r,e)})),s.eachSeries(u,e,(function(e){e?c(e):i.rmdir(r,c)}))):c(new o.ENOTEMPTY(null,r)):i.rmdir(r,c)})):i.unlink(r,c)}))}(e,r):r(new o.EINVAL("Missing path argument"))},u.prototype.tempDir=function(e){var t=this.fs,r=this.env.get("TMP");e=e||function(){},t.mkdir(r,(function(){e(null,r)}))},u.prototype.mkdirp=function(e,t){var r=this.fs;t=t||function(){},e?"/"!==(e=a.resolve(this.pwd(),e))?function e(t,n){r.stat(t,(function(i,s){if(s){if(s.isDirectory())return void n();if(s.isFile())return void n(new o.ENOTDIR(null,t))}else{if(i&&"ENOENT"!==i.code)return void n(i);var c=a.dirname(t);"/"===c?r.mkdir(t,(function(e){e&&"EEXIST"!==e.code?n(e):n()})):e(c,(function(e){if(e)return n(e);r.mkdir(t,(function(e){e&&"EEXIST"!==e.code?n(e):n()}))}))}}))}(e,t):t():t(new o.EINVAL("Missing path argument"))},u.prototype.find=function(e,t,r){var n=this,i=n.fs;"function"==typeof t&&(r=t,t={}),r=r||function(){};var u=(t=t||{}).exec||function(e,t){t()},l=[];function f(e,r){var n=a.removeTrailing(e);!t.regex||t.regex.test(n)?t.name&&!c(a.basename(n),t.name)||t.path&&!c(a.dirname(n),t.path)?r():function(e,t){u(e,(function(r){r?t(r):(l.push(e),t())}))}(e,r):r()}function h(e,t){e=a.resolve(n.pwd(),e),i.readdir(e,(function(r,n){r?"ENOTDIR"===r.code?f(e,t):t(r):f(a.addTrailing(e),(function(r){r?t(r):(n=n.map((function(t){return a.join(e,t)})),s.eachSeries(n,h,(function(e){t(e,l)})))}))}))}e?i.stat(e,(function(t,n){t?r(t):n.isDirectory()?h(e,r):r(new o.ENOTDIR(null,e))})):r(new o.EINVAL("Missing path argument"))},e.exports=u},6769:(e,t,r)=>{"use strict";const n=r(2762),a=r(4148);function o(e){return new Date(Number(e))}function i(e,t,r){this.dev=r,this.node=t.id,this.type=t.type,this.size=t.size,this.nlinks=t.nlinks,this.atime=o(t.atime),this.mtime=o(t.mtime),this.ctime=o(t.ctime),this.atimeMs=t.atime,this.mtimeMs=t.mtime,this.ctimeMs=t.ctime,this.version=t.version,this.mode=t.mode,this.uid=t.uid,this.gid=t.gid,this.name=a.basename(e)}i.prototype.isFile=function(){return this.type===n.NODE_TYPE_FILE},i.prototype.isDirectory=function(){return this.type===n.NODE_TYPE_DIRECTORY},i.prototype.isSymbolicLink=function(){return this.type===n.NODE_TYPE_SYMBOLIC_LINK},i.prototype.isSocket=i.prototype.isFIFO=i.prototype.isCharacterDevice=i.prototype.isBlockDevice=function(){return!1},e.exports=i},4698:(e,t,r)=>{var n=r(2762);function a(e){var t=Date.now();this.id=n.SUPER_NODE_ID,this.type=n.NODE_TYPE_META,this.atime=e.atime||t,this.ctime=e.ctime||t,this.mtime=e.mtime||t,this.rnode=e.rnode}a.create=function(e,t){e.guid((function(r,n){r?t(r):(e.rnode=e.rnode||n,t(null,new a(e)))}))},e.exports=a},5595:(e,t,r)=>{var n=r(9368),a=r(3848);const o="filer-webpack-plugin",i=r(3140),s=r(225);e.exports=class{constructor(e={}){a.validateOptions(e,i),this.options=a.processOptions(e,s)}apply(e){e.hooks.normalModuleFactory.tap(o,(e=>{e.hooks.resolve.tap(o,(e=>{if("fsProvider"===e.request&&e.context===this.options.shimsDir)return this.resolveFsProvider(e);if(!e.context.startsWith(this.options.filerDir))switch(e.request){case"fs":if(!this.options.shimFs)return;return this.applyFsShim(e);case"path":if(!this.options.shimPath)return;return this.applyPathShim(e);default:return}}))}))}resolveFsProvider(e){switch(this.options.fsProvider){case"default":e.request=n.join(this.options.fsProviderDir,"default.js");break;case"indexeddb":e.request=n.join(this.options.fsProviderDir,"indexeddb.js");break;case"memory":e.request=n.join(this.options.fsProviderDir,"memory.js");break;case"custom":e.request=n.join(this.options.fsProviderDir,"custom.js");break;default:throw new Error(["Invalid option for fsProvider.","fsProvider must be one of 'default', 'indexeddb', 'memory' or 'custom'.","If using a custom fsProvider, you must also provide the fsProviderDir option."].join(" "))}}applyFsShim(e){e.request=n.join(this.options.shimsDir,"fs.js")}applyPathShim(e){e.request=n.join(this.options.shimsDir,"path.js")}}},225:(e,t,r)=>{var n=r(2530),a=r(9368);const o="<rootDir>",i=n.cwd();e.exports={filerDir:{process:function(e){return e?a.resolve(e.replace(o,i)):a.join(i,"node_modules","filer")}},shimsDir:{process:function(e){return e?a.resolve(e.replace(o,i)):a.join(i,"node_modules","filer","shims")}},fsProviderDir:{process:function(e){return e?a.resolve(e.replace(o,i)):a.join(i,"node_modules","filer","shims","providers")}},shimFs:{default:!0},shimPath:{default:!0},fsProvider:{default:"default"}}},3140:e=>{e.exports={type:"object",properties:{filerDir:{type:"string"},shimsDir:{type:"string"},shimFs:{type:"boolean"},shimPath:{type:"boolean"},fsProvider:{type:"string"},fsProviderDir:{type:"string"}}}},3848:(e,t,r)=>{var{validate:n}=r(5842);e.exports={validateOptions:function(e,t){n(t,e)},processOptions:function(e,t){const r={};for(const[n,a]of Object.entries(t))r[n]=e[n],void 0===r[n]&&(r[n]=a.default),a.process&&(r[n]=a.process(r[n]));return r}}},4525:(e,t)=>{t.read=function(e,t,r,n,a){var o,i,s=8*a-n-1,c=(1<<s)-1,u=c>>1,l=-7,f=r?a-1:0,h=r?-1:1,p=e[t+f];for(f+=h,o=p&(1<<-l)-1,p>>=-l,l+=s;l>0;o=256*o+e[t+f],f+=h,l-=8);for(i=o&(1<<-l)-1,o>>=-l,l+=n;l>0;i=256*i+e[t+f],f+=h,l-=8);if(0===o)o=1-u;else{if(o===c)return i?NaN:1/0*(p?-1:1);i+=Math.pow(2,n),o-=u}return(p?-1:1)*i*Math.pow(2,o-n)},t.write=function(e,t,r,n,a,o){var i,s,c,u=8*o-a-1,l=(1<<u)-1,f=l>>1,h=23===a?Math.pow(2,-24)-Math.pow(2,-77):0,p=n?0:o-1,d=n?1:-1,m=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,i=l):(i=Math.floor(Math.log(t)/Math.LN2),t*(c=Math.pow(2,-i))<1&&(i--,c*=2),(t+=i+f>=1?h/c:h*Math.pow(2,1-f))*c>=2&&(i++,c/=2),i+f>=l?(s=0,i=l):i+f>=1?(s=(t*c-1)*Math.pow(2,a),i+=f):(s=t*Math.pow(2,f-1)*Math.pow(2,a),i=0));a>=8;e[r+p]=255&s,p+=d,s/=256,a-=8);for(i=i<<a|s,u+=a;u>0;e[r+p]=255&i,p+=d,i/=256,u-=8);e[r+p-d]|=128*m}},500:e=>{"use strict";var t=e.exports=function(e,t,n){"function"==typeof t&&(n=t,t={}),r(t,"function"==typeof(n=t.cb||n)?n:n.pre||function(){},n.post||function(){},e,"",e)};function r(e,n,a,o,i,s,c,u,l,f){if(o&&"object"==typeof o&&!Array.isArray(o)){for(var h in n(o,i,s,c,u,l,f),o){var p=o[h];if(Array.isArray(p)){if(h in t.arrayKeywords)for(var d=0;d<p.length;d++)r(e,n,a,p[d],i+"/"+h+"/"+d,s,i,h,o,d)}else if(h in t.propsKeywords){if(p&&"object"==typeof p)for(var m in p)r(e,n,a,p[m],i+"/"+h+"/"+m.replace(/~/g,"~0").replace(/\//g,"~1"),s,i,h,o,m)}else(h in t.keywords||e.allKeys&&!(h in t.skipKeywords))&&r(e,n,a,p,i+"/"+h,s,i,h,o)}a(o,i,s,c,u,l,f)}}t.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0},t.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0},t.propsKeywords={definitions:!0,properties:!0,patternProperties:!0,dependencies:!0},t.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0}},7247:(e,t,r)=>{e.exports=h,h.Minimatch=p;var n=function(){try{return r(2872)}catch(e){}}()||{sep:"/"};h.sep=n.sep;var a=h.GLOBSTAR=p.GLOBSTAR={},o=r(8098),i={"!":{open:"(?:(?!(?:",close:"))[^/]*?)"},"?":{open:"(?:",close:")?"},"+":{open:"(?:",close:")+"},"*":{open:"(?:",close:")*"},"@":{open:"(?:",close:")"}},s="[^/]",c=s+"*?",u="().*{}+?[]^$\\!".split("").reduce((function(e,t){return e[t]=!0,e}),{}),l=/\/+/;function f(e,t){t=t||{};var r={};return Object.keys(e).forEach((function(t){r[t]=e[t]})),Object.keys(t).forEach((function(e){r[e]=t[e]})),r}function h(e,t,r){return m(t),r||(r={}),!(!r.nocomment&&"#"===t.charAt(0))&&new p(t,r).match(e)}function p(e,t){if(!(this instanceof p))return new p(e,t);m(e),t||(t={}),e=e.trim(),t.allowWindowsEscape||"/"===n.sep||(e=e.split(n.sep).join("/")),this.options=t,this.set=[],this.pattern=e,this.regexp=null,this.negate=!1,this.comment=!1,this.empty=!1,this.partial=!!t.partial,this.make()}function d(e,t){return t||(t=this instanceof p?this.options:{}),e=void 0===e?this.pattern:e,m(e),t.nobrace||!/\{(?:(?!\{).)*\}/.test(e)?[e]:o(e)}h.filter=function(e,t){return t=t||{},function(r,n,a){return h(r,e,t)}},h.defaults=function(e){if(!e||"object"!=typeof e||!Object.keys(e).length)return h;var t=h,r=function(r,n,a){return t(r,n,f(e,a))};return(r.Minimatch=function(r,n){return new t.Minimatch(r,f(e,n))}).defaults=function(r){return t.defaults(f(e,r)).Minimatch},r.filter=function(r,n){return t.filter(r,f(e,n))},r.defaults=function(r){return t.defaults(f(e,r))},r.makeRe=function(r,n){return t.makeRe(r,f(e,n))},r.braceExpand=function(r,n){return t.braceExpand(r,f(e,n))},r.match=function(r,n,a){return t.match(r,n,f(e,a))},r},p.defaults=function(e){return h.defaults(e).Minimatch},p.prototype.debug=function(){},p.prototype.make=function(){var e=this.pattern,t=this.options;if(t.nocomment||"#"!==e.charAt(0))if(e){this.parseNegate();var r=this.globSet=this.braceExpand();t.debug&&(this.debug=function(){console.error.apply(console,arguments)}),this.debug(this.pattern,r),r=this.globParts=r.map((function(e){return e.split(l)})),this.debug(this.pattern,r),r=r.map((function(e,t,r){return e.map(this.parse,this)}),this),this.debug(this.pattern,r),r=r.filter((function(e){return-1===e.indexOf(!1)})),this.debug(this.pattern,r),this.set=r}else this.empty=!0;else this.comment=!0},p.prototype.parseNegate=function(){var e=this.pattern,t=!1,r=0;if(!this.options.nonegate){for(var n=0,a=e.length;n<a&&"!"===e.charAt(n);n++)t=!t,r++;r&&(this.pattern=e.substr(r)),this.negate=t}},h.braceExpand=function(e,t){return d(e,t)},p.prototype.braceExpand=d;var m=function(e){if("string"!=typeof e)throw new TypeError("invalid pattern");if(e.length>65536)throw new TypeError("pattern is too long")};p.prototype.parse=function(e,t){m(e);var r=this.options;if("**"===e){if(!r.noglobstar)return a;e="*"}if(""===e)return"";var n,o="",l=!!r.nocase,f=!1,h=[],p=[],d=!1,y=-1,g=-1,w="."===e.charAt(0)?"":r.dot?"(?!(?:^|\\/)\\.{1,2}(?:$|\\/))":"(?!\\.)",b=this;function E(){if(n){switch(n){case"*":o+=c,l=!0;break;case"?":o+=s,l=!0;break;default:o+="\\"+n}b.debug("clearStateChar %j %j",n,o),n=!1}}for(var A,P=0,x=e.length;P<x&&(A=e.charAt(P));P++)if(this.debug("%s\t%s %s %j",e,P,o,A),f&&u[A])o+="\\"+A,f=!1;else switch(A){case"/":return!1;case"\\":E(),f=!0;continue;case"?":case"*":case"+":case"@":case"!":if(this.debug("%s\t%s %s %j <-- stateChar",e,P,o,A),d){this.debug(" in class"),"!"===A&&P===g+1&&(A="^"),o+=A;continue}b.debug("call clearStateChar %j",n),E(),n=A,r.noext&&E();continue;case"(":if(d){o+="(";continue}if(!n){o+="\\(";continue}h.push({type:n,start:P-1,reStart:o.length,open:i[n].open,close:i[n].close}),o+="!"===n?"(?:(?!(?:":"(?:",this.debug("plType %j %j",n,o),n=!1;continue;case")":if(d||!h.length){o+="\\)";continue}E(),l=!0;var S=h.pop();o+=S.close,"!"===S.type&&p.push(S),S.reEnd=o.length;continue;case"|":if(d||!h.length||f){o+="\\|",f=!1;continue}E(),o+="|";continue;case"[":if(E(),d){o+="\\"+A;continue}d=!0,g=P,y=o.length,o+=A;continue;case"]":if(P===g+1||!d){o+="\\"+A,f=!1;continue}var O=e.substring(g+1,P);try{RegExp("["+O+"]")}catch(e){var _=this.parse(O,v);o=o.substr(0,y)+"\\["+_[0]+"\\]",l=l||_[1],d=!1;continue}l=!0,d=!1,o+=A;continue;default:E(),f?f=!1:!u[A]||"^"===A&&d||(o+="\\"),o+=A}for(d&&(O=e.substr(g+1),_=this.parse(O,v),o=o.substr(0,y)+"\\["+_[0],l=l||_[1]),S=h.pop();S;S=h.pop()){var I=o.slice(S.reStart+S.open.length);this.debug("setting tail",o,S),I=I.replace(/((?:\\{2}){0,64})(\\?)\|/g,(function(e,t,r){return r||(r="\\"),t+t+r+"|"})),this.debug("tail=%j\n %s",I,I,S,o);var R="*"===S.type?c:"?"===S.type?s:"\\"+S.type;l=!0,o=o.slice(0,S.reStart)+R+"\\("+I}E(),f&&(o+="\\\\");var j=!1;switch(o.charAt(0)){case"[":case".":case"(":j=!0}for(var D=p.length-1;D>-1;D--){var $=p[D],L=o.slice(0,$.reStart),k=o.slice($.reStart,$.reEnd-8),F=o.slice($.reEnd-8,$.reEnd),C=o.slice($.reEnd);F+=C;var T=L.split("(").length-1,N=C;for(P=0;P<T;P++)N=N.replace(/\)[+*?]?/,"");var B="";""===(C=N)&&t!==v&&(B="$"),o=L+k+C+B+F}if(""!==o&&l&&(o="(?=.)"+o),j&&(o=w+o),t===v)return[o,l];if(!l)return e.replace(/\\(.)/g,"$1");var M=r.nocase?"i":"";try{var U=new RegExp("^"+o+"$",M)}catch(e){return new RegExp("$.")}return U._glob=e,U._src=o,U};var v={};h.makeRe=function(e,t){return new p(e,t||{}).makeRe()},p.prototype.makeRe=function(){if(this.regexp||!1===this.regexp)return this.regexp;var e=this.set;if(!e.length)return this.regexp=!1,this.regexp;var t=this.options,r=t.noglobstar?c:t.dot?"(?:(?!(?:\\/|^)(?:\\.{1,2})($|\\/)).)*?":"(?:(?!(?:\\/|^)\\.).)*?",n=t.nocase?"i":"",o=e.map((function(e){return e.map((function(e){return e===a?r:"string"==typeof e?e.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&"):e._src})).join("\\/")})).join("|");o="^(?:"+o+")$",this.negate&&(o="^(?!"+o+").*$");try{this.regexp=new RegExp(o,n)}catch(e){this.regexp=!1}return this.regexp},h.match=function(e,t,r){var n=new p(t,r=r||{});return e=e.filter((function(e){return n.match(e)})),n.options.nonull&&!e.length&&e.push(t),e},p.prototype.match=function(e,t){if(void 0===t&&(t=this.partial),this.debug("match",e,this.pattern),this.comment)return!1;if(this.empty)return""===e;if("/"===e&&t)return!0;var r=this.options;"/"!==n.sep&&(e=e.split(n.sep).join("/")),e=e.split(l),this.debug(this.pattern,"split",e);var a,o,i=this.set;for(this.debug(this.pattern,"set",i),o=e.length-1;o>=0&&!(a=e[o]);o--);for(o=0;o<i.length;o++){var s=i[o],c=e;if(r.matchBase&&1===s.length&&(c=[a]),this.matchOne(c,s,t))return!!r.flipNegate||!this.negate}return!r.flipNegate&&this.negate},p.prototype.matchOne=function(e,t,r){var n=this.options;this.debug("matchOne",{this:this,file:e,pattern:t}),this.debug("matchOne",e.length,t.length);for(var o=0,i=0,s=e.length,c=t.length;o<s&&i<c;o++,i++){this.debug("matchOne loop");var u,l=t[i],f=e[o];if(this.debug(t,l,f),!1===l)return!1;if(l===a){this.debug("GLOBSTAR",[t,l,f]);var h=o,p=i+1;if(p===c){for(this.debug("** at the end");o<s;o++)if("."===e[o]||".."===e[o]||!n.dot&&"."===e[o].charAt(0))return!1;return!0}for(;h<s;){var d=e[h];if(this.debug("\nglobstar while",e,h,t,p,d),this.matchOne(e.slice(h),t.slice(p),r))return this.debug("globstar found match!",h,s,d),!0;if("."===d||".."===d||!n.dot&&"."===d.charAt(0)){this.debug("dot detected!",e,h,t,p);break}this.debug("globstar swallow a segment, and continue"),h++}return!(!r||(this.debug("\n>>> no match, partial?",e,h,t,p),h!==s))}if("string"==typeof l?(u=f===l,this.debug("string match",l,f,u)):(u=f.match(l),this.debug("pattern match",l,f,u)),!u)return!1}if(o===s&&i===c)return!0;if(o===s)return r;if(i===c)return o===s-1&&""===e[o];throw new Error("wtf?")}},9368:(e,t,r)=>{"use strict";var n=r(2530);function a(e){if("string"!=typeof e)throw new TypeError("Path must be a string. Received "+JSON.stringify(e))}function o(e,t){for(var r,n="",a=0,o=-1,i=0,s=0;s<=e.length;++s){if(s<e.length)r=e.charCodeAt(s);else{if(47===r)break;r=47}if(47===r){if(o===s-1||1===i);else if(o!==s-1&&2===i){if(n.length<2||2!==a||46!==n.charCodeAt(n.length-1)||46!==n.charCodeAt(n.length-2))if(n.length>2){var c=n.lastIndexOf("/");if(c!==n.length-1){-1===c?(n="",a=0):a=(n=n.slice(0,c)).length-1-n.lastIndexOf("/"),o=s,i=0;continue}}else if(2===n.length||1===n.length){n="",a=0,o=s,i=0;continue}t&&(n.length>0?n+="/..":n="..",a=2)}else n.length>0?n+="/"+e.slice(o+1,s):n=e.slice(o+1,s),a=s-o-1;o=s,i=0}else 46===r&&-1!==i?++i:i=-1}return n}var i={resolve:function(){for(var e,t="",r=!1,i=arguments.length-1;i>=-1&&!r;i--){var s;i>=0?s=arguments[i]:(void 0===e&&(e=n.cwd()),s=e),a(s),0!==s.length&&(t=s+"/"+t,r=47===s.charCodeAt(0))}return t=o(t,!r),r?t.length>0?"/"+t:"/":t.length>0?t:"."},normalize:function(e){if(a(e),0===e.length)return".";var t=47===e.charCodeAt(0),r=47===e.charCodeAt(e.length-1);return 0!==(e=o(e,!t)).length||t||(e="."),e.length>0&&r&&(e+="/"),t?"/"+e:e},isAbsolute:function(e){return a(e),e.length>0&&47===e.charCodeAt(0)},join:function(){if(0===arguments.length)return".";for(var e,t=0;t<arguments.length;++t){var r=arguments[t];a(r),r.length>0&&(void 0===e?e=r:e+="/"+r)}return void 0===e?".":i.normalize(e)},relative:function(e,t){if(a(e),a(t),e===t)return"";if((e=i.resolve(e))===(t=i.resolve(t)))return"";for(var r=1;r<e.length&&47===e.charCodeAt(r);++r);for(var n=e.length,o=n-r,s=1;s<t.length&&47===t.charCodeAt(s);++s);for(var c=t.length-s,u=o<c?o:c,l=-1,f=0;f<=u;++f){if(f===u){if(c>u){if(47===t.charCodeAt(s+f))return t.slice(s+f+1);if(0===f)return t.slice(s+f)}else o>u&&(47===e.charCodeAt(r+f)?l=f:0===f&&(l=0));break}var h=e.charCodeAt(r+f);if(h!==t.charCodeAt(s+f))break;47===h&&(l=f)}var p="";for(f=r+l+1;f<=n;++f)f!==n&&47!==e.charCodeAt(f)||(0===p.length?p+="..":p+="/..");return p.length>0?p+t.slice(s+l):(s+=l,47===t.charCodeAt(s)&&++s,t.slice(s))},_makeLong:function(e){return e},dirname:function(e){if(a(e),0===e.length)return".";for(var t=e.charCodeAt(0),r=47===t,n=-1,o=!0,i=e.length-1;i>=1;--i)if(47===(t=e.charCodeAt(i))){if(!o){n=i;break}}else o=!1;return-1===n?r?"/":".":r&&1===n?"//":e.slice(0,n)},basename:function(e,t){if(void 0!==t&&"string"!=typeof t)throw new TypeError('"ext" argument must be a string');a(e);var r,n=0,o=-1,i=!0;if(void 0!==t&&t.length>0&&t.length<=e.length){if(t.length===e.length&&t===e)return"";var s=t.length-1,c=-1;for(r=e.length-1;r>=0;--r){var u=e.charCodeAt(r);if(47===u){if(!i){n=r+1;break}}else-1===c&&(i=!1,c=r+1),s>=0&&(u===t.charCodeAt(s)?-1==--s&&(o=r):(s=-1,o=c))}return n===o?o=c:-1===o&&(o=e.length),e.slice(n,o)}for(r=e.length-1;r>=0;--r)if(47===e.charCodeAt(r)){if(!i){n=r+1;break}}else-1===o&&(i=!1,o=r+1);return-1===o?"":e.slice(n,o)},extname:function(e){a(e);for(var t=-1,r=0,n=-1,o=!0,i=0,s=e.length-1;s>=0;--s){var c=e.charCodeAt(s);if(47!==c)-1===n&&(o=!1,n=s+1),46===c?-1===t?t=s:1!==i&&(i=1):-1!==t&&(i=-1);else if(!o){r=s+1;break}}return-1===t||-1===n||0===i||1===i&&t===n-1&&t===r+1?"":e.slice(t,n)},format:function(e){if(null===e||"object"!=typeof e)throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof e);return function(e,t){var r=t.dir||t.root,n=t.base||(t.name||"")+(t.ext||"");return r?r===t.root?r+n:r+"/"+n:n}(0,e)},parse:function(e){a(e);var t={root:"",dir:"",base:"",ext:"",name:""};if(0===e.length)return t;var r,n=e.charCodeAt(0),o=47===n;o?(t.root="/",r=1):r=0;for(var i=-1,s=0,c=-1,u=!0,l=e.length-1,f=0;l>=r;--l)if(47!==(n=e.charCodeAt(l)))-1===c&&(u=!1,c=l+1),46===n?-1===i?i=l:1!==f&&(f=1):-1!==i&&(f=-1);else if(!u){s=l+1;break}return-1===i||-1===c||0===f||1===f&&i===c-1&&i===s+1?-1!==c&&(t.base=t.name=0===s&&o?e.slice(1,c):e.slice(s,c)):(0===s&&o?(t.name=e.slice(1,i),t.base=e.slice(1,c)):(t.name=e.slice(s,i),t.base=e.slice(s,c)),t.ext=e.slice(i,c)),s>0?t.dir=e.slice(0,s-1):o&&(t.dir="/"),t},sep:"/",delimiter:":",win32:null,posix:null};i.posix=i,e.exports=i},2530:e=>{var t,r,n=e.exports={};function a(){throw new Error("setTimeout has not been defined")}function o(){throw new Error("clearTimeout has not been defined")}function i(e){if(t===setTimeout)return setTimeout(e,0);if((t===a||!t)&&setTimeout)return t=setTimeout,setTimeout(e,0);try{return t(e,0)}catch(r){try{return t.call(null,e,0)}catch(r){return t.call(this,e,0)}}}!function(){try{t="function"==typeof setTimeout?setTimeout:a}catch(e){t=a}try{r="function"==typeof clearTimeout?clearTimeout:o}catch(e){r=o}}();var s,c=[],u=!1,l=-1;function f(){u&&s&&(u=!1,s.length?c=s.concat(c):l=-1,c.length&&h())}function h(){if(!u){var e=i(f);u=!0;for(var t=c.length;t;){for(s=c,c=[];++l<t;)s&&s[l].run();l=-1,t=c.length}s=null,u=!1,function(e){if(r===clearTimeout)return clearTimeout(e);if((r===o||!r)&&clearTimeout)return r=clearTimeout,clearTimeout(e);try{return r(e)}catch(t){try{return r.call(null,e)}catch(t){return r.call(this,e)}}}(e)}}function p(e,t){this.fun=e,this.array=t}function d(){}n.nextTick=function(e){var t=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)t[r-1]=arguments[r];c.push(new p(e,t)),1!==c.length||u||i(h)},p.prototype.run=function(){this.fun.apply(null,this.array)},n.title="browser",n.browser=!0,n.env={},n.argv=[],n.version="",n.versions={},n.on=d,n.addListener=d,n.once=d,n.off=d,n.removeListener=d,n.removeAllListeners=d,n.emit=d,n.prependListener=d,n.prependOnceListener=d,n.listeners=function(e){return[]},n.binding=function(e){throw new Error("process.binding is not supported")},n.cwd=function(){return"/"},n.chdir=function(e){throw new Error("process.chdir is not supported")},n.umask=function(){return 0}},3760:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;const{stringHints:n,numberHints:a}=r(6737),o={type:1,not:1,oneOf:1,anyOf:1,if:1,enum:1,const:1,instanceof:1,required:2,pattern:2,patternRequired:2,format:2,formatMinimum:2,formatMaximum:2,minimum:2,exclusiveMinimum:2,maximum:2,exclusiveMaximum:2,multipleOf:2,uniqueItems:2,contains:2,minLength:2,maxLength:2,minItems:2,maxItems:2,minProperties:2,maxProperties:2,dependencies:2,propertyNames:2,additionalItems:2,additionalProperties:2,absolutePath:2};function i(e,t){const r=e.reduce(((e,r)=>Math.max(e,t(r))),0);return e.filter((e=>t(e)===r))}function s(e,t){let r=e.length-1;const n=t=>0!==e[r].schemaPath.indexOf(t);for(;r>-1&&!t.every(n);)if("anyOf"===e[r].keyword||"oneOf"===e[r].keyword){const t=c(e[r]),n=s(e.slice(0,r),t.concat(e[r].schemaPath));r=n-1}else r-=1;return r+1}function c(e){const{schema:t}=e;return Array.isArray(t)?t.map((({$ref:e})=>e)).filter((e=>e)):[]}function u(e,t){return e.replace(/\n(?!$)/g,`\n${t}`)}function l(e){return!!e.not}function f(e){return l(e)?f(e.not):e}function h(e){const t=f(e);return d(t)||m(t)||v(t)||b(t)||y(t)}function p(e){return"object"==typeof e&&null!==e}function d(e){return"number"===e.type||void 0!==e.minimum||void 0!==e.exclusiveMinimum||void 0!==e.maximum||void 0!==e.exclusiveMaximum||void 0!==e.multipleOf}function m(e){return"integer"===e.type||void 0!==e.minimum||void 0!==e.exclusiveMinimum||void 0!==e.maximum||void 0!==e.exclusiveMaximum||void 0!==e.multipleOf}function v(e){return"string"===e.type||void 0!==e.minLength||void 0!==e.maxLength||void 0!==e.pattern||void 0!==e.format||void 0!==e.formatMinimum||void 0!==e.formatMaximum}function y(e){return"boolean"===e.type}function g(e){return"array"===e.type||"number"==typeof e.minItems||"number"==typeof e.maxItems||void 0!==e.uniqueItems||void 0!==e.items||void 0!==e.additionalItems||void 0!==e.contains}function w(e){return"object"===e.type||void 0!==e.minProperties||void 0!==e.maxProperties||void 0!==e.required||void 0!==e.properties||void 0!==e.patternProperties||void 0!==e.additionalProperties||void 0!==e.dependencies||void 0!==e.propertyNames||void 0!==e.patternRequired}function b(e){return"null"===e.type}function E(e){if(!e)return"";if(!e.type){if(d(e)||m(e))return" | should be any non-number";if(v(e))return" | should be any non-string";if(g(e))return" | should be any non-array";if(w(e))return" | should be any non-object"}return""}function A(e){return e.length>0?`(${e.join(", ")})`:""}function P(e,t){return d(e)||m(e)?a(e,t):v(e)?n(e,t):[]}class x extends Error{constructor(e,t,r={}){let n,a;if(super(),this.name="ValidationError",this.errors=e,this.schema=t,t.title&&(!r.name||!r.baseDataPath)){const e=t.title.match(/^(.+) (.+)$/);e&&(r.name||([,n]=e),r.baseDataPath||([,,a]=e))}this.headerName=r.name||n||"Object",this.baseDataPath=r.baseDataPath||a||"configuration",this.postFormatter=r.postFormatter||null;const o=`Invalid ${this.baseDataPath} object. ${this.headerName} has been initialized using ${i=this.baseDataPath,/^[aeiou]/i.test(i)?"an":"a"} ${this.baseDataPath} object that does not match the API schema.\n`;var i;this.message=`${o}${this.formatValidationErrors(e)}`,Error.captureStackTrace(this,this.constructor)}getSchemaPart(e){const t=e.split("/");let r=this.schema;for(let e=1;e<t.length;e++){const n=r[t[e]];if(!n)break;r=n}return r}formatSchema(e,t=!0,r=[]){let n=t;const a=(t,a)=>a?r.includes(t)?"(recursive)":this.formatSchema(t,n,r.concat(e)):this.formatSchema(t,n,r);if(l(e)&&!w(e)){if(h(e.not))return n=!t,a(e.not);const r=!e.not.not;return n=!t,r?(t?"":"non ")+a(e.not):a(e.not)}if(e.instanceof){const{instanceof:t}=e;return(Array.isArray(t)?t:[t]).map((e=>"Function"===e?"function":e)).join(" | ")}if(e.enum)return`${e.enum.map((t=>null===t&&e.undefinedAsNull?`${JSON.stringify(t)} | undefined`:JSON.stringify(t))).join(" | ")}`;if(void 0!==e.const)return JSON.stringify(e.const);if(e.oneOf)return e.oneOf.map((e=>a(e,!0))).join(" | ");if(e.anyOf)return e.anyOf.map((e=>a(e,!0))).join(" | ");if(e.allOf)return e.allOf.map((e=>a(e,!0))).join(" & ");if(e.if){const{if:t,then:r,else:n}=e;return`${t?`if ${a(t)}`:""}${r?` then ${a(r)}`:""}${n?` else ${a(n)}`:""}`}if(e.$ref)return a(this.getSchemaPart(e.$ref),!0);if(d(e)||m(e)){const[r,...n]=P(e,t),a=`${r}${n.length>0?` ${A(n)}`:""}`;return t?a:n.length>0?`non-${r} | ${a}`:`non-${r}`}if(v(e)){const[r,...n]=P(e,t),a=`${r}${n.length>0?` ${A(n)}`:""}`;return t?a:"string"===a?"non-string":`non-string | ${a}`}if(y(e))return(t?"":"non-")+"boolean";if(g(e)){n=!0;const t=[];"number"==typeof e.minItems&&t.push(`should not have fewer than ${e.minItems} item${e.minItems>1?"s":""}`),"number"==typeof e.maxItems&&t.push(`should not have more than ${e.maxItems} item${e.maxItems>1?"s":""}`),e.uniqueItems&&t.push("should not have duplicate items");const r=void 0===e.additionalItems||Boolean(e.additionalItems);let o="";return e.items?Array.isArray(e.items)&&e.items.length>0?(o=`${e.items.map((e=>a(e))).join(", ")}`,r&&e.additionalItems&&p(e.additionalItems)&&Object.keys(e.additionalItems).length>0&&t.push(`additional items should be ${a(e.additionalItems)}`)):o=e.items&&Object.keys(e.items).length>0?`${a(e.items)}`:"any":o="any",e.contains&&Object.keys(e.contains).length>0&&t.push(`should contains at least one ${this.formatSchema(e.contains)} item`),`[${o}${r?", ...":""}]${t.length>0?` (${t.join(", ")})`:""}`}if(w(e)){n=!0;const t=[];if("number"==typeof e.minProperties&&t.push(`should not have fewer than ${e.minProperties} ${e.minProperties>1?"properties":"property"}`),"number"==typeof e.maxProperties&&t.push(`should not have more than ${e.maxProperties} ${e.minProperties&&e.minProperties>1?"properties":"property"}`),e.patternProperties&&Object.keys(e.patternProperties).length>0){const r=Object.keys(e.patternProperties);t.push(`additional property names should match pattern${r.length>1?"s":""} ${r.map((e=>JSON.stringify(e))).join(" | ")}`)}const r=e.properties?Object.keys(e.properties):[],o=e.required?e.required:[],i=[...new Set([].concat(o).concat(r))].map((e=>`${e}${o.includes(e)?"":"?"}`)).concat(void 0===e.additionalProperties||Boolean(e.additionalProperties)?e.additionalProperties&&p(e.additionalProperties)?[`<key>: ${a(e.additionalProperties)}`]:["…"]:[]).join(", "),{dependencies:s,propertyNames:c,patternRequired:u}=e;return s&&Object.keys(s).forEach((e=>{const r=s[e];Array.isArray(r)?t.push(`should have ${r.length>1?"properties":"property"} ${r.map((e=>`'${e}'`)).join(", ")} when property '${e}' is present`):t.push(`should be valid according to the schema ${a(r)} when property '${e}' is present`)})),c&&Object.keys(c).length>0&&t.push(`each property name should match format ${JSON.stringify(e.propertyNames.format)}`),u&&u.length>0&&t.push(`should have property matching pattern ${u.map((e=>JSON.stringify(e)))}`),`object {${i?` ${i} `:""}}${t.length>0?` (${t.join(", ")})`:""}`}return b(e)?(t?"":"non-")+"null":Array.isArray(e.type)?`${e.type.join(" | ")}`:JSON.stringify(e,null,2)}getSchemaPartText(e,t,r=!1,n=!0){if(!e)return"";if(Array.isArray(t))for(let r=0;r<t.length;r++){const n=e[t[r]];if(!n)break;e=n}for(;e.$ref;)e=this.getSchemaPart(e.$ref);let a=`${this.formatSchema(e,n)}${r?".":""}`;return e.description&&(a+=`\n-> ${e.description}`),e.link&&(a+=`\n-> Read more at ${e.link}`),a}getSchemaPartDescription(e){if(!e)return"";for(;e.$ref;)e=this.getSchemaPart(e.$ref);let t="";return e.description&&(t+=`\n-> ${e.description}`),e.link&&(t+=`\n-> Read more at ${e.link}`),t}formatValidationError(e){const{keyword:t,dataPath:r}=e,n=`${this.baseDataPath}${r}`;switch(t){case"type":{const{parentSchema:t,params:r}=e;switch(r.type){case"number":case"string":case"boolean":case"null":return`${n} should be a ${this.getSchemaPartText(t,!1,!0)}`;case"integer":return`${n} should be an ${this.getSchemaPartText(t,!1,!0)}`;case"array":return`${n} should be an array:\n${this.getSchemaPartText(t)}`;case"object":return`${n} should be an object:\n${this.getSchemaPartText(t)}`;default:return`${n} should be:\n${this.getSchemaPartText(t)}`}}case"instanceof":{const{parentSchema:t}=e;return`${n} should be an instance of ${this.getSchemaPartText(t,!1,!0)}`}case"pattern":{const{params:t,parentSchema:r}=e,{pattern:a}=t;return`${n} should match pattern ${JSON.stringify(a)}${E(r)}.${this.getSchemaPartDescription(r)}`}case"format":{const{params:t,parentSchema:r}=e,{format:a}=t;return`${n} should match format ${JSON.stringify(a)}${E(r)}.${this.getSchemaPartDescription(r)}`}case"formatMinimum":case"formatMaximum":{const{params:t,parentSchema:r}=e,{comparison:a,limit:o}=t;return`${n} should be ${a} ${JSON.stringify(o)}${E(r)}.${this.getSchemaPartDescription(r)}`}case"minimum":case"maximum":case"exclusiveMinimum":case"exclusiveMaximum":{const{parentSchema:t,params:r}=e,{comparison:a,limit:o}=r,[,...i]=P(t,!0);return 0===i.length&&i.push(`should be ${a} ${o}`),`${n} ${i.join(" ")}${E(t)}.${this.getSchemaPartDescription(t)}`}case"multipleOf":{const{params:t,parentSchema:r}=e,{multipleOf:a}=t;return`${n} should be multiple of ${a}${E(r)}.${this.getSchemaPartDescription(r)}`}case"patternRequired":{const{params:t,parentSchema:r}=e,{missingPattern:a}=t;return`${n} should have property matching pattern ${JSON.stringify(a)}${E(r)}.${this.getSchemaPartDescription(r)}`}case"minLength":{const{params:t,parentSchema:r}=e,{limit:a}=t;if(1===a)return`${n} should be a non-empty string${E(r)}.${this.getSchemaPartDescription(r)}`;const o=a-1;return`${n} should be longer than ${o} character${o>1?"s":""}${E(r)}.${this.getSchemaPartDescription(r)}`}case"minItems":{const{params:t,parentSchema:r}=e,{limit:a}=t;return 1===a?`${n} should be a non-empty array${E(r)}.${this.getSchemaPartDescription(r)}`:`${n} should not have fewer than ${a} items${E(r)}.${this.getSchemaPartDescription(r)}`}case"minProperties":{const{params:t,parentSchema:r}=e,{limit:a}=t;return 1===a?`${n} should be a non-empty object${E(r)}.${this.getSchemaPartDescription(r)}`:`${n} should not have fewer than ${a} properties${E(r)}.${this.getSchemaPartDescription(r)}`}case"maxLength":{const{params:t,parentSchema:r}=e,{limit:a}=t,o=a+1;return`${n} should be shorter than ${o} character${o>1?"s":""}${E(r)}.${this.getSchemaPartDescription(r)}`}case"maxItems":{const{params:t,parentSchema:r}=e,{limit:a}=t;return`${n} should not have more than ${a} items${E(r)}.${this.getSchemaPartDescription(r)}`}case"maxProperties":{const{params:t,parentSchema:r}=e,{limit:a}=t;return`${n} should not have more than ${a} properties${E(r)}.${this.getSchemaPartDescription(r)}`}case"uniqueItems":{const{params:t,parentSchema:r}=e,{i:a}=t;return`${n} should not contain the item '${e.data[a]}' twice${E(r)}.${this.getSchemaPartDescription(r)}`}case"additionalItems":{const{params:t,parentSchema:r}=e,{limit:a}=t;return`${n} should not have more than ${a} items${E(r)}. These items are valid:\n${this.getSchemaPartText(r)}`}case"contains":{const{parentSchema:t}=e;return`${n} should contains at least one ${this.getSchemaPartText(t,["contains"])} item${E(t)}.`}case"required":{const{parentSchema:t,params:r}=e,a=r.missingProperty.replace(/^\./,""),o=t&&Boolean(t.properties&&t.properties[a]);return`${n} misses the property '${a}'${E(t)}.${o?` Should be:\n${this.getSchemaPartText(t,["properties",a])}`:this.getSchemaPartDescription(t)}`}case"additionalProperties":{const{params:t,parentSchema:r}=e,{additionalProperty:a}=t;return`${n} has an unknown property '${a}'${E(r)}. These properties are valid:\n${this.getSchemaPartText(r)}`}case"dependencies":{const{params:t,parentSchema:r}=e,{property:a,deps:o}=t;return`${n} should have properties ${o.split(",").map((e=>`'${e.trim()}'`)).join(", ")} when property '${a}' is present${E(r)}.${this.getSchemaPartDescription(r)}`}case"propertyNames":{const{params:t,parentSchema:r,schema:a}=e,{propertyName:o}=t;return`${n} property name '${o}' is invalid${E(r)}. Property names should be match format ${JSON.stringify(a.format)}.${this.getSchemaPartDescription(r)}`}case"enum":{const{parentSchema:t}=e;return t&&t.enum&&1===t.enum.length?`${n} should be ${this.getSchemaPartText(t,!1,!0)}`:`${n} should be one of these:\n${this.getSchemaPartText(t)}`}case"const":{const{parentSchema:t}=e;return`${n} should be equal to constant ${this.getSchemaPartText(t,!1,!0)}`}case"not":{const t=w(e.parentSchema)?`\n${this.getSchemaPartText(e.parentSchema)}`:"",r=this.getSchemaPartText(e.schema,!1,!1,!1);if(h(e.schema))return`${n} should be any ${r}${t}.`;const{schema:a,parentSchema:o}=e;return`${n} should not be ${this.getSchemaPartText(a,!1,!0)}${o&&w(o)?`\n${this.getSchemaPartText(o)}`:""}`}case"oneOf":case"anyOf":{const{parentSchema:t,children:r}=e;if(r&&r.length>0){if(1===e.schema.length){const e=r[r.length-1],n=r.slice(0,r.length-1);return this.formatValidationError(Object.assign({},e,{children:n,parentSchema:Object.assign({},t,e.parentSchema)}))}let a=function(e){let t=e;return t=i(t,(e=>e.dataPath?e.dataPath.length:0)),t=i(t,(e=>o[e.keyword]||2)),t}(r);return 1===a.length?this.formatValidationError(a[0]):(a=function(e){const t=[];let r=e.length-1;for(;r>0;){const n=e[r];if("anyOf"===n.keyword||"oneOf"===n.keyword){const a=c(n),o=s(e.slice(0,r),a.concat(n.schemaPath));o!==r?(t.push(Object.assign({},n,{children:e.slice(o,r)})),r=o):t.push(n)}else t.push(n);r-=1}return 0===r&&t.push(e[r]),t.reverse()}(a),`${n} should be one of these:\n${this.getSchemaPartText(t)}\nDetails:\n${a.map((e=>` * ${u(this.formatValidationError(e)," ")}`)).join("\n")}`)}return`${n} should be one of these:\n${this.getSchemaPartText(t)}`}case"if":{const{params:t,parentSchema:r}=e,{failingKeyword:a}=t;return`${n} should match "${a}" schema:\n${this.getSchemaPartText(r,[a])}`}case"absolutePath":{const{message:t,parentSchema:r}=e;return`${n}: ${t}${this.getSchemaPartDescription(r)}`}default:{const{message:t,parentSchema:r}=e;return`${n} ${t} (${JSON.stringify(e,null,2)}).\n${this.getSchemaPartText(r,!1)}`}}}formatValidationErrors(e){return e.map((e=>{let t=this.formatValidationError(e);return this.postFormatter&&(t=this.postFormatter(t,e)),` - ${u(t," ")}`})).join("\n")}}var S=x;t.default=S},5842:(e,t,r)=>{"use strict";const{validate:n,ValidationError:a,enableValidation:o,disableValidation:i,needValidate:s}=r(202);e.exports={validate:n,ValidationError:a,enableValidation:o,disableValidation:i,needValidate:s}},120:(e,t)=>{"use strict";function r(e,t,r){return{dataPath:void 0,schemaPath:void 0,keyword:"absolutePath",params:{absolutePath:r},message:e,parentSchema:t}}function n(e,t,n){return r(e?`The provided value ${JSON.stringify(n)} is not an absolute path!`:`A relative path is expected. However, the provided value ${JSON.stringify(n)} is an absolute path!`,t,n)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){return e.addKeyword("absolutePath",{errors:!0,type:"string",compile(e,t){const a=o=>{let i=!0;return o.includes("!")&&(a.errors=[r(`The provided value ${JSON.stringify(o)} contains exclamation mark (!) which is not allowed because it's reserved for loader syntax.`,t,o)],i=!1),e===/^(?:[A-Za-z]:(\\|\/)|\\\\|\/)/.test(o)||(a.errors=[n(e,t,o)],i=!1),i};return a.errors=[],a}}),e}},5217:(e,t,r)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){return function(e,t,n){let a;try{a=r(1793);const{RULES:o}=e;let i;for(let e=0;e<o.length;e++){const t=o[e];if(void 0===t.type){i=t;break}}const s={keyword:t,definition:n,custom:!0,code:a,implements:n.implements};i.rules.unshift(s),o.custom[t]=s,o.keywords[t]=!0,o.all[t]=!0}catch(e){}}(e,"undefinedAsNull",{modifying:!0,validate(e,t,r,n,a,o){if(e&&r&&void 0!==r.enum&&a&&"number"==typeof o){const e=o,t=a;void 0===t[e]&&(t[e]=null)}return!0}}),e}},6804:e=>{"use strict";class t{static getOperator(e,t){return"left"===e?t?">":">=":t?"<":"<="}static formatRight(e,r,n){return!1===r?t.formatLeft(e,!r,!n):`should be ${t.getOperator("right",n)} ${e}`}static formatLeft(e,r,n){return!1===r?t.formatRight(e,!r,!n):`should be ${t.getOperator("left",n)} ${e}`}static formatRange(e,r,n,a,o){let i="should be";return i+=` ${t.getOperator(o?"left":"right",o?n:!n)} ${e} `,i+=o?"and":"or",i+=` ${t.getOperator(o?"right":"left",o?a:!a)} ${r}`,i}static getRangeValue(e,t){let r=t?1/0:-1/0,n=-1;const a=t?([e])=>e<=r:([e])=>e>=r;for(let t=0;t<e.length;t++)a(e[t])&&([r]=e[t],n=t);return n>-1?e[n]:[1/0,!0]}constructor(){this._left=[],this._right=[]}left(e,t=!1){this._left.push([e,t])}right(e,t=!1){this._right.push([e,t])}format(e=!0){const[r,n]=t.getRangeValue(this._left,e),[a,o]=t.getRangeValue(this._right,!e);if(!Number.isFinite(r)&&!Number.isFinite(a))return"";const i=n?r+1:r;return i===(o?a-1:a)?`should be ${e?"":"!"}= ${i}`:Number.isFinite(r)&&!Number.isFinite(a)?t.formatLeft(r,e,n):!Number.isFinite(r)&&Number.isFinite(a)?t.formatRight(a,e,o):t.formatRange(r,a,n,o,e)}}e.exports=t},6737:(e,t,r)=>{"use strict";const n=r(6804);e.exports.stringHints=function(e,t){const r=[];let n="string";const a={...e};if(!t){const e=a.minLength,t=a.formatMinimum,r=a.formatExclusiveMaximum;a.minLength=a.maxLength,a.maxLength=e,a.formatMinimum=a.formatMaximum,a.formatMaximum=t,a.formatExclusiveMaximum=!a.formatExclusiveMinimum,a.formatExclusiveMinimum=!r}if("number"==typeof a.minLength)if(1===a.minLength)n="non-empty string";else{const e=Math.max(a.minLength-1,0);r.push(`should be longer than ${e} character${e>1?"s":""}`)}if("number"==typeof a.maxLength)if(0===a.maxLength)n="empty string";else{const e=a.maxLength+1;r.push(`should be shorter than ${e} character${e>1?"s":""}`)}return a.pattern&&r.push(`should${t?"":" not"} match pattern ${JSON.stringify(a.pattern)}`),a.format&&r.push(`should${t?"":" not"} match format ${JSON.stringify(a.format)}`),a.formatMinimum&&r.push(`should be ${a.formatExclusiveMinimum?">":">="} ${JSON.stringify(a.formatMinimum)}`),a.formatMaximum&&r.push(`should be ${a.formatExclusiveMaximum?"<":"<="} ${JSON.stringify(a.formatMaximum)}`),[n].concat(r)},e.exports.numberHints=function(e,t){const r=["integer"===e.type?"integer":"number"],a=new n;"number"==typeof e.minimum&&a.left(e.minimum),"number"==typeof e.exclusiveMinimum&&a.left(e.exclusiveMinimum,!0),"number"==typeof e.maximum&&a.right(e.maximum),"number"==typeof e.exclusiveMaximum&&a.right(e.exclusiveMaximum,!0);const o=a.format(t);return o&&r.push(o),"number"==typeof e.multipleOf&&r.push(`should${t?"":" not"} be multiple of ${e.multipleOf}`),r}},202:(e,t,r)=>{"use strict";var n=r(2530);Object.defineProperty(t,"__esModule",{value:!0}),t.validate=function(e,t,r){if(!f())return;let n=[];if(Array.isArray(t))for(let r=0;r<=t.length-1;r++)n.push(...p(e,t[r]).map((e=>u(e,r))));else n=p(e,t);if(n.length>0)throw new i.default(n,e,r)},t.enableValidation=function(){l=!1,n&&n.env&&(n.env.SKIP_VALIDATION="n")},t.disableValidation=function(){l=!0,n&&n.env&&(n.env.SKIP_VALIDATION="y")},t.needValidate=f,Object.defineProperty(t,"ValidationError",{enumerable:!0,get:function(){return i.default}});var a=s(r(120)),o=s(r(5217)),i=s(r(3760));function s(e){return e&&e.__esModule?e:{default:e}}const c=(e=>{let t,r=!1;return()=>(r||(t=e(),r=!0,e=void 0),t)})((()=>{const e=r(8903),t=r(4740),n=new e({allErrors:!0,verbose:!0,$data:!0});return t(n,["instanceof","formatMinimum","formatMaximum","patternRequired"]),(0,a.default)(n),(0,o.default)(n),n}));function u(e,t){return e.dataPath=`[${t}]${e.dataPath}`,e.children&&e.children.forEach((e=>u(e,t))),e}let l=!1;function f(){if(l)return!1;if(n&&n.env&&n.env.SKIP_VALIDATION){const e=n.env.SKIP_VALIDATION.trim();if(/^(?:y|yes|true|1|on)$/i.test(e))return!1;if(/^(?:n|no|false|0|off)$/i.test(e))return!0}return!0}const h=new WeakMap;function p(e,t){let r=h.get(e);return r||(r=c().compile(e),h.set(e,r)),r(t)?[]:r.errors?function(e){let t=[];for(const r of e){const{dataPath:e}=r;let n=[];t=t.filter((t=>!t.dataPath.includes(e)||(t.children&&(n=n.concat(t.children.slice(0))),t.children=void 0,n.push(t),!1))),n.length&&(r.children=n),t.push(r)}return t}(r.errors):[]}},5701:e=>{"use strict";var t=[];function r(e){for(var r=-1,n=0;n<t.length;n++)if(t[n].identifier===e){r=n;break}return r}function n(e,n){for(var o={},i=[],s=0;s<e.length;s++){var c=e[s],u=n.base?c[0]+n.base:c[0],l=o[u]||0,f="".concat(u," ").concat(l);o[u]=l+1;var h=r(f),p={css:c[1],media:c[2],sourceMap:c[3],supports:c[4],layer:c[5]};if(-1!==h)t[h].references++,t[h].updater(p);else{var d=a(p,n);n.byIndex=s,t.splice(s,0,{identifier:f,updater:d,references:1})}i.push(f)}return i}function a(e,t){var r=t.domAPI(t);return r.update(e),function(t){if(t){if(t.css===e.css&&t.media===e.media&&t.sourceMap===e.sourceMap&&t.supports===e.supports&&t.layer===e.layer)return;r.update(e=t)}else r.remove()}}e.exports=function(e,a){var o=n(e=e||[],a=a||{});return function(e){e=e||[];for(var i=0;i<o.length;i++){var s=r(o[i]);t[s].references--}for(var c=n(e,a),u=0;u<o.length;u++){var l=r(o[u]);0===t[l].references&&(t[l].updater(),t.splice(l,1))}o=c}}},6080:e=>{"use strict";var t={};e.exports=function(e,r){var n=function(e){if(void 0===t[e]){var r=document.querySelector(e);if(window.HTMLIFrameElement&&r instanceof window.HTMLIFrameElement)try{r=r.contentDocument.head}catch(e){r=null}t[e]=r}return t[e]}(e);if(!n)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");n.appendChild(r)}},7182:e=>{"use strict";e.exports=function(e){var t=document.createElement("style");return e.setAttributes(t,e.attributes),e.insert(t,e.options),t}},6850:(e,t,r)=>{"use strict";e.exports=function(e){var t=r.nc;t&&e.setAttribute("nonce",t)}},8236:e=>{"use strict";e.exports=function(e){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var t=e.insertStyleElement(e);return{update:function(r){!function(e,t,r){var n="";r.supports&&(n+="@supports (".concat(r.supports,") {")),r.media&&(n+="@media ".concat(r.media," {"));var a=void 0!==r.layer;a&&(n+="@layer".concat(r.layer.length>0?" ".concat(r.layer):""," {")),n+=r.css,a&&(n+="}"),r.media&&(n+="}"),r.supports&&(n+="}");var o=r.sourceMap;o&&"undefined"!=typeof btoa&&(n+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(o))))," */")),t.styleTagTransform(n,e,t.options)}(t,e,r)},remove:function(){!function(e){if(null===e.parentNode)return!1;e.parentNode.removeChild(e)}(t)}}}},9213:e=>{"use strict";e.exports=function(e,t){if(t.styleSheet)t.styleSheet.cssText=e;else{for(;t.firstChild;)t.removeChild(t.firstChild);t.appendChild(document.createTextNode(e))}}},7533:function(e,t){!function(e){"use strict";function t(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];if(t.length>1){t[0]=t[0].slice(0,-1);for(var n=t.length-1,a=1;a<n;++a)t[a]=t[a].slice(1,-1);return t[n]=t[n].slice(1),t.join("")}return t[0]}function r(e){return"(?:"+e+")"}function n(e){return void 0===e?"undefined":null===e?"null":Object.prototype.toString.call(e).split(" ").pop().split("]").shift().toLowerCase()}function a(e){return e.toUpperCase()}function o(e){var n="[A-Za-z]",a="[0-9]",o=t(a,"[A-Fa-f]"),i=r(r("%[EFef]"+o+"%"+o+o+"%"+o+o)+"|"+r("%[89A-Fa-f]"+o+"%"+o+o)+"|"+r("%"+o+o)),s="[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]",c=t("[\\:\\/\\?\\#\\[\\]\\@]",s),u=e?"[\\uE000-\\uF8FF]":"[]",l=t(n,a,"[\\-\\.\\_\\~]",e?"[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]":"[]"),f=r(n+t(n,a,"[\\+\\-\\.]")+"*"),h=r(r(i+"|"+t(l,s,"[\\:]"))+"*"),p=(r(r("25[0-5]")+"|"+r("2[0-4]"+a)+"|"+r("1"+a+a)+"|"+r("[1-9]"+a)+"|"+a),r(r("25[0-5]")+"|"+r("2[0-4]"+a)+"|"+r("1"+a+a)+"|"+r("0?[1-9]"+a)+"|0?0?"+a)),d=r(p+"\\."+p+"\\."+p+"\\."+p),m=r(o+"{1,4}"),v=r(r(m+"\\:"+m)+"|"+d),y=r(r(m+"\\:")+"{6}"+v),g=r("\\:\\:"+r(m+"\\:")+"{5}"+v),w=r(r(m)+"?\\:\\:"+r(m+"\\:")+"{4}"+v),b=r(r(r(m+"\\:")+"{0,1}"+m)+"?\\:\\:"+r(m+"\\:")+"{3}"+v),E=r(r(r(m+"\\:")+"{0,2}"+m)+"?\\:\\:"+r(m+"\\:")+"{2}"+v),A=r(r(r(m+"\\:")+"{0,3}"+m)+"?\\:\\:"+m+"\\:"+v),P=r(r(r(m+"\\:")+"{0,4}"+m)+"?\\:\\:"+v),x=r(r(r(m+"\\:")+"{0,5}"+m)+"?\\:\\:"+m),S=r(r(r(m+"\\:")+"{0,6}"+m)+"?\\:\\:"),O=r([y,g,w,b,E,A,P,x,S].join("|")),_=r(r(l+"|"+i)+"+"),I=(r(O+"\\%25"+_),r(O+r("\\%25|\\%(?!"+o+"{2})")+_)),R=r("[vV]"+o+"+\\."+t(l,s,"[\\:]")+"+"),j=r("\\["+r(I+"|"+O+"|"+R)+"\\]"),D=r(r(i+"|"+t(l,s))+"*"),$=r(j+"|"+d+"(?!"+D+")|"+D),L=r(a+"*"),k=r(r(h+"@")+"?"+$+r("\\:"+L)+"?"),F=r(i+"|"+t(l,s,"[\\:\\@]")),C=r(F+"*"),T=r(F+"+"),N=r(r(i+"|"+t(l,s,"[\\@]"))+"+"),B=r(r("\\/"+C)+"*"),M=r("\\/"+r(T+B)+"?"),U=r(N+B),V=r(T+B),q="(?!"+F+")",K=(r(B+"|"+M+"|"+U+"|"+V+"|"+q),r(r(F+"|"+t("[\\/\\?]",u))+"*")),Y=r(r(F+"|[\\/\\?]")+"*"),z=r(r("\\/\\/"+k+B)+"|"+M+"|"+V+"|"+q),G=r(f+"\\:"+z+r("\\?"+K)+"?"+r("\\#"+Y)+"?"),H=r(r("\\/\\/"+k+B)+"|"+M+"|"+U+"|"+q),Q=r(H+r("\\?"+K)+"?"+r("\\#"+Y)+"?");return r(G+"|"+Q),r(f+"\\:"+z+r("\\?"+K)+"?"),r(r("\\/\\/("+r("("+h+")@")+"?("+$+")"+r("\\:("+L+")")+"?)")+"?("+B+"|"+M+"|"+V+"|"+q+")"),r("\\?("+K+")"),r("\\#("+Y+")"),r(r("\\/\\/("+r("("+h+")@")+"?("+$+")"+r("\\:("+L+")")+"?)")+"?("+B+"|"+M+"|"+U+"|"+q+")"),r("\\?("+K+")"),r("\\#("+Y+")"),r(r("\\/\\/("+r("("+h+")@")+"?("+$+")"+r("\\:("+L+")")+"?)")+"?("+B+"|"+M+"|"+V+"|"+q+")"),r("\\?("+K+")"),r("\\#("+Y+")"),r("("+h+")@"),r("\\:("+L+")"),{NOT_SCHEME:new RegExp(t("[^]",n,a,"[\\+\\-\\.]"),"g"),NOT_USERINFO:new RegExp(t("[^\\%\\:]",l,s),"g"),NOT_HOST:new RegExp(t("[^\\%\\[\\]\\:]",l,s),"g"),NOT_PATH:new RegExp(t("[^\\%\\/\\:\\@]",l,s),"g"),NOT_PATH_NOSCHEME:new RegExp(t("[^\\%\\/\\@]",l,s),"g"),NOT_QUERY:new RegExp(t("[^\\%]",l,s,"[\\:\\@\\/\\?]",u),"g"),NOT_FRAGMENT:new RegExp(t("[^\\%]",l,s,"[\\:\\@\\/\\?]"),"g"),ESCAPE:new RegExp(t("[^]",l,s),"g"),UNRESERVED:new RegExp(l,"g"),OTHER_CHARS:new RegExp(t("[^\\%]",l,c),"g"),PCT_ENCODED:new RegExp(i,"g"),IPV4ADDRESS:new RegExp("^("+d+")$"),IPV6ADDRESS:new RegExp("^\\[?("+O+")"+r(r("\\%25|\\%(?!"+o+"{2})")+"("+_+")")+"?\\]?$")}}var i=o(!1),s=o(!0),c=function(e,t){if(Array.isArray(e))return e;if(Symbol.iterator in Object(e))return function(e,t){var r=[],n=!0,a=!1,o=void 0;try{for(var i,s=e[Symbol.iterator]();!(n=(i=s.next()).done)&&(r.push(i.value),!t||r.length!==t);n=!0);}catch(e){a=!0,o=e}finally{try{!n&&s.return&&s.return()}finally{if(a)throw o}}return r}(e,t);throw new TypeError("Invalid attempt to destructure non-iterable instance")},u=2147483647,l=36,f=/^xn--/,h=/[^\0-\x7E]/,p=/[\x2E\u3002\uFF0E\uFF61]/g,d={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},m=Math.floor,v=String.fromCharCode;function y(e){throw new RangeError(d[e])}function g(e,t){var r=e.split("@"),n="";return r.length>1&&(n=r[0]+"@",e=r[1]),n+function(e,t){for(var r=[],n=e.length;n--;)r[n]=t(e[n]);return r}((e=e.replace(p,".")).split("."),t).join(".")}function w(e){for(var t=[],r=0,n=e.length;r<n;){var a=e.charCodeAt(r++);if(a>=55296&&a<=56319&&r<n){var o=e.charCodeAt(r++);56320==(64512&o)?t.push(((1023&a)<<10)+(1023&o)+65536):(t.push(a),r--)}else t.push(a)}return t}var b=function(e,t){return e+22+75*(e<26)-((0!=t)<<5)},E=function(e,t,r){var n=0;for(e=r?m(e/700):e>>1,e+=m(e/t);e>455;n+=l)e=m(e/35);return m(n+36*e/(e+38))},A=function(e){var t,r=[],n=e.length,a=0,o=128,i=72,s=e.lastIndexOf("-");s<0&&(s=0);for(var c=0;c<s;++c)e.charCodeAt(c)>=128&&y("not-basic"),r.push(e.charCodeAt(c));for(var f=s>0?s+1:0;f<n;){for(var h=a,p=1,d=l;;d+=l){f>=n&&y("invalid-input");var v=(t=e.charCodeAt(f++))-48<10?t-22:t-65<26?t-65:t-97<26?t-97:l;(v>=l||v>m((u-a)/p))&&y("overflow"),a+=v*p;var g=d<=i?1:d>=i+26?26:d-i;if(v<g)break;var w=l-g;p>m(u/w)&&y("overflow"),p*=w}var b=r.length+1;i=E(a-h,b,0==h),m(a/b)>u-o&&y("overflow"),o+=m(a/b),a%=b,r.splice(a++,0,o)}return String.fromCodePoint.apply(String,r)},P=function(e){var t=[],r=(e=w(e)).length,n=128,a=0,o=72,i=!0,s=!1,c=void 0;try{for(var f,h=e[Symbol.iterator]();!(i=(f=h.next()).done);i=!0){var p=f.value;p<128&&t.push(v(p))}}catch(e){s=!0,c=e}finally{try{!i&&h.return&&h.return()}finally{if(s)throw c}}var d=t.length,g=d;for(d&&t.push("-");g<r;){var A=u,P=!0,x=!1,S=void 0;try{for(var O,_=e[Symbol.iterator]();!(P=(O=_.next()).done);P=!0){var I=O.value;I>=n&&I<A&&(A=I)}}catch(e){x=!0,S=e}finally{try{!P&&_.return&&_.return()}finally{if(x)throw S}}var R=g+1;A-n>m((u-a)/R)&&y("overflow"),a+=(A-n)*R,n=A;var j=!0,D=!1,$=void 0;try{for(var L,k=e[Symbol.iterator]();!(j=(L=k.next()).done);j=!0){var F=L.value;if(F<n&&++a>u&&y("overflow"),F==n){for(var C=a,T=l;;T+=l){var N=T<=o?1:T>=o+26?26:T-o;if(C<N)break;var B=C-N,M=l-N;t.push(v(b(N+B%M,0))),C=m(B/M)}t.push(v(b(C,0))),o=E(a,R,g==d),a=0,++g}}}catch(e){D=!0,$=e}finally{try{!j&&k.return&&k.return()}finally{if(D)throw $}}++a,++n}return t.join("")},x={version:"2.1.0",ucs2:{decode:w,encode:function(e){return String.fromCodePoint.apply(String,function(e){if(Array.isArray(e)){for(var t=0,r=Array(e.length);t<e.length;t++)r[t]=e[t];return r}return Array.from(e)}(e))}},decode:A,encode:P,toASCII:function(e){return g(e,(function(e){return h.test(e)?"xn--"+P(e):e}))},toUnicode:function(e){return g(e,(function(e){return f.test(e)?A(e.slice(4).toLowerCase()):e}))}},S={};function O(e){var t=e.charCodeAt(0);return t<16?"%0"+t.toString(16).toUpperCase():t<128?"%"+t.toString(16).toUpperCase():t<2048?"%"+(t>>6|192).toString(16).toUpperCase()+"%"+(63&t|128).toString(16).toUpperCase():"%"+(t>>12|224).toString(16).toUpperCase()+"%"+(t>>6&63|128).toString(16).toUpperCase()+"%"+(63&t|128).toString(16).toUpperCase()}function _(e){for(var t="",r=0,n=e.length;r<n;){var a=parseInt(e.substr(r+1,2),16);if(a<128)t+=String.fromCharCode(a),r+=3;else if(a>=194&&a<224){if(n-r>=6){var o=parseInt(e.substr(r+4,2),16);t+=String.fromCharCode((31&a)<<6|63&o)}else t+=e.substr(r,6);r+=6}else if(a>=224){if(n-r>=9){var i=parseInt(e.substr(r+4,2),16),s=parseInt(e.substr(r+7,2),16);t+=String.fromCharCode((15&a)<<12|(63&i)<<6|63&s)}else t+=e.substr(r,9);r+=9}else t+=e.substr(r,3),r+=3}return t}function I(e,t){function r(e){var r=_(e);return r.match(t.UNRESERVED)?r:e}return e.scheme&&(e.scheme=String(e.scheme).replace(t.PCT_ENCODED,r).toLowerCase().replace(t.NOT_SCHEME,"")),void 0!==e.userinfo&&(e.userinfo=String(e.userinfo).replace(t.PCT_ENCODED,r).replace(t.NOT_USERINFO,O).replace(t.PCT_ENCODED,a)),void 0!==e.host&&(e.host=String(e.host).replace(t.PCT_ENCODED,r).toLowerCase().replace(t.NOT_HOST,O).replace(t.PCT_ENCODED,a)),void 0!==e.path&&(e.path=String(e.path).replace(t.PCT_ENCODED,r).replace(e.scheme?t.NOT_PATH:t.NOT_PATH_NOSCHEME,O).replace(t.PCT_ENCODED,a)),void 0!==e.query&&(e.query=String(e.query).replace(t.PCT_ENCODED,r).replace(t.NOT_QUERY,O).replace(t.PCT_ENCODED,a)),void 0!==e.fragment&&(e.fragment=String(e.fragment).replace(t.PCT_ENCODED,r).replace(t.NOT_FRAGMENT,O).replace(t.PCT_ENCODED,a)),e}function R(e){return e.replace(/^0*(.*)/,"$1")||"0"}function j(e,t){var r=e.match(t.IPV4ADDRESS)||[],n=c(r,2)[1];return n?n.split(".").map(R).join("."):e}function D(e,t){var r=e.match(t.IPV6ADDRESS)||[],n=c(r,3),a=n[1],o=n[2];if(a){for(var i=a.toLowerCase().split("::").reverse(),s=c(i,2),u=s[0],l=s[1],f=l?l.split(":").map(R):[],h=u.split(":").map(R),p=t.IPV4ADDRESS.test(h[h.length-1]),d=p?7:8,m=h.length-d,v=Array(d),y=0;y<d;++y)v[y]=f[y]||h[m+y]||"";p&&(v[d-1]=j(v[d-1],t));var g=v.reduce((function(e,t,r){if(!t||"0"===t){var n=e[e.length-1];n&&n.index+n.length===r?n.length++:e.push({index:r,length:1})}return e}),[]).sort((function(e,t){return t.length-e.length}))[0],w=void 0;if(g&&g.length>1){var b=v.slice(0,g.index),E=v.slice(g.index+g.length);w=b.join(":")+"::"+E.join(":")}else w=v.join(":");return o&&(w+="%"+o),w}return e}var $=/^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i,L=void 0==="".match(/(){0}/)[1];function k(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r={},n=!1!==t.iri?s:i;"suffix"===t.reference&&(e=(t.scheme?t.scheme+":":"")+"//"+e);var a=e.match($);if(a){L?(r.scheme=a[1],r.userinfo=a[3],r.host=a[4],r.port=parseInt(a[5],10),r.path=a[6]||"",r.query=a[7],r.fragment=a[8],isNaN(r.port)&&(r.port=a[5])):(r.scheme=a[1]||void 0,r.userinfo=-1!==e.indexOf("@")?a[3]:void 0,r.host=-1!==e.indexOf("//")?a[4]:void 0,r.port=parseInt(a[5],10),r.path=a[6]||"",r.query=-1!==e.indexOf("?")?a[7]:void 0,r.fragment=-1!==e.indexOf("#")?a[8]:void 0,isNaN(r.port)&&(r.port=e.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/)?a[4]:void 0)),r.host&&(r.host=D(j(r.host,n),n)),void 0!==r.scheme||void 0!==r.userinfo||void 0!==r.host||void 0!==r.port||r.path||void 0!==r.query?void 0===r.scheme?r.reference="relative":void 0===r.fragment?r.reference="absolute":r.reference="uri":r.reference="same-document",t.reference&&"suffix"!==t.reference&&t.reference!==r.reference&&(r.error=r.error||"URI is not a "+t.reference+" reference.");var o=S[(t.scheme||r.scheme||"").toLowerCase()];if(t.unicodeSupport||o&&o.unicodeSupport)I(r,n);else{if(r.host&&(t.domainHost||o&&o.domainHost))try{r.host=x.toASCII(r.host.replace(n.PCT_ENCODED,_).toLowerCase())}catch(e){r.error=r.error||"Host's domain name can not be converted to ASCII via punycode: "+e}I(r,i)}o&&o.parse&&o.parse(r,t)}else r.error=r.error||"URI can not be parsed.";return r}var F=/^\.\.?\//,C=/^\/\.(\/|$)/,T=/^\/\.\.(\/|$)/,N=/^\/?(?:.|\n)*?(?=\/|$)/;function B(e){for(var t=[];e.length;)if(e.match(F))e=e.replace(F,"");else if(e.match(C))e=e.replace(C,"/");else if(e.match(T))e=e.replace(T,"/"),t.pop();else if("."===e||".."===e)e="";else{var r=e.match(N);if(!r)throw new Error("Unexpected dot segment condition");var n=r[0];e=e.slice(n.length),t.push(n)}return t.join("")}function M(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=t.iri?s:i,n=[],a=S[(t.scheme||e.scheme||"").toLowerCase()];if(a&&a.serialize&&a.serialize(e,t),e.host)if(r.IPV6ADDRESS.test(e.host));else if(t.domainHost||a&&a.domainHost)try{e.host=t.iri?x.toUnicode(e.host):x.toASCII(e.host.replace(r.PCT_ENCODED,_).toLowerCase())}catch(r){e.error=e.error||"Host's domain name can not be converted to "+(t.iri?"Unicode":"ASCII")+" via punycode: "+r}I(e,r),"suffix"!==t.reference&&e.scheme&&(n.push(e.scheme),n.push(":"));var o=function(e,t){var r=!1!==t.iri?s:i,n=[];return void 0!==e.userinfo&&(n.push(e.userinfo),n.push("@")),void 0!==e.host&&n.push(D(j(String(e.host),r),r).replace(r.IPV6ADDRESS,(function(e,t,r){return"["+t+(r?"%25"+r:"")+"]"}))),"number"!=typeof e.port&&"string"!=typeof e.port||(n.push(":"),n.push(String(e.port))),n.length?n.join(""):void 0}(e,t);if(void 0!==o&&("suffix"!==t.reference&&n.push("//"),n.push(o),e.path&&"/"!==e.path.charAt(0)&&n.push("/")),void 0!==e.path){var c=e.path;t.absolutePath||a&&a.absolutePath||(c=B(c)),void 0===o&&(c=c.replace(/^\/\//,"/%2F")),n.push(c)}return void 0!==e.query&&(n.push("?"),n.push(e.query)),void 0!==e.fragment&&(n.push("#"),n.push(e.fragment)),n.join("")}function U(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},n={};return arguments[3]||(e=k(M(e,r),r),t=k(M(t,r),r)),!(r=r||{}).tolerant&&t.scheme?(n.scheme=t.scheme,n.userinfo=t.userinfo,n.host=t.host,n.port=t.port,n.path=B(t.path||""),n.query=t.query):(void 0!==t.userinfo||void 0!==t.host||void 0!==t.port?(n.userinfo=t.userinfo,n.host=t.host,n.port=t.port,n.path=B(t.path||""),n.query=t.query):(t.path?("/"===t.path.charAt(0)?n.path=B(t.path):(void 0===e.userinfo&&void 0===e.host&&void 0===e.port||e.path?e.path?n.path=e.path.slice(0,e.path.lastIndexOf("/")+1)+t.path:n.path=t.path:n.path="/"+t.path,n.path=B(n.path)),n.query=t.query):(n.path=e.path,void 0!==t.query?n.query=t.query:n.query=e.query),n.userinfo=e.userinfo,n.host=e.host,n.port=e.port),n.scheme=e.scheme),n.fragment=t.fragment,n}function V(e,t){return e&&e.toString().replace(t&&t.iri?s.PCT_ENCODED:i.PCT_ENCODED,_)}var q={scheme:"http",domainHost:!0,parse:function(e,t){return e.host||(e.error=e.error||"HTTP URIs must have a host."),e},serialize:function(e,t){var r="https"===String(e.scheme).toLowerCase();return e.port!==(r?443:80)&&""!==e.port||(e.port=void 0),e.path||(e.path="/"),e}},K={scheme:"https",domainHost:q.domainHost,parse:q.parse,serialize:q.serialize};function Y(e){return"boolean"==typeof e.secure?e.secure:"wss"===String(e.scheme).toLowerCase()}var z={scheme:"ws",domainHost:!0,parse:function(e,t){var r=e;return r.secure=Y(r),r.resourceName=(r.path||"/")+(r.query?"?"+r.query:""),r.path=void 0,r.query=void 0,r},serialize:function(e,t){if(e.port!==(Y(e)?443:80)&&""!==e.port||(e.port=void 0),"boolean"==typeof e.secure&&(e.scheme=e.secure?"wss":"ws",e.secure=void 0),e.resourceName){var r=e.resourceName.split("?"),n=c(r,2),a=n[0],o=n[1];e.path=a&&"/"!==a?a:void 0,e.query=o,e.resourceName=void 0}return e.fragment=void 0,e}},G={scheme:"wss",domainHost:z.domainHost,parse:z.parse,serialize:z.serialize},H={},Q="[A-Za-z0-9\\-\\.\\_\\~\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]",J="[0-9A-Fa-f]",X=r(r("%[EFef]"+J+"%"+J+J+"%"+J+J)+"|"+r("%[89A-Fa-f]"+J+"%"+J+J)+"|"+r("%"+J+J)),W=t("[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]",'[\\"\\\\]'),Z=new RegExp(Q,"g"),ee=new RegExp(X,"g"),te=new RegExp(t("[^]","[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]","[\\.]",'[\\"]',W),"g"),re=new RegExp(t("[^]",Q,"[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]"),"g"),ne=re;function ae(e){var t=_(e);return t.match(Z)?t:e}var oe={scheme:"mailto",parse:function(e,t){var r=e,n=r.to=r.path?r.path.split(","):[];if(r.path=void 0,r.query){for(var a=!1,o={},i=r.query.split("&"),s=0,c=i.length;s<c;++s){var u=i[s].split("=");switch(u[0]){case"to":for(var l=u[1].split(","),f=0,h=l.length;f<h;++f)n.push(l[f]);break;case"subject":r.subject=V(u[1],t);break;case"body":r.body=V(u[1],t);break;default:a=!0,o[V(u[0],t)]=V(u[1],t)}}a&&(r.headers=o)}r.query=void 0;for(var p=0,d=n.length;p<d;++p){var m=n[p].split("@");if(m[0]=V(m[0]),t.unicodeSupport)m[1]=V(m[1],t).toLowerCase();else try{m[1]=x.toASCII(V(m[1],t).toLowerCase())}catch(e){r.error=r.error||"Email address's domain name can not be converted to ASCII via punycode: "+e}n[p]=m.join("@")}return r},serialize:function(e,t){var r,n=e,o=null!=(r=e.to)?r instanceof Array?r:"number"!=typeof r.length||r.split||r.setInterval||r.call?[r]:Array.prototype.slice.call(r):[];if(o){for(var i=0,s=o.length;i<s;++i){var c=String(o[i]),u=c.lastIndexOf("@"),l=c.slice(0,u).replace(ee,ae).replace(ee,a).replace(te,O),f=c.slice(u+1);try{f=t.iri?x.toUnicode(f):x.toASCII(V(f,t).toLowerCase())}catch(e){n.error=n.error||"Email address's domain name can not be converted to "+(t.iri?"Unicode":"ASCII")+" via punycode: "+e}o[i]=l+"@"+f}n.path=o.join(",")}var h=e.headers=e.headers||{};e.subject&&(h.subject=e.subject),e.body&&(h.body=e.body);var p=[];for(var d in h)h[d]!==H[d]&&p.push(d.replace(ee,ae).replace(ee,a).replace(re,O)+"="+h[d].replace(ee,ae).replace(ee,a).replace(ne,O));return p.length&&(n.query=p.join("&")),n}},ie=/^([^\:]+)\:(.*)/,se={scheme:"urn",parse:function(e,t){var r=e.path&&e.path.match(ie),n=e;if(r){var a=t.scheme||n.scheme||"urn",o=r[1].toLowerCase(),i=r[2],s=a+":"+(t.nid||o),c=S[s];n.nid=o,n.nss=i,n.path=void 0,c&&(n=c.parse(n,t))}else n.error=n.error||"URN can not be parsed.";return n},serialize:function(e,t){var r=t.scheme||e.scheme||"urn",n=e.nid,a=r+":"+(t.nid||n),o=S[a];o&&(e=o.serialize(e,t));var i=e,s=e.nss;return i.path=(n||t.nid)+":"+s,i}},ce=/^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/,ue={scheme:"urn:uuid",parse:function(e,t){var r=e;return r.uuid=r.nss,r.nss=void 0,t.tolerant||r.uuid&&r.uuid.match(ce)||(r.error=r.error||"UUID is not valid."),r},serialize:function(e,t){var r=e;return r.nss=(e.uuid||"").toLowerCase(),r}};S[q.scheme]=q,S[K.scheme]=K,S[z.scheme]=z,S[G.scheme]=G,S[oe.scheme]=oe,S[se.scheme]=se,S[ue.scheme]=ue,e.SCHEMES=S,e.pctEncChar=O,e.pctDecChars=_,e.parse=k,e.removeDotSegments=B,e.serialize=M,e.resolveComponents=U,e.resolve=function(e,t,r){var n=function(e,t){var r=e;if(t)for(var n in t)r[n]=t[n];return r}({scheme:"null"},r);return M(U(k(e,n),k(t,n),n,!0),n)},e.normalize=function(e,t){return"string"==typeof e?e=M(k(e,t),t):"object"===n(e)&&(e=k(M(e,t),t)),e},e.equal=function(e,t,r){return"string"==typeof e?e=M(k(e,r),r):"object"===n(e)&&(e=M(e,r)),"string"==typeof t?t=M(k(t,r),r):"object"===n(t)&&(t=M(t,r)),e===t},e.escapeComponent=function(e,t){return e&&e.toString().replace(t&&t.iri?s.ESCAPE:i.ESCAPE,O)},e.unescapeComponent=V,Object.defineProperty(e,"__esModule",{value:!0})}(t)},894:e=>{"use strict";e.exports=JSON.parse('{"$schema":"http://json-schema.org/draft-07/schema#","$id":"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#","description":"Meta-schema for $data reference (JSON Schema extension proposal)","type":"object","required":["$data"],"properties":{"$data":{"type":"string","anyOf":[{"format":"relative-json-pointer"},{"format":"json-pointer"}]}},"additionalProperties":false}')},6680:e=>{"use strict";e.exports=JSON.parse('{"$schema":"http://json-schema.org/draft-07/schema#","$id":"http://json-schema.org/draft-07/schema#","title":"Core schema meta-schema","definitions":{"schemaArray":{"type":"array","minItems":1,"items":{"$ref":"#"}},"nonNegativeInteger":{"type":"integer","minimum":0},"nonNegativeIntegerDefault0":{"allOf":[{"$ref":"#/definitions/nonNegativeInteger"},{"default":0}]},"simpleTypes":{"enum":["array","boolean","integer","null","number","object","string"]},"stringArray":{"type":"array","items":{"type":"string"},"uniqueItems":true,"default":[]}},"type":["object","boolean"],"properties":{"$id":{"type":"string","format":"uri-reference"},"$schema":{"type":"string","format":"uri"},"$ref":{"type":"string","format":"uri-reference"},"$comment":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"default":true,"readOnly":{"type":"boolean","default":false},"examples":{"type":"array","items":true},"multipleOf":{"type":"number","exclusiveMinimum":0},"maximum":{"type":"number"},"exclusiveMaximum":{"type":"number"},"minimum":{"type":"number"},"exclusiveMinimum":{"type":"number"},"maxLength":{"$ref":"#/definitions/nonNegativeInteger"},"minLength":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"pattern":{"type":"string","format":"regex"},"additionalItems":{"$ref":"#"},"items":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/schemaArray"}],"default":true},"maxItems":{"$ref":"#/definitions/nonNegativeInteger"},"minItems":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"uniqueItems":{"type":"boolean","default":false},"contains":{"$ref":"#"},"maxProperties":{"$ref":"#/definitions/nonNegativeInteger"},"minProperties":{"$ref":"#/definitions/nonNegativeIntegerDefault0"},"required":{"$ref":"#/definitions/stringArray"},"additionalProperties":{"$ref":"#"},"definitions":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"properties":{"type":"object","additionalProperties":{"$ref":"#"},"default":{}},"patternProperties":{"type":"object","additionalProperties":{"$ref":"#"},"propertyNames":{"format":"regex"},"default":{}},"dependencies":{"type":"object","additionalProperties":{"anyOf":[{"$ref":"#"},{"$ref":"#/definitions/stringArray"}]}},"propertyNames":{"$ref":"#"},"const":true,"enum":{"type":"array","items":true,"minItems":1,"uniqueItems":true},"type":{"anyOf":[{"$ref":"#/definitions/simpleTypes"},{"type":"array","items":{"$ref":"#/definitions/simpleTypes"},"minItems":1,"uniqueItems":true}]},"format":{"type":"string"},"contentMediaType":{"type":"string"},"contentEncoding":{"type":"string"},"if":{"$ref":"#"},"then":{"$ref":"#"},"else":{"$ref":"#"},"allOf":{"$ref":"#/definitions/schemaArray"},"anyOf":{"$ref":"#/definitions/schemaArray"},"oneOf":{"$ref":"#/definitions/schemaArray"},"not":{"$ref":"#"}},"default":true}')}},o={};function i(e){var t=o[e];if(void 0!==t)return t.exports;var r=o[e]={id:e,exports:{}};return a[e].call(r.exports,r,r.exports,i),r.exports}i.m=a,i.amdD=function(){throw new Error("define cannot be used indirect")},i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},t=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,i.t=function(r,n){if(1&n&&(r=this(r)),8&n)return r;if("object"==typeof r&&r){if(4&n&&r.__esModule)return r;if(16&n&&"function"==typeof r.then)return r}var a=Object.create(null);i.r(a);var o={};e=e||[null,t({}),t([]),t(t)];for(var s=2&n&&r;"object"==typeof s&&!~e.indexOf(s);s=t(s))Object.getOwnPropertyNames(s).forEach((e=>o[e]=()=>r[e]));return o.default=()=>r,i.d(a,o),a},i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>e+".bundle.js",i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},n="flow-os:",i.l=(e,t,a,o)=>{if(r[e])r[e].push(t);else{var s,c;if(void 0!==a)for(var u=document.getElementsByTagName("script"),l=0;l<u.length;l++){var f=u[l];if(f.getAttribute("src")==e||f.getAttribute("data-webpack")==n+a){s=f;break}}s||(c=!0,(s=document.createElement("script")).charset="utf-8",s.timeout=120,i.nc&&s.setAttribute("nonce",i.nc),s.setAttribute("data-webpack",n+a),s.src=e),r[e]=[t];var h=(t,n)=>{s.onerror=s.onload=null,clearTimeout(p);var a=r[e];if(delete r[e],s.parentNode&&s.parentNode.removeChild(s),a&&a.forEach((e=>e(n))),t)return t(n)},p=setTimeout(h.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=h.bind(null,s.onerror),s.onload=h.bind(null,s.onload),c&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},(()=>{var e;i.g.importScripts&&(e=i.g.location+"");var t=i.g.document;if(!e&&t&&(t.currentScript&&(e=t.currentScript.src),!e)){var r=t.getElementsByTagName("script");if(r.length)for(var n=r.length-1;n>-1&&!e;)e=r[n--].src}if(!e)throw new Error("Automatic publicPath is not supported in this browser");e=e.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),i.p=e})(),(()=>{var e={239:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var a=new Promise(((r,a)=>n=e[t]=[r,a]));r.push(n[2]=a);var o=i.p+i.u(t),s=new Error;i.l(o,(r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var a=r&&("load"===r.type?"missing":r.type),o=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+a+": "+o+")",s.name="ChunkLoadError",s.type=a,s.request=o,n[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,a,[o,s,c]=r,u=0;if(o.some((t=>0!==e[t]))){for(n in s)i.o(s,n)&&(i.m[n]=s[n]);c&&c(i)}for(t&&t(r);u<o.length;u++)a=o[u],i.o(e,a)&&e[a]&&e[a][0](),e[a]=0},r=self.webpackChunkflow_os=self.webpackChunkflow_os||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})(),i.nc=void 0,(()=>{"use strict";var e={};i.r(e),i.d(e,{meta:()=>w,run:()=>b});var t={};i.r(t),i.d(t,{meta:()=>E,run:()=>A});var r={};i.r(r),i.d(r,{meta:()=>P,run:()=>x});var n={};i.r(n),i.d(n,{meta:()=>R,run:()=>j});var a=i(5701),o=i.n(a),s=i(8236),c=i.n(s),u=i(6080),l=i.n(u),f=i(6850),h=i.n(f),p=i(7182),d=i.n(p),m=i(9213),v=i.n(m),y=i(935),g={};g.styleTagTransform=v(),g.setAttributes=h(),g.insert=l().bind(null,"head"),g.domAPI=c(),g.insertStyleElement=d(),o()(y.Z,g),y.Z&&y.Z.locals&&y.Z.locals;var w={name:"Clock",description:"Displays the date & time.",id:"clock"},b=function(e){e.style.display="flex",e.style.alignItems="center",e.innerText="9:41 AM\n10/14/2023"},E={name:"Desktop Switcher",description:"Allows you to switch between desktops.",id:"switcher"},A=function(e){e.style.display="flex",e.style.gap="10px",e.style.alignItems="center",e.style.paddingLeft="15px",e.style.paddingRight="15px",e.innerHTML="<i class='bx bxs-dice-1'></i><i class='bx bx-dice-2'></i><i class='bx bx-dice-3'></i>"},P={name:"App View",description:"Opens the app view.",id:"appview"},x=function(e){e.style.display="flex",e.style.alignItems="center",e.style.justifyContent="center",e.style.aspectRatio="1 / 1",e.innerHTML="<i class='bx bx-rocket'></i>",e.onclick=function(){window.wm.toggleLauncher()}};function S(e){return S="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},S(e)}function O(){O=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,a=Object.defineProperty||function(e,t,r){e[t]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function u(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,r){return e[t]=r}}function l(e,t,r,n){var o=t&&t.prototype instanceof y?t:y,i=Object.create(o.prototype),s=new $(n||[]);return a(i,"_invoke",{value:I(e,r,s)}),i}function f(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=l;var h="suspendedStart",p="suspendedYield",d="executing",m="completed",v={};function y(){}function g(){}function w(){}var b={};u(b,i,(function(){return this}));var E=Object.getPrototypeOf,A=E&&E(E(L([])));A&&A!==r&&n.call(A,i)&&(b=A);var P=w.prototype=y.prototype=Object.create(b);function x(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function _(e,t){function r(a,o,i,s){var c=f(e[a],e,o);if("throw"!==c.type){var u=c.arg,l=u.value;return l&&"object"==S(l)&&n.call(l,"__await")?t.resolve(l.__await).then((function(e){r("next",e,i,s)}),(function(e){r("throw",e,i,s)})):t.resolve(l).then((function(e){u.value=e,i(u)}),(function(e){return r("throw",e,i,s)}))}s(c.arg)}var o;a(this,"_invoke",{value:function(e,n){function a(){return new t((function(t,a){r(e,n,t,a)}))}return o=o?o.then(a,a):a()}})}function I(t,r,n){var a=h;return function(o,i){if(a===d)throw new Error("Generator is already running");if(a===m){if("throw"===o)throw i;return{value:e,done:!0}}for(n.method=o,n.arg=i;;){var s=n.delegate;if(s){var c=R(s,n);if(c){if(c===v)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(a===h)throw a=m,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);a=d;var u=f(t,r,n);if("normal"===u.type){if(a=n.done?m:p,u.arg===v)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(a=m,n.method="throw",n.arg=u.arg)}}}function R(t,r){var n=r.method,a=t.iterator[n];if(a===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,R(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),v;var o=f(a,t.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,v;var i=o.arg;return i?i.done?(r[t.resultName]=i.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,v):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,v)}function j(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function D(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function $(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(j,this),this.reset(!0)}function L(t){if(t||""===t){var r=t[i];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,o=function r(){for(;++a<t.length;)if(n.call(t,a))return r.value=t[a],r.done=!1,r;return r.value=e,r.done=!0,r};return o.next=o}}throw new TypeError(S(t)+" is not iterable")}return g.prototype=w,a(P,"constructor",{value:w,configurable:!0}),a(w,"constructor",{value:g,configurable:!0}),g.displayName=u(w,c,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===g||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,w):(e.__proto__=w,u(e,c,"GeneratorFunction")),e.prototype=Object.create(P),e},t.awrap=function(e){return{__await:e}},x(_.prototype),u(_.prototype,s,(function(){return this})),t.AsyncIterator=_,t.async=function(e,r,n,a,o){void 0===o&&(o=Promise);var i=new _(l(e,r,n,a),o);return t.isGeneratorFunction(r)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},x(P),u(P,c,"Generator"),u(P,i,(function(){return this})),u(P,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.push(n);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},t.values=L,$.prototype={constructor:$,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(D),!t)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function a(n,a){return s.type="throw",s.arg=t,r.next=n,a&&(r.method="next",r.arg=e),!!a}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],s=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev<i.catchLoc)return a(i.catchLoc,!0);if(this.prev<i.finallyLoc)return a(i.finallyLoc)}else if(c){if(this.prev<i.catchLoc)return a(i.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return a(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var o=a;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var i=o?o.completion:{};return i.type=e,i.arg=t,o?(this.method="next",this.next=o.finallyLoc,v):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),v},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),D(r),v}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;D(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:L(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),v}},t}function _(e,t,r,n,a,o,i){try{var s=e[o](i),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function I(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var o=e.apply(t,r);function i(e){_(o,n,a,i,s,"next",e)}function s(e){_(o,n,a,i,s,"throw",e)}i(void 0)}))}}var R={name:"Apps",description:"Displays the current apps open.",id:"apps"},j=function(e){e.style.display="flex",e.style.alignItems="center",e.style.gap="10px",e.style.paddingLeft="15px",e.style.paddingRight="15px",window.addEventListener("app_opened",(function(t){var r=document.createElement("app");r.innerHTML='<img src="'.concat(t.detail.app.icon,'"/>'),r.onclick=I(O().mark((function e(){var r;return O().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,t.detail.win;case 2:return r=e.sent,e.next=5,r.focus();case 5:case"end":return e.stop()}}),e)}))),e.appendChild(r)}))};function D(e){return D="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},D(e)}function $(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,L(n.key),n)}}function L(e){var t=function(e,t){if("object"!==D(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,"string");if("object"!==D(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===D(t)?t:String(t)}const k=function(){function a(){var o,i,s;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,a),o=this,s=[],(i=L(i="items"))in o?Object.defineProperty(o,i,{value:s,enumerable:!0,configurable:!0,writable:!0}):o[i]=s,this.element=document.createElement("toolbar"),document.body.appendChild(this.element),this.add(r),this.add(n),this.add(e),this.add(t)}var o,i;return o=a,(i=[{key:"add",value:function(e){if(this.items.some((function(t){return t.meta.id===e.meta.id})))console.error("Unable to register tool; ".concat(e.meta.id," is already registered."));else{var t=document.createElement("div");t.setAttribute("data-toolbar-id",e.meta.id),this.items.push(e),this.element.appendChild(t),e.run(t)}}}])&&$(o.prototype,i),Object.defineProperty(o,"prototype",{writable:!1}),a}(),F=i.p+"images/dbd1723a2fcf92e3b03a760a1259282c.png";function C(e){return C="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},C(e)}function T(){T=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,a=Object.defineProperty||function(e,t,r){e[t]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function u(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,r){return e[t]=r}}function l(e,t,r,n){var o=t&&t.prototype instanceof y?t:y,i=Object.create(o.prototype),s=new j(n||[]);return a(i,"_invoke",{value:O(e,r,s)}),i}function f(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=l;var h="suspendedStart",p="suspendedYield",d="executing",m="completed",v={};function y(){}function g(){}function w(){}var b={};u(b,i,(function(){return this}));var E=Object.getPrototypeOf,A=E&&E(E(D([])));A&&A!==r&&n.call(A,i)&&(b=A);var P=w.prototype=y.prototype=Object.create(b);function x(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function r(a,o,i,s){var c=f(e[a],e,o);if("throw"!==c.type){var u=c.arg,l=u.value;return l&&"object"==C(l)&&n.call(l,"__await")?t.resolve(l.__await).then((function(e){r("next",e,i,s)}),(function(e){r("throw",e,i,s)})):t.resolve(l).then((function(e){u.value=e,i(u)}),(function(e){return r("throw",e,i,s)}))}s(c.arg)}var o;a(this,"_invoke",{value:function(e,n){function a(){return new t((function(t,a){r(e,n,t,a)}))}return o=o?o.then(a,a):a()}})}function O(t,r,n){var a=h;return function(o,i){if(a===d)throw new Error("Generator is already running");if(a===m){if("throw"===o)throw i;return{value:e,done:!0}}for(n.method=o,n.arg=i;;){var s=n.delegate;if(s){var c=_(s,n);if(c){if(c===v)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(a===h)throw a=m,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);a=d;var u=f(t,r,n);if("normal"===u.type){if(a=n.done?m:p,u.arg===v)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(a=m,n.method="throw",n.arg=u.arg)}}}function _(t,r){var n=r.method,a=t.iterator[n];if(a===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,_(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),v;var o=f(a,t.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,v;var i=o.arg;return i?i.done?(r[t.resultName]=i.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,v):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,v)}function I(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function R(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function j(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(I,this),this.reset(!0)}function D(t){if(t||""===t){var r=t[i];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,o=function r(){for(;++a<t.length;)if(n.call(t,a))return r.value=t[a],r.done=!1,r;return r.value=e,r.done=!0,r};return o.next=o}}throw new TypeError(C(t)+" is not iterable")}return g.prototype=w,a(P,"constructor",{value:w,configurable:!0}),a(w,"constructor",{value:g,configurable:!0}),g.displayName=u(w,c,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===g||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,w):(e.__proto__=w,u(e,c,"GeneratorFunction")),e.prototype=Object.create(P),e},t.awrap=function(e){return{__await:e}},x(S.prototype),u(S.prototype,s,(function(){return this})),t.AsyncIterator=S,t.async=function(e,r,n,a,o){void 0===o&&(o=Promise);var i=new S(l(e,r,n,a),o);return t.isGeneratorFunction(r)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},x(P),u(P,c,"Generator"),u(P,i,(function(){return this})),u(P,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.push(n);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},t.values=D,j.prototype={constructor:j,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(R),!t)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function a(n,a){return s.type="throw",s.arg=t,r.next=n,a&&(r.method="next",r.arg=e),!!a}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],s=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev<i.catchLoc)return a(i.catchLoc,!0);if(this.prev<i.finallyLoc)return a(i.finallyLoc)}else if(c){if(this.prev<i.catchLoc)return a(i.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return a(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var o=a;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var i=o?o.completion:{};return i.type=e,i.arg=t,o?(this.method="next",this.next=o.finallyLoc,v):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),v},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),R(r),v}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;R(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:D(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),v}},t}function N(e,t,r,n,a,o,i){try{var s=e[o](i),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function B(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,U(n.key),n)}}function M(e,t,r){return(t=U(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function U(e){var t=function(e,t){if("object"!==C(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,"string");if("object"!==C(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===C(t)?t:String(t)}var V=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),M(this,"name","Settings"),M(this,"pkg","flow.settings"),M(this,"icon",F),M(this,"version","1.0.0")}var t,r,n,a;return t=e,r=[{key:"open",value:(n=T().mark((function e(){var t;return T().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return(t=window.wm.createWindow({title:this.name,icon:F,width:700,height:300})).content.style.padding="10px",t.content.innerHTML="\n <h1>Settings</h1>\n <p>owo2</p>\n ",e.abrupt("return",t);case 4:case"end":return e.stop()}}),e,this)})),a=function(){var e=this,t=arguments;return new Promise((function(r,a){var o=n.apply(e,t);function i(e){N(o,r,a,i,s,"next",e)}function s(e){N(o,r,a,i,s,"throw",e)}i(void 0)}))},function(){return a.apply(this,arguments)})}],r&&B(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();const q=i.p+"images/d71072aad36a754b1038c4245ea986df.png";var K=i(3232),Y=i.n(K);function z(e){return z="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},z(e)}function G(){G=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,a=Object.defineProperty||function(e,t,r){e[t]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function u(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,r){return e[t]=r}}function l(e,t,r,n){var o=t&&t.prototype instanceof y?t:y,i=Object.create(o.prototype),s=new j(n||[]);return a(i,"_invoke",{value:O(e,r,s)}),i}function f(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=l;var h="suspendedStart",p="suspendedYield",d="executing",m="completed",v={};function y(){}function g(){}function w(){}var b={};u(b,i,(function(){return this}));var E=Object.getPrototypeOf,A=E&&E(E(D([])));A&&A!==r&&n.call(A,i)&&(b=A);var P=w.prototype=y.prototype=Object.create(b);function x(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function r(a,o,i,s){var c=f(e[a],e,o);if("throw"!==c.type){var u=c.arg,l=u.value;return l&&"object"==z(l)&&n.call(l,"__await")?t.resolve(l.__await).then((function(e){r("next",e,i,s)}),(function(e){r("throw",e,i,s)})):t.resolve(l).then((function(e){u.value=e,i(u)}),(function(e){return r("throw",e,i,s)}))}s(c.arg)}var o;a(this,"_invoke",{value:function(e,n){function a(){return new t((function(t,a){r(e,n,t,a)}))}return o=o?o.then(a,a):a()}})}function O(t,r,n){var a=h;return function(o,i){if(a===d)throw new Error("Generator is already running");if(a===m){if("throw"===o)throw i;return{value:e,done:!0}}for(n.method=o,n.arg=i;;){var s=n.delegate;if(s){var c=_(s,n);if(c){if(c===v)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(a===h)throw a=m,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);a=d;var u=f(t,r,n);if("normal"===u.type){if(a=n.done?m:p,u.arg===v)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(a=m,n.method="throw",n.arg=u.arg)}}}function _(t,r){var n=r.method,a=t.iterator[n];if(a===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,_(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),v;var o=f(a,t.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,v;var i=o.arg;return i?i.done?(r[t.resultName]=i.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,v):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,v)}function I(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function R(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function j(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(I,this),this.reset(!0)}function D(t){if(t||""===t){var r=t[i];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,o=function r(){for(;++a<t.length;)if(n.call(t,a))return r.value=t[a],r.done=!1,r;return r.value=e,r.done=!0,r};return o.next=o}}throw new TypeError(z(t)+" is not iterable")}return g.prototype=w,a(P,"constructor",{value:w,configurable:!0}),a(w,"constructor",{value:g,configurable:!0}),g.displayName=u(w,c,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===g||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,w):(e.__proto__=w,u(e,c,"GeneratorFunction")),e.prototype=Object.create(P),e},t.awrap=function(e){return{__await:e}},x(S.prototype),u(S.prototype,s,(function(){return this})),t.AsyncIterator=S,t.async=function(e,r,n,a,o){void 0===o&&(o=Promise);var i=new S(l(e,r,n,a),o);return t.isGeneratorFunction(r)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},x(P),u(P,c,"Generator"),u(P,i,(function(){return this})),u(P,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.push(n);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},t.values=D,j.prototype={constructor:j,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(R),!t)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function a(n,a){return s.type="throw",s.arg=t,r.next=n,a&&(r.method="next",r.arg=e),!!a}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],s=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev<i.catchLoc)return a(i.catchLoc,!0);if(this.prev<i.finallyLoc)return a(i.finallyLoc)}else if(c){if(this.prev<i.catchLoc)return a(i.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return a(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var o=a;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var i=o?o.completion:{};return i.type=e,i.arg=t,o?(this.method="next",this.next=o.finallyLoc,v):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),v},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),R(r),v}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;R(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:D(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),v}},t}function H(e,t,r,n,a,o,i){try{var s=e[o](i),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function Q(e){return function(){var t=this,r=arguments;return new Promise((function(n,a){var o=e.apply(t,r);function i(e){H(o,n,a,i,s,"next",e)}function s(e){H(o,n,a,i,s,"throw",e)}i(void 0)}))}}function J(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,W(n.key),n)}}function X(e,t,r){return(t=W(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function W(e){var t=function(e,t){if("object"!==z(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,"string");if("object"!==z(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===z(t)?t:String(t)}var Z=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),X(this,"name","Files"),X(this,"pkg","flow.files"),X(this,"icon",q),X(this,"version","1.0.0")}var t,r,n;return t=e,r=[{key:"open",value:(n=Q(G().mark((function e(){var t,r,n;return G().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return n=function(){return n=Q(G().mark((function e(n){return G().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Y().readdir(n,(function(e,a){var o="/"===n?"<i class='bx bx-arrow-to-left'></i>":"<i class='back bx bx-left-arrow-alt'></i>";t.content.innerHTML='\n <div style="padding: 5px;display: flex;align-items: center;">'.concat(o).concat(n,'</div>\n <div class="files" style="background: var(--base);flex: 1;border-radius: 10px;display: flex;flex-direction: column;"></div>\n '),"<i class='bx bx-arrow-to-left'></i>"!==o&&(t.content.querySelector(".back").onclick=function(){n.split("/")[1]===n.replace("/","")?r("/"+n.split("/")[0]):r("/"+n.split("/")[1])});var i=function(e){var o="/"===n?"":"/";Y().stat(n+o+a[e],(function(i,s){var c=document.createElement("div");c.setAttribute("style","padding: 5px;border-bottom: 1px solid var(--text);"),c.innerText+="".concat(a[e]),c.onclick=function(){!0===s.isDirectory()?r(n+o+a[e]):ve.openApp("flow.editor",{path:n+o+a[e]})},t.content.querySelector(".files").appendChild(c)}))};for(var s in a)i(s)}));case 2:case"end":return e.stop()}}),e)}))),n.apply(this,arguments)},r=function(e){return n.apply(this,arguments)},t=window.wm.createWindow({title:this.name,icon:q,width:500,height:400}),e.prev=3,e.next=6,Y().mkdir("/home",(function(){}));case 6:return e.next=8,Y().mkdir("/home/meow",(function(){}));case 8:e.next=12;break;case 10:e.prev=10,e.t0=e.catch(3);case 12:return e.prev=12,e.next=15,Y().writeFile("/home/owo1.txt","sussy",(function(){}));case 15:return e.next=17,Y().writeFile("/home/owo2.html","<body></body>",(function(){}));case 17:return e.next=19,Y().writeFile("/home/owo.js","alert(`hi`)",(function(){}));case 19:e.next=23;break;case 21:e.prev=21,e.t1=e.catch(12);case 23:return t.content.style.display="flex",t.content.style.flexDirection="column",r("/"),e.abrupt("return",t);case 27:case"end":return e.stop()}}),e,this,[[3,10],[12,21]])}))),function(){return n.apply(this,arguments)})}],r&&J(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();const ee=i.p+"images/67031c15d90a3d85854fb0857c00dfb3.png";function te(e){return te="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},te(e)}function re(){re=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,a=Object.defineProperty||function(e,t,r){e[t]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function u(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,r){return e[t]=r}}function l(e,t,r,n){var o=t&&t.prototype instanceof y?t:y,i=Object.create(o.prototype),s=new j(n||[]);return a(i,"_invoke",{value:O(e,r,s)}),i}function f(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=l;var h="suspendedStart",p="suspendedYield",d="executing",m="completed",v={};function y(){}function g(){}function w(){}var b={};u(b,i,(function(){return this}));var E=Object.getPrototypeOf,A=E&&E(E(D([])));A&&A!==r&&n.call(A,i)&&(b=A);var P=w.prototype=y.prototype=Object.create(b);function x(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function r(a,o,i,s){var c=f(e[a],e,o);if("throw"!==c.type){var u=c.arg,l=u.value;return l&&"object"==te(l)&&n.call(l,"__await")?t.resolve(l.__await).then((function(e){r("next",e,i,s)}),(function(e){r("throw",e,i,s)})):t.resolve(l).then((function(e){u.value=e,i(u)}),(function(e){return r("throw",e,i,s)}))}s(c.arg)}var o;a(this,"_invoke",{value:function(e,n){function a(){return new t((function(t,a){r(e,n,t,a)}))}return o=o?o.then(a,a):a()}})}function O(t,r,n){var a=h;return function(o,i){if(a===d)throw new Error("Generator is already running");if(a===m){if("throw"===o)throw i;return{value:e,done:!0}}for(n.method=o,n.arg=i;;){var s=n.delegate;if(s){var c=_(s,n);if(c){if(c===v)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(a===h)throw a=m,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);a=d;var u=f(t,r,n);if("normal"===u.type){if(a=n.done?m:p,u.arg===v)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(a=m,n.method="throw",n.arg=u.arg)}}}function _(t,r){var n=r.method,a=t.iterator[n];if(a===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,_(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),v;var o=f(a,t.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,v;var i=o.arg;return i?i.done?(r[t.resultName]=i.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,v):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,v)}function I(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function R(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function j(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(I,this),this.reset(!0)}function D(t){if(t||""===t){var r=t[i];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,o=function r(){for(;++a<t.length;)if(n.call(t,a))return r.value=t[a],r.done=!1,r;return r.value=e,r.done=!0,r};return o.next=o}}throw new TypeError(te(t)+" is not iterable")}return g.prototype=w,a(P,"constructor",{value:w,configurable:!0}),a(w,"constructor",{value:g,configurable:!0}),g.displayName=u(w,c,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===g||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,w):(e.__proto__=w,u(e,c,"GeneratorFunction")),e.prototype=Object.create(P),e},t.awrap=function(e){return{__await:e}},x(S.prototype),u(S.prototype,s,(function(){return this})),t.AsyncIterator=S,t.async=function(e,r,n,a,o){void 0===o&&(o=Promise);var i=new S(l(e,r,n,a),o);return t.isGeneratorFunction(r)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},x(P),u(P,c,"Generator"),u(P,i,(function(){return this})),u(P,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.push(n);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},t.values=D,j.prototype={constructor:j,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(R),!t)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function a(n,a){return s.type="throw",s.arg=t,r.next=n,a&&(r.method="next",r.arg=e),!!a}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],s=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev<i.catchLoc)return a(i.catchLoc,!0);if(this.prev<i.finallyLoc)return a(i.finallyLoc)}else if(c){if(this.prev<i.catchLoc)return a(i.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return a(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var o=a;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var i=o?o.completion:{};return i.type=e,i.arg=t,o?(this.method="next",this.next=o.finallyLoc,v):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),v},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),R(r),v}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;R(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:D(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),v}},t}function ne(e,t,r,n,a,o,i){try{var s=e[o](i),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function ae(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,ie(n.key),n)}}function oe(e,t,r){return(t=ie(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function ie(e){var t=function(e,t){if("object"!==te(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,"string");if("object"!==te(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===te(t)?t:String(t)}var se=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),oe(this,"name","Music"),oe(this,"pkg","flow.music"),oe(this,"icon",ee),oe(this,"version","1.0.0")}var t,r,n,a;return t=e,r=[{key:"open",value:(n=re().mark((function e(){var t;return re().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return(t=window.wm.createWindow({title:this.name,icon:ee})).content.innerHTML="hi",e.abrupt("return",t);case 3:case"end":return e.stop()}}),e,this)})),a=function(){var e=this,t=arguments;return new Promise((function(r,a){var o=n.apply(e,t);function i(e){ne(o,r,a,i,s,"next",e)}function s(e){ne(o,r,a,i,s,"throw",e)}i(void 0)}))},function(){return a.apply(this,arguments)})}],r&&ae(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();const ce=i.p+"images/2893674da98cb77a7081ab698791e26e.png";function ue(e){return ue="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ue(e)}function le(){le=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,a=Object.defineProperty||function(e,t,r){e[t]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function u(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,r){return e[t]=r}}function l(e,t,r,n){var o=t&&t.prototype instanceof y?t:y,i=Object.create(o.prototype),s=new j(n||[]);return a(i,"_invoke",{value:O(e,r,s)}),i}function f(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=l;var h="suspendedStart",p="suspendedYield",d="executing",m="completed",v={};function y(){}function g(){}function w(){}var b={};u(b,i,(function(){return this}));var E=Object.getPrototypeOf,A=E&&E(E(D([])));A&&A!==r&&n.call(A,i)&&(b=A);var P=w.prototype=y.prototype=Object.create(b);function x(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function r(a,o,i,s){var c=f(e[a],e,o);if("throw"!==c.type){var u=c.arg,l=u.value;return l&&"object"==ue(l)&&n.call(l,"__await")?t.resolve(l.__await).then((function(e){r("next",e,i,s)}),(function(e){r("throw",e,i,s)})):t.resolve(l).then((function(e){u.value=e,i(u)}),(function(e){return r("throw",e,i,s)}))}s(c.arg)}var o;a(this,"_invoke",{value:function(e,n){function a(){return new t((function(t,a){r(e,n,t,a)}))}return o=o?o.then(a,a):a()}})}function O(t,r,n){var a=h;return function(o,i){if(a===d)throw new Error("Generator is already running");if(a===m){if("throw"===o)throw i;return{value:e,done:!0}}for(n.method=o,n.arg=i;;){var s=n.delegate;if(s){var c=_(s,n);if(c){if(c===v)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(a===h)throw a=m,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);a=d;var u=f(t,r,n);if("normal"===u.type){if(a=n.done?m:p,u.arg===v)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(a=m,n.method="throw",n.arg=u.arg)}}}function _(t,r){var n=r.method,a=t.iterator[n];if(a===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,_(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),v;var o=f(a,t.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,v;var i=o.arg;return i?i.done?(r[t.resultName]=i.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,v):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,v)}function I(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function R(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function j(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(I,this),this.reset(!0)}function D(t){if(t||""===t){var r=t[i];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,o=function r(){for(;++a<t.length;)if(n.call(t,a))return r.value=t[a],r.done=!1,r;return r.value=e,r.done=!0,r};return o.next=o}}throw new TypeError(ue(t)+" is not iterable")}return g.prototype=w,a(P,"constructor",{value:w,configurable:!0}),a(w,"constructor",{value:g,configurable:!0}),g.displayName=u(w,c,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===g||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,w):(e.__proto__=w,u(e,c,"GeneratorFunction")),e.prototype=Object.create(P),e},t.awrap=function(e){return{__await:e}},x(S.prototype),u(S.prototype,s,(function(){return this})),t.AsyncIterator=S,t.async=function(e,r,n,a,o){void 0===o&&(o=Promise);var i=new S(l(e,r,n,a),o);return t.isGeneratorFunction(r)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},x(P),u(P,c,"Generator"),u(P,i,(function(){return this})),u(P,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.push(n);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},t.values=D,j.prototype={constructor:j,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(R),!t)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function a(n,a){return s.type="throw",s.arg=t,r.next=n,a&&(r.method="next",r.arg=e),!!a}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],s=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev<i.catchLoc)return a(i.catchLoc,!0);if(this.prev<i.finallyLoc)return a(i.finallyLoc)}else if(c){if(this.prev<i.catchLoc)return a(i.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return a(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var o=a;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var i=o?o.completion:{};return i.type=e,i.arg=t,o?(this.method="next",this.next=o.finallyLoc,v):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),v},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),R(r),v}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;R(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:D(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),v}},t}function fe(e,t,r,n,a,o,i){try{var s=e[o](i),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function he(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,de(n.key),n)}}function pe(e,t,r){return(t=de(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function de(e){var t=function(e,t){if("object"!==ue(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,"string");if("object"!==ue(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===ue(t)?t:String(t)}var me=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,e),pe(this,"name","Editor"),pe(this,"pkg","flow.editor"),pe(this,"icon",ce),pe(this,"version","1.0.0")}var t,r,n,a;return t=e,r=[{key:"open",value:(n=le().mark((function e(t){var r,n,a,o;return le().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(r=window.wm.createWindow({title:this.name,icon:ce,width:500,height:400}),!t.path){e.next=16;break}return r.setTitle("Editor - "+t.path),e.next=5,i.e(501).then(i.t.bind(i,5501,23));case 5:return n=e.sent,a=n.default,o=a.edit(r.content),t.path.split(".").at(-1).match(/(m|c|)(js)/)?o.getSession().setMode("ace/mode/javascript"):t.path.split(".").at(-1).match(/json/)?o.getSession().setMode("ace/mode/json"):t.path.split(".").at(-1).match(/(htm)(l|)/)?o.getSession().setMode("ace/mode/html"):t.path.split(".").at(-1).match(/css/)&&o.getSession().setMode("ace/mode/css"),i(1635),o.setTheme("ace/theme/monokai"),e.t0=o,e.next=14,Y().promises.readFile(t.path);case 14:e.t1=e.sent.toString(),e.t0.setValue.call(e.t0,e.t1);case 16:return e.abrupt("return",r);case 17:case"end":return e.stop()}}),e,this)})),a=function(){var e=this,t=arguments;return new Promise((function(r,a){var o=n.apply(e,t);function i(e){fe(o,r,a,i,s,"next",e)}function s(e){fe(o,r,a,i,s,"throw",e)}i(void 0)}))},function(e){return a.apply(this,arguments)})}],r&&he(t.prototype,r),Object.defineProperty(t,"prototype",{writable:!1}),e}();const ve={apps:{"flow.settings":new V,"flow.music":new se,"flow.files":new Z,"flow.editor":new me},openApp:function(e,t){var r=this.apps[e].open(t),n=new CustomEvent("app_opened",{detail:{app:this.apps[e],win:r}});window.dispatchEvent(n)}};function ye(e){return ye="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},ye(e)}function ge(){ge=function(){return t};var e,t={},r=Object.prototype,n=r.hasOwnProperty,a=Object.defineProperty||function(e,t,r){e[t]=r.value},o="function"==typeof Symbol?Symbol:{},i=o.iterator||"@@iterator",s=o.asyncIterator||"@@asyncIterator",c=o.toStringTag||"@@toStringTag";function u(e,t,r){return Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,r){return e[t]=r}}function l(e,t,r,n){var o=t&&t.prototype instanceof y?t:y,i=Object.create(o.prototype),s=new j(n||[]);return a(i,"_invoke",{value:O(e,r,s)}),i}function f(e,t,r){try{return{type:"normal",arg:e.call(t,r)}}catch(e){return{type:"throw",arg:e}}}t.wrap=l;var h="suspendedStart",p="suspendedYield",d="executing",m="completed",v={};function y(){}function g(){}function w(){}var b={};u(b,i,(function(){return this}));var E=Object.getPrototypeOf,A=E&&E(E(D([])));A&&A!==r&&n.call(A,i)&&(b=A);var P=w.prototype=y.prototype=Object.create(b);function x(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function S(e,t){function r(a,o,i,s){var c=f(e[a],e,o);if("throw"!==c.type){var u=c.arg,l=u.value;return l&&"object"==ye(l)&&n.call(l,"__await")?t.resolve(l.__await).then((function(e){r("next",e,i,s)}),(function(e){r("throw",e,i,s)})):t.resolve(l).then((function(e){u.value=e,i(u)}),(function(e){return r("throw",e,i,s)}))}s(c.arg)}var o;a(this,"_invoke",{value:function(e,n){function a(){return new t((function(t,a){r(e,n,t,a)}))}return o=o?o.then(a,a):a()}})}function O(t,r,n){var a=h;return function(o,i){if(a===d)throw new Error("Generator is already running");if(a===m){if("throw"===o)throw i;return{value:e,done:!0}}for(n.method=o,n.arg=i;;){var s=n.delegate;if(s){var c=_(s,n);if(c){if(c===v)continue;return c}}if("next"===n.method)n.sent=n._sent=n.arg;else if("throw"===n.method){if(a===h)throw a=m,n.arg;n.dispatchException(n.arg)}else"return"===n.method&&n.abrupt("return",n.arg);a=d;var u=f(t,r,n);if("normal"===u.type){if(a=n.done?m:p,u.arg===v)continue;return{value:u.arg,done:n.done}}"throw"===u.type&&(a=m,n.method="throw",n.arg=u.arg)}}}function _(t,r){var n=r.method,a=t.iterator[n];if(a===e)return r.delegate=null,"throw"===n&&t.iterator.return&&(r.method="return",r.arg=e,_(t,r),"throw"===r.method)||"return"!==n&&(r.method="throw",r.arg=new TypeError("The iterator does not provide a '"+n+"' method")),v;var o=f(a,t.iterator,r.arg);if("throw"===o.type)return r.method="throw",r.arg=o.arg,r.delegate=null,v;var i=o.arg;return i?i.done?(r[t.resultName]=i.value,r.next=t.nextLoc,"return"!==r.method&&(r.method="next",r.arg=e),r.delegate=null,v):i:(r.method="throw",r.arg=new TypeError("iterator result is not an object"),r.delegate=null,v)}function I(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function R(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function j(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(I,this),this.reset(!0)}function D(t){if(t||""===t){var r=t[i];if(r)return r.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,o=function r(){for(;++a<t.length;)if(n.call(t,a))return r.value=t[a],r.done=!1,r;return r.value=e,r.done=!0,r};return o.next=o}}throw new TypeError(ye(t)+" is not iterable")}return g.prototype=w,a(P,"constructor",{value:w,configurable:!0}),a(w,"constructor",{value:g,configurable:!0}),g.displayName=u(w,c,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===g||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,w):(e.__proto__=w,u(e,c,"GeneratorFunction")),e.prototype=Object.create(P),e},t.awrap=function(e){return{__await:e}},x(S.prototype),u(S.prototype,s,(function(){return this})),t.AsyncIterator=S,t.async=function(e,r,n,a,o){void 0===o&&(o=Promise);var i=new S(l(e,r,n,a),o);return t.isGeneratorFunction(r)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},x(P),u(P,c,"Generator"),u(P,i,(function(){return this})),u(P,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),r=[];for(var n in t)r.push(n);return r.reverse(),function e(){for(;r.length;){var n=r.pop();if(n in t)return e.value=n,e.done=!1,e}return e.done=!0,e}},t.values=D,j.prototype={constructor:j,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(R),!t)for(var r in this)"t"===r.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(this[r]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var r=this;function a(n,a){return s.type="throw",s.arg=t,r.next=n,a&&(r.method="next",r.arg=e),!!a}for(var o=this.tryEntries.length-1;o>=0;--o){var i=this.tryEntries[o],s=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var c=n.call(i,"catchLoc"),u=n.call(i,"finallyLoc");if(c&&u){if(this.prev<i.catchLoc)return a(i.catchLoc,!0);if(this.prev<i.finallyLoc)return a(i.finallyLoc)}else if(c){if(this.prev<i.catchLoc)return a(i.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return a(i.finallyLoc)}}}},abrupt:function(e,t){for(var r=this.tryEntries.length-1;r>=0;--r){var a=this.tryEntries[r];if(a.tryLoc<=this.prev&&n.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var o=a;break}}o&&("break"===e||"continue"===e)&&o.tryLoc<=t&&t<=o.finallyLoc&&(o=null);var i=o?o.completion:{};return i.type=e,i.arg=t,o?(this.method="next",this.next=o.finallyLoc,v):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),v},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),R(r),v}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var a=n.arg;R(r)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:D(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),v}},t}function we(e,t,r,n,a,o,i){try{var s=e[o](i),c=s.value}catch(e){return void r(e)}s.done?t(c):Promise.resolve(c).then(n,a)}function be(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function Ee(e,t,r){return(t=Se(t))in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function Ae(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Pe(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,Se(n.key),n)}}function xe(e,t,r){return t&&Pe(e.prototype,t),r&&Pe(e,r),Object.defineProperty(e,"prototype",{writable:!1}),e}function Se(e){var t=function(e,t){if("object"!==ye(e)||null===e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,"string");if("object"!==ye(n))return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}(e);return"symbol"===ye(t)?t:String(t)}window.onfocus=function(){return!0},window.onblur=function(){return!1};var Oe=function(){function e(t,r){var n=this;Ae(this,e),this.wm=t,this.config=r,this.element=document.createElement("window"),this.element.style.zIndex=(t.getHighestZIndex()+1).toString(),this.element.style.position="absolute",this.focus(),this.element.onmousedown=function(){n.focus()},this.element.style.width="".concat(r.width||300,"px"),this.element.style.height="".concat(r.height||200,"px"),this.header=document.createElement("window-header"),this.header.innerHTML='<img src="'.concat(r.icon,'"></img> <div class="title">').concat(r.title,"</div>"),this.content=document.createElement("window-content"),this.element.appendChild(this.header),this.element.appendChild(this.content),function(e,t){var r=0,n=0;function a(a){a.preventDefault();var o=a.clientX-r,i=a.clientY-n,s=e.offsetTop+i,c=e.offsetLeft+o,u=t.offsetWidth,l=t.offsetHeight;s>=0&&s+e.offsetHeight<=l&&(e.style.top=s+"px"),c>=0&&c+e.offsetWidth<=u&&(e.style.left=c+"px"),r=a.clientX,n=a.clientY}function o(){document.onmouseup=null,document.onmousemove=null,t.onmouseleave=null}e.querySelector("window-header").addEventListener("mousedown",(function(e){e.preventDefault(),o(),t.onmouseenter=null,r=e.clientX,n=e.clientY,document.onmouseup=o,document.onmousemove=a}))}(this.element,document.querySelector("window-area"))}return xe(e,[{key:"focus",value:function(){this.element.style.zIndex!==this.wm.getHighestZIndex().toString()&&(this.element.style.zIndex=(this.wm.getHighestZIndex()+1).toString())}},{key:"setTitle",value:function(e){this.header.querySelector(".title").innerText=e}}]),e}();const _e=function(){function e(){Ae(this,e),Ee(this,"launcherOpen",!1),Ee(this,"windows",[]),this.area=document.createElement("window-area"),this.launcher=document.createElement("launcher"),this.init()}var t,r;return xe(e,[{key:"getHighestZIndex",value:function(){var e,t=this.windows.map((function(e){if(""!==e.element.style.zIndex)return parseInt(e.element.style.zIndex)})).filter((function(e){return void 0!==e})),r=Math.max.apply(Math,function(e){if(Array.isArray(e))return be(e)}(e=t)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||function(e,t){if(e){if("string"==typeof e)return be(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?be(e,t):void 0}}(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}());return r===-1/0?0:r}},{key:"createWindow",value:function(e){var t=new Oe(this,e);return this.windows.push(t),this.area.appendChild(t.element),t}},{key:"toggleLauncher",value:function(){!0===this.launcherOpen?(this.launcher.style.opacity="0",this.launcher.style.backdropFilter="blur(0px)",this.launcher.style.pointerEvents="none"):(this.launcher.style.opacity="1",this.launcher.style.backdropFilter="blur(20px)",this.launcher.style.pointerEvents=null),this.launcherOpen=!this.launcherOpen}},{key:"init",value:(t=ge().mark((function e(){var t,r,n=this;return ge().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:this.launcher.innerHTML='\n <input placeholder="Search"/>\n <apps></apps>\n ',this.launcher.onclick=function(e){e.target===e.currentTarget&&n.toggleLauncher()},this.launcher.querySelector("apps").onclick=function(e){e.target===e.currentTarget&&n.toggleLauncher()},this.launcher.style.opacity="0",this.launcher.style.filter="blur(0px)",this.launcher.style.pointerEvents="none",t=ge().mark((function e(t){var r;return ge().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:(r=document.createElement("app")).onclick=function(){ve.openApp(t),n.toggleLauncher()},r.innerHTML='<img src="'.concat(ve.apps[t].icon,'"><div>').concat(ve.apps[t].name,"</div>"),n.launcher.querySelector("apps").appendChild(r);case 4:case"end":return e.stop()}}),e)})),e.t0=ge().keys(ve.apps);case 8:if((e.t1=e.t0()).done){e.next=13;break}return r=e.t1.value,e.delegateYield(t(r),"t2",11);case 11:e.next=8;break;case 13:document.body.appendChild(this.area),document.body.appendChild(this.launcher);case 15:case"end":return e.stop()}}),e,this)})),r=function(){var e=this,r=arguments;return new Promise((function(n,a){var o=t.apply(e,r);function i(e){we(o,n,a,i,s,"next",e)}function s(e){we(o,n,a,i,s,"throw",e)}i(void 0)}))},function(){return r.apply(this,arguments)})}]),e}();window.statusBar=new k,window.wm=new _e})()})();
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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YixPQUFId3VCLEVBQUdyQixFQUFBdnVFLEdBQUErTSxNQUFBd2hFLEVBQUF2QyxjQUFBeUMsRUFBQW1CLEdBQUEsaUJBQUFyQixFQUFBbnRCLEtBQUEsZ0JBVWQ3ZixTQUFTcFgsS0FBS3l1QyxZQUFZdnBELEtBQUs2aUUsTUFDL0Izd0MsU0FBU3BYLEtBQUt5dUMsWUFBWXZwRCxLQUFLOGlFLFVBQVUseUJBQUE1RCxFQUFBM0MsT0FBQSxHQUFBYyxFQUFBLFNBakMxQzJGLEVBaExILGVBQUFoaUUsRUFBQSxLQUFBdEgsRUFBQWlLLFVBQUEsV0FBQWpJLFNBQUEsU0FBQThELEVBQUFxMUIsR0FBQSxJQUFBZ29DLEVBQUFqdkMsRUFBQWxxQixNQUFBMUMsRUFBQXRILEdBQUEsU0FBQW9qRSxFQUFBcC9ELEdBQUFrL0QsR0FBQUMsRUFBQXI5RCxFQUFBcTFCLEVBQUFpb0MsRUFBQUMsRUFBQSxPQUFBci9ELEVBQUEsVUFBQXEvRCxFQUFBNXNDLEdBQUF5c0MsR0FBQUMsRUFBQXI5RCxFQUFBcTFCLEVBQUFpb0MsRUFBQUMsRUFBQSxRQUFBNXNDLEVBQUEsQ0FBQTJzQyxPQUFBOXNFLEVBQUEsS0FrTkcsa0JBQUFnekUsRUFBQXQvRCxNQUFBLEtBQUFDLFVBQUEsTUFBQWkvRCxDQUFBLENBakZLLEdDeEhScHhDLE9BQU91eUMsVUFBWSxJQUFJdEcsRUFDdkJqc0MsT0FBT3VvQyxHQUFLLElBQUk2SSIsInNvdXJjZXMiOlsid2VicGFjazovL2Zsb3ctb3Mvd2VicGFjay9ydW50aW1lL2NyZWF0ZSBmYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vZmxvdy1vcy93ZWJwYWNrL3J1bnRpbWUvbG9hZCBzY3JpcHQiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL3NyYy9zdHlsZS5sZXNzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2LWtleXdvcmRzL2luZGV4LmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2LWtleXdvcmRzL2tleXdvcmRzL19mb3JtYXRMaW1pdC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3Jkcy9rZXl3b3Jkcy9fdXRpbC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3Jkcy9rZXl3b3Jkcy9hbGxSZXF1aXJlZC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3Jkcy9rZXl3b3Jkcy9hbnlSZXF1aXJlZC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3Jkcy9rZXl3b3Jkcy9kZWVwUHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3Jkcy9rZXl3b3Jkcy9kZWVwUmVxdWlyZWQuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYta2V5d29yZHMva2V5d29yZHMvZG90anMvX2Zvcm1hdExpbWl0LmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2LWtleXdvcmRzL2tleXdvcmRzL2RvdGpzL3BhdHRlcm5SZXF1aXJlZC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3Jkcy9rZXl3b3Jkcy9kb3Rqcy9zd2l0Y2guanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYta2V5d29yZHMva2V5d29yZHMvZHluYW1pY0RlZmF1bHRzLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2LWtleXdvcmRzL2tleXdvcmRzL2Zvcm1hdE1heGltdW0uanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYta2V5d29yZHMva2V5d29yZHMvZm9ybWF0TWluaW11bS5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3Jkcy9rZXl3b3Jkcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3Jkcy9rZXl3b3Jkcy9pbnN0YW5jZW9mLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2LWtleXdvcmRzL2tleXdvcmRzL29uZVJlcXVpcmVkLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2LWtleXdvcmRzL2tleXdvcmRzL3BhdHRlcm5SZXF1aXJlZC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3Jkcy9rZXl3b3Jkcy9wcm9oaWJpdGVkLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2LWtleXdvcmRzL2tleXdvcmRzL3JhbmdlLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2LWtleXdvcmRzL2tleXdvcmRzL3JlZ2V4cC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3Jkcy9rZXl3b3Jkcy9zZWxlY3QuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYta2V5d29yZHMva2V5d29yZHMvc3dpdGNoLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2LWtleXdvcmRzL2tleXdvcmRzL3RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi1rZXl3b3Jkcy9rZXl3b3Jkcy90eXBlb2YuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYta2V5d29yZHMva2V5d29yZHMvdW5pcXVlSXRlbVByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2Fqdi5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvY2FjaGUuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2NvbXBpbGUvYXN5bmMuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2NvbXBpbGUvZXJyb3JfY2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvY29tcGlsZS9mb3JtYXRzLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL2luZGV4LmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL3Jlc29sdmUuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2NvbXBpbGUvcnVsZXMuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2NvbXBpbGUvc2NoZW1hX29iai5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvY29tcGlsZS91Y3MybGVuZ3RoLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL3V0aWwuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2RhdGEuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2RlZmluaXRpb25fc2NoZW1hLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9fbGltaXQuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL19saW1pdEl0ZW1zLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9fbGltaXRMZW5ndGguanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL19saW1pdFByb3BlcnRpZXMuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2FsbE9mLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9hbnlPZi5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvY29tbWVudC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvY29uc3QuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2NvbnRhaW5zLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9jdXN0b20uanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2RlcGVuZGVuY2llcy5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvZW51bS5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvZm9ybWF0LmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9pZi5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2l0ZW1zLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9tdWx0aXBsZU9mLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9ub3QuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL29uZU9mLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9wYXR0ZXJuLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9wcm9wZXJ0eU5hbWVzLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9yZWYuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL3JlcXVpcmVkLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy91bmlxdWVJdGVtcy5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvdmFsaWRhdGUuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9hanYvbGliL2tleXdvcmQuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9iYWxhbmNlZC1tYXRjaC9pbmRleC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2Jhc2U2NC1qcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2JyYWNlLWV4cGFuc2lvbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2JyYWNlL3RoZW1lL21vbm9rYWkuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9idWZmZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9jb25jYXQtbWFwL2luZGV4LmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2VzNi1wcm9taXNpZnkvZGlzdC9wcm9taXNpZnkuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9mYXN0LWRlZXAtZXF1YWwvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9mYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeS9pbmRleC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL2xpYi9hc3luYy5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL2xpYi9ldmVudGVtaXR0ZXIuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9maWxlci9saWIvaW50ZXJjb20uanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9maWxlci9zaGltcy9mcy5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL3NoaW1zL3BhdGguanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9maWxlci9zaGltcy9wcm92aWRlcnMvZGVmYXVsdC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL3NyYy9jb25zdGFudHMuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9maWxlci9zcmMvZGlyZWN0b3J5LWVudHJ5LmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvZmlsZXIvc3JjL2RpcmVudC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL3NyYy9lcnJvcnMuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9maWxlci9zcmMvZmlsZXN5c3RlbS9pbXBsZW1lbnRhdGlvbi5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL3NyYy9maWxlc3lzdGVtL2ludGVyZmFjZS5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL3NyYy9mcy13YXRjaGVyLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvZmlsZXIvc3JjL2luZGV4LmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvZmlsZXIvc3JjL25vZGUuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9maWxlci9zcmMvb3Blbi1maWxlLWRlc2NyaXB0aW9uLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvZmlsZXIvc3JjL29wZW4tZmlsZXMuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9maWxlci9zcmMvcGF0aC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL3NyYy9wcm92aWRlcnMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9maWxlci9zcmMvcHJvdmlkZXJzL2luZGV4ZWRkYi5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL3NyYy9wcm92aWRlcnMvbWVtb3J5LmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvZmlsZXIvc3JjL3NoYXJlZC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL3NyYy9zaGVsbC9lbnZpcm9ubWVudC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL3NyYy9zaGVsbC9zaGVsbC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL3NyYy9zdGF0cy5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2ZpbGVyL3NyYy9zdXBlci1ub2RlLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvZmlsZXIvc3JjL3dlYnBhY2stcGx1Z2luL2luZGV4LmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvZmlsZXIvc3JjL3dlYnBhY2stcGx1Z2luL3Byb2Nlc3NvcnMuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9maWxlci9zcmMvd2VicGFjay1wbHVnaW4vc2NoZW1hLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvZmlsZXIvc3JjL3dlYnBhY2stcGx1Z2luL3V0aWxzLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvaWVlZTc1NC9pbmRleC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL2pzb24tc2NoZW1hLXRyYXZlcnNlL2luZGV4LmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvbWluaW1hdGNoL21pbmltYXRjaC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL3BhdGgtYnJvd3NlcmlmeS9pbmRleC5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL3NjaGVtYS11dGlscy9kaXN0L1ZhbGlkYXRpb25FcnJvci5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL3NjaGVtYS11dGlscy9kaXN0L2luZGV4LmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvc2NoZW1hLXV0aWxzL2Rpc3Qva2V5d29yZHMvYWJzb2x1dGVQYXRoLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvc2NoZW1hLXV0aWxzL2Rpc3Qva2V5d29yZHMvdW5kZWZpbmVkQXNOdWxsLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvc2NoZW1hLXV0aWxzL2Rpc3QvdXRpbC9SYW5nZS5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL3NjaGVtYS11dGlscy9kaXN0L3V0aWwvaGludHMuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9zY2hlbWEtdXRpbHMvZGlzdC92YWxpZGF0ZS5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvdXJpLWpzL3NyYy91dGlsLnRzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvdXJpLWpzL3NyYy9yZWdleHBzLXVyaS50cyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL3VyaS1qcy9zcmMvcmVnZXhwcy1pcmkudHMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy91cmktanMvbm9kZV9tb2R1bGVzL3B1bnljb2RlL3B1bnljb2RlLmVzNi5qcyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL3VyaS1qcy9zcmMvdXJpLnRzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvdXJpLWpzL3NyYy9zY2hlbWVzL2h0dHAudHMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy91cmktanMvc3JjL3NjaGVtZXMvaHR0cHMudHMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy91cmktanMvc3JjL3NjaGVtZXMvd3MudHMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy91cmktanMvc3JjL3NjaGVtZXMvd3NzLnRzIiwid2VicGFjazovL2Zsb3ctb3MvLi9ub2RlX21vZHVsZXMvdXJpLWpzL3NyYy9zY2hlbWVzL21haWx0by50cyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vbm9kZV9tb2R1bGVzL3VyaS1qcy9zcmMvc2NoZW1lcy91cm4udHMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy91cmktanMvc3JjL3NjaGVtZXMvdXJuLXV1aWQudHMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL25vZGVfbW9kdWxlcy91cmktanMvc3JjL2luZGV4LnRzIiwid2VicGFjazovL2Zsb3ctb3Mvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vZmxvdy1vcy93ZWJwYWNrL3J1bnRpbWUvYW1kIGRlZmluZSIsIndlYnBhY2s6Ly9mbG93LW9zL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL2Zsb3ctb3Mvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL2Zsb3ctb3Mvd2VicGFjay9ydW50aW1lL2Vuc3VyZSBjaHVuayIsIndlYnBhY2s6Ly9mbG93LW9zL3dlYnBhY2svcnVudGltZS9nZXQgamF2YXNjcmlwdCBjaHVuayBmaWxlbmFtZSIsIndlYnBhY2s6Ly9mbG93LW9zL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vZmxvdy1vcy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL2Zsb3ctb3Mvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9mbG93LW9zL3dlYnBhY2svcnVudGltZS9wdWJsaWNQYXRoIiwid2VicGFjazovL2Zsb3ctb3Mvd2VicGFjay9ydW50aW1lL2pzb25wIGNodW5rIGxvYWRpbmciLCJ3ZWJwYWNrOi8vZmxvdy1vcy93ZWJwYWNrL3J1bnRpbWUvbm9uY2UiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL3NyYy9zdHlsZS5sZXNzP2VhNjgiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL3NyYy9tb2R1bGVzL2Nsb2NrLnRzIiwid2VicGFjazovL2Zsb3ctb3MvLi9zcmMvbW9kdWxlcy9zd2l0Y2hlci50cyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vc3JjL21vZHVsZXMvYXBwVmlldy50cyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vc3JjL21vZHVsZXMvYXBwcy50cyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vc3JjL3N0YXR1c2Jhci50cyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vc3JjL2Fzc2V0cy9pY29ucy9zZXR0aW5ncy5wbmciLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL3NyYy9hcHBzL3NldHRpbmdzLnRzIiwid2VicGFjazovL2Zsb3ctb3MvLi9zcmMvYXNzZXRzL2ljb25zL2ZpbGVzLnBuZyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vc3JjL2FwcHMvZmlsZXMudHMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL3NyYy9hc3NldHMvaWNvbnMvbXVzaWMucG5nIiwid2VicGFjazovL2Zsb3ctb3MvLi9zcmMvYXBwcy9tdXNpYy50cyIsIndlYnBhY2s6Ly9mbG93LW9zLy4vc3JjL2Fzc2V0cy9pY29ucy9lZGl0b3IucG5nIiwid2VicGFjazovL2Zsb3ctb3MvLi9zcmMvYXBwcy9lZGl0b3IudHMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL3NyYy9mbG93LnRzIiwid2VicGFjazovL2Zsb3ctb3MvLi9zcmMvd20udHMiLCJ3ZWJwYWNrOi8vZmxvdy1vcy8uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJ2YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YgPyAob2JqKSA9PiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKG9iaikpIDogKG9iaikgPT4gKG9iai5fX3Byb3RvX18pO1xudmFyIGxlYWZQcm90b3R5cGVzO1xuLy8gY3JlYXRlIGEgZmFrZSBuYW1lc3BhY2Ugb2JqZWN0XG4vLyBtb2RlICYgMTogdmFsdWUgaXMgYSBtb2R1bGUgaWQsIHJlcXVpcmUgaXRcbi8vIG1vZGUgJiAyOiBtZXJnZSBhbGwgcHJvcGVydGllcyBvZiB2YWx1ZSBpbnRvIHRoZSBuc1xuLy8gbW9kZSAmIDQ6IHJldHVybiB2YWx1ZSB3aGVuIGFscmVhZHkgbnMgb2JqZWN0XG4vLyBtb2RlICYgMTY6IHJldHVybiB2YWx1ZSB3aGVuIGl0J3MgUHJvbWlzZS1saWtlXG4vLyBtb2RlICYgOHwxOiBiZWhhdmUgbGlrZSByZXF1aXJlXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnQgPSBmdW5jdGlvbih2YWx1ZSwgbW9kZSkge1xuXHRpZihtb2RlICYgMSkgdmFsdWUgPSB0aGlzKHZhbHVlKTtcblx0aWYobW9kZSAmIDgpIHJldHVybiB2YWx1ZTtcblx0aWYodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSkge1xuXHRcdGlmKChtb2RlICYgNCkgJiYgdmFsdWUuX19lc01vZHVsZSkgcmV0dXJuIHZhbHVlO1xuXHRcdGlmKChtb2RlICYgMTYpICYmIHR5cGVvZiB2YWx1ZS50aGVuID09PSAnZnVuY3Rpb24nKSByZXR1cm4gdmFsdWU7XG5cdH1cblx0dmFyIG5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5yKG5zKTtcblx0dmFyIGRlZiA9IHt9O1xuXHRsZWFmUHJvdG90eXBlcyA9IGxlYWZQcm90b3R5cGVzIHx8IFtudWxsLCBnZXRQcm90byh7fSksIGdldFByb3RvKFtdKSwgZ2V0UHJvdG8oZ2V0UHJvdG8pXTtcblx0Zm9yKHZhciBjdXJyZW50ID0gbW9kZSAmIDIgJiYgdmFsdWU7IHR5cGVvZiBjdXJyZW50ID09ICdvYmplY3QnICYmICF+bGVhZlByb3RvdHlwZXMuaW5kZXhPZihjdXJyZW50KTsgY3VycmVudCA9IGdldFByb3RvKGN1cnJlbnQpKSB7XG5cdFx0T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoY3VycmVudCkuZm9yRWFjaCgoa2V5KSA9PiAoZGVmW2tleV0gPSAoKSA9PiAodmFsdWVba2V5XSkpKTtcblx0fVxuXHRkZWZbJ2RlZmF1bHQnXSA9ICgpID0+ICh2YWx1ZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChucywgZGVmKTtcblx0cmV0dXJuIG5zO1xufTsiLCJ2YXIgaW5Qcm9ncmVzcyA9IHt9O1xudmFyIGRhdGFXZWJwYWNrUHJlZml4ID0gXCJmbG93LW9zOlwiO1xuLy8gbG9hZFNjcmlwdCBmdW5jdGlvbiB0byBsb2FkIGEgc2NyaXB0IHZpYSBzY3JpcHQgdGFnXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmwgPSAodXJsLCBkb25lLCBrZXksIGNodW5rSWQpID0+IHtcblx0aWYoaW5Qcm9ncmVzc1t1cmxdKSB7IGluUHJvZ3Jlc3NbdXJsXS5wdXNoKGRvbmUpOyByZXR1cm47IH1cblx0dmFyIHNjcmlwdCwgbmVlZEF0dGFjaDtcblx0aWYoa2V5ICE9PSB1bmRlZmluZWQpIHtcblx0XHR2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpO1xuXHRcdGZvcih2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR2YXIgcyA9IHNjcmlwdHNbaV07XG5cdFx0XHRpZihzLmdldEF0dHJpYnV0ZShcInNyY1wiKSA9PSB1cmwgfHwgcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLXdlYnBhY2tcIikgPT0gZGF0YVdlYnBhY2tQcmVmaXggKyBrZXkpIHsgc2NyaXB0ID0gczsgYnJlYWs7IH1cblx0XHR9XG5cdH1cblx0aWYoIXNjcmlwdCkge1xuXHRcdG5lZWRBdHRhY2ggPSB0cnVlO1xuXHRcdHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpO1xuXG5cdFx0c2NyaXB0LmNoYXJzZXQgPSAndXRmLTgnO1xuXHRcdHNjcmlwdC50aW1lb3V0ID0gMTIwO1xuXHRcdGlmIChfX3dlYnBhY2tfcmVxdWlyZV9fLm5jKSB7XG5cdFx0XHRzY3JpcHQuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgX193ZWJwYWNrX3JlcXVpcmVfXy5uYyk7XG5cdFx0fVxuXHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoXCJkYXRhLXdlYnBhY2tcIiwgZGF0YVdlYnBhY2tQcmVmaXggKyBrZXkpO1xuXG5cdFx0c2NyaXB0LnNyYyA9IHVybDtcblx0fVxuXHRpblByb2dyZXNzW3VybF0gPSBbZG9uZV07XG5cdHZhciBvblNjcmlwdENvbXBsZXRlID0gKHByZXYsIGV2ZW50KSA9PiB7XG5cdFx0Ly8gYXZvaWQgbWVtIGxlYWtzIGluIElFLlxuXHRcdHNjcmlwdC5vbmVycm9yID0gc2NyaXB0Lm9ubG9hZCA9IG51bGw7XG5cdFx0Y2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuXHRcdHZhciBkb25lRm5zID0gaW5Qcm9ncmVzc1t1cmxdO1xuXHRcdGRlbGV0ZSBpblByb2dyZXNzW3VybF07XG5cdFx0c2NyaXB0LnBhcmVudE5vZGUgJiYgc2NyaXB0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcblx0XHRkb25lRm5zICYmIGRvbmVGbnMuZm9yRWFjaCgoZm4pID0+IChmbihldmVudCkpKTtcblx0XHRpZihwcmV2KSByZXR1cm4gcHJldihldmVudCk7XG5cdH1cblx0dmFyIHRpbWVvdXQgPSBzZXRUaW1lb3V0KG9uU2NyaXB0Q29tcGxldGUuYmluZChudWxsLCB1bmRlZmluZWQsIHsgdHlwZTogJ3RpbWVvdXQnLCB0YXJnZXQ6IHNjcmlwdCB9KSwgMTIwMDAwKTtcblx0c2NyaXB0Lm9uZXJyb3IgPSBvblNjcmlwdENvbXBsZXRlLmJpbmQobnVsbCwgc2NyaXB0Lm9uZXJyb3IpO1xuXHRzY3JpcHQub25sb2FkID0gb25TY3JpcHRDb21wbGV0ZS5iaW5kKG51bGwsIHNjcmlwdC5vbmxvYWQpO1xuXHRuZWVkQXR0YWNoICYmIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbn07IiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiQGltcG9ydCB1cmwoaHR0cHM6Ly91bnBrZy5jb20vYm94aWNvbnNAMi4xLjQvY3NzL2JveGljb25zLm1pbi5jc3MpO1wiXSk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgYC8qIFNhdG9zaGkgKi9cbkBmb250LWZhY2Uge1xuICBmb250LWZhbWlseTogJ1NhdG9zaGknO1xuICBzcmM6IHVybCgnLy9jZG4uZm9udHNoYXJlLmNvbS93Zi9OV0JRWUpJTTdHQ1o1WFdEN0QyNkFSQjNWRFk1NVpSVC9LNjNFVjJLWklHS0xFN1JBTlEyVTQyUzZTVkhVNVJKNy9YNlhZVEtJVkRVVzdHWlRaUFpOTjRFVU01S0g1NEtIRi53b2ZmMicpIGZvcm1hdCgnd29mZjInKSwgdXJsKCcvL2Nkbi5mb250c2hhcmUuY29tL3dmL05XQlFZSklNN0dDWjVYV0Q3RDI2QVJCM1ZEWTU1WlJUL0s2M0VWMktaSUdLTEU3UkFOUTJVNDJTNlNWSFU1Uko3L1g2WFlUS0lWRFVXN0daVFpQWk5ONEVVTTVLSDU0S0hGLndvZmYnKSBmb3JtYXQoJ3dvZmYnKSwgdXJsKCcvL2Nkbi5mb250c2hhcmUuY29tL3dmL05XQlFZSklNN0dDWjVYV0Q3RDI2QVJCM1ZEWTU1WlJUL0s2M0VWMktaSUdLTEU3UkFOUTJVNDJTNlNWSFU1Uko3L1g2WFlUS0lWRFVXN0daVFpQWk5ONEVVTTVLSDU0S0hGLnR0ZicpIGZvcm1hdCgndHJ1ZXR5cGUnKTtcbiAgZm9udC13ZWlnaHQ6IDMwMCA5MDA7XG4gIGZvbnQtZGlzcGxheTogc3dhcDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xufVxuQGZvbnQtZmFjZSB7XG4gIGZvbnQtZmFtaWx5OiAnU2F0b3NoaSc7XG4gIHNyYzogdXJsKCcvL2Nkbi5mb250c2hhcmUuY29tL3dmLzNKWklGVVc3S0xGU1BMVkNJVUkyRExHTklFUjZJRkNYL01NUDRSVUY1TFlHVUFaUzNEQ0pDM0dKNkY2U0FHS1NOL0UzTkVQR0VBSFlDSFIzN0RTQlhIVjMzWENZWVJFMkNZLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLCB1cmwoJy8vY2RuLmZvbnRzaGFyZS5jb20vd2YvM0paSUZVVzdLTEZTUExWQ0lVSTJETEdOSUVSNklGQ1gvTU1QNFJVRjVMWUdVQVpTM0RDSkMzR0o2RjZTQUdLU04vRTNORVBHRUFIWUNIUjM3RFNCWEhWMzNYQ1lZUkUyQ1kud29mZicpIGZvcm1hdCgnd29mZicpLCB1cmwoJy8vY2RuLmZvbnRzaGFyZS5jb20vd2YvM0paSUZVVzdLTEZTUExWQ0lVSTJETEdOSUVSNklGQ1gvTU1QNFJVRjVMWUdVQVpTM0RDSkMzR0o2RjZTQUdLU04vRTNORVBHRUFIWUNIUjM3RFNCWEhWMzNYQ1lZUkUyQ1kudHRmJykgZm9ybWF0KCd0cnVldHlwZScpO1xuICBmb250LXdlaWdodDogMzAwIDkwMDtcbiAgZm9udC1kaXNwbGF5OiBzd2FwO1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG59XG46cm9vdCB7XG4gIC0tdGV4dDogI2NkZDZmNDtcbiAgLS1zdXJmYWNlLTI6ICM1ODViNzA7XG4gIC0tc3VyZmFjZS0xOiAjNDU0NzVhO1xuICAtLXN1cmZhY2UtMDogIzMxMzI0NDtcbiAgLS1iYXNlOiAjMWUxZTJlO1xuICAtLW1hbnRsZTogIzE4MTgyNTtcbiAgLS1jcnVzdDogIzExMTExYjtcbn1cbmJvZHksXG5odG1sIHtcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY3J1c3QpO1xuICB3aWR0aDogMTAwdnc7XG4gIGhlaWdodDogMTAwdmg7XG4gIG1hcmdpbjogMTBweDtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgb3ZlcmZsb3c6IGhpZGRlbjtcbn1cbio6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbioge1xuICAtbXMtb3ZlcmZsb3ctc3R5bGU6IG5vbmU7XG4gIHNjcm9sbGJhci13aWR0aDogbm9uZTtcbiAgZm9udC1mYW1pbHk6ICdTYXRvc2hpJywgc2Fucy1zZXJpZjtcbiAgZm9udC13ZWlnaHQ6IDYwMDtcbiAgY29sb3I6IHZhcigtLXRleHQpO1xufVxuLmJ4IHtcbiAgZm9udC1zaXplOiAyNXB4O1xufVxudG9vbGJhciB7XG4gIHdpZHRoOiAxMDAlO1xuICBkaXNwbGF5OiBmbGV4O1xuICBnYXA6IDEwcHg7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xufVxudG9vbGJhciA+IGRpdiB7XG4gIGJhY2tncm91bmQ6IHZhcigtLWJhc2UpO1xuICBwYWRkaW5nOiA1cHg7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgYm94LXNoYWRvdzogMCAxMHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDBweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcbiAgaGVpZ2h0OiA0MHB4IWltcG9ydGFudDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbn1cbnRvb2xiYXIgPiBkaXYgYXBwIHtcbiAgZGlzcGxheTogZmxleDtcbiAgZ2FwOiAxMHB4O1xuICBhbGlnbi1pdGVtczogY2VudGVyO1xufVxudG9vbGJhciA+IGRpdiBhcHAgaW1nIHtcbiAgYXNwZWN0LXJhdGlvOiAxIC8gMTtcbiAgaGVpZ2h0OiAyZW07XG4gIGJvcmRlci1yYWRpdXM6IDQwJTtcbn1cbndpbmRvdy1hcmVhIHtcbiAgcG9zaXRpb246IHJlbGF0aXZlO1xuICB3aWR0aDogY2FsYygxMDAlIC0gNDBweCk7XG4gIG1hcmdpbi1sZWZ0OiAyMHB4O1xuICBtYXJnaW4tYm90dG9tOiAyMHB4O1xuICBoZWlnaHQ6IDEwMCU7XG4gIG92ZXJmbG93OiBoaWRkZW47XG59XG53aW5kb3ctYXJlYSB3aW5kb3cge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1iYXNlKTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xuICBib3gtc2hhZG93OiAwIDEwcHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgMHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XG4gIGJhY2tncm91bmQ6IHZhcigtLWNydXN0KTtcbn1cbndpbmRvdy1hcmVhIHdpbmRvdyB3aW5kb3ctaGVhZGVyIHtcbiAgaGVpZ2h0OiAyMHB4O1xuICBwYWRkaW5nOiA3LjVweDtcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgZ2FwOiA3LjVweDtcbn1cbndpbmRvdy1hcmVhIHdpbmRvdyB3aW5kb3ctaGVhZGVyIGltZyB7XG4gIGFzcGVjdC1yYXRpbzogMSAvIDE7XG4gIGhlaWdodDogMS4yZW07XG4gIGJvcmRlci1yYWRpdXM6IDQwJTtcbn1cbndpbmRvdy1hcmVhIHdpbmRvdyB3aW5kb3ctY29udGVudCB7XG4gIGhlaWdodDogMTAwJTtcbiAgYm9yZGVyLXJhZGl1czogMTBweCAxMHB4IDAgMDtcbiAgYmFja2dyb3VuZDogdmFyKC0tbWFudGxlKTtcbiAgb3ZlcmZsb3c6IHNjcm9sbDtcbn1cbndpbmRvdy1hcmVhIHdpbmRvdyB3aW5kb3ctY29udGVudCBoMSB7XG4gIG1hcmdpbi10b3A6IDA7XG59XG5sYXVuY2hlciB7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG4gIHRvcDogMDtcbiAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjUpO1xuICB6LWluZGV4OiA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTtcbiAgd2lkdGg6IDEwMHZ3O1xuICBoZWlnaHQ6IGNhbGMoMTAwdmggKyAyMHB4KTtcbiAgZ2FwOiAyMHB4O1xuICB0cmFuc2l0aW9uOiAwLjJzIG9wYWNpdHksIDAuMnMgYmFja2Ryb3AtZmlsdGVyO1xufVxubGF1bmNoZXIgYXBwcyB7XG4gIG1heC1oZWlnaHQ6IDcwdmg7XG4gIHBhZGRpbmc6IDIwcHg7XG4gIG1hcmdpbjogNDBweDtcbiAgZGlzcGxheTogZmxleDtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIGdhcDogNDBweDtcbiAgZmxleC13cmFwOiB3cmFwO1xufVxubGF1bmNoZXIgYXBwcyBhcHAge1xuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgZGlzcGxheTogZmxleDtcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcbiAgZ2FwOiAxMHB4O1xuICBoZWlnaHQ6IG1heC1jb250ZW50O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG5sYXVuY2hlciBhcHBzIGFwcCBpbWcge1xuICB3aWR0aDogMTAwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDQwJTtcbiAgYXNwZWN0LXJhdGlvOiAxIC8gMTtcbn1cbmxhdW5jaGVyIGlucHV0IHtcbiAgYmFja2dyb3VuZDogdmFyKC0tbWFudGxlKTtcbiAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tY3J1c3QpO1xuICBib3JkZXItcmFkaXVzOiAxMHB4O1xuICBwYWRkaW5nOiAxMHB4O1xuICB3aWR0aDogMzAwcHg7XG4gIG1heC13aWR0aDogMTAwdnc7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdHJhbnNpdGlvbjogYm9yZGVyIDAuMnM7XG59XG5sYXVuY2hlciBpbnB1dDpmb2N1cyB7XG4gIG91dGxpbmU6IG5vbmU7XG4gIGJvcmRlcjogMnB4IHNvbGlkIHZhcigtLXRleHQpO1xufVxuLmFjZV9lZGl0b3IgKiB7XG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XG59XG4uYWNlLW1vbm9rYWkgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGluZSB7XG4gIGJhY2tncm91bmQ6IHZhcigtLW1hbnRsZSkgIWltcG9ydGFudDtcbn1cbi5hY2VfbGF5ZXIuYWNlX2d1dHRlci1sYXllci5hY2VfZm9sZGluZy1lbmFibGVkIHtcbiAgYmFja2dyb3VuZDogdmFyKC0tbWFudGxlKSAhaW1wb3J0YW50O1xufVxuLmFjZV9jb250ZW50IHtcbiAgYmFja2dyb3VuZDogdmFyKC0tYmFzZSkgIWltcG9ydGFudDtcbn1cbi5hY2VfZ3V0dGVyLWNlbGwuYWNlX2luZm8ge1xuICBiYWNrZ3JvdW5kOiB2YXIoLS1jcnVzdCkgIWltcG9ydGFudDtcbn1cbi5hY2UtbW9ub2thaSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XG4gIGJhY2tncm91bmQ6IHZhcigtLXN1cmZhY2UtMCkgIWltcG9ydGFudDtcbn1cbmAsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL3N0eWxlLmxlc3NcIixcImh0dHBzOlxcXFxhcGkuZm9udHNoYXJlLmNvbVxcXFx2MlxcXFxjc3M/ZltdPXNhdG9zaGlAMSwyJmRpc3BsYXk9c3dhcFwiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFDQSxZQUFZO0FDQVo7RUFDRSxzQkFBQTtFQUNBLDBjQUFBO0VBR0Esb0JBQUE7RUFDQSxrQkFBQTtFQUNBLGtCQUFBO0FEQUY7QUNHQTtFQUNFLHNCQUFBO0VBQ0EsMGNBQUE7RUFHQSxvQkFBQTtFQUNBLGtCQUFBO0VBQ0Esa0JBQUE7QURIRjtBQVpBO0VBQ0UsZUFBQTtFQUNBLG9CQUFBO0VBQ0Esb0JBQUE7RUFDQSxvQkFBQTtFQUNBLGVBQUE7RUFDQSxpQkFBQTtFQUNBLGdCQUFBO0FBY0Y7QUFYQTs7RUFDRSw4QkFBQTtFQUVBLFlBQUE7RUFDQSxhQUFBO0VBRUEsWUFBQTtFQUVBLGFBQUE7RUFDQSxzQkFBQTtFQUVBLGdCQUFBO0FBVUY7QUFOQTtFQUNFLGFBQUE7QUFRRjtBQUxBO0VBQ0Usd0JBQUE7RUFDQSxxQkFBQTtFQUVBLGtDQUFBO0VBQ0EsZ0JBQUE7RUFFQSxrQkFBQTtBQUtGO0FBSEE7RUFDRSxlQUFBO0FBS0Y7QUFGQTtFQUNFLFdBQUE7RUFDQSxhQUFBO0VBQ0EsU0FBQTtFQUNBLG1CQUFBO0VBQ0EsdUJBQUE7QUFJRjtBQUZFO0VBQ0UsdUJBQUE7RUFDQSxZQUFBO0VBQ0Esa0JBQUE7RUFDQSx5RUFBQTtFQUNBLHNCQUFBO0VBQ0EsYUFBQTtFQUNBLG1CQUFBO0FBSUo7QUFYRTtFQVVJLGFBQUE7RUFDQSxTQUFBO0VBQ0EsbUJBQUE7QUFJTjtBQWhCRTtFQWVNLG1CQUFBO0VBQ0EsV0FBQTtFQUNBLGtCQUFBO0FBSVI7QUFFQTtFQUNFLGtCQUFBO0VBQ0Esd0JBQUE7RUFDQSxpQkFBQTtFQUNBLG1CQUFBO0VBQ0EsWUFBQTtFQUNBLGdCQUFBO0FBQUY7QUFOQTtFQVNJLHVCQUFBO0VBQ0EsYUFBQTtFQUNBLHNCQUFBO0VBQ0Esa0JBQUE7RUFDQSx5RUFBQTtFQUNBLGdCQUFBO0VBQ0EsMENBQUE7RUFDQSx3QkFBQTtBQUFKO0FBaEJBO0VBbUJNLFlBQUE7RUFDQSxjQUFBO0VBQ0EsYUFBQTtFQUNBLG1CQUFBO0VBQ0EsVUFBQTtBQUFOO0FBdkJBO0VBMEJRLG1CQUFBO0VBQ0EsYUFBQTtFQUNBLGtCQUFBO0FBQVI7QUE1QkE7RUFpQ00sWUFBQTtFQUNBLDRCQUFBO0VBQ0EseUJBQUE7RUFDQSxnQkFBQTtBQUZOO0FBbENBO0VBdUNRLGFBQUE7QUFGUjtBQVFBO0VBQ0Usa0JBQUE7RUFDQSxhQUFBO0VBQ0Esc0JBQUE7RUFDQSx1QkFBQTtFQUNBLG1CQUFBO0VBQ0EsTUFBQTtFQUNBLDhCQUFBO0VBQ0EsZ0NBQUE7RUFDQSxZQUFBO0VBQ0EsMEJBQUE7RUFDQSxTQUFBO0VBQ0EsOENBQUE7QUFORjtBQU5BO0VBZUksZ0JBQUE7RUFDQSxhQUFBO0VBQ0EsWUFBQTtFQUNBLGFBQUE7RUFDQSx1QkFBQTtFQUNBLFNBQUE7RUFDQSxlQUFBO0FBTko7QUFmQTtFQXdCTSx1QkFBQTtFQUNBLGFBQUE7RUFDQSxzQkFBQTtFQUNBLFNBQUE7RUFDQSxtQkFBQTtFQUNBLGtCQUFBO0FBTk47QUF2QkE7RUFnQ1EsWUFBQTtFQUNBLGtCQUFBO0VBQ0EsbUJBQUE7QUFOUjtBQTVCQTtFQXdDSSx5QkFBQTtFQUNBLDhCQUFBO0VBQ0EsbUJBQUE7RUFDQSxhQUFBO0VBQ0EsWUFBQTtFQUNBLGdCQUFBO0VBQ0Esa0JBQUE7RUFDQSx1QkFBQTtBQVRKO0FBV0k7RUFDRSxhQUFBO0VBQ0EsNkJBQUE7QUFUTjtBQWNBO0VBQ0Usc0JBQUE7QUFaRjtBQWVBO0VBQ0Usb0NBQUE7QUFiRjtBQWdCQTtFQUNFLG9DQUFBO0FBZEY7QUFpQkE7RUFDRSxrQ0FBQTtBQWZGO0FBa0JBO0VBQ0UsbUNBQUE7QUFoQkY7QUFtQkE7RUFDRSx1Q0FBQTtBQWpCRlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCJAaW1wb3J0IHVybChodHRwczovL3VucGtnLmNvbS9ib3hpY29uc0AyLjEuNC9jc3MvYm94aWNvbnMubWluLmNzcyk7XFxuQGltcG9ydCB1cmwoaHR0cHM6Ly9hcGkuZm9udHNoYXJlLmNvbS92Mi9jc3M/ZltdPXNhdG9zaGlAMSwyJmRpc3BsYXk9c3dhcCk7XFxuXFxuOnJvb3Qge1xcbiAgLS10ZXh0OiAjY2RkNmY0O1xcbiAgLS1zdXJmYWNlLTI6ICM1ODViNzA7XFxuICAtLXN1cmZhY2UtMTogIzQ1NDc1YTtcXG4gIC0tc3VyZmFjZS0wOiAjMzEzMjQ0O1xcbiAgLS1iYXNlOiAjMWUxZTJlO1xcbiAgLS1tYW50bGU6ICMxODE4MjU7XFxuICAtLWNydXN0OiAjMTExMTFiO1xcbn1cXG5cXG5ib2R5LCBodG1sIHtcXG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWNydXN0KTtcXG5cXG4gIHdpZHRoOiAxMDB2dztcXG4gIGhlaWdodDogMTAwdmg7XFxuXFxuICBtYXJnaW46IDEwcHg7XFxuXFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG5cXG4gIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcblxcbio6Oi13ZWJraXQtc2Nyb2xsYmFyIHtcXG4gIGRpc3BsYXk6IG5vbmU7XFxufVxcblxcbioge1xcbiAgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lO1xcbiAgc2Nyb2xsYmFyLXdpZHRoOiBub25lO1xcblxcbiAgZm9udC1mYW1pbHk6ICdTYXRvc2hpJywgc2Fucy1zZXJpZjtcXG4gIGZvbnQtd2VpZ2h0OiA2MDA7XFxuXFxuICBjb2xvcjogdmFyKC0tdGV4dCk7XFxufVxcbi5ieCB7XFxuICBmb250LXNpemU6IDI1cHg7XFxufVxcblxcbnRvb2xiYXIge1xcbiAgd2lkdGg6IDEwMCU7XFxuICBkaXNwbGF5OiBmbGV4O1xcbiAgZ2FwOiAxMHB4O1xcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcXG4gIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcblxcbiAgJiA+IGRpdiB7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWJhc2UpO1xcbiAgICBwYWRkaW5nOiA1cHg7XFxuICAgIGJvcmRlci1yYWRpdXM6IDVweDtcXG4gICAgYm94LXNoYWRvdzogMCAxMHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDBweCAxMHB4IHJnYmEoMCwgMCwgMCwgMC4xKTtcXG4gICAgaGVpZ2h0OiA0MHB4IWltcG9ydGFudDtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG5cXG4gICAgYXBwIHtcXG4gICAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICAgIGdhcDogMTBweDtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcblxcbiAgICAgIGltZyB7XFxuICAgICAgICBhc3BlY3QtcmF0aW86IDEgLyAxO1xcbiAgICAgICAgaGVpZ2h0OiAyZW07XFxuICAgICAgICBib3JkZXItcmFkaXVzOiA0MCU7XFxuICAgICAgfVxcbiAgICB9XFxuICB9XFxufVxcblxcbndpbmRvdy1hcmVhIHtcXG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcXG4gIHdpZHRoOiBjYWxjKDEwMCUgLSA0MHB4KTtcXG4gIG1hcmdpbi1sZWZ0OiAyMHB4O1xcbiAgbWFyZ2luLWJvdHRvbTogMjBweDtcXG4gIGhlaWdodDogMTAwJTtcXG4gIG92ZXJmbG93OiBoaWRkZW47XFxuXFxuICB3aW5kb3cge1xcbiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iYXNlKTtcXG4gICAgZGlzcGxheTogZmxleDtcXG4gICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG4gICAgYm9yZGVyLXJhZGl1czogNXB4O1xcbiAgICBib3gtc2hhZG93OiAwIDEwcHggMTBweCByZ2JhKDAsIDAsIDAsIDAuMiksIDAgMHB4IDEwcHggcmdiYSgwLCAwLCAwLCAwLjIpO1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7XFxuICAgIGJhY2tncm91bmQ6IHZhcigtLWNydXN0KTtcXG4gIFxcbiAgICB3aW5kb3ctaGVhZGVyIHtcXG4gICAgICBoZWlnaHQ6IDIwcHg7XFxuICAgICAgcGFkZGluZzogNy41cHg7XFxuICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICAgIGdhcDogNy41cHg7XFxuXFxuICAgICAgaW1nIHtcXG4gICAgICAgIGFzcGVjdC1yYXRpbzogMSAvIDE7XFxuICAgICAgICBoZWlnaHQ6IDEuMmVtO1xcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNDAlO1xcbiAgICAgIH1cXG4gICAgfVxcbiAgXFxuICAgIHdpbmRvdy1jb250ZW50IHtcXG4gICAgICBoZWlnaHQ6IDEwMCU7XFxuICAgICAgYm9yZGVyLXJhZGl1czogMTBweCAxMHB4IDAgMDtcXG4gICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1tYW50bGUpO1xcbiAgICAgIG92ZXJmbG93OiBzY3JvbGw7XFxuXFxuICAgICAgaDEge1xcbiAgICAgICAgbWFyZ2luLXRvcDogMDtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG59XFxuXFxubGF1bmNoZXIge1xcbiAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgZGlzcGxheTogZmxleDtcXG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICB0b3A6IDA7XFxuICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNSk7XFxuICB6LWluZGV4OiA5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTtcXG4gIHdpZHRoOiAxMDB2dztcXG4gIGhlaWdodDogY2FsYygxMDB2aCArIDIwcHgpO1xcbiAgZ2FwOiAyMHB4O1xcbiAgdHJhbnNpdGlvbjogLjJzIG9wYWNpdHksIC4ycyBiYWNrZHJvcC1maWx0ZXI7XFxuXFxuICBhcHBzIHtcXG4gICAgbWF4LWhlaWdodDogNzB2aDtcXG4gICAgcGFkZGluZzogMjBweDtcXG4gICAgbWFyZ2luOiA0MHB4O1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgZ2FwOiA0MHB4O1xcbiAgICBmbGV4LXdyYXA6IHdyYXA7XFxuXFxuICAgIGFwcCB7XFxuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcbiAgICAgIGdhcDogMTBweDtcXG4gICAgICBoZWlnaHQ6IG1heC1jb250ZW50O1xcbiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG5cXG4gICAgICBpbWcge1xcbiAgICAgICAgd2lkdGg6IDEwMHB4O1xcbiAgICAgICAgYm9yZGVyLXJhZGl1czogNDAlO1xcbiAgICAgICAgYXNwZWN0LXJhdGlvOiAxIC8gMTtcXG4gICAgICB9XFxuICAgIH1cXG4gIH1cXG5cXG4gIGlucHV0IHtcXG4gICAgYmFja2dyb3VuZDogdmFyKC0tbWFudGxlKTtcXG4gICAgYm9yZGVyOiAycHggc29saWQgdmFyKC0tY3J1c3QpO1xcbiAgICBib3JkZXItcmFkaXVzOiAxMHB4O1xcbiAgICBwYWRkaW5nOiAxMHB4O1xcbiAgICB3aWR0aDogMzAwcHg7XFxuICAgIG1heC13aWR0aDogMTAwdnc7XFxuICAgIHRleHQtYWxpZ246IGNlbnRlcjtcXG4gICAgdHJhbnNpdGlvbjogYm9yZGVyIC4ycztcXG5cXG4gICAgJjpmb2N1cyB7XFxuICAgICAgb3V0bGluZTogbm9uZTtcXG4gICAgICBib3JkZXI6IDJweCBzb2xpZCB2YXIoLS10ZXh0KTtcXG4gICAgfVxcbiAgfVxcbn1cXG5cXG4uYWNlX2VkaXRvciAqIHtcXG4gIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7XFxufVxcblxcbi5hY2UtbW9ub2thaSAuYWNlX21hcmtlci1sYXllciAuYWNlX2FjdGl2ZS1saW5lIHtcXG4gIGJhY2tncm91bmQ6IHZhcigtLW1hbnRsZSkhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWNlX2xheWVyLmFjZV9ndXR0ZXItbGF5ZXIuYWNlX2ZvbGRpbmctZW5hYmxlZCB7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1tYW50bGUpIWltcG9ydGFudDtcXG59XFxuXFxuLmFjZV9jb250ZW50IHtcXG4gIGJhY2tncm91bmQ6IHZhcigtLWJhc2UpIWltcG9ydGFudDtcXG59XFxuXFxuLmFjZV9ndXR0ZXItY2VsbC5hY2VfaW5mbyB7XFxuICBiYWNrZ3JvdW5kOiB2YXIoLS1jcnVzdCkhaW1wb3J0YW50O1xcbn1cXG5cXG4uYWNlLW1vbm9rYWkgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9zZWxlY3Rpb24ge1xcbiAgYmFja2dyb3VuZDogdmFyKC0tc3VyZmFjZS0wKSFpbXBvcnRhbnQ7XFxufVwiLFwiLyogU2F0b3NoaSAqL1xcbkBmb250LWZhY2Uge1xcbiAgZm9udC1mYW1pbHk6ICdTYXRvc2hpJztcXG4gIHNyYzogdXJsKCcvL2Nkbi5mb250c2hhcmUuY29tL3dmL05XQlFZSklNN0dDWjVYV0Q3RDI2QVJCM1ZEWTU1WlJUL0s2M0VWMktaSUdLTEU3UkFOUTJVNDJTNlNWSFU1Uko3L1g2WFlUS0lWRFVXN0daVFpQWk5ONEVVTTVLSDU0S0hGLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxcbiAgICAgICB1cmwoJy8vY2RuLmZvbnRzaGFyZS5jb20vd2YvTldCUVlKSU03R0NaNVhXRDdEMjZBUkIzVkRZNTVaUlQvSzYzRVYyS1pJR0tMRTdSQU5RMlU0MlM2U1ZIVTVSSjcvWDZYWVRLSVZEVVc3R1pUWlBaTk40RVVNNUtINTRLSEYud29mZicpIGZvcm1hdCgnd29mZicpLFxcbiAgICAgICB1cmwoJy8vY2RuLmZvbnRzaGFyZS5jb20vd2YvTldCUVlKSU03R0NaNVhXRDdEMjZBUkIzVkRZNTVaUlQvSzYzRVYyS1pJR0tMRTdSQU5RMlU0MlM2U1ZIVTVSSjcvWDZYWVRLSVZEVVc3R1pUWlBaTk40RVVNNUtINTRLSEYudHRmJykgZm9ybWF0KCd0cnVldHlwZScpO1xcbiAgZm9udC13ZWlnaHQ6IDMwMCA5MDA7XFxuICBmb250LWRpc3BsYXk6IHN3YXA7XFxuICBmb250LXN0eWxlOiBub3JtYWw7XFxufVxcblxcbkBmb250LWZhY2Uge1xcbiAgZm9udC1mYW1pbHk6ICdTYXRvc2hpJztcXG4gIHNyYzogdXJsKCcvL2Nkbi5mb250c2hhcmUuY29tL3dmLzNKWklGVVc3S0xGU1BMVkNJVUkyRExHTklFUjZJRkNYL01NUDRSVUY1TFlHVUFaUzNEQ0pDM0dKNkY2U0FHS1NOL0UzTkVQR0VBSFlDSFIzN0RTQlhIVjMzWENZWVJFMkNZLndvZmYyJykgZm9ybWF0KCd3b2ZmMicpLFxcbiAgICAgICB1cmwoJy8vY2RuLmZvbnRzaGFyZS5jb20vd2YvM0paSUZVVzdLTEZTUExWQ0lVSTJETEdOSUVSNklGQ1gvTU1QNFJVRjVMWUdVQVpTM0RDSkMzR0o2RjZTQUdLU04vRTNORVBHRUFIWUNIUjM3RFNCWEhWMzNYQ1lZUkUyQ1kud29mZicpIGZvcm1hdCgnd29mZicpLFxcbiAgICAgICB1cmwoJy8vY2RuLmZvbnRzaGFyZS5jb20vd2YvM0paSUZVVzdLTEZTUExWQ0lVSTJETEdOSUVSNklGQ1gvTU1QNFJVRjVMWUdVQVpTM0RDSkMzR0o2RjZTQUdLU04vRTNORVBHRUFIWUNIUjM3RFNCWEhWMzNYQ1lZUkUyQ1kudHRmJykgZm9ybWF0KCd0cnVldHlwZScpO1xcbiAgZm9udC13ZWlnaHQ6IDMwMCA5MDA7XFxuICBmb250LWRpc3BsYXk6IHN3YXA7XFxuICBmb250LXN0eWxlOiBpdGFsaWM7XFxufVxcblxcblwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBLRVlXT1JEUyA9IHJlcXVpcmUoJy4va2V5d29yZHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVLZXl3b3JkcztcblxuXG4vKipcbiAqIERlZmluZXMgb25lIG9yIHNldmVyYWwga2V5d29yZHMgaW4gYWp2IGluc3RhbmNlXG4gKiBAcGFyYW0gIHtBanZ9IGFqdiB2YWxpZGF0b3IgaW5zdGFuY2VcbiAqIEBwYXJhbSAge1N0cmluZ3xBcnJheTxTdHJpbmc+fHVuZGVmaW5lZH0ga2V5d29yZCBrZXl3b3JkKHMpIHRvIGRlZmluZVxuICogQHJldHVybiB7QWp2fSBhanYgaW5zdGFuY2UgKGZvciBjaGFpbmluZylcbiAqL1xuZnVuY3Rpb24gZGVmaW5lS2V5d29yZHMoYWp2LCBrZXl3b3JkKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGtleXdvcmQpKSB7XG4gICAgZm9yICh2YXIgaT0wOyBpPGtleXdvcmQubGVuZ3RoOyBpKyspXG4gICAgICBnZXQoa2V5d29yZFtpXSkoYWp2KTtcbiAgICByZXR1cm4gYWp2O1xuICB9XG4gIGlmIChrZXl3b3JkKSB7XG4gICAgZ2V0KGtleXdvcmQpKGFqdik7XG4gICAgcmV0dXJuIGFqdjtcbiAgfVxuICBmb3IgKGtleXdvcmQgaW4gS0VZV09SRFMpIGdldChrZXl3b3JkKShhanYpO1xuICByZXR1cm4gYWp2O1xufVxuXG5cbmRlZmluZUtleXdvcmRzLmdldCA9IGdldDtcblxuZnVuY3Rpb24gZ2V0KGtleXdvcmQpIHtcbiAgdmFyIGRlZkZ1bmMgPSBLRVlXT1JEU1trZXl3b3JkXTtcbiAgaWYgKCFkZWZGdW5jKSB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24ga2V5d29yZCAnICsga2V5d29yZCk7XG4gIHJldHVybiBkZWZGdW5jO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVElNRSA9IC9eKFxcZFxcZCk6KFxcZFxcZCk6KFxcZFxcZCkoXFwuXFxkKyk/KHp8WystXVxcZFxcZDpcXGRcXGQpPyQvaTtcbnZhciBEQVRFX1RJTUVfU0VQQVJBVE9SID0gL3R8XFxzL2k7XG5cbnZhciBDT01QQVJFX0ZPUk1BVFMgPSB7XG4gIGRhdGU6IGNvbXBhcmVEYXRlLFxuICB0aW1lOiBjb21wYXJlVGltZSxcbiAgJ2RhdGUtdGltZSc6IGNvbXBhcmVEYXRlVGltZVxufTtcblxudmFyICRkYXRhTWV0YVNjaGVtYSA9IHtcbiAgdHlwZTogJ29iamVjdCcsXG4gIHJlcXVpcmVkOiBbICckZGF0YScgXSxcbiAgcHJvcGVydGllczoge1xuICAgICRkYXRhOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgIGFueU9mOiBbXG4gICAgICAgIHsgZm9ybWF0OiAncmVsYXRpdmUtanNvbi1wb2ludGVyJyB9LFxuICAgICAgICB7IGZvcm1hdDogJ2pzb24tcG9pbnRlcicgfVxuICAgICAgXVxuICAgIH1cbiAgfSxcbiAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlXG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtaW5NYXgpIHtcbiAgdmFyIGtleXdvcmQgPSAnZm9ybWF0JyArIG1pbk1heDtcbiAgcmV0dXJuIGZ1bmN0aW9uIGRlZkZ1bmMoYWp2KSB7XG4gICAgZGVmRnVuYy5kZWZpbml0aW9uID0ge1xuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICBpbmxpbmU6IHJlcXVpcmUoJy4vZG90anMvX2Zvcm1hdExpbWl0JyksXG4gICAgICBzdGF0ZW1lbnRzOiB0cnVlLFxuICAgICAgZXJyb3JzOiAnZnVsbCcsXG4gICAgICBkZXBlbmRlbmNpZXM6IFsnZm9ybWF0J10sXG4gICAgICBtZXRhU2NoZW1hOiB7XG4gICAgICAgIGFueU9mOiBbXG4gICAgICAgICAge3R5cGU6ICdzdHJpbmcnfSxcbiAgICAgICAgICAkZGF0YU1ldGFTY2hlbWFcbiAgICAgICAgXVxuICAgICAgfVxuICAgIH07XG5cbiAgICBhanYuYWRkS2V5d29yZChrZXl3b3JkLCBkZWZGdW5jLmRlZmluaXRpb24pO1xuICAgIGFqdi5hZGRLZXl3b3JkKCdmb3JtYXRFeGNsdXNpdmUnICsgbWluTWF4LCB7XG4gICAgICBkZXBlbmRlbmNpZXM6IFsnZm9ybWF0JyArIG1pbk1heF0sXG4gICAgICBtZXRhU2NoZW1hOiB7XG4gICAgICAgIGFueU9mOiBbXG4gICAgICAgICAge3R5cGU6ICdib29sZWFuJ30sXG4gICAgICAgICAgJGRhdGFNZXRhU2NoZW1hXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBleHRlbmRGb3JtYXRzKGFqdik7XG4gICAgcmV0dXJuIGFqdjtcbiAgfTtcbn07XG5cblxuZnVuY3Rpb24gZXh0ZW5kRm9ybWF0cyhhanYpIHtcbiAgdmFyIGZvcm1hdHMgPSBhanYuX2Zvcm1hdHM7XG4gIGZvciAodmFyIG5hbWUgaW4gQ09NUEFSRV9GT1JNQVRTKSB7XG4gICAgdmFyIGZvcm1hdCA9IGZvcm1hdHNbbmFtZV07XG4gICAgLy8gdGhlIGxhc3QgY29uZGl0aW9uIGlzIG5lZWRlZCBpZiBpdCdzIFJlZ0V4cCBmcm9tIGFub3RoZXIgd2luZG93XG4gICAgaWYgKHR5cGVvZiBmb3JtYXQgIT0gJ29iamVjdCcgfHwgZm9ybWF0IGluc3RhbmNlb2YgUmVnRXhwIHx8ICFmb3JtYXQudmFsaWRhdGUpXG4gICAgICBmb3JtYXQgPSBmb3JtYXRzW25hbWVdID0geyB2YWxpZGF0ZTogZm9ybWF0IH07XG4gICAgaWYgKCFmb3JtYXQuY29tcGFyZSlcbiAgICAgIGZvcm1hdC5jb21wYXJlID0gQ09NUEFSRV9GT1JNQVRTW25hbWVdO1xuICB9XG59XG5cblxuZnVuY3Rpb24gY29tcGFyZURhdGUoZDEsIGQyKSB7XG4gIGlmICghKGQxICYmIGQyKSkgcmV0dXJuO1xuICBpZiAoZDEgPiBkMikgcmV0dXJuIDE7XG4gIGlmIChkMSA8IGQyKSByZXR1cm4gLTE7XG4gIGlmIChkMSA9PT0gZDIpIHJldHVybiAwO1xufVxuXG5cbmZ1bmN0aW9uIGNvbXBhcmVUaW1lKHQxLCB0Mikge1xuICBpZiAoISh0MSAmJiB0MikpIHJldHVybjtcbiAgdDEgPSB0MS5tYXRjaChUSU1FKTtcbiAgdDIgPSB0Mi5tYXRjaChUSU1FKTtcbiAgaWYgKCEodDEgJiYgdDIpKSByZXR1cm47XG4gIHQxID0gdDFbMV0gKyB0MVsyXSArIHQxWzNdICsgKHQxWzRdfHwnJyk7XG4gIHQyID0gdDJbMV0gKyB0MlsyXSArIHQyWzNdICsgKHQyWzRdfHwnJyk7XG4gIGlmICh0MSA+IHQyKSByZXR1cm4gMTtcbiAgaWYgKHQxIDwgdDIpIHJldHVybiAtMTtcbiAgaWYgKHQxID09PSB0MikgcmV0dXJuIDA7XG59XG5cblxuZnVuY3Rpb24gY29tcGFyZURhdGVUaW1lKGR0MSwgZHQyKSB7XG4gIGlmICghKGR0MSAmJiBkdDIpKSByZXR1cm47XG4gIGR0MSA9IGR0MS5zcGxpdChEQVRFX1RJTUVfU0VQQVJBVE9SKTtcbiAgZHQyID0gZHQyLnNwbGl0KERBVEVfVElNRV9TRVBBUkFUT1IpO1xuICB2YXIgcmVzID0gY29tcGFyZURhdGUoZHQxWzBdLCBkdDJbMF0pO1xuICBpZiAocmVzID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgcmV0dXJuIHJlcyB8fCBjb21wYXJlVGltZShkdDFbMV0sIGR0MlsxXSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtZXRhU2NoZW1hUmVmOiBtZXRhU2NoZW1hUmVmXG59O1xuXG52YXIgTUVUQV9TQ0hFTUFfSUQgPSAnaHR0cDovL2pzb24tc2NoZW1hLm9yZy9kcmFmdC0wNy9zY2hlbWEnO1xuXG5mdW5jdGlvbiBtZXRhU2NoZW1hUmVmKGFqdikge1xuICB2YXIgZGVmYXVsdE1ldGEgPSBhanYuX29wdHMuZGVmYXVsdE1ldGE7XG4gIGlmICh0eXBlb2YgZGVmYXVsdE1ldGEgPT0gJ3N0cmluZycpIHJldHVybiB7ICRyZWY6IGRlZmF1bHRNZXRhIH07XG4gIGlmIChhanYuZ2V0U2NoZW1hKE1FVEFfU0NIRU1BX0lEKSkgcmV0dXJuIHsgJHJlZjogTUVUQV9TQ0hFTUFfSUQgfTtcbiAgY29uc29sZS53YXJuKCdtZXRhIHNjaGVtYSBub3QgZGVmaW5lZCcpO1xuICByZXR1cm4ge307XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmRnVuYyhhanYpIHtcbiAgZGVmRnVuYy5kZWZpbml0aW9uID0ge1xuICAgIHR5cGU6ICdvYmplY3QnLFxuICAgIG1hY3JvOiBmdW5jdGlvbiAoc2NoZW1hLCBwYXJlbnRTY2hlbWEpIHtcbiAgICAgIGlmICghc2NoZW1hKSByZXR1cm4gdHJ1ZTtcbiAgICAgIHZhciBwcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMocGFyZW50U2NoZW1hLnByb3BlcnRpZXMpO1xuICAgICAgaWYgKHByb3BlcnRpZXMubGVuZ3RoID09IDApIHJldHVybiB0cnVlO1xuICAgICAgcmV0dXJuIHtyZXF1aXJlZDogcHJvcGVydGllc307XG4gICAgfSxcbiAgICBtZXRhU2NoZW1hOiB7dHlwZTogJ2Jvb2xlYW4nfSxcbiAgICBkZXBlbmRlbmNpZXM6IFsncHJvcGVydGllcyddXG4gIH07XG5cbiAgYWp2LmFkZEtleXdvcmQoJ2FsbFJlcXVpcmVkJywgZGVmRnVuYy5kZWZpbml0aW9uKTtcbiAgcmV0dXJuIGFqdjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmRnVuYyhhanYpIHtcbiAgZGVmRnVuYy5kZWZpbml0aW9uID0ge1xuICAgIHR5cGU6ICdvYmplY3QnLFxuICAgIG1hY3JvOiBmdW5jdGlvbiAoc2NoZW1hKSB7XG4gICAgICBpZiAoc2NoZW1hLmxlbmd0aCA9PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChzY2hlbWEubGVuZ3RoID09IDEpIHJldHVybiB7cmVxdWlyZWQ6IHNjaGVtYX07XG4gICAgICB2YXIgc2NoZW1hcyA9IHNjaGVtYS5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgcmV0dXJuIHtyZXF1aXJlZDogW3Byb3BdfTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHthbnlPZjogc2NoZW1hc307XG4gICAgfSxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgaXRlbXM6IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZydcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgYWp2LmFkZEtleXdvcmQoJ2FueVJlcXVpcmVkJywgZGVmRnVuYy5kZWZpbml0aW9uKTtcbiAgcmV0dXJuIGFqdjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlsID0gcmVxdWlyZSgnLi9fdXRpbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZkZ1bmMoYWp2KSB7XG4gIGRlZkZ1bmMuZGVmaW5pdGlvbiA9IHtcbiAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICBtYWNybzogZnVuY3Rpb24gKHNjaGVtYSkge1xuICAgICAgdmFyIHNjaGVtYXMgPSBbXTtcbiAgICAgIGZvciAodmFyIHBvaW50ZXIgaW4gc2NoZW1hKVxuICAgICAgICBzY2hlbWFzLnB1c2goZ2V0U2NoZW1hKHBvaW50ZXIsIHNjaGVtYVtwb2ludGVyXSkpO1xuICAgICAgcmV0dXJuIHsnYWxsT2YnOiBzY2hlbWFzfTtcbiAgICB9LFxuICAgIG1ldGFTY2hlbWE6IHtcbiAgICAgIHR5cGU6ICdvYmplY3QnLFxuICAgICAgcHJvcGVydHlOYW1lczoge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZm9ybWF0OiAnanNvbi1wb2ludGVyJ1xuICAgICAgfSxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB1dGlsLm1ldGFTY2hlbWFSZWYoYWp2KVxuICAgIH1cbiAgfTtcblxuICBhanYuYWRkS2V5d29yZCgnZGVlcFByb3BlcnRpZXMnLCBkZWZGdW5jLmRlZmluaXRpb24pO1xuICByZXR1cm4gYWp2O1xufTtcblxuXG5mdW5jdGlvbiBnZXRTY2hlbWEoanNvblBvaW50ZXIsIHNjaGVtYSkge1xuICB2YXIgc2VnbWVudHMgPSBqc29uUG9pbnRlci5zcGxpdCgnLycpO1xuICB2YXIgcm9vdFNjaGVtYSA9IHt9O1xuICB2YXIgcG9pbnRlclNjaGVtYSA9IHJvb3RTY2hlbWE7XG4gIGZvciAodmFyIGk9MTsgaTxzZWdtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBzZWdtZW50ID0gc2VnbWVudHNbaV07XG4gICAgdmFyIGlzTGFzdCA9IGkgPT0gc2VnbWVudHMubGVuZ3RoIC0gMTtcbiAgICBzZWdtZW50ID0gdW5lc2NhcGVKc29uUG9pbnRlcihzZWdtZW50KTtcbiAgICB2YXIgcHJvcGVydGllcyA9IHBvaW50ZXJTY2hlbWEucHJvcGVydGllcyA9IHt9O1xuICAgIHZhciBpdGVtcyA9IHVuZGVmaW5lZDtcbiAgICBpZiAoL1swLTldKy8udGVzdChzZWdtZW50KSkge1xuICAgICAgdmFyIGNvdW50ID0gK3NlZ21lbnQ7XG4gICAgICBpdGVtcyA9IHBvaW50ZXJTY2hlbWEuaXRlbXMgPSBbXTtcbiAgICAgIHdoaWxlIChjb3VudC0tKSBpdGVtcy5wdXNoKHt9KTtcbiAgICB9XG4gICAgcG9pbnRlclNjaGVtYSA9IGlzTGFzdCA/IHNjaGVtYSA6IHt9O1xuICAgIHByb3BlcnRpZXNbc2VnbWVudF0gPSBwb2ludGVyU2NoZW1hO1xuICAgIGlmIChpdGVtcykgaXRlbXMucHVzaChwb2ludGVyU2NoZW1hKTtcbiAgfVxuICByZXR1cm4gcm9vdFNjaGVtYTtcbn1cblxuXG5mdW5jdGlvbiB1bmVzY2FwZUpzb25Qb2ludGVyKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL34xL2csICcvJykucmVwbGFjZSgvfjAvZywgJ34nKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZGdW5jKGFqdikge1xuICBkZWZGdW5jLmRlZmluaXRpb24gPSB7XG4gICAgdHlwZTogJ29iamVjdCcsXG4gICAgaW5saW5lOiBmdW5jdGlvbiAoaXQsIGtleXdvcmQsIHNjaGVtYSkge1xuICAgICAgdmFyIGV4cHIgPSAnJztcbiAgICAgIGZvciAodmFyIGk9MDsgaTxzY2hlbWEubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGkpIGV4cHIgKz0gJyAmJiAnO1xuICAgICAgICBleHByICs9ICcoJyArIGdldERhdGEoc2NoZW1hW2ldLCBpdC5kYXRhTGV2ZWwpICsgJyAhPT0gdW5kZWZpbmVkKSc7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXhwcjtcbiAgICB9LFxuICAgIG1ldGFTY2hlbWE6IHtcbiAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICBpdGVtczoge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZm9ybWF0OiAnanNvbi1wb2ludGVyJ1xuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBhanYuYWRkS2V5d29yZCgnZGVlcFJlcXVpcmVkJywgZGVmRnVuYy5kZWZpbml0aW9uKTtcbiAgcmV0dXJuIGFqdjtcbn07XG5cblxuZnVuY3Rpb24gZ2V0RGF0YShqc29uUG9pbnRlciwgbHZsKSB7XG4gIHZhciBkYXRhID0gJ2RhdGEnICsgKGx2bCB8fCAnJyk7XG4gIGlmICghanNvblBvaW50ZXIpIHJldHVybiBkYXRhO1xuXG4gIHZhciBleHByID0gZGF0YTtcbiAgdmFyIHNlZ21lbnRzID0ganNvblBvaW50ZXIuc3BsaXQoJy8nKTtcbiAgZm9yICh2YXIgaT0xOyBpPHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBzZWdtZW50c1tpXTtcbiAgICBkYXRhICs9IGdldFByb3BlcnR5KHVuZXNjYXBlSnNvblBvaW50ZXIoc2VnbWVudCkpO1xuICAgIGV4cHIgKz0gJyAmJiAnICsgZGF0YTtcbiAgfVxuICByZXR1cm4gZXhwcjtcbn1cblxuXG52YXIgSURFTlRJRklFUiA9IC9eW2EteiRfXVthLXokXzAtOV0qJC9pO1xudmFyIElOVEVHRVIgPSAvXlswLTldKyQvO1xudmFyIFNJTkdMRV9RVU9URSA9IC8nfFxcXFwvZztcbmZ1bmN0aW9uIGdldFByb3BlcnR5KGtleSkge1xuICByZXR1cm4gSU5URUdFUi50ZXN0KGtleSlcbiAgICAgICAgICA/ICdbJyArIGtleSArICddJ1xuICAgICAgICAgIDogSURFTlRJRklFUi50ZXN0KGtleSlcbiAgICAgICAgICAgID8gJy4nICsga2V5XG4gICAgICAgICAgICA6IFwiWydcIiArIGtleS5yZXBsYWNlKFNJTkdMRV9RVU9URSwgJ1xcXFwkJicpICsgXCInXVwiO1xufVxuXG5cbmZ1bmN0aW9uIHVuZXNjYXBlSnNvblBvaW50ZXIoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvfjEvZywgJy8nKS5yZXBsYWNlKC9+MC9nLCAnficpO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9fZm9ybWF0TGltaXQoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRlcnJvcktleXdvcmQ7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgb3V0ICs9ICd2YXIgJyArICgkdmFsaWQpICsgJyA9IHVuZGVmaW5lZDsnO1xuICBpZiAoaXQub3B0cy5mb3JtYXQgPT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgJyArICgkdmFsaWQpICsgJyA9IHRydWU7ICc7XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuICB2YXIgJHNjaGVtYUZvcm1hdCA9IGl0LnNjaGVtYS5mb3JtYXQsXG4gICAgJGlzRGF0YUZvcm1hdCA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYUZvcm1hdC4kZGF0YSxcbiAgICAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICBpZiAoJGlzRGF0YUZvcm1hdCkge1xuICAgIHZhciAkc2NoZW1hVmFsdWVGb3JtYXQgPSBpdC51dGlsLmdldERhdGEoJHNjaGVtYUZvcm1hdC4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSxcbiAgICAgICRmb3JtYXQgPSAnZm9ybWF0JyArICRsdmwsXG4gICAgICAkY29tcGFyZSA9ICdjb21wYXJlJyArICRsdmw7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJGZvcm1hdCkgKyAnID0gZm9ybWF0c1snICsgKCRzY2hlbWFWYWx1ZUZvcm1hdCkgKyAnXSAsICcgKyAoJGNvbXBhcmUpICsgJyA9ICcgKyAoJGZvcm1hdCkgKyAnICYmICcgKyAoJGZvcm1hdCkgKyAnLmNvbXBhcmU7JztcbiAgfSBlbHNlIHtcbiAgICB2YXIgJGZvcm1hdCA9IGl0LmZvcm1hdHNbJHNjaGVtYUZvcm1hdF07XG4gICAgaWYgKCEoJGZvcm1hdCAmJiAkZm9ybWF0LmNvbXBhcmUpKSB7XG4gICAgICBvdXQgKz0gJyAgJyArICgkdmFsaWQpICsgJyA9IHRydWU7ICc7XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICB2YXIgJGNvbXBhcmUgPSAnZm9ybWF0cycgKyBpdC51dGlsLmdldFByb3BlcnR5KCRzY2hlbWFGb3JtYXQpICsgJy5jb21wYXJlJztcbiAgfVxuICB2YXIgJGlzTWF4ID0gJGtleXdvcmQgPT0gJ2Zvcm1hdE1heGltdW0nLFxuICAgICRleGNsdXNpdmVLZXl3b3JkID0gJ2Zvcm1hdEV4Y2x1c2l2ZScgKyAoJGlzTWF4ID8gJ01heGltdW0nIDogJ01pbmltdW0nKSxcbiAgICAkc2NoZW1hRXhjbCA9IGl0LnNjaGVtYVskZXhjbHVzaXZlS2V5d29yZF0sXG4gICAgJGlzRGF0YUV4Y2wgPSBpdC5vcHRzLiRkYXRhICYmICRzY2hlbWFFeGNsICYmICRzY2hlbWFFeGNsLiRkYXRhLFxuICAgICRvcCA9ICRpc01heCA/ICc8JyA6ICc+JyxcbiAgICAkcmVzdWx0ID0gJ3Jlc3VsdCcgKyAkbHZsO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgaWYgKCRpc0RhdGFFeGNsKSB7XG4gICAgdmFyICRzY2hlbWFWYWx1ZUV4Y2wgPSBpdC51dGlsLmdldERhdGEoJHNjaGVtYUV4Y2wuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFyciksXG4gICAgICAkZXhjbHVzaXZlID0gJ2V4Y2x1c2l2ZScgKyAkbHZsLFxuICAgICAgJG9wRXhwciA9ICdvcCcgKyAkbHZsLFxuICAgICAgJG9wU3RyID0gJ1xcJyArICcgKyAkb3BFeHByICsgJyArIFxcJyc7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYUV4Y2wnICsgKCRsdmwpICsgJyA9ICcgKyAoJHNjaGVtYVZhbHVlRXhjbCkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZUV4Y2wgPSAnc2NoZW1hRXhjbCcgKyAkbHZsO1xuICAgIG91dCArPSAnIGlmICh0eXBlb2YgJyArICgkc2NoZW1hVmFsdWVFeGNsKSArICcgIT0gXFwnYm9vbGVhblxcJyAmJiAnICsgKCRzY2hlbWFWYWx1ZUV4Y2wpICsgJyAhPT0gdW5kZWZpbmVkKSB7ICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgJztcbiAgICB2YXIgJGVycm9yS2V5d29yZCA9ICRleGNsdXNpdmVLZXl3b3JkO1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ19mb3JtYXRFeGNsdXNpdmVMaW1pdCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHt9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnICsgKCRleGNsdXNpdmVLZXl3b3JkKSArICcgc2hvdWxkIGJlIGJvb2xlYW5cXCcgJztcbiAgICAgIH1cbiAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgdmFyIF9fZXJyID0gb3V0O1xuICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICAnO1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgICB9XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnIGlmICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnID09PSB1bmRlZmluZWQpICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyBlbHNlIGlmICh0eXBlb2YgJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPSBcXCdzdHJpbmdcXCcpICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgZWxzZSB7ICc7XG4gICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgfVxuICAgIGlmICgkaXNEYXRhRm9ybWF0KSB7XG4gICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJGNvbXBhcmUpICsgJykgJyArICgkdmFsaWQpICsgJyA9IHRydWU7IGVsc2UgeyAnO1xuICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgIH1cbiAgICBvdXQgKz0gJyB2YXIgJyArICgkcmVzdWx0KSArICcgPSAnICsgKCRjb21wYXJlKSArICcoJyArICgkZGF0YSkgKyAnLCAgJztcbiAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWFWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRzY2hlbWEpKTtcbiAgICB9XG4gICAgb3V0ICs9ICcgKTsgaWYgKCcgKyAoJHJlc3VsdCkgKyAnID09PSB1bmRlZmluZWQpICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgdmFyICcgKyAoJGV4Y2x1c2l2ZSkgKyAnID0gJyArICgkc2NoZW1hVmFsdWVFeGNsKSArICcgPT09IHRydWU7IGlmICgnICsgKCR2YWxpZCkgKyAnID09PSB1bmRlZmluZWQpIHsgJyArICgkdmFsaWQpICsgJyA9ICcgKyAoJGV4Y2x1c2l2ZSkgKyAnID8gJyArICgkcmVzdWx0KSArICcgJyArICgkb3ApICsgJyAwIDogJyArICgkcmVzdWx0KSArICcgJyArICgkb3ApICsgJz0gMDsgfSBpZiAoIScgKyAoJHZhbGlkKSArICcpIHZhciBvcCcgKyAoJGx2bCkgKyAnID0gJyArICgkZXhjbHVzaXZlKSArICcgPyBcXCcnICsgKCRvcCkgKyAnXFwnIDogXFwnJyArICgkb3ApICsgJz1cXCc7JztcbiAgfSBlbHNlIHtcbiAgICB2YXIgJGV4Y2x1c2l2ZSA9ICRzY2hlbWFFeGNsID09PSB0cnVlLFxuICAgICAgJG9wU3RyID0gJG9wO1xuICAgIGlmICghJGV4Y2x1c2l2ZSkgJG9wU3RyICs9ICc9JztcbiAgICB2YXIgJG9wRXhwciA9ICdcXCcnICsgJG9wU3RyICsgJ1xcJyc7XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnIGlmICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnID09PSB1bmRlZmluZWQpICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyBlbHNlIGlmICh0eXBlb2YgJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPSBcXCdzdHJpbmdcXCcpICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgZWxzZSB7ICc7XG4gICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgfVxuICAgIGlmICgkaXNEYXRhRm9ybWF0KSB7XG4gICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJGNvbXBhcmUpICsgJykgJyArICgkdmFsaWQpICsgJyA9IHRydWU7IGVsc2UgeyAnO1xuICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgIH1cbiAgICBvdXQgKz0gJyB2YXIgJyArICgkcmVzdWx0KSArICcgPSAnICsgKCRjb21wYXJlKSArICcoJyArICgkZGF0YSkgKyAnLCAgJztcbiAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWFWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRzY2hlbWEpKTtcbiAgICB9XG4gICAgb3V0ICs9ICcgKTsgaWYgKCcgKyAoJHJlc3VsdCkgKyAnID09PSB1bmRlZmluZWQpICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgaWYgKCcgKyAoJHZhbGlkKSArICcgPT09IHVuZGVmaW5lZCkgJyArICgkdmFsaWQpICsgJyA9ICcgKyAoJHJlc3VsdCkgKyAnICcgKyAoJG9wKTtcbiAgICBpZiAoISRleGNsdXNpdmUpIHtcbiAgICAgIG91dCArPSAnPSc7XG4gICAgfVxuICAgIG91dCArPSAnIDA7JztcbiAgfVxuICBvdXQgKz0gJycgKyAoJGNsb3NpbmdCcmFjZXMpICsgJ2lmICghJyArICgkdmFsaWQpICsgJykgeyAnO1xuICB2YXIgJGVycm9yS2V5d29yZCA9ICRrZXl3b3JkO1xuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJGVycm9yS2V5d29yZCB8fCAnX2Zvcm1hdExpbWl0JykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBjb21wYXJpc29uOiAnICsgKCRvcEV4cHIpICsgJywgbGltaXQ6ICAnO1xuICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYVZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJHNjaGVtYSkpO1xuICAgIH1cbiAgICBvdXQgKz0gJyAsIGV4Y2x1c2l2ZTogJyArICgkZXhjbHVzaXZlKSArICcgfSAnO1xuICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgYmUgJyArICgkb3BTdHIpICsgJyBcIic7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ1xcJyArICcgKyAoJHNjaGVtYVZhbHVlKSArICcgKyBcXCcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRzY2hlbWEpKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnXCJcXCcgJztcbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6ICAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICd2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRzY2hlbWEpKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnICAgICAgICAgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICd9JztcbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfcGF0dGVyblJlcXVpcmVkKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRrZXkgPSAna2V5JyArICRsdmwsXG4gICAgJGlkeCA9ICdpZHgnICsgJGx2bCxcbiAgICAkbWF0Y2hlZCA9ICdwYXR0ZXJuTWF0Y2hlZCcgKyAkbHZsLFxuICAgICRkYXRhUHJvcGVydGllcyA9ICdkYXRhUHJvcGVydGllcycgKyAkbHZsLFxuICAgICRjbG9zaW5nQnJhY2VzID0gJycsXG4gICAgJG93blByb3BlcnRpZXMgPSBpdC5vcHRzLm93blByb3BlcnRpZXM7XG4gIG91dCArPSAndmFyICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyc7XG4gIGlmICgkb3duUHJvcGVydGllcykge1xuICAgIG91dCArPSAnIHZhciAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnID0gdW5kZWZpbmVkOyc7XG4gIH1cbiAgdmFyIGFycjEgPSAkc2NoZW1hO1xuICBpZiAoYXJyMSkge1xuICAgIHZhciAkcFByb3BlcnR5LCBpMSA9IC0xLFxuICAgICAgbDEgPSBhcnIxLmxlbmd0aCAtIDE7XG4gICAgd2hpbGUgKGkxIDwgbDEpIHtcbiAgICAgICRwUHJvcGVydHkgPSBhcnIxW2kxICs9IDFdO1xuICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG1hdGNoZWQpICsgJyA9IGZhbHNlOyAgJztcbiAgICAgIGlmICgkb3duUHJvcGVydGllcykge1xuICAgICAgICBvdXQgKz0gJyAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnID0gJyArICgkZGF0YVByb3BlcnRpZXMpICsgJyB8fCBPYmplY3Qua2V5cygnICsgKCRkYXRhKSArICcpOyBmb3IgKHZhciAnICsgKCRpZHgpICsgJz0wOyAnICsgKCRpZHgpICsgJzwnICsgKCRkYXRhUHJvcGVydGllcykgKyAnLmxlbmd0aDsgJyArICgkaWR4KSArICcrKykgeyB2YXIgJyArICgka2V5KSArICcgPSAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnWycgKyAoJGlkeCkgKyAnXTsgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIGZvciAodmFyICcgKyAoJGtleSkgKyAnIGluICcgKyAoJGRhdGEpICsgJykgeyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgJyArICgkbWF0Y2hlZCkgKyAnID0gJyArIChpdC51c2VQYXR0ZXJuKCRwUHJvcGVydHkpKSArICcudGVzdCgnICsgKCRrZXkpICsgJyk7IGlmICgnICsgKCRtYXRjaGVkKSArICcpIGJyZWFrOyB9ICc7XG4gICAgICB2YXIgJG1pc3NpbmdQYXR0ZXJuID0gaXQudXRpbC5lc2NhcGVRdW90ZXMoJHBQcm9wZXJ0eSk7XG4gICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG1hdGNoZWQpICsgJykgeyAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7ICB2YXIgZXJyID0gICAnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdwYXR0ZXJuUmVxdWlyZWQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IG1pc3NpbmdQYXR0ZXJuOiBcXCcnICsgKCRtaXNzaW5nUGF0dGVybikgKyAnXFwnIH0gJztcbiAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgaGF2ZSBwcm9wZXJ0eSBtYXRjaGluZyBwYXR0ZXJuIFxcXFxcXCcnICsgKCRtaXNzaW5nUGF0dGVybikgKyAnXFxcXFxcJ1xcJyAnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyB9ICAgJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIG91dCArPSAnJyArICgkY2xvc2luZ0JyYWNlcyk7XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX3N3aXRjaChpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICB2YXIgJGlmUGFzc2VkID0gJ2lmUGFzc2VkJyArIGl0LmxldmVsLFxuICAgICRjdXJyZW50QmFzZUlkID0gJGl0LmJhc2VJZCxcbiAgICAkc2hvdWxkQ29udGludWU7XG4gIG91dCArPSAndmFyICcgKyAoJGlmUGFzc2VkKSArICc7JztcbiAgdmFyIGFycjEgPSAkc2NoZW1hO1xuICBpZiAoYXJyMSkge1xuICAgIHZhciAkc2NoLCAkY2FzZUluZGV4ID0gLTEsXG4gICAgICBsMSA9IGFycjEubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoJGNhc2VJbmRleCA8IGwxKSB7XG4gICAgICAkc2NoID0gYXJyMVskY2FzZUluZGV4ICs9IDFdO1xuICAgICAgaWYgKCRjYXNlSW5kZXggJiYgISRzaG91bGRDb250aW51ZSkge1xuICAgICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJGlmUGFzc2VkKSArICcpIHsgJztcbiAgICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgfVxuICAgICAgaWYgKCRzY2guaWYgJiYgKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyB0eXBlb2YgJHNjaC5pZiA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoLmlmKS5sZW5ndGggPiAwIDogaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkc2NoLmlmLCBpdC5SVUxFUy5hbGwpKSkge1xuICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkZXJycykgKyAnID0gZXJyb3JzOyAgICc7XG4gICAgICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICAgICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gdHJ1ZTtcbiAgICAgICAgJGl0LmNyZWF0ZUVycm9ycyA9IGZhbHNlO1xuICAgICAgICAkaXQuc2NoZW1hID0gJHNjaC5pZjtcbiAgICAgICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aCArICdbJyArICRjYXNlSW5kZXggKyAnXS5pZic7XG4gICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGggKyAnLycgKyAkY2FzZUluZGV4ICsgJy9pZic7XG4gICAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICAgICRpdC5jcmVhdGVFcnJvcnMgPSB0cnVlO1xuICAgICAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSAkd2FzQ29tcG9zaXRlO1xuICAgICAgICBvdXQgKz0gJyAnICsgKCRpZlBhc3NlZCkgKyAnID0gJyArICgkbmV4dFZhbGlkKSArICc7IGlmICgnICsgKCRpZlBhc3NlZCkgKyAnKSB7ICAnO1xuICAgICAgICBpZiAodHlwZW9mICRzY2gudGhlbiA9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICBpZiAoJHNjaC50aGVuID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnc3dpdGNoJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBjYXNlSW5kZXg6ICcgKyAoJGNhc2VJbmRleCkgKyAnIH0gJztcbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgcGFzcyBcInN3aXRjaFwiIGtleXdvcmQgdmFsaWRhdGlvblxcJyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHRWYWxpZCkgKyAnID0gJyArICgkc2NoLnRoZW4pICsgJzsgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkaXQuc2NoZW1hID0gJHNjaC50aGVuO1xuICAgICAgICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGggKyAnWycgKyAkY2FzZUluZGV4ICsgJ10udGhlbic7XG4gICAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCArICcvJyArICRjYXNlSW5kZXggKyAnL3RoZW4nO1xuICAgICAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyAgfSBlbHNlIHsgIGVycm9ycyA9ICcgKyAoJGVycnMpICsgJzsgaWYgKHZFcnJvcnMgIT09IG51bGwpIHsgaWYgKCcgKyAoJGVycnMpICsgJykgdkVycm9ycy5sZW5ndGggPSAnICsgKCRlcnJzKSArICc7IGVsc2UgdkVycm9ycyA9IG51bGw7IH0gfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgJyArICgkaWZQYXNzZWQpICsgJyA9IHRydWU7ICAnO1xuICAgICAgICBpZiAodHlwZW9mICRzY2gudGhlbiA9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICBpZiAoJHNjaC50aGVuID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnc3dpdGNoJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBjYXNlSW5kZXg6ICcgKyAoJGNhc2VJbmRleCkgKyAnIH0gJztcbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgcGFzcyBcInN3aXRjaFwiIGtleXdvcmQgdmFsaWRhdGlvblxcJyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHRWYWxpZCkgKyAnID0gJyArICgkc2NoLnRoZW4pICsgJzsgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAkaXQuc2NoZW1hID0gJHNjaC50aGVuO1xuICAgICAgICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGggKyAnWycgKyAkY2FzZUluZGV4ICsgJ10udGhlbic7XG4gICAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCArICcvJyArICRjYXNlSW5kZXggKyAnL3RoZW4nO1xuICAgICAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgJHNob3VsZENvbnRpbnVlID0gJHNjaC5jb250aW51ZVxuICAgIH1cbiAgfVxuICBvdXQgKz0gJycgKyAoJGNsb3NpbmdCcmFjZXMpICsgJ3ZhciAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkbmV4dFZhbGlkKSArICc7JztcbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHNlcXVlbmNlcyA9IHt9O1xuXG52YXIgREVGQVVMVFMgPSB7XG4gIHRpbWVzdGFtcDogZnVuY3Rpb24oKSB7IHJldHVybiBEYXRlLm5vdygpOyB9LFxuICBkYXRldGltZTogZnVuY3Rpb24oKSB7IHJldHVybiAobmV3IERhdGUpLnRvSVNPU3RyaW5nKCk7IH0sXG4gIGRhdGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gKG5ldyBEYXRlKS50b0lTT1N0cmluZygpLnNsaWNlKDAsIDEwKTsgfSxcbiAgdGltZTogZnVuY3Rpb24oKSB7IHJldHVybiAobmV3IERhdGUpLnRvSVNPU3RyaW5nKCkuc2xpY2UoMTEpOyB9LFxuICByYW5kb206IGZ1bmN0aW9uKCkgeyByZXR1cm4gTWF0aC5yYW5kb20oKTsgfSxcbiAgcmFuZG9taW50OiBmdW5jdGlvbiAoYXJncykge1xuICAgIHZhciBsaW1pdCA9IGFyZ3MgJiYgYXJncy5tYXggfHwgMjtcbiAgICByZXR1cm4gZnVuY3Rpb24oKSB7IHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBsaW1pdCk7IH07XG4gIH0sXG4gIHNlcTogZnVuY3Rpb24gKGFyZ3MpIHtcbiAgICB2YXIgbmFtZSA9IGFyZ3MgJiYgYXJncy5uYW1lIHx8ICcnO1xuICAgIHNlcXVlbmNlc1tuYW1lXSA9IHNlcXVlbmNlc1tuYW1lXSB8fCAwO1xuICAgIHJldHVybiBmdW5jdGlvbigpIHsgcmV0dXJuIHNlcXVlbmNlc1tuYW1lXSsrOyB9O1xuICB9XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZkZ1bmMoYWp2KSB7XG4gIGRlZkZ1bmMuZGVmaW5pdGlvbiA9IHtcbiAgICBjb21waWxlOiBmdW5jdGlvbiAoc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0KSB7XG4gICAgICB2YXIgZnVuY3MgPSB7fTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNjaGVtYSkge1xuICAgICAgICB2YXIgZCA9IHNjaGVtYVtrZXldO1xuICAgICAgICB2YXIgZnVuYyA9IGdldERlZmF1bHQodHlwZW9mIGQgPT0gJ3N0cmluZycgPyBkIDogZC5mdW5jKTtcbiAgICAgICAgZnVuY3Nba2V5XSA9IGZ1bmMubGVuZ3RoID8gZnVuYyhkLmFyZ3MpIDogZnVuYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGl0Lm9wdHMudXNlRGVmYXVsdHMgJiYgIWl0LmNvbXBvc2l0ZVJ1bGVcbiAgICAgICAgICAgICAgPyBhc3NpZ25EZWZhdWx0c1xuICAgICAgICAgICAgICA6IG5vb3A7XG5cbiAgICAgIGZ1bmN0aW9uIGFzc2lnbkRlZmF1bHRzKGRhdGEpIHtcbiAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBzY2hlbWEpe1xuICAgICAgICAgIGlmIChkYXRhW3Byb3BdID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgIHx8IChpdC5vcHRzLnVzZURlZmF1bHRzID09ICdlbXB0eSdcbiAgICAgICAgICAgICYmIChkYXRhW3Byb3BdID09PSBudWxsIHx8IGRhdGFbcHJvcF0gPT09ICcnKSkpXG4gICAgICAgICAgICBkYXRhW3Byb3BdID0gZnVuY3NbcHJvcF0oKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gbm9vcCgpIHsgcmV0dXJuIHRydWU7IH1cbiAgICB9LFxuICAgIERFRkFVTFRTOiBERUZBVUxUUyxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB7XG4gICAgICAgIHR5cGU6IFsnc3RyaW5nJywgJ29iamVjdCddLFxuICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgIHJlcXVpcmVkOiBbJ2Z1bmMnLCAnYXJncyddLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgZnVuYzogeyB0eXBlOiAnc3RyaW5nJyB9LFxuICAgICAgICAgIGFyZ3M6IHsgdHlwZTogJ29iamVjdCcgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGFqdi5hZGRLZXl3b3JkKCdkeW5hbWljRGVmYXVsdHMnLCBkZWZGdW5jLmRlZmluaXRpb24pO1xuICByZXR1cm4gYWp2O1xuXG4gIGZ1bmN0aW9uIGdldERlZmF1bHQoZCkge1xuICAgIHZhciBkZWYgPSBERUZBVUxUU1tkXTtcbiAgICBpZiAoZGVmKSByZXR1cm4gZGVmO1xuICAgIHRocm93IG5ldyBFcnJvcignaW52YWxpZCBcImR5bmFtaWNEZWZhdWx0c1wiIGtleXdvcmQgcHJvcGVydHkgdmFsdWU6ICcgKyBkKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19mb3JtYXRMaW1pdCcpKCdNYXhpbXVtJyk7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9fZm9ybWF0TGltaXQnKSgnTWluaW11bScpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgJ2luc3RhbmNlb2YnOiByZXF1aXJlKCcuL2luc3RhbmNlb2YnKSxcbiAgcmFuZ2U6IHJlcXVpcmUoJy4vcmFuZ2UnKSxcbiAgcmVnZXhwOiByZXF1aXJlKCcuL3JlZ2V4cCcpLFxuICAndHlwZW9mJzogcmVxdWlyZSgnLi90eXBlb2YnKSxcbiAgZHluYW1pY0RlZmF1bHRzOiByZXF1aXJlKCcuL2R5bmFtaWNEZWZhdWx0cycpLFxuICBhbGxSZXF1aXJlZDogcmVxdWlyZSgnLi9hbGxSZXF1aXJlZCcpLFxuICBhbnlSZXF1aXJlZDogcmVxdWlyZSgnLi9hbnlSZXF1aXJlZCcpLFxuICBvbmVSZXF1aXJlZDogcmVxdWlyZSgnLi9vbmVSZXF1aXJlZCcpLFxuICBwcm9oaWJpdGVkOiByZXF1aXJlKCcuL3Byb2hpYml0ZWQnKSxcbiAgdW5pcXVlSXRlbVByb3BlcnRpZXM6IHJlcXVpcmUoJy4vdW5pcXVlSXRlbVByb3BlcnRpZXMnKSxcbiAgZGVlcFByb3BlcnRpZXM6IHJlcXVpcmUoJy4vZGVlcFByb3BlcnRpZXMnKSxcbiAgZGVlcFJlcXVpcmVkOiByZXF1aXJlKCcuL2RlZXBSZXF1aXJlZCcpLFxuICBmb3JtYXRNaW5pbXVtOiByZXF1aXJlKCcuL2Zvcm1hdE1pbmltdW0nKSxcbiAgZm9ybWF0TWF4aW11bTogcmVxdWlyZSgnLi9mb3JtYXRNYXhpbXVtJyksXG4gIHBhdHRlcm5SZXF1aXJlZDogcmVxdWlyZSgnLi9wYXR0ZXJuUmVxdWlyZWQnKSxcbiAgJ3N3aXRjaCc6IHJlcXVpcmUoJy4vc3dpdGNoJyksXG4gIHNlbGVjdDogcmVxdWlyZSgnLi9zZWxlY3QnKSxcbiAgdHJhbnNmb3JtOiByZXF1aXJlKCcuL3RyYW5zZm9ybScpXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ09OU1RSVUNUT1JTID0ge1xuICBPYmplY3Q6IE9iamVjdCxcbiAgQXJyYXk6IEFycmF5LFxuICBGdW5jdGlvbjogRnVuY3Rpb24sXG4gIE51bWJlcjogTnVtYmVyLFxuICBTdHJpbmc6IFN0cmluZyxcbiAgRGF0ZTogRGF0ZSxcbiAgUmVnRXhwOiBSZWdFeHBcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmRnVuYyhhanYpIHtcbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHR5cGVvZiBCdWZmZXIgIT0gJ3VuZGVmaW5lZCcpXG4gICAgQ09OU1RSVUNUT1JTLkJ1ZmZlciA9IEJ1ZmZlcjtcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAodHlwZW9mIFByb21pc2UgIT0gJ3VuZGVmaW5lZCcpXG4gICAgQ09OU1RSVUNUT1JTLlByb21pc2UgPSBQcm9taXNlO1xuXG4gIGRlZkZ1bmMuZGVmaW5pdGlvbiA9IHtcbiAgICBjb21waWxlOiBmdW5jdGlvbiAoc2NoZW1hKSB7XG4gICAgICBpZiAodHlwZW9mIHNjaGVtYSA9PSAnc3RyaW5nJykge1xuICAgICAgICB2YXIgQ29uc3RydWN0b3IgPSBnZXRDb25zdHJ1Y3RvcihzY2hlbWEpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICByZXR1cm4gZGF0YSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yO1xuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICB2YXIgY29uc3RydWN0b3JzID0gc2NoZW1hLm1hcChnZXRDb25zdHJ1Y3Rvcik7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgZm9yICh2YXIgaT0wOyBpPGNvbnN0cnVjdG9ycy5sZW5ndGg7IGkrKylcbiAgICAgICAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIGNvbnN0cnVjdG9yc1tpXSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH07XG4gICAgfSxcbiAgICBDT05TVFJVQ1RPUlM6IENPTlNUUlVDVE9SUyxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICBhbnlPZjogW1xuICAgICAgICB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIGl0ZW1zOiB7IHR5cGU6ICdzdHJpbmcnIH1cbiAgICAgICAgfVxuICAgICAgXVxuICAgIH1cbiAgfTtcblxuICBhanYuYWRkS2V5d29yZCgnaW5zdGFuY2VvZicsIGRlZkZ1bmMuZGVmaW5pdGlvbik7XG4gIHJldHVybiBhanY7XG5cbiAgZnVuY3Rpb24gZ2V0Q29uc3RydWN0b3IoYykge1xuICAgIHZhciBDb25zdHJ1Y3RvciA9IENPTlNUUlVDVE9SU1tjXTtcbiAgICBpZiAoQ29uc3RydWN0b3IpIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2ludmFsaWQgXCJpbnN0YW5jZW9mXCIga2V5d29yZCB2YWx1ZSAnICsgYyk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmRnVuYyhhanYpIHtcbiAgZGVmRnVuYy5kZWZpbml0aW9uID0ge1xuICAgIHR5cGU6ICdvYmplY3QnLFxuICAgIG1hY3JvOiBmdW5jdGlvbiAoc2NoZW1hKSB7XG4gICAgICBpZiAoc2NoZW1hLmxlbmd0aCA9PSAwKSByZXR1cm4gdHJ1ZTtcbiAgICAgIGlmIChzY2hlbWEubGVuZ3RoID09IDEpIHJldHVybiB7cmVxdWlyZWQ6IHNjaGVtYX07XG4gICAgICB2YXIgc2NoZW1hcyA9IHNjaGVtYS5tYXAoZnVuY3Rpb24gKHByb3ApIHtcbiAgICAgICAgcmV0dXJuIHtyZXF1aXJlZDogW3Byb3BdfTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHtvbmVPZjogc2NoZW1hc307XG4gICAgfSxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgaXRlbXM6IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZydcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgYWp2LmFkZEtleXdvcmQoJ29uZVJlcXVpcmVkJywgZGVmRnVuYy5kZWZpbml0aW9uKTtcbiAgcmV0dXJuIGFqdjtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmRnVuYyhhanYpIHtcbiAgZGVmRnVuYy5kZWZpbml0aW9uID0ge1xuICAgIHR5cGU6ICdvYmplY3QnLFxuICAgIGlubGluZTogcmVxdWlyZSgnLi9kb3Rqcy9wYXR0ZXJuUmVxdWlyZWQnKSxcbiAgICBzdGF0ZW1lbnRzOiB0cnVlLFxuICAgIGVycm9yczogJ2Z1bGwnLFxuICAgIG1ldGFTY2hlbWE6IHtcbiAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICBpdGVtczoge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZm9ybWF0OiAncmVnZXgnXG4gICAgICB9LFxuICAgICAgdW5pcXVlSXRlbXM6IHRydWVcbiAgICB9XG4gIH07XG5cbiAgYWp2LmFkZEtleXdvcmQoJ3BhdHRlcm5SZXF1aXJlZCcsIGRlZkZ1bmMuZGVmaW5pdGlvbik7XG4gIHJldHVybiBhanY7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZkZ1bmMoYWp2KSB7XG4gIGRlZkZ1bmMuZGVmaW5pdGlvbiA9IHtcbiAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICBtYWNybzogZnVuY3Rpb24gKHNjaGVtYSkge1xuICAgICAgaWYgKHNjaGVtYS5sZW5ndGggPT0gMCkgcmV0dXJuIHRydWU7XG4gICAgICBpZiAoc2NoZW1hLmxlbmd0aCA9PSAxKSByZXR1cm4ge25vdDoge3JlcXVpcmVkOiBzY2hlbWF9fTtcbiAgICAgIHZhciBzY2hlbWFzID0gc2NoZW1hLm1hcChmdW5jdGlvbiAocHJvcCkge1xuICAgICAgICByZXR1cm4ge3JlcXVpcmVkOiBbcHJvcF19O1xuICAgICAgfSk7XG4gICAgICByZXR1cm4ge25vdDoge2FueU9mOiBzY2hlbWFzfX07XG4gICAgfSxcbiAgICBtZXRhU2NoZW1hOiB7XG4gICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgaXRlbXM6IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZydcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgYWp2LmFkZEtleXdvcmQoJ3Byb2hpYml0ZWQnLCBkZWZGdW5jLmRlZmluaXRpb24pO1xuICByZXR1cm4gYWp2O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZGdW5jKGFqdikge1xuICBkZWZGdW5jLmRlZmluaXRpb24gPSB7XG4gICAgdHlwZTogJ251bWJlcicsXG4gICAgbWFjcm86IGZ1bmN0aW9uIChzY2hlbWEsIHBhcmVudFNjaGVtYSkge1xuICAgICAgdmFyIG1pbiA9IHNjaGVtYVswXVxuICAgICAgICAsIG1heCA9IHNjaGVtYVsxXVxuICAgICAgICAsIGV4Y2x1c2l2ZSA9IHBhcmVudFNjaGVtYS5leGNsdXNpdmVSYW5nZTtcblxuICAgICAgdmFsaWRhdGVSYW5nZVNjaGVtYShtaW4sIG1heCwgZXhjbHVzaXZlKTtcblxuICAgICAgcmV0dXJuIGV4Y2x1c2l2ZSA9PT0gdHJ1ZVxuICAgICAgICAgICAgICA/IHtleGNsdXNpdmVNaW5pbXVtOiBtaW4sIGV4Y2x1c2l2ZU1heGltdW06IG1heH1cbiAgICAgICAgICAgICAgOiB7bWluaW11bTogbWluLCBtYXhpbXVtOiBtYXh9O1xuICAgIH0sXG4gICAgbWV0YVNjaGVtYToge1xuICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgIG1pbkl0ZW1zOiAyLFxuICAgICAgbWF4SXRlbXM6IDIsXG4gICAgICBpdGVtczogeyB0eXBlOiAnbnVtYmVyJyB9XG4gICAgfVxuICB9O1xuXG4gIGFqdi5hZGRLZXl3b3JkKCdyYW5nZScsIGRlZkZ1bmMuZGVmaW5pdGlvbik7XG4gIGFqdi5hZGRLZXl3b3JkKCdleGNsdXNpdmVSYW5nZScpO1xuICByZXR1cm4gYWp2O1xuXG4gIGZ1bmN0aW9uIHZhbGlkYXRlUmFuZ2VTY2hlbWEobWluLCBtYXgsIGV4Y2x1c2l2ZSkge1xuICAgIGlmIChleGNsdXNpdmUgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZXhjbHVzaXZlICE9ICdib29sZWFuJylcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBzY2hlbWEgZm9yIGV4Y2x1c2l2ZVJhbmdlIGtleXdvcmQsIHNob3VsZCBiZSBib29sZWFuJyk7XG5cbiAgICBpZiAobWluID4gbWF4IHx8IChleGNsdXNpdmUgJiYgbWluID09IG1heCkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGFyZSBubyBudW1iZXJzIGluIHJhbmdlJyk7XG4gIH1cbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmRnVuYyhhanYpIHtcbiAgZGVmRnVuYy5kZWZpbml0aW9uID0ge1xuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGlubGluZTogZnVuY3Rpb24gKGl0LCBrZXl3b3JkLCBzY2hlbWEpIHtcbiAgICAgIHJldHVybiBnZXRSZWdFeHAoKSArICcudGVzdChkYXRhJyArIChpdC5kYXRhTGV2ZWwgfHwgJycpICsgJyknO1xuXG4gICAgICBmdW5jdGlvbiBnZXRSZWdFeHAoKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBzY2hlbWEgPT0gJ29iamVjdCcpXG4gICAgICAgICAgICByZXR1cm4gbmV3IFJlZ0V4cChzY2hlbWEucGF0dGVybiwgc2NoZW1hLmZsYWdzKTtcblxuICAgICAgICAgIHZhciByeCA9IHNjaGVtYS5tYXRjaCgvXlxcLyguKilcXC8oW2dpbXV5XSopJC8pO1xuICAgICAgICAgIGlmIChyeCkgcmV0dXJuIG5ldyBSZWdFeHAocnhbMV0sIHJ4WzJdKTtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nhbm5vdCBwYXJzZSBzdHJpbmcgaW50byBSZWdFeHAnKTtcbiAgICAgICAgfSBjYXRjaChlKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcigncmVndWxhciBleHByZXNzaW9uJywgc2NoZW1hLCAnaXMgaW52YWxpZCcpO1xuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIG1ldGFTY2hlbWE6IHtcbiAgICAgIHR5cGU6IFsnc3RyaW5nJywgJ29iamVjdCddLFxuICAgICAgcHJvcGVydGllczoge1xuICAgICAgICBwYXR0ZXJuOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAgICAgIGZsYWdzOiB7IHR5cGU6ICdzdHJpbmcnIH1cbiAgICAgIH0sXG4gICAgICByZXF1aXJlZDogWydwYXR0ZXJuJ10sXG4gICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2VcbiAgICB9XG4gIH07XG5cbiAgYWp2LmFkZEtleXdvcmQoJ3JlZ2V4cCcsIGRlZkZ1bmMuZGVmaW5pdGlvbik7XG4gIHJldHVybiBhanY7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vX3V0aWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZGdW5jKGFqdikge1xuICBpZiAoIWFqdi5fb3B0cy4kZGF0YSkge1xuICAgIGNvbnNvbGUud2Fybigna2V5d29yZCBzZWxlY3QgcmVxdWlyZXMgJGRhdGEgb3B0aW9uJyk7XG4gICAgcmV0dXJuIGFqdjtcbiAgfVxuICB2YXIgbWV0YVNjaGVtYVJlZiA9IHV0aWwubWV0YVNjaGVtYVJlZihhanYpO1xuICB2YXIgY29tcGlsZWRDYXNlU2NoZW1hcyA9IFtdO1xuXG4gIGRlZkZ1bmMuZGVmaW5pdGlvbiA9IHtcbiAgICB2YWxpZGF0ZTogZnVuY3Rpb24gdihzY2hlbWEsIGRhdGEsIHBhcmVudFNjaGVtYSkge1xuICAgICAgaWYgKHBhcmVudFNjaGVtYS5zZWxlY3RDYXNlcyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2tleXdvcmQgXCJzZWxlY3RDYXNlc1wiIGlzIGFic2VudCcpO1xuICAgICAgdmFyIGNvbXBpbGVkID0gZ2V0Q29tcGlsZWRTY2hlbWFzKHBhcmVudFNjaGVtYSwgZmFsc2UpO1xuICAgICAgdmFyIHZhbGlkYXRlID0gY29tcGlsZWQuY2FzZXNbc2NoZW1hXTtcbiAgICAgIGlmICh2YWxpZGF0ZSA9PT0gdW5kZWZpbmVkKSB2YWxpZGF0ZSA9IGNvbXBpbGVkLmRlZmF1bHQ7XG4gICAgICBpZiAodHlwZW9mIHZhbGlkYXRlID09ICdib29sZWFuJykgcmV0dXJuIHZhbGlkYXRlO1xuICAgICAgdmFyIHZhbGlkID0gdmFsaWRhdGUoZGF0YSk7XG4gICAgICBpZiAoIXZhbGlkKSB2LmVycm9ycyA9IHZhbGlkYXRlLmVycm9ycztcbiAgICAgIHJldHVybiB2YWxpZDtcbiAgICB9LFxuICAgICRkYXRhOiB0cnVlLFxuICAgIG1ldGFTY2hlbWE6IHsgdHlwZTogWydzdHJpbmcnLCAnbnVtYmVyJywgJ2Jvb2xlYW4nLCAnbnVsbCddIH1cbiAgfTtcblxuICBhanYuYWRkS2V5d29yZCgnc2VsZWN0JywgZGVmRnVuYy5kZWZpbml0aW9uKTtcbiAgYWp2LmFkZEtleXdvcmQoJ3NlbGVjdENhc2VzJywge1xuICAgIGNvbXBpbGU6IGZ1bmN0aW9uIChzY2hlbWFzLCBwYXJlbnRTY2hlbWEpIHtcbiAgICAgIHZhciBjb21waWxlZCA9IGdldENvbXBpbGVkU2NoZW1hcyhwYXJlbnRTY2hlbWEpO1xuICAgICAgZm9yICh2YXIgdmFsdWUgaW4gc2NoZW1hcylcbiAgICAgICAgY29tcGlsZWQuY2FzZXNbdmFsdWVdID0gY29tcGlsZU9yQm9vbGVhbihzY2hlbWFzW3ZhbHVlXSk7XG4gICAgICByZXR1cm4gZnVuY3Rpb24oKSB7IHJldHVybiB0cnVlOyB9O1xuICAgIH0sXG4gICAgdmFsaWQ6IHRydWUsXG4gICAgbWV0YVNjaGVtYToge1xuICAgICAgdHlwZTogJ29iamVjdCcsXG4gICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogbWV0YVNjaGVtYVJlZlxuICAgIH1cbiAgfSk7XG4gIGFqdi5hZGRLZXl3b3JkKCdzZWxlY3REZWZhdWx0Jywge1xuICAgIGNvbXBpbGU6IGZ1bmN0aW9uIChzY2hlbWEsIHBhcmVudFNjaGVtYSkge1xuICAgICAgdmFyIGNvbXBpbGVkID0gZ2V0Q29tcGlsZWRTY2hlbWFzKHBhcmVudFNjaGVtYSk7XG4gICAgICBjb21waWxlZC5kZWZhdWx0ID0gY29tcGlsZU9yQm9vbGVhbihzY2hlbWEpO1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgeyByZXR1cm4gdHJ1ZTsgfTtcbiAgICB9LFxuICAgIHZhbGlkOiB0cnVlLFxuICAgIG1ldGFTY2hlbWE6IG1ldGFTY2hlbWFSZWZcbiAgfSk7XG4gIHJldHVybiBhanY7XG5cblxuICBmdW5jdGlvbiBnZXRDb21waWxlZFNjaGVtYXMocGFyZW50U2NoZW1hLCBjcmVhdGUpIHtcbiAgICB2YXIgY29tcGlsZWQ7XG4gICAgY29tcGlsZWRDYXNlU2NoZW1hcy5zb21lKGZ1bmN0aW9uIChjKSB7XG4gICAgICBpZiAoYy5wYXJlbnRTY2hlbWEgPT09IHBhcmVudFNjaGVtYSkge1xuICAgICAgICBjb21waWxlZCA9IGM7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghY29tcGlsZWQgJiYgY3JlYXRlICE9PSBmYWxzZSkge1xuICAgICAgY29tcGlsZWQgPSB7XG4gICAgICAgIHBhcmVudFNjaGVtYTogcGFyZW50U2NoZW1hLFxuICAgICAgICBjYXNlczoge30sXG4gICAgICAgIGRlZmF1bHQ6IHRydWVcbiAgICAgIH07XG4gICAgICBjb21waWxlZENhc2VTY2hlbWFzLnB1c2goY29tcGlsZWQpO1xuICAgIH1cbiAgICByZXR1cm4gY29tcGlsZWQ7XG4gIH1cblxuICBmdW5jdGlvbiBjb21waWxlT3JCb29sZWFuKHNjaGVtYSkge1xuICAgIHJldHVybiB0eXBlb2Ygc2NoZW1hID09ICdib29sZWFuJ1xuICAgICAgICAgICAgPyBzY2hlbWFcbiAgICAgICAgICAgIDogYWp2LmNvbXBpbGUoc2NoZW1hKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWwgPSByZXF1aXJlKCcuL191dGlsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZGVmRnVuYyhhanYpIHtcbiAgaWYgKGFqdi5SVUxFUy5rZXl3b3Jkcy5zd2l0Y2ggJiYgYWp2LlJVTEVTLmtleXdvcmRzLmlmKSByZXR1cm47XG5cbiAgdmFyIG1ldGFTY2hlbWFSZWYgPSB1dGlsLm1ldGFTY2hlbWFSZWYoYWp2KTtcblxuICBkZWZGdW5jLmRlZmluaXRpb24gPSB7XG4gICAgaW5saW5lOiByZXF1aXJlKCcuL2RvdGpzL3N3aXRjaCcpLFxuICAgIHN0YXRlbWVudHM6IHRydWUsXG4gICAgZXJyb3JzOiAnZnVsbCcsXG4gICAgbWV0YVNjaGVtYToge1xuICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgIGl0ZW1zOiB7XG4gICAgICAgIHJlcXVpcmVkOiBbICd0aGVuJyBdLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgJ2lmJzogbWV0YVNjaGVtYVJlZixcbiAgICAgICAgICAndGhlbic6IHtcbiAgICAgICAgICAgIGFueU9mOiBbXG4gICAgICAgICAgICAgIHsgdHlwZTogJ2Jvb2xlYW4nIH0sXG4gICAgICAgICAgICAgIG1ldGFTY2hlbWFSZWZcbiAgICAgICAgICAgIF1cbiAgICAgICAgICB9LFxuICAgICAgICAgICdjb250aW51ZSc6IHsgdHlwZTogJ2Jvb2xlYW4nIH1cbiAgICAgICAgfSxcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICBkZXBlbmRlbmNpZXM6IHtcbiAgICAgICAgICAnY29udGludWUnOiBbICdpZicgXVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIGFqdi5hZGRLZXl3b3JkKCdzd2l0Y2gnLCBkZWZGdW5jLmRlZmluaXRpb24pO1xuICByZXR1cm4gYWp2O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZGdW5jIChhanYpIHtcbiAgdmFyIHRyYW5zZm9ybSA9IHtcbiAgICB0cmltTGVmdDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvXltcXHNdKy8sICcnKTtcbiAgICB9LFxuICAgIHRyaW1SaWdodDogZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICByZXR1cm4gdmFsdWUucmVwbGFjZSgvW1xcc10rJC8sICcnKTtcbiAgICB9LFxuICAgIHRyaW06IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRyaW0oKTtcbiAgICB9LFxuICAgIHRvTG93ZXJDYXNlOiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgIH0sXG4gICAgdG9VcHBlckNhc2U6IGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvVXBwZXJDYXNlKCk7XG4gICAgfSxcbiAgICB0b0VudW1DYXNlOiBmdW5jdGlvbiAodmFsdWUsIGNmZykge1xuICAgICAgcmV0dXJuIGNmZy5oYXNoW21ha2VIYXNoVGFibGVLZXkodmFsdWUpXSB8fCB2YWx1ZTtcbiAgICB9XG4gIH07XG5cbiAgZGVmRnVuYy5kZWZpbml0aW9uID0ge1xuICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIGVycm9yczogZmFsc2UsXG4gICAgbW9kaWZ5aW5nOiB0cnVlLFxuICAgIHZhbGlkOiB0cnVlLFxuICAgIGNvbXBpbGU6IGZ1bmN0aW9uIChzY2hlbWEsIHBhcmVudFNjaGVtYSkge1xuICAgICAgdmFyIGNmZztcblxuICAgICAgaWYgKHNjaGVtYS5pbmRleE9mKCd0b0VudW1DYXNlJykgIT09IC0xKSB7XG4gICAgICAgIC8vIGJ1aWxkIGhhc2ggdGFibGUgdG8gZW51bSB2YWx1ZXNcbiAgICAgICAgY2ZnID0ge2hhc2g6IHt9fTtcblxuICAgICAgICAvLyByZXF1aXJlcyBgZW51bWAgaW4gc2NoZW1hXG4gICAgICAgIGlmICghcGFyZW50U2NoZW1hLmVudW0pXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGVudW0uIFRvIHVzZSBgdHJhbnNmb3JtOltcInRvRW51bUNhc2VcIl1gLCBgZW51bTpbLi4uXWAgaXMgcmVxdWlyZWQuJyk7XG4gICAgICAgIGZvciAodmFyIGkgPSBwYXJlbnRTY2hlbWEuZW51bS5sZW5ndGg7IGktLTsgaSkge1xuICAgICAgICAgIHZhciB2ID0gcGFyZW50U2NoZW1hLmVudW1baV07XG4gICAgICAgICAgaWYgKHR5cGVvZiB2ICE9PSAnc3RyaW5nJykgY29udGludWU7XG4gICAgICAgICAgdmFyIGsgPSBtYWtlSGFzaFRhYmxlS2V5KHYpO1xuICAgICAgICAgIC8vIHJlcXVpcmVzIGFsbCBgZW51bWAgdmFsdWVzIGhhdmUgdW5pcXVlIGtleXNcbiAgICAgICAgICBpZiAoY2ZnLmhhc2hba10pXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgZW51bSB1bmlxdWVuZXNzLiBUbyB1c2UgYHRyYW5zZm9ybTpbXCJ0b0VudW1DYXNlXCJdYCwgYWxsIHZhbHVlcyBtdXN0IGJlIHVuaXF1ZSB3aGVuIGNhc2UgaW5zZW5zaXRpdmUuJyk7XG4gICAgICAgICAgY2ZnLmhhc2hba10gPSB2O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBmdW5jdGlvbiAoZGF0YSwgZGF0YVBhdGgsIG9iamVjdCwga2V5KSB7XG4gICAgICAgIC8vIHNraXAgaWYgdmFsdWUgb25seVxuICAgICAgICBpZiAoIW9iamVjdCkgcmV0dXJuO1xuXG4gICAgICAgIC8vIGFwcGx5IHRyYW5zZm9ybSBpbiBvcmRlciBwcm92aWRlZFxuICAgICAgICBmb3IgKHZhciBqID0gMCwgbCA9IHNjaGVtYS5sZW5ndGg7IGogPCBsOyBqKyspXG4gICAgICAgICAgZGF0YSA9IHRyYW5zZm9ybVtzY2hlbWFbal1dKGRhdGEsIGNmZyk7XG5cbiAgICAgICAgb2JqZWN0W2tleV0gPSBkYXRhO1xuICAgICAgfTtcbiAgICB9LFxuICAgIG1ldGFTY2hlbWE6IHtcbiAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICBpdGVtczoge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZW51bTogW1xuICAgICAgICAgICd0cmltTGVmdCcsICd0cmltUmlnaHQnLCAndHJpbScsXG4gICAgICAgICAgJ3RvTG93ZXJDYXNlJywgJ3RvVXBwZXJDYXNlJywgJ3RvRW51bUNhc2UnXG4gICAgICAgIF1cbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgYWp2LmFkZEtleXdvcmQoJ3RyYW5zZm9ybScsIGRlZkZ1bmMuZGVmaW5pdGlvbik7XG4gIHJldHVybiBhanY7XG5cbiAgZnVuY3Rpb24gbWFrZUhhc2hUYWJsZUtleSAodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUudG9Mb3dlckNhc2UoKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIEtOT1dOX1RZUEVTID0gWyd1bmRlZmluZWQnLCAnc3RyaW5nJywgJ251bWJlcicsICdvYmplY3QnLCAnZnVuY3Rpb24nLCAnYm9vbGVhbicsICdzeW1ib2wnXTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkZWZGdW5jKGFqdikge1xuICBkZWZGdW5jLmRlZmluaXRpb24gPSB7XG4gICAgaW5saW5lOiBmdW5jdGlvbiAoaXQsIGtleXdvcmQsIHNjaGVtYSkge1xuICAgICAgdmFyIGRhdGEgPSAnZGF0YScgKyAoaXQuZGF0YUxldmVsIHx8ICcnKTtcbiAgICAgIGlmICh0eXBlb2Ygc2NoZW1hID09ICdzdHJpbmcnKSByZXR1cm4gJ3R5cGVvZiAnICsgZGF0YSArICcgPT0gXCInICsgc2NoZW1hICsgJ1wiJztcbiAgICAgIHNjaGVtYSA9ICd2YWxpZGF0ZS5zY2hlbWEnICsgaXQuc2NoZW1hUGF0aCArICcuJyArIGtleXdvcmQ7XG4gICAgICByZXR1cm4gc2NoZW1hICsgJy5pbmRleE9mKHR5cGVvZiAnICsgZGF0YSArICcpID49IDAnO1xuICAgIH0sXG4gICAgbWV0YVNjaGVtYToge1xuICAgICAgYW55T2Y6IFtcbiAgICAgICAge1xuICAgICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICAgIGVudW06IEtOT1dOX1RZUEVTXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAnYXJyYXknLFxuICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgICAgIGVudW06IEtOT1dOX1RZUEVTXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfVxuICB9O1xuXG4gIGFqdi5hZGRLZXl3b3JkKCd0eXBlb2YnLCBkZWZGdW5jLmRlZmluaXRpb24pO1xuICByZXR1cm4gYWp2O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFNDQUxBUl9UWVBFUyA9IFsnbnVtYmVyJywgJ2ludGVnZXInLCAnc3RyaW5nJywgJ2Jvb2xlYW4nLCAnbnVsbCddO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGRlZkZ1bmMoYWp2KSB7XG4gIGRlZkZ1bmMuZGVmaW5pdGlvbiA9IHtcbiAgICB0eXBlOiAnYXJyYXknLFxuICAgIGNvbXBpbGU6IGZ1bmN0aW9uKGtleXMsIHBhcmVudFNjaGVtYSwgaXQpIHtcbiAgICAgIHZhciBlcXVhbCA9IGl0LnV0aWwuZXF1YWw7XG4gICAgICB2YXIgc2NhbGFyID0gZ2V0U2NhbGFyS2V5cyhrZXlzLCBwYXJlbnRTY2hlbWEpO1xuXG4gICAgICByZXR1cm4gZnVuY3Rpb24oZGF0YSkge1xuICAgICAgICBpZiAoZGF0YS5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgZm9yICh2YXIgaz0wOyBrIDwga2V5cy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgdmFyIGksIGtleSA9IGtleXNba107XG4gICAgICAgICAgICBpZiAoc2NhbGFyW2tdKSB7XG4gICAgICAgICAgICAgIHZhciBoYXNoID0ge307XG4gICAgICAgICAgICAgIGZvciAoaSA9IGRhdGEubGVuZ3RoOyBpLS07KSB7XG4gICAgICAgICAgICAgICAgaWYgKCFkYXRhW2ldIHx8IHR5cGVvZiBkYXRhW2ldICE9ICdvYmplY3QnKSBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB2YXIgcHJvcCA9IGRhdGFbaV1ba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAocHJvcCAmJiB0eXBlb2YgcHJvcCA9PSAnb2JqZWN0JykgY29udGludWU7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wID09ICdzdHJpbmcnKSBwcm9wID0gJ1wiJyArIHByb3A7XG4gICAgICAgICAgICAgICAgaWYgKGhhc2hbcHJvcF0pIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICBoYXNoW3Byb3BdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZm9yIChpID0gZGF0YS5sZW5ndGg7IGktLTspIHtcbiAgICAgICAgICAgICAgICBpZiAoIWRhdGFbaV0gfHwgdHlwZW9mIGRhdGFbaV0gIT0gJ29iamVjdCcpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSBpOyBqLS07KSB7XG4gICAgICAgICAgICAgICAgICBpZiAoZGF0YVtqXSAmJiB0eXBlb2YgZGF0YVtqXSA9PSAnb2JqZWN0JyAmJiBlcXVhbChkYXRhW2ldW2tleV0sIGRhdGFbal1ba2V5XSkpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9O1xuICAgIH0sXG4gICAgbWV0YVNjaGVtYToge1xuICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgIGl0ZW1zOiB7dHlwZTogJ3N0cmluZyd9XG4gICAgfVxuICB9O1xuXG4gIGFqdi5hZGRLZXl3b3JkKCd1bmlxdWVJdGVtUHJvcGVydGllcycsIGRlZkZ1bmMuZGVmaW5pdGlvbik7XG4gIHJldHVybiBhanY7XG59O1xuXG5cbmZ1bmN0aW9uIGdldFNjYWxhcktleXMoa2V5cywgc2NoZW1hKSB7XG4gIHJldHVybiBrZXlzLm1hcChmdW5jdGlvbihrZXkpIHtcbiAgICB2YXIgcHJvcGVydGllcyA9IHNjaGVtYS5pdGVtcyAmJiBzY2hlbWEuaXRlbXMucHJvcGVydGllcztcbiAgICB2YXIgcHJvcFR5cGUgPSBwcm9wZXJ0aWVzICYmIHByb3BlcnRpZXNba2V5XSAmJiBwcm9wZXJ0aWVzW2tleV0udHlwZTtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShwcm9wVHlwZSlcbiAgICAgICAgICAgID8gcHJvcFR5cGUuaW5kZXhPZignb2JqZWN0JykgPCAwICYmIHByb3BUeXBlLmluZGV4T2YoJ2FycmF5JykgPCAwXG4gICAgICAgICAgICA6IFNDQUxBUl9UWVBFUy5pbmRleE9mKHByb3BUeXBlKSA+PSAwO1xuICB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIGNvbXBpbGVTY2hlbWEgPSByZXF1aXJlKCcuL2NvbXBpbGUnKVxuICAsIHJlc29sdmUgPSByZXF1aXJlKCcuL2NvbXBpbGUvcmVzb2x2ZScpXG4gICwgQ2FjaGUgPSByZXF1aXJlKCcuL2NhY2hlJylcbiAgLCBTY2hlbWFPYmplY3QgPSByZXF1aXJlKCcuL2NvbXBpbGUvc2NoZW1hX29iaicpXG4gICwgc3RhYmxlU3RyaW5naWZ5ID0gcmVxdWlyZSgnZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnknKVxuICAsIGZvcm1hdHMgPSByZXF1aXJlKCcuL2NvbXBpbGUvZm9ybWF0cycpXG4gICwgcnVsZXMgPSByZXF1aXJlKCcuL2NvbXBpbGUvcnVsZXMnKVxuICAsICRkYXRhTWV0YVNjaGVtYSA9IHJlcXVpcmUoJy4vZGF0YScpXG4gICwgdXRpbCA9IHJlcXVpcmUoJy4vY29tcGlsZS91dGlsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQWp2O1xuXG5BanYucHJvdG90eXBlLnZhbGlkYXRlID0gdmFsaWRhdGU7XG5BanYucHJvdG90eXBlLmNvbXBpbGUgPSBjb21waWxlO1xuQWp2LnByb3RvdHlwZS5hZGRTY2hlbWEgPSBhZGRTY2hlbWE7XG5BanYucHJvdG90eXBlLmFkZE1ldGFTY2hlbWEgPSBhZGRNZXRhU2NoZW1hO1xuQWp2LnByb3RvdHlwZS52YWxpZGF0ZVNjaGVtYSA9IHZhbGlkYXRlU2NoZW1hO1xuQWp2LnByb3RvdHlwZS5nZXRTY2hlbWEgPSBnZXRTY2hlbWE7XG5BanYucHJvdG90eXBlLnJlbW92ZVNjaGVtYSA9IHJlbW92ZVNjaGVtYTtcbkFqdi5wcm90b3R5cGUuYWRkRm9ybWF0ID0gYWRkRm9ybWF0O1xuQWp2LnByb3RvdHlwZS5lcnJvcnNUZXh0ID0gZXJyb3JzVGV4dDtcblxuQWp2LnByb3RvdHlwZS5fYWRkU2NoZW1hID0gX2FkZFNjaGVtYTtcbkFqdi5wcm90b3R5cGUuX2NvbXBpbGUgPSBfY29tcGlsZTtcblxuQWp2LnByb3RvdHlwZS5jb21waWxlQXN5bmMgPSByZXF1aXJlKCcuL2NvbXBpbGUvYXN5bmMnKTtcbnZhciBjdXN0b21LZXl3b3JkID0gcmVxdWlyZSgnLi9rZXl3b3JkJyk7XG5BanYucHJvdG90eXBlLmFkZEtleXdvcmQgPSBjdXN0b21LZXl3b3JkLmFkZDtcbkFqdi5wcm90b3R5cGUuZ2V0S2V5d29yZCA9IGN1c3RvbUtleXdvcmQuZ2V0O1xuQWp2LnByb3RvdHlwZS5yZW1vdmVLZXl3b3JkID0gY3VzdG9tS2V5d29yZC5yZW1vdmU7XG5BanYucHJvdG90eXBlLnZhbGlkYXRlS2V5d29yZCA9IGN1c3RvbUtleXdvcmQudmFsaWRhdGU7XG5cbnZhciBlcnJvckNsYXNzZXMgPSByZXF1aXJlKCcuL2NvbXBpbGUvZXJyb3JfY2xhc3NlcycpO1xuQWp2LlZhbGlkYXRpb25FcnJvciA9IGVycm9yQ2xhc3Nlcy5WYWxpZGF0aW9uO1xuQWp2Lk1pc3NpbmdSZWZFcnJvciA9IGVycm9yQ2xhc3Nlcy5NaXNzaW5nUmVmO1xuQWp2LiRkYXRhTWV0YVNjaGVtYSA9ICRkYXRhTWV0YVNjaGVtYTtcblxudmFyIE1FVEFfU0NIRU1BX0lEID0gJ2h0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hJztcblxudmFyIE1FVEFfSUdOT1JFX09QVElPTlMgPSBbICdyZW1vdmVBZGRpdGlvbmFsJywgJ3VzZURlZmF1bHRzJywgJ2NvZXJjZVR5cGVzJywgJ3N0cmljdERlZmF1bHRzJyBdO1xudmFyIE1FVEFfU1VQUE9SVF9EQVRBID0gWycvcHJvcGVydGllcyddO1xuXG4vKipcbiAqIENyZWF0ZXMgdmFsaWRhdG9yIGluc3RhbmNlLlxuICogVXNhZ2U6IGBBanYob3B0cylgXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBvcHRpb25hbCBvcHRpb25zXG4gKiBAcmV0dXJuIHtPYmplY3R9IGFqdiBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBBanYob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQWp2KSkgcmV0dXJuIG5ldyBBanYob3B0cyk7XG4gIG9wdHMgPSB0aGlzLl9vcHRzID0gdXRpbC5jb3B5KG9wdHMpIHx8IHt9O1xuICBzZXRMb2dnZXIodGhpcyk7XG4gIHRoaXMuX3NjaGVtYXMgPSB7fTtcbiAgdGhpcy5fcmVmcyA9IHt9O1xuICB0aGlzLl9mcmFnbWVudHMgPSB7fTtcbiAgdGhpcy5fZm9ybWF0cyA9IGZvcm1hdHMob3B0cy5mb3JtYXQpO1xuXG4gIHRoaXMuX2NhY2hlID0gb3B0cy5jYWNoZSB8fCBuZXcgQ2FjaGU7XG4gIHRoaXMuX2xvYWRpbmdTY2hlbWFzID0ge307XG4gIHRoaXMuX2NvbXBpbGF0aW9ucyA9IFtdO1xuICB0aGlzLlJVTEVTID0gcnVsZXMoKTtcbiAgdGhpcy5fZ2V0SWQgPSBjaG9vc2VHZXRJZChvcHRzKTtcblxuICBvcHRzLmxvb3BSZXF1aXJlZCA9IG9wdHMubG9vcFJlcXVpcmVkIHx8IEluZmluaXR5O1xuICBpZiAob3B0cy5lcnJvckRhdGFQYXRoID09ICdwcm9wZXJ0eScpIG9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSA9IHRydWU7XG4gIGlmIChvcHRzLnNlcmlhbGl6ZSA9PT0gdW5kZWZpbmVkKSBvcHRzLnNlcmlhbGl6ZSA9IHN0YWJsZVN0cmluZ2lmeTtcbiAgdGhpcy5fbWV0YU9wdHMgPSBnZXRNZXRhU2NoZW1hT3B0aW9ucyh0aGlzKTtcblxuICBpZiAob3B0cy5mb3JtYXRzKSBhZGRJbml0aWFsRm9ybWF0cyh0aGlzKTtcbiAgaWYgKG9wdHMua2V5d29yZHMpIGFkZEluaXRpYWxLZXl3b3Jkcyh0aGlzKTtcbiAgYWRkRGVmYXVsdE1ldGFTY2hlbWEodGhpcyk7XG4gIGlmICh0eXBlb2Ygb3B0cy5tZXRhID09ICdvYmplY3QnKSB0aGlzLmFkZE1ldGFTY2hlbWEob3B0cy5tZXRhKTtcbiAgaWYgKG9wdHMubnVsbGFibGUpIHRoaXMuYWRkS2V5d29yZCgnbnVsbGFibGUnLCB7bWV0YVNjaGVtYToge3R5cGU6ICdib29sZWFuJ319KTtcbiAgYWRkSW5pdGlhbFNjaGVtYXModGhpcyk7XG59XG5cblxuXG4vKipcbiAqIFZhbGlkYXRlIGRhdGEgdXNpbmcgc2NoZW1hXG4gKiBTY2hlbWEgd2lsbCBiZSBjb21waWxlZCBhbmQgY2FjaGVkICh1c2luZyBzZXJpYWxpemVkIEpTT04gYXMga2V5LiBbZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnldKGh0dHBzOi8vZ2l0aHViLmNvbS9lcG9iZXJlemtpbi9mYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeSkgaXMgdXNlZCB0byBzZXJpYWxpemUuXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtICB7U3RyaW5nfE9iamVjdH0gc2NoZW1hS2V5UmVmIGtleSwgcmVmIG9yIHNjaGVtYSBvYmplY3RcbiAqIEBwYXJhbSAge0FueX0gZGF0YSB0byBiZSB2YWxpZGF0ZWRcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHZhbGlkYXRpb24gcmVzdWx0LiBFcnJvcnMgZnJvbSB0aGUgbGFzdCB2YWxpZGF0aW9uIHdpbGwgYmUgYXZhaWxhYmxlIGluIGBhanYuZXJyb3JzYCAoYW5kIGFsc28gaW4gY29tcGlsZWQgc2NoZW1hOiBgc2NoZW1hLmVycm9yc2ApLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZShzY2hlbWFLZXlSZWYsIGRhdGEpIHtcbiAgdmFyIHY7XG4gIGlmICh0eXBlb2Ygc2NoZW1hS2V5UmVmID09ICdzdHJpbmcnKSB7XG4gICAgdiA9IHRoaXMuZ2V0U2NoZW1hKHNjaGVtYUtleVJlZik7XG4gICAgaWYgKCF2KSB0aHJvdyBuZXcgRXJyb3IoJ25vIHNjaGVtYSB3aXRoIGtleSBvciByZWYgXCInICsgc2NoZW1hS2V5UmVmICsgJ1wiJyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNjaGVtYU9iaiA9IHRoaXMuX2FkZFNjaGVtYShzY2hlbWFLZXlSZWYpO1xuICAgIHYgPSBzY2hlbWFPYmoudmFsaWRhdGUgfHwgdGhpcy5fY29tcGlsZShzY2hlbWFPYmopO1xuICB9XG5cbiAgdmFyIHZhbGlkID0gdihkYXRhKTtcbiAgaWYgKHYuJGFzeW5jICE9PSB0cnVlKSB0aGlzLmVycm9ycyA9IHYuZXJyb3JzO1xuICByZXR1cm4gdmFsaWQ7XG59XG5cblxuLyoqXG4gKiBDcmVhdGUgdmFsaWRhdGluZyBmdW5jdGlvbiBmb3IgcGFzc2VkIHNjaGVtYS5cbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtPYmplY3R9IHNjaGVtYSBzY2hlbWEgb2JqZWN0XG4gKiBAcGFyYW0gIHtCb29sZWFufSBfbWV0YSB0cnVlIGlmIHNjaGVtYSBpcyBhIG1ldGEtc2NoZW1hLiBVc2VkIGludGVybmFsbHkgdG8gY29tcGlsZSBtZXRhIHNjaGVtYXMgb2YgY3VzdG9tIGtleXdvcmRzLlxuICogQHJldHVybiB7RnVuY3Rpb259IHZhbGlkYXRpbmcgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gY29tcGlsZShzY2hlbWEsIF9tZXRhKSB7XG4gIHZhciBzY2hlbWFPYmogPSB0aGlzLl9hZGRTY2hlbWEoc2NoZW1hLCB1bmRlZmluZWQsIF9tZXRhKTtcbiAgcmV0dXJuIHNjaGVtYU9iai52YWxpZGF0ZSB8fCB0aGlzLl9jb21waWxlKHNjaGVtYU9iaik7XG59XG5cblxuLyoqXG4gKiBBZGRzIHNjaGVtYSB0byB0aGUgaW5zdGFuY2UuXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IHNjaGVtYSBzY2hlbWEgb3IgYXJyYXkgb2Ygc2NoZW1hcy4gSWYgYXJyYXkgaXMgcGFzc2VkLCBga2V5YCBhbmQgb3RoZXIgcGFyYW1ldGVycyB3aWxsIGJlIGlnbm9yZWQuXG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5IE9wdGlvbmFsIHNjaGVtYSBrZXkuIENhbiBiZSBwYXNzZWQgdG8gYHZhbGlkYXRlYCBtZXRob2QgaW5zdGVhZCBvZiBzY2hlbWEgb2JqZWN0IG9yIGlkL3JlZi4gT25lIHNjaGVtYSBwZXIgaW5zdGFuY2UgY2FuIGhhdmUgZW1wdHkgYGlkYCBhbmQgYGtleWAuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IF9za2lwVmFsaWRhdGlvbiB0cnVlIHRvIHNraXAgc2NoZW1hIHZhbGlkYXRpb24uIFVzZWQgaW50ZXJuYWxseSwgb3B0aW9uIHZhbGlkYXRlU2NoZW1hIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IF9tZXRhIHRydWUgaWYgc2NoZW1hIGlzIGEgbWV0YS1zY2hlbWEuIFVzZWQgaW50ZXJuYWxseSwgYWRkTWV0YVNjaGVtYSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuICogQHJldHVybiB7QWp2fSB0aGlzIGZvciBtZXRob2QgY2hhaW5pbmdcbiAqL1xuZnVuY3Rpb24gYWRkU2NoZW1hKHNjaGVtYSwga2V5LCBfc2tpcFZhbGlkYXRpb24sIF9tZXRhKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpe1xuICAgIGZvciAodmFyIGk9MDsgaTxzY2hlbWEubGVuZ3RoOyBpKyspIHRoaXMuYWRkU2NoZW1hKHNjaGVtYVtpXSwgdW5kZWZpbmVkLCBfc2tpcFZhbGlkYXRpb24sIF9tZXRhKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB2YXIgaWQgPSB0aGlzLl9nZXRJZChzY2hlbWEpO1xuICBpZiAoaWQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgaWQgIT0gJ3N0cmluZycpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdzY2hlbWEgaWQgbXVzdCBiZSBzdHJpbmcnKTtcbiAga2V5ID0gcmVzb2x2ZS5ub3JtYWxpemVJZChrZXkgfHwgaWQpO1xuICBjaGVja1VuaXF1ZSh0aGlzLCBrZXkpO1xuICB0aGlzLl9zY2hlbWFzW2tleV0gPSB0aGlzLl9hZGRTY2hlbWEoc2NoZW1hLCBfc2tpcFZhbGlkYXRpb24sIF9tZXRhLCB0cnVlKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cblxuLyoqXG4gKiBBZGQgc2NoZW1hIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlIG90aGVyIHNjaGVtYXNcbiAqIG9wdGlvbnMgaW4gTUVUQV9JR05PUkVfT1BUSU9OUyBhcmUgYWx3YXkgc2V0IHRvIGZhbHNlXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYSBzY2hlbWEgb2JqZWN0XG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5IG9wdGlvbmFsIHNjaGVtYSBrZXlcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gc2tpcFZhbGlkYXRpb24gdHJ1ZSB0byBza2lwIHNjaGVtYSB2YWxpZGF0aW9uLCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB2YWxpZGF0ZVNjaGVtYSBvcHRpb24gZm9yIG1ldGEtc2NoZW1hXG4gKiBAcmV0dXJuIHtBanZ9IHRoaXMgZm9yIG1ldGhvZCBjaGFpbmluZ1xuICovXG5mdW5jdGlvbiBhZGRNZXRhU2NoZW1hKHNjaGVtYSwga2V5LCBza2lwVmFsaWRhdGlvbikge1xuICB0aGlzLmFkZFNjaGVtYShzY2hlbWEsIGtleSwgc2tpcFZhbGlkYXRpb24sIHRydWUpO1xuICByZXR1cm4gdGhpcztcbn1cblxuXG4vKipcbiAqIFZhbGlkYXRlIHNjaGVtYVxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWEgc2NoZW1hIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHRocm93T3JMb2dFcnJvciBwYXNzIHRydWUgdG8gdGhyb3cgKG9yIGxvZykgYW4gZXJyb3IgaWYgaW52YWxpZFxuICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiBzY2hlbWEgaXMgdmFsaWRcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTY2hlbWEoc2NoZW1hLCB0aHJvd09yTG9nRXJyb3IpIHtcbiAgdmFyICRzY2hlbWEgPSBzY2hlbWEuJHNjaGVtYTtcbiAgaWYgKCRzY2hlbWEgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgJHNjaGVtYSAhPSAnc3RyaW5nJylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJyRzY2hlbWEgbXVzdCBiZSBhIHN0cmluZycpO1xuICAkc2NoZW1hID0gJHNjaGVtYSB8fCB0aGlzLl9vcHRzLmRlZmF1bHRNZXRhIHx8IGRlZmF1bHRNZXRhKHRoaXMpO1xuICBpZiAoISRzY2hlbWEpIHtcbiAgICB0aGlzLmxvZ2dlci53YXJuKCdtZXRhLXNjaGVtYSBub3QgYXZhaWxhYmxlJyk7XG4gICAgdGhpcy5lcnJvcnMgPSBudWxsO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciB2YWxpZCA9IHRoaXMudmFsaWRhdGUoJHNjaGVtYSwgc2NoZW1hKTtcbiAgaWYgKCF2YWxpZCAmJiB0aHJvd09yTG9nRXJyb3IpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdzY2hlbWEgaXMgaW52YWxpZDogJyArIHRoaXMuZXJyb3JzVGV4dCgpO1xuICAgIGlmICh0aGlzLl9vcHRzLnZhbGlkYXRlU2NoZW1hID09ICdsb2cnKSB0aGlzLmxvZ2dlci5lcnJvcihtZXNzYWdlKTtcbiAgICBlbHNlIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgfVxuICByZXR1cm4gdmFsaWQ7XG59XG5cblxuZnVuY3Rpb24gZGVmYXVsdE1ldGEoc2VsZikge1xuICB2YXIgbWV0YSA9IHNlbGYuX29wdHMubWV0YTtcbiAgc2VsZi5fb3B0cy5kZWZhdWx0TWV0YSA9IHR5cGVvZiBtZXRhID09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLl9nZXRJZChtZXRhKSB8fCBtZXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmdldFNjaGVtYShNRVRBX1NDSEVNQV9JRClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUVUQV9TQ0hFTUFfSURcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICByZXR1cm4gc2VsZi5fb3B0cy5kZWZhdWx0TWV0YTtcbn1cblxuXG4vKipcbiAqIEdldCBjb21waWxlZCBzY2hlbWEgZnJvbSB0aGUgaW5zdGFuY2UgYnkgYGtleWAgb3IgYHJlZmAuXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtICB7U3RyaW5nfSBrZXlSZWYgYGtleWAgdGhhdCB3YXMgcGFzc2VkIHRvIGBhZGRTY2hlbWFgIG9yIGZ1bGwgc2NoZW1hIHJlZmVyZW5jZSAoYHNjaGVtYS5pZGAgb3IgcmVzb2x2ZWQgaWQpLlxuICogQHJldHVybiB7RnVuY3Rpb259IHNjaGVtYSB2YWxpZGF0aW5nIGZ1bmN0aW9uICh3aXRoIHByb3BlcnR5IGBzY2hlbWFgKS5cbiAqL1xuZnVuY3Rpb24gZ2V0U2NoZW1hKGtleVJlZikge1xuICB2YXIgc2NoZW1hT2JqID0gX2dldFNjaGVtYU9iaih0aGlzLCBrZXlSZWYpO1xuICBzd2l0Y2ggKHR5cGVvZiBzY2hlbWFPYmopIHtcbiAgICBjYXNlICdvYmplY3QnOiByZXR1cm4gc2NoZW1hT2JqLnZhbGlkYXRlIHx8IHRoaXMuX2NvbXBpbGUoc2NoZW1hT2JqKTtcbiAgICBjYXNlICdzdHJpbmcnOiByZXR1cm4gdGhpcy5nZXRTY2hlbWEoc2NoZW1hT2JqKTtcbiAgICBjYXNlICd1bmRlZmluZWQnOiByZXR1cm4gX2dldFNjaGVtYUZyYWdtZW50KHRoaXMsIGtleVJlZik7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBfZ2V0U2NoZW1hRnJhZ21lbnQoc2VsZiwgcmVmKSB7XG4gIHZhciByZXMgPSByZXNvbHZlLnNjaGVtYS5jYWxsKHNlbGYsIHsgc2NoZW1hOiB7fSB9LCByZWYpO1xuICBpZiAocmVzKSB7XG4gICAgdmFyIHNjaGVtYSA9IHJlcy5zY2hlbWFcbiAgICAgICwgcm9vdCA9IHJlcy5yb290XG4gICAgICAsIGJhc2VJZCA9IHJlcy5iYXNlSWQ7XG4gICAgdmFyIHYgPSBjb21waWxlU2NoZW1hLmNhbGwoc2VsZiwgc2NoZW1hLCByb290LCB1bmRlZmluZWQsIGJhc2VJZCk7XG4gICAgc2VsZi5fZnJhZ21lbnRzW3JlZl0gPSBuZXcgU2NoZW1hT2JqZWN0KHtcbiAgICAgIHJlZjogcmVmLFxuICAgICAgZnJhZ21lbnQ6IHRydWUsXG4gICAgICBzY2hlbWE6IHNjaGVtYSxcbiAgICAgIHJvb3Q6IHJvb3QsXG4gICAgICBiYXNlSWQ6IGJhc2VJZCxcbiAgICAgIHZhbGlkYXRlOiB2XG4gICAgfSk7XG4gICAgcmV0dXJuIHY7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBfZ2V0U2NoZW1hT2JqKHNlbGYsIGtleVJlZikge1xuICBrZXlSZWYgPSByZXNvbHZlLm5vcm1hbGl6ZUlkKGtleVJlZik7XG4gIHJldHVybiBzZWxmLl9zY2hlbWFzW2tleVJlZl0gfHwgc2VsZi5fcmVmc1trZXlSZWZdIHx8IHNlbGYuX2ZyYWdtZW50c1trZXlSZWZdO1xufVxuXG5cbi8qKlxuICogUmVtb3ZlIGNhY2hlZCBzY2hlbWEocykuXG4gKiBJZiBubyBwYXJhbWV0ZXIgaXMgcGFzc2VkIGFsbCBzY2hlbWFzIGJ1dCBtZXRhLXNjaGVtYXMgYXJlIHJlbW92ZWQuXG4gKiBJZiBSZWdFeHAgaXMgcGFzc2VkIGFsbCBzY2hlbWFzIHdpdGgga2V5L2lkIG1hdGNoaW5nIHBhdHRlcm4gYnV0IG1ldGEtc2NoZW1hcyBhcmUgcmVtb3ZlZC5cbiAqIEV2ZW4gaWYgc2NoZW1hIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgc2NoZW1hcyBpdCBzdGlsbCBjYW4gYmUgcmVtb3ZlZCBhcyBvdGhlciBzY2hlbWFzIGhhdmUgbG9jYWwgcmVmZXJlbmNlcy5cbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtTdHJpbmd8T2JqZWN0fFJlZ0V4cH0gc2NoZW1hS2V5UmVmIGtleSwgcmVmLCBwYXR0ZXJuIHRvIG1hdGNoIGtleS9yZWYgb3Igc2NoZW1hIG9iamVjdFxuICogQHJldHVybiB7QWp2fSB0aGlzIGZvciBtZXRob2QgY2hhaW5pbmdcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlU2NoZW1hKHNjaGVtYUtleVJlZikge1xuICBpZiAoc2NoZW1hS2V5UmVmIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgX3JlbW92ZUFsbFNjaGVtYXModGhpcywgdGhpcy5fc2NoZW1hcywgc2NoZW1hS2V5UmVmKTtcbiAgICBfcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLCB0aGlzLl9yZWZzLCBzY2hlbWFLZXlSZWYpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHN3aXRjaCAodHlwZW9mIHNjaGVtYUtleVJlZikge1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICBfcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLCB0aGlzLl9zY2hlbWFzKTtcbiAgICAgIF9yZW1vdmVBbGxTY2hlbWFzKHRoaXMsIHRoaXMuX3JlZnMpO1xuICAgICAgdGhpcy5fY2FjaGUuY2xlYXIoKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICB2YXIgc2NoZW1hT2JqID0gX2dldFNjaGVtYU9iaih0aGlzLCBzY2hlbWFLZXlSZWYpO1xuICAgICAgaWYgKHNjaGVtYU9iaikgdGhpcy5fY2FjaGUuZGVsKHNjaGVtYU9iai5jYWNoZUtleSk7XG4gICAgICBkZWxldGUgdGhpcy5fc2NoZW1hc1tzY2hlbWFLZXlSZWZdO1xuICAgICAgZGVsZXRlIHRoaXMuX3JlZnNbc2NoZW1hS2V5UmVmXTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICB2YXIgc2VyaWFsaXplID0gdGhpcy5fb3B0cy5zZXJpYWxpemU7XG4gICAgICB2YXIgY2FjaGVLZXkgPSBzZXJpYWxpemUgPyBzZXJpYWxpemUoc2NoZW1hS2V5UmVmKSA6IHNjaGVtYUtleVJlZjtcbiAgICAgIHRoaXMuX2NhY2hlLmRlbChjYWNoZUtleSk7XG4gICAgICB2YXIgaWQgPSB0aGlzLl9nZXRJZChzY2hlbWFLZXlSZWYpO1xuICAgICAgaWYgKGlkKSB7XG4gICAgICAgIGlkID0gcmVzb2x2ZS5ub3JtYWxpemVJZChpZCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zY2hlbWFzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3JlZnNbaWRdO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5cbmZ1bmN0aW9uIF9yZW1vdmVBbGxTY2hlbWFzKHNlbGYsIHNjaGVtYXMsIHJlZ2V4KSB7XG4gIGZvciAodmFyIGtleVJlZiBpbiBzY2hlbWFzKSB7XG4gICAgdmFyIHNjaGVtYU9iaiA9IHNjaGVtYXNba2V5UmVmXTtcbiAgICBpZiAoIXNjaGVtYU9iai5tZXRhICYmICghcmVnZXggfHwgcmVnZXgudGVzdChrZXlSZWYpKSkge1xuICAgICAgc2VsZi5fY2FjaGUuZGVsKHNjaGVtYU9iai5jYWNoZUtleSk7XG4gICAgICBkZWxldGUgc2NoZW1hc1trZXlSZWZdO1xuICAgIH1cbiAgfVxufVxuXG5cbi8qIEB0aGlzICAgQWp2ICovXG5mdW5jdGlvbiBfYWRkU2NoZW1hKHNjaGVtYSwgc2tpcFZhbGlkYXRpb24sIG1ldGEsIHNob3VsZEFkZFNjaGVtYSkge1xuICBpZiAodHlwZW9mIHNjaGVtYSAhPSAnb2JqZWN0JyAmJiB0eXBlb2Ygc2NoZW1hICE9ICdib29sZWFuJylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NjaGVtYSBzaG91bGQgYmUgb2JqZWN0IG9yIGJvb2xlYW4nKTtcbiAgdmFyIHNlcmlhbGl6ZSA9IHRoaXMuX29wdHMuc2VyaWFsaXplO1xuICB2YXIgY2FjaGVLZXkgPSBzZXJpYWxpemUgPyBzZXJpYWxpemUoc2NoZW1hKSA6IHNjaGVtYTtcbiAgdmFyIGNhY2hlZCA9IHRoaXMuX2NhY2hlLmdldChjYWNoZUtleSk7XG4gIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cbiAgc2hvdWxkQWRkU2NoZW1hID0gc2hvdWxkQWRkU2NoZW1hIHx8IHRoaXMuX29wdHMuYWRkVXNlZFNjaGVtYSAhPT0gZmFsc2U7XG5cbiAgdmFyIGlkID0gcmVzb2x2ZS5ub3JtYWxpemVJZCh0aGlzLl9nZXRJZChzY2hlbWEpKTtcbiAgaWYgKGlkICYmIHNob3VsZEFkZFNjaGVtYSkgY2hlY2tVbmlxdWUodGhpcywgaWQpO1xuXG4gIHZhciB3aWxsVmFsaWRhdGUgPSB0aGlzLl9vcHRzLnZhbGlkYXRlU2NoZW1hICE9PSBmYWxzZSAmJiAhc2tpcFZhbGlkYXRpb247XG4gIHZhciByZWN1cnNpdmVNZXRhO1xuICBpZiAod2lsbFZhbGlkYXRlICYmICEocmVjdXJzaXZlTWV0YSA9IGlkICYmIGlkID09IHJlc29sdmUubm9ybWFsaXplSWQoc2NoZW1hLiRzY2hlbWEpKSlcbiAgICB0aGlzLnZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdHJ1ZSk7XG5cbiAgdmFyIGxvY2FsUmVmcyA9IHJlc29sdmUuaWRzLmNhbGwodGhpcywgc2NoZW1hKTtcblxuICB2YXIgc2NoZW1hT2JqID0gbmV3IFNjaGVtYU9iamVjdCh7XG4gICAgaWQ6IGlkLFxuICAgIHNjaGVtYTogc2NoZW1hLFxuICAgIGxvY2FsUmVmczogbG9jYWxSZWZzLFxuICAgIGNhY2hlS2V5OiBjYWNoZUtleSxcbiAgICBtZXRhOiBtZXRhXG4gIH0pO1xuXG4gIGlmIChpZFswXSAhPSAnIycgJiYgc2hvdWxkQWRkU2NoZW1hKSB0aGlzLl9yZWZzW2lkXSA9IHNjaGVtYU9iajtcbiAgdGhpcy5fY2FjaGUucHV0KGNhY2hlS2V5LCBzY2hlbWFPYmopO1xuXG4gIGlmICh3aWxsVmFsaWRhdGUgJiYgcmVjdXJzaXZlTWV0YSkgdGhpcy52YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRydWUpO1xuXG4gIHJldHVybiBzY2hlbWFPYmo7XG59XG5cblxuLyogQHRoaXMgICBBanYgKi9cbmZ1bmN0aW9uIF9jb21waWxlKHNjaGVtYU9iaiwgcm9vdCkge1xuICBpZiAoc2NoZW1hT2JqLmNvbXBpbGluZykge1xuICAgIHNjaGVtYU9iai52YWxpZGF0ZSA9IGNhbGxWYWxpZGF0ZTtcbiAgICBjYWxsVmFsaWRhdGUuc2NoZW1hID0gc2NoZW1hT2JqLnNjaGVtYTtcbiAgICBjYWxsVmFsaWRhdGUuZXJyb3JzID0gbnVsbDtcbiAgICBjYWxsVmFsaWRhdGUucm9vdCA9IHJvb3QgPyByb290IDogY2FsbFZhbGlkYXRlO1xuICAgIGlmIChzY2hlbWFPYmouc2NoZW1hLiRhc3luYyA9PT0gdHJ1ZSlcbiAgICAgIGNhbGxWYWxpZGF0ZS4kYXN5bmMgPSB0cnVlO1xuICAgIHJldHVybiBjYWxsVmFsaWRhdGU7XG4gIH1cbiAgc2NoZW1hT2JqLmNvbXBpbGluZyA9IHRydWU7XG5cbiAgdmFyIGN1cnJlbnRPcHRzO1xuICBpZiAoc2NoZW1hT2JqLm1ldGEpIHtcbiAgICBjdXJyZW50T3B0cyA9IHRoaXMuX29wdHM7XG4gICAgdGhpcy5fb3B0cyA9IHRoaXMuX21ldGFPcHRzO1xuICB9XG5cbiAgdmFyIHY7XG4gIHRyeSB7IHYgPSBjb21waWxlU2NoZW1hLmNhbGwodGhpcywgc2NoZW1hT2JqLnNjaGVtYSwgcm9vdCwgc2NoZW1hT2JqLmxvY2FsUmVmcyk7IH1cbiAgY2F0Y2goZSkge1xuICAgIGRlbGV0ZSBzY2hlbWFPYmoudmFsaWRhdGU7XG4gICAgdGhyb3cgZTtcbiAgfVxuICBmaW5hbGx5IHtcbiAgICBzY2hlbWFPYmouY29tcGlsaW5nID0gZmFsc2U7XG4gICAgaWYgKHNjaGVtYU9iai5tZXRhKSB0aGlzLl9vcHRzID0gY3VycmVudE9wdHM7XG4gIH1cblxuICBzY2hlbWFPYmoudmFsaWRhdGUgPSB2O1xuICBzY2hlbWFPYmoucmVmcyA9IHYucmVmcztcbiAgc2NoZW1hT2JqLnJlZlZhbCA9IHYucmVmVmFsO1xuICBzY2hlbWFPYmoucm9vdCA9IHYucm9vdDtcbiAgcmV0dXJuIHY7XG5cblxuICAvKiBAdGhpcyAgIHsqfSAtIGN1c3RvbSBjb250ZXh0LCBzZWUgcGFzc0NvbnRleHQgb3B0aW9uICovXG4gIGZ1bmN0aW9uIGNhbGxWYWxpZGF0ZSgpIHtcbiAgICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gICAgdmFyIF92YWxpZGF0ZSA9IHNjaGVtYU9iai52YWxpZGF0ZTtcbiAgICB2YXIgcmVzdWx0ID0gX3ZhbGlkYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgY2FsbFZhbGlkYXRlLmVycm9ycyA9IF92YWxpZGF0ZS5lcnJvcnM7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGNob29zZUdldElkKG9wdHMpIHtcbiAgc3dpdGNoIChvcHRzLnNjaGVtYUlkKSB7XG4gICAgY2FzZSAnYXV0byc6IHJldHVybiBfZ2V0JElkT3JJZDtcbiAgICBjYXNlICdpZCc6IHJldHVybiBfZ2V0SWQ7XG4gICAgZGVmYXVsdDogcmV0dXJuIF9nZXQkSWQ7XG4gIH1cbn1cblxuLyogQHRoaXMgICBBanYgKi9cbmZ1bmN0aW9uIF9nZXRJZChzY2hlbWEpIHtcbiAgaWYgKHNjaGVtYS4kaWQpIHRoaXMubG9nZ2VyLndhcm4oJ3NjaGVtYSAkaWQgaWdub3JlZCcsIHNjaGVtYS4kaWQpO1xuICByZXR1cm4gc2NoZW1hLmlkO1xufVxuXG4vKiBAdGhpcyAgIEFqdiAqL1xuZnVuY3Rpb24gX2dldCRJZChzY2hlbWEpIHtcbiAgaWYgKHNjaGVtYS5pZCkgdGhpcy5sb2dnZXIud2Fybignc2NoZW1hIGlkIGlnbm9yZWQnLCBzY2hlbWEuaWQpO1xuICByZXR1cm4gc2NoZW1hLiRpZDtcbn1cblxuXG5mdW5jdGlvbiBfZ2V0JElkT3JJZChzY2hlbWEpIHtcbiAgaWYgKHNjaGVtYS4kaWQgJiYgc2NoZW1hLmlkICYmIHNjaGVtYS4kaWQgIT0gc2NoZW1hLmlkKVxuICAgIHRocm93IG5ldyBFcnJvcignc2NoZW1hICRpZCBpcyBkaWZmZXJlbnQgZnJvbSBpZCcpO1xuICByZXR1cm4gc2NoZW1hLiRpZCB8fCBzY2hlbWEuaWQ7XG59XG5cblxuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIGVycm9yIG1lc3NhZ2Ugb2JqZWN0cyB0byBzdHJpbmdcbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtBcnJheTxPYmplY3Q+fSBlcnJvcnMgb3B0aW9uYWwgYXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnMsIGlmIG5vdCBwYXNzZWQgZXJyb3JzIGZyb20gdGhlIGluc3RhbmNlIGFyZSB1c2VkLlxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zIG9wdGlvbmFsIG9wdGlvbnMgd2l0aCBwcm9wZXJ0aWVzIGBzZXBhcmF0b3JgIGFuZCBgZGF0YVZhcmAuXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGh1bWFuIHJlYWRhYmxlIHN0cmluZyB3aXRoIGFsbCBlcnJvcnMgZGVzY3JpcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGVycm9yc1RleHQoZXJyb3JzLCBvcHRpb25zKSB7XG4gIGVycm9ycyA9IGVycm9ycyB8fCB0aGlzLmVycm9ycztcbiAgaWYgKCFlcnJvcnMpIHJldHVybiAnTm8gZXJyb3JzJztcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHZhciBzZXBhcmF0b3IgPSBvcHRpb25zLnNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywgJyA6IG9wdGlvbnMuc2VwYXJhdG9yO1xuICB2YXIgZGF0YVZhciA9IG9wdGlvbnMuZGF0YVZhciA9PT0gdW5kZWZpbmVkID8gJ2RhdGEnIDogb3B0aW9ucy5kYXRhVmFyO1xuXG4gIHZhciB0ZXh0ID0gJyc7XG4gIGZvciAodmFyIGk9MDsgaTxlcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZSA9IGVycm9yc1tpXTtcbiAgICBpZiAoZSkgdGV4dCArPSBkYXRhVmFyICsgZS5kYXRhUGF0aCArICcgJyArIGUubWVzc2FnZSArIHNlcGFyYXRvcjtcbiAgfVxuICByZXR1cm4gdGV4dC5zbGljZSgwLCAtc2VwYXJhdG9yLmxlbmd0aCk7XG59XG5cblxuLyoqXG4gKiBBZGQgY3VzdG9tIGZvcm1hdFxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIGZvcm1hdCBuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB8RnVuY3Rpb259IGZvcm1hdCBzdHJpbmcgaXMgY29udmVydGVkIHRvIFJlZ0V4cDsgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBib29sZWFuICh0cnVlIHdoZW4gdmFsaWQpXG4gKiBAcmV0dXJuIHtBanZ9IHRoaXMgZm9yIG1ldGhvZCBjaGFpbmluZ1xuICovXG5mdW5jdGlvbiBhZGRGb3JtYXQobmFtZSwgZm9ybWF0KSB7XG4gIGlmICh0eXBlb2YgZm9ybWF0ID09ICdzdHJpbmcnKSBmb3JtYXQgPSBuZXcgUmVnRXhwKGZvcm1hdCk7XG4gIHRoaXMuX2Zvcm1hdHNbbmFtZV0gPSBmb3JtYXQ7XG4gIHJldHVybiB0aGlzO1xufVxuXG5cbmZ1bmN0aW9uIGFkZERlZmF1bHRNZXRhU2NoZW1hKHNlbGYpIHtcbiAgdmFyICRkYXRhU2NoZW1hO1xuICBpZiAoc2VsZi5fb3B0cy4kZGF0YSkge1xuICAgICRkYXRhU2NoZW1hID0gcmVxdWlyZSgnLi9yZWZzL2RhdGEuanNvbicpO1xuICAgIHNlbGYuYWRkTWV0YVNjaGVtYSgkZGF0YVNjaGVtYSwgJGRhdGFTY2hlbWEuJGlkLCB0cnVlKTtcbiAgfVxuICBpZiAoc2VsZi5fb3B0cy5tZXRhID09PSBmYWxzZSkgcmV0dXJuO1xuICB2YXIgbWV0YVNjaGVtYSA9IHJlcXVpcmUoJy4vcmVmcy9qc29uLXNjaGVtYS1kcmFmdC0wNy5qc29uJyk7XG4gIGlmIChzZWxmLl9vcHRzLiRkYXRhKSBtZXRhU2NoZW1hID0gJGRhdGFNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIE1FVEFfU1VQUE9SVF9EQVRBKTtcbiAgc2VsZi5hZGRNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIE1FVEFfU0NIRU1BX0lELCB0cnVlKTtcbiAgc2VsZi5fcmVmc1snaHR0cDovL2pzb24tc2NoZW1hLm9yZy9zY2hlbWEnXSA9IE1FVEFfU0NIRU1BX0lEO1xufVxuXG5cbmZ1bmN0aW9uIGFkZEluaXRpYWxTY2hlbWFzKHNlbGYpIHtcbiAgdmFyIG9wdHNTY2hlbWFzID0gc2VsZi5fb3B0cy5zY2hlbWFzO1xuICBpZiAoIW9wdHNTY2hlbWFzKSByZXR1cm47XG4gIGlmIChBcnJheS5pc0FycmF5KG9wdHNTY2hlbWFzKSkgc2VsZi5hZGRTY2hlbWEob3B0c1NjaGVtYXMpO1xuICBlbHNlIGZvciAodmFyIGtleSBpbiBvcHRzU2NoZW1hcykgc2VsZi5hZGRTY2hlbWEob3B0c1NjaGVtYXNba2V5XSwga2V5KTtcbn1cblxuXG5mdW5jdGlvbiBhZGRJbml0aWFsRm9ybWF0cyhzZWxmKSB7XG4gIGZvciAodmFyIG5hbWUgaW4gc2VsZi5fb3B0cy5mb3JtYXRzKSB7XG4gICAgdmFyIGZvcm1hdCA9IHNlbGYuX29wdHMuZm9ybWF0c1tuYW1lXTtcbiAgICBzZWxmLmFkZEZvcm1hdChuYW1lLCBmb3JtYXQpO1xuICB9XG59XG5cblxuZnVuY3Rpb24gYWRkSW5pdGlhbEtleXdvcmRzKHNlbGYpIHtcbiAgZm9yICh2YXIgbmFtZSBpbiBzZWxmLl9vcHRzLmtleXdvcmRzKSB7XG4gICAgdmFyIGtleXdvcmQgPSBzZWxmLl9vcHRzLmtleXdvcmRzW25hbWVdO1xuICAgIHNlbGYuYWRkS2V5d29yZChuYW1lLCBrZXl3b3JkKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGNoZWNrVW5pcXVlKHNlbGYsIGlkKSB7XG4gIGlmIChzZWxmLl9zY2hlbWFzW2lkXSB8fCBzZWxmLl9yZWZzW2lkXSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NjaGVtYSB3aXRoIGtleSBvciBpZCBcIicgKyBpZCArICdcIiBhbHJlYWR5IGV4aXN0cycpO1xufVxuXG5cbmZ1bmN0aW9uIGdldE1ldGFTY2hlbWFPcHRpb25zKHNlbGYpIHtcbiAgdmFyIG1ldGFPcHRzID0gdXRpbC5jb3B5KHNlbGYuX29wdHMpO1xuICBmb3IgKHZhciBpPTA7IGk8TUVUQV9JR05PUkVfT1BUSU9OUy5sZW5ndGg7IGkrKylcbiAgICBkZWxldGUgbWV0YU9wdHNbTUVUQV9JR05PUkVfT1BUSU9OU1tpXV07XG4gIHJldHVybiBtZXRhT3B0cztcbn1cblxuXG5mdW5jdGlvbiBzZXRMb2dnZXIoc2VsZikge1xuICB2YXIgbG9nZ2VyID0gc2VsZi5fb3B0cy5sb2dnZXI7XG4gIGlmIChsb2dnZXIgPT09IGZhbHNlKSB7XG4gICAgc2VsZi5sb2dnZXIgPSB7bG9nOiBub29wLCB3YXJuOiBub29wLCBlcnJvcjogbm9vcH07XG4gIH0gZWxzZSB7XG4gICAgaWYgKGxvZ2dlciA9PT0gdW5kZWZpbmVkKSBsb2dnZXIgPSBjb25zb2xlO1xuICAgIGlmICghKHR5cGVvZiBsb2dnZXIgPT0gJ29iamVjdCcgJiYgbG9nZ2VyLmxvZyAmJiBsb2dnZXIud2FybiAmJiBsb2dnZXIuZXJyb3IpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdsb2dnZXIgbXVzdCBpbXBsZW1lbnQgbG9nLCB3YXJuIGFuZCBlcnJvciBtZXRob2RzJyk7XG4gICAgc2VsZi5sb2dnZXIgPSBsb2dnZXI7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBub29wKCkge31cbiIsIid1c2Ugc3RyaWN0JztcblxuXG52YXIgQ2FjaGUgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIENhY2hlKCkge1xuICB0aGlzLl9jYWNoZSA9IHt9O1xufTtcblxuXG5DYWNoZS5wcm90b3R5cGUucHV0ID0gZnVuY3Rpb24gQ2FjaGVfcHV0KGtleSwgdmFsdWUpIHtcbiAgdGhpcy5fY2FjaGVba2V5XSA9IHZhbHVlO1xufTtcblxuXG5DYWNoZS5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24gQ2FjaGVfZ2V0KGtleSkge1xuICByZXR1cm4gdGhpcy5fY2FjaGVba2V5XTtcbn07XG5cblxuQ2FjaGUucHJvdG90eXBlLmRlbCA9IGZ1bmN0aW9uIENhY2hlX2RlbChrZXkpIHtcbiAgZGVsZXRlIHRoaXMuX2NhY2hlW2tleV07XG59O1xuXG5cbkNhY2hlLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uIENhY2hlX2NsZWFyKCkge1xuICB0aGlzLl9jYWNoZSA9IHt9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIE1pc3NpbmdSZWZFcnJvciA9IHJlcXVpcmUoJy4vZXJyb3JfY2xhc3NlcycpLk1pc3NpbmdSZWY7XG5cbm1vZHVsZS5leHBvcnRzID0gY29tcGlsZUFzeW5jO1xuXG5cbi8qKlxuICogQ3JlYXRlcyB2YWxpZGF0aW5nIGZ1bmN0aW9uIGZvciBwYXNzZWQgc2NoZW1hIHdpdGggYXN5bmNocm9ub3VzIGxvYWRpbmcgb2YgbWlzc2luZyBzY2hlbWFzLlxuICogYGxvYWRTY2hlbWFgIG9wdGlvbiBzaG91bGQgYmUgYSBmdW5jdGlvbiB0aGF0IGFjY2VwdHMgc2NoZW1hIHVyaSBhbmQgcmV0dXJucyBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgc2NoZW1hLlxuICogQHRoaXMgIEFqdlxuICogQHBhcmFtIHtPYmplY3R9ICAgc2NoZW1hIHNjaGVtYSBvYmplY3RcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gIG1ldGEgb3B0aW9uYWwgdHJ1ZSB0byBjb21waWxlIG1ldGEtc2NoZW1hOyB0aGlzIHBhcmFtZXRlciBjYW4gYmUgc2tpcHBlZFxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgYW4gb3B0aW9uYWwgbm9kZS1zdHlsZSBjYWxsYmFjaywgaXQgaXMgY2FsbGVkIHdpdGggMiBwYXJhbWV0ZXJzOiBlcnJvciAob3IgbnVsbCkgYW5kIHZhbGlkYXRpbmcgZnVuY3Rpb24uXG4gKiBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCBhIHZhbGlkYXRpbmcgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGVBc3luYyhzY2hlbWEsIG1ldGEsIGNhbGxiYWNrKSB7XG4gIC8qIGVzbGludCBuby1zaGFkb3c6IDAgKi9cbiAgLyogZ2xvYmFsIFByb21pc2UgKi9cbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIGlmICh0eXBlb2YgdGhpcy5fb3B0cy5sb2FkU2NoZW1hICE9ICdmdW5jdGlvbicpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdvcHRpb25zLmxvYWRTY2hlbWEgc2hvdWxkIGJlIGEgZnVuY3Rpb24nKTtcblxuICBpZiAodHlwZW9mIG1ldGEgPT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gbWV0YTtcbiAgICBtZXRhID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIHAgPSBsb2FkTWV0YVNjaGVtYU9mKHNjaGVtYSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHNjaGVtYU9iaiA9IHNlbGYuX2FkZFNjaGVtYShzY2hlbWEsIHVuZGVmaW5lZCwgbWV0YSk7XG4gICAgcmV0dXJuIHNjaGVtYU9iai52YWxpZGF0ZSB8fCBfY29tcGlsZUFzeW5jKHNjaGVtYU9iaik7XG4gIH0pO1xuXG4gIGlmIChjYWxsYmFjaykge1xuICAgIHAudGhlbihcbiAgICAgIGZ1bmN0aW9uKHYpIHsgY2FsbGJhY2sobnVsbCwgdik7IH0sXG4gICAgICBjYWxsYmFja1xuICAgICk7XG4gIH1cblxuICByZXR1cm4gcDtcblxuXG4gIGZ1bmN0aW9uIGxvYWRNZXRhU2NoZW1hT2Yoc2NoKSB7XG4gICAgdmFyICRzY2hlbWEgPSBzY2guJHNjaGVtYTtcbiAgICByZXR1cm4gJHNjaGVtYSAmJiAhc2VsZi5nZXRTY2hlbWEoJHNjaGVtYSlcbiAgICAgICAgICAgID8gY29tcGlsZUFzeW5jLmNhbGwoc2VsZiwgeyAkcmVmOiAkc2NoZW1hIH0sIHRydWUpXG4gICAgICAgICAgICA6IFByb21pc2UucmVzb2x2ZSgpO1xuICB9XG5cblxuICBmdW5jdGlvbiBfY29tcGlsZUFzeW5jKHNjaGVtYU9iaikge1xuICAgIHRyeSB7IHJldHVybiBzZWxmLl9jb21waWxlKHNjaGVtYU9iaik7IH1cbiAgICBjYXRjaChlKSB7XG4gICAgICBpZiAoZSBpbnN0YW5jZW9mIE1pc3NpbmdSZWZFcnJvcikgcmV0dXJuIGxvYWRNaXNzaW5nU2NoZW1hKGUpO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cblxuICAgIGZ1bmN0aW9uIGxvYWRNaXNzaW5nU2NoZW1hKGUpIHtcbiAgICAgIHZhciByZWYgPSBlLm1pc3NpbmdTY2hlbWE7XG4gICAgICBpZiAoYWRkZWQocmVmKSkgdGhyb3cgbmV3IEVycm9yKCdTY2hlbWEgJyArIHJlZiArICcgaXMgbG9hZGVkIGJ1dCAnICsgZS5taXNzaW5nUmVmICsgJyBjYW5ub3QgYmUgcmVzb2x2ZWQnKTtcblxuICAgICAgdmFyIHNjaGVtYVByb21pc2UgPSBzZWxmLl9sb2FkaW5nU2NoZW1hc1tyZWZdO1xuICAgICAgaWYgKCFzY2hlbWFQcm9taXNlKSB7XG4gICAgICAgIHNjaGVtYVByb21pc2UgPSBzZWxmLl9sb2FkaW5nU2NoZW1hc1tyZWZdID0gc2VsZi5fb3B0cy5sb2FkU2NoZW1hKHJlZik7XG4gICAgICAgIHNjaGVtYVByb21pc2UudGhlbihyZW1vdmVQcm9taXNlLCByZW1vdmVQcm9taXNlKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHNjaGVtYVByb21pc2UudGhlbihmdW5jdGlvbiAoc2NoKSB7XG4gICAgICAgIGlmICghYWRkZWQocmVmKSkge1xuICAgICAgICAgIHJldHVybiBsb2FkTWV0YVNjaGVtYU9mKHNjaCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAoIWFkZGVkKHJlZikpIHNlbGYuYWRkU2NoZW1hKHNjaCwgcmVmLCB1bmRlZmluZWQsIG1ldGEpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gX2NvbXBpbGVBc3luYyhzY2hlbWFPYmopO1xuICAgICAgfSk7XG5cbiAgICAgIGZ1bmN0aW9uIHJlbW92ZVByb21pc2UoKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmLl9sb2FkaW5nU2NoZW1hc1tyZWZdO1xuICAgICAgfVxuXG4gICAgICBmdW5jdGlvbiBhZGRlZChyZWYpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYuX3JlZnNbcmVmXSB8fCBzZWxmLl9zY2hlbWFzW3JlZl07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciByZXNvbHZlID0gcmVxdWlyZSgnLi9yZXNvbHZlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBWYWxpZGF0aW9uOiBlcnJvclN1YmNsYXNzKFZhbGlkYXRpb25FcnJvciksXG4gIE1pc3NpbmdSZWY6IGVycm9yU3ViY2xhc3MoTWlzc2luZ1JlZkVycm9yKVxufTtcblxuXG5mdW5jdGlvbiBWYWxpZGF0aW9uRXJyb3IoZXJyb3JzKSB7XG4gIHRoaXMubWVzc2FnZSA9ICd2YWxpZGF0aW9uIGZhaWxlZCc7XG4gIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICB0aGlzLmFqdiA9IHRoaXMudmFsaWRhdGlvbiA9IHRydWU7XG59XG5cblxuTWlzc2luZ1JlZkVycm9yLm1lc3NhZ2UgPSBmdW5jdGlvbiAoYmFzZUlkLCByZWYpIHtcbiAgcmV0dXJuICdjYW5cXCd0IHJlc29sdmUgcmVmZXJlbmNlICcgKyByZWYgKyAnIGZyb20gaWQgJyArIGJhc2VJZDtcbn07XG5cblxuZnVuY3Rpb24gTWlzc2luZ1JlZkVycm9yKGJhc2VJZCwgcmVmLCBtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgTWlzc2luZ1JlZkVycm9yLm1lc3NhZ2UoYmFzZUlkLCByZWYpO1xuICB0aGlzLm1pc3NpbmdSZWYgPSByZXNvbHZlLnVybChiYXNlSWQsIHJlZik7XG4gIHRoaXMubWlzc2luZ1NjaGVtYSA9IHJlc29sdmUubm9ybWFsaXplSWQocmVzb2x2ZS5mdWxsUGF0aCh0aGlzLm1pc3NpbmdSZWYpKTtcbn1cblxuXG5mdW5jdGlvbiBlcnJvclN1YmNsYXNzKFN1YmNsYXNzKSB7XG4gIFN1YmNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgU3ViY2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ViY2xhc3M7XG4gIHJldHVybiBTdWJjbGFzcztcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxudmFyIERBVEUgPSAvXihcXGRcXGRcXGRcXGQpLShcXGRcXGQpLShcXGRcXGQpJC87XG52YXIgREFZUyA9IFswLDMxLDI4LDMxLDMwLDMxLDMwLDMxLDMxLDMwLDMxLDMwLDMxXTtcbnZhciBUSU1FID0gL14oXFxkXFxkKTooXFxkXFxkKTooXFxkXFxkKShcXC5cXGQrKT8oenxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPyk/JC9pO1xudmFyIEhPU1ROQU1FID0gL14oPz0uezEsMjUzfVxcLj8kKVthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlxcLlthLXowLTldKD86Wy0wLTlhLXpdezAsNjF9WzAtOWEtel0pPykqXFwuPyQvaTtcbnZhciBVUkkgPSAvXig/OlthLXpdW2EtejAtOStcXC0uXSo6KSg/OlxcLz9cXC8oPzooPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06XXwlWzAtOWEtZl17Mn0pKkApPyg/OlxcWyg/Oig/Oig/Oig/OlswLTlhLWZdezEsNH06KXs2fXw6Oig/OlswLTlhLWZdezEsNH06KXs1fXwoPzpbMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXs0fXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwxfVswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezN9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDJ9WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7Mn18KD86KD86WzAtOWEtZl17MSw0fTopezAsM31bMC05YS1mXXsxLDR9KT86OlswLTlhLWZdezEsNH06fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDR9WzAtOWEtZl17MSw0fSk/OjopKD86WzAtOWEtZl17MSw0fTpbMC05YS1mXXsxLDR9fCg/Oig/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSl8KD86KD86WzAtOWEtZl17MSw0fTopezAsNX1bMC05YS1mXXsxLDR9KT86OlswLTlhLWZdezEsNH18KD86KD86WzAtOWEtZl17MSw0fTopezAsNn1bMC05YS1mXXsxLDR9KT86Oil8W1Z2XVswLTlhLWZdK1xcLlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpdKylcXF18KD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pfCg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PV18JVswLTlhLWZdezJ9KSopKD86OlxcZCopPyg/OlxcLyg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKikqfFxcLyg/Oig/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKyg/OlxcLyg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKikqKT98KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkrKD86XFwvKD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSopKD86XFw/KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkAvP118JVswLTlhLWZdezJ9KSopPyg/OiMoPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QC8/XXwlWzAtOWEtZl17Mn0pKik/JC9pO1xudmFyIFVSSVJFRiA9IC9eKD86W2Etel1bYS16MC05K1xcLS5dKjopPyg/OlxcLz9cXC8oPzooPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06XXwlWzAtOWEtZl17Mn0pKkApPyg/OlxcWyg/Oig/Oig/Oig/OlswLTlhLWZdezEsNH06KXs2fXw6Oig/OlswLTlhLWZdezEsNH06KXs1fXwoPzpbMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXs0fXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwxfVswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezN9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDJ9WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7Mn18KD86KD86WzAtOWEtZl17MSw0fTopezAsM31bMC05YS1mXXsxLDR9KT86OlswLTlhLWZdezEsNH06fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDR9WzAtOWEtZl17MSw0fSk/OjopKD86WzAtOWEtZl17MSw0fTpbMC05YS1mXXsxLDR9fCg/Oig/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSl8KD86KD86WzAtOWEtZl17MSw0fTopezAsNX1bMC05YS1mXXsxLDR9KT86OlswLTlhLWZdezEsNH18KD86KD86WzAtOWEtZl17MSw0fTopezAsNn1bMC05YS1mXXsxLDR9KT86Oil8W1Z2XVswLTlhLWZdK1xcLlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpdKylcXF18KD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pfCg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9XXwlWzAtOWEtZl17Mn0pKikoPzo6XFxkKik/KD86XFwvKD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz06QF18JVswLTlhLWZdezJ9KSopKnxcXC8oPzooPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKyg/OlxcLyg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSopP3woPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKyg/OlxcLyg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSopPyg/OlxcPyg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkAvP118JVswLTlhLWZdezJ9KSopPyg/OiMoPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpALz9dfCVbMC05YS1mXXsyfSkqKT8kL2k7XG4vLyB1cmktdGVtcGxhdGU6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2NTcwXG52YXIgVVJJVEVNUExBVEUgPSAvXig/Oig/OlteXFx4MDAtXFx4MjBcIic8PiVcXFxcXmB7fH1dfCVbMC05YS1mXXsyfSl8XFx7WysjLi87PyY9LCFAfF0/KD86W2EtejAtOV9dfCVbMC05YS1mXXsyfSkrKD86OlsxLTldWzAtOV17MCwzfXxcXCopPyg/OiwoPzpbYS16MC05X118JVswLTlhLWZdezJ9KSsoPzo6WzEtOV1bMC05XXswLDN9fFxcKik/KSpcXH0pKiQvaTtcbi8vIEZvciB0aGUgc291cmNlOiBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9kcGVyaW5pLzcyOTI5NFxuLy8gRm9yIHRlc3QgY2FzZXM6IGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9kZW1vL3VybC1yZWdleFxuLy8gQHRvZG8gRGVsZXRlIGN1cnJlbnQgVVJMIGluIGZhdm91ciBvZiB0aGUgY29tbWVudGVkIG91dCBVUkwgcnVsZSB3aGVuIHRoaXMgaXNzdWUgaXMgZml4ZWQgaHR0cHM6Ly9naXRodWIuY29tL2VzbGludC9lc2xpbnQvaXNzdWVzLzc5ODMuXG4vLyB2YXIgVVJMID0gL14oPzooPzpodHRwcz98ZnRwKTpcXC9cXC8pKD86XFxTKyg/OjpcXFMqKT9AKT8oPzooPyExMCg/OlxcLlxcZHsxLDN9KXszfSkoPyExMjcoPzpcXC5cXGR7MSwzfSl7M30pKD8hMTY5XFwuMjU0KD86XFwuXFxkezEsM30pezJ9KSg/ITE5MlxcLjE2OCg/OlxcLlxcZHsxLDN9KXsyfSkoPyExNzJcXC4oPzoxWzYtOV18MlxcZHwzWzAtMV0pKD86XFwuXFxkezEsM30pezJ9KSg/OlsxLTldXFxkP3wxXFxkXFxkfDJbMDFdXFxkfDIyWzAtM10pKD86XFwuKD86MT9cXGR7MSwyfXwyWzAtNF1cXGR8MjVbMC01XSkpezJ9KD86XFwuKD86WzEtOV1cXGQ/fDFcXGRcXGR8MlswLTRdXFxkfDI1WzAtNF0pKXwoPzooPzpbYS16XFx1ezAwYTF9LVxcdXtmZmZmfTAtOV0rLSkqW2EtelxcdXswMGExfS1cXHV7ZmZmZn0wLTldKykoPzpcXC4oPzpbYS16XFx1ezAwYTF9LVxcdXtmZmZmfTAtOV0rLSkqW2EtelxcdXswMGExfS1cXHV7ZmZmZn0wLTldKykqKD86XFwuKD86W2EtelxcdXswMGExfS1cXHV7ZmZmZn1dezIsfSkpKSg/OjpcXGR7Miw1fSk/KD86XFwvW15cXHNdKik/JC9pdTtcbnZhciBVUkwgPSAvXig/Oig/Omh0dHBbc1xcdTAxN0ZdP3xmdHApOlxcL1xcLykoPzooPzpbXFwwLVxceDA4XFx4MEUtXFx4MUYhLVxceDlGXFx4QTEtXFx1MTY3RlxcdTE2ODEtXFx1MUZGRlxcdTIwMEItXFx1MjAyN1xcdTIwMkEtXFx1MjAyRVxcdTIwMzAtXFx1MjA1RVxcdTIwNjAtXFx1MkZGRlxcdTMwMDEtXFx1RDdGRlxcdUUwMDAtXFx1RkVGRVxcdUZGMDAtXFx1RkZGRl18W1xcdUQ4MDAtXFx1REJGRl1bXFx1REMwMC1cXHVERkZGXXxbXFx1RDgwMC1cXHVEQkZGXSg/IVtcXHVEQzAwLVxcdURGRkZdKXwoPzpbXlxcdUQ4MDAtXFx1REJGRl18XilbXFx1REMwMC1cXHVERkZGXSkrKD86Oig/OltcXDAtXFx4MDhcXHgwRS1cXHgxRiEtXFx4OUZcXHhBMS1cXHUxNjdGXFx1MTY4MS1cXHUxRkZGXFx1MjAwQi1cXHUyMDI3XFx1MjAyQS1cXHUyMDJFXFx1MjAzMC1cXHUyMDVFXFx1MjA2MC1cXHUyRkZGXFx1MzAwMS1cXHVEN0ZGXFx1RTAwMC1cXHVGRUZFXFx1RkYwMC1cXHVGRkZGXXxbXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdKSopP0ApPyg/Oig/ITEwKD86XFwuWzAtOV17MSwzfSl7M30pKD8hMTI3KD86XFwuWzAtOV17MSwzfSl7M30pKD8hMTY5XFwuMjU0KD86XFwuWzAtOV17MSwzfSl7Mn0pKD8hMTkyXFwuMTY4KD86XFwuWzAtOV17MSwzfSl7Mn0pKD8hMTcyXFwuKD86MVs2LTldfDJbMC05XXwzWzAxXSkoPzpcXC5bMC05XXsxLDN9KXsyfSkoPzpbMS05XVswLTldP3wxWzAtOV1bMC05XXwyWzAxXVswLTldfDIyWzAtM10pKD86XFwuKD86MT9bMC05XXsxLDJ9fDJbMC00XVswLTldfDI1WzAtNV0pKXsyfSg/OlxcLig/OlsxLTldWzAtOV0/fDFbMC05XVswLTldfDJbMC00XVswLTldfDI1WzAtNF0pKXwoPzooPzooPzpbMC05YS16XFx4QTEtXFx1RDdGRlxcdUUwMDAtXFx1RkZGRl18W1xcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD86W15cXHVEODAwLVxcdURCRkZdfF4pW1xcdURDMDAtXFx1REZGRl0pKy0pKig/OlswLTlhLXpcXHhBMS1cXHVEN0ZGXFx1RTAwMC1cXHVGRkZGXXxbXFx1RDgwMC1cXHVEQkZGXSg/IVtcXHVEQzAwLVxcdURGRkZdKXwoPzpbXlxcdUQ4MDAtXFx1REJGRl18XilbXFx1REMwMC1cXHVERkZGXSkrKSg/OlxcLig/Oig/OlswLTlhLXpcXHhBMS1cXHVEN0ZGXFx1RTAwMC1cXHVGRkZGXXxbXFx1RDgwMC1cXHVEQkZGXSg/IVtcXHVEQzAwLVxcdURGRkZdKXwoPzpbXlxcdUQ4MDAtXFx1REJGRl18XilbXFx1REMwMC1cXHVERkZGXSkrLSkqKD86WzAtOWEtelxceEExLVxcdUQ3RkZcXHVFMDAwLVxcdUZGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdKSspKig/OlxcLig/Oig/OlthLXpcXHhBMS1cXHVEN0ZGXFx1RTAwMC1cXHVGRkZGXXxbXFx1RDgwMC1cXHVEQkZGXSg/IVtcXHVEQzAwLVxcdURGRkZdKXwoPzpbXlxcdUQ4MDAtXFx1REJGRl18XilbXFx1REMwMC1cXHVERkZGXSl7Mix9KSkpKD86OlswLTldezIsNX0pPyg/OlxcLyg/OltcXDAtXFx4MDhcXHgwRS1cXHgxRiEtXFx4OUZcXHhBMS1cXHUxNjdGXFx1MTY4MS1cXHUxRkZGXFx1MjAwQi1cXHUyMDI3XFx1MjAyQS1cXHUyMDJFXFx1MjAzMC1cXHUyMDVFXFx1MjA2MC1cXHUyRkZGXFx1MzAwMS1cXHVEN0ZGXFx1RTAwMC1cXHVGRUZFXFx1RkYwMC1cXHVGRkZGXXxbXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdKSopPyQvaTtcbnZhciBVVUlEID0gL14oPzp1cm46dXVpZDopP1swLTlhLWZdezh9LSg/OlswLTlhLWZdezR9LSl7M31bMC05YS1mXXsxMn0kL2k7XG52YXIgSlNPTl9QT0lOVEVSID0gL14oPzpcXC8oPzpbXn4vXXx+MHx+MSkqKSokLztcbnZhciBKU09OX1BPSU5URVJfVVJJX0ZSQUdNRU5UID0gL14jKD86XFwvKD86W2EtejAtOV9cXC0uISQmJygpKissOzo9QF18JVswLTlhLWZdezJ9fH4wfH4xKSopKiQvaTtcbnZhciBSRUxBVElWRV9KU09OX1BPSU5URVIgPSAvXig/OjB8WzEtOV1bMC05XSopKD86I3woPzpcXC8oPzpbXn4vXXx+MHx+MSkqKSopJC87XG5cblxubW9kdWxlLmV4cG9ydHMgPSBmb3JtYXRzO1xuXG5mdW5jdGlvbiBmb3JtYXRzKG1vZGUpIHtcbiAgbW9kZSA9IG1vZGUgPT0gJ2Z1bGwnID8gJ2Z1bGwnIDogJ2Zhc3QnO1xuICByZXR1cm4gdXRpbC5jb3B5KGZvcm1hdHNbbW9kZV0pO1xufVxuXG5cbmZvcm1hdHMuZmFzdCA9IHtcbiAgLy8gZGF0ZTogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICBkYXRlOiAvXlxcZFxcZFxcZFxcZC1bMC0xXVxcZC1bMC0zXVxcZCQvLFxuICAvLyBkYXRlLXRpbWU6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjc2VjdGlvbi01LjZcbiAgdGltZTogL14oPzpbMC0yXVxcZDpbMC01XVxcZDpbMC01XVxcZHwyMzo1OTo2MCkoPzpcXC5cXGQrKT8oPzp6fFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/KT8kL2ksXG4gICdkYXRlLXRpbWUnOiAvXlxcZFxcZFxcZFxcZC1bMC0xXVxcZC1bMC0zXVxcZFt0XFxzXSg/OlswLTJdXFxkOlswLTVdXFxkOlswLTVdXFxkfDIzOjU5OjYwKSg/OlxcLlxcZCspPyg/Onp8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8pJC9pLFxuICAvLyB1cmk6IGh0dHBzOi8vZ2l0aHViLmNvbS9tYWZpbnRvc2gvaXMtbXktanNvbi12YWxpZC9ibG9iL21hc3Rlci9mb3JtYXRzLmpzXG4gIHVyaTogL14oPzpbYS16XVthLXowLTkrXFwtLl0qOikoPzpcXC8/XFwvKT9bXlxcc10qJC9pLFxuICAndXJpLXJlZmVyZW5jZSc6IC9eKD86KD86W2Etel1bYS16MC05K1xcLS5dKjopP1xcLz9cXC8pPyg/OlteXFxcXFxccyNdW15cXHMjXSopPyg/OiNbXlxcXFxcXHNdKik/JC9pLFxuICAndXJpLXRlbXBsYXRlJzogVVJJVEVNUExBVEUsXG4gIHVybDogVVJMLFxuICAvLyBlbWFpbCAoc291cmNlcyBmcm9tIGpzZW4gdmFsaWRhdG9yKTpcbiAgLy8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8yMDEzMjMvdXNpbmctYS1yZWd1bGFyLWV4cHJlc3Npb24tdG8tdmFsaWRhdGUtYW4tZW1haWwtYWRkcmVzcyNhbnN3ZXItODgyOTM2M1xuICAvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNS9mb3Jtcy5odG1sI3ZhbGlkLWUtbWFpbC1hZGRyZXNzIChzZWFyY2ggZm9yICd3aWxsZnVsIHZpb2xhdGlvbicpXG4gIGVtYWlsOiAvXlthLXowLTkuISMkJSYnKisvPT9eX2B7fH1+LV0rQFthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPyg/OlxcLlthLXowLTldKD86W2EtejAtOS1dezAsNjF9W2EtejAtOV0pPykqJC9pLFxuICBob3N0bmFtZTogSE9TVE5BTUUsXG4gIC8vIG9wdGltaXplZCBodHRwczovL3d3dy5zYWZhcmlib29rc29ubGluZS5jb20vbGlicmFyeS92aWV3L3JlZ3VsYXItZXhwcmVzc2lvbnMtY29va2Jvb2svOTc4MDU5NjgwMjgzNy9jaDA3czE2Lmh0bWxcbiAgaXB2NDogL14oPzooPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPykkLyxcbiAgLy8gb3B0aW1pemVkIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNTM0OTcvcmVndWxhci1leHByZXNzaW9uLXRoYXQtbWF0Y2hlcy12YWxpZC1pcHY2LWFkZHJlc3Nlc1xuICBpcHY2OiAvXlxccyooPzooPzooPzpbMC05YS1mXXsxLDR9Oil7N30oPzpbMC05YS1mXXsxLDR9fDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7Nn0oPzo6WzAtOWEtZl17MSw0fXwoPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezV9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsMn0pfDooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezR9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsM30pfCg/Oig/OjpbMC05YS1mXXsxLDR9KT86KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7M30oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw0fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsMn06KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7Mn0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw1fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsM306KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MX0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw2fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsNH06KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzo6KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsN30pfCg/Oig/OjpbMC05YS1mXXsxLDR9KXswLDV9Oig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSkpKD86JS4rKT9cXHMqJC9pLFxuICByZWdleDogcmVnZXgsXG4gIC8vIHV1aWQ6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzQxMjJcbiAgdXVpZDogVVVJRCxcbiAgLy8gSlNPTi1wb2ludGVyOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNjkwMVxuICAvLyB1cmkgZnJhZ21lbnQ6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzOTg2I2FwcGVuZGl4LUFcbiAgJ2pzb24tcG9pbnRlcic6IEpTT05fUE9JTlRFUixcbiAgJ2pzb24tcG9pbnRlci11cmktZnJhZ21lbnQnOiBKU09OX1BPSU5URVJfVVJJX0ZSQUdNRU5ULFxuICAvLyByZWxhdGl2ZSBKU09OLXBvaW50ZXI6IGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL2RyYWZ0LWx1ZmYtcmVsYXRpdmUtanNvbi1wb2ludGVyLTAwXG4gICdyZWxhdGl2ZS1qc29uLXBvaW50ZXInOiBSRUxBVElWRV9KU09OX1BPSU5URVJcbn07XG5cblxuZm9ybWF0cy5mdWxsID0ge1xuICBkYXRlOiBkYXRlLFxuICB0aW1lOiB0aW1lLFxuICAnZGF0ZS10aW1lJzogZGF0ZV90aW1lLFxuICB1cmk6IHVyaSxcbiAgJ3VyaS1yZWZlcmVuY2UnOiBVUklSRUYsXG4gICd1cmktdGVtcGxhdGUnOiBVUklURU1QTEFURSxcbiAgdXJsOiBVUkwsXG4gIGVtYWlsOiAvXlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSsoPzpcXC5bYS16MC05ISMkJSYnKisvPT9eX2B7fH1+LV0rKSpAKD86W2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pP1xcLikrW2EtejAtOV0oPzpbYS16MC05LV0qW2EtejAtOV0pPyQvaSxcbiAgaG9zdG5hbWU6IEhPU1ROQU1FLFxuICBpcHY0OiAvXig/Oig/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSQvLFxuICBpcHY2OiAvXlxccyooPzooPzooPzpbMC05YS1mXXsxLDR9Oil7N30oPzpbMC05YS1mXXsxLDR9fDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7Nn0oPzo6WzAtOWEtZl17MSw0fXwoPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezV9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsMn0pfDooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KXw6KSl8KD86KD86WzAtOWEtZl17MSw0fTopezR9KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsM30pfCg/Oig/OjpbMC05YS1mXXsxLDR9KT86KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7M30oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw0fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsMn06KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7Mn0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw1fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsM306KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MX0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw2fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsNH06KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKXwoPzo6KD86KD86KD86OlswLTlhLWZdezEsNH0pezEsN30pfCg/Oig/OjpbMC05YS1mXXsxLDR9KXswLDV9Oig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pKXw6KSkpKD86JS4rKT9cXHMqJC9pLFxuICByZWdleDogcmVnZXgsXG4gIHV1aWQ6IFVVSUQsXG4gICdqc29uLXBvaW50ZXInOiBKU09OX1BPSU5URVIsXG4gICdqc29uLXBvaW50ZXItdXJpLWZyYWdtZW50JzogSlNPTl9QT0lOVEVSX1VSSV9GUkFHTUVOVCxcbiAgJ3JlbGF0aXZlLWpzb24tcG9pbnRlcic6IFJFTEFUSVZFX0pTT05fUE9JTlRFUlxufTtcblxuXG5mdW5jdGlvbiBpc0xlYXBZZWFyKHllYXIpIHtcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjYXBwZW5kaXgtQ1xuICByZXR1cm4geWVhciAlIDQgPT09IDAgJiYgKHllYXIgJSAxMDAgIT09IDAgfHwgeWVhciAlIDQwMCA9PT0gMCk7XG59XG5cblxuZnVuY3Rpb24gZGF0ZShzdHIpIHtcbiAgLy8gZnVsbC1kYXRlIGZyb20gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICB2YXIgbWF0Y2hlcyA9IHN0ci5tYXRjaChEQVRFKTtcbiAgaWYgKCFtYXRjaGVzKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIHllYXIgPSArbWF0Y2hlc1sxXTtcbiAgdmFyIG1vbnRoID0gK21hdGNoZXNbMl07XG4gIHZhciBkYXkgPSArbWF0Y2hlc1szXTtcblxuICByZXR1cm4gbW9udGggPj0gMSAmJiBtb250aCA8PSAxMiAmJiBkYXkgPj0gMSAmJlxuICAgICAgICAgIGRheSA8PSAobW9udGggPT0gMiAmJiBpc0xlYXBZZWFyKHllYXIpID8gMjkgOiBEQVlTW21vbnRoXSk7XG59XG5cblxuZnVuY3Rpb24gdGltZShzdHIsIGZ1bGwpIHtcbiAgdmFyIG1hdGNoZXMgPSBzdHIubWF0Y2goVElNRSk7XG4gIGlmICghbWF0Y2hlcykgcmV0dXJuIGZhbHNlO1xuXG4gIHZhciBob3VyID0gbWF0Y2hlc1sxXTtcbiAgdmFyIG1pbnV0ZSA9IG1hdGNoZXNbMl07XG4gIHZhciBzZWNvbmQgPSBtYXRjaGVzWzNdO1xuICB2YXIgdGltZVpvbmUgPSBtYXRjaGVzWzVdO1xuICByZXR1cm4gKChob3VyIDw9IDIzICYmIG1pbnV0ZSA8PSA1OSAmJiBzZWNvbmQgPD0gNTkpIHx8XG4gICAgICAgICAgKGhvdXIgPT0gMjMgJiYgbWludXRlID09IDU5ICYmIHNlY29uZCA9PSA2MCkpICYmXG4gICAgICAgICAoIWZ1bGwgfHwgdGltZVpvbmUpO1xufVxuXG5cbnZhciBEQVRFX1RJTUVfU0VQQVJBVE9SID0gL3R8XFxzL2k7XG5mdW5jdGlvbiBkYXRlX3RpbWUoc3RyKSB7XG4gIC8vIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzMzMzkjc2VjdGlvbi01LjZcbiAgdmFyIGRhdGVUaW1lID0gc3RyLnNwbGl0KERBVEVfVElNRV9TRVBBUkFUT1IpO1xuICByZXR1cm4gZGF0ZVRpbWUubGVuZ3RoID09IDIgJiYgZGF0ZShkYXRlVGltZVswXSkgJiYgdGltZShkYXRlVGltZVsxXSwgdHJ1ZSk7XG59XG5cblxudmFyIE5PVF9VUklfRlJBR01FTlQgPSAvXFwvfDovO1xuZnVuY3Rpb24gdXJpKHN0cikge1xuICAvLyBodHRwOi8vam1yd2FyZS5jb20vYXJ0aWNsZXMvMjAwOS91cmlfcmVnZXhwL1VSSV9yZWdleC5odG1sICsgb3B0aW9uYWwgcHJvdG9jb2wgKyByZXF1aXJlZCBcIi5cIlxuICByZXR1cm4gTk9UX1VSSV9GUkFHTUVOVC50ZXN0KHN0cikgJiYgVVJJLnRlc3Qoc3RyKTtcbn1cblxuXG52YXIgWl9BTkNIT1IgPSAvW15cXFxcXVxcXFxaLztcbmZ1bmN0aW9uIHJlZ2V4KHN0cikge1xuICBpZiAoWl9BTkNIT1IudGVzdChzdHIpKSByZXR1cm4gZmFsc2U7XG4gIHRyeSB7XG4gICAgbmV3IFJlZ0V4cChzdHIpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHJlc29sdmUgPSByZXF1aXJlKCcuL3Jlc29sdmUnKVxuICAsIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuICAsIGVycm9yQ2xhc3NlcyA9IHJlcXVpcmUoJy4vZXJyb3JfY2xhc3NlcycpXG4gICwgc3RhYmxlU3RyaW5naWZ5ID0gcmVxdWlyZSgnZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnknKTtcblxudmFyIHZhbGlkYXRlR2VuZXJhdG9yID0gcmVxdWlyZSgnLi4vZG90anMvdmFsaWRhdGUnKTtcblxuLyoqXG4gKiBGdW5jdGlvbnMgYmVsb3cgYXJlIHVzZWQgaW5zaWRlIGNvbXBpbGVkIHZhbGlkYXRpb25zIGZ1bmN0aW9uXG4gKi9cblxudmFyIHVjczJsZW5ndGggPSB1dGlsLnVjczJsZW5ndGg7XG52YXIgZXF1YWwgPSByZXF1aXJlKCdmYXN0LWRlZXAtZXF1YWwnKTtcblxuLy8gdGhpcyBlcnJvciBpcyB0aHJvd24gYnkgYXN5bmMgc2NoZW1hcyB0byByZXR1cm4gdmFsaWRhdGlvbiBlcnJvcnMgdmlhIGV4Y2VwdGlvblxudmFyIFZhbGlkYXRpb25FcnJvciA9IGVycm9yQ2xhc3Nlcy5WYWxpZGF0aW9uO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbXBpbGU7XG5cblxuLyoqXG4gKiBDb21waWxlcyBzY2hlbWEgdG8gdmFsaWRhdGlvbiBmdW5jdGlvblxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSAge09iamVjdH0gc2NoZW1hIHNjaGVtYSBvYmplY3RcbiAqIEBwYXJhbSAge09iamVjdH0gcm9vdCBvYmplY3Qgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcm9vdCBzY2hlbWEgZm9yIHRoaXMgc2NoZW1hXG4gKiBAcGFyYW0gIHtPYmplY3R9IGxvY2FsUmVmcyB0aGUgaGFzaCBvZiBsb2NhbCByZWZlcmVuY2VzIGluc2lkZSB0aGUgc2NoZW1hIChjcmVhdGVkIGJ5IHJlc29sdmUuaWQpLCB1c2VkIGZvciBpbmxpbmUgcmVzb2x1dGlvblxuICogQHBhcmFtICB7U3RyaW5nfSBiYXNlSWQgYmFzZSBJRCBmb3IgSURzIGluIHRoZSBzY2hlbWFcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSB2YWxpZGF0aW9uIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGUoc2NoZW1hLCByb290LCBsb2NhbFJlZnMsIGJhc2VJZCkge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlLCBldmlsOiB0cnVlICovXG4gIC8qIGVzbGludCBuby1zaGFkb3c6IDAgKi9cbiAgdmFyIHNlbGYgPSB0aGlzXG4gICAgLCBvcHRzID0gdGhpcy5fb3B0c1xuICAgICwgcmVmVmFsID0gWyB1bmRlZmluZWQgXVxuICAgICwgcmVmcyA9IHt9XG4gICAgLCBwYXR0ZXJucyA9IFtdXG4gICAgLCBwYXR0ZXJuc0hhc2ggPSB7fVxuICAgICwgZGVmYXVsdHMgPSBbXVxuICAgICwgZGVmYXVsdHNIYXNoID0ge31cbiAgICAsIGN1c3RvbVJ1bGVzID0gW107XG5cbiAgcm9vdCA9IHJvb3QgfHwgeyBzY2hlbWE6IHNjaGVtYSwgcmVmVmFsOiByZWZWYWwsIHJlZnM6IHJlZnMgfTtcblxuICB2YXIgYyA9IGNoZWNrQ29tcGlsaW5nLmNhbGwodGhpcywgc2NoZW1hLCByb290LCBiYXNlSWQpO1xuICB2YXIgY29tcGlsYXRpb24gPSB0aGlzLl9jb21waWxhdGlvbnNbYy5pbmRleF07XG4gIGlmIChjLmNvbXBpbGluZykgcmV0dXJuIChjb21waWxhdGlvbi5jYWxsVmFsaWRhdGUgPSBjYWxsVmFsaWRhdGUpO1xuXG4gIHZhciBmb3JtYXRzID0gdGhpcy5fZm9ybWF0cztcbiAgdmFyIFJVTEVTID0gdGhpcy5SVUxFUztcblxuICB0cnkge1xuICAgIHZhciB2ID0gbG9jYWxDb21waWxlKHNjaGVtYSwgcm9vdCwgbG9jYWxSZWZzLCBiYXNlSWQpO1xuICAgIGNvbXBpbGF0aW9uLnZhbGlkYXRlID0gdjtcbiAgICB2YXIgY3YgPSBjb21waWxhdGlvbi5jYWxsVmFsaWRhdGU7XG4gICAgaWYgKGN2KSB7XG4gICAgICBjdi5zY2hlbWEgPSB2LnNjaGVtYTtcbiAgICAgIGN2LmVycm9ycyA9IG51bGw7XG4gICAgICBjdi5yZWZzID0gdi5yZWZzO1xuICAgICAgY3YucmVmVmFsID0gdi5yZWZWYWw7XG4gICAgICBjdi5yb290ID0gdi5yb290O1xuICAgICAgY3YuJGFzeW5jID0gdi4kYXN5bmM7XG4gICAgICBpZiAob3B0cy5zb3VyY2VDb2RlKSBjdi5zb3VyY2UgPSB2LnNvdXJjZTtcbiAgICB9XG4gICAgcmV0dXJuIHY7XG4gIH0gZmluYWxseSB7XG4gICAgZW5kQ29tcGlsaW5nLmNhbGwodGhpcywgc2NoZW1hLCByb290LCBiYXNlSWQpO1xuICB9XG5cbiAgLyogQHRoaXMgICB7Kn0gLSBjdXN0b20gY29udGV4dCwgc2VlIHBhc3NDb250ZXh0IG9wdGlvbiAqL1xuICBmdW5jdGlvbiBjYWxsVmFsaWRhdGUoKSB7XG4gICAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICAgIHZhciB2YWxpZGF0ZSA9IGNvbXBpbGF0aW9uLnZhbGlkYXRlO1xuICAgIHZhciByZXN1bHQgPSB2YWxpZGF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGNhbGxWYWxpZGF0ZS5lcnJvcnMgPSB2YWxpZGF0ZS5lcnJvcnM7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvY2FsQ29tcGlsZShfc2NoZW1hLCBfcm9vdCwgbG9jYWxSZWZzLCBiYXNlSWQpIHtcbiAgICB2YXIgaXNSb290ID0gIV9yb290IHx8IChfcm9vdCAmJiBfcm9vdC5zY2hlbWEgPT0gX3NjaGVtYSk7XG4gICAgaWYgKF9yb290LnNjaGVtYSAhPSByb290LnNjaGVtYSlcbiAgICAgIHJldHVybiBjb21waWxlLmNhbGwoc2VsZiwgX3NjaGVtYSwgX3Jvb3QsIGxvY2FsUmVmcywgYmFzZUlkKTtcblxuICAgIHZhciAkYXN5bmMgPSBfc2NoZW1hLiRhc3luYyA9PT0gdHJ1ZTtcblxuICAgIHZhciBzb3VyY2VDb2RlID0gdmFsaWRhdGVHZW5lcmF0b3Ioe1xuICAgICAgaXNUb3A6IHRydWUsXG4gICAgICBzY2hlbWE6IF9zY2hlbWEsXG4gICAgICBpc1Jvb3Q6IGlzUm9vdCxcbiAgICAgIGJhc2VJZDogYmFzZUlkLFxuICAgICAgcm9vdDogX3Jvb3QsXG4gICAgICBzY2hlbWFQYXRoOiAnJyxcbiAgICAgIGVyclNjaGVtYVBhdGg6ICcjJyxcbiAgICAgIGVycm9yUGF0aDogJ1wiXCInLFxuICAgICAgTWlzc2luZ1JlZkVycm9yOiBlcnJvckNsYXNzZXMuTWlzc2luZ1JlZixcbiAgICAgIFJVTEVTOiBSVUxFUyxcbiAgICAgIHZhbGlkYXRlOiB2YWxpZGF0ZUdlbmVyYXRvcixcbiAgICAgIHV0aWw6IHV0aWwsXG4gICAgICByZXNvbHZlOiByZXNvbHZlLFxuICAgICAgcmVzb2x2ZVJlZjogcmVzb2x2ZVJlZixcbiAgICAgIHVzZVBhdHRlcm46IHVzZVBhdHRlcm4sXG4gICAgICB1c2VEZWZhdWx0OiB1c2VEZWZhdWx0LFxuICAgICAgdXNlQ3VzdG9tUnVsZTogdXNlQ3VzdG9tUnVsZSxcbiAgICAgIG9wdHM6IG9wdHMsXG4gICAgICBmb3JtYXRzOiBmb3JtYXRzLFxuICAgICAgbG9nZ2VyOiBzZWxmLmxvZ2dlcixcbiAgICAgIHNlbGY6IHNlbGZcbiAgICB9KTtcblxuICAgIHNvdXJjZUNvZGUgPSB2YXJzKHJlZlZhbCwgcmVmVmFsQ29kZSkgKyB2YXJzKHBhdHRlcm5zLCBwYXR0ZXJuQ29kZSlcbiAgICAgICAgICAgICAgICAgICArIHZhcnMoZGVmYXVsdHMsIGRlZmF1bHRDb2RlKSArIHZhcnMoY3VzdG9tUnVsZXMsIGN1c3RvbVJ1bGVDb2RlKVxuICAgICAgICAgICAgICAgICAgICsgc291cmNlQ29kZTtcblxuICAgIGlmIChvcHRzLnByb2Nlc3NDb2RlKSBzb3VyY2VDb2RlID0gb3B0cy5wcm9jZXNzQ29kZShzb3VyY2VDb2RlLCBfc2NoZW1hKTtcbiAgICAvLyBjb25zb2xlLmxvZygnXFxuXFxuXFxuICoqKiBcXG4nLCBKU09OLnN0cmluZ2lmeShzb3VyY2VDb2RlKSk7XG4gICAgdmFyIHZhbGlkYXRlO1xuICAgIHRyeSB7XG4gICAgICB2YXIgbWFrZVZhbGlkYXRlID0gbmV3IEZ1bmN0aW9uKFxuICAgICAgICAnc2VsZicsXG4gICAgICAgICdSVUxFUycsXG4gICAgICAgICdmb3JtYXRzJyxcbiAgICAgICAgJ3Jvb3QnLFxuICAgICAgICAncmVmVmFsJyxcbiAgICAgICAgJ2RlZmF1bHRzJyxcbiAgICAgICAgJ2N1c3RvbVJ1bGVzJyxcbiAgICAgICAgJ2VxdWFsJyxcbiAgICAgICAgJ3VjczJsZW5ndGgnLFxuICAgICAgICAnVmFsaWRhdGlvbkVycm9yJyxcbiAgICAgICAgc291cmNlQ29kZVxuICAgICAgKTtcblxuICAgICAgdmFsaWRhdGUgPSBtYWtlVmFsaWRhdGUoXG4gICAgICAgIHNlbGYsXG4gICAgICAgIFJVTEVTLFxuICAgICAgICBmb3JtYXRzLFxuICAgICAgICByb290LFxuICAgICAgICByZWZWYWwsXG4gICAgICAgIGRlZmF1bHRzLFxuICAgICAgICBjdXN0b21SdWxlcyxcbiAgICAgICAgZXF1YWwsXG4gICAgICAgIHVjczJsZW5ndGgsXG4gICAgICAgIFZhbGlkYXRpb25FcnJvclxuICAgICAgKTtcblxuICAgICAgcmVmVmFsWzBdID0gdmFsaWRhdGU7XG4gICAgfSBjYXRjaChlKSB7XG4gICAgICBzZWxmLmxvZ2dlci5lcnJvcignRXJyb3IgY29tcGlsaW5nIHNjaGVtYSwgZnVuY3Rpb24gY29kZTonLCBzb3VyY2VDb2RlKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUuc2NoZW1hID0gX3NjaGVtYTtcbiAgICB2YWxpZGF0ZS5lcnJvcnMgPSBudWxsO1xuICAgIHZhbGlkYXRlLnJlZnMgPSByZWZzO1xuICAgIHZhbGlkYXRlLnJlZlZhbCA9IHJlZlZhbDtcbiAgICB2YWxpZGF0ZS5yb290ID0gaXNSb290ID8gdmFsaWRhdGUgOiBfcm9vdDtcbiAgICBpZiAoJGFzeW5jKSB2YWxpZGF0ZS4kYXN5bmMgPSB0cnVlO1xuICAgIGlmIChvcHRzLnNvdXJjZUNvZGUgPT09IHRydWUpIHtcbiAgICAgIHZhbGlkYXRlLnNvdXJjZSA9IHtcbiAgICAgICAgY29kZTogc291cmNlQ29kZSxcbiAgICAgICAgcGF0dGVybnM6IHBhdHRlcm5zLFxuICAgICAgICBkZWZhdWx0czogZGVmYXVsdHNcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzb2x2ZVJlZihiYXNlSWQsIHJlZiwgaXNSb290KSB7XG4gICAgcmVmID0gcmVzb2x2ZS51cmwoYmFzZUlkLCByZWYpO1xuICAgIHZhciByZWZJbmRleCA9IHJlZnNbcmVmXTtcbiAgICB2YXIgX3JlZlZhbCwgcmVmQ29kZTtcbiAgICBpZiAocmVmSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgX3JlZlZhbCA9IHJlZlZhbFtyZWZJbmRleF07XG4gICAgICByZWZDb2RlID0gJ3JlZlZhbFsnICsgcmVmSW5kZXggKyAnXSc7XG4gICAgICByZXR1cm4gcmVzb2x2ZWRSZWYoX3JlZlZhbCwgcmVmQ29kZSk7XG4gICAgfVxuICAgIGlmICghaXNSb290ICYmIHJvb3QucmVmcykge1xuICAgICAgdmFyIHJvb3RSZWZJZCA9IHJvb3QucmVmc1tyZWZdO1xuICAgICAgaWYgKHJvb3RSZWZJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIF9yZWZWYWwgPSByb290LnJlZlZhbFtyb290UmVmSWRdO1xuICAgICAgICByZWZDb2RlID0gYWRkTG9jYWxSZWYocmVmLCBfcmVmVmFsKTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVkUmVmKF9yZWZWYWwsIHJlZkNvZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlZkNvZGUgPSBhZGRMb2NhbFJlZihyZWYpO1xuICAgIHZhciB2ID0gcmVzb2x2ZS5jYWxsKHNlbGYsIGxvY2FsQ29tcGlsZSwgcm9vdCwgcmVmKTtcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgbG9jYWxTY2hlbWEgPSBsb2NhbFJlZnMgJiYgbG9jYWxSZWZzW3JlZl07XG4gICAgICBpZiAobG9jYWxTY2hlbWEpIHtcbiAgICAgICAgdiA9IHJlc29sdmUuaW5saW5lUmVmKGxvY2FsU2NoZW1hLCBvcHRzLmlubGluZVJlZnMpXG4gICAgICAgICAgICA/IGxvY2FsU2NoZW1hXG4gICAgICAgICAgICA6IGNvbXBpbGUuY2FsbChzZWxmLCBsb2NhbFNjaGVtYSwgcm9vdCwgbG9jYWxSZWZzLCBiYXNlSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlbW92ZUxvY2FsUmVmKHJlZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcGxhY2VMb2NhbFJlZihyZWYsIHYpO1xuICAgICAgcmV0dXJuIHJlc29sdmVkUmVmKHYsIHJlZkNvZGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZExvY2FsUmVmKHJlZiwgdikge1xuICAgIHZhciByZWZJZCA9IHJlZlZhbC5sZW5ndGg7XG4gICAgcmVmVmFsW3JlZklkXSA9IHY7XG4gICAgcmVmc1tyZWZdID0gcmVmSWQ7XG4gICAgcmV0dXJuICdyZWZWYWwnICsgcmVmSWQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVMb2NhbFJlZihyZWYpIHtcbiAgICBkZWxldGUgcmVmc1tyZWZdO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVwbGFjZUxvY2FsUmVmKHJlZiwgdikge1xuICAgIHZhciByZWZJZCA9IHJlZnNbcmVmXTtcbiAgICByZWZWYWxbcmVmSWRdID0gdjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc29sdmVkUmVmKHJlZlZhbCwgY29kZSkge1xuICAgIHJldHVybiB0eXBlb2YgcmVmVmFsID09ICdvYmplY3QnIHx8IHR5cGVvZiByZWZWYWwgPT0gJ2Jvb2xlYW4nXG4gICAgICAgICAgICA/IHsgY29kZTogY29kZSwgc2NoZW1hOiByZWZWYWwsIGlubGluZTogdHJ1ZSB9XG4gICAgICAgICAgICA6IHsgY29kZTogY29kZSwgJGFzeW5jOiByZWZWYWwgJiYgISFyZWZWYWwuJGFzeW5jIH07XG4gIH1cblxuICBmdW5jdGlvbiB1c2VQYXR0ZXJuKHJlZ2V4U3RyKSB7XG4gICAgdmFyIGluZGV4ID0gcGF0dGVybnNIYXNoW3JlZ2V4U3RyXTtcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5kZXggPSBwYXR0ZXJuc0hhc2hbcmVnZXhTdHJdID0gcGF0dGVybnMubGVuZ3RoO1xuICAgICAgcGF0dGVybnNbaW5kZXhdID0gcmVnZXhTdHI7XG4gICAgfVxuICAgIHJldHVybiAncGF0dGVybicgKyBpbmRleDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVzZURlZmF1bHQodmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICByZXR1cm4gJycgKyB2YWx1ZTtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiB1dGlsLnRvUXVvdGVkU3RyaW5nKHZhbHVlKTtcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICdudWxsJztcbiAgICAgICAgdmFyIHZhbHVlU3RyID0gc3RhYmxlU3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgdmFyIGluZGV4ID0gZGVmYXVsdHNIYXNoW3ZhbHVlU3RyXTtcbiAgICAgICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpbmRleCA9IGRlZmF1bHRzSGFzaFt2YWx1ZVN0cl0gPSBkZWZhdWx0cy5sZW5ndGg7XG4gICAgICAgICAgZGVmYXVsdHNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdkZWZhdWx0JyArIGluZGV4O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVzZUN1c3RvbVJ1bGUocnVsZSwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0KSB7XG4gICAgaWYgKHNlbGYuX29wdHMudmFsaWRhdGVTY2hlbWEgIT09IGZhbHNlKSB7XG4gICAgICB2YXIgZGVwcyA9IHJ1bGUuZGVmaW5pdGlvbi5kZXBlbmRlbmNpZXM7XG4gICAgICBpZiAoZGVwcyAmJiAhZGVwcy5ldmVyeShmdW5jdGlvbihrZXl3b3JkKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFyZW50U2NoZW1hLCBrZXl3b3JkKTtcbiAgICAgIH0pKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCBzY2hlbWEgbXVzdCBoYXZlIGFsbCByZXF1aXJlZCBrZXl3b3JkczogJyArIGRlcHMuam9pbignLCcpKTtcblxuICAgICAgdmFyIHZhbGlkYXRlU2NoZW1hID0gcnVsZS5kZWZpbml0aW9uLnZhbGlkYXRlU2NoZW1hO1xuICAgICAgaWYgKHZhbGlkYXRlU2NoZW1hKSB7XG4gICAgICAgIHZhciB2YWxpZCA9IHZhbGlkYXRlU2NoZW1hKHNjaGVtYSk7XG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICB2YXIgbWVzc2FnZSA9ICdrZXl3b3JkIHNjaGVtYSBpcyBpbnZhbGlkOiAnICsgc2VsZi5lcnJvcnNUZXh0KHZhbGlkYXRlU2NoZW1hLmVycm9ycyk7XG4gICAgICAgICAgaWYgKHNlbGYuX29wdHMudmFsaWRhdGVTY2hlbWEgPT0gJ2xvZycpIHNlbGYubG9nZ2VyLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNvbXBpbGUgPSBydWxlLmRlZmluaXRpb24uY29tcGlsZVxuICAgICAgLCBpbmxpbmUgPSBydWxlLmRlZmluaXRpb24uaW5saW5lXG4gICAgICAsIG1hY3JvID0gcnVsZS5kZWZpbml0aW9uLm1hY3JvO1xuXG4gICAgdmFyIHZhbGlkYXRlO1xuICAgIGlmIChjb21waWxlKSB7XG4gICAgICB2YWxpZGF0ZSA9IGNvbXBpbGUuY2FsbChzZWxmLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQpO1xuICAgIH0gZWxzZSBpZiAobWFjcm8pIHtcbiAgICAgIHZhbGlkYXRlID0gbWFjcm8uY2FsbChzZWxmLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQpO1xuICAgICAgaWYgKG9wdHMudmFsaWRhdGVTY2hlbWEgIT09IGZhbHNlKSBzZWxmLnZhbGlkYXRlU2NoZW1hKHZhbGlkYXRlLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKGlubGluZSkge1xuICAgICAgdmFsaWRhdGUgPSBpbmxpbmUuY2FsbChzZWxmLCBpdCwgcnVsZS5rZXl3b3JkLCBzY2hlbWEsIHBhcmVudFNjaGVtYSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbGlkYXRlID0gcnVsZS5kZWZpbml0aW9uLnZhbGlkYXRlO1xuICAgICAgaWYgKCF2YWxpZGF0ZSkgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjdXN0b20ga2V5d29yZCBcIicgKyBydWxlLmtleXdvcmQgKyAnXCJmYWlsZWQgdG8gY29tcGlsZScpO1xuXG4gICAgdmFyIGluZGV4ID0gY3VzdG9tUnVsZXMubGVuZ3RoO1xuICAgIGN1c3RvbVJ1bGVzW2luZGV4XSA9IHZhbGlkYXRlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGU6ICdjdXN0b21SdWxlJyArIGluZGV4LFxuICAgICAgdmFsaWRhdGU6IHZhbGlkYXRlXG4gICAgfTtcbiAgfVxufVxuXG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBzY2hlbWEgaXMgY3VycmVudGx5IGNvbXBpbGVkXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtICB7T2JqZWN0fSBzY2hlbWEgc2NoZW1hIHRvIGNvbXBpbGVcbiAqIEBwYXJhbSAge09iamVjdH0gcm9vdCByb290IG9iamVjdFxuICogQHBhcmFtICB7U3RyaW5nfSBiYXNlSWQgYmFzZSBzY2hlbWEgSURcbiAqIEByZXR1cm4ge09iamVjdH0gb2JqZWN0IHdpdGggcHJvcGVydGllcyBcImluZGV4XCIgKGNvbXBpbGF0aW9uIGluZGV4KSBhbmQgXCJjb21waWxpbmdcIiAoYm9vbGVhbilcbiAqL1xuZnVuY3Rpb24gY2hlY2tDb21waWxpbmcoc2NoZW1hLCByb290LCBiYXNlSWQpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgaW5kZXggPSBjb21wSW5kZXguY2FsbCh0aGlzLCBzY2hlbWEsIHJvb3QsIGJhc2VJZCk7XG4gIGlmIChpbmRleCA+PSAwKSByZXR1cm4geyBpbmRleDogaW5kZXgsIGNvbXBpbGluZzogdHJ1ZSB9O1xuICBpbmRleCA9IHRoaXMuX2NvbXBpbGF0aW9ucy5sZW5ndGg7XG4gIHRoaXMuX2NvbXBpbGF0aW9uc1tpbmRleF0gPSB7XG4gICAgc2NoZW1hOiBzY2hlbWEsXG4gICAgcm9vdDogcm9vdCxcbiAgICBiYXNlSWQ6IGJhc2VJZFxuICB9O1xuICByZXR1cm4geyBpbmRleDogaW5kZXgsIGNvbXBpbGluZzogZmFsc2UgfTtcbn1cblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIHNjaGVtYSBmcm9tIHRoZSBjdXJyZW50bHkgY29tcGlsZWQgbGlzdFxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSAge09iamVjdH0gc2NoZW1hIHNjaGVtYSB0byBjb21waWxlXG4gKiBAcGFyYW0gIHtPYmplY3R9IHJvb3Qgcm9vdCBvYmplY3RcbiAqIEBwYXJhbSAge1N0cmluZ30gYmFzZUlkIGJhc2Ugc2NoZW1hIElEXG4gKi9cbmZ1bmN0aW9uIGVuZENvbXBpbGluZyhzY2hlbWEsIHJvb3QsIGJhc2VJZCkge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIHZhciBpID0gY29tcEluZGV4LmNhbGwodGhpcywgc2NoZW1hLCByb290LCBiYXNlSWQpO1xuICBpZiAoaSA+PSAwKSB0aGlzLl9jb21waWxhdGlvbnMuc3BsaWNlKGksIDEpO1xufVxuXG5cbi8qKlxuICogSW5kZXggb2Ygc2NoZW1hIGNvbXBpbGF0aW9uIGluIHRoZSBjdXJyZW50bHkgY29tcGlsZWQgbGlzdFxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSAge09iamVjdH0gc2NoZW1hIHNjaGVtYSB0byBjb21waWxlXG4gKiBAcGFyYW0gIHtPYmplY3R9IHJvb3Qgcm9vdCBvYmplY3RcbiAqIEBwYXJhbSAge1N0cmluZ30gYmFzZUlkIGJhc2Ugc2NoZW1hIElEXG4gKiBAcmV0dXJuIHtJbnRlZ2VyfSBjb21waWxhdGlvbiBpbmRleFxuICovXG5mdW5jdGlvbiBjb21wSW5kZXgoc2NoZW1hLCByb290LCBiYXNlSWQpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICBmb3IgKHZhciBpPTA7IGk8dGhpcy5fY29tcGlsYXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGMgPSB0aGlzLl9jb21waWxhdGlvbnNbaV07XG4gICAgaWYgKGMuc2NoZW1hID09IHNjaGVtYSAmJiBjLnJvb3QgPT0gcm9vdCAmJiBjLmJhc2VJZCA9PSBiYXNlSWQpIHJldHVybiBpO1xuICB9XG4gIHJldHVybiAtMTtcbn1cblxuXG5mdW5jdGlvbiBwYXR0ZXJuQ29kZShpLCBwYXR0ZXJucykge1xuICByZXR1cm4gJ3ZhciBwYXR0ZXJuJyArIGkgKyAnID0gbmV3IFJlZ0V4cCgnICsgdXRpbC50b1F1b3RlZFN0cmluZyhwYXR0ZXJuc1tpXSkgKyAnKTsnO1xufVxuXG5cbmZ1bmN0aW9uIGRlZmF1bHRDb2RlKGkpIHtcbiAgcmV0dXJuICd2YXIgZGVmYXVsdCcgKyBpICsgJyA9IGRlZmF1bHRzWycgKyBpICsgJ107Jztcbn1cblxuXG5mdW5jdGlvbiByZWZWYWxDb2RlKGksIHJlZlZhbCkge1xuICByZXR1cm4gcmVmVmFsW2ldID09PSB1bmRlZmluZWQgPyAnJyA6ICd2YXIgcmVmVmFsJyArIGkgKyAnID0gcmVmVmFsWycgKyBpICsgJ107Jztcbn1cblxuXG5mdW5jdGlvbiBjdXN0b21SdWxlQ29kZShpKSB7XG4gIHJldHVybiAndmFyIGN1c3RvbVJ1bGUnICsgaSArICcgPSBjdXN0b21SdWxlc1snICsgaSArICddOyc7XG59XG5cblxuZnVuY3Rpb24gdmFycyhhcnIsIHN0YXRlbWVudCkge1xuICBpZiAoIWFyci5sZW5ndGgpIHJldHVybiAnJztcbiAgdmFyIGNvZGUgPSAnJztcbiAgZm9yICh2YXIgaT0wOyBpPGFyci5sZW5ndGg7IGkrKylcbiAgICBjb2RlICs9IHN0YXRlbWVudChpLCBhcnIpO1xuICByZXR1cm4gY29kZTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFVSSSA9IHJlcXVpcmUoJ3VyaS1qcycpXG4gICwgZXF1YWwgPSByZXF1aXJlKCdmYXN0LWRlZXAtZXF1YWwnKVxuICAsIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuICAsIFNjaGVtYU9iamVjdCA9IHJlcXVpcmUoJy4vc2NoZW1hX29iaicpXG4gICwgdHJhdmVyc2UgPSByZXF1aXJlKCdqc29uLXNjaGVtYS10cmF2ZXJzZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlc29sdmU7XG5cbnJlc29sdmUubm9ybWFsaXplSWQgPSBub3JtYWxpemVJZDtcbnJlc29sdmUuZnVsbFBhdGggPSBnZXRGdWxsUGF0aDtcbnJlc29sdmUudXJsID0gcmVzb2x2ZVVybDtcbnJlc29sdmUuaWRzID0gcmVzb2x2ZUlkcztcbnJlc29sdmUuaW5saW5lUmVmID0gaW5saW5lUmVmO1xucmVzb2x2ZS5zY2hlbWEgPSByZXNvbHZlU2NoZW1hO1xuXG4vKipcbiAqIFtyZXNvbHZlIGFuZCBjb21waWxlIHRoZSByZWZlcmVuY2VzICgkcmVmKV1cbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtGdW5jdGlvbn0gY29tcGlsZSByZWZlcmVuY2UgdG8gc2NoZW1hIGNvbXBpbGF0aW9uIGZ1bmNpdG9uIChsb2NhbENvbXBpbGUpXG4gKiBAcGFyYW0gIHtPYmplY3R9IHJvb3Qgb2JqZWN0IHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJvb3Qgc2NoZW1hIGZvciB0aGUgY3VycmVudCBzY2hlbWFcbiAqIEBwYXJhbSAge1N0cmluZ30gcmVmIHJlZmVyZW5jZSB0byByZXNvbHZlXG4gKiBAcmV0dXJuIHtPYmplY3R8RnVuY3Rpb259IHNjaGVtYSBvYmplY3QgKGlmIHRoZSBzY2hlbWEgY2FuIGJlIGlubGluZWQpIG9yIHZhbGlkYXRpb24gZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gcmVzb2x2ZShjb21waWxlLCByb290LCByZWYpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgcmVmVmFsID0gdGhpcy5fcmVmc1tyZWZdO1xuICBpZiAodHlwZW9mIHJlZlZhbCA9PSAnc3RyaW5nJykge1xuICAgIGlmICh0aGlzLl9yZWZzW3JlZlZhbF0pIHJlZlZhbCA9IHRoaXMuX3JlZnNbcmVmVmFsXTtcbiAgICBlbHNlIHJldHVybiByZXNvbHZlLmNhbGwodGhpcywgY29tcGlsZSwgcm9vdCwgcmVmVmFsKTtcbiAgfVxuXG4gIHJlZlZhbCA9IHJlZlZhbCB8fCB0aGlzLl9zY2hlbWFzW3JlZl07XG4gIGlmIChyZWZWYWwgaW5zdGFuY2VvZiBTY2hlbWFPYmplY3QpIHtcbiAgICByZXR1cm4gaW5saW5lUmVmKHJlZlZhbC5zY2hlbWEsIHRoaXMuX29wdHMuaW5saW5lUmVmcylcbiAgICAgICAgICAgID8gcmVmVmFsLnNjaGVtYVxuICAgICAgICAgICAgOiByZWZWYWwudmFsaWRhdGUgfHwgdGhpcy5fY29tcGlsZShyZWZWYWwpO1xuICB9XG5cbiAgdmFyIHJlcyA9IHJlc29sdmVTY2hlbWEuY2FsbCh0aGlzLCByb290LCByZWYpO1xuICB2YXIgc2NoZW1hLCB2LCBiYXNlSWQ7XG4gIGlmIChyZXMpIHtcbiAgICBzY2hlbWEgPSByZXMuc2NoZW1hO1xuICAgIHJvb3QgPSByZXMucm9vdDtcbiAgICBiYXNlSWQgPSByZXMuYmFzZUlkO1xuICB9XG5cbiAgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFNjaGVtYU9iamVjdCkge1xuICAgIHYgPSBzY2hlbWEudmFsaWRhdGUgfHwgY29tcGlsZS5jYWxsKHRoaXMsIHNjaGVtYS5zY2hlbWEsIHJvb3QsIHVuZGVmaW5lZCwgYmFzZUlkKTtcbiAgfSBlbHNlIGlmIChzY2hlbWEgIT09IHVuZGVmaW5lZCkge1xuICAgIHYgPSBpbmxpbmVSZWYoc2NoZW1hLCB0aGlzLl9vcHRzLmlubGluZVJlZnMpXG4gICAgICAgID8gc2NoZW1hXG4gICAgICAgIDogY29tcGlsZS5jYWxsKHRoaXMsIHNjaGVtYSwgcm9vdCwgdW5kZWZpbmVkLCBiYXNlSWQpO1xuICB9XG5cbiAgcmV0dXJuIHY7XG59XG5cblxuLyoqXG4gKiBSZXNvbHZlIHNjaGVtYSwgaXRzIHJvb3QgYW5kIGJhc2VJZFxuICogQHRoaXMgQWp2XG4gKiBAcGFyYW0gIHtPYmplY3R9IHJvb3Qgcm9vdCBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIHNjaGVtYSwgcmVmVmFsLCByZWZzXG4gKiBAcGFyYW0gIHtTdHJpbmd9IHJlZiAgcmVmZXJlbmNlIHRvIHJlc29sdmVcbiAqIEByZXR1cm4ge09iamVjdH0gb2JqZWN0IHdpdGggcHJvcGVydGllcyBzY2hlbWEsIHJvb3QsIGJhc2VJZFxuICovXG5mdW5jdGlvbiByZXNvbHZlU2NoZW1hKHJvb3QsIHJlZikge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIHZhciBwID0gVVJJLnBhcnNlKHJlZilcbiAgICAsIHJlZlBhdGggPSBfZ2V0RnVsbFBhdGgocClcbiAgICAsIGJhc2VJZCA9IGdldEZ1bGxQYXRoKHRoaXMuX2dldElkKHJvb3Quc2NoZW1hKSk7XG4gIGlmIChPYmplY3Qua2V5cyhyb290LnNjaGVtYSkubGVuZ3RoID09PSAwIHx8IHJlZlBhdGggIT09IGJhc2VJZCkge1xuICAgIHZhciBpZCA9IG5vcm1hbGl6ZUlkKHJlZlBhdGgpO1xuICAgIHZhciByZWZWYWwgPSB0aGlzLl9yZWZzW2lkXTtcbiAgICBpZiAodHlwZW9mIHJlZlZhbCA9PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIHJlc29sdmVSZWN1cnNpdmUuY2FsbCh0aGlzLCByb290LCByZWZWYWwsIHApO1xuICAgIH0gZWxzZSBpZiAocmVmVmFsIGluc3RhbmNlb2YgU2NoZW1hT2JqZWN0KSB7XG4gICAgICBpZiAoIXJlZlZhbC52YWxpZGF0ZSkgdGhpcy5fY29tcGlsZShyZWZWYWwpO1xuICAgICAgcm9vdCA9IHJlZlZhbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVmVmFsID0gdGhpcy5fc2NoZW1hc1tpZF07XG4gICAgICBpZiAocmVmVmFsIGluc3RhbmNlb2YgU2NoZW1hT2JqZWN0KSB7XG4gICAgICAgIGlmICghcmVmVmFsLnZhbGlkYXRlKSB0aGlzLl9jb21waWxlKHJlZlZhbCk7XG4gICAgICAgIGlmIChpZCA9PSBub3JtYWxpemVJZChyZWYpKVxuICAgICAgICAgIHJldHVybiB7IHNjaGVtYTogcmVmVmFsLCByb290OiByb290LCBiYXNlSWQ6IGJhc2VJZCB9O1xuICAgICAgICByb290ID0gcmVmVmFsO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIXJvb3Quc2NoZW1hKSByZXR1cm47XG4gICAgYmFzZUlkID0gZ2V0RnVsbFBhdGgodGhpcy5fZ2V0SWQocm9vdC5zY2hlbWEpKTtcbiAgfVxuICByZXR1cm4gZ2V0SnNvblBvaW50ZXIuY2FsbCh0aGlzLCBwLCBiYXNlSWQsIHJvb3Quc2NoZW1hLCByb290KTtcbn1cblxuXG4vKiBAdGhpcyBBanYgKi9cbmZ1bmN0aW9uIHJlc29sdmVSZWN1cnNpdmUocm9vdCwgcmVmLCBwYXJzZWRSZWYpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgcmVzID0gcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIHJlZik7XG4gIGlmIChyZXMpIHtcbiAgICB2YXIgc2NoZW1hID0gcmVzLnNjaGVtYTtcbiAgICB2YXIgYmFzZUlkID0gcmVzLmJhc2VJZDtcbiAgICByb290ID0gcmVzLnJvb3Q7XG4gICAgdmFyIGlkID0gdGhpcy5fZ2V0SWQoc2NoZW1hKTtcbiAgICBpZiAoaWQpIGJhc2VJZCA9IHJlc29sdmVVcmwoYmFzZUlkLCBpZCk7XG4gICAgcmV0dXJuIGdldEpzb25Qb2ludGVyLmNhbGwodGhpcywgcGFyc2VkUmVmLCBiYXNlSWQsIHNjaGVtYSwgcm9vdCk7XG4gIH1cbn1cblxuXG52YXIgUFJFVkVOVF9TQ09QRV9DSEFOR0UgPSB1dGlsLnRvSGFzaChbJ3Byb3BlcnRpZXMnLCAncGF0dGVyblByb3BlcnRpZXMnLCAnZW51bScsICdkZXBlbmRlbmNpZXMnLCAnZGVmaW5pdGlvbnMnXSk7XG4vKiBAdGhpcyBBanYgKi9cbmZ1bmN0aW9uIGdldEpzb25Qb2ludGVyKHBhcnNlZFJlZiwgYmFzZUlkLCBzY2hlbWEsIHJvb3QpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICBwYXJzZWRSZWYuZnJhZ21lbnQgPSBwYXJzZWRSZWYuZnJhZ21lbnQgfHwgJyc7XG4gIGlmIChwYXJzZWRSZWYuZnJhZ21lbnQuc2xpY2UoMCwxKSAhPSAnLycpIHJldHVybjtcbiAgdmFyIHBhcnRzID0gcGFyc2VkUmVmLmZyYWdtZW50LnNwbGl0KCcvJyk7XG5cbiAgZm9yICh2YXIgaSA9IDE7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwYXJ0ID0gcGFydHNbaV07XG4gICAgaWYgKHBhcnQpIHtcbiAgICAgIHBhcnQgPSB1dGlsLnVuZXNjYXBlRnJhZ21lbnQocGFydCk7XG4gICAgICBzY2hlbWEgPSBzY2hlbWFbcGFydF07XG4gICAgICBpZiAoc2NoZW1hID09PSB1bmRlZmluZWQpIGJyZWFrO1xuICAgICAgdmFyIGlkO1xuICAgICAgaWYgKCFQUkVWRU5UX1NDT1BFX0NIQU5HRVtwYXJ0XSkge1xuICAgICAgICBpZCA9IHRoaXMuX2dldElkKHNjaGVtYSk7XG4gICAgICAgIGlmIChpZCkgYmFzZUlkID0gcmVzb2x2ZVVybChiYXNlSWQsIGlkKTtcbiAgICAgICAgaWYgKHNjaGVtYS4kcmVmKSB7XG4gICAgICAgICAgdmFyICRyZWYgPSByZXNvbHZlVXJsKGJhc2VJZCwgc2NoZW1hLiRyZWYpO1xuICAgICAgICAgIHZhciByZXMgPSByZXNvbHZlU2NoZW1hLmNhbGwodGhpcywgcm9vdCwgJHJlZik7XG4gICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgc2NoZW1hID0gcmVzLnNjaGVtYTtcbiAgICAgICAgICAgIHJvb3QgPSByZXMucm9vdDtcbiAgICAgICAgICAgIGJhc2VJZCA9IHJlcy5iYXNlSWQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChzY2hlbWEgIT09IHVuZGVmaW5lZCAmJiBzY2hlbWEgIT09IHJvb3Quc2NoZW1hKVxuICAgIHJldHVybiB7IHNjaGVtYTogc2NoZW1hLCByb290OiByb290LCBiYXNlSWQ6IGJhc2VJZCB9O1xufVxuXG5cbnZhciBTSU1QTEVfSU5MSU5FRCA9IHV0aWwudG9IYXNoKFtcbiAgJ3R5cGUnLCAnZm9ybWF0JywgJ3BhdHRlcm4nLFxuICAnbWF4TGVuZ3RoJywgJ21pbkxlbmd0aCcsXG4gICdtYXhQcm9wZXJ0aWVzJywgJ21pblByb3BlcnRpZXMnLFxuICAnbWF4SXRlbXMnLCAnbWluSXRlbXMnLFxuICAnbWF4aW11bScsICdtaW5pbXVtJyxcbiAgJ3VuaXF1ZUl0ZW1zJywgJ211bHRpcGxlT2YnLFxuICAncmVxdWlyZWQnLCAnZW51bSdcbl0pO1xuZnVuY3Rpb24gaW5saW5lUmVmKHNjaGVtYSwgbGltaXQpIHtcbiAgaWYgKGxpbWl0ID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlO1xuICBpZiAobGltaXQgPT09IHVuZGVmaW5lZCB8fCBsaW1pdCA9PT0gdHJ1ZSkgcmV0dXJuIGNoZWNrTm9SZWYoc2NoZW1hKTtcbiAgZWxzZSBpZiAobGltaXQpIHJldHVybiBjb3VudEtleXMoc2NoZW1hKSA8PSBsaW1pdDtcbn1cblxuXG5mdW5jdGlvbiBjaGVja05vUmVmKHNjaGVtYSkge1xuICB2YXIgaXRlbTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgIGZvciAodmFyIGk9MDsgaTxzY2hlbWEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGl0ZW0gPSBzY2hlbWFbaV07XG4gICAgICBpZiAodHlwZW9mIGl0ZW0gPT0gJ29iamVjdCcgJiYgIWNoZWNrTm9SZWYoaXRlbSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIga2V5IGluIHNjaGVtYSkge1xuICAgICAgaWYgKGtleSA9PSAnJHJlZicpIHJldHVybiBmYWxzZTtcbiAgICAgIGl0ZW0gPSBzY2hlbWFba2V5XTtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PSAnb2JqZWN0JyAmJiAhY2hlY2tOb1JlZihpdGVtKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuXG5mdW5jdGlvbiBjb3VudEtleXMoc2NoZW1hKSB7XG4gIHZhciBjb3VudCA9IDAsIGl0ZW07XG4gIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpIHtcbiAgICBmb3IgKHZhciBpPTA7IGk8c2NoZW1hLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpdGVtID0gc2NoZW1hW2ldO1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09ICdvYmplY3QnKSBjb3VudCArPSBjb3VudEtleXMoaXRlbSk7XG4gICAgICBpZiAoY291bnQgPT0gSW5maW5pdHkpIHJldHVybiBJbmZpbml0eTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgZm9yICh2YXIga2V5IGluIHNjaGVtYSkge1xuICAgICAgaWYgKGtleSA9PSAnJHJlZicpIHJldHVybiBJbmZpbml0eTtcbiAgICAgIGlmIChTSU1QTEVfSU5MSU5FRFtrZXldKSB7XG4gICAgICAgIGNvdW50Kys7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtID0gc2NoZW1hW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbSA9PSAnb2JqZWN0JykgY291bnQgKz0gY291bnRLZXlzKGl0ZW0pICsgMTtcbiAgICAgICAgaWYgKGNvdW50ID09IEluZmluaXR5KSByZXR1cm4gSW5maW5pdHk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBjb3VudDtcbn1cblxuXG5mdW5jdGlvbiBnZXRGdWxsUGF0aChpZCwgbm9ybWFsaXplKSB7XG4gIGlmIChub3JtYWxpemUgIT09IGZhbHNlKSBpZCA9IG5vcm1hbGl6ZUlkKGlkKTtcbiAgdmFyIHAgPSBVUkkucGFyc2UoaWQpO1xuICByZXR1cm4gX2dldEZ1bGxQYXRoKHApO1xufVxuXG5cbmZ1bmN0aW9uIF9nZXRGdWxsUGF0aChwKSB7XG4gIHJldHVybiBVUkkuc2VyaWFsaXplKHApLnNwbGl0KCcjJylbMF0gKyAnIyc7XG59XG5cblxudmFyIFRSQUlMSU5HX1NMQVNIX0hBU0ggPSAvI1xcLz8kLztcbmZ1bmN0aW9uIG5vcm1hbGl6ZUlkKGlkKSB7XG4gIHJldHVybiBpZCA/IGlkLnJlcGxhY2UoVFJBSUxJTkdfU0xBU0hfSEFTSCwgJycpIDogJyc7XG59XG5cblxuZnVuY3Rpb24gcmVzb2x2ZVVybChiYXNlSWQsIGlkKSB7XG4gIGlkID0gbm9ybWFsaXplSWQoaWQpO1xuICByZXR1cm4gVVJJLnJlc29sdmUoYmFzZUlkLCBpZCk7XG59XG5cblxuLyogQHRoaXMgQWp2ICovXG5mdW5jdGlvbiByZXNvbHZlSWRzKHNjaGVtYSkge1xuICB2YXIgc2NoZW1hSWQgPSBub3JtYWxpemVJZCh0aGlzLl9nZXRJZChzY2hlbWEpKTtcbiAgdmFyIGJhc2VJZHMgPSB7Jyc6IHNjaGVtYUlkfTtcbiAgdmFyIGZ1bGxQYXRocyA9IHsnJzogZ2V0RnVsbFBhdGgoc2NoZW1hSWQsIGZhbHNlKX07XG4gIHZhciBsb2NhbFJlZnMgPSB7fTtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHRyYXZlcnNlKHNjaGVtYSwge2FsbEtleXM6IHRydWV9LCBmdW5jdGlvbihzY2gsIGpzb25QdHIsIHJvb3RTY2hlbWEsIHBhcmVudEpzb25QdHIsIHBhcmVudEtleXdvcmQsIHBhcmVudFNjaGVtYSwga2V5SW5kZXgpIHtcbiAgICBpZiAoanNvblB0ciA9PT0gJycpIHJldHVybjtcbiAgICB2YXIgaWQgPSBzZWxmLl9nZXRJZChzY2gpO1xuICAgIHZhciBiYXNlSWQgPSBiYXNlSWRzW3BhcmVudEpzb25QdHJdO1xuICAgIHZhciBmdWxsUGF0aCA9IGZ1bGxQYXRoc1twYXJlbnRKc29uUHRyXSArICcvJyArIHBhcmVudEtleXdvcmQ7XG4gICAgaWYgKGtleUluZGV4ICE9PSB1bmRlZmluZWQpXG4gICAgICBmdWxsUGF0aCArPSAnLycgKyAodHlwZW9mIGtleUluZGV4ID09ICdudW1iZXInID8ga2V5SW5kZXggOiB1dGlsLmVzY2FwZUZyYWdtZW50KGtleUluZGV4KSk7XG5cbiAgICBpZiAodHlwZW9mIGlkID09ICdzdHJpbmcnKSB7XG4gICAgICBpZCA9IGJhc2VJZCA9IG5vcm1hbGl6ZUlkKGJhc2VJZCA/IFVSSS5yZXNvbHZlKGJhc2VJZCwgaWQpIDogaWQpO1xuXG4gICAgICB2YXIgcmVmVmFsID0gc2VsZi5fcmVmc1tpZF07XG4gICAgICBpZiAodHlwZW9mIHJlZlZhbCA9PSAnc3RyaW5nJykgcmVmVmFsID0gc2VsZi5fcmVmc1tyZWZWYWxdO1xuICAgICAgaWYgKHJlZlZhbCAmJiByZWZWYWwuc2NoZW1hKSB7XG4gICAgICAgIGlmICghZXF1YWwoc2NoLCByZWZWYWwuc2NoZW1hKSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lkIFwiJyArIGlkICsgJ1wiIHJlc29sdmVzIHRvIG1vcmUgdGhhbiBvbmUgc2NoZW1hJyk7XG4gICAgICB9IGVsc2UgaWYgKGlkICE9IG5vcm1hbGl6ZUlkKGZ1bGxQYXRoKSkge1xuICAgICAgICBpZiAoaWRbMF0gPT0gJyMnKSB7XG4gICAgICAgICAgaWYgKGxvY2FsUmVmc1tpZF0gJiYgIWVxdWFsKHNjaCwgbG9jYWxSZWZzW2lkXSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2lkIFwiJyArIGlkICsgJ1wiIHJlc29sdmVzIHRvIG1vcmUgdGhhbiBvbmUgc2NoZW1hJyk7XG4gICAgICAgICAgbG9jYWxSZWZzW2lkXSA9IHNjaDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzZWxmLl9yZWZzW2lkXSA9IGZ1bGxQYXRoO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGJhc2VJZHNbanNvblB0cl0gPSBiYXNlSWQ7XG4gICAgZnVsbFBhdGhzW2pzb25QdHJdID0gZnVsbFBhdGg7XG4gIH0pO1xuXG4gIHJldHVybiBsb2NhbFJlZnM7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBydWxlTW9kdWxlcyA9IHJlcXVpcmUoJy4uL2RvdGpzJylcbiAgLCB0b0hhc2ggPSByZXF1aXJlKCcuL3V0aWwnKS50b0hhc2g7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcnVsZXMoKSB7XG4gIHZhciBSVUxFUyA9IFtcbiAgICB7IHR5cGU6ICdudW1iZXInLFxuICAgICAgcnVsZXM6IFsgeyAnbWF4aW11bSc6IFsnZXhjbHVzaXZlTWF4aW11bSddIH0sXG4gICAgICAgICAgICAgICB7ICdtaW5pbXVtJzogWydleGNsdXNpdmVNaW5pbXVtJ10gfSwgJ211bHRpcGxlT2YnLCAnZm9ybWF0J10gfSxcbiAgICB7IHR5cGU6ICdzdHJpbmcnLFxuICAgICAgcnVsZXM6IFsgJ21heExlbmd0aCcsICdtaW5MZW5ndGgnLCAncGF0dGVybicsICdmb3JtYXQnIF0gfSxcbiAgICB7IHR5cGU6ICdhcnJheScsXG4gICAgICBydWxlczogWyAnbWF4SXRlbXMnLCAnbWluSXRlbXMnLCAnaXRlbXMnLCAnY29udGFpbnMnLCAndW5pcXVlSXRlbXMnIF0gfSxcbiAgICB7IHR5cGU6ICdvYmplY3QnLFxuICAgICAgcnVsZXM6IFsgJ21heFByb3BlcnRpZXMnLCAnbWluUHJvcGVydGllcycsICdyZXF1aXJlZCcsICdkZXBlbmRlbmNpZXMnLCAncHJvcGVydHlOYW1lcycsXG4gICAgICAgICAgICAgICB7ICdwcm9wZXJ0aWVzJzogWydhZGRpdGlvbmFsUHJvcGVydGllcycsICdwYXR0ZXJuUHJvcGVydGllcyddIH0gXSB9LFxuICAgIHsgcnVsZXM6IFsgJyRyZWYnLCAnY29uc3QnLCAnZW51bScsICdub3QnLCAnYW55T2YnLCAnb25lT2YnLCAnYWxsT2YnLCAnaWYnIF0gfVxuICBdO1xuXG4gIHZhciBBTEwgPSBbICd0eXBlJywgJyRjb21tZW50JyBdO1xuICB2YXIgS0VZV09SRFMgPSBbXG4gICAgJyRzY2hlbWEnLCAnJGlkJywgJ2lkJywgJyRkYXRhJywgJyRhc3luYycsICd0aXRsZScsXG4gICAgJ2Rlc2NyaXB0aW9uJywgJ2RlZmF1bHQnLCAnZGVmaW5pdGlvbnMnLFxuICAgICdleGFtcGxlcycsICdyZWFkT25seScsICd3cml0ZU9ubHknLFxuICAgICdjb250ZW50TWVkaWFUeXBlJywgJ2NvbnRlbnRFbmNvZGluZycsXG4gICAgJ2FkZGl0aW9uYWxJdGVtcycsICd0aGVuJywgJ2Vsc2UnXG4gIF07XG4gIHZhciBUWVBFUyA9IFsgJ251bWJlcicsICdpbnRlZ2VyJywgJ3N0cmluZycsICdhcnJheScsICdvYmplY3QnLCAnYm9vbGVhbicsICdudWxsJyBdO1xuICBSVUxFUy5hbGwgPSB0b0hhc2goQUxMKTtcbiAgUlVMRVMudHlwZXMgPSB0b0hhc2goVFlQRVMpO1xuXG4gIFJVTEVTLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgZ3JvdXAucnVsZXMgPSBncm91cC5ydWxlcy5tYXAoZnVuY3Rpb24gKGtleXdvcmQpIHtcbiAgICAgIHZhciBpbXBsS2V5d29yZHM7XG4gICAgICBpZiAodHlwZW9mIGtleXdvcmQgPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFyIGtleSA9IE9iamVjdC5rZXlzKGtleXdvcmQpWzBdO1xuICAgICAgICBpbXBsS2V5d29yZHMgPSBrZXl3b3JkW2tleV07XG4gICAgICAgIGtleXdvcmQgPSBrZXk7XG4gICAgICAgIGltcGxLZXl3b3Jkcy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgQUxMLnB1c2goayk7XG4gICAgICAgICAgUlVMRVMuYWxsW2tdID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBBTEwucHVzaChrZXl3b3JkKTtcbiAgICAgIHZhciBydWxlID0gUlVMRVMuYWxsW2tleXdvcmRdID0ge1xuICAgICAgICBrZXl3b3JkOiBrZXl3b3JkLFxuICAgICAgICBjb2RlOiBydWxlTW9kdWxlc1trZXl3b3JkXSxcbiAgICAgICAgaW1wbGVtZW50czogaW1wbEtleXdvcmRzXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgfSk7XG5cbiAgICBSVUxFUy5hbGwuJGNvbW1lbnQgPSB7XG4gICAgICBrZXl3b3JkOiAnJGNvbW1lbnQnLFxuICAgICAgY29kZTogcnVsZU1vZHVsZXMuJGNvbW1lbnRcbiAgICB9O1xuXG4gICAgaWYgKGdyb3VwLnR5cGUpIFJVTEVTLnR5cGVzW2dyb3VwLnR5cGVdID0gZ3JvdXA7XG4gIH0pO1xuXG4gIFJVTEVTLmtleXdvcmRzID0gdG9IYXNoKEFMTC5jb25jYXQoS0VZV09SRFMpKTtcbiAgUlVMRVMuY3VzdG9tID0ge307XG5cbiAgcmV0dXJuIFJVTEVTO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBTY2hlbWFPYmplY3Q7XG5cbmZ1bmN0aW9uIFNjaGVtYU9iamVjdChvYmopIHtcbiAgdXRpbC5jb3B5KG9iaiwgdGhpcyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vIGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nXG4vLyBodHRwczovL2dpdGh1Yi5jb20vYmVzdGllanMvcHVueWNvZGUuanMgLSBwdW55Y29kZS51Y3MyLmRlY29kZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB1Y3MybGVuZ3RoKHN0cikge1xuICB2YXIgbGVuZ3RoID0gMFxuICAgICwgbGVuID0gc3RyLmxlbmd0aFxuICAgICwgcG9zID0gMFxuICAgICwgdmFsdWU7XG4gIHdoaWxlIChwb3MgPCBsZW4pIHtcbiAgICBsZW5ndGgrKztcbiAgICB2YWx1ZSA9IHN0ci5jaGFyQ29kZUF0KHBvcysrKTtcbiAgICBpZiAodmFsdWUgPj0gMHhEODAwICYmIHZhbHVlIDw9IDB4REJGRiAmJiBwb3MgPCBsZW4pIHtcbiAgICAgIC8vIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3RlclxuICAgICAgdmFsdWUgPSBzdHIuY2hhckNvZGVBdChwb3MpO1xuICAgICAgaWYgKCh2YWx1ZSAmIDB4RkMwMCkgPT0gMHhEQzAwKSBwb3MrKzsgLy8gbG93IHN1cnJvZ2F0ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gbGVuZ3RoO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29weTogY29weSxcbiAgY2hlY2tEYXRhVHlwZTogY2hlY2tEYXRhVHlwZSxcbiAgY2hlY2tEYXRhVHlwZXM6IGNoZWNrRGF0YVR5cGVzLFxuICBjb2VyY2VUb1R5cGVzOiBjb2VyY2VUb1R5cGVzLFxuICB0b0hhc2g6IHRvSGFzaCxcbiAgZ2V0UHJvcGVydHk6IGdldFByb3BlcnR5LFxuICBlc2NhcGVRdW90ZXM6IGVzY2FwZVF1b3RlcyxcbiAgZXF1YWw6IHJlcXVpcmUoJ2Zhc3QtZGVlcC1lcXVhbCcpLFxuICB1Y3MybGVuZ3RoOiByZXF1aXJlKCcuL3VjczJsZW5ndGgnKSxcbiAgdmFyT2NjdXJlbmNlczogdmFyT2NjdXJlbmNlcyxcbiAgdmFyUmVwbGFjZTogdmFyUmVwbGFjZSxcbiAgc2NoZW1hSGFzUnVsZXM6IHNjaGVtYUhhc1J1bGVzLFxuICBzY2hlbWFIYXNSdWxlc0V4Y2VwdDogc2NoZW1hSGFzUnVsZXNFeGNlcHQsXG4gIHNjaGVtYVVua25vd25SdWxlczogc2NoZW1hVW5rbm93blJ1bGVzLFxuICB0b1F1b3RlZFN0cmluZzogdG9RdW90ZWRTdHJpbmcsXG4gIGdldFBhdGhFeHByOiBnZXRQYXRoRXhwcixcbiAgZ2V0UGF0aDogZ2V0UGF0aCxcbiAgZ2V0RGF0YTogZ2V0RGF0YSxcbiAgdW5lc2NhcGVGcmFnbWVudDogdW5lc2NhcGVGcmFnbWVudCxcbiAgdW5lc2NhcGVKc29uUG9pbnRlcjogdW5lc2NhcGVKc29uUG9pbnRlcixcbiAgZXNjYXBlRnJhZ21lbnQ6IGVzY2FwZUZyYWdtZW50LFxuICBlc2NhcGVKc29uUG9pbnRlcjogZXNjYXBlSnNvblBvaW50ZXJcbn07XG5cblxuZnVuY3Rpb24gY29weShvLCB0bykge1xuICB0byA9IHRvIHx8IHt9O1xuICBmb3IgKHZhciBrZXkgaW4gbykgdG9ba2V5XSA9IG9ba2V5XTtcbiAgcmV0dXJuIHRvO1xufVxuXG5cbmZ1bmN0aW9uIGNoZWNrRGF0YVR5cGUoZGF0YVR5cGUsIGRhdGEsIHN0cmljdE51bWJlcnMsIG5lZ2F0ZSkge1xuICB2YXIgRVFVQUwgPSBuZWdhdGUgPyAnICE9PSAnIDogJyA9PT0gJ1xuICAgICwgQU5EID0gbmVnYXRlID8gJyB8fCAnIDogJyAmJiAnXG4gICAgLCBPSyA9IG5lZ2F0ZSA/ICchJyA6ICcnXG4gICAgLCBOT1QgPSBuZWdhdGUgPyAnJyA6ICchJztcbiAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgIGNhc2UgJ251bGwnOiByZXR1cm4gZGF0YSArIEVRVUFMICsgJ251bGwnO1xuICAgIGNhc2UgJ2FycmF5JzogcmV0dXJuIE9LICsgJ0FycmF5LmlzQXJyYXkoJyArIGRhdGEgKyAnKSc7XG4gICAgY2FzZSAnb2JqZWN0JzogcmV0dXJuICcoJyArIE9LICsgZGF0YSArIEFORCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlb2YgJyArIGRhdGEgKyBFUVVBTCArICdcIm9iamVjdFwiJyArIEFORCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIE5PVCArICdBcnJheS5pc0FycmF5KCcgKyBkYXRhICsgJykpJztcbiAgICBjYXNlICdpbnRlZ2VyJzogcmV0dXJuICcodHlwZW9mICcgKyBkYXRhICsgRVFVQUwgKyAnXCJudW1iZXJcIicgKyBBTkQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9UICsgJygnICsgZGF0YSArICcgJSAxKScgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EICsgZGF0YSArIEVRVUFMICsgZGF0YSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaWN0TnVtYmVycyA/IChBTkQgKyBPSyArICdpc0Zpbml0ZSgnICsgZGF0YSArICcpJykgOiAnJykgKyAnKSc7XG4gICAgY2FzZSAnbnVtYmVyJzogcmV0dXJuICcodHlwZW9mICcgKyBkYXRhICsgRVFVQUwgKyAnXCInICsgZGF0YVR5cGUgKyAnXCInICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmljdE51bWJlcnMgPyAoQU5EICsgT0sgKyAnaXNGaW5pdGUoJyArIGRhdGEgKyAnKScpIDogJycpICsgJyknO1xuICAgIGRlZmF1bHQ6IHJldHVybiAndHlwZW9mICcgKyBkYXRhICsgRVFVQUwgKyAnXCInICsgZGF0YVR5cGUgKyAnXCInO1xuICB9XG59XG5cblxuZnVuY3Rpb24gY2hlY2tEYXRhVHlwZXMoZGF0YVR5cGVzLCBkYXRhLCBzdHJpY3ROdW1iZXJzKSB7XG4gIHN3aXRjaCAoZGF0YVR5cGVzLmxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGNoZWNrRGF0YVR5cGUoZGF0YVR5cGVzWzBdLCBkYXRhLCBzdHJpY3ROdW1iZXJzLCB0cnVlKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdmFyIGNvZGUgPSAnJztcbiAgICAgIHZhciB0eXBlcyA9IHRvSGFzaChkYXRhVHlwZXMpO1xuICAgICAgaWYgKHR5cGVzLmFycmF5ICYmIHR5cGVzLm9iamVjdCkge1xuICAgICAgICBjb2RlID0gdHlwZXMubnVsbCA/ICcoJzogJyghJyArIGRhdGEgKyAnIHx8ICc7XG4gICAgICAgIGNvZGUgKz0gJ3R5cGVvZiAnICsgZGF0YSArICcgIT09IFwib2JqZWN0XCIpJztcbiAgICAgICAgZGVsZXRlIHR5cGVzLm51bGw7XG4gICAgICAgIGRlbGV0ZSB0eXBlcy5hcnJheTtcbiAgICAgICAgZGVsZXRlIHR5cGVzLm9iamVjdDtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlcy5udW1iZXIpIGRlbGV0ZSB0eXBlcy5pbnRlZ2VyO1xuICAgICAgZm9yICh2YXIgdCBpbiB0eXBlcylcbiAgICAgICAgY29kZSArPSAoY29kZSA/ICcgJiYgJyA6ICcnICkgKyBjaGVja0RhdGFUeXBlKHQsIGRhdGEsIHN0cmljdE51bWJlcnMsIHRydWUpO1xuXG4gICAgICByZXR1cm4gY29kZTtcbiAgfVxufVxuXG5cbnZhciBDT0VSQ0VfVE9fVFlQRVMgPSB0b0hhc2goWyAnc3RyaW5nJywgJ251bWJlcicsICdpbnRlZ2VyJywgJ2Jvb2xlYW4nLCAnbnVsbCcgXSk7XG5mdW5jdGlvbiBjb2VyY2VUb1R5cGVzKG9wdGlvbkNvZXJjZVR5cGVzLCBkYXRhVHlwZXMpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YVR5cGVzKSkge1xuICAgIHZhciB0eXBlcyA9IFtdO1xuICAgIGZvciAodmFyIGk9MDsgaTxkYXRhVHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0ID0gZGF0YVR5cGVzW2ldO1xuICAgICAgaWYgKENPRVJDRV9UT19UWVBFU1t0XSkgdHlwZXNbdHlwZXMubGVuZ3RoXSA9IHQ7XG4gICAgICBlbHNlIGlmIChvcHRpb25Db2VyY2VUeXBlcyA9PT0gJ2FycmF5JyAmJiB0ID09PSAnYXJyYXknKSB0eXBlc1t0eXBlcy5sZW5ndGhdID0gdDtcbiAgICB9XG4gICAgaWYgKHR5cGVzLmxlbmd0aCkgcmV0dXJuIHR5cGVzO1xuICB9IGVsc2UgaWYgKENPRVJDRV9UT19UWVBFU1tkYXRhVHlwZXNdKSB7XG4gICAgcmV0dXJuIFtkYXRhVHlwZXNdO1xuICB9IGVsc2UgaWYgKG9wdGlvbkNvZXJjZVR5cGVzID09PSAnYXJyYXknICYmIGRhdGFUeXBlcyA9PT0gJ2FycmF5Jykge1xuICAgIHJldHVybiBbJ2FycmF5J107XG4gIH1cbn1cblxuXG5mdW5jdGlvbiB0b0hhc2goYXJyKSB7XG4gIHZhciBoYXNoID0ge307XG4gIGZvciAodmFyIGk9MDsgaTxhcnIubGVuZ3RoOyBpKyspIGhhc2hbYXJyW2ldXSA9IHRydWU7XG4gIHJldHVybiBoYXNoO1xufVxuXG5cbnZhciBJREVOVElGSUVSID0gL15bYS16JF9dW2EteiRfMC05XSokL2k7XG52YXIgU0lOR0xFX1FVT1RFID0gLyd8XFxcXC9nO1xuZnVuY3Rpb24gZ2V0UHJvcGVydHkoa2V5KSB7XG4gIHJldHVybiB0eXBlb2Yga2V5ID09ICdudW1iZXInXG4gICAgICAgICAgPyAnWycgKyBrZXkgKyAnXSdcbiAgICAgICAgICA6IElERU5USUZJRVIudGVzdChrZXkpXG4gICAgICAgICAgICA/ICcuJyArIGtleVxuICAgICAgICAgICAgOiBcIlsnXCIgKyBlc2NhcGVRdW90ZXMoa2V5KSArIFwiJ11cIjtcbn1cblxuXG5mdW5jdGlvbiBlc2NhcGVRdW90ZXMoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZShTSU5HTEVfUVVPVEUsICdcXFxcJCYnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcbi9nLCAnXFxcXG4nKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcci9nLCAnXFxcXHInKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcZi9nLCAnXFxcXGYnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcdC9nLCAnXFxcXHQnKTtcbn1cblxuXG5mdW5jdGlvbiB2YXJPY2N1cmVuY2VzKHN0ciwgZGF0YVZhcikge1xuICBkYXRhVmFyICs9ICdbXjAtOV0nO1xuICB2YXIgbWF0Y2hlcyA9IHN0ci5tYXRjaChuZXcgUmVnRXhwKGRhdGFWYXIsICdnJykpO1xuICByZXR1cm4gbWF0Y2hlcyA/IG1hdGNoZXMubGVuZ3RoIDogMDtcbn1cblxuXG5mdW5jdGlvbiB2YXJSZXBsYWNlKHN0ciwgZGF0YVZhciwgZXhwcikge1xuICBkYXRhVmFyICs9ICcoW14wLTldKSc7XG4gIGV4cHIgPSBleHByLnJlcGxhY2UoL1xcJC9nLCAnJCQkJCcpO1xuICByZXR1cm4gc3RyLnJlcGxhY2UobmV3IFJlZ0V4cChkYXRhVmFyLCAnZycpLCBleHByICsgJyQxJyk7XG59XG5cblxuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXMoc2NoZW1hLCBydWxlcykge1xuICBpZiAodHlwZW9mIHNjaGVtYSA9PSAnYm9vbGVhbicpIHJldHVybiAhc2NoZW1hO1xuICBmb3IgKHZhciBrZXkgaW4gc2NoZW1hKSBpZiAocnVsZXNba2V5XSkgcmV0dXJuIHRydWU7XG59XG5cblxuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXNFeGNlcHQoc2NoZW1hLCBydWxlcywgZXhjZXB0S2V5d29yZCkge1xuICBpZiAodHlwZW9mIHNjaGVtYSA9PSAnYm9vbGVhbicpIHJldHVybiAhc2NoZW1hICYmIGV4Y2VwdEtleXdvcmQgIT0gJ25vdCc7XG4gIGZvciAodmFyIGtleSBpbiBzY2hlbWEpIGlmIChrZXkgIT0gZXhjZXB0S2V5d29yZCAmJiBydWxlc1trZXldKSByZXR1cm4gdHJ1ZTtcbn1cblxuXG5mdW5jdGlvbiBzY2hlbWFVbmtub3duUnVsZXMoc2NoZW1hLCBydWxlcykge1xuICBpZiAodHlwZW9mIHNjaGVtYSA9PSAnYm9vbGVhbicpIHJldHVybjtcbiAgZm9yICh2YXIga2V5IGluIHNjaGVtYSkgaWYgKCFydWxlc1trZXldKSByZXR1cm4ga2V5O1xufVxuXG5cbmZ1bmN0aW9uIHRvUXVvdGVkU3RyaW5nKHN0cikge1xuICByZXR1cm4gJ1xcJycgKyBlc2NhcGVRdW90ZXMoc3RyKSArICdcXCcnO1xufVxuXG5cbmZ1bmN0aW9uIGdldFBhdGhFeHByKGN1cnJlbnRQYXRoLCBleHByLCBqc29uUG9pbnRlcnMsIGlzTnVtYmVyKSB7XG4gIHZhciBwYXRoID0ganNvblBvaW50ZXJzIC8vIGZhbHNlIGJ5IGRlZmF1bHRcbiAgICAgICAgICAgICAgPyAnXFwnL1xcJyArICcgKyBleHByICsgKGlzTnVtYmVyID8gJycgOiAnLnJlcGxhY2UoL34vZywgXFwnfjBcXCcpLnJlcGxhY2UoL1xcXFwvL2csIFxcJ34xXFwnKScpXG4gICAgICAgICAgICAgIDogKGlzTnVtYmVyID8gJ1xcJ1tcXCcgKyAnICsgZXhwciArICcgKyBcXCddXFwnJyA6ICdcXCdbXFxcXFxcJ1xcJyArICcgKyBleHByICsgJyArIFxcJ1xcXFxcXCddXFwnJyk7XG4gIHJldHVybiBqb2luUGF0aHMoY3VycmVudFBhdGgsIHBhdGgpO1xufVxuXG5cbmZ1bmN0aW9uIGdldFBhdGgoY3VycmVudFBhdGgsIHByb3AsIGpzb25Qb2ludGVycykge1xuICB2YXIgcGF0aCA9IGpzb25Qb2ludGVycyAvLyBmYWxzZSBieSBkZWZhdWx0XG4gICAgICAgICAgICAgID8gdG9RdW90ZWRTdHJpbmcoJy8nICsgZXNjYXBlSnNvblBvaW50ZXIocHJvcCkpXG4gICAgICAgICAgICAgIDogdG9RdW90ZWRTdHJpbmcoZ2V0UHJvcGVydHkocHJvcCkpO1xuICByZXR1cm4gam9pblBhdGhzKGN1cnJlbnRQYXRoLCBwYXRoKTtcbn1cblxuXG52YXIgSlNPTl9QT0lOVEVSID0gL15cXC8oPzpbXn5dfH4wfH4xKSokLztcbnZhciBSRUxBVElWRV9KU09OX1BPSU5URVIgPSAvXihbMC05XSspKCN8XFwvKD86W15+XXx+MHx+MSkqKT8kLztcbmZ1bmN0aW9uIGdldERhdGEoJGRhdGEsIGx2bCwgcGF0aHMpIHtcbiAgdmFyIHVwLCBqc29uUG9pbnRlciwgZGF0YSwgbWF0Y2hlcztcbiAgaWYgKCRkYXRhID09PSAnJykgcmV0dXJuICdyb290RGF0YSc7XG4gIGlmICgkZGF0YVswXSA9PSAnLycpIHtcbiAgICBpZiAoIUpTT05fUE9JTlRFUi50ZXN0KCRkYXRhKSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEpTT04tcG9pbnRlcjogJyArICRkYXRhKTtcbiAgICBqc29uUG9pbnRlciA9ICRkYXRhO1xuICAgIGRhdGEgPSAncm9vdERhdGEnO1xuICB9IGVsc2Uge1xuICAgIG1hdGNoZXMgPSAkZGF0YS5tYXRjaChSRUxBVElWRV9KU09OX1BPSU5URVIpO1xuICAgIGlmICghbWF0Y2hlcykgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEpTT04tcG9pbnRlcjogJyArICRkYXRhKTtcbiAgICB1cCA9ICttYXRjaGVzWzFdO1xuICAgIGpzb25Qb2ludGVyID0gbWF0Y2hlc1syXTtcbiAgICBpZiAoanNvblBvaW50ZXIgPT0gJyMnKSB7XG4gICAgICBpZiAodXAgPj0gbHZsKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhY2Nlc3MgcHJvcGVydHkvaW5kZXggJyArIHVwICsgJyBsZXZlbHMgdXAsIGN1cnJlbnQgbGV2ZWwgaXMgJyArIGx2bCk7XG4gICAgICByZXR1cm4gcGF0aHNbbHZsIC0gdXBdO1xuICAgIH1cblxuICAgIGlmICh1cCA+IGx2bCkgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWNjZXNzIGRhdGEgJyArIHVwICsgJyBsZXZlbHMgdXAsIGN1cnJlbnQgbGV2ZWwgaXMgJyArIGx2bCk7XG4gICAgZGF0YSA9ICdkYXRhJyArICgobHZsIC0gdXApIHx8ICcnKTtcbiAgICBpZiAoIWpzb25Qb2ludGVyKSByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHZhciBleHByID0gZGF0YTtcbiAgdmFyIHNlZ21lbnRzID0ganNvblBvaW50ZXIuc3BsaXQoJy8nKTtcbiAgZm9yICh2YXIgaT0wOyBpPHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBzZWdtZW50c1tpXTtcbiAgICBpZiAoc2VnbWVudCkge1xuICAgICAgZGF0YSArPSBnZXRQcm9wZXJ0eSh1bmVzY2FwZUpzb25Qb2ludGVyKHNlZ21lbnQpKTtcbiAgICAgIGV4cHIgKz0gJyAmJiAnICsgZGF0YTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGV4cHI7XG59XG5cblxuZnVuY3Rpb24gam9pblBhdGhzIChhLCBiKSB7XG4gIGlmIChhID09ICdcIlwiJykgcmV0dXJuIGI7XG4gIHJldHVybiAoYSArICcgKyAnICsgYikucmVwbGFjZSgvKFteXFxcXF0pJyBcXCsgJy9nLCAnJDEnKTtcbn1cblxuXG5mdW5jdGlvbiB1bmVzY2FwZUZyYWdtZW50KHN0cikge1xuICByZXR1cm4gdW5lc2NhcGVKc29uUG9pbnRlcihkZWNvZGVVUklDb21wb25lbnQoc3RyKSk7XG59XG5cblxuZnVuY3Rpb24gZXNjYXBlRnJhZ21lbnQoc3RyKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoZXNjYXBlSnNvblBvaW50ZXIoc3RyKSk7XG59XG5cblxuZnVuY3Rpb24gZXNjYXBlSnNvblBvaW50ZXIoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvfi9nLCAnfjAnKS5yZXBsYWNlKC9cXC8vZywgJ34xJyk7XG59XG5cblxuZnVuY3Rpb24gdW5lc2NhcGVKc29uUG9pbnRlcihzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9+MS9nLCAnLycpLnJlcGxhY2UoL34wL2csICd+Jyk7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBLRVlXT1JEUyA9IFtcbiAgJ211bHRpcGxlT2YnLFxuICAnbWF4aW11bScsXG4gICdleGNsdXNpdmVNYXhpbXVtJyxcbiAgJ21pbmltdW0nLFxuICAnZXhjbHVzaXZlTWluaW11bScsXG4gICdtYXhMZW5ndGgnLFxuICAnbWluTGVuZ3RoJyxcbiAgJ3BhdHRlcm4nLFxuICAnYWRkaXRpb25hbEl0ZW1zJyxcbiAgJ21heEl0ZW1zJyxcbiAgJ21pbkl0ZW1zJyxcbiAgJ3VuaXF1ZUl0ZW1zJyxcbiAgJ21heFByb3BlcnRpZXMnLFxuICAnbWluUHJvcGVydGllcycsXG4gICdyZXF1aXJlZCcsXG4gICdhZGRpdGlvbmFsUHJvcGVydGllcycsXG4gICdlbnVtJyxcbiAgJ2Zvcm1hdCcsXG4gICdjb25zdCdcbl07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGFTY2hlbWEsIGtleXdvcmRzSnNvblBvaW50ZXJzKSB7XG4gIGZvciAodmFyIGk9MDsgaTxrZXl3b3Jkc0pzb25Qb2ludGVycy5sZW5ndGg7IGkrKykge1xuICAgIG1ldGFTY2hlbWEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG1ldGFTY2hlbWEpKTtcbiAgICB2YXIgc2VnbWVudHMgPSBrZXl3b3Jkc0pzb25Qb2ludGVyc1tpXS5zcGxpdCgnLycpO1xuICAgIHZhciBrZXl3b3JkcyA9IG1ldGFTY2hlbWE7XG4gICAgdmFyIGo7XG4gICAgZm9yIChqPTE7IGo8c2VnbWVudHMubGVuZ3RoOyBqKyspXG4gICAgICBrZXl3b3JkcyA9IGtleXdvcmRzW3NlZ21lbnRzW2pdXTtcblxuICAgIGZvciAoaj0wOyBqPEtFWVdPUkRTLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIga2V5ID0gS0VZV09SRFNbal07XG4gICAgICB2YXIgc2NoZW1hID0ga2V5d29yZHNba2V5XTtcbiAgICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAga2V5d29yZHNba2V5XSA9IHtcbiAgICAgICAgICBhbnlPZjogW1xuICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgeyAkcmVmOiAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Fqdi12YWxpZGF0b3IvYWp2L21hc3Rlci9saWIvcmVmcy9kYXRhLmpzb24jJyB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXRhU2NoZW1hO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIG1ldGFTY2hlbWEgPSByZXF1aXJlKCcuL3JlZnMvanNvbi1zY2hlbWEtZHJhZnQtMDcuanNvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgJGlkOiAnaHR0cHM6Ly9naXRodWIuY29tL2Fqdi12YWxpZGF0b3IvYWp2L2Jsb2IvbWFzdGVyL2xpYi9kZWZpbml0aW9uX3NjaGVtYS5qcycsXG4gIGRlZmluaXRpb25zOiB7XG4gICAgc2ltcGxlVHlwZXM6IG1ldGFTY2hlbWEuZGVmaW5pdGlvbnMuc2ltcGxlVHlwZXNcbiAgfSxcbiAgdHlwZTogJ29iamVjdCcsXG4gIGRlcGVuZGVuY2llczoge1xuICAgIHNjaGVtYTogWyd2YWxpZGF0ZSddLFxuICAgICRkYXRhOiBbJ3ZhbGlkYXRlJ10sXG4gICAgc3RhdGVtZW50czogWydpbmxpbmUnXSxcbiAgICB2YWxpZDoge25vdDoge3JlcXVpcmVkOiBbJ21hY3JvJ119fVxuICB9LFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgdHlwZTogbWV0YVNjaGVtYS5wcm9wZXJ0aWVzLnR5cGUsXG4gICAgc2NoZW1hOiB7dHlwZTogJ2Jvb2xlYW4nfSxcbiAgICBzdGF0ZW1lbnRzOiB7dHlwZTogJ2Jvb2xlYW4nfSxcbiAgICBkZXBlbmRlbmNpZXM6IHtcbiAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICBpdGVtczoge3R5cGU6ICdzdHJpbmcnfVxuICAgIH0sXG4gICAgbWV0YVNjaGVtYToge3R5cGU6ICdvYmplY3QnfSxcbiAgICBtb2RpZnlpbmc6IHt0eXBlOiAnYm9vbGVhbid9LFxuICAgIHZhbGlkOiB7dHlwZTogJ2Jvb2xlYW4nfSxcbiAgICAkZGF0YToge3R5cGU6ICdib29sZWFuJ30sXG4gICAgYXN5bmM6IHt0eXBlOiAnYm9vbGVhbid9LFxuICAgIGVycm9yczoge1xuICAgICAgYW55T2Y6IFtcbiAgICAgICAge3R5cGU6ICdib29sZWFuJ30sXG4gICAgICAgIHtjb25zdDogJ2Z1bGwnfVxuICAgICAgXVxuICAgIH1cbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfX2xpbWl0KGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZXJyb3JLZXl3b3JkO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgdmFyICRpc01heCA9ICRrZXl3b3JkID09ICdtYXhpbXVtJyxcbiAgICAkZXhjbHVzaXZlS2V5d29yZCA9ICRpc01heCA/ICdleGNsdXNpdmVNYXhpbXVtJyA6ICdleGNsdXNpdmVNaW5pbXVtJyxcbiAgICAkc2NoZW1hRXhjbCA9IGl0LnNjaGVtYVskZXhjbHVzaXZlS2V5d29yZF0sXG4gICAgJGlzRGF0YUV4Y2wgPSBpdC5vcHRzLiRkYXRhICYmICRzY2hlbWFFeGNsICYmICRzY2hlbWFFeGNsLiRkYXRhLFxuICAgICRvcCA9ICRpc01heCA/ICc8JyA6ICc+JyxcbiAgICAkbm90T3AgPSAkaXNNYXggPyAnPicgOiAnPCcsXG4gICAgJGVycm9yS2V5d29yZCA9IHVuZGVmaW5lZDtcbiAgaWYgKCEoJGlzRGF0YSB8fCB0eXBlb2YgJHNjaGVtYSA9PSAnbnVtYmVyJyB8fCAkc2NoZW1hID09PSB1bmRlZmluZWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCRrZXl3b3JkICsgJyBtdXN0IGJlIG51bWJlcicpO1xuICB9XG4gIGlmICghKCRpc0RhdGFFeGNsIHx8ICRzY2hlbWFFeGNsID09PSB1bmRlZmluZWQgfHwgdHlwZW9mICRzY2hlbWFFeGNsID09ICdudW1iZXInIHx8IHR5cGVvZiAkc2NoZW1hRXhjbCA9PSAnYm9vbGVhbicpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCRleGNsdXNpdmVLZXl3b3JkICsgJyBtdXN0IGJlIG51bWJlciBvciBib29sZWFuJyk7XG4gIH1cbiAgaWYgKCRpc0RhdGFFeGNsKSB7XG4gICAgdmFyICRzY2hlbWFWYWx1ZUV4Y2wgPSBpdC51dGlsLmdldERhdGEoJHNjaGVtYUV4Y2wuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFyciksXG4gICAgICAkZXhjbHVzaXZlID0gJ2V4Y2x1c2l2ZScgKyAkbHZsLFxuICAgICAgJGV4Y2xUeXBlID0gJ2V4Y2xUeXBlJyArICRsdmwsXG4gICAgICAkZXhjbElzTnVtYmVyID0gJ2V4Y2xJc051bWJlcicgKyAkbHZsLFxuICAgICAgJG9wRXhwciA9ICdvcCcgKyAkbHZsLFxuICAgICAgJG9wU3RyID0gJ1xcJyArICcgKyAkb3BFeHByICsgJyArIFxcJyc7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYUV4Y2wnICsgKCRsdmwpICsgJyA9ICcgKyAoJHNjaGVtYVZhbHVlRXhjbCkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZUV4Y2wgPSAnc2NoZW1hRXhjbCcgKyAkbHZsO1xuICAgIG91dCArPSAnIHZhciAnICsgKCRleGNsdXNpdmUpICsgJzsgdmFyICcgKyAoJGV4Y2xUeXBlKSArICcgPSB0eXBlb2YgJyArICgkc2NoZW1hVmFsdWVFeGNsKSArICc7IGlmICgnICsgKCRleGNsVHlwZSkgKyAnICE9IFxcJ2Jvb2xlYW5cXCcgJiYgJyArICgkZXhjbFR5cGUpICsgJyAhPSBcXCd1bmRlZmluZWRcXCcgJiYgJyArICgkZXhjbFR5cGUpICsgJyAhPSBcXCdudW1iZXJcXCcpIHsgJztcbiAgICB2YXIgJGVycm9yS2V5d29yZCA9ICRleGNsdXNpdmVLZXl3b3JkO1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ19leGNsdXNpdmVMaW1pdCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHt9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnICsgKCRleGNsdXNpdmVLZXl3b3JkKSArICcgc2hvdWxkIGJlIGJvb2xlYW5cXCcgJztcbiAgICAgIH1cbiAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgdmFyIF9fZXJyID0gb3V0O1xuICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9IGVsc2UgaWYgKCAnO1xuICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgJyArICgkZXhjbFR5cGUpICsgJyA9PSBcXCdudW1iZXJcXCcgPyAoICgnICsgKCRleGNsdXNpdmUpICsgJyA9ICcgKyAoJHNjaGVtYVZhbHVlKSArICcgPT09IHVuZGVmaW5lZCB8fCAnICsgKCRzY2hlbWFWYWx1ZUV4Y2wpICsgJyAnICsgKCRvcCkgKyAnPSAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnKSA/ICcgKyAoJGRhdGEpICsgJyAnICsgKCRub3RPcCkgKyAnPSAnICsgKCRzY2hlbWFWYWx1ZUV4Y2wpICsgJyA6ICcgKyAoJGRhdGEpICsgJyAnICsgKCRub3RPcCkgKyAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcgKSA6ICggKCcgKyAoJGV4Y2x1c2l2ZSkgKyAnID0gJyArICgkc2NoZW1hVmFsdWVFeGNsKSArICcgPT09IHRydWUpID8gJyArICgkZGF0YSkgKyAnICcgKyAoJG5vdE9wKSArICc9ICcgKyAoJHNjaGVtYVZhbHVlKSArICcgOiAnICsgKCRkYXRhKSArICcgJyArICgkbm90T3ApICsgJyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICkgfHwgJyArICgkZGF0YSkgKyAnICE9PSAnICsgKCRkYXRhKSArICcpIHsgdmFyIG9wJyArICgkbHZsKSArICcgPSAnICsgKCRleGNsdXNpdmUpICsgJyA/IFxcJycgKyAoJG9wKSArICdcXCcgOiBcXCcnICsgKCRvcCkgKyAnPVxcJzsgJztcbiAgICBpZiAoJHNjaGVtYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAkZXJyb3JLZXl3b3JkID0gJGV4Y2x1c2l2ZUtleXdvcmQ7XG4gICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAkZXhjbHVzaXZlS2V5d29yZDtcbiAgICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWFWYWx1ZUV4Y2w7XG4gICAgICAkaXNEYXRhID0gJGlzRGF0YUV4Y2w7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciAkZXhjbElzTnVtYmVyID0gdHlwZW9mICRzY2hlbWFFeGNsID09ICdudW1iZXInLFxuICAgICAgJG9wU3RyID0gJG9wO1xuICAgIGlmICgkZXhjbElzTnVtYmVyICYmICRpc0RhdGEpIHtcbiAgICAgIHZhciAkb3BFeHByID0gJ1xcJycgKyAkb3BTdHIgKyAnXFwnJztcbiAgICAgIG91dCArPSAnIGlmICggJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT0gXFwnbnVtYmVyXFwnKSB8fCAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgKCAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnID09PSB1bmRlZmluZWQgfHwgJyArICgkc2NoZW1hRXhjbCkgKyAnICcgKyAoJG9wKSArICc9ICcgKyAoJHNjaGVtYVZhbHVlKSArICcgPyAnICsgKCRkYXRhKSArICcgJyArICgkbm90T3ApICsgJz0gJyArICgkc2NoZW1hRXhjbCkgKyAnIDogJyArICgkZGF0YSkgKyAnICcgKyAoJG5vdE9wKSArICcgJyArICgkc2NoZW1hVmFsdWUpICsgJyApIHx8ICcgKyAoJGRhdGEpICsgJyAhPT0gJyArICgkZGF0YSkgKyAnKSB7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICgkZXhjbElzTnVtYmVyICYmICRzY2hlbWEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAkZXhjbHVzaXZlID0gdHJ1ZTtcbiAgICAgICAgJGVycm9yS2V5d29yZCA9ICRleGNsdXNpdmVLZXl3b3JkO1xuICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAkZXhjbHVzaXZlS2V5d29yZDtcbiAgICAgICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYUV4Y2w7XG4gICAgICAgICRub3RPcCArPSAnPSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoJGV4Y2xJc051bWJlcikgJHNjaGVtYVZhbHVlID0gTWF0aFskaXNNYXggPyAnbWluJyA6ICdtYXgnXSgkc2NoZW1hRXhjbCwgJHNjaGVtYSk7XG4gICAgICAgIGlmICgkc2NoZW1hRXhjbCA9PT0gKCRleGNsSXNOdW1iZXIgPyAkc2NoZW1hVmFsdWUgOiB0cnVlKSkge1xuICAgICAgICAgICRleGNsdXNpdmUgPSB0cnVlO1xuICAgICAgICAgICRlcnJvcktleXdvcmQgPSAkZXhjbHVzaXZlS2V5d29yZDtcbiAgICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAkZXhjbHVzaXZlS2V5d29yZDtcbiAgICAgICAgICAkbm90T3AgKz0gJz0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRleGNsdXNpdmUgPSBmYWxzZTtcbiAgICAgICAgICAkb3BTdHIgKz0gJz0nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgJG9wRXhwciA9ICdcXCcnICsgJG9wU3RyICsgJ1xcJyc7XG4gICAgICBvdXQgKz0gJyBpZiAoICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnICcgKyAoJGRhdGEpICsgJyAnICsgKCRub3RPcCkgKyAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcgfHwgJyArICgkZGF0YSkgKyAnICE9PSAnICsgKCRkYXRhKSArICcpIHsgJztcbiAgICB9XG4gIH1cbiAgJGVycm9yS2V5d29yZCA9ICRlcnJvcktleXdvcmQgfHwgJGtleXdvcmQ7XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgkZXJyb3JLZXl3b3JkIHx8ICdfbGltaXQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGNvbXBhcmlzb246ICcgKyAoJG9wRXhwcikgKyAnLCBsaW1pdDogJyArICgkc2NoZW1hVmFsdWUpICsgJywgZXhjbHVzaXZlOiAnICsgKCRleGNsdXNpdmUpICsgJyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBiZSAnICsgKCRvcFN0cikgKyAnICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ1xcJyArICcgKyAoJHNjaGVtYVZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hVmFsdWUpICsgJ1xcJyc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnIH0gJztcbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9fbGltaXRJdGVtcyhpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGVycm9yS2V5d29yZDtcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLiRkYXRhICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIGlmICghKCRpc0RhdGEgfHwgdHlwZW9mICRzY2hlbWEgPT0gJ251bWJlcicpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCRrZXl3b3JkICsgJyBtdXN0IGJlIG51bWJlcicpO1xuICB9XG4gIHZhciAkb3AgPSAka2V5d29yZCA9PSAnbWF4SXRlbXMnID8gJz4nIDogJzwnO1xuICBvdXQgKz0gJ2lmICggJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgfVxuICBvdXQgKz0gJyAnICsgKCRkYXRhKSArICcubGVuZ3RoICcgKyAoJG9wKSArICcgJyArICgkc2NoZW1hVmFsdWUpICsgJykgeyAnO1xuICB2YXIgJGVycm9yS2V5d29yZCA9ICRrZXl3b3JkO1xuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJGVycm9yS2V5d29yZCB8fCAnX2xpbWl0SXRlbXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGxpbWl0OiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIE5PVCBoYXZlICc7XG4gICAgICBpZiAoJGtleXdvcmQgPT0gJ21heEl0ZW1zJykge1xuICAgICAgICBvdXQgKz0gJ21vcmUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICdmZXdlcic7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB0aGFuICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ1xcJyArICcgKyAoJHNjaGVtYVZhbHVlKSArICcgKyBcXCcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWEpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgaXRlbXNcXCcgJztcbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6ICAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICd2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnICAgICAgICAgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICd9ICc7XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfX2xpbWl0TGVuZ3RoKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZXJyb3JLZXl3b3JkO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgaWYgKCEoJGlzRGF0YSB8fCB0eXBlb2YgJHNjaGVtYSA9PSAnbnVtYmVyJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJGtleXdvcmQgKyAnIG11c3QgYmUgbnVtYmVyJyk7XG4gIH1cbiAgdmFyICRvcCA9ICRrZXl3b3JkID09ICdtYXhMZW5ndGgnID8gJz4nIDogJzwnO1xuICBvdXQgKz0gJ2lmICggJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgfVxuICBpZiAoaXQub3B0cy51bmljb2RlID09PSBmYWxzZSkge1xuICAgIG91dCArPSAnICcgKyAoJGRhdGEpICsgJy5sZW5ndGggJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB1Y3MybGVuZ3RoKCcgKyAoJGRhdGEpICsgJykgJztcbiAgfVxuICBvdXQgKz0gJyAnICsgKCRvcCkgKyAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcpIHsgJztcbiAgdmFyICRlcnJvcktleXdvcmQgPSAka2V5d29yZDtcbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ19saW1pdExlbmd0aCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgbGltaXQ6ICcgKyAoJHNjaGVtYVZhbHVlKSArICcgfSAnO1xuICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgTk9UIGJlICc7XG4gICAgICBpZiAoJGtleXdvcmQgPT0gJ21heExlbmd0aCcpIHtcbiAgICAgICAgb3V0ICs9ICdsb25nZXInO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICdzaG9ydGVyJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIHRoYW4gJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnXFwnICsgJyArICgkc2NoZW1hVmFsdWUpICsgJyArIFxcJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyBjaGFyYWN0ZXJzXFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnfSAnO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX19saW1pdFByb3BlcnRpZXMoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRlcnJvcktleXdvcmQ7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy4kZGF0YSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICBpZiAoISgkaXNEYXRhIHx8IHR5cGVvZiAkc2NoZW1hID09ICdudW1iZXInKSkge1xuICAgIHRocm93IG5ldyBFcnJvcigka2V5d29yZCArICcgbXVzdCBiZSBudW1iZXInKTtcbiAgfVxuICB2YXIgJG9wID0gJGtleXdvcmQgPT0gJ21heFByb3BlcnRpZXMnID8gJz4nIDogJzwnO1xuICBvdXQgKz0gJ2lmICggJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgfVxuICBvdXQgKz0gJyBPYmplY3Qua2V5cygnICsgKCRkYXRhKSArICcpLmxlbmd0aCAnICsgKCRvcCkgKyAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcpIHsgJztcbiAgdmFyICRlcnJvcktleXdvcmQgPSAka2V5d29yZDtcbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ19saW1pdFByb3BlcnRpZXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGxpbWl0OiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIE5PVCBoYXZlICc7XG4gICAgICBpZiAoJGtleXdvcmQgPT0gJ21heFByb3BlcnRpZXMnKSB7XG4gICAgICAgIG91dCArPSAnbW9yZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJ2Zld2VyJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIHRoYW4gJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnXFwnICsgJyArICgkc2NoZW1hVmFsdWUpICsgJyArIFxcJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyBwcm9wZXJ0aWVzXFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnfSAnO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2FsbE9mKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgdmFyICRjbG9zaW5nQnJhY2VzID0gJyc7XG4gICRpdC5sZXZlbCsrO1xuICB2YXIgJG5leHRWYWxpZCA9ICd2YWxpZCcgKyAkaXQubGV2ZWw7XG4gIHZhciAkY3VycmVudEJhc2VJZCA9ICRpdC5iYXNlSWQsXG4gICAgJGFsbFNjaGVtYXNFbXB0eSA9IHRydWU7XG4gIHZhciBhcnIxID0gJHNjaGVtYTtcbiAgaWYgKGFycjEpIHtcbiAgICB2YXIgJHNjaCwgJGkgPSAtMSxcbiAgICAgIGwxID0gYXJyMS5sZW5ndGggLSAxO1xuICAgIHdoaWxlICgkaSA8IGwxKSB7XG4gICAgICAkc2NoID0gYXJyMVskaSArPSAxXTtcbiAgICAgIGlmICgoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/ICh0eXBlb2YgJHNjaCA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoKS5sZW5ndGggPiAwKSB8fCAkc2NoID09PSBmYWxzZSA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAgICAgJGFsbFNjaGVtYXNFbXB0eSA9IGZhbHNlO1xuICAgICAgICAkaXQuc2NoZW1hID0gJHNjaDtcbiAgICAgICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aCArICdbJyArICRpICsgJ10nO1xuICAgICAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoICsgJy8nICsgJGk7XG4gICAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgaWYgKCRhbGxTY2hlbWFzRW1wdHkpIHtcbiAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnICcgKyAoJGNsb3NpbmdCcmFjZXMuc2xpY2UoMCwgLTEpKSArICcgJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfYW55T2YoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGVycnMgPSAnZXJyc19fJyArICRsdmw7XG4gIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICB2YXIgJGNsb3NpbmdCcmFjZXMgPSAnJztcbiAgJGl0LmxldmVsKys7XG4gIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgdmFyICRub0VtcHR5U2NoZW1hID0gJHNjaGVtYS5ldmVyeShmdW5jdGlvbigkc2NoKSB7XG4gICAgcmV0dXJuIChpdC5vcHRzLnN0cmljdEtleXdvcmRzID8gKHR5cGVvZiAkc2NoID09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKCRzY2gpLmxlbmd0aCA+IDApIHx8ICRzY2ggPT09IGZhbHNlIDogaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkc2NoLCBpdC5SVUxFUy5hbGwpKTtcbiAgfSk7XG4gIGlmICgkbm9FbXB0eVNjaGVtYSkge1xuICAgIHZhciAkY3VycmVudEJhc2VJZCA9ICRpdC5iYXNlSWQ7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJGVycnMpICsgJyA9IGVycm9yczsgdmFyICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgICc7XG4gICAgdmFyICR3YXNDb21wb3NpdGUgPSBpdC5jb21wb3NpdGVSdWxlO1xuICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9IHRydWU7XG4gICAgdmFyIGFycjEgPSAkc2NoZW1hO1xuICAgIGlmIChhcnIxKSB7XG4gICAgICB2YXIgJHNjaCwgJGkgPSAtMSxcbiAgICAgICAgbDEgPSBhcnIxLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoJGkgPCBsMSkge1xuICAgICAgICAkc2NoID0gYXJyMVskaSArPSAxXTtcbiAgICAgICAgJGl0LnNjaGVtYSA9ICRzY2g7XG4gICAgICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGggKyAnWycgKyAkaSArICddJztcbiAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCArICcvJyArICRpO1xuICAgICAgICBvdXQgKz0gJyAgJyArIChpdC52YWxpZGF0ZSgkaXQpKSArICcgJztcbiAgICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkdmFsaWQpICsgJyB8fCAnICsgKCRuZXh0VmFsaWQpICsgJzsgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgIH1cbiAgICB9XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgICBvdXQgKz0gJyAnICsgKCRjbG9zaW5nQnJhY2VzKSArICcgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdhbnlPZicpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHt9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgbWF0Y2ggc29tZSBzY2hlbWEgaW4gYW55T2ZcXCcgJztcbiAgICAgIH1cbiAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcih2RXJyb3JzKTsgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IHZFcnJvcnM7IHJldHVybiBmYWxzZTsgJztcbiAgICAgIH1cbiAgICB9XG4gICAgb3V0ICs9ICcgfSBlbHNlIHsgIGVycm9ycyA9ICcgKyAoJGVycnMpICsgJzsgaWYgKHZFcnJvcnMgIT09IG51bGwpIHsgaWYgKCcgKyAoJGVycnMpICsgJykgdkVycm9ycy5sZW5ndGggPSAnICsgKCRlcnJzKSArICc7IGVsc2UgdkVycm9ycyA9IG51bGw7IH0gJztcbiAgICBpZiAoaXQub3B0cy5hbGxFcnJvcnMpIHtcbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2NvbW1lbnQoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGNvbW1lbnQgPSBpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRzY2hlbWEpO1xuICBpZiAoaXQub3B0cy4kY29tbWVudCA9PT0gdHJ1ZSkge1xuICAgIG91dCArPSAnIGNvbnNvbGUubG9nKCcgKyAoJGNvbW1lbnQpICsgJyk7JztcbiAgfSBlbHNlIGlmICh0eXBlb2YgaXQub3B0cy4kY29tbWVudCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgb3V0ICs9ICcgc2VsZi5fb3B0cy4kY29tbWVudCgnICsgKCRjb21tZW50KSArICcsICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJywgdmFsaWRhdGUucm9vdC5zY2hlbWEpOyc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfY29uc3QoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgaWYgKCEkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnOyc7XG4gIH1cbiAgb3V0ICs9ICd2YXIgJyArICgkdmFsaWQpICsgJyA9IGVxdWFsKCcgKyAoJGRhdGEpICsgJywgc2NoZW1hJyArICgkbHZsKSArICcpOyBpZiAoIScgKyAoJHZhbGlkKSArICcpIHsgICAnO1xuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ2NvbnN0JykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBhbGxvd2VkVmFsdWU6IHNjaGVtYScgKyAoJGx2bCkgKyAnIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIGJlIGVxdWFsIHRvIGNvbnN0YW50XFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICcgfSc7XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfY29udGFpbnMoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGVycnMgPSAnZXJyc19fJyArICRsdmw7XG4gIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICB2YXIgJGNsb3NpbmdCcmFjZXMgPSAnJztcbiAgJGl0LmxldmVsKys7XG4gIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgdmFyICRpZHggPSAnaScgKyAkbHZsLFxuICAgICRkYXRhTnh0ID0gJGl0LmRhdGFMZXZlbCA9IGl0LmRhdGFMZXZlbCArIDEsXG4gICAgJG5leHREYXRhID0gJ2RhdGEnICsgJGRhdGFOeHQsXG4gICAgJGN1cnJlbnRCYXNlSWQgPSBpdC5iYXNlSWQsXG4gICAgJG5vbkVtcHR5U2NoZW1hID0gKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyAodHlwZW9mICRzY2hlbWEgPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHNjaGVtYSkubGVuZ3RoID4gMCkgfHwgJHNjaGVtYSA9PT0gZmFsc2UgOiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRzY2hlbWEsIGl0LlJVTEVTLmFsbCkpO1xuICBvdXQgKz0gJ3ZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7dmFyICcgKyAoJHZhbGlkKSArICc7JztcbiAgaWYgKCRub25FbXB0eVNjaGVtYSkge1xuICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICAgICRpdC5zY2hlbWEgPSAkc2NoZW1hO1xuICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGg7XG4gICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aDtcbiAgICBvdXQgKz0gJyB2YXIgJyArICgkbmV4dFZhbGlkKSArICcgPSBmYWxzZTsgZm9yICh2YXIgJyArICgkaWR4KSArICcgPSAwOyAnICsgKCRpZHgpICsgJyA8ICcgKyAoJGRhdGEpICsgJy5sZW5ndGg7ICcgKyAoJGlkeCkgKyAnKyspIHsgJztcbiAgICAkaXQuZXJyb3JQYXRoID0gaXQudXRpbC5nZXRQYXRoRXhwcihpdC5lcnJvclBhdGgsICRpZHgsIGl0Lm9wdHMuanNvblBvaW50ZXJzLCB0cnVlKTtcbiAgICB2YXIgJHBhc3NEYXRhID0gJGRhdGEgKyAnWycgKyAkaWR4ICsgJ10nO1xuICAgICRpdC5kYXRhUGF0aEFyclskZGF0YU54dF0gPSAkaWR4O1xuICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCk7XG4gICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgIGlmIChpdC51dGlsLnZhck9jY3VyZW5jZXMoJGNvZGUsICRuZXh0RGF0YSkgPCAyKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKGl0LnV0aWwudmFyUmVwbGFjZSgkY29kZSwgJG5leHREYXRhLCAkcGFzc0RhdGEpKSArICcgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnICsgKCRjb2RlKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSBicmVhazsgfSAgJztcbiAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSAkd2FzQ29tcG9zaXRlO1xuICAgIG91dCArPSAnICcgKyAoJGNsb3NpbmdCcmFjZXMpICsgJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSB7JztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyBpZiAoJyArICgkZGF0YSkgKyAnLmxlbmd0aCA9PSAwKSB7JztcbiAgfVxuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ2NvbnRhaW5zJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczoge30gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIGNvbnRhaW4gYSB2YWxpZCBpdGVtXFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICcgfSBlbHNlIHsgJztcbiAgaWYgKCRub25FbXB0eVNjaGVtYSkge1xuICAgIG91dCArPSAnICBlcnJvcnMgPSAnICsgKCRlcnJzKSArICc7IGlmICh2RXJyb3JzICE9PSBudWxsKSB7IGlmICgnICsgKCRlcnJzKSArICcpIHZFcnJvcnMubGVuZ3RoID0gJyArICgkZXJycykgKyAnOyBlbHNlIHZFcnJvcnMgPSBudWxsOyB9ICc7XG4gIH1cbiAgaWYgKGl0Lm9wdHMuYWxsRXJyb3JzKSB7XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2N1c3RvbShpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGVycm9yS2V5d29yZDtcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGVycnMgPSAnZXJyc19fJyArICRsdmw7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy4kZGF0YSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICB2YXIgJHJ1bGUgPSB0aGlzLFxuICAgICRkZWZpbml0aW9uID0gJ2RlZmluaXRpb24nICsgJGx2bCxcbiAgICAkckRlZiA9ICRydWxlLmRlZmluaXRpb24sXG4gICAgJGNsb3NpbmdCcmFjZXMgPSAnJztcbiAgdmFyICRjb21waWxlLCAkaW5saW5lLCAkbWFjcm8sICRydWxlVmFsaWRhdGUsICR2YWxpZGF0ZUNvZGU7XG4gIGlmICgkaXNEYXRhICYmICRyRGVmLiRkYXRhKSB7XG4gICAgJHZhbGlkYXRlQ29kZSA9ICdrZXl3b3JkVmFsaWRhdGUnICsgJGx2bDtcbiAgICB2YXIgJHZhbGlkYXRlU2NoZW1hID0gJHJEZWYudmFsaWRhdGVTY2hlbWE7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJGRlZmluaXRpb24pICsgJyA9IFJVTEVTLmN1c3RvbVtcXCcnICsgKCRrZXl3b3JkKSArICdcXCddLmRlZmluaXRpb247IHZhciAnICsgKCR2YWxpZGF0ZUNvZGUpICsgJyA9ICcgKyAoJGRlZmluaXRpb24pICsgJy52YWxpZGF0ZTsnO1xuICB9IGVsc2Uge1xuICAgICRydWxlVmFsaWRhdGUgPSBpdC51c2VDdXN0b21SdWxlKCRydWxlLCAkc2NoZW1hLCBpdC5zY2hlbWEsIGl0KTtcbiAgICBpZiAoISRydWxlVmFsaWRhdGUpIHJldHVybjtcbiAgICAkc2NoZW1hVmFsdWUgPSAndmFsaWRhdGUuc2NoZW1hJyArICRzY2hlbWFQYXRoO1xuICAgICR2YWxpZGF0ZUNvZGUgPSAkcnVsZVZhbGlkYXRlLmNvZGU7XG4gICAgJGNvbXBpbGUgPSAkckRlZi5jb21waWxlO1xuICAgICRpbmxpbmUgPSAkckRlZi5pbmxpbmU7XG4gICAgJG1hY3JvID0gJHJEZWYubWFjcm87XG4gIH1cbiAgdmFyICRydWxlRXJycyA9ICR2YWxpZGF0ZUNvZGUgKyAnLmVycm9ycycsXG4gICAgJGkgPSAnaScgKyAkbHZsLFxuICAgICRydWxlRXJyID0gJ3J1bGVFcnInICsgJGx2bCxcbiAgICAkYXN5bmNLZXl3b3JkID0gJHJEZWYuYXN5bmM7XG4gIGlmICgkYXN5bmNLZXl3b3JkICYmICFpdC5hc3luYykgdGhyb3cgbmV3IEVycm9yKCdhc3luYyBrZXl3b3JkIGluIHN5bmMgc2NoZW1hJyk7XG4gIGlmICghKCRpbmxpbmUgfHwgJG1hY3JvKSkge1xuICAgIG91dCArPSAnJyArICgkcnVsZUVycnMpICsgJyA9IG51bGw7JztcbiAgfVxuICBvdXQgKz0gJ3ZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7dmFyICcgKyAoJHZhbGlkKSArICc7JztcbiAgaWYgKCRpc0RhdGEgJiYgJHJEZWYuJGRhdGEpIHtcbiAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgb3V0ICs9ICcgaWYgKCcgKyAoJHNjaGVtYVZhbHVlKSArICcgPT09IHVuZGVmaW5lZCkgeyAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgfSBlbHNlIHsgJztcbiAgICBpZiAoJHZhbGlkYXRlU2NoZW1hKSB7XG4gICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkZGVmaW5pdGlvbikgKyAnLnZhbGlkYXRlU2NoZW1hKCcgKyAoJHNjaGVtYVZhbHVlKSArICcpOyBpZiAoJyArICgkdmFsaWQpICsgJykgeyAnO1xuICAgIH1cbiAgfVxuICBpZiAoJGlubGluZSkge1xuICAgIGlmICgkckRlZi5zdGF0ZW1lbnRzKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCRydWxlVmFsaWRhdGUudmFsaWRhdGUpICsgJyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkcnVsZVZhbGlkYXRlLnZhbGlkYXRlKSArICc7ICc7XG4gICAgfVxuICB9IGVsc2UgaWYgKCRtYWNybykge1xuICAgIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICAgIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAgICRpdC5sZXZlbCsrO1xuICAgIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgICAkaXQuc2NoZW1hID0gJHJ1bGVWYWxpZGF0ZS52YWxpZGF0ZTtcbiAgICAkaXQuc2NoZW1hUGF0aCA9ICcnO1xuICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCkucmVwbGFjZSgvdmFsaWRhdGVcXC5zY2hlbWEvZywgJHZhbGlkYXRlQ29kZSk7XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgICBvdXQgKz0gJyAnICsgKCRjb2RlKTtcbiAgfSBlbHNlIHtcbiAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgb3V0ID0gJyc7XG4gICAgb3V0ICs9ICcgICcgKyAoJHZhbGlkYXRlQ29kZSkgKyAnLmNhbGwoICc7XG4gICAgaWYgKGl0Lm9wdHMucGFzc0NvbnRleHQpIHtcbiAgICAgIG91dCArPSAndGhpcyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnc2VsZic7XG4gICAgfVxuICAgIGlmICgkY29tcGlsZSB8fCAkckRlZi5zY2hlbWEgPT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyAsICcgKyAoJHNjaGVtYVZhbHVlKSArICcgLCAnICsgKCRkYXRhKSArICcgLCB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyAsIChkYXRhUGF0aCB8fCBcXCdcXCcpJztcbiAgICBpZiAoaXQuZXJyb3JQYXRoICE9ICdcIlwiJykge1xuICAgICAgb3V0ICs9ICcgKyAnICsgKGl0LmVycm9yUGF0aCk7XG4gICAgfVxuICAgIHZhciAkcGFyZW50RGF0YSA9ICRkYXRhTHZsID8gJ2RhdGEnICsgKCgkZGF0YUx2bCAtIDEpIHx8ICcnKSA6ICdwYXJlbnREYXRhJyxcbiAgICAgICRwYXJlbnREYXRhUHJvcGVydHkgPSAkZGF0YUx2bCA/IGl0LmRhdGFQYXRoQXJyWyRkYXRhTHZsXSA6ICdwYXJlbnREYXRhUHJvcGVydHknO1xuICAgIG91dCArPSAnICwgJyArICgkcGFyZW50RGF0YSkgKyAnICwgJyArICgkcGFyZW50RGF0YVByb3BlcnR5KSArICcgLCByb290RGF0YSApICAnO1xuICAgIHZhciBkZWZfY2FsbFJ1bGVWYWxpZGF0ZSA9IG91dDtcbiAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgIGlmICgkckRlZi5lcnJvcnMgPT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJztcbiAgICAgIGlmICgkYXN5bmNLZXl3b3JkKSB7XG4gICAgICAgIG91dCArPSAnYXdhaXQgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnJyArIChkZWZfY2FsbFJ1bGVWYWxpZGF0ZSkgKyAnOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoJGFzeW5jS2V5d29yZCkge1xuICAgICAgICAkcnVsZUVycnMgPSAnY3VzdG9tRXJyb3JzJyArICRsdmw7XG4gICAgICAgIG91dCArPSAnIHZhciAnICsgKCRydWxlRXJycykgKyAnID0gbnVsbDsgdHJ5IHsgJyArICgkdmFsaWQpICsgJyA9IGF3YWl0ICcgKyAoZGVmX2NhbGxSdWxlVmFsaWRhdGUpICsgJzsgfSBjYXRjaCAoZSkgeyAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7IGlmIChlIGluc3RhbmNlb2YgVmFsaWRhdGlvbkVycm9yKSAnICsgKCRydWxlRXJycykgKyAnID0gZS5lcnJvcnM7IGVsc2UgdGhyb3cgZTsgfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgJyArICgkcnVsZUVycnMpICsgJyA9IG51bGw7ICcgKyAoJHZhbGlkKSArICcgPSAnICsgKGRlZl9jYWxsUnVsZVZhbGlkYXRlKSArICc7ICc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkckRlZi5tb2RpZnlpbmcpIHtcbiAgICBvdXQgKz0gJyBpZiAoJyArICgkcGFyZW50RGF0YSkgKyAnKSAnICsgKCRkYXRhKSArICcgPSAnICsgKCRwYXJlbnREYXRhKSArICdbJyArICgkcGFyZW50RGF0YVByb3BlcnR5KSArICddOyc7XG4gIH1cbiAgb3V0ICs9ICcnICsgKCRjbG9zaW5nQnJhY2VzKTtcbiAgaWYgKCRyRGVmLnZhbGlkKSB7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIGlmICggJztcbiAgICBpZiAoJHJEZWYudmFsaWQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgb3V0ICs9ICcgISc7XG4gICAgICBpZiAoJG1hY3JvKSB7XG4gICAgICAgIG91dCArPSAnJyArICgkbmV4dFZhbGlkKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkdmFsaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCEkckRlZi52YWxpZCkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnKSB7ICc7XG4gICAgJGVycm9yS2V5d29yZCA9ICRydWxlLmtleXdvcmQ7XG4gICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgIG91dCA9ICcnO1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ2N1c3RvbScpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsga2V5d29yZDogXFwnJyArICgkcnVsZS5rZXl3b3JkKSArICdcXCcgfSAnO1xuICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIHBhc3MgXCInICsgKCRydWxlLmtleXdvcmQpICsgJ1wiIGtleXdvcmQgdmFsaWRhdGlvblxcJyAnO1xuICAgICAgfVxuICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB7fSAnO1xuICAgIH1cbiAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgfVxuICAgIHZhciBkZWZfY3VzdG9tRXJyb3IgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoJGlubGluZSkge1xuICAgICAgaWYgKCRyRGVmLmVycm9ycykge1xuICAgICAgICBpZiAoJHJEZWYuZXJyb3JzICE9ICdmdWxsJykge1xuICAgICAgICAgIG91dCArPSAnICBmb3IgKHZhciAnICsgKCRpKSArICc9JyArICgkZXJycykgKyAnOyAnICsgKCRpKSArICc8ZXJyb3JzOyAnICsgKCRpKSArICcrKykgeyB2YXIgJyArICgkcnVsZUVycikgKyAnID0gdkVycm9yc1snICsgKCRpKSArICddOyBpZiAoJyArICgkcnVsZUVycikgKyAnLmRhdGFQYXRoID09PSB1bmRlZmluZWQpICcgKyAoJHJ1bGVFcnIpICsgJy5kYXRhUGF0aCA9IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJzsgaWYgKCcgKyAoJHJ1bGVFcnIpICsgJy5zY2hlbWFQYXRoID09PSB1bmRlZmluZWQpIHsgJyArICgkcnVsZUVycikgKyAnLnNjaGVtYVBhdGggPSBcIicgKyAoJGVyclNjaGVtYVBhdGgpICsgJ1wiOyB9ICc7XG4gICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArICgkcnVsZUVycikgKyAnLnNjaGVtYSA9ICcgKyAoJHNjaGVtYVZhbHVlKSArICc7ICcgKyAoJHJ1bGVFcnIpICsgJy5kYXRhID0gJyArICgkZGF0YSkgKyAnOyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICgkckRlZi5lcnJvcnMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgJyArIChkZWZfY3VzdG9tRXJyb3IpICsgJyAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRlcnJzKSArICcgPT0gZXJyb3JzKSB7ICcgKyAoZGVmX2N1c3RvbUVycm9yKSArICcgfSBlbHNlIHsgIGZvciAodmFyICcgKyAoJGkpICsgJz0nICsgKCRlcnJzKSArICc7ICcgKyAoJGkpICsgJzxlcnJvcnM7ICcgKyAoJGkpICsgJysrKSB7IHZhciAnICsgKCRydWxlRXJyKSArICcgPSB2RXJyb3JzWycgKyAoJGkpICsgJ107IGlmICgnICsgKCRydWxlRXJyKSArICcuZGF0YVBhdGggPT09IHVuZGVmaW5lZCkgJyArICgkcnVsZUVycikgKyAnLmRhdGFQYXRoID0gKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnOyBpZiAoJyArICgkcnVsZUVycikgKyAnLnNjaGVtYVBhdGggPT09IHVuZGVmaW5lZCkgeyAnICsgKCRydWxlRXJyKSArICcuc2NoZW1hUGF0aCA9IFwiJyArICgkZXJyU2NoZW1hUGF0aCkgKyAnXCI7IH0gJztcbiAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAnICsgKCRydWxlRXJyKSArICcuc2NoZW1hID0gJyArICgkc2NoZW1hVmFsdWUpICsgJzsgJyArICgkcnVsZUVycikgKyAnLmRhdGEgPSAnICsgKCRkYXRhKSArICc7ICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIH0gfSAnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgkbWFjcm8pIHtcbiAgICAgIG91dCArPSAnICAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgkZXJyb3JLZXl3b3JkIHx8ICdjdXN0b20nKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGtleXdvcmQ6IFxcJycgKyAoJHJ1bGUua2V5d29yZCkgKyAnXFwnIH0gJztcbiAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgcGFzcyBcIicgKyAoJHJ1bGUua2V5d29yZCkgKyAnXCIga2V5d29yZCB2YWxpZGF0aW9uXFwnICc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcih2RXJyb3JzKTsgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSB2RXJyb3JzOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCRyRGVmLmVycm9ycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgJyArIChkZWZfY3VzdG9tRXJyb3IpICsgJyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKEFycmF5LmlzQXJyYXkoJyArICgkcnVsZUVycnMpICsgJykpIHsgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSAnICsgKCRydWxlRXJycykgKyAnOyBlbHNlIHZFcnJvcnMgPSB2RXJyb3JzLmNvbmNhdCgnICsgKCRydWxlRXJycykgKyAnKTsgZXJyb3JzID0gdkVycm9ycy5sZW5ndGg7ICBmb3IgKHZhciAnICsgKCRpKSArICc9JyArICgkZXJycykgKyAnOyAnICsgKCRpKSArICc8ZXJyb3JzOyAnICsgKCRpKSArICcrKykgeyB2YXIgJyArICgkcnVsZUVycikgKyAnID0gdkVycm9yc1snICsgKCRpKSArICddOyBpZiAoJyArICgkcnVsZUVycikgKyAnLmRhdGFQYXRoID09PSB1bmRlZmluZWQpICcgKyAoJHJ1bGVFcnIpICsgJy5kYXRhUGF0aCA9IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJzsgICcgKyAoJHJ1bGVFcnIpICsgJy5zY2hlbWFQYXRoID0gXCInICsgKCRlcnJTY2hlbWFQYXRoKSArICdcIjsgICc7XG4gICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyAnICsgKCRydWxlRXJyKSArICcuc2NoZW1hID0gJyArICgkc2NoZW1hVmFsdWUpICsgJzsgJyArICgkcnVsZUVycikgKyAnLmRhdGEgPSAnICsgKCRkYXRhKSArICc7ICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSB9IGVsc2UgeyAnICsgKGRlZl9jdXN0b21FcnJvcikgKyAnIH0gJztcbiAgICAgIH1cbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfZGVwZW5kZW5jaWVzKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICB2YXIgJHNjaGVtYURlcHMgPSB7fSxcbiAgICAkcHJvcGVydHlEZXBzID0ge30sXG4gICAgJG93blByb3BlcnRpZXMgPSBpdC5vcHRzLm93blByb3BlcnRpZXM7XG4gIGZvciAoJHByb3BlcnR5IGluICRzY2hlbWEpIHtcbiAgICBpZiAoJHByb3BlcnR5ID09ICdfX3Byb3RvX18nKSBjb250aW51ZTtcbiAgICB2YXIgJHNjaCA9ICRzY2hlbWFbJHByb3BlcnR5XTtcbiAgICB2YXIgJGRlcHMgPSBBcnJheS5pc0FycmF5KCRzY2gpID8gJHByb3BlcnR5RGVwcyA6ICRzY2hlbWFEZXBzO1xuICAgICRkZXBzWyRwcm9wZXJ0eV0gPSAkc2NoO1xuICB9XG4gIG91dCArPSAndmFyICcgKyAoJGVycnMpICsgJyA9IGVycm9yczsnO1xuICB2YXIgJGN1cnJlbnRFcnJvclBhdGggPSBpdC5lcnJvclBhdGg7XG4gIG91dCArPSAndmFyIG1pc3NpbmcnICsgKCRsdmwpICsgJzsnO1xuICBmb3IgKHZhciAkcHJvcGVydHkgaW4gJHByb3BlcnR5RGVwcykge1xuICAgICRkZXBzID0gJHByb3BlcnR5RGVwc1skcHJvcGVydHldO1xuICAgIGlmICgkZGVwcy5sZW5ndGgpIHtcbiAgICAgIG91dCArPSAnIGlmICggJyArICgkZGF0YSkgKyAoaXQudXRpbC5nZXRQcm9wZXJ0eSgkcHJvcGVydHkpKSArICcgIT09IHVuZGVmaW5lZCAnO1xuICAgICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgIG91dCArPSAnICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgnICsgKCRkYXRhKSArICcsIFxcJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5KSkgKyAnXFwnKSAnO1xuICAgICAgfVxuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgb3V0ICs9ICcgJiYgKCAnO1xuICAgICAgICB2YXIgYXJyMSA9ICRkZXBzO1xuICAgICAgICBpZiAoYXJyMSkge1xuICAgICAgICAgIHZhciAkcHJvcGVydHlLZXksICRpID0gLTEsXG4gICAgICAgICAgICBsMSA9IGFycjEubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoJGkgPCBsMSkge1xuICAgICAgICAgICAgJHByb3BlcnR5S2V5ID0gYXJyMVskaSArPSAxXTtcbiAgICAgICAgICAgIGlmICgkaSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB8fCAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyICRwcm9wID0gaXQudXRpbC5nZXRQcm9wZXJ0eSgkcHJvcGVydHlLZXkpLFxuICAgICAgICAgICAgICAkdXNlRGF0YSA9ICRkYXRhICsgJHByb3A7XG4gICAgICAgICAgICBvdXQgKz0gJyAoICggJyArICgkdXNlRGF0YSkgKyAnID09PSB1bmRlZmluZWQgJztcbiAgICAgICAgICAgIGlmICgkb3duUHJvcGVydGllcykge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB8fCAhIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgnICsgKCRkYXRhKSArICcsIFxcJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5S2V5KSkgKyAnXFwnKSAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICcpICYmIChtaXNzaW5nJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoaXQub3B0cy5qc29uUG9pbnRlcnMgPyAkcHJvcGVydHlLZXkgOiAkcHJvcCkpICsgJykgKSAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJykpIHsgICc7XG4gICAgICAgIHZhciAkcHJvcGVydHlQYXRoID0gJ21pc3NpbmcnICsgJGx2bCxcbiAgICAgICAgICAkbWlzc2luZ1Byb3BlcnR5ID0gJ1xcJyArICcgKyAkcHJvcGVydHlQYXRoICsgJyArIFxcJyc7XG4gICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICBpdC5lcnJvclBhdGggPSBpdC5vcHRzLmpzb25Qb2ludGVycyA/IGl0LnV0aWwuZ2V0UGF0aEV4cHIoJGN1cnJlbnRFcnJvclBhdGgsICRwcm9wZXJ0eVBhdGgsIHRydWUpIDogJGN1cnJlbnRFcnJvclBhdGggKyAnICsgJyArICRwcm9wZXJ0eVBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdkZXBlbmRlbmNpZXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IHByb3BlcnR5OiBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eSkpICsgJ1xcJywgbWlzc2luZ1Byb3BlcnR5OiBcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcJywgZGVwc0NvdW50OiAnICsgKCRkZXBzLmxlbmd0aCkgKyAnLCBkZXBzOiBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRkZXBzLmxlbmd0aCA9PSAxID8gJGRlcHNbMF0gOiAkZGVwcy5qb2luKFwiLCBcIikpKSArICdcXCcgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgaGF2ZSAnO1xuICAgICAgICAgICAgaWYgKCRkZXBzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAgIG91dCArPSAncHJvcGVydHkgJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkZGVwc1swXSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICdwcm9wZXJ0aWVzICcgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJGRlcHMuam9pbihcIiwgXCIpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJyB3aGVuIHByb3BlcnR5ICcgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5KSkgKyAnIGlzIHByZXNlbnRcXCcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgKSB7ICc7XG4gICAgICAgIHZhciBhcnIyID0gJGRlcHM7XG4gICAgICAgIGlmIChhcnIyKSB7XG4gICAgICAgICAgdmFyICRwcm9wZXJ0eUtleSwgaTIgPSAtMSxcbiAgICAgICAgICAgIGwyID0gYXJyMi5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChpMiA8IGwyKSB7XG4gICAgICAgICAgICAkcHJvcGVydHlLZXkgPSBhcnIyW2kyICs9IDFdO1xuICAgICAgICAgICAgdmFyICRwcm9wID0gaXQudXRpbC5nZXRQcm9wZXJ0eSgkcHJvcGVydHlLZXkpLFxuICAgICAgICAgICAgICAkbWlzc2luZ1Byb3BlcnR5ID0gaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5S2V5KSxcbiAgICAgICAgICAgICAgJHVzZURhdGEgPSAkZGF0YSArICRwcm9wO1xuICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICBpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGgoJGN1cnJlbnRFcnJvclBhdGgsICRwcm9wZXJ0eUtleSwgaXQub3B0cy5qc29uUG9pbnRlcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCAnICsgKCR1c2VEYXRhKSArICcgPT09IHVuZGVmaW5lZCAnO1xuICAgICAgICAgICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHx8ICEgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCcgKyAoJGRhdGEpICsgJywgXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHlLZXkpKSArICdcXCcpICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJykgeyAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnZGVwZW5kZW5jaWVzJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBwcm9wZXJ0eTogXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHkpKSArICdcXCcsIG1pc3NpbmdQcm9wZXJ0eTogXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXCcsIGRlcHNDb3VudDogJyArICgkZGVwcy5sZW5ndGgpICsgJywgZGVwczogXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkZGVwcy5sZW5ndGggPT0gMSA/ICRkZXBzWzBdIDogJGRlcHMuam9pbihcIiwgXCIpKSkgKyAnXFwnIH0gJztcbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgaGF2ZSAnO1xuICAgICAgICAgICAgICAgIGlmICgkZGVwcy5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICdwcm9wZXJ0eSAnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRkZXBzWzBdKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAncHJvcGVydGllcyAnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRkZXBzLmpvaW4oXCIsIFwiKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB3aGVuIHByb3BlcnR5ICcgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5KSkgKyAnIGlzIHByZXNlbnRcXCcgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgfSAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAgICc7XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpdC5lcnJvclBhdGggPSAkY3VycmVudEVycm9yUGF0aDtcbiAgdmFyICRjdXJyZW50QmFzZUlkID0gJGl0LmJhc2VJZDtcbiAgZm9yICh2YXIgJHByb3BlcnR5IGluICRzY2hlbWFEZXBzKSB7XG4gICAgdmFyICRzY2ggPSAkc2NoZW1hRGVwc1skcHJvcGVydHldO1xuICAgIGlmICgoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/ICh0eXBlb2YgJHNjaCA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoKS5sZW5ndGggPiAwKSB8fCAkc2NoID09PSBmYWxzZSA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAgIG91dCArPSAnICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsgaWYgKCAnICsgKCRkYXRhKSArIChpdC51dGlsLmdldFByb3BlcnR5KCRwcm9wZXJ0eSkpICsgJyAhPT0gdW5kZWZpbmVkICc7XG4gICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgb3V0ICs9ICcgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCcgKyAoJGRhdGEpICsgJywgXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHkpKSArICdcXCcpICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJykgeyAnO1xuICAgICAgJGl0LnNjaGVtYSA9ICRzY2g7XG4gICAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgkcHJvcGVydHkpO1xuICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCArICcvJyArIGl0LnV0aWwuZXNjYXBlRnJhZ21lbnQoJHByb3BlcnR5KTtcbiAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgb3V0ICs9ICcgfSAgJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgeyAnO1xuICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgICAnICsgKCRjbG9zaW5nQnJhY2VzKSArICcgaWYgKCcgKyAoJGVycnMpICsgJyA9PSBlcnJvcnMpIHsnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2VudW0oaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgdmFyICRpID0gJ2knICsgJGx2bCxcbiAgICAkdlNjaGVtYSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgaWYgKCEkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJHZTY2hlbWEpICsgJyA9IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJzsnO1xuICB9XG4gIG91dCArPSAndmFyICcgKyAoJHZhbGlkKSArICc7JztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyBpZiAoc2NoZW1hJyArICgkbHZsKSArICcgPT09IHVuZGVmaW5lZCkgJyArICgkdmFsaWQpICsgJyA9IHRydWU7IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYScgKyAoJGx2bCkgKyAnKSkgJyArICgkdmFsaWQpICsgJyA9IGZhbHNlOyBlbHNlIHsnO1xuICB9XG4gIG91dCArPSAnJyArICgkdmFsaWQpICsgJyA9IGZhbHNlO2ZvciAodmFyICcgKyAoJGkpICsgJz0wOyAnICsgKCRpKSArICc8JyArICgkdlNjaGVtYSkgKyAnLmxlbmd0aDsgJyArICgkaSkgKyAnKyspIGlmIChlcXVhbCgnICsgKCRkYXRhKSArICcsICcgKyAoJHZTY2hlbWEpICsgJ1snICsgKCRpKSArICddKSkgeyAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgYnJlYWs7IH0nO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnICB9ICAnO1xuICB9XG4gIG91dCArPSAnIGlmICghJyArICgkdmFsaWQpICsgJykgeyAgICc7XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnZW51bScpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgYWxsb3dlZFZhbHVlczogc2NoZW1hJyArICgkbHZsKSArICcgfSAnO1xuICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgYmUgZXF1YWwgdG8gb25lIG9mIHRoZSBhbGxvd2VkIHZhbHVlc1xcJyAnO1xuICAgIH1cbiAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnIH0nO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2Zvcm1hdChpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICBpZiAoaXQub3B0cy5mb3JtYXQgPT09IGZhbHNlKSB7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLiRkYXRhICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIHZhciAkdW5rbm93bkZvcm1hdHMgPSBpdC5vcHRzLnVua25vd25Gb3JtYXRzLFxuICAgICRhbGxvd1Vua25vd24gPSBBcnJheS5pc0FycmF5KCR1bmtub3duRm9ybWF0cyk7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgdmFyICRmb3JtYXQgPSAnZm9ybWF0JyArICRsdmwsXG4gICAgICAkaXNPYmplY3QgPSAnaXNPYmplY3QnICsgJGx2bCxcbiAgICAgICRmb3JtYXRUeXBlID0gJ2Zvcm1hdFR5cGUnICsgJGx2bDtcbiAgICBvdXQgKz0gJyB2YXIgJyArICgkZm9ybWF0KSArICcgPSBmb3JtYXRzWycgKyAoJHNjaGVtYVZhbHVlKSArICddOyB2YXIgJyArICgkaXNPYmplY3QpICsgJyA9IHR5cGVvZiAnICsgKCRmb3JtYXQpICsgJyA9PSBcXCdvYmplY3RcXCcgJiYgISgnICsgKCRmb3JtYXQpICsgJyBpbnN0YW5jZW9mIFJlZ0V4cCkgJiYgJyArICgkZm9ybWF0KSArICcudmFsaWRhdGU7IHZhciAnICsgKCRmb3JtYXRUeXBlKSArICcgPSAnICsgKCRpc09iamVjdCkgKyAnICYmICcgKyAoJGZvcm1hdCkgKyAnLnR5cGUgfHwgXFwnc3RyaW5nXFwnOyBpZiAoJyArICgkaXNPYmplY3QpICsgJykgeyAnO1xuICAgIGlmIChpdC5hc3luYykge1xuICAgICAgb3V0ICs9ICcgdmFyIGFzeW5jJyArICgkbHZsKSArICcgPSAnICsgKCRmb3JtYXQpICsgJy5hc3luYzsgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgJyArICgkZm9ybWF0KSArICcgPSAnICsgKCRmb3JtYXQpICsgJy52YWxpZGF0ZTsgfSBpZiAoICAnO1xuICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ3N0cmluZ1xcJykgfHwgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgKCc7XG4gICAgaWYgKCR1bmtub3duRm9ybWF0cyAhPSAnaWdub3JlJykge1xuICAgICAgb3V0ICs9ICcgKCcgKyAoJHNjaGVtYVZhbHVlKSArICcgJiYgIScgKyAoJGZvcm1hdCkgKyAnICc7XG4gICAgICBpZiAoJGFsbG93VW5rbm93bikge1xuICAgICAgICBvdXQgKz0gJyAmJiBzZWxmLl9vcHRzLnVua25vd25Gb3JtYXRzLmluZGV4T2YoJyArICgkc2NoZW1hVmFsdWUpICsgJykgPT0gLTEgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnKSB8fCAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyAoJyArICgkZm9ybWF0KSArICcgJiYgJyArICgkZm9ybWF0VHlwZSkgKyAnID09IFxcJycgKyAoJHJ1bGVUeXBlKSArICdcXCcgJiYgISh0eXBlb2YgJyArICgkZm9ybWF0KSArICcgPT0gXFwnZnVuY3Rpb25cXCcgPyAnO1xuICAgIGlmIChpdC5hc3luYykge1xuICAgICAgb3V0ICs9ICcgKGFzeW5jJyArICgkbHZsKSArICcgPyBhd2FpdCAnICsgKCRmb3JtYXQpICsgJygnICsgKCRkYXRhKSArICcpIDogJyArICgkZm9ybWF0KSArICcoJyArICgkZGF0YSkgKyAnKSkgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgJyArICgkZm9ybWF0KSArICcoJyArICgkZGF0YSkgKyAnKSAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyA6ICcgKyAoJGZvcm1hdCkgKyAnLnRlc3QoJyArICgkZGF0YSkgKyAnKSkpKSkgeyc7XG4gIH0gZWxzZSB7XG4gICAgdmFyICRmb3JtYXQgPSBpdC5mb3JtYXRzWyRzY2hlbWFdO1xuICAgIGlmICghJGZvcm1hdCkge1xuICAgICAgaWYgKCR1bmtub3duRm9ybWF0cyA9PSAnaWdub3JlJykge1xuICAgICAgICBpdC5sb2dnZXIud2FybigndW5rbm93biBmb3JtYXQgXCInICsgJHNjaGVtYSArICdcIiBpZ25vcmVkIGluIHNjaGVtYSBhdCBwYXRoIFwiJyArIGl0LmVyclNjaGVtYVBhdGggKyAnXCInKTtcbiAgICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICBvdXQgKz0gJyBpZiAodHJ1ZSkgeyAnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvdXQ7XG4gICAgICB9IGVsc2UgaWYgKCRhbGxvd1Vua25vd24gJiYgJHVua25vd25Gb3JtYXRzLmluZGV4T2YoJHNjaGVtYSkgPj0gMCkge1xuICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigndW5rbm93biBmb3JtYXQgXCInICsgJHNjaGVtYSArICdcIiBpcyB1c2VkIGluIHNjaGVtYSBhdCBwYXRoIFwiJyArIGl0LmVyclNjaGVtYVBhdGggKyAnXCInKTtcbiAgICAgIH1cbiAgICB9XG4gICAgdmFyICRpc09iamVjdCA9IHR5cGVvZiAkZm9ybWF0ID09ICdvYmplY3QnICYmICEoJGZvcm1hdCBpbnN0YW5jZW9mIFJlZ0V4cCkgJiYgJGZvcm1hdC52YWxpZGF0ZTtcbiAgICB2YXIgJGZvcm1hdFR5cGUgPSAkaXNPYmplY3QgJiYgJGZvcm1hdC50eXBlIHx8ICdzdHJpbmcnO1xuICAgIGlmICgkaXNPYmplY3QpIHtcbiAgICAgIHZhciAkYXN5bmMgPSAkZm9ybWF0LmFzeW5jID09PSB0cnVlO1xuICAgICAgJGZvcm1hdCA9ICRmb3JtYXQudmFsaWRhdGU7XG4gICAgfVxuICAgIGlmICgkZm9ybWF0VHlwZSAhPSAkcnVsZVR5cGUpIHtcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cbiAgICBpZiAoJGFzeW5jKSB7XG4gICAgICBpZiAoIWl0LmFzeW5jKSB0aHJvdyBuZXcgRXJyb3IoJ2FzeW5jIGZvcm1hdCBpbiBzeW5jIHNjaGVtYScpO1xuICAgICAgdmFyICRmb3JtYXRSZWYgPSAnZm9ybWF0cycgKyBpdC51dGlsLmdldFByb3BlcnR5KCRzY2hlbWEpICsgJy52YWxpZGF0ZSc7XG4gICAgICBvdXQgKz0gJyBpZiAoIShhd2FpdCAnICsgKCRmb3JtYXRSZWYpICsgJygnICsgKCRkYXRhKSArICcpKSkgeyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyBpZiAoISAnO1xuICAgICAgdmFyICRmb3JtYXRSZWYgPSAnZm9ybWF0cycgKyBpdC51dGlsLmdldFByb3BlcnR5KCRzY2hlbWEpO1xuICAgICAgaWYgKCRpc09iamVjdCkgJGZvcm1hdFJlZiArPSAnLnZhbGlkYXRlJztcbiAgICAgIGlmICh0eXBlb2YgJGZvcm1hdCA9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIG91dCArPSAnICcgKyAoJGZvcm1hdFJlZikgKyAnKCcgKyAoJGRhdGEpICsgJykgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnICcgKyAoJGZvcm1hdFJlZikgKyAnLnRlc3QoJyArICgkZGF0YSkgKyAnKSAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcpIHsgJztcbiAgICB9XG4gIH1cbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdmb3JtYXQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGZvcm1hdDogICc7XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnJyArICgkc2NoZW1hVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJycgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkc2NoZW1hKSk7XG4gICAgfVxuICAgIG91dCArPSAnICB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBtYXRjaCBmb3JtYXQgXCInO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICdcXCcgKyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICsgXFwnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArIChpdC51dGlsLmVzY2FwZVF1b3Rlcygkc2NoZW1hKSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJ1wiXFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkc2NoZW1hKSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnIH0gJztcbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9pZihpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gICRpdC5sZXZlbCsrO1xuICB2YXIgJG5leHRWYWxpZCA9ICd2YWxpZCcgKyAkaXQubGV2ZWw7XG4gIHZhciAkdGhlblNjaCA9IGl0LnNjaGVtYVsndGhlbiddLFxuICAgICRlbHNlU2NoID0gaXQuc2NoZW1hWydlbHNlJ10sXG4gICAgJHRoZW5QcmVzZW50ID0gJHRoZW5TY2ggIT09IHVuZGVmaW5lZCAmJiAoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/ICh0eXBlb2YgJHRoZW5TY2ggPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHRoZW5TY2gpLmxlbmd0aCA+IDApIHx8ICR0aGVuU2NoID09PSBmYWxzZSA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHRoZW5TY2gsIGl0LlJVTEVTLmFsbCkpLFxuICAgICRlbHNlUHJlc2VudCA9ICRlbHNlU2NoICE9PSB1bmRlZmluZWQgJiYgKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyAodHlwZW9mICRlbHNlU2NoID09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKCRlbHNlU2NoKS5sZW5ndGggPiAwKSB8fCAkZWxzZVNjaCA9PT0gZmFsc2UgOiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRlbHNlU2NoLCBpdC5SVUxFUy5hbGwpKSxcbiAgICAkY3VycmVudEJhc2VJZCA9ICRpdC5iYXNlSWQ7XG4gIGlmICgkdGhlblByZXNlbnQgfHwgJGVsc2VQcmVzZW50KSB7XG4gICAgdmFyICRpZkNsYXVzZTtcbiAgICAkaXQuY3JlYXRlRXJyb3JzID0gZmFsc2U7XG4gICAgJGl0LnNjaGVtYSA9ICRzY2hlbWE7XG4gICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aDtcbiAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoO1xuICAgIG91dCArPSAnIHZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7IHZhciAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgICc7XG4gICAgdmFyICR3YXNDb21wb3NpdGUgPSBpdC5jb21wb3NpdGVSdWxlO1xuICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9IHRydWU7XG4gICAgb3V0ICs9ICcgICcgKyAoaXQudmFsaWRhdGUoJGl0KSkgKyAnICc7XG4gICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICRpdC5jcmVhdGVFcnJvcnMgPSB0cnVlO1xuICAgIG91dCArPSAnICBlcnJvcnMgPSAnICsgKCRlcnJzKSArICc7IGlmICh2RXJyb3JzICE9PSBudWxsKSB7IGlmICgnICsgKCRlcnJzKSArICcpIHZFcnJvcnMubGVuZ3RoID0gJyArICgkZXJycykgKyAnOyBlbHNlIHZFcnJvcnMgPSBudWxsOyB9ICAnO1xuICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9ICR3YXNDb21wb3NpdGU7XG4gICAgaWYgKCR0aGVuUHJlc2VudCkge1xuICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICAnO1xuICAgICAgJGl0LnNjaGVtYSA9IGl0LnNjaGVtYVsndGhlbiddO1xuICAgICAgJGl0LnNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy50aGVuJztcbiAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvdGhlbic7XG4gICAgICBvdXQgKz0gJyAgJyArIChpdC52YWxpZGF0ZSgkaXQpKSArICcgJztcbiAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgIG91dCArPSAnICcgKyAoJHZhbGlkKSArICcgPSAnICsgKCRuZXh0VmFsaWQpICsgJzsgJztcbiAgICAgIGlmICgkdGhlblByZXNlbnQgJiYgJGVsc2VQcmVzZW50KSB7XG4gICAgICAgICRpZkNsYXVzZSA9ICdpZkNsYXVzZScgKyAkbHZsO1xuICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkaWZDbGF1c2UpICsgJyA9IFxcJ3RoZW5cXCc7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkaWZDbGF1c2UgPSAnXFwndGhlblxcJyc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICBpZiAoJGVsc2VQcmVzZW50KSB7XG4gICAgICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgfVxuICAgIGlmICgkZWxzZVByZXNlbnQpIHtcbiAgICAgICRpdC5zY2hlbWEgPSBpdC5zY2hlbWFbJ2Vsc2UnXTtcbiAgICAgICRpdC5zY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArICcuZWxzZSc7XG4gICAgICAkaXQuZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnL2Vsc2UnO1xuICAgICAgb3V0ICs9ICcgICcgKyAoaXQudmFsaWRhdGUoJGl0KSkgKyAnICc7XG4gICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkbmV4dFZhbGlkKSArICc7ICc7XG4gICAgICBpZiAoJHRoZW5QcmVzZW50ICYmICRlbHNlUHJlc2VudCkge1xuICAgICAgICAkaWZDbGF1c2UgPSAnaWZDbGF1c2UnICsgJGx2bDtcbiAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJGlmQ2xhdXNlKSArICcgPSBcXCdlbHNlXFwnOyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJGlmQ2xhdXNlID0gJ1xcJ2Vsc2VcXCcnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyBpZiAoIScgKyAoJHZhbGlkKSArICcpIHsgICB2YXIgZXJyID0gICAnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ2lmJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBmYWlsaW5nS2V5d29yZDogJyArICgkaWZDbGF1c2UpICsgJyB9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgbWF0Y2ggXCJcXCcgKyAnICsgKCRpZkNsYXVzZSkgKyAnICsgXFwnXCIgc2NoZW1hXFwnICc7XG4gICAgICB9XG4gICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgfVxuICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IodkVycm9ycyk7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSB2RXJyb3JzOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICB9XG4gICAgfVxuICAgIG91dCArPSAnIH0gICAnO1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbi8vYWxsIHJlcXVpcmVzIG11c3QgYmUgZXhwbGljaXQgYmVjYXVzZSBicm93c2VyaWZ5IHdvbid0IHdvcmsgd2l0aCBkeW5hbWljIHJlcXVpcmVzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgJyRyZWYnOiByZXF1aXJlKCcuL3JlZicpLFxuICBhbGxPZjogcmVxdWlyZSgnLi9hbGxPZicpLFxuICBhbnlPZjogcmVxdWlyZSgnLi9hbnlPZicpLFxuICAnJGNvbW1lbnQnOiByZXF1aXJlKCcuL2NvbW1lbnQnKSxcbiAgY29uc3Q6IHJlcXVpcmUoJy4vY29uc3QnKSxcbiAgY29udGFpbnM6IHJlcXVpcmUoJy4vY29udGFpbnMnKSxcbiAgZGVwZW5kZW5jaWVzOiByZXF1aXJlKCcuL2RlcGVuZGVuY2llcycpLFxuICAnZW51bSc6IHJlcXVpcmUoJy4vZW51bScpLFxuICBmb3JtYXQ6IHJlcXVpcmUoJy4vZm9ybWF0JyksXG4gICdpZic6IHJlcXVpcmUoJy4vaWYnKSxcbiAgaXRlbXM6IHJlcXVpcmUoJy4vaXRlbXMnKSxcbiAgbWF4aW11bTogcmVxdWlyZSgnLi9fbGltaXQnKSxcbiAgbWluaW11bTogcmVxdWlyZSgnLi9fbGltaXQnKSxcbiAgbWF4SXRlbXM6IHJlcXVpcmUoJy4vX2xpbWl0SXRlbXMnKSxcbiAgbWluSXRlbXM6IHJlcXVpcmUoJy4vX2xpbWl0SXRlbXMnKSxcbiAgbWF4TGVuZ3RoOiByZXF1aXJlKCcuL19saW1pdExlbmd0aCcpLFxuICBtaW5MZW5ndGg6IHJlcXVpcmUoJy4vX2xpbWl0TGVuZ3RoJyksXG4gIG1heFByb3BlcnRpZXM6IHJlcXVpcmUoJy4vX2xpbWl0UHJvcGVydGllcycpLFxuICBtaW5Qcm9wZXJ0aWVzOiByZXF1aXJlKCcuL19saW1pdFByb3BlcnRpZXMnKSxcbiAgbXVsdGlwbGVPZjogcmVxdWlyZSgnLi9tdWx0aXBsZU9mJyksXG4gIG5vdDogcmVxdWlyZSgnLi9ub3QnKSxcbiAgb25lT2Y6IHJlcXVpcmUoJy4vb25lT2YnKSxcbiAgcGF0dGVybjogcmVxdWlyZSgnLi9wYXR0ZXJuJyksXG4gIHByb3BlcnRpZXM6IHJlcXVpcmUoJy4vcHJvcGVydGllcycpLFxuICBwcm9wZXJ0eU5hbWVzOiByZXF1aXJlKCcuL3Byb3BlcnR5TmFtZXMnKSxcbiAgcmVxdWlyZWQ6IHJlcXVpcmUoJy4vcmVxdWlyZWQnKSxcbiAgdW5pcXVlSXRlbXM6IHJlcXVpcmUoJy4vdW5pcXVlSXRlbXMnKSxcbiAgdmFsaWRhdGU6IHJlcXVpcmUoJy4vdmFsaWRhdGUnKVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfaXRlbXMoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGVycnMgPSAnZXJyc19fJyArICRsdmw7XG4gIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICB2YXIgJGNsb3NpbmdCcmFjZXMgPSAnJztcbiAgJGl0LmxldmVsKys7XG4gIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgdmFyICRpZHggPSAnaScgKyAkbHZsLFxuICAgICRkYXRhTnh0ID0gJGl0LmRhdGFMZXZlbCA9IGl0LmRhdGFMZXZlbCArIDEsXG4gICAgJG5leHREYXRhID0gJ2RhdGEnICsgJGRhdGFOeHQsXG4gICAgJGN1cnJlbnRCYXNlSWQgPSBpdC5iYXNlSWQ7XG4gIG91dCArPSAndmFyICcgKyAoJGVycnMpICsgJyA9IGVycm9yczt2YXIgJyArICgkdmFsaWQpICsgJzsnO1xuICBpZiAoQXJyYXkuaXNBcnJheSgkc2NoZW1hKSkge1xuICAgIHZhciAkYWRkaXRpb25hbEl0ZW1zID0gaXQuc2NoZW1hLmFkZGl0aW9uYWxJdGVtcztcbiAgICBpZiAoJGFkZGl0aW9uYWxJdGVtcyA9PT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICcgKyAoJHZhbGlkKSArICcgPSAnICsgKCRkYXRhKSArICcubGVuZ3RoIDw9ICcgKyAoJHNjaGVtYS5sZW5ndGgpICsgJzsgJztcbiAgICAgIHZhciAkY3VyckVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aDtcbiAgICAgICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvYWRkaXRpb25hbEl0ZW1zJztcbiAgICAgIG91dCArPSAnICBpZiAoIScgKyAoJHZhbGlkKSArICcpIHsgICAnO1xuICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnYWRkaXRpb25hbEl0ZW1zJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBsaW1pdDogJyArICgkc2NoZW1hLmxlbmd0aCkgKyAnIH0gJztcbiAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgTk9UIGhhdmUgbW9yZSB0aGFuICcgKyAoJHNjaGVtYS5sZW5ndGgpICsgJyBpdGVtc1xcJyAnO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogZmFsc2UgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgIH1cbiAgICAgIHZhciBfX2VyciA9IG91dDtcbiAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgJGVyclNjaGVtYVBhdGggPSAkY3VyckVyclNjaGVtYVBhdGg7XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgYXJyMSA9ICRzY2hlbWE7XG4gICAgaWYgKGFycjEpIHtcbiAgICAgIHZhciAkc2NoLCAkaSA9IC0xLFxuICAgICAgICBsMSA9IGFycjEubGVuZ3RoIC0gMTtcbiAgICAgIHdoaWxlICgkaSA8IGwxKSB7XG4gICAgICAgICRzY2ggPSBhcnIxWyRpICs9IDFdO1xuICAgICAgICBpZiAoKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyAodHlwZW9mICRzY2ggPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHNjaCkubGVuZ3RoID4gMCkgfHwgJHNjaCA9PT0gZmFsc2UgOiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRzY2gsIGl0LlJVTEVTLmFsbCkpKSB7XG4gICAgICAgICAgb3V0ICs9ICcgJyArICgkbmV4dFZhbGlkKSArICcgPSB0cnVlOyBpZiAoJyArICgkZGF0YSkgKyAnLmxlbmd0aCA+ICcgKyAoJGkpICsgJykgeyAnO1xuICAgICAgICAgIHZhciAkcGFzc0RhdGEgPSAkZGF0YSArICdbJyArICRpICsgJ10nO1xuICAgICAgICAgICRpdC5zY2hlbWEgPSAkc2NoO1xuICAgICAgICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGggKyAnWycgKyAkaSArICddJztcbiAgICAgICAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoICsgJy8nICsgJGk7XG4gICAgICAgICAgJGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAkaSwgaXQub3B0cy5qc29uUG9pbnRlcnMsIHRydWUpO1xuICAgICAgICAgICRpdC5kYXRhUGF0aEFyclskZGF0YU54dF0gPSAkaTtcbiAgICAgICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJyArICgkY29kZSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIH0gICc7XG4gICAgICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgeyAnO1xuICAgICAgICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mICRhZGRpdGlvbmFsSXRlbXMgPT0gJ29iamVjdCcgJiYgKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyAodHlwZW9mICRhZGRpdGlvbmFsSXRlbXMgPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJGFkZGl0aW9uYWxJdGVtcykubGVuZ3RoID4gMCkgfHwgJGFkZGl0aW9uYWxJdGVtcyA9PT0gZmFsc2UgOiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRhZGRpdGlvbmFsSXRlbXMsIGl0LlJVTEVTLmFsbCkpKSB7XG4gICAgICAkaXQuc2NoZW1hID0gJGFkZGl0aW9uYWxJdGVtcztcbiAgICAgICRpdC5zY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArICcuYWRkaXRpb25hbEl0ZW1zJztcbiAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvYWRkaXRpb25hbEl0ZW1zJztcbiAgICAgIG91dCArPSAnICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsgaWYgKCcgKyAoJGRhdGEpICsgJy5sZW5ndGggPiAnICsgKCRzY2hlbWEubGVuZ3RoKSArICcpIHsgIGZvciAodmFyICcgKyAoJGlkeCkgKyAnID0gJyArICgkc2NoZW1hLmxlbmd0aCkgKyAnOyAnICsgKCRpZHgpICsgJyA8ICcgKyAoJGRhdGEpICsgJy5sZW5ndGg7ICcgKyAoJGlkeCkgKyAnKyspIHsgJztcbiAgICAgICRpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGhFeHByKGl0LmVycm9yUGF0aCwgJGlkeCwgaXQub3B0cy5qc29uUG9pbnRlcnMsIHRydWUpO1xuICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGlkeCArICddJztcbiAgICAgICRpdC5kYXRhUGF0aEFyclskZGF0YU54dF0gPSAkaWR4O1xuICAgICAgdmFyICRjb2RlID0gaXQudmFsaWRhdGUoJGl0KTtcbiAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgIGlmIChpdC51dGlsLnZhck9jY3VyZW5jZXMoJGNvZGUsICRuZXh0RGF0YSkgPCAyKSB7XG4gICAgICAgIG91dCArPSAnICcgKyAoaXQudXRpbC52YXJSZXBsYWNlKCRjb2RlLCAkbmV4dERhdGEsICRwYXNzRGF0YSkpICsgJyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnICsgKCRjb2RlKSArICcgJztcbiAgICAgIH1cbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnIGlmICghJyArICgkbmV4dFZhbGlkKSArICcpIGJyZWFrOyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSB9ICAnO1xuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyAodHlwZW9mICRzY2hlbWEgPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHNjaGVtYSkubGVuZ3RoID4gMCkgfHwgJHNjaGVtYSA9PT0gZmFsc2UgOiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRzY2hlbWEsIGl0LlJVTEVTLmFsbCkpKSB7XG4gICAgJGl0LnNjaGVtYSA9ICRzY2hlbWE7XG4gICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aDtcbiAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoO1xuICAgIG91dCArPSAnICBmb3IgKHZhciAnICsgKCRpZHgpICsgJyA9ICcgKyAoMCkgKyAnOyAnICsgKCRpZHgpICsgJyA8ICcgKyAoJGRhdGEpICsgJy5sZW5ndGg7ICcgKyAoJGlkeCkgKyAnKyspIHsgJztcbiAgICAkaXQuZXJyb3JQYXRoID0gaXQudXRpbC5nZXRQYXRoRXhwcihpdC5lcnJvclBhdGgsICRpZHgsIGl0Lm9wdHMuanNvblBvaW50ZXJzLCB0cnVlKTtcbiAgICB2YXIgJHBhc3NEYXRhID0gJGRhdGEgKyAnWycgKyAkaWR4ICsgJ10nO1xuICAgICRpdC5kYXRhUGF0aEFyclskZGF0YU54dF0gPSAkaWR4O1xuICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCk7XG4gICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgIGlmIChpdC51dGlsLnZhck9jY3VyZW5jZXMoJGNvZGUsICRuZXh0RGF0YSkgPCAyKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKGl0LnV0aWwudmFyUmVwbGFjZSgkY29kZSwgJG5leHREYXRhLCAkcGFzc0RhdGEpKSArICcgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnICsgKCRjb2RlKSArICcgJztcbiAgICB9XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmICghJyArICgkbmV4dFZhbGlkKSArICcpIGJyZWFrOyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9JztcbiAgfVxuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnICcgKyAoJGNsb3NpbmdCcmFjZXMpICsgJyBpZiAoJyArICgkZXJycykgKyAnID09IGVycm9ycykgeyc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfbXVsdGlwbGVPZihpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgaWYgKCEoJGlzRGF0YSB8fCB0eXBlb2YgJHNjaGVtYSA9PSAnbnVtYmVyJykpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJGtleXdvcmQgKyAnIG11c3QgYmUgbnVtYmVyJyk7XG4gIH1cbiAgb3V0ICs9ICd2YXIgZGl2aXNpb24nICsgKCRsdmwpICsgJztpZiAoJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9PSB1bmRlZmluZWQgJiYgKCB0eXBlb2YgJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPSBcXCdudW1iZXJcXCcgfHwgJztcbiAgfVxuICBvdXQgKz0gJyAoZGl2aXNpb24nICsgKCRsdmwpICsgJyA9ICcgKyAoJGRhdGEpICsgJyAvICcgKyAoJHNjaGVtYVZhbHVlKSArICcsICc7XG4gIGlmIChpdC5vcHRzLm11bHRpcGxlT2ZQcmVjaXNpb24pIHtcbiAgICBvdXQgKz0gJyBNYXRoLmFicyhNYXRoLnJvdW5kKGRpdmlzaW9uJyArICgkbHZsKSArICcpIC0gZGl2aXNpb24nICsgKCRsdmwpICsgJykgPiAxZS0nICsgKGl0Lm9wdHMubXVsdGlwbGVPZlByZWNpc2lvbikgKyAnICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgZGl2aXNpb24nICsgKCRsdmwpICsgJyAhPT0gcGFyc2VJbnQoZGl2aXNpb24nICsgKCRsdmwpICsgJykgJztcbiAgfVxuICBvdXQgKz0gJyApICc7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgICkgICc7XG4gIH1cbiAgb3V0ICs9ICcgKSB7ICAgJztcbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdtdWx0aXBsZU9mJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBtdWx0aXBsZU9mOiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIGJlIG11bHRpcGxlIG9mICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ1xcJyArICcgKyAoJHNjaGVtYVZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hVmFsdWUpICsgJ1xcJyc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnfSAnO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX25vdChpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJGVycnMgPSAnZXJyc19fJyArICRsdmw7XG4gIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICBpZiAoKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyAodHlwZW9mICRzY2hlbWEgPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHNjaGVtYSkubGVuZ3RoID4gMCkgfHwgJHNjaGVtYSA9PT0gZmFsc2UgOiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRzY2hlbWEsIGl0LlJVTEVTLmFsbCkpKSB7XG4gICAgJGl0LnNjaGVtYSA9ICRzY2hlbWE7XG4gICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aDtcbiAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoO1xuICAgIG91dCArPSAnIHZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7ICAnO1xuICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICAgICRpdC5jcmVhdGVFcnJvcnMgPSBmYWxzZTtcbiAgICB2YXIgJGFsbEVycm9yc09wdGlvbjtcbiAgICBpZiAoJGl0Lm9wdHMuYWxsRXJyb3JzKSB7XG4gICAgICAkYWxsRXJyb3JzT3B0aW9uID0gJGl0Lm9wdHMuYWxsRXJyb3JzO1xuICAgICAgJGl0Lm9wdHMuYWxsRXJyb3JzID0gZmFsc2U7XG4gICAgfVxuICAgIG91dCArPSAnICcgKyAoaXQudmFsaWRhdGUoJGl0KSkgKyAnICc7XG4gICAgJGl0LmNyZWF0ZUVycm9ycyA9IHRydWU7XG4gICAgaWYgKCRhbGxFcnJvcnNPcHRpb24pICRpdC5vcHRzLmFsbEVycm9ycyA9ICRhbGxFcnJvcnNPcHRpb247XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpIHsgICAnO1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdub3QnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7fSAnO1xuICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIE5PVCBiZSB2YWxpZFxcJyAnO1xuICAgICAgfVxuICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB7fSAnO1xuICAgIH1cbiAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gZWxzZSB7ICBlcnJvcnMgPSAnICsgKCRlcnJzKSArICc7IGlmICh2RXJyb3JzICE9PSBudWxsKSB7IGlmICgnICsgKCRlcnJzKSArICcpIHZFcnJvcnMubGVuZ3RoID0gJyArICgkZXJycykgKyAnOyBlbHNlIHZFcnJvcnMgPSBudWxsOyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMuYWxsRXJyb3JzKSB7XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCArPSAnICB2YXIgZXJyID0gICAnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ25vdCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHt9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgTk9UIGJlIHZhbGlkXFwnICc7XG4gICAgICB9XG4gICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgfVxuICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmIChmYWxzZSkgeyAnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9vbmVPZihpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICB2YXIgJGN1cnJlbnRCYXNlSWQgPSAkaXQuYmFzZUlkLFxuICAgICRwcmV2VmFsaWQgPSAncHJldlZhbGlkJyArICRsdmwsXG4gICAgJHBhc3NpbmdTY2hlbWFzID0gJ3Bhc3NpbmdTY2hlbWFzJyArICRsdmw7XG4gIG91dCArPSAndmFyICcgKyAoJGVycnMpICsgJyA9IGVycm9ycyAsICcgKyAoJHByZXZWYWxpZCkgKyAnID0gZmFsc2UgLCAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2UgLCAnICsgKCRwYXNzaW5nU2NoZW1hcykgKyAnID0gbnVsbDsgJztcbiAgdmFyICR3YXNDb21wb3NpdGUgPSBpdC5jb21wb3NpdGVSdWxlO1xuICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICB2YXIgYXJyMSA9ICRzY2hlbWE7XG4gIGlmIChhcnIxKSB7XG4gICAgdmFyICRzY2gsICRpID0gLTEsXG4gICAgICBsMSA9IGFycjEubGVuZ3RoIC0gMTtcbiAgICB3aGlsZSAoJGkgPCBsMSkge1xuICAgICAgJHNjaCA9IGFycjFbJGkgKz0gMV07XG4gICAgICBpZiAoKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyAodHlwZW9mICRzY2ggPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHNjaCkubGVuZ3RoID4gMCkgfHwgJHNjaCA9PT0gZmFsc2UgOiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRzY2gsIGl0LlJVTEVTLmFsbCkpKSB7XG4gICAgICAgICRpdC5zY2hlbWEgPSAkc2NoO1xuICAgICAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoICsgJ1snICsgJGkgKyAnXSc7XG4gICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGggKyAnLycgKyAkaTtcbiAgICAgICAgb3V0ICs9ICcgICcgKyAoaXQudmFsaWRhdGUoJGl0KSkgKyAnICc7XG4gICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0VmFsaWQpICsgJyA9IHRydWU7ICc7XG4gICAgICB9XG4gICAgICBpZiAoJGkpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnICYmICcgKyAoJHByZXZWYWxpZCkgKyAnKSB7ICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgJyArICgkcGFzc2luZ1NjaGVtYXMpICsgJyA9IFsnICsgKCRwYXNzaW5nU2NoZW1hcykgKyAnLCAnICsgKCRpKSArICddOyB9IGVsc2UgeyAnO1xuICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpIHsgJyArICgkdmFsaWQpICsgJyA9ICcgKyAoJHByZXZWYWxpZCkgKyAnID0gdHJ1ZTsgJyArICgkcGFzc2luZ1NjaGVtYXMpICsgJyA9ICcgKyAoJGkpICsgJzsgfSc7XG4gICAgfVxuICB9XG4gIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9ICR3YXNDb21wb3NpdGU7XG4gIG91dCArPSAnJyArICgkY2xvc2luZ0JyYWNlcykgKyAnaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ29uZU9mJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBwYXNzaW5nU2NoZW1hczogJyArICgkcGFzc2luZ1NjaGVtYXMpICsgJyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBtYXRjaCBleGFjdGx5IG9uZSBzY2hlbWEgaW4gb25lT2ZcXCcgJztcbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHt9ICc7XG4gIH1cbiAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IodkVycm9ycyk7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IHZFcnJvcnM7IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH1cbiAgb3V0ICs9ICd9IGVsc2UgeyAgZXJyb3JzID0gJyArICgkZXJycykgKyAnOyBpZiAodkVycm9ycyAhPT0gbnVsbCkgeyBpZiAoJyArICgkZXJycykgKyAnKSB2RXJyb3JzLmxlbmd0aCA9ICcgKyAoJGVycnMpICsgJzsgZWxzZSB2RXJyb3JzID0gbnVsbDsgfSc7XG4gIGlmIChpdC5vcHRzLmFsbEVycm9ycykge1xuICAgIG91dCArPSAnIH0gJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9wYXR0ZXJuKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy4kZGF0YSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICB2YXIgJHJlZ2V4cCA9ICRpc0RhdGEgPyAnKG5ldyBSZWdFeHAoJyArICRzY2hlbWFWYWx1ZSArICcpKScgOiBpdC51c2VQYXR0ZXJuKCRzY2hlbWEpO1xuICBvdXQgKz0gJ2lmICggJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ3N0cmluZ1xcJykgfHwgJztcbiAgfVxuICBvdXQgKz0gJyAhJyArICgkcmVnZXhwKSArICcudGVzdCgnICsgKCRkYXRhKSArICcpICkgeyAgICc7XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncGF0dGVybicpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgcGF0dGVybjogICc7XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnJyArICgkc2NoZW1hVmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJycgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkc2NoZW1hKSk7XG4gICAgfVxuICAgIG91dCArPSAnICB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBtYXRjaCBwYXR0ZXJuIFwiJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnXFwnICsgJyArICgkc2NoZW1hVmFsdWUpICsgJyArIFxcJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHNjaGVtYSkpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICdcIlxcJyAnO1xuICAgIH1cbiAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICBvdXQgKz0gJyAsIHNjaGVtYTogICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ3ZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJHNjaGVtYSkpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgICAgICAgICAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHt9ICc7XG4gIH1cbiAgdmFyIF9fZXJyID0gb3V0O1xuICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdC5hc3luYykge1xuICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgfVxuICBvdXQgKz0gJ30gJztcbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9wcm9wZXJ0aWVzKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICB2YXIgJGtleSA9ICdrZXknICsgJGx2bCxcbiAgICAkaWR4ID0gJ2lkeCcgKyAkbHZsLFxuICAgICRkYXRhTnh0ID0gJGl0LmRhdGFMZXZlbCA9IGl0LmRhdGFMZXZlbCArIDEsXG4gICAgJG5leHREYXRhID0gJ2RhdGEnICsgJGRhdGFOeHQsXG4gICAgJGRhdGFQcm9wZXJ0aWVzID0gJ2RhdGFQcm9wZXJ0aWVzJyArICRsdmw7XG4gIHZhciAkc2NoZW1hS2V5cyA9IE9iamVjdC5rZXlzKCRzY2hlbWEgfHwge30pLmZpbHRlcihub3RQcm90byksXG4gICAgJHBQcm9wZXJ0aWVzID0gaXQuc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzIHx8IHt9LFxuICAgICRwUHJvcGVydHlLZXlzID0gT2JqZWN0LmtleXMoJHBQcm9wZXJ0aWVzKS5maWx0ZXIobm90UHJvdG8pLFxuICAgICRhUHJvcGVydGllcyA9IGl0LnNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyxcbiAgICAkc29tZVByb3BlcnRpZXMgPSAkc2NoZW1hS2V5cy5sZW5ndGggfHwgJHBQcm9wZXJ0eUtleXMubGVuZ3RoLFxuICAgICRub0FkZGl0aW9uYWwgPSAkYVByb3BlcnRpZXMgPT09IGZhbHNlLFxuICAgICRhZGRpdGlvbmFsSXNTY2hlbWEgPSB0eXBlb2YgJGFQcm9wZXJ0aWVzID09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKCRhUHJvcGVydGllcykubGVuZ3RoLFxuICAgICRyZW1vdmVBZGRpdGlvbmFsID0gaXQub3B0cy5yZW1vdmVBZGRpdGlvbmFsLFxuICAgICRjaGVja0FkZGl0aW9uYWwgPSAkbm9BZGRpdGlvbmFsIHx8ICRhZGRpdGlvbmFsSXNTY2hlbWEgfHwgJHJlbW92ZUFkZGl0aW9uYWwsXG4gICAgJG93blByb3BlcnRpZXMgPSBpdC5vcHRzLm93blByb3BlcnRpZXMsXG4gICAgJGN1cnJlbnRCYXNlSWQgPSBpdC5iYXNlSWQ7XG4gIHZhciAkcmVxdWlyZWQgPSBpdC5zY2hlbWEucmVxdWlyZWQ7XG4gIGlmICgkcmVxdWlyZWQgJiYgIShpdC5vcHRzLiRkYXRhICYmICRyZXF1aXJlZC4kZGF0YSkgJiYgJHJlcXVpcmVkLmxlbmd0aCA8IGl0Lm9wdHMubG9vcFJlcXVpcmVkKSB7XG4gICAgdmFyICRyZXF1aXJlZEhhc2ggPSBpdC51dGlsLnRvSGFzaCgkcmVxdWlyZWQpO1xuICB9XG5cbiAgZnVuY3Rpb24gbm90UHJvdG8ocCkge1xuICAgIHJldHVybiBwICE9PSAnX19wcm90b19fJztcbiAgfVxuICBvdXQgKz0gJ3ZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7dmFyICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsnO1xuICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICBvdXQgKz0gJyB2YXIgJyArICgkZGF0YVByb3BlcnRpZXMpICsgJyA9IHVuZGVmaW5lZDsnO1xuICB9XG4gIGlmICgkY2hlY2tBZGRpdGlvbmFsKSB7XG4gICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnID0gJyArICgkZGF0YVByb3BlcnRpZXMpICsgJyB8fCBPYmplY3Qua2V5cygnICsgKCRkYXRhKSArICcpOyBmb3IgKHZhciAnICsgKCRpZHgpICsgJz0wOyAnICsgKCRpZHgpICsgJzwnICsgKCRkYXRhUHJvcGVydGllcykgKyAnLmxlbmd0aDsgJyArICgkaWR4KSArICcrKykgeyB2YXIgJyArICgka2V5KSArICcgPSAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnWycgKyAoJGlkeCkgKyAnXTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgZm9yICh2YXIgJyArICgka2V5KSArICcgaW4gJyArICgkZGF0YSkgKyAnKSB7ICc7XG4gICAgfVxuICAgIGlmICgkc29tZVByb3BlcnRpZXMpIHtcbiAgICAgIG91dCArPSAnIHZhciBpc0FkZGl0aW9uYWwnICsgKCRsdmwpICsgJyA9ICEoZmFsc2UgJztcbiAgICAgIGlmICgkc2NoZW1hS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKCRzY2hlbWFLZXlzLmxlbmd0aCA+IDgpIHtcbiAgICAgICAgICBvdXQgKz0gJyB8fCB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcuaGFzT3duUHJvcGVydHkoJyArICgka2V5KSArICcpICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGFycjEgPSAkc2NoZW1hS2V5cztcbiAgICAgICAgICBpZiAoYXJyMSkge1xuICAgICAgICAgICAgdmFyICRwcm9wZXJ0eUtleSwgaTEgPSAtMSxcbiAgICAgICAgICAgICAgbDEgPSBhcnIxLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoaTEgPCBsMSkge1xuICAgICAgICAgICAgICAkcHJvcGVydHlLZXkgPSBhcnIxW2kxICs9IDFdO1xuICAgICAgICAgICAgICBvdXQgKz0gJyB8fCAnICsgKCRrZXkpICsgJyA9PSAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJHByb3BlcnR5S2V5KSkgKyAnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoJHBQcm9wZXJ0eUtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBhcnIyID0gJHBQcm9wZXJ0eUtleXM7XG4gICAgICAgIGlmIChhcnIyKSB7XG4gICAgICAgICAgdmFyICRwUHJvcGVydHksICRpID0gLTEsXG4gICAgICAgICAgICBsMiA9IGFycjIubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoJGkgPCBsMikge1xuICAgICAgICAgICAgJHBQcm9wZXJ0eSA9IGFycjJbJGkgKz0gMV07XG4gICAgICAgICAgICBvdXQgKz0gJyB8fCAnICsgKGl0LnVzZVBhdHRlcm4oJHBQcm9wZXJ0eSkpICsgJy50ZXN0KCcgKyAoJGtleSkgKyAnKSAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb3V0ICs9ICcgKTsgaWYgKGlzQWRkaXRpb25hbCcgKyAoJGx2bCkgKyAnKSB7ICc7XG4gICAgfVxuICAgIGlmICgkcmVtb3ZlQWRkaXRpb25hbCA9PSAnYWxsJykge1xuICAgICAgb3V0ICs9ICcgZGVsZXRlICcgKyAoJGRhdGEpICsgJ1snICsgKCRrZXkpICsgJ107ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciAkY3VycmVudEVycm9yUGF0aCA9IGl0LmVycm9yUGF0aDtcbiAgICAgIHZhciAkYWRkaXRpb25hbFByb3BlcnR5ID0gJ1xcJyArICcgKyAka2V5ICsgJyArIFxcJyc7XG4gICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgIGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAka2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICB9XG4gICAgICBpZiAoJG5vQWRkaXRpb25hbCkge1xuICAgICAgICBpZiAoJHJlbW92ZUFkZGl0aW9uYWwpIHtcbiAgICAgICAgICBvdXQgKz0gJyBkZWxldGUgJyArICgkZGF0YSkgKyAnWycgKyAoJGtleSkgKyAnXTsgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyAnICsgKCRuZXh0VmFsaWQpICsgJyA9IGZhbHNlOyAnO1xuICAgICAgICAgIHZhciAkY3VyckVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aDtcbiAgICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnL2FkZGl0aW9uYWxQcm9wZXJ0aWVzJztcbiAgICAgICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnYWRkaXRpb25hbFByb3BlcnRpZXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGFkZGl0aW9uYWxQcm9wZXJ0eTogXFwnJyArICgkYWRkaXRpb25hbFByb3BlcnR5KSArICdcXCcgfSAnO1xuICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnJztcbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIG91dCArPSAnaXMgYW4gaW52YWxpZCBhZGRpdGlvbmFsIHByb3BlcnR5JztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJ3Nob3VsZCBOT1QgaGF2ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiBmYWxzZSAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICAkZXJyU2NoZW1hUGF0aCA9ICRjdXJyRXJyU2NoZW1hUGF0aDtcbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgYnJlYWs7ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCRhZGRpdGlvbmFsSXNTY2hlbWEpIHtcbiAgICAgICAgaWYgKCRyZW1vdmVBZGRpdGlvbmFsID09ICdmYWlsaW5nJykge1xuICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7ICAnO1xuICAgICAgICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICAgICAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICAgICAgICAgICRpdC5zY2hlbWEgPSAkYVByb3BlcnRpZXM7XG4gICAgICAgICAgJGl0LnNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy5hZGRpdGlvbmFsUHJvcGVydGllcyc7XG4gICAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9hZGRpdGlvbmFsUHJvcGVydGllcyc7XG4gICAgICAgICAgJGl0LmVycm9yUGF0aCA9IGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSA/IGl0LmVycm9yUGF0aCA6IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAka2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGtleSArICddJztcbiAgICAgICAgICAkaXQuZGF0YVBhdGhBcnJbJGRhdGFOeHRdID0gJGtleTtcbiAgICAgICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJyArICgkY29kZSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIGlmICghJyArICgkbmV4dFZhbGlkKSArICcpIHsgZXJyb3JzID0gJyArICgkZXJycykgKyAnOyBpZiAodmFsaWRhdGUuZXJyb3JzICE9PSBudWxsKSB7IGlmIChlcnJvcnMpIHZhbGlkYXRlLmVycm9ycy5sZW5ndGggPSBlcnJvcnM7IGVsc2UgdmFsaWRhdGUuZXJyb3JzID0gbnVsbDsgfSBkZWxldGUgJyArICgkZGF0YSkgKyAnWycgKyAoJGtleSkgKyAnXTsgfSAgJztcbiAgICAgICAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSAkd2FzQ29tcG9zaXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRpdC5zY2hlbWEgPSAkYVByb3BlcnRpZXM7XG4gICAgICAgICAgJGl0LnNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy5hZGRpdGlvbmFsUHJvcGVydGllcyc7XG4gICAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9hZGRpdGlvbmFsUHJvcGVydGllcyc7XG4gICAgICAgICAgJGl0LmVycm9yUGF0aCA9IGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSA/IGl0LmVycm9yUGF0aCA6IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAka2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGtleSArICddJztcbiAgICAgICAgICAkaXQuZGF0YVBhdGhBcnJbJGRhdGFOeHRdID0gJGtleTtcbiAgICAgICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJyArICgkY29kZSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSBicmVhazsgJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGl0LmVycm9yUGF0aCA9ICRjdXJyZW50RXJyb3JQYXRoO1xuICAgIH1cbiAgICBpZiAoJHNvbWVQcm9wZXJ0aWVzKSB7XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gICc7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgeyAnO1xuICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgIH1cbiAgfVxuICB2YXIgJHVzZURlZmF1bHRzID0gaXQub3B0cy51c2VEZWZhdWx0cyAmJiAhaXQuY29tcG9zaXRlUnVsZTtcbiAgaWYgKCRzY2hlbWFLZXlzLmxlbmd0aCkge1xuICAgIHZhciBhcnIzID0gJHNjaGVtYUtleXM7XG4gICAgaWYgKGFycjMpIHtcbiAgICAgIHZhciAkcHJvcGVydHlLZXksIGkzID0gLTEsXG4gICAgICAgIGwzID0gYXJyMy5sZW5ndGggLSAxO1xuICAgICAgd2hpbGUgKGkzIDwgbDMpIHtcbiAgICAgICAgJHByb3BlcnR5S2V5ID0gYXJyM1tpMyArPSAxXTtcbiAgICAgICAgdmFyICRzY2ggPSAkc2NoZW1hWyRwcm9wZXJ0eUtleV07XG4gICAgICAgIGlmICgoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/ICh0eXBlb2YgJHNjaCA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoKS5sZW5ndGggPiAwKSB8fCAkc2NoID09PSBmYWxzZSA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAgICAgICB2YXIgJHByb3AgPSBpdC51dGlsLmdldFByb3BlcnR5KCRwcm9wZXJ0eUtleSksXG4gICAgICAgICAgICAkcGFzc0RhdGEgPSAkZGF0YSArICRwcm9wLFxuICAgICAgICAgICAgJGhhc0RlZmF1bHQgPSAkdXNlRGVmYXVsdHMgJiYgJHNjaC5kZWZhdWx0ICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgJGl0LnNjaGVtYSA9ICRzY2g7XG4gICAgICAgICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aCArICRwcm9wO1xuICAgICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGggKyAnLycgKyBpdC51dGlsLmVzY2FwZUZyYWdtZW50KCRwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgJGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aChpdC5lcnJvclBhdGgsICRwcm9wZXJ0eUtleSwgaXQub3B0cy5qc29uUG9pbnRlcnMpO1xuICAgICAgICAgICRpdC5kYXRhUGF0aEFyclskZGF0YU54dF0gPSBpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgdmFyICRjb2RlID0gaXQudmFsaWRhdGUoJGl0KTtcbiAgICAgICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICAgICAgaWYgKGl0LnV0aWwudmFyT2NjdXJlbmNlcygkY29kZSwgJG5leHREYXRhKSA8IDIpIHtcbiAgICAgICAgICAgICRjb2RlID0gaXQudXRpbC52YXJSZXBsYWNlKCRjb2RlLCAkbmV4dERhdGEsICRwYXNzRGF0YSk7XG4gICAgICAgICAgICB2YXIgJHVzZURhdGEgPSAkcGFzc0RhdGE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciAkdXNlRGF0YSA9ICRuZXh0RGF0YTtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCRoYXNEZWZhdWx0KSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAnICsgKCRjb2RlKSArICcgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCRyZXF1aXJlZEhhc2ggJiYgJHJlcXVpcmVkSGFzaFskcHJvcGVydHlLZXldKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIGlmICggJyArICgkdXNlRGF0YSkgKyAnID09PSB1bmRlZmluZWQgJztcbiAgICAgICAgICAgICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgfHwgISBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJyArICgkZGF0YSkgKyAnLCBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eUtleSkpICsgJ1xcJykgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJykgeyAnICsgKCRuZXh0VmFsaWQpICsgJyA9IGZhbHNlOyAnO1xuICAgICAgICAgICAgICB2YXIgJGN1cnJlbnRFcnJvclBhdGggPSBpdC5lcnJvclBhdGgsXG4gICAgICAgICAgICAgICAgJGN1cnJFcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGgsXG4gICAgICAgICAgICAgICAgJG1pc3NpbmdQcm9wZXJ0eSA9IGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGgoJGN1cnJlbnRFcnJvclBhdGgsICRwcm9wZXJ0eUtleSwgaXQub3B0cy5qc29uUG9pbnRlcnMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvcmVxdWlyZWQnO1xuICAgICAgICAgICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAgICAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ3JlcXVpcmVkJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBtaXNzaW5nUHJvcGVydHk6IFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFwnIH0gJztcbiAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnJztcbiAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICdpcyBhIHJlcXVpcmVkIHByb3BlcnR5JztcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSAnc2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgXFxcXFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFxcXFxcJyc7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICRlcnJTY2hlbWFQYXRoID0gJGN1cnJFcnJTY2hlbWFQYXRoO1xuICAgICAgICAgICAgICBpdC5lcnJvclBhdGggPSAkY3VycmVudEVycm9yUGF0aDtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgfSBlbHNlIHsgJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCAnICsgKCR1c2VEYXRhKSArICcgPT09IHVuZGVmaW5lZCAnO1xuICAgICAgICAgICAgICAgIGlmICgkb3duUHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgfHwgISBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJyArICgkZGF0YSkgKyAnLCBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eUtleSkpICsgJ1xcJykgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcpIHsgJyArICgkbmV4dFZhbGlkKSArICcgPSB0cnVlOyB9IGVsc2UgeyAnO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCR1c2VEYXRhKSArICcgIT09IHVuZGVmaW5lZCAnO1xuICAgICAgICAgICAgICAgIGlmICgkb3duUHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgJiYgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJyArICgkZGF0YSkgKyAnLCBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eUtleSkpICsgJ1xcJykgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgKSB7ICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnICcgKyAoJGNvZGUpICsgJyB9ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkcFByb3BlcnR5S2V5cy5sZW5ndGgpIHtcbiAgICB2YXIgYXJyNCA9ICRwUHJvcGVydHlLZXlzO1xuICAgIGlmIChhcnI0KSB7XG4gICAgICB2YXIgJHBQcm9wZXJ0eSwgaTQgPSAtMSxcbiAgICAgICAgbDQgPSBhcnI0Lmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoaTQgPCBsNCkge1xuICAgICAgICAkcFByb3BlcnR5ID0gYXJyNFtpNCArPSAxXTtcbiAgICAgICAgdmFyICRzY2ggPSAkcFByb3BlcnRpZXNbJHBQcm9wZXJ0eV07XG4gICAgICAgIGlmICgoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/ICh0eXBlb2YgJHNjaCA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoKS5sZW5ndGggPiAwKSB8fCAkc2NoID09PSBmYWxzZSA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAgICAgICAkaXQuc2NoZW1hID0gJHNjaDtcbiAgICAgICAgICAkaXQuc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyAnLnBhdHRlcm5Qcm9wZXJ0aWVzJyArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJHBQcm9wZXJ0eSk7XG4gICAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9wYXR0ZXJuUHJvcGVydGllcy8nICsgaXQudXRpbC5lc2NhcGVGcmFnbWVudCgkcFByb3BlcnR5KTtcbiAgICAgICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIG91dCArPSAnICcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICcgPSAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnIHx8IE9iamVjdC5rZXlzKCcgKyAoJGRhdGEpICsgJyk7IGZvciAodmFyICcgKyAoJGlkeCkgKyAnPTA7ICcgKyAoJGlkeCkgKyAnPCcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICcubGVuZ3RoOyAnICsgKCRpZHgpICsgJysrKSB7IHZhciAnICsgKCRrZXkpICsgJyA9ICcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICdbJyArICgkaWR4KSArICddOyAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBmb3IgKHZhciAnICsgKCRrZXkpICsgJyBpbiAnICsgKCRkYXRhKSArICcpIHsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoaXQudXNlUGF0dGVybigkcFByb3BlcnR5KSkgKyAnLnRlc3QoJyArICgka2V5KSArICcpKSB7ICc7XG4gICAgICAgICAgJGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAka2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGtleSArICddJztcbiAgICAgICAgICAkaXQuZGF0YVBhdGhBcnJbJGRhdGFOeHRdID0gJGtleTtcbiAgICAgICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJyArICgkY29kZSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSBicmVhazsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBlbHNlICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAgJztcbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgJyArICgkY2xvc2luZ0JyYWNlcykgKyAnIGlmICgnICsgKCRlcnJzKSArICcgPT0gZXJyb3JzKSB7JztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9wcm9wZXJ0eU5hbWVzKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICBvdXQgKz0gJ3ZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7JztcbiAgaWYgKChpdC5vcHRzLnN0cmljdEtleXdvcmRzID8gKHR5cGVvZiAkc2NoZW1hID09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKCRzY2hlbWEpLmxlbmd0aCA+IDApIHx8ICRzY2hlbWEgPT09IGZhbHNlIDogaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkc2NoZW1hLCBpdC5SVUxFUy5hbGwpKSkge1xuICAgICRpdC5zY2hlbWEgPSAkc2NoZW1hO1xuICAgICRpdC5zY2hlbWFQYXRoID0gJHNjaGVtYVBhdGg7XG4gICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aDtcbiAgICB2YXIgJGtleSA9ICdrZXknICsgJGx2bCxcbiAgICAgICRpZHggPSAnaWR4JyArICRsdmwsXG4gICAgICAkaSA9ICdpJyArICRsdmwsXG4gICAgICAkaW52YWxpZE5hbWUgPSAnXFwnICsgJyArICRrZXkgKyAnICsgXFwnJyxcbiAgICAgICRkYXRhTnh0ID0gJGl0LmRhdGFMZXZlbCA9IGl0LmRhdGFMZXZlbCArIDEsXG4gICAgICAkbmV4dERhdGEgPSAnZGF0YScgKyAkZGF0YU54dCxcbiAgICAgICRkYXRhUHJvcGVydGllcyA9ICdkYXRhUHJvcGVydGllcycgKyAkbHZsLFxuICAgICAgJG93blByb3BlcnRpZXMgPSBpdC5vcHRzLm93blByb3BlcnRpZXMsXG4gICAgICAkY3VycmVudEJhc2VJZCA9IGl0LmJhc2VJZDtcbiAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgIG91dCArPSAnIHZhciAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnID0gdW5kZWZpbmVkOyAnO1xuICAgIH1cbiAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgIG91dCArPSAnICcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICcgPSAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnIHx8IE9iamVjdC5rZXlzKCcgKyAoJGRhdGEpICsgJyk7IGZvciAodmFyICcgKyAoJGlkeCkgKyAnPTA7ICcgKyAoJGlkeCkgKyAnPCcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICcubGVuZ3RoOyAnICsgKCRpZHgpICsgJysrKSB7IHZhciAnICsgKCRrZXkpICsgJyA9ICcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICdbJyArICgkaWR4KSArICddOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyBmb3IgKHZhciAnICsgKCRrZXkpICsgJyBpbiAnICsgKCRkYXRhKSArICcpIHsgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgdmFyIHN0YXJ0RXJycycgKyAoJGx2bCkgKyAnID0gZXJyb3JzOyAnO1xuICAgIHZhciAkcGFzc0RhdGEgPSAka2V5O1xuICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCk7XG4gICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgIGlmIChpdC51dGlsLnZhck9jY3VyZW5jZXMoJGNvZGUsICRuZXh0RGF0YSkgPCAyKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKGl0LnV0aWwudmFyUmVwbGFjZSgkY29kZSwgJG5leHREYXRhLCAkcGFzc0RhdGEpKSArICcgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnICsgKCRjb2RlKSArICcgJztcbiAgICB9XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSB7IGZvciAodmFyICcgKyAoJGkpICsgJz1zdGFydEVycnMnICsgKCRsdmwpICsgJzsgJyArICgkaSkgKyAnPGVycm9yczsgJyArICgkaSkgKyAnKyspIHsgdkVycm9yc1snICsgKCRpKSArICddLnByb3BlcnR5TmFtZSA9ICcgKyAoJGtleSkgKyAnOyB9ICAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdwcm9wZXJ0eU5hbWVzJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBwcm9wZXJ0eU5hbWU6IFxcJycgKyAoJGludmFsaWROYW1lKSArICdcXCcgfSAnO1xuICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwncHJvcGVydHkgbmFtZSBcXFxcXFwnJyArICgkaW52YWxpZE5hbWUpICsgJ1xcXFxcXCcgaXMgaW52YWxpZFxcJyAnO1xuICAgICAgfVxuICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB7fSAnO1xuICAgIH1cbiAgICBvdXQgKz0gJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKHZFcnJvcnMpOyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gdkVycm9yczsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgYnJlYWs7ICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gfSc7XG4gIH1cbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyAnICsgKCRjbG9zaW5nQnJhY2VzKSArICcgaWYgKCcgKyAoJGVycnMpICsgJyA9PSBlcnJvcnMpIHsnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX3JlZihpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGFzeW5jLCAkcmVmQ29kZTtcbiAgaWYgKCRzY2hlbWEgPT0gJyMnIHx8ICRzY2hlbWEgPT0gJyMvJykge1xuICAgIGlmIChpdC5pc1Jvb3QpIHtcbiAgICAgICRhc3luYyA9IGl0LmFzeW5jO1xuICAgICAgJHJlZkNvZGUgPSAndmFsaWRhdGUnO1xuICAgIH0gZWxzZSB7XG4gICAgICAkYXN5bmMgPSBpdC5yb290LnNjaGVtYS4kYXN5bmMgPT09IHRydWU7XG4gICAgICAkcmVmQ29kZSA9ICdyb290LnJlZlZhbFswXSc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciAkcmVmVmFsID0gaXQucmVzb2x2ZVJlZihpdC5iYXNlSWQsICRzY2hlbWEsIGl0LmlzUm9vdCk7XG4gICAgaWYgKCRyZWZWYWwgPT09IHVuZGVmaW5lZCkge1xuICAgICAgdmFyICRtZXNzYWdlID0gaXQuTWlzc2luZ1JlZkVycm9yLm1lc3NhZ2UoaXQuYmFzZUlkLCAkc2NoZW1hKTtcbiAgICAgIGlmIChpdC5vcHRzLm1pc3NpbmdSZWZzID09ICdmYWlsJykge1xuICAgICAgICBpdC5sb2dnZXIuZXJyb3IoJG1lc3NhZ2UpO1xuICAgICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJyRyZWYnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IHJlZjogXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3Rlcygkc2NoZW1hKSkgKyAnXFwnIH0gJztcbiAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnY2FuXFxcXFxcJ3QgcmVzb2x2ZSByZWZlcmVuY2UgJyArIChpdC51dGlsLmVzY2FwZVF1b3Rlcygkc2NoZW1hKSkgKyAnXFwnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJHNjaGVtYSkpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIG91dCArPSAnIGlmIChmYWxzZSkgeyAnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGl0Lm9wdHMubWlzc2luZ1JlZnMgPT0gJ2lnbm9yZScpIHtcbiAgICAgICAgaXQubG9nZ2VyLndhcm4oJG1lc3NhZ2UpO1xuICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBpdC5NaXNzaW5nUmVmRXJyb3IoaXQuYmFzZUlkLCAkc2NoZW1hLCAkbWVzc2FnZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICgkcmVmVmFsLmlubGluZSkge1xuICAgICAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gICAgICAkaXQubGV2ZWwrKztcbiAgICAgIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgICAgICRpdC5zY2hlbWEgPSAkcmVmVmFsLnNjaGVtYTtcbiAgICAgICRpdC5zY2hlbWFQYXRoID0gJyc7XG4gICAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRzY2hlbWE7XG4gICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpLnJlcGxhY2UoL3ZhbGlkYXRlXFwuc2NoZW1hL2csICRyZWZWYWwuY29kZSk7XG4gICAgICBvdXQgKz0gJyAnICsgKCRjb2RlKSArICcgJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgeyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAkYXN5bmMgPSAkcmVmVmFsLiRhc3luYyA9PT0gdHJ1ZSB8fCAoaXQuYXN5bmMgJiYgJHJlZlZhbC4kYXN5bmMgIT09IGZhbHNlKTtcbiAgICAgICRyZWZDb2RlID0gJHJlZlZhbC5jb2RlO1xuICAgIH1cbiAgfVxuICBpZiAoJHJlZkNvZGUpIHtcbiAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgb3V0ID0gJyc7XG4gICAgaWYgKGl0Lm9wdHMucGFzc0NvbnRleHQpIHtcbiAgICAgIG91dCArPSAnICcgKyAoJHJlZkNvZGUpICsgJy5jYWxsKHRoaXMsICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnICcgKyAoJHJlZkNvZGUpICsgJyggJztcbiAgICB9XG4gICAgb3V0ICs9ICcgJyArICgkZGF0YSkgKyAnLCAoZGF0YVBhdGggfHwgXFwnXFwnKSc7XG4gICAgaWYgKGl0LmVycm9yUGF0aCAhPSAnXCJcIicpIHtcbiAgICAgIG91dCArPSAnICsgJyArIChpdC5lcnJvclBhdGgpO1xuICAgIH1cbiAgICB2YXIgJHBhcmVudERhdGEgPSAkZGF0YUx2bCA/ICdkYXRhJyArICgoJGRhdGFMdmwgLSAxKSB8fCAnJykgOiAncGFyZW50RGF0YScsXG4gICAgICAkcGFyZW50RGF0YVByb3BlcnR5ID0gJGRhdGFMdmwgPyBpdC5kYXRhUGF0aEFyclskZGF0YUx2bF0gOiAncGFyZW50RGF0YVByb3BlcnR5JztcbiAgICBvdXQgKz0gJyAsICcgKyAoJHBhcmVudERhdGEpICsgJyAsICcgKyAoJHBhcmVudERhdGFQcm9wZXJ0eSkgKyAnLCByb290RGF0YSkgICc7XG4gICAgdmFyIF9fY2FsbFZhbGlkYXRlID0gb3V0O1xuICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgaWYgKCRhc3luYykge1xuICAgICAgaWYgKCFpdC5hc3luYykgdGhyb3cgbmV3IEVycm9yKCdhc3luYyBzY2hlbWEgcmVmZXJlbmNlZCBieSBzeW5jIHNjaGVtYScpO1xuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJHZhbGlkKSArICc7ICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB0cnkgeyBhd2FpdCAnICsgKF9fY2FsbFZhbGlkYXRlKSArICc7ICc7XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gY2F0Y2ggKGUpIHsgaWYgKCEoZSBpbnN0YW5jZW9mIFZhbGlkYXRpb25FcnJvcikpIHRocm93IGU7IGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gZS5lcnJvcnM7IGVsc2UgdkVycm9ycyA9IHZFcnJvcnMuY29uY2F0KGUuZXJyb3JzKTsgZXJyb3JzID0gdkVycm9ycy5sZW5ndGg7ICc7XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7ICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkdmFsaWQpICsgJykgeyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyBpZiAoIScgKyAoX19jYWxsVmFsaWRhdGUpICsgJykgeyBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9ICcgKyAoJHJlZkNvZGUpICsgJy5lcnJvcnM7IGVsc2UgdkVycm9ycyA9IHZFcnJvcnMuY29uY2F0KCcgKyAoJHJlZkNvZGUpICsgJy5lcnJvcnMpOyBlcnJvcnMgPSB2RXJyb3JzLmxlbmd0aDsgfSAnO1xuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX3JlcXVpcmVkKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLiRkYXRhICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIHZhciAkdlNjaGVtYSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgaWYgKCEkaXNEYXRhKSB7XG4gICAgaWYgKCRzY2hlbWEubGVuZ3RoIDwgaXQub3B0cy5sb29wUmVxdWlyZWQgJiYgaXQuc2NoZW1hLnByb3BlcnRpZXMgJiYgT2JqZWN0LmtleXMoaXQuc2NoZW1hLnByb3BlcnRpZXMpLmxlbmd0aCkge1xuICAgICAgdmFyICRyZXF1aXJlZCA9IFtdO1xuICAgICAgdmFyIGFycjEgPSAkc2NoZW1hO1xuICAgICAgaWYgKGFycjEpIHtcbiAgICAgICAgdmFyICRwcm9wZXJ0eSwgaTEgPSAtMSxcbiAgICAgICAgICBsMSA9IGFycjEubGVuZ3RoIC0gMTtcbiAgICAgICAgd2hpbGUgKGkxIDwgbDEpIHtcbiAgICAgICAgICAkcHJvcGVydHkgPSBhcnIxW2kxICs9IDFdO1xuICAgICAgICAgIHZhciAkcHJvcGVydHlTY2ggPSBpdC5zY2hlbWEucHJvcGVydGllc1skcHJvcGVydHldO1xuICAgICAgICAgIGlmICghKCRwcm9wZXJ0eVNjaCAmJiAoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/ICh0eXBlb2YgJHByb3BlcnR5U2NoID09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKCRwcm9wZXJ0eVNjaCkubGVuZ3RoID4gMCkgfHwgJHByb3BlcnR5U2NoID09PSBmYWxzZSA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHByb3BlcnR5U2NoLCBpdC5SVUxFUy5hbGwpKSkpIHtcbiAgICAgICAgICAgICRyZXF1aXJlZFskcmVxdWlyZWQubGVuZ3RoXSA9ICRwcm9wZXJ0eTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdmFyICRyZXF1aXJlZCA9ICRzY2hlbWE7XG4gICAgfVxuICB9XG4gIGlmICgkaXNEYXRhIHx8ICRyZXF1aXJlZC5sZW5ndGgpIHtcbiAgICB2YXIgJGN1cnJlbnRFcnJvclBhdGggPSBpdC5lcnJvclBhdGgsXG4gICAgICAkbG9vcFJlcXVpcmVkID0gJGlzRGF0YSB8fCAkcmVxdWlyZWQubGVuZ3RoID49IGl0Lm9wdHMubG9vcFJlcXVpcmVkLFxuICAgICAgJG93blByb3BlcnRpZXMgPSBpdC5vcHRzLm93blByb3BlcnRpZXM7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIHZhciBtaXNzaW5nJyArICgkbHZsKSArICc7ICc7XG4gICAgICBpZiAoJGxvb3BSZXF1aXJlZCkge1xuICAgICAgICBpZiAoISRpc0RhdGEpIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkdlNjaGVtYSkgKyAnID0gdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnOyAnO1xuICAgICAgICB9XG4gICAgICAgIHZhciAkaSA9ICdpJyArICRsdmwsXG4gICAgICAgICAgJHByb3BlcnR5UGF0aCA9ICdzY2hlbWEnICsgJGx2bCArICdbJyArICRpICsgJ10nLFxuICAgICAgICAgICRtaXNzaW5nUHJvcGVydHkgPSAnXFwnICsgJyArICRwcm9wZXJ0eVBhdGggKyAnICsgXFwnJztcbiAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgIGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoJGN1cnJlbnRFcnJvclBhdGgsICRwcm9wZXJ0eVBhdGgsIGl0Lm9wdHMuanNvblBvaW50ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkdmFsaWQpICsgJyA9IHRydWU7ICc7XG4gICAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKHNjaGVtYScgKyAoJGx2bCkgKyAnID09PSB1bmRlZmluZWQpICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyBlbHNlIGlmICghQXJyYXkuaXNBcnJheShzY2hlbWEnICsgKCRsdmwpICsgJykpICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgZWxzZSB7JztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyBmb3IgKHZhciAnICsgKCRpKSArICcgPSAwOyAnICsgKCRpKSArICcgPCAnICsgKCR2U2NoZW1hKSArICcubGVuZ3RoOyAnICsgKCRpKSArICcrKykgeyAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkZGF0YSkgKyAnWycgKyAoJHZTY2hlbWEpICsgJ1snICsgKCRpKSArICddXSAhPT0gdW5kZWZpbmVkICc7XG4gICAgICAgIGlmICgkb3duUHJvcGVydGllcykge1xuICAgICAgICAgIG91dCArPSAnICYmICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCcgKyAoJGRhdGEpICsgJywgJyArICgkdlNjaGVtYSkgKyAnWycgKyAoJGkpICsgJ10pICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICc7IGlmICghJyArICgkdmFsaWQpICsgJykgYnJlYWs7IH0gJztcbiAgICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgICBvdXQgKz0gJyAgfSAgJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyAgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICAgJztcbiAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdyZXF1aXJlZCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgbWlzc2luZ1Byb3BlcnR5OiBcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcJyB9ICc7XG4gICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJyc7XG4gICAgICAgICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIG91dCArPSAnaXMgYSByZXF1aXJlZCBwcm9wZXJ0eSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJ3Nob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5IFxcXFxcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcXFxcXCcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICdcXCcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyB9IGVsc2UgeyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKCAnO1xuICAgICAgICB2YXIgYXJyMiA9ICRyZXF1aXJlZDtcbiAgICAgICAgaWYgKGFycjIpIHtcbiAgICAgICAgICB2YXIgJHByb3BlcnR5S2V5LCAkaSA9IC0xLFxuICAgICAgICAgICAgbDIgPSBhcnIyLmxlbmd0aCAtIDE7XG4gICAgICAgICAgd2hpbGUgKCRpIDwgbDIpIHtcbiAgICAgICAgICAgICRwcm9wZXJ0eUtleSA9IGFycjJbJGkgKz0gMV07XG4gICAgICAgICAgICBpZiAoJGkpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgfHwgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciAkcHJvcCA9IGl0LnV0aWwuZ2V0UHJvcGVydHkoJHByb3BlcnR5S2V5KSxcbiAgICAgICAgICAgICAgJHVzZURhdGEgPSAkZGF0YSArICRwcm9wO1xuICAgICAgICAgICAgb3V0ICs9ICcgKCAoICcgKyAoJHVzZURhdGEpICsgJyA9PT0gdW5kZWZpbmVkICc7XG4gICAgICAgICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgfHwgISBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJyArICgkZGF0YSkgKyAnLCBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eUtleSkpICsgJ1xcJykgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnKSAmJiAobWlzc2luZycgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKGl0Lm9wdHMuanNvblBvaW50ZXJzID8gJHByb3BlcnR5S2V5IDogJHByb3ApKSArICcpICkgJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcpIHsgICc7XG4gICAgICAgIHZhciAkcHJvcGVydHlQYXRoID0gJ21pc3NpbmcnICsgJGx2bCxcbiAgICAgICAgICAkbWlzc2luZ1Byb3BlcnR5ID0gJ1xcJyArICcgKyAkcHJvcGVydHlQYXRoICsgJyArIFxcJyc7XG4gICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICBpdC5lcnJvclBhdGggPSBpdC5vcHRzLmpzb25Qb2ludGVycyA/IGl0LnV0aWwuZ2V0UGF0aEV4cHIoJGN1cnJlbnRFcnJvclBhdGgsICRwcm9wZXJ0eVBhdGgsIHRydWUpIDogJGN1cnJlbnRFcnJvclBhdGggKyAnICsgJyArICRwcm9wZXJ0eVBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdyZXF1aXJlZCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgbWlzc2luZ1Byb3BlcnR5OiBcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcJyB9ICc7XG4gICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJyc7XG4gICAgICAgICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIG91dCArPSAnaXMgYSByZXF1aXJlZCBwcm9wZXJ0eSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJ3Nob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5IFxcXFxcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcXFxcXCcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICdcXCcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyB9IGVsc2UgeyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoJGxvb3BSZXF1aXJlZCkge1xuICAgICAgICBpZiAoISRpc0RhdGEpIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkdlNjaGVtYSkgKyAnID0gdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnOyAnO1xuICAgICAgICB9XG4gICAgICAgIHZhciAkaSA9ICdpJyArICRsdmwsXG4gICAgICAgICAgJHByb3BlcnR5UGF0aCA9ICdzY2hlbWEnICsgJGx2bCArICdbJyArICRpICsgJ10nLFxuICAgICAgICAgICRtaXNzaW5nUHJvcGVydHkgPSAnXFwnICsgJyArICRwcm9wZXJ0eVBhdGggKyAnICsgXFwnJztcbiAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgIGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoJGN1cnJlbnRFcnJvclBhdGgsICRwcm9wZXJ0eVBhdGgsIGl0Lm9wdHMuanNvblBvaW50ZXJzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCR2U2NoZW1hKSArICcgJiYgIUFycmF5LmlzQXJyYXkoJyArICgkdlNjaGVtYSkgKyAnKSkgeyAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdyZXF1aXJlZCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgbWlzc2luZ1Byb3BlcnR5OiBcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcJyB9ICc7XG4gICAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnO1xuICAgICAgICAgICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICdpcyBhIHJlcXVpcmVkIHByb3BlcnR5JztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJ3Nob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5IFxcXFxcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcXFxcXCcnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7IH0gZWxzZSBpZiAoJyArICgkdlNjaGVtYSkgKyAnICE9PSB1bmRlZmluZWQpIHsgJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyBmb3IgKHZhciAnICsgKCRpKSArICcgPSAwOyAnICsgKCRpKSArICcgPCAnICsgKCR2U2NoZW1hKSArICcubGVuZ3RoOyAnICsgKCRpKSArICcrKykgeyBpZiAoJyArICgkZGF0YSkgKyAnWycgKyAoJHZTY2hlbWEpICsgJ1snICsgKCRpKSArICddXSA9PT0gdW5kZWZpbmVkICc7XG4gICAgICAgIGlmICgkb3duUHJvcGVydGllcykge1xuICAgICAgICAgIG91dCArPSAnIHx8ICEgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCcgKyAoJGRhdGEpICsgJywgJyArICgkdlNjaGVtYSkgKyAnWycgKyAoJGkpICsgJ10pICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcpIHsgIHZhciBlcnIgPSAgICc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdyZXF1aXJlZCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgbWlzc2luZ1Byb3BlcnR5OiBcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcJyB9ICc7XG4gICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJyc7XG4gICAgICAgICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgICAgICAgIG91dCArPSAnaXMgYSByZXF1aXJlZCBwcm9wZXJ0eSc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJ3Nob3VsZCBoYXZlIHJlcXVpcmVkIHByb3BlcnR5IFxcXFxcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcXFxcXCcnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICdcXCcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgfSB9ICc7XG4gICAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgICAgb3V0ICs9ICcgIH0gICc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBhcnIzID0gJHJlcXVpcmVkO1xuICAgICAgICBpZiAoYXJyMykge1xuICAgICAgICAgIHZhciAkcHJvcGVydHlLZXksIGkzID0gLTEsXG4gICAgICAgICAgICBsMyA9IGFycjMubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoaTMgPCBsMykge1xuICAgICAgICAgICAgJHByb3BlcnR5S2V5ID0gYXJyM1tpMyArPSAxXTtcbiAgICAgICAgICAgIHZhciAkcHJvcCA9IGl0LnV0aWwuZ2V0UHJvcGVydHkoJHByb3BlcnR5S2V5KSxcbiAgICAgICAgICAgICAgJG1pc3NpbmdQcm9wZXJ0eSA9IGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eUtleSksXG4gICAgICAgICAgICAgICR1c2VEYXRhID0gJGRhdGEgKyAkcHJvcDtcbiAgICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgaXQuZXJyb3JQYXRoID0gaXQudXRpbC5nZXRQYXRoKCRjdXJyZW50RXJyb3JQYXRoLCAkcHJvcGVydHlLZXksIGl0Lm9wdHMuanNvblBvaW50ZXJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnIGlmICggJyArICgkdXNlRGF0YSkgKyAnID09PSB1bmRlZmluZWQgJztcbiAgICAgICAgICAgIGlmICgkb3duUHJvcGVydGllcykge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB8fCAhIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgnICsgKCRkYXRhKSArICcsIFxcJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5S2V5KSkgKyAnXFwnKSAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICcpIHsgIHZhciBlcnIgPSAgICc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ3JlcXVpcmVkJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBtaXNzaW5nUHJvcGVydHk6IFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFwnIH0gJztcbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnO1xuICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnaXMgYSByZXF1aXJlZCBwcm9wZXJ0eSc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnc2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgXFxcXFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFxcXFxcJyc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7IH0gJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaXQuZXJyb3JQYXRoID0gJGN1cnJlbnRFcnJvclBhdGg7XG4gIH0gZWxzZSBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGlmICh0cnVlKSB7JztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV91bmlxdWVJdGVtcyhpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy4kZGF0YSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICBpZiAoKCRzY2hlbWEgfHwgJGlzRGF0YSkgJiYgaXQub3B0cy51bmlxdWVJdGVtcyAhPT0gZmFsc2UpIHtcbiAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJHZhbGlkKSArICc7IGlmICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnID09PSBmYWxzZSB8fCAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnID09PSB1bmRlZmluZWQpICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyBlbHNlIGlmICh0eXBlb2YgJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPSBcXCdib29sZWFuXFwnKSAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7IGVsc2UgeyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB2YXIgaSA9ICcgKyAoJGRhdGEpICsgJy5sZW5ndGggLCAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZSAsIGo7IGlmIChpID4gMSkgeyAnO1xuICAgIHZhciAkaXRlbVR5cGUgPSBpdC5zY2hlbWEuaXRlbXMgJiYgaXQuc2NoZW1hLml0ZW1zLnR5cGUsXG4gICAgICAkdHlwZUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KCRpdGVtVHlwZSk7XG4gICAgaWYgKCEkaXRlbVR5cGUgfHwgJGl0ZW1UeXBlID09ICdvYmplY3QnIHx8ICRpdGVtVHlwZSA9PSAnYXJyYXknIHx8ICgkdHlwZUlzQXJyYXkgJiYgKCRpdGVtVHlwZS5pbmRleE9mKCdvYmplY3QnKSA+PSAwIHx8ICRpdGVtVHlwZS5pbmRleE9mKCdhcnJheScpID49IDApKSkge1xuICAgICAgb3V0ICs9ICcgb3V0ZXI6IGZvciAoO2ktLTspIHsgZm9yIChqID0gaTsgai0tOykgeyBpZiAoZXF1YWwoJyArICgkZGF0YSkgKyAnW2ldLCAnICsgKCRkYXRhKSArICdbal0pKSB7ICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgYnJlYWsgb3V0ZXI7IH0gfSB9ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhciBpdGVtSW5kaWNlcyA9IHt9LCBpdGVtOyBmb3IgKDtpLS07KSB7IHZhciBpdGVtID0gJyArICgkZGF0YSkgKyAnW2ldOyAnO1xuICAgICAgdmFyICRtZXRob2QgPSAnY2hlY2tEYXRhVHlwZScgKyAoJHR5cGVJc0FycmF5ID8gJ3MnIDogJycpO1xuICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoaXQudXRpbFskbWV0aG9kXSgkaXRlbVR5cGUsICdpdGVtJywgaXQub3B0cy5zdHJpY3ROdW1iZXJzLCB0cnVlKSkgKyAnKSBjb250aW51ZTsgJztcbiAgICAgIGlmICgkdHlwZUlzQXJyYXkpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKHR5cGVvZiBpdGVtID09IFxcJ3N0cmluZ1xcJykgaXRlbSA9IFxcJ1wiXFwnICsgaXRlbTsgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIGlmICh0eXBlb2YgaXRlbUluZGljZXNbaXRlbV0gPT0gXFwnbnVtYmVyXFwnKSB7ICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgaiA9IGl0ZW1JbmRpY2VzW2l0ZW1dOyBicmVhazsgfSBpdGVtSW5kaWNlc1tpdGVtXSA9IGk7IH0gJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICBvdXQgKz0gJyAgfSAgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICAgJztcbiAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgndW5pcXVlSXRlbXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGk6IGksIGo6IGogfSAnO1xuICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIE5PVCBoYXZlIGR1cGxpY2F0ZSBpdGVtcyAoaXRlbXMgIyMgXFwnICsgaiArIFxcJyBhbmQgXFwnICsgaSArIFxcJyBhcmUgaWRlbnRpY2FsKVxcJyAnO1xuICAgICAgfVxuICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogICc7XG4gICAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgICAgb3V0ICs9ICd2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgICAgICAgICAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgdmFyIF9fZXJyID0gb3V0O1xuICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgaWYgKHRydWUpIHsgJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfdmFsaWRhdGUoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcnO1xuICB2YXIgJGFzeW5jID0gaXQuc2NoZW1hLiRhc3luYyA9PT0gdHJ1ZSxcbiAgICAkcmVmS2V5d29yZHMgPSBpdC51dGlsLnNjaGVtYUhhc1J1bGVzRXhjZXB0KGl0LnNjaGVtYSwgaXQuUlVMRVMuYWxsLCAnJHJlZicpLFxuICAgICRpZCA9IGl0LnNlbGYuX2dldElkKGl0LnNjaGVtYSk7XG4gIGlmIChpdC5vcHRzLnN0cmljdEtleXdvcmRzKSB7XG4gICAgdmFyICR1bmtub3duS3dkID0gaXQudXRpbC5zY2hlbWFVbmtub3duUnVsZXMoaXQuc2NoZW1hLCBpdC5SVUxFUy5rZXl3b3Jkcyk7XG4gICAgaWYgKCR1bmtub3duS3dkKSB7XG4gICAgICB2YXIgJGtleXdvcmRzTXNnID0gJ3Vua25vd24ga2V5d29yZDogJyArICR1bmtub3duS3dkO1xuICAgICAgaWYgKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPT09ICdsb2cnKSBpdC5sb2dnZXIud2Fybigka2V5d29yZHNNc2cpO1xuICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoJGtleXdvcmRzTXNnKTtcbiAgICB9XG4gIH1cbiAgaWYgKGl0LmlzVG9wKSB7XG4gICAgb3V0ICs9ICcgdmFyIHZhbGlkYXRlID0gJztcbiAgICBpZiAoJGFzeW5jKSB7XG4gICAgICBpdC5hc3luYyA9IHRydWU7XG4gICAgICBvdXQgKz0gJ2FzeW5jICc7XG4gICAgfVxuICAgIG91dCArPSAnZnVuY3Rpb24oZGF0YSwgZGF0YVBhdGgsIHBhcmVudERhdGEsIHBhcmVudERhdGFQcm9wZXJ0eSwgcm9vdERhdGEpIHsgXFwndXNlIHN0cmljdFxcJzsgJztcbiAgICBpZiAoJGlkICYmIChpdC5vcHRzLnNvdXJjZUNvZGUgfHwgaXQub3B0cy5wcm9jZXNzQ29kZSkpIHtcbiAgICAgIG91dCArPSAnICcgKyAoJy9cXCojIHNvdXJjZVVSTD0nICsgJGlkICsgJyAqLycpICsgJyAnO1xuICAgIH1cbiAgfVxuICBpZiAodHlwZW9mIGl0LnNjaGVtYSA9PSAnYm9vbGVhbicgfHwgISgkcmVmS2V5d29yZHMgfHwgaXQuc2NoZW1hLiRyZWYpKSB7XG4gICAgdmFyICRrZXl3b3JkID0gJ2ZhbHNlIHNjaGVtYSc7XG4gICAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gICAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICAgIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gICAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gICAgdmFyICRlcnJvcktleXdvcmQ7XG4gICAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gICAgaWYgKGl0LnNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgIGlmIChpdC5pc1RvcCkge1xuICAgICAgICAkYnJlYWtPbkVycm9yID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhciAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7ICc7XG4gICAgICB9XG4gICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ2ZhbHNlIHNjaGVtYScpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHt9ICc7XG4gICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnYm9vbGVhbiBzY2hlbWEgaXMgZmFsc2VcXCcgJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IGZhbHNlICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICB9XG4gICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGl0LmlzVG9wKSB7XG4gICAgICAgIGlmICgkYXN5bmMpIHtcbiAgICAgICAgICBvdXQgKz0gJyByZXR1cm4gZGF0YTsgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBudWxsOyByZXR1cm4gdHJ1ZTsgJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyAnO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoaXQuaXNUb3ApIHtcbiAgICAgIG91dCArPSAnIH07IHJldHVybiB2YWxpZGF0ZTsgJztcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuICBpZiAoaXQuaXNUb3ApIHtcbiAgICB2YXIgJHRvcCA9IGl0LmlzVG9wLFxuICAgICAgJGx2bCA9IGl0LmxldmVsID0gMCxcbiAgICAgICRkYXRhTHZsID0gaXQuZGF0YUxldmVsID0gMCxcbiAgICAgICRkYXRhID0gJ2RhdGEnO1xuICAgIGl0LnJvb3RJZCA9IGl0LnJlc29sdmUuZnVsbFBhdGgoaXQuc2VsZi5fZ2V0SWQoaXQucm9vdC5zY2hlbWEpKTtcbiAgICBpdC5iYXNlSWQgPSBpdC5iYXNlSWQgfHwgaXQucm9vdElkO1xuICAgIGRlbGV0ZSBpdC5pc1RvcDtcbiAgICBpdC5kYXRhUGF0aEFyciA9IFtcIlwiXTtcbiAgICBpZiAoaXQuc2NoZW1hLmRlZmF1bHQgIT09IHVuZGVmaW5lZCAmJiBpdC5vcHRzLnVzZURlZmF1bHRzICYmIGl0Lm9wdHMuc3RyaWN0RGVmYXVsdHMpIHtcbiAgICAgIHZhciAkZGVmYXVsdE1zZyA9ICdkZWZhdWx0IGlzIGlnbm9yZWQgaW4gdGhlIHNjaGVtYSByb290JztcbiAgICAgIGlmIChpdC5vcHRzLnN0cmljdERlZmF1bHRzID09PSAnbG9nJykgaXQubG9nZ2VyLndhcm4oJGRlZmF1bHRNc2cpO1xuICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoJGRlZmF1bHRNc2cpO1xuICAgIH1cbiAgICBvdXQgKz0gJyB2YXIgdkVycm9ycyA9IG51bGw7ICc7XG4gICAgb3V0ICs9ICcgdmFyIGVycm9ycyA9IDA7ICAgICAnO1xuICAgIG91dCArPSAnIGlmIChyb290RGF0YSA9PT0gdW5kZWZpbmVkKSByb290RGF0YSA9IGRhdGE7ICc7XG4gIH0gZWxzZSB7XG4gICAgdmFyICRsdmwgPSBpdC5sZXZlbCxcbiAgICAgICRkYXRhTHZsID0gaXQuZGF0YUxldmVsLFxuICAgICAgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICAgIGlmICgkaWQpIGl0LmJhc2VJZCA9IGl0LnJlc29sdmUudXJsKGl0LmJhc2VJZCwgJGlkKTtcbiAgICBpZiAoJGFzeW5jICYmICFpdC5hc3luYykgdGhyb3cgbmV3IEVycm9yKCdhc3luYyBzY2hlbWEgaW4gc3luYyBzY2hlbWEnKTtcbiAgICBvdXQgKz0gJyB2YXIgZXJyc18nICsgKCRsdmwpICsgJyA9IGVycm9yczsnO1xuICB9XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bCxcbiAgICAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzLFxuICAgICRjbG9zaW5nQnJhY2VzMSA9ICcnLFxuICAgICRjbG9zaW5nQnJhY2VzMiA9ICcnO1xuICB2YXIgJGVycm9yS2V5d29yZDtcbiAgdmFyICR0eXBlU2NoZW1hID0gaXQuc2NoZW1hLnR5cGUsXG4gICAgJHR5cGVJc0FycmF5ID0gQXJyYXkuaXNBcnJheSgkdHlwZVNjaGVtYSk7XG4gIGlmICgkdHlwZVNjaGVtYSAmJiBpdC5vcHRzLm51bGxhYmxlICYmIGl0LnNjaGVtYS5udWxsYWJsZSA9PT0gdHJ1ZSkge1xuICAgIGlmICgkdHlwZUlzQXJyYXkpIHtcbiAgICAgIGlmICgkdHlwZVNjaGVtYS5pbmRleE9mKCdudWxsJykgPT0gLTEpICR0eXBlU2NoZW1hID0gJHR5cGVTY2hlbWEuY29uY2F0KCdudWxsJyk7XG4gICAgfSBlbHNlIGlmICgkdHlwZVNjaGVtYSAhPSAnbnVsbCcpIHtcbiAgICAgICR0eXBlU2NoZW1hID0gWyR0eXBlU2NoZW1hLCAnbnVsbCddO1xuICAgICAgJHR5cGVJc0FycmF5ID0gdHJ1ZTtcbiAgICB9XG4gIH1cbiAgaWYgKCR0eXBlSXNBcnJheSAmJiAkdHlwZVNjaGVtYS5sZW5ndGggPT0gMSkge1xuICAgICR0eXBlU2NoZW1hID0gJHR5cGVTY2hlbWFbMF07XG4gICAgJHR5cGVJc0FycmF5ID0gZmFsc2U7XG4gIH1cbiAgaWYgKGl0LnNjaGVtYS4kcmVmICYmICRyZWZLZXl3b3Jkcykge1xuICAgIGlmIChpdC5vcHRzLmV4dGVuZFJlZnMgPT0gJ2ZhaWwnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJyRyZWY6IHZhbGlkYXRpb24ga2V5d29yZHMgdXNlZCBpbiBzY2hlbWEgYXQgcGF0aCBcIicgKyBpdC5lcnJTY2hlbWFQYXRoICsgJ1wiIChzZWUgb3B0aW9uIGV4dGVuZFJlZnMpJyk7XG4gICAgfSBlbHNlIGlmIChpdC5vcHRzLmV4dGVuZFJlZnMgIT09IHRydWUpIHtcbiAgICAgICRyZWZLZXl3b3JkcyA9IGZhbHNlO1xuICAgICAgaXQubG9nZ2VyLndhcm4oJyRyZWY6IGtleXdvcmRzIGlnbm9yZWQgaW4gc2NoZW1hIGF0IHBhdGggXCInICsgaXQuZXJyU2NoZW1hUGF0aCArICdcIicpO1xuICAgIH1cbiAgfVxuICBpZiAoaXQuc2NoZW1hLiRjb21tZW50ICYmIGl0Lm9wdHMuJGNvbW1lbnQpIHtcbiAgICBvdXQgKz0gJyAnICsgKGl0LlJVTEVTLmFsbC4kY29tbWVudC5jb2RlKGl0LCAnJGNvbW1lbnQnKSk7XG4gIH1cbiAgaWYgKCR0eXBlU2NoZW1hKSB7XG4gICAgaWYgKGl0Lm9wdHMuY29lcmNlVHlwZXMpIHtcbiAgICAgIHZhciAkY29lcmNlVG9UeXBlcyA9IGl0LnV0aWwuY29lcmNlVG9UeXBlcyhpdC5vcHRzLmNvZXJjZVR5cGVzLCAkdHlwZVNjaGVtYSk7XG4gICAgfVxuICAgIHZhciAkcnVsZXNHcm91cCA9IGl0LlJVTEVTLnR5cGVzWyR0eXBlU2NoZW1hXTtcbiAgICBpZiAoJGNvZXJjZVRvVHlwZXMgfHwgJHR5cGVJc0FycmF5IHx8ICRydWxlc0dyb3VwID09PSB0cnVlIHx8ICgkcnVsZXNHcm91cCAmJiAhJHNob3VsZFVzZUdyb3VwKCRydWxlc0dyb3VwKSkpIHtcbiAgICAgIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyAnLnR5cGUnLFxuICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnL3R5cGUnO1xuICAgICAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArICcudHlwZScsXG4gICAgICAgICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvdHlwZScsXG4gICAgICAgICRtZXRob2QgPSAkdHlwZUlzQXJyYXkgPyAnY2hlY2tEYXRhVHlwZXMnIDogJ2NoZWNrRGF0YVR5cGUnO1xuICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoaXQudXRpbFskbWV0aG9kXSgkdHlwZVNjaGVtYSwgJGRhdGEsIGl0Lm9wdHMuc3RyaWN0TnVtYmVycywgdHJ1ZSkpICsgJykgeyAnO1xuICAgICAgaWYgKCRjb2VyY2VUb1R5cGVzKSB7XG4gICAgICAgIHZhciAkZGF0YVR5cGUgPSAnZGF0YVR5cGUnICsgJGx2bCxcbiAgICAgICAgICAkY29lcmNlZCA9ICdjb2VyY2VkJyArICRsdmw7XG4gICAgICAgIG91dCArPSAnIHZhciAnICsgKCRkYXRhVHlwZSkgKyAnID0gdHlwZW9mICcgKyAoJGRhdGEpICsgJzsgdmFyICcgKyAoJGNvZXJjZWQpICsgJyA9IHVuZGVmaW5lZDsgJztcbiAgICAgICAgaWYgKGl0Lm9wdHMuY29lcmNlVHlwZXMgPT0gJ2FycmF5Jykge1xuICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCRkYXRhVHlwZSkgKyAnID09IFxcJ29iamVjdFxcJyAmJiBBcnJheS5pc0FycmF5KCcgKyAoJGRhdGEpICsgJykgJiYgJyArICgkZGF0YSkgKyAnLmxlbmd0aCA9PSAxKSB7ICcgKyAoJGRhdGEpICsgJyA9ICcgKyAoJGRhdGEpICsgJ1swXTsgJyArICgkZGF0YVR5cGUpICsgJyA9IHR5cGVvZiAnICsgKCRkYXRhKSArICc7IGlmICgnICsgKGl0LnV0aWwuY2hlY2tEYXRhVHlwZShpdC5zY2hlbWEudHlwZSwgJGRhdGEsIGl0Lm9wdHMuc3RyaWN0TnVtYmVycykpICsgJykgJyArICgkY29lcmNlZCkgKyAnID0gJyArICgkZGF0YSkgKyAnOyB9ICc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJGNvZXJjZWQpICsgJyAhPT0gdW5kZWZpbmVkKSA7ICc7XG4gICAgICAgIHZhciBhcnIxID0gJGNvZXJjZVRvVHlwZXM7XG4gICAgICAgIGlmIChhcnIxKSB7XG4gICAgICAgICAgdmFyICR0eXBlLCAkaSA9IC0xLFxuICAgICAgICAgICAgbDEgPSBhcnIxLmxlbmd0aCAtIDE7XG4gICAgICAgICAgd2hpbGUgKCRpIDwgbDEpIHtcbiAgICAgICAgICAgICR0eXBlID0gYXJyMVskaSArPSAxXTtcbiAgICAgICAgICAgIGlmICgkdHlwZSA9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICBvdXQgKz0gJyBlbHNlIGlmICgnICsgKCRkYXRhVHlwZSkgKyAnID09IFxcJ251bWJlclxcJyB8fCAnICsgKCRkYXRhVHlwZSkgKyAnID09IFxcJ2Jvb2xlYW5cXCcpICcgKyAoJGNvZXJjZWQpICsgJyA9IFxcJ1xcJyArICcgKyAoJGRhdGEpICsgJzsgZWxzZSBpZiAoJyArICgkZGF0YSkgKyAnID09PSBudWxsKSAnICsgKCRjb2VyY2VkKSArICcgPSBcXCdcXCc7ICc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCR0eXBlID09ICdudW1iZXInIHx8ICR0eXBlID09ICdpbnRlZ2VyJykge1xuICAgICAgICAgICAgICBvdXQgKz0gJyBlbHNlIGlmICgnICsgKCRkYXRhVHlwZSkgKyAnID09IFxcJ2Jvb2xlYW5cXCcgfHwgJyArICgkZGF0YSkgKyAnID09PSBudWxsIHx8ICgnICsgKCRkYXRhVHlwZSkgKyAnID09IFxcJ3N0cmluZ1xcJyAmJiAnICsgKCRkYXRhKSArICcgJiYgJyArICgkZGF0YSkgKyAnID09ICsnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICAgICAgaWYgKCR0eXBlID09ICdpbnRlZ2VyJykge1xuICAgICAgICAgICAgICAgIG91dCArPSAnICYmICEoJyArICgkZGF0YSkgKyAnICUgMSknO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG91dCArPSAnKSkgJyArICgkY29lcmNlZCkgKyAnID0gKycgKyAoJGRhdGEpICsgJzsgJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJHR5cGUgPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIGVsc2UgaWYgKCcgKyAoJGRhdGEpICsgJyA9PT0gXFwnZmFsc2VcXCcgfHwgJyArICgkZGF0YSkgKyAnID09PSAwIHx8ICcgKyAoJGRhdGEpICsgJyA9PT0gbnVsbCkgJyArICgkY29lcmNlZCkgKyAnID0gZmFsc2U7IGVsc2UgaWYgKCcgKyAoJGRhdGEpICsgJyA9PT0gXFwndHJ1ZVxcJyB8fCAnICsgKCRkYXRhKSArICcgPT09IDEpICcgKyAoJGNvZXJjZWQpICsgJyA9IHRydWU7ICc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCR0eXBlID09ICdudWxsJykge1xuICAgICAgICAgICAgICBvdXQgKz0gJyBlbHNlIGlmICgnICsgKCRkYXRhKSArICcgPT09IFxcJ1xcJyB8fCAnICsgKCRkYXRhKSArICcgPT09IDAgfHwgJyArICgkZGF0YSkgKyAnID09PSBmYWxzZSkgJyArICgkY29lcmNlZCkgKyAnID0gbnVsbDsgJztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXQub3B0cy5jb2VyY2VUeXBlcyA9PSAnYXJyYXknICYmICR0eXBlID09ICdhcnJheScpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgZWxzZSBpZiAoJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdzdHJpbmdcXCcgfHwgJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdudW1iZXJcXCcgfHwgJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdib29sZWFuXFwnIHx8ICcgKyAoJGRhdGEpICsgJyA9PSBudWxsKSAnICsgKCRjb2VyY2VkKSArICcgPSBbJyArICgkZGF0YSkgKyAnXTsgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgZWxzZSB7ICAgJztcbiAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ3R5cGUnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IHR5cGU6IFxcJyc7XG4gICAgICAgICAgaWYgKCR0eXBlSXNBcnJheSkge1xuICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICdcXCcgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgYmUgJztcbiAgICAgICAgICAgIGlmICgkdHlwZUlzQXJyYXkpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIH0gaWYgKCcgKyAoJGNvZXJjZWQpICsgJyAhPT0gdW5kZWZpbmVkKSB7ICAnO1xuICAgICAgICB2YXIgJHBhcmVudERhdGEgPSAkZGF0YUx2bCA/ICdkYXRhJyArICgoJGRhdGFMdmwgLSAxKSB8fCAnJykgOiAncGFyZW50RGF0YScsXG4gICAgICAgICAgJHBhcmVudERhdGFQcm9wZXJ0eSA9ICRkYXRhTHZsID8gaXQuZGF0YVBhdGhBcnJbJGRhdGFMdmxdIDogJ3BhcmVudERhdGFQcm9wZXJ0eSc7XG4gICAgICAgIG91dCArPSAnICcgKyAoJGRhdGEpICsgJyA9ICcgKyAoJGNvZXJjZWQpICsgJzsgJztcbiAgICAgICAgaWYgKCEkZGF0YUx2bCkge1xuICAgICAgICAgIG91dCArPSAnaWYgKCcgKyAoJHBhcmVudERhdGEpICsgJyAhPT0gdW5kZWZpbmVkKSc7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgJyArICgkcGFyZW50RGF0YSkgKyAnWycgKyAoJHBhcmVudERhdGFQcm9wZXJ0eSkgKyAnXSA9ICcgKyAoJGNvZXJjZWQpICsgJzsgfSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ3R5cGUnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IHR5cGU6IFxcJyc7XG4gICAgICAgICAgaWYgKCR0eXBlSXNBcnJheSkge1xuICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICdcXCcgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgYmUgJztcbiAgICAgICAgICAgIGlmICgkdHlwZUlzQXJyYXkpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfVxuICB9XG4gIGlmIChpdC5zY2hlbWEuJHJlZiAmJiAhJHJlZktleXdvcmRzKSB7XG4gICAgb3V0ICs9ICcgJyArIChpdC5SVUxFUy5hbGwuJHJlZi5jb2RlKGl0LCAnJHJlZicpKSArICcgJztcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgfSBpZiAoZXJyb3JzID09PSAnO1xuICAgICAgaWYgKCR0b3ApIHtcbiAgICAgICAgb3V0ICs9ICcwJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnZXJyc18nICsgKCRsdmwpO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcpIHsgJztcbiAgICAgICRjbG9zaW5nQnJhY2VzMiArPSAnfSc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBhcnIyID0gaXQuUlVMRVM7XG4gICAgaWYgKGFycjIpIHtcbiAgICAgIHZhciAkcnVsZXNHcm91cCwgaTIgPSAtMSxcbiAgICAgICAgbDIgPSBhcnIyLmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoaTIgPCBsMikge1xuICAgICAgICAkcnVsZXNHcm91cCA9IGFycjJbaTIgKz0gMV07XG4gICAgICAgIGlmICgkc2hvdWxkVXNlR3JvdXAoJHJ1bGVzR3JvdXApKSB7XG4gICAgICAgICAgaWYgKCRydWxlc0dyb3VwLnR5cGUpIHtcbiAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKGl0LnV0aWwuY2hlY2tEYXRhVHlwZSgkcnVsZXNHcm91cC50eXBlLCAkZGF0YSwgaXQub3B0cy5zdHJpY3ROdW1iZXJzKSkgKyAnKSB7ICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpdC5vcHRzLnVzZURlZmF1bHRzKSB7XG4gICAgICAgICAgICBpZiAoJHJ1bGVzR3JvdXAudHlwZSA9PSAnb2JqZWN0JyAmJiBpdC5zY2hlbWEucHJvcGVydGllcykge1xuICAgICAgICAgICAgICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYS5wcm9wZXJ0aWVzLFxuICAgICAgICAgICAgICAgICRzY2hlbWFLZXlzID0gT2JqZWN0LmtleXMoJHNjaGVtYSk7XG4gICAgICAgICAgICAgIHZhciBhcnIzID0gJHNjaGVtYUtleXM7XG4gICAgICAgICAgICAgIGlmIChhcnIzKSB7XG4gICAgICAgICAgICAgICAgdmFyICRwcm9wZXJ0eUtleSwgaTMgPSAtMSxcbiAgICAgICAgICAgICAgICAgIGwzID0gYXJyMy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIHdoaWxlIChpMyA8IGwzKSB7XG4gICAgICAgICAgICAgICAgICAkcHJvcGVydHlLZXkgPSBhcnIzW2kzICs9IDFdO1xuICAgICAgICAgICAgICAgICAgdmFyICRzY2ggPSAkc2NoZW1hWyRwcm9wZXJ0eUtleV07XG4gICAgICAgICAgICAgICAgICBpZiAoJHNjaC5kZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgkcHJvcGVydHlLZXkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXQuY29tcG9zaXRlUnVsZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnN0cmljdERlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGRlZmF1bHRNc2cgPSAnZGVmYXVsdCBpcyBpZ25vcmVkIGZvcjogJyArICRwYXNzRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnN0cmljdERlZmF1bHRzID09PSAnbG9nJykgaXQubG9nZ2VyLndhcm4oJGRlZmF1bHRNc2cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoJGRlZmF1bHRNc2cpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkcGFzc0RhdGEpICsgJyA9PT0gdW5kZWZpbmVkICc7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMudXNlRGVmYXVsdHMgPT0gJ2VtcHR5Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgfHwgJyArICgkcGFzc0RhdGEpICsgJyA9PT0gbnVsbCB8fCAnICsgKCRwYXNzRGF0YSkgKyAnID09PSBcXCdcXCcgJztcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgKSAnICsgKCRwYXNzRGF0YSkgKyAnID0gJztcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy51c2VEZWZhdWx0cyA9PSAnc2hhcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgJyArIChpdC51c2VEZWZhdWx0KCRzY2guZGVmYXVsdCkpICsgJyAnO1xuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJyAnICsgKEpTT04uc3RyaW5naWZ5KCRzY2guZGVmYXVsdCkpICsgJyAnO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJzsgJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICgkcnVsZXNHcm91cC50eXBlID09ICdhcnJheScgJiYgQXJyYXkuaXNBcnJheShpdC5zY2hlbWEuaXRlbXMpKSB7XG4gICAgICAgICAgICAgIHZhciBhcnI0ID0gaXQuc2NoZW1hLml0ZW1zO1xuICAgICAgICAgICAgICBpZiAoYXJyNCkge1xuICAgICAgICAgICAgICAgIHZhciAkc2NoLCAkaSA9IC0xLFxuICAgICAgICAgICAgICAgICAgbDQgPSBhcnI0Lmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgd2hpbGUgKCRpIDwgbDQpIHtcbiAgICAgICAgICAgICAgICAgICRzY2ggPSBhcnI0WyRpICs9IDFdO1xuICAgICAgICAgICAgICAgICAgaWYgKCRzY2guZGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkcGFzc0RhdGEgPSAkZGF0YSArICdbJyArICRpICsgJ10nO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXQuY29tcG9zaXRlUnVsZSkge1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnN0cmljdERlZmF1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgJGRlZmF1bHRNc2cgPSAnZGVmYXVsdCBpcyBpZ25vcmVkIGZvcjogJyArICRwYXNzRGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnN0cmljdERlZmF1bHRzID09PSAnbG9nJykgaXQubG9nZ2VyLndhcm4oJGRlZmF1bHRNc2cpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB0aHJvdyBuZXcgRXJyb3IoJGRlZmF1bHRNc2cpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkcGFzc0RhdGEpICsgJyA9PT0gdW5kZWZpbmVkICc7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMudXNlRGVmYXVsdHMgPT0gJ2VtcHR5Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgfHwgJyArICgkcGFzc0RhdGEpICsgJyA9PT0gbnVsbCB8fCAnICsgKCRwYXNzRGF0YSkgKyAnID09PSBcXCdcXCcgJztcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgKSAnICsgKCRwYXNzRGF0YSkgKyAnID0gJztcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy51c2VEZWZhdWx0cyA9PSAnc2hhcmVkJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgJyArIChpdC51c2VEZWZhdWx0KCRzY2guZGVmYXVsdCkpICsgJyAnO1xuICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJyAnICsgKEpTT04uc3RyaW5naWZ5KCRzY2guZGVmYXVsdCkpICsgJyAnO1xuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJzsgJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICB2YXIgYXJyNSA9ICRydWxlc0dyb3VwLnJ1bGVzO1xuICAgICAgICAgIGlmIChhcnI1KSB7XG4gICAgICAgICAgICB2YXIgJHJ1bGUsIGk1ID0gLTEsXG4gICAgICAgICAgICAgIGw1ID0gYXJyNS5sZW5ndGggLSAxO1xuICAgICAgICAgICAgd2hpbGUgKGk1IDwgbDUpIHtcbiAgICAgICAgICAgICAgJHJ1bGUgPSBhcnI1W2k1ICs9IDFdO1xuICAgICAgICAgICAgICBpZiAoJHNob3VsZFVzZVJ1bGUoJHJ1bGUpKSB7XG4gICAgICAgICAgICAgICAgdmFyICRjb2RlID0gJHJ1bGUuY29kZShpdCwgJHJ1bGUua2V5d29yZCwgJHJ1bGVzR3JvdXAudHlwZSk7XG4gICAgICAgICAgICAgICAgaWYgKCRjb2RlKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyAnICsgKCRjb2RlKSArICcgJztcbiAgICAgICAgICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICRjbG9zaW5nQnJhY2VzMSArPSAnfSc7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAnICsgKCRjbG9zaW5nQnJhY2VzMSkgKyAnICc7XG4gICAgICAgICAgICAkY2xvc2luZ0JyYWNlczEgPSAnJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCRydWxlc0dyb3VwLnR5cGUpIHtcbiAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICAgIGlmICgkdHlwZVNjaGVtYSAmJiAkdHlwZVNjaGVtYSA9PT0gJHJ1bGVzR3JvdXAudHlwZSAmJiAhJGNvZXJjZVRvVHlwZXMpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gICAgICAgICAgICAgIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyAnLnR5cGUnLFxuICAgICAgICAgICAgICAgICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvdHlwZSc7XG4gICAgICAgICAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgICAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgkZXJyb3JLZXl3b3JkIHx8ICd0eXBlJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyB0eXBlOiBcXCcnO1xuICAgICAgICAgICAgICAgIGlmICgkdHlwZUlzQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYS5qb2luKFwiLFwiKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG91dCArPSAnXFwnIH0gJztcbiAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIGJlICc7XG4gICAgICAgICAgICAgICAgICBpZiAoJHR5cGVJc0FycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYS5qb2luKFwiLFwiKSk7XG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJycgKyAoJHR5cGVTY2hlbWEpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgb3V0ICs9ICdcXCcgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICAgICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoZXJyb3JzID09PSAnO1xuICAgICAgICAgICAgaWYgKCR0b3ApIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcwJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnZXJyc18nICsgKCRsdmwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICcpIHsgJztcbiAgICAgICAgICAgICRjbG9zaW5nQnJhY2VzMiArPSAnfSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgJyArICgkY2xvc2luZ0JyYWNlczIpICsgJyAnO1xuICB9XG4gIGlmICgkdG9wKSB7XG4gICAgaWYgKCRhc3luYykge1xuICAgICAgb3V0ICs9ICcgaWYgKGVycm9ycyA9PT0gMCkgcmV0dXJuIGRhdGE7ICAgICAgICAgICAnO1xuICAgICAgb3V0ICs9ICcgZWxzZSB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKHZFcnJvcnMpOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSB2RXJyb3JzOyAnO1xuICAgICAgb3V0ICs9ICcgcmV0dXJuIGVycm9ycyA9PT0gMDsgICAgICAgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfTsgcmV0dXJuIHZhbGlkYXRlOyc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJHZhbGlkKSArICcgPSBlcnJvcnMgPT09IGVycnNfJyArICgkbHZsKSArICc7JztcbiAgfVxuXG4gIGZ1bmN0aW9uICRzaG91bGRVc2VHcm91cCgkcnVsZXNHcm91cCkge1xuICAgIHZhciBydWxlcyA9ICRydWxlc0dyb3VwLnJ1bGVzO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZXMubGVuZ3RoOyBpKyspXG4gICAgICBpZiAoJHNob3VsZFVzZVJ1bGUocnVsZXNbaV0pKSByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uICRzaG91bGRVc2VSdWxlKCRydWxlKSB7XG4gICAgcmV0dXJuIGl0LnNjaGVtYVskcnVsZS5rZXl3b3JkXSAhPT0gdW5kZWZpbmVkIHx8ICgkcnVsZS5pbXBsZW1lbnRzICYmICRydWxlSW1wbGVtZW50c1NvbWVLZXl3b3JkKCRydWxlKSk7XG4gIH1cblxuICBmdW5jdGlvbiAkcnVsZUltcGxlbWVudHNTb21lS2V5d29yZCgkcnVsZSkge1xuICAgIHZhciBpbXBsID0gJHJ1bGUuaW1wbGVtZW50cztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGltcGwubGVuZ3RoOyBpKyspXG4gICAgICBpZiAoaXQuc2NoZW1hW2ltcGxbaV1dICE9PSB1bmRlZmluZWQpIHJldHVybiB0cnVlO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBJREVOVElGSUVSID0gL15bYS16XyRdW2EtejAtOV8kLV0qJC9pO1xudmFyIGN1c3RvbVJ1bGVDb2RlID0gcmVxdWlyZSgnLi9kb3Rqcy9jdXN0b20nKTtcbnZhciBkZWZpbml0aW9uU2NoZW1hID0gcmVxdWlyZSgnLi9kZWZpbml0aW9uX3NjaGVtYScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWRkOiBhZGRLZXl3b3JkLFxuICBnZXQ6IGdldEtleXdvcmQsXG4gIHJlbW92ZTogcmVtb3ZlS2V5d29yZCxcbiAgdmFsaWRhdGU6IHZhbGlkYXRlS2V5d29yZFxufTtcblxuXG4vKipcbiAqIERlZmluZSBjdXN0b20ga2V5d29yZFxuICogQHRoaXMgIEFqdlxuICogQHBhcmFtIHtTdHJpbmd9IGtleXdvcmQgY3VzdG9tIGtleXdvcmQsIHNob3VsZCBiZSB1bmlxdWUgKGluY2x1ZGluZyBkaWZmZXJlbnQgZnJvbSBhbGwgc3RhbmRhcmQsIGN1c3RvbSBhbmQgbWFjcm8ga2V5d29yZHMpLlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmluaXRpb24ga2V5d29yZCBkZWZpbml0aW9uIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgYHR5cGVgICh0eXBlKHMpIHdoaWNoIHRoZSBrZXl3b3JkIGFwcGxpZXMgdG8pLCBgdmFsaWRhdGVgIG9yIGBjb21waWxlYC5cbiAqIEByZXR1cm4ge0Fqdn0gdGhpcyBmb3IgbWV0aG9kIGNoYWluaW5nXG4gKi9cbmZ1bmN0aW9uIGFkZEtleXdvcmQoa2V5d29yZCwgZGVmaW5pdGlvbikge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIC8qIGVzbGludCBuby1zaGFkb3c6IDAgKi9cbiAgdmFyIFJVTEVTID0gdGhpcy5SVUxFUztcbiAgaWYgKFJVTEVTLmtleXdvcmRzW2tleXdvcmRdKVxuICAgIHRocm93IG5ldyBFcnJvcignS2V5d29yZCAnICsga2V5d29yZCArICcgaXMgYWxyZWFkeSBkZWZpbmVkJyk7XG5cbiAgaWYgKCFJREVOVElGSUVSLnRlc3Qoa2V5d29yZCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdLZXl3b3JkICcgKyBrZXl3b3JkICsgJyBpcyBub3QgYSB2YWxpZCBpZGVudGlmaWVyJyk7XG5cbiAgaWYgKGRlZmluaXRpb24pIHtcbiAgICB0aGlzLnZhbGlkYXRlS2V5d29yZChkZWZpbml0aW9uLCB0cnVlKTtcblxuICAgIHZhciBkYXRhVHlwZSA9IGRlZmluaXRpb24udHlwZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhVHlwZSkpIHtcbiAgICAgIGZvciAodmFyIGk9MDsgaTxkYXRhVHlwZS5sZW5ndGg7IGkrKylcbiAgICAgICAgX2FkZFJ1bGUoa2V5d29yZCwgZGF0YVR5cGVbaV0sIGRlZmluaXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBfYWRkUnVsZShrZXl3b3JkLCBkYXRhVHlwZSwgZGVmaW5pdGlvbik7XG4gICAgfVxuXG4gICAgdmFyIG1ldGFTY2hlbWEgPSBkZWZpbml0aW9uLm1ldGFTY2hlbWE7XG4gICAgaWYgKG1ldGFTY2hlbWEpIHtcbiAgICAgIGlmIChkZWZpbml0aW9uLiRkYXRhICYmIHRoaXMuX29wdHMuJGRhdGEpIHtcbiAgICAgICAgbWV0YVNjaGVtYSA9IHtcbiAgICAgICAgICBhbnlPZjogW1xuICAgICAgICAgICAgbWV0YVNjaGVtYSxcbiAgICAgICAgICAgIHsgJyRyZWYnOiAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Fqdi12YWxpZGF0b3IvYWp2L21hc3Rlci9saWIvcmVmcy9kYXRhLmpzb24jJyB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZGVmaW5pdGlvbi52YWxpZGF0ZVNjaGVtYSA9IHRoaXMuY29tcGlsZShtZXRhU2NoZW1hLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBSVUxFUy5rZXl3b3Jkc1trZXl3b3JkXSA9IFJVTEVTLmFsbFtrZXl3b3JkXSA9IHRydWU7XG5cblxuICBmdW5jdGlvbiBfYWRkUnVsZShrZXl3b3JkLCBkYXRhVHlwZSwgZGVmaW5pdGlvbikge1xuICAgIHZhciBydWxlR3JvdXA7XG4gICAgZm9yICh2YXIgaT0wOyBpPFJVTEVTLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcmcgPSBSVUxFU1tpXTtcbiAgICAgIGlmIChyZy50eXBlID09IGRhdGFUeXBlKSB7XG4gICAgICAgIHJ1bGVHcm91cCA9IHJnO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXJ1bGVHcm91cCkge1xuICAgICAgcnVsZUdyb3VwID0geyB0eXBlOiBkYXRhVHlwZSwgcnVsZXM6IFtdIH07XG4gICAgICBSVUxFUy5wdXNoKHJ1bGVHcm91cCk7XG4gICAgfVxuXG4gICAgdmFyIHJ1bGUgPSB7XG4gICAgICBrZXl3b3JkOiBrZXl3b3JkLFxuICAgICAgZGVmaW5pdGlvbjogZGVmaW5pdGlvbixcbiAgICAgIGN1c3RvbTogdHJ1ZSxcbiAgICAgIGNvZGU6IGN1c3RvbVJ1bGVDb2RlLFxuICAgICAgaW1wbGVtZW50czogZGVmaW5pdGlvbi5pbXBsZW1lbnRzXG4gICAgfTtcbiAgICBydWxlR3JvdXAucnVsZXMucHVzaChydWxlKTtcbiAgICBSVUxFUy5jdXN0b21ba2V5d29yZF0gPSBydWxlO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cblxuLyoqXG4gKiBHZXQga2V5d29yZFxuICogQHRoaXMgIEFqdlxuICogQHBhcmFtIHtTdHJpbmd9IGtleXdvcmQgcHJlLWRlZmluZWQgb3IgY3VzdG9tIGtleXdvcmQuXG4gKiBAcmV0dXJuIHtPYmplY3R8Qm9vbGVhbn0gY3VzdG9tIGtleXdvcmQgZGVmaW5pdGlvbiwgYHRydWVgIGlmIGl0IGlzIGEgcHJlZGVmaW5lZCBrZXl3b3JkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gZ2V0S2V5d29yZChrZXl3b3JkKSB7XG4gIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cbiAgdmFyIHJ1bGUgPSB0aGlzLlJVTEVTLmN1c3RvbVtrZXl3b3JkXTtcbiAgcmV0dXJuIHJ1bGUgPyBydWxlLmRlZmluaXRpb24gOiB0aGlzLlJVTEVTLmtleXdvcmRzW2tleXdvcmRdIHx8IGZhbHNlO1xufVxuXG5cbi8qKlxuICogUmVtb3ZlIGtleXdvcmRcbiAqIEB0aGlzICBBanZcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXl3b3JkIHByZS1kZWZpbmVkIG9yIGN1c3RvbSBrZXl3b3JkLlxuICogQHJldHVybiB7QWp2fSB0aGlzIGZvciBtZXRob2QgY2hhaW5pbmdcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlS2V5d29yZChrZXl3b3JkKSB7XG4gIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cbiAgdmFyIFJVTEVTID0gdGhpcy5SVUxFUztcbiAgZGVsZXRlIFJVTEVTLmtleXdvcmRzW2tleXdvcmRdO1xuICBkZWxldGUgUlVMRVMuYWxsW2tleXdvcmRdO1xuICBkZWxldGUgUlVMRVMuY3VzdG9tW2tleXdvcmRdO1xuICBmb3IgKHZhciBpPTA7IGk8UlVMRVMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcnVsZXMgPSBSVUxFU1tpXS5ydWxlcztcbiAgICBmb3IgKHZhciBqPTA7IGo8cnVsZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmIChydWxlc1tqXS5rZXl3b3JkID09IGtleXdvcmQpIHtcbiAgICAgICAgcnVsZXMuc3BsaWNlKGosIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cblxuLyoqXG4gKiBWYWxpZGF0ZSBrZXl3b3JkIGRlZmluaXRpb25cbiAqIEB0aGlzICBBanZcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZpbml0aW9uIGtleXdvcmQgZGVmaW5pdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHRocm93RXJyb3IgdHJ1ZSB0byB0aHJvdyBleGNlcHRpb24gaWYgZGVmaW5pdGlvbiBpcyBpbnZhbGlkXG4gKiBAcmV0dXJuIHtib29sZWFufSB2YWxpZGF0aW9uIHJlc3VsdFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUtleXdvcmQoZGVmaW5pdGlvbiwgdGhyb3dFcnJvcikge1xuICB2YWxpZGF0ZUtleXdvcmQuZXJyb3JzID0gbnVsbDtcbiAgdmFyIHYgPSB0aGlzLl92YWxpZGF0ZUtleXdvcmQgPSB0aGlzLl92YWxpZGF0ZUtleXdvcmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLmNvbXBpbGUoZGVmaW5pdGlvblNjaGVtYSwgdHJ1ZSk7XG5cbiAgaWYgKHYoZGVmaW5pdGlvbikpIHJldHVybiB0cnVlO1xuICB2YWxpZGF0ZUtleXdvcmQuZXJyb3JzID0gdi5lcnJvcnM7XG4gIGlmICh0aHJvd0Vycm9yKVxuICAgIHRocm93IG5ldyBFcnJvcignY3VzdG9tIGtleXdvcmQgZGVmaW5pdGlvbiBpcyBpbnZhbGlkOiAnICArIHRoaXMuZXJyb3JzVGV4dCh2LmVycm9ycykpO1xuICBlbHNlXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBiYWxhbmNlZDtcbmZ1bmN0aW9uIGJhbGFuY2VkKGEsIGIsIHN0cikge1xuICBpZiAoYSBpbnN0YW5jZW9mIFJlZ0V4cCkgYSA9IG1heWJlTWF0Y2goYSwgc3RyKTtcbiAgaWYgKGIgaW5zdGFuY2VvZiBSZWdFeHApIGIgPSBtYXliZU1hdGNoKGIsIHN0cik7XG5cbiAgdmFyIHIgPSByYW5nZShhLCBiLCBzdHIpO1xuXG4gIHJldHVybiByICYmIHtcbiAgICBzdGFydDogclswXSxcbiAgICBlbmQ6IHJbMV0sXG4gICAgcHJlOiBzdHIuc2xpY2UoMCwgclswXSksXG4gICAgYm9keTogc3RyLnNsaWNlKHJbMF0gKyBhLmxlbmd0aCwgclsxXSksXG4gICAgcG9zdDogc3RyLnNsaWNlKHJbMV0gKyBiLmxlbmd0aClcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWF5YmVNYXRjaChyZWcsIHN0cikge1xuICB2YXIgbSA9IHN0ci5tYXRjaChyZWcpO1xuICByZXR1cm4gbSA/IG1bMF0gOiBudWxsO1xufVxuXG5iYWxhbmNlZC5yYW5nZSA9IHJhbmdlO1xuZnVuY3Rpb24gcmFuZ2UoYSwgYiwgc3RyKSB7XG4gIHZhciBiZWdzLCBiZWcsIGxlZnQsIHJpZ2h0LCByZXN1bHQ7XG4gIHZhciBhaSA9IHN0ci5pbmRleE9mKGEpO1xuICB2YXIgYmkgPSBzdHIuaW5kZXhPZihiLCBhaSArIDEpO1xuICB2YXIgaSA9IGFpO1xuXG4gIGlmIChhaSA+PSAwICYmIGJpID4gMCkge1xuICAgIGlmKGE9PT1iKSB7XG4gICAgICByZXR1cm4gW2FpLCBiaV07XG4gICAgfVxuICAgIGJlZ3MgPSBbXTtcbiAgICBsZWZ0ID0gc3RyLmxlbmd0aDtcblxuICAgIHdoaWxlIChpID49IDAgJiYgIXJlc3VsdCkge1xuICAgICAgaWYgKGkgPT0gYWkpIHtcbiAgICAgICAgYmVncy5wdXNoKGkpO1xuICAgICAgICBhaSA9IHN0ci5pbmRleE9mKGEsIGkgKyAxKTtcbiAgICAgIH0gZWxzZSBpZiAoYmVncy5sZW5ndGggPT0gMSkge1xuICAgICAgICByZXN1bHQgPSBbIGJlZ3MucG9wKCksIGJpIF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiZWcgPSBiZWdzLnBvcCgpO1xuICAgICAgICBpZiAoYmVnIDwgbGVmdCkge1xuICAgICAgICAgIGxlZnQgPSBiZWc7XG4gICAgICAgICAgcmlnaHQgPSBiaTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJpID0gc3RyLmluZGV4T2YoYiwgaSArIDEpO1xuICAgICAgfVxuXG4gICAgICBpID0gYWkgPCBiaSAmJiBhaSA+PSAwID8gYWkgOiBiaTtcbiAgICB9XG5cbiAgICBpZiAoYmVncy5sZW5ndGgpIHtcbiAgICAgIHJlc3VsdCA9IFsgbGVmdCwgcmlnaHQgXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuIiwiJ3VzZSBzdHJpY3QnXG5cbmV4cG9ydHMuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcbmV4cG9ydHMudG9CeXRlQXJyYXkgPSB0b0J5dGVBcnJheVxuZXhwb3J0cy5mcm9tQnl0ZUFycmF5ID0gZnJvbUJ5dGVBcnJheVxuXG52YXIgbG9va3VwID0gW11cbnZhciByZXZMb29rdXAgPSBbXVxudmFyIEFyciA9IHR5cGVvZiBVaW50OEFycmF5ICE9PSAndW5kZWZpbmVkJyA/IFVpbnQ4QXJyYXkgOiBBcnJheVxuXG52YXIgY29kZSA9ICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvJ1xuZm9yICh2YXIgaSA9IDAsIGxlbiA9IGNvZGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgbG9va3VwW2ldID0gY29kZVtpXVxuICByZXZMb29rdXBbY29kZS5jaGFyQ29kZUF0KGkpXSA9IGlcbn1cblxuLy8gU3VwcG9ydCBkZWNvZGluZyBVUkwtc2FmZSBiYXNlNjQgc3RyaW5ncywgYXMgTm9kZS5qcyBkb2VzLlxuLy8gU2VlOiBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9CYXNlNjQjVVJMX2FwcGxpY2F0aW9uc1xucmV2TG9va3VwWyctJy5jaGFyQ29kZUF0KDApXSA9IDYyXG5yZXZMb29rdXBbJ18nLmNoYXJDb2RlQXQoMCldID0gNjNcblxuZnVuY3Rpb24gZ2V0TGVucyAoYjY0KSB7XG4gIHZhciBsZW4gPSBiNjQubGVuZ3RoXG5cbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIFRyaW0gb2ZmIGV4dHJhIGJ5dGVzIGFmdGVyIHBsYWNlaG9sZGVyIGJ5dGVzIGFyZSBmb3VuZFxuICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9iZWF0Z2FtbWl0L2Jhc2U2NC1qcy9pc3N1ZXMvNDJcbiAgdmFyIHZhbGlkTGVuID0gYjY0LmluZGV4T2YoJz0nKVxuICBpZiAodmFsaWRMZW4gPT09IC0xKSB2YWxpZExlbiA9IGxlblxuXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSB2YWxpZExlbiA9PT0gbGVuXG4gICAgPyAwXG4gICAgOiA0IC0gKHZhbGlkTGVuICUgNClcblxuICByZXR1cm4gW3ZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW5dXG59XG5cbi8vIGJhc2U2NCBpcyA0LzMgKyB1cCB0byB0d28gY2hhcmFjdGVycyBvZiB0aGUgb3JpZ2luYWwgZGF0YVxuZnVuY3Rpb24gYnl0ZUxlbmd0aCAoYjY0KSB7XG4gIHZhciBsZW5zID0gZ2V0TGVucyhiNjQpXG4gIHZhciB2YWxpZExlbiA9IGxlbnNbMF1cbiAgdmFyIHBsYWNlSG9sZGVyc0xlbiA9IGxlbnNbMV1cbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIF9ieXRlTGVuZ3RoIChiNjQsIHZhbGlkTGVuLCBwbGFjZUhvbGRlcnNMZW4pIHtcbiAgcmV0dXJuICgodmFsaWRMZW4gKyBwbGFjZUhvbGRlcnNMZW4pICogMyAvIDQpIC0gcGxhY2VIb2xkZXJzTGVuXG59XG5cbmZ1bmN0aW9uIHRvQnl0ZUFycmF5IChiNjQpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVucyA9IGdldExlbnMoYjY0KVxuICB2YXIgdmFsaWRMZW4gPSBsZW5zWzBdXG4gIHZhciBwbGFjZUhvbGRlcnNMZW4gPSBsZW5zWzFdXG5cbiAgdmFyIGFyciA9IG5ldyBBcnIoX2J5dGVMZW5ndGgoYjY0LCB2YWxpZExlbiwgcGxhY2VIb2xkZXJzTGVuKSlcblxuICB2YXIgY3VyQnl0ZSA9IDBcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIHZhciBsZW4gPSBwbGFjZUhvbGRlcnNMZW4gPiAwXG4gICAgPyB2YWxpZExlbiAtIDRcbiAgICA6IHZhbGlkTGVuXG5cbiAgdmFyIGlcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgdG1wID1cbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDE4KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA8PCA2KSB8XG4gICAgICByZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDMpXVxuICAgIGFycltjdXJCeXRlKytdID0gKHRtcCA+PiAxNikgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSAodG1wID4+IDgpICYgMHhGRlxuICAgIGFycltjdXJCeXRlKytdID0gdG1wICYgMHhGRlxuICB9XG5cbiAgaWYgKHBsYWNlSG9sZGVyc0xlbiA9PT0gMikge1xuICAgIHRtcCA9XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPj4gNClcbiAgICBhcnJbY3VyQnl0ZSsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnNMZW4gPT09IDEpIHtcbiAgICB0bXAgPVxuICAgICAgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpKV0gPDwgMTApIHxcbiAgICAgIChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8XG4gICAgICAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAyKV0gPj4gMilcbiAgICBhcnJbY3VyQnl0ZSsrXSA9ICh0bXAgPj4gOCkgJiAweEZGXG4gICAgYXJyW2N1ckJ5dGUrK10gPSB0bXAgJiAweEZGXG4gIH1cblxuICByZXR1cm4gYXJyXG59XG5cbmZ1bmN0aW9uIHRyaXBsZXRUb0Jhc2U2NCAobnVtKSB7XG4gIHJldHVybiBsb29rdXBbbnVtID4+IDE4ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArXG4gICAgbG9va3VwW251bSA+PiA2ICYgMHgzRl0gK1xuICAgIGxvb2t1cFtudW0gJiAweDNGXVxufVxuXG5mdW5jdGlvbiBlbmNvZGVDaHVuayAodWludDgsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHRtcFxuICB2YXIgb3V0cHV0ID0gW11cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IDMpIHtcbiAgICB0bXAgPVxuICAgICAgKCh1aW50OFtpXSA8PCAxNikgJiAweEZGMDAwMCkgK1xuICAgICAgKCh1aW50OFtpICsgMV0gPDwgOCkgJiAweEZGMDApICtcbiAgICAgICh1aW50OFtpICsgMl0gJiAweEZGKVxuICAgIG91dHB1dC5wdXNoKHRyaXBsZXRUb0Jhc2U2NCh0bXApKVxuICB9XG4gIHJldHVybiBvdXRwdXQuam9pbignJylcbn1cblxuZnVuY3Rpb24gZnJvbUJ5dGVBcnJheSAodWludDgpIHtcbiAgdmFyIHRtcFxuICB2YXIgbGVuID0gdWludDgubGVuZ3RoXG4gIHZhciBleHRyYUJ5dGVzID0gbGVuICUgMyAvLyBpZiB3ZSBoYXZlIDEgYnl0ZSBsZWZ0LCBwYWQgMiBieXRlc1xuICB2YXIgcGFydHMgPSBbXVxuICB2YXIgbWF4Q2h1bmtMZW5ndGggPSAxNjM4MyAvLyBtdXN0IGJlIG11bHRpcGxlIG9mIDNcblxuICAvLyBnbyB0aHJvdWdoIHRoZSBhcnJheSBldmVyeSB0aHJlZSBieXRlcywgd2UnbGwgZGVhbCB3aXRoIHRyYWlsaW5nIHN0dWZmIGxhdGVyXG4gIGZvciAodmFyIGkgPSAwLCBsZW4yID0gbGVuIC0gZXh0cmFCeXRlczsgaSA8IGxlbjI7IGkgKz0gbWF4Q2h1bmtMZW5ndGgpIHtcbiAgICBwYXJ0cy5wdXNoKGVuY29kZUNodW5rKHVpbnQ4LCBpLCAoaSArIG1heENodW5rTGVuZ3RoKSA+IGxlbjIgPyBsZW4yIDogKGkgKyBtYXhDaHVua0xlbmd0aCkpKVxuICB9XG5cbiAgLy8gcGFkIHRoZSBlbmQgd2l0aCB6ZXJvcywgYnV0IG1ha2Ugc3VyZSB0byBub3QgZm9yZ2V0IHRoZSBleHRyYSBieXRlc1xuICBpZiAoZXh0cmFCeXRlcyA9PT0gMSkge1xuICAgIHRtcCA9IHVpbnQ4W2xlbiAtIDFdXG4gICAgcGFydHMucHVzaChcbiAgICAgIGxvb2t1cFt0bXAgPj4gMl0gK1xuICAgICAgbG9va3VwWyh0bXAgPDwgNCkgJiAweDNGXSArXG4gICAgICAnPT0nXG4gICAgKVxuICB9IGVsc2UgaWYgKGV4dHJhQnl0ZXMgPT09IDIpIHtcbiAgICB0bXAgPSAodWludDhbbGVuIC0gMl0gPDwgOCkgKyB1aW50OFtsZW4gLSAxXVxuICAgIHBhcnRzLnB1c2goXG4gICAgICBsb29rdXBbdG1wID4+IDEwXSArXG4gICAgICBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdICtcbiAgICAgIGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl0gK1xuICAgICAgJz0nXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzLmpvaW4oJycpXG59XG4iLCJ2YXIgY29uY2F0TWFwID0gcmVxdWlyZSgnY29uY2F0LW1hcCcpO1xudmFyIGJhbGFuY2VkID0gcmVxdWlyZSgnYmFsYW5jZWQtbWF0Y2gnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBleHBhbmRUb3A7XG5cbnZhciBlc2NTbGFzaCA9ICdcXDBTTEFTSCcrTWF0aC5yYW5kb20oKSsnXFwwJztcbnZhciBlc2NPcGVuID0gJ1xcME9QRU4nK01hdGgucmFuZG9tKCkrJ1xcMCc7XG52YXIgZXNjQ2xvc2UgPSAnXFwwQ0xPU0UnK01hdGgucmFuZG9tKCkrJ1xcMCc7XG52YXIgZXNjQ29tbWEgPSAnXFwwQ09NTUEnK01hdGgucmFuZG9tKCkrJ1xcMCc7XG52YXIgZXNjUGVyaW9kID0gJ1xcMFBFUklPRCcrTWF0aC5yYW5kb20oKSsnXFwwJztcblxuZnVuY3Rpb24gbnVtZXJpYyhzdHIpIHtcbiAgcmV0dXJuIHBhcnNlSW50KHN0ciwgMTApID09IHN0clxuICAgID8gcGFyc2VJbnQoc3RyLCAxMClcbiAgICA6IHN0ci5jaGFyQ29kZUF0KDApO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVCcmFjZXMoc3RyKSB7XG4gIHJldHVybiBzdHIuc3BsaXQoJ1xcXFxcXFxcJykuam9pbihlc2NTbGFzaClcbiAgICAgICAgICAgIC5zcGxpdCgnXFxcXHsnKS5qb2luKGVzY09wZW4pXG4gICAgICAgICAgICAuc3BsaXQoJ1xcXFx9Jykuam9pbihlc2NDbG9zZSlcbiAgICAgICAgICAgIC5zcGxpdCgnXFxcXCwnKS5qb2luKGVzY0NvbW1hKVxuICAgICAgICAgICAgLnNwbGl0KCdcXFxcLicpLmpvaW4oZXNjUGVyaW9kKTtcbn1cblxuZnVuY3Rpb24gdW5lc2NhcGVCcmFjZXMoc3RyKSB7XG4gIHJldHVybiBzdHIuc3BsaXQoZXNjU2xhc2gpLmpvaW4oJ1xcXFwnKVxuICAgICAgICAgICAgLnNwbGl0KGVzY09wZW4pLmpvaW4oJ3snKVxuICAgICAgICAgICAgLnNwbGl0KGVzY0Nsb3NlKS5qb2luKCd9JylcbiAgICAgICAgICAgIC5zcGxpdChlc2NDb21tYSkuam9pbignLCcpXG4gICAgICAgICAgICAuc3BsaXQoZXNjUGVyaW9kKS5qb2luKCcuJyk7XG59XG5cblxuLy8gQmFzaWNhbGx5IGp1c3Qgc3RyLnNwbGl0KFwiLFwiKSwgYnV0IGhhbmRsaW5nIGNhc2VzXG4vLyB3aGVyZSB3ZSBoYXZlIG5lc3RlZCBicmFjZWQgc2VjdGlvbnMsIHdoaWNoIHNob3VsZCBiZVxuLy8gdHJlYXRlZCBhcyBpbmRpdmlkdWFsIG1lbWJlcnMsIGxpa2Uge2Ese2IsY30sZH1cbmZ1bmN0aW9uIHBhcnNlQ29tbWFQYXJ0cyhzdHIpIHtcbiAgaWYgKCFzdHIpXG4gICAgcmV0dXJuIFsnJ107XG5cbiAgdmFyIHBhcnRzID0gW107XG4gIHZhciBtID0gYmFsYW5jZWQoJ3snLCAnfScsIHN0cik7XG5cbiAgaWYgKCFtKVxuICAgIHJldHVybiBzdHIuc3BsaXQoJywnKTtcblxuICB2YXIgcHJlID0gbS5wcmU7XG4gIHZhciBib2R5ID0gbS5ib2R5O1xuICB2YXIgcG9zdCA9IG0ucG9zdDtcbiAgdmFyIHAgPSBwcmUuc3BsaXQoJywnKTtcblxuICBwW3AubGVuZ3RoLTFdICs9ICd7JyArIGJvZHkgKyAnfSc7XG4gIHZhciBwb3N0UGFydHMgPSBwYXJzZUNvbW1hUGFydHMocG9zdCk7XG4gIGlmIChwb3N0Lmxlbmd0aCkge1xuICAgIHBbcC5sZW5ndGgtMV0gKz0gcG9zdFBhcnRzLnNoaWZ0KCk7XG4gICAgcC5wdXNoLmFwcGx5KHAsIHBvc3RQYXJ0cyk7XG4gIH1cblxuICBwYXJ0cy5wdXNoLmFwcGx5KHBhcnRzLCBwKTtcblxuICByZXR1cm4gcGFydHM7XG59XG5cbmZ1bmN0aW9uIGV4cGFuZFRvcChzdHIpIHtcbiAgaWYgKCFzdHIpXG4gICAgcmV0dXJuIFtdO1xuXG4gIC8vIEkgZG9uJ3Qga25vdyB3aHkgQmFzaCA0LjMgZG9lcyB0aGlzLCBidXQgaXQgZG9lcy5cbiAgLy8gQW55dGhpbmcgc3RhcnRpbmcgd2l0aCB7fSB3aWxsIGhhdmUgdGhlIGZpcnN0IHR3byBieXRlcyBwcmVzZXJ2ZWRcbiAgLy8gYnV0ICpvbmx5KiBhdCB0aGUgdG9wIGxldmVsLCBzbyB7fSxhfWIgd2lsbCBub3QgZXhwYW5kIHRvIGFueXRoaW5nLFxuICAvLyBidXQgYXt9LGJ9YyB3aWxsIGJlIGV4cGFuZGVkIHRvIFthfWMsYWJjXS5cbiAgLy8gT25lIGNvdWxkIGFyZ3VlIHRoYXQgdGhpcyBpcyBhIGJ1ZyBpbiBCYXNoLCBidXQgc2luY2UgdGhlIGdvYWwgb2ZcbiAgLy8gdGhpcyBtb2R1bGUgaXMgdG8gbWF0Y2ggQmFzaCdzIHJ1bGVzLCB3ZSBlc2NhcGUgYSBsZWFkaW5nIHt9XG4gIGlmIChzdHIuc3Vic3RyKDAsIDIpID09PSAne30nKSB7XG4gICAgc3RyID0gJ1xcXFx7XFxcXH0nICsgc3RyLnN1YnN0cigyKTtcbiAgfVxuXG4gIHJldHVybiBleHBhbmQoZXNjYXBlQnJhY2VzKHN0ciksIHRydWUpLm1hcCh1bmVzY2FwZUJyYWNlcyk7XG59XG5cbmZ1bmN0aW9uIGlkZW50aXR5KGUpIHtcbiAgcmV0dXJuIGU7XG59XG5cbmZ1bmN0aW9uIGVtYnJhY2Uoc3RyKSB7XG4gIHJldHVybiAneycgKyBzdHIgKyAnfSc7XG59XG5mdW5jdGlvbiBpc1BhZGRlZChlbCkge1xuICByZXR1cm4gL14tPzBcXGQvLnRlc3QoZWwpO1xufVxuXG5mdW5jdGlvbiBsdGUoaSwgeSkge1xuICByZXR1cm4gaSA8PSB5O1xufVxuZnVuY3Rpb24gZ3RlKGksIHkpIHtcbiAgcmV0dXJuIGkgPj0geTtcbn1cblxuZnVuY3Rpb24gZXhwYW5kKHN0ciwgaXNUb3ApIHtcbiAgdmFyIGV4cGFuc2lvbnMgPSBbXTtcblxuICB2YXIgbSA9IGJhbGFuY2VkKCd7JywgJ30nLCBzdHIpO1xuICBpZiAoIW0gfHwgL1xcJCQvLnRlc3QobS5wcmUpKSByZXR1cm4gW3N0cl07XG5cbiAgdmFyIGlzTnVtZXJpY1NlcXVlbmNlID0gL14tP1xcZCtcXC5cXC4tP1xcZCsoPzpcXC5cXC4tP1xcZCspPyQvLnRlc3QobS5ib2R5KTtcbiAgdmFyIGlzQWxwaGFTZXF1ZW5jZSA9IC9eW2EtekEtWl1cXC5cXC5bYS16QS1aXSg/OlxcLlxcLi0/XFxkKyk/JC8udGVzdChtLmJvZHkpO1xuICB2YXIgaXNTZXF1ZW5jZSA9IGlzTnVtZXJpY1NlcXVlbmNlIHx8IGlzQWxwaGFTZXF1ZW5jZTtcbiAgdmFyIGlzT3B0aW9ucyA9IG0uYm9keS5pbmRleE9mKCcsJykgPj0gMDtcbiAgaWYgKCFpc1NlcXVlbmNlICYmICFpc09wdGlvbnMpIHtcbiAgICAvLyB7YX0sYn1cbiAgICBpZiAobS5wb3N0Lm1hdGNoKC8sLipcXH0vKSkge1xuICAgICAgc3RyID0gbS5wcmUgKyAneycgKyBtLmJvZHkgKyBlc2NDbG9zZSArIG0ucG9zdDtcbiAgICAgIHJldHVybiBleHBhbmQoc3RyKTtcbiAgICB9XG4gICAgcmV0dXJuIFtzdHJdO1xuICB9XG5cbiAgdmFyIG47XG4gIGlmIChpc1NlcXVlbmNlKSB7XG4gICAgbiA9IG0uYm9keS5zcGxpdCgvXFwuXFwuLyk7XG4gIH0gZWxzZSB7XG4gICAgbiA9IHBhcnNlQ29tbWFQYXJ0cyhtLmJvZHkpO1xuICAgIGlmIChuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgLy8geHt7YSxifX15ID09PiB4e2F9eSB4e2J9eVxuICAgICAgbiA9IGV4cGFuZChuWzBdLCBmYWxzZSkubWFwKGVtYnJhY2UpO1xuICAgICAgaWYgKG4ubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHZhciBwb3N0ID0gbS5wb3N0Lmxlbmd0aFxuICAgICAgICAgID8gZXhwYW5kKG0ucG9zdCwgZmFsc2UpXG4gICAgICAgICAgOiBbJyddO1xuICAgICAgICByZXR1cm4gcG9zdC5tYXAoZnVuY3Rpb24ocCkge1xuICAgICAgICAgIHJldHVybiBtLnByZSArIG5bMF0gKyBwO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBhdCB0aGlzIHBvaW50LCBuIGlzIHRoZSBwYXJ0cywgYW5kIHdlIGtub3cgaXQncyBub3QgYSBjb21tYSBzZXRcbiAgLy8gd2l0aCBhIHNpbmdsZSBlbnRyeS5cblxuICAvLyBubyBuZWVkIHRvIGV4cGFuZCBwcmUsIHNpbmNlIGl0IGlzIGd1YXJhbnRlZWQgdG8gYmUgZnJlZSBvZiBicmFjZS1zZXRzXG4gIHZhciBwcmUgPSBtLnByZTtcbiAgdmFyIHBvc3QgPSBtLnBvc3QubGVuZ3RoXG4gICAgPyBleHBhbmQobS5wb3N0LCBmYWxzZSlcbiAgICA6IFsnJ107XG5cbiAgdmFyIE47XG5cbiAgaWYgKGlzU2VxdWVuY2UpIHtcbiAgICB2YXIgeCA9IG51bWVyaWMoblswXSk7XG4gICAgdmFyIHkgPSBudW1lcmljKG5bMV0pO1xuICAgIHZhciB3aWR0aCA9IE1hdGgubWF4KG5bMF0ubGVuZ3RoLCBuWzFdLmxlbmd0aClcbiAgICB2YXIgaW5jciA9IG4ubGVuZ3RoID09IDNcbiAgICAgID8gTWF0aC5hYnMobnVtZXJpYyhuWzJdKSlcbiAgICAgIDogMTtcbiAgICB2YXIgdGVzdCA9IGx0ZTtcbiAgICB2YXIgcmV2ZXJzZSA9IHkgPCB4O1xuICAgIGlmIChyZXZlcnNlKSB7XG4gICAgICBpbmNyICo9IC0xO1xuICAgICAgdGVzdCA9IGd0ZTtcbiAgICB9XG4gICAgdmFyIHBhZCA9IG4uc29tZShpc1BhZGRlZCk7XG5cbiAgICBOID0gW107XG5cbiAgICBmb3IgKHZhciBpID0geDsgdGVzdChpLCB5KTsgaSArPSBpbmNyKSB7XG4gICAgICB2YXIgYztcbiAgICAgIGlmIChpc0FscGhhU2VxdWVuY2UpIHtcbiAgICAgICAgYyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaSk7XG4gICAgICAgIGlmIChjID09PSAnXFxcXCcpXG4gICAgICAgICAgYyA9ICcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYyA9IFN0cmluZyhpKTtcbiAgICAgICAgaWYgKHBhZCkge1xuICAgICAgICAgIHZhciBuZWVkID0gd2lkdGggLSBjLmxlbmd0aDtcbiAgICAgICAgICBpZiAobmVlZCA+IDApIHtcbiAgICAgICAgICAgIHZhciB6ID0gbmV3IEFycmF5KG5lZWQgKyAxKS5qb2luKCcwJyk7XG4gICAgICAgICAgICBpZiAoaSA8IDApXG4gICAgICAgICAgICAgIGMgPSAnLScgKyB6ICsgYy5zbGljZSgxKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgYyA9IHogKyBjO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgTi5wdXNoKGMpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBOID0gY29uY2F0TWFwKG4sIGZ1bmN0aW9uKGVsKSB7IHJldHVybiBleHBhbmQoZWwsIGZhbHNlKSB9KTtcbiAgfVxuXG4gIGZvciAodmFyIGogPSAwOyBqIDwgTi5sZW5ndGg7IGorKykge1xuICAgIGZvciAodmFyIGsgPSAwOyBrIDwgcG9zdC5sZW5ndGg7IGsrKykge1xuICAgICAgdmFyIGV4cGFuc2lvbiA9IHByZSArIE5bal0gKyBwb3N0W2tdO1xuICAgICAgaWYgKCFpc1RvcCB8fCBpc1NlcXVlbmNlIHx8IGV4cGFuc2lvbilcbiAgICAgICAgZXhwYW5zaW9ucy5wdXNoKGV4cGFuc2lvbik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGV4cGFuc2lvbnM7XG59XG5cbiIsImFjZS5kZWZpbmUoXCJhY2UvdGhlbWUvbW9ub2thaVwiLFtcInJlcXVpcmVcIixcImV4cG9ydHNcIixcIm1vZHVsZVwiLFwiYWNlL2xpYi9kb21cIl0sIGZ1bmN0aW9uKGFjZXF1aXJlLCBleHBvcnRzLCBtb2R1bGUpIHtcblxuZXhwb3J0cy5pc0RhcmsgPSB0cnVlO1xuZXhwb3J0cy5jc3NDbGFzcyA9IFwiYWNlLW1vbm9rYWlcIjtcbmV4cG9ydHMuY3NzVGV4dCA9IFwiLmFjZS1tb25va2FpIC5hY2VfZ3V0dGVyIHtcXFxuYmFja2dyb3VuZDogIzJGMzEyOTtcXFxuY29sb3I6ICM4RjkwOEFcXFxufVxcXG4uYWNlLW1vbm9rYWkgLmFjZV9wcmludC1tYXJnaW4ge1xcXG53aWR0aDogMXB4O1xcXG5iYWNrZ3JvdW5kOiAjNTU1NjUxXFxcbn1cXFxuLmFjZS1tb25va2FpIHtcXFxuYmFja2dyb3VuZC1jb2xvcjogIzI3MjgyMjtcXFxuY29sb3I6ICNGOEY4RjJcXFxufVxcXG4uYWNlLW1vbm9rYWkgLmFjZV9jdXJzb3Ige1xcXG5jb2xvcjogI0Y4RjhGMFxcXG59XFxcbi5hY2UtbW9ub2thaSAuYWNlX21hcmtlci1sYXllciAuYWNlX3NlbGVjdGlvbiB7XFxcbmJhY2tncm91bmQ6ICM0OTQ4M0VcXFxufVxcXG4uYWNlLW1vbm9rYWkuYWNlX211bHRpc2VsZWN0IC5hY2Vfc2VsZWN0aW9uLmFjZV9zdGFydCB7XFxcbmJveC1zaGFkb3c6IDAgMCAzcHggMHB4ICMyNzI4MjI7XFxcbn1cXFxuLmFjZS1tb25va2FpIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc3RlcCB7XFxcbmJhY2tncm91bmQ6IHJnYigxMDIsIDgyLCAwKVxcXG59XFxcbi5hY2UtbW9ub2thaSAuYWNlX21hcmtlci1sYXllciAuYWNlX2JyYWNrZXQge1xcXG5tYXJnaW46IC0xcHggMCAwIC0xcHg7XFxcbmJvcmRlcjogMXB4IHNvbGlkICM0OTQ4M0VcXFxufVxcXG4uYWNlLW1vbm9rYWkgLmFjZV9tYXJrZXItbGF5ZXIgLmFjZV9hY3RpdmUtbGluZSB7XFxcbmJhY2tncm91bmQ6ICMyMDIwMjBcXFxufVxcXG4uYWNlLW1vbm9rYWkgLmFjZV9ndXR0ZXItYWN0aXZlLWxpbmUge1xcXG5iYWNrZ3JvdW5kLWNvbG9yOiAjMjcyNzI3XFxcbn1cXFxuLmFjZS1tb25va2FpIC5hY2VfbWFya2VyLWxheWVyIC5hY2Vfc2VsZWN0ZWQtd29yZCB7XFxcbmJvcmRlcjogMXB4IHNvbGlkICM0OTQ4M0VcXFxufVxcXG4uYWNlLW1vbm9rYWkgLmFjZV9pbnZpc2libGUge1xcXG5jb2xvcjogIzUyNTI0ZFxcXG59XFxcbi5hY2UtbW9ub2thaSAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfdGFnLFxcXG4uYWNlLW1vbm9rYWkgLmFjZV9rZXl3b3JkLFxcXG4uYWNlLW1vbm9rYWkgLmFjZV9tZXRhLmFjZV90YWcsXFxcbi5hY2UtbW9ub2thaSAuYWNlX3N0b3JhZ2Uge1xcXG5jb2xvcjogI0Y5MjY3MlxcXG59XFxcbi5hY2UtbW9ub2thaSAuYWNlX3B1bmN0dWF0aW9uLFxcXG4uYWNlLW1vbm9rYWkgLmFjZV9wdW5jdHVhdGlvbi5hY2VfdGFnIHtcXFxuY29sb3I6ICNmZmZcXFxufVxcXG4uYWNlLW1vbm9rYWkgLmFjZV9jb25zdGFudC5hY2VfY2hhcmFjdGVyLFxcXG4uYWNlLW1vbm9rYWkgLmFjZV9jb25zdGFudC5hY2VfbGFuZ3VhZ2UsXFxcbi5hY2UtbW9ub2thaSAuYWNlX2NvbnN0YW50LmFjZV9udW1lcmljLFxcXG4uYWNlLW1vbm9rYWkgLmFjZV9jb25zdGFudC5hY2Vfb3RoZXIge1xcXG5jb2xvcjogI0FFODFGRlxcXG59XFxcbi5hY2UtbW9ub2thaSAuYWNlX2ludmFsaWQge1xcXG5jb2xvcjogI0Y4RjhGMDtcXFxuYmFja2dyb3VuZC1jb2xvcjogI0Y5MjY3MlxcXG59XFxcbi5hY2UtbW9ub2thaSAuYWNlX2ludmFsaWQuYWNlX2RlcHJlY2F0ZWQge1xcXG5jb2xvcjogI0Y4RjhGMDtcXFxuYmFja2dyb3VuZC1jb2xvcjogI0FFODFGRlxcXG59XFxcbi5hY2UtbW9ub2thaSAuYWNlX3N1cHBvcnQuYWNlX2NvbnN0YW50LFxcXG4uYWNlLW1vbm9rYWkgLmFjZV9zdXBwb3J0LmFjZV9mdW5jdGlvbiB7XFxcbmNvbG9yOiAjNjZEOUVGXFxcbn1cXFxuLmFjZS1tb25va2FpIC5hY2VfZm9sZCB7XFxcbmJhY2tncm91bmQtY29sb3I6ICNBNkUyMkU7XFxcbmJvcmRlci1jb2xvcjogI0Y4RjhGMlxcXG59XFxcbi5hY2UtbW9ub2thaSAuYWNlX3N0b3JhZ2UuYWNlX3R5cGUsXFxcbi5hY2UtbW9ub2thaSAuYWNlX3N1cHBvcnQuYWNlX2NsYXNzLFxcXG4uYWNlLW1vbm9rYWkgLmFjZV9zdXBwb3J0LmFjZV90eXBlIHtcXFxuZm9udC1zdHlsZTogaXRhbGljO1xcXG5jb2xvcjogIzY2RDlFRlxcXG59XFxcbi5hY2UtbW9ub2thaSAuYWNlX2VudGl0eS5hY2VfbmFtZS5hY2VfZnVuY3Rpb24sXFxcbi5hY2UtbW9ub2thaSAuYWNlX2VudGl0eS5hY2Vfb3RoZXIsXFxcbi5hY2UtbW9ub2thaSAuYWNlX2VudGl0eS5hY2Vfb3RoZXIuYWNlX2F0dHJpYnV0ZS1uYW1lLFxcXG4uYWNlLW1vbm9rYWkgLmFjZV92YXJpYWJsZSB7XFxcbmNvbG9yOiAjQTZFMjJFXFxcbn1cXFxuLmFjZS1tb25va2FpIC5hY2VfdmFyaWFibGUuYWNlX3BhcmFtZXRlciB7XFxcbmZvbnQtc3R5bGU6IGl0YWxpYztcXFxuY29sb3I6ICNGRDk3MUZcXFxufVxcXG4uYWNlLW1vbm9rYWkgLmFjZV9zdHJpbmcge1xcXG5jb2xvcjogI0U2REI3NFxcXG59XFxcbi5hY2UtbW9ub2thaSAuYWNlX2NvbW1lbnQge1xcXG5jb2xvcjogIzc1NzE1RVxcXG59XFxcbi5hY2UtbW9ub2thaSAuYWNlX2luZGVudC1ndWlkZSB7XFxcbmJhY2tncm91bmQ6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFFQUFBQUNDQVlBQUFDWmdiWW5BQUFBRWtsRVFWUUltV1BRMEZEMFpYQnpkL3dQQUFqVkFveGVTZ05lQUFBQUFFbEZUa1N1UW1DQykgcmlnaHQgcmVwZWF0LXlcXFxufVwiO1xuXG52YXIgZG9tID0gYWNlcXVpcmUoXCIuLi9saWIvZG9tXCIpO1xuZG9tLmltcG9ydENzc1N0cmluZyhleHBvcnRzLmNzc1RleHQsIGV4cG9ydHMuY3NzQ2xhc3MpO1xufSk7XG4iLCIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxodHRwczovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBiYXNlNjQgPSByZXF1aXJlKCdiYXNlNjQtanMnKVxuY29uc3QgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxuY29uc3QgY3VzdG9tSW5zcGVjdFN5bWJvbCA9XG4gICh0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBTeW1ib2xbJ2ZvciddID09PSAnZnVuY3Rpb24nKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuICAgID8gU3ltYm9sWydmb3InXSgnbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGRvdC1ub3RhdGlvblxuICAgIDogbnVsbFxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbmNvbnN0IEtfTUFYX0xFTkdUSCA9IDB4N2ZmZmZmZmZcbmV4cG9ydHMua01heExlbmd0aCA9IEtfTUFYX0xFTkdUSFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBQcmludCB3YXJuaW5nIGFuZCByZWNvbW1lbmQgdXNpbmcgYGJ1ZmZlcmAgdjQueCB3aGljaCBoYXMgYW4gT2JqZWN0XG4gKiAgICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBXZSByZXBvcnQgdGhhdCB0aGUgYnJvd3NlciBkb2VzIG5vdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBpZiB0aGUgYXJlIG5vdCBzdWJjbGFzc2FibGVcbiAqIHVzaW5nIF9fcHJvdG9fXy4gRmlyZWZveCA0LTI5IGxhY2tzIHN1cHBvcnQgZm9yIGFkZGluZyBuZXcgcHJvcGVydGllcyB0byBgVWludDhBcnJheWBcbiAqIChTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOCkuIElFIDEwIGxhY2tzIHN1cHBvcnRcbiAqIGZvciBfX3Byb3RvX18gYW5kIGhhcyBhIGJ1Z2d5IHR5cGVkIGFycmF5IGltcGxlbWVudGF0aW9uLlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiZcbiAgICB0eXBlb2YgY29uc29sZS5lcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICBjb25zb2xlLmVycm9yKFxuICAgICdUaGlzIGJyb3dzZXIgbGFja3MgdHlwZWQgYXJyYXkgKFVpbnQ4QXJyYXkpIHN1cHBvcnQgd2hpY2ggaXMgcmVxdWlyZWQgYnkgJyArXG4gICAgJ2BidWZmZXJgIHY1LnguIFVzZSBgYnVmZmVyYCB2NC54IGlmIHlvdSByZXF1aXJlIG9sZCBicm93c2VyIHN1cHBvcnQuJ1xuICApXG59XG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgLy8gQ2FuIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkP1xuICB0cnkge1xuICAgIGNvbnN0IGFyciA9IG5ldyBVaW50OEFycmF5KDEpXG4gICAgY29uc3QgcHJvdG8gPSB7IGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfSB9XG4gICAgT2JqZWN0LnNldFByb3RvdHlwZU9mKHByb3RvLCBVaW50OEFycmF5LnByb3RvdHlwZSlcbiAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYXJyLCBwcm90bylcbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MlxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KEJ1ZmZlci5wcm90b3R5cGUsICdwYXJlbnQnLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gKCkge1xuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKHRoaXMpKSByZXR1cm4gdW5kZWZpbmVkXG4gICAgcmV0dXJuIHRoaXMuYnVmZmVyXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIucHJvdG90eXBlLCAnb2Zmc2V0Jywge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0aGlzKSkgcmV0dXJuIHVuZGVmaW5lZFxuICAgIHJldHVybiB0aGlzLmJ5dGVPZmZzZXRcbiAgfVxufSlcblxuZnVuY3Rpb24gY3JlYXRlQnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKGxlbmd0aCA+IEtfTUFYX0xFTkdUSCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInICsgbGVuZ3RoICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpXG4gIH1cbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgY29uc3QgYnVmID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYnVmLCBCdWZmZXIucHJvdG90eXBlKVxuICByZXR1cm4gYnVmXG59XG5cbi8qKlxuICogVGhlIEJ1ZmZlciBjb25zdHJ1Y3RvciByZXR1cm5zIGluc3RhbmNlcyBvZiBgVWludDhBcnJheWAgdGhhdCBoYXZlIHRoZWlyXG4gKiBwcm90b3R5cGUgY2hhbmdlZCB0byBgQnVmZmVyLnByb3RvdHlwZWAuIEZ1cnRoZXJtb3JlLCBgQnVmZmVyYCBpcyBhIHN1YmNsYXNzIG9mXG4gKiBgVWludDhBcnJheWAsIHNvIHRoZSByZXR1cm5lZCBpbnN0YW5jZXMgd2lsbCBoYXZlIGFsbCB0aGUgbm9kZSBgQnVmZmVyYCBtZXRob2RzXG4gKiBhbmQgdGhlIGBVaW50OEFycmF5YCBtZXRob2RzLiBTcXVhcmUgYnJhY2tldCBub3RhdGlvbiB3b3JrcyBhcyBleHBlY3RlZCAtLSBpdFxuICogcmV0dXJucyBhIHNpbmdsZSBvY3RldC5cbiAqXG4gKiBUaGUgYFVpbnQ4QXJyYXlgIHByb3RvdHlwZSByZW1haW5zIHVubW9kaWZpZWQuXG4gKi9cblxuZnVuY3Rpb24gQnVmZmVyIChhcmcsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBzdHJpbmcuIFJlY2VpdmVkIHR5cGUgbnVtYmVyJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYWxsb2NVbnNhZmUoYXJnKVxuICB9XG4gIHJldHVybiBmcm9tKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxuZnVuY3Rpb24gZnJvbSAodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyh2YWx1ZSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5Vmlldyh2YWx1ZSlcbiAgfVxuXG4gIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCAnICtcbiAgICAgICdvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB2YWx1ZSlcbiAgICApXG4gIH1cblxuICBpZiAoaXNJbnN0YW5jZSh2YWx1ZSwgQXJyYXlCdWZmZXIpIHx8XG4gICAgICAodmFsdWUgJiYgaXNJbnN0YW5jZSh2YWx1ZS5idWZmZXIsIEFycmF5QnVmZmVyKSkpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgKGlzSW5zdGFuY2UodmFsdWUsIFNoYXJlZEFycmF5QnVmZmVyKSB8fFxuICAgICAgKHZhbHVlICYmIGlzSW5zdGFuY2UodmFsdWUuYnVmZmVyLCBTaGFyZWRBcnJheUJ1ZmZlcikpKSkge1xuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICdUaGUgXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlIG51bWJlcidcbiAgICApXG4gIH1cblxuICBjb25zdCB2YWx1ZU9mID0gdmFsdWUudmFsdWVPZiAmJiB2YWx1ZS52YWx1ZU9mKClcbiAgaWYgKHZhbHVlT2YgIT0gbnVsbCAmJiB2YWx1ZU9mICE9PSB2YWx1ZSkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZU9mLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBjb25zdCBiID0gZnJvbU9iamVjdCh2YWx1ZSlcbiAgaWYgKGIpIHJldHVybiBiXG5cbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1ByaW1pdGl2ZSAhPSBudWxsICYmXG4gICAgICB0eXBlb2YgdmFsdWVbU3ltYm9sLnRvUHJpbWl0aXZlXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh2YWx1ZVtTeW1ib2wudG9QcmltaXRpdmVdKCdzdHJpbmcnKSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAnVGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgJyArXG4gICAgJ29yIEFycmF5LWxpa2UgT2JqZWN0LiBSZWNlaXZlZCB0eXBlICcgKyAodHlwZW9mIHZhbHVlKVxuICApXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuLy8gTm90ZTogQ2hhbmdlIHByb3RvdHlwZSAqYWZ0ZXIqIEJ1ZmZlci5mcm9tIGlzIGRlZmluZWQgdG8gd29ya2Fyb3VuZCBDaHJvbWUgYnVnOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC8xNDhcbk9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIucHJvdG90eXBlLCBVaW50OEFycmF5LnByb3RvdHlwZSlcbk9iamVjdC5zZXRQcm90b3R5cGVPZihCdWZmZXIsIFVpbnQ4QXJyYXkpXG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyBzaXplICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpXG4gIH1cbn1cblxuZnVuY3Rpb24gYWxsb2MgKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgaWYgKHNpemUgPD0gMCkge1xuICAgIHJldHVybiBjcmVhdGVCdWZmZXIoc2l6ZSlcbiAgfVxuICBpZiAoZmlsbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gT25seSBwYXkgYXR0ZW50aW9uIHRvIGVuY29kaW5nIGlmIGl0J3MgYSBzdHJpbmcuIFRoaXNcbiAgICAvLyBwcmV2ZW50cyBhY2NpZGVudGFsbHkgc2VuZGluZyBpbiBhIG51bWJlciB0aGF0IHdvdWxkXG4gICAgLy8gYmUgaW50ZXJwcmV0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcihzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2Moc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlIChzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcihzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbn1cblxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIEJ1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZSA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuLyoqXG4gKiBFcXVpdmFsZW50IHRvIFNsb3dCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyA9IGZ1bmN0aW9uIChzaXplKSB7XG4gIHJldHVybiBhbGxvY1Vuc2FmZShzaXplKVxufVxuXG5mdW5jdGlvbiBmcm9tU3RyaW5nIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmICh0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnIHx8IGVuY29kaW5nID09PSAnJykge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgfVxuXG4gIGNvbnN0IGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIGxldCBidWYgPSBjcmVhdGVCdWZmZXIobGVuZ3RoKVxuXG4gIGNvbnN0IGFjdHVhbCA9IGJ1Zi53cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuXG4gIGlmIChhY3R1YWwgIT09IGxlbmd0aCkge1xuICAgIC8vIFdyaXRpbmcgYSBoZXggc3RyaW5nLCBmb3IgZXhhbXBsZSwgdGhhdCBjb250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMgd2lsbFxuICAgIC8vIGNhdXNlIGV2ZXJ5dGhpbmcgYWZ0ZXIgdGhlIGZpcnN0IGludmFsaWQgY2hhcmFjdGVyIHRvIGJlIGlnbm9yZWQuIChlLmcuXG4gICAgLy8gJ2FieHhjZCcgd2lsbCBiZSB0cmVhdGVkIGFzICdhYicpXG4gICAgYnVmID0gYnVmLnNsaWNlKDAsIGFjdHVhbClcbiAgfVxuXG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5TGlrZSAoYXJyYXkpIHtcbiAgY29uc3QgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIGNvbnN0IGJ1ZiA9IGNyZWF0ZUJ1ZmZlcihsZW5ndGgpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICBidWZbaV0gPSBhcnJheVtpXSAmIDI1NVxuICB9XG4gIHJldHVybiBidWZcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5VmlldyAoYXJyYXlWaWV3KSB7XG4gIGlmIChpc0luc3RhbmNlKGFycmF5VmlldywgVWludDhBcnJheSkpIHtcbiAgICBjb25zdCBjb3B5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXlWaWV3KVxuICAgIHJldHVybiBmcm9tQXJyYXlCdWZmZXIoY29weS5idWZmZXIsIGNvcHkuYnl0ZU9mZnNldCwgY29weS5ieXRlTGVuZ3RoKVxuICB9XG4gIHJldHVybiBmcm9tQXJyYXlMaWtlKGFycmF5Vmlldylcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyIChhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcIm9mZnNldFwiIGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wibGVuZ3RoXCIgaXMgb3V0c2lkZSBvZiBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGxldCBidWZcbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGJ1ZiA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQpXG4gIH0gZWxzZSB7XG4gICAgYnVmID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihidWYsIEJ1ZmZlci5wcm90b3R5cGUpXG5cbiAgcmV0dXJuIGJ1ZlxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0IChvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgY29uc3QgbGVuID0gY2hlY2tlZChvYmoubGVuZ3RoKSB8IDBcbiAgICBjb25zdCBidWYgPSBjcmVhdGVCdWZmZXIobGVuKVxuXG4gICAgaWYgKGJ1Zi5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBidWZcbiAgICB9XG5cbiAgICBvYmouY29weShidWYsIDAsIDAsIGxlbilcbiAgICByZXR1cm4gYnVmXG4gIH1cblxuICBpZiAob2JqLmxlbmd0aCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBudW1iZXJJc05hTihvYmoubGVuZ3RoKSkge1xuICAgICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcigwKVxuICAgIH1cbiAgICByZXR1cm4gZnJvbUFycmF5TGlrZShvYmopXG4gIH1cblxuICBpZiAob2JqLnR5cGUgPT09ICdCdWZmZXInICYmIEFycmF5LmlzQXJyYXkob2JqLmRhdGEpKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUxpa2Uob2JqLmRhdGEpXG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IEtfTUFYX0xFTkdUSGAgaGVyZSBiZWNhdXNlIHRoYXQgZmFpbHMgd2hlblxuICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLilcbiAgaWYgKGxlbmd0aCA+PSBLX01BWF9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsgS19NQVhfTEVOR1RILnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuICB9XG4gIHJldHVybiBsZW5ndGggfCAwXG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICBsZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYygrbGVuZ3RoKVxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyID09PSB0cnVlICYmXG4gICAgYiAhPT0gQnVmZmVyLnByb3RvdHlwZSAvLyBzbyBCdWZmZXIuaXNCdWZmZXIoQnVmZmVyLnByb3RvdHlwZSkgd2lsbCBiZSBmYWxzZVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKGlzSW5zdGFuY2UoYSwgVWludDhBcnJheSkpIGEgPSBCdWZmZXIuZnJvbShhLCBhLm9mZnNldCwgYS5ieXRlTGVuZ3RoKVxuICBpZiAoaXNJbnN0YW5jZShiLCBVaW50OEFycmF5KSkgYiA9IEJ1ZmZlci5mcm9tKGIsIGIub2Zmc2V0LCBiLmJ5dGVMZW5ndGgpXG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcImJ1ZjFcIiwgXCJidWYyXCIgYXJndW1lbnRzIG11c3QgYmUgb25lIG9mIHR5cGUgQnVmZmVyIG9yIFVpbnQ4QXJyYXknXG4gICAgKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgbGV0IHggPSBhLmxlbmd0aFxuICBsZXQgeSA9IGIubGVuZ3RoXG5cbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghQXJyYXkuaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICBsZXQgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShsZW5ndGgpXG4gIGxldCBwb3MgPSAwXG4gIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgbGV0IGJ1ZiA9IGxpc3RbaV1cbiAgICBpZiAoaXNJbnN0YW5jZShidWYsIFVpbnQ4QXJyYXkpKSB7XG4gICAgICBpZiAocG9zICsgYnVmLmxlbmd0aCA+IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkgYnVmID0gQnVmZmVyLmZyb20oYnVmKVxuICAgICAgICBidWYuY29weShidWZmZXIsIHBvcylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgICAgIGJ1ZmZlcixcbiAgICAgICAgICBidWYsXG4gICAgICAgICAgcG9zXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgfVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IGlzSW5zdGFuY2Uoc3RyaW5nLCBBcnJheUJ1ZmZlcikpIHtcbiAgICByZXR1cm4gc3RyaW5nLmJ5dGVMZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIHN0cmluZyAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgJ1RoZSBcInN0cmluZ1wiIGFyZ3VtZW50IG11c3QgYmUgb25lIG9mIHR5cGUgc3RyaW5nLCBCdWZmZXIsIG9yIEFycmF5QnVmZmVyLiAnICtcbiAgICAgICdSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2Ygc3RyaW5nXG4gICAgKVxuICB9XG5cbiAgY29uc3QgbGVuID0gc3RyaW5nLmxlbmd0aFxuICBjb25zdCBtdXN0TWF0Y2ggPSAoYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdID09PSB0cnVlKVxuICBpZiAoIW11c3RNYXRjaCAmJiBsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIGxldCBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHtcbiAgICAgICAgICByZXR1cm4gbXVzdE1hdGNoID8gLTEgOiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICB9XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICBsZXQgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcmNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIChhbmQgdGhlIGBpcy1idWZmZXJgIG5wbSBwYWNrYWdlKVxuLy8gdG8gZGV0ZWN0IGEgQnVmZmVyIGluc3RhbmNlLiBJdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgYGluc3RhbmNlb2YgQnVmZmVyYFxuLy8gcmVsaWFibHkgaW4gYSBicm93c2VyaWZ5IGNvbnRleHQgYmVjYXVzZSB0aGVyZSBjb3VsZCBiZSBtdWx0aXBsZSBkaWZmZXJlbnRcbi8vIGNvcGllcyBvZiB0aGUgJ2J1ZmZlcicgcGFja2FnZSBpbiB1c2UuIFRoaXMgbWV0aG9kIHdvcmtzIGV2ZW4gZm9yIEJ1ZmZlclxuLy8gaW5zdGFuY2VzIHRoYXQgd2VyZSBjcmVhdGVkIGZyb20gYW5vdGhlciBjb3B5IG9mIHRoZSBgYnVmZmVyYCBwYWNrYWdlLlxuLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2J1ZmZlci9pc3N1ZXMvMTU0XG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICBjb25zdCBpID0gYltuXVxuICBiW25dID0gYlttXVxuICBiW21dID0gaVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAxNiA9IGZ1bmN0aW9uIHN3YXAxNiAoKSB7XG4gIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJylcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMiAoKSB7XG4gIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA4ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzJylcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSArPSA4KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgNylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgNilcbiAgICBzd2FwKHRoaXMsIGkgKyAyLCBpICsgNSlcbiAgICBzd2FwKHRoaXMsIGkgKyAzLCBpICsgNClcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcgKCkge1xuICBjb25zdCBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b0xvY2FsZVN0cmluZyA9IEJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmdcblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICBsZXQgc3RyID0gJydcbiAgY29uc3QgbWF4ID0gZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFU1xuICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLnJlcGxhY2UoLyguezJ9KS9nLCAnJDEgJykudHJpbSgpXG4gIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgcmV0dXJuICc8QnVmZmVyICcgKyBzdHIgKyAnPidcbn1cbmlmIChjdXN0b21JbnNwZWN0U3ltYm9sKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGVbY3VzdG9tSW5zcGVjdFN5bWJvbF0gPSBCdWZmZXIucHJvdG90eXBlLmluc3BlY3Rcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5jb21wYXJlID0gZnVuY3Rpb24gY29tcGFyZSAodGFyZ2V0LCBzdGFydCwgZW5kLCB0aGlzU3RhcnQsIHRoaXNFbmQpIHtcbiAgaWYgKGlzSW5zdGFuY2UodGFyZ2V0LCBVaW50OEFycmF5KSkge1xuICAgIHRhcmdldCA9IEJ1ZmZlci5mcm9tKHRhcmdldCwgdGFyZ2V0Lm9mZnNldCwgdGFyZ2V0LmJ5dGVMZW5ndGgpXG4gIH1cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAnVGhlIFwidGFyZ2V0XCIgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBCdWZmZXIgb3IgVWludDhBcnJheS4gJyArXG4gICAgICAnUmVjZWl2ZWQgdHlwZSAnICsgKHR5cGVvZiB0YXJnZXQpXG4gICAgKVxuICB9XG5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSB0YXJnZXQgPyB0YXJnZXQubGVuZ3RoIDogMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNTdGFydCA9IDBcbiAgfVxuICBpZiAodGhpc0VuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc0VuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoc3RhcnQgPCAwIHx8IGVuZCA+IHRhcmdldC5sZW5ndGggfHwgdGhpc1N0YXJ0IDwgMCB8fCB0aGlzRW5kID4gdGhpcy5sZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCAmJiBzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMFxuICB9XG4gIGlmICh0aGlzU3RhcnQgPj0gdGhpc0VuZCkge1xuICAgIHJldHVybiAtMVxuICB9XG4gIGlmIChzdGFydCA+PSBlbmQpIHtcbiAgICByZXR1cm4gMVxuICB9XG5cbiAgc3RhcnQgPj4+PSAwXG4gIGVuZCA+Pj49IDBcbiAgdGhpc1N0YXJ0ID4+Pj0gMFxuICB0aGlzRW5kID4+Pj0gMFxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQpIHJldHVybiAwXG5cbiAgbGV0IHggPSB0aGlzRW5kIC0gdGhpc1N0YXJ0XG4gIGxldCB5ID0gZW5kIC0gc3RhcnRcbiAgY29uc3QgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICBjb25zdCB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKVxuICBjb25zdCB0YXJnZXRDb3B5ID0gdGFyZ2V0LnNsaWNlKHN0YXJ0LCBlbmQpXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47ICsraSkge1xuICAgIGlmICh0aGlzQ29weVtpXSAhPT0gdGFyZ2V0Q29weVtpXSkge1xuICAgICAgeCA9IHRoaXNDb3B5W2ldXG4gICAgICB5ID0gdGFyZ2V0Q29weVtpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbi8vIEZpbmRzIGVpdGhlciB0aGUgZmlyc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0ID49IGBieXRlT2Zmc2V0YCxcbi8vIE9SIHRoZSBsYXN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA8PSBgYnl0ZU9mZnNldGAuXG4vL1xuLy8gQXJndW1lbnRzOlxuLy8gLSBidWZmZXIgLSBhIEJ1ZmZlciB0byBzZWFyY2hcbi8vIC0gdmFsIC0gYSBzdHJpbmcsIEJ1ZmZlciwgb3IgbnVtYmVyXG4vLyAtIGJ5dGVPZmZzZXQgLSBhbiBpbmRleCBpbnRvIGBidWZmZXJgOyB3aWxsIGJlIGNsYW1wZWQgdG8gYW4gaW50MzJcbi8vIC0gZW5jb2RpbmcgLSBhbiBvcHRpb25hbCBlbmNvZGluZywgcmVsZXZhbnQgaXMgdmFsIGlzIGEgc3RyaW5nXG4vLyAtIGRpciAtIHRydWUgZm9yIGluZGV4T2YsIGZhbHNlIGZvciBsYXN0SW5kZXhPZlxuZnVuY3Rpb24gYmlkaXJlY3Rpb25hbEluZGV4T2YgKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIC8vIEVtcHR5IGJ1ZmZlciBtZWFucyBubyBtYXRjaFxuICBpZiAoYnVmZmVyLmxlbmd0aCA9PT0gMCkgcmV0dXJuIC0xXG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXRcbiAgaWYgKHR5cGVvZiBieXRlT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gYnl0ZU9mZnNldFxuICAgIGJ5dGVPZmZzZXQgPSAwXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA+IDB4N2ZmZmZmZmYpIHtcbiAgICBieXRlT2Zmc2V0ID0gMHg3ZmZmZmZmZlxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAtMHg4MDAwMDAwMCkge1xuICAgIGJ5dGVPZmZzZXQgPSAtMHg4MDAwMDAwMFxuICB9XG4gIGJ5dGVPZmZzZXQgPSArYnl0ZU9mZnNldCAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAobnVtYmVySXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmICh0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbdmFsXSwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfVxuXG4gIHRocm93IG5ldyBUeXBlRXJyb3IoJ3ZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlcicpXG59XG5cbmZ1bmN0aW9uIGFycmF5SW5kZXhPZiAoYXJyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgbGV0IGluZGV4U2l6ZSA9IDFcbiAgbGV0IGFyckxlbmd0aCA9IGFyci5sZW5ndGhcbiAgbGV0IHZhbExlbmd0aCA9IHZhbC5sZW5ndGhcblxuICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gU3RyaW5nKGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGVuY29kaW5nID09PSAndWNzMicgfHwgZW5jb2RpbmcgPT09ICd1Y3MtMicgfHxcbiAgICAgICAgZW5jb2RpbmcgPT09ICd1dGYxNmxlJyB8fCBlbmNvZGluZyA9PT0gJ3V0Zi0xNmxlJykge1xuICAgICAgaWYgKGFyci5sZW5ndGggPCAyIHx8IHZhbC5sZW5ndGggPCAyKSB7XG4gICAgICAgIHJldHVybiAtMVxuICAgICAgfVxuICAgICAgaW5kZXhTaXplID0gMlxuICAgICAgYXJyTGVuZ3RoIC89IDJcbiAgICAgIHZhbExlbmd0aCAvPSAyXG4gICAgICBieXRlT2Zmc2V0IC89IDJcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkIChidWYsIGkpIHtcbiAgICBpZiAoaW5kZXhTaXplID09PSAxKSB7XG4gICAgICByZXR1cm4gYnVmW2ldXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBidWYucmVhZFVJbnQxNkJFKGkgKiBpbmRleFNpemUpXG4gICAgfVxuICB9XG5cbiAgbGV0IGlcbiAgaWYgKGRpcikge1xuICAgIGxldCBmb3VuZEluZGV4ID0gLTFcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpIDwgYXJyTGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmIChyZWFkKGFyciwgaSkgPT09IHJlYWQodmFsLCBmb3VuZEluZGV4ID09PSAtMSA/IDAgOiBpIC0gZm91bmRJbmRleCkpIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggPT09IC0xKSBmb3VuZEluZGV4ID0gaVxuICAgICAgICBpZiAoaSAtIGZvdW5kSW5kZXggKyAxID09PSB2YWxMZW5ndGgpIHJldHVybiBmb3VuZEluZGV4ICogaW5kZXhTaXplXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoZm91bmRJbmRleCAhPT0gLTEpIGkgLT0gaSAtIGZvdW5kSW5kZXhcbiAgICAgICAgZm91bmRJbmRleCA9IC0xXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChieXRlT2Zmc2V0ICsgdmFsTGVuZ3RoID4gYXJyTGVuZ3RoKSBieXRlT2Zmc2V0ID0gYXJyTGVuZ3RoIC0gdmFsTGVuZ3RoXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGxldCBmb3VuZCA9IHRydWVcbiAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgdmFsTGVuZ3RoOyBqKyspIHtcbiAgICAgICAgaWYgKHJlYWQoYXJyLCBpICsgaikgIT09IHJlYWQodmFsLCBqKSkge1xuICAgICAgICAgIGZvdW5kID0gZmFsc2VcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZm91bmQpIHJldHVybiBpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gdGhpcy5pbmRleE9mKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpICE9PSAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluZGV4T2YgPSBmdW5jdGlvbiBpbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCB0cnVlKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmxhc3RJbmRleE9mID0gZnVuY3Rpb24gbGFzdEluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGZhbHNlKVxufVxuXG5mdW5jdGlvbiBoZXhXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIG9mZnNldCA9IE51bWJlcihvZmZzZXQpIHx8IDBcbiAgY29uc3QgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuXG4gIGlmIChsZW5ndGggPiBzdHJMZW4gLyAyKSB7XG4gICAgbGVuZ3RoID0gc3RyTGVuIC8gMlxuICB9XG4gIGxldCBpXG4gIGZvciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAobnVtYmVySXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGJhc2U2NFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYmFzZTY0VG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiB1Y3MyV3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGYxNmxlVG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gd3JpdGUgKHN0cmluZywgb2Zmc2V0LCBsZW5ndGgsIGVuY29kaW5nKSB7XG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcpXG4gIGlmIChvZmZzZXQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIGVuY29kaW5nKVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBvZmZzZXRcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgb2Zmc2V0WywgbGVuZ3RoXVssIGVuY29kaW5nXSlcbiAgfSBlbHNlIGlmIChpc0Zpbml0ZShvZmZzZXQpKSB7XG4gICAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCA+Pj4gMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0J1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkJ1xuICAgIClcbiAgfVxuXG4gIGNvbnN0IHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgbGV0IGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGFzY2lpV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICBjb25zdCByZXMgPSBbXVxuXG4gIGxldCBpID0gc3RhcnRcbiAgd2hpbGUgKGkgPCBlbmQpIHtcbiAgICBjb25zdCBmaXJzdEJ5dGUgPSBidWZbaV1cbiAgICBsZXQgY29kZVBvaW50ID0gbnVsbFxuICAgIGxldCBieXRlc1BlclNlcXVlbmNlID0gKGZpcnN0Qnl0ZSA+IDB4RUYpXG4gICAgICA/IDRcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4REYpXG4gICAgICAgICAgPyAzXG4gICAgICAgICAgOiAoZmlyc3RCeXRlID4gMHhCRilcbiAgICAgICAgICAgICAgPyAyXG4gICAgICAgICAgICAgIDogMVxuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgbGV0IHNlY29uZEJ5dGUsIHRoaXJkQnl0ZSwgZm91cnRoQnl0ZSwgdGVtcENvZGVQb2ludFxuXG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAweDgwKSB7XG4gICAgICAgICAgICBjb2RlUG9pbnQgPSBmaXJzdEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHgxRikgPDwgMHg2IHwgKHNlY29uZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKHRoaXJkQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0ZGICYmICh0ZW1wQ29kZVBvaW50IDwgMHhEODAwIHx8IHRlbXBDb2RlUG9pbnQgPiAweERGRkYpKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKGZvdXJ0aEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweEZGRkYgJiYgdGVtcENvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgLy8gd2UgZGlkIG5vdCBnZW5lcmF0ZSBhIHZhbGlkIGNvZGVQb2ludCBzbyBpbnNlcnQgYVxuICAgICAgLy8gcmVwbGFjZW1lbnQgY2hhciAoVStGRkZEKSBhbmQgYWR2YW5jZSBvbmx5IDEgYnl0ZVxuICAgICAgY29kZVBvaW50ID0gMHhGRkZEXG4gICAgICBieXRlc1BlclNlcXVlbmNlID0gMVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMClcbiAgICAgIGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGXG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KVxuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShyZXMpXG59XG5cbi8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxuY29uc3QgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIGNvbnN0IGxlbiA9IGNvZGVQb2ludHMubGVuZ3RoXG4gIGlmIChsZW4gPD0gTUFYX0FSR1VNRU5UU19MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsIGNvZGVQb2ludHMpIC8vIGF2b2lkIGV4dHJhIHNsaWNlKClcbiAgfVxuXG4gIC8vIERlY29kZSBpbiBjaHVua3MgdG8gYXZvaWQgXCJjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWRcIi5cbiAgbGV0IHJlcyA9ICcnXG4gIGxldCBpID0gMFxuICB3aGlsZSAoaSA8IGxlbikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFxuICAgICAgU3RyaW5nLFxuICAgICAgY29kZVBvaW50cy5zbGljZShpLCBpICs9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKVxuICAgIClcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbmZ1bmN0aW9uIGFzY2lpU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBsZXQgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAobGV0IGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldICYgMHg3RilcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGxhdGluMVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgbGV0IHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGhleFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgY29uc3QgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIGxldCBvdXQgPSAnJ1xuICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIG91dCArPSBoZXhTbGljZUxvb2t1cFRhYmxlW2J1ZltpXV1cbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGNvbnN0IGJ5dGVzID0gYnVmLnNsaWNlKHN0YXJ0LCBlbmQpXG4gIGxldCByZXMgPSAnJ1xuICAvLyBJZiBieXRlcy5sZW5ndGggaXMgb2RkLCB0aGUgbGFzdCA4IGJpdHMgbXVzdCBiZSBpZ25vcmVkIChzYW1lIGFzIG5vZGUuanMpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoIC0gMTsgaSArPSAyKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0gKyAoYnl0ZXNbaSArIDFdICogMjU2KSlcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIGNvbnN0IG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgLy8gUmV0dXJuIGFuIGF1Z21lbnRlZCBgVWludDhBcnJheWAgaW5zdGFuY2VcbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mKG5ld0J1ZiwgQnVmZmVyLnByb3RvdHlwZSlcblxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50TEUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICBsZXQgdmFsID0gdGhpc1tvZmZzZXRdXG4gIGxldCBtdWwgPSAxXG4gIGxldCBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnRCRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcbiAgfVxuXG4gIGxldCB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF1cbiAgbGV0IG11bCA9IDFcbiAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50OCA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MTZMRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVpbnQxNkJFID1cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVWludDMyTEUgPVxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICgodGhpc1tvZmZzZXRdKSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikpICtcbiAgICAgICh0aGlzW29mZnNldCArIDNdICogMHgxMDAwMDAwKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVaW50MzJCRSA9XG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRCaWdVSW50NjRMRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnVUludDY0TEUgKG9mZnNldCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAnb2Zmc2V0JylcbiAgY29uc3QgZmlyc3QgPSB0aGlzW29mZnNldF1cbiAgY29uc3QgbGFzdCA9IHRoaXNbb2Zmc2V0ICsgN11cbiAgaWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgbGFzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYm91bmRzRXJyb3Iob2Zmc2V0LCB0aGlzLmxlbmd0aCAtIDgpXG4gIH1cblxuICBjb25zdCBsbyA9IGZpcnN0ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMjRcblxuICBjb25zdCBoaSA9IHRoaXNbKytvZmZzZXRdICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICBsYXN0ICogMiAqKiAyNFxuXG4gIHJldHVybiBCaWdJbnQobG8pICsgKEJpZ0ludChoaSkgPDwgQmlnSW50KDMyKSlcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEJpZ1VJbnQ2NEJFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHJlYWRCaWdVSW50NjRCRSAob2Zmc2V0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICdvZmZzZXQnKVxuICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XVxuICBjb25zdCBsYXN0ID0gdGhpc1tvZmZzZXQgKyA3XVxuICBpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCB8fCBsYXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOClcbiAgfVxuXG4gIGNvbnN0IGhpID0gZmlyc3QgKiAyICoqIDI0ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICB0aGlzWysrb2Zmc2V0XVxuXG4gIGNvbnN0IGxvID0gdGhpc1srK29mZnNldF0gKiAyICoqIDI0ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogMTYgK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiA4ICtcbiAgICBsYXN0XG5cbiAgcmV0dXJuIChCaWdJbnQoaGkpIDw8IEJpZ0ludCgzMikpICsgQmlnSW50KGxvKVxufSlcblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgbGV0IHZhbCA9IHRoaXNbb2Zmc2V0XVxuICBsZXQgbXVsID0gMVxuICBsZXQgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG4gIG11bCAqPSAweDgwXG5cbiAgaWYgKHZhbCA+PSBtdWwpIHZhbCAtPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aClcblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludEJFID0gZnVuY3Rpb24gcmVhZEludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIGxldCBpID0gYnl0ZUxlbmd0aFxuICBsZXQgbXVsID0gMVxuICBsZXQgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgY29uc3QgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIGNvbnN0IHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAodGhpc1tvZmZzZXRdKSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgM10gPDwgMjQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDMyQkUgPSBmdW5jdGlvbiByZWFkSW50MzJCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRCaWdJbnQ2NExFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHJlYWRCaWdJbnQ2NExFIChvZmZzZXQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIHZhbGlkYXRlTnVtYmVyKG9mZnNldCwgJ29mZnNldCcpXG4gIGNvbnN0IGZpcnN0ID0gdGhpc1tvZmZzZXRdXG4gIGNvbnN0IGxhc3QgPSB0aGlzW29mZnNldCArIDddXG4gIGlmIChmaXJzdCA9PT0gdW5kZWZpbmVkIHx8IGxhc3QgPT09IHVuZGVmaW5lZCkge1xuICAgIGJvdW5kc0Vycm9yKG9mZnNldCwgdGhpcy5sZW5ndGggLSA4KVxuICB9XG5cbiAgY29uc3QgdmFsID0gdGhpc1tvZmZzZXQgKyA0XSArXG4gICAgdGhpc1tvZmZzZXQgKyA1XSAqIDIgKiogOCArXG4gICAgdGhpc1tvZmZzZXQgKyA2XSAqIDIgKiogMTYgK1xuICAgIChsYXN0IDw8IDI0KSAvLyBPdmVyZmxvd1xuXG4gIHJldHVybiAoQmlnSW50KHZhbCkgPDwgQmlnSW50KDMyKSkgK1xuICAgIEJpZ0ludChmaXJzdCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDI0KVxufSlcblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkQmlnSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiByZWFkQmlnSW50NjRCRSAob2Zmc2V0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICB2YWxpZGF0ZU51bWJlcihvZmZzZXQsICdvZmZzZXQnKVxuICBjb25zdCBmaXJzdCA9IHRoaXNbb2Zmc2V0XVxuICBjb25zdCBsYXN0ID0gdGhpc1tvZmZzZXQgKyA3XVxuICBpZiAoZmlyc3QgPT09IHVuZGVmaW5lZCB8fCBsYXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIHRoaXMubGVuZ3RoIC0gOClcbiAgfVxuXG4gIGNvbnN0IHZhbCA9IChmaXJzdCA8PCAyNCkgKyAvLyBPdmVyZmxvd1xuICAgIHRoaXNbKytvZmZzZXRdICogMiAqKiAxNiArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDggK1xuICAgIHRoaXNbKytvZmZzZXRdXG5cbiAgcmV0dXJuIChCaWdJbnQodmFsKSA8PCBCaWdJbnQoMzIpKSArXG4gICAgQmlnSW50KHRoaXNbKytvZmZzZXRdICogMiAqKiAyNCArXG4gICAgdGhpc1srK29mZnNldF0gKiAyICoqIDE2ICtcbiAgICB0aGlzWysrb2Zmc2V0XSAqIDIgKiogOCArXG4gICAgbGFzdClcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEZsb2F0TEUgPSBmdW5jdGlvbiByZWFkRmxvYXRMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgdHJ1ZSwgNTIsIDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUJFID0gZnVuY3Rpb24gcmVhZERvdWJsZUJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludExFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50TEUgPSBmdW5jdGlvbiB3cml0ZVVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjb25zdCBtYXhCeXRlcyA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKSAtIDFcbiAgICBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBtYXhCeXRlcywgMClcbiAgfVxuXG4gIGxldCBtdWwgPSAxXG4gIGxldCBpID0gMFxuICB0aGlzW29mZnNldF0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB0aGlzW29mZnNldCArIGldID0gKHZhbHVlIC8gbXVsKSAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50QkUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNvbnN0IG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgbGV0IGkgPSBieXRlTGVuZ3RoIC0gMVxuICBsZXQgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQ4ID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50OCA9IGZ1bmN0aW9uIHdyaXRlVUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDE2TEUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVpbnQxNkJFID1cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVaW50MzJMRSA9XG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVWludDMyQkUgPVxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuZnVuY3Rpb24gd3J0QmlnVUludDY0TEUgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbWluLCBtYXgpIHtcbiAgY2hlY2tJbnRCSSh2YWx1ZSwgbWluLCBtYXgsIGJ1Ziwgb2Zmc2V0LCA3KVxuXG4gIGxldCBsbyA9IE51bWJlcih2YWx1ZSAmIEJpZ0ludCgweGZmZmZmZmZmKSlcbiAgYnVmW29mZnNldCsrXSA9IGxvXG4gIGxvID0gbG8gPj4gOFxuICBidWZbb2Zmc2V0KytdID0gbG9cbiAgbG8gPSBsbyA+PiA4XG4gIGJ1ZltvZmZzZXQrK10gPSBsb1xuICBsbyA9IGxvID4+IDhcbiAgYnVmW29mZnNldCsrXSA9IGxvXG4gIGxldCBoaSA9IE51bWJlcih2YWx1ZSA+PiBCaWdJbnQoMzIpICYgQmlnSW50KDB4ZmZmZmZmZmYpKVxuICBidWZbb2Zmc2V0KytdID0gaGlcbiAgaGkgPSBoaSA+PiA4XG4gIGJ1ZltvZmZzZXQrK10gPSBoaVxuICBoaSA9IGhpID4+IDhcbiAgYnVmW29mZnNldCsrXSA9IGhpXG4gIGhpID0gaGkgPj4gOFxuICBidWZbb2Zmc2V0KytdID0gaGlcbiAgcmV0dXJuIG9mZnNldFxufVxuXG5mdW5jdGlvbiB3cnRCaWdVSW50NjRCRSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBtaW4sIG1heCkge1xuICBjaGVja0ludEJJKHZhbHVlLCBtaW4sIG1heCwgYnVmLCBvZmZzZXQsIDcpXG5cbiAgbGV0IGxvID0gTnVtYmVyKHZhbHVlICYgQmlnSW50KDB4ZmZmZmZmZmYpKVxuICBidWZbb2Zmc2V0ICsgN10gPSBsb1xuICBsbyA9IGxvID4+IDhcbiAgYnVmW29mZnNldCArIDZdID0gbG9cbiAgbG8gPSBsbyA+PiA4XG4gIGJ1ZltvZmZzZXQgKyA1XSA9IGxvXG4gIGxvID0gbG8gPj4gOFxuICBidWZbb2Zmc2V0ICsgNF0gPSBsb1xuICBsZXQgaGkgPSBOdW1iZXIodmFsdWUgPj4gQmlnSW50KDMyKSAmIEJpZ0ludCgweGZmZmZmZmZmKSlcbiAgYnVmW29mZnNldCArIDNdID0gaGlcbiAgaGkgPSBoaSA+PiA4XG4gIGJ1ZltvZmZzZXQgKyAyXSA9IGhpXG4gIGhpID0gaGkgPj4gOFxuICBidWZbb2Zmc2V0ICsgMV0gPSBoaVxuICBoaSA9IGhpID4+IDhcbiAgYnVmW29mZnNldF0gPSBoaVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlQmlnVUludDY0TEUgPSBkZWZpbmVCaWdJbnRNZXRob2QoZnVuY3Rpb24gd3JpdGVCaWdVSW50NjRMRSAodmFsdWUsIG9mZnNldCA9IDApIHtcbiAgcmV0dXJuIHdydEJpZ1VJbnQ2NExFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIEJpZ0ludCgwKSwgQmlnSW50KCcweGZmZmZmZmZmZmZmZmZmZmYnKSlcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVCaWdVSW50NjRCRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiB3cml0ZUJpZ1VJbnQ2NEJFICh2YWx1ZSwgb2Zmc2V0ID0gMCkge1xuICByZXR1cm4gd3J0QmlnVUludDY0QkUodGhpcywgdmFsdWUsIG9mZnNldCwgQmlnSW50KDApLCBCaWdJbnQoJzB4ZmZmZmZmZmZmZmZmZmZmZicpKVxufSlcblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjb25zdCBsaW1pdCA9IE1hdGgucG93KDIsICg4ICogYnl0ZUxlbmd0aCkgLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICBsZXQgaSA9IDBcbiAgbGV0IG11bCA9IDFcbiAgbGV0IHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjb25zdCBsaW1pdCA9IE1hdGgucG93KDIsICg4ICogYnl0ZUxlbmd0aCkgLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICBsZXQgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIGxldCBtdWwgPSAxXG4gIGxldCBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpICsgMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweDdmLCAtMHg4MClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCA+Pj4gMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlQmlnSW50NjRMRSA9IGRlZmluZUJpZ0ludE1ldGhvZChmdW5jdGlvbiB3cml0ZUJpZ0ludDY0TEUgKHZhbHVlLCBvZmZzZXQgPSAwKSB7XG4gIHJldHVybiB3cnRCaWdVSW50NjRMRSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAtQmlnSW50KCcweDgwMDAwMDAwMDAwMDAwMDAnKSwgQmlnSW50KCcweDdmZmZmZmZmZmZmZmZmZmYnKSlcbn0pXG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVCaWdJbnQ2NEJFID0gZGVmaW5lQmlnSW50TWV0aG9kKGZ1bmN0aW9uIHdyaXRlQmlnSW50NjRCRSAodmFsdWUsIG9mZnNldCA9IDApIHtcbiAgcmV0dXJuIHdydEJpZ1VJbnQ2NEJFKHRoaXMsIHZhbHVlLCBvZmZzZXQsIC1CaWdJbnQoJzB4ODAwMDAwMDAwMDAwMDAwMCcpLCBCaWdJbnQoJzB4N2ZmZmZmZmZmZmZmZmZmZicpKVxufSlcblxuZnVuY3Rpb24gY2hlY2tJRUVFNzU0IChidWYsIHZhbHVlLCBvZmZzZXQsIGV4dCwgbWF4LCBtaW4pIHtcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxuICBpZiAob2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRmxvYXQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgPj4+IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0ID4+PiAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIodGFyZ2V0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgc2hvdWxkIGJlIGEgQnVmZmVyJylcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIGNvbnN0IGxlbiA9IGVuZCAtIHN0YXJ0XG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCAmJiB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuY29weVdpdGhpbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFVzZSBidWlsdC1pbiB3aGVuIGF2YWlsYWJsZSwgbWlzc2luZyBmcm9tIElFMTFcbiAgICB0aGlzLmNvcHlXaXRoaW4odGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpXG4gIH0gZWxzZSB7XG4gICAgVWludDhBcnJheS5wcm90b3R5cGUuc2V0LmNhbGwoXG4gICAgICB0YXJnZXQsXG4gICAgICB0aGlzLnN1YmFycmF5KHN0YXJ0LCBlbmQpLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgY29uc3QgY29kZSA9IHZhbC5jaGFyQ29kZUF0KDApXG4gICAgICBpZiAoKGVuY29kaW5nID09PSAndXRmOCcgJiYgY29kZSA8IDEyOCkgfHxcbiAgICAgICAgICBlbmNvZGluZyA9PT0gJ2xhdGluMScpIHtcbiAgICAgICAgLy8gRmFzdCBwYXRoOiBJZiBgdmFsYCBmaXRzIGludG8gYSBzaW5nbGUgYnl0ZSwgdXNlIHRoYXQgbnVtZXJpYyB2YWx1ZS5cbiAgICAgICAgdmFsID0gY29kZVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDI1NVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdib29sZWFuJykge1xuICAgIHZhbCA9IE51bWJlcih2YWwpXG4gIH1cblxuICAvLyBJbnZhbGlkIHJhbmdlcyBhcmUgbm90IHNldCB0byBhIGRlZmF1bHQsIHNvIGNhbiByYW5nZSBjaGVjayBlYXJseS5cbiAgaWYgKHN0YXJ0IDwgMCB8fCB0aGlzLmxlbmd0aCA8IHN0YXJ0IHx8IHRoaXMubGVuZ3RoIDwgZW5kKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ091dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXJ0ID0gc3RhcnQgPj4+IDBcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyB0aGlzLmxlbmd0aCA6IGVuZCA+Pj4gMFxuXG4gIGlmICghdmFsKSB2YWwgPSAwXG5cbiAgbGV0IGlcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgICAgdGhpc1tpXSA9IHZhbFxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBjb25zdCBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICAgIGNvbnN0IGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGlmIChsZW4gPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyB2YWwgK1xuICAgICAgICAnXCIgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgXCJ2YWx1ZVwiJylcbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gQ1VTVE9NIEVSUk9SU1xuLy8gPT09PT09PT09PT09PVxuXG4vLyBTaW1wbGlmaWVkIHZlcnNpb25zIGZyb20gTm9kZSwgY2hhbmdlZCBmb3IgQnVmZmVyLW9ubHkgdXNhZ2VcbmNvbnN0IGVycm9ycyA9IHt9XG5mdW5jdGlvbiBFIChzeW0sIGdldE1lc3NhZ2UsIEJhc2UpIHtcbiAgZXJyb3JzW3N5bV0gPSBjbGFzcyBOb2RlRXJyb3IgZXh0ZW5kcyBCYXNlIHtcbiAgICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgICBzdXBlcigpXG5cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnbWVzc2FnZScsIHtcbiAgICAgICAgdmFsdWU6IGdldE1lc3NhZ2UuYXBwbHkodGhpcywgYXJndW1lbnRzKSxcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgICAgfSlcblxuICAgICAgLy8gQWRkIHRoZSBlcnJvciBjb2RlIHRvIHRoZSBuYW1lIHRvIGluY2x1ZGUgaXQgaW4gdGhlIHN0YWNrIHRyYWNlLlxuICAgICAgdGhpcy5uYW1lID0gYCR7dGhpcy5uYW1lfSBbJHtzeW19XWBcbiAgICAgIC8vIEFjY2VzcyB0aGUgc3RhY2sgdG8gZ2VuZXJhdGUgdGhlIGVycm9yIG1lc3NhZ2UgaW5jbHVkaW5nIHRoZSBlcnJvciBjb2RlXG4gICAgICAvLyBmcm9tIHRoZSBuYW1lLlxuICAgICAgdGhpcy5zdGFjayAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuICAgICAgLy8gUmVzZXQgdGhlIG5hbWUgdG8gdGhlIGFjdHVhbCBuYW1lLlxuICAgICAgZGVsZXRlIHRoaXMubmFtZVxuICAgIH1cblxuICAgIGdldCBjb2RlICgpIHtcbiAgICAgIHJldHVybiBzeW1cbiAgICB9XG5cbiAgICBzZXQgY29kZSAodmFsdWUpIHtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCAnY29kZScsIHtcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdG9TdHJpbmcgKCkge1xuICAgICAgcmV0dXJuIGAke3RoaXMubmFtZX0gWyR7c3ltfV06ICR7dGhpcy5tZXNzYWdlfWBcbiAgICB9XG4gIH1cbn1cblxuRSgnRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTJyxcbiAgZnVuY3Rpb24gKG5hbWUpIHtcbiAgICBpZiAobmFtZSkge1xuICAgICAgcmV0dXJuIGAke25hbWV9IGlzIG91dHNpZGUgb2YgYnVmZmVyIGJvdW5kc2BcbiAgICB9XG5cbiAgICByZXR1cm4gJ0F0dGVtcHQgdG8gYWNjZXNzIG1lbW9yeSBvdXRzaWRlIGJ1ZmZlciBib3VuZHMnXG4gIH0sIFJhbmdlRXJyb3IpXG5FKCdFUlJfSU5WQUxJRF9BUkdfVFlQRScsXG4gIGZ1bmN0aW9uIChuYW1lLCBhY3R1YWwpIHtcbiAgICByZXR1cm4gYFRoZSBcIiR7bmFtZX1cIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICR7dHlwZW9mIGFjdHVhbH1gXG4gIH0sIFR5cGVFcnJvcilcbkUoJ0VSUl9PVVRfT0ZfUkFOR0UnLFxuICBmdW5jdGlvbiAoc3RyLCByYW5nZSwgaW5wdXQpIHtcbiAgICBsZXQgbXNnID0gYFRoZSB2YWx1ZSBvZiBcIiR7c3RyfVwiIGlzIG91dCBvZiByYW5nZS5gXG4gICAgbGV0IHJlY2VpdmVkID0gaW5wdXRcbiAgICBpZiAoTnVtYmVyLmlzSW50ZWdlcihpbnB1dCkgJiYgTWF0aC5hYnMoaW5wdXQpID4gMiAqKiAzMikge1xuICAgICAgcmVjZWl2ZWQgPSBhZGROdW1lcmljYWxTZXBhcmF0b3IoU3RyaW5nKGlucHV0KSlcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ2JpZ2ludCcpIHtcbiAgICAgIHJlY2VpdmVkID0gU3RyaW5nKGlucHV0KVxuICAgICAgaWYgKGlucHV0ID4gQmlnSW50KDIpICoqIEJpZ0ludCgzMikgfHwgaW5wdXQgPCAtKEJpZ0ludCgyKSAqKiBCaWdJbnQoMzIpKSkge1xuICAgICAgICByZWNlaXZlZCA9IGFkZE51bWVyaWNhbFNlcGFyYXRvcihyZWNlaXZlZClcbiAgICAgIH1cbiAgICAgIHJlY2VpdmVkICs9ICduJ1xuICAgIH1cbiAgICBtc2cgKz0gYCBJdCBtdXN0IGJlICR7cmFuZ2V9LiBSZWNlaXZlZCAke3JlY2VpdmVkfWBcbiAgICByZXR1cm4gbXNnXG4gIH0sIFJhbmdlRXJyb3IpXG5cbmZ1bmN0aW9uIGFkZE51bWVyaWNhbFNlcGFyYXRvciAodmFsKSB7XG4gIGxldCByZXMgPSAnJ1xuICBsZXQgaSA9IHZhbC5sZW5ndGhcbiAgY29uc3Qgc3RhcnQgPSB2YWxbMF0gPT09ICctJyA/IDEgOiAwXG4gIGZvciAoOyBpID49IHN0YXJ0ICsgNDsgaSAtPSAzKSB7XG4gICAgcmVzID0gYF8ke3ZhbC5zbGljZShpIC0gMywgaSl9JHtyZXN9YFxuICB9XG4gIHJldHVybiBgJHt2YWwuc2xpY2UoMCwgaSl9JHtyZXN9YFxufVxuXG4vLyBDSEVDSyBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PVxuXG5mdW5jdGlvbiBjaGVja0JvdW5kcyAoYnVmLCBvZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgdmFsaWRhdGVOdW1iZXIob2Zmc2V0LCAnb2Zmc2V0JylcbiAgaWYgKGJ1ZltvZmZzZXRdID09PSB1bmRlZmluZWQgfHwgYnVmW29mZnNldCArIGJ5dGVMZW5ndGhdID09PSB1bmRlZmluZWQpIHtcbiAgICBib3VuZHNFcnJvcihvZmZzZXQsIGJ1Zi5sZW5ndGggLSAoYnl0ZUxlbmd0aCArIDEpKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrSW50QkkgKHZhbHVlLCBtaW4sIG1heCwgYnVmLCBvZmZzZXQsIGJ5dGVMZW5ndGgpIHtcbiAgaWYgKHZhbHVlID4gbWF4IHx8IHZhbHVlIDwgbWluKSB7XG4gICAgY29uc3QgbiA9IHR5cGVvZiBtaW4gPT09ICdiaWdpbnQnID8gJ24nIDogJydcbiAgICBsZXQgcmFuZ2VcbiAgICBpZiAoYnl0ZUxlbmd0aCA+IDMpIHtcbiAgICAgIGlmIChtaW4gPT09IDAgfHwgbWluID09PSBCaWdJbnQoMCkpIHtcbiAgICAgICAgcmFuZ2UgPSBgPj0gMCR7bn0gYW5kIDwgMiR7bn0gKiogJHsoYnl0ZUxlbmd0aCArIDEpICogOH0ke259YFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmFuZ2UgPSBgPj0gLSgyJHtufSAqKiAkeyhieXRlTGVuZ3RoICsgMSkgKiA4IC0gMX0ke259KSBhbmQgPCAyICoqIGAgK1xuICAgICAgICAgICAgICAgIGAkeyhieXRlTGVuZ3RoICsgMSkgKiA4IC0gMX0ke259YFxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByYW5nZSA9IGA+PSAke21pbn0ke259IGFuZCA8PSAke21heH0ke259YFxuICAgIH1cbiAgICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9PVVRfT0ZfUkFOR0UoJ3ZhbHVlJywgcmFuZ2UsIHZhbHVlKVxuICB9XG4gIGNoZWNrQm91bmRzKGJ1Ziwgb2Zmc2V0LCBieXRlTGVuZ3RoKVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZU51bWJlciAodmFsdWUsIG5hbWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ251bWJlcicpIHtcbiAgICB0aHJvdyBuZXcgZXJyb3JzLkVSUl9JTlZBTElEX0FSR19UWVBFKG5hbWUsICdudW1iZXInLCB2YWx1ZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBib3VuZHNFcnJvciAodmFsdWUsIGxlbmd0aCwgdHlwZSkge1xuICBpZiAoTWF0aC5mbG9vcih2YWx1ZSkgIT09IHZhbHVlKSB7XG4gICAgdmFsaWRhdGVOdW1iZXIodmFsdWUsIHR5cGUpXG4gICAgdGhyb3cgbmV3IGVycm9ycy5FUlJfT1VUX09GX1JBTkdFKHR5cGUgfHwgJ29mZnNldCcsICdhbiBpbnRlZ2VyJywgdmFsdWUpXG4gIH1cblxuICBpZiAobGVuZ3RoIDwgMCkge1xuICAgIHRocm93IG5ldyBlcnJvcnMuRVJSX0JVRkZFUl9PVVRfT0ZfQk9VTkRTKClcbiAgfVxuXG4gIHRocm93IG5ldyBlcnJvcnMuRVJSX09VVF9PRl9SQU5HRSh0eXBlIHx8ICdvZmZzZXQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYD49ICR7dHlwZSA/IDEgOiAwfSBhbmQgPD0gJHtsZW5ndGh9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlKVxufVxuXG4vLyBIRUxQRVIgRlVOQ1RJT05TXG4vLyA9PT09PT09PT09PT09PT09XG5cbmNvbnN0IElOVkFMSURfQkFTRTY0X1JFID0gL1teKy8wLTlBLVphLXotX10vZ1xuXG5mdW5jdGlvbiBiYXNlNjRjbGVhbiAoc3RyKSB7XG4gIC8vIE5vZGUgdGFrZXMgZXF1YWwgc2lnbnMgYXMgZW5kIG9mIHRoZSBCYXNlNjQgZW5jb2RpbmdcbiAgc3RyID0gc3RyLnNwbGl0KCc9JylbMF1cbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0ci50cmltKCkucmVwbGFjZShJTlZBTElEX0JBU0U2NF9SRSwgJycpXG4gIC8vIE5vZGUgY29udmVydHMgc3RyaW5ncyB3aXRoIGxlbmd0aCA8IDIgdG8gJydcbiAgaWYgKHN0ci5sZW5ndGggPCAyKSByZXR1cm4gJydcbiAgLy8gTm9kZSBhbGxvd3MgZm9yIG5vbi1wYWRkZWQgYmFzZTY0IHN0cmluZ3MgKG1pc3NpbmcgdHJhaWxpbmcgPT09KSwgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHdoaWxlIChzdHIubGVuZ3RoICUgNCAhPT0gMCkge1xuICAgIHN0ciA9IHN0ciArICc9J1xuICB9XG4gIHJldHVybiBzdHJcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICBsZXQgY29kZVBvaW50XG4gIGNvbnN0IGxlbmd0aCA9IHN0cmluZy5sZW5ndGhcbiAgbGV0IGxlYWRTdXJyb2dhdGUgPSBudWxsXG4gIGNvbnN0IGJ5dGVzID0gW11cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIC8vIGlzIHN1cnJvZ2F0ZSBjb21wb25lbnRcbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgIC8vIHVucGFpcmVkIGxlYWRcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWQgbGVhZFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMiBsZWFkcyBpbiBhIHJvd1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDB4REMwMCkge1xuICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZCBzdXJyb2dhdGUgcGFpclxuICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDAgPDwgMTAgfCBjb2RlUG9pbnQgLSAweERDMDApICsgMHgxMDAwMFxuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgfVxuXG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcblxuICAgIC8vIGVuY29kZSB1dGY4XG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDgwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2IHwgMHhDMCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyB8IDB4RTAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2RlIHBvaW50JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlUb0J5dGVzIChzdHIpIHtcbiAgY29uc3QgYnl0ZUFycmF5ID0gW11cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICBsZXQgYywgaGksIGxvXG4gIGNvbnN0IGJ5dGVBcnJheSA9IFtdXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG5cbiAgICBjID0gc3RyLmNoYXJDb2RlQXQoaSlcbiAgICBoaSA9IGMgPj4gOFxuICAgIGxvID0gYyAlIDI1NlxuICAgIGJ5dGVBcnJheS5wdXNoKGxvKVxuICAgIGJ5dGVBcnJheS5wdXNoKGhpKVxuICB9XG5cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiBiYXNlNjRUb0J5dGVzIChzdHIpIHtcbiAgcmV0dXJuIGJhc2U2NC50b0J5dGVBcnJheShiYXNlNjRjbGVhbihzdHIpKVxufVxuXG5mdW5jdGlvbiBibGl0QnVmZmVyIChzcmMsIGRzdCwgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgbGV0IGlcbiAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG5cbi8vIEFycmF5QnVmZmVyIG9yIFVpbnQ4QXJyYXkgb2JqZWN0cyBmcm9tIG90aGVyIGNvbnRleHRzIChpLmUuIGlmcmFtZXMpIGRvIG5vdCBwYXNzXG4vLyB0aGUgYGluc3RhbmNlb2ZgIGNoZWNrIGJ1dCB0aGV5IHNob3VsZCBiZSB0cmVhdGVkIGFzIG9mIHRoYXQgdHlwZS5cbi8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvaXNzdWVzLzE2NlxuZnVuY3Rpb24gaXNJbnN0YW5jZSAob2JqLCB0eXBlKSB7XG4gIHJldHVybiBvYmogaW5zdGFuY2VvZiB0eXBlIHx8XG4gICAgKG9iaiAhPSBudWxsICYmIG9iai5jb25zdHJ1Y3RvciAhPSBudWxsICYmIG9iai5jb25zdHJ1Y3Rvci5uYW1lICE9IG51bGwgJiZcbiAgICAgIG9iai5jb25zdHJ1Y3Rvci5uYW1lID09PSB0eXBlLm5hbWUpXG59XG5mdW5jdGlvbiBudW1iZXJJc05hTiAob2JqKSB7XG4gIC8vIEZvciBJRTExIHN1cHBvcnRcbiAgcmV0dXJuIG9iaiAhPT0gb2JqIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG59XG5cbi8vIENyZWF0ZSBsb29rdXAgdGFibGUgZm9yIGB0b1N0cmluZygnaGV4JylgXG4vLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL2lzc3Vlcy8yMTlcbmNvbnN0IGhleFNsaWNlTG9va3VwVGFibGUgPSAoZnVuY3Rpb24gKCkge1xuICBjb25zdCBhbHBoYWJldCA9ICcwMTIzNDU2Nzg5YWJjZGVmJ1xuICBjb25zdCB0YWJsZSA9IG5ldyBBcnJheSgyNTYpXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgIGNvbnN0IGkxNiA9IGkgKiAxNlxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgdGFibGVbaTE2ICsgal0gPSBhbHBoYWJldFtpXSArIGFscGhhYmV0W2pdXG4gICAgfVxuICB9XG4gIHJldHVybiB0YWJsZVxufSkoKVxuXG4vLyBSZXR1cm4gbm90IGZ1bmN0aW9uIHdpdGggRXJyb3IgaWYgQmlnSW50IG5vdCBzdXBwb3J0ZWRcbmZ1bmN0aW9uIGRlZmluZUJpZ0ludE1ldGhvZCAoZm4pIHtcbiAgcmV0dXJuIHR5cGVvZiBCaWdJbnQgPT09ICd1bmRlZmluZWQnID8gQnVmZmVyQmlnSW50Tm90RGVmaW5lZCA6IGZuXG59XG5cbmZ1bmN0aW9uIEJ1ZmZlckJpZ0ludE5vdERlZmluZWQgKCkge1xuICB0aHJvdyBuZXcgRXJyb3IoJ0JpZ0ludCBub3Qgc3VwcG9ydGVkJylcbn1cbiIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHhzLCBmbikge1xuICAgIHZhciByZXMgPSBbXTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHhzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB4ID0gZm4oeHNbaV0sIGkpO1xuICAgICAgICBpZiAoaXNBcnJheSh4KSkgcmVzLnB1c2guYXBwbHkocmVzLCB4KTtcbiAgICAgICAgZWxzZSByZXMucHVzaCh4KTtcbiAgICB9XG4gICAgcmV0dXJuIHJlcztcbn07XG5cbnZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheSB8fCBmdW5jdGlvbiAoeHMpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHhzKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTtcblxuICAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICAgIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2YgaXRlbVs1XSAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIik7XG4gICAgICB9XG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGNvbnRlbnQgKz0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTtcblxuICAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICBsaXN0LmkgPSBmdW5jdGlvbiBpKG1vZHVsZXMsIG1lZGlhLCBkZWR1cGUsIHN1cHBvcnRzLCBsYXllcikge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgdW5kZWZpbmVkXV07XG4gICAgfVxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBpZCA9IHRoaXNba11bMF07XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBtb2R1bGVzLmxlbmd0aDsgX2srKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfa10pO1xuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBsYXllciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1bNV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChtZWRpYSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3VwcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpdGVtWzRdKSB7XG4gICAgICAgICAgaXRlbVs0XSA9IFwiXCIuY29uY2F0KHN1cHBvcnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNF0gPSBzdXBwb3J0cztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGxpc3Q7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gIHZhciBjb250ZW50ID0gaXRlbVsxXTtcbiAgdmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgcmV0dXJuIFtjb250ZW50XS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHJldHVybiBbY29udGVudF0uam9pbihcIlxcblwiKTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsXCJfX2VzTW9kdWxlXCIse3ZhbHVlOiEwfSksZXhwb3J0cy5wcm9taXNpZnk9cHJvbWlzaWZ5O3ZhciBjdXN0b21Bcmd1bWVudHNUb2tlbj1cIl9fRVM2LVBST01JU0lGWS0tQ1VTVE9NLUFSR1VNRU5UU19fXCI7ZnVuY3Rpb24gcHJvbWlzaWZ5KGEpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGEpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50IHRvIHByb21pc2lmeSBtdXN0IGJlIGEgZnVuY3Rpb25cIik7dmFyIGI9YVtjdXN0b21Bcmd1bWVudHNUb2tlbl0sYz1wcm9taXNpZnkuUHJvbWlzZXx8UHJvbWlzZTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBjKXRocm93IG5ldyBFcnJvcihcIk5vIFByb21pc2UgaW1wbGVtZW50YXRpb24gZm91bmQ7IGRvIHlvdSBuZWVkIGEgcG9seWZpbGw/XCIpO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgZD10aGlzLGU9YXJndW1lbnRzLmxlbmd0aCxmPUFycmF5KGUpLGc9MDtnPGU7ZysrKWZbZ109YXJndW1lbnRzW2ddO3JldHVybiBuZXcgYyhmdW5jdGlvbihjLGUpe2YucHVzaChmdW5jdGlvbihhKXtpZihhKXJldHVybiBlKGEpO2Zvcih2YXIgZD1hcmd1bWVudHMubGVuZ3RoLGY9QXJyYXkoMTxkP2QtMTowKSxnPTE7ZzxkO2crKylmW2ctMV09YXJndW1lbnRzW2ddO2lmKDE9PT1mLmxlbmd0aHx8IWIpcmV0dXJuIGMoZlswXSk7dmFyIGg9e307Zi5mb3JFYWNoKGZ1bmN0aW9uKGEsYyl7dmFyIGQ9YltjXTtkJiYoaFtkXT1hKX0pLGMoaCl9KSxhLmFwcGx5KGQsZil9KX19cHJvbWlzaWZ5LmFyZ3VtZW50TmFtZXM9XCJfX0VTNi1QUk9NSVNJRlktLUNVU1RPTS1BUkdVTUVOVFNfX1wiLHByb21pc2lmeS5Qcm9taXNlPXZvaWQgMDtcbiIsIid1c2Ugc3RyaWN0JztcblxuLy8gZG8gbm90IGVkaXQgLmpzIGZpbGVzIGRpcmVjdGx5IC0gZWRpdCBzcmMvaW5kZXguanN0XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGVxdWFsKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuXG4gIGlmIChhICYmIGIgJiYgdHlwZW9mIGEgPT0gJ29iamVjdCcgJiYgdHlwZW9mIGIgPT0gJ29iamVjdCcpIHtcbiAgICBpZiAoYS5jb25zdHJ1Y3RvciAhPT0gYi5jb25zdHJ1Y3RvcikgcmV0dXJuIGZhbHNlO1xuXG4gICAgdmFyIGxlbmd0aCwgaSwga2V5cztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSAhPT0gMDspXG4gICAgICAgIGlmICghZXF1YWwoYVtpXSwgYltpXSkpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuXG5cbiAgICBpZiAoYS5jb25zdHJ1Y3RvciA9PT0gUmVnRXhwKSByZXR1cm4gYS5zb3VyY2UgPT09IGIuc291cmNlICYmIGEuZmxhZ3MgPT09IGIuZmxhZ3M7XG4gICAgaWYgKGEudmFsdWVPZiAhPT0gT2JqZWN0LnByb3RvdHlwZS52YWx1ZU9mKSByZXR1cm4gYS52YWx1ZU9mKCkgPT09IGIudmFsdWVPZigpO1xuICAgIGlmIChhLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKSByZXR1cm4gYS50b1N0cmluZygpID09PSBiLnRvU3RyaW5nKCk7XG5cbiAgICBrZXlzID0gT2JqZWN0LmtleXMoYSk7XG4gICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgaWYgKGxlbmd0aCAhPT0gT2JqZWN0LmtleXMoYikubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSAhPT0gMDspXG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBrZXlzW2ldKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKCFlcXVhbChhW2tleV0sIGJba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHRydWUgaWYgYm90aCBOYU4sIGZhbHNlIG90aGVyd2lzZVxuICByZXR1cm4gYSE9PWEgJiYgYiE9PWI7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChkYXRhLCBvcHRzKSB7XG4gICAgaWYgKCFvcHRzKSBvcHRzID0ge307XG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSBvcHRzID0geyBjbXA6IG9wdHMgfTtcbiAgICB2YXIgY3ljbGVzID0gKHR5cGVvZiBvcHRzLmN5Y2xlcyA9PT0gJ2Jvb2xlYW4nKSA/IG9wdHMuY3ljbGVzIDogZmFsc2U7XG5cbiAgICB2YXIgY21wID0gb3B0cy5jbXAgJiYgKGZ1bmN0aW9uIChmKSB7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAobm9kZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgICAgICAgICAgICAgdmFyIGFvYmogPSB7IGtleTogYSwgdmFsdWU6IG5vZGVbYV0gfTtcbiAgICAgICAgICAgICAgICB2YXIgYm9iaiA9IHsga2V5OiBiLCB2YWx1ZTogbm9kZVtiXSB9O1xuICAgICAgICAgICAgICAgIHJldHVybiBmKGFvYmosIGJvYmopO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9KShvcHRzLmNtcCk7XG5cbiAgICB2YXIgc2VlbiA9IFtdO1xuICAgIHJldHVybiAoZnVuY3Rpb24gc3RyaW5naWZ5IChub2RlKSB7XG4gICAgICAgIGlmIChub2RlICYmIG5vZGUudG9KU09OICYmIHR5cGVvZiBub2RlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUudG9KU09OKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZSA9PSAnbnVtYmVyJykgcmV0dXJuIGlzRmluaXRlKG5vZGUpID8gJycgKyBub2RlIDogJ251bGwnO1xuICAgICAgICBpZiAodHlwZW9mIG5vZGUgIT09ICdvYmplY3QnKSByZXR1cm4gSlNPTi5zdHJpbmdpZnkobm9kZSk7XG5cbiAgICAgICAgdmFyIGksIG91dDtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZSkpIHtcbiAgICAgICAgICAgIG91dCA9ICdbJztcbiAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBub2RlLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgaWYgKGkpIG91dCArPSAnLCc7XG4gICAgICAgICAgICAgICAgb3V0ICs9IHN0cmluZ2lmeShub2RlW2ldKSB8fCAnbnVsbCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gb3V0ICsgJ10nO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5vZGUgPT09IG51bGwpIHJldHVybiAnbnVsbCc7XG5cbiAgICAgICAgaWYgKHNlZW4uaW5kZXhPZihub2RlKSAhPT0gLTEpIHtcbiAgICAgICAgICAgIGlmIChjeWNsZXMpIHJldHVybiBKU09OLnN0cmluZ2lmeSgnX19jeWNsZV9fJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdDb252ZXJ0aW5nIGNpcmN1bGFyIHN0cnVjdHVyZSB0byBKU09OJyk7XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgc2VlbkluZGV4ID0gc2Vlbi5wdXNoKG5vZGUpIC0gMTtcbiAgICAgICAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhub2RlKS5zb3J0KGNtcCAmJiBjbXAobm9kZSkpO1xuICAgICAgICBvdXQgPSAnJztcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzW2ldO1xuICAgICAgICAgICAgdmFyIHZhbHVlID0gc3RyaW5naWZ5KG5vZGVba2V5XSk7XG5cbiAgICAgICAgICAgIGlmICghdmFsdWUpIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKG91dCkgb3V0ICs9ICcsJztcbiAgICAgICAgICAgIG91dCArPSBKU09OLnN0cmluZ2lmeShrZXkpICsgJzonICsgdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgc2Vlbi5zcGxpY2Uoc2VlbkluZGV4LCAxKTtcbiAgICAgICAgcmV0dXJuICd7JyArIG91dCArICd9JztcbiAgICB9KShkYXRhKTtcbn07XG4iLCIvKmdsb2JhbCBzZXRJbW1lZGlhdGU6IGZhbHNlLCBzZXRUaW1lb3V0OiBmYWxzZSwgY29uc29sZTogZmFsc2UgKi9cblxuLyoqXG4gKiBhc3luYy5qcyBzaGltLCBiYXNlZCBvbiBodHRwczovL3Jhdy5naXRodWIuY29tL2Nhb2xhbi9hc3luYy9tYXN0ZXIvbGliL2FzeW5jLmpzIEZlYiAxOCwgMjAxNFxuICogVXNlZCB1bmRlciBNSVQgLSBodHRwczovL2dpdGh1Yi5jb20vY2FvbGFuL2FzeW5jL2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuXG4oZnVuY3Rpb24gKCkge1xuXG4gICAgdmFyIGFzeW5jID0ge307XG5cbiAgICAvLyBhc3luYy5qcyBmdW5jdGlvbnMgdXNlZCBpbiBGaWxlclxuXG4gICAgLy8vLyBuZXh0VGljayBpbXBsZW1lbnRhdGlvbiB3aXRoIGJyb3dzZXItY29tcGF0aWJsZSBmYWxsYmFjayAvLy8vXG4gICAgaWYgKHR5cGVvZiBwcm9jZXNzID09PSAndW5kZWZpbmVkJyB8fCAhKHByb2Nlc3MubmV4dFRpY2spKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBhc3luYy5uZXh0VGljayA9IGZ1bmN0aW9uIChmbikge1xuICAgICAgICAgICAgICAgIC8vIG5vdCBhIGRpcmVjdCBhbGlhcyBmb3IgSUUxMCBjb21wYXRpYmlsaXR5XG4gICAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFzeW5jLm5leHRUaWNrID0gZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmbiwgMCk7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgYXN5bmMuc2V0SW1tZWRpYXRlID0gYXN5bmMubmV4dFRpY2s7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGFzeW5jLm5leHRUaWNrID0gcHJvY2Vzcy5uZXh0VGljaztcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRJbW1lZGlhdGUgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBmdW5jdGlvbiAoZm4pIHtcbiAgICAgICAgICAgICAgLy8gbm90IGEgZGlyZWN0IGFsaWFzIGZvciBJRTEwIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgc2V0SW1tZWRpYXRlKGZuKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBhc3luYy5zZXRJbW1lZGlhdGUgPSBhc3luYy5uZXh0VGljaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jLmVhY2hTZXJpZXMgPSBmdW5jdGlvbiAoYXJyLCBpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICAgICAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgaWYgKCFhcnIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgY29tcGxldGVkID0gMDtcbiAgICAgICAgdmFyIGl0ZXJhdGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpdGVyYXRvcihhcnJbY29tcGxldGVkXSwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBmdW5jdGlvbiAoKSB7fTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbXBsZXRlZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGxldGVkID49IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVyYXRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgaXRlcmF0ZSgpO1xuICAgIH07XG4gICAgYXN5bmMuZm9yRWFjaFNlcmllcyA9IGFzeW5jLmVhY2hTZXJpZXM7XG5cbiAgICAvLyBBTUQgLyBSZXF1aXJlSlNcbiAgICBpZiAodHlwZW9mIGRlZmluZSAhPT0gJ3VuZGVmaW5lZCcgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBhc3luYztcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8vIE5vZGUuanNcbiAgICBlbHNlIGlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJyAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgICAgICBtb2R1bGUuZXhwb3J0cyA9IGFzeW5jO1xuICAgIH1cbiAgICAvLyBpbmNsdWRlZCBkaXJlY3RseSB2aWEgPHNjcmlwdD4gdGFnXG4gICAgZWxzZSB7XG4gICAgICAgIHJvb3QuYXN5bmMgPSBhc3luYztcbiAgICB9XG5cbn0oKSk7XG4iLCIvLyBCYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZGl5L2ludGVyY29tLmpzL2Jsb2IvbWFzdGVyL2xpYi9ldmVudHMuanNcbi8vIENvcHlyaWdodCAyMDEyIERJWSBDbyBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjBcbi8vIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuXG5mdW5jdGlvbiByZW1vdmVJdGVtKGl0ZW0sIGFycmF5KSB7XG4gIGZvciAodmFyIGkgPSBhcnJheS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGlmIChhcnJheVtpXSA9PT0gaXRlbSkge1xuICAgICAgYXJyYXkuc3BsaWNlKGksIDEpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gYXJyYXk7XG59XG5cbnZhciBFdmVudEVtaXR0ZXIgPSBmdW5jdGlvbigpIHt9O1xuXG5FdmVudEVtaXR0ZXIuY3JlYXRlSW50ZXJmYWNlID0gZnVuY3Rpb24oc3BhY2UpIHtcbiAgdmFyIG1ldGhvZHMgPSB7fTtcblxuICBtZXRob2RzLm9uID0gZnVuY3Rpb24obmFtZSwgZm4pIHtcbiAgICBpZiAodHlwZW9mIHRoaXNbc3BhY2VdID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpc1tzcGFjZV0gPSB7fTtcbiAgICB9XG4gICAgaWYgKCF0aGlzW3NwYWNlXS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgdGhpc1tzcGFjZV1bbmFtZV0gPSBbXTtcbiAgICB9XG4gICAgdGhpc1tzcGFjZV1bbmFtZV0ucHVzaChmbik7XG4gIH07XG5cbiAgbWV0aG9kcy5vZmYgPSBmdW5jdGlvbihuYW1lLCBmbikge1xuICAgIGlmICh0eXBlb2YgdGhpc1tzcGFjZV0gPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgaWYgKHRoaXNbc3BhY2VdLmhhc093blByb3BlcnR5KG5hbWUpKSB7XG4gICAgICByZW1vdmVJdGVtKGZuLCB0aGlzW3NwYWNlXVtuYW1lXSk7XG4gICAgfVxuICB9O1xuXG4gIG1ldGhvZHMudHJpZ2dlciA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICBpZiAodHlwZW9mIHRoaXNbc3BhY2VdICE9PSAndW5kZWZpbmVkJyAmJiB0aGlzW3NwYWNlXS5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzW3NwYWNlXVtuYW1lXS5sZW5ndGg7IGkrKykge1xuICAgICAgICB0aGlzW3NwYWNlXVtuYW1lXVtpXS5hcHBseSh0aGlzW3NwYWNlXVtuYW1lXVtpXSwgYXJncyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIG1ldGhvZHMucmVtb3ZlQWxsTGlzdGVuZXJzID0gZnVuY3Rpb24obmFtZSkge1xuICAgIGlmICh0eXBlb2YgdGhpc1tzcGFjZV0gPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHNlbGZbc3BhY2VdW25hbWVdLmZvckVhY2goZnVuY3Rpb24oZm4pIHtcbiAgICAgIHNlbGYub2ZmKG5hbWUsIGZuKTtcbiAgICB9KTtcbiAgfTtcblxuICByZXR1cm4gbWV0aG9kcztcbn07XG5cbnZhciBwdnQgPSBFdmVudEVtaXR0ZXIuY3JlYXRlSW50ZXJmYWNlKCdfaGFuZGxlcnMnKTtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX29uID0gcHZ0Lm9uO1xuRXZlbnRFbWl0dGVyLnByb3RvdHlwZS5fb2ZmID0gcHZ0Lm9mZjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUuX3RyaWdnZXIgPSBwdnQudHJpZ2dlcjtcblxudmFyIHB1YiA9IEV2ZW50RW1pdHRlci5jcmVhdGVJbnRlcmZhY2UoJ2hhbmRsZXJzJyk7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9uID0gZnVuY3Rpb24oKSB7XG4gIHB1Yi5vbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICBBcnJheS5wcm90b3R5cGUudW5zaGlmdC5jYWxsKGFyZ3VtZW50cywgJ29uJyk7XG4gIHRoaXMuX3RyaWdnZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn07XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLm9mZiA9IHB1Yi5vZmY7XG5FdmVudEVtaXR0ZXIucHJvdG90eXBlLnRyaWdnZXIgPSBwdWIudHJpZ2dlcjtcbkV2ZW50RW1pdHRlci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzID0gcHViLnJlbW92ZUFsbExpc3RlbmVycztcblxubW9kdWxlLmV4cG9ydHMgPSBFdmVudEVtaXR0ZXI7XG4iLCIvLyBCYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZGl5L2ludGVyY29tLmpzL2Jsb2IvbWFzdGVyL2xpYi9pbnRlcmNvbS5qc1xuLy8gQ29weXJpZ2h0IDIwMTIgRElZIENvIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMFxuLy8gaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG5cbnZhciBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCcuL2V2ZW50ZW1pdHRlci5qcycpO1xudmFyIGd1aWQgPSByZXF1aXJlKCcuLi9zcmMvc2hhcmVkLmpzJykuZ3VpZDtcblxuZnVuY3Rpb24gdGhyb3R0bGUoZGVsYXksIGZuKSB7XG4gIHZhciBsYXN0ID0gMDtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgIGlmIChub3cgLSBsYXN0ID4gZGVsYXkpIHtcbiAgICAgIGxhc3QgPSBub3c7XG4gICAgICBmbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH1cbiAgfTtcbn1cblxuZnVuY3Rpb24gZXh0ZW5kKGEsIGIpIHtcbiAgaWYgKHR5cGVvZiBhID09PSAndW5kZWZpbmVkJyB8fCAhYSkgeyBhID0ge307IH1cbiAgaWYgKHR5cGVvZiBiID09PSAnb2JqZWN0Jykge1xuICAgIGZvciAodmFyIGtleSBpbiBiKSB7XG4gICAgICBpZiAoYi5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgIGFba2V5XSA9IGJba2V5XTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGE7XG59XG5cbnZhciBsb2NhbFN0b3JhZ2UgPSAoZnVuY3Rpb24od2luZG93KSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyB8fFxuICAgICAgdHlwZW9mIHdpbmRvdy5sb2NhbFN0b3JhZ2UgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGdldEl0ZW0gOiBmdW5jdGlvbigpIHt9LFxuICAgICAgc2V0SXRlbSA6IGZ1bmN0aW9uKCkge30sXG4gICAgICByZW1vdmVJdGVtIDogZnVuY3Rpb24oKSB7fVxuICAgIH07XG4gIH1cbiAgcmV0dXJuIHdpbmRvdy5sb2NhbFN0b3JhZ2U7XG59KGdsb2JhbCkpO1xuXG5mdW5jdGlvbiBJbnRlcmNvbSgpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcblxuICB0aGlzLm9yaWdpbiAgICAgICAgID0gZ3VpZCgpO1xuICB0aGlzLmxhc3RNZXNzYWdlICAgID0gbm93O1xuICB0aGlzLnJlY2VpdmVkSURzICAgID0ge307XG4gIHRoaXMucHJldmlvdXNWYWx1ZXMgPSB7fTtcblxuICB2YXIgc3RvcmFnZUhhbmRsZXIgPSBmdW5jdGlvbigpIHtcbiAgICBzZWxmLl9vblN0b3JhZ2VFdmVudC5hcHBseShzZWxmLCBhcmd1bWVudHMpO1xuICB9O1xuXG4gIC8vIElmIHdlJ3JlIGluIG5vZGUuanMsIHNraXAgZXZlbnQgcmVnaXN0cmF0aW9uXG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKGRvY3VtZW50LmF0dGFjaEV2ZW50KSB7XG4gICAgZG9jdW1lbnQuYXR0YWNoRXZlbnQoJ29uc3RvcmFnZScsIHN0b3JhZ2VIYW5kbGVyKTtcbiAgfSBlbHNlIHtcbiAgICBnbG9iYWwuYWRkRXZlbnRMaXN0ZW5lcignc3RvcmFnZScsIHN0b3JhZ2VIYW5kbGVyLCBmYWxzZSk7XG4gIH1cbn1cblxuSW50ZXJjb20ucHJvdG90eXBlLl90cmFuc2FjdGlvbiA9IGZ1bmN0aW9uKGZuKSB7XG4gIHZhciBUSU1FT1VUICAgPSAxMDAwO1xuICB2YXIgV0FJVCAgICAgID0gMjA7XG4gIHZhciBzZWxmICAgICAgPSB0aGlzO1xuICB2YXIgZXhlY3V0ZWQgID0gZmFsc2U7XG4gIHZhciBsaXN0ZW5pbmcgPSBmYWxzZTtcbiAgdmFyIHdhaXRUaW1lciA9IG51bGw7XG5cbiAgZnVuY3Rpb24gbG9jaygpIHtcbiAgICBpZiAoZXhlY3V0ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcbiAgICB2YXIgYWN0aXZlTG9jayA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKElOREVYX0xPQ0spfDA7XG4gICAgaWYgKGFjdGl2ZUxvY2sgJiYgbm93IC0gYWN0aXZlTG9jayA8IFRJTUVPVVQpIHtcbiAgICAgIGlmICghbGlzdGVuaW5nKSB7XG4gICAgICAgIHNlbGYuX29uKCdzdG9yYWdlJywgbG9jayk7XG4gICAgICAgIGxpc3RlbmluZyA9IHRydWU7XG4gICAgICB9XG4gICAgICB3YWl0VGltZXIgPSBzZXRUaW1lb3V0KGxvY2ssIFdBSVQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBleGVjdXRlZCA9IHRydWU7XG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oSU5ERVhfTE9DSywgbm93KTtcblxuICAgIGZuKCk7XG4gICAgdW5sb2NrKCk7XG4gIH1cblxuICBmdW5jdGlvbiB1bmxvY2soKSB7XG4gICAgaWYgKGxpc3RlbmluZykge1xuICAgICAgc2VsZi5fb2ZmKCdzdG9yYWdlJywgbG9jayk7XG4gICAgfVxuICAgIGlmICh3YWl0VGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh3YWl0VGltZXIpO1xuICAgIH1cbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShJTkRFWF9MT0NLKTtcbiAgfVxuXG4gIGxvY2soKTtcbn07XG5cbkludGVyY29tLnByb3RvdHlwZS5fY2xlYW51cF9lbWl0ID0gdGhyb3R0bGUoMTAwLCBmdW5jdGlvbigpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHNlbGYuX3RyYW5zYWN0aW9uKGZ1bmN0aW9uKCkge1xuICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgIHZhciB0aHJlc2hvbGQgPSBub3cgLSBUSFJFU0hPTERfVFRMX0VNSVQ7XG4gICAgdmFyIGNoYW5nZWQgPSAwO1xuICAgIHZhciBtZXNzYWdlcztcblxuICAgIHRyeSB7XG4gICAgICBtZXNzYWdlcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oSU5ERVhfRU1JVCkgfHwgJ1tdJyk7XG4gICAgfSBjYXRjaChlKSB7XG4gICAgICBtZXNzYWdlcyA9IFtdO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gbWVzc2FnZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGlmIChtZXNzYWdlc1tpXS50aW1lc3RhbXAgPCB0aHJlc2hvbGQpIHtcbiAgICAgICAgbWVzc2FnZXMuc3BsaWNlKGksIDEpO1xuICAgICAgICBjaGFuZ2VkKys7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChjaGFuZ2VkID4gMCkge1xuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oSU5ERVhfRU1JVCwgSlNPTi5zdHJpbmdpZnkobWVzc2FnZXMpKTtcbiAgICB9XG4gIH0pO1xufSk7XG5cbkludGVyY29tLnByb3RvdHlwZS5fY2xlYW51cF9vbmNlID0gdGhyb3R0bGUoMTAwLCBmdW5jdGlvbigpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIHNlbGYuX3RyYW5zYWN0aW9uKGZ1bmN0aW9uKCkge1xuICAgIHZhciB0aW1lc3RhbXAsIHR0bCwga2V5O1xuICAgIHZhciB0YWJsZTtcbiAgICB2YXIgbm93ICA9IERhdGUubm93KCk7XG4gICAgdmFyIGNoYW5nZWQgPSAwO1xuXG4gICAgdHJ5IHtcbiAgICAgIHRhYmxlID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShJTkRFWF9PTkNFKSB8fCAne30nKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIHRhYmxlID0ge307XG4gICAgfVxuICAgIGZvciAoa2V5IGluIHRhYmxlKSB7XG4gICAgICBpZiAoc2VsZi5fb25jZV9leHBpcmVkKGtleSwgdGFibGUpKSB7XG4gICAgICAgIGRlbGV0ZSB0YWJsZVtrZXldO1xuICAgICAgICBjaGFuZ2VkKys7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoYW5nZWQgPiAwKSB7XG4gICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShJTkRFWF9PTkNFLCBKU09OLnN0cmluZ2lmeSh0YWJsZSkpO1xuICAgIH1cbiAgfSk7XG59KTtcblxuSW50ZXJjb20ucHJvdG90eXBlLl9vbmNlX2V4cGlyZWQgPSBmdW5jdGlvbihrZXksIHRhYmxlKSB7XG4gIGlmICghdGFibGUpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAoIXRhYmxlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodHlwZW9mIHRhYmxlW2tleV0gIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB2YXIgdHRsID0gdGFibGVba2V5XS50dGwgfHwgVEhSRVNIT0xEX1RUTF9PTkNFO1xuICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcbiAgdmFyIHRpbWVzdGFtcCA9IHRhYmxlW2tleV0udGltZXN0YW1wO1xuICByZXR1cm4gdGltZXN0YW1wIDwgbm93IC0gdHRsO1xufTtcblxuSW50ZXJjb20ucHJvdG90eXBlLl9sb2NhbFN0b3JhZ2VDaGFuZ2VkID0gZnVuY3Rpb24oZXZlbnQsIGZpZWxkKSB7XG4gIGlmIChldmVudCAmJiBldmVudC5rZXkpIHtcbiAgICByZXR1cm4gZXZlbnQua2V5ID09PSBmaWVsZDtcbiAgfVxuXG4gIHZhciBjdXJyZW50VmFsdWUgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShmaWVsZCk7XG4gIGlmIChjdXJyZW50VmFsdWUgPT09IHRoaXMucHJldmlvdXNWYWx1ZXNbZmllbGRdKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHRoaXMucHJldmlvdXNWYWx1ZXNbZmllbGRdID0gY3VycmVudFZhbHVlO1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbkludGVyY29tLnByb3RvdHlwZS5fb25TdG9yYWdlRXZlbnQgPSBmdW5jdGlvbihldmVudCkge1xuICBldmVudCA9IGV2ZW50IHx8IGdsb2JhbC5ldmVudDtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gIGlmICh0aGlzLl9sb2NhbFN0b3JhZ2VDaGFuZ2VkKGV2ZW50LCBJTkRFWF9FTUlUKSkge1xuICAgIHRoaXMuX3RyYW5zYWN0aW9uKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7XG4gICAgICB2YXIgZGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKElOREVYX0VNSVQpO1xuICAgICAgdmFyIG1lc3NhZ2VzO1xuXG4gICAgICB0cnkge1xuICAgICAgICBtZXNzYWdlcyA9IEpTT04ucGFyc2UoZGF0YSB8fCAnW10nKTtcbiAgICAgIH0gY2F0Y2goZSkge1xuICAgICAgICBtZXNzYWdlcyA9IFtdO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXNzYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAobWVzc2FnZXNbaV0ub3JpZ2luID09PSBzZWxmLm9yaWdpbikgY29udGludWU7XG4gICAgICAgIGlmIChtZXNzYWdlc1tpXS50aW1lc3RhbXAgPCBzZWxmLmxhc3RNZXNzYWdlKSBjb250aW51ZTtcbiAgICAgICAgaWYgKG1lc3NhZ2VzW2ldLmlkKSB7XG4gICAgICAgICAgaWYgKHNlbGYucmVjZWl2ZWRJRHMuaGFzT3duUHJvcGVydHkobWVzc2FnZXNbaV0uaWQpKSBjb250aW51ZTtcbiAgICAgICAgICBzZWxmLnJlY2VpdmVkSURzW21lc3NhZ2VzW2ldLmlkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgc2VsZi50cmlnZ2VyKG1lc3NhZ2VzW2ldLm5hbWUsIG1lc3NhZ2VzW2ldLnBheWxvYWQpO1xuICAgICAgfVxuICAgICAgc2VsZi5sYXN0TWVzc2FnZSA9IG5vdztcbiAgICB9KTtcbiAgfVxuXG4gIHRoaXMuX3RyaWdnZXIoJ3N0b3JhZ2UnLCBldmVudCk7XG59O1xuXG5JbnRlcmNvbS5wcm90b3R5cGUuX2VtaXQgPSBmdW5jdGlvbihuYW1lLCBtZXNzYWdlLCBpZCkge1xuICBpZCA9ICh0eXBlb2YgaWQgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBpZCA9PT0gJ251bWJlcicpID8gU3RyaW5nKGlkKSA6IG51bGw7XG4gIGlmIChpZCAmJiBpZC5sZW5ndGgpIHtcbiAgICBpZiAodGhpcy5yZWNlaXZlZElEcy5oYXNPd25Qcm9wZXJ0eShpZCkpIHJldHVybjtcbiAgICB0aGlzLnJlY2VpdmVkSURzW2lkXSA9IHRydWU7XG4gIH1cblxuICB2YXIgcGFja2V0ID0ge1xuICAgIGlkICAgICAgICA6IGlkLFxuICAgIG5hbWUgICAgICA6IG5hbWUsXG4gICAgb3JpZ2luICAgIDogdGhpcy5vcmlnaW4sXG4gICAgdGltZXN0YW1wIDogRGF0ZS5ub3coKSxcbiAgICBwYXlsb2FkICAgOiBtZXNzYWdlXG4gIH07XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLl90cmFuc2FjdGlvbihmdW5jdGlvbigpIHtcbiAgICB2YXIgZGF0YSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKElOREVYX0VNSVQpIHx8ICdbXSc7XG4gICAgdmFyIGRlbGltaXRlciA9IChkYXRhID09PSAnW10nKSA/ICcnIDogJywnO1xuICAgIGRhdGEgPSBbZGF0YS5zdWJzdHJpbmcoMCwgZGF0YS5sZW5ndGggLSAxKSwgZGVsaW1pdGVyLCBKU09OLnN0cmluZ2lmeShwYWNrZXQpLCAnXSddLmpvaW4oJycpO1xuICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKElOREVYX0VNSVQsIGRhdGEpO1xuICAgIHNlbGYudHJpZ2dlcihuYW1lLCBtZXNzYWdlKTtcblxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICBzZWxmLl9jbGVhbnVwX2VtaXQoKTtcbiAgICB9LCA1MCk7XG4gIH0pO1xufTtcblxuSW50ZXJjb20ucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbihuYW1lLCBtZXNzYWdlKSB7XG4gIHRoaXMuX2VtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgdGhpcy5fdHJpZ2dlcignZW1pdCcsIG5hbWUsIG1lc3NhZ2UpO1xufTtcblxuSW50ZXJjb20ucHJvdG90eXBlLm9uY2UgPSBmdW5jdGlvbihrZXksIGZuLCB0dGwpIHtcbiAgaWYgKCFJbnRlcmNvbS5zdXBwb3J0ZWQpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHRoaXMuX3RyYW5zYWN0aW9uKGZ1bmN0aW9uKCkge1xuICAgIHZhciBkYXRhO1xuICAgIHRyeSB7XG4gICAgICBkYXRhID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbShJTkRFWF9PTkNFKSB8fCAne30nKTtcbiAgICB9IGNhdGNoKGUpIHtcbiAgICAgIGRhdGEgPSB7fTtcbiAgICB9XG4gICAgaWYgKCFzZWxmLl9vbmNlX2V4cGlyZWQoa2V5LCBkYXRhKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGRhdGFba2V5XSA9IHt9O1xuICAgIGRhdGFba2V5XS50aW1lc3RhbXAgPSBEYXRlLm5vdygpO1xuICAgIGlmICh0eXBlb2YgdHRsID09PSAnbnVtYmVyJykge1xuICAgICAgZGF0YVtrZXldLnR0bCA9IHR0bCAqIDEwMDA7XG4gICAgfVxuXG4gICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oSU5ERVhfT05DRSwgSlNPTi5zdHJpbmdpZnkoZGF0YSkpO1xuICAgIGZuKCk7XG5cbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgc2VsZi5fY2xlYW51cF9vbmNlKCk7XG4gICAgfSwgNTApO1xuICB9KTtcbn07XG5cbmV4dGVuZChJbnRlcmNvbS5wcm90b3R5cGUsIEV2ZW50RW1pdHRlci5wcm90b3R5cGUpO1xuXG5JbnRlcmNvbS5zdXBwb3J0ZWQgPSAodHlwZW9mIGxvY2FsU3RvcmFnZSAhPT0gJ3VuZGVmaW5lZCcpO1xuXG52YXIgSU5ERVhfRU1JVCA9ICdpbnRlcmNvbSc7XG52YXIgSU5ERVhfT05DRSA9ICdpbnRlcmNvbV9vbmNlJztcbnZhciBJTkRFWF9MT0NLID0gJ2ludGVyY29tX2xvY2snO1xuXG52YXIgVEhSRVNIT0xEX1RUTF9FTUlUID0gNTAwMDA7XG52YXIgVEhSRVNIT0xEX1RUTF9PTkNFID0gMTAwMCAqIDM2MDA7XG5cbkludGVyY29tLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHtcbiAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oSU5ERVhfTE9DSyk7XG4gIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKElOREVYX0VNSVQpO1xuICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShJTkRFWF9PTkNFKTtcbn07XG5cbkludGVyY29tLmdldEluc3RhbmNlID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgaW50ZXJjb207XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICBpZiAoIWludGVyY29tKSB7XG4gICAgICBpbnRlcmNvbSA9IG5ldyBJbnRlcmNvbSgpO1xuICAgIH1cbiAgICByZXR1cm4gaW50ZXJjb207XG4gIH07XG59KSgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEludGVyY29tO1xuIiwiY29uc3QgeyBGaWxlU3lzdGVtIH0gPSByZXF1aXJlKCcuLi9zcmMvaW5kZXgnKTtcblxubGV0IFByb3ZpZGVyO1xudHJ5IHtcbiAgUHJvdmlkZXIgPSByZXF1aXJlKCdmc1Byb3ZpZGVyJyk7XG59XG5jYXRjaCAoZXJyKSB7XG4gIFByb3ZpZGVyID0gcmVxdWlyZSgnLi9wcm92aWRlcnMvZGVmYXVsdCcpO1xufVxuXG5jb25zdCBwcm92aWRlciA9IG5ldyBQcm92aWRlcigpO1xuXG5sZXQgb25Gc1JlYWR5O1xubGV0IG9uRnNFcnJvcjtcblxubGV0IGZzUmVhZHkgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gIG9uRnNSZWFkeSA9IHJlc29sdmU7XG4gIG9uRnNFcnJvciA9IHJlamVjdDtcbn0pO1xuXG52YXIgZnNJbnN0YW5jZSA9IG5ldyBGaWxlU3lzdGVtKHsgcHJvdmlkZXIgfSwgKGVycikgPT4ge1xuICBpZiAoZXJyKSB7XG4gICAgb25Gc0Vycm9yKGVycik7XG4gIH0gZWxzZSB7XG4gICAgb25Gc1JlYWR5KHRydWUpO1xuICB9XG59KTtcblxuZnVuY3Rpb24gcHJveHlIYXNQcm9wKHRhcmdldCwgcHJvcCkge1xuICByZXR1cm4gcHJvcCBpbiB0YXJnZXQ7XG59XG5cbmNvbnN0IGZzUHJvbWlzZXMgPSBuZXcgUHJveHkoZnNJbnN0YW5jZS5wcm9taXNlcywge1xuICBnZXQodGFyZ2V0LCBwcm9wKSB7XG4gICAgaWYgKCFwcm94eUhhc1Byb3AodGFyZ2V0LCBwcm9wKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiBhc3luYyAoLi4uYXJncykgPT4ge1xuICAgICAgYXdhaXQgZnNSZWFkeTtcbiAgICAgIHJldHVybiBhd2FpdCB0YXJnZXRbcHJvcF0oLi4uYXJncyk7XG4gICAgfTtcbiAgfSxcbn0pO1xuXG5jb25zdCBmcyA9IG5ldyBQcm94eShmc0luc3RhbmNlLCB7XG4gIGdldCh0YXJnZXQsIHByb3ApIHtcbiAgICBpZiAoIXByb3h5SGFzUHJvcCh0YXJnZXQsIHByb3ApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHByb3AgPT09ICdwcm9taXNlcycpIHtcbiAgICAgIHJldHVybiBmc1Byb21pc2VzO1xuICAgIH1cblxuICAgIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgICAgKGFzeW5jICgpID0+IHtcbiAgICAgICAgYXdhaXQgZnNSZWFkeTtcbiAgICAgICAgdGFyZ2V0W3Byb3BdKC4uLmFyZ3MpO1xuICAgICAgfSkoKTtcbiAgICB9O1xuICB9LFxufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnM7XG4iLCJjb25zdCB7IHBhdGggfSA9IHJlcXVpcmUoJy4uL3NyYy9pbmRleCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHBhdGg7XG4iLCJjb25zdCB7IERlZmF1bHQgfSA9IHJlcXVpcmUoJy4uLy4uL3NyYy9wcm92aWRlcnMvaW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gRGVmYXVsdDsiLCJ2YXIgT19SRUFEID0gJ1JFQUQnO1xudmFyIE9fV1JJVEUgPSAnV1JJVEUnO1xudmFyIE9fQ1JFQVRFID0gJ0NSRUFURSc7XG52YXIgT19FWENMVVNJVkUgPSAnRVhDTFVTSVZFJztcbnZhciBPX1RSVU5DQVRFID0gJ1RSVU5DQVRFJztcbnZhciBPX0FQUEVORCA9ICdBUFBFTkQnO1xudmFyIFhBVFRSX0NSRUFURSA9ICdDUkVBVEUnO1xudmFyIFhBVFRSX1JFUExBQ0UgPSAnUkVQTEFDRSc7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBGSUxFX1NZU1RFTV9OQU1FOiAnbG9jYWwnLFxuXG4gIEZJTEVfU1RPUkVfTkFNRTogJ2ZpbGVzJyxcblxuICBJREJfUk86ICdyZWFkb25seScsXG4gIElEQl9SVzogJ3JlYWR3cml0ZScsXG5cbiAgV1NRTF9WRVJTSU9OOiAnMScsXG4gIFdTUUxfU0laRTogNSAqIDEwMjQgKiAxMDI0LFxuICBXU1FMX0RFU0M6ICdGaWxlU3lzdGVtIFN0b3JhZ2UnLFxuXG4gIE5PREVfVFlQRV9GSUxFOiAnRklMRScsXG4gIE5PREVfVFlQRV9ESVJFQ1RPUlk6ICdESVJFQ1RPUlknLFxuICBOT0RFX1RZUEVfU1lNQk9MSUNfTElOSzogJ1NZTUxJTksnLFxuICBOT0RFX1RZUEVfTUVUQTogJ01FVEEnLFxuXG5cbiAgREVGQVVMVF9ESVJfUEVSTUlTU0lPTlM6IDB4MUVELCAvLyA3NTVcbiAgREVGQVVMVF9GSUxFX1BFUk1JU1NJT05TOiAweDFBNCwgLy8gNjQ0XG4gIEZVTExfUkVBRF9XUklURV9FWEVDX1BFUk1JU1NJT05TOiAweDFGRiwgLy8gNzc3XG4gIFJFQURfV1JJVEVfUEVSTUlTU0lPTlM6IDB4MUI2LCAvLy8gNjY2XG4gIFxuICBTWU1MT09QX01BWDogMTAsXG5cbiAgQklOQVJZX01JTUVfVFlQRTogJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsXG4gIEpTT05fTUlNRV9UWVBFOiAnYXBwbGljYXRpb24vanNvbicsXG5cbiAgUk9PVF9ESVJFQ1RPUllfTkFNRTogJy8nLCAvLyBiYXNlbmFtZShub3JtYWxpemUocGF0aCkpXG5cbiAgLy8gRlMgTW91bnQgRmxhZ3NcbiAgRlNfRk9STUFUOiAnRk9STUFUJyxcbiAgRlNfTk9DVElNRTogJ05PQ1RJTUUnLFxuICBGU19OT01USU1FOiAnTk9NVElNRScsXG4gIEZTX05PRFVQRUlEQ0hFQ0s6ICdGU19OT0RVUEVJRENIRUNLJyxcblxuICAvLyBGUyBGaWxlIE9wZW4gRmxhZ3NcbiAgT19SRUFEOiBPX1JFQUQsXG4gIE9fV1JJVEU6IE9fV1JJVEUsXG4gIE9fQ1JFQVRFOiBPX0NSRUFURSxcbiAgT19FWENMVVNJVkU6IE9fRVhDTFVTSVZFLFxuICBPX1RSVU5DQVRFOiBPX1RSVU5DQVRFLFxuICBPX0FQUEVORDogT19BUFBFTkQsXG5cbiAgT19GTEFHUzoge1xuICAgICdyJzogW09fUkVBRF0sXG4gICAgJ3IrJzogW09fUkVBRCwgT19XUklURV0sXG4gICAgJ3cnOiBbT19XUklURSwgT19DUkVBVEUsIE9fVFJVTkNBVEVdLFxuICAgICd3Kyc6IFtPX1dSSVRFLCBPX1JFQUQsIE9fQ1JFQVRFLCBPX1RSVU5DQVRFXSxcbiAgICAnd3gnOiBbT19XUklURSwgT19DUkVBVEUsIE9fRVhDTFVTSVZFLCBPX1RSVU5DQVRFXSxcbiAgICAnd3grJzogW09fV1JJVEUsIE9fUkVBRCwgT19DUkVBVEUsIE9fRVhDTFVTSVZFLCBPX1RSVU5DQVRFXSxcbiAgICAnYSc6IFtPX1dSSVRFLCBPX0NSRUFURSwgT19BUFBFTkRdLFxuICAgICdhKyc6IFtPX1dSSVRFLCBPX1JFQUQsIE9fQ1JFQVRFLCBPX0FQUEVORF0sXG4gICAgJ2F4JzogW09fV1JJVEUsIE9fQ1JFQVRFLCBPX0VYQ0xVU0lWRSwgT19BUFBFTkRdLFxuICAgICdheCsnOiBbT19XUklURSwgT19SRUFELCBPX0NSRUFURSwgT19FWENMVVNJVkUsIE9fQVBQRU5EXVxuICB9LFxuXG4gIFhBVFRSX0NSRUFURTogWEFUVFJfQ1JFQVRFLFxuICBYQVRUUl9SRVBMQUNFOiBYQVRUUl9SRVBMQUNFLFxuXG4gIEZTX1JFQURZOiAnUkVBRFknLFxuICBGU19QRU5ESU5HOiAnUEVORElORycsXG4gIEZTX0VSUk9SOiAnRVJST1InLFxuXG4gIFNVUEVSX05PREVfSUQ6ICcwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDAnLFxuXG4gIC8vIFJlc2VydmVkIEZpbGUgRGVzY3JpcHRvcnMgZm9yIHN0cmVhbXNcbiAgU1RESU46IDAsXG4gIFNURE9VVDogMSxcbiAgU1RERVJSOiAyLFxuICBGSVJTVF9ERVNDUklQVE9SOiAzLFxuXG4gIEVOVklST05NRU5UOiB7XG4gICAgVE1QOiAnL3RtcCcsXG4gICAgUEFUSDogJydcbiAgfSxcblxuICAvLyBEdXBsaWNhdGUgTm9kZSdzIGZzLmNvbnN0YW50c1xuICBmc0NvbnN0YW50czoge1xuICAgIE9fUkRPTkxZOiAwLFxuICAgIE9fV1JPTkxZOiAxLFxuICAgIE9fUkRXUjogMixcbiAgICBTX0lGTVQ6IDYxNDQwLFxuICAgIFNfSUZSRUc6IDMyNzY4LFxuICAgIFNfSUZESVI6IDE2Mzg0LFxuICAgIFNfSUZDSFI6IDgxOTIsXG4gICAgU19JRkJMSzogMjQ1NzYsXG4gICAgU19JRklGTzogNDA5NixcbiAgICBTX0lGTE5LOiA0MDk2MCxcbiAgICBTX0lGU09DSzogNDkxNTIsXG4gICAgT19DUkVBVDogNTEyLFxuICAgIE9fRVhDTDogMjA0OCxcbiAgICBPX05PQ1RUWTogMTMxMDcyLFxuICAgIE9fVFJVTkM6IDEwMjQsXG4gICAgT19BUFBFTkQ6IDgsXG4gICAgT19ESVJFQ1RPUlk6IDEwNDg1NzYsXG4gICAgT19OT0ZPTExPVzogMjU2LFxuICAgIE9fU1lOQzogMTI4LFxuICAgIE9fRFNZTkM6IDQxOTQzMDQsXG4gICAgT19TWU1MSU5LOiAyMDk3MTUyLFxuICAgIE9fTk9OQkxPQ0s6IDQsXG4gICAgU19JUldYVTogNDQ4LFxuICAgIFNfSVJVU1I6IDI1NixcbiAgICBTX0lXVVNSOiAxMjgsXG4gICAgU19JWFVTUjogNjQsXG4gICAgU19JUldYRzogNTYsXG4gICAgU19JUkdSUDogMzIsXG4gICAgU19JV0dSUDogMTYsXG4gICAgU19JWEdSUDogOCxcbiAgICBTX0lSV1hPOiA3LFxuICAgIFNfSVJPVEg6IDQsXG4gICAgU19JV09USDogMixcbiAgICBTX0lYT1RIOiAxLFxuICAgIEZfT0s6IDAsXG4gICAgUl9PSzogNCxcbiAgICBXX09LOiAyLFxuICAgIFhfT0s6IDEsXG4gICAgVVZfRlNfQ09QWUZJTEVfRVhDTDogMSxcbiAgICBDT1BZRklMRV9FWENMOiAxXG4gIH1cbn07XG4iLCJ2YXIgTk9ERV9UWVBFX0ZJTEUgPSByZXF1aXJlKCcuL2NvbnN0YW50cy5qcycpLk5PREVfVFlQRV9GSUxFO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIERpcmVjdG9yeUVudHJ5KGlkLCB0eXBlKSB7XG4gIHRoaXMuaWQgPSBpZDtcbiAgdGhpcy50eXBlID0gdHlwZSB8fCBOT0RFX1RZUEVfRklMRTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbmNvbnN0IFN0YXRzID0gcmVxdWlyZSgnLi9zdGF0cy5qcycpO1xuXG5mdW5jdGlvbiBEaXJlbnQocGF0aCwgZmlsZU5vZGUsIGRldk5hbWUpIHtcbiAgdGhpcy5jb25zdHJ1Y3RvciA9IERpcmVudDtcbiAgU3RhdHMuY2FsbCh0aGlzLCBwYXRoLCBmaWxlTm9kZSwgZGV2TmFtZSk7XG59XG5cbkRpcmVudC5wcm90b3R5cGUgPSBTdGF0cy5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gRGlyZW50O1xuIiwidmFyIGVycm9ycyA9IHt9O1xuW1xuICAvKipcbiAgICogbm9kZS5qcyBlcnJvcnMgLSB3ZSBvbmx5IHVzZSBzb21lIG9mIHRoZXNlLCBhZGQgYXMgbmVlZGVkLlxuICAgKi9cbiAgLy8nLTE6VU5LTk9XTjp1bmtub3duIGVycm9yJyxcbiAgLy8nMDpPSzpzdWNjZXNzJyxcbiAgLy8nMTpFT0Y6ZW5kIG9mIGZpbGUnLFxuICAvLycyOkVBRERSSU5GTzpnZXRhZGRyaW5mbyBlcnJvcicsXG4gICczOkVBQ0NFUzpwZXJtaXNzaW9uIGRlbmllZCcsXG4gIC8vJzQ6RUFHQUlOOnJlc291cmNlIHRlbXBvcmFyaWx5IHVuYXZhaWxhYmxlJyxcbiAgLy8nNTpFQUREUklOVVNFOmFkZHJlc3MgYWxyZWFkeSBpbiB1c2UnLFxuICAvLyc2OkVBRERSTk9UQVZBSUw6YWRkcmVzcyBub3QgYXZhaWxhYmxlJyxcbiAgLy8nNzpFQUZOT1NVUFBPUlQ6YWRkcmVzcyBmYW1pbHkgbm90IHN1cHBvcnRlZCcsXG4gIC8vJzg6RUFMUkVBRFk6Y29ubmVjdGlvbiBhbHJlYWR5IGluIHByb2dyZXNzJyxcbiAgJzk6RUJBREY6YmFkIGZpbGUgZGVzY3JpcHRvcicsXG4gICcxMDpFQlVTWTpyZXNvdXJjZSBidXN5IG9yIGxvY2tlZCcsXG4gIC8vJzExOkVDT05OQUJPUlRFRDpzb2Z0d2FyZSBjYXVzZWQgY29ubmVjdGlvbiBhYm9ydCcsXG4gIC8vJzEyOkVDT05OUkVGVVNFRDpjb25uZWN0aW9uIHJlZnVzZWQnLFxuICAvLycxMzpFQ09OTlJFU0VUOmNvbm5lY3Rpb24gcmVzZXQgYnkgcGVlcicsXG4gIC8vJzE0OkVERVNUQUREUlJFUTpkZXN0aW5hdGlvbiBhZGRyZXNzIHJlcXVpcmVkJyxcbiAgLy8nMTU6RUZBVUxUOmJhZCBhZGRyZXNzIGluIHN5c3RlbSBjYWxsIGFyZ3VtZW50JyxcbiAgLy8nMTY6RUhPU1RVTlJFQUNIOmhvc3QgaXMgdW5yZWFjaGFibGUnLFxuICAvLycxNzpFSU5UUjppbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbCcsXG4gICcxODpFSU5WQUw6aW52YWxpZCBhcmd1bWVudCcsXG4gIC8vJzE5OkVJU0NPTk46c29ja2V0IGlzIGFscmVhZHkgY29ubmVjdGVkJyxcbiAgLy8nMjA6RU1GSUxFOnRvbyBtYW55IG9wZW4gZmlsZXMnLFxuICAvLycyMTpFTVNHU0laRTptZXNzYWdlIHRvbyBsb25nJyxcbiAgLy8nMjI6RU5FVERPV046bmV0d29yayBpcyBkb3duJyxcbiAgLy8nMjM6RU5FVFVOUkVBQ0g6bmV0d29yayBpcyB1bnJlYWNoYWJsZScsXG4gIC8vJzI0OkVORklMRTpmaWxlIHRhYmxlIG92ZXJmbG93JyxcbiAgLy8nMjU6RU5PQlVGUzpubyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlJyxcbiAgLy8nMjY6RU5PTUVNOm5vdCBlbm91Z2ggbWVtb3J5JyxcbiAgJzI3OkVOT1RESVI6bm90IGEgZGlyZWN0b3J5JyxcbiAgJzI4OkVJU0RJUjppbGxlZ2FsIG9wZXJhdGlvbiBvbiBhIGRpcmVjdG9yeScsXG4gIC8vJzI5OkVOT05FVDptYWNoaW5lIGlzIG5vdCBvbiB0aGUgbmV0d29yaycsXG4gIC8vIGVycm5vIDMwIHNraXBwZWQsIGFzIHBlciBodHRwczovL2dpdGh1Yi5jb20vcnZhZ2cvbm9kZS1lcnJuby9ibG9iL21hc3Rlci9lcnJuby5qc1xuICAvLyczMTpFTk9UQ09OTjpzb2NrZXQgaXMgbm90IGNvbm5lY3RlZCcsXG4gIC8vJzMyOkVOT1RTT0NLOnNvY2tldCBvcGVyYXRpb24gb24gbm9uLXNvY2tldCcsXG4gIC8vJzMzOkVOT1RTVVA6b3BlcmF0aW9uIG5vdCBzdXBwb3J0ZWQgb24gc29ja2V0JyxcbiAgJzM0OkVOT0VOVDpubyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5JyxcbiAgLy8nMzU6RU5PU1lTOmZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZCcsXG4gIC8vJzM2OkVQSVBFOmJyb2tlbiBwaXBlJyxcbiAgLy8nMzc6RVBST1RPOnByb3RvY29sIGVycm9yJyxcbiAgLy8nMzg6RVBST1RPTk9TVVBQT1JUOnByb3RvY29sIG5vdCBzdXBwb3J0ZWQnLFxuICAvLyczOTpFUFJPVE9UWVBFOnByb3RvY29sIHdyb25nIHR5cGUgZm9yIHNvY2tldCcsXG4gIC8vJzQwOkVUSU1FRE9VVDpjb25uZWN0aW9uIHRpbWVkIG91dCcsXG4gIC8vJzQxOkVDSEFSU0VUOmludmFsaWQgVW5pY29kZSBjaGFyYWN0ZXInLFxuICAvLyc0MjpFQUlGQU1OT1NVUFBPUlQ6YWRkcmVzcyBmYW1pbHkgZm9yIGhvc3RuYW1lIG5vdCBzdXBwb3J0ZWQnLFxuICAvLyBlcnJubyA0MyBza2lwcGVkLCBhcyBwZXIgaHR0cHM6Ly9naXRodWIuY29tL3J2YWdnL25vZGUtZXJybm8vYmxvYi9tYXN0ZXIvZXJybm8uanNcbiAgLy8nNDQ6RUFJU0VSVklDRTpzZXJ2bmFtZSBub3Qgc3VwcG9ydGVkIGZvciBhaV9zb2NrdHlwZScsXG4gIC8vJzQ1OkVBSVNPQ0tUWVBFOmFpX3NvY2t0eXBlIG5vdCBzdXBwb3J0ZWQnLFxuICAvLyc0NjpFU0hVVERPV046Y2Fubm90IHNlbmQgYWZ0ZXIgdHJhbnNwb3J0IGVuZHBvaW50IHNodXRkb3duJyxcbiAgJzQ3OkVFWElTVDpmaWxlIGFscmVhZHkgZXhpc3RzJyxcbiAgLy8nNDg6RVNSQ0g6bm8gc3VjaCBwcm9jZXNzJyxcbiAgLy8nNDk6RU5BTUVUT09MT05HOm5hbWUgdG9vIGxvbmcnLFxuICAnNTA6RVBFUk06b3BlcmF0aW9uIG5vdCBwZXJtaXR0ZWQnLFxuICAnNTE6RUxPT1A6dG9vIG1hbnkgc3ltYm9saWMgbGlua3MgZW5jb3VudGVyZWQnLFxuICAvLyc1MjpFWERFVjpjcm9zcy1kZXZpY2UgbGluayBub3QgcGVybWl0dGVkJyxcbiAgJzUzOkVOT1RFTVBUWTpkaXJlY3Rvcnkgbm90IGVtcHR5JyxcbiAgLy8nNTQ6RU5PU1BDOm5vIHNwYWNlIGxlZnQgb24gZGV2aWNlJyxcbiAgJzU1OkVJTzppL28gZXJyb3InLFxuICAvLyc1NjpFUk9GUzpyZWFkLW9ubHkgZmlsZSBzeXN0ZW0nLFxuICAvLyc1NzpFTk9ERVY6bm8gc3VjaCBkZXZpY2UnLFxuICAvLyc1ODpFU1BJUEU6aW52YWxpZCBzZWVrJyxcbiAgLy8nNTk6RUNBTkNFTEVEOm9wZXJhdGlvbiBjYW5jZWxlZCcsXG5cbiAgLyoqXG4gICAqIEZpbGVyIHNwZWNpZmljIGVycm9yc1xuICAgKi9cbiAgJzEwMDA6RU5PVE1PVU5URUQ6bm90IG1vdW50ZWQnLFxuICAnMTAwMTpFRklMRVNZU1RFTUVSUk9SOm1pc3Npbmcgc3VwZXIgbm9kZSwgdXNlIFxcJ0ZPUk1BVFxcJyBmbGFnIHRvIGZvcm1hdCBmaWxlc3lzdGVtLicsXG4gICcxMDAyOkVOT0FUVFI6YXR0cmlidXRlIGRvZXMgbm90IGV4aXN0J1xuXG5dLmZvckVhY2goZnVuY3Rpb24oZSkge1xuICBlID0gZS5zcGxpdCgnOicpO1xuICB2YXIgZXJybm8gPSArZVswXTtcbiAgdmFyIGVyck5hbWUgPSBlWzFdO1xuICB2YXIgZGVmYXVsdE1lc3NhZ2UgPSBlWzJdO1xuXG4gIGZ1bmN0aW9uIEZpbGVyRXJyb3IobXNnLCBwYXRoKSB7XG4gICAgRXJyb3IuY2FsbCh0aGlzKTtcblxuICAgIHRoaXMubmFtZSA9IGVyck5hbWU7XG4gICAgdGhpcy5jb2RlID0gZXJyTmFtZTtcbiAgICB0aGlzLmVycm5vID0gZXJybm87XG4gICAgdGhpcy5tZXNzYWdlID0gbXNnIHx8IGRlZmF1bHRNZXNzYWdlO1xuICAgIGlmKHBhdGgpIHtcbiAgICAgIHRoaXMucGF0aCA9IHBhdGg7XG4gICAgfVxuICAgIHRoaXMuc3RhY2sgPSAobmV3IEVycm9yKHRoaXMubWVzc2FnZSkpLnN0YWNrO1xuICB9XG4gIEZpbGVyRXJyb3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpO1xuICBGaWxlckVycm9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZpbGVyRXJyb3I7XG4gIEZpbGVyRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHBhdGhJbmZvID0gdGhpcy5wYXRoID8gKCcsIFxcJycgKyB0aGlzLnBhdGggKyAnXFwnJykgOiAnJztcbiAgICByZXR1cm4gdGhpcy5uYW1lICsgJzogJyArIHRoaXMubWVzc2FnZSArIHBhdGhJbmZvO1xuICB9O1xuXG4gIC8vIFdlIGV4cG9zZSB0aGUgZXJyb3IgYXMgYm90aCBFcnJvcnMuRUlOVkFMIGFuZCBFcnJvcnNbMThdXG4gIGVycm9yc1tlcnJOYW1lXSA9IGVycm9yc1tlcnJub10gPSBGaWxlckVycm9yO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZXJyb3JzO1xuIiwidmFyIFBhdGggPSByZXF1aXJlKCcuLi9wYXRoLmpzJyk7XG52YXIgbm9ybWFsaXplID0gUGF0aC5ub3JtYWxpemU7XG52YXIgZGlybmFtZSA9IFBhdGguZGlybmFtZTtcbnZhciBiYXNlbmFtZSA9IFBhdGguYmFzZW5hbWU7XG52YXIgaXNBYnNvbHV0ZVBhdGggPSBQYXRoLmlzQWJzb2x1dGU7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vc2hhcmVkLmpzJyk7XG52YXIgYXN5bmMgPSByZXF1aXJlKCcuLi8uLi9saWIvYXN5bmMuanMnKTtcblxudmFyIENvbnN0YW50cyA9IHJlcXVpcmUoJy4uL2NvbnN0YW50cy5qcycpO1xudmFyIE5PREVfVFlQRV9GSUxFID0gQ29uc3RhbnRzLk5PREVfVFlQRV9GSUxFO1xudmFyIE5PREVfVFlQRV9ESVJFQ1RPUlkgPSBDb25zdGFudHMuTk9ERV9UWVBFX0RJUkVDVE9SWTtcbnZhciBOT0RFX1RZUEVfU1lNQk9MSUNfTElOSyA9IENvbnN0YW50cy5OT0RFX1RZUEVfU1lNQk9MSUNfTElOSztcbnZhciBOT0RFX1RZUEVfTUVUQSA9IENvbnN0YW50cy5OT0RFX1RZUEVfTUVUQTtcblxudmFyIEZVTExfUkVBRF9XUklURV9FWEVDX1BFUk1JU1NJT05TID0gQ29uc3RhbnRzLkZVTExfUkVBRF9XUklURV9FWEVDX1BFUk1JU1NJT05TO1xuXG52YXIgUk9PVF9ESVJFQ1RPUllfTkFNRSA9IENvbnN0YW50cy5ST09UX0RJUkVDVE9SWV9OQU1FO1xudmFyIFNVUEVSX05PREVfSUQgPSBDb25zdGFudHMuU1VQRVJfTk9ERV9JRDtcbnZhciBTWU1MT09QX01BWCA9IENvbnN0YW50cy5TWU1MT09QX01BWDtcblxudmFyIE9fUkVBRCA9IENvbnN0YW50cy5PX1JFQUQ7XG52YXIgT19XUklURSA9IENvbnN0YW50cy5PX1dSSVRFO1xudmFyIE9fQ1JFQVRFID0gQ29uc3RhbnRzLk9fQ1JFQVRFO1xudmFyIE9fRVhDTFVTSVZFID0gQ29uc3RhbnRzLk9fRVhDTFVTSVZFO1xudmFyIE9fQVBQRU5EID0gQ29uc3RhbnRzLk9fQVBQRU5EO1xudmFyIE9fRkxBR1MgPSBDb25zdGFudHMuT19GTEFHUztcblxudmFyIFhBVFRSX0NSRUFURSA9IENvbnN0YW50cy5YQVRUUl9DUkVBVEU7XG52YXIgWEFUVFJfUkVQTEFDRSA9IENvbnN0YW50cy5YQVRUUl9SRVBMQUNFO1xudmFyIEZTX05PTVRJTUUgPSBDb25zdGFudHMuRlNfTk9NVElNRTtcbnZhciBGU19OT0NUSU1FID0gQ29uc3RhbnRzLkZTX05PQ1RJTUU7XG5cbnZhciBFcnJvcnMgPSByZXF1aXJlKCcuLi9lcnJvcnMuanMnKTtcbnZhciBEaXJlY3RvcnlFbnRyeSA9IHJlcXVpcmUoJy4uL2RpcmVjdG9yeS1lbnRyeS5qcycpO1xudmFyIG9wZW5GaWxlcyA9IHJlcXVpcmUoJy4uL29wZW4tZmlsZXMuanMnKTtcbnZhciBPcGVuRmlsZURlc2NyaXB0aW9uID0gcmVxdWlyZSgnLi4vb3Blbi1maWxlLWRlc2NyaXB0aW9uLmpzJyk7XG52YXIgU3VwZXJOb2RlID0gcmVxdWlyZSgnLi4vc3VwZXItbm9kZS5qcycpO1xudmFyIE5vZGUgPSByZXF1aXJlKCcuLi9ub2RlLmpzJyk7XG52YXIgRGlyZW50ID0gcmVxdWlyZSgnLi4vZGlyZW50LmpzJyk7XG52YXIgU3RhdHMgPSByZXF1aXJlKCcuLi9zdGF0cy5qcycpO1xuXG4vKipcbiAqIFVwZGF0ZSBub2RlIHRpbWVzLiBPbmx5IHBhc3NlZCB0aW1lcyBhcmUgbW9kaWZpZWQgKHVuZGVmaW5lZCB0aW1lcyBhcmUgaWdub3JlZClcbiAqIGFuZCBmaWxlc3lzdGVtIGZsYWdzIGFyZSBleGFtaW5lZCBpbiBvcmRlciB0byBvdmVycmlkZSB1cGRhdGUgbG9naWMuXG4gKi9cbmZ1bmN0aW9uIHVwZGF0ZV9ub2RlX3RpbWVzKGNvbnRleHQsIHBhdGgsIG5vZGUsIHRpbWVzLCBjYWxsYmFjaykge1xuICAvLyBIb25vdXIgbW91bnQgZmxhZ3MgZm9yIGhvdyB3ZSB1cGRhdGUgdGltZXNcbiAgdmFyIGZsYWdzID0gY29udGV4dC5mbGFncztcbiAgaWYoZmxhZ3MuaW5jbHVkZXMoRlNfTk9DVElNRSkpIHtcbiAgICBkZWxldGUgdGltZXMuY3RpbWU7XG4gIH1cbiAgaWYoZmxhZ3MuaW5jbHVkZXMoRlNfTk9NVElNRSkpIHtcbiAgICBkZWxldGUgdGltZXMubXRpbWU7XG4gIH1cblxuICAvLyBPbmx5IGRvIHRoZSB1cGRhdGUgaWYgcmVxdWlyZWQgKGkuZS4sIHRpbWVzIGFyZSBzdGlsbCBwcmVzZW50KVxuICB2YXIgdXBkYXRlID0gZmFsc2U7XG4gIGlmKHRpbWVzLmN0aW1lKSB7XG4gICAgbm9kZS5jdGltZSA9IHRpbWVzLmN0aW1lO1xuICAgIC8vIFdlIGRvbid0IGRvIGF0aW1lIHRyYWNraW5nIGZvciBwZXJmIHJlYXNvbnMsIGJ1dCBkbyBtaXJyb3IgY3RpbWVcbiAgICBub2RlLmF0aW1lID0gdGltZXMuY3RpbWU7XG4gICAgdXBkYXRlID0gdHJ1ZTtcbiAgfVxuICBpZih0aW1lcy5hdGltZSkge1xuICAgIC8vIFRoZSBvbmx5IHRpbWUgd2UgZXhwbGljaXRseSBwYXNzIGF0aW1lIGlzIHdoZW4gdXRpbWVzKCksIGZ1dGltZXMoKSBpcyBjYWxsZWQuXG4gICAgLy8gT3ZlcnJpZGUgY3RpbWUgbWlycm9yIGhlcmUgaWYgc29cbiAgICBub2RlLmF0aW1lID0gdGltZXMuYXRpbWU7XG4gICAgdXBkYXRlID0gdHJ1ZTtcbiAgfVxuICBpZih0aW1lcy5tdGltZSkge1xuICAgIG5vZGUubXRpbWUgPSB0aW1lcy5tdGltZTtcbiAgICB1cGRhdGUgPSB0cnVlO1xuICB9XG5cbiAgZnVuY3Rpb24gY29tcGxldGUoZXJyb3IpIHtcbiAgICAvLyBRdWV1ZSB0aGlzIGNoYW5nZSBzbyB3ZSBjYW4gc2VuZCB3YXRjaCBldmVudHMuXG4gICAgLy8gVW5saWtlIG5vZGUuanMsIHdlIHNlbmQgdGhlIGZ1bGwgcGF0aCB2cy4gYmFzZW5hbWUvZGlybmFtZSBvbmx5LlxuICAgIGNvbnRleHQuY2hhbmdlcy5wdXNoKHsgZXZlbnQ6ICdjaGFuZ2UnLCBwYXRoOiBwYXRoIH0pO1xuICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgfVxuXG4gIGlmKHVwZGF0ZSkge1xuICAgIGNvbnRleHQucHV0T2JqZWN0KG5vZGUuaWQsIG5vZGUsIGNvbXBsZXRlKTtcbiAgfSBlbHNlIHtcbiAgICBjb21wbGV0ZSgpO1xuICB9XG59XG5cbi8qKlxuICogbWFrZV9ub2RlKClcbiAqL1xuLy8gaW46IGZpbGUgb3IgZGlyZWN0b3J5IHBhdGhcbi8vIG91dDogbmV3IG5vZGUgcmVwcmVzZW50aW5nIGZpbGUvZGlyZWN0b3J5XG5mdW5jdGlvbiBtYWtlX25vZGUoY29udGV4dCwgcGF0aCwgdHlwZSwgY2FsbGJhY2spIHtcbiAgaWYodHlwZSAhPT0gTk9ERV9UWVBFX0RJUkVDVE9SWSAmJiB0eXBlICE9PSBOT0RFX1RZUEVfRklMRSkge1xuICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgndHlwZSBtdXN0IGJlIGEgZGlyZWN0b3J5IG9yIGZpbGUnLCBwYXRoKSk7XG4gIH1cblxuICBwYXRoID0gbm9ybWFsaXplKHBhdGgpO1xuXG4gIHZhciBuYW1lID0gYmFzZW5hbWUocGF0aCk7XG4gIHZhciBwYXJlbnRQYXRoID0gZGlybmFtZShwYXRoKTtcbiAgdmFyIHBhcmVudE5vZGU7XG4gIHZhciBwYXJlbnROb2RlRGF0YTtcbiAgdmFyIG5vZGU7XG5cbiAgLy8gQ2hlY2sgaWYgdGhlIHBhcmVudCBub2RlIGV4aXN0c1xuICBmdW5jdGlvbiBjcmVhdGVfbm9kZV9pbl9wYXJlbnQoZXJyb3IsIHBhcmVudERpcmVjdG9yeU5vZGUpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSBpZihwYXJlbnREaXJlY3RvcnlOb2RlLnR5cGUgIT09IE5PREVfVFlQRV9ESVJFQ1RPUlkpIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRU5PVERJUignYSBjb21wb25lbnQgb2YgdGhlIHBhdGggcHJlZml4IGlzIG5vdCBhIGRpcmVjdG9yeScsIHBhdGgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50Tm9kZSA9IHBhcmVudERpcmVjdG9yeU5vZGU7XG4gICAgICBmaW5kX25vZGUoY29udGV4dCwgcGF0aCwgY2hlY2tfaWZfbm9kZV9leGlzdHMpO1xuICAgIH1cbiAgfVxuXG4gIC8vIENoZWNrIGlmIHRoZSBub2RlIHRvIGJlIGNyZWF0ZWQgYWxyZWFkeSBleGlzdHNcbiAgZnVuY3Rpb24gY2hlY2tfaWZfbm9kZV9leGlzdHMoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKCFlcnJvciAmJiByZXN1bHQpIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUVYSVNUKCdwYXRoIG5hbWUgYWxyZWFkeSBleGlzdHMnLCBwYXRoKSk7XG4gICAgfSBlbHNlIGlmKGVycm9yICYmICEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcnMuRU5PRU5UKSkge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmdldE9iamVjdChwYXJlbnROb2RlLmRhdGEsIGNyZWF0ZV9ub2RlKTtcbiAgICB9XG4gIH1cblxuICAvLyBDcmVhdGUgdGhlIG5ldyBub2RlXG4gIGZ1bmN0aW9uIGNyZWF0ZV9ub2RlKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJlbnROb2RlRGF0YSA9IHJlc3VsdDtcbiAgICAgIE5vZGUuY3JlYXRlKHtcbiAgICAgICAgZ3VpZDogY29udGV4dC5ndWlkLFxuICAgICAgICB0eXBlOiB0eXBlXG4gICAgICB9LCBmdW5jdGlvbihlcnJvciwgcmVzdWx0KSB7XG4gICAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gcmVzdWx0O1xuICAgICAgICBub2RlLm5saW5rcyArPSAxO1xuICAgICAgICBjb250ZXh0LnB1dE9iamVjdChub2RlLmlkLCBub2RlLCB1cGRhdGVfcGFyZW50X25vZGVfZGF0YSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvLyBVcGRhdGUgcGFyZW50IG5vZGUgdGltZVxuICBmdW5jdGlvbiB1cGRhdGVfdGltZShlcnJvcikge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgdXBkYXRlX25vZGVfdGltZXMoY29udGV4dCwgcGFyZW50UGF0aCwgbm9kZSwgeyBtdGltZTogbm93LCBjdGltZTogbm93IH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cblxuICAvLyBVcGRhdGUgdGhlIHBhcmVudCBub2RlcyBkYXRhXG4gIGZ1bmN0aW9uIHVwZGF0ZV9wYXJlbnRfbm9kZV9kYXRhKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50Tm9kZURhdGFbbmFtZV0gPSBuZXcgRGlyZWN0b3J5RW50cnkobm9kZS5pZCwgdHlwZSk7XG4gICAgICBjb250ZXh0LnB1dE9iamVjdChwYXJlbnROb2RlLmRhdGEsIHBhcmVudE5vZGVEYXRhLCB1cGRhdGVfdGltZSk7XG4gICAgfVxuICB9XG5cbiAgLy8gRmluZCB0aGUgcGFyZW50IG5vZGVcbiAgZmluZF9ub2RlKGNvbnRleHQsIHBhcmVudFBhdGgsIGNyZWF0ZV9ub2RlX2luX3BhcmVudCk7XG59XG5cbi8qKlxuICogZmluZF9ub2RlXG4gKi9cbi8vIGluOiBmaWxlIG9yIGRpcmVjdG9yeSBwYXRoXG4vLyBvdXQ6IG5vZGUgc3RydWN0dXJlLCBvciBlcnJvclxuZnVuY3Rpb24gZmluZF9ub2RlKGNvbnRleHQsIHBhdGgsIGNhbGxiYWNrKSB7XG4gIHBhdGggPSBub3JtYWxpemUocGF0aCk7XG4gIGlmKCFwYXRoKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcnMuRU5PRU5UKCdwYXRoIGlzIGFuIGVtcHR5IHN0cmluZycpKTtcbiAgfVxuICB2YXIgbmFtZSA9IGJhc2VuYW1lKHBhdGgpO1xuICB2YXIgcGFyZW50UGF0aCA9IGRpcm5hbWUocGF0aCk7XG4gIHZhciBmb2xsb3dlZENvdW50ID0gMDtcblxuICBmdW5jdGlvbiByZWFkX3Jvb3RfZGlyZWN0b3J5X25vZGUoZXJyb3IsIG5vZGVEYXRhKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnJvcik7XG4gICAgfVxuXG4gICAgLy8gUGFyc2UgZXhpc3Rpbmcgbm9kZSBhcyBTdXBlck5vZGVcbiAgICBjb25zdCBzdXBlck5vZGUgPSBuZXcgU3VwZXJOb2RlKG5vZGVEYXRhKTtcblxuICAgIGlmKCFzdXBlck5vZGUgfHwgc3VwZXJOb2RlLnR5cGUgIT09IE5PREVfVFlQRV9NRVRBIHx8ICFzdXBlck5vZGUucm5vZGUpIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUZJTEVTWVNURU1FUlJPUigpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5nZXRPYmplY3Qoc3VwZXJOb2RlLnJub2RlLCBjaGVja19yb290X2RpcmVjdG9yeV9ub2RlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja19yb290X2RpcmVjdG9yeV9ub2RlKGVycm9yLCByb290RGlyZWN0b3J5Tm9kZSkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIGlmKCFyb290RGlyZWN0b3J5Tm9kZSkge1xuICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FTk9FTlQoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE5vZGUuY3JlYXRlKHJvb3REaXJlY3RvcnlOb2RlLCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgLy8gaW46IHBhcmVudCBkaXJlY3Rvcnkgbm9kZVxuICAvLyBvdXQ6IHBhcmVudCBkaXJlY3RvcnkgZGF0YVxuICBmdW5jdGlvbiByZWFkX3BhcmVudF9kaXJlY3RvcnlfZGF0YShlcnJvciwgcGFyZW50RGlyZWN0b3J5Tm9kZSkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIGlmKHBhcmVudERpcmVjdG9yeU5vZGUudHlwZSAhPT0gTk9ERV9UWVBFX0RJUkVDVE9SWSB8fCAhcGFyZW50RGlyZWN0b3J5Tm9kZS5kYXRhKSB7XG4gICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVOT1RESVIoJ2EgY29tcG9uZW50IG9mIHRoZSBwYXRoIHByZWZpeCBpcyBub3QgYSBkaXJlY3RvcnknLCBwYXRoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZ2V0T2JqZWN0KHBhcmVudERpcmVjdG9yeU5vZGUuZGF0YSwgZ2V0X25vZGVfZnJvbV9wYXJlbnRfZGlyZWN0b3J5X2RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGluOiBwYXJlbnQgZGlyZWN0b3J5IGRhdGFcbiAgLy8gb3V0OiBzZWFyY2hlZCBub2RlXG4gIGZ1bmN0aW9uIGdldF9ub2RlX2Zyb21fcGFyZW50X2RpcmVjdG9yeV9kYXRhKGVycm9yLCBwYXJlbnREaXJlY3RvcnlEYXRhKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwYXJlbnREaXJlY3RvcnlEYXRhLCBuYW1lKSkge1xuICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVOT0VOVChudWxsLCBwYXRoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgbm9kZUlkID0gcGFyZW50RGlyZWN0b3J5RGF0YVtuYW1lXS5pZDtcbiAgICAgICAgY29udGV4dC5nZXRPYmplY3Qobm9kZUlkLCBjcmVhdGVfbm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY3JlYXRlX25vZGUoZXJyb3IsIGRhdGEpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9XG4gICAgTm9kZS5jcmVhdGUoZGF0YSwgaXNfc3ltYm9saWNfbGluayk7XG4gIH1cblxuICBmdW5jdGlvbiBpc19zeW1ib2xpY19saW5rKGVycm9yLCBub2RlKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYobm9kZS50eXBlID09PSBOT0RFX1RZUEVfU1lNQk9MSUNfTElOSykge1xuICAgICAgICBmb2xsb3dlZENvdW50Kys7XG4gICAgICAgIGlmKGZvbGxvd2VkQ291bnQgPiBTWU1MT09QX01BWCl7XG4gICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FTE9PUChudWxsLCBwYXRoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZm9sbG93X3N5bWJvbGljX2xpbmsobm9kZS5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgbm9kZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gZm9sbG93X3N5bWJvbGljX2xpbmsoZGF0YSkge1xuICAgIGRhdGEgPSBub3JtYWxpemUoZGF0YSk7XG4gICAgcGFyZW50UGF0aCA9IGRpcm5hbWUoZGF0YSk7XG4gICAgbmFtZSA9IGJhc2VuYW1lKGRhdGEpO1xuICAgIGlmKFJPT1RfRElSRUNUT1JZX05BTUUgPT09IG5hbWUpIHtcbiAgICAgIGNvbnRleHQuZ2V0T2JqZWN0KFNVUEVSX05PREVfSUQsIHJlYWRfcm9vdF9kaXJlY3Rvcnlfbm9kZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbmRfbm9kZShjb250ZXh0LCBwYXJlbnRQYXRoLCByZWFkX3BhcmVudF9kaXJlY3RvcnlfZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgaWYoUk9PVF9ESVJFQ1RPUllfTkFNRSA9PT0gbmFtZSkge1xuICAgIGNvbnRleHQuZ2V0T2JqZWN0KFNVUEVSX05PREVfSUQsIHJlYWRfcm9vdF9kaXJlY3Rvcnlfbm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgZmluZF9ub2RlKGNvbnRleHQsIHBhcmVudFBhdGgsIHJlYWRfcGFyZW50X2RpcmVjdG9yeV9kYXRhKTtcbiAgfVxufVxuXG5cbi8qKlxuICogc2V0IGV4dGVuZGVkIGF0dHJpYnV0ZSAocmVmYWN0b3IpXG4gKi9cbmZ1bmN0aW9uIHNldF9leHRlbmRlZF9hdHRyaWJ1dGUgKGNvbnRleHQsIHBhdGgsIG5vZGUsIG5hbWUsIHZhbHVlLCBmbGFnLCBjYWxsYmFjaykge1xuICBmdW5jdGlvbiB1cGRhdGVfdGltZShlcnJvcikge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHVwZGF0ZV9ub2RlX3RpbWVzKGNvbnRleHQsIHBhdGgsIG5vZGUsIHsgY3RpbWU6IERhdGUubm93KCkgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuXG4gIHZhciB4YXR0cnMgPSBub2RlLnhhdHRycztcblxuICBpZiAoZmxhZyA9PT0gWEFUVFJfQ1JFQVRFICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4YXR0cnMsIG5hbWUpKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FRVhJU1QoJ2F0dHJpYnV0ZSBhbHJlYWR5IGV4aXN0cycsIHBhdGgpKTtcbiAgfVxuICBlbHNlIGlmIChmbGFnID09PSBYQVRUUl9SRVBMQUNFICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeGF0dHJzLCBuYW1lKSkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRU5PQVRUUihudWxsLCBwYXRoKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgeGF0dHJzW25hbWVdID0gdmFsdWU7XG4gICAgY29udGV4dC5wdXRPYmplY3Qobm9kZS5pZCwgbm9kZSwgdXBkYXRlX3RpbWUpO1xuICB9XG59XG5cbi8qKlxuICogZW5zdXJlX3Jvb3RfZGlyZWN0b3J5LiBDcmVhdGVzIGEgcm9vdCBub2RlIGlmIG5lY2Vzc2FyeS5cbiAqXG4gKiBOb3RlOiB0aGlzIHNob3VsZCBvbmx5IGJlIGludm9rZWQgd2hlbiBmb3JtYXR0aW5nIGEgbmV3IGZpbGUgc3lzdGVtLlxuICogTXVsdGlwbGUgaW52b2NhdGlvbnMgb2YgdGhpcyBieSBzZXBhcmF0ZSBpbnN0YW5jZXMgd2lsbCBzdGlsbCByZXN1bHRcbiAqIGluIG9ubHkgYSBzaW5nbGUgc3VwZXIgbm9kZS5cbiAqL1xuZnVuY3Rpb24gZW5zdXJlX3Jvb3RfZGlyZWN0b3J5KGNvbnRleHQsIGNhbGxiYWNrKSB7XG4gIHZhciBzdXBlck5vZGU7XG4gIHZhciBkaXJlY3RvcnlOb2RlO1xuICB2YXIgZGlyZWN0b3J5RGF0YTtcblxuICBmdW5jdGlvbiBlbnN1cmVfc3VwZXJfbm9kZShlcnJvciwgZXhpc3RpbmdOb2RlKSB7XG4gICAgaWYoIWVycm9yICYmIGV4aXN0aW5nTm9kZSkge1xuICAgICAgLy8gQW5vdGhlciBpbnN0YW5jZSBoYXMgYmVhdCB1cyBhbmQgYWxyZWFkeSBjcmVhdGVkIHRoZSBzdXBlciBub2RlLlxuICAgICAgY2FsbGJhY2soKTtcbiAgICB9IGVsc2UgaWYoZXJyb3IgJiYgIShlcnJvciBpbnN0YW5jZW9mIEVycm9ycy5FTk9FTlQpKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIFN1cGVyTm9kZS5jcmVhdGUoe2d1aWQ6IGNvbnRleHQuZ3VpZH0sIGZ1bmN0aW9uKGVycm9yLCByZXN1bHQpIHtcbiAgICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN1cGVyTm9kZSA9IHJlc3VsdDtcbiAgICAgICAgY29udGV4dC5wdXRPYmplY3Qoc3VwZXJOb2RlLmlkLCBzdXBlck5vZGUsIHdyaXRlX2RpcmVjdG9yeV9ub2RlKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHdyaXRlX2RpcmVjdG9yeV9ub2RlKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgTm9kZS5jcmVhdGUoe1xuICAgICAgICBndWlkOiBjb250ZXh0Lmd1aWQsXG4gICAgICAgIGlkOiBzdXBlck5vZGUucm5vZGUsXG4gICAgICAgIHR5cGU6IE5PREVfVFlQRV9ESVJFQ1RPUllcbiAgICAgIH0sIGZ1bmN0aW9uKGVycm9yLCByZXN1bHQpIHtcbiAgICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRpcmVjdG9yeU5vZGUgPSByZXN1bHQ7XG4gICAgICAgIGRpcmVjdG9yeU5vZGUubmxpbmtzICs9IDE7XG4gICAgICAgIGNvbnRleHQucHV0T2JqZWN0KGRpcmVjdG9yeU5vZGUuaWQsIGRpcmVjdG9yeU5vZGUsIHdyaXRlX2RpcmVjdG9yeV9kYXRhKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHdyaXRlX2RpcmVjdG9yeV9kYXRhKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlyZWN0b3J5RGF0YSA9IHt9O1xuICAgICAgY29udGV4dC5wdXRPYmplY3QoZGlyZWN0b3J5Tm9kZS5kYXRhLCBkaXJlY3RvcnlEYXRhLCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgY29udGV4dC5nZXRPYmplY3QoU1VQRVJfTk9ERV9JRCwgZW5zdXJlX3N1cGVyX25vZGUpO1xufVxuXG4vKipcbiAqIG1ha2VfZGlyZWN0b3J5XG4gKi9cbmZ1bmN0aW9uIG1ha2VfZGlyZWN0b3J5KGNvbnRleHQsIHBhdGgsIGNhbGxiYWNrKSB7XG4gIHBhdGggPSBub3JtYWxpemUocGF0aCk7XG4gIHZhciBuYW1lID0gYmFzZW5hbWUocGF0aCk7XG4gIHZhciBwYXJlbnRQYXRoID0gZGlybmFtZShwYXRoKTtcblxuICB2YXIgZGlyZWN0b3J5Tm9kZTtcbiAgdmFyIGRpcmVjdG9yeURhdGE7XG4gIHZhciBwYXJlbnREaXJlY3RvcnlOb2RlO1xuICB2YXIgcGFyZW50RGlyZWN0b3J5RGF0YTtcblxuICBmdW5jdGlvbiBjaGVja19pZl9kaXJlY3RvcnlfZXhpc3RzKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZighZXJyb3IgJiYgcmVzdWx0KSB7XG4gICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVFWElTVChudWxsLCBwYXRoKSk7XG4gICAgfSBlbHNlIGlmKGVycm9yICYmICEoZXJyb3IgaW5zdGFuY2VvZiBFcnJvcnMuRU5PRU5UKSkge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaW5kX25vZGUoY29udGV4dCwgcGFyZW50UGF0aCwgcmVhZF9wYXJlbnRfZGlyZWN0b3J5X2RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRfcGFyZW50X2RpcmVjdG9yeV9kYXRhKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJlbnREaXJlY3RvcnlOb2RlID0gcmVzdWx0O1xuICAgICAgY29udGV4dC5nZXRPYmplY3QocGFyZW50RGlyZWN0b3J5Tm9kZS5kYXRhLCB3cml0ZV9kaXJlY3Rvcnlfbm9kZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gd3JpdGVfZGlyZWN0b3J5X25vZGUoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudERpcmVjdG9yeURhdGEgPSByZXN1bHQ7XG4gICAgICBOb2RlLmNyZWF0ZSh7XG4gICAgICAgIGd1aWQ6IGNvbnRleHQuZ3VpZCxcbiAgICAgICAgdHlwZTogTk9ERV9UWVBFX0RJUkVDVE9SWVxuICAgICAgfSwgZnVuY3Rpb24oZXJyb3IsIHJlc3VsdCkge1xuICAgICAgICBpZihlcnJvcikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZGlyZWN0b3J5Tm9kZSA9IHJlc3VsdDtcbiAgICAgICAgZGlyZWN0b3J5Tm9kZS5ubGlua3MgKz0gMTtcbiAgICAgICAgY29udGV4dC5wdXRPYmplY3QoZGlyZWN0b3J5Tm9kZS5pZCwgZGlyZWN0b3J5Tm9kZSwgd3JpdGVfZGlyZWN0b3J5X2RhdGEpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gd3JpdGVfZGlyZWN0b3J5X2RhdGEoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXJlY3RvcnlEYXRhID0ge307XG4gICAgICBjb250ZXh0LnB1dE9iamVjdChkaXJlY3RvcnlOb2RlLmRhdGEsIGRpcmVjdG9yeURhdGEsIHVwZGF0ZV9wYXJlbnRfZGlyZWN0b3J5X2RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZV90aW1lKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7XG4gICAgICB1cGRhdGVfbm9kZV90aW1lcyhjb250ZXh0LCBwYXJlbnRQYXRoLCBwYXJlbnREaXJlY3RvcnlOb2RlLCB7IG10aW1lOiBub3csIGN0aW1lOiBub3cgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZV9wYXJlbnRfZGlyZWN0b3J5X2RhdGEoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJlbnREaXJlY3RvcnlEYXRhW25hbWVdID0gbmV3IERpcmVjdG9yeUVudHJ5KGRpcmVjdG9yeU5vZGUuaWQsIE5PREVfVFlQRV9ESVJFQ1RPUlkpO1xuICAgICAgY29udGV4dC5wdXRPYmplY3QocGFyZW50RGlyZWN0b3J5Tm9kZS5kYXRhLCBwYXJlbnREaXJlY3RvcnlEYXRhLCB1cGRhdGVfdGltZSk7XG4gICAgfVxuICB9XG5cbiAgZmluZF9ub2RlKGNvbnRleHQsIHBhdGgsIGNoZWNrX2lmX2RpcmVjdG9yeV9leGlzdHMpO1xufVxuXG5mdW5jdGlvbiBhY2Nlc3NfZmlsZShjb250ZXh0LCBwYXRoLCBtb2RlLCBjYWxsYmFjaykge1xuICBjb25zdCB7IEZfT0ssIFJfT0ssIFdfT0ssIFhfT0ssIFNfSVhVU1IsIFNfSVhHUlAsIFNfSVhPVEggfSA9IENvbnN0YW50cy5mc0NvbnN0YW50cztcblxuICBwYXRoID0gbm9ybWFsaXplKHBhdGgpO1xuICBmaW5kX25vZGUoY29udGV4dCwgcGF0aCwgZnVuY3Rpb24gKGVyciwgbm9kZSkge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgIH1cblxuICAgIC8vIElmIHdlIGhhdmUgYSBub2RlLCBGX09LIGlzIHRydWUuXG4gICAgaWYobW9kZSA9PT0gRl9PSykge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKG51bGwpO1xuICAgIH1cblxuICAgIHZhciBzdF9tb2RlID0gdmFsaWRhdGVBbmRNYXNrTW9kZShub2RlLm1vZGUsIGNhbGxiYWNrKTtcbiAgICBpZighc3RfbW9kZSkgcmV0dXJuO1xuXG4gICAgLy8gRm9yIGFueSBvdGhlciBjb21ibyBvZiBGX09LLCBSX09LLCBXX09LLCBhbHdheXMgYWxsb3cuIEZpbGVyIHVzZXIgaXMgYSByb290IHVzZXIsXG4gICAgLy8gc28gZXhpc3RpbmcgZmlsZXMgYXJlIGFsd2F5cyBPSywgcmVhZGFibGUsIGFuZCB3cml0YWJsZVxuICAgIGlmKG1vZGUgJiAoUl9PSyB8IFdfT0spKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2sobnVsbCk7XG4gICAgfVxuXG4gICAgLy8gRm9yIHRoZSBjYXNlIG9mIFhfT0ssIGFjdHVhbGx5IGNoZWNrIGlmIHRoaXMgZmlsZSBpcyBleGVjdXRhYmxlXG4gICAgaWYgKChtb2RlICYgWF9PSykgJiYgKHN0X21vZGUgJiAoU19JWFVTUiB8IFNfSVhHUlAgfCBTX0lYT1RIKSkpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhudWxsKTtcbiAgICB9XG5cbiAgICAvLyBJbiBhbnkgb3RoZXIgY2FzZSwgdGhlIGZpbGUgaXNuJ3QgYWNjZXNzaWJsZVxuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUFDQ0VTKCdwZXJtaXNzaW9uIGRlbmllZCcscGF0aCkpIDtcbiAgfSk7XG59XG5cbi8qKlxuICogcmVtb3ZlX2RpcmVjdG9yeVxuICovXG5mdW5jdGlvbiByZW1vdmVfZGlyZWN0b3J5KGNvbnRleHQsIHBhdGgsIGNhbGxiYWNrKSB7XG4gIHBhdGggPSBub3JtYWxpemUocGF0aCk7XG4gIHZhciBuYW1lID0gYmFzZW5hbWUocGF0aCk7XG4gIHZhciBwYXJlbnRQYXRoID0gZGlybmFtZShwYXRoKTtcblxuICB2YXIgZGlyZWN0b3J5Tm9kZTtcbiAgdmFyIGRpcmVjdG9yeURhdGE7XG4gIHZhciBwYXJlbnREaXJlY3RvcnlOb2RlO1xuICB2YXIgcGFyZW50RGlyZWN0b3J5RGF0YTtcblxuICBmdW5jdGlvbiByZWFkX3BhcmVudF9kaXJlY3RvcnlfZGF0YShlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGFyZW50RGlyZWN0b3J5Tm9kZSA9IHJlc3VsdDtcbiAgICAgIGNvbnRleHQuZ2V0T2JqZWN0KHBhcmVudERpcmVjdG9yeU5vZGUuZGF0YSwgY2hlY2tfaWZfbm9kZV9leGlzdHMpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrX2lmX25vZGVfZXhpc3RzKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSBpZihST09UX0RJUkVDVE9SWV9OQU1FID09PSBuYW1lKSB7XG4gICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVCVVNZKG51bGwsIHBhdGgpKTtcbiAgICB9IGVsc2UgaWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChyZXN1bHQsIG5hbWUpKSB7XG4gICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVOT0VOVChudWxsLCBwYXRoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHBhcmVudERpcmVjdG9yeURhdGEgPSByZXN1bHQ7XG4gICAgICBkaXJlY3RvcnlOb2RlID0gcGFyZW50RGlyZWN0b3J5RGF0YVtuYW1lXS5pZDtcbiAgICAgIGNvbnRleHQuZ2V0T2JqZWN0KGRpcmVjdG9yeU5vZGUsIGNoZWNrX2lmX25vZGVfaXNfZGlyZWN0b3J5KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja19pZl9ub2RlX2lzX2RpcmVjdG9yeShlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2UgaWYocmVzdWx0LnR5cGUgIT09IE5PREVfVFlQRV9ESVJFQ1RPUlkpIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRU5PVERJUihudWxsLCBwYXRoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpcmVjdG9yeU5vZGUgPSByZXN1bHQ7XG4gICAgICBjb250ZXh0LmdldE9iamVjdChkaXJlY3RvcnlOb2RlLmRhdGEsIGNoZWNrX2lmX2RpcmVjdG9yeV9pc19lbXB0eSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tfaWZfZGlyZWN0b3J5X2lzX2VtcHR5KGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXJlY3RvcnlEYXRhID0gcmVzdWx0O1xuICAgICAgaWYoT2JqZWN0LmtleXMoZGlyZWN0b3J5RGF0YSkubGVuZ3RoID4gMCkge1xuICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVOT1RFTVBUWShudWxsLCBwYXRoKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZW1vdmVfZGlyZWN0b3J5X2VudHJ5X2Zyb21fcGFyZW50X2RpcmVjdG9yeV9ub2RlKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlX3RpbWUoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIHVwZGF0ZV9ub2RlX3RpbWVzKGNvbnRleHQsIHBhcmVudFBhdGgsIHBhcmVudERpcmVjdG9yeU5vZGUsIHsgbXRpbWU6IG5vdywgY3RpbWU6IG5vdyB9LCByZW1vdmVfZGlyZWN0b3J5X25vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZV9kaXJlY3RvcnlfZW50cnlfZnJvbV9wYXJlbnRfZGlyZWN0b3J5X25vZGUoKSB7XG4gICAgZGVsZXRlIHBhcmVudERpcmVjdG9yeURhdGFbbmFtZV07XG4gICAgY29udGV4dC5wdXRPYmplY3QocGFyZW50RGlyZWN0b3J5Tm9kZS5kYXRhLCBwYXJlbnREaXJlY3RvcnlEYXRhLCB1cGRhdGVfdGltZSk7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVfZGlyZWN0b3J5X25vZGUoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlbGV0ZShkaXJlY3RvcnlOb2RlLmlkLCByZW1vdmVfZGlyZWN0b3J5X2RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZV9kaXJlY3RvcnlfZGF0YShlcnJvcikge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZGVsZXRlKGRpcmVjdG9yeU5vZGUuZGF0YSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuXG4gIGZpbmRfbm9kZShjb250ZXh0LCBwYXJlbnRQYXRoLCByZWFkX3BhcmVudF9kaXJlY3RvcnlfZGF0YSk7XG59XG5cbmZ1bmN0aW9uIG9wZW5fZmlsZShjb250ZXh0LCBwYXRoLCBmbGFncywgbW9kZSwgY2FsbGJhY2spIHtcbiAgaWYgKHR5cGVvZiBtb2RlID09PSAnZnVuY3Rpb24nKXtcbiAgICBjYWxsYmFjayA9IG1vZGU7XG4gICAgbW9kZSA9IG51bGw7XG4gIH1cbiAgcGF0aCA9IG5vcm1hbGl6ZShwYXRoKTtcbiAgdmFyIG5hbWUgPSBiYXNlbmFtZShwYXRoKTtcbiAgdmFyIHBhcmVudFBhdGggPSBkaXJuYW1lKHBhdGgpO1xuXG4gIHZhciBkaXJlY3RvcnlOb2RlO1xuICB2YXIgZGlyZWN0b3J5RGF0YTtcbiAgdmFyIGRpcmVjdG9yeUVudHJ5O1xuICB2YXIgZmlsZU5vZGU7XG4gIHZhciBmaWxlRGF0YTtcblxuICB2YXIgZm9sbG93ZWRDb3VudCA9IDA7XG5cbiAgaWYoUk9PVF9ESVJFQ1RPUllfTkFNRSA9PT0gbmFtZSkge1xuICAgIGlmKGZsYWdzLmluY2x1ZGVzKE9fV1JJVEUpKSB7XG4gICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJU0RJUigndGhlIG5hbWVkIGZpbGUgaXMgYSBkaXJlY3RvcnkgYW5kIE9fV1JJVEUgaXMgc2V0JywgcGF0aCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaW5kX25vZGUoY29udGV4dCwgcGF0aCwgc2V0X2ZpbGVfbm9kZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZpbmRfbm9kZShjb250ZXh0LCBwYXJlbnRQYXRoLCByZWFkX2RpcmVjdG9yeV9kYXRhKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRfZGlyZWN0b3J5X2RhdGEoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIGlmKHJlc3VsdC50eXBlICE9PSBOT0RFX1RZUEVfRElSRUNUT1JZKSB7XG4gICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVOT0VOVChudWxsLCBwYXRoKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpcmVjdG9yeU5vZGUgPSByZXN1bHQ7XG4gICAgICBjb250ZXh0LmdldE9iamVjdChkaXJlY3RvcnlOb2RlLmRhdGEsIGNoZWNrX2lmX2ZpbGVfZXhpc3RzKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja19pZl9maWxlX2V4aXN0cyhlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlyZWN0b3J5RGF0YSA9IHJlc3VsdDtcbiAgICAgIGlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkaXJlY3RvcnlEYXRhLCBuYW1lKSkge1xuICAgICAgICBpZihmbGFncy5pbmNsdWRlcyhPX0VYQ0xVU0lWRSkpIHtcbiAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVFWElTVCgnT19DUkVBVEUgYW5kIE9fRVhDTFVTSVZFIGFyZSBzZXQsIGFuZCB0aGUgbmFtZWQgZmlsZSBleGlzdHMnLCBwYXRoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGlyZWN0b3J5RW50cnkgPSBkaXJlY3RvcnlEYXRhW25hbWVdO1xuICAgICAgICAgIGlmKGRpcmVjdG9yeUVudHJ5LnR5cGUgPT09IE5PREVfVFlQRV9ESVJFQ1RPUlkgJiYgZmxhZ3MuaW5jbHVkZXMoT19XUklURSkpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlTRElSKCd0aGUgbmFtZWQgZmlsZSBpcyBhIGRpcmVjdG9yeSBhbmQgT19XUklURSBpcyBzZXQnLCBwYXRoKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRleHQuZ2V0T2JqZWN0KGRpcmVjdG9yeUVudHJ5LmlkLCBjaGVja19pZl9zeW1ib2xpY19saW5rKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmKCFmbGFncy5pbmNsdWRlcyhPX0NSRUFURSkpIHtcbiAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVOT0VOVCgnT19DUkVBVEUgaXMgbm90IHNldCBhbmQgdGhlIG5hbWVkIGZpbGUgZG9lcyBub3QgZXhpc3QnLCBwYXRoKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgd3JpdGVfZmlsZV9ub2RlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja19pZl9zeW1ib2xpY19saW5rKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbm9kZSA9IHJlc3VsdDtcbiAgICAgIGlmKG5vZGUudHlwZSA9PT0gTk9ERV9UWVBFX1NZTUJPTElDX0xJTkspIHtcbiAgICAgICAgZm9sbG93ZWRDb3VudCsrO1xuICAgICAgICBpZihmb2xsb3dlZENvdW50ID4gU1lNTE9PUF9NQVgpe1xuICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUxPT1AobnVsbCwgcGF0aCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZvbGxvd19zeW1ib2xpY19saW5rKG5vZGUuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldF9maWxlX25vZGUodW5kZWZpbmVkLCBub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBmb2xsb3dfc3ltYm9saWNfbGluayhkYXRhKSB7XG4gICAgZGF0YSA9IG5vcm1hbGl6ZShkYXRhKTtcbiAgICBwYXJlbnRQYXRoID0gZGlybmFtZShkYXRhKTtcbiAgICBuYW1lID0gYmFzZW5hbWUoZGF0YSk7XG4gICAgaWYoUk9PVF9ESVJFQ1RPUllfTkFNRSA9PT0gbmFtZSkge1xuICAgICAgaWYoZmxhZ3MuaW5jbHVkZXMoT19XUklURSkpIHtcbiAgICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSVNESVIoJ3RoZSBuYW1lZCBmaWxlIGlzIGEgZGlyZWN0b3J5IGFuZCBPX1dSSVRFIGlzIHNldCcsIHBhdGgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZpbmRfbm9kZShjb250ZXh0LCBwYXRoLCBzZXRfZmlsZV9ub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZmluZF9ub2RlKGNvbnRleHQsIHBhcmVudFBhdGgsIHJlYWRfZGlyZWN0b3J5X2RhdGEpO1xuICB9XG5cbiAgZnVuY3Rpb24gc2V0X2ZpbGVfbm9kZShlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsZU5vZGUgPSByZXN1bHQ7XG4gICAgICBjYWxsYmFjayhudWxsLCBmaWxlTm9kZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gd3JpdGVfZmlsZV9ub2RlKCkge1xuICAgIE5vZGUuY3JlYXRlKHtcbiAgICAgIGd1aWQ6IGNvbnRleHQuZ3VpZCxcbiAgICAgIHR5cGU6IE5PREVfVFlQRV9GSUxFXG4gICAgfSwgZnVuY3Rpb24oZXJyb3IsIHJlc3VsdCkge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmaWxlTm9kZSA9IHJlc3VsdDtcbiAgICAgIGZpbGVOb2RlLm5saW5rcyArPSAxO1xuICAgICAgaWYobW9kZSl7XG4gICAgICAgIGZpbGVOb2RlLm1vZGUgPSBtb2RlO1xuICAgICAgfVxuICAgICAgY29udGV4dC5wdXRPYmplY3QoZmlsZU5vZGUuaWQsIGZpbGVOb2RlLCB3cml0ZV9maWxlX2RhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gd3JpdGVfZmlsZV9kYXRhKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsZURhdGEgPSBCdWZmZXIuYWxsb2MoMCk7XG4gICAgICBjb250ZXh0LnB1dEJ1ZmZlcihmaWxlTm9kZS5kYXRhLCBmaWxlRGF0YSwgdXBkYXRlX2RpcmVjdG9yeV9kYXRhKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVfdGltZShlcnJvcikge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgdXBkYXRlX25vZGVfdGltZXMoY29udGV4dCwgcGFyZW50UGF0aCwgZGlyZWN0b3J5Tm9kZSwgeyBtdGltZTogbm93LCBjdGltZTogbm93IH0sIGhhbmRsZV91cGRhdGVfcmVzdWx0KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVfZGlyZWN0b3J5X2RhdGEoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXJlY3RvcnlEYXRhW25hbWVdID0gbmV3IERpcmVjdG9yeUVudHJ5KGZpbGVOb2RlLmlkLCBOT0RFX1RZUEVfRklMRSk7XG4gICAgICBjb250ZXh0LnB1dE9iamVjdChkaXJlY3RvcnlOb2RlLmRhdGEsIGRpcmVjdG9yeURhdGEsIHVwZGF0ZV90aW1lKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBoYW5kbGVfdXBkYXRlX3Jlc3VsdChlcnJvcikge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKG51bGwsIGZpbGVOb2RlKTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVwbGFjZV9kYXRhKGNvbnRleHQsIG9mZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgY2FsbGJhY2spIHtcbiAgdmFyIGZpbGVOb2RlO1xuXG4gIGZ1bmN0aW9uIHJldHVybl9uYnl0ZXMoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhudWxsLCBsZW5ndGgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZV90aW1lKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7XG4gICAgICB1cGRhdGVfbm9kZV90aW1lcyhjb250ZXh0LCBvZmQucGF0aCwgZmlsZU5vZGUsIHsgbXRpbWU6IG5vdywgY3RpbWU6IG5vdyB9LCByZXR1cm5fbmJ5dGVzKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVfZmlsZV9ub2RlKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5wdXRPYmplY3QoZmlsZU5vZGUuaWQsIGZpbGVOb2RlLCB1cGRhdGVfdGltZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gd3JpdGVfZmlsZV9kYXRhKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWxlTm9kZSA9IHJlc3VsdDtcblxuICAgICAgdmFyIG5ld0RhdGEgPSBCdWZmZXIuYWxsb2MobGVuZ3RoKTtcbiAgICAgIGJ1ZmZlci5jb3B5KG5ld0RhdGEsIDAsIG9mZnNldCwgb2Zmc2V0ICsgbGVuZ3RoKTtcbiAgICAgIG9mZC5wb3NpdGlvbiA9IGxlbmd0aDtcblxuICAgICAgZmlsZU5vZGUuc2l6ZSA9IGxlbmd0aDtcbiAgICAgIGZpbGVOb2RlLnZlcnNpb24gKz0gMTtcblxuICAgICAgY29udGV4dC5wdXRCdWZmZXIoZmlsZU5vZGUuZGF0YSwgbmV3RGF0YSwgdXBkYXRlX2ZpbGVfbm9kZSk7XG4gICAgfVxuICB9XG5cbiAgY29udGV4dC5nZXRPYmplY3Qob2ZkLmlkLCB3cml0ZV9maWxlX2RhdGEpO1xufVxuXG5mdW5jdGlvbiB3cml0ZV9kYXRhKGNvbnRleHQsIG9mZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKSB7XG4gIHZhciBmaWxlTm9kZTtcbiAgdmFyIGZpbGVEYXRhO1xuXG4gIGZ1bmN0aW9uIHJldHVybl9uYnl0ZXMoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhudWxsLCBsZW5ndGgpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZV90aW1lKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIG5vdyA9IERhdGUubm93KCk7XG4gICAgICB1cGRhdGVfbm9kZV90aW1lcyhjb250ZXh0LCBvZmQucGF0aCwgZmlsZU5vZGUsIHsgbXRpbWU6IG5vdywgY3RpbWU6IG5vdyB9LCByZXR1cm5fbmJ5dGVzKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVfZmlsZV9ub2RlKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5wdXRPYmplY3QoZmlsZU5vZGUuaWQsIGZpbGVOb2RlLCB1cGRhdGVfdGltZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlX2ZpbGVfZGF0YShlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsZURhdGEgPSByZXN1bHQ7XG4gICAgICBpZighZmlsZURhdGEpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlPKCdFeHBlY3RlZCBCdWZmZXInKSk7XG4gICAgICB9XG4gICAgICB2YXIgX3Bvc2l0aW9uID0gKCEodW5kZWZpbmVkID09PSBwb3NpdGlvbiB8fCBudWxsID09PSBwb3NpdGlvbikpID8gcG9zaXRpb24gOiBvZmQucG9zaXRpb247XG4gICAgICB2YXIgbmV3U2l6ZSA9IE1hdGgubWF4KGZpbGVEYXRhLmxlbmd0aCwgX3Bvc2l0aW9uICsgbGVuZ3RoKTtcbiAgICAgIHZhciBuZXdEYXRhID0gQnVmZmVyLmFsbG9jKG5ld1NpemUpO1xuICAgICAgaWYoZmlsZURhdGEpIHtcbiAgICAgICAgZmlsZURhdGEuY29weShuZXdEYXRhKTtcbiAgICAgIH1cbiAgICAgIGJ1ZmZlci5jb3B5KG5ld0RhdGEsIF9wb3NpdGlvbiwgb2Zmc2V0LCBvZmZzZXQgKyBsZW5ndGgpO1xuICAgICAgaWYodW5kZWZpbmVkID09PSBwb3NpdGlvbikge1xuICAgICAgICBvZmQucG9zaXRpb24gKz0gbGVuZ3RoO1xuICAgICAgfVxuXG4gICAgICBmaWxlTm9kZS5zaXplID0gbmV3U2l6ZTtcbiAgICAgIGZpbGVOb2RlLnZlcnNpb24gKz0gMTtcblxuICAgICAgY29udGV4dC5wdXRCdWZmZXIoZmlsZU5vZGUuZGF0YSwgbmV3RGF0YSwgdXBkYXRlX2ZpbGVfbm9kZSk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZF9maWxlX2RhdGEoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbGVOb2RlID0gcmVzdWx0O1xuICAgICAgY29udGV4dC5nZXRCdWZmZXIoZmlsZU5vZGUuZGF0YSwgdXBkYXRlX2ZpbGVfZGF0YSk7XG4gICAgfVxuICB9XG5cbiAgY29udGV4dC5nZXRPYmplY3Qob2ZkLmlkLCByZWFkX2ZpbGVfZGF0YSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRfZGF0YShjb250ZXh0LCBvZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFjaykge1xuICB2YXIgZmlsZU5vZGU7XG4gIHZhciBmaWxlRGF0YTtcblxuICBmdW5jdGlvbiBoYW5kbGVfZmlsZV9kYXRhKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWxlRGF0YSA9IHJlc3VsdDtcbiAgICAgIGlmKCFmaWxlRGF0YSkge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9ycy5FSU8oJ0V4cGVjdGVkIEJ1ZmZlcicpKTtcbiAgICAgIH1cbiAgICAgIHZhciBfcG9zaXRpb24gPSAoISh1bmRlZmluZWQgPT09IHBvc2l0aW9uIHx8IG51bGwgPT09IHBvc2l0aW9uKSkgPyBwb3NpdGlvbiA6IG9mZC5wb3NpdGlvbjtcbiAgICAgIGxlbmd0aCA9IChfcG9zaXRpb24gKyBsZW5ndGggPiBidWZmZXIubGVuZ3RoKSA/IGxlbmd0aCAtIF9wb3NpdGlvbiA6IGxlbmd0aDtcbiAgICAgIGZpbGVEYXRhLmNvcHkoYnVmZmVyLCBvZmZzZXQsIF9wb3NpdGlvbiwgX3Bvc2l0aW9uICsgbGVuZ3RoKTtcbiAgICAgIGlmKHVuZGVmaW5lZCA9PT0gcG9zaXRpb24pIHtcbiAgICAgICAgb2ZkLnBvc2l0aW9uICs9IGxlbmd0aDtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKG51bGwsIGxlbmd0aCk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZF9maWxlX2RhdGEoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIGlmKHJlc3VsdC50eXBlID09PSBOT0RFX1RZUEVfRElSRUNUT1JZKSB7XG4gICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJU0RJUigndGhlIG5hbWVkIGZpbGUgaXMgYSBkaXJlY3RvcnknLCBvZmQucGF0aCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWxlTm9kZSA9IHJlc3VsdDtcbiAgICAgIGNvbnRleHQuZ2V0QnVmZmVyKGZpbGVOb2RlLmRhdGEsIGhhbmRsZV9maWxlX2RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnRleHQuZ2V0T2JqZWN0KG9mZC5pZCwgcmVhZF9maWxlX2RhdGEpO1xufVxuXG5mdW5jdGlvbiBzdGF0X2ZpbGUoY29udGV4dCwgcGF0aCwgY2FsbGJhY2spIHtcbiAgcGF0aCA9IG5vcm1hbGl6ZShwYXRoKTtcbiAgZmluZF9ub2RlKGNvbnRleHQsIHBhdGgsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gZnN0YXRfZmlsZShjb250ZXh0LCBvZmQsIGNhbGxiYWNrKSB7XG4gIG9mZC5nZXROb2RlKGNvbnRleHQsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gbHN0YXRfZmlsZShjb250ZXh0LCBwYXRoLCBjYWxsYmFjaykge1xuICBwYXRoID0gbm9ybWFsaXplKHBhdGgpO1xuICB2YXIgbmFtZSA9IGJhc2VuYW1lKHBhdGgpO1xuICB2YXIgcGFyZW50UGF0aCA9IGRpcm5hbWUocGF0aCk7XG5cbiAgdmFyIGRpcmVjdG9yeU5vZGU7XG4gIHZhciBkaXJlY3RvcnlEYXRhO1xuXG4gIGlmKFJPT1RfRElSRUNUT1JZX05BTUUgPT09IG5hbWUpIHtcbiAgICBmaW5kX25vZGUoY29udGV4dCwgcGF0aCwgY2FsbGJhY2spO1xuICB9IGVsc2Uge1xuICAgIGZpbmRfbm9kZShjb250ZXh0LCBwYXJlbnRQYXRoLCByZWFkX2RpcmVjdG9yeV9kYXRhKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRfZGlyZWN0b3J5X2RhdGEoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpcmVjdG9yeU5vZGUgPSByZXN1bHQ7XG4gICAgICBjb250ZXh0LmdldE9iamVjdChkaXJlY3RvcnlOb2RlLmRhdGEsIGNoZWNrX2lmX2ZpbGVfZXhpc3RzKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjcmVhdGVfbm9kZShlcnJvciwgZGF0YSkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZXJyb3IpO1xuICAgIH1cbiAgICBOb2RlLmNyZWF0ZShkYXRhLCBjYWxsYmFjayk7XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja19pZl9maWxlX2V4aXN0cyhlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlyZWN0b3J5RGF0YSA9IHJlc3VsdDtcbiAgICAgIGlmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGlyZWN0b3J5RGF0YSwgbmFtZSkpIHtcbiAgICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FTk9FTlQoJ2EgY29tcG9uZW50IG9mIHRoZSBwYXRoIGRvZXMgbm90IG5hbWUgYW4gZXhpc3RpbmcgZmlsZScsIHBhdGgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuZ2V0T2JqZWN0KGRpcmVjdG9yeURhdGFbbmFtZV0uaWQsIGNyZWF0ZV9ub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gbGlua19ub2RlKGNvbnRleHQsIG9sZHBhdGgsIG5ld3BhdGgsIGNhbGxiYWNrKSB7XG4gIG9sZHBhdGggPSBub3JtYWxpemUob2xkcGF0aCk7XG4gIHZhciBvbGRuYW1lID0gYmFzZW5hbWUob2xkcGF0aCk7XG4gIHZhciBvbGRQYXJlbnRQYXRoID0gZGlybmFtZShvbGRwYXRoKTtcblxuICBuZXdwYXRoID0gbm9ybWFsaXplKG5ld3BhdGgpO1xuICB2YXIgbmV3bmFtZSA9IGJhc2VuYW1lKG5ld3BhdGgpO1xuICB2YXIgbmV3UGFyZW50UGF0aCA9IGRpcm5hbWUobmV3cGF0aCk7XG4gIHZhciBjdGltZSA9IERhdGUubm93KCk7XG5cbiAgdmFyIG9sZERpcmVjdG9yeU5vZGU7XG4gIHZhciBvbGREaXJlY3RvcnlEYXRhO1xuICB2YXIgbmV3RGlyZWN0b3J5Tm9kZTtcbiAgdmFyIG5ld0RpcmVjdG9yeURhdGE7XG4gIHZhciBmaWxlTm9kZUlEO1xuICB2YXIgZmlsZU5vZGU7XG5cbiAgZnVuY3Rpb24gdXBkYXRlX3RpbWUoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1cGRhdGVfbm9kZV90aW1lcyhjb250ZXh0LCBuZXdwYXRoLCBmaWxlTm9kZSwgeyBjdGltZTogY3RpbWUgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZV9maWxlX25vZGUoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbGVOb2RlID0gcmVzdWx0O1xuICAgICAgZmlsZU5vZGUubmxpbmtzICs9IDE7XG4gICAgICBjb250ZXh0LnB1dE9iamVjdChmaWxlTm9kZS5pZCwgZmlsZU5vZGUsIHVwZGF0ZV90aW1lKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkX2ZpbGVfbm9kZShlcnJvcikge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnRleHQuZ2V0T2JqZWN0KGZpbGVOb2RlSUQsIHVwZGF0ZV9maWxlX25vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrX2lmX25ld19maWxlX2V4aXN0cyhlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3RGlyZWN0b3J5RGF0YSA9IHJlc3VsdDtcbiAgICAgIGlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuZXdEaXJlY3RvcnlEYXRhLCBuZXduYW1lKSkge1xuICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVFWElTVCgnbmV3cGF0aCByZXNvbHZlcyB0byBhbiBleGlzdGluZyBmaWxlJywgbmV3bmFtZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbmV3RGlyZWN0b3J5RGF0YVtuZXduYW1lXSA9IG9sZERpcmVjdG9yeURhdGFbb2xkbmFtZV07XG4gICAgICAgIGZpbGVOb2RlSUQgPSBuZXdEaXJlY3RvcnlEYXRhW25ld25hbWVdLmlkO1xuICAgICAgICBjb250ZXh0LnB1dE9iamVjdChuZXdEaXJlY3RvcnlOb2RlLmRhdGEsIG5ld0RpcmVjdG9yeURhdGEsIHJlYWRfZmlsZV9ub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkX25ld19kaXJlY3RvcnlfZGF0YShlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3RGlyZWN0b3J5Tm9kZSA9IHJlc3VsdDtcbiAgICAgIGNvbnRleHQuZ2V0T2JqZWN0KG5ld0RpcmVjdG9yeU5vZGUuZGF0YSwgY2hlY2tfaWZfbmV3X2ZpbGVfZXhpc3RzKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja19pZl9vbGRfZmlsZV9leGlzdHMoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9sZERpcmVjdG9yeURhdGEgPSByZXN1bHQ7XG4gICAgICBpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9sZERpcmVjdG9yeURhdGEsIG9sZG5hbWUpKSB7XG4gICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRU5PRU5UKCdhIGNvbXBvbmVudCBvZiBlaXRoZXIgcGF0aCBwcmVmaXggZG9lcyBub3QgZXhpc3QnLCBvbGRuYW1lKSk7XG4gICAgICB9IGVsc2UgaWYob2xkRGlyZWN0b3J5RGF0YVtvbGRuYW1lXS50eXBlID09PSBOT0RFX1RZUEVfRElSRUNUT1JZKSB7XG4gICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRVBFUk0oJ29sZHBhdGggcmVmZXJzIHRvIGEgZGlyZWN0b3J5JykpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmluZF9ub2RlKGNvbnRleHQsIG5ld1BhcmVudFBhdGgsIHJlYWRfbmV3X2RpcmVjdG9yeV9kYXRhKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiByZWFkX29sZF9kaXJlY3RvcnlfZGF0YShlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2xkRGlyZWN0b3J5Tm9kZSA9IHJlc3VsdDtcbiAgICAgIGNvbnRleHQuZ2V0T2JqZWN0KG9sZERpcmVjdG9yeU5vZGUuZGF0YSwgY2hlY2tfaWZfb2xkX2ZpbGVfZXhpc3RzKTtcbiAgICB9XG4gIH1cblxuICBmaW5kX25vZGUoY29udGV4dCwgb2xkUGFyZW50UGF0aCwgcmVhZF9vbGRfZGlyZWN0b3J5X2RhdGEpO1xufVxuXG5mdW5jdGlvbiB1bmxpbmtfbm9kZShjb250ZXh0LCBwYXRoLCBjYWxsYmFjaykge1xuICBwYXRoID0gbm9ybWFsaXplKHBhdGgpO1xuICB2YXIgbmFtZSA9IGJhc2VuYW1lKHBhdGgpO1xuICB2YXIgcGFyZW50UGF0aCA9IGRpcm5hbWUocGF0aCk7XG5cbiAgdmFyIGRpcmVjdG9yeU5vZGU7XG4gIHZhciBkaXJlY3RvcnlEYXRhO1xuICB2YXIgZmlsZU5vZGU7XG5cbiAgZnVuY3Rpb24gdXBkYXRlX2RpcmVjdG9yeV9kYXRhKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGVsZXRlIGRpcmVjdG9yeURhdGFbbmFtZV07XG4gICAgICBjb250ZXh0LnB1dE9iamVjdChkaXJlY3RvcnlOb2RlLmRhdGEsIGRpcmVjdG9yeURhdGEsIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgIHVwZGF0ZV9ub2RlX3RpbWVzKGNvbnRleHQsIHBhcmVudFBhdGgsIGRpcmVjdG9yeU5vZGUsIHsgbXRpbWU6IG5vdywgY3RpbWU6IG5vdyB9LCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGRlbGV0ZV9maWxlX2RhdGEoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb250ZXh0LmRlbGV0ZShmaWxlTm9kZS5kYXRhLCB1cGRhdGVfZGlyZWN0b3J5X2RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZV9maWxlX25vZGUoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpbGVOb2RlID0gcmVzdWx0O1xuICAgICAgZmlsZU5vZGUubmxpbmtzIC09IDE7XG4gICAgICBpZihmaWxlTm9kZS5ubGlua3MgPCAxKSB7XG4gICAgICAgIGNvbnRleHQuZGVsZXRlKGZpbGVOb2RlLmlkLCBkZWxldGVfZmlsZV9kYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQucHV0T2JqZWN0KGZpbGVOb2RlLmlkLCBmaWxlTm9kZSwgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICAgICAgICBpZihlcnJvcikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB1cGRhdGVfbm9kZV90aW1lcyhjb250ZXh0LCBwYXRoLCBmaWxlTm9kZSwgeyBjdGltZTogRGF0ZS5ub3coKSB9LCB1cGRhdGVfZGlyZWN0b3J5X2RhdGEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tfaWZfbm9kZV9pc19kaXJlY3RvcnkoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIGlmKHJlc3VsdC50eXBlID09PSBOT0RFX1RZUEVfRElSRUNUT1JZKSB7XG4gICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVQRVJNKCd1bmxpbmsgbm90IHBlcm1pdHRlZCBvbiBkaXJlY3RvcmllcycsIG5hbWUpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlX2ZpbGVfbm9kZShudWxsLCByZXN1bHQpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrX2lmX2ZpbGVfZXhpc3RzKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXJlY3RvcnlEYXRhID0gcmVzdWx0O1xuICAgICAgaWYoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkaXJlY3RvcnlEYXRhLCBuYW1lKSkge1xuICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVOT0VOVCgnYSBjb21wb25lbnQgb2YgdGhlIHBhdGggZG9lcyBub3QgbmFtZSBhbiBleGlzdGluZyBmaWxlJywgbmFtZSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udGV4dC5nZXRPYmplY3QoZGlyZWN0b3J5RGF0YVtuYW1lXS5pZCwgY2hlY2tfaWZfbm9kZV9pc19kaXJlY3RvcnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRfZGlyZWN0b3J5X2RhdGEoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpcmVjdG9yeU5vZGUgPSByZXN1bHQ7XG4gICAgICBjb250ZXh0LmdldE9iamVjdChkaXJlY3RvcnlOb2RlLmRhdGEsIGNoZWNrX2lmX2ZpbGVfZXhpc3RzKTtcbiAgICB9XG4gIH1cblxuICBmaW5kX25vZGUoY29udGV4dCwgcGFyZW50UGF0aCwgcmVhZF9kaXJlY3RvcnlfZGF0YSk7XG59XG5cbmZ1bmN0aW9uIHJlYWRfZGlyZWN0b3J5KGNvbnRleHQsIHBhdGgsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIHBhdGggPSBub3JtYWxpemUocGF0aCk7XG5cbiAgaWYgKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBvcHRpb25zID0gdmFsaWRhdGVfZGlyZWN0b3J5X29wdGlvbnMob3B0aW9ucyk7XG5cbiAgdmFyIGRpcmVjdG9yeU5vZGU7XG4gIHZhciBkaXJlY3RvcnlEYXRhO1xuXG4gIGZ1bmN0aW9uIGhhbmRsZV9kaXJlY3RvcnlfZGF0YShlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpcmVjdG9yeURhdGEgPSByZXN1bHQ7XG4gICAgICB2YXIgZmlsZXMgPSBPYmplY3Qua2V5cyhkaXJlY3RvcnlEYXRhKTtcblxuICAgICAgaWYgKG9wdGlvbnMuZW5jb2RpbmcpIHtcbiAgICAgICAgdmFyIGZpbGVCdWZmZXJzID0gZmlsZXMubWFwKGZ1bmN0aW9uIChmaWxlKSB7XG4gICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGZpbGUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAob3B0aW9ucy5lbmNvZGluZyA9PT0gJ2J1ZmZlcicpIHtcbiAgICAgICAgICBmaWxlcyA9IGZpbGVCdWZmZXJzO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGZpbGVzID0gZmlsZUJ1ZmZlcnMubWFwKGZ1bmN0aW9uIChmaWxlQnVmZmVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsZUJ1ZmZlci50b1N0cmluZyhvcHRpb25zLmVuY29kaW5nKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAob3B0aW9ucy53aXRoRmlsZVR5cGVzKSB7XG4gICAgICAgIHZhciBkaXJFbnRzID0gW107XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWlubmVyLWRlY2xhcmF0aW9uc1xuICAgICAgICBmdW5jdGlvbiB0b19kaXJfZW50cnkoZmlsZSwgY2FsbGJhY2spIHtcbiAgICAgICAgICBjb25zdCBmaWxlbmFtZSA9IEJ1ZmZlci5mcm9tKGZpbGUsIG9wdGlvbnMuZW5jb2RpbmcpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgY29uc3QgZmlsZXBhdGggPSBQYXRoLmpvaW4ocGF0aCwgZmlsZW5hbWUpO1xuICAgICAgICAgIGdldF9kaXJfZW50cnkoY29udGV4dCwgZmlsZXBhdGgsIGZ1bmN0aW9uKGVycm9yLCBkaXJFbnQpIHtcbiAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkaXJFbnQubmFtZSA9IGZpbGU7XG4gICAgICAgICAgICBkaXJFbnRzLnB1c2goZGlyRW50KTtcbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBhc3luYy5lYWNoU2VyaWVzKGZpbGVzLCB0b19kaXJfZW50cnksIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycm9yLCBkaXJFbnRzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGVsc2Uge1xuICAgICAgICBjYWxsYmFjayhudWxsLCBmaWxlcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZF9kaXJlY3RvcnlfZGF0YShlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIGlmIChyZXN1bHQudHlwZSAhPT0gTk9ERV9UWVBFX0RJUkVDVE9SWSkge1xuICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FTk9URElSKG51bGwsIHBhdGgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlyZWN0b3J5Tm9kZSA9IHJlc3VsdDtcbiAgICAgIGNvbnRleHQuZ2V0T2JqZWN0KGRpcmVjdG9yeU5vZGUuZGF0YSwgaGFuZGxlX2RpcmVjdG9yeV9kYXRhKTtcbiAgICB9XG4gIH1cblxuICBmaW5kX25vZGUoY29udGV4dCwgcGF0aCwgcmVhZF9kaXJlY3RvcnlfZGF0YSk7XG59XG5cbmZ1bmN0aW9uIGdldF9kaXJfZW50cnkoY29udGV4dCwgcGF0aCwgY2FsbGJhY2spIHtcbiAgZnVuY3Rpb24gY2hlY2tfcmVzdWx0KGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RhdHMgPSBuZXcgRGlyZW50KHBhdGgsIHJlc3VsdCwgY29udGV4dC5uYW1lKTtcbiAgICAgIGNhbGxiYWNrKG51bGwsIHN0YXRzKTtcbiAgICB9XG4gIH1cblxuICBsc3RhdF9maWxlKGNvbnRleHQsIHBhdGgsIGNoZWNrX3Jlc3VsdCk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlX2RpcmVjdG9yeV9vcHRpb25zKG9wdGlvbnMsIGVuYykge1xuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0geyBlbmNvZGluZzogZW5jIH07XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRpb25zID0geyBlbmNvZGluZzogZW5jIH07XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMgfTtcbiAgfVxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuZnVuY3Rpb24gbWFrZV9zeW1ib2xpY19saW5rKGNvbnRleHQsIHNyY3BhdGgsIGRzdHBhdGgsIGNhbGxiYWNrKSB7XG4gIGRzdHBhdGggPSBub3JtYWxpemUoZHN0cGF0aCk7XG4gIHZhciBuYW1lID0gYmFzZW5hbWUoZHN0cGF0aCk7XG4gIHZhciBwYXJlbnRQYXRoID0gZGlybmFtZShkc3RwYXRoKTtcblxuICB2YXIgZGlyZWN0b3J5Tm9kZTtcbiAgdmFyIGRpcmVjdG9yeURhdGE7XG4gIHZhciBmaWxlTm9kZTtcblxuICBpZihST09UX0RJUkVDVE9SWV9OQU1FID09PSBuYW1lKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FRVhJU1QobnVsbCwgbmFtZSkpO1xuICB9IGVsc2Uge1xuICAgIGZpbmRfbm9kZShjb250ZXh0LCBwYXJlbnRQYXRoLCByZWFkX2RpcmVjdG9yeV9kYXRhKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRfZGlyZWN0b3J5X2RhdGEoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpcmVjdG9yeU5vZGUgPSByZXN1bHQ7XG4gICAgICBjb250ZXh0LmdldE9iamVjdChkaXJlY3RvcnlOb2RlLmRhdGEsIGNoZWNrX2lmX2ZpbGVfZXhpc3RzKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja19pZl9maWxlX2V4aXN0cyhlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlyZWN0b3J5RGF0YSA9IHJlc3VsdDtcbiAgICAgIGlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkaXJlY3RvcnlEYXRhLCBuYW1lKSkge1xuICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVFWElTVChudWxsLCBuYW1lKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3cml0ZV9maWxlX25vZGUoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB3cml0ZV9maWxlX25vZGUoKSB7XG4gICAgTm9kZS5jcmVhdGUoe1xuICAgICAgZ3VpZDogY29udGV4dC5ndWlkLFxuICAgICAgdHlwZTogTk9ERV9UWVBFX1NZTUJPTElDX0xJTktcbiAgICB9LCBmdW5jdGlvbihlcnJvciwgcmVzdWx0KSB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGZpbGVOb2RlID0gcmVzdWx0O1xuICAgICAgZmlsZU5vZGUubmxpbmtzICs9IDE7XG5cbiAgICAgIC8vIElmIHRoZSBzcmNwYXRoIGlzbid0IGFic29sdXRlLCByZXNvbHZlIGl0IHJlbGF0aXZlIHRvIHRoZSBkc3RwYXRoXG4gICAgICAvLyBidXQgc3RvcmUgYm90aCB2ZXJzaW9ucywgc2luY2Ugd2UnbGwgdXNlIHRoZSByZWxhdGl2ZSBvbmUgaW4gcmVhZGxpbmsoKS5cbiAgICAgIGlmKCFpc0Fic29sdXRlUGF0aChzcmNwYXRoKSkge1xuICAgICAgICBmaWxlTm9kZS5zeW1saW5rX3JlbHBhdGggPSBzcmNwYXRoO1xuICAgICAgICBzcmNwYXRoID0gUGF0aC5yZXNvbHZlKHBhcmVudFBhdGgsIHNyY3BhdGgpO1xuICAgICAgfVxuXG4gICAgICBmaWxlTm9kZS5zaXplID0gc3JjcGF0aC5sZW5ndGg7XG4gICAgICBmaWxlTm9kZS5kYXRhID0gc3JjcGF0aDtcblxuICAgICAgY29udGV4dC5wdXRPYmplY3QoZmlsZU5vZGUuaWQsIGZpbGVOb2RlLCB1cGRhdGVfZGlyZWN0b3J5X2RhdGEpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlX3RpbWUoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgIHVwZGF0ZV9ub2RlX3RpbWVzKGNvbnRleHQsIHBhcmVudFBhdGgsIGRpcmVjdG9yeU5vZGUsIHsgbXRpbWU6IG5vdywgY3RpbWU6IG5vdyB9LCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlX2RpcmVjdG9yeV9kYXRhKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZGlyZWN0b3J5RGF0YVtuYW1lXSA9IG5ldyBEaXJlY3RvcnlFbnRyeShmaWxlTm9kZS5pZCwgTk9ERV9UWVBFX1NZTUJPTElDX0xJTkspO1xuICAgICAgY29udGV4dC5wdXRPYmplY3QoZGlyZWN0b3J5Tm9kZS5kYXRhLCBkaXJlY3RvcnlEYXRhLCB1cGRhdGVfdGltZSk7XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRfbGluayhjb250ZXh0LCBwYXRoLCBjYWxsYmFjaykge1xuICBwYXRoID0gbm9ybWFsaXplKHBhdGgpO1xuICB2YXIgbmFtZSA9IGJhc2VuYW1lKHBhdGgpO1xuICB2YXIgcGFyZW50UGF0aCA9IGRpcm5hbWUocGF0aCk7XG5cbiAgdmFyIGRpcmVjdG9yeU5vZGU7XG4gIHZhciBkaXJlY3RvcnlEYXRhO1xuXG4gIGZpbmRfbm9kZShjb250ZXh0LCBwYXJlbnRQYXRoLCByZWFkX2RpcmVjdG9yeV9kYXRhKTtcblxuICBmdW5jdGlvbiByZWFkX2RpcmVjdG9yeV9kYXRhKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkaXJlY3RvcnlOb2RlID0gcmVzdWx0O1xuICAgICAgY29udGV4dC5nZXRPYmplY3QoZGlyZWN0b3J5Tm9kZS5kYXRhLCBjaGVja19pZl9maWxlX2V4aXN0cyk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tfaWZfZmlsZV9leGlzdHMoZXJyb3IsIHJlc3VsdCkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGRpcmVjdG9yeURhdGEgPSByZXN1bHQ7XG4gICAgICBpZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRpcmVjdG9yeURhdGEsIG5hbWUpKSB7XG4gICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRU5PRU5UKCdhIGNvbXBvbmVudCBvZiB0aGUgcGF0aCBkb2VzIG5vdCBuYW1lIGFuIGV4aXN0aW5nIGZpbGUnLCBuYW1lKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb250ZXh0LmdldE9iamVjdChkaXJlY3RvcnlEYXRhW25hbWVdLmlkLCBjaGVja19pZl9zeW1ib2xpYyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tfaWZfc3ltYm9saWMoZXJyb3IsIGZpbGVOb2RlKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYoZmlsZU5vZGUudHlwZSAhPT0gTk9ERV9UWVBFX1NZTUJPTElDX0xJTkspIHtcbiAgICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSU5WQUwoJ3BhdGggbm90IGEgc3ltYm9saWMgbGluaycsIHBhdGgpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIElmIHdlIHdlcmUgb3JpZ2luYWxseSBnaXZlbiBhIHJlbGF0aXZlIHBhdGgsIHJldHVybiB0aGF0IG5vdyB2cy4gdGhlXG4gICAgICAgIC8vIGFic29sdXRlIHBhdGggd2UndmUgZ2VuZXJhdGVkIGFuZCB1c2UgZWxzZXdoZXJlIGludGVybmFsbHkuXG4gICAgICAgIHZhciB0YXJnZXQgPSBmaWxlTm9kZS5zeW1saW5rX3JlbHBhdGggPyBmaWxlTm9kZS5zeW1saW5rX3JlbHBhdGggOiBmaWxlTm9kZS5kYXRhO1xuICAgICAgICBjYWxsYmFjayhudWxsLCB0YXJnZXQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0cnVuY2F0ZV9maWxlKGNvbnRleHQsIHBhdGgsIGxlbmd0aCwgY2FsbGJhY2spIHtcbiAgcGF0aCA9IG5vcm1hbGl6ZShwYXRoKTtcblxuICB2YXIgZmlsZU5vZGU7XG5cbiAgZnVuY3Rpb24gcmVhZF9maWxlX2RhdGEgKGVycm9yLCBub2RlKSB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIGlmKG5vZGUudHlwZSA9PT0gTk9ERV9UWVBFX0RJUkVDVE9SWSApIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlTRElSKG51bGwsIHBhdGgpKTtcbiAgICB9IGVsc2V7XG4gICAgICBmaWxlTm9kZSA9IG5vZGU7XG4gICAgICBjb250ZXh0LmdldEJ1ZmZlcihmaWxlTm9kZS5kYXRhLCB0cnVuY2F0ZV9maWxlX2RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHRydW5jYXRlX2ZpbGVfZGF0YShlcnJvciwgZmlsZURhdGEpIHtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYoIWZpbGVEYXRhKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTygnRXhwZWN0ZWQgQnVmZmVyJykpO1xuICAgICAgfVxuICAgICAgdmFyIGRhdGEgPSBCdWZmZXIuYWxsb2MobGVuZ3RoKTtcbiAgICAgIGlmKGZpbGVEYXRhKSB7XG4gICAgICAgIGZpbGVEYXRhLmNvcHkoZGF0YSk7XG4gICAgICB9XG4gICAgICBjb250ZXh0LnB1dEJ1ZmZlcihmaWxlTm9kZS5kYXRhLCBkYXRhLCB1cGRhdGVfZmlsZV9ub2RlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVfdGltZShlcnJvcikge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgdXBkYXRlX25vZGVfdGltZXMoY29udGV4dCwgcGF0aCwgZmlsZU5vZGUsIHsgbXRpbWU6IG5vdywgY3RpbWU6IG5vdyB9LCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlX2ZpbGVfbm9kZSAoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWxlTm9kZS5zaXplID0gbGVuZ3RoO1xuICAgICAgZmlsZU5vZGUudmVyc2lvbiArPSAxO1xuICAgICAgY29udGV4dC5wdXRPYmplY3QoZmlsZU5vZGUuaWQsIGZpbGVOb2RlLCB1cGRhdGVfdGltZSk7XG4gICAgfVxuICB9XG5cbiAgaWYobGVuZ3RoIDwgMCkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdsZW5ndGggY2Fubm90IGJlIG5lZ2F0aXZlJykpO1xuICB9IGVsc2Uge1xuICAgIGZpbmRfbm9kZShjb250ZXh0LCBwYXRoLCByZWFkX2ZpbGVfZGF0YSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZnRydW5jYXRlX2ZpbGUoY29udGV4dCwgb2ZkLCBsZW5ndGgsIGNhbGxiYWNrKSB7XG4gIHZhciBmaWxlTm9kZTtcblxuICBmdW5jdGlvbiByZWFkX2ZpbGVfZGF0YSAoZXJyb3IsIG5vZGUpIHtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2UgaWYobm9kZS50eXBlID09PSBOT0RFX1RZUEVfRElSRUNUT1JZICkge1xuICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSVNESVIoKSk7XG4gICAgfSBlbHNle1xuICAgICAgZmlsZU5vZGUgPSBub2RlO1xuICAgICAgY29udGV4dC5nZXRCdWZmZXIoZmlsZU5vZGUuZGF0YSwgdHJ1bmNhdGVfZmlsZV9kYXRhKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB0cnVuY2F0ZV9maWxlX2RhdGEoZXJyb3IsIGZpbGVEYXRhKSB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBkYXRhO1xuICAgICAgaWYoIWZpbGVEYXRhKSB7XG4gICAgICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTygnRXhwZWN0ZWQgQnVmZmVyJykpO1xuICAgICAgfVxuICAgICAgaWYoZmlsZURhdGEpIHtcbiAgICAgICAgZGF0YSA9IGZpbGVEYXRhLnNsaWNlKDAsIGxlbmd0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkYXRhID0gQnVmZmVyLmFsbG9jKGxlbmd0aCk7XG4gICAgICB9XG4gICAgICBjb250ZXh0LnB1dEJ1ZmZlcihmaWxlTm9kZS5kYXRhLCBkYXRhLCB1cGRhdGVfZmlsZV9ub2RlKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVfdGltZShlcnJvcikge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgdXBkYXRlX25vZGVfdGltZXMoY29udGV4dCwgb2ZkLnBhdGgsIGZpbGVOb2RlLCB7IG10aW1lOiBub3csIGN0aW1lOiBub3cgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVwZGF0ZV9maWxlX25vZGUgKGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmlsZU5vZGUuc2l6ZSA9IGxlbmd0aDtcbiAgICAgIGZpbGVOb2RlLnZlcnNpb24gKz0gMTtcbiAgICAgIGNvbnRleHQucHV0T2JqZWN0KGZpbGVOb2RlLmlkLCBmaWxlTm9kZSwgdXBkYXRlX3RpbWUpO1xuICAgIH1cbiAgfVxuXG4gIGlmKGxlbmd0aCA8IDApIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnbGVuZ3RoIGNhbm5vdCBiZSBuZWdhdGl2ZScpKTtcbiAgfSBlbHNlIHtcbiAgICBvZmQuZ2V0Tm9kZShjb250ZXh0LCByZWFkX2ZpbGVfZGF0YSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdXRpbWVzX2ZpbGUoY29udGV4dCwgcGF0aCwgYXRpbWUsIG10aW1lLCBjYWxsYmFjaykge1xuICBwYXRoID0gbm9ybWFsaXplKHBhdGgpO1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZV90aW1lcyhlcnJvciwgbm9kZSkge1xuICAgIGlmIChlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1cGRhdGVfbm9kZV90aW1lcyhjb250ZXh0LCBwYXRoLCBub2RlLCB7IGF0aW1lOiBhdGltZSwgY3RpbWU6IG10aW1lLCBtdGltZTogbXRpbWUgfSwgY2FsbGJhY2spO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgYXRpbWUgIT09ICdudW1iZXInIHx8IHR5cGVvZiBtdGltZSAhPT0gJ251bWJlcicpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnYXRpbWUgYW5kIG10aW1lIG11c3QgYmUgbnVtYmVyJywgcGF0aCkpO1xuICB9XG4gIGVsc2UgaWYgKGF0aW1lIDwgMCB8fCBtdGltZSA8IDApIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnYXRpbWUgYW5kIG10aW1lIG11c3QgYmUgcG9zaXRpdmUgaW50ZWdlcnMnLCBwYXRoKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgZmluZF9ub2RlKGNvbnRleHQsIHBhdGgsIHVwZGF0ZV90aW1lcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZnV0aW1lc19maWxlKGNvbnRleHQsIG9mZCwgYXRpbWUsIG10aW1lLCBjYWxsYmFjaykge1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZV90aW1lcyAoZXJyb3IsIG5vZGUpIHtcbiAgICBpZiAoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdXBkYXRlX25vZGVfdGltZXMoY29udGV4dCwgb2ZkLnBhdGgsIG5vZGUsIHsgYXRpbWU6IGF0aW1lLCBjdGltZTogbXRpbWUsIG10aW1lOiBtdGltZSB9LCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBhdGltZSAhPT0gJ251bWJlcicgfHwgdHlwZW9mIG10aW1lICE9PSAnbnVtYmVyJykge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdhdGltZSBhbmQgbXRpbWUgbXVzdCBiZSBhIG51bWJlcicpKTtcbiAgfVxuICBlbHNlIGlmIChhdGltZSA8IDAgfHwgbXRpbWUgPCAwKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSU5WQUwoJ2F0aW1lIGFuZCBtdGltZSBtdXN0IGJlIHBvc2l0aXZlIGludGVnZXJzJykpO1xuICB9XG4gIGVsc2Uge1xuICAgIG9mZC5nZXROb2RlKGNvbnRleHQsIHVwZGF0ZV90aW1lcyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0eGF0dHJfZmlsZShjb250ZXh0LCBwYXRoLCBuYW1lLCB2YWx1ZSwgZmxhZywgY2FsbGJhY2spIHtcbiAgcGF0aCA9IG5vcm1hbGl6ZShwYXRoKTtcblxuICBmdW5jdGlvbiBzZXR4YXR0cihlcnJvciwgbm9kZSkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZXJyb3IpO1xuICAgIH1cbiAgICBzZXRfZXh0ZW5kZWRfYXR0cmlidXRlKGNvbnRleHQsIHBhdGgsIG5vZGUsIG5hbWUsIHZhbHVlLCBmbGFnLCBjYWxsYmFjayk7XG4gIH1cblxuICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSU5WQUwoJ2F0dHJpYnV0ZSBuYW1lIG11c3QgYmUgYSBzdHJpbmcnLCBwYXRoKSk7XG4gIH1cbiAgZWxzZSBpZiAoIW5hbWUpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnYXR0cmlidXRlIG5hbWUgY2Fubm90IGJlIGFuIGVtcHR5IHN0cmluZycsIHBhdGgpKTtcbiAgfVxuICBlbHNlIGlmIChmbGFnICE9PSBudWxsICYmXG4gICAgICAgICAgIGZsYWcgIT09IFhBVFRSX0NSRUFURSAmJiBmbGFnICE9PSBYQVRUUl9SRVBMQUNFKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSU5WQUwoJ2ludmFsaWQgZmxhZywgbXVzdCBiZSBudWxsLCBYQVRUUl9DUkVBVEUgb3IgWEFUVFJfUkVQTEFDRScsIHBhdGgpKTtcbiAgfVxuICBlbHNlIHtcbiAgICBmaW5kX25vZGUoY29udGV4dCwgcGF0aCwgc2V0eGF0dHIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZzZXR4YXR0cl9maWxlIChjb250ZXh0LCBvZmQsIG5hbWUsIHZhbHVlLCBmbGFnLCBjYWxsYmFjaykge1xuICBmdW5jdGlvbiBzZXR4YXR0cihlcnJvciwgbm9kZSkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZXJyb3IpO1xuICAgIH1cbiAgICBzZXRfZXh0ZW5kZWRfYXR0cmlidXRlKGNvbnRleHQsIG9mZC5wYXRoLCBub2RlLCBuYW1lLCB2YWx1ZSwgZmxhZywgY2FsbGJhY2spO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdhdHRyaWJ1dGUgbmFtZSBtdXN0IGJlIGEgc3RyaW5nJykpO1xuICB9XG4gIGVsc2UgaWYgKCFuYW1lKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSU5WQUwoJ2F0dHJpYnV0ZSBuYW1lIGNhbm5vdCBiZSBhbiBlbXB0eSBzdHJpbmcnKSk7XG4gIH1cbiAgZWxzZSBpZiAoZmxhZyAhPT0gbnVsbCAmJlxuICAgICAgICAgICBmbGFnICE9PSBYQVRUUl9DUkVBVEUgJiYgZmxhZyAhPT0gWEFUVFJfUkVQTEFDRSkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdpbnZhbGlkIGZsYWcsIG11c3QgYmUgbnVsbCwgWEFUVFJfQ1JFQVRFIG9yIFhBVFRSX1JFUExBQ0UnKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgb2ZkLmdldE5vZGUoY29udGV4dCwgc2V0eGF0dHIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldHhhdHRyX2ZpbGUgKGNvbnRleHQsIHBhdGgsIG5hbWUsIGNhbGxiYWNrKSB7XG4gIHBhdGggPSBub3JtYWxpemUocGF0aCk7XG5cbiAgZnVuY3Rpb24gZ2V0X3hhdHRyKGVycm9yLCBub2RlKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnJvcik7XG4gICAgfVxuXG4gICAgdmFyIHhhdHRycyA9IG5vZGUueGF0dHJzO1xuXG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeGF0dHJzLCBuYW1lKSkge1xuICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FTk9BVFRSKG51bGwsIHBhdGgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBjYWxsYmFjayhudWxsLCB4YXR0cnNbbmFtZV0pO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnYXR0cmlidXRlIG5hbWUgbXVzdCBiZSBhIHN0cmluZycsIHBhdGgpKTtcbiAgfVxuICBlbHNlIGlmICghbmFtZSkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdhdHRyaWJ1dGUgbmFtZSBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nJywgcGF0aCkpO1xuICB9XG4gIGVsc2Uge1xuICAgIGZpbmRfbm9kZShjb250ZXh0LCBwYXRoLCBnZXRfeGF0dHIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZnZXR4YXR0cl9maWxlIChjb250ZXh0LCBvZmQsIG5hbWUsIGNhbGxiYWNrKSB7XG5cbiAgZnVuY3Rpb24gZ2V0X3hhdHRyIChlcnJvciwgbm9kZSkge1xuICAgIGlmIChlcnJvcikge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9XG5cbiAgICB2YXIgeGF0dHJzID0gbm9kZS54YXR0cnM7XG5cbiAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh4YXR0cnMsIG5hbWUpKSB7XG4gICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVOT0FUVFIoKSk7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgY2FsbGJhY2sobnVsbCwgeGF0dHJzW25hbWVdKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSU5WQUwoKSk7XG4gIH1cbiAgZWxzZSBpZiAoIW5hbWUpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnYXR0cmlidXRlIG5hbWUgY2Fubm90IGJlIGFuIGVtcHR5IHN0cmluZycpKTtcbiAgfVxuICBlbHNlIHtcbiAgICBvZmQuZ2V0Tm9kZShjb250ZXh0LCBnZXRfeGF0dHIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZXhhdHRyX2ZpbGUgKGNvbnRleHQsIHBhdGgsIG5hbWUsIGNhbGxiYWNrKSB7XG4gIHBhdGggPSBub3JtYWxpemUocGF0aCk7XG5cbiAgZnVuY3Rpb24gcmVtb3ZlX3hhdHRyIChlcnJvciwgbm9kZSkge1xuICAgIGlmIChlcnJvcikge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVfdGltZShlcnJvcikge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXBkYXRlX25vZGVfdGltZXMoY29udGV4dCwgcGF0aCwgbm9kZSwgeyBjdGltZTogRGF0ZS5ub3coKSB9LCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHhhdHRycyA9IG5vZGUueGF0dHJzO1xuXG4gICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoeGF0dHJzLCBuYW1lKSkge1xuICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FTk9BVFRSKG51bGwsIHBhdGgpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBkZWxldGUgeGF0dHJzW25hbWVdO1xuICAgICAgY29udGV4dC5wdXRPYmplY3Qobm9kZS5pZCwgbm9kZSwgdXBkYXRlX3RpbWUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnYXR0cmlidXRlIG5hbWUgbXVzdCBiZSBhIHN0cmluZycsIHBhdGgpKTtcbiAgfVxuICBlbHNlIGlmICghbmFtZSkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdhdHRyaWJ1dGUgbmFtZSBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nJywgcGF0aCkpO1xuICB9XG4gIGVsc2Uge1xuICAgIGZpbmRfbm9kZShjb250ZXh0LCBwYXRoLCByZW1vdmVfeGF0dHIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZyZW1vdmV4YXR0cl9maWxlIChjb250ZXh0LCBvZmQsIG5hbWUsIGNhbGxiYWNrKSB7XG5cbiAgZnVuY3Rpb24gcmVtb3ZlX3hhdHRyIChlcnJvciwgbm9kZSkge1xuICAgIGlmIChlcnJvcikge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiB1cGRhdGVfdGltZShlcnJvcikge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXBkYXRlX25vZGVfdGltZXMoY29udGV4dCwgb2ZkLnBhdGgsIG5vZGUsIHsgY3RpbWU6IERhdGUubm93KCkgfSwgY2FsbGJhY2spO1xuICAgICAgfVxuICAgIH1cblxuICAgIHZhciB4YXR0cnMgPSBub2RlLnhhdHRycztcblxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHhhdHRycywgbmFtZSkpIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRU5PQVRUUigpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBkZWxldGUgeGF0dHJzW25hbWVdO1xuICAgICAgY29udGV4dC5wdXRPYmplY3Qobm9kZS5pZCwgbm9kZSwgdXBkYXRlX3RpbWUpO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnYXR0cmlidXRlIG5hbWUgbXVzdCBiZSBhIHN0cmluZycpKTtcbiAgfVxuICBlbHNlIGlmICghbmFtZSkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdhdHRyaWJ1dGUgbmFtZSBjYW5ub3QgYmUgYW4gZW1wdHkgc3RyaW5nJykpO1xuICB9XG4gIGVsc2Uge1xuICAgIG9mZC5nZXROb2RlKGNvbnRleHQsIHJlbW92ZV94YXR0cik7XG4gIH1cbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVfZmxhZ3MoZmxhZ3MpIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChPX0ZMQUdTLCBmbGFncykgPyBPX0ZMQUdTW2ZsYWdzXSA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlX2ZpbGVfb3B0aW9ucyhvcHRpb25zLCBlbmMsIGZpbGVNb2RlKXtcbiAgaWYoIW9wdGlvbnMpIHtcbiAgICBvcHRpb25zID0geyBlbmNvZGluZzogZW5jLCBmbGFnOiBmaWxlTW9kZSB9O1xuICB9IGVsc2UgaWYodHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBvcHRpb25zID0geyBlbmNvZGluZzogZW5jLCBmbGFnOiBmaWxlTW9kZSB9O1xuICB9IGVsc2UgaWYodHlwZW9mIG9wdGlvbnMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0aW9ucyA9IHsgZW5jb2Rpbmc6IG9wdGlvbnMsIGZsYWc6IGZpbGVNb2RlIH07XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbmZ1bmN0aW9uIG9wZW4oY29udGV4dCwgcGF0aCwgZmxhZ3MsIG1vZGUsIGNhbGxiYWNrKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoIDwgNSApe1xuICAgIGNhbGxiYWNrID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICBtb2RlID0gMG82NDQ7XG4gIH1cbiAgZWxzZSB7XG4gICAgbW9kZSA9IHZhbGlkYXRlQW5kTWFza01vZGUobW9kZSwgRlVMTF9SRUFEX1dSSVRFX0VYRUNfUEVSTUlTU0lPTlMsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNoZWNrX3Jlc3VsdChlcnJvciwgZmlsZU5vZGUpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgcG9zaXRpb247XG4gICAgICBpZihmbGFncy5pbmNsdWRlcyhPX0FQUEVORCkpIHtcbiAgICAgICAgcG9zaXRpb24gPSBmaWxlTm9kZS5zaXplO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcG9zaXRpb24gPSAwO1xuICAgICAgfVxuICAgICAgdmFyIG9wZW5GaWxlRGVzY3JpcHRpb24gPSBuZXcgT3BlbkZpbGVEZXNjcmlwdGlvbihwYXRoLCBmaWxlTm9kZS5pZCwgZmxhZ3MsIHBvc2l0aW9uKTtcbiAgICAgIHZhciBmZCA9IG9wZW5GaWxlcy5hbGxvY0Rlc2NyaXB0b3Iob3BlbkZpbGVEZXNjcmlwdGlvbik7XG4gICAgICBjYWxsYmFjayhudWxsLCBmZCk7XG4gICAgfVxuICB9XG5cbiAgZmxhZ3MgPSB2YWxpZGF0ZV9mbGFncyhmbGFncyk7XG4gIGlmKCFmbGFncykge1xuICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnZmxhZ3MgaXMgbm90IHZhbGlkJyksIHBhdGgpO1xuICB9XG5cbiAgb3Blbl9maWxlKGNvbnRleHQsIHBhdGgsIGZsYWdzLCBtb2RlLCBjaGVja19yZXN1bHQpO1xufVxuXG5mdW5jdGlvbiBjbG9zZShjb250ZXh0LCBmZCwgY2FsbGJhY2spIHtcbiAgaWYoIW9wZW5GaWxlcy5nZXRPcGVuRmlsZURlc2NyaXB0aW9uKGZkKSkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUJBREYoKSk7XG4gIH0gZWxzZSB7XG4gICAgb3BlbkZpbGVzLnJlbGVhc2VEZXNjcmlwdG9yKGZkKTtcbiAgICBjYWxsYmFjayhudWxsKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBta25vZChjb250ZXh0LCBwYXRoLCB0eXBlLCBjYWxsYmFjaykge1xuICBtYWtlX25vZGUoY29udGV4dCwgcGF0aCwgdHlwZSwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBta2Rpcihjb250ZXh0LCBwYXRoLCBtb2RlLCBjYWxsYmFjaykge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA8IDQpIHtcbiAgICBjYWxsYmFjayA9IG1vZGU7XG4gICAgbW9kZSA9IEZVTExfUkVBRF9XUklURV9FWEVDX1BFUk1JU1NJT05TO1xuICB9IGVsc2Uge1xuICAgIG1vZGUgPSB2YWxpZGF0ZUFuZE1hc2tNb2RlKG1vZGUsIEZVTExfUkVBRF9XUklURV9FWEVDX1BFUk1JU1NJT05TLCBjYWxsYmFjayk7XG4gICAgaWYoIW1vZGUpIHJldHVybjtcbiAgfVxuXG4gIG1ha2VfZGlyZWN0b3J5KGNvbnRleHQsIHBhdGgsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gYWNjZXNzKGNvbnRleHQsIHBhdGgsIG1vZGUsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgbW9kZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gbW9kZTtcbiAgICBtb2RlID0gQ29uc3RhbnRzLmZzQ29uc3RhbnRzLkZfT0s7XG4gIH1cblxuICBtb2RlID0gbW9kZSB8IENvbnN0YW50cy5mc0NvbnN0YW50cy5GX09LO1xuICBhY2Nlc3NfZmlsZShjb250ZXh0LCBwYXRoLCBtb2RlLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIG1rZHRlbXAoY29udGV4dCwgcHJlZml4LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gIGlmKCFwcmVmaXgpIHtcbiAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9yKCdmaWxlbmFtZSBwcmVmaXggaXMgcmVxdWlyZWQnKSk7XG4gIH1cblxuICBsZXQgcmFuZG9tID0gc2hhcmVkLnJhbmRvbUNoYXJzKDYpO1xuICB2YXIgcGF0aCA9IHByZWZpeCArICctJyArIHJhbmRvbTtcblxuICBtYWtlX2RpcmVjdG9yeShjb250ZXh0LCBwYXRoLCBmdW5jdGlvbihlcnJvcikge1xuICAgIGNhbGxiYWNrKGVycm9yLCBwYXRoKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJtZGlyKGNvbnRleHQsIHBhdGgsIGNhbGxiYWNrKSB7XG4gIHJlbW92ZV9kaXJlY3RvcnkoY29udGV4dCwgcGF0aCwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBzdGF0KGNvbnRleHQsIHBhdGgsIGNhbGxiYWNrKSB7XG4gIGZ1bmN0aW9uIGNoZWNrX3Jlc3VsdChlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHN0YXRzID0gbmV3IFN0YXRzKHBhdGgsIHJlc3VsdCwgY29udGV4dC5uYW1lKTtcbiAgICAgIGNhbGxiYWNrKG51bGwsIHN0YXRzKTtcbiAgICB9XG4gIH1cblxuICBzdGF0X2ZpbGUoY29udGV4dCwgcGF0aCwgY2hlY2tfcmVzdWx0KTtcbn1cblxuZnVuY3Rpb24gZnN0YXQoY29udGV4dCwgZmQsIGNhbGxiYWNrKSB7XG4gIGZ1bmN0aW9uIGNoZWNrX3Jlc3VsdChlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHN0YXRzID0gbmV3IFN0YXRzKG9mZC5wYXRoLCByZXN1bHQsIGNvbnRleHQubmFtZSk7XG4gICAgICBjYWxsYmFjayhudWxsLCBzdGF0cyk7XG4gICAgfVxuICB9XG5cbiAgdmFyIG9mZCA9IG9wZW5GaWxlcy5nZXRPcGVuRmlsZURlc2NyaXB0aW9uKGZkKTtcbiAgaWYoIW9mZCkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUJBREYoKSk7XG4gIH0gZWxzZSB7XG4gICAgZnN0YXRfZmlsZShjb250ZXh0LCBvZmQsIGNoZWNrX3Jlc3VsdCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gbGluayhjb250ZXh0LCBvbGRwYXRoLCBuZXdwYXRoLCBjYWxsYmFjaykge1xuICBsaW5rX25vZGUoY29udGV4dCwgb2xkcGF0aCwgbmV3cGF0aCwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiB1bmxpbmsoY29udGV4dCwgcGF0aCwgY2FsbGJhY2spIHtcbiAgdW5saW5rX25vZGUoY29udGV4dCwgcGF0aCwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiByZWFkKGNvbnRleHQsIGZkLCBidWZmZXIsIG9mZnNldCwgbGVuZ3RoLCBwb3NpdGlvbiwgY2FsbGJhY2spIHtcbiAgLy8gRm9sbG93IGhvdyBub2RlLmpzIGRvZXMgdGhpc1xuICBmdW5jdGlvbiB3cmFwcGVkX2NiKGVyciwgYnl0ZXNSZWFkKSB7XG4gICAgLy8gUmV0YWluIGEgcmVmZXJlbmNlIHRvIGJ1ZmZlciBzbyB0aGF0IGl0IGNhbid0IGJlIEdDJ2VkIHRvbyBzb29uLlxuICAgIGNhbGxiYWNrKGVyciwgYnl0ZXNSZWFkIHx8IDAsIGJ1ZmZlcik7XG4gIH1cblxuICBvZmZzZXQgPSAodW5kZWZpbmVkID09PSBvZmZzZXQpID8gMCA6IG9mZnNldDtcbiAgbGVuZ3RoID0gKHVuZGVmaW5lZCA9PT0gbGVuZ3RoKSA/IGJ1ZmZlci5sZW5ndGggLSBvZmZzZXQgOiBsZW5ndGg7XG4gIGNhbGxiYWNrID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcblxuICB2YXIgb2ZkID0gb3BlbkZpbGVzLmdldE9wZW5GaWxlRGVzY3JpcHRpb24oZmQpO1xuICBpZighb2ZkKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FQkFERigpKTtcbiAgfSBlbHNlIGlmKCFvZmQuZmxhZ3MuaW5jbHVkZXMoT19SRUFEKSkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUJBREYoJ2Rlc2NyaXB0b3IgZG9lcyBub3QgcGVybWl0IHJlYWRpbmcnKSk7XG4gIH0gZWxzZSB7XG4gICAgcmVhZF9kYXRhKGNvbnRleHQsIG9mZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIHdyYXBwZWRfY2IpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGZzeW5jKGNvbnRleHQsIGZkLCBjYWxsYmFjaykge1xuICBpZih2YWxpZGF0ZUludGVnZXIoZmQsIGNhbGxiYWNrKSAhPT0gZmQpIHJldHVybjtcbiAgdmFyIG9mZCA9IG9wZW5GaWxlcy5nZXRPcGVuRmlsZURlc2NyaXB0aW9uKGZkKTtcbiAgaWYoIW9mZCkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUJBREYoKSk7XG4gIH0gZWxzZSB7XG4gICAgY2FsbGJhY2soKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWFkRmlsZShjb250ZXh0LCBwYXRoLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gIG9wdGlvbnMgPSB2YWxpZGF0ZV9maWxlX29wdGlvbnMob3B0aW9ucywgbnVsbCwgJ3InKTtcblxuICB2YXIgZmxhZ3MgPSB2YWxpZGF0ZV9mbGFncyhvcHRpb25zLmZsYWcgfHwgJ3InKTtcbiAgaWYoIWZsYWdzKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdmbGFncyBpcyBub3QgdmFsaWQnLCBwYXRoKSk7XG4gIH1cblxuICBvcGVuX2ZpbGUoY29udGV4dCwgcGF0aCwgZmxhZ3MsIGZ1bmN0aW9uKGVyciwgZmlsZU5vZGUpIHtcbiAgICBpZihlcnIpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgIH1cbiAgICB2YXIgb2ZkID0gbmV3IE9wZW5GaWxlRGVzY3JpcHRpb24ocGF0aCwgZmlsZU5vZGUuaWQsIGZsYWdzLCAwKTtcbiAgICB2YXIgZmQgPSBvcGVuRmlsZXMuYWxsb2NEZXNjcmlwdG9yKG9mZCk7XG5cbiAgICBmdW5jdGlvbiBjbGVhbnVwKCkge1xuICAgICAgb3BlbkZpbGVzLnJlbGVhc2VEZXNjcmlwdG9yKGZkKTtcbiAgICB9XG5cbiAgICBmc3RhdF9maWxlKGNvbnRleHQsIG9mZCwgZnVuY3Rpb24oZXJyLCBmc3RhdFJlc3VsdCkge1xuICAgICAgaWYoZXJyKSB7XG4gICAgICAgIGNsZWFudXAoKTtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGF0cyA9IG5ldyBTdGF0cyhvZmQucGF0aCwgZnN0YXRSZXN1bHQsIGNvbnRleHQubmFtZSk7XG5cbiAgICAgIGlmKHN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgY2xlYW51cCgpO1xuICAgICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9ycy5FSVNESVIoJ2lsbGVnYWwgb3BlcmF0aW9uIG9uIGRpcmVjdG9yeScsIHBhdGgpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIHNpemUgPSBzdGF0cy5zaXplO1xuICAgICAgdmFyIGJ1ZmZlciA9IEJ1ZmZlci5hbGxvYyhzaXplKTtcblxuICAgICAgcmVhZF9kYXRhKGNvbnRleHQsIG9mZCwgYnVmZmVyLCAwLCBzaXplLCAwLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgY2xlYW51cCgpO1xuXG4gICAgICAgIGlmKGVycikge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIGRhdGE7XG4gICAgICAgIGlmKG9wdGlvbnMuZW5jb2RpbmcgPT09ICd1dGY4Jykge1xuICAgICAgICAgIGRhdGEgPSBidWZmZXIudG9TdHJpbmcoJ3V0ZjgnKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkYXRhID0gYnVmZmVyO1xuICAgICAgICB9XG4gICAgICAgIGNhbGxiYWNrKG51bGwsIGRhdGEpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiB3cml0ZShjb250ZXh0LCBmZCwgYnVmZmVyLCBvZmZzZXQsIGxlbmd0aCwgcG9zaXRpb24sIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgb2Zmc2V0ID0gKHVuZGVmaW5lZCA9PT0gb2Zmc2V0KSA/IDAgOiBvZmZzZXQ7XG4gIGxlbmd0aCA9ICh1bmRlZmluZWQgPT09IGxlbmd0aCkgPyBidWZmZXIubGVuZ3RoIC0gb2Zmc2V0IDogbGVuZ3RoO1xuXG4gIHZhciBvZmQgPSBvcGVuRmlsZXMuZ2V0T3BlbkZpbGVEZXNjcmlwdGlvbihmZCk7XG4gIGlmKCFvZmQpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVCQURGKCkpO1xuICB9IGVsc2UgaWYoIW9mZC5mbGFncy5pbmNsdWRlcyhPX1dSSVRFKSkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUJBREYoJ2Rlc2NyaXB0b3IgZG9lcyBub3QgcGVybWl0IHdyaXRpbmcnKSk7XG4gIH0gZWxzZSBpZihidWZmZXIubGVuZ3RoIC0gb2Zmc2V0IDwgbGVuZ3RoKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSU8oJ2lucHV0IGJ1ZmZlciBpcyB0b28gc21hbGwnKSk7XG4gIH0gZWxzZSB7XG4gICAgd3JpdGVfZGF0YShjb250ZXh0LCBvZmQsIGJ1ZmZlciwgb2Zmc2V0LCBsZW5ndGgsIHBvc2l0aW9uLCBjYWxsYmFjayk7XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JpdGVGaWxlKGNvbnRleHQsIHBhdGgsIGRhdGEsIG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIGNhbGxiYWNrID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgb3B0aW9ucyA9IHZhbGlkYXRlX2ZpbGVfb3B0aW9ucyhvcHRpb25zLCAndXRmOCcsICd3Jyk7XG5cbiAgdmFyIGZsYWdzID0gdmFsaWRhdGVfZmxhZ3Mob3B0aW9ucy5mbGFnIHx8ICd3Jyk7XG4gIGlmKCFmbGFncykge1xuICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnZmxhZ3MgaXMgbm90IHZhbGlkJywgcGF0aCkpO1xuICB9XG5cbiAgaWYoIUJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgIGlmKHR5cGVvZiBkYXRhID09PSAnbnVtYmVyJykge1xuICAgICAgZGF0YSA9ICcnICsgZGF0YTtcbiAgICB9XG4gICAgZGF0YSA9IGRhdGEgfHwgJyc7XG4gICAgaWYodHlwZW9mIGRhdGEgIT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YS50b1N0cmluZygpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSB8fCAnJywgb3B0aW9ucy5lbmNvZGluZyB8fCAndXRmOCcpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5fZmlsZShjb250ZXh0LCBwYXRoLCBmbGFncywgZnVuY3Rpb24oZXJyLCBmaWxlTm9kZSkge1xuICAgIGlmKGVycikge1xuICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgfVxuICAgIHZhciBvZmQgPSBuZXcgT3BlbkZpbGVEZXNjcmlwdGlvbihwYXRoLCBmaWxlTm9kZS5pZCwgZmxhZ3MsIDApO1xuICAgIHZhciBmZCA9IG9wZW5GaWxlcy5hbGxvY0Rlc2NyaXB0b3Iob2ZkKTtcblxuICAgIHJlcGxhY2VfZGF0YShjb250ZXh0LCBvZmQsIGRhdGEsIDAsIGRhdGEubGVuZ3RoLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgIG9wZW5GaWxlcy5yZWxlYXNlRGVzY3JpcHRvcihmZCk7XG5cbiAgICAgIGlmKGVycikge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgIH1cbiAgICAgIGNhbGxiYWNrKG51bGwpO1xuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kRmlsZShjb250ZXh0LCBwYXRoLCBkYXRhLCBvcHRpb25zLCBjYWxsYmFjaykge1xuICBjYWxsYmFjayA9IGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV07XG4gIG9wdGlvbnMgPSB2YWxpZGF0ZV9maWxlX29wdGlvbnMob3B0aW9ucywgJ3V0ZjgnLCAnYScpO1xuXG4gIHZhciBmbGFncyA9IHZhbGlkYXRlX2ZsYWdzKG9wdGlvbnMuZmxhZyB8fCAnYScpO1xuICBpZighZmxhZ3MpIHtcbiAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9ycy5FSU5WQUwoJ2ZsYWdzIGlzIG5vdCB2YWxpZCcsIHBhdGgpKTtcbiAgfVxuXG4gIGRhdGEgPSBkYXRhIHx8ICcnO1xuICBpZih0eXBlb2YgZGF0YSA9PT0gJ251bWJlcicpIHtcbiAgICBkYXRhID0gJycgKyBkYXRhO1xuICB9XG4gIGlmKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJyAmJiBvcHRpb25zLmVuY29kaW5nID09PSAndXRmOCcpIHtcbiAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSk7XG4gIH1cblxuICBvcGVuX2ZpbGUoY29udGV4dCwgcGF0aCwgZmxhZ3MsIGZ1bmN0aW9uKGVyciwgZmlsZU5vZGUpIHtcbiAgICBpZihlcnIpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgIH1cbiAgICB2YXIgb2ZkID0gbmV3IE9wZW5GaWxlRGVzY3JpcHRpb24ocGF0aCwgZmlsZU5vZGUuaWQsIGZsYWdzLCBmaWxlTm9kZS5zaXplKTtcbiAgICB2YXIgZmQgPSBvcGVuRmlsZXMuYWxsb2NEZXNjcmlwdG9yKG9mZCk7XG5cbiAgICB3cml0ZV9kYXRhKGNvbnRleHQsIG9mZCwgZGF0YSwgMCwgZGF0YS5sZW5ndGgsIG9mZC5wb3NpdGlvbiwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICBvcGVuRmlsZXMucmVsZWFzZURlc2NyaXB0b3IoZmQpO1xuXG4gICAgICBpZihlcnIpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICB9XG4gICAgICBjYWxsYmFjayhudWxsKTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGV4aXN0cyhjb250ZXh0LCBwYXRoLCBjYWxsYmFjaykge1xuICBmdW5jdGlvbiBjYihlcnIpIHtcbiAgICBjYWxsYmFjayhlcnIgPyBmYWxzZSA6IHRydWUpO1xuICB9XG4gIHN0YXQoY29udGV4dCwgcGF0aCwgY2IpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZUludGVnZXIodmFsdWUsIGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdudW1iZXInKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSU5WQUwoJ0V4cGVjdGVkIGludGVnZXInLCB2YWx1ZSkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuLy8gQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvYzcwMGNjNDJkYTljZjczYWY5ZmVjMjA5ODUyMGE2YzBhNjMxZDkwMS9saWIvaW50ZXJuYWwvdmFsaWRhdG9ycy5qcyNMMjFcbnZhciBvY3RhbFJlZyA9IC9eWzAtN10rJC87XG5mdW5jdGlvbiBpc1VpbnQzMih2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgPT09ICh2YWx1ZSA+Pj4gMCk7XG59XG4vLyBWYWxpZGF0b3IgZm9yIG1vZGVfdCAodGhlIFNfKiBjb25zdGFudHMpLiBWYWxpZCBudW1iZXJzIG9yIG9jdGFsIHN0cmluZ3Ncbi8vIHdpbGwgYmUgbWFza2VkIHdpdGggMG83NzcgdG8gYmUgY29uc2lzdGVudCB3aXRoIHRoZSBiZWhhdmlvciBpbiBQT1NJWCBBUElzLlxuZnVuY3Rpb24gdmFsaWRhdGVBbmRNYXNrTW9kZSh2YWx1ZSwgZGVmLCBjYWxsYmFjaykge1xuICBpZih0eXBlb2YgZGVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBkZWY7XG4gICAgZGVmID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgaWYgKGlzVWludDMyKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZSAmIEZVTExfUkVBRF9XUklURV9FWEVDX1BFUk1JU1NJT05TO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIodmFsdWUpKSB7XG4gICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnbW9kZSBub3QgYSB2YWxpZCBhbiBpbnRlZ2VyIHZhbHVlJywgdmFsdWUpKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMiAqKiAzMiA9PT0gNDI5NDk2NzI5NlxuICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSU5WQUwoJ21vZGUgbm90IGEgdmFsaWQgYW4gaW50ZWdlciB2YWx1ZScsIHZhbHVlKSk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAoIW9jdGFsUmVnLnRlc3QodmFsdWUpKSB7XG4gICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnbW9kZSBub3QgYSB2YWxpZCBvY3RhbCBzdHJpbmcnLCB2YWx1ZSkpO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICB2YXIgcGFyc2VkID0gcGFyc2VJbnQodmFsdWUsIDgpO1xuICAgIHJldHVybiBwYXJzZWQgJiBGVUxMX1JFQURfV1JJVEVfRVhFQ19QRVJNSVNTSU9OUztcbiAgfVxuXG4gIC8vIFRPRE8oQnJpZGdlQVIpOiBPbmx5IHJldHVybiBgZGVmYCBpbiBjYXNlIGB2YWx1ZSA9PT0gbnVsbGBcbiAgaWYgKGRlZiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGRlZjtcbiAgfVxuXG4gIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdtb2RlIG5vdCB2YWxpZCcsIHZhbHVlKSk7XG4gIHJldHVybiBmYWxzZTtcbn1cblxuZnVuY3Rpb24gY2htb2RfZmlsZShjb250ZXh0LCBwYXRoLCBtb2RlLCBjYWxsYmFjaykge1xuICBwYXRoID0gbm9ybWFsaXplKHBhdGgpO1xuXG4gIGZ1bmN0aW9uIHVwZGF0ZV9tb2RlKGVycm9yLCBub2RlKSB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUubW9kZSA9IG1vZGU7XG4gICAgICB1cGRhdGVfbm9kZV90aW1lcyhjb250ZXh0LCBwYXRoLCBub2RlLCB7IG10aW1lOiBEYXRlLm5vdygpIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIG1vZGUgIT09ICdudW1iZXInKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSU5WQUwoJ21vZGUgbXVzdCBiZSBudW1iZXInLCBwYXRoKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgZmluZF9ub2RlKGNvbnRleHQsIHBhdGgsIHVwZGF0ZV9tb2RlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmY2htb2RfZmlsZShjb250ZXh0LCBvZmQsIG1vZGUsIGNhbGxiYWNrKSB7XG4gIGZ1bmN0aW9uIHVwZGF0ZV9tb2RlKGVycm9yLCBub2RlKSB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUubW9kZSA9IG1vZGU7XG4gICAgICB1cGRhdGVfbm9kZV90aW1lcyhjb250ZXh0LCBvZmQucGF0aCwgbm9kZSwgeyBtdGltZTogRGF0ZS5ub3coKSB9LCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgaWYgKHR5cGVvZiBtb2RlICE9PSAnbnVtYmVyJykge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdtb2RlIG11c3QgYmUgYSBudW1iZXInKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgb2ZkLmdldE5vZGUoY29udGV4dCwgdXBkYXRlX21vZGUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNob3duX2ZpbGUoY29udGV4dCwgcGF0aCwgdWlkLCBnaWQsIGNhbGxiYWNrKSB7XG4gIHBhdGggPSBub3JtYWxpemUocGF0aCk7XG5cbiAgZnVuY3Rpb24gdXBkYXRlX293bmVyKGVycm9yLCBub2RlKSB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUudWlkID0gdWlkO1xuICAgICAgbm9kZS5naWQgPSBnaWQ7XG4gICAgICB1cGRhdGVfbm9kZV90aW1lcyhjb250ZXh0LCBwYXRoLCBub2RlLCB7IG10aW1lOiBEYXRlLm5vdygpIH0sIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cblxuICBmaW5kX25vZGUoY29udGV4dCwgcGF0aCwgdXBkYXRlX293bmVyKTtcbn1cblxuZnVuY3Rpb24gZmNob3duX2ZpbGUoY29udGV4dCwgb2ZkLCB1aWQsIGdpZCwgY2FsbGJhY2spIHtcbiAgZnVuY3Rpb24gdXBkYXRlX293bmVyKGVycm9yLCBub2RlKSB7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUudWlkID0gdWlkO1xuICAgICAgbm9kZS5naWQgPSBnaWQ7XG4gICAgICB1cGRhdGVfbm9kZV90aW1lcyhjb250ZXh0LCBvZmQucGF0aCwgbm9kZSwgeyBtdGltZTogRGF0ZS5ub3coKSB9LCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgb2ZkLmdldE5vZGUoY29udGV4dCwgdXBkYXRlX293bmVyKTtcbn1cblxuZnVuY3Rpb24gZ2V0eGF0dHIoY29udGV4dCwgcGF0aCwgbmFtZSwgY2FsbGJhY2spIHtcbiAgZ2V0eGF0dHJfZmlsZShjb250ZXh0LCBwYXRoLCBuYW1lLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIGZnZXR4YXR0cihjb250ZXh0LCBmZCwgbmFtZSwgY2FsbGJhY2spIHtcbiAgdmFyIG9mZCA9IG9wZW5GaWxlcy5nZXRPcGVuRmlsZURlc2NyaXB0aW9uKGZkKTtcbiAgaWYgKCFvZmQpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVCQURGKCkpO1xuICB9XG4gIGVsc2Uge1xuICAgIGZnZXR4YXR0cl9maWxlKGNvbnRleHQsIG9mZCwgbmFtZSwgY2FsbGJhY2spO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNldHhhdHRyKGNvbnRleHQsIHBhdGgsIG5hbWUsIHZhbHVlLCBmbGFnLCBjYWxsYmFjaykge1xuICBpZih0eXBlb2YgZmxhZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gZmxhZztcbiAgICBmbGFnID0gbnVsbDtcbiAgfVxuXG4gIHNldHhhdHRyX2ZpbGUoY29udGV4dCwgcGF0aCwgbmFtZSwgdmFsdWUsIGZsYWcsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gZnNldHhhdHRyKGNvbnRleHQsIGZkLCBuYW1lLCB2YWx1ZSwgZmxhZywgY2FsbGJhY2spIHtcbiAgaWYodHlwZW9mIGZsYWcgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IGZsYWc7XG4gICAgZmxhZyA9IG51bGw7XG4gIH1cblxuICB2YXIgb2ZkID0gb3BlbkZpbGVzLmdldE9wZW5GaWxlRGVzY3JpcHRpb24oZmQpO1xuICBpZiAoIW9mZCkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUJBREYoKSk7XG4gIH1cbiAgZWxzZSBpZiAoIW9mZC5mbGFncy5pbmNsdWRlcyhPX1dSSVRFKSkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUJBREYoJ2Rlc2NyaXB0b3IgZG9lcyBub3QgcGVybWl0IHdyaXRpbmcnKSk7XG4gIH1cbiAgZWxzZSB7XG4gICAgZnNldHhhdHRyX2ZpbGUoY29udGV4dCwgb2ZkLCBuYW1lLCB2YWx1ZSwgZmxhZywgY2FsbGJhY2spO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlbW92ZXhhdHRyKGNvbnRleHQsIHBhdGgsIG5hbWUsIGNhbGxiYWNrKSB7XG4gIHJlbW92ZXhhdHRyX2ZpbGUoY29udGV4dCwgcGF0aCwgbmFtZSwgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiBmcmVtb3ZleGF0dHIoY29udGV4dCwgZmQsIG5hbWUsIGNhbGxiYWNrKSB7XG4gIHZhciBvZmQgPSBvcGVuRmlsZXMuZ2V0T3BlbkZpbGVEZXNjcmlwdGlvbihmZCk7XG4gIGlmICghb2ZkKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FQkFERigpKTtcbiAgfVxuICBlbHNlIGlmICghb2ZkLmZsYWdzLmluY2x1ZGVzKE9fV1JJVEUpKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FQkFERignZGVzY3JpcHRvciBkb2VzIG5vdCBwZXJtaXQgd3JpdGluZycpKTtcbiAgfVxuICBlbHNlIHtcbiAgICBmcmVtb3ZleGF0dHJfZmlsZShjb250ZXh0LCBvZmQsIG5hbWUsIGNhbGxiYWNrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBsc2Vlayhjb250ZXh0LCBmZCwgb2Zmc2V0LCB3aGVuY2UsIGNhbGxiYWNrKSB7XG4gIGZ1bmN0aW9uIHVwZGF0ZV9kZXNjcmlwdG9yX3Bvc2l0aW9uKGVycm9yLCBzdGF0cykge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKHN0YXRzLnNpemUgKyBvZmZzZXQgPCAwKSB7XG4gICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdyZXN1bHRpbmcgZmlsZSBvZmZzZXQgd291bGQgYmUgbmVnYXRpdmUnKSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvZmQucG9zaXRpb24gPSBzdGF0cy5zaXplICsgb2Zmc2V0O1xuICAgICAgICBjYWxsYmFjayhudWxsLCBvZmQucG9zaXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZhciBvZmQgPSBvcGVuRmlsZXMuZ2V0T3BlbkZpbGVEZXNjcmlwdGlvbihmZCk7XG4gIGlmKCFvZmQpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVCQURGKCkpO1xuICB9XG5cbiAgaWYoJ1NFVCcgPT09IHdoZW5jZSkge1xuICAgIGlmKG9mZnNldCA8IDApIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdyZXN1bHRpbmcgZmlsZSBvZmZzZXQgd291bGQgYmUgbmVnYXRpdmUnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZC5wb3NpdGlvbiA9IG9mZnNldDtcbiAgICAgIGNhbGxiYWNrKG51bGwsIG9mZC5wb3NpdGlvbik7XG4gICAgfVxuICB9IGVsc2UgaWYoJ0NVUicgPT09IHdoZW5jZSkge1xuICAgIGlmKG9mZC5wb3NpdGlvbiArIG9mZnNldCA8IDApIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdyZXN1bHRpbmcgZmlsZSBvZmZzZXQgd291bGQgYmUgbmVnYXRpdmUnKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9mZC5wb3NpdGlvbiArPSBvZmZzZXQ7XG4gICAgICBjYWxsYmFjayhudWxsLCBvZmQucG9zaXRpb24pO1xuICAgIH1cbiAgfSBlbHNlIGlmKCdFTkQnID09PSB3aGVuY2UpIHtcbiAgICBmc3RhdF9maWxlKGNvbnRleHQsIG9mZCwgdXBkYXRlX2Rlc2NyaXB0b3JfcG9zaXRpb24pO1xuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCd3aGVuY2UgYXJndW1lbnQgaXMgbm90IGEgcHJvcGVyIHZhbHVlJykpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRkaXIoY29udGV4dCwgcGF0aCwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgcmVhZF9kaXJlY3RvcnkoY29udGV4dCwgcGF0aCwgb3B0aW9ucywgY2FsbGJhY2spO1xufVxuXG5mdW5jdGlvbiB0b1VuaXhUaW1lc3RhbXAodGltZSkge1xuICBpZiAodHlwZW9mIHRpbWUgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIHRpbWU7XG4gIH1cbiAgaWYgKHR5cGVvZiB0aW1lID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdGltZS5nZXRUaW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRpbWUuZ2V0VGltZSgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHV0aW1lcyhjb250ZXh0LCBwYXRoLCBhdGltZSwgbXRpbWUsIGNhbGxiYWNrKSB7XG4gIHZhciBjdXJyZW50VGltZSA9IERhdGUubm93KCk7XG4gIGF0aW1lID0gKGF0aW1lKSA/IHRvVW5peFRpbWVzdGFtcChhdGltZSkgOiB0b1VuaXhUaW1lc3RhbXAoY3VycmVudFRpbWUpO1xuICBtdGltZSA9IChtdGltZSkgPyB0b1VuaXhUaW1lc3RhbXAobXRpbWUpIDogdG9Vbml4VGltZXN0YW1wKGN1cnJlbnRUaW1lKTtcblxuICB1dGltZXNfZmlsZShjb250ZXh0LCBwYXRoLCBhdGltZSwgbXRpbWUsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gZnV0aW1lcyhjb250ZXh0LCBmZCwgYXRpbWUsIG10aW1lLCBjYWxsYmFjaykge1xuICB2YXIgY3VycmVudFRpbWUgPSBEYXRlLm5vdygpO1xuICBhdGltZSA9IChhdGltZSkgPyB0b1VuaXhUaW1lc3RhbXAoYXRpbWUpIDogdG9Vbml4VGltZXN0YW1wKGN1cnJlbnRUaW1lKTtcbiAgbXRpbWUgPSAobXRpbWUpID8gdG9Vbml4VGltZXN0YW1wKG10aW1lKSA6IHRvVW5peFRpbWVzdGFtcChjdXJyZW50VGltZSk7XG5cbiAgdmFyIG9mZCA9IG9wZW5GaWxlcy5nZXRPcGVuRmlsZURlc2NyaXB0aW9uKGZkKTtcbiAgaWYoIW9mZCkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUJBREYoKSk7XG4gIH0gZWxzZSBpZighb2ZkLmZsYWdzLmluY2x1ZGVzKE9fV1JJVEUpKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FQkFERignZGVzY3JpcHRvciBkb2VzIG5vdCBwZXJtaXQgd3JpdGluZycpKTtcbiAgfSBlbHNlIHtcbiAgICBmdXRpbWVzX2ZpbGUoY29udGV4dCwgb2ZkLCBhdGltZSwgbXRpbWUsIGNhbGxiYWNrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjaG1vZChjb250ZXh0LCBwYXRoLCBtb2RlLCBjYWxsYmFjaykge1xuICBtb2RlID0gdmFsaWRhdGVBbmRNYXNrTW9kZShtb2RlLCBjYWxsYmFjayk7XG4gIGlmKCFtb2RlKSByZXR1cm47XG5cbiAgY2htb2RfZmlsZShjb250ZXh0LCBwYXRoLCBtb2RlLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIGZjaG1vZChjb250ZXh0LCBmZCwgbW9kZSwgY2FsbGJhY2spIHtcbiAgbW9kZSA9IHZhbGlkYXRlQW5kTWFza01vZGUobW9kZSwgY2FsbGJhY2spO1xuICBpZighbW9kZSkgcmV0dXJuO1xuXG4gIHZhciBvZmQgPSBvcGVuRmlsZXMuZ2V0T3BlbkZpbGVEZXNjcmlwdGlvbihmZCk7XG4gIGlmKCFvZmQpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVCQURGKCkpO1xuICB9IGVsc2UgaWYoIW9mZC5mbGFncy5pbmNsdWRlcyhPX1dSSVRFKSkge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUJBREYoJ2Rlc2NyaXB0b3IgZG9lcyBub3QgcGVybWl0IHdyaXRpbmcnKSk7XG4gIH0gZWxzZSB7XG4gICAgZmNobW9kX2ZpbGUoY29udGV4dCwgb2ZkLCBtb2RlLCBjYWxsYmFjayk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hvd24oY29udGV4dCwgcGF0aCwgdWlkLCBnaWQsIGNhbGxiYWNrKSB7XG4gIGlmKCFpc1VpbnQzMih1aWQpKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCd1aWQgbXVzdCBiZSBhIHZhbGlkIGludGVnZXInLCB1aWQpKTtcbiAgfVxuICBpZighaXNVaW50MzIoZ2lkKSkge1xuICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnZ2lkIG11c3QgYmUgYSB2YWxpZCBpbnRlZ2VyJywgZ2lkKSk7XG4gIH1cblxuICBjaG93bl9maWxlKGNvbnRleHQsIHBhdGgsIHVpZCwgZ2lkLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIGZjaG93bihjb250ZXh0LCBmZCwgdWlkLCBnaWQsIGNhbGxiYWNrKSB7XG4gIGlmKCFpc1VpbnQzMih1aWQpKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCd1aWQgbXVzdCBiZSBhIHZhbGlkIGludGVnZXInLCB1aWQpKTtcbiAgfVxuICBpZighaXNVaW50MzIoZ2lkKSkge1xuICAgIHJldHVybiBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnZ2lkIG11c3QgYmUgYSB2YWxpZCBpbnRlZ2VyJywgZ2lkKSk7XG4gIH1cblxuICB2YXIgb2ZkID0gb3BlbkZpbGVzLmdldE9wZW5GaWxlRGVzY3JpcHRpb24oZmQpO1xuICBpZighb2ZkKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FQkFERigpKTtcbiAgfSBlbHNlIGlmKCFvZmQuZmxhZ3MuaW5jbHVkZXMoT19XUklURSkpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVCQURGKCdkZXNjcmlwdG9yIGRvZXMgbm90IHBlcm1pdCB3cml0aW5nJykpO1xuICB9IGVsc2Uge1xuICAgIGZjaG93bl9maWxlKGNvbnRleHQsIG9mZCwgdWlkLCBnaWQsIGNhbGxiYWNrKTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZW5hbWUoY29udGV4dCwgb2xkcGF0aCwgbmV3cGF0aCwgY2FsbGJhY2spIHtcbiAgb2xkcGF0aCA9IG5vcm1hbGl6ZShvbGRwYXRoKTtcbiAgbmV3cGF0aCA9IG5vcm1hbGl6ZShuZXdwYXRoKTtcblxuICB2YXIgb2xkUGFyZW50UGF0aCA9IFBhdGguZGlybmFtZShvbGRwYXRoKTtcbiAgdmFyIG5ld1BhcmVudFBhdGggPSBQYXRoLmRpcm5hbWUobmV3cGF0aCk7XG4gIHZhciBvbGROYW1lID0gUGF0aC5iYXNlbmFtZShvbGRwYXRoKTtcbiAgdmFyIG5ld05hbWUgPSBQYXRoLmJhc2VuYW1lKG5ld3BhdGgpO1xuICB2YXIgb2xkUGFyZW50RGlyZWN0b3J5LCBvbGRQYXJlbnREYXRhO1xuICB2YXIgbmV3UGFyZW50RGlyZWN0b3J5LCBuZXdQYXJlbnREYXRhO1xuICB2YXIgY3RpbWUgPSBEYXRlLm5vdygpO1xuICB2YXIgZmlsZU5vZGU7XG5cbiAgZnVuY3Rpb24gdXBkYXRlX3RpbWVzKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmaWxlTm9kZSA9IHJlc3VsdDtcbiAgICAgIHVwZGF0ZV9ub2RlX3RpbWVzKGNvbnRleHQsIG5ld3BhdGgsIGZpbGVOb2RlLCB7IGN0aW1lOiBjdGltZSB9LCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZF9uZXdfZGlyZWN0b3J5KGVycm9yKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dC5nZXRPYmplY3QobmV3UGFyZW50RGF0YVtuZXdOYW1lXS5pZCwgdXBkYXRlX3RpbWVzKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVfb2xkX3BhcmVudF9kaXJlY3RvcnlfZGF0YShlcnJvcikge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmKG9sZFBhcmVudERpcmVjdG9yeS5pZCA9PT0gbmV3UGFyZW50RGlyZWN0b3J5LmlkKSB7XG4gICAgICAgIG9sZFBhcmVudERhdGEgPSBuZXdQYXJlbnREYXRhO1xuICAgICAgfVxuICAgICAgZGVsZXRlIG9sZFBhcmVudERhdGFbb2xkTmFtZV07XG4gICAgICBjb250ZXh0LnB1dE9iamVjdChvbGRQYXJlbnREaXJlY3RvcnkuZGF0YSwgb2xkUGFyZW50RGF0YSwgcmVhZF9uZXdfZGlyZWN0b3J5KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1cGRhdGVfbmV3X3BhcmVudF9kaXJlY3RvcnlfZGF0YShlcnJvcikge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld1BhcmVudERhdGFbbmV3TmFtZV0gPSBvbGRQYXJlbnREYXRhW29sZE5hbWVdO1xuICAgICAgY29udGV4dC5wdXRPYmplY3QobmV3UGFyZW50RGlyZWN0b3J5LmRhdGEsIG5ld1BhcmVudERhdGEsIHVwZGF0ZV9vbGRfcGFyZW50X2RpcmVjdG9yeV9kYXRhKTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja19pZl9uZXdfZGlyZWN0b3J5X2V4aXN0cyhlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbmV3UGFyZW50RGF0YSA9IHJlc3VsdDtcbiAgICAgIGlmKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuZXdQYXJlbnREYXRhLCBuZXdOYW1lKSkge1xuICAgICAgICByZW1vdmVfZGlyZWN0b3J5KGNvbnRleHQsIG5ld3BhdGgsIHVwZGF0ZV9uZXdfcGFyZW50X2RpcmVjdG9yeV9kYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVwZGF0ZV9uZXdfcGFyZW50X2RpcmVjdG9yeV9kYXRhKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZF9uZXdfcGFyZW50X2RpcmVjdG9yeV9kYXRhKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBuZXdQYXJlbnREaXJlY3RvcnkgPSByZXN1bHQ7XG4gICAgICBjb250ZXh0LmdldE9iamVjdChuZXdQYXJlbnREaXJlY3RvcnkuZGF0YSwgY2hlY2tfaWZfbmV3X2RpcmVjdG9yeV9leGlzdHMpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGdldF9uZXdfcGFyZW50X2RpcmVjdG9yeShlcnJvciwgcmVzdWx0KSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2Uge1xuICAgICAgb2xkUGFyZW50RGF0YSA9IHJlc3VsdDtcbiAgICAgIGZpbmRfbm9kZShjb250ZXh0LCBuZXdQYXJlbnRQYXRoLCByZWFkX25ld19wYXJlbnRfZGlyZWN0b3J5X2RhdGEpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWRfcGFyZW50X2RpcmVjdG9yeV9kYXRhKGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICBvbGRQYXJlbnREaXJlY3RvcnkgPSByZXN1bHQ7XG4gICAgICBjb250ZXh0LmdldE9iamVjdChyZXN1bHQuZGF0YSwgZ2V0X25ld19wYXJlbnRfZGlyZWN0b3J5KTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiB1bmxpbmtfb2xkX2ZpbGUoZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB1bmxpbmtfbm9kZShjb250ZXh0LCBvbGRwYXRoLCBjYWxsYmFjayk7XG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tfbm9kZV90eXBlKGVycm9yLCBub2RlKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICB9IGVsc2UgaWYobm9kZS50eXBlID09PSBOT0RFX1RZUEVfRElSRUNUT1JZKSB7XG4gICAgICBmaW5kX25vZGUoY29udGV4dCwgb2xkUGFyZW50UGF0aCwgcmVhZF9wYXJlbnRfZGlyZWN0b3J5X2RhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBsaW5rX25vZGUoY29udGV4dCwgb2xkcGF0aCwgbmV3cGF0aCwgdW5saW5rX29sZF9maWxlKTtcbiAgICB9XG4gIH1cblxuICBmaW5kX25vZGUoY29udGV4dCwgb2xkcGF0aCwgY2hlY2tfbm9kZV90eXBlKTtcbn1cblxuZnVuY3Rpb24gc3ltbGluayhjb250ZXh0LCBzcmNwYXRoLCBkc3RwYXRoLCB0eXBlLCBjYWxsYmFjaykge1xuICAvLyBOT1RFOiB3ZSBzdXBwb3J0IHBhc3NpbmcgdGhlIGB0eXBlYCBhcmcsIGJ1dCBpZ25vcmUgaXQuXG4gIGNhbGxiYWNrID0gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgbWFrZV9zeW1ib2xpY19saW5rKGNvbnRleHQsIHNyY3BhdGgsIGRzdHBhdGgsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gcmVhZGxpbmsoY29udGV4dCwgcGF0aCwgY2FsbGJhY2spIHtcbiAgcmVhZF9saW5rKGNvbnRleHQsIHBhdGgsIGNhbGxiYWNrKTtcbn1cblxuZnVuY3Rpb24gbHN0YXQoY29udGV4dCwgcGF0aCwgY2FsbGJhY2spIHtcbiAgZnVuY3Rpb24gY2hlY2tfcmVzdWx0KGVycm9yLCByZXN1bHQpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgc3RhdHMgPSBuZXcgU3RhdHMocGF0aCwgcmVzdWx0LCBjb250ZXh0Lm5hbWUpO1xuICAgICAgY2FsbGJhY2sobnVsbCwgc3RhdHMpO1xuICAgIH1cbiAgfVxuXG4gIGxzdGF0X2ZpbGUoY29udGV4dCwgcGF0aCwgY2hlY2tfcmVzdWx0KTtcbn1cblxuZnVuY3Rpb24gdHJ1bmNhdGUoY29udGV4dCwgcGF0aCwgbGVuZ3RoLCBjYWxsYmFjaykge1xuICAvLyBOT1RFOiBsZW5ndGggaXMgb3B0aW9uYWxcbiAgY2FsbGJhY2sgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdO1xuICBsZW5ndGggPSBsZW5ndGggfHwgMDtcblxuICBpZih2YWxpZGF0ZUludGVnZXIobGVuZ3RoLCBjYWxsYmFjaykgIT09IGxlbmd0aCkgcmV0dXJuO1xuXG4gIHRydW5jYXRlX2ZpbGUoY29udGV4dCwgcGF0aCwgbGVuZ3RoLCBjYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIGZ0cnVuY2F0ZShjb250ZXh0LCBmZCwgbGVuZ3RoLCBjYWxsYmFjaykge1xuICAvLyBOT1RFOiBsZW5ndGggaXMgb3B0aW9uYWxcbiAgY2FsbGJhY2sgPSBhcmd1bWVudHNbYXJndW1lbnRzLmxlbmd0aCAtIDFdO1xuICBsZW5ndGggPSBsZW5ndGggfHwgMDtcblxuICB2YXIgb2ZkID0gb3BlbkZpbGVzLmdldE9wZW5GaWxlRGVzY3JpcHRpb24oZmQpO1xuICBpZighb2ZkKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FQkFERigpKTtcbiAgfSBlbHNlIGlmKCFvZmQuZmxhZ3MuaW5jbHVkZXMoT19XUklURSkpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVCQURGKCdkZXNjcmlwdG9yIGRvZXMgbm90IHBlcm1pdCB3cml0aW5nJykpO1xuICB9IGVsc2Uge1xuICAgIGlmKHZhbGlkYXRlSW50ZWdlcihsZW5ndGgsIGNhbGxiYWNrKSAhPT0gbGVuZ3RoKSByZXR1cm47XG4gICAgZnRydW5jYXRlX2ZpbGUoY29udGV4dCwgb2ZkLCBsZW5ndGgsIGNhbGxiYWNrKTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYXBwZW5kRmlsZSxcbiAgYWNjZXNzLFxuICBjaG93bixcbiAgY2htb2QsXG4gIGNsb3NlLFxuICAvLyBjb3B5RmlsZSAtIGh0dHBzOi8vZ2l0aHViLmNvbS9maWxlcmpzL2ZpbGVyL2lzc3Vlcy80MzZcbiAgZW5zdXJlUm9vdERpcmVjdG9yeTogZW5zdXJlX3Jvb3RfZGlyZWN0b3J5LFxuICBleGlzdHMsXG4gIGZjaG93bixcbiAgZmNobW9kLFxuICAvLyBmZGF0YXN5bmMgLSBodHRwczovL2dpdGh1Yi5jb20vZmlsZXJqcy9maWxlci9pc3N1ZXMvNjUzXG4gIGZnZXR4YXR0cixcbiAgZnJlbW92ZXhhdHRyLFxuICBmc2V0eGF0dHIsXG4gIGZzdGF0LFxuICBmc3luYyxcbiAgZnRydW5jYXRlLFxuICBmdXRpbWVzLFxuICBnZXR4YXR0cixcbiAgLy8gbGNob3duIC0gaHR0cHM6Ly9naXRodWIuY29tL2ZpbGVyanMvZmlsZXIvaXNzdWVzLzYyMFxuICAvLyBsY2htb2QgLSBodHRwczovL2dpdGh1Yi5jb20vZmlsZXJqcy9maWxlci9pc3N1ZXMvNjE5XG4gIGxpbmssXG4gIGxzZWVrLFxuICBsc3RhdCxcbiAgbWtkaXIsXG4gIG1rZHRlbXAsXG4gIG1rbm9kLFxuICBvcGVuLFxuICByZWFkZGlyLFxuICByZWFkLFxuICByZWFkRmlsZSxcbiAgcmVhZGxpbmssXG4gIC8vIHJlYWxwYXRoIC0gaHR0cHM6Ly9naXRodWIuY29tL2ZpbGVyanMvZmlsZXIvaXNzdWVzLzg1XG4gIHJlbW92ZXhhdHRyLFxuICByZW5hbWUsXG4gIHJtZGlyLFxuICBzZXR4YXR0cixcbiAgc3RhdCxcbiAgc3ltbGluayxcbiAgdHJ1bmNhdGUsXG4gIC8vIHVud2F0Y2hGaWxlIC0gaW1wbGVtZW50ZWQgaW4gaW50ZXJmYWNlLmpzXG4gIHVubGluayxcbiAgdXRpbWVzLFxuICAvLyB3YXRjaCAtIGltcGxlbWVudGVkIGluIGludGVyZmFjZS5qc1xuICAvLyB3YXRjaEZpbGUgLSBpbXBsZW1lbnRlZCBpbiBpbnRlcmZhY2UuanNcbiAgd3JpdGVGaWxlLFxuICB3cml0ZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgeyBwcm9taXNpZnkgfSA9IHJlcXVpcmUoJ2VzNi1wcm9taXNpZnknKTtcblxuY29uc3QgUGF0aCA9IHJlcXVpcmUoJy4uL3BhdGguanMnKTtcblxuY29uc3QgcHJvdmlkZXJzID0gcmVxdWlyZSgnLi4vcHJvdmlkZXJzL2luZGV4LmpzJyk7XG5cbmNvbnN0IFNoZWxsID0gcmVxdWlyZSgnLi4vc2hlbGwvc2hlbGwuanMnKTtcbmNvbnN0IEludGVyY29tID0gcmVxdWlyZSgnLi4vLi4vbGliL2ludGVyY29tLmpzJyk7XG5jb25zdCBGU1dhdGNoZXIgPSByZXF1aXJlKCcuLi9mcy13YXRjaGVyLmpzJyk7XG5jb25zdCBFcnJvcnMgPSByZXF1aXJlKCcuLi9lcnJvcnMuanMnKTtcbmNvbnN0IHtcbiAgbm9wLFxuICBndWlkOiBkZWZhdWx0R3VpZEZuXG59ID0gcmVxdWlyZSgnLi4vc2hhcmVkLmpzJyk7XG5cbmNvbnN0IHtcbiAgZnNDb25zdGFudHMsXG4gIEZJTEVfU1lTVEVNX05BTUUsXG4gIEZTX0ZPUk1BVCxcbiAgRlNfUkVBRFksXG4gIEZTX1BFTkRJTkcsXG4gIEZTX0VSUk9SLFxuICBGU19OT0RVUEVJRENIRUNLLFxuICBTVERJTixcbiAgU1RET1VULFxuICBTVERFUlJcbn0gPSByZXF1aXJlKCcuLi9jb25zdGFudHMuanMnKTtcblxuLy8gVGhlIGNvcmUgZnMgb3BlcmF0aW9ucyBsaXZlIG9uIGltcGxcbmNvbnN0IGltcGwgPSByZXF1aXJlKCcuL2ltcGxlbWVudGF0aW9uLmpzJyk7XG5cbi8vIG5vZGUuanMgc3VwcG9ydHMgYSBjYWxsaW5nIHBhdHRlcm4gdGhhdCBsZWF2ZXMgb2ZmIGEgY2FsbGJhY2suXG5mdW5jdGlvbiBtYXliZUNhbGxiYWNrKGNhbGxiYWNrKSB7XG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gY2FsbGJhY2s7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9O1xufVxuXG4vLyBEZWZhdWx0IGNhbGxiYWNrIHRoYXQgbG9ncyBhbiBlcnJvciBpZiBwYXNzZWQgaW5cbmZ1bmN0aW9uIGRlZmF1bHRDYWxsYmFjayhlcnIpIHtcbiAgaWYgKGVycikge1xuICAgIC8qIGVzbGludCBuby1jb25zb2xlOiAwICovXG4gICAgY29uc29sZS5lcnJvcignRmlsZXIgZXJyb3I6ICcsIGVycik7XG4gIH1cbn1cbi8vIEdldCBhIHBhdGggKFN0cmluZykgZnJvbSBhIGZpbGU6Ly8gVVJMLiBTdXBwb3J0IFVSTCgpIGxpa2Ugb2JqZWN0c1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvOTY4ZTkwMWFmZjM4YTM0M2IxZGU0YWRkZWJmNzlmZDhmYTk5MWM1OS9saWIvaW50ZXJuYWwvdXJsLmpzI0wxMzgxXG5mdW5jdGlvbiB0b1BhdGhJZkZpbGVVUkwoZmlsZVVSTE9yUGF0aCkge1xuICBpZiAoIShmaWxlVVJMT3JQYXRoICYmXG4gICAgZmlsZVVSTE9yUGF0aC5wcm90b2NvbCAmJlxuICAgIGZpbGVVUkxPclBhdGgucGF0aG5hbWUpKSB7XG4gICAgcmV0dXJuIGZpbGVVUkxPclBhdGg7XG4gIH1cblxuICBpZiAoZmlsZVVSTE9yUGF0aC5wcm90b2NvbCAhPT0gJ2ZpbGU6Jykge1xuICAgIHRocm93IG5ldyBFcnJvcnMuRUlOVkFMKCdvbmx5IGZpbGU6IFVSTHMgYXJlIHN1cHBvcnRlZCBmb3IgcGF0aHMnLCBmaWxlVVJMT3JQYXRoKTtcbiAgfVxuXG4gIGNvbnN0IHBhdGhuYW1lID0gZmlsZVVSTE9yUGF0aC5wYXRobmFtZTtcbiAgZm9yIChsZXQgbiA9IDA7IG4gPCBwYXRobmFtZS5sZW5ndGg7IG4rKykge1xuICAgIGlmIChwYXRobmFtZVtuXSA9PT0gJyUnKSB7XG4gICAgICBjb25zdCB0aGlyZCA9IHBhdGhuYW1lLmNvZGVQb2ludEF0KG4gKyAyKSB8IDB4MjA7XG4gICAgICBpZiAocGF0aG5hbWVbbiArIDFdID09PSAnMicgJiYgdGhpcmQgPT09IDEwMikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3JzLkVJTlZBTCgnZmlsZTogVVJMcyBtdXN0IG5vdCBpbmNsdWRlIGVuY29kZWQgLyBjaGFyYWN0ZXJzJywgZmlsZVVSTE9yUGF0aCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudChwYXRobmFtZSk7XG59XG5cbi8vIEFsbG93IEJ1ZmZlcnMgZm9yIHBhdGhzLiBBc3N1bWVzIHdlIHdhbnQgVVRGOC5cbmZ1bmN0aW9uIHRvUGF0aElmQnVmZmVyKGJ1ZmZlck9yUGF0aCkge1xuICByZXR1cm4gQnVmZmVyLmlzQnVmZmVyKGJ1ZmZlck9yUGF0aCkgPyBidWZmZXJPclBhdGgudG9TdHJpbmcoKSA6IGJ1ZmZlck9yUGF0aDtcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVQYXRoKHBhdGgsIGFsbG93UmVsYXRpdmUpIHtcbiAgaWYgKCFwYXRoKSB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcnMuRUlOVkFMKCdQYXRoIG11c3QgYmUgYSBzdHJpbmcnLCBwYXRoKTtcbiAgfSBlbHNlIGlmIChQYXRoLmlzTnVsbChwYXRoKSkge1xuICAgIHJldHVybiBuZXcgRXJyb3JzLkVJTlZBTCgnUGF0aCBtdXN0IGJlIGEgc3RyaW5nIHdpdGhvdXQgbnVsbCBieXRlcy4nLCBwYXRoKTtcbiAgfSBlbHNlIGlmICghYWxsb3dSZWxhdGl2ZSAmJiAhUGF0aC5pc0Fic29sdXRlKHBhdGgpKSB7XG4gICAgcmV0dXJuIG5ldyBFcnJvcnMuRUlOVkFMKCdQYXRoIG11c3QgYmUgYWJzb2x1dGUuJywgcGF0aCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJvY2Vzc1BhdGhBcmcoYXJncywgaWR4LCBhbGxvd1JlbGF0aXZlKSB7XG4gIGxldCBwYXRoID0gYXJnc1tpZHhdO1xuICBwYXRoID0gdG9QYXRoSWZGaWxlVVJMKHBhdGgpO1xuICBwYXRoID0gdG9QYXRoSWZCdWZmZXIocGF0aCk7XG5cbiAgLy8gU29tZSBtZXRob2RzIHNwZWNpZmljYWxseSBhbGxvdyBmb3IgcmVsIHBhdGhzIChlZyBzeW1saW5rIHdpdGggc3JjUGF0aClcbiAgbGV0IGVyciA9IHZhbGlkYXRlUGF0aChwYXRoLCBhbGxvd1JlbGF0aXZlKTtcbiAgaWYgKGVycikge1xuICAgIHRocm93IGVycjtcbiAgfVxuXG4gIC8vIE92ZXJ3cml0ZSBwYXRoIGFyZyB3aXRoIGNvbnZlcnRlZCBhbmQgdmFsaWRhdGVkIHBhdGhcbiAgYXJnc1tpZHhdID0gcGF0aDtcbn1cblxuLyoqXG4gKiBGaWxlU3lzdGVtXG4gKlxuICogQSBGaWxlU3lzdGVtIHRha2VzIGFuIGBvcHRpb25zYCBvYmplY3QsIHdoaWNoIGNhbiBzcGVjaWZ5IGEgbnVtYmVyIG9mLFxuICogb3B0aW9ucy4gIEFsbCBvcHRpb25zIGFyZSBvcHRpb25hbCwgYW5kIGluY2x1ZGU6XG4gKlxuICogbmFtZTogdGhlIG5hbWUgb2YgdGhlIGZpbGUgc3lzdGVtLCBkZWZhdWx0cyB0byBcImxvY2FsXCJcbiAqXG4gKiBmbGFnczogb25lIG9yIG1vcmUgZmxhZ3MgdG8gdXNlIHdoZW4gY3JlYXRpbmcvb3BlbmluZyB0aGUgZmlsZSBzeXN0ZW0uXG4gKiAgICAgICAgRm9yIGV4YW1wbGU6IFwiRk9STUFUXCIgd2lsbCBjYXVzZSB0aGUgZmlsZSBzeXN0ZW0gdG8gYmUgZm9ybWF0dGVkLlxuICogICAgICAgIE5vIGV4cGxpY2l0IGZsYWdzIGFyZSBzZXQgYnkgZGVmYXVsdC5cbiAqXG4gKiBwcm92aWRlcjogYW4gZXhwbGljaXQgc3RvcmFnZSBwcm92aWRlciB0byB1c2UgZm9yIHRoZSBmaWxlXG4gKiAgICAgICAgICAgc3lzdGVtJ3MgZGF0YWJhc2UgY29udGV4dCBwcm92aWRlci4gIEEgbnVtYmVyIG9mIGNvbnRleHRcbiAqICAgICAgICAgICBwcm92aWRlcnMgYXJlIGluY2x1ZGVkIChzZWUgL3NyYy9wcm92aWRlcnMpLCBhbmQgdXNlcnNcbiAqICAgICAgICAgICBjYW4gd3JpdGUgb25lIG9mIHRoZWlyIG93biBhbmQgcGFzcyBpdCBpbiB0byBiZSB1c2VkLlxuICogICAgICAgICAgIEJ5IGRlZmF1bHQgYW4gSW5kZXhlZERCIHByb3ZpZGVyIGlzIHVzZWQuXG4gKlxuICogZ3VpZDogYSBmdW5jdGlvbiBmb3IgZ2VuZXJhdGluZyB1bmlxdWUgSURzIGZvciBub2RlcyBpbiB0aGUgZmlsZXN5c3RlbS5cbiAqICAgICAgIFVzZSB0aGlzIHRvIG92ZXJyaWRlIHRoZSBidWlsdC1pbiBVVUlEIGdlbmVyYXRpb24uIChVc2VkIG1haW5seSBmb3IgdGVzdHMpLlxuICpcbiAqIGNhbGxiYWNrOiBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIHdoZW4gdGhlIGZpbGUgc3lzdGVtIGJlY29tZXNcbiAqICAgICAgICAgICByZWFkeSBmb3IgdXNlLiBEZXBlbmRpbmcgb24gdGhlIGNvbnRleHQgcHJvdmlkZXIgdXNlZCwgdGhpcyBtaWdodFxuICogICAgICAgICAgIGJlIHJpZ2h0IGF3YXksIG9yIGNvdWxkIHRha2Ugc29tZSB0aW1lLiBUaGUgY2FsbGJhY2sgc2hvdWxkIGV4cGVjdFxuICogICAgICAgICAgIGFuIGBlcnJvcmAgYXJndW1lbnQsIHdoaWNoIHdpbGwgYmUgbnVsbCBpZiBldmVyeXRoaW5nIHdvcmtlZC4gIEFsc29cbiAqICAgICAgICAgICB1c2VycyBzaG91bGQgY2hlY2sgdGhlIGZpbGUgc3lzdGVtJ3MgYHJlYWR5U3RhdGVgIGFuZCBgZXJyb3JgXG4gKiAgICAgICAgICAgcHJvcGVydGllcyB0byBtYWtlIHN1cmUgaXQgaXMgdXNhYmxlLlxuICovXG5mdW5jdGlvbiBGaWxlU3lzdGVtKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGRlZmF1bHRDYWxsYmFjaztcblxuICBjb25zdCBmbGFncyA9IG9wdGlvbnMuZmxhZ3MgfHwgW107XG4gIGNvbnN0IGd1aWQgPSBvcHRpb25zLmd1aWQgPyBvcHRpb25zLmd1aWQgOiBkZWZhdWx0R3VpZEZuO1xuICBjb25zdCBwcm92aWRlciA9IG9wdGlvbnMucHJvdmlkZXIgfHwgbmV3IHByb3ZpZGVycy5EZWZhdWx0KG9wdGlvbnMubmFtZSB8fCBGSUxFX1NZU1RFTV9OQU1FKTtcbiAgLy8gSWYgd2UncmUgZ2l2ZW4gYSBwcm92aWRlciwgbWF0Y2ggaXRzIG5hbWUgdW5sZXNzIHdlIGdldCBhbiBleHBsaWNpdCBuYW1lXG4gIGNvbnN0IG5hbWUgPSBvcHRpb25zLm5hbWUgfHwgcHJvdmlkZXIubmFtZTtcbiAgY29uc3QgZm9yY2VGb3JtYXR0aW5nID0gZmxhZ3MuaW5jbHVkZXMoRlNfRk9STUFUKTtcblxuICBjb25zdCBmcyA9IHRoaXM7XG4gIGZzLnJlYWR5U3RhdGUgPSBGU19QRU5ESU5HO1xuICBmcy5uYW1lID0gbmFtZTtcbiAgZnMuZXJyb3IgPSBudWxsO1xuXG4gIGZzLnN0ZGluID0gU1RESU47XG4gIGZzLnN0ZG91dCA9IFNURE9VVDtcbiAgZnMuc3RkZXJyID0gU1RERVJSO1xuXG4gIC8vIEV4cG9zZSBOb2RlJ3MgZnMuY29uc3RhbnRzIHRvIHVzZXJzXG4gIGZzLmNvbnN0YW50cyA9IGZzQ29uc3RhbnRzO1xuICAvLyBOb2RlIGFsc28gZm9yd2FyZHMgdGhlIGFjY2VzcyBtb2RlIGZsYWdzIG9udG8gZnNcbiAgZnMuRl9PSyA9IGZzQ29uc3RhbnRzLkZfT0s7XG4gIGZzLlJfT0sgPSBmc0NvbnN0YW50cy5SX09LO1xuICBmcy5XX09LID0gZnNDb25zdGFudHMuV19PSztcbiAgZnMuWF9PSyA9IGZzQ29uc3RhbnRzLlhfT0s7XG5cbiAgLy8gRXhwb3NlIFNoZWxsIGNvbnN0cnVjdG9yXG4gIHRoaXMuU2hlbGwgPSBTaGVsbC5iaW5kKHVuZGVmaW5lZCwgdGhpcyk7XG5cbiAgLy8gU2FmZWx5IGV4cG9zZSB0aGUgb3BlcmF0aW9uIHF1ZXVlXG4gIGxldCBxdWV1ZSA9IFtdO1xuICB0aGlzLnF1ZXVlT3JSdW4gPSBmdW5jdGlvbiAob3BlcmF0aW9uKSB7XG4gICAgbGV0IGVycm9yO1xuXG4gICAgaWYgKEZTX1JFQURZID09PSBmcy5yZWFkeVN0YXRlKSB7XG4gICAgICBvcGVyYXRpb24uY2FsbChmcyk7XG4gICAgfSBlbHNlIGlmIChGU19FUlJPUiA9PT0gZnMucmVhZHlTdGF0ZSkge1xuICAgICAgZXJyb3IgPSBuZXcgRXJyb3JzLkVGSUxFU1lTVEVNRVJST1IoJ3Vua25vd24gZXJyb3InKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcXVldWUucHVzaChvcGVyYXRpb24pO1xuICAgIH1cblxuICAgIHJldHVybiBlcnJvcjtcbiAgfTtcbiAgZnVuY3Rpb24gcnVuUXVldWVkKCkge1xuICAgIHF1ZXVlLmZvckVhY2goZnVuY3Rpb24gKG9wZXJhdGlvbikge1xuICAgICAgb3BlcmF0aW9uLmNhbGwodGhpcyk7XG4gICAgfS5iaW5kKGZzKSk7XG4gICAgcXVldWUgPSBudWxsO1xuICB9XG5cbiAgLy8gV2Ugc3VwcG9ydCB0aGUgb3B0aW9uYWwgYG9wdGlvbnNgIGFyZyBmcm9tIG5vZGUsIGJ1dCBpZ25vcmUgaXRcbiAgdGhpcy53YXRjaCA9IGZ1bmN0aW9uIChmaWxlbmFtZSwgb3B0aW9ucywgbGlzdGVuZXIpIHtcbiAgICBpZiAoUGF0aC5pc051bGwoZmlsZW5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhdGggbXVzdCBiZSBhIHN0cmluZyB3aXRob3V0IG51bGwgYnl0ZXMuJyk7XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgbGlzdGVuZXIgPSBvcHRpb25zO1xuICAgICAgb3B0aW9ucyA9IHt9O1xuICAgIH1cbiAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICBsaXN0ZW5lciA9IGxpc3RlbmVyIHx8IG5vcDtcblxuICAgIGNvbnN0IHdhdGNoZXIgPSBuZXcgRlNXYXRjaGVyKCk7XG4gICAgd2F0Y2hlci5zdGFydChmaWxlbmFtZSwgZmFsc2UsIG9wdGlvbnMucmVjdXJzaXZlKTtcbiAgICB3YXRjaGVyLm9uKCdjaGFuZ2UnLCBsaXN0ZW5lcik7XG5cbiAgICByZXR1cm4gd2F0Y2hlcjtcbiAgfTtcblxuICAvLyBEZWFsIHdpdGggdmFyaW91cyBhcHByb2FjaGVzIHRvIG5vZGUgSUQgY3JlYXRpb25cbiAgZnVuY3Rpb24gd3JhcHBlZEd1aWRGbihjb250ZXh0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChjYWxsYmFjaykge1xuICAgICAgLy8gU2tpcCB0aGUgZHVwbGljYXRlIElEIGNoZWNrIGlmIGFza2VkIHRvXG4gICAgICBpZiAoZmxhZ3MuaW5jbHVkZXMoRlNfTk9EVVBFSURDSEVDSykpIHtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgZ3VpZCgpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBPdGhlcndpc2UgKGRlZmF1bHQpIG1ha2Ugc3VyZSB0aGlzIGlkIGlzIHVudXNlZCBmaXJzdFxuICAgICAgZnVuY3Rpb24gZ3VpZFdpdGhDaGVjayhjYWxsYmFjaykge1xuICAgICAgICBjb25zdCBpZCA9IGd1aWQoKTtcbiAgICAgICAgY29udGV4dC5nZXRPYmplY3QoaWQsIGZ1bmN0aW9uIChlcnIsIHZhbHVlKSB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBJZiB0aGlzIGlkIGlzIHVudXNlZCwgdXNlIGl0LCBvdGhlcndpc2UgZmluZCBhbm90aGVyXG4gICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgaWQpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBndWlkV2l0aENoZWNrKGNhbGxiYWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgZ3VpZFdpdGhDaGVjayhjYWxsYmFjayk7XG4gICAgfTtcbiAgfVxuXG4gIC8vIExldCBvdGhlciBpbnN0YW5jZXMgKGluIHRoaXMgb3Igb3RoZXIgd2luZG93cykga25vdyBhYm91dFxuICAvLyBhbnkgY2hhbmdlcyB0byB0aGlzIGZzIGluc3RhbmNlLlxuICBmdW5jdGlvbiBicm9hZGNhc3RDaGFuZ2VzKGNoYW5nZXMpIHtcbiAgICBpZiAoIWNoYW5nZXMubGVuZ3RoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGludGVyY29tID0gSW50ZXJjb20uZ2V0SW5zdGFuY2UoKTtcbiAgICBjaGFuZ2VzLmZvckVhY2goZnVuY3Rpb24gKGNoYW5nZSkge1xuICAgICAgaW50ZXJjb20uZW1pdChjaGFuZ2UuZXZlbnQsIGNoYW5nZS5wYXRoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE9wZW4gZmlsZSBzeXN0ZW0gc3RvcmFnZSBwcm92aWRlclxuICBwcm92aWRlci5vcGVuKGZ1bmN0aW9uIChlcnIpIHtcbiAgICBmdW5jdGlvbiBjb21wbGV0ZShlcnJvcikge1xuICAgICAgZnVuY3Rpb24gd3JhcHBlZENvbnRleHQobWV0aG9kTmFtZSkge1xuICAgICAgICBsZXQgY29udGV4dCA9IHByb3ZpZGVyW21ldGhvZE5hbWVdKCk7XG4gICAgICAgIGNvbnRleHQubmFtZSA9IG5hbWU7XG4gICAgICAgIGNvbnRleHQuZmxhZ3MgPSBmbGFncztcbiAgICAgICAgY29udGV4dC5jaGFuZ2VzID0gW107XG4gICAgICAgIGNvbnRleHQuZ3VpZCA9IHdyYXBwZWRHdWlkRm4oY29udGV4dCk7XG5cbiAgICAgICAgLy8gV2hlbiB0aGUgY29udGV4dCBpcyBmaW5pc2hlZCwgbGV0IHRoZSBmcyBkZWFsIHdpdGggYW55IGNoYW5nZSBldmVudHNcbiAgICAgICAgY29udGV4dC5jbG9zZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBsZXQgY2hhbmdlcyA9IGNvbnRleHQuY2hhbmdlcztcbiAgICAgICAgICBicm9hZGNhc3RDaGFuZ2VzKGNoYW5nZXMpO1xuICAgICAgICAgIGNoYW5nZXMubGVuZ3RoID0gMDtcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4gY29udGV4dDtcbiAgICAgIH1cblxuICAgICAgLy8gV3JhcCB0aGUgcHJvdmlkZXIgc28gd2UgY2FuIGV4dGVuZCB0aGUgY29udGV4dCB3aXRoIGZzIGZsYWdzIGFuZFxuICAgICAgLy8gYW4gYXJyYXkgb2YgY2hhbmdlcyAoZS5nLiwgd2F0Y2ggZXZlbnQgJ2NoYW5nZScgYW5kICdyZW5hbWUnIGV2ZW50c1xuICAgICAgLy8gZm9yIHBhdGhzIHVwZGF0ZWQgZHVyaW5nIHRoZSBsaWZldGltZSBvZiB0aGUgY29udGV4dCkuIEZyb20gdGhpc1xuICAgICAgLy8gcG9pbnQgZm9yd2FyZCB3ZSB3b24ndCBjYWxsIG9wZW4gYWdhaW4sIHNvIGl0J3Mgc2FmZSB0byBkcm9wIGl0LlxuICAgICAgZnMucHJvdmlkZXIgPSB7XG4gICAgICAgIG9wZW5SZWFkV3JpdGVDb250ZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHdyYXBwZWRDb250ZXh0KCdnZXRSZWFkV3JpdGVDb250ZXh0Jyk7XG4gICAgICAgIH0sXG4gICAgICAgIG9wZW5SZWFkT25seUNvbnRleHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gd3JhcHBlZENvbnRleHQoJ2dldFJlYWRPbmx5Q29udGV4dCcpO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgZnMucmVhZHlTdGF0ZSA9IEZTX0VSUk9SO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZnMucmVhZHlTdGF0ZSA9IEZTX1JFQURZO1xuICAgICAgfVxuICAgICAgcnVuUXVldWVkKCk7XG4gICAgICBjYWxsYmFjayhlcnJvciwgZnMpO1xuICAgIH1cblxuICAgIGlmIChlcnIpIHtcbiAgICAgIHJldHVybiBjb21wbGV0ZShlcnIpO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRleHQgPSBwcm92aWRlci5nZXRSZWFkV3JpdGVDb250ZXh0KCk7XG4gICAgY29udGV4dC5ndWlkID0gd3JhcHBlZEd1aWRGbihjb250ZXh0KTtcblxuICAgIC8vIE1vdW50IHRoZSBmaWxlc3lzdGVtLCBmb3JtYXR0aW5nIGlmIG5lY2Vzc2FyeVxuICAgIGlmIChmb3JjZUZvcm1hdHRpbmcpIHtcbiAgICAgIC8vIFdpcGUgdGhlIHN0b3JhZ2UgcHJvdmlkZXIsIHRoZW4gd3JpdGUgcm9vdCBibG9ja1xuICAgICAgY29udGV4dC5jbGVhcihmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZXR1cm4gY29tcGxldGUoZXJyKTtcbiAgICAgICAgfVxuICAgICAgICBpbXBsLmVuc3VyZVJvb3REaXJlY3RvcnkoY29udGV4dCwgY29tcGxldGUpO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVzZSBleGlzdGluZyAob3IgY3JlYXRlIG5ldykgcm9vdCBhbmQgbW91bnRcbiAgICAgIGltcGwuZW5zdXJlUm9vdERpcmVjdG9yeShjb250ZXh0LCBjb21wbGV0ZSk7XG4gICAgfVxuICB9KTtcbiAgRmlsZVN5c3RlbS5wcm90b3R5cGUucHJvbWlzZXMgPSB7fTtcblxuICAvKipcbiAgICogUHVibGljIEFQSSBmb3IgRmlsZVN5c3RlbS4gQWxsIG5vZGUuanMgbWV0aG9kcyB0aGF0IGFyZSBleHBvc2VkIG9uIGZzLnByb21pc2VzXG4gICAqIGluY2x1ZGUgYHByb21pc2U6IHRydWVgLiAgV2UgYWxzbyBpbmNsdWRlIG91ciBvd24gZXh0cmEgbWV0aG9kcywgYnV0IHNraXAgdGhlXG4gICAqIGZkIHZlcnNpb25zIHRvIG1hdGNoIG5vZGUuanMsIHdoaWNoIHB1dHMgdGhlc2Ugb24gYSBgRmlsZUhhbmRsZWAgb2JqZWN0LlxuICAgKiBBbnkgbWV0aG9kIHRoYXQgZGVhbHMgd2l0aCBwYXRoIGFyZ3VtZW50KHMpIGFsc28gaW5jbHVkZXMgdGhlIHBvc2l0aW9uIG9mXG4gICAqIHRob3NlIGFyZ3MgaW4gb25lIG9mIGBhYnNQYXRoQXJnczogWy4uLl1gIG9yIGByZWxQYXRoQXJnczogWy4uLl1gLCBzbyB0aGV5XG4gICAqIGNhbiBiZSBwcm9jZXNzZWQgYW5kIHZhbGlkYXRlZCBiZWZvcmUgYmVpbmcgcGFzc2VkIG9uIHRvIHRoZSBtZXRob2QuXG4gICAqL1xuICBbXG4gICAgeyBuYW1lOiAnYXBwZW5kRmlsZScsIHByb21pc2VzOiB0cnVlLCBhYnNQYXRoQXJnczogWzBdIH0sXG4gICAgeyBuYW1lOiAnYWNjZXNzJywgcHJvbWlzZXM6IHRydWUsIGFic1BhdGhBcmdzOiBbMF0gfSxcbiAgICB7IG5hbWU6ICdjaG93bicsIHByb21pc2VzOiB0cnVlLCBhYnNQYXRoQXJnczogWzBdIH0sXG4gICAgeyBuYW1lOiAnY2htb2QnLCBwcm9taXNlczogdHJ1ZSwgYWJzUGF0aEFyZ3M6IFswXSB9LFxuICAgIHsgbmFtZTogJ2Nsb3NlJyB9LFxuICAgIC8vIGNvcHlGaWxlIC0gaHR0cHM6Ly9naXRodWIuY29tL2ZpbGVyanMvZmlsZXIvaXNzdWVzLzQzNlxuICAgIHsgbmFtZTogJ2V4aXN0cycsIGFic1BhdGhBcmdzOiBbMF0gfSxcbiAgICB7IG5hbWU6ICdmY2hvd24nIH0sXG4gICAgeyBuYW1lOiAnZmNobW9kJyB9LFxuICAgIC8vIGZkYXRhc3luYyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9maWxlcmpzL2ZpbGVyL2lzc3Vlcy82NTNcbiAgICB7IG5hbWU6ICdmZ2V0eGF0dHInIH0sXG4gICAgeyBuYW1lOiAnZnJlbW92ZXhhdHRyJyB9LFxuICAgIHsgbmFtZTogJ2ZzZXR4YXR0cicgfSxcbiAgICB7IG5hbWU6ICdmc3RhdCcgfSxcbiAgICB7IG5hbWU6ICdmc3luYycgfSxcbiAgICB7IG5hbWU6ICdmdHJ1bmNhdGUnIH0sXG4gICAgeyBuYW1lOiAnZnV0aW1lcycgfSxcbiAgICB7IG5hbWU6ICdnZXR4YXR0cicsIHByb21pc2VzOiB0cnVlLCBhYnNQYXRoQXJnczogWzBdIH0sXG4gICAgLy8gbGNob3duIC0gaHR0cHM6Ly9naXRodWIuY29tL2ZpbGVyanMvZmlsZXIvaXNzdWVzLzYyMFxuICAgIC8vIGxjaG1vZCAtIGh0dHBzOi8vZ2l0aHViLmNvbS9maWxlcmpzL2ZpbGVyL2lzc3Vlcy82MTlcbiAgICB7IG5hbWU6ICdsaW5rJywgcHJvbWlzZXM6IHRydWUsIGFic1BhdGhBcmdzOiBbMCwgMV0gfSxcbiAgICB7IG5hbWU6ICdsc2VlaycgfSxcbiAgICB7IG5hbWU6ICdsc3RhdCcsIHByb21pc2VzOiB0cnVlIH0sXG4gICAgeyBuYW1lOiAnbWtkaXInLCBwcm9taXNlczogdHJ1ZSwgYWJzUGF0aEFyZ3M6IFswXSB9LFxuICAgIHsgbmFtZTogJ21rZHRlbXAnLCBwcm9taXNlczogdHJ1ZSB9LFxuICAgIHsgbmFtZTogJ21rbm9kJywgcHJvbWlzZXM6IHRydWUsIGFic1BhdGhBcmdzOiBbMF0gfSxcbiAgICB7IG5hbWU6ICdvcGVuJywgcHJvbWlzZXM6IHRydWUsIGFic1BhdGhBcmdzOiBbMF0gfSxcbiAgICB7IG5hbWU6ICdyZWFkZGlyJywgcHJvbWlzZXM6IHRydWUsIGFic1BhdGhBcmdzOiBbMF0gfSxcbiAgICB7IG5hbWU6ICdyZWFkJyB9LFxuICAgIHsgbmFtZTogJ3JlYWRGaWxlJywgcHJvbWlzZXM6IHRydWUsIGFic1BhdGhBcmdzOiBbMF0gfSxcbiAgICB7IG5hbWU6ICdyZWFkbGluaycsIHByb21pc2VzOiB0cnVlLCBhYnNQYXRoQXJnczogWzBdIH0sXG4gICAgLy8gcmVhbHBhdGggLSBodHRwczovL2dpdGh1Yi5jb20vZmlsZXJqcy9maWxlci9pc3N1ZXMvODVcbiAgICB7IG5hbWU6ICdyZW1vdmV4YXR0cicsIHByb21pc2VzOiB0cnVlLCBhYnNQYXRoQXJnczogWzBdIH0sXG4gICAgeyBuYW1lOiAncmVuYW1lJywgcHJvbWlzZXM6IHRydWUsIGFic1BhdGhBcmdzOiBbMCwgMV0gfSxcbiAgICB7IG5hbWU6ICdybWRpcicsIHByb21pc2VzOiB0cnVlLCBhYnNQYXRoQXJnczogWzBdIH0sXG4gICAgeyBuYW1lOiAnc2V0eGF0dHInLCBwcm9taXNlczogdHJ1ZSwgYWJzUGF0aEFyZ3M6IFswXSB9LFxuICAgIHsgbmFtZTogJ3N0YXQnLCBwcm9taXNlczogdHJ1ZSwgYWJzUGF0aEFyZ3M6IFswXSB9LFxuICAgIHsgbmFtZTogJ3N5bWxpbmsnLCBwcm9taXNlczogdHJ1ZSwgcmVsUGF0aEFyZ3M6IFswXSwgYWJzUGF0aEFyZ3M6IFsxXSB9LFxuICAgIHsgbmFtZTogJ3RydW5jYXRlJywgcHJvbWlzZXM6IHRydWUsIGFic1BhdGhBcmdzOiBbMF0gfSxcbiAgICAvLyB1bndhdGNoRmlsZSAtIGh0dHBzOi8vZ2l0aHViLmNvbS9maWxlcmpzL2ZpbGVyL3B1bGwvNTUzXG4gICAgeyBuYW1lOiAndW5saW5rJywgcHJvbWlzZXM6IHRydWUsIGFic1BhdGhBcmdzOiBbMF0gfSxcbiAgICB7IG5hbWU6ICd1dGltZXMnLCBwcm9taXNlczogdHJ1ZSwgYWJzUGF0aEFyZ3M6IFswXSB9LFxuICAgIC8vIHdhdGNoIC0gaW1wbGVtZW50ZWQgYWJvdmUgaW4gYHRoaXMud2F0Y2hgXG4gICAgLy8gd2F0Y2hGaWxlIC0gaHR0cHM6Ly9naXRodWIuY29tL2ZpbGVyanMvZmlsZXIvaXNzdWVzLzY1NFxuICAgIHsgbmFtZTogJ3dyaXRlRmlsZScsIHByb21pc2VzOiB0cnVlLCBhYnNQYXRoQXJnczogWzBdIH0sXG4gICAgeyBuYW1lOiAnd3JpdGUnIH1cbiAgXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgICBjb25zdCBtZXRob2ROYW1lID0gbWV0aG9kLm5hbWU7XG4gICAgY29uc3Qgc2hvdWxkUHJvbWlzaWZ5ID0gbWV0aG9kLnByb21pc2VzID09PSB0cnVlO1xuXG4gICAgRmlsZVN5c3RlbS5wcm90b3R5cGVbbWV0aG9kTmFtZV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBmcyA9IHRoaXM7XG4gICAgICBjb25zdCBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLCAwKTtcbiAgICAgIGNvbnN0IGxhc3RBcmdJbmRleCA9IGFyZ3MubGVuZ3RoIC0gMTtcblxuICAgICAgLy8gV2UgbWF5IG9yIG1heSBub3QgZ2V0IGEgY2FsbGJhY2ssIGFuZCBzaW5jZSBub2RlLmpzIHN1cHBvcnRzXG4gICAgICAvLyBmaXJlLWFuZC1mb3JnZXQgc3R5bGUgZnMgb3BlcmF0aW9ucywgd2UgaGF2ZSB0byBkYW5jZSBhIGJpdCBoZXJlLlxuICAgICAgY29uc3QgbWlzc2luZ0NhbGxiYWNrID0gdHlwZW9mIGFyZ3NbbGFzdEFyZ0luZGV4XSAhPT0gJ2Z1bmN0aW9uJztcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gbWF5YmVDYWxsYmFjayhhcmdzW2xhc3RBcmdJbmRleF0pO1xuXG4gICAgICAvLyBEZWFsIHdpdGggcGF0aCBhcmd1bWVudHMsIHZhbGlkYXRpbmcgYW5kIG5vcm1hbGl6aW5nIEJ1ZmZlciBhbmQgZmlsZTovLyBVUkxzXG4gICAgICBpZiAobWV0aG9kLmFic1BhdGhBcmdzKSB7XG4gICAgICAgIG1ldGhvZC5hYnNQYXRoQXJncy5mb3JFYWNoKHBhdGhBcmcgPT4gcHJvY2Vzc1BhdGhBcmcoYXJncywgcGF0aEFyZywgZmFsc2UpKTtcbiAgICAgIH1cbiAgICAgIGlmIChtZXRob2QucmVsUGF0aEFyZ3MpIHtcbiAgICAgICAgbWV0aG9kLnJlbFBhdGhBcmdzLmZvckVhY2gocGF0aEFyZyA9PiBwcm9jZXNzUGF0aEFyZyhhcmdzLCBwYXRoQXJnLCB0cnVlKSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVycm9yID0gZnMucXVldWVPclJ1bihmdW5jdGlvbiAoKSB7XG4gICAgICAgIGNvbnN0IGNvbnRleHQgPSBmcy5wcm92aWRlci5vcGVuUmVhZFdyaXRlQ29udGV4dCgpO1xuXG4gICAgICAgIC8vIEZhaWwgZWFybHkgaWYgdGhlIGZpbGVzeXN0ZW0gaXMgaW4gYW4gZXJyb3Igc3RhdGUgKGUuZy4sXG4gICAgICAgIC8vIHByb3ZpZGVyIGZhaWxlZCB0byBvcGVuLlxuICAgICAgICBpZiAoRlNfRVJST1IgPT09IGZzLnJlYWR5U3RhdGUpIHtcbiAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3JzLkVGSUxFU1lTVEVNRVJST1IoJ2ZpbGVzeXN0ZW0gdW5hdmFpbGFibGUsIG9wZXJhdGlvbiBjYW5jZWxlZCcpO1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjay5jYWxsKGZzLCBlcnIpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV3JhcCB0aGUgY2FsbGJhY2sgc28gd2UgY2FuIGV4cGxpY2l0bHkgY2xvc2UgdGhlIGNvbnRleHRcbiAgICAgICAgZnVuY3Rpb24gY29tcGxldGUoKSB7XG4gICAgICAgICAgY29udGV4dC5jbG9zZSgpO1xuICAgICAgICAgIGNhbGxiYWNrLmFwcGx5KGZzLCBhcmd1bWVudHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRWl0aGVyIGFkZCBvciByZXBsYWNlIHRoZSBjYWxsYmFjayB3aXRoIG91ciB3cmFwcGVyIGNvbXBsZXRlKClcbiAgICAgICAgaWYgKG1pc3NpbmdDYWxsYmFjaykge1xuICAgICAgICAgIGFyZ3MucHVzaChjb21wbGV0ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXJnc1tsYXN0QXJnSW5kZXhdID0gY29tcGxldGU7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBGb3J3YXJkIHRoaXMgY2FsbCB0byB0aGUgaW1wbCdzIHZlcnNpb24sIHVzaW5nIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgLy8gY2FsbCBzaWduYXR1cmUsIHdpdGggY29tcGxldGUoKSBhcyB0aGUgY2FsbGJhY2svbGFzdC1hcmcgbm93OlxuICAgICAgICAvLyBmbihmcywgY29udGV4dCwgYXJnMCwgYXJnMSwgLi4uICwgY29tcGxldGUpO1xuICAgICAgICBjb25zdCBmbkFyZ3MgPSBbY29udGV4dF0uY29uY2F0KGFyZ3MpO1xuICAgICAgICBpbXBsW21ldGhvZE5hbWVdLmFwcGx5KG51bGwsIGZuQXJncyk7XG4gICAgICB9KTtcbiAgICAgIGlmIChlcnJvcikge1xuICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICB9XG4gICAgfTtcblxuICAgIC8vIEFkZCB0byBmcy5wcm9taXNlcyBpZiBhcHByb3ByaWF0ZVxuICAgIGlmIChzaG91bGRQcm9taXNpZnkpIHtcbiAgICAgIEZpbGVTeXN0ZW0ucHJvdG90eXBlLnByb21pc2VzW21ldGhvZE5hbWVdID0gcHJvbWlzaWZ5KEZpbGVTeXN0ZW0ucHJvdG90eXBlW21ldGhvZE5hbWVdLmJpbmQoZnMpKTtcbiAgICB9XG4gIH0pO1xuXG59XG5cbi8vIEV4cG9zZSBzdG9yYWdlIHByb3ZpZGVycyBvbiBGaWxlU3lzdGVtIGNvbnN0cnVjdG9yXG5GaWxlU3lzdGVtLnByb3ZpZGVycyA9IHByb3ZpZGVycztcblxubW9kdWxlLmV4cG9ydHMgPSBGaWxlU3lzdGVtO1xuIiwiJ3VzaW5nIHN0cmljdCc7XG5cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJy4uL2xpYi9ldmVudGVtaXR0ZXIuanMnKTtcbmNvbnN0IFBhdGggPSByZXF1aXJlKCcuL3BhdGguanMnKTtcbmNvbnN0IEludGVyY29tID0gcmVxdWlyZSgnLi4vbGliL2ludGVyY29tLmpzJyk7XG5cbi8qKlxuICogRlNXYXRjaGVyIGJhc2VkIG9uIG5vZGUuanMnIEZTV2F0Y2hlclxuICogc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qb3llbnQvbm9kZS9ibG9iL21hc3Rlci9saWIvZnMuanNcbiAqL1xuZnVuY3Rpb24gRlNXYXRjaGVyKCkge1xuICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKTtcbiAgY29uc3Qgc2VsZiA9IHRoaXM7XG4gIGxldCByZWN1cnNpdmUgPSBmYWxzZTtcbiAgbGV0IHJlY3Vyc2l2ZVBhdGhQcmVmaXg7XG4gIGxldCBmaWxlbmFtZTtcblxuICBmdW5jdGlvbiBvbmNoYW5nZShwYXRoKSB7XG4gICAgLy8gV2F0Y2ggZm9yIGV4YWN0IGZpbGVuYW1lLCBvciBwYXJlbnQgcGF0aCB3aGVuIHJlY3Vyc2l2ZSBpcyB0cnVlLlxuICAgIGlmKGZpbGVuYW1lID09PSBwYXRoIHx8IChyZWN1cnNpdmUgJiYgcGF0aC5pbmRleE9mKHJlY3Vyc2l2ZVBhdGhQcmVmaXgpID09PSAwKSkge1xuICAgICAgc2VsZi50cmlnZ2VyKCdjaGFuZ2UnLCAnY2hhbmdlJywgcGF0aCk7XG4gICAgfVxuICB9XG5cbiAgLy8gV2Ugc3VwcG9ydCwgYnV0IGlnbm9yZSB0aGUgc2Vjb25kIGFyZywgd2hpY2ggbm9kZS5qcyB1c2VzLlxuICBzZWxmLnN0YXJ0ID0gZnVuY3Rpb24oZmlsZW5hbWVfLCBwZXJzaXN0ZW50XywgcmVjdXJzaXZlXykge1xuICAgIC8vIEJhaWwgaWYgd2UndmUgYWxyZWFkeSBzdGFydGVkIChhbmQgdGhlcmVmb3JlIGhhdmUgYSBmaWxlbmFtZSk7XG4gICAgaWYoZmlsZW5hbWUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZihQYXRoLmlzTnVsbChmaWxlbmFtZV8pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhdGggbXVzdCBiZSBhIHN0cmluZyB3aXRob3V0IG51bGwgYnl0ZXMuJyk7XG4gICAgfVxuXG4gICAgLy8gVE9ETzogZ2V0IHJlYWxwYXRoIGZvciBzeW1saW5rcyBvbiBmaWxlbmFtZS4uLlxuXG4gICAgLy8gRmlsZXIncyBQYXRoLm5vcm1hbGl6ZSBzdHJpcHMgdHJhaWxpbmcgc2xhc2hlcywgd2hpY2ggd2UgdXNlIGhlcmUuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcy1wbGF0Zm9ybS9maWxlci9pc3N1ZXMvMTA1XG4gICAgZmlsZW5hbWUgPSBQYXRoLm5vcm1hbGl6ZShmaWxlbmFtZV8pO1xuXG4gICAgLy8gV2hldGhlciB0byB3YXRjaCBiZW5lYXRoIHRoaXMgcGF0aCBvciBub3RcbiAgICByZWN1cnNpdmUgPSByZWN1cnNpdmVfID09PSB0cnVlO1xuICAgIC8vIElmIHJlY3Vyc2l2ZSwgY29uc3RydWN0IGEgcGF0aCBwcmVmaXggcG9ydGlvbiBmb3IgY29tcGFyaXNvbnMgbGF0ZXJcbiAgICAvLyAoaS5lLiwgJy9wYXRoJyBiZWNvbWVzICcvcGF0aC8nIHNvIHdlIGNhbiBzZWFyY2ggd2l0aGluIGEgZmlsZW5hbWUgZm9yIHRoZVxuICAgIC8vIHByZWZpeCkuIFdlIGFsc28gdGFrZSBjYXJlIHRvIGFsbG93IGZvciAnLycgb24gaXRzIG93bi5cbiAgICBpZihyZWN1cnNpdmUpIHtcbiAgICAgIHJlY3Vyc2l2ZVBhdGhQcmVmaXggPSBmaWxlbmFtZSA9PT0gJy8nID8gJy8nIDogZmlsZW5hbWUgKyAnLyc7XG4gICAgfVxuXG4gICAgY29uc3QgaW50ZXJjb20gPSBJbnRlcmNvbS5nZXRJbnN0YW5jZSgpO1xuICAgIGludGVyY29tLm9uKCdjaGFuZ2UnLCBvbmNoYW5nZSk7XG4gIH07XG5cbiAgc2VsZi5jbG9zZSA9IGZ1bmN0aW9uKCkge1xuICAgIGNvbnN0IGludGVyY29tID0gSW50ZXJjb20uZ2V0SW5zdGFuY2UoKTtcbiAgICBpbnRlcmNvbS5vZmYoJ2NoYW5nZScsIG9uY2hhbmdlKTtcbiAgICBzZWxmLnJlbW92ZUFsbExpc3RlbmVycygnY2hhbmdlJyk7XG4gIH07XG59XG5GU1dhdGNoZXIucHJvdG90eXBlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuRlNXYXRjaGVyLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IEZTV2F0Y2hlcjtcblxubW9kdWxlLmV4cG9ydHMgPSBGU1dhdGNoZXI7XG4iLCJsZXQgZnMgPSBudWxsO1xubGV0IEZpbGVyID0gbnVsbDtcblxubW9kdWxlLmV4cG9ydHMgPSBGaWxlciA9IHtcbiAgRmlsZVN5c3RlbTogcmVxdWlyZSgnLi9maWxlc3lzdGVtL2ludGVyZmFjZS5qcycpLFxuICBCdWZmZXI6IEJ1ZmZlcixcbiAgLy8gV2UgcHJldmlvdXNseSBjYWxsZWQgdGhpcyBQYXRoLCBidXQgbm9kZSBjYWxscyBpdCBwYXRoLiBEbyBib3RoXG4gIFBhdGg6IHJlcXVpcmUoJy4vcGF0aC5qcycpLFxuICBwYXRoOiByZXF1aXJlKCcuL3BhdGguanMnKSxcbiAgRXJyb3JzOiByZXF1aXJlKCcuL2Vycm9ycy5qcycpLFxuICBTaGVsbDogcmVxdWlyZSgnLi9zaGVsbC9zaGVsbC5qcycpLFxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgSW1wb3J0aW5nIGZpbGVyIGZyb20geW91ciB3ZWJwYWNrIGNvbmZpZyBpcyBub3QgcmVjb21tZW5kZWQuXG4gICAqIFxuICAgKiBUaGUgZmlsZXIgYEZpbGVyV2VicGFja1BsdWdpbmAgY2xhc3MgaXMgZXhwb3NlZCBkaXJlY3RseS4gXG4gICAqIFxuICAgKiBgYGBcbiAgICogY29uc3QgeyBGaWxlcldlYnBhY2tQbHVnaW4gfSA9IHJlcXVpcmUoJ2ZpbGVyL3dlYnBhY2snKTtcbiAgICogYGBgXG4gICAqL1xuICBGaWxlcldlYnBhY2tQbHVnaW46IHJlcXVpcmUoJy4vd2VicGFjay1wbHVnaW4nKSxcbn07XG5cbi8vIEFkZCBhIGdldHRlciBmb3IgdGhlIGBmc2AgaW5zdGFuY2UsIHdoaWNoIHJldHVybnNcbi8vIGEgRmlsZXIgRmlsZVN5c3RlbSBpbnN0YW5jZSwgdXNpbmcgdGhlIGRlZmF1bHQgcHJvdmlkZXIvZmxhZ3MuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoRmlsZXIsICdmcycsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0KCkge1xuICAgIGlmKCFmcykge1xuICAgICAgZnMgPSBuZXcgRmlsZXIuRmlsZVN5c3RlbSgpO1xuICAgIH1cbiAgICByZXR1cm4gZnM7XG4gIH1cbn0pO1xuIiwiY29uc3Qge1xuICBOT0RFX1RZUEVfRklMRSxcbiAgTk9ERV9UWVBFX0RJUkVDVE9SWSxcbiAgTk9ERV9UWVBFX1NZTUJPTElDX0xJTkssXG4gIERFRkFVTFRfRklMRV9QRVJNSVNTSU9OUyxcbiAgREVGQVVMVF9ESVJfUEVSTUlTU0lPTlNcbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpO1xuY29uc3Qge1xuICBTX0lGUkVHLFxuICBTX0lGRElSLFxuICBTX0lGTE5LXG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKS5mc0NvbnN0YW50cztcblxuLyoqXG4gKiBNYWtlIHN1cmUgdGhlIG9wdGlvbnMgb2JqZWN0IGhhcyBhbiBpZCBvbiBwcm9wZXJ0eSxcbiAqIGVpdGhlciBmcm9tIGNhbGxlciBvciBvbmUgd2UgZ2VuZXJhdGUgdXNpbmcgc3VwcGxpZWQgZ3VpZCBmbi5cbiAqL1xuZnVuY3Rpb24gZW5zdXJlSUQob3B0aW9ucywgcHJvcCwgY2FsbGJhY2spIHtcbiAgaWYob3B0aW9uc1twcm9wXSkge1xuICAgIHJldHVybiBjYWxsYmFjaygpO1xuICB9XG5cbiAgb3B0aW9ucy5ndWlkKGZ1bmN0aW9uKGVyciwgaWQpIHtcbiAgICBpZihlcnIpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgIH1cbiAgICBvcHRpb25zW3Byb3BdID0gaWQ7XG4gICAgY2FsbGJhY2soKTtcbiAgfSk7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBQT1NJWCBtb2RlIChpbnRlZ2VyKSBmb3IgdGhlIG5vZGUgdHlwZSBhbmQgcGVybWlzc2lvbnMuXG4gKiBVc2UgZGVmYXVsdCBwZXJtaXNzaW9ucyBpZiB3ZSBhcmVuJ3QgcGFzc2VkIGFueS5cbiAqL1xuZnVuY3Rpb24gZ2VuZXJhdGVNb2RlKG5vZGVUeXBlLCBtb2RlUGVybWlzc2lvbnMpIHtcbiAgc3dpdGNoKG5vZGVUeXBlKSB7XG4gIGNhc2UgTk9ERV9UWVBFX0RJUkVDVE9SWTpcbiAgICByZXR1cm4gKG1vZGVQZXJtaXNzaW9ucyB8fCBERUZBVUxUX0RJUl9QRVJNSVNTSU9OUykgfCBTX0lGRElSO1xuICBjYXNlIE5PREVfVFlQRV9TWU1CT0xJQ19MSU5LOlxuICAgIHJldHVybiAobW9kZVBlcm1pc3Npb25zIHx8IERFRkFVTFRfRklMRV9QRVJNSVNTSU9OUykgfCBTX0lGTE5LO1xuICBjYXNlIE5PREVfVFlQRV9GSUxFOlxuICAgIC8vIGZhbGxzIHRocm91Z2hcbiAgZGVmYXVsdDpcbiAgICByZXR1cm4gKG1vZGVQZXJtaXNzaW9ucyB8fCBERUZBVUxUX0ZJTEVfUEVSTUlTU0lPTlMpIHwgU19JRlJFRztcbiAgfVxufVxuXG4vKipcbiAqIENvbW1vbiBwcm9wZXJ0aWVzIGZvciB0aGUgbGF5b3V0IG9mIGEgTm9kZVxuICovXG5jbGFzcyBOb2RlIHtcbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuXG4gICAgdGhpcy5pZCA9IG9wdGlvbnMuaWQ7XG4gICAgdGhpcy5kYXRhID0gb3B0aW9ucy5kYXRhOyAvLyBpZCBmb3IgZGF0YSBvYmplY3RcbiAgICB0aGlzLnNpemUgPSBvcHRpb25zLnNpemUgfHwgMDsgLy8gc2l6ZSAoYnl0ZXMgZm9yIGZpbGVzLCBlbnRyaWVzIGZvciBkaXJlY3RvcmllcylcbiAgICB0aGlzLmF0aW1lID0gb3B0aW9ucy5hdGltZSB8fCBub3c7IC8vIGFjY2VzcyB0aW1lICh3aWxsIG1pcnJvciBjdGltZSBhZnRlciBjcmVhdGlvbilcbiAgICB0aGlzLmN0aW1lID0gb3B0aW9ucy5jdGltZSB8fCBub3c7IC8vIGNyZWF0aW9uL2NoYW5nZSB0aW1lXG4gICAgdGhpcy5tdGltZSA9IG9wdGlvbnMubXRpbWUgfHwgbm93OyAvLyBtb2RpZmllZCB0aW1lXG4gICAgdGhpcy5mbGFncyA9IG9wdGlvbnMuZmxhZ3MgfHwgW107IC8vIGZpbGUgZmxhZ3NcbiAgICB0aGlzLnhhdHRycyA9IG9wdGlvbnMueGF0dHJzIHx8IHt9OyAvLyBleHRlbmRlZCBhdHRyaWJ1dGVzXG4gICAgdGhpcy5ubGlua3MgPSBvcHRpb25zLm5saW5rcyB8fCAwOyAvLyBsaW5rcyBjb3VudFxuXG4gICAgLy8gSGlzdG9yaWNhbGx5LCBGaWxlcidzIG5vZGUgbGF5b3V0IGhhcyByZWZlcnJlZCB0byB0aGVcbiAgICAvLyBub2RlIHR5cGUgYXMgYG1vZGVgLCBhbmQgZG9uZSBzbyB1c2luZyBhIFN0cmluZy4gIEluXG4gICAgLy8gYSBQT1NJWCBmaWxlc3lzdGVtLCB0aGUgbW9kZSBpcyBhIG51bWJlciB0aGF0IGNvbWJpbmVzXG4gICAgLy8gYm90aCBub2RlIHR5cGUgYW5kIHBlcm1pc3Npb24gYml0cy4gSW50ZXJuYWwgd2UgdXNlIGB0eXBlYCxcbiAgICAvLyBidXQgc3RvcmUgaXQgaW4gdGhlIGRhdGFiYXNlIGFzIGBtb2RlYCBmb3IgYmFja3dhcmRcbiAgICAvLyBjb21wYXRpYmlsaXR5LlxuICAgIGlmKHR5cGVvZiBvcHRpb25zLnR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGU7XG4gICAgfSBlbHNlIGlmKHR5cGVvZiBvcHRpb25zLm1vZGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLnR5cGUgPSBvcHRpb25zLm1vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudHlwZSA9IE5PREVfVFlQRV9GSUxFO1xuICAgIH1cblxuICAgIC8vIEV4dHJhIG1vZGUgcGVybWlzc2lvbnMgYW5kIG93bmVyc2hpcCBpbmZvXG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IG9wdGlvbnMucGVybWlzc2lvbnMgfHwgZ2VuZXJhdGVNb2RlKHRoaXMudHlwZSk7XG4gICAgdGhpcy51aWQgPSBvcHRpb25zLnVpZCB8fCAweDA7IC8vIG93bmVyIG5hbWVcbiAgICB0aGlzLmdpZCA9IG9wdGlvbnMuZ2lkIHx8IDB4MDsgLy8gZ3JvdXAgbmFtZVxuICB9XG5cbiAgLyoqXG4gICAqIFNlcmlhbGl6ZSBhIE5vZGUgdG8gSlNPTi4gIEV2ZXJ5dGhpbmcgaXMgYXMgZXhwZWN0ZWQgZXhjZXB0XG4gICAqIHRoYXQgd2UgdXNlIGBtb2RlYCBmb3IgYHR5cGVgIHRvIG1haW50YWluIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gICAqL1xuICB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlkOiB0aGlzLmlkLFxuICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgICAgc2l6ZTogdGhpcy5zaXplLFxuICAgICAgYXRpbWU6IHRoaXMuYXRpbWUsXG4gICAgICBjdGltZTogdGhpcy5jdGltZSxcbiAgICAgIG10aW1lOiB0aGlzLmN0aW1lLFxuICAgICAgZmxhZ3M6IHRoaXMuZmxhZ3MsXG4gICAgICB4YXR0cnM6IHRoaXMueGF0dHJzLFxuICAgICAgbmxpbmtzOiB0aGlzLm5saW5rcyxcbiAgICAgIC8vIFVzZSBgbW9kZWAgZm9yIGB0eXBlYCB0byBrZWVwIGJhY2t3YXJkIGNvbXBhdGliaWxpdHlcbiAgICAgIG1vZGU6IHRoaXMudHlwZSxcbiAgICAgIHBlcm1pc3Npb25zOiB0aGlzLnBlcm1pc3Npb25zLFxuICAgICAgdWlkOiB0aGlzLnVpZCxcbiAgICAgIGdpZDogdGhpcy5naWRcbiAgICB9O1xuICB9XG5cbiAgLy8gUmV0dXJuIGNvbXBsZXRlIFBPU0lYIGBtb2RlYCBmb3Igbm9kZSB0eXBlICsgcGVybWlzc2lvbnMuIFNlZTpcbiAgLy8gaHR0cDovL21hbjcub3JnL2xpbnV4L21hbi1wYWdlcy9tYW4yL2NobW9kLjIuaHRtbFxuICBnZXQgbW9kZSgpIHtcbiAgICByZXR1cm4gZ2VuZXJhdGVNb2RlKHRoaXMudHlwZSwgdGhpcy5wZXJtaXNzaW9ucyk7XG4gIH1cbiAgLy8gV2hlbiBzZXR0aW5nIHRoZSBgbW9kZWAgd2UgYXNzdW1lIHBlcm1pc3Npb25zIGJpdHMgb25seSAobm90IGNoYW5naW5nIHR5cGUpXG4gIHNldCBtb2RlKHZhbHVlKSB7XG4gICAgdGhpcy5wZXJtaXNzaW9ucyA9IHZhbHVlO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShvcHRpb25zLCBjYWxsYmFjaykge1xuICAvLyBXZSBleHBlY3QgYm90aCBvcHRpb25zLmlkIGFuZCBvcHRpb25zLmRhdGEgdG8gYmUgcHJvdmlkZWQvZ2VuZXJhdGVkLlxuICBlbnN1cmVJRChvcHRpb25zLCAnaWQnLCBmdW5jdGlvbihlcnIpIHtcbiAgICBpZihlcnIpIHtcbiAgICAgIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgIH1cblxuICAgIGVuc3VyZUlEKG9wdGlvbnMsICdkYXRhJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgICBpZihlcnIpIHtcbiAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGVycik7XG4gICAgICB9XG5cbiAgICAgIGNhbGxiYWNrKG51bGwsIG5ldyBOb2RlKG9wdGlvbnMpKTtcbiAgICB9KTtcbiAgfSk7XG59O1xuIiwiY29uc3QgRXJyb3JzID0gcmVxdWlyZSgnLi9lcnJvcnMuanMnKTtcbmNvbnN0IE5vZGUgPSByZXF1aXJlKCcuL25vZGUnKTtcblxuZnVuY3Rpb24gT3BlbkZpbGVEZXNjcmlwdGlvbihwYXRoLCBpZCwgZmxhZ3MsIHBvc2l0aW9uKSB7XG4gIHRoaXMucGF0aCA9IHBhdGg7XG4gIHRoaXMuaWQgPSBpZDtcbiAgdGhpcy5mbGFncyA9IGZsYWdzO1xuICB0aGlzLnBvc2l0aW9uID0gcG9zaXRpb247XG59XG5cbi8vIFRyaWVzIHRvIGZpbmQgdGhlIG5vZGUgYXNzb2NpYXRlZCB3aXRoIGFuIG9mZCdzIGBpZGAuXG4vLyBJZiBub3QgZm91bmQsIGFuIGVycm9yIGlzIHJldHVybmVkIG9uIHRoZSBjYWxsYmFjay5cbk9wZW5GaWxlRGVzY3JpcHRpb24ucHJvdG90eXBlLmdldE5vZGUgPSBmdW5jdGlvbihjb250ZXh0LCBjYWxsYmFjaykge1xuICB2YXIgaWQgPSB0aGlzLmlkO1xuICB2YXIgcGF0aCA9IHRoaXMucGF0aDtcblxuICBmdW5jdGlvbiBjaGVja19pZl9ub2RlX2V4aXN0cyhlcnJvciwgbm9kZSkge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZXJyb3IpO1xuICAgIH1cblxuICAgIGlmKCFub2RlKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2sobmV3IEVycm9ycy5FQkFERignZmlsZSBkZXNjcmlwdG9yIHJlZmVycyB0byB1bmtub3duIG5vZGUnLCBwYXRoKSk7XG4gICAgfVxuXG4gICAgTm9kZS5jcmVhdGUobm9kZSwgY2FsbGJhY2spO1xuICB9XG5cbiAgY29udGV4dC5nZXRPYmplY3QoaWQsIGNoZWNrX2lmX25vZGVfZXhpc3RzKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gT3BlbkZpbGVEZXNjcmlwdGlvbjtcbiIsImNvbnN0IHsgRklSU1RfREVTQ1JJUFRPUiB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKTtcbmNvbnN0IG9wZW5GaWxlcyA9IHt9O1xuXG4vKipcbiAqIFN0YXJ0IGF0IEZJUlNUX0RFU0NSSVBUT1IgYW5kIGdvIHVudGlsIHdlIGZpbmRcbiAqIGFuIGVtcHR5IGZpbGUgZGVzY3JpcHRvciwgdGhlbiByZXR1cm4gaXQuXG4gKi9cbmNvbnN0IGdldEVtcHR5RGVzY3JpcHRvciA9ICgpID0+IHtcbiAgbGV0IGZkID0gRklSU1RfREVTQ1JJUFRPUjtcblxuICB3aGlsZShnZXRPcGVuRmlsZURlc2NyaXB0aW9uKGZkKSkge1xuICAgIGZkKys7XG4gIH1cblxuICByZXR1cm4gZmQ7XG59O1xuXG4vKipcbiAqIExvb2sgdXAgdGhlIG9wZW4gZmlsZSBkZXNjcmlwdGlvbiBvYmplY3QgZm9yIGEgZ2l2ZW5cbiAqIGZpbGUgZGVzY3JpcHRvci5cbiAqL1xuY29uc3QgZ2V0T3BlbkZpbGVEZXNjcmlwdGlvbiA9IG9mZCA9PiBvcGVuRmlsZXNbb2ZkXTtcblxuLyoqXG4gKiBBbGxvY2F0ZSBhIG5ldyBmaWxlIGRlc2NyaXB0b3IgZm9yIHRoZSBnaXZlblxuICogb3BlbiBmaWxlIGRlc2NyaXB0aW9uLiBcbiAqL1xuY29uc3QgYWxsb2NEZXNjcmlwdG9yID0gb3BlbkZpbGVEZXNjcmlwdGlvbiA9PiB7XG4gIGNvbnN0IG9mZCA9IGdldEVtcHR5RGVzY3JpcHRvcigpO1xuICBvcGVuRmlsZXNbb2ZkXSA9IG9wZW5GaWxlRGVzY3JpcHRpb247XG4gIHJldHVybiBvZmQ7XG59O1xuXG4vKipcbiAqIFJlbGVhc2UgdGhlIGdpdmVuIGV4aXN0aW5nIGZpbGUgZGVzY3JpcHRvciBjcmVhdGVkXG4gKiB3aXRoIGFsbG9jRGVzY3JpcHRvcigpLiBcbiAqL1xuY29uc3QgcmVsZWFzZURlc2NyaXB0b3IgPSBvZmQgPT4gZGVsZXRlIG9wZW5GaWxlc1tvZmRdO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWxsb2NEZXNjcmlwdG9yLFxuICByZWxlYXNlRGVzY3JpcHRvcixcbiAgZ2V0T3BlbkZpbGVEZXNjcmlwdGlvblxufTtcbiIsIi8qKlxuICogUGF0Y2ggcHJvY2VzcyB0byBhZGQgcHJvY2Vzcy5jd2QoKSwgYWx3YXlzIGdpdmluZyB0aGUgcm9vdCBkaXIuXG4gKiBOT1RFOiB0aGlzIGxpbmUgbmVlZHMgdG8gaGFwcGVuICpiZWZvcmUqIHdlIHJlcXVpcmUgaW4gYHBhdGhgLlxuICovXG5wcm9jZXNzLmN3ZCA9ICgpID0+ICcvJztcblxuLyoqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYnJvd3NlcmlmeS9wYXRoLWJyb3dzZXJpZnkgdmlhIFBhcmNlbC5cbiAqIFdlIHVzZSBpcyBhcyBhIGJhc2UgZm9yIG91ciBvd24gRmlsZXIuUGF0aCwgYW5kIHBhdGNoL2FkZFxuICogYSBmZXcgdGhpbmdzIHdlIG5lZWQgZm9yIHRoZSBicm93c2VyIGVudmlyb25tZW50LlxuICovXG5jb25zdCBub2RlUGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbmNvbnN0IGZpbGVyUGF0aCA9IE9iamVjdC5hc3NpZ24oe30sIG5vZGVQYXRoKTtcblxuLyoqXG4gKiBQYXRjaCBwYXRoLmJhc2VuYW1lKCkgdG8gcmV0dXJuIC8gdnMuICcnXG4gKi9cbmZpbGVyUGF0aC5iYXNlbmFtZSA9IChwYXRoLCBleHQpID0+IHtcbiAgY29uc3QgYmFzZW5hbWUgPSBub2RlUGF0aC5iYXNlbmFtZShwYXRoLCBleHQpO1xuICByZXR1cm4gYmFzZW5hbWUgPT09ICcnID8gJy8nIDogYmFzZW5hbWU7XG59O1xuXG4vKipcbiAqIFBhdGNoIHBhdGgubm9ybWFsaXplKCkgdG8gbm90IGFkZCBhIHRyYWlsaW5nIC9cbiAqL1xuZmlsZXJQYXRoLm5vcm1hbGl6ZSA9IChwYXRoKSA9PiB7XG4gIHBhdGggPSBub2RlUGF0aC5ub3JtYWxpemUocGF0aCk7XG4gIHJldHVybiBwYXRoID09PSAnLycgPyBwYXRoIDogZmlsZXJQYXRoLnJlbW92ZVRyYWlsaW5nKHBhdGgpO1xufTtcblxuLyoqXG4gKiBBZGQgbmV3IHV0aWxpdHkgbWV0aG9kIGlzTnVsbCgpIHRvIHBhdGg6IGNoZWNrIGZvciBudWxsIHBhdGhzLlxuICovXG5maWxlclBhdGguaXNOdWxsID0gcGF0aCA9PiAoJycgKyBwYXRoKS5pbmRleE9mKCdcXHUwMDAwJykgIT09IC0xO1xuXG4vKipcbiAqIEFkZCBuZXcgdXRpbGl0eSBtZXRob2QgYWRkVHJhaWxpbmcoKSB0byBhZGQgdHJhaWxpbmcgLyB3aXRob3V0IGRvdWJsaW5nIHRvIC8vLlxuICovXG5maWxlclBhdGguYWRkVHJhaWxpbmcgPSBwYXRoID0+IHBhdGgucmVwbGFjZSgvXFwvKiQvLCAnLycpO1xuXG4vKipcbiAqIEFkZCBuZXcgdXRpbGl0eSBtZXRob2QgcmVtb3ZlVHJhaWxpbmcoKSB0byByZW1vdmUgdHJhaWxpbmcgLywgZGVhbGluZyB3aXRoIG11bHRpcGxlXG4gKi9cbmZpbGVyUGF0aC5yZW1vdmVUcmFpbGluZyA9IHBhdGggPT4ge1xuICBwYXRoID0gcGF0aC5yZXBsYWNlKC9cXC8qJC8sICcnKTtcbiAgcmV0dXJuIHBhdGggPT09ICcnID8gJy8nIDogcGF0aDtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZmlsZXJQYXRoO1xuIiwiY29uc3QgSW5kZXhlZERCID0gcmVxdWlyZSgnLi9pbmRleGVkZGIuanMnKTtcbmNvbnN0IE1lbW9yeSA9IHJlcXVpcmUoJy4vbWVtb3J5LmpzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJbmRleGVkREI6IEluZGV4ZWREQixcbiAgRGVmYXVsdDogSW5kZXhlZERCLFxuICBNZW1vcnk6IE1lbW9yeVxufTtcbiIsInZhciBGSUxFX1NZU1RFTV9OQU1FID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzLmpzJykuRklMRV9TWVNURU1fTkFNRTtcbnZhciBGSUxFX1NUT1JFX05BTUUgPSByZXF1aXJlKCcuLi9jb25zdGFudHMuanMnKS5GSUxFX1NUT1JFX05BTUU7XG52YXIgSURCX1JXID0gcmVxdWlyZSgnLi4vY29uc3RhbnRzLmpzJykuSURCX1JXO1xudmFyIElEQl9STyA9IHJlcXVpcmUoJy4uL2NvbnN0YW50cy5qcycpLklEQl9STztcblxuZnVuY3Rpb24gSW5kZXhlZERCQ29udGV4dChkYiwgbW9kZSkge1xuICB0aGlzLmRiID0gZGI7XG4gIHRoaXMubW9kZSA9IG1vZGU7XG59XG5cbkluZGV4ZWREQkNvbnRleHQucHJvdG90eXBlLl9nZXRPYmplY3RTdG9yZSA9IGZ1bmN0aW9uKCkge1xuICBpZih0aGlzLm9iamVjdFN0b3JlKSB7XG4gICAgcmV0dXJuIHRoaXMub2JqZWN0U3RvcmU7XG4gIH1cblxuICB2YXIgdHJhbnNhY3Rpb24gPSB0aGlzLmRiLnRyYW5zYWN0aW9uKEZJTEVfU1RPUkVfTkFNRSwgdGhpcy5tb2RlKTtcbiAgdGhpcy5vYmplY3RTdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKEZJTEVfU1RPUkVfTkFNRSk7XG4gIHJldHVybiB0aGlzLm9iamVjdFN0b3JlO1xufTtcblxuSW5kZXhlZERCQ29udGV4dC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbihjYWxsYmFjaykge1xuICB0cnkge1xuICAgIHZhciBvYmplY3RTdG9yZSA9IHRoaXMuX2dldE9iamVjdFN0b3JlKCk7XG4gICAgdmFyIHJlcXVlc3QgPSBvYmplY3RTdG9yZS5jbGVhcigpO1xuICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24oKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH07XG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjYWxsYmFjayhldmVudC5lcnJvcik7XG4gICAgfTtcbiAgfSBjYXRjaChlcnIpIHtcbiAgICBjYWxsYmFjayhlcnIpO1xuICB9XG59O1xuXG5JbmRleGVkREJDb250ZXh0LnByb3RvdHlwZS5fZ2V0ID0gZnVuY3Rpb24oa2V5LCBjYWxsYmFjaykge1xuICB0cnkge1xuICAgIHZhciBvYmplY3RTdG9yZSA9IHRoaXMuX2dldE9iamVjdFN0b3JlKCk7XG4gICAgdmFyIHJlcXVlc3QgPSBvYmplY3RTdG9yZS5nZXQoa2V5KTtcbiAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uIG9uc3VjY2VzcyhldmVudCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7XG4gICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xuICAgIH07XG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjYWxsYmFjayhldmVudC5lcnJvcik7XG4gICAgfTtcbiAgfSBjYXRjaChlcnIpIHtcbiAgICBjYWxsYmFjayhlcnIpO1xuICB9XG59O1xuSW5kZXhlZERCQ29udGV4dC5wcm90b3R5cGUuZ2V0T2JqZWN0ID0gZnVuY3Rpb24oa2V5LCBjYWxsYmFjaykge1xuICB0aGlzLl9nZXQoa2V5LCBjYWxsYmFjayk7XG59O1xuSW5kZXhlZERCQ29udGV4dC5wcm90b3R5cGUuZ2V0QnVmZmVyID0gZnVuY3Rpb24oa2V5LCBjYWxsYmFjaykge1xuICB0aGlzLl9nZXQoa2V5LCBmdW5jdGlvbihlcnIsIGFycmF5QnVmZmVyKSB7XG4gICAgaWYoZXJyKSB7XG4gICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICB9XG4gICAgY2FsbGJhY2sobnVsbCwgQnVmZmVyLmZyb20oYXJyYXlCdWZmZXIpKTtcbiAgfSk7XG59O1xuXG5JbmRleGVkREJDb250ZXh0LnByb3RvdHlwZS5fcHV0ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSwgY2FsbGJhY2spIHtcbiAgdHJ5IHtcbiAgICB2YXIgb2JqZWN0U3RvcmUgPSB0aGlzLl9nZXRPYmplY3RTdG9yZSgpO1xuICAgIHZhciByZXF1ZXN0ID0gb2JqZWN0U3RvcmUucHV0KHZhbHVlLCBrZXkpO1xuICAgIHJlcXVlc3Qub25zdWNjZXNzID0gZnVuY3Rpb24gb25zdWNjZXNzKGV2ZW50KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcbiAgICAgIGNhbGxiYWNrKG51bGwsIHJlc3VsdCk7XG4gICAgfTtcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihldmVudCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGNhbGxiYWNrKGV2ZW50LmVycm9yKTtcbiAgICB9O1xuICB9IGNhdGNoKGVycikge1xuICAgIGNhbGxiYWNrKGVycik7XG4gIH1cbn07XG5JbmRleGVkREJDb250ZXh0LnByb3RvdHlwZS5wdXRPYmplY3QgPSBmdW5jdGlvbihrZXksIHZhbHVlLCBjYWxsYmFjaykge1xuICB0aGlzLl9wdXQoa2V5LCB2YWx1ZSwgY2FsbGJhY2spO1xufTtcbkluZGV4ZWREQkNvbnRleHQucHJvdG90eXBlLnB1dEJ1ZmZlciA9IGZ1bmN0aW9uKGtleSwgdWludDhCYWNrZWRCdWZmZXIsIGNhbGxiYWNrKSB7XG4gIHZhciBidWYgPSB1aW50OEJhY2tlZEJ1ZmZlci5idWZmZXI7XG4gIHRoaXMuX3B1dChrZXksIGJ1ZiwgY2FsbGJhY2spO1xufTtcblxuSW5kZXhlZERCQ29udGV4dC5wcm90b3R5cGUuZGVsZXRlID0gZnVuY3Rpb24oa2V5LCBjYWxsYmFjaykge1xuICB0cnkge1xuICAgIHZhciBvYmplY3RTdG9yZSA9IHRoaXMuX2dldE9iamVjdFN0b3JlKCk7XG4gICAgdmFyIHJlcXVlc3QgPSBvYmplY3RTdG9yZS5kZWxldGUoa2V5KTtcbiAgICByZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uIG9uc3VjY2VzcyhldmVudCkge1xuICAgICAgdmFyIHJlc3VsdCA9IGV2ZW50LnRhcmdldC5yZXN1bHQ7XG4gICAgICBjYWxsYmFjayhudWxsLCByZXN1bHQpO1xuICAgIH07XG4gICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24oZXZlbnQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBjYWxsYmFjayhldmVudC5lcnJvcik7XG4gICAgfTtcbiAgfSBjYXRjaChlcnIpIHtcbiAgICBjYWxsYmFjayhlcnIpO1xuICB9XG59O1xuXG5cbmZ1bmN0aW9uIEluZGV4ZWREQihuYW1lKSB7XG4gIHRoaXMubmFtZSA9IG5hbWUgfHwgRklMRV9TWVNURU1fTkFNRTtcbiAgdGhpcy5kYiA9IG51bGw7XG59XG5JbmRleGVkREIuaXNTdXBwb3J0ZWQgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGluZGV4ZWREQiA9IGdsb2JhbC5pbmRleGVkREIgICAgICAgfHxcbiAgICAgICAgICAgICAgICAgIGdsb2JhbC5tb3pJbmRleGVkREIgICAgfHxcbiAgICAgICAgICAgICAgICAgIGdsb2JhbC53ZWJraXRJbmRleGVkREIgfHxcbiAgICAgICAgICAgICAgICAgIGdsb2JhbC5tc0luZGV4ZWREQjtcbiAgcmV0dXJuICEhaW5kZXhlZERCO1xufTtcblxuSW5kZXhlZERCLnByb3RvdHlwZS5vcGVuID0gZnVuY3Rpb24oY2FsbGJhY2spIHtcbiAgdmFyIHRoYXQgPSB0aGlzO1xuXG4gIC8vIEJhaWwgaWYgd2UgYWxyZWFkeSBoYXZlIGEgZGIgb3BlblxuICBpZih0aGF0LmRiKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gIH1cblxuICB0cnkge1xuICAgIHZhciBpbmRleGVkREIgPSBnbG9iYWwuaW5kZXhlZERCICAgICAgIHx8XG4gICAgICAgICAgICAgICAgICAgIGdsb2JhbC5tb3pJbmRleGVkREIgICAgfHxcbiAgICAgICAgICAgICAgICAgICAgZ2xvYmFsLndlYmtpdEluZGV4ZWREQiB8fFxuICAgICAgICAgICAgICAgICAgICBnbG9iYWwubXNJbmRleGVkREI7XG5cbiAgICAvLyBOT1RFOiB3ZSdyZSBub3QgdXNpbmcgdmVyc2lvbmVkIGRhdGFiYXNlcy5cbiAgICB2YXIgb3BlblJlcXVlc3QgPSBpbmRleGVkREIub3Blbih0aGF0Lm5hbWUpO1xuXG4gICAgLy8gSWYgdGhlIGRiIGRvZXNuJ3QgZXhpc3QsIHdlJ2xsIGNyZWF0ZSBpdFxuICAgIG9wZW5SZXF1ZXN0Lm9udXBncmFkZW5lZWRlZCA9IGZ1bmN0aW9uIG9udXBncmFkZW5lZWRlZChldmVudCkge1xuICAgICAgdmFyIGRiID0gZXZlbnQudGFyZ2V0LnJlc3VsdDtcblxuICAgICAgaWYoZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhGSUxFX1NUT1JFX05BTUUpKSB7XG4gICAgICAgIGRiLmRlbGV0ZU9iamVjdFN0b3JlKEZJTEVfU1RPUkVfTkFNRSk7XG4gICAgICB9XG4gICAgICBkYi5jcmVhdGVPYmplY3RTdG9yZShGSUxFX1NUT1JFX05BTUUpO1xuICAgIH07XG5cbiAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiBvbnN1Y2Nlc3MoZXZlbnQpIHtcbiAgICAgIHRoYXQuZGIgPSBldmVudC50YXJnZXQucmVzdWx0O1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuICAgIG9wZW5SZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBvbmVycm9yKGV2ZW50KSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgY2FsbGJhY2soZXZlbnQuZXJyb3IpO1xuICAgIH07XG4gIH0gY2F0Y2goZXJyKSB7XG4gICAgY2FsbGJhY2soZXJyKTtcbiAgfVxufTtcblxuSW5kZXhlZERCLnByb3RvdHlwZS5nZXRSZWFkT25seUNvbnRleHQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBJbmRleGVkREJDb250ZXh0KHRoaXMuZGIsIElEQl9STyk7XG59O1xuSW5kZXhlZERCLnByb3RvdHlwZS5nZXRSZWFkV3JpdGVDb250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgSW5kZXhlZERCQ29udGV4dCh0aGlzLmRiLCBJREJfUlcpO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBJbmRleGVkREI7XG4iLCJ2YXIgRklMRV9TWVNURU1fTkFNRSA9IHJlcXVpcmUoJy4uL2NvbnN0YW50cy5qcycpLkZJTEVfU1lTVEVNX05BTUU7XG4vLyBOT1RFOiBwcmVmZXIgc2V0SW1tZWRpYXRlIHRvIG5leHRUaWNrIGZvciBwcm9wZXIgcmVjdXJzaW9uIHlpZWxkaW5nLlxuLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcy1wbGF0Zm9ybS9maWxlci9wdWxsLzI0XG52YXIgYXN5bmNDYWxsYmFjayA9IHJlcXVpcmUoJy4uLy4uL2xpYi9hc3luYy5qcycpLnNldEltbWVkaWF0ZTtcblxuLyoqXG4gKiBNYWtlIHNoYXJlZCBpbi1tZW1vcnkgREJzIHBvc3NpYmxlIHdoZW4gdXNpbmcgdGhlIHNhbWUgbmFtZS5cbiAqL1xudmFyIGNyZWF0ZURCID0gKGZ1bmN0aW9uKCkge1xuICB2YXIgcG9vbCA9IHt9O1xuICByZXR1cm4gZnVuY3Rpb24gZ2V0T3JDcmVhdGUobmFtZSkge1xuICAgIGlmKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocG9vbCwgbmFtZSkpIHtcbiAgICAgIHBvb2xbbmFtZV0gPSB7fTtcbiAgICB9XG4gICAgcmV0dXJuIHBvb2xbbmFtZV07XG4gIH07XG59KCkpO1xuXG5mdW5jdGlvbiBNZW1vcnlDb250ZXh0KGRiLCByZWFkT25seSkge1xuICB0aGlzLnJlYWRPbmx5ID0gcmVhZE9ubHk7XG4gIHRoaXMub2JqZWN0U3RvcmUgPSBkYjtcbn1cblxuTWVtb3J5Q29udGV4dC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbihjYWxsYmFjaykge1xuICBpZih0aGlzLnJlYWRPbmx5KSB7XG4gICAgYXN5bmNDYWxsYmFjayhmdW5jdGlvbigpIHtcbiAgICAgIGNhbGxiYWNrKCdbTWVtb3J5Q29udGV4dF0gRXJyb3I6IHdyaXRlIG9wZXJhdGlvbiBvbiByZWFkIG9ubHkgY29udGV4dCcpO1xuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgb2JqZWN0U3RvcmUgPSB0aGlzLm9iamVjdFN0b3JlO1xuICBPYmplY3Qua2V5cyhvYmplY3RTdG9yZSkuZm9yRWFjaChmdW5jdGlvbihrZXkpe1xuICAgIGRlbGV0ZSBvYmplY3RTdG9yZVtrZXldO1xuICB9KTtcbiAgYXN5bmNDYWxsYmFjayhjYWxsYmFjayk7XG59O1xuXG4vLyBNZW1vcnkgY29udGV4dCBkb2Vzbid0IGNhcmUgYWJvdXQgZGlmZmVyZW5jZXMgYmV0d2VlbiBPYmplY3QgYW5kIEJ1ZmZlclxuTWVtb3J5Q29udGV4dC5wcm90b3R5cGUuZ2V0T2JqZWN0ID1cbk1lbW9yeUNvbnRleHQucHJvdG90eXBlLmdldEJ1ZmZlciA9XG5mdW5jdGlvbihrZXksIGNhbGxiYWNrKSB7XG4gIHZhciB0aGF0ID0gdGhpcztcbiAgYXN5bmNDYWxsYmFjayhmdW5jdGlvbigpIHtcbiAgICBjYWxsYmFjayhudWxsLCB0aGF0Lm9iamVjdFN0b3JlW2tleV0pO1xuICB9KTtcbn07XG5NZW1vcnlDb250ZXh0LnByb3RvdHlwZS5wdXRPYmplY3QgPVxuTWVtb3J5Q29udGV4dC5wcm90b3R5cGUucHV0QnVmZmVyID1cbmZ1bmN0aW9uKGtleSwgdmFsdWUsIGNhbGxiYWNrKSB7XG4gIGlmKHRoaXMucmVhZE9ubHkpIHtcbiAgICBhc3luY0NhbGxiYWNrKGZ1bmN0aW9uKCkge1xuICAgICAgY2FsbGJhY2soJ1tNZW1vcnlDb250ZXh0XSBFcnJvcjogd3JpdGUgb3BlcmF0aW9uIG9uIHJlYWQgb25seSBjb250ZXh0Jyk7XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMub2JqZWN0U3RvcmVba2V5XSA9IHZhbHVlO1xuICBhc3luY0NhbGxiYWNrKGNhbGxiYWNrKTtcbn07XG5cbk1lbW9yeUNvbnRleHQucHJvdG90eXBlLmRlbGV0ZSA9IGZ1bmN0aW9uKGtleSwgY2FsbGJhY2spIHtcbiAgaWYodGhpcy5yZWFkT25seSkge1xuICAgIGFzeW5jQ2FsbGJhY2soZnVuY3Rpb24oKSB7XG4gICAgICBjYWxsYmFjaygnW01lbW9yeUNvbnRleHRdIEVycm9yOiB3cml0ZSBvcGVyYXRpb24gb24gcmVhZCBvbmx5IGNvbnRleHQnKTtcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cbiAgZGVsZXRlIHRoaXMub2JqZWN0U3RvcmVba2V5XTtcbiAgYXN5bmNDYWxsYmFjayhjYWxsYmFjayk7XG59O1xuXG5cbmZ1bmN0aW9uIE1lbW9yeShuYW1lKSB7XG4gIHRoaXMubmFtZSA9IG5hbWUgfHwgRklMRV9TWVNURU1fTkFNRTtcbn1cbk1lbW9yeS5pc1N1cHBvcnRlZCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbk1lbW9yeS5wcm90b3R5cGUub3BlbiA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHRoaXMuZGIgPSBjcmVhdGVEQih0aGlzLm5hbWUpO1xuICBhc3luY0NhbGxiYWNrKGNhbGxiYWNrKTtcbn07XG5NZW1vcnkucHJvdG90eXBlLmdldFJlYWRPbmx5Q29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IE1lbW9yeUNvbnRleHQodGhpcy5kYiwgdHJ1ZSk7XG59O1xuTWVtb3J5LnByb3RvdHlwZS5nZXRSZWFkV3JpdGVDb250ZXh0ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgTWVtb3J5Q29udGV4dCh0aGlzLmRiLCBmYWxzZSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IE1lbW9yeTtcbiIsImZ1bmN0aW9uIGdlbmVyYXRlUmFuZG9tKHRlbXBsYXRlKSB7XG4gIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uKGMpIHtcbiAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkqMTZ8MCwgdiA9IGMgPT09ICd4JyA/IHIgOiAociYweDN8MHg4KTtcbiAgICByZXR1cm4gdi50b1N0cmluZygxNik7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBndWlkKCkge1xuICByZXR1cm4gZ2VuZXJhdGVSYW5kb20oJ3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCcpLnRvVXBwZXJDYXNlKCk7XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBzdHJpbmcgb2YgbiByYW5kb20gY2hhcmFjdGVycy4gIERlZmF1bHRzIHRvIG49Ni5cbiAqLyBcbmZ1bmN0aW9uIHJhbmRvbUNoYXJzKG4pIHtcbiAgbiA9IG4gfHwgNjtcbiAgdmFyIHRlbXBsYXRlID0gJ3gnLnJlcGVhdChuKTtcbiAgcmV0dXJuIGdlbmVyYXRlUmFuZG9tKHRlbXBsYXRlKTtcbn1cblxuZnVuY3Rpb24gbm9wKCkge31cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGd1aWQ6IGd1aWQsXG4gIG5vcDogbm9wLFxuICByYW5kb21DaGFyczogcmFuZG9tQ2hhcnNcbn07XG4iLCIndXNlIHN0cmljdCc7IFxuY29uc3QgZGVmYXVsdHMgPSByZXF1aXJlKCcuLi9jb25zdGFudHMuanMnKS5FTlZJUk9OTUVOVDtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBFbnZpcm9ubWVudChlbnYpIHtcbiAgZW52ID0gZW52IHx8IHt9O1xuICBlbnYuVE1QID0gZW52LlRNUCB8fCBkZWZhdWx0cy5UTVA7XG4gIGVudi5QQVRIID0gZW52LlBBVEggfHwgZGVmYXVsdHMuUEFUSDtcblxuICB0aGlzLmdldCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgICByZXR1cm4gZW52W25hbWVdO1xuICB9O1xuXG4gIHRoaXMuc2V0ID0gZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICBlbnZbbmFtZV0gPSB2YWx1ZTtcbiAgfTtcbn07XG4iLCJ2YXIge3Byb21pc2lmeX0gPSByZXF1aXJlKCdlczYtcHJvbWlzaWZ5Jyk7XG52YXIgUGF0aCA9IHJlcXVpcmUoJy4uL3BhdGguanMnKTtcbnZhciBFcnJvcnMgPSByZXF1aXJlKCcuLi9lcnJvcnMuanMnKTtcbnZhciBFbnZpcm9ubWVudCA9IHJlcXVpcmUoJy4vZW52aXJvbm1lbnQuanMnKTtcbnZhciBhc3luYyA9IHJlcXVpcmUoJy4uLy4uL2xpYi9hc3luYy5qcycpO1xudmFyIG1pbmltYXRjaCA9IHJlcXVpcmUoJ21pbmltYXRjaCcpO1xuXG5mdW5jdGlvbiBTaGVsbChmcywgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICB2YXIgZW52ID0gbmV3IEVudmlyb25tZW50KG9wdGlvbnMuZW52KTtcbiAgdmFyIGN3ZCA9ICcvJztcblxuICAvKipcbiAgICogVGhlIGJvdW5kIEZpbGVTeXN0ZW0gKGNhbm5vdCBiZSBjaGFuZ2VkKVxuICAgKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdmcycsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gZnM7IH0sXG4gICAgZW51bWVyYWJsZTogdHJ1ZVxuICB9KTtcblxuICAvKipcbiAgICogVGhlIHNoZWxsJ3MgZW52aXJvbm1lbnQgKGUuZy4sIGZvciB0aGluZ3MgbGlrZVxuICAgKiBwYXRoLCB0bXAsIGFuZCBvdGhlciBlbnYgdmFycykuIFVzZSBlbnYuZ2V0KClcbiAgICogYW5kIGVudi5zZXQoKSB0byB3b3JrIHdpdGggdmFyaWFibGVzLlxuICAgKi9cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsICdlbnYnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIGVudjsgfSxcbiAgICBlbnVtZXJhYmxlOiB0cnVlXG4gIH0pO1xuXG4gIC8qKlxuICAgKiBDaGFuZ2UgdGhlIGN1cnJlbnQgd29ya2luZyBkaXJlY3RvcnkuIFdlXG4gICAqIGluY2x1ZGUgYGNkYCBvbiB0aGUgYHRoaXNgIHZzLiBwcm90byBzbyB0aGF0XG4gICAqIHdlIGNhbiBhY2Nlc3MgY3dkIHdpdGhvdXQgZXhwb3NpbmcgaXQgZXh0ZXJuYWxseS5cbiAgICovXG4gIHRoaXMuY2QgPSBmdW5jdGlvbihwYXRoLCBjYWxsYmFjaykge1xuICAgIHBhdGggPSBQYXRoLnJlc29sdmUoY3dkLCBwYXRoKTtcbiAgICAvLyBNYWtlIHN1cmUgdGhlIHBhdGggYWN0dWFsbHkgZXhpc3RzLCBhbmQgaXMgYSBkaXJcbiAgICBmcy5zdGF0KHBhdGgsIGZ1bmN0aW9uKGVyciwgc3RhdHMpIHtcbiAgICAgIGlmKGVycikge1xuICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVOT1RESVIobnVsbCwgcGF0aCkpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZihzdGF0cy50eXBlID09PSAnRElSRUNUT1JZJykge1xuICAgICAgICBjd2QgPSBwYXRoO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FTk9URElSKG51bGwsIHBhdGgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICAvKipcbiAgICogR2V0IHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5IChjaGFuZ2VkIHdpdGggYGNkKClgKVxuICAgKi9cbiAgdGhpcy5wd2QgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gY3dkO1xuICB9O1xuXG4gIHRoaXMucHJvbWlzZXMgPSB7fTtcbiAgLyoqXG4gICogUHVibGljIEFQSSBmb3IgU2hlbGwgY29udmVydGVkIHRvIFByb21pc2UgYmFzZWRcbiAgKi9cbiAgW1xuICAgICdjZCcsXG4gICAgJ2V4ZWMnLFxuICAgICd0b3VjaCcsXG4gICAgJ2NhdCcsXG4gICAgJ2xzJyxcbiAgICAncm0nLFxuICAgICd0ZW1wRGlyJyxcbiAgICAnbWtkaXJwJyxcbiAgICAnZmluZCdcbiAgXS5mb3JFYWNoKChtZXRob2ROYW1lKT0+e1xuICAgIHRoaXMucHJvbWlzZXNbbWV0aG9kTmFtZV0gPSBwcm9taXNpZnkodGhpc1ttZXRob2ROYW1lXS5iaW5kKHRoaXMpKTtcbiAgfSk7XG59XG5cbi8qKlxuICogRXhlY3V0ZSB0aGUgLmpzIGNvbW1hbmQgbG9jYXRlZCBhdCBgcGF0aGAuIFN1Y2ggY29tbWFuZHNcbiAqIHNob3VsZCBhc3N1bWUgdGhlIGV4aXN0ZW5jZSBvZiAzIGFyZ3VtZW50cywgd2hpY2ggd2lsbCBiZVxuICogZGVmaW5lZCBhdCBydW50aW1lOlxuICpcbiAqICAgKiBmcyAtIHRoZSBjdXJyZW50IHNoZWxsJ3MgYm91bmQgZmlsZXN5c3RlbSBvYmplY3RcbiAqICAgKiBhcmdzIC0gYSBsaXN0IG9mIGFyZ3VtZW50cyBmb3IgdGhlIGNvbW1hbmQsIG9yIGFuIGVtcHR5IGxpc3QgaWYgbm9uZVxuICogICAqIGNhbGxiYWNrIC0gYSBjYWxsYmFjayBmdW5jdGlvbihlcnJvciwgcmVzdWx0KSB0byBjYWxsIHdoZW4gZG9uZS5cbiAqXG4gKiBUaGUgLmpzIGNvbW1hbmQncyBjb250ZW50cyBzaG91bGQgYmUgdGhlIGJvZHkgb2YgYSBmdW5jdGlvblxuICogdGhhdCBsb29rcyBsaWtlIHRoaXM6XG4gKlxuICogZnVuY3Rpb24oZnMsIGFyZ3MsIGNhbGxiYWNrKSB7XG4gKiAgIC8vIC5qcyBjb2RlIGhlcmVcbiAqIH1cbiAqL1xuU2hlbGwucHJvdG90eXBlLmV4ZWMgPSBmdW5jdGlvbihwYXRoLCBhcmdzLCBjYWxsYmFjaykge1xuICAvKiBqc2hpbnQgZXZpbDp0cnVlICovXG4gIHZhciBzaCA9IHRoaXM7XG4gIHZhciBmcyA9IHNoLmZzO1xuICBpZih0eXBlb2YgYXJncyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrID0gYXJncztcbiAgICBhcmdzID0gW107XG4gIH1cbiAgYXJncyA9IGFyZ3MgfHwgW107XG4gIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKXt9O1xuICBwYXRoID0gUGF0aC5yZXNvbHZlKHNoLnB3ZCgpLCBwYXRoKTtcblxuICBmcy5yZWFkRmlsZShwYXRoLCAndXRmOCcsIGZ1bmN0aW9uKGVycm9yLCBkYXRhKSB7XG4gICAgaWYoZXJyb3IpIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHZhciBjbWQgPSBuZXcgRnVuY3Rpb24oJ2ZzJywgJ2FyZ3MnLCAnY2FsbGJhY2snLCBkYXRhKTtcbiAgICAgIGNtZChmcywgYXJncywgY2FsbGJhY2spO1xuICAgIH0gY2F0Y2goZSkge1xuICAgICAgY2FsbGJhY2soZSk7XG4gICAgfVxuICB9KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlIGEgZmlsZSBpZiBpdCBkb2VzIG5vdCBleGlzdCwgb3IgdXBkYXRlIGFjY2VzcyBhbmRcbiAqIG1vZGlmaWVkIHRpbWVzIGlmIGl0IGRvZXMuIFZhbGlkIG9wdGlvbnMgaW5jbHVkZTpcbiAqXG4gKiAgKiB1cGRhdGVPbmx5IC0gd2hldGhlciB0byBjcmVhdGUgdGhlIGZpbGUgaWYgbWlzc2luZyAoZGVmYXVsdHMgdG8gZmFsc2UpXG4gKiAgKiBkYXRlIC0gdXNlIHRoZSBwcm92aWRlZCBEYXRlIHZhbHVlIGluc3RlYWQgb2YgY3VycmVudCBkYXRlL3RpbWVcbiAqL1xuU2hlbGwucHJvdG90eXBlLnRvdWNoID0gZnVuY3Rpb24ocGF0aCwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgdmFyIHNoID0gdGhpcztcbiAgdmFyIGZzID0gc2guZnM7XG4gIGlmKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpe307XG4gIHBhdGggPSBQYXRoLnJlc29sdmUoc2gucHdkKCksIHBhdGgpO1xuXG4gIGZ1bmN0aW9uIGNyZWF0ZUZpbGUocGF0aCkge1xuICAgIGZzLndyaXRlRmlsZShwYXRoLCAnJywgY2FsbGJhY2spO1xuICB9XG5cbiAgZnVuY3Rpb24gdXBkYXRlVGltZXMocGF0aCkge1xuICAgIHZhciBub3cgPSBEYXRlLm5vdygpO1xuICAgIHZhciBhdGltZSA9IG9wdGlvbnMuZGF0ZSB8fCBub3c7XG4gICAgdmFyIG10aW1lID0gb3B0aW9ucy5kYXRlIHx8IG5vdztcblxuICAgIGZzLnV0aW1lcyhwYXRoLCBhdGltZSwgbXRpbWUsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIGZzLnN0YXQocGF0aCwgZnVuY3Rpb24oZXJyb3IpIHtcbiAgICBpZihlcnJvcikge1xuICAgICAgaWYob3B0aW9ucy51cGRhdGVPbmx5ID09PSB0cnVlKSB7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjcmVhdGVGaWxlKHBhdGgpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB1cGRhdGVUaW1lcyhwYXRoKTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBDb25jYXRlbmF0ZSBtdWx0aXBsZSBmaWxlcyBpbnRvIGEgc2luZ2xlIFN0cmluZywgd2l0aCBlYWNoXG4gKiBmaWxlIHNlcGFyYXRlZCBieSBhIG5ld2xpbmUuIFRoZSBgZmlsZXNgIGFyZ3VtZW50IHNob3VsZFxuICogYmUgYSBTdHJpbmcgKHBhdGggdG8gc2luZ2xlIGZpbGUpIG9yIGFuIEFycmF5IG9mIFN0cmluZ3NcbiAqIChtdWx0aXBsZSBmaWxlIHBhdGhzKS5cbiAqL1xuU2hlbGwucHJvdG90eXBlLmNhdCA9IGZ1bmN0aW9uKGZpbGVzLCBjYWxsYmFjaykge1xuICB2YXIgc2ggPSB0aGlzO1xuICB2YXIgZnMgPSBzaC5mcztcbiAgdmFyIGFsbCA9ICcnO1xuICBjYWxsYmFjayA9IGNhbGxiYWNrIHx8IGZ1bmN0aW9uKCl7fTtcblxuICBpZighZmlsZXMpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnTWlzc2luZyBmaWxlcyBhcmd1bWVudCcpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmaWxlcyA9IHR5cGVvZiBmaWxlcyA9PT0gJ3N0cmluZycgPyBbIGZpbGVzIF0gOiBmaWxlcztcblxuICBmdW5jdGlvbiBhcHBlbmQoaXRlbSwgY2FsbGJhY2spIHtcbiAgICB2YXIgZmlsZW5hbWUgPSBQYXRoLnJlc29sdmUoc2gucHdkKCksIGl0ZW0pO1xuICAgIGZzLnJlYWRGaWxlKGZpbGVuYW1lLCAndXRmOCcsIGZ1bmN0aW9uKGVycm9yLCBkYXRhKSB7XG4gICAgICBpZihlcnJvcikge1xuICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGFsbCArPSBkYXRhICsgJ1xcbic7XG4gICAgICBjYWxsYmFjaygpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMuZWFjaFNlcmllcyhmaWxlcywgYXBwZW5kLCBmdW5jdGlvbihlcnJvcikge1xuICAgIGlmKGVycm9yKSB7XG4gICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrKG51bGwsIGFsbC5yZXBsYWNlKC9cXG4kLywgJycpKTtcbiAgICB9XG4gIH0pO1xufTtcblxuLyoqXG4gKiBHZXQgdGhlIGxpc3Rpbmcgb2YgYSBkaXJlY3RvcnksIHJldHVybmluZyBhbiBhcnJheSBvZlxuICogZmlsZSBlbnRyaWVzIGluIHRoZSBmb2xsb3dpbmcgZm9ybTpcbiAqXG4gKiB7XG4gKiAgIHBhdGg6IDxTdHJpbmc+IHRoZSBiYXNlbmFtZSBvZiB0aGUgZGlyZWN0b3J5IGVudHJ5XG4gKiAgIGxpbmtzOiA8TnVtYmVyPiB0aGUgbnVtYmVyIG9mIGxpbmtzIHRvIHRoZSBlbnRyeVxuICogICBzaXplOiA8TnVtYmVyPiB0aGUgc2l6ZSBpbiBieXRlcyBvZiB0aGUgZW50cnlcbiAqICAgbW9kaWZpZWQ6IDxOdW1iZXI+IHRoZSBsYXN0IG1vZGlmaWVkIGRhdGUvdGltZVxuICogICB0eXBlOiA8U3RyaW5nPiB0aGUgdHlwZSBvZiB0aGUgZW50cnlcbiAqICAgY29udGVudHM6IDxBcnJheT4gYW4gb3B0aW9uYWwgYXJyYXkgb2YgY2hpbGQgZW50cmllc1xuICogfVxuICpcbiAqIEJ5IGRlZmF1bHQgbHMoKSBnaXZlcyBhIHNoYWxsb3cgbGlzdGluZy4gSWYgeW91IHdhbnRcbiAqIHRvIGZvbGxvdyBkaXJlY3RvcmllcyBhcyB0aGV5IGFyZSBlbmNvdW50ZXJlZCwgdXNlXG4gKiB0aGUgYHJlY3Vyc2l2ZT10cnVlYCBvcHRpb24uXG4gKi9cblNoZWxsLnByb3RvdHlwZS5scyA9IGZ1bmN0aW9uKGRpciwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgdmFyIHNoID0gdGhpcztcbiAgdmFyIGZzID0gc2guZnM7XG4gIGlmKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpe307XG5cbiAgaWYoIWRpcikge1xuICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRUlOVkFMKCdNaXNzaW5nIGRpciBhcmd1bWVudCcpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmdW5jdGlvbiBsaXN0KHBhdGgsIGNhbGxiYWNrKSB7XG4gICAgdmFyIHBhdGhuYW1lID0gUGF0aC5yZXNvbHZlKHNoLnB3ZCgpLCBwYXRoKTtcbiAgICB2YXIgcmVzdWx0ID0gW107XG5cbiAgICBmcy5yZWFkZGlyKHBhdGhuYW1lLCBmdW5jdGlvbihlcnJvciwgZW50cmllcykge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGZ1bmN0aW9uIGdldERpckVudHJ5KG5hbWUsIGNhbGxiYWNrKSB7XG4gICAgICAgIG5hbWUgPSBQYXRoLmpvaW4ocGF0aG5hbWUsIG5hbWUpO1xuICAgICAgICBmcy5zdGF0KG5hbWUsIGZ1bmN0aW9uKGVycm9yLCBzdGF0cykge1xuICAgICAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBlbnRyeSA9IHN0YXRzO1xuXG4gICAgICAgICAgaWYob3B0aW9ucy5yZWN1cnNpdmUgJiYgc3RhdHMudHlwZSA9PT0gJ0RJUkVDVE9SWScpIHtcbiAgICAgICAgICAgIGxpc3QoUGF0aC5qb2luKHBhdGhuYW1lLCBlbnRyeS5uYW1lKSwgZnVuY3Rpb24oZXJyb3IsIGl0ZW1zKSB7XG4gICAgICAgICAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBlbnRyeS5jb250ZW50cyA9IGl0ZW1zO1xuICAgICAgICAgICAgICByZXN1bHQucHVzaChlbnRyeSk7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goZW50cnkpO1xuICAgICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBhc3luYy5lYWNoU2VyaWVzKGVudHJpZXMsIGdldERpckVudHJ5LCBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICBjYWxsYmFjayhlcnJvciwgcmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgbGlzdChkaXIsIGNhbGxiYWNrKTtcbn07XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgZmlsZSBvciBkaXJlY3RvcnkgYXQgYHBhdGhgLiBJZiBgcGF0aGAgaXMgYSBmaWxlXG4gKiBpdCB3aWxsIGJlIHJlbW92ZWQuIElmIGBwYXRoYCBpcyBhIGRpcmVjdG9yeSwgaXQgd2lsbCBiZVxuICogcmVtb3ZlZCBpZiBpdCBpcyBlbXB0eSwgb3RoZXJ3aXNlIHRoZSBjYWxsYmFjayB3aWxsIHJlY2VpdmVcbiAqIGFuIGVycm9yLiBJbiBvcmRlciB0byByZW1vdmUgbm9uLWVtcHR5IGRpcmVjdG9yaWVzLCB1c2UgdGhlXG4gKiBgcmVjdXJzaXZlPXRydWVgIG9wdGlvbi5cbiAqL1xuU2hlbGwucHJvdG90eXBlLnJtID0gZnVuY3Rpb24ocGF0aCwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgdmFyIHNoID0gdGhpcztcbiAgdmFyIGZzID0gc2guZnM7XG4gIGlmKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpe307XG5cbiAgaWYoIXBhdGgpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnTWlzc2luZyBwYXRoIGFyZ3VtZW50JykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlbW92ZShwYXRobmFtZSwgY2FsbGJhY2spIHtcbiAgICBwYXRobmFtZSA9IFBhdGgucmVzb2x2ZShzaC5wd2QoKSwgcGF0aG5hbWUpO1xuICAgIGZzLnN0YXQocGF0aG5hbWUsIGZ1bmN0aW9uKGVycm9yLCBzdGF0cykge1xuICAgICAgaWYoZXJyb3IpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoaXMgaXMgYSBmaWxlLCBkZWxldGUgaXQgYW5kIHdlJ3JlIGRvbmVcbiAgICAgIGlmKHN0YXRzLnR5cGUgPT09ICdGSUxFJykge1xuICAgICAgICBmcy51bmxpbmsocGF0aG5hbWUsIGNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBJZiBpdCdzIGEgZGlyLCBjaGVjayBpZiBpdCdzIGVtcHR5XG4gICAgICBmcy5yZWFkZGlyKHBhdGhuYW1lLCBmdW5jdGlvbihlcnJvciwgZW50cmllcykge1xuICAgICAgICBpZihlcnJvcikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycm9yKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBJZiBkaXIgaXMgZW1wdHksIGRlbGV0ZSBpdCBhbmQgd2UncmUgZG9uZVxuICAgICAgICBpZihlbnRyaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGZzLnJtZGlyKHBhdGhuYW1lLCBjYWxsYmFjayk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSWYgbm90LCBzZWUgaWYgd2UncmUgYWxsb3dlZCB0byBkZWxldGUgcmVjdXJzaXZlbHlcbiAgICAgICAgaWYoIW9wdGlvbnMucmVjdXJzaXZlKSB7XG4gICAgICAgICAgY2FsbGJhY2sobmV3IEVycm9ycy5FTk9URU1QVFkobnVsbCwgcGF0aG5hbWUpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZW1vdmUgZWFjaCBkaXIgZW50cnkgcmVjdXJzaXZlbHksIHRoZW4gZGVsZXRlIHRoZSBkaXIuXG4gICAgICAgIGVudHJpZXMgPSBlbnRyaWVzLm1hcChmdW5jdGlvbihmaWxlbmFtZSkge1xuICAgICAgICAgIC8vIFJvb3QgZGlyIGVudHJpZXMgYWJzb2x1dGVseVxuICAgICAgICAgIHJldHVybiBQYXRoLmpvaW4ocGF0aG5hbWUsIGZpbGVuYW1lKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGFzeW5jLmVhY2hTZXJpZXMoZW50cmllcywgcmVtb3ZlLCBmdW5jdGlvbihlcnJvcikge1xuICAgICAgICAgIGlmKGVycm9yKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIGZzLnJtZGlyKHBhdGhuYW1lLCBjYWxsYmFjayk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICByZW1vdmUocGF0aCwgY2FsbGJhY2spO1xufTtcblxuLyoqXG4gKiBHZXRzIHRoZSBwYXRoIHRvIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5LCBjcmVhdGluZyBpdCBpZiBub3RcbiAqIHByZXNlbnQuIFRoZSBkaXJlY3RvcnkgdXNlZCBpcyB0aGUgb25lIHNwZWNpZmllZCBpblxuICogZW52LlRNUC4gVGhlIGNhbGxiYWNrIHJlY2VpdmVzIChlcnJvciwgdGVtcERpck5hbWUpLlxuICovXG5TaGVsbC5wcm90b3R5cGUudGVtcERpciA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7XG4gIHZhciBzaCA9IHRoaXM7XG4gIHZhciBmcyA9IHNoLmZzO1xuICB2YXIgdG1wID0gc2guZW52LmdldCgnVE1QJyk7XG4gIGNhbGxiYWNrID0gY2FsbGJhY2sgfHwgZnVuY3Rpb24oKXt9O1xuXG4gIC8vIFRyeSBhbmQgY3JlYXRlIGl0LCBhbmQgaXQgd2lsbCBlaXRoZXIgd29yayBvciBmYWlsXG4gIC8vIGJ1dCBlaXRoZXIgd2F5IGl0J3Mgbm93IHRoZXJlLlxuICBmcy5ta2Rpcih0bXAsIGZ1bmN0aW9uKCkge1xuICAgIGNhbGxiYWNrKG51bGwsIHRtcCk7XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZWN1cnNpdmVseSBjcmVhdGVzIHRoZSBkaXJlY3RvcnkgYXQgYHBhdGhgLiBJZiB0aGUgcGFyZW50XG4gKiBvZiBgcGF0aGAgZG9lcyBub3QgZXhpc3QsIGl0IHdpbGwgYmUgY3JlYXRlZC5cbiAqIEJhc2VkIG9mZiBFbnN1cmVEaXIgYnkgU2FtIFguIFh1XG4gKiBodHRwczovL3d3dy5ucG1qcy5vcmcvcGFja2FnZS9lbnN1cmVEaXJcbiAqIE1JVCBMaWNlbnNlXG4gKi9cblNoZWxsLnByb3RvdHlwZS5ta2RpcnAgPSBmdW5jdGlvbihwYXRoLCBjYWxsYmFjaykge1xuICB2YXIgc2ggPSB0aGlzO1xuICB2YXIgZnMgPSBzaC5mcztcbiAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpe307XG5cbiAgaWYoIXBhdGgpIHtcbiAgICBjYWxsYmFjayhuZXcgRXJyb3JzLkVJTlZBTCgnTWlzc2luZyBwYXRoIGFyZ3VtZW50JykpO1xuICAgIHJldHVybjtcbiAgfVxuICBwYXRoID0gUGF0aC5yZXNvbHZlKHNoLnB3ZCgpLCBwYXRoKTtcbiAgaWYgKHBhdGggPT09ICcvJykge1xuICAgIGNhbGxiYWNrKCk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGZ1bmN0aW9uIF9ta2RpcnAocGF0aCwgY2FsbGJhY2spIHtcbiAgICBmcy5zdGF0KHBhdGgsIGZ1bmN0aW9uIChlcnIsIHN0YXQpIHtcbiAgICAgIGlmKHN0YXQpIHtcbiAgICAgICAgaWYoc3RhdC5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgY2FsbGJhY2soKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoc3RhdC5pc0ZpbGUoKSkge1xuICAgICAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRU5PVERJUihudWxsLCBwYXRoKSk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBlbHNlIGlmIChlcnIgJiYgZXJyLmNvZGUgIT09ICdFTk9FTlQnKSB7XG4gICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICB2YXIgcGFyZW50ID0gUGF0aC5kaXJuYW1lKHBhdGgpO1xuICAgICAgICBpZihwYXJlbnQgPT09ICcvJykge1xuICAgICAgICAgIGZzLm1rZGlyKHBhdGgsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIgJiYgZXJyLmNvZGUgIT09ICdFRVhJU1QnKSB7XG4gICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgX21rZGlycChwYXJlbnQsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgIGlmIChlcnIpIHJldHVybiBjYWxsYmFjayhlcnIpO1xuICAgICAgICAgICAgZnMubWtkaXIocGF0aCwgZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICBpZiAoZXJyICYmIGVyci5jb2RlICE9PSAnRUVYSVNUJykge1xuICAgICAgICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBfbWtkaXJwKHBhdGgsIGNhbGxiYWNrKTtcbn07XG5cbi8qKlxuICogUmVjdXJzaXZlbHkgd2FsayBhIGRpcmVjdG9yeSB0cmVlLCByZXBvcnRpbmcgYmFjayBhbGwgcGF0aHNcbiAqIHRoYXQgd2VyZSBmb3VuZCBhbG9uZyB0aGUgd2F5LiBUaGUgYHBhdGhgIG11c3QgYmUgYSBkaXIuXG4gKiBWYWxpZCBvcHRpb25zIGluY2x1ZGUgYSBgcmVnZXhgIGZvciBwYXR0ZXJuIG1hdGNoaW5nIHBhdGhzXG4gKiBhbmQgYW4gYGV4ZWNgIGZ1bmN0aW9uIG9mIHRoZSBmb3JtIGBmdW5jdGlvbihwYXRoLCBuZXh0KWAgd2hlcmVcbiAqIGBwYXRoYCBpcyB0aGUgY3VycmVudCBwYXRoIHRoYXQgd2FzIGZvdW5kIChkaXIgcGF0aHMgaGF2ZSBhbiAnLydcbiAqIGFwcGVuZGVkKSBhbmQgYG5leHRgIGlzIGEgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIGRvbmUgcHJvY2Vzc2luZ1xuICogdGhlIGN1cnJlbnQgcGF0aCwgcGFzc2luZyBhbnkgZXJyb3Igb2JqZWN0IGJhY2sgYXMgdGhlIGZpcnN0IGFyZ3VtZW50LlxuICogYGZpbmRgIHJldHVybnMgYSBmbGF0IGFycmF5IG9mIGFic29sdXRlIHBhdGhzIGZvciBhbGwgbWF0Y2hpbmcvZm91bmRcbiAqIHBhdGhzIGFzIHRoZSBmaW5hbCBhcmd1bWVudCB0byB0aGUgY2FsbGJhY2suXG4gKi9cblNoZWxsLnByb3RvdHlwZS5maW5kID0gZnVuY3Rpb24ocGF0aCwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgdmFyIHNoID0gdGhpcztcbiAgdmFyIGZzID0gc2guZnM7XG4gIGlmKHR5cGVvZiBvcHRpb25zID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgY2FsbGJhY2sgPSBjYWxsYmFjayB8fCBmdW5jdGlvbigpe307XG5cbiAgdmFyIGV4ZWMgPSBvcHRpb25zLmV4ZWMgfHwgZnVuY3Rpb24ocGF0aCwgbmV4dCkgeyBuZXh0KCk7IH07XG4gIHZhciBmb3VuZCA9IFtdO1xuXG4gIGlmKCFwYXRoKSB7XG4gICAgY2FsbGJhY2sobmV3IEVycm9ycy5FSU5WQUwoJ01pc3NpbmcgcGF0aCBhcmd1bWVudCcpKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBmdW5jdGlvbiBwcm9jZXNzUGF0aChwYXRoLCBjYWxsYmFjaykge1xuICAgIGV4ZWMocGF0aCwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICBpZihlcnIpIHtcbiAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBmb3VuZC5wdXNoKHBhdGgpO1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG1heWJlUHJvY2Vzc1BhdGgocGF0aCwgY2FsbGJhY2spIHtcbiAgICAvLyBUZXN0IHRoZSBwYXRoIGFnYWluc3QgdGhlIHVzZXIncyByZWdleCwgbmFtZSwgcGF0aCBwcmltYXJpZXMgKGlmIGFueSlcbiAgICAvLyBhbmQgcmVtb3ZlIGFueSB0cmFpbGluZyBzbGFzaGVzIGFkZGVkIHByZXZpb3VzbHkuXG4gICAgdmFyIHJhd1BhdGggPSBQYXRoLnJlbW92ZVRyYWlsaW5nKHBhdGgpO1xuXG4gICAgLy8gQ2hlY2sgZW50aXJlIHBhdGggYWdhaW5zdCBwcm92aWRlZCByZWdleCwgaWYgYW55XG4gICAgaWYob3B0aW9ucy5yZWdleCAmJiAhb3B0aW9ucy5yZWdleC50ZXN0KHJhd1BhdGgpKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGJhc2VuYW1lIGZvciBtYXRjaGVzIGFnYWluc3QgbmFtZSBwcmltYXJ5LCBpZiBhbnlcbiAgICBpZihvcHRpb25zLm5hbWUgJiYgIW1pbmltYXRjaChQYXRoLmJhc2VuYW1lKHJhd1BhdGgpLCBvcHRpb25zLm5hbWUpKSB7XG4gICAgICBjYWxsYmFjaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGRpcm5hbWUgZm9yIG1hdGNoZXMgYWdhaW5zdCBwYXRoIHByaW1hcnksIGlmIGFueVxuICAgIGlmKG9wdGlvbnMucGF0aCAmJiAhbWluaW1hdGNoKFBhdGguZGlybmFtZShyYXdQYXRoKSwgb3B0aW9ucy5wYXRoKSkge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBwcm9jZXNzUGF0aChwYXRoLCBjYWxsYmFjayk7XG4gIH1cblxuICBmdW5jdGlvbiB3YWxrKHBhdGgsIGNhbGxiYWNrKSB7XG4gICAgcGF0aCA9IFBhdGgucmVzb2x2ZShzaC5wd2QoKSwgcGF0aCk7XG5cbiAgICAvLyBUaGUgcGF0aCBpcyBlaXRoZXIgYSBmaWxlIG9yIGRpciwgYW5kIGluc3RlYWQgb2YgZG9pbmdcbiAgICAvLyBhIHN0YXQoKSB0byBkZXRlcm1pbmUgaXQgZmlyc3QsIHdlIGp1c3QgdHJ5IHRvIHJlYWRkaXIoKVxuICAgIC8vIGFuZCBpdCB3aWxsIGVpdGhlciB3b3JrIG9yIG5vdCwgYW5kIHdlIGhhbmRsZSB0aGUgbm9uLWRpciBlcnJvci5cbiAgICBmcy5yZWFkZGlyKHBhdGgsIGZ1bmN0aW9uKGVyciwgZW50cmllcykge1xuICAgICAgaWYoZXJyKSB7XG4gICAgICAgIGlmKGVyci5jb2RlID09PSAnRU5PVERJUicgLyogZmlsZSBjYXNlLCBpZ25vcmUgZXJyb3IgKi8pIHtcbiAgICAgICAgICBtYXliZVByb2Nlc3NQYXRoKHBhdGgsIGNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gUGF0aCBpcyByZWFsbHkgYSBkaXIsIGFkZCBhIHRyYWlsaW5nIC8gYW5kIHJlcG9ydCBpdCBmb3VuZFxuICAgICAgbWF5YmVQcm9jZXNzUGF0aChQYXRoLmFkZFRyYWlsaW5nKHBhdGgpLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgaWYoZXJyKSB7XG4gICAgICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBlbnRyaWVzID0gZW50cmllcy5tYXAoZnVuY3Rpb24oZW50cnkpIHtcbiAgICAgICAgICByZXR1cm4gUGF0aC5qb2luKHBhdGgsIGVudHJ5KTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgYXN5bmMuZWFjaFNlcmllcyhlbnRyaWVzLCB3YWxrLCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICBjYWxsYmFjayhlcnIsIGZvdW5kKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB3ZSBhcmUgc3RhcnRpbmcgd2l0aCBhIGRpciBwYXRoXG4gIGZzLnN0YXQocGF0aCwgZnVuY3Rpb24oZXJyLCBzdGF0cykge1xuICAgIGlmKGVycikge1xuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYoIXN0YXRzLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIGNhbGxiYWNrKG5ldyBFcnJvcnMuRU5PVERJUihudWxsLCBwYXRoKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgd2FsayhwYXRoLCBjYWxsYmFjayk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTaGVsbDtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgQ29uc3RhbnRzID0gcmVxdWlyZSgnLi9jb25zdGFudHMuanMnKTtcbmNvbnN0IFBhdGggPSByZXF1aXJlKCcuL3BhdGguanMnKTtcblxuZnVuY3Rpb24gZGF0ZUZyb21Ncyhtcykge1xuICByZXR1cm4gbmV3IERhdGUoTnVtYmVyKG1zKSk7XG59XG5cbmZ1bmN0aW9uIFN0YXRzKHBhdGgsIGZpbGVOb2RlLCBkZXZOYW1lKSB7XG4gIHRoaXMuZGV2ID0gZGV2TmFtZTtcbiAgdGhpcy5ub2RlID0gZmlsZU5vZGUuaWQ7XG4gIHRoaXMudHlwZSA9IGZpbGVOb2RlLnR5cGU7XG4gIHRoaXMuc2l6ZSA9IGZpbGVOb2RlLnNpemU7XG4gIHRoaXMubmxpbmtzID0gZmlsZU5vZGUubmxpbmtzO1xuICAvLyBEYXRlIG9iamVjdHNcbiAgdGhpcy5hdGltZSA9IGRhdGVGcm9tTXMoZmlsZU5vZGUuYXRpbWUpO1xuICB0aGlzLm10aW1lID0gZGF0ZUZyb21NcyhmaWxlTm9kZS5tdGltZSk7XG4gIHRoaXMuY3RpbWUgPSBkYXRlRnJvbU1zKGZpbGVOb2RlLmN0aW1lKTtcbiAgLy8gVW5peCB0aW1lc3RhbXAgTVMgTnVtYmVyc1xuICB0aGlzLmF0aW1lTXMgPSBmaWxlTm9kZS5hdGltZTtcbiAgdGhpcy5tdGltZU1zID0gZmlsZU5vZGUubXRpbWU7XG4gIHRoaXMuY3RpbWVNcyA9IGZpbGVOb2RlLmN0aW1lO1xuICB0aGlzLnZlcnNpb24gPSBmaWxlTm9kZS52ZXJzaW9uO1xuICB0aGlzLm1vZGUgPSBmaWxlTm9kZS5tb2RlO1xuICB0aGlzLnVpZCA9IGZpbGVOb2RlLnVpZDtcbiAgdGhpcy5naWQgPSBmaWxlTm9kZS5naWQ7XG4gIHRoaXMubmFtZSA9IFBhdGguYmFzZW5hbWUocGF0aCk7XG59XG5cblN0YXRzLnByb3RvdHlwZS5pc0ZpbGUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMudHlwZSA9PT0gQ29uc3RhbnRzLk5PREVfVFlQRV9GSUxFO1xufTtcblxuU3RhdHMucHJvdG90eXBlLmlzRGlyZWN0b3J5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnR5cGUgPT09IENvbnN0YW50cy5OT0RFX1RZUEVfRElSRUNUT1JZO1xufTtcblxuU3RhdHMucHJvdG90eXBlLmlzU3ltYm9saWNMaW5rID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0aGlzLnR5cGUgPT09IENvbnN0YW50cy5OT0RFX1RZUEVfU1lNQk9MSUNfTElOSztcbn07XG5cbi8vIFRoZXNlIHdpbGwgYWx3YXlzIGJlIGZhbHNlIGluIEZpbGVyLlxuU3RhdHMucHJvdG90eXBlLmlzU29ja2V0ICAgICAgICAgID1cblN0YXRzLnByb3RvdHlwZS5pc0ZJRk8gICAgICAgICAgICA9XG5TdGF0cy5wcm90b3R5cGUuaXNDaGFyYWN0ZXJEZXZpY2UgPVxuU3RhdHMucHJvdG90eXBlLmlzQmxvY2tEZXZpY2UgICAgID1cbmZ1bmN0aW9uKCkge1xuICByZXR1cm4gZmFsc2U7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IFN0YXRzO1xuIiwidmFyIENvbnN0YW50cyA9IHJlcXVpcmUoJy4vY29uc3RhbnRzLmpzJyk7XG5cbmZ1bmN0aW9uIFN1cGVyTm9kZShvcHRpb25zKSB7XG4gIHZhciBub3cgPSBEYXRlLm5vdygpO1xuXG4gIHRoaXMuaWQgPSBDb25zdGFudHMuU1VQRVJfTk9ERV9JRDtcbiAgdGhpcy50eXBlID0gQ29uc3RhbnRzLk5PREVfVFlQRV9NRVRBO1xuICB0aGlzLmF0aW1lID0gb3B0aW9ucy5hdGltZSB8fCBub3c7XG4gIHRoaXMuY3RpbWUgPSBvcHRpb25zLmN0aW1lIHx8IG5vdztcbiAgdGhpcy5tdGltZSA9IG9wdGlvbnMubXRpbWUgfHwgbm93O1xuICAvLyByb290IG5vZGUgaWQgKHJhbmRvbWx5IGdlbmVyYXRlZClcbiAgdGhpcy5ybm9kZSA9IG9wdGlvbnMucm5vZGU7XG59XG5cblN1cGVyTm9kZS5jcmVhdGUgPSBmdW5jdGlvbihvcHRpb25zLCBjYWxsYmFjaykge1xuICBvcHRpb25zLmd1aWQoZnVuY3Rpb24oZXJyLCBybm9kZSkge1xuICAgIGlmKGVycikge1xuICAgICAgY2FsbGJhY2soZXJyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgb3B0aW9ucy5ybm9kZSA9IG9wdGlvbnMucm5vZGUgfHwgcm5vZGU7XG4gICAgY2FsbGJhY2sobnVsbCwgbmV3IFN1cGVyTm9kZShvcHRpb25zKSk7XG4gIH0pO1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSBTdXBlck5vZGU7XG4iLCJ2YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vdXRpbHMnKTtcblxuY29uc3QgUExVR0lOX05BTUUgPSAnZmlsZXItd2VicGFjay1wbHVnaW4nO1xuXG5jb25zdCBPUFRJT05TX1NDSEVNQSA9IHJlcXVpcmUoJy4vc2NoZW1hJyk7XG5jb25zdCBPUFRJT05TX1BST0NFU1NPUlMgPSByZXF1aXJlKCcuL3Byb2Nlc3NvcnMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBGaWxlcldlYnBhY2tQbHVnaW4ge1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnMgPSB7fSkge1xuICAgIHV0aWxzLnZhbGlkYXRlT3B0aW9ucyhvcHRpb25zLCBPUFRJT05TX1NDSEVNQSk7XG4gICAgdGhpcy5vcHRpb25zID0gdXRpbHMucHJvY2Vzc09wdGlvbnMob3B0aW9ucywgT1BUSU9OU19QUk9DRVNTT1JTKTtcbiAgfVxuXG4gIGFwcGx5KGNvbXBpbGVyKSB7XG4gICAgY29tcGlsZXIuaG9va3Mubm9ybWFsTW9kdWxlRmFjdG9yeS50YXAoXG4gICAgICBQTFVHSU5fTkFNRSxcbiAgICAgIChmYWN0b3J5KSA9PiB7XG4gICAgICAgIGZhY3RvcnkuaG9va3MucmVzb2x2ZS50YXAoXG4gICAgICAgICAgUExVR0lOX05BTUUsXG4gICAgICAgICAgKHJlc29sdmVEYXRhKSA9PiB7XG4gICAgICAgICAgICAvLyBSZXNvbHZlIGZzUHJvdmlkZXIgaWYgcmVxdWlyZWRcbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgcmVzb2x2ZURhdGEucmVxdWVzdCA9PT0gJ2ZzUHJvdmlkZXInXG4gICAgICAgICAgICAgICYmIHJlc29sdmVEYXRhLmNvbnRleHQgPT09IHRoaXMub3B0aW9ucy5zaGltc0RpclxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc29sdmVGc1Byb3ZpZGVyKHJlc29sdmVEYXRhKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gSWdub3JlIGZpbGVyIGZpbGVzICh0aGVzZSBzaG91bGQgcmVzb2x2ZSBtb2R1bGVzIG5vcm1hbGx5KVxuICAgICAgICAgICAgaWYgKHJlc29sdmVEYXRhLmNvbnRleHQuc3RhcnRzV2l0aCh0aGlzLm9wdGlvbnMuZmlsZXJEaXIpKSByZXR1cm47XG5cbiAgICAgICAgICAgIC8vIEFwcGx5IGZzLCBwYXRoIGFuZCBidWZmZXIgc2hpbXMgaWYgcmVxdWlyZWRcbiAgICAgICAgICAgIHN3aXRjaCAocmVzb2x2ZURhdGEucmVxdWVzdCkge1xuICAgICAgICAgICAgY2FzZSAnZnMnOlxuICAgICAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5zaGltRnMpIHJldHVybjtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYXBwbHlGc1NoaW0ocmVzb2x2ZURhdGEpO1xuICAgICAgICAgICAgY2FzZSAncGF0aCc6XG4gICAgICAgICAgICAgIGlmICghdGhpcy5vcHRpb25zLnNoaW1QYXRoKSByZXR1cm47XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmFwcGx5UGF0aFNoaW0ocmVzb2x2ZURhdGEpO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHJlc29sdmVGc1Byb3ZpZGVyKHJlc29sdmVEYXRhKSB7XG4gICAgc3dpdGNoICh0aGlzLm9wdGlvbnMuZnNQcm92aWRlcikge1xuICAgIGNhc2UgJ2RlZmF1bHQnOlxuICAgICAgcmVzb2x2ZURhdGEucmVxdWVzdCA9IHBhdGguam9pbih0aGlzLm9wdGlvbnMuZnNQcm92aWRlckRpciwgJ2RlZmF1bHQuanMnKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2luZGV4ZWRkYic6XG4gICAgICByZXNvbHZlRGF0YS5yZXF1ZXN0ID0gcGF0aC5qb2luKHRoaXMub3B0aW9ucy5mc1Byb3ZpZGVyRGlyLCAnaW5kZXhlZGRiLmpzJyk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdtZW1vcnknOlxuICAgICAgcmVzb2x2ZURhdGEucmVxdWVzdCA9IHBhdGguam9pbih0aGlzLm9wdGlvbnMuZnNQcm92aWRlckRpciwgJ21lbW9yeS5qcycpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnY3VzdG9tJzpcbiAgICAgIHJlc29sdmVEYXRhLnJlcXVlc3QgPSBwYXRoLmpvaW4odGhpcy5vcHRpb25zLmZzUHJvdmlkZXJEaXIsICdjdXN0b20uanMnKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoW1xuICAgICAgICAnSW52YWxpZCBvcHRpb24gZm9yIGZzUHJvdmlkZXIuJyxcbiAgICAgICAgJ2ZzUHJvdmlkZXIgbXVzdCBiZSBvbmUgb2YgXFwnZGVmYXVsdFxcJywgXFwnaW5kZXhlZGRiXFwnLCBcXCdtZW1vcnlcXCcgb3IgXFwnY3VzdG9tXFwnLicsXG4gICAgICAgICdJZiB1c2luZyBhIGN1c3RvbSBmc1Byb3ZpZGVyLCB5b3UgbXVzdCBhbHNvIHByb3ZpZGUgdGhlIGZzUHJvdmlkZXJEaXIgb3B0aW9uLidcbiAgICAgIF0uam9pbignICcpKTtcbiAgICB9XG4gIH1cblxuICBhcHBseUZzU2hpbShyZXNvbHZlRGF0YSkge1xuICAgIHJlc29sdmVEYXRhLnJlcXVlc3QgPSBwYXRoLmpvaW4odGhpcy5vcHRpb25zLnNoaW1zRGlyLCAnZnMuanMnKTtcbiAgfVxuICAgIFxuICBhcHBseVBhdGhTaGltKHJlc29sdmVEYXRhKSB7XG4gICAgcmVzb2x2ZURhdGEucmVxdWVzdCA9IHBhdGguam9pbih0aGlzLm9wdGlvbnMuc2hpbXNEaXIsICdwYXRoLmpzJyk7XG4gIH1cbn07XG4iLCJ2YXIgcGF0aCA9IHJlcXVpcmUoJ3BhdGgnKTtcblxuY29uc3QgUk9PVF9ESVJfVEFHID0gJzxyb290RGlyPic7XG5jb25zdCBDV0QgPSBwcm9jZXNzLmN3ZCgpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmlsZXJEaXI6IHtcbiAgICBwcm9jZXNzOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gcGF0aC5qb2luKENXRCwgJ25vZGVfbW9kdWxlcycsICdmaWxlcicpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhdGgucmVzb2x2ZSh2YWx1ZS5yZXBsYWNlKFJPT1RfRElSX1RBRywgQ1dEKSk7XG4gICAgfSxcbiAgfSxcbiAgc2hpbXNEaXI6IHtcbiAgICBwcm9jZXNzOiBmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICByZXR1cm4gcGF0aC5qb2luKENXRCwgJ25vZGVfbW9kdWxlcycsICdmaWxlcicsICdzaGltcycpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBhdGgucmVzb2x2ZSh2YWx1ZS5yZXBsYWNlKFJPT1RfRElSX1RBRywgQ1dEKSk7XG4gICAgfVxuICB9LFxuICBmc1Byb3ZpZGVyRGlyOiB7XG4gICAgcHJvY2VzczogZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgIGlmICghdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHBhdGguam9pbihDV0QsICdub2RlX21vZHVsZXMnLCAnZmlsZXInLCAnc2hpbXMnLCAncHJvdmlkZXJzJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGF0aC5yZXNvbHZlKHZhbHVlLnJlcGxhY2UoUk9PVF9ESVJfVEFHLCBDV0QpKTtcbiAgICB9LFxuICB9LFxuICBzaGltRnM6IHsgZGVmYXVsdDogdHJ1ZSB9LFxuICBzaGltUGF0aDogeyBkZWZhdWx0OiB0cnVlfSxcbiAgZnNQcm92aWRlcjogeyBkZWZhdWx0OiAnZGVmYXVsdCd9LFxufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICB0eXBlOiAnb2JqZWN0JyxcbiAgcHJvcGVydGllczoge1xuICAgIGZpbGVyRGlyOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICB9LFxuICAgIHNoaW1zRGlyOiB7XG4gICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICB9LFxuICAgIHNoaW1Gczoge1xuICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgIH0sXG4gICAgc2hpbVBhdGg6IHtcbiAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICB9LFxuICAgIGZzUHJvdmlkZXI6IHtcbiAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgIH0sXG4gICAgZnNQcm92aWRlckRpcjoge1xuICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgfSxcbiAgfVxufTtcbiIsInZhciB7IHZhbGlkYXRlIH0gPSByZXF1aXJlKCdzY2hlbWEtdXRpbHMnKTtcblxuZnVuY3Rpb24gdmFsaWRhdGVPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSkge1xuICB2YWxpZGF0ZShzY2hlbWEsIG9wdGlvbnMpO1xufVxuXG5mdW5jdGlvbiBwcm9jZXNzT3B0aW9ucyhvcHRpb25zLCBwcm9jZXNzb3JzKSB7XG4gIGNvbnN0IHByb2Nlc3NlZE9wdGlvbnMgPSB7fTtcbiAgICBcbiAgZm9yIChjb25zdCBbcHJvcGVydHksIHByb2Nlc3Nvcl0gb2YgT2JqZWN0LmVudHJpZXMocHJvY2Vzc29ycykpIHtcbiAgICBwcm9jZXNzZWRPcHRpb25zW3Byb3BlcnR5XSA9IG9wdGlvbnNbcHJvcGVydHldO1xuICAgIGlmIChwcm9jZXNzZWRPcHRpb25zW3Byb3BlcnR5XSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcm9jZXNzZWRPcHRpb25zW3Byb3BlcnR5XSA9IHByb2Nlc3Nvci5kZWZhdWx0O1xuICAgIH1cbiAgICBpZiAocHJvY2Vzc29yLnByb2Nlc3MpIHtcbiAgICAgIHByb2Nlc3NlZE9wdGlvbnNbcHJvcGVydHldID0gcHJvY2Vzc29yLnByb2Nlc3MocHJvY2Vzc2VkT3B0aW9uc1twcm9wZXJ0eV0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwcm9jZXNzZWRPcHRpb25zO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdmFsaWRhdGVPcHRpb25zLFxuICBwcm9jZXNzT3B0aW9ucyxcbn07XG4iLCIvKiEgaWVlZTc1NC4gQlNELTMtQ2xhdXNlIExpY2Vuc2UuIEZlcm9zcyBBYm91a2hhZGlqZWggPGh0dHBzOi8vZmVyb3NzLm9yZy9vcGVuc291cmNlPiAqL1xuZXhwb3J0cy5yZWFkID0gZnVuY3Rpb24gKGJ1ZmZlciwgb2Zmc2V0LCBpc0xFLCBtTGVuLCBuQnl0ZXMpIHtcbiAgdmFyIGUsIG1cbiAgdmFyIGVMZW4gPSAobkJ5dGVzICogOCkgLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIG5CaXRzID0gLTdcbiAgdmFyIGkgPSBpc0xFID8gKG5CeXRlcyAtIDEpIDogMFxuICB2YXIgZCA9IGlzTEUgPyAtMSA6IDFcbiAgdmFyIHMgPSBidWZmZXJbb2Zmc2V0ICsgaV1cblxuICBpICs9IGRcblxuICBlID0gcyAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBzID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBlTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IGUgPSAoZSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSAobSAqIDI1NikgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBpZiAoZSA9PT0gMCkge1xuICAgIGUgPSAxIC0gZUJpYXNcbiAgfSBlbHNlIGlmIChlID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG0gPyBOYU4gOiAoKHMgPyAtMSA6IDEpICogSW5maW5pdHkpXG4gIH0gZWxzZSB7XG4gICAgbSA9IG0gKyBNYXRoLnBvdygyLCBtTGVuKVxuICAgIGUgPSBlIC0gZUJpYXNcbiAgfVxuICByZXR1cm4gKHMgPyAtMSA6IDEpICogbSAqIE1hdGgucG93KDIsIGUgLSBtTGVuKVxufVxuXG5leHBvcnRzLndyaXRlID0gZnVuY3Rpb24gKGJ1ZmZlciwgdmFsdWUsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtLCBjXG4gIHZhciBlTGVuID0gKG5CeXRlcyAqIDgpIC0gbUxlbiAtIDFcbiAgdmFyIGVNYXggPSAoMSA8PCBlTGVuKSAtIDFcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxXG4gIHZhciBydCA9IChtTGVuID09PSAyMyA/IE1hdGgucG93KDIsIC0yNCkgLSBNYXRoLnBvdygyLCAtNzcpIDogMClcbiAgdmFyIGkgPSBpc0xFID8gMCA6IChuQnl0ZXMgLSAxKVxuICB2YXIgZCA9IGlzTEUgPyAxIDogLTFcbiAgdmFyIHMgPSB2YWx1ZSA8IDAgfHwgKHZhbHVlID09PSAwICYmIDEgLyB2YWx1ZSA8IDApID8gMSA6IDBcblxuICB2YWx1ZSA9IE1hdGguYWJzKHZhbHVlKVxuXG4gIGlmIChpc05hTih2YWx1ZSkgfHwgdmFsdWUgPT09IEluZmluaXR5KSB7XG4gICAgbSA9IGlzTmFOKHZhbHVlKSA/IDEgOiAwXG4gICAgZSA9IGVNYXhcbiAgfSBlbHNlIHtcbiAgICBlID0gTWF0aC5mbG9vcihNYXRoLmxvZyh2YWx1ZSkgLyBNYXRoLkxOMilcbiAgICBpZiAodmFsdWUgKiAoYyA9IE1hdGgucG93KDIsIC1lKSkgPCAxKSB7XG4gICAgICBlLS1cbiAgICAgIGMgKj0gMlxuICAgIH1cbiAgICBpZiAoZSArIGVCaWFzID49IDEpIHtcbiAgICAgIHZhbHVlICs9IHJ0IC8gY1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWx1ZSArPSBydCAqIE1hdGgucG93KDIsIDEgLSBlQmlhcylcbiAgICB9XG4gICAgaWYgKHZhbHVlICogYyA+PSAyKSB7XG4gICAgICBlKytcbiAgICAgIGMgLz0gMlxuICAgIH1cblxuICAgIGlmIChlICsgZUJpYXMgPj0gZU1heCkge1xuICAgICAgbSA9IDBcbiAgICAgIGUgPSBlTWF4XG4gICAgfSBlbHNlIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgbSA9ICgodmFsdWUgKiBjKSAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdHJhdmVyc2UgPSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzY2hlbWEsIG9wdHMsIGNiKSB7XG4gIC8vIExlZ2FjeSBzdXBwb3J0IGZvciB2MC4zLjEgYW5kIGVhcmxpZXIuXG4gIGlmICh0eXBlb2Ygb3B0cyA9PSAnZnVuY3Rpb24nKSB7XG4gICAgY2IgPSBvcHRzO1xuICAgIG9wdHMgPSB7fTtcbiAgfVxuXG4gIGNiID0gb3B0cy5jYiB8fCBjYjtcbiAgdmFyIHByZSA9ICh0eXBlb2YgY2IgPT0gJ2Z1bmN0aW9uJykgPyBjYiA6IGNiLnByZSB8fCBmdW5jdGlvbigpIHt9O1xuICB2YXIgcG9zdCA9IGNiLnBvc3QgfHwgZnVuY3Rpb24oKSB7fTtcblxuICBfdHJhdmVyc2Uob3B0cywgcHJlLCBwb3N0LCBzY2hlbWEsICcnLCBzY2hlbWEpO1xufTtcblxuXG50cmF2ZXJzZS5rZXl3b3JkcyA9IHtcbiAgYWRkaXRpb25hbEl0ZW1zOiB0cnVlLFxuICBpdGVtczogdHJ1ZSxcbiAgY29udGFpbnM6IHRydWUsXG4gIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiB0cnVlLFxuICBwcm9wZXJ0eU5hbWVzOiB0cnVlLFxuICBub3Q6IHRydWVcbn07XG5cbnRyYXZlcnNlLmFycmF5S2V5d29yZHMgPSB7XG4gIGl0ZW1zOiB0cnVlLFxuICBhbGxPZjogdHJ1ZSxcbiAgYW55T2Y6IHRydWUsXG4gIG9uZU9mOiB0cnVlXG59O1xuXG50cmF2ZXJzZS5wcm9wc0tleXdvcmRzID0ge1xuICBkZWZpbml0aW9uczogdHJ1ZSxcbiAgcHJvcGVydGllczogdHJ1ZSxcbiAgcGF0dGVyblByb3BlcnRpZXM6IHRydWUsXG4gIGRlcGVuZGVuY2llczogdHJ1ZVxufTtcblxudHJhdmVyc2Uuc2tpcEtleXdvcmRzID0ge1xuICBkZWZhdWx0OiB0cnVlLFxuICBlbnVtOiB0cnVlLFxuICBjb25zdDogdHJ1ZSxcbiAgcmVxdWlyZWQ6IHRydWUsXG4gIG1heGltdW06IHRydWUsXG4gIG1pbmltdW06IHRydWUsXG4gIGV4Y2x1c2l2ZU1heGltdW06IHRydWUsXG4gIGV4Y2x1c2l2ZU1pbmltdW06IHRydWUsXG4gIG11bHRpcGxlT2Y6IHRydWUsXG4gIG1heExlbmd0aDogdHJ1ZSxcbiAgbWluTGVuZ3RoOiB0cnVlLFxuICBwYXR0ZXJuOiB0cnVlLFxuICBmb3JtYXQ6IHRydWUsXG4gIG1heEl0ZW1zOiB0cnVlLFxuICBtaW5JdGVtczogdHJ1ZSxcbiAgdW5pcXVlSXRlbXM6IHRydWUsXG4gIG1heFByb3BlcnRpZXM6IHRydWUsXG4gIG1pblByb3BlcnRpZXM6IHRydWVcbn07XG5cblxuZnVuY3Rpb24gX3RyYXZlcnNlKG9wdHMsIHByZSwgcG9zdCwgc2NoZW1hLCBqc29uUHRyLCByb290U2NoZW1hLCBwYXJlbnRKc29uUHRyLCBwYXJlbnRLZXl3b3JkLCBwYXJlbnRTY2hlbWEsIGtleUluZGV4KSB7XG4gIGlmIChzY2hlbWEgJiYgdHlwZW9mIHNjaGVtYSA9PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheShzY2hlbWEpKSB7XG4gICAgcHJlKHNjaGVtYSwganNvblB0ciwgcm9vdFNjaGVtYSwgcGFyZW50SnNvblB0ciwgcGFyZW50S2V5d29yZCwgcGFyZW50U2NoZW1hLCBrZXlJbmRleCk7XG4gICAgZm9yICh2YXIga2V5IGluIHNjaGVtYSkge1xuICAgICAgdmFyIHNjaCA9IHNjaGVtYVtrZXldO1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2NoKSkge1xuICAgICAgICBpZiAoa2V5IGluIHRyYXZlcnNlLmFycmF5S2V5d29yZHMpIHtcbiAgICAgICAgICBmb3IgKHZhciBpPTA7IGk8c2NoLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgX3RyYXZlcnNlKG9wdHMsIHByZSwgcG9zdCwgc2NoW2ldLCBqc29uUHRyICsgJy8nICsga2V5ICsgJy8nICsgaSwgcm9vdFNjaGVtYSwganNvblB0ciwga2V5LCBzY2hlbWEsIGkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGtleSBpbiB0cmF2ZXJzZS5wcm9wc0tleXdvcmRzKSB7XG4gICAgICAgIGlmIChzY2ggJiYgdHlwZW9mIHNjaCA9PSAnb2JqZWN0Jykge1xuICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gc2NoKVxuICAgICAgICAgICAgX3RyYXZlcnNlKG9wdHMsIHByZSwgcG9zdCwgc2NoW3Byb3BdLCBqc29uUHRyICsgJy8nICsga2V5ICsgJy8nICsgZXNjYXBlSnNvblB0cihwcm9wKSwgcm9vdFNjaGVtYSwganNvblB0ciwga2V5LCBzY2hlbWEsIHByb3ApO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGtleSBpbiB0cmF2ZXJzZS5rZXl3b3JkcyB8fCAob3B0cy5hbGxLZXlzICYmICEoa2V5IGluIHRyYXZlcnNlLnNraXBLZXl3b3JkcykpKSB7XG4gICAgICAgIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaCwganNvblB0ciArICcvJyArIGtleSwgcm9vdFNjaGVtYSwganNvblB0ciwga2V5LCBzY2hlbWEpO1xuICAgICAgfVxuICAgIH1cbiAgICBwb3N0KHNjaGVtYSwganNvblB0ciwgcm9vdFNjaGVtYSwgcGFyZW50SnNvblB0ciwgcGFyZW50S2V5d29yZCwgcGFyZW50U2NoZW1hLCBrZXlJbmRleCk7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBlc2NhcGVKc29uUHRyKHN0cikge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL34vZywgJ34wJykucmVwbGFjZSgvXFwvL2csICd+MScpO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSBtaW5pbWF0Y2hcbm1pbmltYXRjaC5NaW5pbWF0Y2ggPSBNaW5pbWF0Y2hcblxudmFyIHBhdGggPSAoZnVuY3Rpb24gKCkgeyB0cnkgeyByZXR1cm4gcmVxdWlyZSgncGF0aCcpIH0gY2F0Y2ggKGUpIHt9fSgpKSB8fCB7XG4gIHNlcDogJy8nXG59XG5taW5pbWF0Y2guc2VwID0gcGF0aC5zZXBcblxudmFyIEdMT0JTVEFSID0gbWluaW1hdGNoLkdMT0JTVEFSID0gTWluaW1hdGNoLkdMT0JTVEFSID0ge31cbnZhciBleHBhbmQgPSByZXF1aXJlKCdicmFjZS1leHBhbnNpb24nKVxuXG52YXIgcGxUeXBlcyA9IHtcbiAgJyEnOiB7IG9wZW46ICcoPzooPyEoPzonLCBjbG9zZTogJykpW14vXSo/KSd9LFxuICAnPyc6IHsgb3BlbjogJyg/OicsIGNsb3NlOiAnKT8nIH0sXG4gICcrJzogeyBvcGVuOiAnKD86JywgY2xvc2U6ICcpKycgfSxcbiAgJyonOiB7IG9wZW46ICcoPzonLCBjbG9zZTogJykqJyB9LFxuICAnQCc6IHsgb3BlbjogJyg/OicsIGNsb3NlOiAnKScgfVxufVxuXG4vLyBhbnkgc2luZ2xlIHRoaW5nIG90aGVyIHRoYW4gL1xuLy8gZG9uJ3QgbmVlZCB0byBlc2NhcGUgLyB3aGVuIHVzaW5nIG5ldyBSZWdFeHAoKVxudmFyIHFtYXJrID0gJ1teL10nXG5cbi8vICogPT4gYW55IG51bWJlciBvZiBjaGFyYWN0ZXJzXG52YXIgc3RhciA9IHFtYXJrICsgJyo/J1xuXG4vLyAqKiB3aGVuIGRvdHMgYXJlIGFsbG93ZWQuICBBbnl0aGluZyBnb2VzLCBleGNlcHQgLi4gYW5kIC5cbi8vIG5vdCAoXiBvciAvIGZvbGxvd2VkIGJ5IG9uZSBvciB0d28gZG90cyBmb2xsb3dlZCBieSAkIG9yIC8pLFxuLy8gZm9sbG93ZWQgYnkgYW55dGhpbmcsIGFueSBudW1iZXIgb2YgdGltZXMuXG52YXIgdHdvU3RhckRvdCA9ICcoPzooPyEoPzpcXFxcXFwvfF4pKD86XFxcXC57MSwyfSkoJHxcXFxcXFwvKSkuKSo/J1xuXG4vLyBub3QgYSBeIG9yIC8gZm9sbG93ZWQgYnkgYSBkb3QsXG4vLyBmb2xsb3dlZCBieSBhbnl0aGluZywgYW55IG51bWJlciBvZiB0aW1lcy5cbnZhciB0d29TdGFyTm9Eb3QgPSAnKD86KD8hKD86XFxcXFxcL3xeKVxcXFwuKS4pKj8nXG5cbi8vIGNoYXJhY3RlcnMgdGhhdCBuZWVkIHRvIGJlIGVzY2FwZWQgaW4gUmVnRXhwLlxudmFyIHJlU3BlY2lhbHMgPSBjaGFyU2V0KCcoKS4qe30rP1tdXiRcXFxcIScpXG5cbi8vIFwiYWJjXCIgLT4geyBhOnRydWUsIGI6dHJ1ZSwgYzp0cnVlIH1cbmZ1bmN0aW9uIGNoYXJTZXQgKHMpIHtcbiAgcmV0dXJuIHMuc3BsaXQoJycpLnJlZHVjZShmdW5jdGlvbiAoc2V0LCBjKSB7XG4gICAgc2V0W2NdID0gdHJ1ZVxuICAgIHJldHVybiBzZXRcbiAgfSwge30pXG59XG5cbi8vIG5vcm1hbGl6ZXMgc2xhc2hlcy5cbnZhciBzbGFzaFNwbGl0ID0gL1xcLysvXG5cbm1pbmltYXRjaC5maWx0ZXIgPSBmaWx0ZXJcbmZ1bmN0aW9uIGZpbHRlciAocGF0dGVybiwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICByZXR1cm4gZnVuY3Rpb24gKHAsIGksIGxpc3QpIHtcbiAgICByZXR1cm4gbWluaW1hdGNoKHAsIHBhdHRlcm4sIG9wdGlvbnMpXG4gIH1cbn1cblxuZnVuY3Rpb24gZXh0IChhLCBiKSB7XG4gIGIgPSBiIHx8IHt9XG4gIHZhciB0ID0ge31cbiAgT2JqZWN0LmtleXMoYSkuZm9yRWFjaChmdW5jdGlvbiAoaykge1xuICAgIHRba10gPSBhW2tdXG4gIH0pXG4gIE9iamVjdC5rZXlzKGIpLmZvckVhY2goZnVuY3Rpb24gKGspIHtcbiAgICB0W2tdID0gYltrXVxuICB9KVxuICByZXR1cm4gdFxufVxuXG5taW5pbWF0Y2guZGVmYXVsdHMgPSBmdW5jdGlvbiAoZGVmKSB7XG4gIGlmICghZGVmIHx8IHR5cGVvZiBkZWYgIT09ICdvYmplY3QnIHx8ICFPYmplY3Qua2V5cyhkZWYpLmxlbmd0aCkge1xuICAgIHJldHVybiBtaW5pbWF0Y2hcbiAgfVxuXG4gIHZhciBvcmlnID0gbWluaW1hdGNoXG5cbiAgdmFyIG0gPSBmdW5jdGlvbiBtaW5pbWF0Y2ggKHAsIHBhdHRlcm4sIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3JpZyhwLCBwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSlcbiAgfVxuXG4gIG0uTWluaW1hdGNoID0gZnVuY3Rpb24gTWluaW1hdGNoIChwYXR0ZXJuLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG5ldyBvcmlnLk1pbmltYXRjaChwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSlcbiAgfVxuICBtLk1pbmltYXRjaC5kZWZhdWx0cyA9IGZ1bmN0aW9uIGRlZmF1bHRzIChvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9yaWcuZGVmYXVsdHMoZXh0KGRlZiwgb3B0aW9ucykpLk1pbmltYXRjaFxuICB9XG5cbiAgbS5maWx0ZXIgPSBmdW5jdGlvbiBmaWx0ZXIgKHBhdHRlcm4sIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3JpZy5maWx0ZXIocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpXG4gIH1cblxuICBtLmRlZmF1bHRzID0gZnVuY3Rpb24gZGVmYXVsdHMgKG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3JpZy5kZWZhdWx0cyhleHQoZGVmLCBvcHRpb25zKSlcbiAgfVxuXG4gIG0ubWFrZVJlID0gZnVuY3Rpb24gbWFrZVJlIChwYXR0ZXJuLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9yaWcubWFrZVJlKHBhdHRlcm4sIGV4dChkZWYsIG9wdGlvbnMpKVxuICB9XG5cbiAgbS5icmFjZUV4cGFuZCA9IGZ1bmN0aW9uIGJyYWNlRXhwYW5kIChwYXR0ZXJuLCBvcHRpb25zKSB7XG4gICAgcmV0dXJuIG9yaWcuYnJhY2VFeHBhbmQocGF0dGVybiwgZXh0KGRlZiwgb3B0aW9ucykpXG4gIH1cblxuICBtLm1hdGNoID0gZnVuY3Rpb24gKGxpc3QsIHBhdHRlcm4sIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gb3JpZy5tYXRjaChsaXN0LCBwYXR0ZXJuLCBleHQoZGVmLCBvcHRpb25zKSlcbiAgfVxuXG4gIHJldHVybiBtXG59XG5cbk1pbmltYXRjaC5kZWZhdWx0cyA9IGZ1bmN0aW9uIChkZWYpIHtcbiAgcmV0dXJuIG1pbmltYXRjaC5kZWZhdWx0cyhkZWYpLk1pbmltYXRjaFxufVxuXG5mdW5jdGlvbiBtaW5pbWF0Y2ggKHAsIHBhdHRlcm4sIG9wdGlvbnMpIHtcbiAgYXNzZXJ0VmFsaWRQYXR0ZXJuKHBhdHRlcm4pXG5cbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge31cblxuICAvLyBzaG9ydGN1dDogY29tbWVudHMgbWF0Y2ggbm90aGluZy5cbiAgaWYgKCFvcHRpb25zLm5vY29tbWVudCAmJiBwYXR0ZXJuLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gbmV3IE1pbmltYXRjaChwYXR0ZXJuLCBvcHRpb25zKS5tYXRjaChwKVxufVxuXG5mdW5jdGlvbiBNaW5pbWF0Y2ggKHBhdHRlcm4sIG9wdGlvbnMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIE1pbmltYXRjaCkpIHtcbiAgICByZXR1cm4gbmV3IE1pbmltYXRjaChwYXR0ZXJuLCBvcHRpb25zKVxuICB9XG5cbiAgYXNzZXJ0VmFsaWRQYXR0ZXJuKHBhdHRlcm4pXG5cbiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge31cblxuICBwYXR0ZXJuID0gcGF0dGVybi50cmltKClcblxuICAvLyB3aW5kb3dzIHN1cHBvcnQ6IG5lZWQgdG8gdXNlIC8sIG5vdCBcXFxuICBpZiAoIW9wdGlvbnMuYWxsb3dXaW5kb3dzRXNjYXBlICYmIHBhdGguc2VwICE9PSAnLycpIHtcbiAgICBwYXR0ZXJuID0gcGF0dGVybi5zcGxpdChwYXRoLnNlcCkuam9pbignLycpXG4gIH1cblxuICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zXG4gIHRoaXMuc2V0ID0gW11cbiAgdGhpcy5wYXR0ZXJuID0gcGF0dGVyblxuICB0aGlzLnJlZ2V4cCA9IG51bGxcbiAgdGhpcy5uZWdhdGUgPSBmYWxzZVxuICB0aGlzLmNvbW1lbnQgPSBmYWxzZVxuICB0aGlzLmVtcHR5ID0gZmFsc2VcbiAgdGhpcy5wYXJ0aWFsID0gISFvcHRpb25zLnBhcnRpYWxcblxuICAvLyBtYWtlIHRoZSBzZXQgb2YgcmVnZXhwcyBldGMuXG4gIHRoaXMubWFrZSgpXG59XG5cbk1pbmltYXRjaC5wcm90b3R5cGUuZGVidWcgPSBmdW5jdGlvbiAoKSB7fVxuXG5NaW5pbWF0Y2gucHJvdG90eXBlLm1ha2UgPSBtYWtlXG5mdW5jdGlvbiBtYWtlICgpIHtcbiAgdmFyIHBhdHRlcm4gPSB0aGlzLnBhdHRlcm5cbiAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnNcblxuICAvLyBlbXB0eSBwYXR0ZXJucyBhbmQgY29tbWVudHMgbWF0Y2ggbm90aGluZy5cbiAgaWYgKCFvcHRpb25zLm5vY29tbWVudCAmJiBwYXR0ZXJuLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgdGhpcy5jb21tZW50ID0gdHJ1ZVxuICAgIHJldHVyblxuICB9XG4gIGlmICghcGF0dGVybikge1xuICAgIHRoaXMuZW1wdHkgPSB0cnVlXG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyBzdGVwIDE6IGZpZ3VyZSBvdXQgbmVnYXRpb24sIGV0Yy5cbiAgdGhpcy5wYXJzZU5lZ2F0ZSgpXG5cbiAgLy8gc3RlcCAyOiBleHBhbmQgYnJhY2VzXG4gIHZhciBzZXQgPSB0aGlzLmdsb2JTZXQgPSB0aGlzLmJyYWNlRXhwYW5kKClcblxuICBpZiAob3B0aW9ucy5kZWJ1ZykgdGhpcy5kZWJ1ZyA9IGZ1bmN0aW9uIGRlYnVnKCkgeyBjb25zb2xlLmVycm9yLmFwcGx5KGNvbnNvbGUsIGFyZ3VtZW50cykgfVxuXG4gIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCBzZXQpXG5cbiAgLy8gc3RlcCAzOiBub3cgd2UgaGF2ZSBhIHNldCwgc28gdHVybiBlYWNoIG9uZSBpbnRvIGEgc2VyaWVzIG9mIHBhdGgtcG9ydGlvblxuICAvLyBtYXRjaGluZyBwYXR0ZXJucy5cbiAgLy8gVGhlc2Ugd2lsbCBiZSByZWdleHBzLCBleGNlcHQgaW4gdGhlIGNhc2Ugb2YgXCIqKlwiLCB3aGljaCBpc1xuICAvLyBzZXQgdG8gdGhlIEdMT0JTVEFSIG9iamVjdCBmb3IgZ2xvYnN0YXIgYmVoYXZpb3IsXG4gIC8vIGFuZCB3aWxsIG5vdCBjb250YWluIGFueSAvIGNoYXJhY3RlcnNcbiAgc2V0ID0gdGhpcy5nbG9iUGFydHMgPSBzZXQubWFwKGZ1bmN0aW9uIChzKSB7XG4gICAgcmV0dXJuIHMuc3BsaXQoc2xhc2hTcGxpdClcbiAgfSlcblxuICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgc2V0KVxuXG4gIC8vIGdsb2IgLS0+IHJlZ2V4cHNcbiAgc2V0ID0gc2V0Lm1hcChmdW5jdGlvbiAocywgc2ksIHNldCkge1xuICAgIHJldHVybiBzLm1hcCh0aGlzLnBhcnNlLCB0aGlzKVxuICB9LCB0aGlzKVxuXG4gIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCBzZXQpXG5cbiAgLy8gZmlsdGVyIG91dCBldmVyeXRoaW5nIHRoYXQgZGlkbid0IGNvbXBpbGUgcHJvcGVybHkuXG4gIHNldCA9IHNldC5maWx0ZXIoZnVuY3Rpb24gKHMpIHtcbiAgICByZXR1cm4gcy5pbmRleE9mKGZhbHNlKSA9PT0gLTFcbiAgfSlcblxuICB0aGlzLmRlYnVnKHRoaXMucGF0dGVybiwgc2V0KVxuXG4gIHRoaXMuc2V0ID0gc2V0XG59XG5cbk1pbmltYXRjaC5wcm90b3R5cGUucGFyc2VOZWdhdGUgPSBwYXJzZU5lZ2F0ZVxuZnVuY3Rpb24gcGFyc2VOZWdhdGUgKCkge1xuICB2YXIgcGF0dGVybiA9IHRoaXMucGF0dGVyblxuICB2YXIgbmVnYXRlID0gZmFsc2VcbiAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnNcbiAgdmFyIG5lZ2F0ZU9mZnNldCA9IDBcblxuICBpZiAob3B0aW9ucy5ub25lZ2F0ZSkgcmV0dXJuXG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBwYXR0ZXJuLmxlbmd0aFxuICAgIDsgaSA8IGwgJiYgcGF0dGVybi5jaGFyQXQoaSkgPT09ICchJ1xuICAgIDsgaSsrKSB7XG4gICAgbmVnYXRlID0gIW5lZ2F0ZVxuICAgIG5lZ2F0ZU9mZnNldCsrXG4gIH1cblxuICBpZiAobmVnYXRlT2Zmc2V0KSB0aGlzLnBhdHRlcm4gPSBwYXR0ZXJuLnN1YnN0cihuZWdhdGVPZmZzZXQpXG4gIHRoaXMubmVnYXRlID0gbmVnYXRlXG59XG5cbi8vIEJyYWNlIGV4cGFuc2lvbjpcbi8vIGF7YixjfWQgLT4gYWJkIGFjZFxuLy8gYXtiLH1jIC0+IGFiYyBhY1xuLy8gYXswLi4zfWQgLT4gYTBkIGExZCBhMmQgYTNkXG4vLyBhe2IsY3tkLGV9Zn1nIC0+IGFiZyBhY2RmZyBhY2VmZ1xuLy8gYXtiLGN9ZHtlLGZ9ZyAtPiBhYmRlZyBhY2RlZyBhYmRlZyBhYmRmZ1xuLy9cbi8vIEludmFsaWQgc2V0cyBhcmUgbm90IGV4cGFuZGVkLlxuLy8gYXsyLi59YiAtPiBhezIuLn1iXG4vLyBhe2J9YyAtPiBhe2J9Y1xubWluaW1hdGNoLmJyYWNlRXhwYW5kID0gZnVuY3Rpb24gKHBhdHRlcm4sIG9wdGlvbnMpIHtcbiAgcmV0dXJuIGJyYWNlRXhwYW5kKHBhdHRlcm4sIG9wdGlvbnMpXG59XG5cbk1pbmltYXRjaC5wcm90b3R5cGUuYnJhY2VFeHBhbmQgPSBicmFjZUV4cGFuZFxuXG5mdW5jdGlvbiBicmFjZUV4cGFuZCAocGF0dGVybiwgb3B0aW9ucykge1xuICBpZiAoIW9wdGlvbnMpIHtcbiAgICBpZiAodGhpcyBpbnN0YW5jZW9mIE1pbmltYXRjaCkge1xuICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9uc1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zID0ge31cbiAgICB9XG4gIH1cblxuICBwYXR0ZXJuID0gdHlwZW9mIHBhdHRlcm4gPT09ICd1bmRlZmluZWQnXG4gICAgPyB0aGlzLnBhdHRlcm4gOiBwYXR0ZXJuXG5cbiAgYXNzZXJ0VmFsaWRQYXR0ZXJuKHBhdHRlcm4pXG5cbiAgLy8gVGhhbmtzIHRvIFlldGluZyBMaSA8aHR0cHM6Ly9naXRodWIuY29tL3lldGluZ2xpPiBmb3JcbiAgLy8gaW1wcm92aW5nIHRoaXMgcmVnZXhwIHRvIGF2b2lkIGEgUmVET1MgdnVsbmVyYWJpbGl0eS5cbiAgaWYgKG9wdGlvbnMubm9icmFjZSB8fCAhL1xceyg/Oig/IVxceykuKSpcXH0vLnRlc3QocGF0dGVybikpIHtcbiAgICAvLyBzaG9ydGN1dC4gbm8gbmVlZCB0byBleHBhbmQuXG4gICAgcmV0dXJuIFtwYXR0ZXJuXVxuICB9XG5cbiAgcmV0dXJuIGV4cGFuZChwYXR0ZXJuKVxufVxuXG52YXIgTUFYX1BBVFRFUk5fTEVOR1RIID0gMTAyNCAqIDY0XG52YXIgYXNzZXJ0VmFsaWRQYXR0ZXJuID0gZnVuY3Rpb24gKHBhdHRlcm4pIHtcbiAgaWYgKHR5cGVvZiBwYXR0ZXJuICE9PSAnc3RyaW5nJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgcGF0dGVybicpXG4gIH1cblxuICBpZiAocGF0dGVybi5sZW5ndGggPiBNQVhfUEFUVEVSTl9MRU5HVEgpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdwYXR0ZXJuIGlzIHRvbyBsb25nJylcbiAgfVxufVxuXG4vLyBwYXJzZSBhIGNvbXBvbmVudCBvZiB0aGUgZXhwYW5kZWQgc2V0LlxuLy8gQXQgdGhpcyBwb2ludCwgbm8gcGF0dGVybiBtYXkgY29udGFpbiBcIi9cIiBpbiBpdFxuLy8gc28gd2UncmUgZ29pbmcgdG8gcmV0dXJuIGEgMmQgYXJyYXksIHdoZXJlIGVhY2ggZW50cnkgaXMgdGhlIGZ1bGxcbi8vIHBhdHRlcm4sIHNwbGl0IG9uICcvJywgYW5kIHRoZW4gdHVybmVkIGludG8gYSByZWd1bGFyIGV4cHJlc3Npb24uXG4vLyBBIHJlZ2V4cCBpcyBtYWRlIGF0IHRoZSBlbmQgd2hpY2ggam9pbnMgZWFjaCBhcnJheSB3aXRoIGFuXG4vLyBlc2NhcGVkIC8sIGFuZCBhbm90aGVyIGZ1bGwgb25lIHdoaWNoIGpvaW5zIGVhY2ggcmVnZXhwIHdpdGggfC5cbi8vXG4vLyBGb2xsb3dpbmcgdGhlIGxlYWQgb2YgQmFzaCA0LjEsIG5vdGUgdGhhdCBcIioqXCIgb25seSBoYXMgc3BlY2lhbCBtZWFuaW5nXG4vLyB3aGVuIGl0IGlzIHRoZSAqb25seSogdGhpbmcgaW4gYSBwYXRoIHBvcnRpb24uICBPdGhlcndpc2UsIGFueSBzZXJpZXNcbi8vIG9mICogaXMgZXF1aXZhbGVudCB0byBhIHNpbmdsZSAqLiAgR2xvYnN0YXIgYmVoYXZpb3IgaXMgZW5hYmxlZCBieVxuLy8gZGVmYXVsdCwgYW5kIGNhbiBiZSBkaXNhYmxlZCBieSBzZXR0aW5nIG9wdGlvbnMubm9nbG9ic3Rhci5cbk1pbmltYXRjaC5wcm90b3R5cGUucGFyc2UgPSBwYXJzZVxudmFyIFNVQlBBUlNFID0ge31cbmZ1bmN0aW9uIHBhcnNlIChwYXR0ZXJuLCBpc1N1Yikge1xuICBhc3NlcnRWYWxpZFBhdHRlcm4ocGF0dGVybilcblxuICB2YXIgb3B0aW9ucyA9IHRoaXMub3B0aW9uc1xuXG4gIC8vIHNob3J0Y3V0c1xuICBpZiAocGF0dGVybiA9PT0gJyoqJykge1xuICAgIGlmICghb3B0aW9ucy5ub2dsb2JzdGFyKVxuICAgICAgcmV0dXJuIEdMT0JTVEFSXG4gICAgZWxzZVxuICAgICAgcGF0dGVybiA9ICcqJ1xuICB9XG4gIGlmIChwYXR0ZXJuID09PSAnJykgcmV0dXJuICcnXG5cbiAgdmFyIHJlID0gJydcbiAgdmFyIGhhc01hZ2ljID0gISFvcHRpb25zLm5vY2FzZVxuICB2YXIgZXNjYXBpbmcgPSBmYWxzZVxuICAvLyA/ID0+IG9uZSBzaW5nbGUgY2hhcmFjdGVyXG4gIHZhciBwYXR0ZXJuTGlzdFN0YWNrID0gW11cbiAgdmFyIG5lZ2F0aXZlTGlzdHMgPSBbXVxuICB2YXIgc3RhdGVDaGFyXG4gIHZhciBpbkNsYXNzID0gZmFsc2VcbiAgdmFyIHJlQ2xhc3NTdGFydCA9IC0xXG4gIHZhciBjbGFzc1N0YXJ0ID0gLTFcbiAgLy8gLiBhbmQgLi4gbmV2ZXIgbWF0Y2ggYW55dGhpbmcgdGhhdCBkb2Vzbid0IHN0YXJ0IHdpdGggLixcbiAgLy8gZXZlbiB3aGVuIG9wdGlvbnMuZG90IGlzIHNldC5cbiAgdmFyIHBhdHRlcm5TdGFydCA9IHBhdHRlcm4uY2hhckF0KDApID09PSAnLicgPyAnJyAvLyBhbnl0aGluZ1xuICAvLyBub3QgKHN0YXJ0IG9yIC8gZm9sbG93ZWQgYnkgLiBvciAuLiBmb2xsb3dlZCBieSAvIG9yIGVuZClcbiAgOiBvcHRpb25zLmRvdCA/ICcoPyEoPzpefFxcXFxcXC8pXFxcXC57MSwyfSg/OiR8XFxcXFxcLykpJ1xuICA6ICcoPyFcXFxcLiknXG4gIHZhciBzZWxmID0gdGhpc1xuXG4gIGZ1bmN0aW9uIGNsZWFyU3RhdGVDaGFyICgpIHtcbiAgICBpZiAoc3RhdGVDaGFyKSB7XG4gICAgICAvLyB3ZSBoYWQgc29tZSBzdGF0ZS10cmFja2luZyBjaGFyYWN0ZXJcbiAgICAgIC8vIHRoYXQgd2Fzbid0IGNvbnN1bWVkIGJ5IHRoaXMgcGFzcy5cbiAgICAgIHN3aXRjaCAoc3RhdGVDaGFyKSB7XG4gICAgICAgIGNhc2UgJyonOlxuICAgICAgICAgIHJlICs9IHN0YXJcbiAgICAgICAgICBoYXNNYWdpYyA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAnPyc6XG4gICAgICAgICAgcmUgKz0gcW1hcmtcbiAgICAgICAgICBoYXNNYWdpYyA9IHRydWVcbiAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZSArPSAnXFxcXCcgKyBzdGF0ZUNoYXJcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHNlbGYuZGVidWcoJ2NsZWFyU3RhdGVDaGFyICVqICVqJywgc3RhdGVDaGFyLCByZSlcbiAgICAgIHN0YXRlQ2hhciA9IGZhbHNlXG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHBhdHRlcm4ubGVuZ3RoLCBjXG4gICAgOyAoaSA8IGxlbikgJiYgKGMgPSBwYXR0ZXJuLmNoYXJBdChpKSlcbiAgICA7IGkrKykge1xuICAgIHRoaXMuZGVidWcoJyVzXFx0JXMgJXMgJWonLCBwYXR0ZXJuLCBpLCByZSwgYylcblxuICAgIC8vIHNraXAgb3ZlciBhbnkgdGhhdCBhcmUgZXNjYXBlZC5cbiAgICBpZiAoZXNjYXBpbmcgJiYgcmVTcGVjaWFsc1tjXSkge1xuICAgICAgcmUgKz0gJ1xcXFwnICsgY1xuICAgICAgZXNjYXBpbmcgPSBmYWxzZVxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGMpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBjYXNlICcvJzoge1xuICAgICAgICAvLyBjb21wbGV0ZWx5IG5vdCBhbGxvd2VkLCBldmVuIGVzY2FwZWQuXG4gICAgICAgIC8vIFNob3VsZCBhbHJlYWR5IGJlIHBhdGgtc3BsaXQgYnkgbm93LlxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY2FzZSAnXFxcXCc6XG4gICAgICAgIGNsZWFyU3RhdGVDaGFyKClcbiAgICAgICAgZXNjYXBpbmcgPSB0cnVlXG4gICAgICBjb250aW51ZVxuXG4gICAgICAvLyB0aGUgdmFyaW91cyBzdGF0ZUNoYXIgdmFsdWVzXG4gICAgICAvLyBmb3IgdGhlIFwiZXh0Z2xvYlwiIHN0dWZmLlxuICAgICAgY2FzZSAnPyc6XG4gICAgICBjYXNlICcqJzpcbiAgICAgIGNhc2UgJysnOlxuICAgICAgY2FzZSAnQCc6XG4gICAgICBjYXNlICchJzpcbiAgICAgICAgdGhpcy5kZWJ1ZygnJXNcXHQlcyAlcyAlaiA8LS0gc3RhdGVDaGFyJywgcGF0dGVybiwgaSwgcmUsIGMpXG5cbiAgICAgICAgLy8gYWxsIG9mIHRob3NlIGFyZSBsaXRlcmFscyBpbnNpZGUgYSBjbGFzcywgZXhjZXB0IHRoYXRcbiAgICAgICAgLy8gdGhlIGdsb2IgWyFhXSBtZWFucyBbXmFdIGluIHJlZ2V4cFxuICAgICAgICBpZiAoaW5DbGFzcykge1xuICAgICAgICAgIHRoaXMuZGVidWcoJyAgaW4gY2xhc3MnKVxuICAgICAgICAgIGlmIChjID09PSAnIScgJiYgaSA9PT0gY2xhc3NTdGFydCArIDEpIGMgPSAnXidcbiAgICAgICAgICByZSArPSBjXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIHdlIGFscmVhZHkgaGF2ZSBhIHN0YXRlQ2hhciwgdGhlbiBpdCBtZWFuc1xuICAgICAgICAvLyB0aGF0IHRoZXJlIHdhcyBzb21ldGhpbmcgbGlrZSAqKiBvciArPyBpbiB0aGVyZS5cbiAgICAgICAgLy8gSGFuZGxlIHRoZSBzdGF0ZUNoYXIsIHRoZW4gcHJvY2VlZCB3aXRoIHRoaXMgb25lLlxuICAgICAgICBzZWxmLmRlYnVnKCdjYWxsIGNsZWFyU3RhdGVDaGFyICVqJywgc3RhdGVDaGFyKVxuICAgICAgICBjbGVhclN0YXRlQ2hhcigpXG4gICAgICAgIHN0YXRlQ2hhciA9IGNcbiAgICAgICAgLy8gaWYgZXh0Z2xvYiBpcyBkaXNhYmxlZCwgdGhlbiArKGFzZGZ8Zm9vKSBpc24ndCBhIHRoaW5nLlxuICAgICAgICAvLyBqdXN0IGNsZWFyIHRoZSBzdGF0ZWNoYXIgKm5vdyosIHJhdGhlciB0aGFuIGV2ZW4gZGl2aW5nIGludG9cbiAgICAgICAgLy8gdGhlIHBhdHRlcm5MaXN0IHN0dWZmLlxuICAgICAgICBpZiAob3B0aW9ucy5ub2V4dCkgY2xlYXJTdGF0ZUNoYXIoKVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSAnKCc6XG4gICAgICAgIGlmIChpbkNsYXNzKSB7XG4gICAgICAgICAgcmUgKz0gJygnXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3RhdGVDaGFyKSB7XG4gICAgICAgICAgcmUgKz0gJ1xcXFwoJ1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBwYXR0ZXJuTGlzdFN0YWNrLnB1c2goe1xuICAgICAgICAgIHR5cGU6IHN0YXRlQ2hhcixcbiAgICAgICAgICBzdGFydDogaSAtIDEsXG4gICAgICAgICAgcmVTdGFydDogcmUubGVuZ3RoLFxuICAgICAgICAgIG9wZW46IHBsVHlwZXNbc3RhdGVDaGFyXS5vcGVuLFxuICAgICAgICAgIGNsb3NlOiBwbFR5cGVzW3N0YXRlQ2hhcl0uY2xvc2VcbiAgICAgICAgfSlcbiAgICAgICAgLy8gbmVnYXRpb24gaXMgKD86KD8hanMpW14vXSopXG4gICAgICAgIHJlICs9IHN0YXRlQ2hhciA9PT0gJyEnID8gJyg/Oig/ISg/OicgOiAnKD86J1xuICAgICAgICB0aGlzLmRlYnVnKCdwbFR5cGUgJWogJWonLCBzdGF0ZUNoYXIsIHJlKVxuICAgICAgICBzdGF0ZUNoYXIgPSBmYWxzZVxuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSAnKSc6XG4gICAgICAgIGlmIChpbkNsYXNzIHx8ICFwYXR0ZXJuTGlzdFN0YWNrLmxlbmd0aCkge1xuICAgICAgICAgIHJlICs9ICdcXFxcKSdcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgY2xlYXJTdGF0ZUNoYXIoKVxuICAgICAgICBoYXNNYWdpYyA9IHRydWVcbiAgICAgICAgdmFyIHBsID0gcGF0dGVybkxpc3RTdGFjay5wb3AoKVxuICAgICAgICAvLyBuZWdhdGlvbiBpcyAoPzooPyFqcylbXi9dKilcbiAgICAgICAgLy8gVGhlIG90aGVycyBhcmUgKD86PHBhdHRlcm4+KTx0eXBlPlxuICAgICAgICByZSArPSBwbC5jbG9zZVxuICAgICAgICBpZiAocGwudHlwZSA9PT0gJyEnKSB7XG4gICAgICAgICAgbmVnYXRpdmVMaXN0cy5wdXNoKHBsKVxuICAgICAgICB9XG4gICAgICAgIHBsLnJlRW5kID0gcmUubGVuZ3RoXG4gICAgICBjb250aW51ZVxuXG4gICAgICBjYXNlICd8JzpcbiAgICAgICAgaWYgKGluQ2xhc3MgfHwgIXBhdHRlcm5MaXN0U3RhY2subGVuZ3RoIHx8IGVzY2FwaW5nKSB7XG4gICAgICAgICAgcmUgKz0gJ1xcXFx8J1xuICAgICAgICAgIGVzY2FwaW5nID0gZmFsc2VcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgY2xlYXJTdGF0ZUNoYXIoKVxuICAgICAgICByZSArPSAnfCdcbiAgICAgIGNvbnRpbnVlXG5cbiAgICAgIC8vIHRoZXNlIGFyZSBtb3N0bHkgdGhlIHNhbWUgaW4gcmVnZXhwIGFuZCBnbG9iXG4gICAgICBjYXNlICdbJzpcbiAgICAgICAgLy8gc3dhbGxvdyBhbnkgc3RhdGUtdHJhY2tpbmcgY2hhciBiZWZvcmUgdGhlIFtcbiAgICAgICAgY2xlYXJTdGF0ZUNoYXIoKVxuXG4gICAgICAgIGlmIChpbkNsYXNzKSB7XG4gICAgICAgICAgcmUgKz0gJ1xcXFwnICsgY1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBpbkNsYXNzID0gdHJ1ZVxuICAgICAgICBjbGFzc1N0YXJ0ID0gaVxuICAgICAgICByZUNsYXNzU3RhcnQgPSByZS5sZW5ndGhcbiAgICAgICAgcmUgKz0gY1xuICAgICAgY29udGludWVcblxuICAgICAgY2FzZSAnXSc6XG4gICAgICAgIC8vICBhIHJpZ2h0IGJyYWNrZXQgc2hhbGwgbG9zZSBpdHMgc3BlY2lhbFxuICAgICAgICAvLyAgbWVhbmluZyBhbmQgcmVwcmVzZW50IGl0c2VsZiBpblxuICAgICAgICAvLyAgYSBicmFja2V0IGV4cHJlc3Npb24gaWYgaXQgb2NjdXJzXG4gICAgICAgIC8vICBmaXJzdCBpbiB0aGUgbGlzdC4gIC0tIFBPU0lYLjIgMi44LjMuMlxuICAgICAgICBpZiAoaSA9PT0gY2xhc3NTdGFydCArIDEgfHwgIWluQ2xhc3MpIHtcbiAgICAgICAgICByZSArPSAnXFxcXCcgKyBjXG4gICAgICAgICAgZXNjYXBpbmcgPSBmYWxzZVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgbGVmdCBhIGNsYXNzIG9wZW4uXG4gICAgICAgIC8vIFwiW3otYV1cIiBpcyB2YWxpZCwgZXF1aXZhbGVudCB0byBcIlxcW3otYVxcXVwiXG4gICAgICAgIC8vIHNwbGl0IHdoZXJlIHRoZSBsYXN0IFsgd2FzLCBtYWtlIHN1cmUgd2UgZG9uJ3QgaGF2ZVxuICAgICAgICAvLyBhbiBpbnZhbGlkIHJlLiBpZiBzbywgcmUtd2FsayB0aGUgY29udGVudHMgb2YgdGhlXG4gICAgICAgIC8vIHdvdWxkLWJlIGNsYXNzIHRvIHJlLXRyYW5zbGF0ZSBhbnkgY2hhcmFjdGVycyB0aGF0XG4gICAgICAgIC8vIHdlcmUgcGFzc2VkIHRocm91Z2ggYXMtaXNcbiAgICAgICAgLy8gVE9ETzogSXQgd291bGQgcHJvYmFibHkgYmUgZmFzdGVyIHRvIGRldGVybWluZSB0aGlzXG4gICAgICAgIC8vIHdpdGhvdXQgYSB0cnkvY2F0Y2ggYW5kIGEgbmV3IFJlZ0V4cCwgYnV0IGl0J3MgdHJpY2t5XG4gICAgICAgIC8vIHRvIGRvIHNhZmVseS4gIEZvciBub3csIHRoaXMgaXMgc2FmZSBhbmQgd29ya3MuXG4gICAgICAgIHZhciBjcyA9IHBhdHRlcm4uc3Vic3RyaW5nKGNsYXNzU3RhcnQgKyAxLCBpKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIFJlZ0V4cCgnWycgKyBjcyArICddJylcbiAgICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgICAvLyBub3QgYSB2YWxpZCBjbGFzcyFcbiAgICAgICAgICB2YXIgc3AgPSB0aGlzLnBhcnNlKGNzLCBTVUJQQVJTRSlcbiAgICAgICAgICByZSA9IHJlLnN1YnN0cigwLCByZUNsYXNzU3RhcnQpICsgJ1xcXFxbJyArIHNwWzBdICsgJ1xcXFxdJ1xuICAgICAgICAgIGhhc01hZ2ljID0gaGFzTWFnaWMgfHwgc3BbMV1cbiAgICAgICAgICBpbkNsYXNzID0gZmFsc2VcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gZmluaXNoIHVwIHRoZSBjbGFzcy5cbiAgICAgICAgaGFzTWFnaWMgPSB0cnVlXG4gICAgICAgIGluQ2xhc3MgPSBmYWxzZVxuICAgICAgICByZSArPSBjXG4gICAgICBjb250aW51ZVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBzd2FsbG93IGFueSBzdGF0ZSBjaGFyIHRoYXQgd2Fzbid0IGNvbnN1bWVkXG4gICAgICAgIGNsZWFyU3RhdGVDaGFyKClcblxuICAgICAgICBpZiAoZXNjYXBpbmcpIHtcbiAgICAgICAgICAvLyBubyBuZWVkXG4gICAgICAgICAgZXNjYXBpbmcgPSBmYWxzZVxuICAgICAgICB9IGVsc2UgaWYgKHJlU3BlY2lhbHNbY11cbiAgICAgICAgICAmJiAhKGMgPT09ICdeJyAmJiBpbkNsYXNzKSkge1xuICAgICAgICAgIHJlICs9ICdcXFxcJ1xuICAgICAgICB9XG5cbiAgICAgICAgcmUgKz0gY1xuXG4gICAgfSAvLyBzd2l0Y2hcbiAgfSAvLyBmb3JcblxuICAvLyBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2UgbGVmdCBhIGNsYXNzIG9wZW4uXG4gIC8vIFwiW2FiY1wiIGlzIHZhbGlkLCBlcXVpdmFsZW50IHRvIFwiXFxbYWJjXCJcbiAgaWYgKGluQ2xhc3MpIHtcbiAgICAvLyBzcGxpdCB3aGVyZSB0aGUgbGFzdCBbIHdhcywgYW5kIGVzY2FwZSBpdFxuICAgIC8vIHRoaXMgaXMgYSBodWdlIHBpdGEuICBXZSBub3cgaGF2ZSB0byByZS13YWxrXG4gICAgLy8gdGhlIGNvbnRlbnRzIG9mIHRoZSB3b3VsZC1iZSBjbGFzcyB0byByZS10cmFuc2xhdGVcbiAgICAvLyBhbnkgY2hhcmFjdGVycyB0aGF0IHdlcmUgcGFzc2VkIHRocm91Z2ggYXMtaXNcbiAgICBjcyA9IHBhdHRlcm4uc3Vic3RyKGNsYXNzU3RhcnQgKyAxKVxuICAgIHNwID0gdGhpcy5wYXJzZShjcywgU1VCUEFSU0UpXG4gICAgcmUgPSByZS5zdWJzdHIoMCwgcmVDbGFzc1N0YXJ0KSArICdcXFxcWycgKyBzcFswXVxuICAgIGhhc01hZ2ljID0gaGFzTWFnaWMgfHwgc3BbMV1cbiAgfVxuXG4gIC8vIGhhbmRsZSB0aGUgY2FzZSB3aGVyZSB3ZSBoYWQgYSArKCB0aGluZyBhdCB0aGUgKmVuZCpcbiAgLy8gb2YgdGhlIHBhdHRlcm4uXG4gIC8vIGVhY2ggcGF0dGVybiBsaXN0IHN0YWNrIGFkZHMgMyBjaGFycywgYW5kIHdlIG5lZWQgdG8gZ28gdGhyb3VnaFxuICAvLyBhbmQgZXNjYXBlIGFueSB8IGNoYXJzIHRoYXQgd2VyZSBwYXNzZWQgdGhyb3VnaCBhcy1pcyBmb3IgdGhlIHJlZ2V4cC5cbiAgLy8gR28gdGhyb3VnaCBhbmQgZXNjYXBlIHRoZW0sIHRha2luZyBjYXJlIG5vdCB0byBkb3VibGUtZXNjYXBlIGFueVxuICAvLyB8IGNoYXJzIHRoYXQgd2VyZSBhbHJlYWR5IGVzY2FwZWQuXG4gIGZvciAocGwgPSBwYXR0ZXJuTGlzdFN0YWNrLnBvcCgpOyBwbDsgcGwgPSBwYXR0ZXJuTGlzdFN0YWNrLnBvcCgpKSB7XG4gICAgdmFyIHRhaWwgPSByZS5zbGljZShwbC5yZVN0YXJ0ICsgcGwub3Blbi5sZW5ndGgpXG4gICAgdGhpcy5kZWJ1Zygnc2V0dGluZyB0YWlsJywgcmUsIHBsKVxuICAgIC8vIG1heWJlIHNvbWUgZXZlbiBudW1iZXIgb2YgXFwsIHRoZW4gbWF5YmUgMSBcXCwgZm9sbG93ZWQgYnkgYSB8XG4gICAgdGFpbCA9IHRhaWwucmVwbGFjZSgvKCg/OlxcXFx7Mn0pezAsNjR9KShcXFxcPylcXHwvZywgZnVuY3Rpb24gKF8sICQxLCAkMikge1xuICAgICAgaWYgKCEkMikge1xuICAgICAgICAvLyB0aGUgfCBpc24ndCBhbHJlYWR5IGVzY2FwZWQsIHNvIGVzY2FwZSBpdC5cbiAgICAgICAgJDIgPSAnXFxcXCdcbiAgICAgIH1cblxuICAgICAgLy8gbmVlZCB0byBlc2NhcGUgYWxsIHRob3NlIHNsYXNoZXMgKmFnYWluKiwgd2l0aG91dCBlc2NhcGluZyB0aGVcbiAgICAgIC8vIG9uZSB0aGF0IHdlIG5lZWQgZm9yIGVzY2FwaW5nIHRoZSB8IGNoYXJhY3Rlci4gIEFzIGl0IHdvcmtzIG91dCxcbiAgICAgIC8vIGVzY2FwaW5nIGFuIGV2ZW4gbnVtYmVyIG9mIHNsYXNoZXMgY2FuIGJlIGRvbmUgYnkgc2ltcGx5IHJlcGVhdGluZ1xuICAgICAgLy8gaXQgZXhhY3RseSBhZnRlciBpdHNlbGYuICBUaGF0J3Mgd2h5IHRoaXMgdHJpY2sgd29ya3MuXG4gICAgICAvL1xuICAgICAgLy8gSSBhbSBzb3JyeSB0aGF0IHlvdSBoYXZlIHRvIHNlZSB0aGlzLlxuICAgICAgcmV0dXJuICQxICsgJDEgKyAkMiArICd8J1xuICAgIH0pXG5cbiAgICB0aGlzLmRlYnVnKCd0YWlsPSVqXFxuICAgJXMnLCB0YWlsLCB0YWlsLCBwbCwgcmUpXG4gICAgdmFyIHQgPSBwbC50eXBlID09PSAnKicgPyBzdGFyXG4gICAgICA6IHBsLnR5cGUgPT09ICc/JyA/IHFtYXJrXG4gICAgICA6ICdcXFxcJyArIHBsLnR5cGVcblxuICAgIGhhc01hZ2ljID0gdHJ1ZVxuICAgIHJlID0gcmUuc2xpY2UoMCwgcGwucmVTdGFydCkgKyB0ICsgJ1xcXFwoJyArIHRhaWxcbiAgfVxuXG4gIC8vIGhhbmRsZSB0cmFpbGluZyB0aGluZ3MgdGhhdCBvbmx5IG1hdHRlciBhdCB0aGUgdmVyeSBlbmQuXG4gIGNsZWFyU3RhdGVDaGFyKClcbiAgaWYgKGVzY2FwaW5nKSB7XG4gICAgLy8gdHJhaWxpbmcgXFxcXFxuICAgIHJlICs9ICdcXFxcXFxcXCdcbiAgfVxuXG4gIC8vIG9ubHkgbmVlZCB0byBhcHBseSB0aGUgbm9kb3Qgc3RhcnQgaWYgdGhlIHJlIHN0YXJ0cyB3aXRoXG4gIC8vIHNvbWV0aGluZyB0aGF0IGNvdWxkIGNvbmNlaXZhYmx5IGNhcHR1cmUgYSBkb3RcbiAgdmFyIGFkZFBhdHRlcm5TdGFydCA9IGZhbHNlXG4gIHN3aXRjaCAocmUuY2hhckF0KDApKSB7XG4gICAgY2FzZSAnWyc6IGNhc2UgJy4nOiBjYXNlICcoJzogYWRkUGF0dGVyblN0YXJ0ID0gdHJ1ZVxuICB9XG5cbiAgLy8gSGFjayB0byB3b3JrIGFyb3VuZCBsYWNrIG9mIG5lZ2F0aXZlIGxvb2tiZWhpbmQgaW4gSlNcbiAgLy8gQSBwYXR0ZXJuIGxpa2U6ICouISh4KS4hKHl8eikgbmVlZHMgdG8gZW5zdXJlIHRoYXQgYSBuYW1lXG4gIC8vIGxpa2UgJ2EueHl6Lnl6JyBkb2Vzbid0IG1hdGNoLiAgU28sIHRoZSBmaXJzdCBuZWdhdGl2ZVxuICAvLyBsb29rYWhlYWQsIGhhcyB0byBsb29rIEFMTCB0aGUgd2F5IGFoZWFkLCB0byB0aGUgZW5kIG9mXG4gIC8vIHRoZSBwYXR0ZXJuLlxuICBmb3IgKHZhciBuID0gbmVnYXRpdmVMaXN0cy5sZW5ndGggLSAxOyBuID4gLTE7IG4tLSkge1xuICAgIHZhciBubCA9IG5lZ2F0aXZlTGlzdHNbbl1cblxuICAgIHZhciBubEJlZm9yZSA9IHJlLnNsaWNlKDAsIG5sLnJlU3RhcnQpXG4gICAgdmFyIG5sRmlyc3QgPSByZS5zbGljZShubC5yZVN0YXJ0LCBubC5yZUVuZCAtIDgpXG4gICAgdmFyIG5sTGFzdCA9IHJlLnNsaWNlKG5sLnJlRW5kIC0gOCwgbmwucmVFbmQpXG4gICAgdmFyIG5sQWZ0ZXIgPSByZS5zbGljZShubC5yZUVuZClcblxuICAgIG5sTGFzdCArPSBubEFmdGVyXG5cbiAgICAvLyBIYW5kbGUgbmVzdGVkIHN0dWZmIGxpa2UgKigqLmpzfCEoKi5qc29uKSksIHdoZXJlIG9wZW4gcGFyZW5zXG4gICAgLy8gbWVhbiB0aGF0IHdlIHNob3VsZCAqbm90KiBpbmNsdWRlIHRoZSApIGluIHRoZSBiaXQgdGhhdCBpcyBjb25zaWRlcmVkXG4gICAgLy8gXCJhZnRlclwiIHRoZSBuZWdhdGVkIHNlY3Rpb24uXG4gICAgdmFyIG9wZW5QYXJlbnNCZWZvcmUgPSBubEJlZm9yZS5zcGxpdCgnKCcpLmxlbmd0aCAtIDFcbiAgICB2YXIgY2xlYW5BZnRlciA9IG5sQWZ0ZXJcbiAgICBmb3IgKGkgPSAwOyBpIDwgb3BlblBhcmVuc0JlZm9yZTsgaSsrKSB7XG4gICAgICBjbGVhbkFmdGVyID0gY2xlYW5BZnRlci5yZXBsYWNlKC9cXClbKyo/XT8vLCAnJylcbiAgICB9XG4gICAgbmxBZnRlciA9IGNsZWFuQWZ0ZXJcblxuICAgIHZhciBkb2xsYXIgPSAnJ1xuICAgIGlmIChubEFmdGVyID09PSAnJyAmJiBpc1N1YiAhPT0gU1VCUEFSU0UpIHtcbiAgICAgIGRvbGxhciA9ICckJ1xuICAgIH1cbiAgICB2YXIgbmV3UmUgPSBubEJlZm9yZSArIG5sRmlyc3QgKyBubEFmdGVyICsgZG9sbGFyICsgbmxMYXN0XG4gICAgcmUgPSBuZXdSZVxuICB9XG5cbiAgLy8gaWYgdGhlIHJlIGlzIG5vdCBcIlwiIGF0IHRoaXMgcG9pbnQsIHRoZW4gd2UgbmVlZCB0byBtYWtlIHN1cmVcbiAgLy8gaXQgZG9lc24ndCBtYXRjaCBhZ2FpbnN0IGFuIGVtcHR5IHBhdGggcGFydC5cbiAgLy8gT3RoZXJ3aXNlIGEvKiB3aWxsIG1hdGNoIGEvLCB3aGljaCBpdCBzaG91bGQgbm90LlxuICBpZiAocmUgIT09ICcnICYmIGhhc01hZ2ljKSB7XG4gICAgcmUgPSAnKD89LiknICsgcmVcbiAgfVxuXG4gIGlmIChhZGRQYXR0ZXJuU3RhcnQpIHtcbiAgICByZSA9IHBhdHRlcm5TdGFydCArIHJlXG4gIH1cblxuICAvLyBwYXJzaW5nIGp1c3QgYSBwaWVjZSBvZiBhIGxhcmdlciBwYXR0ZXJuLlxuICBpZiAoaXNTdWIgPT09IFNVQlBBUlNFKSB7XG4gICAgcmV0dXJuIFtyZSwgaGFzTWFnaWNdXG4gIH1cblxuICAvLyBza2lwIHRoZSByZWdleHAgZm9yIG5vbi1tYWdpY2FsIHBhdHRlcm5zXG4gIC8vIHVuZXNjYXBlIGFueXRoaW5nIGluIGl0LCB0aG91Z2gsIHNvIHRoYXQgaXQnbGwgYmVcbiAgLy8gYW4gZXhhY3QgbWF0Y2ggYWdhaW5zdCBhIGZpbGUgZXRjLlxuICBpZiAoIWhhc01hZ2ljKSB7XG4gICAgcmV0dXJuIGdsb2JVbmVzY2FwZShwYXR0ZXJuKVxuICB9XG5cbiAgdmFyIGZsYWdzID0gb3B0aW9ucy5ub2Nhc2UgPyAnaScgOiAnJ1xuICB0cnkge1xuICAgIHZhciByZWdFeHAgPSBuZXcgUmVnRXhwKCdeJyArIHJlICsgJyQnLCBmbGFncylcbiAgfSBjYXRjaCAoZXIpIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gc2hvdWxkIGJlIGltcG9zc2libGUgKi8ge1xuICAgIC8vIElmIGl0IHdhcyBhbiBpbnZhbGlkIHJlZ3VsYXIgZXhwcmVzc2lvbiwgdGhlbiBpdCBjYW4ndCBtYXRjaFxuICAgIC8vIGFueXRoaW5nLiAgVGhpcyB0cmljayBsb29rcyBmb3IgYSBjaGFyYWN0ZXIgYWZ0ZXIgdGhlIGVuZCBvZlxuICAgIC8vIHRoZSBzdHJpbmcsIHdoaWNoIGlzIG9mIGNvdXJzZSBpbXBvc3NpYmxlLCBleGNlcHQgaW4gbXVsdGktbGluZVxuICAgIC8vIG1vZGUsIGJ1dCBpdCdzIG5vdCBhIC9tIHJlZ2V4LlxuICAgIHJldHVybiBuZXcgUmVnRXhwKCckLicpXG4gIH1cblxuICByZWdFeHAuX2dsb2IgPSBwYXR0ZXJuXG4gIHJlZ0V4cC5fc3JjID0gcmVcblxuICByZXR1cm4gcmVnRXhwXG59XG5cbm1pbmltYXRjaC5tYWtlUmUgPSBmdW5jdGlvbiAocGF0dGVybiwgb3B0aW9ucykge1xuICByZXR1cm4gbmV3IE1pbmltYXRjaChwYXR0ZXJuLCBvcHRpb25zIHx8IHt9KS5tYWtlUmUoKVxufVxuXG5NaW5pbWF0Y2gucHJvdG90eXBlLm1ha2VSZSA9IG1ha2VSZVxuZnVuY3Rpb24gbWFrZVJlICgpIHtcbiAgaWYgKHRoaXMucmVnZXhwIHx8IHRoaXMucmVnZXhwID09PSBmYWxzZSkgcmV0dXJuIHRoaXMucmVnZXhwXG5cbiAgLy8gYXQgdGhpcyBwb2ludCwgdGhpcy5zZXQgaXMgYSAyZCBhcnJheSBvZiBwYXJ0aWFsXG4gIC8vIHBhdHRlcm4gc3RyaW5ncywgb3IgXCIqKlwiLlxuICAvL1xuICAvLyBJdCdzIGJldHRlciB0byB1c2UgLm1hdGNoKCkuICBUaGlzIGZ1bmN0aW9uIHNob3VsZG4ndFxuICAvLyBiZSB1c2VkLCByZWFsbHksIGJ1dCBpdCdzIHByZXR0eSBjb252ZW5pZW50IHNvbWV0aW1lcyxcbiAgLy8gd2hlbiB5b3UganVzdCB3YW50IHRvIHdvcmsgd2l0aCBhIHJlZ2V4LlxuICB2YXIgc2V0ID0gdGhpcy5zZXRcblxuICBpZiAoIXNldC5sZW5ndGgpIHtcbiAgICB0aGlzLnJlZ2V4cCA9IGZhbHNlXG4gICAgcmV0dXJuIHRoaXMucmVnZXhwXG4gIH1cbiAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnNcblxuICB2YXIgdHdvU3RhciA9IG9wdGlvbnMubm9nbG9ic3RhciA/IHN0YXJcbiAgICA6IG9wdGlvbnMuZG90ID8gdHdvU3RhckRvdFxuICAgIDogdHdvU3Rhck5vRG90XG4gIHZhciBmbGFncyA9IG9wdGlvbnMubm9jYXNlID8gJ2knIDogJydcblxuICB2YXIgcmUgPSBzZXQubWFwKGZ1bmN0aW9uIChwYXR0ZXJuKSB7XG4gICAgcmV0dXJuIHBhdHRlcm4ubWFwKGZ1bmN0aW9uIChwKSB7XG4gICAgICByZXR1cm4gKHAgPT09IEdMT0JTVEFSKSA/IHR3b1N0YXJcbiAgICAgIDogKHR5cGVvZiBwID09PSAnc3RyaW5nJykgPyByZWdFeHBFc2NhcGUocClcbiAgICAgIDogcC5fc3JjXG4gICAgfSkuam9pbignXFxcXFxcLycpXG4gIH0pLmpvaW4oJ3wnKVxuXG4gIC8vIG11c3QgbWF0Y2ggZW50aXJlIHBhdHRlcm5cbiAgLy8gZW5kaW5nIGluIGEgKiBvciAqKiB3aWxsIG1ha2UgaXQgbGVzcyBzdHJpY3QuXG4gIHJlID0gJ14oPzonICsgcmUgKyAnKSQnXG5cbiAgLy8gY2FuIG1hdGNoIGFueXRoaW5nLCBhcyBsb25nIGFzIGl0J3Mgbm90IHRoaXMuXG4gIGlmICh0aGlzLm5lZ2F0ZSkgcmUgPSAnXig/IScgKyByZSArICcpLiokJ1xuXG4gIHRyeSB7XG4gICAgdGhpcy5yZWdleHAgPSBuZXcgUmVnRXhwKHJlLCBmbGFncylcbiAgfSBjYXRjaCAoZXgpIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0IC0gc2hvdWxkIGJlIGltcG9zc2libGUgKi8ge1xuICAgIHRoaXMucmVnZXhwID0gZmFsc2VcbiAgfVxuICByZXR1cm4gdGhpcy5yZWdleHBcbn1cblxubWluaW1hdGNoLm1hdGNoID0gZnVuY3Rpb24gKGxpc3QsIHBhdHRlcm4sIG9wdGlvbnMpIHtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge31cbiAgdmFyIG1tID0gbmV3IE1pbmltYXRjaChwYXR0ZXJuLCBvcHRpb25zKVxuICBsaXN0ID0gbGlzdC5maWx0ZXIoZnVuY3Rpb24gKGYpIHtcbiAgICByZXR1cm4gbW0ubWF0Y2goZilcbiAgfSlcbiAgaWYgKG1tLm9wdGlvbnMubm9udWxsICYmICFsaXN0Lmxlbmd0aCkge1xuICAgIGxpc3QucHVzaChwYXR0ZXJuKVxuICB9XG4gIHJldHVybiBsaXN0XG59XG5cbk1pbmltYXRjaC5wcm90b3R5cGUubWF0Y2ggPSBmdW5jdGlvbiBtYXRjaCAoZiwgcGFydGlhbCkge1xuICBpZiAodHlwZW9mIHBhcnRpYWwgPT09ICd1bmRlZmluZWQnKSBwYXJ0aWFsID0gdGhpcy5wYXJ0aWFsXG4gIHRoaXMuZGVidWcoJ21hdGNoJywgZiwgdGhpcy5wYXR0ZXJuKVxuICAvLyBzaG9ydC1jaXJjdWl0IGluIHRoZSBjYXNlIG9mIGJ1c3RlZCB0aGluZ3MuXG4gIC8vIGNvbW1lbnRzLCBldGMuXG4gIGlmICh0aGlzLmNvbW1lbnQpIHJldHVybiBmYWxzZVxuICBpZiAodGhpcy5lbXB0eSkgcmV0dXJuIGYgPT09ICcnXG5cbiAgaWYgKGYgPT09ICcvJyAmJiBwYXJ0aWFsKSByZXR1cm4gdHJ1ZVxuXG4gIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zXG5cbiAgLy8gd2luZG93czogbmVlZCB0byB1c2UgLywgbm90IFxcXG4gIGlmIChwYXRoLnNlcCAhPT0gJy8nKSB7XG4gICAgZiA9IGYuc3BsaXQocGF0aC5zZXApLmpvaW4oJy8nKVxuICB9XG5cbiAgLy8gdHJlYXQgdGhlIHRlc3QgcGF0aCBhcyBhIHNldCBvZiBwYXRocGFydHMuXG4gIGYgPSBmLnNwbGl0KHNsYXNoU3BsaXQpXG4gIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCAnc3BsaXQnLCBmKVxuXG4gIC8vIGp1c3QgT05FIG9mIHRoZSBwYXR0ZXJuIHNldHMgaW4gdGhpcy5zZXQgbmVlZHMgdG8gbWF0Y2hcbiAgLy8gaW4gb3JkZXIgZm9yIGl0IHRvIGJlIHZhbGlkLiAgSWYgbmVnYXRpbmcsIHRoZW4ganVzdCBvbmVcbiAgLy8gbWF0Y2ggbWVhbnMgdGhhdCB3ZSBoYXZlIGZhaWxlZC5cbiAgLy8gRWl0aGVyIHdheSwgcmV0dXJuIG9uIHRoZSBmaXJzdCBoaXQuXG5cbiAgdmFyIHNldCA9IHRoaXMuc2V0XG4gIHRoaXMuZGVidWcodGhpcy5wYXR0ZXJuLCAnc2V0Jywgc2V0KVxuXG4gIC8vIEZpbmQgdGhlIGJhc2VuYW1lIG9mIHRoZSBwYXRoIGJ5IGxvb2tpbmcgZm9yIHRoZSBsYXN0IG5vbi1lbXB0eSBzZWdtZW50XG4gIHZhciBmaWxlbmFtZVxuICB2YXIgaVxuICBmb3IgKGkgPSBmLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgZmlsZW5hbWUgPSBmW2ldXG4gICAgaWYgKGZpbGVuYW1lKSBicmVha1xuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IHNldC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBwYXR0ZXJuID0gc2V0W2ldXG4gICAgdmFyIGZpbGUgPSBmXG4gICAgaWYgKG9wdGlvbnMubWF0Y2hCYXNlICYmIHBhdHRlcm4ubGVuZ3RoID09PSAxKSB7XG4gICAgICBmaWxlID0gW2ZpbGVuYW1lXVxuICAgIH1cbiAgICB2YXIgaGl0ID0gdGhpcy5tYXRjaE9uZShmaWxlLCBwYXR0ZXJuLCBwYXJ0aWFsKVxuICAgIGlmIChoaXQpIHtcbiAgICAgIGlmIChvcHRpb25zLmZsaXBOZWdhdGUpIHJldHVybiB0cnVlXG4gICAgICByZXR1cm4gIXRoaXMubmVnYXRlXG4gICAgfVxuICB9XG5cbiAgLy8gZGlkbid0IGdldCBhbnkgaGl0cy4gIHRoaXMgaXMgc3VjY2VzcyBpZiBpdCdzIGEgbmVnYXRpdmVcbiAgLy8gcGF0dGVybiwgZmFpbHVyZSBvdGhlcndpc2UuXG4gIGlmIChvcHRpb25zLmZsaXBOZWdhdGUpIHJldHVybiBmYWxzZVxuICByZXR1cm4gdGhpcy5uZWdhdGVcbn1cblxuLy8gc2V0IHBhcnRpYWwgdG8gdHJ1ZSB0byB0ZXN0IGlmLCBmb3IgZXhhbXBsZSxcbi8vIFwiL2EvYlwiIG1hdGNoZXMgdGhlIHN0YXJ0IG9mIFwiLyovYi8qL2RcIlxuLy8gUGFydGlhbCBtZWFucywgaWYgeW91IHJ1biBvdXQgb2YgZmlsZSBiZWZvcmUgeW91IHJ1blxuLy8gb3V0IG9mIHBhdHRlcm4sIHRoZW4gdGhhdCdzIGZpbmUsIGFzIGxvbmcgYXMgYWxsXG4vLyB0aGUgcGFydHMgbWF0Y2guXG5NaW5pbWF0Y2gucHJvdG90eXBlLm1hdGNoT25lID0gZnVuY3Rpb24gKGZpbGUsIHBhdHRlcm4sIHBhcnRpYWwpIHtcbiAgdmFyIG9wdGlvbnMgPSB0aGlzLm9wdGlvbnNcblxuICB0aGlzLmRlYnVnKCdtYXRjaE9uZScsXG4gICAgeyAndGhpcyc6IHRoaXMsIGZpbGU6IGZpbGUsIHBhdHRlcm46IHBhdHRlcm4gfSlcblxuICB0aGlzLmRlYnVnKCdtYXRjaE9uZScsIGZpbGUubGVuZ3RoLCBwYXR0ZXJuLmxlbmd0aClcblxuICBmb3IgKHZhciBmaSA9IDAsXG4gICAgICBwaSA9IDAsXG4gICAgICBmbCA9IGZpbGUubGVuZ3RoLFxuICAgICAgcGwgPSBwYXR0ZXJuLmxlbmd0aFxuICAgICAgOyAoZmkgPCBmbCkgJiYgKHBpIDwgcGwpXG4gICAgICA7IGZpKyssIHBpKyspIHtcbiAgICB0aGlzLmRlYnVnKCdtYXRjaE9uZSBsb29wJylcbiAgICB2YXIgcCA9IHBhdHRlcm5bcGldXG4gICAgdmFyIGYgPSBmaWxlW2ZpXVxuXG4gICAgdGhpcy5kZWJ1ZyhwYXR0ZXJuLCBwLCBmKVxuXG4gICAgLy8gc2hvdWxkIGJlIGltcG9zc2libGUuXG4gICAgLy8gc29tZSBpbnZhbGlkIHJlZ2V4cCBzdHVmZiBpbiB0aGUgc2V0LlxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChwID09PSBmYWxzZSkgcmV0dXJuIGZhbHNlXG5cbiAgICBpZiAocCA9PT0gR0xPQlNUQVIpIHtcbiAgICAgIHRoaXMuZGVidWcoJ0dMT0JTVEFSJywgW3BhdHRlcm4sIHAsIGZdKVxuXG4gICAgICAvLyBcIioqXCJcbiAgICAgIC8vIGEvKiovYi8qKi9jIHdvdWxkIG1hdGNoIHRoZSBmb2xsb3dpbmc6XG4gICAgICAvLyBhL2IveC95L3ovY1xuICAgICAgLy8gYS94L3kvei9iL2NcbiAgICAgIC8vIGEvYi94L2IveC9jXG4gICAgICAvLyBhL2IvY1xuICAgICAgLy8gVG8gZG8gdGhpcywgdGFrZSB0aGUgcmVzdCBvZiB0aGUgcGF0dGVybiBhZnRlclxuICAgICAgLy8gdGhlICoqLCBhbmQgc2VlIGlmIGl0IHdvdWxkIG1hdGNoIHRoZSBmaWxlIHJlbWFpbmRlci5cbiAgICAgIC8vIElmIHNvLCByZXR1cm4gc3VjY2Vzcy5cbiAgICAgIC8vIElmIG5vdCwgdGhlICoqIFwic3dhbGxvd3NcIiBhIHNlZ21lbnQsIGFuZCB0cnkgYWdhaW4uXG4gICAgICAvLyBUaGlzIGlzIHJlY3Vyc2l2ZWx5IGF3ZnVsLlxuICAgICAgLy9cbiAgICAgIC8vIGEvKiovYi8qKi9jIG1hdGNoaW5nIGEvYi94L3kvei9jXG4gICAgICAvLyAtIGEgbWF0Y2hlcyBhXG4gICAgICAvLyAtIGRvdWJsZXN0YXJcbiAgICAgIC8vICAgLSBtYXRjaE9uZShiL3gveS96L2MsIGIvKiovYylcbiAgICAgIC8vICAgICAtIGIgbWF0Y2hlcyBiXG4gICAgICAvLyAgICAgLSBkb3VibGVzdGFyXG4gICAgICAvLyAgICAgICAtIG1hdGNoT25lKHgveS96L2MsIGMpIC0+IG5vXG4gICAgICAvLyAgICAgICAtIG1hdGNoT25lKHkvei9jLCBjKSAtPiBub1xuICAgICAgLy8gICAgICAgLSBtYXRjaE9uZSh6L2MsIGMpIC0+IG5vXG4gICAgICAvLyAgICAgICAtIG1hdGNoT25lKGMsIGMpIHllcywgaGl0XG4gICAgICB2YXIgZnIgPSBmaVxuICAgICAgdmFyIHByID0gcGkgKyAxXG4gICAgICBpZiAocHIgPT09IHBsKSB7XG4gICAgICAgIHRoaXMuZGVidWcoJyoqIGF0IHRoZSBlbmQnKVxuICAgICAgICAvLyBhICoqIGF0IHRoZSBlbmQgd2lsbCBqdXN0IHN3YWxsb3cgdGhlIHJlc3QuXG4gICAgICAgIC8vIFdlIGhhdmUgZm91bmQgYSBtYXRjaC5cbiAgICAgICAgLy8gaG93ZXZlciwgaXQgd2lsbCBub3Qgc3dhbGxvdyAvLngsIHVubGVzc1xuICAgICAgICAvLyBvcHRpb25zLmRvdCBpcyBzZXQuXG4gICAgICAgIC8vIC4gYW5kIC4uIGFyZSAqbmV2ZXIqIG1hdGNoZWQgYnkgKiosIGZvciBleHBsb3NpdmVseVxuICAgICAgICAvLyBleHBvbmVudGlhbCByZWFzb25zLlxuICAgICAgICBmb3IgKDsgZmkgPCBmbDsgZmkrKykge1xuICAgICAgICAgIGlmIChmaWxlW2ZpXSA9PT0gJy4nIHx8IGZpbGVbZmldID09PSAnLi4nIHx8XG4gICAgICAgICAgICAoIW9wdGlvbnMuZG90ICYmIGZpbGVbZmldLmNoYXJBdCgwKSA9PT0gJy4nKSkgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cblxuICAgICAgLy8gb2ssIGxldCdzIHNlZSBpZiB3ZSBjYW4gc3dhbGxvdyB3aGF0ZXZlciB3ZSBjYW4uXG4gICAgICB3aGlsZSAoZnIgPCBmbCkge1xuICAgICAgICB2YXIgc3dhbGxvd2VlID0gZmlsZVtmcl1cblxuICAgICAgICB0aGlzLmRlYnVnKCdcXG5nbG9ic3RhciB3aGlsZScsIGZpbGUsIGZyLCBwYXR0ZXJuLCBwciwgc3dhbGxvd2VlKVxuXG4gICAgICAgIC8vIFhYWCByZW1vdmUgdGhpcyBzbGljZS4gIEp1c3QgcGFzcyB0aGUgc3RhcnQgaW5kZXguXG4gICAgICAgIGlmICh0aGlzLm1hdGNoT25lKGZpbGUuc2xpY2UoZnIpLCBwYXR0ZXJuLnNsaWNlKHByKSwgcGFydGlhbCkpIHtcbiAgICAgICAgICB0aGlzLmRlYnVnKCdnbG9ic3RhciBmb3VuZCBtYXRjaCEnLCBmciwgZmwsIHN3YWxsb3dlZSlcbiAgICAgICAgICAvLyBmb3VuZCBhIG1hdGNoLlxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gY2FuJ3Qgc3dhbGxvdyBcIi5cIiBvciBcIi4uXCIgZXZlci5cbiAgICAgICAgICAvLyBjYW4gb25seSBzd2FsbG93IFwiLmZvb1wiIHdoZW4gZXhwbGljaXRseSBhc2tlZC5cbiAgICAgICAgICBpZiAoc3dhbGxvd2VlID09PSAnLicgfHwgc3dhbGxvd2VlID09PSAnLi4nIHx8XG4gICAgICAgICAgICAoIW9wdGlvbnMuZG90ICYmIHN3YWxsb3dlZS5jaGFyQXQoMCkgPT09ICcuJykpIHtcbiAgICAgICAgICAgIHRoaXMuZGVidWcoJ2RvdCBkZXRlY3RlZCEnLCBmaWxlLCBmciwgcGF0dGVybiwgcHIpXG4gICAgICAgICAgICBicmVha1xuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vICoqIHN3YWxsb3dzIGEgc2VnbWVudCwgYW5kIGNvbnRpbnVlLlxuICAgICAgICAgIHRoaXMuZGVidWcoJ2dsb2JzdGFyIHN3YWxsb3cgYSBzZWdtZW50LCBhbmQgY29udGludWUnKVxuICAgICAgICAgIGZyKytcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBubyBtYXRjaCB3YXMgZm91bmQuXG4gICAgICAvLyBIb3dldmVyLCBpbiBwYXJ0aWFsIG1vZGUsIHdlIGNhbid0IHNheSB0aGlzIGlzIG5lY2Vzc2FyaWx5IG92ZXIuXG4gICAgICAvLyBJZiB0aGVyZSdzIG1vcmUgKnBhdHRlcm4qIGxlZnQsIHRoZW5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKHBhcnRpYWwpIHtcbiAgICAgICAgLy8gcmFuIG91dCBvZiBmaWxlXG4gICAgICAgIHRoaXMuZGVidWcoJ1xcbj4+PiBubyBtYXRjaCwgcGFydGlhbD8nLCBmaWxlLCBmciwgcGF0dGVybiwgcHIpXG4gICAgICAgIGlmIChmciA9PT0gZmwpIHJldHVybiB0cnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBzb21ldGhpbmcgb3RoZXIgdGhhbiAqKlxuICAgIC8vIG5vbi1tYWdpYyBwYXR0ZXJucyBqdXN0IGhhdmUgdG8gbWF0Y2ggZXhhY3RseVxuICAgIC8vIHBhdHRlcm5zIHdpdGggbWFnaWMgaGF2ZSBiZWVuIHR1cm5lZCBpbnRvIHJlZ2V4cHMuXG4gICAgdmFyIGhpdFxuICAgIGlmICh0eXBlb2YgcCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGhpdCA9IGYgPT09IHBcbiAgICAgIHRoaXMuZGVidWcoJ3N0cmluZyBtYXRjaCcsIHAsIGYsIGhpdClcbiAgICB9IGVsc2Uge1xuICAgICAgaGl0ID0gZi5tYXRjaChwKVxuICAgICAgdGhpcy5kZWJ1ZygncGF0dGVybiBtYXRjaCcsIHAsIGYsIGhpdClcbiAgICB9XG5cbiAgICBpZiAoIWhpdCkgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBOb3RlOiBlbmRpbmcgaW4gLyBtZWFucyB0aGF0IHdlJ2xsIGdldCBhIGZpbmFsIFwiXCJcbiAgLy8gYXQgdGhlIGVuZCBvZiB0aGUgcGF0dGVybi4gIFRoaXMgY2FuIG9ubHkgbWF0Y2ggYVxuICAvLyBjb3JyZXNwb25kaW5nIFwiXCIgYXQgdGhlIGVuZCBvZiB0aGUgZmlsZS5cbiAgLy8gSWYgdGhlIGZpbGUgZW5kcyBpbiAvLCB0aGVuIGl0IGNhbiBvbmx5IG1hdGNoIGFcbiAgLy8gYSBwYXR0ZXJuIHRoYXQgZW5kcyBpbiAvLCB1bmxlc3MgdGhlIHBhdHRlcm4ganVzdFxuICAvLyBkb2Vzbid0IGhhdmUgYW55IG1vcmUgZm9yIGl0LiBCdXQsIGEvYi8gc2hvdWxkICpub3QqXG4gIC8vIG1hdGNoIFwiYS9iLypcIiwgZXZlbiB0aG91Z2ggXCJcIiBtYXRjaGVzIGFnYWluc3QgdGhlXG4gIC8vIFteL10qPyBwYXR0ZXJuLCBleGNlcHQgaW4gcGFydGlhbCBtb2RlLCB3aGVyZSBpdCBtaWdodFxuICAvLyBzaW1wbHkgbm90IGJlIHJlYWNoZWQgeWV0LlxuICAvLyBIb3dldmVyLCBhL2IvIHNob3VsZCBzdGlsbCBzYXRpc2Z5IGEvKlxuXG4gIC8vIG5vdyBlaXRoZXIgd2UgZmVsbCBvZmYgdGhlIGVuZCBvZiB0aGUgcGF0dGVybiwgb3Igd2UncmUgZG9uZS5cbiAgaWYgKGZpID09PSBmbCAmJiBwaSA9PT0gcGwpIHtcbiAgICAvLyByYW4gb3V0IG9mIHBhdHRlcm4gYW5kIGZpbGVuYW1lIGF0IHRoZSBzYW1lIHRpbWUuXG4gICAgLy8gYW4gZXhhY3QgaGl0IVxuICAgIHJldHVybiB0cnVlXG4gIH0gZWxzZSBpZiAoZmkgPT09IGZsKSB7XG4gICAgLy8gcmFuIG91dCBvZiBmaWxlLCBidXQgc3RpbGwgaGFkIHBhdHRlcm4gbGVmdC5cbiAgICAvLyB0aGlzIGlzIG9rIGlmIHdlJ3JlIGRvaW5nIHRoZSBtYXRjaCBhcyBwYXJ0IG9mXG4gICAgLy8gYSBnbG9iIGZzIHRyYXZlcnNhbC5cbiAgICByZXR1cm4gcGFydGlhbFxuICB9IGVsc2UgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi8gaWYgKHBpID09PSBwbCkge1xuICAgIC8vIHJhbiBvdXQgb2YgcGF0dGVybiwgc3RpbGwgaGF2ZSBmaWxlIGxlZnQuXG4gICAgLy8gdGhpcyBpcyBvbmx5IGFjY2VwdGFibGUgaWYgd2UncmUgb24gdGhlIHZlcnkgbGFzdFxuICAgIC8vIGVtcHR5IHNlZ21lbnQgb2YgYSBmaWxlIHdpdGggYSB0cmFpbGluZyBzbGFzaC5cbiAgICAvLyBhLyogc2hvdWxkIG1hdGNoIGEvYi9cbiAgICByZXR1cm4gKGZpID09PSBmbCAtIDEpICYmIChmaWxlW2ZpXSA9PT0gJycpXG4gIH1cblxuICAvLyBzaG91bGQgYmUgdW5yZWFjaGFibGUuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIHRocm93IG5ldyBFcnJvcignd3RmPycpXG59XG5cbi8vIHJlcGxhY2Ugc3R1ZmYgbGlrZSBcXCogd2l0aCAqXG5mdW5jdGlvbiBnbG9iVW5lc2NhcGUgKHMpIHtcbiAgcmV0dXJuIHMucmVwbGFjZSgvXFxcXCguKS9nLCAnJDEnKVxufVxuXG5mdW5jdGlvbiByZWdFeHBFc2NhcGUgKHMpIHtcbiAgcmV0dXJuIHMucmVwbGFjZSgvWy1bXFxde30oKSorPy4sXFxcXF4kfCNcXHNdL2csICdcXFxcJCYnKVxufVxuIiwiLy8gJ3BhdGgnIG1vZHVsZSBleHRyYWN0ZWQgZnJvbSBOb2RlLmpzIHY4LjExLjEgKG9ubHkgdGhlIHBvc2l4IHBhcnQpXG4vLyB0cmFuc3BsaXRlZCB3aXRoIEJhYmVsXG5cbi8vIENvcHlyaWdodCBKb3llbnQsIEluYy4gYW5kIG90aGVyIE5vZGUgY29udHJpYnV0b3JzLlxuLy9cbi8vIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhXG4vLyBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlXG4vLyBcIlNvZnR3YXJlXCIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmdcbi8vIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCxcbi8vIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXRcbi8vIHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZVxuLy8gZm9sbG93aW5nIGNvbmRpdGlvbnM6XG4vL1xuLy8gVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWRcbi8vIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLlxuLy9cbi8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Ncbi8vIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0Zcbi8vIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gSU5cbi8vIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLFxuLy8gREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SXG4vLyBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFXG4vLyBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuXG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIGFzc2VydFBhdGgocGF0aCkge1xuICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGF0aCBtdXN0IGJlIGEgc3RyaW5nLiBSZWNlaXZlZCAnICsgSlNPTi5zdHJpbmdpZnkocGF0aCkpO1xuICB9XG59XG5cbi8vIFJlc29sdmVzIC4gYW5kIC4uIGVsZW1lbnRzIGluIGEgcGF0aCB3aXRoIGRpcmVjdG9yeSBuYW1lc1xuZnVuY3Rpb24gbm9ybWFsaXplU3RyaW5nUG9zaXgocGF0aCwgYWxsb3dBYm92ZVJvb3QpIHtcbiAgdmFyIHJlcyA9ICcnO1xuICB2YXIgbGFzdFNlZ21lbnRMZW5ndGggPSAwO1xuICB2YXIgbGFzdFNsYXNoID0gLTE7XG4gIHZhciBkb3RzID0gMDtcbiAgdmFyIGNvZGU7XG4gIGZvciAodmFyIGkgPSAwOyBpIDw9IHBhdGgubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoaSA8IHBhdGgubGVuZ3RoKVxuICAgICAgY29kZSA9IHBhdGguY2hhckNvZGVBdChpKTtcbiAgICBlbHNlIGlmIChjb2RlID09PSA0NyAvKi8qLylcbiAgICAgIGJyZWFrO1xuICAgIGVsc2VcbiAgICAgIGNvZGUgPSA0NyAvKi8qLztcbiAgICBpZiAoY29kZSA9PT0gNDcgLyovKi8pIHtcbiAgICAgIGlmIChsYXN0U2xhc2ggPT09IGkgLSAxIHx8IGRvdHMgPT09IDEpIHtcbiAgICAgICAgLy8gTk9PUFxuICAgICAgfSBlbHNlIGlmIChsYXN0U2xhc2ggIT09IGkgLSAxICYmIGRvdHMgPT09IDIpIHtcbiAgICAgICAgaWYgKHJlcy5sZW5ndGggPCAyIHx8IGxhc3RTZWdtZW50TGVuZ3RoICE9PSAyIHx8IHJlcy5jaGFyQ29kZUF0KHJlcy5sZW5ndGggLSAxKSAhPT0gNDYgLyouKi8gfHwgcmVzLmNoYXJDb2RlQXQocmVzLmxlbmd0aCAtIDIpICE9PSA0NiAvKi4qLykge1xuICAgICAgICAgIGlmIChyZXMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgdmFyIGxhc3RTbGFzaEluZGV4ID0gcmVzLmxhc3RJbmRleE9mKCcvJyk7XG4gICAgICAgICAgICBpZiAobGFzdFNsYXNoSW5kZXggIT09IHJlcy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgIGlmIChsYXN0U2xhc2hJbmRleCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICByZXMgPSAnJztcbiAgICAgICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDA7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmVzID0gcmVzLnNsaWNlKDAsIGxhc3RTbGFzaEluZGV4KTtcbiAgICAgICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IHJlcy5sZW5ndGggLSAxIC0gcmVzLmxhc3RJbmRleE9mKCcvJyk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbGFzdFNsYXNoID0gaTtcbiAgICAgICAgICAgICAgZG90cyA9IDA7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAocmVzLmxlbmd0aCA9PT0gMiB8fCByZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICByZXMgPSAnJztcbiAgICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMDtcbiAgICAgICAgICAgIGxhc3RTbGFzaCA9IGk7XG4gICAgICAgICAgICBkb3RzID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoYWxsb3dBYm92ZVJvb3QpIHtcbiAgICAgICAgICBpZiAocmVzLmxlbmd0aCA+IDApXG4gICAgICAgICAgICByZXMgKz0gJy8uLic7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgcmVzID0gJy4uJztcbiAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChyZXMubGVuZ3RoID4gMClcbiAgICAgICAgICByZXMgKz0gJy8nICsgcGF0aC5zbGljZShsYXN0U2xhc2ggKyAxLCBpKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgIHJlcyA9IHBhdGguc2xpY2UobGFzdFNsYXNoICsgMSwgaSk7XG4gICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gaSAtIGxhc3RTbGFzaCAtIDE7XG4gICAgICB9XG4gICAgICBsYXN0U2xhc2ggPSBpO1xuICAgICAgZG90cyA9IDA7XG4gICAgfSBlbHNlIGlmIChjb2RlID09PSA0NiAvKi4qLyAmJiBkb3RzICE9PSAtMSkge1xuICAgICAgKytkb3RzO1xuICAgIH0gZWxzZSB7XG4gICAgICBkb3RzID0gLTE7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXM7XG59XG5cbmZ1bmN0aW9uIF9mb3JtYXQoc2VwLCBwYXRoT2JqZWN0KSB7XG4gIHZhciBkaXIgPSBwYXRoT2JqZWN0LmRpciB8fCBwYXRoT2JqZWN0LnJvb3Q7XG4gIHZhciBiYXNlID0gcGF0aE9iamVjdC5iYXNlIHx8IChwYXRoT2JqZWN0Lm5hbWUgfHwgJycpICsgKHBhdGhPYmplY3QuZXh0IHx8ICcnKTtcbiAgaWYgKCFkaXIpIHtcbiAgICByZXR1cm4gYmFzZTtcbiAgfVxuICBpZiAoZGlyID09PSBwYXRoT2JqZWN0LnJvb3QpIHtcbiAgICByZXR1cm4gZGlyICsgYmFzZTtcbiAgfVxuICByZXR1cm4gZGlyICsgc2VwICsgYmFzZTtcbn1cblxudmFyIHBvc2l4ID0ge1xuICAvLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoKSB7XG4gICAgdmFyIHJlc29sdmVkUGF0aCA9ICcnO1xuICAgIHZhciByZXNvbHZlZEFic29sdXRlID0gZmFsc2U7XG4gICAgdmFyIGN3ZDtcblxuICAgIGZvciAodmFyIGkgPSBhcmd1bWVudHMubGVuZ3RoIC0gMTsgaSA+PSAtMSAmJiAhcmVzb2x2ZWRBYnNvbHV0ZTsgaS0tKSB7XG4gICAgICB2YXIgcGF0aDtcbiAgICAgIGlmIChpID49IDApXG4gICAgICAgIHBhdGggPSBhcmd1bWVudHNbaV07XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKGN3ZCA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgIGN3ZCA9IHByb2Nlc3MuY3dkKCk7XG4gICAgICAgIHBhdGggPSBjd2Q7XG4gICAgICB9XG5cbiAgICAgIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgICAgIC8vIFNraXAgZW1wdHkgZW50cmllc1xuICAgICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICByZXNvbHZlZFBhdGggPSBwYXRoICsgJy8nICsgcmVzb2x2ZWRQYXRoO1xuICAgICAgcmVzb2x2ZWRBYnNvbHV0ZSA9IHBhdGguY2hhckNvZGVBdCgwKSA9PT0gNDcgLyovKi87XG4gICAgfVxuXG4gICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgcGF0aCBzaG91bGQgYmUgcmVzb2x2ZWQgdG8gYSBmdWxsIGFic29sdXRlIHBhdGgsIGJ1dFxuICAgIC8vIGhhbmRsZSByZWxhdGl2ZSBwYXRocyB0byBiZSBzYWZlIChtaWdodCBoYXBwZW4gd2hlbiBwcm9jZXNzLmN3ZCgpIGZhaWxzKVxuXG4gICAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gICAgcmVzb2x2ZWRQYXRoID0gbm9ybWFsaXplU3RyaW5nUG9zaXgocmVzb2x2ZWRQYXRoLCAhcmVzb2x2ZWRBYnNvbHV0ZSk7XG5cbiAgICBpZiAocmVzb2x2ZWRBYnNvbHV0ZSkge1xuICAgICAgaWYgKHJlc29sdmVkUGF0aC5sZW5ndGggPiAwKVxuICAgICAgICByZXR1cm4gJy8nICsgcmVzb2x2ZWRQYXRoO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4gJy8nO1xuICAgIH0gZWxzZSBpZiAocmVzb2x2ZWRQYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiByZXNvbHZlZFBhdGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAnLic7XG4gICAgfVxuICB9LFxuXG4gIG5vcm1hbGl6ZTogZnVuY3Rpb24gbm9ybWFsaXplKHBhdGgpIHtcbiAgICBhc3NlcnRQYXRoKHBhdGgpO1xuXG4gICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSByZXR1cm4gJy4nO1xuXG4gICAgdmFyIGlzQWJzb2x1dGUgPSBwYXRoLmNoYXJDb2RlQXQoMCkgPT09IDQ3IC8qLyovO1xuICAgIHZhciB0cmFpbGluZ1NlcGFyYXRvciA9IHBhdGguY2hhckNvZGVBdChwYXRoLmxlbmd0aCAtIDEpID09PSA0NyAvKi8qLztcblxuICAgIC8vIE5vcm1hbGl6ZSB0aGUgcGF0aFxuICAgIHBhdGggPSBub3JtYWxpemVTdHJpbmdQb3NpeChwYXRoLCAhaXNBYnNvbHV0ZSk7XG5cbiAgICBpZiAocGF0aC5sZW5ndGggPT09IDAgJiYgIWlzQWJzb2x1dGUpIHBhdGggPSAnLic7XG4gICAgaWYgKHBhdGgubGVuZ3RoID4gMCAmJiB0cmFpbGluZ1NlcGFyYXRvcikgcGF0aCArPSAnLyc7XG5cbiAgICBpZiAoaXNBYnNvbHV0ZSkgcmV0dXJuICcvJyArIHBhdGg7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH0sXG5cbiAgaXNBYnNvbHV0ZTogZnVuY3Rpb24gaXNBYnNvbHV0ZShwYXRoKSB7XG4gICAgYXNzZXJ0UGF0aChwYXRoKTtcbiAgICByZXR1cm4gcGF0aC5sZW5ndGggPiAwICYmIHBhdGguY2hhckNvZGVBdCgwKSA9PT0gNDcgLyovKi87XG4gIH0sXG5cbiAgam9pbjogZnVuY3Rpb24gam9pbigpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMClcbiAgICAgIHJldHVybiAnLic7XG4gICAgdmFyIGpvaW5lZDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7ICsraSkge1xuICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgIGFzc2VydFBhdGgoYXJnKTtcbiAgICAgIGlmIChhcmcubGVuZ3RoID4gMCkge1xuICAgICAgICBpZiAoam9pbmVkID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgam9pbmVkID0gYXJnO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgam9pbmVkICs9ICcvJyArIGFyZztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGpvaW5lZCA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuICcuJztcbiAgICByZXR1cm4gcG9zaXgubm9ybWFsaXplKGpvaW5lZCk7XG4gIH0sXG5cbiAgcmVsYXRpdmU6IGZ1bmN0aW9uIHJlbGF0aXZlKGZyb20sIHRvKSB7XG4gICAgYXNzZXJ0UGF0aChmcm9tKTtcbiAgICBhc3NlcnRQYXRoKHRvKTtcblxuICAgIGlmIChmcm9tID09PSB0bykgcmV0dXJuICcnO1xuXG4gICAgZnJvbSA9IHBvc2l4LnJlc29sdmUoZnJvbSk7XG4gICAgdG8gPSBwb3NpeC5yZXNvbHZlKHRvKTtcblxuICAgIGlmIChmcm9tID09PSB0bykgcmV0dXJuICcnO1xuXG4gICAgLy8gVHJpbSBhbnkgbGVhZGluZyBiYWNrc2xhc2hlc1xuICAgIHZhciBmcm9tU3RhcnQgPSAxO1xuICAgIGZvciAoOyBmcm9tU3RhcnQgPCBmcm9tLmxlbmd0aDsgKytmcm9tU3RhcnQpIHtcbiAgICAgIGlmIChmcm9tLmNoYXJDb2RlQXQoZnJvbVN0YXJ0KSAhPT0gNDcgLyovKi8pXG4gICAgICAgIGJyZWFrO1xuICAgIH1cbiAgICB2YXIgZnJvbUVuZCA9IGZyb20ubGVuZ3RoO1xuICAgIHZhciBmcm9tTGVuID0gZnJvbUVuZCAtIGZyb21TdGFydDtcblxuICAgIC8vIFRyaW0gYW55IGxlYWRpbmcgYmFja3NsYXNoZXNcbiAgICB2YXIgdG9TdGFydCA9IDE7XG4gICAgZm9yICg7IHRvU3RhcnQgPCB0by5sZW5ndGg7ICsrdG9TdGFydCkge1xuICAgICAgaWYgKHRvLmNoYXJDb2RlQXQodG9TdGFydCkgIT09IDQ3IC8qLyovKVxuICAgICAgICBicmVhaztcbiAgICB9XG4gICAgdmFyIHRvRW5kID0gdG8ubGVuZ3RoO1xuICAgIHZhciB0b0xlbiA9IHRvRW5kIC0gdG9TdGFydDtcblxuICAgIC8vIENvbXBhcmUgcGF0aHMgdG8gZmluZCB0aGUgbG9uZ2VzdCBjb21tb24gcGF0aCBmcm9tIHJvb3RcbiAgICB2YXIgbGVuZ3RoID0gZnJvbUxlbiA8IHRvTGVuID8gZnJvbUxlbiA6IHRvTGVuO1xuICAgIHZhciBsYXN0Q29tbW9uU2VwID0gLTE7XG4gICAgdmFyIGkgPSAwO1xuICAgIGZvciAoOyBpIDw9IGxlbmd0aDsgKytpKSB7XG4gICAgICBpZiAoaSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgIGlmICh0b0xlbiA+IGxlbmd0aCkge1xuICAgICAgICAgIGlmICh0by5jaGFyQ29kZUF0KHRvU3RhcnQgKyBpKSA9PT0gNDcgLyovKi8pIHtcbiAgICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGBmcm9tYCBpcyB0aGUgZXhhY3QgYmFzZSBwYXRoIGZvciBgdG9gLlxuICAgICAgICAgICAgLy8gRm9yIGV4YW1wbGU6IGZyb209Jy9mb28vYmFyJzsgdG89Jy9mb28vYmFyL2JheidcbiAgICAgICAgICAgIHJldHVybiB0by5zbGljZSh0b1N0YXJ0ICsgaSArIDEpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgLy8gV2UgZ2V0IGhlcmUgaWYgYGZyb21gIGlzIHRoZSByb290XG4gICAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nLyc7IHRvPScvZm9vJ1xuICAgICAgICAgICAgcmV0dXJuIHRvLnNsaWNlKHRvU3RhcnQgKyBpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoZnJvbUxlbiA+IGxlbmd0aCkge1xuICAgICAgICAgIGlmIChmcm9tLmNoYXJDb2RlQXQoZnJvbVN0YXJ0ICsgaSkgPT09IDQ3IC8qLyovKSB7XG4gICAgICAgICAgICAvLyBXZSBnZXQgaGVyZSBpZiBgdG9gIGlzIHRoZSBleGFjdCBiYXNlIHBhdGggZm9yIGBmcm9tYC5cbiAgICAgICAgICAgIC8vIEZvciBleGFtcGxlOiBmcm9tPScvZm9vL2Jhci9iYXonOyB0bz0nL2Zvby9iYXInXG4gICAgICAgICAgICBsYXN0Q29tbW9uU2VwID0gaTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgIC8vIFdlIGdldCBoZXJlIGlmIGB0b2AgaXMgdGhlIHJvb3QuXG4gICAgICAgICAgICAvLyBGb3IgZXhhbXBsZTogZnJvbT0nL2Zvbyc7IHRvPScvJ1xuICAgICAgICAgICAgbGFzdENvbW1vblNlcCA9IDA7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgdmFyIGZyb21Db2RlID0gZnJvbS5jaGFyQ29kZUF0KGZyb21TdGFydCArIGkpO1xuICAgICAgdmFyIHRvQ29kZSA9IHRvLmNoYXJDb2RlQXQodG9TdGFydCArIGkpO1xuICAgICAgaWYgKGZyb21Db2RlICE9PSB0b0NvZGUpXG4gICAgICAgIGJyZWFrO1xuICAgICAgZWxzZSBpZiAoZnJvbUNvZGUgPT09IDQ3IC8qLyovKVxuICAgICAgICBsYXN0Q29tbW9uU2VwID0gaTtcbiAgICB9XG5cbiAgICB2YXIgb3V0ID0gJyc7XG4gICAgLy8gR2VuZXJhdGUgdGhlIHJlbGF0aXZlIHBhdGggYmFzZWQgb24gdGhlIHBhdGggZGlmZmVyZW5jZSBiZXR3ZWVuIGB0b2BcbiAgICAvLyBhbmQgYGZyb21gXG4gICAgZm9yIChpID0gZnJvbVN0YXJ0ICsgbGFzdENvbW1vblNlcCArIDE7IGkgPD0gZnJvbUVuZDsgKytpKSB7XG4gICAgICBpZiAoaSA9PT0gZnJvbUVuZCB8fCBmcm9tLmNoYXJDb2RlQXQoaSkgPT09IDQ3IC8qLyovKSB7XG4gICAgICAgIGlmIChvdXQubGVuZ3RoID09PSAwKVxuICAgICAgICAgIG91dCArPSAnLi4nO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgb3V0ICs9ICcvLi4nO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIExhc3RseSwgYXBwZW5kIHRoZSByZXN0IG9mIHRoZSBkZXN0aW5hdGlvbiAoYHRvYCkgcGF0aCB0aGF0IGNvbWVzIGFmdGVyXG4gICAgLy8gdGhlIGNvbW1vbiBwYXRoIHBhcnRzXG4gICAgaWYgKG91dC5sZW5ndGggPiAwKVxuICAgICAgcmV0dXJuIG91dCArIHRvLnNsaWNlKHRvU3RhcnQgKyBsYXN0Q29tbW9uU2VwKTtcbiAgICBlbHNlIHtcbiAgICAgIHRvU3RhcnQgKz0gbGFzdENvbW1vblNlcDtcbiAgICAgIGlmICh0by5jaGFyQ29kZUF0KHRvU3RhcnQpID09PSA0NyAvKi8qLylcbiAgICAgICAgKyt0b1N0YXJ0O1xuICAgICAgcmV0dXJuIHRvLnNsaWNlKHRvU3RhcnQpO1xuICAgIH1cbiAgfSxcblxuICBfbWFrZUxvbmc6IGZ1bmN0aW9uIF9tYWtlTG9uZyhwYXRoKSB7XG4gICAgcmV0dXJuIHBhdGg7XG4gIH0sXG5cbiAgZGlybmFtZTogZnVuY3Rpb24gZGlybmFtZShwYXRoKSB7XG4gICAgYXNzZXJ0UGF0aChwYXRoKTtcbiAgICBpZiAocGF0aC5sZW5ndGggPT09IDApIHJldHVybiAnLic7XG4gICAgdmFyIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoMCk7XG4gICAgdmFyIGhhc1Jvb3QgPSBjb2RlID09PSA0NyAvKi8qLztcbiAgICB2YXIgZW5kID0gLTE7XG4gICAgdmFyIG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gICAgZm9yICh2YXIgaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAxOyAtLWkpIHtcbiAgICAgIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSk7XG4gICAgICBpZiAoY29kZSA9PT0gNDcgLyovKi8pIHtcbiAgICAgICAgICBpZiAoIW1hdGNoZWRTbGFzaCkge1xuICAgICAgICAgICAgZW5kID0gaTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3JcbiAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVuZCA9PT0gLTEpIHJldHVybiBoYXNSb290ID8gJy8nIDogJy4nO1xuICAgIGlmIChoYXNSb290ICYmIGVuZCA9PT0gMSkgcmV0dXJuICcvLyc7XG4gICAgcmV0dXJuIHBhdGguc2xpY2UoMCwgZW5kKTtcbiAgfSxcblxuICBiYXNlbmFtZTogZnVuY3Rpb24gYmFzZW5hbWUocGF0aCwgZXh0KSB7XG4gICAgaWYgKGV4dCAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiBleHQgIT09ICdzdHJpbmcnKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImV4dFwiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgICBhc3NlcnRQYXRoKHBhdGgpO1xuXG4gICAgdmFyIHN0YXJ0ID0gMDtcbiAgICB2YXIgZW5kID0gLTE7XG4gICAgdmFyIG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gICAgdmFyIGk7XG5cbiAgICBpZiAoZXh0ICE9PSB1bmRlZmluZWQgJiYgZXh0Lmxlbmd0aCA+IDAgJiYgZXh0Lmxlbmd0aCA8PSBwYXRoLmxlbmd0aCkge1xuICAgICAgaWYgKGV4dC5sZW5ndGggPT09IHBhdGgubGVuZ3RoICYmIGV4dCA9PT0gcGF0aCkgcmV0dXJuICcnO1xuICAgICAgdmFyIGV4dElkeCA9IGV4dC5sZW5ndGggLSAxO1xuICAgICAgdmFyIGZpcnN0Tm9uU2xhc2hFbmQgPSAtMTtcbiAgICAgIGZvciAoaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjb2RlID09PSA0NyAvKi8qLykge1xuICAgICAgICAgICAgLy8gSWYgd2UgcmVhY2hlZCBhIHBhdGggc2VwYXJhdG9yIHRoYXQgd2FzIG5vdCBwYXJ0IG9mIGEgc2V0IG9mIHBhdGhcbiAgICAgICAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgICAgICAgaWYgKCFtYXRjaGVkU2xhc2gpIHtcbiAgICAgICAgICAgICAgc3RhcnQgPSBpICsgMTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoZmlyc3ROb25TbGFzaEVuZCA9PT0gLTEpIHtcbiAgICAgICAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCByZW1lbWJlciB0aGlzIGluZGV4IGluIGNhc2VcbiAgICAgICAgICAgIC8vIHdlIG5lZWQgaXQgaWYgdGhlIGV4dGVuc2lvbiBlbmRzIHVwIG5vdCBtYXRjaGluZ1xuICAgICAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICAgICAgICBmaXJzdE5vblNsYXNoRW5kID0gaSArIDE7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChleHRJZHggPj0gMCkge1xuICAgICAgICAgICAgLy8gVHJ5IHRvIG1hdGNoIHRoZSBleHBsaWNpdCBleHRlbnNpb25cbiAgICAgICAgICAgIGlmIChjb2RlID09PSBleHQuY2hhckNvZGVBdChleHRJZHgpKSB7XG4gICAgICAgICAgICAgIGlmICgtLWV4dElkeCA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAvLyBXZSBtYXRjaGVkIHRoZSBleHRlbnNpb24sIHNvIG1hcmsgdGhpcyBhcyB0aGUgZW5kIG9mIG91ciBwYXRoXG4gICAgICAgICAgICAgICAgLy8gY29tcG9uZW50XG4gICAgICAgICAgICAgICAgZW5kID0gaTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgLy8gRXh0ZW5zaW9uIGRvZXMgbm90IG1hdGNoLCBzbyBvdXIgcmVzdWx0IGlzIHRoZSBlbnRpcmUgcGF0aFxuICAgICAgICAgICAgICAvLyBjb21wb25lbnRcbiAgICAgICAgICAgICAgZXh0SWR4ID0gLTE7XG4gICAgICAgICAgICAgIGVuZCA9IGZpcnN0Tm9uU2xhc2hFbmQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGFydCA9PT0gZW5kKSBlbmQgPSBmaXJzdE5vblNsYXNoRW5kO2Vsc2UgaWYgKGVuZCA9PT0gLTEpIGVuZCA9IHBhdGgubGVuZ3RoO1xuICAgICAgcmV0dXJuIHBhdGguc2xpY2Uoc3RhcnQsIGVuZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZvciAoaSA9IHBhdGgubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgaWYgKHBhdGguY2hhckNvZGVBdChpKSA9PT0gNDcgLyovKi8pIHtcbiAgICAgICAgICAgIC8vIElmIHdlIHJlYWNoZWQgYSBwYXRoIHNlcGFyYXRvciB0aGF0IHdhcyBub3QgcGFydCBvZiBhIHNldCBvZiBwYXRoXG4gICAgICAgICAgICAvLyBzZXBhcmF0b3JzIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZywgc3RvcCBub3dcbiAgICAgICAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7XG4gICAgICAgICAgICAgIHN0YXJ0ID0gaSArIDE7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAoZW5kID09PSAtMSkge1xuICAgICAgICAgIC8vIFdlIHNhdyB0aGUgZmlyc3Qgbm9uLXBhdGggc2VwYXJhdG9yLCBtYXJrIHRoaXMgYXMgdGhlIGVuZCBvZiBvdXJcbiAgICAgICAgICAvLyBwYXRoIGNvbXBvbmVudFxuICAgICAgICAgIG1hdGNoZWRTbGFzaCA9IGZhbHNlO1xuICAgICAgICAgIGVuZCA9IGkgKyAxO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChlbmQgPT09IC0xKSByZXR1cm4gJyc7XG4gICAgICByZXR1cm4gcGF0aC5zbGljZShzdGFydCwgZW5kKTtcbiAgICB9XG4gIH0sXG5cbiAgZXh0bmFtZTogZnVuY3Rpb24gZXh0bmFtZShwYXRoKSB7XG4gICAgYXNzZXJ0UGF0aChwYXRoKTtcbiAgICB2YXIgc3RhcnREb3QgPSAtMTtcbiAgICB2YXIgc3RhcnRQYXJ0ID0gMDtcbiAgICB2YXIgZW5kID0gLTE7XG4gICAgdmFyIG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gICAgLy8gVHJhY2sgdGhlIHN0YXRlIG9mIGNoYXJhY3RlcnMgKGlmIGFueSkgd2Ugc2VlIGJlZm9yZSBvdXIgZmlyc3QgZG90IGFuZFxuICAgIC8vIGFmdGVyIGFueSBwYXRoIHNlcGFyYXRvciB3ZSBmaW5kXG4gICAgdmFyIHByZURvdFN0YXRlID0gMDtcbiAgICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdmFyIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSk7XG4gICAgICBpZiAoY29kZSA9PT0gNDcgLyovKi8pIHtcbiAgICAgICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7XG4gICAgICAgICAgICBzdGFydFBhcnQgPSBpICsgMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgaWYgKGVuZCA9PT0gLTEpIHtcbiAgICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3IsIG1hcmsgdGhpcyBhcyB0aGUgZW5kIG9mIG91clxuICAgICAgICAvLyBleHRlbnNpb25cbiAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICAgIGVuZCA9IGkgKyAxO1xuICAgICAgfVxuICAgICAgaWYgKGNvZGUgPT09IDQ2IC8qLiovKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyBvdXIgZmlyc3QgZG90LCBtYXJrIGl0IGFzIHRoZSBzdGFydCBvZiBvdXIgZXh0ZW5zaW9uXG4gICAgICAgICAgaWYgKHN0YXJ0RG90ID09PSAtMSlcbiAgICAgICAgICAgIHN0YXJ0RG90ID0gaTtcbiAgICAgICAgICBlbHNlIGlmIChwcmVEb3RTdGF0ZSAhPT0gMSlcbiAgICAgICAgICAgIHByZURvdFN0YXRlID0gMTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhcnREb3QgIT09IC0xKSB7XG4gICAgICAgIC8vIFdlIHNhdyBhIG5vbi1kb3QgYW5kIG5vbi1wYXRoIHNlcGFyYXRvciBiZWZvcmUgb3VyIGRvdCwgc28gd2Ugc2hvdWxkXG4gICAgICAgIC8vIGhhdmUgYSBnb29kIGNoYW5jZSBhdCBoYXZpbmcgYSBub24tZW1wdHkgZXh0ZW5zaW9uXG4gICAgICAgIHByZURvdFN0YXRlID0gLTE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0RG90ID09PSAtMSB8fCBlbmQgPT09IC0xIHx8XG4gICAgICAgIC8vIFdlIHNhdyBhIG5vbi1kb3QgY2hhcmFjdGVyIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZG90XG4gICAgICAgIHByZURvdFN0YXRlID09PSAwIHx8XG4gICAgICAgIC8vIFRoZSAocmlnaHQtbW9zdCkgdHJpbW1lZCBwYXRoIGNvbXBvbmVudCBpcyBleGFjdGx5ICcuLidcbiAgICAgICAgcHJlRG90U3RhdGUgPT09IDEgJiYgc3RhcnREb3QgPT09IGVuZCAtIDEgJiYgc3RhcnREb3QgPT09IHN0YXJ0UGFydCArIDEpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHBhdGguc2xpY2Uoc3RhcnREb3QsIGVuZCk7XG4gIH0sXG5cbiAgZm9ybWF0OiBmdW5jdGlvbiBmb3JtYXQocGF0aE9iamVjdCkge1xuICAgIGlmIChwYXRoT2JqZWN0ID09PSBudWxsIHx8IHR5cGVvZiBwYXRoT2JqZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwicGF0aE9iamVjdFwiIGFyZ3VtZW50IG11c3QgYmUgb2YgdHlwZSBPYmplY3QuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiBwYXRoT2JqZWN0KTtcbiAgICB9XG4gICAgcmV0dXJuIF9mb3JtYXQoJy8nLCBwYXRoT2JqZWN0KTtcbiAgfSxcblxuICBwYXJzZTogZnVuY3Rpb24gcGFyc2UocGF0aCkge1xuICAgIGFzc2VydFBhdGgocGF0aCk7XG5cbiAgICB2YXIgcmV0ID0geyByb290OiAnJywgZGlyOiAnJywgYmFzZTogJycsIGV4dDogJycsIG5hbWU6ICcnIH07XG4gICAgaWYgKHBhdGgubGVuZ3RoID09PSAwKSByZXR1cm4gcmV0O1xuICAgIHZhciBjb2RlID0gcGF0aC5jaGFyQ29kZUF0KDApO1xuICAgIHZhciBpc0Fic29sdXRlID0gY29kZSA9PT0gNDcgLyovKi87XG4gICAgdmFyIHN0YXJ0O1xuICAgIGlmIChpc0Fic29sdXRlKSB7XG4gICAgICByZXQucm9vdCA9ICcvJztcbiAgICAgIHN0YXJ0ID0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnQgPSAwO1xuICAgIH1cbiAgICB2YXIgc3RhcnREb3QgPSAtMTtcbiAgICB2YXIgc3RhcnRQYXJ0ID0gMDtcbiAgICB2YXIgZW5kID0gLTE7XG4gICAgdmFyIG1hdGNoZWRTbGFzaCA9IHRydWU7XG4gICAgdmFyIGkgPSBwYXRoLmxlbmd0aCAtIDE7XG5cbiAgICAvLyBUcmFjayB0aGUgc3RhdGUgb2YgY2hhcmFjdGVycyAoaWYgYW55KSB3ZSBzZWUgYmVmb3JlIG91ciBmaXJzdCBkb3QgYW5kXG4gICAgLy8gYWZ0ZXIgYW55IHBhdGggc2VwYXJhdG9yIHdlIGZpbmRcbiAgICB2YXIgcHJlRG90U3RhdGUgPSAwO1xuXG4gICAgLy8gR2V0IG5vbi1kaXIgaW5mb1xuICAgIGZvciAoOyBpID49IHN0YXJ0OyAtLWkpIHtcbiAgICAgIGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSk7XG4gICAgICBpZiAoY29kZSA9PT0gNDcgLyovKi8pIHtcbiAgICAgICAgICAvLyBJZiB3ZSByZWFjaGVkIGEgcGF0aCBzZXBhcmF0b3IgdGhhdCB3YXMgbm90IHBhcnQgb2YgYSBzZXQgb2YgcGF0aFxuICAgICAgICAgIC8vIHNlcGFyYXRvcnMgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nLCBzdG9wIG5vd1xuICAgICAgICAgIGlmICghbWF0Y2hlZFNsYXNoKSB7XG4gICAgICAgICAgICBzdGFydFBhcnQgPSBpICsgMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgaWYgKGVuZCA9PT0gLTEpIHtcbiAgICAgICAgLy8gV2Ugc2F3IHRoZSBmaXJzdCBub24tcGF0aCBzZXBhcmF0b3IsIG1hcmsgdGhpcyBhcyB0aGUgZW5kIG9mIG91clxuICAgICAgICAvLyBleHRlbnNpb25cbiAgICAgICAgbWF0Y2hlZFNsYXNoID0gZmFsc2U7XG4gICAgICAgIGVuZCA9IGkgKyAxO1xuICAgICAgfVxuICAgICAgaWYgKGNvZGUgPT09IDQ2IC8qLiovKSB7XG4gICAgICAgICAgLy8gSWYgdGhpcyBpcyBvdXIgZmlyc3QgZG90LCBtYXJrIGl0IGFzIHRoZSBzdGFydCBvZiBvdXIgZXh0ZW5zaW9uXG4gICAgICAgICAgaWYgKHN0YXJ0RG90ID09PSAtMSkgc3RhcnREb3QgPSBpO2Vsc2UgaWYgKHByZURvdFN0YXRlICE9PSAxKSBwcmVEb3RTdGF0ZSA9IDE7XG4gICAgICAgIH0gZWxzZSBpZiAoc3RhcnREb3QgIT09IC0xKSB7XG4gICAgICAgIC8vIFdlIHNhdyBhIG5vbi1kb3QgYW5kIG5vbi1wYXRoIHNlcGFyYXRvciBiZWZvcmUgb3VyIGRvdCwgc28gd2Ugc2hvdWxkXG4gICAgICAgIC8vIGhhdmUgYSBnb29kIGNoYW5jZSBhdCBoYXZpbmcgYSBub24tZW1wdHkgZXh0ZW5zaW9uXG4gICAgICAgIHByZURvdFN0YXRlID0gLTE7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN0YXJ0RG90ID09PSAtMSB8fCBlbmQgPT09IC0xIHx8XG4gICAgLy8gV2Ugc2F3IGEgbm9uLWRvdCBjaGFyYWN0ZXIgaW1tZWRpYXRlbHkgYmVmb3JlIHRoZSBkb3RcbiAgICBwcmVEb3RTdGF0ZSA9PT0gMCB8fFxuICAgIC8vIFRoZSAocmlnaHQtbW9zdCkgdHJpbW1lZCBwYXRoIGNvbXBvbmVudCBpcyBleGFjdGx5ICcuLidcbiAgICBwcmVEb3RTdGF0ZSA9PT0gMSAmJiBzdGFydERvdCA9PT0gZW5kIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSkge1xuICAgICAgaWYgKGVuZCAhPT0gLTEpIHtcbiAgICAgICAgaWYgKHN0YXJ0UGFydCA9PT0gMCAmJiBpc0Fic29sdXRlKSByZXQuYmFzZSA9IHJldC5uYW1lID0gcGF0aC5zbGljZSgxLCBlbmQpO2Vsc2UgcmV0LmJhc2UgPSByZXQubmFtZSA9IHBhdGguc2xpY2Uoc3RhcnRQYXJ0LCBlbmQpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoc3RhcnRQYXJ0ID09PSAwICYmIGlzQWJzb2x1dGUpIHtcbiAgICAgICAgcmV0Lm5hbWUgPSBwYXRoLnNsaWNlKDEsIHN0YXJ0RG90KTtcbiAgICAgICAgcmV0LmJhc2UgPSBwYXRoLnNsaWNlKDEsIGVuZCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXQubmFtZSA9IHBhdGguc2xpY2Uoc3RhcnRQYXJ0LCBzdGFydERvdCk7XG4gICAgICAgIHJldC5iYXNlID0gcGF0aC5zbGljZShzdGFydFBhcnQsIGVuZCk7XG4gICAgICB9XG4gICAgICByZXQuZXh0ID0gcGF0aC5zbGljZShzdGFydERvdCwgZW5kKTtcbiAgICB9XG5cbiAgICBpZiAoc3RhcnRQYXJ0ID4gMCkgcmV0LmRpciA9IHBhdGguc2xpY2UoMCwgc3RhcnRQYXJ0IC0gMSk7ZWxzZSBpZiAoaXNBYnNvbHV0ZSkgcmV0LmRpciA9ICcvJztcblxuICAgIHJldHVybiByZXQ7XG4gIH0sXG5cbiAgc2VwOiAnLycsXG4gIGRlbGltaXRlcjogJzonLFxuICB3aW4zMjogbnVsbCxcbiAgcG9zaXg6IG51bGxcbn07XG5cbnBvc2l4LnBvc2l4ID0gcG9zaXg7XG5cbm1vZHVsZS5leHBvcnRzID0gcG9zaXg7XG4iLCIvLyBzaGltIGZvciB1c2luZyBwcm9jZXNzIGluIGJyb3dzZXJcbnZhciBwcm9jZXNzID0gbW9kdWxlLmV4cG9ydHMgPSB7fTtcblxuLy8gY2FjaGVkIGZyb20gd2hhdGV2ZXIgZ2xvYmFsIGlzIHByZXNlbnQgc28gdGhhdCB0ZXN0IHJ1bm5lcnMgdGhhdCBzdHViIGl0XG4vLyBkb24ndCBicmVhayB0aGluZ3MuICBCdXQgd2UgbmVlZCB0byB3cmFwIGl0IGluIGEgdHJ5IGNhdGNoIGluIGNhc2UgaXQgaXNcbi8vIHdyYXBwZWQgaW4gc3RyaWN0IG1vZGUgY29kZSB3aGljaCBkb2Vzbid0IGRlZmluZSBhbnkgZ2xvYmFscy4gIEl0J3MgaW5zaWRlIGFcbi8vIGZ1bmN0aW9uIGJlY2F1c2UgdHJ5L2NhdGNoZXMgZGVvcHRpbWl6ZSBpbiBjZXJ0YWluIGVuZ2luZXMuXG5cbnZhciBjYWNoZWRTZXRUaW1lb3V0O1xudmFyIGNhY2hlZENsZWFyVGltZW91dDtcblxuZnVuY3Rpb24gZGVmYXVsdFNldFRpbW91dCgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRDbGVhclRpbWVvdXQgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignY2xlYXJUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG4oZnVuY3Rpb24gKCkge1xuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2V0VGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2xlYXJUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBkZWZhdWx0Q2xlYXJUaW1lb3V0O1xuICAgIH1cbn0gKCkpXG5mdW5jdGlvbiBydW5UaW1lb3V0KGZ1bikge1xuICAgIGlmIChjYWNoZWRTZXRUaW1lb3V0ID09PSBzZXRUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICAvLyBpZiBzZXRUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkU2V0VGltZW91dCA9PT0gZGVmYXVsdFNldFRpbW91dCB8fCAhY2FjaGVkU2V0VGltZW91dCkgJiYgc2V0VGltZW91dCkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dChmdW4sIDApO1xuICAgIH0gY2F0Y2goZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwobnVsbCwgZnVuLCAwKTtcbiAgICAgICAgfSBjYXRjaChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yXG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKHRoaXMsIGZ1biwgMCk7XG4gICAgICAgIH1cbiAgICB9XG5cblxufVxuZnVuY3Rpb24gcnVuQ2xlYXJUaW1lb3V0KG1hcmtlcikge1xuICAgIGlmIChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGNsZWFyVGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICAvLyBpZiBjbGVhclRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRDbGVhclRpbWVvdXQgPT09IGRlZmF1bHRDbGVhclRpbWVvdXQgfHwgIWNhY2hlZENsZWFyVGltZW91dCkgJiYgY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgcmV0dXJuIGNsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCAgdHJ1c3QgdGhlIGdsb2JhbCBvYmplY3Qgd2hlbiBjYWxsZWQgbm9ybWFsbHlcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbChudWxsLCBtYXJrZXIpO1xuICAgICAgICB9IGNhdGNoIChlKXtcbiAgICAgICAgICAgIC8vIHNhbWUgYXMgYWJvdmUgYnV0IHdoZW4gaXQncyBhIHZlcnNpb24gb2YgSS5FLiB0aGF0IG11c3QgaGF2ZSB0aGUgZ2xvYmFsIG9iamVjdCBmb3IgJ3RoaXMnLCBob3BmdWxseSBvdXIgY29udGV4dCBjb3JyZWN0IG90aGVyd2lzZSBpdCB3aWxsIHRocm93IGEgZ2xvYmFsIGVycm9yLlxuICAgICAgICAgICAgLy8gU29tZSB2ZXJzaW9ucyBvZiBJLkUuIGhhdmUgZGlmZmVyZW50IHJ1bGVzIGZvciBjbGVhclRpbWVvdXQgdnMgc2V0VGltZW91dFxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKHRoaXMsIG1hcmtlcik7XG4gICAgICAgIH1cbiAgICB9XG5cblxuXG59XG52YXIgcXVldWUgPSBbXTtcbnZhciBkcmFpbmluZyA9IGZhbHNlO1xudmFyIGN1cnJlbnRRdWV1ZTtcbnZhciBxdWV1ZUluZGV4ID0gLTE7XG5cbmZ1bmN0aW9uIGNsZWFuVXBOZXh0VGljaygpIHtcbiAgICBpZiAoIWRyYWluaW5nIHx8ICFjdXJyZW50UXVldWUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIGlmIChjdXJyZW50UXVldWUubGVuZ3RoKSB7XG4gICAgICAgIHF1ZXVlID0gY3VycmVudFF1ZXVlLmNvbmNhdChxdWV1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgIH1cbiAgICBpZiAocXVldWUubGVuZ3RoKSB7XG4gICAgICAgIGRyYWluUXVldWUoKTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIGRyYWluUXVldWUoKSB7XG4gICAgaWYgKGRyYWluaW5nKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIHRpbWVvdXQgPSBydW5UaW1lb3V0KGNsZWFuVXBOZXh0VGljayk7XG4gICAgZHJhaW5pbmcgPSB0cnVlO1xuXG4gICAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB3aGlsZShsZW4pIHtcbiAgICAgICAgY3VycmVudFF1ZXVlID0gcXVldWU7XG4gICAgICAgIHF1ZXVlID0gW107XG4gICAgICAgIHdoaWxlICgrK3F1ZXVlSW5kZXggPCBsZW4pIHtcbiAgICAgICAgICAgIGlmIChjdXJyZW50UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50UXVldWVbcXVldWVJbmRleF0ucnVuKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcXVldWVJbmRleCA9IC0xO1xuICAgICAgICBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgfVxuICAgIGN1cnJlbnRRdWV1ZSA9IG51bGw7XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBydW5DbGVhclRpbWVvdXQodGltZW91dCk7XG59XG5cbnByb2Nlc3MubmV4dFRpY2sgPSBmdW5jdGlvbiAoZnVuKSB7XG4gICAgdmFyIGFyZ3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aCAtIDEpO1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgYXJnc1tpIC0gMV0gPSBhcmd1bWVudHNbaV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcXVldWUucHVzaChuZXcgSXRlbShmdW4sIGFyZ3MpKTtcbiAgICBpZiAocXVldWUubGVuZ3RoID09PSAxICYmICFkcmFpbmluZykge1xuICAgICAgICBydW5UaW1lb3V0KGRyYWluUXVldWUpO1xuICAgIH1cbn07XG5cbi8vIHY4IGxpa2VzIHByZWRpY3RpYmxlIG9iamVjdHNcbmZ1bmN0aW9uIEl0ZW0oZnVuLCBhcnJheSkge1xuICAgIHRoaXMuZnVuID0gZnVuO1xuICAgIHRoaXMuYXJyYXkgPSBhcnJheTtcbn1cbkl0ZW0ucHJvdG90eXBlLnJ1biA9IGZ1bmN0aW9uICgpIHtcbiAgICB0aGlzLmZ1bi5hcHBseShudWxsLCB0aGlzLmFycmF5KTtcbn07XG5wcm9jZXNzLnRpdGxlID0gJ2Jyb3dzZXInO1xucHJvY2Vzcy5icm93c2VyID0gdHJ1ZTtcbnByb2Nlc3MuZW52ID0ge307XG5wcm9jZXNzLmFyZ3YgPSBbXTtcbnByb2Nlc3MudmVyc2lvbiA9ICcnOyAvLyBlbXB0eSBzdHJpbmcgdG8gYXZvaWQgcmVnZXhwIGlzc3Vlc1xucHJvY2Vzcy52ZXJzaW9ucyA9IHt9O1xuXG5mdW5jdGlvbiBub29wKCkge31cblxucHJvY2Vzcy5vbiA9IG5vb3A7XG5wcm9jZXNzLmFkZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3Mub25jZSA9IG5vb3A7XG5wcm9jZXNzLm9mZiA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUxpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlQWxsTGlzdGVuZXJzID0gbm9vcDtcbnByb2Nlc3MuZW1pdCA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnByZXBlbmRPbmNlTGlzdGVuZXIgPSBub29wO1xuXG5wcm9jZXNzLmxpc3RlbmVycyA9IGZ1bmN0aW9uIChuYW1lKSB7IHJldHVybiBbXSB9XG5cbnByb2Nlc3MuYmluZGluZyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcblxucHJvY2Vzcy5jd2QgPSBmdW5jdGlvbiAoKSB7IHJldHVybiAnLycgfTtcbnByb2Nlc3MuY2hkaXIgPSBmdW5jdGlvbiAoZGlyKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5wcm9jZXNzLnVtYXNrID0gZnVuY3Rpb24oKSB7IHJldHVybiAwOyB9O1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbmNvbnN0IHtcbiAgc3RyaW5nSGludHMsXG4gIG51bWJlckhpbnRzXG59ID0gcmVxdWlyZShcIi4vdXRpbC9oaW50c1wiKTtcbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwianNvbi1zY2hlbWFcIikuSlNPTlNjaGVtYTZ9IEpTT05TY2hlbWE2ICovXG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwianNvbi1zY2hlbWFcIikuSlNPTlNjaGVtYTd9IEpTT05TY2hlbWE3ICovXG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi92YWxpZGF0ZVwiKS5TY2hlbWF9IFNjaGVtYSAqL1xuXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4vdmFsaWRhdGVcIikuVmFsaWRhdGlvbkVycm9yQ29uZmlndXJhdGlvbn0gVmFsaWRhdGlvbkVycm9yQ29uZmlndXJhdGlvbiAqL1xuXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4vdmFsaWRhdGVcIikuUG9zdEZvcm1hdHRlcn0gUG9zdEZvcm1hdHRlciAqL1xuXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4vdmFsaWRhdGVcIikuU2NoZW1hVXRpbEVycm9yT2JqZWN0fSBTY2hlbWFVdGlsRXJyb3JPYmplY3QgKi9cblxuLyoqIEBlbnVtIHtudW1iZXJ9ICovXG5cblxuY29uc3QgU1BFQ0lGSUNJVFkgPSB7XG4gIHR5cGU6IDEsXG4gIG5vdDogMSxcbiAgb25lT2Y6IDEsXG4gIGFueU9mOiAxLFxuICBpZjogMSxcbiAgZW51bTogMSxcbiAgY29uc3Q6IDEsXG4gIGluc3RhbmNlb2Y6IDEsXG4gIHJlcXVpcmVkOiAyLFxuICBwYXR0ZXJuOiAyLFxuICBwYXR0ZXJuUmVxdWlyZWQ6IDIsXG4gIGZvcm1hdDogMixcbiAgZm9ybWF0TWluaW11bTogMixcbiAgZm9ybWF0TWF4aW11bTogMixcbiAgbWluaW11bTogMixcbiAgZXhjbHVzaXZlTWluaW11bTogMixcbiAgbWF4aW11bTogMixcbiAgZXhjbHVzaXZlTWF4aW11bTogMixcbiAgbXVsdGlwbGVPZjogMixcbiAgdW5pcXVlSXRlbXM6IDIsXG4gIGNvbnRhaW5zOiAyLFxuICBtaW5MZW5ndGg6IDIsXG4gIG1heExlbmd0aDogMixcbiAgbWluSXRlbXM6IDIsXG4gIG1heEl0ZW1zOiAyLFxuICBtaW5Qcm9wZXJ0aWVzOiAyLFxuICBtYXhQcm9wZXJ0aWVzOiAyLFxuICBkZXBlbmRlbmNpZXM6IDIsXG4gIHByb3BlcnR5TmFtZXM6IDIsXG4gIGFkZGl0aW9uYWxJdGVtczogMixcbiAgYWRkaXRpb25hbFByb3BlcnRpZXM6IDIsXG4gIGFic29sdXRlUGF0aDogMlxufTtcbi8qKlxuICpcbiAqIEBwYXJhbSB7QXJyYXk8U2NoZW1hVXRpbEVycm9yT2JqZWN0Pn0gYXJyYXlcbiAqIEBwYXJhbSB7KGl0ZW06IFNjaGVtYVV0aWxFcnJvck9iamVjdCkgPT4gbnVtYmVyfSBmblxuICogQHJldHVybnMge0FycmF5PFNjaGVtYVV0aWxFcnJvck9iamVjdD59XG4gKi9cblxuZnVuY3Rpb24gZmlsdGVyTWF4KGFycmF5LCBmbikge1xuICBjb25zdCBldmFsdWF0ZWRNYXggPSBhcnJheS5yZWR1Y2UoKG1heCwgaXRlbSkgPT4gTWF0aC5tYXgobWF4LCBmbihpdGVtKSksIDApO1xuICByZXR1cm4gYXJyYXkuZmlsdGVyKGl0ZW0gPT4gZm4oaXRlbSkgPT09IGV2YWx1YXRlZE1heCk7XG59XG4vKipcbiAqXG4gKiBAcGFyYW0ge0FycmF5PFNjaGVtYVV0aWxFcnJvck9iamVjdD59IGNoaWxkcmVuXG4gKiBAcmV0dXJucyB7QXJyYXk8U2NoZW1hVXRpbEVycm9yT2JqZWN0Pn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGZpbHRlckNoaWxkcmVuKGNoaWxkcmVuKSB7XG4gIGxldCBuZXdDaGlsZHJlbiA9IGNoaWxkcmVuO1xuICBuZXdDaGlsZHJlbiA9IGZpbHRlck1heChuZXdDaGlsZHJlbixcbiAgLyoqXG4gICAqXG4gICAqIEBwYXJhbSB7U2NoZW1hVXRpbEVycm9yT2JqZWN0fSBlcnJvclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZXJyb3IgPT4gZXJyb3IuZGF0YVBhdGggPyBlcnJvci5kYXRhUGF0aC5sZW5ndGggOiAwKTtcbiAgbmV3Q2hpbGRyZW4gPSBmaWx0ZXJNYXgobmV3Q2hpbGRyZW4sXG4gIC8qKlxuICAgKiBAcGFyYW0ge1NjaGVtYVV0aWxFcnJvck9iamVjdH0gZXJyb3JcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG4gIGVycm9yID0+IFNQRUNJRklDSVRZW1xuICAvKiogQHR5cGUge2tleW9mIHR5cGVvZiBTUEVDSUZJQ0lUWX0gKi9cbiAgZXJyb3Iua2V5d29yZF0gfHwgMik7XG4gIHJldHVybiBuZXdDaGlsZHJlbjtcbn1cbi8qKlxuICogRmluZCBhbGwgY2hpbGRyZW4gZXJyb3JzXG4gKiBAcGFyYW0ge0FycmF5PFNjaGVtYVV0aWxFcnJvck9iamVjdD59IGNoaWxkcmVuXG4gKiBAcGFyYW0ge0FycmF5PHN0cmluZz59IHNjaGVtYVBhdGhzXG4gKiBAcmV0dXJuIHtudW1iZXJ9IHJldHVybnMgaW5kZXggb2YgZmlyc3QgY2hpbGRcbiAqL1xuXG5cbmZ1bmN0aW9uIGZpbmRBbGxDaGlsZHJlbihjaGlsZHJlbiwgc2NoZW1hUGF0aHMpIHtcbiAgbGV0IGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxO1xuXG4gIGNvbnN0IHByZWRpY2F0ZSA9XG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc2NoZW1hUGF0aFxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHNjaGVtYVBhdGggPT4gY2hpbGRyZW5baV0uc2NoZW1hUGF0aC5pbmRleE9mKHNjaGVtYVBhdGgpICE9PSAwO1xuXG4gIHdoaWxlIChpID4gLTEgJiYgIXNjaGVtYVBhdGhzLmV2ZXJ5KHByZWRpY2F0ZSkpIHtcbiAgICBpZiAoY2hpbGRyZW5baV0ua2V5d29yZCA9PT0gXCJhbnlPZlwiIHx8IGNoaWxkcmVuW2ldLmtleXdvcmQgPT09IFwib25lT2ZcIikge1xuICAgICAgY29uc3QgcmVmcyA9IGV4dHJhY3RSZWZzKGNoaWxkcmVuW2ldKTtcbiAgICAgIGNvbnN0IGNoaWxkcmVuU3RhcnQgPSBmaW5kQWxsQ2hpbGRyZW4oY2hpbGRyZW4uc2xpY2UoMCwgaSksIHJlZnMuY29uY2F0KGNoaWxkcmVuW2ldLnNjaGVtYVBhdGgpKTtcbiAgICAgIGkgPSBjaGlsZHJlblN0YXJ0IC0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgaSAtPSAxO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpICsgMTtcbn1cbi8qKlxuICogRXh0cmFjdHMgYWxsIHJlZnMgZnJvbSBzY2hlbWFcbiAqIEBwYXJhbSB7U2NoZW1hVXRpbEVycm9yT2JqZWN0fSBlcnJvclxuICogQHJldHVybiB7QXJyYXk8c3RyaW5nPn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGV4dHJhY3RSZWZzKGVycm9yKSB7XG4gIGNvbnN0IHtcbiAgICBzY2hlbWFcbiAgfSA9IGVycm9yO1xuXG4gIGlmICghQXJyYXkuaXNBcnJheShzY2hlbWEpKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgcmV0dXJuIHNjaGVtYS5tYXAoKHtcbiAgICAkcmVmXG4gIH0pID0+ICRyZWYpLmZpbHRlcihzID0+IHMpO1xufVxuLyoqXG4gKiBHcm91cHMgY2hpbGRyZW4gYnkgdGhlaXIgZmlyc3QgbGV2ZWwgcGFyZW50IChhc3N1bWluZyB0aGF0IGVycm9yIGlzIHJvb3QpXG4gKiBAcGFyYW0ge0FycmF5PFNjaGVtYVV0aWxFcnJvck9iamVjdD59IGNoaWxkcmVuXG4gKiBAcmV0dXJuIHtBcnJheTxTY2hlbWFVdGlsRXJyb3JPYmplY3Q+fVxuICovXG5cblxuZnVuY3Rpb24gZ3JvdXBDaGlsZHJlbkJ5Rmlyc3RDaGlsZChjaGlsZHJlbikge1xuICBjb25zdCByZXN1bHQgPSBbXTtcbiAgbGV0IGkgPSBjaGlsZHJlbi5sZW5ndGggLSAxO1xuXG4gIHdoaWxlIChpID4gMCkge1xuICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW5baV07XG5cbiAgICBpZiAoY2hpbGQua2V5d29yZCA9PT0gXCJhbnlPZlwiIHx8IGNoaWxkLmtleXdvcmQgPT09IFwib25lT2ZcIikge1xuICAgICAgY29uc3QgcmVmcyA9IGV4dHJhY3RSZWZzKGNoaWxkKTtcbiAgICAgIGNvbnN0IGNoaWxkcmVuU3RhcnQgPSBmaW5kQWxsQ2hpbGRyZW4oY2hpbGRyZW4uc2xpY2UoMCwgaSksIHJlZnMuY29uY2F0KGNoaWxkLnNjaGVtYVBhdGgpKTtcblxuICAgICAgaWYgKGNoaWxkcmVuU3RhcnQgIT09IGkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goT2JqZWN0LmFzc2lnbih7fSwgY2hpbGQsIHtcbiAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW4uc2xpY2UoY2hpbGRyZW5TdGFydCwgaSlcbiAgICAgICAgfSkpO1xuICAgICAgICBpID0gY2hpbGRyZW5TdGFydDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKGNoaWxkKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0LnB1c2goY2hpbGQpO1xuICAgIH1cblxuICAgIGkgLT0gMTtcbiAgfVxuXG4gIGlmIChpID09PSAwKSB7XG4gICAgcmVzdWx0LnB1c2goY2hpbGRyZW5baV0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdC5yZXZlcnNlKCk7XG59XG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVmaXhcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiBpbmRlbnQoc3RyLCBwcmVmaXgpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9cXG4oPyEkKS9nLCBgXFxuJHtwcmVmaXh9YCk7XG59XG4vKipcbiAqIEBwYXJhbSB7U2NoZW1hfSBzY2hlbWFcbiAqIEByZXR1cm5zIHtzY2hlbWEgaXMgKFNjaGVtYSAmIHtub3Q6IFNjaGVtYX0pfVxuICovXG5cblxuZnVuY3Rpb24gaGFzTm90SW5TY2hlbWEoc2NoZW1hKSB7XG4gIHJldHVybiAhIXNjaGVtYS5ub3Q7XG59XG4vKipcbiAqIEBwYXJhbSB7U2NoZW1hfSBzY2hlbWFcbiAqIEByZXR1cm4ge1NjaGVtYX1cbiAqL1xuXG5cbmZ1bmN0aW9uIGZpbmRGaXJzdFR5cGVkU2NoZW1hKHNjaGVtYSkge1xuICBpZiAoaGFzTm90SW5TY2hlbWEoc2NoZW1hKSkge1xuICAgIHJldHVybiBmaW5kRmlyc3RUeXBlZFNjaGVtYShzY2hlbWEubm90KTtcbiAgfVxuXG4gIHJldHVybiBzY2hlbWE7XG59XG4vKipcbiAqIEBwYXJhbSB7U2NoZW1hfSBzY2hlbWFcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBjYW5BcHBseU5vdChzY2hlbWEpIHtcbiAgY29uc3QgdHlwZWRTY2hlbWEgPSBmaW5kRmlyc3RUeXBlZFNjaGVtYShzY2hlbWEpO1xuICByZXR1cm4gbGlrZU51bWJlcih0eXBlZFNjaGVtYSkgfHwgbGlrZUludGVnZXIodHlwZWRTY2hlbWEpIHx8IGxpa2VTdHJpbmcodHlwZWRTY2hlbWEpIHx8IGxpa2VOdWxsKHR5cGVkU2NoZW1hKSB8fCBsaWtlQm9vbGVhbih0eXBlZFNjaGVtYSk7XG59XG4vKipcbiAqIEBwYXJhbSB7YW55fSBtYXliZU9ialxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cblxuXG5mdW5jdGlvbiBpc09iamVjdChtYXliZU9iaikge1xuICByZXR1cm4gdHlwZW9mIG1heWJlT2JqID09PSBcIm9iamVjdFwiICYmIG1heWJlT2JqICE9PSBudWxsO1xufVxuLyoqXG4gKiBAcGFyYW0ge1NjaGVtYX0gc2NoZW1hXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGxpa2VOdW1iZXIoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWEudHlwZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2Ygc2NoZW1hLm1pbmltdW0gIT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIHNjaGVtYS5leGNsdXNpdmVNaW5pbXVtICE9PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiBzY2hlbWEubWF4aW11bSAhPT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2Ygc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0gIT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIHNjaGVtYS5tdWx0aXBsZU9mICE9PSBcInVuZGVmaW5lZFwiO1xufVxuLyoqXG4gKiBAcGFyYW0ge1NjaGVtYX0gc2NoZW1hXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGxpa2VJbnRlZ2VyKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hLnR5cGUgPT09IFwiaW50ZWdlclwiIHx8IHR5cGVvZiBzY2hlbWEubWluaW11bSAhPT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2Ygc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0gIT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIHNjaGVtYS5tYXhpbXVtICE9PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiBzY2hlbWEuZXhjbHVzaXZlTWF4aW11bSAhPT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2Ygc2NoZW1hLm11bHRpcGxlT2YgIT09IFwidW5kZWZpbmVkXCI7XG59XG4vKipcbiAqIEBwYXJhbSB7U2NoZW1hfSBzY2hlbWFcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5cblxuZnVuY3Rpb24gbGlrZVN0cmluZyhzY2hlbWEpIHtcbiAgcmV0dXJuIHNjaGVtYS50eXBlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBzY2hlbWEubWluTGVuZ3RoICE9PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiBzY2hlbWEubWF4TGVuZ3RoICE9PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiBzY2hlbWEucGF0dGVybiAhPT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2Ygc2NoZW1hLmZvcm1hdCAhPT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2Ygc2NoZW1hLmZvcm1hdE1pbmltdW0gIT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIHNjaGVtYS5mb3JtYXRNYXhpbXVtICE9PSBcInVuZGVmaW5lZFwiO1xufVxuLyoqXG4gKiBAcGFyYW0ge1NjaGVtYX0gc2NoZW1hXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGxpa2VCb29sZWFuKHNjaGVtYSkge1xuICByZXR1cm4gc2NoZW1hLnR5cGUgPT09IFwiYm9vbGVhblwiO1xufVxuLyoqXG4gKiBAcGFyYW0ge1NjaGVtYX0gc2NoZW1hXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGxpa2VBcnJheShzY2hlbWEpIHtcbiAgcmV0dXJuIHNjaGVtYS50eXBlID09PSBcImFycmF5XCIgfHwgdHlwZW9mIHNjaGVtYS5taW5JdGVtcyA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2Ygc2NoZW1hLm1heEl0ZW1zID09PSBcIm51bWJlclwiIHx8IHR5cGVvZiBzY2hlbWEudW5pcXVlSXRlbXMgIT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIHNjaGVtYS5pdGVtcyAhPT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2Ygc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyAhPT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2Ygc2NoZW1hLmNvbnRhaW5zICE9PSBcInVuZGVmaW5lZFwiO1xufVxuLyoqXG4gKiBAcGFyYW0ge1NjaGVtYSAmIHtwYXR0ZXJuUmVxdWlyZWQ/OiBBcnJheTxzdHJpbmc+fX0gc2NoZW1hXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGxpa2VPYmplY3Qoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWEudHlwZSA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2Ygc2NoZW1hLm1pblByb3BlcnRpZXMgIT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIHNjaGVtYS5tYXhQcm9wZXJ0aWVzICE9PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiBzY2hlbWEucmVxdWlyZWQgIT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIHNjaGVtYS5wcm9wZXJ0aWVzICE9PSBcInVuZGVmaW5lZFwiIHx8IHR5cGVvZiBzY2hlbWEucGF0dGVyblByb3BlcnRpZXMgIT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyAhPT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2Ygc2NoZW1hLmRlcGVuZGVuY2llcyAhPT0gXCJ1bmRlZmluZWRcIiB8fCB0eXBlb2Ygc2NoZW1hLnByb3BlcnR5TmFtZXMgIT09IFwidW5kZWZpbmVkXCIgfHwgdHlwZW9mIHNjaGVtYS5wYXR0ZXJuUmVxdWlyZWQgIT09IFwidW5kZWZpbmVkXCI7XG59XG4vKipcbiAqIEBwYXJhbSB7U2NoZW1hfSBzY2hlbWFcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5cblxuZnVuY3Rpb24gbGlrZU51bGwoc2NoZW1hKSB7XG4gIHJldHVybiBzY2hlbWEudHlwZSA9PT0gXCJudWxsXCI7XG59XG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5cblxuZnVuY3Rpb24gZ2V0QXJ0aWNsZSh0eXBlKSB7XG4gIGlmICgvXlthZWlvdV0vaS50ZXN0KHR5cGUpKSB7XG4gICAgcmV0dXJuIFwiYW5cIjtcbiAgfVxuXG4gIHJldHVybiBcImFcIjtcbn1cbi8qKlxuICogQHBhcmFtIHtTY2hlbWE9fSBzY2hlbWFcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXRTY2hlbWFOb25UeXBlcyhzY2hlbWEpIHtcbiAgaWYgKCFzY2hlbWEpIHtcbiAgICByZXR1cm4gXCJcIjtcbiAgfVxuXG4gIGlmICghc2NoZW1hLnR5cGUpIHtcbiAgICBpZiAobGlrZU51bWJlcihzY2hlbWEpIHx8IGxpa2VJbnRlZ2VyKHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiBcIiB8IHNob3VsZCBiZSBhbnkgbm9uLW51bWJlclwiO1xuICAgIH1cblxuICAgIGlmIChsaWtlU3RyaW5nKHNjaGVtYSkpIHtcbiAgICAgIHJldHVybiBcIiB8IHNob3VsZCBiZSBhbnkgbm9uLXN0cmluZ1wiO1xuICAgIH1cblxuICAgIGlmIChsaWtlQXJyYXkoc2NoZW1hKSkge1xuICAgICAgcmV0dXJuIFwiIHwgc2hvdWxkIGJlIGFueSBub24tYXJyYXlcIjtcbiAgICB9XG5cbiAgICBpZiAobGlrZU9iamVjdChzY2hlbWEpKSB7XG4gICAgICByZXR1cm4gXCIgfCBzaG91bGQgYmUgYW55IG5vbi1vYmplY3RcIjtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gXCJcIjtcbn1cbi8qKlxuICogQHBhcmFtIHtBcnJheTxzdHJpbmc+fSBoaW50c1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuXG5cbmZ1bmN0aW9uIGZvcm1hdEhpbnRzKGhpbnRzKSB7XG4gIHJldHVybiBoaW50cy5sZW5ndGggPiAwID8gYCgke2hpbnRzLmpvaW4oXCIsIFwiKX0pYCA6IFwiXCI7XG59XG4vKipcbiAqIEBwYXJhbSB7U2NoZW1hfSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gbG9naWNcbiAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEhpbnRzKHNjaGVtYSwgbG9naWMpIHtcbiAgaWYgKGxpa2VOdW1iZXIoc2NoZW1hKSB8fCBsaWtlSW50ZWdlcihzY2hlbWEpKSB7XG4gICAgcmV0dXJuIG51bWJlckhpbnRzKHNjaGVtYSwgbG9naWMpO1xuICB9IGVsc2UgaWYgKGxpa2VTdHJpbmcoc2NoZW1hKSkge1xuICAgIHJldHVybiBzdHJpbmdIaW50cyhzY2hlbWEsIGxvZ2ljKTtcbiAgfVxuXG4gIHJldHVybiBbXTtcbn1cblxuY2xhc3MgVmFsaWRhdGlvbkVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQHBhcmFtIHtBcnJheTxTY2hlbWFVdGlsRXJyb3JPYmplY3Q+fSBlcnJvcnNcbiAgICogQHBhcmFtIHtTY2hlbWF9IHNjaGVtYVxuICAgKiBAcGFyYW0ge1ZhbGlkYXRpb25FcnJvckNvbmZpZ3VyYXRpb259IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGNvbnN0cnVjdG9yKGVycm9ycywgc2NoZW1hLCBjb25maWd1cmF0aW9uID0ge30pIHtcbiAgICBzdXBlcigpO1xuICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqL1xuXG4gICAgdGhpcy5uYW1lID0gXCJWYWxpZGF0aW9uRXJyb3JcIjtcbiAgICAvKiogQHR5cGUge0FycmF5PFNjaGVtYVV0aWxFcnJvck9iamVjdD59ICovXG5cbiAgICB0aGlzLmVycm9ycyA9IGVycm9ycztcbiAgICAvKiogQHR5cGUge1NjaGVtYX0gKi9cblxuICAgIHRoaXMuc2NoZW1hID0gc2NoZW1hO1xuICAgIGxldCBoZWFkZXJOYW1lRnJvbVNjaGVtYTtcbiAgICBsZXQgYmFzZURhdGFQYXRoRnJvbVNjaGVtYTtcblxuICAgIGlmIChzY2hlbWEudGl0bGUgJiYgKCFjb25maWd1cmF0aW9uLm5hbWUgfHwgIWNvbmZpZ3VyYXRpb24uYmFzZURhdGFQYXRoKSkge1xuICAgICAgY29uc3Qgc3BsaXR0ZWRUaXRsZUZyb21TY2hlbWEgPSBzY2hlbWEudGl0bGUubWF0Y2goL14oLispICguKykkLyk7XG5cbiAgICAgIGlmIChzcGxpdHRlZFRpdGxlRnJvbVNjaGVtYSkge1xuICAgICAgICBpZiAoIWNvbmZpZ3VyYXRpb24ubmFtZSkge1xuICAgICAgICAgIFssIGhlYWRlck5hbWVGcm9tU2NoZW1hXSA9IHNwbGl0dGVkVGl0bGVGcm9tU2NoZW1hO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjb25maWd1cmF0aW9uLmJhc2VEYXRhUGF0aCkge1xuICAgICAgICAgIFssLCBiYXNlRGF0YVBhdGhGcm9tU2NoZW1hXSA9IHNwbGl0dGVkVGl0bGVGcm9tU2NoZW1hO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqL1xuXG5cbiAgICB0aGlzLmhlYWRlck5hbWUgPSBjb25maWd1cmF0aW9uLm5hbWUgfHwgaGVhZGVyTmFtZUZyb21TY2hlbWEgfHwgXCJPYmplY3RcIjtcbiAgICAvKiogQHR5cGUge3N0cmluZ30gKi9cblxuICAgIHRoaXMuYmFzZURhdGFQYXRoID0gY29uZmlndXJhdGlvbi5iYXNlRGF0YVBhdGggfHwgYmFzZURhdGFQYXRoRnJvbVNjaGVtYSB8fCBcImNvbmZpZ3VyYXRpb25cIjtcbiAgICAvKiogQHR5cGUge1Bvc3RGb3JtYXR0ZXIgfCBudWxsfSAqL1xuXG4gICAgdGhpcy5wb3N0Rm9ybWF0dGVyID0gY29uZmlndXJhdGlvbi5wb3N0Rm9ybWF0dGVyIHx8IG51bGw7XG4gICAgY29uc3QgaGVhZGVyID0gYEludmFsaWQgJHt0aGlzLmJhc2VEYXRhUGF0aH0gb2JqZWN0LiAke3RoaXMuaGVhZGVyTmFtZX0gaGFzIGJlZW4gaW5pdGlhbGl6ZWQgdXNpbmcgJHtnZXRBcnRpY2xlKHRoaXMuYmFzZURhdGFQYXRoKX0gJHt0aGlzLmJhc2VEYXRhUGF0aH0gb2JqZWN0IHRoYXQgZG9lcyBub3QgbWF0Y2ggdGhlIEFQSSBzY2hlbWEuXFxuYDtcbiAgICAvKiogQHR5cGUge3N0cmluZ30gKi9cblxuICAgIHRoaXMubWVzc2FnZSA9IGAke2hlYWRlcn0ke3RoaXMuZm9ybWF0VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMpfWA7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gICAqIEByZXR1cm5zIHtTY2hlbWF9XG4gICAqL1xuXG5cbiAgZ2V0U2NoZW1hUGFydChwYXRoKSB7XG4gICAgY29uc3QgbmV3UGF0aCA9IHBhdGguc3BsaXQoXCIvXCIpO1xuICAgIGxldCBzY2hlbWFQYXJ0ID0gdGhpcy5zY2hlbWE7XG5cbiAgICBmb3IgKGxldCBpID0gMTsgaSA8IG5ld1BhdGgubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGlubmVyID0gc2NoZW1hUGFydFtcbiAgICAgIC8qKiBAdHlwZSB7a2V5b2YgU2NoZW1hfSAqL1xuICAgICAgbmV3UGF0aFtpXV07XG5cbiAgICAgIGlmICghaW5uZXIpIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIHNjaGVtYVBhcnQgPSBpbm5lcjtcbiAgICB9XG5cbiAgICByZXR1cm4gc2NoZW1hUGFydDtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtTY2hlbWF9IHNjaGVtYVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGxvZ2ljXG4gICAqIEBwYXJhbSB7QXJyYXk8T2JqZWN0Pn0gcHJldlNjaGVtYXNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cblxuICBmb3JtYXRTY2hlbWEoc2NoZW1hLCBsb2dpYyA9IHRydWUsIHByZXZTY2hlbWFzID0gW10pIHtcbiAgICBsZXQgbmV3TG9naWMgPSBsb2dpYztcblxuICAgIGNvbnN0IGZvcm1hdElubmVyU2NoZW1hID1cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBpbm5lclNjaGVtYVxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbj19IGFkZFNlbGZcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIChpbm5lclNjaGVtYSwgYWRkU2VsZikgPT4ge1xuICAgICAgaWYgKCFhZGRTZWxmKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvcm1hdFNjaGVtYShpbm5lclNjaGVtYSwgbmV3TG9naWMsIHByZXZTY2hlbWFzKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByZXZTY2hlbWFzLmluY2x1ZGVzKGlubmVyU2NoZW1hKSkge1xuICAgICAgICByZXR1cm4gXCIocmVjdXJzaXZlKVwiO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5mb3JtYXRTY2hlbWEoaW5uZXJTY2hlbWEsIG5ld0xvZ2ljLCBwcmV2U2NoZW1hcy5jb25jYXQoc2NoZW1hKSk7XG4gICAgfTtcblxuICAgIGlmIChoYXNOb3RJblNjaGVtYShzY2hlbWEpICYmICFsaWtlT2JqZWN0KHNjaGVtYSkpIHtcbiAgICAgIGlmIChjYW5BcHBseU5vdChzY2hlbWEubm90KSkge1xuICAgICAgICBuZXdMb2dpYyA9ICFsb2dpYztcbiAgICAgICAgcmV0dXJuIGZvcm1hdElubmVyU2NoZW1hKHNjaGVtYS5ub3QpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBuZWVkQXBwbHlMb2dpY0hlcmUgPSAhc2NoZW1hLm5vdC5ub3Q7XG4gICAgICBjb25zdCBwcmVmaXggPSBsb2dpYyA/IFwiXCIgOiBcIm5vbiBcIjtcbiAgICAgIG5ld0xvZ2ljID0gIWxvZ2ljO1xuICAgICAgcmV0dXJuIG5lZWRBcHBseUxvZ2ljSGVyZSA/IHByZWZpeCArIGZvcm1hdElubmVyU2NoZW1hKHNjaGVtYS5ub3QpIDogZm9ybWF0SW5uZXJTY2hlbWEoc2NoZW1hLm5vdCk7XG4gICAgfVxuXG4gICAgaWYgKFxuICAgIC8qKiBAdHlwZSB7U2NoZW1hICYge2luc3RhbmNlb2Y6IHN0cmluZyB8IEFycmF5PHN0cmluZz59fSAqL1xuICAgIHNjaGVtYS5pbnN0YW5jZW9mKSB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGluc3RhbmNlb2Y6IHZhbHVlXG4gICAgICB9ID1cbiAgICAgIC8qKiBAdHlwZSB7U2NoZW1hICYge2luc3RhbmNlb2Y6IHN0cmluZyB8IEFycmF5PHN0cmluZz59fSAqL1xuICAgICAgc2NoZW1hO1xuICAgICAgY29uc3QgdmFsdWVzID0gIUFycmF5LmlzQXJyYXkodmFsdWUpID8gW3ZhbHVlXSA6IHZhbHVlO1xuICAgICAgcmV0dXJuIHZhbHVlcy5tYXAoXG4gICAgICAvKipcbiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpdGVtXG4gICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAgICovXG4gICAgICBpdGVtID0+IGl0ZW0gPT09IFwiRnVuY3Rpb25cIiA/IFwiZnVuY3Rpb25cIiA6IGl0ZW0pLmpvaW4oXCIgfCBcIik7XG4gICAgfVxuXG4gICAgaWYgKHNjaGVtYS5lbnVtKSB7XG4gICAgICBjb25zdCBlbnVtVmFsdWVzID1cbiAgICAgIC8qKiBAdHlwZSB7QXJyYXk8YW55Pn0gKi9cbiAgICAgIHNjaGVtYS5lbnVtLm1hcChpdGVtID0+IHtcbiAgICAgICAgaWYgKGl0ZW0gPT09IG51bGwgJiYgc2NoZW1hLnVuZGVmaW5lZEFzTnVsbCkge1xuICAgICAgICAgIHJldHVybiBgJHtKU09OLnN0cmluZ2lmeShpdGVtKX0gfCB1bmRlZmluZWRgO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGl0ZW0pO1xuICAgICAgfSkuam9pbihcIiB8IFwiKTtcbiAgICAgIHJldHVybiBgJHtlbnVtVmFsdWVzfWA7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBzY2hlbWEuY29uc3QgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShzY2hlbWEuY29uc3QpO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWEub25lT2YpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8qKiBAdHlwZSB7QXJyYXk8U2NoZW1hPn0gKi9cbiAgICAgICAgc2NoZW1hLm9uZU9mLm1hcChpdGVtID0+IGZvcm1hdElubmVyU2NoZW1hKGl0ZW0sIHRydWUpKS5qb2luKFwiIHwgXCIpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWEuYW55T2YpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8qKiBAdHlwZSB7QXJyYXk8U2NoZW1hPn0gKi9cbiAgICAgICAgc2NoZW1hLmFueU9mLm1hcChpdGVtID0+IGZvcm1hdElubmVyU2NoZW1hKGl0ZW0sIHRydWUpKS5qb2luKFwiIHwgXCIpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWEuYWxsT2YpIHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIC8qKiBAdHlwZSB7QXJyYXk8U2NoZW1hPn0gKi9cbiAgICAgICAgc2NoZW1hLmFsbE9mLm1hcChpdGVtID0+IGZvcm1hdElubmVyU2NoZW1hKGl0ZW0sIHRydWUpKS5qb2luKFwiICYgXCIpXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChcbiAgICAvKiogQHR5cGUge0pTT05TY2hlbWE3fSAqL1xuICAgIHNjaGVtYS5pZikge1xuICAgICAgY29uc3Qge1xuICAgICAgICBpZjogaWZWYWx1ZSxcbiAgICAgICAgdGhlbjogdGhlblZhbHVlLFxuICAgICAgICBlbHNlOiBlbHNlVmFsdWVcbiAgICAgIH0gPVxuICAgICAgLyoqIEB0eXBlIHtKU09OU2NoZW1hN30gKi9cbiAgICAgIHNjaGVtYTtcbiAgICAgIHJldHVybiBgJHtpZlZhbHVlID8gYGlmICR7Zm9ybWF0SW5uZXJTY2hlbWEoaWZWYWx1ZSl9YCA6IFwiXCJ9JHt0aGVuVmFsdWUgPyBgIHRoZW4gJHtmb3JtYXRJbm5lclNjaGVtYSh0aGVuVmFsdWUpfWAgOiBcIlwifSR7ZWxzZVZhbHVlID8gYCBlbHNlICR7Zm9ybWF0SW5uZXJTY2hlbWEoZWxzZVZhbHVlKX1gIDogXCJcIn1gO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWEuJHJlZikge1xuICAgICAgcmV0dXJuIGZvcm1hdElubmVyU2NoZW1hKHRoaXMuZ2V0U2NoZW1hUGFydChzY2hlbWEuJHJlZiksIHRydWUpO1xuICAgIH1cblxuICAgIGlmIChsaWtlTnVtYmVyKHNjaGVtYSkgfHwgbGlrZUludGVnZXIoc2NoZW1hKSkge1xuICAgICAgY29uc3QgW3R5cGUsIC4uLmhpbnRzXSA9IGdldEhpbnRzKHNjaGVtYSwgbG9naWMpO1xuICAgICAgY29uc3Qgc3RyID0gYCR7dHlwZX0ke2hpbnRzLmxlbmd0aCA+IDAgPyBgICR7Zm9ybWF0SGludHMoaGludHMpfWAgOiBcIlwifWA7XG4gICAgICByZXR1cm4gbG9naWMgPyBzdHIgOiBoaW50cy5sZW5ndGggPiAwID8gYG5vbi0ke3R5cGV9IHwgJHtzdHJ9YCA6IGBub24tJHt0eXBlfWA7XG4gICAgfVxuXG4gICAgaWYgKGxpa2VTdHJpbmcoc2NoZW1hKSkge1xuICAgICAgY29uc3QgW3R5cGUsIC4uLmhpbnRzXSA9IGdldEhpbnRzKHNjaGVtYSwgbG9naWMpO1xuICAgICAgY29uc3Qgc3RyID0gYCR7dHlwZX0ke2hpbnRzLmxlbmd0aCA+IDAgPyBgICR7Zm9ybWF0SGludHMoaGludHMpfWAgOiBcIlwifWA7XG4gICAgICByZXR1cm4gbG9naWMgPyBzdHIgOiBzdHIgPT09IFwic3RyaW5nXCIgPyBcIm5vbi1zdHJpbmdcIiA6IGBub24tc3RyaW5nIHwgJHtzdHJ9YDtcbiAgICB9XG5cbiAgICBpZiAobGlrZUJvb2xlYW4oc2NoZW1hKSkge1xuICAgICAgcmV0dXJuIGAke2xvZ2ljID8gXCJcIiA6IFwibm9uLVwifWJvb2xlYW5gO1xuICAgIH1cblxuICAgIGlmIChsaWtlQXJyYXkoc2NoZW1hKSkge1xuICAgICAgLy8gbm90IGxvZ2ljIGFscmVhZHkgYXBwbGllZCBpbiBmb3JtYXRWYWxpZGF0aW9uRXJyb3JcbiAgICAgIG5ld0xvZ2ljID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGhpbnRzID0gW107XG5cbiAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm1pbkl0ZW1zID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGhpbnRzLnB1c2goYHNob3VsZCBub3QgaGF2ZSBmZXdlciB0aGFuICR7c2NoZW1hLm1pbkl0ZW1zfSBpdGVtJHtzY2hlbWEubWluSXRlbXMgPiAxID8gXCJzXCIgOiBcIlwifWApO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHNjaGVtYS5tYXhJdGVtcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBoaW50cy5wdXNoKGBzaG91bGQgbm90IGhhdmUgbW9yZSB0aGFuICR7c2NoZW1hLm1heEl0ZW1zfSBpdGVtJHtzY2hlbWEubWF4SXRlbXMgPiAxID8gXCJzXCIgOiBcIlwifWApO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2NoZW1hLnVuaXF1ZUl0ZW1zKSB7XG4gICAgICAgIGhpbnRzLnB1c2goXCJzaG91bGQgbm90IGhhdmUgZHVwbGljYXRlIGl0ZW1zXCIpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBoYXNBZGRpdGlvbmFsSXRlbXMgPSB0eXBlb2Ygc2NoZW1hLmFkZGl0aW9uYWxJdGVtcyA9PT0gXCJ1bmRlZmluZWRcIiB8fCBCb29sZWFuKHNjaGVtYS5hZGRpdGlvbmFsSXRlbXMpO1xuICAgICAgbGV0IGl0ZW1zID0gXCJcIjtcblxuICAgICAgaWYgKHNjaGVtYS5pdGVtcykge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEuaXRlbXMpICYmIHNjaGVtYS5pdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaXRlbXMgPSBgJHtcbiAgICAgICAgICAvKiogQHR5cGUge0FycmF5PFNjaGVtYT59ICovXG4gICAgICAgICAgc2NoZW1hLml0ZW1zLm1hcChpdGVtID0+IGZvcm1hdElubmVyU2NoZW1hKGl0ZW0pKS5qb2luKFwiLCBcIil9YDtcblxuICAgICAgICAgIGlmIChoYXNBZGRpdGlvbmFsSXRlbXMpIHtcbiAgICAgICAgICAgIGlmIChzY2hlbWEuYWRkaXRpb25hbEl0ZW1zICYmIGlzT2JqZWN0KHNjaGVtYS5hZGRpdGlvbmFsSXRlbXMpICYmIE9iamVjdC5rZXlzKHNjaGVtYS5hZGRpdGlvbmFsSXRlbXMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgaGludHMucHVzaChgYWRkaXRpb25hbCBpdGVtcyBzaG91bGQgYmUgJHtmb3JtYXRJbm5lclNjaGVtYShzY2hlbWEuYWRkaXRpb25hbEl0ZW1zKX1gKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAoc2NoZW1hLml0ZW1zICYmIE9iamVjdC5rZXlzKHNjaGVtYS5pdGVtcykubGVuZ3RoID4gMCkge1xuICAgICAgICAgIC8vIFwiYWRkaXRpb25hbEl0ZW1zXCIgaXMgaWdub3JlZFxuICAgICAgICAgIGl0ZW1zID0gYCR7Zm9ybWF0SW5uZXJTY2hlbWEoc2NoZW1hLml0ZW1zKX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIEZhbGxiYWNrIGZvciBlbXB0eSBgaXRlbXNgIHZhbHVlXG4gICAgICAgICAgaXRlbXMgPSBcImFueVwiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBcImFkZGl0aW9uYWxJdGVtc1wiIGlzIGlnbm9yZWRcbiAgICAgICAgaXRlbXMgPSBcImFueVwiO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2NoZW1hLmNvbnRhaW5zICYmIE9iamVjdC5rZXlzKHNjaGVtYS5jb250YWlucykubGVuZ3RoID4gMCkge1xuICAgICAgICBoaW50cy5wdXNoKGBzaG91bGQgY29udGFpbnMgYXQgbGVhc3Qgb25lICR7dGhpcy5mb3JtYXRTY2hlbWEoc2NoZW1hLmNvbnRhaW5zKX0gaXRlbWApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYFske2l0ZW1zfSR7aGFzQWRkaXRpb25hbEl0ZW1zID8gXCIsIC4uLlwiIDogXCJcIn1dJHtoaW50cy5sZW5ndGggPiAwID8gYCAoJHtoaW50cy5qb2luKFwiLCBcIil9KWAgOiBcIlwifWA7XG4gICAgfVxuXG4gICAgaWYgKGxpa2VPYmplY3Qoc2NoZW1hKSkge1xuICAgICAgLy8gbm90IGxvZ2ljIGFscmVhZHkgYXBwbGllZCBpbiBmb3JtYXRWYWxpZGF0aW9uRXJyb3JcbiAgICAgIG5ld0xvZ2ljID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGhpbnRzID0gW107XG5cbiAgICAgIGlmICh0eXBlb2Ygc2NoZW1hLm1pblByb3BlcnRpZXMgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgaGludHMucHVzaChgc2hvdWxkIG5vdCBoYXZlIGZld2VyIHRoYW4gJHtzY2hlbWEubWluUHJvcGVydGllc30gJHtzY2hlbWEubWluUHJvcGVydGllcyA+IDEgPyBcInByb3BlcnRpZXNcIiA6IFwicHJvcGVydHlcIn1gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBzY2hlbWEubWF4UHJvcGVydGllcyA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICBoaW50cy5wdXNoKGBzaG91bGQgbm90IGhhdmUgbW9yZSB0aGFuICR7c2NoZW1hLm1heFByb3BlcnRpZXN9ICR7c2NoZW1hLm1pblByb3BlcnRpZXMgJiYgc2NoZW1hLm1pblByb3BlcnRpZXMgPiAxID8gXCJwcm9wZXJ0aWVzXCIgOiBcInByb3BlcnR5XCJ9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzY2hlbWEucGF0dGVyblByb3BlcnRpZXMgJiYgT2JqZWN0LmtleXMoc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKS5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnN0IHBhdHRlcm5Qcm9wZXJ0aWVzID0gT2JqZWN0LmtleXMoc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzKTtcbiAgICAgICAgaGludHMucHVzaChgYWRkaXRpb25hbCBwcm9wZXJ0eSBuYW1lcyBzaG91bGQgbWF0Y2ggcGF0dGVybiR7cGF0dGVyblByb3BlcnRpZXMubGVuZ3RoID4gMSA/IFwic1wiIDogXCJcIn0gJHtwYXR0ZXJuUHJvcGVydGllcy5tYXAocGF0dGVybiA9PiBKU09OLnN0cmluZ2lmeShwYXR0ZXJuKSkuam9pbihcIiB8IFwiKX1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgcHJvcGVydGllcyA9IHNjaGVtYS5wcm9wZXJ0aWVzID8gT2JqZWN0LmtleXMoc2NoZW1hLnByb3BlcnRpZXMpIDogW107XG4gICAgICBjb25zdCByZXF1aXJlZCA9IHNjaGVtYS5yZXF1aXJlZCA/IHNjaGVtYS5yZXF1aXJlZCA6IFtdO1xuICAgICAgY29uc3QgYWxsUHJvcGVydGllcyA9IFsuLi5uZXcgU2V0KFxuICAgICAgLyoqIEB0eXBlIHtBcnJheTxzdHJpbmc+fSAqL1xuICAgICAgW10uY29uY2F0KHJlcXVpcmVkKS5jb25jYXQocHJvcGVydGllcykpXTtcbiAgICAgIGNvbnN0IG9iamVjdFN0cnVjdHVyZSA9IGFsbFByb3BlcnRpZXMubWFwKHByb3BlcnR5ID0+IHtcbiAgICAgICAgY29uc3QgaXNSZXF1aXJlZCA9IHJlcXVpcmVkLmluY2x1ZGVzKHByb3BlcnR5KTsgLy8gU29tZSBwcm9wZXJ0aWVzIG5lZWQgcXVvdGVzLCBtYXliZSB3ZSBzaG91bGQgYWRkIGNoZWNrXG4gICAgICAgIC8vIE1heWJlIHdlIHNob3VsZCBvdXRwdXQgdHlwZSBvZiBwcm9wZXJ0eSAoYGZvbzogc3RyaW5nYCksIGJ1dCBpdCBpcyBsb29rcyB2ZXJ5IHVucmVhZGFibGVcblxuICAgICAgICByZXR1cm4gYCR7cHJvcGVydHl9JHtpc1JlcXVpcmVkID8gXCJcIiA6IFwiP1wifWA7XG4gICAgICB9KS5jb25jYXQodHlwZW9mIHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyA9PT0gXCJ1bmRlZmluZWRcIiB8fCBCb29sZWFuKHNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcykgPyBzY2hlbWEuYWRkaXRpb25hbFByb3BlcnRpZXMgJiYgaXNPYmplY3Qoc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKSA/IFtgPGtleT46ICR7Zm9ybWF0SW5uZXJTY2hlbWEoc2NoZW1hLmFkZGl0aW9uYWxQcm9wZXJ0aWVzKX1gXSA6IFtcIuKAplwiXSA6IFtdKS5qb2luKFwiLCBcIik7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGRlcGVuZGVuY2llcyxcbiAgICAgICAgcHJvcGVydHlOYW1lcyxcbiAgICAgICAgcGF0dGVyblJlcXVpcmVkXG4gICAgICB9ID1cbiAgICAgIC8qKiBAdHlwZSB7U2NoZW1hICYge3BhdHRlcm5SZXF1aXJlZD86IEFycmF5PHN0cmluZz47fX0gKi9cbiAgICAgIHNjaGVtYTtcblxuICAgICAgaWYgKGRlcGVuZGVuY2llcykge1xuICAgICAgICBPYmplY3Qua2V5cyhkZXBlbmRlbmNpZXMpLmZvckVhY2goZGVwZW5kZW5jeU5hbWUgPT4ge1xuICAgICAgICAgIGNvbnN0IGRlcGVuZGVuY3kgPSBkZXBlbmRlbmNpZXNbZGVwZW5kZW5jeU5hbWVdO1xuXG4gICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZGVwZW5kZW5jeSkpIHtcbiAgICAgICAgICAgIGhpbnRzLnB1c2goYHNob3VsZCBoYXZlICR7ZGVwZW5kZW5jeS5sZW5ndGggPiAxID8gXCJwcm9wZXJ0aWVzXCIgOiBcInByb3BlcnR5XCJ9ICR7ZGVwZW5kZW5jeS5tYXAoZGVwID0+IGAnJHtkZXB9J2ApLmpvaW4oXCIsIFwiKX0gd2hlbiBwcm9wZXJ0eSAnJHtkZXBlbmRlbmN5TmFtZX0nIGlzIHByZXNlbnRgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaGludHMucHVzaChgc2hvdWxkIGJlIHZhbGlkIGFjY29yZGluZyB0byB0aGUgc2NoZW1hICR7Zm9ybWF0SW5uZXJTY2hlbWEoZGVwZW5kZW5jeSl9IHdoZW4gcHJvcGVydHkgJyR7ZGVwZW5kZW5jeU5hbWV9JyBpcyBwcmVzZW50YCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHByb3BlcnR5TmFtZXMgJiYgT2JqZWN0LmtleXMocHJvcGVydHlOYW1lcykubGVuZ3RoID4gMCkge1xuICAgICAgICBoaW50cy5wdXNoKGBlYWNoIHByb3BlcnR5IG5hbWUgc2hvdWxkIG1hdGNoIGZvcm1hdCAke0pTT04uc3RyaW5naWZ5KHNjaGVtYS5wcm9wZXJ0eU5hbWVzLmZvcm1hdCl9YCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChwYXR0ZXJuUmVxdWlyZWQgJiYgcGF0dGVyblJlcXVpcmVkLmxlbmd0aCA+IDApIHtcbiAgICAgICAgaGludHMucHVzaChgc2hvdWxkIGhhdmUgcHJvcGVydHkgbWF0Y2hpbmcgcGF0dGVybiAke3BhdHRlcm5SZXF1aXJlZC5tYXAoXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gaXRlbVxuICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAgICAgKi9cbiAgICAgICAgaXRlbSA9PiBKU09OLnN0cmluZ2lmeShpdGVtKSl9YCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgb2JqZWN0IHske29iamVjdFN0cnVjdHVyZSA/IGAgJHtvYmplY3RTdHJ1Y3R1cmV9IGAgOiBcIlwifX0ke2hpbnRzLmxlbmd0aCA+IDAgPyBgICgke2hpbnRzLmpvaW4oXCIsIFwiKX0pYCA6IFwiXCJ9YDtcbiAgICB9XG5cbiAgICBpZiAobGlrZU51bGwoc2NoZW1hKSkge1xuICAgICAgcmV0dXJuIGAke2xvZ2ljID8gXCJcIiA6IFwibm9uLVwifW51bGxgO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYS50eXBlKSkge1xuICAgICAgLy8gbm90IGxvZ2ljIGFscmVhZHkgYXBwbGllZCBpbiBmb3JtYXRWYWxpZGF0aW9uRXJyb3JcbiAgICAgIHJldHVybiBgJHtzY2hlbWEudHlwZS5qb2luKFwiIHwgXCIpfWA7XG4gICAgfSAvLyBGYWxsYmFjayBmb3IgdW5rbm93biBrZXl3b3Jkc1xuICAgIC8vIG5vdCBsb2dpYyBhbHJlYWR5IGFwcGxpZWQgaW4gZm9ybWF0VmFsaWRhdGlvbkVycm9yXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG5cbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoc2NoZW1hLCBudWxsLCAyKTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtTY2hlbWE9fSBzY2hlbWFQYXJ0XG4gICAqIEBwYXJhbSB7KGJvb2xlYW4gfCBBcnJheTxzdHJpbmc+KT19IGFkZGl0aW9uYWxQYXRoXG4gICAqIEBwYXJhbSB7Ym9vbGVhbj19IG5lZWREb3RcbiAgICogQHBhcmFtIHtib29sZWFuPX0gbG9naWNcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cblxuICBnZXRTY2hlbWFQYXJ0VGV4dChzY2hlbWFQYXJ0LCBhZGRpdGlvbmFsUGF0aCwgbmVlZERvdCA9IGZhbHNlLCBsb2dpYyA9IHRydWUpIHtcbiAgICBpZiAoIXNjaGVtYVBhcnQpIHtcbiAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGFkZGl0aW9uYWxQYXRoKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZGRpdGlvbmFsUGF0aC5sZW5ndGg7IGkrKykge1xuICAgICAgICAvKiogQHR5cGUge1NjaGVtYSB8IHVuZGVmaW5lZH0gKi9cbiAgICAgICAgY29uc3QgaW5uZXIgPSBzY2hlbWFQYXJ0W1xuICAgICAgICAvKiogQHR5cGUge2tleW9mIFNjaGVtYX0gKi9cbiAgICAgICAgYWRkaXRpb25hbFBhdGhbaV1dO1xuXG4gICAgICAgIGlmIChpbm5lcikge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICAgIHNjaGVtYVBhcnQgPSBpbm5lcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHdoaWxlIChzY2hlbWFQYXJ0LiRyZWYpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgc2NoZW1hUGFydCA9IHRoaXMuZ2V0U2NoZW1hUGFydChzY2hlbWFQYXJ0LiRyZWYpO1xuICAgIH1cblxuICAgIGxldCBzY2hlbWFUZXh0ID0gYCR7dGhpcy5mb3JtYXRTY2hlbWEoc2NoZW1hUGFydCwgbG9naWMpfSR7bmVlZERvdCA/IFwiLlwiIDogXCJcIn1gO1xuXG4gICAgaWYgKHNjaGVtYVBhcnQuZGVzY3JpcHRpb24pIHtcbiAgICAgIHNjaGVtYVRleHQgKz0gYFxcbi0+ICR7c2NoZW1hUGFydC5kZXNjcmlwdGlvbn1gO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWFQYXJ0LmxpbmspIHtcbiAgICAgIHNjaGVtYVRleHQgKz0gYFxcbi0+IFJlYWQgbW9yZSBhdCAke3NjaGVtYVBhcnQubGlua31gO1xuICAgIH1cblxuICAgIHJldHVybiBzY2hlbWFUZXh0O1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge1NjaGVtYT19IHNjaGVtYVBhcnRcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cblxuICBnZXRTY2hlbWFQYXJ0RGVzY3JpcHRpb24oc2NoZW1hUGFydCkge1xuICAgIGlmICghc2NoZW1hUGFydCkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgd2hpbGUgKHNjaGVtYVBhcnQuJHJlZikge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBzY2hlbWFQYXJ0ID0gdGhpcy5nZXRTY2hlbWFQYXJ0KHNjaGVtYVBhcnQuJHJlZik7XG4gICAgfVxuXG4gICAgbGV0IHNjaGVtYVRleHQgPSBcIlwiO1xuXG4gICAgaWYgKHNjaGVtYVBhcnQuZGVzY3JpcHRpb24pIHtcbiAgICAgIHNjaGVtYVRleHQgKz0gYFxcbi0+ICR7c2NoZW1hUGFydC5kZXNjcmlwdGlvbn1gO1xuICAgIH1cblxuICAgIGlmIChzY2hlbWFQYXJ0LmxpbmspIHtcbiAgICAgIHNjaGVtYVRleHQgKz0gYFxcbi0+IFJlYWQgbW9yZSBhdCAke3NjaGVtYVBhcnQubGlua31gO1xuICAgIH1cblxuICAgIHJldHVybiBzY2hlbWFUZXh0O1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge1NjaGVtYVV0aWxFcnJvck9iamVjdH0gZXJyb3JcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cblxuICBmb3JtYXRWYWxpZGF0aW9uRXJyb3IoZXJyb3IpIHtcbiAgICBjb25zdCB7XG4gICAgICBrZXl3b3JkLFxuICAgICAgZGF0YVBhdGg6IGVycm9yRGF0YVBhdGhcbiAgICB9ID0gZXJyb3I7XG4gICAgY29uc3QgZGF0YVBhdGggPSBgJHt0aGlzLmJhc2VEYXRhUGF0aH0ke2Vycm9yRGF0YVBhdGh9YDtcblxuICAgIHN3aXRjaCAoa2V5d29yZCkge1xuICAgICAgY2FzZSBcInR5cGVcIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYSxcbiAgICAgICAgICAgIHBhcmFtc1xuICAgICAgICAgIH0gPSBlcnJvcjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlZmF1bHQtY2FzZVxuXG4gICAgICAgICAgc3dpdGNoIChcbiAgICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcImFqdlwiKS5UeXBlUGFyYW1zfSAqL1xuICAgICAgICAgIHBhcmFtcy50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICAgICAgICAgIHJldHVybiBgJHtkYXRhUGF0aH0gc2hvdWxkIGJlIGEgJHt0aGlzLmdldFNjaGVtYVBhcnRUZXh0KHBhcmVudFNjaGVtYSwgZmFsc2UsIHRydWUpfWA7XG5cbiAgICAgICAgICAgIGNhc2UgXCJpbnRlZ2VyXCI6XG4gICAgICAgICAgICAgIHJldHVybiBgJHtkYXRhUGF0aH0gc2hvdWxkIGJlIGFuICR7dGhpcy5nZXRTY2hlbWFQYXJ0VGV4dChwYXJlbnRTY2hlbWEsIGZhbHNlLCB0cnVlKX1gO1xuXG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6XG4gICAgICAgICAgICAgIHJldHVybiBgJHtkYXRhUGF0aH0gc2hvdWxkIGJlIGEgJHt0aGlzLmdldFNjaGVtYVBhcnRUZXh0KHBhcmVudFNjaGVtYSwgZmFsc2UsIHRydWUpfWA7XG5cbiAgICAgICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgICAgIHJldHVybiBgJHtkYXRhUGF0aH0gc2hvdWxkIGJlIGEgJHt0aGlzLmdldFNjaGVtYVBhcnRUZXh0KHBhcmVudFNjaGVtYSwgZmFsc2UsIHRydWUpfWA7XG5cbiAgICAgICAgICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgICAgICAgICByZXR1cm4gYCR7ZGF0YVBhdGh9IHNob3VsZCBiZSBhbiBhcnJheTpcXG4ke3RoaXMuZ2V0U2NoZW1hUGFydFRleHQocGFyZW50U2NoZW1hKX1gO1xuXG4gICAgICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICAgIHJldHVybiBgJHtkYXRhUGF0aH0gc2hvdWxkIGJlIGFuIG9iamVjdDpcXG4ke3RoaXMuZ2V0U2NoZW1hUGFydFRleHQocGFyZW50U2NoZW1hKX1gO1xuXG4gICAgICAgICAgICBjYXNlIFwibnVsbFwiOlxuICAgICAgICAgICAgICByZXR1cm4gYCR7ZGF0YVBhdGh9IHNob3VsZCBiZSBhICR7dGhpcy5nZXRTY2hlbWFQYXJ0VGV4dChwYXJlbnRTY2hlbWEsIGZhbHNlLCB0cnVlKX1gO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICByZXR1cm4gYCR7ZGF0YVBhdGh9IHNob3VsZCBiZTpcXG4ke3RoaXMuZ2V0U2NoZW1hUGFydFRleHQocGFyZW50U2NoZW1hKX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwiaW5zdGFuY2VvZlwiOlxuICAgICAgICB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcGFyZW50U2NoZW1hXG4gICAgICAgICAgfSA9IGVycm9yO1xuICAgICAgICAgIHJldHVybiBgJHtkYXRhUGF0aH0gc2hvdWxkIGJlIGFuIGluc3RhbmNlIG9mICR7dGhpcy5nZXRTY2hlbWFQYXJ0VGV4dChwYXJlbnRTY2hlbWEsIGZhbHNlLCB0cnVlKX1gO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJwYXR0ZXJuXCI6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICBwYXJlbnRTY2hlbWFcbiAgICAgICAgICB9ID0gZXJyb3I7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcGF0dGVyblxuICAgICAgICAgIH0gPVxuICAgICAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiYWp2XCIpLlBhdHRlcm5QYXJhbXN9ICovXG4gICAgICAgICAgcGFyYW1zO1xuICAgICAgICAgIHJldHVybiBgJHtkYXRhUGF0aH0gc2hvdWxkIG1hdGNoIHBhdHRlcm4gJHtKU09OLnN0cmluZ2lmeShwYXR0ZXJuKX0ke2dldFNjaGVtYU5vblR5cGVzKHBhcmVudFNjaGVtYSl9LiR7dGhpcy5nZXRTY2hlbWFQYXJ0RGVzY3JpcHRpb24ocGFyZW50U2NoZW1hKX1gO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJmb3JtYXRcIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYVxuICAgICAgICAgIH0gPSBlcnJvcjtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBmb3JtYXRcbiAgICAgICAgICB9ID1cbiAgICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcImFqdlwiKS5Gb3JtYXRQYXJhbXN9ICovXG4gICAgICAgICAgcGFyYW1zO1xuICAgICAgICAgIHJldHVybiBgJHtkYXRhUGF0aH0gc2hvdWxkIG1hdGNoIGZvcm1hdCAke0pTT04uc3RyaW5naWZ5KGZvcm1hdCl9JHtnZXRTY2hlbWFOb25UeXBlcyhwYXJlbnRTY2hlbWEpfS4ke3RoaXMuZ2V0U2NoZW1hUGFydERlc2NyaXB0aW9uKHBhcmVudFNjaGVtYSl9YDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwiZm9ybWF0TWluaW11bVwiOlxuICAgICAgY2FzZSBcImZvcm1hdE1heGltdW1cIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYVxuICAgICAgICAgIH0gPSBlcnJvcjtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBjb21wYXJpc29uLFxuICAgICAgICAgICAgbGltaXRcbiAgICAgICAgICB9ID1cbiAgICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcImFqdlwiKS5Db21wYXJpc29uUGFyYW1zfSAqL1xuICAgICAgICAgIHBhcmFtcztcbiAgICAgICAgICByZXR1cm4gYCR7ZGF0YVBhdGh9IHNob3VsZCBiZSAke2NvbXBhcmlzb259ICR7SlNPTi5zdHJpbmdpZnkobGltaXQpfSR7Z2V0U2NoZW1hTm9uVHlwZXMocGFyZW50U2NoZW1hKX0uJHt0aGlzLmdldFNjaGVtYVBhcnREZXNjcmlwdGlvbihwYXJlbnRTY2hlbWEpfWA7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBcIm1pbmltdW1cIjpcbiAgICAgIGNhc2UgXCJtYXhpbXVtXCI6XG4gICAgICBjYXNlIFwiZXhjbHVzaXZlTWluaW11bVwiOlxuICAgICAgY2FzZSBcImV4Y2x1c2l2ZU1heGltdW1cIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYSxcbiAgICAgICAgICAgIHBhcmFtc1xuICAgICAgICAgIH0gPSBlcnJvcjtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBjb21wYXJpc29uLFxuICAgICAgICAgICAgbGltaXRcbiAgICAgICAgICB9ID1cbiAgICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcImFqdlwiKS5Db21wYXJpc29uUGFyYW1zfSAqL1xuICAgICAgICAgIHBhcmFtcztcbiAgICAgICAgICBjb25zdCBbLCAuLi5oaW50c10gPSBnZXRIaW50cyhcbiAgICAgICAgICAvKiogQHR5cGUge1NjaGVtYX0gKi9cbiAgICAgICAgICBwYXJlbnRTY2hlbWEsIHRydWUpO1xuXG4gICAgICAgICAgaWYgKGhpbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgaGludHMucHVzaChgc2hvdWxkIGJlICR7Y29tcGFyaXNvbn0gJHtsaW1pdH1gKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYCR7ZGF0YVBhdGh9ICR7aGludHMuam9pbihcIiBcIil9JHtnZXRTY2hlbWFOb25UeXBlcyhwYXJlbnRTY2hlbWEpfS4ke3RoaXMuZ2V0U2NoZW1hUGFydERlc2NyaXB0aW9uKHBhcmVudFNjaGVtYSl9YDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwibXVsdGlwbGVPZlwiOlxuICAgICAgICB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgcGFyZW50U2NoZW1hXG4gICAgICAgICAgfSA9IGVycm9yO1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIG11bHRpcGxlT2ZcbiAgICAgICAgICB9ID1cbiAgICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcImFqdlwiKS5NdWx0aXBsZU9mUGFyYW1zfSAqL1xuICAgICAgICAgIHBhcmFtcztcbiAgICAgICAgICByZXR1cm4gYCR7ZGF0YVBhdGh9IHNob3VsZCBiZSBtdWx0aXBsZSBvZiAke211bHRpcGxlT2Z9JHtnZXRTY2hlbWFOb25UeXBlcyhwYXJlbnRTY2hlbWEpfS4ke3RoaXMuZ2V0U2NoZW1hUGFydERlc2NyaXB0aW9uKHBhcmVudFNjaGVtYSl9YDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwicGF0dGVyblJlcXVpcmVkXCI6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICBwYXJlbnRTY2hlbWFcbiAgICAgICAgICB9ID0gZXJyb3I7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgbWlzc2luZ1BhdHRlcm5cbiAgICAgICAgICB9ID1cbiAgICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcImFqdlwiKS5QYXR0ZXJuUmVxdWlyZWRQYXJhbXN9ICovXG4gICAgICAgICAgcGFyYW1zO1xuICAgICAgICAgIHJldHVybiBgJHtkYXRhUGF0aH0gc2hvdWxkIGhhdmUgcHJvcGVydHkgbWF0Y2hpbmcgcGF0dGVybiAke0pTT04uc3RyaW5naWZ5KG1pc3NpbmdQYXR0ZXJuKX0ke2dldFNjaGVtYU5vblR5cGVzKHBhcmVudFNjaGVtYSl9LiR7dGhpcy5nZXRTY2hlbWFQYXJ0RGVzY3JpcHRpb24ocGFyZW50U2NoZW1hKX1gO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJtaW5MZW5ndGhcIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYVxuICAgICAgICAgIH0gPSBlcnJvcjtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBsaW1pdFxuICAgICAgICAgIH0gPVxuICAgICAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiYWp2XCIpLkxpbWl0UGFyYW1zfSAqL1xuICAgICAgICAgIHBhcmFtcztcblxuICAgICAgICAgIGlmIChsaW1pdCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgYmUgYSBub24tZW1wdHkgc3RyaW5nJHtnZXRTY2hlbWFOb25UeXBlcyhwYXJlbnRTY2hlbWEpfS4ke3RoaXMuZ2V0U2NoZW1hUGFydERlc2NyaXB0aW9uKHBhcmVudFNjaGVtYSl9YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBsZW5ndGggPSBsaW1pdCAtIDE7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgYmUgbG9uZ2VyIHRoYW4gJHtsZW5ndGh9IGNoYXJhY3RlciR7bGVuZ3RoID4gMSA/IFwic1wiIDogXCJcIn0ke2dldFNjaGVtYU5vblR5cGVzKHBhcmVudFNjaGVtYSl9LiR7dGhpcy5nZXRTY2hlbWFQYXJ0RGVzY3JpcHRpb24ocGFyZW50U2NoZW1hKX1gO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJtaW5JdGVtc1wiOlxuICAgICAgICB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgcGFyZW50U2NoZW1hXG4gICAgICAgICAgfSA9IGVycm9yO1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGxpbWl0XG4gICAgICAgICAgfSA9XG4gICAgICAgICAgLyoqIEB0eXBlIHtpbXBvcnQoXCJhanZcIikuTGltaXRQYXJhbXN9ICovXG4gICAgICAgICAgcGFyYW1zO1xuXG4gICAgICAgICAgaWYgKGxpbWl0ID09PSAxKSB7XG4gICAgICAgICAgICByZXR1cm4gYCR7ZGF0YVBhdGh9IHNob3VsZCBiZSBhIG5vbi1lbXB0eSBhcnJheSR7Z2V0U2NoZW1hTm9uVHlwZXMocGFyZW50U2NoZW1hKX0uJHt0aGlzLmdldFNjaGVtYVBhcnREZXNjcmlwdGlvbihwYXJlbnRTY2hlbWEpfWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgbm90IGhhdmUgZmV3ZXIgdGhhbiAke2xpbWl0fSBpdGVtcyR7Z2V0U2NoZW1hTm9uVHlwZXMocGFyZW50U2NoZW1hKX0uJHt0aGlzLmdldFNjaGVtYVBhcnREZXNjcmlwdGlvbihwYXJlbnRTY2hlbWEpfWA7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBcIm1pblByb3BlcnRpZXNcIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYVxuICAgICAgICAgIH0gPSBlcnJvcjtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBsaW1pdFxuICAgICAgICAgIH0gPVxuICAgICAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiYWp2XCIpLkxpbWl0UGFyYW1zfSAqL1xuICAgICAgICAgIHBhcmFtcztcblxuICAgICAgICAgIGlmIChsaW1pdCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgYmUgYSBub24tZW1wdHkgb2JqZWN0JHtnZXRTY2hlbWFOb25UeXBlcyhwYXJlbnRTY2hlbWEpfS4ke3RoaXMuZ2V0U2NoZW1hUGFydERlc2NyaXB0aW9uKHBhcmVudFNjaGVtYSl9YDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYCR7ZGF0YVBhdGh9IHNob3VsZCBub3QgaGF2ZSBmZXdlciB0aGFuICR7bGltaXR9IHByb3BlcnRpZXMke2dldFNjaGVtYU5vblR5cGVzKHBhcmVudFNjaGVtYSl9LiR7dGhpcy5nZXRTY2hlbWFQYXJ0RGVzY3JpcHRpb24ocGFyZW50U2NoZW1hKX1gO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJtYXhMZW5ndGhcIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYVxuICAgICAgICAgIH0gPSBlcnJvcjtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBsaW1pdFxuICAgICAgICAgIH0gPVxuICAgICAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiYWp2XCIpLkxpbWl0UGFyYW1zfSAqL1xuICAgICAgICAgIHBhcmFtcztcbiAgICAgICAgICBjb25zdCBtYXggPSBsaW1pdCArIDE7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgYmUgc2hvcnRlciB0aGFuICR7bWF4fSBjaGFyYWN0ZXIke21heCA+IDEgPyBcInNcIiA6IFwiXCJ9JHtnZXRTY2hlbWFOb25UeXBlcyhwYXJlbnRTY2hlbWEpfS4ke3RoaXMuZ2V0U2NoZW1hUGFydERlc2NyaXB0aW9uKHBhcmVudFNjaGVtYSl9YDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwibWF4SXRlbXNcIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYVxuICAgICAgICAgIH0gPSBlcnJvcjtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBsaW1pdFxuICAgICAgICAgIH0gPVxuICAgICAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiYWp2XCIpLkxpbWl0UGFyYW1zfSAqL1xuICAgICAgICAgIHBhcmFtcztcbiAgICAgICAgICByZXR1cm4gYCR7ZGF0YVBhdGh9IHNob3VsZCBub3QgaGF2ZSBtb3JlIHRoYW4gJHtsaW1pdH0gaXRlbXMke2dldFNjaGVtYU5vblR5cGVzKHBhcmVudFNjaGVtYSl9LiR7dGhpcy5nZXRTY2hlbWFQYXJ0RGVzY3JpcHRpb24ocGFyZW50U2NoZW1hKX1gO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJtYXhQcm9wZXJ0aWVzXCI6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICBwYXJlbnRTY2hlbWFcbiAgICAgICAgICB9ID0gZXJyb3I7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgbGltaXRcbiAgICAgICAgICB9ID1cbiAgICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcImFqdlwiKS5MaW1pdFBhcmFtc30gKi9cbiAgICAgICAgICBwYXJhbXM7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgbm90IGhhdmUgbW9yZSB0aGFuICR7bGltaXR9IHByb3BlcnRpZXMke2dldFNjaGVtYU5vblR5cGVzKHBhcmVudFNjaGVtYSl9LiR7dGhpcy5nZXRTY2hlbWFQYXJ0RGVzY3JpcHRpb24ocGFyZW50U2NoZW1hKX1gO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJ1bmlxdWVJdGVtc1wiOlxuICAgICAgICB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgcGFyZW50U2NoZW1hXG4gICAgICAgICAgfSA9IGVycm9yO1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGlcbiAgICAgICAgICB9ID1cbiAgICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcImFqdlwiKS5VbmlxdWVJdGVtc1BhcmFtc30gKi9cbiAgICAgICAgICBwYXJhbXM7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgbm90IGNvbnRhaW4gdGhlIGl0ZW0gJyR7ZXJyb3IuZGF0YVtpXX0nIHR3aWNlJHtnZXRTY2hlbWFOb25UeXBlcyhwYXJlbnRTY2hlbWEpfS4ke3RoaXMuZ2V0U2NoZW1hUGFydERlc2NyaXB0aW9uKHBhcmVudFNjaGVtYSl9YDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwiYWRkaXRpb25hbEl0ZW1zXCI6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICBwYXJlbnRTY2hlbWFcbiAgICAgICAgICB9ID0gZXJyb3I7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgbGltaXRcbiAgICAgICAgICB9ID1cbiAgICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcImFqdlwiKS5MaW1pdFBhcmFtc30gKi9cbiAgICAgICAgICBwYXJhbXM7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgbm90IGhhdmUgbW9yZSB0aGFuICR7bGltaXR9IGl0ZW1zJHtnZXRTY2hlbWFOb25UeXBlcyhwYXJlbnRTY2hlbWEpfS4gVGhlc2UgaXRlbXMgYXJlIHZhbGlkOlxcbiR7dGhpcy5nZXRTY2hlbWFQYXJ0VGV4dChwYXJlbnRTY2hlbWEpfWA7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBcImNvbnRhaW5zXCI6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYXJlbnRTY2hlbWFcbiAgICAgICAgICB9ID0gZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgY29udGFpbnMgYXQgbGVhc3Qgb25lICR7dGhpcy5nZXRTY2hlbWFQYXJ0VGV4dChwYXJlbnRTY2hlbWEsIFtcImNvbnRhaW5zXCJdKX0gaXRlbSR7Z2V0U2NoZW1hTm9uVHlwZXMocGFyZW50U2NoZW1hKX0uYDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwicmVxdWlyZWRcIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYSxcbiAgICAgICAgICAgIHBhcmFtc1xuICAgICAgICAgIH0gPSBlcnJvcjtcbiAgICAgICAgICBjb25zdCBtaXNzaW5nUHJvcGVydHkgPVxuICAgICAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiYWp2XCIpLkRlcGVuZGVuY2llc1BhcmFtc30gKi9cbiAgICAgICAgICBwYXJhbXMubWlzc2luZ1Byb3BlcnR5LnJlcGxhY2UoL15cXC4vLCBcIlwiKTtcbiAgICAgICAgICBjb25zdCBoYXNQcm9wZXJ0eSA9IHBhcmVudFNjaGVtYSAmJiBCb29sZWFuKFxuICAgICAgICAgIC8qKiBAdHlwZSB7U2NoZW1hfSAqL1xuICAgICAgICAgIHBhcmVudFNjaGVtYS5wcm9wZXJ0aWVzICYmXG4gICAgICAgICAgLyoqIEB0eXBlIHtTY2hlbWF9ICovXG4gICAgICAgICAgcGFyZW50U2NoZW1hLnByb3BlcnRpZXNbbWlzc2luZ1Byb3BlcnR5XSk7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBtaXNzZXMgdGhlIHByb3BlcnR5ICcke21pc3NpbmdQcm9wZXJ0eX0nJHtnZXRTY2hlbWFOb25UeXBlcyhwYXJlbnRTY2hlbWEpfS4ke2hhc1Byb3BlcnR5ID8gYCBTaG91bGQgYmU6XFxuJHt0aGlzLmdldFNjaGVtYVBhcnRUZXh0KHBhcmVudFNjaGVtYSwgW1wicHJvcGVydGllc1wiLCBtaXNzaW5nUHJvcGVydHldKX1gIDogdGhpcy5nZXRTY2hlbWFQYXJ0RGVzY3JpcHRpb24ocGFyZW50U2NoZW1hKX1gO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOlxuICAgICAgICB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcGFyYW1zLFxuICAgICAgICAgICAgcGFyZW50U2NoZW1hXG4gICAgICAgICAgfSA9IGVycm9yO1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0eVxuICAgICAgICAgIH0gPVxuICAgICAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiYWp2XCIpLkFkZGl0aW9uYWxQcm9wZXJ0aWVzUGFyYW1zfSAqL1xuICAgICAgICAgIHBhcmFtcztcbiAgICAgICAgICByZXR1cm4gYCR7ZGF0YVBhdGh9IGhhcyBhbiB1bmtub3duIHByb3BlcnR5ICcke2FkZGl0aW9uYWxQcm9wZXJ0eX0nJHtnZXRTY2hlbWFOb25UeXBlcyhwYXJlbnRTY2hlbWEpfS4gVGhlc2UgcHJvcGVydGllcyBhcmUgdmFsaWQ6XFxuJHt0aGlzLmdldFNjaGVtYVBhcnRUZXh0KHBhcmVudFNjaGVtYSl9YDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwiZGVwZW5kZW5jaWVzXCI6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICBwYXJlbnRTY2hlbWFcbiAgICAgICAgICB9ID0gZXJyb3I7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcHJvcGVydHksXG4gICAgICAgICAgICBkZXBzXG4gICAgICAgICAgfSA9XG4gICAgICAgICAgLyoqIEB0eXBlIHtpbXBvcnQoXCJhanZcIikuRGVwZW5kZW5jaWVzUGFyYW1zfSAqL1xuICAgICAgICAgIHBhcmFtcztcbiAgICAgICAgICBjb25zdCBkZXBlbmRlbmNpZXMgPSBkZXBzLnNwbGl0KFwiLFwiKS5tYXAoXG4gICAgICAgICAgLyoqXG4gICAgICAgICAgICogQHBhcmFtIHtzdHJpbmd9IGRlcFxuICAgICAgICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICAgICAgICovXG4gICAgICAgICAgZGVwID0+IGAnJHtkZXAudHJpbSgpfSdgKS5qb2luKFwiLCBcIik7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgaGF2ZSBwcm9wZXJ0aWVzICR7ZGVwZW5kZW5jaWVzfSB3aGVuIHByb3BlcnR5ICcke3Byb3BlcnR5fScgaXMgcHJlc2VudCR7Z2V0U2NoZW1hTm9uVHlwZXMocGFyZW50U2NoZW1hKX0uJHt0aGlzLmdldFNjaGVtYVBhcnREZXNjcmlwdGlvbihwYXJlbnRTY2hlbWEpfWA7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBcInByb3BlcnR5TmFtZXNcIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmFtcyxcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYSxcbiAgICAgICAgICAgIHNjaGVtYVxuICAgICAgICAgIH0gPSBlcnJvcjtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwcm9wZXJ0eU5hbWVcbiAgICAgICAgICB9ID1cbiAgICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcImFqdlwiKS5Qcm9wZXJ0eU5hbWVzUGFyYW1zfSAqL1xuICAgICAgICAgIHBhcmFtcztcbiAgICAgICAgICByZXR1cm4gYCR7ZGF0YVBhdGh9IHByb3BlcnR5IG5hbWUgJyR7cHJvcGVydHlOYW1lfScgaXMgaW52YWxpZCR7Z2V0U2NoZW1hTm9uVHlwZXMocGFyZW50U2NoZW1hKX0uIFByb3BlcnR5IG5hbWVzIHNob3VsZCBiZSBtYXRjaCBmb3JtYXQgJHtKU09OLnN0cmluZ2lmeShzY2hlbWEuZm9ybWF0KX0uJHt0aGlzLmdldFNjaGVtYVBhcnREZXNjcmlwdGlvbihwYXJlbnRTY2hlbWEpfWA7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBcImVudW1cIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIHBhcmVudFNjaGVtYVxuICAgICAgICAgIH0gPSBlcnJvcjtcblxuICAgICAgICAgIGlmIChwYXJlbnRTY2hlbWEgJiZcbiAgICAgICAgICAvKiogQHR5cGUge1NjaGVtYX0gKi9cbiAgICAgICAgICBwYXJlbnRTY2hlbWEuZW51bSAmJlxuICAgICAgICAgIC8qKiBAdHlwZSB7U2NoZW1hfSAqL1xuICAgICAgICAgIHBhcmVudFNjaGVtYS5lbnVtLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgYmUgJHt0aGlzLmdldFNjaGVtYVBhcnRUZXh0KHBhcmVudFNjaGVtYSwgZmFsc2UsIHRydWUpfWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgYmUgb25lIG9mIHRoZXNlOlxcbiR7dGhpcy5nZXRTY2hlbWFQYXJ0VGV4dChwYXJlbnRTY2hlbWEpfWA7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBcImNvbnN0XCI6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYXJlbnRTY2hlbWFcbiAgICAgICAgICB9ID0gZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgYmUgZXF1YWwgdG8gY29uc3RhbnQgJHt0aGlzLmdldFNjaGVtYVBhcnRUZXh0KHBhcmVudFNjaGVtYSwgZmFsc2UsIHRydWUpfWA7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBcIm5vdFwiOlxuICAgICAgICB7XG4gICAgICAgICAgY29uc3QgcG9zdGZpeCA9IGxpa2VPYmplY3QoXG4gICAgICAgICAgLyoqIEB0eXBlIHtTY2hlbWF9ICovXG4gICAgICAgICAgZXJyb3IucGFyZW50U2NoZW1hKSA/IGBcXG4ke3RoaXMuZ2V0U2NoZW1hUGFydFRleHQoZXJyb3IucGFyZW50U2NoZW1hKX1gIDogXCJcIjtcbiAgICAgICAgICBjb25zdCBzY2hlbWFPdXRwdXQgPSB0aGlzLmdldFNjaGVtYVBhcnRUZXh0KGVycm9yLnNjaGVtYSwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7XG5cbiAgICAgICAgICBpZiAoY2FuQXBwbHlOb3QoZXJyb3Iuc2NoZW1hKSkge1xuICAgICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgYmUgYW55ICR7c2NoZW1hT3V0cHV0fSR7cG9zdGZpeH0uYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBzY2hlbWEsXG4gICAgICAgICAgICBwYXJlbnRTY2hlbWFcbiAgICAgICAgICB9ID0gZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgbm90IGJlICR7dGhpcy5nZXRTY2hlbWFQYXJ0VGV4dChzY2hlbWEsIGZhbHNlLCB0cnVlKX0ke3BhcmVudFNjaGVtYSAmJiBsaWtlT2JqZWN0KHBhcmVudFNjaGVtYSkgPyBgXFxuJHt0aGlzLmdldFNjaGVtYVBhcnRUZXh0KHBhcmVudFNjaGVtYSl9YCA6IFwiXCJ9YDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlIFwib25lT2ZcIjpcbiAgICAgIGNhc2UgXCJhbnlPZlwiOlxuICAgICAgICB7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgcGFyZW50U2NoZW1hLFxuICAgICAgICAgICAgY2hpbGRyZW5cbiAgICAgICAgICB9ID0gZXJyb3I7XG5cbiAgICAgICAgICBpZiAoY2hpbGRyZW4gJiYgY2hpbGRyZW4ubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgaWYgKGVycm9yLnNjaGVtYS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgY29uc3QgbGFzdENoaWxkID0gY2hpbGRyZW5bY2hpbGRyZW4ubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgIGNvbnN0IHJlbWFpbmluZ0NoaWxkcmVuID0gY2hpbGRyZW4uc2xpY2UoMCwgY2hpbGRyZW4ubGVuZ3RoIC0gMSk7XG4gICAgICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdFZhbGlkYXRpb25FcnJvcihPYmplY3QuYXNzaWduKHt9LCBsYXN0Q2hpbGQsIHtcbiAgICAgICAgICAgICAgICBjaGlsZHJlbjogcmVtYWluaW5nQ2hpbGRyZW4sXG4gICAgICAgICAgICAgICAgcGFyZW50U2NoZW1hOiBPYmplY3QuYXNzaWduKHt9LCBwYXJlbnRTY2hlbWEsIGxhc3RDaGlsZC5wYXJlbnRTY2hlbWEpXG4gICAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGZpbHRlcmVkQ2hpbGRyZW4gPSBmaWx0ZXJDaGlsZHJlbihjaGlsZHJlbik7XG5cbiAgICAgICAgICAgIGlmIChmaWx0ZXJlZENoaWxkcmVuLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICByZXR1cm4gdGhpcy5mb3JtYXRWYWxpZGF0aW9uRXJyb3IoZmlsdGVyZWRDaGlsZHJlblswXSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZpbHRlcmVkQ2hpbGRyZW4gPSBncm91cENoaWxkcmVuQnlGaXJzdENoaWxkKGZpbHRlcmVkQ2hpbGRyZW4pO1xuICAgICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgYmUgb25lIG9mIHRoZXNlOlxcbiR7dGhpcy5nZXRTY2hlbWFQYXJ0VGV4dChwYXJlbnRTY2hlbWEpfVxcbkRldGFpbHM6XFxuJHtmaWx0ZXJlZENoaWxkcmVuLm1hcChcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQHBhcmFtIHtTY2hlbWFVdGlsRXJyb3JPYmplY3R9IG5lc3RlZEVycm9yXG4gICAgICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICBuZXN0ZWRFcnJvciA9PiBgICogJHtpbmRlbnQodGhpcy5mb3JtYXRWYWxpZGF0aW9uRXJyb3IobmVzdGVkRXJyb3IpLCBcIiAgIFwiKX1gKS5qb2luKFwiXFxuXCIpfWA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgYmUgb25lIG9mIHRoZXNlOlxcbiR7dGhpcy5nZXRTY2hlbWFQYXJ0VGV4dChwYXJlbnRTY2hlbWEpfWA7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSBcImlmXCI6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBwYXJhbXMsXG4gICAgICAgICAgICBwYXJlbnRTY2hlbWFcbiAgICAgICAgICB9ID0gZXJyb3I7XG4gICAgICAgICAgY29uc3Qge1xuICAgICAgICAgICAgZmFpbGluZ0tleXdvcmRcbiAgICAgICAgICB9ID1cbiAgICAgICAgICAvKiogQHR5cGUge2ltcG9ydChcImFqdlwiKS5JZlBhcmFtc30gKi9cbiAgICAgICAgICBwYXJhbXM7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSBzaG91bGQgbWF0Y2ggXCIke2ZhaWxpbmdLZXl3b3JkfVwiIHNjaGVtYTpcXG4ke3RoaXMuZ2V0U2NoZW1hUGFydFRleHQocGFyZW50U2NoZW1hLCBbZmFpbGluZ0tleXdvcmRdKX1gO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgXCJhYnNvbHV0ZVBhdGhcIjpcbiAgICAgICAge1xuICAgICAgICAgIGNvbnN0IHtcbiAgICAgICAgICAgIG1lc3NhZ2UsXG4gICAgICAgICAgICBwYXJlbnRTY2hlbWFcbiAgICAgICAgICB9ID0gZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofTogJHttZXNzYWdlfSR7dGhpcy5nZXRTY2hlbWFQYXJ0RGVzY3JpcHRpb24ocGFyZW50U2NoZW1hKX1gO1xuICAgICAgICB9XG5cbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHtcbiAgICAgICAgICBjb25zdCB7XG4gICAgICAgICAgICBtZXNzYWdlLFxuICAgICAgICAgICAgcGFyZW50U2NoZW1hXG4gICAgICAgICAgfSA9IGVycm9yO1xuICAgICAgICAgIGNvbnN0IEVycm9ySW5KU09OID0gSlNPTi5zdHJpbmdpZnkoZXJyb3IsIG51bGwsIDIpOyAvLyBGb3IgYGN1c3RvbWAsIGBmYWxzZSBzY2hlbWFgLCBgJHJlZmAga2V5d29yZHNcbiAgICAgICAgICAvLyBGYWxsYmFjayBmb3IgdW5rbm93biBrZXl3b3Jkc1xuXG4gICAgICAgICAgcmV0dXJuIGAke2RhdGFQYXRofSAke21lc3NhZ2V9ICgke0Vycm9ySW5KU09OfSkuXFxuJHt0aGlzLmdldFNjaGVtYVBhcnRUZXh0KHBhcmVudFNjaGVtYSwgZmFsc2UpfWA7XG4gICAgICAgIH1cbiAgICB9XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSB7QXJyYXk8U2NoZW1hVXRpbEVycm9yT2JqZWN0Pn0gZXJyb3JzXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG5cbiAgZm9ybWF0VmFsaWRhdGlvbkVycm9ycyhlcnJvcnMpIHtcbiAgICByZXR1cm4gZXJyb3JzLm1hcChlcnJvciA9PiB7XG4gICAgICBsZXQgZm9ybWF0dGVkRXJyb3IgPSB0aGlzLmZvcm1hdFZhbGlkYXRpb25FcnJvcihlcnJvcik7XG5cbiAgICAgIGlmICh0aGlzLnBvc3RGb3JtYXR0ZXIpIHtcbiAgICAgICAgZm9ybWF0dGVkRXJyb3IgPSB0aGlzLnBvc3RGb3JtYXR0ZXIoZm9ybWF0dGVkRXJyb3IsIGVycm9yKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGAgLSAke2luZGVudChmb3JtYXR0ZWRFcnJvciwgXCIgICBcIil9YDtcbiAgICB9KS5qb2luKFwiXFxuXCIpO1xuICB9XG5cbn1cblxudmFyIF9kZWZhdWx0ID0gVmFsaWRhdGlvbkVycm9yO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbmNvbnN0IHtcbiAgdmFsaWRhdGUsXG4gIFZhbGlkYXRpb25FcnJvcixcbiAgZW5hYmxlVmFsaWRhdGlvbixcbiAgZGlzYWJsZVZhbGlkYXRpb24sXG4gIG5lZWRWYWxpZGF0ZVxufSA9IHJlcXVpcmUoXCIuL3ZhbGlkYXRlXCIpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdmFsaWRhdGUsXG4gIFZhbGlkYXRpb25FcnJvcixcbiAgZW5hYmxlVmFsaWRhdGlvbixcbiAgZGlzYWJsZVZhbGlkYXRpb24sXG4gIG5lZWRWYWxpZGF0ZVxufTsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxuLyoqIEB0eXBlZGVmIHtpbXBvcnQoXCJhanZcIikuQWp2fSBBanYgKi9cblxuLyoqIEB0eXBlZGVmIHtpbXBvcnQoXCJhanZcIikuVmFsaWRhdGVGdW5jdGlvbn0gVmFsaWRhdGVGdW5jdGlvbiAqL1xuXG4vKiogQHR5cGVkZWYge2ltcG9ydChcIi4uL3ZhbGlkYXRlXCIpLlNjaGVtYVV0aWxFcnJvck9iamVjdH0gU2NoZW1hVXRpbEVycm9yT2JqZWN0ICovXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7c3RyaW5nfSBkYXRhXG4gKiBAcmV0dXJucyB7U2NoZW1hVXRpbEVycm9yT2JqZWN0fVxuICovXG5mdW5jdGlvbiBlcnJvck1lc3NhZ2UobWVzc2FnZSwgc2NoZW1hLCBkYXRhKSB7XG4gIHJldHVybiB7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZmluZWRcbiAgICBkYXRhUGF0aDogdW5kZWZpbmVkLFxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZWZpbmVkXG4gICAgc2NoZW1hUGF0aDogdW5kZWZpbmVkLFxuICAgIGtleXdvcmQ6IFwiYWJzb2x1dGVQYXRoXCIsXG4gICAgcGFyYW1zOiB7XG4gICAgICBhYnNvbHV0ZVBhdGg6IGRhdGFcbiAgICB9LFxuICAgIG1lc3NhZ2UsXG4gICAgcGFyZW50U2NoZW1hOiBzY2hlbWFcbiAgfTtcbn1cbi8qKlxuICogQHBhcmFtIHtib29sZWFufSBzaG91bGRCZUFic29sdXRlXG4gKiBAcGFyYW0ge29iamVjdH0gc2NoZW1hXG4gKiBAcGFyYW0ge3N0cmluZ30gZGF0YVxuICogQHJldHVybnMge1NjaGVtYVV0aWxFcnJvck9iamVjdH1cbiAqL1xuXG5cbmZ1bmN0aW9uIGdldEVycm9yRm9yKHNob3VsZEJlQWJzb2x1dGUsIHNjaGVtYSwgZGF0YSkge1xuICBjb25zdCBtZXNzYWdlID0gc2hvdWxkQmVBYnNvbHV0ZSA/IGBUaGUgcHJvdmlkZWQgdmFsdWUgJHtKU09OLnN0cmluZ2lmeShkYXRhKX0gaXMgbm90IGFuIGFic29sdXRlIHBhdGghYCA6IGBBIHJlbGF0aXZlIHBhdGggaXMgZXhwZWN0ZWQuIEhvd2V2ZXIsIHRoZSBwcm92aWRlZCB2YWx1ZSAke0pTT04uc3RyaW5naWZ5KGRhdGEpfSBpcyBhbiBhYnNvbHV0ZSBwYXRoIWA7XG4gIHJldHVybiBlcnJvck1lc3NhZ2UobWVzc2FnZSwgc2NoZW1hLCBkYXRhKTtcbn1cbi8qKlxuICpcbiAqIEBwYXJhbSB7QWp2fSBhanZcbiAqIEByZXR1cm5zIHtBanZ9XG4gKi9cblxuXG5mdW5jdGlvbiBhZGRBYnNvbHV0ZVBhdGhLZXl3b3JkKGFqdikge1xuICBhanYuYWRkS2V5d29yZChcImFic29sdXRlUGF0aFwiLCB7XG4gICAgZXJyb3JzOiB0cnVlLFxuICAgIHR5cGU6IFwic3RyaW5nXCIsXG5cbiAgICBjb21waWxlKHNjaGVtYSwgcGFyZW50U2NoZW1hKSB7XG4gICAgICAvKiogQHR5cGUge1ZhbGlkYXRlRnVuY3Rpb259ICovXG4gICAgICBjb25zdCBjYWxsYmFjayA9IGRhdGEgPT4ge1xuICAgICAgICBsZXQgcGFzc2VzID0gdHJ1ZTtcbiAgICAgICAgY29uc3QgaXNFeGNsYW1hdGlvbk1hcmtQcmVzZW50ID0gZGF0YS5pbmNsdWRlcyhcIiFcIik7XG5cbiAgICAgICAgaWYgKGlzRXhjbGFtYXRpb25NYXJrUHJlc2VudCkge1xuICAgICAgICAgIGNhbGxiYWNrLmVycm9ycyA9IFtlcnJvck1lc3NhZ2UoYFRoZSBwcm92aWRlZCB2YWx1ZSAke0pTT04uc3RyaW5naWZ5KGRhdGEpfSBjb250YWlucyBleGNsYW1hdGlvbiBtYXJrICghKSB3aGljaCBpcyBub3QgYWxsb3dlZCBiZWNhdXNlIGl0J3MgcmVzZXJ2ZWQgZm9yIGxvYWRlciBzeW50YXguYCwgcGFyZW50U2NoZW1hLCBkYXRhKV07XG4gICAgICAgICAgcGFzc2VzID0gZmFsc2U7XG4gICAgICAgIH0gLy8gPzpbQS1aYS16XTpcXFxcIC0gV2luZG93cyBhYnNvbHV0ZSBwYXRoXG4gICAgICAgIC8vIFxcXFxcXFxcIC0gV2luZG93cyBuZXR3b3JrIGFic29sdXRlIHBhdGhcbiAgICAgICAgLy8gXFwvIC0gVW5peC1saWtlIE9TIGFic29sdXRlIHBhdGhcblxuXG4gICAgICAgIGNvbnN0IGlzQ29ycmVjdEFic29sdXRlUGF0aCA9IHNjaGVtYSA9PT0gL14oPzpbQS1aYS16XTooXFxcXHxcXC8pfFxcXFxcXFxcfFxcLykvLnRlc3QoZGF0YSk7XG5cbiAgICAgICAgaWYgKCFpc0NvcnJlY3RBYnNvbHV0ZVBhdGgpIHtcbiAgICAgICAgICBjYWxsYmFjay5lcnJvcnMgPSBbZ2V0RXJyb3JGb3Ioc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGRhdGEpXTtcbiAgICAgICAgICBwYXNzZXMgPSBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBwYXNzZXM7XG4gICAgICB9O1xuXG4gICAgICBjYWxsYmFjay5lcnJvcnMgPSBbXTtcbiAgICAgIHJldHVybiBjYWxsYmFjaztcbiAgICB9XG5cbiAgfSk7XG4gIHJldHVybiBhanY7XG59XG5cbnZhciBfZGVmYXVsdCA9IGFkZEFic29sdXRlUGF0aEtleXdvcmQ7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxuLyoqIEB0eXBlZGVmIHtpbXBvcnQoXCJhanZcIikuQWp2fSBBanYgKi9cblxuLyoqXG4gKlxuICogQHBhcmFtIHtBanZ9IGFqdlxuICogQHBhcmFtIHtzdHJpbmd9IGtleXdvcmRcbiAqIEBwYXJhbSB7YW55fSBkZWZpbml0aW9uXG4gKi9cbmZ1bmN0aW9uIGFkZEtleXdvcmQoYWp2LCBrZXl3b3JkLCBkZWZpbml0aW9uKSB7XG4gIGxldCBjdXN0b21SdWxlQ29kZTtcblxuICB0cnkge1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ2xvYmFsLXJlcXVpcmVcbiAgICBjdXN0b21SdWxlQ29kZSA9IHJlcXVpcmUoXCJhanYvbGliL2RvdGpzL2N1c3RvbVwiKTsgLy8gQHRzLWlnbm9yZVxuXG4gICAgY29uc3Qge1xuICAgICAgUlVMRVNcbiAgICB9ID0gYWp2O1xuICAgIGxldCBydWxlR3JvdXA7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IFJVTEVTLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZyA9IFJVTEVTW2ldO1xuXG4gICAgICBpZiAodHlwZW9mIHJnLnR5cGUgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgcnVsZUdyb3VwID0gcmc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHJ1bGUgPSB7XG4gICAgICBrZXl3b3JkLFxuICAgICAgZGVmaW5pdGlvbixcbiAgICAgIGN1c3RvbTogdHJ1ZSxcbiAgICAgIGNvZGU6IGN1c3RvbVJ1bGVDb2RlLFxuICAgICAgaW1wbGVtZW50czogZGVmaW5pdGlvbi5pbXBsZW1lbnRzXG4gICAgfTtcbiAgICBydWxlR3JvdXAucnVsZXMudW5zaGlmdChydWxlKTtcbiAgICBSVUxFUy5jdXN0b21ba2V5d29yZF0gPSBydWxlO1xuICAgIFJVTEVTLmtleXdvcmRzW2tleXdvcmRdID0gdHJ1ZTtcbiAgICBSVUxFUy5hbGxba2V5d29yZF0gPSB0cnVlO1xuICB9IGNhdGNoIChlKSB7Ly8gTm90aGluZywgZmFsbGJhY2tcbiAgfVxufVxuLyoqXG4gKlxuICogQHBhcmFtIHtBanZ9IGFqdlxuICogQHJldHVybnMge0Fqdn1cbiAqL1xuXG5cbmZ1bmN0aW9uIGFkZFVuZGVmaW5lZEFzTnVsbEtleXdvcmQoYWp2KSB7XG4gIC8vIFRoZXJlIGlzIHdvcmthcm91bmQgZm9yIG9sZCB2ZXJzaW9ucyBvZiBhanYsIHdoZXJlIGBiZWZvcmVgIGlzIG5vdCBpbXBsZW1lbnRlZFxuICBhZGRLZXl3b3JkKGFqdiwgXCJ1bmRlZmluZWRBc051bGxcIiwge1xuICAgIG1vZGlmeWluZzogdHJ1ZSxcblxuICAgIC8qKlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0ga3dWYWxcbiAgICAgKiBAcGFyYW0ge3Vua25vd259IGRhdGFcbiAgICAgKiBAcGFyYW0ge2FueX0gcGFyZW50U2NoZW1hXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGRhdGFQYXRoXG4gICAgICogQHBhcmFtIHt1bmtub3dufSBwYXJlbnREYXRhXG4gICAgICogQHBhcmFtIHtudW1iZXIgfCBzdHJpbmd9IHBhcmVudERhdGFQcm9wZXJ0eVxuICAgICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAgICovXG4gICAgdmFsaWRhdGUoa3dWYWwsIGRhdGEsIHBhcmVudFNjaGVtYSwgZGF0YVBhdGgsIHBhcmVudERhdGEsIHBhcmVudERhdGFQcm9wZXJ0eSkge1xuICAgICAgaWYgKGt3VmFsICYmIHBhcmVudFNjaGVtYSAmJiB0eXBlb2YgcGFyZW50U2NoZW1hLmVudW0gIT09IFwidW5kZWZpbmVkXCIgJiYgcGFyZW50RGF0YSAmJiB0eXBlb2YgcGFyZW50RGF0YVByb3BlcnR5ID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIGNvbnN0IGlkeCA9XG4gICAgICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgICAgICBwYXJlbnREYXRhUHJvcGVydHk7XG4gICAgICAgIGNvbnN0IHBhcmVudERhdGFSZWYgPVxuICAgICAgICAvKiogQHR5cGUge2FueVtdfSAqL1xuICAgICAgICBwYXJlbnREYXRhO1xuXG4gICAgICAgIGlmICh0eXBlb2YgcGFyZW50RGF0YVJlZltpZHhdID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgcGFyZW50RGF0YVJlZltpZHhdID0gbnVsbDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgfSk7XG4gIHJldHVybiBhanY7XG59XG5cbnZhciBfZGVmYXVsdCA9IGFkZFVuZGVmaW5lZEFzTnVsbEtleXdvcmQ7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyoqXG4gKiBAdHlwZWRlZiB7W251bWJlciwgYm9vbGVhbl19IFJhbmdlVmFsdWVcbiAqL1xuXG4vKipcbiAqIEBjYWxsYmFjayBSYW5nZVZhbHVlQ2FsbGJhY2tcbiAqIEBwYXJhbSB7UmFuZ2VWYWx1ZX0gcmFuZ2VWYWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmNsYXNzIFJhbmdlIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7XCJsZWZ0XCIgfCBcInJpZ2h0XCJ9IHNpZGVcbiAgICogQHBhcmFtIHtib29sZWFufSBleGNsdXNpdmVcbiAgICogQHJldHVybnMge1wiPlwiIHwgXCI+PVwiIHwgXCI8XCIgfCBcIjw9XCJ9XG4gICAqL1xuICBzdGF0aWMgZ2V0T3BlcmF0b3Ioc2lkZSwgZXhjbHVzaXZlKSB7XG4gICAgaWYgKHNpZGUgPT09IFwibGVmdFwiKSB7XG4gICAgICByZXR1cm4gZXhjbHVzaXZlID8gXCI+XCIgOiBcIj49XCI7XG4gICAgfVxuXG4gICAgcmV0dXJuIGV4Y2x1c2l2ZSA/IFwiPFwiIDogXCI8PVwiO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtib29sZWFufSBsb2dpYyBpcyBub3QgbG9naWMgYXBwbGllZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV4Y2x1c2l2ZSBpcyByYW5nZSBleGNsdXNpdmVcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cblxuICBzdGF0aWMgZm9ybWF0UmlnaHQodmFsdWUsIGxvZ2ljLCBleGNsdXNpdmUpIHtcbiAgICBpZiAobG9naWMgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gUmFuZ2UuZm9ybWF0TGVmdCh2YWx1ZSwgIWxvZ2ljLCAhZXhjbHVzaXZlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYHNob3VsZCBiZSAke1JhbmdlLmdldE9wZXJhdG9yKFwicmlnaHRcIiwgZXhjbHVzaXZlKX0gJHt2YWx1ZX1gO1xuICB9XG4gIC8qKlxuICAgKiBAcGFyYW0ge251bWJlcn0gdmFsdWVcbiAgICogQHBhcmFtIHtib29sZWFufSBsb2dpYyBpcyBub3QgbG9naWMgYXBwbGllZFxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGV4Y2x1c2l2ZSBpcyByYW5nZSBleGNsdXNpdmVcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cblxuICBzdGF0aWMgZm9ybWF0TGVmdCh2YWx1ZSwgbG9naWMsIGV4Y2x1c2l2ZSkge1xuICAgIGlmIChsb2dpYyA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybiBSYW5nZS5mb3JtYXRSaWdodCh2YWx1ZSwgIWxvZ2ljLCAhZXhjbHVzaXZlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYHNob3VsZCBiZSAke1JhbmdlLmdldE9wZXJhdG9yKFwibGVmdFwiLCBleGNsdXNpdmUpfSAke3ZhbHVlfWA7XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBzdGFydCBsZWZ0IHNpZGUgdmFsdWVcbiAgICogQHBhcmFtIHtudW1iZXJ9IGVuZCByaWdodCBzaWRlIHZhbHVlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gc3RhcnRFeGNsdXNpdmUgaXMgcmFuZ2UgZXhjbHVzaXZlIGZyb20gbGVmdCBzaWRlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gZW5kRXhjbHVzaXZlIGlzIHJhbmdlIGV4Y2x1c2l2ZSBmcm9tIHJpZ2h0IHNpZGVcbiAgICogQHBhcmFtIHtib29sZWFufSBsb2dpYyBpcyBub3QgbG9naWMgYXBwbGllZFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuXG4gIHN0YXRpYyBmb3JtYXRSYW5nZShzdGFydCwgZW5kLCBzdGFydEV4Y2x1c2l2ZSwgZW5kRXhjbHVzaXZlLCBsb2dpYykge1xuICAgIGxldCByZXN1bHQgPSBcInNob3VsZCBiZVwiO1xuICAgIHJlc3VsdCArPSBgICR7UmFuZ2UuZ2V0T3BlcmF0b3IobG9naWMgPyBcImxlZnRcIiA6IFwicmlnaHRcIiwgbG9naWMgPyBzdGFydEV4Y2x1c2l2ZSA6ICFzdGFydEV4Y2x1c2l2ZSl9ICR7c3RhcnR9IGA7XG4gICAgcmVzdWx0ICs9IGxvZ2ljID8gXCJhbmRcIiA6IFwib3JcIjtcbiAgICByZXN1bHQgKz0gYCAke1JhbmdlLmdldE9wZXJhdG9yKGxvZ2ljID8gXCJyaWdodFwiIDogXCJsZWZ0XCIsIGxvZ2ljID8gZW5kRXhjbHVzaXZlIDogIWVuZEV4Y2x1c2l2ZSl9ICR7ZW5kfWA7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtBcnJheTxSYW5nZVZhbHVlPn0gdmFsdWVzXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbG9naWMgaXMgbm90IGxvZ2ljIGFwcGxpZWRcbiAgICogQHJldHVybiB7UmFuZ2VWYWx1ZX0gY29tcHV0ZWQgdmFsdWUgYW5kIGl0J3MgZXhjbHVzaXZlIGZsYWdcbiAgICovXG5cblxuICBzdGF0aWMgZ2V0UmFuZ2VWYWx1ZSh2YWx1ZXMsIGxvZ2ljKSB7XG4gICAgbGV0IG1pbk1heCA9IGxvZ2ljID8gSW5maW5pdHkgOiAtSW5maW5pdHk7XG4gICAgbGV0IGogPSAtMTtcbiAgICBjb25zdCBwcmVkaWNhdGUgPSBsb2dpYyA/XG4gICAgLyoqIEB0eXBlIHtSYW5nZVZhbHVlQ2FsbGJhY2t9ICovXG4gICAgKFt2YWx1ZV0pID0+IHZhbHVlIDw9IG1pbk1heCA6XG4gICAgLyoqIEB0eXBlIHtSYW5nZVZhbHVlQ2FsbGJhY2t9ICovXG4gICAgKFt2YWx1ZV0pID0+IHZhbHVlID49IG1pbk1heDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocHJlZGljYXRlKHZhbHVlc1tpXSkpIHtcbiAgICAgICAgW21pbk1heF0gPSB2YWx1ZXNbaV07XG4gICAgICAgIGogPSBpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChqID4gLTEpIHtcbiAgICAgIHJldHVybiB2YWx1ZXNbal07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtJbmZpbml0eSwgdHJ1ZV07XG4gIH1cblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKiogQHR5cGUge0FycmF5PFJhbmdlVmFsdWU+fSAqL1xuICAgIHRoaXMuX2xlZnQgPSBbXTtcbiAgICAvKiogQHR5cGUge0FycmF5PFJhbmdlVmFsdWU+fSAqL1xuXG4gICAgdGhpcy5fcmlnaHQgPSBbXTtcbiAgfVxuICAvKipcbiAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbj19IGV4Y2x1c2l2ZVxuICAgKi9cblxuXG4gIGxlZnQodmFsdWUsIGV4Y2x1c2l2ZSA9IGZhbHNlKSB7XG4gICAgdGhpcy5fbGVmdC5wdXNoKFt2YWx1ZSwgZXhjbHVzaXZlXSk7XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW49fSBleGNsdXNpdmVcbiAgICovXG5cblxuICByaWdodCh2YWx1ZSwgZXhjbHVzaXZlID0gZmFsc2UpIHtcbiAgICB0aGlzLl9yaWdodC5wdXNoKFt2YWx1ZSwgZXhjbHVzaXZlXSk7XG4gIH1cbiAgLyoqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gbG9naWMgaXMgbm90IGxvZ2ljIGFwcGxpZWRcbiAgICogQHJldHVybiB7c3RyaW5nfSBcInNtYXJ0XCIgcmFuZ2Ugc3RyaW5nIHJlcHJlc2VudGF0aW9uXG4gICAqL1xuXG5cbiAgZm9ybWF0KGxvZ2ljID0gdHJ1ZSkge1xuICAgIGNvbnN0IFtzdGFydCwgbGVmdEV4Y2x1c2l2ZV0gPSBSYW5nZS5nZXRSYW5nZVZhbHVlKHRoaXMuX2xlZnQsIGxvZ2ljKTtcbiAgICBjb25zdCBbZW5kLCByaWdodEV4Y2x1c2l2ZV0gPSBSYW5nZS5nZXRSYW5nZVZhbHVlKHRoaXMuX3JpZ2h0LCAhbG9naWMpO1xuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoc3RhcnQpICYmICFOdW1iZXIuaXNGaW5pdGUoZW5kKSkge1xuICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuXG4gICAgY29uc3QgcmVhbFN0YXJ0ID0gbGVmdEV4Y2x1c2l2ZSA/IHN0YXJ0ICsgMSA6IHN0YXJ0O1xuICAgIGNvbnN0IHJlYWxFbmQgPSByaWdodEV4Y2x1c2l2ZSA/IGVuZCAtIDEgOiBlbmQ7IC8vIGUuZy4gNSA8IHggPCA3LCA1IDwgeCA8PSA2LCA2IDw9IHggPD0gNlxuXG4gICAgaWYgKHJlYWxTdGFydCA9PT0gcmVhbEVuZCkge1xuICAgICAgcmV0dXJuIGBzaG91bGQgYmUgJHtsb2dpYyA/IFwiXCIgOiBcIiFcIn09ICR7cmVhbFN0YXJ0fWA7XG4gICAgfSAvLyBlLmcuIDQgPCB4IDwg4oieXG5cblxuICAgIGlmIChOdW1iZXIuaXNGaW5pdGUoc3RhcnQpICYmICFOdW1iZXIuaXNGaW5pdGUoZW5kKSkge1xuICAgICAgcmV0dXJuIFJhbmdlLmZvcm1hdExlZnQoc3RhcnQsIGxvZ2ljLCBsZWZ0RXhjbHVzaXZlKTtcbiAgICB9IC8vIGUuZy4g4oieIDwgeCA8IDRcblxuXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoc3RhcnQpICYmIE51bWJlci5pc0Zpbml0ZShlbmQpKSB7XG4gICAgICByZXR1cm4gUmFuZ2UuZm9ybWF0UmlnaHQoZW5kLCBsb2dpYywgcmlnaHRFeGNsdXNpdmUpO1xuICAgIH1cblxuICAgIHJldHVybiBSYW5nZS5mb3JtYXRSYW5nZShzdGFydCwgZW5kLCBsZWZ0RXhjbHVzaXZlLCByaWdodEV4Y2x1c2l2ZSwgbG9naWMpO1xuICB9XG5cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSYW5nZTsiLCJcInVzZSBzdHJpY3RcIjtcblxuY29uc3QgUmFuZ2UgPSByZXF1aXJlKFwiLi9SYW5nZVwiKTtcbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiLi4vdmFsaWRhdGVcIikuU2NoZW1hfSBTY2hlbWEgKi9cblxuLyoqXG4gKiBAcGFyYW0ge1NjaGVtYX0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGxvZ2ljXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuXG5cbm1vZHVsZS5leHBvcnRzLnN0cmluZ0hpbnRzID0gZnVuY3Rpb24gc3RyaW5nSGludHMoc2NoZW1hLCBsb2dpYykge1xuICBjb25zdCBoaW50cyA9IFtdO1xuICBsZXQgdHlwZSA9IFwic3RyaW5nXCI7XG4gIGNvbnN0IGN1cnJlbnRTY2hlbWEgPSB7IC4uLnNjaGVtYVxuICB9O1xuXG4gIGlmICghbG9naWMpIHtcbiAgICBjb25zdCB0bXBMZW5ndGggPSBjdXJyZW50U2NoZW1hLm1pbkxlbmd0aDtcbiAgICBjb25zdCB0bXBGb3JtYXQgPSBjdXJyZW50U2NoZW1hLmZvcm1hdE1pbmltdW07XG4gICAgY29uc3QgdG1wRXhjbHVzaXZlID0gY3VycmVudFNjaGVtYS5mb3JtYXRFeGNsdXNpdmVNYXhpbXVtO1xuICAgIGN1cnJlbnRTY2hlbWEubWluTGVuZ3RoID0gY3VycmVudFNjaGVtYS5tYXhMZW5ndGg7XG4gICAgY3VycmVudFNjaGVtYS5tYXhMZW5ndGggPSB0bXBMZW5ndGg7XG4gICAgY3VycmVudFNjaGVtYS5mb3JtYXRNaW5pbXVtID0gY3VycmVudFNjaGVtYS5mb3JtYXRNYXhpbXVtO1xuICAgIGN1cnJlbnRTY2hlbWEuZm9ybWF0TWF4aW11bSA9IHRtcEZvcm1hdDtcbiAgICBjdXJyZW50U2NoZW1hLmZvcm1hdEV4Y2x1c2l2ZU1heGltdW0gPSAhY3VycmVudFNjaGVtYS5mb3JtYXRFeGNsdXNpdmVNaW5pbXVtO1xuICAgIGN1cnJlbnRTY2hlbWEuZm9ybWF0RXhjbHVzaXZlTWluaW11bSA9ICF0bXBFeGNsdXNpdmU7XG4gIH1cblxuICBpZiAodHlwZW9mIGN1cnJlbnRTY2hlbWEubWluTGVuZ3RoID09PSBcIm51bWJlclwiKSB7XG4gICAgaWYgKGN1cnJlbnRTY2hlbWEubWluTGVuZ3RoID09PSAxKSB7XG4gICAgICB0eXBlID0gXCJub24tZW1wdHkgc3RyaW5nXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KGN1cnJlbnRTY2hlbWEubWluTGVuZ3RoIC0gMSwgMCk7XG4gICAgICBoaW50cy5wdXNoKGBzaG91bGQgYmUgbG9uZ2VyIHRoYW4gJHtsZW5ndGh9IGNoYXJhY3RlciR7bGVuZ3RoID4gMSA/IFwic1wiIDogXCJcIn1gKTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGN1cnJlbnRTY2hlbWEubWF4TGVuZ3RoID09PSBcIm51bWJlclwiKSB7XG4gICAgaWYgKGN1cnJlbnRTY2hlbWEubWF4TGVuZ3RoID09PSAwKSB7XG4gICAgICB0eXBlID0gXCJlbXB0eSBzdHJpbmdcIjtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgbGVuZ3RoID0gY3VycmVudFNjaGVtYS5tYXhMZW5ndGggKyAxO1xuICAgICAgaGludHMucHVzaChgc2hvdWxkIGJlIHNob3J0ZXIgdGhhbiAke2xlbmd0aH0gY2hhcmFjdGVyJHtsZW5ndGggPiAxID8gXCJzXCIgOiBcIlwifWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjdXJyZW50U2NoZW1hLnBhdHRlcm4pIHtcbiAgICBoaW50cy5wdXNoKGBzaG91bGQke2xvZ2ljID8gXCJcIiA6IFwiIG5vdFwifSBtYXRjaCBwYXR0ZXJuICR7SlNPTi5zdHJpbmdpZnkoY3VycmVudFNjaGVtYS5wYXR0ZXJuKX1gKTtcbiAgfVxuXG4gIGlmIChjdXJyZW50U2NoZW1hLmZvcm1hdCkge1xuICAgIGhpbnRzLnB1c2goYHNob3VsZCR7bG9naWMgPyBcIlwiIDogXCIgbm90XCJ9IG1hdGNoIGZvcm1hdCAke0pTT04uc3RyaW5naWZ5KGN1cnJlbnRTY2hlbWEuZm9ybWF0KX1gKTtcbiAgfVxuXG4gIGlmIChjdXJyZW50U2NoZW1hLmZvcm1hdE1pbmltdW0pIHtcbiAgICBoaW50cy5wdXNoKGBzaG91bGQgYmUgJHtjdXJyZW50U2NoZW1hLmZvcm1hdEV4Y2x1c2l2ZU1pbmltdW0gPyBcIj5cIiA6IFwiPj1cIn0gJHtKU09OLnN0cmluZ2lmeShjdXJyZW50U2NoZW1hLmZvcm1hdE1pbmltdW0pfWApO1xuICB9XG5cbiAgaWYgKGN1cnJlbnRTY2hlbWEuZm9ybWF0TWF4aW11bSkge1xuICAgIGhpbnRzLnB1c2goYHNob3VsZCBiZSAke2N1cnJlbnRTY2hlbWEuZm9ybWF0RXhjbHVzaXZlTWF4aW11bSA/IFwiPFwiIDogXCI8PVwifSAke0pTT04uc3RyaW5naWZ5KGN1cnJlbnRTY2hlbWEuZm9ybWF0TWF4aW11bSl9YCk7XG4gIH1cblxuICByZXR1cm4gW3R5cGVdLmNvbmNhdChoaW50cyk7XG59O1xuLyoqXG4gKiBAcGFyYW0ge1NjaGVtYX0gc2NoZW1hXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGxvZ2ljXG4gKiBAcmV0dXJuIHtzdHJpbmdbXX1cbiAqL1xuXG5cbm1vZHVsZS5leHBvcnRzLm51bWJlckhpbnRzID0gZnVuY3Rpb24gbnVtYmVySGludHMoc2NoZW1hLCBsb2dpYykge1xuICBjb25zdCBoaW50cyA9IFtzY2hlbWEudHlwZSA9PT0gXCJpbnRlZ2VyXCIgPyBcImludGVnZXJcIiA6IFwibnVtYmVyXCJdO1xuICBjb25zdCByYW5nZSA9IG5ldyBSYW5nZSgpO1xuXG4gIGlmICh0eXBlb2Ygc2NoZW1hLm1pbmltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICByYW5nZS5sZWZ0KHNjaGVtYS5taW5pbXVtKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2NoZW1hLmV4Y2x1c2l2ZU1pbmltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICByYW5nZS5sZWZ0KHNjaGVtYS5leGNsdXNpdmVNaW5pbXVtLCB0cnVlKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2NoZW1hLm1heGltdW0gPT09IFwibnVtYmVyXCIpIHtcbiAgICByYW5nZS5yaWdodChzY2hlbWEubWF4aW11bSk7XG4gIH1cblxuICBpZiAodHlwZW9mIHNjaGVtYS5leGNsdXNpdmVNYXhpbXVtID09PSBcIm51bWJlclwiKSB7XG4gICAgcmFuZ2UucmlnaHQoc2NoZW1hLmV4Y2x1c2l2ZU1heGltdW0sIHRydWUpO1xuICB9XG5cbiAgY29uc3QgcmFuZ2VGb3JtYXQgPSByYW5nZS5mb3JtYXQobG9naWMpO1xuXG4gIGlmIChyYW5nZUZvcm1hdCkge1xuICAgIGhpbnRzLnB1c2gocmFuZ2VGb3JtYXQpO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzY2hlbWEubXVsdGlwbGVPZiA9PT0gXCJudW1iZXJcIikge1xuICAgIGhpbnRzLnB1c2goYHNob3VsZCR7bG9naWMgPyBcIlwiIDogXCIgbm90XCJ9IGJlIG11bHRpcGxlIG9mICR7c2NoZW1hLm11bHRpcGxlT2Z9YCk7XG4gIH1cblxuICByZXR1cm4gaGludHM7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy52YWxpZGF0ZSA9IHZhbGlkYXRlO1xuZXhwb3J0cy5lbmFibGVWYWxpZGF0aW9uID0gZW5hYmxlVmFsaWRhdGlvbjtcbmV4cG9ydHMuZGlzYWJsZVZhbGlkYXRpb24gPSBkaXNhYmxlVmFsaWRhdGlvbjtcbmV4cG9ydHMubmVlZFZhbGlkYXRlID0gbmVlZFZhbGlkYXRlO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiVmFsaWRhdGlvbkVycm9yXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIF9WYWxpZGF0aW9uRXJyb3IuZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfYWJzb2x1dGVQYXRoID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9rZXl3b3Jkcy9hYnNvbHV0ZVBhdGhcIikpO1xuXG52YXIgX3VuZGVmaW5lZEFzTnVsbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4va2V5d29yZHMvdW5kZWZpbmVkQXNOdWxsXCIpKTtcblxudmFyIF9WYWxpZGF0aW9uRXJyb3IgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL1ZhbGlkYXRpb25FcnJvclwiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQHRlbXBsYXRlIFRcbiAqIEBwYXJhbSBmbiB7KGZ1bmN0aW9uKCk6IGFueSkgfCB1bmRlZmluZWR9XG4gKiBAcmV0dXJucyB7ZnVuY3Rpb24oKTogVH1cbiAqL1xuY29uc3QgbWVtb2l6ZSA9IGZuID0+IHtcbiAgbGV0IGNhY2hlID0gZmFsc2U7XG4gIC8qKiBAdHlwZSB7VH0gKi9cblxuICBsZXQgcmVzdWx0O1xuICByZXR1cm4gKCkgPT4ge1xuICAgIGlmIChjYWNoZSkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXN1bHQgPVxuICAgIC8qKiBAdHlwZSB7ZnVuY3Rpb24oKTogYW55fSAqL1xuICAgIGZuKCk7XG4gICAgY2FjaGUgPSB0cnVlOyAvLyBBbGxvdyB0byBjbGVhbiB1cCBtZW1vcnkgZm9yIGZuXG4gICAgLy8gYW5kIGFsbCBkZXBlbmRlbnQgcmVzb3VyY2VzXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmaW5lZCwgbm8tcGFyYW0tcmVhc3NpZ25cblxuICAgIGZuID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH07XG59O1xuXG5jb25zdCBnZXRBanYgPSBtZW1vaXplKCgpID0+IHtcbiAgLy8gVXNlIENvbW1vbkpTIHJlcXVpcmUgZm9yIGFqdiBsaWJzIHNvIFR5cGVTY3JpcHQgY29uc3VtZXJzIGFyZW4ndCBsb2NrZWQgaW50byBlc01vZHVsZUludGVyb3AgKHNlZSAjMTEwKS5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGdsb2JhbC1yZXF1aXJlXG4gIGNvbnN0IEFqdiA9IHJlcXVpcmUoXCJhanZcIik7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBnbG9iYWwtcmVxdWlyZVxuXG5cbiAgY29uc3QgYWp2S2V5d29yZHMgPSByZXF1aXJlKFwiYWp2LWtleXdvcmRzXCIpO1xuXG4gIGNvbnN0IGFqdiA9IG5ldyBBanYoe1xuICAgIGFsbEVycm9yczogdHJ1ZSxcbiAgICB2ZXJib3NlOiB0cnVlLFxuICAgICRkYXRhOiB0cnVlXG4gIH0pO1xuICBhanZLZXl3b3JkcyhhanYsIFtcImluc3RhbmNlb2ZcIiwgXCJmb3JtYXRNaW5pbXVtXCIsIFwiZm9ybWF0TWF4aW11bVwiLCBcInBhdHRlcm5SZXF1aXJlZFwiXSk7IC8vIEN1c3RvbSBrZXl3b3Jkc1xuXG4gICgwLCBfYWJzb2x1dGVQYXRoLmRlZmF1bHQpKGFqdik7XG4gICgwLCBfdW5kZWZpbmVkQXNOdWxsLmRlZmF1bHQpKGFqdik7XG4gIHJldHVybiBhanY7XG59KTtcbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwianNvbi1zY2hlbWFcIikuSlNPTlNjaGVtYTR9IEpTT05TY2hlbWE0ICovXG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwianNvbi1zY2hlbWFcIikuSlNPTlNjaGVtYTZ9IEpTT05TY2hlbWE2ICovXG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwianNvbi1zY2hlbWFcIikuSlNPTlNjaGVtYTd9IEpTT05TY2hlbWE3ICovXG5cbi8qKiBAdHlwZWRlZiB7aW1wb3J0KFwiYWp2XCIpLkVycm9yT2JqZWN0fSBFcnJvck9iamVjdCAqL1xuXG4vKiogQHR5cGVkZWYge2ltcG9ydChcImFqdlwiKS5WYWxpZGF0ZUZ1bmN0aW9ufSBWYWxpZGF0ZUZ1bmN0aW9uICovXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gRXh0ZW5kXG4gKiBAcHJvcGVydHkge251bWJlcj19IGZvcm1hdE1pbmltdW1cbiAqIEBwcm9wZXJ0eSB7bnVtYmVyPX0gZm9ybWF0TWF4aW11bVxuICogQHByb3BlcnR5IHtib29sZWFuPX0gZm9ybWF0RXhjbHVzaXZlTWluaW11bVxuICogQHByb3BlcnR5IHtib29sZWFuPX0gZm9ybWF0RXhjbHVzaXZlTWF4aW11bVxuICogQHByb3BlcnR5IHtzdHJpbmc9fSBsaW5rXG4gKiBAcHJvcGVydHkge2Jvb2xlYW49fSB1bmRlZmluZWRBc051bGxcbiAqL1xuXG4vKiogQHR5cGVkZWYgeyhKU09OU2NoZW1hNCB8IEpTT05TY2hlbWE2IHwgSlNPTlNjaGVtYTcpICYgRXh0ZW5kfSBTY2hlbWEgKi9cblxuLyoqIEB0eXBlZGVmIHtFcnJvck9iamVjdCAmIHsgY2hpbGRyZW4/OiBBcnJheTxFcnJvck9iamVjdD59fSBTY2hlbWFVdGlsRXJyb3JPYmplY3QgKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgUG9zdEZvcm1hdHRlclxuICogQHBhcmFtIHtzdHJpbmd9IGZvcm1hdHRlZEVycm9yXG4gKiBAcGFyYW0ge1NjaGVtYVV0aWxFcnJvck9iamVjdH0gZXJyb3JcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7T2JqZWN0fSBWYWxpZGF0aW9uRXJyb3JDb25maWd1cmF0aW9uXG4gKiBAcHJvcGVydHkge3N0cmluZz19IG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nPX0gYmFzZURhdGFQYXRoXG4gKiBAcHJvcGVydHkge1Bvc3RGb3JtYXR0ZXI9fSBwb3N0Rm9ybWF0dGVyXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge1NjaGVtYVV0aWxFcnJvck9iamVjdH0gZXJyb3JcbiAqIEBwYXJhbSB7bnVtYmVyfSBpZHhcbiAqIEByZXR1cm5zIHtTY2hlbWFVdGlsRXJyb3JPYmplY3R9XG4gKi9cblxuZnVuY3Rpb24gYXBwbHlQcmVmaXgoZXJyb3IsIGlkeCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZXJyb3IuZGF0YVBhdGggPSBgWyR7aWR4fV0ke2Vycm9yLmRhdGFQYXRofWA7XG5cbiAgaWYgKGVycm9yLmNoaWxkcmVuKSB7XG4gICAgZXJyb3IuY2hpbGRyZW4uZm9yRWFjaChlcnIgPT4gYXBwbHlQcmVmaXgoZXJyLCBpZHgpKTtcbiAgfVxuXG4gIHJldHVybiBlcnJvcjtcbn1cblxubGV0IHNraXBWYWxpZGF0aW9uID0gZmFsc2U7IC8vIFdlIHVzZSBgcHJvY2Vzcy5lbnYuU0tJUF9WQUxJREFUSU9OYCBiZWNhdXNlIHlvdSBjYW4gaGF2ZSBtdWx0aXBsZSBgc2NoZW1hLXV0aWxzYCB3aXRoIGRpZmZlcmVudCB2ZXJzaW9uLFxuLy8gc28gd2Ugd2FudCB0byBkaXNhYmxlIGl0IGdsb2JhbGx5LCBgcHJvY2Vzcy5lbnZgIGRvZXNuJ3Qgc3VwcG9ydGVkIGJ5IGJyb3dzZXJzLCBzbyB3ZSBoYXZlIHRoZSBsb2NhbCBgc2tpcFZhbGlkYXRpb25gIHZhcmlhYmxlc1xuLy8gRW5hYmxlIHZhbGlkYXRpb25cblxuZnVuY3Rpb24gZW5hYmxlVmFsaWRhdGlvbigpIHtcbiAgc2tpcFZhbGlkYXRpb24gPSBmYWxzZTsgLy8gRGlzYWJsZSB2YWxpZGF0aW9uIGZvciBhbnkgdmVyc2lvbnNcblxuICBpZiAocHJvY2VzcyAmJiBwcm9jZXNzLmVudikge1xuICAgIHByb2Nlc3MuZW52LlNLSVBfVkFMSURBVElPTiA9IFwiblwiO1xuICB9XG59IC8vIERpc2FibGUgdmFsaWRhdGlvblxuXG5cbmZ1bmN0aW9uIGRpc2FibGVWYWxpZGF0aW9uKCkge1xuICBza2lwVmFsaWRhdGlvbiA9IHRydWU7XG5cbiAgaWYgKHByb2Nlc3MgJiYgcHJvY2Vzcy5lbnYpIHtcbiAgICBwcm9jZXNzLmVudi5TS0lQX1ZBTElEQVRJT04gPSBcInlcIjtcbiAgfVxufSAvLyBDaGVjayBpZiB3ZSBuZWVkIHRvIGNvbmZpcm1cblxuXG5mdW5jdGlvbiBuZWVkVmFsaWRhdGUoKSB7XG4gIGlmIChza2lwVmFsaWRhdGlvbikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChwcm9jZXNzICYmIHByb2Nlc3MuZW52ICYmIHByb2Nlc3MuZW52LlNLSVBfVkFMSURBVElPTikge1xuICAgIGNvbnN0IHZhbHVlID0gcHJvY2Vzcy5lbnYuU0tJUF9WQUxJREFUSU9OLnRyaW0oKTtcblxuICAgIGlmICgvXig/Onl8eWVzfHRydWV8MXxvbikkL2kudGVzdCh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoL14oPzpufG5vfGZhbHNlfDB8b2ZmKSQvaS50ZXN0KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG4vKipcbiAqIEBwYXJhbSB7U2NoZW1hfSBzY2hlbWFcbiAqIEBwYXJhbSB7QXJyYXk8b2JqZWN0PiB8IG9iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtWYWxpZGF0aW9uRXJyb3JDb25maWd1cmF0aW9uPX0gY29uZmlndXJhdGlvblxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cblxuXG5mdW5jdGlvbiB2YWxpZGF0ZShzY2hlbWEsIG9wdGlvbnMsIGNvbmZpZ3VyYXRpb24pIHtcbiAgaWYgKCFuZWVkVmFsaWRhdGUoKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBlcnJvcnMgPSBbXTtcblxuICBpZiAoQXJyYXkuaXNBcnJheShvcHRpb25zKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDw9IG9wdGlvbnMubGVuZ3RoIC0gMTsgaSsrKSB7XG4gICAgICBlcnJvcnMucHVzaCguLi52YWxpZGF0ZU9iamVjdChzY2hlbWEsIG9wdGlvbnNbaV0pLm1hcChlcnIgPT4gYXBwbHlQcmVmaXgoZXJyLCBpKSkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBlcnJvcnMgPSB2YWxpZGF0ZU9iamVjdChzY2hlbWEsIG9wdGlvbnMpO1xuICB9XG5cbiAgaWYgKGVycm9ycy5sZW5ndGggPiAwKSB7XG4gICAgdGhyb3cgbmV3IF9WYWxpZGF0aW9uRXJyb3IuZGVmYXVsdChlcnJvcnMsIHNjaGVtYSwgY29uZmlndXJhdGlvbik7XG4gIH1cbn1cbi8qKiBAdHlwZWRlZiB7V2Vha01hcDxTY2hlbWEsIFZhbGlkYXRlRnVuY3Rpb24+fSAqL1xuXG5cbmNvbnN0IHNjaGVtYUNhY2hlID0gbmV3IFdlYWtNYXAoKTtcbi8qKlxuICogQHBhcmFtIHtTY2hlbWF9IHNjaGVtYVxuICogQHBhcmFtIHtBcnJheTxvYmplY3Q+IHwgb2JqZWN0fSBvcHRpb25zXG4gKiBAcmV0dXJucyB7QXJyYXk8U2NoZW1hVXRpbEVycm9yT2JqZWN0Pn1cbiAqL1xuXG5mdW5jdGlvbiB2YWxpZGF0ZU9iamVjdChzY2hlbWEsIG9wdGlvbnMpIHtcbiAgbGV0IGNvbXBpbGVkU2NoZW1hID0gc2NoZW1hQ2FjaGUuZ2V0KHNjaGVtYSk7XG5cbiAgaWYgKCFjb21waWxlZFNjaGVtYSkge1xuICAgIGNvbXBpbGVkU2NoZW1hID0gZ2V0QWp2KCkuY29tcGlsZShzY2hlbWEpO1xuICAgIHNjaGVtYUNhY2hlLnNldChzY2hlbWEsIGNvbXBpbGVkU2NoZW1hKTtcbiAgfVxuXG4gIGNvbnN0IHZhbGlkID0gY29tcGlsZWRTY2hlbWEob3B0aW9ucyk7XG4gIGlmICh2YWxpZCkgcmV0dXJuIFtdO1xuICByZXR1cm4gY29tcGlsZWRTY2hlbWEuZXJyb3JzID8gZmlsdGVyRXJyb3JzKGNvbXBpbGVkU2NoZW1hLmVycm9ycykgOiBbXTtcbn1cbi8qKlxuICogQHBhcmFtIHtBcnJheTxFcnJvck9iamVjdD59IGVycm9yc1xuICogQHJldHVybnMge0FycmF5PFNjaGVtYVV0aWxFcnJvck9iamVjdD59XG4gKi9cblxuXG5mdW5jdGlvbiBmaWx0ZXJFcnJvcnMoZXJyb3JzKSB7XG4gIC8qKiBAdHlwZSB7QXJyYXk8U2NoZW1hVXRpbEVycm9yT2JqZWN0Pn0gKi9cbiAgbGV0IG5ld0Vycm9ycyA9IFtdO1xuXG4gIGZvciAoY29uc3QgZXJyb3Igb2ZcbiAgLyoqIEB0eXBlIHtBcnJheTxTY2hlbWFVdGlsRXJyb3JPYmplY3Q+fSAqL1xuICBlcnJvcnMpIHtcbiAgICBjb25zdCB7XG4gICAgICBkYXRhUGF0aFxuICAgIH0gPSBlcnJvcjtcbiAgICAvKiogQHR5cGUge0FycmF5PFNjaGVtYVV0aWxFcnJvck9iamVjdD59ICovXG5cbiAgICBsZXQgY2hpbGRyZW4gPSBbXTtcbiAgICBuZXdFcnJvcnMgPSBuZXdFcnJvcnMuZmlsdGVyKG9sZEVycm9yID0+IHtcbiAgICAgIGlmIChvbGRFcnJvci5kYXRhUGF0aC5pbmNsdWRlcyhkYXRhUGF0aCkpIHtcbiAgICAgICAgaWYgKG9sZEVycm9yLmNoaWxkcmVuKSB7XG4gICAgICAgICAgY2hpbGRyZW4gPSBjaGlsZHJlbi5jb25jYXQob2xkRXJyb3IuY2hpbGRyZW4uc2xpY2UoMCkpO1xuICAgICAgICB9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlZmluZWQsIG5vLXBhcmFtLXJlYXNzaWduXG5cblxuICAgICAgICBvbGRFcnJvci5jaGlsZHJlbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgY2hpbGRyZW4ucHVzaChvbGRFcnJvcik7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG5cbiAgICBpZiAoY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICBlcnJvci5jaGlsZHJlbiA9IGNoaWxkcmVuO1xuICAgIH1cblxuICAgIG5ld0Vycm9ycy5wdXNoKGVycm9yKTtcbiAgfVxuXG4gIHJldHVybiBuZXdFcnJvcnM7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBzdHlsZXNJbkRPTSA9IFtdO1xuZnVuY3Rpb24gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICB2YXIgcmVzdWx0ID0gLTE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5ET00ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5ET01baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIGlkQ291bnRNYXAgPSB7fTtcbiAgdmFyIGlkZW50aWZpZXJzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleEJ5SWRlbnRpZmllciA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXSxcbiAgICAgIHN1cHBvcnRzOiBpdGVtWzRdLFxuICAgICAgbGF5ZXI6IGl0ZW1bNV1cbiAgICB9O1xuICAgIGlmIChpbmRleEJ5SWRlbnRpZmllciAhPT0gLTEpIHtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS5yZWZlcmVuY2VzKys7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0udXBkYXRlcihvYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdXBkYXRlciA9IGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5ieUluZGV4ID0gaTtcbiAgICAgIHN0eWxlc0luRE9NLnNwbGljZShpLCAwLCB7XG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIHVwZGF0ZXI6IHVwZGF0ZXIsXG4gICAgICAgIHJlZmVyZW5jZXM6IDFcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG4gIHJldHVybiBpZGVudGlmaWVycztcbn1cbmZ1bmN0aW9uIGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpIHtcbiAgdmFyIGFwaSA9IG9wdGlvbnMuZG9tQVBJKG9wdGlvbnMpO1xuICBhcGkudXBkYXRlKG9iaik7XG4gIHZhciB1cGRhdGVyID0gZnVuY3Rpb24gdXBkYXRlcihuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwICYmIG5ld09iai5zdXBwb3J0cyA9PT0gb2JqLnN1cHBvcnRzICYmIG5ld09iai5sYXllciA9PT0gb2JqLmxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGFwaS51cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbW92ZSgpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHVwZGF0ZXI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cbiAgICB2YXIgbmV3TGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKG5ld0xpc3QsIG9wdGlvbnMpO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcbiAgICAgIGlmIChzdHlsZXNJbkRPTVtfaW5kZXhdLnJlZmVyZW5jZXMgPT09IDApIHtcbiAgICAgICAgc3R5bGVzSW5ET01bX2luZGV4XS51cGRhdGVyKCk7XG4gICAgICAgIHN0eWxlc0luRE9NLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgbWVtbyA9IHt9O1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGdldFRhcmdldCh0YXJnZXQpIHtcbiAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgc3R5bGVUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7XG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuICAgIGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgIC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gc3R5bGVUYXJnZXQuY29udGVudERvY3VtZW50LmhlYWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gIH1cbiAgcmV0dXJuIG1lbW9bdGFyZ2V0XTtcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRCeVNlbGVjdG9yKGluc2VydCwgc3R5bGUpIHtcbiAgdmFyIHRhcmdldCA9IGdldFRhcmdldChpbnNlcnQpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gIH1cbiAgdGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0QnlTZWxlY3RvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgb3B0aW9ucy5zZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMuYXR0cmlidXRlcyk7XG4gIG9wdGlvbnMuaW5zZXJ0KGVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG4gIHJldHVybiBlbGVtZW50O1xufVxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzKHN0eWxlRWxlbWVudCkge1xuICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09IFwidW5kZWZpbmVkXCIgPyBfX3dlYnBhY2tfbm9uY2VfXyA6IG51bGw7XG4gIGlmIChub25jZSkge1xuICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLCBub25jZSk7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKSB7XG4gIHZhciBjc3MgPSBcIlwiO1xuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQob2JqLnN1cHBvcnRzLCBcIikge1wiKTtcbiAgfVxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwiQG1lZGlhIFwiLmNvbmNhdChvYmoubWVkaWEsIFwiIHtcIik7XG4gIH1cbiAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBvYmoubGF5ZXIgIT09IFwidW5kZWZpbmVkXCI7XG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJAbGF5ZXJcIi5jb25jYXQob2JqLmxheWVyLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQob2JqLmxheWVyKSA6IFwiXCIsIFwiIHtcIik7XG4gIH1cbiAgY3NzICs9IG9iai5jc3M7XG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuICBpZiAoc291cmNlTWFwICYmIHR5cGVvZiBidG9hICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH1cblxuICAvLyBGb3Igb2xkIElFXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cbiAgb3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZUVsZW1lbnQucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdHlsZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQpO1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGRvbUFQSShvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7fSxcbiAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICB9O1xuICB9XG4gIHZhciBzdHlsZUVsZW1lbnQgPSBvcHRpb25zLmluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgcmV0dXJuIHtcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShvYmopIHtcbiAgICAgIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCk7XG4gICAgfVxuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBkb21BUEk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQpIHtcbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBzdHlsZVRhZ1RyYW5zZm9ybTsiLCJleHBvcnQgZnVuY3Rpb24gbWVyZ2UoLi4uc2V0czpBcnJheTxzdHJpbmc+KTpzdHJpbmcge1xuXHRpZiAoc2V0cy5sZW5ndGggPiAxKSB7XG5cdFx0c2V0c1swXSA9IHNldHNbMF0uc2xpY2UoMCwgLTEpO1xuXHRcdGNvbnN0IHhsID0gc2V0cy5sZW5ndGggLSAxO1xuXHRcdGZvciAobGV0IHggPSAxOyB4IDwgeGw7ICsreCkge1xuXHRcdFx0c2V0c1t4XSA9IHNldHNbeF0uc2xpY2UoMSwgLTEpO1xuXHRcdH1cblx0XHRzZXRzW3hsXSA9IHNldHNbeGxdLnNsaWNlKDEpO1xuXHRcdHJldHVybiBzZXRzLmpvaW4oJycpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBzZXRzWzBdO1xuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdWJleHAoc3RyOnN0cmluZyk6c3RyaW5nIHtcblx0cmV0dXJuIFwiKD86XCIgKyBzdHIgKyBcIilcIjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHR5cGVPZihvOmFueSk6c3RyaW5nIHtcblx0cmV0dXJuIG8gPT09IHVuZGVmaW5lZCA/IFwidW5kZWZpbmVkXCIgOiAobyA9PT0gbnVsbCA/IFwibnVsbFwiIDogT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pLnNwbGl0KFwiIFwiKS5wb3AoKS5zcGxpdChcIl1cIikuc2hpZnQoKS50b0xvd2VyQ2FzZSgpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvVXBwZXJDYXNlKHN0cjpzdHJpbmcpOnN0cmluZyB7XG5cdHJldHVybiBzdHIudG9VcHBlckNhc2UoKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRvQXJyYXkob2JqOmFueSk6QXJyYXk8YW55PiB7XG5cdHJldHVybiBvYmogIT09IHVuZGVmaW5lZCAmJiBvYmogIT09IG51bGwgPyAob2JqIGluc3RhbmNlb2YgQXJyYXkgPyBvYmogOiAodHlwZW9mIG9iai5sZW5ndGggIT09IFwibnVtYmVyXCIgfHwgb2JqLnNwbGl0IHx8IG9iai5zZXRJbnRlcnZhbCB8fCBvYmouY2FsbCA/IFtvYmpdIDogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwob2JqKSkpIDogW107XG59XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGFzc2lnbih0YXJnZXQ6IG9iamVjdCwgc291cmNlOiBhbnkpOiBhbnkge1xuXHRjb25zdCBvYmogPSB0YXJnZXQgYXMgYW55O1xuXHRpZiAoc291cmNlKSB7XG5cdFx0Zm9yIChjb25zdCBrZXkgaW4gc291cmNlKSB7XG5cdFx0XHRvYmpba2V5XSA9IHNvdXJjZVtrZXldO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb2JqO1xufSIsImltcG9ydCB7IFVSSVJlZ0V4cHMgfSBmcm9tIFwiLi91cmlcIjtcbmltcG9ydCB7IG1lcmdlLCBzdWJleHAgfSBmcm9tIFwiLi91dGlsXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEV4cHMoaXNJUkk6Ym9vbGVhbik6VVJJUmVnRXhwcyB7XG5cdGNvbnN0XG5cdFx0QUxQSEEkJCA9IFwiW0EtWmEtel1cIixcblx0XHRDUiQgPSBcIltcXFxceDBEXVwiLFxuXHRcdERJR0lUJCQgPSBcIlswLTldXCIsXG5cdFx0RFFVT1RFJCQgPSBcIltcXFxceDIyXVwiLFxuXHRcdEhFWERJRyQkID0gbWVyZ2UoRElHSVQkJCwgXCJbQS1GYS1mXVwiKSwgIC8vY2FzZS1pbnNlbnNpdGl2ZVxuXHRcdExGJCQgPSBcIltcXFxceDBBXVwiLFxuXHRcdFNQJCQgPSBcIltcXFxceDIwXVwiLFxuXHRcdFBDVF9FTkNPREVEJCA9IHN1YmV4cChzdWJleHAoXCIlW0VGZWZdXCIgKyBIRVhESUckJCArIFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCArIFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCkgKyBcInxcIiArIHN1YmV4cChcIiVbODlBLUZhLWZdXCIgKyBIRVhESUckJCArIFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCkgKyBcInxcIiArIHN1YmV4cChcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpKSwgIC8vZXhwYW5kZWRcblx0XHRHRU5fREVMSU1TJCQgPSBcIltcXFxcOlxcXFwvXFxcXD9cXFxcI1xcXFxbXFxcXF1cXFxcQF1cIixcblx0XHRTVUJfREVMSU1TJCQgPSBcIltcXFxcIVxcXFwkXFxcXCZcXFxcJ1xcXFwoXFxcXClcXFxcKlxcXFwrXFxcXCxcXFxcO1xcXFw9XVwiLFxuXHRcdFJFU0VSVkVEJCQgPSBtZXJnZShHRU5fREVMSU1TJCQsIFNVQl9ERUxJTVMkJCksXG5cdFx0VUNTQ0hBUiQkID0gaXNJUkkgPyBcIltcXFxceEEwLVxcXFx1MjAwRFxcXFx1MjAxMC1cXFxcdTIwMjlcXFxcdTIwMkYtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRUZdXCIgOiBcIltdXCIsICAvL3N1YnNldCwgZXhjbHVkZXMgYmlkaSBjb250cm9sIGNoYXJhY3RlcnNcblx0XHRJUFJJVkFURSQkID0gaXNJUkkgPyBcIltcXFxcdUUwMDAtXFxcXHVGOEZGXVwiIDogXCJbXVwiLCAgLy9zdWJzZXRcblx0XHRVTlJFU0VSVkVEJCQgPSBtZXJnZShBTFBIQSQkLCBESUdJVCQkLCBcIltcXFxcLVxcXFwuXFxcXF9cXFxcfl1cIiwgVUNTQ0hBUiQkKSxcblx0XHRTQ0hFTUUkID0gc3ViZXhwKEFMUEhBJCQgKyBtZXJnZShBTFBIQSQkLCBESUdJVCQkLCBcIltcXFxcK1xcXFwtXFxcXC5dXCIpICsgXCIqXCIpLFxuXHRcdFVTRVJJTkZPJCA9IHN1YmV4cChzdWJleHAoUENUX0VOQ09ERUQkICsgXCJ8XCIgKyBtZXJnZShVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXDpdXCIpKSArIFwiKlwiKSxcblx0XHRERUNfT0NURVQkID0gc3ViZXhwKHN1YmV4cChcIjI1WzAtNV1cIikgKyBcInxcIiArIHN1YmV4cChcIjJbMC00XVwiICsgRElHSVQkJCkgKyBcInxcIiArIHN1YmV4cChcIjFcIiArIERJR0lUJCQgKyBESUdJVCQkKSArIFwifFwiICsgc3ViZXhwKFwiWzEtOV1cIiArIERJR0lUJCQpICsgXCJ8XCIgKyBESUdJVCQkKSxcblx0XHRERUNfT0NURVRfUkVMQVhFRCQgPSBzdWJleHAoc3ViZXhwKFwiMjVbMC01XVwiKSArIFwifFwiICsgc3ViZXhwKFwiMlswLTRdXCIgKyBESUdJVCQkKSArIFwifFwiICsgc3ViZXhwKFwiMVwiICsgRElHSVQkJCArIERJR0lUJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIwP1sxLTldXCIgKyBESUdJVCQkKSArIFwifDA/MD9cIiArIERJR0lUJCQpLCAgLy9yZWxheGVkIHBhcnNpbmcgcnVsZXNcblx0XHRJUFY0QUREUkVTUyQgPSBzdWJleHAoREVDX09DVEVUX1JFTEFYRUQkICsgXCJcXFxcLlwiICsgREVDX09DVEVUX1JFTEFYRUQkICsgXCJcXFxcLlwiICsgREVDX09DVEVUX1JFTEFYRUQkICsgXCJcXFxcLlwiICsgREVDX09DVEVUX1JFTEFYRUQkKSxcblx0XHRIMTYkID0gc3ViZXhwKEhFWERJRyQkICsgXCJ7MSw0fVwiKSxcblx0XHRMUzMyJCA9IHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIiArIEgxNiQpICsgXCJ8XCIgKyBJUFY0QUREUkVTUyQpLFxuXHRcdElQVjZBRERSRVNTMSQgPSBzdWJleHAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7Nn1cIiArIExTMzIkKSwgLy8gICAgICAgICAgICAgICAgICAgICAgICAgICA2KCBoMTYgXCI6XCIgKSBsczMyXG5cdFx0SVBWNkFERFJFU1MyJCA9IHN1YmV4cCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJcXFxcOlxcXFw6XCIgKyBzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcIns1fVwiICsgTFMzMiQpLCAvLyAgICAgICAgICAgICAgICAgICAgICBcIjo6XCIgNSggaDE2IFwiOlwiICkgbHMzMlxuXHRcdElQVjZBRERSRVNTMyQgPSBzdWJleHAoc3ViZXhwKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEgxNiQpICsgXCI/XFxcXDpcXFxcOlwiICsgc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7NH1cIiArIExTMzIkKSwgLy9bICAgICAgICAgICAgICAgaDE2IF0gXCI6OlwiIDQoIGgxNiBcIjpcIiApIGxzMzJcblx0XHRJUFY2QUREUkVTUzQkID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDF9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiArIHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezN9XCIgKyBMUzMyJCksIC8vWyAqMSggaDE2IFwiOlwiICkgaDE2IF0gXCI6OlwiIDMoIGgxNiBcIjpcIiApIGxzMzJcblx0XHRJUFY2QUREUkVTUzUkID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDJ9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiArIHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezJ9XCIgKyBMUzMyJCksIC8vWyAqMiggaDE2IFwiOlwiICkgaDE2IF0gXCI6OlwiIDIoIGgxNiBcIjpcIiApIGxzMzJcblx0XHRJUFY2QUREUkVTUzYkID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDN9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiArICAgICAgICBIMTYkICsgXCJcXFxcOlwiICAgICAgICAgICsgTFMzMiQpLCAvL1sgKjMoIGgxNiBcIjpcIiApIGgxNiBdIFwiOjpcIiAgICBoMTYgXCI6XCIgICBsczMyXG5cdFx0SVBWNkFERFJFU1M3JCA9IHN1YmV4cChzdWJleHAoc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7MCw0fVwiICsgSDE2JCkgKyBcIj9cXFxcOlxcXFw6XCIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgTFMzMiQpLCAvL1sgKjQoIGgxNiBcIjpcIiApIGgxNiBdIFwiOjpcIiAgICAgICAgICAgICAgbHMzMlxuXHRcdElQVjZBRERSRVNTOCQgPSBzdWJleHAoc3ViZXhwKHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezAsNX1cIiArIEgxNiQpICsgXCI/XFxcXDpcXFxcOlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIEgxNiQgKSwgLy9bICo1KCBoMTYgXCI6XCIgKSBoMTYgXSBcIjo6XCIgICAgICAgICAgICAgIGgxNlxuXHRcdElQVjZBRERSRVNTOSQgPSBzdWJleHAoc3ViZXhwKHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezAsNn1cIiArIEgxNiQpICsgXCI/XFxcXDpcXFxcOlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSwgLy9bICo2KCBoMTYgXCI6XCIgKSBoMTYgXSBcIjo6XCJcblx0XHRJUFY2QUREUkVTUyQgPSBzdWJleHAoW0lQVjZBRERSRVNTMSQsIElQVjZBRERSRVNTMiQsIElQVjZBRERSRVNTMyQsIElQVjZBRERSRVNTNCQsIElQVjZBRERSRVNTNSQsIElQVjZBRERSRVNTNiQsIElQVjZBRERSRVNTNyQsIElQVjZBRERSRVNTOCQsIElQVjZBRERSRVNTOSRdLmpvaW4oXCJ8XCIpKSxcblx0XHRaT05FSUQkID0gc3ViZXhwKHN1YmV4cChVTlJFU0VSVkVEJCQgKyBcInxcIiArIFBDVF9FTkNPREVEJCkgKyBcIitcIiksICAvL1JGQyA2ODc0XG5cdFx0SVBWNkFERFJaJCA9IHN1YmV4cChJUFY2QUREUkVTUyQgKyBcIlxcXFwlMjVcIiArIFpPTkVJRCQpLCAgLy9SRkMgNjg3NFxuXHRcdElQVjZBRERSWl9SRUxBWEVEJCA9IHN1YmV4cChJUFY2QUREUkVTUyQgKyBzdWJleHAoXCJcXFxcJTI1fFxcXFwlKD8hXCIgKyBIRVhESUckJCArIFwiezJ9KVwiKSArIFpPTkVJRCQpLCAgLy9SRkMgNjg3NCwgd2l0aCByZWxheGVkIHBhcnNpbmcgcnVsZXNcblx0XHRJUFZGVVRVUkUkID0gc3ViZXhwKFwiW3ZWXVwiICsgSEVYRElHJCQgKyBcIitcXFxcLlwiICsgbWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFw6XVwiKSArIFwiK1wiKSxcblx0XHRJUF9MSVRFUkFMJCA9IHN1YmV4cChcIlxcXFxbXCIgKyBzdWJleHAoSVBWNkFERFJaX1JFTEFYRUQkICsgXCJ8XCIgKyBJUFY2QUREUkVTUyQgKyBcInxcIiArIElQVkZVVFVSRSQpICsgXCJcXFxcXVwiKSwgIC8vUkZDIDY4NzRcblx0XHRSRUdfTkFNRSQgPSBzdWJleHAoc3ViZXhwKFBDVF9FTkNPREVEJCArIFwifFwiICsgbWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpKSArIFwiKlwiKSxcblx0XHRIT1NUJCA9IHN1YmV4cChJUF9MSVRFUkFMJCArIFwifFwiICsgSVBWNEFERFJFU1MkICsgXCIoPyFcIiArIFJFR19OQU1FJCArIFwiKVwiICsgXCJ8XCIgKyBSRUdfTkFNRSQpLFxuXHRcdFBPUlQkID0gc3ViZXhwKERJR0lUJCQgKyBcIipcIiksXG5cdFx0QVVUSE9SSVRZJCA9IHN1YmV4cChzdWJleHAoVVNFUklORk8kICsgXCJAXCIpICsgXCI/XCIgKyBIT1NUJCArIHN1YmV4cChcIlxcXFw6XCIgKyBQT1JUJCkgKyBcIj9cIiksXG5cdFx0UENIQVIkID0gc3ViZXhwKFBDVF9FTkNPREVEJCArIFwifFwiICsgbWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFw6XFxcXEBdXCIpKSxcblx0XHRTRUdNRU5UJCA9IHN1YmV4cChQQ0hBUiQgKyBcIipcIiksXG5cdFx0U0VHTUVOVF9OWiQgPSBzdWJleHAoUENIQVIkICsgXCIrXCIpLFxuXHRcdFNFR01FTlRfTlpfTkMkID0gc3ViZXhwKHN1YmV4cChQQ1RfRU5DT0RFRCQgKyBcInxcIiArIG1lcmdlKFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkLCBcIltcXFxcQF1cIikpICsgXCIrXCIpLFxuXHRcdFBBVEhfQUJFTVBUWSQgPSBzdWJleHAoc3ViZXhwKFwiXFxcXC9cIiArIFNFR01FTlQkKSArIFwiKlwiKSxcblx0XHRQQVRIX0FCU09MVVRFJCA9IHN1YmV4cChcIlxcXFwvXCIgKyBzdWJleHAoU0VHTUVOVF9OWiQgKyBQQVRIX0FCRU1QVFkkKSArIFwiP1wiKSwgIC8vc2ltcGxpZmllZFxuXHRcdFBBVEhfTk9TQ0hFTUUkID0gc3ViZXhwKFNFR01FTlRfTlpfTkMkICsgUEFUSF9BQkVNUFRZJCksICAvL3NpbXBsaWZpZWRcblx0XHRQQVRIX1JPT1RMRVNTJCA9IHN1YmV4cChTRUdNRU5UX05aJCArIFBBVEhfQUJFTVBUWSQpLCAgLy9zaW1wbGlmaWVkXG5cdFx0UEFUSF9FTVBUWSQgPSBcIig/IVwiICsgUENIQVIkICsgXCIpXCIsXG5cdFx0UEFUSCQgPSBzdWJleHAoUEFUSF9BQkVNUFRZJCArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfTk9TQ0hFTUUkICsgXCJ8XCIgKyBQQVRIX1JPT1RMRVNTJCArIFwifFwiICsgUEFUSF9FTVBUWSQpLFxuXHRcdFFVRVJZJCA9IHN1YmV4cChzdWJleHAoUENIQVIkICsgXCJ8XCIgKyBtZXJnZShcIltcXFxcL1xcXFw/XVwiLCBJUFJJVkFURSQkKSkgKyBcIipcIiksXG5cdFx0RlJBR01FTlQkID0gc3ViZXhwKHN1YmV4cChQQ0hBUiQgKyBcInxbXFxcXC9cXFxcP11cIikgKyBcIipcIiksXG5cdFx0SElFUl9QQVJUJCA9IHN1YmV4cChzdWJleHAoXCJcXFxcL1xcXFwvXCIgKyBBVVRIT1JJVFkkICsgUEFUSF9BQkVNUFRZJCkgKyBcInxcIiArIFBBVEhfQUJTT0xVVEUkICsgXCJ8XCIgKyBQQVRIX1JPT1RMRVNTJCArIFwifFwiICsgUEFUSF9FTVBUWSQpLFxuXHRcdFVSSSQgPSBzdWJleHAoU0NIRU1FJCArIFwiXFxcXDpcIiArIEhJRVJfUEFSVCQgKyBzdWJleHAoXCJcXFxcP1wiICsgUVVFUlkkKSArIFwiP1wiICsgc3ViZXhwKFwiXFxcXCNcIiArIEZSQUdNRU5UJCkgKyBcIj9cIiksXG5cdFx0UkVMQVRJVkVfUEFSVCQgPSBzdWJleHAoc3ViZXhwKFwiXFxcXC9cXFxcL1wiICsgQVVUSE9SSVRZJCArIFBBVEhfQUJFTVBUWSQpICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9OT1NDSEVNRSQgKyBcInxcIiArIFBBVEhfRU1QVFkkKSxcblx0XHRSRUxBVElWRSQgPSBzdWJleHAoUkVMQVRJVkVfUEFSVCQgKyBzdWJleHAoXCJcXFxcP1wiICsgUVVFUlkkKSArIFwiP1wiICsgc3ViZXhwKFwiXFxcXCNcIiArIEZSQUdNRU5UJCkgKyBcIj9cIiksXG5cdFx0VVJJX1JFRkVSRU5DRSQgPSBzdWJleHAoVVJJJCArIFwifFwiICsgUkVMQVRJVkUkKSxcblx0XHRBQlNPTFVURV9VUkkkID0gc3ViZXhwKFNDSEVNRSQgKyBcIlxcXFw6XCIgKyBISUVSX1BBUlQkICsgc3ViZXhwKFwiXFxcXD9cIiArIFFVRVJZJCkgKyBcIj9cIiksXG5cblx0XHRHRU5FUklDX1JFRiQgPSBcIl4oXCIgKyBTQ0hFTUUkICsgXCIpXFxcXDpcIiArIHN1YmV4cChzdWJleHAoXCJcXFxcL1xcXFwvKFwiICsgc3ViZXhwKFwiKFwiICsgVVNFUklORk8kICsgXCIpQFwiKSArIFwiPyhcIiArIEhPU1QkICsgXCIpXCIgKyBzdWJleHAoXCJcXFxcOihcIiArIFBPUlQkICsgXCIpXCIpICsgXCI/KVwiKSArIFwiPyhcIiArIFBBVEhfQUJFTVBUWSQgKyBcInxcIiArIFBBVEhfQUJTT0xVVEUkICsgXCJ8XCIgKyBQQVRIX1JPT1RMRVNTJCArIFwifFwiICsgUEFUSF9FTVBUWSQgKyBcIilcIikgKyBzdWJleHAoXCJcXFxcPyhcIiArIFFVRVJZJCArIFwiKVwiKSArIFwiP1wiICsgc3ViZXhwKFwiXFxcXCMoXCIgKyBGUkFHTUVOVCQgKyBcIilcIikgKyBcIj8kXCIsXG5cdFx0UkVMQVRJVkVfUkVGJCA9IFwiXigpezB9XCIgKyBzdWJleHAoc3ViZXhwKFwiXFxcXC9cXFxcLyhcIiArIHN1YmV4cChcIihcIiArIFVTRVJJTkZPJCArIFwiKUBcIikgKyBcIj8oXCIgKyBIT1NUJCArIFwiKVwiICsgc3ViZXhwKFwiXFxcXDooXCIgKyBQT1JUJCArIFwiKVwiKSArIFwiPylcIikgKyBcIj8oXCIgKyBQQVRIX0FCRU1QVFkkICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9OT1NDSEVNRSQgKyBcInxcIiArIFBBVEhfRU1QVFkkICsgXCIpXCIpICsgc3ViZXhwKFwiXFxcXD8oXCIgKyBRVUVSWSQgKyBcIilcIikgKyBcIj9cIiArIHN1YmV4cChcIlxcXFwjKFwiICsgRlJBR01FTlQkICsgXCIpXCIpICsgXCI/JFwiLFxuXHRcdEFCU09MVVRFX1JFRiQgPSBcIl4oXCIgKyBTQ0hFTUUkICsgXCIpXFxcXDpcIiArIHN1YmV4cChzdWJleHAoXCJcXFxcL1xcXFwvKFwiICsgc3ViZXhwKFwiKFwiICsgVVNFUklORk8kICsgXCIpQFwiKSArIFwiPyhcIiArIEhPU1QkICsgXCIpXCIgKyBzdWJleHAoXCJcXFxcOihcIiArIFBPUlQkICsgXCIpXCIpICsgXCI/KVwiKSArIFwiPyhcIiArIFBBVEhfQUJFTVBUWSQgKyBcInxcIiArIFBBVEhfQUJTT0xVVEUkICsgXCJ8XCIgKyBQQVRIX1JPT1RMRVNTJCArIFwifFwiICsgUEFUSF9FTVBUWSQgKyBcIilcIikgKyBzdWJleHAoXCJcXFxcPyhcIiArIFFVRVJZJCArIFwiKVwiKSArIFwiPyRcIixcblx0XHRTQU1FRE9DX1JFRiQgPSBcIl5cIiArIHN1YmV4cChcIlxcXFwjKFwiICsgRlJBR01FTlQkICsgXCIpXCIpICsgXCI/JFwiLFxuXHRcdEFVVEhPUklUWV9SRUYkID0gXCJeXCIgKyBzdWJleHAoXCIoXCIgKyBVU0VSSU5GTyQgKyBcIilAXCIpICsgXCI/KFwiICsgSE9TVCQgKyBcIilcIiArIHN1YmV4cChcIlxcXFw6KFwiICsgUE9SVCQgKyBcIilcIikgKyBcIj8kXCJcblx0O1xuXG5cdHJldHVybiB7XG5cdFx0Tk9UX1NDSEVNRSA6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXl1cIiwgQUxQSEEkJCwgRElHSVQkJCwgXCJbXFxcXCtcXFxcLVxcXFwuXVwiKSwgXCJnXCIpLFxuXHRcdE5PVF9VU0VSSU5GTyA6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXFxcXDpdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxuXHRcdE5PVF9IT1NUIDogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVcXFxcW1xcXFxdXFxcXDpdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxuXHRcdE5PVF9QQVRIIDogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVcXFxcL1xcXFw6XFxcXEBdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSwgXCJnXCIpLFxuXHRcdE5PVF9QQVRIX05PU0NIRU1FIDogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVcXFxcL1xcXFxAXVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCksIFwiZ1wiKSxcblx0XHROT1RfUVVFUlkgOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJV1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFw6XFxcXEBcXFxcL1xcXFw/XVwiLCBJUFJJVkFURSQkKSwgXCJnXCIpLFxuXHRcdE5PVF9GUkFHTUVOVCA6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXDpcXFxcQFxcXFwvXFxcXD9dXCIpLCBcImdcIiksXG5cdFx0RVNDQVBFIDogbmV3IFJlZ0V4cChtZXJnZShcIlteXVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCksIFwiZ1wiKSxcblx0XHRVTlJFU0VSVkVEIDogbmV3IFJlZ0V4cChVTlJFU0VSVkVEJCQsIFwiZ1wiKSxcblx0XHRPVEhFUl9DSEFSUyA6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXVwiLCBVTlJFU0VSVkVEJCQsIFJFU0VSVkVEJCQpLCBcImdcIiksXG5cdFx0UENUX0VOQ09ERUQgOiBuZXcgUmVnRXhwKFBDVF9FTkNPREVEJCwgXCJnXCIpLFxuXHRcdElQVjRBRERSRVNTIDogbmV3IFJlZ0V4cChcIl4oXCIgKyBJUFY0QUREUkVTUyQgKyBcIikkXCIpLFxuXHRcdElQVjZBRERSRVNTIDogbmV3IFJlZ0V4cChcIl5cXFxcWz8oXCIgKyBJUFY2QUREUkVTUyQgKyBcIilcIiArIHN1YmV4cChzdWJleHAoXCJcXFxcJTI1fFxcXFwlKD8hXCIgKyBIRVhESUckJCArIFwiezJ9KVwiKSArIFwiKFwiICsgWk9ORUlEJCArIFwiKVwiKSArIFwiP1xcXFxdPyRcIikgIC8vUkZDIDY4NzQsIHdpdGggcmVsYXhlZCBwYXJzaW5nIHJ1bGVzXG5cdH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkRXhwcyhmYWxzZSk7XG4iLCJpbXBvcnQgeyBVUklSZWdFeHBzIH0gZnJvbSBcIi4vdXJpXCI7XG5pbXBvcnQgeyBidWlsZEV4cHMgfSBmcm9tIFwiLi9yZWdleHBzLXVyaVwiO1xuXG5leHBvcnQgZGVmYXVsdCBidWlsZEV4cHModHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qKiBIaWdoZXN0IHBvc2l0aXZlIHNpZ25lZCAzMi1iaXQgZmxvYXQgdmFsdWUgKi9cbmNvbnN0IG1heEludCA9IDIxNDc0ODM2NDc7IC8vIGFrYS4gMHg3RkZGRkZGRiBvciAyXjMxLTFcblxuLyoqIEJvb3RzdHJpbmcgcGFyYW1ldGVycyAqL1xuY29uc3QgYmFzZSA9IDM2O1xuY29uc3QgdE1pbiA9IDE7XG5jb25zdCB0TWF4ID0gMjY7XG5jb25zdCBza2V3ID0gMzg7XG5jb25zdCBkYW1wID0gNzAwO1xuY29uc3QgaW5pdGlhbEJpYXMgPSA3MjtcbmNvbnN0IGluaXRpYWxOID0gMTI4OyAvLyAweDgwXG5jb25zdCBkZWxpbWl0ZXIgPSAnLSc7IC8vICdcXHgyRCdcblxuLyoqIFJlZ3VsYXIgZXhwcmVzc2lvbnMgKi9cbmNvbnN0IHJlZ2V4UHVueWNvZGUgPSAvXnhuLS0vO1xuY29uc3QgcmVnZXhOb25BU0NJSSA9IC9bXlxcMC1cXHg3RV0vOyAvLyBub24tQVNDSUkgY2hhcnNcbmNvbnN0IHJlZ2V4U2VwYXJhdG9ycyA9IC9bXFx4MkVcXHUzMDAyXFx1RkYwRVxcdUZGNjFdL2c7IC8vIFJGQyAzNDkwIHNlcGFyYXRvcnNcblxuLyoqIEVycm9yIG1lc3NhZ2VzICovXG5jb25zdCBlcnJvcnMgPSB7XG5cdCdvdmVyZmxvdyc6ICdPdmVyZmxvdzogaW5wdXQgbmVlZHMgd2lkZXIgaW50ZWdlcnMgdG8gcHJvY2VzcycsXG5cdCdub3QtYmFzaWMnOiAnSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KScsXG5cdCdpbnZhbGlkLWlucHV0JzogJ0ludmFsaWQgaW5wdXQnXG59O1xuXG4vKiogQ29udmVuaWVuY2Ugc2hvcnRjdXRzICovXG5jb25zdCBiYXNlTWludXNUTWluID0gYmFzZSAtIHRNaW47XG5jb25zdCBmbG9vciA9IE1hdGguZmxvb3I7XG5jb25zdCBzdHJpbmdGcm9tQ2hhckNvZGUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlO1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqXG4gKiBBIGdlbmVyaWMgZXJyb3IgdXRpbGl0eSBmdW5jdGlvbi5cbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZSBUaGUgZXJyb3IgdHlwZS5cbiAqIEByZXR1cm5zIHtFcnJvcn0gVGhyb3dzIGEgYFJhbmdlRXJyb3JgIHdpdGggdGhlIGFwcGxpY2FibGUgZXJyb3IgbWVzc2FnZS5cbiAqL1xuZnVuY3Rpb24gZXJyb3IodHlwZSkge1xuXHR0aHJvdyBuZXcgUmFuZ2VFcnJvcihlcnJvcnNbdHlwZV0pO1xufVxuXG4vKipcbiAqIEEgZ2VuZXJpYyBgQXJyYXkjbWFwYCB1dGlsaXR5IGZ1bmN0aW9uLlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7QXJyYXl9IGFycmF5IFRoZSBhcnJheSB0byBpdGVyYXRlIG92ZXIuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnkgYXJyYXlcbiAqIGl0ZW0uXG4gKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IGFycmF5IG9mIHZhbHVlcyByZXR1cm5lZCBieSB0aGUgY2FsbGJhY2sgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1hcChhcnJheSwgZm4pIHtcblx0Y29uc3QgcmVzdWx0ID0gW107XG5cdGxldCBsZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cdHdoaWxlIChsZW5ndGgtLSkge1xuXHRcdHJlc3VsdFtsZW5ndGhdID0gZm4oYXJyYXlbbGVuZ3RoXSk7XG5cdH1cblx0cmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqXG4gKiBBIHNpbXBsZSBgQXJyYXkjbWFwYC1saWtlIHdyYXBwZXIgdG8gd29yayB3aXRoIGRvbWFpbiBuYW1lIHN0cmluZ3Mgb3IgZW1haWxcbiAqIGFkZHJlc3Nlcy5cbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge1N0cmluZ30gZG9tYWluIFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzLlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgVGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgZm9yIGV2ZXJ5XG4gKiBjaGFyYWN0ZXIuXG4gKiBAcmV0dXJucyB7QXJyYXl9IEEgbmV3IHN0cmluZyBvZiBjaGFyYWN0ZXJzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFja1xuICogZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIG1hcERvbWFpbihzdHJpbmcsIGZuKSB7XG5cdGNvbnN0IHBhcnRzID0gc3RyaW5nLnNwbGl0KCdAJyk7XG5cdGxldCByZXN1bHQgPSAnJztcblx0aWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcblx0XHQvLyBJbiBlbWFpbCBhZGRyZXNzZXMsIG9ubHkgdGhlIGRvbWFpbiBuYW1lIHNob3VsZCBiZSBwdW55Y29kZWQuIExlYXZlXG5cdFx0Ly8gdGhlIGxvY2FsIHBhcnQgKGkuZS4gZXZlcnl0aGluZyB1cCB0byBgQGApIGludGFjdC5cblx0XHRyZXN1bHQgPSBwYXJ0c1swXSArICdAJztcblx0XHRzdHJpbmcgPSBwYXJ0c1sxXTtcblx0fVxuXHQvLyBBdm9pZCBgc3BsaXQocmVnZXgpYCBmb3IgSUU4IGNvbXBhdGliaWxpdHkuIFNlZSAjMTcuXG5cdHN0cmluZyA9IHN0cmluZy5yZXBsYWNlKHJlZ2V4U2VwYXJhdG9ycywgJ1xceDJFJyk7XG5cdGNvbnN0IGxhYmVscyA9IHN0cmluZy5zcGxpdCgnLicpO1xuXHRjb25zdCBlbmNvZGVkID0gbWFwKGxhYmVscywgZm4pLmpvaW4oJy4nKTtcblx0cmV0dXJuIHJlc3VsdCArIGVuY29kZWQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhbiBhcnJheSBjb250YWluaW5nIHRoZSBudW1lcmljIGNvZGUgcG9pbnRzIG9mIGVhY2ggVW5pY29kZVxuICogY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcuIFdoaWxlIEphdmFTY3JpcHQgdXNlcyBVQ1MtMiBpbnRlcm5hbGx5LFxuICogdGhpcyBmdW5jdGlvbiB3aWxsIGNvbnZlcnQgYSBwYWlyIG9mIHN1cnJvZ2F0ZSBoYWx2ZXMgKGVhY2ggb2Ygd2hpY2hcbiAqIFVDUy0yIGV4cG9zZXMgYXMgc2VwYXJhdGUgY2hhcmFjdGVycykgaW50byBhIHNpbmdsZSBjb2RlIHBvaW50LFxuICogbWF0Y2hpbmcgVVRGLTE2LlxuICogQHNlZSBgcHVueWNvZGUudWNzMi5lbmNvZGVgXG4gKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cbiAqIEBtZW1iZXJPZiBwdW55Y29kZS51Y3MyXG4gKiBAbmFtZSBkZWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIFVuaWNvZGUgaW5wdXQgc3RyaW5nIChVQ1MtMikuXG4gKiBAcmV0dXJucyB7QXJyYXl9IFRoZSBuZXcgYXJyYXkgb2YgY29kZSBwb2ludHMuXG4gKi9cbmZ1bmN0aW9uIHVjczJkZWNvZGUoc3RyaW5nKSB7XG5cdGNvbnN0IG91dHB1dCA9IFtdO1xuXHRsZXQgY291bnRlciA9IDA7XG5cdGNvbnN0IGxlbmd0aCA9IHN0cmluZy5sZW5ndGg7XG5cdHdoaWxlIChjb3VudGVyIDwgbGVuZ3RoKSB7XG5cdFx0Y29uc3QgdmFsdWUgPSBzdHJpbmcuY2hhckNvZGVBdChjb3VudGVyKyspO1xuXHRcdGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRcdC8vIEl0J3MgYSBoaWdoIHN1cnJvZ2F0ZSwgYW5kIHRoZXJlIGlzIGEgbmV4dCBjaGFyYWN0ZXIuXG5cdFx0XHRjb25zdCBleHRyYSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0XHRpZiAoKGV4dHJhICYgMHhGQzAwKSA9PSAweERDMDApIHsgLy8gTG93IHN1cnJvZ2F0ZS5cblx0XHRcdFx0b3V0cHV0LnB1c2goKCh2YWx1ZSAmIDB4M0ZGKSA8PCAxMCkgKyAoZXh0cmEgJiAweDNGRikgKyAweDEwMDAwKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIEl0J3MgYW4gdW5tYXRjaGVkIHN1cnJvZ2F0ZTsgb25seSBhcHBlbmQgdGhpcyBjb2RlIHVuaXQsIGluIGNhc2UgdGhlXG5cdFx0XHRcdC8vIG5leHQgY29kZSB1bml0IGlzIHRoZSBoaWdoIHN1cnJvZ2F0ZSBvZiBhIHN1cnJvZ2F0ZSBwYWlyLlxuXHRcdFx0XHRvdXRwdXQucHVzaCh2YWx1ZSk7XG5cdFx0XHRcdGNvdW50ZXItLTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0b3V0cHV0LnB1c2godmFsdWUpO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gb3V0cHV0O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBzdHJpbmcgYmFzZWQgb24gYW4gYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cbiAqIEBzZWUgYHB1bnljb2RlLnVjczIuZGVjb2RlYFxuICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcbiAqIEBuYW1lIGVuY29kZVxuICogQHBhcmFtIHtBcnJheX0gY29kZVBvaW50cyBUaGUgYXJyYXkgb2YgbnVtZXJpYyBjb2RlIHBvaW50cy5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBuZXcgVW5pY29kZSBzdHJpbmcgKFVDUy0yKS5cbiAqL1xuY29uc3QgdWNzMmVuY29kZSA9IGFycmF5ID0+IFN0cmluZy5mcm9tQ29kZVBvaW50KC4uLmFycmF5KTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIGJhc2ljIGNvZGUgcG9pbnQgaW50byBhIGRpZ2l0L2ludGVnZXIuXG4gKiBAc2VlIGBkaWdpdFRvQmFzaWMoKWBcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0ge051bWJlcn0gY29kZVBvaW50IFRoZSBiYXNpYyBudW1lcmljIGNvZGUgcG9pbnQgdmFsdWUuXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQgKGZvciB1c2UgaW5cbiAqIHJlcHJlc2VudGluZyBpbnRlZ2VycykgaW4gdGhlIHJhbmdlIGAwYCB0byBgYmFzZSAtIDFgLCBvciBgYmFzZWAgaWZcbiAqIHRoZSBjb2RlIHBvaW50IGRvZXMgbm90IHJlcHJlc2VudCBhIHZhbHVlLlxuICovXG5jb25zdCBiYXNpY1RvRGlnaXQgPSBmdW5jdGlvbihjb2RlUG9pbnQpIHtcblx0aWYgKGNvZGVQb2ludCAtIDB4MzAgPCAweDBBKSB7XG5cdFx0cmV0dXJuIGNvZGVQb2ludCAtIDB4MTY7XG5cdH1cblx0aWYgKGNvZGVQb2ludCAtIDB4NDEgPCAweDFBKSB7XG5cdFx0cmV0dXJuIGNvZGVQb2ludCAtIDB4NDE7XG5cdH1cblx0aWYgKGNvZGVQb2ludCAtIDB4NjEgPCAweDFBKSB7XG5cdFx0cmV0dXJuIGNvZGVQb2ludCAtIDB4NjE7XG5cdH1cblx0cmV0dXJuIGJhc2U7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgZGlnaXQvaW50ZWdlciBpbnRvIGEgYmFzaWMgY29kZSBwb2ludC5cbiAqIEBzZWUgYGJhc2ljVG9EaWdpdCgpYFxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBkaWdpdCBUaGUgbnVtZXJpYyB2YWx1ZSBvZiBhIGJhc2ljIGNvZGUgcG9pbnQuXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBUaGUgYmFzaWMgY29kZSBwb2ludCB3aG9zZSB2YWx1ZSAod2hlbiB1c2VkIGZvclxuICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpcyBgZGlnaXRgLCB3aGljaCBuZWVkcyB0byBiZSBpbiB0aGUgcmFuZ2VcbiAqIGAwYCB0byBgYmFzZSAtIDFgLiBJZiBgZmxhZ2AgaXMgbm9uLXplcm8sIHRoZSB1cHBlcmNhc2UgZm9ybSBpc1xuICogdXNlZDsgZWxzZSwgdGhlIGxvd2VyY2FzZSBmb3JtIGlzIHVzZWQuIFRoZSBiZWhhdmlvciBpcyB1bmRlZmluZWRcbiAqIGlmIGBmbGFnYCBpcyBub24temVybyBhbmQgYGRpZ2l0YCBoYXMgbm8gdXBwZXJjYXNlIGZvcm0uXG4gKi9cbmNvbnN0IGRpZ2l0VG9CYXNpYyA9IGZ1bmN0aW9uKGRpZ2l0LCBmbGFnKSB7XG5cdC8vICAwLi4yNSBtYXAgdG8gQVNDSUkgYS4ueiBvciBBLi5aXG5cdC8vIDI2Li4zNSBtYXAgdG8gQVNDSUkgMC4uOVxuXHRyZXR1cm4gZGlnaXQgKyAyMiArIDc1ICogKGRpZ2l0IDwgMjYpIC0gKChmbGFnICE9IDApIDw8IDUpO1xufTtcblxuLyoqXG4gKiBCaWFzIGFkYXB0YXRpb24gZnVuY3Rpb24gYXMgcGVyIHNlY3Rpb24gMy40IG9mIFJGQyAzNDkyLlxuICogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0OTIjc2VjdGlvbi0zLjRcbiAqIEBwcml2YXRlXG4gKi9cbmNvbnN0IGFkYXB0ID0gZnVuY3Rpb24oZGVsdGEsIG51bVBvaW50cywgZmlyc3RUaW1lKSB7XG5cdGxldCBrID0gMDtcblx0ZGVsdGEgPSBmaXJzdFRpbWUgPyBmbG9vcihkZWx0YSAvIGRhbXApIDogZGVsdGEgPj4gMTtcblx0ZGVsdGEgKz0gZmxvb3IoZGVsdGEgLyBudW1Qb2ludHMpO1xuXHRmb3IgKC8qIG5vIGluaXRpYWxpemF0aW9uICovOyBkZWx0YSA+IGJhc2VNaW51c1RNaW4gKiB0TWF4ID4+IDE7IGsgKz0gYmFzZSkge1xuXHRcdGRlbHRhID0gZmxvb3IoZGVsdGEgLyBiYXNlTWludXNUTWluKTtcblx0fVxuXHRyZXR1cm4gZmxvb3IoayArIChiYXNlTWludXNUTWluICsgMSkgKiBkZWx0YSAvIChkZWx0YSArIHNrZXcpKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzIHRvIGEgc3RyaW5nIG9mIFVuaWNvZGVcbiAqIHN5bWJvbHMuXG4gKiBAbWVtYmVyT2YgcHVueWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cbiAqL1xuY29uc3QgZGVjb2RlID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0Ly8gRG9uJ3QgdXNlIFVDUy0yLlxuXHRjb25zdCBvdXRwdXQgPSBbXTtcblx0Y29uc3QgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cdGxldCBpID0gMDtcblx0bGV0IG4gPSBpbml0aWFsTjtcblx0bGV0IGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzOiBsZXQgYGJhc2ljYCBiZSB0aGUgbnVtYmVyIG9mIGlucHV0IGNvZGVcblx0Ly8gcG9pbnRzIGJlZm9yZSB0aGUgbGFzdCBkZWxpbWl0ZXIsIG9yIGAwYCBpZiB0aGVyZSBpcyBub25lLCB0aGVuIGNvcHlcblx0Ly8gdGhlIGZpcnN0IGJhc2ljIGNvZGUgcG9pbnRzIHRvIHRoZSBvdXRwdXQuXG5cblx0bGV0IGJhc2ljID0gaW5wdXQubGFzdEluZGV4T2YoZGVsaW1pdGVyKTtcblx0aWYgKGJhc2ljIDwgMCkge1xuXHRcdGJhc2ljID0gMDtcblx0fVxuXG5cdGZvciAobGV0IGogPSAwOyBqIDwgYmFzaWM7ICsraikge1xuXHRcdC8vIGlmIGl0J3Mgbm90IGEgYmFzaWMgY29kZSBwb2ludFxuXHRcdGlmIChpbnB1dC5jaGFyQ29kZUF0KGopID49IDB4ODApIHtcblx0XHRcdGVycm9yKCdub3QtYmFzaWMnKTtcblx0XHR9XG5cdFx0b3V0cHV0LnB1c2goaW5wdXQuY2hhckNvZGVBdChqKSk7XG5cdH1cblxuXHQvLyBNYWluIGRlY29kaW5nIGxvb3A6IHN0YXJ0IGp1c3QgYWZ0ZXIgdGhlIGxhc3QgZGVsaW1pdGVyIGlmIGFueSBiYXNpYyBjb2RlXG5cdC8vIHBvaW50cyB3ZXJlIGNvcGllZDsgc3RhcnQgYXQgdGhlIGJlZ2lubmluZyBvdGhlcndpc2UuXG5cblx0Zm9yIChsZXQgaW5kZXggPSBiYXNpYyA+IDAgPyBiYXNpYyArIDEgOiAwOyBpbmRleCA8IGlucHV0TGVuZ3RoOyAvKiBubyBmaW5hbCBleHByZXNzaW9uICovKSB7XG5cblx0XHQvLyBgaW5kZXhgIGlzIHRoZSBpbmRleCBvZiB0aGUgbmV4dCBjaGFyYWN0ZXIgdG8gYmUgY29uc3VtZWQuXG5cdFx0Ly8gRGVjb2RlIGEgZ2VuZXJhbGl6ZWQgdmFyaWFibGUtbGVuZ3RoIGludGVnZXIgaW50byBgZGVsdGFgLFxuXHRcdC8vIHdoaWNoIGdldHMgYWRkZWQgdG8gYGlgLiBUaGUgb3ZlcmZsb3cgY2hlY2tpbmcgaXMgZWFzaWVyXG5cdFx0Ly8gaWYgd2UgaW5jcmVhc2UgYGlgIGFzIHdlIGdvLCB0aGVuIHN1YnRyYWN0IG9mZiBpdHMgc3RhcnRpbmdcblx0XHQvLyB2YWx1ZSBhdCB0aGUgZW5kIHRvIG9idGFpbiBgZGVsdGFgLlxuXHRcdGxldCBvbGRpID0gaTtcblx0XHRmb3IgKGxldCB3ID0gMSwgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XG5cblx0XHRcdGlmIChpbmRleCA+PSBpbnB1dExlbmd0aCkge1xuXHRcdFx0XHRlcnJvcignaW52YWxpZC1pbnB1dCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBkaWdpdCA9IGJhc2ljVG9EaWdpdChpbnB1dC5jaGFyQ29kZUF0KGluZGV4KyspKTtcblxuXHRcdFx0aWYgKGRpZ2l0ID49IGJhc2UgfHwgZGlnaXQgPiBmbG9vcigobWF4SW50IC0gaSkgLyB3KSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0aSArPSBkaWdpdCAqIHc7XG5cdFx0XHRjb25zdCB0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcblxuXHRcdFx0aWYgKGRpZ2l0IDwgdCkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgYmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0aWYgKHcgPiBmbG9vcihtYXhJbnQgLyBiYXNlTWludXNUKSkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblxuXHRcdFx0dyAqPSBiYXNlTWludXNUO1xuXG5cdFx0fVxuXG5cdFx0Y29uc3Qgb3V0ID0gb3V0cHV0Lmxlbmd0aCArIDE7XG5cdFx0YmlhcyA9IGFkYXB0KGkgLSBvbGRpLCBvdXQsIG9sZGkgPT0gMCk7XG5cblx0XHQvLyBgaWAgd2FzIHN1cHBvc2VkIHRvIHdyYXAgYXJvdW5kIGZyb20gYG91dGAgdG8gYDBgLFxuXHRcdC8vIGluY3JlbWVudGluZyBgbmAgZWFjaCB0aW1lLCBzbyB3ZSdsbCBmaXggdGhhdCBub3c6XG5cdFx0aWYgKGZsb29yKGkgLyBvdXQpID4gbWF4SW50IC0gbikge1xuXHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0fVxuXG5cdFx0biArPSBmbG9vcihpIC8gb3V0KTtcblx0XHRpICU9IG91dDtcblxuXHRcdC8vIEluc2VydCBgbmAgYXQgcG9zaXRpb24gYGlgIG9mIHRoZSBvdXRwdXQuXG5cdFx0b3V0cHV0LnNwbGljZShpKyssIDAsIG4pO1xuXG5cdH1cblxuXHRyZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4ub3V0cHV0KTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzIChlLmcuIGEgZG9tYWluIG5hbWUgbGFiZWwpIHRvIGFcbiAqIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMuXG4gKiBAbWVtYmVyT2YgcHVueWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgc3RyaW5nIG9mIFVuaWNvZGUgc3ltYm9scy5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSByZXN1bHRpbmcgUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cbiAqL1xuY29uc3QgZW5jb2RlID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0Y29uc3Qgb3V0cHV0ID0gW107XG5cblx0Ly8gQ29udmVydCB0aGUgaW5wdXQgaW4gVUNTLTIgdG8gYW4gYXJyYXkgb2YgVW5pY29kZSBjb2RlIHBvaW50cy5cblx0aW5wdXQgPSB1Y3MyZGVjb2RlKGlucHV0KTtcblxuXHQvLyBDYWNoZSB0aGUgbGVuZ3RoLlxuXHRsZXQgaW5wdXRMZW5ndGggPSBpbnB1dC5sZW5ndGg7XG5cblx0Ly8gSW5pdGlhbGl6ZSB0aGUgc3RhdGUuXG5cdGxldCBuID0gaW5pdGlhbE47XG5cdGxldCBkZWx0YSA9IDA7XG5cdGxldCBiaWFzID0gaW5pdGlhbEJpYXM7XG5cblx0Ly8gSGFuZGxlIHRoZSBiYXNpYyBjb2RlIHBvaW50cy5cblx0Zm9yIChjb25zdCBjdXJyZW50VmFsdWUgb2YgaW5wdXQpIHtcblx0XHRpZiAoY3VycmVudFZhbHVlIDwgMHg4MCkge1xuXHRcdFx0b3V0cHV0LnB1c2goc3RyaW5nRnJvbUNoYXJDb2RlKGN1cnJlbnRWYWx1ZSkpO1xuXHRcdH1cblx0fVxuXG5cdGxldCBiYXNpY0xlbmd0aCA9IG91dHB1dC5sZW5ndGg7XG5cdGxldCBoYW5kbGVkQ1BDb3VudCA9IGJhc2ljTGVuZ3RoO1xuXG5cdC8vIGBoYW5kbGVkQ1BDb3VudGAgaXMgdGhlIG51bWJlciBvZiBjb2RlIHBvaW50cyB0aGF0IGhhdmUgYmVlbiBoYW5kbGVkO1xuXHQvLyBgYmFzaWNMZW5ndGhgIGlzIHRoZSBudW1iZXIgb2YgYmFzaWMgY29kZSBwb2ludHMuXG5cblx0Ly8gRmluaXNoIHRoZSBiYXNpYyBzdHJpbmcgd2l0aCBhIGRlbGltaXRlciB1bmxlc3MgaXQncyBlbXB0eS5cblx0aWYgKGJhc2ljTGVuZ3RoKSB7XG5cdFx0b3V0cHV0LnB1c2goZGVsaW1pdGVyKTtcblx0fVxuXG5cdC8vIE1haW4gZW5jb2RpbmcgbG9vcDpcblx0d2hpbGUgKGhhbmRsZWRDUENvdW50IDwgaW5wdXRMZW5ndGgpIHtcblxuXHRcdC8vIEFsbCBub24tYmFzaWMgY29kZSBwb2ludHMgPCBuIGhhdmUgYmVlbiBoYW5kbGVkIGFscmVhZHkuIEZpbmQgdGhlIG5leHRcblx0XHQvLyBsYXJnZXIgb25lOlxuXHRcdGxldCBtID0gbWF4SW50O1xuXHRcdGZvciAoY29uc3QgY3VycmVudFZhbHVlIG9mIGlucHV0KSB7XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlID49IG4gJiYgY3VycmVudFZhbHVlIDwgbSkge1xuXHRcdFx0XHRtID0gY3VycmVudFZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEluY3JlYXNlIGBkZWx0YWAgZW5vdWdoIHRvIGFkdmFuY2UgdGhlIGRlY29kZXIncyA8bixpPiBzdGF0ZSB0byA8bSwwPixcblx0XHQvLyBidXQgZ3VhcmQgYWdhaW5zdCBvdmVyZmxvdy5cblx0XHRjb25zdCBoYW5kbGVkQ1BDb3VudFBsdXNPbmUgPSBoYW5kbGVkQ1BDb3VudCArIDE7XG5cdFx0aWYgKG0gLSBuID4gZmxvb3IoKG1heEludCAtIGRlbHRhKSAvIGhhbmRsZWRDUENvdW50UGx1c09uZSkpIHtcblx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdH1cblxuXHRcdGRlbHRhICs9IChtIC0gbikgKiBoYW5kbGVkQ1BDb3VudFBsdXNPbmU7XG5cdFx0biA9IG07XG5cblx0XHRmb3IgKGNvbnN0IGN1cnJlbnRWYWx1ZSBvZiBpbnB1dCkge1xuXHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA8IG4gJiYgKytkZWx0YSA+IG1heEludCkge1xuXHRcdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHRcdH1cblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPT0gbikge1xuXHRcdFx0XHQvLyBSZXByZXNlbnQgZGVsdGEgYXMgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlci5cblx0XHRcdFx0bGV0IHEgPSBkZWx0YTtcblx0XHRcdFx0Zm9yIChsZXQgayA9IGJhc2U7IC8qIG5vIGNvbmRpdGlvbiAqLzsgayArPSBiYXNlKSB7XG5cdFx0XHRcdFx0Y29uc3QgdCA9IGsgPD0gYmlhcyA/IHRNaW4gOiAoayA+PSBiaWFzICsgdE1heCA/IHRNYXggOiBrIC0gYmlhcyk7XG5cdFx0XHRcdFx0aWYgKHEgPCB0KSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29uc3QgcU1pbnVzVCA9IHEgLSB0O1xuXHRcdFx0XHRcdGNvbnN0IGJhc2VNaW51c1QgPSBiYXNlIC0gdDtcblx0XHRcdFx0XHRvdXRwdXQucHVzaChcblx0XHRcdFx0XHRcdHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWModCArIHFNaW51c1QgJSBiYXNlTWludXNULCAwKSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHEgPSBmbG9vcihxTWludXNUIC8gYmFzZU1pbnVzVCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoZGlnaXRUb0Jhc2ljKHEsIDApKSk7XG5cdFx0XHRcdGJpYXMgPSBhZGFwdChkZWx0YSwgaGFuZGxlZENQQ291bnRQbHVzT25lLCBoYW5kbGVkQ1BDb3VudCA9PSBiYXNpY0xlbmd0aCk7XG5cdFx0XHRcdGRlbHRhID0gMDtcblx0XHRcdFx0KytoYW5kbGVkQ1BDb3VudDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQrK2RlbHRhO1xuXHRcdCsrbjtcblxuXHR9XG5cdHJldHVybiBvdXRwdXQuam9pbignJyk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgUHVueWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3NcbiAqIHRvIFVuaWNvZGUuIE9ubHkgdGhlIFB1bnljb2RlZCBwYXJ0cyBvZiB0aGUgaW5wdXQgd2lsbCBiZSBjb252ZXJ0ZWQsIGkuZS5cbiAqIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IG9uIGEgc3RyaW5nIHRoYXQgaGFzIGFscmVhZHkgYmVlblxuICogY29udmVydGVkIHRvIFVuaWNvZGUuXG4gKiBAbWVtYmVyT2YgcHVueWNvZGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBpbnB1dCBUaGUgUHVueWNvZGVkIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG9cbiAqIGNvbnZlcnQgdG8gVW5pY29kZS5cbiAqIEByZXR1cm5zIHtTdHJpbmd9IFRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBQdW55Y29kZVxuICogc3RyaW5nLlxuICovXG5jb25zdCB0b1VuaWNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xuXHRyZXR1cm4gbWFwRG9tYWluKGlucHV0LCBmdW5jdGlvbihzdHJpbmcpIHtcblx0XHRyZXR1cm4gcmVnZXhQdW55Y29kZS50ZXN0KHN0cmluZylcblx0XHRcdD8gZGVjb2RlKHN0cmluZy5zbGljZSg0KS50b0xvd2VyQ2FzZSgpKVxuXHRcdFx0OiBzdHJpbmc7XG5cdH0pO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIFVuaWNvZGUgc3RyaW5nIHJlcHJlc2VudGluZyBhIGRvbWFpbiBuYW1lIG9yIGFuIGVtYWlsIGFkZHJlc3MgdG9cbiAqIFB1bnljb2RlLiBPbmx5IHRoZSBub24tQVNDSUkgcGFydHMgb2YgdGhlIGRvbWFpbiBuYW1lIHdpbGwgYmUgY29udmVydGVkLFxuICogaS5lLiBpdCBkb2Vzbid0IG1hdHRlciBpZiB5b3UgY2FsbCBpdCB3aXRoIGEgZG9tYWluIHRoYXQncyBhbHJlYWR5IGluXG4gKiBBU0NJSS5cbiAqIEBtZW1iZXJPZiBwdW55Y29kZVxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBkb21haW4gbmFtZSBvciBlbWFpbCBhZGRyZXNzIHRvIGNvbnZlcnQsIGFzIGFcbiAqIFVuaWNvZGUgc3RyaW5nLlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFB1bnljb2RlIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBnaXZlbiBkb21haW4gbmFtZSBvclxuICogZW1haWwgYWRkcmVzcy5cbiAqL1xuY29uc3QgdG9BU0NJSSA9IGZ1bmN0aW9uKGlucHV0KSB7XG5cdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdHJldHVybiByZWdleE5vbkFTQ0lJLnRlc3Qoc3RyaW5nKVxuXHRcdFx0PyAneG4tLScgKyBlbmNvZGUoc3RyaW5nKVxuXHRcdFx0OiBzdHJpbmc7XG5cdH0pO1xufTtcblxuLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXG5cbi8qKiBEZWZpbmUgdGhlIHB1YmxpYyBBUEkgKi9cbmNvbnN0IHB1bnljb2RlID0ge1xuXHQvKipcblx0ICogQSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBjdXJyZW50IFB1bnljb2RlLmpzIHZlcnNpb24gbnVtYmVyLlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHR5cGUgU3RyaW5nXG5cdCAqL1xuXHQndmVyc2lvbic6ICcyLjEuMCcsXG5cdC8qKlxuXHQgKiBBbiBvYmplY3Qgb2YgbWV0aG9kcyB0byBjb252ZXJ0IGZyb20gSmF2YVNjcmlwdCdzIGludGVybmFsIGNoYXJhY3RlclxuXHQgKiByZXByZXNlbnRhdGlvbiAoVUNTLTIpIHRvIFVuaWNvZGUgY29kZSBwb2ludHMsIGFuZCBiYWNrLlxuXHQgKiBAc2VlIDxodHRwczovL21hdGhpYXNieW5lbnMuYmUvbm90ZXMvamF2YXNjcmlwdC1lbmNvZGluZz5cblx0ICogQG1lbWJlck9mIHB1bnljb2RlXG5cdCAqIEB0eXBlIE9iamVjdFxuXHQgKi9cblx0J3VjczInOiB7XG5cdFx0J2RlY29kZSc6IHVjczJkZWNvZGUsXG5cdFx0J2VuY29kZSc6IHVjczJlbmNvZGVcblx0fSxcblx0J2RlY29kZSc6IGRlY29kZSxcblx0J2VuY29kZSc6IGVuY29kZSxcblx0J3RvQVNDSUknOiB0b0FTQ0lJLFxuXHQndG9Vbmljb2RlJzogdG9Vbmljb2RlXG59O1xuXG5leHBvcnQgZGVmYXVsdCBwdW55Y29kZTtcbiIsIi8qKlxuICogVVJJLmpzXG4gKlxuICogQGZpbGVvdmVydmlldyBBbiBSRkMgMzk4NiBjb21wbGlhbnQsIHNjaGVtZSBleHRlbmRhYmxlIFVSSSBwYXJzaW5nL3ZhbGlkYXRpbmcvcmVzb2x2aW5nIGxpYnJhcnkgZm9yIEphdmFTY3JpcHQuXG4gKiBAYXV0aG9yIDxhIGhyZWY9XCJtYWlsdG86Z2FyeS5jb3VydEBnbWFpbC5jb21cIj5HYXJ5IENvdXJ0PC9hPlxuICogQHNlZSBodHRwOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvdXJpLWpzXG4gKi9cblxuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMSBHYXJ5IENvdXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZVxuICogcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2ZcbiAqICAgICAgIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqXG4gKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdFxuICogICAgICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHNcbiAqICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdBUlkgQ09VUlQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEXG4gKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgR0FSWSBDT1VSVCBPUlxuICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1JcbiAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1JcbiAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbiAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkdcbiAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRlxuICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKlxuICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGFyZSB0aG9zZSBvZiB0aGVcbiAqIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkXG4gKiBvciBpbXBsaWVkLCBvZiBHYXJ5IENvdXJ0LlxuICovXG5cbmltcG9ydCBVUklfUFJPVE9DT0wgZnJvbSBcIi4vcmVnZXhwcy11cmlcIjtcbmltcG9ydCBJUklfUFJPVE9DT0wgZnJvbSBcIi4vcmVnZXhwcy1pcmlcIjtcbmltcG9ydCBwdW55Y29kZSBmcm9tIFwicHVueWNvZGVcIjtcbmltcG9ydCB7IHRvVXBwZXJDYXNlLCB0eXBlT2YsIGFzc2lnbiB9IGZyb20gXCIuL3V0aWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBVUklDb21wb25lbnRzIHtcblx0c2NoZW1lPzpzdHJpbmc7XG5cdHVzZXJpbmZvPzpzdHJpbmc7XG5cdGhvc3Q/OnN0cmluZztcblx0cG9ydD86bnVtYmVyfHN0cmluZztcblx0cGF0aD86c3RyaW5nO1xuXHRxdWVyeT86c3RyaW5nO1xuXHRmcmFnbWVudD86c3RyaW5nO1xuXHRyZWZlcmVuY2U/OnN0cmluZztcblx0ZXJyb3I/OnN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVUklPcHRpb25zIHtcblx0c2NoZW1lPzpzdHJpbmc7XG5cdHJlZmVyZW5jZT86c3RyaW5nO1xuXHR0b2xlcmFudD86Ym9vbGVhbjtcblx0YWJzb2x1dGVQYXRoPzpib29sZWFuO1xuXHRpcmk/OmJvb2xlYW47XG5cdHVuaWNvZGVTdXBwb3J0Pzpib29sZWFuO1xuXHRkb21haW5Ib3N0Pzpib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVSSVNjaGVtZUhhbmRsZXI8Q29tcG9uZW50cyBleHRlbmRzIFVSSUNvbXBvbmVudHMgPSBVUklDb21wb25lbnRzLCBPcHRpb25zIGV4dGVuZHMgVVJJT3B0aW9ucyA9IFVSSU9wdGlvbnMsIFBhcmVudENvbXBvbmVudHMgZXh0ZW5kcyBVUklDb21wb25lbnRzID0gVVJJQ29tcG9uZW50cz4ge1xuXHRzY2hlbWU6c3RyaW5nO1xuXHRwYXJzZShjb21wb25lbnRzOlBhcmVudENvbXBvbmVudHMsIG9wdGlvbnM6T3B0aW9ucyk6Q29tcG9uZW50cztcblx0c2VyaWFsaXplKGNvbXBvbmVudHM6Q29tcG9uZW50cywgb3B0aW9uczpPcHRpb25zKTpQYXJlbnRDb21wb25lbnRzO1xuXHR1bmljb2RlU3VwcG9ydD86Ym9vbGVhbjtcblx0ZG9tYWluSG9zdD86Ym9vbGVhbjtcblx0YWJzb2x1dGVQYXRoPzpib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVSSVJlZ0V4cHMge1xuXHROT1RfU0NIRU1FIDogUmVnRXhwLFxuXHROT1RfVVNFUklORk8gOiBSZWdFeHAsXG5cdE5PVF9IT1NUIDogUmVnRXhwLFxuXHROT1RfUEFUSCA6IFJlZ0V4cCxcblx0Tk9UX1BBVEhfTk9TQ0hFTUUgOiBSZWdFeHAsXG5cdE5PVF9RVUVSWSA6IFJlZ0V4cCxcblx0Tk9UX0ZSQUdNRU5UIDogUmVnRXhwLFxuXHRFU0NBUEUgOiBSZWdFeHAsXG5cdFVOUkVTRVJWRUQgOiBSZWdFeHAsXG5cdE9USEVSX0NIQVJTIDogUmVnRXhwLFxuXHRQQ1RfRU5DT0RFRCA6IFJlZ0V4cCxcblx0SVBWNEFERFJFU1MgOiBSZWdFeHAsXG5cdElQVjZBRERSRVNTIDogUmVnRXhwLFxufVxuXG5leHBvcnQgY29uc3QgU0NIRU1FUzp7W3NjaGVtZTpzdHJpbmddOlVSSVNjaGVtZUhhbmRsZXJ9ID0ge307XG5cbmV4cG9ydCBmdW5jdGlvbiBwY3RFbmNDaGFyKGNocjpzdHJpbmcpOnN0cmluZyB7XG5cdGNvbnN0IGMgPSBjaHIuY2hhckNvZGVBdCgwKTtcblx0bGV0IGU6c3RyaW5nO1xuXG5cdGlmIChjIDwgMTYpIGUgPSBcIiUwXCIgKyBjLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHRlbHNlIGlmIChjIDwgMTI4KSBlID0gXCIlXCIgKyBjLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHRlbHNlIGlmIChjIDwgMjA0OCkgZSA9IFwiJVwiICsgKChjID4+IDYpIHwgMTkyKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArIFwiJVwiICsgKChjICYgNjMpIHwgMTI4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblx0ZWxzZSBlID0gXCIlXCIgKyAoKGMgPj4gMTIpIHwgMjI0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArIFwiJVwiICsgKCgoYyA+PiA2KSAmIDYzKSB8IDEyOCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkgKyBcIiVcIiArICgoYyAmIDYzKSB8IDEyOCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cblx0cmV0dXJuIGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwY3REZWNDaGFycyhzdHI6c3RyaW5nKTpzdHJpbmcge1xuXHRsZXQgbmV3U3RyID0gXCJcIjtcblx0bGV0IGkgPSAwO1xuXHRjb25zdCBpbCA9IHN0ci5sZW5ndGg7XG5cblx0d2hpbGUgKGkgPCBpbCkge1xuXHRcdGNvbnN0IGMgPSBwYXJzZUludChzdHIuc3Vic3RyKGkgKyAxLCAyKSwgMTYpO1xuXG5cdFx0aWYgKGMgPCAxMjgpIHtcblx0XHRcdG5ld1N0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuXHRcdFx0aSArPSAzO1xuXHRcdH1cblx0XHRlbHNlIGlmIChjID49IDE5NCAmJiBjIDwgMjI0KSB7XG5cdFx0XHRpZiAoKGlsIC0gaSkgPj0gNikge1xuXHRcdFx0XHRjb25zdCBjMiA9IHBhcnNlSW50KHN0ci5zdWJzdHIoaSArIDQsIDIpLCAxNik7XG5cdFx0XHRcdG5ld1N0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgoYyAmIDMxKSA8PCA2KSB8IChjMiAmIDYzKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuZXdTdHIgKz0gc3RyLnN1YnN0cihpLCA2KTtcblx0XHRcdH1cblx0XHRcdGkgKz0gNjtcblx0XHR9XG5cdFx0ZWxzZSBpZiAoYyA+PSAyMjQpIHtcblx0XHRcdGlmICgoaWwgLSBpKSA+PSA5KSB7XG5cdFx0XHRcdGNvbnN0IGMyID0gcGFyc2VJbnQoc3RyLnN1YnN0cihpICsgNCwgMiksIDE2KTtcblx0XHRcdFx0Y29uc3QgYzMgPSBwYXJzZUludChzdHIuc3Vic3RyKGkgKyA3LCAyKSwgMTYpO1xuXHRcdFx0XHRuZXdTdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGMgJiAxNSkgPDwgMTIpIHwgKChjMiAmIDYzKSA8PCA2KSB8IChjMyAmIDYzKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuZXdTdHIgKz0gc3RyLnN1YnN0cihpLCA5KTtcblx0XHRcdH1cblx0XHRcdGkgKz0gOTtcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHRuZXdTdHIgKz0gc3RyLnN1YnN0cihpLCAzKTtcblx0XHRcdGkgKz0gMztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3U3RyO1xufVxuXG5mdW5jdGlvbiBfbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcoY29tcG9uZW50czpVUklDb21wb25lbnRzLCBwcm90b2NvbDpVUklSZWdFeHBzKSB7XG5cdGZ1bmN0aW9uIGRlY29kZVVucmVzZXJ2ZWQoc3RyOnN0cmluZyk6c3RyaW5nIHtcblx0XHRjb25zdCBkZWNTdHIgPSBwY3REZWNDaGFycyhzdHIpO1xuXHRcdHJldHVybiAoIWRlY1N0ci5tYXRjaChwcm90b2NvbC5VTlJFU0VSVkVEKSA/IHN0ciA6IGRlY1N0cik7XG5cdH1cblxuXHRpZiAoY29tcG9uZW50cy5zY2hlbWUpIGNvbXBvbmVudHMuc2NoZW1lID0gU3RyaW5nKGNvbXBvbmVudHMuc2NoZW1lKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UocHJvdG9jb2wuTk9UX1NDSEVNRSwgXCJcIik7XG5cdGlmIChjb21wb25lbnRzLnVzZXJpbmZvICE9PSB1bmRlZmluZWQpIGNvbXBvbmVudHMudXNlcmluZm8gPSBTdHJpbmcoY29tcG9uZW50cy51c2VyaW5mbykucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShwcm90b2NvbC5OT1RfVVNFUklORk8sIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcblx0aWYgKGNvbXBvbmVudHMuaG9zdCAhPT0gdW5kZWZpbmVkKSBjb21wb25lbnRzLmhvc3QgPSBTdHJpbmcoY29tcG9uZW50cy5ob3N0KS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UocHJvdG9jb2wuTk9UX0hPU1QsIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcblx0aWYgKGNvbXBvbmVudHMucGF0aCAhPT0gdW5kZWZpbmVkKSBjb21wb25lbnRzLnBhdGggPSBTdHJpbmcoY29tcG9uZW50cy5wYXRoKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKChjb21wb25lbnRzLnNjaGVtZSA/IHByb3RvY29sLk5PVF9QQVRIIDogcHJvdG9jb2wuTk9UX1BBVEhfTk9TQ0hFTUUpLCBwY3RFbmNDaGFyKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSk7XG5cdGlmIChjb21wb25lbnRzLnF1ZXJ5ICE9PSB1bmRlZmluZWQpIGNvbXBvbmVudHMucXVlcnkgPSBTdHJpbmcoY29tcG9uZW50cy5xdWVyeSkucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShwcm90b2NvbC5OT1RfUVVFUlksIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcblx0aWYgKGNvbXBvbmVudHMuZnJhZ21lbnQgIT09IHVuZGVmaW5lZCkgY29tcG9uZW50cy5mcmFnbWVudCA9IFN0cmluZyhjb21wb25lbnRzLmZyYWdtZW50KS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKHByb3RvY29sLk5PVF9GUkFHTUVOVCwgcGN0RW5jQ2hhcikucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpO1xuXG5cdHJldHVybiBjb21wb25lbnRzO1xufTtcblxuZnVuY3Rpb24gX3N0cmlwTGVhZGluZ1plcm9zKHN0cjpzdHJpbmcpOnN0cmluZyB7XG5cdHJldHVybiBzdHIucmVwbGFjZSgvXjAqKC4qKS8sIFwiJDFcIikgfHwgXCIwXCI7XG59XG5cbmZ1bmN0aW9uIF9ub3JtYWxpemVJUHY0KGhvc3Q6c3RyaW5nLCBwcm90b2NvbDpVUklSZWdFeHBzKTpzdHJpbmcge1xuXHRjb25zdCBtYXRjaGVzID0gaG9zdC5tYXRjaChwcm90b2NvbC5JUFY0QUREUkVTUykgfHwgW107XG5cdGNvbnN0IFssIGFkZHJlc3NdID0gbWF0Y2hlcztcblx0XG5cdGlmIChhZGRyZXNzKSB7XG5cdFx0cmV0dXJuIGFkZHJlc3Muc3BsaXQoXCIuXCIpLm1hcChfc3RyaXBMZWFkaW5nWmVyb3MpLmpvaW4oXCIuXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBob3N0O1xuXHR9XG59XG5cbmZ1bmN0aW9uIF9ub3JtYWxpemVJUHY2KGhvc3Q6c3RyaW5nLCBwcm90b2NvbDpVUklSZWdFeHBzKTpzdHJpbmcge1xuXHRjb25zdCBtYXRjaGVzID0gaG9zdC5tYXRjaChwcm90b2NvbC5JUFY2QUREUkVTUykgfHwgW107XG5cdGNvbnN0IFssIGFkZHJlc3MsIHpvbmVdID0gbWF0Y2hlcztcblxuXHRpZiAoYWRkcmVzcykge1xuXHRcdGNvbnN0IFtsYXN0LCBmaXJzdF0gPSBhZGRyZXNzLnRvTG93ZXJDYXNlKCkuc3BsaXQoJzo6JykucmV2ZXJzZSgpO1xuXHRcdGNvbnN0IGZpcnN0RmllbGRzID0gZmlyc3QgPyBmaXJzdC5zcGxpdChcIjpcIikubWFwKF9zdHJpcExlYWRpbmdaZXJvcykgOiBbXTtcblx0XHRjb25zdCBsYXN0RmllbGRzID0gbGFzdC5zcGxpdChcIjpcIikubWFwKF9zdHJpcExlYWRpbmdaZXJvcyk7XG5cdFx0Y29uc3QgaXNMYXN0RmllbGRJUHY0QWRkcmVzcyA9IHByb3RvY29sLklQVjRBRERSRVNTLnRlc3QobGFzdEZpZWxkc1tsYXN0RmllbGRzLmxlbmd0aCAtIDFdKTtcblx0XHRjb25zdCBmaWVsZENvdW50ID0gaXNMYXN0RmllbGRJUHY0QWRkcmVzcyA/IDcgOiA4O1xuXHRcdGNvbnN0IGxhc3RGaWVsZHNTdGFydCA9IGxhc3RGaWVsZHMubGVuZ3RoIC0gZmllbGRDb3VudDtcblx0XHRjb25zdCBmaWVsZHMgPSBBcnJheTxzdHJpbmc+KGZpZWxkQ291bnQpO1xuXG5cdFx0Zm9yIChsZXQgeCA9IDA7IHggPCBmaWVsZENvdW50OyArK3gpIHtcblx0XHRcdGZpZWxkc1t4XSA9IGZpcnN0RmllbGRzW3hdIHx8IGxhc3RGaWVsZHNbbGFzdEZpZWxkc1N0YXJ0ICsgeF0gfHwgJyc7XG5cdFx0fVxuXG5cdFx0aWYgKGlzTGFzdEZpZWxkSVB2NEFkZHJlc3MpIHtcblx0XHRcdGZpZWxkc1tmaWVsZENvdW50IC0gMV0gPSBfbm9ybWFsaXplSVB2NChmaWVsZHNbZmllbGRDb3VudCAtIDFdLCBwcm90b2NvbCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYWxsWmVyb0ZpZWxkcyA9IGZpZWxkcy5yZWR1Y2U8QXJyYXk8e2luZGV4Om51bWJlcixsZW5ndGg6bnVtYmVyfT4+KChhY2MsIGZpZWxkLCBpbmRleCkgPT4ge1xuXHRcdFx0aWYgKCFmaWVsZCB8fCBmaWVsZCA9PT0gXCIwXCIpIHtcblx0XHRcdFx0Y29uc3QgbGFzdExvbmdlc3QgPSBhY2NbYWNjLmxlbmd0aCAtIDFdO1xuXHRcdFx0XHRpZiAobGFzdExvbmdlc3QgJiYgbGFzdExvbmdlc3QuaW5kZXggKyBsYXN0TG9uZ2VzdC5sZW5ndGggPT09IGluZGV4KSB7XG5cdFx0XHRcdFx0bGFzdExvbmdlc3QubGVuZ3RoKys7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YWNjLnB1c2goeyBpbmRleCwgbGVuZ3RoIDogMSB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFjYztcblx0XHR9LCBbXSk7XG5cblx0XHRjb25zdCBsb25nZXN0WmVyb0ZpZWxkcyA9IGFsbFplcm9GaWVsZHMuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aClbMF07XG5cblx0XHRsZXQgbmV3SG9zdDpzdHJpbmc7XG5cdFx0aWYgKGxvbmdlc3RaZXJvRmllbGRzICYmIGxvbmdlc3RaZXJvRmllbGRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGNvbnN0IG5ld0ZpcnN0ID0gZmllbGRzLnNsaWNlKDAsIGxvbmdlc3RaZXJvRmllbGRzLmluZGV4KSA7XG5cdFx0XHRjb25zdCBuZXdMYXN0ID0gZmllbGRzLnNsaWNlKGxvbmdlc3RaZXJvRmllbGRzLmluZGV4ICsgbG9uZ2VzdFplcm9GaWVsZHMubGVuZ3RoKTtcblx0XHRcdG5ld0hvc3QgPSBuZXdGaXJzdC5qb2luKFwiOlwiKSArIFwiOjpcIiArIG5ld0xhc3Quam9pbihcIjpcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5ld0hvc3QgPSBmaWVsZHMuam9pbihcIjpcIik7XG5cdFx0fVxuXG5cdFx0aWYgKHpvbmUpIHtcblx0XHRcdG5ld0hvc3QgKz0gXCIlXCIgKyB6b25lO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXdIb3N0O1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBob3N0O1xuXHR9XG59XG5cbmNvbnN0IFVSSV9QQVJTRSA9IC9eKD86KFteOlxcLz8jXSspOik/KD86XFwvXFwvKCg/OihbXlxcLz8jQF0qKUApPyhcXFtbXlxcLz8jXFxdXStcXF18W15cXC8/IzpdKikoPzpcXDooXFxkKikpPykpPyhbXj8jXSopKD86XFw/KFteI10qKSk/KD86IygoPzoufFxcbnxcXHIpKikpPy9pO1xuY29uc3QgTk9fTUFUQ0hfSVNfVU5ERUZJTkVEID0gKDxSZWdFeHBNYXRjaEFycmF5PihcIlwiKS5tYXRjaCgvKCl7MH0vKSlbMV0gPT09IHVuZGVmaW5lZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHVyaVN0cmluZzpzdHJpbmcsIG9wdGlvbnM6VVJJT3B0aW9ucyA9IHt9KTpVUklDb21wb25lbnRzIHtcblx0Y29uc3QgY29tcG9uZW50czpVUklDb21wb25lbnRzID0ge307XG5cdGNvbnN0IHByb3RvY29sID0gKG9wdGlvbnMuaXJpICE9PSBmYWxzZSA/IElSSV9QUk9UT0NPTCA6IFVSSV9QUk9UT0NPTCk7XG5cblx0aWYgKG9wdGlvbnMucmVmZXJlbmNlID09PSBcInN1ZmZpeFwiKSB1cmlTdHJpbmcgPSAob3B0aW9ucy5zY2hlbWUgPyBvcHRpb25zLnNjaGVtZSArIFwiOlwiIDogXCJcIikgKyBcIi8vXCIgKyB1cmlTdHJpbmc7XG5cblx0Y29uc3QgbWF0Y2hlcyA9IHVyaVN0cmluZy5tYXRjaChVUklfUEFSU0UpO1xuXG5cdGlmIChtYXRjaGVzKSB7XG5cdFx0aWYgKE5PX01BVENIX0lTX1VOREVGSU5FRCkge1xuXHRcdFx0Ly9zdG9yZSBlYWNoIGNvbXBvbmVudFxuXHRcdFx0Y29tcG9uZW50cy5zY2hlbWUgPSBtYXRjaGVzWzFdO1xuXHRcdFx0Y29tcG9uZW50cy51c2VyaW5mbyA9IG1hdGNoZXNbM107XG5cdFx0XHRjb21wb25lbnRzLmhvc3QgPSBtYXRjaGVzWzRdO1xuXHRcdFx0Y29tcG9uZW50cy5wb3J0ID0gcGFyc2VJbnQobWF0Y2hlc1s1XSwgMTApO1xuXHRcdFx0Y29tcG9uZW50cy5wYXRoID0gbWF0Y2hlc1s2XSB8fCBcIlwiO1xuXHRcdFx0Y29tcG9uZW50cy5xdWVyeSA9IG1hdGNoZXNbN107XG5cdFx0XHRjb21wb25lbnRzLmZyYWdtZW50ID0gbWF0Y2hlc1s4XTtcblxuXHRcdFx0Ly9maXggcG9ydCBudW1iZXJcblx0XHRcdGlmIChpc05hTihjb21wb25lbnRzLnBvcnQpKSB7XG5cdFx0XHRcdGNvbXBvbmVudHMucG9ydCA9IG1hdGNoZXNbNV07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHsgIC8vSUUgRklYIGZvciBpbXByb3BlciBSZWdFeHAgbWF0Y2hpbmdcblx0XHRcdC8vc3RvcmUgZWFjaCBjb21wb25lbnRcblx0XHRcdGNvbXBvbmVudHMuc2NoZW1lID0gbWF0Y2hlc1sxXSB8fCB1bmRlZmluZWQ7XG5cdFx0XHRjb21wb25lbnRzLnVzZXJpbmZvID0gKHVyaVN0cmluZy5pbmRleE9mKFwiQFwiKSAhPT0gLTEgPyBtYXRjaGVzWzNdIDogdW5kZWZpbmVkKTtcblx0XHRcdGNvbXBvbmVudHMuaG9zdCA9ICh1cmlTdHJpbmcuaW5kZXhPZihcIi8vXCIpICE9PSAtMSA/IG1hdGNoZXNbNF0gOiB1bmRlZmluZWQpO1xuXHRcdFx0Y29tcG9uZW50cy5wb3J0ID0gcGFyc2VJbnQobWF0Y2hlc1s1XSwgMTApO1xuXHRcdFx0Y29tcG9uZW50cy5wYXRoID0gbWF0Y2hlc1s2XSB8fCBcIlwiO1xuXHRcdFx0Y29tcG9uZW50cy5xdWVyeSA9ICh1cmlTdHJpbmcuaW5kZXhPZihcIj9cIikgIT09IC0xID8gbWF0Y2hlc1s3XSA6IHVuZGVmaW5lZCk7XG5cdFx0XHRjb21wb25lbnRzLmZyYWdtZW50ID0gKHVyaVN0cmluZy5pbmRleE9mKFwiI1wiKSAhPT0gLTEgPyBtYXRjaGVzWzhdIDogdW5kZWZpbmVkKTtcblxuXHRcdFx0Ly9maXggcG9ydCBudW1iZXJcblx0XHRcdGlmIChpc05hTihjb21wb25lbnRzLnBvcnQpKSB7XG5cdFx0XHRcdGNvbXBvbmVudHMucG9ydCA9ICh1cmlTdHJpbmcubWF0Y2goL1xcL1xcLyg/Oi58XFxuKSpcXDooPzpcXC98XFw/fFxcI3wkKS8pID8gbWF0Y2hlc1s0XSA6IHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGNvbXBvbmVudHMuaG9zdCkge1xuXHRcdFx0Ly9ub3JtYWxpemUgSVAgaG9zdHNcblx0XHRcdGNvbXBvbmVudHMuaG9zdCA9IF9ub3JtYWxpemVJUHY2KF9ub3JtYWxpemVJUHY0KGNvbXBvbmVudHMuaG9zdCwgcHJvdG9jb2wpLCBwcm90b2NvbCk7XG5cdFx0fVxuXG5cdFx0Ly9kZXRlcm1pbmUgcmVmZXJlbmNlIHR5cGVcblx0XHRpZiAoY29tcG9uZW50cy5zY2hlbWUgPT09IHVuZGVmaW5lZCAmJiBjb21wb25lbnRzLnVzZXJpbmZvID09PSB1bmRlZmluZWQgJiYgY29tcG9uZW50cy5ob3N0ID09PSB1bmRlZmluZWQgJiYgY29tcG9uZW50cy5wb3J0ID09PSB1bmRlZmluZWQgJiYgIWNvbXBvbmVudHMucGF0aCAmJiBjb21wb25lbnRzLnF1ZXJ5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbXBvbmVudHMucmVmZXJlbmNlID0gXCJzYW1lLWRvY3VtZW50XCI7XG5cdFx0fSBlbHNlIGlmIChjb21wb25lbnRzLnNjaGVtZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb21wb25lbnRzLnJlZmVyZW5jZSA9IFwicmVsYXRpdmVcIjtcblx0XHR9IGVsc2UgaWYgKGNvbXBvbmVudHMuZnJhZ21lbnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29tcG9uZW50cy5yZWZlcmVuY2UgPSBcImFic29sdXRlXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbXBvbmVudHMucmVmZXJlbmNlID0gXCJ1cmlcIjtcblx0XHR9XG5cblx0XHQvL2NoZWNrIGZvciByZWZlcmVuY2UgZXJyb3JzXG5cdFx0aWYgKG9wdGlvbnMucmVmZXJlbmNlICYmIG9wdGlvbnMucmVmZXJlbmNlICE9PSBcInN1ZmZpeFwiICYmIG9wdGlvbnMucmVmZXJlbmNlICE9PSBjb21wb25lbnRzLnJlZmVyZW5jZSkge1xuXHRcdFx0Y29tcG9uZW50cy5lcnJvciA9IGNvbXBvbmVudHMuZXJyb3IgfHwgXCJVUkkgaXMgbm90IGEgXCIgKyBvcHRpb25zLnJlZmVyZW5jZSArIFwiIHJlZmVyZW5jZS5cIjtcblx0XHR9XG5cblx0XHQvL2ZpbmQgc2NoZW1lIGhhbmRsZXJcblx0XHRjb25zdCBzY2hlbWVIYW5kbGVyID0gU0NIRU1FU1sob3B0aW9ucy5zY2hlbWUgfHwgY29tcG9uZW50cy5zY2hlbWUgfHwgXCJcIikudG9Mb3dlckNhc2UoKV07XG5cblx0XHQvL2NoZWNrIGlmIHNjaGVtZSBjYW4ndCBoYW5kbGUgSVJJc1xuXHRcdGlmICghb3B0aW9ucy51bmljb2RlU3VwcG9ydCAmJiAoIXNjaGVtZUhhbmRsZXIgfHwgIXNjaGVtZUhhbmRsZXIudW5pY29kZVN1cHBvcnQpKSB7XG5cdFx0XHQvL2lmIGhvc3QgY29tcG9uZW50IGlzIGEgZG9tYWluIG5hbWVcblx0XHRcdGlmIChjb21wb25lbnRzLmhvc3QgJiYgKG9wdGlvbnMuZG9tYWluSG9zdCB8fCAoc2NoZW1lSGFuZGxlciAmJiBzY2hlbWVIYW5kbGVyLmRvbWFpbkhvc3QpKSkge1xuXHRcdFx0XHQvL2NvbnZlcnQgVW5pY29kZSBJRE4gLT4gQVNDSUkgSUROXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29tcG9uZW50cy5ob3N0ID0gcHVueWNvZGUudG9BU0NJSShjb21wb25lbnRzLmhvc3QucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgcGN0RGVjQ2hhcnMpLnRvTG93ZXJDYXNlKCkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0Y29tcG9uZW50cy5lcnJvciA9IGNvbXBvbmVudHMuZXJyb3IgfHwgXCJIb3N0J3MgZG9tYWluIG5hbWUgY2FuIG5vdCBiZSBjb252ZXJ0ZWQgdG8gQVNDSUkgdmlhIHB1bnljb2RlOiBcIiArIGU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vY29udmVydCBJUkkgLT4gVVJJXG5cdFx0XHRfbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcoY29tcG9uZW50cywgVVJJX1BST1RPQ09MKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9ub3JtYWxpemUgZW5jb2RpbmdzXG5cdFx0XHRfbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcoY29tcG9uZW50cywgcHJvdG9jb2wpO1xuXHRcdH1cblxuXHRcdC8vcGVyZm9ybSBzY2hlbWUgc3BlY2lmaWMgcGFyc2luZ1xuXHRcdGlmIChzY2hlbWVIYW5kbGVyICYmIHNjaGVtZUhhbmRsZXIucGFyc2UpIHtcblx0XHRcdHNjaGVtZUhhbmRsZXIucGFyc2UoY29tcG9uZW50cywgb3B0aW9ucyk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiVVJJIGNhbiBub3QgYmUgcGFyc2VkLlwiO1xuXHR9XG5cblx0cmV0dXJuIGNvbXBvbmVudHM7XG59O1xuXG5mdW5jdGlvbiBfcmVjb21wb3NlQXV0aG9yaXR5KGNvbXBvbmVudHM6VVJJQ29tcG9uZW50cywgb3B0aW9uczpVUklPcHRpb25zKTpzdHJpbmd8dW5kZWZpbmVkIHtcblx0Y29uc3QgcHJvdG9jb2wgPSAob3B0aW9ucy5pcmkgIT09IGZhbHNlID8gSVJJX1BST1RPQ09MIDogVVJJX1BST1RPQ09MKTtcblx0Y29uc3QgdXJpVG9rZW5zOkFycmF5PHN0cmluZz4gPSBbXTtcblxuXHRpZiAoY29tcG9uZW50cy51c2VyaW5mbyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dXJpVG9rZW5zLnB1c2goY29tcG9uZW50cy51c2VyaW5mbyk7XG5cdFx0dXJpVG9rZW5zLnB1c2goXCJAXCIpO1xuXHR9XG5cblx0aWYgKGNvbXBvbmVudHMuaG9zdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly9ub3JtYWxpemUgSVAgaG9zdHMsIGFkZCBicmFja2V0cyBhbmQgZXNjYXBlIHpvbmUgc2VwYXJhdG9yIGZvciBJUHY2XG5cdFx0dXJpVG9rZW5zLnB1c2goX25vcm1hbGl6ZUlQdjYoX25vcm1hbGl6ZUlQdjQoU3RyaW5nKGNvbXBvbmVudHMuaG9zdCksIHByb3RvY29sKSwgcHJvdG9jb2wpLnJlcGxhY2UocHJvdG9jb2wuSVBWNkFERFJFU1MsIChfLCAkMSwgJDIpID0+IFwiW1wiICsgJDEgKyAoJDIgPyBcIiUyNVwiICsgJDIgOiBcIlwiKSArIFwiXVwiKSk7XG5cdH1cblxuXHRpZiAodHlwZW9mIGNvbXBvbmVudHMucG9ydCA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgY29tcG9uZW50cy5wb3J0ID09PSBcInN0cmluZ1wiKSB7XG5cdFx0dXJpVG9rZW5zLnB1c2goXCI6XCIpO1xuXHRcdHVyaVRva2Vucy5wdXNoKFN0cmluZyhjb21wb25lbnRzLnBvcnQpKTtcblx0fVxuXG5cdHJldHVybiB1cmlUb2tlbnMubGVuZ3RoID8gdXJpVG9rZW5zLmpvaW4oXCJcIikgOiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBSRFMxID0gL15cXC5cXC4/XFwvLztcbmNvbnN0IFJEUzIgPSAvXlxcL1xcLihcXC98JCkvO1xuY29uc3QgUkRTMyA9IC9eXFwvXFwuXFwuKFxcL3wkKS87XG5jb25zdCBSRFM0ID0gL15cXC5cXC4/JC87XG5jb25zdCBSRFM1ID0gL15cXC8/KD86LnxcXG4pKj8oPz1cXC98JCkvO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRG90U2VnbWVudHMoaW5wdXQ6c3RyaW5nKTpzdHJpbmcge1xuXHRjb25zdCBvdXRwdXQ6QXJyYXk8c3RyaW5nPiA9IFtdO1xuXG5cdHdoaWxlIChpbnB1dC5sZW5ndGgpIHtcblx0XHRpZiAoaW5wdXQubWF0Y2goUkRTMSkpIHtcblx0XHRcdGlucHV0ID0gaW5wdXQucmVwbGFjZShSRFMxLCBcIlwiKTtcblx0XHR9IGVsc2UgaWYgKGlucHV0Lm1hdGNoKFJEUzIpKSB7XG5cdFx0XHRpbnB1dCA9IGlucHV0LnJlcGxhY2UoUkRTMiwgXCIvXCIpO1xuXHRcdH0gZWxzZSBpZiAoaW5wdXQubWF0Y2goUkRTMykpIHtcblx0XHRcdGlucHV0ID0gaW5wdXQucmVwbGFjZShSRFMzLCBcIi9cIik7XG5cdFx0XHRvdXRwdXQucG9wKCk7XG5cdFx0fSBlbHNlIGlmIChpbnB1dCA9PT0gXCIuXCIgfHwgaW5wdXQgPT09IFwiLi5cIikge1xuXHRcdFx0aW5wdXQgPSBcIlwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBpbSA9IGlucHV0Lm1hdGNoKFJEUzUpO1xuXHRcdFx0aWYgKGltKSB7XG5cdFx0XHRcdGNvbnN0IHMgPSBpbVswXTtcblx0XHRcdFx0aW5wdXQgPSBpbnB1dC5zbGljZShzLmxlbmd0aCk7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBkb3Qgc2VnbWVudCBjb25kaXRpb25cIik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG91dHB1dC5qb2luKFwiXCIpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZShjb21wb25lbnRzOlVSSUNvbXBvbmVudHMsIG9wdGlvbnM6VVJJT3B0aW9ucyA9IHt9KTpzdHJpbmcge1xuXHRjb25zdCBwcm90b2NvbCA9IChvcHRpb25zLmlyaSA/IElSSV9QUk9UT0NPTCA6IFVSSV9QUk9UT0NPTCk7XG5cdGNvbnN0IHVyaVRva2VuczpBcnJheTxzdHJpbmc+ID0gW107XG5cblx0Ly9maW5kIHNjaGVtZSBoYW5kbGVyXG5cdGNvbnN0IHNjaGVtZUhhbmRsZXIgPSBTQ0hFTUVTWyhvcHRpb25zLnNjaGVtZSB8fCBjb21wb25lbnRzLnNjaGVtZSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpXTtcblxuXHQvL3BlcmZvcm0gc2NoZW1lIHNwZWNpZmljIHNlcmlhbGl6YXRpb25cblx0aWYgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5zZXJpYWxpemUpIHNjaGVtZUhhbmRsZXIuc2VyaWFsaXplKGNvbXBvbmVudHMsIG9wdGlvbnMpO1xuXG5cdGlmIChjb21wb25lbnRzLmhvc3QpIHtcblx0XHQvL2lmIGhvc3QgY29tcG9uZW50IGlzIGFuIElQdjYgYWRkcmVzc1xuXHRcdGlmIChwcm90b2NvbC5JUFY2QUREUkVTUy50ZXN0KGNvbXBvbmVudHMuaG9zdCkpIHtcblx0XHRcdC8vVE9ETzogbm9ybWFsaXplIElQdjYgYWRkcmVzcyBhcyBwZXIgUkZDIDU5NTJcblx0XHR9XG5cblx0XHQvL2lmIGhvc3QgY29tcG9uZW50IGlzIGEgZG9tYWluIG5hbWVcblx0XHRlbHNlIGlmIChvcHRpb25zLmRvbWFpbkhvc3QgfHwgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5kb21haW5Ib3N0KSkge1xuXHRcdFx0Ly9jb252ZXJ0IElETiB2aWEgcHVueWNvZGVcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbXBvbmVudHMuaG9zdCA9ICghb3B0aW9ucy5pcmkgPyBwdW55Y29kZS50b0FTQ0lJKGNvbXBvbmVudHMuaG9zdC5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBwY3REZWNDaGFycykudG9Mb3dlckNhc2UoKSkgOiBwdW55Y29kZS50b1VuaWNvZGUoY29tcG9uZW50cy5ob3N0KSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiSG9zdCdzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvIFwiICsgKCFvcHRpb25zLmlyaSA/IFwiQVNDSUlcIiA6IFwiVW5pY29kZVwiKSArIFwiIHZpYSBwdW55Y29kZTogXCIgKyBlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vbm9ybWFsaXplIGVuY29kaW5nXG5cdF9ub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyhjb21wb25lbnRzLCBwcm90b2NvbCk7XG5cblx0aWYgKG9wdGlvbnMucmVmZXJlbmNlICE9PSBcInN1ZmZpeFwiICYmIGNvbXBvbmVudHMuc2NoZW1lKSB7XG5cdFx0dXJpVG9rZW5zLnB1c2goY29tcG9uZW50cy5zY2hlbWUpO1xuXHRcdHVyaVRva2Vucy5wdXNoKFwiOlwiKTtcblx0fVxuXG5cdGNvbnN0IGF1dGhvcml0eSA9IF9yZWNvbXBvc2VBdXRob3JpdHkoY29tcG9uZW50cywgb3B0aW9ucyk7XG5cdGlmIChhdXRob3JpdHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChvcHRpb25zLnJlZmVyZW5jZSAhPT0gXCJzdWZmaXhcIikge1xuXHRcdFx0dXJpVG9rZW5zLnB1c2goXCIvL1wiKTtcblx0XHR9XG5cblx0XHR1cmlUb2tlbnMucHVzaChhdXRob3JpdHkpO1xuXG5cdFx0aWYgKGNvbXBvbmVudHMucGF0aCAmJiBjb21wb25lbnRzLnBhdGguY2hhckF0KDApICE9PSBcIi9cIikge1xuXHRcdFx0dXJpVG9rZW5zLnB1c2goXCIvXCIpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChjb21wb25lbnRzLnBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdGxldCBzID0gY29tcG9uZW50cy5wYXRoO1xuXG5cdFx0aWYgKCFvcHRpb25zLmFic29sdXRlUGF0aCAmJiAoIXNjaGVtZUhhbmRsZXIgfHwgIXNjaGVtZUhhbmRsZXIuYWJzb2x1dGVQYXRoKSkge1xuXHRcdFx0cyA9IHJlbW92ZURvdFNlZ21lbnRzKHMpO1xuXHRcdH1cblxuXHRcdGlmIChhdXRob3JpdHkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cyA9IHMucmVwbGFjZSgvXlxcL1xcLy8sIFwiLyUyRlwiKTsgIC8vZG9uJ3QgYWxsb3cgdGhlIHBhdGggdG8gc3RhcnQgd2l0aCBcIi8vXCJcblx0XHR9XG5cblx0XHR1cmlUb2tlbnMucHVzaChzKTtcblx0fVxuXG5cdGlmIChjb21wb25lbnRzLnF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcblx0XHR1cmlUb2tlbnMucHVzaChcIj9cIik7XG5cdFx0dXJpVG9rZW5zLnB1c2goY29tcG9uZW50cy5xdWVyeSk7XG5cdH1cblxuXHRpZiAoY29tcG9uZW50cy5mcmFnbWVudCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dXJpVG9rZW5zLnB1c2goXCIjXCIpO1xuXHRcdHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudHMuZnJhZ21lbnQpO1xuXHR9XG5cblx0cmV0dXJuIHVyaVRva2Vucy5qb2luKFwiXCIpOyAgLy9tZXJnZSB0b2tlbnMgaW50byBhIHN0cmluZ1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVDb21wb25lbnRzKGJhc2U6VVJJQ29tcG9uZW50cywgcmVsYXRpdmU6VVJJQ29tcG9uZW50cywgb3B0aW9uczpVUklPcHRpb25zID0ge30sIHNraXBOb3JtYWxpemF0aW9uPzpib29sZWFuKTpVUklDb21wb25lbnRzIHtcblx0Y29uc3QgdGFyZ2V0OlVSSUNvbXBvbmVudHMgPSB7fTtcblxuXHRpZiAoIXNraXBOb3JtYWxpemF0aW9uKSB7XG5cdFx0YmFzZSA9IHBhcnNlKHNlcmlhbGl6ZShiYXNlLCBvcHRpb25zKSwgb3B0aW9ucyk7ICAvL25vcm1hbGl6ZSBiYXNlIGNvbXBvbmVudHNcblx0XHRyZWxhdGl2ZSA9IHBhcnNlKHNlcmlhbGl6ZShyZWxhdGl2ZSwgb3B0aW9ucyksIG9wdGlvbnMpOyAgLy9ub3JtYWxpemUgcmVsYXRpdmUgY29tcG9uZW50c1xuXHR9XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdGlmICghb3B0aW9ucy50b2xlcmFudCAmJiByZWxhdGl2ZS5zY2hlbWUpIHtcblx0XHR0YXJnZXQuc2NoZW1lID0gcmVsYXRpdmUuc2NoZW1lO1xuXHRcdC8vdGFyZ2V0LmF1dGhvcml0eSA9IHJlbGF0aXZlLmF1dGhvcml0eTtcblx0XHR0YXJnZXQudXNlcmluZm8gPSByZWxhdGl2ZS51c2VyaW5mbztcblx0XHR0YXJnZXQuaG9zdCA9IHJlbGF0aXZlLmhvc3Q7XG5cdFx0dGFyZ2V0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuXHRcdHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCB8fCBcIlwiKTtcblx0XHR0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcblx0fSBlbHNlIHtcblx0XHRpZiAocmVsYXRpdmUudXNlcmluZm8gIT09IHVuZGVmaW5lZCB8fCByZWxhdGl2ZS5ob3N0ICE9PSB1bmRlZmluZWQgfHwgcmVsYXRpdmUucG9ydCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvL3RhcmdldC5hdXRob3JpdHkgPSByZWxhdGl2ZS5hdXRob3JpdHk7XG5cdFx0XHR0YXJnZXQudXNlcmluZm8gPSByZWxhdGl2ZS51c2VyaW5mbztcblx0XHRcdHRhcmdldC5ob3N0ID0gcmVsYXRpdmUuaG9zdDtcblx0XHRcdHRhcmdldC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcblx0XHRcdHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCB8fCBcIlwiKTtcblx0XHRcdHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIXJlbGF0aXZlLnBhdGgpIHtcblx0XHRcdFx0dGFyZ2V0LnBhdGggPSBiYXNlLnBhdGg7XG5cdFx0XHRcdGlmIChyZWxhdGl2ZS5xdWVyeSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGFyZ2V0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGFyZ2V0LnF1ZXJ5ID0gYmFzZS5xdWVyeTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKHJlbGF0aXZlLnBhdGguY2hhckF0KDApID09PSBcIi9cIikge1xuXHRcdFx0XHRcdHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKChiYXNlLnVzZXJpbmZvICE9PSB1bmRlZmluZWQgfHwgYmFzZS5ob3N0ICE9PSB1bmRlZmluZWQgfHwgYmFzZS5wb3J0ICE9PSB1bmRlZmluZWQpICYmICFiYXNlLnBhdGgpIHtcblx0XHRcdFx0XHRcdHRhcmdldC5wYXRoID0gXCIvXCIgKyByZWxhdGl2ZS5wYXRoO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoIWJhc2UucGF0aCkge1xuXHRcdFx0XHRcdFx0dGFyZ2V0LnBhdGggPSByZWxhdGl2ZS5wYXRoO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0YXJnZXQucGF0aCA9IGJhc2UucGF0aC5zbGljZSgwLCBiYXNlLnBhdGgubGFzdEluZGV4T2YoXCIvXCIpICsgMSkgKyByZWxhdGl2ZS5wYXRoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0YXJnZXQucGF0aCA9IHJlbW92ZURvdFNlZ21lbnRzKHRhcmdldC5wYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcblx0XHRcdH1cblx0XHRcdC8vdGFyZ2V0LmF1dGhvcml0eSA9IGJhc2UuYXV0aG9yaXR5O1xuXHRcdFx0dGFyZ2V0LnVzZXJpbmZvID0gYmFzZS51c2VyaW5mbztcblx0XHRcdHRhcmdldC5ob3N0ID0gYmFzZS5ob3N0O1xuXHRcdFx0dGFyZ2V0LnBvcnQgPSBiYXNlLnBvcnQ7XG5cdFx0fVxuXHRcdHRhcmdldC5zY2hlbWUgPSBiYXNlLnNjaGVtZTtcblx0fVxuXG5cdHRhcmdldC5mcmFnbWVudCA9IHJlbGF0aXZlLmZyYWdtZW50O1xuXG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZShiYXNlVVJJOnN0cmluZywgcmVsYXRpdmVVUkk6c3RyaW5nLCBvcHRpb25zPzpVUklPcHRpb25zKTpzdHJpbmcge1xuXHRjb25zdCBzY2hlbWVsZXNzT3B0aW9ucyA9IGFzc2lnbih7IHNjaGVtZSA6ICdudWxsJyB9LCBvcHRpb25zKTtcblx0cmV0dXJuIHNlcmlhbGl6ZShyZXNvbHZlQ29tcG9uZW50cyhwYXJzZShiYXNlVVJJLCBzY2hlbWVsZXNzT3B0aW9ucyksIHBhcnNlKHJlbGF0aXZlVVJJLCBzY2hlbWVsZXNzT3B0aW9ucyksIHNjaGVtZWxlc3NPcHRpb25zLCB0cnVlKSwgc2NoZW1lbGVzc09wdGlvbnMpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZSh1cmk6c3RyaW5nLCBvcHRpb25zPzpVUklPcHRpb25zKTpzdHJpbmc7XG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKHVyaTpVUklDb21wb25lbnRzLCBvcHRpb25zPzpVUklPcHRpb25zKTpVUklDb21wb25lbnRzO1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZSh1cmk6YW55LCBvcHRpb25zPzpVUklPcHRpb25zKTphbnkge1xuXHRpZiAodHlwZW9mIHVyaSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHVyaSA9IHNlcmlhbGl6ZShwYXJzZSh1cmksIG9wdGlvbnMpLCBvcHRpb25zKTtcblx0fSBlbHNlIGlmICh0eXBlT2YodXJpKSA9PT0gXCJvYmplY3RcIikge1xuXHRcdHVyaSA9IHBhcnNlKHNlcmlhbGl6ZSg8VVJJQ29tcG9uZW50cz51cmksIG9wdGlvbnMpLCBvcHRpb25zKTtcblx0fVxuXG5cdHJldHVybiB1cmk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWwodXJpQTpzdHJpbmcsIHVyaUI6c3RyaW5nLCBvcHRpb25zPzogVVJJT3B0aW9ucyk6Ym9vbGVhbjtcbmV4cG9ydCBmdW5jdGlvbiBlcXVhbCh1cmlBOlVSSUNvbXBvbmVudHMsIHVyaUI6VVJJQ29tcG9uZW50cywgb3B0aW9ucz86VVJJT3B0aW9ucyk6Ym9vbGVhbjtcbmV4cG9ydCBmdW5jdGlvbiBlcXVhbCh1cmlBOmFueSwgdXJpQjphbnksIG9wdGlvbnM/OlVSSU9wdGlvbnMpOmJvb2xlYW4ge1xuXHRpZiAodHlwZW9mIHVyaUEgPT09IFwic3RyaW5nXCIpIHtcblx0XHR1cmlBID0gc2VyaWFsaXplKHBhcnNlKHVyaUEsIG9wdGlvbnMpLCBvcHRpb25zKTtcblx0fSBlbHNlIGlmICh0eXBlT2YodXJpQSkgPT09IFwib2JqZWN0XCIpIHtcblx0XHR1cmlBID0gc2VyaWFsaXplKDxVUklDb21wb25lbnRzPnVyaUEsIG9wdGlvbnMpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiB1cmlCID09PSBcInN0cmluZ1wiKSB7XG5cdFx0dXJpQiA9IHNlcmlhbGl6ZShwYXJzZSh1cmlCLCBvcHRpb25zKSwgb3B0aW9ucyk7XG5cdH0gZWxzZSBpZiAodHlwZU9mKHVyaUIpID09PSBcIm9iamVjdFwiKSB7XG5cdFx0dXJpQiA9IHNlcmlhbGl6ZSg8VVJJQ29tcG9uZW50cz51cmlCLCBvcHRpb25zKTtcblx0fVxuXG5cdHJldHVybiB1cmlBID09PSB1cmlCO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUNvbXBvbmVudChzdHI6c3RyaW5nLCBvcHRpb25zPzpVUklPcHRpb25zKTpzdHJpbmcge1xuXHRyZXR1cm4gc3RyICYmIHN0ci50b1N0cmluZygpLnJlcGxhY2UoKCFvcHRpb25zIHx8ICFvcHRpb25zLmlyaSA/IFVSSV9QUk9UT0NPTC5FU0NBUEUgOiBJUklfUFJPVE9DT0wuRVNDQVBFKSwgcGN0RW5jQ2hhcik7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdW5lc2NhcGVDb21wb25lbnQoc3RyOnN0cmluZywgb3B0aW9ucz86VVJJT3B0aW9ucyk6c3RyaW5nIHtcblx0cmV0dXJuIHN0ciAmJiBzdHIudG9TdHJpbmcoKS5yZXBsYWNlKCghb3B0aW9ucyB8fCAhb3B0aW9ucy5pcmkgPyBVUklfUFJPVE9DT0wuUENUX0VOQ09ERUQgOiBJUklfUFJPVE9DT0wuUENUX0VOQ09ERUQpLCBwY3REZWNDaGFycyk7XG59O1xuIiwiaW1wb3J0IHsgVVJJU2NoZW1lSGFuZGxlciwgVVJJQ29tcG9uZW50cywgVVJJT3B0aW9ucyB9IGZyb20gXCIuLi91cmlcIjtcblxuY29uc3QgaGFuZGxlcjpVUklTY2hlbWVIYW5kbGVyID0ge1xuXHRzY2hlbWUgOiBcImh0dHBcIixcblxuXHRkb21haW5Ib3N0IDogdHJ1ZSxcblxuXHRwYXJzZSA6IGZ1bmN0aW9uIChjb21wb25lbnRzOlVSSUNvbXBvbmVudHMsIG9wdGlvbnM6VVJJT3B0aW9ucyk6VVJJQ29tcG9uZW50cyB7XG5cdFx0Ly9yZXBvcnQgbWlzc2luZyBob3N0XG5cdFx0aWYgKCFjb21wb25lbnRzLmhvc3QpIHtcblx0XHRcdGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiSFRUUCBVUklzIG11c3QgaGF2ZSBhIGhvc3QuXCI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbXBvbmVudHM7XG5cdH0sXG5cblx0c2VyaWFsaXplIDogZnVuY3Rpb24gKGNvbXBvbmVudHM6VVJJQ29tcG9uZW50cywgb3B0aW9uczpVUklPcHRpb25zKTpVUklDb21wb25lbnRzIHtcblx0XHRjb25zdCBzZWN1cmUgPSBTdHJpbmcoY29tcG9uZW50cy5zY2hlbWUpLnRvTG93ZXJDYXNlKCkgPT09IFwiaHR0cHNcIjtcblxuXHRcdC8vbm9ybWFsaXplIHRoZSBkZWZhdWx0IHBvcnRcblx0XHRpZiAoY29tcG9uZW50cy5wb3J0ID09PSAoc2VjdXJlID8gNDQzIDogODApIHx8IGNvbXBvbmVudHMucG9ydCA9PT0gXCJcIikge1xuXHRcdFx0Y29tcG9uZW50cy5wb3J0ID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRcblx0XHQvL25vcm1hbGl6ZSB0aGUgZW1wdHkgcGF0aFxuXHRcdGlmICghY29tcG9uZW50cy5wYXRoKSB7XG5cdFx0XHRjb21wb25lbnRzLnBhdGggPSBcIi9cIjtcblx0XHR9XG5cblx0XHQvL05PVEU6IFdlIGRvIG5vdCBwYXJzZSBxdWVyeSBzdHJpbmdzIGZvciBIVFRQIFVSSXNcblx0XHQvL2FzIFdXVyBGb3JtIFVybCBFbmNvZGVkIHF1ZXJ5IHN0cmluZ3MgYXJlIHBhcnQgb2YgdGhlIEhUTUw0KyBzcGVjLFxuXHRcdC8vYW5kIG5vdCB0aGUgSFRUUCBzcGVjLlxuXG5cdFx0cmV0dXJuIGNvbXBvbmVudHM7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhhbmRsZXI7IiwiaW1wb3J0IHsgVVJJU2NoZW1lSGFuZGxlciwgVVJJQ29tcG9uZW50cywgVVJJT3B0aW9ucyB9IGZyb20gXCIuLi91cmlcIjtcbmltcG9ydCBodHRwIGZyb20gXCIuL2h0dHBcIjtcblxuY29uc3QgaGFuZGxlcjpVUklTY2hlbWVIYW5kbGVyID0ge1xuXHRzY2hlbWUgOiBcImh0dHBzXCIsXG5cdGRvbWFpbkhvc3QgOiBodHRwLmRvbWFpbkhvc3QsXG5cdHBhcnNlIDogaHR0cC5wYXJzZSxcblx0c2VyaWFsaXplIDogaHR0cC5zZXJpYWxpemVcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFuZGxlcjsiLCJpbXBvcnQgeyBVUklTY2hlbWVIYW5kbGVyLCBVUklDb21wb25lbnRzLCBVUklPcHRpb25zIH0gZnJvbSBcIi4uL3VyaVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdTQ29tcG9uZW50cyBleHRlbmRzIFVSSUNvbXBvbmVudHMge1xuXHRyZXNvdXJjZU5hbWU/OiBzdHJpbmc7XG5cdHNlY3VyZT86IGJvb2xlYW47XG59XG5cbmZ1bmN0aW9uIGlzU2VjdXJlKHdzQ29tcG9uZW50czpXU0NvbXBvbmVudHMpOmJvb2xlYW4ge1xuXHRyZXR1cm4gdHlwZW9mIHdzQ29tcG9uZW50cy5zZWN1cmUgPT09ICdib29sZWFuJyA/IHdzQ29tcG9uZW50cy5zZWN1cmUgOiBTdHJpbmcod3NDb21wb25lbnRzLnNjaGVtZSkudG9Mb3dlckNhc2UoKSA9PT0gXCJ3c3NcIjtcbn1cblxuLy9SRkMgNjQ1NVxuY29uc3QgaGFuZGxlcjpVUklTY2hlbWVIYW5kbGVyID0ge1xuXHRzY2hlbWUgOiBcIndzXCIsXG5cblx0ZG9tYWluSG9zdCA6IHRydWUsXG5cblx0cGFyc2UgOiBmdW5jdGlvbiAoY29tcG9uZW50czpVUklDb21wb25lbnRzLCBvcHRpb25zOlVSSU9wdGlvbnMpOldTQ29tcG9uZW50cyB7XG5cdFx0Y29uc3Qgd3NDb21wb25lbnRzID0gY29tcG9uZW50cyBhcyBXU0NvbXBvbmVudHM7XG5cblx0XHQvL2luZGljYXRlIGlmIHRoZSBzZWN1cmUgZmxhZyBpcyBzZXRcblx0XHR3c0NvbXBvbmVudHMuc2VjdXJlID0gaXNTZWN1cmUod3NDb21wb25lbnRzKTtcblxuXHRcdC8vY29uc3RydWN0IHJlc291Y2UgbmFtZVxuXHRcdHdzQ29tcG9uZW50cy5yZXNvdXJjZU5hbWUgPSAod3NDb21wb25lbnRzLnBhdGggfHwgJy8nKSArICh3c0NvbXBvbmVudHMucXVlcnkgPyAnPycgKyB3c0NvbXBvbmVudHMucXVlcnkgOiAnJyk7XG5cdFx0d3NDb21wb25lbnRzLnBhdGggPSB1bmRlZmluZWQ7XG5cdFx0d3NDb21wb25lbnRzLnF1ZXJ5ID0gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIHdzQ29tcG9uZW50cztcblx0fSxcblxuXHRzZXJpYWxpemUgOiBmdW5jdGlvbiAod3NDb21wb25lbnRzOldTQ29tcG9uZW50cywgb3B0aW9uczpVUklPcHRpb25zKTpVUklDb21wb25lbnRzIHtcblx0XHQvL25vcm1hbGl6ZSB0aGUgZGVmYXVsdCBwb3J0XG5cdFx0aWYgKHdzQ29tcG9uZW50cy5wb3J0ID09PSAoaXNTZWN1cmUod3NDb21wb25lbnRzKSA/IDQ0MyA6IDgwKSB8fCB3c0NvbXBvbmVudHMucG9ydCA9PT0gXCJcIikge1xuXHRcdFx0d3NDb21wb25lbnRzLnBvcnQgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly9lbnN1cmUgc2NoZW1lIG1hdGNoZXMgc2VjdXJlIGZsYWdcblx0XHRpZiAodHlwZW9mIHdzQ29tcG9uZW50cy5zZWN1cmUgPT09ICdib29sZWFuJykge1xuXHRcdFx0d3NDb21wb25lbnRzLnNjaGVtZSA9ICh3c0NvbXBvbmVudHMuc2VjdXJlID8gJ3dzcycgOiAnd3MnKTtcblx0XHRcdHdzQ29tcG9uZW50cy5zZWN1cmUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly9yZWNvbnN0cnVjdCBwYXRoIGZyb20gcmVzb3VyY2UgbmFtZVxuXHRcdGlmICh3c0NvbXBvbmVudHMucmVzb3VyY2VOYW1lKSB7XG5cdFx0XHRjb25zdCBbcGF0aCwgcXVlcnldID0gd3NDb21wb25lbnRzLnJlc291cmNlTmFtZS5zcGxpdCgnPycpO1xuXHRcdFx0d3NDb21wb25lbnRzLnBhdGggPSAocGF0aCAmJiBwYXRoICE9PSAnLycgPyBwYXRoIDogdW5kZWZpbmVkKTtcblx0XHRcdHdzQ29tcG9uZW50cy5xdWVyeSA9IHF1ZXJ5O1xuXHRcdFx0d3NDb21wb25lbnRzLnJlc291cmNlTmFtZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvL2ZvcmJpZCBmcmFnbWVudCBjb21wb25lbnRcblx0XHR3c0NvbXBvbmVudHMuZnJhZ21lbnQgPSB1bmRlZmluZWQ7XG5cblx0XHRyZXR1cm4gd3NDb21wb25lbnRzO1xuXHR9XG59O1xuXG5leHBvcnQgZGVmYXVsdCBoYW5kbGVyOyIsImltcG9ydCB7IFVSSVNjaGVtZUhhbmRsZXIsIFVSSUNvbXBvbmVudHMsIFVSSU9wdGlvbnMgfSBmcm9tIFwiLi4vdXJpXCI7XG5pbXBvcnQgd3MgZnJvbSBcIi4vd3NcIjtcblxuY29uc3QgaGFuZGxlcjpVUklTY2hlbWVIYW5kbGVyID0ge1xuXHRzY2hlbWUgOiBcIndzc1wiLFxuXHRkb21haW5Ib3N0IDogd3MuZG9tYWluSG9zdCxcblx0cGFyc2UgOiB3cy5wYXJzZSxcblx0c2VyaWFsaXplIDogd3Muc2VyaWFsaXplXG59XG5cbmV4cG9ydCBkZWZhdWx0IGhhbmRsZXI7IiwiaW1wb3J0IHsgVVJJU2NoZW1lSGFuZGxlciwgVVJJQ29tcG9uZW50cywgVVJJT3B0aW9ucyB9IGZyb20gXCIuLi91cmlcIjtcbmltcG9ydCB7IHBjdEVuY0NoYXIsIHBjdERlY0NoYXJzLCB1bmVzY2FwZUNvbXBvbmVudCB9IGZyb20gXCIuLi91cmlcIjtcbmltcG9ydCBwdW55Y29kZSBmcm9tIFwicHVueWNvZGVcIjtcbmltcG9ydCB7IG1lcmdlLCBzdWJleHAsIHRvVXBwZXJDYXNlLCB0b0FycmF5IH0gZnJvbSBcIi4uL3V0aWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBNYWlsdG9IZWFkZXJzIHtcblx0W2hmbmFtZTpzdHJpbmddOnN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1haWx0b0NvbXBvbmVudHMgZXh0ZW5kcyBVUklDb21wb25lbnRzIHtcblx0dG86QXJyYXk8c3RyaW5nPixcblx0aGVhZGVycz86TWFpbHRvSGVhZGVycyxcblx0c3ViamVjdD86c3RyaW5nLFxuXHRib2R5PzpzdHJpbmdcbn1cblxuY29uc3QgTzpNYWlsdG9IZWFkZXJzID0ge307XG5jb25zdCBpc0lSSSA9IHRydWU7XG5cbi8vUkZDIDM5ODZcbmNvbnN0IFVOUkVTRVJWRUQkJCA9IFwiW0EtWmEtejAtOVxcXFwtXFxcXC5cXFxcX1xcXFx+XCIgKyAoaXNJUkkgPyBcIlxcXFx4QTAtXFxcXHUyMDBEXFxcXHUyMDEwLVxcXFx1MjAyOVxcXFx1MjAyRi1cXFxcdUQ3RkZcXFxcdUY5MDAtXFxcXHVGRENGXFxcXHVGREYwLVxcXFx1RkZFRlwiIDogXCJcIikgKyBcIl1cIjtcbmNvbnN0IEhFWERJRyQkID0gXCJbMC05QS1GYS1mXVwiOyAgLy9jYXNlLWluc2Vuc2l0aXZlXG5jb25zdCBQQ1RfRU5DT0RFRCQgPSBzdWJleHAoc3ViZXhwKFwiJVtFRmVmXVwiICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIlWzg5QS1GYS1mXVwiICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSk7ICAvL2V4cGFuZGVkXG5cbi8vUkZDIDUzMjIsIGV4Y2VwdCB0aGVzZSBzeW1ib2xzIGFzIHBlciBSRkMgNjA2ODogQCA6IC8gPyAjIFsgXSAmIDsgPVxuLy9jb25zdCBBVEVYVCQkID0gXCJbQS1aYS16MC05XFxcXCFcXFxcI1xcXFwkXFxcXCVcXFxcJlxcXFwnXFxcXCpcXFxcK1xcXFwtXFxcXC9cXFxcPVxcXFw/XFxcXF5cXFxcX1xcXFxgXFxcXHtcXFxcfFxcXFx9XFxcXH5dXCI7XG4vL2NvbnN0IFdTUCQkID0gXCJbXFxcXHgyMFxcXFx4MDldXCI7XG4vL2NvbnN0IE9CU19RVEVYVCQkID0gXCJbXFxcXHgwMS1cXFxceDA4XFxcXHgwQlxcXFx4MENcXFxceDBFLVxcXFx4MUZcXFxceDdGXVwiOyAgLy8oJWQxLTggLyAlZDExLTEyIC8gJWQxNC0zMSAvICVkMTI3KVxuLy9jb25zdCBRVEVYVCQkID0gbWVyZ2UoXCJbXFxcXHgyMVxcXFx4MjMtXFxcXHg1QlxcXFx4NUQtXFxcXHg3RV1cIiwgT0JTX1FURVhUJCQpOyAgLy8lZDMzIC8gJWQzNS05MSAvICVkOTMtMTI2IC8gb2JzLXF0ZXh0XG4vL2NvbnN0IFZDSEFSJCQgPSBcIltcXFxceDIxLVxcXFx4N0VdXCI7XG4vL2NvbnN0IFdTUCQkID0gXCJbXFxcXHgyMFxcXFx4MDldXCI7XG4vL2NvbnN0IE9CU19RUCQgPSBzdWJleHAoXCJcXFxcXFxcXFwiICsgbWVyZ2UoXCJbXFxcXHgwMFxcXFx4MERcXFxceDBBXVwiLCBPQlNfUVRFWFQkJCkpOyAgLy8lZDAgLyBDUiAvIExGIC8gb2JzLXF0ZXh0XG4vL2NvbnN0IEZXUyQgPSBzdWJleHAoc3ViZXhwKFdTUCQkICsgXCIqXCIgKyBcIlxcXFx4MERcXFxceDBBXCIpICsgXCI/XCIgKyBXU1AkJCArIFwiK1wiKTtcbi8vY29uc3QgUVVPVEVEX1BBSVIkID0gc3ViZXhwKHN1YmV4cChcIlxcXFxcXFxcXCIgKyBzdWJleHAoVkNIQVIkJCArIFwifFwiICsgV1NQJCQpKSArIFwifFwiICsgT0JTX1FQJCk7XG4vL2NvbnN0IFFVT1RFRF9TVFJJTkckID0gc3ViZXhwKCdcXFxcXCInICsgc3ViZXhwKEZXUyQgKyBcIj9cIiArIFFDT05URU5UJCkgKyBcIipcIiArIEZXUyQgKyBcIj9cIiArICdcXFxcXCInKTtcbmNvbnN0IEFURVhUJCQgPSBcIltBLVphLXowLTlcXFxcIVxcXFwkXFxcXCVcXFxcJ1xcXFwqXFxcXCtcXFxcLVxcXFxeXFxcXF9cXFxcYFxcXFx7XFxcXHxcXFxcfVxcXFx+XVwiO1xuY29uc3QgUVRFWFQkJCA9IFwiW1xcXFwhXFxcXCRcXFxcJVxcXFwnXFxcXChcXFxcKVxcXFwqXFxcXCtcXFxcLFxcXFwtXFxcXC4wLTlcXFxcPFxcXFw+QS1aXFxcXHg1RS1cXFxceDdFXVwiO1xuY29uc3QgVkNIQVIkJCA9IG1lcmdlKFFURVhUJCQsIFwiW1xcXFxcXFwiXFxcXFxcXFxdXCIpO1xuY29uc3QgRE9UX0FUT01fVEVYVCQgPSBzdWJleHAoQVRFWFQkJCArIFwiK1wiICsgc3ViZXhwKFwiXFxcXC5cIiArIEFURVhUJCQgKyBcIitcIikgKyBcIipcIik7XG5jb25zdCBRVU9URURfUEFJUiQgPSBzdWJleHAoXCJcXFxcXFxcXFwiICsgVkNIQVIkJCk7XG5jb25zdCBRQ09OVEVOVCQgPSBzdWJleHAoUVRFWFQkJCArIFwifFwiICsgUVVPVEVEX1BBSVIkKTtcbmNvbnN0IFFVT1RFRF9TVFJJTkckID0gc3ViZXhwKCdcXFxcXCInICsgUUNPTlRFTlQkICsgXCIqXCIgKyAnXFxcXFwiJyk7XG5cbi8vUkZDIDYwNjhcbmNvbnN0IERURVhUX05PX09CUyQkID0gXCJbXFxcXHgyMS1cXFxceDVBXFxcXHg1RS1cXFxceDdFXVwiOyAgLy8lZDMzLTkwIC8gJWQ5NC0xMjZcbmNvbnN0IFNPTUVfREVMSU1TJCQgPSBcIltcXFxcIVxcXFwkXFxcXCdcXFxcKFxcXFwpXFxcXCpcXFxcK1xcXFwsXFxcXDtcXFxcOlxcXFxAXVwiO1xuY29uc3QgUUNIQVIkID0gc3ViZXhwKFVOUkVTRVJWRUQkJCArIFwifFwiICsgUENUX0VOQ09ERUQkICsgXCJ8XCIgKyBTT01FX0RFTElNUyQkKTtcbmNvbnN0IERPTUFJTiQgPSBzdWJleHAoRE9UX0FUT01fVEVYVCQgKyBcInxcIiArIFwiXFxcXFtcIiArIERURVhUX05PX09CUyQkICsgXCIqXCIgKyBcIlxcXFxdXCIpO1xuY29uc3QgTE9DQUxfUEFSVCQgPSBzdWJleHAoRE9UX0FUT01fVEVYVCQgKyBcInxcIiArIFFVT1RFRF9TVFJJTkckKTtcbmNvbnN0IEFERFJfU1BFQyQgPSBzdWJleHAoTE9DQUxfUEFSVCQgKyBcIlxcXFxAXCIgKyBET01BSU4kKTtcbmNvbnN0IFRPJCA9IHN1YmV4cChBRERSX1NQRUMkICsgc3ViZXhwKFwiXFxcXCxcIiArIEFERFJfU1BFQyQpICsgXCIqXCIpO1xuY29uc3QgSEZOQU1FJCA9IHN1YmV4cChRQ0hBUiQgKyBcIipcIik7XG5jb25zdCBIRlZBTFVFJCA9IEhGTkFNRSQ7XG5jb25zdCBIRklFTEQkID0gc3ViZXhwKEhGTkFNRSQgKyBcIlxcXFw9XCIgKyBIRlZBTFVFJCk7XG5jb25zdCBIRklFTERTMiQgPSBzdWJleHAoSEZJRUxEJCArIHN1YmV4cChcIlxcXFwmXCIgKyBIRklFTEQkKSArIFwiKlwiKTtcbmNvbnN0IEhGSUVMRFMkID0gc3ViZXhwKFwiXFxcXD9cIiArIEhGSUVMRFMyJCk7XG5jb25zdCBNQUlMVE9fVVJJID0gbmV3IFJlZ0V4cChcIl5tYWlsdG9cXFxcOlwiICsgVE8kICsgXCI/XCIgKyBIRklFTERTJCArIFwiPyRcIik7XG5cbmNvbnN0IFVOUkVTRVJWRUQgPSBuZXcgUmVnRXhwKFVOUkVTRVJWRUQkJCwgXCJnXCIpO1xuY29uc3QgUENUX0VOQ09ERUQgPSBuZXcgUmVnRXhwKFBDVF9FTkNPREVEJCwgXCJnXCIpO1xuY29uc3QgTk9UX0xPQ0FMX1BBUlQgPSBuZXcgUmVnRXhwKG1lcmdlKFwiW15dXCIsIEFURVhUJCQsIFwiW1xcXFwuXVwiLCAnW1xcXFxcIl0nLCBWQ0hBUiQkKSwgXCJnXCIpO1xuY29uc3QgTk9UX0RPTUFJTiA9IG5ldyBSZWdFeHAobWVyZ2UoXCJbXl1cIiwgQVRFWFQkJCwgXCJbXFxcXC5dXCIsIFwiW1xcXFxbXVwiLCBEVEVYVF9OT19PQlMkJCwgXCJbXFxcXF1dXCIpLCBcImdcIik7XG5jb25zdCBOT1RfSEZOQU1FID0gbmV3IFJlZ0V4cChtZXJnZShcIlteXVwiLCBVTlJFU0VSVkVEJCQsIFNPTUVfREVMSU1TJCQpLCBcImdcIik7XG5jb25zdCBOT1RfSEZWQUxVRSA9IE5PVF9IRk5BTUU7XG5jb25zdCBUTyA9IG5ldyBSZWdFeHAoXCJeXCIgKyBUTyQgKyBcIiRcIik7XG5jb25zdCBIRklFTERTID0gbmV3IFJlZ0V4cChcIl5cIiArIEhGSUVMRFMyJCArIFwiJFwiKTtcblxuZnVuY3Rpb24gZGVjb2RlVW5yZXNlcnZlZChzdHI6c3RyaW5nKTpzdHJpbmcge1xuXHRjb25zdCBkZWNTdHIgPSBwY3REZWNDaGFycyhzdHIpO1xuXHRyZXR1cm4gKCFkZWNTdHIubWF0Y2goVU5SRVNFUlZFRCkgPyBzdHIgOiBkZWNTdHIpO1xufVxuXG5jb25zdCBoYW5kbGVyOlVSSVNjaGVtZUhhbmRsZXI8TWFpbHRvQ29tcG9uZW50cz4gPSAge1xuXHRzY2hlbWUgOiBcIm1haWx0b1wiLFxuXG5cdHBhcnNlIDogZnVuY3Rpb24gKGNvbXBvbmVudHM6VVJJQ29tcG9uZW50cywgb3B0aW9uczpVUklPcHRpb25zKTpNYWlsdG9Db21wb25lbnRzIHtcblx0XHRjb25zdCBtYWlsdG9Db21wb25lbnRzID0gY29tcG9uZW50cyBhcyBNYWlsdG9Db21wb25lbnRzO1xuXHRcdGNvbnN0IHRvID0gbWFpbHRvQ29tcG9uZW50cy50byA9IChtYWlsdG9Db21wb25lbnRzLnBhdGggPyBtYWlsdG9Db21wb25lbnRzLnBhdGguc3BsaXQoXCIsXCIpIDogW10pO1xuXHRcdG1haWx0b0NvbXBvbmVudHMucGF0aCA9IHVuZGVmaW5lZDtcblxuXHRcdGlmIChtYWlsdG9Db21wb25lbnRzLnF1ZXJ5KSB7XG5cdFx0XHRsZXQgdW5rbm93bkhlYWRlcnMgPSBmYWxzZVxuXHRcdFx0Y29uc3QgaGVhZGVyczpNYWlsdG9IZWFkZXJzID0ge307XG5cdFx0XHRjb25zdCBoZmllbGRzID0gbWFpbHRvQ29tcG9uZW50cy5xdWVyeS5zcGxpdChcIiZcIik7XG5cblx0XHRcdGZvciAobGV0IHggPSAwLCB4bCA9IGhmaWVsZHMubGVuZ3RoOyB4IDwgeGw7ICsreCkge1xuXHRcdFx0XHRjb25zdCBoZmllbGQgPSBoZmllbGRzW3hdLnNwbGl0KFwiPVwiKTtcblxuXHRcdFx0XHRzd2l0Y2ggKGhmaWVsZFswXSkge1xuXHRcdFx0XHRcdGNhc2UgXCJ0b1wiOlxuXHRcdFx0XHRcdFx0Y29uc3QgdG9BZGRycyA9IGhmaWVsZFsxXS5zcGxpdChcIixcIik7XG5cdFx0XHRcdFx0XHRmb3IgKGxldCB4ID0gMCwgeGwgPSB0b0FkZHJzLmxlbmd0aDsgeCA8IHhsOyArK3gpIHtcblx0XHRcdFx0XHRcdFx0dG8ucHVzaCh0b0FkZHJzW3hdKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJzdWJqZWN0XCI6XG5cdFx0XHRcdFx0XHRtYWlsdG9Db21wb25lbnRzLnN1YmplY3QgPSB1bmVzY2FwZUNvbXBvbmVudChoZmllbGRbMV0sIG9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0Y2FzZSBcImJvZHlcIjpcblx0XHRcdFx0XHRcdG1haWx0b0NvbXBvbmVudHMuYm9keSA9IHVuZXNjYXBlQ29tcG9uZW50KGhmaWVsZFsxXSwgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHRcdFx0dW5rbm93bkhlYWRlcnMgPSB0cnVlO1xuXHRcdFx0XHRcdFx0aGVhZGVyc1t1bmVzY2FwZUNvbXBvbmVudChoZmllbGRbMF0sIG9wdGlvbnMpXSA9IHVuZXNjYXBlQ29tcG9uZW50KGhmaWVsZFsxXSwgb3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAodW5rbm93bkhlYWRlcnMpIG1haWx0b0NvbXBvbmVudHMuaGVhZGVycyA9IGhlYWRlcnM7XG5cdFx0fVxuXG5cdFx0bWFpbHRvQ29tcG9uZW50cy5xdWVyeSA9IHVuZGVmaW5lZDtcblxuXHRcdGZvciAobGV0IHggPSAwLCB4bCA9IHRvLmxlbmd0aDsgeCA8IHhsOyArK3gpIHtcblx0XHRcdGNvbnN0IGFkZHIgPSB0b1t4XS5zcGxpdChcIkBcIik7XG5cblx0XHRcdGFkZHJbMF0gPSB1bmVzY2FwZUNvbXBvbmVudChhZGRyWzBdKTtcblxuXHRcdFx0aWYgKCFvcHRpb25zLnVuaWNvZGVTdXBwb3J0KSB7XG5cdFx0XHRcdC8vY29udmVydCBVbmljb2RlIElETiAtPiBBU0NJSSBJRE5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRhZGRyWzFdID0gcHVueWNvZGUudG9BU0NJSSh1bmVzY2FwZUNvbXBvbmVudChhZGRyWzFdLCBvcHRpb25zKS50b0xvd2VyQ2FzZSgpKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdG1haWx0b0NvbXBvbmVudHMuZXJyb3IgPSBtYWlsdG9Db21wb25lbnRzLmVycm9yIHx8IFwiRW1haWwgYWRkcmVzcydzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvIEFTQ0lJIHZpYSBwdW55Y29kZTogXCIgKyBlO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRhZGRyWzFdID0gdW5lc2NhcGVDb21wb25lbnQoYWRkclsxXSwgb3B0aW9ucykudG9Mb3dlckNhc2UoKTtcblx0XHRcdH1cblxuXHRcdFx0dG9beF0gPSBhZGRyLmpvaW4oXCJAXCIpO1xuXHRcdH1cblxuXHRcdHJldHVybiBtYWlsdG9Db21wb25lbnRzO1xuXHR9LFxuXG5cdHNlcmlhbGl6ZSA6IGZ1bmN0aW9uIChtYWlsdG9Db21wb25lbnRzOk1haWx0b0NvbXBvbmVudHMsIG9wdGlvbnM6VVJJT3B0aW9ucyk6VVJJQ29tcG9uZW50cyB7XG5cdFx0Y29uc3QgY29tcG9uZW50cyA9IG1haWx0b0NvbXBvbmVudHMgYXMgVVJJQ29tcG9uZW50cztcblx0XHRjb25zdCB0byA9IHRvQXJyYXkobWFpbHRvQ29tcG9uZW50cy50byk7XG5cdFx0aWYgKHRvKSB7XG5cdFx0XHRmb3IgKGxldCB4ID0gMCwgeGwgPSB0by5sZW5ndGg7IHggPCB4bDsgKyt4KSB7XG5cdFx0XHRcdGNvbnN0IHRvQWRkciA9IFN0cmluZyh0b1t4XSk7XG5cdFx0XHRcdGNvbnN0IGF0SWR4ID0gdG9BZGRyLmxhc3RJbmRleE9mKFwiQFwiKTtcblx0XHRcdFx0Y29uc3QgbG9jYWxQYXJ0ID0gKHRvQWRkci5zbGljZSgwLCBhdElkeCkpLnJlcGxhY2UoUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UoUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKS5yZXBsYWNlKE5PVF9MT0NBTF9QQVJULCBwY3RFbmNDaGFyKTtcblx0XHRcdFx0bGV0IGRvbWFpbiA9IHRvQWRkci5zbGljZShhdElkeCArIDEpO1xuXG5cdFx0XHRcdC8vY29udmVydCBJRE4gdmlhIHB1bnljb2RlXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0ZG9tYWluID0gKCFvcHRpb25zLmlyaSA/IHB1bnljb2RlLnRvQVNDSUkodW5lc2NhcGVDb21wb25lbnQoZG9tYWluLCBvcHRpb25zKS50b0xvd2VyQ2FzZSgpKSA6IHB1bnljb2RlLnRvVW5pY29kZShkb21haW4pKTtcblx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiRW1haWwgYWRkcmVzcydzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvIFwiICsgKCFvcHRpb25zLmlyaSA/IFwiQVNDSUlcIiA6IFwiVW5pY29kZVwiKSArIFwiIHZpYSBwdW55Y29kZTogXCIgKyBlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dG9beF0gPSBsb2NhbFBhcnQgKyBcIkBcIiArIGRvbWFpbjtcblx0XHRcdH1cblxuXHRcdFx0Y29tcG9uZW50cy5wYXRoID0gdG8uam9pbihcIixcIik7XG5cdFx0fVxuXG5cdFx0Y29uc3QgaGVhZGVycyA9IG1haWx0b0NvbXBvbmVudHMuaGVhZGVycyA9IG1haWx0b0NvbXBvbmVudHMuaGVhZGVycyB8fCB7fTtcblxuXHRcdGlmIChtYWlsdG9Db21wb25lbnRzLnN1YmplY3QpIGhlYWRlcnNbXCJzdWJqZWN0XCJdID0gbWFpbHRvQ29tcG9uZW50cy5zdWJqZWN0O1xuXHRcdGlmIChtYWlsdG9Db21wb25lbnRzLmJvZHkpIGhlYWRlcnNbXCJib2R5XCJdID0gbWFpbHRvQ29tcG9uZW50cy5ib2R5O1xuXG5cdFx0Y29uc3QgZmllbGRzID0gW107XG5cdFx0Zm9yIChjb25zdCBuYW1lIGluIGhlYWRlcnMpIHtcblx0XHRcdGlmIChoZWFkZXJzW25hbWVdICE9PSBPW25hbWVdKSB7XG5cdFx0XHRcdGZpZWxkcy5wdXNoKFxuXHRcdFx0XHRcdG5hbWUucmVwbGFjZShQQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShQQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpLnJlcGxhY2UoTk9UX0hGTkFNRSwgcGN0RW5jQ2hhcikgK1xuXHRcdFx0XHRcdFwiPVwiICtcblx0XHRcdFx0XHRoZWFkZXJzW25hbWVdLnJlcGxhY2UoUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UoUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKS5yZXBsYWNlKE5PVF9IRlZBTFVFLCBwY3RFbmNDaGFyKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZiAoZmllbGRzLmxlbmd0aCkge1xuXHRcdFx0Y29tcG9uZW50cy5xdWVyeSA9IGZpZWxkcy5qb2luKFwiJlwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcG9uZW50cztcblx0fVxufVxuXG5leHBvcnQgZGVmYXVsdCBoYW5kbGVyOyIsImltcG9ydCB7IFVSSVNjaGVtZUhhbmRsZXIsIFVSSUNvbXBvbmVudHMsIFVSSU9wdGlvbnMgfSBmcm9tIFwiLi4vdXJpXCI7XG5pbXBvcnQgeyBwY3RFbmNDaGFyLCBTQ0hFTUVTIH0gZnJvbSBcIi4uL3VyaVwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVSTkNvbXBvbmVudHMgZXh0ZW5kcyBVUklDb21wb25lbnRzIHtcblx0bmlkPzpzdHJpbmc7XG5cdG5zcz86c3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVSTk9wdGlvbnMgZXh0ZW5kcyBVUklPcHRpb25zIHtcblx0bmlkPzpzdHJpbmc7XG59XG5cbmNvbnN0IE5JRCQgPSBcIig/OlswLTlBLVphLXpdWzAtOUEtWmEtelxcXFwtXXsxLDMxfSlcIjtcbmNvbnN0IFBDVF9FTkNPREVEJCA9IFwiKD86XFxcXCVbMC05QS1GYS1mXXsyfSlcIjtcbmNvbnN0IFRSQU5TJCQgPSBcIlswLTlBLVphLXpcXFxcKFxcXFwpXFxcXCtcXFxcLFxcXFwtXFxcXC5cXFxcOlxcXFw9XFxcXEBcXFxcO1xcXFwkXFxcXF9cXFxcIVxcXFwqXFxcXCdcXFxcL1xcXFw/XFxcXCNdXCI7XG5jb25zdCBOU1MkID0gXCIoPzooPzpcIiArIFBDVF9FTkNPREVEJCArIFwifFwiICsgVFJBTlMkJCArIFwiKSspXCI7XG5jb25zdCBVUk5fU0NIRU1FID0gbmV3IFJlZ0V4cChcIl51cm5cXFxcOihcIiArIE5JRCQgKyBcIikkXCIpO1xuY29uc3QgVVJOX1BBVEggPSBuZXcgUmVnRXhwKFwiXihcIiArIE5JRCQgKyBcIilcXFxcOihcIiArIE5TUyQgKyBcIikkXCIpO1xuY29uc3QgVVJOX1BBUlNFID0gL14oW15cXDpdKylcXDooLiopLztcbmNvbnN0IFVSTl9FWENMVURFRCA9IC9bXFx4MDAtXFx4MjBcXFxcXFxcIlxcJlxcPFxcPlxcW1xcXVxcXlxcYFxce1xcfFxcfVxcflxceDdGLVxceEZGXS9nO1xuXG4vL1JGQyAyMTQxXG5jb25zdCBoYW5kbGVyOlVSSVNjaGVtZUhhbmRsZXI8VVJOQ29tcG9uZW50cyxVUk5PcHRpb25zPiA9IHtcblx0c2NoZW1lIDogXCJ1cm5cIixcblxuXHRwYXJzZSA6IGZ1bmN0aW9uIChjb21wb25lbnRzOlVSSUNvbXBvbmVudHMsIG9wdGlvbnM6VVJOT3B0aW9ucyk6VVJOQ29tcG9uZW50cyB7XG5cdFx0Y29uc3QgbWF0Y2hlcyA9IGNvbXBvbmVudHMucGF0aCAmJiBjb21wb25lbnRzLnBhdGgubWF0Y2goVVJOX1BBUlNFKTtcblx0XHRsZXQgdXJuQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgYXMgVVJOQ29tcG9uZW50cztcblxuXHRcdGlmIChtYXRjaGVzKSB7XG5cdFx0XHRjb25zdCBzY2hlbWUgPSBvcHRpb25zLnNjaGVtZSB8fCB1cm5Db21wb25lbnRzLnNjaGVtZSB8fCBcInVyblwiO1xuXHRcdFx0Y29uc3QgbmlkID0gbWF0Y2hlc1sxXS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0Y29uc3QgbnNzID0gbWF0Y2hlc1syXTtcblx0XHRcdGNvbnN0IHVyblNjaGVtZSA9IGAke3NjaGVtZX06JHtvcHRpb25zLm5pZCB8fCBuaWR9YDtcblx0XHRcdGNvbnN0IHNjaGVtZUhhbmRsZXIgPSBTQ0hFTUVTW3VyblNjaGVtZV07XG5cblx0XHRcdHVybkNvbXBvbmVudHMubmlkID0gbmlkO1xuXHRcdFx0dXJuQ29tcG9uZW50cy5uc3MgPSBuc3M7XG5cdFx0XHR1cm5Db21wb25lbnRzLnBhdGggPSB1bmRlZmluZWQ7XG5cblx0XHRcdGlmIChzY2hlbWVIYW5kbGVyKSB7XG5cdFx0XHRcdHVybkNvbXBvbmVudHMgPSBzY2hlbWVIYW5kbGVyLnBhcnNlKHVybkNvbXBvbmVudHMsIG9wdGlvbnMpIGFzIFVSTkNvbXBvbmVudHM7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHVybkNvbXBvbmVudHMuZXJyb3IgPSB1cm5Db21wb25lbnRzLmVycm9yIHx8IFwiVVJOIGNhbiBub3QgYmUgcGFyc2VkLlwiO1xuXHRcdH1cblxuXHRcdHJldHVybiB1cm5Db21wb25lbnRzO1xuXHR9LFxuXG5cdHNlcmlhbGl6ZSA6IGZ1bmN0aW9uICh1cm5Db21wb25lbnRzOlVSTkNvbXBvbmVudHMsIG9wdGlvbnM6VVJOT3B0aW9ucyk6VVJJQ29tcG9uZW50cyB7XG5cdFx0Y29uc3Qgc2NoZW1lID0gb3B0aW9ucy5zY2hlbWUgfHwgdXJuQ29tcG9uZW50cy5zY2hlbWUgfHwgXCJ1cm5cIjtcblx0XHRjb25zdCBuaWQgPSB1cm5Db21wb25lbnRzLm5pZDtcblx0XHRjb25zdCB1cm5TY2hlbWUgPSBgJHtzY2hlbWV9OiR7b3B0aW9ucy5uaWQgfHwgbmlkfWA7XG5cdFx0Y29uc3Qgc2NoZW1lSGFuZGxlciA9IFNDSEVNRVNbdXJuU2NoZW1lXTtcblxuXHRcdGlmIChzY2hlbWVIYW5kbGVyKSB7XG5cdFx0XHR1cm5Db21wb25lbnRzID0gc2NoZW1lSGFuZGxlci5zZXJpYWxpemUodXJuQ29tcG9uZW50cywgb3B0aW9ucykgYXMgVVJOQ29tcG9uZW50cztcblx0XHR9XG5cblx0XHRjb25zdCB1cmlDb21wb25lbnRzID0gdXJuQ29tcG9uZW50cyBhcyBVUklDb21wb25lbnRzO1xuXHRcdGNvbnN0IG5zcyA9IHVybkNvbXBvbmVudHMubnNzO1xuXHRcdHVyaUNvbXBvbmVudHMucGF0aCA9IGAke25pZCB8fCBvcHRpb25zLm5pZH06JHtuc3N9YDtcblxuXHRcdHJldHVybiB1cmlDb21wb25lbnRzO1xuXHR9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgaGFuZGxlcjsiLCJpbXBvcnQgeyBVUklTY2hlbWVIYW5kbGVyLCBVUklDb21wb25lbnRzLCBVUklPcHRpb25zIH0gZnJvbSBcIi4uL3VyaVwiO1xuaW1wb3J0IHsgVVJOQ29tcG9uZW50cyB9IGZyb20gXCIuL3VyblwiO1xuaW1wb3J0IHsgU0NIRU1FUyB9IGZyb20gXCIuLi91cmlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBVVUlEQ29tcG9uZW50cyBleHRlbmRzIFVSTkNvbXBvbmVudHMge1xuXHR1dWlkPzogc3RyaW5nO1xufVxuXG5jb25zdCBVVUlEID0gL15bMC05QS1GYS1mXXs4fSg/OlxcLVswLTlBLUZhLWZdezR9KXszfVxcLVswLTlBLUZhLWZdezEyfSQvO1xuY29uc3QgVVVJRF9QQVJTRSA9IC9eWzAtOUEtRmEtZlxcLV17MzZ9LztcblxuLy9SRkMgNDEyMlxuY29uc3QgaGFuZGxlcjpVUklTY2hlbWVIYW5kbGVyPFVVSURDb21wb25lbnRzLCBVUklPcHRpb25zLCBVUk5Db21wb25lbnRzPiA9IHtcblx0c2NoZW1lIDogXCJ1cm46dXVpZFwiLFxuXG5cdHBhcnNlIDogZnVuY3Rpb24gKHVybkNvbXBvbmVudHM6VVJOQ29tcG9uZW50cywgb3B0aW9uczpVUklPcHRpb25zKTpVVUlEQ29tcG9uZW50cyB7XG5cdFx0Y29uc3QgdXVpZENvbXBvbmVudHMgPSB1cm5Db21wb25lbnRzIGFzIFVVSURDb21wb25lbnRzO1xuXHRcdHV1aWRDb21wb25lbnRzLnV1aWQgPSB1dWlkQ29tcG9uZW50cy5uc3M7XG5cdFx0dXVpZENvbXBvbmVudHMubnNzID0gdW5kZWZpbmVkO1xuXG5cdFx0aWYgKCFvcHRpb25zLnRvbGVyYW50ICYmICghdXVpZENvbXBvbmVudHMudXVpZCB8fCAhdXVpZENvbXBvbmVudHMudXVpZC5tYXRjaChVVUlEKSkpIHtcblx0XHRcdHV1aWRDb21wb25lbnRzLmVycm9yID0gdXVpZENvbXBvbmVudHMuZXJyb3IgfHwgXCJVVUlEIGlzIG5vdCB2YWxpZC5cIjtcblx0XHR9XG5cblx0XHRyZXR1cm4gdXVpZENvbXBvbmVudHM7XG5cdH0sXG5cblx0c2VyaWFsaXplIDogZnVuY3Rpb24gKHV1aWRDb21wb25lbnRzOlVVSURDb21wb25lbnRzLCBvcHRpb25zOlVSSU9wdGlvbnMpOlVSTkNvbXBvbmVudHMge1xuXHRcdGNvbnN0IHVybkNvbXBvbmVudHMgPSB1dWlkQ29tcG9uZW50cyBhcyBVUk5Db21wb25lbnRzO1xuXHRcdC8vbm9ybWFsaXplIFVVSURcblx0XHR1cm5Db21wb25lbnRzLm5zcyA9ICh1dWlkQ29tcG9uZW50cy51dWlkIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIHVybkNvbXBvbmVudHM7XG5cdH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBoYW5kbGVyOyIsImltcG9ydCB7IFNDSEVNRVMgfSBmcm9tIFwiLi91cmlcIjtcblxuaW1wb3J0IGh0dHAgZnJvbSBcIi4vc2NoZW1lcy9odHRwXCI7XG5TQ0hFTUVTW2h0dHAuc2NoZW1lXSA9IGh0dHA7XG5cbmltcG9ydCBodHRwcyBmcm9tIFwiLi9zY2hlbWVzL2h0dHBzXCI7XG5TQ0hFTUVTW2h0dHBzLnNjaGVtZV0gPSBodHRwcztcblxuaW1wb3J0IHdzIGZyb20gXCIuL3NjaGVtZXMvd3NcIjtcblNDSEVNRVNbd3Muc2NoZW1lXSA9IHdzO1xuXG5pbXBvcnQgd3NzIGZyb20gXCIuL3NjaGVtZXMvd3NzXCI7XG5TQ0hFTUVTW3dzcy5zY2hlbWVdID0gd3NzO1xuXG5pbXBvcnQgbWFpbHRvIGZyb20gXCIuL3NjaGVtZXMvbWFpbHRvXCI7XG5TQ0hFTUVTW21haWx0by5zY2hlbWVdID0gbWFpbHRvO1xuXG5pbXBvcnQgdXJuIGZyb20gXCIuL3NjaGVtZXMvdXJuXCI7XG5TQ0hFTUVTW3Vybi5zY2hlbWVdID0gdXJuO1xuXG5pbXBvcnQgdXVpZCBmcm9tIFwiLi9zY2hlbWVzL3Vybi11dWlkXCI7XG5TQ0hFTUVTW3V1aWQuc2NoZW1lXSA9IHV1aWQ7XG5cbmV4cG9ydCAqIGZyb20gXCIuL3VyaVwiO1xuIiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHRpZDogbW9kdWxlSWQsXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbi8vIGV4cG9zZSB0aGUgbW9kdWxlcyBvYmplY3QgKF9fd2VicGFja19tb2R1bGVzX18pXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm0gPSBfX3dlYnBhY2tfbW9kdWxlc19fO1xuXG4iLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmFtZEQgPSBmdW5jdGlvbiAoKSB7XG5cdHRocm93IG5ldyBFcnJvcignZGVmaW5lIGNhbm5vdCBiZSB1c2VkIGluZGlyZWN0Jyk7XG59OyIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5mID0ge307XG4vLyBUaGlzIGZpbGUgY29udGFpbnMgb25seSB0aGUgZW50cnkgY2h1bmsuXG4vLyBUaGUgY2h1bmsgbG9hZGluZyBmdW5jdGlvbiBmb3IgYWRkaXRpb25hbCBjaHVua3Ncbl9fd2VicGFja19yZXF1aXJlX18uZSA9IChjaHVua0lkKSA9PiB7XG5cdHJldHVybiBQcm9taXNlLmFsbChPYmplY3Qua2V5cyhfX3dlYnBhY2tfcmVxdWlyZV9fLmYpLnJlZHVjZSgocHJvbWlzZXMsIGtleSkgPT4ge1xuXHRcdF9fd2VicGFja19yZXF1aXJlX18uZltrZXldKGNodW5rSWQsIHByb21pc2VzKTtcblx0XHRyZXR1cm4gcHJvbWlzZXM7XG5cdH0sIFtdKSk7XG59OyIsIi8vIFRoaXMgZnVuY3Rpb24gYWxsb3cgdG8gcmVmZXJlbmNlIGFzeW5jIGNodW5rc1xuX193ZWJwYWNrX3JlcXVpcmVfXy51ID0gKGNodW5rSWQpID0+IHtcblx0Ly8gcmV0dXJuIHVybCBmb3IgZmlsZW5hbWVzIGJhc2VkIG9uIHRlbXBsYXRlXG5cdHJldHVybiBcIlwiICsgY2h1bmtJZCArIFwiLmJ1bmRsZS5qc1wiO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJ2YXIgc2NyaXB0VXJsO1xuaWYgKF9fd2VicGFja19yZXF1aXJlX18uZy5pbXBvcnRTY3JpcHRzKSBzY3JpcHRVcmwgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcubG9jYXRpb24gKyBcIlwiO1xudmFyIGRvY3VtZW50ID0gX193ZWJwYWNrX3JlcXVpcmVfXy5nLmRvY3VtZW50O1xuaWYgKCFzY3JpcHRVcmwgJiYgZG9jdW1lbnQpIHtcblx0aWYgKGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpXG5cdFx0c2NyaXB0VXJsID0gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmM7XG5cdGlmICghc2NyaXB0VXJsKSB7XG5cdFx0dmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcInNjcmlwdFwiKTtcblx0XHRpZihzY3JpcHRzLmxlbmd0aCkge1xuXHRcdFx0dmFyIGkgPSBzY3JpcHRzLmxlbmd0aCAtIDE7XG5cdFx0XHR3aGlsZSAoaSA+IC0xICYmICFzY3JpcHRVcmwpIHNjcmlwdFVybCA9IHNjcmlwdHNbaS0tXS5zcmM7XG5cdFx0fVxuXHR9XG59XG4vLyBXaGVuIHN1cHBvcnRpbmcgYnJvd3NlcnMgd2hlcmUgYW4gYXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCB5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dC5wdWJsaWNQYXRoIG1hbnVhbGx5IHZpYSBjb25maWd1cmF0aW9uXG4vLyBvciBwYXNzIGFuIGVtcHR5IHN0cmluZyAoXCJcIikgYW5kIHNldCB0aGUgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gdmFyaWFibGUgZnJvbSB5b3VyIGNvZGUgdG8gdXNlIHlvdXIgb3duIGxvZ2ljLlxuaWYgKCFzY3JpcHRVcmwpIHRocm93IG5ldyBFcnJvcihcIkF1dG9tYXRpYyBwdWJsaWNQYXRoIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBicm93c2VyXCIpO1xuc2NyaXB0VXJsID0gc2NyaXB0VXJsLnJlcGxhY2UoLyMuKiQvLCBcIlwiKS5yZXBsYWNlKC9cXD8uKiQvLCBcIlwiKS5yZXBsYWNlKC9cXC9bXlxcL10rJC8sIFwiL1wiKTtcbl9fd2VicGFja19yZXF1aXJlX18ucCA9IHNjcmlwdFVybDsiLCIvLyBubyBiYXNlVVJJXG5cbi8vIG9iamVjdCB0byBzdG9yZSBsb2FkZWQgYW5kIGxvYWRpbmcgY2h1bmtzXG4vLyB1bmRlZmluZWQgPSBjaHVuayBub3QgbG9hZGVkLCBudWxsID0gY2h1bmsgcHJlbG9hZGVkL3ByZWZldGNoZWRcbi8vIFtyZXNvbHZlLCByZWplY3QsIFByb21pc2VdID0gY2h1bmsgbG9hZGluZywgMCA9IGNodW5rIGxvYWRlZFxudmFyIGluc3RhbGxlZENodW5rcyA9IHtcblx0MjM5OiAwXG59O1xuXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmYuaiA9IChjaHVua0lkLCBwcm9taXNlcykgPT4ge1xuXHRcdC8vIEpTT05QIGNodW5rIGxvYWRpbmcgZm9yIGphdmFzY3JpcHRcblx0XHR2YXIgaW5zdGFsbGVkQ2h1bmtEYXRhID0gX193ZWJwYWNrX3JlcXVpcmVfXy5vKGluc3RhbGxlZENodW5rcywgY2h1bmtJZCkgPyBpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF0gOiB1bmRlZmluZWQ7XG5cdFx0aWYoaW5zdGFsbGVkQ2h1bmtEYXRhICE9PSAwKSB7IC8vIDAgbWVhbnMgXCJhbHJlYWR5IGluc3RhbGxlZFwiLlxuXG5cdFx0XHQvLyBhIFByb21pc2UgbWVhbnMgXCJjdXJyZW50bHkgbG9hZGluZ1wiLlxuXHRcdFx0aWYoaW5zdGFsbGVkQ2h1bmtEYXRhKSB7XG5cdFx0XHRcdHByb21pc2VzLnB1c2goaW5zdGFsbGVkQ2h1bmtEYXRhWzJdKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmKHRydWUpIHsgLy8gYWxsIGNodW5rcyBoYXZlIEpTXG5cdFx0XHRcdFx0Ly8gc2V0dXAgUHJvbWlzZSBpbiBjaHVuayBjYWNoZVxuXHRcdFx0XHRcdHZhciBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gKGluc3RhbGxlZENodW5rRGF0YSA9IGluc3RhbGxlZENodW5rc1tjaHVua0lkXSA9IFtyZXNvbHZlLCByZWplY3RdKSk7XG5cdFx0XHRcdFx0cHJvbWlzZXMucHVzaChpbnN0YWxsZWRDaHVua0RhdGFbMl0gPSBwcm9taXNlKTtcblxuXHRcdFx0XHRcdC8vIHN0YXJ0IGNodW5rIGxvYWRpbmdcblx0XHRcdFx0XHR2YXIgdXJsID0gX193ZWJwYWNrX3JlcXVpcmVfXy5wICsgX193ZWJwYWNrX3JlcXVpcmVfXy51KGNodW5rSWQpO1xuXHRcdFx0XHRcdC8vIGNyZWF0ZSBlcnJvciBiZWZvcmUgc3RhY2sgdW53b3VuZCB0byBnZXQgdXNlZnVsIHN0YWNrdHJhY2UgbGF0ZXJcblx0XHRcdFx0XHR2YXIgZXJyb3IgPSBuZXcgRXJyb3IoKTtcblx0XHRcdFx0XHR2YXIgbG9hZGluZ0VuZGVkID0gKGV2ZW50KSA9PiB7XG5cdFx0XHRcdFx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oaW5zdGFsbGVkQ2h1bmtzLCBjaHVua0lkKSkge1xuXHRcdFx0XHRcdFx0XHRpbnN0YWxsZWRDaHVua0RhdGEgPSBpbnN0YWxsZWRDaHVua3NbY2h1bmtJZF07XG5cdFx0XHRcdFx0XHRcdGlmKGluc3RhbGxlZENodW5rRGF0YSAhPT0gMCkgaW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRpZihpbnN0YWxsZWRDaHVua0RhdGEpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgZXJyb3JUeXBlID0gZXZlbnQgJiYgKGV2ZW50LnR5cGUgPT09ICdsb2FkJyA/ICdtaXNzaW5nJyA6IGV2ZW50LnR5cGUpO1xuXHRcdFx0XHRcdFx0XHRcdHZhciByZWFsU3JjID0gZXZlbnQgJiYgZXZlbnQudGFyZ2V0ICYmIGV2ZW50LnRhcmdldC5zcmM7XG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3IubWVzc2FnZSA9ICdMb2FkaW5nIGNodW5rICcgKyBjaHVua0lkICsgJyBmYWlsZWQuXFxuKCcgKyBlcnJvclR5cGUgKyAnOiAnICsgcmVhbFNyYyArICcpJztcblx0XHRcdFx0XHRcdFx0XHRlcnJvci5uYW1lID0gJ0NodW5rTG9hZEVycm9yJztcblx0XHRcdFx0XHRcdFx0XHRlcnJvci50eXBlID0gZXJyb3JUeXBlO1xuXHRcdFx0XHRcdFx0XHRcdGVycm9yLnJlcXVlc3QgPSByZWFsU3JjO1xuXHRcdFx0XHRcdFx0XHRcdGluc3RhbGxlZENodW5rRGF0YVsxXShlcnJvcik7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdF9fd2VicGFja19yZXF1aXJlX18ubCh1cmwsIGxvYWRpbmdFbmRlZCwgXCJjaHVuay1cIiArIGNodW5rSWQsIGNodW5rSWQpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxufTtcblxuLy8gbm8gcHJlZmV0Y2hpbmdcblxuLy8gbm8gcHJlbG9hZGVkXG5cbi8vIG5vIEhNUlxuXG4vLyBubyBITVIgbWFuaWZlc3RcblxuLy8gbm8gb24gY2h1bmtzIGxvYWRlZFxuXG4vLyBpbnN0YWxsIGEgSlNPTlAgY2FsbGJhY2sgZm9yIGNodW5rIGxvYWRpbmdcbnZhciB3ZWJwYWNrSnNvbnBDYWxsYmFjayA9IChwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbiwgZGF0YSkgPT4ge1xuXHR2YXIgW2NodW5rSWRzLCBtb3JlTW9kdWxlcywgcnVudGltZV0gPSBkYXRhO1xuXHQvLyBhZGQgXCJtb3JlTW9kdWxlc1wiIHRvIHRoZSBtb2R1bGVzIG9iamVjdCxcblx0Ly8gdGhlbiBmbGFnIGFsbCBcImNodW5rSWRzXCIgYXMgbG9hZGVkIGFuZCBmaXJlIGNhbGxiYWNrXG5cdHZhciBtb2R1bGVJZCwgY2h1bmtJZCwgaSA9IDA7XG5cdGlmKGNodW5rSWRzLnNvbWUoKGlkKSA9PiAoaW5zdGFsbGVkQ2h1bmtzW2lkXSAhPT0gMCkpKSB7XG5cdFx0Zm9yKG1vZHVsZUlkIGluIG1vcmVNb2R1bGVzKSB7XG5cdFx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8obW9yZU1vZHVsZXMsIG1vZHVsZUlkKSkge1xuXHRcdFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLm1bbW9kdWxlSWRdID0gbW9yZU1vZHVsZXNbbW9kdWxlSWRdO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRpZihydW50aW1lKSB2YXIgcmVzdWx0ID0gcnVudGltZShfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblx0fVxuXHRpZihwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbikgcGFyZW50Q2h1bmtMb2FkaW5nRnVuY3Rpb24oZGF0YSk7XG5cdGZvcig7aSA8IGNodW5rSWRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y2h1bmtJZCA9IGNodW5rSWRzW2ldO1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhpbnN0YWxsZWRDaHVua3MsIGNodW5rSWQpICYmIGluc3RhbGxlZENodW5rc1tjaHVua0lkXSkge1xuXHRcdFx0aW5zdGFsbGVkQ2h1bmtzW2NodW5rSWRdWzBdKCk7XG5cdFx0fVxuXHRcdGluc3RhbGxlZENodW5rc1tjaHVua0lkXSA9IDA7XG5cdH1cblxufVxuXG52YXIgY2h1bmtMb2FkaW5nR2xvYmFsID0gc2VsZltcIndlYnBhY2tDaHVua2Zsb3dfb3NcIl0gPSBzZWxmW1wid2VicGFja0NodW5rZmxvd19vc1wiXSB8fCBbXTtcbmNodW5rTG9hZGluZ0dsb2JhbC5mb3JFYWNoKHdlYnBhY2tKc29ucENhbGxiYWNrLmJpbmQobnVsbCwgMCkpO1xuY2h1bmtMb2FkaW5nR2xvYmFsLnB1c2ggPSB3ZWJwYWNrSnNvbnBDYWxsYmFjay5iaW5kKG51bGwsIGNodW5rTG9hZGluZ0dsb2JhbC5wdXNoLmJpbmQoY2h1bmtMb2FkaW5nR2xvYmFsKSk7IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5uYyA9IHVuZGVmaW5lZDsiLCJcbiAgICAgIGltcG9ydCBBUEkgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanNcIjtcbiAgICAgIGltcG9ydCBkb21BUEkgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qc1wiO1xuICAgICAgaW1wb3J0IHNldEF0dHJpYnV0ZXMgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMuanNcIjtcbiAgICAgIGltcG9ydCBpbnNlcnRTdHlsZUVsZW1lbnQgZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVUYWdUcmFuc2Zvcm0uanNcIjtcbiAgICAgIGltcG9ydCBjb250ZW50LCAqIGFzIG5hbWVkRXhwb3J0IGZyb20gXCIhIS4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvY2pzLmpzIS4uL25vZGVfbW9kdWxlcy9sZXNzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLmxlc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcblxuICAgICAgb3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbiAgICBcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuLi9ub2RlX21vZHVsZXMvbGVzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5sZXNzXCI7XG4gICAgICAgZXhwb3J0IGRlZmF1bHQgY29udGVudCAmJiBjb250ZW50LmxvY2FscyA/IGNvbnRlbnQubG9jYWxzIDogdW5kZWZpbmVkO1xuIiwiZXhwb3J0IGNvbnN0IG1ldGEgPSB7XHJcbiAgbmFtZTogJ0Nsb2NrJyxcclxuICBkZXNjcmlwdGlvbjogJ0Rpc3BsYXlzIHRoZSBkYXRlICYgdGltZS4nLFxyXG4gIGlkOiAnY2xvY2snXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBydW4gPSAoZWxlbWVudDogSFRNTERpdkVsZW1lbnQpID0+IHtcclxuICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XHJcbiAgZWxlbWVudC5zdHlsZS5hbGlnbkl0ZW1zID0gJ2NlbnRlcic7XHJcbiAgZWxlbWVudC5pbm5lclRleHQgPSAnOTo0MSBBTVxcbjEwLzE0LzIwMjMnO1xyXG59IiwiZXhwb3J0IGNvbnN0IG1ldGEgPSB7XHJcbiAgbmFtZTogJ0Rlc2t0b3AgU3dpdGNoZXInLFxyXG4gIGRlc2NyaXB0aW9uOiAnQWxsb3dzIHlvdSB0byBzd2l0Y2ggYmV0d2VlbiBkZXNrdG9wcy4nLFxyXG4gIGlkOiAnc3dpdGNoZXInXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBydW4gPSAoZWxlbWVudDogSFRNTERpdkVsZW1lbnQpID0+IHtcclxuICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XHJcbiAgZWxlbWVudC5zdHlsZS5nYXAgPSAnMTBweCc7XHJcbiAgZWxlbWVudC5zdHlsZS5hbGlnbkl0ZW1zID0gJ2NlbnRlcic7XHJcbiAgZWxlbWVudC5zdHlsZS5wYWRkaW5nTGVmdCA9ICcxNXB4JztcclxuICBlbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9ICcxNXB4JztcclxuICBlbGVtZW50LmlubmVySFRNTCA9IGA8aSBjbGFzcz0nYnggYnhzLWRpY2UtMSc+PC9pPjxpIGNsYXNzPSdieCBieC1kaWNlLTInPjwvaT48aSBjbGFzcz0nYnggYngtZGljZS0zJz48L2k+YDtcclxufSIsImV4cG9ydCBjb25zdCBtZXRhID0ge1xyXG4gIG5hbWU6ICdBcHAgVmlldycsXHJcbiAgZGVzY3JpcHRpb246ICdPcGVucyB0aGUgYXBwIHZpZXcuJyxcclxuICBpZDogJ2FwcHZpZXcnXHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBydW4gPSAoZWxlbWVudDogSFRNTERpdkVsZW1lbnQpID0+IHtcclxuICBlbGVtZW50LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XHJcbiAgZWxlbWVudC5zdHlsZS5hbGlnbkl0ZW1zID0gJ2NlbnRlcic7XHJcbiAgZWxlbWVudC5zdHlsZS5qdXN0aWZ5Q29udGVudCA9ICdjZW50ZXInO1xyXG4gIGVsZW1lbnQuc3R5bGUuYXNwZWN0UmF0aW8gPSAnMSAvIDEnO1xyXG4gIGVsZW1lbnQuaW5uZXJIVE1MID0gYDxpIGNsYXNzPSdieCBieC1yb2NrZXQnPjwvaT5gO1xyXG5cclxuICBlbGVtZW50Lm9uY2xpY2sgPSAoKSA9PiB7XHJcbiAgICB3aW5kb3cud20udG9nZ2xlTGF1bmNoZXIoKTtcclxuICB9XHJcbn0iLCJpbXBvcnQgZmxvdyBmcm9tICcuLi9mbG93LnRzJztcclxuXHJcbmV4cG9ydCBjb25zdCBtZXRhID0ge1xyXG4gIG5hbWU6ICdBcHBzJyxcclxuICBkZXNjcmlwdGlvbjogJ0Rpc3BsYXlzIHRoZSBjdXJyZW50IGFwcHMgb3Blbi4nLFxyXG4gIGlkOiAnYXBwcydcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IHJ1biA9IChlbGVtZW50OiBIVE1MRGl2RWxlbWVudCkgPT4ge1xyXG4gIGVsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcclxuICBlbGVtZW50LnN0eWxlLmFsaWduSXRlbXMgPSAnY2VudGVyJztcclxuICBlbGVtZW50LnN0eWxlLmdhcCA9ICcxMHB4JztcclxuICBlbGVtZW50LnN0eWxlLnBhZGRpbmdMZWZ0ID0gJzE1cHgnO1xyXG4gIGVsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gJzE1cHgnO1xyXG5cclxuICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignYXBwX29wZW5lZCcsIChlOiBDdXN0b21FdmVudCkgPT4ge1xyXG4gICAgY29uc3QgYXBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXBwJyk7XHJcbiAgICBhcHAuaW5uZXJIVE1MID0gYDxpbWcgc3JjPVwiJHtlLmRldGFpbC5hcHAuaWNvbn1cIi8+YDtcclxuICAgIGFwcC5vbmNsaWNrID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgICBjb25zdCB3aW4gPSBhd2FpdCBlLmRldGFpbC53aW47XHJcbiAgICAgIGF3YWl0IHdpbi5mb2N1cygpO1xyXG4gICAgfVxyXG4gICAgZWxlbWVudC5hcHBlbmRDaGlsZChhcHApO1xyXG4gIH0pXHJcbn0iLCJpbXBvcnQgKiBhcyBjbG9jayBmcm9tICcuL21vZHVsZXMvY2xvY2sudHMnO1xyXG5pbXBvcnQgKiBhcyBzd2l0Y2hlciBmcm9tICcuL21vZHVsZXMvc3dpdGNoZXIudHMnO1xyXG5pbXBvcnQgKiBhcyBhcHBWaWV3IGZyb20gJy4vbW9kdWxlcy9hcHBWaWV3LnRzJztcclxuaW1wb3J0ICogYXMgYXBwcyBmcm9tICcuL21vZHVsZXMvYXBwcy50cyc7XHJcblxyXG5pbXBvcnQgeyBTdGF0dXNJdGVtIH0gZnJvbSAnLi90eXBlcyc7XHJcblxyXG5jbGFzcyBTdGF0dXNCYXIge1xyXG4gIGl0ZW1zOiBTdGF0dXNJdGVtW10gPSBbXTtcclxuICBlbGVtZW50OiBIVE1MRWxlbWVudDtcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7XHJcbiAgICB0aGlzLmVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0b29sYmFyJyk7XHJcblxyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLmVsZW1lbnQpO1xyXG5cclxuICAgIHRoaXMuYWRkKGFwcFZpZXcpO1xyXG4gICAgdGhpcy5hZGQoYXBwcyk7XHJcbiAgICB0aGlzLmFkZChjbG9jayk7XHJcbiAgICB0aGlzLmFkZChzd2l0Y2hlcik7XHJcbiAgfVxyXG5cclxuICBhZGQoaXRlbTogU3RhdHVzSXRlbSkge1xyXG4gICAgaWYgKHRoaXMuaXRlbXMuc29tZSh4ID0+IHgubWV0YS5pZCA9PT0gaXRlbS5tZXRhLmlkKSkge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGBVbmFibGUgdG8gcmVnaXN0ZXIgdG9vbDsgJHtpdGVtLm1ldGEuaWR9IGlzIGFscmVhZHkgcmVnaXN0ZXJlZC5gKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtdG9vbGJhci1pZCcsIGl0ZW0ubWV0YS5pZCk7XHJcbiAgXHJcbiAgICAgIHRoaXMuaXRlbXMucHVzaChpdGVtKTtcclxuICAgICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKGVsZW1lbnQpO1xyXG4gIFxyXG4gICAgICBpdGVtLnJ1bihlbGVtZW50KTtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFN0YXR1c0JhcjsiLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiaW1hZ2VzL2RiZDE3MjNhMmZjZjkyZTNiMDNhNzYwYTEyNTkyODJjLnBuZ1wiOyIsImltcG9ydCBpY29uIGZyb20gJy4uL2Fzc2V0cy9pY29ucy9zZXR0aW5ncy5wbmcnO1xyXG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vdHlwZXMudHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNldHRpbmdzQXBwIGltcGxlbWVudHMgQXBwIHtcclxuICBuYW1lICAgICA9ICdTZXR0aW5ncyc7XHJcbiAgcGtnICAgICAgPSAnZmxvdy5zZXR0aW5ncyc7XHJcbiAgaWNvbiAgICAgPSBpY29uO1xyXG4gIHZlcnNpb24gID0gJzEuMC4wJztcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBhc3luYyBvcGVuKCkge1xyXG4gICAgY29uc3Qgd2luID0gd2luZG93LndtLmNyZWF0ZVdpbmRvdyh7XHJcbiAgICAgIHRpdGxlOiB0aGlzLm5hbWUsXHJcbiAgICAgIGljb246IGljb24sXHJcbiAgICAgIHdpZHRoOiA3MDAsXHJcbiAgICAgIGhlaWdodDogMzAwXHJcbiAgICB9KTtcclxuXHJcbiAgICB3aW4uY29udGVudC5zdHlsZS5wYWRkaW5nID0gJzEwcHgnO1xyXG4gICAgd2luLmNvbnRlbnQuaW5uZXJIVE1MID0gYFxyXG4gICAgICA8aDE+U2V0dGluZ3M8L2gxPlxyXG4gICAgICA8cD5vd28yPC9wPlxyXG4gICAgYDtcclxuXHJcbiAgICByZXR1cm4gd2luO1xyXG4gIH1cclxufSIsImV4cG9ydCBkZWZhdWx0IF9fd2VicGFja19wdWJsaWNfcGF0aF9fICsgXCJpbWFnZXMvZDcxMDcyYWFkMzZhNzU0YjEwMzhjNDI0NWVhOTg2ZGYucG5nXCI7IiwiaW1wb3J0IGljb24gZnJvbSAnLi4vYXNzZXRzL2ljb25zL2ZpbGVzLnBuZyc7XHJcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi90eXBlcy50c1wiO1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xyXG5pbXBvcnQgZmxvdyBmcm9tICcuLi9mbG93LnRzJztcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZpbGVzQXBwIGltcGxlbWVudHMgQXBwIHtcclxuICBuYW1lICAgICA9ICdGaWxlcyc7XHJcbiAgcGtnICAgICAgPSAnZmxvdy5maWxlcyc7XHJcbiAgaWNvbiAgICAgPSBpY29uO1xyXG4gIHZlcnNpb24gID0gJzEuMC4wJztcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBhc3luYyBvcGVuKCkge1xyXG4gICAgY29uc3Qgd2luID0gd2luZG93LndtLmNyZWF0ZVdpbmRvdyh7XHJcbiAgICAgIHRpdGxlOiB0aGlzLm5hbWUsXHJcbiAgICAgIGljb246IGljb24sXHJcbiAgICAgIHdpZHRoOiA1MDAsXHJcbiAgICAgIGhlaWdodDogNDAwXHJcbiAgICB9KTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCBmcy5ta2RpcignL2hvbWUnLCAoKSA9PiB7fSk7XHJcbiAgICAgIGF3YWl0IGZzLm1rZGlyKCcvaG9tZS9tZW93JywgKCkgPT4ge30pO1xyXG4gICAgfSBjYXRjaCAoZSkge31cclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSgnL2hvbWUvb3dvMS50eHQnLCAnc3Vzc3knLCAoKSA9PiB7fSk7XHJcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSgnL2hvbWUvb3dvMi5odG1sJywgJzxib2R5PjwvYm9keT4nLCAoKSA9PiB7fSk7XHJcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSgnL2hvbWUvb3dvLmpzJywgJ2FsZXJ0KGBoaWApJywgKCkgPT4ge30pO1xyXG4gICAgfSBjYXRjaCAoZSkge31cclxuXHJcblxyXG4gICAgd2luLmNvbnRlbnQuc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcclxuICAgIHdpbi5jb250ZW50LnN0eWxlLmZsZXhEaXJlY3Rpb24gPSAnY29sdW1uJztcclxuXHJcbiAgICBhc3luYyBmdW5jdGlvbiBzZXREaXIoZGlyOiBzdHJpbmcpIHtcclxuICAgICAgYXdhaXQgZnMucmVhZGRpcihkaXIsIChlLCBmaWxlcykgPT4ge1xyXG4gICAgICAgIGNvbnN0IGJhY2sgPSBkaXIgPT09ICcvJyA/IGA8aSBjbGFzcz0nYnggYngtYXJyb3ctdG8tbGVmdCc+PC9pPmAgOiBgPGkgY2xhc3M9J2JhY2sgYnggYngtbGVmdC1hcnJvdy1hbHQnPjwvaT5gO1xyXG4gIFxyXG4gICAgICAgIHdpbi5jb250ZW50LmlubmVySFRNTCA9IGBcclxuICAgICAgICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOiA1cHg7ZGlzcGxheTogZmxleDthbGlnbi1pdGVtczogY2VudGVyO1wiPiR7YmFja30ke2Rpcn08L2Rpdj5cclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmaWxlc1wiIHN0eWxlPVwiYmFja2dyb3VuZDogdmFyKC0tYmFzZSk7ZmxleDogMTtib3JkZXItcmFkaXVzOiAxMHB4O2Rpc3BsYXk6IGZsZXg7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcIj48L2Rpdj5cclxuICAgICAgICBgO1xyXG4gIFxyXG4gICAgICAgIGlmIChiYWNrICE9PSBgPGkgY2xhc3M9J2J4IGJ4LWFycm93LXRvLWxlZnQnPjwvaT5gKSB7XHJcbiAgICAgICAgICAod2luLmNvbnRlbnQucXVlcnlTZWxlY3RvcignLmJhY2snKSBhcyBIVE1MRWxlbWVudCkub25jbGljayA9ICgpID0+IHtcclxuICAgICAgICAgICAgaWYgKGRpci5zcGxpdCgnLycpWzFdID09PSBkaXIucmVwbGFjZSgnLycsICcnKSkge1xyXG4gICAgICAgICAgICAgIHNldERpcignLycgKyBkaXIuc3BsaXQoJy8nKVswXSlcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBzZXREaXIoJy8nICsgZGlyLnNwbGl0KCcvJylbMV0pXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgZm9yIChjb25zdCBmaWxlIGluIGZpbGVzKSB7XHJcbiAgICAgICAgICBjb25zdCBzZXBhcmF0b3IgPSBkaXIgPT09ICcvJyA/ICcnIDogJy8nO1xyXG4gICAgICAgICAgZnMuc3RhdChkaXIgKyBzZXBhcmF0b3IgKyBmaWxlc1tmaWxlXSwgKGUsIGZpbGVTdGF0KSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuICAgICAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywgJ3BhZGRpbmc6IDVweDtib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tdGV4dCk7Jyk7XHJcbiAgICAgICAgICAgIGVsZW1lbnQuaW5uZXJUZXh0ICs9IGAke2ZpbGVzW2ZpbGVdfWA7XHJcbiAgICAgICAgICAgIGVsZW1lbnQub25jbGljayA9ICgpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoZmlsZVN0YXQuaXNEaXJlY3RvcnkoKSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgc2V0RGlyKGRpciArIHNlcGFyYXRvciArIGZpbGVzW2ZpbGVdKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZmxvdy5vcGVuQXBwKCdmbG93LmVkaXRvcicsIHsgcGF0aDogZGlyICsgc2VwYXJhdG9yICsgZmlsZXNbZmlsZV0gfSlcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH07XHJcbiAgICBcclxuICAgICAgICAgICAgd2luLmNvbnRlbnQucXVlcnlTZWxlY3RvcignLmZpbGVzJykuYXBwZW5kQ2hpbGQoZWxlbWVudCk7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNldERpcignLycpXHJcblxyXG4gICAgcmV0dXJuIHdpbjtcclxuICB9XHJcbn0iLCJleHBvcnQgZGVmYXVsdCBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyArIFwiaW1hZ2VzLzY3MDMxYzE1ZDkwYTNkODU4NTRmYjA4NTdjMDBkZmIzLnBuZ1wiOyIsImltcG9ydCBpY29uIGZyb20gJy4uL2Fzc2V0cy9pY29ucy9tdXNpYy5wbmcnO1xyXG5pbXBvcnQgeyBBcHAgfSBmcm9tIFwiLi4vdHlwZXMudHNcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE11c2ljQXBwIGltcGxlbWVudHMgQXBwIHtcclxuICBuYW1lICAgICA9ICdNdXNpYyc7XHJcbiAgcGtnICAgICAgPSAnZmxvdy5tdXNpYyc7XHJcbiAgaWNvbiAgICAgPSBpY29uO1xyXG4gIHZlcnNpb24gID0gJzEuMC4wJztcclxuXHJcbiAgY29uc3RydWN0b3IoKSB7fVxyXG5cclxuICBhc3luYyBvcGVuKCkge1xyXG4gICAgY29uc3Qgd2luID0gd2luZG93LndtLmNyZWF0ZVdpbmRvdyh7XHJcbiAgICAgIHRpdGxlOiB0aGlzLm5hbWUsXHJcbiAgICAgIGljb246IGljb25cclxuICAgIH0pO1xyXG5cclxuICAgIHdpbi5jb250ZW50LmlubmVySFRNTCA9ICdoaSc7XHJcbiAgICBcclxuICAgIHJldHVybiB3aW47XHJcbiAgfVxyXG59IiwiZXhwb3J0IGRlZmF1bHQgX193ZWJwYWNrX3B1YmxpY19wYXRoX18gKyBcImltYWdlcy8yODkzNjc0ZGE5OGNiNzdhNzA4MWFiNjk4NzkxZTI2ZS5wbmdcIjsiLCJpbXBvcnQgaWNvbiBmcm9tICcuLi9hc3NldHMvaWNvbnMvZWRpdG9yLnBuZyc7XHJcbmltcG9ydCB7IEFwcCB9IGZyb20gXCIuLi90eXBlcy50c1wiO1xyXG5pbXBvcnQgZnMgZnJvbSAnZnMnO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgRWRpdG9yQXBwIGltcGxlbWVudHMgQXBwIHtcclxuICBuYW1lICAgICA9ICdFZGl0b3InO1xyXG4gIHBrZyAgICAgID0gJ2Zsb3cuZWRpdG9yJztcclxuICBpY29uICAgICA9IGljb247XHJcbiAgdmVyc2lvbiAgPSAnMS4wLjAnO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHt9XHJcblxyXG4gIGFzeW5jIG9wZW4oZGF0YTogYW55KSB7XHJcbiAgICBjb25zdCB3aW4gPSB3aW5kb3cud20uY3JlYXRlV2luZG93KHtcclxuICAgICAgdGl0bGU6IHRoaXMubmFtZSxcclxuICAgICAgaWNvbjogaWNvbixcclxuICAgICAgd2lkdGg6IDUwMCxcclxuICAgICAgaGVpZ2h0OiA0MDBcclxuICAgIH0pO1xyXG5cclxuICAgIGlmIChkYXRhLnBhdGgpIHtcclxuICAgICAgd2luLnNldFRpdGxlKCdFZGl0b3IgLSAnICsgZGF0YS5wYXRoKTtcclxuXHJcbiAgICAgIHZhciB7IGRlZmF1bHQ6IGFjZSB9ID0gYXdhaXQgaW1wb3J0KCdicmFjZScpO1xyXG4gICAgICB2YXIgZWRpdG9yID0gYWNlLmVkaXQod2luLmNvbnRlbnQpO1xyXG5cclxuICAgICAgaWYgKGRhdGEucGF0aC5zcGxpdCgnLicpLmF0KC0xKS5tYXRjaCgvKG18Y3wpKGpzKS8pKSB7XHJcbiAgICAgICAgLy9yZXF1aXJlKCdicmFjZS9tb2RlL2phdmFzY3JpcHQnKTtcclxuICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1vZGUoJ2FjZS9tb2RlL2phdmFzY3JpcHQnKTtcclxuICAgICAgfSBlbHNlIGlmIChkYXRhLnBhdGguc3BsaXQoJy4nKS5hdCgtMSkubWF0Y2goL2pzb24vKSkge1xyXG4gICAgICAgIC8vcmVxdWlyZSgnYnJhY2UvbW9kZS9qc29uJyk7XHJcbiAgICAgICAgZWRpdG9yLmdldFNlc3Npb24oKS5zZXRNb2RlKCdhY2UvbW9kZS9qc29uJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5wYXRoLnNwbGl0KCcuJykuYXQoLTEpLm1hdGNoKC8oaHRtKShsfCkvKSkge1xyXG4gICAgICAgIC8vcmVxdWlyZSgnYnJhY2UvbW9kZS9odG1sJyk7XHJcbiAgICAgICAgZWRpdG9yLmdldFNlc3Npb24oKS5zZXRNb2RlKCdhY2UvbW9kZS9odG1sJyk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZGF0YS5wYXRoLnNwbGl0KCcuJykuYXQoLTEpLm1hdGNoKC9jc3MvKSkge1xyXG4gICAgICAgIC8vcmVxdWlyZSgnYnJhY2UvbW9kZS9jc3MnKTtcclxuICAgICAgICBlZGl0b3IuZ2V0U2Vzc2lvbigpLnNldE1vZGUoJ2FjZS9tb2RlL2NzcycpO1xyXG4gICAgICB9XHJcbiAgICAgIHJlcXVpcmUoJ2JyYWNlL3RoZW1lL21vbm9rYWknKTtcclxuICAgICAgZWRpdG9yLnNldFRoZW1lKCdhY2UvdGhlbWUvbW9ub2thaScpO1xyXG4gICAgICBcclxuICAgICAgZWRpdG9yLnNldFZhbHVlKChhd2FpdCBmcy5wcm9taXNlcy5yZWFkRmlsZShkYXRhLnBhdGgpKS50b1N0cmluZygpKTtcclxuICAgIH1cclxuICAgIFxyXG4gICAgcmV0dXJuIHdpbjtcclxuICB9XHJcbn0iLCJpbXBvcnQgeyBBcHAgfSBmcm9tICcuL3R5cGVzLnRzJztcclxuXHJcbmltcG9ydCBTZXR0aW5nc0FwcCBmcm9tICcuL2FwcHMvc2V0dGluZ3MudHMnO1xyXG5pbXBvcnQgRmlsZXNBcHAgZnJvbSAnLi9hcHBzL2ZpbGVzLnRzJztcclxuaW1wb3J0IE11c2ljQXBwIGZyb20gJy4vYXBwcy9tdXNpYy50cyc7XHJcbmltcG9ydCBFZGl0b3JBcHAgZnJvbSAnLi9hcHBzL2VkaXRvci50cyc7XHJcblxyXG5pbnRlcmZhY2UgRmxvdyB7XHJcbiAgYXBwczoge1xyXG4gICAgW2tleTogc3RyaW5nXTogQXBwXHJcbiAgfSxcclxuICBvcGVuQXBwOiBGdW5jdGlvbjtcclxufVxyXG5cclxuY29uc3QgZmxvdzogRmxvdyA9IHtcclxuICBhcHBzOiB7XHJcbiAgICBcImZsb3cuc2V0dGluZ3NcIjogbmV3IFNldHRpbmdzQXBwKCksXHJcbiAgICBcImZsb3cubXVzaWNcIjogbmV3IE11c2ljQXBwKCksXHJcbiAgICBcImZsb3cuZmlsZXNcIjogbmV3IEZpbGVzQXBwKCksXHJcbiAgICBcImZsb3cuZWRpdG9yXCI6IG5ldyBFZGl0b3JBcHAoKSxcclxuICB9LFxyXG4gIG9wZW5BcHAocGtnOiBzdHJpbmcsIGRhdGE6IGFueSkge1xyXG4gICAgY29uc3Qgd2luID0gdGhpcy5hcHBzW3BrZ10ub3BlbihkYXRhKTtcclxuICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCdhcHBfb3BlbmVkJywgeyBkZXRhaWw6IHsgYXBwOiB0aGlzLmFwcHNbcGtnXSwgd2luIH0gfSk7XHJcbiAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChldmVudCk7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmbG93OyIsImltcG9ydCBmbG93IGZyb20gXCIuL2Zsb3cudHNcIjtcclxuXHJcbmludGVyZmFjZSBGbG93V2luZG93Q29uZmlnIHtcclxuICB0aXRsZTogc3RyaW5nO1xyXG4gIGljb246IHN0cmluZztcclxuXHJcbiAgd2lkdGg/OiBudW1iZXI7XHJcbiAgaGVpZ2h0PzogbnVtYmVyO1xyXG5cclxuICBtaW5XaWR0aD86IG51bWJlcjtcclxuICBtaW5IZWlnaHQ/OiBudW1iZXI7XHJcbn1cclxuXHJcbmxldCBmb2N1cyA9IHRydWU7XHJcblxyXG53aW5kb3cub25mb2N1cyA9ICgpID0+IGZvY3VzID0gdHJ1ZTtcclxud2luZG93Lm9uYmx1ciA9ICgpID0+IGZvY3VzID0gZmFsc2U7XHJcblxyXG5mdW5jdGlvbiBkcmFnRWxlbWVudChlbGVtZW50OiBIVE1MRWxlbWVudCwgY29udGFpbmVyOiBIVE1MRWxlbWVudCkge1xyXG4gIHZhciBwb3NYID0gMCwgcG9zWSA9IDA7XHJcblxyXG4gIGVsZW1lbnQucXVlcnlTZWxlY3Rvcignd2luZG93LWhlYWRlcicpLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsIGRyYWdNb3VzZURvd24pO1xyXG5cclxuICBmdW5jdGlvbiBkcmFnTW91c2VEb3duKGU6IE1vdXNlRXZlbnQpIHtcclxuICAgIGUucHJldmVudERlZmF1bHQoKTtcclxuICAgIGNsb3NlQWxsKCk7XHJcblxyXG4gICAgcG9zWCA9IGUuY2xpZW50WDtcclxuICAgIHBvc1kgPSBlLmNsaWVudFk7XHJcblxyXG4gICAgZG9jdW1lbnQub25tb3VzZXVwID0gY2xvc2VEcmFnRWxlbWVudDtcclxuICAgIGRvY3VtZW50Lm9ubW91c2Vtb3ZlID0gZWxlbWVudERyYWc7XHJcbiAgfVxyXG5cclxuICBmdW5jdGlvbiBlbGVtZW50RHJhZyhlOiBNb3VzZUV2ZW50KSB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgXHJcbiAgICAvLyBDYWxjdWxhdGUgdGhlIGRpc3RhbmNlIHRoZSBtb3VzZSBoYXMgbW92ZWRcclxuICAgIGNvbnN0IGR4ID0gZS5jbGllbnRYIC0gcG9zWDtcclxuICAgIGNvbnN0IGR5ID0gZS5jbGllbnRZIC0gcG9zWTtcclxuICBcclxuICAgIC8vIENhbGN1bGF0ZSB0aGUgbmV3IHBvc2l0aW9uIGZvciB0aGUgZWxlbWVudFxyXG4gICAgY29uc3QgbmV3VG9wID0gZWxlbWVudC5vZmZzZXRUb3AgKyBkeTtcclxuICAgIGNvbnN0IG5ld0xlZnQgPSBlbGVtZW50Lm9mZnNldExlZnQgKyBkeDtcclxuICBcclxuICAgIC8vIEdldCB0aGUgY29udGFpbmVyJ3MgZGltZW5zaW9uc1xyXG4gICAgY29uc3QgY29udGFpbmVyV2lkdGggPSBjb250YWluZXIub2Zmc2V0V2lkdGg7XHJcbiAgICBjb25zdCBjb250YWluZXJIZWlnaHQgPSBjb250YWluZXIub2Zmc2V0SGVpZ2h0O1xyXG4gIFxyXG4gICAgLy8gRW5zdXJlIHRoZSBlbGVtZW50IHN0YXlzIHdpdGhpbiB0aGUgY29udGFpbmVyIGJvdW5kYXJpZXNcclxuICAgIGlmIChuZXdUb3AgPj0gMCAmJiBuZXdUb3AgKyBlbGVtZW50Lm9mZnNldEhlaWdodCA8PSBjb250YWluZXJIZWlnaHQpIHtcclxuICAgICAgZWxlbWVudC5zdHlsZS50b3AgPSBuZXdUb3AgKyBcInB4XCI7XHJcbiAgICB9XHJcbiAgXHJcbiAgICBpZiAobmV3TGVmdCA+PSAwICYmIG5ld0xlZnQgKyBlbGVtZW50Lm9mZnNldFdpZHRoIDw9IGNvbnRhaW5lcldpZHRoKSB7XHJcbiAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IG5ld0xlZnQgKyBcInB4XCI7XHJcbiAgICB9XHJcbiAgXHJcbiAgICAvLyBVcGRhdGUgdGhlIGxhc3QgbW91c2UgcG9zaXRpb25cclxuICAgIHBvc1ggPSBlLmNsaWVudFg7XHJcbiAgICBwb3NZID0gZS5jbGllbnRZO1xyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gY2xvc2VEcmFnRWxlbWVudCgpIHtcclxuICAgIGRvY3VtZW50Lm9ubW91c2V1cCA9IG51bGw7XHJcbiAgICBkb2N1bWVudC5vbm1vdXNlbW92ZSA9IG51bGw7XHJcbiAgICBjb250YWluZXIub25tb3VzZWxlYXZlID0gbnVsbDtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGNsb3NlQWxsICgpIHtcclxuICAgIGNsb3NlRHJhZ0VsZW1lbnQoKTtcclxuICAgIGNvbnRhaW5lci5vbm1vdXNlZW50ZXIgPSBudWxsO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEZsb3dXaW5kb3cge1xyXG4gIGVsZW1lbnQ6IEhUTUxFbGVtZW50O1xyXG5cclxuICBwcml2YXRlIGhlYWRlcjogSFRNTEVsZW1lbnQ7XHJcbiAgY29udGVudDogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIG1heGltaXplZDogYm9vbGVhbjtcclxuICBtaW5pbWl6ZWQ6IGJvb2xlYW47XHJcblxyXG4gIHdpZHRoOiBudW1iZXI7XHJcbiAgaGVpZ2h0OiBudW1iZXI7XHJcblxyXG4gIHdtOiBXTTtcclxuXHJcbiAgY29uZmlnOiBGbG93V2luZG93Q29uZmlnO1xyXG5cclxuICBjb25zdHJ1Y3Rvcih3bTogV00sIGNvbmZpZzogRmxvd1dpbmRvd0NvbmZpZykge1xyXG4gICAgdGhpcy53bSA9IHdtO1xyXG4gICAgdGhpcy5jb25maWcgPSBjb25maWc7XHJcblxyXG4gICAgdGhpcy5lbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnd2luZG93Jyk7XHJcblxyXG4gICAgdGhpcy5lbGVtZW50LnN0eWxlLnpJbmRleCA9ICh3bS5nZXRIaWdoZXN0WkluZGV4KCkgKyAxKS50b1N0cmluZygpO1xyXG4gICAgdGhpcy5lbGVtZW50LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcclxuICAgIHRoaXMuZm9jdXMoKTtcclxuXHJcbiAgICB0aGlzLmVsZW1lbnQub25tb3VzZWRvd24gPSAoKSA9PiB7XHJcbiAgICAgIHRoaXMuZm9jdXMoKVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLmVsZW1lbnQuc3R5bGUud2lkdGggPSBgJHtjb25maWcud2lkdGggfHwgMzAwfXB4YDtcclxuICAgIHRoaXMuZWxlbWVudC5zdHlsZS5oZWlnaHQgPSBgJHtjb25maWcuaGVpZ2h0IHx8IDIwMH1weGA7XHJcblxyXG4gICAgdGhpcy5oZWFkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd3aW5kb3ctaGVhZGVyJyk7XHJcbiAgICB0aGlzLmhlYWRlci5pbm5lckhUTUwgPSBgPGltZyBzcmM9XCIke2NvbmZpZy5pY29ufVwiPjwvaW1nPiA8ZGl2IGNsYXNzPVwidGl0bGVcIj4ke2NvbmZpZy50aXRsZX08L2Rpdj5gXHJcblxyXG4gICAgdGhpcy5jb250ZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnd2luZG93LWNvbnRlbnQnKTtcclxuICAgIFxyXG4gICAgdGhpcy5lbGVtZW50LmFwcGVuZENoaWxkKHRoaXMuaGVhZGVyKTtcclxuICAgIHRoaXMuZWxlbWVudC5hcHBlbmRDaGlsZCh0aGlzLmNvbnRlbnQpO1xyXG5cclxuICAgIGRyYWdFbGVtZW50KHRoaXMuZWxlbWVudCwgZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignd2luZG93LWFyZWEnKSk7XHJcbiAgfVxyXG5cclxuICBmb2N1cygpIHtcclxuICAgIGlmICh0aGlzLmVsZW1lbnQuc3R5bGUuekluZGV4ICE9PSB0aGlzLndtLmdldEhpZ2hlc3RaSW5kZXgoKS50b1N0cmluZygpKSB7XHJcbiAgICAgIHRoaXMuZWxlbWVudC5zdHlsZS56SW5kZXggPSAodGhpcy53bS5nZXRIaWdoZXN0WkluZGV4KCkgKyAxKS50b1N0cmluZygpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgc2V0VGl0bGUodGl0bGU6IHN0cmluZykge1xyXG4gICAgKHRoaXMuaGVhZGVyLnF1ZXJ5U2VsZWN0b3IoJy50aXRsZScpIGFzIEhUTUxFbGVtZW50KS5pbm5lclRleHQgPSB0aXRsZTtcclxuICB9XHJcbn1cclxuXHJcbmNsYXNzIFdNIHtcclxuICBsYXVuY2hlck9wZW4gPSBmYWxzZTtcclxuICBhcmVhOiBIVE1MRWxlbWVudDtcclxuICBsYXVuY2hlcjogSFRNTEVsZW1lbnQ7XHJcbiAgd2luZG93czogRmxvd1dpbmRvd1tdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5hcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnd2luZG93LWFyZWEnKTtcclxuICAgIHRoaXMubGF1bmNoZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYXVuY2hlcicpO1xyXG5cclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuXHJcbiAgZ2V0SGlnaGVzdFpJbmRleCgpIHtcclxuICAgIGNvbnN0IGluZGV4ZXMgPSB0aGlzLndpbmRvd3MubWFwKCh3aW46IEZsb3dXaW5kb3cpID0+IHtcclxuICAgICAgaWYgKHdpbi5lbGVtZW50LnN0eWxlLnpJbmRleCA9PT0gJycpIHJldHVybjtcclxuICAgICAgcmV0dXJuIHBhcnNlSW50KHdpbi5lbGVtZW50LnN0eWxlLnpJbmRleCk7XHJcbiAgICB9KS5maWx0ZXIoeCA9PiB4ICE9PSB1bmRlZmluZWQpO1xyXG5cclxuICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KC4uLmluZGV4ZXMpO1xyXG5cclxuICAgIGlmIChtYXggPT09IC1JbmZpbml0eSkge1xyXG4gICAgICByZXR1cm4gMDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBtYXg7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjcmVhdGVXaW5kb3coY29uZmlnOiBGbG93V2luZG93Q29uZmlnKTogRmxvd1dpbmRvdyB7XHJcbiAgICBjb25zdCB3aW4gPSBuZXcgRmxvd1dpbmRvdyh0aGlzLCBjb25maWcpO1xyXG4gICAgdGhpcy53aW5kb3dzLnB1c2god2luKTtcclxuICAgIHRoaXMuYXJlYS5hcHBlbmRDaGlsZCh3aW4uZWxlbWVudCk7XHJcbiAgICByZXR1cm4gd2luO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlTGF1bmNoZXIoKSB7XHJcbiAgICBpZiAodGhpcy5sYXVuY2hlck9wZW4gPT09IHRydWUpIHtcclxuICAgICAgdGhpcy5sYXVuY2hlci5zdHlsZS5vcGFjaXR5ID0gJzAnO1xyXG4gICAgICB0aGlzLmxhdW5jaGVyLnN0eWxlLmJhY2tkcm9wRmlsdGVyID0gJ2JsdXIoMHB4KSc7XHJcbiAgICAgIHRoaXMubGF1bmNoZXIuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMubGF1bmNoZXIuc3R5bGUub3BhY2l0eSA9ICcxJztcclxuICAgICAgdGhpcy5sYXVuY2hlci5zdHlsZS5iYWNrZHJvcEZpbHRlciA9ICdibHVyKDIwcHgpJztcclxuICAgICAgdGhpcy5sYXVuY2hlci5zdHlsZS5wb2ludGVyRXZlbnRzID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxhdW5jaGVyT3BlbiA9ICF0aGlzLmxhdW5jaGVyT3BlbjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgaW5pdCgpIHtcclxuICAgIHRoaXMubGF1bmNoZXIuaW5uZXJIVE1MID0gYFxyXG4gICAgICA8aW5wdXQgcGxhY2Vob2xkZXI9XCJTZWFyY2hcIi8+XHJcbiAgICAgIDxhcHBzPjwvYXBwcz5cclxuICAgIGA7XHJcblxyXG4gICAgdGhpcy5sYXVuY2hlci5vbmNsaWNrID0gKGUpID0+IHtcclxuICAgICAgaWYoZS50YXJnZXQgIT09IGUuY3VycmVudFRhcmdldCkgcmV0dXJuO1xyXG4gICAgICB0aGlzLnRvZ2dsZUxhdW5jaGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgKHRoaXMubGF1bmNoZXIucXVlcnlTZWxlY3RvcignYXBwcycpIGFzIEhUTUxFbGVtZW50KS5vbmNsaWNrID0gKGUpID0+IHtcclxuICAgICAgaWYoZS50YXJnZXQgIT09IGUuY3VycmVudFRhcmdldCkgcmV0dXJuO1xyXG4gICAgICB0aGlzLnRvZ2dsZUxhdW5jaGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5sYXVuY2hlci5zdHlsZS5vcGFjaXR5ID0gJzAnO1xyXG4gICAgdGhpcy5sYXVuY2hlci5zdHlsZS5maWx0ZXIgPSAnYmx1cigwcHgpJztcclxuICAgIHRoaXMubGF1bmNoZXIuc3R5bGUucG9pbnRlckV2ZW50cyA9ICdub25lJztcclxuXHJcbiAgICBmb3IgKGNvbnN0IHBrZyBpbiBmbG93LmFwcHMpIHtcclxuICAgICAgY29uc3QgYXBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYXBwJyk7XHJcbiAgICAgIGFwcC5vbmNsaWNrID0gKCkgPT4ge1xyXG4gICAgICAgIGZsb3cub3BlbkFwcChwa2cpO1xyXG4gICAgICAgIHRoaXMudG9nZ2xlTGF1bmNoZXIoKTtcclxuICAgICAgfVxyXG4gICAgICBhcHAuaW5uZXJIVE1MID0gYDxpbWcgc3JjPVwiJHtmbG93LmFwcHNbcGtnXS5pY29ufVwiPjxkaXY+JHtmbG93LmFwcHNbcGtnXS5uYW1lfTwvZGl2PmBcclxuICAgICAgdGhpcy5sYXVuY2hlci5xdWVyeVNlbGVjdG9yKCdhcHBzJykuYXBwZW5kQ2hpbGQoYXBwKTtcclxuICAgIH1cclxuXHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMuYXJlYSk7XHJcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHRoaXMubGF1bmNoZXIpO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgV007IiwiaW1wb3J0ICcuL3N0eWxlLmxlc3MnO1xyXG5cclxuaW1wb3J0IFN0YXR1c0JhciBmcm9tICcuL3N0YXR1c2Jhci50cyc7XHJcbmltcG9ydCBXTSBmcm9tICcuL3dtLnRzJztcclxuXHJcbmRlY2xhcmUgZ2xvYmFsIHtcclxuICB2YXIgd206IFdNO1xyXG4gIHZhciBzdGF0dXNCYXI6IFN0YXR1c0JhcjtcclxufVxyXG5cclxud2luZG93LnN0YXR1c0JhciA9IG5ldyBTdGF0dXNCYXIoKTtcclxud2luZG93LndtID0gbmV3IFdNKCk7Il0sIm5hbWVzIjpbImxlYWZQcm90b3R5cGVzIiwiZ2V0UHJvdG8iLCJpblByb2dyZXNzIiwiZGF0YVdlYnBhY2tQcmVmaXgiLCJfX19DU1NfTE9BREVSX0VYUE9SVF9fXyIsInB1c2giLCJtb2R1bGUiLCJpZCIsIktFWVdPUkRTIiwiZGVmaW5lS2V5d29yZHMiLCJhanYiLCJrZXl3b3JkIiwiQXJyYXkiLCJpc0FycmF5IiwiaSIsImxlbmd0aCIsImdldCIsImRlZkZ1bmMiLCJFcnJvciIsImV4cG9ydHMiLCJUSU1FIiwiREFURV9USU1FX1NFUEFSQVRPUiIsIkNPTVBBUkVfRk9STUFUUyIsImRhdGUiLCJjb21wYXJlRGF0ZSIsInRpbWUiLCJjb21wYXJlVGltZSIsImR0MSIsImR0MiIsInNwbGl0IiwicmVzIiwidW5kZWZpbmVkIiwiJGRhdGFNZXRhU2NoZW1hIiwidHlwZSIsInJlcXVpcmVkIiwicHJvcGVydGllcyIsIiRkYXRhIiwiYW55T2YiLCJmb3JtYXQiLCJhZGRpdGlvbmFsUHJvcGVydGllcyIsImQxIiwiZDIiLCJ0MSIsInQyIiwibWF0Y2giLCJtaW5NYXgiLCJkZWZpbml0aW9uIiwiaW5saW5lIiwic3RhdGVtZW50cyIsImVycm9ycyIsImRlcGVuZGVuY2llcyIsIm1ldGFTY2hlbWEiLCJhZGRLZXl3b3JkIiwiZm9ybWF0cyIsIl9mb3JtYXRzIiwibmFtZSIsIlJlZ0V4cCIsInZhbGlkYXRlIiwiY29tcGFyZSIsImV4dGVuZEZvcm1hdHMiLCJtZXRhU2NoZW1hUmVmIiwiZGVmYXVsdE1ldGEiLCJfb3B0cyIsIiRyZWYiLCJnZXRTY2hlbWEiLCJNRVRBX1NDSEVNQV9JRCIsImNvbnNvbGUiLCJ3YXJuIiwibWFjcm8iLCJzY2hlbWEiLCJwYXJlbnRTY2hlbWEiLCJPYmplY3QiLCJrZXlzIiwibWFwIiwicHJvcCIsIml0ZW1zIiwidXRpbCIsImpzb25Qb2ludGVyIiwic2VnbWVudHMiLCJyb290U2NoZW1hIiwicG9pbnRlclNjaGVtYSIsInNlZ21lbnQiLCJpc0xhc3QiLCJyZXBsYWNlIiwidGVzdCIsImNvdW50Iiwic2NoZW1hcyIsInBvaW50ZXIiLCJwcm9wZXJ0eU5hbWVzIiwiZ2V0RGF0YSIsImx2bCIsImRhdGEiLCJrZXkiLCJleHByIiwiSU5URUdFUiIsIklERU5USUZJRVIiLCJTSU5HTEVfUVVPVEUiLCJpdCIsImRhdGFMZXZlbCIsIiRrZXl3b3JkIiwiJHJ1bGVUeXBlIiwib3V0IiwiJGx2bCIsImxldmVsIiwiJGRhdGFMdmwiLCIkc2NoZW1hIiwiJHNjaGVtYVBhdGgiLCJzY2hlbWFQYXRoIiwiZ2V0UHJvcGVydHkiLCIkZXJyU2NoZW1hUGF0aCIsImVyclNjaGVtYVBhdGgiLCIkYnJlYWtPbkVycm9yIiwib3B0cyIsImFsbEVycm9ycyIsIiR2YWxpZCIsIiRzY2hlbWFGb3JtYXQiLCIkaXNEYXRhRm9ybWF0IiwiJGNsb3NpbmdCcmFjZXMiLCIkZm9ybWF0IiwiZGF0YVBhdGhBcnIiLCIkY29tcGFyZSIsIiRzY2hlbWFWYWx1ZSIsIiQkb3V0U3RhY2siLCIkaXNNYXgiLCIkZXhjbHVzaXZlS2V5d29yZCIsIiRzY2hlbWFFeGNsIiwiJGlzRGF0YUV4Y2wiLCIkb3AiLCIkcmVzdWx0IiwiJGlzRGF0YSIsIiRzY2hlbWFWYWx1ZUV4Y2wiLCIkZXhjbHVzaXZlIiwiJG9wU3RyIiwiJG9wRXhwciIsIiRlcnJvcktleXdvcmQiLCJjcmVhdGVFcnJvcnMiLCJ0b1F1b3RlZFN0cmluZyIsIm1lc3NhZ2VzIiwidmVyYm9zZSIsIl9fZXJyIiwicG9wIiwiY29tcG9zaXRlUnVsZSIsImFzeW5jIiwiZXNjYXBlUXVvdGVzIiwiJGtleSIsIiRpZHgiLCIkbWF0Y2hlZCIsIiRkYXRhUHJvcGVydGllcyIsIiRvd25Qcm9wZXJ0aWVzIiwib3duUHJvcGVydGllcyIsImFycjEiLCIkcFByb3BlcnR5IiwiaTEiLCJsMSIsInVzZVBhdHRlcm4iLCIkbWlzc2luZ1BhdHRlcm4iLCIkZXJycyIsIiRpdCIsImNvcHkiLCIkc2hvdWxkQ29udGludWUiLCIkbmV4dFZhbGlkIiwiJGlmUGFzc2VkIiwiJGN1cnJlbnRCYXNlSWQiLCJiYXNlSWQiLCIkc2NoIiwiJGNhc2VJbmRleCIsImlmIiwic3RyaWN0S2V5d29yZHMiLCJzY2hlbWFIYXNSdWxlcyIsIlJVTEVTIiwiYWxsIiwiJHdhc0NvbXBvc2l0ZSIsInRoZW4iLCJjb250aW51ZSIsInNlcXVlbmNlcyIsIkRFRkFVTFRTIiwidGltZXN0YW1wIiwiRGF0ZSIsIm5vdyIsImRhdGV0aW1lIiwidG9JU09TdHJpbmciLCJzbGljZSIsInJhbmRvbSIsIk1hdGgiLCJyYW5kb21pbnQiLCJhcmdzIiwibGltaXQiLCJtYXgiLCJmbG9vciIsInNlcSIsImNvbXBpbGUiLCJmdW5jcyIsImQiLCJmdW5jIiwiZ2V0RGVmYXVsdCIsInVzZURlZmF1bHRzIiwiZGVmIiwicmFuZ2UiLCJyZWdleHAiLCJkeW5hbWljRGVmYXVsdHMiLCJhbGxSZXF1aXJlZCIsImFueVJlcXVpcmVkIiwib25lUmVxdWlyZWQiLCJwcm9oaWJpdGVkIiwidW5pcXVlSXRlbVByb3BlcnRpZXMiLCJkZWVwUHJvcGVydGllcyIsImRlZXBSZXF1aXJlZCIsImZvcm1hdE1pbmltdW0iLCJmb3JtYXRNYXhpbXVtIiwicGF0dGVyblJlcXVpcmVkIiwic2VsZWN0IiwidHJhbnNmb3JtIiwiQ09OU1RSVUNUT1JTIiwiRnVuY3Rpb24iLCJOdW1iZXIiLCJTdHJpbmciLCJCdWZmZXIiLCJQcm9taXNlIiwiQ29uc3RydWN0b3IiLCJnZXRDb25zdHJ1Y3RvciIsImNvbnN0cnVjdG9ycyIsImMiLCJvbmVPZiIsInVuaXF1ZUl0ZW1zIiwibm90IiwibWluIiwiZXhjbHVzaXZlIiwiZXhjbHVzaXZlUmFuZ2UiLCJ2YWxpZGF0ZVJhbmdlU2NoZW1hIiwiZXhjbHVzaXZlTWluaW11bSIsImV4Y2x1c2l2ZU1heGltdW0iLCJtaW5pbXVtIiwibWF4aW11bSIsIm1pbkl0ZW1zIiwibWF4SXRlbXMiLCJwYXR0ZXJuIiwiZmxhZ3MiLCJyeCIsImUiLCJlcnJvciIsImdldFJlZ0V4cCIsImNvbXBpbGVkQ2FzZVNjaGVtYXMiLCJ2Iiwic2VsZWN0Q2FzZXMiLCJjb21waWxlZCIsImdldENvbXBpbGVkU2NoZW1hcyIsImNhc2VzIiwiZGVmYXVsdCIsInZhbGlkIiwidmFsdWUiLCJjb21waWxlT3JCb29sZWFuIiwiY3JlYXRlIiwic29tZSIsImtleXdvcmRzIiwic3dpdGNoIiwidHJpbUxlZnQiLCJ0cmltUmlnaHQiLCJ0cmltIiwidG9Mb3dlckNhc2UiLCJ0b1VwcGVyQ2FzZSIsInRvRW51bUNhc2UiLCJjZmciLCJoYXNoIiwibWFrZUhhc2hUYWJsZUtleSIsIm1vZGlmeWluZyIsImluZGV4T2YiLCJlbnVtIiwiayIsImRhdGFQYXRoIiwib2JqZWN0IiwiaiIsImwiLCJLTk9XTl9UWVBFUyIsIlNDQUxBUl9UWVBFUyIsImVxdWFsIiwic2NhbGFyIiwicHJvcFR5cGUiLCJnZXRTY2FsYXJLZXlzIiwiY29tcGlsZVNjaGVtYSIsInJlc29sdmUiLCJDYWNoZSIsIlNjaGVtYU9iamVjdCIsInN0YWJsZVN0cmluZ2lmeSIsInJ1bGVzIiwiQWp2IiwicHJvdG90eXBlIiwic2NoZW1hS2V5UmVmIiwidGhpcyIsInNjaGVtYU9iaiIsIl9hZGRTY2hlbWEiLCJfY29tcGlsZSIsIiRhc3luYyIsIl9tZXRhIiwiYWRkU2NoZW1hIiwiX3NraXBWYWxpZGF0aW9uIiwiX2dldElkIiwiY2hlY2tVbmlxdWUiLCJub3JtYWxpemVJZCIsIl9zY2hlbWFzIiwiYWRkTWV0YVNjaGVtYSIsInNraXBWYWxpZGF0aW9uIiwidmFsaWRhdGVTY2hlbWEiLCJ0aHJvd09yTG9nRXJyb3IiLCJzZWxmIiwibWV0YSIsImxvZ2dlciIsIm1lc3NhZ2UiLCJlcnJvcnNUZXh0Iiwia2V5UmVmIiwiX2dldFNjaGVtYU9iaiIsInJlZiIsImNhbGwiLCJyb290IiwiX2ZyYWdtZW50cyIsImZyYWdtZW50IiwiX2dldFNjaGVtYUZyYWdtZW50IiwicmVtb3ZlU2NoZW1hIiwiX3JlbW92ZUFsbFNjaGVtYXMiLCJfcmVmcyIsIl9jYWNoZSIsImNsZWFyIiwiZGVsIiwiY2FjaGVLZXkiLCJzZXJpYWxpemUiLCJhZGRGb3JtYXQiLCJvcHRpb25zIiwic2VwYXJhdG9yIiwiZGF0YVZhciIsInRleHQiLCJzaG91bGRBZGRTY2hlbWEiLCJjYWNoZWQiLCJhZGRVc2VkU2NoZW1hIiwicmVjdXJzaXZlTWV0YSIsIndpbGxWYWxpZGF0ZSIsImxvY2FsUmVmcyIsImlkcyIsInB1dCIsImNvbXBpbGluZyIsImNhbGxWYWxpZGF0ZSIsImN1cnJlbnRPcHRzIiwiX21ldGFPcHRzIiwicmVmcyIsInJlZlZhbCIsIl92YWxpZGF0ZSIsInJlc3VsdCIsImFwcGx5IiwiYXJndW1lbnRzIiwiY29tcGlsZUFzeW5jIiwiY3VzdG9tS2V5d29yZCIsImFkZCIsImdldEtleXdvcmQiLCJyZW1vdmVLZXl3b3JkIiwicmVtb3ZlIiwidmFsaWRhdGVLZXl3b3JkIiwiZXJyb3JDbGFzc2VzIiwiVmFsaWRhdGlvbkVycm9yIiwiVmFsaWRhdGlvbiIsIk1pc3NpbmdSZWZFcnJvciIsIk1pc3NpbmdSZWYiLCJNRVRBX0lHTk9SRV9PUFRJT05TIiwiTUVUQV9TVVBQT1JUX0RBVEEiLCJsb2ciLCJub29wIiwic2V0TG9nZ2VyIiwiY2FjaGUiLCJfbG9hZGluZ1NjaGVtYXMiLCJfY29tcGlsYXRpb25zIiwic2NoZW1hSWQiLCJfZ2V0JElkT3JJZCIsIl9nZXQkSWQiLCJjaG9vc2VHZXRJZCIsImxvb3BSZXF1aXJlZCIsIkluZmluaXR5IiwiZXJyb3JEYXRhUGF0aCIsIl9lcnJvckRhdGFQYXRoUHJvcGVydHkiLCJtZXRhT3B0cyIsImdldE1ldGFTY2hlbWFPcHRpb25zIiwiYWRkSW5pdGlhbEZvcm1hdHMiLCJhZGRJbml0aWFsS2V5d29yZHMiLCIkZGF0YVNjaGVtYSIsIiRpZCIsImFkZERlZmF1bHRNZXRhU2NoZW1hIiwibnVsbGFibGUiLCJvcHRzU2NoZW1hcyIsImFkZEluaXRpYWxTY2hlbWFzIiwicmVnZXgiLCJjYWxsYmFjayIsImxvYWRTY2hlbWEiLCJwIiwibG9hZE1ldGFTY2hlbWFPZiIsIl9jb21waWxlQXN5bmMiLCJzY2giLCJtaXNzaW5nU2NoZW1hIiwiYWRkZWQiLCJtaXNzaW5nUmVmIiwic2NoZW1hUHJvbWlzZSIsInJlbW92ZVByb21pc2UiLCJsb2FkTWlzc2luZ1NjaGVtYSIsInVybCIsImZ1bGxQYXRoIiwiZXJyb3JTdWJjbGFzcyIsIlN1YmNsYXNzIiwiY29uc3RydWN0b3IiLCJ2YWxpZGF0aW9uIiwiREFURSIsIkRBWVMiLCJIT1NUTkFNRSIsIlVSSSIsIlVSSVRFTVBMQVRFIiwiVVJMIiwiVVVJRCIsIkpTT05fUE9JTlRFUiIsIkpTT05fUE9JTlRFUl9VUklfRlJBR01FTlQiLCJSRUxBVElWRV9KU09OX1BPSU5URVIiLCJtb2RlIiwic3RyIiwibWF0Y2hlcyIsInllYXIiLCJtb250aCIsImRheSIsImlzTGVhcFllYXIiLCJmdWxsIiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsInRpbWVab25lIiwiZmFzdCIsInVyaSIsImVtYWlsIiwiaG9zdG5hbWUiLCJpcHY0IiwiaXB2NiIsInV1aWQiLCJkYXRlVGltZSIsIk5PVF9VUklfRlJBR01FTlQiLCJaX0FOQ0hPUiIsInZhbGlkYXRlR2VuZXJhdG9yIiwidWNzMmxlbmd0aCIsImNoZWNrQ29tcGlsaW5nIiwiaW5kZXgiLCJjb21wSW5kZXgiLCJlbmRDb21waWxpbmciLCJzcGxpY2UiLCJwYXR0ZXJuQ29kZSIsInBhdHRlcm5zIiwiZGVmYXVsdENvZGUiLCJyZWZWYWxDb2RlIiwiY3VzdG9tUnVsZUNvZGUiLCJ2YXJzIiwiYXJyIiwic3RhdGVtZW50IiwiY29kZSIsInBhdHRlcm5zSGFzaCIsImRlZmF1bHRzIiwiZGVmYXVsdHNIYXNoIiwiY3VzdG9tUnVsZXMiLCJjb21waWxhdGlvbiIsImxvY2FsQ29tcGlsZSIsImN2Iiwic291cmNlQ29kZSIsInNvdXJjZSIsIl9zY2hlbWEiLCJfcm9vdCIsImlzUm9vdCIsImlzVG9wIiwiZXJyb3JQYXRoIiwicmVzb2x2ZVJlZiIsInVzZURlZmF1bHQiLCJ1c2VDdXN0b21SdWxlIiwicHJvY2Vzc0NvZGUiLCJtYWtlVmFsaWRhdGUiLCJfcmVmVmFsIiwicmVmQ29kZSIsInJlZkluZGV4IiwicmVzb2x2ZWRSZWYiLCJyb290UmVmSWQiLCJhZGRMb2NhbFJlZiIsImxvY2FsU2NoZW1hIiwiaW5saW5lUmVmIiwiaW5saW5lUmVmcyIsInJlZklkIiwicmVwbGFjZUxvY2FsUmVmIiwicmVtb3ZlTG9jYWxSZWYiLCJyZWdleFN0ciIsInZhbHVlU3RyIiwicnVsZSIsImRlcHMiLCJldmVyeSIsImhhc093blByb3BlcnR5Iiwiam9pbiIsInRyYXZlcnNlIiwicmVzb2x2ZVNjaGVtYSIsInBhcnNlIiwicmVmUGF0aCIsIl9nZXRGdWxsUGF0aCIsImdldEZ1bGxQYXRoIiwicmVzb2x2ZVJlY3Vyc2l2ZSIsImdldEpzb25Qb2ludGVyIiwicGFyc2VkUmVmIiwicmVzb2x2ZVVybCIsImJhc2VJZHMiLCJmdWxsUGF0aHMiLCJhbGxLZXlzIiwianNvblB0ciIsInBhcmVudEpzb25QdHIiLCJwYXJlbnRLZXl3b3JkIiwia2V5SW5kZXgiLCJlc2NhcGVGcmFnbWVudCIsIlBSRVZFTlRfU0NPUEVfQ0hBTkdFIiwidG9IYXNoIiwicGFydHMiLCJwYXJ0IiwidW5lc2NhcGVGcmFnbWVudCIsIlNJTVBMRV9JTkxJTkVEIiwiY2hlY2tOb1JlZiIsImNvdW50S2V5cyIsIml0ZW0iLCJub3JtYWxpemUiLCJUUkFJTElOR19TTEFTSF9IQVNIIiwicnVsZU1vZHVsZXMiLCJBTEwiLCJ0eXBlcyIsImZvckVhY2giLCJncm91cCIsImltcGxLZXl3b3JkcyIsImltcGxlbWVudHMiLCIkY29tbWVudCIsImNvbmNhdCIsImN1c3RvbSIsIm9iaiIsImxlbiIsInBvcyIsImNoYXJDb2RlQXQiLCJjaGVja0RhdGFUeXBlIiwiZGF0YVR5cGUiLCJzdHJpY3ROdW1iZXJzIiwibmVnYXRlIiwiRVFVQUwiLCJBTkQiLCJPSyIsIk5PVCIsIm8iLCJ0byIsImNoZWNrRGF0YVR5cGVzIiwiZGF0YVR5cGVzIiwidCIsImFycmF5IiwibnVsbCIsIm51bWJlciIsImludGVnZXIiLCJjb2VyY2VUb1R5cGVzIiwib3B0aW9uQ29lcmNlVHlwZXMiLCJDT0VSQ0VfVE9fVFlQRVMiLCJ2YXJPY2N1cmVuY2VzIiwidmFyUmVwbGFjZSIsInNjaGVtYUhhc1J1bGVzRXhjZXB0IiwiZXhjZXB0S2V5d29yZCIsInNjaGVtYVVua25vd25SdWxlcyIsImdldFBhdGhFeHByIiwiY3VycmVudFBhdGgiLCJqc29uUG9pbnRlcnMiLCJpc051bWJlciIsImpvaW5QYXRocyIsImdldFBhdGgiLCJlc2NhcGVKc29uUG9pbnRlciIsInBhdGhzIiwidXAiLCJ1bmVzY2FwZUpzb25Qb2ludGVyIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiYSIsImIiLCJrZXl3b3Jkc0pzb25Qb2ludGVycyIsIkpTT04iLCJzdHJpbmdpZnkiLCJkZWZpbml0aW9ucyIsInNpbXBsZVR5cGVzIiwiY29uc3QiLCIkbm90T3AiLCIkZXhjbFR5cGUiLCIkZXhjbElzTnVtYmVyIiwidW5pY29kZSIsIiRhbGxTY2hlbWFzRW1wdHkiLCIkaSIsIiRub0VtcHR5U2NoZW1hIiwiJGRhdGFOeHQiLCIkbmV4dERhdGEiLCIkbm9uRW1wdHlTY2hlbWEiLCIkcGFzc0RhdGEiLCIkY29kZSIsIiRjb21waWxlIiwiJGlubGluZSIsIiRtYWNybyIsIiRydWxlVmFsaWRhdGUiLCIkdmFsaWRhdGVDb2RlIiwiJHJ1bGUiLCIkZGVmaW5pdGlvbiIsIiRyRGVmIiwiJHZhbGlkYXRlU2NoZW1hIiwiJHJ1bGVFcnJzIiwiJHJ1bGVFcnIiLCIkYXN5bmNLZXl3b3JkIiwicGFzc0NvbnRleHQiLCIkcGFyZW50RGF0YSIsIiRwYXJlbnREYXRhUHJvcGVydHkiLCJkZWZfY2FsbFJ1bGVWYWxpZGF0ZSIsImRlZl9jdXN0b21FcnJvciIsIiRzY2hlbWFEZXBzIiwiJHByb3BlcnR5RGVwcyIsIiRwcm9wZXJ0eSIsIiRkZXBzIiwiJGN1cnJlbnRFcnJvclBhdGgiLCIkcHJvcGVydHlLZXkiLCIkdXNlRGF0YSIsIiRwcm9wIiwiJHByb3BlcnR5UGF0aCIsIiRtaXNzaW5nUHJvcGVydHkiLCJhcnIyIiwiaTIiLCJsMiIsIiR2U2NoZW1hIiwiJHVua25vd25Gb3JtYXRzIiwidW5rbm93bkZvcm1hdHMiLCIkYWxsb3dVbmtub3duIiwiJGlzT2JqZWN0IiwiJGZvcm1hdFR5cGUiLCIkZm9ybWF0UmVmIiwiJHRoZW5TY2giLCIkZWxzZVNjaCIsIiR0aGVuUHJlc2VudCIsIiRlbHNlUHJlc2VudCIsIiRpZkNsYXVzZSIsImFsbE9mIiwiY29udGFpbnMiLCJtYXhMZW5ndGgiLCJtaW5MZW5ndGgiLCJtYXhQcm9wZXJ0aWVzIiwibWluUHJvcGVydGllcyIsIm11bHRpcGxlT2YiLCIkYWRkaXRpb25hbEl0ZW1zIiwiYWRkaXRpb25hbEl0ZW1zIiwiJGN1cnJFcnJTY2hlbWFQYXRoIiwibXVsdGlwbGVPZlByZWNpc2lvbiIsIiRhbGxFcnJvcnNPcHRpb24iLCIkcHJldlZhbGlkIiwiJHBhc3NpbmdTY2hlbWFzIiwiJHNjaGVtYUtleXMiLCJmaWx0ZXIiLCJub3RQcm90byIsIiRwUHJvcGVydGllcyIsInBhdHRlcm5Qcm9wZXJ0aWVzIiwiJHBQcm9wZXJ0eUtleXMiLCIkYVByb3BlcnRpZXMiLCIkc29tZVByb3BlcnRpZXMiLCIkbm9BZGRpdGlvbmFsIiwiJGFkZGl0aW9uYWxJc1NjaGVtYSIsIiRyZW1vdmVBZGRpdGlvbmFsIiwicmVtb3ZlQWRkaXRpb25hbCIsIiRjaGVja0FkZGl0aW9uYWwiLCIkcmVxdWlyZWQiLCIkcmVxdWlyZWRIYXNoIiwiJGFkZGl0aW9uYWxQcm9wZXJ0eSIsIiR1c2VEZWZhdWx0cyIsImFycjMiLCJpMyIsImwzIiwiJGhhc0RlZmF1bHQiLCJhcnI0IiwiaTQiLCJsNCIsIiRpbnZhbGlkTmFtZSIsIiRyZWZDb2RlIiwiJHJlZlZhbCIsIiRtZXNzYWdlIiwibWlzc2luZ1JlZnMiLCJfX2NhbGxWYWxpZGF0ZSIsIiRwcm9wZXJ0eVNjaCIsIiRsb29wUmVxdWlyZWQiLCIkaXRlbVR5cGUiLCIkdHlwZUlzQXJyYXkiLCIkbWV0aG9kIiwiJHJlZktleXdvcmRzIiwiJHVua25vd25Ld2QiLCIka2V5d29yZHNNc2ciLCIkdG9wIiwicm9vdElkIiwic3RyaWN0RGVmYXVsdHMiLCIkZGVmYXVsdE1zZyIsIiRjbG9zaW5nQnJhY2VzMSIsIiRjbG9zaW5nQnJhY2VzMiIsIiR0eXBlU2NoZW1hIiwiZXh0ZW5kUmVmcyIsImNvZXJjZVR5cGVzIiwiJGNvZXJjZVRvVHlwZXMiLCIkcnVsZXNHcm91cCIsIiRzaG91bGRVc2VHcm91cCIsIiRkYXRhVHlwZSIsIiRjb2VyY2VkIiwiJHR5cGUiLCJhcnI1IiwiaTUiLCJsNSIsIiRzaG91bGRVc2VSdWxlIiwiaW1wbCIsIiRydWxlSW1wbGVtZW50c1NvbWVLZXl3b3JkIiwiZGVmaW5pdGlvblNjaGVtYSIsIl9hZGRSdWxlIiwicnVsZUdyb3VwIiwicmciLCJ0aHJvd0Vycm9yIiwiX3ZhbGlkYXRlS2V5d29yZCIsImJhbGFuY2VkIiwibWF5YmVNYXRjaCIsInIiLCJzdGFydCIsImVuZCIsInByZSIsImJvZHkiLCJwb3N0IiwicmVnIiwibSIsImJlZ3MiLCJiZWciLCJsZWZ0IiwicmlnaHQiLCJhaSIsImJpIiwiYnl0ZUxlbmd0aCIsImI2NCIsImxlbnMiLCJnZXRMZW5zIiwidmFsaWRMZW4iLCJwbGFjZUhvbGRlcnNMZW4iLCJ0b0J5dGVBcnJheSIsInRtcCIsIkFyciIsIl9ieXRlTGVuZ3RoIiwiY3VyQnl0ZSIsInJldkxvb2t1cCIsImZyb21CeXRlQXJyYXkiLCJ1aW50OCIsImV4dHJhQnl0ZXMiLCJtYXhDaHVua0xlbmd0aCIsImxlbjIiLCJlbmNvZGVDaHVuayIsImxvb2t1cCIsIlVpbnQ4QXJyYXkiLCJudW0iLCJvdXRwdXQiLCJjb25jYXRNYXAiLCJzdWJzdHIiLCJleHBhbmQiLCJlc2NTbGFzaCIsImVzY09wZW4iLCJlc2NDbG9zZSIsImVzY0NvbW1hIiwiZXNjUGVyaW9kIiwiZXNjYXBlQnJhY2VzIiwidW5lc2NhcGVCcmFjZXMiLCJudW1lcmljIiwicGFyc2VJbnQiLCJwYXJzZUNvbW1hUGFydHMiLCJwb3N0UGFydHMiLCJzaGlmdCIsImVtYnJhY2UiLCJpc1BhZGRlZCIsImVsIiwibHRlIiwieSIsImd0ZSIsImV4cGFuc2lvbnMiLCJuIiwiaXNOdW1lcmljU2VxdWVuY2UiLCJpc0FscGhhU2VxdWVuY2UiLCJpc1NlcXVlbmNlIiwiaXNPcHRpb25zIiwiTiIsIngiLCJ3aWR0aCIsImluY3IiLCJhYnMiLCJwYWQiLCJmcm9tQ2hhckNvZGUiLCJuZWVkIiwieiIsImV4cGFuc2lvbiIsImFjZSIsImRlZmluZSIsImFjZXF1aXJlIiwiaXNEYXJrIiwiY3NzQ2xhc3MiLCJjc3NUZXh0IiwiaW1wb3J0Q3NzU3RyaW5nIiwiYmFzZTY0IiwiaWVlZTc1NCIsImN1c3RvbUluc3BlY3RTeW1ib2wiLCJTeW1ib2wiLCJLX01BWF9MRU5HVEgiLCJjcmVhdGVCdWZmZXIiLCJSYW5nZUVycm9yIiwiYnVmIiwic2V0UHJvdG90eXBlT2YiLCJhcmciLCJlbmNvZGluZ09yT2Zmc2V0IiwiVHlwZUVycm9yIiwiYWxsb2NVbnNhZmUiLCJmcm9tIiwic3RyaW5nIiwiZW5jb2RpbmciLCJpc0VuY29kaW5nIiwiYWN0dWFsIiwid3JpdGUiLCJmcm9tU3RyaW5nIiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJhcnJheVZpZXciLCJpc0luc3RhbmNlIiwiZnJvbUFycmF5QnVmZmVyIiwiYnVmZmVyIiwiYnl0ZU9mZnNldCIsImZyb21BcnJheUxpa2UiLCJmcm9tQXJyYXlWaWV3IiwiU2hhcmVkQXJyYXlCdWZmZXIiLCJ2YWx1ZU9mIiwiaXNCdWZmZXIiLCJjaGVja2VkIiwibnVtYmVySXNOYU4iLCJmcm9tT2JqZWN0IiwidG9QcmltaXRpdmUiLCJhc3NlcnRTaXplIiwic2l6ZSIsInRvU3RyaW5nIiwibXVzdE1hdGNoIiwibG93ZXJlZENhc2UiLCJ1dGY4VG9CeXRlcyIsImJhc2U2NFRvQnl0ZXMiLCJzbG93VG9TdHJpbmciLCJoZXhTbGljZSIsInV0ZjhTbGljZSIsImFzY2lpU2xpY2UiLCJsYXRpbjFTbGljZSIsImJhc2U2NFNsaWNlIiwidXRmMTZsZVNsaWNlIiwic3dhcCIsImJpZGlyZWN0aW9uYWxJbmRleE9mIiwidmFsIiwiZGlyIiwiYXJyYXlJbmRleE9mIiwibGFzdEluZGV4T2YiLCJpbmRleFNpemUiLCJhcnJMZW5ndGgiLCJ2YWxMZW5ndGgiLCJyZWFkIiwicmVhZFVJbnQxNkJFIiwiZm91bmRJbmRleCIsImZvdW5kIiwiaGV4V3JpdGUiLCJvZmZzZXQiLCJyZW1haW5pbmciLCJzdHJMZW4iLCJwYXJzZWQiLCJ1dGY4V3JpdGUiLCJibGl0QnVmZmVyIiwiYXNjaWlXcml0ZSIsImJ5dGVBcnJheSIsImFzY2lpVG9CeXRlcyIsImJhc2U2NFdyaXRlIiwidWNzMldyaXRlIiwidW5pdHMiLCJoaSIsImxvIiwidXRmMTZsZVRvQnl0ZXMiLCJmaXJzdEJ5dGUiLCJjb2RlUG9pbnQiLCJieXRlc1BlclNlcXVlbmNlIiwic2Vjb25kQnl0ZSIsInRoaXJkQnl0ZSIsImZvdXJ0aEJ5dGUiLCJ0ZW1wQ29kZVBvaW50IiwiY29kZVBvaW50cyIsIk1BWF9BUkdVTUVOVFNfTEVOR1RIIiwiZGVjb2RlQ29kZVBvaW50c0FycmF5IiwiVFlQRURfQVJSQVlfU1VQUE9SVCIsInByb3RvIiwiZm9vIiwidHlwZWRBcnJheVN1cHBvcnQiLCJkZWZpbmVQcm9wZXJ0eSIsImVudW1lcmFibGUiLCJwb29sU2l6ZSIsImFsbG9jIiwiZmlsbCIsImFsbG9jVW5zYWZlU2xvdyIsIl9pc0J1ZmZlciIsImxpc3QiLCJzZXQiLCJzd2FwMTYiLCJzd2FwMzIiLCJzd2FwNjQiLCJ0b0xvY2FsZVN0cmluZyIsImVxdWFscyIsImluc3BlY3QiLCJ0YXJnZXQiLCJ0aGlzU3RhcnQiLCJ0aGlzRW5kIiwidGhpc0NvcHkiLCJ0YXJnZXRDb3B5IiwiaW5jbHVkZXMiLCJpc0Zpbml0ZSIsInRvSlNPTiIsIl9hcnIiLCJyZXQiLCJoZXhTbGljZUxvb2t1cFRhYmxlIiwiYnl0ZXMiLCJjaGVja09mZnNldCIsImV4dCIsImNoZWNrSW50Iiwid3J0QmlnVUludDY0TEUiLCJjaGVja0ludEJJIiwiQmlnSW50Iiwid3J0QmlnVUludDY0QkUiLCJjaGVja0lFRUU3NTQiLCJ3cml0ZUZsb2F0IiwibGl0dGxlRW5kaWFuIiwibm9Bc3NlcnQiLCJ3cml0ZURvdWJsZSIsIm5ld0J1ZiIsInN1YmFycmF5IiwicmVhZFVpbnRMRSIsInJlYWRVSW50TEUiLCJtdWwiLCJyZWFkVWludEJFIiwicmVhZFVJbnRCRSIsInJlYWRVaW50OCIsInJlYWRVSW50OCIsInJlYWRVaW50MTZMRSIsInJlYWRVSW50MTZMRSIsInJlYWRVaW50MTZCRSIsInJlYWRVaW50MzJMRSIsInJlYWRVSW50MzJMRSIsInJlYWRVaW50MzJCRSIsInJlYWRVSW50MzJCRSIsInJlYWRCaWdVSW50NjRMRSIsImRlZmluZUJpZ0ludE1ldGhvZCIsInZhbGlkYXRlTnVtYmVyIiwiZmlyc3QiLCJsYXN0IiwiYm91bmRzRXJyb3IiLCJyZWFkQmlnVUludDY0QkUiLCJyZWFkSW50TEUiLCJwb3ciLCJyZWFkSW50QkUiLCJyZWFkSW50OCIsInJlYWRJbnQxNkxFIiwicmVhZEludDE2QkUiLCJyZWFkSW50MzJMRSIsInJlYWRJbnQzMkJFIiwicmVhZEJpZ0ludDY0TEUiLCJyZWFkQmlnSW50NjRCRSIsInJlYWRGbG9hdExFIiwicmVhZEZsb2F0QkUiLCJyZWFkRG91YmxlTEUiLCJyZWFkRG91YmxlQkUiLCJ3cml0ZVVpbnRMRSIsIndyaXRlVUludExFIiwid3JpdGVVaW50QkUiLCJ3cml0ZVVJbnRCRSIsIndyaXRlVWludDgiLCJ3cml0ZVVJbnQ4Iiwid3JpdGVVaW50MTZMRSIsIndyaXRlVUludDE2TEUiLCJ3cml0ZVVpbnQxNkJFIiwid3JpdGVVSW50MTZCRSIsIndyaXRlVWludDMyTEUiLCJ3cml0ZVVJbnQzMkxFIiwid3JpdGVVaW50MzJCRSIsIndyaXRlVUludDMyQkUiLCJ3cml0ZUJpZ1VJbnQ2NExFIiwid3JpdGVCaWdVSW50NjRCRSIsIndyaXRlSW50TEUiLCJzdWIiLCJ3cml0ZUludEJFIiwid3JpdGVJbnQ4Iiwid3JpdGVJbnQxNkxFIiwid3JpdGVJbnQxNkJFIiwid3JpdGVJbnQzMkxFIiwid3JpdGVJbnQzMkJFIiwid3JpdGVCaWdJbnQ2NExFIiwid3JpdGVCaWdJbnQ2NEJFIiwid3JpdGVGbG9hdExFIiwid3JpdGVGbG9hdEJFIiwid3JpdGVEb3VibGVMRSIsIndyaXRlRG91YmxlQkUiLCJ0YXJnZXRTdGFydCIsImNvcHlXaXRoaW4iLCJFIiwic3ltIiwiZ2V0TWVzc2FnZSIsIkJhc2UiLCJzdXBlciIsIndyaXRhYmxlIiwiY29uZmlndXJhYmxlIiwic3RhY2siLCJhZGROdW1lcmljYWxTZXBhcmF0b3IiLCJFUlJfT1VUX09GX1JBTkdFIiwiY2hlY2tCb3VuZHMiLCJFUlJfSU5WQUxJRF9BUkdfVFlQRSIsIkVSUl9CVUZGRVJfT1VUX09GX0JPVU5EUyIsImlucHV0IiwibXNnIiwicmVjZWl2ZWQiLCJpc0ludGVnZXIiLCJJTlZBTElEX0JBU0U2NF9SRSIsImxlYWRTdXJyb2dhdGUiLCJiYXNlNjRjbGVhbiIsInNyYyIsImRzdCIsImFscGhhYmV0IiwidGFibGUiLCJpMTYiLCJmbiIsIkJ1ZmZlckJpZ0ludE5vdERlZmluZWQiLCJ4cyIsImNzc1dpdGhNYXBwaW5nVG9TdHJpbmciLCJjb250ZW50IiwibmVlZExheWVyIiwibW9kdWxlcyIsIm1lZGlhIiwiZGVkdXBlIiwic3VwcG9ydHMiLCJsYXllciIsImFscmVhZHlJbXBvcnRlZE1vZHVsZXMiLCJfayIsImNzc01hcHBpbmciLCJidG9hIiwidW5lc2NhcGUiLCJzb3VyY2VNYXBwaW5nIiwicHJvbWlzaWZ5IiwiY3VzdG9tQXJndW1lbnRzVG9rZW4iLCJmIiwiZyIsImgiLCJhcmd1bWVudE5hbWVzIiwiY21wIiwiY3ljbGVzIiwibm9kZSIsImFvYmoiLCJib2JqIiwic2VlbiIsInNlZW5JbmRleCIsInNvcnQiLCJwcm9jZXNzIiwibmV4dFRpY2siLCJzZXRJbW1lZGlhdGUiLCJzZXRUaW1lb3V0IiwiZWFjaFNlcmllcyIsIml0ZXJhdG9yIiwiY29tcGxldGVkIiwiaXRlcmF0ZSIsImVyciIsImZvckVhY2hTZXJpZXMiLCJFdmVudEVtaXR0ZXIiLCJjcmVhdGVJbnRlcmZhY2UiLCJzcGFjZSIsIm1ldGhvZHMiLCJyZW1vdmVJdGVtIiwib2ZmIiwicHZ0IiwiX29uIiwib24iLCJfb2ZmIiwiX3RyaWdnZXIiLCJ0cmlnZ2VyIiwicHViIiwidW5zaGlmdCIsInJlbW92ZUFsbExpc3RlbmVycyIsImd1aWQiLCJ0aHJvdHRsZSIsImRlbGF5IiwibG9jYWxTdG9yYWdlIiwid2luZG93IiwiZ2V0SXRlbSIsInNldEl0ZW0iLCJJbnRlcmNvbSIsIm9yaWdpbiIsImxhc3RNZXNzYWdlIiwicmVjZWl2ZWRJRHMiLCJwcmV2aW91c1ZhbHVlcyIsInN0b3JhZ2VIYW5kbGVyIiwiX29uU3RvcmFnZUV2ZW50IiwiZG9jdW1lbnQiLCJhdHRhY2hFdmVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJfdHJhbnNhY3Rpb24iLCJleGVjdXRlZCIsImxpc3RlbmluZyIsIndhaXRUaW1lciIsImxvY2siLCJhY3RpdmVMb2NrIiwiSU5ERVhfTE9DSyIsImNsZWFyVGltZW91dCIsIl9jbGVhbnVwX2VtaXQiLCJ0aHJlc2hvbGQiLCJUSFJFU0hPTERfVFRMX0VNSVQiLCJjaGFuZ2VkIiwiSU5ERVhfRU1JVCIsIl9jbGVhbnVwX29uY2UiLCJJTkRFWF9PTkNFIiwiX29uY2VfZXhwaXJlZCIsInR0bCIsIlRIUkVTSE9MRF9UVExfT05DRSIsIl9sb2NhbFN0b3JhZ2VDaGFuZ2VkIiwiZXZlbnQiLCJmaWVsZCIsImN1cnJlbnRWYWx1ZSIsInBheWxvYWQiLCJfZW1pdCIsInBhY2tldCIsImRlbGltaXRlciIsInN1YnN0cmluZyIsImVtaXQiLCJvbmNlIiwic3VwcG9ydGVkIiwiZXh0ZW5kIiwiaW50ZXJjb20iLCJkZXN0cm95IiwiZ2V0SW5zdGFuY2UiLCJGaWxlU3lzdGVtIiwiUHJvdmlkZXIiLCJwcm92aWRlciIsIm9uRnNSZWFkeSIsIm9uRnNFcnJvciIsImZzUmVhZHkiLCJyZWplY3QiLCJmc0luc3RhbmNlIiwicHJveHlIYXNQcm9wIiwiZnNQcm9taXNlcyIsIlByb3h5IiwicHJvbWlzZXMiLCJmcyIsInBhdGgiLCJEZWZhdWx0IiwiT19SRUFEIiwiT19XUklURSIsIk9fQ1JFQVRFIiwiT19FWENMVVNJVkUiLCJPX1RSVU5DQVRFIiwiT19BUFBFTkQiLCJGSUxFX1NZU1RFTV9OQU1FIiwiRklMRV9TVE9SRV9OQU1FIiwiSURCX1JPIiwiSURCX1JXIiwiV1NRTF9WRVJTSU9OIiwiV1NRTF9TSVpFIiwiV1NRTF9ERVNDIiwiTk9ERV9UWVBFX0ZJTEUiLCJOT0RFX1RZUEVfRElSRUNUT1JZIiwiTk9ERV9UWVBFX1NZTUJPTElDX0xJTksiLCJOT0RFX1RZUEVfTUVUQSIsIkRFRkFVTFRfRElSX1BFUk1JU1NJT05TIiwiREVGQVVMVF9GSUxFX1BFUk1JU1NJT05TIiwiRlVMTF9SRUFEX1dSSVRFX0VYRUNfUEVSTUlTU0lPTlMiLCJSRUFEX1dSSVRFX1BFUk1JU1NJT05TIiwiU1lNTE9PUF9NQVgiLCJCSU5BUllfTUlNRV9UWVBFIiwiSlNPTl9NSU1FX1RZUEUiLCJST09UX0RJUkVDVE9SWV9OQU1FIiwiRlNfRk9STUFUIiwiRlNfTk9DVElNRSIsIkZTX05PTVRJTUUiLCJGU19OT0RVUEVJRENIRUNLIiwiT19GTEFHUyIsIlhBVFRSX0NSRUFURSIsIlhBVFRSX1JFUExBQ0UiLCJGU19SRUFEWSIsIkZTX1BFTkRJTkciLCJGU19FUlJPUiIsIlNVUEVSX05PREVfSUQiLCJTVERJTiIsIlNURE9VVCIsIlNUREVSUiIsIkZJUlNUX0RFU0NSSVBUT1IiLCJFTlZJUk9OTUVOVCIsIlRNUCIsIlBBVEgiLCJmc0NvbnN0YW50cyIsIk9fUkRPTkxZIiwiT19XUk9OTFkiLCJPX1JEV1IiLCJTX0lGTVQiLCJTX0lGUkVHIiwiU19JRkRJUiIsIlNfSUZDSFIiLCJTX0lGQkxLIiwiU19JRklGTyIsIlNfSUZMTksiLCJTX0lGU09DSyIsIk9fQ1JFQVQiLCJPX0VYQ0wiLCJPX05PQ1RUWSIsIk9fVFJVTkMiLCJPX0RJUkVDVE9SWSIsIk9fTk9GT0xMT1ciLCJPX1NZTkMiLCJPX0RTWU5DIiwiT19TWU1MSU5LIiwiT19OT05CTE9DSyIsIlNfSVJXWFUiLCJTX0lSVVNSIiwiU19JV1VTUiIsIlNfSVhVU1IiLCJTX0lSV1hHIiwiU19JUkdSUCIsIlNfSVdHUlAiLCJTX0lYR1JQIiwiU19JUldYTyIsIlNfSVJPVEgiLCJTX0lXT1RIIiwiU19JWE9USCIsIkZfT0siLCJSX09LIiwiV19PSyIsIlhfT0siLCJVVl9GU19DT1BZRklMRV9FWENMIiwiQ09QWUZJTEVfRVhDTCIsIlN0YXRzIiwiRGlyZW50IiwiZmlsZU5vZGUiLCJkZXZOYW1lIiwiZXJybm8iLCJlcnJOYW1lIiwiZGVmYXVsdE1lc3NhZ2UiLCJGaWxlckVycm9yIiwicGF0aEluZm8iLCJQYXRoIiwiZGlybmFtZSIsImJhc2VuYW1lIiwiaXNBYnNvbHV0ZVBhdGgiLCJpc0Fic29sdXRlIiwic2hhcmVkIiwiQ29uc3RhbnRzIiwiRXJyb3JzIiwiRGlyZWN0b3J5RW50cnkiLCJvcGVuRmlsZXMiLCJPcGVuRmlsZURlc2NyaXB0aW9uIiwiU3VwZXJOb2RlIiwiTm9kZSIsInVwZGF0ZV9ub2RlX3RpbWVzIiwiY29udGV4dCIsInRpbWVzIiwiY3RpbWUiLCJtdGltZSIsInVwZGF0ZSIsImNvbXBsZXRlIiwiY2hhbmdlcyIsImF0aW1lIiwicHV0T2JqZWN0IiwiZmluZF9ub2RlIiwiRU5PRU5UIiwicGFyZW50UGF0aCIsImZvbGxvd2VkQ291bnQiLCJyZWFkX3Jvb3RfZGlyZWN0b3J5X25vZGUiLCJub2RlRGF0YSIsInN1cGVyTm9kZSIsInJub2RlIiwiZ2V0T2JqZWN0IiwiY2hlY2tfcm9vdF9kaXJlY3Rvcnlfbm9kZSIsIkVGSUxFU1lTVEVNRVJST1IiLCJyb290RGlyZWN0b3J5Tm9kZSIsInJlYWRfcGFyZW50X2RpcmVjdG9yeV9kYXRhIiwicGFyZW50RGlyZWN0b3J5Tm9kZSIsImdldF9ub2RlX2Zyb21fcGFyZW50X2RpcmVjdG9yeV9kYXRhIiwiRU5PVERJUiIsInBhcmVudERpcmVjdG9yeURhdGEiLCJub2RlSWQiLCJjcmVhdGVfbm9kZSIsImlzX3N5bWJvbGljX2xpbmsiLCJFTE9PUCIsInNldF9leHRlbmRlZF9hdHRyaWJ1dGUiLCJmbGFnIiwieGF0dHJzIiwiRUVYSVNUIiwiRU5PQVRUUiIsIm1ha2VfZGlyZWN0b3J5IiwiZGlyZWN0b3J5Tm9kZSIsImRpcmVjdG9yeURhdGEiLCJ3cml0ZV9kaXJlY3Rvcnlfbm9kZSIsIm5saW5rcyIsIndyaXRlX2RpcmVjdG9yeV9kYXRhIiwidXBkYXRlX3BhcmVudF9kaXJlY3RvcnlfZGF0YSIsInVwZGF0ZV90aW1lIiwicmVtb3ZlX2RpcmVjdG9yeSIsImNoZWNrX2lmX25vZGVfZXhpc3RzIiwiRUJVU1kiLCJjaGVja19pZl9ub2RlX2lzX2RpcmVjdG9yeSIsImNoZWNrX2lmX2RpcmVjdG9yeV9pc19lbXB0eSIsIkVOT1RFTVBUWSIsInJlbW92ZV9kaXJlY3Rvcnlfbm9kZSIsImRlbGV0ZSIsInJlbW92ZV9kaXJlY3RvcnlfZGF0YSIsIm9wZW5fZmlsZSIsImRpcmVjdG9yeUVudHJ5IiwiZmlsZURhdGEiLCJyZWFkX2RpcmVjdG9yeV9kYXRhIiwiY2hlY2tfaWZfZmlsZV9leGlzdHMiLCJFSVNESVIiLCJjaGVja19pZl9zeW1ib2xpY19saW5rIiwid3JpdGVfZmlsZV9kYXRhIiwic2V0X2ZpbGVfbm9kZSIsInB1dEJ1ZmZlciIsInVwZGF0ZV9kaXJlY3RvcnlfZGF0YSIsImhhbmRsZV91cGRhdGVfcmVzdWx0Iiwid3JpdGVfZGF0YSIsIm9mZCIsInBvc2l0aW9uIiwicmV0dXJuX25ieXRlcyIsInVwZGF0ZV9maWxlX25vZGUiLCJ1cGRhdGVfZmlsZV9kYXRhIiwiRUlPIiwiX3Bvc2l0aW9uIiwibmV3U2l6ZSIsIm5ld0RhdGEiLCJ2ZXJzaW9uIiwiZ2V0QnVmZmVyIiwicmVhZF9kYXRhIiwiaGFuZGxlX2ZpbGVfZGF0YSIsImZzdGF0X2ZpbGUiLCJnZXROb2RlIiwibHN0YXRfZmlsZSIsImxpbmtfbm9kZSIsIm9sZHBhdGgiLCJuZXdwYXRoIiwib2xkbmFtZSIsIm9sZFBhcmVudFBhdGgiLCJvbGREaXJlY3RvcnlOb2RlIiwib2xkRGlyZWN0b3J5RGF0YSIsIm5ld0RpcmVjdG9yeU5vZGUiLCJuZXdEaXJlY3RvcnlEYXRhIiwiZmlsZU5vZGVJRCIsIm5ld25hbWUiLCJuZXdQYXJlbnRQYXRoIiwicmVhZF9maWxlX25vZGUiLCJjaGVja19pZl9uZXdfZmlsZV9leGlzdHMiLCJyZWFkX25ld19kaXJlY3RvcnlfZGF0YSIsImNoZWNrX2lmX29sZF9maWxlX2V4aXN0cyIsIkVQRVJNIiwidW5saW5rX25vZGUiLCJkZWxldGVfZmlsZV9kYXRhIiwidmFsaWRhdGVfZmxhZ3MiLCJ2YWxpZGF0ZV9maWxlX29wdGlvbnMiLCJlbmMiLCJmaWxlTW9kZSIsInN0YXQiLCJzdGF0X2ZpbGUiLCJzdGF0cyIsInZhbGlkYXRlSW50ZWdlciIsIkVJTlZBTCIsIm9jdGFsUmVnIiwiaXNVaW50MzIiLCJ2YWxpZGF0ZUFuZE1hc2tNb2RlIiwidG9Vbml4VGltZXN0YW1wIiwiZ2V0VGltZSIsImFwcGVuZEZpbGUiLCJmZCIsImFsbG9jRGVzY3JpcHRvciIsInJlbGVhc2VEZXNjcmlwdG9yIiwiYWNjZXNzIiwic3RfbW9kZSIsIkVBQ0NFUyIsImFjY2Vzc19maWxlIiwiY2hvd24iLCJ1aWQiLCJnaWQiLCJjaG93bl9maWxlIiwiY2htb2QiLCJjaG1vZF9maWxlIiwiY2xvc2UiLCJnZXRPcGVuRmlsZURlc2NyaXB0aW9uIiwiRUJBREYiLCJlbnN1cmVSb290RGlyZWN0b3J5IiwiZXhpc3RpbmdOb2RlIiwiZXhpc3RzIiwiZmNob3duIiwiZmNob3duX2ZpbGUiLCJmY2htb2QiLCJmY2htb2RfZmlsZSIsImZnZXR4YXR0ciIsImZnZXR4YXR0cl9maWxlIiwiZnJlbW92ZXhhdHRyIiwiZnJlbW92ZXhhdHRyX2ZpbGUiLCJmc2V0eGF0dHIiLCJmc2V0eGF0dHJfZmlsZSIsImZzdGF0IiwiZnN5bmMiLCJmdHJ1bmNhdGUiLCJ0cnVuY2F0ZV9maWxlX2RhdGEiLCJmdHJ1bmNhdGVfZmlsZSIsImZ1dGltZXMiLCJjdXJyZW50VGltZSIsImZ1dGltZXNfZmlsZSIsImdldHhhdHRyIiwiZ2V0eGF0dHJfZmlsZSIsImxpbmsiLCJsc2VlayIsIndoZW5jZSIsImxzdGF0IiwibWtkaXIiLCJta2R0ZW1wIiwicHJlZml4IiwicmFuZG9tQ2hhcnMiLCJta25vZCIsInBhcmVudE5vZGUiLCJwYXJlbnROb2RlRGF0YSIsInVwZGF0ZV9wYXJlbnRfbm9kZV9kYXRhIiwibWFrZV9ub2RlIiwib3BlbiIsIm9wZW5GaWxlRGVzY3JpcHRpb24iLCJyZWFkZGlyIiwiaGFuZGxlX2RpcmVjdG9yeV9kYXRhIiwiZmlsZXMiLCJmaWxlQnVmZmVycyIsImZpbGUiLCJmaWxlQnVmZmVyIiwid2l0aEZpbGVUeXBlcyIsImRpckVudHMiLCJmaWxlbmFtZSIsImZpbGVwYXRoIiwiZ2V0X2Rpcl9lbnRyeSIsImRpckVudCIsInZhbGlkYXRlX2RpcmVjdG9yeV9vcHRpb25zIiwicmVhZF9kaXJlY3RvcnkiLCJieXRlc1JlYWQiLCJyZWFkRmlsZSIsImNsZWFudXAiLCJmc3RhdFJlc3VsdCIsImlzRGlyZWN0b3J5IiwicmVhZGxpbmsiLCJjaGVja19pZl9zeW1ib2xpYyIsInN5bWxpbmtfcmVscGF0aCIsInJlYWRfbGluayIsInJlbW92ZXhhdHRyIiwicmVtb3ZleGF0dHJfZmlsZSIsInJlbmFtZSIsIm9sZFBhcmVudERpcmVjdG9yeSIsIm9sZFBhcmVudERhdGEiLCJuZXdQYXJlbnREaXJlY3RvcnkiLCJuZXdQYXJlbnREYXRhIiwib2xkTmFtZSIsIm5ld05hbWUiLCJ1cGRhdGVfdGltZXMiLCJyZWFkX25ld19kaXJlY3RvcnkiLCJ1cGRhdGVfb2xkX3BhcmVudF9kaXJlY3RvcnlfZGF0YSIsInVwZGF0ZV9uZXdfcGFyZW50X2RpcmVjdG9yeV9kYXRhIiwiY2hlY2tfaWZfbmV3X2RpcmVjdG9yeV9leGlzdHMiLCJyZWFkX25ld19wYXJlbnRfZGlyZWN0b3J5X2RhdGEiLCJnZXRfbmV3X3BhcmVudF9kaXJlY3RvcnkiLCJ1bmxpbmtfb2xkX2ZpbGUiLCJybWRpciIsInNldHhhdHRyIiwic2V0eGF0dHJfZmlsZSIsInN5bWxpbmsiLCJzcmNwYXRoIiwiZHN0cGF0aCIsIm1ha2Vfc3ltYm9saWNfbGluayIsInRydW5jYXRlIiwidHJ1bmNhdGVfZmlsZSIsInVubGluayIsInV0aW1lcyIsInV0aW1lc19maWxlIiwid3JpdGVGaWxlIiwicmVwbGFjZV9kYXRhIiwicHJvdmlkZXJzIiwiU2hlbGwiLCJGU1dhdGNoZXIiLCJub3AiLCJkZWZhdWx0R3VpZEZuIiwiZGVmYXVsdENhbGxiYWNrIiwicHJvY2Vzc1BhdGhBcmciLCJpZHgiLCJhbGxvd1JlbGF0aXZlIiwiYnVmZmVyT3JQYXRoIiwiZmlsZVVSTE9yUGF0aCIsInByb3RvY29sIiwicGF0aG5hbWUiLCJ0aGlyZCIsImNvZGVQb2ludEF0IiwidG9QYXRoSWZGaWxlVVJMIiwiaXNOdWxsIiwidmFsaWRhdGVQYXRoIiwiZm9yY2VGb3JtYXR0aW5nIiwicmVhZHlTdGF0ZSIsInN0ZGluIiwic3Rkb3V0Iiwic3RkZXJyIiwiY29uc3RhbnRzIiwiYmluZCIsInF1ZXVlIiwid3JhcHBlZEd1aWRGbiIsImd1aWRXaXRoQ2hlY2siLCJxdWV1ZU9yUnVuIiwib3BlcmF0aW9uIiwid2F0Y2giLCJsaXN0ZW5lciIsIndhdGNoZXIiLCJyZWN1cnNpdmUiLCJ3cmFwcGVkQ29udGV4dCIsIm1ldGhvZE5hbWUiLCJjaGFuZ2UiLCJicm9hZGNhc3RDaGFuZ2VzIiwib3BlblJlYWRXcml0ZUNvbnRleHQiLCJvcGVuUmVhZE9ubHlDb250ZXh0IiwiZ2V0UmVhZFdyaXRlQ29udGV4dCIsImFic1BhdGhBcmdzIiwicmVsUGF0aEFyZ3MiLCJtZXRob2QiLCJzaG91bGRQcm9taXNpZnkiLCJsYXN0QXJnSW5kZXgiLCJtaXNzaW5nQ2FsbGJhY2siLCJtYXliZUNhbGxiYWNrIiwicGF0aEFyZyIsImZuQXJncyIsInJlY3Vyc2l2ZVBhdGhQcmVmaXgiLCJvbmNoYW5nZSIsImZpbGVuYW1lXyIsInBlcnNpc3RlbnRfIiwicmVjdXJzaXZlXyIsIkZpbGVyIiwiRmlsZXJXZWJwYWNrUGx1Z2luIiwiZW5zdXJlSUQiLCJnZW5lcmF0ZU1vZGUiLCJub2RlVHlwZSIsIm1vZGVQZXJtaXNzaW9ucyIsInBlcm1pc3Npb25zIiwiZ2V0RW1wdHlEZXNjcmlwdG9yIiwiY3dkIiwibm9kZVBhdGgiLCJmaWxlclBhdGgiLCJhc3NpZ24iLCJyZW1vdmVUcmFpbGluZyIsImFkZFRyYWlsaW5nIiwiSW5kZXhlZERCIiwiTWVtb3J5IiwiSW5kZXhlZERCQ29udGV4dCIsImRiIiwiX2dldE9iamVjdFN0b3JlIiwib2JqZWN0U3RvcmUiLCJ0cmFuc2FjdGlvbiIsInJlcXVlc3QiLCJvbnN1Y2Nlc3MiLCJvbmVycm9yIiwicHJldmVudERlZmF1bHQiLCJfZ2V0IiwiYXJyYXlCdWZmZXIiLCJfcHV0IiwidWludDhCYWNrZWRCdWZmZXIiLCJpc1N1cHBvcnRlZCIsImluZGV4ZWREQiIsIm1vekluZGV4ZWREQiIsIndlYmtpdEluZGV4ZWREQiIsIm1zSW5kZXhlZERCIiwidGhhdCIsIm9wZW5SZXF1ZXN0Iiwib251cGdyYWRlbmVlZGVkIiwib2JqZWN0U3RvcmVOYW1lcyIsImRlbGV0ZU9iamVjdFN0b3JlIiwiY3JlYXRlT2JqZWN0U3RvcmUiLCJnZXRSZWFkT25seUNvbnRleHQiLCJwb29sIiwiYXN5bmNDYWxsYmFjayIsImNyZWF0ZURCIiwiTWVtb3J5Q29udGV4dCIsInJlYWRPbmx5IiwiZ2VuZXJhdGVSYW5kb20iLCJ0ZW1wbGF0ZSIsInJlcGVhdCIsImVudiIsIkVudmlyb25tZW50IiwibWluaW1hdGNoIiwiY2QiLCJwd2QiLCJleGVjIiwiY21kIiwidG91Y2giLCJ1cGRhdGVPbmx5IiwiY3JlYXRlRmlsZSIsInVwZGF0ZVRpbWVzIiwiY2F0Iiwic2giLCJscyIsImVudHJpZXMiLCJlbnRyeSIsImNvbnRlbnRzIiwicm0iLCJ0ZW1wRGlyIiwibWtkaXJwIiwiX21rZGlycCIsImlzRmlsZSIsInBhcmVudCIsImZpbmQiLCJuZXh0IiwibWF5YmVQcm9jZXNzUGF0aCIsInJhd1BhdGgiLCJwcm9jZXNzUGF0aCIsIndhbGsiLCJkYXRlRnJvbU1zIiwibXMiLCJkZXYiLCJhdGltZU1zIiwibXRpbWVNcyIsImN0aW1lTXMiLCJpc1N5bWJvbGljTGluayIsImlzU29ja2V0IiwiaXNGSUZPIiwiaXNDaGFyYWN0ZXJEZXZpY2UiLCJpc0Jsb2NrRGV2aWNlIiwidXRpbHMiLCJQTFVHSU5fTkFNRSIsIk9QVElPTlNfU0NIRU1BIiwiT1BUSU9OU19QUk9DRVNTT1JTIiwidmFsaWRhdGVPcHRpb25zIiwicHJvY2Vzc09wdGlvbnMiLCJjb21waWxlciIsImhvb2tzIiwibm9ybWFsTW9kdWxlRmFjdG9yeSIsInRhcCIsImZhY3RvcnkiLCJyZXNvbHZlRGF0YSIsInNoaW1zRGlyIiwicmVzb2x2ZUZzUHJvdmlkZXIiLCJzdGFydHNXaXRoIiwiZmlsZXJEaXIiLCJzaGltRnMiLCJhcHBseUZzU2hpbSIsInNoaW1QYXRoIiwiYXBwbHlQYXRoU2hpbSIsImZzUHJvdmlkZXIiLCJmc1Byb3ZpZGVyRGlyIiwiUk9PVF9ESVJfVEFHIiwiQ1dEIiwicHJvY2Vzc29ycyIsInByb2Nlc3NlZE9wdGlvbnMiLCJwcm9wZXJ0eSIsInByb2Nlc3NvciIsImlzTEUiLCJtTGVuIiwibkJ5dGVzIiwiZUxlbiIsImVNYXgiLCJlQmlhcyIsIm5CaXRzIiwicyIsIk5hTiIsInJ0IiwiaXNOYU4iLCJMTjIiLCJjYiIsIl90cmF2ZXJzZSIsImFycmF5S2V5d29yZHMiLCJwcm9wc0tleXdvcmRzIiwic2tpcEtleXdvcmRzIiwiTWluaW1hdGNoIiwic2VwIiwiR0xPQlNUQVIiLCJwbFR5cGVzIiwicW1hcmsiLCJzdGFyIiwicmVTcGVjaWFscyIsInJlZHVjZSIsInNsYXNoU3BsaXQiLCJhc3NlcnRWYWxpZFBhdHRlcm4iLCJub2NvbW1lbnQiLCJjaGFyQXQiLCJhbGxvd1dpbmRvd3NFc2NhcGUiLCJjb21tZW50IiwiZW1wdHkiLCJwYXJ0aWFsIiwibWFrZSIsImJyYWNlRXhwYW5kIiwibm9icmFjZSIsIm9yaWciLCJtYWtlUmUiLCJkZWJ1ZyIsInBhcnNlTmVnYXRlIiwiZ2xvYlNldCIsImdsb2JQYXJ0cyIsInNpIiwibmVnYXRlT2Zmc2V0Iiwibm9uZWdhdGUiLCJpc1N1YiIsIm5vZ2xvYnN0YXIiLCJzdGF0ZUNoYXIiLCJyZSIsImhhc01hZ2ljIiwibm9jYXNlIiwiZXNjYXBpbmciLCJwYXR0ZXJuTGlzdFN0YWNrIiwibmVnYXRpdmVMaXN0cyIsImluQ2xhc3MiLCJyZUNsYXNzU3RhcnQiLCJjbGFzc1N0YXJ0IiwicGF0dGVyblN0YXJ0IiwiZG90IiwiY2xlYXJTdGF0ZUNoYXIiLCJub2V4dCIsInJlU3RhcnQiLCJwbCIsInJlRW5kIiwiY3MiLCJlciIsInNwIiwiU1VCUEFSU0UiLCJ0YWlsIiwiXyIsIiQxIiwiJDIiLCJhZGRQYXR0ZXJuU3RhcnQiLCJubCIsIm5sQmVmb3JlIiwibmxGaXJzdCIsIm5sTGFzdCIsIm5sQWZ0ZXIiLCJvcGVuUGFyZW5zQmVmb3JlIiwiY2xlYW5BZnRlciIsImRvbGxhciIsInJlZ0V4cCIsIl9nbG9iIiwiX3NyYyIsInR3b1N0YXIiLCJleCIsIm1tIiwibm9udWxsIiwibWF0Y2hCYXNlIiwibWF0Y2hPbmUiLCJmbGlwTmVnYXRlIiwiZmkiLCJwaSIsImZsIiwiaGl0IiwiZnIiLCJwciIsInN3YWxsb3dlZSIsImFzc2VydFBhdGgiLCJub3JtYWxpemVTdHJpbmdQb3NpeCIsImFsbG93QWJvdmVSb290IiwibGFzdFNlZ21lbnRMZW5ndGgiLCJsYXN0U2xhc2giLCJkb3RzIiwibGFzdFNsYXNoSW5kZXgiLCJwb3NpeCIsInJlc29sdmVkUGF0aCIsInJlc29sdmVkQWJzb2x1dGUiLCJ0cmFpbGluZ1NlcGFyYXRvciIsImpvaW5lZCIsInJlbGF0aXZlIiwiZnJvbVN0YXJ0IiwiZnJvbUVuZCIsImZyb21MZW4iLCJ0b1N0YXJ0IiwidG9MZW4iLCJsYXN0Q29tbW9uU2VwIiwiZnJvbUNvZGUiLCJfbWFrZUxvbmciLCJoYXNSb290IiwibWF0Y2hlZFNsYXNoIiwiZXh0SWR4IiwiZmlyc3ROb25TbGFzaEVuZCIsImV4dG5hbWUiLCJzdGFydERvdCIsInN0YXJ0UGFydCIsInByZURvdFN0YXRlIiwicGF0aE9iamVjdCIsImJhc2UiLCJfZm9ybWF0Iiwid2luMzIiLCJjYWNoZWRTZXRUaW1lb3V0IiwiY2FjaGVkQ2xlYXJUaW1lb3V0IiwiZGVmYXVsdFNldFRpbW91dCIsImRlZmF1bHRDbGVhclRpbWVvdXQiLCJydW5UaW1lb3V0IiwiZnVuIiwiY3VycmVudFF1ZXVlIiwiZHJhaW5pbmciLCJxdWV1ZUluZGV4IiwiY2xlYW5VcE5leHRUaWNrIiwiZHJhaW5RdWV1ZSIsInRpbWVvdXQiLCJydW4iLCJtYXJrZXIiLCJydW5DbGVhclRpbWVvdXQiLCJJdGVtIiwidGl0bGUiLCJicm93c2VyIiwiYXJndiIsInZlcnNpb25zIiwiYWRkTGlzdGVuZXIiLCJyZW1vdmVMaXN0ZW5lciIsInByZXBlbmRMaXN0ZW5lciIsInByZXBlbmRPbmNlTGlzdGVuZXIiLCJsaXN0ZW5lcnMiLCJiaW5kaW5nIiwiY2hkaXIiLCJ1bWFzayIsInN0cmluZ0hpbnRzIiwibnVtYmVySGludHMiLCJTUEVDSUZJQ0lUWSIsImluc3RhbmNlb2YiLCJhYnNvbHV0ZVBhdGgiLCJmaWx0ZXJNYXgiLCJldmFsdWF0ZWRNYXgiLCJmaW5kQWxsQ2hpbGRyZW4iLCJjaGlsZHJlbiIsInNjaGVtYVBhdGhzIiwicHJlZGljYXRlIiwiZXh0cmFjdFJlZnMiLCJjaGlsZHJlblN0YXJ0IiwiaW5kZW50IiwiaGFzTm90SW5TY2hlbWEiLCJmaW5kRmlyc3RUeXBlZFNjaGVtYSIsImNhbkFwcGx5Tm90IiwidHlwZWRTY2hlbWEiLCJsaWtlTnVtYmVyIiwibGlrZUludGVnZXIiLCJsaWtlU3RyaW5nIiwibGlrZU51bGwiLCJsaWtlQm9vbGVhbiIsImlzT2JqZWN0IiwibWF5YmVPYmoiLCJsaWtlQXJyYXkiLCJsaWtlT2JqZWN0IiwiZ2V0U2NoZW1hTm9uVHlwZXMiLCJmb3JtYXRIaW50cyIsImhpbnRzIiwiZ2V0SGludHMiLCJsb2dpYyIsImNvbmZpZ3VyYXRpb24iLCJoZWFkZXJOYW1lRnJvbVNjaGVtYSIsImJhc2VEYXRhUGF0aEZyb21TY2hlbWEiLCJiYXNlRGF0YVBhdGgiLCJzcGxpdHRlZFRpdGxlRnJvbVNjaGVtYSIsImhlYWRlck5hbWUiLCJwb3N0Rm9ybWF0dGVyIiwiaGVhZGVyIiwiZm9ybWF0VmFsaWRhdGlvbkVycm9ycyIsImNhcHR1cmVTdGFja1RyYWNlIiwiZ2V0U2NoZW1hUGFydCIsIm5ld1BhdGgiLCJzY2hlbWFQYXJ0IiwiaW5uZXIiLCJmb3JtYXRTY2hlbWEiLCJwcmV2U2NoZW1hcyIsIm5ld0xvZ2ljIiwiZm9ybWF0SW5uZXJTY2hlbWEiLCJpbm5lclNjaGVtYSIsImFkZFNlbGYiLCJuZWVkQXBwbHlMb2dpY0hlcmUiLCJ1bmRlZmluZWRBc051bGwiLCJpZlZhbHVlIiwidGhlblZhbHVlIiwiZWxzZSIsImVsc2VWYWx1ZSIsImhhc0FkZGl0aW9uYWxJdGVtcyIsIkJvb2xlYW4iLCJvYmplY3RTdHJ1Y3R1cmUiLCJTZXQiLCJkZXBlbmRlbmN5TmFtZSIsImRlcGVuZGVuY3kiLCJkZXAiLCJnZXRTY2hlbWFQYXJ0VGV4dCIsImFkZGl0aW9uYWxQYXRoIiwibmVlZERvdCIsInNjaGVtYVRleHQiLCJkZXNjcmlwdGlvbiIsImdldFNjaGVtYVBhcnREZXNjcmlwdGlvbiIsImZvcm1hdFZhbGlkYXRpb25FcnJvciIsInBhcmFtcyIsImNvbXBhcmlzb24iLCJtaXNzaW5nUGF0dGVybiIsIm1pc3NpbmdQcm9wZXJ0eSIsImhhc1Byb3BlcnR5IiwiYWRkaXRpb25hbFByb3BlcnR5IiwicHJvcGVydHlOYW1lIiwicG9zdGZpeCIsInNjaGVtYU91dHB1dCIsImxhc3RDaGlsZCIsInJlbWFpbmluZ0NoaWxkcmVuIiwiZmlsdGVyZWRDaGlsZHJlbiIsIm5ld0NoaWxkcmVuIiwiZmlsdGVyQ2hpbGRyZW4iLCJjaGlsZCIsInJldmVyc2UiLCJncm91cENoaWxkcmVuQnlGaXJzdENoaWxkIiwibmVzdGVkRXJyb3IiLCJmYWlsaW5nS2V5d29yZCIsImZvcm1hdHRlZEVycm9yIiwiX2RlZmF1bHQiLCJlbmFibGVWYWxpZGF0aW9uIiwiZGlzYWJsZVZhbGlkYXRpb24iLCJuZWVkVmFsaWRhdGUiLCJlcnJvck1lc3NhZ2UiLCJnZXRFcnJvckZvciIsInNob3VsZEJlQWJzb2x1dGUiLCJwYXNzZXMiLCJrd1ZhbCIsInBhcmVudERhdGEiLCJwYXJlbnREYXRhUHJvcGVydHkiLCJwYXJlbnREYXRhUmVmIiwiUmFuZ2UiLCJnZXRPcGVyYXRvciIsInNpZGUiLCJmb3JtYXRSaWdodCIsImZvcm1hdExlZnQiLCJmb3JtYXRSYW5nZSIsInN0YXJ0RXhjbHVzaXZlIiwiZW5kRXhjbHVzaXZlIiwiZ2V0UmFuZ2VWYWx1ZSIsInZhbHVlcyIsIl9sZWZ0IiwiX3JpZ2h0IiwibGVmdEV4Y2x1c2l2ZSIsInJpZ2h0RXhjbHVzaXZlIiwicmVhbFN0YXJ0IiwiY3VycmVudFNjaGVtYSIsInRtcExlbmd0aCIsInRtcEZvcm1hdCIsInRtcEV4Y2x1c2l2ZSIsImZvcm1hdEV4Y2x1c2l2ZU1heGltdW0iLCJmb3JtYXRFeGNsdXNpdmVNaW5pbXVtIiwicmFuZ2VGb3JtYXQiLCJ2YWxpZGF0ZU9iamVjdCIsImFwcGx5UHJlZml4IiwiX1ZhbGlkYXRpb25FcnJvciIsIlNLSVBfVkFMSURBVElPTiIsIl9hYnNvbHV0ZVBhdGgiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX3VuZGVmaW5lZEFzTnVsbCIsIl9fZXNNb2R1bGUiLCJnZXRBanYiLCJtZW1vaXplIiwiYWp2S2V5d29yZHMiLCJzY2hlbWFDYWNoZSIsIldlYWtNYXAiLCJjb21waWxlZFNjaGVtYSIsIm5ld0Vycm9ycyIsIm9sZEVycm9yIiwiZmlsdGVyRXJyb3JzIiwic3R5bGVzSW5ET00iLCJnZXRJbmRleEJ5SWRlbnRpZmllciIsImlkZW50aWZpZXIiLCJtb2R1bGVzVG9Eb20iLCJpZENvdW50TWFwIiwiaWRlbnRpZmllcnMiLCJpbmRleEJ5SWRlbnRpZmllciIsImNzcyIsInNvdXJjZU1hcCIsInJlZmVyZW5jZXMiLCJ1cGRhdGVyIiwiYWRkRWxlbWVudFN0eWxlIiwiYnlJbmRleCIsImFwaSIsImRvbUFQSSIsIm5ld09iaiIsImxhc3RJZGVudGlmaWVycyIsIm5ld0xpc3QiLCJuZXdMYXN0SWRlbnRpZmllcnMiLCJfaSIsIl9pbmRleCIsIm1lbW8iLCJpbnNlcnQiLCJzdHlsZSIsInN0eWxlVGFyZ2V0IiwicXVlcnlTZWxlY3RvciIsIkhUTUxJRnJhbWVFbGVtZW50IiwiY29udGVudERvY3VtZW50IiwiaGVhZCIsImdldFRhcmdldCIsImFwcGVuZENoaWxkIiwiZWxlbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGVzIiwiYXR0cmlidXRlcyIsInN0eWxlRWxlbWVudCIsIm5vbmNlIiwic2V0QXR0cmlidXRlIiwiaW5zZXJ0U3R5bGVFbGVtZW50Iiwic3R5bGVUYWdUcmFuc2Zvcm0iLCJyZW1vdmVDaGlsZCIsInJlbW92ZVN0eWxlRWxlbWVudCIsInN0eWxlU2hlZXQiLCJmaXJzdENoaWxkIiwiY3JlYXRlVGV4dE5vZGUiLCJtZXJnZSIsInNldHMiLCJ4bCIsInN1YmV4cCIsInR5cGVPZiIsImJ1aWxkRXhwcyIsImlzSVJJIiwiQUxQSEEkJCIsIkRJR0lUJCQiLCJIRVhESUckJCIsIlBDVF9FTkNPREVEJCIsIlNVQl9ERUxJTVMkJCIsIlJFU0VSVkVEJCQiLCJTQ0hFTUUkIiwiVVNFUklORk8kIiwiVU5SRVNFUlZFRCQkIiwiREVDX09DVEVUX1JFTEFYRUQkIiwiSDE2JCIsIkxTMzIkIiwiSVBWNEFERFJFU1MkIiwiSVBWNkFERFJFU1MxJCIsIklQVjZBRERSRVNTMiQiLCJJUFY2QUREUkVTUzMkIiwiSVBWNkFERFJFU1M0JCIsIklQVjZBRERSRVNTNSQiLCJJUFY2QUREUkVTUzYkIiwiSVBWNkFERFJFU1M3JCIsIklQVjZBRERSRVNTOCQiLCJJUFY2QUREUkVTUzkkIiwiWk9ORUlEJCIsIklQVjZBRERSRVNTJCIsIklQX0xJVEVSQUwkIiwiSVBWNkFERFJaX1JFTEFYRUQkIiwiSVBWRlVUVVJFJCIsIkhPU1QkIiwiUkVHX05BTUUkIiwiUE9SVCQiLCJBVVRIT1JJVFkkIiwiUENIQVIkIiwiU0VHTUVOVCQiLCJTRUdNRU5UX05aJCIsIlNFR01FTlRfTlpfTkMkIiwiUEFUSF9BQkVNUFRZJCIsIlBBVEhfQUJTT0xVVEUkIiwiUVVFUlkkIiwiUEFUSF9OT1NDSEVNRSQiLCJQQVRIX1JPT1RMRVNTJCIsIlBBVEhfRU1QVFkkIiwiSVBSSVZBVEUkJCIsIkZSQUdNRU5UJCIsIkhJRVJfUEFSVCQiLCJVUkkkIiwiUkVMQVRJVkVfUEFSVCQiLCJSRUxBVElWRSQiLCJtYXhJbnQiLCJyZWdleFB1bnljb2RlIiwicmVnZXhOb25BU0NJSSIsInJlZ2V4U2VwYXJhdG9ycyIsInN0cmluZ0Zyb21DaGFyQ29kZSIsIm1hcERvbWFpbiIsInVjczJkZWNvZGUiLCJjb3VudGVyIiwiZXh0cmEiLCJkaWdpdFRvQmFzaWMiLCJkaWdpdCIsImFkYXB0IiwiZGVsdGEiLCJudW1Qb2ludHMiLCJmaXJzdFRpbWUiLCJiYXNlTWludXNUTWluIiwiZGVjb2RlIiwiaW5wdXRMZW5ndGgiLCJiaWFzIiwiYmFzaWMiLCJvbGRpIiwidyIsImJhc2VNaW51c1QiLCJmcm9tQ29kZVBvaW50IiwiZW5jb2RlIiwiYmFzaWNMZW5ndGgiLCJoYW5kbGVkQ1BDb3VudCIsImhhbmRsZWRDUENvdW50UGx1c09uZSIsInEiLCJxTWludXNUIiwicHVueWNvZGUiLCJTQ0hFTUVTIiwicGN0RW5jQ2hhciIsImNociIsInBjdERlY0NoYXJzIiwibmV3U3RyIiwiaWwiLCJjMiIsImMzIiwiX25vcm1hbGl6ZUNvbXBvbmVudEVuY29kaW5nIiwiY29tcG9uZW50cyIsImRlY29kZVVucmVzZXJ2ZWQiLCJkZWNTdHIiLCJVTlJFU0VSVkVEIiwic2NoZW1lIiwiUENUX0VOQ09ERUQiLCJOT1RfU0NIRU1FIiwidXNlcmluZm8iLCJOT1RfVVNFUklORk8iLCJob3N0IiwiTk9UX0hPU1QiLCJOT1RfUEFUSCIsIk5PVF9QQVRIX05PU0NIRU1FIiwicXVlcnkiLCJOT1RfUVVFUlkiLCJOT1RfRlJBR01FTlQiLCJfc3RyaXBMZWFkaW5nWmVyb3MiLCJfbm9ybWFsaXplSVB2NCIsIklQVjRBRERSRVNTIiwiYWRkcmVzcyIsIl9ub3JtYWxpemVJUHY2IiwiSVBWNkFERFJFU1MiLCJ6b25lIiwiZmlyc3RGaWVsZHMiLCJsYXN0RmllbGRzIiwiaXNMYXN0RmllbGRJUHY0QWRkcmVzcyIsImZpZWxkQ291bnQiLCJsYXN0RmllbGRzU3RhcnQiLCJmaWVsZHMiLCJsb25nZXN0WmVyb0ZpZWxkcyIsImFjYyIsImxhc3RMb25nZXN0IiwibmV3SG9zdCIsIm5ld0ZpcnN0IiwibmV3TGFzdCIsIlVSSV9QQVJTRSIsIk5PX01BVENIX0lTX1VOREVGSU5FRCIsInVyaVN0cmluZyIsImlyaSIsIklSSV9QUk9UT0NPTCIsIlVSSV9QUk9UT0NPTCIsInJlZmVyZW5jZSIsInBvcnQiLCJzY2hlbWVIYW5kbGVyIiwidW5pY29kZVN1cHBvcnQiLCJkb21haW5Ib3N0IiwidG9BU0NJSSIsIlJEUzEiLCJSRFMyIiwiUkRTMyIsIlJEUzUiLCJyZW1vdmVEb3RTZWdtZW50cyIsImltIiwidXJpVG9rZW5zIiwidG9Vbmljb2RlIiwiYXV0aG9yaXR5IiwiX3JlY29tcG9zZUF1dGhvcml0eSIsInJlc29sdmVDb21wb25lbnRzIiwidG9sZXJhbnQiLCJ1bmVzY2FwZUNvbXBvbmVudCIsImhhbmRsZXIiLCJzZWN1cmUiLCJodHRwIiwiaXNTZWN1cmUiLCJ3c0NvbXBvbmVudHMiLCJyZXNvdXJjZU5hbWUiLCJ3cyIsIk8iLCJWQ0hBUiQkIiwiTk9UX0xPQ0FMX1BBUlQiLCJOT1RfSEZOQU1FIiwiTk9UX0hGVkFMVUUiLCJtYWlsdG9Db21wb25lbnRzIiwidW5rbm93bkhlYWRlcnMiLCJoZWFkZXJzIiwiaGZpZWxkcyIsImhmaWVsZCIsInRvQWRkcnMiLCJzdWJqZWN0IiwiYWRkciIsInNldEludGVydmFsIiwidG9BZGRyIiwiYXRJZHgiLCJsb2NhbFBhcnQiLCJkb21haW4iLCJVUk5fUEFSU0UiLCJ1cm5Db21wb25lbnRzIiwibmlkIiwibnNzIiwidXJuU2NoZW1lIiwidXJpQ29tcG9uZW50cyIsInV1aWRDb21wb25lbnRzIiwiaHR0cHMiLCJ3c3MiLCJtYWlsdG8iLCJ1cm4iLCJiYXNlVVJJIiwicmVsYXRpdmVVUkkiLCJzY2hlbWVsZXNzT3B0aW9ucyIsInVyaUEiLCJ1cmlCIiwiRVNDQVBFIiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsImFtZEQiLCJnZXR0ZXIiLCJnZXRQcm90b3R5cGVPZiIsIm5zIiwiY3VycmVudCIsImdldE93blByb3BlcnR5TmFtZXMiLCJjaHVua0lkIiwidSIsImdsb2JhbFRoaXMiLCJkb25lIiwic2NyaXB0IiwibmVlZEF0dGFjaCIsInNjcmlwdHMiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImdldEF0dHJpYnV0ZSIsImNoYXJzZXQiLCJuYyIsIm9uU2NyaXB0Q29tcGxldGUiLCJwcmV2Iiwib25sb2FkIiwiZG9uZUZucyIsInRvU3RyaW5nVGFnIiwic2NyaXB0VXJsIiwiaW1wb3J0U2NyaXB0cyIsImxvY2F0aW9uIiwiY3VycmVudFNjcmlwdCIsImluc3RhbGxlZENodW5rcyIsImluc3RhbGxlZENodW5rRGF0YSIsInByb21pc2UiLCJlcnJvclR5cGUiLCJyZWFsU3JjIiwid2VicGFja0pzb25wQ2FsbGJhY2siLCJwYXJlbnRDaHVua0xvYWRpbmdGdW5jdGlvbiIsImNodW5rSWRzIiwibW9yZU1vZHVsZXMiLCJydW50aW1lIiwiY2h1bmtMb2FkaW5nR2xvYmFsIiwibG9jYWxzIiwiZGlzcGxheSIsImFsaWduSXRlbXMiLCJpbm5lclRleHQiLCJnYXAiLCJwYWRkaW5nTGVmdCIsInBhZGRpbmdSaWdodCIsImlubmVySFRNTCIsImp1c3RpZnlDb250ZW50IiwiYXNwZWN0UmF0aW8iLCJvbmNsaWNrIiwid20iLCJ0b2dnbGVMYXVuY2hlciIsIl9yZWdlbmVyYXRvclJ1bnRpbWUiLCJhc3luY0l0ZXJhdG9yIiwid3JhcCIsIkdlbmVyYXRvciIsIkNvbnRleHQiLCJtYWtlSW52b2tlTWV0aG9kIiwidHJ5Q2F0Y2giLCJHZW5lcmF0b3JGdW5jdGlvbiIsIkdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlIiwiZGVmaW5lSXRlcmF0b3JNZXRob2RzIiwiX2ludm9rZSIsIkFzeW5jSXRlcmF0b3IiLCJpbnZva2UiLCJfdHlwZW9mIiwiX19hd2FpdCIsImNhbGxJbnZva2VXaXRoTWV0aG9kQW5kQXJnIiwiZGVsZWdhdGUiLCJtYXliZUludm9rZURlbGVnYXRlIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJyZXN1bHROYW1lIiwibmV4dExvYyIsInB1c2hUcnlFbnRyeSIsInRyeUxvYyIsImNhdGNoTG9jIiwiZmluYWxseUxvYyIsImFmdGVyTG9jIiwidHJ5RW50cmllcyIsInJlc2V0VHJ5RW50cnkiLCJjb21wbGV0aW9uIiwicmVzZXQiLCJkaXNwbGF5TmFtZSIsImlzR2VuZXJhdG9yRnVuY3Rpb24iLCJtYXJrIiwiX19wcm90b19fIiwiYXdyYXAiLCJzdG9wIiwicnZhbCIsImhhbmRsZSIsImZpbmlzaCIsImRlbGVnYXRlWWllbGQiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJnZW4iLCJfbmV4dCIsIl90aHJvdyIsImluZm8iLCJfYXN5bmNUb0dlbmVyYXRvciIsImFwcCIsImRldGFpbCIsImljb24iLCJfY2FsbGVlIiwid2luIiwiX2NvbnRleHQiLCJmb2N1cyIsIlN0YXR1c0JhciIsIl9jbGFzc0NhbGxDaGVjayIsImFwcFZpZXciLCJhcHBzIiwiY2xvY2siLCJzd2l0Y2hlciIsIl9kZWZpbmVQcm9wZXJ0aWVzIiwicHJvcHMiLCJkZXNjcmlwdG9yIiwiX3RvUHJvcGVydHlLZXkiLCJfZGVmaW5lUHJvcGVydHkiLCJoaW50IiwicHJpbSIsIl90b1ByaW1pdGl2ZSIsIlNldHRpbmdzQXBwIiwiaW5zdGFuY2UiLCJwcm90b1Byb3BzIiwiX29wZW4iLCJjcmVhdGVXaW5kb3ciLCJoZWlnaHQiLCJwYWRkaW5nIiwiRmlsZXNBcHAiLCJfY2FsbGVlMiIsInNldERpciIsIl9zZXREaXIiLCJfY29udGV4dDIiLCJiYWNrIiwiX2xvb3AiLCJmaWxlU3RhdCIsImZsb3ciLCJvcGVuQXBwIiwiX3giLCJ0MCIsImZsZXhEaXJlY3Rpb24iLCJNdXNpY0FwcCIsIkVkaXRvckFwcCIsIl95aWVsZCRpbXBvcnQiLCJlZGl0b3IiLCJzZXRUaXRsZSIsImVkaXQiLCJhdCIsImdldFNlc3Npb24iLCJzZXRNb2RlIiwicmVxdWlyZSIsInNldFRoZW1lIiwic2V0VmFsdWUiLCJwa2ciLCJDdXN0b21FdmVudCIsImRpc3BhdGNoRXZlbnQiLCJfYXJyYXlMaWtlVG9BcnJheSIsIl9jcmVhdGVDbGFzcyIsInN0YXRpY1Byb3BzIiwib25mb2N1cyIsIm9uYmx1ciIsIkZsb3dXaW5kb3ciLCJjb25maWciLCJfdGhpcyIsInpJbmRleCIsImdldEhpZ2hlc3RaSW5kZXgiLCJvbm1vdXNlZG93biIsImNvbnRhaW5lciIsInBvc1giLCJwb3NZIiwiZWxlbWVudERyYWciLCJkeCIsImNsaWVudFgiLCJkeSIsImNsaWVudFkiLCJuZXdUb3AiLCJvZmZzZXRUb3AiLCJuZXdMZWZ0Iiwib2Zmc2V0TGVmdCIsImNvbnRhaW5lcldpZHRoIiwib2Zmc2V0V2lkdGgiLCJjb250YWluZXJIZWlnaHQiLCJvZmZzZXRIZWlnaHQiLCJ0b3AiLCJjbG9zZURyYWdFbGVtZW50Iiwib25tb3VzZXVwIiwib25tb3VzZW1vdmUiLCJvbm1vdXNlbGVhdmUiLCJvbm1vdXNlZW50ZXIiLCJkcmFnRWxlbWVudCIsIldNIiwiYXJlYSIsImxhdW5jaGVyIiwiaW5pdCIsIl9pbml0IiwiaW5kZXhlcyIsIndpbmRvd3MiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJpdGVyIiwiX2l0ZXJhYmxlVG9BcnJheSIsIm1pbkxlbiIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsImxhdW5jaGVyT3BlbiIsIm9wYWNpdHkiLCJiYWNrZHJvcEZpbHRlciIsInBvaW50ZXJFdmVudHMiLCJfdGhpczIiLCJjdXJyZW50VGFyZ2V0Iiwic3RhdHVzQmFyIl0sInNvdXJjZVJvb3QiOiIifQ==