country-flag-cli 0.0.20 → 0.0.24

Sign up to get free protection for your applications and to get access to all the features.
package/dist/cli.js CHANGED
@@ -1,39 +1,36 @@
1
1
  #!/usr/bin/env node
2
- var ch=Object.create;var Bi=Object.defineProperty;var lh=Object.getOwnPropertyDescriptor;var fh=Object.getOwnPropertyNames;var dh=Object.getPrototypeOf,ph=Object.prototype.hasOwnProperty;var hh=t=>Bi(t,"__esModule",{value:!0});var b=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var vh=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of fh(e))!ph.call(t,i)&&(r||i!=="default")&&Bi(t,i,{get:()=>e[i],enumerable:!(n=lh(e,i))||n.enumerable});return t},Gi=(t,e)=>vh(hh(Bi(t!=null?ch(dh(t)):{},"default",!e&&t&&t.__esModule?{get:()=>t.default,enumerable:!0}:{value:t,enumerable:!0})),t);var gu=b((fn,_u)=>{var _h=require("events").EventEmitter,zi=require("child_process").spawn,cn=require("path"),gh=cn.dirname,du=cn.basename,pu=require("fs");require("util").inherits(U,_h);fn=_u.exports=new U;fn.Command=U;fn.Option=Kt;function Kt(t,e){this.flags=t,this.required=t.indexOf("<")>=0,this.optional=t.indexOf("[")>=0,this.bool=t.indexOf("-no-")===-1,t=t.split(/[ ,|]+/),t.length>1&&!/^[[<]/.test(t[1])&&(this.short=t.shift()),this.long=t.shift(),this.description=e||""}Kt.prototype.name=function(){return this.long.replace("--","").replace("no-","")};Kt.prototype.attributeName=function(){return mh(this.name())};Kt.prototype.is=function(t){return this.short===t||this.long===t};function U(t){this.commands=[],this.options=[],this._execs={},this._allowUnknownOption=!1,this._args=[],this._name=t||""}U.prototype.command=function(t,e,r){typeof e=="object"&&e!==null&&(r=e,e=null),r=r||{};var n=t.split(/ +/),i=new U(n.shift());return e&&(i.description(e),this.executables=!0,this._execs[i._name]=!0,r.isDefault&&(this.defaultExecutable=i._name)),i._noHelp=!!r.noHelp,this.commands.push(i),i.parseExpectedArgs(n),i.parent=this,e?this:i};U.prototype.arguments=function(t){return this.parseExpectedArgs(t.split(/ +/))};U.prototype.addImplicitHelpCommand=function(){this.command("help [cmd]","display help for [cmd]")};U.prototype.parseExpectedArgs=function(t){if(!!t.length){var e=this;return t.forEach(function(r){var n={required:!1,name:"",variadic:!1};switch(r[0]){case"<":n.required=!0,n.name=r.slice(1,-1);break;case"[":n.name=r.slice(1,-1);break}n.name.length>3&&n.name.slice(-3)==="..."&&(n.variadic=!0,n.name=n.name.slice(0,-3)),n.name&&e._args.push(n)}),this}};U.prototype.action=function(t){var e=this,r=function(o,s){o=o||[],s=s||[];var a=e.parseOptions(s);hu(e,a.unknown),a.unknown.length>0&&e.unknownOption(a.unknown[0]),a.args.length&&(o=a.args.concat(o)),e._args.forEach(function(u,c){u.required&&o[c]==null?e.missingArgument(u.name):u.variadic&&(c!==e._args.length-1&&e.variadicArgNotLast(u.name),o[c]=o.splice(c))}),e._args.length?o[e._args.length]=e:o.push(e),t.apply(e,o)},n=this.parent||this,i=n===this?"*":this._name;return n.on("command:"+i,r),this._alias&&n.on("command:"+this._alias,r),this};U.prototype.option=function(t,e,r,n){var i=this,o=new Kt(t,e),s=o.name(),a=o.attributeName();if(typeof r!="function")if(r instanceof RegExp){var u=r;r=function(c,l){var d=u.exec(c);return d?d[0]:l}}else n=r,r=null;return(!o.bool||o.optional||o.required)&&(o.bool||(n=!0),n!==void 0&&(i[a]=n,o.defaultValue=n)),this.options.push(o),this.on("option:"+s,function(c){c!==null&&r&&(c=r(c,i[a]===void 0?n:i[a])),typeof i[a]=="boolean"||typeof i[a]=="undefined"?c==null?i[a]=o.bool?n||!0:!1:i[a]=c:c!==null&&(i[a]=c)}),this};U.prototype.allowUnknownOption=function(t){return this._allowUnknownOption=arguments.length===0||t,this};U.prototype.parse=function(t){this.executables&&this.addImplicitHelpCommand(),this.rawArgs=t,this._name=this._name||du(t[1],".js"),this.executables&&t.length<3&&!this.defaultExecutable&&t.push("--help");var e=this.parseOptions(this.normalize(t.slice(2))),r=this.args=e.args,n=this.parseArgs(this.args,e.unknown),i=n.args[0],o=null;return i&&(o=this.commands.filter(function(s){return s.alias()===i})[0]),this._execs[i]===!0?this.executeSubCommand(t,r,e.unknown):o?(r[0]=o._name,this.executeSubCommand(t,r,e.unknown)):this.defaultExecutable?(r.unshift(this.defaultExecutable),this.executeSubCommand(t,r,e.unknown)):n};U.prototype.executeSubCommand=function(t,e,r){e=e.concat(r),e.length||this.help(),e[0]==="help"&&e.length===1&&this.help(),e[0]==="help"&&(e[0]=e[1],e[1]="--help");var n=t[1],i=du(n,cn.extname(n))+"-"+e[0],o,s=pu.realpathSync(n);o=gh(s);var a=cn.join(o,i),u=!1;Vi(a+".js")?(i=a+".js",u=!0):Vi(a+".ts")?(i=a+".ts",u=!0):Vi(a)&&(i=a),e=e.slice(1);var c;process.platform!=="win32"?u?(e.unshift(i),e=(process.execArgv||[]).concat(e),c=zi(process.argv[0],e,{stdio:"inherit",customFds:[0,1,2]})):c=zi(i,e,{stdio:"inherit",customFds:[0,1,2]}):(e.unshift(i),c=zi(process.execPath,e,{stdio:"inherit"}));var l=["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"];l.forEach(function(d){process.on(d,function(){c.killed===!1&&c.exitCode===null&&c.kill(d)})}),c.on("close",process.exit.bind(process)),c.on("error",function(d){d.code==="ENOENT"?console.error("error: %s(1) does not exist, try --help",i):d.code==="EACCES"&&console.error("error: %s(1) not executable. try chmod or run with root",i),process.exit(1)}),this.runningCommand=c};U.prototype.normalize=function(t){for(var e=[],r,n,i,o=0,s=t.length;o<s;++o)if(r=t[o],o>0&&(n=this.optionFor(t[o-1])),r==="--"){e=e.concat(t.slice(o));break}else n&&n.required?e.push(r):r.length>1&&r[0]==="-"&&r[1]!=="-"?r.slice(1).split("").forEach(function(a){e.push("-"+a)}):/^--/.test(r)&&~(i=r.indexOf("="))?e.push(r.slice(0,i),r.slice(i+1)):e.push(r);return e};U.prototype.parseArgs=function(t,e){var r;return t.length?(r=t[0],this.listeners("command:"+r).length?this.emit("command:"+t.shift(),t,e):this.emit("command:*",t)):(hu(this,e),e.length>0&&this.unknownOption(e[0]),this.commands.length===0&&this._args.filter(function(n){return n.required}).length===0&&this.emit("command:*")),this};U.prototype.optionFor=function(t){for(var e=0,r=this.options.length;e<r;++e)if(this.options[e].is(t))return this.options[e]};U.prototype.parseOptions=function(t){for(var e=[],r=t.length,n,i,o,s=[],a=0;a<r;++a){if(o=t[a],n){e.push(o);continue}if(o==="--"){n=!0;continue}if(i=this.optionFor(o),i){if(i.required){if(o=t[++a],o==null)return this.optionMissingArgument(i);this.emit("option:"+i.name(),o)}else i.optional?(o=t[a+1],o==null||o[0]==="-"&&o!=="-"?o=null:++a,this.emit("option:"+i.name(),o)):this.emit("option:"+i.name());continue}if(o.length>1&&o[0]==="-"){s.push(o),a+1<t.length&&t[a+1][0]!=="-"&&s.push(t[++a]);continue}e.push(o)}return{args:e,unknown:s}};U.prototype.opts=function(){for(var t={},e=this.options.length,r=0;r<e;r++){var n=this.options[r].attributeName();t[n]=n===this._versionOptionName?this._version:this[n]}return t};U.prototype.missingArgument=function(t){console.error("error: missing required argument `%s'",t),process.exit(1)};U.prototype.optionMissingArgument=function(t,e){e?console.error("error: option `%s' argument missing, got `%s'",t.flags,e):console.error("error: option `%s' argument missing",t.flags),process.exit(1)};U.prototype.unknownOption=function(t){this._allowUnknownOption||(console.error("error: unknown option `%s'",t),process.exit(1))};U.prototype.variadicArgNotLast=function(t){console.error("error: variadic arguments must be last `%s'",t),process.exit(1)};U.prototype.version=function(t,e){if(arguments.length===0)return this._version;this._version=t,e=e||"-V, --version";var r=new Kt(e,"output the version number");return this._versionOptionName=r.long.substr(2)||"version",this.options.push(r),this.on("option:"+this._versionOptionName,function(){process.stdout.write(t+`
3
- `),process.exit(0)}),this};U.prototype.description=function(t,e){return arguments.length===0?this._description:(this._description=t,this._argsDescription=e,this)};U.prototype.alias=function(t){var e=this;if(this.commands.length!==0&&(e=this.commands[this.commands.length-1]),arguments.length===0)return e._alias;if(t===e._name)throw new Error("Command alias can't be the same as its name");return e._alias=t,this};U.prototype.usage=function(t){var e=this._args.map(function(n){return vu(n)}),r="[options]"+(this.commands.length?" [command]":"")+(this._args.length?" "+e.join(" "):"");return arguments.length===0?this._usage||r:(this._usage=t,this)};U.prototype.name=function(t){return arguments.length===0?this._name:(this._name=t,this)};U.prototype.prepareCommands=function(){return this.commands.filter(function(t){return!t._noHelp}).map(function(t){var e=t._args.map(function(r){return vu(r)}).join(" ");return[t._name+(t._alias?"|"+t._alias:"")+(t.options.length?" [options]":"")+(e?" "+e:""),t._description]})};U.prototype.largestCommandLength=function(){var t=this.prepareCommands();return t.reduce(function(e,r){return Math.max(e,r[0].length)},0)};U.prototype.largestOptionLength=function(){var t=[].slice.call(this.options);return t.push({flags:"-h, --help"}),t.reduce(function(e,r){return Math.max(e,r.flags.length)},0)};U.prototype.largestArgLength=function(){return this._args.reduce(function(t,e){return Math.max(t,e.name.length)},0)};U.prototype.padWidth=function(){var t=this.largestOptionLength();return this._argsDescription&&this._args.length&&this.largestArgLength()>t&&(t=this.largestArgLength()),this.commands&&this.commands.length&&this.largestCommandLength()>t&&(t=this.largestCommandLength()),t};U.prototype.optionHelp=function(){var t=this.padWidth();return this.options.map(function(e){return ln(e.flags,t)+" "+e.description+(e.bool&&e.defaultValue!==void 0?" (default: "+JSON.stringify(e.defaultValue)+")":"")}).concat([ln("-h, --help",t)+" output usage information"]).join(`
4
- `)};U.prototype.commandHelp=function(){if(!this.commands.length)return"";var t=this.prepareCommands(),e=this.padWidth();return["Commands:",t.map(function(r){var n=r[1]?" "+r[1]:"";return(n?ln(r[0],e):r[0])+n}).join(`
2
+ var Rd=Object.create;var fi=Object.defineProperty;var Ad=Object.getOwnPropertyDescriptor;var Pd=Object.getOwnPropertyNames;var qd=Object.getPrototypeOf,Nd=Object.prototype.hasOwnProperty;var Md=t=>fi(t,"__esModule",{value:!0});var b=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var kd=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Pd(e))!Nd.call(t,i)&&(r||i!=="default")&&fi(t,i,{get:()=>e[i],enumerable:!(n=Ad(e,i))||n.enumerable});return t},li=(t,e)=>kd(Md(fi(t!=null?Rd(qd(t)):{},"default",!e&&t&&t.__esModule?{get:()=>t.default,enumerable:!0}:{value:t,enumerable:!0})),t);var gs=b((jr,vs)=>{var Dd=require("events").EventEmitter,di=require("child_process").spawn,Dr=require("path"),Fd=Dr.dirname,ds=Dr.basename,ps=require("fs");require("util").inherits(j,Dd);jr=vs.exports=new j;jr.Command=j;jr.Option=Nt;function Nt(t,e){this.flags=t,this.required=t.indexOf("<")>=0,this.optional=t.indexOf("[")>=0,this.bool=t.indexOf("-no-")===-1,t=t.split(/[ ,|]+/),t.length>1&&!/^[[<]/.test(t[1])&&(this.short=t.shift()),this.long=t.shift(),this.description=e||""}Nt.prototype.name=function(){return this.long.replace("--","").replace("no-","")};Nt.prototype.attributeName=function(){return jd(this.name())};Nt.prototype.is=function(t){return this.short===t||this.long===t};function j(t){this.commands=[],this.options=[],this._execs={},this._allowUnknownOption=!1,this._args=[],this._name=t||""}j.prototype.command=function(t,e,r){typeof e=="object"&&e!==null&&(r=e,e=null),r=r||{};var n=t.split(/ +/),i=new j(n.shift());return e&&(i.description(e),this.executables=!0,this._execs[i._name]=!0,r.isDefault&&(this.defaultExecutable=i._name)),i._noHelp=!!r.noHelp,this.commands.push(i),i.parseExpectedArgs(n),i.parent=this,e?this:i};j.prototype.arguments=function(t){return this.parseExpectedArgs(t.split(/ +/))};j.prototype.addImplicitHelpCommand=function(){this.command("help [cmd]","display help for [cmd]")};j.prototype.parseExpectedArgs=function(t){if(!!t.length){var e=this;return t.forEach(function(r){var n={required:!1,name:"",variadic:!1};switch(r[0]){case"<":n.required=!0,n.name=r.slice(1,-1);break;case"[":n.name=r.slice(1,-1);break}n.name.length>3&&n.name.slice(-3)==="..."&&(n.variadic=!0,n.name=n.name.slice(0,-3)),n.name&&e._args.push(n)}),this}};j.prototype.action=function(t){var e=this,r=function(o,a){o=o||[],a=a||[];var s=e.parseOptions(a);hs(e,s.unknown),s.unknown.length>0&&e.unknownOption(s.unknown[0]),s.args.length&&(o=s.args.concat(o)),e._args.forEach(function(u,c){u.required&&o[c]==null?e.missingArgument(u.name):u.variadic&&(c!==e._args.length-1&&e.variadicArgNotLast(u.name),o[c]=o.splice(c))}),e._args.length?o[e._args.length]=e:o.push(e),t.apply(e,o)},n=this.parent||this,i=n===this?"*":this._name;return n.on("command:"+i,r),this._alias&&n.on("command:"+this._alias,r),this};j.prototype.option=function(t,e,r,n){var i=this,o=new Nt(t,e),a=o.name(),s=o.attributeName();if(typeof r!="function")if(r instanceof RegExp){var u=r;r=function(c,l){var d=u.exec(c);return d?d[0]:l}}else n=r,r=null;return(!o.bool||o.optional||o.required)&&(o.bool||(n=!0),n!==void 0&&(i[s]=n,o.defaultValue=n)),this.options.push(o),this.on("option:"+a,function(c){c!==null&&r&&(c=r(c,i[s]===void 0?n:i[s])),typeof i[s]=="boolean"||typeof i[s]=="undefined"?c==null?i[s]=o.bool?n||!0:!1:i[s]=c:c!==null&&(i[s]=c)}),this};j.prototype.allowUnknownOption=function(t){return this._allowUnknownOption=arguments.length===0||t,this};j.prototype.parse=function(t){this.executables&&this.addImplicitHelpCommand(),this.rawArgs=t,this._name=this._name||ds(t[1],".js"),this.executables&&t.length<3&&!this.defaultExecutable&&t.push("--help");var e=this.parseOptions(this.normalize(t.slice(2))),r=this.args=e.args,n=this.parseArgs(this.args,e.unknown),i=n.args[0],o=null;return i&&(o=this.commands.filter(function(a){return a.alias()===i})[0]),this._execs[i]===!0?this.executeSubCommand(t,r,e.unknown):o?(r[0]=o._name,this.executeSubCommand(t,r,e.unknown)):this.defaultExecutable?(r.unshift(this.defaultExecutable),this.executeSubCommand(t,r,e.unknown)):n};j.prototype.executeSubCommand=function(t,e,r){e=e.concat(r),e.length||this.help(),e[0]==="help"&&e.length===1&&this.help(),e[0]==="help"&&(e[0]=e[1],e[1]="--help");var n=t[1],i=ds(n,Dr.extname(n))+"-"+e[0],o,a=ps.realpathSync(n);o=Fd(a);var s=Dr.join(o,i),u=!1;pi(s+".js")?(i=s+".js",u=!0):pi(s+".ts")?(i=s+".ts",u=!0):pi(s)&&(i=s),e=e.slice(1);var c;process.platform!=="win32"?u?(e.unshift(i),e=(process.execArgv||[]).concat(e),c=di(process.argv[0],e,{stdio:"inherit",customFds:[0,1,2]})):c=di(i,e,{stdio:"inherit",customFds:[0,1,2]}):(e.unshift(i),c=di(process.execPath,e,{stdio:"inherit"}));var l=["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"];l.forEach(function(d){process.on(d,function(){c.killed===!1&&c.exitCode===null&&c.kill(d)})}),c.on("close",process.exit.bind(process)),c.on("error",function(d){d.code==="ENOENT"?console.error("error: %s(1) does not exist, try --help",i):d.code==="EACCES"&&console.error("error: %s(1) not executable. try chmod or run with root",i),process.exit(1)}),this.runningCommand=c};j.prototype.normalize=function(t){for(var e=[],r,n,i,o=0,a=t.length;o<a;++o)if(r=t[o],o>0&&(n=this.optionFor(t[o-1])),r==="--"){e=e.concat(t.slice(o));break}else n&&n.required?e.push(r):r.length>1&&r[0]==="-"&&r[1]!=="-"?r.slice(1).split("").forEach(function(s){e.push("-"+s)}):/^--/.test(r)&&~(i=r.indexOf("="))?e.push(r.slice(0,i),r.slice(i+1)):e.push(r);return e};j.prototype.parseArgs=function(t,e){var r;return t.length?(r=t[0],this.listeners("command:"+r).length?this.emit("command:"+t.shift(),t,e):this.emit("command:*",t)):(hs(this,e),e.length>0&&this.unknownOption(e[0]),this.commands.length===0&&this._args.filter(function(n){return n.required}).length===0&&this.emit("command:*")),this};j.prototype.optionFor=function(t){for(var e=0,r=this.options.length;e<r;++e)if(this.options[e].is(t))return this.options[e]};j.prototype.parseOptions=function(t){for(var e=[],r=t.length,n,i,o,a=[],s=0;s<r;++s){if(o=t[s],n){e.push(o);continue}if(o==="--"){n=!0;continue}if(i=this.optionFor(o),i){if(i.required){if(o=t[++s],o==null)return this.optionMissingArgument(i);this.emit("option:"+i.name(),o)}else i.optional?(o=t[s+1],o==null||o[0]==="-"&&o!=="-"?o=null:++s,this.emit("option:"+i.name(),o)):this.emit("option:"+i.name());continue}if(o.length>1&&o[0]==="-"){a.push(o),s+1<t.length&&t[s+1][0]!=="-"&&a.push(t[++s]);continue}e.push(o)}return{args:e,unknown:a}};j.prototype.opts=function(){for(var t={},e=this.options.length,r=0;r<e;r++){var n=this.options[r].attributeName();t[n]=n===this._versionOptionName?this._version:this[n]}return t};j.prototype.missingArgument=function(t){console.error("error: missing required argument `%s'",t),process.exit(1)};j.prototype.optionMissingArgument=function(t,e){e?console.error("error: option `%s' argument missing, got `%s'",t.flags,e):console.error("error: option `%s' argument missing",t.flags),process.exit(1)};j.prototype.unknownOption=function(t){this._allowUnknownOption||(console.error("error: unknown option `%s'",t),process.exit(1))};j.prototype.variadicArgNotLast=function(t){console.error("error: variadic arguments must be last `%s'",t),process.exit(1)};j.prototype.version=function(t,e){if(arguments.length===0)return this._version;this._version=t,e=e||"-V, --version";var r=new Nt(e,"output the version number");return this._versionOptionName=r.long.substr(2)||"version",this.options.push(r),this.on("option:"+this._versionOptionName,function(){process.stdout.write(t+`
3
+ `),process.exit(0)}),this};j.prototype.description=function(t,e){return arguments.length===0?this._description:(this._description=t,this._argsDescription=e,this)};j.prototype.alias=function(t){var e=this;if(this.commands.length!==0&&(e=this.commands[this.commands.length-1]),arguments.length===0)return e._alias;if(t===e._name)throw new Error("Command alias can't be the same as its name");return e._alias=t,this};j.prototype.usage=function(t){var e=this._args.map(function(n){return _s(n)}),r="[options]"+(this.commands.length?" [command]":"")+(this._args.length?" "+e.join(" "):"");return arguments.length===0?this._usage||r:(this._usage=t,this)};j.prototype.name=function(t){return arguments.length===0?this._name:(this._name=t,this)};j.prototype.prepareCommands=function(){return this.commands.filter(function(t){return!t._noHelp}).map(function(t){var e=t._args.map(function(r){return _s(r)}).join(" ");return[t._name+(t._alias?"|"+t._alias:"")+(t.options.length?" [options]":"")+(e?" "+e:""),t._description]})};j.prototype.largestCommandLength=function(){var t=this.prepareCommands();return t.reduce(function(e,r){return Math.max(e,r[0].length)},0)};j.prototype.largestOptionLength=function(){var t=[].slice.call(this.options);return t.push({flags:"-h, --help"}),t.reduce(function(e,r){return Math.max(e,r.flags.length)},0)};j.prototype.largestArgLength=function(){return this._args.reduce(function(t,e){return Math.max(t,e.name.length)},0)};j.prototype.padWidth=function(){var t=this.largestOptionLength();return this._argsDescription&&this._args.length&&this.largestArgLength()>t&&(t=this.largestArgLength()),this.commands&&this.commands.length&&this.largestCommandLength()>t&&(t=this.largestCommandLength()),t};j.prototype.optionHelp=function(){var t=this.padWidth();return this.options.map(function(e){return Fr(e.flags,t)+" "+e.description+(e.bool&&e.defaultValue!==void 0?" (default: "+JSON.stringify(e.defaultValue)+")":"")}).concat([Fr("-h, --help",t)+" output usage information"]).join(`
4
+ `)};j.prototype.commandHelp=function(){if(!this.commands.length)return"";var t=this.prepareCommands(),e=this.padWidth();return["Commands:",t.map(function(r){var n=r[1]?" "+r[1]:"";return(n?Fr(r[0],e):r[0])+n}).join(`
5
5
  `).replace(/^/gm," "),""].join(`
6
- `)};U.prototype.helpInformation=function(){var t=[];if(this._description){t=[this._description,""];var e=this._argsDescription;if(e&&this._args.length){var r=this.padWidth();t.push("Arguments:"),t.push(""),this._args.forEach(function(u){t.push(" "+ln(u.name,r)+" "+e[u.name])}),t.push("")}}var n=this._name;this._alias&&(n=n+"|"+this._alias);var i=["Usage: "+n+" "+this.usage(),""],o=[],s=this.commandHelp();s&&(o=[s]);var a=["Options:",""+this.optionHelp().replace(/^/gm," "),""];return i.concat(t).concat(a).concat(o).join(`
7
- `)};U.prototype.outputHelp=function(t){t||(t=function(e){return e}),process.stdout.write(t(this.helpInformation())),this.emit("--help")};U.prototype.help=function(t){this.outputHelp(t),process.exit()};function mh(t){return t.split("-").reduce(function(e,r){return e+r[0].toUpperCase()+r.slice(1)})}function ln(t,e){var r=Math.max(0,e-t.length);return t+Array(r+1).join(" ")}function hu(t,e){e=e||[];for(var r=0;r<e.length;r++)(e[r]==="--help"||e[r]==="-h")&&(t.outputHelp(),process.exit(0))}function vu(t){var e=t.name+(t.variadic===!0?"...":"");return t.required?"<"+e+">":"["+e+"]"}function Vi(t){try{if(pu.statSync(t).isFile())return!0}catch{return!1}}});var q=b((n0,pn)=>{var yu,bu,Su,Eu,Tu,wu,Ou,Cu,xu,dn,Wi,Ru,Iu,Jt,Au,Mu,Pu,Nu,qu,ku,Du,Lu,Fu;(function(t){var e=typeof global=="object"?global:typeof self=="object"?self:typeof this=="object"?this:{};typeof define=="function"&&define.amd?define("tslib",["exports"],function(n){t(r(e,r(n)))}):typeof pn=="object"&&typeof pn.exports=="object"?t(r(e,r(pn.exports))):t(r(e));function r(n,i){return n!==e&&(typeof Object.create=="function"?Object.defineProperty(n,"__esModule",{value:!0}):n.__esModule=!0),function(o,s){return n[o]=i?i(o,s):s}}})(function(t){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var i in n)n.hasOwnProperty(i)&&(r[i]=n[i])};yu=function(r,n){e(r,n);function i(){this.constructor=r}r.prototype=n===null?Object.create(n):(i.prototype=n.prototype,new i)},bu=Object.assign||function(r){for(var n,i=1,o=arguments.length;i<o;i++){n=arguments[i];for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(r[s]=n[s])}return r},Su=function(r,n){var i={};for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&n.indexOf(o)<0&&(i[o]=r[o]);if(r!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,o=Object.getOwnPropertySymbols(r);s<o.length;s++)n.indexOf(o[s])<0&&Object.prototype.propertyIsEnumerable.call(r,o[s])&&(i[o[s]]=r[o[s]]);return i},Eu=function(r,n,i,o){var s=arguments.length,a=s<3?n:o===null?o=Object.getOwnPropertyDescriptor(n,i):o,u;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")a=Reflect.decorate(r,n,i,o);else for(var c=r.length-1;c>=0;c--)(u=r[c])&&(a=(s<3?u(a):s>3?u(n,i,a):u(n,i))||a);return s>3&&a&&Object.defineProperty(n,i,a),a},Tu=function(r,n){return function(i,o){n(i,o,r)}},wu=function(r,n){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,n)},Ou=function(r,n,i,o){function s(a){return a instanceof i?a:new i(function(u){u(a)})}return new(i||(i=Promise))(function(a,u){function c(h){try{d(o.next(h))}catch(_){u(_)}}function l(h){try{d(o.throw(h))}catch(_){u(_)}}function d(h){h.done?a(h.value):s(h.value).then(c,l)}d((o=o.apply(r,n||[])).next())})},Cu=function(r,n){var i={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},o,s,a,u;return u={next:c(0),throw:c(1),return:c(2)},typeof Symbol=="function"&&(u[Symbol.iterator]=function(){return this}),u;function c(d){return function(h){return l([d,h])}}function l(d){if(o)throw new TypeError("Generator is already executing.");for(;i;)try{if(o=1,s&&(a=d[0]&2?s.return:d[0]?s.throw||((a=s.return)&&a.call(s),0):s.next)&&!(a=a.call(s,d[1])).done)return a;switch(s=0,a&&(d=[d[0]&2,a.value]),d[0]){case 0:case 1:a=d;break;case 4:return i.label++,{value:d[1],done:!1};case 5:i.label++,s=d[1],d=[0];continue;case 7:d=i.ops.pop(),i.trys.pop();continue;default:if(a=i.trys,!(a=a.length>0&&a[a.length-1])&&(d[0]===6||d[0]===2)){i=0;continue}if(d[0]===3&&(!a||d[1]>a[0]&&d[1]<a[3])){i.label=d[1];break}if(d[0]===6&&i.label<a[1]){i.label=a[1],a=d;break}if(a&&i.label<a[2]){i.label=a[2],i.ops.push(d);break}a[2]&&i.ops.pop(),i.trys.pop();continue}d=n.call(r,i)}catch(h){d=[6,h],s=0}finally{o=a=0}if(d[0]&5)throw d[1];return{value:d[0]?d[1]:void 0,done:!0}}},Fu=function(r,n,i,o){o===void 0&&(o=i),r[o]=n[i]},xu=function(r,n){for(var i in r)i!=="default"&&!n.hasOwnProperty(i)&&(n[i]=r[i])},dn=function(r){var n=typeof Symbol=="function"&&Symbol.iterator,i=n&&r[n],o=0;if(i)return i.call(r);if(r&&typeof r.length=="number")return{next:function(){return r&&o>=r.length&&(r=void 0),{value:r&&r[o++],done:!r}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")},Wi=function(r,n){var i=typeof Symbol=="function"&&r[Symbol.iterator];if(!i)return r;var o=i.call(r),s,a=[],u;try{for(;(n===void 0||n-- >0)&&!(s=o.next()).done;)a.push(s.value)}catch(c){u={error:c}}finally{try{s&&!s.done&&(i=o.return)&&i.call(o)}finally{if(u)throw u.error}}return a},Ru=function(){for(var r=[],n=0;n<arguments.length;n++)r=r.concat(Wi(arguments[n]));return r},Iu=function(){for(var r=0,n=0,i=arguments.length;n<i;n++)r+=arguments[n].length;for(var o=Array(r),s=0,n=0;n<i;n++)for(var a=arguments[n],u=0,c=a.length;u<c;u++,s++)o[s]=a[u];return o},Jt=function(r){return this instanceof Jt?(this.v=r,this):new Jt(r)},Au=function(r,n,i){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o=i.apply(r,n||[]),s,a=[];return s={},u("next"),u("throw"),u("return"),s[Symbol.asyncIterator]=function(){return this},s;function u(S){o[S]&&(s[S]=function(T){return new Promise(function(R,A){a.push([S,T,R,A])>1||c(S,T)})})}function c(S,T){try{l(o[S](T))}catch(R){_(a[0][3],R)}}function l(S){S.value instanceof Jt?Promise.resolve(S.value.v).then(d,h):_(a[0][2],S)}function d(S){c("next",S)}function h(S){c("throw",S)}function _(S,T){S(T),a.shift(),a.length&&c(a[0][0],a[0][1])}},Mu=function(r){var n,i;return n={},o("next"),o("throw",function(s){throw s}),o("return"),n[Symbol.iterator]=function(){return this},n;function o(s,a){n[s]=r[s]?function(u){return(i=!i)?{value:Jt(r[s](u)),done:s==="return"}:a?a(u):u}:a}},Pu=function(r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r[Symbol.asyncIterator],i;return n?n.call(r):(r=typeof dn=="function"?dn(r):r[Symbol.iterator](),i={},o("next"),o("throw"),o("return"),i[Symbol.asyncIterator]=function(){return this},i);function o(a){i[a]=r[a]&&function(u){return new Promise(function(c,l){u=r[a](u),s(c,l,u.done,u.value)})}}function s(a,u,c,l){Promise.resolve(l).then(function(d){a({value:d,done:c})},u)}},Nu=function(r,n){return Object.defineProperty?Object.defineProperty(r,"raw",{value:n}):r.raw=n,r},qu=function(r){if(r&&r.__esModule)return r;var n={};if(r!=null)for(var i in r)Object.hasOwnProperty.call(r,i)&&(n[i]=r[i]);return n.default=r,n},ku=function(r){return r&&r.__esModule?r:{default:r}},Du=function(r,n){if(!n.has(r))throw new TypeError("attempted to get private field on non-instance");return n.get(r)},Lu=function(r,n,i){if(!n.has(r))throw new TypeError("attempted to set private field on non-instance");return n.set(r,i),i},t("__extends",yu),t("__assign",bu),t("__rest",Su),t("__decorate",Eu),t("__param",Tu),t("__metadata",wu),t("__awaiter",Ou),t("__generator",Cu),t("__exportStar",xu),t("__createBinding",Fu),t("__values",dn),t("__read",Wi),t("__spread",Ru),t("__spreadArrays",Iu),t("__await",Jt),t("__asyncGenerator",Au),t("__asyncDelegator",Mu),t("__asyncValues",Pu),t("__makeTemplateObject",Nu),t("__importStar",qu),t("__importDefault",ku),t("__classPrivateFieldGet",Du),t("__classPrivateFieldSet",Lu)})});var ju=b(hn=>{Object.defineProperty(hn,"__esModule",{value:!0});var yh;(function(t){t[t.None=0]="None",t[t.Error=1]="Error",t[t.Debug=2]="Debug",t[t.Verbose=3]="Verbose"})(yh=hn.LogLevel||(hn.LogLevel={}))});var Uu=b(Xt=>{Object.defineProperty(Xt,"__esModule",{value:!0});var bh;(function(t){t.Ok="ok",t.Exited="exited",t.Crashed="crashed",t.Abnormal="abnormal"})(bh=Xt.SessionStatus||(Xt.SessionStatus={}));var Sh;(function(t){t.Ok="ok",t.Errored="errored",t.Crashed="crashed"})(Sh=Xt.RequestSessionStatus||(Xt.RequestSessionStatus={}))});var Bu=b(Qt=>{Object.defineProperty(Qt,"__esModule",{value:!0});var Hu;(function(t){t.Fatal="fatal",t.Error="error",t.Warning="warning",t.Log="log",t.Info="info",t.Debug="debug",t.Critical="critical"})(Hu=Qt.Severity||(Qt.Severity={}));(function(t){function e(r){switch(r){case"debug":return t.Debug;case"info":return t.Info;case"warn":case"warning":return t.Warning;case"error":return t.Error;case"fatal":return t.Fatal;case"critical":return t.Critical;case"log":default:return t.Log}}t.fromString=e})(Hu=Qt.Severity||(Qt.Severity={}))});var zu=b(Zt=>{Object.defineProperty(Zt,"__esModule",{value:!0});var Gu;(function(t){t.Unknown="unknown",t.Skipped="skipped",t.Success="success",t.RateLimit="rate_limit",t.Invalid="invalid",t.Failed="failed"})(Gu=Zt.Status||(Zt.Status={}));(function(t){function e(r){return r>=200&&r<300?t.Success:r===429?t.RateLimit:r>=400&&r<500?t.Invalid:r>=500?t.Failed:t.Unknown}t.fromHttpCode=e})(Gu=Zt.Status||(Zt.Status={}))});var Vu=b(vn=>{Object.defineProperty(vn,"__esModule",{value:!0});var Eh;(function(t){t.Explicit="explicitly_set",t.Sampler="client_sampler",t.Rate="client_rate",t.Inheritance="inheritance"})(Eh=vn.TransactionSamplingMethod||(vn.TransactionSamplingMethod={}))});var Wu=b(_n=>{Object.defineProperty(_n,"__esModule",{value:!0});var Th;(function(t){t.BeforeSend="before_send",t.EventProcessor="event_processor",t.NetworkError="network_error",t.QueueOverflow="queue_overflow",t.RateLimitBackoff="ratelimit_backoff",t.SampleRate="sample_rate"})(Th=_n.Outcome||(_n.Outcome={}))});var se=b(Qe=>{Object.defineProperty(Qe,"__esModule",{value:!0});var wh=ju();Qe.LogLevel=wh.LogLevel;var $u=Uu();Qe.SessionStatus=$u.SessionStatus;Qe.RequestSessionStatus=$u.RequestSessionStatus;var Oh=Bu();Qe.Severity=Oh.Severity;var Ch=zu();Qe.Status=Ch.Status;var xh=Vu();Qe.TransactionSamplingMethod=xh.TransactionSamplingMethod;var Rh=Wu();Qe.Outcome=Rh.Outcome});var Yu=b($i=>{Object.defineProperty($i,"__esModule",{value:!0});function Ih(t){t.then(null,function(e){console.error(e)})}$i.forget=Ih});var yn=b((xr,mn)=>{Object.defineProperty(xr,"__esModule",{value:!0});function Ah(){return Object.prototype.toString.call(typeof process!="undefined"?process:0)==="[object process]"}xr.isNodeEnv=Ah;function gn(t,e){return t.require(e)}xr.dynamicRequire=gn;function Mh(t){var e;try{e=gn(mn,t)}catch{}try{var r=gn(mn,"process").cwd;e=gn(mn,r()+"/node_modules/"+t)}catch{}return e}xr.loadModule=Mh});var pt=b(Yi=>{Object.defineProperty(Yi,"__esModule",{value:!0});var Ph=yn(),Nh={};function qh(){return Ph.isNodeEnv()?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Nh}Yi.getGlobalObject=qh});var Rt=b(he=>{Object.defineProperty(he,"__esModule",{value:!0});function kh(t){switch(Object.prototype.toString.call(t)){case"[object Error]":return!0;case"[object Exception]":return!0;case"[object DOMException]":return!0;default:return bn(t,Error)}}he.isError=kh;function Dh(t){return Object.prototype.toString.call(t)==="[object ErrorEvent]"}he.isErrorEvent=Dh;function Lh(t){return Object.prototype.toString.call(t)==="[object DOMError]"}he.isDOMError=Lh;function Fh(t){return Object.prototype.toString.call(t)==="[object DOMException]"}he.isDOMException=Fh;function jh(t){return Object.prototype.toString.call(t)==="[object String]"}he.isString=jh;function Uh(t){return t===null||typeof t!="object"&&typeof t!="function"}he.isPrimitive=Uh;function Ku(t){return Object.prototype.toString.call(t)==="[object Object]"}he.isPlainObject=Ku;function Hh(t){return typeof Event!="undefined"&&bn(t,Event)}he.isEvent=Hh;function Bh(t){return typeof Element!="undefined"&&bn(t,Element)}he.isElement=Bh;function Gh(t){return Object.prototype.toString.call(t)==="[object RegExp]"}he.isRegExp=Gh;function zh(t){return Boolean(t&&t.then&&typeof t.then=="function")}he.isThenable=zh;function Vh(t){return Ku(t)&&"nativeEvent"in t&&"preventDefault"in t&&"stopPropagation"in t}he.isSyntheticEvent=Vh;function bn(t,e){try{return t instanceof e}catch{return!1}}he.isInstanceOf=bn});var Ki=b(Sn=>{Object.defineProperty(Sn,"__esModule",{value:!0});var Wh=pt(),$h=Rt();function Yh(t,e){try{for(var r=t,n=5,i=80,o=[],s=0,a=0,u=" > ",c=u.length,l=void 0;r&&s++<n&&(l=Kh(r,e),!(l==="html"||s>1&&a+o.length*c+l.length>=i));)o.push(l),a+=l.length,r=r.parentNode;return o.reverse().join(u)}catch{return"<unknown>"}}Sn.htmlTreeAsString=Yh;function Kh(t,e){var r,n,i=t,o=[],s,a,u,c,l;if(!i||!i.tagName)return"";o.push(i.tagName.toLowerCase());var d=((r=e)===null||r===void 0?void 0:r.length)?e.filter(function(_){return i.getAttribute(_)}).map(function(_){return[_,i.getAttribute(_)]}):null;if((n=d)===null||n===void 0?void 0:n.length)d.forEach(function(_){o.push("["+_[0]+'="'+_[1]+'"]')});else if(i.id&&o.push("#"+i.id),s=i.className,s&&$h.isString(s))for(a=s.split(/\s+/),l=0;l<a.length;l++)o.push("."+a[l]);var h=["type","name","title","alt"];for(l=0;l<h.length;l++)u=h[l],c=i.getAttribute(u),c&&o.push("["+u+'="'+c+'"]');return o.join("")}function Jh(){var t=Wh.getGlobalObject();try{return t.document.location.href}catch{return""}}Sn.getLocationHref=Jh});var Ju=b(Ji=>{Object.defineProperty(Ji,"__esModule",{value:!0});Ji.setPrototypeOf=Object.setPrototypeOf||({__proto__:[]}instanceof Array?Xh:Qh);function Xh(t,e){return t.__proto__=e,t}function Qh(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(t,r)||(t[r]=e[r]);return t}});var En=b(Xi=>{Object.defineProperty(Xi,"__esModule",{value:!0});var Zh=q(),ev=Ju(),tv=function(t){Zh.__extends(e,t);function e(r){var n=this.constructor,i=t.call(this,r)||this;return i.message=r,i.name=n.prototype.constructor.name,ev.setPrototypeOf(i,n.prototype),i}return e}(Error);Xi.SentryError=tv});var Xu=b(Qi=>{Object.defineProperty(Qi,"__esModule",{value:!0});var rv=q(),Rr=En(),nv=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+))?@)([\w.-]+)(?::(\d+))?\/(.+)/,Ir="Invalid Dsn",iv=function(){function t(e){typeof e=="string"?this._fromString(e):this._fromComponents(e),this._validate()}return t.prototype.toString=function(e){e===void 0&&(e=!1);var r=this,n=r.host,i=r.path,o=r.pass,s=r.port,a=r.projectId,u=r.protocol,c=r.publicKey;return u+"://"+c+(e&&o?":"+o:"")+("@"+n+(s?":"+s:"")+"/"+(i&&i+"/")+a)},t.prototype._fromString=function(e){var r=nv.exec(e);if(!r)throw new Rr.SentryError(Ir);var n=rv.__read(r.slice(1),6),i=n[0],o=n[1],s=n[2],a=s===void 0?"":s,u=n[3],c=n[4],l=c===void 0?"":c,d=n[5],h="",_=d,S=_.split("/");if(S.length>1&&(h=S.slice(0,-1).join("/"),_=S.pop()),_){var T=_.match(/^\d+/);T&&(_=T[0])}this._fromComponents({host:u,pass:a,path:h,projectId:_,port:l,protocol:i,publicKey:o})},t.prototype._fromComponents=function(e){"user"in e&&!("publicKey"in e)&&(e.publicKey=e.user),this.user=e.publicKey||"",this.protocol=e.protocol,this.publicKey=e.publicKey||"",this.pass=e.pass||"",this.host=e.host,this.port=e.port||"",this.path=e.path||"",this.projectId=e.projectId},t.prototype._validate=function(){var e=this;if(["protocol","publicKey","host","projectId"].forEach(function(r){if(!e[r])throw new Rr.SentryError(Ir+": "+r+" missing")}),!this.projectId.match(/^\d+$/))throw new Rr.SentryError(Ir+": Invalid projectId "+this.projectId);if(this.protocol!=="http"&&this.protocol!=="https")throw new Rr.SentryError(Ir+": Invalid protocol "+this.protocol);if(this.port&&isNaN(parseInt(this.port,10)))throw new Rr.SentryError(Ir+": Invalid port "+this.port)},t}();Qi.Dsn=iv});var On=b(wn=>{Object.defineProperty(wn,"__esModule",{value:!0});var Qu=pt(),It=Qu.getGlobalObject(),Zi="Sentry Logger ";function Tn(t){var e=Qu.getGlobalObject(),r=["debug","info","warn","error","log","assert"];if(!("console"in e))return t();var n=e.console,i={};r.forEach(function(s){s in e.console&&n[s].__sentry_original__&&(i[s]=n[s],n[s]=n[s].__sentry_original__)});var o=t();return Object.keys(i).forEach(function(s){n[s]=i[s]}),o}wn.consoleSandbox=Tn;var ov=function(){function t(){this._enabled=!1}return t.prototype.disable=function(){this._enabled=!1},t.prototype.enable=function(){this._enabled=!0},t.prototype.log=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];!this._enabled||Tn(function(){It.console.log(Zi+"[Log]: "+e.join(" "))})},t.prototype.warn=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];!this._enabled||Tn(function(){It.console.warn(Zi+"[Warn]: "+e.join(" "))})},t.prototype.error=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];!this._enabled||Tn(function(){It.console.error(Zi+"[Error]: "+e.join(" "))})},t}();It.__SENTRY__=It.__SENTRY__||{};var sv=It.__SENTRY__.logger||(It.__SENTRY__.logger=new ov);wn.logger=sv});var to=b(eo=>{Object.defineProperty(eo,"__esModule",{value:!0});var av=function(){function t(){this._hasWeakSet=typeof WeakSet=="function",this._inner=this._hasWeakSet?new WeakSet:[]}return t.prototype.memoize=function(e){if(this._hasWeakSet)return this._inner.has(e)?!0:(this._inner.add(e),!1);for(var r=0;r<this._inner.length;r++){var n=this._inner[r];if(n===e)return!0}return this._inner.push(e),!1},t.prototype.unmemoize=function(e){if(this._hasWeakSet)this._inner.delete(e);else for(var r=0;r<this._inner.length;r++)if(this._inner[r]===e){this._inner.splice(r,1);break}},t}();eo.Memo=av});var Cn=b(no=>{Object.defineProperty(no,"__esModule",{value:!0});var ro="<anonymous>";function uv(t){try{return!t||typeof t!="function"?ro:t.name||ro}catch{return ro}}no.getFunctionName=uv});var xn=b(At=>{Object.defineProperty(At,"__esModule",{value:!0});var Zu=Rt();function cv(t,e){return e===void 0&&(e=0),typeof t!="string"||e===0||t.length<=e?t:t.substr(0,e)+"..."}At.truncate=cv;function lv(t,e){var r=t,n=r.length;if(n<=150)return r;e>n&&(e=n);var i=Math.max(e-60,0);i<5&&(i=0);var o=Math.min(i+140,n);return o>n-5&&(o=n),o===n&&(i=Math.max(o-140,0)),r=r.slice(i,o),i>0&&(r="'{snip} "+r),o<n&&(r+=" {snip}"),r}At.snipLine=lv;function fv(t,e){if(!Array.isArray(t))return"";for(var r=[],n=0;n<t.length;n++){var i=t[n];try{r.push(String(i))}catch{r.push("[value cannot be serialized]")}}return r.join(e)}At.safeJoin=fv;function dv(t,e){return Zu.isString(t)?Zu.isRegExp(e)?e.test(t):typeof e=="string"?t.indexOf(e)!==-1:!1:!1}At.isMatchingPattern=dv;function pv(t){return t.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}At.escapeStringForRegex=pv});var so=b(ze=>{Object.defineProperty(ze,"__esModule",{value:!0});var hv=q(),ec=Ki(),Ge=Rt(),vv=to(),_v=Cn(),tc=xn();function gv(t,e,r){if(e in t){var n=t[e],i=r(n);if(typeof i=="function")try{i.prototype=i.prototype||{},Object.defineProperties(i,{__sentry_original__:{enumerable:!1,value:n}})}catch{}t[e]=i}}ze.fill=gv;function mv(t){return Object.keys(t).map(function(e){return encodeURIComponent(e)+"="+encodeURIComponent(t[e])}).join("&")}ze.urlEncode=mv;function rc(t){if(Ge.isError(t)){var e=t,r={message:e.message,name:e.name,stack:e.stack};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}if(Ge.isEvent(t)){var i=t,o={};o.type=i.type;try{o.target=Ge.isElement(i.target)?ec.htmlTreeAsString(i.target):Object.prototype.toString.call(i.target)}catch{o.target="<unknown>"}try{o.currentTarget=Ge.isElement(i.currentTarget)?ec.htmlTreeAsString(i.currentTarget):Object.prototype.toString.call(i.currentTarget)}catch{o.currentTarget="<unknown>"}typeof CustomEvent!="undefined"&&Ge.isInstanceOf(t,CustomEvent)&&(o.detail=i.detail);for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(o[s]=i[s]);return o}return t}function yv(t){return~-encodeURI(t).split(/%..|./).length}function bv(t){return yv(JSON.stringify(t))}function nc(t,e,r){e===void 0&&(e=3),r===void 0&&(r=100*1024);var n=oc(t,e);return bv(n)>r?nc(t,e-1,r):n}ze.normalizeToSize=nc;function Sv(t){var e=Object.prototype.toString.call(t);if(typeof t=="string")return t;if(e==="[object Object]")return"[Object]";if(e==="[object Array]")return"[Array]";var r=ic(t);return Ge.isPrimitive(r)?r:e}function ic(t,e){return e==="domain"&&t&&typeof t=="object"&&t._events?"[Domain]":e==="domainEmitter"?"[DomainEmitter]":typeof global!="undefined"&&t===global?"[Global]":typeof window!="undefined"&&t===window?"[Window]":typeof document!="undefined"&&t===document?"[Document]":Ge.isSyntheticEvent(t)?"[SyntheticEvent]":typeof t=="number"&&t!==t?"[NaN]":t===void 0?"[undefined]":typeof t=="function"?"[Function: "+_v.getFunctionName(t)+"]":typeof t=="symbol"?"["+String(t)+"]":typeof t=="bigint"?"[BigInt: "+String(t)+"]":t}function io(t,e,r,n){if(r===void 0&&(r=1/0),n===void 0&&(n=new vv.Memo),r===0)return Sv(e);if(e!=null&&typeof e.toJSON=="function")return e.toJSON();var i=ic(e,t);if(Ge.isPrimitive(i))return i;var o=rc(e),s=Array.isArray(e)?[]:{};if(n.memoize(e))return"[Circular ~]";for(var a in o)!Object.prototype.hasOwnProperty.call(o,a)||(s[a]=io(a,o[a],r-1,n));return n.unmemoize(e),s}ze.walk=io;function oc(t,e){try{return JSON.parse(JSON.stringify(t,function(r,n){return io(r,n,e)}))}catch{return"**non-serializable**"}}ze.normalize=oc;function Ev(t,e){e===void 0&&(e=40);var r=Object.keys(rc(t));if(r.sort(),!r.length)return"[object has no keys]";if(r[0].length>=e)return tc.truncate(r[0],e);for(var n=r.length;n>0;n--){var i=r.slice(0,n).join(", ");if(!(i.length>e))return n===r.length?i:tc.truncate(i,e)}return""}ze.extractExceptionKeysForMessage=Ev;function oo(t){var e,r;if(Ge.isPlainObject(t)){var n=t,i={};try{for(var o=hv.__values(Object.keys(n)),s=o.next();!s.done;s=o.next()){var a=s.value;typeof n[a]!="undefined"&&(i[a]=oo(n[a]))}}catch(u){e={error:u}}finally{try{s&&!s.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}return i}return Array.isArray(t)?t.map(oo):t}ze.dropUndefinedKeys=oo;function Tv(t){var e;switch(!0){case t==null:e=new String(t);break;case(typeof t=="symbol"||typeof t=="bigint"):e=Object(t);break;case Ge.isPrimitive(t):e=new t.constructor(t);break;default:e=t;break}return e}ze.objectify=Tv});var co=b(De=>{Object.defineProperty(De,"__esModule",{value:!0});var Rn=pt(),wv=On();function Ov(){try{return new ErrorEvent(""),!0}catch{return!1}}De.supportsErrorEvent=Ov;function Cv(){try{return new DOMError(""),!0}catch{return!1}}De.supportsDOMError=Cv;function xv(){try{return new DOMException(""),!0}catch{return!1}}De.supportsDOMException=xv;function ao(){if(!("fetch"in Rn.getGlobalObject()))return!1;try{return new Headers,new Request(""),new Response,!0}catch{return!1}}De.supportsFetch=ao;function uo(t){return t&&/^function fetch\(\)\s+\{\s+\[native code\]\s+\}$/.test(t.toString())}De.isNativeFetch=uo;function Rv(){if(!ao())return!1;var t=Rn.getGlobalObject();if(uo(t.fetch))return!0;var e=!1,r=t.document;if(r&&typeof r.createElement=="function")try{var n=r.createElement("iframe");n.hidden=!0,r.head.appendChild(n),n.contentWindow&&n.contentWindow.fetch&&(e=uo(n.contentWindow.fetch)),r.head.removeChild(n)}catch(i){wv.logger.warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ",i)}return e}De.supportsNativeFetch=Rv;function Iv(){return"ReportingObserver"in Rn.getGlobalObject()}De.supportsReportingObserver=Iv;function Av(){if(!ao())return!1;try{return new Request("_",{referrerPolicy:"origin"}),!0}catch{return!1}}De.supportsReferrerPolicy=Av;function Mv(){var t=Rn.getGlobalObject(),e=t.chrome,r=e&&e.app&&e.app.runtime,n="history"in t&&!!t.history.pushState&&!!t.history.replaceState;return!r&&n}De.supportsHistory=Mv});var lc=b(po=>{Object.defineProperty(po,"__esModule",{value:!0});var er=q(),Pv=pt(),In=Rt(),sc=On(),Ze=so(),Nv=Cn(),ac=co(),K=Pv.getGlobalObject(),Ar={},uc={};function qv(t){if(!uc[t])switch(uc[t]=!0,t){case"console":Dv();break;case"dom":Vv();break;case"xhr":Uv();break;case"fetch":Lv();break;case"history":Hv();break;case"error":Wv();break;case"unhandledrejection":$v();break;default:sc.logger.warn("unknown instrumentation type:",t)}}function kv(t){!t||typeof t.type!="string"||typeof t.callback!="function"||(Ar[t.type]=Ar[t.type]||[],Ar[t.type].push(t.callback),qv(t.type))}po.addInstrumentationHandler=kv;function Le(t,e){var r,n;if(!(!t||!Ar[t]))try{for(var i=er.__values(Ar[t]||[]),o=i.next();!o.done;o=i.next()){var s=o.value;try{s(e)}catch(a){sc.logger.error(`Error while triggering instrumentation handler.
6
+ `)};j.prototype.helpInformation=function(){var t=[];if(this._description){t=[this._description,""];var e=this._argsDescription;if(e&&this._args.length){var r=this.padWidth();t.push("Arguments:"),t.push(""),this._args.forEach(function(u){t.push(" "+Fr(u.name,r)+" "+e[u.name])}),t.push("")}}var n=this._name;this._alias&&(n=n+"|"+this._alias);var i=["Usage: "+n+" "+this.usage(),""],o=[],a=this.commandHelp();a&&(o=[a]);var s=["Options:",""+this.optionHelp().replace(/^/gm," "),""];return i.concat(t).concat(s).concat(o).join(`
7
+ `)};j.prototype.outputHelp=function(t){t||(t=function(e){return e}),process.stdout.write(t(this.helpInformation())),this.emit("--help")};j.prototype.help=function(t){this.outputHelp(t),process.exit()};function jd(t){return t.split("-").reduce(function(e,r){return e+r[0].toUpperCase()+r.slice(1)})}function Fr(t,e){var r=Math.max(0,e-t.length);return t+Array(r+1).join(" ")}function hs(t,e){e=e||[];for(var r=0;r<e.length;r++)(e[r]==="--help"||e[r]==="-h")&&(t.outputHelp(),process.exit(0))}function _s(t){var e=t.name+(t.variadic===!0?"...":"");return t.required?"<"+e+">":"["+e+"]"}function pi(t){try{if(ps.statSync(t).isFile())return!0}catch{return!1}}});var N=b((Hb,Lr)=>{var ys,bs,Ss,Es,Ts,Os,ws,xs,Is,Hr,hi,Cs,Rs,Mt,As,Ps,qs,Ns,Ms,ks,Ds,Fs,js;(function(t){var e=typeof global=="object"?global:typeof self=="object"?self:typeof this=="object"?this:{};typeof define=="function"&&define.amd?define("tslib",["exports"],function(n){t(r(e,r(n)))}):typeof Lr=="object"&&typeof Lr.exports=="object"?t(r(e,r(Lr.exports))):t(r(e));function r(n,i){return n!==e&&(typeof Object.create=="function"?Object.defineProperty(n,"__esModule",{value:!0}):n.__esModule=!0),function(o,a){return n[o]=i?i(o,a):a}}})(function(t){var e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var i in n)n.hasOwnProperty(i)&&(r[i]=n[i])};ys=function(r,n){e(r,n);function i(){this.constructor=r}r.prototype=n===null?Object.create(n):(i.prototype=n.prototype,new i)},bs=Object.assign||function(r){for(var n,i=1,o=arguments.length;i<o;i++){n=arguments[i];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(r[a]=n[a])}return r},Ss=function(r,n){var i={};for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&n.indexOf(o)<0&&(i[o]=r[o]);if(r!=null&&typeof Object.getOwnPropertySymbols=="function")for(var a=0,o=Object.getOwnPropertySymbols(r);a<o.length;a++)n.indexOf(o[a])<0&&Object.prototype.propertyIsEnumerable.call(r,o[a])&&(i[o[a]]=r[o[a]]);return i},Es=function(r,n,i,o){var a=arguments.length,s=a<3?n:o===null?o=Object.getOwnPropertyDescriptor(n,i):o,u;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")s=Reflect.decorate(r,n,i,o);else for(var c=r.length-1;c>=0;c--)(u=r[c])&&(s=(a<3?u(s):a>3?u(n,i,s):u(n,i))||s);return a>3&&s&&Object.defineProperty(n,i,s),s},Ts=function(r,n){return function(i,o){n(i,o,r)}},Os=function(r,n){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,n)},ws=function(r,n,i,o){function a(s){return s instanceof i?s:new i(function(u){u(s)})}return new(i||(i=Promise))(function(s,u){function c(h){try{d(o.next(h))}catch(y){u(y)}}function l(h){try{d(o.throw(h))}catch(y){u(y)}}function d(h){h.done?s(h.value):a(h.value).then(c,l)}d((o=o.apply(r,n||[])).next())})},xs=function(r,n){var i={label:0,sent:function(){if(s[0]&1)throw s[1];return s[1]},trys:[],ops:[]},o,a,s,u;return u={next:c(0),throw:c(1),return:c(2)},typeof Symbol=="function"&&(u[Symbol.iterator]=function(){return this}),u;function c(d){return function(h){return l([d,h])}}function l(d){if(o)throw new TypeError("Generator is already executing.");for(;i;)try{if(o=1,a&&(s=d[0]&2?a.return:d[0]?a.throw||((s=a.return)&&s.call(a),0):a.next)&&!(s=s.call(a,d[1])).done)return s;switch(a=0,s&&(d=[d[0]&2,s.value]),d[0]){case 0:case 1:s=d;break;case 4:return i.label++,{value:d[1],done:!1};case 5:i.label++,a=d[1],d=[0];continue;case 7:d=i.ops.pop(),i.trys.pop();continue;default:if(s=i.trys,!(s=s.length>0&&s[s.length-1])&&(d[0]===6||d[0]===2)){i=0;continue}if(d[0]===3&&(!s||d[1]>s[0]&&d[1]<s[3])){i.label=d[1];break}if(d[0]===6&&i.label<s[1]){i.label=s[1],s=d;break}if(s&&i.label<s[2]){i.label=s[2],i.ops.push(d);break}s[2]&&i.ops.pop(),i.trys.pop();continue}d=n.call(r,i)}catch(h){d=[6,h],a=0}finally{o=s=0}if(d[0]&5)throw d[1];return{value:d[0]?d[1]:void 0,done:!0}}},js=function(r,n,i,o){o===void 0&&(o=i),r[o]=n[i]},Is=function(r,n){for(var i in r)i!=="default"&&!n.hasOwnProperty(i)&&(n[i]=r[i])},Hr=function(r){var n=typeof Symbol=="function"&&Symbol.iterator,i=n&&r[n],o=0;if(i)return i.call(r);if(r&&typeof r.length=="number")return{next:function(){return r&&o>=r.length&&(r=void 0),{value:r&&r[o++],done:!r}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")},hi=function(r,n){var i=typeof Symbol=="function"&&r[Symbol.iterator];if(!i)return r;var o=i.call(r),a,s=[],u;try{for(;(n===void 0||n-- >0)&&!(a=o.next()).done;)s.push(a.value)}catch(c){u={error:c}}finally{try{a&&!a.done&&(i=o.return)&&i.call(o)}finally{if(u)throw u.error}}return s},Cs=function(){for(var r=[],n=0;n<arguments.length;n++)r=r.concat(hi(arguments[n]));return r},Rs=function(){for(var r=0,n=0,i=arguments.length;n<i;n++)r+=arguments[n].length;for(var o=Array(r),a=0,n=0;n<i;n++)for(var s=arguments[n],u=0,c=s.length;u<c;u++,a++)o[a]=s[u];return o},Mt=function(r){return this instanceof Mt?(this.v=r,this):new Mt(r)},As=function(r,n,i){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var o=i.apply(r,n||[]),a,s=[];return a={},u("next"),u("throw"),u("return"),a[Symbol.asyncIterator]=function(){return this},a;function u(S){o[S]&&(a[S]=function(T){return new Promise(function(C,q){s.push([S,T,C,q])>1||c(S,T)})})}function c(S,T){try{l(o[S](T))}catch(C){y(s[0][3],C)}}function l(S){S.value instanceof Mt?Promise.resolve(S.value.v).then(d,h):y(s[0][2],S)}function d(S){c("next",S)}function h(S){c("throw",S)}function y(S,T){S(T),s.shift(),s.length&&c(s[0][0],s[0][1])}},Ps=function(r){var n,i;return n={},o("next"),o("throw",function(a){throw a}),o("return"),n[Symbol.iterator]=function(){return this},n;function o(a,s){n[a]=r[a]?function(u){return(i=!i)?{value:Mt(r[a](u)),done:a==="return"}:s?s(u):u}:s}},qs=function(r){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var n=r[Symbol.asyncIterator],i;return n?n.call(r):(r=typeof Hr=="function"?Hr(r):r[Symbol.iterator](),i={},o("next"),o("throw"),o("return"),i[Symbol.asyncIterator]=function(){return this},i);function o(s){i[s]=r[s]&&function(u){return new Promise(function(c,l){u=r[s](u),a(c,l,u.done,u.value)})}}function a(s,u,c,l){Promise.resolve(l).then(function(d){s({value:d,done:c})},u)}},Ns=function(r,n){return Object.defineProperty?Object.defineProperty(r,"raw",{value:n}):r.raw=n,r},Ms=function(r){if(r&&r.__esModule)return r;var n={};if(r!=null)for(var i in r)Object.hasOwnProperty.call(r,i)&&(n[i]=r[i]);return n.default=r,n},ks=function(r){return r&&r.__esModule?r:{default:r}},Ds=function(r,n){if(!n.has(r))throw new TypeError("attempted to get private field on non-instance");return n.get(r)},Fs=function(r,n,i){if(!n.has(r))throw new TypeError("attempted to set private field on non-instance");return n.set(r,i),i},t("__extends",ys),t("__assign",bs),t("__rest",Ss),t("__decorate",Es),t("__param",Ts),t("__metadata",Os),t("__awaiter",ws),t("__generator",xs),t("__exportStar",Is),t("__createBinding",js),t("__values",Hr),t("__read",hi),t("__spread",Cs),t("__spreadArrays",Rs),t("__await",Mt),t("__asyncGenerator",As),t("__asyncDelegator",Ps),t("__asyncValues",qs),t("__makeTemplateObject",Ns),t("__importStar",Ms),t("__importDefault",ks),t("__classPrivateFieldGet",Ds),t("__classPrivateFieldSet",Fs)})});var Hs=b(Ur=>{Object.defineProperty(Ur,"__esModule",{value:!0});var Hd;(function(t){t[t.None=0]="None",t[t.Error=1]="Error",t[t.Debug=2]="Debug",t[t.Verbose=3]="Verbose"})(Hd=Ur.LogLevel||(Ur.LogLevel={}))});var Ls=b(kt=>{Object.defineProperty(kt,"__esModule",{value:!0});var Ld;(function(t){t.Ok="ok",t.Exited="exited",t.Crashed="crashed",t.Abnormal="abnormal"})(Ld=kt.SessionStatus||(kt.SessionStatus={}));var Ud;(function(t){t.Ok="ok",t.Errored="errored",t.Crashed="crashed"})(Ud=kt.RequestSessionStatus||(kt.RequestSessionStatus={}))});var Bs=b(Dt=>{Object.defineProperty(Dt,"__esModule",{value:!0});var Us;(function(t){t.Fatal="fatal",t.Error="error",t.Warning="warning",t.Log="log",t.Info="info",t.Debug="debug",t.Critical="critical"})(Us=Dt.Severity||(Dt.Severity={}));(function(t){function e(r){switch(r){case"debug":return t.Debug;case"info":return t.Info;case"warn":case"warning":return t.Warning;case"error":return t.Error;case"fatal":return t.Fatal;case"critical":return t.Critical;case"log":default:return t.Log}}t.fromString=e})(Us=Dt.Severity||(Dt.Severity={}))});var zs=b(Ft=>{Object.defineProperty(Ft,"__esModule",{value:!0});var Gs;(function(t){t.Unknown="unknown",t.Skipped="skipped",t.Success="success",t.RateLimit="rate_limit",t.Invalid="invalid",t.Failed="failed"})(Gs=Ft.Status||(Ft.Status={}));(function(t){function e(r){return r>=200&&r<300?t.Success:r===429?t.RateLimit:r>=400&&r<500?t.Invalid:r>=500?t.Failed:t.Unknown}t.fromHttpCode=e})(Gs=Ft.Status||(Ft.Status={}))});var Vs=b(Br=>{Object.defineProperty(Br,"__esModule",{value:!0});var Bd;(function(t){t.Explicit="explicitly_set",t.Sampler="client_sampler",t.Rate="client_rate",t.Inheritance="inheritance"})(Bd=Br.TransactionSamplingMethod||(Br.TransactionSamplingMethod={}))});var Ws=b(Gr=>{Object.defineProperty(Gr,"__esModule",{value:!0});var Gd;(function(t){t.BeforeSend="before_send",t.EventProcessor="event_processor",t.NetworkError="network_error",t.QueueOverflow="queue_overflow",t.RateLimitBackoff="ratelimit_backoff",t.SampleRate="sample_rate"})(Gd=Gr.Outcome||(Gr.Outcome={}))});var ne=b(Ge=>{Object.defineProperty(Ge,"__esModule",{value:!0});var zd=Hs();Ge.LogLevel=zd.LogLevel;var Ys=Ls();Ge.SessionStatus=Ys.SessionStatus;Ge.RequestSessionStatus=Ys.RequestSessionStatus;var Vd=Bs();Ge.Severity=Vd.Severity;var Wd=zs();Ge.Status=Wd.Status;var Yd=Vs();Ge.TransactionSamplingMethod=Yd.TransactionSamplingMethod;var $d=Ws();Ge.Outcome=$d.Outcome});var $s=b(_i=>{Object.defineProperty(_i,"__esModule",{value:!0});function Kd(t){t.then(null,function(e){console.error(e)})}_i.forget=Kd});var Wr=b((ar,Vr)=>{Object.defineProperty(ar,"__esModule",{value:!0});function Jd(){return Object.prototype.toString.call(typeof process!="undefined"?process:0)==="[object process]"}ar.isNodeEnv=Jd;function zr(t,e){return t.require(e)}ar.dynamicRequire=zr;function Xd(t){var e;try{e=zr(Vr,t)}catch{}try{var r=zr(Vr,"process").cwd;e=zr(Vr,r()+"/node_modules/"+t)}catch{}return e}ar.loadModule=Xd});var nt=b(vi=>{Object.defineProperty(vi,"__esModule",{value:!0});var Qd=Wr(),Zd={};function ep(){return Qd.isNodeEnv()?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Zd}vi.getGlobalObject=ep});var vt=b(ce=>{Object.defineProperty(ce,"__esModule",{value:!0});function tp(t){switch(Object.prototype.toString.call(t)){case"[object Error]":return!0;case"[object Exception]":return!0;case"[object DOMException]":return!0;default:return Yr(t,Error)}}ce.isError=tp;function rp(t){return Object.prototype.toString.call(t)==="[object ErrorEvent]"}ce.isErrorEvent=rp;function np(t){return Object.prototype.toString.call(t)==="[object DOMError]"}ce.isDOMError=np;function ip(t){return Object.prototype.toString.call(t)==="[object DOMException]"}ce.isDOMException=ip;function op(t){return Object.prototype.toString.call(t)==="[object String]"}ce.isString=op;function ap(t){return t===null||typeof t!="object"&&typeof t!="function"}ce.isPrimitive=ap;function Ks(t){return Object.prototype.toString.call(t)==="[object Object]"}ce.isPlainObject=Ks;function sp(t){return typeof Event!="undefined"&&Yr(t,Event)}ce.isEvent=sp;function up(t){return typeof Element!="undefined"&&Yr(t,Element)}ce.isElement=up;function cp(t){return Object.prototype.toString.call(t)==="[object RegExp]"}ce.isRegExp=cp;function fp(t){return Boolean(t&&t.then&&typeof t.then=="function")}ce.isThenable=fp;function lp(t){return Ks(t)&&"nativeEvent"in t&&"preventDefault"in t&&"stopPropagation"in t}ce.isSyntheticEvent=lp;function Yr(t,e){try{return t instanceof e}catch{return!1}}ce.isInstanceOf=Yr});var gi=b($r=>{Object.defineProperty($r,"__esModule",{value:!0});var dp=nt(),pp=vt();function hp(t,e){try{for(var r=t,n=5,i=80,o=[],a=0,s=0,u=" > ",c=u.length,l=void 0;r&&a++<n&&(l=_p(r,e),!(l==="html"||a>1&&s+o.length*c+l.length>=i));)o.push(l),s+=l.length,r=r.parentNode;return o.reverse().join(u)}catch{return"<unknown>"}}$r.htmlTreeAsString=hp;function _p(t,e){var r,n,i=t,o=[],a,s,u,c,l;if(!i||!i.tagName)return"";o.push(i.tagName.toLowerCase());var d=((r=e)===null||r===void 0?void 0:r.length)?e.filter(function(y){return i.getAttribute(y)}).map(function(y){return[y,i.getAttribute(y)]}):null;if((n=d)===null||n===void 0?void 0:n.length)d.forEach(function(y){o.push("["+y[0]+'="'+y[1]+'"]')});else if(i.id&&o.push("#"+i.id),a=i.className,a&&pp.isString(a))for(s=a.split(/\s+/),l=0;l<s.length;l++)o.push("."+s[l]);var h=["type","name","title","alt"];for(l=0;l<h.length;l++)u=h[l],c=i.getAttribute(u),c&&o.push("["+u+'="'+c+'"]');return o.join("")}function vp(){var t=dp.getGlobalObject();try{return t.document.location.href}catch{return""}}$r.getLocationHref=vp});var Js=b(mi=>{Object.defineProperty(mi,"__esModule",{value:!0});mi.setPrototypeOf=Object.setPrototypeOf||({__proto__:[]}instanceof Array?gp:mp);function gp(t,e){return t.__proto__=e,t}function mp(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(t,r)||(t[r]=e[r]);return t}});var Kr=b(yi=>{Object.defineProperty(yi,"__esModule",{value:!0});var yp=N(),bp=Js(),Sp=function(t){yp.__extends(e,t);function e(r){var n=this.constructor,i=t.call(this,r)||this;return i.message=r,i.name=n.prototype.constructor.name,bp.setPrototypeOf(i,n.prototype),i}return e}(Error);yi.SentryError=Sp});var Xs=b(bi=>{Object.defineProperty(bi,"__esModule",{value:!0});var Ep=N(),sr=Kr(),Tp=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+))?@)([\w.-]+)(?::(\d+))?\/(.+)/,ur="Invalid Dsn",Op=function(){function t(e){typeof e=="string"?this._fromString(e):this._fromComponents(e),this._validate()}return t.prototype.toString=function(e){e===void 0&&(e=!1);var r=this,n=r.host,i=r.path,o=r.pass,a=r.port,s=r.projectId,u=r.protocol,c=r.publicKey;return u+"://"+c+(e&&o?":"+o:"")+("@"+n+(a?":"+a:"")+"/"+(i&&i+"/")+s)},t.prototype._fromString=function(e){var r=Tp.exec(e);if(!r)throw new sr.SentryError(ur);var n=Ep.__read(r.slice(1),6),i=n[0],o=n[1],a=n[2],s=a===void 0?"":a,u=n[3],c=n[4],l=c===void 0?"":c,d=n[5],h="",y=d,S=y.split("/");if(S.length>1&&(h=S.slice(0,-1).join("/"),y=S.pop()),y){var T=y.match(/^\d+/);T&&(y=T[0])}this._fromComponents({host:u,pass:s,path:h,projectId:y,port:l,protocol:i,publicKey:o})},t.prototype._fromComponents=function(e){"user"in e&&!("publicKey"in e)&&(e.publicKey=e.user),this.user=e.publicKey||"",this.protocol=e.protocol,this.publicKey=e.publicKey||"",this.pass=e.pass||"",this.host=e.host,this.port=e.port||"",this.path=e.path||"",this.projectId=e.projectId},t.prototype._validate=function(){var e=this;if(["protocol","publicKey","host","projectId"].forEach(function(r){if(!e[r])throw new sr.SentryError(ur+": "+r+" missing")}),!this.projectId.match(/^\d+$/))throw new sr.SentryError(ur+": Invalid projectId "+this.projectId);if(this.protocol!=="http"&&this.protocol!=="https")throw new sr.SentryError(ur+": Invalid protocol "+this.protocol);if(this.port&&isNaN(parseInt(this.port,10)))throw new sr.SentryError(ur+": Invalid port "+this.port)},t}();bi.Dsn=Op});var Qr=b(Xr=>{Object.defineProperty(Xr,"__esModule",{value:!0});var Qs=nt(),gt=Qs.getGlobalObject(),Si="Sentry Logger ";function Jr(t){var e=Qs.getGlobalObject(),r=["debug","info","warn","error","log","assert"];if(!("console"in e))return t();var n=e.console,i={};r.forEach(function(a){a in e.console&&n[a].__sentry_original__&&(i[a]=n[a],n[a]=n[a].__sentry_original__)});var o=t();return Object.keys(i).forEach(function(a){n[a]=i[a]}),o}Xr.consoleSandbox=Jr;var wp=function(){function t(){this._enabled=!1}return t.prototype.disable=function(){this._enabled=!1},t.prototype.enable=function(){this._enabled=!0},t.prototype.log=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];!this._enabled||Jr(function(){gt.console.log(Si+"[Log]: "+e.join(" "))})},t.prototype.warn=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];!this._enabled||Jr(function(){gt.console.warn(Si+"[Warn]: "+e.join(" "))})},t.prototype.error=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];!this._enabled||Jr(function(){gt.console.error(Si+"[Error]: "+e.join(" "))})},t}();gt.__SENTRY__=gt.__SENTRY__||{};var xp=gt.__SENTRY__.logger||(gt.__SENTRY__.logger=new wp);Xr.logger=xp});var Ti=b(Ei=>{Object.defineProperty(Ei,"__esModule",{value:!0});var Ip=function(){function t(){this._hasWeakSet=typeof WeakSet=="function",this._inner=this._hasWeakSet?new WeakSet:[]}return t.prototype.memoize=function(e){if(this._hasWeakSet)return this._inner.has(e)?!0:(this._inner.add(e),!1);for(var r=0;r<this._inner.length;r++){var n=this._inner[r];if(n===e)return!0}return this._inner.push(e),!1},t.prototype.unmemoize=function(e){if(this._hasWeakSet)this._inner.delete(e);else for(var r=0;r<this._inner.length;r++)if(this._inner[r]===e){this._inner.splice(r,1);break}},t}();Ei.Memo=Ip});var Zr=b(wi=>{Object.defineProperty(wi,"__esModule",{value:!0});var Oi="<anonymous>";function Cp(t){try{return!t||typeof t!="function"?Oi:t.name||Oi}catch{return Oi}}wi.getFunctionName=Cp});var en=b(mt=>{Object.defineProperty(mt,"__esModule",{value:!0});var Zs=vt();function Rp(t,e){return e===void 0&&(e=0),typeof t!="string"||e===0||t.length<=e?t:t.substr(0,e)+"..."}mt.truncate=Rp;function Ap(t,e){var r=t,n=r.length;if(n<=150)return r;e>n&&(e=n);var i=Math.max(e-60,0);i<5&&(i=0);var o=Math.min(i+140,n);return o>n-5&&(o=n),o===n&&(i=Math.max(o-140,0)),r=r.slice(i,o),i>0&&(r="'{snip} "+r),o<n&&(r+=" {snip}"),r}mt.snipLine=Ap;function Pp(t,e){if(!Array.isArray(t))return"";for(var r=[],n=0;n<t.length;n++){var i=t[n];try{r.push(String(i))}catch{r.push("[value cannot be serialized]")}}return r.join(e)}mt.safeJoin=Pp;function qp(t,e){return Zs.isString(t)?Zs.isRegExp(e)?e.test(t):typeof e=="string"?t.indexOf(e)!==-1:!1:!1}mt.isMatchingPattern=qp;function Np(t){return t.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}mt.escapeStringForRegex=Np});var Ci=b(De=>{Object.defineProperty(De,"__esModule",{value:!0});var Mp=N(),eu=gi(),ke=vt(),kp=Ti(),Dp=Zr(),tu=en();function Fp(t,e,r){if(e in t){var n=t[e],i=r(n);if(typeof i=="function")try{i.prototype=i.prototype||{},Object.defineProperties(i,{__sentry_original__:{enumerable:!1,value:n}})}catch{}t[e]=i}}De.fill=Fp;function jp(t){return Object.keys(t).map(function(e){return encodeURIComponent(e)+"="+encodeURIComponent(t[e])}).join("&")}De.urlEncode=jp;function ru(t){if(ke.isError(t)){var e=t,r={message:e.message,name:e.name,stack:e.stack};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&(r[n]=e[n]);return r}if(ke.isEvent(t)){var i=t,o={};o.type=i.type;try{o.target=ke.isElement(i.target)?eu.htmlTreeAsString(i.target):Object.prototype.toString.call(i.target)}catch{o.target="<unknown>"}try{o.currentTarget=ke.isElement(i.currentTarget)?eu.htmlTreeAsString(i.currentTarget):Object.prototype.toString.call(i.currentTarget)}catch{o.currentTarget="<unknown>"}typeof CustomEvent!="undefined"&&ke.isInstanceOf(t,CustomEvent)&&(o.detail=i.detail);for(var a in i)Object.prototype.hasOwnProperty.call(i,a)&&(o[a]=i[a]);return o}return t}function Hp(t){return~-encodeURI(t).split(/%..|./).length}function Lp(t){return Hp(JSON.stringify(t))}function nu(t,e,r){e===void 0&&(e=3),r===void 0&&(r=100*1024);var n=ou(t,e);return Lp(n)>r?nu(t,e-1,r):n}De.normalizeToSize=nu;function Up(t){var e=Object.prototype.toString.call(t);if(typeof t=="string")return t;if(e==="[object Object]")return"[Object]";if(e==="[object Array]")return"[Array]";var r=iu(t);return ke.isPrimitive(r)?r:e}function iu(t,e){return e==="domain"&&t&&typeof t=="object"&&t._events?"[Domain]":e==="domainEmitter"?"[DomainEmitter]":typeof global!="undefined"&&t===global?"[Global]":typeof window!="undefined"&&t===window?"[Window]":typeof document!="undefined"&&t===document?"[Document]":ke.isSyntheticEvent(t)?"[SyntheticEvent]":typeof t=="number"&&t!==t?"[NaN]":t===void 0?"[undefined]":typeof t=="function"?"[Function: "+Dp.getFunctionName(t)+"]":typeof t=="symbol"?"["+String(t)+"]":typeof t=="bigint"?"[BigInt: "+String(t)+"]":t}function xi(t,e,r,n){if(r===void 0&&(r=1/0),n===void 0&&(n=new kp.Memo),r===0)return Up(e);if(e!=null&&typeof e.toJSON=="function")return e.toJSON();var i=iu(e,t);if(ke.isPrimitive(i))return i;var o=ru(e),a=Array.isArray(e)?[]:{};if(n.memoize(e))return"[Circular ~]";for(var s in o)!Object.prototype.hasOwnProperty.call(o,s)||(a[s]=xi(s,o[s],r-1,n));return n.unmemoize(e),a}De.walk=xi;function ou(t,e){try{return JSON.parse(JSON.stringify(t,function(r,n){return xi(r,n,e)}))}catch{return"**non-serializable**"}}De.normalize=ou;function Bp(t,e){e===void 0&&(e=40);var r=Object.keys(ru(t));if(r.sort(),!r.length)return"[object has no keys]";if(r[0].length>=e)return tu.truncate(r[0],e);for(var n=r.length;n>0;n--){var i=r.slice(0,n).join(", ");if(!(i.length>e))return n===r.length?i:tu.truncate(i,e)}return""}De.extractExceptionKeysForMessage=Bp;function Ii(t){var e,r;if(ke.isPlainObject(t)){var n=t,i={};try{for(var o=Mp.__values(Object.keys(n)),a=o.next();!a.done;a=o.next()){var s=a.value;typeof n[s]!="undefined"&&(i[s]=Ii(n[s]))}}catch(u){e={error:u}}finally{try{a&&!a.done&&(r=o.return)&&r.call(o)}finally{if(e)throw e.error}}return i}return Array.isArray(t)?t.map(Ii):t}De.dropUndefinedKeys=Ii;function Gp(t){var e;switch(!0){case t==null:e=new String(t);break;case(typeof t=="symbol"||typeof t=="bigint"):e=Object(t);break;case ke.isPrimitive(t):e=new t.constructor(t);break;default:e=t;break}return e}De.objectify=Gp});var Pi=b(Re=>{Object.defineProperty(Re,"__esModule",{value:!0});var tn=nt(),zp=Qr();function Vp(){try{return new ErrorEvent(""),!0}catch{return!1}}Re.supportsErrorEvent=Vp;function Wp(){try{return new DOMError(""),!0}catch{return!1}}Re.supportsDOMError=Wp;function Yp(){try{return new DOMException(""),!0}catch{return!1}}Re.supportsDOMException=Yp;function Ri(){if(!("fetch"in tn.getGlobalObject()))return!1;try{return new Headers,new Request(""),new Response,!0}catch{return!1}}Re.supportsFetch=Ri;function Ai(t){return t&&/^function fetch\(\)\s+\{\s+\[native code\]\s+\}$/.test(t.toString())}Re.isNativeFetch=Ai;function $p(){if(!Ri())return!1;var t=tn.getGlobalObject();if(Ai(t.fetch))return!0;var e=!1,r=t.document;if(r&&typeof r.createElement=="function")try{var n=r.createElement("iframe");n.hidden=!0,r.head.appendChild(n),n.contentWindow&&n.contentWindow.fetch&&(e=Ai(n.contentWindow.fetch)),r.head.removeChild(n)}catch(i){zp.logger.warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ",i)}return e}Re.supportsNativeFetch=$p;function Kp(){return"ReportingObserver"in tn.getGlobalObject()}Re.supportsReportingObserver=Kp;function Jp(){if(!Ri())return!1;try{return new Request("_",{referrerPolicy:"origin"}),!0}catch{return!1}}Re.supportsReferrerPolicy=Jp;function Xp(){var t=tn.getGlobalObject(),e=t.chrome,r=e&&e.app&&e.app.runtime,n="history"in t&&!!t.history.pushState&&!!t.history.replaceState;return!r&&n}Re.supportsHistory=Xp});var fu=b(Mi=>{Object.defineProperty(Mi,"__esModule",{value:!0});var jt=N(),Qp=nt(),rn=vt(),au=Qr(),ze=Ci(),Zp=Zr(),su=Pi(),Y=Qp.getGlobalObject(),cr={},uu={};function eh(t){if(!uu[t])switch(uu[t]=!0,t){case"console":rh();break;case"dom":lh();break;case"xhr":ah();break;case"fetch":nh();break;case"history":sh();break;case"error":dh();break;case"unhandledrejection":ph();break;default:au.logger.warn("unknown instrumentation type:",t)}}function th(t){!t||typeof t.type!="string"||typeof t.callback!="function"||(cr[t.type]=cr[t.type]||[],cr[t.type].push(t.callback),eh(t.type))}Mi.addInstrumentationHandler=th;function Ae(t,e){var r,n;if(!(!t||!cr[t]))try{for(var i=jt.__values(cr[t]||[]),o=i.next();!o.done;o=i.next()){var a=o.value;try{a(e)}catch(s){au.logger.error(`Error while triggering instrumentation handler.
8
8
  Type: `+t+`
9
- Name: `+Nv.getFunctionName(s)+`
10
- Error: `+a)}}}catch(a){r={error:a}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}}function Dv(){"console"in K&&["debug","info","warn","error","log","assert"].forEach(function(t){t in K.console&&Ze.fill(K.console,t,function(e){return function(){for(var r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];Le("console",{args:r,level:t}),e&&Function.prototype.apply.call(e,K.console,r)}})})}function Lv(){!ac.supportsNativeFetch()||Ze.fill(K,"fetch",function(t){return function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var n={args:e,fetchData:{method:Fv(e),url:jv(e)},startTimestamp:Date.now()};return Le("fetch",er.__assign({},n)),t.apply(K,e).then(function(i){return Le("fetch",er.__assign(er.__assign({},n),{endTimestamp:Date.now(),response:i})),i},function(i){throw Le("fetch",er.__assign(er.__assign({},n),{endTimestamp:Date.now(),error:i})),i})}})}function Fv(t){return t===void 0&&(t=[]),"Request"in K&&In.isInstanceOf(t[0],Request)&&t[0].method?String(t[0].method).toUpperCase():t[1]&&t[1].method?String(t[1].method).toUpperCase():"GET"}function jv(t){return t===void 0&&(t=[]),typeof t[0]=="string"?t[0]:"Request"in K&&In.isInstanceOf(t[0],Request)?t[0].url:String(t[0])}function Uv(){if("XMLHttpRequest"in K){var t=[],e=[],r=XMLHttpRequest.prototype;Ze.fill(r,"open",function(n){return function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];var s=this,a=i[1];s.__sentry_xhr__={method:In.isString(i[0])?i[0].toUpperCase():i[0],url:i[1]},In.isString(a)&&s.__sentry_xhr__.method==="POST"&&a.match(/sentry_key/)&&(s.__sentry_own_request__=!0);var u=function(){if(s.readyState===4){try{s.__sentry_xhr__&&(s.__sentry_xhr__.status_code=s.status)}catch{}try{var c=t.indexOf(s);if(c!==-1){t.splice(c);var l=e.splice(c)[0];s.__sentry_xhr__&&l[0]!==void 0&&(s.__sentry_xhr__.body=l[0])}}catch{}Le("xhr",{args:i,endTimestamp:Date.now(),startTimestamp:Date.now(),xhr:s})}};return"onreadystatechange"in s&&typeof s.onreadystatechange=="function"?Ze.fill(s,"onreadystatechange",function(c){return function(){for(var l=[],d=0;d<arguments.length;d++)l[d]=arguments[d];return u(),c.apply(s,l)}}):s.addEventListener("readystatechange",u),n.apply(s,i)}}),Ze.fill(r,"send",function(n){return function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];return t.push(this),e.push(i),Le("xhr",{args:i,startTimestamp:Date.now(),xhr:this}),n.apply(this,i)}})}}var An;function Hv(){if(!ac.supportsHistory())return;var t=K.onpopstate;K.onpopstate=function(){for(var r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];var i=K.location.href,o=An;if(An=i,Le("history",{from:o,to:i}),t)try{return t.apply(this,r)}catch{}};function e(r){return function(){for(var n=[],i=0;i<arguments.length;i++)n[i]=arguments[i];var o=n.length>2?n[2]:void 0;if(o){var s=An,a=String(o);An=a,Le("history",{from:s,to:a})}return r.apply(this,n)}}Ze.fill(K.history,"pushState",e),Ze.fill(K.history,"replaceState",e)}var Bv=1e3,Mn,Pn;function Gv(t,e){if(!t||t.type!==e.type)return!0;try{if(t.target!==e.target)return!0}catch{}return!1}function zv(t){if(t.type!=="keypress")return!1;try{var e=t.target;if(!e||!e.tagName)return!0;if(e.tagName==="INPUT"||e.tagName==="TEXTAREA"||e.isContentEditable)return!1}catch{}return!0}function cc(t,e){return e===void 0&&(e=!1),function(r){if(!(!r||Pn===r)&&!zv(r)){var n=r.type==="keypress"?"input":r.type;Mn===void 0?(t({event:r,name:n,global:e}),Pn=r):Gv(Pn,r)&&(t({event:r,name:n,global:e}),Pn=r),clearTimeout(Mn),Mn=K.setTimeout(function(){Mn=void 0},Bv)}}}function Vv(){if("document"in K){var t=Le.bind(null,"dom"),e=cc(t,!0);K.document.addEventListener("click",e,!1),K.document.addEventListener("keypress",e,!1),["EventTarget","Node"].forEach(function(r){var n=K[r]&&K[r].prototype;!n||!n.hasOwnProperty||!n.hasOwnProperty("addEventListener")||(Ze.fill(n,"addEventListener",function(i){return function(o,s,a){if(o==="click"||o=="keypress")try{var u=this,c=u.__sentry_instrumentation_handlers__=u.__sentry_instrumentation_handlers__||{},l=c[o]=c[o]||{refCount:0};if(!l.handler){var d=cc(t);l.handler=d,i.call(this,o,d,a)}l.refCount+=1}catch{}return i.call(this,o,s,a)}}),Ze.fill(n,"removeEventListener",function(i){return function(o,s,a){if(o==="click"||o=="keypress")try{var u=this,c=u.__sentry_instrumentation_handlers__||{},l=c[o];l&&(l.refCount-=1,l.refCount<=0&&(i.call(this,o,l.handler,a),l.handler=void 0,delete c[o]),Object.keys(c).length===0&&delete u.__sentry_instrumentation_handlers__)}catch{}return i.call(this,o,s,a)}}))})}}var lo=null;function Wv(){lo=K.onerror,K.onerror=function(t,e,r,n,i){return Le("error",{column:n,error:i,line:r,msg:t,url:e}),lo?lo.apply(this,arguments):!1}}var fo=null;function $v(){fo=K.onunhandledrejection,K.onunhandledrejection=function(t){return Le("unhandledrejection",t),fo?fo.apply(this,arguments):!0}}});var dc=b(Me=>{Object.defineProperty(Me,"__esModule",{value:!0});var Mr=q(),Yv=pt(),ho=xn();function Kv(){var t=Yv.getGlobalObject(),e=t.crypto||t.msCrypto;if(e!==void 0&&e.getRandomValues){var r=new Uint16Array(8);e.getRandomValues(r),r[3]=r[3]&4095|16384,r[4]=r[4]&16383|32768;var n=function(i){for(var o=i.toString(16);o.length<4;)o="0"+o;return o};return n(r[0])+n(r[1])+n(r[2])+n(r[3])+n(r[4])+n(r[5])+n(r[6])+n(r[7])}return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,function(i){var o=Math.random()*16|0,s=i==="x"?o:o&3|8;return s.toString(16)})}Me.uuid4=Kv;function Jv(t){if(!t)return{};var e=t.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!e)return{};var r=e[6]||"",n=e[8]||"";return{host:e[4],path:e[5],protocol:e[2],relative:e[5]+r+n}}Me.parseUrl=Jv;function Xv(t){if(t.message)return t.message;if(t.exception&&t.exception.values&&t.exception.values[0]){var e=t.exception.values[0];return e.type&&e.value?e.type+": "+e.value:e.type||e.value||t.event_id||"<unknown>"}return t.event_id||"<unknown>"}Me.getEventDescription=Xv;function Qv(t,e,r){t.exception=t.exception||{},t.exception.values=t.exception.values||[],t.exception.values[0]=t.exception.values[0]||{},t.exception.values[0].value=t.exception.values[0].value||e||"",t.exception.values[0].type=t.exception.values[0].type||r||"Error"}Me.addExceptionTypeValue=Qv;function Zv(t,e){var r;if(!(!t.exception||!t.exception.values)){var n=t.exception.values[0],i={type:"generic",handled:!0},o=n.mechanism;if(n.mechanism=Mr.__assign(Mr.__assign(Mr.__assign({},i),o),e),e&&"data"in e){var s=Mr.__assign(Mr.__assign({},(r=o)===null||r===void 0?void 0:r.data),e.data);n.mechanism.data=s}}}Me.addExceptionMechanism=Zv;var e_=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;function t_(t){var e=t.match(e_)||[],r=parseInt(e[1],10),n=parseInt(e[2],10),i=parseInt(e[3],10);return{buildmetadata:e[5],major:isNaN(r)?void 0:r,minor:isNaN(n)?void 0:n,patch:isNaN(i)?void 0:i,prerelease:e[4]}}Me.parseSemver=t_;var fc=60*1e3;function r_(t,e){if(!e)return fc;var r=parseInt(""+e,10);if(!isNaN(r))return r*1e3;var n=Date.parse(""+e);return isNaN(n)?fc:n-t}Me.parseRetryAfterHeader=r_;function n_(t,e,r){r===void 0&&(r=5);var n=e.lineno||0,i=t.length,o=Math.max(Math.min(i,n-1),0);e.pre_context=t.slice(Math.max(0,o-r),o).map(function(s){return ho.snipLine(s,0)}),e.context_line=ho.snipLine(t[Math.min(i-1,o)],e.colno||0),e.post_context=t.slice(Math.min(o+1,i),o+1+r).map(function(s){return ho.snipLine(s,0)})}Me.addContextToFrame=n_;function i_(t){return t.split(/[\?#]/,1)[0]}Me.stripUrlQueryAndFragment=i_;function o_(t){var e;if((e=t)===null||e===void 0?void 0:e.__sentry_captured__)return!0;try{Object.defineProperty(t,"__sentry_captured__",{value:!0})}catch{}return!1}Me.checkOrSetAlreadyCaught=o_});var mc=b(et=>{Object.defineProperty(et,"__esModule",{value:!0});function pc(t,e){for(var r=0,n=t.length-1;n>=0;n--){var i=t[n];i==="."?t.splice(n,1):i===".."?(t.splice(n,1),r++):r&&(t.splice(n,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}var s_=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^/]+?|)(\.[^./]*|))(?:[/]*)$/;function hc(t){var e=s_.exec(t);return e?e.slice(1):[]}function vo(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];for(var r="",n=!1,i=t.length-1;i>=-1&&!n;i--){var o=i>=0?t[i]:"/";!o||(r=o+"/"+r,n=o.charAt(0)==="/")}return r=pc(r.split("/").filter(function(s){return!!s}),!n).join("/"),(n?"/":"")+r||"."}et.resolve=vo;function vc(t){for(var e=0;e<t.length&&t[e]==="";e++);for(var r=t.length-1;r>=0&&t[r]==="";r--);return e>r?[]:t.slice(e,r-e+1)}function a_(t,e){t=vo(t).substr(1),e=vo(e).substr(1);for(var r=vc(t.split("/")),n=vc(e.split("/")),i=Math.min(r.length,n.length),o=i,s=0;s<i;s++)if(r[s]!==n[s]){o=s;break}for(var a=[],s=o;s<r.length;s++)a.push("..");return a=a.concat(n.slice(o)),a.join("/")}et.relative=a_;function _c(t){var e=gc(t),r=t.substr(-1)==="/",n=pc(t.split("/").filter(function(i){return!!i}),!e).join("/");return!n&&!e&&(n="."),n&&r&&(n+="/"),(e?"/":"")+n}et.normalizePath=_c;function gc(t){return t.charAt(0)==="/"}et.isAbsolute=gc;function u_(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return _c(t.join("/"))}et.join=u_;function c_(t){var e=hc(t),r=e[0],n=e[1];return!r&&!n?".":(n&&(n=n.substr(0,n.length-1)),r+n)}et.dirname=c_;function l_(t,e){var r=hc(t)[2];return e&&r.substr(e.length*-1)===e&&(r=r.substr(0,r.length-e.length)),r}et.basename=l_});var go=b(_o=>{Object.defineProperty(_o,"__esModule",{value:!0});var f_=Rt(),d_=function(){function t(e){var r=this;this._state="PENDING",this._handlers=[],this._resolve=function(n){r._setResult("RESOLVED",n)},this._reject=function(n){r._setResult("REJECTED",n)},this._setResult=function(n,i){if(r._state==="PENDING"){if(f_.isThenable(i)){i.then(r._resolve,r._reject);return}r._state=n,r._value=i,r._executeHandlers()}},this._attachHandler=function(n){r._handlers=r._handlers.concat(n),r._executeHandlers()},this._executeHandlers=function(){if(r._state!=="PENDING"){var n=r._handlers.slice();r._handlers=[],n.forEach(function(i){i.done||(r._state==="RESOLVED"&&i.onfulfilled&&i.onfulfilled(r._value),r._state==="REJECTED"&&i.onrejected&&i.onrejected(r._value),i.done=!0)})}};try{e(this._resolve,this._reject)}catch(n){this._reject(n)}}return t.resolve=function(e){return new t(function(r){r(e)})},t.reject=function(e){return new t(function(r,n){n(e)})},t.all=function(e){return new t(function(r,n){if(!Array.isArray(e)){n(new TypeError("Promise.all requires an array as input."));return}if(e.length===0){r([]);return}var i=e.length,o=[];e.forEach(function(s,a){t.resolve(s).then(function(u){o[a]=u,i-=1,i===0&&r(o)}).then(null,n)})})},t.prototype.then=function(e,r){var n=this;return new t(function(i,o){n._attachHandler({done:!1,onfulfilled:function(s){if(!e){i(s);return}try{i(e(s));return}catch(a){o(a);return}},onrejected:function(s){if(!r){o(s);return}try{i(r(s));return}catch(a){o(a);return}}})})},t.prototype.catch=function(e){return this.then(function(r){return r},e)},t.prototype.finally=function(e){var r=this;return new t(function(n,i){var o,s;return r.then(function(a){s=!1,o=a,e&&e()},function(a){s=!0,o=a,e&&e()}).then(function(){if(s){i(o);return}n(o)})})},t.prototype.toString=function(){return"[object SyncPromise]"},t}();_o.SyncPromise=d_});var yc=b(yo=>{Object.defineProperty(yo,"__esModule",{value:!0});var p_=En(),mo=go(),h_=function(){function t(e){this._limit=e,this._buffer=[]}return t.prototype.isReady=function(){return this._limit===void 0||this.length()<this._limit},t.prototype.add=function(e){var r=this;if(!this.isReady())return mo.SyncPromise.reject(new p_.SentryError("Not adding Promise due to buffer limit reached."));var n=e();return this._buffer.indexOf(n)===-1&&this._buffer.push(n),n.then(function(){return r.remove(n)}).then(null,function(){return r.remove(n).then(null,function(){})}),n},t.prototype.remove=function(e){var r=this._buffer.splice(this._buffer.indexOf(e),1)[0];return r},t.prototype.length=function(){return this._buffer.length},t.prototype.drain=function(e){var r=this;return new mo.SyncPromise(function(n){var i=setTimeout(function(){e&&e>0&&n(!1)},e);mo.SyncPromise.all(r._buffer).then(function(){clearTimeout(i),n(!0)}).then(null,function(){n(!0)})})},t}();yo.PromiseBuffer=h_});var wc=b((Pe,Tc)=>{Object.defineProperty(Pe,"__esModule",{value:!0});var bc=pt(),Sc=yn(),bo={nowSeconds:function(){return Date.now()/1e3}};function v_(){var t=bc.getGlobalObject().performance;if(!(!t||!t.now)){var e=Date.now()-t.now();return{now:function(){return t.now()},timeOrigin:e}}}function __(){try{var t=Sc.dynamicRequire(Tc,"perf_hooks");return t.performance}catch{return}}var Nn=Sc.isNodeEnv()?__():v_(),Ec=Nn===void 0?bo:{nowSeconds:function(){return(Nn.timeOrigin+Nn.now())/1e3}};Pe.dateTimestampInSeconds=bo.nowSeconds.bind(bo);Pe.timestampInSeconds=Ec.nowSeconds.bind(Ec);Pe.timestampWithMs=Pe.timestampInSeconds;Pe.usingPerformanceAPI=Nn!==void 0;Pe.browserPerformanceTimeOrigin=function(){var t=bc.getGlobalObject().performance;if(!t||!t.now){Pe._browserPerformanceTimeOriginMode="none";return}var e=3600*1e3,r=t.now(),n=Date.now(),i=t.timeOrigin?Math.abs(t.timeOrigin+r-n):e,o=i<e,s=t.timing&&t.timing.navigationStart,a=typeof s=="number",u=a?Math.abs(s+r-n):e,c=u<e;return o||c?i<=u?(Pe._browserPerformanceTimeOriginMode="timeOrigin",t.timeOrigin):(Pe._browserPerformanceTimeOriginMode="navigationStart",s):(Pe._browserPerformanceTimeOriginMode="dateNow",n)}()});var N=b(X=>{Object.defineProperty(X,"__esModule",{value:!0});var te=q();te.__exportStar(Yu(),X);te.__exportStar(Ki(),X);te.__exportStar(Xu(),X);te.__exportStar(En(),X);te.__exportStar(pt(),X);te.__exportStar(lc(),X);te.__exportStar(Rt(),X);te.__exportStar(On(),X);te.__exportStar(to(),X);te.__exportStar(dc(),X);te.__exportStar(yn(),X);te.__exportStar(so(),X);te.__exportStar(mc(),X);te.__exportStar(yc(),X);te.__exportStar(Cn(),X);te.__exportStar(xn(),X);te.__exportStar(co(),X);te.__exportStar(go(),X);te.__exportStar(wc(),X)});var So=b(qn=>{Object.defineProperty(qn,"__esModule",{value:!0});var D=q(),Pr=N(),Oc=100,g_=function(){function t(){this._notifyingListeners=!1,this._scopeListeners=[],this._eventProcessors=[],this._breadcrumbs=[],this._user={},this._tags={},this._extra={},this._contexts={}}return t.clone=function(e){var r=new t;return e&&(r._breadcrumbs=D.__spread(e._breadcrumbs),r._tags=D.__assign({},e._tags),r._extra=D.__assign({},e._extra),r._contexts=D.__assign({},e._contexts),r._user=e._user,r._level=e._level,r._span=e._span,r._session=e._session,r._transactionName=e._transactionName,r._fingerprint=e._fingerprint,r._eventProcessors=D.__spread(e._eventProcessors),r._requestSession=e._requestSession),r},t.prototype.addScopeListener=function(e){this._scopeListeners.push(e)},t.prototype.addEventProcessor=function(e){return this._eventProcessors.push(e),this},t.prototype.setUser=function(e){return this._user=e||{},this._session&&this._session.update({user:e}),this._notifyScopeListeners(),this},t.prototype.getUser=function(){return this._user},t.prototype.getRequestSession=function(){return this._requestSession},t.prototype.setRequestSession=function(e){return this._requestSession=e,this},t.prototype.setTags=function(e){return this._tags=D.__assign(D.__assign({},this._tags),e),this._notifyScopeListeners(),this},t.prototype.setTag=function(e,r){var n;return this._tags=D.__assign(D.__assign({},this._tags),(n={},n[e]=r,n)),this._notifyScopeListeners(),this},t.prototype.setExtras=function(e){return this._extra=D.__assign(D.__assign({},this._extra),e),this._notifyScopeListeners(),this},t.prototype.setExtra=function(e,r){var n;return this._extra=D.__assign(D.__assign({},this._extra),(n={},n[e]=r,n)),this._notifyScopeListeners(),this},t.prototype.setFingerprint=function(e){return this._fingerprint=e,this._notifyScopeListeners(),this},t.prototype.setLevel=function(e){return this._level=e,this._notifyScopeListeners(),this},t.prototype.setTransactionName=function(e){return this._transactionName=e,this._notifyScopeListeners(),this},t.prototype.setTransaction=function(e){return this.setTransactionName(e)},t.prototype.setContext=function(e,r){var n;return r===null?delete this._contexts[e]:this._contexts=D.__assign(D.__assign({},this._contexts),(n={},n[e]=r,n)),this._notifyScopeListeners(),this},t.prototype.setSpan=function(e){return this._span=e,this._notifyScopeListeners(),this},t.prototype.getSpan=function(){return this._span},t.prototype.getTransaction=function(){var e,r,n,i,o=this.getSpan();if((e=o)===null||e===void 0?void 0:e.transaction)return(r=o)===null||r===void 0?void 0:r.transaction;if((i=(n=o)===null||n===void 0?void 0:n.spanRecorder)===null||i===void 0?void 0:i.spans[0])return o.spanRecorder.spans[0]},t.prototype.setSession=function(e){return e?this._session=e:delete this._session,this._notifyScopeListeners(),this},t.prototype.getSession=function(){return this._session},t.prototype.update=function(e){if(!e)return this;if(typeof e=="function"){var r=e(this);return r instanceof t?r:this}return e instanceof t?(this._tags=D.__assign(D.__assign({},this._tags),e._tags),this._extra=D.__assign(D.__assign({},this._extra),e._extra),this._contexts=D.__assign(D.__assign({},this._contexts),e._contexts),e._user&&Object.keys(e._user).length&&(this._user=e._user),e._level&&(this._level=e._level),e._fingerprint&&(this._fingerprint=e._fingerprint),e._requestSession&&(this._requestSession=e._requestSession)):Pr.isPlainObject(e)&&(e=e,this._tags=D.__assign(D.__assign({},this._tags),e.tags),this._extra=D.__assign(D.__assign({},this._extra),e.extra),this._contexts=D.__assign(D.__assign({},this._contexts),e.contexts),e.user&&(this._user=e.user),e.level&&(this._level=e.level),e.fingerprint&&(this._fingerprint=e.fingerprint),e.requestSession&&(this._requestSession=e.requestSession)),this},t.prototype.clear=function(){return this._breadcrumbs=[],this._tags={},this._extra={},this._user={},this._contexts={},this._level=void 0,this._transactionName=void 0,this._fingerprint=void 0,this._requestSession=void 0,this._span=void 0,this._session=void 0,this._notifyScopeListeners(),this},t.prototype.addBreadcrumb=function(e,r){var n=typeof r=="number"?Math.min(r,Oc):Oc;if(n<=0)return this;var i=D.__assign({timestamp:Pr.dateTimestampInSeconds()},e);return this._breadcrumbs=D.__spread(this._breadcrumbs,[i]).slice(-n),this._notifyScopeListeners(),this},t.prototype.clearBreadcrumbs=function(){return this._breadcrumbs=[],this._notifyScopeListeners(),this},t.prototype.applyToEvent=function(e,r){var n;if(this._extra&&Object.keys(this._extra).length&&(e.extra=D.__assign(D.__assign({},this._extra),e.extra)),this._tags&&Object.keys(this._tags).length&&(e.tags=D.__assign(D.__assign({},this._tags),e.tags)),this._user&&Object.keys(this._user).length&&(e.user=D.__assign(D.__assign({},this._user),e.user)),this._contexts&&Object.keys(this._contexts).length&&(e.contexts=D.__assign(D.__assign({},this._contexts),e.contexts)),this._level&&(e.level=this._level),this._transactionName&&(e.transaction=this._transactionName),this._span){e.contexts=D.__assign({trace:this._span.getTraceContext()},e.contexts);var i=(n=this._span.transaction)===null||n===void 0?void 0:n.name;i&&(e.tags=D.__assign({transaction:i},e.tags))}return this._applyFingerprint(e),e.breadcrumbs=D.__spread(e.breadcrumbs||[],this._breadcrumbs),e.breadcrumbs=e.breadcrumbs.length>0?e.breadcrumbs:void 0,this._notifyEventProcessors(D.__spread(Cc(),this._eventProcessors),e,r)},t.prototype._notifyEventProcessors=function(e,r,n,i){var o=this;return i===void 0&&(i=0),new Pr.SyncPromise(function(s,a){var u=e[i];if(r===null||typeof u!="function")s(r);else{var c=u(D.__assign({},r),n);Pr.isThenable(c)?c.then(function(l){return o._notifyEventProcessors(e,l,n,i+1).then(s)}).then(null,a):o._notifyEventProcessors(e,c,n,i+1).then(s).then(null,a)}})},t.prototype._notifyScopeListeners=function(){var e=this;this._notifyingListeners||(this._notifyingListeners=!0,this._scopeListeners.forEach(function(r){r(e)}),this._notifyingListeners=!1)},t.prototype._applyFingerprint=function(e){e.fingerprint=e.fingerprint?Array.isArray(e.fingerprint)?e.fingerprint:[e.fingerprint]:[],this._fingerprint&&(e.fingerprint=e.fingerprint.concat(this._fingerprint)),e.fingerprint&&!e.fingerprint.length&&delete e.fingerprint},t}();qn.Scope=g_;function Cc(){var t=Pr.getGlobalObject();return t.__SENTRY__=t.__SENTRY__||{},t.__SENTRY__.globalEventProcessors=t.__SENTRY__.globalEventProcessors||[],t.__SENTRY__.globalEventProcessors}function m_(t){Cc().push(t)}qn.addGlobalEventProcessor=m_});var wo=b(To=>{Object.defineProperty(To,"__esModule",{value:!0});var Eo=se(),tr=N(),y_=function(){function t(e){this.errors=0,this.sid=tr.uuid4(),this.duration=0,this.status=Eo.SessionStatus.Ok,this.init=!0,this.ignoreDuration=!1;var r=tr.timestampInSeconds();this.timestamp=r,this.started=r,e&&this.update(e)}return t.prototype.update=function(e){if(e===void 0&&(e={}),e.user&&(!this.ipAddress&&e.user.ip_address&&(this.ipAddress=e.user.ip_address),!this.did&&!e.did&&(this.did=e.user.id||e.user.email||e.user.username)),this.timestamp=e.timestamp||tr.timestampInSeconds(),e.ignoreDuration&&(this.ignoreDuration=e.ignoreDuration),e.sid&&(this.sid=e.sid.length===32?e.sid:tr.uuid4()),e.init!==void 0&&(this.init=e.init),!this.did&&e.did&&(this.did=""+e.did),typeof e.started=="number"&&(this.started=e.started),this.ignoreDuration)this.duration=void 0;else if(typeof e.duration=="number")this.duration=e.duration;else{var r=this.timestamp-this.started;this.duration=r>=0?r:0}e.release&&(this.release=e.release),e.environment&&(this.environment=e.environment),!this.ipAddress&&e.ipAddress&&(this.ipAddress=e.ipAddress),!this.userAgent&&e.userAgent&&(this.userAgent=e.userAgent),typeof e.errors=="number"&&(this.errors=e.errors),e.status&&(this.status=e.status)},t.prototype.close=function(e){e?this.update({status:e}):this.status===Eo.SessionStatus.Ok?this.update({status:Eo.SessionStatus.Exited}):this.update()},t.prototype.toJSON=function(){return tr.dropUndefinedKeys({sid:""+this.sid,init:this.init,started:new Date(this.started*1e3).toISOString(),timestamp:new Date(this.timestamp*1e3).toISOString(),status:this.status,errors:this.errors,did:typeof this.did=="number"||typeof this.did=="string"?""+this.did:void 0,duration:this.duration,attrs:tr.dropUndefinedKeys({release:this.release,environment:this.environment,ip_address:this.ipAddress,user_agent:this.userAgent})})},t}();To.Session=y_});var xo=b(be=>{Object.defineProperty(be,"__esModule",{value:!0});var Fe=q(),xc=se(),je=N(),Oo=So(),b_=wo();be.API_VERSION=4;var S_=100,kn=function(){function t(e,r,n){r===void 0&&(r=new Oo.Scope),n===void 0&&(n=be.API_VERSION),this._version=n,this._stack=[{}],this.getStackTop().scope=r,e&&this.bindClient(e)}return t.prototype.isOlderThan=function(e){return this._version<e},t.prototype.bindClient=function(e){var r=this.getStackTop();r.client=e,e&&e.setupIntegrations&&e.setupIntegrations()},t.prototype.pushScope=function(){var e=Oo.Scope.clone(this.getScope());return this.getStack().push({client:this.getClient(),scope:e}),e},t.prototype.popScope=function(){return this.getStack().length<=1?!1:!!this.getStack().pop()},t.prototype.withScope=function(e){var r=this.pushScope();try{e(r)}finally{this.popScope()}},t.prototype.getClient=function(){return this.getStackTop().client},t.prototype.getScope=function(){return this.getStackTop().scope},t.prototype.getStack=function(){return this._stack},t.prototype.getStackTop=function(){return this._stack[this._stack.length-1]},t.prototype.captureException=function(e,r){var n=this._lastEventId=je.uuid4(),i=r;if(!r){var o=void 0;try{throw new Error("Sentry syntheticException")}catch(s){o=s}i={originalException:e,syntheticException:o}}return this._invokeClient("captureException",e,Fe.__assign(Fe.__assign({},i),{event_id:n})),n},t.prototype.captureMessage=function(e,r,n){var i=this._lastEventId=je.uuid4(),o=n;if(!n){var s=void 0;try{throw new Error(e)}catch(a){s=a}o={originalException:e,syntheticException:s}}return this._invokeClient("captureMessage",e,r,Fe.__assign(Fe.__assign({},o),{event_id:i})),i},t.prototype.captureEvent=function(e,r){var n=je.uuid4();return e.type!=="transaction"&&(this._lastEventId=n),this._invokeClient("captureEvent",e,Fe.__assign(Fe.__assign({},r),{event_id:n})),n},t.prototype.lastEventId=function(){return this._lastEventId},t.prototype.addBreadcrumb=function(e,r){var n=this.getStackTop(),i=n.scope,o=n.client;if(!(!i||!o)){var s=o.getOptions&&o.getOptions()||{},a=s.beforeBreadcrumb,u=a===void 0?null:a,c=s.maxBreadcrumbs,l=c===void 0?S_:c;if(!(l<=0)){var d=je.dateTimestampInSeconds(),h=Fe.__assign({timestamp:d},e),_=u?je.consoleSandbox(function(){return u(h,r)}):h;_!==null&&i.addBreadcrumb(_,l)}}},t.prototype.setUser=function(e){var r=this.getScope();r&&r.setUser(e)},t.prototype.setTags=function(e){var r=this.getScope();r&&r.setTags(e)},t.prototype.setExtras=function(e){var r=this.getScope();r&&r.setExtras(e)},t.prototype.setTag=function(e,r){var n=this.getScope();n&&n.setTag(e,r)},t.prototype.setExtra=function(e,r){var n=this.getScope();n&&n.setExtra(e,r)},t.prototype.setContext=function(e,r){var n=this.getScope();n&&n.setContext(e,r)},t.prototype.configureScope=function(e){var r=this.getStackTop(),n=r.scope,i=r.client;n&&i&&e(n)},t.prototype.run=function(e){var r=Co(this);try{e(this)}finally{Co(r)}},t.prototype.getIntegration=function(e){var r=this.getClient();if(!r)return null;try{return r.getIntegration(e)}catch{return je.logger.warn("Cannot retrieve integration "+e.id+" from the current Hub"),null}},t.prototype.startSpan=function(e){return this._callExtensionMethod("startSpan",e)},t.prototype.startTransaction=function(e,r){return this._callExtensionMethod("startTransaction",e,r)},t.prototype.traceHeaders=function(){return this._callExtensionMethod("traceHeaders")},t.prototype.captureSession=function(e){if(e===void 0&&(e=!1),e)return this.endSession();this._sendSessionUpdate()},t.prototype.endSession=function(){var e,r,n,i,o;(n=(r=(e=this.getStackTop())===null||e===void 0?void 0:e.scope)===null||r===void 0?void 0:r.getSession())===null||n===void 0||n.close(),this._sendSessionUpdate(),(o=(i=this.getStackTop())===null||i===void 0?void 0:i.scope)===null||o===void 0||o.setSession()},t.prototype.startSession=function(e){var r=this.getStackTop(),n=r.scope,i=r.client,o=i&&i.getOptions()||{},s=o.release,a=o.environment,u=je.getGlobalObject(),c=(u.navigator||{}).userAgent,l=new b_.Session(Fe.__assign(Fe.__assign(Fe.__assign({release:s,environment:a},n&&{user:n.getUser()}),c&&{userAgent:c}),e));if(n){var d=n.getSession&&n.getSession();d&&d.status===xc.SessionStatus.Ok&&d.update({status:xc.SessionStatus.Exited}),this.endSession(),n.setSession(l)}return l},t.prototype._sendSessionUpdate=function(){var e=this.getStackTop(),r=e.scope,n=e.client;if(!!r){var i=r.getSession&&r.getSession();i&&n&&n.captureSession&&n.captureSession(i)}},t.prototype._invokeClient=function(e){for(var r,n=[],i=1;i<arguments.length;i++)n[i-1]=arguments[i];var o=this.getStackTop(),s=o.scope,a=o.client;a&&a[e]&&(r=a)[e].apply(r,Fe.__spread(n,[s]))},t.prototype._callExtensionMethod=function(e){for(var r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];var i=rr(),o=i.__SENTRY__;if(o&&o.extensions&&typeof o.extensions[e]=="function")return o.extensions[e].apply(this,r);je.logger.warn("Extension method "+e+" couldn't be found, doing nothing.")},t}();be.Hub=kn;function rr(){var t=je.getGlobalObject();return t.__SENTRY__=t.__SENTRY__||{extensions:{},hub:void 0},t}be.getMainCarrier=rr;function Co(t){var e=rr(),r=tt(e);return Dn(e,t),r}be.makeMain=Co;function E_(){var t=rr();return(!Rc(t)||tt(t).isOlderThan(be.API_VERSION))&&Dn(t,new kn),je.isNodeEnv()?w_(t):tt(t)}be.getCurrentHub=E_;function T_(){je.logger.warn("Function `getActiveDomain` is deprecated and will be removed in a future version.");var t=rr().__SENTRY__;return t&&t.extensions&&t.extensions.domain&&t.extensions.domain.active}be.getActiveDomain=T_;function w_(t){var e,r,n;try{var i=(n=(r=(e=rr().__SENTRY__)===null||e===void 0?void 0:e.extensions)===null||r===void 0?void 0:r.domain)===null||n===void 0?void 0:n.active;if(!i)return tt(t);if(!Rc(i)||tt(i).isOlderThan(be.API_VERSION)){var o=tt(t).getStackTop();Dn(i,new kn(o.client,Oo.Scope.clone(o.scope)))}return tt(i)}catch{return tt(t)}}function Rc(t){return!!(t&&t.__SENTRY__&&t.__SENTRY__.hub)}function tt(t){return t&&t.__SENTRY__&&t.__SENTRY__.hub||(t.__SENTRY__=t.__SENTRY__||{},t.__SENTRY__.hub=new kn),t.__SENTRY__.hub}be.getHubFromCarrier=tt;function Dn(t,e){return t?(t.__SENTRY__=t.__SENTRY__||{},t.__SENTRY__.hub=e,!0):!1}be.setHubOnCarrier=Dn});var Ic=b(Ao=>{Object.defineProperty(Ao,"__esModule",{value:!0});var Ro=se(),Io=N(),O_=xo(),C_=function(){function t(e,r){var n=this;this.flushTimeout=60,this._pendingAggregates={},this._isEnabled=!0,this._transport=e,this._intervalId=setInterval(function(){return n.flush()},this.flushTimeout*1e3),this._sessionAttrs=r}return t.prototype.sendSessionAggregates=function(e){if(!this._transport.sendSession){Io.logger.warn("Dropping session because custom transport doesn't implement sendSession");return}this._transport.sendSession(e).then(null,function(r){Io.logger.error("Error while sending session: "+r)})},t.prototype.flush=function(){var e=this.getSessionAggregates();e.aggregates.length!==0&&(this._pendingAggregates={},this.sendSessionAggregates(e))},t.prototype.getSessionAggregates=function(){var e=this,r=Object.keys(this._pendingAggregates).map(function(i){return e._pendingAggregates[parseInt(i)]}),n={attrs:this._sessionAttrs,aggregates:r};return Io.dropUndefinedKeys(n)},t.prototype.close=function(){clearInterval(this._intervalId),this._isEnabled=!1,this.flush()},t.prototype.incrementSessionStatusCount=function(){var e,r;if(!!this._isEnabled){var n=O_.getCurrentHub().getScope(),i=(e=n)===null||e===void 0?void 0:e.getRequestSession();i&&i.status&&(this._incrementSessionStatusCount(i.status,new Date),(r=n)===null||r===void 0||r.setRequestSession(void 0))}},t.prototype._incrementSessionStatusCount=function(e,r){var n=new Date(r).setSeconds(0,0);this._pendingAggregates[n]=this._pendingAggregates[n]||{};var i=this._pendingAggregates[n];switch(i.started||(i.started=new Date(n).toISOString()),e){case Ro.RequestSessionStatus.Errored:return i.errored=(i.errored||0)+1,i.errored;case Ro.RequestSessionStatus.Ok:return i.exited=(i.exited||0)+1,i.exited;case Ro.RequestSessionStatus.Crashed:return i.crashed=(i.crashed||0)+1,i.crashed}},t}();Ao.SessionFlusher=C_});var Ee=b(Se=>{Object.defineProperty(Se,"__esModule",{value:!0});var Ac=So();Se.addGlobalEventProcessor=Ac.addGlobalEventProcessor;Se.Scope=Ac.Scope;var x_=wo();Se.Session=x_.Session;var R_=Ic();Se.SessionFlusher=R_.SessionFlusher;var Mt=xo();Se.getActiveDomain=Mt.getActiveDomain;Se.getCurrentHub=Mt.getCurrentHub;Se.getHubFromCarrier=Mt.getHubFromCarrier;Se.getMainCarrier=Mt.getMainCarrier;Se.Hub=Mt.Hub;Se.makeMain=Mt.makeMain;Se.setHubOnCarrier=Mt.setHubOnCarrier});var Mc=b(fe=>{Object.defineProperty(fe,"__esModule",{value:!0});var Ln=q(),I_=Ee();function ge(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=I_.getCurrentHub();if(n&&n[t])return n[t].apply(n,Ln.__spread(e));throw new Error("No hub defined or "+t+" was not found on the hub, please open a bug report.")}function A_(t,e){var r;try{throw new Error("Sentry syntheticException")}catch(n){r=n}return ge("captureException",t,{captureContext:e,originalException:t,syntheticException:r})}fe.captureException=A_;function M_(t,e){var r;try{throw new Error(t)}catch(o){r=o}var n=typeof e=="string"?e:void 0,i=typeof e!="string"?{captureContext:e}:void 0;return ge("captureMessage",t,n,Ln.__assign({originalException:t,syntheticException:r},i))}fe.captureMessage=M_;function P_(t){return ge("captureEvent",t)}fe.captureEvent=P_;function N_(t){ge("configureScope",t)}fe.configureScope=N_;function q_(t){ge("addBreadcrumb",t)}fe.addBreadcrumb=q_;function k_(t,e){ge("setContext",t,e)}fe.setContext=k_;function D_(t){ge("setExtras",t)}fe.setExtras=D_;function L_(t){ge("setTags",t)}fe.setTags=L_;function F_(t,e){ge("setExtra",t,e)}fe.setExtra=F_;function j_(t,e){ge("setTag",t,e)}fe.setTag=j_;function U_(t){ge("setUser",t)}fe.setUser=U_;function H_(t){ge("withScope",t)}fe.withScope=H_;function B_(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];ge.apply(void 0,Ln.__spread(["_invokeClient",t],e))}fe._callOnClient=B_;function G_(t,e){return ge("startTransaction",Ln.__assign({},t),e)}fe.startTransaction=G_});var qc=b(Mo=>{Object.defineProperty(Mo,"__esModule",{value:!0});var Pc=N(),Nc="7",z_=function(){function t(e,r,n){r===void 0&&(r={}),this.dsn=e,this._dsnObject=new Pc.Dsn(e),this.metadata=r,this._tunnel=n}return t.prototype.getDsn=function(){return this._dsnObject},t.prototype.forceEnvelope=function(){return!!this._tunnel},t.prototype.getBaseApiEndpoint=function(){var e=this.getDsn(),r=e.protocol?e.protocol+":":"",n=e.port?":"+e.port:"";return r+"//"+e.host+n+(e.path?"/"+e.path:"")+"/api/"},t.prototype.getStoreEndpoint=function(){return this._getIngestEndpoint("store")},t.prototype.getStoreEndpointWithUrlEncodedAuth=function(){return this.getStoreEndpoint()+"?"+this._encodedAuth()},t.prototype.getEnvelopeEndpointWithUrlEncodedAuth=function(){return this.forceEnvelope()?this._tunnel:this._getEnvelopeEndpoint()+"?"+this._encodedAuth()},t.prototype.getStoreEndpointPath=function(){var e=this.getDsn();return(e.path?"/"+e.path:"")+"/api/"+e.projectId+"/store/"},t.prototype.getRequestHeaders=function(e,r){var n=this.getDsn(),i=["Sentry sentry_version="+Nc];return i.push("sentry_client="+e+"/"+r),i.push("sentry_key="+n.publicKey),n.pass&&i.push("sentry_secret="+n.pass),{"Content-Type":"application/json","X-Sentry-Auth":i.join(", ")}},t.prototype.getReportDialogEndpoint=function(e){e===void 0&&(e={});var r=this.getDsn(),n=this.getBaseApiEndpoint()+"embed/error-page/",i=[];i.push("dsn="+r.toString());for(var o in e)if(o!=="dsn")if(o==="user"){if(!e.user)continue;e.user.name&&i.push("name="+encodeURIComponent(e.user.name)),e.user.email&&i.push("email="+encodeURIComponent(e.user.email))}else i.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));return i.length?n+"?"+i.join("&"):n},t.prototype._getEnvelopeEndpoint=function(){return this._getIngestEndpoint("envelope")},t.prototype._getIngestEndpoint=function(e){if(this._tunnel)return this._tunnel;var r=this.getBaseApiEndpoint(),n=this.getDsn();return""+r+n.projectId+"/"+e+"/"},t.prototype._encodedAuth=function(){var e=this.getDsn(),r={sentry_key:e.publicKey,sentry_version:Nc};return Pc.urlEncode(r)},t}();Mo.API=z_});var jc=b(ht=>{Object.defineProperty(ht,"__esModule",{value:!0});var Fn=q(),kc=Ee(),V_=N();ht.installedIntegrations=[];function Dc(t){return t.reduce(function(e,r){return e.every(function(n){return r.name!==n.name})&&e.push(r),e},[])}function Lc(t){var e=t.defaultIntegrations&&Fn.__spread(t.defaultIntegrations)||[],r=t.integrations,n=Fn.__spread(Dc(e));Array.isArray(r)?n=Fn.__spread(n.filter(function(s){return r.every(function(a){return a.name!==s.name})}),Dc(r)):typeof r=="function"&&(n=r(n),n=Array.isArray(n)?n:[n]);var i=n.map(function(s){return s.name}),o="Debug";return i.indexOf(o)!==-1&&n.push.apply(n,Fn.__spread(n.splice(i.indexOf(o),1))),n}ht.getIntegrationsToSetup=Lc;function Fc(t){ht.installedIntegrations.indexOf(t.name)===-1&&(t.setupOnce(kc.addGlobalEventProcessor,kc.getCurrentHub),ht.installedIntegrations.push(t.name),V_.logger.log("Integration installed: "+t.name))}ht.setupIntegration=Fc;function W_(t){var e={};return Lc(t).forEach(function(r){e[r.name]=r,Fc(r)}),Object.defineProperty(e,"initialized",{value:!0}),e}ht.setupIntegrations=W_});var Hc=b(Po=>{Object.defineProperty(Po,"__esModule",{value:!0});var Te=q(),$_=Ee(),Nr=se(),B=N(),Y_=jc(),Uc="Not capturing exception because it's already been captured.",K_=function(){function t(e,r){this._integrations={},this._numProcessing=0,this._backend=new e(r),this._options=r,r.dsn&&(this._dsn=new B.Dsn(r.dsn))}return t.prototype.captureException=function(e,r,n){var i=this;if(B.checkOrSetAlreadyCaught(e)){B.logger.log(Uc);return}var o=r&&r.event_id;return this._process(this._getBackend().eventFromException(e,r).then(function(s){return i._captureEvent(s,r,n)}).then(function(s){o=s})),o},t.prototype.captureMessage=function(e,r,n,i){var o=this,s=n&&n.event_id,a=B.isPrimitive(e)?this._getBackend().eventFromMessage(String(e),r,n):this._getBackend().eventFromException(e,n);return this._process(a.then(function(u){return o._captureEvent(u,n,i)}).then(function(u){s=u})),s},t.prototype.captureEvent=function(e,r,n){var i;if(((i=r)===null||i===void 0?void 0:i.originalException)&&B.checkOrSetAlreadyCaught(r.originalException)){B.logger.log(Uc);return}var o=r&&r.event_id;return this._process(this._captureEvent(e,r,n).then(function(s){o=s})),o},t.prototype.captureSession=function(e){if(!this._isEnabled()){B.logger.warn("SDK not enabled, will not capture session.");return}typeof e.release!="string"?B.logger.warn("Discarded session because of missing or non-string release"):(this._sendSession(e),e.update({init:!1}))},t.prototype.getDsn=function(){return this._dsn},t.prototype.getOptions=function(){return this._options},t.prototype.getTransport=function(){return this._getBackend().getTransport()},t.prototype.flush=function(e){var r=this;return this._isClientDoneProcessing(e).then(function(n){return r.getTransport().close(e).then(function(i){return n&&i})})},t.prototype.close=function(e){var r=this;return this.flush(e).then(function(n){return r.getOptions().enabled=!1,n})},t.prototype.setupIntegrations=function(){this._isEnabled()&&!this._integrations.initialized&&(this._integrations=Y_.setupIntegrations(this._options))},t.prototype.getIntegration=function(e){try{return this._integrations[e.id]||null}catch{return B.logger.warn("Cannot retrieve integration "+e.id+" from the current Client"),null}},t.prototype._updateSessionFromEvent=function(e,r){var n,i,o=!1,s=!1,a=r.exception&&r.exception.values;if(a){s=!0;try{for(var u=Te.__values(a),c=u.next();!c.done;c=u.next()){var l=c.value,d=l.mechanism;if(d&&d.handled===!1){o=!0;break}}}catch(S){n={error:S}}finally{try{c&&!c.done&&(i=u.return)&&i.call(u)}finally{if(n)throw n.error}}}var h=e.status===Nr.SessionStatus.Ok,_=h&&e.errors===0||h&&o;_&&(e.update(Te.__assign(Te.__assign({},o&&{status:Nr.SessionStatus.Crashed}),{errors:e.errors||Number(s||o)})),this.captureSession(e))},t.prototype._sendSession=function(e){this._getBackend().sendSession(e)},t.prototype._isClientDoneProcessing=function(e){var r=this;return new B.SyncPromise(function(n){var i=0,o=1,s=setInterval(function(){r._numProcessing==0?(clearInterval(s),n(!0)):(i+=o,e&&i>=e&&(clearInterval(s),n(!1)))},o)})},t.prototype._getBackend=function(){return this._backend},t.prototype._isEnabled=function(){return this.getOptions().enabled!==!1&&this._dsn!==void 0},t.prototype._prepareEvent=function(e,r,n){var i=this,o=this.getOptions().normalizeDepth,s=o===void 0?3:o,a=Te.__assign(Te.__assign({},e),{event_id:e.event_id||(n&&n.event_id?n.event_id:B.uuid4()),timestamp:e.timestamp||B.dateTimestampInSeconds()});this._applyClientOptions(a),this._applyIntegrationsMetadata(a);var u=r;n&&n.captureContext&&(u=$_.Scope.clone(u).update(n.captureContext));var c=B.SyncPromise.resolve(a);return u&&(c=u.applyToEvent(a,n)),c.then(function(l){return typeof s=="number"&&s>0?i._normalizeEvent(l,s):l})},t.prototype._normalizeEvent=function(e,r){if(!e)return null;var n=Te.__assign(Te.__assign(Te.__assign(Te.__assign(Te.__assign({},e),e.breadcrumbs&&{breadcrumbs:e.breadcrumbs.map(function(s){return Te.__assign(Te.__assign({},s),s.data&&{data:B.normalize(s.data,r)})})}),e.user&&{user:B.normalize(e.user,r)}),e.contexts&&{contexts:B.normalize(e.contexts,r)}),e.extra&&{extra:B.normalize(e.extra,r)});e.contexts&&e.contexts.trace&&(n.contexts.trace=e.contexts.trace);var i=this.getOptions()._experiments,o=i===void 0?{}:i;return o.ensureNoCircularStructures?B.normalize(n):n},t.prototype._applyClientOptions=function(e){var r=this.getOptions(),n=r.environment,i=r.release,o=r.dist,s=r.maxValueLength,a=s===void 0?250:s;"environment"in e||(e.environment="environment"in r?n:"production"),e.release===void 0&&i!==void 0&&(e.release=i),e.dist===void 0&&o!==void 0&&(e.dist=o),e.message&&(e.message=B.truncate(e.message,a));var u=e.exception&&e.exception.values&&e.exception.values[0];u&&u.value&&(u.value=B.truncate(u.value,a));var c=e.request;c&&c.url&&(c.url=B.truncate(c.url,a))},t.prototype._applyIntegrationsMetadata=function(e){var r=Object.keys(this._integrations);r.length>0&&(e.sdk=e.sdk||{},e.sdk.integrations=Te.__spread(e.sdk.integrations||[],r))},t.prototype._sendEvent=function(e){this._getBackend().sendEvent(e)},t.prototype._captureEvent=function(e,r,n){return this._processEvent(e,r,n).then(function(i){return i.event_id},function(i){B.logger.error(i)})},t.prototype._processEvent=function(e,r,n){var i=this,o,s,a=this.getOptions(),u=a.beforeSend,c=a.sampleRate,l=this.getTransport();if(!this._isEnabled())return B.SyncPromise.reject(new B.SentryError("SDK not enabled, will not capture event."));var d=e.type==="transaction";return!d&&typeof c=="number"&&Math.random()>c?((s=(o=l).recordLostEvent)===null||s===void 0||s.call(o,Nr.Outcome.SampleRate,"event"),B.SyncPromise.reject(new B.SentryError("Discarding event because it's not included in the random sample (sampling rate = "+c+")"))):this._prepareEvent(e,n,r).then(function(h){var _,S;if(h===null)throw(S=(_=l).recordLostEvent)===null||S===void 0||S.call(_,Nr.Outcome.EventProcessor,e.type||"event"),new B.SentryError("An event processor returned null, will not send event.");var T=r&&r.data&&r.data.__sentry__===!0;if(T||d||!u)return h;var R=u(h,r);return i._ensureBeforeSendRv(R)}).then(function(h){var _,S;if(h===null)throw(S=(_=l).recordLostEvent)===null||S===void 0||S.call(_,Nr.Outcome.BeforeSend,e.type||"event"),new B.SentryError("`beforeSend` returned `null`, will not send event.");var T=n&&n.getSession&&n.getSession();return!d&&T&&i._updateSessionFromEvent(T,h),i._sendEvent(h),h}).then(null,function(h){throw h instanceof B.SentryError?h:(i.captureException(h,{data:{__sentry__:!0},originalException:h}),new B.SentryError(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.
11
- Reason: `+h))})},t.prototype._process=function(e){var r=this;this._numProcessing+=1,e.then(function(n){return r._numProcessing-=1,n},function(n){return r._numProcessing-=1,n})},t.prototype._ensureBeforeSendRv=function(e){var r="`beforeSend` method has to return `null` or a valid event.";if(B.isThenable(e))return e.then(function(n){if(!(B.isPlainObject(n)||n===null))throw new B.SentryError(r);return n},function(n){throw new B.SentryError("beforeSend rejected with "+n)});if(!(B.isPlainObject(e)||e===null))throw new B.SentryError(r);return e},t}();Po.BaseClient=K_});var qo=b(No=>{Object.defineProperty(No,"__esModule",{value:!0});var J_=se(),Bc=N(),X_=function(){function t(){}return t.prototype.sendEvent=function(e){return Bc.SyncPromise.resolve({reason:"NoopTransport: Event has been skipped because no Dsn is configured.",status:J_.Status.Skipped})},t.prototype.close=function(e){return Bc.SyncPromise.resolve(!0)},t}();No.NoopTransport=X_});var Gc=b(ko=>{Object.defineProperty(ko,"__esModule",{value:!0});var nr=N(),Q_=qo(),Z_=function(){function t(e){this._options=e,this._options.dsn||nr.logger.warn("No DSN provided, backend will not do anything."),this._transport=this._setupTransport()}return t.prototype.eventFromException=function(e,r){throw new nr.SentryError("Backend has to implement `eventFromException` method")},t.prototype.eventFromMessage=function(e,r,n){throw new nr.SentryError("Backend has to implement `eventFromMessage` method")},t.prototype.sendEvent=function(e){this._transport.sendEvent(e).then(null,function(r){nr.logger.error("Error while sending event: "+r)})},t.prototype.sendSession=function(e){if(!this._transport.sendSession){nr.logger.warn("Dropping session because custom transport doesn't implement sendSession");return}this._transport.sendSession(e).then(null,function(r){nr.logger.error("Error while sending session: "+r)})},t.prototype.getTransport=function(){return this._transport},t.prototype._setupTransport=function(){return new Q_.NoopTransport},t}();ko.BaseBackend=Z_});var Vc=b(jn=>{Object.defineProperty(jn,"__esModule",{value:!0});var Pt=q();function zc(t){if(!(!t.metadata||!t.metadata.sdk)){var e=t.metadata.sdk,r=e.name,n=e.version;return{name:r,version:n}}}function eg(t,e){return e&&(t.sdk=t.sdk||{},t.sdk.name=t.sdk.name||e.name,t.sdk.version=t.sdk.version||e.version,t.sdk.integrations=Pt.__spread(t.sdk.integrations||[],e.integrations||[]),t.sdk.packages=Pt.__spread(t.sdk.packages||[],e.packages||[])),t}function tg(t,e){var r=zc(e),n=JSON.stringify(Pt.__assign(Pt.__assign({sent_at:new Date().toISOString()},r&&{sdk:r}),e.forceEnvelope()&&{dsn:e.getDsn().toString()})),i="aggregates"in t?"sessions":"session",o=JSON.stringify({type:i});return{body:n+`
9
+ Name: `+Zp.getFunctionName(a)+`
10
+ Error: `+s)}}}catch(s){r={error:s}}finally{try{o&&!o.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}}function rh(){"console"in Y&&["debug","info","warn","error","log","assert"].forEach(function(t){t in Y.console&&ze.fill(Y.console,t,function(e){return function(){for(var r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];Ae("console",{args:r,level:t}),e&&Function.prototype.apply.call(e,Y.console,r)}})})}function nh(){!su.supportsNativeFetch()||ze.fill(Y,"fetch",function(t){return function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var n={args:e,fetchData:{method:ih(e),url:oh(e)},startTimestamp:Date.now()};return Ae("fetch",jt.__assign({},n)),t.apply(Y,e).then(function(i){return Ae("fetch",jt.__assign(jt.__assign({},n),{endTimestamp:Date.now(),response:i})),i},function(i){throw Ae("fetch",jt.__assign(jt.__assign({},n),{endTimestamp:Date.now(),error:i})),i})}})}function ih(t){return t===void 0&&(t=[]),"Request"in Y&&rn.isInstanceOf(t[0],Request)&&t[0].method?String(t[0].method).toUpperCase():t[1]&&t[1].method?String(t[1].method).toUpperCase():"GET"}function oh(t){return t===void 0&&(t=[]),typeof t[0]=="string"?t[0]:"Request"in Y&&rn.isInstanceOf(t[0],Request)?t[0].url:String(t[0])}function ah(){if("XMLHttpRequest"in Y){var t=[],e=[],r=XMLHttpRequest.prototype;ze.fill(r,"open",function(n){return function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];var a=this,s=i[1];a.__sentry_xhr__={method:rn.isString(i[0])?i[0].toUpperCase():i[0],url:i[1]},rn.isString(s)&&a.__sentry_xhr__.method==="POST"&&s.match(/sentry_key/)&&(a.__sentry_own_request__=!0);var u=function(){if(a.readyState===4){try{a.__sentry_xhr__&&(a.__sentry_xhr__.status_code=a.status)}catch{}try{var c=t.indexOf(a);if(c!==-1){t.splice(c);var l=e.splice(c)[0];a.__sentry_xhr__&&l[0]!==void 0&&(a.__sentry_xhr__.body=l[0])}}catch{}Ae("xhr",{args:i,endTimestamp:Date.now(),startTimestamp:Date.now(),xhr:a})}};return"onreadystatechange"in a&&typeof a.onreadystatechange=="function"?ze.fill(a,"onreadystatechange",function(c){return function(){for(var l=[],d=0;d<arguments.length;d++)l[d]=arguments[d];return u(),c.apply(a,l)}}):a.addEventListener("readystatechange",u),n.apply(a,i)}}),ze.fill(r,"send",function(n){return function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];return t.push(this),e.push(i),Ae("xhr",{args:i,startTimestamp:Date.now(),xhr:this}),n.apply(this,i)}})}}var nn;function sh(){if(!su.supportsHistory())return;var t=Y.onpopstate;Y.onpopstate=function(){for(var r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];var i=Y.location.href,o=nn;if(nn=i,Ae("history",{from:o,to:i}),t)try{return t.apply(this,r)}catch{}};function e(r){return function(){for(var n=[],i=0;i<arguments.length;i++)n[i]=arguments[i];var o=n.length>2?n[2]:void 0;if(o){var a=nn,s=String(o);nn=s,Ae("history",{from:a,to:s})}return r.apply(this,n)}}ze.fill(Y.history,"pushState",e),ze.fill(Y.history,"replaceState",e)}var uh=1e3,on,an;function ch(t,e){if(!t||t.type!==e.type)return!0;try{if(t.target!==e.target)return!0}catch{}return!1}function fh(t){if(t.type!=="keypress")return!1;try{var e=t.target;if(!e||!e.tagName)return!0;if(e.tagName==="INPUT"||e.tagName==="TEXTAREA"||e.isContentEditable)return!1}catch{}return!0}function cu(t,e){return e===void 0&&(e=!1),function(r){if(!(!r||an===r)&&!fh(r)){var n=r.type==="keypress"?"input":r.type;on===void 0?(t({event:r,name:n,global:e}),an=r):ch(an,r)&&(t({event:r,name:n,global:e}),an=r),clearTimeout(on),on=Y.setTimeout(function(){on=void 0},uh)}}}function lh(){if("document"in Y){var t=Ae.bind(null,"dom"),e=cu(t,!0);Y.document.addEventListener("click",e,!1),Y.document.addEventListener("keypress",e,!1),["EventTarget","Node"].forEach(function(r){var n=Y[r]&&Y[r].prototype;!n||!n.hasOwnProperty||!n.hasOwnProperty("addEventListener")||(ze.fill(n,"addEventListener",function(i){return function(o,a,s){if(o==="click"||o=="keypress")try{var u=this,c=u.__sentry_instrumentation_handlers__=u.__sentry_instrumentation_handlers__||{},l=c[o]=c[o]||{refCount:0};if(!l.handler){var d=cu(t);l.handler=d,i.call(this,o,d,s)}l.refCount+=1}catch{}return i.call(this,o,a,s)}}),ze.fill(n,"removeEventListener",function(i){return function(o,a,s){if(o==="click"||o=="keypress")try{var u=this,c=u.__sentry_instrumentation_handlers__||{},l=c[o];l&&(l.refCount-=1,l.refCount<=0&&(i.call(this,o,l.handler,s),l.handler=void 0,delete c[o]),Object.keys(c).length===0&&delete u.__sentry_instrumentation_handlers__)}catch{}return i.call(this,o,a,s)}}))})}}var qi=null;function dh(){qi=Y.onerror,Y.onerror=function(t,e,r,n,i){return Ae("error",{column:n,error:i,line:r,msg:t,url:e}),qi?qi.apply(this,arguments):!1}}var Ni=null;function ph(){Ni=Y.onunhandledrejection,Y.onunhandledrejection=function(t){return Ae("unhandledrejection",t),Ni?Ni.apply(this,arguments):!0}}});var du=b(we=>{Object.defineProperty(we,"__esModule",{value:!0});var fr=N(),hh=nt(),ki=en();function _h(){var t=hh.getGlobalObject(),e=t.crypto||t.msCrypto;if(e!==void 0&&e.getRandomValues){var r=new Uint16Array(8);e.getRandomValues(r),r[3]=r[3]&4095|16384,r[4]=r[4]&16383|32768;var n=function(i){for(var o=i.toString(16);o.length<4;)o="0"+o;return o};return n(r[0])+n(r[1])+n(r[2])+n(r[3])+n(r[4])+n(r[5])+n(r[6])+n(r[7])}return"xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx".replace(/[xy]/g,function(i){var o=Math.random()*16|0,a=i==="x"?o:o&3|8;return a.toString(16)})}we.uuid4=_h;function vh(t){if(!t)return{};var e=t.match(/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?$/);if(!e)return{};var r=e[6]||"",n=e[8]||"";return{host:e[4],path:e[5],protocol:e[2],relative:e[5]+r+n}}we.parseUrl=vh;function gh(t){if(t.message)return t.message;if(t.exception&&t.exception.values&&t.exception.values[0]){var e=t.exception.values[0];return e.type&&e.value?e.type+": "+e.value:e.type||e.value||t.event_id||"<unknown>"}return t.event_id||"<unknown>"}we.getEventDescription=gh;function mh(t,e,r){t.exception=t.exception||{},t.exception.values=t.exception.values||[],t.exception.values[0]=t.exception.values[0]||{},t.exception.values[0].value=t.exception.values[0].value||e||"",t.exception.values[0].type=t.exception.values[0].type||r||"Error"}we.addExceptionTypeValue=mh;function yh(t,e){var r;if(!(!t.exception||!t.exception.values)){var n=t.exception.values[0],i={type:"generic",handled:!0},o=n.mechanism;if(n.mechanism=fr.__assign(fr.__assign(fr.__assign({},i),o),e),e&&"data"in e){var a=fr.__assign(fr.__assign({},(r=o)===null||r===void 0?void 0:r.data),e.data);n.mechanism.data=a}}}we.addExceptionMechanism=yh;var bh=/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;function Sh(t){var e=t.match(bh)||[],r=parseInt(e[1],10),n=parseInt(e[2],10),i=parseInt(e[3],10);return{buildmetadata:e[5],major:isNaN(r)?void 0:r,minor:isNaN(n)?void 0:n,patch:isNaN(i)?void 0:i,prerelease:e[4]}}we.parseSemver=Sh;var lu=60*1e3;function Eh(t,e){if(!e)return lu;var r=parseInt(""+e,10);if(!isNaN(r))return r*1e3;var n=Date.parse(""+e);return isNaN(n)?lu:n-t}we.parseRetryAfterHeader=Eh;function Th(t,e,r){r===void 0&&(r=5);var n=e.lineno||0,i=t.length,o=Math.max(Math.min(i,n-1),0);e.pre_context=t.slice(Math.max(0,o-r),o).map(function(a){return ki.snipLine(a,0)}),e.context_line=ki.snipLine(t[Math.min(i-1,o)],e.colno||0),e.post_context=t.slice(Math.min(o+1,i),o+1+r).map(function(a){return ki.snipLine(a,0)})}we.addContextToFrame=Th;function Oh(t){return t.split(/[\?#]/,1)[0]}we.stripUrlQueryAndFragment=Oh;function wh(t){var e;if((e=t)===null||e===void 0?void 0:e.__sentry_captured__)return!0;try{Object.defineProperty(t,"__sentry_captured__",{value:!0})}catch{}return!1}we.checkOrSetAlreadyCaught=wh});var mu=b(Ve=>{Object.defineProperty(Ve,"__esModule",{value:!0});function pu(t,e){for(var r=0,n=t.length-1;n>=0;n--){var i=t[n];i==="."?t.splice(n,1):i===".."?(t.splice(n,1),r++):r&&(t.splice(n,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}var xh=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^/]+?|)(\.[^./]*|))(?:[/]*)$/;function hu(t){var e=xh.exec(t);return e?e.slice(1):[]}function Di(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];for(var r="",n=!1,i=t.length-1;i>=-1&&!n;i--){var o=i>=0?t[i]:"/";!o||(r=o+"/"+r,n=o.charAt(0)==="/")}return r=pu(r.split("/").filter(function(a){return!!a}),!n).join("/"),(n?"/":"")+r||"."}Ve.resolve=Di;function _u(t){for(var e=0;e<t.length&&t[e]==="";e++);for(var r=t.length-1;r>=0&&t[r]==="";r--);return e>r?[]:t.slice(e,r-e+1)}function Ih(t,e){t=Di(t).substr(1),e=Di(e).substr(1);for(var r=_u(t.split("/")),n=_u(e.split("/")),i=Math.min(r.length,n.length),o=i,a=0;a<i;a++)if(r[a]!==n[a]){o=a;break}for(var s=[],a=o;a<r.length;a++)s.push("..");return s=s.concat(n.slice(o)),s.join("/")}Ve.relative=Ih;function vu(t){var e=gu(t),r=t.substr(-1)==="/",n=pu(t.split("/").filter(function(i){return!!i}),!e).join("/");return!n&&!e&&(n="."),n&&r&&(n+="/"),(e?"/":"")+n}Ve.normalizePath=vu;function gu(t){return t.charAt(0)==="/"}Ve.isAbsolute=gu;function Ch(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return vu(t.join("/"))}Ve.join=Ch;function Rh(t){var e=hu(t),r=e[0],n=e[1];return!r&&!n?".":(n&&(n=n.substr(0,n.length-1)),r+n)}Ve.dirname=Rh;function Ah(t,e){var r=hu(t)[2];return e&&r.substr(e.length*-1)===e&&(r=r.substr(0,r.length-e.length)),r}Ve.basename=Ah});var ji=b(Fi=>{Object.defineProperty(Fi,"__esModule",{value:!0});var Ph=vt(),qh=function(){function t(e){var r=this;this._state="PENDING",this._handlers=[],this._resolve=function(n){r._setResult("RESOLVED",n)},this._reject=function(n){r._setResult("REJECTED",n)},this._setResult=function(n,i){if(r._state==="PENDING"){if(Ph.isThenable(i)){i.then(r._resolve,r._reject);return}r._state=n,r._value=i,r._executeHandlers()}},this._attachHandler=function(n){r._handlers=r._handlers.concat(n),r._executeHandlers()},this._executeHandlers=function(){if(r._state!=="PENDING"){var n=r._handlers.slice();r._handlers=[],n.forEach(function(i){i.done||(r._state==="RESOLVED"&&i.onfulfilled&&i.onfulfilled(r._value),r._state==="REJECTED"&&i.onrejected&&i.onrejected(r._value),i.done=!0)})}};try{e(this._resolve,this._reject)}catch(n){this._reject(n)}}return t.resolve=function(e){return new t(function(r){r(e)})},t.reject=function(e){return new t(function(r,n){n(e)})},t.all=function(e){return new t(function(r,n){if(!Array.isArray(e)){n(new TypeError("Promise.all requires an array as input."));return}if(e.length===0){r([]);return}var i=e.length,o=[];e.forEach(function(a,s){t.resolve(a).then(function(u){o[s]=u,i-=1,i===0&&r(o)}).then(null,n)})})},t.prototype.then=function(e,r){var n=this;return new t(function(i,o){n._attachHandler({done:!1,onfulfilled:function(a){if(!e){i(a);return}try{i(e(a));return}catch(s){o(s);return}},onrejected:function(a){if(!r){o(a);return}try{i(r(a));return}catch(s){o(s);return}}})})},t.prototype.catch=function(e){return this.then(function(r){return r},e)},t.prototype.finally=function(e){var r=this;return new t(function(n,i){var o,a;return r.then(function(s){a=!1,o=s,e&&e()},function(s){a=!0,o=s,e&&e()}).then(function(){if(a){i(o);return}n(o)})})},t.prototype.toString=function(){return"[object SyncPromise]"},t}();Fi.SyncPromise=qh});var yu=b(Li=>{Object.defineProperty(Li,"__esModule",{value:!0});var Nh=Kr(),Hi=ji(),Mh=function(){function t(e){this._limit=e,this._buffer=[]}return t.prototype.isReady=function(){return this._limit===void 0||this.length()<this._limit},t.prototype.add=function(e){var r=this;if(!this.isReady())return Hi.SyncPromise.reject(new Nh.SentryError("Not adding Promise due to buffer limit reached."));var n=e();return this._buffer.indexOf(n)===-1&&this._buffer.push(n),n.then(function(){return r.remove(n)}).then(null,function(){return r.remove(n).then(null,function(){})}),n},t.prototype.remove=function(e){var r=this._buffer.splice(this._buffer.indexOf(e),1)[0];return r},t.prototype.length=function(){return this._buffer.length},t.prototype.drain=function(e){var r=this;return new Hi.SyncPromise(function(n){var i=setTimeout(function(){e&&e>0&&n(!1)},e);Hi.SyncPromise.all(r._buffer).then(function(){clearTimeout(i),n(!0)}).then(null,function(){n(!0)})})},t}();Li.PromiseBuffer=Mh});var Ou=b((xe,Tu)=>{Object.defineProperty(xe,"__esModule",{value:!0});var bu=nt(),Su=Wr(),Ui={nowSeconds:function(){return Date.now()/1e3}};function kh(){var t=bu.getGlobalObject().performance;if(!(!t||!t.now)){var e=Date.now()-t.now();return{now:function(){return t.now()},timeOrigin:e}}}function Dh(){try{var t=Su.dynamicRequire(Tu,"perf_hooks");return t.performance}catch{return}}var sn=Su.isNodeEnv()?Dh():kh(),Eu=sn===void 0?Ui:{nowSeconds:function(){return(sn.timeOrigin+sn.now())/1e3}};xe.dateTimestampInSeconds=Ui.nowSeconds.bind(Ui);xe.timestampInSeconds=Eu.nowSeconds.bind(Eu);xe.timestampWithMs=xe.timestampInSeconds;xe.usingPerformanceAPI=sn!==void 0;xe.browserPerformanceTimeOrigin=function(){var t=bu.getGlobalObject().performance;if(!t||!t.now){xe._browserPerformanceTimeOriginMode="none";return}var e=3600*1e3,r=t.now(),n=Date.now(),i=t.timeOrigin?Math.abs(t.timeOrigin+r-n):e,o=i<e,a=t.timing&&t.timing.navigationStart,s=typeof a=="number",u=s?Math.abs(a+r-n):e,c=u<e;return o||c?i<=u?(xe._browserPerformanceTimeOriginMode="timeOrigin",t.timeOrigin):(xe._browserPerformanceTimeOriginMode="navigationStart",a):(xe._browserPerformanceTimeOriginMode="dateNow",n)}()});var P=b(K=>{Object.defineProperty(K,"__esModule",{value:!0});var Q=N();Q.__exportStar($s(),K);Q.__exportStar(gi(),K);Q.__exportStar(Xs(),K);Q.__exportStar(Kr(),K);Q.__exportStar(nt(),K);Q.__exportStar(fu(),K);Q.__exportStar(vt(),K);Q.__exportStar(Qr(),K);Q.__exportStar(Ti(),K);Q.__exportStar(du(),K);Q.__exportStar(Wr(),K);Q.__exportStar(Ci(),K);Q.__exportStar(mu(),K);Q.__exportStar(yu(),K);Q.__exportStar(Zr(),K);Q.__exportStar(en(),K);Q.__exportStar(Pi(),K);Q.__exportStar(ji(),K);Q.__exportStar(Ou(),K)});var Bi=b(un=>{Object.defineProperty(un,"__esModule",{value:!0});var M=N(),lr=P(),wu=100,Fh=function(){function t(){this._notifyingListeners=!1,this._scopeListeners=[],this._eventProcessors=[],this._breadcrumbs=[],this._user={},this._tags={},this._extra={},this._contexts={}}return t.clone=function(e){var r=new t;return e&&(r._breadcrumbs=M.__spread(e._breadcrumbs),r._tags=M.__assign({},e._tags),r._extra=M.__assign({},e._extra),r._contexts=M.__assign({},e._contexts),r._user=e._user,r._level=e._level,r._span=e._span,r._session=e._session,r._transactionName=e._transactionName,r._fingerprint=e._fingerprint,r._eventProcessors=M.__spread(e._eventProcessors),r._requestSession=e._requestSession),r},t.prototype.addScopeListener=function(e){this._scopeListeners.push(e)},t.prototype.addEventProcessor=function(e){return this._eventProcessors.push(e),this},t.prototype.setUser=function(e){return this._user=e||{},this._session&&this._session.update({user:e}),this._notifyScopeListeners(),this},t.prototype.getUser=function(){return this._user},t.prototype.getRequestSession=function(){return this._requestSession},t.prototype.setRequestSession=function(e){return this._requestSession=e,this},t.prototype.setTags=function(e){return this._tags=M.__assign(M.__assign({},this._tags),e),this._notifyScopeListeners(),this},t.prototype.setTag=function(e,r){var n;return this._tags=M.__assign(M.__assign({},this._tags),(n={},n[e]=r,n)),this._notifyScopeListeners(),this},t.prototype.setExtras=function(e){return this._extra=M.__assign(M.__assign({},this._extra),e),this._notifyScopeListeners(),this},t.prototype.setExtra=function(e,r){var n;return this._extra=M.__assign(M.__assign({},this._extra),(n={},n[e]=r,n)),this._notifyScopeListeners(),this},t.prototype.setFingerprint=function(e){return this._fingerprint=e,this._notifyScopeListeners(),this},t.prototype.setLevel=function(e){return this._level=e,this._notifyScopeListeners(),this},t.prototype.setTransactionName=function(e){return this._transactionName=e,this._notifyScopeListeners(),this},t.prototype.setTransaction=function(e){return this.setTransactionName(e)},t.prototype.setContext=function(e,r){var n;return r===null?delete this._contexts[e]:this._contexts=M.__assign(M.__assign({},this._contexts),(n={},n[e]=r,n)),this._notifyScopeListeners(),this},t.prototype.setSpan=function(e){return this._span=e,this._notifyScopeListeners(),this},t.prototype.getSpan=function(){return this._span},t.prototype.getTransaction=function(){var e,r,n,i,o=this.getSpan();if((e=o)===null||e===void 0?void 0:e.transaction)return(r=o)===null||r===void 0?void 0:r.transaction;if((i=(n=o)===null||n===void 0?void 0:n.spanRecorder)===null||i===void 0?void 0:i.spans[0])return o.spanRecorder.spans[0]},t.prototype.setSession=function(e){return e?this._session=e:delete this._session,this._notifyScopeListeners(),this},t.prototype.getSession=function(){return this._session},t.prototype.update=function(e){if(!e)return this;if(typeof e=="function"){var r=e(this);return r instanceof t?r:this}return e instanceof t?(this._tags=M.__assign(M.__assign({},this._tags),e._tags),this._extra=M.__assign(M.__assign({},this._extra),e._extra),this._contexts=M.__assign(M.__assign({},this._contexts),e._contexts),e._user&&Object.keys(e._user).length&&(this._user=e._user),e._level&&(this._level=e._level),e._fingerprint&&(this._fingerprint=e._fingerprint),e._requestSession&&(this._requestSession=e._requestSession)):lr.isPlainObject(e)&&(e=e,this._tags=M.__assign(M.__assign({},this._tags),e.tags),this._extra=M.__assign(M.__assign({},this._extra),e.extra),this._contexts=M.__assign(M.__assign({},this._contexts),e.contexts),e.user&&(this._user=e.user),e.level&&(this._level=e.level),e.fingerprint&&(this._fingerprint=e.fingerprint),e.requestSession&&(this._requestSession=e.requestSession)),this},t.prototype.clear=function(){return this._breadcrumbs=[],this._tags={},this._extra={},this._user={},this._contexts={},this._level=void 0,this._transactionName=void 0,this._fingerprint=void 0,this._requestSession=void 0,this._span=void 0,this._session=void 0,this._notifyScopeListeners(),this},t.prototype.addBreadcrumb=function(e,r){var n=typeof r=="number"?Math.min(r,wu):wu;if(n<=0)return this;var i=M.__assign({timestamp:lr.dateTimestampInSeconds()},e);return this._breadcrumbs=M.__spread(this._breadcrumbs,[i]).slice(-n),this._notifyScopeListeners(),this},t.prototype.clearBreadcrumbs=function(){return this._breadcrumbs=[],this._notifyScopeListeners(),this},t.prototype.applyToEvent=function(e,r){var n;if(this._extra&&Object.keys(this._extra).length&&(e.extra=M.__assign(M.__assign({},this._extra),e.extra)),this._tags&&Object.keys(this._tags).length&&(e.tags=M.__assign(M.__assign({},this._tags),e.tags)),this._user&&Object.keys(this._user).length&&(e.user=M.__assign(M.__assign({},this._user),e.user)),this._contexts&&Object.keys(this._contexts).length&&(e.contexts=M.__assign(M.__assign({},this._contexts),e.contexts)),this._level&&(e.level=this._level),this._transactionName&&(e.transaction=this._transactionName),this._span){e.contexts=M.__assign({trace:this._span.getTraceContext()},e.contexts);var i=(n=this._span.transaction)===null||n===void 0?void 0:n.name;i&&(e.tags=M.__assign({transaction:i},e.tags))}return this._applyFingerprint(e),e.breadcrumbs=M.__spread(e.breadcrumbs||[],this._breadcrumbs),e.breadcrumbs=e.breadcrumbs.length>0?e.breadcrumbs:void 0,this._notifyEventProcessors(M.__spread(xu(),this._eventProcessors),e,r)},t.prototype._notifyEventProcessors=function(e,r,n,i){var o=this;return i===void 0&&(i=0),new lr.SyncPromise(function(a,s){var u=e[i];if(r===null||typeof u!="function")a(r);else{var c=u(M.__assign({},r),n);lr.isThenable(c)?c.then(function(l){return o._notifyEventProcessors(e,l,n,i+1).then(a)}).then(null,s):o._notifyEventProcessors(e,c,n,i+1).then(a).then(null,s)}})},t.prototype._notifyScopeListeners=function(){var e=this;this._notifyingListeners||(this._notifyingListeners=!0,this._scopeListeners.forEach(function(r){r(e)}),this._notifyingListeners=!1)},t.prototype._applyFingerprint=function(e){e.fingerprint=e.fingerprint?Array.isArray(e.fingerprint)?e.fingerprint:[e.fingerprint]:[],this._fingerprint&&(e.fingerprint=e.fingerprint.concat(this._fingerprint)),e.fingerprint&&!e.fingerprint.length&&delete e.fingerprint},t}();un.Scope=Fh;function xu(){var t=lr.getGlobalObject();return t.__SENTRY__=t.__SENTRY__||{},t.__SENTRY__.globalEventProcessors=t.__SENTRY__.globalEventProcessors||[],t.__SENTRY__.globalEventProcessors}function jh(t){xu().push(t)}un.addGlobalEventProcessor=jh});var Vi=b(zi=>{Object.defineProperty(zi,"__esModule",{value:!0});var Gi=ne(),Ht=P(),Hh=function(){function t(e){this.errors=0,this.sid=Ht.uuid4(),this.duration=0,this.status=Gi.SessionStatus.Ok,this.init=!0,this.ignoreDuration=!1;var r=Ht.timestampInSeconds();this.timestamp=r,this.started=r,e&&this.update(e)}return t.prototype.update=function(e){if(e===void 0&&(e={}),e.user&&(!this.ipAddress&&e.user.ip_address&&(this.ipAddress=e.user.ip_address),!this.did&&!e.did&&(this.did=e.user.id||e.user.email||e.user.username)),this.timestamp=e.timestamp||Ht.timestampInSeconds(),e.ignoreDuration&&(this.ignoreDuration=e.ignoreDuration),e.sid&&(this.sid=e.sid.length===32?e.sid:Ht.uuid4()),e.init!==void 0&&(this.init=e.init),!this.did&&e.did&&(this.did=""+e.did),typeof e.started=="number"&&(this.started=e.started),this.ignoreDuration)this.duration=void 0;else if(typeof e.duration=="number")this.duration=e.duration;else{var r=this.timestamp-this.started;this.duration=r>=0?r:0}e.release&&(this.release=e.release),e.environment&&(this.environment=e.environment),!this.ipAddress&&e.ipAddress&&(this.ipAddress=e.ipAddress),!this.userAgent&&e.userAgent&&(this.userAgent=e.userAgent),typeof e.errors=="number"&&(this.errors=e.errors),e.status&&(this.status=e.status)},t.prototype.close=function(e){e?this.update({status:e}):this.status===Gi.SessionStatus.Ok?this.update({status:Gi.SessionStatus.Exited}):this.update()},t.prototype.toJSON=function(){return Ht.dropUndefinedKeys({sid:""+this.sid,init:this.init,started:new Date(this.started*1e3).toISOString(),timestamp:new Date(this.timestamp*1e3).toISOString(),status:this.status,errors:this.errors,did:typeof this.did=="number"||typeof this.did=="string"?""+this.did:void 0,duration:this.duration,attrs:Ht.dropUndefinedKeys({release:this.release,environment:this.environment,ip_address:this.ipAddress,user_agent:this.userAgent})})},t}();zi.Session=Hh});var $i=b(_e=>{Object.defineProperty(_e,"__esModule",{value:!0});var Pe=N(),Iu=ne(),qe=P(),Wi=Bi(),Lh=Vi();_e.API_VERSION=4;var Uh=100,cn=function(){function t(e,r,n){r===void 0&&(r=new Wi.Scope),n===void 0&&(n=_e.API_VERSION),this._version=n,this._stack=[{}],this.getStackTop().scope=r,e&&this.bindClient(e)}return t.prototype.isOlderThan=function(e){return this._version<e},t.prototype.bindClient=function(e){var r=this.getStackTop();r.client=e,e&&e.setupIntegrations&&e.setupIntegrations()},t.prototype.pushScope=function(){var e=Wi.Scope.clone(this.getScope());return this.getStack().push({client:this.getClient(),scope:e}),e},t.prototype.popScope=function(){return this.getStack().length<=1?!1:!!this.getStack().pop()},t.prototype.withScope=function(e){var r=this.pushScope();try{e(r)}finally{this.popScope()}},t.prototype.getClient=function(){return this.getStackTop().client},t.prototype.getScope=function(){return this.getStackTop().scope},t.prototype.getStack=function(){return this._stack},t.prototype.getStackTop=function(){return this._stack[this._stack.length-1]},t.prototype.captureException=function(e,r){var n=this._lastEventId=qe.uuid4(),i=r;if(!r){var o=void 0;try{throw new Error("Sentry syntheticException")}catch(a){o=a}i={originalException:e,syntheticException:o}}return this._invokeClient("captureException",e,Pe.__assign(Pe.__assign({},i),{event_id:n})),n},t.prototype.captureMessage=function(e,r,n){var i=this._lastEventId=qe.uuid4(),o=n;if(!n){var a=void 0;try{throw new Error(e)}catch(s){a=s}o={originalException:e,syntheticException:a}}return this._invokeClient("captureMessage",e,r,Pe.__assign(Pe.__assign({},o),{event_id:i})),i},t.prototype.captureEvent=function(e,r){var n=qe.uuid4();return e.type!=="transaction"&&(this._lastEventId=n),this._invokeClient("captureEvent",e,Pe.__assign(Pe.__assign({},r),{event_id:n})),n},t.prototype.lastEventId=function(){return this._lastEventId},t.prototype.addBreadcrumb=function(e,r){var n=this.getStackTop(),i=n.scope,o=n.client;if(!(!i||!o)){var a=o.getOptions&&o.getOptions()||{},s=a.beforeBreadcrumb,u=s===void 0?null:s,c=a.maxBreadcrumbs,l=c===void 0?Uh:c;if(!(l<=0)){var d=qe.dateTimestampInSeconds(),h=Pe.__assign({timestamp:d},e),y=u?qe.consoleSandbox(function(){return u(h,r)}):h;y!==null&&i.addBreadcrumb(y,l)}}},t.prototype.setUser=function(e){var r=this.getScope();r&&r.setUser(e)},t.prototype.setTags=function(e){var r=this.getScope();r&&r.setTags(e)},t.prototype.setExtras=function(e){var r=this.getScope();r&&r.setExtras(e)},t.prototype.setTag=function(e,r){var n=this.getScope();n&&n.setTag(e,r)},t.prototype.setExtra=function(e,r){var n=this.getScope();n&&n.setExtra(e,r)},t.prototype.setContext=function(e,r){var n=this.getScope();n&&n.setContext(e,r)},t.prototype.configureScope=function(e){var r=this.getStackTop(),n=r.scope,i=r.client;n&&i&&e(n)},t.prototype.run=function(e){var r=Yi(this);try{e(this)}finally{Yi(r)}},t.prototype.getIntegration=function(e){var r=this.getClient();if(!r)return null;try{return r.getIntegration(e)}catch{return qe.logger.warn("Cannot retrieve integration "+e.id+" from the current Hub"),null}},t.prototype.startSpan=function(e){return this._callExtensionMethod("startSpan",e)},t.prototype.startTransaction=function(e,r){return this._callExtensionMethod("startTransaction",e,r)},t.prototype.traceHeaders=function(){return this._callExtensionMethod("traceHeaders")},t.prototype.captureSession=function(e){if(e===void 0&&(e=!1),e)return this.endSession();this._sendSessionUpdate()},t.prototype.endSession=function(){var e,r,n,i,o;(n=(r=(e=this.getStackTop())===null||e===void 0?void 0:e.scope)===null||r===void 0?void 0:r.getSession())===null||n===void 0||n.close(),this._sendSessionUpdate(),(o=(i=this.getStackTop())===null||i===void 0?void 0:i.scope)===null||o===void 0||o.setSession()},t.prototype.startSession=function(e){var r=this.getStackTop(),n=r.scope,i=r.client,o=i&&i.getOptions()||{},a=o.release,s=o.environment,u=qe.getGlobalObject(),c=(u.navigator||{}).userAgent,l=new Lh.Session(Pe.__assign(Pe.__assign(Pe.__assign({release:a,environment:s},n&&{user:n.getUser()}),c&&{userAgent:c}),e));if(n){var d=n.getSession&&n.getSession();d&&d.status===Iu.SessionStatus.Ok&&d.update({status:Iu.SessionStatus.Exited}),this.endSession(),n.setSession(l)}return l},t.prototype._sendSessionUpdate=function(){var e=this.getStackTop(),r=e.scope,n=e.client;if(!!r){var i=r.getSession&&r.getSession();i&&n&&n.captureSession&&n.captureSession(i)}},t.prototype._invokeClient=function(e){for(var r,n=[],i=1;i<arguments.length;i++)n[i-1]=arguments[i];var o=this.getStackTop(),a=o.scope,s=o.client;s&&s[e]&&(r=s)[e].apply(r,Pe.__spread(n,[a]))},t.prototype._callExtensionMethod=function(e){for(var r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];var i=Lt(),o=i.__SENTRY__;if(o&&o.extensions&&typeof o.extensions[e]=="function")return o.extensions[e].apply(this,r);qe.logger.warn("Extension method "+e+" couldn't be found, doing nothing.")},t}();_e.Hub=cn;function Lt(){var t=qe.getGlobalObject();return t.__SENTRY__=t.__SENTRY__||{extensions:{},hub:void 0},t}_e.getMainCarrier=Lt;function Yi(t){var e=Lt(),r=We(e);return fn(e,t),r}_e.makeMain=Yi;function Bh(){var t=Lt();return(!Cu(t)||We(t).isOlderThan(_e.API_VERSION))&&fn(t,new cn),qe.isNodeEnv()?zh(t):We(t)}_e.getCurrentHub=Bh;function Gh(){qe.logger.warn("Function `getActiveDomain` is deprecated and will be removed in a future version.");var t=Lt().__SENTRY__;return t&&t.extensions&&t.extensions.domain&&t.extensions.domain.active}_e.getActiveDomain=Gh;function zh(t){var e,r,n;try{var i=(n=(r=(e=Lt().__SENTRY__)===null||e===void 0?void 0:e.extensions)===null||r===void 0?void 0:r.domain)===null||n===void 0?void 0:n.active;if(!i)return We(t);if(!Cu(i)||We(i).isOlderThan(_e.API_VERSION)){var o=We(t).getStackTop();fn(i,new cn(o.client,Wi.Scope.clone(o.scope)))}return We(i)}catch{return We(t)}}function Cu(t){return!!(t&&t.__SENTRY__&&t.__SENTRY__.hub)}function We(t){return t&&t.__SENTRY__&&t.__SENTRY__.hub||(t.__SENTRY__=t.__SENTRY__||{},t.__SENTRY__.hub=new cn),t.__SENTRY__.hub}_e.getHubFromCarrier=We;function fn(t,e){return t?(t.__SENTRY__=t.__SENTRY__||{},t.__SENTRY__.hub=e,!0):!1}_e.setHubOnCarrier=fn});var Ru=b(Xi=>{Object.defineProperty(Xi,"__esModule",{value:!0});var Ki=ne(),Ji=P(),Vh=$i(),Wh=function(){function t(e,r){var n=this;this.flushTimeout=60,this._pendingAggregates={},this._isEnabled=!0,this._transport=e,this._intervalId=setInterval(function(){return n.flush()},this.flushTimeout*1e3),this._sessionAttrs=r}return t.prototype.sendSessionAggregates=function(e){if(!this._transport.sendSession){Ji.logger.warn("Dropping session because custom transport doesn't implement sendSession");return}this._transport.sendSession(e).then(null,function(r){Ji.logger.error("Error while sending session: "+r)})},t.prototype.flush=function(){var e=this.getSessionAggregates();e.aggregates.length!==0&&(this._pendingAggregates={},this.sendSessionAggregates(e))},t.prototype.getSessionAggregates=function(){var e=this,r=Object.keys(this._pendingAggregates).map(function(i){return e._pendingAggregates[parseInt(i)]}),n={attrs:this._sessionAttrs,aggregates:r};return Ji.dropUndefinedKeys(n)},t.prototype.close=function(){clearInterval(this._intervalId),this._isEnabled=!1,this.flush()},t.prototype.incrementSessionStatusCount=function(){var e,r;if(!!this._isEnabled){var n=Vh.getCurrentHub().getScope(),i=(e=n)===null||e===void 0?void 0:e.getRequestSession();i&&i.status&&(this._incrementSessionStatusCount(i.status,new Date),(r=n)===null||r===void 0||r.setRequestSession(void 0))}},t.prototype._incrementSessionStatusCount=function(e,r){var n=new Date(r).setSeconds(0,0);this._pendingAggregates[n]=this._pendingAggregates[n]||{};var i=this._pendingAggregates[n];switch(i.started||(i.started=new Date(n).toISOString()),e){case Ki.RequestSessionStatus.Errored:return i.errored=(i.errored||0)+1,i.errored;case Ki.RequestSessionStatus.Ok:return i.exited=(i.exited||0)+1,i.exited;case Ki.RequestSessionStatus.Crashed:return i.crashed=(i.crashed||0)+1,i.crashed}},t}();Xi.SessionFlusher=Wh});var ge=b(ve=>{Object.defineProperty(ve,"__esModule",{value:!0});var Au=Bi();ve.addGlobalEventProcessor=Au.addGlobalEventProcessor;ve.Scope=Au.Scope;var Yh=Vi();ve.Session=Yh.Session;var $h=Ru();ve.SessionFlusher=$h.SessionFlusher;var yt=$i();ve.getActiveDomain=yt.getActiveDomain;ve.getCurrentHub=yt.getCurrentHub;ve.getHubFromCarrier=yt.getHubFromCarrier;ve.getMainCarrier=yt.getMainCarrier;ve.Hub=yt.Hub;ve.makeMain=yt.makeMain;ve.setHubOnCarrier=yt.setHubOnCarrier});var Pu=b(se=>{Object.defineProperty(se,"__esModule",{value:!0});var ln=N(),Kh=ge();function de(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=Kh.getCurrentHub();if(n&&n[t])return n[t].apply(n,ln.__spread(e));throw new Error("No hub defined or "+t+" was not found on the hub, please open a bug report.")}function Jh(t,e){var r;try{throw new Error("Sentry syntheticException")}catch(n){r=n}return de("captureException",t,{captureContext:e,originalException:t,syntheticException:r})}se.captureException=Jh;function Xh(t,e){var r;try{throw new Error(t)}catch(o){r=o}var n=typeof e=="string"?e:void 0,i=typeof e!="string"?{captureContext:e}:void 0;return de("captureMessage",t,n,ln.__assign({originalException:t,syntheticException:r},i))}se.captureMessage=Xh;function Qh(t){return de("captureEvent",t)}se.captureEvent=Qh;function Zh(t){de("configureScope",t)}se.configureScope=Zh;function e_(t){de("addBreadcrumb",t)}se.addBreadcrumb=e_;function t_(t,e){de("setContext",t,e)}se.setContext=t_;function r_(t){de("setExtras",t)}se.setExtras=r_;function n_(t){de("setTags",t)}se.setTags=n_;function i_(t,e){de("setExtra",t,e)}se.setExtra=i_;function o_(t,e){de("setTag",t,e)}se.setTag=o_;function a_(t){de("setUser",t)}se.setUser=a_;function s_(t){de("withScope",t)}se.withScope=s_;function u_(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];de.apply(void 0,ln.__spread(["_invokeClient",t],e))}se._callOnClient=u_;function c_(t,e){return de("startTransaction",ln.__assign({},t),e)}se.startTransaction=c_});var Mu=b(Qi=>{Object.defineProperty(Qi,"__esModule",{value:!0});var qu=P(),Nu="7",f_=function(){function t(e,r,n){r===void 0&&(r={}),this.dsn=e,this._dsnObject=new qu.Dsn(e),this.metadata=r,this._tunnel=n}return t.prototype.getDsn=function(){return this._dsnObject},t.prototype.forceEnvelope=function(){return!!this._tunnel},t.prototype.getBaseApiEndpoint=function(){var e=this.getDsn(),r=e.protocol?e.protocol+":":"",n=e.port?":"+e.port:"";return r+"//"+e.host+n+(e.path?"/"+e.path:"")+"/api/"},t.prototype.getStoreEndpoint=function(){return this._getIngestEndpoint("store")},t.prototype.getStoreEndpointWithUrlEncodedAuth=function(){return this.getStoreEndpoint()+"?"+this._encodedAuth()},t.prototype.getEnvelopeEndpointWithUrlEncodedAuth=function(){return this.forceEnvelope()?this._tunnel:this._getEnvelopeEndpoint()+"?"+this._encodedAuth()},t.prototype.getStoreEndpointPath=function(){var e=this.getDsn();return(e.path?"/"+e.path:"")+"/api/"+e.projectId+"/store/"},t.prototype.getRequestHeaders=function(e,r){var n=this.getDsn(),i=["Sentry sentry_version="+Nu];return i.push("sentry_client="+e+"/"+r),i.push("sentry_key="+n.publicKey),n.pass&&i.push("sentry_secret="+n.pass),{"Content-Type":"application/json","X-Sentry-Auth":i.join(", ")}},t.prototype.getReportDialogEndpoint=function(e){e===void 0&&(e={});var r=this.getDsn(),n=this.getBaseApiEndpoint()+"embed/error-page/",i=[];i.push("dsn="+r.toString());for(var o in e)if(o!=="dsn")if(o==="user"){if(!e.user)continue;e.user.name&&i.push("name="+encodeURIComponent(e.user.name)),e.user.email&&i.push("email="+encodeURIComponent(e.user.email))}else i.push(encodeURIComponent(o)+"="+encodeURIComponent(e[o]));return i.length?n+"?"+i.join("&"):n},t.prototype._getEnvelopeEndpoint=function(){return this._getIngestEndpoint("envelope")},t.prototype._getIngestEndpoint=function(e){if(this._tunnel)return this._tunnel;var r=this.getBaseApiEndpoint(),n=this.getDsn();return""+r+n.projectId+"/"+e+"/"},t.prototype._encodedAuth=function(){var e=this.getDsn(),r={sentry_key:e.publicKey,sentry_version:Nu};return qu.urlEncode(r)},t}();Qi.API=f_});var Hu=b(it=>{Object.defineProperty(it,"__esModule",{value:!0});var dn=N(),ku=ge(),l_=P();it.installedIntegrations=[];function Du(t){return t.reduce(function(e,r){return e.every(function(n){return r.name!==n.name})&&e.push(r),e},[])}function Fu(t){var e=t.defaultIntegrations&&dn.__spread(t.defaultIntegrations)||[],r=t.integrations,n=dn.__spread(Du(e));Array.isArray(r)?n=dn.__spread(n.filter(function(a){return r.every(function(s){return s.name!==a.name})}),Du(r)):typeof r=="function"&&(n=r(n),n=Array.isArray(n)?n:[n]);var i=n.map(function(a){return a.name}),o="Debug";return i.indexOf(o)!==-1&&n.push.apply(n,dn.__spread(n.splice(i.indexOf(o),1))),n}it.getIntegrationsToSetup=Fu;function ju(t){it.installedIntegrations.indexOf(t.name)===-1&&(t.setupOnce(ku.addGlobalEventProcessor,ku.getCurrentHub),it.installedIntegrations.push(t.name),l_.logger.log("Integration installed: "+t.name))}it.setupIntegration=ju;function d_(t){var e={};return Fu(t).forEach(function(r){e[r.name]=r,ju(r)}),Object.defineProperty(e,"initialized",{value:!0}),e}it.setupIntegrations=d_});var Uu=b(Zi=>{Object.defineProperty(Zi,"__esModule",{value:!0});var me=N(),p_=ge(),dr=ne(),L=P(),h_=Hu(),Lu="Not capturing exception because it's already been captured.",__=function(){function t(e,r){this._integrations={},this._numProcessing=0,this._backend=new e(r),this._options=r,r.dsn&&(this._dsn=new L.Dsn(r.dsn))}return t.prototype.captureException=function(e,r,n){var i=this;if(L.checkOrSetAlreadyCaught(e)){L.logger.log(Lu);return}var o=r&&r.event_id;return this._process(this._getBackend().eventFromException(e,r).then(function(a){return i._captureEvent(a,r,n)}).then(function(a){o=a})),o},t.prototype.captureMessage=function(e,r,n,i){var o=this,a=n&&n.event_id,s=L.isPrimitive(e)?this._getBackend().eventFromMessage(String(e),r,n):this._getBackend().eventFromException(e,n);return this._process(s.then(function(u){return o._captureEvent(u,n,i)}).then(function(u){a=u})),a},t.prototype.captureEvent=function(e,r,n){var i;if(((i=r)===null||i===void 0?void 0:i.originalException)&&L.checkOrSetAlreadyCaught(r.originalException)){L.logger.log(Lu);return}var o=r&&r.event_id;return this._process(this._captureEvent(e,r,n).then(function(a){o=a})),o},t.prototype.captureSession=function(e){if(!this._isEnabled()){L.logger.warn("SDK not enabled, will not capture session.");return}typeof e.release!="string"?L.logger.warn("Discarded session because of missing or non-string release"):(this._sendSession(e),e.update({init:!1}))},t.prototype.getDsn=function(){return this._dsn},t.prototype.getOptions=function(){return this._options},t.prototype.getTransport=function(){return this._getBackend().getTransport()},t.prototype.flush=function(e){var r=this;return this._isClientDoneProcessing(e).then(function(n){return r.getTransport().close(e).then(function(i){return n&&i})})},t.prototype.close=function(e){var r=this;return this.flush(e).then(function(n){return r.getOptions().enabled=!1,n})},t.prototype.setupIntegrations=function(){this._isEnabled()&&!this._integrations.initialized&&(this._integrations=h_.setupIntegrations(this._options))},t.prototype.getIntegration=function(e){try{return this._integrations[e.id]||null}catch{return L.logger.warn("Cannot retrieve integration "+e.id+" from the current Client"),null}},t.prototype._updateSessionFromEvent=function(e,r){var n,i,o=!1,a=!1,s=r.exception&&r.exception.values;if(s){a=!0;try{for(var u=me.__values(s),c=u.next();!c.done;c=u.next()){var l=c.value,d=l.mechanism;if(d&&d.handled===!1){o=!0;break}}}catch(S){n={error:S}}finally{try{c&&!c.done&&(i=u.return)&&i.call(u)}finally{if(n)throw n.error}}}var h=e.status===dr.SessionStatus.Ok,y=h&&e.errors===0||h&&o;y&&(e.update(me.__assign(me.__assign({},o&&{status:dr.SessionStatus.Crashed}),{errors:e.errors||Number(a||o)})),this.captureSession(e))},t.prototype._sendSession=function(e){this._getBackend().sendSession(e)},t.prototype._isClientDoneProcessing=function(e){var r=this;return new L.SyncPromise(function(n){var i=0,o=1,a=setInterval(function(){r._numProcessing==0?(clearInterval(a),n(!0)):(i+=o,e&&i>=e&&(clearInterval(a),n(!1)))},o)})},t.prototype._getBackend=function(){return this._backend},t.prototype._isEnabled=function(){return this.getOptions().enabled!==!1&&this._dsn!==void 0},t.prototype._prepareEvent=function(e,r,n){var i=this,o=this.getOptions().normalizeDepth,a=o===void 0?3:o,s=me.__assign(me.__assign({},e),{event_id:e.event_id||(n&&n.event_id?n.event_id:L.uuid4()),timestamp:e.timestamp||L.dateTimestampInSeconds()});this._applyClientOptions(s),this._applyIntegrationsMetadata(s);var u=r;n&&n.captureContext&&(u=p_.Scope.clone(u).update(n.captureContext));var c=L.SyncPromise.resolve(s);return u&&(c=u.applyToEvent(s,n)),c.then(function(l){return typeof a=="number"&&a>0?i._normalizeEvent(l,a):l})},t.prototype._normalizeEvent=function(e,r){if(!e)return null;var n=me.__assign(me.__assign(me.__assign(me.__assign(me.__assign({},e),e.breadcrumbs&&{breadcrumbs:e.breadcrumbs.map(function(a){return me.__assign(me.__assign({},a),a.data&&{data:L.normalize(a.data,r)})})}),e.user&&{user:L.normalize(e.user,r)}),e.contexts&&{contexts:L.normalize(e.contexts,r)}),e.extra&&{extra:L.normalize(e.extra,r)});e.contexts&&e.contexts.trace&&(n.contexts.trace=e.contexts.trace);var i=this.getOptions()._experiments,o=i===void 0?{}:i;return o.ensureNoCircularStructures?L.normalize(n):n},t.prototype._applyClientOptions=function(e){var r=this.getOptions(),n=r.environment,i=r.release,o=r.dist,a=r.maxValueLength,s=a===void 0?250:a;"environment"in e||(e.environment="environment"in r?n:"production"),e.release===void 0&&i!==void 0&&(e.release=i),e.dist===void 0&&o!==void 0&&(e.dist=o),e.message&&(e.message=L.truncate(e.message,s));var u=e.exception&&e.exception.values&&e.exception.values[0];u&&u.value&&(u.value=L.truncate(u.value,s));var c=e.request;c&&c.url&&(c.url=L.truncate(c.url,s))},t.prototype._applyIntegrationsMetadata=function(e){var r=Object.keys(this._integrations);r.length>0&&(e.sdk=e.sdk||{},e.sdk.integrations=me.__spread(e.sdk.integrations||[],r))},t.prototype._sendEvent=function(e){this._getBackend().sendEvent(e)},t.prototype._captureEvent=function(e,r,n){return this._processEvent(e,r,n).then(function(i){return i.event_id},function(i){L.logger.error(i)})},t.prototype._processEvent=function(e,r,n){var i=this,o,a,s=this.getOptions(),u=s.beforeSend,c=s.sampleRate,l=this.getTransport();if(!this._isEnabled())return L.SyncPromise.reject(new L.SentryError("SDK not enabled, will not capture event."));var d=e.type==="transaction";return!d&&typeof c=="number"&&Math.random()>c?((a=(o=l).recordLostEvent)===null||a===void 0||a.call(o,dr.Outcome.SampleRate,"event"),L.SyncPromise.reject(new L.SentryError("Discarding event because it's not included in the random sample (sampling rate = "+c+")"))):this._prepareEvent(e,n,r).then(function(h){var y,S;if(h===null)throw(S=(y=l).recordLostEvent)===null||S===void 0||S.call(y,dr.Outcome.EventProcessor,e.type||"event"),new L.SentryError("An event processor returned null, will not send event.");var T=r&&r.data&&r.data.__sentry__===!0;if(T||d||!u)return h;var C=u(h,r);return i._ensureBeforeSendRv(C)}).then(function(h){var y,S;if(h===null)throw(S=(y=l).recordLostEvent)===null||S===void 0||S.call(y,dr.Outcome.BeforeSend,e.type||"event"),new L.SentryError("`beforeSend` returned `null`, will not send event.");var T=n&&n.getSession&&n.getSession();return!d&&T&&i._updateSessionFromEvent(T,h),i._sendEvent(h),h}).then(null,function(h){throw h instanceof L.SentryError?h:(i.captureException(h,{data:{__sentry__:!0},originalException:h}),new L.SentryError(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.
11
+ Reason: `+h))})},t.prototype._process=function(e){var r=this;this._numProcessing+=1,e.then(function(n){return r._numProcessing-=1,n},function(n){return r._numProcessing-=1,n})},t.prototype._ensureBeforeSendRv=function(e){var r="`beforeSend` method has to return `null` or a valid event.";if(L.isThenable(e))return e.then(function(n){if(!(L.isPlainObject(n)||n===null))throw new L.SentryError(r);return n},function(n){throw new L.SentryError("beforeSend rejected with "+n)});if(!(L.isPlainObject(e)||e===null))throw new L.SentryError(r);return e},t}();Zi.BaseClient=__});var to=b(eo=>{Object.defineProperty(eo,"__esModule",{value:!0});var v_=ne(),Bu=P(),g_=function(){function t(){}return t.prototype.sendEvent=function(e){return Bu.SyncPromise.resolve({reason:"NoopTransport: Event has been skipped because no Dsn is configured.",status:v_.Status.Skipped})},t.prototype.close=function(e){return Bu.SyncPromise.resolve(!0)},t}();eo.NoopTransport=g_});var Gu=b(ro=>{Object.defineProperty(ro,"__esModule",{value:!0});var Ut=P(),m_=to(),y_=function(){function t(e){this._options=e,this._options.dsn||Ut.logger.warn("No DSN provided, backend will not do anything."),this._transport=this._setupTransport()}return t.prototype.eventFromException=function(e,r){throw new Ut.SentryError("Backend has to implement `eventFromException` method")},t.prototype.eventFromMessage=function(e,r,n){throw new Ut.SentryError("Backend has to implement `eventFromMessage` method")},t.prototype.sendEvent=function(e){this._transport.sendEvent(e).then(null,function(r){Ut.logger.error("Error while sending event: "+r)})},t.prototype.sendSession=function(e){if(!this._transport.sendSession){Ut.logger.warn("Dropping session because custom transport doesn't implement sendSession");return}this._transport.sendSession(e).then(null,function(r){Ut.logger.error("Error while sending session: "+r)})},t.prototype.getTransport=function(){return this._transport},t.prototype._setupTransport=function(){return new m_.NoopTransport},t}();ro.BaseBackend=y_});var Vu=b(pn=>{Object.defineProperty(pn,"__esModule",{value:!0});var bt=N();function zu(t){if(!(!t.metadata||!t.metadata.sdk)){var e=t.metadata.sdk,r=e.name,n=e.version;return{name:r,version:n}}}function b_(t,e){return e&&(t.sdk=t.sdk||{},t.sdk.name=t.sdk.name||e.name,t.sdk.version=t.sdk.version||e.version,t.sdk.integrations=bt.__spread(t.sdk.integrations||[],e.integrations||[]),t.sdk.packages=bt.__spread(t.sdk.packages||[],e.packages||[])),t}function S_(t,e){var r=zu(e),n=JSON.stringify(bt.__assign(bt.__assign({sent_at:new Date().toISOString()},r&&{sdk:r}),e.forceEnvelope()&&{dsn:e.getDsn().toString()})),i="aggregates"in t?"sessions":"session",o=JSON.stringify({type:i});return{body:n+`
12
12
  `+o+`
13
- `+JSON.stringify(t),type:i,url:e.getEnvelopeEndpointWithUrlEncodedAuth()}}jn.sessionToSentryRequest=tg;function rg(t,e){var r=zc(e),n=t.type||"event",i=n==="transaction"||e.forceEnvelope(),o=t.debug_meta||{},s=o.transactionSampling,a=Pt.__rest(o,["transactionSampling"]),u=s||{},c=u.method,l=u.rate;Object.keys(a).length===0?delete t.debug_meta:t.debug_meta=a;var d={body:JSON.stringify(r?eg(t,e.metadata.sdk):t),type:n,url:i?e.getEnvelopeEndpointWithUrlEncodedAuth():e.getStoreEndpointWithUrlEncodedAuth()};if(i){var h=JSON.stringify(Pt.__assign(Pt.__assign({event_id:t.event_id,sent_at:new Date().toISOString()},r&&{sdk:r}),e.forceEnvelope()&&{dsn:e.getDsn().toString()})),_=JSON.stringify({type:n,sample_rates:[{id:c,rate:l}]}),S=h+`
14
- `+_+`
15
- `+d.body;d.body=S}return d}jn.eventToSentryRequest=rg});var Wc=b(Do=>{Object.defineProperty(Do,"__esModule",{value:!0});var ng=Ee(),ig=N();function og(t,e){var r;e.debug===!0&&ig.logger.enable();var n=ng.getCurrentHub();(r=n.getScope())===null||r===void 0||r.update(e.initialScope);var i=new t(e);n.bindClient(i)}Do.initAndBind=og});var $c=b(Lo=>{Object.defineProperty(Lo,"__esModule",{value:!0});Lo.SDK_VERSION="6.16.1"});var Kc=b(Fo=>{Object.defineProperty(Fo,"__esModule",{value:!0});var Yc,sg=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(){Yc=Function.prototype.toString,Function.prototype.toString=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var n=this.__sentry_original__||this;return Yc.apply(n,e)}},t.id="FunctionToString",t}();Fo.FunctionToString=sg});var Xc=b(Uo=>{Object.defineProperty(Uo,"__esModule",{value:!0});var jo=q(),Jc=Ee(),ve=N(),ag=[/^Script error\.?$/,/^Javascript error: Script error\.? on line 0$/],ug=function(){function t(e){e===void 0&&(e={}),this._options=e,this.name=t.id}return t.prototype.setupOnce=function(){Jc.addGlobalEventProcessor(function(e){var r=Jc.getCurrentHub();if(!r)return e;var n=r.getIntegration(t);if(n){var i=r.getClient(),o=i?i.getOptions():{},s=typeof n._mergeOptions=="function"?n._mergeOptions(o):{};return typeof n._shouldDropEvent!="function"?e:n._shouldDropEvent(e,s)?null:e}return e})},t.prototype._shouldDropEvent=function(e,r){return this._isSentryError(e,r)?(ve.logger.warn(`Event dropped due to being internal Sentry Error.
16
- Event: `+ve.getEventDescription(e)),!0):this._isIgnoredError(e,r)?(ve.logger.warn("Event dropped due to being matched by `ignoreErrors` option.\nEvent: "+ve.getEventDescription(e)),!0):this._isDeniedUrl(e,r)?(ve.logger.warn("Event dropped due to being matched by `denyUrls` option.\nEvent: "+ve.getEventDescription(e)+`.
17
- Url: `+this._getEventFilterUrl(e)),!0):this._isAllowedUrl(e,r)?!1:(ve.logger.warn("Event dropped due to not being matched by `allowUrls` option.\nEvent: "+ve.getEventDescription(e)+`.
18
- Url: `+this._getEventFilterUrl(e)),!0)},t.prototype._isSentryError=function(e,r){if(!r.ignoreInternal)return!1;try{return e&&e.exception&&e.exception.values&&e.exception.values[0]&&e.exception.values[0].type==="SentryError"||!1}catch{return!1}},t.prototype._isIgnoredError=function(e,r){return!r.ignoreErrors||!r.ignoreErrors.length?!1:this._getPossibleEventMessages(e).some(function(n){return r.ignoreErrors.some(function(i){return ve.isMatchingPattern(n,i)})})},t.prototype._isDeniedUrl=function(e,r){if(!r.denyUrls||!r.denyUrls.length)return!1;var n=this._getEventFilterUrl(e);return n?r.denyUrls.some(function(i){return ve.isMatchingPattern(n,i)}):!1},t.prototype._isAllowedUrl=function(e,r){if(!r.allowUrls||!r.allowUrls.length)return!0;var n=this._getEventFilterUrl(e);return n?r.allowUrls.some(function(i){return ve.isMatchingPattern(n,i)}):!0},t.prototype._mergeOptions=function(e){return e===void 0&&(e={}),{allowUrls:jo.__spread(this._options.whitelistUrls||[],this._options.allowUrls||[],e.whitelistUrls||[],e.allowUrls||[]),denyUrls:jo.__spread(this._options.blacklistUrls||[],this._options.denyUrls||[],e.blacklistUrls||[],e.denyUrls||[]),ignoreErrors:jo.__spread(this._options.ignoreErrors||[],e.ignoreErrors||[],ag),ignoreInternal:typeof this._options.ignoreInternal!="undefined"?this._options.ignoreInternal:!0}},t.prototype._getPossibleEventMessages=function(e){if(e.message)return[e.message];if(e.exception)try{var r=e.exception.values&&e.exception.values[0]||{},n=r.type,i=n===void 0?"":n,o=r.value,s=o===void 0?"":o;return[""+s,i+": "+s]}catch{return ve.logger.error("Cannot extract message for event "+ve.getEventDescription(e)),[]}return[]},t.prototype._getLastValidUrl=function(e){e===void 0&&(e=[]);for(var r,n,i=e.length-1;i>=0;i--){var o=e[i];if(((r=o)===null||r===void 0?void 0:r.filename)!=="<anonymous>"&&((n=o)===null||n===void 0?void 0:n.filename)!=="[native code]")return o.filename||null}return null},t.prototype._getEventFilterUrl=function(e){try{if(e.stacktrace){var r=e.stacktrace.frames;return this._getLastValidUrl(r)}if(e.exception){var n=e.exception.values&&e.exception.values[0].stacktrace&&e.exception.values[0].stacktrace.frames;return this._getLastValidUrl(n)}return null}catch{return ve.logger.error("Cannot extract url for event "+ve.getEventDescription(e)),null}},t.id="InboundFilters",t}();Uo.InboundFilters=ug});var Qc=b(Un=>{Object.defineProperty(Un,"__esModule",{value:!0});var cg=Kc();Un.FunctionToString=cg.FunctionToString;var lg=Xc();Un.InboundFilters=lg.InboundFilters});var ae=b(V=>{Object.defineProperty(V,"__esModule",{value:!0});var we=Mc();V.addBreadcrumb=we.addBreadcrumb;V.captureException=we.captureException;V.captureEvent=we.captureEvent;V.captureMessage=we.captureMessage;V.configureScope=we.configureScope;V.startTransaction=we.startTransaction;V.setContext=we.setContext;V.setExtra=we.setExtra;V.setExtras=we.setExtras;V.setTag=we.setTag;V.setTags=we.setTags;V.setUser=we.setUser;V.withScope=we.withScope;var ir=Ee();V.addGlobalEventProcessor=ir.addGlobalEventProcessor;V.getCurrentHub=ir.getCurrentHub;V.getHubFromCarrier=ir.getHubFromCarrier;V.Hub=ir.Hub;V.makeMain=ir.makeMain;V.Scope=ir.Scope;var fg=qc();V.API=fg.API;var dg=Hc();V.BaseClient=dg.BaseClient;var pg=Gc();V.BaseBackend=pg.BaseBackend;var Zc=Vc();V.eventToSentryRequest=Zc.eventToSentryRequest;V.sessionToSentryRequest=Zc.sessionToSentryRequest;var hg=Wc();V.initAndBind=hg.initAndBind;var vg=qo();V.NoopTransport=vg.NoopTransport;var _g=$c();V.SDK_VERSION=_g.SDK_VERSION;var gg=Qc();V.Integrations=gg});var el=b(Hn=>{(function(t,e){let r=typeof Hn=="object"?Hn:typeof t=="object"?t:{};e(r),typeof define=="function"&&define.amd&&define("lru",r)})(Hn,function(t){let e=Symbol("newer"),r=Symbol("older");function n(u,c){typeof u!="number"&&(c=u,u=0),this.size=0,this.limit=u,this.oldest=this.newest=void 0,this._keymap=new Map,c&&(this.assign(c),u<1&&(this.limit=this.size))}t.LRUMap=n;function i(u,c){this.key=u,this.value=c,this[e]=void 0,this[r]=void 0}n.prototype._markEntryAsUsed=function(u){u!==this.newest&&(u[e]&&(u===this.oldest&&(this.oldest=u[e]),u[e][r]=u[r]),u[r]&&(u[r][e]=u[e]),u[e]=void 0,u[r]=this.newest,this.newest&&(this.newest[e]=u),this.newest=u)},n.prototype.assign=function(u){let c,l=this.limit||Number.MAX_VALUE;this._keymap.clear();let d=u[Symbol.iterator]();for(let h=d.next();!h.done;h=d.next()){let _=new i(h.value[0],h.value[1]);if(this._keymap.set(_.key,_),c?(c[e]=_,_[r]=c):this.oldest=_,c=_,l--==0)throw new Error("overflow")}this.newest=c,this.size=this._keymap.size},n.prototype.get=function(u){var c=this._keymap.get(u);if(!!c)return this._markEntryAsUsed(c),c.value},n.prototype.set=function(u,c){var l=this._keymap.get(u);return l?(l.value=c,this._markEntryAsUsed(l),this):(this._keymap.set(u,l=new i(u,c)),this.newest?(this.newest[e]=l,l[r]=this.newest):this.oldest=l,this.newest=l,++this.size,this.size>this.limit&&this.shift(),this)},n.prototype.shift=function(){var u=this.oldest;if(u)return this.oldest[e]?(this.oldest=this.oldest[e],this.oldest[r]=void 0):(this.oldest=void 0,this.newest=void 0),u[e]=u[r]=void 0,this._keymap.delete(u.key),--this.size,[u.key,u.value]},n.prototype.find=function(u){let c=this._keymap.get(u);return c?c.value:void 0},n.prototype.has=function(u){return this._keymap.has(u)},n.prototype.delete=function(u){var c=this._keymap.get(u);if(!!c)return this._keymap.delete(c.key),c[e]&&c[r]?(c[r][e]=c[e],c[e][r]=c[r]):c[e]?(c[e][r]=void 0,this.oldest=c[e]):c[r]?(c[r][e]=void 0,this.newest=c[r]):this.oldest=this.newest=void 0,this.size--,c.value},n.prototype.clear=function(){this.oldest=this.newest=void 0,this.size=0,this._keymap.clear()};function o(u){this.entry=u}o.prototype[Symbol.iterator]=function(){return this},o.prototype.next=function(){let u=this.entry;return u?(this.entry=u[e],{done:!1,value:[u.key,u.value]}):{done:!0,value:void 0}};function s(u){this.entry=u}s.prototype[Symbol.iterator]=function(){return this},s.prototype.next=function(){let u=this.entry;return u?(this.entry=u[e],{done:!1,value:u.key}):{done:!0,value:void 0}};function a(u){this.entry=u}a.prototype[Symbol.iterator]=function(){return this},a.prototype.next=function(){let u=this.entry;return u?(this.entry=u[e],{done:!1,value:u.value}):{done:!0,value:void 0}},n.prototype.keys=function(){return new s(this.oldest)},n.prototype.values=function(){return new a(this.oldest)},n.prototype.entries=function(){return this},n.prototype[Symbol.iterator]=function(){return new o(this.oldest)},n.prototype.forEach=function(u,c){typeof c!="object"&&(c=this);let l=this.oldest;for(;l;)u.call(c,l.value,l.key,this),l=l[e]},n.prototype.toJSON=function(){for(var u=new Array(this.size),c=0,l=this.oldest;l;)u[c++]={key:l.key,value:l.value},l=l[e];return u},n.prototype.toString=function(){for(var u="",c=this.oldest;c;)u+=String(c.key)+":"+c.value,c=c[e],c&&(u+=" < ");return u}})});var tl=b(Ho=>{Object.defineProperty(Ho,"__esModule",{value:!0});function mg(t){if(!t.stack)return[];var e=t.stack.split(`
19
- `).slice(1);return e.map(function(r){if(r.match(/^\s*[-]{4,}$/))return{columnNumber:null,fileName:r,functionName:null,lineNumber:null,methodName:null,native:null,typeName:null};var n=r.match(/at (?:(.+?)\s+\()?(?:(.+?):(\d+)(?::(\d+))?|([^)]+))\)?/);if(!!n){var i=null,o=null,s=null,a=null,u=null,c=n[5]==="native";if(n[1]){s=n[1];var l=s.lastIndexOf(".");if(s[l-1]==="."&&l--,l>0){i=s.substr(0,l),o=s.substr(l+1);var d=i.indexOf(".Module");d>0&&(s=s.substr(d+1),i=i.substr(0,d))}a=null}o&&(a=i,u=o),o==="<anonymous>"&&(u=null,s=null);var h={columnNumber:parseInt(n[4],10)||null,fileName:n[2]||null,functionName:s,lineNumber:parseInt(n[3],10)||null,methodName:u,native:c,typeName:a};return h}}).filter(function(r){return!!r})}Ho.parse=mg});var Go=b(vt=>{Object.defineProperty(vt,"__esModule",{value:!0});var Ue=N(),yg=require("fs"),bg=el(),Sg=tl(),Eg=7,Bo=new bg.LRUMap(100);function Tg(){Bo.clear()}vt.resetFileContentCache=Tg;function wg(t){try{return t.functionName||t.typeName+"."+(t.methodName||"<anonymous>")}catch{return"<anonymous>"}}var Og=(require.main&&require.main.filename&&Ue.dirname(require.main.filename)||global.process.cwd())+"/";function Cg(t,e){e||(e=Og);var r=Ue.basename(t,".js");t=Ue.dirname(t);var n=t.lastIndexOf("/node_modules/");if(n>-1)return t.substr(n+14).replace(/\//g,".")+":"+r;if(n=(t+"/").lastIndexOf(e,0),n===0){var i=t.substr(e.length).replace(/\//g,".");return i&&(i+=":"),i+=r,i}return r}function xg(t){return t.length===0?Ue.SyncPromise.resolve({}):new Ue.SyncPromise(function(e){for(var r={},n=0,i=function(s){var a=t[s],u=Bo.get(a);if(u!==void 0)return u!==null&&(r[a]=u),n++,n===t.length&&e(r),"continue";yg.readFile(a,function(c,l){var d=c?null:l.toString();r[a]=d,Bo.set(a,d),n++,n===t.length&&e(r)})},o=0;o<t.length;o++)i(o)})}function rl(t){var e=Sg.parse(t);return e||[]}vt.extractStackFromError=rl;function nl(t,e){var r=[],n=e&&e.frameContextLines!==void 0?e.frameContextLines:Eg,i=t.map(function(o){var s,a={colno:o.columnNumber,filename:((s=o.fileName)===null||s===void 0?void 0:s.startsWith("file://"))?o.fileName.substr(7):o.fileName||"",function:wg(o),lineno:o.lineNumber},u=o.native||a.filename&&!a.filename.startsWith("/")&&!a.filename.startsWith(".")&&a.filename.indexOf(":\\")!==1;return a.in_app=!u&&a.filename!==void 0&&a.filename.indexOf("node_modules/")===-1,a.filename&&(a.module=Cg(a.filename),!u&&n>0&&r.indexOf(a.filename)===-1&&r.push(a.filename)),a});if(n<=0)return Ue.SyncPromise.resolve(i);try{return Rg(r,i,n)}catch{return Ue.SyncPromise.resolve(i)}}vt.parseStack=nl;function Rg(t,e,r){return new Ue.SyncPromise(function(n){return xg(t).then(function(i){var o=e.map(function(s){if(s.filename&&i[s.filename])try{var a=i[s.filename].split(`
20
- `);Ue.addContextToFrame(a,s,r)}catch{}return s});n(o)})})}function il(t,e){var r=t.name||t.constructor.name,n=rl(t);return new Ue.SyncPromise(function(i){return nl(n,e).then(function(o){var s={stacktrace:{frames:ol(o)},type:r,value:t.message};i(s)})})}vt.getExceptionFromError=il;function Ig(t,e){return new Ue.SyncPromise(function(r){return il(t,e).then(function(n){r({exception:{values:[n]}})})})}vt.parseError=Ig;function ol(t){if(!t||!t.length)return[];var e=t,r=e[0].function||"";return(r.indexOf("captureMessage")!==-1||r.indexOf("captureException")!==-1)&&(e=e.slice(1)),e.reverse()}vt.prepareFramesForEvent=ol});var Vo=b(zo=>{Object.defineProperty(zo,"__esModule",{value:!0});zo.SDK_NAME="sentry.javascript.node"});var Bn=b($o=>{Object.defineProperty($o,"__esModule",{value:!0});var rt=q(),sl=ae(),al=se(),Nt=N(),Ag=require("fs"),Mg=require("url"),Pg=Vo(),Wo={event:"error",transaction:"transaction",session:"session",attachment:"attachment"},Ng=function(){function t(e){this.options=e,this._buffer=new Nt.PromiseBuffer(30),this._rateLimits={},this.urlParser=function(r){return new Mg.URL(r)},this._api=new sl.API(e.dsn,e._metadata,e.tunnel)}return t.prototype.sendEvent=function(e){throw new Nt.SentryError("Transport Class has to implement `sendEvent` method.")},t.prototype.close=function(e){return this._buffer.drain(e)},t.prototype._getProxy=function(e){var r,n,i=process.env,o=i.no_proxy,s=i.http_proxy,a=i.https_proxy,u=this.options,c=u.httpProxy,l=u.httpsProxy,d=e==="http"?c||s:l||c||a||s;if(!o)return d;var h=this._api.getDsn(),_=h.host,S=h.port;try{for(var T=rt.__values(o.split(",")),R=T.next();!R.done;R=T.next()){var A=R.value;if(_.endsWith(A)||(_+":"+S).endsWith(A))return}}catch(F){r={error:F}}finally{try{R&&!R.done&&(n=T.return)&&n.call(T)}finally{if(r)throw r.error}}return d},t.prototype._getRequestOptions=function(e){var r=rt.__assign(rt.__assign({},this._api.getRequestHeaders(Pg.SDK_NAME,sl.SDK_VERSION)),this.options.headers),n=e.hostname,i=e.pathname,o=e.port,s=e.protocol,a=""+i;return rt.__assign({agent:this.client,headers:r,hostname:n,method:"POST",path:a,port:o,protocol:s},this.options.caCerts&&{ca:Ag.readFileSync(this.options.caCerts)})},t.prototype._disabledUntil=function(e){var r=Wo[e];return this._rateLimits[r]||this._rateLimits.all},t.prototype._isRateLimited=function(e){return this._disabledUntil(e)>new Date(Date.now())},t.prototype._handleRateLimit=function(e){var r,n,i,o,s=Date.now(),a=e["x-sentry-rate-limits"],u=e["retry-after"];if(a){try{for(var c=rt.__values(a.trim().split(",")),l=c.next();!l.done;l=c.next()){var d=l.value,h=d.split(":",2),_=parseInt(h[0],10),S=(isNaN(_)?60:_)*1e3;try{for(var T=(i=void 0,rt.__values(h[1]&&h[1].split(";")||["all"])),R=T.next();!R.done;R=T.next()){var A=R.value,F=rt.__spread(Object.keys(Wo).map(function(k){return Wo[k]}),["all"]);F.includes(A)&&(this._rateLimits[A]=new Date(s+S))}}catch(k){i={error:k}}finally{try{R&&!R.done&&(o=T.return)&&o.call(T)}finally{if(i)throw i.error}}}}catch(k){r={error:k}}finally{try{l&&!l.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}return!0}else if(u)return this._rateLimits.all=new Date(s+Nt.parseRetryAfterHeader(s,u)),!0;return!1},t.prototype._send=function(e,r){return rt.__awaiter(this,void 0,void 0,function(){var n=this;return rt.__generator(this,function(i){if(!this.module)throw new Nt.SentryError("No module available");return r&&this._isRateLimited(e.type)?[2,Promise.reject({payload:r,type:e.type,reason:"Transport for "+e.type+" requests locked till "+this._disabledUntil(e.type)+" due to too many requests.",status:429})]:[2,this._buffer.add(function(){return new Promise(function(o,s){if(!n.module)throw new Nt.SentryError("No module available");var a=n._getRequestOptions(n.urlParser(e.url)),u=n.module.request(a,function(c){var l=c.statusCode||500,d=al.Status.fromHttpCode(l);c.setEncoding("utf8");var h=c.headers?c.headers["retry-after"]:"";h=Array.isArray(h)?h[0]:h;var _=c.headers?c.headers["x-sentry-rate-limits"]:"";_=Array.isArray(_)?_[0]:_;var S={"x-sentry-rate-limits":_,"retry-after":h},T=n._handleRateLimit(S);if(T&&Nt.logger.warn("Too many "+e.type+" requests, backing off until: "+n._disabledUntil(e.type)),d===al.Status.Success)o({status:d});else{var R="HTTP Error ("+l+")";c.headers&&c.headers["x-sentry-error"]&&(R+=": "+c.headers["x-sentry-error"]),s(new Nt.SentryError(R))}c.on("data",function(){}),c.on("end",function(){})});u.on("error",s),u.end(e.body)})})]})})},t}();$o.BaseTransport=Ng});var cl=b((Z0,ul)=>{var or=1e3,sr=or*60,ar=sr*60,qt=ar*24,qg=qt*7,kg=qt*365.25;ul.exports=function(t,e){e=e||{};var r=typeof t;if(r==="string"&&t.length>0)return Dg(t);if(r==="number"&&isFinite(t))return e.long?Fg(t):Lg(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function Dg(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(!!e){var r=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return r*kg;case"weeks":case"week":case"w":return r*qg;case"days":case"day":case"d":return r*qt;case"hours":case"hour":case"hrs":case"hr":case"h":return r*ar;case"minutes":case"minute":case"mins":case"min":case"m":return r*sr;case"seconds":case"second":case"secs":case"sec":case"s":return r*or;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function Lg(t){var e=Math.abs(t);return e>=qt?Math.round(t/qt)+"d":e>=ar?Math.round(t/ar)+"h":e>=sr?Math.round(t/sr)+"m":e>=or?Math.round(t/or)+"s":t+"ms"}function Fg(t){var e=Math.abs(t);return e>=qt?Gn(t,e,qt,"day"):e>=ar?Gn(t,e,ar,"hour"):e>=sr?Gn(t,e,sr,"minute"):e>=or?Gn(t,e,or,"second"):t+" ms"}function Gn(t,e,r,n){var i=e>=r*1.5;return Math.round(t/r)+" "+n+(i?"s":"")}});var Yo=b((eT,ll)=>{function jg(t){r.debug=r,r.default=r,r.coerce=u,r.disable=o,r.enable=i,r.enabled=s,r.humanize=cl(),r.destroy=c,Object.keys(t).forEach(l=>{r[l]=t[l]}),r.names=[],r.skips=[],r.formatters={};function e(l){let d=0;for(let h=0;h<l.length;h++)d=(d<<5)-d+l.charCodeAt(h),d|=0;return r.colors[Math.abs(d)%r.colors.length]}r.selectColor=e;function r(l){let d,h=null,_,S;function T(...R){if(!T.enabled)return;let A=T,F=Number(new Date),k=F-(d||F);A.diff=k,A.prev=d,A.curr=F,d=F,R[0]=r.coerce(R[0]),typeof R[0]!="string"&&R.unshift("%O");let xe=0;R[0]=R[0].replace(/%([a-zA-Z%])/g,(I,G)=>{if(I==="%%")return"%";xe++;let L=r.formatters[G];if(typeof L=="function"){let W=R[xe];I=L.call(A,W),R.splice(xe,1),xe--}return I}),r.formatArgs.call(A,R),(A.log||r.log).apply(A,R)}return T.namespace=l,T.useColors=r.useColors(),T.color=r.selectColor(l),T.extend=n,T.destroy=r.destroy,Object.defineProperty(T,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(_!==r.namespaces&&(_=r.namespaces,S=r.enabled(l)),S),set:R=>{h=R}}),typeof r.init=="function"&&r.init(T),T}function n(l,d){let h=r(this.namespace+(typeof d=="undefined"?":":d)+l);return h.log=this.log,h}function i(l){r.save(l),r.namespaces=l,r.names=[],r.skips=[];let d,h=(typeof l=="string"?l:"").split(/[\s,]+/),_=h.length;for(d=0;d<_;d++)!h[d]||(l=h[d].replace(/\*/g,".*?"),l[0]==="-"?r.skips.push(new RegExp("^"+l.substr(1)+"$")):r.names.push(new RegExp("^"+l+"$")))}function o(){let l=[...r.names.map(a),...r.skips.map(a).map(d=>"-"+d)].join(",");return r.enable(""),l}function s(l){if(l[l.length-1]==="*")return!0;let d,h;for(d=0,h=r.skips.length;d<h;d++)if(r.skips[d].test(l))return!1;for(d=0,h=r.names.length;d<h;d++)if(r.names[d].test(l))return!0;return!1}function a(l){return l.toString().substring(2,l.toString().length-2).replace(/\.\*\?$/,"*")}function u(l){return l instanceof Error?l.stack||l.message:l}function c(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return r.enable(r.load()),r}ll.exports=jg});var fl=b((Oe,zn)=>{Oe.formatArgs=Hg;Oe.save=Bg;Oe.load=Gg;Oe.useColors=Ug;Oe.storage=zg();Oe.destroy=(()=>{let t=!1;return()=>{t||(t=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();Oe.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function Ug(){return typeof window!="undefined"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document!="undefined"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window!="undefined"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function Hg(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+zn.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let r=0,n=0;t[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(r++,i==="%c"&&(n=r))}),t.splice(n,0,e)}Oe.log=console.debug||console.log||(()=>{});function Bg(t){try{t?Oe.storage.setItem("debug",t):Oe.storage.removeItem("debug")}catch{}}function Gg(){let t;try{t=Oe.storage.getItem("debug")}catch{}return!t&&typeof process!="undefined"&&"env"in process&&(t=process.env.DEBUG),t}function zg(){try{return localStorage}catch{}}zn.exports=Yo()(Oe);var{formatters:Vg}=zn.exports;Vg.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var pl=b((tT,dl)=>{"use strict";dl.exports=(t,e=process.argv)=>{let r=t.startsWith("-")?"":t.length===1?"-":"--",n=e.indexOf(r+t),i=e.indexOf("--");return n!==-1&&(i===-1||n<i)}});var _l=b((rT,vl)=>{"use strict";var Wg=require("os"),hl=require("tty"),Ne=pl(),{env:ne}=process,_t;Ne("no-color")||Ne("no-colors")||Ne("color=false")||Ne("color=never")?_t=0:(Ne("color")||Ne("colors")||Ne("color=true")||Ne("color=always"))&&(_t=1);"FORCE_COLOR"in ne&&(ne.FORCE_COLOR==="true"?_t=1:ne.FORCE_COLOR==="false"?_t=0:_t=ne.FORCE_COLOR.length===0?1:Math.min(parseInt(ne.FORCE_COLOR,10),3));function Ko(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function Jo(t,e){if(_t===0)return 0;if(Ne("color=16m")||Ne("color=full")||Ne("color=truecolor"))return 3;if(Ne("color=256"))return 2;if(t&&!e&&_t===void 0)return 0;let r=_t||0;if(ne.TERM==="dumb")return r;if(process.platform==="win32"){let n=Wg.release().split(".");return Number(n[0])>=10&&Number(n[2])>=10586?Number(n[2])>=14931?3:2:1}if("CI"in ne)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(n=>n in ne)||ne.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in ne)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(ne.TEAMCITY_VERSION)?1:0;if(ne.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in ne){let n=parseInt((ne.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(ne.TERM_PROGRAM){case"iTerm.app":return n>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(ne.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ne.TERM)||"COLORTERM"in ne?1:r}function $g(t){let e=Jo(t,t&&t.isTTY);return Ko(e)}vl.exports={supportsColor:$g,stdout:Ko(Jo(!0,hl.isatty(1))),stderr:Ko(Jo(!0,hl.isatty(2)))}});var ml=b((ue,Wn)=>{var Yg=require("tty"),Vn=require("util");ue.init=tm;ue.log=Qg;ue.formatArgs=Jg;ue.save=Zg;ue.load=em;ue.useColors=Kg;ue.destroy=Vn.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");ue.colors=[6,2,3,4,5,1];try{let t=_l();t&&(t.stderr||t).level>=2&&(ue.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}ue.inspectOpts=Object.keys(process.env).filter(t=>/^debug_/i.test(t)).reduce((t,e)=>{let r=e.substring(6).toLowerCase().replace(/_([a-z])/g,(i,o)=>o.toUpperCase()),n=process.env[e];return/^(yes|on|true|enabled)$/i.test(n)?n=!0:/^(no|off|false|disabled)$/i.test(n)?n=!1:n==="null"?n=null:n=Number(n),t[r]=n,t},{});function Kg(){return"colors"in ue.inspectOpts?Boolean(ue.inspectOpts.colors):Yg.isatty(process.stderr.fd)}function Jg(t){let{namespace:e,useColors:r}=this;if(r){let n=this.color,i="\x1B[3"+(n<8?n:"8;5;"+n),o=` ${i};1m${e} \x1B[0m`;t[0]=o+t[0].split(`
13
+ `+JSON.stringify(t),type:i,url:e.getEnvelopeEndpointWithUrlEncodedAuth()}}pn.sessionToSentryRequest=S_;function E_(t,e){var r=zu(e),n=t.type||"event",i=n==="transaction"||e.forceEnvelope(),o=t.debug_meta||{},a=o.transactionSampling,s=bt.__rest(o,["transactionSampling"]),u=a||{},c=u.method,l=u.rate;Object.keys(s).length===0?delete t.debug_meta:t.debug_meta=s;var d={body:JSON.stringify(r?b_(t,e.metadata.sdk):t),type:n,url:i?e.getEnvelopeEndpointWithUrlEncodedAuth():e.getStoreEndpointWithUrlEncodedAuth()};if(i){var h=JSON.stringify(bt.__assign(bt.__assign({event_id:t.event_id,sent_at:new Date().toISOString()},r&&{sdk:r}),e.forceEnvelope()&&{dsn:e.getDsn().toString()})),y=JSON.stringify({type:n,sample_rates:[{id:c,rate:l}]}),S=h+`
14
+ `+y+`
15
+ `+d.body;d.body=S}return d}pn.eventToSentryRequest=E_});var Wu=b(no=>{Object.defineProperty(no,"__esModule",{value:!0});var T_=ge(),O_=P();function w_(t,e){var r;e.debug===!0&&O_.logger.enable();var n=T_.getCurrentHub();(r=n.getScope())===null||r===void 0||r.update(e.initialScope);var i=new t(e);n.bindClient(i)}no.initAndBind=w_});var Yu=b(io=>{Object.defineProperty(io,"__esModule",{value:!0});io.SDK_VERSION="6.16.1"});var Ku=b(oo=>{Object.defineProperty(oo,"__esModule",{value:!0});var $u,x_=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(){$u=Function.prototype.toString,Function.prototype.toString=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var n=this.__sentry_original__||this;return $u.apply(n,e)}},t.id="FunctionToString",t}();oo.FunctionToString=x_});var Xu=b(so=>{Object.defineProperty(so,"__esModule",{value:!0});var ao=N(),Ju=ge(),fe=P(),I_=[/^Script error\.?$/,/^Javascript error: Script error\.? on line 0$/],C_=function(){function t(e){e===void 0&&(e={}),this._options=e,this.name=t.id}return t.prototype.setupOnce=function(){Ju.addGlobalEventProcessor(function(e){var r=Ju.getCurrentHub();if(!r)return e;var n=r.getIntegration(t);if(n){var i=r.getClient(),o=i?i.getOptions():{},a=typeof n._mergeOptions=="function"?n._mergeOptions(o):{};return typeof n._shouldDropEvent!="function"?e:n._shouldDropEvent(e,a)?null:e}return e})},t.prototype._shouldDropEvent=function(e,r){return this._isSentryError(e,r)?(fe.logger.warn(`Event dropped due to being internal Sentry Error.
16
+ Event: `+fe.getEventDescription(e)),!0):this._isIgnoredError(e,r)?(fe.logger.warn("Event dropped due to being matched by `ignoreErrors` option.\nEvent: "+fe.getEventDescription(e)),!0):this._isDeniedUrl(e,r)?(fe.logger.warn("Event dropped due to being matched by `denyUrls` option.\nEvent: "+fe.getEventDescription(e)+`.
17
+ Url: `+this._getEventFilterUrl(e)),!0):this._isAllowedUrl(e,r)?!1:(fe.logger.warn("Event dropped due to not being matched by `allowUrls` option.\nEvent: "+fe.getEventDescription(e)+`.
18
+ Url: `+this._getEventFilterUrl(e)),!0)},t.prototype._isSentryError=function(e,r){if(!r.ignoreInternal)return!1;try{return e&&e.exception&&e.exception.values&&e.exception.values[0]&&e.exception.values[0].type==="SentryError"||!1}catch{return!1}},t.prototype._isIgnoredError=function(e,r){return!r.ignoreErrors||!r.ignoreErrors.length?!1:this._getPossibleEventMessages(e).some(function(n){return r.ignoreErrors.some(function(i){return fe.isMatchingPattern(n,i)})})},t.prototype._isDeniedUrl=function(e,r){if(!r.denyUrls||!r.denyUrls.length)return!1;var n=this._getEventFilterUrl(e);return n?r.denyUrls.some(function(i){return fe.isMatchingPattern(n,i)}):!1},t.prototype._isAllowedUrl=function(e,r){if(!r.allowUrls||!r.allowUrls.length)return!0;var n=this._getEventFilterUrl(e);return n?r.allowUrls.some(function(i){return fe.isMatchingPattern(n,i)}):!0},t.prototype._mergeOptions=function(e){return e===void 0&&(e={}),{allowUrls:ao.__spread(this._options.whitelistUrls||[],this._options.allowUrls||[],e.whitelistUrls||[],e.allowUrls||[]),denyUrls:ao.__spread(this._options.blacklistUrls||[],this._options.denyUrls||[],e.blacklistUrls||[],e.denyUrls||[]),ignoreErrors:ao.__spread(this._options.ignoreErrors||[],e.ignoreErrors||[],I_),ignoreInternal:typeof this._options.ignoreInternal!="undefined"?this._options.ignoreInternal:!0}},t.prototype._getPossibleEventMessages=function(e){if(e.message)return[e.message];if(e.exception)try{var r=e.exception.values&&e.exception.values[0]||{},n=r.type,i=n===void 0?"":n,o=r.value,a=o===void 0?"":o;return[""+a,i+": "+a]}catch{return fe.logger.error("Cannot extract message for event "+fe.getEventDescription(e)),[]}return[]},t.prototype._getLastValidUrl=function(e){e===void 0&&(e=[]);for(var r,n,i=e.length-1;i>=0;i--){var o=e[i];if(((r=o)===null||r===void 0?void 0:r.filename)!=="<anonymous>"&&((n=o)===null||n===void 0?void 0:n.filename)!=="[native code]")return o.filename||null}return null},t.prototype._getEventFilterUrl=function(e){try{if(e.stacktrace){var r=e.stacktrace.frames;return this._getLastValidUrl(r)}if(e.exception){var n=e.exception.values&&e.exception.values[0].stacktrace&&e.exception.values[0].stacktrace.frames;return this._getLastValidUrl(n)}return null}catch{return fe.logger.error("Cannot extract url for event "+fe.getEventDescription(e)),null}},t.id="InboundFilters",t}();so.InboundFilters=C_});var Qu=b(hn=>{Object.defineProperty(hn,"__esModule",{value:!0});var R_=Ku();hn.FunctionToString=R_.FunctionToString;var A_=Xu();hn.InboundFilters=A_.InboundFilters});var ie=b(z=>{Object.defineProperty(z,"__esModule",{value:!0});var ye=Pu();z.addBreadcrumb=ye.addBreadcrumb;z.captureException=ye.captureException;z.captureEvent=ye.captureEvent;z.captureMessage=ye.captureMessage;z.configureScope=ye.configureScope;z.startTransaction=ye.startTransaction;z.setContext=ye.setContext;z.setExtra=ye.setExtra;z.setExtras=ye.setExtras;z.setTag=ye.setTag;z.setTags=ye.setTags;z.setUser=ye.setUser;z.withScope=ye.withScope;var Bt=ge();z.addGlobalEventProcessor=Bt.addGlobalEventProcessor;z.getCurrentHub=Bt.getCurrentHub;z.getHubFromCarrier=Bt.getHubFromCarrier;z.Hub=Bt.Hub;z.makeMain=Bt.makeMain;z.Scope=Bt.Scope;var P_=Mu();z.API=P_.API;var q_=Uu();z.BaseClient=q_.BaseClient;var N_=Gu();z.BaseBackend=N_.BaseBackend;var Zu=Vu();z.eventToSentryRequest=Zu.eventToSentryRequest;z.sessionToSentryRequest=Zu.sessionToSentryRequest;var M_=Wu();z.initAndBind=M_.initAndBind;var k_=to();z.NoopTransport=k_.NoopTransport;var D_=Yu();z.SDK_VERSION=D_.SDK_VERSION;var F_=Qu();z.Integrations=F_});var ec=b(_n=>{(function(t,e){let r=typeof _n=="object"?_n:typeof t=="object"?t:{};e(r),typeof define=="function"&&define.amd&&define("lru",r)})(_n,function(t){let e=Symbol("newer"),r=Symbol("older");function n(u,c){typeof u!="number"&&(c=u,u=0),this.size=0,this.limit=u,this.oldest=this.newest=void 0,this._keymap=new Map,c&&(this.assign(c),u<1&&(this.limit=this.size))}t.LRUMap=n;function i(u,c){this.key=u,this.value=c,this[e]=void 0,this[r]=void 0}n.prototype._markEntryAsUsed=function(u){u!==this.newest&&(u[e]&&(u===this.oldest&&(this.oldest=u[e]),u[e][r]=u[r]),u[r]&&(u[r][e]=u[e]),u[e]=void 0,u[r]=this.newest,this.newest&&(this.newest[e]=u),this.newest=u)},n.prototype.assign=function(u){let c,l=this.limit||Number.MAX_VALUE;this._keymap.clear();let d=u[Symbol.iterator]();for(let h=d.next();!h.done;h=d.next()){let y=new i(h.value[0],h.value[1]);if(this._keymap.set(y.key,y),c?(c[e]=y,y[r]=c):this.oldest=y,c=y,l--==0)throw new Error("overflow")}this.newest=c,this.size=this._keymap.size},n.prototype.get=function(u){var c=this._keymap.get(u);if(!!c)return this._markEntryAsUsed(c),c.value},n.prototype.set=function(u,c){var l=this._keymap.get(u);return l?(l.value=c,this._markEntryAsUsed(l),this):(this._keymap.set(u,l=new i(u,c)),this.newest?(this.newest[e]=l,l[r]=this.newest):this.oldest=l,this.newest=l,++this.size,this.size>this.limit&&this.shift(),this)},n.prototype.shift=function(){var u=this.oldest;if(u)return this.oldest[e]?(this.oldest=this.oldest[e],this.oldest[r]=void 0):(this.oldest=void 0,this.newest=void 0),u[e]=u[r]=void 0,this._keymap.delete(u.key),--this.size,[u.key,u.value]},n.prototype.find=function(u){let c=this._keymap.get(u);return c?c.value:void 0},n.prototype.has=function(u){return this._keymap.has(u)},n.prototype.delete=function(u){var c=this._keymap.get(u);if(!!c)return this._keymap.delete(c.key),c[e]&&c[r]?(c[r][e]=c[e],c[e][r]=c[r]):c[e]?(c[e][r]=void 0,this.oldest=c[e]):c[r]?(c[r][e]=void 0,this.newest=c[r]):this.oldest=this.newest=void 0,this.size--,c.value},n.prototype.clear=function(){this.oldest=this.newest=void 0,this.size=0,this._keymap.clear()};function o(u){this.entry=u}o.prototype[Symbol.iterator]=function(){return this},o.prototype.next=function(){let u=this.entry;return u?(this.entry=u[e],{done:!1,value:[u.key,u.value]}):{done:!0,value:void 0}};function a(u){this.entry=u}a.prototype[Symbol.iterator]=function(){return this},a.prototype.next=function(){let u=this.entry;return u?(this.entry=u[e],{done:!1,value:u.key}):{done:!0,value:void 0}};function s(u){this.entry=u}s.prototype[Symbol.iterator]=function(){return this},s.prototype.next=function(){let u=this.entry;return u?(this.entry=u[e],{done:!1,value:u.value}):{done:!0,value:void 0}},n.prototype.keys=function(){return new a(this.oldest)},n.prototype.values=function(){return new s(this.oldest)},n.prototype.entries=function(){return this},n.prototype[Symbol.iterator]=function(){return new o(this.oldest)},n.prototype.forEach=function(u,c){typeof c!="object"&&(c=this);let l=this.oldest;for(;l;)u.call(c,l.value,l.key,this),l=l[e]},n.prototype.toJSON=function(){for(var u=new Array(this.size),c=0,l=this.oldest;l;)u[c++]={key:l.key,value:l.value},l=l[e];return u},n.prototype.toString=function(){for(var u="",c=this.oldest;c;)u+=String(c.key)+":"+c.value,c=c[e],c&&(u+=" < ");return u}})});var tc=b(uo=>{Object.defineProperty(uo,"__esModule",{value:!0});function j_(t){if(!t.stack)return[];var e=t.stack.split(`
19
+ `).slice(1);return e.map(function(r){if(r.match(/^\s*[-]{4,}$/))return{columnNumber:null,fileName:r,functionName:null,lineNumber:null,methodName:null,native:null,typeName:null};var n=r.match(/at (?:(.+?)\s+\()?(?:(.+?):(\d+)(?::(\d+))?|([^)]+))\)?/);if(!!n){var i=null,o=null,a=null,s=null,u=null,c=n[5]==="native";if(n[1]){a=n[1];var l=a.lastIndexOf(".");if(a[l-1]==="."&&l--,l>0){i=a.substr(0,l),o=a.substr(l+1);var d=i.indexOf(".Module");d>0&&(a=a.substr(d+1),i=i.substr(0,d))}s=null}o&&(s=i,u=o),o==="<anonymous>"&&(u=null,a=null);var h={columnNumber:parseInt(n[4],10)||null,fileName:n[2]||null,functionName:a,lineNumber:parseInt(n[3],10)||null,methodName:u,native:c,typeName:s};return h}}).filter(function(r){return!!r})}uo.parse=j_});var fo=b(ot=>{Object.defineProperty(ot,"__esModule",{value:!0});var Ne=P(),H_=require("fs"),L_=ec(),U_=tc(),B_=7,co=new L_.LRUMap(100);function G_(){co.clear()}ot.resetFileContentCache=G_;function z_(t){try{return t.functionName||t.typeName+"."+(t.methodName||"<anonymous>")}catch{return"<anonymous>"}}var V_=(require.main&&require.main.filename&&Ne.dirname(require.main.filename)||global.process.cwd())+"/";function W_(t,e){e||(e=V_);var r=Ne.basename(t,".js");t=Ne.dirname(t);var n=t.lastIndexOf("/node_modules/");if(n>-1)return t.substr(n+14).replace(/\//g,".")+":"+r;if(n=(t+"/").lastIndexOf(e,0),n===0){var i=t.substr(e.length).replace(/\//g,".");return i&&(i+=":"),i+=r,i}return r}function Y_(t){return t.length===0?Ne.SyncPromise.resolve({}):new Ne.SyncPromise(function(e){for(var r={},n=0,i=function(a){var s=t[a],u=co.get(s);if(u!==void 0)return u!==null&&(r[s]=u),n++,n===t.length&&e(r),"continue";H_.readFile(s,function(c,l){var d=c?null:l.toString();r[s]=d,co.set(s,d),n++,n===t.length&&e(r)})},o=0;o<t.length;o++)i(o)})}function rc(t){var e=U_.parse(t);return e||[]}ot.extractStackFromError=rc;function nc(t,e){var r=[],n=e&&e.frameContextLines!==void 0?e.frameContextLines:B_,i=t.map(function(o){var a,s={colno:o.columnNumber,filename:((a=o.fileName)===null||a===void 0?void 0:a.startsWith("file://"))?o.fileName.substr(7):o.fileName||"",function:z_(o),lineno:o.lineNumber},u=o.native||s.filename&&!s.filename.startsWith("/")&&!s.filename.startsWith(".")&&s.filename.indexOf(":\\")!==1;return s.in_app=!u&&s.filename!==void 0&&s.filename.indexOf("node_modules/")===-1,s.filename&&(s.module=W_(s.filename),!u&&n>0&&r.indexOf(s.filename)===-1&&r.push(s.filename)),s});if(n<=0)return Ne.SyncPromise.resolve(i);try{return $_(r,i,n)}catch{return Ne.SyncPromise.resolve(i)}}ot.parseStack=nc;function $_(t,e,r){return new Ne.SyncPromise(function(n){return Y_(t).then(function(i){var o=e.map(function(a){if(a.filename&&i[a.filename])try{var s=i[a.filename].split(`
20
+ `);Ne.addContextToFrame(s,a,r)}catch{}return a});n(o)})})}function ic(t,e){var r=t.name||t.constructor.name,n=rc(t);return new Ne.SyncPromise(function(i){return nc(n,e).then(function(o){var a={stacktrace:{frames:oc(o)},type:r,value:t.message};i(a)})})}ot.getExceptionFromError=ic;function K_(t,e){return new Ne.SyncPromise(function(r){return ic(t,e).then(function(n){r({exception:{values:[n]}})})})}ot.parseError=K_;function oc(t){if(!t||!t.length)return[];var e=t,r=e[0].function||"";return(r.indexOf("captureMessage")!==-1||r.indexOf("captureException")!==-1)&&(e=e.slice(1)),e.reverse()}ot.prepareFramesForEvent=oc});var po=b(lo=>{Object.defineProperty(lo,"__esModule",{value:!0});lo.SDK_NAME="sentry.javascript.node"});var vn=b(_o=>{Object.defineProperty(_o,"__esModule",{value:!0});var Ye=N(),ac=ie(),sc=ne(),St=P(),J_=require("fs"),X_=require("url"),Q_=po(),ho={event:"error",transaction:"transaction",session:"session",attachment:"attachment"},Z_=function(){function t(e){this.options=e,this._buffer=new St.PromiseBuffer(30),this._rateLimits={},this.urlParser=function(r){return new X_.URL(r)},this._api=new ac.API(e.dsn,e._metadata,e.tunnel)}return t.prototype.sendEvent=function(e){throw new St.SentryError("Transport Class has to implement `sendEvent` method.")},t.prototype.close=function(e){return this._buffer.drain(e)},t.prototype._getProxy=function(e){var r,n,i=process.env,o=i.no_proxy,a=i.http_proxy,s=i.https_proxy,u=this.options,c=u.httpProxy,l=u.httpsProxy,d=e==="http"?c||a:l||c||s||a;if(!o)return d;var h=this._api.getDsn(),y=h.host,S=h.port;try{for(var T=Ye.__values(o.split(",")),C=T.next();!C.done;C=T.next()){var q=C.value;if(y.endsWith(q)||(y+":"+S).endsWith(q))return}}catch(U){r={error:U}}finally{try{C&&!C.done&&(n=T.return)&&n.call(T)}finally{if(r)throw r.error}}return d},t.prototype._getRequestOptions=function(e){var r=Ye.__assign(Ye.__assign({},this._api.getRequestHeaders(Q_.SDK_NAME,ac.SDK_VERSION)),this.options.headers),n=e.hostname,i=e.pathname,o=e.port,a=e.protocol,s=""+i;return Ye.__assign({agent:this.client,headers:r,hostname:n,method:"POST",path:s,port:o,protocol:a},this.options.caCerts&&{ca:J_.readFileSync(this.options.caCerts)})},t.prototype._disabledUntil=function(e){var r=ho[e];return this._rateLimits[r]||this._rateLimits.all},t.prototype._isRateLimited=function(e){return this._disabledUntil(e)>new Date(Date.now())},t.prototype._handleRateLimit=function(e){var r,n,i,o,a=Date.now(),s=e["x-sentry-rate-limits"],u=e["retry-after"];if(s){try{for(var c=Ye.__values(s.trim().split(",")),l=c.next();!l.done;l=c.next()){var d=l.value,h=d.split(":",2),y=parseInt(h[0],10),S=(isNaN(y)?60:y)*1e3;try{for(var T=(i=void 0,Ye.__values(h[1]&&h[1].split(";")||["all"])),C=T.next();!C.done;C=T.next()){var q=C.value,U=Ye.__spread(Object.keys(ho).map(function(k){return ho[k]}),["all"]);U.includes(q)&&(this._rateLimits[q]=new Date(a+S))}}catch(k){i={error:k}}finally{try{C&&!C.done&&(o=T.return)&&o.call(T)}finally{if(i)throw i.error}}}}catch(k){r={error:k}}finally{try{l&&!l.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}return!0}else if(u)return this._rateLimits.all=new Date(a+St.parseRetryAfterHeader(a,u)),!0;return!1},t.prototype._send=function(e,r){return Ye.__awaiter(this,void 0,void 0,function(){var n=this;return Ye.__generator(this,function(i){if(!this.module)throw new St.SentryError("No module available");return r&&this._isRateLimited(e.type)?[2,Promise.reject({payload:r,type:e.type,reason:"Transport for "+e.type+" requests locked till "+this._disabledUntil(e.type)+" due to too many requests.",status:429})]:[2,this._buffer.add(function(){return new Promise(function(o,a){if(!n.module)throw new St.SentryError("No module available");var s=n._getRequestOptions(n.urlParser(e.url)),u=n.module.request(s,function(c){var l=c.statusCode||500,d=sc.Status.fromHttpCode(l);c.setEncoding("utf8");var h=c.headers?c.headers["retry-after"]:"";h=Array.isArray(h)?h[0]:h;var y=c.headers?c.headers["x-sentry-rate-limits"]:"";y=Array.isArray(y)?y[0]:y;var S={"x-sentry-rate-limits":y,"retry-after":h},T=n._handleRateLimit(S);if(T&&St.logger.warn("Too many "+e.type+" requests, backing off until: "+n._disabledUntil(e.type)),d===sc.Status.Success)o({status:d});else{var C="HTTP Error ("+l+")";c.headers&&c.headers["x-sentry-error"]&&(C+=": "+c.headers["x-sentry-error"]),a(new St.SentryError(C))}c.on("data",function(){}),c.on("end",function(){})});u.on("error",a),u.end(e.body)})})]})})},t}();_o.BaseTransport=Z_});var cc=b((kS,uc)=>{var Gt=1e3,zt=Gt*60,Vt=zt*60,Et=Vt*24,ev=Et*7,tv=Et*365.25;uc.exports=function(t,e){e=e||{};var r=typeof t;if(r==="string"&&t.length>0)return rv(t);if(r==="number"&&isFinite(t))return e.long?iv(t):nv(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function rv(t){if(t=String(t),!(t.length>100)){var e=/^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(t);if(!!e){var r=parseFloat(e[1]),n=(e[2]||"ms").toLowerCase();switch(n){case"years":case"year":case"yrs":case"yr":case"y":return r*tv;case"weeks":case"week":case"w":return r*ev;case"days":case"day":case"d":return r*Et;case"hours":case"hour":case"hrs":case"hr":case"h":return r*Vt;case"minutes":case"minute":case"mins":case"min":case"m":return r*zt;case"seconds":case"second":case"secs":case"sec":case"s":return r*Gt;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function nv(t){var e=Math.abs(t);return e>=Et?Math.round(t/Et)+"d":e>=Vt?Math.round(t/Vt)+"h":e>=zt?Math.round(t/zt)+"m":e>=Gt?Math.round(t/Gt)+"s":t+"ms"}function iv(t){var e=Math.abs(t);return e>=Et?gn(t,e,Et,"day"):e>=Vt?gn(t,e,Vt,"hour"):e>=zt?gn(t,e,zt,"minute"):e>=Gt?gn(t,e,Gt,"second"):t+" ms"}function gn(t,e,r,n){var i=e>=r*1.5;return Math.round(t/r)+" "+n+(i?"s":"")}});var vo=b((DS,fc)=>{function ov(t){r.debug=r,r.default=r,r.coerce=u,r.disable=o,r.enable=i,r.enabled=a,r.humanize=cc(),r.destroy=c,Object.keys(t).forEach(l=>{r[l]=t[l]}),r.names=[],r.skips=[],r.formatters={};function e(l){let d=0;for(let h=0;h<l.length;h++)d=(d<<5)-d+l.charCodeAt(h),d|=0;return r.colors[Math.abs(d)%r.colors.length]}r.selectColor=e;function r(l){let d,h=null,y,S;function T(...C){if(!T.enabled)return;let q=T,U=Number(new Date),k=U-(d||U);q.diff=k,q.prev=d,q.curr=U,d=U,C[0]=r.coerce(C[0]),typeof C[0]!="string"&&C.unshift("%O");let Se=0;C[0]=C[0].replace(/%([a-zA-Z%])/g,(R,B)=>{if(R==="%%")return"%";Se++;let D=r.formatters[B];if(typeof D=="function"){let V=C[Se];R=D.call(q,V),C.splice(Se,1),Se--}return R}),r.formatArgs.call(q,C),(q.log||r.log).apply(q,C)}return T.namespace=l,T.useColors=r.useColors(),T.color=r.selectColor(l),T.extend=n,T.destroy=r.destroy,Object.defineProperty(T,"enabled",{enumerable:!0,configurable:!1,get:()=>h!==null?h:(y!==r.namespaces&&(y=r.namespaces,S=r.enabled(l)),S),set:C=>{h=C}}),typeof r.init=="function"&&r.init(T),T}function n(l,d){let h=r(this.namespace+(typeof d=="undefined"?":":d)+l);return h.log=this.log,h}function i(l){r.save(l),r.namespaces=l,r.names=[],r.skips=[];let d,h=(typeof l=="string"?l:"").split(/[\s,]+/),y=h.length;for(d=0;d<y;d++)!h[d]||(l=h[d].replace(/\*/g,".*?"),l[0]==="-"?r.skips.push(new RegExp("^"+l.substr(1)+"$")):r.names.push(new RegExp("^"+l+"$")))}function o(){let l=[...r.names.map(s),...r.skips.map(s).map(d=>"-"+d)].join(",");return r.enable(""),l}function a(l){if(l[l.length-1]==="*")return!0;let d,h;for(d=0,h=r.skips.length;d<h;d++)if(r.skips[d].test(l))return!1;for(d=0,h=r.names.length;d<h;d++)if(r.names[d].test(l))return!0;return!1}function s(l){return l.toString().substring(2,l.toString().length-2).replace(/\.\*\?$/,"*")}function u(l){return l instanceof Error?l.stack||l.message:l}function c(){console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.")}return r.enable(r.load()),r}fc.exports=ov});var lc=b((be,mn)=>{be.formatArgs=sv;be.save=uv;be.load=cv;be.useColors=av;be.storage=fv();be.destroy=(()=>{let t=!1;return()=>{t||(t=!0,console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."))}})();be.colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function av(){return typeof window!="undefined"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)?!0:typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)?!1:typeof document!="undefined"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window!="undefined"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator!="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}function sv(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+mn.exports.humanize(this.diff),!this.useColors)return;let e="color: "+this.color;t.splice(1,0,e,"color: inherit");let r=0,n=0;t[0].replace(/%[a-zA-Z%]/g,i=>{i!=="%%"&&(r++,i==="%c"&&(n=r))}),t.splice(n,0,e)}be.log=console.debug||console.log||(()=>{});function uv(t){try{t?be.storage.setItem("debug",t):be.storage.removeItem("debug")}catch{}}function cv(){let t;try{t=be.storage.getItem("debug")}catch{}return!t&&typeof process!="undefined"&&"env"in process&&(t=process.env.DEBUG),t}function fv(){try{return localStorage}catch{}}mn.exports=vo()(be);var{formatters:lv}=mn.exports;lv.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var pc=b((FS,dc)=>{"use strict";dc.exports=(t,e=process.argv)=>{let r=t.startsWith("-")?"":t.length===1?"-":"--",n=e.indexOf(r+t),i=e.indexOf("--");return n!==-1&&(i===-1||n<i)}});var vc=b((jS,_c)=>{"use strict";var dv=require("os"),hc=require("tty"),Ie=pc(),{env:ee}=process,at;Ie("no-color")||Ie("no-colors")||Ie("color=false")||Ie("color=never")?at=0:(Ie("color")||Ie("colors")||Ie("color=true")||Ie("color=always"))&&(at=1);"FORCE_COLOR"in ee&&(ee.FORCE_COLOR==="true"?at=1:ee.FORCE_COLOR==="false"?at=0:at=ee.FORCE_COLOR.length===0?1:Math.min(parseInt(ee.FORCE_COLOR,10),3));function go(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function mo(t,e){if(at===0)return 0;if(Ie("color=16m")||Ie("color=full")||Ie("color=truecolor"))return 3;if(Ie("color=256"))return 2;if(t&&!e&&at===void 0)return 0;let r=at||0;if(ee.TERM==="dumb")return r;if(process.platform==="win32"){let n=dv.release().split(".");return Number(n[0])>=10&&Number(n[2])>=10586?Number(n[2])>=14931?3:2:1}if("CI"in ee)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(n=>n in ee)||ee.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in ee)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(ee.TEAMCITY_VERSION)?1:0;if(ee.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in ee){let n=parseInt((ee.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(ee.TERM_PROGRAM){case"iTerm.app":return n>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(ee.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(ee.TERM)||"COLORTERM"in ee?1:r}function pv(t){let e=mo(t,t&&t.isTTY);return go(e)}_c.exports={supportsColor:pv,stdout:go(mo(!0,hc.isatty(1))),stderr:go(mo(!0,hc.isatty(2)))}});var mc=b((oe,bn)=>{var hv=require("tty"),yn=require("util");oe.init=Sv;oe.log=mv;oe.formatArgs=vv;oe.save=yv;oe.load=bv;oe.useColors=_v;oe.destroy=yn.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");oe.colors=[6,2,3,4,5,1];try{let t=vc();t&&(t.stderr||t).level>=2&&(oe.colors=[20,21,26,27,32,33,38,39,40,41,42,43,44,45,56,57,62,63,68,69,74,75,76,77,78,79,80,81,92,93,98,99,112,113,128,129,134,135,148,149,160,161,162,163,164,165,166,167,168,169,170,171,172,173,178,179,184,185,196,197,198,199,200,201,202,203,204,205,206,207,208,209,214,215,220,221])}catch{}oe.inspectOpts=Object.keys(process.env).filter(t=>/^debug_/i.test(t)).reduce((t,e)=>{let r=e.substring(6).toLowerCase().replace(/_([a-z])/g,(i,o)=>o.toUpperCase()),n=process.env[e];return/^(yes|on|true|enabled)$/i.test(n)?n=!0:/^(no|off|false|disabled)$/i.test(n)?n=!1:n==="null"?n=null:n=Number(n),t[r]=n,t},{});function _v(){return"colors"in oe.inspectOpts?Boolean(oe.inspectOpts.colors):hv.isatty(process.stderr.fd)}function vv(t){let{namespace:e,useColors:r}=this;if(r){let n=this.color,i="\x1B[3"+(n<8?n:"8;5;"+n),o=` ${i};1m${e} \x1B[0m`;t[0]=o+t[0].split(`
21
21
  `).join(`
22
- `+o),t.push(i+"m+"+Wn.exports.humanize(this.diff)+"\x1B[0m")}else t[0]=Xg()+e+" "+t[0]}function Xg(){return ue.inspectOpts.hideDate?"":new Date().toISOString()+" "}function Qg(...t){return process.stderr.write(Vn.format(...t)+`
23
- `)}function Zg(t){t?process.env.DEBUG=t:delete process.env.DEBUG}function em(){return process.env.DEBUG}function tm(t){t.inspectOpts={};let e=Object.keys(ue.inspectOpts);for(let r=0;r<e.length;r++)t.inspectOpts[e[r]]=ue.inspectOpts[e[r]]}Wn.exports=Yo()(ue);var{formatters:gl}=Wn.exports;gl.o=function(t){return this.inspectOpts.colors=this.useColors,Vn.inspect(t,this.inspectOpts).split(`
24
- `).map(e=>e.trim()).join(" ")};gl.O=function(t){return this.inspectOpts.colors=this.useColors,Vn.inspect(t,this.inspectOpts)}});var $n=b((nT,Xo)=>{typeof process=="undefined"||process.type==="renderer"||process.browser===!0||process.__nwjs?Xo.exports=fl():Xo.exports=ml()});var yl=b(Qo=>{"use strict";Object.defineProperty(Qo,"__esModule",{value:!0});function rm(t){return function(e,r){return new Promise((n,i)=>{t.call(this,e,r,(o,s)=>{o?i(o):n(s)})})}}Qo.default=rm});var El=b((es,Sl)=>{"use strict";var bl=es&&es.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},nm=require("events"),im=bl($n()),om=bl(yl()),qr=im.default("agent-base");function sm(t){return Boolean(t)&&typeof t.addRequest=="function"}function Zo(){let{stack:t}=new Error;return typeof t!="string"?!1:t.split(`
25
- `).some(e=>e.indexOf("(https.js:")!==-1||e.indexOf("node:https:")!==-1)}function Yn(t,e){return new Yn.Agent(t,e)}(function(t){class e extends nm.EventEmitter{constructor(n,i){super();let o=i;typeof n=="function"?this.callback=n:n&&(o=n),this.timeout=null,o&&typeof o.timeout=="number"&&(this.timeout=o.timeout),this.maxFreeSockets=1,this.maxSockets=1,this.maxTotalSockets=1/0,this.sockets={},this.freeSockets={},this.requests={},this.options={}}get defaultPort(){return typeof this.explicitDefaultPort=="number"?this.explicitDefaultPort:Zo()?443:80}set defaultPort(n){this.explicitDefaultPort=n}get protocol(){return typeof this.explicitProtocol=="string"?this.explicitProtocol:Zo()?"https:":"http:"}set protocol(n){this.explicitProtocol=n}callback(n,i,o){throw new Error('"agent-base" has no default implementation, you must subclass and override `callback()`')}addRequest(n,i){let o=Object.assign({},i);typeof o.secureEndpoint!="boolean"&&(o.secureEndpoint=Zo()),o.host==null&&(o.host="localhost"),o.port==null&&(o.port=o.secureEndpoint?443:80),o.protocol==null&&(o.protocol=o.secureEndpoint?"https:":"http:"),o.host&&o.path&&delete o.path,delete o.agent,delete o.hostname,delete o._defaultAgent,delete o.defaultPort,delete o.createConnection,n._last=!0,n.shouldKeepAlive=!1;let s=!1,a=null,u=o.timeout||this.timeout,c=_=>{n._hadError||(n.emit("error",_),n._hadError=!0)},l=()=>{a=null,s=!0;let _=new Error(`A "socket" was not created for HTTP request before ${u}ms`);_.code="ETIMEOUT",c(_)},d=_=>{s||(a!==null&&(clearTimeout(a),a=null),c(_))},h=_=>{if(s)return;if(a!=null&&(clearTimeout(a),a=null),sm(_)){qr("Callback returned another Agent instance %o",_.constructor.name),_.addRequest(n,o);return}if(_){_.once("free",()=>{this.freeSocket(_,o)}),n.onSocket(_);return}let S=new Error(`no Duplex stream was returned to agent-base for \`${n.method} ${n.path}\``);c(S)};if(typeof this.callback!="function"){c(new Error("`callback` is not defined"));return}this.promisifiedCallback||(this.callback.length>=3?(qr("Converting legacy callback function to promise"),this.promisifiedCallback=om.default(this.callback)):this.promisifiedCallback=this.callback),typeof u=="number"&&u>0&&(a=setTimeout(l,u)),"port"in o&&typeof o.port!="number"&&(o.port=Number(o.port));try{qr("Resolving socket for %o request: %o",o.protocol,`${n.method} ${n.path}`),Promise.resolve(this.promisifiedCallback(n,o)).then(h,d)}catch(_){Promise.reject(_).catch(d)}}freeSocket(n,i){qr("Freeing socket %o %o",n.constructor.name,i),n.destroy()}destroy(){qr("Destroying agent %o",this.constructor.name)}}t.Agent=e,t.prototype=t.Agent.prototype})(Yn||(Yn={}));Sl.exports=Yn});var Tl=b(Dr=>{"use strict";var am=Dr&&Dr.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Dr,"__esModule",{value:!0});var um=am($n()),kr=um.default("https-proxy-agent:parse-proxy-response");function cm(t){return new Promise((e,r)=>{let n=0,i=[];function o(){let d=t.read();d?l(d):t.once("readable",o)}function s(){t.removeListener("end",u),t.removeListener("error",c),t.removeListener("close",a),t.removeListener("readable",o)}function a(d){kr("onclose had error %o",d)}function u(){kr("onend")}function c(d){s(),kr("onerror %o",d),r(d)}function l(d){i.push(d),n+=d.length;let h=Buffer.concat(i,n);if(h.indexOf(`\r
22
+ `+o),t.push(i+"m+"+bn.exports.humanize(this.diff)+"\x1B[0m")}else t[0]=gv()+e+" "+t[0]}function gv(){return oe.inspectOpts.hideDate?"":new Date().toISOString()+" "}function mv(...t){return process.stderr.write(yn.format(...t)+`
23
+ `)}function yv(t){t?process.env.DEBUG=t:delete process.env.DEBUG}function bv(){return process.env.DEBUG}function Sv(t){t.inspectOpts={};let e=Object.keys(oe.inspectOpts);for(let r=0;r<e.length;r++)t.inspectOpts[e[r]]=oe.inspectOpts[e[r]]}bn.exports=vo()(oe);var{formatters:gc}=bn.exports;gc.o=function(t){return this.inspectOpts.colors=this.useColors,yn.inspect(t,this.inspectOpts).split(`
24
+ `).map(e=>e.trim()).join(" ")};gc.O=function(t){return this.inspectOpts.colors=this.useColors,yn.inspect(t,this.inspectOpts)}});var Sn=b((HS,yo)=>{typeof process=="undefined"||process.type==="renderer"||process.browser===!0||process.__nwjs?yo.exports=lc():yo.exports=mc()});var yc=b(bo=>{"use strict";Object.defineProperty(bo,"__esModule",{value:!0});function Ev(t){return function(e,r){return new Promise((n,i)=>{t.call(this,e,r,(o,a)=>{o?i(o):n(a)})})}}bo.default=Ev});var Ec=b((Eo,Sc)=>{"use strict";var bc=Eo&&Eo.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},Tv=require("events"),Ov=bc(Sn()),wv=bc(yc()),pr=Ov.default("agent-base");function xv(t){return Boolean(t)&&typeof t.addRequest=="function"}function So(){let{stack:t}=new Error;return typeof t!="string"?!1:t.split(`
25
+ `).some(e=>e.indexOf("(https.js:")!==-1||e.indexOf("node:https:")!==-1)}function En(t,e){return new En.Agent(t,e)}(function(t){class e extends Tv.EventEmitter{constructor(n,i){super();let o=i;typeof n=="function"?this.callback=n:n&&(o=n),this.timeout=null,o&&typeof o.timeout=="number"&&(this.timeout=o.timeout),this.maxFreeSockets=1,this.maxSockets=1,this.maxTotalSockets=1/0,this.sockets={},this.freeSockets={},this.requests={},this.options={}}get defaultPort(){return typeof this.explicitDefaultPort=="number"?this.explicitDefaultPort:So()?443:80}set defaultPort(n){this.explicitDefaultPort=n}get protocol(){return typeof this.explicitProtocol=="string"?this.explicitProtocol:So()?"https:":"http:"}set protocol(n){this.explicitProtocol=n}callback(n,i,o){throw new Error('"agent-base" has no default implementation, you must subclass and override `callback()`')}addRequest(n,i){let o=Object.assign({},i);typeof o.secureEndpoint!="boolean"&&(o.secureEndpoint=So()),o.host==null&&(o.host="localhost"),o.port==null&&(o.port=o.secureEndpoint?443:80),o.protocol==null&&(o.protocol=o.secureEndpoint?"https:":"http:"),o.host&&o.path&&delete o.path,delete o.agent,delete o.hostname,delete o._defaultAgent,delete o.defaultPort,delete o.createConnection,n._last=!0,n.shouldKeepAlive=!1;let a=!1,s=null,u=o.timeout||this.timeout,c=y=>{n._hadError||(n.emit("error",y),n._hadError=!0)},l=()=>{s=null,a=!0;let y=new Error(`A "socket" was not created for HTTP request before ${u}ms`);y.code="ETIMEOUT",c(y)},d=y=>{a||(s!==null&&(clearTimeout(s),s=null),c(y))},h=y=>{if(a)return;if(s!=null&&(clearTimeout(s),s=null),xv(y)){pr("Callback returned another Agent instance %o",y.constructor.name),y.addRequest(n,o);return}if(y){y.once("free",()=>{this.freeSocket(y,o)}),n.onSocket(y);return}let S=new Error(`no Duplex stream was returned to agent-base for \`${n.method} ${n.path}\``);c(S)};if(typeof this.callback!="function"){c(new Error("`callback` is not defined"));return}this.promisifiedCallback||(this.callback.length>=3?(pr("Converting legacy callback function to promise"),this.promisifiedCallback=wv.default(this.callback)):this.promisifiedCallback=this.callback),typeof u=="number"&&u>0&&(s=setTimeout(l,u)),"port"in o&&typeof o.port!="number"&&(o.port=Number(o.port));try{pr("Resolving socket for %o request: %o",o.protocol,`${n.method} ${n.path}`),Promise.resolve(this.promisifiedCallback(n,o)).then(h,d)}catch(y){Promise.reject(y).catch(d)}}freeSocket(n,i){pr("Freeing socket %o %o",n.constructor.name,i),n.destroy()}destroy(){pr("Destroying agent %o",this.constructor.name)}}t.Agent=e,t.prototype=t.Agent.prototype})(En||(En={}));Sc.exports=En});var Tc=b(_r=>{"use strict";var Iv=_r&&_r.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(_r,"__esModule",{value:!0});var Cv=Iv(Sn()),hr=Cv.default("https-proxy-agent:parse-proxy-response");function Rv(t){return new Promise((e,r)=>{let n=0,i=[];function o(){let d=t.read();d?l(d):t.once("readable",o)}function a(){t.removeListener("end",u),t.removeListener("error",c),t.removeListener("close",s),t.removeListener("readable",o)}function s(d){hr("onclose had error %o",d)}function u(){hr("onend")}function c(d){a(),hr("onerror %o",d),r(d)}function l(d){i.push(d),n+=d.length;let h=Buffer.concat(i,n);if(h.indexOf(`\r
26
26
  \r
27
- `)===-1){kr("have not received end of HTTP headers yet..."),o();return}let S=h.toString("ascii",0,h.indexOf(`\r
28
- `)),T=+S.split(" ")[1];kr("got proxy server response: %o",S),e({statusCode:T,buffered:h})}t.on("error",c),t.on("close",a),t.on("end",u),o()})}Dr.default=cm});var xl=b(kt=>{"use strict";var lm=kt&&kt.__awaiter||function(t,e,r,n){function i(o){return o instanceof r?o:new r(function(s){s(o)})}return new(r||(r=Promise))(function(o,s){function a(l){try{c(n.next(l))}catch(d){s(d)}}function u(l){try{c(n.throw(l))}catch(d){s(d)}}function c(l){l.done?o(l.value):i(l.value).then(a,u)}c((n=n.apply(t,e||[])).next())})},ur=kt&&kt.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(kt,"__esModule",{value:!0});var wl=ur(require("net")),Ol=ur(require("tls")),fm=ur(require("url")),dm=ur(require("assert")),pm=ur($n()),hm=El(),vm=ur(Tl()),Lr=pm.default("https-proxy-agent:agent"),Cl=class extends hm.Agent{constructor(e){let r;if(typeof e=="string"?r=fm.default.parse(e):r=e,!r)throw new Error("an HTTP(S) proxy server `host` and `port` must be specified!");Lr("creating new HttpsProxyAgent instance: %o",r);super(r);let n=Object.assign({},r);this.secureProxy=r.secureProxy||mm(n.protocol),n.host=n.hostname||n.host,typeof n.port=="string"&&(n.port=parseInt(n.port,10)),!n.port&&n.host&&(n.port=this.secureProxy?443:80),this.secureProxy&&!("ALPNProtocols"in n)&&(n.ALPNProtocols=["http 1.1"]),n.host&&n.path&&(delete n.path,delete n.pathname),this.proxy=n}callback(e,r){return lm(this,void 0,void 0,function*(){let{proxy:n,secureProxy:i}=this,o;i?(Lr("Creating `tls.Socket`: %o",n),o=Ol.default.connect(n)):(Lr("Creating `net.Socket`: %o",n),o=wl.default.connect(n));let s=Object.assign({},n.headers),u=`CONNECT ${`${r.host}:${r.port}`} HTTP/1.1\r
29
- `;n.auth&&(s["Proxy-Authorization"]=`Basic ${Buffer.from(n.auth).toString("base64")}`);let{host:c,port:l,secureEndpoint:d}=r;gm(l,d)||(c+=`:${l}`),s.Host=c,s.Connection="close";for(let R of Object.keys(s))u+=`${R}: ${s[R]}\r
30
- `;let h=vm.default(o);o.write(`${u}\r
31
- `);let{statusCode:_,buffered:S}=yield h;if(_===200){if(e.once("socket",_m),r.secureEndpoint){let R=r.servername||r.host;if(!R)throw new Error('Could not determine "servername"');return Lr("Upgrading socket connection to TLS"),Ol.default.connect(Object.assign(Object.assign({},ym(r,"host","hostname","path","port")),{socket:o,servername:R}))}return o}o.destroy();let T=new wl.default.Socket;return T.readable=!0,e.once("socket",R=>{Lr("replaying proxy buffer for failed request"),dm.default(R.listenerCount("data")>0),R.push(S),R.push(null)}),T})}};kt.default=Cl;function _m(t){t.resume()}function gm(t,e){return Boolean(!e&&t===80||e&&t===443)}function mm(t){return typeof t=="string"?/^https:?$/i.test(t):!1}function ym(t,...e){let r={},n;for(n in t)e.includes(n)||(r[n]=t[n]);return r}});var is=b((ns,Rl)=>{"use strict";var bm=ns&&ns.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},ts=bm(xl());function rs(t){return new ts.default(t)}(function(t){t.HttpsProxyAgent=ts.default,t.prototype=ts.default.prototype})(rs||(rs={}));Rl.exports=rs});var Ml=b(os=>{Object.defineProperty(os,"__esModule",{value:!0});var Sm=q(),Il=ae(),Al=require("http"),Em=Bn(),Tm=function(t){Sm.__extends(e,t);function e(r){var n=t.call(this,r)||this;n.options=r;var i=n._getProxy("http");return n.module=Al,n.client=i?new(is())(i):new Al.Agent({keepAlive:!1,maxSockets:30,timeout:2e3}),n}return e.prototype.sendEvent=function(r){return this._send(Il.eventToSentryRequest(r,this._api),r)},e.prototype.sendSession=function(r){return this._send(Il.sessionToSentryRequest(r,this._api),r)},e}(Em.BaseTransport);os.HTTPTransport=Tm});var ql=b(ss=>{Object.defineProperty(ss,"__esModule",{value:!0});var wm=q(),Pl=ae(),Nl=require("https"),Om=Bn(),Cm=function(t){wm.__extends(e,t);function e(r){var n=t.call(this,r)||this;n.options=r;var i=n._getProxy("https");return n.module=Nl,n.client=i?new(is())(i):new Nl.Agent({keepAlive:!1,maxSockets:30,timeout:2e3}),n}return e.prototype.sendEvent=function(r){return this._send(Pl.eventToSentryRequest(r,this._api),r)},e.prototype.sendSession=function(r){return this._send(Pl.sessionToSentryRequest(r,this._api),r)},e}(Om.BaseTransport);ss.HTTPSTransport=Cm});var as=b(Fr=>{Object.defineProperty(Fr,"__esModule",{value:!0});var xm=Bn();Fr.BaseTransport=xm.BaseTransport;var Rm=Ml();Fr.HTTPTransport=Rm.HTTPTransport;var Im=ql();Fr.HTTPSTransport=Im.HTTPSTransport});var cs=b(us=>{Object.defineProperty(us,"__esModule",{value:!0});var gt=q(),kl=ae(),Am=se(),nt=N(),Kn=Go(),Dl=as(),Mm=function(t){gt.__extends(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.eventFromException=function(r,n){var i=this,o=r,s=n&&n.data&&n.data.mechanism,a=s||{handled:!0,type:"generic"};if(!nt.isError(r)){if(nt.isPlainObject(r)){var u="Non-Error exception captured with keys: "+nt.extractExceptionKeysForMessage(r);kl.getCurrentHub().configureScope(function(c){c.setExtra("__serialized__",nt.normalizeToSize(r))}),o=n&&n.syntheticException||new Error(u),o.message=u}else o=n&&n.syntheticException||new Error(r),o.message=r;a.synthetic=!0}return new nt.SyncPromise(function(c,l){return Kn.parseError(o,i._options).then(function(d){nt.addExceptionTypeValue(d,void 0,void 0),nt.addExceptionMechanism(d,a),c(gt.__assign(gt.__assign({},d),{event_id:n&&n.event_id}))}).then(null,l)})},e.prototype.eventFromMessage=function(r,n,i){var o=this;n===void 0&&(n=Am.Severity.Info);var s={event_id:i&&i.event_id,level:n,message:r};return new nt.SyncPromise(function(a){if(o._options.attachStacktrace&&i&&i.syntheticException){var u=i.syntheticException?Kn.extractStackFromError(i.syntheticException):[];Kn.parseStack(u,o._options).then(function(c){s.stacktrace={frames:Kn.prepareFramesForEvent(c)},a(s)}).then(null,function(){a(s)})}else a(s)})},e.prototype._setupTransport=function(){if(!this._options.dsn)return t.prototype._setupTransport.call(this);var r=new nt.Dsn(this._options.dsn),n=gt.__assign(gt.__assign(gt.__assign(gt.__assign(gt.__assign({},this._options.transportOptions),this._options.httpProxy&&{httpProxy:this._options.httpProxy}),this._options.httpsProxy&&{httpsProxy:this._options.httpsProxy}),this._options.caCerts&&{caCerts:this._options.caCerts}),{dsn:this._options.dsn,tunnel:this._options.tunnel,_metadata:this._options._metadata});return this._options.transport?new this._options.transport(n):r.protocol==="http"?new Dl.HTTPTransport(n):new Dl.HTTPSTransport(n)},e}(kl.BaseBackend);us.NodeBackend=Mm});var ds=b(fs=>{Object.defineProperty(fs,"__esModule",{value:!0});var Pm=q(),ls=ae(),Nm=Ee(),Jn=se(),Ll=N(),qm=cs(),km=function(t){Pm.__extends(e,t);function e(r){var n=this;return r._metadata=r._metadata||{},r._metadata.sdk=r._metadata.sdk||{name:"sentry.javascript.node",packages:[{name:"npm:@sentry/node",version:ls.SDK_VERSION}],version:ls.SDK_VERSION},n=t.call(this,qm.NodeBackend,r)||this,n}return e.prototype.captureException=function(r,n,i){if(this._options.autoSessionTracking&&this._sessionFlusher&&i){var o=i.getRequestSession();o&&o.status===Jn.RequestSessionStatus.Ok&&(o.status=Jn.RequestSessionStatus.Errored)}return t.prototype.captureException.call(this,r,n,i)},e.prototype.captureEvent=function(r,n,i){if(this._options.autoSessionTracking&&this._sessionFlusher&&i){var o=r.type||"exception",s=o==="exception"&&r.exception&&r.exception.values&&r.exception.values.length>0;if(s){var a=i.getRequestSession();a&&a.status===Jn.RequestSessionStatus.Ok&&(a.status=Jn.RequestSessionStatus.Errored)}}return t.prototype.captureEvent.call(this,r,n,i)},e.prototype.close=function(r){var n;return(n=this._sessionFlusher)===null||n===void 0||n.close(),t.prototype.close.call(this,r)},e.prototype.initSessionFlusher=function(){var r=this._options,n=r.release,i=r.environment;n?this._sessionFlusher=new Nm.SessionFlusher(this.getTransport(),{release:n,environment:i}):Ll.logger.warn("Cannot initialise an instance of SessionFlusher if no release is provided!")},e.prototype._prepareEvent=function(r,n,i){return r.platform=r.platform||"node",this.getOptions().serverName&&(r.server_name=this.getOptions().serverName),t.prototype._prepareEvent.call(this,r,n,i)},e.prototype._captureRequestSession=function(){this._sessionFlusher?this._sessionFlusher.incrementSessionStatusCount():Ll.logger.warn("Discarded request mode session because autoSessionTracking option was disabled")},e}(ls.BaseClient);fs.NodeClient=km});var Hl=b(ps=>{Object.defineProperty(ps,"__esModule",{value:!0});var Fl=q(),jl=ae(),jr=se(),Dm=N(),Lm=require("util"),Ul=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(){var e,r;try{for(var n=Fl.__values(["debug","info","warn","error","log"]),i=n.next();!i.done;i=n.next()){var o=i.value;Dm.fill(console,o,Fm(o))}}catch(s){e={error:s}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}},t.id="Console",t}();ps.Console=Ul;function Fm(t){return function(r){var n;switch(t){case"debug":n=jr.Severity.Debug;break;case"error":n=jr.Severity.Error;break;case"info":n=jr.Severity.Info;break;case"warn":n=jr.Severity.Warning;break;default:n=jr.Severity.Log}return function(){jl.getCurrentHub().getIntegration(Ul)&&jl.getCurrentHub().addBreadcrumb({category:"console",level:n,message:Lm.format.apply(void 0,arguments)},{input:Fl.__spread(arguments),level:t}),r.apply(this,arguments)}}}});var Vl=b(Dt=>{Object.defineProperty(Dt,"__esModule",{value:!0});var hs=q(),jm=ae(),Um=N(),Bl=require("url"),Gl=Um.parseSemver(process.versions.node);function Hm(t){var e,r=(e=jm.getCurrentHub().getClient())===null||e===void 0?void 0:e.getDsn();return r?t.includes(r.host):!1}Dt.isSentryRequest=Hm;function zl(t){var e=t.protocol||"",r=t.hostname||t.host||"",n=!t.port||t.port===80||t.port===443?"":":"+t.port,i=t.path?t.path:"/";return e+"//"+r+n+i}Dt.extractUrl=zl;function Bm(t,e,r){var n,i,o;if(!t)return t;var s=hs.__read(t.split(" "),2),a=s[0],u=s[1];return e.host&&!e.protocol&&(e.protocol=(i=(n=r)===null||n===void 0?void 0:n.agent)===null||i===void 0?void 0:i.protocol,u=zl(e)),((o=u)===null||o===void 0?void 0:o.startsWith("///"))&&(u=u.slice(2)),a+" "+u}Dt.cleanSpanDescription=Bm;function vs(t){var e={protocol:t.protocol,hostname:typeof t.hostname=="string"&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,hash:t.hash,search:t.search,pathname:t.pathname,path:""+(t.pathname||"")+(t.search||""),href:t.href};return t.port!==""&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=t.username+":"+t.password),e}Dt.urlToOptions=vs;function Gm(t,e){var r,n,i,o,s,a,u,c,l,d;return typeof e[e.length-1]=="function"&&(l=e.pop()),typeof e[0]=="string"?d=vs(new Bl.URL(e[0])):e[0]instanceof Bl.URL?d=vs(e[0]):d=e[0],e.length===2&&(d=hs.__assign(hs.__assign({},d),e[1])),d.protocol===void 0&&(Gl.major&&Gl.major>8?d.protocol=((n=(r=t)===null||r===void 0?void 0:r.globalAgent)===null||n===void 0?void 0:n.protocol)||((i=d.agent)===null||i===void 0?void 0:i.protocol)||((o=d._defaultAgent)===null||o===void 0?void 0:o.protocol):d.protocol=((s=d.agent)===null||s===void 0?void 0:s.protocol)||((a=d._defaultAgent)===null||a===void 0?void 0:a.protocol)||((c=(u=t)===null||u===void 0?void 0:u.globalAgent)===null||c===void 0?void 0:c.protocol)),l?[d,l]:[d]}Dt.normalizeRequestArgs=Gm});var Jl=b(gs=>{Object.defineProperty(gs,"__esModule",{value:!0});var Wl=q(),_s=ae(),cr=N(),Ur=Vl(),$l=cr.parseSemver(process.versions.node),Yl=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._breadcrumbs=typeof e.breadcrumbs=="undefined"?!0:e.breadcrumbs,this._tracing=typeof e.tracing=="undefined"?!1:e.tracing}return t.prototype.setupOnce=function(){if(!(!this._breadcrumbs&&!this._tracing)){var e=zm(this._breadcrumbs,this._tracing),r=require("http");if(cr.fill(r,"get",e),cr.fill(r,"request",e),$l.major&&$l.major>8){var n=require("https");cr.fill(n,"get",e),cr.fill(n,"request",e)}}},t.id="Http",t}();gs.Http=Yl;function zm(t,e){return function(n){return function(){for(var o=[],s=0;s<arguments.length;s++)o[s]=arguments[s];var a=this,u=Ur.normalizeRequestArgs(this,o),c=u[0],l=Ur.extractUrl(c);if(Ur.isSentryRequest(l))return n.apply(a,u);var d,h,_=_s.getCurrentHub().getScope();if(_&&e&&(h=_.getSpan(),h)){d=h.startChild({description:(c.method||"GET")+" "+l,op:"http.client"});var S=d.toTraceparent();cr.logger.log("[Tracing] Adding sentry-trace header "+S+" to outgoing request to "+l+": "),c.headers=Wl.__assign(Wl.__assign({},c.headers),{"sentry-trace":S})}return n.apply(a,u).once("response",function(T){var R=this;t&&Kl("response",l,R,T),e&&d&&(T.statusCode&&d.setHttpStatus(T.statusCode),d.description=Ur.cleanSpanDescription(d.description,c,R),d.finish())}).once("error",function(){var T=this;t&&Kl("error",l,T),e&&d&&(d.setHttpStatus(500),d.description=Ur.cleanSpanDescription(d.description,c,T),d.finish())})}}}function Kl(t,e,r,n){!_s.getCurrentHub().getIntegration(Yl)||_s.getCurrentHub().addBreadcrumb({category:"http",data:{method:r.method,status_code:n&&n.statusCode,url:e},type:"http"},{event:t,request:r,response:n})}});var bs=b(ys=>{Object.defineProperty(ys,"__esModule",{value:!0});var Vm=ae(),ms=N(),Wm=2e3;function $m(t){console.error(t&&t.stack?t.stack:t);var e=Vm.getCurrentHub().getClient();if(e===void 0){ms.logger.warn("No NodeClient was defined, we are exiting the process now."),global.process.exit(1);return}var r=e.getOptions(),n=r&&r.shutdownTimeout&&r.shutdownTimeout>0&&r.shutdownTimeout||Wm;ms.forget(e.close(n).then(function(i){i||ms.logger.warn("We reached the timeout for emptying the request buffer, still exiting now!"),global.process.exit(1)}))}ys.logAndExitProcess=$m});var Zl=b(Ss=>{Object.defineProperty(Ss,"__esModule",{value:!0});var Xl=ae(),Ym=se(),Km=N(),Ql=bs(),Jm=function(){function t(e){e===void 0&&(e={}),this._options=e,this.name=t.id,this.handler=this._makeErrorHandler()}return t.prototype.setupOnce=function(){global.process.on("uncaughtException",this.handler.bind(this))},t.prototype._makeErrorHandler=function(){var e=this,r=2e3,n=!1,i=!1,o=!1,s;return function(a){var u=Ql.logAndExitProcess,c=Xl.getCurrentHub().getClient();if(e._options.onFatalError?u=e._options.onFatalError:c&&c.getOptions().onFatalError&&(u=c.getOptions().onFatalError),n)o?(Km.logger.warn("uncaught exception after calling fatal error shutdown callback - this is bad! forcing shutdown"),Ql.logAndExitProcess(a)):i||(i=!0,setTimeout(function(){o||(o=!0,u(s,a))},r));else{var l=Xl.getCurrentHub();s=a,n=!0,l.getIntegration(t)?l.withScope(function(d){d.setLevel(Ym.Severity.Fatal),l.captureException(a,{originalException:a,data:{mechanism:{handled:!1,type:"onuncaughtexception"}}}),o||(o=!0,u(a))}):o||(o=!0,u(a))}}},t.id="OnUncaughtException",t}();Ss.OnUncaughtException=Jm});var tf=b(Es=>{Object.defineProperty(Es,"__esModule",{value:!0});var Xm=ae(),ef=N(),Qm=bs(),Zm=function(){function t(e){e===void 0&&(e={mode:"warn"}),this._options=e,this.name=t.id}return t.prototype.setupOnce=function(){global.process.on("unhandledRejection",this.sendUnhandledPromise.bind(this))},t.prototype.sendUnhandledPromise=function(e,r){var n=Xm.getCurrentHub();if(!n.getIntegration(t)){this._handleRejection(e);return}var i=r.domain&&r.domain.sentryContext||{};n.withScope(function(o){o.setExtra("unhandledPromiseRejection",!0),i.user&&o.setUser(i.user),i.tags&&o.setTags(i.tags),i.extra&&o.setExtras(i.extra),n.captureException(e,{originalException:r,data:{mechanism:{handled:!1,type:"onunhandledrejection"}}})}),this._handleRejection(e)},t.prototype._handleRejection=function(e){var r="This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason:";this._options.mode==="warn"?ef.consoleSandbox(function(){console.warn(r),console.error(e&&e.stack?e.stack:e)}):this._options.mode==="strict"&&(ef.consoleSandbox(function(){console.warn(r)}),Qm.logAndExitProcess(e))},t.id="OnUnhandledRejection",t}();Es.OnUnhandledRejection=Zm});var of=b(Ts=>{Object.defineProperty(Ts,"__esModule",{value:!0});var rf=q(),nf=ae(),lr=N(),ey=Go(),ty="cause",ry=5,ny=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._key=e.key||ty,this._limit=e.limit||ry}return t.prototype.setupOnce=function(){nf.addGlobalEventProcessor(function(e,r){var n=nf.getCurrentHub().getIntegration(t);if(n){var i=n._handler&&n._handler.bind(n);return typeof i=="function"?i(e,r):e}return e})},t.prototype._handler=function(e,r){var n=this;return!e.exception||!e.exception.values||!r||!lr.isInstanceOf(r.originalException,Error)?lr.SyncPromise.resolve(e):new lr.SyncPromise(function(i){n._walkErrorTree(r.originalException,n._key).then(function(o){e&&e.exception&&e.exception.values&&(e.exception.values=rf.__spread(o,e.exception.values)),i(e)}).then(null,function(){i(e)})})},t.prototype._walkErrorTree=function(e,r,n){var i=this;return n===void 0&&(n=[]),!lr.isInstanceOf(e[r],Error)||n.length+1>=this._limit?lr.SyncPromise.resolve(n):new lr.SyncPromise(function(o,s){ey.getExceptionFromError(e[r]).then(function(a){i._walkErrorTree(e[r],r,rf.__spread([a],n)).then(o).then(null,function(){s()})}).then(null,function(){s()})})},t.id="LinkedErrors",t}();Ts.LinkedErrors=ny});var cf=b(Os=>{Object.defineProperty(Os,"__esModule",{value:!0});var sf=q(),af=require("fs"),uf=require("path"),ws;function iy(){try{return require.cache?Object.keys(require.cache):[]}catch{return[]}}function oy(){var t=require.main&&require.main.paths||[],e=iy(),r={},n={};return e.forEach(function(i){var o=i,s=function(){var a=o;if(o=uf.dirname(a),!(!o||a===o||n[a])){if(t.indexOf(o)<0)return s();var u=uf.join(a,"package.json");if(n[a]=!0,!af.existsSync(u))return s();try{var c=JSON.parse(af.readFileSync(u,"utf8"));r[c.name]=c.version}catch{}}};s()}),r}var sy=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(e,r){var n=this;e(function(i){return r().getIntegration(t)?sf.__assign(sf.__assign({},i),{modules:n._getModules()}):i})},t.prototype._getModules=function(){return ws||(ws=oy()),ws},t.id="Modules",t}();Os.Modules=sy});var Cs=b(mt=>{Object.defineProperty(mt,"__esModule",{value:!0});var ay=Hl();mt.Console=ay.Console;var uy=Jl();mt.Http=uy.Http;var cy=Zl();mt.OnUncaughtException=cy.OnUncaughtException;var ly=tf();mt.OnUnhandledRejection=ly.OnUnhandledRejection;var fy=of();mt.LinkedErrors=fy.LinkedErrors;var dy=cf();mt.Modules=dy.Modules});var Rs=b(Ve=>{Object.defineProperty(Ve,"__esModule",{value:!0});var Hr=q(),yt=ae(),lf=Ee(),ff=se(),xs=N(),py=require("domain"),hy=ds(),Br=Cs();Ve.defaultIntegrations=[new yt.Integrations.InboundFilters,new yt.Integrations.FunctionToString,new Br.Console,new Br.Http,new Br.OnUncaughtException,new Br.OnUnhandledRejection,new Br.LinkedErrors];function vy(t){t===void 0&&(t={});var e,r=lf.getMainCarrier(),n=((e=r.__SENTRY__)===null||e===void 0?void 0:e.integrations)||[];if(t.defaultIntegrations=t.defaultIntegrations===!1?[]:Hr.__spread(Array.isArray(t.defaultIntegrations)?t.defaultIntegrations:Ve.defaultIntegrations,n),t.dsn===void 0&&process.env.SENTRY_DSN&&(t.dsn=process.env.SENTRY_DSN),t.tracesSampleRate===void 0&&process.env.SENTRY_TRACES_SAMPLE_RATE){var i=parseFloat(process.env.SENTRY_TRACES_SAMPLE_RATE);isFinite(i)&&(t.tracesSampleRate=i)}if(t.release===void 0){var o=df();o!==void 0?t.release=o:t.autoSessionTracking=!1}t.environment===void 0&&process.env.SENTRY_ENVIRONMENT&&(t.environment=process.env.SENTRY_ENVIRONMENT),t.autoSessionTracking===void 0&&t.dsn!==void 0&&(t.autoSessionTracking=!0),py.active&&lf.setHubOnCarrier(r,yt.getCurrentHub()),yt.initAndBind(hy.NodeClient,t),t.autoSessionTracking&&by()}Ve.init=vy;function _y(){return yt.getCurrentHub().lastEventId()}Ve.lastEventId=_y;function gy(t){return Hr.__awaiter(this,void 0,void 0,function(){var e;return Hr.__generator(this,function(r){return e=yt.getCurrentHub().getClient(),e?[2,e.flush(t)]:(xs.logger.warn("Cannot flush events. No client defined."),[2,Promise.resolve(!1)])})})}Ve.flush=gy;function my(t){return Hr.__awaiter(this,void 0,void 0,function(){var e;return Hr.__generator(this,function(r){return e=yt.getCurrentHub().getClient(),e?[2,e.close(t)]:(xs.logger.warn("Cannot flush events and disable SDK. No client defined."),[2,Promise.resolve(!1)])})})}Ve.close=my;function yy(t){if(t===void 0)return!1;var e=t&&t.getOptions();return e&&e.autoSessionTracking!==void 0?e.autoSessionTracking:!1}Ve.isAutoSessionTrackingEnabled=yy;function df(t){if(process.env.SENTRY_RELEASE)return process.env.SENTRY_RELEASE;var e=xs.getGlobalObject();return e.SENTRY_RELEASE&&e.SENTRY_RELEASE.id?e.SENTRY_RELEASE.id:process.env.GITHUB_SHA||process.env.COMMIT_REF||process.env.VERCEL_GIT_COMMIT_SHA||process.env.VERCEL_GITHUB_COMMIT_SHA||process.env.VERCEL_GITLAB_COMMIT_SHA||process.env.VERCEL_BITBUCKET_COMMIT_SHA||process.env.ZEIT_GITHUB_COMMIT_SHA||process.env.ZEIT_GITLAB_COMMIT_SHA||process.env.ZEIT_BITBUCKET_COMMIT_SHA||t}Ve.getSentryRelease=df;function by(){var t=yt.getCurrentHub();t.startSession(),process.on("beforeExit",function(){var e,r=(e=t.getScope())===null||e===void 0?void 0:e.getSession(),n=[ff.SessionStatus.Exited,ff.SessionStatus.Crashed];r&&!n.includes(r.status)&&t.endSession()})}});var hf=b(As=>{Object.defineProperty(As,"__esModule",{value:!0});var pf=q(),Xn=require("fs"),Is=require("path");function Sy(t){var e=Is.resolve(t);if(!Xn.existsSync(e))throw new Error("Cannot read contents of "+e+". Directory does not exist.");if(!Xn.statSync(e).isDirectory())throw new Error("Cannot read contents of "+e+", because it is not a directory.");var r=function(n){return Xn.readdirSync(n).reduce(function(i,o){var s=Is.join(n,o);return Xn.statSync(s).isDirectory()?pf.__spread(i,r(s)):pf.__spread(i,[s])},[])};return r(e).map(function(n){return Is.relative(e,n)})}As.deepReadDirSync=Sy});var bt=b(fr=>{Object.defineProperty(fr,"__esModule",{value:!0});var vf;(function(t){t.Ok="ok",t.DeadlineExceeded="deadline_exceeded",t.Unauthenticated="unauthenticated",t.PermissionDenied="permission_denied",t.NotFound="not_found",t.ResourceExhausted="resource_exhausted",t.InvalidArgument="invalid_argument",t.Unimplemented="unimplemented",t.Unavailable="unavailable",t.InternalError="internal_error",t.UnknownError="unknown_error",t.Cancelled="cancelled",t.AlreadyExists="already_exists",t.FailedPrecondition="failed_precondition",t.Aborted="aborted",t.OutOfRange="out_of_range",t.DataLoss="data_loss"})(vf=fr.SpanStatus||(fr.SpanStatus={}));(function(t){function e(r){if(r<400&&r>=100)return t.Ok;if(r>=400&&r<500)switch(r){case 401:return t.Unauthenticated;case 403:return t.PermissionDenied;case 404:return t.NotFound;case 409:return t.AlreadyExists;case 413:return t.FailedPrecondition;case 429:return t.ResourceExhausted;default:return t.InvalidArgument}if(r>=500&&r<600)switch(r){case 501:return t.Unimplemented;case 503:return t.Unavailable;case 504:return t.DeadlineExceeded;default:return t.InternalError}return t.UnknownError}t.fromHttpCode=e})(vf=fr.SpanStatus||(fr.SpanStatus={}))});var St=b(We=>{Object.defineProperty(We,"__esModule",{value:!0});var _f=Ee();We.TRACEPARENT_REGEXP=new RegExp("^[ \\t]*([0-9a-f]{32})?-?([0-9a-f]{16})?-?([01])?[ \\t]*$");function Ey(t){t===void 0&&(t=(e=_f.getCurrentHub().getClient())===null||e===void 0?void 0:e.getOptions());var e;return!!t&&("tracesSampleRate"in t||"tracesSampler"in t)}We.hasTracingEnabled=Ey;function Ty(t){var e=t.match(We.TRACEPARENT_REGEXP);if(e){var r=void 0;return e[3]==="1"?r=!0:e[3]==="0"&&(r=!1),{traceId:e[1],parentSampled:r,parentSpanId:e[2]}}}We.extractTraceparentData=Ty;function wy(t){t===void 0&&(t=_f.getCurrentHub());var e,r;return(r=(e=t)===null||e===void 0?void 0:e.getScope())===null||r===void 0?void 0:r.getTransaction()}We.getActiveTransaction=wy;function Oy(t){return t/1e3}We.msToSec=Oy;function Cy(t){return t*1e3}We.secToMs=Cy;var xy=N();We.stripUrlQueryAndFragment=xy.stripUrlQueryAndFragment});var yf=b(Ps=>{Object.defineProperty(Ps,"__esModule",{value:!0});var Ms=N(),gf=bt(),Ry=St();function Iy(){Ms.addInstrumentationHandler({callback:mf,type:"error"}),Ms.addInstrumentationHandler({callback:mf,type:"unhandledrejection"})}Ps.registerErrorInstrumentation=Iy;function mf(){var t=Ry.getActiveTransaction();t&&(Ms.logger.log("[Tracing] Transaction: "+gf.SpanStatus.InternalError+" -> Global error occured"),t.setStatus(gf.SpanStatus.InternalError))}});var Ns=b(Qn=>{Object.defineProperty(Qn,"__esModule",{value:!0});Qn.FINISH_REASON_TAG="finishReason";Qn.IDLE_TRANSACTION_FINISH_REASONS=["heartbeatFailed","idleTimeout","documentHidden"]});var ei=b(Zn=>{Object.defineProperty(Zn,"__esModule",{value:!0});var dr=q(),Lt=N(),qs=bt(),Ay=function(){function t(e){e===void 0&&(e=1e3),this.spans=[],this._maxlen=e}return t.prototype.add=function(e){this.spans.length>this._maxlen?e.spanRecorder=void 0:this.spans.push(e)},t}();Zn.SpanRecorder=Ay;var My=function(){function t(e){if(this.traceId=Lt.uuid4(),this.spanId=Lt.uuid4().substring(16),this.startTimestamp=Lt.timestampWithMs(),this.tags={},this.data={},!e)return this;e.traceId&&(this.traceId=e.traceId),e.spanId&&(this.spanId=e.spanId),e.parentSpanId&&(this.parentSpanId=e.parentSpanId),"sampled"in e&&(this.sampled=e.sampled),e.op&&(this.op=e.op),e.description&&(this.description=e.description),e.data&&(this.data=e.data),e.tags&&(this.tags=e.tags),e.status&&(this.status=e.status),e.startTimestamp&&(this.startTimestamp=e.startTimestamp),e.endTimestamp&&(this.endTimestamp=e.endTimestamp)}return t.prototype.child=function(e){return this.startChild(e)},t.prototype.startChild=function(e){var r=new t(dr.__assign(dr.__assign({},e),{parentSpanId:this.spanId,sampled:this.sampled,traceId:this.traceId}));return r.spanRecorder=this.spanRecorder,r.spanRecorder&&r.spanRecorder.add(r),r.transaction=this.transaction,r},t.prototype.setTag=function(e,r){var n;return this.tags=dr.__assign(dr.__assign({},this.tags),(n={},n[e]=r,n)),this},t.prototype.setData=function(e,r){var n;return this.data=dr.__assign(dr.__assign({},this.data),(n={},n[e]=r,n)),this},t.prototype.setStatus=function(e){return this.status=e,this},t.prototype.setHttpStatus=function(e){this.setTag("http.status_code",String(e));var r=qs.SpanStatus.fromHttpCode(e);return r!==qs.SpanStatus.UnknownError&&this.setStatus(r),this},t.prototype.isSuccess=function(){return this.status===qs.SpanStatus.Ok},t.prototype.finish=function(e){this.endTimestamp=typeof e=="number"?e:Lt.timestampWithMs()},t.prototype.toTraceparent=function(){var e="";return this.sampled!==void 0&&(e=this.sampled?"-1":"-0"),this.traceId+"-"+this.spanId+e},t.prototype.toContext=function(){return Lt.dropUndefinedKeys({data:this.data,description:this.description,endTimestamp:this.endTimestamp,op:this.op,parentSpanId:this.parentSpanId,sampled:this.sampled,spanId:this.spanId,startTimestamp:this.startTimestamp,status:this.status,tags:this.tags,traceId:this.traceId})},t.prototype.updateWithContext=function(e){var r,n,i,o,s;return this.data=(r=e.data,r??{}),this.description=e.description,this.endTimestamp=e.endTimestamp,this.op=e.op,this.parentSpanId=e.parentSpanId,this.sampled=e.sampled,this.spanId=(n=e.spanId,n??this.spanId),this.startTimestamp=(i=e.startTimestamp,i??this.startTimestamp),this.status=e.status,this.tags=(o=e.tags,o??{}),this.traceId=(s=e.traceId,s??this.traceId),this},t.prototype.getTraceContext=function(){return Lt.dropUndefinedKeys({data:Object.keys(this.data).length>0?this.data:void 0,description:this.description,op:this.op,parent_span_id:this.parentSpanId,span_id:this.spanId,status:this.status,tags:Object.keys(this.tags).length>0?this.tags:void 0,trace_id:this.traceId})},t.prototype.toJSON=function(){return Lt.dropUndefinedKeys({data:Object.keys(this.data).length>0?this.data:void 0,description:this.description,op:this.op,parent_span_id:this.parentSpanId,span_id:this.spanId,start_timestamp:this.startTimestamp,status:this.status,tags:Object.keys(this.tags).length>0?this.tags:void 0,timestamp:this.endTimestamp,trace_id:this.traceId})},t}();Zn.Span=My});var ti=b(ks=>{Object.defineProperty(ks,"__esModule",{value:!0});var pr=q(),bf=Ee(),Py=se(),hr=N(),Sf=ei(),Ny=function(t){pr.__extends(e,t);function e(r,n){var i=t.call(this,r)||this;return i._measurements={},i._hub=bf.getCurrentHub(),hr.isInstanceOf(n,bf.Hub)&&(i._hub=n),i.name=r.name||"",i.metadata=r.metadata||{},i._trimEnd=r.trimEnd,i.transaction=i,i}return e.prototype.setName=function(r){this.name=r},e.prototype.initSpanRecorder=function(r){r===void 0&&(r=1e3),this.spanRecorder||(this.spanRecorder=new Sf.SpanRecorder(r)),this.spanRecorder.add(this)},e.prototype.setMeasurements=function(r){this._measurements=pr.__assign({},r)},e.prototype.setMetadata=function(r){this.metadata=pr.__assign(pr.__assign({},this.metadata),r)},e.prototype.finish=function(r){var n=this,i,o,s,a,u;if(this.endTimestamp===void 0){if(this.name||(hr.logger.warn("Transaction has no name, falling back to `<unlabeled transaction>`."),this.name="<unlabeled transaction>"),t.prototype.finish.call(this,r),this.sampled!==!0){hr.logger.log("[Tracing] Discarding transaction because its trace was not chosen to be sampled."),(u=(s=(i=this._hub.getClient())===null||i===void 0?void 0:(o=i).getTransport)===null||s===void 0?void 0:(a=s.call(o)).recordLostEvent)===null||u===void 0||u.call(a,Py.Outcome.SampleRate,"transaction");return}var c=this.spanRecorder?this.spanRecorder.spans.filter(function(h){return h!==n&&h.endTimestamp}):[];this._trimEnd&&c.length>0&&(this.endTimestamp=c.reduce(function(h,_){return h.endTimestamp&&_.endTimestamp?h.endTimestamp>_.endTimestamp?h:_:h}).endTimestamp);var l={contexts:{trace:this.getTraceContext()},spans:c,start_timestamp:this.startTimestamp,tags:this.tags,timestamp:this.endTimestamp,transaction:this.name,type:"transaction",debug_meta:this.metadata},d=Object.keys(this._measurements).length>0;return d&&(hr.logger.log("[Measurements] Adding measurements to transaction",JSON.stringify(this._measurements,void 0,2)),l.measurements=this._measurements),hr.logger.log("[Tracing] Finishing "+this.op+" transaction: "+this.name+"."),this._hub.captureEvent(l)}},e.prototype.toContext=function(){var r=t.prototype.toContext.call(this);return hr.dropUndefinedKeys(pr.__assign(pr.__assign({},r),{name:this.name,trimEnd:this._trimEnd}))},e.prototype.updateWithContext=function(r){var n;return t.prototype.updateWithContext.call(this,r),this.name=(n=r.name,n??""),this._trimEnd=r.trimEnd,this},e}(Sf.Span);ks.Transaction=Ny});var ni=b(Et=>{Object.defineProperty(Et,"__esModule",{value:!0});var Ds=q(),de=N(),ri=Ns(),qy=ei(),Ef=bt(),ky=ti();Et.DEFAULT_IDLE_TIMEOUT=1e3;Et.HEARTBEAT_INTERVAL=5e3;var Tf=function(t){Ds.__extends(e,t);function e(r,n,i,o){i===void 0&&(i="");var s=t.call(this,o)||this;return s._pushActivity=r,s._popActivity=n,s.transactionSpanId=i,s}return e.prototype.add=function(r){var n=this;r.spanId!==this.transactionSpanId&&(r.finish=function(i){r.endTimestamp=typeof i=="number"?i:de.timestampWithMs(),n._popActivity(r.spanId)},r.endTimestamp===void 0&&this._pushActivity(r.spanId)),t.prototype.add.call(this,r)},e}(qy.SpanRecorder);Et.IdleTransactionSpanRecorder=Tf;var Dy=function(t){Ds.__extends(e,t);function e(r,n,i,o){i===void 0&&(i=Et.DEFAULT_IDLE_TIMEOUT),o===void 0&&(o=!1);var s=t.call(this,r,n)||this;return s._idleHub=n,s._idleTimeout=i,s._onScope=o,s.activities={},s._heartbeatCounter=0,s._finished=!1,s._beforeFinishCallbacks=[],n&&o&&(wf(n),de.logger.log("Setting idle transaction on scope. Span ID: "+s.spanId),n.configureScope(function(a){return a.setSpan(s)})),s._initTimeout=setTimeout(function(){s._finished||s.finish()},s._idleTimeout),s}return e.prototype.finish=function(r){var n,i,o=this;if(r===void 0&&(r=de.timestampWithMs()),this._finished=!0,this.activities={},this.spanRecorder){de.logger.log("[Tracing] finishing IdleTransaction",new Date(r*1e3).toISOString(),this.op);try{for(var s=Ds.__values(this._beforeFinishCallbacks),a=s.next();!a.done;a=s.next()){var u=a.value;u(this,r)}}catch(c){n={error:c}}finally{try{a&&!a.done&&(i=s.return)&&i.call(s)}finally{if(n)throw n.error}}this.spanRecorder.spans=this.spanRecorder.spans.filter(function(c){if(c.spanId===o.spanId)return!0;c.endTimestamp||(c.endTimestamp=r,c.setStatus(Ef.SpanStatus.Cancelled),de.logger.log("[Tracing] cancelling span since transaction ended early",JSON.stringify(c,void 0,2)));var l=c.startTimestamp<r;return l||de.logger.log("[Tracing] discarding Span since it happened after Transaction was finished",JSON.stringify(c,void 0,2)),l}),de.logger.log("[Tracing] flushing IdleTransaction")}else de.logger.log("[Tracing] No active IdleTransaction");return this._onScope&&wf(this._idleHub),t.prototype.finish.call(this,r)},e.prototype.registerBeforeFinishCallback=function(r){this._beforeFinishCallbacks.push(r)},e.prototype.initSpanRecorder=function(r){var n=this;if(!this.spanRecorder){var i=function(s){n._finished||n._pushActivity(s)},o=function(s){n._finished||n._popActivity(s)};this.spanRecorder=new Tf(i,o,this.spanId,r),de.logger.log("Starting heartbeat"),this._pingHeartbeat()}this.spanRecorder.add(this)},e.prototype._pushActivity=function(r){this._initTimeout&&(clearTimeout(this._initTimeout),this._initTimeout=void 0),de.logger.log("[Tracing] pushActivity: "+r),this.activities[r]=!0,de.logger.log("[Tracing] new activities count",Object.keys(this.activities).length)},e.prototype._popActivity=function(r){var n=this;if(this.activities[r]&&(de.logger.log("[Tracing] popActivity "+r),delete this.activities[r],de.logger.log("[Tracing] new activities count",Object.keys(this.activities).length)),Object.keys(this.activities).length===0){var i=this._idleTimeout,o=de.timestampWithMs()+i/1e3;setTimeout(function(){n._finished||(n.setTag(ri.FINISH_REASON_TAG,ri.IDLE_TRANSACTION_FINISH_REASONS[1]),n.finish(o))},i)}},e.prototype._beat=function(){if(!this._finished){var r=Object.keys(this.activities).join("");r===this._prevHeartbeatString?this._heartbeatCounter+=1:this._heartbeatCounter=1,this._prevHeartbeatString=r,this._heartbeatCounter>=3?(de.logger.log("[Tracing] Transaction finished because of no change for 3 heart beats"),this.setStatus(Ef.SpanStatus.DeadlineExceeded),this.setTag(ri.FINISH_REASON_TAG,ri.IDLE_TRANSACTION_FINISH_REASONS[0]),this.finish()):this._pingHeartbeat()}},e.prototype._pingHeartbeat=function(){var r=this;de.logger.log("pinging Heartbeat -> current counter: "+this._heartbeatCounter),setTimeout(function(){r._beat()},Et.HEARTBEAT_INTERVAL)},e}(ky.Transaction);Et.IdleTransaction=Dy;function wf(t){if(t){var e=t.getScope();if(e){var r=e.getTransaction();r&&e.setSpan(void 0)}}}});var oi=b((Gr,zr)=>{Object.defineProperty(Gr,"__esModule",{value:!0});var Ls=q(),Of=Ee(),ii=se(),qe=N(),Ly=yf(),Fy=ni(),jy=ti(),Uy=St();function Hy(){var t=this.getScope();if(t){var e=t.getSpan();if(e)return{"sentry-trace":e.toTraceparent()}}return{}}function Cf(t,e,r){if(!Uy.hasTracingEnabled(e))return t.sampled=!1,t;if(t.sampled!==void 0)return t.setMetadata({transactionSampling:{method:ii.TransactionSamplingMethod.Explicit}}),t;var n;return typeof e.tracesSampler=="function"?(n=e.tracesSampler(r),t.setMetadata({transactionSampling:{method:ii.TransactionSamplingMethod.Sampler,rate:Number(n)}})):r.parentSampled!==void 0?(n=r.parentSampled,t.setMetadata({transactionSampling:{method:ii.TransactionSamplingMethod.Inheritance}})):(n=e.tracesSampleRate,t.setMetadata({transactionSampling:{method:ii.TransactionSamplingMethod.Rate,rate:Number(n)}})),By(n)?n?(t.sampled=Math.random()<n,t.sampled?(qe.logger.log("[Tracing] starting "+t.op+" transaction - "+t.name),t):(qe.logger.log("[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = "+Number(n)+")"),t)):(qe.logger.log("[Tracing] Discarding transaction because "+(typeof e.tracesSampler=="function"?"tracesSampler returned 0 or false":"a negative sampling decision was inherited or tracesSampleRate is set to 0")),t.sampled=!1,t):(qe.logger.warn("[Tracing] Discarding transaction because of invalid sample rate."),t.sampled=!1,t)}function By(t){return isNaN(t)||!(typeof t=="number"||typeof t=="boolean")?(qe.logger.warn("[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got "+JSON.stringify(t)+" of type "+JSON.stringify(typeof t)+"."),!1):t<0||t>1?(qe.logger.warn("[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got "+t+"."),!1):!0}function Gy(t,e){var r,n,i=((r=this.getClient())===null||r===void 0?void 0:r.getOptions())||{},o=new jy.Transaction(t,this);return o=Cf(o,i,Ls.__assign({parentSampled:t.parentSampled,transactionContext:t},e)),o.sampled&&o.initSpanRecorder((n=i._experiments)===null||n===void 0?void 0:n.maxSpans),o}function zy(t,e,r,n,i){var o,s,a=((o=t.getClient())===null||o===void 0?void 0:o.getOptions())||{},u=new Fy.IdleTransaction(e,t,r,n);return u=Cf(u,a,Ls.__assign({parentSampled:e.parentSampled,transactionContext:e},i)),u.sampled&&u.initSpanRecorder((s=a._experiments)===null||s===void 0?void 0:s.maxSpans),u}Gr.startIdleTransaction=zy;function xf(){var t=Of.getMainCarrier();!t.__SENTRY__||(t.__SENTRY__.extensions=t.__SENTRY__.extensions||{},t.__SENTRY__.extensions.startTransaction||(t.__SENTRY__.extensions.startTransaction=Gy),t.__SENTRY__.extensions.traceHeaders||(t.__SENTRY__.extensions.traceHeaders=Hy))}Gr._addTracingExtensions=xf;function Vy(){var t=Of.getMainCarrier();if(!!t.__SENTRY__){var e={mongodb:function(){var n=qe.dynamicRequire(zr,"./integrations/node/mongo");return new n.Mongo},mongoose:function(){var n=qe.dynamicRequire(zr,"./integrations/node/mongo");return new n.Mongo({mongoose:!0})},mysql:function(){var n=qe.dynamicRequire(zr,"./integrations/node/mysql");return new n.Mysql},pg:function(){var n=qe.dynamicRequire(zr,"./integrations/node/postgres");return new n.Postgres}},r=Object.keys(e).filter(function(n){return!!qe.loadModule(n)}).map(function(n){try{return e[n]()}catch{return}}).filter(function(n){return n});r.length>0&&(t.__SENTRY__.integrations=Ls.__spread(t.__SENTRY__.integrations||[],r))}}function Wy(){xf(),qe.isNodeEnv()&&Vy(),Ly.registerErrorInstrumentation()}Gr.addExtensionMethods=Wy});var If=b(js=>{Object.defineProperty(js,"__esModule",{value:!0});var Fs=q(),$y=N(),Yy=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._router=e.router||e.app,this._methods=(Array.isArray(e.methods)?e.methods:[]).concat("use")}return t.prototype.setupOnce=function(){if(!this._router){$y.logger.error("ExpressIntegration is missing an Express instance");return}Xy(this._router,this._methods)},t.id="Express",t}();js.Express=Yy;function Rf(t,e){var r=t.length;switch(r){case 2:return function(n,i){var o=i.__sentry_transaction;if(o){var s=o.startChild({description:t.name,op:"express.middleware."+e});i.once("finish",function(){s.finish()})}return t.call(this,n,i)};case 3:return function(n,i,o){var s,a=i.__sentry_transaction,u=(s=a)===null||s===void 0?void 0:s.startChild({description:t.name,op:"express.middleware."+e});t.call(this,n,i,function(){for(var c=[],l=0;l<arguments.length;l++)c[l]=arguments[l];var d;(d=u)===null||d===void 0||d.finish(),o.call.apply(o,Fs.__spread([this],c))})};case 4:return function(n,i,o,s){var a,u=o.__sentry_transaction,c=(a=u)===null||a===void 0?void 0:a.startChild({description:t.name,op:"express.middleware."+e});t.call(this,n,i,o,function(){for(var l=[],d=0;d<arguments.length;d++)l[d]=arguments[d];var h;(h=c)===null||h===void 0||h.finish(),s.call.apply(s,Fs.__spread([this],l))})};default:throw new Error("Express middleware takes 2-4 arguments. Got: "+r)}}function Ky(t,e){return t.map(function(r){return typeof r=="function"?Rf(r,e):Array.isArray(r)?r.map(function(n){return typeof n=="function"?Rf(n,e):n}):r})}function Jy(t,e){var r=t[e];return t[e]=function(){for(var n=[],i=0;i<arguments.length;i++)n[i]=arguments[i];return r.call.apply(r,Fs.__spread([this],Ky(n,e)))},t}function Xy(t,e){e===void 0&&(e=[]),e.forEach(function(r){return Jy(t,r)})}});var Af=b(Us=>{Object.defineProperty(Us,"__esModule",{value:!0});var Vr=N(),Qy=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._usePgNative=!!e.usePgNative}return t.prototype.setupOnce=function(e,r){var n,i=Vr.loadModule("pg");if(!i){Vr.logger.error("Postgres Integration was unable to require `pg` package.");return}if(this._usePgNative&&!((n=i.native)===null||n===void 0?void 0:n.Client)){Vr.logger.error("Postgres Integration was unable to access 'pg-native' bindings.");return}var o=(this._usePgNative?i.native:i).Client;Vr.fill(o.prototype,"query",function(s){return function(a,u,c){var l,d,h,_=r().getScope(),S=(l=_)===null||l===void 0?void 0:l.getSpan(),T=(d=S)===null||d===void 0?void 0:d.startChild({description:typeof a=="string"?a:a.text,op:"db"});if(typeof c=="function")return s.call(this,a,u,function(A,F){var k;(k=T)===null||k===void 0||k.finish(),c(A,F)});if(typeof u=="function")return s.call(this,a,function(A,F){var k;(k=T)===null||k===void 0||k.finish(),u(A,F)});var R=typeof u!="undefined"?s.call(this,a,u):s.call(this,a);return Vr.isThenable(R)?R.then(function(A){var F;return(F=T)===null||F===void 0||F.finish(),A}):((h=T)===null||h===void 0||h.finish(),R)}})},t.id="Postgres",t}();Us.Postgres=Qy});var Mf=b(Bs=>{Object.defineProperty(Bs,"__esModule",{value:!0});var Hs=N(),Zy=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(e,r){var n=Hs.loadModule("mysql/lib/Connection.js");if(!n){Hs.logger.error("Mysql Integration was unable to require `mysql` package.");return}Hs.fill(n,"createQuery",function(i){return function(o,s,a){var u,c,l=r().getScope(),d=(u=l)===null||u===void 0?void 0:u.getSpan(),h=(c=d)===null||c===void 0?void 0:c.startChild({description:typeof o=="string"?o:o.sql,op:"db"});return typeof a=="function"?i.call(this,o,s,function(_,S,T){var R;(R=h)===null||R===void 0||R.finish(),a(_,S,T)}):typeof s=="function"?i.call(this,o,function(_,S,T){var R;(R=h)===null||R===void 0||R.finish(),s(_,S,T)}):i.call(this,o,s,a)}})},t.id="Mysql",t}();Bs.Mysql=Zy});var Pf=b(zs=>{Object.defineProperty(zs,"__esModule",{value:!0});var Gs=q(),si=N(),eb=["aggregate","bulkWrite","countDocuments","createIndex","createIndexes","deleteMany","deleteOne","distinct","drop","dropIndex","dropIndexes","estimatedDocumentCount","find","findOne","findOneAndDelete","findOneAndReplace","findOneAndUpdate","indexes","indexExists","indexInformation","initializeOrderedBulkOp","insertMany","insertOne","isCapped","mapReduce","options","parallelCollectionScan","rename","replaceOne","stats","updateMany","updateOne"],tb={bulkWrite:["operations"],countDocuments:["query"],createIndex:["fieldOrSpec"],createIndexes:["indexSpecs"],deleteMany:["filter"],deleteOne:["filter"],distinct:["key","query"],dropIndex:["indexName"],find:["query"],findOne:["query"],findOneAndDelete:["filter"],findOneAndReplace:["filter","replacement"],findOneAndUpdate:["filter","update"],indexExists:["indexes"],insertMany:["docs"],insertOne:["doc"],mapReduce:["map","reduce"],rename:["newName"],replaceOne:["filter","doc"],updateMany:["filter","update"],updateOne:["filter","update"]},rb=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._operations=Array.isArray(e.operations)?e.operations:eb,this._describeOperations="describeOperations"in e?e.describeOperations:!0,this._useMongoose=!!e.useMongoose}return t.prototype.setupOnce=function(e,r){var n=this._useMongoose?"mongoose":"mongodb",i=si.loadModule(n);if(!i){si.logger.error("Mongo Integration was unable to require `"+n+"` package.");return}this._instrumentOperations(i.Collection,this._operations,r)},t.prototype._instrumentOperations=function(e,r,n){var i=this;r.forEach(function(o){return i._patchOperation(e,o,n)})},t.prototype._patchOperation=function(e,r,n){if(r in e.prototype){var i=this._getSpanContextFromOperationArguments.bind(this);si.fill(e.prototype,r,function(o){return function(){for(var s=[],a=0;a<arguments.length;a++)s[a]=arguments[a];var u,c,l,d,h=s[s.length-1],_=n().getScope(),S=(u=_)===null||u===void 0?void 0:u.getSpan();if(typeof h!="function"||r==="mapReduce"&&s.length===2){var T=(c=S)===null||c===void 0?void 0:c.startChild(i(this,r,s)),R=o.call.apply(o,Gs.__spread([this],s));return si.isThenable(R)?R.then(function(F){var k;return(k=T)===null||k===void 0||k.finish(),F}):((l=T)===null||l===void 0||l.finish(),R)}var A=(d=S)===null||d===void 0?void 0:d.startChild(i(this,r,s.slice(0,-1)));return o.call.apply(o,Gs.__spread([this],s.slice(0,-1),[function(F,k){var xe;(xe=A)===null||xe===void 0||xe.finish(),h(F,k)}]))}})}},t.prototype._getSpanContextFromOperationArguments=function(e,r,n){var i={collectionName:e.collectionName,dbName:e.dbName,namespace:e.namespace},o={op:"db",description:r,data:i},s=tb[r],a=Array.isArray(this._describeOperations)?this._describeOperations.includes(r):this._describeOperations;if(!s||!a)return o;try{if(r==="mapReduce"){var u=Gs.__read(n,2),c=u[0],l=u[1];i[s[0]]=typeof c=="string"?c:c.name||"<anonymous>",i[s[1]]=typeof l=="string"?l:l.name||"<anonymous>"}else for(var d=0;d<s.length;d++)i[s[d]]=JSON.stringify(n[d])}catch{}return o},t.id="Mongo",t}();zs.Mongo=rb});var kf=b(Ws=>{Object.defineProperty(Ws,"__esModule",{value:!0});var Vs=N(),Nf=Ns(),qf=bt(),nb=St(),ai=Vs.getGlobalObject();function ib(){ai&&ai.document?ai.document.addEventListener("visibilitychange",function(){var t=nb.getActiveTransaction();ai.document.hidden&&t&&(Vs.logger.log("[Tracing] Transaction: "+qf.SpanStatus.Cancelled+" -> since tab moved to the background, op: "+t.op),t.status||t.setStatus(qf.SpanStatus.Cancelled),t.setTag("visibilitychange","document.hidden"),t.setTag(Nf.FINISH_REASON_TAG,Nf.IDLE_TRANSACTION_FINISH_REASONS[2]),t.finish())}):Vs.logger.warn("[Tracing] Could not set up background tab detection due to lack of global document")}Ws.registerBackgroundTabDetection=ib});var ui=b($s=>{Object.defineProperty($s,"__esModule",{value:!0});$s.bindReporter=function(t,e,r){var n;return function(i){e.value>=0&&(i||r)&&(e.delta=e.value-(n||0),(e.delta||n===void 0)&&(n=e.value,t(e)))}}});var Df=b(Ys=>{Object.defineProperty(Ys,"__esModule",{value:!0});Ys.generateUniqueID=function(){return"v2-"+Date.now()+"-"+(Math.floor(Math.random()*(9e12-1))+1e12)}});var ci=b(Ks=>{Object.defineProperty(Ks,"__esModule",{value:!0});var ob=Df();Ks.initMetric=function(t,e){return{name:t,value:e??-1,delta:0,entries:[],id:ob.generateUniqueID()}}});var li=b(Js=>{Object.defineProperty(Js,"__esModule",{value:!0});Js.observe=function(t,e){try{if(PerformanceObserver.supportedEntryTypes.includes(t)){if(t==="first-input"&&!("PerformanceEventTiming"in self))return;var r=new PerformanceObserver(function(n){return n.getEntries().map(e)});return r.observe({type:t,buffered:!0}),r}}catch{}}});var Wr=b(Xs=>{Object.defineProperty(Xs,"__esModule",{value:!0});var sb=N();Xs.onHidden=function(t,e){var r=function(n){(n.type==="pagehide"||sb.getGlobalObject().document.visibilityState==="hidden")&&(t(n),e&&(removeEventListener("visibilitychange",r,!0),removeEventListener("pagehide",r,!0)))};addEventListener("visibilitychange",r,!0),addEventListener("pagehide",r,!0)}});var Lf=b(Qs=>{Object.defineProperty(Qs,"__esModule",{value:!0});var ab=ui(),ub=ci(),cb=li(),lb=Wr();Qs.getCLS=function(t,e){var r=ub.initMetric("CLS",0),n,i=0,o=[],s=function(u){if(u&&!u.hadRecentInput){var c=o[0],l=o[o.length-1];i&&o.length!==0&&u.startTime-l.startTime<1e3&&u.startTime-c.startTime<5e3?(i+=u.value,o.push(u)):(i=u.value,o=[u]),i>r.value&&(r.value=i,r.entries=o,n&&n())}},a=cb.observe("layout-shift",s);a&&(n=ab.bindReporter(t,r,e),lb.onHidden(function(){a.takeRecords().map(s),n(!0)}))}});var di=b(Zs=>{Object.defineProperty(Zs,"__esModule",{value:!0});var fb=N(),db=Wr(),fi=-1,pb=function(){return fb.getGlobalObject().document.visibilityState==="hidden"?0:1/0},hb=function(){db.onHidden(function(t){var e=t.timeStamp;fi=e},!0)};Zs.getVisibilityWatcher=function(){return fi<0&&(fi=pb(),hb()),{get firstHiddenTime(){return fi}}}});var Ff=b(ea=>{Object.defineProperty(ea,"__esModule",{value:!0});var vb=ui(),_b=di(),gb=ci(),mb=li(),yb=Wr();ea.getFID=function(t,e){var r=_b.getVisibilityWatcher(),n=gb.initMetric("FID"),i,o=function(a){i&&a.startTime<r.firstHiddenTime&&(n.value=a.processingStart-a.startTime,n.entries.push(a),i(!0))},s=mb.observe("first-input",o);s&&(i=vb.bindReporter(t,n,e),yb.onHidden(function(){s.takeRecords().map(o),s.disconnect()},!0))}});var Uf=b(ta=>{Object.defineProperty(ta,"__esModule",{value:!0});var bb=ui(),Sb=di(),Eb=ci(),Tb=li(),wb=Wr(),jf={};ta.getLCP=function(t,e){var r=Sb.getVisibilityWatcher(),n=Eb.initMetric("LCP"),i,o=function(u){var c=u.startTime;c<r.firstHiddenTime&&(n.value=c,n.entries.push(u)),i&&i()},s=Tb.observe("largest-contentful-paint",o);if(s){i=bb.bindReporter(t,n,e);var a=function(){jf[n.id]||(s.takeRecords().map(o),s.disconnect(),jf[n.id]=!0,i(!0))};["keydown","click"].forEach(function(u){addEventListener(u,a,{once:!0,capture:!0})}),wb.onHidden(a,!0)}}});var Gf=b($r=>{Object.defineProperty($r,"__esModule",{value:!0});var Hf=q(),re=N(),ie=St(),Ob=Lf(),Cb=Ff(),xb=Uf(),Rb=di(),_e=re.getGlobalObject(),Ib=function(){function t(e){e===void 0&&(e=!1);var r,n;this._reportAllChanges=e,this._measurements={},this._performanceCursor=0,!re.isNodeEnv()&&((r=_e)===null||r===void 0?void 0:r.performance)&&((n=_e)===null||n===void 0?void 0:n.document)&&(_e.performance.mark&&_e.performance.mark("sentry-tracing-init"),this._trackCLS(),this._trackLCP(),this._trackFID())}return t.prototype.addPerformanceEntries=function(e){var r=this;if(!(!_e||!_e.performance||!_e.performance.getEntries||!re.browserPerformanceTimeOrigin)){re.logger.log("[Tracing] Adding & adjusting spans using Performance API");var n=ie.msToSec(re.browserPerformanceTimeOrigin),i;if(_e.document&&_e.document.scripts){for(var o=0;o<_e.document.scripts.length;o++)if(_e.document.scripts[o].dataset.entry==="true"){i=_e.document.scripts[o].src;break}}var s,a,u,c;if(_e.performance.getEntries().slice(this._performanceCursor).forEach(function(d){var h=ie.msToSec(d.startTime),_=ie.msToSec(d.duration);if(!(e.op==="navigation"&&n+h<e.startTimestamp))switch(d.entryType){case"navigation":{Ab(e,d,n),u=n+ie.msToSec(d.responseStart),c=n+ie.msToSec(d.requestStart);break}case"mark":case"paint":case"measure":{var S=Mb(e,d,h,_,n);a===void 0&&d.name==="sentry-tracing-init"&&(a=S);var T=Rb.getVisibilityWatcher(),R=d.startTime<T.firstHiddenTime;d.name==="first-paint"&&R&&(re.logger.log("[Measurements] Adding FP"),r._measurements.fp={value:d.startTime},r._measurements["mark.fp"]={value:S}),d.name==="first-contentful-paint"&&R&&(re.logger.log("[Measurements] Adding FCP"),r._measurements.fcp={value:d.startTime},r._measurements["mark.fcp"]={value:S});break}case"resource":{var A=d.name.replace(_e.location.origin,""),F=Bf(e,d,A,h,_,n);s===void 0&&(i||"").indexOf(A)>-1&&(s=F);break}default:}}),s!==void 0&&a!==void 0&&wt(e,{description:"evaluation",endTimestamp:a,op:"script",startTimestamp:s}),this._performanceCursor=Math.max(performance.getEntries().length-1,0),this._trackNavigator(e),e.op==="pageload"){var l=ie.msToSec(re.browserPerformanceTimeOrigin);typeof u=="number"&&(re.logger.log("[Measurements] Adding TTFB"),this._measurements.ttfb={value:(u-e.startTimestamp)*1e3},typeof c=="number"&&c<=u&&(this._measurements["ttfb.requestTime"]={value:(u-c)*1e3})),["fcp","fp","lcp"].forEach(function(d){if(!(!r._measurements[d]||l>=e.startTimestamp)){var h=r._measurements[d].value,_=l+ie.msToSec(h),S=Math.abs((_-e.startTimestamp)*1e3),T=S-h;re.logger.log("[Measurements] Normalized "+d+" from "+h+" to "+S+" ("+T+")"),r._measurements[d].value=S}}),this._measurements["mark.fid"]&&this._measurements.fid&&wt(e,{description:"first input delay",endTimestamp:this._measurements["mark.fid"].value+ie.msToSec(this._measurements.fid.value),op:"web.vitals",startTimestamp:this._measurements["mark.fid"].value}),"fcp"in this._measurements||delete this._measurements.cls,e.setMeasurements(this._measurements),this._tagMetricInfo(e),e.setTag("sentry_reportAllChanges",this._reportAllChanges)}}},t.prototype._tagMetricInfo=function(e){this._lcpEntry&&(re.logger.log("[Measurements] Adding LCP Data"),this._lcpEntry.element&&e.setTag("lcp.element",re.htmlTreeAsString(this._lcpEntry.element)),this._lcpEntry.id&&e.setTag("lcp.id",this._lcpEntry.id),this._lcpEntry.url&&e.setTag("lcp.url",this._lcpEntry.url.trim().slice(0,200)),e.setTag("lcp.size",this._lcpEntry.size)),this._clsEntry&&this._clsEntry.sources&&(re.logger.log("[Measurements] Adding CLS Data"),this._clsEntry.sources.forEach(function(r,n){return e.setTag("cls.source."+(n+1),re.htmlTreeAsString(r.node))}))},t.prototype._trackCLS=function(){var e=this;Ob.getCLS(function(r){var n=r.entries.pop();!n||(re.logger.log("[Measurements] Adding CLS"),e._measurements.cls={value:r.value},e._clsEntry=n)})},t.prototype._trackNavigator=function(e){var r=_e.navigator;if(!!r){var n=r.connection;n&&(n.effectiveType&&e.setTag("effectiveConnectionType",n.effectiveType),n.type&&e.setTag("connectionType",n.type),pi(n.rtt)&&(this._measurements["connection.rtt"]={value:n.rtt}),pi(n.downlink)&&(this._measurements["connection.downlink"]={value:n.downlink})),pi(r.deviceMemory)&&e.setTag("deviceMemory",String(r.deviceMemory)),pi(r.hardwareConcurrency)&&e.setTag("hardwareConcurrency",String(r.hardwareConcurrency))}},t.prototype._trackLCP=function(){var e=this;xb.getLCP(function(r){var n=r.entries.pop();if(!!n){var i=ie.msToSec(re.browserPerformanceTimeOrigin),o=ie.msToSec(n.startTime);re.logger.log("[Measurements] Adding LCP"),e._measurements.lcp={value:r.value},e._measurements["mark.lcp"]={value:i+o},e._lcpEntry=n}},this._reportAllChanges)},t.prototype._trackFID=function(){var e=this;Cb.getFID(function(r){var n=r.entries.pop();if(!!n){var i=ie.msToSec(re.browserPerformanceTimeOrigin),o=ie.msToSec(n.startTime);re.logger.log("[Measurements] Adding FID"),e._measurements.fid={value:r.value},e._measurements["mark.fid"]={value:i+o}}})},t}();$r.MetricsInstrumentation=Ib;function Ab(t,e,r){Tt({transaction:t,entry:e,event:"unloadEvent",timeOrigin:r}),Tt({transaction:t,entry:e,event:"redirect",timeOrigin:r}),Tt({transaction:t,entry:e,event:"domContentLoadedEvent",timeOrigin:r}),Tt({transaction:t,entry:e,event:"loadEvent",timeOrigin:r}),Tt({transaction:t,entry:e,event:"connect",timeOrigin:r}),Tt({transaction:t,entry:e,event:"secureConnection",timeOrigin:r,eventEnd:"connectEnd",description:"TLS/SSL"}),Tt({transaction:t,entry:e,event:"fetch",timeOrigin:r,eventEnd:"domainLookupStart",description:"cache"}),Tt({transaction:t,entry:e,event:"domainLookup",timeOrigin:r,description:"DNS"}),Pb(t,e,r)}function Mb(t,e,r,n,i){var o=i+r,s=o+n;return wt(t,{description:e.name,endTimestamp:s,op:e.entryType,startTimestamp:o}),o}function Bf(t,e,r,n,i,o){if(!(e.initiatorType==="xmlhttprequest"||e.initiatorType==="fetch")){var s={};"transferSize"in e&&(s["Transfer Size"]=e.transferSize),"encodedBodySize"in e&&(s["Encoded Body Size"]=e.encodedBodySize),"decodedBodySize"in e&&(s["Decoded Body Size"]=e.decodedBodySize);var a=o+n,u=a+i;return wt(t,{description:r,endTimestamp:u,op:e.initiatorType?"resource."+e.initiatorType:"resource",startTimestamp:a,data:s}),u}}$r.addResourceSpans=Bf;function Tt(t){var e=t.transaction,r=t.entry,n=t.event,i=t.timeOrigin,o=t.eventEnd,s=t.description,a=o?r[o]:r[n+"End"],u=r[n+"Start"];!u||!a||wt(e,{op:"browser",description:s??n,startTimestamp:i+ie.msToSec(u),endTimestamp:i+ie.msToSec(a)})}function Pb(t,e,r){wt(t,{op:"browser",description:"request",startTimestamp:r+ie.msToSec(e.requestStart),endTimestamp:r+ie.msToSec(e.responseEnd)}),wt(t,{op:"browser",description:"response",startTimestamp:r+ie.msToSec(e.responseStart),endTimestamp:r+ie.msToSec(e.responseEnd)})}function wt(t,e){var r=e.startTimestamp,n=Hf.__rest(e,["startTimestamp"]);return r&&t.startTimestamp>r&&(t.startTimestamp=r),t.startChild(Hf.__assign({startTimestamp:r},n))}$r._startChild=wt;function pi(t){return typeof t=="number"&&isFinite(t)}});var ra=b(ot=>{Object.defineProperty(ot,"__esModule",{value:!0});var it=q(),Yr=N(),Nb=bt(),hi=St();ot.DEFAULT_TRACING_ORIGINS=["localhost",/^\//];ot.defaultRequestInstrumentationOptions={traceFetch:!0,traceXHR:!0,tracingOrigins:ot.DEFAULT_TRACING_ORIGINS};function qb(t){var e=it.__assign(it.__assign({},ot.defaultRequestInstrumentationOptions),t),r=e.traceFetch,n=e.traceXHR,i=e.tracingOrigins,o=e.shouldCreateSpanForRequest,s={},a=function(l){if(s[l])return s[l];var d=i;return s[l]=d.some(function(h){return Yr.isMatchingPattern(l,h)})&&!Yr.isMatchingPattern(l,"sentry_key"),s[l]},u=a;typeof o=="function"&&(u=function(l){return a(l)&&o(l)});var c={};r&&Yr.addInstrumentationHandler({callback:function(l){zf(l,u,c)},type:"fetch"}),n&&Yr.addInstrumentationHandler({callback:function(l){Vf(l,u,c)},type:"xhr"})}ot.instrumentOutgoingRequests=qb;function zf(t,e,r){if(!(!hi.hasTracingEnabled()||!(t.fetchData&&e(t.fetchData.url)))){if(t.endTimestamp&&t.fetchData.__span){var n=r[t.fetchData.__span];n&&(t.response?n.setHttpStatus(t.response.status):t.error&&n.setStatus(Nb.SpanStatus.InternalError),n.finish(),delete r[t.fetchData.__span]);return}var i=hi.getActiveTransaction();if(i){var n=i.startChild({data:it.__assign(it.__assign({},t.fetchData),{type:"fetch"}),description:t.fetchData.method+" "+t.fetchData.url,op:"http.client"});t.fetchData.__span=n.spanId,r[n.spanId]=n;var o=t.args[0]=t.args[0],s=t.args[1]=t.args[1]||{},a=s.headers;Yr.isInstanceOf(o,Request)&&(a=o.headers),a?typeof a.append=="function"?a.append("sentry-trace",n.toTraceparent()):Array.isArray(a)?a=it.__spread(a,[["sentry-trace",n.toTraceparent()]]):a=it.__assign(it.__assign({},a),{"sentry-trace":n.toTraceparent()}):a={"sentry-trace":n.toTraceparent()},s.headers=a}}}ot.fetchCallback=zf;function Vf(t,e,r){var n,i;if(!(!hi.hasTracingEnabled()||((n=t.xhr)===null||n===void 0?void 0:n.__sentry_own_request__)||!(((i=t.xhr)===null||i===void 0?void 0:i.__sentry_xhr__)&&e(t.xhr.__sentry_xhr__.url)))){var o=t.xhr.__sentry_xhr__;if(t.endTimestamp&&t.xhr.__sentry_xhr_span_id__){var s=r[t.xhr.__sentry_xhr_span_id__];s&&(s.setHttpStatus(o.status_code),s.finish(),delete r[t.xhr.__sentry_xhr_span_id__]);return}var a=hi.getActiveTransaction();if(a){var s=a.startChild({data:it.__assign(it.__assign({},o.data),{type:"xhr",method:o.method,url:o.url}),description:o.method+" "+o.url,op:"http.client"});if(t.xhr.__sentry_xhr_span_id__=s.spanId,r[t.xhr.__sentry_xhr_span_id__]=s,t.xhr.setRequestHeader)try{t.xhr.setRequestHeader("sentry-trace",s.toTraceparent())}catch{}}}}ot.xhrCallback=Vf});var Wf=b(na=>{Object.defineProperty(na,"__esModule",{value:!0});var vi=N(),Kr=vi.getGlobalObject();function kb(t,e,r){if(e===void 0&&(e=!0),r===void 0&&(r=!0),!Kr||!Kr.location){vi.logger.warn("Could not initialize routing instrumentation due to invalid location");return}var n=Kr.location.href,i;e&&(i=t({name:Kr.location.pathname,op:"pageload"})),r&&vi.addInstrumentationHandler({callback:function(o){var s=o.to,a=o.from;if(a===void 0&&n&&n.indexOf(s)!==-1){n=void 0;return}a!==s&&(n=void 0,i&&(vi.logger.log("[Tracing] Finishing current transaction with op: "+i.op),i.finish()),i=t({name:Kr.location.pathname,op:"navigation"}))},type:"history"})}na.instrumentRoutingWithDefaults=kb});var Jf=b(jt=>{Object.defineProperty(jt,"__esModule",{value:!0});var st=q(),Ft=N(),Db=oi(),Lb=ni(),Fb=bt(),$f=St(),jb=kf(),Ub=Gf(),_i=ra(),Hb=Wf();jt.DEFAULT_MAX_TRANSACTION_DURATION_SECONDS=600;var Bb=st.__assign({idleTimeout:Lb.DEFAULT_IDLE_TIMEOUT,markBackgroundTransactions:!0,maxTransactionDuration:jt.DEFAULT_MAX_TRANSACTION_DURATION_SECONDS,routingInstrumentation:Hb.instrumentRoutingWithDefaults,startTransactionOnLocationChange:!0,startTransactionOnPageLoad:!0},_i.defaultRequestInstrumentationOptions),Gb=function(){function t(e){this.name=t.id,this._emitOptionsWarning=!1,this._configuredIdleTimeout=void 0;var r=_i.defaultRequestInstrumentationOptions.tracingOrigins;e&&(this._configuredIdleTimeout=e.idleTimeout,e.tracingOrigins&&Array.isArray(e.tracingOrigins)&&e.tracingOrigins.length!==0?r=e.tracingOrigins:this._emitOptionsWarning=!0),this.options=st.__assign(st.__assign(st.__assign({},Bb),e),{tracingOrigins:r});var n=this.options._metricOptions;this._metrics=new Ub.MetricsInstrumentation(n&&n._reportAllChanges)}return t.prototype.setupOnce=function(e,r){var n=this;this._getCurrentHub=r,this._emitOptionsWarning&&(Ft.logger.warn("[Tracing] You need to define `tracingOrigins` in the options. Set an array of urls or patterns to trace."),Ft.logger.warn("[Tracing] We added a reasonable default for you: "+_i.defaultRequestInstrumentationOptions.tracingOrigins));var i=this.options,o=i.routingInstrumentation,s=i.startTransactionOnLocationChange,a=i.startTransactionOnPageLoad,u=i.markBackgroundTransactions,c=i.traceFetch,l=i.traceXHR,d=i.tracingOrigins,h=i.shouldCreateSpanForRequest;o(function(_){return n._createRouteTransaction(_)},a,s),u&&jb.registerBackgroundTabDetection(),_i.instrumentOutgoingRequests({traceFetch:c,traceXHR:l,tracingOrigins:d,shouldCreateSpanForRequest:h})},t.prototype._createRouteTransaction=function(e){var r=this;if(!this._getCurrentHub){Ft.logger.warn("[Tracing] Did not create "+e.op+" transaction because _getCurrentHub is invalid.");return}var n=this.options,i=n.beforeNavigate,o=n.idleTimeout,s=n.maxTransactionDuration,a=e.op==="pageload"?Yf():void 0,u=st.__assign(st.__assign(st.__assign({},e),a),{trimEnd:!0}),c=typeof i=="function"?i(u):u,l=c===void 0?st.__assign(st.__assign({},u),{sampled:!1}):c;l.sampled===!1&&Ft.logger.log("[Tracing] Will not send "+l.op+" transaction because of beforeNavigate."),Ft.logger.log("[Tracing] Starting "+l.op+" transaction on scope");var d=this._getCurrentHub(),h=Ft.getGlobalObject().location,_=Db.startIdleTransaction(d,l,o,!0,{location:h});return _.registerBeforeFinishCallback(function(S,T){r._metrics.addPerformanceEntries(S),zb($f.secToMs(s),S,T)}),_.setTag("idleTimeout",this._configuredIdleTimeout),_},t.id="BrowserTracing",t}();jt.BrowserTracing=Gb;function Yf(){var t=Kf("sentry-trace");if(t)return $f.extractTraceparentData(t)}jt.getHeaderContext=Yf;function Kf(t){var e=Ft.getGlobalObject().document.querySelector("meta[name="+t+"]");return e?e.getAttribute("content"):null}jt.getMetaContent=Kf;function zb(t,e,r){var n=r-e.startTimestamp,i=r&&(n>t||n<0);i&&(e.setStatus(Fb.SpanStatus.DeadlineExceeded),e.setTag("maxTransactionDurationExceeded","true"))}});var gi=b(Jr=>{Object.defineProperty(Jr,"__esModule",{value:!0});var Vb=Jf();Jr.BrowserTracing=Vb.BrowserTracing;var Xf=ra();Jr.instrumentOutgoingRequests=Xf.instrumentOutgoingRequests;Jr.defaultRequestInstrumentationOptions=Xf.defaultRequestInstrumentationOptions});var Qf=b(Ut=>{Object.defineProperty(Ut,"__esModule",{value:!0});var Wb=If();Ut.Express=Wb.Express;var $b=Af();Ut.Postgres=$b.Postgres;var Yb=Mf();Ut.Mysql=Yb.Mysql;var Kb=Pf();Ut.Mongo=Kb.Mongo;var Jb=gi();Ut.BrowserTracing=Jb.BrowserTracing});var td=b(ce=>{Object.defineProperty(ce,"__esModule",{value:!0});var Zf=oi();ce.addExtensionMethods=Zf.addExtensionMethods;var Xb=Qf();ce.Integrations=Xb;var Qb=gi();ce.BrowserTracing=Qb.BrowserTracing;var Zb=ei();ce.Span=Zb.Span;var eS=ti();ce.Transaction=eS.Transaction;var ed=gi();ce.registerRequestInstrumentation=ed.instrumentOutgoingRequests;ce.defaultRequestInstrumentationOptions=ed.defaultRequestInstrumentationOptions;var tS=bt();ce.SpanStatus=tS.SpanStatus;var rS=ni();ce.IdleTransaction=rS.IdleTransaction;var nS=oi();ce.startIdleTransaction=nS.startIdleTransaction;Zf.addExtensionMethods();var Xr=St();ce.extractTraceparentData=Xr.extractTraceparentData;ce.getActiveTransaction=Xr.getActiveTransaction;ce.hasTracingEnabled=Xr.hasTracingEnabled;ce.stripUrlQueryAndFragment=Xr.stripUrlQueryAndFragment;ce.TRACEPARENT_REGEXP=Xr.TRACEPARENT_REGEXP});var rd=b(ia=>{"use strict";ia.parse=aS;ia.serialize=uS;var iS=decodeURIComponent,oS=encodeURIComponent,sS=/; */,mi=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;function aS(t,e){if(typeof t!="string")throw new TypeError("argument str must be a string");for(var r={},n=e||{},i=t.split(sS),o=n.decode||iS,s=0;s<i.length;s++){var a=i[s],u=a.indexOf("=");if(!(u<0)){var c=a.substr(0,u).trim(),l=a.substr(++u,a.length).trim();l[0]=='"'&&(l=l.slice(1,-1)),r[c]==null&&(r[c]=cS(l,o))}}return r}function uS(t,e,r){var n=r||{},i=n.encode||oS;if(typeof i!="function")throw new TypeError("option encode is invalid");if(!mi.test(t))throw new TypeError("argument name is invalid");var o=i(e);if(o&&!mi.test(o))throw new TypeError("argument val is invalid");var s=t+"="+o;if(n.maxAge!=null){var a=n.maxAge-0;if(isNaN(a)||!isFinite(a))throw new TypeError("option maxAge is invalid");s+="; Max-Age="+Math.floor(a)}if(n.domain){if(!mi.test(n.domain))throw new TypeError("option domain is invalid");s+="; Domain="+n.domain}if(n.path){if(!mi.test(n.path))throw new TypeError("option path is invalid");s+="; Path="+n.path}if(n.expires){if(typeof n.expires.toUTCString!="function")throw new TypeError("option expires is invalid");s+="; Expires="+n.expires.toUTCString()}if(n.httpOnly&&(s+="; HttpOnly"),n.secure&&(s+="; Secure"),n.sameSite){var u=typeof n.sameSite=="string"?n.sameSite.toLowerCase():n.sameSite;switch(u){case!0:s+="; SameSite=Strict";break;case"lax":s+="; SameSite=Lax";break;case"strict":s+="; SameSite=Strict";break;case"none":s+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}}return s}function cS(t,e){try{return e(t)}catch{return t}}});var od=b(Bt=>{Object.defineProperty(Bt,"__esModule",{value:!0});var $e=q(),Ht=ae(),lS=td(),nd=se(),vr=N(),fS=rd(),dS=require("domain"),pS=require("os"),hS=require("url"),Qr=Rs();function vS(){return function(e,r,n){var i;e.headers&&vr.isString(e.headers["sentry-trace"])&&(i=lS.extractTraceparentData(e.headers["sentry-trace"]));var o=Ht.startTransaction($e.__assign({name:yi(e,{path:!0,method:!0}),op:"http.server"},i),{request:bi(e)});Ht.getCurrentHub().configureScope(function(s){s.setSpan(o)}),r.__sentry_transaction=o,r.once("finish",function(){setImmediate(function(){_S(o,e),o.setHttpStatus(r.statusCode),o.finish()})}),n()}}Bt.tracingHandler=vS;function _S(t,e){!t||(t.name=yi(e,{path:!0,method:!0}),t.setData("url",e.originalUrl),t.setData("baseUrl",e.baseUrl),t.setData("query",e.query))}function yi(t,e){e===void 0&&(e={});var r,n=(r=t.method)===null||r===void 0?void 0:r.toUpperCase(),i="";t.route?i=""+(t.baseUrl||"")+t.route.path:(t.originalUrl||t.url)&&(i=vr.stripUrlQueryAndFragment(t.originalUrl||t.url||""));var o="";return e.method&&n&&(o+=n),e.method&&e.path&&(o+=" "),e.path&&i&&(o+=i),o}function gS(t,e){var r;switch(e){case"path":return yi(t,{path:!0});case"handler":return((r=t.route)===null||r===void 0?void 0:r.stack[0].name)||"<anonymous>";case"methodPath":default:return yi(t,{path:!0,method:!0})}}var mS=["id","username","email"];function yS(t,e){var r={},n=Array.isArray(e)?e:mS;return n.forEach(function(i){t&&i in t&&(r[i]=t[i])}),r}var bS=["cookies","data","headers","method","query_string","url"];function bi(t,e){e===void 0&&(e=bS);var r={},n=t.headers||t.header||{},i=t.method,o=t.hostname||t.host||n.host||"<no host>",s=t.protocol==="https"||t.secure||(t.socket||{}).encrypted?"https":"http",a=t.originalUrl||t.url||"",u=s+"://"+o+a;return e.forEach(function(c){switch(c){case"headers":r.headers=n;break;case"method":r.method=i;break;case"url":r.url=u;break;case"cookies":r.cookies=t.cookies||fS.parse(n.cookie||"");break;case"query_string":r.query_string=t.query||hS.parse(a||"",!1).query;break;case"data":if(i==="GET"||i==="HEAD")break;t.body!==void 0&&(r.data=vr.isString(t.body)?t.body:JSON.stringify(vr.normalize(t.body)));break;default:({}).hasOwnProperty.call(t,c)&&(r[c]=t[c])}}),r}Bt.extractRequestData=bi;function id(t,e,r){if(r=$e.__assign({ip:!1,request:!0,serverName:!0,transaction:!0,user:!0,version:!0},r),r.version&&(t.contexts=$e.__assign($e.__assign({},t.contexts),{runtime:{name:"node",version:global.process.version}})),r.request){var n=Array.isArray(r.request)?bi(e,r.request):bi(e);t.request=$e.__assign($e.__assign({},t.request),n)}if(r.serverName&&!t.server_name&&(t.server_name=global.process.env.SENTRY_NAME||pS.hostname()),r.user){var i=e.user&&vr.isPlainObject(e.user)?yS(e.user,r.user):{};Object.keys(i)&&(t.user=$e.__assign($e.__assign({},t.user),i))}if(r.ip){var o=e.ip||e.connection&&e.connection.remoteAddress;o&&(t.user=$e.__assign($e.__assign({},t.user),{ip_address:o}))}return r.transaction&&!t.transaction&&(t.transaction=gS(e,r.transaction)),t}Bt.parseRequest=id;function SS(t){var e=Ht.getCurrentHub(),r=e.getClient();if(r&&Qr.isAutoSessionTrackingEnabled(r)){r.initSessionFlusher();var n=e.getScope();n&&n.getSession()&&n.setSession()}return function(o,s,a){if(t&&t.flushTimeout&&t.flushTimeout>0){var u=s.end;s.end=function(l,d,h){var _=this;Qr.flush(t.flushTimeout).then(function(){u.call(_,l,d,h)}).then(null,function(S){vr.logger.error(S)})}}var c=dS.create();c.add(o),c.add(s),c.on("error",a),c.run(function(){var l=Ht.getCurrentHub();l.configureScope(function(d){d.addEventProcessor(function(S){return id(S,o,t)});var h=l.getClient();if(Qr.isAutoSessionTrackingEnabled(h)){var _=l.getScope();_&&_.setRequestSession({status:nd.RequestSessionStatus.Ok})}}),s.once("finish",function(){var d=l.getClient();Qr.isAutoSessionTrackingEnabled(d)&&setImmediate(function(){d&&d._captureRequestSession&&d._captureRequestSession()})}),a()})}}Bt.requestHandler=SS;function ES(t){var e=t.status||t.statusCode||t.status_code||t.output&&t.output.statusCode;return e?parseInt(e,10):500}function TS(t){var e=ES(t);return e>=500}function wS(t){return function(r,n,i,o){var s=t&&t.shouldHandleError||TS;if(s(r)){Ht.withScope(function(a){var u=i.__sentry_transaction;u&&a.getSpan()===void 0&&a.setSpan(u);var c=Ht.getCurrentHub().getClient();if(c&&Qr.isAutoSessionTrackingEnabled(c)){var l=c._sessionFlusher!==void 0;if(l){var d=a.getRequestSession();d&&d.status!==void 0&&(d.status=nd.RequestSessionStatus.Crashed)}}var h=Ht.captureException(r);i.sentry=h,o(r)});return}o(r)}}Bt.errorHandler=wS});var ud=b(H=>{Object.defineProperty(H,"__esModule",{value:!0});var sd=q(),ad=se();H.Severity=ad.Severity;H.Status=ad.Status;var Z=ae();H.addGlobalEventProcessor=Z.addGlobalEventProcessor;H.addBreadcrumb=Z.addBreadcrumb;H.captureException=Z.captureException;H.captureEvent=Z.captureEvent;H.captureMessage=Z.captureMessage;H.configureScope=Z.configureScope;H.getHubFromCarrier=Z.getHubFromCarrier;H.getCurrentHub=Z.getCurrentHub;H.Hub=Z.Hub;H.makeMain=Z.makeMain;H.Scope=Z.Scope;H.startTransaction=Z.startTransaction;H.SDK_VERSION=Z.SDK_VERSION;H.setContext=Z.setContext;H.setExtra=Z.setExtra;H.setExtras=Z.setExtras;H.setTag=Z.setTag;H.setTags=Z.setTags;H.setUser=Z.setUser;H.withScope=Z.withScope;var OS=cs();H.NodeBackend=OS.NodeBackend;var CS=ds();H.NodeClient=CS.NodeClient;var _r=Rs();H.defaultIntegrations=_r.defaultIntegrations;H.init=_r.init;H.lastEventId=_r.lastEventId;H.flush=_r.flush;H.close=_r.close;H.getSentryRelease=_r.getSentryRelease;var xS=hf();H.deepReadDirSync=xS.deepReadDirSync;var RS=Vo();H.SDK_NAME=RS.SDK_NAME;var IS=ae(),AS=Ee(),MS=require("domain"),PS=od();H.Handlers=PS;var NS=Cs(),qS=as();H.Transports=qS;var kS=sd.__assign(sd.__assign({},IS.Integrations),NS);H.Integrations=kS;var Zr=AS.getMainCarrier();Zr.__SENTRY__&&(Zr.__SENTRY__.extensions=Zr.__SENTRY__.extensions||{},Zr.__SENTRY__.extensions.domain=Zr.__SENTRY__.extensions.domain||MS)});var ld=b(sa=>{Object.defineProperty(sa,"__esModule",{value:!0});var cd=q(),oa=N(),DS=/^\[((?:[$a-zA-Z0-9]+:)?(?:[$a-zA-Z0-9]+))\] (.*?)\n?(\S+)$/,LS=function(){function t(e){if(e===void 0&&(e={}),this.name=t.id,oa.logger.log("You are still using the Angular integration, consider moving to @sentry/angular"),this._angular=e.angular||oa.getGlobalObject().angular,!this._angular){oa.logger.error("AngularIntegration is missing an Angular instance");return}this._module=this._angular.module(t.moduleName,[])}return t.prototype.setupOnce=function(e,r){var n=this;!this._module||(this._getCurrentHub=r,this._module.config(["$provide",function(i){i.decorator("$exceptionHandler",["$delegate",n._$exceptionHandlerDecorator.bind(n)])}]))},t.prototype._$exceptionHandlerDecorator=function(e){var r=this;return function(n,i){var o=r._getCurrentHub&&r._getCurrentHub();o&&o.getIntegration(t)&&o.withScope(function(s){i&&s.setExtra("cause",i),s.addEventProcessor(function(a){var u=a.exception&&a.exception.values&&a.exception.values[0];if(u){var c=DS.exec(u.value||"");c&&(u.type=c[1],u.value=c[2],a.message=u.type+": "+u.value,a.extra=cd.__assign(cd.__assign({},a.extra),{angularDocs:c[3].substr(0,250)}))}return a}),o.captureException(n)}),e(n,i)}},t.id="AngularJS",t.moduleName="ngSentry",t}();sa.Angular=LS});var fd=b(aa=>{Object.defineProperty(aa,"__esModule",{value:!0});var FS=se(),Si=N(),Ei=Si.getGlobalObject(),jS=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._levels=["log","info","warn","error","debug","assert"],e.levels&&(this._levels=e.levels)}return t.prototype.setupOnce=function(e,r){"console"in Ei&&this._levels.forEach(function(n){n in Ei.console&&Si.fill(Ei.console,n,function(i){return function(){for(var o=[],s=0;s<arguments.length;s++)o[s]=arguments[s];var a=r();a.getIntegration(t)&&a.withScope(function(u){u.setLevel(FS.Severity.fromString(n)),u.setExtra("arguments",o),u.addEventProcessor(function(l){return l.logger="console",l});var c=Si.safeJoin(o," ");n==="assert"?o[0]===!1&&(c="Assertion failed: "+(Si.safeJoin(o.slice(1)," ")||"console.assert"),u.setExtra("arguments",o.slice(1)),a.captureMessage(c)):n==="error"&&o[0]instanceof Error?a.captureException(o[0]):a.captureMessage(c)}),i&&Function.prototype.apply.call(i,Ei.console,o)}})})},t.id="CaptureConsole",t}();aa.CaptureConsole=jS});var dd=b(ua=>{Object.defineProperty(ua,"__esModule",{value:!0});var US=q(),HS=N(),BS=function(){function t(e){this.name=t.id,this._options=US.__assign({debugger:!1,stringify:!1},e)}return t.prototype.setupOnce=function(e,r){e(function(n,i){var o=r().getIntegration(t);if(o){if(o._options.debugger)debugger;HS.consoleSandbox(function(){o._options.stringify?(console.log(JSON.stringify(n,null,2)),i&&console.log(JSON.stringify(i,null,2))):(console.log(n),i&&console.log(i))})}return n})},t.id="Debug",t}();ua.Debug=BS});var pd=b(ca=>{Object.defineProperty(ca,"__esModule",{value:!0});var GS=N(),zS=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(e,r){e(function(n){var i=r().getIntegration(t);if(i){try{if(i._shouldDropEvent(n,i._previousEvent))return GS.logger.warn("Event dropped due to being a duplicate of previously captured event."),null}catch{return i._previousEvent=n}return i._previousEvent=n}return n})},t.prototype._shouldDropEvent=function(e,r){return r?!!(this._isSameMessageEvent(e,r)||this._isSameExceptionEvent(e,r)):!1},t.prototype._isSameMessageEvent=function(e,r){var n=e.message,i=r.message;return!(!n&&!i||n&&!i||!n&&i||n!==i||!this._isSameFingerprint(e,r)||!this._isSameStacktrace(e,r))},t.prototype._getFramesFromEvent=function(e){var r=e.exception;if(r)try{return r.values[0].stacktrace.frames}catch{return}else if(e.stacktrace)return e.stacktrace.frames},t.prototype._isSameStacktrace=function(e,r){var n=this._getFramesFromEvent(e),i=this._getFramesFromEvent(r);if(!n&&!i)return!0;if(n&&!i||!n&&i||(n=n,i=i,i.length!==n.length))return!1;for(var o=0;o<i.length;o++){var s=i[o],a=n[o];if(s.filename!==a.filename||s.lineno!==a.lineno||s.colno!==a.colno||s.function!==a.function)return!1}return!0},t.prototype._getExceptionFromEvent=function(e){return e.exception&&e.exception.values&&e.exception.values[0]},t.prototype._isSameExceptionEvent=function(e,r){var n=this._getExceptionFromEvent(r),i=this._getExceptionFromEvent(e);return!(!n||!i||n.type!==i.type||n.value!==i.value||!this._isSameFingerprint(e,r)||!this._isSameStacktrace(e,r))},t.prototype._isSameFingerprint=function(e,r){var n=e.fingerprint,i=r.fingerprint;if(!n&&!i)return!0;if(n&&!i||!n&&i)return!1;n=n,i=i;try{return n.join("")===i.join("")}catch{return!1}},t.id="Dedupe",t}();ca.Dedupe=zS});var hd=b(fa=>{Object.defineProperty(fa,"__esModule",{value:!0});var la=N(),VS=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._Ember=e.Ember||la.getGlobalObject().Ember}return t.prototype.setupOnce=function(e,r){var n=this;if(!this._Ember){la.logger.error("EmberIntegration is missing an Ember instance");return}var i=this._Ember.onerror;this._Ember.onerror=function(o){if(r().getIntegration(t)&&r().captureException(o,{originalException:o}),typeof i=="function")i.call(n._Ember,o);else if(n._Ember.testing)throw o},this._Ember.RSVP.on("error",function(o){r().getIntegration(t)&&r().withScope(function(s){la.isInstanceOf(o,Error)?(s.setExtra("context","Unhandled Promise error detected"),r().captureException(o,{originalException:o})):(s.setExtra("reason",o),r().captureMessage("Unhandled Promise error detected"))})})},t.id="Ember",t}();fa.Ember=VS});var vd=b(da=>{Object.defineProperty(da,"__esModule",{value:!0});var Ot=q(),gr=N(),WS=function(){function t(e){e===void 0&&(e={depth:3}),this._options=e,this.name=t.id}return t.prototype.setupOnce=function(e,r){e(function(n,i){var o=r().getIntegration(t);return o?o.enhanceEventWithErrorData(n,i):n})},t.prototype.enhanceEventWithErrorData=function(e,r){var n;if(!r||!r.originalException||!gr.isError(r.originalException))return e;var i=r.originalException.name||r.originalException.constructor.name,o=this._extractErrorData(r.originalException);if(o){var s=Ot.__assign({},e.contexts),a=gr.normalize(o,this._options.depth);return gr.isPlainObject(a)&&(s=Ot.__assign(Ot.__assign({},e.contexts),(n={},n[i]=Ot.__assign({},a),n))),Ot.__assign(Ot.__assign({},e),{contexts:s})}return e},t.prototype._extractErrorData=function(e){var r,n,i,o;try{var s=["name","message","stack","line","column","fileName","lineNumber","columnNumber","toJSON"],a={};try{for(var u=Ot.__values(Object.keys(e)),c=u.next();!c.done;c=u.next()){var l=c.value;if(s.indexOf(l)===-1){var d=e[l];a[l]=gr.isError(d)?d.toString():d}}}catch(T){r={error:T}}finally{try{c&&!c.done&&(n=u.return)&&n.call(u)}finally{if(r)throw r.error}}if(typeof e.toJSON=="function"){var h=e.toJSON();try{for(var _=Ot.__values(Object.keys(h)),S=_.next();!S.done;S=_.next()){var l=S.value,d=h[l];a[l]=gr.isError(d)?d.toString():d}}catch(T){i={error:T}}finally{try{S&&!S.done&&(o=_.return)&&o.call(_)}finally{if(i)throw i.error}}}return a}catch(T){gr.logger.error("Unable to extract extra data from the Error object:",T)}return null},t.id="ExtraErrorData",t}();da.ExtraErrorData=WS});var gd=b((_d,pa)=>{(function(t){if(typeof _d=="object"&&typeof pa!="undefined")pa.exports=t();else if(typeof define=="function"&&define.amd)define([],t);else{var e;typeof window!="undefined"?e=window:typeof global!="undefined"?e=global:typeof self!="undefined"?e=self:e=this,e.localforage=t()}})(function(){var t,e,r;return function n(i,o,s){function a(l,d){if(!o[l]){if(!i[l]){var h=typeof require=="function"&&require;if(!d&&h)return h(l,!0);if(u)return u(l,!0);var _=new Error("Cannot find module '"+l+"'");throw _.code="MODULE_NOT_FOUND",_}var S=o[l]={exports:{}};i[l][0].call(S.exports,function(T){var R=i[l][1][T];return a(R||T)},S,S.exports,n,i,o,s)}return o[l].exports}for(var u=typeof require=="function"&&require,c=0;c<s.length;c++)a(s[c]);return a}({1:[function(n,i,o){(function(s){"use strict";var a=s.MutationObserver||s.WebKitMutationObserver,u;if(a){var c=0,l=new a(T),d=s.document.createTextNode("");l.observe(d,{characterData:!0}),u=function(){d.data=c=++c%2}}else if(!s.setImmediate&&typeof s.MessageChannel!="undefined"){var h=new s.MessageChannel;h.port1.onmessage=T,u=function(){h.port2.postMessage(0)}}else"document"in s&&"onreadystatechange"in s.document.createElement("script")?u=function(){var A=s.document.createElement("script");A.onreadystatechange=function(){T(),A.onreadystatechange=null,A.parentNode.removeChild(A),A=null},s.document.documentElement.appendChild(A)}:u=function(){setTimeout(T,0)};var _,S=[];function T(){_=!0;for(var A,F,k=S.length;k;){for(F=S,S=[],A=-1;++A<k;)F[A]();k=S.length}_=!1}i.exports=R;function R(A){S.push(A)===1&&!_&&u()}}).call(this,typeof global!="undefined"?global:typeof self!="undefined"?self:typeof window!="undefined"?window:{})},{}],2:[function(n,i,o){"use strict";var s=n(1);function a(){}var u={},c=["REJECTED"],l=["FULFILLED"],d=["PENDING"];i.exports=h;function h(I){if(typeof I!="function")throw new TypeError("resolver must be a function");this.state=d,this.queue=[],this.outcome=void 0,I!==a&&R(this,I)}h.prototype.catch=function(I){return this.then(null,I)},h.prototype.then=function(I,G){if(typeof I!="function"&&this.state===l||typeof G!="function"&&this.state===c)return this;var L=new this.constructor(a);if(this.state!==d){var W=this.state===l?I:G;S(L,W,this.outcome)}else this.queue.push(new _(L,I,G));return L};function _(I,G,L){this.promise=I,typeof G=="function"&&(this.onFulfilled=G,this.callFulfilled=this.otherCallFulfilled),typeof L=="function"&&(this.onRejected=L,this.callRejected=this.otherCallRejected)}_.prototype.callFulfilled=function(I){u.resolve(this.promise,I)},_.prototype.otherCallFulfilled=function(I){S(this.promise,this.onFulfilled,I)},_.prototype.callRejected=function(I){u.reject(this.promise,I)},_.prototype.otherCallRejected=function(I){S(this.promise,this.onRejected,I)};function S(I,G,L){s(function(){var W;try{W=G(L)}catch(oe){return u.reject(I,oe)}W===I?u.reject(I,new TypeError("Cannot resolve promise with itself")):u.resolve(I,W)})}u.resolve=function(I,G){var L=A(T,G);if(L.status==="error")return u.reject(I,L.value);var W=L.value;if(W)R(I,W);else{I.state=l,I.outcome=G;for(var oe=-1,ye=I.queue.length;++oe<ye;)I.queue[oe].callFulfilled(G)}return I},u.reject=function(I,G){I.state=c,I.outcome=G;for(var L=-1,W=I.queue.length;++L<W;)I.queue[L].callRejected(G);return I};function T(I){var G=I&&I.then;if(I&&(typeof I=="object"||typeof I=="function")&&typeof G=="function")return function(){G.apply(I,arguments)}}function R(I,G){var L=!1;function W(Ie){L||(L=!0,u.reject(I,Ie))}function oe(Ie){L||(L=!0,u.resolve(I,Ie))}function ye(){G(oe,W)}var Re=A(ye);Re.status==="error"&&W(Re.value)}function A(I,G){var L={};try{L.value=I(G),L.status="success"}catch(W){L.status="error",L.value=W}return L}h.resolve=F;function F(I){return I instanceof this?I:u.resolve(new this(a),I)}h.reject=k;function k(I){var G=new this(a);return u.reject(G,I)}h.all=xe;function xe(I){var G=this;if(Object.prototype.toString.call(I)!=="[object Array]")return this.reject(new TypeError("must be an array"));var L=I.length,W=!1;if(!L)return this.resolve([]);for(var oe=new Array(L),ye=0,Re=-1,Ie=new this(a);++Re<L;)Je(I[Re],Re);return Ie;function Je(wr,sn){G.resolve(wr).then(Pi,function($t){W||(W=!0,u.reject(Ie,$t))});function Pi($t){oe[sn]=$t,++ye===L&&!W&&(W=!0,u.resolve(Ie,oe))}}}h.race=lt;function lt(I){var G=this;if(Object.prototype.toString.call(I)!=="[object Array]")return this.reject(new TypeError("must be an array"));var L=I.length,W=!1;if(!L)return this.resolve([]);for(var oe=-1,ye=new this(a);++oe<L;)Re(I[oe]);return ye;function Re(Ie){G.resolve(Ie).then(function(Je){W||(W=!0,u.resolve(ye,Je))},function(Je){W||(W=!0,u.reject(ye,Je))})}}},{"1":1}],3:[function(n,i,o){(function(s){"use strict";typeof s.Promise!="function"&&(s.Promise=n(2))}).call(this,typeof global!="undefined"?global:typeof self!="undefined"?self:typeof window!="undefined"?window:{})},{"2":2}],4:[function(n,i,o){"use strict";var s=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(f){return typeof f}:function(f){return f&&typeof Symbol=="function"&&f.constructor===Symbol&&f!==Symbol.prototype?"symbol":typeof f};function a(f,v){if(!(f instanceof v))throw new TypeError("Cannot call a class as a function")}function u(){try{if(typeof indexedDB!="undefined")return indexedDB;if(typeof webkitIndexedDB!="undefined")return webkitIndexedDB;if(typeof mozIndexedDB!="undefined")return mozIndexedDB;if(typeof OIndexedDB!="undefined")return OIndexedDB;if(typeof msIndexedDB!="undefined")return msIndexedDB}catch{return}}var c=u();function l(){try{if(!c||!c.open)return!1;var f=typeof openDatabase!="undefined"&&/(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)&&!/BlackBerry/.test(navigator.platform),v=typeof fetch=="function"&&fetch.toString().indexOf("[native code")!==-1;return(!f||v)&&typeof indexedDB!="undefined"&&typeof IDBKeyRange!="undefined"}catch{return!1}}function d(f,v){f=f||[],v=v||{};try{return new Blob(f,v)}catch(g){if(g.name!=="TypeError")throw g;for(var p=typeof BlobBuilder!="undefined"?BlobBuilder:typeof MSBlobBuilder!="undefined"?MSBlobBuilder:typeof MozBlobBuilder!="undefined"?MozBlobBuilder:WebKitBlobBuilder,m=new p,y=0;y<f.length;y+=1)m.append(f[y]);return m.getBlob(v.type)}}typeof Promise=="undefined"&&n(3);var h=Promise;function _(f,v){v&&f.then(function(p){v(null,p)},function(p){v(p)})}function S(f,v,p){typeof v=="function"&&f.then(v),typeof p=="function"&&f.catch(p)}function T(f){return typeof f!="string"&&(console.warn(f+" used as a key, but it is not a string."),f=String(f)),f}function R(){if(arguments.length&&typeof arguments[arguments.length-1]=="function")return arguments[arguments.length-1]}var A="local-forage-detect-blob-support",F=void 0,k={},xe=Object.prototype.toString,lt="readonly",I="readwrite";function G(f){for(var v=f.length,p=new ArrayBuffer(v),m=new Uint8Array(p),y=0;y<v;y++)m[y]=f.charCodeAt(y);return p}function L(f){return new h(function(v){var p=f.transaction(A,I),m=d([""]);p.objectStore(A).put(m,"key"),p.onabort=function(y){y.preventDefault(),y.stopPropagation(),v(!1)},p.oncomplete=function(){var y=navigator.userAgent.match(/Chrome\/(\d+)/),g=navigator.userAgent.match(/Edge\//);v(g||!y||parseInt(y[1],10)>=43)}}).catch(function(){return!1})}function W(f){return typeof F=="boolean"?h.resolve(F):L(f).then(function(v){return F=v,F})}function oe(f){var v=k[f.name],p={};p.promise=new h(function(m,y){p.resolve=m,p.reject=y}),v.deferredOperations.push(p),v.dbReady?v.dbReady=v.dbReady.then(function(){return p.promise}):v.dbReady=p.promise}function ye(f){var v=k[f.name],p=v.deferredOperations.pop();if(p)return p.resolve(),p.promise}function Re(f,v){var p=k[f.name],m=p.deferredOperations.pop();if(m)return m.reject(v),m.promise}function Ie(f,v){return new h(function(p,m){if(k[f.name]=k[f.name]||Wa(),f.db)if(v)oe(f),f.db.close();else return p(f.db);var y=[f.name];v&&y.push(f.version);var g=c.open.apply(c,y);v&&(g.onupgradeneeded=function(E){var w=g.result;try{w.createObjectStore(f.storeName),E.oldVersion<=1&&w.createObjectStore(A)}catch(O){if(O.name==="ConstraintError")console.warn('The database "'+f.name+'" has been upgraded from version '+E.oldVersion+" to version "+E.newVersion+', but the storage "'+f.storeName+'" already exists.');else throw O}}),g.onerror=function(E){E.preventDefault(),m(g.error)},g.onsuccess=function(){var E=g.result;E.onversionchange=function(w){w.target.close()},p(E),ye(f)}})}function Je(f){return Ie(f,!1)}function wr(f){return Ie(f,!0)}function sn(f,v){if(!f.db)return!0;var p=!f.db.objectStoreNames.contains(f.storeName),m=f.version<f.db.version,y=f.version>f.db.version;if(m&&(f.version!==v&&console.warn('The database "'+f.name+`" can't be downgraded from version `+f.db.version+" to version "+f.version+"."),f.version=f.db.version),y||p){if(p){var g=f.db.version+1;g>f.version&&(f.version=g)}return!0}return!1}function Pi(f){return new h(function(v,p){var m=new FileReader;m.onerror=p,m.onloadend=function(y){var g=btoa(y.target.result||"");v({__local_forage_encoded_blob:!0,data:g,type:f.type})},m.readAsBinaryString(f)})}function $t(f){var v=G(atob(f.data));return d([v],{type:f.type})}function Va(f){return f&&f.__local_forage_encoded_blob}function lp(f){var v=this,p=v._initReady().then(function(){var m=k[v._dbInfo.name];if(m&&m.dbReady)return m.dbReady});return S(p,f,f),p}function fp(f){oe(f);for(var v=k[f.name],p=v.forages,m=0;m<p.length;m++){var y=p[m];y._dbInfo.db&&(y._dbInfo.db.close(),y._dbInfo.db=null)}return f.db=null,Je(f).then(function(g){return f.db=g,sn(f)?wr(f):g}).then(function(g){f.db=v.db=g;for(var E=0;E<p.length;E++)p[E]._dbInfo.db=g}).catch(function(g){throw Re(f,g),g})}function Xe(f,v,p,m){m===void 0&&(m=1);try{var y=f.db.transaction(f.storeName,v);p(null,y)}catch(g){if(m>0&&(!f.db||g.name==="InvalidStateError"||g.name==="NotFoundError"))return h.resolve().then(function(){if(!f.db||g.name==="NotFoundError"&&!f.db.objectStoreNames.contains(f.storeName)&&f.version<=f.db.version)return f.db&&(f.version=f.db.version+1),wr(f)}).then(function(){return fp(f).then(function(){Xe(f,v,p,m-1)})}).catch(p);p(g)}}function Wa(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function dp(f){var v=this,p={db:null};if(f)for(var m in f)p[m]=f[m];var y=k[p.name];y||(y=Wa(),k[p.name]=y),y.forages.push(v),v._initReady||(v._initReady=v.ready,v.ready=lp);var g=[];function E(){return h.resolve()}for(var w=0;w<y.forages.length;w++){var O=y.forages[w];O!==v&&g.push(O._initReady().catch(E))}var C=y.forages.slice(0);return h.all(g).then(function(){return p.db=y.db,Je(p)}).then(function(x){return p.db=x,sn(p,v._defaultConfig.version)?wr(p):x}).then(function(x){p.db=y.db=x,v._dbInfo=p;for(var P=0;P<C.length;P++){var j=C[P];j!==v&&(j._dbInfo.db=p.db,j._dbInfo.version=p.version)}})}function pp(f,v){var p=this;f=T(f);var m=new h(function(y,g){p.ready().then(function(){Xe(p._dbInfo,lt,function(E,w){if(E)return g(E);try{var O=w.objectStore(p._dbInfo.storeName),C=O.get(f);C.onsuccess=function(){var x=C.result;x===void 0&&(x=null),Va(x)&&(x=$t(x)),y(x)},C.onerror=function(){g(C.error)}}catch(x){g(x)}})}).catch(g)});return _(m,v),m}function hp(f,v){var p=this,m=new h(function(y,g){p.ready().then(function(){Xe(p._dbInfo,lt,function(E,w){if(E)return g(E);try{var O=w.objectStore(p._dbInfo.storeName),C=O.openCursor(),x=1;C.onsuccess=function(){var P=C.result;if(P){var j=P.value;Va(j)&&(j=$t(j));var z=f(j,P.key,x++);z!==void 0?y(z):P.continue()}else y()},C.onerror=function(){g(C.error)}}catch(P){g(P)}})}).catch(g)});return _(m,v),m}function vp(f,v,p){var m=this;f=T(f);var y=new h(function(g,E){var w;m.ready().then(function(){return w=m._dbInfo,xe.call(v)==="[object Blob]"?W(w.db).then(function(O){return O?v:Pi(v)}):v}).then(function(O){Xe(m._dbInfo,I,function(C,x){if(C)return E(C);try{var P=x.objectStore(m._dbInfo.storeName);O===null&&(O=void 0);var j=P.put(O,f);x.oncomplete=function(){O===void 0&&(O=null),g(O)},x.onabort=x.onerror=function(){var z=j.error?j.error:j.transaction.error;E(z)}}catch(z){E(z)}})}).catch(E)});return _(y,p),y}function _p(f,v){var p=this;f=T(f);var m=new h(function(y,g){p.ready().then(function(){Xe(p._dbInfo,I,function(E,w){if(E)return g(E);try{var O=w.objectStore(p._dbInfo.storeName),C=O.delete(f);w.oncomplete=function(){y()},w.onerror=function(){g(C.error)},w.onabort=function(){var x=C.error?C.error:C.transaction.error;g(x)}}catch(x){g(x)}})}).catch(g)});return _(m,v),m}function gp(f){var v=this,p=new h(function(m,y){v.ready().then(function(){Xe(v._dbInfo,I,function(g,E){if(g)return y(g);try{var w=E.objectStore(v._dbInfo.storeName),O=w.clear();E.oncomplete=function(){m()},E.onabort=E.onerror=function(){var C=O.error?O.error:O.transaction.error;y(C)}}catch(C){y(C)}})}).catch(y)});return _(p,f),p}function mp(f){var v=this,p=new h(function(m,y){v.ready().then(function(){Xe(v._dbInfo,lt,function(g,E){if(g)return y(g);try{var w=E.objectStore(v._dbInfo.storeName),O=w.count();O.onsuccess=function(){m(O.result)},O.onerror=function(){y(O.error)}}catch(C){y(C)}})}).catch(y)});return _(p,f),p}function yp(f,v){var p=this,m=new h(function(y,g){if(f<0){y(null);return}p.ready().then(function(){Xe(p._dbInfo,lt,function(E,w){if(E)return g(E);try{var O=w.objectStore(p._dbInfo.storeName),C=!1,x=O.openKeyCursor();x.onsuccess=function(){var P=x.result;if(!P){y(null);return}f===0||C?y(P.key):(C=!0,P.advance(f))},x.onerror=function(){g(x.error)}}catch(P){g(P)}})}).catch(g)});return _(m,v),m}function bp(f){var v=this,p=new h(function(m,y){v.ready().then(function(){Xe(v._dbInfo,lt,function(g,E){if(g)return y(g);try{var w=E.objectStore(v._dbInfo.storeName),O=w.openKeyCursor(),C=[];O.onsuccess=function(){var x=O.result;if(!x){m(C);return}C.push(x.key),x.continue()},O.onerror=function(){y(O.error)}}catch(x){y(x)}})}).catch(y)});return _(p,f),p}function Sp(f,v){v=R.apply(this,arguments);var p=this.config();f=typeof f!="function"&&f||{},f.name||(f.name=f.name||p.name,f.storeName=f.storeName||p.storeName);var m=this,y;if(!f.name)y=h.reject("Invalid arguments");else{var g=f.name===p.name&&m._dbInfo.db,E=g?h.resolve(m._dbInfo.db):Je(f).then(function(w){var O=k[f.name],C=O.forages;O.db=w;for(var x=0;x<C.length;x++)C[x]._dbInfo.db=w;return w});f.storeName?y=E.then(function(w){if(!!w.objectStoreNames.contains(f.storeName)){var O=w.version+1;oe(f);var C=k[f.name],x=C.forages;w.close();for(var P=0;P<x.length;P++){var j=x[P];j._dbInfo.db=null,j._dbInfo.version=O}var z=new h(function($,Q){var J=c.open(f.name,O);J.onerror=function(Ae){var Cr=J.result;Cr.close(),Q(Ae)},J.onupgradeneeded=function(){var Ae=J.result;Ae.deleteObjectStore(f.storeName)},J.onsuccess=function(){var Ae=J.result;Ae.close(),$(Ae)}});return z.then(function($){C.db=$;for(var Q=0;Q<x.length;Q++){var J=x[Q];J._dbInfo.db=$,ye(J._dbInfo)}}).catch(function($){throw(Re(f,$)||h.resolve()).catch(function(){}),$})}}):y=E.then(function(w){oe(f);var O=k[f.name],C=O.forages;w.close();for(var x=0;x<C.length;x++){var P=C[x];P._dbInfo.db=null}var j=new h(function(z,$){var Q=c.deleteDatabase(f.name);Q.onerror=function(){var J=Q.result;J&&J.close(),$(Q.error)},Q.onblocked=function(){console.warn('dropInstance blocked for database "'+f.name+'" until all open connections are closed')},Q.onsuccess=function(){var J=Q.result;J&&J.close(),z(J)}});return j.then(function(z){O.db=z;for(var $=0;$<C.length;$++){var Q=C[$];ye(Q._dbInfo)}}).catch(function(z){throw(Re(f,z)||h.resolve()).catch(function(){}),z})})}return _(y,v),y}var Ep={_driver:"asyncStorage",_initStorage:dp,_support:l(),iterate:hp,getItem:pp,setItem:vp,removeItem:_p,clear:gp,length:mp,key:yp,keys:bp,dropInstance:Sp};function Tp(){return typeof openDatabase=="function"}var ft="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",wp="~~local_forage_type~",$a=/^~~local_forage_type~([^~]+)~/,an="__lfsc__:",Ni=an.length,qi="arbf",ki="blob",Ya="si08",Ka="ui08",Ja="uic8",Xa="si16",Qa="si32",Za="ur16",eu="ui32",tu="fl32",ru="fl64",nu=Ni+qi.length,iu=Object.prototype.toString;function ou(f){var v=f.length*.75,p=f.length,m,y=0,g,E,w,O;f[f.length-1]==="="&&(v--,f[f.length-2]==="="&&v--);var C=new ArrayBuffer(v),x=new Uint8Array(C);for(m=0;m<p;m+=4)g=ft.indexOf(f[m]),E=ft.indexOf(f[m+1]),w=ft.indexOf(f[m+2]),O=ft.indexOf(f[m+3]),x[y++]=g<<2|E>>4,x[y++]=(E&15)<<4|w>>2,x[y++]=(w&3)<<6|O&63;return C}function Di(f){var v=new Uint8Array(f),p="",m;for(m=0;m<v.length;m+=3)p+=ft[v[m]>>2],p+=ft[(v[m]&3)<<4|v[m+1]>>4],p+=ft[(v[m+1]&15)<<2|v[m+2]>>6],p+=ft[v[m+2]&63];return v.length%3===2?p=p.substring(0,p.length-1)+"=":v.length%3===1&&(p=p.substring(0,p.length-2)+"=="),p}function Op(f,v){var p="";if(f&&(p=iu.call(f)),f&&(p==="[object ArrayBuffer]"||f.buffer&&iu.call(f.buffer)==="[object ArrayBuffer]")){var m,y=an;f instanceof ArrayBuffer?(m=f,y+=qi):(m=f.buffer,p==="[object Int8Array]"?y+=Ya:p==="[object Uint8Array]"?y+=Ka:p==="[object Uint8ClampedArray]"?y+=Ja:p==="[object Int16Array]"?y+=Xa:p==="[object Uint16Array]"?y+=Za:p==="[object Int32Array]"?y+=Qa:p==="[object Uint32Array]"?y+=eu:p==="[object Float32Array]"?y+=tu:p==="[object Float64Array]"?y+=ru:v(new Error("Failed to get type for BinaryArray"))),v(y+Di(m))}else if(p==="[object Blob]"){var g=new FileReader;g.onload=function(){var E=wp+f.type+"~"+Di(this.result);v(an+ki+E)},g.readAsArrayBuffer(f)}else try{v(JSON.stringify(f))}catch(E){console.error("Couldn't convert value into a JSON string: ",f),v(null,E)}}function Cp(f){if(f.substring(0,Ni)!==an)return JSON.parse(f);var v=f.substring(nu),p=f.substring(Ni,nu),m;if(p===ki&&$a.test(v)){var y=v.match($a);m=y[1],v=v.substring(y[0].length)}var g=ou(v);switch(p){case qi:return g;case ki:return d([g],{type:m});case Ya:return new Int8Array(g);case Ka:return new Uint8Array(g);case Ja:return new Uint8ClampedArray(g);case Xa:return new Int16Array(g);case Za:return new Uint16Array(g);case Qa:return new Int32Array(g);case eu:return new Uint32Array(g);case tu:return new Float32Array(g);case ru:return new Float64Array(g);default:throw new Error("Unkown type: "+p)}}var Li={serialize:Op,deserialize:Cp,stringToBuffer:ou,bufferToString:Di};function su(f,v,p,m){f.executeSql("CREATE TABLE IF NOT EXISTS "+v.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],p,m)}function xp(f){var v=this,p={db:null};if(f)for(var m in f)p[m]=typeof f[m]!="string"?f[m].toString():f[m];var y=new h(function(g,E){try{p.db=openDatabase(p.name,String(p.version),p.description,p.size)}catch(w){return E(w)}p.db.transaction(function(w){su(w,p,function(){v._dbInfo=p,g()},function(O,C){E(C)})},E)});return p.serializer=Li,y}function dt(f,v,p,m,y,g){f.executeSql(p,m,y,function(E,w){w.code===w.SYNTAX_ERR?E.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[v.storeName],function(O,C){C.rows.length?g(O,w):su(O,v,function(){O.executeSql(p,m,y,g)},g)},g):g(E,w)},g)}function Rp(f,v){var p=this;f=T(f);var m=new h(function(y,g){p.ready().then(function(){var E=p._dbInfo;E.db.transaction(function(w){dt(w,E,"SELECT * FROM "+E.storeName+" WHERE key = ? LIMIT 1",[f],function(O,C){var x=C.rows.length?C.rows.item(0).value:null;x&&(x=E.serializer.deserialize(x)),y(x)},function(O,C){g(C)})})}).catch(g)});return _(m,v),m}function Ip(f,v){var p=this,m=new h(function(y,g){p.ready().then(function(){var E=p._dbInfo;E.db.transaction(function(w){dt(w,E,"SELECT * FROM "+E.storeName,[],function(O,C){for(var x=C.rows,P=x.length,j=0;j<P;j++){var z=x.item(j),$=z.value;if($&&($=E.serializer.deserialize($)),$=f($,z.key,j+1),$!==void 0){y($);return}}y()},function(O,C){g(C)})})}).catch(g)});return _(m,v),m}function au(f,v,p,m){var y=this;f=T(f);var g=new h(function(E,w){y.ready().then(function(){v===void 0&&(v=null);var O=v,C=y._dbInfo;C.serializer.serialize(v,function(x,P){P?w(P):C.db.transaction(function(j){dt(j,C,"INSERT OR REPLACE INTO "+C.storeName+" (key, value) VALUES (?, ?)",[f,x],function(){E(O)},function(z,$){w($)})},function(j){if(j.code===j.QUOTA_ERR){if(m>0){E(au.apply(y,[f,O,p,m-1]));return}w(j)}})})}).catch(w)});return _(g,p),g}function Ap(f,v,p){return au.apply(this,[f,v,p,1])}function Mp(f,v){var p=this;f=T(f);var m=new h(function(y,g){p.ready().then(function(){var E=p._dbInfo;E.db.transaction(function(w){dt(w,E,"DELETE FROM "+E.storeName+" WHERE key = ?",[f],function(){y()},function(O,C){g(C)})})}).catch(g)});return _(m,v),m}function Pp(f){var v=this,p=new h(function(m,y){v.ready().then(function(){var g=v._dbInfo;g.db.transaction(function(E){dt(E,g,"DELETE FROM "+g.storeName,[],function(){m()},function(w,O){y(O)})})}).catch(y)});return _(p,f),p}function Np(f){var v=this,p=new h(function(m,y){v.ready().then(function(){var g=v._dbInfo;g.db.transaction(function(E){dt(E,g,"SELECT COUNT(key) as c FROM "+g.storeName,[],function(w,O){var C=O.rows.item(0).c;m(C)},function(w,O){y(O)})})}).catch(y)});return _(p,f),p}function qp(f,v){var p=this,m=new h(function(y,g){p.ready().then(function(){var E=p._dbInfo;E.db.transaction(function(w){dt(w,E,"SELECT key FROM "+E.storeName+" WHERE id = ? LIMIT 1",[f+1],function(O,C){var x=C.rows.length?C.rows.item(0).key:null;y(x)},function(O,C){g(C)})})}).catch(g)});return _(m,v),m}function kp(f){var v=this,p=new h(function(m,y){v.ready().then(function(){var g=v._dbInfo;g.db.transaction(function(E){dt(E,g,"SELECT key FROM "+g.storeName,[],function(w,O){for(var C=[],x=0;x<O.rows.length;x++)C.push(O.rows.item(x).key);m(C)},function(w,O){y(O)})})}).catch(y)});return _(p,f),p}function Dp(f){return new h(function(v,p){f.transaction(function(m){m.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'",[],function(y,g){for(var E=[],w=0;w<g.rows.length;w++)E.push(g.rows.item(w).name);v({db:f,storeNames:E})},function(y,g){p(g)})},function(m){p(m)})})}function Lp(f,v){v=R.apply(this,arguments);var p=this.config();f=typeof f!="function"&&f||{},f.name||(f.name=f.name||p.name,f.storeName=f.storeName||p.storeName);var m=this,y;return f.name?y=new h(function(g){var E;f.name===p.name?E=m._dbInfo.db:E=openDatabase(f.name,"","",0),f.storeName?g({db:E,storeNames:[f.storeName]}):g(Dp(E))}).then(function(g){return new h(function(E,w){g.db.transaction(function(O){function C(z){return new h(function($,Q){O.executeSql("DROP TABLE IF EXISTS "+z,[],function(){$()},function(J,Ae){Q(Ae)})})}for(var x=[],P=0,j=g.storeNames.length;P<j;P++)x.push(C(g.storeNames[P]));h.all(x).then(function(){E()}).catch(function(z){w(z)})},function(O){w(O)})})}):y=h.reject("Invalid arguments"),_(y,v),y}var Fp={_driver:"webSQLStorage",_initStorage:xp,_support:Tp(),iterate:Ip,getItem:Rp,setItem:Ap,removeItem:Mp,clear:Pp,length:Np,key:qp,keys:kp,dropInstance:Lp};function jp(){try{return typeof localStorage!="undefined"&&"setItem"in localStorage&&!!localStorage.setItem}catch{return!1}}function uu(f,v){var p=f.name+"/";return f.storeName!==v.storeName&&(p+=f.storeName+"/"),p}function Up(){var f="_localforage_support_test";try{return localStorage.setItem(f,!0),localStorage.removeItem(f),!1}catch{return!0}}function Hp(){return!Up()||localStorage.length>0}function Bp(f){var v=this,p={};if(f)for(var m in f)p[m]=f[m];return p.keyPrefix=uu(f,v._defaultConfig),Hp()?(v._dbInfo=p,p.serializer=Li,h.resolve()):h.reject()}function Gp(f){var v=this,p=v.ready().then(function(){for(var m=v._dbInfo.keyPrefix,y=localStorage.length-1;y>=0;y--){var g=localStorage.key(y);g.indexOf(m)===0&&localStorage.removeItem(g)}});return _(p,f),p}function zp(f,v){var p=this;f=T(f);var m=p.ready().then(function(){var y=p._dbInfo,g=localStorage.getItem(y.keyPrefix+f);return g&&(g=y.serializer.deserialize(g)),g});return _(m,v),m}function Vp(f,v){var p=this,m=p.ready().then(function(){for(var y=p._dbInfo,g=y.keyPrefix,E=g.length,w=localStorage.length,O=1,C=0;C<w;C++){var x=localStorage.key(C);if(x.indexOf(g)===0){var P=localStorage.getItem(x);if(P&&(P=y.serializer.deserialize(P)),P=f(P,x.substring(E),O++),P!==void 0)return P}}});return _(m,v),m}function Wp(f,v){var p=this,m=p.ready().then(function(){var y=p._dbInfo,g;try{g=localStorage.key(f)}catch{g=null}return g&&(g=g.substring(y.keyPrefix.length)),g});return _(m,v),m}function $p(f){var v=this,p=v.ready().then(function(){for(var m=v._dbInfo,y=localStorage.length,g=[],E=0;E<y;E++){var w=localStorage.key(E);w.indexOf(m.keyPrefix)===0&&g.push(w.substring(m.keyPrefix.length))}return g});return _(p,f),p}function Yp(f){var v=this,p=v.keys().then(function(m){return m.length});return _(p,f),p}function Kp(f,v){var p=this;f=T(f);var m=p.ready().then(function(){var y=p._dbInfo;localStorage.removeItem(y.keyPrefix+f)});return _(m,v),m}function Jp(f,v,p){var m=this;f=T(f);var y=m.ready().then(function(){v===void 0&&(v=null);var g=v;return new h(function(E,w){var O=m._dbInfo;O.serializer.serialize(v,function(C,x){if(x)w(x);else try{localStorage.setItem(O.keyPrefix+f,C),E(g)}catch(P){(P.name==="QuotaExceededError"||P.name==="NS_ERROR_DOM_QUOTA_REACHED")&&w(P),w(P)}})})});return _(y,p),y}function Xp(f,v){if(v=R.apply(this,arguments),f=typeof f!="function"&&f||{},!f.name){var p=this.config();f.name=f.name||p.name,f.storeName=f.storeName||p.storeName}var m=this,y;return f.name?y=new h(function(g){f.storeName?g(uu(f,m._defaultConfig)):g(f.name+"/")}).then(function(g){for(var E=localStorage.length-1;E>=0;E--){var w=localStorage.key(E);w.indexOf(g)===0&&localStorage.removeItem(w)}}):y=h.reject("Invalid arguments"),_(y,v),y}var Qp={_driver:"localStorageWrapper",_initStorage:Bp,_support:jp(),iterate:Vp,getItem:zp,setItem:Jp,removeItem:Kp,clear:Gp,length:Yp,key:Wp,keys:$p,dropInstance:Xp},Zp=function(v,p){return v===p||typeof v=="number"&&typeof p=="number"&&isNaN(v)&&isNaN(p)},eh=function(v,p){for(var m=v.length,y=0;y<m;){if(Zp(v[y],p))return!0;y++}return!1},cu=Array.isArray||function(f){return Object.prototype.toString.call(f)==="[object Array]"},Or={},lu={},Yt={INDEXEDDB:Ep,WEBSQL:Fp,LOCALSTORAGE:Qp},th=[Yt.INDEXEDDB._driver,Yt.WEBSQL._driver,Yt.LOCALSTORAGE._driver],un=["dropInstance"],Fi=["clear","getItem","iterate","key","keys","length","removeItem","setItem"].concat(un),rh={description:"",driver:th.slice(),name:"localforage",size:4980736,storeName:"keyvaluepairs",version:1};function nh(f,v){f[v]=function(){var p=arguments;return f.ready().then(function(){return f[v].apply(f,p)})}}function ji(){for(var f=1;f<arguments.length;f++){var v=arguments[f];if(v)for(var p in v)v.hasOwnProperty(p)&&(cu(v[p])?arguments[0][p]=v[p].slice():arguments[0][p]=v[p])}return arguments[0]}var ih=function(){function f(v){a(this,f);for(var p in Yt)if(Yt.hasOwnProperty(p)){var m=Yt[p],y=m._driver;this[p]=y,Or[y]||this.defineDriver(m)}this._defaultConfig=ji({},rh),this._config=ji({},this._defaultConfig,v),this._driverSet=null,this._initDriver=null,this._ready=!1,this._dbInfo=null,this._wrapLibraryMethodsWithReady(),this.setDriver(this._config.driver).catch(function(){})}return f.prototype.config=function(p){if((typeof p=="undefined"?"undefined":s(p))==="object"){if(this._ready)return new Error("Can't call config() after localforage has been used.");for(var m in p){if(m==="storeName"&&(p[m]=p[m].replace(/\W/g,"_")),m==="version"&&typeof p[m]!="number")return new Error("Database version must be a number.");this._config[m]=p[m]}return"driver"in p&&p.driver?this.setDriver(this._config.driver):!0}else return typeof p=="string"?this._config[p]:this._config},f.prototype.defineDriver=function(p,m,y){var g=new h(function(E,w){try{var O=p._driver,C=new Error("Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver");if(!p._driver){w(C);return}for(var x=Fi.concat("_initStorage"),P=0,j=x.length;P<j;P++){var z=x[P],$=!eh(un,z);if(($||p[z])&&typeof p[z]!="function"){w(C);return}}var Q=function(){for(var Cr=function(ah){return function(){var uh=new Error("Method "+ah+" is not implemented by the current driver"),fu=h.reject(uh);return _(fu,arguments[arguments.length-1]),fu}},Ui=0,sh=un.length;Ui<sh;Ui++){var Hi=un[Ui];p[Hi]||(p[Hi]=Cr(Hi))}};Q();var J=function(Cr){Or[O]&&console.info("Redefining LocalForage driver: "+O),Or[O]=p,lu[O]=Cr,E()};"_support"in p?p._support&&typeof p._support=="function"?p._support().then(J,w):J(!!p._support):J(!0)}catch(Ae){w(Ae)}});return S(g,m,y),g},f.prototype.driver=function(){return this._driver||null},f.prototype.getDriver=function(p,m,y){var g=Or[p]?h.resolve(Or[p]):h.reject(new Error("Driver not found."));return S(g,m,y),g},f.prototype.getSerializer=function(p){var m=h.resolve(Li);return S(m,p),m},f.prototype.ready=function(p){var m=this,y=m._driverSet.then(function(){return m._ready===null&&(m._ready=m._initDriver()),m._ready});return S(y,p,p),y},f.prototype.setDriver=function(p,m,y){var g=this;cu(p)||(p=[p]);var E=this._getSupportedDrivers(p);function w(){g._config.driver=g.driver()}function O(P){return g._extend(P),w(),g._ready=g._initStorage(g._config),g._ready}function C(P){return function(){var j=0;function z(){for(;j<P.length;){var $=P[j];return j++,g._dbInfo=null,g._ready=null,g.getDriver($).then(O).catch(z)}w();var Q=new Error("No available storage method found.");return g._driverSet=h.reject(Q),g._driverSet}return z()}}var x=this._driverSet!==null?this._driverSet.catch(function(){return h.resolve()}):h.resolve();return this._driverSet=x.then(function(){var P=E[0];return g._dbInfo=null,g._ready=null,g.getDriver(P).then(function(j){g._driver=j._driver,w(),g._wrapLibraryMethodsWithReady(),g._initDriver=C(E)})}).catch(function(){w();var P=new Error("No available storage method found.");return g._driverSet=h.reject(P),g._driverSet}),S(this._driverSet,m,y),this._driverSet},f.prototype.supports=function(p){return!!lu[p]},f.prototype._extend=function(p){ji(this,p)},f.prototype._getSupportedDrivers=function(p){for(var m=[],y=0,g=p.length;y<g;y++){var E=p[y];this.supports(E)&&m.push(E)}return m},f.prototype._wrapLibraryMethodsWithReady=function(){for(var p=0,m=Fi.length;p<m;p++)nh(this,Fi[p])},f.prototype.createInstance=function(p){return new f(p)},f}(),oh=new ih;i.exports=oh},{"3":3}]},{},[4])(4)})});var md=b(ha=>{Object.defineProperty(ha,"__esModule",{value:!0});var He=q(),at=N(),$S=He.__importDefault(gd()),YS=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this.global=at.getGlobalObject(),this.maxStoredEvents=e.maxStoredEvents||30,this.offlineEventStore=$S.default.createInstance({name:"sentry/offlineEventStore"})}return t.prototype.setupOnce=function(e,r){var n=this;this.hub=r(),"addEventListener"in this.global&&this.global.addEventListener("online",function(){n._sendEvents().catch(function(){at.logger.warn("could not send cached events")})}),e(function(i){return n.hub&&n.hub.getIntegration(t)&&"navigator"in n.global&&"onLine"in n.global.navigator&&!n.global.navigator.onLine?(n._cacheEvent(i).then(function(o){return n._enforceMaxEvents()}).catch(function(o){at.logger.warn("could not cache event while offline")}),null):i}),"navigator"in this.global&&"onLine"in this.global.navigator&&this.global.navigator.onLine&&this._sendEvents().catch(function(){at.logger.warn("could not send cached events")})},t.prototype._cacheEvent=function(e){return He.__awaiter(this,void 0,void 0,function(){return He.__generator(this,function(r){return[2,this.offlineEventStore.setItem(at.uuid4(),at.normalize(e))]})})},t.prototype._enforceMaxEvents=function(){return He.__awaiter(this,void 0,void 0,function(){var e,r=this;return He.__generator(this,function(n){return e=[],[2,this.offlineEventStore.iterate(function(i,o,s){e.push({cacheKey:o,event:i})}).then(function(){return r._purgeEvents(e.sort(function(i,o){return(o.event.timestamp||0)-(i.event.timestamp||0)}).slice(r.maxStoredEvents<e.length?r.maxStoredEvents:e.length).map(function(i){return i.cacheKey}))}).catch(function(i){at.logger.warn("could not enforce max events")})]})})},t.prototype._purgeEvent=function(e){return He.__awaiter(this,void 0,void 0,function(){return He.__generator(this,function(r){return[2,this.offlineEventStore.removeItem(e)]})})},t.prototype._purgeEvents=function(e){return He.__awaiter(this,void 0,void 0,function(){var r=this;return He.__generator(this,function(n){return[2,Promise.all(e.map(function(i){return r._purgeEvent(i)})).then()]})})},t.prototype._sendEvents=function(){return He.__awaiter(this,void 0,void 0,function(){var e=this;return He.__generator(this,function(r){return[2,this.offlineEventStore.iterate(function(n,i,o){e.hub?(e.hub.captureEvent(n),e._purgeEvent(i).catch(function(s){at.logger.warn("could not purge event from cache")})):at.logger.warn("no hub found - could not send cached event")})]})})},t.id="Offline",t}();ha.Offline=YS});var bd=b(va=>{Object.defineProperty(va,"__esModule",{value:!0});var KS=q(),yd=N(),JS=function(){function t(e){e===void 0&&(e={types:["crash","deprecation","intervention"]}),this._options=e,this.name=t.id}return t.prototype.setupOnce=function(e,r){if(!!yd.supportsReportingObserver()){this._getCurrentHub=r;var n=new(yd.getGlobalObject()).ReportingObserver(this.handler.bind(this),{buffered:!0,types:this._options.types});n.observe()}},t.prototype.handler=function(e){var r,n,i=this._getCurrentHub&&this._getCurrentHub();if(!(!i||!i.getIntegration(t))){var o=function(c){i.withScope(function(l){l.setExtra("url",c.url);var d="ReportingObserver ["+c.type+"]",h="No details available";if(c.body){var _={};for(var S in c.body)_[S]=c.body[S];if(l.setExtra("body",_),c.type==="crash"){var T=c.body;h=[T.crashId||"",T.reason||""].join(" ").trim()||h}else{var T=c.body;h=T.message||h}}i.captureMessage(d+": "+h)})};try{for(var s=KS.__values(e),a=s.next();!a.done;a=s.next()){var u=a.value;o(u)}}catch(c){r={error:c}}finally{try{a&&!a.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}}},t.id="ReportingObserver",t}();va.ReportingObserver=JS});var Ed=b(_a=>{Object.defineProperty(_a,"__esModule",{value:!0});var Ye=q(),Sd=N(),XS=function(){function t(e){var r=this;e===void 0&&(e={}),this.name=t.id,this._prefix="app:///",this._iteratee=function(n){if(!n.filename)return n;var i=/^[A-Z]:\\/.test(n.filename),o=/^\//.test(n.filename);if(i||o){var s=i?n.filename.replace(/^[A-Z]:/,"").replace(/\\/g,"/"):n.filename,a=r._root?Sd.relative(r._root,s):Sd.basename(s);n.filename=""+r._prefix+a}return n},e.root&&(this._root=e.root),e.prefix&&(this._prefix=e.prefix),e.iteratee&&(this._iteratee=e.iteratee)}return t.prototype.setupOnce=function(e,r){e(function(n){var i=r().getIntegration(t);return i?i.process(n):n})},t.prototype.process=function(e){var r=e;return e.exception&&Array.isArray(e.exception.values)&&(r=this._processExceptionsEvent(r)),e.stacktrace&&(r=this._processStacktraceEvent(r)),r},t.prototype._processExceptionsEvent=function(e){var r=this;try{return Ye.__assign(Ye.__assign({},e),{exception:Ye.__assign(Ye.__assign({},e.exception),{values:e.exception.values.map(function(n){return Ye.__assign(Ye.__assign({},n),{stacktrace:r._processStacktrace(n.stacktrace)})})})})}catch{return e}},t.prototype._processStacktraceEvent=function(e){try{return Ye.__assign(Ye.__assign({},e),{stacktrace:this._processStacktrace(e.stacktrace)})}catch{return e}},t.prototype._processStacktrace=function(e){var r=this;return Ye.__assign(Ye.__assign({},e),{frames:e&&e.frames&&e.frames.map(function(n){return r._iteratee(n)})})},t.id="RewriteFrames",t}();_a.RewriteFrames=XS});var Td=b(ga=>{Object.defineProperty(ga,"__esModule",{value:!0});var Ti=q(),QS=function(){function t(){this.name=t.id,this._startTime=Date.now()}return t.prototype.setupOnce=function(e,r){e(function(n){var i=r().getIntegration(t);return i?i.process(n):n})},t.prototype.process=function(e){var r,n=Date.now();return Ti.__assign(Ti.__assign({},e),{extra:Ti.__assign(Ti.__assign({},e.extra),(r={},r["session:start"]=this._startTime,r["session:duration"]=n-this._startTime,r["session:end"]=n,r))})},t.id="SessionTiming",t}();ga.SessionTiming=QS});var wd=b(ma=>{Object.defineProperty(ma,"__esModule",{value:!0});var ZS=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(e,r){e(function(n){var i=r().getIntegration(t);return i?i.process(n):n})},t.prototype.process=function(e){for(var r=this._getFramesFromEvent(e),n=r.length-1;n>=0;n--){var i=r[n];if(i.in_app===!0){e.transaction=this._getTransaction(i);break}}return e},t.prototype._getFramesFromEvent=function(e){var r=e.exception&&e.exception.values&&e.exception.values[0];return r&&r.stacktrace&&r.stacktrace.frames||[]},t.prototype._getTransaction=function(e){return e.module||e.function?(e.module||"?")+"/"+(e.function||"?"):"<unknown>"},t.id="Transaction",t}();ma.Transaction=ZS});var xd=b(Oi=>{Object.defineProperty(Oi,"__esModule",{value:!0});var wi=q(),ut=N(),ya={id:"Tracing"},eE={id:"BrowserTracing"},ba="ui.vue",tE={activate:["activated","deactivated"],create:["beforeCreate","created"],destroy:["beforeDestroy","destroyed"],mount:["beforeMount","mounted"],update:["beforeUpdate","updated"]},rE=/(?:^|[-_/])(\w)/g,Od="root",Sa="anonymous component",nE=function(){function t(e){var r=this;this.name=t.id,this._componentsCache={},this._applyTracingHooks=function(n,i){if(!n.$options.$_sentryPerfHook){n.$options.$_sentryPerfHook=!0;var o=r._getComponentName(n),s=o===Od,a={},u=function(l){var d=ut.timestampWithMs();r._rootSpan?r._finishRootSpan(d,i):n.$once("hook:"+l,function(){var h=i().getIntegration(ya);if(h){r._tracingActivity=h.constructor.pushActivity("Vue Application Render");var _=h.constructor.getTransaction();_&&(r._rootSpan=_.startChild({description:"Application Render",op:ba}))}else{var S=Cd(i());S&&(r._rootSpan=S.startChild({description:"Application Render",op:ba}))}})},c=function(l,d){var h=Array.isArray(r._options.tracingOptions.trackComponents)?r._options.tracingOptions.trackComponents.indexOf(o)>-1:r._options.tracingOptions.trackComponents;if(!(!r._rootSpan||!h)){var _=ut.timestampWithMs(),S=a[d];S?(S.finish(),r._finishRootSpan(_,i)):n.$once("hook:"+l,function(){r._rootSpan&&(a[d]=r._rootSpan.startChild({description:"Vue <"+o+">",op:ba+"."+d}))})}};r._options.tracingOptions.hooks.forEach(function(l){var d=tE[l];if(!d){ut.logger.warn("Unknown hook: "+l);return}d.forEach(function(h){var _=s?u.bind(r,h):c.bind(r,h,l),S=n.$options[h];Array.isArray(S)?n.$options[h]=wi.__spread([_],S):typeof S=="function"?n.$options[h]=[_,S]:n.$options[h]=[_]})})}},ut.logger.log("You are still using the Vue.js integration, consider moving to @sentry/vue"),this._options=wi.__assign(wi.__assign({Vue:ut.getGlobalObject().Vue,attachProps:!0,logErrors:!1,tracing:!1},e),{tracingOptions:wi.__assign({hooks:["mount","update"],timeout:2e3,trackComponents:!1},e.tracingOptions)})}return t.prototype.setupOnce=function(e,r){if(!this._options.Vue){ut.logger.error("Vue integration is missing a Vue instance");return}this._attachErrorHandler(r),this._options.tracing&&this._startTracing(r)},t.prototype._getComponentName=function(e){if(!e)return Sa;if(e.$root===e)return Od;if(!e.$options)return Sa;if(e.$options.name)return e.$options.name;if(e.$options._componentTag)return e.$options._componentTag;if(e.$options.__file){var r=e.$options.__file.replace(/^[a-zA-Z]:/,"").replace(/\\/g,"/"),n=ut.basename(r,".vue");return this._componentsCache[n]||(this._componentsCache[n]=n.replace(rE,function(i,o){return o?o.toUpperCase():""}))}return Sa},t.prototype._finishRootSpan=function(e,r){var n=this;this._rootSpanTimer&&clearTimeout(this._rootSpanTimer),this._rootSpanTimer=setTimeout(function(){if(n._tracingActivity){var i=r().getIntegration(ya);i&&i.constructor.popActivity(n._tracingActivity)}n._rootSpan&&n._rootSpan.finish(e)},this._options.tracingOptions.timeout)},t.prototype._startTracing=function(e){var r=this._applyTracingHooks;this._options.Vue.mixin({beforeCreate:function(){e().getIntegration(ya)||e().getIntegration(eE)?r(this,e):ut.logger.error("Vue integration has tracing enabled, but Tracing integration is not configured")}})},t.prototype._attachErrorHandler=function(e){var r=this,n=this._options.Vue.config.errorHandler;this._options.Vue.config.errorHandler=function(i,o,s){var a={};if(o)try{a.componentName=r._getComponentName(o),r._options.attachProps&&(a.propsData=o.$options.propsData)}catch{ut.logger.warn("Unable to extract metadata from Vue component.")}s&&(a.lifecycleHook=s),e().getIntegration(t)&&setTimeout(function(){e().withScope(function(u){u.setContext("vue",a),e().captureException(i)})}),typeof n=="function"&&n.call(r._options.Vue,i,o,s),r._options.logErrors&&(r._options.Vue.util&&r._options.Vue.util.warn("Error in "+s+': "'+(i&&i.toString())+'"',o),console.error(i))}},t.id="Vue",t}();Oi.Vue=nE;function Cd(t){if(t&&t.getScope){var e=t.getScope();if(e)return e.getTransaction()}}Oi.getActiveTransaction=Cd});var Rd=b(me=>{Object.defineProperty(me,"__esModule",{value:!0});var iE=ld();me.Angular=iE.Angular;var oE=fd();me.CaptureConsole=oE.CaptureConsole;var sE=dd();me.Debug=sE.Debug;var aE=pd();me.Dedupe=aE.Dedupe;var uE=hd();me.Ember=uE.Ember;var cE=vd();me.ExtraErrorData=cE.ExtraErrorData;var lE=md();me.Offline=lE.Offline;var fE=bd();me.ReportingObserver=fE.ReportingObserver;var dE=Ed();me.RewriteFrames=dE.RewriteFrames;var pE=Td();me.SessionTiming=pE.SessionTiming;var hE=wd();me.Transaction=hE.Transaction;var vE=xd();me.Vue=vE.Vue});var Ad=b(Ea=>{var Id="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");Ea.encode=function(t){if(0<=t&&t<Id.length)return Id[t];throw new TypeError("Must be between 0 and 63: "+t)};Ea.decode=function(t){var e=65,r=90,n=97,i=122,o=48,s=57,a=43,u=47,c=26,l=52;return e<=t&&t<=r?t-e:n<=t&&t<=i?t-n+c:o<=t&&t<=s?t-o+l:t==a?62:t==u?63:-1}});var Oa=b(wa=>{var Md=Ad(),Ta=5,Pd=1<<Ta,Nd=Pd-1,qd=Pd;function _E(t){return t<0?(-t<<1)+1:(t<<1)+0}function gE(t){var e=(t&1)===1,r=t>>1;return e?-r:r}wa.encode=function(e){var r="",n,i=_E(e);do n=i&Nd,i>>>=Ta,i>0&&(n|=qd),r+=Md.encode(n);while(i>0);return r};wa.decode=function(e,r,n){var i=e.length,o=0,s=0,a,u;do{if(r>=i)throw new Error("Expected more digits in base 64 VLQ value.");if(u=Md.decode(e.charCodeAt(r++)),u===-1)throw new Error("Invalid base64 digit: "+e.charAt(r-1));a=!!(u&qd),u&=Nd,o=o+(u<<s),s+=Ta}while(a);n.value=gE(o),n.rest=r}});var br=b(pe=>{function mE(t,e,r){if(e in t)return t[e];if(arguments.length===3)return r;throw new Error('"'+e+'" is a required argument.')}pe.getArg=mE;var kd=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/,yE=/^data:.+\,.+$/;function en(t){var e=t.match(kd);return e?{scheme:e[1],auth:e[2],host:e[3],port:e[4],path:e[5]}:null}pe.urlParse=en;function mr(t){var e="";return t.scheme&&(e+=t.scheme+":"),e+="//",t.auth&&(e+=t.auth+"@"),t.host&&(e+=t.host),t.port&&(e+=":"+t.port),t.path&&(e+=t.path),e}pe.urlGenerate=mr;function Ca(t){var e=t,r=en(t);if(r){if(!r.path)return t;e=r.path}for(var n=pe.isAbsolute(e),i=e.split(/\/+/),o,s=0,a=i.length-1;a>=0;a--)o=i[a],o==="."?i.splice(a,1):o===".."?s++:s>0&&(o===""?(i.splice(a+1,s),s=0):(i.splice(a,2),s--));return e=i.join("/"),e===""&&(e=n?"/":"."),r?(r.path=e,mr(r)):e}pe.normalize=Ca;function Dd(t,e){t===""&&(t="."),e===""&&(e=".");var r=en(e),n=en(t);if(n&&(t=n.path||"/"),r&&!r.scheme)return n&&(r.scheme=n.scheme),mr(r);if(r||e.match(yE))return e;if(n&&!n.host&&!n.path)return n.host=e,mr(n);var i=e.charAt(0)==="/"?e:Ca(t.replace(/\/+$/,"")+"/"+e);return n?(n.path=i,mr(n)):i}pe.join=Dd;pe.isAbsolute=function(t){return t.charAt(0)==="/"||kd.test(t)};function bE(t,e){t===""&&(t="."),t=t.replace(/\/$/,"");for(var r=0;e.indexOf(t+"/")!==0;){var n=t.lastIndexOf("/");if(n<0||(t=t.slice(0,n),t.match(/^([^\/]+:\/)?\/*$/)))return e;++r}return Array(r+1).join("../")+e.substr(t.length+1)}pe.relative=bE;var Ld=function(){var t=Object.create(null);return!("__proto__"in t)}();function Fd(t){return t}function SE(t){return jd(t)?"$"+t:t}pe.toSetString=Ld?Fd:SE;function EE(t){return jd(t)?t.slice(1):t}pe.fromSetString=Ld?Fd:EE;function jd(t){if(!t)return!1;var e=t.length;if(e<9||t.charCodeAt(e-1)!==95||t.charCodeAt(e-2)!==95||t.charCodeAt(e-3)!==111||t.charCodeAt(e-4)!==116||t.charCodeAt(e-5)!==111||t.charCodeAt(e-6)!==114||t.charCodeAt(e-7)!==112||t.charCodeAt(e-8)!==95||t.charCodeAt(e-9)!==95)return!1;for(var r=e-10;r>=0;r--)if(t.charCodeAt(r)!==36)return!1;return!0}function TE(t,e,r){var n=yr(t.source,e.source);return n!==0||(n=t.originalLine-e.originalLine,n!==0)||(n=t.originalColumn-e.originalColumn,n!==0||r)||(n=t.generatedColumn-e.generatedColumn,n!==0)||(n=t.generatedLine-e.generatedLine,n!==0)?n:yr(t.name,e.name)}pe.compareByOriginalPositions=TE;function wE(t,e,r){var n=t.generatedLine-e.generatedLine;return n!==0||(n=t.generatedColumn-e.generatedColumn,n!==0||r)||(n=yr(t.source,e.source),n!==0)||(n=t.originalLine-e.originalLine,n!==0)||(n=t.originalColumn-e.originalColumn,n!==0)?n:yr(t.name,e.name)}pe.compareByGeneratedPositionsDeflated=wE;function yr(t,e){return t===e?0:t===null?1:e===null?-1:t>e?1:-1}function OE(t,e){var r=t.generatedLine-e.generatedLine;return r!==0||(r=t.generatedColumn-e.generatedColumn,r!==0)||(r=yr(t.source,e.source),r!==0)||(r=t.originalLine-e.originalLine,r!==0)||(r=t.originalColumn-e.originalColumn,r!==0)?r:yr(t.name,e.name)}pe.compareByGeneratedPositionsInflated=OE;function CE(t){return JSON.parse(t.replace(/^\)]}'[^\n]*\n/,""))}pe.parseSourceMapInput=CE;function xE(t,e,r){if(e=e||"",t&&(t[t.length-1]!=="/"&&e[0]!=="/"&&(t+="/"),e=t+e),r){var n=en(r);if(!n)throw new Error("sourceMapURL could not be parsed");if(n.path){var i=n.path.lastIndexOf("/");i>=0&&(n.path=n.path.substring(0,i+1))}e=Dd(mr(n),e)}return Ca(e)}pe.computeSourceURL=xE});var Ia=b(Ud=>{var xa=br(),Ra=Object.prototype.hasOwnProperty,Gt=typeof Map!="undefined";function ct(){this._array=[],this._set=Gt?new Map:Object.create(null)}ct.fromArray=function(e,r){for(var n=new ct,i=0,o=e.length;i<o;i++)n.add(e[i],r);return n};ct.prototype.size=function(){return Gt?this._set.size:Object.getOwnPropertyNames(this._set).length};ct.prototype.add=function(e,r){var n=Gt?e:xa.toSetString(e),i=Gt?this.has(e):Ra.call(this._set,n),o=this._array.length;(!i||r)&&this._array.push(e),i||(Gt?this._set.set(e,o):this._set[n]=o)};ct.prototype.has=function(e){if(Gt)return this._set.has(e);var r=xa.toSetString(e);return Ra.call(this._set,r)};ct.prototype.indexOf=function(e){if(Gt){var r=this._set.get(e);if(r>=0)return r}else{var n=xa.toSetString(e);if(Ra.call(this._set,n))return this._set[n]}throw new Error('"'+e+'" is not in the set.')};ct.prototype.at=function(e){if(e>=0&&e<this._array.length)return this._array[e];throw new Error("No element indexed by "+e)};ct.prototype.toArray=function(){return this._array.slice()};Ud.ArraySet=ct});var Gd=b(Bd=>{var Hd=br();function RE(t,e){var r=t.generatedLine,n=e.generatedLine,i=t.generatedColumn,o=e.generatedColumn;return n>r||n==r&&o>=i||Hd.compareByGeneratedPositionsInflated(t,e)<=0}function Ci(){this._array=[],this._sorted=!0,this._last={generatedLine:-1,generatedColumn:0}}Ci.prototype.unsortedForEach=function(e,r){this._array.forEach(e,r)};Ci.prototype.add=function(e){RE(this._last,e)?(this._last=e,this._array.push(e)):(this._sorted=!1,this._array.push(e))};Ci.prototype.toArray=function(){return this._sorted||(this._array.sort(Hd.compareByGeneratedPositionsInflated),this._sorted=!0),this._array};Bd.MappingList=Ci});var Aa=b(zd=>{var tn=Oa(),ee=br(),xi=Ia().ArraySet,IE=Gd().MappingList;function ke(t){t||(t={}),this._file=ee.getArg(t,"file",null),this._sourceRoot=ee.getArg(t,"sourceRoot",null),this._skipValidation=ee.getArg(t,"skipValidation",!1),this._sources=new xi,this._names=new xi,this._mappings=new IE,this._sourcesContents=null}ke.prototype._version=3;ke.fromSourceMap=function(e){var r=e.sourceRoot,n=new ke({file:e.file,sourceRoot:r});return e.eachMapping(function(i){var o={generated:{line:i.generatedLine,column:i.generatedColumn}};i.source!=null&&(o.source=i.source,r!=null&&(o.source=ee.relative(r,o.source)),o.original={line:i.originalLine,column:i.originalColumn},i.name!=null&&(o.name=i.name)),n.addMapping(o)}),e.sources.forEach(function(i){var o=i;r!==null&&(o=ee.relative(r,i)),n._sources.has(o)||n._sources.add(o);var s=e.sourceContentFor(i);s!=null&&n.setSourceContent(i,s)}),n};ke.prototype.addMapping=function(e){var r=ee.getArg(e,"generated"),n=ee.getArg(e,"original",null),i=ee.getArg(e,"source",null),o=ee.getArg(e,"name",null);this._skipValidation||this._validateMapping(r,n,i,o),i!=null&&(i=String(i),this._sources.has(i)||this._sources.add(i)),o!=null&&(o=String(o),this._names.has(o)||this._names.add(o)),this._mappings.add({generatedLine:r.line,generatedColumn:r.column,originalLine:n!=null&&n.line,originalColumn:n!=null&&n.column,source:i,name:o})};ke.prototype.setSourceContent=function(e,r){var n=e;this._sourceRoot!=null&&(n=ee.relative(this._sourceRoot,n)),r!=null?(this._sourcesContents||(this._sourcesContents=Object.create(null)),this._sourcesContents[ee.toSetString(n)]=r):this._sourcesContents&&(delete this._sourcesContents[ee.toSetString(n)],Object.keys(this._sourcesContents).length===0&&(this._sourcesContents=null))};ke.prototype.applySourceMap=function(e,r,n){var i=r;if(r==null){if(e.file==null)throw new Error(`SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, or the source map's "file" property. Both were omitted.`);i=e.file}var o=this._sourceRoot;o!=null&&(i=ee.relative(o,i));var s=new xi,a=new xi;this._mappings.unsortedForEach(function(u){if(u.source===i&&u.originalLine!=null){var c=e.originalPositionFor({line:u.originalLine,column:u.originalColumn});c.source!=null&&(u.source=c.source,n!=null&&(u.source=ee.join(n,u.source)),o!=null&&(u.source=ee.relative(o,u.source)),u.originalLine=c.line,u.originalColumn=c.column,c.name!=null&&(u.name=c.name))}var l=u.source;l!=null&&!s.has(l)&&s.add(l);var d=u.name;d!=null&&!a.has(d)&&a.add(d)},this),this._sources=s,this._names=a,e.sources.forEach(function(u){var c=e.sourceContentFor(u);c!=null&&(n!=null&&(u=ee.join(n,u)),o!=null&&(u=ee.relative(o,u)),this.setSourceContent(u,c))},this)};ke.prototype._validateMapping=function(e,r,n,i){if(r&&typeof r.line!="number"&&typeof r.column!="number")throw new Error("original.line and original.column are not numbers -- you probably meant to omit the original mapping entirely and only map the generated position. If so, pass null for the original mapping instead of an object with empty or null values.");if(!(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0&&!r&&!n&&!i)){if(e&&"line"in e&&"column"in e&&r&&"line"in r&&"column"in r&&e.line>0&&e.column>=0&&r.line>0&&r.column>=0&&n)return;throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:n,original:r,name:i}))}};ke.prototype._serializeMappings=function(){for(var e=0,r=1,n=0,i=0,o=0,s=0,a="",u,c,l,d,h=this._mappings.toArray(),_=0,S=h.length;_<S;_++){if(c=h[_],u="",c.generatedLine!==r)for(e=0;c.generatedLine!==r;)u+=";",r++;else if(_>0){if(!ee.compareByGeneratedPositionsInflated(c,h[_-1]))continue;u+=","}u+=tn.encode(c.generatedColumn-e),e=c.generatedColumn,c.source!=null&&(d=this._sources.indexOf(c.source),u+=tn.encode(d-s),s=d,u+=tn.encode(c.originalLine-1-i),i=c.originalLine-1,u+=tn.encode(c.originalColumn-n),n=c.originalColumn,c.name!=null&&(l=this._names.indexOf(c.name),u+=tn.encode(l-o),o=l)),a+=u}return a};ke.prototype._generateSourcesContent=function(e,r){return e.map(function(n){if(!this._sourcesContents)return null;r!=null&&(n=ee.relative(r,n));var i=ee.toSetString(n);return Object.prototype.hasOwnProperty.call(this._sourcesContents,i)?this._sourcesContents[i]:null},this)};ke.prototype.toJSON=function(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};return this._file!=null&&(e.file=this._file),this._sourceRoot!=null&&(e.sourceRoot=this._sourceRoot),this._sourcesContents&&(e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)),e};ke.prototype.toString=function(){return JSON.stringify(this.toJSON())};zd.SourceMapGenerator=ke});var Vd=b(zt=>{zt.GREATEST_LOWER_BOUND=1;zt.LEAST_UPPER_BOUND=2;function Ma(t,e,r,n,i,o){var s=Math.floor((e-t)/2)+t,a=i(r,n[s],!0);return a===0?s:a>0?e-s>1?Ma(s,e,r,n,i,o):o==zt.LEAST_UPPER_BOUND?e<n.length?e:-1:s:s-t>1?Ma(t,s,r,n,i,o):o==zt.LEAST_UPPER_BOUND?s:t<0?-1:t}zt.search=function(e,r,n,i){if(r.length===0)return-1;var o=Ma(-1,r.length,e,r,n,i||zt.GREATEST_LOWER_BOUND);if(o<0)return-1;for(;o-1>=0&&n(r[o],r[o-1],!0)===0;)--o;return o}});var $d=b(Wd=>{function Pa(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function AE(t,e){return Math.round(t+Math.random()*(e-t))}function Na(t,e,r,n){if(r<n){var i=AE(r,n),o=r-1;Pa(t,i,n);for(var s=t[n],a=r;a<n;a++)e(t[a],s)<=0&&(o+=1,Pa(t,o,a));Pa(t,o+1,a);var u=o+1;Na(t,e,r,u-1),Na(t,e,u+1,n)}}Wd.quickSort=function(t,e){Na(t,e,0,t.length-1)}});var Kd=b(Ri=>{var M=br(),qa=Vd(),Sr=Ia().ArraySet,ME=Oa(),rn=$d().quickSort;function Y(t,e){var r=t;return typeof t=="string"&&(r=M.parseSourceMapInput(t)),r.sections!=null?new Be(r,e):new le(r,e)}Y.fromSourceMap=function(t,e){return le.fromSourceMap(t,e)};Y.prototype._version=3;Y.prototype.__generatedMappings=null;Object.defineProperty(Y.prototype,"_generatedMappings",{configurable:!0,enumerable:!0,get:function(){return this.__generatedMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__generatedMappings}});Y.prototype.__originalMappings=null;Object.defineProperty(Y.prototype,"_originalMappings",{configurable:!0,enumerable:!0,get:function(){return this.__originalMappings||this._parseMappings(this._mappings,this.sourceRoot),this.__originalMappings}});Y.prototype._charIsMappingSeparator=function(e,r){var n=e.charAt(r);return n===";"||n===","};Y.prototype._parseMappings=function(e,r){throw new Error("Subclasses must implement _parseMappings")};Y.GENERATED_ORDER=1;Y.ORIGINAL_ORDER=2;Y.GREATEST_LOWER_BOUND=1;Y.LEAST_UPPER_BOUND=2;Y.prototype.eachMapping=function(e,r,n){var i=r||null,o=n||Y.GENERATED_ORDER,s;switch(o){case Y.GENERATED_ORDER:s=this._generatedMappings;break;case Y.ORIGINAL_ORDER:s=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}var a=this.sourceRoot;s.map(function(u){var c=u.source===null?null:this._sources.at(u.source);return c=M.computeSourceURL(a,c,this._sourceMapURL),{source:c,generatedLine:u.generatedLine,generatedColumn:u.generatedColumn,originalLine:u.originalLine,originalColumn:u.originalColumn,name:u.name===null?null:this._names.at(u.name)}},this).forEach(e,i)};Y.prototype.allGeneratedPositionsFor=function(e){var r=M.getArg(e,"line"),n={source:M.getArg(e,"source"),originalLine:r,originalColumn:M.getArg(e,"column",0)};if(n.source=this._findSourceIndex(n.source),n.source<0)return[];var i=[],o=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",M.compareByOriginalPositions,qa.LEAST_UPPER_BOUND);if(o>=0){var s=this._originalMappings[o];if(e.column===void 0)for(var a=s.originalLine;s&&s.originalLine===a;)i.push({line:M.getArg(s,"generatedLine",null),column:M.getArg(s,"generatedColumn",null),lastColumn:M.getArg(s,"lastGeneratedColumn",null)}),s=this._originalMappings[++o];else for(var u=s.originalColumn;s&&s.originalLine===r&&s.originalColumn==u;)i.push({line:M.getArg(s,"generatedLine",null),column:M.getArg(s,"generatedColumn",null),lastColumn:M.getArg(s,"lastGeneratedColumn",null)}),s=this._originalMappings[++o]}return i};Ri.SourceMapConsumer=Y;function le(t,e){var r=t;typeof t=="string"&&(r=M.parseSourceMapInput(t));var n=M.getArg(r,"version"),i=M.getArg(r,"sources"),o=M.getArg(r,"names",[]),s=M.getArg(r,"sourceRoot",null),a=M.getArg(r,"sourcesContent",null),u=M.getArg(r,"mappings"),c=M.getArg(r,"file",null);if(n!=this._version)throw new Error("Unsupported version: "+n);s&&(s=M.normalize(s)),i=i.map(String).map(M.normalize).map(function(l){return s&&M.isAbsolute(s)&&M.isAbsolute(l)?M.relative(s,l):l}),this._names=Sr.fromArray(o.map(String),!0),this._sources=Sr.fromArray(i,!0),this._absoluteSources=this._sources.toArray().map(function(l){return M.computeSourceURL(s,l,e)}),this.sourceRoot=s,this.sourcesContent=a,this._mappings=u,this._sourceMapURL=e,this.file=c}le.prototype=Object.create(Y.prototype);le.prototype.consumer=Y;le.prototype._findSourceIndex=function(t){var e=t;if(this.sourceRoot!=null&&(e=M.relative(this.sourceRoot,e)),this._sources.has(e))return this._sources.indexOf(e);var r;for(r=0;r<this._absoluteSources.length;++r)if(this._absoluteSources[r]==t)return r;return-1};le.fromSourceMap=function(e,r){var n=Object.create(le.prototype),i=n._names=Sr.fromArray(e._names.toArray(),!0),o=n._sources=Sr.fromArray(e._sources.toArray(),!0);n.sourceRoot=e._sourceRoot,n.sourcesContent=e._generateSourcesContent(n._sources.toArray(),n.sourceRoot),n.file=e._file,n._sourceMapURL=r,n._absoluteSources=n._sources.toArray().map(function(_){return M.computeSourceURL(n.sourceRoot,_,r)});for(var s=e._mappings.toArray().slice(),a=n.__generatedMappings=[],u=n.__originalMappings=[],c=0,l=s.length;c<l;c++){var d=s[c],h=new Yd;h.generatedLine=d.generatedLine,h.generatedColumn=d.generatedColumn,d.source&&(h.source=o.indexOf(d.source),h.originalLine=d.originalLine,h.originalColumn=d.originalColumn,d.name&&(h.name=i.indexOf(d.name)),u.push(h)),a.push(h)}return rn(n.__originalMappings,M.compareByOriginalPositions),n};le.prototype._version=3;Object.defineProperty(le.prototype,"sources",{get:function(){return this._absoluteSources.slice()}});function Yd(){this.generatedLine=0,this.generatedColumn=0,this.source=null,this.originalLine=null,this.originalColumn=null,this.name=null}le.prototype._parseMappings=function(e,r){for(var n=1,i=0,o=0,s=0,a=0,u=0,c=e.length,l=0,d={},h={},_=[],S=[],T,R,A,F,k;l<c;)if(e.charAt(l)===";")n++,l++,i=0;else if(e.charAt(l)===",")l++;else{for(T=new Yd,T.generatedLine=n,F=l;F<c&&!this._charIsMappingSeparator(e,F);F++);if(R=e.slice(l,F),A=d[R],A)l+=R.length;else{for(A=[];l<F;)ME.decode(e,l,h),k=h.value,l=h.rest,A.push(k);if(A.length===2)throw new Error("Found a source, but no line and column");if(A.length===3)throw new Error("Found a source and line, but no column");d[R]=A}T.generatedColumn=i+A[0],i=T.generatedColumn,A.length>1&&(T.source=a+A[1],a+=A[1],T.originalLine=o+A[2],o=T.originalLine,T.originalLine+=1,T.originalColumn=s+A[3],s=T.originalColumn,A.length>4&&(T.name=u+A[4],u+=A[4])),S.push(T),typeof T.originalLine=="number"&&_.push(T)}rn(S,M.compareByGeneratedPositionsDeflated),this.__generatedMappings=S,rn(_,M.compareByOriginalPositions),this.__originalMappings=_};le.prototype._findMapping=function(e,r,n,i,o,s){if(e[n]<=0)throw new TypeError("Line must be greater than or equal to 1, got "+e[n]);if(e[i]<0)throw new TypeError("Column must be greater than or equal to 0, got "+e[i]);return qa.search(e,r,o,s)};le.prototype.computeColumnSpans=function(){for(var e=0;e<this._generatedMappings.length;++e){var r=this._generatedMappings[e];if(e+1<this._generatedMappings.length){var n=this._generatedMappings[e+1];if(r.generatedLine===n.generatedLine){r.lastGeneratedColumn=n.generatedColumn-1;continue}}r.lastGeneratedColumn=1/0}};le.prototype.originalPositionFor=function(e){var r={generatedLine:M.getArg(e,"line"),generatedColumn:M.getArg(e,"column")},n=this._findMapping(r,this._generatedMappings,"generatedLine","generatedColumn",M.compareByGeneratedPositionsDeflated,M.getArg(e,"bias",Y.GREATEST_LOWER_BOUND));if(n>=0){var i=this._generatedMappings[n];if(i.generatedLine===r.generatedLine){var o=M.getArg(i,"source",null);o!==null&&(o=this._sources.at(o),o=M.computeSourceURL(this.sourceRoot,o,this._sourceMapURL));var s=M.getArg(i,"name",null);return s!==null&&(s=this._names.at(s)),{source:o,line:M.getArg(i,"originalLine",null),column:M.getArg(i,"originalColumn",null),name:s}}}return{source:null,line:null,column:null,name:null}};le.prototype.hasContentsOfAllSources=function(){return this.sourcesContent?this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some(function(e){return e==null}):!1};le.prototype.sourceContentFor=function(e,r){if(!this.sourcesContent)return null;var n=this._findSourceIndex(e);if(n>=0)return this.sourcesContent[n];var i=e;this.sourceRoot!=null&&(i=M.relative(this.sourceRoot,i));var o;if(this.sourceRoot!=null&&(o=M.urlParse(this.sourceRoot))){var s=i.replace(/^file:\/\//,"");if(o.scheme=="file"&&this._sources.has(s))return this.sourcesContent[this._sources.indexOf(s)];if((!o.path||o.path=="/")&&this._sources.has("/"+i))return this.sourcesContent[this._sources.indexOf("/"+i)]}if(r)return null;throw new Error('"'+i+'" is not in the SourceMap.')};le.prototype.generatedPositionFor=function(e){var r=M.getArg(e,"source");if(r=this._findSourceIndex(r),r<0)return{line:null,column:null,lastColumn:null};var n={source:r,originalLine:M.getArg(e,"line"),originalColumn:M.getArg(e,"column")},i=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",M.compareByOriginalPositions,M.getArg(e,"bias",Y.GREATEST_LOWER_BOUND));if(i>=0){var o=this._originalMappings[i];if(o.source===n.source)return{line:M.getArg(o,"generatedLine",null),column:M.getArg(o,"generatedColumn",null),lastColumn:M.getArg(o,"lastGeneratedColumn",null)}}return{line:null,column:null,lastColumn:null}};Ri.BasicSourceMapConsumer=le;function Be(t,e){var r=t;typeof t=="string"&&(r=M.parseSourceMapInput(t));var n=M.getArg(r,"version"),i=M.getArg(r,"sections");if(n!=this._version)throw new Error("Unsupported version: "+n);this._sources=new Sr,this._names=new Sr;var o={line:-1,column:0};this._sections=i.map(function(s){if(s.url)throw new Error("Support for url field in sections not implemented.");var a=M.getArg(s,"offset"),u=M.getArg(a,"line"),c=M.getArg(a,"column");if(u<o.line||u===o.line&&c<o.column)throw new Error("Section offsets must be ordered and non-overlapping.");return o=a,{generatedOffset:{generatedLine:u+1,generatedColumn:c+1},consumer:new Y(M.getArg(s,"map"),e)}})}Be.prototype=Object.create(Y.prototype);Be.prototype.constructor=Y;Be.prototype._version=3;Object.defineProperty(Be.prototype,"sources",{get:function(){for(var t=[],e=0;e<this._sections.length;e++)for(var r=0;r<this._sections[e].consumer.sources.length;r++)t.push(this._sections[e].consumer.sources[r]);return t}});Be.prototype.originalPositionFor=function(e){var r={generatedLine:M.getArg(e,"line"),generatedColumn:M.getArg(e,"column")},n=qa.search(r,this._sections,function(o,s){var a=o.generatedLine-s.generatedOffset.generatedLine;return a||o.generatedColumn-s.generatedOffset.generatedColumn}),i=this._sections[n];return i?i.consumer.originalPositionFor({line:r.generatedLine-(i.generatedOffset.generatedLine-1),column:r.generatedColumn-(i.generatedOffset.generatedLine===r.generatedLine?i.generatedOffset.generatedColumn-1:0),bias:e.bias}):{source:null,line:null,column:null,name:null}};Be.prototype.hasContentsOfAllSources=function(){return this._sections.every(function(e){return e.consumer.hasContentsOfAllSources()})};Be.prototype.sourceContentFor=function(e,r){for(var n=0;n<this._sections.length;n++){var i=this._sections[n],o=i.consumer.sourceContentFor(e,!0);if(o)return o}if(r)return null;throw new Error('"'+e+'" is not in the SourceMap.')};Be.prototype.generatedPositionFor=function(e){for(var r=0;r<this._sections.length;r++){var n=this._sections[r];if(n.consumer._findSourceIndex(M.getArg(e,"source"))!==-1){var i=n.consumer.generatedPositionFor(e);if(i){var o={line:i.line+(n.generatedOffset.generatedLine-1),column:i.column+(n.generatedOffset.generatedLine===i.line?n.generatedOffset.generatedColumn-1:0)};return o}}}return{line:null,column:null}};Be.prototype._parseMappings=function(e,r){this.__generatedMappings=[],this.__originalMappings=[];for(var n=0;n<this._sections.length;n++)for(var i=this._sections[n],o=i.consumer._generatedMappings,s=0;s<o.length;s++){var a=o[s],u=i.consumer._sources.at(a.source);u=M.computeSourceURL(i.consumer.sourceRoot,u,this._sourceMapURL),this._sources.add(u),u=this._sources.indexOf(u);var c=null;a.name&&(c=i.consumer._names.at(a.name),this._names.add(c),c=this._names.indexOf(c));var l={source:u,generatedLine:a.generatedLine+(i.generatedOffset.generatedLine-1),generatedColumn:a.generatedColumn+(i.generatedOffset.generatedLine===a.generatedLine?i.generatedOffset.generatedColumn-1:0),originalLine:a.originalLine,originalColumn:a.originalColumn,name:c};this.__generatedMappings.push(l),typeof l.originalLine=="number"&&this.__originalMappings.push(l)}rn(this.__generatedMappings,M.compareByGeneratedPositionsDeflated),rn(this.__originalMappings,M.compareByOriginalPositions)};Ri.IndexedSourceMapConsumer=Be});var Xd=b(Jd=>{var PE=Aa().SourceMapGenerator,Ii=br(),NE=/(\r?\n)/,qE=10,Er="$$$isSourceNode$$$";function Ce(t,e,r,n,i){this.children=[],this.sourceContents={},this.line=t??null,this.column=e??null,this.source=r??null,this.name=i??null,this[Er]=!0,n!=null&&this.add(n)}Ce.fromStringWithSourceMap=function(e,r,n){var i=new Ce,o=e.split(NE),s=0,a=function(){var h=S(),_=S()||"";return h+_;function S(){return s<o.length?o[s++]:void 0}},u=1,c=0,l=null;return r.eachMapping(function(h){if(l!==null)if(u<h.generatedLine)d(l,a()),u++,c=0;else{var _=o[s]||"",S=_.substr(0,h.generatedColumn-c);o[s]=_.substr(h.generatedColumn-c),c=h.generatedColumn,d(l,S),l=h;return}for(;u<h.generatedLine;)i.add(a()),u++;if(c<h.generatedColumn){var _=o[s]||"";i.add(_.substr(0,h.generatedColumn)),o[s]=_.substr(h.generatedColumn),c=h.generatedColumn}l=h},this),s<o.length&&(l&&d(l,a()),i.add(o.splice(s).join(""))),r.sources.forEach(function(h){var _=r.sourceContentFor(h);_!=null&&(n!=null&&(h=Ii.join(n,h)),i.setSourceContent(h,_))}),i;function d(h,_){if(h===null||h.source===void 0)i.add(_);else{var S=n?Ii.join(n,h.source):h.source;i.add(new Ce(h.originalLine,h.originalColumn,S,_,h.name))}}};Ce.prototype.add=function(e){if(Array.isArray(e))e.forEach(function(r){this.add(r)},this);else if(e[Er]||typeof e=="string")e&&this.children.push(e);else throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);return this};Ce.prototype.prepend=function(e){if(Array.isArray(e))for(var r=e.length-1;r>=0;r--)this.prepend(e[r]);else if(e[Er]||typeof e=="string")this.children.unshift(e);else throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e);return this};Ce.prototype.walk=function(e){for(var r,n=0,i=this.children.length;n<i;n++)r=this.children[n],r[Er]?r.walk(e):r!==""&&e(r,{source:this.source,line:this.line,column:this.column,name:this.name})};Ce.prototype.join=function(e){var r,n,i=this.children.length;if(i>0){for(r=[],n=0;n<i-1;n++)r.push(this.children[n]),r.push(e);r.push(this.children[n]),this.children=r}return this};Ce.prototype.replaceRight=function(e,r){var n=this.children[this.children.length-1];return n[Er]?n.replaceRight(e,r):typeof n=="string"?this.children[this.children.length-1]=n.replace(e,r):this.children.push("".replace(e,r)),this};Ce.prototype.setSourceContent=function(e,r){this.sourceContents[Ii.toSetString(e)]=r};Ce.prototype.walkSourceContents=function(e){for(var r=0,n=this.children.length;r<n;r++)this.children[r][Er]&&this.children[r].walkSourceContents(e);for(var i=Object.keys(this.sourceContents),r=0,n=i.length;r<n;r++)e(Ii.fromSetString(i[r]),this.sourceContents[i[r]])};Ce.prototype.toString=function(){var e="";return this.walk(function(r){e+=r}),e};Ce.prototype.toStringWithSourceMap=function(e){var r={code:"",line:1,column:0},n=new PE(e),i=!1,o=null,s=null,a=null,u=null;return this.walk(function(c,l){r.code+=c,l.source!==null&&l.line!==null&&l.column!==null?((o!==l.source||s!==l.line||a!==l.column||u!==l.name)&&n.addMapping({source:l.source,original:{line:l.line,column:l.column},generated:{line:r.line,column:r.column},name:l.name}),o=l.source,s=l.line,a=l.column,u=l.name,i=!0):i&&(n.addMapping({generated:{line:r.line,column:r.column}}),o=null,i=!1);for(var d=0,h=c.length;d<h;d++)c.charCodeAt(d)===qE?(r.line++,r.column=0,d+1===h?(o=null,i=!1):i&&n.addMapping({source:l.source,original:{line:l.line,column:l.column},generated:{line:r.line,column:r.column},name:l.name})):r.column++}),this.walkSourceContents(function(c,l){n.setSourceContent(c,l)}),{code:r.code,map:n}};Jd.SourceNode=Ce});var Qd=b(Ai=>{Ai.SourceMapGenerator=Aa().SourceMapGenerator;Ai.SourceMapConsumer=Kd().SourceMapConsumer;Ai.SourceNode=Xd().SourceNode});var ep=b((ww,Zd)=>{var kE=Object.prototype.toString,ka=typeof Buffer!="undefined"&&typeof Buffer.alloc=="function"&&typeof Buffer.allocUnsafe=="function"&&typeof Buffer.from=="function";function DE(t){return kE.call(t).slice(8,-1)==="ArrayBuffer"}function LE(t,e,r){e>>>=0;var n=t.byteLength-e;if(n<0)throw new RangeError("'offset' is out of bounds");if(r===void 0)r=n;else if(r>>>=0,r>n)throw new RangeError("'length' is out of bounds");return ka?Buffer.from(t.slice(e,e+r)):new Buffer(new Uint8Array(t.slice(e,e+r)))}function FE(t,e){if((typeof e!="string"||e==="")&&(e="utf8"),!Buffer.isEncoding(e))throw new TypeError('"encoding" must be a valid string encoding');return ka?Buffer.from(t,e):new Buffer(t,e)}function jE(t,e,r){if(typeof t=="number")throw new TypeError('"value" argument must not be a number');return DE(t)?LE(t,e,r):typeof t=="string"?FE(t,e):ka?Buffer.from(t):new Buffer(t)}Zd.exports=jE});var up=b((Wt,Ga)=>{var UE=Qd().SourceMapConsumer,Da=require("path"),Ke;try{Ke=require("fs"),(!Ke.existsSync||!Ke.readFileSync)&&(Ke=null)}catch{}var HE=ep();function tp(t,e){return t.require(e)}var rp=!1,np=!1,La=!1,nn="auto",Vt={},on={},BE=/^data:application\/json[^,]+base64,/,Ct=[],xt=[];function Fa(){return nn==="browser"?!0:nn==="node"?!1:typeof window!="undefined"&&typeof XMLHttpRequest=="function"&&!(window.require&&window.module&&window.process&&window.process.type==="renderer")}function GE(){return typeof process=="object"&&process!==null&&typeof process.on=="function"}function zE(){return typeof process=="object"&&process!==null?process.version:""}function VE(){if(typeof process=="object"&&process!==null)return process.stderr}function WE(t){if(typeof process=="object"&&process!==null&&typeof process.exit=="function")return process.exit(t)}function Mi(t){return function(e){for(var r=0;r<t.length;r++){var n=t[r](e);if(n)return n}return null}}var ja=Mi(Ct);Ct.push(function(t){if(t=t.trim(),/^file:/.test(t)&&(t=t.replace(/file:\/\/\/(\w:)?/,function(n,i){return i?"":"/"})),t in Vt)return Vt[t];var e="";try{if(Ke)Ke.existsSync(t)&&(e=Ke.readFileSync(t,"utf8"));else{var r=new XMLHttpRequest;r.open("GET",t,!1),r.send(null),r.readyState===4&&r.status===200&&(e=r.responseText)}}catch{}return Vt[t]=e});function Ua(t,e){if(!t)return e;var r=Da.dirname(t),n=/^\w+:\/\/[^\/]*/.exec(r),i=n?n[0]:"",o=r.slice(i.length);return i&&/^\/\w\:/.test(o)?(i+="/",i+Da.resolve(r.slice(i.length),e).replace(/\\/g,"/")):i+Da.resolve(r.slice(i.length),e)}function $E(t){var e;if(Fa())try{var r=new XMLHttpRequest;r.open("GET",t,!1),r.send(null),e=r.readyState===4?r.responseText:null;var n=r.getResponseHeader("SourceMap")||r.getResponseHeader("X-SourceMap");if(n)return n}catch{}e=ja(t);for(var i=/(?:\/\/[@#][\s]*sourceMappingURL=([^\s'"]+)[\s]*$)|(?:\/\*[@#][\s]*sourceMappingURL=([^\s*'"]+)[\s]*(?:\*\/)[\s]*$)/mg,o,s;s=i.exec(e);)o=s;return o?o[1]:null}var Ha=Mi(xt);xt.push(function(t){var e=$E(t);if(!e)return null;var r;if(BE.test(e)){var n=e.slice(e.indexOf(",")+1);r=HE(n,"base64").toString(),e=t}else e=Ua(t,e),r=ja(e);return r?{url:e,map:r}:null});function Ba(t){var e=on[t.source];if(!e){var r=Ha(t.source);r?(e=on[t.source]={url:r.url,map:new UE(r.map)},e.map.sourcesContent&&e.map.sources.forEach(function(i,o){var s=e.map.sourcesContent[o];if(s){var a=Ua(e.url,i);Vt[a]=s}})):e=on[t.source]={url:null,map:null}}if(e&&e.map&&typeof e.map.originalPositionFor=="function"){var n=e.map.originalPositionFor(t);if(n.source!==null)return n.source=Ua(e.url,n.source),n}return t}function ip(t){var e=/^eval at ([^(]+) \((.+):(\d+):(\d+)\)$/.exec(t);if(e){var r=Ba({source:e[2],line:+e[3],column:e[4]-1});return"eval at "+e[1]+" ("+r.source+":"+r.line+":"+(r.column+1)+")"}return e=/^eval at ([^(]+) \((.+)\)$/.exec(t),e?"eval at "+e[1]+" ("+ip(e[2])+")":t}function YE(){var t,e="";if(this.isNative())e="native";else{t=this.getScriptNameOrSourceURL(),!t&&this.isEval()&&(e=this.getEvalOrigin(),e+=", "),t?e+=t:e+="<anonymous>";var r=this.getLineNumber();if(r!=null){e+=":"+r;var n=this.getColumnNumber();n&&(e+=":"+n)}}var i="",o=this.getFunctionName(),s=!0,a=this.isConstructor(),u=!(this.isToplevel()||a);if(u){var c=this.getTypeName();c==="[object Object]"&&(c="null");var l=this.getMethodName();o?(c&&o.indexOf(c)!=0&&(i+=c+"."),i+=o,l&&o.indexOf("."+l)!=o.length-l.length-1&&(i+=" [as "+l+"]")):i+=c+"."+(l||"<anonymous>")}else a?i+="new "+(o||"<anonymous>"):o?i+=o:(i+=e,s=!1);return s&&(i+=" ("+e+")"),i}function op(t){var e={};return Object.getOwnPropertyNames(Object.getPrototypeOf(t)).forEach(function(r){e[r]=/^(?:is|get)/.test(r)?function(){return t[r].call(t)}:t[r]}),e.toString=YE,e}function sp(t,e){if(e===void 0&&(e={nextPosition:null,curPosition:null}),t.isNative())return e.curPosition=null,t;var r=t.getFileName()||t.getScriptNameOrSourceURL();if(r){var n=t.getLineNumber(),i=t.getColumnNumber()-1,o=/^v(10\.1[6-9]|10\.[2-9][0-9]|10\.[0-9]{3,}|1[2-9]\d*|[2-9]\d|\d{3,}|11\.11)/,s=o.test(zE())?0:62;n===1&&i>s&&!Fa()&&!t.isEval()&&(i-=s);var a=Ba({source:r,line:n,column:i});e.curPosition=a,t=op(t);var u=t.getFunctionName;return t.getFunctionName=function(){return e.nextPosition==null?u():e.nextPosition.name||u()},t.getFileName=function(){return a.source},t.getLineNumber=function(){return a.line},t.getColumnNumber=function(){return a.column+1},t.getScriptNameOrSourceURL=function(){return a.source},t}var c=t.isEval()&&t.getEvalOrigin();return c&&(c=ip(c),t=op(t),t.getEvalOrigin=function(){return c}),t}function KE(t,e){La&&(Vt={},on={});for(var r=t.name||"Error",n=t.message||"",i=r+": "+n,o={nextPosition:null,curPosition:null},s=[],a=e.length-1;a>=0;a--)s.push(`
32
- at `+sp(e[a],o)),o.nextPosition=o.curPosition;return o.curPosition=o.nextPosition=null,i+s.reverse().join("")}function ap(t){var e=/\n at [^(]+ \((.*):(\d+):(\d+)\)/.exec(t.stack);if(e){var r=e[1],n=+e[2],i=+e[3],o=Vt[r];if(!o&&Ke&&Ke.existsSync(r))try{o=Ke.readFileSync(r,"utf8")}catch{o=""}if(o){var s=o.split(/(?:\r\n|\r|\n)/)[n-1];if(s)return r+":"+n+`
33
- `+s+`
34
- `+new Array(i).join(" ")+"^"}}return null}function JE(t){var e=ap(t),r=VE();r&&r._handle&&r._handle.setBlocking&&r._handle.setBlocking(!0),e&&(console.error(),console.error(e)),console.error(t.stack),WE(1)}function XE(){var t=process.emit;process.emit=function(e){if(e==="uncaughtException"){var r=arguments[1]&&arguments[1].stack,n=this.listeners(e).length>0;if(r&&!n)return JE(arguments[1])}return t.apply(this,arguments)}}var QE=Ct.slice(0),ZE=xt.slice(0);Wt.wrapCallSite=sp;Wt.getErrorSource=ap;Wt.mapSourcePosition=Ba;Wt.retrieveSourceMap=Ha;Wt.install=function(t){if(t=t||{},t.environment&&(nn=t.environment,["node","browser","auto"].indexOf(nn)===-1))throw new Error("environment "+nn+" was unknown. Available options are {auto, browser, node}");if(t.retrieveFile&&(t.overrideRetrieveFile&&(Ct.length=0),Ct.unshift(t.retrieveFile)),t.retrieveSourceMap&&(t.overrideRetrieveSourceMap&&(xt.length=0),xt.unshift(t.retrieveSourceMap)),t.hookRequire&&!Fa()){var e=tp(Ga,"module"),r=e.prototype._compile;r.__sourceMapSupport||(e.prototype._compile=function(o,s){return Vt[s]=o,on[s]=void 0,r.call(this,o,s)},e.prototype._compile.__sourceMapSupport=!0)}if(La||(La="emptyCacheBetweenOperations"in t?t.emptyCacheBetweenOperations:!1),rp||(rp=!0,Error.prepareStackTrace=KE),!np){var n="handleUncaughtExceptions"in t?t.handleUncaughtExceptions:!0;try{var i=tp(Ga,"worker_threads");i.isMainThread===!1&&(n=!1)}catch{}n&&GE()&&(np=!0,XE())}};Wt.resetRetrieveHandlers=function(){Ct.length=0,xt.length=0,Ct=QE.slice(0),xt=ZE.slice(0),Ha=Mi(xt),ja=Mi(Ct)}});var za=Gi(gu());function mu(t){if(t.length==2)return t.toUpperCase().replace(/./g,e=>String.fromCodePoint(127397+e.charCodeAt(0)))}var Tr=Gi(ud()),cp=Gi(Rd());up().install();Tr.init({dsn:"https://aec0873e750c49b082fe3594def15af1@o1116132.ingest.sentry.io/6149280",tracesSampleRate:1,integrations:[new cp.RewriteFrames({root:global.__rootdir__})]});za.default.version("0.1.0").name("country-flag-cli").command("get <flag>").action(t=>{let e=Tr.startTransaction({op:"get flag from 2 alpha code",name:"GET flag from 2 alpha code"});try{let r=mu(t);if(r===void 0)throw new Error(`Flag: ${t}
27
+ `)===-1){hr("have not received end of HTTP headers yet..."),o();return}let S=h.toString("ascii",0,h.indexOf(`\r
28
+ `)),T=+S.split(" ")[1];hr("got proxy server response: %o",S),e({statusCode:T,buffered:h})}t.on("error",c),t.on("close",s),t.on("end",u),o()})}_r.default=Rv});var Ic=b(Tt=>{"use strict";var Av=Tt&&Tt.__awaiter||function(t,e,r,n){function i(o){return o instanceof r?o:new r(function(a){a(o)})}return new(r||(r=Promise))(function(o,a){function s(l){try{c(n.next(l))}catch(d){a(d)}}function u(l){try{c(n.throw(l))}catch(d){a(d)}}function c(l){l.done?o(l.value):i(l.value).then(s,u)}c((n=n.apply(t,e||[])).next())})},Wt=Tt&&Tt.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Tt,"__esModule",{value:!0});var Oc=Wt(require("net")),wc=Wt(require("tls")),Pv=Wt(require("url")),qv=Wt(require("assert")),Nv=Wt(Sn()),Mv=Ec(),kv=Wt(Tc()),vr=Nv.default("https-proxy-agent:agent"),xc=class extends Mv.Agent{constructor(e){let r;if(typeof e=="string"?r=Pv.default.parse(e):r=e,!r)throw new Error("an HTTP(S) proxy server `host` and `port` must be specified!");vr("creating new HttpsProxyAgent instance: %o",r);super(r);let n=Object.assign({},r);this.secureProxy=r.secureProxy||jv(n.protocol),n.host=n.hostname||n.host,typeof n.port=="string"&&(n.port=parseInt(n.port,10)),!n.port&&n.host&&(n.port=this.secureProxy?443:80),this.secureProxy&&!("ALPNProtocols"in n)&&(n.ALPNProtocols=["http 1.1"]),n.host&&n.path&&(delete n.path,delete n.pathname),this.proxy=n}callback(e,r){return Av(this,void 0,void 0,function*(){let{proxy:n,secureProxy:i}=this,o;i?(vr("Creating `tls.Socket`: %o",n),o=wc.default.connect(n)):(vr("Creating `net.Socket`: %o",n),o=Oc.default.connect(n));let a=Object.assign({},n.headers),u=`CONNECT ${`${r.host}:${r.port}`} HTTP/1.1\r
29
+ `;n.auth&&(a["Proxy-Authorization"]=`Basic ${Buffer.from(n.auth).toString("base64")}`);let{host:c,port:l,secureEndpoint:d}=r;Fv(l,d)||(c+=`:${l}`),a.Host=c,a.Connection="close";for(let C of Object.keys(a))u+=`${C}: ${a[C]}\r
30
+ `;let h=kv.default(o);o.write(`${u}\r
31
+ `);let{statusCode:y,buffered:S}=yield h;if(y===200){if(e.once("socket",Dv),r.secureEndpoint){let C=r.servername||r.host;if(!C)throw new Error('Could not determine "servername"');return vr("Upgrading socket connection to TLS"),wc.default.connect(Object.assign(Object.assign({},Hv(r,"host","hostname","path","port")),{socket:o,servername:C}))}return o}o.destroy();let T=new Oc.default.Socket;return T.readable=!0,e.once("socket",C=>{vr("replaying proxy buffer for failed request"),qv.default(C.listenerCount("data")>0),C.push(S),C.push(null)}),T})}};Tt.default=xc;function Dv(t){t.resume()}function Fv(t,e){return Boolean(!e&&t===80||e&&t===443)}function jv(t){return typeof t=="string"?/^https:?$/i.test(t):!1}function Hv(t,...e){let r={},n;for(n in t)e.includes(n)||(r[n]=t[n]);return r}});var xo=b((wo,Cc)=>{"use strict";var Lv=wo&&wo.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},To=Lv(Ic());function Oo(t){return new To.default(t)}(function(t){t.HttpsProxyAgent=To.default,t.prototype=To.default.prototype})(Oo||(Oo={}));Cc.exports=Oo});var Pc=b(Io=>{Object.defineProperty(Io,"__esModule",{value:!0});var Uv=N(),Rc=ie(),Ac=require("http"),Bv=vn(),Gv=function(t){Uv.__extends(e,t);function e(r){var n=t.call(this,r)||this;n.options=r;var i=n._getProxy("http");return n.module=Ac,n.client=i?new(xo())(i):new Ac.Agent({keepAlive:!1,maxSockets:30,timeout:2e3}),n}return e.prototype.sendEvent=function(r){return this._send(Rc.eventToSentryRequest(r,this._api),r)},e.prototype.sendSession=function(r){return this._send(Rc.sessionToSentryRequest(r,this._api),r)},e}(Bv.BaseTransport);Io.HTTPTransport=Gv});var Mc=b(Co=>{Object.defineProperty(Co,"__esModule",{value:!0});var zv=N(),qc=ie(),Nc=require("https"),Vv=vn(),Wv=function(t){zv.__extends(e,t);function e(r){var n=t.call(this,r)||this;n.options=r;var i=n._getProxy("https");return n.module=Nc,n.client=i?new(xo())(i):new Nc.Agent({keepAlive:!1,maxSockets:30,timeout:2e3}),n}return e.prototype.sendEvent=function(r){return this._send(qc.eventToSentryRequest(r,this._api),r)},e.prototype.sendSession=function(r){return this._send(qc.sessionToSentryRequest(r,this._api),r)},e}(Vv.BaseTransport);Co.HTTPSTransport=Wv});var Ro=b(gr=>{Object.defineProperty(gr,"__esModule",{value:!0});var Yv=vn();gr.BaseTransport=Yv.BaseTransport;var $v=Pc();gr.HTTPTransport=$v.HTTPTransport;var Kv=Mc();gr.HTTPSTransport=Kv.HTTPSTransport});var Po=b(Ao=>{Object.defineProperty(Ao,"__esModule",{value:!0});var st=N(),kc=ie(),Jv=ne(),$e=P(),Tn=fo(),Dc=Ro(),Xv=function(t){st.__extends(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.eventFromException=function(r,n){var i=this,o=r,a=n&&n.data&&n.data.mechanism,s=a||{handled:!0,type:"generic"};if(!$e.isError(r)){if($e.isPlainObject(r)){var u="Non-Error exception captured with keys: "+$e.extractExceptionKeysForMessage(r);kc.getCurrentHub().configureScope(function(c){c.setExtra("__serialized__",$e.normalizeToSize(r))}),o=n&&n.syntheticException||new Error(u),o.message=u}else o=n&&n.syntheticException||new Error(r),o.message=r;s.synthetic=!0}return new $e.SyncPromise(function(c,l){return Tn.parseError(o,i._options).then(function(d){$e.addExceptionTypeValue(d,void 0,void 0),$e.addExceptionMechanism(d,s),c(st.__assign(st.__assign({},d),{event_id:n&&n.event_id}))}).then(null,l)})},e.prototype.eventFromMessage=function(r,n,i){var o=this;n===void 0&&(n=Jv.Severity.Info);var a={event_id:i&&i.event_id,level:n,message:r};return new $e.SyncPromise(function(s){if(o._options.attachStacktrace&&i&&i.syntheticException){var u=i.syntheticException?Tn.extractStackFromError(i.syntheticException):[];Tn.parseStack(u,o._options).then(function(c){a.stacktrace={frames:Tn.prepareFramesForEvent(c)},s(a)}).then(null,function(){s(a)})}else s(a)})},e.prototype._setupTransport=function(){if(!this._options.dsn)return t.prototype._setupTransport.call(this);var r=new $e.Dsn(this._options.dsn),n=st.__assign(st.__assign(st.__assign(st.__assign(st.__assign({},this._options.transportOptions),this._options.httpProxy&&{httpProxy:this._options.httpProxy}),this._options.httpsProxy&&{httpsProxy:this._options.httpsProxy}),this._options.caCerts&&{caCerts:this._options.caCerts}),{dsn:this._options.dsn,tunnel:this._options.tunnel,_metadata:this._options._metadata});return this._options.transport?new this._options.transport(n):r.protocol==="http"?new Dc.HTTPTransport(n):new Dc.HTTPSTransport(n)},e}(kc.BaseBackend);Ao.NodeBackend=Xv});var Mo=b(No=>{Object.defineProperty(No,"__esModule",{value:!0});var Qv=N(),qo=ie(),Zv=ge(),On=ne(),Fc=P(),eg=Po(),tg=function(t){Qv.__extends(e,t);function e(r){var n=this;return r._metadata=r._metadata||{},r._metadata.sdk=r._metadata.sdk||{name:"sentry.javascript.node",packages:[{name:"npm:@sentry/node",version:qo.SDK_VERSION}],version:qo.SDK_VERSION},n=t.call(this,eg.NodeBackend,r)||this,n}return e.prototype.captureException=function(r,n,i){if(this._options.autoSessionTracking&&this._sessionFlusher&&i){var o=i.getRequestSession();o&&o.status===On.RequestSessionStatus.Ok&&(o.status=On.RequestSessionStatus.Errored)}return t.prototype.captureException.call(this,r,n,i)},e.prototype.captureEvent=function(r,n,i){if(this._options.autoSessionTracking&&this._sessionFlusher&&i){var o=r.type||"exception",a=o==="exception"&&r.exception&&r.exception.values&&r.exception.values.length>0;if(a){var s=i.getRequestSession();s&&s.status===On.RequestSessionStatus.Ok&&(s.status=On.RequestSessionStatus.Errored)}}return t.prototype.captureEvent.call(this,r,n,i)},e.prototype.close=function(r){var n;return(n=this._sessionFlusher)===null||n===void 0||n.close(),t.prototype.close.call(this,r)},e.prototype.initSessionFlusher=function(){var r=this._options,n=r.release,i=r.environment;n?this._sessionFlusher=new Zv.SessionFlusher(this.getTransport(),{release:n,environment:i}):Fc.logger.warn("Cannot initialise an instance of SessionFlusher if no release is provided!")},e.prototype._prepareEvent=function(r,n,i){return r.platform=r.platform||"node",this.getOptions().serverName&&(r.server_name=this.getOptions().serverName),t.prototype._prepareEvent.call(this,r,n,i)},e.prototype._captureRequestSession=function(){this._sessionFlusher?this._sessionFlusher.incrementSessionStatusCount():Fc.logger.warn("Discarded request mode session because autoSessionTracking option was disabled")},e}(qo.BaseClient);No.NodeClient=tg});var Uc=b(ko=>{Object.defineProperty(ko,"__esModule",{value:!0});var jc=N(),Hc=ie(),mr=ne(),rg=P(),ng=require("util"),Lc=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(){var e,r;try{for(var n=jc.__values(["debug","info","warn","error","log"]),i=n.next();!i.done;i=n.next()){var o=i.value;rg.fill(console,o,ig(o))}}catch(a){e={error:a}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}},t.id="Console",t}();ko.Console=Lc;function ig(t){return function(r){var n;switch(t){case"debug":n=mr.Severity.Debug;break;case"error":n=mr.Severity.Error;break;case"info":n=mr.Severity.Info;break;case"warn":n=mr.Severity.Warning;break;default:n=mr.Severity.Log}return function(){Hc.getCurrentHub().getIntegration(Lc)&&Hc.getCurrentHub().addBreadcrumb({category:"console",level:n,message:ng.format.apply(void 0,arguments)},{input:jc.__spread(arguments),level:t}),r.apply(this,arguments)}}}});var Vc=b(Ot=>{Object.defineProperty(Ot,"__esModule",{value:!0});var Do=N(),og=ie(),ag=P(),Bc=require("url"),Gc=ag.parseSemver(process.versions.node);function sg(t){var e,r=(e=og.getCurrentHub().getClient())===null||e===void 0?void 0:e.getDsn();return r?t.includes(r.host):!1}Ot.isSentryRequest=sg;function zc(t){var e=t.protocol||"",r=t.hostname||t.host||"",n=!t.port||t.port===80||t.port===443?"":":"+t.port,i=t.path?t.path:"/";return e+"//"+r+n+i}Ot.extractUrl=zc;function ug(t,e,r){var n,i,o;if(!t)return t;var a=Do.__read(t.split(" "),2),s=a[0],u=a[1];return e.host&&!e.protocol&&(e.protocol=(i=(n=r)===null||n===void 0?void 0:n.agent)===null||i===void 0?void 0:i.protocol,u=zc(e)),((o=u)===null||o===void 0?void 0:o.startsWith("///"))&&(u=u.slice(2)),s+" "+u}Ot.cleanSpanDescription=ug;function Fo(t){var e={protocol:t.protocol,hostname:typeof t.hostname=="string"&&t.hostname.startsWith("[")?t.hostname.slice(1,-1):t.hostname,hash:t.hash,search:t.search,pathname:t.pathname,path:""+(t.pathname||"")+(t.search||""),href:t.href};return t.port!==""&&(e.port=Number(t.port)),(t.username||t.password)&&(e.auth=t.username+":"+t.password),e}Ot.urlToOptions=Fo;function cg(t,e){var r,n,i,o,a,s,u,c,l,d;return typeof e[e.length-1]=="function"&&(l=e.pop()),typeof e[0]=="string"?d=Fo(new Bc.URL(e[0])):e[0]instanceof Bc.URL?d=Fo(e[0]):d=e[0],e.length===2&&(d=Do.__assign(Do.__assign({},d),e[1])),d.protocol===void 0&&(Gc.major&&Gc.major>8?d.protocol=((n=(r=t)===null||r===void 0?void 0:r.globalAgent)===null||n===void 0?void 0:n.protocol)||((i=d.agent)===null||i===void 0?void 0:i.protocol)||((o=d._defaultAgent)===null||o===void 0?void 0:o.protocol):d.protocol=((a=d.agent)===null||a===void 0?void 0:a.protocol)||((s=d._defaultAgent)===null||s===void 0?void 0:s.protocol)||((c=(u=t)===null||u===void 0?void 0:u.globalAgent)===null||c===void 0?void 0:c.protocol)),l?[d,l]:[d]}Ot.normalizeRequestArgs=cg});var Jc=b(Ho=>{Object.defineProperty(Ho,"__esModule",{value:!0});var Wc=N(),jo=ie(),Yt=P(),yr=Vc(),Yc=Yt.parseSemver(process.versions.node),$c=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._breadcrumbs=typeof e.breadcrumbs=="undefined"?!0:e.breadcrumbs,this._tracing=typeof e.tracing=="undefined"?!1:e.tracing}return t.prototype.setupOnce=function(){if(!(!this._breadcrumbs&&!this._tracing)){var e=fg(this._breadcrumbs,this._tracing),r=require("http");if(Yt.fill(r,"get",e),Yt.fill(r,"request",e),Yc.major&&Yc.major>8){var n=require("https");Yt.fill(n,"get",e),Yt.fill(n,"request",e)}}},t.id="Http",t}();Ho.Http=$c;function fg(t,e){return function(n){return function(){for(var o=[],a=0;a<arguments.length;a++)o[a]=arguments[a];var s=this,u=yr.normalizeRequestArgs(this,o),c=u[0],l=yr.extractUrl(c);if(yr.isSentryRequest(l))return n.apply(s,u);var d,h,y=jo.getCurrentHub().getScope();if(y&&e&&(h=y.getSpan(),h)){d=h.startChild({description:(c.method||"GET")+" "+l,op:"http.client"});var S=d.toTraceparent();Yt.logger.log("[Tracing] Adding sentry-trace header "+S+" to outgoing request to "+l+": "),c.headers=Wc.__assign(Wc.__assign({},c.headers),{"sentry-trace":S})}return n.apply(s,u).once("response",function(T){var C=this;t&&Kc("response",l,C,T),e&&d&&(T.statusCode&&d.setHttpStatus(T.statusCode),d.description=yr.cleanSpanDescription(d.description,c,C),d.finish())}).once("error",function(){var T=this;t&&Kc("error",l,T),e&&d&&(d.setHttpStatus(500),d.description=yr.cleanSpanDescription(d.description,c,T),d.finish())})}}}function Kc(t,e,r,n){!jo.getCurrentHub().getIntegration($c)||jo.getCurrentHub().addBreadcrumb({category:"http",data:{method:r.method,status_code:n&&n.statusCode,url:e},type:"http"},{event:t,request:r,response:n})}});var Bo=b(Uo=>{Object.defineProperty(Uo,"__esModule",{value:!0});var lg=ie(),Lo=P(),dg=2e3;function pg(t){console.error(t&&t.stack?t.stack:t);var e=lg.getCurrentHub().getClient();if(e===void 0){Lo.logger.warn("No NodeClient was defined, we are exiting the process now."),global.process.exit(1);return}var r=e.getOptions(),n=r&&r.shutdownTimeout&&r.shutdownTimeout>0&&r.shutdownTimeout||dg;Lo.forget(e.close(n).then(function(i){i||Lo.logger.warn("We reached the timeout for emptying the request buffer, still exiting now!"),global.process.exit(1)}))}Uo.logAndExitProcess=pg});var Zc=b(Go=>{Object.defineProperty(Go,"__esModule",{value:!0});var Xc=ie(),hg=ne(),_g=P(),Qc=Bo(),vg=function(){function t(e){e===void 0&&(e={}),this._options=e,this.name=t.id,this.handler=this._makeErrorHandler()}return t.prototype.setupOnce=function(){global.process.on("uncaughtException",this.handler.bind(this))},t.prototype._makeErrorHandler=function(){var e=this,r=2e3,n=!1,i=!1,o=!1,a;return function(s){var u=Qc.logAndExitProcess,c=Xc.getCurrentHub().getClient();if(e._options.onFatalError?u=e._options.onFatalError:c&&c.getOptions().onFatalError&&(u=c.getOptions().onFatalError),n)o?(_g.logger.warn("uncaught exception after calling fatal error shutdown callback - this is bad! forcing shutdown"),Qc.logAndExitProcess(s)):i||(i=!0,setTimeout(function(){o||(o=!0,u(a,s))},r));else{var l=Xc.getCurrentHub();a=s,n=!0,l.getIntegration(t)?l.withScope(function(d){d.setLevel(hg.Severity.Fatal),l.captureException(s,{originalException:s,data:{mechanism:{handled:!1,type:"onuncaughtexception"}}}),o||(o=!0,u(s))}):o||(o=!0,u(s))}}},t.id="OnUncaughtException",t}();Go.OnUncaughtException=vg});var tf=b(zo=>{Object.defineProperty(zo,"__esModule",{value:!0});var gg=ie(),ef=P(),mg=Bo(),yg=function(){function t(e){e===void 0&&(e={mode:"warn"}),this._options=e,this.name=t.id}return t.prototype.setupOnce=function(){global.process.on("unhandledRejection",this.sendUnhandledPromise.bind(this))},t.prototype.sendUnhandledPromise=function(e,r){var n=gg.getCurrentHub();if(!n.getIntegration(t)){this._handleRejection(e);return}var i=r.domain&&r.domain.sentryContext||{};n.withScope(function(o){o.setExtra("unhandledPromiseRejection",!0),i.user&&o.setUser(i.user),i.tags&&o.setTags(i.tags),i.extra&&o.setExtras(i.extra),n.captureException(e,{originalException:r,data:{mechanism:{handled:!1,type:"onunhandledrejection"}}})}),this._handleRejection(e)},t.prototype._handleRejection=function(e){var r="This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). The promise rejected with the reason:";this._options.mode==="warn"?ef.consoleSandbox(function(){console.warn(r),console.error(e&&e.stack?e.stack:e)}):this._options.mode==="strict"&&(ef.consoleSandbox(function(){console.warn(r)}),mg.logAndExitProcess(e))},t.id="OnUnhandledRejection",t}();zo.OnUnhandledRejection=yg});var of=b(Vo=>{Object.defineProperty(Vo,"__esModule",{value:!0});var rf=N(),nf=ie(),$t=P(),bg=fo(),Sg="cause",Eg=5,Tg=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._key=e.key||Sg,this._limit=e.limit||Eg}return t.prototype.setupOnce=function(){nf.addGlobalEventProcessor(function(e,r){var n=nf.getCurrentHub().getIntegration(t);if(n){var i=n._handler&&n._handler.bind(n);return typeof i=="function"?i(e,r):e}return e})},t.prototype._handler=function(e,r){var n=this;return!e.exception||!e.exception.values||!r||!$t.isInstanceOf(r.originalException,Error)?$t.SyncPromise.resolve(e):new $t.SyncPromise(function(i){n._walkErrorTree(r.originalException,n._key).then(function(o){e&&e.exception&&e.exception.values&&(e.exception.values=rf.__spread(o,e.exception.values)),i(e)}).then(null,function(){i(e)})})},t.prototype._walkErrorTree=function(e,r,n){var i=this;return n===void 0&&(n=[]),!$t.isInstanceOf(e[r],Error)||n.length+1>=this._limit?$t.SyncPromise.resolve(n):new $t.SyncPromise(function(o,a){bg.getExceptionFromError(e[r]).then(function(s){i._walkErrorTree(e[r],r,rf.__spread([s],n)).then(o).then(null,function(){a()})}).then(null,function(){a()})})},t.id="LinkedErrors",t}();Vo.LinkedErrors=Tg});var cf=b(Yo=>{Object.defineProperty(Yo,"__esModule",{value:!0});var af=N(),sf=require("fs"),uf=require("path"),Wo;function Og(){try{return require.cache?Object.keys(require.cache):[]}catch{return[]}}function wg(){var t=require.main&&require.main.paths||[],e=Og(),r={},n={};return e.forEach(function(i){var o=i,a=function(){var s=o;if(o=uf.dirname(s),!(!o||s===o||n[s])){if(t.indexOf(o)<0)return a();var u=uf.join(s,"package.json");if(n[s]=!0,!sf.existsSync(u))return a();try{var c=JSON.parse(sf.readFileSync(u,"utf8"));r[c.name]=c.version}catch{}}};a()}),r}var xg=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(e,r){var n=this;e(function(i){return r().getIntegration(t)?af.__assign(af.__assign({},i),{modules:n._getModules()}):i})},t.prototype._getModules=function(){return Wo||(Wo=wg()),Wo},t.id="Modules",t}();Yo.Modules=xg});var $o=b(ut=>{Object.defineProperty(ut,"__esModule",{value:!0});var Ig=Uc();ut.Console=Ig.Console;var Cg=Jc();ut.Http=Cg.Http;var Rg=Zc();ut.OnUncaughtException=Rg.OnUncaughtException;var Ag=tf();ut.OnUnhandledRejection=Ag.OnUnhandledRejection;var Pg=of();ut.LinkedErrors=Pg.LinkedErrors;var qg=cf();ut.Modules=qg.Modules});var Jo=b(Fe=>{Object.defineProperty(Fe,"__esModule",{value:!0});var br=N(),ct=ie(),ff=ge(),lf=ne(),Ko=P(),Ng=require("domain"),Mg=Mo(),Sr=$o();Fe.defaultIntegrations=[new ct.Integrations.InboundFilters,new ct.Integrations.FunctionToString,new Sr.Console,new Sr.Http,new Sr.OnUncaughtException,new Sr.OnUnhandledRejection,new Sr.LinkedErrors];function kg(t){t===void 0&&(t={});var e,r=ff.getMainCarrier(),n=((e=r.__SENTRY__)===null||e===void 0?void 0:e.integrations)||[];if(t.defaultIntegrations=t.defaultIntegrations===!1?[]:br.__spread(Array.isArray(t.defaultIntegrations)?t.defaultIntegrations:Fe.defaultIntegrations,n),t.dsn===void 0&&process.env.SENTRY_DSN&&(t.dsn=process.env.SENTRY_DSN),t.tracesSampleRate===void 0&&process.env.SENTRY_TRACES_SAMPLE_RATE){var i=parseFloat(process.env.SENTRY_TRACES_SAMPLE_RATE);isFinite(i)&&(t.tracesSampleRate=i)}if(t.release===void 0){var o=df();o!==void 0?t.release=o:t.autoSessionTracking=!1}t.environment===void 0&&process.env.SENTRY_ENVIRONMENT&&(t.environment=process.env.SENTRY_ENVIRONMENT),t.autoSessionTracking===void 0&&t.dsn!==void 0&&(t.autoSessionTracking=!0),Ng.active&&ff.setHubOnCarrier(r,ct.getCurrentHub()),ct.initAndBind(Mg.NodeClient,t),t.autoSessionTracking&&Lg()}Fe.init=kg;function Dg(){return ct.getCurrentHub().lastEventId()}Fe.lastEventId=Dg;function Fg(t){return br.__awaiter(this,void 0,void 0,function(){var e;return br.__generator(this,function(r){return e=ct.getCurrentHub().getClient(),e?[2,e.flush(t)]:(Ko.logger.warn("Cannot flush events. No client defined."),[2,Promise.resolve(!1)])})})}Fe.flush=Fg;function jg(t){return br.__awaiter(this,void 0,void 0,function(){var e;return br.__generator(this,function(r){return e=ct.getCurrentHub().getClient(),e?[2,e.close(t)]:(Ko.logger.warn("Cannot flush events and disable SDK. No client defined."),[2,Promise.resolve(!1)])})})}Fe.close=jg;function Hg(t){if(t===void 0)return!1;var e=t&&t.getOptions();return e&&e.autoSessionTracking!==void 0?e.autoSessionTracking:!1}Fe.isAutoSessionTrackingEnabled=Hg;function df(t){if(process.env.SENTRY_RELEASE)return process.env.SENTRY_RELEASE;var e=Ko.getGlobalObject();return e.SENTRY_RELEASE&&e.SENTRY_RELEASE.id?e.SENTRY_RELEASE.id:process.env.GITHUB_SHA||process.env.COMMIT_REF||process.env.VERCEL_GIT_COMMIT_SHA||process.env.VERCEL_GITHUB_COMMIT_SHA||process.env.VERCEL_GITLAB_COMMIT_SHA||process.env.VERCEL_BITBUCKET_COMMIT_SHA||process.env.ZEIT_GITHUB_COMMIT_SHA||process.env.ZEIT_GITLAB_COMMIT_SHA||process.env.ZEIT_BITBUCKET_COMMIT_SHA||t}Fe.getSentryRelease=df;function Lg(){var t=ct.getCurrentHub();t.startSession(),process.on("beforeExit",function(){var e,r=(e=t.getScope())===null||e===void 0?void 0:e.getSession(),n=[lf.SessionStatus.Exited,lf.SessionStatus.Crashed];r&&!n.includes(r.status)&&t.endSession()})}});var hf=b(Qo=>{Object.defineProperty(Qo,"__esModule",{value:!0});var pf=N(),wn=require("fs"),Xo=require("path");function Ug(t){var e=Xo.resolve(t);if(!wn.existsSync(e))throw new Error("Cannot read contents of "+e+". Directory does not exist.");if(!wn.statSync(e).isDirectory())throw new Error("Cannot read contents of "+e+", because it is not a directory.");var r=function(n){return wn.readdirSync(n).reduce(function(i,o){var a=Xo.join(n,o);return wn.statSync(a).isDirectory()?pf.__spread(i,r(a)):pf.__spread(i,[a])},[])};return r(e).map(function(n){return Xo.relative(e,n)})}Qo.deepReadDirSync=Ug});var ft=b(Kt=>{Object.defineProperty(Kt,"__esModule",{value:!0});var _f;(function(t){t.Ok="ok",t.DeadlineExceeded="deadline_exceeded",t.Unauthenticated="unauthenticated",t.PermissionDenied="permission_denied",t.NotFound="not_found",t.ResourceExhausted="resource_exhausted",t.InvalidArgument="invalid_argument",t.Unimplemented="unimplemented",t.Unavailable="unavailable",t.InternalError="internal_error",t.UnknownError="unknown_error",t.Cancelled="cancelled",t.AlreadyExists="already_exists",t.FailedPrecondition="failed_precondition",t.Aborted="aborted",t.OutOfRange="out_of_range",t.DataLoss="data_loss"})(_f=Kt.SpanStatus||(Kt.SpanStatus={}));(function(t){function e(r){if(r<400&&r>=100)return t.Ok;if(r>=400&&r<500)switch(r){case 401:return t.Unauthenticated;case 403:return t.PermissionDenied;case 404:return t.NotFound;case 409:return t.AlreadyExists;case 413:return t.FailedPrecondition;case 429:return t.ResourceExhausted;default:return t.InvalidArgument}if(r>=500&&r<600)switch(r){case 501:return t.Unimplemented;case 503:return t.Unavailable;case 504:return t.DeadlineExceeded;default:return t.InternalError}return t.UnknownError}t.fromHttpCode=e})(_f=Kt.SpanStatus||(Kt.SpanStatus={}))});var lt=b(je=>{Object.defineProperty(je,"__esModule",{value:!0});var vf=ge();je.TRACEPARENT_REGEXP=new RegExp("^[ \\t]*([0-9a-f]{32})?-?([0-9a-f]{16})?-?([01])?[ \\t]*$");function Bg(t){t===void 0&&(t=(e=vf.getCurrentHub().getClient())===null||e===void 0?void 0:e.getOptions());var e;return!!t&&("tracesSampleRate"in t||"tracesSampler"in t)}je.hasTracingEnabled=Bg;function Gg(t){var e=t.match(je.TRACEPARENT_REGEXP);if(e){var r=void 0;return e[3]==="1"?r=!0:e[3]==="0"&&(r=!1),{traceId:e[1],parentSampled:r,parentSpanId:e[2]}}}je.extractTraceparentData=Gg;function zg(t){t===void 0&&(t=vf.getCurrentHub());var e,r;return(r=(e=t)===null||e===void 0?void 0:e.getScope())===null||r===void 0?void 0:r.getTransaction()}je.getActiveTransaction=zg;function Vg(t){return t/1e3}je.msToSec=Vg;function Wg(t){return t*1e3}je.secToMs=Wg;var Yg=P();je.stripUrlQueryAndFragment=Yg.stripUrlQueryAndFragment});var yf=b(ea=>{Object.defineProperty(ea,"__esModule",{value:!0});var Zo=P(),gf=ft(),$g=lt();function Kg(){Zo.addInstrumentationHandler({callback:mf,type:"error"}),Zo.addInstrumentationHandler({callback:mf,type:"unhandledrejection"})}ea.registerErrorInstrumentation=Kg;function mf(){var t=$g.getActiveTransaction();t&&(Zo.logger.log("[Tracing] Transaction: "+gf.SpanStatus.InternalError+" -> Global error occured"),t.setStatus(gf.SpanStatus.InternalError))}});var ta=b(xn=>{Object.defineProperty(xn,"__esModule",{value:!0});xn.FINISH_REASON_TAG="finishReason";xn.IDLE_TRANSACTION_FINISH_REASONS=["heartbeatFailed","idleTimeout","documentHidden"]});var Cn=b(In=>{Object.defineProperty(In,"__esModule",{value:!0});var Jt=N(),wt=P(),ra=ft(),Jg=function(){function t(e){e===void 0&&(e=1e3),this.spans=[],this._maxlen=e}return t.prototype.add=function(e){this.spans.length>this._maxlen?e.spanRecorder=void 0:this.spans.push(e)},t}();In.SpanRecorder=Jg;var Xg=function(){function t(e){if(this.traceId=wt.uuid4(),this.spanId=wt.uuid4().substring(16),this.startTimestamp=wt.timestampWithMs(),this.tags={},this.data={},!e)return this;e.traceId&&(this.traceId=e.traceId),e.spanId&&(this.spanId=e.spanId),e.parentSpanId&&(this.parentSpanId=e.parentSpanId),"sampled"in e&&(this.sampled=e.sampled),e.op&&(this.op=e.op),e.description&&(this.description=e.description),e.data&&(this.data=e.data),e.tags&&(this.tags=e.tags),e.status&&(this.status=e.status),e.startTimestamp&&(this.startTimestamp=e.startTimestamp),e.endTimestamp&&(this.endTimestamp=e.endTimestamp)}return t.prototype.child=function(e){return this.startChild(e)},t.prototype.startChild=function(e){var r=new t(Jt.__assign(Jt.__assign({},e),{parentSpanId:this.spanId,sampled:this.sampled,traceId:this.traceId}));return r.spanRecorder=this.spanRecorder,r.spanRecorder&&r.spanRecorder.add(r),r.transaction=this.transaction,r},t.prototype.setTag=function(e,r){var n;return this.tags=Jt.__assign(Jt.__assign({},this.tags),(n={},n[e]=r,n)),this},t.prototype.setData=function(e,r){var n;return this.data=Jt.__assign(Jt.__assign({},this.data),(n={},n[e]=r,n)),this},t.prototype.setStatus=function(e){return this.status=e,this},t.prototype.setHttpStatus=function(e){this.setTag("http.status_code",String(e));var r=ra.SpanStatus.fromHttpCode(e);return r!==ra.SpanStatus.UnknownError&&this.setStatus(r),this},t.prototype.isSuccess=function(){return this.status===ra.SpanStatus.Ok},t.prototype.finish=function(e){this.endTimestamp=typeof e=="number"?e:wt.timestampWithMs()},t.prototype.toTraceparent=function(){var e="";return this.sampled!==void 0&&(e=this.sampled?"-1":"-0"),this.traceId+"-"+this.spanId+e},t.prototype.toContext=function(){return wt.dropUndefinedKeys({data:this.data,description:this.description,endTimestamp:this.endTimestamp,op:this.op,parentSpanId:this.parentSpanId,sampled:this.sampled,spanId:this.spanId,startTimestamp:this.startTimestamp,status:this.status,tags:this.tags,traceId:this.traceId})},t.prototype.updateWithContext=function(e){var r,n,i,o,a;return this.data=(r=e.data,r??{}),this.description=e.description,this.endTimestamp=e.endTimestamp,this.op=e.op,this.parentSpanId=e.parentSpanId,this.sampled=e.sampled,this.spanId=(n=e.spanId,n??this.spanId),this.startTimestamp=(i=e.startTimestamp,i??this.startTimestamp),this.status=e.status,this.tags=(o=e.tags,o??{}),this.traceId=(a=e.traceId,a??this.traceId),this},t.prototype.getTraceContext=function(){return wt.dropUndefinedKeys({data:Object.keys(this.data).length>0?this.data:void 0,description:this.description,op:this.op,parent_span_id:this.parentSpanId,span_id:this.spanId,status:this.status,tags:Object.keys(this.tags).length>0?this.tags:void 0,trace_id:this.traceId})},t.prototype.toJSON=function(){return wt.dropUndefinedKeys({data:Object.keys(this.data).length>0?this.data:void 0,description:this.description,op:this.op,parent_span_id:this.parentSpanId,span_id:this.spanId,start_timestamp:this.startTimestamp,status:this.status,tags:Object.keys(this.tags).length>0?this.tags:void 0,timestamp:this.endTimestamp,trace_id:this.traceId})},t}();In.Span=Xg});var Rn=b(na=>{Object.defineProperty(na,"__esModule",{value:!0});var Xt=N(),bf=ge(),Qg=ne(),Qt=P(),Sf=Cn(),Zg=function(t){Xt.__extends(e,t);function e(r,n){var i=t.call(this,r)||this;return i._measurements={},i._hub=bf.getCurrentHub(),Qt.isInstanceOf(n,bf.Hub)&&(i._hub=n),i.name=r.name||"",i.metadata=r.metadata||{},i._trimEnd=r.trimEnd,i.transaction=i,i}return e.prototype.setName=function(r){this.name=r},e.prototype.initSpanRecorder=function(r){r===void 0&&(r=1e3),this.spanRecorder||(this.spanRecorder=new Sf.SpanRecorder(r)),this.spanRecorder.add(this)},e.prototype.setMeasurements=function(r){this._measurements=Xt.__assign({},r)},e.prototype.setMetadata=function(r){this.metadata=Xt.__assign(Xt.__assign({},this.metadata),r)},e.prototype.finish=function(r){var n=this,i,o,a,s,u;if(this.endTimestamp===void 0){if(this.name||(Qt.logger.warn("Transaction has no name, falling back to `<unlabeled transaction>`."),this.name="<unlabeled transaction>"),t.prototype.finish.call(this,r),this.sampled!==!0){Qt.logger.log("[Tracing] Discarding transaction because its trace was not chosen to be sampled."),(u=(a=(i=this._hub.getClient())===null||i===void 0?void 0:(o=i).getTransport)===null||a===void 0?void 0:(s=a.call(o)).recordLostEvent)===null||u===void 0||u.call(s,Qg.Outcome.SampleRate,"transaction");return}var c=this.spanRecorder?this.spanRecorder.spans.filter(function(h){return h!==n&&h.endTimestamp}):[];this._trimEnd&&c.length>0&&(this.endTimestamp=c.reduce(function(h,y){return h.endTimestamp&&y.endTimestamp?h.endTimestamp>y.endTimestamp?h:y:h}).endTimestamp);var l={contexts:{trace:this.getTraceContext()},spans:c,start_timestamp:this.startTimestamp,tags:this.tags,timestamp:this.endTimestamp,transaction:this.name,type:"transaction",debug_meta:this.metadata},d=Object.keys(this._measurements).length>0;return d&&(Qt.logger.log("[Measurements] Adding measurements to transaction",JSON.stringify(this._measurements,void 0,2)),l.measurements=this._measurements),Qt.logger.log("[Tracing] Finishing "+this.op+" transaction: "+this.name+"."),this._hub.captureEvent(l)}},e.prototype.toContext=function(){var r=t.prototype.toContext.call(this);return Qt.dropUndefinedKeys(Xt.__assign(Xt.__assign({},r),{name:this.name,trimEnd:this._trimEnd}))},e.prototype.updateWithContext=function(r){var n;return t.prototype.updateWithContext.call(this,r),this.name=(n=r.name,n??""),this._trimEnd=r.trimEnd,this},e}(Sf.Span);na.Transaction=Zg});var Pn=b(dt=>{Object.defineProperty(dt,"__esModule",{value:!0});var ia=N(),ue=P(),An=ta(),em=Cn(),Ef=ft(),tm=Rn();dt.DEFAULT_IDLE_TIMEOUT=1e3;dt.HEARTBEAT_INTERVAL=5e3;var Tf=function(t){ia.__extends(e,t);function e(r,n,i,o){i===void 0&&(i="");var a=t.call(this,o)||this;return a._pushActivity=r,a._popActivity=n,a.transactionSpanId=i,a}return e.prototype.add=function(r){var n=this;r.spanId!==this.transactionSpanId&&(r.finish=function(i){r.endTimestamp=typeof i=="number"?i:ue.timestampWithMs(),n._popActivity(r.spanId)},r.endTimestamp===void 0&&this._pushActivity(r.spanId)),t.prototype.add.call(this,r)},e}(em.SpanRecorder);dt.IdleTransactionSpanRecorder=Tf;var rm=function(t){ia.__extends(e,t);function e(r,n,i,o){i===void 0&&(i=dt.DEFAULT_IDLE_TIMEOUT),o===void 0&&(o=!1);var a=t.call(this,r,n)||this;return a._idleHub=n,a._idleTimeout=i,a._onScope=o,a.activities={},a._heartbeatCounter=0,a._finished=!1,a._beforeFinishCallbacks=[],n&&o&&(Of(n),ue.logger.log("Setting idle transaction on scope. Span ID: "+a.spanId),n.configureScope(function(s){return s.setSpan(a)})),a._initTimeout=setTimeout(function(){a._finished||a.finish()},a._idleTimeout),a}return e.prototype.finish=function(r){var n,i,o=this;if(r===void 0&&(r=ue.timestampWithMs()),this._finished=!0,this.activities={},this.spanRecorder){ue.logger.log("[Tracing] finishing IdleTransaction",new Date(r*1e3).toISOString(),this.op);try{for(var a=ia.__values(this._beforeFinishCallbacks),s=a.next();!s.done;s=a.next()){var u=s.value;u(this,r)}}catch(c){n={error:c}}finally{try{s&&!s.done&&(i=a.return)&&i.call(a)}finally{if(n)throw n.error}}this.spanRecorder.spans=this.spanRecorder.spans.filter(function(c){if(c.spanId===o.spanId)return!0;c.endTimestamp||(c.endTimestamp=r,c.setStatus(Ef.SpanStatus.Cancelled),ue.logger.log("[Tracing] cancelling span since transaction ended early",JSON.stringify(c,void 0,2)));var l=c.startTimestamp<r;return l||ue.logger.log("[Tracing] discarding Span since it happened after Transaction was finished",JSON.stringify(c,void 0,2)),l}),ue.logger.log("[Tracing] flushing IdleTransaction")}else ue.logger.log("[Tracing] No active IdleTransaction");return this._onScope&&Of(this._idleHub),t.prototype.finish.call(this,r)},e.prototype.registerBeforeFinishCallback=function(r){this._beforeFinishCallbacks.push(r)},e.prototype.initSpanRecorder=function(r){var n=this;if(!this.spanRecorder){var i=function(a){n._finished||n._pushActivity(a)},o=function(a){n._finished||n._popActivity(a)};this.spanRecorder=new Tf(i,o,this.spanId,r),ue.logger.log("Starting heartbeat"),this._pingHeartbeat()}this.spanRecorder.add(this)},e.prototype._pushActivity=function(r){this._initTimeout&&(clearTimeout(this._initTimeout),this._initTimeout=void 0),ue.logger.log("[Tracing] pushActivity: "+r),this.activities[r]=!0,ue.logger.log("[Tracing] new activities count",Object.keys(this.activities).length)},e.prototype._popActivity=function(r){var n=this;if(this.activities[r]&&(ue.logger.log("[Tracing] popActivity "+r),delete this.activities[r],ue.logger.log("[Tracing] new activities count",Object.keys(this.activities).length)),Object.keys(this.activities).length===0){var i=this._idleTimeout,o=ue.timestampWithMs()+i/1e3;setTimeout(function(){n._finished||(n.setTag(An.FINISH_REASON_TAG,An.IDLE_TRANSACTION_FINISH_REASONS[1]),n.finish(o))},i)}},e.prototype._beat=function(){if(!this._finished){var r=Object.keys(this.activities).join("");r===this._prevHeartbeatString?this._heartbeatCounter+=1:this._heartbeatCounter=1,this._prevHeartbeatString=r,this._heartbeatCounter>=3?(ue.logger.log("[Tracing] Transaction finished because of no change for 3 heart beats"),this.setStatus(Ef.SpanStatus.DeadlineExceeded),this.setTag(An.FINISH_REASON_TAG,An.IDLE_TRANSACTION_FINISH_REASONS[0]),this.finish()):this._pingHeartbeat()}},e.prototype._pingHeartbeat=function(){var r=this;ue.logger.log("pinging Heartbeat -> current counter: "+this._heartbeatCounter),setTimeout(function(){r._beat()},dt.HEARTBEAT_INTERVAL)},e}(tm.Transaction);dt.IdleTransaction=rm;function Of(t){if(t){var e=t.getScope();if(e){var r=e.getTransaction();r&&e.setSpan(void 0)}}}});var Nn=b((Er,Tr)=>{Object.defineProperty(Er,"__esModule",{value:!0});var oa=N(),wf=ge(),qn=ne(),Ce=P(),nm=yf(),im=Pn(),om=Rn(),am=lt();function sm(){var t=this.getScope();if(t){var e=t.getSpan();if(e)return{"sentry-trace":e.toTraceparent()}}return{}}function xf(t,e,r){if(!am.hasTracingEnabled(e))return t.sampled=!1,t;if(t.sampled!==void 0)return t.setMetadata({transactionSampling:{method:qn.TransactionSamplingMethod.Explicit}}),t;var n;return typeof e.tracesSampler=="function"?(n=e.tracesSampler(r),t.setMetadata({transactionSampling:{method:qn.TransactionSamplingMethod.Sampler,rate:Number(n)}})):r.parentSampled!==void 0?(n=r.parentSampled,t.setMetadata({transactionSampling:{method:qn.TransactionSamplingMethod.Inheritance}})):(n=e.tracesSampleRate,t.setMetadata({transactionSampling:{method:qn.TransactionSamplingMethod.Rate,rate:Number(n)}})),um(n)?n?(t.sampled=Math.random()<n,t.sampled?(Ce.logger.log("[Tracing] starting "+t.op+" transaction - "+t.name),t):(Ce.logger.log("[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = "+Number(n)+")"),t)):(Ce.logger.log("[Tracing] Discarding transaction because "+(typeof e.tracesSampler=="function"?"tracesSampler returned 0 or false":"a negative sampling decision was inherited or tracesSampleRate is set to 0")),t.sampled=!1,t):(Ce.logger.warn("[Tracing] Discarding transaction because of invalid sample rate."),t.sampled=!1,t)}function um(t){return isNaN(t)||!(typeof t=="number"||typeof t=="boolean")?(Ce.logger.warn("[Tracing] Given sample rate is invalid. Sample rate must be a boolean or a number between 0 and 1. Got "+JSON.stringify(t)+" of type "+JSON.stringify(typeof t)+"."),!1):t<0||t>1?(Ce.logger.warn("[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got "+t+"."),!1):!0}function cm(t,e){var r,n,i=((r=this.getClient())===null||r===void 0?void 0:r.getOptions())||{},o=new om.Transaction(t,this);return o=xf(o,i,oa.__assign({parentSampled:t.parentSampled,transactionContext:t},e)),o.sampled&&o.initSpanRecorder((n=i._experiments)===null||n===void 0?void 0:n.maxSpans),o}function fm(t,e,r,n,i){var o,a,s=((o=t.getClient())===null||o===void 0?void 0:o.getOptions())||{},u=new im.IdleTransaction(e,t,r,n);return u=xf(u,s,oa.__assign({parentSampled:e.parentSampled,transactionContext:e},i)),u.sampled&&u.initSpanRecorder((a=s._experiments)===null||a===void 0?void 0:a.maxSpans),u}Er.startIdleTransaction=fm;function If(){var t=wf.getMainCarrier();!t.__SENTRY__||(t.__SENTRY__.extensions=t.__SENTRY__.extensions||{},t.__SENTRY__.extensions.startTransaction||(t.__SENTRY__.extensions.startTransaction=cm),t.__SENTRY__.extensions.traceHeaders||(t.__SENTRY__.extensions.traceHeaders=sm))}Er._addTracingExtensions=If;function lm(){var t=wf.getMainCarrier();if(!!t.__SENTRY__){var e={mongodb:function(){var n=Ce.dynamicRequire(Tr,"./integrations/node/mongo");return new n.Mongo},mongoose:function(){var n=Ce.dynamicRequire(Tr,"./integrations/node/mongo");return new n.Mongo({mongoose:!0})},mysql:function(){var n=Ce.dynamicRequire(Tr,"./integrations/node/mysql");return new n.Mysql},pg:function(){var n=Ce.dynamicRequire(Tr,"./integrations/node/postgres");return new n.Postgres}},r=Object.keys(e).filter(function(n){return!!Ce.loadModule(n)}).map(function(n){try{return e[n]()}catch{return}}).filter(function(n){return n});r.length>0&&(t.__SENTRY__.integrations=oa.__spread(t.__SENTRY__.integrations||[],r))}}function dm(){If(),Ce.isNodeEnv()&&lm(),nm.registerErrorInstrumentation()}Er.addExtensionMethods=dm});var Rf=b(sa=>{Object.defineProperty(sa,"__esModule",{value:!0});var aa=N(),pm=P(),hm=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._router=e.router||e.app,this._methods=(Array.isArray(e.methods)?e.methods:[]).concat("use")}return t.prototype.setupOnce=function(){if(!this._router){pm.logger.error("ExpressIntegration is missing an Express instance");return}gm(this._router,this._methods)},t.id="Express",t}();sa.Express=hm;function Cf(t,e){var r=t.length;switch(r){case 2:return function(n,i){var o=i.__sentry_transaction;if(o){var a=o.startChild({description:t.name,op:"express.middleware."+e});i.once("finish",function(){a.finish()})}return t.call(this,n,i)};case 3:return function(n,i,o){var a,s=i.__sentry_transaction,u=(a=s)===null||a===void 0?void 0:a.startChild({description:t.name,op:"express.middleware."+e});t.call(this,n,i,function(){for(var c=[],l=0;l<arguments.length;l++)c[l]=arguments[l];var d;(d=u)===null||d===void 0||d.finish(),o.call.apply(o,aa.__spread([this],c))})};case 4:return function(n,i,o,a){var s,u=o.__sentry_transaction,c=(s=u)===null||s===void 0?void 0:s.startChild({description:t.name,op:"express.middleware."+e});t.call(this,n,i,o,function(){for(var l=[],d=0;d<arguments.length;d++)l[d]=arguments[d];var h;(h=c)===null||h===void 0||h.finish(),a.call.apply(a,aa.__spread([this],l))})};default:throw new Error("Express middleware takes 2-4 arguments. Got: "+r)}}function _m(t,e){return t.map(function(r){return typeof r=="function"?Cf(r,e):Array.isArray(r)?r.map(function(n){return typeof n=="function"?Cf(n,e):n}):r})}function vm(t,e){var r=t[e];return t[e]=function(){for(var n=[],i=0;i<arguments.length;i++)n[i]=arguments[i];return r.call.apply(r,aa.__spread([this],_m(n,e)))},t}function gm(t,e){e===void 0&&(e=[]),e.forEach(function(r){return vm(t,r)})}});var Af=b(ua=>{Object.defineProperty(ua,"__esModule",{value:!0});var Or=P(),mm=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._usePgNative=!!e.usePgNative}return t.prototype.setupOnce=function(e,r){var n,i=Or.loadModule("pg");if(!i){Or.logger.error("Postgres Integration was unable to require `pg` package.");return}if(this._usePgNative&&!((n=i.native)===null||n===void 0?void 0:n.Client)){Or.logger.error("Postgres Integration was unable to access 'pg-native' bindings.");return}var o=(this._usePgNative?i.native:i).Client;Or.fill(o.prototype,"query",function(a){return function(s,u,c){var l,d,h,y=r().getScope(),S=(l=y)===null||l===void 0?void 0:l.getSpan(),T=(d=S)===null||d===void 0?void 0:d.startChild({description:typeof s=="string"?s:s.text,op:"db"});if(typeof c=="function")return a.call(this,s,u,function(q,U){var k;(k=T)===null||k===void 0||k.finish(),c(q,U)});if(typeof u=="function")return a.call(this,s,function(q,U){var k;(k=T)===null||k===void 0||k.finish(),u(q,U)});var C=typeof u!="undefined"?a.call(this,s,u):a.call(this,s);return Or.isThenable(C)?C.then(function(q){var U;return(U=T)===null||U===void 0||U.finish(),q}):((h=T)===null||h===void 0||h.finish(),C)}})},t.id="Postgres",t}();ua.Postgres=mm});var Pf=b(fa=>{Object.defineProperty(fa,"__esModule",{value:!0});var ca=P(),ym=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(e,r){var n=ca.loadModule("mysql/lib/Connection.js");if(!n){ca.logger.error("Mysql Integration was unable to require `mysql` package.");return}ca.fill(n,"createQuery",function(i){return function(o,a,s){var u,c,l=r().getScope(),d=(u=l)===null||u===void 0?void 0:u.getSpan(),h=(c=d)===null||c===void 0?void 0:c.startChild({description:typeof o=="string"?o:o.sql,op:"db"});return typeof s=="function"?i.call(this,o,a,function(y,S,T){var C;(C=h)===null||C===void 0||C.finish(),s(y,S,T)}):typeof a=="function"?i.call(this,o,function(y,S,T){var C;(C=h)===null||C===void 0||C.finish(),a(y,S,T)}):i.call(this,o,a,s)}})},t.id="Mysql",t}();fa.Mysql=ym});var qf=b(da=>{Object.defineProperty(da,"__esModule",{value:!0});var la=N(),Mn=P(),bm=["aggregate","bulkWrite","countDocuments","createIndex","createIndexes","deleteMany","deleteOne","distinct","drop","dropIndex","dropIndexes","estimatedDocumentCount","find","findOne","findOneAndDelete","findOneAndReplace","findOneAndUpdate","indexes","indexExists","indexInformation","initializeOrderedBulkOp","insertMany","insertOne","isCapped","mapReduce","options","parallelCollectionScan","rename","replaceOne","stats","updateMany","updateOne"],Sm={bulkWrite:["operations"],countDocuments:["query"],createIndex:["fieldOrSpec"],createIndexes:["indexSpecs"],deleteMany:["filter"],deleteOne:["filter"],distinct:["key","query"],dropIndex:["indexName"],find:["query"],findOne:["query"],findOneAndDelete:["filter"],findOneAndReplace:["filter","replacement"],findOneAndUpdate:["filter","update"],indexExists:["indexes"],insertMany:["docs"],insertOne:["doc"],mapReduce:["map","reduce"],rename:["newName"],replaceOne:["filter","doc"],updateMany:["filter","update"],updateOne:["filter","update"]},Em=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._operations=Array.isArray(e.operations)?e.operations:bm,this._describeOperations="describeOperations"in e?e.describeOperations:!0,this._useMongoose=!!e.useMongoose}return t.prototype.setupOnce=function(e,r){var n=this._useMongoose?"mongoose":"mongodb",i=Mn.loadModule(n);if(!i){Mn.logger.error("Mongo Integration was unable to require `"+n+"` package.");return}this._instrumentOperations(i.Collection,this._operations,r)},t.prototype._instrumentOperations=function(e,r,n){var i=this;r.forEach(function(o){return i._patchOperation(e,o,n)})},t.prototype._patchOperation=function(e,r,n){if(r in e.prototype){var i=this._getSpanContextFromOperationArguments.bind(this);Mn.fill(e.prototype,r,function(o){return function(){for(var a=[],s=0;s<arguments.length;s++)a[s]=arguments[s];var u,c,l,d,h=a[a.length-1],y=n().getScope(),S=(u=y)===null||u===void 0?void 0:u.getSpan();if(typeof h!="function"||r==="mapReduce"&&a.length===2){var T=(c=S)===null||c===void 0?void 0:c.startChild(i(this,r,a)),C=o.call.apply(o,la.__spread([this],a));return Mn.isThenable(C)?C.then(function(U){var k;return(k=T)===null||k===void 0||k.finish(),U}):((l=T)===null||l===void 0||l.finish(),C)}var q=(d=S)===null||d===void 0?void 0:d.startChild(i(this,r,a.slice(0,-1)));return o.call.apply(o,la.__spread([this],a.slice(0,-1),[function(U,k){var Se;(Se=q)===null||Se===void 0||Se.finish(),h(U,k)}]))}})}},t.prototype._getSpanContextFromOperationArguments=function(e,r,n){var i={collectionName:e.collectionName,dbName:e.dbName,namespace:e.namespace},o={op:"db",description:r,data:i},a=Sm[r],s=Array.isArray(this._describeOperations)?this._describeOperations.includes(r):this._describeOperations;if(!a||!s)return o;try{if(r==="mapReduce"){var u=la.__read(n,2),c=u[0],l=u[1];i[a[0]]=typeof c=="string"?c:c.name||"<anonymous>",i[a[1]]=typeof l=="string"?l:l.name||"<anonymous>"}else for(var d=0;d<a.length;d++)i[a[d]]=JSON.stringify(n[d])}catch{}return o},t.id="Mongo",t}();da.Mongo=Em});var kf=b(ha=>{Object.defineProperty(ha,"__esModule",{value:!0});var pa=P(),Nf=ta(),Mf=ft(),Tm=lt(),kn=pa.getGlobalObject();function Om(){kn&&kn.document?kn.document.addEventListener("visibilitychange",function(){var t=Tm.getActiveTransaction();kn.document.hidden&&t&&(pa.logger.log("[Tracing] Transaction: "+Mf.SpanStatus.Cancelled+" -> since tab moved to the background, op: "+t.op),t.status||t.setStatus(Mf.SpanStatus.Cancelled),t.setTag("visibilitychange","document.hidden"),t.setTag(Nf.FINISH_REASON_TAG,Nf.IDLE_TRANSACTION_FINISH_REASONS[2]),t.finish())}):pa.logger.warn("[Tracing] Could not set up background tab detection due to lack of global document")}ha.registerBackgroundTabDetection=Om});var Dn=b(_a=>{Object.defineProperty(_a,"__esModule",{value:!0});_a.bindReporter=function(t,e,r){var n;return function(i){e.value>=0&&(i||r)&&(e.delta=e.value-(n||0),(e.delta||n===void 0)&&(n=e.value,t(e)))}}});var Df=b(va=>{Object.defineProperty(va,"__esModule",{value:!0});va.generateUniqueID=function(){return"v2-"+Date.now()+"-"+(Math.floor(Math.random()*(9e12-1))+1e12)}});var Fn=b(ga=>{Object.defineProperty(ga,"__esModule",{value:!0});var wm=Df();ga.initMetric=function(t,e){return{name:t,value:e??-1,delta:0,entries:[],id:wm.generateUniqueID()}}});var jn=b(ma=>{Object.defineProperty(ma,"__esModule",{value:!0});ma.observe=function(t,e){try{if(PerformanceObserver.supportedEntryTypes.includes(t)){if(t==="first-input"&&!("PerformanceEventTiming"in self))return;var r=new PerformanceObserver(function(n){return n.getEntries().map(e)});return r.observe({type:t,buffered:!0}),r}}catch{}}});var wr=b(ya=>{Object.defineProperty(ya,"__esModule",{value:!0});var xm=P();ya.onHidden=function(t,e){var r=function(n){(n.type==="pagehide"||xm.getGlobalObject().document.visibilityState==="hidden")&&(t(n),e&&(removeEventListener("visibilitychange",r,!0),removeEventListener("pagehide",r,!0)))};addEventListener("visibilitychange",r,!0),addEventListener("pagehide",r,!0)}});var Ff=b(ba=>{Object.defineProperty(ba,"__esModule",{value:!0});var Im=Dn(),Cm=Fn(),Rm=jn(),Am=wr();ba.getCLS=function(t,e){var r=Cm.initMetric("CLS",0),n,i=0,o=[],a=function(u){if(u&&!u.hadRecentInput){var c=o[0],l=o[o.length-1];i&&o.length!==0&&u.startTime-l.startTime<1e3&&u.startTime-c.startTime<5e3?(i+=u.value,o.push(u)):(i=u.value,o=[u]),i>r.value&&(r.value=i,r.entries=o,n&&n())}},s=Rm.observe("layout-shift",a);s&&(n=Im.bindReporter(t,r,e),Am.onHidden(function(){s.takeRecords().map(a),n(!0)}))}});var Ln=b(Sa=>{Object.defineProperty(Sa,"__esModule",{value:!0});var Pm=P(),qm=wr(),Hn=-1,Nm=function(){return Pm.getGlobalObject().document.visibilityState==="hidden"?0:1/0},Mm=function(){qm.onHidden(function(t){var e=t.timeStamp;Hn=e},!0)};Sa.getVisibilityWatcher=function(){return Hn<0&&(Hn=Nm(),Mm()),{get firstHiddenTime(){return Hn}}}});var jf=b(Ea=>{Object.defineProperty(Ea,"__esModule",{value:!0});var km=Dn(),Dm=Ln(),Fm=Fn(),jm=jn(),Hm=wr();Ea.getFID=function(t,e){var r=Dm.getVisibilityWatcher(),n=Fm.initMetric("FID"),i,o=function(s){i&&s.startTime<r.firstHiddenTime&&(n.value=s.processingStart-s.startTime,n.entries.push(s),i(!0))},a=jm.observe("first-input",o);a&&(i=km.bindReporter(t,n,e),Hm.onHidden(function(){a.takeRecords().map(o),a.disconnect()},!0))}});var Lf=b(Ta=>{Object.defineProperty(Ta,"__esModule",{value:!0});var Lm=Dn(),Um=Ln(),Bm=Fn(),Gm=jn(),zm=wr(),Hf={};Ta.getLCP=function(t,e){var r=Um.getVisibilityWatcher(),n=Bm.initMetric("LCP"),i,o=function(u){var c=u.startTime;c<r.firstHiddenTime&&(n.value=c,n.entries.push(u)),i&&i()},a=Gm.observe("largest-contentful-paint",o);if(a){i=Lm.bindReporter(t,n,e);var s=function(){Hf[n.id]||(a.takeRecords().map(o),a.disconnect(),Hf[n.id]=!0,i(!0))};["keydown","click"].forEach(function(u){addEventListener(u,s,{once:!0,capture:!0})}),zm.onHidden(s,!0)}}});var Gf=b(xr=>{Object.defineProperty(xr,"__esModule",{value:!0});var Uf=N(),Z=P(),te=lt(),Vm=Ff(),Wm=jf(),Ym=Lf(),$m=Ln(),le=Z.getGlobalObject(),Km=function(){function t(e){e===void 0&&(e=!1);var r,n;this._reportAllChanges=e,this._measurements={},this._performanceCursor=0,!Z.isNodeEnv()&&((r=le)===null||r===void 0?void 0:r.performance)&&((n=le)===null||n===void 0?void 0:n.document)&&(le.performance.mark&&le.performance.mark("sentry-tracing-init"),this._trackCLS(),this._trackLCP(),this._trackFID())}return t.prototype.addPerformanceEntries=function(e){var r=this;if(!(!le||!le.performance||!le.performance.getEntries||!Z.browserPerformanceTimeOrigin)){Z.logger.log("[Tracing] Adding & adjusting spans using Performance API");var n=te.msToSec(Z.browserPerformanceTimeOrigin),i;if(le.document&&le.document.scripts){for(var o=0;o<le.document.scripts.length;o++)if(le.document.scripts[o].dataset.entry==="true"){i=le.document.scripts[o].src;break}}var a,s,u,c;if(le.performance.getEntries().slice(this._performanceCursor).forEach(function(d){var h=te.msToSec(d.startTime),y=te.msToSec(d.duration);if(!(e.op==="navigation"&&n+h<e.startTimestamp))switch(d.entryType){case"navigation":{Jm(e,d,n),u=n+te.msToSec(d.responseStart),c=n+te.msToSec(d.requestStart);break}case"mark":case"paint":case"measure":{var S=Xm(e,d,h,y,n);s===void 0&&d.name==="sentry-tracing-init"&&(s=S);var T=$m.getVisibilityWatcher(),C=d.startTime<T.firstHiddenTime;d.name==="first-paint"&&C&&(Z.logger.log("[Measurements] Adding FP"),r._measurements.fp={value:d.startTime},r._measurements["mark.fp"]={value:S}),d.name==="first-contentful-paint"&&C&&(Z.logger.log("[Measurements] Adding FCP"),r._measurements.fcp={value:d.startTime},r._measurements["mark.fcp"]={value:S});break}case"resource":{var q=d.name.replace(le.location.origin,""),U=Bf(e,d,q,h,y,n);a===void 0&&(i||"").indexOf(q)>-1&&(a=U);break}default:}}),a!==void 0&&s!==void 0&&ht(e,{description:"evaluation",endTimestamp:s,op:"script",startTimestamp:a}),this._performanceCursor=Math.max(performance.getEntries().length-1,0),this._trackNavigator(e),e.op==="pageload"){var l=te.msToSec(Z.browserPerformanceTimeOrigin);typeof u=="number"&&(Z.logger.log("[Measurements] Adding TTFB"),this._measurements.ttfb={value:(u-e.startTimestamp)*1e3},typeof c=="number"&&c<=u&&(this._measurements["ttfb.requestTime"]={value:(u-c)*1e3})),["fcp","fp","lcp"].forEach(function(d){if(!(!r._measurements[d]||l>=e.startTimestamp)){var h=r._measurements[d].value,y=l+te.msToSec(h),S=Math.abs((y-e.startTimestamp)*1e3),T=S-h;Z.logger.log("[Measurements] Normalized "+d+" from "+h+" to "+S+" ("+T+")"),r._measurements[d].value=S}}),this._measurements["mark.fid"]&&this._measurements.fid&&ht(e,{description:"first input delay",endTimestamp:this._measurements["mark.fid"].value+te.msToSec(this._measurements.fid.value),op:"web.vitals",startTimestamp:this._measurements["mark.fid"].value}),"fcp"in this._measurements||delete this._measurements.cls,e.setMeasurements(this._measurements),this._tagMetricInfo(e),e.setTag("sentry_reportAllChanges",this._reportAllChanges)}}},t.prototype._tagMetricInfo=function(e){this._lcpEntry&&(Z.logger.log("[Measurements] Adding LCP Data"),this._lcpEntry.element&&e.setTag("lcp.element",Z.htmlTreeAsString(this._lcpEntry.element)),this._lcpEntry.id&&e.setTag("lcp.id",this._lcpEntry.id),this._lcpEntry.url&&e.setTag("lcp.url",this._lcpEntry.url.trim().slice(0,200)),e.setTag("lcp.size",this._lcpEntry.size)),this._clsEntry&&this._clsEntry.sources&&(Z.logger.log("[Measurements] Adding CLS Data"),this._clsEntry.sources.forEach(function(r,n){return e.setTag("cls.source."+(n+1),Z.htmlTreeAsString(r.node))}))},t.prototype._trackCLS=function(){var e=this;Vm.getCLS(function(r){var n=r.entries.pop();!n||(Z.logger.log("[Measurements] Adding CLS"),e._measurements.cls={value:r.value},e._clsEntry=n)})},t.prototype._trackNavigator=function(e){var r=le.navigator;if(!!r){var n=r.connection;n&&(n.effectiveType&&e.setTag("effectiveConnectionType",n.effectiveType),n.type&&e.setTag("connectionType",n.type),Un(n.rtt)&&(this._measurements["connection.rtt"]={value:n.rtt}),Un(n.downlink)&&(this._measurements["connection.downlink"]={value:n.downlink})),Un(r.deviceMemory)&&e.setTag("deviceMemory",String(r.deviceMemory)),Un(r.hardwareConcurrency)&&e.setTag("hardwareConcurrency",String(r.hardwareConcurrency))}},t.prototype._trackLCP=function(){var e=this;Ym.getLCP(function(r){var n=r.entries.pop();if(!!n){var i=te.msToSec(Z.browserPerformanceTimeOrigin),o=te.msToSec(n.startTime);Z.logger.log("[Measurements] Adding LCP"),e._measurements.lcp={value:r.value},e._measurements["mark.lcp"]={value:i+o},e._lcpEntry=n}},this._reportAllChanges)},t.prototype._trackFID=function(){var e=this;Wm.getFID(function(r){var n=r.entries.pop();if(!!n){var i=te.msToSec(Z.browserPerformanceTimeOrigin),o=te.msToSec(n.startTime);Z.logger.log("[Measurements] Adding FID"),e._measurements.fid={value:r.value},e._measurements["mark.fid"]={value:i+o}}})},t}();xr.MetricsInstrumentation=Km;function Jm(t,e,r){pt({transaction:t,entry:e,event:"unloadEvent",timeOrigin:r}),pt({transaction:t,entry:e,event:"redirect",timeOrigin:r}),pt({transaction:t,entry:e,event:"domContentLoadedEvent",timeOrigin:r}),pt({transaction:t,entry:e,event:"loadEvent",timeOrigin:r}),pt({transaction:t,entry:e,event:"connect",timeOrigin:r}),pt({transaction:t,entry:e,event:"secureConnection",timeOrigin:r,eventEnd:"connectEnd",description:"TLS/SSL"}),pt({transaction:t,entry:e,event:"fetch",timeOrigin:r,eventEnd:"domainLookupStart",description:"cache"}),pt({transaction:t,entry:e,event:"domainLookup",timeOrigin:r,description:"DNS"}),Qm(t,e,r)}function Xm(t,e,r,n,i){var o=i+r,a=o+n;return ht(t,{description:e.name,endTimestamp:a,op:e.entryType,startTimestamp:o}),o}function Bf(t,e,r,n,i,o){if(!(e.initiatorType==="xmlhttprequest"||e.initiatorType==="fetch")){var a={};"transferSize"in e&&(a["Transfer Size"]=e.transferSize),"encodedBodySize"in e&&(a["Encoded Body Size"]=e.encodedBodySize),"decodedBodySize"in e&&(a["Decoded Body Size"]=e.decodedBodySize);var s=o+n,u=s+i;return ht(t,{description:r,endTimestamp:u,op:e.initiatorType?"resource."+e.initiatorType:"resource",startTimestamp:s,data:a}),u}}xr.addResourceSpans=Bf;function pt(t){var e=t.transaction,r=t.entry,n=t.event,i=t.timeOrigin,o=t.eventEnd,a=t.description,s=o?r[o]:r[n+"End"],u=r[n+"Start"];!u||!s||ht(e,{op:"browser",description:a??n,startTimestamp:i+te.msToSec(u),endTimestamp:i+te.msToSec(s)})}function Qm(t,e,r){ht(t,{op:"browser",description:"request",startTimestamp:r+te.msToSec(e.requestStart),endTimestamp:r+te.msToSec(e.responseEnd)}),ht(t,{op:"browser",description:"response",startTimestamp:r+te.msToSec(e.responseStart),endTimestamp:r+te.msToSec(e.responseEnd)})}function ht(t,e){var r=e.startTimestamp,n=Uf.__rest(e,["startTimestamp"]);return r&&t.startTimestamp>r&&(t.startTimestamp=r),t.startChild(Uf.__assign({startTimestamp:r},n))}xr._startChild=ht;function Un(t){return typeof t=="number"&&isFinite(t)}});var Oa=b(Je=>{Object.defineProperty(Je,"__esModule",{value:!0});var Ke=N(),Ir=P(),Zm=ft(),Bn=lt();Je.DEFAULT_TRACING_ORIGINS=["localhost",/^\//];Je.defaultRequestInstrumentationOptions={traceFetch:!0,traceXHR:!0,tracingOrigins:Je.DEFAULT_TRACING_ORIGINS};function ey(t){var e=Ke.__assign(Ke.__assign({},Je.defaultRequestInstrumentationOptions),t),r=e.traceFetch,n=e.traceXHR,i=e.tracingOrigins,o=e.shouldCreateSpanForRequest,a={},s=function(l){if(a[l])return a[l];var d=i;return a[l]=d.some(function(h){return Ir.isMatchingPattern(l,h)})&&!Ir.isMatchingPattern(l,"sentry_key"),a[l]},u=s;typeof o=="function"&&(u=function(l){return s(l)&&o(l)});var c={};r&&Ir.addInstrumentationHandler({callback:function(l){zf(l,u,c)},type:"fetch"}),n&&Ir.addInstrumentationHandler({callback:function(l){Vf(l,u,c)},type:"xhr"})}Je.instrumentOutgoingRequests=ey;function zf(t,e,r){if(!(!Bn.hasTracingEnabled()||!(t.fetchData&&e(t.fetchData.url)))){if(t.endTimestamp&&t.fetchData.__span){var n=r[t.fetchData.__span];n&&(t.response?n.setHttpStatus(t.response.status):t.error&&n.setStatus(Zm.SpanStatus.InternalError),n.finish(),delete r[t.fetchData.__span]);return}var i=Bn.getActiveTransaction();if(i){var n=i.startChild({data:Ke.__assign(Ke.__assign({},t.fetchData),{type:"fetch"}),description:t.fetchData.method+" "+t.fetchData.url,op:"http.client"});t.fetchData.__span=n.spanId,r[n.spanId]=n;var o=t.args[0]=t.args[0],a=t.args[1]=t.args[1]||{},s=a.headers;Ir.isInstanceOf(o,Request)&&(s=o.headers),s?typeof s.append=="function"?s.append("sentry-trace",n.toTraceparent()):Array.isArray(s)?s=Ke.__spread(s,[["sentry-trace",n.toTraceparent()]]):s=Ke.__assign(Ke.__assign({},s),{"sentry-trace":n.toTraceparent()}):s={"sentry-trace":n.toTraceparent()},a.headers=s}}}Je.fetchCallback=zf;function Vf(t,e,r){var n,i;if(!(!Bn.hasTracingEnabled()||((n=t.xhr)===null||n===void 0?void 0:n.__sentry_own_request__)||!(((i=t.xhr)===null||i===void 0?void 0:i.__sentry_xhr__)&&e(t.xhr.__sentry_xhr__.url)))){var o=t.xhr.__sentry_xhr__;if(t.endTimestamp&&t.xhr.__sentry_xhr_span_id__){var a=r[t.xhr.__sentry_xhr_span_id__];a&&(a.setHttpStatus(o.status_code),a.finish(),delete r[t.xhr.__sentry_xhr_span_id__]);return}var s=Bn.getActiveTransaction();if(s){var a=s.startChild({data:Ke.__assign(Ke.__assign({},o.data),{type:"xhr",method:o.method,url:o.url}),description:o.method+" "+o.url,op:"http.client"});if(t.xhr.__sentry_xhr_span_id__=a.spanId,r[t.xhr.__sentry_xhr_span_id__]=a,t.xhr.setRequestHeader)try{t.xhr.setRequestHeader("sentry-trace",a.toTraceparent())}catch{}}}}Je.xhrCallback=Vf});var Wf=b(wa=>{Object.defineProperty(wa,"__esModule",{value:!0});var Gn=P(),Cr=Gn.getGlobalObject();function ty(t,e,r){if(e===void 0&&(e=!0),r===void 0&&(r=!0),!Cr||!Cr.location){Gn.logger.warn("Could not initialize routing instrumentation due to invalid location");return}var n=Cr.location.href,i;e&&(i=t({name:Cr.location.pathname,op:"pageload"})),r&&Gn.addInstrumentationHandler({callback:function(o){var a=o.to,s=o.from;if(s===void 0&&n&&n.indexOf(a)!==-1){n=void 0;return}s!==a&&(n=void 0,i&&(Gn.logger.log("[Tracing] Finishing current transaction with op: "+i.op),i.finish()),i=t({name:Cr.location.pathname,op:"navigation"}))},type:"history"})}wa.instrumentRoutingWithDefaults=ty});var Jf=b(It=>{Object.defineProperty(It,"__esModule",{value:!0});var Xe=N(),xt=P(),ry=Nn(),ny=Pn(),iy=ft(),Yf=lt(),oy=kf(),ay=Gf(),zn=Oa(),sy=Wf();It.DEFAULT_MAX_TRANSACTION_DURATION_SECONDS=600;var uy=Xe.__assign({idleTimeout:ny.DEFAULT_IDLE_TIMEOUT,markBackgroundTransactions:!0,maxTransactionDuration:It.DEFAULT_MAX_TRANSACTION_DURATION_SECONDS,routingInstrumentation:sy.instrumentRoutingWithDefaults,startTransactionOnLocationChange:!0,startTransactionOnPageLoad:!0},zn.defaultRequestInstrumentationOptions),cy=function(){function t(e){this.name=t.id,this._emitOptionsWarning=!1,this._configuredIdleTimeout=void 0;var r=zn.defaultRequestInstrumentationOptions.tracingOrigins;e&&(this._configuredIdleTimeout=e.idleTimeout,e.tracingOrigins&&Array.isArray(e.tracingOrigins)&&e.tracingOrigins.length!==0?r=e.tracingOrigins:this._emitOptionsWarning=!0),this.options=Xe.__assign(Xe.__assign(Xe.__assign({},uy),e),{tracingOrigins:r});var n=this.options._metricOptions;this._metrics=new ay.MetricsInstrumentation(n&&n._reportAllChanges)}return t.prototype.setupOnce=function(e,r){var n=this;this._getCurrentHub=r,this._emitOptionsWarning&&(xt.logger.warn("[Tracing] You need to define `tracingOrigins` in the options. Set an array of urls or patterns to trace."),xt.logger.warn("[Tracing] We added a reasonable default for you: "+zn.defaultRequestInstrumentationOptions.tracingOrigins));var i=this.options,o=i.routingInstrumentation,a=i.startTransactionOnLocationChange,s=i.startTransactionOnPageLoad,u=i.markBackgroundTransactions,c=i.traceFetch,l=i.traceXHR,d=i.tracingOrigins,h=i.shouldCreateSpanForRequest;o(function(y){return n._createRouteTransaction(y)},s,a),u&&oy.registerBackgroundTabDetection(),zn.instrumentOutgoingRequests({traceFetch:c,traceXHR:l,tracingOrigins:d,shouldCreateSpanForRequest:h})},t.prototype._createRouteTransaction=function(e){var r=this;if(!this._getCurrentHub){xt.logger.warn("[Tracing] Did not create "+e.op+" transaction because _getCurrentHub is invalid.");return}var n=this.options,i=n.beforeNavigate,o=n.idleTimeout,a=n.maxTransactionDuration,s=e.op==="pageload"?$f():void 0,u=Xe.__assign(Xe.__assign(Xe.__assign({},e),s),{trimEnd:!0}),c=typeof i=="function"?i(u):u,l=c===void 0?Xe.__assign(Xe.__assign({},u),{sampled:!1}):c;l.sampled===!1&&xt.logger.log("[Tracing] Will not send "+l.op+" transaction because of beforeNavigate."),xt.logger.log("[Tracing] Starting "+l.op+" transaction on scope");var d=this._getCurrentHub(),h=xt.getGlobalObject().location,y=ry.startIdleTransaction(d,l,o,!0,{location:h});return y.registerBeforeFinishCallback(function(S,T){r._metrics.addPerformanceEntries(S),fy(Yf.secToMs(a),S,T)}),y.setTag("idleTimeout",this._configuredIdleTimeout),y},t.id="BrowserTracing",t}();It.BrowserTracing=cy;function $f(){var t=Kf("sentry-trace");if(t)return Yf.extractTraceparentData(t)}It.getHeaderContext=$f;function Kf(t){var e=xt.getGlobalObject().document.querySelector("meta[name="+t+"]");return e?e.getAttribute("content"):null}It.getMetaContent=Kf;function fy(t,e,r){var n=r-e.startTimestamp,i=r&&(n>t||n<0);i&&(e.setStatus(iy.SpanStatus.DeadlineExceeded),e.setTag("maxTransactionDurationExceeded","true"))}});var Vn=b(Rr=>{Object.defineProperty(Rr,"__esModule",{value:!0});var ly=Jf();Rr.BrowserTracing=ly.BrowserTracing;var Xf=Oa();Rr.instrumentOutgoingRequests=Xf.instrumentOutgoingRequests;Rr.defaultRequestInstrumentationOptions=Xf.defaultRequestInstrumentationOptions});var Qf=b(Ct=>{Object.defineProperty(Ct,"__esModule",{value:!0});var dy=Rf();Ct.Express=dy.Express;var py=Af();Ct.Postgres=py.Postgres;var hy=Pf();Ct.Mysql=hy.Mysql;var _y=qf();Ct.Mongo=_y.Mongo;var vy=Vn();Ct.BrowserTracing=vy.BrowserTracing});var tl=b(ae=>{Object.defineProperty(ae,"__esModule",{value:!0});var Zf=Nn();ae.addExtensionMethods=Zf.addExtensionMethods;var gy=Qf();ae.Integrations=gy;var my=Vn();ae.BrowserTracing=my.BrowserTracing;var yy=Cn();ae.Span=yy.Span;var by=Rn();ae.Transaction=by.Transaction;var el=Vn();ae.registerRequestInstrumentation=el.instrumentOutgoingRequests;ae.defaultRequestInstrumentationOptions=el.defaultRequestInstrumentationOptions;var Sy=ft();ae.SpanStatus=Sy.SpanStatus;var Ey=Pn();ae.IdleTransaction=Ey.IdleTransaction;var Ty=Nn();ae.startIdleTransaction=Ty.startIdleTransaction;Zf.addExtensionMethods();var Ar=lt();ae.extractTraceparentData=Ar.extractTraceparentData;ae.getActiveTransaction=Ar.getActiveTransaction;ae.hasTracingEnabled=Ar.hasTracingEnabled;ae.stripUrlQueryAndFragment=Ar.stripUrlQueryAndFragment;ae.TRACEPARENT_REGEXP=Ar.TRACEPARENT_REGEXP});var rl=b(xa=>{"use strict";xa.parse=Iy;xa.serialize=Cy;var Oy=decodeURIComponent,wy=encodeURIComponent,xy=/; */,Wn=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;function Iy(t,e){if(typeof t!="string")throw new TypeError("argument str must be a string");for(var r={},n=e||{},i=t.split(xy),o=n.decode||Oy,a=0;a<i.length;a++){var s=i[a],u=s.indexOf("=");if(!(u<0)){var c=s.substr(0,u).trim(),l=s.substr(++u,s.length).trim();l[0]=='"'&&(l=l.slice(1,-1)),r[c]==null&&(r[c]=Ry(l,o))}}return r}function Cy(t,e,r){var n=r||{},i=n.encode||wy;if(typeof i!="function")throw new TypeError("option encode is invalid");if(!Wn.test(t))throw new TypeError("argument name is invalid");var o=i(e);if(o&&!Wn.test(o))throw new TypeError("argument val is invalid");var a=t+"="+o;if(n.maxAge!=null){var s=n.maxAge-0;if(isNaN(s)||!isFinite(s))throw new TypeError("option maxAge is invalid");a+="; Max-Age="+Math.floor(s)}if(n.domain){if(!Wn.test(n.domain))throw new TypeError("option domain is invalid");a+="; Domain="+n.domain}if(n.path){if(!Wn.test(n.path))throw new TypeError("option path is invalid");a+="; Path="+n.path}if(n.expires){if(typeof n.expires.toUTCString!="function")throw new TypeError("option expires is invalid");a+="; Expires="+n.expires.toUTCString()}if(n.httpOnly&&(a+="; HttpOnly"),n.secure&&(a+="; Secure"),n.sameSite){var u=typeof n.sameSite=="string"?n.sameSite.toLowerCase():n.sameSite;switch(u){case!0:a+="; SameSite=Strict";break;case"lax":a+="; SameSite=Lax";break;case"strict":a+="; SameSite=Strict";break;case"none":a+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}}return a}function Ry(t,e){try{return e(t)}catch{return t}}});var ol=b(At=>{Object.defineProperty(At,"__esModule",{value:!0});var He=N(),Rt=ie(),Ay=tl(),nl=ne(),Zt=P(),Py=rl(),qy=require("domain"),Ny=require("os"),My=require("url"),Pr=Jo();function ky(){return function(e,r,n){var i;e.headers&&Zt.isString(e.headers["sentry-trace"])&&(i=Ay.extractTraceparentData(e.headers["sentry-trace"]));var o=Rt.startTransaction(He.__assign({name:Yn(e,{path:!0,method:!0}),op:"http.server"},i),{request:$n(e)});Rt.getCurrentHub().configureScope(function(a){a.setSpan(o)}),r.__sentry_transaction=o,r.once("finish",function(){setImmediate(function(){Dy(o,e),o.setHttpStatus(r.statusCode),o.finish()})}),n()}}At.tracingHandler=ky;function Dy(t,e){!t||(t.name=Yn(e,{path:!0,method:!0}),t.setData("url",e.originalUrl),t.setData("baseUrl",e.baseUrl),t.setData("query",e.query))}function Yn(t,e){e===void 0&&(e={});var r,n=(r=t.method)===null||r===void 0?void 0:r.toUpperCase(),i="";t.route?i=""+(t.baseUrl||"")+t.route.path:(t.originalUrl||t.url)&&(i=Zt.stripUrlQueryAndFragment(t.originalUrl||t.url||""));var o="";return e.method&&n&&(o+=n),e.method&&e.path&&(o+=" "),e.path&&i&&(o+=i),o}function Fy(t,e){var r;switch(e){case"path":return Yn(t,{path:!0});case"handler":return((r=t.route)===null||r===void 0?void 0:r.stack[0].name)||"<anonymous>";case"methodPath":default:return Yn(t,{path:!0,method:!0})}}var jy=["id","username","email"];function Hy(t,e){var r={},n=Array.isArray(e)?e:jy;return n.forEach(function(i){t&&i in t&&(r[i]=t[i])}),r}var Ly=["cookies","data","headers","method","query_string","url"];function $n(t,e){e===void 0&&(e=Ly);var r={},n=t.headers||t.header||{},i=t.method,o=t.hostname||t.host||n.host||"<no host>",a=t.protocol==="https"||t.secure||(t.socket||{}).encrypted?"https":"http",s=t.originalUrl||t.url||"",u=a+"://"+o+s;return e.forEach(function(c){switch(c){case"headers":r.headers=n;break;case"method":r.method=i;break;case"url":r.url=u;break;case"cookies":r.cookies=t.cookies||Py.parse(n.cookie||"");break;case"query_string":r.query_string=t.query||My.parse(s||"",!1).query;break;case"data":if(i==="GET"||i==="HEAD")break;t.body!==void 0&&(r.data=Zt.isString(t.body)?t.body:JSON.stringify(Zt.normalize(t.body)));break;default:({}).hasOwnProperty.call(t,c)&&(r[c]=t[c])}}),r}At.extractRequestData=$n;function il(t,e,r){if(r=He.__assign({ip:!1,request:!0,serverName:!0,transaction:!0,user:!0,version:!0},r),r.version&&(t.contexts=He.__assign(He.__assign({},t.contexts),{runtime:{name:"node",version:global.process.version}})),r.request){var n=Array.isArray(r.request)?$n(e,r.request):$n(e);t.request=He.__assign(He.__assign({},t.request),n)}if(r.serverName&&!t.server_name&&(t.server_name=global.process.env.SENTRY_NAME||Ny.hostname()),r.user){var i=e.user&&Zt.isPlainObject(e.user)?Hy(e.user,r.user):{};Object.keys(i)&&(t.user=He.__assign(He.__assign({},t.user),i))}if(r.ip){var o=e.ip||e.connection&&e.connection.remoteAddress;o&&(t.user=He.__assign(He.__assign({},t.user),{ip_address:o}))}return r.transaction&&!t.transaction&&(t.transaction=Fy(e,r.transaction)),t}At.parseRequest=il;function Uy(t){var e=Rt.getCurrentHub(),r=e.getClient();if(r&&Pr.isAutoSessionTrackingEnabled(r)){r.initSessionFlusher();var n=e.getScope();n&&n.getSession()&&n.setSession()}return function(o,a,s){if(t&&t.flushTimeout&&t.flushTimeout>0){var u=a.end;a.end=function(l,d,h){var y=this;Pr.flush(t.flushTimeout).then(function(){u.call(y,l,d,h)}).then(null,function(S){Zt.logger.error(S)})}}var c=qy.create();c.add(o),c.add(a),c.on("error",s),c.run(function(){var l=Rt.getCurrentHub();l.configureScope(function(d){d.addEventProcessor(function(S){return il(S,o,t)});var h=l.getClient();if(Pr.isAutoSessionTrackingEnabled(h)){var y=l.getScope();y&&y.setRequestSession({status:nl.RequestSessionStatus.Ok})}}),a.once("finish",function(){var d=l.getClient();Pr.isAutoSessionTrackingEnabled(d)&&setImmediate(function(){d&&d._captureRequestSession&&d._captureRequestSession()})}),s()})}}At.requestHandler=Uy;function By(t){var e=t.status||t.statusCode||t.status_code||t.output&&t.output.statusCode;return e?parseInt(e,10):500}function Gy(t){var e=By(t);return e>=500}function zy(t){return function(r,n,i,o){var a=t&&t.shouldHandleError||Gy;if(a(r)){Rt.withScope(function(s){var u=i.__sentry_transaction;u&&s.getSpan()===void 0&&s.setSpan(u);var c=Rt.getCurrentHub().getClient();if(c&&Pr.isAutoSessionTrackingEnabled(c)){var l=c._sessionFlusher!==void 0;if(l){var d=s.getRequestSession();d&&d.status!==void 0&&(d.status=nl.RequestSessionStatus.Crashed)}}var h=Rt.captureException(r);i.sentry=h,o(r)});return}o(r)}}At.errorHandler=zy});var ul=b(H=>{Object.defineProperty(H,"__esModule",{value:!0});var al=N(),sl=ne();H.Severity=sl.Severity;H.Status=sl.Status;var X=ie();H.addGlobalEventProcessor=X.addGlobalEventProcessor;H.addBreadcrumb=X.addBreadcrumb;H.captureException=X.captureException;H.captureEvent=X.captureEvent;H.captureMessage=X.captureMessage;H.configureScope=X.configureScope;H.getHubFromCarrier=X.getHubFromCarrier;H.getCurrentHub=X.getCurrentHub;H.Hub=X.Hub;H.makeMain=X.makeMain;H.Scope=X.Scope;H.startTransaction=X.startTransaction;H.SDK_VERSION=X.SDK_VERSION;H.setContext=X.setContext;H.setExtra=X.setExtra;H.setExtras=X.setExtras;H.setTag=X.setTag;H.setTags=X.setTags;H.setUser=X.setUser;H.withScope=X.withScope;var Vy=Po();H.NodeBackend=Vy.NodeBackend;var Wy=Mo();H.NodeClient=Wy.NodeClient;var er=Jo();H.defaultIntegrations=er.defaultIntegrations;H.init=er.init;H.lastEventId=er.lastEventId;H.flush=er.flush;H.close=er.close;H.getSentryRelease=er.getSentryRelease;var Yy=hf();H.deepReadDirSync=Yy.deepReadDirSync;var $y=po();H.SDK_NAME=$y.SDK_NAME;var Ky=ie(),Jy=ge(),Xy=require("domain"),Qy=ol();H.Handlers=Qy;var Zy=$o(),eb=Ro();H.Transports=eb;var tb=al.__assign(al.__assign({},Ky.Integrations),Zy);H.Integrations=tb;var qr=Jy.getMainCarrier();qr.__SENTRY__&&(qr.__SENTRY__.extensions=qr.__SENTRY__.extensions||{},qr.__SENTRY__.extensions.domain=qr.__SENTRY__.extensions.domain||Xy)});var fl=b(Ca=>{Object.defineProperty(Ca,"__esModule",{value:!0});var cl=N(),Ia=P(),rb=/^\[((?:[$a-zA-Z0-9]+:)?(?:[$a-zA-Z0-9]+))\] (.*?)\n?(\S+)$/,nb=function(){function t(e){if(e===void 0&&(e={}),this.name=t.id,Ia.logger.log("You are still using the Angular integration, consider moving to @sentry/angular"),this._angular=e.angular||Ia.getGlobalObject().angular,!this._angular){Ia.logger.error("AngularIntegration is missing an Angular instance");return}this._module=this._angular.module(t.moduleName,[])}return t.prototype.setupOnce=function(e,r){var n=this;!this._module||(this._getCurrentHub=r,this._module.config(["$provide",function(i){i.decorator("$exceptionHandler",["$delegate",n._$exceptionHandlerDecorator.bind(n)])}]))},t.prototype._$exceptionHandlerDecorator=function(e){var r=this;return function(n,i){var o=r._getCurrentHub&&r._getCurrentHub();o&&o.getIntegration(t)&&o.withScope(function(a){i&&a.setExtra("cause",i),a.addEventProcessor(function(s){var u=s.exception&&s.exception.values&&s.exception.values[0];if(u){var c=rb.exec(u.value||"");c&&(u.type=c[1],u.value=c[2],s.message=u.type+": "+u.value,s.extra=cl.__assign(cl.__assign({},s.extra),{angularDocs:c[3].substr(0,250)}))}return s}),o.captureException(n)}),e(n,i)}},t.id="AngularJS",t.moduleName="ngSentry",t}();Ca.Angular=nb});var ll=b(Ra=>{Object.defineProperty(Ra,"__esModule",{value:!0});var ib=ne(),Kn=P(),Jn=Kn.getGlobalObject(),ob=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._levels=["log","info","warn","error","debug","assert"],e.levels&&(this._levels=e.levels)}return t.prototype.setupOnce=function(e,r){"console"in Jn&&this._levels.forEach(function(n){n in Jn.console&&Kn.fill(Jn.console,n,function(i){return function(){for(var o=[],a=0;a<arguments.length;a++)o[a]=arguments[a];var s=r();s.getIntegration(t)&&s.withScope(function(u){u.setLevel(ib.Severity.fromString(n)),u.setExtra("arguments",o),u.addEventProcessor(function(l){return l.logger="console",l});var c=Kn.safeJoin(o," ");n==="assert"?o[0]===!1&&(c="Assertion failed: "+(Kn.safeJoin(o.slice(1)," ")||"console.assert"),u.setExtra("arguments",o.slice(1)),s.captureMessage(c)):n==="error"&&o[0]instanceof Error?s.captureException(o[0]):s.captureMessage(c)}),i&&Function.prototype.apply.call(i,Jn.console,o)}})})},t.id="CaptureConsole",t}();Ra.CaptureConsole=ob});var dl=b(Aa=>{Object.defineProperty(Aa,"__esModule",{value:!0});var ab=N(),sb=P(),ub=function(){function t(e){this.name=t.id,this._options=ab.__assign({debugger:!1,stringify:!1},e)}return t.prototype.setupOnce=function(e,r){e(function(n,i){var o=r().getIntegration(t);if(o){if(o._options.debugger)debugger;sb.consoleSandbox(function(){o._options.stringify?(console.log(JSON.stringify(n,null,2)),i&&console.log(JSON.stringify(i,null,2))):(console.log(n),i&&console.log(i))})}return n})},t.id="Debug",t}();Aa.Debug=ub});var pl=b(Pa=>{Object.defineProperty(Pa,"__esModule",{value:!0});var cb=P(),fb=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(e,r){e(function(n){var i=r().getIntegration(t);if(i){try{if(i._shouldDropEvent(n,i._previousEvent))return cb.logger.warn("Event dropped due to being a duplicate of previously captured event."),null}catch{return i._previousEvent=n}return i._previousEvent=n}return n})},t.prototype._shouldDropEvent=function(e,r){return r?!!(this._isSameMessageEvent(e,r)||this._isSameExceptionEvent(e,r)):!1},t.prototype._isSameMessageEvent=function(e,r){var n=e.message,i=r.message;return!(!n&&!i||n&&!i||!n&&i||n!==i||!this._isSameFingerprint(e,r)||!this._isSameStacktrace(e,r))},t.prototype._getFramesFromEvent=function(e){var r=e.exception;if(r)try{return r.values[0].stacktrace.frames}catch{return}else if(e.stacktrace)return e.stacktrace.frames},t.prototype._isSameStacktrace=function(e,r){var n=this._getFramesFromEvent(e),i=this._getFramesFromEvent(r);if(!n&&!i)return!0;if(n&&!i||!n&&i||(n=n,i=i,i.length!==n.length))return!1;for(var o=0;o<i.length;o++){var a=i[o],s=n[o];if(a.filename!==s.filename||a.lineno!==s.lineno||a.colno!==s.colno||a.function!==s.function)return!1}return!0},t.prototype._getExceptionFromEvent=function(e){return e.exception&&e.exception.values&&e.exception.values[0]},t.prototype._isSameExceptionEvent=function(e,r){var n=this._getExceptionFromEvent(r),i=this._getExceptionFromEvent(e);return!(!n||!i||n.type!==i.type||n.value!==i.value||!this._isSameFingerprint(e,r)||!this._isSameStacktrace(e,r))},t.prototype._isSameFingerprint=function(e,r){var n=e.fingerprint,i=r.fingerprint;if(!n&&!i)return!0;if(n&&!i||!n&&i)return!1;n=n,i=i;try{return n.join("")===i.join("")}catch{return!1}},t.id="Dedupe",t}();Pa.Dedupe=fb});var hl=b(Na=>{Object.defineProperty(Na,"__esModule",{value:!0});var qa=P(),lb=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._Ember=e.Ember||qa.getGlobalObject().Ember}return t.prototype.setupOnce=function(e,r){var n=this;if(!this._Ember){qa.logger.error("EmberIntegration is missing an Ember instance");return}var i=this._Ember.onerror;this._Ember.onerror=function(o){if(r().getIntegration(t)&&r().captureException(o,{originalException:o}),typeof i=="function")i.call(n._Ember,o);else if(n._Ember.testing)throw o},this._Ember.RSVP.on("error",function(o){r().getIntegration(t)&&r().withScope(function(a){qa.isInstanceOf(o,Error)?(a.setExtra("context","Unhandled Promise error detected"),r().captureException(o,{originalException:o})):(a.setExtra("reason",o),r().captureMessage("Unhandled Promise error detected"))})})},t.id="Ember",t}();Na.Ember=lb});var _l=b(Ma=>{Object.defineProperty(Ma,"__esModule",{value:!0});var _t=N(),tr=P(),db=function(){function t(e){e===void 0&&(e={depth:3}),this._options=e,this.name=t.id}return t.prototype.setupOnce=function(e,r){e(function(n,i){var o=r().getIntegration(t);return o?o.enhanceEventWithErrorData(n,i):n})},t.prototype.enhanceEventWithErrorData=function(e,r){var n;if(!r||!r.originalException||!tr.isError(r.originalException))return e;var i=r.originalException.name||r.originalException.constructor.name,o=this._extractErrorData(r.originalException);if(o){var a=_t.__assign({},e.contexts),s=tr.normalize(o,this._options.depth);return tr.isPlainObject(s)&&(a=_t.__assign(_t.__assign({},e.contexts),(n={},n[i]=_t.__assign({},s),n))),_t.__assign(_t.__assign({},e),{contexts:a})}return e},t.prototype._extractErrorData=function(e){var r,n,i,o;try{var a=["name","message","stack","line","column","fileName","lineNumber","columnNumber","toJSON"],s={};try{for(var u=_t.__values(Object.keys(e)),c=u.next();!c.done;c=u.next()){var l=c.value;if(a.indexOf(l)===-1){var d=e[l];s[l]=tr.isError(d)?d.toString():d}}}catch(T){r={error:T}}finally{try{c&&!c.done&&(n=u.return)&&n.call(u)}finally{if(r)throw r.error}}if(typeof e.toJSON=="function"){var h=e.toJSON();try{for(var y=_t.__values(Object.keys(h)),S=y.next();!S.done;S=y.next()){var l=S.value,d=h[l];s[l]=tr.isError(d)?d.toString():d}}catch(T){i={error:T}}finally{try{S&&!S.done&&(o=y.return)&&o.call(y)}finally{if(i)throw i.error}}}return s}catch(T){tr.logger.error("Unable to extract extra data from the Error object:",T)}return null},t.id="ExtraErrorData",t}();Ma.ExtraErrorData=db});var gl=b((vl,ka)=>{(function(t){if(typeof vl=="object"&&typeof ka!="undefined")ka.exports=t();else if(typeof define=="function"&&define.amd)define([],t);else{var e;typeof window!="undefined"?e=window:typeof global!="undefined"?e=global:typeof self!="undefined"?e=self:e=this,e.localforage=t()}})(function(){var t,e,r;return function n(i,o,a){function s(l,d){if(!o[l]){if(!i[l]){var h=typeof require=="function"&&require;if(!d&&h)return h(l,!0);if(u)return u(l,!0);var y=new Error("Cannot find module '"+l+"'");throw y.code="MODULE_NOT_FOUND",y}var S=o[l]={exports:{}};i[l][0].call(S.exports,function(T){var C=i[l][1][T];return s(C||T)},S,S.exports,n,i,o,a)}return o[l].exports}for(var u=typeof require=="function"&&require,c=0;c<a.length;c++)s(a[c]);return s}({1:[function(n,i,o){(function(a){"use strict";var s=a.MutationObserver||a.WebKitMutationObserver,u;if(s){var c=0,l=new s(T),d=a.document.createTextNode("");l.observe(d,{characterData:!0}),u=function(){d.data=c=++c%2}}else if(!a.setImmediate&&typeof a.MessageChannel!="undefined"){var h=new a.MessageChannel;h.port1.onmessage=T,u=function(){h.port2.postMessage(0)}}else"document"in a&&"onreadystatechange"in a.document.createElement("script")?u=function(){var q=a.document.createElement("script");q.onreadystatechange=function(){T(),q.onreadystatechange=null,q.parentNode.removeChild(q),q=null},a.document.documentElement.appendChild(q)}:u=function(){setTimeout(T,0)};var y,S=[];function T(){y=!0;for(var q,U,k=S.length;k;){for(U=S,S=[],q=-1;++q<k;)U[q]();k=S.length}y=!1}i.exports=C;function C(q){S.push(q)===1&&!y&&u()}}).call(this,typeof global!="undefined"?global:typeof self!="undefined"?self:typeof window!="undefined"?window:{})},{}],2:[function(n,i,o){"use strict";var a=n(1);function s(){}var u={},c=["REJECTED"],l=["FULFILLED"],d=["PENDING"];i.exports=h;function h(R){if(typeof R!="function")throw new TypeError("resolver must be a function");this.state=d,this.queue=[],this.outcome=void 0,R!==s&&C(this,R)}h.prototype.catch=function(R){return this.then(null,R)},h.prototype.then=function(R,B){if(typeof R!="function"&&this.state===l||typeof B!="function"&&this.state===c)return this;var D=new this.constructor(s);if(this.state!==d){var V=this.state===l?R:B;S(D,V,this.outcome)}else this.queue.push(new y(D,R,B));return D};function y(R,B,D){this.promise=R,typeof B=="function"&&(this.onFulfilled=B,this.callFulfilled=this.otherCallFulfilled),typeof D=="function"&&(this.onRejected=D,this.callRejected=this.otherCallRejected)}y.prototype.callFulfilled=function(R){u.resolve(this.promise,R)},y.prototype.otherCallFulfilled=function(R){S(this.promise,this.onFulfilled,R)},y.prototype.callRejected=function(R){u.reject(this.promise,R)},y.prototype.otherCallRejected=function(R){S(this.promise,this.onRejected,R)};function S(R,B,D){a(function(){var V;try{V=B(D)}catch(re){return u.reject(R,re)}V===R?u.reject(R,new TypeError("Cannot resolve promise with itself")):u.resolve(R,V)})}u.resolve=function(R,B){var D=q(T,B);if(D.status==="error")return u.reject(R,D.value);var V=D.value;if(V)C(R,V);else{R.state=l,R.outcome=B;for(var re=-1,he=R.queue.length;++re<he;)R.queue[re].callFulfilled(B)}return R},u.reject=function(R,B){R.state=c,R.outcome=B;for(var D=-1,V=R.queue.length;++D<V;)R.queue[D].callRejected(B);return R};function T(R){var B=R&&R.then;if(R&&(typeof R=="object"||typeof R=="function")&&typeof B=="function")return function(){B.apply(R,arguments)}}function C(R,B){var D=!1;function V(Te){D||(D=!0,u.reject(R,Te))}function re(Te){D||(D=!0,u.resolve(R,Te))}function he(){B(re,V)}var Ee=q(he);Ee.status==="error"&&V(Ee.value)}function q(R,B){var D={};try{D.value=R(B),D.status="success"}catch(V){D.status="error",D.value=V}return D}h.resolve=U;function U(R){return R instanceof this?R:u.resolve(new this(s),R)}h.reject=k;function k(R){var B=new this(s);return u.reject(B,R)}h.all=Se;function Se(R){var B=this;if(Object.prototype.toString.call(R)!=="[object Array]")return this.reject(new TypeError("must be an array"));var D=R.length,V=!1;if(!D)return this.resolve([]);for(var re=new Array(D),he=0,Ee=-1,Te=new this(s);++Ee<D;)Ue(R[Ee],Ee);return Te;function Ue(nr,Nr){B.resolve(nr).then(ei,function(Pt){V||(V=!0,u.reject(Te,Pt))});function ei(Pt){re[Nr]=Pt,++he===D&&!V&&(V=!0,u.resolve(Te,re))}}}h.race=et;function et(R){var B=this;if(Object.prototype.toString.call(R)!=="[object Array]")return this.reject(new TypeError("must be an array"));var D=R.length,V=!1;if(!D)return this.resolve([]);for(var re=-1,he=new this(s);++re<D;)Ee(R[re]);return he;function Ee(Te){B.resolve(Te).then(function(Ue){V||(V=!0,u.resolve(he,Ue))},function(Ue){V||(V=!0,u.reject(he,Ue))})}}},{"1":1}],3:[function(n,i,o){(function(a){"use strict";typeof a.Promise!="function"&&(a.Promise=n(2))}).call(this,typeof global!="undefined"?global:typeof self!="undefined"?self:typeof window!="undefined"?window:{})},{"2":2}],4:[function(n,i,o){"use strict";var a=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(f){return typeof f}:function(f){return f&&typeof Symbol=="function"&&f.constructor===Symbol&&f!==Symbol.prototype?"symbol":typeof f};function s(f,_){if(!(f instanceof _))throw new TypeError("Cannot call a class as a function")}function u(){try{if(typeof indexedDB!="undefined")return indexedDB;if(typeof webkitIndexedDB!="undefined")return webkitIndexedDB;if(typeof mozIndexedDB!="undefined")return mozIndexedDB;if(typeof OIndexedDB!="undefined")return OIndexedDB;if(typeof msIndexedDB!="undefined")return msIndexedDB}catch{return}}var c=u();function l(){try{if(!c||!c.open)return!1;var f=typeof openDatabase!="undefined"&&/(Safari|iPhone|iPad|iPod)/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)&&!/BlackBerry/.test(navigator.platform),_=typeof fetch=="function"&&fetch.toString().indexOf("[native code")!==-1;return(!f||_)&&typeof indexedDB!="undefined"&&typeof IDBKeyRange!="undefined"}catch{return!1}}function d(f,_){f=f||[],_=_||{};try{return new Blob(f,_)}catch(v){if(v.name!=="TypeError")throw v;for(var p=typeof BlobBuilder!="undefined"?BlobBuilder:typeof MSBlobBuilder!="undefined"?MSBlobBuilder:typeof MozBlobBuilder!="undefined"?MozBlobBuilder:WebKitBlobBuilder,g=new p,m=0;m<f.length;m+=1)g.append(f[m]);return g.getBlob(_.type)}}typeof Promise=="undefined"&&n(3);var h=Promise;function y(f,_){_&&f.then(function(p){_(null,p)},function(p){_(p)})}function S(f,_,p){typeof _=="function"&&f.then(_),typeof p=="function"&&f.catch(p)}function T(f){return typeof f!="string"&&(console.warn(f+" used as a key, but it is not a string."),f=String(f)),f}function C(){if(arguments.length&&typeof arguments[arguments.length-1]=="function")return arguments[arguments.length-1]}var q="local-forage-detect-blob-support",U=void 0,k={},Se=Object.prototype.toString,et="readonly",R="readwrite";function B(f){for(var _=f.length,p=new ArrayBuffer(_),g=new Uint8Array(p),m=0;m<_;m++)g[m]=f.charCodeAt(m);return p}function D(f){return new h(function(_){var p=f.transaction(q,R),g=d([""]);p.objectStore(q).put(g,"key"),p.onabort=function(m){m.preventDefault(),m.stopPropagation(),_(!1)},p.oncomplete=function(){var m=navigator.userAgent.match(/Chrome\/(\d+)/),v=navigator.userAgent.match(/Edge\//);_(v||!m||parseInt(m[1],10)>=43)}}).catch(function(){return!1})}function V(f){return typeof U=="boolean"?h.resolve(U):D(f).then(function(_){return U=_,U})}function re(f){var _=k[f.name],p={};p.promise=new h(function(g,m){p.resolve=g,p.reject=m}),_.deferredOperations.push(p),_.dbReady?_.dbReady=_.dbReady.then(function(){return p.promise}):_.dbReady=p.promise}function he(f){var _=k[f.name],p=_.deferredOperations.pop();if(p)return p.resolve(),p.promise}function Ee(f,_){var p=k[f.name],g=p.deferredOperations.pop();if(g)return g.reject(_),g.promise}function Te(f,_){return new h(function(p,g){if(k[f.name]=k[f.name]||Wa(),f.db)if(_)re(f),f.db.close();else return p(f.db);var m=[f.name];_&&m.push(f.version);var v=c.open.apply(c,m);_&&(v.onupgradeneeded=function(E){var O=v.result;try{O.createObjectStore(f.storeName),E.oldVersion<=1&&O.createObjectStore(q)}catch(w){if(w.name==="ConstraintError")console.warn('The database "'+f.name+'" has been upgraded from version '+E.oldVersion+" to version "+E.newVersion+', but the storage "'+f.storeName+'" already exists.');else throw w}}),v.onerror=function(E){E.preventDefault(),g(v.error)},v.onsuccess=function(){var E=v.result;E.onversionchange=function(O){O.target.close()},p(E),he(f)}})}function Ue(f){return Te(f,!1)}function nr(f){return Te(f,!0)}function Nr(f,_){if(!f.db)return!0;var p=!f.db.objectStoreNames.contains(f.storeName),g=f.version<f.db.version,m=f.version>f.db.version;if(g&&(f.version!==_&&console.warn('The database "'+f.name+`" can't be downgraded from version `+f.db.version+" to version "+f.version+"."),f.version=f.db.version),m||p){if(p){var v=f.db.version+1;v>f.version&&(f.version=v)}return!0}return!1}function ei(f){return new h(function(_,p){var g=new FileReader;g.onerror=p,g.onloadend=function(m){var v=btoa(m.target.result||"");_({__local_forage_encoded_blob:!0,data:v,type:f.type})},g.readAsBinaryString(f)})}function Pt(f){var _=B(atob(f.data));return d([_],{type:f.type})}function Va(f){return f&&f.__local_forage_encoded_blob}function Al(f){var _=this,p=_._initReady().then(function(){var g=k[_._dbInfo.name];if(g&&g.dbReady)return g.dbReady});return S(p,f,f),p}function Pl(f){re(f);for(var _=k[f.name],p=_.forages,g=0;g<p.length;g++){var m=p[g];m._dbInfo.db&&(m._dbInfo.db.close(),m._dbInfo.db=null)}return f.db=null,Ue(f).then(function(v){return f.db=v,Nr(f)?nr(f):v}).then(function(v){f.db=_.db=v;for(var E=0;E<p.length;E++)p[E]._dbInfo.db=v}).catch(function(v){throw Ee(f,v),v})}function Be(f,_,p,g){g===void 0&&(g=1);try{var m=f.db.transaction(f.storeName,_);p(null,m)}catch(v){if(g>0&&(!f.db||v.name==="InvalidStateError"||v.name==="NotFoundError"))return h.resolve().then(function(){if(!f.db||v.name==="NotFoundError"&&!f.db.objectStoreNames.contains(f.storeName)&&f.version<=f.db.version)return f.db&&(f.version=f.db.version+1),nr(f)}).then(function(){return Pl(f).then(function(){Be(f,_,p,g-1)})}).catch(p);p(v)}}function Wa(){return{forages:[],db:null,dbReady:null,deferredOperations:[]}}function ql(f){var _=this,p={db:null};if(f)for(var g in f)p[g]=f[g];var m=k[p.name];m||(m=Wa(),k[p.name]=m),m.forages.push(_),_._initReady||(_._initReady=_.ready,_.ready=Al);var v=[];function E(){return h.resolve()}for(var O=0;O<m.forages.length;O++){var w=m.forages[O];w!==_&&v.push(w._initReady().catch(E))}var x=m.forages.slice(0);return h.all(v).then(function(){return p.db=m.db,Ue(p)}).then(function(I){return p.db=I,Nr(p,_._defaultConfig.version)?nr(p):I}).then(function(I){p.db=m.db=I,_._dbInfo=p;for(var A=0;A<x.length;A++){var F=x[A];F!==_&&(F._dbInfo.db=p.db,F._dbInfo.version=p.version)}})}function Nl(f,_){var p=this;f=T(f);var g=new h(function(m,v){p.ready().then(function(){Be(p._dbInfo,et,function(E,O){if(E)return v(E);try{var w=O.objectStore(p._dbInfo.storeName),x=w.get(f);x.onsuccess=function(){var I=x.result;I===void 0&&(I=null),Va(I)&&(I=Pt(I)),m(I)},x.onerror=function(){v(x.error)}}catch(I){v(I)}})}).catch(v)});return y(g,_),g}function Ml(f,_){var p=this,g=new h(function(m,v){p.ready().then(function(){Be(p._dbInfo,et,function(E,O){if(E)return v(E);try{var w=O.objectStore(p._dbInfo.storeName),x=w.openCursor(),I=1;x.onsuccess=function(){var A=x.result;if(A){var F=A.value;Va(F)&&(F=Pt(F));var G=f(F,A.key,I++);G!==void 0?m(G):A.continue()}else m()},x.onerror=function(){v(x.error)}}catch(A){v(A)}})}).catch(v)});return y(g,_),g}function kl(f,_,p){var g=this;f=T(f);var m=new h(function(v,E){var O;g.ready().then(function(){return O=g._dbInfo,Se.call(_)==="[object Blob]"?V(O.db).then(function(w){return w?_:ei(_)}):_}).then(function(w){Be(g._dbInfo,R,function(x,I){if(x)return E(x);try{var A=I.objectStore(g._dbInfo.storeName);w===null&&(w=void 0);var F=A.put(w,f);I.oncomplete=function(){w===void 0&&(w=null),v(w)},I.onabort=I.onerror=function(){var G=F.error?F.error:F.transaction.error;E(G)}}catch(G){E(G)}})}).catch(E)});return y(m,p),m}function Dl(f,_){var p=this;f=T(f);var g=new h(function(m,v){p.ready().then(function(){Be(p._dbInfo,R,function(E,O){if(E)return v(E);try{var w=O.objectStore(p._dbInfo.storeName),x=w.delete(f);O.oncomplete=function(){m()},O.onerror=function(){v(x.error)},O.onabort=function(){var I=x.error?x.error:x.transaction.error;v(I)}}catch(I){v(I)}})}).catch(v)});return y(g,_),g}function Fl(f){var _=this,p=new h(function(g,m){_.ready().then(function(){Be(_._dbInfo,R,function(v,E){if(v)return m(v);try{var O=E.objectStore(_._dbInfo.storeName),w=O.clear();E.oncomplete=function(){g()},E.onabort=E.onerror=function(){var x=w.error?w.error:w.transaction.error;m(x)}}catch(x){m(x)}})}).catch(m)});return y(p,f),p}function jl(f){var _=this,p=new h(function(g,m){_.ready().then(function(){Be(_._dbInfo,et,function(v,E){if(v)return m(v);try{var O=E.objectStore(_._dbInfo.storeName),w=O.count();w.onsuccess=function(){g(w.result)},w.onerror=function(){m(w.error)}}catch(x){m(x)}})}).catch(m)});return y(p,f),p}function Hl(f,_){var p=this,g=new h(function(m,v){if(f<0){m(null);return}p.ready().then(function(){Be(p._dbInfo,et,function(E,O){if(E)return v(E);try{var w=O.objectStore(p._dbInfo.storeName),x=!1,I=w.openKeyCursor();I.onsuccess=function(){var A=I.result;if(!A){m(null);return}f===0||x?m(A.key):(x=!0,A.advance(f))},I.onerror=function(){v(I.error)}}catch(A){v(A)}})}).catch(v)});return y(g,_),g}function Ll(f){var _=this,p=new h(function(g,m){_.ready().then(function(){Be(_._dbInfo,et,function(v,E){if(v)return m(v);try{var O=E.objectStore(_._dbInfo.storeName),w=O.openKeyCursor(),x=[];w.onsuccess=function(){var I=w.result;if(!I){g(x);return}x.push(I.key),I.continue()},w.onerror=function(){m(w.error)}}catch(I){m(I)}})}).catch(m)});return y(p,f),p}function Ul(f,_){_=C.apply(this,arguments);var p=this.config();f=typeof f!="function"&&f||{},f.name||(f.name=f.name||p.name,f.storeName=f.storeName||p.storeName);var g=this,m;if(!f.name)m=h.reject("Invalid arguments");else{var v=f.name===p.name&&g._dbInfo.db,E=v?h.resolve(g._dbInfo.db):Ue(f).then(function(O){var w=k[f.name],x=w.forages;w.db=O;for(var I=0;I<x.length;I++)x[I]._dbInfo.db=O;return O});f.storeName?m=E.then(function(O){if(!!O.objectStoreNames.contains(f.storeName)){var w=O.version+1;re(f);var x=k[f.name],I=x.forages;O.close();for(var A=0;A<I.length;A++){var F=I[A];F._dbInfo.db=null,F._dbInfo.version=w}var G=new h(function(W,J){var $=c.open(f.name,w);$.onerror=function(Oe){var or=$.result;or.close(),J(Oe)},$.onupgradeneeded=function(){var Oe=$.result;Oe.deleteObjectStore(f.storeName)},$.onsuccess=function(){var Oe=$.result;Oe.close(),W(Oe)}});return G.then(function(W){x.db=W;for(var J=0;J<I.length;J++){var $=I[J];$._dbInfo.db=W,he($._dbInfo)}}).catch(function(W){throw(Ee(f,W)||h.resolve()).catch(function(){}),W})}}):m=E.then(function(O){re(f);var w=k[f.name],x=w.forages;O.close();for(var I=0;I<x.length;I++){var A=x[I];A._dbInfo.db=null}var F=new h(function(G,W){var J=c.deleteDatabase(f.name);J.onerror=function(){var $=J.result;$&&$.close(),W(J.error)},J.onblocked=function(){console.warn('dropInstance blocked for database "'+f.name+'" until all open connections are closed')},J.onsuccess=function(){var $=J.result;$&&$.close(),G($)}});return F.then(function(G){w.db=G;for(var W=0;W<x.length;W++){var J=x[W];he(J._dbInfo)}}).catch(function(G){throw(Ee(f,G)||h.resolve()).catch(function(){}),G})})}return y(m,_),m}var Bl={_driver:"asyncStorage",_initStorage:ql,_support:l(),iterate:Ml,getItem:Nl,setItem:kl,removeItem:Dl,clear:Fl,length:jl,key:Hl,keys:Ll,dropInstance:Ul};function Gl(){return typeof openDatabase=="function"}var tt="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",zl="~~local_forage_type~",Ya=/^~~local_forage_type~([^~]+)~/,Mr="__lfsc__:",ti=Mr.length,ri="arbf",ni="blob",$a="si08",Ka="ui08",Ja="uic8",Xa="si16",Qa="si32",Za="ur16",es="ui32",ts="fl32",rs="fl64",ns=ti+ri.length,is=Object.prototype.toString;function os(f){var _=f.length*.75,p=f.length,g,m=0,v,E,O,w;f[f.length-1]==="="&&(_--,f[f.length-2]==="="&&_--);var x=new ArrayBuffer(_),I=new Uint8Array(x);for(g=0;g<p;g+=4)v=tt.indexOf(f[g]),E=tt.indexOf(f[g+1]),O=tt.indexOf(f[g+2]),w=tt.indexOf(f[g+3]),I[m++]=v<<2|E>>4,I[m++]=(E&15)<<4|O>>2,I[m++]=(O&3)<<6|w&63;return x}function ii(f){var _=new Uint8Array(f),p="",g;for(g=0;g<_.length;g+=3)p+=tt[_[g]>>2],p+=tt[(_[g]&3)<<4|_[g+1]>>4],p+=tt[(_[g+1]&15)<<2|_[g+2]>>6],p+=tt[_[g+2]&63];return _.length%3===2?p=p.substring(0,p.length-1)+"=":_.length%3===1&&(p=p.substring(0,p.length-2)+"=="),p}function Vl(f,_){var p="";if(f&&(p=is.call(f)),f&&(p==="[object ArrayBuffer]"||f.buffer&&is.call(f.buffer)==="[object ArrayBuffer]")){var g,m=Mr;f instanceof ArrayBuffer?(g=f,m+=ri):(g=f.buffer,p==="[object Int8Array]"?m+=$a:p==="[object Uint8Array]"?m+=Ka:p==="[object Uint8ClampedArray]"?m+=Ja:p==="[object Int16Array]"?m+=Xa:p==="[object Uint16Array]"?m+=Za:p==="[object Int32Array]"?m+=Qa:p==="[object Uint32Array]"?m+=es:p==="[object Float32Array]"?m+=ts:p==="[object Float64Array]"?m+=rs:_(new Error("Failed to get type for BinaryArray"))),_(m+ii(g))}else if(p==="[object Blob]"){var v=new FileReader;v.onload=function(){var E=zl+f.type+"~"+ii(this.result);_(Mr+ni+E)},v.readAsArrayBuffer(f)}else try{_(JSON.stringify(f))}catch(E){console.error("Couldn't convert value into a JSON string: ",f),_(null,E)}}function Wl(f){if(f.substring(0,ti)!==Mr)return JSON.parse(f);var _=f.substring(ns),p=f.substring(ti,ns),g;if(p===ni&&Ya.test(_)){var m=_.match(Ya);g=m[1],_=_.substring(m[0].length)}var v=os(_);switch(p){case ri:return v;case ni:return d([v],{type:g});case $a:return new Int8Array(v);case Ka:return new Uint8Array(v);case Ja:return new Uint8ClampedArray(v);case Xa:return new Int16Array(v);case Za:return new Uint16Array(v);case Qa:return new Int32Array(v);case es:return new Uint32Array(v);case ts:return new Float32Array(v);case rs:return new Float64Array(v);default:throw new Error("Unkown type: "+p)}}var oi={serialize:Vl,deserialize:Wl,stringToBuffer:os,bufferToString:ii};function as(f,_,p,g){f.executeSql("CREATE TABLE IF NOT EXISTS "+_.storeName+" (id INTEGER PRIMARY KEY, key unique, value)",[],p,g)}function Yl(f){var _=this,p={db:null};if(f)for(var g in f)p[g]=typeof f[g]!="string"?f[g].toString():f[g];var m=new h(function(v,E){try{p.db=openDatabase(p.name,String(p.version),p.description,p.size)}catch(O){return E(O)}p.db.transaction(function(O){as(O,p,function(){_._dbInfo=p,v()},function(w,x){E(x)})},E)});return p.serializer=oi,m}function rt(f,_,p,g,m,v){f.executeSql(p,g,m,function(E,O){O.code===O.SYNTAX_ERR?E.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name = ?",[_.storeName],function(w,x){x.rows.length?v(w,O):as(w,_,function(){w.executeSql(p,g,m,v)},v)},v):v(E,O)},v)}function $l(f,_){var p=this;f=T(f);var g=new h(function(m,v){p.ready().then(function(){var E=p._dbInfo;E.db.transaction(function(O){rt(O,E,"SELECT * FROM "+E.storeName+" WHERE key = ? LIMIT 1",[f],function(w,x){var I=x.rows.length?x.rows.item(0).value:null;I&&(I=E.serializer.deserialize(I)),m(I)},function(w,x){v(x)})})}).catch(v)});return y(g,_),g}function Kl(f,_){var p=this,g=new h(function(m,v){p.ready().then(function(){var E=p._dbInfo;E.db.transaction(function(O){rt(O,E,"SELECT * FROM "+E.storeName,[],function(w,x){for(var I=x.rows,A=I.length,F=0;F<A;F++){var G=I.item(F),W=G.value;if(W&&(W=E.serializer.deserialize(W)),W=f(W,G.key,F+1),W!==void 0){m(W);return}}m()},function(w,x){v(x)})})}).catch(v)});return y(g,_),g}function ss(f,_,p,g){var m=this;f=T(f);var v=new h(function(E,O){m.ready().then(function(){_===void 0&&(_=null);var w=_,x=m._dbInfo;x.serializer.serialize(_,function(I,A){A?O(A):x.db.transaction(function(F){rt(F,x,"INSERT OR REPLACE INTO "+x.storeName+" (key, value) VALUES (?, ?)",[f,I],function(){E(w)},function(G,W){O(W)})},function(F){if(F.code===F.QUOTA_ERR){if(g>0){E(ss.apply(m,[f,w,p,g-1]));return}O(F)}})})}).catch(O)});return y(v,p),v}function Jl(f,_,p){return ss.apply(this,[f,_,p,1])}function Xl(f,_){var p=this;f=T(f);var g=new h(function(m,v){p.ready().then(function(){var E=p._dbInfo;E.db.transaction(function(O){rt(O,E,"DELETE FROM "+E.storeName+" WHERE key = ?",[f],function(){m()},function(w,x){v(x)})})}).catch(v)});return y(g,_),g}function Ql(f){var _=this,p=new h(function(g,m){_.ready().then(function(){var v=_._dbInfo;v.db.transaction(function(E){rt(E,v,"DELETE FROM "+v.storeName,[],function(){g()},function(O,w){m(w)})})}).catch(m)});return y(p,f),p}function Zl(f){var _=this,p=new h(function(g,m){_.ready().then(function(){var v=_._dbInfo;v.db.transaction(function(E){rt(E,v,"SELECT COUNT(key) as c FROM "+v.storeName,[],function(O,w){var x=w.rows.item(0).c;g(x)},function(O,w){m(w)})})}).catch(m)});return y(p,f),p}function ed(f,_){var p=this,g=new h(function(m,v){p.ready().then(function(){var E=p._dbInfo;E.db.transaction(function(O){rt(O,E,"SELECT key FROM "+E.storeName+" WHERE id = ? LIMIT 1",[f+1],function(w,x){var I=x.rows.length?x.rows.item(0).key:null;m(I)},function(w,x){v(x)})})}).catch(v)});return y(g,_),g}function td(f){var _=this,p=new h(function(g,m){_.ready().then(function(){var v=_._dbInfo;v.db.transaction(function(E){rt(E,v,"SELECT key FROM "+v.storeName,[],function(O,w){for(var x=[],I=0;I<w.rows.length;I++)x.push(w.rows.item(I).key);g(x)},function(O,w){m(w)})})}).catch(m)});return y(p,f),p}function rd(f){return new h(function(_,p){f.transaction(function(g){g.executeSql("SELECT name FROM sqlite_master WHERE type='table' AND name <> '__WebKitDatabaseInfoTable__'",[],function(m,v){for(var E=[],O=0;O<v.rows.length;O++)E.push(v.rows.item(O).name);_({db:f,storeNames:E})},function(m,v){p(v)})},function(g){p(g)})})}function nd(f,_){_=C.apply(this,arguments);var p=this.config();f=typeof f!="function"&&f||{},f.name||(f.name=f.name||p.name,f.storeName=f.storeName||p.storeName);var g=this,m;return f.name?m=new h(function(v){var E;f.name===p.name?E=g._dbInfo.db:E=openDatabase(f.name,"","",0),f.storeName?v({db:E,storeNames:[f.storeName]}):v(rd(E))}).then(function(v){return new h(function(E,O){v.db.transaction(function(w){function x(G){return new h(function(W,J){w.executeSql("DROP TABLE IF EXISTS "+G,[],function(){W()},function($,Oe){J(Oe)})})}for(var I=[],A=0,F=v.storeNames.length;A<F;A++)I.push(x(v.storeNames[A]));h.all(I).then(function(){E()}).catch(function(G){O(G)})},function(w){O(w)})})}):m=h.reject("Invalid arguments"),y(m,_),m}var id={_driver:"webSQLStorage",_initStorage:Yl,_support:Gl(),iterate:Kl,getItem:$l,setItem:Jl,removeItem:Xl,clear:Ql,length:Zl,key:ed,keys:td,dropInstance:nd};function od(){try{return typeof localStorage!="undefined"&&"setItem"in localStorage&&!!localStorage.setItem}catch{return!1}}function us(f,_){var p=f.name+"/";return f.storeName!==_.storeName&&(p+=f.storeName+"/"),p}function ad(){var f="_localforage_support_test";try{return localStorage.setItem(f,!0),localStorage.removeItem(f),!1}catch{return!0}}function sd(){return!ad()||localStorage.length>0}function ud(f){var _=this,p={};if(f)for(var g in f)p[g]=f[g];return p.keyPrefix=us(f,_._defaultConfig),sd()?(_._dbInfo=p,p.serializer=oi,h.resolve()):h.reject()}function cd(f){var _=this,p=_.ready().then(function(){for(var g=_._dbInfo.keyPrefix,m=localStorage.length-1;m>=0;m--){var v=localStorage.key(m);v.indexOf(g)===0&&localStorage.removeItem(v)}});return y(p,f),p}function fd(f,_){var p=this;f=T(f);var g=p.ready().then(function(){var m=p._dbInfo,v=localStorage.getItem(m.keyPrefix+f);return v&&(v=m.serializer.deserialize(v)),v});return y(g,_),g}function ld(f,_){var p=this,g=p.ready().then(function(){for(var m=p._dbInfo,v=m.keyPrefix,E=v.length,O=localStorage.length,w=1,x=0;x<O;x++){var I=localStorage.key(x);if(I.indexOf(v)===0){var A=localStorage.getItem(I);if(A&&(A=m.serializer.deserialize(A)),A=f(A,I.substring(E),w++),A!==void 0)return A}}});return y(g,_),g}function dd(f,_){var p=this,g=p.ready().then(function(){var m=p._dbInfo,v;try{v=localStorage.key(f)}catch{v=null}return v&&(v=v.substring(m.keyPrefix.length)),v});return y(g,_),g}function pd(f){var _=this,p=_.ready().then(function(){for(var g=_._dbInfo,m=localStorage.length,v=[],E=0;E<m;E++){var O=localStorage.key(E);O.indexOf(g.keyPrefix)===0&&v.push(O.substring(g.keyPrefix.length))}return v});return y(p,f),p}function hd(f){var _=this,p=_.keys().then(function(g){return g.length});return y(p,f),p}function _d(f,_){var p=this;f=T(f);var g=p.ready().then(function(){var m=p._dbInfo;localStorage.removeItem(m.keyPrefix+f)});return y(g,_),g}function vd(f,_,p){var g=this;f=T(f);var m=g.ready().then(function(){_===void 0&&(_=null);var v=_;return new h(function(E,O){var w=g._dbInfo;w.serializer.serialize(_,function(x,I){if(I)O(I);else try{localStorage.setItem(w.keyPrefix+f,x),E(v)}catch(A){(A.name==="QuotaExceededError"||A.name==="NS_ERROR_DOM_QUOTA_REACHED")&&O(A),O(A)}})})});return y(m,p),m}function gd(f,_){if(_=C.apply(this,arguments),f=typeof f!="function"&&f||{},!f.name){var p=this.config();f.name=f.name||p.name,f.storeName=f.storeName||p.storeName}var g=this,m;return f.name?m=new h(function(v){f.storeName?v(us(f,g._defaultConfig)):v(f.name+"/")}).then(function(v){for(var E=localStorage.length-1;E>=0;E--){var O=localStorage.key(E);O.indexOf(v)===0&&localStorage.removeItem(O)}}):m=h.reject("Invalid arguments"),y(m,_),m}var md={_driver:"localStorageWrapper",_initStorage:ud,_support:od(),iterate:ld,getItem:fd,setItem:vd,removeItem:_d,clear:cd,length:hd,key:dd,keys:pd,dropInstance:gd},yd=function(_,p){return _===p||typeof _=="number"&&typeof p=="number"&&isNaN(_)&&isNaN(p)},bd=function(_,p){for(var g=_.length,m=0;m<g;){if(yd(_[m],p))return!0;m++}return!1},cs=Array.isArray||function(f){return Object.prototype.toString.call(f)==="[object Array]"},ir={},fs={},qt={INDEXEDDB:Bl,WEBSQL:id,LOCALSTORAGE:md},Sd=[qt.INDEXEDDB._driver,qt.WEBSQL._driver,qt.LOCALSTORAGE._driver],kr=["dropInstance"],ai=["clear","getItem","iterate","key","keys","length","removeItem","setItem"].concat(kr),Ed={description:"",driver:Sd.slice(),name:"localforage",size:4980736,storeName:"keyvaluepairs",version:1};function Td(f,_){f[_]=function(){var p=arguments;return f.ready().then(function(){return f[_].apply(f,p)})}}function si(){for(var f=1;f<arguments.length;f++){var _=arguments[f];if(_)for(var p in _)_.hasOwnProperty(p)&&(cs(_[p])?arguments[0][p]=_[p].slice():arguments[0][p]=_[p])}return arguments[0]}var Od=function(){function f(_){s(this,f);for(var p in qt)if(qt.hasOwnProperty(p)){var g=qt[p],m=g._driver;this[p]=m,ir[m]||this.defineDriver(g)}this._defaultConfig=si({},Ed),this._config=si({},this._defaultConfig,_),this._driverSet=null,this._initDriver=null,this._ready=!1,this._dbInfo=null,this._wrapLibraryMethodsWithReady(),this.setDriver(this._config.driver).catch(function(){})}return f.prototype.config=function(p){if((typeof p=="undefined"?"undefined":a(p))==="object"){if(this._ready)return new Error("Can't call config() after localforage has been used.");for(var g in p){if(g==="storeName"&&(p[g]=p[g].replace(/\W/g,"_")),g==="version"&&typeof p[g]!="number")return new Error("Database version must be a number.");this._config[g]=p[g]}return"driver"in p&&p.driver?this.setDriver(this._config.driver):!0}else return typeof p=="string"?this._config[p]:this._config},f.prototype.defineDriver=function(p,g,m){var v=new h(function(E,O){try{var w=p._driver,x=new Error("Custom driver not compliant; see https://mozilla.github.io/localForage/#definedriver");if(!p._driver){O(x);return}for(var I=ai.concat("_initStorage"),A=0,F=I.length;A<F;A++){var G=I[A],W=!bd(kr,G);if((W||p[G])&&typeof p[G]!="function"){O(x);return}}var J=function(){for(var or=function(Id){return function(){var Cd=new Error("Method "+Id+" is not implemented by the current driver"),ls=h.reject(Cd);return y(ls,arguments[arguments.length-1]),ls}},ui=0,xd=kr.length;ui<xd;ui++){var ci=kr[ui];p[ci]||(p[ci]=or(ci))}};J();var $=function(or){ir[w]&&console.info("Redefining LocalForage driver: "+w),ir[w]=p,fs[w]=or,E()};"_support"in p?p._support&&typeof p._support=="function"?p._support().then($,O):$(!!p._support):$(!0)}catch(Oe){O(Oe)}});return S(v,g,m),v},f.prototype.driver=function(){return this._driver||null},f.prototype.getDriver=function(p,g,m){var v=ir[p]?h.resolve(ir[p]):h.reject(new Error("Driver not found."));return S(v,g,m),v},f.prototype.getSerializer=function(p){var g=h.resolve(oi);return S(g,p),g},f.prototype.ready=function(p){var g=this,m=g._driverSet.then(function(){return g._ready===null&&(g._ready=g._initDriver()),g._ready});return S(m,p,p),m},f.prototype.setDriver=function(p,g,m){var v=this;cs(p)||(p=[p]);var E=this._getSupportedDrivers(p);function O(){v._config.driver=v.driver()}function w(A){return v._extend(A),O(),v._ready=v._initStorage(v._config),v._ready}function x(A){return function(){var F=0;function G(){for(;F<A.length;){var W=A[F];return F++,v._dbInfo=null,v._ready=null,v.getDriver(W).then(w).catch(G)}O();var J=new Error("No available storage method found.");return v._driverSet=h.reject(J),v._driverSet}return G()}}var I=this._driverSet!==null?this._driverSet.catch(function(){return h.resolve()}):h.resolve();return this._driverSet=I.then(function(){var A=E[0];return v._dbInfo=null,v._ready=null,v.getDriver(A).then(function(F){v._driver=F._driver,O(),v._wrapLibraryMethodsWithReady(),v._initDriver=x(E)})}).catch(function(){O();var A=new Error("No available storage method found.");return v._driverSet=h.reject(A),v._driverSet}),S(this._driverSet,g,m),this._driverSet},f.prototype.supports=function(p){return!!fs[p]},f.prototype._extend=function(p){si(this,p)},f.prototype._getSupportedDrivers=function(p){for(var g=[],m=0,v=p.length;m<v;m++){var E=p[m];this.supports(E)&&g.push(E)}return g},f.prototype._wrapLibraryMethodsWithReady=function(){for(var p=0,g=ai.length;p<g;p++)Td(this,ai[p])},f.prototype.createInstance=function(p){return new f(p)},f}(),wd=new Od;i.exports=wd},{"3":3}]},{},[4])(4)})});var ml=b(Da=>{Object.defineProperty(Da,"__esModule",{value:!0});var Me=N(),Qe=P(),pb=Me.__importDefault(gl()),hb=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this.global=Qe.getGlobalObject(),this.maxStoredEvents=e.maxStoredEvents||30,this.offlineEventStore=pb.default.createInstance({name:"sentry/offlineEventStore"})}return t.prototype.setupOnce=function(e,r){var n=this;this.hub=r(),"addEventListener"in this.global&&this.global.addEventListener("online",function(){n._sendEvents().catch(function(){Qe.logger.warn("could not send cached events")})}),e(function(i){return n.hub&&n.hub.getIntegration(t)&&"navigator"in n.global&&"onLine"in n.global.navigator&&!n.global.navigator.onLine?(n._cacheEvent(i).then(function(o){return n._enforceMaxEvents()}).catch(function(o){Qe.logger.warn("could not cache event while offline")}),null):i}),"navigator"in this.global&&"onLine"in this.global.navigator&&this.global.navigator.onLine&&this._sendEvents().catch(function(){Qe.logger.warn("could not send cached events")})},t.prototype._cacheEvent=function(e){return Me.__awaiter(this,void 0,void 0,function(){return Me.__generator(this,function(r){return[2,this.offlineEventStore.setItem(Qe.uuid4(),Qe.normalize(e))]})})},t.prototype._enforceMaxEvents=function(){return Me.__awaiter(this,void 0,void 0,function(){var e,r=this;return Me.__generator(this,function(n){return e=[],[2,this.offlineEventStore.iterate(function(i,o,a){e.push({cacheKey:o,event:i})}).then(function(){return r._purgeEvents(e.sort(function(i,o){return(o.event.timestamp||0)-(i.event.timestamp||0)}).slice(r.maxStoredEvents<e.length?r.maxStoredEvents:e.length).map(function(i){return i.cacheKey}))}).catch(function(i){Qe.logger.warn("could not enforce max events")})]})})},t.prototype._purgeEvent=function(e){return Me.__awaiter(this,void 0,void 0,function(){return Me.__generator(this,function(r){return[2,this.offlineEventStore.removeItem(e)]})})},t.prototype._purgeEvents=function(e){return Me.__awaiter(this,void 0,void 0,function(){var r=this;return Me.__generator(this,function(n){return[2,Promise.all(e.map(function(i){return r._purgeEvent(i)})).then()]})})},t.prototype._sendEvents=function(){return Me.__awaiter(this,void 0,void 0,function(){var e=this;return Me.__generator(this,function(r){return[2,this.offlineEventStore.iterate(function(n,i,o){e.hub?(e.hub.captureEvent(n),e._purgeEvent(i).catch(function(a){Qe.logger.warn("could not purge event from cache")})):Qe.logger.warn("no hub found - could not send cached event")})]})})},t.id="Offline",t}();Da.Offline=hb});var bl=b(Fa=>{Object.defineProperty(Fa,"__esModule",{value:!0});var _b=N(),yl=P(),vb=function(){function t(e){e===void 0&&(e={types:["crash","deprecation","intervention"]}),this._options=e,this.name=t.id}return t.prototype.setupOnce=function(e,r){if(!!yl.supportsReportingObserver()){this._getCurrentHub=r;var n=new(yl.getGlobalObject()).ReportingObserver(this.handler.bind(this),{buffered:!0,types:this._options.types});n.observe()}},t.prototype.handler=function(e){var r,n,i=this._getCurrentHub&&this._getCurrentHub();if(!(!i||!i.getIntegration(t))){var o=function(c){i.withScope(function(l){l.setExtra("url",c.url);var d="ReportingObserver ["+c.type+"]",h="No details available";if(c.body){var y={};for(var S in c.body)y[S]=c.body[S];if(l.setExtra("body",y),c.type==="crash"){var T=c.body;h=[T.crashId||"",T.reason||""].join(" ").trim()||h}else{var T=c.body;h=T.message||h}}i.captureMessage(d+": "+h)})};try{for(var a=_b.__values(e),s=a.next();!s.done;s=a.next()){var u=s.value;o(u)}}catch(c){r={error:c}}finally{try{s&&!s.done&&(n=a.return)&&n.call(a)}finally{if(r)throw r.error}}}},t.id="ReportingObserver",t}();Fa.ReportingObserver=vb});var El=b(ja=>{Object.defineProperty(ja,"__esModule",{value:!0});var Le=N(),Sl=P(),gb=function(){function t(e){var r=this;e===void 0&&(e={}),this.name=t.id,this._prefix="app:///",this._iteratee=function(n){if(!n.filename)return n;var i=/^[A-Z]:\\/.test(n.filename),o=/^\//.test(n.filename);if(i||o){var a=i?n.filename.replace(/^[A-Z]:/,"").replace(/\\/g,"/"):n.filename,s=r._root?Sl.relative(r._root,a):Sl.basename(a);n.filename=""+r._prefix+s}return n},e.root&&(this._root=e.root),e.prefix&&(this._prefix=e.prefix),e.iteratee&&(this._iteratee=e.iteratee)}return t.prototype.setupOnce=function(e,r){e(function(n){var i=r().getIntegration(t);return i?i.process(n):n})},t.prototype.process=function(e){var r=e;return e.exception&&Array.isArray(e.exception.values)&&(r=this._processExceptionsEvent(r)),e.stacktrace&&(r=this._processStacktraceEvent(r)),r},t.prototype._processExceptionsEvent=function(e){var r=this;try{return Le.__assign(Le.__assign({},e),{exception:Le.__assign(Le.__assign({},e.exception),{values:e.exception.values.map(function(n){return Le.__assign(Le.__assign({},n),{stacktrace:r._processStacktrace(n.stacktrace)})})})})}catch{return e}},t.prototype._processStacktraceEvent=function(e){try{return Le.__assign(Le.__assign({},e),{stacktrace:this._processStacktrace(e.stacktrace)})}catch{return e}},t.prototype._processStacktrace=function(e){var r=this;return Le.__assign(Le.__assign({},e),{frames:e&&e.frames&&e.frames.map(function(n){return r._iteratee(n)})})},t.id="RewriteFrames",t}();ja.RewriteFrames=gb});var Tl=b(Ha=>{Object.defineProperty(Ha,"__esModule",{value:!0});var Xn=N(),mb=function(){function t(){this.name=t.id,this._startTime=Date.now()}return t.prototype.setupOnce=function(e,r){e(function(n){var i=r().getIntegration(t);return i?i.process(n):n})},t.prototype.process=function(e){var r,n=Date.now();return Xn.__assign(Xn.__assign({},e),{extra:Xn.__assign(Xn.__assign({},e.extra),(r={},r["session:start"]=this._startTime,r["session:duration"]=n-this._startTime,r["session:end"]=n,r))})},t.id="SessionTiming",t}();Ha.SessionTiming=mb});var Ol=b(La=>{Object.defineProperty(La,"__esModule",{value:!0});var yb=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(e,r){e(function(n){var i=r().getIntegration(t);return i?i.process(n):n})},t.prototype.process=function(e){for(var r=this._getFramesFromEvent(e),n=r.length-1;n>=0;n--){var i=r[n];if(i.in_app===!0){e.transaction=this._getTransaction(i);break}}return e},t.prototype._getFramesFromEvent=function(e){var r=e.exception&&e.exception.values&&e.exception.values[0];return r&&r.stacktrace&&r.stacktrace.frames||[]},t.prototype._getTransaction=function(e){return e.module||e.function?(e.module||"?")+"/"+(e.function||"?"):"<unknown>"},t.id="Transaction",t}();La.Transaction=yb});var Il=b(Zn=>{Object.defineProperty(Zn,"__esModule",{value:!0});var Qn=N(),Ze=P(),Ua={id:"Tracing"},bb={id:"BrowserTracing"},Ba="ui.vue",Sb={activate:["activated","deactivated"],create:["beforeCreate","created"],destroy:["beforeDestroy","destroyed"],mount:["beforeMount","mounted"],update:["beforeUpdate","updated"]},Eb=/(?:^|[-_/])(\w)/g,wl="root",Ga="anonymous component",Tb=function(){function t(e){var r=this;this.name=t.id,this._componentsCache={},this._applyTracingHooks=function(n,i){if(!n.$options.$_sentryPerfHook){n.$options.$_sentryPerfHook=!0;var o=r._getComponentName(n),a=o===wl,s={},u=function(l){var d=Ze.timestampWithMs();r._rootSpan?r._finishRootSpan(d,i):n.$once("hook:"+l,function(){var h=i().getIntegration(Ua);if(h){r._tracingActivity=h.constructor.pushActivity("Vue Application Render");var y=h.constructor.getTransaction();y&&(r._rootSpan=y.startChild({description:"Application Render",op:Ba}))}else{var S=xl(i());S&&(r._rootSpan=S.startChild({description:"Application Render",op:Ba}))}})},c=function(l,d){var h=Array.isArray(r._options.tracingOptions.trackComponents)?r._options.tracingOptions.trackComponents.indexOf(o)>-1:r._options.tracingOptions.trackComponents;if(!(!r._rootSpan||!h)){var y=Ze.timestampWithMs(),S=s[d];S?(S.finish(),r._finishRootSpan(y,i)):n.$once("hook:"+l,function(){r._rootSpan&&(s[d]=r._rootSpan.startChild({description:"Vue <"+o+">",op:Ba+"."+d}))})}};r._options.tracingOptions.hooks.forEach(function(l){var d=Sb[l];if(!d){Ze.logger.warn("Unknown hook: "+l);return}d.forEach(function(h){var y=a?u.bind(r,h):c.bind(r,h,l),S=n.$options[h];Array.isArray(S)?n.$options[h]=Qn.__spread([y],S):typeof S=="function"?n.$options[h]=[y,S]:n.$options[h]=[y]})})}},Ze.logger.log("You are still using the Vue.js integration, consider moving to @sentry/vue"),this._options=Qn.__assign(Qn.__assign({Vue:Ze.getGlobalObject().Vue,attachProps:!0,logErrors:!1,tracing:!1},e),{tracingOptions:Qn.__assign({hooks:["mount","update"],timeout:2e3,trackComponents:!1},e.tracingOptions)})}return t.prototype.setupOnce=function(e,r){if(!this._options.Vue){Ze.logger.error("Vue integration is missing a Vue instance");return}this._attachErrorHandler(r),this._options.tracing&&this._startTracing(r)},t.prototype._getComponentName=function(e){if(!e)return Ga;if(e.$root===e)return wl;if(!e.$options)return Ga;if(e.$options.name)return e.$options.name;if(e.$options._componentTag)return e.$options._componentTag;if(e.$options.__file){var r=e.$options.__file.replace(/^[a-zA-Z]:/,"").replace(/\\/g,"/"),n=Ze.basename(r,".vue");return this._componentsCache[n]||(this._componentsCache[n]=n.replace(Eb,function(i,o){return o?o.toUpperCase():""}))}return Ga},t.prototype._finishRootSpan=function(e,r){var n=this;this._rootSpanTimer&&clearTimeout(this._rootSpanTimer),this._rootSpanTimer=setTimeout(function(){if(n._tracingActivity){var i=r().getIntegration(Ua);i&&i.constructor.popActivity(n._tracingActivity)}n._rootSpan&&n._rootSpan.finish(e)},this._options.tracingOptions.timeout)},t.prototype._startTracing=function(e){var r=this._applyTracingHooks;this._options.Vue.mixin({beforeCreate:function(){e().getIntegration(Ua)||e().getIntegration(bb)?r(this,e):Ze.logger.error("Vue integration has tracing enabled, but Tracing integration is not configured")}})},t.prototype._attachErrorHandler=function(e){var r=this,n=this._options.Vue.config.errorHandler;this._options.Vue.config.errorHandler=function(i,o,a){var s={};if(o)try{s.componentName=r._getComponentName(o),r._options.attachProps&&(s.propsData=o.$options.propsData)}catch{Ze.logger.warn("Unable to extract metadata from Vue component.")}a&&(s.lifecycleHook=a),e().getIntegration(t)&&setTimeout(function(){e().withScope(function(u){u.setContext("vue",s),e().captureException(i)})}),typeof n=="function"&&n.call(r._options.Vue,i,o,a),r._options.logErrors&&(r._options.Vue.util&&r._options.Vue.util.warn("Error in "+a+': "'+(i&&i.toString())+'"',o),console.error(i))}},t.id="Vue",t}();Zn.Vue=Tb;function xl(t){if(t&&t.getScope){var e=t.getScope();if(e)return e.getTransaction()}}Zn.getActiveTransaction=xl});var Cl=b(pe=>{Object.defineProperty(pe,"__esModule",{value:!0});var Ob=fl();pe.Angular=Ob.Angular;var wb=ll();pe.CaptureConsole=wb.CaptureConsole;var xb=dl();pe.Debug=xb.Debug;var Ib=pl();pe.Dedupe=Ib.Dedupe;var Cb=hl();pe.Ember=Cb.Ember;var Rb=_l();pe.ExtraErrorData=Rb.ExtraErrorData;var Ab=ml();pe.Offline=Ab.Offline;var Pb=bl();pe.ReportingObserver=Pb.ReportingObserver;var qb=El();pe.RewriteFrames=qb.RewriteFrames;var Nb=Tl();pe.SessionTiming=Nb.SessionTiming;var Mb=Ol();pe.Transaction=Mb.Transaction;var kb=Il();pe.Vue=kb.Vue});var za=li(gs());function ms(t){if(t.length==2)return t.toUpperCase().replace(/./g,e=>String.fromCodePoint(127397+e.charCodeAt(0)))}var rr=li(ul()),Rl=li(Cl());rr.init({dsn:"https://aec0873e750c49b082fe3594def15af1@o1116132.ingest.sentry.io/6149280",tracesSampleRate:1,integrations:[new Rl.RewriteFrames({root:global.__rootdir__})]});za.default.version("0.1.0").name("country-flag-cli").command("get <flag>").action(t=>{let e=rr.startTransaction({op:"get flag from 2 alpha code",name:"GET flag from 2 alpha code"});try{let r=ms(t);if(r===void 0)throw new Error(`Flag: ${t}
35
32
  Result: ${r}
36
- `);console.log(r)}catch(r){console.error(r),Tr.captureException(r)}finally{e.finish()}});za.default.parse(process.argv);
33
+ `);console.log(r)}catch(r){console.error(r),rr.captureException(r)}finally{e.finish()}});za.default.parse(process.argv);
37
34
  /*!
38
35
  localForage -- Offline Storage, Improved
39
36
  Version 1.10.0
@@ -71,4 +68,4 @@ PERFORMANCE OF THIS SOFTWARE.
71
68
  * https://github.com/felixge/node-stack-trace/
72
69
  * @license MIT
73
70
  */
74
- //# sourceMappingURL=cli.js.map
71
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHlwZXMvc3JjL2xvZ2xldmVsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3R5cGVzL3NyYy9zZXNzaW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3R5cGVzL3NyYy9zZXZlcml0eS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90eXBlcy9zcmMvc3RhdHVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3R5cGVzL3NyYy90cmFuc2FjdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90eXBlcy9zcmMvdHJhbnNwb3J0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3R5cGVzL3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvYXN5bmMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL25vZGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL2dsb2JhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvaXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL2Jyb3dzZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL3BvbHlmaWxsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL3NyYy9lcnJvci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvZHNuLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL3NyYy9sb2dnZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL21lbW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL3N0YWNrdHJhY2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL3N0cmluZy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvb2JqZWN0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL3NyYy9zdXBwb3J0cy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvaW5zdHJ1bWVudC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvbWlzYy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvcGF0aC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvc3luY3Byb21pc2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL3Byb21pc2VidWZmZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL3RpbWUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2h1Yi9zcmMvc2NvcGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvaHViL3NyYy9zZXNzaW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2h1Yi9zcmMvaHViLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2h1Yi9zcmMvc2Vzc2lvbmZsdXNoZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvaHViL3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9taW5pbWFsL3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL3NyYy9hcGkudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9zcmMvaW50ZWdyYXRpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9zcmMvYmFzZWNsaWVudC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL3NyYy90cmFuc3BvcnRzL25vb3AudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9zcmMvYmFzZWJhY2tlbmQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9zcmMvcmVxdWVzdC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL3NyYy9zZGsudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9zcmMvdmVyc2lvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL3NyYy9pbnRlZ3JhdGlvbnMvZnVuY3Rpb250b3N0cmluZy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL3NyYy9pbnRlZ3JhdGlvbnMvaW5ib3VuZGZpbHRlcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9zcmMvaW50ZWdyYXRpb25zL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9scnVfbWFwL2xydS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL3NyYy9zdGFja3RyYWNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvc3JjL3BhcnNlcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvdmVyc2lvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL3NyYy90cmFuc3BvcnRzL2Jhc2UvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL21zL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvY29tbW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvYnJvd3Nlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvaGFzLWZsYWcvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3N1cHBvcnRzLWNvbG9yL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvbm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hZ2VudC1iYXNlL3NyYy9wcm9taXNpZnkudHMiLCAiLi4vbm9kZV9tb2R1bGVzL2FnZW50LWJhc2Uvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9odHRwcy1wcm94eS1hZ2VudC9zcmMvcGFyc2UtcHJveHktcmVzcG9uc2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL2h0dHBzLXByb3h5LWFnZW50L3NyYy9hZ2VudC50cyIsICIuLi9ub2RlX21vZHVsZXMvaHR0cHMtcHJveHktYWdlbnQvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvc3JjL3RyYW5zcG9ydHMvaHR0cC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL3NyYy90cmFuc3BvcnRzL2h0dHBzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvc3JjL3RyYW5zcG9ydHMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvYmFja2VuZC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL3NyYy9jbGllbnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL2NvbnNvbGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL3V0aWxzL2h0dHAudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL2h0dHAudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL3V0aWxzL2Vycm9yaGFuZGxpbmcudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL29udW5jYXVnaHRleGNlcHRpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL29udW5oYW5kbGVkcmVqZWN0aW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvc3JjL2ludGVncmF0aW9ucy9saW5rZWRlcnJvcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL21vZHVsZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvc3JjL3Nkay50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL3NyYy91dGlscy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9zcGFuc3RhdHVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL3V0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2Vycm9ycy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9jb25zdGFudHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9zcmMvc3Bhbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy90cmFuc2FjdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9pZGxldHJhbnNhY3Rpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9zcmMvaHViZXh0ZW5zaW9ucy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9pbnRlZ3JhdGlvbnMvbm9kZS9leHByZXNzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2ludGVncmF0aW9ucy9ub2RlL3Bvc3RncmVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2ludGVncmF0aW9ucy9ub2RlL215c3FsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2ludGVncmF0aW9ucy9ub2RlL21vbmdvLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2Jyb3dzZXIvYmFja2dyb3VuZHRhYi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9icm93c2VyL3dlYi12aXRhbHMvbGliL2JpbmRSZXBvcnRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9icm93c2VyL3dlYi12aXRhbHMvbGliL2dlbmVyYXRlVW5pcXVlSUQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9zcmMvYnJvd3Nlci93ZWItdml0YWxzL2xpYi9pbml0TWV0cmljLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2Jyb3dzZXIvd2ViLXZpdGFscy9saWIvb2JzZXJ2ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9icm93c2VyL3dlYi12aXRhbHMvbGliL29uSGlkZGVuLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2Jyb3dzZXIvd2ViLXZpdGFscy9nZXRDTFMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9zcmMvYnJvd3Nlci93ZWItdml0YWxzL2xpYi9nZXRWaXNpYmlsaXR5V2F0Y2hlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9icm93c2VyL3dlYi12aXRhbHMvZ2V0RklELnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2Jyb3dzZXIvd2ViLXZpdGFscy9nZXRMQ1AudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9zcmMvYnJvd3Nlci9tZXRyaWNzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2Jyb3dzZXIvcmVxdWVzdC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9icm93c2VyL3JvdXRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9icm93c2VyL2Jyb3dzZXJ0cmFjaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2Jyb3dzZXIvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9zcmMvaW50ZWdyYXRpb25zL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9jb29raWUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaGFuZGxlcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvaW50ZWdyYXRpb25zL3NyYy9hbmd1bGFyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2ludGVncmF0aW9ucy9zcmMvY2FwdHVyZWNvbnNvbGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvaW50ZWdyYXRpb25zL3NyYy9kZWJ1Zy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9pbnRlZ3JhdGlvbnMvc3JjL2RlZHVwZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9pbnRlZ3JhdGlvbnMvc3JjL2VtYmVyLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2ludGVncmF0aW9ucy9zcmMvZXh0cmFlcnJvcmRhdGEudHMiLCAiLi4vbm9kZV9tb2R1bGVzL2xvY2FsZm9yYWdlL2Rpc3QvbG9jYWxmb3JhZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvaW50ZWdyYXRpb25zL3NyYy9vZmZsaW5lLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2ludGVncmF0aW9ucy9zcmMvcmVwb3J0aW5nb2JzZXJ2ZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvaW50ZWdyYXRpb25zL3NyYy9yZXdyaXRlZnJhbWVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2ludGVncmF0aW9ucy9zcmMvc2Vzc2lvbnRpbWluZy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9pbnRlZ3JhdGlvbnMvc3JjL3RyYW5zYWN0aW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2ludGVncmF0aW9ucy9zcmMvdnVlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2ludGVncmF0aW9ucy9zcmMvaW5kZXgudHMiLCAiLi4vc3JjL2NsaS50cyIsICIuLi9zcmMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xudmFyIHNwYXduID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLnNwYXduO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG52YXIgZGlybmFtZSA9IHBhdGguZGlybmFtZTtcbnZhciBiYXNlbmFtZSA9IHBhdGguYmFzZW5hbWU7XG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xuXG4vKipcbiAqIEluaGVyaXQgYENvbW1hbmRgIGZyb20gYEV2ZW50RW1pdHRlci5wcm90b3R5cGVgLlxuICovXG5cbnJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0cyhDb21tYW5kLCBFdmVudEVtaXR0ZXIpO1xuXG4vKipcbiAqIEV4cG9zZSB0aGUgcm9vdCBjb21tYW5kLlxuICovXG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IG5ldyBDb21tYW5kKCk7XG5cbi8qKlxuICogRXhwb3NlIGBDb21tYW5kYC5cbiAqL1xuXG5leHBvcnRzLkNvbW1hbmQgPSBDb21tYW5kO1xuXG4vKipcbiAqIEV4cG9zZSBgT3B0aW9uYC5cbiAqL1xuXG5leHBvcnRzLk9wdGlvbiA9IE9wdGlvbjtcblxuLyoqXG4gKiBJbml0aWFsaXplIGEgbmV3IGBPcHRpb25gIHdpdGggdGhlIGdpdmVuIGBmbGFnc2AgYW5kIGBkZXNjcmlwdGlvbmAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGZsYWdzXG4gKiBAcGFyYW0ge1N0cmluZ30gZGVzY3JpcHRpb25cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbikge1xuICB0aGlzLmZsYWdzID0gZmxhZ3M7XG4gIHRoaXMucmVxdWlyZWQgPSBmbGFncy5pbmRleE9mKCc8JykgPj0gMDtcbiAgdGhpcy5vcHRpb25hbCA9IGZsYWdzLmluZGV4T2YoJ1snKSA+PSAwO1xuICB0aGlzLmJvb2wgPSBmbGFncy5pbmRleE9mKCctbm8tJykgPT09IC0xO1xuICBmbGFncyA9IGZsYWdzLnNwbGl0KC9bICx8XSsvKTtcbiAgaWYgKGZsYWdzLmxlbmd0aCA+IDEgJiYgIS9eW1s8XS8udGVzdChmbGFnc1sxXSkpIHRoaXMuc2hvcnQgPSBmbGFncy5zaGlmdCgpO1xuICB0aGlzLmxvbmcgPSBmbGFncy5zaGlmdCgpO1xuICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gfHwgJyc7XG59XG5cbi8qKlxuICogUmV0dXJuIG9wdGlvbiBuYW1lLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbk9wdGlvbi5wcm90b3R5cGUubmFtZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5sb25nXG4gICAgLnJlcGxhY2UoJy0tJywgJycpXG4gICAgLnJlcGxhY2UoJ25vLScsICcnKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIG9wdGlvbiBuYW1lLCBpbiBhIGNhbWVsY2FzZSBmb3JtYXQgdGhhdCBjYW4gYmUgdXNlZFxuICogYXMgYSBvYmplY3QgYXR0cmlidXRlIGtleS5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5PcHRpb24ucHJvdG90eXBlLmF0dHJpYnV0ZU5hbWUgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIGNhbWVsY2FzZSh0aGlzLm5hbWUoKSk7XG59O1xuXG4vKipcbiAqIENoZWNrIGlmIGBhcmdgIG1hdGNoZXMgdGhlIHNob3J0IG9yIGxvbmcgZmxhZy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gYXJnXG4gKiBAcmV0dXJuIHtCb29sZWFufVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuT3B0aW9uLnByb3RvdHlwZS5pcyA9IGZ1bmN0aW9uKGFyZykge1xuICByZXR1cm4gdGhpcy5zaG9ydCA9PT0gYXJnIHx8IHRoaXMubG9uZyA9PT0gYXJnO1xufTtcblxuLyoqXG4gKiBJbml0aWFsaXplIGEgbmV3IGBDb21tYW5kYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBDb21tYW5kKG5hbWUpIHtcbiAgdGhpcy5jb21tYW5kcyA9IFtdO1xuICB0aGlzLm9wdGlvbnMgPSBbXTtcbiAgdGhpcy5fZXhlY3MgPSB7fTtcbiAgdGhpcy5fYWxsb3dVbmtub3duT3B0aW9uID0gZmFsc2U7XG4gIHRoaXMuX2FyZ3MgPSBbXTtcbiAgdGhpcy5fbmFtZSA9IG5hbWUgfHwgJyc7XG59XG5cbi8qKlxuICogQWRkIGNvbW1hbmQgYG5hbWVgLlxuICpcbiAqIFRoZSBgLmFjdGlvbigpYCBjYWxsYmFjayBpcyBpbnZva2VkIHdoZW4gdGhlXG4gKiBjb21tYW5kIGBuYW1lYCBpcyBzcGVjaWZpZWQgdmlhIF9fQVJHVl9fLFxuICogYW5kIHRoZSByZW1haW5pbmcgYXJndW1lbnRzIGFyZSBhcHBsaWVkIHRvIHRoZVxuICogZnVuY3Rpb24gZm9yIGFjY2Vzcy5cbiAqXG4gKiBXaGVuIHRoZSBgbmFtZWAgaXMgXCIqXCIgYW4gdW4tbWF0Y2hlZCBjb21tYW5kXG4gKiB3aWxsIGJlIHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJnLCBmb2xsb3dlZCBieVxuICogdGhlIHJlc3Qgb2YgX19BUkdWX18gcmVtYWluaW5nLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICAgcHJvZ3JhbVxuICogICAgICAgIC52ZXJzaW9uKCcwLjAuMScpXG4gKiAgICAgICAgLm9wdGlvbignLUMsIC0tY2hkaXIgPHBhdGg+JywgJ2NoYW5nZSB0aGUgd29ya2luZyBkaXJlY3RvcnknKVxuICogICAgICAgIC5vcHRpb24oJy1jLCAtLWNvbmZpZyA8cGF0aD4nLCAnc2V0IGNvbmZpZyBwYXRoLiBkZWZhdWx0cyB0byAuL2RlcGxveS5jb25mJylcbiAqICAgICAgICAub3B0aW9uKCctVCwgLS1uby10ZXN0cycsICdpZ25vcmUgdGVzdCBob29rJylcbiAqXG4gKiAgICAgIHByb2dyYW1cbiAqICAgICAgICAuY29tbWFuZCgnc2V0dXAnKVxuICogICAgICAgIC5kZXNjcmlwdGlvbigncnVuIHJlbW90ZSBzZXR1cCBjb21tYW5kcycpXG4gKiAgICAgICAgLmFjdGlvbihmdW5jdGlvbigpIHtcbiAqICAgICAgICAgIGNvbnNvbGUubG9nKCdzZXR1cCcpO1xuICogICAgICAgIH0pO1xuICpcbiAqICAgICAgcHJvZ3JhbVxuICogICAgICAgIC5jb21tYW5kKCdleGVjIDxjbWQ+JylcbiAqICAgICAgICAuZGVzY3JpcHRpb24oJ3J1biB0aGUgZ2l2ZW4gcmVtb3RlIGNvbW1hbmQnKVxuICogICAgICAgIC5hY3Rpb24oZnVuY3Rpb24oY21kKSB7XG4gKiAgICAgICAgICBjb25zb2xlLmxvZygnZXhlYyBcIiVzXCInLCBjbWQpO1xuICogICAgICAgIH0pO1xuICpcbiAqICAgICAgcHJvZ3JhbVxuICogICAgICAgIC5jb21tYW5kKCd0ZWFyZG93biA8ZGlyPiBbb3RoZXJEaXJzLi4uXScpXG4gKiAgICAgICAgLmRlc2NyaXB0aW9uKCdydW4gdGVhcmRvd24gY29tbWFuZHMnKVxuICogICAgICAgIC5hY3Rpb24oZnVuY3Rpb24oZGlyLCBvdGhlckRpcnMpIHtcbiAqICAgICAgICAgIGNvbnNvbGUubG9nKCdkaXIgXCIlc1wiJywgZGlyKTtcbiAqICAgICAgICAgIGlmIChvdGhlckRpcnMpIHtcbiAqICAgICAgICAgICAgb3RoZXJEaXJzLmZvckVhY2goZnVuY3Rpb24gKG9EaXIpIHtcbiAqICAgICAgICAgICAgICBjb25zb2xlLmxvZygnZGlyIFwiJXNcIicsIG9EaXIpO1xuICogICAgICAgICAgICB9KTtcbiAqICAgICAgICAgIH1cbiAqICAgICAgICB9KTtcbiAqXG4gKiAgICAgIHByb2dyYW1cbiAqICAgICAgICAuY29tbWFuZCgnKicpXG4gKiAgICAgICAgLmRlc2NyaXB0aW9uKCdkZXBsb3kgdGhlIGdpdmVuIGVudicpXG4gKiAgICAgICAgLmFjdGlvbihmdW5jdGlvbihlbnYpIHtcbiAqICAgICAgICAgIGNvbnNvbGUubG9nKCdkZXBsb3lpbmcgXCIlc1wiJywgZW52KTtcbiAqICAgICAgICB9KTtcbiAqXG4gKiAgICAgIHByb2dyYW0ucGFyc2UocHJvY2Vzcy5hcmd2KTtcbiAgKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7U3RyaW5nfSBbZGVzY10gZm9yIGdpdC1zdHlsZSBzdWItY29tbWFuZHNcbiAqIEByZXR1cm4ge0NvbW1hbmR9IHRoZSBuZXcgY29tbWFuZFxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5jb21tYW5kID0gZnVuY3Rpb24obmFtZSwgZGVzYywgb3B0cykge1xuICBpZiAodHlwZW9mIGRlc2MgPT09ICdvYmplY3QnICYmIGRlc2MgIT09IG51bGwpIHtcbiAgICBvcHRzID0gZGVzYztcbiAgICBkZXNjID0gbnVsbDtcbiAgfVxuICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgdmFyIGFyZ3MgPSBuYW1lLnNwbGl0KC8gKy8pO1xuICB2YXIgY21kID0gbmV3IENvbW1hbmQoYXJncy5zaGlmdCgpKTtcblxuICBpZiAoZGVzYykge1xuICAgIGNtZC5kZXNjcmlwdGlvbihkZXNjKTtcbiAgICB0aGlzLmV4ZWN1dGFibGVzID0gdHJ1ZTtcbiAgICB0aGlzLl9leGVjc1tjbWQuX25hbWVdID0gdHJ1ZTtcbiAgICBpZiAob3B0cy5pc0RlZmF1bHQpIHRoaXMuZGVmYXVsdEV4ZWN1dGFibGUgPSBjbWQuX25hbWU7XG4gIH1cbiAgY21kLl9ub0hlbHAgPSAhIW9wdHMubm9IZWxwO1xuICB0aGlzLmNvbW1hbmRzLnB1c2goY21kKTtcbiAgY21kLnBhcnNlRXhwZWN0ZWRBcmdzKGFyZ3MpO1xuICBjbWQucGFyZW50ID0gdGhpcztcblxuICBpZiAoZGVzYykgcmV0dXJuIHRoaXM7XG4gIHJldHVybiBjbWQ7XG59O1xuXG4vKipcbiAqIERlZmluZSBhcmd1bWVudCBzeW50YXggZm9yIHRoZSB0b3AtbGV2ZWwgY29tbWFuZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLmFyZ3VtZW50cyA9IGZ1bmN0aW9uKGRlc2MpIHtcbiAgcmV0dXJuIHRoaXMucGFyc2VFeHBlY3RlZEFyZ3MoZGVzYy5zcGxpdCgvICsvKSk7XG59O1xuXG4vKipcbiAqIEFkZCBhbiBpbXBsaWNpdCBgaGVscCBbY21kXWAgc3ViY29tbWFuZFxuICogd2hpY2ggaW52b2tlcyBgLS1oZWxwYCBmb3IgdGhlIGdpdmVuIGNvbW1hbmQuXG4gKlxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUuYWRkSW1wbGljaXRIZWxwQ29tbWFuZCA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLmNvbW1hbmQoJ2hlbHAgW2NtZF0nLCAnZGlzcGxheSBoZWxwIGZvciBbY21kXScpO1xufTtcblxuLyoqXG4gKiBQYXJzZSBleHBlY3RlZCBgYXJnc2AuXG4gKlxuICogRm9yIGV4YW1wbGUgYFtcIlt0eXBlXVwiXWAgYmVjb21lcyBgW3sgcmVxdWlyZWQ6IGZhbHNlLCBuYW1lOiAndHlwZScgfV1gLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3NcbiAqIEByZXR1cm4ge0NvbW1hbmR9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5wYXJzZUV4cGVjdGVkQXJncyA9IGZ1bmN0aW9uKGFyZ3MpIHtcbiAgaWYgKCFhcmdzLmxlbmd0aCkgcmV0dXJuO1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIGFyZ3MuZm9yRWFjaChmdW5jdGlvbihhcmcpIHtcbiAgICB2YXIgYXJnRGV0YWlscyA9IHtcbiAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgIG5hbWU6ICcnLFxuICAgICAgdmFyaWFkaWM6IGZhbHNlXG4gICAgfTtcblxuICAgIHN3aXRjaCAoYXJnWzBdKSB7XG4gICAgICBjYXNlICc8JzpcbiAgICAgICAgYXJnRGV0YWlscy5yZXF1aXJlZCA9IHRydWU7XG4gICAgICAgIGFyZ0RldGFpbHMubmFtZSA9IGFyZy5zbGljZSgxLCAtMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnWyc6XG4gICAgICAgIGFyZ0RldGFpbHMubmFtZSA9IGFyZy5zbGljZSgxLCAtMSk7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmIChhcmdEZXRhaWxzLm5hbWUubGVuZ3RoID4gMyAmJiBhcmdEZXRhaWxzLm5hbWUuc2xpY2UoLTMpID09PSAnLi4uJykge1xuICAgICAgYXJnRGV0YWlscy52YXJpYWRpYyA9IHRydWU7XG4gICAgICBhcmdEZXRhaWxzLm5hbWUgPSBhcmdEZXRhaWxzLm5hbWUuc2xpY2UoMCwgLTMpO1xuICAgIH1cbiAgICBpZiAoYXJnRGV0YWlscy5uYW1lKSB7XG4gICAgICBzZWxmLl9hcmdzLnB1c2goYXJnRGV0YWlscyk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJlZ2lzdGVyIGNhbGxiYWNrIGBmbmAgZm9yIHRoZSBjb21tYW5kLlxuICpcbiAqIEV4YW1wbGVzOlxuICpcbiAqICAgICAgcHJvZ3JhbVxuICogICAgICAgIC5jb21tYW5kKCdoZWxwJylcbiAqICAgICAgICAuZGVzY3JpcHRpb24oJ2Rpc3BsYXkgdmVyYm9zZSBoZWxwJylcbiAqICAgICAgICAuYWN0aW9uKGZ1bmN0aW9uKCkge1xuICogICAgICAgICAgIC8vIG91dHB1dCBoZWxwIGhlcmVcbiAqICAgICAgICB9KTtcbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHJldHVybiB7Q29tbWFuZH0gZm9yIGNoYWluaW5nXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLmFjdGlvbiA9IGZ1bmN0aW9uKGZuKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIGxpc3RlbmVyID0gZnVuY3Rpb24oYXJncywgdW5rbm93bikge1xuICAgIC8vIFBhcnNlIGFueSBzby1mYXIgdW5rbm93biBvcHRpb25zXG4gICAgYXJncyA9IGFyZ3MgfHwgW107XG4gICAgdW5rbm93biA9IHVua25vd24gfHwgW107XG5cbiAgICB2YXIgcGFyc2VkID0gc2VsZi5wYXJzZU9wdGlvbnModW5rbm93bik7XG5cbiAgICAvLyBPdXRwdXQgaGVscCBpZiBuZWNlc3NhcnlcbiAgICBvdXRwdXRIZWxwSWZOZWNlc3Nhcnkoc2VsZiwgcGFyc2VkLnVua25vd24pO1xuXG4gICAgLy8gSWYgdGhlcmUgYXJlIHN0aWxsIGFueSB1bmtub3duIG9wdGlvbnMsIHRoZW4gd2Ugc2ltcGx5XG4gICAgLy8gZGllLCB1bmxlc3Mgc29tZW9uZSBhc2tlZCBmb3IgaGVscCwgaW4gd2hpY2ggY2FzZSB3ZSBnaXZlIGl0XG4gICAgLy8gdG8gdGhlbSwgYW5kIHRoZW4gd2UgZGllLlxuICAgIGlmIChwYXJzZWQudW5rbm93bi5sZW5ndGggPiAwKSB7XG4gICAgICBzZWxmLnVua25vd25PcHRpb24ocGFyc2VkLnVua25vd25bMF0pO1xuICAgIH1cblxuICAgIC8vIExlZnRvdmVyIGFyZ3VtZW50cyBuZWVkIHRvIGJlIHB1c2hlZCBiYWNrLiBGaXhlcyBpc3N1ZSAjNTZcbiAgICBpZiAocGFyc2VkLmFyZ3MubGVuZ3RoKSBhcmdzID0gcGFyc2VkLmFyZ3MuY29uY2F0KGFyZ3MpO1xuXG4gICAgc2VsZi5fYXJncy5mb3JFYWNoKGZ1bmN0aW9uKGFyZywgaSkge1xuICAgICAgaWYgKGFyZy5yZXF1aXJlZCAmJiBhcmdzW2ldID09IG51bGwpIHtcbiAgICAgICAgc2VsZi5taXNzaW5nQXJndW1lbnQoYXJnLm5hbWUpO1xuICAgICAgfSBlbHNlIGlmIChhcmcudmFyaWFkaWMpIHtcbiAgICAgICAgaWYgKGkgIT09IHNlbGYuX2FyZ3MubGVuZ3RoIC0gMSkge1xuICAgICAgICAgIHNlbGYudmFyaWFkaWNBcmdOb3RMYXN0KGFyZy5uYW1lKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFyZ3NbaV0gPSBhcmdzLnNwbGljZShpKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEFsd2F5cyBhcHBlbmQgb3Vyc2VsdmVzIHRvIHRoZSBlbmQgb2YgdGhlIGFyZ3VtZW50cyxcbiAgICAvLyB0byBtYWtlIHN1cmUgd2UgbWF0Y2ggdGhlIG51bWJlciBvZiBhcmd1bWVudHMgdGhlIHVzZXJcbiAgICAvLyBleHBlY3RzXG4gICAgaWYgKHNlbGYuX2FyZ3MubGVuZ3RoKSB7XG4gICAgICBhcmdzW3NlbGYuX2FyZ3MubGVuZ3RoXSA9IHNlbGY7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3MucHVzaChzZWxmKTtcbiAgICB9XG5cbiAgICBmbi5hcHBseShzZWxmLCBhcmdzKTtcbiAgfTtcbiAgdmFyIHBhcmVudCA9IHRoaXMucGFyZW50IHx8IHRoaXM7XG4gIHZhciBuYW1lID0gcGFyZW50ID09PSB0aGlzID8gJyonIDogdGhpcy5fbmFtZTtcbiAgcGFyZW50Lm9uKCdjb21tYW5kOicgKyBuYW1lLCBsaXN0ZW5lcik7XG4gIGlmICh0aGlzLl9hbGlhcykgcGFyZW50Lm9uKCdjb21tYW5kOicgKyB0aGlzLl9hbGlhcywgbGlzdGVuZXIpO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogRGVmaW5lIG9wdGlvbiB3aXRoIGBmbGFnc2AsIGBkZXNjcmlwdGlvbmAgYW5kIG9wdGlvbmFsXG4gKiBjb2VyY2lvbiBgZm5gLlxuICpcbiAqIFRoZSBgZmxhZ3NgIHN0cmluZyBzaG91bGQgY29udGFpbiBib3RoIHRoZSBzaG9ydCBhbmQgbG9uZyBmbGFncyxcbiAqIHNlcGFyYXRlZCBieSBjb21tYSwgYSBwaXBlIG9yIHNwYWNlLiBUaGUgZm9sbG93aW5nIGFyZSBhbGwgdmFsaWRcbiAqIGFsbCB3aWxsIG91dHB1dCB0aGlzIHdheSB3aGVuIGAtLWhlbHBgIGlzIHVzZWQuXG4gKlxuICogICAgXCItcCwgLS1wZXBwZXJcIlxuICogICAgXCItcHwtLXBlcHBlclwiXG4gKiAgICBcIi1wIC0tcGVwcGVyXCJcbiAqXG4gKiBFeGFtcGxlczpcbiAqXG4gKiAgICAgLy8gc2ltcGxlIGJvb2xlYW4gZGVmYXVsdGluZyB0byBmYWxzZVxuICogICAgIHByb2dyYW0ub3B0aW9uKCctcCwgLS1wZXBwZXInLCAnYWRkIHBlcHBlcicpO1xuICpcbiAqICAgICAtLXBlcHBlclxuICogICAgIHByb2dyYW0ucGVwcGVyXG4gKiAgICAgLy8gPT4gQm9vbGVhblxuICpcbiAqICAgICAvLyBzaW1wbGUgYm9vbGVhbiBkZWZhdWx0aW5nIHRvIHRydWVcbiAqICAgICBwcm9ncmFtLm9wdGlvbignLUMsIC0tbm8tY2hlZXNlJywgJ3JlbW92ZSBjaGVlc2UnKTtcbiAqXG4gKiAgICAgcHJvZ3JhbS5jaGVlc2VcbiAqICAgICAvLyA9PiB0cnVlXG4gKlxuICogICAgIC0tbm8tY2hlZXNlXG4gKiAgICAgcHJvZ3JhbS5jaGVlc2VcbiAqICAgICAvLyA9PiBmYWxzZVxuICpcbiAqICAgICAvLyByZXF1aXJlZCBhcmd1bWVudFxuICogICAgIHByb2dyYW0ub3B0aW9uKCctQywgLS1jaGRpciA8cGF0aD4nLCAnY2hhbmdlIHRoZSB3b3JraW5nIGRpcmVjdG9yeScpO1xuICpcbiAqICAgICAtLWNoZGlyIC90bXBcbiAqICAgICBwcm9ncmFtLmNoZGlyXG4gKiAgICAgLy8gPT4gXCIvdG1wXCJcbiAqXG4gKiAgICAgLy8gb3B0aW9uYWwgYXJndW1lbnRcbiAqICAgICBwcm9ncmFtLm9wdGlvbignLWMsIC0tY2hlZXNlIFt0eXBlXScsICdhZGQgY2hlZXNlIFttYXJibGVdJyk7XG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGZsYWdzXG4gKiBAcGFyYW0ge1N0cmluZ30gZGVzY3JpcHRpb25cbiAqIEBwYXJhbSB7RnVuY3Rpb258Kn0gW2ZuXSBvciBkZWZhdWx0XG4gKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdXG4gKiBAcmV0dXJuIHtDb21tYW5kfSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUub3B0aW9uID0gZnVuY3Rpb24oZmxhZ3MsIGRlc2NyaXB0aW9uLCBmbiwgZGVmYXVsdFZhbHVlKSB7XG4gIHZhciBzZWxmID0gdGhpcyxcbiAgICBvcHRpb24gPSBuZXcgT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbiksXG4gICAgb25hbWUgPSBvcHRpb24ubmFtZSgpLFxuICAgIG5hbWUgPSBvcHRpb24uYXR0cmlidXRlTmFtZSgpO1xuXG4gIC8vIGRlZmF1bHQgYXMgM3JkIGFyZ1xuICBpZiAodHlwZW9mIGZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKGZuIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICB2YXIgcmVnZXggPSBmbjtcbiAgICAgIGZuID0gZnVuY3Rpb24odmFsLCBkZWYpIHtcbiAgICAgICAgdmFyIG0gPSByZWdleC5leGVjKHZhbCk7XG4gICAgICAgIHJldHVybiBtID8gbVswXSA6IGRlZjtcbiAgICAgIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlZmF1bHRWYWx1ZSA9IGZuO1xuICAgICAgZm4gPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIHByZWFzc2lnbiBkZWZhdWx0IHZhbHVlIG9ubHkgZm9yIC0tbm8tKiwgW29wdGlvbmFsXSwgb3IgPHJlcXVpcmVkPlxuICBpZiAoIW9wdGlvbi5ib29sIHx8IG9wdGlvbi5vcHRpb25hbCB8fCBvcHRpb24ucmVxdWlyZWQpIHtcbiAgICAvLyB3aGVuIC0tbm8tKiB3ZSBtYWtlIHN1cmUgZGVmYXVsdCBpcyB0cnVlXG4gICAgaWYgKCFvcHRpb24uYm9vbCkgZGVmYXVsdFZhbHVlID0gdHJ1ZTtcbiAgICAvLyBwcmVhc3NpZ24gb25seSBpZiB3ZSBoYXZlIGEgZGVmYXVsdFxuICAgIGlmIChkZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2VsZltuYW1lXSA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgIG9wdGlvbi5kZWZhdWx0VmFsdWUgPSBkZWZhdWx0VmFsdWU7XG4gICAgfVxuICB9XG5cbiAgLy8gcmVnaXN0ZXIgdGhlIG9wdGlvblxuICB0aGlzLm9wdGlvbnMucHVzaChvcHRpb24pO1xuXG4gIC8vIHdoZW4gaXQncyBwYXNzZWQgYXNzaWduIHRoZSB2YWx1ZVxuICAvLyBhbmQgY29uZGl0aW9uYWxseSBpbnZva2UgdGhlIGNhbGxiYWNrXG4gIHRoaXMub24oJ29wdGlvbjonICsgb25hbWUsIGZ1bmN0aW9uKHZhbCkge1xuICAgIC8vIGNvZXJjaW9uXG4gICAgaWYgKHZhbCAhPT0gbnVsbCAmJiBmbikge1xuICAgICAgdmFsID0gZm4odmFsLCBzZWxmW25hbWVdID09PSB1bmRlZmluZWQgPyBkZWZhdWx0VmFsdWUgOiBzZWxmW25hbWVdKTtcbiAgICB9XG5cbiAgICAvLyB1bmFzc2lnbmVkIG9yIGJvb2xcbiAgICBpZiAodHlwZW9mIHNlbGZbbmFtZV0gPT09ICdib29sZWFuJyB8fCB0eXBlb2Ygc2VsZltuYW1lXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIC8vIGlmIG5vIHZhbHVlLCBib29sIHRydWUsIGFuZCB3ZSBoYXZlIGEgZGVmYXVsdCwgdGhlbiB1c2UgaXQhXG4gICAgICBpZiAodmFsID09IG51bGwpIHtcbiAgICAgICAgc2VsZltuYW1lXSA9IG9wdGlvbi5ib29sXG4gICAgICAgICAgPyBkZWZhdWx0VmFsdWUgfHwgdHJ1ZVxuICAgICAgICAgIDogZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZWxmW25hbWVdID0gdmFsO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodmFsICE9PSBudWxsKSB7XG4gICAgICAvLyByZWFzc2lnblxuICAgICAgc2VsZltuYW1lXSA9IHZhbDtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBBbGxvdyB1bmtub3duIG9wdGlvbnMgb24gdGhlIGNvbW1hbmQgbGluZS5cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGFyZyBpZiBgdHJ1ZWAgb3Igb21pdHRlZCwgbm8gZXJyb3Igd2lsbCBiZSB0aHJvd25cbiAqIGZvciB1bmtub3duIG9wdGlvbnMuXG4gKiBAYXBpIHB1YmxpY1xuICovXG5Db21tYW5kLnByb3RvdHlwZS5hbGxvd1Vua25vd25PcHRpb24gPSBmdW5jdGlvbihhcmcpIHtcbiAgdGhpcy5fYWxsb3dVbmtub3duT3B0aW9uID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gMCB8fCBhcmc7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBQYXJzZSBgYXJndmAsIHNldHRpbmdzIG9wdGlvbnMgYW5kIGludm9raW5nIGNvbW1hbmRzIHdoZW4gZGVmaW5lZC5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcmd2XG4gKiBAcmV0dXJuIHtDb21tYW5kfSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUucGFyc2UgPSBmdW5jdGlvbihhcmd2KSB7XG4gIC8vIGltcGxpY2l0IGhlbHBcbiAgaWYgKHRoaXMuZXhlY3V0YWJsZXMpIHRoaXMuYWRkSW1wbGljaXRIZWxwQ29tbWFuZCgpO1xuXG4gIC8vIHN0b3JlIHJhdyBhcmdzXG4gIHRoaXMucmF3QXJncyA9IGFyZ3Y7XG5cbiAgLy8gZ3Vlc3MgbmFtZVxuICB0aGlzLl9uYW1lID0gdGhpcy5fbmFtZSB8fCBiYXNlbmFtZShhcmd2WzFdLCAnLmpzJyk7XG5cbiAgLy8gZ2l0aHViLXN0eWxlIHN1Yi1jb21tYW5kcyB3aXRoIG5vIHN1Yi1jb21tYW5kXG4gIGlmICh0aGlzLmV4ZWN1dGFibGVzICYmIGFyZ3YubGVuZ3RoIDwgMyAmJiAhdGhpcy5kZWZhdWx0RXhlY3V0YWJsZSkge1xuICAgIC8vIHRoaXMgdXNlciBuZWVkcyBoZWxwXG4gICAgYXJndi5wdXNoKCctLWhlbHAnKTtcbiAgfVxuXG4gIC8vIHByb2Nlc3MgYXJndlxuICB2YXIgcGFyc2VkID0gdGhpcy5wYXJzZU9wdGlvbnModGhpcy5ub3JtYWxpemUoYXJndi5zbGljZSgyKSkpO1xuICB2YXIgYXJncyA9IHRoaXMuYXJncyA9IHBhcnNlZC5hcmdzO1xuXG4gIHZhciByZXN1bHQgPSB0aGlzLnBhcnNlQXJncyh0aGlzLmFyZ3MsIHBhcnNlZC51bmtub3duKTtcblxuICAvLyBleGVjdXRhYmxlIHN1Yi1jb21tYW5kc1xuICB2YXIgbmFtZSA9IHJlc3VsdC5hcmdzWzBdO1xuXG4gIHZhciBhbGlhc0NvbW1hbmQgPSBudWxsO1xuICAvLyBjaGVjayBhbGlhcyBvZiBzdWIgY29tbWFuZHNcbiAgaWYgKG5hbWUpIHtcbiAgICBhbGlhc0NvbW1hbmQgPSB0aGlzLmNvbW1hbmRzLmZpbHRlcihmdW5jdGlvbihjb21tYW5kKSB7XG4gICAgICByZXR1cm4gY29tbWFuZC5hbGlhcygpID09PSBuYW1lO1xuICAgIH0pWzBdO1xuICB9XG5cbiAgaWYgKHRoaXMuX2V4ZWNzW25hbWVdID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVN1YkNvbW1hbmQoYXJndiwgYXJncywgcGFyc2VkLnVua25vd24pO1xuICB9IGVsc2UgaWYgKGFsaWFzQ29tbWFuZCkge1xuICAgIC8vIGlzIGFsaWFzIG9mIGEgc3ViQ29tbWFuZFxuICAgIGFyZ3NbMF0gPSBhbGlhc0NvbW1hbmQuX25hbWU7XG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVN1YkNvbW1hbmQoYXJndiwgYXJncywgcGFyc2VkLnVua25vd24pO1xuICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdEV4ZWN1dGFibGUpIHtcbiAgICAvLyB1c2UgdGhlIGRlZmF1bHQgc3ViY29tbWFuZFxuICAgIGFyZ3MudW5zaGlmdCh0aGlzLmRlZmF1bHRFeGVjdXRhYmxlKTtcbiAgICByZXR1cm4gdGhpcy5leGVjdXRlU3ViQ29tbWFuZChhcmd2LCBhcmdzLCBwYXJzZWQudW5rbm93bik7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBFeGVjdXRlIGEgc3ViLWNvbW1hbmQgZXhlY3V0YWJsZS5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcmd2XG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzXG4gKiBAcGFyYW0ge0FycmF5fSB1bmtub3duXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5leGVjdXRlU3ViQ29tbWFuZCA9IGZ1bmN0aW9uKGFyZ3YsIGFyZ3MsIHVua25vd24pIHtcbiAgYXJncyA9IGFyZ3MuY29uY2F0KHVua25vd24pO1xuXG4gIGlmICghYXJncy5sZW5ndGgpIHRoaXMuaGVscCgpO1xuICBpZiAoYXJnc1swXSA9PT0gJ2hlbHAnICYmIGFyZ3MubGVuZ3RoID09PSAxKSB0aGlzLmhlbHAoKTtcblxuICAvLyA8Y21kPiAtLWhlbHBcbiAgaWYgKGFyZ3NbMF0gPT09ICdoZWxwJykge1xuICAgIGFyZ3NbMF0gPSBhcmdzWzFdO1xuICAgIGFyZ3NbMV0gPSAnLS1oZWxwJztcbiAgfVxuXG4gIC8vIGV4ZWN1dGFibGVcbiAgdmFyIGYgPSBhcmd2WzFdO1xuICAvLyBuYW1lIG9mIHRoZSBzdWJjb21tYW5kLCBsaW5rIGBwbS1pbnN0YWxsYFxuICB2YXIgYmluID0gYmFzZW5hbWUoZiwgcGF0aC5leHRuYW1lKGYpKSArICctJyArIGFyZ3NbMF07XG5cbiAgLy8gSW4gY2FzZSBvZiBnbG9iYWxseSBpbnN0YWxsZWQsIGdldCB0aGUgYmFzZSBkaXIgd2hlcmUgZXhlY3V0YWJsZVxuICAvLyAgc3ViY29tbWFuZCBmaWxlIHNob3VsZCBiZSBsb2NhdGVkIGF0XG4gIHZhciBiYXNlRGlyO1xuXG4gIHZhciByZXNvbHZlZExpbmsgPSBmcy5yZWFscGF0aFN5bmMoZik7XG5cbiAgYmFzZURpciA9IGRpcm5hbWUocmVzb2x2ZWRMaW5rKTtcblxuICAvLyBwcmVmZXIgbG9jYWwgYC4vPGJpbj5gIHRvIGJpbiBpbiB0aGUgJFBBVEhcbiAgdmFyIGxvY2FsQmluID0gcGF0aC5qb2luKGJhc2VEaXIsIGJpbik7XG5cbiAgLy8gd2hldGhlciBiaW4gZmlsZSBpcyBhIGpzIHNjcmlwdCB3aXRoIGV4cGxpY2l0IGAuanNgIG9yIGAudHNgIGV4dGVuc2lvblxuICB2YXIgaXNFeHBsaWNpdEpTID0gZmFsc2U7XG4gIGlmIChleGlzdHMobG9jYWxCaW4gKyAnLmpzJykpIHtcbiAgICBiaW4gPSBsb2NhbEJpbiArICcuanMnO1xuICAgIGlzRXhwbGljaXRKUyA9IHRydWU7XG4gIH0gZWxzZSBpZiAoZXhpc3RzKGxvY2FsQmluICsgJy50cycpKSB7XG4gICAgYmluID0gbG9jYWxCaW4gKyAnLnRzJztcbiAgICBpc0V4cGxpY2l0SlMgPSB0cnVlO1xuICB9IGVsc2UgaWYgKGV4aXN0cyhsb2NhbEJpbikpIHtcbiAgICBiaW4gPSBsb2NhbEJpbjtcbiAgfVxuXG4gIGFyZ3MgPSBhcmdzLnNsaWNlKDEpO1xuXG4gIHZhciBwcm9jO1xuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuICAgIGlmIChpc0V4cGxpY2l0SlMpIHtcbiAgICAgIGFyZ3MudW5zaGlmdChiaW4pO1xuICAgICAgLy8gYWRkIGV4ZWN1dGFibGUgYXJndW1lbnRzIHRvIHNwYXduXG4gICAgICBhcmdzID0gKHByb2Nlc3MuZXhlY0FyZ3YgfHwgW10pLmNvbmNhdChhcmdzKTtcblxuICAgICAgcHJvYyA9IHNwYXduKHByb2Nlc3MuYXJndlswXSwgYXJncywgeyBzdGRpbzogJ2luaGVyaXQnLCBjdXN0b21GZHM6IFswLCAxLCAyXSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvYyA9IHNwYXduKGJpbiwgYXJncywgeyBzdGRpbzogJ2luaGVyaXQnLCBjdXN0b21GZHM6IFswLCAxLCAyXSB9KTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYXJncy51bnNoaWZ0KGJpbik7XG4gICAgcHJvYyA9IHNwYXduKHByb2Nlc3MuZXhlY1BhdGgsIGFyZ3MsIHsgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgfVxuXG4gIHZhciBzaWduYWxzID0gWydTSUdVU1IxJywgJ1NJR1VTUjInLCAnU0lHVEVSTScsICdTSUdJTlQnLCAnU0lHSFVQJ107XG4gIHNpZ25hbHMuZm9yRWFjaChmdW5jdGlvbihzaWduYWwpIHtcbiAgICBwcm9jZXNzLm9uKHNpZ25hbCwgZnVuY3Rpb24oKSB7XG4gICAgICBpZiAocHJvYy5raWxsZWQgPT09IGZhbHNlICYmIHByb2MuZXhpdENvZGUgPT09IG51bGwpIHtcbiAgICAgICAgcHJvYy5raWxsKHNpZ25hbCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuICBwcm9jLm9uKCdjbG9zZScsIHByb2Nlc3MuZXhpdC5iaW5kKHByb2Nlc3MpKTtcbiAgcHJvYy5vbignZXJyb3InLCBmdW5jdGlvbihlcnIpIHtcbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdlcnJvcjogJXMoMSkgZG9lcyBub3QgZXhpc3QsIHRyeSAtLWhlbHAnLCBiaW4pO1xuICAgIH0gZWxzZSBpZiAoZXJyLmNvZGUgPT09ICdFQUNDRVMnKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdlcnJvcjogJXMoMSkgbm90IGV4ZWN1dGFibGUuIHRyeSBjaG1vZCBvciBydW4gd2l0aCByb290JywgYmluKTtcbiAgICB9XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9KTtcblxuICAvLyBTdG9yZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZCBwcm9jZXNzXG4gIHRoaXMucnVubmluZ0NvbW1hbmQgPSBwcm9jO1xufTtcblxuLyoqXG4gKiBOb3JtYWxpemUgYGFyZ3NgLCBzcGxpdHRpbmcgam9pbmVkIHNob3J0IGZsYWdzLiBGb3IgZXhhbXBsZVxuICogdGhlIGFyZyBcIi1hYmNcIiBpcyBlcXVpdmFsZW50IHRvIFwiLWEgLWIgLWNcIi5cbiAqIFRoaXMgYWxzbyBub3JtYWxpemVzIGVxdWFsIHNpZ24gYW5kIHNwbGl0cyBcIi0tYWJjPWRlZlwiIGludG8gXCItLWFiYyBkZWZcIi5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcmdzXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uKGFyZ3MpIHtcbiAgdmFyIHJldCA9IFtdLFxuICAgIGFyZyxcbiAgICBsYXN0T3B0LFxuICAgIGluZGV4O1xuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBhcmdzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgYXJnID0gYXJnc1tpXTtcbiAgICBpZiAoaSA+IDApIHtcbiAgICAgIGxhc3RPcHQgPSB0aGlzLm9wdGlvbkZvcihhcmdzW2kgLSAxXSk7XG4gICAgfVxuXG4gICAgaWYgKGFyZyA9PT0gJy0tJykge1xuICAgICAgLy8gSG9ub3Igb3B0aW9uIHRlcm1pbmF0b3JcbiAgICAgIHJldCA9IHJldC5jb25jYXQoYXJncy5zbGljZShpKSk7XG4gICAgICBicmVhaztcbiAgICB9IGVsc2UgaWYgKGxhc3RPcHQgJiYgbGFzdE9wdC5yZXF1aXJlZCkge1xuICAgICAgcmV0LnB1c2goYXJnKTtcbiAgICB9IGVsc2UgaWYgKGFyZy5sZW5ndGggPiAxICYmIGFyZ1swXSA9PT0gJy0nICYmIGFyZ1sxXSAhPT0gJy0nKSB7XG4gICAgICBhcmcuc2xpY2UoMSkuc3BsaXQoJycpLmZvckVhY2goZnVuY3Rpb24oYykge1xuICAgICAgICByZXQucHVzaCgnLScgKyBjKTtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAoL14tLS8udGVzdChhcmcpICYmIH4oaW5kZXggPSBhcmcuaW5kZXhPZignPScpKSkge1xuICAgICAgcmV0LnB1c2goYXJnLnNsaWNlKDAsIGluZGV4KSwgYXJnLnNsaWNlKGluZGV4ICsgMSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXQucHVzaChhcmcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXQ7XG59O1xuXG4vKipcbiAqIFBhcnNlIGNvbW1hbmQgYGFyZ3NgLlxuICpcbiAqIFdoZW4gbGlzdGVuZXIocykgYXJlIGF2YWlsYWJsZSB0aG9zZVxuICogY2FsbGJhY2tzIGFyZSBpbnZva2VkLCBvdGhlcndpc2UgdGhlIFwiKlwiXG4gKiBldmVudCBpcyBlbWl0dGVkIGFuZCB0aG9zZSBhY3Rpb25zIGFyZSBpbnZva2VkLlxuICpcbiAqIEBwYXJhbSB7QXJyYXl9IGFyZ3NcbiAqIEByZXR1cm4ge0NvbW1hbmR9IGZvciBjaGFpbmluZ1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUucGFyc2VBcmdzID0gZnVuY3Rpb24oYXJncywgdW5rbm93bikge1xuICB2YXIgbmFtZTtcblxuICBpZiAoYXJncy5sZW5ndGgpIHtcbiAgICBuYW1lID0gYXJnc1swXTtcbiAgICBpZiAodGhpcy5saXN0ZW5lcnMoJ2NvbW1hbmQ6JyArIG5hbWUpLmxlbmd0aCkge1xuICAgICAgdGhpcy5lbWl0KCdjb21tYW5kOicgKyBhcmdzLnNoaWZ0KCksIGFyZ3MsIHVua25vd24pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVtaXQoJ2NvbW1hbmQ6KicsIGFyZ3MpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXRwdXRIZWxwSWZOZWNlc3NhcnkodGhpcywgdW5rbm93bik7XG5cbiAgICAvLyBJZiB0aGVyZSB3ZXJlIG5vIGFyZ3MgYW5kIHdlIGhhdmUgdW5rbm93biBvcHRpb25zLFxuICAgIC8vIHRoZW4gdGhleSBhcmUgZXh0cmFuZW91cyBhbmQgd2UgbmVlZCB0byBlcnJvci5cbiAgICBpZiAodW5rbm93bi5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLnVua25vd25PcHRpb24odW5rbm93blswXSk7XG4gICAgfVxuICAgIGlmICh0aGlzLmNvbW1hbmRzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICB0aGlzLl9hcmdzLmZpbHRlcihmdW5jdGlvbihhKSB7IHJldHVybiBhLnJlcXVpcmVkOyB9KS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuZW1pdCgnY29tbWFuZDoqJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJldHVybiBhbiBvcHRpb24gbWF0Y2hpbmcgYGFyZ2AgaWYgYW55LlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBhcmdcbiAqIEByZXR1cm4ge09wdGlvbn1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLm9wdGlvbkZvciA9IGZ1bmN0aW9uKGFyZykge1xuICBmb3IgKHZhciBpID0gMCwgbGVuID0gdGhpcy5vcHRpb25zLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXMub3B0aW9uc1tpXS5pcyhhcmcpKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zW2ldO1xuICAgIH1cbiAgfVxufTtcblxuLyoqXG4gKiBQYXJzZSBvcHRpb25zIGZyb20gYGFyZ3ZgIHJldHVybmluZyBgYXJndmBcbiAqIHZvaWQgb2YgdGhlc2Ugb3B0aW9ucy5cbiAqXG4gKiBAcGFyYW0ge0FycmF5fSBhcmd2XG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUucGFyc2VPcHRpb25zID0gZnVuY3Rpb24oYXJndikge1xuICB2YXIgYXJncyA9IFtdLFxuICAgIGxlbiA9IGFyZ3YubGVuZ3RoLFxuICAgIGxpdGVyYWwsXG4gICAgb3B0aW9uLFxuICAgIGFyZztcblxuICB2YXIgdW5rbm93bk9wdGlvbnMgPSBbXTtcblxuICAvLyBwYXJzZSBvcHRpb25zXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBhcmcgPSBhcmd2W2ldO1xuXG4gICAgLy8gbGl0ZXJhbCBhcmdzIGFmdGVyIC0tXG4gICAgaWYgKGxpdGVyYWwpIHtcbiAgICAgIGFyZ3MucHVzaChhcmcpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgaWYgKGFyZyA9PT0gJy0tJykge1xuICAgICAgbGl0ZXJhbCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICAvLyBmaW5kIG1hdGNoaW5nIE9wdGlvblxuICAgIG9wdGlvbiA9IHRoaXMub3B0aW9uRm9yKGFyZyk7XG5cbiAgICAvLyBvcHRpb24gaXMgZGVmaW5lZFxuICAgIGlmIChvcHRpb24pIHtcbiAgICAgIC8vIHJlcXVpcmVzIGFyZ1xuICAgICAgaWYgKG9wdGlvbi5yZXF1aXJlZCkge1xuICAgICAgICBhcmcgPSBhcmd2WysraV07XG4gICAgICAgIGlmIChhcmcgPT0gbnVsbCkgcmV0dXJuIHRoaXMub3B0aW9uTWlzc2luZ0FyZ3VtZW50KG9wdGlvbik7XG4gICAgICAgIHRoaXMuZW1pdCgnb3B0aW9uOicgKyBvcHRpb24ubmFtZSgpLCBhcmcpO1xuICAgICAgLy8gb3B0aW9uYWwgYXJnXG4gICAgICB9IGVsc2UgaWYgKG9wdGlvbi5vcHRpb25hbCkge1xuICAgICAgICBhcmcgPSBhcmd2W2kgKyAxXTtcbiAgICAgICAgaWYgKGFyZyA9PSBudWxsIHx8IChhcmdbMF0gPT09ICctJyAmJiBhcmcgIT09ICctJykpIHtcbiAgICAgICAgICBhcmcgPSBudWxsO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICsraTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVtaXQoJ29wdGlvbjonICsgb3B0aW9uLm5hbWUoKSwgYXJnKTtcbiAgICAgIC8vIGJvb2xcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZW1pdCgnb3B0aW9uOicgKyBvcHRpb24ubmFtZSgpKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIGxvb2tzIGxpa2UgYW4gb3B0aW9uXG4gICAgaWYgKGFyZy5sZW5ndGggPiAxICYmIGFyZ1swXSA9PT0gJy0nKSB7XG4gICAgICB1bmtub3duT3B0aW9ucy5wdXNoKGFyZyk7XG5cbiAgICAgIC8vIElmIHRoZSBuZXh0IGFyZ3VtZW50IGxvb2tzIGxpa2UgaXQgbWlnaHQgYmVcbiAgICAgIC8vIGFuIGFyZ3VtZW50IGZvciB0aGlzIG9wdGlvbiwgd2UgcGFzcyBpdCBvbi5cbiAgICAgIC8vIElmIGl0IGlzbid0LCB0aGVuIGl0J2xsIHNpbXBseSBiZSBpZ25vcmVkXG4gICAgICBpZiAoKGkgKyAxKSA8IGFyZ3YubGVuZ3RoICYmIGFyZ3ZbaSArIDFdWzBdICE9PSAnLScpIHtcbiAgICAgICAgdW5rbm93bk9wdGlvbnMucHVzaChhcmd2WysraV0pO1xuICAgICAgfVxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgLy8gYXJnXG4gICAgYXJncy5wdXNoKGFyZyk7XG4gIH1cblxuICByZXR1cm4geyBhcmdzOiBhcmdzLCB1bmtub3duOiB1bmtub3duT3B0aW9ucyB9O1xufTtcblxuLyoqXG4gKiBSZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgb3B0aW9ucyBhcyBrZXktdmFsdWUgcGFpcnNcbiAqXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAYXBpIHB1YmxpY1xuICovXG5Db21tYW5kLnByb3RvdHlwZS5vcHRzID0gZnVuY3Rpb24oKSB7XG4gIHZhciByZXN1bHQgPSB7fSxcbiAgICBsZW4gPSB0aGlzLm9wdGlvbnMubGVuZ3RoO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICB2YXIga2V5ID0gdGhpcy5vcHRpb25zW2ldLmF0dHJpYnV0ZU5hbWUoKTtcbiAgICByZXN1bHRba2V5XSA9IGtleSA9PT0gdGhpcy5fdmVyc2lvbk9wdGlvbk5hbWUgPyB0aGlzLl92ZXJzaW9uIDogdGhpc1trZXldO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIEFyZ3VtZW50IGBuYW1lYCBpcyBtaXNzaW5nLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5taXNzaW5nQXJndW1lbnQgPSBmdW5jdGlvbihuYW1lKSB7XG4gIGNvbnNvbGUuZXJyb3IoXCJlcnJvcjogbWlzc2luZyByZXF1aXJlZCBhcmd1bWVudCBgJXMnXCIsIG5hbWUpO1xuICBwcm9jZXNzLmV4aXQoMSk7XG59O1xuXG4vKipcbiAqIGBPcHRpb25gIGlzIG1pc3NpbmcgYW4gYXJndW1lbnQsIGJ1dCByZWNlaXZlZCBgZmxhZ2Agb3Igbm90aGluZy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gb3B0aW9uXG4gKiBAcGFyYW0ge1N0cmluZ30gZmxhZ1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUub3B0aW9uTWlzc2luZ0FyZ3VtZW50ID0gZnVuY3Rpb24ob3B0aW9uLCBmbGFnKSB7XG4gIGlmIChmbGFnKSB7XG4gICAgY29uc29sZS5lcnJvcihcImVycm9yOiBvcHRpb24gYCVzJyBhcmd1bWVudCBtaXNzaW5nLCBnb3QgYCVzJ1wiLCBvcHRpb24uZmxhZ3MsIGZsYWcpO1xuICB9IGVsc2Uge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJlcnJvcjogb3B0aW9uIGAlcycgYXJndW1lbnQgbWlzc2luZ1wiLCBvcHRpb24uZmxhZ3MpO1xuICB9XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn07XG5cbi8qKlxuICogVW5rbm93biBvcHRpb24gYGZsYWdgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBmbGFnXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS51bmtub3duT3B0aW9uID0gZnVuY3Rpb24oZmxhZykge1xuICBpZiAodGhpcy5fYWxsb3dVbmtub3duT3B0aW9uKSByZXR1cm47XG4gIGNvbnNvbGUuZXJyb3IoXCJlcnJvcjogdW5rbm93biBvcHRpb24gYCVzJ1wiLCBmbGFnKTtcbiAgcHJvY2Vzcy5leGl0KDEpO1xufTtcblxuLyoqXG4gKiBWYXJpYWRpYyBhcmd1bWVudCB3aXRoIGBuYW1lYCBpcyBub3QgdGhlIGxhc3QgYXJndW1lbnQgYXMgcmVxdWlyZWQuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IG5hbWVcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLnZhcmlhZGljQXJnTm90TGFzdCA9IGZ1bmN0aW9uKG5hbWUpIHtcbiAgY29uc29sZS5lcnJvcihcImVycm9yOiB2YXJpYWRpYyBhcmd1bWVudHMgbXVzdCBiZSBsYXN0IGAlcydcIiwgbmFtZSk7XG4gIHByb2Nlc3MuZXhpdCgxKTtcbn07XG5cbi8qKlxuICogU2V0IHRoZSBwcm9ncmFtIHZlcnNpb24gdG8gYHN0cmAuXG4gKlxuICogVGhpcyBtZXRob2QgYXV0by1yZWdpc3RlcnMgdGhlIFwiLVYsIC0tdmVyc2lvblwiIGZsYWdcbiAqIHdoaWNoIHdpbGwgcHJpbnQgdGhlIHZlcnNpb24gbnVtYmVyIHdoZW4gcGFzc2VkLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7U3RyaW5nfSBbZmxhZ3NdXG4gKiBAcmV0dXJuIHtDb21tYW5kfSBmb3IgY2hhaW5pbmdcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUudmVyc2lvbiA9IGZ1bmN0aW9uKHN0ciwgZmxhZ3MpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB0aGlzLl92ZXJzaW9uO1xuICB0aGlzLl92ZXJzaW9uID0gc3RyO1xuICBmbGFncyA9IGZsYWdzIHx8ICctViwgLS12ZXJzaW9uJztcbiAgdmFyIHZlcnNpb25PcHRpb24gPSBuZXcgT3B0aW9uKGZsYWdzLCAnb3V0cHV0IHRoZSB2ZXJzaW9uIG51bWJlcicpO1xuICB0aGlzLl92ZXJzaW9uT3B0aW9uTmFtZSA9IHZlcnNpb25PcHRpb24ubG9uZy5zdWJzdHIoMikgfHwgJ3ZlcnNpb24nO1xuICB0aGlzLm9wdGlvbnMucHVzaCh2ZXJzaW9uT3B0aW9uKTtcbiAgdGhpcy5vbignb3B0aW9uOicgKyB0aGlzLl92ZXJzaW9uT3B0aW9uTmFtZSwgZnVuY3Rpb24oKSB7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoc3RyICsgJ1xcbicpO1xuICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgfSk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgdGhlIGRlc2NyaXB0aW9uIHRvIGBzdHJgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7T2JqZWN0fSBhcmdzRGVzY3JpcHRpb25cbiAqIEByZXR1cm4ge1N0cmluZ3xDb21tYW5kfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5kZXNjcmlwdGlvbiA9IGZ1bmN0aW9uKHN0ciwgYXJnc0Rlc2NyaXB0aW9uKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdGhpcy5fZGVzY3JpcHRpb247XG4gIHRoaXMuX2Rlc2NyaXB0aW9uID0gc3RyO1xuICB0aGlzLl9hcmdzRGVzY3JpcHRpb24gPSBhcmdzRGVzY3JpcHRpb247XG4gIHJldHVybiB0aGlzO1xufTtcblxuLyoqXG4gKiBTZXQgYW4gYWxpYXMgZm9yIHRoZSBjb21tYW5kXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGFsaWFzXG4gKiBAcmV0dXJuIHtTdHJpbmd8Q29tbWFuZH1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUuYWxpYXMgPSBmdW5jdGlvbihhbGlhcykge1xuICB2YXIgY29tbWFuZCA9IHRoaXM7XG4gIGlmICh0aGlzLmNvbW1hbmRzLmxlbmd0aCAhPT0gMCkge1xuICAgIGNvbW1hbmQgPSB0aGlzLmNvbW1hbmRzW3RoaXMuY29tbWFuZHMubGVuZ3RoIC0gMV07XG4gIH1cblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNvbW1hbmQuX2FsaWFzO1xuXG4gIGlmIChhbGlhcyA9PT0gY29tbWFuZC5fbmFtZSkgdGhyb3cgbmV3IEVycm9yKCdDb21tYW5kIGFsaWFzIGNhblxcJ3QgYmUgdGhlIHNhbWUgYXMgaXRzIG5hbWUnKTtcblxuICBjb21tYW5kLl9hbGlhcyA9IGFsaWFzO1xuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogU2V0IC8gZ2V0IHRoZSBjb21tYW5kIHVzYWdlIGBzdHJgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge1N0cmluZ3xDb21tYW5kfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS51c2FnZSA9IGZ1bmN0aW9uKHN0cikge1xuICB2YXIgYXJncyA9IHRoaXMuX2FyZ3MubWFwKGZ1bmN0aW9uKGFyZykge1xuICAgIHJldHVybiBodW1hblJlYWRhYmxlQXJnTmFtZShhcmcpO1xuICB9KTtcblxuICB2YXIgdXNhZ2UgPSAnW29wdGlvbnNdJyArXG4gICAgKHRoaXMuY29tbWFuZHMubGVuZ3RoID8gJyBbY29tbWFuZF0nIDogJycpICtcbiAgICAodGhpcy5fYXJncy5sZW5ndGggPyAnICcgKyBhcmdzLmpvaW4oJyAnKSA6ICcnKTtcblxuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIHRoaXMuX3VzYWdlIHx8IHVzYWdlO1xuICB0aGlzLl91c2FnZSA9IHN0cjtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8qKlxuICogR2V0IG9yIHNldCB0aGUgbmFtZSBvZiB0aGUgY29tbWFuZFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge1N0cmluZ3xDb21tYW5kfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5uYW1lID0gZnVuY3Rpb24oc3RyKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdGhpcy5fbmFtZTtcbiAgdGhpcy5fbmFtZSA9IHN0cjtcbiAgcmV0dXJuIHRoaXM7XG59O1xuXG4vKipcbiAqIFJldHVybiBwcmVwYXJlZCBjb21tYW5kcy5cbiAqXG4gKiBAcmV0dXJuIHtBcnJheX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLnByZXBhcmVDb21tYW5kcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5jb21tYW5kcy5maWx0ZXIoZnVuY3Rpb24oY21kKSB7XG4gICAgcmV0dXJuICFjbWQuX25vSGVscDtcbiAgfSkubWFwKGZ1bmN0aW9uKGNtZCkge1xuICAgIHZhciBhcmdzID0gY21kLl9hcmdzLm1hcChmdW5jdGlvbihhcmcpIHtcbiAgICAgIHJldHVybiBodW1hblJlYWRhYmxlQXJnTmFtZShhcmcpO1xuICAgIH0pLmpvaW4oJyAnKTtcblxuICAgIHJldHVybiBbXG4gICAgICBjbWQuX25hbWUgK1xuICAgICAgICAoY21kLl9hbGlhcyA/ICd8JyArIGNtZC5fYWxpYXMgOiAnJykgK1xuICAgICAgICAoY21kLm9wdGlvbnMubGVuZ3RoID8gJyBbb3B0aW9uc10nIDogJycpICtcbiAgICAgICAgKGFyZ3MgPyAnICcgKyBhcmdzIDogJycpLFxuICAgICAgY21kLl9kZXNjcmlwdGlvblxuICAgIF07XG4gIH0pO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGxhcmdlc3QgY29tbWFuZCBsZW5ndGguXG4gKlxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUubGFyZ2VzdENvbW1hbmRMZW5ndGggPSBmdW5jdGlvbigpIHtcbiAgdmFyIGNvbW1hbmRzID0gdGhpcy5wcmVwYXJlQ29tbWFuZHMoKTtcbiAgcmV0dXJuIGNvbW1hbmRzLnJlZHVjZShmdW5jdGlvbihtYXgsIGNvbW1hbmQpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgobWF4LCBjb21tYW5kWzBdLmxlbmd0aCk7XG4gIH0sIDApO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gdGhlIGxhcmdlc3Qgb3B0aW9uIGxlbmd0aC5cbiAqXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5sYXJnZXN0T3B0aW9uTGVuZ3RoID0gZnVuY3Rpb24oKSB7XG4gIHZhciBvcHRpb25zID0gW10uc2xpY2UuY2FsbCh0aGlzLm9wdGlvbnMpO1xuICBvcHRpb25zLnB1c2goe1xuICAgIGZsYWdzOiAnLWgsIC0taGVscCdcbiAgfSk7XG4gIHJldHVybiBvcHRpb25zLnJlZHVjZShmdW5jdGlvbihtYXgsIG9wdGlvbikge1xuICAgIHJldHVybiBNYXRoLm1heChtYXgsIG9wdGlvbi5mbGFncy5sZW5ndGgpO1xuICB9LCAwKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBsYXJnZXN0IGFyZyBsZW5ndGguXG4gKlxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUubGFyZ2VzdEFyZ0xlbmd0aCA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcy5fYXJncy5yZWR1Y2UoZnVuY3Rpb24obWF4LCBhcmcpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgobWF4LCBhcmcubmFtZS5sZW5ndGgpO1xuICB9LCAwKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHRoZSBwYWQgd2lkdGguXG4gKlxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUucGFkV2lkdGggPSBmdW5jdGlvbigpIHtcbiAgdmFyIHdpZHRoID0gdGhpcy5sYXJnZXN0T3B0aW9uTGVuZ3RoKCk7XG4gIGlmICh0aGlzLl9hcmdzRGVzY3JpcHRpb24gJiYgdGhpcy5fYXJncy5sZW5ndGgpIHtcbiAgICBpZiAodGhpcy5sYXJnZXN0QXJnTGVuZ3RoKCkgPiB3aWR0aCkge1xuICAgICAgd2lkdGggPSB0aGlzLmxhcmdlc3RBcmdMZW5ndGgoKTtcbiAgICB9XG4gIH1cblxuICBpZiAodGhpcy5jb21tYW5kcyAmJiB0aGlzLmNvbW1hbmRzLmxlbmd0aCkge1xuICAgIGlmICh0aGlzLmxhcmdlc3RDb21tYW5kTGVuZ3RoKCkgPiB3aWR0aCkge1xuICAgICAgd2lkdGggPSB0aGlzLmxhcmdlc3RDb21tYW5kTGVuZ3RoKCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdpZHRoO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gaGVscCBmb3Igb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5vcHRpb25IZWxwID0gZnVuY3Rpb24oKSB7XG4gIHZhciB3aWR0aCA9IHRoaXMucGFkV2lkdGgoKTtcblxuICAvLyBBcHBlbmQgdGhlIGhlbHAgaW5mb3JtYXRpb25cbiAgcmV0dXJuIHRoaXMub3B0aW9ucy5tYXAoZnVuY3Rpb24ob3B0aW9uKSB7XG4gICAgcmV0dXJuIHBhZChvcHRpb24uZmxhZ3MsIHdpZHRoKSArICcgICcgKyBvcHRpb24uZGVzY3JpcHRpb24gK1xuICAgICAgKChvcHRpb24uYm9vbCAmJiBvcHRpb24uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpID8gJyAoZGVmYXVsdDogJyArIEpTT04uc3RyaW5naWZ5KG9wdGlvbi5kZWZhdWx0VmFsdWUpICsgJyknIDogJycpO1xuICB9KS5jb25jYXQoW3BhZCgnLWgsIC0taGVscCcsIHdpZHRoKSArICcgICcgKyAnb3V0cHV0IHVzYWdlIGluZm9ybWF0aW9uJ10pXG4gICAgLmpvaW4oJ1xcbicpO1xufTtcblxuLyoqXG4gKiBSZXR1cm4gY29tbWFuZCBoZWxwIGRvY3VtZW50YXRpb24uXG4gKlxuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuQ29tbWFuZC5wcm90b3R5cGUuY29tbWFuZEhlbHAgPSBmdW5jdGlvbigpIHtcbiAgaWYgKCF0aGlzLmNvbW1hbmRzLmxlbmd0aCkgcmV0dXJuICcnO1xuXG4gIHZhciBjb21tYW5kcyA9IHRoaXMucHJlcGFyZUNvbW1hbmRzKCk7XG4gIHZhciB3aWR0aCA9IHRoaXMucGFkV2lkdGgoKTtcblxuICByZXR1cm4gW1xuICAgICdDb21tYW5kczonLFxuICAgIGNvbW1hbmRzLm1hcChmdW5jdGlvbihjbWQpIHtcbiAgICAgIHZhciBkZXNjID0gY21kWzFdID8gJyAgJyArIGNtZFsxXSA6ICcnO1xuICAgICAgcmV0dXJuIChkZXNjID8gcGFkKGNtZFswXSwgd2lkdGgpIDogY21kWzBdKSArIGRlc2M7XG4gICAgfSkuam9pbignXFxuJykucmVwbGFjZSgvXi9nbSwgJyAgJyksXG4gICAgJydcbiAgXS5qb2luKCdcXG4nKTtcbn07XG5cbi8qKlxuICogUmV0dXJuIHByb2dyYW0gaGVscCBkb2N1bWVudGF0aW9uLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbkNvbW1hbmQucHJvdG90eXBlLmhlbHBJbmZvcm1hdGlvbiA9IGZ1bmN0aW9uKCkge1xuICB2YXIgZGVzYyA9IFtdO1xuICBpZiAodGhpcy5fZGVzY3JpcHRpb24pIHtcbiAgICBkZXNjID0gW1xuICAgICAgdGhpcy5fZGVzY3JpcHRpb24sXG4gICAgICAnJ1xuICAgIF07XG5cbiAgICB2YXIgYXJnc0Rlc2NyaXB0aW9uID0gdGhpcy5fYXJnc0Rlc2NyaXB0aW9uO1xuICAgIGlmIChhcmdzRGVzY3JpcHRpb24gJiYgdGhpcy5fYXJncy5sZW5ndGgpIHtcbiAgICAgIHZhciB3aWR0aCA9IHRoaXMucGFkV2lkdGgoKTtcbiAgICAgIGRlc2MucHVzaCgnQXJndW1lbnRzOicpO1xuICAgICAgZGVzYy5wdXNoKCcnKTtcbiAgICAgIHRoaXMuX2FyZ3MuZm9yRWFjaChmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgZGVzYy5wdXNoKCcgICcgKyBwYWQoYXJnLm5hbWUsIHdpZHRoKSArICcgICcgKyBhcmdzRGVzY3JpcHRpb25bYXJnLm5hbWVdKTtcbiAgICAgIH0pO1xuICAgICAgZGVzYy5wdXNoKCcnKTtcbiAgICB9XG4gIH1cblxuICB2YXIgY21kTmFtZSA9IHRoaXMuX25hbWU7XG4gIGlmICh0aGlzLl9hbGlhcykge1xuICAgIGNtZE5hbWUgPSBjbWROYW1lICsgJ3wnICsgdGhpcy5fYWxpYXM7XG4gIH1cbiAgdmFyIHVzYWdlID0gW1xuICAgICdVc2FnZTogJyArIGNtZE5hbWUgKyAnICcgKyB0aGlzLnVzYWdlKCksXG4gICAgJydcbiAgXTtcblxuICB2YXIgY21kcyA9IFtdO1xuICB2YXIgY29tbWFuZEhlbHAgPSB0aGlzLmNvbW1hbmRIZWxwKCk7XG4gIGlmIChjb21tYW5kSGVscCkgY21kcyA9IFtjb21tYW5kSGVscF07XG5cbiAgdmFyIG9wdGlvbnMgPSBbXG4gICAgJ09wdGlvbnM6JyxcbiAgICAnJyArIHRoaXMub3B0aW9uSGVscCgpLnJlcGxhY2UoL14vZ20sICcgICcpLFxuICAgICcnXG4gIF07XG5cbiAgcmV0dXJuIHVzYWdlXG4gICAgLmNvbmNhdChkZXNjKVxuICAgIC5jb25jYXQob3B0aW9ucylcbiAgICAuY29uY2F0KGNtZHMpXG4gICAgLmpvaW4oJ1xcbicpO1xufTtcblxuLyoqXG4gKiBPdXRwdXQgaGVscCBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb21tYW5kXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5vdXRwdXRIZWxwID0gZnVuY3Rpb24oY2IpIHtcbiAgaWYgKCFjYikge1xuICAgIGNiID0gZnVuY3Rpb24ocGFzc3RocnUpIHtcbiAgICAgIHJldHVybiBwYXNzdGhydTtcbiAgICB9O1xuICB9XG4gIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGNiKHRoaXMuaGVscEluZm9ybWF0aW9uKCkpKTtcbiAgdGhpcy5lbWl0KCctLWhlbHAnKTtcbn07XG5cbi8qKlxuICogT3V0cHV0IGhlbHAgaW5mb3JtYXRpb24gYW5kIGV4aXQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5Db21tYW5kLnByb3RvdHlwZS5oZWxwID0gZnVuY3Rpb24oY2IpIHtcbiAgdGhpcy5vdXRwdXRIZWxwKGNiKTtcbiAgcHJvY2Vzcy5leGl0KCk7XG59O1xuXG4vKipcbiAqIENhbWVsLWNhc2UgdGhlIGdpdmVuIGBmbGFnYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBmbGFnXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBjYW1lbGNhc2UoZmxhZykge1xuICByZXR1cm4gZmxhZy5zcGxpdCgnLScpLnJlZHVjZShmdW5jdGlvbihzdHIsIHdvcmQpIHtcbiAgICByZXR1cm4gc3RyICsgd29yZFswXS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKTtcbiAgfSk7XG59XG5cbi8qKlxuICogUGFkIGBzdHJgIHRvIGB3aWR0aGAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtOdW1iZXJ9IHdpZHRoXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYWQoc3RyLCB3aWR0aCkge1xuICB2YXIgbGVuID0gTWF0aC5tYXgoMCwgd2lkdGggLSBzdHIubGVuZ3RoKTtcbiAgcmV0dXJuIHN0ciArIEFycmF5KGxlbiArIDEpLmpvaW4oJyAnKTtcbn1cblxuLyoqXG4gKiBPdXRwdXQgaGVscCBpbmZvcm1hdGlvbiBpZiBuZWNlc3NhcnlcbiAqXG4gKiBAcGFyYW0ge0NvbW1hbmR9IGNvbW1hbmQgdG8gb3V0cHV0IGhlbHAgZm9yXG4gKiBAcGFyYW0ge0FycmF5fSBhcnJheSBvZiBvcHRpb25zIHRvIHNlYXJjaCBmb3IgLWggb3IgLS1oZWxwXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBvdXRwdXRIZWxwSWZOZWNlc3NhcnkoY21kLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IFtdO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG9wdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAob3B0aW9uc1tpXSA9PT0gJy0taGVscCcgfHwgb3B0aW9uc1tpXSA9PT0gJy1oJykge1xuICAgICAgY21kLm91dHB1dEhlbHAoKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgwKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUYWtlcyBhbiBhcmd1bWVudCBhbiByZXR1cm5zIGl0cyBodW1hbiByZWFkYWJsZSBlcXVpdmFsZW50IGZvciBoZWxwIHVzYWdlLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBhcmdcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGh1bWFuUmVhZGFibGVBcmdOYW1lKGFyZykge1xuICB2YXIgbmFtZU91dHB1dCA9IGFyZy5uYW1lICsgKGFyZy52YXJpYWRpYyA9PT0gdHJ1ZSA/ICcuLi4nIDogJycpO1xuXG4gIHJldHVybiBhcmcucmVxdWlyZWRcbiAgICA/ICc8JyArIG5hbWVPdXRwdXQgKyAnPidcbiAgICA6ICdbJyArIG5hbWVPdXRwdXQgKyAnXSc7XG59XG5cbi8vIGZvciB2ZXJzaW9ucyBiZWZvcmUgbm9kZSB2MC44IHdoZW4gdGhlcmUgd2VyZW4ndCBgZnMuZXhpc3RzU3luY2BcbmZ1bmN0aW9uIGV4aXN0cyhmaWxlKSB7XG4gIHRyeSB7XG4gICAgaWYgKGZzLnN0YXRTeW5jKGZpbGUpLmlzRmlsZSgpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cbiIsICIvKiEgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG5cclxuLyogZ2xvYmFsIGdsb2JhbCwgZGVmaW5lLCBTeXN0ZW0sIFJlZmxlY3QsIFByb21pc2UgKi9cclxudmFyIF9fZXh0ZW5kcztcclxudmFyIF9fYXNzaWduO1xyXG52YXIgX19yZXN0O1xyXG52YXIgX19kZWNvcmF0ZTtcclxudmFyIF9fcGFyYW07XHJcbnZhciBfX21ldGFkYXRhO1xyXG52YXIgX19hd2FpdGVyO1xyXG52YXIgX19nZW5lcmF0b3I7XHJcbnZhciBfX2V4cG9ydFN0YXI7XHJcbnZhciBfX3ZhbHVlcztcclxudmFyIF9fcmVhZDtcclxudmFyIF9fc3ByZWFkO1xyXG52YXIgX19zcHJlYWRBcnJheXM7XHJcbnZhciBfX2F3YWl0O1xyXG52YXIgX19hc3luY0dlbmVyYXRvcjtcclxudmFyIF9fYXN5bmNEZWxlZ2F0b3I7XHJcbnZhciBfX2FzeW5jVmFsdWVzO1xyXG52YXIgX19tYWtlVGVtcGxhdGVPYmplY3Q7XHJcbnZhciBfX2ltcG9ydFN0YXI7XHJcbnZhciBfX2ltcG9ydERlZmF1bHQ7XHJcbnZhciBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0O1xyXG52YXIgX19jbGFzc1ByaXZhdGVGaWVsZFNldDtcclxudmFyIF9fY3JlYXRlQmluZGluZztcclxuKGZ1bmN0aW9uIChmYWN0b3J5KSB7XHJcbiAgICB2YXIgcm9vdCA9IHR5cGVvZiBnbG9iYWwgPT09IFwib2JqZWN0XCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiA9PT0gXCJvYmplY3RcIiA/IHNlbGYgOiB0eXBlb2YgdGhpcyA9PT0gXCJvYmplY3RcIiA/IHRoaXMgOiB7fTtcclxuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xyXG4gICAgICAgIGRlZmluZShcInRzbGliXCIsIFtcImV4cG9ydHNcIl0sIGZ1bmN0aW9uIChleHBvcnRzKSB7IGZhY3RvcnkoY3JlYXRlRXhwb3J0ZXIocm9vdCwgY3JlYXRlRXhwb3J0ZXIoZXhwb3J0cykpKTsgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIikge1xyXG4gICAgICAgIGZhY3RvcnkoY3JlYXRlRXhwb3J0ZXIocm9vdCwgY3JlYXRlRXhwb3J0ZXIobW9kdWxlLmV4cG9ydHMpKSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgICBmYWN0b3J5KGNyZWF0ZUV4cG9ydGVyKHJvb3QpKTtcclxuICAgIH1cclxuICAgIGZ1bmN0aW9uIGNyZWF0ZUV4cG9ydGVyKGV4cG9ydHMsIHByZXZpb3VzKSB7XHJcbiAgICAgICAgaWYgKGV4cG9ydHMgIT09IHJvb3QpIHtcclxuICAgICAgICAgICAgaWYgKHR5cGVvZiBPYmplY3QuY3JlYXRlID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGV4cG9ydHMuX19lc01vZHVsZSA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChpZCwgdikgeyByZXR1cm4gZXhwb3J0c1tpZF0gPSBwcmV2aW91cyA/IHByZXZpb3VzKGlkLCB2KSA6IHY7IH07XHJcbiAgICB9XHJcbn0pXHJcbihmdW5jdGlvbiAoZXhwb3J0ZXIpIHtcclxuICAgIHZhciBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKGIuaGFzT3duUHJvcGVydHkocCkpIGRbcF0gPSBiW3BdOyB9O1xyXG5cclxuICAgIF9fZXh0ZW5kcyA9IGZ1bmN0aW9uIChkLCBiKSB7XHJcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgICAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgICAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH07XHJcblxyXG4gICAgX19yZXN0ID0gZnVuY3Rpb24gKHMsIGUpIHtcclxuICAgICAgICB2YXIgdCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgICAgICB0W3BdID0gc1twXTtcclxuICAgICAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2RlY29yYXRlID0gZnVuY3Rpb24gKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICAgICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgICAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICAgICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxuICAgIH07XHJcblxyXG4gICAgX19wYXJhbSA9IGZ1bmN0aW9uIChwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxuICAgIH07XHJcblxyXG4gICAgX19tZXRhZGF0YSA9IGZ1bmN0aW9uIChtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXdhaXRlciA9IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgICAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgICAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2dlbmVyYXRvciA9IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XHJcbiAgICAgICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgICAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgICAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICAgICAgd2hpbGUgKF8pIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIF9fY3JlYXRlQmluZGluZyA9IGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICAgICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgICAgICBvW2syXSA9IG1ba107XHJcbiAgICB9O1xyXG5cclxuICAgIF9fZXhwb3J0U3RhciA9IGZ1bmN0aW9uIChtLCBleHBvcnRzKSB7XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIWV4cG9ydHMuaGFzT3duUHJvcGVydHkocCkpIGV4cG9ydHNbcF0gPSBtW3BdO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3ZhbHVlcyA9IGZ1bmN0aW9uIChvKSB7XHJcbiAgICAgICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgICAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgICAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9O1xyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIH07XHJcblxyXG4gICAgX19yZWFkID0gZnVuY3Rpb24gKG8sIG4pIHtcclxuICAgICAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICAgICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgICAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICAgICAgZmluYWxseSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGFyO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX3NwcmVhZCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgICAgIHJldHVybiBhcjtcclxuICAgIH07XHJcblxyXG4gICAgX19zcHJlYWRBcnJheXMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICAgICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcclxuICAgICAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgICAgIHJldHVybiByO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2F3YWl0ID0gZnVuY3Rpb24gKHYpIHtcclxuICAgICAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxuICAgIH07XHJcblxyXG4gICAgX19hc3luY0dlbmVyYXRvciA9IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgICAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICAgICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7ICB9XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgICAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbiAgICB9O1xyXG5cclxuICAgIF9fYXN5bmNEZWxlZ2F0b3IgPSBmdW5jdGlvbiAobykge1xyXG4gICAgICAgIHZhciBpLCBwO1xyXG4gICAgICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICAgICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogbiA9PT0gXCJyZXR1cm5cIiB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG4gICAgfTtcclxuXHJcbiAgICBfX2FzeW5jVmFsdWVzID0gZnVuY3Rpb24gKG8pIHtcclxuICAgICAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICAgICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgICAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbiAgICB9O1xyXG5cclxuICAgIF9fbWFrZVRlbXBsYXRlT2JqZWN0ID0gZnVuY3Rpb24gKGNvb2tlZCwgcmF3KSB7XHJcbiAgICAgICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgICAgICByZXR1cm4gY29va2VkO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2ltcG9ydFN0YXIgPSBmdW5jdGlvbiAobW9kKSB7XHJcbiAgICAgICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgICAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICAgICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIHJlc3VsdFtrXSA9IG1vZFtrXTtcclxuICAgICAgICByZXN1bHRbXCJkZWZhdWx0XCJdID0gbW9kO1xyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9O1xyXG5cclxuICAgIF9faW1wb3J0RGVmYXVsdCA9IGZ1bmN0aW9uIChtb2QpIHtcclxuICAgICAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IFwiZGVmYXVsdFwiOiBtb2QgfTtcclxuICAgIH07XHJcblxyXG4gICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCA9IGZ1bmN0aW9uIChyZWNlaXZlciwgcHJpdmF0ZU1hcCkge1xyXG4gICAgICAgIGlmICghcHJpdmF0ZU1hcC5oYXMocmVjZWl2ZXIpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gZ2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJpdmF0ZU1hcC5nZXQocmVjZWl2ZXIpO1xyXG4gICAgfTtcclxuXHJcbiAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0ID0gZnVuY3Rpb24gKHJlY2VpdmVyLCBwcml2YXRlTWFwLCB2YWx1ZSkge1xyXG4gICAgICAgIGlmICghcHJpdmF0ZU1hcC5oYXMocmVjZWl2ZXIpKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhdHRlbXB0ZWQgdG8gc2V0IHByaXZhdGUgZmllbGQgb24gbm9uLWluc3RhbmNlXCIpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBwcml2YXRlTWFwLnNldChyZWNlaXZlciwgdmFsdWUpO1xyXG4gICAgICAgIHJldHVybiB2YWx1ZTtcclxuICAgIH07XHJcblxyXG4gICAgZXhwb3J0ZXIoXCJfX2V4dGVuZHNcIiwgX19leHRlbmRzKTtcclxuICAgIGV4cG9ydGVyKFwiX19hc3NpZ25cIiwgX19hc3NpZ24pO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3Jlc3RcIiwgX19yZXN0KTtcclxuICAgIGV4cG9ydGVyKFwiX19kZWNvcmF0ZVwiLCBfX2RlY29yYXRlKTtcclxuICAgIGV4cG9ydGVyKFwiX19wYXJhbVwiLCBfX3BhcmFtKTtcclxuICAgIGV4cG9ydGVyKFwiX19tZXRhZGF0YVwiLCBfX21ldGFkYXRhKTtcclxuICAgIGV4cG9ydGVyKFwiX19hd2FpdGVyXCIsIF9fYXdhaXRlcik7XHJcbiAgICBleHBvcnRlcihcIl9fZ2VuZXJhdG9yXCIsIF9fZ2VuZXJhdG9yKTtcclxuICAgIGV4cG9ydGVyKFwiX19leHBvcnRTdGFyXCIsIF9fZXhwb3J0U3Rhcik7XHJcbiAgICBleHBvcnRlcihcIl9fY3JlYXRlQmluZGluZ1wiLCBfX2NyZWF0ZUJpbmRpbmcpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3ZhbHVlc1wiLCBfX3ZhbHVlcyk7XHJcbiAgICBleHBvcnRlcihcIl9fcmVhZFwiLCBfX3JlYWQpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX3NwcmVhZFwiLCBfX3NwcmVhZCk7XHJcbiAgICBleHBvcnRlcihcIl9fc3ByZWFkQXJyYXlzXCIsIF9fc3ByZWFkQXJyYXlzKTtcclxuICAgIGV4cG9ydGVyKFwiX19hd2FpdFwiLCBfX2F3YWl0KTtcclxuICAgIGV4cG9ydGVyKFwiX19hc3luY0dlbmVyYXRvclwiLCBfX2FzeW5jR2VuZXJhdG9yKTtcclxuICAgIGV4cG9ydGVyKFwiX19hc3luY0RlbGVnYXRvclwiLCBfX2FzeW5jRGVsZWdhdG9yKTtcclxuICAgIGV4cG9ydGVyKFwiX19hc3luY1ZhbHVlc1wiLCBfX2FzeW5jVmFsdWVzKTtcclxuICAgIGV4cG9ydGVyKFwiX19tYWtlVGVtcGxhdGVPYmplY3RcIiwgX19tYWtlVGVtcGxhdGVPYmplY3QpO1xyXG4gICAgZXhwb3J0ZXIoXCJfX2ltcG9ydFN0YXJcIiwgX19pbXBvcnRTdGFyKTtcclxuICAgIGV4cG9ydGVyKFwiX19pbXBvcnREZWZhdWx0XCIsIF9faW1wb3J0RGVmYXVsdCk7XHJcbiAgICBleHBvcnRlcihcIl9fY2xhc3NQcml2YXRlRmllbGRHZXRcIiwgX19jbGFzc1ByaXZhdGVGaWVsZEdldCk7XHJcbiAgICBleHBvcnRlcihcIl9fY2xhc3NQcml2YXRlRmllbGRTZXRcIiwgX19jbGFzc1ByaXZhdGVGaWVsZFNldCk7XHJcbn0pO1xyXG4iLCAiLyoqIENvbnNvbGUgbG9nZ2luZyB2ZXJib3NpdHkgZm9yIHRoZSBTREsuICovXG5leHBvcnQgZW51bSBMb2dMZXZlbCB7XG4gIC8qKiBObyBsb2dzIHdpbGwgYmUgZ2VuZXJhdGVkLiAqL1xuICBOb25lID0gMCxcbiAgLyoqIE9ubHkgU0RLIGludGVybmFsIGVycm9ycyB3aWxsIGJlIGxvZ2dlZC4gKi9cbiAgRXJyb3IgPSAxLFxuICAvKiogSW5mb3JtYXRpb24gdXNlZnVsIGZvciBkZWJ1Z2dpbmcgdGhlIFNESyB3aWxsIGJlIGxvZ2dlZC4gKi9cbiAgRGVidWcgPSAyLFxuICAvKiogQWxsIFNESyBhY3Rpb25zIHdpbGwgYmUgbG9nZ2VkLiAqL1xuICBWZXJib3NlID0gMyxcbn1cbiIsICJpbXBvcnQgeyBVc2VyIH0gZnJvbSAnLi91c2VyJztcblxuLyoqXG4gKiBAaW5oZXJpdGRvY1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNlc3Npb24gZXh0ZW5kcyBTZXNzaW9uQ29udGV4dCB7XG4gIC8qKiBKU0RvYyAqL1xuICB1cGRhdGUoY29udGV4dD86IFNlc3Npb25Db250ZXh0KTogdm9pZDtcblxuICAvKiogSlNEb2MgKi9cbiAgY2xvc2Uoc3RhdHVzPzogU2Vzc2lvblN0YXR1cyk6IHZvaWQ7XG5cbiAgLyoqIEpTRG9jICovXG4gIHRvSlNPTigpOiB7XG4gICAgaW5pdDogYm9vbGVhbjtcbiAgICBzaWQ6IHN0cmluZztcbiAgICBkaWQ/OiBzdHJpbmc7XG4gICAgdGltZXN0YW1wOiBzdHJpbmc7XG4gICAgc3RhcnRlZDogc3RyaW5nO1xuICAgIGR1cmF0aW9uPzogbnVtYmVyO1xuICAgIHN0YXR1czogU2Vzc2lvblN0YXR1cztcbiAgICBlcnJvcnM6IG51bWJlcjtcbiAgICBhdHRycz86IHtcbiAgICAgIHJlbGVhc2U/OiBzdHJpbmc7XG4gICAgICBlbnZpcm9ubWVudD86IHN0cmluZztcbiAgICAgIHVzZXJfYWdlbnQ/OiBzdHJpbmc7XG4gICAgICBpcF9hZGRyZXNzPzogc3RyaW5nO1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdFNlc3Npb24ge1xuICBzdGF0dXM/OiBSZXF1ZXN0U2Vzc2lvblN0YXR1cztcbn1cblxuLyoqXG4gKiBTZXNzaW9uIENvbnRleHRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uQ29udGV4dCB7XG4gIHNpZD86IHN0cmluZztcbiAgZGlkPzogc3RyaW5nO1xuICBpbml0PzogYm9vbGVhbjtcbiAgLy8gc2Vjb25kcyBzaW5jZSB0aGUgVU5JWCBlcG9jaFxuICB0aW1lc3RhbXA/OiBudW1iZXI7XG4gIC8vIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2hcbiAgc3RhcnRlZD86IG51bWJlcjtcbiAgZHVyYXRpb24/OiBudW1iZXI7XG4gIHN0YXR1cz86IFNlc3Npb25TdGF0dXM7XG4gIHJlbGVhc2U/OiBzdHJpbmc7XG4gIGVudmlyb25tZW50Pzogc3RyaW5nO1xuICB1c2VyQWdlbnQ/OiBzdHJpbmc7XG4gIGlwQWRkcmVzcz86IHN0cmluZztcbiAgZXJyb3JzPzogbnVtYmVyO1xuICB1c2VyPzogVXNlciB8IG51bGw7XG4gIGlnbm9yZUR1cmF0aW9uPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBTZXNzaW9uIFN0YXR1c1xuICovXG5leHBvcnQgZW51bSBTZXNzaW9uU3RhdHVzIHtcbiAgLyoqIEpTRG9jICovXG4gIE9rID0gJ29rJyxcbiAgLyoqIEpTRG9jICovXG4gIEV4aXRlZCA9ICdleGl0ZWQnLFxuICAvKiogSlNEb2MgKi9cbiAgQ3Jhc2hlZCA9ICdjcmFzaGVkJyxcbiAgLyoqIEpTRG9jICovXG4gIEFibm9ybWFsID0gJ2Fibm9ybWFsJyxcbn1cblxuZXhwb3J0IGVudW0gUmVxdWVzdFNlc3Npb25TdGF0dXMge1xuICAvKiogSlNEb2MgKi9cbiAgT2sgPSAnb2snLFxuICAvKiogSlNEb2MgKi9cbiAgRXJyb3JlZCA9ICdlcnJvcmVkJyxcbiAgLyoqIEpTRG9jICovXG4gIENyYXNoZWQgPSAnY3Jhc2hlZCcsXG59XG5cbi8qKiBKU0RvYyAqL1xuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uQWdncmVnYXRlcyB7XG4gIGF0dHJzPzoge1xuICAgIGVudmlyb25tZW50Pzogc3RyaW5nO1xuICAgIHJlbGVhc2U/OiBzdHJpbmc7XG4gIH07XG4gIGFnZ3JlZ2F0ZXM6IEFycmF5PEFnZ3JlZ2F0aW9uQ291bnRzPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXNzaW9uRmx1c2hlckxpa2Uge1xuICAvKipcbiAgICogSW5jcmVtZW50cyB0aGUgU2Vzc2lvbiBTdGF0dXMgYnVja2V0IGluIFNlc3Npb25BZ2dyZWdhdGVzIE9iamVjdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBzdGF0dXMgb2YgdGhlIHNlc3Npb25cbiAgICogY2FwdHVyZWRcbiAgICovXG4gIGluY3JlbWVudFNlc3Npb25TdGF0dXNDb3VudCgpOiB2b2lkO1xuXG4gIC8qKiBTdWJtaXRzIHRoZSBhZ2dyZWdhdGVzIHJlcXVlc3QgbW9kZSBzZXNzaW9ucyB0byBTZW50cnkgKi9cbiAgc2VuZFNlc3Npb25BZ2dyZWdhdGVzKHNlc3Npb25BZ2dyZWdhdGVzOiBTZXNzaW9uQWdncmVnYXRlcyk6IHZvaWQ7XG5cbiAgLyoqIEVtcHRpZXMgQWdncmVnYXRlIEJ1Y2tldHMgYW5kIFNlbmRzIHRoZW0gdG8gVHJhbnNwb3J0IEJ1ZmZlciAqL1xuICBmbHVzaCgpOiB2b2lkO1xuXG4gIC8qKiBDbGVhcnMgc2V0SW50ZXJ2YWwgYW5kIGNhbGxzIGZsdXNoICovXG4gIGNsb3NlKCk6IHZvaWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQWdncmVnYXRpb25Db3VudHMge1xuICBzdGFydGVkOiBzdHJpbmc7XG4gIGVycm9yZWQ/OiBudW1iZXI7XG4gIGV4aXRlZD86IG51bWJlcjtcbiAgY3Jhc2hlZD86IG51bWJlcjtcbn1cbiIsICIvKiogSlNEb2MgKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvZXhwb3J0XG5leHBvcnQgZW51bSBTZXZlcml0eSB7XG4gIC8qKiBKU0RvYyAqL1xuICBGYXRhbCA9ICdmYXRhbCcsXG4gIC8qKiBKU0RvYyAqL1xuICBFcnJvciA9ICdlcnJvcicsXG4gIC8qKiBKU0RvYyAqL1xuICBXYXJuaW5nID0gJ3dhcm5pbmcnLFxuICAvKiogSlNEb2MgKi9cbiAgTG9nID0gJ2xvZycsXG4gIC8qKiBKU0RvYyAqL1xuICBJbmZvID0gJ2luZm8nLFxuICAvKiogSlNEb2MgKi9cbiAgRGVidWcgPSAnZGVidWcnLFxuICAvKiogSlNEb2MgKi9cbiAgQ3JpdGljYWwgPSAnY3JpdGljYWwnLFxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZSwgaW1wb3J0L2V4cG9ydFxuZXhwb3J0IG5hbWVzcGFjZSBTZXZlcml0eSB7XG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIHN0cmluZy1iYXNlZCBsZXZlbCBpbnRvIGEge0BsaW5rIFNldmVyaXR5fS5cbiAgICpcbiAgICogQHBhcmFtIGxldmVsIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBTZXZlcml0eVxuICAgKiBAcmV0dXJucyBTZXZlcml0eVxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGZyb21TdHJpbmcobGV2ZWw6IHN0cmluZyk6IFNldmVyaXR5IHtcbiAgICBzd2l0Y2ggKGxldmVsKSB7XG4gICAgICBjYXNlICdkZWJ1Zyc6XG4gICAgICAgIHJldHVybiBTZXZlcml0eS5EZWJ1ZztcbiAgICAgIGNhc2UgJ2luZm8nOlxuICAgICAgICByZXR1cm4gU2V2ZXJpdHkuSW5mbztcbiAgICAgIGNhc2UgJ3dhcm4nOlxuICAgICAgY2FzZSAnd2FybmluZyc6XG4gICAgICAgIHJldHVybiBTZXZlcml0eS5XYXJuaW5nO1xuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICByZXR1cm4gU2V2ZXJpdHkuRXJyb3I7XG4gICAgICBjYXNlICdmYXRhbCc6XG4gICAgICAgIHJldHVybiBTZXZlcml0eS5GYXRhbDtcbiAgICAgIGNhc2UgJ2NyaXRpY2FsJzpcbiAgICAgICAgcmV0dXJuIFNldmVyaXR5LkNyaXRpY2FsO1xuICAgICAgY2FzZSAnbG9nJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBTZXZlcml0eS5Mb2c7XG4gICAgfVxuICB9XG59XG4iLCAiLyoqIFRoZSBzdGF0dXMgb2YgYW4gZXZlbnQuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L2V4cG9ydFxuZXhwb3J0IGVudW0gU3RhdHVzIHtcbiAgLyoqIFRoZSBzdGF0dXMgY291bGQgbm90IGJlIGRldGVybWluZWQuICovXG4gIFVua25vd24gPSAndW5rbm93bicsXG4gIC8qKiBUaGUgZXZlbnQgd2FzIHNraXBwZWQgZHVlIHRvIGNvbmZpZ3VyYXRpb24gb3IgY2FsbGJhY2tzLiAqL1xuICBTa2lwcGVkID0gJ3NraXBwZWQnLFxuICAvKiogVGhlIGV2ZW50IHdhcyBzZW50IHRvIFNlbnRyeSBzdWNjZXNzZnVsbHkuICovXG4gIFN1Y2Nlc3MgPSAnc3VjY2VzcycsXG4gIC8qKiBUaGUgY2xpZW50IGlzIGN1cnJlbnRseSByYXRlIGxpbWl0ZWQgYW5kIHdpbGwgdHJ5IGFnYWluIGxhdGVyLiAqL1xuICBSYXRlTGltaXQgPSAncmF0ZV9saW1pdCcsXG4gIC8qKiBUaGUgZXZlbnQgY291bGQgbm90IGJlIHByb2Nlc3NlZC4gKi9cbiAgSW52YWxpZCA9ICdpbnZhbGlkJyxcbiAgLyoqIEEgc2VydmVyLXNpZGUgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHN1Ym1pc3Npb24uICovXG4gIEZhaWxlZCA9ICdmYWlsZWQnLFxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5hbWVzcGFjZSwgaW1wb3J0L2V4cG9ydFxuZXhwb3J0IG5hbWVzcGFjZSBTdGF0dXMge1xuICAvKipcbiAgICogQ29udmVydHMgYSBIVFRQIHN0YXR1cyBjb2RlIGludG8gYSB7QGxpbmsgU3RhdHVzfS5cbiAgICpcbiAgICogQHBhcmFtIGNvZGUgVGhlIEhUVFAgcmVzcG9uc2Ugc3RhdHVzIGNvZGUuXG4gICAqIEByZXR1cm5zIFRoZSBzZW5kIHN0YXR1cyBvciB7QGxpbmsgU3RhdHVzLlVua25vd259LlxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGZyb21IdHRwQ29kZShjb2RlOiBudW1iZXIpOiBTdGF0dXMge1xuICAgIGlmIChjb2RlID49IDIwMCAmJiBjb2RlIDwgMzAwKSB7XG4gICAgICByZXR1cm4gU3RhdHVzLlN1Y2Nlc3M7XG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPT09IDQyOSkge1xuICAgICAgcmV0dXJuIFN0YXR1cy5SYXRlTGltaXQ7XG4gICAgfVxuXG4gICAgaWYgKGNvZGUgPj0gNDAwICYmIGNvZGUgPCA1MDApIHtcbiAgICAgIHJldHVybiBTdGF0dXMuSW52YWxpZDtcbiAgICB9XG5cbiAgICBpZiAoY29kZSA+PSA1MDApIHtcbiAgICAgIHJldHVybiBTdGF0dXMuRmFpbGVkO1xuICAgIH1cblxuICAgIHJldHVybiBTdGF0dXMuVW5rbm93bjtcbiAgfVxufVxuIiwgImltcG9ydCB7IEV4dHJhY3RlZE5vZGVSZXF1ZXN0RGF0YSwgUHJpbWl0aXZlLCBXb3JrZXJMb2NhdGlvbiB9IGZyb20gJy4vbWlzYyc7XG5pbXBvcnQgeyBTcGFuLCBTcGFuQ29udGV4dCB9IGZyb20gJy4vc3Bhbic7XG5cbi8qKlxuICogSW50ZXJmYWNlIGhvbGRpbmcgVHJhbnNhY3Rpb24tc3BlY2lmaWMgcHJvcGVydGllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uQ29udGV4dCBleHRlbmRzIFNwYW5Db250ZXh0IHtcbiAgLyoqXG4gICAqIEh1bWFuLXJlYWRhYmxlIGlkZW50aWZpZXIgZm9yIHRoZSB0cmFuc2FjdGlvblxuICAgKi9cbiAgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJZiB0cnVlLCBzZXRzIHRoZSBlbmQgdGltZXN0YW1wIG9mIHRoZSB0cmFuc2FjdGlvbiB0byB0aGUgaGlnaGVzdCB0aW1lc3RhbXAgb2YgY2hpbGQgc3BhbnMsIHRyaW1taW5nXG4gICAqIHRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhbnNhY3Rpb24uIFRoaXMgaXMgdXNlZnVsIHRvIGRpc2NhcmQgZXh0cmEgdGltZSBpbiB0aGUgdHJhbnNhY3Rpb24gdGhhdCBpcyBub3RcbiAgICogYWNjb3VudGVkIGZvciBpbiBjaGlsZCBzcGFucywgbGlrZSB3aGF0IGhhcHBlbnMgaW4gdGhlIGlkbGUgdHJhbnNhY3Rpb24gVHJhY2luZyBpbnRlZ3JhdGlvbiwgd2hlcmUgd2UgZmluaXNoIHRoZVxuICAgKiB0cmFuc2FjdGlvbiBhZnRlciBhIGdpdmVuIFwiaWRsZSB0aW1lXCIgYW5kIHdlIGRvbid0IHdhbnQgdGhpcyBcImlkbGUgdGltZVwiIHRvIGJlIHBhcnQgb2YgdGhlIHRyYW5zYWN0aW9uLlxuICAgKi9cbiAgdHJpbUVuZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIElmIHRoaXMgdHJhbnNhY3Rpb24gaGFzIGEgcGFyZW50LCB0aGUgcGFyZW50J3Mgc2FtcGxpbmcgZGVjaXNpb25cbiAgICovXG4gIHBhcmVudFNhbXBsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBNZXRhZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhlIHRyYW5zYWN0aW9uLCBmb3IgaW50ZXJuYWwgU0RLIHVzZS5cbiAgICovXG4gIG1ldGFkYXRhPzogVHJhbnNhY3Rpb25NZXRhZGF0YTtcbn1cblxuLyoqXG4gKiBEYXRhIHB1bGxlZCBmcm9tIGEgYHNlbnRyeS10cmFjZWAgaGVhZGVyXG4gKi9cbmV4cG9ydCB0eXBlIFRyYWNlcGFyZW50RGF0YSA9IFBpY2s8VHJhbnNhY3Rpb25Db250ZXh0LCAndHJhY2VJZCcgfCAncGFyZW50U3BhbklkJyB8ICdwYXJlbnRTYW1wbGVkJz47XG5cbi8qKlxuICogVHJhbnNhY3Rpb24gXCJDbGFzc1wiLCBpbmhlcml0cyBTcGFuIG9ubHkgaGFzIGBzZXROYW1lYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uIGV4dGVuZHMgVHJhbnNhY3Rpb25Db250ZXh0LCBTcGFuIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBzcGFuSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHRyYWNlSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHN0YXJ0VGltZXN0YW1wOiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICB0YWdzOiB7IFtrZXk6IHN0cmluZ106IFByaW1pdGl2ZSB9O1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgZGF0YTogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcblxuICAvKipcbiAgICogTWV0YWRhdGEgYWJvdXQgdGhlIHRyYW5zYWN0aW9uXG4gICAqL1xuICBtZXRhZGF0YTogVHJhbnNhY3Rpb25NZXRhZGF0YTtcblxuICAvKipcbiAgICogU2V0IHRoZSBuYW1lIG9mIHRoZSB0cmFuc2FjdGlvblxuICAgKi9cbiAgc2V0TmFtZShuYW1lOiBzdHJpbmcpOiB2b2lkO1xuXG4gIC8qKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHByb3BlcnRpZXMgYXMgYSBgVHJhbnNhY3Rpb25Db250ZXh0YCAqL1xuICB0b0NvbnRleHQoKTogVHJhbnNhY3Rpb25Db250ZXh0O1xuXG4gIC8qKiBVcGRhdGVzIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHdpdGggYSBuZXcgYFRyYW5zYWN0aW9uQ29udGV4dGAgKi9cbiAgdXBkYXRlV2l0aENvbnRleHQodHJhbnNhY3Rpb25Db250ZXh0OiBUcmFuc2FjdGlvbkNvbnRleHQpOiB0aGlzO1xufVxuXG4vKipcbiAqIENvbnRleHQgZGF0YSBwYXNzZWQgYnkgdGhlIHVzZXIgd2hlbiBzdGFydGluZyBhIHRyYW5zYWN0aW9uLCB0byBiZSB1c2VkIGJ5IHRoZSB0cmFjZXNTYW1wbGVyIG1ldGhvZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDdXN0b21TYW1wbGluZ0NvbnRleHQge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbi8qKlxuICogRGF0YSBwYXNzZWQgdG8gdGhlIGB0cmFjZXNTYW1wbGVyYCBmdW5jdGlvbiwgd2hpY2ggZm9ybXMgdGhlIGJhc2lzIGZvciB3aGF0ZXZlciBkZWNpc2lvbnMgaXQgbWlnaHQgbWFrZS5cbiAqXG4gKiBBZGRzIGRlZmF1bHQgZGF0YSB0byBkYXRhIHByb3ZpZGVkIGJ5IHRoZSB1c2VyLiBTZWUge0BsaW5rIEh1Yi5zdGFydFRyYW5zYWN0aW9ufVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNhbXBsaW5nQ29udGV4dCBleHRlbmRzIEN1c3RvbVNhbXBsaW5nQ29udGV4dCB7XG4gIC8qKlxuICAgKiBDb250ZXh0IGRhdGEgd2l0aCB3aGljaCB0cmFuc2FjdGlvbiBiZWluZyBzYW1wbGVkIHdhcyBjcmVhdGVkXG4gICAqL1xuICB0cmFuc2FjdGlvbkNvbnRleHQ6IFRyYW5zYWN0aW9uQ29udGV4dDtcblxuICAvKipcbiAgICogU2FtcGxpbmcgZGVjaXNpb24gZnJvbSB0aGUgcGFyZW50IHRyYW5zYWN0aW9uLCBpZiBhbnkuXG4gICAqL1xuICBwYXJlbnRTYW1wbGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT2JqZWN0IHJlcHJlc2VudGluZyB0aGUgVVJMIG9mIHRoZSBjdXJyZW50IHBhZ2Ugb3Igd29ya2VyIHNjcmlwdC4gUGFzc2VkIGJ5IGRlZmF1bHQgd2hlbiB1c2luZyB0aGUgYEJyb3dzZXJUcmFjaW5nYFxuICAgKiBpbnRlZ3JhdGlvbi5cbiAgICovXG4gIGxvY2F0aW9uPzogV29ya2VyTG9jYXRpb247XG5cbiAgLyoqXG4gICAqIE9iamVjdCByZXByZXNlbnRpbmcgdGhlIGluY29taW5nIHJlcXVlc3QgdG8gYSBub2RlIHNlcnZlci4gUGFzc2VkIGJ5IGRlZmF1bHQgd2hlbiB1c2luZyB0aGUgVHJhY2luZ0hhbmRsZXIuXG4gICAqL1xuICByZXF1ZXN0PzogRXh0cmFjdGVkTm9kZVJlcXVlc3REYXRhO1xufVxuXG5leHBvcnQgdHlwZSBNZWFzdXJlbWVudHMgPSBSZWNvcmQ8c3RyaW5nLCB7IHZhbHVlOiBudW1iZXIgfT47XG5cbmV4cG9ydCBlbnVtIFRyYW5zYWN0aW9uU2FtcGxpbmdNZXRob2Qge1xuICBFeHBsaWNpdCA9ICdleHBsaWNpdGx5X3NldCcsXG4gIFNhbXBsZXIgPSAnY2xpZW50X3NhbXBsZXInLFxuICBSYXRlID0gJ2NsaWVudF9yYXRlJyxcbiAgSW5oZXJpdGFuY2UgPSAnaW5oZXJpdGFuY2UnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zYWN0aW9uTWV0YWRhdGEge1xuICB0cmFuc2FjdGlvblNhbXBsaW5nPzogeyByYXRlPzogbnVtYmVyOyBtZXRob2Q/OiBzdHJpbmcgfTtcblxuICAvKiogVGhlIHR3byBoYWx2ZXMgKHNlbnRyeSBhbmQgdGhpcmQtcGFydHkpIG9mIGEgdHJhbnNhY3Rpb24ncyB0cmFjZXN0YXRlIGhlYWRlciwgdXNlZCBmb3IgZHluYW1pYyBzYW1wbGluZyAqL1xuICB0cmFjZXN0YXRlPzoge1xuICAgIHNlbnRyeT86IHN0cmluZztcbiAgICB0aGlyZHBhcnR5Pzogc3RyaW5nO1xuICB9O1xuXG4gIC8qKiBGb3IgdHJhbnNhY3Rpb25zIHRyYWNpbmcgc2VydmVyLXNpZGUgcmVxdWVzdCBoYW5kbGluZywgdGhlIHBhdGggb2YgdGhlIHJlcXVlc3QgYmVpbmcgdHJhY2tlZC4gKi9cbiAgcmVxdWVzdFBhdGg/OiBzdHJpbmc7XG59XG4iLCAiaW1wb3J0IHsgRHNuTGlrZSB9IGZyb20gJy4vZHNuJztcbmltcG9ydCB7IEV2ZW50IH0gZnJvbSAnLi9ldmVudCc7XG5pbXBvcnQgeyBTZW50cnlSZXF1ZXN0VHlwZSB9IGZyb20gJy4vcmVxdWVzdCc7XG5pbXBvcnQgeyBSZXNwb25zZSB9IGZyb20gJy4vcmVzcG9uc2UnO1xuaW1wb3J0IHsgU2RrTWV0YWRhdGEgfSBmcm9tICcuL3Nka21ldGFkYXRhJztcbmltcG9ydCB7IFNlc3Npb24sIFNlc3Npb25BZ2dyZWdhdGVzIH0gZnJvbSAnLi9zZXNzaW9uJztcblxuZXhwb3J0IGVudW0gT3V0Y29tZSB7XG4gIEJlZm9yZVNlbmQgPSAnYmVmb3JlX3NlbmQnLFxuICBFdmVudFByb2Nlc3NvciA9ICdldmVudF9wcm9jZXNzb3InLFxuICBOZXR3b3JrRXJyb3IgPSAnbmV0d29ya19lcnJvcicsXG4gIFF1ZXVlT3ZlcmZsb3cgPSAncXVldWVfb3ZlcmZsb3cnLFxuICBSYXRlTGltaXRCYWNrb2ZmID0gJ3JhdGVsaW1pdF9iYWNrb2ZmJyxcbiAgU2FtcGxlUmF0ZSA9ICdzYW1wbGVfcmF0ZScsXG59XG5cbi8qKiBUcmFuc3BvcnQgdXNlZCBzZW5kaW5nIGRhdGEgdG8gU2VudHJ5ICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zcG9ydCB7XG4gIC8qKlxuICAgKiBTZW5kcyB0aGUgZXZlbnQgdG8gdGhlIFN0b3JlIGVuZHBvaW50IGluIFNlbnRyeS5cbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IEV2ZW50IHRoYXQgc2hvdWxkIGJlIHNlbnQgdG8gU2VudHJ5LlxuICAgKi9cbiAgc2VuZEV2ZW50KGV2ZW50OiBFdmVudCk6IFByb21pc2VMaWtlPFJlc3BvbnNlPjtcblxuICAvKipcbiAgICogU2VuZHMgdGhlIHNlc3Npb24gdG8gdGhlIEVudmVsb3BlIGVuZHBvaW50IGluIFNlbnRyeS5cbiAgICpcbiAgICogQHBhcmFtIHNlc3Npb24gU2Vzc2lvbiB0aGF0IHNob3VsZCBiZSBzZW50IHRvIFNlbnRyeSB8IFNlc3Npb24gQWdncmVnYXRlcyB0aGF0IHNob3VsZCBiZSBzZW50IHRvIFNlbnRyeS5cbiAgICovXG4gIHNlbmRTZXNzaW9uPyhzZXNzaW9uOiBTZXNzaW9uIHwgU2Vzc2lvbkFnZ3JlZ2F0ZXMpOiBQcm9taXNlTGlrZTxSZXNwb25zZT47XG5cbiAgLyoqXG4gICAqIFdhaXQgZm9yIGFsbCBldmVudHMgdG8gYmUgc2VudCBvciB0aGUgdGltZW91dCB0byBleHBpcmUsIHdoaWNoZXZlciBjb21lcyBmaXJzdC5cbiAgICpcbiAgICogQHBhcmFtIHRpbWVvdXQgTWF4aW11bSB0aW1lIGluIG1zIHRoZSB0cmFuc3BvcnQgc2hvdWxkIHdhaXQgZm9yIGV2ZW50cyB0byBiZSBmbHVzaGVkLiBPbWl0dGluZyB0aGlzIHBhcmFtZXRlciB3aWxsXG4gICAqICAgY2F1c2UgdGhlIHRyYW5zcG9ydCB0byB3YWl0IHVudGlsIGFsbCBldmVudHMgYXJlIHNlbnQgYmVmb3JlIHJlc29sdmluZyB0aGUgcHJvbWlzZS5cbiAgICogQHJldHVybnMgQSBwcm9taXNlIHRoYXQgd2lsbCByZXNvbHZlIHdpdGggYHRydWVgIGlmIGFsbCBldmVudHMgYXJlIHNlbnQgYmVmb3JlIHRoZSB0aW1lb3V0LCBvciBgZmFsc2VgIGlmIHRoZXJlIGFyZVxuICAgKiBzdGlsbCBldmVudHMgaW4gdGhlIHF1ZXVlIHdoZW4gdGhlIHRpbWVvdXQgaXMgcmVhY2hlZC5cbiAgICovXG4gIGNsb3NlKHRpbWVvdXQ/OiBudW1iZXIpOiBQcm9taXNlTGlrZTxib29sZWFuPjtcblxuICAvKipcbiAgICogSW5jcmVtZW50IHRoZSBjb3VudGVyIGZvciB0aGUgc3BlY2lmaWMgY2xpZW50IG91dGNvbWVcbiAgICovXG4gIHJlY29yZExvc3RFdmVudD8odHlwZTogT3V0Y29tZSwgY2F0ZWdvcnk6IFNlbnRyeVJlcXVlc3RUeXBlKTogdm9pZDtcbn1cblxuLyoqIEpTRG9jICovXG5leHBvcnQgdHlwZSBUcmFuc3BvcnRDbGFzczxUIGV4dGVuZHMgVHJhbnNwb3J0PiA9IG5ldyAob3B0aW9uczogVHJhbnNwb3J0T3B0aW9ucykgPT4gVDtcblxuLyoqIEpTRG9jICovXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zcG9ydE9wdGlvbnMge1xuICAvKiogU2VudHJ5IERTTiAqL1xuICBkc246IERzbkxpa2U7XG4gIC8qKiBEZWZpbmUgY3VzdG9tIGhlYWRlcnMgKi9cbiAgaGVhZGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIC8qKiBTZXQgYSBIVFRQIHByb3h5IHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIG91dGJvdW5kIHJlcXVlc3RzLiAqL1xuICBodHRwUHJveHk/OiBzdHJpbmc7XG4gIC8qKiBTZXQgYSBIVFRQUyBwcm94eSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciBvdXRib3VuZCByZXF1ZXN0cy4gKi9cbiAgaHR0cHNQcm94eT86IHN0cmluZztcbiAgLyoqIEhUVFBTIHByb3h5IGNlcnRpZmljYXRlcyBwYXRoICovXG4gIGNhQ2VydHM/OiBzdHJpbmc7XG4gIC8qKiBGZXRjaCBBUEkgaW5pdCBwYXJhbWV0ZXJzICovXG4gIGZldGNoUGFyYW1ldGVycz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG4gIC8qKiBUaGUgZW52ZWxvcGUgdHVubmVsIHRvIHVzZS4gKi9cbiAgdHVubmVsPzogc3RyaW5nO1xuICAvKiogU2VuZCBTREsgQ2xpZW50IFJlcG9ydHMuIEVuYWJsZWQgYnkgZGVmYXVsdC4gKi9cbiAgc2VuZENsaWVudFJlcG9ydHM/OiBib29sZWFuO1xuICAvKipcbiAgICogU2V0IG9mIG1ldGFkYXRhIGFib3V0IHRoZSBTREsgdGhhdCBjYW4gYmUgaW50ZXJuYWxseSB1c2VkIHRvIGVuaGFuY2UgZW52ZWxvcGVzIGFuZCBldmVudHMsXG4gICAqIGFuZCBwcm92aWRlIGFkZGl0aW9uYWwgZGF0YSBhYm91dCBldmVyeSByZXF1ZXN0LlxuICAgKiAqL1xuICBfbWV0YWRhdGE/OiBTZGtNZXRhZGF0YTtcbn1cbiIsICJleHBvcnQgeyBCcmVhZGNydW1iLCBCcmVhZGNydW1iSGludCB9IGZyb20gJy4vYnJlYWRjcnVtYic7XG5leHBvcnQgeyBDbGllbnQgfSBmcm9tICcuL2NsaWVudCc7XG5leHBvcnQgeyBDb250ZXh0LCBDb250ZXh0cyB9IGZyb20gJy4vY29udGV4dCc7XG5leHBvcnQgeyBEc24sIERzbkNvbXBvbmVudHMsIERzbkxpa2UsIERzblByb3RvY29sIH0gZnJvbSAnLi9kc24nO1xuZXhwb3J0IHsgRGVidWdJbWFnZSwgRGVidWdJbWFnZVR5cGUsIERlYnVnTWV0YSB9IGZyb20gJy4vZGVidWdNZXRhJztcbmV4cG9ydCB7IEV4dGVuZGVkRXJyb3IgfSBmcm9tICcuL2Vycm9yJztcbmV4cG9ydCB7IEV2ZW50LCBFdmVudEhpbnQgfSBmcm9tICcuL2V2ZW50JztcbmV4cG9ydCB7IEV2ZW50UHJvY2Vzc29yIH0gZnJvbSAnLi9ldmVudHByb2Nlc3Nvcic7XG5leHBvcnQgeyBFeGNlcHRpb24gfSBmcm9tICcuL2V4Y2VwdGlvbic7XG5leHBvcnQgeyBFeHRyYSwgRXh0cmFzIH0gZnJvbSAnLi9leHRyYSc7XG5leHBvcnQgeyBIdWIgfSBmcm9tICcuL2h1Yic7XG5leHBvcnQgeyBJbnRlZ3JhdGlvbiwgSW50ZWdyYXRpb25DbGFzcyB9IGZyb20gJy4vaW50ZWdyYXRpb24nO1xuZXhwb3J0IHsgTG9nTGV2ZWwgfSBmcm9tICcuL2xvZ2xldmVsJztcbmV4cG9ydCB7IE1lY2hhbmlzbSB9IGZyb20gJy4vbWVjaGFuaXNtJztcbmV4cG9ydCB7IEV4dHJhY3RlZE5vZGVSZXF1ZXN0RGF0YSwgUHJpbWl0aXZlLCBXb3JrZXJMb2NhdGlvbiB9IGZyb20gJy4vbWlzYyc7XG5leHBvcnQgeyBPcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zJztcbmV4cG9ydCB7IFBhY2thZ2UgfSBmcm9tICcuL3BhY2thZ2UnO1xuZXhwb3J0IHsgUXVlcnlQYXJhbXMsIFJlcXVlc3QsIFNlbnRyeVJlcXVlc3QsIFNlbnRyeVJlcXVlc3RUeXBlIH0gZnJvbSAnLi9yZXF1ZXN0JztcbmV4cG9ydCB7IFJlc3BvbnNlIH0gZnJvbSAnLi9yZXNwb25zZSc7XG5leHBvcnQgeyBSdW50aW1lIH0gZnJvbSAnLi9ydW50aW1lJztcbmV4cG9ydCB7IENhcHR1cmVDb250ZXh0LCBTY29wZSwgU2NvcGVDb250ZXh0IH0gZnJvbSAnLi9zY29wZSc7XG5leHBvcnQgeyBTZGtJbmZvIH0gZnJvbSAnLi9zZGtpbmZvJztcbmV4cG9ydCB7IFNka01ldGFkYXRhIH0gZnJvbSAnLi9zZGttZXRhZGF0YSc7XG5leHBvcnQge1xuICBTZXNzaW9uQWdncmVnYXRlcyxcbiAgQWdncmVnYXRpb25Db3VudHMsXG4gIFNlc3Npb24sXG4gIFNlc3Npb25Db250ZXh0LFxuICBTZXNzaW9uU3RhdHVzLFxuICBSZXF1ZXN0U2Vzc2lvbixcbiAgUmVxdWVzdFNlc3Npb25TdGF0dXMsXG4gIFNlc3Npb25GbHVzaGVyTGlrZSxcbn0gZnJvbSAnLi9zZXNzaW9uJztcbmV4cG9ydCB7IFNldmVyaXR5IH0gZnJvbSAnLi9zZXZlcml0eSc7XG5leHBvcnQgeyBTcGFuLCBTcGFuQ29udGV4dCB9IGZyb20gJy4vc3Bhbic7XG5leHBvcnQgeyBTdGFja0ZyYW1lIH0gZnJvbSAnLi9zdGFja2ZyYW1lJztcbmV4cG9ydCB7IFN0YWNrdHJhY2UgfSBmcm9tICcuL3N0YWNrdHJhY2UnO1xuZXhwb3J0IHsgU3RhdHVzIH0gZnJvbSAnLi9zdGF0dXMnO1xuZXhwb3J0IHtcbiAgQ3VzdG9tU2FtcGxpbmdDb250ZXh0LFxuICBNZWFzdXJlbWVudHMsXG4gIFNhbXBsaW5nQ29udGV4dCxcbiAgVHJhY2VwYXJlbnREYXRhLFxuICBUcmFuc2FjdGlvbixcbiAgVHJhbnNhY3Rpb25Db250ZXh0LFxuICBUcmFuc2FjdGlvbk1ldGFkYXRhLFxuICBUcmFuc2FjdGlvblNhbXBsaW5nTWV0aG9kLFxufSBmcm9tICcuL3RyYW5zYWN0aW9uJztcbmV4cG9ydCB7IFRocmVhZCB9IGZyb20gJy4vdGhyZWFkJztcbmV4cG9ydCB7IE91dGNvbWUsIFRyYW5zcG9ydCwgVHJhbnNwb3J0T3B0aW9ucywgVHJhbnNwb3J0Q2xhc3MgfSBmcm9tICcuL3RyYW5zcG9ydCc7XG5leHBvcnQgeyBVc2VyIH0gZnJvbSAnLi91c2VyJztcbmV4cG9ydCB7IFdyYXBwZWRGdW5jdGlvbiB9IGZyb20gJy4vd3JhcHBlZGZ1bmN0aW9uJztcbiIsICIvKipcbiAqIENvbnN1bWVzIHRoZSBwcm9taXNlIGFuZCBsb2dzIHRoZSBlcnJvciB3aGVuIGl0IHJlamVjdHMuXG4gKiBAcGFyYW0gcHJvbWlzZSBBIHByb21pc2UgdG8gZm9yZ2V0LlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGZ1bmN0aW9uIGZvcmdldChwcm9taXNlOiBQcm9taXNlTGlrZTxhbnk+KTogdm9pZCB7XG4gIHZvaWQgcHJvbWlzZS50aGVuKG51bGwsIGUgPT4ge1xuICAgIC8vIFRPRE86IFVzZSBhIGJldHRlciBsb2dnaW5nIG1lY2hhbmlzbVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgY29uc29sZS5lcnJvcihlKTtcbiAgfSk7XG59XG4iLCAiLyoqXG4gKiBOT1RFOiBJbiBvcmRlciB0byBhdm9pZCBjaXJjdWxhciBkZXBlbmRlbmNpZXMsIGlmIHlvdSBhZGQgYSBmdW5jdGlvbiB0byB0aGlzIG1vZHVsZSBhbmQgaXQgbmVlZHMgdG8gcHJpbnQgc29tZXRoaW5nLFxuICogeW91IG11c3QgZWl0aGVyIGEpIHVzZSBgY29uc29sZS5sb2dgIHJhdGhlciB0aGFuIHRoZSBsb2dnZXIsIG9yIGIpIHB1dCB5b3VyIGZ1bmN0aW9uIGVsc2V3aGVyZS5cbiAqL1xuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIHdlJ3JlIGluIHRoZSBOb2RlLmpzIG9yIEJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBAcmV0dXJucyBBbnN3ZXIgdG8gZ2l2ZW4gcXVlc3Rpb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTm9kZUVudigpOiBib29sZWFuIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgPyBwcm9jZXNzIDogMCkgPT09ICdbb2JqZWN0IHByb2Nlc3NdJztcbn1cblxuLyoqXG4gKiBSZXF1aXJlcyBhIG1vZHVsZSB3aGljaCBpcyBwcm90ZWN0ZWQgYWdhaW5zdCBidW5kbGVyIG1pbmlmaWNhdGlvbi5cbiAqXG4gKiBAcGFyYW0gcmVxdWVzdCBUaGUgbW9kdWxlIHBhdGggdG8gcmVzb2x2ZVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlcywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZXhwb3J0IGZ1bmN0aW9uIGR5bmFtaWNSZXF1aXJlKG1vZDogYW55LCByZXF1ZXN0OiBzdHJpbmcpOiBhbnkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gIHJldHVybiBtb2QucmVxdWlyZShyZXF1ZXN0KTtcbn1cblxuLyoqXG4gKiBIZWxwZXIgZm9yIGR5bmFtaWNhbGx5IGxvYWRpbmcgbW9kdWxlIHRoYXQgc2hvdWxkIHdvcmsgd2l0aCBsaW5rZWQgZGVwZW5kZW5jaWVzLlxuICogVGhlIHByb2JsZW0gaXMgdGhhdCB3ZSBfc2hvdWxkXyBiZSB1c2luZyBgcmVxdWlyZShyZXF1aXJlLnJlc29sdmUobW9kdWxlTmFtZSwgeyBwYXRoczogW2N3ZCgpXSB9KSlgXG4gKiBIb3dldmVyIGl0J3MgX25vdCBwb3NzaWJsZV8gdG8gZG8gdGhhdCB3aXRoIFdlYnBhY2ssIGFzIGl0IGhhcyB0byBrbm93IGFsbCB0aGUgZGVwZW5kZW5jaWVzIGR1cmluZ1xuICogYnVpbGQgdGltZS4gYHJlcXVpcmUucmVzb2x2ZWAgaXMgYWxzbyBub3QgYXZhaWxhYmxlIGluIGFueSBvdGhlciB3YXksIHNvIHdlIGNhbm5vdCBjcmVhdGUsXG4gKiBhIGZha2UgaGVscGVyIGxpa2Ugd2UgZG8gd2l0aCBgZHluYW1pY1JlcXVpcmVgLlxuICpcbiAqIFdlIGFsd2F5cyBwcmVmZXIgdG8gdXNlIGxvY2FsIHBhY2thZ2UsIHRodXMgdGhlIHZhbHVlIGlzIG5vdCByZXR1cm5lZCBlYXJseSBmcm9tIGVhY2ggYHRyeS9jYXRjaGAgYmxvY2suXG4gKiBUaGF0IGlzIHRvIG1pbWljIHRoZSBiZWhhdmlvciBvZiBgcmVxdWlyZS5yZXNvbHZlYCBleGFjdGx5LlxuICpcbiAqIEBwYXJhbSBtb2R1bGVOYW1lIG1vZHVsZSBuYW1lIHRvIHJlcXVpcmVcbiAqIEByZXR1cm5zIHBvc3NpYmx5IHJlcXVpcmVkIG1vZHVsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZE1vZHVsZTxUPihtb2R1bGVOYW1lOiBzdHJpbmcpOiBUIHwgdW5kZWZpbmVkIHtcbiAgbGV0IG1vZDogVCB8IHVuZGVmaW5lZDtcblxuICB0cnkge1xuICAgIG1vZCA9IGR5bmFtaWNSZXF1aXJlKG1vZHVsZSwgbW9kdWxlTmFtZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBuby1lbXB0eVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB7IGN3ZCB9ID0gZHluYW1pY1JlcXVpcmUobW9kdWxlLCAncHJvY2VzcycpO1xuICAgIG1vZCA9IGR5bmFtaWNSZXF1aXJlKG1vZHVsZSwgYCR7Y3dkKCl9L25vZGVfbW9kdWxlcy8ke21vZHVsZU5hbWV9YCkgYXMgVDtcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIG5vLWVtcHR5XG4gIH1cblxuICByZXR1cm4gbW9kO1xufVxuIiwgIi8qKlxuICogTk9URTogSW4gb3JkZXIgdG8gYXZvaWQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLCBpZiB5b3UgYWRkIGEgZnVuY3Rpb24gdG8gdGhpcyBtb2R1bGUgYW5kIGl0IG5lZWRzIHRvIHByaW50IHNvbWV0aGluZyxcbiAqIHlvdSBtdXN0IGVpdGhlciBhKSB1c2UgYGNvbnNvbGUubG9nYCByYXRoZXIgdGhhbiB0aGUgbG9nZ2VyLCBvciBiKSBwdXQgeW91ciBmdW5jdGlvbiBlbHNld2hlcmUuXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuXG5pbXBvcnQgeyBJbnRlZ3JhdGlvbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuXG5pbXBvcnQgeyBpc05vZGVFbnYgfSBmcm9tICcuL25vZGUnO1xuXG4vKiogSW50ZXJuYWwgKi9cbmludGVyZmFjZSBTZW50cnlHbG9iYWwge1xuICBTZW50cnk/OiB7XG4gICAgSW50ZWdyYXRpb25zPzogSW50ZWdyYXRpb25bXTtcbiAgfTtcbiAgU0VOVFJZX0VOVklST05NRU5UPzogc3RyaW5nO1xuICBTRU5UUllfRFNOPzogc3RyaW5nO1xuICBTRU5UUllfUkVMRUFTRT86IHtcbiAgICBpZD86IHN0cmluZztcbiAgfTtcbiAgX19TRU5UUllfXzoge1xuICAgIGdsb2JhbEV2ZW50UHJvY2Vzc29yczogYW55O1xuICAgIGh1YjogYW55O1xuICAgIGxvZ2dlcjogYW55O1xuICB9O1xufVxuXG5jb25zdCBmYWxsYmFja0dsb2JhbE9iamVjdCA9IHt9O1xuXG4vKipcbiAqIFNhZmVseSBnZXQgZ2xvYmFsIHNjb3BlIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIEdsb2JhbCBzY29wZSBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEdsb2JhbE9iamVjdDxUPigpOiBUICYgU2VudHJ5R2xvYmFsIHtcbiAgcmV0dXJuIChpc05vZGVFbnYoKVxuICAgID8gZ2xvYmFsXG4gICAgOiB0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXJlc3RyaWN0ZWQtZ2xvYmFsc1xuICAgID8gd2luZG93IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG4gICAgOiB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCdcbiAgICA/IHNlbGZcbiAgICA6IGZhbGxiYWNrR2xvYmFsT2JqZWN0KSBhcyBUICYgU2VudHJ5R2xvYmFsO1xufVxuIiwgIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXMgKi9cblxuaW1wb3J0IHsgUHJpbWl0aXZlIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBvbmUgb2YgYSBmZXcgRXJyb3Igb3IgRXJyb3ItbGlrZVxuICoge0BsaW5rIGlzRXJyb3J9LlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNFcnJvcih3YXQ6IGFueSk6IGJvb2xlYW4ge1xuICBzd2l0Y2ggKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3YXQpKSB7XG4gICAgY2FzZSAnW29iamVjdCBFcnJvcl0nOlxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgY2FzZSAnW29iamVjdCBFeGNlcHRpb25dJzpcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIGNhc2UgJ1tvYmplY3QgRE9NRXhjZXB0aW9uXSc6XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGlzSW5zdGFuY2VPZih3YXQsIEVycm9yKTtcbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBFcnJvckV2ZW50XG4gKiB7QGxpbmsgaXNFcnJvckV2ZW50fS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRXJyb3JFdmVudCh3YXQ6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdhdCkgPT09ICdbb2JqZWN0IEVycm9yRXZlbnRdJztcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgRE9NRXJyb3JcbiAqIHtAbGluayBpc0RPTUVycm9yfS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzRE9NRXJyb3Iod2F0OiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3YXQpID09PSAnW29iamVjdCBET01FcnJvcl0nO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBET01FeGNlcHRpb25cbiAqIHtAbGluayBpc0RPTUV4Y2VwdGlvbn0uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RPTUV4Y2VwdGlvbih3YXQ6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHdhdCkgPT09ICdbb2JqZWN0IERPTUV4Y2VwdGlvbl0nO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhIHN0cmluZ1xuICoge0BsaW5rIGlzU3RyaW5nfS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3RyaW5nKHdhdDogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2F0KSA9PT0gJ1tvYmplY3QgU3RyaW5nXSc7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyBpcyBhIHByaW1pdGl2ZSAodW5kZWZpbmVkLCBudWxsLCBudW1iZXIsIGJvb2xlYW4sIHN0cmluZywgYmlnaW50LCBzeW1ib2wpXG4gKiB7QGxpbmsgaXNQcmltaXRpdmV9LlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNQcmltaXRpdmUod2F0OiBhbnkpOiB3YXQgaXMgUHJpbWl0aXZlIHtcbiAgcmV0dXJuIHdhdCA9PT0gbnVsbCB8fCAodHlwZW9mIHdhdCAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIHdhdCAhPT0gJ2Z1bmN0aW9uJyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIG9iamVjdCBsaXRlcmFsXG4gKiB7QGxpbmsgaXNQbGFpbk9iamVjdH0uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1BsYWluT2JqZWN0KHdhdDogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwod2F0KSA9PT0gJ1tvYmplY3QgT2JqZWN0XSc7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGFuIEV2ZW50IGluc3RhbmNlXG4gKiB7QGxpbmsgaXNFdmVudH0uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0V2ZW50KHdhdDogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgRXZlbnQgIT09ICd1bmRlZmluZWQnICYmIGlzSW5zdGFuY2VPZih3YXQsIEV2ZW50KTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYW4gRWxlbWVudCBpbnN0YW5jZVxuICoge0BsaW5rIGlzRWxlbWVudH0uXG4gKlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0VsZW1lbnQod2F0OiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBpc0luc3RhbmNlT2Yod2F0LCBFbGVtZW50KTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSdzIHR5cGUgaXMgYW4gcmVnZXhwXG4gKiB7QGxpbmsgaXNSZWdFeHB9LlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHJldHVybnMgQSBib29sZWFuIHJlcHJlc2VudGluZyB0aGUgcmVzdWx0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNSZWdFeHAod2F0OiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh3YXQpID09PSAnW29iamVjdCBSZWdFeHBdJztcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB2YWx1ZSBoYXMgYSB0aGVuIGZ1bmN0aW9uLlxuICogQHBhcmFtIHdhdCBBIHZhbHVlIHRvIGJlIGNoZWNrZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RoZW5hYmxlKHdhdDogYW55KTogYm9vbGVhbiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgcmV0dXJuIEJvb2xlYW4od2F0ICYmIHdhdC50aGVuICYmIHR5cGVvZiB3YXQudGhlbiA9PT0gJ2Z1bmN0aW9uJyk7XG59XG5cbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgZ2l2ZW4gdmFsdWUncyB0eXBlIGlzIGEgU3ludGhldGljRXZlbnRcbiAqIHtAbGluayBpc1N5bnRoZXRpY0V2ZW50fS5cbiAqXG4gKiBAcGFyYW0gd2F0IEEgdmFsdWUgdG8gYmUgY2hlY2tlZC5cbiAqIEByZXR1cm5zIEEgYm9vbGVhbiByZXByZXNlbnRpbmcgdGhlIHJlc3VsdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3ludGhldGljRXZlbnQod2F0OiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzUGxhaW5PYmplY3Qod2F0KSAmJiAnbmF0aXZlRXZlbnQnIGluIHdhdCAmJiAncHJldmVudERlZmF1bHQnIGluIHdhdCAmJiAnc3RvcFByb3BhZ2F0aW9uJyBpbiB3YXQ7XG59XG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGdpdmVuIHZhbHVlJ3MgdHlwZSBpcyBhbiBpbnN0YW5jZSBvZiBwcm92aWRlZCBjb25zdHJ1Y3Rvci5cbiAqIHtAbGluayBpc0luc3RhbmNlT2Z9LlxuICpcbiAqIEBwYXJhbSB3YXQgQSB2YWx1ZSB0byBiZSBjaGVja2VkLlxuICogQHBhcmFtIGJhc2UgQSBjb25zdHJ1Y3RvciB0byBiZSB1c2VkIGluIGEgY2hlY2suXG4gKiBAcmV0dXJucyBBIGJvb2xlYW4gcmVwcmVzZW50aW5nIHRoZSByZXN1bHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0luc3RhbmNlT2Yod2F0OiBhbnksIGJhc2U6IGFueSk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIHJldHVybiB3YXQgaW5zdGFuY2VvZiBiYXNlO1xuICB9IGNhdGNoIChfZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gJy4vZ2xvYmFsJztcbmltcG9ydCB7IGlzU3RyaW5nIH0gZnJvbSAnLi9pcyc7XG5cbi8qKlxuICogR2l2ZW4gYSBjaGlsZCBET00gZWxlbWVudCwgcmV0dXJucyBhIHF1ZXJ5LXNlbGVjdG9yIHN0YXRlbWVudCBkZXNjcmliaW5nIHRoYXRcbiAqIGFuZCBpdHMgYW5jZXN0b3JzXG4gKiBlLmcuIFtIVE1MRWxlbWVudF0gPT4gYm9keSA+IGRpdiA+IGlucHV0I2Zvby5idG5bbmFtZT1iYXpdXG4gKiBAcmV0dXJucyBnZW5lcmF0ZWQgRE9NIHBhdGhcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh0bWxUcmVlQXNTdHJpbmcoZWxlbTogdW5rbm93biwga2V5QXR0cnM/OiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIHR5cGUgU2ltcGxlTm9kZSA9IHtcbiAgICBwYXJlbnROb2RlOiBTaW1wbGVOb2RlO1xuICB9IHwgbnVsbDtcblxuICAvLyB0cnkvY2F0Y2ggYm90aDpcbiAgLy8gLSBhY2Nlc3NpbmcgZXZlbnQudGFyZ2V0IChzZWUgZ2V0c2VudHJ5L3JhdmVuLWpzIzgzOCwgIzc2OClcbiAgLy8gLSBgaHRtbFRyZWVBc1N0cmluZ2AgYmVjYXVzZSBpdCdzIGNvbXBsZXgsIGFuZCBqdXN0IGFjY2Vzc2luZyB0aGUgRE9NIGluY29ycmVjdGx5XG4gIC8vIC0gY2FuIHRocm93IGFuIGV4Y2VwdGlvbiBpbiBzb21lIGNpcmN1bXN0YW5jZXMuXG4gIHRyeSB7XG4gICAgbGV0IGN1cnJlbnRFbGVtID0gZWxlbSBhcyBTaW1wbGVOb2RlO1xuICAgIGNvbnN0IE1BWF9UUkFWRVJTRV9IRUlHSFQgPSA1O1xuICAgIGNvbnN0IE1BWF9PVVRQVVRfTEVOID0gODA7XG4gICAgY29uc3Qgb3V0ID0gW107XG4gICAgbGV0IGhlaWdodCA9IDA7XG4gICAgbGV0IGxlbiA9IDA7XG4gICAgY29uc3Qgc2VwYXJhdG9yID0gJyA+ICc7XG4gICAgY29uc3Qgc2VwTGVuZ3RoID0gc2VwYXJhdG9yLmxlbmd0aDtcbiAgICBsZXQgbmV4dFN0cjtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wbHVzcGx1c1xuICAgIHdoaWxlIChjdXJyZW50RWxlbSAmJiBoZWlnaHQrKyA8IE1BWF9UUkFWRVJTRV9IRUlHSFQpIHtcbiAgICAgIG5leHRTdHIgPSBfaHRtbEVsZW1lbnRBc1N0cmluZyhjdXJyZW50RWxlbSwga2V5QXR0cnMpO1xuICAgICAgLy8gYmFpbCBvdXQgaWZcbiAgICAgIC8vIC0gbmV4dFN0ciBpcyB0aGUgJ2h0bWwnIGVsZW1lbnRcbiAgICAgIC8vIC0gdGhlIGxlbmd0aCBvZiB0aGUgc3RyaW5nIHRoYXQgd291bGQgYmUgY3JlYXRlZCBleGNlZWRzIE1BWF9PVVRQVVRfTEVOXG4gICAgICAvLyAgIChpZ25vcmUgdGhpcyBsaW1pdCBpZiB3ZSBhcmUgb24gdGhlIGZpcnN0IGl0ZXJhdGlvbilcbiAgICAgIGlmIChuZXh0U3RyID09PSAnaHRtbCcgfHwgKGhlaWdodCA+IDEgJiYgbGVuICsgb3V0Lmxlbmd0aCAqIHNlcExlbmd0aCArIG5leHRTdHIubGVuZ3RoID49IE1BWF9PVVRQVVRfTEVOKSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgb3V0LnB1c2gobmV4dFN0cik7XG5cbiAgICAgIGxlbiArPSBuZXh0U3RyLmxlbmd0aDtcbiAgICAgIGN1cnJlbnRFbGVtID0gY3VycmVudEVsZW0ucGFyZW50Tm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gb3V0LnJldmVyc2UoKS5qb2luKHNlcGFyYXRvcik7XG4gIH0gY2F0Y2ggKF9vTykge1xuICAgIHJldHVybiAnPHVua25vd24+JztcbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgYSBzaW1wbGUsIHF1ZXJ5LXNlbGVjdG9yIHJlcHJlc2VudGF0aW9uIG9mIGEgRE9NIGVsZW1lbnRcbiAqIGUuZy4gW0hUTUxFbGVtZW50XSA9PiBpbnB1dCNmb28uYnRuW25hbWU9YmF6XVxuICogQHJldHVybnMgZ2VuZXJhdGVkIERPTSBwYXRoXG4gKi9cbmZ1bmN0aW9uIF9odG1sRWxlbWVudEFzU3RyaW5nKGVsOiB1bmtub3duLCBrZXlBdHRycz86IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgY29uc3QgZWxlbSA9IGVsIGFzIHtcbiAgICB0YWdOYW1lPzogc3RyaW5nO1xuICAgIGlkPzogc3RyaW5nO1xuICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICBnZXRBdHRyaWJ1dGUoa2V5OiBzdHJpbmcpOiBzdHJpbmc7XG4gIH07XG5cbiAgY29uc3Qgb3V0ID0gW107XG4gIGxldCBjbGFzc05hbWU7XG4gIGxldCBjbGFzc2VzO1xuICBsZXQga2V5O1xuICBsZXQgYXR0cjtcbiAgbGV0IGk7XG5cbiAgaWYgKCFlbGVtIHx8ICFlbGVtLnRhZ05hbWUpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBvdXQucHVzaChlbGVtLnRhZ05hbWUudG9Mb3dlckNhc2UoKSk7XG5cbiAgLy8gUGFpcnMgb2YgYXR0cmlidXRlIGtleXMgZGVmaW5lZCBpbiBgc2VyaWFsaXplQXR0cmlidXRlYCBhbmQgdGhlaXIgdmFsdWVzIG9uIGVsZW1lbnQuXG4gIGNvbnN0IGtleUF0dHJQYWlycyA9IGtleUF0dHJzPy5sZW5ndGhcbiAgICA/IGtleUF0dHJzLmZpbHRlcihrZXlBdHRyID0+IGVsZW0uZ2V0QXR0cmlidXRlKGtleUF0dHIpKS5tYXAoa2V5QXR0ciA9PiBba2V5QXR0ciwgZWxlbS5nZXRBdHRyaWJ1dGUoa2V5QXR0cildKVxuICAgIDogbnVsbDtcblxuICBpZiAoa2V5QXR0clBhaXJzPy5sZW5ndGgpIHtcbiAgICBrZXlBdHRyUGFpcnMuZm9yRWFjaChrZXlBdHRyUGFpciA9PiB7XG4gICAgICBvdXQucHVzaChgWyR7a2V5QXR0clBhaXJbMF19PVwiJHtrZXlBdHRyUGFpclsxXX1cIl1gKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICBpZiAoZWxlbS5pZCkge1xuICAgICAgb3V0LnB1c2goYCMke2VsZW0uaWR9YCk7XG4gICAgfVxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICAgIGNsYXNzTmFtZSA9IGVsZW0uY2xhc3NOYW1lO1xuICAgIGlmIChjbGFzc05hbWUgJiYgaXNTdHJpbmcoY2xhc3NOYW1lKSkge1xuICAgICAgY2xhc3NlcyA9IGNsYXNzTmFtZS5zcGxpdCgvXFxzKy8pO1xuICAgICAgZm9yIChpID0gMDsgaSA8IGNsYXNzZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgb3V0LnB1c2goYC4ke2NsYXNzZXNbaV19YCk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IGFsbG93ZWRBdHRycyA9IFsndHlwZScsICduYW1lJywgJ3RpdGxlJywgJ2FsdCddO1xuICBmb3IgKGkgPSAwOyBpIDwgYWxsb3dlZEF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gYWxsb3dlZEF0dHJzW2ldO1xuICAgIGF0dHIgPSBlbGVtLmdldEF0dHJpYnV0ZShrZXkpO1xuICAgIGlmIChhdHRyKSB7XG4gICAgICBvdXQucHVzaChgWyR7a2V5fT1cIiR7YXR0cn1cIl1gKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dC5qb2luKCcnKTtcbn1cblxuLyoqXG4gKiBBIHNhZmUgZm9ybSBvZiBsb2NhdGlvbi5ocmVmXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2NhdGlvbkhyZWYoKTogc3RyaW5nIHtcbiAgY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsT2JqZWN0PFdpbmRvdz4oKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZ2xvYmFsLmRvY3VtZW50LmxvY2F0aW9uLmhyZWY7XG4gIH0gY2F0Y2ggKG9PKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG59XG4iLCAiZXhwb3J0IGNvbnN0IHNldFByb3RvdHlwZU9mID1cbiAgT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ID8gc2V0UHJvdG9PZiA6IG1peGluUHJvcGVydGllcyk7XG5cbi8qKlxuICogc2V0UHJvdG90eXBlT2YgcG9seWZpbGwgdXNpbmcgX19wcm90b19fXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG5mdW5jdGlvbiBzZXRQcm90b09mPFRUYXJnZXQgZXh0ZW5kcyBvYmplY3QsIFRQcm90bz4ob2JqOiBUVGFyZ2V0LCBwcm90bzogVFByb3RvKTogVFRhcmdldCAmIFRQcm90byB7XG4gIC8vIEB0cy1pZ25vcmUgX19wcm90b19fIGRvZXMgbm90IGV4aXN0IG9uIG9ialxuICBvYmouX19wcm90b19fID0gcHJvdG87XG4gIHJldHVybiBvYmogYXMgVFRhcmdldCAmIFRQcm90bztcbn1cblxuLyoqXG4gKiBzZXRQcm90b3R5cGVPZiBwb2x5ZmlsbCB1c2luZyBtaXhpblxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuZnVuY3Rpb24gbWl4aW5Qcm9wZXJ0aWVzPFRUYXJnZXQgZXh0ZW5kcyBvYmplY3QsIFRQcm90bz4ob2JqOiBUVGFyZ2V0LCBwcm90bzogVFByb3RvKTogVFRhcmdldCAmIFRQcm90byB7XG4gIGZvciAoY29uc3QgcHJvcCBpbiBwcm90bykge1xuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmUgdHlwZXNjcmlwdCBjb21wbGFpbnMgYWJvdXQgaW5kZXhpbmcgc28gd2UgcmVtb3ZlXG4gICAgICBvYmpbcHJvcF0gPSBwcm90b1twcm9wXTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb2JqIGFzIFRUYXJnZXQgJiBUUHJvdG87XG59XG4iLCAiaW1wb3J0IHsgc2V0UHJvdG90eXBlT2YgfSBmcm9tICcuL3BvbHlmaWxsJztcblxuLyoqIEFuIGVycm9yIGVtaXR0ZWQgYnkgU2VudHJ5IFNES3MgYW5kIHJlbGF0ZWQgdXRpbGl0aWVzLiAqL1xuZXhwb3J0IGNsYXNzIFNlbnRyeUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKiogRGlzcGxheSBuYW1lIG9mIHRoaXMgZXJyb3IgaW5zdGFuY2UuICovXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmc7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcblxuICAgIHRoaXMubmFtZSA9IG5ldy50YXJnZXQucHJvdG90eXBlLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgc2V0UHJvdG90eXBlT2YodGhpcywgbmV3LnRhcmdldC5wcm90b3R5cGUpO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgRHNuQ29tcG9uZW50cywgRHNuTGlrZSwgRHNuUHJvdG9jb2wgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcblxuaW1wb3J0IHsgU2VudHJ5RXJyb3IgfSBmcm9tICcuL2Vycm9yJztcblxuLyoqIFJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIHRvIHBhcnNlIGEgRHNuLiAqL1xuY29uc3QgRFNOX1JFR0VYID0gL14oPzooXFx3Kyk6KVxcL1xcLyg/OihcXHcrKSg/OjooXFx3KykpP0ApKFtcXHcuLV0rKSg/OjooXFxkKykpP1xcLyguKykvO1xuXG4vKiogRXJyb3IgbWVzc2FnZSAqL1xuY29uc3QgRVJST1JfTUVTU0FHRSA9ICdJbnZhbGlkIERzbic7XG5cbi8qKiBUaGUgU2VudHJ5IERzbiwgaWRlbnRpZnlpbmcgYSBTZW50cnkgaW5zdGFuY2UgYW5kIHByb2plY3QuICovXG5leHBvcnQgY2xhc3MgRHNuIGltcGxlbWVudHMgRHNuQ29tcG9uZW50cyB7XG4gIC8qKiBQcm90b2NvbCB1c2VkIHRvIGNvbm5lY3QgdG8gU2VudHJ5LiAqL1xuICBwdWJsaWMgcHJvdG9jb2whOiBEc25Qcm90b2NvbDtcbiAgLyoqIFB1YmxpYyBhdXRob3JpemF0aW9uIGtleSAoZGVwcmVjYXRlZCwgcmVuYW1lZCB0byBwdWJsaWNLZXkpLiAqL1xuICBwdWJsaWMgdXNlciE6IHN0cmluZztcbiAgLyoqIFB1YmxpYyBhdXRob3JpemF0aW9uIGtleS4gKi9cbiAgcHVibGljIHB1YmxpY0tleSE6IHN0cmluZztcbiAgLyoqIFByaXZhdGUgYXV0aG9yaXphdGlvbiBrZXkgKGRlcHJlY2F0ZWQsIG9wdGlvbmFsKS4gKi9cbiAgcHVibGljIHBhc3MhOiBzdHJpbmc7XG4gIC8qKiBIb3N0bmFtZSBvZiB0aGUgU2VudHJ5IGluc3RhbmNlLiAqL1xuICBwdWJsaWMgaG9zdCE6IHN0cmluZztcbiAgLyoqIFBvcnQgb2YgdGhlIFNlbnRyeSBpbnN0YW5jZS4gKi9cbiAgcHVibGljIHBvcnQhOiBzdHJpbmc7XG4gIC8qKiBQYXRoICovXG4gIHB1YmxpYyBwYXRoITogc3RyaW5nO1xuICAvKiogUHJvamVjdCBJRCAqL1xuICBwdWJsaWMgcHJvamVjdElkITogc3RyaW5nO1xuXG4gIC8qKiBDcmVhdGVzIGEgbmV3IERzbiBjb21wb25lbnQgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKGZyb206IERzbkxpa2UpIHtcbiAgICBpZiAodHlwZW9mIGZyb20gPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9mcm9tU3RyaW5nKGZyb20pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9mcm9tQ29tcG9uZW50cyhmcm9tKTtcbiAgICB9XG5cbiAgICB0aGlzLl92YWxpZGF0ZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiB0aGlzIERzbi5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgdGhpcyB3aWxsIHJlbmRlciB0aGUgcHVibGljIHJlcHJlc2VudGF0aW9uIHdpdGhvdXQgdGhlIHBhc3N3b3JkXG4gICAqIGNvbXBvbmVudC4gVG8gZ2V0IHRoZSBkZXByZWNhdGVkIHByaXZhdGUgcmVwcmVzZW50YXRpb24sIHNldCBgd2l0aFBhc3N3b3JkYFxuICAgKiB0byB0cnVlLlxuICAgKlxuICAgKiBAcGFyYW0gd2l0aFBhc3N3b3JkIFdoZW4gc2V0IHRvIHRydWUsIHRoZSBwYXNzd29yZCB3aWxsIGJlIGluY2x1ZGVkLlxuICAgKi9cbiAgcHVibGljIHRvU3RyaW5nKHdpdGhQYXNzd29yZDogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nIHtcbiAgICBjb25zdCB7IGhvc3QsIHBhdGgsIHBhc3MsIHBvcnQsIHByb2plY3RJZCwgcHJvdG9jb2wsIHB1YmxpY0tleSB9ID0gdGhpcztcbiAgICByZXR1cm4gKFxuICAgICAgYCR7cHJvdG9jb2x9Oi8vJHtwdWJsaWNLZXl9JHt3aXRoUGFzc3dvcmQgJiYgcGFzcyA/IGA6JHtwYXNzfWAgOiAnJ31gICtcbiAgICAgIGBAJHtob3N0fSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ30vJHtwYXRoID8gYCR7cGF0aH0vYCA6IHBhdGh9JHtwcm9qZWN0SWR9YFxuICAgICk7XG4gIH1cblxuICAvKiogUGFyc2VzIGEgc3RyaW5nIGludG8gdGhpcyBEc24uICovXG4gIHByaXZhdGUgX2Zyb21TdHJpbmcoc3RyOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBtYXRjaCA9IERTTl9SRUdFWC5leGVjKHN0cik7XG5cbiAgICBpZiAoIW1hdGNoKSB7XG4gICAgICB0aHJvdyBuZXcgU2VudHJ5RXJyb3IoRVJST1JfTUVTU0FHRSk7XG4gICAgfVxuXG4gICAgY29uc3QgW3Byb3RvY29sLCBwdWJsaWNLZXksIHBhc3MgPSAnJywgaG9zdCwgcG9ydCA9ICcnLCBsYXN0UGF0aF0gPSBtYXRjaC5zbGljZSgxKTtcbiAgICBsZXQgcGF0aCA9ICcnO1xuICAgIGxldCBwcm9qZWN0SWQgPSBsYXN0UGF0aDtcblxuICAgIGNvbnN0IHNwbGl0ID0gcHJvamVjdElkLnNwbGl0KCcvJyk7XG4gICAgaWYgKHNwbGl0Lmxlbmd0aCA+IDEpIHtcbiAgICAgIHBhdGggPSBzcGxpdC5zbGljZSgwLCAtMSkuam9pbignLycpO1xuICAgICAgcHJvamVjdElkID0gc3BsaXQucG9wKCkgYXMgc3RyaW5nO1xuICAgIH1cblxuICAgIGlmIChwcm9qZWN0SWQpIHtcbiAgICAgIGNvbnN0IHByb2plY3RNYXRjaCA9IHByb2plY3RJZC5tYXRjaCgvXlxcZCsvKTtcbiAgICAgIGlmIChwcm9qZWN0TWF0Y2gpIHtcbiAgICAgICAgcHJvamVjdElkID0gcHJvamVjdE1hdGNoWzBdO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2Zyb21Db21wb25lbnRzKHsgaG9zdCwgcGFzcywgcGF0aCwgcHJvamVjdElkLCBwb3J0LCBwcm90b2NvbDogcHJvdG9jb2wgYXMgRHNuUHJvdG9jb2wsIHB1YmxpY0tleSB9KTtcbiAgfVxuXG4gIC8qKiBNYXBzIERzbiBjb21wb25lbnRzIGludG8gdGhpcyBpbnN0YW5jZS4gKi9cbiAgcHJpdmF0ZSBfZnJvbUNvbXBvbmVudHMoY29tcG9uZW50czogRHNuQ29tcG9uZW50cyk6IHZvaWQge1xuICAgIC8vIFRPRE8gdGhpcyBpcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGFuZCBjYW4gYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uXG4gICAgaWYgKCd1c2VyJyBpbiBjb21wb25lbnRzICYmICEoJ3B1YmxpY0tleScgaW4gY29tcG9uZW50cykpIHtcbiAgICAgIGNvbXBvbmVudHMucHVibGljS2V5ID0gY29tcG9uZW50cy51c2VyO1xuICAgIH1cbiAgICB0aGlzLnVzZXIgPSBjb21wb25lbnRzLnB1YmxpY0tleSB8fCAnJztcblxuICAgIHRoaXMucHJvdG9jb2wgPSBjb21wb25lbnRzLnByb3RvY29sO1xuICAgIHRoaXMucHVibGljS2V5ID0gY29tcG9uZW50cy5wdWJsaWNLZXkgfHwgJyc7XG4gICAgdGhpcy5wYXNzID0gY29tcG9uZW50cy5wYXNzIHx8ICcnO1xuICAgIHRoaXMuaG9zdCA9IGNvbXBvbmVudHMuaG9zdDtcbiAgICB0aGlzLnBvcnQgPSBjb21wb25lbnRzLnBvcnQgfHwgJyc7XG4gICAgdGhpcy5wYXRoID0gY29tcG9uZW50cy5wYXRoIHx8ICcnO1xuICAgIHRoaXMucHJvamVjdElkID0gY29tcG9uZW50cy5wcm9qZWN0SWQ7XG4gIH1cblxuICAvKiogVmFsaWRhdGVzIHRoaXMgRHNuIGFuZCB0aHJvd3Mgb24gZXJyb3IuICovXG4gIHByaXZhdGUgX3ZhbGlkYXRlKCk6IHZvaWQge1xuICAgIFsncHJvdG9jb2wnLCAncHVibGljS2V5JywgJ2hvc3QnLCAncHJvamVjdElkJ10uZm9yRWFjaChjb21wb25lbnQgPT4ge1xuICAgICAgaWYgKCF0aGlzW2NvbXBvbmVudCBhcyBrZXlvZiBEc25Db21wb25lbnRzXSkge1xuICAgICAgICB0aHJvdyBuZXcgU2VudHJ5RXJyb3IoYCR7RVJST1JfTUVTU0FHRX06ICR7Y29tcG9uZW50fSBtaXNzaW5nYCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAoIXRoaXMucHJvamVjdElkLm1hdGNoKC9eXFxkKyQvKSkge1xuICAgICAgdGhyb3cgbmV3IFNlbnRyeUVycm9yKGAke0VSUk9SX01FU1NBR0V9OiBJbnZhbGlkIHByb2plY3RJZCAke3RoaXMucHJvamVjdElkfWApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnByb3RvY29sICE9PSAnaHR0cCcgJiYgdGhpcy5wcm90b2NvbCAhPT0gJ2h0dHBzJykge1xuICAgICAgdGhyb3cgbmV3IFNlbnRyeUVycm9yKGAke0VSUk9SX01FU1NBR0V9OiBJbnZhbGlkIHByb3RvY29sICR7dGhpcy5wcm90b2NvbH1gKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wb3J0ICYmIGlzTmFOKHBhcnNlSW50KHRoaXMucG9ydCwgMTApKSkge1xuICAgICAgdGhyb3cgbmV3IFNlbnRyeUVycm9yKGAke0VSUk9SX01FU1NBR0V9OiBJbnZhbGlkIHBvcnQgJHt0aGlzLnBvcnR9YCk7XG4gICAgfVxuICB9XG59XG4iLCAiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgV3JhcHBlZEZ1bmN0aW9uIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5cbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gJy4vZ2xvYmFsJztcblxuLy8gVE9ETzogSW1wbGVtZW50IGRpZmZlcmVudCBsb2dnZXJzIGZvciBkaWZmZXJlbnQgZW52aXJvbm1lbnRzXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWxPYmplY3Q8V2luZG93IHwgTm9kZUpTLkdsb2JhbD4oKTtcblxuLyoqIFByZWZpeCBmb3IgbG9nZ2luZyBzdHJpbmdzICovXG5jb25zdCBQUkVGSVggPSAnU2VudHJ5IExvZ2dlciAnO1xuXG4vKiogSlNEb2MgKi9cbmludGVyZmFjZSBFeHRlbnNpYmxlQ29uc29sZSBleHRlbmRzIENvbnNvbGUge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG59XG5cbi8qKlxuICogVGVtcG9yYXJpbHkgdW53cmFwIGBjb25zb2xlLmxvZ2AgYW5kIGZyaWVuZHMgaW4gb3JkZXIgdG8gcGVyZm9ybSB0aGUgZ2l2ZW4gY2FsbGJhY2sgdXNpbmcgdGhlIG9yaWdpbmFsIG1ldGhvZHMuXG4gKiBSZXN0b3JlcyB3cmFwcGluZyBhZnRlciB0aGUgY2FsbGJhY2sgY29tcGxldGVzLlxuICpcbiAqIEBwYXJhbSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdG8gcnVuIGFnYWluc3QgdGhlIG9yaWdpbmFsIGBjb25zb2xlYCBtZXNzYWdlc1xuICogQHJldHVybnMgVGhlIHJlc3VsdHMgb2YgdGhlIGNhbGxiYWNrXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25zb2xlU2FuZGJveChjYWxsYmFjazogKCkgPT4gYW55KTogYW55IHtcbiAgY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsT2JqZWN0PFdpbmRvdz4oKTtcbiAgY29uc3QgbGV2ZWxzID0gWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InLCAnbG9nJywgJ2Fzc2VydCddO1xuXG4gIGlmICghKCdjb25zb2xlJyBpbiBnbG9iYWwpKSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKCk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gIGNvbnN0IG9yaWdpbmFsQ29uc29sZSA9IChnbG9iYWwgYXMgYW55KS5jb25zb2xlIGFzIEV4dGVuc2libGVDb25zb2xlO1xuICBjb25zdCB3cmFwcGVkTGV2ZWxzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG5cbiAgLy8gUmVzdG9yZSBhbGwgd3JhcHBlZCBjb25zb2xlIG1ldGhvZHNcbiAgbGV2ZWxzLmZvckVhY2gobGV2ZWwgPT4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICBpZiAobGV2ZWwgaW4gKGdsb2JhbCBhcyBhbnkpLmNvbnNvbGUgJiYgKG9yaWdpbmFsQ29uc29sZVtsZXZlbF0gYXMgV3JhcHBlZEZ1bmN0aW9uKS5fX3NlbnRyeV9vcmlnaW5hbF9fKSB7XG4gICAgICB3cmFwcGVkTGV2ZWxzW2xldmVsXSA9IG9yaWdpbmFsQ29uc29sZVtsZXZlbF0gYXMgV3JhcHBlZEZ1bmN0aW9uO1xuICAgICAgb3JpZ2luYWxDb25zb2xlW2xldmVsXSA9IChvcmlnaW5hbENvbnNvbGVbbGV2ZWxdIGFzIFdyYXBwZWRGdW5jdGlvbikuX19zZW50cnlfb3JpZ2luYWxfXztcbiAgICB9XG4gIH0pO1xuXG4gIC8vIFBlcmZvcm0gY2FsbGJhY2sgbWFuaXB1bGF0aW9uc1xuICBjb25zdCByZXN1bHQgPSBjYWxsYmFjaygpO1xuXG4gIC8vIFJldmVydCByZXN0b3JhdGlvbiB0byB3cmFwcGVkIHN0YXRlXG4gIE9iamVjdC5rZXlzKHdyYXBwZWRMZXZlbHMpLmZvckVhY2gobGV2ZWwgPT4ge1xuICAgIG9yaWdpbmFsQ29uc29sZVtsZXZlbF0gPSB3cmFwcGVkTGV2ZWxzW2xldmVsXTtcbiAgfSk7XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLyoqIEpTRG9jICovXG5jbGFzcyBMb2dnZXIge1xuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSBfZW5hYmxlZDogYm9vbGVhbjtcblxuICAvKiogSlNEb2MgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2VuYWJsZWQgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwdWJsaWMgZGlzYWJsZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9lbmFibGVkID0gZmFsc2U7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHVibGljIGVuYWJsZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9lbmFibGVkID0gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwdWJsaWMgbG9nKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9lbmFibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnNvbGVTYW5kYm94KCgpID0+IHtcbiAgICAgIGdsb2JhbC5jb25zb2xlLmxvZyhgJHtQUkVGSVh9W0xvZ106ICR7YXJncy5qb2luKCcgJyl9YCk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHVibGljIHdhcm4oLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2VuYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc29sZVNhbmRib3goKCkgPT4ge1xuICAgICAgZ2xvYmFsLmNvbnNvbGUud2FybihgJHtQUkVGSVh9W1dhcm5dOiAke2FyZ3Muam9pbignICcpfWApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHB1YmxpYyBlcnJvciguLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fZW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zb2xlU2FuZGJveCgoKSA9PiB7XG4gICAgICBnbG9iYWwuY29uc29sZS5lcnJvcihgJHtQUkVGSVh9W0Vycm9yXTogJHthcmdzLmpvaW4oJyAnKX1gKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vLyBFbnN1cmUgd2Ugb25seSBoYXZlIGEgc2luZ2xlIGxvZ2dlciBpbnN0YW5jZSwgZXZlbiBpZiBtdWx0aXBsZSB2ZXJzaW9ucyBvZiBAc2VudHJ5L3V0aWxzIGFyZSBiZWluZyB1c2VkXG5nbG9iYWwuX19TRU5UUllfXyA9IGdsb2JhbC5fX1NFTlRSWV9fIHx8IHt9O1xuY29uc3QgbG9nZ2VyID0gKGdsb2JhbC5fX1NFTlRSWV9fLmxvZ2dlciBhcyBMb2dnZXIpIHx8IChnbG9iYWwuX19TRU5UUllfXy5sb2dnZXIgPSBuZXcgTG9nZ2VyKCkpO1xuXG5leHBvcnQgeyBsb2dnZXIgfTtcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXMgKi9cbi8qKlxuICogTWVtbyBjbGFzcyB1c2VkIGZvciBkZWN5Y2xlIGpzb24gb2JqZWN0cy4gVXNlcyBXZWFrU2V0IGlmIGF2YWlsYWJsZSBvdGhlcndpc2UgYXJyYXkuXG4gKi9cbmV4cG9ydCBjbGFzcyBNZW1vIHtcbiAgLyoqIERldGVybWluZXMgaWYgV2Vha1NldCBpcyBhdmFpbGFibGUgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfaGFzV2Vha1NldDogYm9vbGVhbjtcbiAgLyoqIEVpdGhlciBXZWFrU2V0IG9yIEFycmF5ICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2lubmVyOiBhbnk7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2hhc1dlYWtTZXQgPSB0eXBlb2YgV2Vha1NldCA9PT0gJ2Z1bmN0aW9uJztcbiAgICB0aGlzLl9pbm5lciA9IHRoaXMuX2hhc1dlYWtTZXQgPyBuZXcgV2Vha1NldCgpIDogW107XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBvYmogdG8gcmVtZW1iZXIuXG4gICAqIEBwYXJhbSBvYmogT2JqZWN0IHRvIHJlbWVtYmVyXG4gICAqL1xuICBwdWJsaWMgbWVtb2l6ZShvYmo6IGFueSk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLl9oYXNXZWFrU2V0KSB7XG4gICAgICBpZiAodGhpcy5faW5uZXIuaGFzKG9iaikpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICB0aGlzLl9pbm5lci5hZGQob2JqKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9wcmVmZXItZm9yLW9mXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9pbm5lci5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzLl9pbm5lcltpXTtcbiAgICAgIGlmICh2YWx1ZSA9PT0gb2JqKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9pbm5lci5wdXNoKG9iaik7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgb2JqZWN0IGZyb20gaW50ZXJuYWwgc3RvcmFnZS5cbiAgICogQHBhcmFtIG9iaiBPYmplY3QgdG8gZm9yZ2V0XG4gICAqL1xuICBwdWJsaWMgdW5tZW1vaXplKG9iajogYW55KTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX2hhc1dlYWtTZXQpIHtcbiAgICAgIHRoaXMuX2lubmVyLmRlbGV0ZShvYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX2lubmVyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0aGlzLl9pbm5lcltpXSA9PT0gb2JqKSB7XG4gICAgICAgICAgdGhpcy5faW5uZXIuc3BsaWNlKGksIDEpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iLCAiY29uc3QgZGVmYXVsdEZ1bmN0aW9uTmFtZSA9ICc8YW5vbnltb3VzPic7XG5cbi8qKlxuICogU2FmZWx5IGV4dHJhY3QgZnVuY3Rpb24gbmFtZSBmcm9tIGl0c2VsZlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RnVuY3Rpb25OYW1lKGZuOiB1bmtub3duKTogc3RyaW5nIHtcbiAgdHJ5IHtcbiAgICBpZiAoIWZuIHx8IHR5cGVvZiBmbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIGRlZmF1bHRGdW5jdGlvbk5hbWU7XG4gICAgfVxuICAgIHJldHVybiBmbi5uYW1lIHx8IGRlZmF1bHRGdW5jdGlvbk5hbWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBKdXN0IGFjY2Vzc2luZyBjdXN0b20gcHJvcHMgaW4gc29tZSBTZWxlbml1bSBlbnZpcm9ubWVudHNcbiAgICAvLyBjYW4gY2F1c2UgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXhjZXB0aW9uIChzZWUgcmF2ZW4tanMjNDk1KS5cbiAgICByZXR1cm4gZGVmYXVsdEZ1bmN0aW9uTmFtZTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGlzUmVnRXhwLCBpc1N0cmluZyB9IGZyb20gJy4vaXMnO1xuXG4vKipcbiAqIFRydW5jYXRlcyBnaXZlbiBzdHJpbmcgdG8gdGhlIG1heGltdW0gY2hhcmFjdGVycyBjb3VudFxuICpcbiAqIEBwYXJhbSBzdHIgQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgc2VyaWFsaXphYmxlIHZhbHVlc1xuICogQHBhcmFtIG1heCBNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRydW5jYXRlZCBzdHJpbmcgKDAgPSB1bmxpbWl0ZWQpXG4gKiBAcmV0dXJucyBzdHJpbmcgRW5jb2RlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdHJ1bmNhdGUoc3RyOiBzdHJpbmcsIG1heDogbnVtYmVyID0gMCk6IHN0cmluZyB7XG4gIGlmICh0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJyB8fCBtYXggPT09IDApIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHJldHVybiBzdHIubGVuZ3RoIDw9IG1heCA/IHN0ciA6IGAke3N0ci5zdWJzdHIoMCwgbWF4KX0uLi5gO1xufVxuXG4vKipcbiAqIFRoaXMgaXMgYmFzaWNhbGx5IGp1c3QgYHRyaW1fbGluZWAgZnJvbVxuICogaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnkvYmxvYi9tYXN0ZXIvc3JjL3NlbnRyeS9sYW5nL2phdmFzY3JpcHQvcHJvY2Vzc29yLnB5I0w2N1xuICpcbiAqIEBwYXJhbSBzdHIgQW4gb2JqZWN0IHRoYXQgY29udGFpbnMgc2VyaWFsaXphYmxlIHZhbHVlc1xuICogQHBhcmFtIG1heCBNYXhpbXVtIG51bWJlciBvZiBjaGFyYWN0ZXJzIGluIHRydW5jYXRlZCBzdHJpbmdcbiAqIEByZXR1cm5zIHN0cmluZyBFbmNvZGVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzbmlwTGluZShsaW5lOiBzdHJpbmcsIGNvbG5vOiBudW1iZXIpOiBzdHJpbmcge1xuICBsZXQgbmV3TGluZSA9IGxpbmU7XG4gIGNvbnN0IGxsID0gbmV3TGluZS5sZW5ndGg7XG4gIGlmIChsbCA8PSAxNTApIHtcbiAgICByZXR1cm4gbmV3TGluZTtcbiAgfVxuICBpZiAoY29sbm8gPiBsbCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgIGNvbG5vID0gbGw7XG4gIH1cblxuICBsZXQgc3RhcnQgPSBNYXRoLm1heChjb2xubyAtIDYwLCAwKTtcbiAgaWYgKHN0YXJ0IDwgNSkge1xuICAgIHN0YXJ0ID0gMDtcbiAgfVxuXG4gIGxldCBlbmQgPSBNYXRoLm1pbihzdGFydCArIDE0MCwgbGwpO1xuICBpZiAoZW5kID4gbGwgLSA1KSB7XG4gICAgZW5kID0gbGw7XG4gIH1cbiAgaWYgKGVuZCA9PT0gbGwpIHtcbiAgICBzdGFydCA9IE1hdGgubWF4KGVuZCAtIDE0MCwgMCk7XG4gIH1cblxuICBuZXdMaW5lID0gbmV3TGluZS5zbGljZShzdGFydCwgZW5kKTtcbiAgaWYgKHN0YXJ0ID4gMCkge1xuICAgIG5ld0xpbmUgPSBgJ3tzbmlwfSAke25ld0xpbmV9YDtcbiAgfVxuICBpZiAoZW5kIDwgbGwpIHtcbiAgICBuZXdMaW5lICs9ICcge3NuaXB9JztcbiAgfVxuXG4gIHJldHVybiBuZXdMaW5lO1xufVxuXG4vKipcbiAqIEpvaW4gdmFsdWVzIGluIGFycmF5XG4gKiBAcGFyYW0gaW5wdXQgYXJyYXkgb2YgdmFsdWVzIHRvIGJlIGpvaW5lZCB0b2dldGhlclxuICogQHBhcmFtIGRlbGltaXRlciBzdHJpbmcgdG8gYmUgcGxhY2VkIGluLWJldHdlZW4gdmFsdWVzXG4gKiBAcmV0dXJucyBKb2luZWQgdmFsdWVzXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5leHBvcnQgZnVuY3Rpb24gc2FmZUpvaW4oaW5wdXQ6IGFueVtdLCBkZWxpbWl0ZXI/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIUFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3Qgb3V0cHV0ID0gW107XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLWZvci1vZlxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgdmFsdWUgPSBpbnB1dFtpXTtcbiAgICB0cnkge1xuICAgICAgb3V0cHV0LnB1c2goU3RyaW5nKHZhbHVlKSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgb3V0cHV0LnB1c2goJ1t2YWx1ZSBjYW5ub3QgYmUgc2VyaWFsaXplZF0nKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3V0cHV0LmpvaW4oZGVsaW1pdGVyKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIHZhbHVlIG1hdGNoZXMgYSByZWdleCBvciBpbmNsdWRlcyB0aGUgc3RyaW5nXG4gKiBAcGFyYW0gdmFsdWUgVGhlIHN0cmluZyB2YWx1ZSB0byBiZSBjaGVja2VkIGFnYWluc3RcbiAqIEBwYXJhbSBwYXR0ZXJuIEVpdGhlciBhIHJlZ2V4IG9yIGEgc3RyaW5nIHRoYXQgbXVzdCBiZSBjb250YWluZWQgaW4gdmFsdWVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzTWF0Y2hpbmdQYXR0ZXJuKHZhbHVlOiBzdHJpbmcsIHBhdHRlcm46IFJlZ0V4cCB8IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoIWlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmIChpc1JlZ0V4cChwYXR0ZXJuKSkge1xuICAgIHJldHVybiAocGF0dGVybiBhcyBSZWdFeHApLnRlc3QodmFsdWUpO1xuICB9XG4gIGlmICh0eXBlb2YgcGF0dGVybiA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdmFsdWUuaW5kZXhPZihwYXR0ZXJuKSAhPT0gLTE7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG4vKipcbiAqIEdpdmVuIGEgc3RyaW5nLCBlc2NhcGUgY2hhcmFjdGVycyB3aGljaCBoYXZlIG1lYW5pbmcgaW4gdGhlIHJlZ2V4IGdyYW1tYXIsIHN1Y2ggdGhhdCB0aGUgcmVzdWx0IGlzIHNhZmUgdG8gZmVlZCB0b1xuICogYG5ldyBSZWdFeHAoKWAuXG4gKlxuICogQmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9lc2NhcGUtc3RyaW5nLXJlZ2V4cC4gVmVuZG9yZWQgdG8gYSkgcmVkdWNlIHRoZSBzaXplIGJ5IHNraXBwaW5nIHRoZSBydW50aW1lXG4gKiB0eXBlLWNoZWNraW5nLCBhbmQgYikgZW5zdXJlIGl0IGdldHMgZG93bi1jb21waWxlZCBmb3Igb2xkIHZlcnNpb25zIG9mIE5vZGUgKHRoZSBwdWJsaXNoZWQgcGFja2FnZSBvbmx5IHN1cHBvcnRzIE5vZGVcbiAqIDEyKykuXG4gKlxuICogQHBhcmFtIHJlZ2V4U3RyaW5nIFRoZSBzdHJpbmcgdG8gZXNjYXBlXG4gKiBAcmV0dXJucyBBbiB2ZXJzaW9uIG9mIHRoZSBzdHJpbmcgd2l0aCBhbGwgc3BlY2lhbCByZWdleCBjaGFyYWN0ZXJzIGVzY2FwZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZVN0cmluZ0ZvclJlZ2V4KHJlZ2V4U3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBlc2NhcGUgdGhlIGh5cGhlbiBzZXBhcmF0ZWx5IHNvIHdlIGNhbiBhbHNvIHJlcGxhY2UgaXQgd2l0aCBhIHVuaWNvZGUgbGl0ZXJhbCBoeXBoZW4sIHRvIGF2b2lkIHRoZSBwcm9ibGVtc1xuICAvLyBkaXNjdXNzZWQgaW4gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9lc2NhcGUtc3RyaW5nLXJlZ2V4cC9pc3N1ZXMvMjAuXG4gIHJldHVybiByZWdleFN0cmluZy5yZXBsYWNlKC9bfFxcXFx7fSgpW1xcXV4kKyo/Ll0vZywgJ1xcXFwkJicpLnJlcGxhY2UoLy0vZywgJ1xcXFx4MmQnKTtcbn1cbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGluZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IEV4dGVuZGVkRXJyb3IsIFdyYXBwZWRGdW5jdGlvbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuXG5pbXBvcnQgeyBodG1sVHJlZUFzU3RyaW5nIH0gZnJvbSAnLi9icm93c2VyJztcbmltcG9ydCB7IGlzRWxlbWVudCwgaXNFcnJvciwgaXNFdmVudCwgaXNJbnN0YW5jZU9mLCBpc1BsYWluT2JqZWN0LCBpc1ByaW1pdGl2ZSwgaXNTeW50aGV0aWNFdmVudCB9IGZyb20gJy4vaXMnO1xuaW1wb3J0IHsgTWVtbyB9IGZyb20gJy4vbWVtbyc7XG5pbXBvcnQgeyBnZXRGdW5jdGlvbk5hbWUgfSBmcm9tICcuL3N0YWNrdHJhY2UnO1xuaW1wb3J0IHsgdHJ1bmNhdGUgfSBmcm9tICcuL3N0cmluZyc7XG5cbi8qKlxuICogUmVwbGFjZSBhIG1ldGhvZCBpbiBhbiBvYmplY3Qgd2l0aCBhIHdyYXBwZWQgdmVyc2lvbiBvZiBpdHNlbGYuXG4gKlxuICogQHBhcmFtIHNvdXJjZSBBbiBvYmplY3QgdGhhdCBjb250YWlucyBhIG1ldGhvZCB0byBiZSB3cmFwcGVkLlxuICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIG1ldGhvZCB0byBiZSB3cmFwcGVkLlxuICogQHBhcmFtIHJlcGxhY2VtZW50RmFjdG9yeSBBIGhpZ2hlci1vcmRlciBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBnaXZlbiBtZXRob2QgYW5kIHJldHVybnMgYVxuICogd3JhcHBlZCB2ZXJzaW9uLiBOb3RlOiBUaGUgZnVuY3Rpb24gcmV0dXJuZWQgYnkgYHJlcGxhY2VtZW50RmFjdG9yeWAgbmVlZHMgdG8gYmUgYSBub24tYXJyb3cgZnVuY3Rpb24sIGluIG9yZGVyIHRvXG4gKiBwcmVzZXJ2ZSB0aGUgY29ycmVjdCB2YWx1ZSBvZiBgdGhpc2AsIGFuZCB0aGUgb3JpZ2luYWwgbWV0aG9kIG11c3QgYmUgY2FsbGVkIHVzaW5nIGBvcmlnTWV0aG9kLmNhbGwodGhpcywgPG90aGVyXG4gKiBhcmdzPilgIG9yIGBvcmlnTWV0aG9kLmFwcGx5KHRoaXMsIFs8b3RoZXIgYXJncz5dKWAgKHJhdGhlciB0aGFuIGJlaW5nIGNhbGxlZCBkaXJlY3RseSksIGFnYWluIHRvIHByZXNlcnZlIGB0aGlzYC5cbiAqIEByZXR1cm5zIHZvaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbGwoc291cmNlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBuYW1lOiBzdHJpbmcsIHJlcGxhY2VtZW50RmFjdG9yeTogKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpOiB2b2lkIHtcbiAgaWYgKCEobmFtZSBpbiBzb3VyY2UpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3Qgb3JpZ2luYWwgPSBzb3VyY2VbbmFtZV0gYXMgKCkgPT4gYW55O1xuICBjb25zdCB3cmFwcGVkID0gcmVwbGFjZW1lbnRGYWN0b3J5KG9yaWdpbmFsKSBhcyBXcmFwcGVkRnVuY3Rpb247XG5cbiAgLy8gTWFrZSBzdXJlIGl0J3MgYSBmdW5jdGlvbiBmaXJzdCwgYXMgd2UgbmVlZCB0byBhdHRhY2ggYW4gZW1wdHkgcHJvdG90eXBlIGZvciBgZGVmaW5lUHJvcGVydGllc2AgdG8gd29ya1xuICAvLyBvdGhlcndpc2UgaXQnbGwgdGhyb3cgXCJUeXBlRXJyb3I6IE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzIGNhbGxlZCBvbiBub24tb2JqZWN0XCJcbiAgaWYgKHR5cGVvZiB3cmFwcGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdHJ5IHtcbiAgICAgIHdyYXBwZWQucHJvdG90eXBlID0gd3JhcHBlZC5wcm90b3R5cGUgfHwge307XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyh3cmFwcGVkLCB7XG4gICAgICAgIF9fc2VudHJ5X29yaWdpbmFsX186IHtcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgICB2YWx1ZTogb3JpZ2luYWwsXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChfT28pIHtcbiAgICAgIC8vIFRoaXMgY2FuIHRocm93IGlmIG11bHRpcGxlIGZpbGwgaGFwcGVucyBvbiBhIGdsb2JhbCBvYmplY3QgbGlrZSBYTUxIdHRwUmVxdWVzdFxuICAgICAgLy8gRml4ZXMgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9pc3N1ZXMvMjA0M1xuICAgIH1cbiAgfVxuXG4gIHNvdXJjZVtuYW1lXSA9IHdyYXBwZWQ7XG59XG5cbi8qKlxuICogRW5jb2RlcyBnaXZlbiBvYmplY3QgaW50byB1cmwtZnJpZW5kbHkgZm9ybWF0XG4gKlxuICogQHBhcmFtIG9iamVjdCBBbiBvYmplY3QgdGhhdCBjb250YWlucyBzZXJpYWxpemFibGUgdmFsdWVzXG4gKiBAcmV0dXJucyBzdHJpbmcgRW5jb2RlZFxuICovXG5leHBvcnQgZnVuY3Rpb24gdXJsRW5jb2RlKG9iamVjdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSk6IHN0cmluZyB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpXG4gICAgLm1hcChrZXkgPT4gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KG9iamVjdFtrZXldKX1gKVxuICAgIC5qb2luKCcmJyk7XG59XG5cbi8qKlxuICogVHJhbnNmb3JtcyBhbnkgb2JqZWN0IGludG8gYW4gb2JqZWN0IGxpdGVyYWwgd2l0aCBhbGwgaXRzIGF0dHJpYnV0ZXNcbiAqIGF0dGFjaGVkIHRvIGl0LlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBJbml0aWFsIHNvdXJjZSB0aGF0IHdlIGhhdmUgdG8gdHJhbnNmb3JtIGluIG9yZGVyIGZvciBpdCB0byBiZSB1c2FibGUgYnkgdGhlIHNlcmlhbGl6ZXJcbiAqL1xuZnVuY3Rpb24gZ2V0V2Fsa1NvdXJjZShcbiAgdmFsdWU6IGFueSxcbik6IHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufSB7XG4gIGlmIChpc0Vycm9yKHZhbHVlKSkge1xuICAgIGNvbnN0IGVycm9yID0gdmFsdWUgYXMgRXh0ZW5kZWRFcnJvcjtcbiAgICBjb25zdCBlcnI6IHtcbiAgICAgIFtrZXk6IHN0cmluZ106IGFueTtcbiAgICAgIHN0YWNrOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICBtZXNzYWdlOiBzdHJpbmc7XG4gICAgICBuYW1lOiBzdHJpbmc7XG4gICAgfSA9IHtcbiAgICAgIG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsXG4gICAgICBuYW1lOiBlcnJvci5uYW1lLFxuICAgICAgc3RhY2s6IGVycm9yLnN0YWNrLFxuICAgIH07XG5cbiAgICBmb3IgKGNvbnN0IGkgaW4gZXJyb3IpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZXJyb3IsIGkpKSB7XG4gICAgICAgIGVycltpXSA9IGVycm9yW2ldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBlcnI7XG4gIH1cblxuICBpZiAoaXNFdmVudCh2YWx1ZSkpIHtcbiAgICAvKipcbiAgICAgKiBFdmVudC1saWtlIGludGVyZmFjZSB0aGF0J3MgdXNhYmxlIGluIGJyb3dzZXIgYW5kIG5vZGVcbiAgICAgKi9cbiAgICBpbnRlcmZhY2UgU2ltcGxlRXZlbnQge1xuICAgICAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbiAgICAgIHR5cGU6IHN0cmluZztcbiAgICAgIHRhcmdldD86IHVua25vd247XG4gICAgICBjdXJyZW50VGFyZ2V0PzogdW5rbm93bjtcbiAgICB9XG5cbiAgICBjb25zdCBldmVudCA9IHZhbHVlIGFzIFNpbXBsZUV2ZW50O1xuXG4gICAgY29uc3Qgc291cmNlOiB7XG4gICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgfSA9IHt9O1xuXG4gICAgLy8gQWNjZXNzaW5nIGV2ZW50IGF0dHJpYnV0ZXMgY2FuIHRocm93IChzZWUgaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9pc3N1ZXMvNzY4IGFuZFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzgzOCksIGJ1dCBhY2Nlc3NpbmcgYHR5cGVgIGhhc24ndCBiZWVuIHdyYXBwZWQgaW4gYVxuICAgIC8vIHRyeS1jYXRjaCBpbiBhdCBsZWFzdCB0d28geWVhcnMgYW5kIG5vIG9uZSdzIGNvbXBsYWluZWQsIHNvIHRoYXQncyBsaWtlbHkgbm90IGFuIGlzc3VlIGFueW1vcmVcbiAgICBzb3VyY2UudHlwZSA9IGV2ZW50LnR5cGU7XG5cbiAgICB0cnkge1xuICAgICAgc291cmNlLnRhcmdldCA9IGlzRWxlbWVudChldmVudC50YXJnZXQpXG4gICAgICAgID8gaHRtbFRyZWVBc1N0cmluZyhldmVudC50YXJnZXQpXG4gICAgICAgIDogT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGV2ZW50LnRhcmdldCk7XG4gICAgfSBjYXRjaCAoX29PKSB7XG4gICAgICBzb3VyY2UudGFyZ2V0ID0gJzx1bmtub3duPic7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHNvdXJjZS5jdXJyZW50VGFyZ2V0ID0gaXNFbGVtZW50KGV2ZW50LmN1cnJlbnRUYXJnZXQpXG4gICAgICAgID8gaHRtbFRyZWVBc1N0cmluZyhldmVudC5jdXJyZW50VGFyZ2V0KVxuICAgICAgICA6IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChldmVudC5jdXJyZW50VGFyZ2V0KTtcbiAgICB9IGNhdGNoIChfb08pIHtcbiAgICAgIHNvdXJjZS5jdXJyZW50VGFyZ2V0ID0gJzx1bmtub3duPic7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBDdXN0b21FdmVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgaXNJbnN0YW5jZU9mKHZhbHVlLCBDdXN0b21FdmVudCkpIHtcbiAgICAgIHNvdXJjZS5kZXRhaWwgPSBldmVudC5kZXRhaWw7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBhdHRyIGluIGV2ZW50KSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGV2ZW50LCBhdHRyKSkge1xuICAgICAgICBzb3VyY2VbYXR0cl0gPSBldmVudFthdHRyXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlIGFzIHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH07XG59XG5cbi8qKiBDYWxjdWxhdGVzIGJ5dGVzIHNpemUgb2YgaW5wdXQgc3RyaW5nICovXG5mdW5jdGlvbiB1dGY4TGVuZ3RoKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICByZXR1cm4gfi1lbmNvZGVVUkkodmFsdWUpLnNwbGl0KC8lLi58Li8pLmxlbmd0aDtcbn1cblxuLyoqIENhbGN1bGF0ZXMgYnl0ZXMgc2l6ZSBvZiBpbnB1dCBvYmplY3QgKi9cbmZ1bmN0aW9uIGpzb25TaXplKHZhbHVlOiBhbnkpOiBudW1iZXIge1xuICByZXR1cm4gdXRmOExlbmd0aChKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xufVxuXG4vKiogSlNEb2MgKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVUb1NpemU8VD4oXG4gIG9iamVjdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSxcbiAgLy8gRGVmYXVsdCBOb2RlLmpzIFJFUEwgZGVwdGhcbiAgZGVwdGg6IG51bWJlciA9IDMsXG4gIC8vIDEwMGtCLCBhcyAyMDBrQiBpcyBtYXggcGF5bG9hZCBzaXplLCBzbyBoYWxmIHNvdW5kcyByZWFzb25hYmxlXG4gIG1heFNpemU6IG51bWJlciA9IDEwMCAqIDEwMjQsXG4pOiBUIHtcbiAgY29uc3Qgc2VyaWFsaXplZCA9IG5vcm1hbGl6ZShvYmplY3QsIGRlcHRoKTtcblxuICBpZiAoanNvblNpemUoc2VyaWFsaXplZCkgPiBtYXhTaXplKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZVRvU2l6ZShvYmplY3QsIGRlcHRoIC0gMSwgbWF4U2l6ZSk7XG4gIH1cblxuICByZXR1cm4gc2VyaWFsaXplZCBhcyBUO1xufVxuXG4vKipcbiAqIFRyYW5zZm9ybSBhbnkgbm9uLXByaW1pdGl2ZSwgQmlnSW50LCBvciBTeW1ib2wtdHlwZSB2YWx1ZSBpbnRvIGEgc3RyaW5nLiBBY3RzIGFzIGEgbm8tb3Agb24gc3RyaW5ncywgbnVtYmVycyxcbiAqIGJvb2xlYW5zLCBudWxsLCBhbmQgdW5kZWZpbmVkLlxuICpcbiAqIEBwYXJhbSB2YWx1ZSBUaGUgdmFsdWUgdG8gc3RyaW5naWZ5XG4gKiBAcmV0dXJucyBGb3Igbm9uLXByaW1pdGl2ZSwgQmlnSW50LCBhbmQgU3ltYm9sLXR5cGUgdmFsdWVzLCBhIHN0cmluZyBkZW5vdGluZyB0aGUgdmFsdWUncyB0eXBlLCB0eXBlIGFuZCB2YWx1ZSwgb3JcbiAqICB0eXBlIGFuZCBgZGVzY3JpcHRpb25gIHByb3BlcnR5LCByZXNwZWN0aXZlbHkuIEZvciBub24tQmlnSW50LCBub24tU3ltYm9sIHByaW1pdGl2ZXMsIHJldHVybnMgdGhlIG9yaWdpbmFsIHZhbHVlLFxuICogIHVuY2hhbmdlZC5cbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplVmFsdWUodmFsdWU6IGFueSk6IGFueSB7XG4gIGNvbnN0IHR5cGUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpO1xuXG4gIC8vIE5vZGUuanMgUkVQTCBub3RhdGlvblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICBpZiAodHlwZSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICByZXR1cm4gJ1tPYmplY3RdJztcbiAgfVxuICBpZiAodHlwZSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgIHJldHVybiAnW0FycmF5XSc7XG4gIH1cblxuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplVmFsdWUodmFsdWUpO1xuICByZXR1cm4gaXNQcmltaXRpdmUobm9ybWFsaXplZCkgPyBub3JtYWxpemVkIDogdHlwZTtcbn1cblxuLyoqXG4gKiBub3JtYWxpemVWYWx1ZSgpXG4gKlxuICogVGFrZXMgdW5zZXJpYWxpemFibGUgaW5wdXQgYW5kIG1ha2UgaXQgc2VyaWFsaXphYmxlIGZyaWVuZGx5XG4gKlxuICogLSB0cmFuc2xhdGVzIHVuZGVmaW5lZC9OYU4gdmFsdWVzIHRvIFwiW3VuZGVmaW5lZF1cIi9cIltOYU5dXCIgcmVzcGVjdGl2ZWx5LFxuICogLSBzZXJpYWxpemVzIEVycm9yIG9iamVjdHNcbiAqIC0gZmlsdGVyIGdsb2JhbCBvYmplY3RzXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlPFQ+KHZhbHVlOiBULCBrZXk/OiBhbnkpOiBUIHwgc3RyaW5nIHtcbiAgaWYgKGtleSA9PT0gJ2RvbWFpbicgJiYgdmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiAoKHZhbHVlIGFzIHVua25vd24pIGFzIHsgX2V2ZW50czogYW55IH0pLl9ldmVudHMpIHtcbiAgICByZXR1cm4gJ1tEb21haW5dJztcbiAgfVxuXG4gIGlmIChrZXkgPT09ICdkb21haW5FbWl0dGVyJykge1xuICAgIHJldHVybiAnW0RvbWFpbkVtaXR0ZXJdJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgKGdsb2JhbCBhcyBhbnkpICE9PSAndW5kZWZpbmVkJyAmJiAodmFsdWUgYXMgdW5rbm93bikgPT09IGdsb2JhbCkge1xuICAgIHJldHVybiAnW0dsb2JhbF0nO1xuICB9XG5cbiAgLy8gSXQncyBzYWZlIHRvIHVzZSBgd2luZG93YCBhbmQgYGRvY3VtZW50YCBoZXJlIGluIHRoaXMgbWFubmVyLCBhcyB3ZSBhcmUgYXNzZXJ0aW5nIHVzaW5nIGB0eXBlb2ZgIGZpcnN0XG4gIC8vIHdoaWNoIHdvbid0IHRocm93IGlmIHRoZXkgYXJlIG5vdCBwcmVzZW50LlxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHNcbiAgaWYgKHR5cGVvZiAod2luZG93IGFzIGFueSkgIT09ICd1bmRlZmluZWQnICYmICh2YWx1ZSBhcyB1bmtub3duKSA9PT0gd2luZG93KSB7XG4gICAgcmV0dXJuICdbV2luZG93XSc7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1nbG9iYWxzXG4gIGlmICh0eXBlb2YgKGRvY3VtZW50IGFzIGFueSkgIT09ICd1bmRlZmluZWQnICYmICh2YWx1ZSBhcyB1bmtub3duKSA9PT0gZG9jdW1lbnQpIHtcbiAgICByZXR1cm4gJ1tEb2N1bWVudF0nO1xuICB9XG5cbiAgLy8gUmVhY3QncyBTeW50aGV0aWNFdmVudCB0aGluZ3lcbiAgaWYgKGlzU3ludGhldGljRXZlbnQodmFsdWUpKSB7XG4gICAgcmV0dXJuICdbU3ludGhldGljRXZlbnRdJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSB2YWx1ZSkge1xuICAgIHJldHVybiAnW05hTl0nO1xuICB9XG5cbiAgaWYgKHZhbHVlID09PSB2b2lkIDApIHtcbiAgICByZXR1cm4gJ1t1bmRlZmluZWRdJztcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gYFtGdW5jdGlvbjogJHtnZXRGdW5jdGlvbk5hbWUodmFsdWUpfV1gO1xuICB9XG5cbiAgLy8gc3ltYm9scyBhbmQgYmlnaW50cyBhcmUgY29uc2lkZXJlZCBwcmltaXRpdmVzIGJ5IFRTLCBidXQgYXJlbid0IG5hdGl2ZWx5IEpTT04tc2VyaWxhaXphYmxlXG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcpIHtcbiAgICByZXR1cm4gYFske1N0cmluZyh2YWx1ZSl9XWA7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnYmlnaW50Jykge1xuICAgIHJldHVybiBgW0JpZ0ludDogJHtTdHJpbmcodmFsdWUpfV1gO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG4vKipcbiAqIFdhbGtzIGFuIG9iamVjdCB0byBwZXJmb3JtIGEgbm9ybWFsaXphdGlvbiBvbiBpdFxuICpcbiAqIEBwYXJhbSBrZXkgb2Ygb2JqZWN0IHRoYXQncyB3YWxrZWQgaW4gY3VycmVudCBpdGVyYXRpb25cbiAqIEBwYXJhbSB2YWx1ZSBvYmplY3QgdG8gYmUgd2Fsa2VkXG4gKiBAcGFyYW0gZGVwdGggT3B0aW9uYWwgbnVtYmVyIGluZGljYXRpbmcgaG93IGRlZXAgc2hvdWxkIHdhbGtpbmcgYmUgcGVyZm9ybWVkXG4gKiBAcGFyYW0gbWVtbyBPcHRpb25hbCBNZW1vIGNsYXNzIGhhbmRsaW5nIGRlY3ljbGluZ1xuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xuZXhwb3J0IGZ1bmN0aW9uIHdhbGsoa2V5OiBzdHJpbmcsIHZhbHVlOiBhbnksIGRlcHRoOiBudW1iZXIgPSArSW5maW5pdHksIG1lbW86IE1lbW8gPSBuZXcgTWVtbygpKTogYW55IHtcbiAgLy8gSWYgd2UgcmVhY2ggdGhlIG1heGltdW0gZGVwdGgsIHNlcmlhbGl6ZSB3aGF0ZXZlciBoYXMgbGVmdFxuICBpZiAoZGVwdGggPT09IDApIHtcbiAgICByZXR1cm4gc2VyaWFsaXplVmFsdWUodmFsdWUpO1xuICB9XG5cbiAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovXG4gIC8vIElmIHZhbHVlIGltcGxlbWVudHMgYHRvSlNPTmAgbWV0aG9kLCBjYWxsIGl0IGFuZCByZXR1cm4gZWFybHlcbiAgaWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIHZhbHVlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiB2YWx1ZS50b0pTT04oKTtcbiAgfVxuICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAqL1xuXG4gIC8vIElmIG5vcm1hbGl6ZWQgdmFsdWUgaXMgYSBwcmltaXRpdmUsIHRoZXJlIGFyZSBubyBicmFuY2hlcyBsZWZ0IHRvIHdhbGssIHNvIHdlIGNhbiBqdXN0IGJhaWwgb3V0LCBhcyB0aGVyZXMgbm8gcG9pbnQgaW4gZ29pbmcgZG93biB0aGF0IGJyYW5jaCBhbnkgZnVydGhlclxuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplVmFsdWUodmFsdWUsIGtleSk7XG4gIGlmIChpc1ByaW1pdGl2ZShub3JtYWxpemVkKSkge1xuICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9XG5cbiAgLy8gQ3JlYXRlIHNvdXJjZSB0aGF0IHdlIHdpbGwgdXNlIGZvciBuZXh0IGl0dGVyYXRpb25zLCBlaXRoZXIgb2JqZWN0aWZpZWQgZXJyb3Igb2JqZWN0IChFcnJvciB0eXBlIHdpdGggZXh0cmFjdGVkIGtleXM6dmFsdWUgcGFpcnMpIG9yIHRoZSBpbnB1dCBpdHNlbGZcbiAgY29uc3Qgc291cmNlID0gZ2V0V2Fsa1NvdXJjZSh2YWx1ZSk7XG5cbiAgLy8gQ3JlYXRlIGFuIGFjY3VtdWxhdG9yIHRoYXQgd2lsbCBhY3QgYXMgYSBwYXJlbnQgZm9yIGFsbCBmdXR1cmUgaXR0ZXJhdGlvbnMgb2YgdGhhdCBicmFuY2hcbiAgY29uc3QgYWNjID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyBbXSA6IHt9O1xuXG4gIC8vIElmIHdlIGFscmVhZHkgd2Fsa2VkIHRoYXQgYnJhbmNoLCBiYWlsIG91dCwgYXMgaXQncyBjaXJjdWxhciByZWZlcmVuY2VcbiAgaWYgKG1lbW8ubWVtb2l6ZSh2YWx1ZSkpIHtcbiAgICByZXR1cm4gJ1tDaXJjdWxhciB+XSc7XG4gIH1cblxuICAvLyBXYWxrIGFsbCBrZXlzIG9mIHRoZSBzb3VyY2VcbiAgZm9yIChjb25zdCBpbm5lcktleSBpbiBzb3VyY2UpIHtcbiAgICAvLyBBdm9pZCBpdGVyYXRpbmcgb3ZlciBmaWVsZHMgaW4gdGhlIHByb3RvdHlwZSBpZiB0aGV5J3ZlIHNvbWVob3cgYmVlbiBleHBvc2VkIHRvIGVudW1lcmF0aW9uLlxuICAgIGlmICghT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwgaW5uZXJLZXkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgLy8gUmVjdXJzaXZlbHkgd2FsayB0aHJvdWdoIGFsbCB0aGUgY2hpbGQgbm9kZXNcbiAgICAoYWNjIGFzIHsgW2tleTogc3RyaW5nXTogYW55IH0pW2lubmVyS2V5XSA9IHdhbGsoaW5uZXJLZXksIHNvdXJjZVtpbm5lcktleV0sIGRlcHRoIC0gMSwgbWVtbyk7XG4gIH1cblxuICAvLyBPbmNlIHdhbGtlZCB0aHJvdWdoIGFsbCB0aGUgYnJhbmNoZXMsIHJlbW92ZSB0aGUgcGFyZW50IGZyb20gbWVtbyBzdG9yYWdlXG4gIG1lbW8udW5tZW1vaXplKHZhbHVlKTtcblxuICAvLyBSZXR1cm4gYWNjdW11bGF0ZWQgdmFsdWVzXG4gIHJldHVybiBhY2M7XG59XG5cbi8qKlxuICogbm9ybWFsaXplKClcbiAqXG4gKiAtIENyZWF0ZXMgYSBjb3B5IHRvIHByZXZlbnQgb3JpZ2luYWwgaW5wdXQgbXV0YXRpb25cbiAqIC0gU2tpcCBub24tZW51bWVyYWJsZXJzXG4gKiAtIENhbGxzIGB0b0pTT05gIGlmIGltcGxlbWVudGVkXG4gKiAtIFJlbW92ZXMgY2lyY3VsYXIgcmVmZXJlbmNlc1xuICogLSBUcmFuc2xhdGVzIG5vbi1zZXJpYWxpemVhYmxlIHZhbHVlcyAodW5kZWZpbmVkL05hTi9GdW5jdGlvbnMpIHRvIHNlcmlhbGl6YWJsZSBmb3JtYXRcbiAqIC0gVHJhbnNsYXRlcyBrbm93biBnbG9iYWwgb2JqZWN0cy9DbGFzc2VzIHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uc1xuICogLSBUYWtlcyBjYXJlIG9mIEVycm9yIG9iamVjdHMgc2VyaWFsaXphdGlvblxuICogLSBPcHRpb25hbGx5IGxpbWl0IGRlcHRoIG9mIGZpbmFsIG91dHB1dFxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZShpbnB1dDogYW55LCBkZXB0aD86IG51bWJlcik6IGFueSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaW5wdXQsIChrZXk6IHN0cmluZywgdmFsdWU6IGFueSkgPT4gd2FsayhrZXksIHZhbHVlLCBkZXB0aCkpKTtcbiAgfSBjYXRjaCAoX29PKSB7XG4gICAgcmV0dXJuICcqKm5vbi1zZXJpYWxpemFibGUqKic7XG4gIH1cbn1cblxuLyoqXG4gKiBHaXZlbiBhbnkgY2FwdHVyZWQgZXhjZXB0aW9uLCBleHRyYWN0IGl0cyBrZXlzIGFuZCBjcmVhdGUgYSBzb3J0ZWRcbiAqIGFuZCB0cnVuY2F0ZWQgbGlzdCB0aGF0IHdpbGwgYmUgdXNlZCBpbnNpZGUgdGhlIGV2ZW50IG1lc3NhZ2UuXG4gKiBlZy4gYE5vbi1lcnJvciBleGNlcHRpb24gY2FwdHVyZWQgd2l0aCBrZXlzOiBmb28sIGJhciwgYmF6YFxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RFeGNlcHRpb25LZXlzRm9yTWVzc2FnZShleGNlcHRpb246IGFueSwgbWF4TGVuZ3RoOiBudW1iZXIgPSA0MCk6IHN0cmluZyB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhnZXRXYWxrU291cmNlKGV4Y2VwdGlvbikpO1xuICBrZXlzLnNvcnQoKTtcblxuICBpZiAoIWtleXMubGVuZ3RoKSB7XG4gICAgcmV0dXJuICdbb2JqZWN0IGhhcyBubyBrZXlzXSc7XG4gIH1cblxuICBpZiAoa2V5c1swXS5sZW5ndGggPj0gbWF4TGVuZ3RoKSB7XG4gICAgcmV0dXJuIHRydW5jYXRlKGtleXNbMF0sIG1heExlbmd0aCk7XG4gIH1cblxuICBmb3IgKGxldCBpbmNsdWRlZEtleXMgPSBrZXlzLmxlbmd0aDsgaW5jbHVkZWRLZXlzID4gMDsgaW5jbHVkZWRLZXlzLS0pIHtcbiAgICBjb25zdCBzZXJpYWxpemVkID0ga2V5cy5zbGljZSgwLCBpbmNsdWRlZEtleXMpLmpvaW4oJywgJyk7XG4gICAgaWYgKHNlcmlhbGl6ZWQubGVuZ3RoID4gbWF4TGVuZ3RoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGluY2x1ZGVkS2V5cyA9PT0ga2V5cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBzZXJpYWxpemVkO1xuICAgIH1cbiAgICByZXR1cm4gdHJ1bmNhdGUoc2VyaWFsaXplZCwgbWF4TGVuZ3RoKTtcbiAgfVxuXG4gIHJldHVybiAnJztcbn1cblxuLyoqXG4gKiBHaXZlbiBhbnkgb2JqZWN0LCByZXR1cm4gdGhlIG5ldyBvYmplY3Qgd2l0aCByZW1vdmVkIGtleXMgdGhhdCB2YWx1ZSB3YXMgYHVuZGVmaW5lZGAuXG4gKiBXb3JrcyByZWN1cnNpdmVseSBvbiBvYmplY3RzIGFuZCBhcnJheXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkcm9wVW5kZWZpbmVkS2V5czxUPih2YWw6IFQpOiBUIHtcbiAgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgIGNvbnN0IG9iaiA9IHZhbCBhcyB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xuICAgIGNvbnN0IHJ2OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMob2JqKSkge1xuICAgICAgaWYgKHR5cGVvZiBvYmpba2V5XSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcnZba2V5XSA9IGRyb3BVbmRlZmluZWRLZXlzKG9ialtrZXldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJ2IGFzIFQ7XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgcmV0dXJuICh2YWwgYXMgYW55W10pLm1hcChkcm9wVW5kZWZpbmVkS2V5cykgYXMgYW55O1xuICB9XG5cbiAgcmV0dXJuIHZhbDtcbn1cblxuLyoqXG4gKiBFbnN1cmUgdGhhdCBzb21ldGhpbmcgaXMgYW4gb2JqZWN0LlxuICpcbiAqIFR1cm5zIGB1bmRlZmluZWRgIGFuZCBgbnVsbGAgaW50byBgU3RyaW5nYHMgYW5kIGFsbCBvdGhlciBwcmltaXRpdmVzIGludG8gaW5zdGFuY2VzIG9mIHRoZWlyIHJlc3BlY3RpdmUgd3JhcHBlclxuICogY2xhc3NlcyAoU3RyaW5nLCBCb29sZWFuLCBOdW1iZXIsIGV0Yy4pLiBBY3RzIGFzIHRoZSBpZGVudGl0eSBmdW5jdGlvbiBvbiBub24tcHJpbWl0aXZlcy5cbiAqXG4gKiBAcGFyYW0gd2F0IFRoZSBzdWJqZWN0IG9mIHRoZSBvYmplY3RpZmljYXRpb25cbiAqIEByZXR1cm5zIEEgdmVyc2lvbiBvZiBgd2F0YCB3aGljaCBjYW4gc2FmZWx5IGJlIHVzZWQgd2l0aCBgT2JqZWN0YCBjbGFzcyBtZXRob2RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBvYmplY3RpZnkod2F0OiB1bmtub3duKTogdHlwZW9mIE9iamVjdCB7XG4gIGxldCBvYmplY3RpZmllZDtcbiAgc3dpdGNoICh0cnVlKSB7XG4gICAgY2FzZSB3YXQgPT09IHVuZGVmaW5lZCB8fCB3YXQgPT09IG51bGw6XG4gICAgICBvYmplY3RpZmllZCA9IG5ldyBTdHJpbmcod2F0KTtcbiAgICAgIGJyZWFrO1xuXG4gICAgLy8gVGhvdWdoIHN5bWJvbHMgYW5kIGJpZ2ludHMgZG8gaGF2ZSB3cmFwcGVyIGNsYXNzZXMgKGBTeW1ib2xgIGFuZCBgQmlnSW50YCwgcmVzcGVjdGl2ZWx5KSwgZm9yIHdoYXRldmVyIHJlYXNvblxuICAgIC8vIHRob3NlIGNsYXNzZXMgZG9uJ3QgaGF2ZSBjb25zdHJ1Y3RvcnMgd2hpY2ggY2FuIGJlIHVzZWQgd2l0aCB0aGUgYG5ld2Aga2V5d29yZC4gV2UgdGhlcmVmb3JlIG5lZWQgdG8gY2FzdCBlYWNoIGFzXG4gICAgLy8gYW4gb2JqZWN0IGluIG9yZGVyIHRvIHdyYXAgaXQuXG4gICAgY2FzZSB0eXBlb2Ygd2F0ID09PSAnc3ltYm9sJyB8fCB0eXBlb2Ygd2F0ID09PSAnYmlnaW50JzpcbiAgICAgIG9iamVjdGlmaWVkID0gT2JqZWN0KHdhdCk7XG4gICAgICBicmVhaztcblxuICAgIC8vIHRoaXMgd2lsbCBjYXRjaCB0aGUgcmVtYWluaW5nIHByaW1pdGl2ZXM6IGBTdHJpbmdgLCBgTnVtYmVyYCwgYW5kIGBCb29sZWFuYFxuICAgIGNhc2UgaXNQcmltaXRpdmUod2F0KTpcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgIG9iamVjdGlmaWVkID0gbmV3ICh3YXQgYXMgYW55KS5jb25zdHJ1Y3Rvcih3YXQpO1xuICAgICAgYnJlYWs7XG5cbiAgICAvLyBieSBwcm9jZXNzIG9mIGVsaW1pbmF0aW9uLCBhdCB0aGlzIHBvaW50IHdlIGtub3cgdGhhdCBgd2F0YCBtdXN0IGFscmVhZHkgYmUgYW4gb2JqZWN0XG4gICAgZGVmYXVsdDpcbiAgICAgIG9iamVjdGlmaWVkID0gd2F0O1xuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIG9iamVjdGlmaWVkO1xufVxuIiwgImltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gJy4vZ2xvYmFsJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcblxuLyoqXG4gKiBUZWxscyB3aGV0aGVyIGN1cnJlbnQgZW52aXJvbm1lbnQgc3VwcG9ydHMgRXJyb3JFdmVudCBvYmplY3RzXG4gKiB7QGxpbmsgc3VwcG9ydHNFcnJvckV2ZW50fS5cbiAqXG4gKiBAcmV0dXJucyBBbnN3ZXIgdG8gdGhlIGdpdmVuIHF1ZXN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNFcnJvckV2ZW50KCk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIG5ldyBFcnJvckV2ZW50KCcnKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFRlbGxzIHdoZXRoZXIgY3VycmVudCBlbnZpcm9ubWVudCBzdXBwb3J0cyBET01FcnJvciBvYmplY3RzXG4gKiB7QGxpbmsgc3VwcG9ydHNET01FcnJvcn0uXG4gKlxuICogQHJldHVybnMgQW5zd2VyIHRvIHRoZSBnaXZlbiBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzRE9NRXJyb3IoKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgLy8gQ2hyb21lOiBWTTg5OjEgVW5jYXVnaHQgVHlwZUVycm9yOiBGYWlsZWQgdG8gY29uc3RydWN0ICdET01FcnJvcic6XG4gICAgLy8gMSBhcmd1bWVudCByZXF1aXJlZCwgYnV0IG9ubHkgMCBwcmVzZW50LlxuICAgIC8vIEB0cy1pZ25vcmUgSXQgcmVhbGx5IG5lZWRzIDEgYXJndW1lbnQsIG5vdCAwLlxuICAgIG5ldyBET01FcnJvcignJyk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBUZWxscyB3aGV0aGVyIGN1cnJlbnQgZW52aXJvbm1lbnQgc3VwcG9ydHMgRE9NRXhjZXB0aW9uIG9iamVjdHNcbiAqIHtAbGluayBzdXBwb3J0c0RPTUV4Y2VwdGlvbn0uXG4gKlxuICogQHJldHVybnMgQW5zd2VyIHRvIHRoZSBnaXZlbiBxdWVzdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzRE9NRXhjZXB0aW9uKCk6IGJvb2xlYW4ge1xuICB0cnkge1xuICAgIG5ldyBET01FeGNlcHRpb24oJycpO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogVGVsbHMgd2hldGhlciBjdXJyZW50IGVudmlyb25tZW50IHN1cHBvcnRzIEZldGNoIEFQSVxuICoge0BsaW5rIHN1cHBvcnRzRmV0Y2h9LlxuICpcbiAqIEByZXR1cm5zIEFuc3dlciB0byB0aGUgZ2l2ZW4gcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c0ZldGNoKCk6IGJvb2xlYW4ge1xuICBpZiAoISgnZmV0Y2gnIGluIGdldEdsb2JhbE9iamVjdDxXaW5kb3c+KCkpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICBuZXcgSGVhZGVycygpO1xuICAgIG5ldyBSZXF1ZXN0KCcnKTtcbiAgICBuZXcgUmVzcG9uc2UoKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuLyoqXG4gKiBpc05hdGl2ZUZldGNoIGNoZWNrcyBpZiB0aGUgZ2l2ZW4gZnVuY3Rpb24gaXMgYSBuYXRpdmUgaW1wbGVtZW50YXRpb24gb2YgZmV0Y2goKVxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlc1xuZXhwb3J0IGZ1bmN0aW9uIGlzTmF0aXZlRmV0Y2goZnVuYzogRnVuY3Rpb24pOiBib29sZWFuIHtcbiAgcmV0dXJuIGZ1bmMgJiYgL15mdW5jdGlvbiBmZXRjaFxcKFxcKVxccytcXHtcXHMrXFxbbmF0aXZlIGNvZGVcXF1cXHMrXFx9JC8udGVzdChmdW5jLnRvU3RyaW5nKCkpO1xufVxuXG4vKipcbiAqIFRlbGxzIHdoZXRoZXIgY3VycmVudCBlbnZpcm9ubWVudCBzdXBwb3J0cyBGZXRjaCBBUEkgbmF0aXZlbHlcbiAqIHtAbGluayBzdXBwb3J0c05hdGl2ZUZldGNofS5cbiAqXG4gKiBAcmV0dXJucyB0cnVlIGlmIGB3aW5kb3cuZmV0Y2hgIGlzIG5hdGl2ZWx5IGltcGxlbWVudGVkLCBmYWxzZSBvdGhlcndpc2VcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN1cHBvcnRzTmF0aXZlRmV0Y2goKTogYm9vbGVhbiB7XG4gIGlmICghc3VwcG9ydHNGZXRjaCgpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsT2JqZWN0PFdpbmRvdz4oKTtcblxuICAvLyBGYXN0IHBhdGggdG8gYXZvaWQgRE9NIEkvT1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gIGlmIChpc05hdGl2ZUZldGNoKGdsb2JhbC5mZXRjaCkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHdpbmRvdy5mZXRjaCBpcyBpbXBsZW1lbnRlZCwgYnV0IGlzIHBvbHlmaWxsZWQgb3IgYWxyZWFkeSB3cmFwcGVkIChlLmc6IGJ5IGEgY2hyb21lIGV4dGVuc2lvbilcbiAgLy8gc28gY3JlYXRlIGEgXCJwdXJlXCIgaWZyYW1lIHRvIHNlZSBpZiB0aGF0IGhhcyBuYXRpdmUgZmV0Y2hcbiAgbGV0IHJlc3VsdCA9IGZhbHNlO1xuICBjb25zdCBkb2MgPSBnbG9iYWwuZG9jdW1lbnQ7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBpZiAoZG9jICYmIHR5cGVvZiAoZG9jLmNyZWF0ZUVsZW1lbnQgYXMgdW5rbm93bikgPT09IGBmdW5jdGlvbmApIHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc2FuZGJveCA9IGRvYy5jcmVhdGVFbGVtZW50KCdpZnJhbWUnKTtcbiAgICAgIHNhbmRib3guaGlkZGVuID0gdHJ1ZTtcbiAgICAgIGRvYy5oZWFkLmFwcGVuZENoaWxkKHNhbmRib3gpO1xuICAgICAgaWYgKHNhbmRib3guY29udGVudFdpbmRvdyAmJiBzYW5kYm94LmNvbnRlbnRXaW5kb3cuZmV0Y2gpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgICAgICByZXN1bHQgPSBpc05hdGl2ZUZldGNoKHNhbmRib3guY29udGVudFdpbmRvdy5mZXRjaCk7XG4gICAgICB9XG4gICAgICBkb2MuaGVhZC5yZW1vdmVDaGlsZChzYW5kYm94KTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdDb3VsZCBub3QgY3JlYXRlIHNhbmRib3ggaWZyYW1lIGZvciBwdXJlIGZldGNoIGNoZWNrLCBiYWlsaW5nIHRvIHdpbmRvdy5mZXRjaDogJywgZXJyKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIFRlbGxzIHdoZXRoZXIgY3VycmVudCBlbnZpcm9ubWVudCBzdXBwb3J0cyBSZXBvcnRpbmdPYnNlcnZlciBBUElcbiAqIHtAbGluayBzdXBwb3J0c1JlcG9ydGluZ09ic2VydmVyfS5cbiAqXG4gKiBAcmV0dXJucyBBbnN3ZXIgdG8gdGhlIGdpdmVuIHF1ZXN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNSZXBvcnRpbmdPYnNlcnZlcigpOiBib29sZWFuIHtcbiAgcmV0dXJuICdSZXBvcnRpbmdPYnNlcnZlcicgaW4gZ2V0R2xvYmFsT2JqZWN0KCk7XG59XG5cbi8qKlxuICogVGVsbHMgd2hldGhlciBjdXJyZW50IGVudmlyb25tZW50IHN1cHBvcnRzIFJlZmVycmVyIFBvbGljeSBBUElcbiAqIHtAbGluayBzdXBwb3J0c1JlZmVycmVyUG9saWN5fS5cbiAqXG4gKiBAcmV0dXJucyBBbnN3ZXIgdG8gdGhlIGdpdmVuIHF1ZXN0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3VwcG9ydHNSZWZlcnJlclBvbGljeSgpOiBib29sZWFuIHtcbiAgLy8gRGVzcGl0ZSBhbGwgc3RhcnMgaW4gdGhlIHNreSBzYXlpbmcgdGhhdCBFZGdlIHN1cHBvcnRzIG9sZCBkcmFmdCBzeW50YXgsIGFrYSAnbmV2ZXInLCAnYWx3YXlzJywgJ29yaWdpbicgYW5kICdkZWZhdWx0XG4gIC8vIGh0dHBzOi8vY2FuaXVzZS5jb20vI2ZlYXQ9cmVmZXJyZXItcG9saWN5XG4gIC8vIEl0IGRvZXNuJ3QuIEFuZCBpdCB0aHJvdyBleGNlcHRpb24gaW5zdGVhZCBvZiBpZ25vcmluZyB0aGlzIHBhcmFtZXRlci4uLlxuICAvLyBSRUY6IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvcmF2ZW4tanMvaXNzdWVzLzEyMzNcblxuICBpZiAoIXN1cHBvcnRzRmV0Y2goKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgbmV3IFJlcXVlc3QoJ18nLCB7XG4gICAgICByZWZlcnJlclBvbGljeTogJ29yaWdpbicgYXMgUmVmZXJyZXJQb2xpY3ksXG4gICAgfSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuLyoqXG4gKiBUZWxscyB3aGV0aGVyIGN1cnJlbnQgZW52aXJvbm1lbnQgc3VwcG9ydHMgSGlzdG9yeSBBUElcbiAqIHtAbGluayBzdXBwb3J0c0hpc3Rvcnl9LlxuICpcbiAqIEByZXR1cm5zIEFuc3dlciB0byB0aGUgZ2l2ZW4gcXVlc3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdXBwb3J0c0hpc3RvcnkoKTogYm9vbGVhbiB7XG4gIC8vIE5PVEU6IGluIENocm9tZSBBcHAgZW52aXJvbm1lbnQsIHRvdWNoaW5nIGhpc3RvcnkucHVzaFN0YXRlLCAqZXZlbiBpbnNpZGVcbiAgLy8gICAgICAgYSB0cnkvY2F0Y2ggYmxvY2sqLCB3aWxsIGNhdXNlIENocm9tZSB0byBvdXRwdXQgYW4gZXJyb3IgdG8gY29uc29sZS5lcnJvclxuICAvLyBib3Jyb3dlZCBmcm9tOiBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyLmpzL3B1bGwvMTM5NDUvZmlsZXNcbiAgY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsT2JqZWN0PFdpbmRvdz4oKTtcbiAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIGNvbnN0IGNocm9tZSA9IChnbG9iYWwgYXMgYW55KS5jaHJvbWU7XG4gIGNvbnN0IGlzQ2hyb21lUGFja2FnZWRBcHAgPSBjaHJvbWUgJiYgY2hyb21lLmFwcCAmJiBjaHJvbWUuYXBwLnJ1bnRpbWU7XG4gIC8qIGVzbGludC1lbmFibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzICovXG4gIGNvbnN0IGhhc0hpc3RvcnlBcGkgPSAnaGlzdG9yeScgaW4gZ2xvYmFsICYmICEhZ2xvYmFsLmhpc3RvcnkucHVzaFN0YXRlICYmICEhZ2xvYmFsLmhpc3RvcnkucmVwbGFjZVN0YXRlO1xuXG4gIHJldHVybiAhaXNDaHJvbWVQYWNrYWdlZEFwcCAmJiBoYXNIaXN0b3J5QXBpO1xufVxuIiwgIi8qIGVzbGludC1kaXNhYmxlIG1heC1saW5lcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlcyAqL1xuaW1wb3J0IHsgV3JhcHBlZEZ1bmN0aW9uIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5cbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gJy4vZ2xvYmFsJztcbmltcG9ydCB7IGlzSW5zdGFuY2VPZiwgaXNTdHJpbmcgfSBmcm9tICcuL2lzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyJztcbmltcG9ydCB7IGZpbGwgfSBmcm9tICcuL29iamVjdCc7XG5pbXBvcnQgeyBnZXRGdW5jdGlvbk5hbWUgfSBmcm9tICcuL3N0YWNrdHJhY2UnO1xuaW1wb3J0IHsgc3VwcG9ydHNIaXN0b3J5LCBzdXBwb3J0c05hdGl2ZUZldGNoIH0gZnJvbSAnLi9zdXBwb3J0cyc7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdDxXaW5kb3c+KCk7XG5cbi8qKiBPYmplY3QgZGVzY3JpYmluZyBoYW5kbGVyIHRoYXQgd2lsbCBiZSB0cmlnZ2VyZWQgZm9yIGEgZ2l2ZW4gYHR5cGVgIG9mIGluc3RydW1lbnRhdGlvbiAqL1xuaW50ZXJmYWNlIEluc3RydW1lbnRIYW5kbGVyIHtcbiAgdHlwZTogSW5zdHJ1bWVudEhhbmRsZXJUeXBlO1xuICBjYWxsYmFjazogSW5zdHJ1bWVudEhhbmRsZXJDYWxsYmFjaztcbn1cbnR5cGUgSW5zdHJ1bWVudEhhbmRsZXJUeXBlID1cbiAgfCAnY29uc29sZSdcbiAgfCAnZG9tJ1xuICB8ICdmZXRjaCdcbiAgfCAnaGlzdG9yeSdcbiAgfCAnc2VudHJ5J1xuICB8ICd4aHInXG4gIHwgJ2Vycm9yJ1xuICB8ICd1bmhhbmRsZWRyZWplY3Rpb24nO1xudHlwZSBJbnN0cnVtZW50SGFuZGxlckNhbGxiYWNrID0gKGRhdGE6IGFueSkgPT4gdm9pZDtcblxuLyoqXG4gKiBJbnN0cnVtZW50IG5hdGl2ZSBBUElzIHRvIGNhbGwgaGFuZGxlcnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjcmVhdGUgYnJlYWRjcnVtYnMsIEFQTSBzcGFucyBldGMuXG4gKiAgLSBDb25zb2xlIEFQSVxuICogIC0gRmV0Y2ggQVBJXG4gKiAgLSBYSFIgQVBJXG4gKiAgLSBIaXN0b3J5IEFQSVxuICogIC0gRE9NIEFQSSAoY2xpY2svdHlwaW5nKVxuICogIC0gRXJyb3IgQVBJXG4gKiAgLSBVbmhhbmRsZWRSZWplY3Rpb24gQVBJXG4gKi9cblxuY29uc3QgaGFuZGxlcnM6IHsgW2tleSBpbiBJbnN0cnVtZW50SGFuZGxlclR5cGVdPzogSW5zdHJ1bWVudEhhbmRsZXJDYWxsYmFja1tdIH0gPSB7fTtcbmNvbnN0IGluc3RydW1lbnRlZDogeyBba2V5IGluIEluc3RydW1lbnRIYW5kbGVyVHlwZV0/OiBib29sZWFuIH0gPSB7fTtcblxuLyoqIEluc3RydW1lbnRzIGdpdmVuIEFQSSAqL1xuZnVuY3Rpb24gaW5zdHJ1bWVudCh0eXBlOiBJbnN0cnVtZW50SGFuZGxlclR5cGUpOiB2b2lkIHtcbiAgaWYgKGluc3RydW1lbnRlZFt0eXBlXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGluc3RydW1lbnRlZFt0eXBlXSA9IHRydWU7XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnY29uc29sZSc6XG4gICAgICBpbnN0cnVtZW50Q29uc29sZSgpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAnZG9tJzpcbiAgICAgIGluc3RydW1lbnRET00oKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ3hocic6XG4gICAgICBpbnN0cnVtZW50WEhSKCk7XG4gICAgICBicmVhaztcbiAgICBjYXNlICdmZXRjaCc6XG4gICAgICBpbnN0cnVtZW50RmV0Y2goKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2hpc3RvcnknOlxuICAgICAgaW5zdHJ1bWVudEhpc3RvcnkoKTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgJ2Vycm9yJzpcbiAgICAgIGluc3RydW1lbnRFcnJvcigpO1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSAndW5oYW5kbGVkcmVqZWN0aW9uJzpcbiAgICAgIGluc3RydW1lbnRVbmhhbmRsZWRSZWplY3Rpb24oKTtcbiAgICAgIGJyZWFrO1xuICAgIGRlZmF1bHQ6XG4gICAgICBsb2dnZXIud2FybigndW5rbm93biBpbnN0cnVtZW50YXRpb24gdHlwZTonLCB0eXBlKTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZCBoYW5kbGVyIHRoYXQgd2lsbCBiZSBjYWxsZWQgd2hlbiBnaXZlbiB0eXBlIG9mIGluc3RydW1lbnRhdGlvbiB0cmlnZ2Vycy5cbiAqIFVzZSBhdCB5b3VyIG93biByaXNrLCB0aGlzIG1pZ2h0IGJyZWFrIHdpdGhvdXQgY2hhbmdlbG9nIG5vdGljZSwgb25seSB1c2VkIGludGVybmFsbHkuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRJbnN0cnVtZW50YXRpb25IYW5kbGVyKGhhbmRsZXI6IEluc3RydW1lbnRIYW5kbGVyKTogdm9pZCB7XG4gIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlci50eXBlICE9PSAnc3RyaW5nJyB8fCB0eXBlb2YgaGFuZGxlci5jYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybjtcbiAgfVxuICBoYW5kbGVyc1toYW5kbGVyLnR5cGVdID0gaGFuZGxlcnNbaGFuZGxlci50eXBlXSB8fCBbXTtcbiAgKGhhbmRsZXJzW2hhbmRsZXIudHlwZV0gYXMgSW5zdHJ1bWVudEhhbmRsZXJDYWxsYmFja1tdKS5wdXNoKGhhbmRsZXIuY2FsbGJhY2spO1xuICBpbnN0cnVtZW50KGhhbmRsZXIudHlwZSk7XG59XG5cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gdHJpZ2dlckhhbmRsZXJzKHR5cGU6IEluc3RydW1lbnRIYW5kbGVyVHlwZSwgZGF0YTogYW55KTogdm9pZCB7XG4gIGlmICghdHlwZSB8fCAhaGFuZGxlcnNbdHlwZV0pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaGFuZGxlcnNbdHlwZV0gfHwgW10pIHtcbiAgICB0cnkge1xuICAgICAgaGFuZGxlcihkYXRhKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoXG4gICAgICAgIGBFcnJvciB3aGlsZSB0cmlnZ2VyaW5nIGluc3RydW1lbnRhdGlvbiBoYW5kbGVyLlxcblR5cGU6ICR7dHlwZX1cXG5OYW1lOiAke2dldEZ1bmN0aW9uTmFtZShcbiAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICApfVxcbkVycm9yOiAke2V9YCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gaW5zdHJ1bWVudENvbnNvbGUoKTogdm9pZCB7XG4gIGlmICghKCdjb25zb2xlJyBpbiBnbG9iYWwpKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InLCAnbG9nJywgJ2Fzc2VydCddLmZvckVhY2goZnVuY3Rpb24obGV2ZWw6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICghKGxldmVsIGluIGdsb2JhbC5jb25zb2xlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGZpbGwoZ2xvYmFsLmNvbnNvbGUsIGxldmVsLCBmdW5jdGlvbihvcmlnaW5hbENvbnNvbGVMZXZlbDogKCkgPT4gYW55KTogRnVuY3Rpb24ge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAgIHRyaWdnZXJIYW5kbGVycygnY29uc29sZScsIHsgYXJncywgbGV2ZWwgfSk7XG5cbiAgICAgICAgLy8gdGhpcyBmYWlscyBmb3Igc29tZSBicm93c2Vycy4gOihcbiAgICAgICAgaWYgKG9yaWdpbmFsQ29uc29sZUxldmVsKSB7XG4gICAgICAgICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwob3JpZ2luYWxDb25zb2xlTGV2ZWwsIGdsb2JhbC5jb25zb2xlLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gaW5zdHJ1bWVudEZldGNoKCk6IHZvaWQge1xuICBpZiAoIXN1cHBvcnRzTmF0aXZlRmV0Y2goKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGZpbGwoZ2xvYmFsLCAnZmV0Y2gnLCBmdW5jdGlvbihvcmlnaW5hbEZldGNoOiAoKSA9PiB2b2lkKTogKCkgPT4gdm9pZCB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICBjb25zdCBoYW5kbGVyRGF0YSA9IHtcbiAgICAgICAgYXJncyxcbiAgICAgICAgZmV0Y2hEYXRhOiB7XG4gICAgICAgICAgbWV0aG9kOiBnZXRGZXRjaE1ldGhvZChhcmdzKSxcbiAgICAgICAgICB1cmw6IGdldEZldGNoVXJsKGFyZ3MpLFxuICAgICAgICB9LFxuICAgICAgICBzdGFydFRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgIH07XG5cbiAgICAgIHRyaWdnZXJIYW5kbGVycygnZmV0Y2gnLCB7XG4gICAgICAgIC4uLmhhbmRsZXJEYXRhLFxuICAgICAgfSk7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgIHJldHVybiBvcmlnaW5hbEZldGNoLmFwcGx5KGdsb2JhbCwgYXJncykudGhlbihcbiAgICAgICAgKHJlc3BvbnNlOiBSZXNwb25zZSkgPT4ge1xuICAgICAgICAgIHRyaWdnZXJIYW5kbGVycygnZmV0Y2gnLCB7XG4gICAgICAgICAgICAuLi5oYW5kbGVyRGF0YSxcbiAgICAgICAgICAgIGVuZFRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIHJlc3BvbnNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycm9yOiBFcnJvcikgPT4ge1xuICAgICAgICAgIHRyaWdnZXJIYW5kbGVycygnZmV0Y2gnLCB7XG4gICAgICAgICAgICAuLi5oYW5kbGVyRGF0YSxcbiAgICAgICAgICAgIGVuZFRpbWVzdGFtcDogRGF0ZS5ub3coKSxcbiAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIC8vIE5PVEU6IElmIHlvdSBhcmUgYSBTZW50cnkgdXNlciwgYW5kIHlvdSBhcmUgc2VlaW5nIHRoaXMgc3RhY2sgZnJhbWUsXG4gICAgICAgICAgLy8gICAgICAgaXQgbWVhbnMgdGhlIHNlbnRyeS5qYXZhc2NyaXB0IFNESyBjYXVnaHQgYW4gZXJyb3IgaW52b2tpbmcgeW91ciBhcHBsaWNhdGlvbiBjb2RlLlxuICAgICAgICAgIC8vICAgICAgIFRoaXMgaXMgZXhwZWN0ZWQgYmVoYXZpb3IgYW5kIE5PVCBpbmRpY2F0aXZlIG9mIGEgYnVnIHdpdGggc2VudHJ5LmphdmFzY3JpcHQuXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgIH07XG4gIH0pO1xufVxuXG50eXBlIFhIUlNlbmRJbnB1dCA9IG51bGwgfCBCbG9iIHwgQnVmZmVyU291cmNlIHwgRm9ybURhdGEgfCBVUkxTZWFyY2hQYXJhbXMgfCBzdHJpbmc7XG5cbi8qKiBKU0RvYyAqL1xuaW50ZXJmYWNlIFNlbnRyeVdyYXBwZWRYTUxIdHRwUmVxdWVzdCBleHRlbmRzIFhNTEh0dHBSZXF1ZXN0IHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xuICBfX3NlbnRyeV94aHJfXz86IHtcbiAgICBtZXRob2Q/OiBzdHJpbmc7XG4gICAgdXJsPzogc3RyaW5nO1xuICAgIHN0YXR1c19jb2RlPzogbnVtYmVyO1xuICAgIGJvZHk/OiBYSFJTZW5kSW5wdXQ7XG4gIH07XG59XG5cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAqL1xuLyoqIEV4dHJhY3QgYG1ldGhvZGAgZnJvbSBmZXRjaCBjYWxsIGFyZ3VtZW50cyAqL1xuZnVuY3Rpb24gZ2V0RmV0Y2hNZXRob2QoZmV0Y2hBcmdzOiBhbnlbXSA9IFtdKTogc3RyaW5nIHtcbiAgaWYgKCdSZXF1ZXN0JyBpbiBnbG9iYWwgJiYgaXNJbnN0YW5jZU9mKGZldGNoQXJnc1swXSwgUmVxdWVzdCkgJiYgZmV0Y2hBcmdzWzBdLm1ldGhvZCkge1xuICAgIHJldHVybiBTdHJpbmcoZmV0Y2hBcmdzWzBdLm1ldGhvZCkudG9VcHBlckNhc2UoKTtcbiAgfVxuICBpZiAoZmV0Y2hBcmdzWzFdICYmIGZldGNoQXJnc1sxXS5tZXRob2QpIHtcbiAgICByZXR1cm4gU3RyaW5nKGZldGNoQXJnc1sxXS5tZXRob2QpLnRvVXBwZXJDYXNlKCk7XG4gIH1cbiAgcmV0dXJuICdHRVQnO1xufVxuXG4vKiogRXh0cmFjdCBgdXJsYCBmcm9tIGZldGNoIGNhbGwgYXJndW1lbnRzICovXG5mdW5jdGlvbiBnZXRGZXRjaFVybChmZXRjaEFyZ3M6IGFueVtdID0gW10pOiBzdHJpbmcge1xuICBpZiAodHlwZW9mIGZldGNoQXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmV0Y2hBcmdzWzBdO1xuICB9XG4gIGlmICgnUmVxdWVzdCcgaW4gZ2xvYmFsICYmIGlzSW5zdGFuY2VPZihmZXRjaEFyZ3NbMF0sIFJlcXVlc3QpKSB7XG4gICAgcmV0dXJuIGZldGNoQXJnc1swXS51cmw7XG4gIH1cbiAgcmV0dXJuIFN0cmluZyhmZXRjaEFyZ3NbMF0pO1xufVxuLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi9cblxuLyoqIEpTRG9jICovXG5mdW5jdGlvbiBpbnN0cnVtZW50WEhSKCk6IHZvaWQge1xuICBpZiAoISgnWE1MSHR0cFJlcXVlc3QnIGluIGdsb2JhbCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBQb29yIG1hbidzIGltcGxlbWVudGF0aW9uIG9mIEVTNiBgTWFwYCwgdHJhY2tpbmcgYW5kIGtlZXBpbmcgaW4gc3luYyBrZXkgYW5kIHZhbHVlIHNlcGFyYXRlbHkuXG4gIGNvbnN0IHJlcXVlc3RLZXlzOiBYTUxIdHRwUmVxdWVzdFtdID0gW107XG4gIGNvbnN0IHJlcXVlc3RWYWx1ZXM6IEFycmF5PGFueT5bXSA9IFtdO1xuICBjb25zdCB4aHJwcm90byA9IFhNTEh0dHBSZXF1ZXN0LnByb3RvdHlwZTtcblxuICBmaWxsKHhocnByb3RvLCAnb3BlbicsIGZ1bmN0aW9uKG9yaWdpbmFsT3BlbjogKCkgPT4gdm9pZCk6ICgpID0+IHZvaWQge1xuICAgIHJldHVybiBmdW5jdGlvbih0aGlzOiBTZW50cnlXcmFwcGVkWE1MSHR0cFJlcXVlc3QsIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICAgIGNvbnN0IHhociA9IHRoaXM7XG4gICAgICBjb25zdCB1cmwgPSBhcmdzWzFdO1xuICAgICAgeGhyLl9fc2VudHJ5X3hocl9fID0ge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgICAgIG1ldGhvZDogaXNTdHJpbmcoYXJnc1swXSkgPyBhcmdzWzBdLnRvVXBwZXJDYXNlKCkgOiBhcmdzWzBdLFxuICAgICAgICB1cmw6IGFyZ3NbMV0sXG4gICAgICB9O1xuXG4gICAgICAvLyBpZiBTZW50cnkga2V5IGFwcGVhcnMgaW4gVVJMLCBkb24ndCBjYXB0dXJlIGl0IGFzIGEgcmVxdWVzdFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgaWYgKGlzU3RyaW5nKHVybCkgJiYgeGhyLl9fc2VudHJ5X3hocl9fLm1ldGhvZCA9PT0gJ1BPU1QnICYmIHVybC5tYXRjaCgvc2VudHJ5X2tleS8pKSB7XG4gICAgICAgIHhoci5fX3NlbnRyeV9vd25fcmVxdWVzdF9fID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb25yZWFkeXN0YXRlY2hhbmdlSGFuZGxlciA9IGZ1bmN0aW9uKCk6IHZvaWQge1xuICAgICAgICBpZiAoeGhyLnJlYWR5U3RhdGUgPT09IDQpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gdG91Y2hpbmcgc3RhdHVzQ29kZSBpbiBzb21lIHBsYXRmb3JtcyB0aHJvd3NcbiAgICAgICAgICAgIC8vIGFuIGV4Y2VwdGlvblxuICAgICAgICAgICAgaWYgKHhoci5fX3NlbnRyeV94aHJfXykge1xuICAgICAgICAgICAgICB4aHIuX19zZW50cnlfeGhyX18uc3RhdHVzX2NvZGUgPSB4aHIuc3RhdHVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8qIGRvIG5vdGhpbmcgKi9cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgcmVxdWVzdFBvcyA9IHJlcXVlc3RLZXlzLmluZGV4T2YoeGhyKTtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0UG9zICE9PSAtMSkge1xuICAgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdG8gcG9wIGJvdGgga2V5IGFuZCB2YWx1ZSB0byBrZWVwIGl0IGluIHN5bmMuXG4gICAgICAgICAgICAgIHJlcXVlc3RLZXlzLnNwbGljZShyZXF1ZXN0UG9zKTtcbiAgICAgICAgICAgICAgY29uc3QgYXJncyA9IHJlcXVlc3RWYWx1ZXMuc3BsaWNlKHJlcXVlc3RQb3MpWzBdO1xuICAgICAgICAgICAgICBpZiAoeGhyLl9fc2VudHJ5X3hocl9fICYmIGFyZ3NbMF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHhoci5fX3NlbnRyeV94aHJfXy5ib2R5ID0gYXJnc1swXSBhcyBYSFJTZW5kSW5wdXQ7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvKiBkbyBub3RoaW5nICovXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdHJpZ2dlckhhbmRsZXJzKCd4aHInLCB7XG4gICAgICAgICAgICBhcmdzLFxuICAgICAgICAgICAgZW5kVGltZXN0YW1wOiBEYXRlLm5vdygpLFxuICAgICAgICAgICAgc3RhcnRUaW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgICAgICB4aHIsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGlmICgnb25yZWFkeXN0YXRlY2hhbmdlJyBpbiB4aHIgJiYgdHlwZW9mIHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgZmlsbCh4aHIsICdvbnJlYWR5c3RhdGVjaGFuZ2UnLCBmdW5jdGlvbihvcmlnaW5hbDogV3JhcHBlZEZ1bmN0aW9uKTogRnVuY3Rpb24ge1xuICAgICAgICAgIHJldHVybiBmdW5jdGlvbiguLi5yZWFkeVN0YXRlQXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgICAgICAgIG9ucmVhZHlzdGF0ZWNoYW5nZUhhbmRsZXIoKTtcbiAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh4aHIsIHJlYWR5U3RhdGVBcmdzKTtcbiAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHhoci5hZGRFdmVudExpc3RlbmVyKCdyZWFkeXN0YXRlY2hhbmdlJywgb25yZWFkeXN0YXRlY2hhbmdlSGFuZGxlcik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvcmlnaW5hbE9wZW4uYXBwbHkoeGhyLCBhcmdzKTtcbiAgICB9O1xuICB9KTtcblxuICBmaWxsKHhocnByb3RvLCAnc2VuZCcsIGZ1bmN0aW9uKG9yaWdpbmFsU2VuZDogKCkgPT4gdm9pZCk6ICgpID0+IHZvaWQge1xuICAgIHJldHVybiBmdW5jdGlvbih0aGlzOiBTZW50cnlXcmFwcGVkWE1MSHR0cFJlcXVlc3QsIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgICByZXF1ZXN0S2V5cy5wdXNoKHRoaXMpO1xuICAgICAgcmVxdWVzdFZhbHVlcy5wdXNoKGFyZ3MpO1xuXG4gICAgICB0cmlnZ2VySGFuZGxlcnMoJ3hocicsIHtcbiAgICAgICAgYXJncyxcbiAgICAgICAgc3RhcnRUaW1lc3RhbXA6IERhdGUubm93KCksXG4gICAgICAgIHhocjogdGhpcyxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gb3JpZ2luYWxTZW5kLmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIH07XG4gIH0pO1xufVxuXG5sZXQgbGFzdEhyZWY6IHN0cmluZztcblxuLyoqIEpTRG9jICovXG5mdW5jdGlvbiBpbnN0cnVtZW50SGlzdG9yeSgpOiB2b2lkIHtcbiAgaWYgKCFzdXBwb3J0c0hpc3RvcnkoKSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IG9sZE9uUG9wU3RhdGUgPSBnbG9iYWwub25wb3BzdGF0ZTtcbiAgZ2xvYmFsLm9ucG9wc3RhdGUgPSBmdW5jdGlvbih0aGlzOiBXaW5kb3dFdmVudEhhbmRsZXJzLCAuLi5hcmdzOiBhbnlbXSk6IGFueSB7XG4gICAgY29uc3QgdG8gPSBnbG9iYWwubG9jYXRpb24uaHJlZjtcbiAgICAvLyBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IFVSTCBzdGF0ZSwgYXMgd2UgYWx3YXlzIHJlY2VpdmUgb25seSB0aGUgdXBkYXRlZCBzdGF0ZVxuICAgIGNvbnN0IGZyb20gPSBsYXN0SHJlZjtcbiAgICBsYXN0SHJlZiA9IHRvO1xuICAgIHRyaWdnZXJIYW5kbGVycygnaGlzdG9yeScsIHtcbiAgICAgIGZyb20sXG4gICAgICB0byxcbiAgICB9KTtcbiAgICBpZiAob2xkT25Qb3BTdGF0ZSkge1xuICAgICAgLy8gQXBwYXJlbnRseSB0aGlzIGNhbiB0aHJvdyBpbiBGaXJlZm94IHdoZW4gaW5jb3JyZWN0bHkgaW1wbGVtZW50ZWQgcGx1Z2luIGlzIGluc3RhbGxlZC5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzMzNDRcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idWdzbmFnL2J1Z3NuYWctanMvaXNzdWVzLzQ2OVxuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG9sZE9uUG9wU3RhdGUuYXBwbHkodGhpcywgYXJncyk7XG4gICAgICB9IGNhdGNoIChfb08pIHtcbiAgICAgICAgLy8gbm8tZW1wdHlcbiAgICAgIH1cbiAgICB9XG4gIH07XG5cbiAgLyoqIEBoaWRkZW4gKi9cbiAgZnVuY3Rpb24gaGlzdG9yeVJlcGxhY2VtZW50RnVuY3Rpb24ob3JpZ2luYWxIaXN0b3J5RnVuY3Rpb246ICgpID0+IHZvaWQpOiAoKSA9PiB2b2lkIHtcbiAgICByZXR1cm4gZnVuY3Rpb24odGhpczogSGlzdG9yeSwgLi4uYXJnczogYW55W10pOiB2b2lkIHtcbiAgICAgIGNvbnN0IHVybCA9IGFyZ3MubGVuZ3RoID4gMiA/IGFyZ3NbMl0gOiB1bmRlZmluZWQ7XG4gICAgICBpZiAodXJsKSB7XG4gICAgICAgIC8vIGNvZXJjZSB0byBzdHJpbmcgKHRoaXMgaXMgd2hhdCBwdXNoU3RhdGUgZG9lcylcbiAgICAgICAgY29uc3QgZnJvbSA9IGxhc3RIcmVmO1xuICAgICAgICBjb25zdCB0byA9IFN0cmluZyh1cmwpO1xuICAgICAgICAvLyBrZWVwIHRyYWNrIG9mIHRoZSBjdXJyZW50IFVSTCBzdGF0ZSwgYXMgd2UgYWx3YXlzIHJlY2VpdmUgb25seSB0aGUgdXBkYXRlZCBzdGF0ZVxuICAgICAgICBsYXN0SHJlZiA9IHRvO1xuICAgICAgICB0cmlnZ2VySGFuZGxlcnMoJ2hpc3RvcnknLCB7XG4gICAgICAgICAgZnJvbSxcbiAgICAgICAgICB0byxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gb3JpZ2luYWxIaXN0b3J5RnVuY3Rpb24uYXBwbHkodGhpcywgYXJncyk7XG4gICAgfTtcbiAgfVxuXG4gIGZpbGwoZ2xvYmFsLmhpc3RvcnksICdwdXNoU3RhdGUnLCBoaXN0b3J5UmVwbGFjZW1lbnRGdW5jdGlvbik7XG4gIGZpbGwoZ2xvYmFsLmhpc3RvcnksICdyZXBsYWNlU3RhdGUnLCBoaXN0b3J5UmVwbGFjZW1lbnRGdW5jdGlvbik7XG59XG5cbmNvbnN0IGRlYm91bmNlRHVyYXRpb24gPSAxMDAwO1xubGV0IGRlYm91bmNlVGltZXJJRDogbnVtYmVyIHwgdW5kZWZpbmVkO1xubGV0IGxhc3RDYXB0dXJlZEV2ZW50OiBFdmVudCB8IHVuZGVmaW5lZDtcblxuLyoqXG4gKiBEZWNpZGUgd2hldGhlciB0aGUgY3VycmVudCBldmVudCBzaG91bGQgZmluaXNoIHRoZSBkZWJvdW5jZSBvZiBwcmV2aW91c2x5IGNhcHR1cmVkIG9uZS5cbiAqIEBwYXJhbSBwcmV2aW91cyBwcmV2aW91c2x5IGNhcHR1cmVkIGV2ZW50XG4gKiBAcGFyYW0gY3VycmVudCBldmVudCB0byBiZSBjYXB0dXJlZFxuICovXG5mdW5jdGlvbiBzaG91bGRTaG9ydGNpcmN1aXRQcmV2aW91c0RlYm91bmNlKHByZXZpb3VzOiBFdmVudCB8IHVuZGVmaW5lZCwgY3VycmVudDogRXZlbnQpOiBib29sZWFuIHtcbiAgLy8gSWYgdGhlcmUgd2FzIG5vIHByZXZpb3VzIGV2ZW50LCBpdCBzaG91bGQgYWx3YXlzIGJlIHN3YXBwZWQgZm9yIHRoZSBuZXcgb25lLlxuICBpZiAoIXByZXZpb3VzKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvLyBJZiBib3RoIGV2ZW50cyBoYXZlIGRpZmZlcmVudCB0eXBlLCB0aGVuIHVzZXIgZGVmaW5pdGVseSBwZXJmb3JtZWQgdHdvIHNlcGFyYXRlIGFjdGlvbnMuIGUuZy4gY2xpY2sgKyBrZXlwcmVzcy5cbiAgaWYgKHByZXZpb3VzLnR5cGUgIT09IGN1cnJlbnQudHlwZSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBJZiBib3RoIGV2ZW50cyBoYXZlIHRoZSBzYW1lIHR5cGUsIGl0J3Mgc3RpbGwgcG9zc2libGUgdGhhdCBhY3Rpb25zIHdlcmUgcGVyZm9ybWVkIG9uIGRpZmZlcmVudCB0YXJnZXRzLlxuICAgIC8vIGUuZy4gMiBjbGlja3Mgb24gZGlmZmVyZW50IGJ1dHRvbnMuXG4gICAgaWYgKHByZXZpb3VzLnRhcmdldCAhPT0gY3VycmVudC50YXJnZXQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIGp1c3QgYWNjZXNzaW5nIGB0YXJnZXRgIHByb3BlcnR5IGNhbiB0aHJvdyBhbiBleGNlcHRpb24gaW4gc29tZSByYXJlIGNpcmN1bXN0YW5jZXNcbiAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzgzOFxuICB9XG5cbiAgLy8gSWYgYm90aCBldmVudHMgaGF2ZSB0aGUgc2FtZSB0eXBlIF9hbmRfIHNhbWUgYHRhcmdldGAgKGFuIGVsZW1lbnQgd2hpY2ggdHJpZ2dlcmVkIGFuIGV2ZW50LCBfbm90IG5lY2Vzc2FyaWx5X1xuICAvLyB0byB3aGljaCBhbiBldmVudCBsaXN0ZW5lciB3YXMgYXR0YWNoZWQpLCB3ZSB0cmVhdCB0aGVtIGFzIHRoZSBzYW1lIGFjdGlvbiwgYXMgd2Ugd2FudCB0byBjYXB0dXJlXG4gIC8vIG9ubHkgb25lIGJyZWFkY3J1bWIuIGUuZy4gbXVsdGlwbGUgY2xpY2tzIG9uIHRoZSBzYW1lIGJ1dHRvbiwgb3IgdHlwaW5nIGluc2lkZSBhIHVzZXIgaW5wdXQgYm94LlxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogRGVjaWRlIHdoZXRoZXIgYW4gZXZlbnQgc2hvdWxkIGJlIGNhcHR1cmVkLlxuICogQHBhcmFtIGV2ZW50IGV2ZW50IHRvIGJlIGNhcHR1cmVkXG4gKi9cbmZ1bmN0aW9uIHNob3VsZFNraXBET01FdmVudChldmVudDogRXZlbnQpOiBib29sZWFuIHtcbiAgLy8gV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBmaWx0ZXJpbmcgYGtleXByZXNzYCBldmVudHMgZm9yIG5vdy5cbiAgaWYgKGV2ZW50LnR5cGUgIT09ICdrZXlwcmVzcycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcblxuICAgIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQudGFnTmFtZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgLy8gT25seSBjb25zaWRlciBrZXlwcmVzcyBldmVudHMgb24gYWN0dWFsIGlucHV0IGVsZW1lbnRzLiBUaGlzIHdpbGwgZGlzcmVnYXJkIGtleXByZXNzZXMgdGFyZ2V0aW5nIGJvZHlcbiAgICAvLyBlLmcudGFiYmluZyB0aHJvdWdoIGVsZW1lbnRzLCBob3RrZXlzLCBldGMuXG4gICAgaWYgKHRhcmdldC50YWdOYW1lID09PSAnSU5QVVQnIHx8IHRhcmdldC50YWdOYW1lID09PSAnVEVYVEFSRUEnIHx8IHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIGp1c3QgYWNjZXNzaW5nIGB0YXJnZXRgIHByb3BlcnR5IGNhbiB0aHJvdyBhbiBleGNlcHRpb24gaW4gc29tZSByYXJlIGNpcmN1bXN0YW5jZXNcbiAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzgzOFxuICB9XG5cbiAgcmV0dXJuIHRydWU7XG59XG5cbi8qKlxuICogV3JhcHMgYWRkRXZlbnRMaXN0ZW5lciB0byBjYXB0dXJlIFVJIGJyZWFkY3J1bWJzXG4gKiBAcGFyYW0gaGFuZGxlciBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgdHJpZ2dlcmVkXG4gKiBAcGFyYW0gZ2xvYmFsTGlzdGVuZXIgaW5kaWNhdGVzIHdoZXRoZXIgZXZlbnQgd2FzIGNhcHR1cmVkIGJ5IHRoZSBnbG9iYWwgZXZlbnQgbGlzdGVuZXJcbiAqIEByZXR1cm5zIHdyYXBwZWQgYnJlYWRjcnVtYiBldmVudHMgaGFuZGxlclxuICogQGhpZGRlblxuICovXG5mdW5jdGlvbiBtYWtlRE9NRXZlbnRIYW5kbGVyKGhhbmRsZXI6IEZ1bmN0aW9uLCBnbG9iYWxMaXN0ZW5lcjogYm9vbGVhbiA9IGZhbHNlKTogKGV2ZW50OiBFdmVudCkgPT4gdm9pZCB7XG4gIHJldHVybiAoZXZlbnQ6IEV2ZW50KTogdm9pZCA9PiB7XG4gICAgLy8gSXQncyBwb3NzaWJsZSB0aGlzIGhhbmRsZXIgbWlnaHQgdHJpZ2dlciBtdWx0aXBsZSB0aW1lcyBmb3IgdGhlIHNhbWVcbiAgICAvLyBldmVudCAoZS5nLiBldmVudCBwcm9wYWdhdGlvbiB0aHJvdWdoIG5vZGUgYW5jZXN0b3JzKS5cbiAgICAvLyBJZ25vcmUgaWYgd2UndmUgYWxyZWFkeSBjYXB0dXJlZCB0aGF0IGV2ZW50LlxuICAgIGlmICghZXZlbnQgfHwgbGFzdENhcHR1cmVkRXZlbnQgPT09IGV2ZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gV2UgYWx3YXlzIHdhbnQgdG8gc2tpcCBfc29tZV8gZXZlbnRzLlxuICAgIGlmIChzaG91bGRTa2lwRE9NRXZlbnQoZXZlbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgbmFtZSA9IGV2ZW50LnR5cGUgPT09ICdrZXlwcmVzcycgPyAnaW5wdXQnIDogZXZlbnQudHlwZTtcblxuICAgIC8vIElmIHRoZXJlIGlzIG5vIGRlYm91bmNlIHRpbWVyLCBpdCBtZWFucyB0aGF0IHdlIGNhbiBzYWZlbHkgY2FwdHVyZSB0aGUgbmV3IGV2ZW50IGFuZCBzdG9yZSBpdCBmb3IgZnV0dXJlIGNvbXBhcmlzb25zLlxuICAgIGlmIChkZWJvdW5jZVRpbWVySUQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaGFuZGxlcih7XG4gICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZ2xvYmFsOiBnbG9iYWxMaXN0ZW5lcixcbiAgICAgIH0pO1xuICAgICAgbGFzdENhcHR1cmVkRXZlbnQgPSBldmVudDtcbiAgICB9XG4gICAgLy8gSWYgdGhlcmUgaXMgYSBkZWJvdW5jZSBhd2FpdGluZywgc2VlIGlmIHRoZSBuZXcgZXZlbnQgaXMgZGlmZmVyZW50IGVub3VnaCB0byB0cmVhdCBpdCBhcyBhIHVuaXF1ZSBvbmUuXG4gICAgLy8gSWYgdGhhdCdzIHRoZSBjYXNlLCBlbWl0IHRoZSBwcmV2aW91cyBldmVudCBhbmQgc3RvcmUgbG9jYWxseSB0aGUgbmV3bHktY2FwdHVyZWQgRE9NIGV2ZW50LlxuICAgIGVsc2UgaWYgKHNob3VsZFNob3J0Y2lyY3VpdFByZXZpb3VzRGVib3VuY2UobGFzdENhcHR1cmVkRXZlbnQsIGV2ZW50KSkge1xuICAgICAgaGFuZGxlcih7XG4gICAgICAgIGV2ZW50OiBldmVudCxcbiAgICAgICAgbmFtZSxcbiAgICAgICAgZ2xvYmFsOiBnbG9iYWxMaXN0ZW5lcixcbiAgICAgIH0pO1xuICAgICAgbGFzdENhcHR1cmVkRXZlbnQgPSBldmVudDtcbiAgICB9XG5cbiAgICAvLyBTdGFydCBhIG5ldyBkZWJvdW5jZSB0aW1lciB0aGF0IHdpbGwgcHJldmVudCB1cyBmcm9tIGNhcHR1cmluZyBtdWx0aXBsZSBldmVudHMgdGhhdCBzaG91bGQgYmUgZ3JvdXBlZCB0b2dldGhlci5cbiAgICBjbGVhclRpbWVvdXQoZGVib3VuY2VUaW1lcklEKTtcbiAgICBkZWJvdW5jZVRpbWVySUQgPSBnbG9iYWwuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBkZWJvdW5jZVRpbWVySUQgPSB1bmRlZmluZWQ7XG4gICAgfSwgZGVib3VuY2VEdXJhdGlvbik7XG4gIH07XG59XG5cbnR5cGUgQWRkRXZlbnRMaXN0ZW5lciA9IChcbiAgdHlwZTogc3RyaW5nLFxuICBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCxcbiAgb3B0aW9ucz86IGJvb2xlYW4gfCBBZGRFdmVudExpc3RlbmVyT3B0aW9ucyxcbikgPT4gdm9pZDtcbnR5cGUgUmVtb3ZlRXZlbnRMaXN0ZW5lciA9IChcbiAgdHlwZTogc3RyaW5nLFxuICBsaXN0ZW5lcjogRXZlbnRMaXN0ZW5lck9yRXZlbnRMaXN0ZW5lck9iamVjdCxcbiAgb3B0aW9ucz86IGJvb2xlYW4gfCBFdmVudExpc3RlbmVyT3B0aW9ucyxcbikgPT4gdm9pZDtcblxudHlwZSBJbnN0cnVtZW50ZWRFbGVtZW50ID0gRWxlbWVudCAmIHtcbiAgX19zZW50cnlfaW5zdHJ1bWVudGF0aW9uX2hhbmRsZXJzX18/OiB7XG4gICAgW2tleSBpbiAnY2xpY2snIHwgJ2tleXByZXNzJ10/OiB7XG4gICAgICBoYW5kbGVyPzogRnVuY3Rpb247XG4gICAgICAvKiogVGhlIG51bWJlciBvZiBjdXN0b20gbGlzdGVuZXJzIGF0dGFjaGVkIHRvIHRoaXMgZWxlbWVudCAqL1xuICAgICAgcmVmQ291bnQ6IG51bWJlcjtcbiAgICB9O1xuICB9O1xufTtcblxuLyoqIEpTRG9jICovXG5mdW5jdGlvbiBpbnN0cnVtZW50RE9NKCk6IHZvaWQge1xuICBpZiAoISgnZG9jdW1lbnQnIGluIGdsb2JhbCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBNYWtlIGl0IHNvIHRoYXQgYW55IGNsaWNrIG9yIGtleXByZXNzIHRoYXQgaXMgdW5oYW5kbGVkIC8gYnViYmxlZCB1cCBhbGwgdGhlIHdheSB0byB0aGUgZG9jdW1lbnQgdHJpZ2dlcnMgb3VyIGRvbVxuICAvLyBoYW5kbGVycy4gKE5vcm1hbGx5IHdlIGhhdmUgb25seSBvbmUsIHdoaWNoIGNhcHR1cmVzIGEgYnJlYWRjcnVtYiBmb3IgZWFjaCBjbGljayBvciBrZXlwcmVzcy4pIERvIHRoaXMgYmVmb3JlXG4gIC8vIHdlIGluc3RydW1lbnQgYGFkZEV2ZW50TGlzdGVuZXJgIHNvIHRoYXQgd2UgZG9uJ3QgZW5kIHVwIGF0dGFjaGluZyB0aGlzIGhhbmRsZXIgdHdpY2UuXG4gIGNvbnN0IHRyaWdnZXJET01IYW5kbGVyID0gdHJpZ2dlckhhbmRsZXJzLmJpbmQobnVsbCwgJ2RvbScpO1xuICBjb25zdCBnbG9iYWxET01FdmVudEhhbmRsZXIgPSBtYWtlRE9NRXZlbnRIYW5kbGVyKHRyaWdnZXJET01IYW5kbGVyLCB0cnVlKTtcbiAgZ2xvYmFsLmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZ2xvYmFsRE9NRXZlbnRIYW5kbGVyLCBmYWxzZSk7XG4gIGdsb2JhbC5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlwcmVzcycsIGdsb2JhbERPTUV2ZW50SGFuZGxlciwgZmFsc2UpO1xuXG4gIC8vIEFmdGVyIGhvb2tpbmcgaW50byBjbGljayBhbmQga2V5cHJlc3MgZXZlbnRzIGJ1YmJsZWQgdXAgdG8gYGRvY3VtZW50YCwgd2UgYWxzbyBob29rIGludG8gdXNlci1oYW5kbGVkXG4gIC8vIGNsaWNrcyAmIGtleXByZXNzZXMsIGJ5IGFkZGluZyBhbiBldmVudCBsaXN0ZW5lciBvZiBvdXIgb3duIHRvIGFueSBlbGVtZW50IHRvIHdoaWNoIHRoZXkgYWRkIGEgbGlzdGVuZXIuIFRoYXRcbiAgLy8gd2F5LCB3aGVuZXZlciBvbmUgb2YgdGhlaXIgaGFuZGxlcnMgaXMgdHJpZ2dlcmVkLCBvdXJzIHdpbGwgYmUsIHRvby4gKFRoaXMgaXMgbmVlZGVkIGJlY2F1c2UgdGhlaXIgaGFuZGxlclxuICAvLyBjb3VsZCBwb3RlbnRpYWxseSBwcmV2ZW50IHRoZSBldmVudCBmcm9tIGJ1YmJsaW5nIHVwIHRvIG91ciBnbG9iYWwgbGlzdGVuZXJzLiBUaGlzIHdheSwgb3VyIGhhbmRsZXIgYXJlIHN0aWxsXG4gIC8vIGd1YXJhbnRlZWQgdG8gZmlyZSBhdCBsZWFzdCBvbmNlLilcbiAgWydFdmVudFRhcmdldCcsICdOb2RlJ10uZm9yRWFjaCgodGFyZ2V0OiBzdHJpbmcpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgY29uc3QgcHJvdG8gPSAoZ2xvYmFsIGFzIGFueSlbdGFyZ2V0XSAmJiAoZ2xvYmFsIGFzIGFueSlbdGFyZ2V0XS5wcm90b3R5cGU7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzcywgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgaWYgKCFwcm90byB8fCAhcHJvdG8uaGFzT3duUHJvcGVydHkgfHwgIXByb3RvLmhhc093blByb3BlcnR5KCdhZGRFdmVudExpc3RlbmVyJykpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBmaWxsKHByb3RvLCAnYWRkRXZlbnRMaXN0ZW5lcicsIGZ1bmN0aW9uKG9yaWdpbmFsQWRkRXZlbnRMaXN0ZW5lcjogQWRkRXZlbnRMaXN0ZW5lcik6IEFkZEV2ZW50TGlzdGVuZXIge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKFxuICAgICAgICB0aGlzOiBFbGVtZW50LFxuICAgICAgICB0eXBlOiBzdHJpbmcsXG4gICAgICAgIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LFxuICAgICAgICBvcHRpb25zPzogYm9vbGVhbiB8IEFkZEV2ZW50TGlzdGVuZXJPcHRpb25zLFxuICAgICAgKTogQWRkRXZlbnRMaXN0ZW5lciB7XG4gICAgICAgIGlmICh0eXBlID09PSAnY2xpY2snIHx8IHR5cGUgPT0gJ2tleXByZXNzJykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBlbCA9IHRoaXMgYXMgSW5zdHJ1bWVudGVkRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJzID0gKGVsLl9fc2VudHJ5X2luc3RydW1lbnRhdGlvbl9oYW5kbGVyc19fID0gZWwuX19zZW50cnlfaW5zdHJ1bWVudGF0aW9uX2hhbmRsZXJzX18gfHwge30pO1xuICAgICAgICAgICAgY29uc3QgaGFuZGxlckZvclR5cGUgPSAoaGFuZGxlcnNbdHlwZV0gPSBoYW5kbGVyc1t0eXBlXSB8fCB7IHJlZkNvdW50OiAwIH0pO1xuXG4gICAgICAgICAgICBpZiAoIWhhbmRsZXJGb3JUeXBlLmhhbmRsZXIpIHtcbiAgICAgICAgICAgICAgY29uc3QgaGFuZGxlciA9IG1ha2VET01FdmVudEhhbmRsZXIodHJpZ2dlckRPTUhhbmRsZXIpO1xuICAgICAgICAgICAgICBoYW5kbGVyRm9yVHlwZS5oYW5kbGVyID0gaGFuZGxlcjtcbiAgICAgICAgICAgICAgb3JpZ2luYWxBZGRFdmVudExpc3RlbmVyLmNhbGwodGhpcywgdHlwZSwgaGFuZGxlciwgb3B0aW9ucyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGhhbmRsZXJGb3JUeXBlLnJlZkNvdW50ICs9IDE7XG4gICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gQWNjZXNzaW5nIGRvbSBwcm9wZXJ0aWVzIGlzIGFsd2F5cyBmcmFnaWxlLlxuICAgICAgICAgICAgLy8gQWxzbyBhbGxvd3MgdXMgdG8gc2tpcCBgYWRkRXZlbnRMaXN0ZW5yc2AgY2FsbHMgd2l0aCBubyBwcm9wZXIgYHRoaXNgIGNvbnRleHQuXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9yaWdpbmFsQWRkRXZlbnRMaXN0ZW5lci5jYWxsKHRoaXMsIHR5cGUsIGxpc3RlbmVyLCBvcHRpb25zKTtcbiAgICAgIH07XG4gICAgfSk7XG5cbiAgICBmaWxsKHByb3RvLCAncmVtb3ZlRXZlbnRMaXN0ZW5lcicsIGZ1bmN0aW9uKG9yaWdpbmFsUmVtb3ZlRXZlbnRMaXN0ZW5lcjogUmVtb3ZlRXZlbnRMaXN0ZW5lcik6IFJlbW92ZUV2ZW50TGlzdGVuZXIge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKFxuICAgICAgICB0aGlzOiBFbGVtZW50LFxuICAgICAgICB0eXBlOiBzdHJpbmcsXG4gICAgICAgIGxpc3RlbmVyOiBFdmVudExpc3RlbmVyT3JFdmVudExpc3RlbmVyT2JqZWN0LFxuICAgICAgICBvcHRpb25zPzogYm9vbGVhbiB8IEV2ZW50TGlzdGVuZXJPcHRpb25zLFxuICAgICAgKTogKCkgPT4gdm9pZCB7XG4gICAgICAgIGlmICh0eXBlID09PSAnY2xpY2snIHx8IHR5cGUgPT0gJ2tleXByZXNzJykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBlbCA9IHRoaXMgYXMgSW5zdHJ1bWVudGVkRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IGhhbmRsZXJzID0gZWwuX19zZW50cnlfaW5zdHJ1bWVudGF0aW9uX2hhbmRsZXJzX18gfHwge307XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyRm9yVHlwZSA9IGhhbmRsZXJzW3R5cGVdO1xuXG4gICAgICAgICAgICBpZiAoaGFuZGxlckZvclR5cGUpIHtcbiAgICAgICAgICAgICAgaGFuZGxlckZvclR5cGUucmVmQ291bnQgLT0gMTtcbiAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgYXJlIG5vIGxvbmdlciBhbnkgY3VzdG9tIGhhbmRsZXJzIG9mIHRoZSBjdXJyZW50IHR5cGUgb24gdGhpcyBlbGVtZW50LCB3ZSBjYW4gcmVtb3ZlIG91cnMsIHRvby5cbiAgICAgICAgICAgICAgaWYgKGhhbmRsZXJGb3JUeXBlLnJlZkNvdW50IDw9IDApIHtcbiAgICAgICAgICAgICAgICBvcmlnaW5hbFJlbW92ZUV2ZW50TGlzdGVuZXIuY2FsbCh0aGlzLCB0eXBlLCBoYW5kbGVyRm9yVHlwZS5oYW5kbGVyLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBoYW5kbGVyRm9yVHlwZS5oYW5kbGVyID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBoYW5kbGVyc1t0eXBlXTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGVcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIElmIHRoZXJlIGFyZSBubyBsb25nZXIgYW55IGN1c3RvbSBoYW5kbGVycyBvZiBhbnkgdHlwZSBvbiB0aGlzIGVsZW1lbnQsIGNsZWFudXAgZXZlcnl0aGluZy5cbiAgICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGhhbmRsZXJzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgZWwuX19zZW50cnlfaW5zdHJ1bWVudGF0aW9uX2hhbmRsZXJzX187XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAvLyBBY2Nlc3NpbmcgZG9tIHByb3BlcnRpZXMgaXMgYWx3YXlzIGZyYWdpbGUuXG4gICAgICAgICAgICAvLyBBbHNvIGFsbG93cyB1cyB0byBza2lwIGBhZGRFdmVudExpc3RlbnJzYCBjYWxscyB3aXRoIG5vIHByb3BlciBgdGhpc2AgY29udGV4dC5cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb3JpZ2luYWxSZW1vdmVFdmVudExpc3RlbmVyLmNhbGwodGhpcywgdHlwZSwgbGlzdGVuZXIsIG9wdGlvbnMpO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfSk7XG59XG5cbmxldCBfb2xkT25FcnJvckhhbmRsZXI6IE9uRXJyb3JFdmVudEhhbmRsZXIgPSBudWxsO1xuLyoqIEpTRG9jICovXG5mdW5jdGlvbiBpbnN0cnVtZW50RXJyb3IoKTogdm9pZCB7XG4gIF9vbGRPbkVycm9ySGFuZGxlciA9IGdsb2JhbC5vbmVycm9yO1xuXG4gIGdsb2JhbC5vbmVycm9yID0gZnVuY3Rpb24obXNnOiBhbnksIHVybDogYW55LCBsaW5lOiBhbnksIGNvbHVtbjogYW55LCBlcnJvcjogYW55KTogYm9vbGVhbiB7XG4gICAgdHJpZ2dlckhhbmRsZXJzKCdlcnJvcicsIHtcbiAgICAgIGNvbHVtbixcbiAgICAgIGVycm9yLFxuICAgICAgbGluZSxcbiAgICAgIG1zZyxcbiAgICAgIHVybCxcbiAgICB9KTtcblxuICAgIGlmIChfb2xkT25FcnJvckhhbmRsZXIpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgIHJldHVybiBfb2xkT25FcnJvckhhbmRsZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH07XG59XG5cbmxldCBfb2xkT25VbmhhbmRsZWRSZWplY3Rpb25IYW5kbGVyOiAoKGU6IGFueSkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gaW5zdHJ1bWVudFVuaGFuZGxlZFJlamVjdGlvbigpOiB2b2lkIHtcbiAgX29sZE9uVW5oYW5kbGVkUmVqZWN0aW9uSGFuZGxlciA9IGdsb2JhbC5vbnVuaGFuZGxlZHJlamVjdGlvbjtcblxuICBnbG9iYWwub251bmhhbmRsZWRyZWplY3Rpb24gPSBmdW5jdGlvbihlOiBhbnkpOiBib29sZWFuIHtcbiAgICB0cmlnZ2VySGFuZGxlcnMoJ3VuaGFuZGxlZHJlamVjdGlvbicsIGUpO1xuXG4gICAgaWYgKF9vbGRPblVuaGFuZGxlZFJlamVjdGlvbkhhbmRsZXIpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmVmZXItcmVzdC1wYXJhbXNcbiAgICAgIHJldHVybiBfb2xkT25VbmhhbmRsZWRSZWplY3Rpb25IYW5kbGVyLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWU7XG4gIH07XG59XG4iLCAiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgRXZlbnQsIE1lY2hhbmlzbSwgU3RhY2tGcmFtZSB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuXG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tICcuL2dsb2JhbCc7XG5pbXBvcnQgeyBzbmlwTGluZSB9IGZyb20gJy4vc3RyaW5nJztcblxuLyoqXG4gKiBFeHRlbmRlZCBXaW5kb3cgaW50ZXJmYWNlIHRoYXQgYWxsb3dzIGZvciBDcnlwdG8gQVBJIHVzYWdlIGluIElFIGJyb3dzZXJzXG4gKi9cbmludGVyZmFjZSBNc0NyeXB0b1dpbmRvdyBleHRlbmRzIFdpbmRvdyB7XG4gIG1zQ3J5cHRvPzogQ3J5cHRvO1xufVxuXG4vKipcbiAqIFVVSUQ0IGdlbmVyYXRvclxuICpcbiAqIEByZXR1cm5zIHN0cmluZyBHZW5lcmF0ZWQgVVVJRDQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1dWlkNCgpOiBzdHJpbmcge1xuICBjb25zdCBnbG9iYWwgPSBnZXRHbG9iYWxPYmplY3QoKSBhcyBNc0NyeXB0b1dpbmRvdztcbiAgY29uc3QgY3J5cHRvID0gZ2xvYmFsLmNyeXB0byB8fCBnbG9iYWwubXNDcnlwdG87XG5cbiAgaWYgKCEoY3J5cHRvID09PSB2b2lkIDApICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAvLyBVc2Ugd2luZG93LmNyeXB0byBBUEkgaWYgYXZhaWxhYmxlXG4gICAgY29uc3QgYXJyID0gbmV3IFVpbnQxNkFycmF5KDgpO1xuICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMoYXJyKTtcblxuICAgIC8vIHNldCA0IGluIGJ5dGUgN1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1iaXR3aXNlXG4gICAgYXJyWzNdID0gKGFyclszXSAmIDB4ZmZmKSB8IDB4NDAwMDtcbiAgICAvLyBzZXQgMiBtb3N0IHNpZ25pZmljYW50IGJpdHMgb2YgYnl0ZSA5IHRvICcxMCdcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgIGFycls0XSA9IChhcnJbNF0gJiAweDNmZmYpIHwgMHg4MDAwO1xuXG4gICAgY29uc3QgcGFkID0gKG51bTogbnVtYmVyKTogc3RyaW5nID0+IHtcbiAgICAgIGxldCB2ID0gbnVtLnRvU3RyaW5nKDE2KTtcbiAgICAgIHdoaWxlICh2Lmxlbmd0aCA8IDQpIHtcbiAgICAgICAgdiA9IGAwJHt2fWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gdjtcbiAgICB9O1xuXG4gICAgcmV0dXJuIChcbiAgICAgIHBhZChhcnJbMF0pICsgcGFkKGFyclsxXSkgKyBwYWQoYXJyWzJdKSArIHBhZChhcnJbM10pICsgcGFkKGFycls0XSkgKyBwYWQoYXJyWzVdKSArIHBhZChhcnJbNl0pICsgcGFkKGFycls3XSlcbiAgICApO1xuICB9XG4gIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTA1MDM0L2hvdy10by1jcmVhdGUtYS1ndWlkLXV1aWQtaW4tamF2YXNjcmlwdC8yMTE3NTIzIzIxMTc1MjNcbiAgcmV0dXJuICd4eHh4eHh4eHh4eHg0eHh4eXh4eHh4eHh4eHh4eHh4eCcucmVwbGFjZSgvW3h5XS9nLCBjID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tYml0d2lzZVxuICAgIGNvbnN0IHIgPSAoTWF0aC5yYW5kb20oKSAqIDE2KSB8IDA7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICBjb25zdCB2ID0gYyA9PT0gJ3gnID8gciA6IChyICYgMHgzKSB8IDB4ODtcbiAgICByZXR1cm4gdi50b1N0cmluZygxNik7XG4gIH0pO1xufVxuXG4vKipcbiAqIFBhcnNlcyBzdHJpbmcgZm9ybSBvZiBVUkwgaW50byBhbiBvYmplY3RcbiAqIC8vIGJvcnJvd2VkIGZyb20gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjYXBwZW5kaXgtQlxuICogLy8gaW50ZW50aW9uYWxseSB1c2luZyByZWdleCBhbmQgbm90IDxhLz4gaHJlZiBwYXJzaW5nIHRyaWNrIGJlY2F1c2UgUmVhY3QgTmF0aXZlIGFuZCBvdGhlclxuICogLy8gZW52aXJvbm1lbnRzIHdoZXJlIERPTSBtaWdodCBub3QgYmUgYXZhaWxhYmxlXG4gKiBAcmV0dXJucyBwYXJzZWQgVVJMIG9iamVjdFxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VVcmwoXG4gIHVybDogc3RyaW5nLFxuKToge1xuICBob3N0Pzogc3RyaW5nO1xuICBwYXRoPzogc3RyaW5nO1xuICBwcm90b2NvbD86IHN0cmluZztcbiAgcmVsYXRpdmU/OiBzdHJpbmc7XG59IHtcbiAgaWYgKCF1cmwpIHtcbiAgICByZXR1cm4ge307XG4gIH1cblxuICBjb25zdCBtYXRjaCA9IHVybC5tYXRjaCgvXigoW146Lz8jXSspOik/KFxcL1xcLyhbXi8/I10qKSk/KFtePyNdKikoXFw/KFteI10qKSk/KCMoLiopKT8kLyk7XG5cbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8vIGNvZXJjZSB0byB1bmRlZmluZWQgdmFsdWVzIHRvIGVtcHR5IHN0cmluZyBzbyB3ZSBkb24ndCBnZXQgJ3VuZGVmaW5lZCdcbiAgY29uc3QgcXVlcnkgPSBtYXRjaFs2XSB8fCAnJztcbiAgY29uc3QgZnJhZ21lbnQgPSBtYXRjaFs4XSB8fCAnJztcbiAgcmV0dXJuIHtcbiAgICBob3N0OiBtYXRjaFs0XSxcbiAgICBwYXRoOiBtYXRjaFs1XSxcbiAgICBwcm90b2NvbDogbWF0Y2hbMl0sXG4gICAgcmVsYXRpdmU6IG1hdGNoWzVdICsgcXVlcnkgKyBmcmFnbWVudCwgLy8gZXZlcnl0aGluZyBtaW51cyBvcmlnaW5cbiAgfTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBlaXRoZXIgbWVzc2FnZSBvciB0eXBlK3ZhbHVlIGZyb20gYW4gZXZlbnQgdGhhdCBjYW4gYmUgdXNlZCBmb3IgdXNlci1mYWNpbmcgbG9nc1xuICogQHJldHVybnMgZXZlbnQncyBkZXNjcmlwdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RXZlbnREZXNjcmlwdGlvbihldmVudDogRXZlbnQpOiBzdHJpbmcge1xuICBpZiAoZXZlbnQubWVzc2FnZSkge1xuICAgIHJldHVybiBldmVudC5tZXNzYWdlO1xuICB9XG4gIGlmIChldmVudC5leGNlcHRpb24gJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyAmJiBldmVudC5leGNlcHRpb24udmFsdWVzWzBdKSB7XG4gICAgY29uc3QgZXhjZXB0aW9uID0gZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXTtcblxuICAgIGlmIChleGNlcHRpb24udHlwZSAmJiBleGNlcHRpb24udmFsdWUpIHtcbiAgICAgIHJldHVybiBgJHtleGNlcHRpb24udHlwZX06ICR7ZXhjZXB0aW9uLnZhbHVlfWA7XG4gICAgfVxuICAgIHJldHVybiBleGNlcHRpb24udHlwZSB8fCBleGNlcHRpb24udmFsdWUgfHwgZXZlbnQuZXZlbnRfaWQgfHwgJzx1bmtub3duPic7XG4gIH1cbiAgcmV0dXJuIGV2ZW50LmV2ZW50X2lkIHx8ICc8dW5rbm93bj4nO1xufVxuXG4vKipcbiAqIEFkZHMgZXhjZXB0aW9uIHZhbHVlcywgdHlwZSBhbmQgdmFsdWUgdG8gYW4gc3ludGhldGljIEV4Y2VwdGlvbi5cbiAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgdG8gbW9kaWZ5LlxuICogQHBhcmFtIHZhbHVlIFZhbHVlIG9mIHRoZSBleGNlcHRpb24uXG4gKiBAcGFyYW0gdHlwZSBUeXBlIG9mIHRoZSBleGNlcHRpb24uXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRFeGNlcHRpb25UeXBlVmFsdWUoZXZlbnQ6IEV2ZW50LCB2YWx1ZT86IHN0cmluZywgdHlwZT86IHN0cmluZyk6IHZvaWQge1xuICBldmVudC5leGNlcHRpb24gPSBldmVudC5leGNlcHRpb24gfHwge307XG4gIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMgPSBldmVudC5leGNlcHRpb24udmFsdWVzIHx8IFtdO1xuICBldmVudC5leGNlcHRpb24udmFsdWVzWzBdID0gZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXSB8fCB7fTtcbiAgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXS52YWx1ZSA9IGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0udmFsdWUgfHwgdmFsdWUgfHwgJyc7XG4gIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0udHlwZSA9IGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF0udHlwZSB8fCB0eXBlIHx8ICdFcnJvcic7XG59XG5cbi8qKlxuICogQWRkcyBleGNlcHRpb24gbWVjaGFuaXNtIGRhdGEgdG8gYSBnaXZlbiBldmVudC4gVXNlcyBkZWZhdWx0cyBpZiB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyBub3QgcGFzc2VkLlxuICpcbiAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgdG8gbW9kaWZ5LlxuICogQHBhcmFtIG5ld01lY2hhbmlzbSBNZWNoYW5pc20gZGF0YSB0byBhZGQgdG8gdGhlIGV2ZW50LlxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRXhjZXB0aW9uTWVjaGFuaXNtKGV2ZW50OiBFdmVudCwgbmV3TWVjaGFuaXNtPzogUGFydGlhbDxNZWNoYW5pc20+KTogdm9pZCB7XG4gIGlmICghZXZlbnQuZXhjZXB0aW9uIHx8ICFldmVudC5leGNlcHRpb24udmFsdWVzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNvbnN0IGV4Y2VwdGlvblZhbHVlMCA9IGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF07XG5cbiAgY29uc3QgZGVmYXVsdE1lY2hhbmlzbSA9IHsgdHlwZTogJ2dlbmVyaWMnLCBoYW5kbGVkOiB0cnVlIH07XG4gIGNvbnN0IGN1cnJlbnRNZWNoYW5pc20gPSBleGNlcHRpb25WYWx1ZTAubWVjaGFuaXNtO1xuICBleGNlcHRpb25WYWx1ZTAubWVjaGFuaXNtID0geyAuLi5kZWZhdWx0TWVjaGFuaXNtLCAuLi5jdXJyZW50TWVjaGFuaXNtLCAuLi5uZXdNZWNoYW5pc20gfTtcblxuICBpZiAobmV3TWVjaGFuaXNtICYmICdkYXRhJyBpbiBuZXdNZWNoYW5pc20pIHtcbiAgICBjb25zdCBtZXJnZWREYXRhID0geyAuLi5jdXJyZW50TWVjaGFuaXNtPy5kYXRhLCAuLi5uZXdNZWNoYW5pc20uZGF0YSB9O1xuICAgIGV4Y2VwdGlvblZhbHVlMC5tZWNoYW5pc20uZGF0YSA9IG1lcmdlZERhdGE7XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9zZW12ZXIub3JnLyNpcy10aGVyZS1hLXN1Z2dlc3RlZC1yZWd1bGFyLWV4cHJlc3Npb24tcmVnZXgtdG8tY2hlY2stYS1zZW12ZXItc3RyaW5nXG5jb25zdCBTRU1WRVJfUkVHRVhQID0gL14oMHxbMS05XVxcZCopXFwuKDB8WzEtOV1cXGQqKVxcLigwfFsxLTldXFxkKikoPzotKCg/OjB8WzEtOV1cXGQqfFxcZCpbYS16QS1aLV1bMC05YS16QS1aLV0qKSg/OlxcLig/OjB8WzEtOV1cXGQqfFxcZCpbYS16QS1aLV1bMC05YS16QS1aLV0qKSkqKSk/KD86XFwrKFswLTlhLXpBLVotXSsoPzpcXC5bMC05YS16QS1aLV0rKSopKT8kLztcblxuLyoqXG4gKiBSZXByZXNlbnRzIFNlbWFudGljIFZlcnNpb25pbmcgb2JqZWN0XG4gKi9cbmludGVyZmFjZSBTZW1WZXIge1xuICBtYWpvcj86IG51bWJlcjtcbiAgbWlub3I/OiBudW1iZXI7XG4gIHBhdGNoPzogbnVtYmVyO1xuICBwcmVyZWxlYXNlPzogc3RyaW5nO1xuICBidWlsZG1ldGFkYXRhPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFBhcnNlcyBpbnB1dCBpbnRvIGEgU2VtVmVyIGludGVyZmFjZVxuICogQHBhcmFtIGlucHV0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhIHNlbXZlciB2ZXJzaW9uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVNlbXZlcihpbnB1dDogc3RyaW5nKTogU2VtVmVyIHtcbiAgY29uc3QgbWF0Y2ggPSBpbnB1dC5tYXRjaChTRU1WRVJfUkVHRVhQKSB8fCBbXTtcbiAgY29uc3QgbWFqb3IgPSBwYXJzZUludChtYXRjaFsxXSwgMTApO1xuICBjb25zdCBtaW5vciA9IHBhcnNlSW50KG1hdGNoWzJdLCAxMCk7XG4gIGNvbnN0IHBhdGNoID0gcGFyc2VJbnQobWF0Y2hbM10sIDEwKTtcbiAgcmV0dXJuIHtcbiAgICBidWlsZG1ldGFkYXRhOiBtYXRjaFs1XSxcbiAgICBtYWpvcjogaXNOYU4obWFqb3IpID8gdW5kZWZpbmVkIDogbWFqb3IsXG4gICAgbWlub3I6IGlzTmFOKG1pbm9yKSA/IHVuZGVmaW5lZCA6IG1pbm9yLFxuICAgIHBhdGNoOiBpc05hTihwYXRjaCkgPyB1bmRlZmluZWQgOiBwYXRjaCxcbiAgICBwcmVyZWxlYXNlOiBtYXRjaFs0XSxcbiAgfTtcbn1cblxuY29uc3QgZGVmYXVsdFJldHJ5QWZ0ZXIgPSA2MCAqIDEwMDA7IC8vIDYwIHNlY29uZHNcblxuLyoqXG4gKiBFeHRyYWN0cyBSZXRyeS1BZnRlciB2YWx1ZSBmcm9tIHRoZSByZXF1ZXN0IGhlYWRlciBvciByZXR1cm5zIGRlZmF1bHQgdmFsdWVcbiAqIEBwYXJhbSBub3cgY3VycmVudCB1bml4IHRpbWVzdGFtcFxuICogQHBhcmFtIGhlYWRlciBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgJ1JldHJ5LUFmdGVyJyBoZWFkZXJcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlUmV0cnlBZnRlckhlYWRlcihub3c6IG51bWJlciwgaGVhZGVyPzogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCk6IG51bWJlciB7XG4gIGlmICghaGVhZGVyKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRSZXRyeUFmdGVyO1xuICB9XG5cbiAgY29uc3QgaGVhZGVyRGVsYXkgPSBwYXJzZUludChgJHtoZWFkZXJ9YCwgMTApO1xuICBpZiAoIWlzTmFOKGhlYWRlckRlbGF5KSkge1xuICAgIHJldHVybiBoZWFkZXJEZWxheSAqIDEwMDA7XG4gIH1cblxuICBjb25zdCBoZWFkZXJEYXRlID0gRGF0ZS5wYXJzZShgJHtoZWFkZXJ9YCk7XG4gIGlmICghaXNOYU4oaGVhZGVyRGF0ZSkpIHtcbiAgICByZXR1cm4gaGVhZGVyRGF0ZSAtIG5vdztcbiAgfVxuXG4gIHJldHVybiBkZWZhdWx0UmV0cnlBZnRlcjtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIGFkZHMgY29udGV4dCAocHJlL3Bvc3QvbGluZSkgbGluZXMgdG8gdGhlIHByb3ZpZGVkIGZyYW1lXG4gKlxuICogQHBhcmFtIGxpbmVzIHN0cmluZ1tdIGNvbnRhaW5pbmcgYWxsIGxpbmVzXG4gKiBAcGFyYW0gZnJhbWUgU3RhY2tGcmFtZSB0aGF0IHdpbGwgYmUgbXV0YXRlZFxuICogQHBhcmFtIGxpbmVzT2ZDb250ZXh0IG51bWJlciBvZiBjb250ZXh0IGxpbmVzIHdlIHdhbnQgdG8gYWRkIHByZS9wb3N0XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRDb250ZXh0VG9GcmFtZShsaW5lczogc3RyaW5nW10sIGZyYW1lOiBTdGFja0ZyYW1lLCBsaW5lc09mQ29udGV4dDogbnVtYmVyID0gNSk6IHZvaWQge1xuICBjb25zdCBsaW5lbm8gPSBmcmFtZS5saW5lbm8gfHwgMDtcbiAgY29uc3QgbWF4TGluZXMgPSBsaW5lcy5sZW5ndGg7XG4gIGNvbnN0IHNvdXJjZUxpbmUgPSBNYXRoLm1heChNYXRoLm1pbihtYXhMaW5lcywgbGluZW5vIC0gMSksIDApO1xuXG4gIGZyYW1lLnByZV9jb250ZXh0ID0gbGluZXNcbiAgICAuc2xpY2UoTWF0aC5tYXgoMCwgc291cmNlTGluZSAtIGxpbmVzT2ZDb250ZXh0KSwgc291cmNlTGluZSlcbiAgICAubWFwKChsaW5lOiBzdHJpbmcpID0+IHNuaXBMaW5lKGxpbmUsIDApKTtcblxuICBmcmFtZS5jb250ZXh0X2xpbmUgPSBzbmlwTGluZShsaW5lc1tNYXRoLm1pbihtYXhMaW5lcyAtIDEsIHNvdXJjZUxpbmUpXSwgZnJhbWUuY29sbm8gfHwgMCk7XG5cbiAgZnJhbWUucG9zdF9jb250ZXh0ID0gbGluZXNcbiAgICAuc2xpY2UoTWF0aC5taW4oc291cmNlTGluZSArIDEsIG1heExpbmVzKSwgc291cmNlTGluZSArIDEgKyBsaW5lc09mQ29udGV4dClcbiAgICAubWFwKChsaW5lOiBzdHJpbmcpID0+IHNuaXBMaW5lKGxpbmUsIDApKTtcbn1cblxuLyoqXG4gKiBTdHJpcCB0aGUgcXVlcnkgc3RyaW5nIGFuZCBmcmFnbWVudCBvZmYgb2YgYSBnaXZlbiBVUkwgb3IgcGF0aCAoaWYgcHJlc2VudClcbiAqXG4gKiBAcGFyYW0gdXJsUGF0aCBGdWxsIFVSTCBvciBwYXRoLCBpbmNsdWRpbmcgcG9zc2libGUgcXVlcnkgc3RyaW5nIGFuZC9vciBmcmFnbWVudFxuICogQHJldHVybnMgVVJMIG9yIHBhdGggd2l0aG91dCBxdWVyeSBzdHJpbmcgb3IgZnJhZ21lbnRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0cmlwVXJsUXVlcnlBbmRGcmFnbWVudCh1cmxQYXRoOiBzdHJpbmcpOiBzdHJpbmcge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1lc2NhcGVcbiAgcmV0dXJuIHVybFBhdGguc3BsaXQoL1tcXD8jXS8sIDEpWzBdO1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIG9yIG5vdCB3ZSd2ZSBhbHJlYWR5IGNhcHR1cmVkIHRoZSBnaXZlbiBleGNlcHRpb24gKG5vdGU6IG5vdCBhbiBpZGVudGljYWwgZXhjZXB0aW9uIC0gdGhlIHZlcnkgb2JqZWN0XG4gKiBpbiBxdWVzdGlvbiksIGFuZCBtYXJrcyBpdCBjYXB0dXJlZCBpZiBub3QuXG4gKlxuICogVGhpcyBpcyB1c2VmdWwgYmVjYXVzZSBpdCdzIHBvc3NpYmxlIGZvciBhbiBlcnJvciB0byBnZXQgY2FwdHVyZWQgYnkgbW9yZSB0aGFuIG9uZSBtZWNoYW5pc20uIEFmdGVyIHdlIGludGVyY2VwdCBhbmRcbiAqIHJlY29yZCBhbiBlcnJvciwgd2UgcmV0aHJvdyBpdCAoYXNzdW1pbmcgd2UndmUgaW50ZXJjZXB0ZWQgaXQgYmVmb3JlIGl0J3MgcmVhY2hlZCB0aGUgdG9wLWxldmVsIGdsb2JhbCBoYW5kbGVycyksIHNvXG4gKiB0aGF0IHdlIGRvbid0IGludGVyZmVyZSB3aXRoIHdoYXRldmVyIGVmZmVjdHMgdGhlIGVycm9yIG1pZ2h0IGhhdmUgaGFkIHdlcmUgdGhlIFNESyBub3QgdGhlcmUuIEF0IHRoYXQgcG9pbnQsIGJlY2F1c2VcbiAqIHRoZSBlcnJvciBoYXMgYmVlbiByZXRocm93biwgaXQncyBwb3NzaWJsZSBmb3IgaXQgdG8gYnViYmxlIHVwIHRvIHNvbWUgb3RoZXIgY29kZSB3ZSd2ZSBpbnN0cnVtZW50ZWQuIElmIGl0J3Mgbm90XG4gKiBjYXVnaHQgYWZ0ZXIgdGhhdCwgaXQgd2lsbCBidWJibGUgYWxsIHRoZSB3YXkgdXAgdG8gdGhlIGdsb2JhbCBoYW5kbGVycyAod2hpY2ggb2YgY291cnNlIHdlIGFsc28gaW5zdHJ1bWVudCkuIFRoaXNcbiAqIGZ1bmN0aW9uIGhlbHBzIHVzIGVuc3VyZSB0aGF0IGV2ZW4gaWYgd2UgZW5jb3VudGVyIHRoZSBzYW1lIGVycm9yIG1vcmUgdGhhbiBvbmNlLCB3ZSBvbmx5IHJlY29yZCBpdCB0aGUgZmlyc3QgdGltZSB3ZVxuICogc2VlIGl0LlxuICpcbiAqIE5vdGU6IEl0IHdpbGwgaWdub3JlIHByaW1pdGl2ZXMgKGFsd2F5cyByZXR1cm4gYGZhbHNlYCBhbmQgbm90IG1hcmsgdGhlbSBhcyBzZWVuKSwgYXMgcHJvcGVydGllcyBjYW4ndCBiZSBzZXQgb25cbiAqIHRoZW0uIHtAbGluazogT2JqZWN0Lm9iamVjdGlmeX0gY2FuIGJlIHVzZWQgb24gZXhjZXB0aW9ucyB0byBjb252ZXJ0IGFueSB0aGF0IGFyZSBwcmltaXRpdmVzIGludG8gdGhlaXIgZXF1aXZhbGVudFxuICogb2JqZWN0IHdyYXBwZXIgZm9ybXMgc28gdGhhdCB0aGlzIGNoZWNrIHdpbGwgYWx3YXlzIHdvcmsuIEhvd2V2ZXIsIGJlY2F1c2Ugd2UgbmVlZCB0byBmbGFnIHRoZSBleGFjdCBvYmplY3Qgd2hpY2hcbiAqIHdpbGwgZ2V0IHJldGhyb3duLCBhbmQgYmVjYXVzZSB0aGF0IHJldGhyb3dpbmcgaGFwcGVucyBvdXRzaWRlIG9mIHRoZSBldmVudCBwcm9jZXNzaW5nIHBpcGVsaW5lLCB0aGUgb2JqZWN0aWZpY2F0aW9uXG4gKiBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoZSBleGNlcHRpb24gY2FwdHVyZWQuXG4gKlxuICogQHBhcmFtIEEgdGhyb3duIGV4Y2VwdGlvbiB0byBjaGVjayBvciBmbGFnIGFzIGhhdmluZyBiZWVuIHNlZW5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgZXhjZXB0aW9uIGhhcyBhbHJlYWR5IGJlZW4gY2FwdHVyZWQsIGBmYWxzZWAgaWYgbm90ICh3aXRoIHRoZSBzaWRlIGVmZmVjdCBvZiBtYXJraW5nIGl0IHNlZW4pXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja09yU2V0QWxyZWFkeUNhdWdodChleGNlcHRpb246IHVua25vd24pOiBib29sZWFuIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICBpZiAoKGV4Y2VwdGlvbiBhcyBhbnkpPy5fX3NlbnRyeV9jYXB0dXJlZF9fKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICB0cnkge1xuICAgIC8vIHNldCBpdCB0aGlzIHdheSByYXRoZXIgdGhhbiBieSBhc3NpZ25tZW50IHNvIHRoYXQgaXQncyBub3QgZW5udW1lcmFibGUgYW5kIHRoZXJlZm9yZSBpc24ndCByZWNvcmRlZCBieSB0aGVcbiAgICAvLyBgRXh0cmFFcnJvckRhdGFgIGludGVncmF0aW9uXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4Y2VwdGlvbiwgJ19fc2VudHJ5X2NhcHR1cmVkX18nLCB7XG4gICAgICB2YWx1ZTogdHJ1ZSxcbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gYGV4Y2VwdGlvbmAgaXMgYSBwcmltaXRpdmUsIHNvIHdlIGNhbid0IG1hcmsgaXQgc2VlblxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuIiwgIi8vIFNsaWdodGx5IG1vZGlmaWVkIChubyBJRTggc3VwcG9ydCwgRVM2KSBhbmQgdHJhbnNjcmliZWQgdG8gVHlwZVNjcmlwdFxuLy8gaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2NhbHZpbm1ldGNhbGYvcm9sbHVwLXBsdWdpbi1ub2RlLWJ1aWx0aW5zL21hc3Rlci9zcmMvZXM2L3BhdGguanNcblxuLyoqIEpTRG9jICovXG5mdW5jdGlvbiBub3JtYWxpemVBcnJheShwYXJ0czogc3RyaW5nW10sIGFsbG93QWJvdmVSb290PzogYm9vbGVhbik6IHN0cmluZ1tdIHtcbiAgLy8gaWYgdGhlIHBhdGggdHJpZXMgdG8gZ28gYWJvdmUgdGhlIHJvb3QsIGB1cGAgZW5kcyB1cCA+IDBcbiAgbGV0IHVwID0gMDtcbiAgZm9yIChsZXQgaSA9IHBhcnRzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgY29uc3QgbGFzdCA9IHBhcnRzW2ldO1xuICAgIGlmIChsYXN0ID09PSAnLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICB9IGVsc2UgaWYgKGxhc3QgPT09ICcuLicpIHtcbiAgICAgIHBhcnRzLnNwbGljZShpLCAxKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wbHVzcGx1c1xuICAgICAgdXArKztcbiAgICB9IGVsc2UgaWYgKHVwKSB7XG4gICAgICBwYXJ0cy5zcGxpY2UoaSwgMSk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGx1c3BsdXNcbiAgICAgIHVwLS07XG4gICAgfVxuICB9XG5cbiAgLy8gaWYgdGhlIHBhdGggaXMgYWxsb3dlZCB0byBnbyBhYm92ZSB0aGUgcm9vdCwgcmVzdG9yZSBsZWFkaW5nIC4uc1xuICBpZiAoYWxsb3dBYm92ZVJvb3QpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGx1c3BsdXNcbiAgICBmb3IgKDsgdXAtLTsgdXApIHtcbiAgICAgIHBhcnRzLnVuc2hpZnQoJy4uJyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHBhcnRzO1xufVxuXG4vLyBTcGxpdCBhIGZpbGVuYW1lIGludG8gW3Jvb3QsIGRpciwgYmFzZW5hbWUsIGV4dF0sIHVuaXggdmVyc2lvblxuLy8gJ3Jvb3QnIGlzIGp1c3QgYSBzbGFzaCwgb3Igbm90aGluZy5cbmNvbnN0IHNwbGl0UGF0aFJlID0gL14oXFwvP3wpKFtcXHNcXFNdKj8pKCg/OlxcLnsxLDJ9fFteL10rP3wpKFxcLlteLi9dKnwpKSg/OlsvXSopJC87XG4vKiogSlNEb2MgKi9cbmZ1bmN0aW9uIHNwbGl0UGF0aChmaWxlbmFtZTogc3RyaW5nKTogc3RyaW5nW10ge1xuICBjb25zdCBwYXJ0cyA9IHNwbGl0UGF0aFJlLmV4ZWMoZmlsZW5hbWUpO1xuICByZXR1cm4gcGFydHMgPyBwYXJ0cy5zbGljZSgxKSA6IFtdO1xufVxuXG4vLyBwYXRoLnJlc29sdmUoW2Zyb20gLi4uXSwgdG8pXG4vLyBwb3NpeCB2ZXJzaW9uXG4vKiogSlNEb2MgKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlKC4uLmFyZ3M6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgbGV0IHJlc29sdmVkUGF0aCA9ICcnO1xuICBsZXQgcmVzb2x2ZWRBYnNvbHV0ZSA9IGZhbHNlO1xuXG4gIGZvciAobGV0IGkgPSBhcmdzLmxlbmd0aCAtIDE7IGkgPj0gLTEgJiYgIXJlc29sdmVkQWJzb2x1dGU7IGktLSkge1xuICAgIGNvbnN0IHBhdGggPSBpID49IDAgPyBhcmdzW2ldIDogJy8nO1xuXG4gICAgLy8gU2tpcCBlbXB0eSBlbnRyaWVzXG4gICAgaWYgKCFwYXRoKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICByZXNvbHZlZFBhdGggPSBgJHtwYXRofS8ke3Jlc29sdmVkUGF0aH1gO1xuICAgIHJlc29sdmVkQWJzb2x1dGUgPSBwYXRoLmNoYXJBdCgwKSA9PT0gJy8nO1xuICB9XG5cbiAgLy8gQXQgdGhpcyBwb2ludCB0aGUgcGF0aCBzaG91bGQgYmUgcmVzb2x2ZWQgdG8gYSBmdWxsIGFic29sdXRlIHBhdGgsIGJ1dFxuICAvLyBoYW5kbGUgcmVsYXRpdmUgcGF0aHMgdG8gYmUgc2FmZSAobWlnaHQgaGFwcGVuIHdoZW4gcHJvY2Vzcy5jd2QoKSBmYWlscylcblxuICAvLyBOb3JtYWxpemUgdGhlIHBhdGhcbiAgcmVzb2x2ZWRQYXRoID0gbm9ybWFsaXplQXJyYXkoXG4gICAgcmVzb2x2ZWRQYXRoLnNwbGl0KCcvJykuZmlsdGVyKHAgPT4gISFwKSxcbiAgICAhcmVzb2x2ZWRBYnNvbHV0ZSxcbiAgKS5qb2luKCcvJyk7XG5cbiAgcmV0dXJuIChyZXNvbHZlZEFic29sdXRlID8gJy8nIDogJycpICsgcmVzb2x2ZWRQYXRoIHx8ICcuJztcbn1cblxuLyoqIEpTRG9jICovXG5mdW5jdGlvbiB0cmltKGFycjogc3RyaW5nW10pOiBzdHJpbmdbXSB7XG4gIGxldCBzdGFydCA9IDA7XG4gIGZvciAoOyBzdGFydCA8IGFyci5sZW5ndGg7IHN0YXJ0KyspIHtcbiAgICBpZiAoYXJyW3N0YXJ0XSAhPT0gJycpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGxldCBlbmQgPSBhcnIubGVuZ3RoIC0gMTtcbiAgZm9yICg7IGVuZCA+PSAwOyBlbmQtLSkge1xuICAgIGlmIChhcnJbZW5kXSAhPT0gJycpIHtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGFydCA+IGVuZCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gYXJyLnNsaWNlKHN0YXJ0LCBlbmQgLSBzdGFydCArIDEpO1xufVxuXG4vLyBwYXRoLnJlbGF0aXZlKGZyb20sIHRvKVxuLy8gcG9zaXggdmVyc2lvblxuLyoqIEpTRG9jICovXG5leHBvcnQgZnVuY3Rpb24gcmVsYXRpdmUoZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nKTogc3RyaW5nIHtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tcGFyYW0tcmVhc3NpZ24gKi9cbiAgZnJvbSA9IHJlc29sdmUoZnJvbSkuc3Vic3RyKDEpO1xuICB0byA9IHJlc29sdmUodG8pLnN1YnN0cigxKTtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuXG4gIGNvbnN0IGZyb21QYXJ0cyA9IHRyaW0oZnJvbS5zcGxpdCgnLycpKTtcbiAgY29uc3QgdG9QYXJ0cyA9IHRyaW0odG8uc3BsaXQoJy8nKSk7XG5cbiAgY29uc3QgbGVuZ3RoID0gTWF0aC5taW4oZnJvbVBhcnRzLmxlbmd0aCwgdG9QYXJ0cy5sZW5ndGgpO1xuICBsZXQgc2FtZVBhcnRzTGVuZ3RoID0gbGVuZ3RoO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGZyb21QYXJ0c1tpXSAhPT0gdG9QYXJ0c1tpXSkge1xuICAgICAgc2FtZVBhcnRzTGVuZ3RoID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGxldCBvdXRwdXRQYXJ0cyA9IFtdO1xuICBmb3IgKGxldCBpID0gc2FtZVBhcnRzTGVuZ3RoOyBpIDwgZnJvbVBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgb3V0cHV0UGFydHMucHVzaCgnLi4nKTtcbiAgfVxuXG4gIG91dHB1dFBhcnRzID0gb3V0cHV0UGFydHMuY29uY2F0KHRvUGFydHMuc2xpY2Uoc2FtZVBhcnRzTGVuZ3RoKSk7XG5cbiAgcmV0dXJuIG91dHB1dFBhcnRzLmpvaW4oJy8nKTtcbn1cblxuLy8gcGF0aC5ub3JtYWxpemUocGF0aClcbi8vIHBvc2l4IHZlcnNpb25cbi8qKiBKU0RvYyAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgaXNQYXRoQWJzb2x1dGUgPSBpc0Fic29sdXRlKHBhdGgpO1xuICBjb25zdCB0cmFpbGluZ1NsYXNoID0gcGF0aC5zdWJzdHIoLTEpID09PSAnLyc7XG5cbiAgLy8gTm9ybWFsaXplIHRoZSBwYXRoXG4gIGxldCBub3JtYWxpemVkUGF0aCA9IG5vcm1hbGl6ZUFycmF5KFxuICAgIHBhdGguc3BsaXQoJy8nKS5maWx0ZXIocCA9PiAhIXApLFxuICAgICFpc1BhdGhBYnNvbHV0ZSxcbiAgKS5qb2luKCcvJyk7XG5cbiAgaWYgKCFub3JtYWxpemVkUGF0aCAmJiAhaXNQYXRoQWJzb2x1dGUpIHtcbiAgICBub3JtYWxpemVkUGF0aCA9ICcuJztcbiAgfVxuICBpZiAobm9ybWFsaXplZFBhdGggJiYgdHJhaWxpbmdTbGFzaCkge1xuICAgIG5vcm1hbGl6ZWRQYXRoICs9ICcvJztcbiAgfVxuXG4gIHJldHVybiAoaXNQYXRoQWJzb2x1dGUgPyAnLycgOiAnJykgKyBub3JtYWxpemVkUGF0aDtcbn1cblxuLy8gcG9zaXggdmVyc2lvblxuLyoqIEpTRG9jICovXG5leHBvcnQgZnVuY3Rpb24gaXNBYnNvbHV0ZShwYXRoOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHBhdGguY2hhckF0KDApID09PSAnLyc7XG59XG5cbi8vIHBvc2l4IHZlcnNpb25cbi8qKiBKU0RvYyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGpvaW4oLi4uYXJnczogc3RyaW5nW10pOiBzdHJpbmcge1xuICByZXR1cm4gbm9ybWFsaXplUGF0aChhcmdzLmpvaW4oJy8nKSk7XG59XG5cbi8qKiBKU0RvYyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRpcm5hbWUocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgcmVzdWx0ID0gc3BsaXRQYXRoKHBhdGgpO1xuICBjb25zdCByb290ID0gcmVzdWx0WzBdO1xuICBsZXQgZGlyID0gcmVzdWx0WzFdO1xuXG4gIGlmICghcm9vdCAmJiAhZGlyKSB7XG4gICAgLy8gTm8gZGlybmFtZSB3aGF0c29ldmVyXG4gICAgcmV0dXJuICcuJztcbiAgfVxuXG4gIGlmIChkaXIpIHtcbiAgICAvLyBJdCBoYXMgYSBkaXJuYW1lLCBzdHJpcCB0cmFpbGluZyBzbGFzaFxuICAgIGRpciA9IGRpci5zdWJzdHIoMCwgZGlyLmxlbmd0aCAtIDEpO1xuICB9XG5cbiAgcmV0dXJuIHJvb3QgKyBkaXI7XG59XG5cbi8qKiBKU0RvYyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJhc2VuYW1lKHBhdGg6IHN0cmluZywgZXh0Pzogc3RyaW5nKTogc3RyaW5nIHtcbiAgbGV0IGYgPSBzcGxpdFBhdGgocGF0aClbMl07XG4gIGlmIChleHQgJiYgZi5zdWJzdHIoZXh0Lmxlbmd0aCAqIC0xKSA9PT0gZXh0KSB7XG4gICAgZiA9IGYuc3Vic3RyKDAsIGYubGVuZ3RoIC0gZXh0Lmxlbmd0aCk7XG4gIH1cbiAgcmV0dXJuIGY7XG59XG4iLCAiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LWZ1bmN0aW9uLXJldHVybi10eXBlICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZWRlZiAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgaXNUaGVuYWJsZSB9IGZyb20gJy4vaXMnO1xuXG4vKiogU3luY1Byb21pc2UgaW50ZXJuYWwgc3RhdGVzICovXG5jb25zdCBlbnVtIFN0YXRlcyB7XG4gIC8qKiBQZW5kaW5nICovXG4gIFBFTkRJTkcgPSAnUEVORElORycsXG4gIC8qKiBSZXNvbHZlZCAvIE9LICovXG4gIFJFU09MVkVEID0gJ1JFU09MVkVEJyxcbiAgLyoqIFJlamVjdGVkIC8gRXJyb3IgKi9cbiAgUkVKRUNURUQgPSAnUkVKRUNURUQnLFxufVxuXG4vKipcbiAqIFRoZW5hYmxlIGNsYXNzIHRoYXQgYmVoYXZlcyBsaWtlIGEgUHJvbWlzZSBhbmQgZm9sbG93cyBpdCdzIGludGVyZmFjZVxuICogYnV0IGlzIG5vdCBhc3luYyBpbnRlcm5hbGx5XG4gKi9cbmNsYXNzIFN5bmNQcm9taXNlPFQ+IGltcGxlbWVudHMgUHJvbWlzZUxpa2U8VD4ge1xuICBwcml2YXRlIF9zdGF0ZTogU3RhdGVzID0gU3RhdGVzLlBFTkRJTkc7XG4gIHByaXZhdGUgX2hhbmRsZXJzOiBBcnJheTx7XG4gICAgZG9uZTogYm9vbGVhbjtcbiAgICBvbmZ1bGZpbGxlZD86ICgodmFsdWU6IFQpID0+IFQgfCBQcm9taXNlTGlrZTxUPikgfCBudWxsO1xuICAgIG9ucmVqZWN0ZWQ/OiAoKHJlYXNvbjogYW55KSA9PiBhbnkpIHwgbnVsbDtcbiAgfT4gPSBbXTtcbiAgcHJpdmF0ZSBfdmFsdWU6IGFueTtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgZXhlY3V0b3I6IChyZXNvbHZlOiAodmFsdWU/OiBUIHwgUHJvbWlzZUxpa2U8VD4gfCBudWxsKSA9PiB2b2lkLCByZWplY3Q6IChyZWFzb24/OiBhbnkpID0+IHZvaWQpID0+IHZvaWQsXG4gICkge1xuICAgIHRyeSB7XG4gICAgICBleGVjdXRvcih0aGlzLl9yZXNvbHZlLCB0aGlzLl9yZWplY3QpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuX3JlamVjdChlKTtcbiAgICB9XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHVibGljIHN0YXRpYyByZXNvbHZlPFQ+KHZhbHVlOiBUIHwgUHJvbWlzZUxpa2U8VD4pOiBQcm9taXNlTGlrZTxUPiB7XG4gICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHB1YmxpYyBzdGF0aWMgcmVqZWN0PFQgPSBuZXZlcj4ocmVhc29uPzogYW55KTogUHJvbWlzZUxpa2U8VD4ge1xuICAgIHJldHVybiBuZXcgU3luY1Byb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgfSk7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHVibGljIHN0YXRpYyBhbGw8VSA9IGFueT4oY29sbGVjdGlvbjogQXJyYXk8VSB8IFByb21pc2VMaWtlPFU+Pik6IFByb21pc2VMaWtlPFVbXT4ge1xuICAgIHJldHVybiBuZXcgU3luY1Byb21pc2U8VVtdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkoY29sbGVjdGlvbikpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoYFByb21pc2UuYWxsIHJlcXVpcmVzIGFuIGFycmF5IGFzIGlucHV0LmApKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29sbGVjdGlvbi5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmVzb2x2ZShbXSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IGNvdW50ZXIgPSBjb2xsZWN0aW9uLmxlbmd0aDtcbiAgICAgIGNvbnN0IHJlc29sdmVkQ29sbGVjdGlvbjogVVtdID0gW107XG5cbiAgICAgIGNvbGxlY3Rpb24uZm9yRWFjaCgoaXRlbSwgaW5kZXgpID0+IHtcbiAgICAgICAgdm9pZCBTeW5jUHJvbWlzZS5yZXNvbHZlKGl0ZW0pXG4gICAgICAgICAgLnRoZW4odmFsdWUgPT4ge1xuICAgICAgICAgICAgcmVzb2x2ZWRDb2xsZWN0aW9uW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgICAgY291bnRlciAtPSAxO1xuXG4gICAgICAgICAgICBpZiAoY291bnRlciAhPT0gMCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNvbHZlKHJlc29sdmVkQ29sbGVjdGlvbik7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAudGhlbihudWxsLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHVibGljIHRoZW48VFJlc3VsdDEgPSBULCBUUmVzdWx0MiA9IG5ldmVyPihcbiAgICBvbmZ1bGZpbGxlZD86ICgodmFsdWU6IFQpID0+IFRSZXN1bHQxIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDE+KSB8IG51bGwsXG4gICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQyIHwgUHJvbWlzZUxpa2U8VFJlc3VsdDI+KSB8IG51bGwsXG4gICk6IFByb21pc2VMaWtlPFRSZXN1bHQxIHwgVFJlc3VsdDI+IHtcbiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHRoaXMuX2F0dGFjaEhhbmRsZXIoe1xuICAgICAgICBkb25lOiBmYWxzZSxcbiAgICAgICAgb25mdWxmaWxsZWQ6IHJlc3VsdCA9PiB7XG4gICAgICAgICAgaWYgKCFvbmZ1bGZpbGxlZCkge1xuICAgICAgICAgICAgLy8gVE9ETzogXHUwMEFGXFxfKFx1MzBDNClfL1x1MDBBRlxuICAgICAgICAgICAgLy8gVE9ETzogRklYTUVcbiAgICAgICAgICAgIHJlc29sdmUocmVzdWx0IGFzIGFueSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXNvbHZlKG9uZnVsZmlsbGVkKHJlc3VsdCkpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9ucmVqZWN0ZWQ6IHJlYXNvbiA9PiB7XG4gICAgICAgICAgaWYgKCFvbnJlamVjdGVkKSB7XG4gICAgICAgICAgICByZWplY3QocmVhc29uKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJlc29sdmUob25yZWplY3RlZChyZWFzb24pKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHVibGljIGNhdGNoPFRSZXN1bHQgPSBuZXZlcj4oXG4gICAgb25yZWplY3RlZD86ICgocmVhc29uOiBhbnkpID0+IFRSZXN1bHQgfCBQcm9taXNlTGlrZTxUUmVzdWx0PikgfCBudWxsLFxuICApOiBQcm9taXNlTGlrZTxUIHwgVFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnRoZW4odmFsID0+IHZhbCwgb25yZWplY3RlZCk7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHVibGljIGZpbmFsbHk8VFJlc3VsdD4ob25maW5hbGx5PzogKCgpID0+IHZvaWQpIHwgbnVsbCk6IFByb21pc2VMaWtlPFRSZXN1bHQ+IHtcbiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlPFRSZXN1bHQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGxldCB2YWw6IFRSZXN1bHQgfCBhbnk7XG4gICAgICBsZXQgaXNSZWplY3RlZDogYm9vbGVhbjtcblxuICAgICAgcmV0dXJuIHRoaXMudGhlbihcbiAgICAgICAgdmFsdWUgPT4ge1xuICAgICAgICAgIGlzUmVqZWN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICB2YWwgPSB2YWx1ZTtcbiAgICAgICAgICBpZiAob25maW5hbGx5KSB7XG4gICAgICAgICAgICBvbmZpbmFsbHkoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHJlYXNvbiA9PiB7XG4gICAgICAgICAgaXNSZWplY3RlZCA9IHRydWU7XG4gICAgICAgICAgdmFsID0gcmVhc29uO1xuICAgICAgICAgIGlmIChvbmZpbmFsbHkpIHtcbiAgICAgICAgICAgIG9uZmluYWxseSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICkudGhlbigoKSA9PiB7XG4gICAgICAgIGlmIChpc1JlamVjdGVkKSB7XG4gICAgICAgICAgcmVqZWN0KHZhbCk7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2ZSgodmFsIGFzIHVua25vd24pIGFzIGFueSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwdWJsaWMgdG9TdHJpbmcoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJ1tvYmplY3QgU3luY1Byb21pc2VdJztcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9yZXNvbHZlID0gKHZhbHVlPzogVCB8IFByb21pc2VMaWtlPFQ+IHwgbnVsbCkgPT4ge1xuICAgIHRoaXMuX3NldFJlc3VsdChTdGF0ZXMuUkVTT0xWRUQsIHZhbHVlKTtcbiAgfTtcblxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfcmVqZWN0ID0gKHJlYXNvbj86IGFueSkgPT4ge1xuICAgIHRoaXMuX3NldFJlc3VsdChTdGF0ZXMuUkVKRUNURUQsIHJlYXNvbik7XG4gIH07XG5cbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NldFJlc3VsdCA9IChzdGF0ZTogU3RhdGVzLCB2YWx1ZT86IFQgfCBQcm9taXNlTGlrZTxUPiB8IGFueSkgPT4ge1xuICAgIGlmICh0aGlzLl9zdGF0ZSAhPT0gU3RhdGVzLlBFTkRJTkcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoaXNUaGVuYWJsZSh2YWx1ZSkpIHtcbiAgICAgIHZvaWQgKHZhbHVlIGFzIFByb21pc2VMaWtlPFQ+KS50aGVuKHRoaXMuX3Jlc29sdmUsIHRoaXMuX3JlamVjdCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fc3RhdGUgPSBzdGF0ZTtcbiAgICB0aGlzLl92YWx1ZSA9IHZhbHVlO1xuXG4gICAgdGhpcy5fZXhlY3V0ZUhhbmRsZXJzKCk7XG4gIH07XG5cbiAgLy8gVE9ETzogRklYTUVcbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2F0dGFjaEhhbmRsZXIgPSAoaGFuZGxlcjoge1xuICAgIC8qKiBKU0RvYyAqL1xuICAgIGRvbmU6IGJvb2xlYW47XG4gICAgLyoqIEpTRG9jICovXG4gICAgb25mdWxmaWxsZWQ/KHZhbHVlOiBUKTogYW55O1xuICAgIC8qKiBKU0RvYyAqL1xuICAgIG9ucmVqZWN0ZWQ/KHJlYXNvbjogYW55KTogYW55O1xuICB9KSA9PiB7XG4gICAgdGhpcy5faGFuZGxlcnMgPSB0aGlzLl9oYW5kbGVycy5jb25jYXQoaGFuZGxlcik7XG4gICAgdGhpcy5fZXhlY3V0ZUhhbmRsZXJzKCk7XG4gIH07XG5cbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2V4ZWN1dGVIYW5kbGVycyA9ICgpID0+IHtcbiAgICBpZiAodGhpcy5fc3RhdGUgPT09IFN0YXRlcy5QRU5ESU5HKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY2FjaGVkSGFuZGxlcnMgPSB0aGlzLl9oYW5kbGVycy5zbGljZSgpO1xuICAgIHRoaXMuX2hhbmRsZXJzID0gW107XG5cbiAgICBjYWNoZWRIYW5kbGVycy5mb3JFYWNoKGhhbmRsZXIgPT4ge1xuICAgICAgaWYgKGhhbmRsZXIuZG9uZSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9zdGF0ZSA9PT0gU3RhdGVzLlJFU09MVkVEKSB7XG4gICAgICAgIGlmIChoYW5kbGVyLm9uZnVsZmlsbGVkKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1mbG9hdGluZy1wcm9taXNlc1xuICAgICAgICAgIGhhbmRsZXIub25mdWxmaWxsZWQoKHRoaXMuX3ZhbHVlIGFzIHVua25vd24pIGFzIGFueSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3N0YXRlID09PSBTdGF0ZXMuUkVKRUNURUQpIHtcbiAgICAgICAgaWYgKGhhbmRsZXIub25yZWplY3RlZCkge1xuICAgICAgICAgIGhhbmRsZXIub25yZWplY3RlZCh0aGlzLl92YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaGFuZGxlci5kb25lID0gdHJ1ZTtcbiAgICB9KTtcbiAgfTtcbn1cblxuZXhwb3J0IHsgU3luY1Byb21pc2UgfTtcbiIsICJpbXBvcnQgeyBTZW50cnlFcnJvciB9IGZyb20gJy4vZXJyb3InO1xuaW1wb3J0IHsgU3luY1Byb21pc2UgfSBmcm9tICcuL3N5bmNwcm9taXNlJztcblxuLyoqIEEgc2ltcGxlIHF1ZXVlIHRoYXQgaG9sZHMgcHJvbWlzZXMuICovXG5leHBvcnQgY2xhc3MgUHJvbWlzZUJ1ZmZlcjxUPiB7XG4gIC8qKiBJbnRlcm5hbCBzZXQgb2YgcXVldWVkIFByb21pc2VzICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2J1ZmZlcjogQXJyYXk8UHJvbWlzZUxpa2U8VD4+ID0gW107XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBfbGltaXQ/OiBudW1iZXIpIHt9XG5cbiAgLyoqXG4gICAqIFNheXMgaWYgdGhlIGJ1ZmZlciBpcyByZWFkeSB0byB0YWtlIG1vcmUgcmVxdWVzdHNcbiAgICovXG4gIHB1YmxpYyBpc1JlYWR5KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9saW1pdCA9PT0gdW5kZWZpbmVkIHx8IHRoaXMubGVuZ3RoKCkgPCB0aGlzLl9saW1pdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBwcm9taXNlIChyZXByZXNlbnRpbmcgYW4gaW4tZmxpZ2h0IGFjdGlvbikgdG8gdGhlIHF1ZXVlLCBhbmQgc2V0IGl0IHRvIHJlbW92ZSBpdHNlbGYgb24gZnVsZmlsbG1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB0YXNrUHJvZHVjZXIgQSBmdW5jdGlvbiBwcm9kdWNpbmcgYW55IFByb21pc2VMaWtlPFQ+OyBJbiBwcmV2aW91cyB2ZXJzaW9ucyB0aGlzIHVzZWQgdG8gYmUgYHRhc2s6XG4gICAqICAgICAgICBQcm9taXNlTGlrZTxUPmAsIGJ1dCB1bmRlciB0aGF0IG1vZGVsLCBQcm9taXNlcyB3ZXJlIGluc3RhbnRseSBjcmVhdGVkIG9uIHRoZSBjYWxsLXNpdGUgYW5kIHRoZWlyIGV4ZWN1dG9yXG4gICAqICAgICAgICBmdW5jdGlvbnMgdGhlcmVmb3JlIHJhbiBpbW1lZGlhdGVseS4gVGh1cywgZXZlbiBpZiB0aGUgYnVmZmVyIHdhcyBmdWxsLCB0aGUgYWN0aW9uIHN0aWxsIGhhcHBlbmVkLiBCeVxuICAgKiAgICAgICAgcmVxdWlyaW5nIHRoZSBwcm9taXNlIHRvIGJlIHdyYXBwZWQgaW4gYSBmdW5jdGlvbiwgd2UgY2FuIGRlZmVyIHByb21pc2UgY3JlYXRpb24gdW50aWwgYWZ0ZXIgdGhlIGJ1ZmZlclxuICAgKiAgICAgICAgbGltaXQgY2hlY2suXG4gICAqIEByZXR1cm5zIFRoZSBvcmlnaW5hbCBwcm9taXNlLlxuICAgKi9cbiAgcHVibGljIGFkZCh0YXNrUHJvZHVjZXI6ICgpID0+IFByb21pc2VMaWtlPFQ+KTogUHJvbWlzZUxpa2U8VD4ge1xuICAgIGlmICghdGhpcy5pc1JlYWR5KCkpIHtcbiAgICAgIHJldHVybiBTeW5jUHJvbWlzZS5yZWplY3QobmV3IFNlbnRyeUVycm9yKCdOb3QgYWRkaW5nIFByb21pc2UgZHVlIHRvIGJ1ZmZlciBsaW1pdCByZWFjaGVkLicpKTtcbiAgICB9XG5cbiAgICAvLyBzdGFydCB0aGUgdGFzayBhbmQgYWRkIGl0cyBwcm9taXNlIHRvIHRoZSBxdWV1ZVxuICAgIGNvbnN0IHRhc2sgPSB0YXNrUHJvZHVjZXIoKTtcbiAgICBpZiAodGhpcy5fYnVmZmVyLmluZGV4T2YodGFzaykgPT09IC0xKSB7XG4gICAgICB0aGlzLl9idWZmZXIucHVzaCh0YXNrKTtcbiAgICB9XG4gICAgdm9pZCB0YXNrXG4gICAgICAudGhlbigoKSA9PiB0aGlzLnJlbW92ZSh0YXNrKSlcbiAgICAgIC8vIFVzZSBgdGhlbihudWxsLCByZWplY3Rpb25IYW5kbGVyKWAgcmF0aGVyIHRoYW4gYGNhdGNoKHJlamVjdGlvbkhhbmRsZXIpYCBzbyB0aGF0IHdlIGNhbiB1c2UgYFByb21pc2VMaWtlYFxuICAgICAgLy8gcmF0aGVyIHRoYW4gYFByb21pc2VgLiBgUHJvbWlzZUxpa2VgIGRvZXNuJ3QgaGF2ZSBhIGAuY2F0Y2hgIG1ldGhvZCwgbWFraW5nIGl0cyBwb2x5ZmlsbCBzbWFsbGVyLiAoRVM1IGRpZG4ndFxuICAgICAgLy8gaGF2ZSBwcm9taXNlcywgc28gVFMgaGFzIHRvIHBvbHlmaWxsIHdoZW4gZG93bi1jb21waWxpbmcuKVxuICAgICAgLnRoZW4obnVsbCwgKCkgPT5cbiAgICAgICAgdGhpcy5yZW1vdmUodGFzaykudGhlbihudWxsLCAoKSA9PiB7XG4gICAgICAgICAgLy8gV2UgaGF2ZSB0byBhZGQgYW5vdGhlciBjYXRjaCBoZXJlIGJlY2F1c2UgYHRoaXMucmVtb3ZlKClgIHN0YXJ0cyBhIG5ldyBwcm9taXNlIGNoYWluLlxuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgcmV0dXJuIHRhc2s7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlIGEgcHJvbWlzZSBmcm9tIHRoZSBxdWV1ZS5cbiAgICpcbiAgICogQHBhcmFtIHRhc2sgQ2FuIGJlIGFueSBQcm9taXNlTGlrZTxUPlxuICAgKiBAcmV0dXJucyBSZW1vdmVkIHByb21pc2UuXG4gICAqL1xuICBwdWJsaWMgcmVtb3ZlKHRhc2s6IFByb21pc2VMaWtlPFQ+KTogUHJvbWlzZUxpa2U8VD4ge1xuICAgIGNvbnN0IHJlbW92ZWRUYXNrID0gdGhpcy5fYnVmZmVyLnNwbGljZSh0aGlzLl9idWZmZXIuaW5kZXhPZih0YXNrKSwgMSlbMF07XG4gICAgcmV0dXJuIHJlbW92ZWRUYXNrO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgbnVtYmVyIG9mIHVucmVzb2x2ZWQgcHJvbWlzZXMgaW4gdGhlIHF1ZXVlLlxuICAgKi9cbiAgcHVibGljIGxlbmd0aCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9idWZmZXIubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFdhaXQgZm9yIGFsbCBwcm9taXNlcyBpbiB0aGUgcXVldWUgdG8gcmVzb2x2ZSBvciBmb3IgdGltZW91dCB0byBleHBpcmUsIHdoaWNoZXZlciBjb21lcyBmaXJzdC5cbiAgICpcbiAgICogQHBhcmFtIHRpbWVvdXQgVGhlIHRpbWUsIGluIG1zLCBhZnRlciB3aGljaCB0byByZXNvbHZlIHRvIGBmYWxzZWAgaWYgdGhlIHF1ZXVlIGlzIHN0aWxsIG5vbi1lbXB0eS4gUGFzc2luZyBgMGAgKG9yXG4gICAqIG5vdCBwYXNzaW5nIGFueXRoaW5nKSB3aWxsIG1ha2UgdGhlIHByb21pc2Ugd2FpdCBhcyBsb25nIGFzIGl0IHRha2VzIGZvciB0aGUgcXVldWUgdG8gZHJhaW4gYmVmb3JlIHJlc29sdmluZyB0b1xuICAgKiBgdHJ1ZWAuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB3aGljaCB3aWxsIHJlc29sdmUgdG8gYHRydWVgIGlmIHRoZSBxdWV1ZSBpcyBhbHJlYWR5IGVtcHR5IG9yIGRyYWlucyBiZWZvcmUgdGhlIHRpbWVvdXQsIGFuZFxuICAgKiBgZmFsc2VgIG90aGVyd2lzZVxuICAgKi9cbiAgcHVibGljIGRyYWluKHRpbWVvdXQ/OiBudW1iZXIpOiBQcm9taXNlTGlrZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZTxib29sZWFuPihyZXNvbHZlID0+IHtcbiAgICAgIC8vIHdhaXQgZm9yIGB0aW1lb3V0YCBtcyBhbmQgdGhlbiByZXNvbHZlIHRvIGBmYWxzZWAgKGlmIG5vdCBjYW5jZWxsZWQgZmlyc3QpXG4gICAgICBjb25zdCBjYXB0dXJlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgaWYgKHRpbWVvdXQgJiYgdGltZW91dCA+IDApIHtcbiAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfVxuICAgICAgfSwgdGltZW91dCk7XG5cbiAgICAgIC8vIGlmIGFsbCBwcm9taXNlcyByZXNvbHZlIGluIHRpbWUsIGNhbmNlbCB0aGUgdGltZXIgYW5kIHJlc29sdmUgdG8gYHRydWVgXG4gICAgICB2b2lkIFN5bmNQcm9taXNlLmFsbCh0aGlzLl9idWZmZXIpXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQoY2FwdHVyZWRTZXRUaW1lb3V0KTtcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xuICAgICAgICB9KVxuICAgICAgICAudGhlbihudWxsLCAoKSA9PiB7XG4gICAgICAgICAgcmVzb2x2ZSh0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QgfSBmcm9tICcuL2dsb2JhbCc7XG5pbXBvcnQgeyBkeW5hbWljUmVxdWlyZSwgaXNOb2RlRW52IH0gZnJvbSAnLi9ub2RlJztcblxuLyoqXG4gKiBBbiBvYmplY3QgdGhhdCBjYW4gcmV0dXJuIHRoZSBjdXJyZW50IHRpbWVzdGFtcCBpbiBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoLlxuICovXG5pbnRlcmZhY2UgVGltZXN0YW1wU291cmNlIHtcbiAgbm93U2Vjb25kcygpOiBudW1iZXI7XG59XG5cbi8qKlxuICogQSBUaW1lc3RhbXBTb3VyY2UgaW1wbGVtZW50YXRpb24gZm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBzdXBwb3J0IHRoZSBQZXJmb3JtYW5jZSBXZWIgQVBJIG5hdGl2ZWx5LlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIFRpbWVzdGFtcFNvdXJjZSBkb2VzIG5vdCB1c2UgYSBtb25vdG9uaWMgY2xvY2suIEEgY2FsbCB0byBgbm93U2Vjb25kc2AgbWF5IHJldHVybiBhIHRpbWVzdGFtcCBlYXJsaWVyXG4gKiB0aGFuIGEgcHJldmlvdXNseSByZXR1cm5lZCB2YWx1ZS4gV2UgZG8gbm90IHRyeSB0byBlbXVsYXRlIGEgbW9ub3RvbmljIGJlaGF2aW9yIGluIG9yZGVyIHRvIGZhY2lsaXRhdGUgZGVidWdnaW5nLiBJdFxuICogaXMgbW9yZSBvYnZpb3VzIHRvIGV4cGxhaW4gXCJ3aHkgZG9lcyBteSBzcGFuIGhhdmUgbmVnYXRpdmUgZHVyYXRpb25cIiB0aGFuIFwid2h5IG15IHNwYW5zIGhhdmUgemVybyBkdXJhdGlvblwiLlxuICovXG5jb25zdCBkYXRlVGltZXN0YW1wU291cmNlOiBUaW1lc3RhbXBTb3VyY2UgPSB7XG4gIG5vd1NlY29uZHM6ICgpID0+IERhdGUubm93KCkgLyAxMDAwLFxufTtcblxuLyoqXG4gKiBBIHBhcnRpYWwgZGVmaW5pdGlvbiBvZiB0aGUgW1BlcmZvcm1hbmNlIFdlYiBBUElde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9QZXJmb3JtYW5jZX1cbiAqIGZvciBhY2Nlc3NpbmcgYSBoaWdoIHJlc29sdXRpb24gbW9ub3RvbmljIGNsb2NrLlxuICovXG5pbnRlcmZhY2UgUGVyZm9ybWFuY2Uge1xuICAvKipcbiAgICogVGhlIG1pbGxpc2Vjb25kIHRpbWVzdGFtcCBhdCB3aGljaCBtZWFzdXJlbWVudCBiZWdhbiwgbWVhc3VyZWQgaW4gVW5peCB0aW1lLlxuICAgKi9cbiAgdGltZU9yaWdpbjogbnVtYmVyO1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBtaWxsaXNlY29uZCB0aW1lc3RhbXAsIHdoZXJlIDAgcmVwcmVzZW50cyB0aGUgc3RhcnQgb2YgbWVhc3VyZW1lbnQuXG4gICAqL1xuICBub3coKTogbnVtYmVyO1xufVxuXG4vKipcbiAqIFJldHVybnMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgbmF0aXZlIFBlcmZvcm1hbmNlIEFQSSBicm93c2VyIGltcGxlbWVudGF0aW9uLCBvciB1bmRlZmluZWQgZm9yIGJyb3dzZXJzIHRoYXQgZG8gbm90XG4gKiBzdXBwb3J0IHRoZSBBUEkuXG4gKlxuICogV3JhcHBpbmcgdGhlIG5hdGl2ZSBBUEkgd29ya3MgYXJvdW5kIGRpZmZlcmVuY2VzIGluIGJlaGF2aW9yIGZyb20gZGlmZmVyZW50IGJyb3dzZXJzLlxuICovXG5mdW5jdGlvbiBnZXRCcm93c2VyUGVyZm9ybWFuY2UoKTogUGVyZm9ybWFuY2UgfCB1bmRlZmluZWQge1xuICBjb25zdCB7IHBlcmZvcm1hbmNlIH0gPSBnZXRHbG9iYWxPYmplY3Q8V2luZG93PigpO1xuICBpZiAoIXBlcmZvcm1hbmNlIHx8ICFwZXJmb3JtYW5jZS5ub3cpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gUmVwbGFjZSBwZXJmb3JtYW5jZS50aW1lT3JpZ2luIHdpdGggb3VyIG93biB0aW1lT3JpZ2luIGJhc2VkIG9uIERhdGUubm93KCkuXG4gIC8vXG4gIC8vIFRoaXMgaXMgYSBwYXJ0aWFsIHdvcmthcm91bmQgZm9yIGJyb3dzZXJzIHJlcG9ydGluZyBwZXJmb3JtYW5jZS50aW1lT3JpZ2luIHN1Y2ggdGhhdCBwZXJmb3JtYW5jZS50aW1lT3JpZ2luICtcbiAgLy8gcGVyZm9ybWFuY2Uubm93KCkgZ2l2ZXMgYSBkYXRlIGFyYml0cmFyaWx5IGluIHRoZSBwYXN0LlxuICAvL1xuICAvLyBBZGRpdGlvbmFsbHksIGNvbXB1dGluZyB0aW1lT3JpZ2luIGluIHRoaXMgd2F5IGZpbGxzIHRoZSBnYXAgZm9yIGJyb3dzZXJzIHdoZXJlIHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gaXNcbiAgLy8gdW5kZWZpbmVkLlxuICAvL1xuICAvLyBUaGUgYXNzdW1wdGlvbiB0aGF0IHBlcmZvcm1hbmNlLnRpbWVPcmlnaW4gKyBwZXJmb3JtYW5jZS5ub3coKSB+PSBEYXRlLm5vdygpIGlzIGZsYXdlZCwgYnV0IHdlIGRlcGVuZCBvbiBpdCB0b1xuICAvLyBpbnRlcmFjdCB3aXRoIGRhdGEgY29taW5nIG91dCBvZiBwZXJmb3JtYW5jZSBlbnRyaWVzLlxuICAvL1xuICAvLyBOb3RlIHRoYXQgZGVzcGl0ZSByZWNvbW1lbmRhdGlvbnMgYWdhaW5zdCBpdCBpbiB0aGUgc3BlYywgYnJvd3NlcnMgaW1wbGVtZW50IHRoZSBQZXJmb3JtYW5jZSBBUEkgd2l0aCBhIGNsb2NrIHRoYXRcbiAgLy8gbWlnaHQgc3RvcCB3aGVuIHRoZSBjb21wdXRlciBpcyBhc2xlZXAgKGFuZCBwZXJoYXBzIHVuZGVyIG90aGVyIGNpcmN1bXN0YW5jZXMpLiBTdWNoIGJlaGF2aW9yIGNhdXNlc1xuICAvLyBwZXJmb3JtYW5jZS50aW1lT3JpZ2luICsgcGVyZm9ybWFuY2Uubm93KCkgdG8gaGF2ZSBhbiBhcmJpdHJhcnkgc2tldyBvdmVyIERhdGUubm93KCkuIEluIGxhcHRvcCBjb21wdXRlcnMsIHdlIGhhdmVcbiAgLy8gb2JzZXJ2ZWQgc2tld3MgdGhhdCBjYW4gYmUgYXMgbG9uZyBhcyBkYXlzLCB3ZWVrcyBvciBtb250aHMuXG4gIC8vXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L2lzc3Vlcy8yNTkwLlxuICAvL1xuICAvLyBCVUc6IGRlc3BpdGUgb3VyIGJlc3QgaW50ZW50aW9ucywgdGhpcyB3b3JrYXJvdW5kIGhhcyBpdHMgbGltaXRhdGlvbnMuIEl0IG1vc3RseSBhZGRyZXNzZXMgdGltaW5ncyBvZiBwYWdlbG9hZFxuICAvLyB0cmFuc2FjdGlvbnMsIGJ1dCBpZ25vcmVzIHRoZSBza2V3IGJ1aWx0IHVwIG92ZXIgdGltZSB0aGF0IGNhbiBhdmVyc2VseSBhZmZlY3QgdGltZXN0YW1wcyBvZiBuYXZpZ2F0aW9uXG4gIC8vIHRyYW5zYWN0aW9ucyBvZiBsb25nLWxpdmVkIHdlYiBwYWdlcy5cbiAgY29uc3QgdGltZU9yaWdpbiA9IERhdGUubm93KCkgLSBwZXJmb3JtYW5jZS5ub3coKTtcblxuICByZXR1cm4ge1xuICAgIG5vdzogKCkgPT4gcGVyZm9ybWFuY2Uubm93KCksXG4gICAgdGltZU9yaWdpbixcbiAgfTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIHRoZSBuYXRpdmUgUGVyZm9ybWFuY2UgQVBJIGltcGxlbWVudGF0aW9uIGZyb20gTm9kZS5qcy4gUmV0dXJucyB1bmRlZmluZWQgaW4gb2xkIE5vZGUuanMgdmVyc2lvbnMgdGhhdCBkb24ndFxuICogaW1wbGVtZW50IHRoZSBBUEkuXG4gKi9cbmZ1bmN0aW9uIGdldE5vZGVQZXJmb3JtYW5jZSgpOiBQZXJmb3JtYW5jZSB8IHVuZGVmaW5lZCB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGVyZkhvb2tzID0gZHluYW1pY1JlcXVpcmUobW9kdWxlLCAncGVyZl9ob29rcycpIGFzIHsgcGVyZm9ybWFuY2U6IFBlcmZvcm1hbmNlIH07XG4gICAgcmV0dXJuIHBlcmZIb29rcy5wZXJmb3JtYW5jZTtcbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgUGVyZm9ybWFuY2UgQVBJIGltcGxlbWVudGF0aW9uIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybSwgaWYgYXZhaWxhYmxlLlxuICovXG5jb25zdCBwbGF0Zm9ybVBlcmZvcm1hbmNlOiBQZXJmb3JtYW5jZSB8IHVuZGVmaW5lZCA9IGlzTm9kZUVudigpID8gZ2V0Tm9kZVBlcmZvcm1hbmNlKCkgOiBnZXRCcm93c2VyUGVyZm9ybWFuY2UoKTtcblxuY29uc3QgdGltZXN0YW1wU291cmNlOiBUaW1lc3RhbXBTb3VyY2UgPVxuICBwbGF0Zm9ybVBlcmZvcm1hbmNlID09PSB1bmRlZmluZWRcbiAgICA/IGRhdGVUaW1lc3RhbXBTb3VyY2VcbiAgICA6IHtcbiAgICAgICAgbm93U2Vjb25kczogKCkgPT4gKHBsYXRmb3JtUGVyZm9ybWFuY2UudGltZU9yaWdpbiArIHBsYXRmb3JtUGVyZm9ybWFuY2Uubm93KCkpIC8gMTAwMCxcbiAgICAgIH07XG5cbi8qKlxuICogUmV0dXJucyBhIHRpbWVzdGFtcCBpbiBzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoIHVzaW5nIHRoZSBEYXRlIEFQSS5cbiAqL1xuZXhwb3J0IGNvbnN0IGRhdGVUaW1lc3RhbXBJblNlY29uZHM6ICgpID0+IG51bWJlciA9IGRhdGVUaW1lc3RhbXBTb3VyY2Uubm93U2Vjb25kcy5iaW5kKGRhdGVUaW1lc3RhbXBTb3VyY2UpO1xuXG4vKipcbiAqIFJldHVybnMgYSB0aW1lc3RhbXAgaW4gc2Vjb25kcyBzaW5jZSB0aGUgVU5JWCBlcG9jaCB1c2luZyBlaXRoZXIgdGhlIFBlcmZvcm1hbmNlIG9yIERhdGUgQVBJcywgZGVwZW5kaW5nIG9uIHRoZVxuICogYXZhaWxhYmlsaXR5IG9mIHRoZSBQZXJmb3JtYW5jZSBBUEkuXG4gKlxuICogU2VlIGB1c2luZ1BlcmZvcm1hbmNlQVBJYCB0byB0ZXN0IHdoZXRoZXIgdGhlIFBlcmZvcm1hbmNlIEFQSSBpcyB1c2VkLlxuICpcbiAqIEJVRzogTm90ZSB0aGF0IGJlY2F1c2Ugb2YgaG93IGJyb3dzZXJzIGltcGxlbWVudCB0aGUgUGVyZm9ybWFuY2UgQVBJLCB0aGUgY2xvY2sgbWlnaHQgc3RvcCB3aGVuIHRoZSBjb21wdXRlciBpc1xuICogYXNsZWVwLiBUaGlzIGNyZWF0ZXMgYSBza2V3IGJldHdlZW4gYGRhdGVUaW1lc3RhbXBJblNlY29uZHNgIGFuZCBgdGltZXN0YW1wSW5TZWNvbmRzYC4gVGhlXG4gKiBza2V3IGNhbiBncm93IHRvIGFyYml0cmFyeSBhbW91bnRzIGxpa2UgZGF5cywgd2Vla3Mgb3IgbW9udGhzLlxuICogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI1OTAuXG4gKi9cbmV4cG9ydCBjb25zdCB0aW1lc3RhbXBJblNlY29uZHM6ICgpID0+IG51bWJlciA9IHRpbWVzdGFtcFNvdXJjZS5ub3dTZWNvbmRzLmJpbmQodGltZXN0YW1wU291cmNlKTtcblxuLy8gUmUtZXhwb3J0ZWQgd2l0aCBhbiBvbGQgbmFtZSBmb3IgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkuXG5leHBvcnQgY29uc3QgdGltZXN0YW1wV2l0aE1zID0gdGltZXN0YW1wSW5TZWNvbmRzO1xuXG4vKipcbiAqIEEgYm9vbGVhbiB0aGF0IGlzIHRydWUgd2hlbiB0aW1lc3RhbXBJblNlY29uZHMgdXNlcyB0aGUgUGVyZm9ybWFuY2UgQVBJIHRvIHByb2R1Y2UgbW9ub3RvbmljIHRpbWVzdGFtcHMuXG4gKi9cbmV4cG9ydCBjb25zdCB1c2luZ1BlcmZvcm1hbmNlQVBJID0gcGxhdGZvcm1QZXJmb3JtYW5jZSAhPT0gdW5kZWZpbmVkO1xuXG4vKipcbiAqIEludGVybmFsIGhlbHBlciB0byBzdG9yZSB3aGF0IGlzIHRoZSBzb3VyY2Ugb2YgYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbiBiZWxvdy4gRm9yIGRlYnVnZ2luZyBvbmx5LlxuICovXG5leHBvcnQgbGV0IF9icm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luTW9kZTogc3RyaW5nO1xuXG4vKipcbiAqIFRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIHRoZSBVTklYIGVwb2NoLiBUaGlzIHZhbHVlIGlzIG9ubHkgdXNhYmxlIGluIGEgYnJvd3NlciwgYW5kIG9ubHkgd2hlbiB0aGVcbiAqIHBlcmZvcm1hbmNlIEFQSSBpcyBhdmFpbGFibGUuXG4gKi9cbmV4cG9ydCBjb25zdCBicm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luID0gKCgpOiBudW1iZXIgfCB1bmRlZmluZWQgPT4ge1xuICAvLyBVbmZvcnR1bmF0ZWx5IGJyb3dzZXJzIG1heSByZXBvcnQgYW4gaW5hY2N1cmF0ZSB0aW1lIG9yaWdpbiBkYXRhLCB0aHJvdWdoIGVpdGhlciBwZXJmb3JtYW5jZS50aW1lT3JpZ2luIG9yXG4gIC8vIHBlcmZvcm1hbmNlLnRpbWluZy5uYXZpZ2F0aW9uU3RhcnQsIHdoaWNoIHJlc3VsdHMgaW4gcG9vciByZXN1bHRzIGluIHBlcmZvcm1hbmNlIGRhdGEuIFdlIG9ubHkgdHJlYXQgdGltZSBvcmlnaW5cbiAgLy8gZGF0YSBhcyByZWxpYWJsZSBpZiB0aGV5IGFyZSB3aXRoaW4gYSByZWFzb25hYmxlIHRocmVzaG9sZCBvZiB0aGUgY3VycmVudCB0aW1lLlxuXG4gIGNvbnN0IHsgcGVyZm9ybWFuY2UgfSA9IGdldEdsb2JhbE9iamVjdDxXaW5kb3c+KCk7XG4gIGlmICghcGVyZm9ybWFuY2UgfHwgIXBlcmZvcm1hbmNlLm5vdykge1xuICAgIF9icm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luTW9kZSA9ICdub25lJztcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgdGhyZXNob2xkID0gMzYwMCAqIDEwMDA7XG4gIGNvbnN0IHBlcmZvcm1hbmNlTm93ID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gIGNvbnN0IGRhdGVOb3cgPSBEYXRlLm5vdygpO1xuXG4gIC8vIGlmIHRpbWVPcmlnaW4gaXNuJ3QgYXZhaWxhYmxlIHNldCBkZWx0YSB0byB0aHJlc2hvbGQgc28gaXQgaXNuJ3QgdXNlZFxuICBjb25zdCB0aW1lT3JpZ2luRGVsdGEgPSBwZXJmb3JtYW5jZS50aW1lT3JpZ2luXG4gICAgPyBNYXRoLmFicyhwZXJmb3JtYW5jZS50aW1lT3JpZ2luICsgcGVyZm9ybWFuY2VOb3cgLSBkYXRlTm93KVxuICAgIDogdGhyZXNob2xkO1xuICBjb25zdCB0aW1lT3JpZ2luSXNSZWxpYWJsZSA9IHRpbWVPcmlnaW5EZWx0YSA8IHRocmVzaG9sZDtcblxuICAvLyBXaGlsZSBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0IGlzIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgcGVyZm9ybWFuY2UudGltZU9yaWdpbiwgcGVyZm9ybWFuY2UudGltZU9yaWdpblxuICAvLyBpcyBub3QgYXMgd2lkZWx5IHN1cHBvcnRlZC4gTmFtZWx5LCBwZXJmb3JtYW5jZS50aW1lT3JpZ2luIGlzIHVuZGVmaW5lZCBpbiBTYWZhcmkgYXMgb2Ygd3JpdGluZy5cbiAgLy8gQWxzbyBhcyBvZiB3cml0aW5nLCBwZXJmb3JtYW5jZS50aW1pbmcgaXMgbm90IGF2YWlsYWJsZSBpbiBXZWIgV29ya2VycyBpbiBtYWluc3RyZWFtIGJyb3dzZXJzLCBzbyBpdCBpcyBub3QgYWx3YXlzXG4gIC8vIGEgdmFsaWQgZmFsbGJhY2suIEluIHRoZSBhYnNlbmNlIG9mIGFuIGluaXRpYWwgdGltZSBwcm92aWRlZCBieSB0aGUgYnJvd3NlciwgZmFsbGJhY2sgdG8gdGhlIGN1cnJlbnQgdGltZSBmcm9tIHRoZVxuICAvLyBEYXRlIEFQSS5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIGNvbnN0IG5hdmlnYXRpb25TdGFydCA9IHBlcmZvcm1hbmNlLnRpbWluZyAmJiBwZXJmb3JtYW5jZS50aW1pbmcubmF2aWdhdGlvblN0YXJ0O1xuICBjb25zdCBoYXNOYXZpZ2F0aW9uU3RhcnQgPSB0eXBlb2YgbmF2aWdhdGlvblN0YXJ0ID09PSAnbnVtYmVyJztcbiAgLy8gaWYgbmF2aWdhdGlvblN0YXJ0IGlzbid0IGF2YWlsYWJsZSBzZXQgZGVsdGEgdG8gdGhyZXNob2xkIHNvIGl0IGlzbid0IHVzZWRcbiAgY29uc3QgbmF2aWdhdGlvblN0YXJ0RGVsdGEgPSBoYXNOYXZpZ2F0aW9uU3RhcnQgPyBNYXRoLmFicyhuYXZpZ2F0aW9uU3RhcnQgKyBwZXJmb3JtYW5jZU5vdyAtIGRhdGVOb3cpIDogdGhyZXNob2xkO1xuICBjb25zdCBuYXZpZ2F0aW9uU3RhcnRJc1JlbGlhYmxlID0gbmF2aWdhdGlvblN0YXJ0RGVsdGEgPCB0aHJlc2hvbGQ7XG5cbiAgaWYgKHRpbWVPcmlnaW5Jc1JlbGlhYmxlIHx8IG5hdmlnYXRpb25TdGFydElzUmVsaWFibGUpIHtcbiAgICAvLyBVc2UgdGhlIG1vcmUgcmVsaWFibGUgdGltZSBvcmlnaW5cbiAgICBpZiAodGltZU9yaWdpbkRlbHRhIDw9IG5hdmlnYXRpb25TdGFydERlbHRhKSB7XG4gICAgICBfYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbk1vZGUgPSAndGltZU9yaWdpbic7XG4gICAgICByZXR1cm4gcGVyZm9ybWFuY2UudGltZU9yaWdpbjtcbiAgICB9IGVsc2Uge1xuICAgICAgX2Jyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW5Nb2RlID0gJ25hdmlnYXRpb25TdGFydCc7XG4gICAgICByZXR1cm4gbmF2aWdhdGlvblN0YXJ0O1xuICAgIH1cbiAgfVxuXG4gIC8vIEVpdGhlciBib3RoIHRpbWVPcmlnaW4gYW5kIG5hdmlnYXRpb25TdGFydCBhcmUgc2tld2VkIG9yIG5laXRoZXIgaXMgYXZhaWxhYmxlLCBmYWxsYmFjayB0byBEYXRlLlxuICBfYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbk1vZGUgPSAnZGF0ZU5vdyc7XG4gIHJldHVybiBkYXRlTm93O1xufSkoKTtcbiIsICJleHBvcnQgKiBmcm9tICcuL2FzeW5jJztcbmV4cG9ydCAqIGZyb20gJy4vYnJvd3Nlcic7XG5leHBvcnQgKiBmcm9tICcuL2Rzbic7XG5leHBvcnQgKiBmcm9tICcuL2Vycm9yJztcbmV4cG9ydCAqIGZyb20gJy4vZ2xvYmFsJztcbmV4cG9ydCAqIGZyb20gJy4vaW5zdHJ1bWVudCc7XG5leHBvcnQgKiBmcm9tICcuL2lzJztcbmV4cG9ydCAqIGZyb20gJy4vbG9nZ2VyJztcbmV4cG9ydCAqIGZyb20gJy4vbWVtbyc7XG5leHBvcnQgKiBmcm9tICcuL21pc2MnO1xuZXhwb3J0ICogZnJvbSAnLi9ub2RlJztcbmV4cG9ydCAqIGZyb20gJy4vb2JqZWN0JztcbmV4cG9ydCAqIGZyb20gJy4vcGF0aCc7XG5leHBvcnQgKiBmcm9tICcuL3Byb21pc2VidWZmZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zdGFja3RyYWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RyaW5nJztcbmV4cG9ydCAqIGZyb20gJy4vc3VwcG9ydHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zeW5jcHJvbWlzZSc7XG5leHBvcnQgKiBmcm9tICcuL3RpbWUnO1xuIiwgIi8qIGVzbGludC1kaXNhYmxlIG1heC1saW5lcyAqL1xuaW1wb3J0IHtcbiAgQnJlYWRjcnVtYixcbiAgQ2FwdHVyZUNvbnRleHQsXG4gIENvbnRleHQsXG4gIENvbnRleHRzLFxuICBFdmVudCxcbiAgRXZlbnRIaW50LFxuICBFdmVudFByb2Nlc3NvcixcbiAgRXh0cmEsXG4gIEV4dHJhcyxcbiAgUHJpbWl0aXZlLFxuICBSZXF1ZXN0U2Vzc2lvbixcbiAgU2NvcGUgYXMgU2NvcGVJbnRlcmZhY2UsXG4gIFNjb3BlQ29udGV4dCxcbiAgU2V2ZXJpdHksXG4gIFNwYW4sXG4gIFRyYW5zYWN0aW9uLFxuICBVc2VyLFxufSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGRhdGVUaW1lc3RhbXBJblNlY29uZHMsIGdldEdsb2JhbE9iamVjdCwgaXNQbGFpbk9iamVjdCwgaXNUaGVuYWJsZSwgU3luY1Byb21pc2UgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuaW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gJy4vc2Vzc2lvbic7XG5cbi8qKlxuICogQWJzb2x1dGUgbWF4aW11bSBudW1iZXIgb2YgYnJlYWRjcnVtYnMgYWRkZWQgdG8gYW4gZXZlbnQuXG4gKiBUaGUgYG1heEJyZWFkY3J1bWJzYCBvcHRpb24gY2Fubm90IGJlIGhpZ2hlciB0aGFuIHRoaXMgdmFsdWUuXG4gKi9cbmNvbnN0IE1BWF9CUkVBRENSVU1CUyA9IDEwMDtcblxuLyoqXG4gKiBIb2xkcyBhZGRpdGlvbmFsIGV2ZW50IGluZm9ybWF0aW9uLiB7QGxpbmsgU2NvcGUuYXBwbHlUb0V2ZW50fSB3aWxsIGJlXG4gKiBjYWxsZWQgYnkgdGhlIGNsaWVudCBiZWZvcmUgYW4gZXZlbnQgd2lsbCBiZSBzZW50LlxuICovXG5leHBvcnQgY2xhc3MgU2NvcGUgaW1wbGVtZW50cyBTY29wZUludGVyZmFjZSB7XG4gIC8qKiBGbGFnIGlmIG5vdGlmeWluZyBpcyBoYXBwZW5pbmcuICovXG4gIHByb3RlY3RlZCBfbm90aWZ5aW5nTGlzdGVuZXJzOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqIENhbGxiYWNrIGZvciBjbGllbnQgdG8gcmVjZWl2ZSBzY29wZSBjaGFuZ2VzLiAqL1xuICBwcm90ZWN0ZWQgX3Njb3BlTGlzdGVuZXJzOiBBcnJheTwoc2NvcGU6IFNjb3BlKSA9PiB2b2lkPiA9IFtdO1xuXG4gIC8qKiBDYWxsYmFjayBsaXN0IHRoYXQgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIge0BsaW5rIGFwcGx5VG9FdmVudH0uICovXG4gIHByb3RlY3RlZCBfZXZlbnRQcm9jZXNzb3JzOiBFdmVudFByb2Nlc3NvcltdID0gW107XG5cbiAgLyoqIEFycmF5IG9mIGJyZWFkY3J1bWJzLiAqL1xuICBwcm90ZWN0ZWQgX2JyZWFkY3J1bWJzOiBCcmVhZGNydW1iW10gPSBbXTtcblxuICAvKiogVXNlciAqL1xuICBwcm90ZWN0ZWQgX3VzZXI6IFVzZXIgPSB7fTtcblxuICAvKiogVGFncyAqL1xuICBwcm90ZWN0ZWQgX3RhZ3M6IHsgW2tleTogc3RyaW5nXTogUHJpbWl0aXZlIH0gPSB7fTtcblxuICAvKiogRXh0cmEgKi9cbiAgcHJvdGVjdGVkIF9leHRyYTogRXh0cmFzID0ge307XG5cbiAgLyoqIENvbnRleHRzICovXG4gIHByb3RlY3RlZCBfY29udGV4dHM6IENvbnRleHRzID0ge307XG5cbiAgLyoqIEZpbmdlcnByaW50ICovXG4gIHByb3RlY3RlZCBfZmluZ2VycHJpbnQ/OiBzdHJpbmdbXTtcblxuICAvKiogU2V2ZXJpdHkgKi9cbiAgcHJvdGVjdGVkIF9sZXZlbD86IFNldmVyaXR5O1xuXG4gIC8qKiBUcmFuc2FjdGlvbiBOYW1lICovXG4gIHByb3RlY3RlZCBfdHJhbnNhY3Rpb25OYW1lPzogc3RyaW5nO1xuXG4gIC8qKiBTcGFuICovXG4gIHByb3RlY3RlZCBfc3Bhbj86IFNwYW47XG5cbiAgLyoqIFNlc3Npb24gKi9cbiAgcHJvdGVjdGVkIF9zZXNzaW9uPzogU2Vzc2lvbjtcblxuICAvKiogUmVxdWVzdCBNb2RlIFNlc3Npb24gU3RhdHVzICovXG4gIHByb3RlY3RlZCBfcmVxdWVzdFNlc3Npb24/OiBSZXF1ZXN0U2Vzc2lvbjtcblxuICAvKipcbiAgICogSW5oZXJpdCB2YWx1ZXMgZnJvbSB0aGUgcGFyZW50IHNjb3BlLlxuICAgKiBAcGFyYW0gc2NvcGUgdG8gY2xvbmUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGNsb25lKHNjb3BlPzogU2NvcGUpOiBTY29wZSB7XG4gICAgY29uc3QgbmV3U2NvcGUgPSBuZXcgU2NvcGUoKTtcbiAgICBpZiAoc2NvcGUpIHtcbiAgICAgIG5ld1Njb3BlLl9icmVhZGNydW1icyA9IFsuLi5zY29wZS5fYnJlYWRjcnVtYnNdO1xuICAgICAgbmV3U2NvcGUuX3RhZ3MgPSB7IC4uLnNjb3BlLl90YWdzIH07XG4gICAgICBuZXdTY29wZS5fZXh0cmEgPSB7IC4uLnNjb3BlLl9leHRyYSB9O1xuICAgICAgbmV3U2NvcGUuX2NvbnRleHRzID0geyAuLi5zY29wZS5fY29udGV4dHMgfTtcbiAgICAgIG5ld1Njb3BlLl91c2VyID0gc2NvcGUuX3VzZXI7XG4gICAgICBuZXdTY29wZS5fbGV2ZWwgPSBzY29wZS5fbGV2ZWw7XG4gICAgICBuZXdTY29wZS5fc3BhbiA9IHNjb3BlLl9zcGFuO1xuICAgICAgbmV3U2NvcGUuX3Nlc3Npb24gPSBzY29wZS5fc2Vzc2lvbjtcbiAgICAgIG5ld1Njb3BlLl90cmFuc2FjdGlvbk5hbWUgPSBzY29wZS5fdHJhbnNhY3Rpb25OYW1lO1xuICAgICAgbmV3U2NvcGUuX2ZpbmdlcnByaW50ID0gc2NvcGUuX2ZpbmdlcnByaW50O1xuICAgICAgbmV3U2NvcGUuX2V2ZW50UHJvY2Vzc29ycyA9IFsuLi5zY29wZS5fZXZlbnRQcm9jZXNzb3JzXTtcbiAgICAgIG5ld1Njb3BlLl9yZXF1ZXN0U2Vzc2lvbiA9IHNjb3BlLl9yZXF1ZXN0U2Vzc2lvbjtcbiAgICB9XG4gICAgcmV0dXJuIG5ld1Njb3BlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBpbnRlcm5hbCBvbiBjaGFuZ2UgbGlzdGVuZXIuIFVzZWQgZm9yIHN1YiBTREtzIHRoYXQgbmVlZCB0byBzdG9yZSB0aGUgc2NvcGUuXG4gICAqIEBoaWRkZW5cbiAgICovXG4gIHB1YmxpYyBhZGRTY29wZUxpc3RlbmVyKGNhbGxiYWNrOiAoc2NvcGU6IFNjb3BlKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgdGhpcy5fc2NvcGVMaXN0ZW5lcnMucHVzaChjYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBhZGRFdmVudFByb2Nlc3NvcihjYWxsYmFjazogRXZlbnRQcm9jZXNzb3IpOiB0aGlzIHtcbiAgICB0aGlzLl9ldmVudFByb2Nlc3NvcnMucHVzaChjYWxsYmFjayk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXRVc2VyKHVzZXI6IFVzZXIgfCBudWxsKTogdGhpcyB7XG4gICAgdGhpcy5fdXNlciA9IHVzZXIgfHwge307XG4gICAgaWYgKHRoaXMuX3Nlc3Npb24pIHtcbiAgICAgIHRoaXMuX3Nlc3Npb24udXBkYXRlKHsgdXNlciB9KTtcbiAgICB9XG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGdldFVzZXIoKTogVXNlciB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3VzZXI7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBnZXRSZXF1ZXN0U2Vzc2lvbigpOiBSZXF1ZXN0U2Vzc2lvbiB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuX3JlcXVlc3RTZXNzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0UmVxdWVzdFNlc3Npb24ocmVxdWVzdFNlc3Npb24/OiBSZXF1ZXN0U2Vzc2lvbik6IHRoaXMge1xuICAgIHRoaXMuX3JlcXVlc3RTZXNzaW9uID0gcmVxdWVzdFNlc3Npb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXRUYWdzKHRhZ3M6IHsgW2tleTogc3RyaW5nXTogUHJpbWl0aXZlIH0pOiB0aGlzIHtcbiAgICB0aGlzLl90YWdzID0ge1xuICAgICAgLi4udGhpcy5fdGFncyxcbiAgICAgIC4uLnRhZ3MsXG4gICAgfTtcbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0VGFnKGtleTogc3RyaW5nLCB2YWx1ZTogUHJpbWl0aXZlKTogdGhpcyB7XG4gICAgdGhpcy5fdGFncyA9IHsgLi4udGhpcy5fdGFncywgW2tleV06IHZhbHVlIH07XG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldEV4dHJhcyhleHRyYXM6IEV4dHJhcyk6IHRoaXMge1xuICAgIHRoaXMuX2V4dHJhID0ge1xuICAgICAgLi4udGhpcy5fZXh0cmEsXG4gICAgICAuLi5leHRyYXMsXG4gICAgfTtcbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0RXh0cmEoa2V5OiBzdHJpbmcsIGV4dHJhOiBFeHRyYSk6IHRoaXMge1xuICAgIHRoaXMuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSwgW2tleV06IGV4dHJhIH07XG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldEZpbmdlcnByaW50KGZpbmdlcnByaW50OiBzdHJpbmdbXSk6IHRoaXMge1xuICAgIHRoaXMuX2ZpbmdlcnByaW50ID0gZmluZ2VycHJpbnQ7XG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldExldmVsKGxldmVsOiBTZXZlcml0eSk6IHRoaXMge1xuICAgIHRoaXMuX2xldmVsID0gbGV2ZWw7XG4gICAgdGhpcy5fbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldFRyYW5zYWN0aW9uTmFtZShuYW1lPzogc3RyaW5nKTogdGhpcyB7XG4gICAgdGhpcy5fdHJhbnNhY3Rpb25OYW1lID0gbmFtZTtcbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbiBiZSByZW1vdmVkIGluIG1ham9yIHZlcnNpb24uXG4gICAqIEBkZXByZWNhdGVkIGluIGZhdm9yIG9mIHtAbGluayB0aGlzLnNldFRyYW5zYWN0aW9uTmFtZX1cbiAgICovXG4gIHB1YmxpYyBzZXRUcmFuc2FjdGlvbihuYW1lPzogc3RyaW5nKTogdGhpcyB7XG4gICAgcmV0dXJuIHRoaXMuc2V0VHJhbnNhY3Rpb25OYW1lKG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0Q29udGV4dChrZXk6IHN0cmluZywgY29udGV4dDogQ29udGV4dCB8IG51bGwpOiB0aGlzIHtcbiAgICBpZiAoY29udGV4dCA9PT0gbnVsbCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1keW5hbWljLWRlbGV0ZVxuICAgICAgZGVsZXRlIHRoaXMuX2NvbnRleHRzW2tleV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NvbnRleHRzID0geyAuLi50aGlzLl9jb250ZXh0cywgW2tleV06IGNvbnRleHQgfTtcbiAgICB9XG5cbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0U3BhbihzcGFuPzogU3Bhbik6IHRoaXMge1xuICAgIHRoaXMuX3NwYW4gPSBzcGFuO1xuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBnZXRTcGFuKCk6IFNwYW4gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9zcGFuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgZ2V0VHJhbnNhY3Rpb24oKTogVHJhbnNhY3Rpb24gfCB1bmRlZmluZWQge1xuICAgIC8vIG9mdGVuLCB0aGlzIHNwYW4gd2lsbCBiZSBhIHRyYW5zYWN0aW9uLCBidXQgaXQncyBub3QgZ3VhcmFudGVlZCB0byBiZVxuICAgIGNvbnN0IHNwYW4gPSB0aGlzLmdldFNwYW4oKSBhcyB1bmRlZmluZWQgfCAoU3BhbiAmIHsgc3BhblJlY29yZGVyOiB7IHNwYW5zOiBTcGFuW10gfSB9KTtcblxuICAgIC8vIHRyeSBpdCB0aGUgbmV3IHdheSBmaXJzdFxuICAgIGlmIChzcGFuPy50cmFuc2FjdGlvbikge1xuICAgICAgcmV0dXJuIHNwYW4/LnRyYW5zYWN0aW9uO1xuICAgIH1cblxuICAgIC8vIGZhbGxiYWNrIHRvIHRoZSBvbGQgd2F5IChrbm93biBidWc6IHRoaXMgb25seSBmaW5kcyB0cmFuc2FjdGlvbnMgd2l0aCBzYW1wbGVkID0gdHJ1ZSlcbiAgICBpZiAoc3Bhbj8uc3BhblJlY29yZGVyPy5zcGFuc1swXSkge1xuICAgICAgcmV0dXJuIHNwYW4uc3BhblJlY29yZGVyLnNwYW5zWzBdIGFzIFRyYW5zYWN0aW9uO1xuICAgIH1cblxuICAgIC8vIG5laXRoZXIgd2F5IGZvdW5kIGEgdHJhbnNhY3Rpb25cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0U2Vzc2lvbihzZXNzaW9uPzogU2Vzc2lvbik6IHRoaXMge1xuICAgIGlmICghc2Vzc2lvbikge1xuICAgICAgZGVsZXRlIHRoaXMuX3Nlc3Npb247XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Nlc3Npb24gPSBzZXNzaW9uO1xuICAgIH1cbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgZ2V0U2Vzc2lvbigpOiBTZXNzaW9uIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHVwZGF0ZShjYXB0dXJlQ29udGV4dD86IENhcHR1cmVDb250ZXh0KTogdGhpcyB7XG4gICAgaWYgKCFjYXB0dXJlQ29udGV4dCkge1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYXB0dXJlQ29udGV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgdXBkYXRlZFNjb3BlID0gKGNhcHR1cmVDb250ZXh0IGFzIDxUPihzY29wZTogVCkgPT4gVCkodGhpcyk7XG4gICAgICByZXR1cm4gdXBkYXRlZFNjb3BlIGluc3RhbmNlb2YgU2NvcGUgPyB1cGRhdGVkU2NvcGUgOiB0aGlzO1xuICAgIH1cblxuICAgIGlmIChjYXB0dXJlQ29udGV4dCBpbnN0YW5jZW9mIFNjb3BlKSB7XG4gICAgICB0aGlzLl90YWdzID0geyAuLi50aGlzLl90YWdzLCAuLi5jYXB0dXJlQ29udGV4dC5fdGFncyB9O1xuICAgICAgdGhpcy5fZXh0cmEgPSB7IC4uLnRoaXMuX2V4dHJhLCAuLi5jYXB0dXJlQ29udGV4dC5fZXh0cmEgfTtcbiAgICAgIHRoaXMuX2NvbnRleHRzID0geyAuLi50aGlzLl9jb250ZXh0cywgLi4uY2FwdHVyZUNvbnRleHQuX2NvbnRleHRzIH07XG4gICAgICBpZiAoY2FwdHVyZUNvbnRleHQuX3VzZXIgJiYgT2JqZWN0LmtleXMoY2FwdHVyZUNvbnRleHQuX3VzZXIpLmxlbmd0aCkge1xuICAgICAgICB0aGlzLl91c2VyID0gY2FwdHVyZUNvbnRleHQuX3VzZXI7XG4gICAgICB9XG4gICAgICBpZiAoY2FwdHVyZUNvbnRleHQuX2xldmVsKSB7XG4gICAgICAgIHRoaXMuX2xldmVsID0gY2FwdHVyZUNvbnRleHQuX2xldmVsO1xuICAgICAgfVxuICAgICAgaWYgKGNhcHR1cmVDb250ZXh0Ll9maW5nZXJwcmludCkge1xuICAgICAgICB0aGlzLl9maW5nZXJwcmludCA9IGNhcHR1cmVDb250ZXh0Ll9maW5nZXJwcmludDtcbiAgICAgIH1cbiAgICAgIGlmIChjYXB0dXJlQ29udGV4dC5fcmVxdWVzdFNlc3Npb24pIHtcbiAgICAgICAgdGhpcy5fcmVxdWVzdFNlc3Npb24gPSBjYXB0dXJlQ29udGV4dC5fcmVxdWVzdFNlc3Npb247XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KGNhcHR1cmVDb250ZXh0KSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBjYXB0dXJlQ29udGV4dCA9IGNhcHR1cmVDb250ZXh0IGFzIFNjb3BlQ29udGV4dDtcbiAgICAgIHRoaXMuX3RhZ3MgPSB7IC4uLnRoaXMuX3RhZ3MsIC4uLmNhcHR1cmVDb250ZXh0LnRhZ3MgfTtcbiAgICAgIHRoaXMuX2V4dHJhID0geyAuLi50aGlzLl9leHRyYSwgLi4uY2FwdHVyZUNvbnRleHQuZXh0cmEgfTtcbiAgICAgIHRoaXMuX2NvbnRleHRzID0geyAuLi50aGlzLl9jb250ZXh0cywgLi4uY2FwdHVyZUNvbnRleHQuY29udGV4dHMgfTtcbiAgICAgIGlmIChjYXB0dXJlQ29udGV4dC51c2VyKSB7XG4gICAgICAgIHRoaXMuX3VzZXIgPSBjYXB0dXJlQ29udGV4dC51c2VyO1xuICAgICAgfVxuICAgICAgaWYgKGNhcHR1cmVDb250ZXh0LmxldmVsKSB7XG4gICAgICAgIHRoaXMuX2xldmVsID0gY2FwdHVyZUNvbnRleHQubGV2ZWw7XG4gICAgICB9XG4gICAgICBpZiAoY2FwdHVyZUNvbnRleHQuZmluZ2VycHJpbnQpIHtcbiAgICAgICAgdGhpcy5fZmluZ2VycHJpbnQgPSBjYXB0dXJlQ29udGV4dC5maW5nZXJwcmludDtcbiAgICAgIH1cbiAgICAgIGlmIChjYXB0dXJlQ29udGV4dC5yZXF1ZXN0U2Vzc2lvbikge1xuICAgICAgICB0aGlzLl9yZXF1ZXN0U2Vzc2lvbiA9IGNhcHR1cmVDb250ZXh0LnJlcXVlc3RTZXNzaW9uO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgY2xlYXIoKTogdGhpcyB7XG4gICAgdGhpcy5fYnJlYWRjcnVtYnMgPSBbXTtcbiAgICB0aGlzLl90YWdzID0ge307XG4gICAgdGhpcy5fZXh0cmEgPSB7fTtcbiAgICB0aGlzLl91c2VyID0ge307XG4gICAgdGhpcy5fY29udGV4dHMgPSB7fTtcbiAgICB0aGlzLl9sZXZlbCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl90cmFuc2FjdGlvbk5hbWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fZmluZ2VycHJpbnQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fcmVxdWVzdFNlc3Npb24gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5fc3BhbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLl9zZXNzaW9uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBhZGRCcmVhZGNydW1iKGJyZWFkY3J1bWI6IEJyZWFkY3J1bWIsIG1heEJyZWFkY3J1bWJzPzogbnVtYmVyKTogdGhpcyB7XG4gICAgY29uc3QgbWF4Q3J1bWJzID0gdHlwZW9mIG1heEJyZWFkY3J1bWJzID09PSAnbnVtYmVyJyA/IE1hdGgubWluKG1heEJyZWFkY3J1bWJzLCBNQVhfQlJFQURDUlVNQlMpIDogTUFYX0JSRUFEQ1JVTUJTO1xuXG4gICAgLy8gTm8gZGF0YSBoYXMgYmVlbiBjaGFuZ2VkLCBzbyBkb24ndCBub3RpZnkgc2NvcGUgbGlzdGVuZXJzXG4gICAgaWYgKG1heENydW1icyA8PSAwKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBjb25zdCBtZXJnZWRCcmVhZGNydW1iID0ge1xuICAgICAgdGltZXN0YW1wOiBkYXRlVGltZXN0YW1wSW5TZWNvbmRzKCksXG4gICAgICAuLi5icmVhZGNydW1iLFxuICAgIH07XG4gICAgdGhpcy5fYnJlYWRjcnVtYnMgPSBbLi4udGhpcy5fYnJlYWRjcnVtYnMsIG1lcmdlZEJyZWFkY3J1bWJdLnNsaWNlKC1tYXhDcnVtYnMpO1xuICAgIHRoaXMuX25vdGlmeVNjb3BlTGlzdGVuZXJzKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNsZWFyQnJlYWRjcnVtYnMoKTogdGhpcyB7XG4gICAgdGhpcy5fYnJlYWRjcnVtYnMgPSBbXTtcbiAgICB0aGlzLl9ub3RpZnlTY29wZUxpc3RlbmVycygpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgZmluZ2VycHJpbnQgdG8gdGhlIGV2ZW50LlxuICAgKiBOb3RlIHRoYXQgYnJlYWRjcnVtYnMgd2lsbCBiZSBhZGRlZCBieSB0aGUgY2xpZW50LlxuICAgKiBBbHNvIGlmIHRoZSBldmVudCBoYXMgYWxyZWFkeSBicmVhZGNydW1icyBvbiBpdCwgd2UgZG8gbm90IG1lcmdlIHRoZW0uXG4gICAqIEBwYXJhbSBldmVudCBFdmVudFxuICAgKiBAcGFyYW0gaGludCBNYXkgY29udGFpbiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcmlnaW5hbCBleGNlcHRpb24uXG4gICAqIEBoaWRkZW5cbiAgICovXG4gIHB1YmxpYyBhcHBseVRvRXZlbnQoZXZlbnQ6IEV2ZW50LCBoaW50PzogRXZlbnRIaW50KTogUHJvbWlzZUxpa2U8RXZlbnQgfCBudWxsPiB7XG4gICAgaWYgKHRoaXMuX2V4dHJhICYmIE9iamVjdC5rZXlzKHRoaXMuX2V4dHJhKS5sZW5ndGgpIHtcbiAgICAgIGV2ZW50LmV4dHJhID0geyAuLi50aGlzLl9leHRyYSwgLi4uZXZlbnQuZXh0cmEgfTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX3RhZ3MgJiYgT2JqZWN0LmtleXModGhpcy5fdGFncykubGVuZ3RoKSB7XG4gICAgICBldmVudC50YWdzID0geyAuLi50aGlzLl90YWdzLCAuLi5ldmVudC50YWdzIH07XG4gICAgfVxuICAgIGlmICh0aGlzLl91c2VyICYmIE9iamVjdC5rZXlzKHRoaXMuX3VzZXIpLmxlbmd0aCkge1xuICAgICAgZXZlbnQudXNlciA9IHsgLi4udGhpcy5fdXNlciwgLi4uZXZlbnQudXNlciB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5fY29udGV4dHMgJiYgT2JqZWN0LmtleXModGhpcy5fY29udGV4dHMpLmxlbmd0aCkge1xuICAgICAgZXZlbnQuY29udGV4dHMgPSB7IC4uLnRoaXMuX2NvbnRleHRzLCAuLi5ldmVudC5jb250ZXh0cyB9O1xuICAgIH1cbiAgICBpZiAodGhpcy5fbGV2ZWwpIHtcbiAgICAgIGV2ZW50LmxldmVsID0gdGhpcy5fbGV2ZWw7XG4gICAgfVxuICAgIGlmICh0aGlzLl90cmFuc2FjdGlvbk5hbWUpIHtcbiAgICAgIGV2ZW50LnRyYW5zYWN0aW9uID0gdGhpcy5fdHJhbnNhY3Rpb25OYW1lO1xuICAgIH1cbiAgICAvLyBXZSB3YW50IHRvIHNldCB0aGUgdHJhY2UgY29udGV4dCBmb3Igbm9ybWFsIGV2ZW50cyBvbmx5IGlmIHRoZXJlIGlzbid0IGFscmVhZHlcbiAgICAvLyBhIHRyYWNlIGNvbnRleHQgb24gdGhlIGV2ZW50LiBUaGVyZSBpcyBhIHByb2R1Y3QgZmVhdHVyZSBpbiBwbGFjZSB3aGVyZSB3ZSBsaW5rXG4gICAgLy8gZXJyb3JzIHdpdGggdHJhbnNhY3Rpb24gYW5kIGl0IHJlbGllcyBvbiB0aGF0LlxuICAgIGlmICh0aGlzLl9zcGFuKSB7XG4gICAgICBldmVudC5jb250ZXh0cyA9IHsgdHJhY2U6IHRoaXMuX3NwYW4uZ2V0VHJhY2VDb250ZXh0KCksIC4uLmV2ZW50LmNvbnRleHRzIH07XG4gICAgICBjb25zdCB0cmFuc2FjdGlvbk5hbWUgPSB0aGlzLl9zcGFuLnRyYW5zYWN0aW9uPy5uYW1lO1xuICAgICAgaWYgKHRyYW5zYWN0aW9uTmFtZSkge1xuICAgICAgICBldmVudC50YWdzID0geyB0cmFuc2FjdGlvbjogdHJhbnNhY3Rpb25OYW1lLCAuLi5ldmVudC50YWdzIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fYXBwbHlGaW5nZXJwcmludChldmVudCk7XG5cbiAgICBldmVudC5icmVhZGNydW1icyA9IFsuLi4oZXZlbnQuYnJlYWRjcnVtYnMgfHwgW10pLCAuLi50aGlzLl9icmVhZGNydW1ic107XG4gICAgZXZlbnQuYnJlYWRjcnVtYnMgPSBldmVudC5icmVhZGNydW1icy5sZW5ndGggPiAwID8gZXZlbnQuYnJlYWRjcnVtYnMgOiB1bmRlZmluZWQ7XG5cbiAgICByZXR1cm4gdGhpcy5fbm90aWZ5RXZlbnRQcm9jZXNzb3JzKFsuLi5nZXRHbG9iYWxFdmVudFByb2Nlc3NvcnMoKSwgLi4udGhpcy5fZXZlbnRQcm9jZXNzb3JzXSwgZXZlbnQsIGhpbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBiZSBjYWxsZWQgYWZ0ZXIge0BsaW5rIGFwcGx5VG9FdmVudH0gaXMgZmluaXNoZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgX25vdGlmeUV2ZW50UHJvY2Vzc29ycyhcbiAgICBwcm9jZXNzb3JzOiBFdmVudFByb2Nlc3NvcltdLFxuICAgIGV2ZW50OiBFdmVudCB8IG51bGwsXG4gICAgaGludD86IEV2ZW50SGludCxcbiAgICBpbmRleDogbnVtYmVyID0gMCxcbiAgKTogUHJvbWlzZUxpa2U8RXZlbnQgfCBudWxsPiB7XG4gICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZTxFdmVudCB8IG51bGw+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IHByb2Nlc3NvciA9IHByb2Nlc3NvcnNbaW5kZXhdO1xuICAgICAgaWYgKGV2ZW50ID09PSBudWxsIHx8IHR5cGVvZiBwcm9jZXNzb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcmVzb2x2ZShldmVudCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBwcm9jZXNzb3IoeyAuLi5ldmVudCB9LCBoaW50KSBhcyBFdmVudCB8IG51bGw7XG4gICAgICAgIGlmIChpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgICB2b2lkIChyZXN1bHQgYXMgUHJvbWlzZUxpa2U8RXZlbnQgfCBudWxsPilcbiAgICAgICAgICAgIC50aGVuKGZpbmFsID0+IHRoaXMuX25vdGlmeUV2ZW50UHJvY2Vzc29ycyhwcm9jZXNzb3JzLCBmaW5hbCwgaGludCwgaW5kZXggKyAxKS50aGVuKHJlc29sdmUpKVxuICAgICAgICAgICAgLnRoZW4obnVsbCwgcmVqZWN0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2b2lkIHRoaXMuX25vdGlmeUV2ZW50UHJvY2Vzc29ycyhwcm9jZXNzb3JzLCByZXN1bHQsIGhpbnQsIGluZGV4ICsgMSlcbiAgICAgICAgICAgIC50aGVuKHJlc29sdmUpXG4gICAgICAgICAgICAudGhlbihudWxsLCByZWplY3QpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyB3aWxsIGJlIGNhbGxlZCBvbiBldmVyeSBzZXQgY2FsbC5cbiAgICovXG4gIHByb3RlY3RlZCBfbm90aWZ5U2NvcGVMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgLy8gV2UgbmVlZCB0aGlzIGNoZWNrIGZvciB0aGlzLl9ub3RpZnlpbmdMaXN0ZW5lcnMgdG8gYmUgYWJsZSB0byB3b3JrIG9uIHNjb3BlIGR1cmluZyB1cGRhdGVzXG4gICAgLy8gSWYgdGhpcyBjaGVjayBpcyBub3QgaGVyZSB3ZSdsbCBwcm9kdWNlIGVuZGxlc3MgcmVjdXJzaW9uIHdoZW4gc29tZXRoaW5nIGlzIGRvbmUgd2l0aCB0aGUgc2NvcGVcbiAgICAvLyBkdXJpbmcgdGhlIGNhbGxiYWNrLlxuICAgIGlmICghdGhpcy5fbm90aWZ5aW5nTGlzdGVuZXJzKSB7XG4gICAgICB0aGlzLl9ub3RpZnlpbmdMaXN0ZW5lcnMgPSB0cnVlO1xuICAgICAgdGhpcy5fc2NvcGVMaXN0ZW5lcnMuZm9yRWFjaChjYWxsYmFjayA9PiB7XG4gICAgICAgIGNhbGxiYWNrKHRoaXMpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9ub3RpZnlpbmdMaXN0ZW5lcnMgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBmaW5nZXJwcmludCBmcm9tIHRoZSBzY29wZSB0byB0aGUgZXZlbnQgaWYgdGhlcmUncyBvbmUsXG4gICAqIHVzZXMgbWVzc2FnZSBpZiB0aGVyZSdzIG9uZSBpbnN0ZWFkIG9yIGdldCByaWQgb2YgZW1wdHkgZmluZ2VycHJpbnRcbiAgICovXG4gIHByaXZhdGUgX2FwcGx5RmluZ2VycHJpbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgLy8gTWFrZSBzdXJlIGl0J3MgYW4gYXJyYXkgZmlyc3QgYW5kIHdlIGFjdHVhbGx5IGhhdmUgc29tZXRoaW5nIGluIHBsYWNlXG4gICAgZXZlbnQuZmluZ2VycHJpbnQgPSBldmVudC5maW5nZXJwcmludFxuICAgICAgPyBBcnJheS5pc0FycmF5KGV2ZW50LmZpbmdlcnByaW50KVxuICAgICAgICA/IGV2ZW50LmZpbmdlcnByaW50XG4gICAgICAgIDogW2V2ZW50LmZpbmdlcnByaW50XVxuICAgICAgOiBbXTtcblxuICAgIC8vIElmIHdlIGhhdmUgc29tZXRoaW5nIG9uIHRoZSBzY29wZSwgdGhlbiBtZXJnZSBpdCB3aXRoIGV2ZW50XG4gICAgaWYgKHRoaXMuX2ZpbmdlcnByaW50KSB7XG4gICAgICBldmVudC5maW5nZXJwcmludCA9IGV2ZW50LmZpbmdlcnByaW50LmNvbmNhdCh0aGlzLl9maW5nZXJwcmludCk7XG4gICAgfVxuXG4gICAgLy8gSWYgd2UgaGF2ZSBubyBkYXRhIGF0IGFsbCwgcmVtb3ZlIGVtcHR5IGFycmF5IGRlZmF1bHRcbiAgICBpZiAoZXZlbnQuZmluZ2VycHJpbnQgJiYgIWV2ZW50LmZpbmdlcnByaW50Lmxlbmd0aCkge1xuICAgICAgZGVsZXRlIGV2ZW50LmZpbmdlcnByaW50O1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGdsb2JhbCBldmVudCBwcm9jZXNzb3JzLlxuICovXG5mdW5jdGlvbiBnZXRHbG9iYWxFdmVudFByb2Nlc3NvcnMoKTogRXZlbnRQcm9jZXNzb3JbXSB7XG4gIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAgKi9cbiAgY29uc3QgZ2xvYmFsID0gZ2V0R2xvYmFsT2JqZWN0PGFueT4oKTtcbiAgZ2xvYmFsLl9fU0VOVFJZX18gPSBnbG9iYWwuX19TRU5UUllfXyB8fCB7fTtcbiAgZ2xvYmFsLl9fU0VOVFJZX18uZ2xvYmFsRXZlbnRQcm9jZXNzb3JzID0gZ2xvYmFsLl9fU0VOVFJZX18uZ2xvYmFsRXZlbnRQcm9jZXNzb3JzIHx8IFtdO1xuICByZXR1cm4gZ2xvYmFsLl9fU0VOVFJZX18uZ2xvYmFsRXZlbnRQcm9jZXNzb3JzO1xuICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAqL1xufVxuXG4vKipcbiAqIEFkZCBhIEV2ZW50UHJvY2Vzc29yIHRvIGJlIGtlcHQgZ2xvYmFsbHkuXG4gKiBAcGFyYW0gY2FsbGJhY2sgRXZlbnRQcm9jZXNzb3IgdG8gYWRkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRHbG9iYWxFdmVudFByb2Nlc3NvcihjYWxsYmFjazogRXZlbnRQcm9jZXNzb3IpOiB2b2lkIHtcbiAgZ2V0R2xvYmFsRXZlbnRQcm9jZXNzb3JzKCkucHVzaChjYWxsYmFjayk7XG59XG4iLCAiaW1wb3J0IHsgU2Vzc2lvbiBhcyBTZXNzaW9uSW50ZXJmYWNlLCBTZXNzaW9uQ29udGV4dCwgU2Vzc2lvblN0YXR1cyB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgZHJvcFVuZGVmaW5lZEtleXMsIHRpbWVzdGFtcEluU2Vjb25kcywgdXVpZDQgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuLyoqXG4gKiBAaW5oZXJpdGRvY1xuICovXG5leHBvcnQgY2xhc3MgU2Vzc2lvbiBpbXBsZW1lbnRzIFNlc3Npb25JbnRlcmZhY2Uge1xuICBwdWJsaWMgdXNlckFnZW50Pzogc3RyaW5nO1xuICBwdWJsaWMgZXJyb3JzOiBudW1iZXIgPSAwO1xuICBwdWJsaWMgcmVsZWFzZT86IHN0cmluZztcbiAgcHVibGljIHNpZDogc3RyaW5nID0gdXVpZDQoKTtcbiAgcHVibGljIGRpZD86IHN0cmluZztcbiAgcHVibGljIHRpbWVzdGFtcDogbnVtYmVyO1xuICBwdWJsaWMgc3RhcnRlZDogbnVtYmVyO1xuICBwdWJsaWMgZHVyYXRpb24/OiBudW1iZXIgPSAwO1xuICBwdWJsaWMgc3RhdHVzOiBTZXNzaW9uU3RhdHVzID0gU2Vzc2lvblN0YXR1cy5PaztcbiAgcHVibGljIGVudmlyb25tZW50Pzogc3RyaW5nO1xuICBwdWJsaWMgaXBBZGRyZXNzPzogc3RyaW5nO1xuICBwdWJsaWMgaW5pdDogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBpZ25vcmVEdXJhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3Rvcihjb250ZXh0PzogT21pdDxTZXNzaW9uQ29udGV4dCwgJ3N0YXJ0ZWQnIHwgJ3N0YXR1cyc+KSB7XG4gICAgLy8gQm90aCB0aW1lc3RhbXAgYW5kIHN0YXJ0ZWQgYXJlIGluIHNlY29uZHMgc2luY2UgdGhlIFVOSVggZXBvY2guXG4gICAgY29uc3Qgc3RhcnRpbmdUaW1lID0gdGltZXN0YW1wSW5TZWNvbmRzKCk7XG4gICAgdGhpcy50aW1lc3RhbXAgPSBzdGFydGluZ1RpbWU7XG4gICAgdGhpcy5zdGFydGVkID0gc3RhcnRpbmdUaW1lO1xuICAgIGlmIChjb250ZXh0KSB7XG4gICAgICB0aGlzLnVwZGF0ZShjb250ZXh0KTtcbiAgICB9XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcbiAgcHVibGljIHVwZGF0ZShjb250ZXh0OiBTZXNzaW9uQ29udGV4dCA9IHt9KTogdm9pZCB7XG4gICAgaWYgKGNvbnRleHQudXNlcikge1xuICAgICAgaWYgKCF0aGlzLmlwQWRkcmVzcyAmJiBjb250ZXh0LnVzZXIuaXBfYWRkcmVzcykge1xuICAgICAgICB0aGlzLmlwQWRkcmVzcyA9IGNvbnRleHQudXNlci5pcF9hZGRyZXNzO1xuICAgICAgfVxuXG4gICAgICBpZiAoIXRoaXMuZGlkICYmICFjb250ZXh0LmRpZCkge1xuICAgICAgICB0aGlzLmRpZCA9IGNvbnRleHQudXNlci5pZCB8fCBjb250ZXh0LnVzZXIuZW1haWwgfHwgY29udGV4dC51c2VyLnVzZXJuYW1lO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudGltZXN0YW1wID0gY29udGV4dC50aW1lc3RhbXAgfHwgdGltZXN0YW1wSW5TZWNvbmRzKCk7XG4gICAgaWYgKGNvbnRleHQuaWdub3JlRHVyYXRpb24pIHtcbiAgICAgIHRoaXMuaWdub3JlRHVyYXRpb24gPSBjb250ZXh0Lmlnbm9yZUR1cmF0aW9uO1xuICAgIH1cbiAgICBpZiAoY29udGV4dC5zaWQpIHtcbiAgICAgIC8vIEdvb2QgZW5vdWdoIHV1aWQgdmFsaWRhdGlvbi4gXHUyMDE0IEthbWlsXG4gICAgICB0aGlzLnNpZCA9IGNvbnRleHQuc2lkLmxlbmd0aCA9PT0gMzIgPyBjb250ZXh0LnNpZCA6IHV1aWQ0KCk7XG4gICAgfVxuICAgIGlmIChjb250ZXh0LmluaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5pbml0ID0gY29udGV4dC5pbml0O1xuICAgIH1cbiAgICBpZiAoIXRoaXMuZGlkICYmIGNvbnRleHQuZGlkKSB7XG4gICAgICB0aGlzLmRpZCA9IGAke2NvbnRleHQuZGlkfWA7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29udGV4dC5zdGFydGVkID09PSAnbnVtYmVyJykge1xuICAgICAgdGhpcy5zdGFydGVkID0gY29udGV4dC5zdGFydGVkO1xuICAgIH1cbiAgICBpZiAodGhpcy5pZ25vcmVEdXJhdGlvbikge1xuICAgICAgdGhpcy5kdXJhdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb250ZXh0LmR1cmF0aW9uID09PSAnbnVtYmVyJykge1xuICAgICAgdGhpcy5kdXJhdGlvbiA9IGNvbnRleHQuZHVyYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGR1cmF0aW9uID0gdGhpcy50aW1lc3RhbXAgLSB0aGlzLnN0YXJ0ZWQ7XG4gICAgICB0aGlzLmR1cmF0aW9uID0gZHVyYXRpb24gPj0gMCA/IGR1cmF0aW9uIDogMDtcbiAgICB9XG4gICAgaWYgKGNvbnRleHQucmVsZWFzZSkge1xuICAgICAgdGhpcy5yZWxlYXNlID0gY29udGV4dC5yZWxlYXNlO1xuICAgIH1cbiAgICBpZiAoY29udGV4dC5lbnZpcm9ubWVudCkge1xuICAgICAgdGhpcy5lbnZpcm9ubWVudCA9IGNvbnRleHQuZW52aXJvbm1lbnQ7XG4gICAgfVxuICAgIGlmICghdGhpcy5pcEFkZHJlc3MgJiYgY29udGV4dC5pcEFkZHJlc3MpIHtcbiAgICAgIHRoaXMuaXBBZGRyZXNzID0gY29udGV4dC5pcEFkZHJlc3M7XG4gICAgfVxuICAgIGlmICghdGhpcy51c2VyQWdlbnQgJiYgY29udGV4dC51c2VyQWdlbnQpIHtcbiAgICAgIHRoaXMudXNlckFnZW50ID0gY29udGV4dC51c2VyQWdlbnQ7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgY29udGV4dC5lcnJvcnMgPT09ICdudW1iZXInKSB7XG4gICAgICB0aGlzLmVycm9ycyA9IGNvbnRleHQuZXJyb3JzO1xuICAgIH1cbiAgICBpZiAoY29udGV4dC5zdGF0dXMpIHtcbiAgICAgIHRoaXMuc3RhdHVzID0gY29udGV4dC5zdGF0dXM7XG4gICAgfVxuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHB1YmxpYyBjbG9zZShzdGF0dXM/OiBFeGNsdWRlPFNlc3Npb25TdGF0dXMsIFNlc3Npb25TdGF0dXMuT2s+KTogdm9pZCB7XG4gICAgaWYgKHN0YXR1cykge1xuICAgICAgdGhpcy51cGRhdGUoeyBzdGF0dXMgfSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnN0YXR1cyA9PT0gU2Vzc2lvblN0YXR1cy5Paykge1xuICAgICAgdGhpcy51cGRhdGUoeyBzdGF0dXM6IFNlc3Npb25TdGF0dXMuRXhpdGVkIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnVwZGF0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwdWJsaWMgdG9KU09OKCk6IHtcbiAgICBpbml0OiBib29sZWFuO1xuICAgIHNpZDogc3RyaW5nO1xuICAgIGRpZD86IHN0cmluZztcbiAgICB0aW1lc3RhbXA6IHN0cmluZztcbiAgICBzdGFydGVkOiBzdHJpbmc7XG4gICAgZHVyYXRpb24/OiBudW1iZXI7XG4gICAgc3RhdHVzOiBTZXNzaW9uU3RhdHVzO1xuICAgIGVycm9yczogbnVtYmVyO1xuICAgIGF0dHJzPzoge1xuICAgICAgcmVsZWFzZT86IHN0cmluZztcbiAgICAgIGVudmlyb25tZW50Pzogc3RyaW5nO1xuICAgICAgdXNlcl9hZ2VudD86IHN0cmluZztcbiAgICAgIGlwX2FkZHJlc3M/OiBzdHJpbmc7XG4gICAgfTtcbiAgfSB7XG4gICAgcmV0dXJuIGRyb3BVbmRlZmluZWRLZXlzKHtcbiAgICAgIHNpZDogYCR7dGhpcy5zaWR9YCxcbiAgICAgIGluaXQ6IHRoaXMuaW5pdCxcbiAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHNlYyBpcyBjb252ZXJ0ZWQgdG8gbXMgZm9yIGRhdGUgY29uc3RydWN0b3JcbiAgICAgIHN0YXJ0ZWQ6IG5ldyBEYXRlKHRoaXMuc3RhcnRlZCAqIDEwMDApLnRvSVNPU3RyaW5nKCksXG4gICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKHRoaXMudGltZXN0YW1wICogMTAwMCkudG9JU09TdHJpbmcoKSxcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICBlcnJvcnM6IHRoaXMuZXJyb3JzLFxuICAgICAgZGlkOiB0eXBlb2YgdGhpcy5kaWQgPT09ICdudW1iZXInIHx8IHR5cGVvZiB0aGlzLmRpZCA9PT0gJ3N0cmluZycgPyBgJHt0aGlzLmRpZH1gIDogdW5kZWZpbmVkLFxuICAgICAgZHVyYXRpb246IHRoaXMuZHVyYXRpb24sXG4gICAgICBhdHRyczogZHJvcFVuZGVmaW5lZEtleXMoe1xuICAgICAgICByZWxlYXNlOiB0aGlzLnJlbGVhc2UsXG4gICAgICAgIGVudmlyb25tZW50OiB0aGlzLmVudmlyb25tZW50LFxuICAgICAgICBpcF9hZGRyZXNzOiB0aGlzLmlwQWRkcmVzcyxcbiAgICAgICAgdXNlcl9hZ2VudDogdGhpcy51c2VyQWdlbnQsXG4gICAgICB9KSxcbiAgICB9KTtcbiAgfVxufVxuIiwgIi8qIGVzbGludC1kaXNhYmxlIG1heC1saW5lcyAqL1xuaW1wb3J0IHtcbiAgQnJlYWRjcnVtYixcbiAgQnJlYWRjcnVtYkhpbnQsXG4gIENsaWVudCxcbiAgQ3VzdG9tU2FtcGxpbmdDb250ZXh0LFxuICBFdmVudCxcbiAgRXZlbnRIaW50LFxuICBFeHRyYSxcbiAgRXh0cmFzLFxuICBIdWIgYXMgSHViSW50ZXJmYWNlLFxuICBJbnRlZ3JhdGlvbixcbiAgSW50ZWdyYXRpb25DbGFzcyxcbiAgUHJpbWl0aXZlLFxuICBTZXNzaW9uQ29udGV4dCxcbiAgU2Vzc2lvblN0YXR1cyxcbiAgU2V2ZXJpdHksXG4gIFNwYW4sXG4gIFNwYW5Db250ZXh0LFxuICBUcmFuc2FjdGlvbixcbiAgVHJhbnNhY3Rpb25Db250ZXh0LFxuICBVc2VyLFxufSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGNvbnNvbGVTYW5kYm94LCBkYXRlVGltZXN0YW1wSW5TZWNvbmRzLCBnZXRHbG9iYWxPYmplY3QsIGlzTm9kZUVudiwgbG9nZ2VyLCB1dWlkNCB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5pbXBvcnQgeyBTY29wZSB9IGZyb20gJy4vc2NvcGUnO1xuaW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gJy4vc2Vzc2lvbic7XG5cbi8qKlxuICogQVBJIGNvbXBhdGliaWxpdHkgdmVyc2lvbiBvZiB0aGlzIGh1Yi5cbiAqXG4gKiBXQVJOSU5HOiBUaGlzIG51bWJlciBzaG91bGQgb25seSBiZSBpbmNyZWFzZWQgd2hlbiB0aGUgZ2xvYmFsIGludGVyZmFjZVxuICogY2hhbmdlcyBhbmQgbmV3IG1ldGhvZHMgYXJlIGludHJvZHVjZWQuXG4gKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY29uc3QgQVBJX1ZFUlNJT04gPSA0O1xuXG4vKipcbiAqIERlZmF1bHQgbWF4aW11bSBudW1iZXIgb2YgYnJlYWRjcnVtYnMgYWRkZWQgdG8gYW4gZXZlbnQuIENhbiBiZSBvdmVyd3JpdHRlblxuICogd2l0aCB7QGxpbmsgT3B0aW9ucy5tYXhCcmVhZGNydW1ic30uXG4gKi9cbmNvbnN0IERFRkFVTFRfQlJFQURDUlVNQlMgPSAxMDA7XG5cbi8qKlxuICogQSBsYXllciBpbiB0aGUgcHJvY2VzcyBzdGFjay5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYXllciB7XG4gIGNsaWVudD86IENsaWVudDtcbiAgc2NvcGU/OiBTY29wZTtcbn1cblxuLyoqXG4gKiBBbiBvYmplY3QgdGhhdCBjb250YWlucyBhIGh1YiBhbmQgbWFpbnRhaW5zIGEgc2NvcGUgc3RhY2suXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FycmllciB7XG4gIF9fU0VOVFJZX18/OiB7XG4gICAgaHViPzogSHViO1xuICAgIC8qKlxuICAgICAqIEV4dHJhIEh1YiBwcm9wZXJ0aWVzIGluamVjdGVkIGJ5IHZhcmlvdXMgU0RLc1xuICAgICAqL1xuICAgIGludGVncmF0aW9ucz86IEludGVncmF0aW9uW107XG4gICAgZXh0ZW5zaW9ucz86IHtcbiAgICAgIC8qKiBIYWNrIHRvIHByZXZlbnQgYnVuZGxlcnMgZnJvbSBicmVha2luZyBvdXIgdXNhZ2Ugb2YgdGhlIGRvbWFpbiBwYWNrYWdlIGluIHRoZSBjcm9zcy1wbGF0Zm9ybSBIdWIgcGFja2FnZSAqL1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICAgIGRvbWFpbj86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG4gICAgfSAmIHtcbiAgICAgIC8qKiBFeHRlbnNpb24gbWV0aG9kcyBmb3IgdGhlIGh1Yiwgd2hpY2ggYXJlIGJvdW5kIHRvIHRoZSBjdXJyZW50IEh1YiBpbnN0YW5jZSAqL1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXNcbiAgICAgIFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uO1xuICAgIH07XG4gIH07XG59XG5cbi8qKlxuICogQGhpZGRlblxuICogQGRlcHJlY2F0ZWQgQ2FuIGJlIHJlbW92ZWQgb25jZSBgSHViLmdldEFjdGl2ZURvbWFpbmAgaXMgcmVtb3ZlZC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb21haW5Bc0NhcnJpZXIgZXh0ZW5kcyBDYXJyaWVyIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgbWVtYmVyczogeyBba2V5OiBzdHJpbmddOiBhbnkgfVtdO1xufVxuXG4vKipcbiAqIEBpbmhlcml0RG9jXG4gKi9cbmV4cG9ydCBjbGFzcyBIdWIgaW1wbGVtZW50cyBIdWJJbnRlcmZhY2Uge1xuICAvKiogSXMgYSB7QGxpbmsgTGF5ZXJ9W10gY29udGFpbmluZyB0aGUgY2xpZW50IGFuZCBzY29wZSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9zdGFjazogTGF5ZXJbXSA9IFt7fV07XG5cbiAgLyoqIENvbnRhaW5zIHRoZSBsYXN0IGV2ZW50IGlkIG9mIGEgY2FwdHVyZWQgZXZlbnQuICAqL1xuICBwcml2YXRlIF9sYXN0RXZlbnRJZD86IHN0cmluZztcblxuICAvKipcbiAgICogQ3JlYXRlcyBhIG5ldyBpbnN0YW5jZSBvZiB0aGUgaHViLCB3aWxsIHB1c2ggb25lIHtAbGluayBMYXllcn0gaW50byB0aGVcbiAgICogaW50ZXJuYWwgc3RhY2sgb24gY3JlYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBjbGllbnQgYm91bmQgdG8gdGhlIGh1Yi5cbiAgICogQHBhcmFtIHNjb3BlIGJvdW5kIHRvIHRoZSBodWIuXG4gICAqIEBwYXJhbSB2ZXJzaW9uIG51bWJlciwgaGlnaGVyIG51bWJlciBtZWFucyBoaWdoZXIgcHJpb3JpdHkuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoY2xpZW50PzogQ2xpZW50LCBzY29wZTogU2NvcGUgPSBuZXcgU2NvcGUoKSwgcHJpdmF0ZSByZWFkb25seSBfdmVyc2lvbjogbnVtYmVyID0gQVBJX1ZFUlNJT04pIHtcbiAgICB0aGlzLmdldFN0YWNrVG9wKCkuc2NvcGUgPSBzY29wZTtcbiAgICBpZiAoY2xpZW50KSB7XG4gICAgICB0aGlzLmJpbmRDbGllbnQoY2xpZW50KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBpc09sZGVyVGhhbih2ZXJzaW9uOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fdmVyc2lvbiA8IHZlcnNpb247XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBiaW5kQ2xpZW50KGNsaWVudD86IENsaWVudCk6IHZvaWQge1xuICAgIGNvbnN0IHRvcCA9IHRoaXMuZ2V0U3RhY2tUb3AoKTtcbiAgICB0b3AuY2xpZW50ID0gY2xpZW50O1xuICAgIGlmIChjbGllbnQgJiYgY2xpZW50LnNldHVwSW50ZWdyYXRpb25zKSB7XG4gICAgICBjbGllbnQuc2V0dXBJbnRlZ3JhdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBwdXNoU2NvcGUoKTogU2NvcGUge1xuICAgIC8vIFdlIHdhbnQgdG8gY2xvbmUgdGhlIGNvbnRlbnQgb2YgcHJldiBzY29wZVxuICAgIGNvbnN0IHNjb3BlID0gU2NvcGUuY2xvbmUodGhpcy5nZXRTY29wZSgpKTtcbiAgICB0aGlzLmdldFN0YWNrKCkucHVzaCh7XG4gICAgICBjbGllbnQ6IHRoaXMuZ2V0Q2xpZW50KCksXG4gICAgICBzY29wZSxcbiAgICB9KTtcbiAgICByZXR1cm4gc2NvcGU7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBwb3BTY29wZSgpOiBib29sZWFuIHtcbiAgICBpZiAodGhpcy5nZXRTdGFjaygpLmxlbmd0aCA8PSAxKSByZXR1cm4gZmFsc2U7XG4gICAgcmV0dXJuICEhdGhpcy5nZXRTdGFjaygpLnBvcCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgd2l0aFNjb3BlKGNhbGxiYWNrOiAoc2NvcGU6IFNjb3BlKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLnB1c2hTY29wZSgpO1xuICAgIHRyeSB7XG4gICAgICBjYWxsYmFjayhzY29wZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMucG9wU2NvcGUoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBnZXRDbGllbnQ8QyBleHRlbmRzIENsaWVudD4oKTogQyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0U3RhY2tUb3AoKS5jbGllbnQgYXMgQztcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBzY29wZSBvZiB0aGUgdG9wIHN0YWNrLiAqL1xuICBwdWJsaWMgZ2V0U2NvcGUoKTogU2NvcGUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLmdldFN0YWNrVG9wKCkuc2NvcGU7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgc2NvcGUgc3RhY2sgZm9yIGRvbWFpbnMgb3IgdGhlIHByb2Nlc3MuICovXG4gIHB1YmxpYyBnZXRTdGFjaygpOiBMYXllcltdIHtcbiAgICByZXR1cm4gdGhpcy5fc3RhY2s7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgdG9wbW9zdCBzY29wZSBsYXllciBpbiB0aGUgb3JkZXIgZG9tYWluID4gbG9jYWwgPiBwcm9jZXNzLiAqL1xuICBwdWJsaWMgZ2V0U3RhY2tUb3AoKTogTGF5ZXIge1xuICAgIHJldHVybiB0aGlzLl9zdGFja1t0aGlzLl9zdGFjay5sZW5ndGggLSAxXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9leHBsaWNpdC1tb2R1bGUtYm91bmRhcnktdHlwZXNcbiAgcHVibGljIGNhcHR1cmVFeGNlcHRpb24oZXhjZXB0aW9uOiBhbnksIGhpbnQ/OiBFdmVudEhpbnQpOiBzdHJpbmcge1xuICAgIGNvbnN0IGV2ZW50SWQgPSAodGhpcy5fbGFzdEV2ZW50SWQgPSB1dWlkNCgpKTtcbiAgICBsZXQgZmluYWxIaW50ID0gaGludDtcblxuICAgIC8vIElmIHRoZXJlJ3Mgbm8gZXhwbGljaXQgaGludCBwcm92aWRlZCwgbWltaWMgdGhlIHNhbWUgdGhpbmcgdGhhdCB3b3VsZCBoYXBwZW5cbiAgICAvLyBpbiB0aGUgbWluaW1hbCBpdHNlbGYgdG8gY3JlYXRlIGEgY29uc2lzdGVudCBiZWhhdmlvci5cbiAgICAvLyBXZSBkb24ndCBkbyB0aGlzIGluIHRoZSBjbGllbnQsIGFzIGl0J3MgdGhlIGxvd2VzdCBsZXZlbCBBUEksIGFuZCBkb2luZyB0aGlzLFxuICAgIC8vIHdvdWxkIHByZXZlbnQgdXNlciBmcm9tIGhhdmluZyBmdWxsIGNvbnRyb2wgb3ZlciBkaXJlY3QgY2FsbHMuXG4gICAgaWYgKCFoaW50KSB7XG4gICAgICBsZXQgc3ludGhldGljRXhjZXB0aW9uOiBFcnJvcjtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignU2VudHJ5IHN5bnRoZXRpY0V4Y2VwdGlvbicpO1xuICAgICAgfSBjYXRjaCAoZXhjZXB0aW9uKSB7XG4gICAgICAgIHN5bnRoZXRpY0V4Y2VwdGlvbiA9IGV4Y2VwdGlvbiBhcyBFcnJvcjtcbiAgICAgIH1cbiAgICAgIGZpbmFsSGludCA9IHtcbiAgICAgICAgb3JpZ2luYWxFeGNlcHRpb246IGV4Y2VwdGlvbixcbiAgICAgICAgc3ludGhldGljRXhjZXB0aW9uLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLl9pbnZva2VDbGllbnQoJ2NhcHR1cmVFeGNlcHRpb24nLCBleGNlcHRpb24sIHtcbiAgICAgIC4uLmZpbmFsSGludCxcbiAgICAgIGV2ZW50X2lkOiBldmVudElkLFxuICAgIH0pO1xuICAgIHJldHVybiBldmVudElkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgY2FwdHVyZU1lc3NhZ2UobWVzc2FnZTogc3RyaW5nLCBsZXZlbD86IFNldmVyaXR5LCBoaW50PzogRXZlbnRIaW50KTogc3RyaW5nIHtcbiAgICBjb25zdCBldmVudElkID0gKHRoaXMuX2xhc3RFdmVudElkID0gdXVpZDQoKSk7XG4gICAgbGV0IGZpbmFsSGludCA9IGhpbnQ7XG5cbiAgICAvLyBJZiB0aGVyZSdzIG5vIGV4cGxpY2l0IGhpbnQgcHJvdmlkZWQsIG1pbWljIHRoZSBzYW1lIHRoaW5nIHRoYXQgd291bGQgaGFwcGVuXG4gICAgLy8gaW4gdGhlIG1pbmltYWwgaXRzZWxmIHRvIGNyZWF0ZSBhIGNvbnNpc3RlbnQgYmVoYXZpb3IuXG4gICAgLy8gV2UgZG9uJ3QgZG8gdGhpcyBpbiB0aGUgY2xpZW50LCBhcyBpdCdzIHRoZSBsb3dlc3QgbGV2ZWwgQVBJLCBhbmQgZG9pbmcgdGhpcyxcbiAgICAvLyB3b3VsZCBwcmV2ZW50IHVzZXIgZnJvbSBoYXZpbmcgZnVsbCBjb250cm9sIG92ZXIgZGlyZWN0IGNhbGxzLlxuICAgIGlmICghaGludCkge1xuICAgICAgbGV0IHN5bnRoZXRpY0V4Y2VwdGlvbjogRXJyb3I7XG4gICAgICB0cnkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gICAgICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICAgICAgc3ludGhldGljRXhjZXB0aW9uID0gZXhjZXB0aW9uIGFzIEVycm9yO1xuICAgICAgfVxuICAgICAgZmluYWxIaW50ID0ge1xuICAgICAgICBvcmlnaW5hbEV4Y2VwdGlvbjogbWVzc2FnZSxcbiAgICAgICAgc3ludGhldGljRXhjZXB0aW9uLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICB0aGlzLl9pbnZva2VDbGllbnQoJ2NhcHR1cmVNZXNzYWdlJywgbWVzc2FnZSwgbGV2ZWwsIHtcbiAgICAgIC4uLmZpbmFsSGludCxcbiAgICAgIGV2ZW50X2lkOiBldmVudElkLFxuICAgIH0pO1xuICAgIHJldHVybiBldmVudElkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgY2FwdHVyZUV2ZW50KGV2ZW50OiBFdmVudCwgaGludD86IEV2ZW50SGludCk6IHN0cmluZyB7XG4gICAgY29uc3QgZXZlbnRJZCA9IHV1aWQ0KCk7XG4gICAgaWYgKGV2ZW50LnR5cGUgIT09ICd0cmFuc2FjdGlvbicpIHtcbiAgICAgIHRoaXMuX2xhc3RFdmVudElkID0gZXZlbnRJZDtcbiAgICB9XG5cbiAgICB0aGlzLl9pbnZva2VDbGllbnQoJ2NhcHR1cmVFdmVudCcsIGV2ZW50LCB7XG4gICAgICAuLi5oaW50LFxuICAgICAgZXZlbnRfaWQ6IGV2ZW50SWQsXG4gICAgfSk7XG4gICAgcmV0dXJuIGV2ZW50SWQ7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBsYXN0RXZlbnRJZCgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9sYXN0RXZlbnRJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGFkZEJyZWFkY3J1bWIoYnJlYWRjcnVtYjogQnJlYWRjcnVtYiwgaGludD86IEJyZWFkY3J1bWJIaW50KTogdm9pZCB7XG4gICAgY29uc3QgeyBzY29wZSwgY2xpZW50IH0gPSB0aGlzLmdldFN0YWNrVG9wKCk7XG5cbiAgICBpZiAoIXNjb3BlIHx8ICFjbGllbnQpIHJldHVybjtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICBjb25zdCB7IGJlZm9yZUJyZWFkY3J1bWIgPSBudWxsLCBtYXhCcmVhZGNydW1icyA9IERFRkFVTFRfQlJFQURDUlVNQlMgfSA9XG4gICAgICAoY2xpZW50LmdldE9wdGlvbnMgJiYgY2xpZW50LmdldE9wdGlvbnMoKSkgfHwge307XG5cbiAgICBpZiAobWF4QnJlYWRjcnVtYnMgPD0gMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgdGltZXN0YW1wID0gZGF0ZVRpbWVzdGFtcEluU2Vjb25kcygpO1xuICAgIGNvbnN0IG1lcmdlZEJyZWFkY3J1bWIgPSB7IHRpbWVzdGFtcCwgLi4uYnJlYWRjcnVtYiB9O1xuICAgIGNvbnN0IGZpbmFsQnJlYWRjcnVtYiA9IGJlZm9yZUJyZWFkY3J1bWJcbiAgICAgID8gKGNvbnNvbGVTYW5kYm94KCgpID0+IGJlZm9yZUJyZWFkY3J1bWIobWVyZ2VkQnJlYWRjcnVtYiwgaGludCkpIGFzIEJyZWFkY3J1bWIgfCBudWxsKVxuICAgICAgOiBtZXJnZWRCcmVhZGNydW1iO1xuXG4gICAgaWYgKGZpbmFsQnJlYWRjcnVtYiA9PT0gbnVsbCkgcmV0dXJuO1xuXG4gICAgc2NvcGUuYWRkQnJlYWRjcnVtYihmaW5hbEJyZWFkY3J1bWIsIG1heEJyZWFkY3J1bWJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldFVzZXIodXNlcjogVXNlciB8IG51bGwpOiB2b2lkIHtcbiAgICBjb25zdCBzY29wZSA9IHRoaXMuZ2V0U2NvcGUoKTtcbiAgICBpZiAoc2NvcGUpIHNjb3BlLnNldFVzZXIodXNlcik7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXRUYWdzKHRhZ3M6IHsgW2tleTogc3RyaW5nXTogUHJpbWl0aXZlIH0pOiB2b2lkIHtcbiAgICBjb25zdCBzY29wZSA9IHRoaXMuZ2V0U2NvcGUoKTtcbiAgICBpZiAoc2NvcGUpIHNjb3BlLnNldFRhZ3ModGFncyk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXRFeHRyYXMoZXh0cmFzOiBFeHRyYXMpOiB2b2lkIHtcbiAgICBjb25zdCBzY29wZSA9IHRoaXMuZ2V0U2NvcGUoKTtcbiAgICBpZiAoc2NvcGUpIHNjb3BlLnNldEV4dHJhcyhleHRyYXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0VGFnKGtleTogc3RyaW5nLCB2YWx1ZTogUHJpbWl0aXZlKTogdm9pZCB7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLmdldFNjb3BlKCk7XG4gICAgaWYgKHNjb3BlKSBzY29wZS5zZXRUYWcoa2V5LCB2YWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXRFeHRyYShrZXk6IHN0cmluZywgZXh0cmE6IEV4dHJhKTogdm9pZCB7XG4gICAgY29uc3Qgc2NvcGUgPSB0aGlzLmdldFNjb3BlKCk7XG4gICAgaWYgKHNjb3BlKSBzY29wZS5zZXRFeHRyYShrZXksIGV4dHJhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcHVibGljIHNldENvbnRleHQobmFtZTogc3RyaW5nLCBjb250ZXh0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgbnVsbCk6IHZvaWQge1xuICAgIGNvbnN0IHNjb3BlID0gdGhpcy5nZXRTY29wZSgpO1xuICAgIGlmIChzY29wZSkgc2NvcGUuc2V0Q29udGV4dChuYW1lLCBjb250ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNvbmZpZ3VyZVNjb3BlKGNhbGxiYWNrOiAoc2NvcGU6IFNjb3BlKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3QgeyBzY29wZSwgY2xpZW50IH0gPSB0aGlzLmdldFN0YWNrVG9wKCk7XG4gICAgaWYgKHNjb3BlICYmIGNsaWVudCkge1xuICAgICAgY2FsbGJhY2soc2NvcGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHJ1bihjYWxsYmFjazogKGh1YjogSHViKSA9PiB2b2lkKTogdm9pZCB7XG4gICAgY29uc3Qgb2xkSHViID0gbWFrZU1haW4odGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGNhbGxiYWNrKHRoaXMpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBtYWtlTWFpbihvbGRIdWIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGdldEludGVncmF0aW9uPFQgZXh0ZW5kcyBJbnRlZ3JhdGlvbj4oaW50ZWdyYXRpb246IEludGVncmF0aW9uQ2xhc3M8VD4pOiBUIHwgbnVsbCB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5nZXRDbGllbnQoKTtcbiAgICBpZiAoIWNsaWVudCkgcmV0dXJuIG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBjbGllbnQuZ2V0SW50ZWdyYXRpb24oaW50ZWdyYXRpb24pO1xuICAgIH0gY2F0Y2ggKF9vTykge1xuICAgICAgbG9nZ2VyLndhcm4oYENhbm5vdCByZXRyaWV2ZSBpbnRlZ3JhdGlvbiAke2ludGVncmF0aW9uLmlkfSBmcm9tIHRoZSBjdXJyZW50IEh1YmApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc3RhcnRTcGFuKGNvbnRleHQ6IFNwYW5Db250ZXh0KTogU3BhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGxFeHRlbnNpb25NZXRob2QoJ3N0YXJ0U3BhbicsIGNvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc3RhcnRUcmFuc2FjdGlvbihjb250ZXh0OiBUcmFuc2FjdGlvbkNvbnRleHQsIGN1c3RvbVNhbXBsaW5nQ29udGV4dD86IEN1c3RvbVNhbXBsaW5nQ29udGV4dCk6IFRyYW5zYWN0aW9uIHtcbiAgICByZXR1cm4gdGhpcy5fY2FsbEV4dGVuc2lvbk1ldGhvZCgnc3RhcnRUcmFuc2FjdGlvbicsIGNvbnRleHQsIGN1c3RvbVNhbXBsaW5nQ29udGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyB0cmFjZUhlYWRlcnMoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgcmV0dXJuIHRoaXMuX2NhbGxFeHRlbnNpb25NZXRob2Q8eyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfT4oJ3RyYWNlSGVhZGVycycpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgY2FwdHVyZVNlc3Npb24oZW5kU2Vzc2lvbjogYm9vbGVhbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgLy8gYm90aCBzZW5kIHRoZSB1cGRhdGUgYW5kIHB1bGwgdGhlIHNlc3Npb24gZnJvbSB0aGUgc2NvcGVcbiAgICBpZiAoZW5kU2Vzc2lvbikge1xuICAgICAgcmV0dXJuIHRoaXMuZW5kU2Vzc2lvbigpO1xuICAgIH1cblxuICAgIC8vIG9ubHkgc2VuZCB0aGUgdXBkYXRlXG4gICAgdGhpcy5fc2VuZFNlc3Npb25VcGRhdGUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGVuZFNlc3Npb24oKTogdm9pZCB7XG4gICAgdGhpcy5nZXRTdGFja1RvcCgpXG4gICAgICA/LnNjb3BlPy5nZXRTZXNzaW9uKClcbiAgICAgID8uY2xvc2UoKTtcbiAgICB0aGlzLl9zZW5kU2Vzc2lvblVwZGF0ZSgpO1xuXG4gICAgLy8gdGhlIHNlc3Npb24gaXMgb3ZlcjsgdGFrZSBpdCBvZmYgb2YgdGhlIHNjb3BlXG4gICAgdGhpcy5nZXRTdGFja1RvcCgpPy5zY29wZT8uc2V0U2Vzc2lvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc3RhcnRTZXNzaW9uKGNvbnRleHQ/OiBTZXNzaW9uQ29udGV4dCk6IFNlc3Npb24ge1xuICAgIGNvbnN0IHsgc2NvcGUsIGNsaWVudCB9ID0gdGhpcy5nZXRTdGFja1RvcCgpO1xuICAgIGNvbnN0IHsgcmVsZWFzZSwgZW52aXJvbm1lbnQgfSA9IChjbGllbnQgJiYgY2xpZW50LmdldE9wdGlvbnMoKSkgfHwge307XG5cbiAgICAvLyBXaWxsIGZldGNoIHVzZXJBZ2VudCBpZiBjYWxsZWQgZnJvbSBicm93c2VyIHNka1xuICAgIGNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdDx7IG5hdmlnYXRvcj86IHsgdXNlckFnZW50Pzogc3RyaW5nIH0gfT4oKTtcbiAgICBjb25zdCB7IHVzZXJBZ2VudCB9ID0gZ2xvYmFsLm5hdmlnYXRvciB8fCB7fTtcblxuICAgIGNvbnN0IHNlc3Npb24gPSBuZXcgU2Vzc2lvbih7XG4gICAgICByZWxlYXNlLFxuICAgICAgZW52aXJvbm1lbnQsXG4gICAgICAuLi4oc2NvcGUgJiYgeyB1c2VyOiBzY29wZS5nZXRVc2VyKCkgfSksXG4gICAgICAuLi4odXNlckFnZW50ICYmIHsgdXNlckFnZW50IH0pLFxuICAgICAgLi4uY29udGV4dCxcbiAgICB9KTtcblxuICAgIGlmIChzY29wZSkge1xuICAgICAgLy8gRW5kIGV4aXN0aW5nIHNlc3Npb24gaWYgdGhlcmUncyBvbmVcbiAgICAgIGNvbnN0IGN1cnJlbnRTZXNzaW9uID0gc2NvcGUuZ2V0U2Vzc2lvbiAmJiBzY29wZS5nZXRTZXNzaW9uKCk7XG4gICAgICBpZiAoY3VycmVudFNlc3Npb24gJiYgY3VycmVudFNlc3Npb24uc3RhdHVzID09PSBTZXNzaW9uU3RhdHVzLk9rKSB7XG4gICAgICAgIGN1cnJlbnRTZXNzaW9uLnVwZGF0ZSh7IHN0YXR1czogU2Vzc2lvblN0YXR1cy5FeGl0ZWQgfSk7XG4gICAgICB9XG4gICAgICB0aGlzLmVuZFNlc3Npb24oKTtcblxuICAgICAgLy8gQWZ0ZXJ3YXJkcyB3ZSBzZXQgdGhlIG5ldyBzZXNzaW9uIG9uIHRoZSBzY29wZVxuICAgICAgc2NvcGUuc2V0U2Vzc2lvbihzZXNzaW9uKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2Vzc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyB0aGUgY3VycmVudCBTZXNzaW9uIG9uIHRoZSBzY29wZVxuICAgKi9cbiAgcHJpdmF0ZSBfc2VuZFNlc3Npb25VcGRhdGUoKTogdm9pZCB7XG4gICAgY29uc3QgeyBzY29wZSwgY2xpZW50IH0gPSB0aGlzLmdldFN0YWNrVG9wKCk7XG4gICAgaWYgKCFzY29wZSkgcmV0dXJuO1xuXG4gICAgY29uc3Qgc2Vzc2lvbiA9IHNjb3BlLmdldFNlc3Npb24gJiYgc2NvcGUuZ2V0U2Vzc2lvbigpO1xuICAgIGlmIChzZXNzaW9uKSB7XG4gICAgICBpZiAoY2xpZW50ICYmIGNsaWVudC5jYXB0dXJlU2Vzc2lvbikge1xuICAgICAgICBjbGllbnQuY2FwdHVyZVNlc3Npb24oc2Vzc2lvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEludGVybmFsIGhlbHBlciBmdW5jdGlvbiB0byBjYWxsIGEgbWV0aG9kIG9uIHRoZSB0b3AgY2xpZW50IGlmIGl0IGV4aXN0cy5cbiAgICpcbiAgICogQHBhcmFtIG1ldGhvZCBUaGUgbWV0aG9kIHRvIGNhbGwgb24gdGhlIGNsaWVudC5cbiAgICogQHBhcmFtIGFyZ3MgQXJndW1lbnRzIHRvIHBhc3MgdG8gdGhlIGNsaWVudCBmdW5jdGlvbi5cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHByaXZhdGUgX2ludm9rZUNsaWVudDxNIGV4dGVuZHMga2V5b2YgQ2xpZW50PihtZXRob2Q6IE0sIC4uLmFyZ3M6IGFueVtdKTogdm9pZCB7XG4gICAgY29uc3QgeyBzY29wZSwgY2xpZW50IH0gPSB0aGlzLmdldFN0YWNrVG9wKCk7XG4gICAgaWYgKGNsaWVudCAmJiBjbGllbnRbbWV0aG9kXSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgKGNsaWVudCBhcyBhbnkpW21ldGhvZF0oLi4uYXJncywgc2NvcGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxscyBnbG9iYWwgZXh0ZW5zaW9uIG1ldGhvZCBhbmQgYmluZGluZyBjdXJyZW50IGluc3RhbmNlIHRvIHRoZSBmdW5jdGlvbiBjYWxsXG4gICAqL1xuICAvLyBAdHMtaWdub3JlIEZ1bmN0aW9uIGxhY2tzIGVuZGluZyByZXR1cm4gc3RhdGVtZW50IGFuZCByZXR1cm4gdHlwZSBkb2VzIG5vdCBpbmNsdWRlICd1bmRlZmluZWQnLiB0cygyMzY2KVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwcml2YXRlIF9jYWxsRXh0ZW5zaW9uTWV0aG9kPFQ+KG1ldGhvZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IFQge1xuICAgIGNvbnN0IGNhcnJpZXIgPSBnZXRNYWluQ2FycmllcigpO1xuICAgIGNvbnN0IHNlbnRyeSA9IGNhcnJpZXIuX19TRU5UUllfXztcbiAgICBpZiAoc2VudHJ5ICYmIHNlbnRyeS5leHRlbnNpb25zICYmIHR5cGVvZiBzZW50cnkuZXh0ZW5zaW9uc1ttZXRob2RdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gc2VudHJ5LmV4dGVuc2lvbnNbbWV0aG9kXS5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICB9XG4gICAgbG9nZ2VyLndhcm4oYEV4dGVuc2lvbiBtZXRob2QgJHttZXRob2R9IGNvdWxkbid0IGJlIGZvdW5kLCBkb2luZyBub3RoaW5nLmApO1xuICB9XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZ2xvYmFsIHNoaW0gcmVnaXN0cnkuXG4gKlxuICogRklYTUU6IFRoaXMgZnVuY3Rpb24gaXMgcHJvYmxlbWF0aWMsIGJlY2F1c2UgZGVzcGl0ZSBhbHdheXMgcmV0dXJuaW5nIGEgdmFsaWQgQ2FycmllcixcbiAqIGl0IGhhcyBhbiBvcHRpb25hbCBgX19TRU5UUllfX2AgcHJvcGVydHksIHdoaWNoIHRoZW4gaW4gdHVybiByZXF1aXJlcyB1cyB0byBhbHdheXMgcGVyZm9ybSBhbiB1bm5lY2Vzc2FyeSBjaGVja1xuICogYXQgdGhlIGNhbGwtc2l0ZS4gV2UgYWx3YXlzIGFjY2VzcyB0aGUgY2FycmllciB0aHJvdWdoIHRoaXMgZnVuY3Rpb24sIHNvIHdlIGNhbiBndWFyYW50ZWUgdGhhdCBgX19TRU5UUllfX2AgaXMgdGhlcmUuXG4gKiovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWFpbkNhcnJpZXIoKTogQ2FycmllciB7XG4gIGNvbnN0IGNhcnJpZXIgPSBnZXRHbG9iYWxPYmplY3QoKTtcbiAgY2Fycmllci5fX1NFTlRSWV9fID0gY2Fycmllci5fX1NFTlRSWV9fIHx8IHtcbiAgICBleHRlbnNpb25zOiB7fSxcbiAgICBodWI6IHVuZGVmaW5lZCxcbiAgfTtcbiAgcmV0dXJuIGNhcnJpZXI7XG59XG5cbi8qKlxuICogUmVwbGFjZXMgdGhlIGN1cnJlbnQgbWFpbiBodWIgd2l0aCB0aGUgcGFzc2VkIG9uZSBvbiB0aGUgZ2xvYmFsIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIFRoZSBvbGQgcmVwbGFjZWQgaHViXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtYWtlTWFpbihodWI6IEh1Yik6IEh1YiB7XG4gIGNvbnN0IHJlZ2lzdHJ5ID0gZ2V0TWFpbkNhcnJpZXIoKTtcbiAgY29uc3Qgb2xkSHViID0gZ2V0SHViRnJvbUNhcnJpZXIocmVnaXN0cnkpO1xuICBzZXRIdWJPbkNhcnJpZXIocmVnaXN0cnksIGh1Yik7XG4gIHJldHVybiBvbGRIdWI7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgZGVmYXVsdCBodWIgaW5zdGFuY2UuXG4gKlxuICogSWYgYSBodWIgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGluIHRoZSBnbG9iYWwgY2FycmllciBidXQgdGhpcyBtb2R1bGVcbiAqIGNvbnRhaW5zIGEgbW9yZSByZWNlbnQgdmVyc2lvbiwgaXQgcmVwbGFjZXMgdGhlIHJlZ2lzdGVyZWQgdmVyc2lvbi5cbiAqIE90aGVyd2lzZSwgdGhlIGN1cnJlbnRseSByZWdpc3RlcmVkIGh1YiB3aWxsIGJlIHJldHVybmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3VycmVudEh1YigpOiBIdWIge1xuICAvLyBHZXQgbWFpbiBjYXJyaWVyIChnbG9iYWwgZm9yIGV2ZXJ5IGVudmlyb25tZW50KVxuICBjb25zdCByZWdpc3RyeSA9IGdldE1haW5DYXJyaWVyKCk7XG5cbiAgLy8gSWYgdGhlcmUncyBubyBodWIsIG9yIGl0cyBhbiBvbGQgQVBJLCBhc3NpZ24gYSBuZXcgb25lXG4gIGlmICghaGFzSHViT25DYXJyaWVyKHJlZ2lzdHJ5KSB8fCBnZXRIdWJGcm9tQ2FycmllcihyZWdpc3RyeSkuaXNPbGRlclRoYW4oQVBJX1ZFUlNJT04pKSB7XG4gICAgc2V0SHViT25DYXJyaWVyKHJlZ2lzdHJ5LCBuZXcgSHViKCkpO1xuICB9XG5cbiAgLy8gUHJlZmVyIGRvbWFpbnMgb3ZlciBnbG9iYWwgaWYgdGhleSBhcmUgdGhlcmUgKGFwcGxpY2FibGUgb25seSB0byBOb2RlIGVudmlyb25tZW50KVxuICBpZiAoaXNOb2RlRW52KCkpIHtcbiAgICByZXR1cm4gZ2V0SHViRnJvbUFjdGl2ZURvbWFpbihyZWdpc3RyeSk7XG4gIH1cbiAgLy8gUmV0dXJuIGh1YiB0aGF0IGxpdmVzIG9uIGEgZ2xvYmFsIG9iamVjdFxuICByZXR1cm4gZ2V0SHViRnJvbUNhcnJpZXIocmVnaXN0cnkpO1xufVxuXG4vKipcbiAqIFJldHVybnMgdGhlIGFjdGl2ZSBkb21haW4sIGlmIG9uZSBleGlzdHNcbiAqIEBkZXByZWNhdGVkIE5vIGxvbmdlciB1c2VkOyByZW1vdmUgaW4gdjdcbiAqIEByZXR1cm5zIFRoZSBkb21haW4sIG9yIHVuZGVmaW5lZCBpZiB0aGVyZSBpcyBubyBhY3RpdmUgZG9tYWluXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFjdGl2ZURvbWFpbigpOiBEb21haW5Bc0NhcnJpZXIgfCB1bmRlZmluZWQge1xuICBsb2dnZXIud2FybignRnVuY3Rpb24gYGdldEFjdGl2ZURvbWFpbmAgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24uJyk7XG5cbiAgY29uc3Qgc2VudHJ5ID0gZ2V0TWFpbkNhcnJpZXIoKS5fX1NFTlRSWV9fO1xuXG4gIHJldHVybiBzZW50cnkgJiYgc2VudHJ5LmV4dGVuc2lvbnMgJiYgc2VudHJ5LmV4dGVuc2lvbnMuZG9tYWluICYmIHNlbnRyeS5leHRlbnNpb25zLmRvbWFpbi5hY3RpdmU7XG59XG5cbi8qKlxuICogVHJ5IHRvIHJlYWQgdGhlIGh1YiBmcm9tIGFuIGFjdGl2ZSBkb21haW4sIGFuZCBmYWxsYmFjayB0byB0aGUgcmVnaXN0cnkgaWYgb25lIGRvZXNuJ3QgZXhpc3RcbiAqIEByZXR1cm5zIGRpc2NvdmVyZWQgaHViXG4gKi9cbmZ1bmN0aW9uIGdldEh1YkZyb21BY3RpdmVEb21haW4ocmVnaXN0cnk6IENhcnJpZXIpOiBIdWIge1xuICB0cnkge1xuICAgIGNvbnN0IGFjdGl2ZURvbWFpbiA9IGdldE1haW5DYXJyaWVyKCkuX19TRU5UUllfXz8uZXh0ZW5zaW9ucz8uZG9tYWluPy5hY3RpdmU7XG5cbiAgICAvLyBJZiB0aGVyZSdzIG5vIGFjdGl2ZSBkb21haW4sIGp1c3QgcmV0dXJuIGdsb2JhbCBodWJcbiAgICBpZiAoIWFjdGl2ZURvbWFpbikge1xuICAgICAgcmV0dXJuIGdldEh1YkZyb21DYXJyaWVyKHJlZ2lzdHJ5KTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSdzIG5vIGh1YiBvbiBjdXJyZW50IGRvbWFpbiwgb3IgaXQncyBhbiBvbGQgQVBJLCBhc3NpZ24gYSBuZXcgb25lXG4gICAgaWYgKCFoYXNIdWJPbkNhcnJpZXIoYWN0aXZlRG9tYWluKSB8fCBnZXRIdWJGcm9tQ2FycmllcihhY3RpdmVEb21haW4pLmlzT2xkZXJUaGFuKEFQSV9WRVJTSU9OKSkge1xuICAgICAgY29uc3QgcmVnaXN0cnlIdWJUb3BTdGFjayA9IGdldEh1YkZyb21DYXJyaWVyKHJlZ2lzdHJ5KS5nZXRTdGFja1RvcCgpO1xuICAgICAgc2V0SHViT25DYXJyaWVyKGFjdGl2ZURvbWFpbiwgbmV3IEh1YihyZWdpc3RyeUh1YlRvcFN0YWNrLmNsaWVudCwgU2NvcGUuY2xvbmUocmVnaXN0cnlIdWJUb3BTdGFjay5zY29wZSkpKTtcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gaHViIHRoYXQgbGl2ZXMgb24gYSBkb21haW5cbiAgICByZXR1cm4gZ2V0SHViRnJvbUNhcnJpZXIoYWN0aXZlRG9tYWluKTtcbiAgfSBjYXRjaCAoX09vKSB7XG4gICAgLy8gUmV0dXJuIGh1YiB0aGF0IGxpdmVzIG9uIGEgZ2xvYmFsIG9iamVjdFxuICAgIHJldHVybiBnZXRIdWJGcm9tQ2FycmllcihyZWdpc3RyeSk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIHdpbGwgdGVsbCB3aGV0aGVyIGEgY2FycmllciBoYXMgYSBodWIgb24gaXQgb3Igbm90XG4gKiBAcGFyYW0gY2FycmllciBvYmplY3RcbiAqL1xuZnVuY3Rpb24gaGFzSHViT25DYXJyaWVyKGNhcnJpZXI6IENhcnJpZXIpOiBib29sZWFuIHtcbiAgcmV0dXJuICEhKGNhcnJpZXIgJiYgY2Fycmllci5fX1NFTlRSWV9fICYmIGNhcnJpZXIuX19TRU5UUllfXy5odWIpO1xufVxuXG4vKipcbiAqIFRoaXMgd2lsbCBjcmVhdGUgYSBuZXcge0BsaW5rIEh1Yn0gYW5kIGFkZCB0byB0aGUgcGFzc2VkIG9iamVjdCBvblxuICogX19TRU5UUllfXy5odWIuXG4gKiBAcGFyYW0gY2FycmllciBvYmplY3RcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEh1YkZyb21DYXJyaWVyKGNhcnJpZXI6IENhcnJpZXIpOiBIdWIge1xuICBpZiAoY2FycmllciAmJiBjYXJyaWVyLl9fU0VOVFJZX18gJiYgY2Fycmllci5fX1NFTlRSWV9fLmh1YikgcmV0dXJuIGNhcnJpZXIuX19TRU5UUllfXy5odWI7XG4gIGNhcnJpZXIuX19TRU5UUllfXyA9IGNhcnJpZXIuX19TRU5UUllfXyB8fCB7fTtcbiAgY2Fycmllci5fX1NFTlRSWV9fLmh1YiA9IG5ldyBIdWIoKTtcbiAgcmV0dXJuIGNhcnJpZXIuX19TRU5UUllfXy5odWI7XG59XG5cbi8qKlxuICogVGhpcyB3aWxsIHNldCBwYXNzZWQge0BsaW5rIEh1Yn0gb24gdGhlIHBhc3NlZCBvYmplY3QncyBfX1NFTlRSWV9fLmh1YiBhdHRyaWJ1dGVcbiAqIEBwYXJhbSBjYXJyaWVyIG9iamVjdFxuICogQHBhcmFtIGh1YiBIdWJcbiAqIEByZXR1cm5zIEEgYm9vbGVhbiBpbmRpY2F0aW5nIHN1Y2Nlc3Mgb3IgZmFpbHVyZVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0SHViT25DYXJyaWVyKGNhcnJpZXI6IENhcnJpZXIsIGh1YjogSHViKTogYm9vbGVhbiB7XG4gIGlmICghY2FycmllcikgcmV0dXJuIGZhbHNlO1xuICBjYXJyaWVyLl9fU0VOVFJZX18gPSBjYXJyaWVyLl9fU0VOVFJZX18gfHwge307XG4gIGNhcnJpZXIuX19TRU5UUllfXy5odWIgPSBodWI7XG4gIHJldHVybiB0cnVlO1xufVxuIiwgImltcG9ydCB7XG4gIEFnZ3JlZ2F0aW9uQ291bnRzLFxuICBSZXF1ZXN0U2Vzc2lvblN0YXR1cyxcbiAgU2Vzc2lvbkFnZ3JlZ2F0ZXMsXG4gIFNlc3Npb25GbHVzaGVyTGlrZSxcbiAgVHJhbnNwb3J0LFxufSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGRyb3BVbmRlZmluZWRLZXlzLCBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuaW1wb3J0IHsgZ2V0Q3VycmVudEh1YiB9IGZyb20gJy4vaHViJztcblxudHlwZSBSZWxlYXNlSGVhbHRoQXR0cmlidXRlcyA9IHtcbiAgZW52aXJvbm1lbnQ/OiBzdHJpbmc7XG4gIHJlbGVhc2U6IHN0cmluZztcbn07XG5cbi8qKlxuICogQGluaGVyaXRkb2NcbiAqL1xuZXhwb3J0IGNsYXNzIFNlc3Npb25GbHVzaGVyIGltcGxlbWVudHMgU2Vzc2lvbkZsdXNoZXJMaWtlIHtcbiAgcHVibGljIHJlYWRvbmx5IGZsdXNoVGltZW91dDogbnVtYmVyID0gNjA7XG4gIHByaXZhdGUgX3BlbmRpbmdBZ2dyZWdhdGVzOiBSZWNvcmQ8bnVtYmVyLCBBZ2dyZWdhdGlvbkNvdW50cz4gPSB7fTtcbiAgcHJpdmF0ZSBfc2Vzc2lvbkF0dHJzOiBSZWxlYXNlSGVhbHRoQXR0cmlidXRlcztcbiAgcHJpdmF0ZSBfaW50ZXJ2YWxJZDogUmV0dXJuVHlwZTx0eXBlb2Ygc2V0SW50ZXJ2YWw+O1xuICBwcml2YXRlIF9pc0VuYWJsZWQ6IGJvb2xlYW4gPSB0cnVlO1xuICBwcml2YXRlIF90cmFuc3BvcnQ6IFRyYW5zcG9ydDtcblxuICBwdWJsaWMgY29uc3RydWN0b3IodHJhbnNwb3J0OiBUcmFuc3BvcnQsIGF0dHJzOiBSZWxlYXNlSGVhbHRoQXR0cmlidXRlcykge1xuICAgIHRoaXMuX3RyYW5zcG9ydCA9IHRyYW5zcG9ydDtcbiAgICAvLyBDYWxsIHRvIHNldEludGVydmFsLCBzbyB0aGF0IGZsdXNoIGlzIGNhbGxlZCBldmVyeSA2MCBzZWNvbmRzXG4gICAgdGhpcy5faW50ZXJ2YWxJZCA9IHNldEludGVydmFsKCgpID0+IHRoaXMuZmx1c2goKSwgdGhpcy5mbHVzaFRpbWVvdXQgKiAxMDAwKTtcbiAgICB0aGlzLl9zZXNzaW9uQXR0cnMgPSBhdHRycztcbiAgfVxuXG4gIC8qKiBTZW5kcyBzZXNzaW9uIGFnZ3JlZ2F0ZXMgdG8gVHJhbnNwb3J0ICovXG4gIHB1YmxpYyBzZW5kU2Vzc2lvbkFnZ3JlZ2F0ZXMoc2Vzc2lvbkFnZ3JlZ2F0ZXM6IFNlc3Npb25BZ2dyZWdhdGVzKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90cmFuc3BvcnQuc2VuZFNlc3Npb24pIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiRHJvcHBpbmcgc2Vzc2lvbiBiZWNhdXNlIGN1c3RvbSB0cmFuc3BvcnQgZG9lc24ndCBpbXBsZW1lbnQgc2VuZFNlc3Npb25cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZvaWQgdGhpcy5fdHJhbnNwb3J0LnNlbmRTZXNzaW9uKHNlc3Npb25BZ2dyZWdhdGVzKS50aGVuKG51bGwsIHJlYXNvbiA9PiB7XG4gICAgICBsb2dnZXIuZXJyb3IoYEVycm9yIHdoaWxlIHNlbmRpbmcgc2Vzc2lvbjogJHtyZWFzb259YCk7XG4gICAgfSk7XG4gIH1cblxuICAvKiogQ2hlY2tzIGlmIGBwZW5kaW5nQWdncmVnYXRlc2AgaGFzIGVudHJpZXMsIGFuZCBpZiBpdCBkb2VzIGZsdXNoZXMgdGhlbSBieSBjYWxsaW5nIGBzZW5kU2Vzc2lvbnNgICovXG4gIHB1YmxpYyBmbHVzaCgpOiB2b2lkIHtcbiAgICBjb25zdCBzZXNzaW9uQWdncmVnYXRlcyA9IHRoaXMuZ2V0U2Vzc2lvbkFnZ3JlZ2F0ZXMoKTtcbiAgICBpZiAoc2Vzc2lvbkFnZ3JlZ2F0ZXMuYWdncmVnYXRlcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5fcGVuZGluZ0FnZ3JlZ2F0ZXMgPSB7fTtcbiAgICB0aGlzLnNlbmRTZXNzaW9uQWdncmVnYXRlcyhzZXNzaW9uQWdncmVnYXRlcyk7XG4gIH1cblxuICAvKiogTWFzc2FnZXMgdGhlIGVudHJpZXMgaW4gYHBlbmRpbmdBZ2dyZWdhdGVzYCBhbmQgcmV0dXJucyBhZ2dyZWdhdGVkIHNlc3Npb25zICovXG4gIHB1YmxpYyBnZXRTZXNzaW9uQWdncmVnYXRlcygpOiBTZXNzaW9uQWdncmVnYXRlcyB7XG4gICAgY29uc3QgYWdncmVnYXRlczogQWdncmVnYXRpb25Db3VudHNbXSA9IE9iamVjdC5rZXlzKHRoaXMuX3BlbmRpbmdBZ2dyZWdhdGVzKS5tYXAoKGtleTogc3RyaW5nKSA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5fcGVuZGluZ0FnZ3JlZ2F0ZXNbcGFyc2VJbnQoa2V5KV07XG4gICAgfSk7XG5cbiAgICBjb25zdCBzZXNzaW9uQWdncmVnYXRlczogU2Vzc2lvbkFnZ3JlZ2F0ZXMgPSB7XG4gICAgICBhdHRyczogdGhpcy5fc2Vzc2lvbkF0dHJzLFxuICAgICAgYWdncmVnYXRlcyxcbiAgICB9O1xuICAgIHJldHVybiBkcm9wVW5kZWZpbmVkS2V5cyhzZXNzaW9uQWdncmVnYXRlcyk7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHVibGljIGNsb3NlKCk6IHZvaWQge1xuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWxJZCk7XG4gICAgdGhpcy5faXNFbmFibGVkID0gZmFsc2U7XG4gICAgdGhpcy5mbHVzaCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyYXBwZXIgZnVuY3Rpb24gZm9yIF9pbmNyZW1lbnRTZXNzaW9uU3RhdHVzQ291bnQgdGhhdCBjaGVja3MgaWYgdGhlIGluc3RhbmNlIG9mIFNlc3Npb25GbHVzaGVyIGlzIGVuYWJsZWQgdGhlblxuICAgKiBmZXRjaGVzIHRoZSBzZXNzaW9uIHN0YXR1cyBvZiB0aGUgcmVxdWVzdCBmcm9tIGBTY29wZS5nZXRSZXF1ZXN0U2Vzc2lvbigpLnN0YXR1c2Agb24gdGhlIHNjb3BlIGFuZCBwYXNzZXMgdGhlbSB0b1xuICAgKiBgX2luY3JlbWVudFNlc3Npb25TdGF0dXNDb3VudGAgYWxvbmcgd2l0aCB0aGUgc3RhcnQgZGF0ZVxuICAgKi9cbiAgcHVibGljIGluY3JlbWVudFNlc3Npb25TdGF0dXNDb3VudCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCBzY29wZSA9IGdldEN1cnJlbnRIdWIoKS5nZXRTY29wZSgpO1xuICAgIGNvbnN0IHJlcXVlc3RTZXNzaW9uID0gc2NvcGU/LmdldFJlcXVlc3RTZXNzaW9uKCk7XG5cbiAgICBpZiAocmVxdWVzdFNlc3Npb24gJiYgcmVxdWVzdFNlc3Npb24uc3RhdHVzKSB7XG4gICAgICB0aGlzLl9pbmNyZW1lbnRTZXNzaW9uU3RhdHVzQ291bnQocmVxdWVzdFNlc3Npb24uc3RhdHVzLCBuZXcgRGF0ZSgpKTtcbiAgICAgIC8vIFRoaXMgaXMgbm90IGVudGlyZWx5IG5lY2Vzc2FyaWx5IGJ1dCBpcyBhZGRlZCBhcyBhIHNhZmUgZ3VhcmQgdG8gaW5kaWNhdGUgdGhlIGJvdW5kcyBvZiBhIHJlcXVlc3QgYW5kIHNvIGluXG4gICAgICAvLyBjYXNlIGNhcHR1cmVSZXF1ZXN0U2Vzc2lvbiBpcyBjYWxsZWQgbW9yZSB0aGFuIG9uY2UgdG8gcHJldmVudCBkb3VibGUgY291bnRcbiAgICAgIHNjb3BlPy5zZXRSZXF1ZXN0U2Vzc2lvbih1bmRlZmluZWQpO1xuXG4gICAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAqL1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBJbmNyZW1lbnRzIHN0YXR1cyBidWNrZXQgaW4gcGVuZGluZ0FnZ3JlZ2F0ZXMgYnVmZmVyIChpbnRlcm5hbCBzdGF0ZSkgY29ycmVzcG9uZGluZyB0byBzdGF0dXMgb2ZcbiAgICogdGhlIHNlc3Npb24gcmVjZWl2ZWRcbiAgICovXG4gIHByaXZhdGUgX2luY3JlbWVudFNlc3Npb25TdGF0dXNDb3VudChzdGF0dXM6IFJlcXVlc3RTZXNzaW9uU3RhdHVzLCBkYXRlOiBEYXRlKTogbnVtYmVyIHtcbiAgICAvLyBUcnVuY2F0ZSBtaW51dGVzIGFuZCBzZWNvbmRzIG9uIFNlc3Npb24gU3RhcnRlZCBhdHRyaWJ1dGUgdG8gaGF2ZSBvbmUgbWludXRlIGJ1Y2tldCBrZXlzXG4gICAgY29uc3Qgc2Vzc2lvblN0YXJ0ZWRUcnVuYyA9IG5ldyBEYXRlKGRhdGUpLnNldFNlY29uZHMoMCwgMCk7XG4gICAgdGhpcy5fcGVuZGluZ0FnZ3JlZ2F0ZXNbc2Vzc2lvblN0YXJ0ZWRUcnVuY10gPSB0aGlzLl9wZW5kaW5nQWdncmVnYXRlc1tzZXNzaW9uU3RhcnRlZFRydW5jXSB8fCB7fTtcblxuICAgIC8vIGNvcnJlc3BvbmRzIHRvIGFnZ3JlZ2F0ZWQgc2Vzc2lvbnMgaW4gb25lIHNwZWNpZmljIG1pbnV0ZSBidWNrZXRcbiAgICAvLyBmb3IgZXhhbXBsZSwge1wic3RhcnRlZFwiOlwiMjAyMS0wMy0xNlQwODowMDowMC4wMDBaXCIsXCJleGl0ZWRcIjo0LCBcImVycm9yZWRcIjogMX1cbiAgICBjb25zdCBhZ2dyZWdhdGlvbkNvdW50czogQWdncmVnYXRpb25Db3VudHMgPSB0aGlzLl9wZW5kaW5nQWdncmVnYXRlc1tzZXNzaW9uU3RhcnRlZFRydW5jXTtcbiAgICBpZiAoIWFnZ3JlZ2F0aW9uQ291bnRzLnN0YXJ0ZWQpIHtcbiAgICAgIGFnZ3JlZ2F0aW9uQ291bnRzLnN0YXJ0ZWQgPSBuZXcgRGF0ZShzZXNzaW9uU3RhcnRlZFRydW5jKS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoc3RhdHVzKSB7XG4gICAgICBjYXNlIFJlcXVlc3RTZXNzaW9uU3RhdHVzLkVycm9yZWQ6XG4gICAgICAgIGFnZ3JlZ2F0aW9uQ291bnRzLmVycm9yZWQgPSAoYWdncmVnYXRpb25Db3VudHMuZXJyb3JlZCB8fCAwKSArIDE7XG4gICAgICAgIHJldHVybiBhZ2dyZWdhdGlvbkNvdW50cy5lcnJvcmVkO1xuICAgICAgY2FzZSBSZXF1ZXN0U2Vzc2lvblN0YXR1cy5PazpcbiAgICAgICAgYWdncmVnYXRpb25Db3VudHMuZXhpdGVkID0gKGFnZ3JlZ2F0aW9uQ291bnRzLmV4aXRlZCB8fCAwKSArIDE7XG4gICAgICAgIHJldHVybiBhZ2dyZWdhdGlvbkNvdW50cy5leGl0ZWQ7XG4gICAgICBjYXNlIFJlcXVlc3RTZXNzaW9uU3RhdHVzLkNyYXNoZWQ6XG4gICAgICAgIGFnZ3JlZ2F0aW9uQ291bnRzLmNyYXNoZWQgPSAoYWdncmVnYXRpb25Db3VudHMuY3Jhc2hlZCB8fCAwKSArIDE7XG4gICAgICAgIHJldHVybiBhZ2dyZWdhdGlvbkNvdW50cy5jcmFzaGVkO1xuICAgIH1cbiAgfVxufVxuIiwgImV4cG9ydCB7IGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yLCBTY29wZSB9IGZyb20gJy4vc2NvcGUnO1xuZXhwb3J0IHsgU2Vzc2lvbiB9IGZyb20gJy4vc2Vzc2lvbic7XG5leHBvcnQgeyBTZXNzaW9uRmx1c2hlciB9IGZyb20gJy4vc2Vzc2lvbmZsdXNoZXInO1xuZXhwb3J0IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gIGdldEFjdGl2ZURvbWFpbixcbiAgZ2V0Q3VycmVudEh1YixcbiAgZ2V0SHViRnJvbUNhcnJpZXIsXG4gIGdldE1haW5DYXJyaWVyLFxuICBIdWIsXG4gIG1ha2VNYWluLFxuICBzZXRIdWJPbkNhcnJpZXIsXG4gIENhcnJpZXIsXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICBEb21haW5Bc0NhcnJpZXIsXG4gIExheWVyLFxufSBmcm9tICcuL2h1Yic7XG4iLCAiaW1wb3J0IHsgZ2V0Q3VycmVudEh1YiwgSHViLCBTY29wZSB9IGZyb20gJ0BzZW50cnkvaHViJztcbmltcG9ydCB7XG4gIEJyZWFkY3J1bWIsXG4gIENhcHR1cmVDb250ZXh0LFxuICBDdXN0b21TYW1wbGluZ0NvbnRleHQsXG4gIEV2ZW50LFxuICBFeHRyYSxcbiAgRXh0cmFzLFxuICBQcmltaXRpdmUsXG4gIFNldmVyaXR5LFxuICBUcmFuc2FjdGlvbixcbiAgVHJhbnNhY3Rpb25Db250ZXh0LFxuICBVc2VyLFxufSBmcm9tICdAc2VudHJ5L3R5cGVzJztcblxuLyoqXG4gKiBUaGlzIGNhbGxzIGEgZnVuY3Rpb24gb24gdGhlIGN1cnJlbnQgaHViLlxuICogQHBhcmFtIG1ldGhvZCBmdW5jdGlvbiB0byBjYWxsIG9uIGh1Yi5cbiAqIEBwYXJhbSBhcmdzIHRvIHBhc3MgdG8gZnVuY3Rpb24uXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG5mdW5jdGlvbiBjYWxsT25IdWI8VD4obWV0aG9kOiBzdHJpbmcsIC4uLmFyZ3M6IGFueVtdKTogVCB7XG4gIGNvbnN0IGh1YiA9IGdldEN1cnJlbnRIdWIoKTtcbiAgaWYgKGh1YiAmJiBodWJbbWV0aG9kIGFzIGtleW9mIEh1Yl0pIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIHJldHVybiAoaHViW21ldGhvZCBhcyBrZXlvZiBIdWJdIGFzIGFueSkoLi4uYXJncyk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBObyBodWIgZGVmaW5lZCBvciAke21ldGhvZH0gd2FzIG5vdCBmb3VuZCBvbiB0aGUgaHViLCBwbGVhc2Ugb3BlbiBhIGJ1ZyByZXBvcnQuYCk7XG59XG5cbi8qKlxuICogQ2FwdHVyZXMgYW4gZXhjZXB0aW9uIGV2ZW50IGFuZCBzZW5kcyBpdCB0byBTZW50cnkuXG4gKlxuICogQHBhcmFtIGV4Y2VwdGlvbiBBbiBleGNlcHRpb24tbGlrZSBvYmplY3QuXG4gKiBAcmV0dXJucyBUaGUgZ2VuZXJhdGVkIGV2ZW50SWQuXG4gKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXG5leHBvcnQgZnVuY3Rpb24gY2FwdHVyZUV4Y2VwdGlvbihleGNlcHRpb246IGFueSwgY2FwdHVyZUNvbnRleHQ/OiBDYXB0dXJlQ29udGV4dCk6IHN0cmluZyB7XG4gIGxldCBzeW50aGV0aWNFeGNlcHRpb246IEVycm9yO1xuICB0cnkge1xuICAgIHRocm93IG5ldyBFcnJvcignU2VudHJ5IHN5bnRoZXRpY0V4Y2VwdGlvbicpO1xuICB9IGNhdGNoIChleGNlcHRpb24pIHtcbiAgICBzeW50aGV0aWNFeGNlcHRpb24gPSBleGNlcHRpb24gYXMgRXJyb3I7XG4gIH1cbiAgcmV0dXJuIGNhbGxPbkh1YignY2FwdHVyZUV4Y2VwdGlvbicsIGV4Y2VwdGlvbiwge1xuICAgIGNhcHR1cmVDb250ZXh0LFxuICAgIG9yaWdpbmFsRXhjZXB0aW9uOiBleGNlcHRpb24sXG4gICAgc3ludGhldGljRXhjZXB0aW9uLFxuICB9KTtcbn1cblxuLyoqXG4gKiBDYXB0dXJlcyBhIG1lc3NhZ2UgZXZlbnQgYW5kIHNlbmRzIGl0IHRvIFNlbnRyeS5cbiAqXG4gKiBAcGFyYW0gbWVzc2FnZSBUaGUgbWVzc2FnZSB0byBzZW5kIHRvIFNlbnRyeS5cbiAqIEBwYXJhbSBsZXZlbCBEZWZpbmUgdGhlIGxldmVsIG9mIHRoZSBtZXNzYWdlLlxuICogQHJldHVybnMgVGhlIGdlbmVyYXRlZCBldmVudElkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FwdHVyZU1lc3NhZ2UobWVzc2FnZTogc3RyaW5nLCBjYXB0dXJlQ29udGV4dD86IENhcHR1cmVDb250ZXh0IHwgU2V2ZXJpdHkpOiBzdHJpbmcge1xuICBsZXQgc3ludGhldGljRXhjZXB0aW9uOiBFcnJvcjtcbiAgdHJ5IHtcbiAgICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG4gIH0gY2F0Y2ggKGV4Y2VwdGlvbikge1xuICAgIHN5bnRoZXRpY0V4Y2VwdGlvbiA9IGV4Y2VwdGlvbiBhcyBFcnJvcjtcbiAgfVxuXG4gIC8vIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIHByb3ZpZGUgZXhwbGljaXQgc2NvcGVzIHVwZ3JhZGUsIHdpdGhvdXQgY2hhbmdpbmcgdGhlIG9yaWdpbmFsXG4gIC8vIGFyaXR5IG9mIHRoZSBgY2FwdHVyZU1lc3NhZ2UobWVzc2FnZSwgbGV2ZWwpYCBtZXRob2QuXG4gIGNvbnN0IGxldmVsID0gdHlwZW9mIGNhcHR1cmVDb250ZXh0ID09PSAnc3RyaW5nJyA/IGNhcHR1cmVDb250ZXh0IDogdW5kZWZpbmVkO1xuICBjb25zdCBjb250ZXh0ID0gdHlwZW9mIGNhcHR1cmVDb250ZXh0ICE9PSAnc3RyaW5nJyA/IHsgY2FwdHVyZUNvbnRleHQgfSA6IHVuZGVmaW5lZDtcblxuICByZXR1cm4gY2FsbE9uSHViKCdjYXB0dXJlTWVzc2FnZScsIG1lc3NhZ2UsIGxldmVsLCB7XG4gICAgb3JpZ2luYWxFeGNlcHRpb246IG1lc3NhZ2UsXG4gICAgc3ludGhldGljRXhjZXB0aW9uLFxuICAgIC4uLmNvbnRleHQsXG4gIH0pO1xufVxuXG4vKipcbiAqIENhcHR1cmVzIGEgbWFudWFsbHkgY3JlYXRlZCBldmVudCBhbmQgc2VuZHMgaXQgdG8gU2VudHJ5LlxuICpcbiAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgdG8gc2VuZCB0byBTZW50cnkuXG4gKiBAcmV0dXJucyBUaGUgZ2VuZXJhdGVkIGV2ZW50SWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjYXB0dXJlRXZlbnQoZXZlbnQ6IEV2ZW50KTogc3RyaW5nIHtcbiAgcmV0dXJuIGNhbGxPbkh1YignY2FwdHVyZUV2ZW50JywgZXZlbnQpO1xufVxuXG4vKipcbiAqIENhbGxiYWNrIHRvIHNldCBjb250ZXh0IGluZm9ybWF0aW9uIG9udG8gdGhlIHNjb3BlLlxuICogQHBhcmFtIGNhbGxiYWNrIENhbGxiYWNrIGZ1bmN0aW9uIHRoYXQgcmVjZWl2ZXMgU2NvcGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb25maWd1cmVTY29wZShjYWxsYmFjazogKHNjb3BlOiBTY29wZSkgPT4gdm9pZCk6IHZvaWQge1xuICBjYWxsT25IdWI8dm9pZD4oJ2NvbmZpZ3VyZVNjb3BlJywgY2FsbGJhY2spO1xufVxuXG4vKipcbiAqIFJlY29yZHMgYSBuZXcgYnJlYWRjcnVtYiB3aGljaCB3aWxsIGJlIGF0dGFjaGVkIHRvIGZ1dHVyZSBldmVudHMuXG4gKlxuICogQnJlYWRjcnVtYnMgd2lsbCBiZSBhZGRlZCB0byBzdWJzZXF1ZW50IGV2ZW50cyB0byBwcm92aWRlIG1vcmUgY29udGV4dCBvblxuICogdXNlcidzIGFjdGlvbnMgcHJpb3IgdG8gYW4gZXJyb3Igb3IgY3Jhc2guXG4gKlxuICogQHBhcmFtIGJyZWFkY3J1bWIgVGhlIGJyZWFkY3J1bWIgdG8gcmVjb3JkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkQnJlYWRjcnVtYihicmVhZGNydW1iOiBCcmVhZGNydW1iKTogdm9pZCB7XG4gIGNhbGxPbkh1Yjx2b2lkPignYWRkQnJlYWRjcnVtYicsIGJyZWFkY3J1bWIpO1xufVxuXG4vKipcbiAqIFNldHMgY29udGV4dCBkYXRhIHdpdGggdGhlIGdpdmVuIG5hbWUuXG4gKiBAcGFyYW0gbmFtZSBvZiB0aGUgY29udGV4dFxuICogQHBhcmFtIGNvbnRleHQgQW55IGtpbmQgb2YgZGF0YS4gVGhpcyBkYXRhIHdpbGwgYmUgbm9ybWFsaXplZC5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBzZXRDb250ZXh0KG5hbWU6IHN0cmluZywgY29udGV4dDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGwpOiB2b2lkIHtcbiAgY2FsbE9uSHViPHZvaWQ+KCdzZXRDb250ZXh0JywgbmFtZSwgY29udGV4dCk7XG59XG5cbi8qKlxuICogU2V0IGFuIG9iamVjdCB0aGF0IHdpbGwgYmUgbWVyZ2VkIHNlbnQgYXMgZXh0cmEgZGF0YSB3aXRoIHRoZSBldmVudC5cbiAqIEBwYXJhbSBleHRyYXMgRXh0cmFzIG9iamVjdCB0byBtZXJnZSBpbnRvIGN1cnJlbnQgY29udGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldEV4dHJhcyhleHRyYXM6IEV4dHJhcyk6IHZvaWQge1xuICBjYWxsT25IdWI8dm9pZD4oJ3NldEV4dHJhcycsIGV4dHJhcyk7XG59XG5cbi8qKlxuICogU2V0IGFuIG9iamVjdCB0aGF0IHdpbGwgYmUgbWVyZ2VkIHNlbnQgYXMgdGFncyBkYXRhIHdpdGggdGhlIGV2ZW50LlxuICogQHBhcmFtIHRhZ3MgVGFncyBjb250ZXh0IG9iamVjdCB0byBtZXJnZSBpbnRvIGN1cnJlbnQgY29udGV4dC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFRhZ3ModGFnczogeyBba2V5OiBzdHJpbmddOiBQcmltaXRpdmUgfSk6IHZvaWQge1xuICBjYWxsT25IdWI8dm9pZD4oJ3NldFRhZ3MnLCB0YWdzKTtcbn1cblxuLyoqXG4gKiBTZXQga2V5OnZhbHVlIHRoYXQgd2lsbCBiZSBzZW50IGFzIGV4dHJhIGRhdGEgd2l0aCB0aGUgZXZlbnQuXG4gKiBAcGFyYW0ga2V5IFN0cmluZyBvZiBleHRyYVxuICogQHBhcmFtIGV4dHJhIEFueSBraW5kIG9mIGRhdGEuIFRoaXMgZGF0YSB3aWxsIGJlIG5vcm1hbGl6ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXRFeHRyYShrZXk6IHN0cmluZywgZXh0cmE6IEV4dHJhKTogdm9pZCB7XG4gIGNhbGxPbkh1Yjx2b2lkPignc2V0RXh0cmEnLCBrZXksIGV4dHJhKTtcbn1cblxuLyoqXG4gKiBTZXQga2V5OnZhbHVlIHRoYXQgd2lsbCBiZSBzZW50IGFzIHRhZ3MgZGF0YSB3aXRoIHRoZSBldmVudC5cbiAqXG4gKiBDYW4gYWxzbyBiZSB1c2VkIHRvIHVuc2V0IGEgdGFnLCBieSBwYXNzaW5nIGB1bmRlZmluZWRgLlxuICpcbiAqIEBwYXJhbSBrZXkgU3RyaW5nIGtleSBvZiB0YWdcbiAqIEBwYXJhbSB2YWx1ZSBWYWx1ZSBvZiB0YWdcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFRhZyhrZXk6IHN0cmluZywgdmFsdWU6IFByaW1pdGl2ZSk6IHZvaWQge1xuICBjYWxsT25IdWI8dm9pZD4oJ3NldFRhZycsIGtleSwgdmFsdWUpO1xufVxuXG4vKipcbiAqIFVwZGF0ZXMgdXNlciBjb250ZXh0IGluZm9ybWF0aW9uIGZvciBmdXR1cmUgZXZlbnRzLlxuICpcbiAqIEBwYXJhbSB1c2VyIFVzZXIgY29udGV4dCBvYmplY3QgdG8gYmUgc2V0IGluIHRoZSBjdXJyZW50IGNvbnRleHQuIFBhc3MgYG51bGxgIHRvIHVuc2V0IHRoZSB1c2VyLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc2V0VXNlcih1c2VyOiBVc2VyIHwgbnVsbCk6IHZvaWQge1xuICBjYWxsT25IdWI8dm9pZD4oJ3NldFVzZXInLCB1c2VyKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHNjb3BlIHdpdGggYW5kIGV4ZWN1dGVzIHRoZSBnaXZlbiBvcGVyYXRpb24gd2l0aGluLlxuICogVGhlIHNjb3BlIGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBvbmNlIHRoZSBvcGVyYXRpb25cbiAqIGZpbmlzaGVzIG9yIHRocm93cy5cbiAqXG4gKiBUaGlzIGlzIGVzc2VudGlhbGx5IGEgY29udmVuaWVuY2UgZnVuY3Rpb24gZm9yOlxuICpcbiAqICAgICBwdXNoU2NvcGUoKTtcbiAqICAgICBjYWxsYmFjaygpO1xuICogICAgIHBvcFNjb3BlKCk7XG4gKlxuICogQHBhcmFtIGNhbGxiYWNrIHRoYXQgd2lsbCBiZSBlbmNsb3NlZCBpbnRvIHB1c2gvcG9wU2NvcGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB3aXRoU2NvcGUoY2FsbGJhY2s6IChzY29wZTogU2NvcGUpID0+IHZvaWQpOiB2b2lkIHtcbiAgY2FsbE9uSHViPHZvaWQ+KCd3aXRoU2NvcGUnLCBjYWxsYmFjayk7XG59XG5cbi8qKlxuICogQ2FsbHMgYSBmdW5jdGlvbiBvbiB0aGUgbGF0ZXN0IGNsaWVudC4gVXNlIHRoaXMgd2l0aCBjYXV0aW9uLCBpdCdzIG1lYW50IGFzXG4gKiBpbiBcImludGVybmFsXCIgaGVscGVyIHNvIHdlIGRvbid0IG5lZWQgdG8gZXhwb3NlIGV2ZXJ5IHBvc3NpYmxlIGZ1bmN0aW9uIGluXG4gKiB0aGUgc2hpbS4gSXQgaXMgbm90IGd1YXJhbnRlZWQgdGhhdCB0aGUgY2xpZW50IGFjdHVhbGx5IGltcGxlbWVudHMgdGhlXG4gKiBmdW5jdGlvbi5cbiAqXG4gKiBAcGFyYW0gbWV0aG9kIFRoZSBtZXRob2QgdG8gY2FsbCBvbiB0aGUgY2xpZW50L2NsaWVudC5cbiAqIEBwYXJhbSBhcmdzIEFyZ3VtZW50cyB0byBwYXNzIHRvIHRoZSBjbGllbnQvZm9udGVuZC5cbiAqIEBoaWRkZW5cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbmV4cG9ydCBmdW5jdGlvbiBfY2FsbE9uQ2xpZW50KG1ldGhvZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSk6IHZvaWQge1xuICBjYWxsT25IdWI8dm9pZD4oJ19pbnZva2VDbGllbnQnLCBtZXRob2QsIC4uLmFyZ3MpO1xufVxuXG4vKipcbiAqIFN0YXJ0cyBhIG5ldyBgVHJhbnNhY3Rpb25gIGFuZCByZXR1cm5zIGl0LiBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCB0byBtYW51YWwgdHJhY2luZyBpbnN0cnVtZW50YXRpb24uXG4gKlxuICogQSB0cmVlIHN0cnVjdHVyZSBjYW4gYmUgYnVpbHQgYnkgYWRkaW5nIGNoaWxkIHNwYW5zIHRvIHRoZSB0cmFuc2FjdGlvbiwgYW5kIGNoaWxkIHNwYW5zIHRvIG90aGVyIHNwYW5zLiBUbyBzdGFydCBhXG4gKiBuZXcgY2hpbGQgc3BhbiB3aXRoaW4gdGhlIHRyYW5zYWN0aW9uIG9yIGFueSBzcGFuLCBjYWxsIHRoZSByZXNwZWN0aXZlIGAuc3RhcnRDaGlsZCgpYCBtZXRob2QuXG4gKlxuICogRXZlcnkgY2hpbGQgc3BhbiBtdXN0IGJlIGZpbmlzaGVkIGJlZm9yZSB0aGUgdHJhbnNhY3Rpb24gaXMgZmluaXNoZWQsIG90aGVyd2lzZSB0aGUgdW5maW5pc2hlZCBzcGFucyBhcmUgZGlzY2FyZGVkLlxuICpcbiAqIFRoZSB0cmFuc2FjdGlvbiBtdXN0IGJlIGZpbmlzaGVkIHdpdGggYSBjYWxsIHRvIGl0cyBgLmZpbmlzaCgpYCBtZXRob2QsIGF0IHdoaWNoIHBvaW50IHRoZSB0cmFuc2FjdGlvbiB3aXRoIGFsbCBpdHNcbiAqIGZpbmlzaGVkIGNoaWxkIHNwYW5zIHdpbGwgYmUgc2VudCB0byBTZW50cnkuXG4gKlxuICogQHBhcmFtIGNvbnRleHQgUHJvcGVydGllcyBvZiB0aGUgbmV3IGBUcmFuc2FjdGlvbmAuXG4gKiBAcGFyYW0gY3VzdG9tU2FtcGxpbmdDb250ZXh0IEluZm9ybWF0aW9uIGdpdmVuIHRvIHRoZSB0cmFuc2FjdGlvbiBzYW1wbGluZyBmdW5jdGlvbiAoYWxvbmcgd2l0aCBjb250ZXh0LWRlcGVuZGVudFxuICogZGVmYXVsdCB2YWx1ZXMpLiBTZWUge0BsaW5rIE9wdGlvbnMudHJhY2VzU2FtcGxlcn0uXG4gKlxuICogQHJldHVybnMgVGhlIHRyYW5zYWN0aW9uIHdoaWNoIHdhcyBqdXN0IHN0YXJ0ZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHN0YXJ0VHJhbnNhY3Rpb24oXG4gIGNvbnRleHQ6IFRyYW5zYWN0aW9uQ29udGV4dCxcbiAgY3VzdG9tU2FtcGxpbmdDb250ZXh0PzogQ3VzdG9tU2FtcGxpbmdDb250ZXh0LFxuKTogVHJhbnNhY3Rpb24ge1xuICByZXR1cm4gY2FsbE9uSHViKCdzdGFydFRyYW5zYWN0aW9uJywgeyAuLi5jb250ZXh0IH0sIGN1c3RvbVNhbXBsaW5nQ29udGV4dCk7XG59XG4iLCAiaW1wb3J0IHsgRHNuTGlrZSwgU2RrTWV0YWRhdGEgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IERzbiwgdXJsRW5jb2RlIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmNvbnN0IFNFTlRSWV9BUElfVkVSU0lPTiA9ICc3JztcblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgdG8gcHJvdmlkZSB1cmxzLCBoZWFkZXJzIGFuZCBtZXRhZGF0YSB0aGF0IGNhbiBiZSB1c2VkIHRvIGZvcm1cbiAqIGRpZmZlcmVudCB0eXBlcyBvZiByZXF1ZXN0cyB0byBTZW50cnkgZW5kcG9pbnRzLlxuICogU3VwcG9ydHMgYm90aCBlbnZlbG9wZXMgYW5kIHJlZ3VsYXIgZXZlbnQgcmVxdWVzdHMuXG4gKiovXG5leHBvcnQgY2xhc3MgQVBJIHtcbiAgLyoqIFRoZSBEU04gYXMgcGFzc2VkIHRvIFNlbnRyeS5pbml0KCkgKi9cbiAgcHVibGljIGRzbjogRHNuTGlrZTtcblxuICAvKiogTWV0YWRhdGEgYWJvdXQgdGhlIFNESyAobmFtZSwgdmVyc2lvbiwgZXRjKSBmb3IgaW5jbHVzaW9uIGluIGVudmVsb3BlIGhlYWRlcnMgKi9cbiAgcHVibGljIG1ldGFkYXRhOiBTZGtNZXRhZGF0YTtcblxuICAvKiogVGhlIGludGVybmFsbHkgdXNlZCBEc24gb2JqZWN0LiAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9kc25PYmplY3Q6IERzbjtcblxuICAvKiogVGhlIGVudmVsb3BlIHR1bm5lbCB0byB1c2UuICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3R1bm5lbD86IHN0cmluZztcblxuICAvKiogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEFQSSAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoZHNuOiBEc25MaWtlLCBtZXRhZGF0YTogU2RrTWV0YWRhdGEgPSB7fSwgdHVubmVsPzogc3RyaW5nKSB7XG4gICAgdGhpcy5kc24gPSBkc247XG4gICAgdGhpcy5fZHNuT2JqZWN0ID0gbmV3IERzbihkc24pO1xuICAgIHRoaXMubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICB0aGlzLl90dW5uZWwgPSB0dW5uZWw7XG4gIH1cblxuICAvKiogUmV0dXJucyB0aGUgRHNuIG9iamVjdC4gKi9cbiAgcHVibGljIGdldERzbigpOiBEc24ge1xuICAgIHJldHVybiB0aGlzLl9kc25PYmplY3Q7XG4gIH1cblxuICAvKiogRG9lcyB0aGlzIHRyYW5zcG9ydCBmb3JjZSBlbnZlbG9wZXM/ICovXG4gIHB1YmxpYyBmb3JjZUVudmVsb3BlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuX3R1bm5lbDtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBwcmVmaXggdG8gY29uc3RydWN0IFNlbnRyeSBpbmdlc3Rpb24gQVBJIGVuZHBvaW50cy4gKi9cbiAgcHVibGljIGdldEJhc2VBcGlFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRzbiA9IHRoaXMuZ2V0RHNuKCk7XG4gICAgY29uc3QgcHJvdG9jb2wgPSBkc24ucHJvdG9jb2wgPyBgJHtkc24ucHJvdG9jb2x9OmAgOiAnJztcbiAgICBjb25zdCBwb3J0ID0gZHNuLnBvcnQgPyBgOiR7ZHNuLnBvcnR9YCA6ICcnO1xuICAgIHJldHVybiBgJHtwcm90b2NvbH0vLyR7ZHNuLmhvc3R9JHtwb3J0fSR7ZHNuLnBhdGggPyBgLyR7ZHNuLnBhdGh9YCA6ICcnfS9hcGkvYDtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBzdG9yZSBlbmRwb2ludCBVUkwuICovXG4gIHB1YmxpYyBnZXRTdG9yZUVuZHBvaW50KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuX2dldEluZ2VzdEVuZHBvaW50KCdzdG9yZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHN0b3JlIGVuZHBvaW50IFVSTCB3aXRoIGF1dGggaW4gdGhlIHF1ZXJ5IHN0cmluZy5cbiAgICpcbiAgICogU2VuZGluZyBhdXRoIGFzIHBhcnQgb2YgdGhlIHF1ZXJ5IHN0cmluZyBhbmQgbm90IGFzIGN1c3RvbSBIVFRQIGhlYWRlcnMgYXZvaWRzIENPUlMgcHJlZmxpZ2h0IHJlcXVlc3RzLlxuICAgKi9cbiAgcHVibGljIGdldFN0b3JlRW5kcG9pbnRXaXRoVXJsRW5jb2RlZEF1dGgoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7dGhpcy5nZXRTdG9yZUVuZHBvaW50KCl9PyR7dGhpcy5fZW5jb2RlZEF1dGgoKX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGVudmVsb3BlIGVuZHBvaW50IFVSTCB3aXRoIGF1dGggaW4gdGhlIHF1ZXJ5IHN0cmluZy5cbiAgICpcbiAgICogU2VuZGluZyBhdXRoIGFzIHBhcnQgb2YgdGhlIHF1ZXJ5IHN0cmluZyBhbmQgbm90IGFzIGN1c3RvbSBIVFRQIGhlYWRlcnMgYXZvaWRzIENPUlMgcHJlZmxpZ2h0IHJlcXVlc3RzLlxuICAgKi9cbiAgcHVibGljIGdldEVudmVsb3BlRW5kcG9pbnRXaXRoVXJsRW5jb2RlZEF1dGgoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5mb3JjZUVudmVsb3BlKCkpIHtcbiAgICAgIHJldHVybiB0aGlzLl90dW5uZWwgYXMgc3RyaW5nO1xuICAgIH1cblxuICAgIHJldHVybiBgJHt0aGlzLl9nZXRFbnZlbG9wZUVuZHBvaW50KCl9PyR7dGhpcy5fZW5jb2RlZEF1dGgoKX1gO1xuICB9XG5cbiAgLyoqIFJldHVybnMgb25seSB0aGUgcGF0aCBjb21wb25lbnQgZm9yIHRoZSBzdG9yZSBlbmRwb2ludC4gKi9cbiAgcHVibGljIGdldFN0b3JlRW5kcG9pbnRQYXRoKCk6IHN0cmluZyB7XG4gICAgY29uc3QgZHNuID0gdGhpcy5nZXREc24oKTtcbiAgICByZXR1cm4gYCR7ZHNuLnBhdGggPyBgLyR7ZHNuLnBhdGh9YCA6ICcnfS9hcGkvJHtkc24ucHJvamVjdElkfS9zdG9yZS9gO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY2FuIGJlIHVzZWQgaW4gcmVxdWVzdCBoZWFkZXJzLlxuICAgKiBUaGlzIGlzIG5lZWRlZCBmb3Igbm9kZSBhbmQgdGhlIG9sZCAvc3RvcmUgZW5kcG9pbnQgaW4gc2VudHJ5XG4gICAqL1xuICBwdWJsaWMgZ2V0UmVxdWVzdEhlYWRlcnMoY2xpZW50TmFtZTogc3RyaW5nLCBjbGllbnRWZXJzaW9uOiBzdHJpbmcpOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9IHtcbiAgICAvLyBDSEFOR0UgVEhJUyB0byB1c2UgbWV0YWRhdGEgYnV0IGtlZXAgY2xpZW50TmFtZSBhbmQgY2xpZW50VmVyc2lvbiBjb21wYXRpYmxlXG4gICAgY29uc3QgZHNuID0gdGhpcy5nZXREc24oKTtcbiAgICBjb25zdCBoZWFkZXIgPSBbYFNlbnRyeSBzZW50cnlfdmVyc2lvbj0ke1NFTlRSWV9BUElfVkVSU0lPTn1gXTtcbiAgICBoZWFkZXIucHVzaChgc2VudHJ5X2NsaWVudD0ke2NsaWVudE5hbWV9LyR7Y2xpZW50VmVyc2lvbn1gKTtcbiAgICBoZWFkZXIucHVzaChgc2VudHJ5X2tleT0ke2Rzbi5wdWJsaWNLZXl9YCk7XG4gICAgaWYgKGRzbi5wYXNzKSB7XG4gICAgICBoZWFkZXIucHVzaChgc2VudHJ5X3NlY3JldD0ke2Rzbi5wYXNzfWApO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAgICdYLVNlbnRyeS1BdXRoJzogaGVhZGVyLmpvaW4oJywgJyksXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSB1cmwgdG8gdGhlIHJlcG9ydCBkaWFsb2cgZW5kcG9pbnQuICovXG4gIHB1YmxpYyBnZXRSZXBvcnREaWFsb2dFbmRwb2ludChcbiAgICBkaWFsb2dPcHRpb25zOiB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgICAgdXNlcj86IHsgbmFtZT86IHN0cmluZzsgZW1haWw/OiBzdHJpbmcgfTtcbiAgICB9ID0ge30sXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgZHNuID0gdGhpcy5nZXREc24oKTtcbiAgICBjb25zdCBlbmRwb2ludCA9IGAke3RoaXMuZ2V0QmFzZUFwaUVuZHBvaW50KCl9ZW1iZWQvZXJyb3ItcGFnZS9gO1xuXG4gICAgY29uc3QgZW5jb2RlZE9wdGlvbnMgPSBbXTtcbiAgICBlbmNvZGVkT3B0aW9ucy5wdXNoKGBkc249JHtkc24udG9TdHJpbmcoKX1gKTtcbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkaWFsb2dPcHRpb25zKSB7XG4gICAgICBpZiAoa2V5ID09PSAnZHNuJykge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGtleSA9PT0gJ3VzZXInKSB7XG4gICAgICAgIGlmICghZGlhbG9nT3B0aW9ucy51c2VyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpYWxvZ09wdGlvbnMudXNlci5uYW1lKSB7XG4gICAgICAgICAgZW5jb2RlZE9wdGlvbnMucHVzaChgbmFtZT0ke2VuY29kZVVSSUNvbXBvbmVudChkaWFsb2dPcHRpb25zLnVzZXIubmFtZSl9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpYWxvZ09wdGlvbnMudXNlci5lbWFpbCkge1xuICAgICAgICAgIGVuY29kZWRPcHRpb25zLnB1c2goYGVtYWlsPSR7ZW5jb2RlVVJJQ29tcG9uZW50KGRpYWxvZ09wdGlvbnMudXNlci5lbWFpbCl9YCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVuY29kZWRPcHRpb25zLnB1c2goYCR7ZW5jb2RlVVJJQ29tcG9uZW50KGtleSl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KGRpYWxvZ09wdGlvbnNba2V5XSBhcyBzdHJpbmcpfWApO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW5jb2RlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gYCR7ZW5kcG9pbnR9PyR7ZW5jb2RlZE9wdGlvbnMuam9pbignJicpfWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGVuZHBvaW50O1xuICB9XG5cbiAgLyoqIFJldHVybnMgdGhlIGVudmVsb3BlIGVuZHBvaW50IFVSTC4gKi9cbiAgcHJpdmF0ZSBfZ2V0RW52ZWxvcGVFbmRwb2ludCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9nZXRJbmdlc3RFbmRwb2ludCgnZW52ZWxvcGUnKTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBpbmdlc3QgQVBJIGVuZHBvaW50IGZvciB0YXJnZXQuICovXG4gIHByaXZhdGUgX2dldEluZ2VzdEVuZHBvaW50KHRhcmdldDogJ3N0b3JlJyB8ICdlbnZlbG9wZScpOiBzdHJpbmcge1xuICAgIGlmICh0aGlzLl90dW5uZWwpIHtcbiAgICAgIHJldHVybiB0aGlzLl90dW5uZWw7XG4gICAgfVxuICAgIGNvbnN0IGJhc2UgPSB0aGlzLmdldEJhc2VBcGlFbmRwb2ludCgpO1xuICAgIGNvbnN0IGRzbiA9IHRoaXMuZ2V0RHNuKCk7XG4gICAgcmV0dXJuIGAke2Jhc2V9JHtkc24ucHJvamVjdElkfS8ke3RhcmdldH0vYDtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIGEgVVJMLWVuY29kZWQgc3RyaW5nIHdpdGggYXV0aCBjb25maWcgc3VpdGFibGUgZm9yIGEgcXVlcnkgc3RyaW5nLiAqL1xuICBwcml2YXRlIF9lbmNvZGVkQXV0aCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGRzbiA9IHRoaXMuZ2V0RHNuKCk7XG4gICAgY29uc3QgYXV0aCA9IHtcbiAgICAgIC8vIFdlIHNlbmQgb25seSB0aGUgbWluaW11bSBzZXQgb2YgcmVxdWlyZWQgaW5mb3JtYXRpb24uIFNlZVxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2dldHNlbnRyeS9zZW50cnktamF2YXNjcmlwdC9pc3N1ZXMvMjU3Mi5cbiAgICAgIHNlbnRyeV9rZXk6IGRzbi5wdWJsaWNLZXksXG4gICAgICBzZW50cnlfdmVyc2lvbjogU0VOVFJZX0FQSV9WRVJTSU9OLFxuICAgIH07XG4gICAgcmV0dXJuIHVybEVuY29kZShhdXRoKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yLCBnZXRDdXJyZW50SHViIH0gZnJvbSAnQHNlbnRyeS9odWInO1xuaW1wb3J0IHsgSW50ZWdyYXRpb24sIE9wdGlvbnMgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5leHBvcnQgY29uc3QgaW5zdGFsbGVkSW50ZWdyYXRpb25zOiBzdHJpbmdbXSA9IFtdO1xuXG4vKiogTWFwIG9mIGludGVncmF0aW9ucyBhc3NpZ25lZCB0byBhIGNsaWVudCAqL1xuZXhwb3J0IHR5cGUgSW50ZWdyYXRpb25JbmRleCA9IHtcbiAgW2tleTogc3RyaW5nXTogSW50ZWdyYXRpb247XG59ICYgeyBpbml0aWFsaXplZD86IGJvb2xlYW4gfTtcblxuLyoqXG4gKiBAcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBmaWx0ZXJEdXBsaWNhdGVzKGludGVncmF0aW9uczogSW50ZWdyYXRpb25bXSk6IEludGVncmF0aW9uW10ge1xuICByZXR1cm4gaW50ZWdyYXRpb25zLnJlZHVjZSgoYWNjLCBpbnRlZ3JhdGlvbnMpID0+IHtcbiAgICBpZiAoYWNjLmV2ZXJ5KGFjY0ludGVncmF0aW9uID0+IGludGVncmF0aW9ucy5uYW1lICE9PSBhY2NJbnRlZ3JhdGlvbi5uYW1lKSkge1xuICAgICAgYWNjLnB1c2goaW50ZWdyYXRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwgW10gYXMgSW50ZWdyYXRpb25bXSk7XG59XG5cbi8qKiBHZXRzIGludGVncmF0aW9uIHRvIGluc3RhbGwgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnRlZ3JhdGlvbnNUb1NldHVwKG9wdGlvbnM6IE9wdGlvbnMpOiBJbnRlZ3JhdGlvbltdIHtcbiAgY29uc3QgZGVmYXVsdEludGVncmF0aW9ucyA9IChvcHRpb25zLmRlZmF1bHRJbnRlZ3JhdGlvbnMgJiYgWy4uLm9wdGlvbnMuZGVmYXVsdEludGVncmF0aW9uc10pIHx8IFtdO1xuICBjb25zdCB1c2VySW50ZWdyYXRpb25zID0gb3B0aW9ucy5pbnRlZ3JhdGlvbnM7XG5cbiAgbGV0IGludGVncmF0aW9uczogSW50ZWdyYXRpb25bXSA9IFsuLi5maWx0ZXJEdXBsaWNhdGVzKGRlZmF1bHRJbnRlZ3JhdGlvbnMpXTtcblxuICBpZiAoQXJyYXkuaXNBcnJheSh1c2VySW50ZWdyYXRpb25zKSkge1xuICAgIC8vIEZpbHRlciBvdXQgaW50ZWdyYXRpb25zIHRoYXQgYXJlIGFsc28gaW5jbHVkZWQgaW4gdXNlciBvcHRpb25zXG4gICAgaW50ZWdyYXRpb25zID0gW1xuICAgICAgLi4uaW50ZWdyYXRpb25zLmZpbHRlcihpbnRlZ3JhdGlvbnMgPT5cbiAgICAgICAgdXNlckludGVncmF0aW9ucy5ldmVyeSh1c2VySW50ZWdyYXRpb24gPT4gdXNlckludGVncmF0aW9uLm5hbWUgIT09IGludGVncmF0aW9ucy5uYW1lKSxcbiAgICAgICksXG4gICAgICAvLyBBbmQgZmlsdGVyIG91dCBkdXBsaWNhdGVkIHVzZXIgb3B0aW9ucyBpbnRlZ3JhdGlvbnNcbiAgICAgIC4uLmZpbHRlckR1cGxpY2F0ZXModXNlckludGVncmF0aW9ucyksXG4gICAgXTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgdXNlckludGVncmF0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGludGVncmF0aW9ucyA9IHVzZXJJbnRlZ3JhdGlvbnMoaW50ZWdyYXRpb25zKTtcbiAgICBpbnRlZ3JhdGlvbnMgPSBBcnJheS5pc0FycmF5KGludGVncmF0aW9ucykgPyBpbnRlZ3JhdGlvbnMgOiBbaW50ZWdyYXRpb25zXTtcbiAgfVxuXG4gIC8vIE1ha2Ugc3VyZSB0aGF0IGlmIHByZXNlbnQsIGBEZWJ1Z2AgaW50ZWdyYXRpb24gd2lsbCBhbHdheXMgcnVuIGxhc3RcbiAgY29uc3QgaW50ZWdyYXRpb25zTmFtZXMgPSBpbnRlZ3JhdGlvbnMubWFwKGkgPT4gaS5uYW1lKTtcbiAgY29uc3QgYWx3YXlzTGFzdFRvUnVuID0gJ0RlYnVnJztcbiAgaWYgKGludGVncmF0aW9uc05hbWVzLmluZGV4T2YoYWx3YXlzTGFzdFRvUnVuKSAhPT0gLTEpIHtcbiAgICBpbnRlZ3JhdGlvbnMucHVzaCguLi5pbnRlZ3JhdGlvbnMuc3BsaWNlKGludGVncmF0aW9uc05hbWVzLmluZGV4T2YoYWx3YXlzTGFzdFRvUnVuKSwgMSkpO1xuICB9XG5cbiAgcmV0dXJuIGludGVncmF0aW9ucztcbn1cblxuLyoqIFNldHVwIGdpdmVuIGludGVncmF0aW9uICovXG5leHBvcnQgZnVuY3Rpb24gc2V0dXBJbnRlZ3JhdGlvbihpbnRlZ3JhdGlvbjogSW50ZWdyYXRpb24pOiB2b2lkIHtcbiAgaWYgKGluc3RhbGxlZEludGVncmF0aW9ucy5pbmRleE9mKGludGVncmF0aW9uLm5hbWUpICE9PSAtMSkge1xuICAgIHJldHVybjtcbiAgfVxuICBpbnRlZ3JhdGlvbi5zZXR1cE9uY2UoYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3IsIGdldEN1cnJlbnRIdWIpO1xuICBpbnN0YWxsZWRJbnRlZ3JhdGlvbnMucHVzaChpbnRlZ3JhdGlvbi5uYW1lKTtcbiAgbG9nZ2VyLmxvZyhgSW50ZWdyYXRpb24gaW5zdGFsbGVkOiAke2ludGVncmF0aW9uLm5hbWV9YCk7XG59XG5cbi8qKlxuICogR2l2ZW4gYSBsaXN0IG9mIGludGVncmF0aW9uIGluc3RhbmNlcyB0aGlzIGluc3RhbGxzIHRoZW0gYWxsLiBXaGVuIGB3aXRoRGVmYXVsdHNgIGlzIHNldCB0byBgdHJ1ZWAgdGhlbiBhbGwgZGVmYXVsdFxuICogaW50ZWdyYXRpb25zIGFyZSBhZGRlZCB1bmxlc3MgdGhleSB3ZXJlIGFscmVhZHkgcHJvdmlkZWQgYmVmb3JlLlxuICogQHBhcmFtIGludGVncmF0aW9ucyBhcnJheSBvZiBpbnRlZ3JhdGlvbiBpbnN0YW5jZXNcbiAqIEBwYXJhbSB3aXRoRGVmYXVsdCBzaG91bGQgZW5hYmxlIGRlZmF1bHQgaW50ZWdyYXRpb25zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cEludGVncmF0aW9uczxPIGV4dGVuZHMgT3B0aW9ucz4ob3B0aW9uczogTyk6IEludGVncmF0aW9uSW5kZXgge1xuICBjb25zdCBpbnRlZ3JhdGlvbnM6IEludGVncmF0aW9uSW5kZXggPSB7fTtcbiAgZ2V0SW50ZWdyYXRpb25zVG9TZXR1cChvcHRpb25zKS5mb3JFYWNoKGludGVncmF0aW9uID0+IHtcbiAgICBpbnRlZ3JhdGlvbnNbaW50ZWdyYXRpb24ubmFtZV0gPSBpbnRlZ3JhdGlvbjtcbiAgICBzZXR1cEludGVncmF0aW9uKGludGVncmF0aW9uKTtcbiAgfSk7XG4gIC8vIHNldCB0aGUgYGluaXRpYWxpemVkYCBmbGFnIHNvIHdlIGRvbid0IHJ1biB0aHJvdWdoIHRoZSBwcm9jZXNzIGFnYWluIHVuZWNlc3NhcmlseTsgdXNlIGBPYmplY3QuZGVmaW5lUHJvcGVydHlgXG4gIC8vIGJlY2F1c2UgYnkgZGVmYXVsdCBpdCBjcmVhdGVzIGEgcHJvcGVydHkgd2hpY2ggaXMgbm9uZW51bWVyYWJsZSwgd2hpY2ggd2Ugd2FudCBzaW5jZSBgaW5pdGlhbGl6ZWRgIHNob3VsZG4ndCBiZVxuICAvLyBjb25zaWRlcmVkIGEgbWVtYmVyIG9mIHRoZSBpbmRleCB0aGUgd2F5IHRoZSBhY3R1YWwgaW50ZWdyYXRpb25zIGFyZVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoaW50ZWdyYXRpb25zLCAnaW5pdGlhbGl6ZWQnLCB7IHZhbHVlOiB0cnVlIH0pO1xuICByZXR1cm4gaW50ZWdyYXRpb25zO1xufVxuIiwgIi8qIGVzbGludC1kaXNhYmxlIG1heC1saW5lcyAqL1xuaW1wb3J0IHsgU2NvcGUsIFNlc3Npb24gfSBmcm9tICdAc2VudHJ5L2h1Yic7XG5pbXBvcnQge1xuICBDbGllbnQsXG4gIEV2ZW50LFxuICBFdmVudEhpbnQsXG4gIEludGVncmF0aW9uLFxuICBJbnRlZ3JhdGlvbkNsYXNzLFxuICBPcHRpb25zLFxuICBPdXRjb21lLFxuICBTZXNzaW9uU3RhdHVzLFxuICBTZXZlcml0eSxcbiAgVHJhbnNwb3J0LFxufSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7XG4gIGNoZWNrT3JTZXRBbHJlYWR5Q2F1Z2h0LFxuICBkYXRlVGltZXN0YW1wSW5TZWNvbmRzLFxuICBEc24sXG4gIGlzUGxhaW5PYmplY3QsXG4gIGlzUHJpbWl0aXZlLFxuICBpc1RoZW5hYmxlLFxuICBsb2dnZXIsXG4gIG5vcm1hbGl6ZSxcbiAgU2VudHJ5RXJyb3IsXG4gIFN5bmNQcm9taXNlLFxuICB0cnVuY2F0ZSxcbiAgdXVpZDQsXG59IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5pbXBvcnQgeyBCYWNrZW5kLCBCYWNrZW5kQ2xhc3MgfSBmcm9tICcuL2Jhc2ViYWNrZW5kJztcbmltcG9ydCB7IEludGVncmF0aW9uSW5kZXgsIHNldHVwSW50ZWdyYXRpb25zIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbic7XG5cbmNvbnN0IEFMUkVBRFlfU0VFTl9FUlJPUiA9IFwiTm90IGNhcHR1cmluZyBleGNlcHRpb24gYmVjYXVzZSBpdCdzIGFscmVhZHkgYmVlbiBjYXB0dXJlZC5cIjtcblxuLyoqXG4gKiBCYXNlIGltcGxlbWVudGF0aW9uIGZvciBhbGwgSmF2YVNjcmlwdCBTREsgY2xpZW50cy5cbiAqXG4gKiBDYWxsIHRoZSBjb25zdHJ1Y3RvciB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGJhY2tlbmQgY29uc3RydWN0b3IgYW5kIG9wdGlvbnNcbiAqIHNwZWNpZmljIHRvIHRoZSBjbGllbnQgc3ViY2xhc3MuIFRvIGFjY2VzcyB0aGVzZSBvcHRpb25zIGxhdGVyLCB1c2VcbiAqIHtAbGluayBDbGllbnQuZ2V0T3B0aW9uc30uIEFsc28sIHRoZSBCYWNrZW5kIGluc3RhbmNlIGlzIGF2YWlsYWJsZSB2aWFcbiAqIHtAbGluayBDbGllbnQuZ2V0QmFja2VuZH0uXG4gKlxuICogSWYgYSBEc24gaXMgc3BlY2lmaWVkIGluIHRoZSBvcHRpb25zLCBpdCB3aWxsIGJlIHBhcnNlZCBhbmQgc3RvcmVkLiBVc2VcbiAqIHtAbGluayBDbGllbnQuZ2V0RHNufSB0byByZXRyaWV2ZSB0aGUgRHNuIGF0IGFueSBtb21lbnQuIEluIGNhc2UgdGhlIERzbiBpc1xuICogaW52YWxpZCwgdGhlIGNvbnN0cnVjdG9yIHdpbGwgdGhyb3cgYSB7QGxpbmsgU2VudHJ5RXhjZXB0aW9ufS4gTm90ZSB0aGF0XG4gKiB3aXRob3V0IGEgdmFsaWQgRHNuLCB0aGUgU0RLIHdpbGwgbm90IHNlbmQgYW55IGV2ZW50cyB0byBTZW50cnkuXG4gKlxuICogQmVmb3JlIHNlbmRpbmcgYW4gZXZlbnQgdmlhIHRoZSBiYWNrZW5kLCBpdCBpcyBwYXNzZWQgdGhyb3VnaFxuICoge0BsaW5rIEJhc2VDbGllbnQuX3ByZXBhcmVFdmVudH0gdG8gYWRkIFNESyBpbmZvcm1hdGlvbiBhbmQgc2NvcGUgZGF0YVxuICogKGJyZWFkY3J1bWJzIGFuZCBjb250ZXh0KS4gVG8gYWRkIG1vcmUgY3VzdG9tIGluZm9ybWF0aW9uLCBvdmVycmlkZSB0aGlzXG4gKiBtZXRob2QgYW5kIGV4dGVuZCB0aGUgcmVzdWx0aW5nIHByZXBhcmVkIGV2ZW50LlxuICpcbiAqIFRvIGlzc3VlIGF1dG9tYXRpY2FsbHkgY3JlYXRlZCBldmVudHMgKGUuZy4gdmlhIGluc3RydW1lbnRhdGlvbiksIHVzZVxuICoge0BsaW5rIENsaWVudC5jYXB0dXJlRXZlbnR9LiBJdCB3aWxsIHByZXBhcmUgdGhlIGV2ZW50IGFuZCBwYXNzIGl0IHRocm91Z2hcbiAqIHRoZSBjYWxsYmFjayBsaWZlY3ljbGUuIFRvIGlzc3VlIGF1dG8tYnJlYWRjcnVtYnMsIHVzZVxuICoge0BsaW5rIENsaWVudC5hZGRCcmVhZGNydW1ifS5cbiAqXG4gKiBAZXhhbXBsZVxuICogY2xhc3MgTm9kZUNsaWVudCBleHRlbmRzIEJhc2VDbGllbnQ8Tm9kZUJhY2tlbmQsIE5vZGVPcHRpb25zPiB7XG4gKiAgIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBOb2RlT3B0aW9ucykge1xuICogICAgIHN1cGVyKE5vZGVCYWNrZW5kLCBvcHRpb25zKTtcbiAqICAgfVxuICpcbiAqICAgLy8gLi4uXG4gKiB9XG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQ2xpZW50PEIgZXh0ZW5kcyBCYWNrZW5kLCBPIGV4dGVuZHMgT3B0aW9ucz4gaW1wbGVtZW50cyBDbGllbnQ8Tz4ge1xuICAvKipcbiAgICogVGhlIGJhY2tlbmQgdXNlZCB0byBwaHlzaWNhbGx5IGludGVyYWN0IGluIHRoZSBlbnZpcm9ubWVudC4gVXN1YWxseSwgdGhpc1xuICAgKiB3aWxsIGNvcnJlc3BvbmQgdG8gdGhlIGNsaWVudC4gV2hlbiBjb21wb3NpbmcgU0RLcywgaG93ZXZlciwgdGhlIEJhY2tlbmRcbiAgICogZnJvbSB0aGUgcm9vdCBTREsgd2lsbCBiZSB1c2VkLlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IF9iYWNrZW5kOiBCO1xuXG4gIC8qKiBPcHRpb25zIHBhc3NlZCB0byB0aGUgU0RLLiAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX29wdGlvbnM6IE87XG5cbiAgLyoqIFRoZSBjbGllbnQgRHNuLCBpZiBzcGVjaWZpZWQgaW4gb3B0aW9ucy4gV2l0aG91dCB0aGlzIERzbiwgdGhlIFNESyB3aWxsIGJlIGRpc2FibGVkLiAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2Rzbj86IERzbjtcblxuICAvKiogQXJyYXkgb2YgdXNlZCBpbnRlZ3JhdGlvbnMuICovXG4gIHByb3RlY3RlZCBfaW50ZWdyYXRpb25zOiBJbnRlZ3JhdGlvbkluZGV4ID0ge307XG5cbiAgLyoqIE51bWJlciBvZiBjYWxscyBiZWluZyBwcm9jZXNzZWQgKi9cbiAgcHJvdGVjdGVkIF9udW1Qcm9jZXNzaW5nOiBudW1iZXIgPSAwO1xuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGlzIGNsaWVudCBpbnN0YW5jZS5cbiAgICpcbiAgICogQHBhcmFtIGJhY2tlbmRDbGFzcyBBIGNvbnN0cnVjdG9yIGZ1bmN0aW9uIHRvIGNyZWF0ZSB0aGUgYmFja2VuZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucyBmb3IgdGhlIGNsaWVudC5cbiAgICovXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihiYWNrZW5kQ2xhc3M6IEJhY2tlbmRDbGFzczxCLCBPPiwgb3B0aW9uczogTykge1xuICAgIHRoaXMuX2JhY2tlbmQgPSBuZXcgYmFja2VuZENsYXNzKG9wdGlvbnMpO1xuICAgIHRoaXMuX29wdGlvbnMgPSBvcHRpb25zO1xuXG4gICAgaWYgKG9wdGlvbnMuZHNuKSB7XG4gICAgICB0aGlzLl9kc24gPSBuZXcgRHNuKG9wdGlvbnMuZHNuKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXG4gIHB1YmxpYyBjYXB0dXJlRXhjZXB0aW9uKGV4Y2VwdGlvbjogYW55LCBoaW50PzogRXZlbnRIaW50LCBzY29wZT86IFNjb3BlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAvLyBlbnN1cmUgd2UgaGF2ZW4ndCBjYXB0dXJlZCB0aGlzIHZlcnkgb2JqZWN0IGJlZm9yZVxuICAgIGlmIChjaGVja09yU2V0QWxyZWFkeUNhdWdodChleGNlcHRpb24pKSB7XG4gICAgICBsb2dnZXIubG9nKEFMUkVBRFlfU0VFTl9FUlJPUik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IGV2ZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGhpbnQgJiYgaGludC5ldmVudF9pZDtcblxuICAgIHRoaXMuX3Byb2Nlc3MoXG4gICAgICB0aGlzLl9nZXRCYWNrZW5kKClcbiAgICAgICAgLmV2ZW50RnJvbUV4Y2VwdGlvbihleGNlcHRpb24sIGhpbnQpXG4gICAgICAgIC50aGVuKGV2ZW50ID0+IHRoaXMuX2NhcHR1cmVFdmVudChldmVudCwgaGludCwgc2NvcGUpKVxuICAgICAgICAudGhlbihyZXN1bHQgPT4ge1xuICAgICAgICAgIGV2ZW50SWQgPSByZXN1bHQ7XG4gICAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4gZXZlbnRJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNhcHR1cmVNZXNzYWdlKG1lc3NhZ2U6IHN0cmluZywgbGV2ZWw/OiBTZXZlcml0eSwgaGludD86IEV2ZW50SGludCwgc2NvcGU/OiBTY29wZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgbGV0IGV2ZW50SWQ6IHN0cmluZyB8IHVuZGVmaW5lZCA9IGhpbnQgJiYgaGludC5ldmVudF9pZDtcblxuICAgIGNvbnN0IHByb21pc2VkRXZlbnQgPSBpc1ByaW1pdGl2ZShtZXNzYWdlKVxuICAgICAgPyB0aGlzLl9nZXRCYWNrZW5kKCkuZXZlbnRGcm9tTWVzc2FnZShTdHJpbmcobWVzc2FnZSksIGxldmVsLCBoaW50KVxuICAgICAgOiB0aGlzLl9nZXRCYWNrZW5kKCkuZXZlbnRGcm9tRXhjZXB0aW9uKG1lc3NhZ2UsIGhpbnQpO1xuXG4gICAgdGhpcy5fcHJvY2VzcyhcbiAgICAgIHByb21pc2VkRXZlbnRcbiAgICAgICAgLnRoZW4oZXZlbnQgPT4gdGhpcy5fY2FwdHVyZUV2ZW50KGV2ZW50LCBoaW50LCBzY29wZSkpXG4gICAgICAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICAgICAgZXZlbnRJZCA9IHJlc3VsdDtcbiAgICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiBldmVudElkO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgY2FwdHVyZUV2ZW50KGV2ZW50OiBFdmVudCwgaGludD86IEV2ZW50SGludCwgc2NvcGU/OiBTY29wZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gZW5zdXJlIHdlIGhhdmVuJ3QgY2FwdHVyZWQgdGhpcyB2ZXJ5IG9iamVjdCBiZWZvcmVcbiAgICBpZiAoaGludD8ub3JpZ2luYWxFeGNlcHRpb24gJiYgY2hlY2tPclNldEFscmVhZHlDYXVnaHQoaGludC5vcmlnaW5hbEV4Y2VwdGlvbikpIHtcbiAgICAgIGxvZ2dlci5sb2coQUxSRUFEWV9TRUVOX0VSUk9SKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBsZXQgZXZlbnRJZDogc3RyaW5nIHwgdW5kZWZpbmVkID0gaGludCAmJiBoaW50LmV2ZW50X2lkO1xuXG4gICAgdGhpcy5fcHJvY2VzcyhcbiAgICAgIHRoaXMuX2NhcHR1cmVFdmVudChldmVudCwgaGludCwgc2NvcGUpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgZXZlbnRJZCA9IHJlc3VsdDtcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICByZXR1cm4gZXZlbnRJZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNhcHR1cmVTZXNzaW9uKHNlc3Npb246IFNlc3Npb24pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX2lzRW5hYmxlZCgpKSB7XG4gICAgICBsb2dnZXIud2FybignU0RLIG5vdCBlbmFibGVkLCB3aWxsIG5vdCBjYXB0dXJlIHNlc3Npb24uJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCEodHlwZW9mIHNlc3Npb24ucmVsZWFzZSA9PT0gJ3N0cmluZycpKSB7XG4gICAgICBsb2dnZXIud2FybignRGlzY2FyZGVkIHNlc3Npb24gYmVjYXVzZSBvZiBtaXNzaW5nIG9yIG5vbi1zdHJpbmcgcmVsZWFzZScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZW5kU2Vzc2lvbihzZXNzaW9uKTtcbiAgICAgIC8vIEFmdGVyIHNlbmRpbmcsIHdlIHNldCBpbml0IGZhbHNlIHRvIGluZGljYXRlIGl0J3Mgbm90IHRoZSBmaXJzdCBvY2N1cnJlbmNlXG4gICAgICBzZXNzaW9uLnVwZGF0ZSh7IGluaXQ6IGZhbHNlIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGdldERzbigpOiBEc24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9kc247XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBnZXRPcHRpb25zKCk6IE8ge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgZ2V0VHJhbnNwb3J0KCk6IFRyYW5zcG9ydCB7XG4gICAgcmV0dXJuIHRoaXMuX2dldEJhY2tlbmQoKS5nZXRUcmFuc3BvcnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGZsdXNoKHRpbWVvdXQ/OiBudW1iZXIpOiBQcm9taXNlTGlrZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuX2lzQ2xpZW50RG9uZVByb2Nlc3NpbmcodGltZW91dCkudGhlbihjbGllbnRGaW5pc2hlZCA9PiB7XG4gICAgICByZXR1cm4gdGhpcy5nZXRUcmFuc3BvcnQoKVxuICAgICAgICAuY2xvc2UodGltZW91dClcbiAgICAgICAgLnRoZW4odHJhbnNwb3J0Rmx1c2hlZCA9PiBjbGllbnRGaW5pc2hlZCAmJiB0cmFuc3BvcnRGbHVzaGVkKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNsb3NlKHRpbWVvdXQ/OiBudW1iZXIpOiBQcm9taXNlTGlrZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuZmx1c2godGltZW91dCkudGhlbihyZXN1bHQgPT4ge1xuICAgICAgdGhpcy5nZXRPcHRpb25zKCkuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIHRoZSBpbnRlZ3JhdGlvbnNcbiAgICovXG4gIHB1YmxpYyBzZXR1cEludGVncmF0aW9ucygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5faXNFbmFibGVkKCkgJiYgIXRoaXMuX2ludGVncmF0aW9ucy5pbml0aWFsaXplZCkge1xuICAgICAgdGhpcy5faW50ZWdyYXRpb25zID0gc2V0dXBJbnRlZ3JhdGlvbnModGhpcy5fb3B0aW9ucyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgZ2V0SW50ZWdyYXRpb248VCBleHRlbmRzIEludGVncmF0aW9uPihpbnRlZ3JhdGlvbjogSW50ZWdyYXRpb25DbGFzczxUPik6IFQgfCBudWxsIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuICh0aGlzLl9pbnRlZ3JhdGlvbnNbaW50ZWdyYXRpb24uaWRdIGFzIFQpIHx8IG51bGw7XG4gICAgfSBjYXRjaCAoX29PKSB7XG4gICAgICBsb2dnZXIud2FybihgQ2Fubm90IHJldHJpZXZlIGludGVncmF0aW9uICR7aW50ZWdyYXRpb24uaWR9IGZyb20gdGhlIGN1cnJlbnQgQ2xpZW50YCk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKiogVXBkYXRlcyBleGlzdGluZyBzZXNzaW9uIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBldmVudCAqL1xuICBwcm90ZWN0ZWQgX3VwZGF0ZVNlc3Npb25Gcm9tRXZlbnQoc2Vzc2lvbjogU2Vzc2lvbiwgZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgbGV0IGNyYXNoZWQgPSBmYWxzZTtcbiAgICBsZXQgZXJyb3JlZCA9IGZhbHNlO1xuICAgIGNvbnN0IGV4Y2VwdGlvbnMgPSBldmVudC5leGNlcHRpb24gJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcztcblxuICAgIGlmIChleGNlcHRpb25zKSB7XG4gICAgICBlcnJvcmVkID0gdHJ1ZTtcblxuICAgICAgZm9yIChjb25zdCBleCBvZiBleGNlcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG1lY2hhbmlzbSA9IGV4Lm1lY2hhbmlzbTtcbiAgICAgICAgaWYgKG1lY2hhbmlzbSAmJiBtZWNoYW5pc20uaGFuZGxlZCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBjcmFzaGVkID0gdHJ1ZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEEgc2Vzc2lvbiBpcyB1cGRhdGVkIGFuZCB0aGF0IHNlc3Npb24gdXBkYXRlIGlzIHNlbnQgaW4gb25seSBvbmUgb2YgdGhlIHR3byBmb2xsb3dpbmcgc2NlbmFyaW9zOlxuICAgIC8vIDEuIFNlc3Npb24gd2l0aCBub24gdGVybWluYWwgc3RhdHVzIGFuZCAwIGVycm9ycyArIGFuIGVycm9yIG9jY3VycmVkIC0+IFdpbGwgc2V0IGVycm9yIGNvdW50IHRvIDEgYW5kIHNlbmQgdXBkYXRlXG4gICAgLy8gMi4gU2Vzc2lvbiB3aXRoIG5vbiB0ZXJtaW5hbCBzdGF0dXMgYW5kIDEgZXJyb3IgKyBhIGNyYXNoIG9jY3VycmVkIC0+IFdpbGwgc2V0IHN0YXR1cyBjcmFzaGVkIGFuZCBzZW5kIHVwZGF0ZVxuICAgIGNvbnN0IHNlc3Npb25Ob25UZXJtaW5hbCA9IHNlc3Npb24uc3RhdHVzID09PSBTZXNzaW9uU3RhdHVzLk9rO1xuICAgIGNvbnN0IHNob3VsZFVwZGF0ZUFuZFNlbmQgPSAoc2Vzc2lvbk5vblRlcm1pbmFsICYmIHNlc3Npb24uZXJyb3JzID09PSAwKSB8fCAoc2Vzc2lvbk5vblRlcm1pbmFsICYmIGNyYXNoZWQpO1xuXG4gICAgaWYgKHNob3VsZFVwZGF0ZUFuZFNlbmQpIHtcbiAgICAgIHNlc3Npb24udXBkYXRlKHtcbiAgICAgICAgLi4uKGNyYXNoZWQgJiYgeyBzdGF0dXM6IFNlc3Npb25TdGF0dXMuQ3Jhc2hlZCB9KSxcbiAgICAgICAgZXJyb3JzOiBzZXNzaW9uLmVycm9ycyB8fCBOdW1iZXIoZXJyb3JlZCB8fCBjcmFzaGVkKSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jYXB0dXJlU2Vzc2lvbihzZXNzaW9uKTtcbiAgICB9XG4gIH1cblxuICAvKiogRGVsaXZlciBjYXB0dXJlZCBzZXNzaW9uIHRvIFNlbnRyeSAqL1xuICBwcm90ZWN0ZWQgX3NlbmRTZXNzaW9uKHNlc3Npb246IFNlc3Npb24pOiB2b2lkIHtcbiAgICB0aGlzLl9nZXRCYWNrZW5kKCkuc2VuZFNlc3Npb24oc2Vzc2lvbik7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lIGlmIHRoZSBjbGllbnQgaXMgZmluaXNoZWQgcHJvY2Vzc2luZy4gUmV0dXJucyBhIHByb21pc2UgYmVjYXVzZSBpdCB3aWxsIHdhaXQgYHRpbWVvdXRgIG1zIGJlZm9yZSBzYXlpbmdcbiAgICogXCJub1wiIChyZXNvbHZpbmcgdG8gYGZhbHNlYCkgaW4gb3JkZXIgdG8gZ2l2ZSB0aGUgY2xpZW50IGEgY2hhbmNlIHRvIHBvdGVudGlhbGx5IGZpbmlzaCBmaXJzdC5cbiAgICpcbiAgICogQHBhcmFtIHRpbWVvdXQgVGhlIHRpbWUsIGluIG1zLCBhZnRlciB3aGljaCB0byByZXNvbHZlIHRvIGBmYWxzZWAgaWYgdGhlIGNsaWVudCBpcyBzdGlsbCBidXN5LiBQYXNzaW5nIGAwYCAob3Igbm90XG4gICAqIHBhc3NpbmcgYW55dGhpbmcpIHdpbGwgbWFrZSB0aGUgcHJvbWlzZSB3YWl0IGFzIGxvbmcgYXMgaXQgdGFrZXMgZm9yIHByb2Nlc3NpbmcgdG8gZmluaXNoIGJlZm9yZSByZXNvbHZpbmcgdG9cbiAgICogYHRydWVgLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2Ugd2hpY2ggd2lsbCByZXNvbHZlIHRvIGB0cnVlYCBpZiBwcm9jZXNzaW5nIGlzIGFscmVhZHkgZG9uZSBvciBmaW5pc2hlcyBiZWZvcmUgdGhlIHRpbWVvdXQsIGFuZFxuICAgKiBgZmFsc2VgIG90aGVyd2lzZVxuICAgKi9cbiAgcHJvdGVjdGVkIF9pc0NsaWVudERvbmVQcm9jZXNzaW5nKHRpbWVvdXQ/OiBudW1iZXIpOiBQcm9taXNlTGlrZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZShyZXNvbHZlID0+IHtcbiAgICAgIGxldCB0aWNrZWQ6IG51bWJlciA9IDA7XG4gICAgICBjb25zdCB0aWNrOiBudW1iZXIgPSAxO1xuXG4gICAgICBjb25zdCBpbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX251bVByb2Nlc3NpbmcgPT0gMCkge1xuICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGlja2VkICs9IHRpY2s7XG4gICAgICAgICAgaWYgKHRpbWVvdXQgJiYgdGlja2VkID49IHRpbWVvdXQpIHtcbiAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwoaW50ZXJ2YWwpO1xuICAgICAgICAgICAgcmVzb2x2ZShmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9LCB0aWNrKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRoZSBjdXJyZW50IGJhY2tlbmQuICovXG4gIHByb3RlY3RlZCBfZ2V0QmFja2VuZCgpOiBCIHtcbiAgICByZXR1cm4gdGhpcy5fYmFja2VuZDtcbiAgfVxuXG4gIC8qKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhpcyBTREsgaXMgZW5hYmxlZCBhbmQgYSB2YWxpZCBEc24gaXMgcHJlc2VudC4gKi9cbiAgcHJvdGVjdGVkIF9pc0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9ucygpLmVuYWJsZWQgIT09IGZhbHNlICYmIHRoaXMuX2RzbiAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgY29tbW9uIGluZm9ybWF0aW9uIHRvIGV2ZW50cy5cbiAgICpcbiAgICogVGhlIGluZm9ybWF0aW9uIGluY2x1ZGVzIHJlbGVhc2UgYW5kIGVudmlyb25tZW50IGZyb20gYG9wdGlvbnNgLFxuICAgKiBicmVhZGNydW1icyBhbmQgY29udGV4dCAoZXh0cmEsIHRhZ3MgYW5kIHVzZXIpIGZyb20gdGhlIHNjb3BlLlxuICAgKlxuICAgKiBJbmZvcm1hdGlvbiB0aGF0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGUgZXZlbnQgaXMgbmV2ZXIgb3ZlcndyaXR0ZW4uIEZvclxuICAgKiBuZXN0ZWQgb2JqZWN0cywgc3VjaCBhcyB0aGUgY29udGV4dCwga2V5cyBhcmUgbWVyZ2VkLlxuICAgKlxuICAgKiBAcGFyYW0gZXZlbnQgVGhlIG9yaWdpbmFsIGV2ZW50LlxuICAgKiBAcGFyYW0gaGludCBNYXkgY29udGFpbiBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBvcmlnaW5hbCBleGNlcHRpb24uXG4gICAqIEBwYXJhbSBzY29wZSBBIHNjb3BlIGNvbnRhaW5pbmcgZXZlbnQgbWV0YWRhdGEuXG4gICAqIEByZXR1cm5zIEEgbmV3IGV2ZW50IHdpdGggbW9yZSBpbmZvcm1hdGlvbi5cbiAgICovXG4gIHByb3RlY3RlZCBfcHJlcGFyZUV2ZW50KGV2ZW50OiBFdmVudCwgc2NvcGU/OiBTY29wZSwgaGludD86IEV2ZW50SGludCk6IFByb21pc2VMaWtlPEV2ZW50IHwgbnVsbD4ge1xuICAgIGNvbnN0IHsgbm9ybWFsaXplRGVwdGggPSAzIH0gPSB0aGlzLmdldE9wdGlvbnMoKTtcbiAgICBjb25zdCBwcmVwYXJlZDogRXZlbnQgPSB7XG4gICAgICAuLi5ldmVudCxcbiAgICAgIGV2ZW50X2lkOiBldmVudC5ldmVudF9pZCB8fCAoaGludCAmJiBoaW50LmV2ZW50X2lkID8gaGludC5ldmVudF9pZCA6IHV1aWQ0KCkpLFxuICAgICAgdGltZXN0YW1wOiBldmVudC50aW1lc3RhbXAgfHwgZGF0ZVRpbWVzdGFtcEluU2Vjb25kcygpLFxuICAgIH07XG5cbiAgICB0aGlzLl9hcHBseUNsaWVudE9wdGlvbnMocHJlcGFyZWQpO1xuICAgIHRoaXMuX2FwcGx5SW50ZWdyYXRpb25zTWV0YWRhdGEocHJlcGFyZWQpO1xuXG4gICAgLy8gSWYgd2UgaGF2ZSBzY29wZSBnaXZlbiB0byB1cywgdXNlIGl0IGFzIHRoZSBiYXNlIGZvciBmdXJ0aGVyIG1vZGlmaWNhdGlvbnMuXG4gICAgLy8gVGhpcyBhbGxvd3MgdXMgdG8gcHJldmVudCB1bm5lY2Vzc2FyeSBjb3B5aW5nIG9mIGRhdGEgaWYgYGNhcHR1cmVDb250ZXh0YCBpcyBub3QgcHJvdmlkZWQuXG4gICAgbGV0IGZpbmFsU2NvcGUgPSBzY29wZTtcbiAgICBpZiAoaGludCAmJiBoaW50LmNhcHR1cmVDb250ZXh0KSB7XG4gICAgICBmaW5hbFNjb3BlID0gU2NvcGUuY2xvbmUoZmluYWxTY29wZSkudXBkYXRlKGhpbnQuY2FwdHVyZUNvbnRleHQpO1xuICAgIH1cblxuICAgIC8vIFdlIHByZXBhcmUgdGhlIHJlc3VsdCBoZXJlIHdpdGggYSByZXNvbHZlZCBFdmVudC5cbiAgICBsZXQgcmVzdWx0ID0gU3luY1Byb21pc2UucmVzb2x2ZTxFdmVudCB8IG51bGw+KHByZXBhcmVkKTtcblxuICAgIC8vIFRoaXMgc2hvdWxkIGJlIHRoZSBsYXN0IHRoaW5nIGNhbGxlZCwgc2luY2Ugd2Ugd2FudCB0aGF0XG4gICAgLy8ge0BsaW5rIEh1Yi5hZGRFdmVudFByb2Nlc3Nvcn0gZ2V0cyB0aGUgZmluaXNoZWQgcHJlcGFyZWQgZXZlbnQuXG4gICAgaWYgKGZpbmFsU2NvcGUpIHtcbiAgICAgIC8vIEluIGNhc2Ugd2UgaGF2ZSBhIGh1YiB3ZSByZWFzc2lnbiBpdC5cbiAgICAgIHJlc3VsdCA9IGZpbmFsU2NvcGUuYXBwbHlUb0V2ZW50KHByZXBhcmVkLCBoaW50KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0LnRoZW4oZXZ0ID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygbm9ybWFsaXplRGVwdGggPT09ICdudW1iZXInICYmIG5vcm1hbGl6ZURlcHRoID4gMCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbm9ybWFsaXplRXZlbnQoZXZ0LCBub3JtYWxpemVEZXB0aCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZ0O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgYG5vcm1hbGl6ZWAgZnVuY3Rpb24gb24gbmVjZXNzYXJ5IGBFdmVudGAgYXR0cmlidXRlcyB0byBtYWtlIHRoZW0gc2FmZSBmb3Igc2VyaWFsaXphdGlvbi5cbiAgICogTm9ybWFsaXplZCBrZXlzOlxuICAgKiAtIGBicmVhZGNydW1icy5kYXRhYFxuICAgKiAtIGB1c2VyYFxuICAgKiAtIGBjb250ZXh0c2BcbiAgICogLSBgZXh0cmFgXG4gICAqIEBwYXJhbSBldmVudCBFdmVudFxuICAgKiBAcmV0dXJucyBOb3JtYWxpemVkIGV2ZW50XG4gICAqL1xuICBwcm90ZWN0ZWQgX25vcm1hbGl6ZUV2ZW50KGV2ZW50OiBFdmVudCB8IG51bGwsIGRlcHRoOiBudW1iZXIpOiBFdmVudCB8IG51bGwge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSB7XG4gICAgICAuLi5ldmVudCxcbiAgICAgIC4uLihldmVudC5icmVhZGNydW1icyAmJiB7XG4gICAgICAgIGJyZWFkY3J1bWJzOiBldmVudC5icmVhZGNydW1icy5tYXAoYiA9PiAoe1xuICAgICAgICAgIC4uLmIsXG4gICAgICAgICAgLi4uKGIuZGF0YSAmJiB7XG4gICAgICAgICAgICBkYXRhOiBub3JtYWxpemUoYi5kYXRhLCBkZXB0aCksXG4gICAgICAgICAgfSksXG4gICAgICAgIH0pKSxcbiAgICAgIH0pLFxuICAgICAgLi4uKGV2ZW50LnVzZXIgJiYge1xuICAgICAgICB1c2VyOiBub3JtYWxpemUoZXZlbnQudXNlciwgZGVwdGgpLFxuICAgICAgfSksXG4gICAgICAuLi4oZXZlbnQuY29udGV4dHMgJiYge1xuICAgICAgICBjb250ZXh0czogbm9ybWFsaXplKGV2ZW50LmNvbnRleHRzLCBkZXB0aCksXG4gICAgICB9KSxcbiAgICAgIC4uLihldmVudC5leHRyYSAmJiB7XG4gICAgICAgIGV4dHJhOiBub3JtYWxpemUoZXZlbnQuZXh0cmEsIGRlcHRoKSxcbiAgICAgIH0pLFxuICAgIH07XG4gICAgLy8gZXZlbnQuY29udGV4dHMudHJhY2Ugc3RvcmVzIGluZm9ybWF0aW9uIGFib3V0IGEgVHJhbnNhY3Rpb24uIFNpbWlsYXJseSxcbiAgICAvLyBldmVudC5zcGFuc1tdIHN0b3JlcyBpbmZvcm1hdGlvbiBhYm91dCBjaGlsZCBTcGFucy4gR2l2ZW4gdGhhdCBhXG4gICAgLy8gVHJhbnNhY3Rpb24gaXMgY29uY2VwdHVhbGx5IGEgU3Bhbiwgbm9ybWFsaXphdGlvbiBzaG91bGQgYXBwbHkgdG8gYm90aFxuICAgIC8vIFRyYW5zYWN0aW9ucyBhbmQgU3BhbnMgY29uc2lzdGVudGx5LlxuICAgIC8vIEZvciBub3cgdGhlIGRlY2lzaW9uIGlzIHRvIHNraXAgbm9ybWFsaXphdGlvbiBvZiBUcmFuc2FjdGlvbnMgYW5kIFNwYW5zLFxuICAgIC8vIHNvIHRoaXMgYmxvY2sgb3ZlcndyaXRlcyB0aGUgbm9ybWFsaXplZCBldmVudCB0byBhZGQgYmFjayB0aGUgb3JpZ2luYWxcbiAgICAvLyBUcmFuc2FjdGlvbiBpbmZvcm1hdGlvbiBwcmlvciB0byBub3JtYWxpemF0aW9uLlxuICAgIGlmIChldmVudC5jb250ZXh0cyAmJiBldmVudC5jb250ZXh0cy50cmFjZSkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgbm9ybWFsaXplZC5jb250ZXh0cy50cmFjZSA9IGV2ZW50LmNvbnRleHRzLnRyYWNlO1xuICAgIH1cblxuICAgIGNvbnN0IHsgX2V4cGVyaW1lbnRzID0ge30gfSA9IHRoaXMuZ2V0T3B0aW9ucygpO1xuICAgIGlmIChfZXhwZXJpbWVudHMuZW5zdXJlTm9DaXJjdWxhclN0cnVjdHVyZXMpIHtcbiAgICAgIHJldHVybiBub3JtYWxpemUobm9ybWFsaXplZCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gIH1cblxuICAvKipcbiAgICogIEVuaGFuY2VzIGV2ZW50IHVzaW5nIHRoZSBjbGllbnQgY29uZmlndXJhdGlvbi5cbiAgICogIEl0IHRha2VzIGNhcmUgb2YgYWxsIFwic3RhdGljXCIgdmFsdWVzIGxpa2UgZW52aXJvbm1lbnQsIHJlbGVhc2UgYW5kIGBkaXN0YCxcbiAgICogIGFzIHdlbGwgYXMgdHJ1bmNhdGluZyBvdmVybHkgbG9uZyB2YWx1ZXMuXG4gICAqIEBwYXJhbSBldmVudCBldmVudCBpbnN0YW5jZSB0byBiZSBlbmhhbmNlZFxuICAgKi9cbiAgcHJvdGVjdGVkIF9hcHBseUNsaWVudE9wdGlvbnMoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0T3B0aW9ucygpO1xuICAgIGNvbnN0IHsgZW52aXJvbm1lbnQsIHJlbGVhc2UsIGRpc3QsIG1heFZhbHVlTGVuZ3RoID0gMjUwIH0gPSBvcHRpb25zO1xuXG4gICAgaWYgKCEoJ2Vudmlyb25tZW50JyBpbiBldmVudCkpIHtcbiAgICAgIGV2ZW50LmVudmlyb25tZW50ID0gJ2Vudmlyb25tZW50JyBpbiBvcHRpb25zID8gZW52aXJvbm1lbnQgOiAncHJvZHVjdGlvbic7XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnJlbGVhc2UgPT09IHVuZGVmaW5lZCAmJiByZWxlYXNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGV2ZW50LnJlbGVhc2UgPSByZWxlYXNlO1xuICAgIH1cblxuICAgIGlmIChldmVudC5kaXN0ID09PSB1bmRlZmluZWQgJiYgZGlzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBldmVudC5kaXN0ID0gZGlzdDtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQubWVzc2FnZSkge1xuICAgICAgZXZlbnQubWVzc2FnZSA9IHRydW5jYXRlKGV2ZW50Lm1lc3NhZ2UsIG1heFZhbHVlTGVuZ3RoKTtcbiAgICB9XG5cbiAgICBjb25zdCBleGNlcHRpb24gPSBldmVudC5leGNlcHRpb24gJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyAmJiBldmVudC5leGNlcHRpb24udmFsdWVzWzBdO1xuICAgIGlmIChleGNlcHRpb24gJiYgZXhjZXB0aW9uLnZhbHVlKSB7XG4gICAgICBleGNlcHRpb24udmFsdWUgPSB0cnVuY2F0ZShleGNlcHRpb24udmFsdWUsIG1heFZhbHVlTGVuZ3RoKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gZXZlbnQucmVxdWVzdDtcbiAgICBpZiAocmVxdWVzdCAmJiByZXF1ZXN0LnVybCkge1xuICAgICAgcmVxdWVzdC51cmwgPSB0cnVuY2F0ZShyZXF1ZXN0LnVybCwgbWF4VmFsdWVMZW5ndGgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIGFkZHMgYWxsIHVzZWQgaW50ZWdyYXRpb25zIHRvIHRoZSBTREsgaW5mbyBpbiB0aGUgZXZlbnQuXG4gICAqIEBwYXJhbSBldmVudCBUaGUgZXZlbnQgdGhhdCB3aWxsIGJlIGZpbGxlZCB3aXRoIGFsbCBpbnRlZ3JhdGlvbnMuXG4gICAqL1xuICBwcm90ZWN0ZWQgX2FwcGx5SW50ZWdyYXRpb25zTWV0YWRhdGEoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgaW50ZWdyYXRpb25zQXJyYXkgPSBPYmplY3Qua2V5cyh0aGlzLl9pbnRlZ3JhdGlvbnMpO1xuICAgIGlmIChpbnRlZ3JhdGlvbnNBcnJheS5sZW5ndGggPiAwKSB7XG4gICAgICBldmVudC5zZGsgPSBldmVudC5zZGsgfHwge307XG4gICAgICBldmVudC5zZGsuaW50ZWdyYXRpb25zID0gWy4uLihldmVudC5zZGsuaW50ZWdyYXRpb25zIHx8IFtdKSwgLi4uaW50ZWdyYXRpb25zQXJyYXldO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUZWxscyB0aGUgYmFja2VuZCB0byBzZW5kIHRoaXMgZXZlbnRcbiAgICogQHBhcmFtIGV2ZW50IFRoZSBTZW50cnkgZXZlbnQgdG8gc2VuZFxuICAgKi9cbiAgcHJvdGVjdGVkIF9zZW5kRXZlbnQoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5fZ2V0QmFja2VuZCgpLnNlbmRFdmVudChldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2Vzc2VzIHRoZSBldmVudCBhbmQgbG9ncyBhbiBlcnJvciBpbiBjYXNlIG9mIHJlamVjdGlvblxuICAgKiBAcGFyYW0gZXZlbnRcbiAgICogQHBhcmFtIGhpbnRcbiAgICogQHBhcmFtIHNjb3BlXG4gICAqL1xuICBwcm90ZWN0ZWQgX2NhcHR1cmVFdmVudChldmVudDogRXZlbnQsIGhpbnQ/OiBFdmVudEhpbnQsIHNjb3BlPzogU2NvcGUpOiBQcm9taXNlTGlrZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gdGhpcy5fcHJvY2Vzc0V2ZW50KGV2ZW50LCBoaW50LCBzY29wZSkudGhlbihcbiAgICAgIGZpbmFsRXZlbnQgPT4ge1xuICAgICAgICByZXR1cm4gZmluYWxFdmVudC5ldmVudF9pZDtcbiAgICAgIH0sXG4gICAgICByZWFzb24gPT4ge1xuICAgICAgICBsb2dnZXIuZXJyb3IocmVhc29uKTtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzZXMgYW4gZXZlbnQgKGVpdGhlciBlcnJvciBvciBtZXNzYWdlKSBhbmQgc2VuZHMgaXQgdG8gU2VudHJ5LlxuICAgKlxuICAgKiBUaGlzIGFsc28gYWRkcyBicmVhZGNydW1icyBhbmQgY29udGV4dCBpbmZvcm1hdGlvbiB0byB0aGUgZXZlbnQuIEhvd2V2ZXIsXG4gICAqIHBsYXRmb3JtIHNwZWNpZmljIG1ldGEgZGF0YSAoc3VjaCBhcyB0aGUgVXNlcidzIElQIGFkZHJlc3MpIG11c3QgYmUgYWRkZWRcbiAgICogYnkgdGhlIFNESyBpbXBsZW1lbnRvci5cbiAgICpcbiAgICpcbiAgICogQHBhcmFtIGV2ZW50IFRoZSBldmVudCB0byBzZW5kIHRvIFNlbnRyeS5cbiAgICogQHBhcmFtIGhpbnQgTWF5IGNvbnRhaW4gYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgb3JpZ2luYWwgZXhjZXB0aW9uLlxuICAgKiBAcGFyYW0gc2NvcGUgQSBzY29wZSBjb250YWluaW5nIGV2ZW50IG1ldGFkYXRhLlxuICAgKiBAcmV0dXJucyBBIFN5bmNQcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2l0aCB0aGUgZXZlbnQgb3IgcmVqZWN0cyBpbiBjYXNlIGV2ZW50IHdhcy93aWxsIG5vdCBiZSBzZW5kLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9wcm9jZXNzRXZlbnQoZXZlbnQ6IEV2ZW50LCBoaW50PzogRXZlbnRIaW50LCBzY29wZT86IFNjb3BlKTogUHJvbWlzZUxpa2U8RXZlbnQ+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgY29uc3QgeyBiZWZvcmVTZW5kLCBzYW1wbGVSYXRlIH0gPSB0aGlzLmdldE9wdGlvbnMoKTtcbiAgICBjb25zdCB0cmFuc3BvcnQgPSB0aGlzLmdldFRyYW5zcG9ydCgpO1xuXG4gICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQoKSkge1xuICAgICAgcmV0dXJuIFN5bmNQcm9taXNlLnJlamVjdChuZXcgU2VudHJ5RXJyb3IoJ1NESyBub3QgZW5hYmxlZCwgd2lsbCBub3QgY2FwdHVyZSBldmVudC4nKSk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNUcmFuc2FjdGlvbiA9IGV2ZW50LnR5cGUgPT09ICd0cmFuc2FjdGlvbic7XG4gICAgLy8gMS4wID09PSAxMDAlIGV2ZW50cyBhcmUgc2VudFxuICAgIC8vIDAuMCA9PT0gMCUgZXZlbnRzIGFyZSBzZW50XG4gICAgLy8gU2FtcGxpbmcgZm9yIHRyYW5zYWN0aW9uIGhhcHBlbnMgc29tZXdoZXJlIGVsc2VcbiAgICBpZiAoIWlzVHJhbnNhY3Rpb24gJiYgdHlwZW9mIHNhbXBsZVJhdGUgPT09ICdudW1iZXInICYmIE1hdGgucmFuZG9tKCkgPiBzYW1wbGVSYXRlKSB7XG4gICAgICB0cmFuc3BvcnQucmVjb3JkTG9zdEV2ZW50Py4oT3V0Y29tZS5TYW1wbGVSYXRlLCAnZXZlbnQnKTtcbiAgICAgIHJldHVybiBTeW5jUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBTZW50cnlFcnJvcihcbiAgICAgICAgICBgRGlzY2FyZGluZyBldmVudCBiZWNhdXNlIGl0J3Mgbm90IGluY2x1ZGVkIGluIHRoZSByYW5kb20gc2FtcGxlIChzYW1wbGluZyByYXRlID0gJHtzYW1wbGVSYXRlfSlgLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fcHJlcGFyZUV2ZW50KGV2ZW50LCBzY29wZSwgaGludClcbiAgICAgIC50aGVuKHByZXBhcmVkID0+IHtcbiAgICAgICAgaWYgKHByZXBhcmVkID09PSBudWxsKSB7XG4gICAgICAgICAgdHJhbnNwb3J0LnJlY29yZExvc3RFdmVudD8uKE91dGNvbWUuRXZlbnRQcm9jZXNzb3IsIGV2ZW50LnR5cGUgfHwgJ2V2ZW50Jyk7XG4gICAgICAgICAgdGhyb3cgbmV3IFNlbnRyeUVycm9yKCdBbiBldmVudCBwcm9jZXNzb3IgcmV0dXJuZWQgbnVsbCwgd2lsbCBub3Qgc2VuZCBldmVudC4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGlzSW50ZXJuYWxFeGNlcHRpb24gPSBoaW50ICYmIGhpbnQuZGF0YSAmJiAoaGludC5kYXRhIGFzIHsgX19zZW50cnlfXzogYm9vbGVhbiB9KS5fX3NlbnRyeV9fID09PSB0cnVlO1xuICAgICAgICBpZiAoaXNJbnRlcm5hbEV4Y2VwdGlvbiB8fCBpc1RyYW5zYWN0aW9uIHx8ICFiZWZvcmVTZW5kKSB7XG4gICAgICAgICAgcmV0dXJuIHByZXBhcmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYmVmb3JlU2VuZFJlc3VsdCA9IGJlZm9yZVNlbmQocHJlcGFyZWQsIGhpbnQpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5zdXJlQmVmb3JlU2VuZFJ2KGJlZm9yZVNlbmRSZXN1bHQpO1xuICAgICAgfSlcbiAgICAgIC50aGVuKHByb2Nlc3NlZEV2ZW50ID0+IHtcbiAgICAgICAgaWYgKHByb2Nlc3NlZEV2ZW50ID09PSBudWxsKSB7XG4gICAgICAgICAgdHJhbnNwb3J0LnJlY29yZExvc3RFdmVudD8uKE91dGNvbWUuQmVmb3JlU2VuZCwgZXZlbnQudHlwZSB8fCAnZXZlbnQnKTtcbiAgICAgICAgICB0aHJvdyBuZXcgU2VudHJ5RXJyb3IoJ2BiZWZvcmVTZW5kYCByZXR1cm5lZCBgbnVsbGAsIHdpbGwgbm90IHNlbmQgZXZlbnQuJyk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBzZXNzaW9uID0gc2NvcGUgJiYgc2NvcGUuZ2V0U2Vzc2lvbiAmJiBzY29wZS5nZXRTZXNzaW9uKCk7XG4gICAgICAgIGlmICghaXNUcmFuc2FjdGlvbiAmJiBzZXNzaW9uKSB7XG4gICAgICAgICAgdGhpcy5fdXBkYXRlU2Vzc2lvbkZyb21FdmVudChzZXNzaW9uLCBwcm9jZXNzZWRFdmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9zZW5kRXZlbnQocHJvY2Vzc2VkRXZlbnQpO1xuICAgICAgICByZXR1cm4gcHJvY2Vzc2VkRXZlbnQ7XG4gICAgICB9KVxuICAgICAgLnRoZW4obnVsbCwgcmVhc29uID0+IHtcbiAgICAgICAgaWYgKHJlYXNvbiBpbnN0YW5jZW9mIFNlbnRyeUVycm9yKSB7XG4gICAgICAgICAgdGhyb3cgcmVhc29uO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jYXB0dXJlRXhjZXB0aW9uKHJlYXNvbiwge1xuICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIF9fc2VudHJ5X186IHRydWUsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBvcmlnaW5hbEV4Y2VwdGlvbjogcmVhc29uIGFzIEVycm9yLFxuICAgICAgICB9KTtcbiAgICAgICAgdGhyb3cgbmV3IFNlbnRyeUVycm9yKFxuICAgICAgICAgIGBFdmVudCBwcm9jZXNzaW5nIHBpcGVsaW5lIHRocmV3IGFuIGVycm9yLCBvcmlnaW5hbCBldmVudCB3aWxsIG5vdCBiZSBzZW50LiBEZXRhaWxzIGhhdmUgYmVlbiBzZW50IGFzIGEgbmV3IGV2ZW50LlxcblJlYXNvbjogJHtyZWFzb259YCxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE9jY3VwaWVzIHRoZSBjbGllbnQgd2l0aCBwcm9jZXNzaW5nIGFuZCBldmVudFxuICAgKi9cbiAgcHJvdGVjdGVkIF9wcm9jZXNzPFQ+KHByb21pc2U6IFByb21pc2VMaWtlPFQ+KTogdm9pZCB7XG4gICAgdGhpcy5fbnVtUHJvY2Vzc2luZyArPSAxO1xuICAgIHZvaWQgcHJvbWlzZS50aGVuKFxuICAgICAgdmFsdWUgPT4ge1xuICAgICAgICB0aGlzLl9udW1Qcm9jZXNzaW5nIC09IDE7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgIH0sXG4gICAgICByZWFzb24gPT4ge1xuICAgICAgICB0aGlzLl9udW1Qcm9jZXNzaW5nIC09IDE7XG4gICAgICAgIHJldHVybiByZWFzb247XG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgdGhhdCByZXR1cm4gdmFsdWUgb2YgY29uZmlndXJlZCBgYmVmb3JlU2VuZGAgaXMgb2YgZXhwZWN0ZWQgdHlwZS5cbiAgICovXG4gIHByb3RlY3RlZCBfZW5zdXJlQmVmb3JlU2VuZFJ2KFxuICAgIHJ2OiBQcm9taXNlTGlrZTxFdmVudCB8IG51bGw+IHwgRXZlbnQgfCBudWxsLFxuICApOiBQcm9taXNlTGlrZTxFdmVudCB8IG51bGw+IHwgRXZlbnQgfCBudWxsIHtcbiAgICBjb25zdCBudWxsRXJyID0gJ2BiZWZvcmVTZW5kYCBtZXRob2QgaGFzIHRvIHJldHVybiBgbnVsbGAgb3IgYSB2YWxpZCBldmVudC4nO1xuICAgIGlmIChpc1RoZW5hYmxlKHJ2KSkge1xuICAgICAgcmV0dXJuIChydiBhcyBQcm9taXNlTGlrZTxFdmVudCB8IG51bGw+KS50aGVuKFxuICAgICAgICBldmVudCA9PiB7XG4gICAgICAgICAgaWYgKCEoaXNQbGFpbk9iamVjdChldmVudCkgfHwgZXZlbnQgPT09IG51bGwpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgU2VudHJ5RXJyb3IobnVsbEVycik7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBldmVudDtcbiAgICAgICAgfSxcbiAgICAgICAgZSA9PiB7XG4gICAgICAgICAgdGhyb3cgbmV3IFNlbnRyeUVycm9yKGBiZWZvcmVTZW5kIHJlamVjdGVkIHdpdGggJHtlfWApO1xuICAgICAgICB9LFxuICAgICAgKTtcbiAgICB9IGVsc2UgaWYgKCEoaXNQbGFpbk9iamVjdChydikgfHwgcnYgPT09IG51bGwpKSB7XG4gICAgICB0aHJvdyBuZXcgU2VudHJ5RXJyb3IobnVsbEVycik7XG4gICAgfVxuICAgIHJldHVybiBydjtcbiAgfVxufVxuIiwgImltcG9ydCB7IEV2ZW50LCBSZXNwb25zZSwgU3RhdHVzLCBUcmFuc3BvcnQgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IFN5bmNQcm9taXNlIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbi8qKiBOb29wIHRyYW5zcG9ydCAqL1xuZXhwb3J0IGNsYXNzIE5vb3BUcmFuc3BvcnQgaW1wbGVtZW50cyBUcmFuc3BvcnQge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZW5kRXZlbnQoXzogRXZlbnQpOiBQcm9taXNlTGlrZTxSZXNwb25zZT4ge1xuICAgIHJldHVybiBTeW5jUHJvbWlzZS5yZXNvbHZlKHtcbiAgICAgIHJlYXNvbjogYE5vb3BUcmFuc3BvcnQ6IEV2ZW50IGhhcyBiZWVuIHNraXBwZWQgYmVjYXVzZSBubyBEc24gaXMgY29uZmlndXJlZC5gLFxuICAgICAgc3RhdHVzOiBTdGF0dXMuU2tpcHBlZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNsb3NlKF8/OiBudW1iZXIpOiBQcm9taXNlTGlrZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIFN5bmNQcm9taXNlLnJlc29sdmUodHJ1ZSk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBFdmVudCwgRXZlbnRIaW50LCBPcHRpb25zLCBTZXNzaW9uLCBTZXZlcml0eSwgVHJhbnNwb3J0IH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBsb2dnZXIsIFNlbnRyeUVycm9yIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmltcG9ydCB7IE5vb3BUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydHMvbm9vcCc7XG5cbi8qKlxuICogSW50ZXJuYWwgcGxhdGZvcm0tZGVwZW5kZW50IFNlbnRyeSBTREsgQmFja2VuZC5cbiAqXG4gKiBXaGlsZSB7QGxpbmsgQ2xpZW50fSBjb250YWlucyBidXNpbmVzcyBsb2dpYyBzcGVjaWZpYyB0byBhbiBTREssIHRoZVxuICogQmFja2VuZCBvZmZlcnMgcGxhdGZvcm0gc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIGZvciBsb3ctbGV2ZWwgb3BlcmF0aW9ucy5cbiAqIFRoZXNlIGFyZSBwZXJzaXN0aW5nIGFuZCBsb2FkaW5nIGluZm9ybWF0aW9uLCBzZW5kaW5nIGV2ZW50cywgYW5kIGhvb2tpbmdcbiAqIGludG8gdGhlIGVudmlyb25tZW50LlxuICpcbiAqIEJhY2tlbmRzIHJlY2VpdmUgYSBoYW5kbGUgdG8gdGhlIENsaWVudCBpbiB0aGVpciBjb25zdHJ1Y3Rvci4gV2hlbiBhXG4gKiBCYWNrZW5kIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVzIGV2ZW50cywgaXQgbXVzdCBwYXNzIHRoZW0gdG9cbiAqIHRoZSBDbGllbnQgZm9yIHZhbGlkYXRpb24gYW5kIHByb2Nlc3NpbmcgZmlyc3QuXG4gKlxuICogVXN1YWxseSwgdGhlIENsaWVudCB3aWxsIGJlIG9mIGNvcnJlc3BvbmRpbmcgdHlwZSwgZS5nLiBOb2RlQmFja2VuZFxuICogcmVjZWl2ZXMgTm9kZUNsaWVudC4gSG93ZXZlciwgaGlnaGVyLWxldmVsIFNES3MgY2FuIGNob29zZSB0byBpbnN0YW50aWF0ZVxuICogbXVsdGlwbGUgQmFja2VuZHMgYW5kIGRlbGVnYXRlIHRhc2tzIGJldHdlZW4gdGhlbS4gSW4gdGhpcyBjYXNlLCBhbiBldmVudFxuICogZ2VuZXJhdGVkIGJ5IG9uZSBiYWNrZW5kIG1pZ2h0IHZlcnkgd2VsbCBiZSBzZW50IGJ5IGFub3RoZXIgb25lLlxuICpcbiAqIFRoZSBjbGllbnQgYWxzbyBwcm92aWRlcyBhY2Nlc3MgdG8gb3B0aW9ucyB2aWEge0BsaW5rIENsaWVudC5nZXRPcHRpb25zfS5cbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCYWNrZW5kIHtcbiAgLyoqIENyZWF0ZXMgYSB7QGxpbmsgRXZlbnR9IGZyb20gYW4gZXhjZXB0aW9uLiAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBldmVudEZyb21FeGNlcHRpb24oZXhjZXB0aW9uOiBhbnksIGhpbnQ/OiBFdmVudEhpbnQpOiBQcm9taXNlTGlrZTxFdmVudD47XG5cbiAgLyoqIENyZWF0ZXMgYSB7QGxpbmsgRXZlbnR9IGZyb20gYSBwbGFpbiBtZXNzYWdlLiAqL1xuICBldmVudEZyb21NZXNzYWdlKG1lc3NhZ2U6IHN0cmluZywgbGV2ZWw/OiBTZXZlcml0eSwgaGludD86IEV2ZW50SGludCk6IFByb21pc2VMaWtlPEV2ZW50PjtcblxuICAvKiogU3VibWl0cyB0aGUgZXZlbnQgdG8gU2VudHJ5ICovXG4gIHNlbmRFdmVudChldmVudDogRXZlbnQpOiB2b2lkO1xuXG4gIC8qKiBTdWJtaXRzIHRoZSBzZXNzaW9uIHRvIFNlbnRyeSAqL1xuICBzZW5kU2Vzc2lvbihzZXNzaW9uOiBTZXNzaW9uKTogdm9pZDtcblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgdHJhbnNwb3J0IHRoYXQgaXMgdXNlZCBieSB0aGUgYmFja2VuZC5cbiAgICogUGxlYXNlIG5vdGUgdGhhdCB0aGUgdHJhbnNwb3J0IGdldHMgbGF6eSBpbml0aWFsaXplZCBzbyBpdCB3aWxsIG9ubHkgYmUgdGhlcmUgb25jZSB0aGUgZmlyc3QgZXZlbnQgaGFzIGJlZW4gc2VudC5cbiAgICpcbiAgICogQHJldHVybnMgVGhlIHRyYW5zcG9ydC5cbiAgICovXG4gIGdldFRyYW5zcG9ydCgpOiBUcmFuc3BvcnQ7XG59XG5cbi8qKlxuICogQSBjbGFzcyBvYmplY3QgdGhhdCBjYW4gaW5zdGFudGlhdGUgQmFja2VuZCBvYmplY3RzLlxuICogQGhpZGRlblxuICovXG5leHBvcnQgdHlwZSBCYWNrZW5kQ2xhc3M8QiBleHRlbmRzIEJhY2tlbmQsIE8gZXh0ZW5kcyBPcHRpb25zPiA9IG5ldyAob3B0aW9uczogTykgPT4gQjtcblxuLyoqXG4gKiBUaGlzIGlzIHRoZSBiYXNlIGltcGxlbWVudGlvbiBvZiBhIEJhY2tlbmQuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlQmFja2VuZDxPIGV4dGVuZHMgT3B0aW9ucz4gaW1wbGVtZW50cyBCYWNrZW5kIHtcbiAgLyoqIE9wdGlvbnMgcGFzc2VkIHRvIHRoZSBTREsuICovXG4gIHByb3RlY3RlZCByZWFkb25seSBfb3B0aW9uczogTztcblxuICAvKiogQ2FjaGVkIHRyYW5zcG9ydCB1c2VkIGludGVybmFsbHkuICovXG4gIHByb3RlY3RlZCBfdHJhbnNwb3J0OiBUcmFuc3BvcnQ7XG5cbiAgLyoqIENyZWF0ZXMgYSBuZXcgYmFja2VuZCBpbnN0YW5jZS4gKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE8pIHtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgICBpZiAoIXRoaXMuX29wdGlvbnMuZHNuKSB7XG4gICAgICBsb2dnZXIud2FybignTm8gRFNOIHByb3ZpZGVkLCBiYWNrZW5kIHdpbGwgbm90IGRvIGFueXRoaW5nLicpO1xuICAgIH1cbiAgICB0aGlzLl90cmFuc3BvcnQgPSB0aGlzLl9zZXR1cFRyYW5zcG9ydCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xuICBwdWJsaWMgZXZlbnRGcm9tRXhjZXB0aW9uKF9leGNlcHRpb246IGFueSwgX2hpbnQ/OiBFdmVudEhpbnQpOiBQcm9taXNlTGlrZTxFdmVudD4ge1xuICAgIHRocm93IG5ldyBTZW50cnlFcnJvcignQmFja2VuZCBoYXMgdG8gaW1wbGVtZW50IGBldmVudEZyb21FeGNlcHRpb25gIG1ldGhvZCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgZXZlbnRGcm9tTWVzc2FnZShfbWVzc2FnZTogc3RyaW5nLCBfbGV2ZWw/OiBTZXZlcml0eSwgX2hpbnQ/OiBFdmVudEhpbnQpOiBQcm9taXNlTGlrZTxFdmVudD4ge1xuICAgIHRocm93IG5ldyBTZW50cnlFcnJvcignQmFja2VuZCBoYXMgdG8gaW1wbGVtZW50IGBldmVudEZyb21NZXNzYWdlYCBtZXRob2QnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNlbmRFdmVudChldmVudDogRXZlbnQpOiB2b2lkIHtcbiAgICB2b2lkIHRoaXMuX3RyYW5zcG9ydC5zZW5kRXZlbnQoZXZlbnQpLnRoZW4obnVsbCwgcmVhc29uID0+IHtcbiAgICAgIGxvZ2dlci5lcnJvcihgRXJyb3Igd2hpbGUgc2VuZGluZyBldmVudDogJHtyZWFzb259YCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZW5kU2Vzc2lvbihzZXNzaW9uOiBTZXNzaW9uKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl90cmFuc3BvcnQuc2VuZFNlc3Npb24pIHtcbiAgICAgIGxvZ2dlci53YXJuKFwiRHJvcHBpbmcgc2Vzc2lvbiBiZWNhdXNlIGN1c3RvbSB0cmFuc3BvcnQgZG9lc24ndCBpbXBsZW1lbnQgc2VuZFNlc3Npb25cIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdm9pZCB0aGlzLl90cmFuc3BvcnQuc2VuZFNlc3Npb24oc2Vzc2lvbikudGhlbihudWxsLCByZWFzb24gPT4ge1xuICAgICAgbG9nZ2VyLmVycm9yKGBFcnJvciB3aGlsZSBzZW5kaW5nIHNlc3Npb246ICR7cmVhc29ufWApO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgZ2V0VHJhbnNwb3J0KCk6IFRyYW5zcG9ydCB7XG4gICAgcmV0dXJuIHRoaXMuX3RyYW5zcG9ydDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIHRoZSB0cmFuc3BvcnQgc28gaXQgY2FuIGJlIHVzZWQgbGF0ZXIgdG8gc2VuZCByZXF1ZXN0cy5cbiAgICovXG4gIHByb3RlY3RlZCBfc2V0dXBUcmFuc3BvcnQoKTogVHJhbnNwb3J0IHtcbiAgICByZXR1cm4gbmV3IE5vb3BUcmFuc3BvcnQoKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEV2ZW50LCBTZGtJbmZvLCBTZW50cnlSZXF1ZXN0LCBTZW50cnlSZXF1ZXN0VHlwZSwgU2Vzc2lvbiwgU2Vzc2lvbkFnZ3JlZ2F0ZXMgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcblxuaW1wb3J0IHsgQVBJIH0gZnJvbSAnLi9hcGknO1xuXG4vKiogRXh0cmFjdCBzZGsgaW5mbyBmcm9tIGZyb20gdGhlIEFQSSBtZXRhZGF0YSAqL1xuZnVuY3Rpb24gZ2V0U2RrTWV0YWRhdGFGb3JFbnZlbG9wZUhlYWRlcihhcGk6IEFQSSk6IFNka0luZm8gfCB1bmRlZmluZWQge1xuICBpZiAoIWFwaS5tZXRhZGF0YSB8fCAhYXBpLm1ldGFkYXRhLnNkaykge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCB7IG5hbWUsIHZlcnNpb24gfSA9IGFwaS5tZXRhZGF0YS5zZGs7XG4gIHJldHVybiB7IG5hbWUsIHZlcnNpb24gfTtcbn1cblxuLyoqXG4gKiBBcHBseSBTZGtJbmZvIChuYW1lLCB2ZXJzaW9uLCBwYWNrYWdlcywgaW50ZWdyYXRpb25zKSB0byB0aGUgY29ycmVzcG9uZGluZyBldmVudCBrZXkuXG4gKiBNZXJnZSB3aXRoIGV4aXN0aW5nIGRhdGEgaWYgYW55LlxuICoqL1xuZnVuY3Rpb24gZW5oYW5jZUV2ZW50V2l0aFNka0luZm8oZXZlbnQ6IEV2ZW50LCBzZGtJbmZvPzogU2RrSW5mbyk6IEV2ZW50IHtcbiAgaWYgKCFzZGtJbmZvKSB7XG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG4gIGV2ZW50LnNkayA9IGV2ZW50LnNkayB8fCB7fTtcbiAgZXZlbnQuc2RrLm5hbWUgPSBldmVudC5zZGsubmFtZSB8fCBzZGtJbmZvLm5hbWU7XG4gIGV2ZW50LnNkay52ZXJzaW9uID0gZXZlbnQuc2RrLnZlcnNpb24gfHwgc2RrSW5mby52ZXJzaW9uO1xuICBldmVudC5zZGsuaW50ZWdyYXRpb25zID0gWy4uLihldmVudC5zZGsuaW50ZWdyYXRpb25zIHx8IFtdKSwgLi4uKHNka0luZm8uaW50ZWdyYXRpb25zIHx8IFtdKV07XG4gIGV2ZW50LnNkay5wYWNrYWdlcyA9IFsuLi4oZXZlbnQuc2RrLnBhY2thZ2VzIHx8IFtdKSwgLi4uKHNka0luZm8ucGFja2FnZXMgfHwgW10pXTtcbiAgcmV0dXJuIGV2ZW50O1xufVxuXG4vKiogQ3JlYXRlcyBhIFNlbnRyeVJlcXVlc3QgZnJvbSBhIFNlc3Npb24uICovXG5leHBvcnQgZnVuY3Rpb24gc2Vzc2lvblRvU2VudHJ5UmVxdWVzdChzZXNzaW9uOiBTZXNzaW9uIHwgU2Vzc2lvbkFnZ3JlZ2F0ZXMsIGFwaTogQVBJKTogU2VudHJ5UmVxdWVzdCB7XG4gIGNvbnN0IHNka0luZm8gPSBnZXRTZGtNZXRhZGF0YUZvckVudmVsb3BlSGVhZGVyKGFwaSk7XG4gIGNvbnN0IGVudmVsb3BlSGVhZGVycyA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICBzZW50X2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgLi4uKHNka0luZm8gJiYgeyBzZGs6IHNka0luZm8gfSksXG4gICAgLi4uKGFwaS5mb3JjZUVudmVsb3BlKCkgJiYgeyBkc246IGFwaS5nZXREc24oKS50b1N0cmluZygpIH0pLFxuICB9KTtcbiAgLy8gSSBrbm93IHRoaXMgaXMgaGFja3kgYnV0IHdlIGRvbid0IHdhbnQgdG8gYWRkIGBzZXNzaW9uYCB0byByZXF1ZXN0IHR5cGUgc2luY2UgaXQncyBuZXZlciByYXRlIGxpbWl0ZWRcbiAgY29uc3QgdHlwZTogU2VudHJ5UmVxdWVzdFR5cGUgPSAnYWdncmVnYXRlcycgaW4gc2Vzc2lvbiA/ICgnc2Vzc2lvbnMnIGFzIFNlbnRyeVJlcXVlc3RUeXBlKSA6ICdzZXNzaW9uJztcbiAgY29uc3QgaXRlbUhlYWRlcnMgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgdHlwZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBib2R5OiBgJHtlbnZlbG9wZUhlYWRlcnN9XFxuJHtpdGVtSGVhZGVyc31cXG4ke0pTT04uc3RyaW5naWZ5KHNlc3Npb24pfWAsXG4gICAgdHlwZSxcbiAgICB1cmw6IGFwaS5nZXRFbnZlbG9wZUVuZHBvaW50V2l0aFVybEVuY29kZWRBdXRoKCksXG4gIH07XG59XG5cbi8qKiBDcmVhdGVzIGEgU2VudHJ5UmVxdWVzdCBmcm9tIGFuIGV2ZW50LiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV2ZW50VG9TZW50cnlSZXF1ZXN0KGV2ZW50OiBFdmVudCwgYXBpOiBBUEkpOiBTZW50cnlSZXF1ZXN0IHtcbiAgY29uc3Qgc2RrSW5mbyA9IGdldFNka01ldGFkYXRhRm9yRW52ZWxvcGVIZWFkZXIoYXBpKTtcbiAgY29uc3QgZXZlbnRUeXBlID0gZXZlbnQudHlwZSB8fCAnZXZlbnQnO1xuICBjb25zdCB1c2VFbnZlbG9wZSA9IGV2ZW50VHlwZSA9PT0gJ3RyYW5zYWN0aW9uJyB8fCBhcGkuZm9yY2VFbnZlbG9wZSgpO1xuXG4gIGNvbnN0IHsgdHJhbnNhY3Rpb25TYW1wbGluZywgLi4ubWV0YWRhdGEgfSA9IGV2ZW50LmRlYnVnX21ldGEgfHwge307XG4gIGNvbnN0IHsgbWV0aG9kOiBzYW1wbGluZ01ldGhvZCwgcmF0ZTogc2FtcGxlUmF0ZSB9ID0gdHJhbnNhY3Rpb25TYW1wbGluZyB8fCB7fTtcbiAgaWYgKE9iamVjdC5rZXlzKG1ldGFkYXRhKS5sZW5ndGggPT09IDApIHtcbiAgICBkZWxldGUgZXZlbnQuZGVidWdfbWV0YTtcbiAgfSBlbHNlIHtcbiAgICBldmVudC5kZWJ1Z19tZXRhID0gbWV0YWRhdGE7XG4gIH1cblxuICBjb25zdCByZXE6IFNlbnRyeVJlcXVlc3QgPSB7XG4gICAgYm9keTogSlNPTi5zdHJpbmdpZnkoc2RrSW5mbyA/IGVuaGFuY2VFdmVudFdpdGhTZGtJbmZvKGV2ZW50LCBhcGkubWV0YWRhdGEuc2RrKSA6IGV2ZW50KSxcbiAgICB0eXBlOiBldmVudFR5cGUsXG4gICAgdXJsOiB1c2VFbnZlbG9wZSA/IGFwaS5nZXRFbnZlbG9wZUVuZHBvaW50V2l0aFVybEVuY29kZWRBdXRoKCkgOiBhcGkuZ2V0U3RvcmVFbmRwb2ludFdpdGhVcmxFbmNvZGVkQXV0aCgpLFxuICB9O1xuXG4gIC8vIGh0dHBzOi8vZGV2ZWxvcC5zZW50cnkuZGV2L3Nkay9lbnZlbG9wZXMvXG5cbiAgLy8gU2luY2Ugd2UgZG9uJ3QgbmVlZCB0byBtYW5pcHVsYXRlIGVudmVsb3BlcyBub3Igc3RvcmUgdGhlbSwgdGhlcmUgaXMgbm9cbiAgLy8gZXhwb3J0ZWQgY29uY2VwdCBvZiBhbiBFbnZlbG9wZSB3aXRoIG9wZXJhdGlvbnMgaW5jbHVkaW5nIHNlcmlhbGl6YXRpb24gYW5kXG4gIC8vIGRlc2VyaWFsaXphdGlvbi4gSW5zdGVhZCwgd2Ugb25seSBpbXBsZW1lbnQgYSBtaW5pbWFsIHN1YnNldCBvZiB0aGUgc3BlYyB0b1xuICAvLyBzZXJpYWxpemUgZXZlbnRzIGlubGluZSBoZXJlLlxuICBpZiAodXNlRW52ZWxvcGUpIHtcbiAgICBjb25zdCBlbnZlbG9wZUhlYWRlcnMgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBldmVudF9pZDogZXZlbnQuZXZlbnRfaWQsXG4gICAgICBzZW50X2F0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICAuLi4oc2RrSW5mbyAmJiB7IHNkazogc2RrSW5mbyB9KSxcbiAgICAgIC4uLihhcGkuZm9yY2VFbnZlbG9wZSgpICYmIHsgZHNuOiBhcGkuZ2V0RHNuKCkudG9TdHJpbmcoKSB9KSxcbiAgICB9KTtcbiAgICBjb25zdCBpdGVtSGVhZGVycyA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIHR5cGU6IGV2ZW50VHlwZSxcblxuICAgICAgLy8gVE9ETzogUmlnaHQgbm93LCBzYW1wbGVSYXRlIG1heSBvciBtYXkgbm90IGJlIGRlZmluZWQgKGl0IHdvbid0IGJlIGluIHRoZSBjYXNlcyBvZiBpbmhlcml0YW5jZSBhbmRcbiAgICAgIC8vIGV4cGxpY2l0bHktc2V0IHNhbXBsaW5nIGRlY2lzaW9ucykuIEFyZSB3ZSBnb29kIHdpdGggdGhhdD9cbiAgICAgIHNhbXBsZV9yYXRlczogW3sgaWQ6IHNhbXBsaW5nTWV0aG9kLCByYXRlOiBzYW1wbGVSYXRlIH1dLFxuXG4gICAgICAvLyBUaGUgY29udGVudC10eXBlIGlzIGFzc3VtZWQgdG8gYmUgJ2FwcGxpY2F0aW9uL2pzb24nIGFuZCBub3QgcGFydCBvZlxuICAgICAgLy8gdGhlIGN1cnJlbnQgc3BlYyBmb3IgdHJhbnNhY3Rpb24gaXRlbXMsIHNvIHdlIGRvbid0IGJsb2F0IHRoZSByZXF1ZXN0XG4gICAgICAvLyBib2R5IHdpdGggaXQuXG4gICAgICAvL1xuICAgICAgLy8gY29udGVudF90eXBlOiAnYXBwbGljYXRpb24vanNvbicsXG4gICAgICAvL1xuICAgICAgLy8gVGhlIGxlbmd0aCBpcyBvcHRpb25hbC4gSXQgbXVzdCBiZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHJlcS5Cb2R5XG4gICAgICAvLyBlbmNvZGVkIGFzIFVURi04LiBTaW5jZSB0aGUgc2VydmVyIGNhbiBmaWd1cmUgdGhpcyBvdXQgYW5kIHdvdWxkXG4gICAgICAvLyBvdGhlcndpc2UgcmVmdXNlIGV2ZW50cyB0aGF0IHJlcG9ydCB0aGUgbGVuZ3RoIGluY29ycmVjdGx5LCB3ZSBkZWNpZGVkXG4gICAgICAvLyBub3QgdG8gc2VuZCB0aGUgbGVuZ3RoIHRvIGF2b2lkIHByb2JsZW1zIHJlbGF0ZWQgdG8gcmVwb3J0aW5nIHRoZSB3cm9uZ1xuICAgICAgLy8gc2l6ZSBhbmQgdG8gcmVkdWNlIHJlcXVlc3QgYm9keSBzaXplLlxuICAgICAgLy9cbiAgICAgIC8vIGxlbmd0aDogbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHJlcS5ib2R5KS5sZW5ndGgsXG4gICAgfSk7XG4gICAgLy8gVGhlIHRyYWlsaW5nIG5ld2xpbmUgaXMgb3B0aW9uYWwuIFdlIGludGVudGlvbmFsbHkgZG9uJ3Qgc2VuZCBpdCB0byBhdm9pZFxuICAgIC8vIHNlbmRpbmcgdW5uZWNlc3NhcnkgYnl0ZXMuXG4gICAgLy9cbiAgICAvLyBjb25zdCBlbnZlbG9wZSA9IGAke2VudmVsb3BlSGVhZGVyc31cXG4ke2l0ZW1IZWFkZXJzfVxcbiR7cmVxLmJvZHl9XFxuYDtcbiAgICBjb25zdCBlbnZlbG9wZSA9IGAke2VudmVsb3BlSGVhZGVyc31cXG4ke2l0ZW1IZWFkZXJzfVxcbiR7cmVxLmJvZHl9YDtcbiAgICByZXEuYm9keSA9IGVudmVsb3BlO1xuICB9XG5cbiAgcmV0dXJuIHJlcTtcbn1cbiIsICJpbXBvcnQgeyBnZXRDdXJyZW50SHViIH0gZnJvbSAnQHNlbnRyeS9odWInO1xuaW1wb3J0IHsgQ2xpZW50LCBPcHRpb25zIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuLyoqIEEgY2xhc3Mgb2JqZWN0IHRoYXQgY2FuIGluc3RhbnRpYXRlIENsaWVudCBvYmplY3RzLiAqL1xuZXhwb3J0IHR5cGUgQ2xpZW50Q2xhc3M8RiBleHRlbmRzIENsaWVudCwgTyBleHRlbmRzIE9wdGlvbnM+ID0gbmV3IChvcHRpb25zOiBPKSA9PiBGO1xuXG4vKipcbiAqIEludGVybmFsIGZ1bmN0aW9uIHRvIGNyZWF0ZSBhIG5ldyBTREsgY2xpZW50IGluc3RhbmNlLiBUaGUgY2xpZW50IGlzXG4gKiBpbnN0YWxsZWQgYW5kIHRoZW4gYm91bmQgdG8gdGhlIGN1cnJlbnQgc2NvcGUuXG4gKlxuICogQHBhcmFtIGNsaWVudENsYXNzIFRoZSBjbGllbnQgY2xhc3MgdG8gaW5zdGFudGlhdGUuXG4gKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIHRvIHBhc3MgdG8gdGhlIGNsaWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRBbmRCaW5kPEYgZXh0ZW5kcyBDbGllbnQsIE8gZXh0ZW5kcyBPcHRpb25zPihjbGllbnRDbGFzczogQ2xpZW50Q2xhc3M8RiwgTz4sIG9wdGlvbnM6IE8pOiB2b2lkIHtcbiAgaWYgKG9wdGlvbnMuZGVidWcgPT09IHRydWUpIHtcbiAgICBsb2dnZXIuZW5hYmxlKCk7XG4gIH1cbiAgY29uc3QgaHViID0gZ2V0Q3VycmVudEh1YigpO1xuICBodWIuZ2V0U2NvcGUoKT8udXBkYXRlKG9wdGlvbnMuaW5pdGlhbFNjb3BlKTtcbiAgY29uc3QgY2xpZW50ID0gbmV3IGNsaWVudENsYXNzKG9wdGlvbnMpO1xuICBodWIuYmluZENsaWVudChjbGllbnQpO1xufVxuIiwgImV4cG9ydCBjb25zdCBTREtfVkVSU0lPTiA9ICc2LjE2LjEnO1xuIiwgImltcG9ydCB7IEludGVncmF0aW9uLCBXcmFwcGVkRnVuY3Rpb24gfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcblxubGV0IG9yaWdpbmFsRnVuY3Rpb25Ub1N0cmluZzogKCkgPT4gdm9pZDtcblxuLyoqIFBhdGNoIHRvU3RyaW5nIGNhbGxzIHRvIHJldHVybiBwcm9wZXIgbmFtZSBmb3Igd3JhcHBlZCBmdW5jdGlvbnMgKi9cbmV4cG9ydCBjbGFzcyBGdW5jdGlvblRvU3RyaW5nIGltcGxlbWVudHMgSW50ZWdyYXRpb24ge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaWQ6IHN0cmluZyA9ICdGdW5jdGlvblRvU3RyaW5nJztcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSBGdW5jdGlvblRvU3RyaW5nLmlkO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldHVwT25jZSgpOiB2b2lkIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgb3JpZ2luYWxGdW5jdGlvblRvU3RyaW5nID0gRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBGdW5jdGlvbi5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbih0aGlzOiBXcmFwcGVkRnVuY3Rpb24sIC4uLmFyZ3M6IGFueVtdKTogc3RyaW5nIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLl9fc2VudHJ5X29yaWdpbmFsX18gfHwgdGhpcztcbiAgICAgIHJldHVybiBvcmlnaW5hbEZ1bmN0aW9uVG9TdHJpbmcuYXBwbHkoY29udGV4dCwgYXJncyk7XG4gICAgfTtcbiAgfVxufVxuIiwgImltcG9ydCB7IGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yLCBnZXRDdXJyZW50SHViIH0gZnJvbSAnQHNlbnRyeS9odWInO1xuaW1wb3J0IHsgRXZlbnQsIEludGVncmF0aW9uLCBTdGFja0ZyYW1lIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBnZXRFdmVudERlc2NyaXB0aW9uLCBpc01hdGNoaW5nUGF0dGVybiwgbG9nZ2VyIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbi8vIFwiU2NyaXB0IGVycm9yLlwiIGlzIGhhcmQgY29kZWQgaW50byBicm93c2VycyBmb3IgZXJyb3JzIHRoYXQgaXQgY2FuJ3QgcmVhZC5cbi8vIHRoaXMgaXMgdGhlIHJlc3VsdCBvZiBhIHNjcmlwdCBiZWluZyBwdWxsZWQgaW4gZnJvbSBhbiBleHRlcm5hbCBkb21haW4gYW5kIENPUlMuXG5jb25zdCBERUZBVUxUX0lHTk9SRV9FUlJPUlMgPSBbL15TY3JpcHQgZXJyb3JcXC4/JC8sIC9eSmF2YXNjcmlwdCBlcnJvcjogU2NyaXB0IGVycm9yXFwuPyBvbiBsaW5lIDAkL107XG5cbi8qKiBKU0RvYyAqL1xuaW50ZXJmYWNlIEluYm91bmRGaWx0ZXJzT3B0aW9ucyB7XG4gIGFsbG93VXJsczogQXJyYXk8c3RyaW5nIHwgUmVnRXhwPjtcbiAgZGVueVVybHM6IEFycmF5PHN0cmluZyB8IFJlZ0V4cD47XG4gIGlnbm9yZUVycm9yczogQXJyYXk8c3RyaW5nIHwgUmVnRXhwPjtcbiAgaWdub3JlSW50ZXJuYWw6IGJvb2xlYW47XG5cbiAgLyoqIEBkZXByZWNhdGVkIHVzZSB7QGxpbmsgSW5ib3VuZEZpbHRlcnNPcHRpb25zLmFsbG93VXJsc30gaW5zdGVhZC4gKi9cbiAgd2hpdGVsaXN0VXJsczogQXJyYXk8c3RyaW5nIHwgUmVnRXhwPjtcbiAgLyoqIEBkZXByZWNhdGVkIHVzZSB7QGxpbmsgSW5ib3VuZEZpbHRlcnNPcHRpb25zLmRlbnlVcmxzfSBpbnN0ZWFkLiAqL1xuICBibGFja2xpc3RVcmxzOiBBcnJheTxzdHJpbmcgfCBSZWdFeHA+O1xufVxuXG4vKiogSW5ib3VuZCBmaWx0ZXJzIGNvbmZpZ3VyYWJsZSBieSB0aGUgdXNlciAqL1xuZXhwb3J0IGNsYXNzIEluYm91bmRGaWx0ZXJzIGltcGxlbWVudHMgSW50ZWdyYXRpb24ge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaWQ6IHN0cmluZyA9ICdJbmJvdW5kRmlsdGVycyc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbmFtZTogc3RyaW5nID0gSW5ib3VuZEZpbHRlcnMuaWQ7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IFBhcnRpYWw8SW5ib3VuZEZpbHRlcnNPcHRpb25zPiA9IHt9KSB7fVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldHVwT25jZSgpOiB2b2lkIHtcbiAgICBhZGRHbG9iYWxFdmVudFByb2Nlc3NvcigoZXZlbnQ6IEV2ZW50KSA9PiB7XG4gICAgICBjb25zdCBodWIgPSBnZXRDdXJyZW50SHViKCk7XG4gICAgICBpZiAoIWh1Yikge1xuICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICB9XG4gICAgICBjb25zdCBzZWxmID0gaHViLmdldEludGVncmF0aW9uKEluYm91bmRGaWx0ZXJzKTtcbiAgICAgIGlmIChzZWxmKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGh1Yi5nZXRDbGllbnQoKTtcbiAgICAgICAgY29uc3QgY2xpZW50T3B0aW9ucyA9IGNsaWVudCA/IGNsaWVudC5nZXRPcHRpb25zKCkgOiB7fTtcbiAgICAgICAgLy8gVGhpcyBjaGVja3MgcHJldmVudHMgbW9zdCBvZiB0aGUgb2NjdXJyZW5jZXMgb2YgdGhlIGJ1ZyBsaW5rZWQgYmVsb3c6XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9nZXRzZW50cnkvc2VudHJ5LWphdmFzY3JpcHQvaXNzdWVzLzI2MjJcbiAgICAgICAgLy8gVGhlIGJ1ZyBpcyBjYXVzZWQgYnkgbXVsdGlwbGUgU0RLIGluc3RhbmNlcywgd2hlcmUgb25lIGlzIG1pbmlmaWVkIGFuZCBvbmUgaXMgdXNpbmcgbm9uLW1hbmdsZWQgY29kZS5cbiAgICAgICAgLy8gVW5mb3J0dW5hdGVsbHkgd2UgY2Fubm90IGZpeCBpdCByZWxpYWJseSAodGh1cyByZXNlcnZlZCBwcm9wZXJ0eSBpbiByb2xsdXAncyB0ZXJzZXIgY29uZmlnKSxcbiAgICAgICAgLy8gYXMgd2UgY2Fubm90IGZvcmNlIHBlb3BsZSB1c2luZyBtdWx0aXBsZSBpbnN0YW5jZXMgaW4gdGhlaXIgYXBwcyB0byBzeW5jIFNESyB2ZXJzaW9ucy5cbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IHR5cGVvZiBzZWxmLl9tZXJnZU9wdGlvbnMgPT09ICdmdW5jdGlvbicgPyBzZWxmLl9tZXJnZU9wdGlvbnMoY2xpZW50T3B0aW9ucykgOiB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiBzZWxmLl9zaG91bGREcm9wRXZlbnQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNlbGYuX3Nob3VsZERyb3BFdmVudChldmVudCwgb3B0aW9ucykgPyBudWxsIDogZXZlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfSk7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSBfc2hvdWxkRHJvcEV2ZW50KGV2ZW50OiBFdmVudCwgb3B0aW9uczogUGFydGlhbDxJbmJvdW5kRmlsdGVyc09wdGlvbnM+KTogYm9vbGVhbiB7XG4gICAgaWYgKHRoaXMuX2lzU2VudHJ5RXJyb3IoZXZlbnQsIG9wdGlvbnMpKSB7XG4gICAgICBsb2dnZXIud2FybihgRXZlbnQgZHJvcHBlZCBkdWUgdG8gYmVpbmcgaW50ZXJuYWwgU2VudHJ5IEVycm9yLlxcbkV2ZW50OiAke2dldEV2ZW50RGVzY3JpcHRpb24oZXZlbnQpfWApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLl9pc0lnbm9yZWRFcnJvcihldmVudCwgb3B0aW9ucykpIHtcbiAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICBgRXZlbnQgZHJvcHBlZCBkdWUgdG8gYmVpbmcgbWF0Y2hlZCBieSBcXGBpZ25vcmVFcnJvcnNcXGAgb3B0aW9uLlxcbkV2ZW50OiAke2dldEV2ZW50RGVzY3JpcHRpb24oZXZlbnQpfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmICh0aGlzLl9pc0RlbmllZFVybChldmVudCwgb3B0aW9ucykpIHtcbiAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICBgRXZlbnQgZHJvcHBlZCBkdWUgdG8gYmVpbmcgbWF0Y2hlZCBieSBcXGBkZW55VXJsc1xcYCBvcHRpb24uXFxuRXZlbnQ6ICR7Z2V0RXZlbnREZXNjcmlwdGlvbihcbiAgICAgICAgICBldmVudCxcbiAgICAgICAgKX0uXFxuVXJsOiAke3RoaXMuX2dldEV2ZW50RmlsdGVyVXJsKGV2ZW50KX1gLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoIXRoaXMuX2lzQWxsb3dlZFVybChldmVudCwgb3B0aW9ucykpIHtcbiAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICBgRXZlbnQgZHJvcHBlZCBkdWUgdG8gbm90IGJlaW5nIG1hdGNoZWQgYnkgXFxgYWxsb3dVcmxzXFxgIG9wdGlvbi5cXG5FdmVudDogJHtnZXRFdmVudERlc2NyaXB0aW9uKFxuICAgICAgICAgIGV2ZW50LFxuICAgICAgICApfS5cXG5Vcmw6ICR7dGhpcy5fZ2V0RXZlbnRGaWx0ZXJVcmwoZXZlbnQpfWAsXG4gICAgICApO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF9pc1NlbnRyeUVycm9yKGV2ZW50OiBFdmVudCwgb3B0aW9uczogUGFydGlhbDxJbmJvdW5kRmlsdGVyc09wdGlvbnM+KTogYm9vbGVhbiB7XG4gICAgaWYgKCFvcHRpb25zLmlnbm9yZUludGVybmFsKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIChldmVudCAmJlxuICAgICAgICAgIGV2ZW50LmV4Y2VwdGlvbiAmJlxuICAgICAgICAgIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMgJiZcbiAgICAgICAgICBldmVudC5leGNlcHRpb24udmFsdWVzWzBdICYmXG4gICAgICAgICAgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXS50eXBlID09PSAnU2VudHJ5RXJyb3InKSB8fFxuICAgICAgICBmYWxzZVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChfb08pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSBfaXNJZ25vcmVkRXJyb3IoZXZlbnQ6IEV2ZW50LCBvcHRpb25zOiBQYXJ0aWFsPEluYm91bmRGaWx0ZXJzT3B0aW9ucz4pOiBib29sZWFuIHtcbiAgICBpZiAoIW9wdGlvbnMuaWdub3JlRXJyb3JzIHx8ICFvcHRpb25zLmlnbm9yZUVycm9ycy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fZ2V0UG9zc2libGVFdmVudE1lc3NhZ2VzKGV2ZW50KS5zb21lKG1lc3NhZ2UgPT5cbiAgICAgIC8vIE5vdCBzdXJlIHdoeSBUeXBlU2NyaXB0IGNvbXBsYWlucyBoZXJlLi4uXG4gICAgICAob3B0aW9ucy5pZ25vcmVFcnJvcnMgYXMgQXJyYXk8UmVnRXhwIHwgc3RyaW5nPikuc29tZShwYXR0ZXJuID0+IGlzTWF0Y2hpbmdQYXR0ZXJuKG1lc3NhZ2UsIHBhdHRlcm4pKSxcbiAgICApO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgX2lzRGVuaWVkVXJsKGV2ZW50OiBFdmVudCwgb3B0aW9uczogUGFydGlhbDxJbmJvdW5kRmlsdGVyc09wdGlvbnM+KTogYm9vbGVhbiB7XG4gICAgLy8gVE9ETzogVXNlIEdsb2IgaW5zdGVhZD9cbiAgICBpZiAoIW9wdGlvbnMuZGVueVVybHMgfHwgIW9wdGlvbnMuZGVueVVybHMubGVuZ3RoKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGNvbnN0IHVybCA9IHRoaXMuX2dldEV2ZW50RmlsdGVyVXJsKGV2ZW50KTtcbiAgICByZXR1cm4gIXVybCA/IGZhbHNlIDogb3B0aW9ucy5kZW55VXJscy5zb21lKHBhdHRlcm4gPT4gaXNNYXRjaGluZ1BhdHRlcm4odXJsLCBwYXR0ZXJuKSk7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSBfaXNBbGxvd2VkVXJsKGV2ZW50OiBFdmVudCwgb3B0aW9uczogUGFydGlhbDxJbmJvdW5kRmlsdGVyc09wdGlvbnM+KTogYm9vbGVhbiB7XG4gICAgLy8gVE9ETzogVXNlIEdsb2IgaW5zdGVhZD9cbiAgICBpZiAoIW9wdGlvbnMuYWxsb3dVcmxzIHx8ICFvcHRpb25zLmFsbG93VXJscy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBjb25zdCB1cmwgPSB0aGlzLl9nZXRFdmVudEZpbHRlclVybChldmVudCk7XG4gICAgcmV0dXJuICF1cmwgPyB0cnVlIDogb3B0aW9ucy5hbGxvd1VybHMuc29tZShwYXR0ZXJuID0+IGlzTWF0Y2hpbmdQYXR0ZXJuKHVybCwgcGF0dGVybikpO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgX21lcmdlT3B0aW9ucyhjbGllbnRPcHRpb25zOiBQYXJ0aWFsPEluYm91bmRGaWx0ZXJzT3B0aW9ucz4gPSB7fSk6IFBhcnRpYWw8SW5ib3VuZEZpbHRlcnNPcHRpb25zPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFsbG93VXJsczogW1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgLi4uKHRoaXMuX29wdGlvbnMud2hpdGVsaXN0VXJscyB8fCBbXSksXG4gICAgICAgIC4uLih0aGlzLl9vcHRpb25zLmFsbG93VXJscyB8fCBbXSksXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICAuLi4oY2xpZW50T3B0aW9ucy53aGl0ZWxpc3RVcmxzIHx8IFtdKSxcbiAgICAgICAgLi4uKGNsaWVudE9wdGlvbnMuYWxsb3dVcmxzIHx8IFtdKSxcbiAgICAgIF0sXG4gICAgICBkZW55VXJsczogW1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZGVwcmVjYXRpb24vZGVwcmVjYXRpb25cbiAgICAgICAgLi4uKHRoaXMuX29wdGlvbnMuYmxhY2tsaXN0VXJscyB8fCBbXSksXG4gICAgICAgIC4uLih0aGlzLl9vcHRpb25zLmRlbnlVcmxzIHx8IFtdKSxcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgIC4uLihjbGllbnRPcHRpb25zLmJsYWNrbGlzdFVybHMgfHwgW10pLFxuICAgICAgICAuLi4oY2xpZW50T3B0aW9ucy5kZW55VXJscyB8fCBbXSksXG4gICAgICBdLFxuICAgICAgaWdub3JlRXJyb3JzOiBbXG4gICAgICAgIC4uLih0aGlzLl9vcHRpb25zLmlnbm9yZUVycm9ycyB8fCBbXSksXG4gICAgICAgIC4uLihjbGllbnRPcHRpb25zLmlnbm9yZUVycm9ycyB8fCBbXSksXG4gICAgICAgIC4uLkRFRkFVTFRfSUdOT1JFX0VSUk9SUyxcbiAgICAgIF0sXG4gICAgICBpZ25vcmVJbnRlcm5hbDogdHlwZW9mIHRoaXMuX29wdGlvbnMuaWdub3JlSW50ZXJuYWwgIT09ICd1bmRlZmluZWQnID8gdGhpcy5fb3B0aW9ucy5pZ25vcmVJbnRlcm5hbCA6IHRydWUsXG4gICAgfTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF9nZXRQb3NzaWJsZUV2ZW50TWVzc2FnZXMoZXZlbnQ6IEV2ZW50KTogc3RyaW5nW10ge1xuICAgIGlmIChldmVudC5tZXNzYWdlKSB7XG4gICAgICByZXR1cm4gW2V2ZW50Lm1lc3NhZ2VdO1xuICAgIH1cbiAgICBpZiAoZXZlbnQuZXhjZXB0aW9uKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IHR5cGUgPSAnJywgdmFsdWUgPSAnJyB9ID0gKGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMgJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXSkgfHwge307XG4gICAgICAgIHJldHVybiBbYCR7dmFsdWV9YCwgYCR7dHlwZX06ICR7dmFsdWV9YF07XG4gICAgICB9IGNhdGNoIChvTykge1xuICAgICAgICBsb2dnZXIuZXJyb3IoYENhbm5vdCBleHRyYWN0IG1lc3NhZ2UgZm9yIGV2ZW50ICR7Z2V0RXZlbnREZXNjcmlwdGlvbihldmVudCl9YCk7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgX2dldExhc3RWYWxpZFVybChmcmFtZXM6IFN0YWNrRnJhbWVbXSA9IFtdKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgZm9yIChsZXQgaSA9IGZyYW1lcy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgY29uc3QgZnJhbWUgPSBmcmFtZXNbaV07XG5cbiAgICAgIGlmIChmcmFtZT8uZmlsZW5hbWUgIT09ICc8YW5vbnltb3VzPicgJiYgZnJhbWU/LmZpbGVuYW1lICE9PSAnW25hdGl2ZSBjb2RlXScpIHtcbiAgICAgICAgcmV0dXJuIGZyYW1lLmZpbGVuYW1lIHx8IG51bGw7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSBfZ2V0RXZlbnRGaWx0ZXJVcmwoZXZlbnQ6IEV2ZW50KTogc3RyaW5nIHwgbnVsbCB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChldmVudC5zdGFja3RyYWNlKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lcyA9IGV2ZW50LnN0YWNrdHJhY2UuZnJhbWVzO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0TGFzdFZhbGlkVXJsKGZyYW1lcyk7XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQuZXhjZXB0aW9uKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lcyA9XG4gICAgICAgICAgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyAmJiBldmVudC5leGNlcHRpb24udmFsdWVzWzBdLnN0YWNrdHJhY2UgJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlc1swXS5zdGFja3RyYWNlLmZyYW1lcztcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldExhc3RWYWxpZFVybChmcmFtZXMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSBjYXRjaCAob08pIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgQ2Fubm90IGV4dHJhY3QgdXJsIGZvciBldmVudCAke2dldEV2ZW50RGVzY3JpcHRpb24oZXZlbnQpfWApO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG59XG4iLCAiZXhwb3J0IHsgRnVuY3Rpb25Ub1N0cmluZyB9IGZyb20gJy4vZnVuY3Rpb250b3N0cmluZyc7XG5leHBvcnQgeyBJbmJvdW5kRmlsdGVycyB9IGZyb20gJy4vaW5ib3VuZGZpbHRlcnMnO1xuIiwgImV4cG9ydCB7XG4gIGFkZEJyZWFkY3J1bWIsXG4gIGNhcHR1cmVFeGNlcHRpb24sXG4gIGNhcHR1cmVFdmVudCxcbiAgY2FwdHVyZU1lc3NhZ2UsXG4gIGNvbmZpZ3VyZVNjb3BlLFxuICBzdGFydFRyYW5zYWN0aW9uLFxuICBzZXRDb250ZXh0LFxuICBzZXRFeHRyYSxcbiAgc2V0RXh0cmFzLFxuICBzZXRUYWcsXG4gIHNldFRhZ3MsXG4gIHNldFVzZXIsXG4gIHdpdGhTY29wZSxcbn0gZnJvbSAnQHNlbnRyeS9taW5pbWFsJztcbmV4cG9ydCB7IGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yLCBnZXRDdXJyZW50SHViLCBnZXRIdWJGcm9tQ2FycmllciwgSHViLCBtYWtlTWFpbiwgU2NvcGUgfSBmcm9tICdAc2VudHJ5L2h1Yic7XG5leHBvcnQgeyBBUEkgfSBmcm9tICcuL2FwaSc7XG5leHBvcnQgeyBCYXNlQ2xpZW50IH0gZnJvbSAnLi9iYXNlY2xpZW50JztcbmV4cG9ydCB7IEJhY2tlbmRDbGFzcywgQmFzZUJhY2tlbmQgfSBmcm9tICcuL2Jhc2ViYWNrZW5kJztcbmV4cG9ydCB7IGV2ZW50VG9TZW50cnlSZXF1ZXN0LCBzZXNzaW9uVG9TZW50cnlSZXF1ZXN0IH0gZnJvbSAnLi9yZXF1ZXN0JztcbmV4cG9ydCB7IGluaXRBbmRCaW5kLCBDbGllbnRDbGFzcyB9IGZyb20gJy4vc2RrJztcbmV4cG9ydCB7IE5vb3BUcmFuc3BvcnQgfSBmcm9tICcuL3RyYW5zcG9ydHMvbm9vcCc7XG5leHBvcnQgeyBTREtfVkVSU0lPTiB9IGZyb20gJy4vdmVyc2lvbic7XG5cbmltcG9ydCAqIGFzIEludGVncmF0aW9ucyBmcm9tICcuL2ludGVncmF0aW9ucyc7XG5cbmV4cG9ydCB7IEludGVncmF0aW9ucyB9O1xuIiwgIi8qKlxuICogQSBkb3VibHkgbGlua2VkIGxpc3QtYmFzZWQgTGVhc3QgUmVjZW50bHkgVXNlZCAoTFJVKSBjYWNoZS4gV2lsbCBrZWVwIG1vc3RcbiAqIHJlY2VudGx5IHVzZWQgaXRlbXMgd2hpbGUgZGlzY2FyZGluZyBsZWFzdCByZWNlbnRseSB1c2VkIGl0ZW1zIHdoZW4gaXRzIGxpbWl0XG4gKiBpcyByZWFjaGVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVC4gQ29weXJpZ2h0IChjKSAyMDEwIFJhc211cyBBbmRlcnNzb24gPGh0dHA6Ly9odW5jaC5zZS8+XG4gKiBTZWUgUkVBRE1FLm1kIGZvciBkZXRhaWxzLlxuICpcbiAqIElsbHVzdHJhdGlvbiBvZiB0aGUgZGVzaWduOlxuICpcbiAqICAgICAgIGVudHJ5ICAgICAgICAgICAgIGVudHJ5ICAgICAgICAgICAgIGVudHJ5ICAgICAgICAgICAgIGVudHJ5XG4gKiAgICAgICBfX19fX18gICAgICAgICAgICBfX19fX18gICAgICAgICAgICBfX19fX18gICAgICAgICAgICBfX19fX19cbiAqICAgICAgfCBoZWFkIHwubmV3ZXIgPT4gfCAgICAgIHwubmV3ZXIgPT4gfCAgICAgIHwubmV3ZXIgPT4gfCB0YWlsIHxcbiAqICAgICAgfCAgQSAgIHwgICAgICAgICAgfCAgQiAgIHwgICAgICAgICAgfCAgQyAgIHwgICAgICAgICAgfCAgRCAgIHxcbiAqICAgICAgfF9fX19fX3wgPD0gb2xkZXIufF9fX19fX3wgPD0gb2xkZXIufF9fX19fX3wgPD0gb2xkZXIufF9fX19fX3xcbiAqXG4gKiAgcmVtb3ZlZCAgPC0tICA8LS0gIDwtLSAgPC0tICA8LS0gIDwtLSAgPC0tICA8LS0gIDwtLSAgPC0tICA8LS0gIGFkZGVkXG4gKi9cbihmdW5jdGlvbihnLGYpe1xuICBjb25zdCBlID0gdHlwZW9mIGV4cG9ydHMgPT0gJ29iamVjdCcgPyBleHBvcnRzIDogdHlwZW9mIGcgPT0gJ29iamVjdCcgPyBnIDoge307XG4gIGYoZSk7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09ICdmdW5jdGlvbicgJiYgZGVmaW5lLmFtZCkgeyBkZWZpbmUoJ2xydScsIGUpOyB9XG59KSh0aGlzLCBmdW5jdGlvbihleHBvcnRzKSB7XG5cbmNvbnN0IE5FV0VSID0gU3ltYm9sKCduZXdlcicpO1xuY29uc3QgT0xERVIgPSBTeW1ib2woJ29sZGVyJyk7XG5cbmZ1bmN0aW9uIExSVU1hcChsaW1pdCwgZW50cmllcykge1xuICBpZiAodHlwZW9mIGxpbWl0ICE9PSAnbnVtYmVyJykge1xuICAgIC8vIGNhbGxlZCBhcyAoZW50cmllcylcbiAgICBlbnRyaWVzID0gbGltaXQ7XG4gICAgbGltaXQgPSAwO1xuICB9XG5cbiAgdGhpcy5zaXplID0gMDtcbiAgdGhpcy5saW1pdCA9IGxpbWl0O1xuICB0aGlzLm9sZGVzdCA9IHRoaXMubmV3ZXN0ID0gdW5kZWZpbmVkO1xuICB0aGlzLl9rZXltYXAgPSBuZXcgTWFwKCk7XG5cbiAgaWYgKGVudHJpZXMpIHtcbiAgICB0aGlzLmFzc2lnbihlbnRyaWVzKTtcbiAgICBpZiAobGltaXQgPCAxKSB7XG4gICAgICB0aGlzLmxpbWl0ID0gdGhpcy5zaXplO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnRzLkxSVU1hcCA9IExSVU1hcDtcblxuZnVuY3Rpb24gRW50cnkoa2V5LCB2YWx1ZSkge1xuICB0aGlzLmtleSA9IGtleTtcbiAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB0aGlzW05FV0VSXSA9IHVuZGVmaW5lZDtcbiAgdGhpc1tPTERFUl0gPSB1bmRlZmluZWQ7XG59XG5cblxuTFJVTWFwLnByb3RvdHlwZS5fbWFya0VudHJ5QXNVc2VkID0gZnVuY3Rpb24oZW50cnkpIHtcbiAgaWYgKGVudHJ5ID09PSB0aGlzLm5ld2VzdCkge1xuICAgIC8vIEFscmVhZHkgdGhlIG1vc3QgcmVjZW5sdHkgdXNlZCBlbnRyeSwgc28gbm8gbmVlZCB0byB1cGRhdGUgdGhlIGxpc3RcbiAgICByZXR1cm47XG4gIH1cbiAgLy8gSEVBRC0tLS0tLS0tLS0tLS0tVEFJTFxuICAvLyAgIDwub2xkZXIgICAubmV3ZXI+XG4gIC8vICA8LS0tIGFkZCBkaXJlY3Rpb24gLS1cbiAgLy8gICBBICBCICBDICA8RD4gIEVcbiAgaWYgKGVudHJ5W05FV0VSXSkge1xuICAgIGlmIChlbnRyeSA9PT0gdGhpcy5vbGRlc3QpIHtcbiAgICAgIHRoaXMub2xkZXN0ID0gZW50cnlbTkVXRVJdO1xuICAgIH1cbiAgICBlbnRyeVtORVdFUl1bT0xERVJdID0gZW50cnlbT0xERVJdOyAvLyBDIDwtLSBFLlxuICB9XG4gIGlmIChlbnRyeVtPTERFUl0pIHtcbiAgICBlbnRyeVtPTERFUl1bTkVXRVJdID0gZW50cnlbTkVXRVJdOyAvLyBDLiAtLT4gRVxuICB9XG4gIGVudHJ5W05FV0VSXSA9IHVuZGVmaW5lZDsgLy8gRCAtLXhcbiAgZW50cnlbT0xERVJdID0gdGhpcy5uZXdlc3Q7IC8vIEQuIC0tPiBFXG4gIGlmICh0aGlzLm5ld2VzdCkge1xuICAgIHRoaXMubmV3ZXN0W05FV0VSXSA9IGVudHJ5OyAvLyBFLiA8LS0gRFxuICB9XG4gIHRoaXMubmV3ZXN0ID0gZW50cnk7XG59O1xuXG5MUlVNYXAucHJvdG90eXBlLmFzc2lnbiA9IGZ1bmN0aW9uKGVudHJpZXMpIHtcbiAgbGV0IGVudHJ5LCBsaW1pdCA9IHRoaXMubGltaXQgfHwgTnVtYmVyLk1BWF9WQUxVRTtcbiAgdGhpcy5fa2V5bWFwLmNsZWFyKCk7XG4gIGxldCBpdCA9IGVudHJpZXNbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICBmb3IgKGxldCBpdHYgPSBpdC5uZXh0KCk7ICFpdHYuZG9uZTsgaXR2ID0gaXQubmV4dCgpKSB7XG4gICAgbGV0IGUgPSBuZXcgRW50cnkoaXR2LnZhbHVlWzBdLCBpdHYudmFsdWVbMV0pO1xuICAgIHRoaXMuX2tleW1hcC5zZXQoZS5rZXksIGUpO1xuICAgIGlmICghZW50cnkpIHtcbiAgICAgIHRoaXMub2xkZXN0ID0gZTtcbiAgICB9IGVsc2Uge1xuICAgICAgZW50cnlbTkVXRVJdID0gZTtcbiAgICAgIGVbT0xERVJdID0gZW50cnk7XG4gICAgfVxuICAgIGVudHJ5ID0gZTtcbiAgICBpZiAobGltaXQtLSA9PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ292ZXJmbG93Jyk7XG4gICAgfVxuICB9XG4gIHRoaXMubmV3ZXN0ID0gZW50cnk7XG4gIHRoaXMuc2l6ZSA9IHRoaXMuX2tleW1hcC5zaXplO1xufTtcblxuTFJVTWFwLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbihrZXkpIHtcbiAgLy8gRmlyc3QsIGZpbmQgb3VyIGNhY2hlIGVudHJ5XG4gIHZhciBlbnRyeSA9IHRoaXMuX2tleW1hcC5nZXQoa2V5KTtcbiAgaWYgKCFlbnRyeSkgcmV0dXJuOyAvLyBOb3QgY2FjaGVkLiBTb3JyeS5cbiAgLy8gQXMgPGtleT4gd2FzIGZvdW5kIGluIHRoZSBjYWNoZSwgcmVnaXN0ZXIgaXQgYXMgYmVpbmcgcmVxdWVzdGVkIHJlY2VudGx5XG4gIHRoaXMuX21hcmtFbnRyeUFzVXNlZChlbnRyeSk7XG4gIHJldHVybiBlbnRyeS52YWx1ZTtcbn07XG5cbkxSVU1hcC5wcm90b3R5cGUuc2V0ID0gZnVuY3Rpb24oa2V5LCB2YWx1ZSkge1xuICB2YXIgZW50cnkgPSB0aGlzLl9rZXltYXAuZ2V0KGtleSk7XG5cbiAgaWYgKGVudHJ5KSB7XG4gICAgLy8gdXBkYXRlIGV4aXN0aW5nXG4gICAgZW50cnkudmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLl9tYXJrRW50cnlBc1VzZWQoZW50cnkpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLy8gbmV3IGVudHJ5XG4gIHRoaXMuX2tleW1hcC5zZXQoa2V5LCAoZW50cnkgPSBuZXcgRW50cnkoa2V5LCB2YWx1ZSkpKTtcblxuICBpZiAodGhpcy5uZXdlc3QpIHtcbiAgICAvLyBsaW5rIHByZXZpb3VzIHRhaWwgdG8gdGhlIG5ldyB0YWlsIChlbnRyeSlcbiAgICB0aGlzLm5ld2VzdFtORVdFUl0gPSBlbnRyeTtcbiAgICBlbnRyeVtPTERFUl0gPSB0aGlzLm5ld2VzdDtcbiAgfSBlbHNlIHtcbiAgICAvLyB3ZSdyZSBmaXJzdCBpbiAtLSB5YXlcbiAgICB0aGlzLm9sZGVzdCA9IGVudHJ5O1xuICB9XG5cbiAgLy8gYWRkIG5ldyBlbnRyeSB0byB0aGUgZW5kIG9mIHRoZSBsaW5rZWQgbGlzdCAtLSBpdCdzIG5vdyB0aGUgZnJlc2hlc3QgZW50cnkuXG4gIHRoaXMubmV3ZXN0ID0gZW50cnk7XG4gICsrdGhpcy5zaXplO1xuICBpZiAodGhpcy5zaXplID4gdGhpcy5saW1pdCkge1xuICAgIC8vIHdlIGhpdCB0aGUgbGltaXQgLS0gcmVtb3ZlIHRoZSBoZWFkXG4gICAgdGhpcy5zaGlmdCgpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59O1xuXG5MUlVNYXAucHJvdG90eXBlLnNoaWZ0ID0gZnVuY3Rpb24oKSB7XG4gIC8vIHRvZG86IGhhbmRsZSBzcGVjaWFsIGNhc2Ugd2hlbiBsaW1pdCA9PSAxXG4gIHZhciBlbnRyeSA9IHRoaXMub2xkZXN0O1xuICBpZiAoZW50cnkpIHtcbiAgICBpZiAodGhpcy5vbGRlc3RbTkVXRVJdKSB7XG4gICAgICAvLyBhZHZhbmNlIHRoZSBsaXN0XG4gICAgICB0aGlzLm9sZGVzdCA9IHRoaXMub2xkZXN0W05FV0VSXTtcbiAgICAgIHRoaXMub2xkZXN0W09MREVSXSA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdGhlIGNhY2hlIGlzIGV4aGF1c3RlZFxuICAgICAgdGhpcy5vbGRlc3QgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLm5ld2VzdCA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgLy8gUmVtb3ZlIGxhc3Qgc3Ryb25nIHJlZmVyZW5jZSB0byA8ZW50cnk+IGFuZCByZW1vdmUgbGlua3MgZnJvbSB0aGUgcHVyZ2VkXG4gICAgLy8gZW50cnkgYmVpbmcgcmV0dXJuZWQ6XG4gICAgZW50cnlbTkVXRVJdID0gZW50cnlbT0xERVJdID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuX2tleW1hcC5kZWxldGUoZW50cnkua2V5KTtcbiAgICAtLXRoaXMuc2l6ZTtcbiAgICByZXR1cm4gW2VudHJ5LmtleSwgZW50cnkudmFsdWVdO1xuICB9XG59O1xuXG4vLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBGb2xsb3dpbmcgY29kZSBpcyBvcHRpb25hbCBhbmQgY2FuIGJlIHJlbW92ZWQgd2l0aG91dCBicmVha2luZyB0aGUgY29yZVxuLy8gZnVuY3Rpb25hbGl0eS5cblxuTFJVTWFwLnByb3RvdHlwZS5maW5kID0gZnVuY3Rpb24oa2V5KSB7XG4gIGxldCBlID0gdGhpcy5fa2V5bWFwLmdldChrZXkpO1xuICByZXR1cm4gZSA/IGUudmFsdWUgOiB1bmRlZmluZWQ7XG59O1xuXG5MUlVNYXAucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uKGtleSkge1xuICByZXR1cm4gdGhpcy5fa2V5bWFwLmhhcyhrZXkpO1xufTtcblxuTFJVTWFwLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbihrZXkpIHtcbiAgdmFyIGVudHJ5ID0gdGhpcy5fa2V5bWFwLmdldChrZXkpO1xuICBpZiAoIWVudHJ5KSByZXR1cm47XG4gIHRoaXMuX2tleW1hcC5kZWxldGUoZW50cnkua2V5KTtcbiAgaWYgKGVudHJ5W05FV0VSXSAmJiBlbnRyeVtPTERFUl0pIHtcbiAgICAvLyByZWxpbmsgdGhlIG9sZGVyIGVudHJ5IHdpdGggdGhlIG5ld2VyIGVudHJ5XG4gICAgZW50cnlbT0xERVJdW05FV0VSXSA9IGVudHJ5W05FV0VSXTtcbiAgICBlbnRyeVtORVdFUl1bT0xERVJdID0gZW50cnlbT0xERVJdO1xuICB9IGVsc2UgaWYgKGVudHJ5W05FV0VSXSkge1xuICAgIC8vIHJlbW92ZSB0aGUgbGluayB0byB1c1xuICAgIGVudHJ5W05FV0VSXVtPTERFUl0gPSB1bmRlZmluZWQ7XG4gICAgLy8gbGluayB0aGUgbmV3ZXIgZW50cnkgdG8gaGVhZFxuICAgIHRoaXMub2xkZXN0ID0gZW50cnlbTkVXRVJdO1xuICB9IGVsc2UgaWYgKGVudHJ5W09MREVSXSkge1xuICAgIC8vIHJlbW92ZSB0aGUgbGluayB0byB1c1xuICAgIGVudHJ5W09MREVSXVtORVdFUl0gPSB1bmRlZmluZWQ7XG4gICAgLy8gbGluayB0aGUgbmV3ZXIgZW50cnkgdG8gaGVhZFxuICAgIHRoaXMubmV3ZXN0ID0gZW50cnlbT0xERVJdO1xuICB9IGVsc2Ugey8vIGlmKGVudHJ5W09MREVSXSA9PT0gdW5kZWZpbmVkICYmIGVudHJ5Lm5ld2VyID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzLm9sZGVzdCA9IHRoaXMubmV3ZXN0ID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdGhpcy5zaXplLS07XG4gIHJldHVybiBlbnRyeS52YWx1ZTtcbn07XG5cbkxSVU1hcC5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbigpIHtcbiAgLy8gTm90IGNsZWFyaW5nIGxpbmtzIHNob3VsZCBiZSBzYWZlLCBhcyB3ZSBkb24ndCBleHBvc2UgbGl2ZSBsaW5rcyB0byB1c2VyXG4gIHRoaXMub2xkZXN0ID0gdGhpcy5uZXdlc3QgPSB1bmRlZmluZWQ7XG4gIHRoaXMuc2l6ZSA9IDA7XG4gIHRoaXMuX2tleW1hcC5jbGVhcigpO1xufTtcblxuXG5mdW5jdGlvbiBFbnRyeUl0ZXJhdG9yKG9sZGVzdEVudHJ5KSB7IHRoaXMuZW50cnkgPSBvbGRlc3RFbnRyeTsgfVxuRW50cnlJdGVyYXRvci5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfVxuRW50cnlJdGVyYXRvci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKCkge1xuICBsZXQgZW50ID0gdGhpcy5lbnRyeTtcbiAgaWYgKGVudCkge1xuICAgIHRoaXMuZW50cnkgPSBlbnRbTkVXRVJdO1xuICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogW2VudC5rZXksIGVudC52YWx1ZV0gfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XG4gIH1cbn07XG5cblxuZnVuY3Rpb24gS2V5SXRlcmF0b3Iob2xkZXN0RW50cnkpIHsgdGhpcy5lbnRyeSA9IG9sZGVzdEVudHJ5OyB9XG5LZXlJdGVyYXRvci5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfVxuS2V5SXRlcmF0b3IucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbigpIHtcbiAgbGV0IGVudCA9IHRoaXMuZW50cnk7XG4gIGlmIChlbnQpIHtcbiAgICB0aGlzLmVudHJ5ID0gZW50W05FV0VSXTtcbiAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IGVudC5rZXkgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XG4gIH1cbn07XG5cbmZ1bmN0aW9uIFZhbHVlSXRlcmF0b3Iob2xkZXN0RW50cnkpIHsgdGhpcy5lbnRyeSA9IG9sZGVzdEVudHJ5OyB9XG5WYWx1ZUl0ZXJhdG9yLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9XG5WYWx1ZUl0ZXJhdG9yLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oKSB7XG4gIGxldCBlbnQgPSB0aGlzLmVudHJ5O1xuICBpZiAoZW50KSB7XG4gICAgdGhpcy5lbnRyeSA9IGVudFtORVdFUl07XG4gICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiBlbnQudmFsdWUgfTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5kZWZpbmVkIH07XG4gIH1cbn07XG5cblxuTFJVTWFwLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBuZXcgS2V5SXRlcmF0b3IodGhpcy5vbGRlc3QpO1xufTtcblxuTFJVTWFwLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIG5ldyBWYWx1ZUl0ZXJhdG9yKHRoaXMub2xkZXN0KTtcbn07XG5cbkxSVU1hcC5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdGhpcztcbn07XG5cbkxSVU1hcC5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gbmV3IEVudHJ5SXRlcmF0b3IodGhpcy5vbGRlc3QpO1xufTtcblxuTFJVTWFwLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oZnVuLCB0aGlzT2JqKSB7XG4gIGlmICh0eXBlb2YgdGhpc09iaiAhPT0gJ29iamVjdCcpIHtcbiAgICB0aGlzT2JqID0gdGhpcztcbiAgfVxuICBsZXQgZW50cnkgPSB0aGlzLm9sZGVzdDtcbiAgd2hpbGUgKGVudHJ5KSB7XG4gICAgZnVuLmNhbGwodGhpc09iaiwgZW50cnkudmFsdWUsIGVudHJ5LmtleSwgdGhpcyk7XG4gICAgZW50cnkgPSBlbnRyeVtORVdFUl07XG4gIH1cbn07XG5cbi8qKiBSZXR1cm5zIGEgSlNPTiAoYXJyYXkpIHJlcHJlc2VudGF0aW9uICovXG5MUlVNYXAucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcyA9IG5ldyBBcnJheSh0aGlzLnNpemUpLCBpID0gMCwgZW50cnkgPSB0aGlzLm9sZGVzdDtcbiAgd2hpbGUgKGVudHJ5KSB7XG4gICAgc1tpKytdID0geyBrZXk6IGVudHJ5LmtleSwgdmFsdWU6IGVudHJ5LnZhbHVlIH07XG4gICAgZW50cnkgPSBlbnRyeVtORVdFUl07XG4gIH1cbiAgcmV0dXJuIHM7XG59O1xuXG4vKiogUmV0dXJucyBhIFN0cmluZyByZXByZXNlbnRhdGlvbiAqL1xuTFJVTWFwLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcyA9ICcnLCBlbnRyeSA9IHRoaXMub2xkZXN0O1xuICB3aGlsZSAoZW50cnkpIHtcbiAgICBzICs9IFN0cmluZyhlbnRyeS5rZXkpKyc6JytlbnRyeS52YWx1ZTtcbiAgICBlbnRyeSA9IGVudHJ5W05FV0VSXTtcbiAgICBpZiAoZW50cnkpIHtcbiAgICAgIHMgKz0gJyA8ICc7XG4gICAgfVxuICB9XG4gIHJldHVybiBzO1xufTtcblxufSk7XG4iLCAiLyoqXG4gKiBzdGFjay10cmFjZSAtIFBhcnNlcyBub2RlLmpzIHN0YWNrIHRyYWNlc1xuICpcbiAqIFRoaXMgd2FzIG9yaWdpbmFsbHkgZm9ya2VkIHRvIGZpeCB0aGlzIGlzc3VlOlxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZlbGl4Z2Uvbm9kZS1zdGFjay10cmFjZS9pc3N1ZXMvMzFcbiAqXG4gKiBNYXIgMTksMjAxOSAtICM0ZmQzNzllXG4gKlxuICogaHR0cHM6Ly9naXRodWIuY29tL2ZlbGl4Z2Uvbm9kZS1zdGFjay10cmFjZS9cbiAqIEBsaWNlbnNlIE1JVFxuICovXG5cbi8qKiBEZWNvZGVkIFN0YWNrRnJhbWUgKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3RhY2tGcmFtZSB7XG4gIGZpbGVOYW1lOiBzdHJpbmc7XG4gIGxpbmVOdW1iZXI6IG51bWJlcjtcbiAgZnVuY3Rpb25OYW1lOiBzdHJpbmc7XG4gIHR5cGVOYW1lOiBzdHJpbmc7XG4gIG1ldGhvZE5hbWU6IHN0cmluZztcbiAgbmF0aXZlOiBib29sZWFuO1xuICBjb2x1bW5OdW1iZXI6IG51bWJlcjtcbn1cblxuLyoqIEV4dHJhY3RzIFN0YWNrRnJhbWVzIGZyb20gdGhlIEVycm9yICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2UoZXJyOiBFcnJvcik6IFN0YWNrRnJhbWVbXSB7XG4gIGlmICghZXJyLnN0YWNrKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgbGluZXMgPSBlcnIuc3RhY2suc3BsaXQoJ1xcbicpLnNsaWNlKDEpO1xuXG4gIHJldHVybiBsaW5lc1xuICAgIC5tYXAobGluZSA9PiB7XG4gICAgICBpZiAobGluZS5tYXRjaCgvXlxccypbLV17NCx9JC8pKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29sdW1uTnVtYmVyOiBudWxsLFxuICAgICAgICAgIGZpbGVOYW1lOiBsaW5lLFxuICAgICAgICAgIGZ1bmN0aW9uTmFtZTogbnVsbCxcbiAgICAgICAgICBsaW5lTnVtYmVyOiBudWxsLFxuICAgICAgICAgIG1ldGhvZE5hbWU6IG51bGwsXG4gICAgICAgICAgbmF0aXZlOiBudWxsLFxuICAgICAgICAgIHR5cGVOYW1lOiBudWxsLFxuICAgICAgICB9O1xuICAgICAgfVxuXG4gICAgICBjb25zdCBsaW5lTWF0Y2ggPSBsaW5lLm1hdGNoKC9hdCAoPzooLis/KVxccytcXCgpPyg/OiguKz8pOihcXGQrKSg/OjooXFxkKykpP3woW14pXSspKVxcKT8vKTtcbiAgICAgIGlmICghbGluZU1hdGNoKSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIGxldCBvYmplY3QgPSBudWxsO1xuICAgICAgbGV0IG1ldGhvZCA9IG51bGw7XG4gICAgICBsZXQgZnVuY3Rpb25OYW1lID0gbnVsbDtcbiAgICAgIGxldCB0eXBlTmFtZSA9IG51bGw7XG4gICAgICBsZXQgbWV0aG9kTmFtZSA9IG51bGw7XG4gICAgICBjb25zdCBpc05hdGl2ZSA9IGxpbmVNYXRjaFs1XSA9PT0gJ25hdGl2ZSc7XG5cbiAgICAgIGlmIChsaW5lTWF0Y2hbMV0pIHtcbiAgICAgICAgZnVuY3Rpb25OYW1lID0gbGluZU1hdGNoWzFdO1xuICAgICAgICBsZXQgbWV0aG9kU3RhcnQgPSBmdW5jdGlvbk5hbWUubGFzdEluZGV4T2YoJy4nKTtcbiAgICAgICAgaWYgKGZ1bmN0aW9uTmFtZVttZXRob2RTdGFydCAtIDFdID09PSAnLicpIHtcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGx1c3BsdXNcbiAgICAgICAgICBtZXRob2RTdGFydC0tO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXRob2RTdGFydCA+IDApIHtcbiAgICAgICAgICBvYmplY3QgPSBmdW5jdGlvbk5hbWUuc3Vic3RyKDAsIG1ldGhvZFN0YXJ0KTtcbiAgICAgICAgICBtZXRob2QgPSBmdW5jdGlvbk5hbWUuc3Vic3RyKG1ldGhvZFN0YXJ0ICsgMSk7XG4gICAgICAgICAgY29uc3Qgb2JqZWN0RW5kID0gb2JqZWN0LmluZGV4T2YoJy5Nb2R1bGUnKTtcbiAgICAgICAgICBpZiAob2JqZWN0RW5kID4gMCkge1xuICAgICAgICAgICAgZnVuY3Rpb25OYW1lID0gZnVuY3Rpb25OYW1lLnN1YnN0cihvYmplY3RFbmQgKyAxKTtcbiAgICAgICAgICAgIG9iamVjdCA9IG9iamVjdC5zdWJzdHIoMCwgb2JqZWN0RW5kKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdHlwZU5hbWUgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kKSB7XG4gICAgICAgIHR5cGVOYW1lID0gb2JqZWN0O1xuICAgICAgICBtZXRob2ROYW1lID0gbWV0aG9kO1xuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnPGFub255bW91cz4nKSB7XG4gICAgICAgIG1ldGhvZE5hbWUgPSBudWxsO1xuICAgICAgICBmdW5jdGlvbk5hbWUgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwcm9wZXJ0aWVzID0ge1xuICAgICAgICBjb2x1bW5OdW1iZXI6IHBhcnNlSW50KGxpbmVNYXRjaFs0XSwgMTApIHx8IG51bGwsXG4gICAgICAgIGZpbGVOYW1lOiBsaW5lTWF0Y2hbMl0gfHwgbnVsbCxcbiAgICAgICAgZnVuY3Rpb25OYW1lLFxuICAgICAgICBsaW5lTnVtYmVyOiBwYXJzZUludChsaW5lTWF0Y2hbM10sIDEwKSB8fCBudWxsLFxuICAgICAgICBtZXRob2ROYW1lLFxuICAgICAgICBuYXRpdmU6IGlzTmF0aXZlLFxuICAgICAgICB0eXBlTmFtZSxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBwcm9wZXJ0aWVzO1xuICAgIH0pXG4gICAgLmZpbHRlcihjYWxsU2l0ZSA9PiAhIWNhbGxTaXRlKSBhcyBTdGFja0ZyYW1lW107XG59XG4iLCAiaW1wb3J0IHsgRXZlbnQsIEV4Y2VwdGlvbiwgRXh0ZW5kZWRFcnJvciwgU3RhY2tGcmFtZSB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgYWRkQ29udGV4dFRvRnJhbWUsIGJhc2VuYW1lLCBkaXJuYW1lLCBTeW5jUHJvbWlzZSB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBMUlVNYXAgfSBmcm9tICdscnVfbWFwJztcblxuaW1wb3J0ICogYXMgc3RhY2t0cmFjZSBmcm9tICcuL3N0YWNrdHJhY2UnO1xuaW1wb3J0IHsgTm9kZU9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcblxuY29uc3QgREVGQVVMVF9MSU5FU19PRl9DT05URVhUOiBudW1iZXIgPSA3O1xuY29uc3QgRklMRV9DT05URU5UX0NBQ0hFID0gbmV3IExSVU1hcDxzdHJpbmcsIHN0cmluZyB8IG51bGw+KDEwMCk7XG5cbi8qKlxuICogUmVzZXRzIHRoZSBmaWxlIGNhY2hlLiBFeGlzdHMgZm9yIHRlc3RpbmcgcHVycG9zZXMuXG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXNldEZpbGVDb250ZW50Q2FjaGUoKTogdm9pZCB7XG4gIEZJTEVfQ09OVEVOVF9DQUNIRS5jbGVhcigpO1xufVxuXG4vKiogSlNEb2MgKi9cbmZ1bmN0aW9uIGdldEZ1bmN0aW9uKGZyYW1lOiBzdGFja3RyYWNlLlN0YWNrRnJhbWUpOiBzdHJpbmcge1xuICB0cnkge1xuICAgIHJldHVybiBmcmFtZS5mdW5jdGlvbk5hbWUgfHwgYCR7ZnJhbWUudHlwZU5hbWV9LiR7ZnJhbWUubWV0aG9kTmFtZSB8fCAnPGFub255bW91cz4nfWA7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvLyBUaGlzIHNlZW1zIHRvIGhhcHBlbiBzb21ldGltZXMgd2hlbiB1c2luZyAndXNlIHN0cmljdCcsXG4gICAgLy8gc3RlbW1pbmcgZnJvbSBgZ2V0VHlwZU5hbWVgLlxuICAgIC8vIFtUeXBlRXJyb3I6IENhbm5vdCByZWFkIHByb3BlcnR5ICdjb25zdHJ1Y3Rvcicgb2YgdW5kZWZpbmVkXVxuICAgIHJldHVybiAnPGFub255bW91cz4nO1xuICB9XG59XG5cbmNvbnN0IG1haW5Nb2R1bGU6IHN0cmluZyA9IGAkeyhyZXF1aXJlLm1haW4gJiYgcmVxdWlyZS5tYWluLmZpbGVuYW1lICYmIGRpcm5hbWUocmVxdWlyZS5tYWluLmZpbGVuYW1lKSkgfHxcbiAgZ2xvYmFsLnByb2Nlc3MuY3dkKCl9L2A7XG5cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gZ2V0TW9kdWxlKGZpbGVuYW1lOiBzdHJpbmcsIGJhc2U/OiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAoIWJhc2UpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICBiYXNlID0gbWFpbk1vZHVsZTtcbiAgfVxuXG4gIC8vIEl0J3Mgc3BlY2lmaWNhbGx5IGEgbW9kdWxlXG4gIGNvbnN0IGZpbGUgPSBiYXNlbmFtZShmaWxlbmFtZSwgJy5qcycpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZmlsZW5hbWUgPSBkaXJuYW1lKGZpbGVuYW1lKTtcbiAgbGV0IG4gPSBmaWxlbmFtZS5sYXN0SW5kZXhPZignL25vZGVfbW9kdWxlcy8nKTtcbiAgaWYgKG4gPiAtMSkge1xuICAgIC8vIC9ub2RlX21vZHVsZXMvIGlzIDE0IGNoYXJzXG4gICAgcmV0dXJuIGAke2ZpbGVuYW1lLnN1YnN0cihuICsgMTQpLnJlcGxhY2UoL1xcLy9nLCAnLicpfToke2ZpbGV9YDtcbiAgfVxuICAvLyBMZXQncyBzZWUgaWYgaXQncyBhIHBhcnQgb2YgdGhlIG1haW4gbW9kdWxlXG4gIC8vIFRvIGJlIGEgcGFydCBvZiBtYWluIG1vZHVsZSwgaXQgaGFzIHRvIHNoYXJlIHRoZSBzYW1lIGJhc2VcbiAgbiA9IGAke2ZpbGVuYW1lfS9gLmxhc3RJbmRleE9mKGJhc2UsIDApO1xuICBpZiAobiA9PT0gMCkge1xuICAgIGxldCBtb2R1bGVOYW1lID0gZmlsZW5hbWUuc3Vic3RyKGJhc2UubGVuZ3RoKS5yZXBsYWNlKC9cXC8vZywgJy4nKTtcbiAgICBpZiAobW9kdWxlTmFtZSkge1xuICAgICAgbW9kdWxlTmFtZSArPSAnOic7XG4gICAgfVxuICAgIG1vZHVsZU5hbWUgKz0gZmlsZTtcbiAgICByZXR1cm4gbW9kdWxlTmFtZTtcbiAgfVxuICByZXR1cm4gZmlsZTtcbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHJlYWRzIGZpbGUgY29udGVudHMgYW5kIGNhY2hlcyB0aGVtIGluIGEgZ2xvYmFsIExSVSBjYWNoZS5cbiAqIFJldHVybnMgYSBQcm9taXNlIGZpbGVwYXRoID0+IGNvbnRlbnQgYXJyYXkgZm9yIGFsbCBmaWxlcyB0aGF0IHdlIHdlcmUgYWJsZSB0byByZWFkLlxuICpcbiAqIEBwYXJhbSBmaWxlbmFtZXMgQXJyYXkgb2YgZmlsZXBhdGhzIHRvIHJlYWQgY29udGVudCBmcm9tLlxuICovXG5mdW5jdGlvbiByZWFkU291cmNlRmlsZXMoZmlsZW5hbWVzOiBzdHJpbmdbXSk6IFByb21pc2VMaWtlPHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVsbCB9PiB7XG4gIC8vIHdlJ3JlIHJlbHlpbmcgb24gZmlsZW5hbWVzIGJlaW5nIGRlLWR1cGVkIGFscmVhZHlcbiAgaWYgKGZpbGVuYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gU3luY1Byb21pc2UucmVzb2x2ZSh7fSk7XG4gIH1cblxuICByZXR1cm4gbmV3IFN5bmNQcm9taXNlPHtcbiAgICBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBudWxsO1xuICB9PihyZXNvbHZlID0+IHtcbiAgICBjb25zdCBzb3VyY2VGaWxlczoge1xuICAgICAgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVsbDtcbiAgICB9ID0ge307XG5cbiAgICBsZXQgY291bnQgPSAwO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLWZvci1vZlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZmlsZW5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IGZpbGVuYW1lc1tpXTtcblxuICAgICAgY29uc3QgY2FjaGUgPSBGSUxFX0NPTlRFTlRfQ0FDSEUuZ2V0KGZpbGVuYW1lKTtcbiAgICAgIC8vIFdlIGhhdmUgYSBjYWNoZSBoaXRcbiAgICAgIGlmIChjYWNoZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIElmIGl0J3Mgbm90IG51bGwgKHdoaWNoIG1lYW5zIHdlIGZvdW5kIGEgZmlsZSBhbmQgaGF2ZSBhIGNvbnRlbnQpXG4gICAgICAgIC8vIHdlIHNldCB0aGUgY29udGVudCBhbmQgcmV0dXJuIGl0IGxhdGVyLlxuICAgICAgICBpZiAoY2FjaGUgIT09IG51bGwpIHtcbiAgICAgICAgICBzb3VyY2VGaWxlc1tmaWxlbmFtZV0gPSBjYWNoZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGx1c3BsdXNcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgLy8gSW4gYW55IGNhc2Ugd2Ugd2FudCB0byBza2lwIGhlcmUgdGhlbiBzaW5jZSB3ZSBoYXZlIGEgY29udGVudCBhbHJlYWR5IG9yIHdlIGNvdWxkbid0XG4gICAgICAgIC8vIHJlYWQgdGhlIGZpbGUgYW5kIGRvbid0IHdhbnQgdG8gdHJ5IGFnYWluLlxuICAgICAgICBpZiAoY291bnQgPT09IGZpbGVuYW1lcy5sZW5ndGgpIHtcbiAgICAgICAgICByZXNvbHZlKHNvdXJjZUZpbGVzKTtcbiAgICAgICAgfVxuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgcmVhZEZpbGUoZmlsZW5hbWUsIChlcnI6IEVycm9yIHwgbnVsbCwgZGF0YTogQnVmZmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBlcnIgPyBudWxsIDogZGF0YS50b1N0cmluZygpO1xuICAgICAgICBzb3VyY2VGaWxlc1tmaWxlbmFtZV0gPSBjb250ZW50O1xuXG4gICAgICAgIC8vIFdlIGFsd2F5cyB3YW50IHRvIHNldCB0aGUgY2FjaGUsIGV2ZW4gdG8gbnVsbCB3aGljaCBtZWFucyB0aGVyZSB3YXMgYW4gZXJyb3IgcmVhZGluZyB0aGUgZmlsZS5cbiAgICAgICAgLy8gV2UgZG8gbm90IHdhbnQgdG8gdHJ5IHRvIHJlYWQgdGhlIGZpbGUgYWdhaW4uXG4gICAgICAgIEZJTEVfQ09OVEVOVF9DQUNIRS5zZXQoZmlsZW5hbWUsIGNvbnRlbnQpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGx1c3BsdXNcbiAgICAgICAgY291bnQrKztcbiAgICAgICAgaWYgKGNvdW50ID09PSBmaWxlbmFtZXMubGVuZ3RoKSB7XG4gICAgICAgICAgcmVzb2x2ZShzb3VyY2VGaWxlcyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFN0YWNrRnJvbUVycm9yKGVycm9yOiBFcnJvcik6IHN0YWNrdHJhY2UuU3RhY2tGcmFtZVtdIHtcbiAgY29uc3Qgc3RhY2sgPSBzdGFja3RyYWNlLnBhcnNlKGVycm9yKTtcbiAgaWYgKCFzdGFjaykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICByZXR1cm4gc3RhY2s7XG59XG5cbi8qKlxuICogQGhpZGRlblxuICovXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VTdGFjayhzdGFjazogc3RhY2t0cmFjZS5TdGFja0ZyYW1lW10sIG9wdGlvbnM/OiBOb2RlT3B0aW9ucyk6IFByb21pc2VMaWtlPFN0YWNrRnJhbWVbXT4ge1xuICBjb25zdCBmaWxlc1RvUmVhZDogc3RyaW5nW10gPSBbXTtcblxuICBjb25zdCBsaW5lc09mQ29udGV4dCA9XG4gICAgb3B0aW9ucyAmJiBvcHRpb25zLmZyYW1lQ29udGV4dExpbmVzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmZyYW1lQ29udGV4dExpbmVzIDogREVGQVVMVF9MSU5FU19PRl9DT05URVhUO1xuXG4gIGNvbnN0IGZyYW1lczogU3RhY2tGcmFtZVtdID0gc3RhY2subWFwKGZyYW1lID0+IHtcbiAgICBjb25zdCBwYXJzZWRGcmFtZTogU3RhY2tGcmFtZSA9IHtcbiAgICAgIGNvbG5vOiBmcmFtZS5jb2x1bW5OdW1iZXIsXG4gICAgICBmaWxlbmFtZTogZnJhbWUuZmlsZU5hbWU/LnN0YXJ0c1dpdGgoJ2ZpbGU6Ly8nKSA/IGZyYW1lLmZpbGVOYW1lLnN1YnN0cig3KSA6IGZyYW1lLmZpbGVOYW1lIHx8ICcnLFxuICAgICAgZnVuY3Rpb246IGdldEZ1bmN0aW9uKGZyYW1lKSxcbiAgICAgIGxpbmVubzogZnJhbWUubGluZU51bWJlcixcbiAgICB9O1xuXG4gICAgY29uc3QgaXNJbnRlcm5hbCA9XG4gICAgICBmcmFtZS5uYXRpdmUgfHxcbiAgICAgIChwYXJzZWRGcmFtZS5maWxlbmFtZSAmJlxuICAgICAgICAhcGFyc2VkRnJhbWUuZmlsZW5hbWUuc3RhcnRzV2l0aCgnLycpICYmXG4gICAgICAgICFwYXJzZWRGcmFtZS5maWxlbmFtZS5zdGFydHNXaXRoKCcuJykgJiZcbiAgICAgICAgcGFyc2VkRnJhbWUuZmlsZW5hbWUuaW5kZXhPZignOlxcXFwnKSAhPT0gMSk7XG5cbiAgICAvLyBpbl9hcHAgaXMgYWxsIHRoYXQncyBub3QgYW4gaW50ZXJuYWwgTm9kZSBmdW5jdGlvbiBvciBhIG1vZHVsZSB3aXRoaW4gbm9kZV9tb2R1bGVzXG4gICAgLy8gbm90ZSB0aGF0IGlzTmF0aXZlIGFwcGVhcnMgdG8gcmV0dXJuIHRydWUgZXZlbiBmb3Igbm9kZSBjb3JlIGxpYnJhcmllc1xuICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3JhdmVuLW5vZGUvaXNzdWVzLzE3NlxuICAgIHBhcnNlZEZyYW1lLmluX2FwcCA9XG4gICAgICAhaXNJbnRlcm5hbCAmJiBwYXJzZWRGcmFtZS5maWxlbmFtZSAhPT0gdW5kZWZpbmVkICYmIHBhcnNlZEZyYW1lLmZpbGVuYW1lLmluZGV4T2YoJ25vZGVfbW9kdWxlcy8nKSA9PT0gLTE7XG5cbiAgICAvLyBFeHRyYWN0IGEgbW9kdWxlIG5hbWUgYmFzZWQgb24gdGhlIGZpbGVuYW1lXG4gICAgaWYgKHBhcnNlZEZyYW1lLmZpbGVuYW1lKSB7XG4gICAgICBwYXJzZWRGcmFtZS5tb2R1bGUgPSBnZXRNb2R1bGUocGFyc2VkRnJhbWUuZmlsZW5hbWUpO1xuXG4gICAgICBpZiAoIWlzSW50ZXJuYWwgJiYgbGluZXNPZkNvbnRleHQgPiAwICYmIGZpbGVzVG9SZWFkLmluZGV4T2YocGFyc2VkRnJhbWUuZmlsZW5hbWUpID09PSAtMSkge1xuICAgICAgICBmaWxlc1RvUmVhZC5wdXNoKHBhcnNlZEZyYW1lLmZpbGVuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGFyc2VkRnJhbWU7XG4gIH0pO1xuXG4gIC8vIFdlIGRvIGFuIGVhcmx5IHJldHVybiBpZiB3ZSBkbyBub3Qgd2FudCB0byBmZXRjaCBjb250ZXh0IGxpZW5zXG4gIGlmIChsaW5lc09mQ29udGV4dCA8PSAwKSB7XG4gICAgcmV0dXJuIFN5bmNQcm9taXNlLnJlc29sdmUoZnJhbWVzKTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIGFkZFByZVBvc3RDb250ZXh0KGZpbGVzVG9SZWFkLCBmcmFtZXMsIGxpbmVzT2ZDb250ZXh0KTtcbiAgfSBjYXRjaCAoXykge1xuICAgIC8vIFRoaXMgaGFwcGVucyBpbiBlbGVjdHJvbiBmb3IgZXhhbXBsZSB3aGVyZSB3ZSBhcmUgbm90IGFibGUgdG8gcmVhZCBmaWxlcyBmcm9tIGFzYXIuXG4gICAgLy8gU28gaXQncyBmaW5lLCB3ZSByZWNvdmVyIGJlIGp1c3QgcmV0dXJuaW5nIGFsbCBmcmFtZXMgd2l0aG91dCBwcmUvcG9zdCBjb250ZXh0LlxuICAgIHJldHVybiBTeW5jUHJvbWlzZS5yZXNvbHZlKGZyYW1lcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGZ1bmN0aW9uIHRyaWVzIHRvIHJlYWQgdGhlIHNvdXJjZSBmaWxlcyArIGFkZGluZyBwcmUgYW5kIHBvc3QgY29udGV4dCAoc291cmNlIGNvZGUpXG4gKiB0byBhIGZyYW1lLlxuICogQHBhcmFtIGZpbGVzVG9SZWFkIHN0cmluZ1tdIG9mIGZpbGVwYXRoc1xuICogQHBhcmFtIGZyYW1lcyBTdGFja0ZyYW1lW10gY29udGFpbmcgYWxsIGZyYW1lc1xuICovXG5mdW5jdGlvbiBhZGRQcmVQb3N0Q29udGV4dChcbiAgZmlsZXNUb1JlYWQ6IHN0cmluZ1tdLFxuICBmcmFtZXM6IFN0YWNrRnJhbWVbXSxcbiAgbGluZXNPZkNvbnRleHQ6IG51bWJlcixcbik6IFByb21pc2VMaWtlPFN0YWNrRnJhbWVbXT4ge1xuICByZXR1cm4gbmV3IFN5bmNQcm9taXNlPFN0YWNrRnJhbWVbXT4ocmVzb2x2ZSA9PlxuICAgIHJlYWRTb3VyY2VGaWxlcyhmaWxlc1RvUmVhZCkudGhlbihzb3VyY2VGaWxlcyA9PiB7XG4gICAgICBjb25zdCByZXN1bHQgPSBmcmFtZXMubWFwKGZyYW1lID0+IHtcbiAgICAgICAgaWYgKGZyYW1lLmZpbGVuYW1lICYmIHNvdXJjZUZpbGVzW2ZyYW1lLmZpbGVuYW1lXSkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBsaW5lcyA9IChzb3VyY2VGaWxlc1tmcmFtZS5maWxlbmFtZV0gYXMgc3RyaW5nKS5zcGxpdCgnXFxuJyk7XG5cbiAgICAgICAgICAgIGFkZENvbnRleHRUb0ZyYW1lKGxpbmVzLCBmcmFtZSwgbGluZXNPZkNvbnRleHQpO1xuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIC8vIGFub21hbHksIGJlaW5nIGRlZmVuc2l2ZSBpbiBjYXNlXG4gICAgICAgICAgICAvLyB1bmxpa2VseSB0byBldmVyIGhhcHBlbiBpbiBwcmFjdGljZSBidXQgY2FuIGRlZmluaXRlbHkgaGFwcGVuIGluIHRoZW9yeVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZnJhbWU7XG4gICAgICB9KTtcblxuICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgIH0pLFxuICApO1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEV4Y2VwdGlvbkZyb21FcnJvcihlcnJvcjogRXJyb3IsIG9wdGlvbnM/OiBOb2RlT3B0aW9ucyk6IFByb21pc2VMaWtlPEV4Y2VwdGlvbj4ge1xuICBjb25zdCBuYW1lID0gZXJyb3IubmFtZSB8fCBlcnJvci5jb25zdHJ1Y3Rvci5uYW1lO1xuICBjb25zdCBzdGFjayA9IGV4dHJhY3RTdGFja0Zyb21FcnJvcihlcnJvcik7XG4gIHJldHVybiBuZXcgU3luY1Byb21pc2U8RXhjZXB0aW9uPihyZXNvbHZlID0+XG4gICAgcGFyc2VTdGFjayhzdGFjaywgb3B0aW9ucykudGhlbihmcmFtZXMgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICBzdGFja3RyYWNlOiB7XG4gICAgICAgICAgZnJhbWVzOiBwcmVwYXJlRnJhbWVzRm9yRXZlbnQoZnJhbWVzKSxcbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogbmFtZSxcbiAgICAgICAgdmFsdWU6IGVycm9yLm1lc3NhZ2UsXG4gICAgICB9O1xuICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgIH0pLFxuICApO1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRXJyb3IoZXJyb3I6IEV4dGVuZGVkRXJyb3IsIG9wdGlvbnM/OiBOb2RlT3B0aW9ucyk6IFByb21pc2VMaWtlPEV2ZW50PiB7XG4gIHJldHVybiBuZXcgU3luY1Byb21pc2U8RXZlbnQ+KHJlc29sdmUgPT5cbiAgICBnZXRFeGNlcHRpb25Gcm9tRXJyb3IoZXJyb3IsIG9wdGlvbnMpLnRoZW4oKGV4Y2VwdGlvbjogRXhjZXB0aW9uKSA9PiB7XG4gICAgICByZXNvbHZlKHtcbiAgICAgICAgZXhjZXB0aW9uOiB7XG4gICAgICAgICAgdmFsdWVzOiBbZXhjZXB0aW9uXSxcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0pLFxuICApO1xufVxuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmVGcmFtZXNGb3JFdmVudChzdGFjazogU3RhY2tGcmFtZVtdKTogU3RhY2tGcmFtZVtdIHtcbiAgaWYgKCFzdGFjayB8fCAhc3RhY2subGVuZ3RoKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgbGV0IGxvY2FsU3RhY2sgPSBzdGFjaztcbiAgY29uc3QgZmlyc3RGcmFtZUZ1bmN0aW9uID0gbG9jYWxTdGFja1swXS5mdW5jdGlvbiB8fCAnJztcblxuICBpZiAoZmlyc3RGcmFtZUZ1bmN0aW9uLmluZGV4T2YoJ2NhcHR1cmVNZXNzYWdlJykgIT09IC0xIHx8IGZpcnN0RnJhbWVGdW5jdGlvbi5pbmRleE9mKCdjYXB0dXJlRXhjZXB0aW9uJykgIT09IC0xKSB7XG4gICAgbG9jYWxTdGFjayA9IGxvY2FsU3RhY2suc2xpY2UoMSk7XG4gIH1cblxuICAvLyBUaGUgZnJhbWUgd2hlcmUgdGhlIGNyYXNoIGhhcHBlbmVkLCBzaG91bGQgYmUgdGhlIGxhc3QgZW50cnkgaW4gdGhlIGFycmF5XG4gIHJldHVybiBsb2NhbFN0YWNrLnJldmVyc2UoKTtcbn1cbiIsICIvLyBUT0RPOiBSZW1vdmUgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZSBhbmQgcmVseSBvbmx5IG9uIEBzZW50cnkvY29yZSBTREtfVkVSU0lPTiBhbmQgU2RrTWV0YWRhdGFcbmV4cG9ydCBjb25zdCBTREtfTkFNRSA9ICdzZW50cnkuamF2YXNjcmlwdC5ub2RlJztcbiIsICJpbXBvcnQgeyBBUEksIFNES19WRVJTSU9OIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7XG4gIERzblByb3RvY29sLFxuICBFdmVudCxcbiAgUmVzcG9uc2UsXG4gIFNlbnRyeVJlcXVlc3QsXG4gIFNlbnRyeVJlcXVlc3RUeXBlLFxuICBTZXNzaW9uLFxuICBTZXNzaW9uQWdncmVnYXRlcyxcbiAgU3RhdHVzLFxuICBUcmFuc3BvcnQsXG4gIFRyYW5zcG9ydE9wdGlvbnMsXG59IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgbG9nZ2VyLCBwYXJzZVJldHJ5QWZ0ZXJIZWFkZXIsIFByb21pc2VCdWZmZXIsIFNlbnRyeUVycm9yIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5pbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBodHRwIGZyb20gJ2h0dHAnO1xuaW1wb3J0ICogYXMgaHR0cHMgZnJvbSAnaHR0cHMnO1xuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJztcblxuaW1wb3J0IHsgU0RLX05BTUUgfSBmcm9tICcuLi8uLi92ZXJzaW9uJztcbmltcG9ydCB7IEhUVFBNb2R1bGUgfSBmcm9tICcuL2h0dHAtbW9kdWxlJztcblxuZXhwb3J0IHR5cGUgVVJMUGFydHMgPSBQaWNrPFVSTCwgJ2hvc3RuYW1lJyB8ICdwYXRobmFtZScgfCAncG9ydCcgfCAncHJvdG9jb2wnPjtcbmV4cG9ydCB0eXBlIFVybFBhcnNlciA9ICh1cmw6IHN0cmluZykgPT4gVVJMUGFydHM7XG5cbmNvbnN0IENBVEVHT1JZX01BUFBJTkc6IHtcbiAgW2tleSBpbiBTZW50cnlSZXF1ZXN0VHlwZV06IHN0cmluZztcbn0gPSB7XG4gIGV2ZW50OiAnZXJyb3InLFxuICB0cmFuc2FjdGlvbjogJ3RyYW5zYWN0aW9uJyxcbiAgc2Vzc2lvbjogJ3Nlc3Npb24nLFxuICBhdHRhY2htZW50OiAnYXR0YWNobWVudCcsXG59O1xuXG4vKiogQmFzZSBUcmFuc3BvcnQgY2xhc3MgaW1wbGVtZW50YXRpb24gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlVHJhbnNwb3J0IGltcGxlbWVudHMgVHJhbnNwb3J0IHtcbiAgLyoqIFRoZSBBZ2VudCB1c2VkIGZvciBjb3JyZXNwb25kaW5nIHRyYW5zcG9ydCAqL1xuICBwdWJsaWMgbW9kdWxlPzogSFRUUE1vZHVsZTtcblxuICAvKiogVGhlIEFnZW50IHVzZWQgZm9yIGNvcnJlc3BvbmRpbmcgdHJhbnNwb3J0ICovXG4gIHB1YmxpYyBjbGllbnQ/OiBodHRwLkFnZW50IHwgaHR0cHMuQWdlbnQ7XG5cbiAgLyoqIEFQSSBvYmplY3QgKi9cbiAgcHJvdGVjdGVkIF9hcGk6IEFQSTtcblxuICAvKiogQSBzaW1wbGUgYnVmZmVyIGhvbGRpbmcgYWxsIHJlcXVlc3RzLiAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX2J1ZmZlcjogUHJvbWlzZUJ1ZmZlcjxSZXNwb25zZT4gPSBuZXcgUHJvbWlzZUJ1ZmZlcigzMCk7XG5cbiAgLyoqIExvY2tzIHRyYW5zcG9ydCBhZnRlciByZWNlaXZpbmcgcmF0ZSBsaW1pdHMgaW4gYSByZXNwb25zZSAqL1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgX3JhdGVMaW1pdHM6IFJlY29yZDxzdHJpbmcsIERhdGU+ID0ge307XG5cbiAgLyoqIENyZWF0ZSBpbnN0YW5jZSBhbmQgc2V0IHRoaXMuZHNuICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgb3B0aW9uczogVHJhbnNwb3J0T3B0aW9ucykge1xuICAgIHRoaXMuX2FwaSA9IG5ldyBBUEkob3B0aW9ucy5kc24sIG9wdGlvbnMuX21ldGFkYXRhLCBvcHRpb25zLnR1bm5lbCk7XG4gIH1cblxuICAvKiogRGVmYXVsdCBmdW5jdGlvbiB1c2VkIHRvIHBhcnNlIFVSTHMgKi9cbiAgcHVibGljIHVybFBhcnNlcjogVXJsUGFyc2VyID0gdXJsID0+IG5ldyBVUkwodXJsKTtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZW5kRXZlbnQoXzogRXZlbnQpOiBQcm9taXNlTGlrZTxSZXNwb25zZT4ge1xuICAgIHRocm93IG5ldyBTZW50cnlFcnJvcignVHJhbnNwb3J0IENsYXNzIGhhcyB0byBpbXBsZW1lbnQgYHNlbmRFdmVudGAgbWV0aG9kLicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgY2xvc2UodGltZW91dD86IG51bWJlcik6IFByb21pc2VMaWtlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmRyYWluKHRpbWVvdXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3RzIHByb3h5IHNldHRpbmdzIGZyb20gY2xpZW50IG9wdGlvbnMgYW5kIGVudiB2YXJpYWJsZXMuXG4gICAqXG4gICAqIEhvbm9ycyBgbm9fcHJveHlgIGVudiB2YXJpYWJsZSB3aXRoIHRoZSBoaWdoZXN0IHByaW9yaXR5IHRvIGFsbG93IGZvciBob3N0cyBleGNsdXNpb24uXG4gICAqXG4gICAqIEFuIG9yZGVyIG9mIHByaW9yaXR5IGZvciBhdmFpbGFibGUgcHJvdG9jb2xzIGlzOlxuICAgKiBgaHR0cGAgID0+IGBvcHRpb25zLmh0dHBQcm94eWAgfCBgcHJvY2Vzcy5lbnYuaHR0cF9wcm94eWBcbiAgICogYGh0dHBzYCA9PiBgb3B0aW9ucy5odHRwc1Byb3h5YCB8IGBvcHRpb25zLmh0dHBQcm94eWAgfCBgcHJvY2Vzcy5lbnYuaHR0cHNfcHJveHlgIHwgYHByb2Nlc3MuZW52Lmh0dHBfcHJveHlgXG4gICAqL1xuICBwcm90ZWN0ZWQgX2dldFByb3h5KHByb3RvY29sOiBEc25Qcm90b2NvbCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgeyBub19wcm94eSwgaHR0cF9wcm94eSwgaHR0cHNfcHJveHkgfSA9IHByb2Nlc3MuZW52O1xuICAgIGNvbnN0IHsgaHR0cFByb3h5LCBodHRwc1Byb3h5IH0gPSB0aGlzLm9wdGlvbnM7XG4gICAgY29uc3QgcHJveHkgPSBwcm90b2NvbCA9PT0gJ2h0dHAnID8gaHR0cFByb3h5IHx8IGh0dHBfcHJveHkgOiBodHRwc1Byb3h5IHx8IGh0dHBQcm94eSB8fCBodHRwc19wcm94eSB8fCBodHRwX3Byb3h5O1xuXG4gICAgaWYgKCFub19wcm94eSkge1xuICAgICAgcmV0dXJuIHByb3h5O1xuICAgIH1cblxuICAgIGNvbnN0IHsgaG9zdCwgcG9ydCB9ID0gdGhpcy5fYXBpLmdldERzbigpO1xuICAgIGZvciAoY29uc3QgbnAgb2Ygbm9fcHJveHkuc3BsaXQoJywnKSkge1xuICAgICAgaWYgKGhvc3QuZW5kc1dpdGgobnApIHx8IGAke2hvc3R9OiR7cG9ydH1gLmVuZHNXaXRoKG5wKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb3h5O1xuICB9XG5cbiAgLyoqIFJldHVybnMgYSBidWlsZCByZXF1ZXN0IG9wdGlvbiBvYmplY3QgdXNlZCBieSByZXF1ZXN0ICovXG4gIHByb3RlY3RlZCBfZ2V0UmVxdWVzdE9wdGlvbnModXJsUGFydHM6IFVSTFBhcnRzKTogaHR0cC5SZXF1ZXN0T3B0aW9ucyB8IGh0dHBzLlJlcXVlc3RPcHRpb25zIHtcbiAgICBjb25zdCBoZWFkZXJzID0ge1xuICAgICAgLi4udGhpcy5fYXBpLmdldFJlcXVlc3RIZWFkZXJzKFNES19OQU1FLCBTREtfVkVSU0lPTiksXG4gICAgICAuLi50aGlzLm9wdGlvbnMuaGVhZGVycyxcbiAgICB9O1xuICAgIGNvbnN0IHsgaG9zdG5hbWUsIHBhdGhuYW1lLCBwb3J0LCBwcm90b2NvbCB9ID0gdXJsUGFydHM7XG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iLzM4MTQ2ZTcxN2ZlZDJmYWJlM2FhY2I2NTQwZDgzOTQ3NWUwY2UxYzYvbGliL2ludGVybmFsL3VybC5qcyNMMTI2OC1MMTI5MFxuICAgIC8vIFdlIGlnbm9yZSB0aGUgcXVlcnkgc3RyaW5nIG9uIHB1cnBvc2VcbiAgICBjb25zdCBwYXRoID0gYCR7cGF0aG5hbWV9YDtcblxuICAgIHJldHVybiB7XG4gICAgICBhZ2VudDogdGhpcy5jbGllbnQsXG4gICAgICBoZWFkZXJzLFxuICAgICAgaG9zdG5hbWUsXG4gICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgIHBhdGgsXG4gICAgICBwb3J0LFxuICAgICAgcHJvdG9jb2wsXG4gICAgICAuLi4odGhpcy5vcHRpb25zLmNhQ2VydHMgJiYge1xuICAgICAgICBjYTogZnMucmVhZEZpbGVTeW5jKHRoaXMub3B0aW9ucy5jYUNlcnRzKSxcbiAgICAgIH0pLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdGltZSB0aGF0IGdpdmVuIGNhdGVnb3J5IGlzIGRpc2FibGVkIHVudGlsIGZvciByYXRlIGxpbWl0aW5nXG4gICAqL1xuICBwcm90ZWN0ZWQgX2Rpc2FibGVkVW50aWwocmVxdWVzdFR5cGU6IFNlbnRyeVJlcXVlc3RUeXBlKTogRGF0ZSB7XG4gICAgY29uc3QgY2F0ZWdvcnkgPSBDQVRFR09SWV9NQVBQSU5HW3JlcXVlc3RUeXBlXTtcbiAgICByZXR1cm4gdGhpcy5fcmF0ZUxpbWl0c1tjYXRlZ29yeV0gfHwgdGhpcy5fcmF0ZUxpbWl0cy5hbGw7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgY2F0ZWdvcnkgaXMgcmF0ZSBsaW1pdGVkXG4gICAqL1xuICBwcm90ZWN0ZWQgX2lzUmF0ZUxpbWl0ZWQocmVxdWVzdFR5cGU6IFNlbnRyeVJlcXVlc3RUeXBlKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkVW50aWwocmVxdWVzdFR5cGUpID4gbmV3IERhdGUoRGF0ZS5ub3coKSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyBpbnRlcm5hbCBfcmF0ZUxpbWl0cyBmcm9tIGluY29taW5nIGhlYWRlcnMuIFJldHVybnMgdHJ1ZSBpZiBoZWFkZXJzIGNvbnRhaW5zIGEgbm9uLWVtcHR5IHJhdGUgbGltaXRpbmcgaGVhZGVyLlxuICAgKi9cbiAgcHJvdGVjdGVkIF9oYW5kbGVSYXRlTGltaXQoaGVhZGVyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbD4pOiBib29sZWFuIHtcbiAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJsSGVhZGVyID0gaGVhZGVyc1sneC1zZW50cnktcmF0ZS1saW1pdHMnXTtcbiAgICBjb25zdCByYUhlYWRlciA9IGhlYWRlcnNbJ3JldHJ5LWFmdGVyJ107XG5cbiAgICBpZiAocmxIZWFkZXIpIHtcbiAgICAgIC8vIHJhdGUgbGltaXQgaGVhZGVycyBhcmUgb2YgdGhlIGZvcm1cbiAgICAgIC8vICAgICA8aGVhZGVyPiw8aGVhZGVyPiwuLlxuICAgICAgLy8gd2hlcmUgZWFjaCA8aGVhZGVyPiBpcyBvZiB0aGUgZm9ybVxuICAgICAgLy8gICAgIDxyZXRyeV9hZnRlcj46IDxjYXRlZ29yaWVzPjogPHNjb3BlPjogPHJlYXNvbl9jb2RlPlxuICAgICAgLy8gd2hlcmVcbiAgICAgIC8vICAgICA8cmV0cnlfYWZ0ZXI+IGlzIGEgZGVsYXkgaW4gbXNcbiAgICAgIC8vICAgICA8Y2F0ZWdvcmllcz4gaXMgdGhlIGV2ZW50IHR5cGUocykgKGVycm9yLCB0cmFuc2FjdGlvbiwgZXRjKSBiZWluZyByYXRlIGxpbWl0ZWQgYW5kIGlzIG9mIHRoZSBmb3JtXG4gICAgICAvLyAgICAgICAgIDxjYXRlZ29yeT47PGNhdGVnb3J5PjsuLi5cbiAgICAgIC8vICAgICA8c2NvcGU+IGlzIHdoYXQncyBiZWluZyBsaW1pdGVkIChvcmcsIHByb2plY3QsIG9yIGtleSkgLSBpZ25vcmVkIGJ5IFNES1xuICAgICAgLy8gICAgIDxyZWFzb25fY29kZT4gaXMgYW4gYXJiaXRyYXJ5IHN0cmluZyBsaWtlIFwib3JnX3F1b3RhXCIgLSBpZ25vcmVkIGJ5IFNES1xuICAgICAgZm9yIChjb25zdCBsaW1pdCBvZiBybEhlYWRlci50cmltKCkuc3BsaXQoJywnKSkge1xuICAgICAgICBjb25zdCBwYXJhbWV0ZXJzID0gbGltaXQuc3BsaXQoJzonLCAyKTtcbiAgICAgICAgY29uc3QgaGVhZGVyRGVsYXkgPSBwYXJzZUludChwYXJhbWV0ZXJzWzBdLCAxMCk7XG4gICAgICAgIGNvbnN0IGRlbGF5ID0gKCFpc05hTihoZWFkZXJEZWxheSkgPyBoZWFkZXJEZWxheSA6IDYwKSAqIDEwMDA7IC8vIDYwc2VjIGRlZmF1bHRcbiAgICAgICAgZm9yIChjb25zdCBjYXRlZ29yeSBvZiAocGFyYW1ldGVyc1sxXSAmJiBwYXJhbWV0ZXJzWzFdLnNwbGl0KCc7JykpIHx8IFsnYWxsJ10pIHtcbiAgICAgICAgICAvLyBjYXRlZ29yaWVzQWxsb3dlZCBpcyBhZGRlZCBoZXJlIHRvIGVuc3VyZSB3ZSBhcmUgb25seSBzdG9yaW5nIHJhdGUgbGltaXRzIGZvciBjYXRlZ29yaWVzIHdlIHN1cHBvcnQgaW4gdGhpc1xuICAgICAgICAgIC8vIHNkayBhbmQgYW55IGNhdGVnb3JpZXMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCB3aWxsIG5vdCBiZSBhZGRlZCByZWR1bmRhbnRseSB0byB0aGUgcmF0ZUxpbWl0cyBvYmplY3RcbiAgICAgICAgICBjb25zdCBjYXRlZ29yaWVzQWxsb3dlZCA9IFtcbiAgICAgICAgICAgIC4uLihPYmplY3Qua2V5cyhDQVRFR09SWV9NQVBQSU5HKSBhcyBbU2VudHJ5UmVxdWVzdFR5cGVdKS5tYXAoayA9PiBDQVRFR09SWV9NQVBQSU5HW2tdKSxcbiAgICAgICAgICAgICdhbGwnLFxuICAgICAgICAgIF07XG4gICAgICAgICAgaWYgKGNhdGVnb3JpZXNBbGxvd2VkLmluY2x1ZGVzKGNhdGVnb3J5KSkgdGhpcy5fcmF0ZUxpbWl0c1tjYXRlZ29yeV0gPSBuZXcgRGF0ZShub3cgKyBkZWxheSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSBpZiAocmFIZWFkZXIpIHtcbiAgICAgIHRoaXMuX3JhdGVMaW1pdHMuYWxsID0gbmV3IERhdGUobm93ICsgcGFyc2VSZXRyeUFmdGVySGVhZGVyKG5vdywgcmFIZWFkZXIpKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHJvdGVjdGVkIGFzeW5jIF9zZW5kKFxuICAgIHNlbnRyeVJlcXVlc3Q6IFNlbnRyeVJlcXVlc3QsXG4gICAgb3JpZ2luYWxQYXlsb2FkPzogRXZlbnQgfCBTZXNzaW9uIHwgU2Vzc2lvbkFnZ3JlZ2F0ZXMsXG4gICk6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgICBpZiAoIXRoaXMubW9kdWxlKSB7XG4gICAgICB0aHJvdyBuZXcgU2VudHJ5RXJyb3IoJ05vIG1vZHVsZSBhdmFpbGFibGUnKTtcbiAgICB9XG4gICAgaWYgKG9yaWdpbmFsUGF5bG9hZCAmJiB0aGlzLl9pc1JhdGVMaW1pdGVkKHNlbnRyeVJlcXVlc3QudHlwZSkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCh7XG4gICAgICAgIHBheWxvYWQ6IG9yaWdpbmFsUGF5bG9hZCxcbiAgICAgICAgdHlwZTogc2VudHJ5UmVxdWVzdC50eXBlLFxuICAgICAgICByZWFzb246IGBUcmFuc3BvcnQgZm9yICR7c2VudHJ5UmVxdWVzdC50eXBlfSByZXF1ZXN0cyBsb2NrZWQgdGlsbCAke3RoaXMuX2Rpc2FibGVkVW50aWwoXG4gICAgICAgICAgc2VudHJ5UmVxdWVzdC50eXBlLFxuICAgICAgICApfSBkdWUgdG8gdG9vIG1hbnkgcmVxdWVzdHMuYCxcbiAgICAgICAgc3RhdHVzOiA0MjksXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fYnVmZmVyLmFkZChcbiAgICAgICgpID0+XG4gICAgICAgIG5ldyBQcm9taXNlPFJlc3BvbnNlPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLm1vZHVsZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IFNlbnRyeUVycm9yKCdObyBtb2R1bGUgYXZhaWxhYmxlJyk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9nZXRSZXF1ZXN0T3B0aW9ucyh0aGlzLnVybFBhcnNlcihzZW50cnlSZXF1ZXN0LnVybCkpO1xuICAgICAgICAgIGNvbnN0IHJlcSA9IHRoaXMubW9kdWxlLnJlcXVlc3Qob3B0aW9ucywgcmVzID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXR1c0NvZGUgPSByZXMuc3RhdHVzQ29kZSB8fCA1MDA7XG4gICAgICAgICAgICBjb25zdCBzdGF0dXMgPSBTdGF0dXMuZnJvbUh0dHBDb2RlKHN0YXR1c0NvZGUpO1xuXG4gICAgICAgICAgICByZXMuc2V0RW5jb2RpbmcoJ3V0ZjgnKTtcblxuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBcIktleS12YWx1ZSBwYWlycyBvZiBoZWFkZXIgbmFtZXMgYW5kIHZhbHVlcy4gSGVhZGVyIG5hbWVzIGFyZSBsb3dlci1jYXNlZC5cIlxuICAgICAgICAgICAgICogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9odHRwLmh0bWwjaHR0cF9tZXNzYWdlX2hlYWRlcnNcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbGV0IHJldHJ5QWZ0ZXJIZWFkZXIgPSByZXMuaGVhZGVycyA/IHJlcy5oZWFkZXJzWydyZXRyeS1hZnRlciddIDogJyc7XG4gICAgICAgICAgICByZXRyeUFmdGVySGVhZGVyID0gKEFycmF5LmlzQXJyYXkocmV0cnlBZnRlckhlYWRlcikgPyByZXRyeUFmdGVySGVhZGVyWzBdIDogcmV0cnlBZnRlckhlYWRlcikgYXMgc3RyaW5nO1xuXG4gICAgICAgICAgICBsZXQgcmxIZWFkZXIgPSByZXMuaGVhZGVycyA/IHJlcy5oZWFkZXJzWyd4LXNlbnRyeS1yYXRlLWxpbWl0cyddIDogJyc7XG4gICAgICAgICAgICBybEhlYWRlciA9IChBcnJheS5pc0FycmF5KHJsSGVhZGVyKSA/IHJsSGVhZGVyWzBdIDogcmxIZWFkZXIpIGFzIHN0cmluZztcblxuICAgICAgICAgICAgY29uc3QgaGVhZGVycyA9IHtcbiAgICAgICAgICAgICAgJ3gtc2VudHJ5LXJhdGUtbGltaXRzJzogcmxIZWFkZXIsXG4gICAgICAgICAgICAgICdyZXRyeS1hZnRlcic6IHJldHJ5QWZ0ZXJIZWFkZXIsXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBsaW1pdGVkID0gdGhpcy5faGFuZGxlUmF0ZUxpbWl0KGhlYWRlcnMpO1xuICAgICAgICAgICAgaWYgKGxpbWl0ZWQpXG4gICAgICAgICAgICAgIGxvZ2dlci53YXJuKFxuICAgICAgICAgICAgICAgIGBUb28gbWFueSAke3NlbnRyeVJlcXVlc3QudHlwZX0gcmVxdWVzdHMsIGJhY2tpbmcgb2ZmIHVudGlsOiAke3RoaXMuX2Rpc2FibGVkVW50aWwoXG4gICAgICAgICAgICAgICAgICBzZW50cnlSZXF1ZXN0LnR5cGUsXG4gICAgICAgICAgICAgICAgKX1gLFxuICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICBpZiAoc3RhdHVzID09PSBTdGF0dXMuU3VjY2Vzcykge1xuICAgICAgICAgICAgICByZXNvbHZlKHsgc3RhdHVzIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgbGV0IHJlamVjdGlvbk1lc3NhZ2UgPSBgSFRUUCBFcnJvciAoJHtzdGF0dXNDb2RlfSlgO1xuICAgICAgICAgICAgICBpZiAocmVzLmhlYWRlcnMgJiYgcmVzLmhlYWRlcnNbJ3gtc2VudHJ5LWVycm9yJ10pIHtcbiAgICAgICAgICAgICAgICByZWplY3Rpb25NZXNzYWdlICs9IGA6ICR7cmVzLmhlYWRlcnNbJ3gtc2VudHJ5LWVycm9yJ119YDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZWplY3QobmV3IFNlbnRyeUVycm9yKHJlamVjdGlvbk1lc3NhZ2UpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRm9yY2UgdGhlIHNvY2tldCB0byBkcmFpblxuICAgICAgICAgICAgcmVzLm9uKCdkYXRhJywgKCkgPT4ge1xuICAgICAgICAgICAgICAvLyBEcmFpblxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXMub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgLy8gRHJhaW5cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJlcS5vbignZXJyb3InLCByZWplY3QpO1xuICAgICAgICAgIHJlcS5lbmQoc2VudHJ5UmVxdWVzdC5ib2R5KTtcbiAgICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuIiwgIi8qKlxuICogSGVscGVycy5cbiAqL1xuXG52YXIgcyA9IDEwMDA7XG52YXIgbSA9IHMgKiA2MDtcbnZhciBoID0gbSAqIDYwO1xudmFyIGQgPSBoICogMjQ7XG52YXIgdyA9IGQgKiA3O1xudmFyIHkgPSBkICogMzY1LjI1O1xuXG4vKipcbiAqIFBhcnNlIG9yIGZvcm1hdCB0aGUgZ2l2ZW4gYHZhbGAuXG4gKlxuICogT3B0aW9uczpcbiAqXG4gKiAgLSBgbG9uZ2AgdmVyYm9zZSBmb3JtYXR0aW5nIFtmYWxzZV1cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IHZhbFxuICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXVxuICogQHRocm93cyB7RXJyb3J9IHRocm93IGFuIGVycm9yIGlmIHZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgbnVtYmVyXG4gKiBAcmV0dXJuIHtTdHJpbmd8TnVtYmVyfVxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKHZhbCwgb3B0aW9ucykge1xuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHR5cGUgPSB0eXBlb2YgdmFsO1xuICBpZiAodHlwZSA9PT0gJ3N0cmluZycgJiYgdmFsLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gcGFyc2UodmFsKTtcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWwpKSB7XG4gICAgcmV0dXJuIG9wdGlvbnMubG9uZyA/IGZtdExvbmcodmFsKSA6IGZtdFNob3J0KHZhbCk7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKFxuICAgICd2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIHZhbGlkIG51bWJlci4gdmFsPScgK1xuICAgICAgSlNPTi5zdHJpbmdpZnkodmFsKVxuICApO1xufTtcblxuLyoqXG4gKiBQYXJzZSB0aGUgZ2l2ZW4gYHN0cmAgYW5kIHJldHVybiBtaWxsaXNlY29uZHMuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHJldHVybiB7TnVtYmVyfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gcGFyc2Uoc3RyKSB7XG4gIHN0ciA9IFN0cmluZyhzdHIpO1xuICBpZiAoc3RyLmxlbmd0aCA+IDEwMCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbWF0Y2ggPSAvXigtPyg/OlxcZCspP1xcLj9cXGQrKSAqKG1pbGxpc2Vjb25kcz98bXNlY3M/fG1zfHNlY29uZHM/fHNlY3M/fHN8bWludXRlcz98bWlucz98bXxob3Vycz98aHJzP3xofGRheXM/fGR8d2Vla3M/fHd8eWVhcnM/fHlycz98eSk/JC9pLmV4ZWMoXG4gICAgc3RyXG4gICk7XG4gIGlmICghbWF0Y2gpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgdmFyIG4gPSBwYXJzZUZsb2F0KG1hdGNoWzFdKTtcbiAgdmFyIHR5cGUgPSAobWF0Y2hbMl0gfHwgJ21zJykudG9Mb3dlckNhc2UoKTtcbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAneWVhcnMnOlxuICAgIGNhc2UgJ3llYXInOlxuICAgIGNhc2UgJ3lycyc6XG4gICAgY2FzZSAneXInOlxuICAgIGNhc2UgJ3knOlxuICAgICAgcmV0dXJuIG4gKiB5O1xuICAgIGNhc2UgJ3dlZWtzJzpcbiAgICBjYXNlICd3ZWVrJzpcbiAgICBjYXNlICd3JzpcbiAgICAgIHJldHVybiBuICogdztcbiAgICBjYXNlICdkYXlzJzpcbiAgICBjYXNlICdkYXknOlxuICAgIGNhc2UgJ2QnOlxuICAgICAgcmV0dXJuIG4gKiBkO1xuICAgIGNhc2UgJ2hvdXJzJzpcbiAgICBjYXNlICdob3VyJzpcbiAgICBjYXNlICdocnMnOlxuICAgIGNhc2UgJ2hyJzpcbiAgICBjYXNlICdoJzpcbiAgICAgIHJldHVybiBuICogaDtcbiAgICBjYXNlICdtaW51dGVzJzpcbiAgICBjYXNlICdtaW51dGUnOlxuICAgIGNhc2UgJ21pbnMnOlxuICAgIGNhc2UgJ21pbic6XG4gICAgY2FzZSAnbSc6XG4gICAgICByZXR1cm4gbiAqIG07XG4gICAgY2FzZSAnc2Vjb25kcyc6XG4gICAgY2FzZSAnc2Vjb25kJzpcbiAgICBjYXNlICdzZWNzJzpcbiAgICBjYXNlICdzZWMnOlxuICAgIGNhc2UgJ3MnOlxuICAgICAgcmV0dXJuIG4gKiBzO1xuICAgIGNhc2UgJ21pbGxpc2Vjb25kcyc6XG4gICAgY2FzZSAnbWlsbGlzZWNvbmQnOlxuICAgIGNhc2UgJ21zZWNzJzpcbiAgICBjYXNlICdtc2VjJzpcbiAgICBjYXNlICdtcyc6XG4gICAgICByZXR1cm4gbjtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIFNob3J0IGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdFNob3J0KG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGQpICsgJ2QnO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBoKSArICdoJztcbiAgfVxuICBpZiAobXNBYnMgPj0gbSkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbSkgKyAnbSc7XG4gIH1cbiAgaWYgKG1zQWJzID49IHMpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIHMpICsgJ3MnO1xuICB9XG4gIHJldHVybiBtcyArICdtcyc7XG59XG5cbi8qKlxuICogTG9uZyBmb3JtYXQgZm9yIGBtc2AuXG4gKlxuICogQHBhcmFtIHtOdW1iZXJ9IG1zXG4gKiBAcmV0dXJuIHtTdHJpbmd9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBmbXRMb25nKG1zKSB7XG4gIHZhciBtc0FicyA9IE1hdGguYWJzKG1zKTtcbiAgaWYgKG1zQWJzID49IGQpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgZCwgJ2RheScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBoKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIGgsICdob3VyJyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IG0pIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgbSwgJ21pbnV0ZScpO1xuICB9XG4gIGlmIChtc0FicyA+PSBzKSB7XG4gICAgcmV0dXJuIHBsdXJhbChtcywgbXNBYnMsIHMsICdzZWNvbmQnKTtcbiAgfVxuICByZXR1cm4gbXMgKyAnIG1zJztcbn1cblxuLyoqXG4gKiBQbHVyYWxpemF0aW9uIGhlbHBlci5cbiAqL1xuXG5mdW5jdGlvbiBwbHVyYWwobXMsIG1zQWJzLCBuLCBuYW1lKSB7XG4gIHZhciBpc1BsdXJhbCA9IG1zQWJzID49IG4gKiAxLjU7XG4gIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gbikgKyAnICcgKyBuYW1lICsgKGlzUGx1cmFsID8gJ3MnIDogJycpO1xufVxuIiwgIlxuLyoqXG4gKiBUaGlzIGlzIHRoZSBjb21tb24gbG9naWMgZm9yIGJvdGggdGhlIE5vZGUuanMgYW5kIHdlYiBicm93c2VyXG4gKiBpbXBsZW1lbnRhdGlvbnMgb2YgYGRlYnVnKClgLlxuICovXG5cbmZ1bmN0aW9uIHNldHVwKGVudikge1xuXHRjcmVhdGVEZWJ1Zy5kZWJ1ZyA9IGNyZWF0ZURlYnVnO1xuXHRjcmVhdGVEZWJ1Zy5kZWZhdWx0ID0gY3JlYXRlRGVidWc7XG5cdGNyZWF0ZURlYnVnLmNvZXJjZSA9IGNvZXJjZTtcblx0Y3JlYXRlRGVidWcuZGlzYWJsZSA9IGRpc2FibGU7XG5cdGNyZWF0ZURlYnVnLmVuYWJsZSA9IGVuYWJsZTtcblx0Y3JlYXRlRGVidWcuZW5hYmxlZCA9IGVuYWJsZWQ7XG5cdGNyZWF0ZURlYnVnLmh1bWFuaXplID0gcmVxdWlyZSgnbXMnKTtcblx0Y3JlYXRlRGVidWcuZGVzdHJveSA9IGRlc3Ryb3k7XG5cblx0T2JqZWN0LmtleXMoZW52KS5mb3JFYWNoKGtleSA9PiB7XG5cdFx0Y3JlYXRlRGVidWdba2V5XSA9IGVudltrZXldO1xuXHR9KTtcblxuXHQvKipcblx0KiBUaGUgY3VycmVudGx5IGFjdGl2ZSBkZWJ1ZyBtb2RlIG5hbWVzLCBhbmQgbmFtZXMgdG8gc2tpcC5cblx0Ki9cblxuXHRjcmVhdGVEZWJ1Zy5uYW1lcyA9IFtdO1xuXHRjcmVhdGVEZWJ1Zy5za2lwcyA9IFtdO1xuXG5cdC8qKlxuXHQqIE1hcCBvZiBzcGVjaWFsIFwiJW5cIiBoYW5kbGluZyBmdW5jdGlvbnMsIGZvciB0aGUgZGVidWcgXCJmb3JtYXRcIiBhcmd1bWVudC5cblx0KlxuXHQqIFZhbGlkIGtleSBuYW1lcyBhcmUgYSBzaW5nbGUsIGxvd2VyIG9yIHVwcGVyLWNhc2UgbGV0dGVyLCBpLmUuIFwiblwiIGFuZCBcIk5cIi5cblx0Ki9cblx0Y3JlYXRlRGVidWcuZm9ybWF0dGVycyA9IHt9O1xuXG5cdC8qKlxuXHQqIFNlbGVjdHMgYSBjb2xvciBmb3IgYSBkZWJ1ZyBuYW1lc3BhY2Vcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlIFRoZSBuYW1lc3BhY2Ugc3RyaW5nIGZvciB0aGUgZGVidWcgaW5zdGFuY2UgdG8gYmUgY29sb3JlZFxuXHQqIEByZXR1cm4ge051bWJlcnxTdHJpbmd9IEFuIEFOU0kgY29sb3IgY29kZSBmb3IgdGhlIGdpdmVuIG5hbWVzcGFjZVxuXHQqIEBhcGkgcHJpdmF0ZVxuXHQqL1xuXHRmdW5jdGlvbiBzZWxlY3RDb2xvcihuYW1lc3BhY2UpIHtcblx0XHRsZXQgaGFzaCA9IDA7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzcGFjZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0aGFzaCA9ICgoaGFzaCA8PCA1KSAtIGhhc2gpICsgbmFtZXNwYWNlLmNoYXJDb2RlQXQoaSk7XG5cdFx0XHRoYXNoIHw9IDA7IC8vIENvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxuXHRcdH1cblxuXHRcdHJldHVybiBjcmVhdGVEZWJ1Zy5jb2xvcnNbTWF0aC5hYnMoaGFzaCkgJSBjcmVhdGVEZWJ1Zy5jb2xvcnMubGVuZ3RoXTtcblx0fVxuXHRjcmVhdGVEZWJ1Zy5zZWxlY3RDb2xvciA9IHNlbGVjdENvbG9yO1xuXG5cdC8qKlxuXHQqIENyZWF0ZSBhIGRlYnVnZ2VyIHdpdGggdGhlIGdpdmVuIGBuYW1lc3BhY2VgLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVzcGFjZVxuXHQqIEByZXR1cm4ge0Z1bmN0aW9ufVxuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGNyZWF0ZURlYnVnKG5hbWVzcGFjZSkge1xuXHRcdGxldCBwcmV2VGltZTtcblx0XHRsZXQgZW5hYmxlT3ZlcnJpZGUgPSBudWxsO1xuXHRcdGxldCBuYW1lc3BhY2VzQ2FjaGU7XG5cdFx0bGV0IGVuYWJsZWRDYWNoZTtcblxuXHRcdGZ1bmN0aW9uIGRlYnVnKC4uLmFyZ3MpIHtcblx0XHRcdC8vIERpc2FibGVkP1xuXHRcdFx0aWYgKCFkZWJ1Zy5lbmFibGVkKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Y29uc3Qgc2VsZiA9IGRlYnVnO1xuXG5cdFx0XHQvLyBTZXQgYGRpZmZgIHRpbWVzdGFtcFxuXHRcdFx0Y29uc3QgY3VyciA9IE51bWJlcihuZXcgRGF0ZSgpKTtcblx0XHRcdGNvbnN0IG1zID0gY3VyciAtIChwcmV2VGltZSB8fCBjdXJyKTtcblx0XHRcdHNlbGYuZGlmZiA9IG1zO1xuXHRcdFx0c2VsZi5wcmV2ID0gcHJldlRpbWU7XG5cdFx0XHRzZWxmLmN1cnIgPSBjdXJyO1xuXHRcdFx0cHJldlRpbWUgPSBjdXJyO1xuXG5cdFx0XHRhcmdzWzBdID0gY3JlYXRlRGVidWcuY29lcmNlKGFyZ3NbMF0pO1xuXG5cdFx0XHRpZiAodHlwZW9mIGFyZ3NbMF0gIT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdC8vIEFueXRoaW5nIGVsc2UgbGV0J3MgaW5zcGVjdCB3aXRoICVPXG5cdFx0XHRcdGFyZ3MudW5zaGlmdCgnJU8nKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQXBwbHkgYW55IGBmb3JtYXR0ZXJzYCB0cmFuc2Zvcm1hdGlvbnNcblx0XHRcdGxldCBpbmRleCA9IDA7XG5cdFx0XHRhcmdzWzBdID0gYXJnc1swXS5yZXBsYWNlKC8lKFthLXpBLVolXSkvZywgKG1hdGNoLCBmb3JtYXQpID0+IHtcblx0XHRcdFx0Ly8gSWYgd2UgZW5jb3VudGVyIGFuIGVzY2FwZWQgJSB0aGVuIGRvbid0IGluY3JlYXNlIHRoZSBhcnJheSBpbmRleFxuXHRcdFx0XHRpZiAobWF0Y2ggPT09ICclJScpIHtcblx0XHRcdFx0XHRyZXR1cm4gJyUnO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGluZGV4Kys7XG5cdFx0XHRcdGNvbnN0IGZvcm1hdHRlciA9IGNyZWF0ZURlYnVnLmZvcm1hdHRlcnNbZm9ybWF0XTtcblx0XHRcdFx0aWYgKHR5cGVvZiBmb3JtYXR0ZXIgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdFx0XHRjb25zdCB2YWwgPSBhcmdzW2luZGV4XTtcblx0XHRcdFx0XHRtYXRjaCA9IGZvcm1hdHRlci5jYWxsKHNlbGYsIHZhbCk7XG5cblx0XHRcdFx0XHQvLyBOb3cgd2UgbmVlZCB0byByZW1vdmUgYGFyZ3NbaW5kZXhdYCBzaW5jZSBpdCdzIGlubGluZWQgaW4gdGhlIGBmb3JtYXRgXG5cdFx0XHRcdFx0YXJncy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0XHRcdGluZGV4LS07XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIG1hdGNoO1xuXHRcdFx0fSk7XG5cblx0XHRcdC8vIEFwcGx5IGVudi1zcGVjaWZpYyBmb3JtYXR0aW5nIChjb2xvcnMsIGV0Yy4pXG5cdFx0XHRjcmVhdGVEZWJ1Zy5mb3JtYXRBcmdzLmNhbGwoc2VsZiwgYXJncyk7XG5cblx0XHRcdGNvbnN0IGxvZ0ZuID0gc2VsZi5sb2cgfHwgY3JlYXRlRGVidWcubG9nO1xuXHRcdFx0bG9nRm4uYXBwbHkoc2VsZiwgYXJncyk7XG5cdFx0fVxuXG5cdFx0ZGVidWcubmFtZXNwYWNlID0gbmFtZXNwYWNlO1xuXHRcdGRlYnVnLnVzZUNvbG9ycyA9IGNyZWF0ZURlYnVnLnVzZUNvbG9ycygpO1xuXHRcdGRlYnVnLmNvbG9yID0gY3JlYXRlRGVidWcuc2VsZWN0Q29sb3IobmFtZXNwYWNlKTtcblx0XHRkZWJ1Zy5leHRlbmQgPSBleHRlbmQ7XG5cdFx0ZGVidWcuZGVzdHJveSA9IGNyZWF0ZURlYnVnLmRlc3Ryb3k7IC8vIFhYWCBUZW1wb3JhcnkuIFdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuXG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGRlYnVnLCAnZW5hYmxlZCcsIHtcblx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuXHRcdFx0Z2V0OiAoKSA9PiB7XG5cdFx0XHRcdGlmIChlbmFibGVPdmVycmlkZSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdHJldHVybiBlbmFibGVPdmVycmlkZTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAobmFtZXNwYWNlc0NhY2hlICE9PSBjcmVhdGVEZWJ1Zy5uYW1lc3BhY2VzKSB7XG5cdFx0XHRcdFx0bmFtZXNwYWNlc0NhY2hlID0gY3JlYXRlRGVidWcubmFtZXNwYWNlcztcblx0XHRcdFx0XHRlbmFibGVkQ2FjaGUgPSBjcmVhdGVEZWJ1Zy5lbmFibGVkKG5hbWVzcGFjZSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZW5hYmxlZENhY2hlO1xuXHRcdFx0fSxcblx0XHRcdHNldDogdiA9PiB7XG5cdFx0XHRcdGVuYWJsZU92ZXJyaWRlID0gdjtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdC8vIEVudi1zcGVjaWZpYyBpbml0aWFsaXphdGlvbiBsb2dpYyBmb3IgZGVidWcgaW5zdGFuY2VzXG5cdFx0aWYgKHR5cGVvZiBjcmVhdGVEZWJ1Zy5pbml0ID09PSAnZnVuY3Rpb24nKSB7XG5cdFx0XHRjcmVhdGVEZWJ1Zy5pbml0KGRlYnVnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGVidWc7XG5cdH1cblxuXHRmdW5jdGlvbiBleHRlbmQobmFtZXNwYWNlLCBkZWxpbWl0ZXIpIHtcblx0XHRjb25zdCBuZXdEZWJ1ZyA9IGNyZWF0ZURlYnVnKHRoaXMubmFtZXNwYWNlICsgKHR5cGVvZiBkZWxpbWl0ZXIgPT09ICd1bmRlZmluZWQnID8gJzonIDogZGVsaW1pdGVyKSArIG5hbWVzcGFjZSk7XG5cdFx0bmV3RGVidWcubG9nID0gdGhpcy5sb2c7XG5cdFx0cmV0dXJuIG5ld0RlYnVnO1xuXHR9XG5cblx0LyoqXG5cdCogRW5hYmxlcyBhIGRlYnVnIG1vZGUgYnkgbmFtZXNwYWNlcy4gVGhpcyBjYW4gaW5jbHVkZSBtb2Rlc1xuXHQqIHNlcGFyYXRlZCBieSBhIGNvbG9uIGFuZCB3aWxkY2FyZHMuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGVuYWJsZShuYW1lc3BhY2VzKSB7XG5cdFx0Y3JlYXRlRGVidWcuc2F2ZShuYW1lc3BhY2VzKTtcblx0XHRjcmVhdGVEZWJ1Zy5uYW1lc3BhY2VzID0gbmFtZXNwYWNlcztcblxuXHRcdGNyZWF0ZURlYnVnLm5hbWVzID0gW107XG5cdFx0Y3JlYXRlRGVidWcuc2tpcHMgPSBbXTtcblxuXHRcdGxldCBpO1xuXHRcdGNvbnN0IHNwbGl0ID0gKHR5cGVvZiBuYW1lc3BhY2VzID09PSAnc3RyaW5nJyA/IG5hbWVzcGFjZXMgOiAnJykuc3BsaXQoL1tcXHMsXSsvKTtcblx0XHRjb25zdCBsZW4gPSBzcGxpdC5sZW5ndGg7XG5cblx0XHRmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmICghc3BsaXRbaV0pIHtcblx0XHRcdFx0Ly8gaWdub3JlIGVtcHR5IHN0cmluZ3Ncblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cblx0XHRcdG5hbWVzcGFjZXMgPSBzcGxpdFtpXS5yZXBsYWNlKC9cXCovZywgJy4qPycpO1xuXG5cdFx0XHRpZiAobmFtZXNwYWNlc1swXSA9PT0gJy0nKSB7XG5cdFx0XHRcdGNyZWF0ZURlYnVnLnNraXBzLnB1c2gobmV3IFJlZ0V4cCgnXicgKyBuYW1lc3BhY2VzLnN1YnN0cigxKSArICckJykpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcubmFtZXMucHVzaChuZXcgUmVnRXhwKCdeJyArIG5hbWVzcGFjZXMgKyAnJCcpKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvKipcblx0KiBEaXNhYmxlIGRlYnVnIG91dHB1dC5cblx0KlxuXHQqIEByZXR1cm4ge1N0cmluZ30gbmFtZXNwYWNlc1xuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGRpc2FibGUoKSB7XG5cdFx0Y29uc3QgbmFtZXNwYWNlcyA9IFtcblx0XHRcdC4uLmNyZWF0ZURlYnVnLm5hbWVzLm1hcCh0b05hbWVzcGFjZSksXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5za2lwcy5tYXAodG9OYW1lc3BhY2UpLm1hcChuYW1lc3BhY2UgPT4gJy0nICsgbmFtZXNwYWNlKVxuXHRcdF0uam9pbignLCcpO1xuXHRcdGNyZWF0ZURlYnVnLmVuYWJsZSgnJyk7XG5cdFx0cmV0dXJuIG5hbWVzcGFjZXM7XG5cdH1cblxuXHQvKipcblx0KiBSZXR1cm5zIHRydWUgaWYgdGhlIGdpdmVuIG1vZGUgbmFtZSBpcyBlbmFibGVkLCBmYWxzZSBvdGhlcndpc2UuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZVxuXHQqIEByZXR1cm4ge0Jvb2xlYW59XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlZChuYW1lKSB7XG5cdFx0aWYgKG5hbWVbbmFtZS5sZW5ndGggLSAxXSA9PT0gJyonKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRsZXQgaTtcblx0XHRsZXQgbGVuO1xuXG5cdFx0Zm9yIChpID0gMCwgbGVuID0gY3JlYXRlRGVidWcuc2tpcHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcblx0XHRcdGlmIChjcmVhdGVEZWJ1Zy5za2lwc1tpXS50ZXN0KG5hbWUpKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRmb3IgKGkgPSAwLCBsZW4gPSBjcmVhdGVEZWJ1Zy5uYW1lcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuXHRcdFx0aWYgKGNyZWF0ZURlYnVnLm5hbWVzW2ldLnRlc3QobmFtZSkpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCogQ29udmVydCByZWdleHAgdG8gbmFtZXNwYWNlXG5cdCpcblx0KiBAcGFyYW0ge1JlZ0V4cH0gcmVneGVwXG5cdCogQHJldHVybiB7U3RyaW5nfSBuYW1lc3BhY2Vcblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gdG9OYW1lc3BhY2UocmVnZXhwKSB7XG5cdFx0cmV0dXJuIHJlZ2V4cC50b1N0cmluZygpXG5cdFx0XHQuc3Vic3RyaW5nKDIsIHJlZ2V4cC50b1N0cmluZygpLmxlbmd0aCAtIDIpXG5cdFx0XHQucmVwbGFjZSgvXFwuXFwqXFw/JC8sICcqJyk7XG5cdH1cblxuXHQvKipcblx0KiBDb2VyY2UgYHZhbGAuXG5cdCpcblx0KiBAcGFyYW0ge01peGVkfSB2YWxcblx0KiBAcmV0dXJuIHtNaXhlZH1cblx0KiBAYXBpIHByaXZhdGVcblx0Ki9cblx0ZnVuY3Rpb24gY29lcmNlKHZhbCkge1xuXHRcdGlmICh2YWwgaW5zdGFuY2VvZiBFcnJvcikge1xuXHRcdFx0cmV0dXJuIHZhbC5zdGFjayB8fCB2YWwubWVzc2FnZTtcblx0XHR9XG5cdFx0cmV0dXJuIHZhbDtcblx0fVxuXG5cdC8qKlxuXHQqIFhYWCBETyBOT1QgVVNFLiBUaGlzIGlzIGEgdGVtcG9yYXJ5IHN0dWIgZnVuY3Rpb24uXG5cdCogWFhYIEl0IFdJTEwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlLlxuXHQqL1xuXHRmdW5jdGlvbiBkZXN0cm95KCkge1xuXHRcdGNvbnNvbGUud2FybignSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLicpO1xuXHR9XG5cblx0Y3JlYXRlRGVidWcuZW5hYmxlKGNyZWF0ZURlYnVnLmxvYWQoKSk7XG5cblx0cmV0dXJuIGNyZWF0ZURlYnVnO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHNldHVwO1xuIiwgIi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIHdlYiBicm93c2VyIGltcGxlbWVudGF0aW9uIG9mIGBkZWJ1ZygpYC5cbiAqL1xuXG5leHBvcnRzLmZvcm1hdEFyZ3MgPSBmb3JtYXRBcmdzO1xuZXhwb3J0cy5zYXZlID0gc2F2ZTtcbmV4cG9ydHMubG9hZCA9IGxvYWQ7XG5leHBvcnRzLnVzZUNvbG9ycyA9IHVzZUNvbG9ycztcbmV4cG9ydHMuc3RvcmFnZSA9IGxvY2Fsc3RvcmFnZSgpO1xuZXhwb3J0cy5kZXN0cm95ID0gKCgpID0+IHtcblx0bGV0IHdhcm5lZCA9IGZhbHNlO1xuXG5cdHJldHVybiAoKSA9PiB7XG5cdFx0aWYgKCF3YXJuZWQpIHtcblx0XHRcdHdhcm5lZCA9IHRydWU7XG5cdFx0XHRjb25zb2xlLndhcm4oJ0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nKTtcblx0XHR9XG5cdH07XG59KSgpO1xuXG4vKipcbiAqIENvbG9ycy5cbiAqL1xuXG5leHBvcnRzLmNvbG9ycyA9IFtcblx0JyMwMDAwQ0MnLFxuXHQnIzAwMDBGRicsXG5cdCcjMDAzM0NDJyxcblx0JyMwMDMzRkYnLFxuXHQnIzAwNjZDQycsXG5cdCcjMDA2NkZGJyxcblx0JyMwMDk5Q0MnLFxuXHQnIzAwOTlGRicsXG5cdCcjMDBDQzAwJyxcblx0JyMwMENDMzMnLFxuXHQnIzAwQ0M2NicsXG5cdCcjMDBDQzk5Jyxcblx0JyMwMENDQ0MnLFxuXHQnIzAwQ0NGRicsXG5cdCcjMzMwMENDJyxcblx0JyMzMzAwRkYnLFxuXHQnIzMzMzNDQycsXG5cdCcjMzMzM0ZGJyxcblx0JyMzMzY2Q0MnLFxuXHQnIzMzNjZGRicsXG5cdCcjMzM5OUNDJyxcblx0JyMzMzk5RkYnLFxuXHQnIzMzQ0MwMCcsXG5cdCcjMzNDQzMzJyxcblx0JyMzM0NDNjYnLFxuXHQnIzMzQ0M5OScsXG5cdCcjMzNDQ0NDJyxcblx0JyMzM0NDRkYnLFxuXHQnIzY2MDBDQycsXG5cdCcjNjYwMEZGJyxcblx0JyM2NjMzQ0MnLFxuXHQnIzY2MzNGRicsXG5cdCcjNjZDQzAwJyxcblx0JyM2NkNDMzMnLFxuXHQnIzk5MDBDQycsXG5cdCcjOTkwMEZGJyxcblx0JyM5OTMzQ0MnLFxuXHQnIzk5MzNGRicsXG5cdCcjOTlDQzAwJyxcblx0JyM5OUNDMzMnLFxuXHQnI0NDMDAwMCcsXG5cdCcjQ0MwMDMzJyxcblx0JyNDQzAwNjYnLFxuXHQnI0NDMDA5OScsXG5cdCcjQ0MwMENDJyxcblx0JyNDQzAwRkYnLFxuXHQnI0NDMzMwMCcsXG5cdCcjQ0MzMzMzJyxcblx0JyNDQzMzNjYnLFxuXHQnI0NDMzM5OScsXG5cdCcjQ0MzM0NDJyxcblx0JyNDQzMzRkYnLFxuXHQnI0NDNjYwMCcsXG5cdCcjQ0M2NjMzJyxcblx0JyNDQzk5MDAnLFxuXHQnI0NDOTkzMycsXG5cdCcjQ0NDQzAwJyxcblx0JyNDQ0NDMzMnLFxuXHQnI0ZGMDAwMCcsXG5cdCcjRkYwMDMzJyxcblx0JyNGRjAwNjYnLFxuXHQnI0ZGMDA5OScsXG5cdCcjRkYwMENDJyxcblx0JyNGRjAwRkYnLFxuXHQnI0ZGMzMwMCcsXG5cdCcjRkYzMzMzJyxcblx0JyNGRjMzNjYnLFxuXHQnI0ZGMzM5OScsXG5cdCcjRkYzM0NDJyxcblx0JyNGRjMzRkYnLFxuXHQnI0ZGNjYwMCcsXG5cdCcjRkY2NjMzJyxcblx0JyNGRjk5MDAnLFxuXHQnI0ZGOTkzMycsXG5cdCcjRkZDQzAwJyxcblx0JyNGRkNDMzMnXG5dO1xuXG4vKipcbiAqIEN1cnJlbnRseSBvbmx5IFdlYktpdC1iYXNlZCBXZWIgSW5zcGVjdG9ycywgRmlyZWZveCA+PSB2MzEsXG4gKiBhbmQgdGhlIEZpcmVidWcgZXh0ZW5zaW9uIChhbnkgRmlyZWZveCB2ZXJzaW9uKSBhcmUga25vd25cbiAqIHRvIHN1cHBvcnQgXCIlY1wiIENTUyBjdXN0b21pemF0aW9ucy5cbiAqXG4gKiBUT0RPOiBhZGQgYSBgbG9jYWxTdG9yYWdlYCB2YXJpYWJsZSB0byBleHBsaWNpdGx5IGVuYWJsZS9kaXNhYmxlIGNvbG9yc1xuICovXG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5mdW5jdGlvbiB1c2VDb2xvcnMoKSB7XG5cdC8vIE5COiBJbiBhbiBFbGVjdHJvbiBwcmVsb2FkIHNjcmlwdCwgZG9jdW1lbnQgd2lsbCBiZSBkZWZpbmVkIGJ1dCBub3QgZnVsbHlcblx0Ly8gaW5pdGlhbGl6ZWQuIFNpbmNlIHdlIGtub3cgd2UncmUgaW4gQ2hyb21lLCB3ZSdsbCBqdXN0IGRldGVjdCB0aGlzIGNhc2Vcblx0Ly8gZXhwbGljaXRseVxuXHRpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LnByb2Nlc3MgJiYgKHdpbmRvdy5wcm9jZXNzLnR5cGUgPT09ICdyZW5kZXJlcicgfHwgd2luZG93LnByb2Nlc3MuX19ud2pzKSkge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cblx0Ly8gSW50ZXJuZXQgRXhwbG9yZXIgYW5kIEVkZ2UgZG8gbm90IHN1cHBvcnQgY29sb3JzLlxuXHRpZiAodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goLyhlZGdlfHRyaWRlbnQpXFwvKFxcZCspLykpIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHQvLyBJcyB3ZWJraXQ/IGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzE2NDU5NjA2LzM3Njc3M1xuXHQvLyBkb2N1bWVudCBpcyB1bmRlZmluZWQgaW4gcmVhY3QtbmF0aXZlOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QtbmF0aXZlL3B1bGwvMTYzMlxuXHRyZXR1cm4gKHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50ICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zdHlsZSAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUuV2Via2l0QXBwZWFyYW5jZSkgfHxcblx0XHQvLyBJcyBmaXJlYnVnPyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zOTgxMjAvMzc2NzczXG5cdFx0KHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5jb25zb2xlICYmICh3aW5kb3cuY29uc29sZS5maXJlYnVnIHx8ICh3aW5kb3cuY29uc29sZS5leGNlcHRpb24gJiYgd2luZG93LmNvbnNvbGUudGFibGUpKSkgfHxcblx0XHQvLyBJcyBmaXJlZm94ID49IHYzMT9cblx0XHQvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1Rvb2xzL1dlYl9Db25zb2xlI1N0eWxpbmdfbWVzc2FnZXNcblx0XHQodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKSAmJiBwYXJzZUludChSZWdFeHAuJDEsIDEwKSA+PSAzMSkgfHxcblx0XHQvLyBEb3VibGUgY2hlY2sgd2Via2l0IGluIHVzZXJBZ2VudCBqdXN0IGluIGNhc2Ugd2UgYXJlIGluIGEgd29ya2VyXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC9hcHBsZXdlYmtpdFxcLyhcXGQrKS8pKTtcbn1cblxuLyoqXG4gKiBDb2xvcml6ZSBsb2cgYXJndW1lbnRzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0YXJnc1swXSA9ICh0aGlzLnVzZUNvbG9ycyA/ICclYycgOiAnJykgK1xuXHRcdHRoaXMubmFtZXNwYWNlICtcblx0XHQodGhpcy51c2VDb2xvcnMgPyAnICVjJyA6ICcgJykgK1xuXHRcdGFyZ3NbMF0gK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICclYyAnIDogJyAnKSArXG5cdFx0JysnICsgbW9kdWxlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKTtcblxuXHRpZiAoIXRoaXMudXNlQ29sb3JzKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Y29uc3QgYyA9ICdjb2xvcjogJyArIHRoaXMuY29sb3I7XG5cdGFyZ3Muc3BsaWNlKDEsIDAsIGMsICdjb2xvcjogaW5oZXJpdCcpO1xuXG5cdC8vIFRoZSBmaW5hbCBcIiVjXCIgaXMgc29tZXdoYXQgdHJpY2t5LCBiZWNhdXNlIHRoZXJlIGNvdWxkIGJlIG90aGVyXG5cdC8vIGFyZ3VtZW50cyBwYXNzZWQgZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgJWMsIHNvIHdlIG5lZWQgdG9cblx0Ly8gZmlndXJlIG91dCB0aGUgY29ycmVjdCBpbmRleCB0byBpbnNlcnQgdGhlIENTUyBpbnRvXG5cdGxldCBpbmRleCA9IDA7XG5cdGxldCBsYXN0QyA9IDA7XG5cdGFyZ3NbMF0ucmVwbGFjZSgvJVthLXpBLVolXS9nLCBtYXRjaCA9PiB7XG5cdFx0aWYgKG1hdGNoID09PSAnJSUnKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXHRcdGluZGV4Kys7XG5cdFx0aWYgKG1hdGNoID09PSAnJWMnKSB7XG5cdFx0XHQvLyBXZSBvbmx5IGFyZSBpbnRlcmVzdGVkIGluIHRoZSAqbGFzdCogJWNcblx0XHRcdC8vICh0aGUgdXNlciBtYXkgaGF2ZSBwcm92aWRlZCB0aGVpciBvd24pXG5cdFx0XHRsYXN0QyA9IGluZGV4O1xuXHRcdH1cblx0fSk7XG5cblx0YXJncy5zcGxpY2UobGFzdEMsIDAsIGMpO1xufVxuXG4vKipcbiAqIEludm9rZXMgYGNvbnNvbGUuZGVidWcoKWAgd2hlbiBhdmFpbGFibGUuXG4gKiBOby1vcCB3aGVuIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYSBcImZ1bmN0aW9uXCIuXG4gKiBJZiBgY29uc29sZS5kZWJ1Z2AgaXMgbm90IGF2YWlsYWJsZSwgZmFsbHMgYmFja1xuICogdG8gYGNvbnNvbGUubG9nYC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5leHBvcnRzLmxvZyA9IGNvbnNvbGUuZGVidWcgfHwgY29uc29sZS5sb2cgfHwgKCgpID0+IHt9KTtcblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHR0cnkge1xuXHRcdGlmIChuYW1lc3BhY2VzKSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2Uuc2V0SXRlbSgnZGVidWcnLCBuYW1lc3BhY2VzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZXhwb3J0cy5zdG9yYWdlLnJlbW92ZUl0ZW0oJ2RlYnVnJyk7XG5cdFx0fVxuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5mdW5jdGlvbiBsb2FkKCkge1xuXHRsZXQgcjtcblx0dHJ5IHtcblx0XHRyID0gZXhwb3J0cy5zdG9yYWdlLmdldEl0ZW0oJ2RlYnVnJyk7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG5cblx0Ly8gSWYgZGVidWcgaXNuJ3Qgc2V0IGluIExTLCBhbmQgd2UncmUgaW4gRWxlY3Ryb24sIHRyeSB0byBsb2FkICRERUJVR1xuXHRpZiAoIXIgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICdlbnYnIGluIHByb2Nlc3MpIHtcblx0XHRyID0gcHJvY2Vzcy5lbnYuREVCVUc7XG5cdH1cblxuXHRyZXR1cm4gcjtcbn1cblxuLyoqXG4gKiBMb2NhbHN0b3JhZ2UgYXR0ZW1wdHMgdG8gcmV0dXJuIHRoZSBsb2NhbHN0b3JhZ2UuXG4gKlxuICogVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSBzYWZhcmkgdGhyb3dzXG4gKiB3aGVuIGEgdXNlciBkaXNhYmxlcyBjb29raWVzL2xvY2Fsc3RvcmFnZVxuICogYW5kIHlvdSBhdHRlbXB0IHRvIGFjY2VzcyBpdC5cbiAqXG4gKiBAcmV0dXJuIHtMb2NhbFN0b3JhZ2V9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBsb2NhbHN0b3JhZ2UoKSB7XG5cdHRyeSB7XG5cdFx0Ly8gVFZNTEtpdCAoQXBwbGUgVFYgSlMgUnVudGltZSkgZG9lcyBub3QgaGF2ZSBhIHdpbmRvdyBvYmplY3QsIGp1c3QgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dFxuXHRcdC8vIFRoZSBCcm93c2VyIGFsc28gaGFzIGxvY2FsU3RvcmFnZSBpbiB0aGUgZ2xvYmFsIGNvbnRleHQuXG5cdFx0cmV0dXJuIGxvY2FsU3RvcmFnZTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJWogdG8gYEpTT04uc3RyaW5naWZ5KClgLCBzaW5jZSBubyBXZWIgSW5zcGVjdG9ycyBkbyB0aGF0IGJ5IGRlZmF1bHQuXG4gKi9cblxuZm9ybWF0dGVycy5qID0gZnVuY3Rpb24gKHYpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodik7XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0cmV0dXJuICdbVW5leHBlY3RlZEpTT05QYXJzZUVycm9yXTogJyArIGVycm9yLm1lc3NhZ2U7XG5cdH1cbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IChmbGFnLCBhcmd2ID0gcHJvY2Vzcy5hcmd2KSA9PiB7XG5cdGNvbnN0IHByZWZpeCA9IGZsYWcuc3RhcnRzV2l0aCgnLScpID8gJycgOiAoZmxhZy5sZW5ndGggPT09IDEgPyAnLScgOiAnLS0nKTtcblx0Y29uc3QgcG9zaXRpb24gPSBhcmd2LmluZGV4T2YocHJlZml4ICsgZmxhZyk7XG5cdGNvbnN0IHRlcm1pbmF0b3JQb3NpdGlvbiA9IGFyZ3YuaW5kZXhPZignLS0nKTtcblx0cmV0dXJuIHBvc2l0aW9uICE9PSAtMSAmJiAodGVybWluYXRvclBvc2l0aW9uID09PSAtMSB8fCBwb3NpdGlvbiA8IHRlcm1pbmF0b3JQb3NpdGlvbik7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcbmNvbnN0IG9zID0gcmVxdWlyZSgnb3MnKTtcbmNvbnN0IHR0eSA9IHJlcXVpcmUoJ3R0eScpO1xuY29uc3QgaGFzRmxhZyA9IHJlcXVpcmUoJ2hhcy1mbGFnJyk7XG5cbmNvbnN0IHtlbnZ9ID0gcHJvY2VzcztcblxubGV0IGZvcmNlQ29sb3I7XG5pZiAoaGFzRmxhZygnbm8tY29sb3InKSB8fFxuXHRoYXNGbGFnKCduby1jb2xvcnMnKSB8fFxuXHRoYXNGbGFnKCdjb2xvcj1mYWxzZScpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPW5ldmVyJykpIHtcblx0Zm9yY2VDb2xvciA9IDA7XG59IGVsc2UgaWYgKGhhc0ZsYWcoJ2NvbG9yJykgfHxcblx0aGFzRmxhZygnY29sb3JzJykgfHxcblx0aGFzRmxhZygnY29sb3I9dHJ1ZScpIHx8XG5cdGhhc0ZsYWcoJ2NvbG9yPWFsd2F5cycpKSB7XG5cdGZvcmNlQ29sb3IgPSAxO1xufVxuXG5pZiAoJ0ZPUkNFX0NPTE9SJyBpbiBlbnYpIHtcblx0aWYgKGVudi5GT1JDRV9DT0xPUiA9PT0gJ3RydWUnKSB7XG5cdFx0Zm9yY2VDb2xvciA9IDE7XG5cdH0gZWxzZSBpZiAoZW52LkZPUkNFX0NPTE9SID09PSAnZmFsc2UnKSB7XG5cdFx0Zm9yY2VDb2xvciA9IDA7XG5cdH0gZWxzZSB7XG5cdFx0Zm9yY2VDb2xvciA9IGVudi5GT1JDRV9DT0xPUi5sZW5ndGggPT09IDAgPyAxIDogTWF0aC5taW4ocGFyc2VJbnQoZW52LkZPUkNFX0NPTE9SLCAxMCksIDMpO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHRyYW5zbGF0ZUxldmVsKGxldmVsKSB7XG5cdGlmIChsZXZlbCA9PT0gMCkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB7XG5cdFx0bGV2ZWwsXG5cdFx0aGFzQmFzaWM6IHRydWUsXG5cdFx0aGFzMjU2OiBsZXZlbCA+PSAyLFxuXHRcdGhhczE2bTogbGV2ZWwgPj0gM1xuXHR9O1xufVxuXG5mdW5jdGlvbiBzdXBwb3J0c0NvbG9yKGhhdmVTdHJlYW0sIHN0cmVhbUlzVFRZKSB7XG5cdGlmIChmb3JjZUNvbG9yID09PSAwKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRpZiAoaGFzRmxhZygnY29sb3I9MTZtJykgfHxcblx0XHRoYXNGbGFnKCdjb2xvcj1mdWxsJykgfHxcblx0XHRoYXNGbGFnKCdjb2xvcj10cnVlY29sb3InKSkge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKGhhc0ZsYWcoJ2NvbG9yPTI1NicpKSB7XG5cdFx0cmV0dXJuIDI7XG5cdH1cblxuXHRpZiAoaGF2ZVN0cmVhbSAmJiAhc3RyZWFtSXNUVFkgJiYgZm9yY2VDb2xvciA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRjb25zdCBtaW4gPSBmb3JjZUNvbG9yIHx8IDA7XG5cblx0aWYgKGVudi5URVJNID09PSAnZHVtYicpIHtcblx0XHRyZXR1cm4gbWluO1xuXHR9XG5cblx0aWYgKHByb2Nlc3MucGxhdGZvcm0gPT09ICd3aW4zMicpIHtcblx0XHQvLyBXaW5kb3dzIDEwIGJ1aWxkIDEwNTg2IGlzIHRoZSBmaXJzdCBXaW5kb3dzIHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAyNTYgY29sb3JzLlxuXHRcdC8vIFdpbmRvd3MgMTAgYnVpbGQgMTQ5MzEgaXMgdGhlIGZpcnN0IHJlbGVhc2UgdGhhdCBzdXBwb3J0cyAxNm0vVHJ1ZUNvbG9yLlxuXHRcdGNvbnN0IG9zUmVsZWFzZSA9IG9zLnJlbGVhc2UoKS5zcGxpdCgnLicpO1xuXHRcdGlmIChcblx0XHRcdE51bWJlcihvc1JlbGVhc2VbMF0pID49IDEwICYmXG5cdFx0XHROdW1iZXIob3NSZWxlYXNlWzJdKSA+PSAxMDU4NlxuXHRcdCkge1xuXHRcdFx0cmV0dXJuIE51bWJlcihvc1JlbGVhc2VbMl0pID49IDE0OTMxID8gMyA6IDI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NJJyBpbiBlbnYpIHtcblx0XHRpZiAoWydUUkFWSVMnLCAnQ0lSQ0xFQ0knLCAnQVBQVkVZT1InLCAnR0lUTEFCX0NJJywgJ0dJVEhVQl9BQ1RJT05TJywgJ0JVSUxES0lURSddLnNvbWUoc2lnbiA9PiBzaWduIGluIGVudikgfHwgZW52LkNJX05BTUUgPT09ICdjb2Rlc2hpcCcpIHtcblx0XHRcdHJldHVybiAxO1xuXHRcdH1cblxuXHRcdHJldHVybiBtaW47XG5cdH1cblxuXHRpZiAoJ1RFQU1DSVRZX1ZFUlNJT04nIGluIGVudikge1xuXHRcdHJldHVybiAvXig5XFwuKDAqWzEtOV1cXGQqKVxcLnxcXGR7Mix9XFwuKS8udGVzdChlbnYuVEVBTUNJVFlfVkVSU0lPTikgPyAxIDogMDtcblx0fVxuXG5cdGlmIChlbnYuQ09MT1JURVJNID09PSAndHJ1ZWNvbG9yJykge1xuXHRcdHJldHVybiAzO1xuXHR9XG5cblx0aWYgKCdURVJNX1BST0dSQU0nIGluIGVudikge1xuXHRcdGNvbnN0IHZlcnNpb24gPSBwYXJzZUludCgoZW52LlRFUk1fUFJPR1JBTV9WRVJTSU9OIHx8ICcnKS5zcGxpdCgnLicpWzBdLCAxMCk7XG5cblx0XHRzd2l0Y2ggKGVudi5URVJNX1BST0dSQU0pIHtcblx0XHRcdGNhc2UgJ2lUZXJtLmFwcCc6XG5cdFx0XHRcdHJldHVybiB2ZXJzaW9uID49IDMgPyAzIDogMjtcblx0XHRcdGNhc2UgJ0FwcGxlX1Rlcm1pbmFsJzpcblx0XHRcdFx0cmV0dXJuIDI7XG5cdFx0XHQvLyBObyBkZWZhdWx0XG5cdFx0fVxuXHR9XG5cblx0aWYgKC8tMjU2KGNvbG9yKT8kL2kudGVzdChlbnYuVEVSTSkpIHtcblx0XHRyZXR1cm4gMjtcblx0fVxuXG5cdGlmICgvXnNjcmVlbnxeeHRlcm18XnZ0MTAwfF52dDIyMHxecnh2dHxjb2xvcnxhbnNpfGN5Z3dpbnxsaW51eC9pLnRlc3QoZW52LlRFUk0pKSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRpZiAoJ0NPTE9SVEVSTScgaW4gZW52KSB7XG5cdFx0cmV0dXJuIDE7XG5cdH1cblxuXHRyZXR1cm4gbWluO1xufVxuXG5mdW5jdGlvbiBnZXRTdXBwb3J0TGV2ZWwoc3RyZWFtKSB7XG5cdGNvbnN0IGxldmVsID0gc3VwcG9ydHNDb2xvcihzdHJlYW0sIHN0cmVhbSAmJiBzdHJlYW0uaXNUVFkpO1xuXHRyZXR1cm4gdHJhbnNsYXRlTGV2ZWwobGV2ZWwpO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcblx0c3VwcG9ydHNDb2xvcjogZ2V0U3VwcG9ydExldmVsLFxuXHRzdGRvdXQ6IHRyYW5zbGF0ZUxldmVsKHN1cHBvcnRzQ29sb3IodHJ1ZSwgdHR5LmlzYXR0eSgxKSkpLFxuXHRzdGRlcnI6IHRyYW5zbGF0ZUxldmVsKHN1cHBvcnRzQ29sb3IodHJ1ZSwgdHR5LmlzYXR0eSgyKSkpXG59O1xuIiwgIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG5jb25zdCB0dHkgPSByZXF1aXJlKCd0dHknKTtcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgTm9kZS5qcyBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5pbml0ID0gaW5pdDtcbmV4cG9ydHMubG9nID0gbG9nO1xuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLmRlc3Ryb3kgPSB1dGlsLmRlcHJlY2F0ZShcblx0KCkgPT4ge30sXG5cdCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJ1xuKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbNiwgMiwgMywgNCwgNSwgMV07XG5cbnRyeSB7XG5cdC8vIE9wdGlvbmFsIGRlcGVuZGVuY3kgKGFzIGluLCBkb2Vzbid0IG5lZWQgdG8gYmUgaW5zdGFsbGVkLCBOT1QgbGlrZSBvcHRpb25hbERlcGVuZGVuY2llcyBpbiBwYWNrYWdlLmpzb24pXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcblx0Y29uc3Qgc3VwcG9ydHNDb2xvciA9IHJlcXVpcmUoJ3N1cHBvcnRzLWNvbG9yJyk7XG5cblx0aWYgKHN1cHBvcnRzQ29sb3IgJiYgKHN1cHBvcnRzQ29sb3Iuc3RkZXJyIHx8IHN1cHBvcnRzQ29sb3IpLmxldmVsID49IDIpIHtcblx0XHRleHBvcnRzLmNvbG9ycyA9IFtcblx0XHRcdDIwLFxuXHRcdFx0MjEsXG5cdFx0XHQyNixcblx0XHRcdDI3LFxuXHRcdFx0MzIsXG5cdFx0XHQzMyxcblx0XHRcdDM4LFxuXHRcdFx0MzksXG5cdFx0XHQ0MCxcblx0XHRcdDQxLFxuXHRcdFx0NDIsXG5cdFx0XHQ0Myxcblx0XHRcdDQ0LFxuXHRcdFx0NDUsXG5cdFx0XHQ1Nixcblx0XHRcdDU3LFxuXHRcdFx0NjIsXG5cdFx0XHQ2Myxcblx0XHRcdDY4LFxuXHRcdFx0NjksXG5cdFx0XHQ3NCxcblx0XHRcdDc1LFxuXHRcdFx0NzYsXG5cdFx0XHQ3Nyxcblx0XHRcdDc4LFxuXHRcdFx0NzksXG5cdFx0XHQ4MCxcblx0XHRcdDgxLFxuXHRcdFx0OTIsXG5cdFx0XHQ5Myxcblx0XHRcdDk4LFxuXHRcdFx0OTksXG5cdFx0XHQxMTIsXG5cdFx0XHQxMTMsXG5cdFx0XHQxMjgsXG5cdFx0XHQxMjksXG5cdFx0XHQxMzQsXG5cdFx0XHQxMzUsXG5cdFx0XHQxNDgsXG5cdFx0XHQxNDksXG5cdFx0XHQxNjAsXG5cdFx0XHQxNjEsXG5cdFx0XHQxNjIsXG5cdFx0XHQxNjMsXG5cdFx0XHQxNjQsXG5cdFx0XHQxNjUsXG5cdFx0XHQxNjYsXG5cdFx0XHQxNjcsXG5cdFx0XHQxNjgsXG5cdFx0XHQxNjksXG5cdFx0XHQxNzAsXG5cdFx0XHQxNzEsXG5cdFx0XHQxNzIsXG5cdFx0XHQxNzMsXG5cdFx0XHQxNzgsXG5cdFx0XHQxNzksXG5cdFx0XHQxODQsXG5cdFx0XHQxODUsXG5cdFx0XHQxOTYsXG5cdFx0XHQxOTcsXG5cdFx0XHQxOTgsXG5cdFx0XHQxOTksXG5cdFx0XHQyMDAsXG5cdFx0XHQyMDEsXG5cdFx0XHQyMDIsXG5cdFx0XHQyMDMsXG5cdFx0XHQyMDQsXG5cdFx0XHQyMDUsXG5cdFx0XHQyMDYsXG5cdFx0XHQyMDcsXG5cdFx0XHQyMDgsXG5cdFx0XHQyMDksXG5cdFx0XHQyMTQsXG5cdFx0XHQyMTUsXG5cdFx0XHQyMjAsXG5cdFx0XHQyMjFcblx0XHRdO1xuXHR9XG59IGNhdGNoIChlcnJvcikge1xuXHQvLyBTd2FsbG93IC0gd2Ugb25seSBjYXJlIGlmIGBzdXBwb3J0cy1jb2xvcmAgaXMgYXZhaWxhYmxlOyBpdCBkb2Vzbid0IGhhdmUgdG8gYmUuXG59XG5cbi8qKlxuICogQnVpbGQgdXAgdGhlIGRlZmF1bHQgYGluc3BlY3RPcHRzYCBvYmplY3QgZnJvbSB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICpcbiAqICAgJCBERUJVR19DT0xPUlM9bm8gREVCVUdfREVQVEg9MTAgREVCVUdfU0hPV19ISURERU49ZW5hYmxlZCBub2RlIHNjcmlwdC5qc1xuICovXG5cbmV4cG9ydHMuaW5zcGVjdE9wdHMgPSBPYmplY3Qua2V5cyhwcm9jZXNzLmVudikuZmlsdGVyKGtleSA9PiB7XG5cdHJldHVybiAvXmRlYnVnXy9pLnRlc3Qoa2V5KTtcbn0pLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcblx0Ly8gQ2FtZWwtY2FzZVxuXHRjb25zdCBwcm9wID0ga2V5XG5cdFx0LnN1YnN0cmluZyg2KVxuXHRcdC50b0xvd2VyQ2FzZSgpXG5cdFx0LnJlcGxhY2UoL18oW2Etel0pL2csIChfLCBrKSA9PiB7XG5cdFx0XHRyZXR1cm4gay50b1VwcGVyQ2FzZSgpO1xuXHRcdH0pO1xuXG5cdC8vIENvZXJjZSBzdHJpbmcgdmFsdWUgaW50byBKUyB2YWx1ZVxuXHRsZXQgdmFsID0gcHJvY2Vzcy5lbnZba2V5XTtcblx0aWYgKC9eKHllc3xvbnx0cnVlfGVuYWJsZWQpJC9pLnRlc3QodmFsKSkge1xuXHRcdHZhbCA9IHRydWU7XG5cdH0gZWxzZSBpZiAoL14obm98b2ZmfGZhbHNlfGRpc2FibGVkKSQvaS50ZXN0KHZhbCkpIHtcblx0XHR2YWwgPSBmYWxzZTtcblx0fSBlbHNlIGlmICh2YWwgPT09ICdudWxsJykge1xuXHRcdHZhbCA9IG51bGw7XG5cdH0gZWxzZSB7XG5cdFx0dmFsID0gTnVtYmVyKHZhbCk7XG5cdH1cblxuXHRvYmpbcHJvcF0gPSB2YWw7XG5cdHJldHVybiBvYmo7XG59LCB7fSk7XG5cbi8qKlxuICogSXMgc3Rkb3V0IGEgVFRZPyBDb2xvcmVkIG91dHB1dCBpcyBlbmFibGVkIHdoZW4gYHRydWVgLlxuICovXG5cbmZ1bmN0aW9uIHVzZUNvbG9ycygpIHtcblx0cmV0dXJuICdjb2xvcnMnIGluIGV4cG9ydHMuaW5zcGVjdE9wdHMgP1xuXHRcdEJvb2xlYW4oZXhwb3J0cy5pbnNwZWN0T3B0cy5jb2xvcnMpIDpcblx0XHR0dHkuaXNhdHR5KHByb2Nlc3Muc3RkZXJyLmZkKTtcbn1cblxuLyoqXG4gKiBBZGRzIEFOU0kgY29sb3IgZXNjYXBlIGNvZGVzIGlmIGVuYWJsZWQuXG4gKlxuICogQGFwaSBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBmb3JtYXRBcmdzKGFyZ3MpIHtcblx0Y29uc3Qge25hbWVzcGFjZTogbmFtZSwgdXNlQ29sb3JzfSA9IHRoaXM7XG5cblx0aWYgKHVzZUNvbG9ycykge1xuXHRcdGNvbnN0IGMgPSB0aGlzLmNvbG9yO1xuXHRcdGNvbnN0IGNvbG9yQ29kZSA9ICdcXHUwMDFCWzMnICsgKGMgPCA4ID8gYyA6ICc4OzU7JyArIGMpO1xuXHRcdGNvbnN0IHByZWZpeCA9IGAgICR7Y29sb3JDb2RlfTsxbSR7bmFtZX0gXFx1MDAxQlswbWA7XG5cblx0XHRhcmdzWzBdID0gcHJlZml4ICsgYXJnc1swXS5zcGxpdCgnXFxuJykuam9pbignXFxuJyArIHByZWZpeCk7XG5cdFx0YXJncy5wdXNoKGNvbG9yQ29kZSArICdtKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpICsgJ1xcdTAwMUJbMG0nKTtcblx0fSBlbHNlIHtcblx0XHRhcmdzWzBdID0gZ2V0RGF0ZSgpICsgbmFtZSArICcgJyArIGFyZ3NbMF07XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RGF0ZSgpIHtcblx0aWYgKGV4cG9ydHMuaW5zcGVjdE9wdHMuaGlkZURhdGUpIHtcblx0XHRyZXR1cm4gJyc7XG5cdH1cblx0cmV0dXJuIG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSArICcgJztcbn1cblxuLyoqXG4gKiBJbnZva2VzIGB1dGlsLmZvcm1hdCgpYCB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnRzIGFuZCB3cml0ZXMgdG8gc3RkZXJyLlxuICovXG5cbmZ1bmN0aW9uIGxvZyguLi5hcmdzKSB7XG5cdHJldHVybiBwcm9jZXNzLnN0ZGVyci53cml0ZSh1dGlsLmZvcm1hdCguLi5hcmdzKSArICdcXG4nKTtcbn1cblxuLyoqXG4gKiBTYXZlIGBuYW1lc3BhY2VzYC5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNhdmUobmFtZXNwYWNlcykge1xuXHRpZiAobmFtZXNwYWNlcykge1xuXHRcdHByb2Nlc3MuZW52LkRFQlVHID0gbmFtZXNwYWNlcztcblx0fSBlbHNlIHtcblx0XHQvLyBJZiB5b3Ugc2V0IGEgcHJvY2Vzcy5lbnYgZmllbGQgdG8gbnVsbCBvciB1bmRlZmluZWQsIGl0IGdldHMgY2FzdCB0byB0aGVcblx0XHQvLyBzdHJpbmcgJ251bGwnIG9yICd1bmRlZmluZWQnLiBKdXN0IGRlbGV0ZSBpbnN0ZWFkLlxuXHRcdGRlbGV0ZSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxufVxuXG4vKipcbiAqIExvYWQgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEByZXR1cm4ge1N0cmluZ30gcmV0dXJucyB0aGUgcHJldmlvdXNseSBwZXJzaXN0ZWQgZGVidWcgbW9kZXNcbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdHJldHVybiBwcm9jZXNzLmVudi5ERUJVRztcbn1cblxuLyoqXG4gKiBJbml0IGxvZ2ljIGZvciBgZGVidWdgIGluc3RhbmNlcy5cbiAqXG4gKiBDcmVhdGUgYSBuZXcgYGluc3BlY3RPcHRzYCBvYmplY3QgaW4gY2FzZSBgdXNlQ29sb3JzYCBpcyBzZXRcbiAqIGRpZmZlcmVudGx5IGZvciBhIHBhcnRpY3VsYXIgYGRlYnVnYCBpbnN0YW5jZS5cbiAqL1xuXG5mdW5jdGlvbiBpbml0KGRlYnVnKSB7XG5cdGRlYnVnLmluc3BlY3RPcHRzID0ge307XG5cblx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGV4cG9ydHMuaW5zcGVjdE9wdHMpO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcblx0XHRkZWJ1Zy5pbnNwZWN0T3B0c1trZXlzW2ldXSA9IGV4cG9ydHMuaW5zcGVjdE9wdHNba2V5c1tpXV07XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2NvbW1vbicpKGV4cG9ydHMpO1xuXG5jb25zdCB7Zm9ybWF0dGVyc30gPSBtb2R1bGUuZXhwb3J0cztcblxuLyoqXG4gKiBNYXAgJW8gdG8gYHV0aWwuaW5zcGVjdCgpYCwgYWxsIG9uIGEgc2luZ2xlIGxpbmUuXG4gKi9cblxuZm9ybWF0dGVycy5vID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKVxuXHRcdC5zcGxpdCgnXFxuJylcblx0XHQubWFwKHN0ciA9PiBzdHIudHJpbSgpKVxuXHRcdC5qb2luKCcgJyk7XG59O1xuXG4vKipcbiAqIE1hcCAlTyB0byBgdXRpbC5pbnNwZWN0KClgLCBhbGxvd2luZyBtdWx0aXBsZSBsaW5lcyBpZiBuZWVkZWQuXG4gKi9cblxuZm9ybWF0dGVycy5PID0gZnVuY3Rpb24gKHYpIHtcblx0dGhpcy5pbnNwZWN0T3B0cy5jb2xvcnMgPSB0aGlzLnVzZUNvbG9ycztcblx0cmV0dXJuIHV0aWwuaW5zcGVjdCh2LCB0aGlzLmluc3BlY3RPcHRzKTtcbn07XG4iLCAiLyoqXG4gKiBEZXRlY3QgRWxlY3Ryb24gcmVuZGVyZXIgLyBud2pzIHByb2Nlc3MsIHdoaWNoIGlzIG5vZGUsIGJ1dCB3ZSBzaG91bGRcbiAqIHRyZWF0IGFzIGEgYnJvd3Nlci5cbiAqL1xuXG5pZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8IHByb2Nlc3MudHlwZSA9PT0gJ3JlbmRlcmVyJyB8fCBwcm9jZXNzLmJyb3dzZXIgPT09IHRydWUgfHwgcHJvY2Vzcy5fX253anMpIHtcblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Jyb3dzZXIuanMnKTtcbn0gZWxzZSB7XG5cdG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9ub2RlLmpzJyk7XG59XG4iLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAiaW1wb3J0IHsgZXZlbnRUb1NlbnRyeVJlcXVlc3QsIHNlc3Npb25Ub1NlbnRyeVJlcXVlc3QgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgRXZlbnQsIFJlc3BvbnNlLCBTZXNzaW9uLCBTZXNzaW9uQWdncmVnYXRlcywgVHJhbnNwb3J0T3B0aW9ucyB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0ICogYXMgaHR0cCBmcm9tICdodHRwJztcblxuaW1wb3J0IHsgQmFzZVRyYW5zcG9ydCB9IGZyb20gJy4vYmFzZSc7XG5cbi8qKiBOb2RlIGh0dHAgbW9kdWxlIHRyYW5zcG9ydCAqL1xuZXhwb3J0IGNsYXNzIEhUVFBUcmFuc3BvcnQgZXh0ZW5kcyBCYXNlVHJhbnNwb3J0IHtcbiAgLyoqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBhbmQgc2V0IHRoaXMuYWdlbnQgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHB1YmxpYyBvcHRpb25zOiBUcmFuc3BvcnRPcHRpb25zKSB7XG4gICAgc3VwZXIob3B0aW9ucyk7XG4gICAgY29uc3QgcHJveHkgPSB0aGlzLl9nZXRQcm94eSgnaHR0cCcpO1xuICAgIHRoaXMubW9kdWxlID0gaHR0cDtcbiAgICB0aGlzLmNsaWVudCA9IHByb3h5XG4gICAgICA/IChuZXcgKHJlcXVpcmUoJ2h0dHBzLXByb3h5LWFnZW50JykpKHByb3h5KSBhcyBodHRwLkFnZW50KVxuICAgICAgOiBuZXcgaHR0cC5BZ2VudCh7IGtlZXBBbGl2ZTogZmFsc2UsIG1heFNvY2tldHM6IDMwLCB0aW1lb3V0OiAyMDAwIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2VuZEV2ZW50KGV2ZW50OiBFdmVudCk6IFByb21pc2U8UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZChldmVudFRvU2VudHJ5UmVxdWVzdChldmVudCwgdGhpcy5fYXBpKSwgZXZlbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2VuZFNlc3Npb24oc2Vzc2lvbjogU2Vzc2lvbiB8IFNlc3Npb25BZ2dyZWdhdGVzKTogUHJvbWlzZUxpa2U8UmVzcG9uc2U+IHtcbiAgICByZXR1cm4gdGhpcy5fc2VuZChzZXNzaW9uVG9TZW50cnlSZXF1ZXN0KHNlc3Npb24sIHRoaXMuX2FwaSksIHNlc3Npb24pO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgZXZlbnRUb1NlbnRyeVJlcXVlc3QsIHNlc3Npb25Ub1NlbnRyeVJlcXVlc3QgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgRXZlbnQsIFJlc3BvbnNlLCBTZXNzaW9uLCBTZXNzaW9uQWdncmVnYXRlcywgVHJhbnNwb3J0T3B0aW9ucyB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0ICogYXMgaHR0cHMgZnJvbSAnaHR0cHMnO1xuXG5pbXBvcnQgeyBCYXNlVHJhbnNwb3J0IH0gZnJvbSAnLi9iYXNlJztcblxuLyoqIE5vZGUgaHR0cHMgbW9kdWxlIHRyYW5zcG9ydCAqL1xuZXhwb3J0IGNsYXNzIEhUVFBTVHJhbnNwb3J0IGV4dGVuZHMgQmFzZVRyYW5zcG9ydCB7XG4gIC8qKiBDcmVhdGUgYSBuZXcgaW5zdGFuY2UgYW5kIHNldCB0aGlzLmFnZW50ICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihwdWJsaWMgb3B0aW9uczogVHJhbnNwb3J0T3B0aW9ucykge1xuICAgIHN1cGVyKG9wdGlvbnMpO1xuICAgIGNvbnN0IHByb3h5ID0gdGhpcy5fZ2V0UHJveHkoJ2h0dHBzJyk7XG4gICAgdGhpcy5tb2R1bGUgPSBodHRwcztcbiAgICB0aGlzLmNsaWVudCA9IHByb3h5XG4gICAgICA/IChuZXcgKHJlcXVpcmUoJ2h0dHBzLXByb3h5LWFnZW50JykpKHByb3h5KSBhcyBodHRwcy5BZ2VudClcbiAgICAgIDogbmV3IGh0dHBzLkFnZW50KHsga2VlcEFsaXZlOiBmYWxzZSwgbWF4U29ja2V0czogMzAsIHRpbWVvdXQ6IDIwMDAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZW5kRXZlbnQoZXZlbnQ6IEV2ZW50KTogUHJvbWlzZTxSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLl9zZW5kKGV2ZW50VG9TZW50cnlSZXF1ZXN0KGV2ZW50LCB0aGlzLl9hcGkpLCBldmVudCk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZW5kU2Vzc2lvbihzZXNzaW9uOiBTZXNzaW9uIHwgU2Vzc2lvbkFnZ3JlZ2F0ZXMpOiBQcm9taXNlTGlrZTxSZXNwb25zZT4ge1xuICAgIHJldHVybiB0aGlzLl9zZW5kKHNlc3Npb25Ub1NlbnRyeVJlcXVlc3Qoc2Vzc2lvbiwgdGhpcy5fYXBpKSwgc2Vzc2lvbik7XG4gIH1cbn1cbiIsICJleHBvcnQgeyBCYXNlVHJhbnNwb3J0IH0gZnJvbSAnLi9iYXNlJztcbmV4cG9ydCB7IEhUVFBUcmFuc3BvcnQgfSBmcm9tICcuL2h0dHAnO1xuZXhwb3J0IHsgSFRUUFNUcmFuc3BvcnQgfSBmcm9tICcuL2h0dHBzJztcbiIsICJpbXBvcnQgeyBCYXNlQmFja2VuZCwgZ2V0Q3VycmVudEh1YiB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyBFdmVudCwgRXZlbnRIaW50LCBNZWNoYW5pc20sIFNldmVyaXR5LCBUcmFuc3BvcnQsIFRyYW5zcG9ydE9wdGlvbnMgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7XG4gIGFkZEV4Y2VwdGlvbk1lY2hhbmlzbSxcbiAgYWRkRXhjZXB0aW9uVHlwZVZhbHVlLFxuICBEc24sXG4gIGV4dHJhY3RFeGNlcHRpb25LZXlzRm9yTWVzc2FnZSxcbiAgaXNFcnJvcixcbiAgaXNQbGFpbk9iamVjdCxcbiAgbm9ybWFsaXplVG9TaXplLFxuICBTeW5jUHJvbWlzZSxcbn0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmltcG9ydCB7IGV4dHJhY3RTdGFja0Zyb21FcnJvciwgcGFyc2VFcnJvciwgcGFyc2VTdGFjaywgcHJlcGFyZUZyYW1lc0ZvckV2ZW50IH0gZnJvbSAnLi9wYXJzZXJzJztcbmltcG9ydCB7IEhUVFBTVHJhbnNwb3J0LCBIVFRQVHJhbnNwb3J0IH0gZnJvbSAnLi90cmFuc3BvcnRzJztcbmltcG9ydCB7IE5vZGVPcHRpb25zIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogVGhlIFNlbnRyeSBOb2RlIFNESyBCYWNrZW5kLlxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgTm9kZUJhY2tlbmQgZXh0ZW5kcyBCYXNlQmFja2VuZDxOb2RlT3B0aW9ucz4ge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzXG4gIHB1YmxpYyBldmVudEZyb21FeGNlcHRpb24oZXhjZXB0aW9uOiBhbnksIGhpbnQ/OiBFdmVudEhpbnQpOiBQcm9taXNlTGlrZTxFdmVudD4ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgbGV0IGV4OiBhbnkgPSBleGNlcHRpb247XG4gICAgY29uc3QgcHJvdmlkZWRNZWNoYW5pc206IE1lY2hhbmlzbSB8IHVuZGVmaW5lZCA9XG4gICAgICBoaW50ICYmIGhpbnQuZGF0YSAmJiAoaGludC5kYXRhIGFzIHsgbWVjaGFuaXNtOiBNZWNoYW5pc20gfSkubWVjaGFuaXNtO1xuICAgIGNvbnN0IG1lY2hhbmlzbTogTWVjaGFuaXNtID0gcHJvdmlkZWRNZWNoYW5pc20gfHwge1xuICAgICAgaGFuZGxlZDogdHJ1ZSxcbiAgICAgIHR5cGU6ICdnZW5lcmljJyxcbiAgICB9O1xuXG4gICAgaWYgKCFpc0Vycm9yKGV4Y2VwdGlvbikpIHtcbiAgICAgIGlmIChpc1BsYWluT2JqZWN0KGV4Y2VwdGlvbikpIHtcbiAgICAgICAgLy8gVGhpcyB3aWxsIGFsbG93IHVzIHRvIGdyb3VwIGV2ZW50cyBiYXNlZCBvbiB0b3AtbGV2ZWwga2V5c1xuICAgICAgICAvLyB3aGljaCBpcyBtdWNoIGJldHRlciB0aGFuIGNyZWF0aW5nIG5ldyBncm91cCB3aGVuIGFueSBrZXkvdmFsdWUgY2hhbmdlXG4gICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgTm9uLUVycm9yIGV4Y2VwdGlvbiBjYXB0dXJlZCB3aXRoIGtleXM6ICR7ZXh0cmFjdEV4Y2VwdGlvbktleXNGb3JNZXNzYWdlKGV4Y2VwdGlvbil9YDtcblxuICAgICAgICBnZXRDdXJyZW50SHViKCkuY29uZmlndXJlU2NvcGUoc2NvcGUgPT4ge1xuICAgICAgICAgIHNjb3BlLnNldEV4dHJhKCdfX3NlcmlhbGl6ZWRfXycsIG5vcm1hbGl6ZVRvU2l6ZShleGNlcHRpb24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZXggPSAoaGludCAmJiBoaW50LnN5bnRoZXRpY0V4Y2VwdGlvbikgfHwgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICAoZXggYXMgRXJyb3IpLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gVGhpcyBoYW5kbGVzIHdoZW4gc29tZW9uZSBkb2VzOiBgdGhyb3cgXCJzb21ldGhpbmcgYXdlc29tZVwiO2BcbiAgICAgICAgLy8gV2UgdXNlIHN5bnRoZXNpemVkIEVycm9yIGhlcmUgc28gd2UgY2FuIGV4dHJhY3QgYSAocm91Z2gpIHN0YWNrIHRyYWNlLlxuICAgICAgICBleCA9IChoaW50ICYmIGhpbnQuc3ludGhldGljRXhjZXB0aW9uKSB8fCBuZXcgRXJyb3IoZXhjZXB0aW9uIGFzIHN0cmluZyk7XG4gICAgICAgIChleCBhcyBFcnJvcikubWVzc2FnZSA9IGV4Y2VwdGlvbjtcbiAgICAgIH1cbiAgICAgIG1lY2hhbmlzbS5zeW50aGV0aWMgPSB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgU3luY1Byb21pc2U8RXZlbnQ+KChyZXNvbHZlLCByZWplY3QpID0+XG4gICAgICBwYXJzZUVycm9yKGV4IGFzIEVycm9yLCB0aGlzLl9vcHRpb25zKVxuICAgICAgICAudGhlbihldmVudCA9PiB7XG4gICAgICAgICAgYWRkRXhjZXB0aW9uVHlwZVZhbHVlKGV2ZW50LCB1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG4gICAgICAgICAgYWRkRXhjZXB0aW9uTWVjaGFuaXNtKGV2ZW50LCBtZWNoYW5pc20pO1xuXG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICAgIGV2ZW50X2lkOiBoaW50ICYmIGhpbnQuZXZlbnRfaWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKG51bGwsIHJlamVjdCksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGV2ZW50RnJvbU1lc3NhZ2UobWVzc2FnZTogc3RyaW5nLCBsZXZlbDogU2V2ZXJpdHkgPSBTZXZlcml0eS5JbmZvLCBoaW50PzogRXZlbnRIaW50KTogUHJvbWlzZUxpa2U8RXZlbnQ+IHtcbiAgICBjb25zdCBldmVudDogRXZlbnQgPSB7XG4gICAgICBldmVudF9pZDogaGludCAmJiBoaW50LmV2ZW50X2lkLFxuICAgICAgbGV2ZWwsXG4gICAgICBtZXNzYWdlLFxuICAgIH07XG5cbiAgICByZXR1cm4gbmV3IFN5bmNQcm9taXNlPEV2ZW50PihyZXNvbHZlID0+IHtcbiAgICAgIGlmICh0aGlzLl9vcHRpb25zLmF0dGFjaFN0YWNrdHJhY2UgJiYgaGludCAmJiBoaW50LnN5bnRoZXRpY0V4Y2VwdGlvbikge1xuICAgICAgICBjb25zdCBzdGFjayA9IGhpbnQuc3ludGhldGljRXhjZXB0aW9uID8gZXh0cmFjdFN0YWNrRnJvbUVycm9yKGhpbnQuc3ludGhldGljRXhjZXB0aW9uKSA6IFtdO1xuICAgICAgICB2b2lkIHBhcnNlU3RhY2soc3RhY2ssIHRoaXMuX29wdGlvbnMpXG4gICAgICAgICAgLnRoZW4oZnJhbWVzID0+IHtcbiAgICAgICAgICAgIGV2ZW50LnN0YWNrdHJhY2UgPSB7XG4gICAgICAgICAgICAgIGZyYW1lczogcHJlcGFyZUZyYW1lc0ZvckV2ZW50KGZyYW1lcyksXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgcmVzb2x2ZShldmVudCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAudGhlbihudWxsLCAoKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlKGV2ZW50KTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc29sdmUoZXZlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwcm90ZWN0ZWQgX3NldHVwVHJhbnNwb3J0KCk6IFRyYW5zcG9ydCB7XG4gICAgaWYgKCF0aGlzLl9vcHRpb25zLmRzbikge1xuICAgICAgLy8gV2UgcmV0dXJuIHRoZSBub29wIHRyYW5zcG9ydCBoZXJlIGluIGNhc2UgdGhlcmUgaXMgbm8gRHNuLlxuICAgICAgcmV0dXJuIHN1cGVyLl9zZXR1cFRyYW5zcG9ydCgpO1xuICAgIH1cblxuICAgIGNvbnN0IGRzbiA9IG5ldyBEc24odGhpcy5fb3B0aW9ucy5kc24pO1xuXG4gICAgY29uc3QgdHJhbnNwb3J0T3B0aW9uczogVHJhbnNwb3J0T3B0aW9ucyA9IHtcbiAgICAgIC4uLnRoaXMuX29wdGlvbnMudHJhbnNwb3J0T3B0aW9ucyxcbiAgICAgIC4uLih0aGlzLl9vcHRpb25zLmh0dHBQcm94eSAmJiB7IGh0dHBQcm94eTogdGhpcy5fb3B0aW9ucy5odHRwUHJveHkgfSksXG4gICAgICAuLi4odGhpcy5fb3B0aW9ucy5odHRwc1Byb3h5ICYmIHsgaHR0cHNQcm94eTogdGhpcy5fb3B0aW9ucy5odHRwc1Byb3h5IH0pLFxuICAgICAgLi4uKHRoaXMuX29wdGlvbnMuY2FDZXJ0cyAmJiB7IGNhQ2VydHM6IHRoaXMuX29wdGlvbnMuY2FDZXJ0cyB9KSxcbiAgICAgIGRzbjogdGhpcy5fb3B0aW9ucy5kc24sXG4gICAgICB0dW5uZWw6IHRoaXMuX29wdGlvbnMudHVubmVsLFxuICAgICAgX21ldGFkYXRhOiB0aGlzLl9vcHRpb25zLl9tZXRhZGF0YSxcbiAgICB9O1xuXG4gICAgaWYgKHRoaXMuX29wdGlvbnMudHJhbnNwb3J0KSB7XG4gICAgICByZXR1cm4gbmV3IHRoaXMuX29wdGlvbnMudHJhbnNwb3J0KHRyYW5zcG9ydE9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAoZHNuLnByb3RvY29sID09PSAnaHR0cCcpIHtcbiAgICAgIHJldHVybiBuZXcgSFRUUFRyYW5zcG9ydCh0cmFuc3BvcnRPcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBIVFRQU1RyYW5zcG9ydCh0cmFuc3BvcnRPcHRpb25zKTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEJhc2VDbGllbnQsIFNjb3BlLCBTREtfVkVSU0lPTiB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyBTZXNzaW9uRmx1c2hlciB9IGZyb20gJ0BzZW50cnkvaHViJztcbmltcG9ydCB7IEV2ZW50LCBFdmVudEhpbnQsIFJlcXVlc3RTZXNzaW9uU3RhdHVzIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuaW1wb3J0IHsgTm9kZUJhY2tlbmQgfSBmcm9tICcuL2JhY2tlbmQnO1xuaW1wb3J0IHsgTm9kZU9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBUaGUgU2VudHJ5IE5vZGUgU0RLIENsaWVudC5cbiAqXG4gKiBAc2VlIE5vZGVPcHRpb25zIGZvciBkb2N1bWVudGF0aW9uIG9uIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy5cbiAqIEBzZWUgU2VudHJ5Q2xpZW50IGZvciB1c2FnZSBkb2N1bWVudGF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgTm9kZUNsaWVudCBleHRlbmRzIEJhc2VDbGllbnQ8Tm9kZUJhY2tlbmQsIE5vZGVPcHRpb25zPiB7XG4gIHByb3RlY3RlZCBfc2Vzc2lvbkZsdXNoZXI6IFNlc3Npb25GbHVzaGVyIHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IE5vZGUgU0RLIGluc3RhbmNlLlxuICAgKiBAcGFyYW0gb3B0aW9ucyBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoaXMgU0RLLlxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE5vZGVPcHRpb25zKSB7XG4gICAgb3B0aW9ucy5fbWV0YWRhdGEgPSBvcHRpb25zLl9tZXRhZGF0YSB8fCB7fTtcbiAgICBvcHRpb25zLl9tZXRhZGF0YS5zZGsgPSBvcHRpb25zLl9tZXRhZGF0YS5zZGsgfHwge1xuICAgICAgbmFtZTogJ3NlbnRyeS5qYXZhc2NyaXB0Lm5vZGUnLFxuICAgICAgcGFja2FnZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICducG06QHNlbnRyeS9ub2RlJyxcbiAgICAgICAgICB2ZXJzaW9uOiBTREtfVkVSU0lPTixcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgICB2ZXJzaW9uOiBTREtfVkVSU0lPTixcbiAgICB9O1xuXG4gICAgc3VwZXIoTm9kZUJhY2tlbmQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xuICBwdWJsaWMgY2FwdHVyZUV4Y2VwdGlvbihleGNlcHRpb246IGFueSwgaGludD86IEV2ZW50SGludCwgc2NvcGU/OiBTY29wZSk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgLy8gQ2hlY2sgaWYgdGhlIGZsYWcgYGF1dG9TZXNzaW9uVHJhY2tpbmdgIGlzIGVuYWJsZWQsIGFuZCBpZiBgX3Nlc3Npb25GbHVzaGVyYCBleGlzdHMgYmVjYXVzZSBpdCBpcyBpbml0aWFsaXNlZCBvbmx5XG4gICAgLy8gd2hlbiB0aGUgYHJlcXVlc3RIYW5kbGVyYCBtaWRkbGV3YXJlIGlzIHVzZWQsIGFuZCBoZW5jZSB0aGUgZXhwZWN0YXRpb24gaXMgdG8gaGF2ZSBTZXNzaW9uQWdncmVnYXRlcyBwYXlsb2FkXG4gICAgLy8gc2VudCB0byB0aGUgU2VydmVyIG9ubHkgd2hlbiB0aGUgYHJlcXVlc3RIYW5kbGVyYCBtaWRkbGV3YXJlIGlzIHVzZWRcbiAgICBpZiAodGhpcy5fb3B0aW9ucy5hdXRvU2Vzc2lvblRyYWNraW5nICYmIHRoaXMuX3Nlc3Npb25GbHVzaGVyICYmIHNjb3BlKSB7XG4gICAgICBjb25zdCByZXF1ZXN0U2Vzc2lvbiA9IHNjb3BlLmdldFJlcXVlc3RTZXNzaW9uKCk7XG5cbiAgICAgIC8vIE5lY2Vzc2FyeSBjaGVja3MgdG8gZW5zdXJlIHRoaXMgaXMgY29kZSBibG9jayBpcyBleGVjdXRlZCBvbmx5IHdpdGhpbiBhIHJlcXVlc3RcbiAgICAgIC8vIFNob3VsZCBvdmVycmlkZSB0aGUgc3RhdHVzIG9ubHkgaWYgYHJlcXVlc3RTZXNzaW9uLnN0YXR1c2AgaXMgYE9rYCwgd2hpY2ggaXMgaXRzIGluaXRpYWwgc3RhZ2VcbiAgICAgIGlmIChyZXF1ZXN0U2Vzc2lvbiAmJiByZXF1ZXN0U2Vzc2lvbi5zdGF0dXMgPT09IFJlcXVlc3RTZXNzaW9uU3RhdHVzLk9rKSB7XG4gICAgICAgIHJlcXVlc3RTZXNzaW9uLnN0YXR1cyA9IFJlcXVlc3RTZXNzaW9uU3RhdHVzLkVycm9yZWQ7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmNhcHR1cmVFeGNlcHRpb24oZXhjZXB0aW9uLCBoaW50LCBzY29wZSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBjYXB0dXJlRXZlbnQoZXZlbnQ6IEV2ZW50LCBoaW50PzogRXZlbnRIaW50LCBzY29wZT86IFNjb3BlKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAvLyBDaGVjayBpZiB0aGUgZmxhZyBgYXV0b1Nlc3Npb25UcmFja2luZ2AgaXMgZW5hYmxlZCwgYW5kIGlmIGBfc2Vzc2lvbkZsdXNoZXJgIGV4aXN0cyBiZWNhdXNlIGl0IGlzIGluaXRpYWxpc2VkIG9ubHlcbiAgICAvLyB3aGVuIHRoZSBgcmVxdWVzdEhhbmRsZXJgIG1pZGRsZXdhcmUgaXMgdXNlZCwgYW5kIGhlbmNlIHRoZSBleHBlY3RhdGlvbiBpcyB0byBoYXZlIFNlc3Npb25BZ2dyZWdhdGVzIHBheWxvYWRcbiAgICAvLyBzZW50IHRvIHRoZSBTZXJ2ZXIgb25seSB3aGVuIHRoZSBgcmVxdWVzdEhhbmRsZXJgIG1pZGRsZXdhcmUgaXMgdXNlZFxuICAgIGlmICh0aGlzLl9vcHRpb25zLmF1dG9TZXNzaW9uVHJhY2tpbmcgJiYgdGhpcy5fc2Vzc2lvbkZsdXNoZXIgJiYgc2NvcGUpIHtcbiAgICAgIGNvbnN0IGV2ZW50VHlwZSA9IGV2ZW50LnR5cGUgfHwgJ2V4Y2VwdGlvbic7XG4gICAgICBjb25zdCBpc0V4Y2VwdGlvbiA9XG4gICAgICAgIGV2ZW50VHlwZSA9PT0gJ2V4Y2VwdGlvbicgJiYgZXZlbnQuZXhjZXB0aW9uICYmIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMgJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcy5sZW5ndGggPiAwO1xuXG4gICAgICAvLyBJZiB0aGUgZXZlbnQgaXMgb2YgdHlwZSBFeGNlcHRpb24sIHRoZW4gYSByZXF1ZXN0IHNlc3Npb24gc2hvdWxkIGJlIGNhcHR1cmVkXG4gICAgICBpZiAoaXNFeGNlcHRpb24pIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdFNlc3Npb24gPSBzY29wZS5nZXRSZXF1ZXN0U2Vzc2lvbigpO1xuXG4gICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoaXMgaXMgaGFwcGVuaW5nIHdpdGhpbiB0aGUgYm91bmRzIG9mIGEgcmVxdWVzdCwgYW5kIG1ha2Ugc3VyZSBub3QgdG8gb3ZlcnJpZGVcbiAgICAgICAgLy8gU2Vzc2lvbiBTdGF0dXMgaWYgRXJyb3JlZCAvIENyYXNoZWRcbiAgICAgICAgaWYgKHJlcXVlc3RTZXNzaW9uICYmIHJlcXVlc3RTZXNzaW9uLnN0YXR1cyA9PT0gUmVxdWVzdFNlc3Npb25TdGF0dXMuT2spIHtcbiAgICAgICAgICByZXF1ZXN0U2Vzc2lvbi5zdGF0dXMgPSBSZXF1ZXN0U2Vzc2lvblN0YXR1cy5FcnJvcmVkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmNhcHR1cmVFdmVudChldmVudCwgaGludCwgc2NvcGUpO1xuICB9XG5cbiAgLyoqXG4gICAqXG4gICAqIEBpbmhlcml0ZG9jXG4gICAqL1xuICBwdWJsaWMgY2xvc2UodGltZW91dD86IG51bWJlcik6IFByb21pc2VMaWtlPGJvb2xlYW4+IHtcbiAgICB0aGlzLl9zZXNzaW9uRmx1c2hlcj8uY2xvc2UoKTtcbiAgICByZXR1cm4gc3VwZXIuY2xvc2UodGltZW91dCk7XG4gIH1cblxuICAvKiogTWV0aG9kIHRoYXQgaW5pdGlhbGlzZXMgYW4gaW5zdGFuY2Ugb2YgU2Vzc2lvbkZsdXNoZXIgb24gQ2xpZW50ICovXG4gIHB1YmxpYyBpbml0U2Vzc2lvbkZsdXNoZXIoKTogdm9pZCB7XG4gICAgY29uc3QgeyByZWxlYXNlLCBlbnZpcm9ubWVudCB9ID0gdGhpcy5fb3B0aW9ucztcbiAgICBpZiAoIXJlbGVhc2UpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdDYW5ub3QgaW5pdGlhbGlzZSBhbiBpbnN0YW5jZSBvZiBTZXNzaW9uRmx1c2hlciBpZiBubyByZWxlYXNlIGlzIHByb3ZpZGVkIScpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9zZXNzaW9uRmx1c2hlciA9IG5ldyBTZXNzaW9uRmx1c2hlcih0aGlzLmdldFRyYW5zcG9ydCgpLCB7XG4gICAgICAgIHJlbGVhc2UsXG4gICAgICAgIGVudmlyb25tZW50LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwcm90ZWN0ZWQgX3ByZXBhcmVFdmVudChldmVudDogRXZlbnQsIHNjb3BlPzogU2NvcGUsIGhpbnQ/OiBFdmVudEhpbnQpOiBQcm9taXNlTGlrZTxFdmVudCB8IG51bGw+IHtcbiAgICBldmVudC5wbGF0Zm9ybSA9IGV2ZW50LnBsYXRmb3JtIHx8ICdub2RlJztcbiAgICBpZiAodGhpcy5nZXRPcHRpb25zKCkuc2VydmVyTmFtZSkge1xuICAgICAgZXZlbnQuc2VydmVyX25hbWUgPSB0aGlzLmdldE9wdGlvbnMoKS5zZXJ2ZXJOYW1lO1xuICAgIH1cbiAgICByZXR1cm4gc3VwZXIuX3ByZXBhcmVFdmVudChldmVudCwgc2NvcGUsIGhpbnQpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1ldGhvZCByZXNwb25zaWJsZSBmb3IgY2FwdHVyaW5nL2VuZGluZyBhIHJlcXVlc3Qgc2Vzc2lvbiBieSBjYWxsaW5nIGBpbmNyZW1lbnRTZXNzaW9uU3RhdHVzQ291bnRgIHRvIGluY3JlbWVudFxuICAgKiBhcHByb3ByaWF0ZSBzZXNzaW9uIGFnZ3JlZ2F0ZXMgYnVja2V0XG4gICAqL1xuICBwcm90ZWN0ZWQgX2NhcHR1cmVSZXF1ZXN0U2Vzc2lvbigpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuX3Nlc3Npb25GbHVzaGVyKSB7XG4gICAgICBsb2dnZXIud2FybignRGlzY2FyZGVkIHJlcXVlc3QgbW9kZSBzZXNzaW9uIGJlY2F1c2UgYXV0b1Nlc3Npb25UcmFja2luZyBvcHRpb24gd2FzIGRpc2FibGVkJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Nlc3Npb25GbHVzaGVyLmluY3JlbWVudFNlc3Npb25TdGF0dXNDb3VudCgpO1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IGdldEN1cnJlbnRIdWIgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgSW50ZWdyYXRpb24sIFNldmVyaXR5IH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBmaWxsIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5pbXBvcnQgKiBhcyB1dGlsIGZyb20gJ3V0aWwnO1xuXG4vKiogQ29uc29sZSBtb2R1bGUgaW50ZWdyYXRpb24gKi9cbmV4cG9ydCBjbGFzcyBDb25zb2xlIGltcGxlbWVudHMgSW50ZWdyYXRpb24ge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaWQ6IHN0cmluZyA9ICdDb25zb2xlJztcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSBDb25zb2xlLmlkO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldHVwT25jZSgpOiB2b2lkIHtcbiAgICBmb3IgKGNvbnN0IGxldmVsIG9mIFsnZGVidWcnLCAnaW5mbycsICd3YXJuJywgJ2Vycm9yJywgJ2xvZyddKSB7XG4gICAgICBmaWxsKGNvbnNvbGUsIGxldmVsLCBjcmVhdGVDb25zb2xlV3JhcHBlcihsZXZlbCkpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFdyYXBwZXIgZnVuY3Rpb24gdGhhdCdsbCBiZSB1c2VkIGZvciBldmVyeSBjb25zb2xlIGxldmVsXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUNvbnNvbGVXcmFwcGVyKGxldmVsOiBzdHJpbmcpOiAob3JpZ2luYWxDb25zb2xlTWV0aG9kOiAoKSA9PiB2b2lkKSA9PiB2b2lkIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbnNvbGVXcmFwcGVyKG9yaWdpbmFsQ29uc29sZU1ldGhvZDogKCkgPT4gdm9pZCk6ICgpID0+IHZvaWQge1xuICAgIGxldCBzZW50cnlMZXZlbDogU2V2ZXJpdHk7XG5cbiAgICBzd2l0Y2ggKGxldmVsKSB7XG4gICAgICBjYXNlICdkZWJ1Zyc6XG4gICAgICAgIHNlbnRyeUxldmVsID0gU2V2ZXJpdHkuRGVidWc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZXJyb3InOlxuICAgICAgICBzZW50cnlMZXZlbCA9IFNldmVyaXR5LkVycm9yO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2luZm8nOlxuICAgICAgICBzZW50cnlMZXZlbCA9IFNldmVyaXR5LkluZm87XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnd2Fybic6XG4gICAgICAgIHNlbnRyeUxldmVsID0gU2V2ZXJpdHkuV2FybmluZztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBzZW50cnlMZXZlbCA9IFNldmVyaXR5LkxvZztcbiAgICB9XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBwcmVmZXItcmVzdC1wYXJhbXMgKi9cbiAgICByZXR1cm4gZnVuY3Rpb24odGhpczogdHlwZW9mIGNvbnNvbGUpOiB2b2lkIHtcbiAgICAgIGlmIChnZXRDdXJyZW50SHViKCkuZ2V0SW50ZWdyYXRpb24oQ29uc29sZSkpIHtcbiAgICAgICAgZ2V0Q3VycmVudEh1YigpLmFkZEJyZWFkY3J1bWIoXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2F0ZWdvcnk6ICdjb25zb2xlJyxcbiAgICAgICAgICAgIGxldmVsOiBzZW50cnlMZXZlbCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IHV0aWwuZm9ybWF0LmFwcGx5KHVuZGVmaW5lZCwgYXJndW1lbnRzKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGlucHV0OiBbLi4uYXJndW1lbnRzXSxcbiAgICAgICAgICAgIGxldmVsLFxuICAgICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIG9yaWdpbmFsQ29uc29sZU1ldGhvZC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gICAgLyogZXNsaW50LWVuYWJsZSBwcmVmZXItcmVzdC1wYXJhbXMgKi9cbiAgfTtcbn1cbiIsICJpbXBvcnQgeyBnZXRDdXJyZW50SHViIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IHBhcnNlU2VtdmVyIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5pbXBvcnQgKiBhcyBodHRwIGZyb20gJ2h0dHAnO1xuaW1wb3J0ICogYXMgaHR0cHMgZnJvbSAnaHR0cHMnO1xuaW1wb3J0IHsgVVJMIH0gZnJvbSAndXJsJztcblxuY29uc3QgTk9ERV9WRVJTSU9OID0gcGFyc2VTZW12ZXIocHJvY2Vzcy52ZXJzaW9ucy5ub2RlKTtcblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBnaXZlbiB1cmwgcG9pbnRzIHRvIFNlbnRyeSBzZXJ2ZXJcbiAqIEBwYXJhbSB1cmwgdXJsIHRvIHZlcmlmeVxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTZW50cnlSZXF1ZXN0KHVybDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IGRzbiA9IGdldEN1cnJlbnRIdWIoKVxuICAgIC5nZXRDbGllbnQoKVxuICAgID8uZ2V0RHNuKCk7XG4gIHJldHVybiBkc24gPyB1cmwuaW5jbHVkZXMoZHNuLmhvc3QpIDogZmFsc2U7XG59XG5cbi8qKlxuICogQXNzZW1ibGUgYSBVUkwgdG8gYmUgdXNlZCBmb3IgYnJlYWRjcnVtYnMgYW5kIHNwYW5zLlxuICpcbiAqIEBwYXJhbSByZXF1ZXN0T3B0aW9ucyBSZXF1ZXN0T3B0aW9ucyBvYmplY3QgY29udGFpbmluZyB0aGUgY29tcG9uZW50IHBhcnRzIGZvciBhIFVSTFxuICogQHJldHVybnMgRnVsbHktZm9ybWVkIFVSTFxuICovXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdFVybChyZXF1ZXN0T3B0aW9uczogUmVxdWVzdE9wdGlvbnMpOiBzdHJpbmcge1xuICBjb25zdCBwcm90b2NvbCA9IHJlcXVlc3RPcHRpb25zLnByb3RvY29sIHx8ICcnO1xuICBjb25zdCBob3N0bmFtZSA9IHJlcXVlc3RPcHRpb25zLmhvc3RuYW1lIHx8IHJlcXVlc3RPcHRpb25zLmhvc3QgfHwgJyc7XG4gIC8vIERvbid0IGxvZyBzdGFuZGFyZCA6ODAgKGh0dHApIGFuZCA6NDQzIChodHRwcykgcG9ydHMgdG8gcmVkdWNlIHRoZSBub2lzZVxuICBjb25zdCBwb3J0ID1cbiAgICAhcmVxdWVzdE9wdGlvbnMucG9ydCB8fCByZXF1ZXN0T3B0aW9ucy5wb3J0ID09PSA4MCB8fCByZXF1ZXN0T3B0aW9ucy5wb3J0ID09PSA0NDMgPyAnJyA6IGA6JHtyZXF1ZXN0T3B0aW9ucy5wb3J0fWA7XG4gIGNvbnN0IHBhdGggPSByZXF1ZXN0T3B0aW9ucy5wYXRoID8gcmVxdWVzdE9wdGlvbnMucGF0aCA6ICcvJztcblxuICByZXR1cm4gYCR7cHJvdG9jb2x9Ly8ke2hvc3RuYW1lfSR7cG9ydH0ke3BhdGh9YDtcbn1cblxuLyoqXG4gKiBIYW5kbGUgdmFyaW91cyBlZGdlIGNhc2VzIGluIHRoZSBzcGFuIGRlc2NyaXB0aW9uIChmb3Igc3BhbnMgcmVwcmVzZW50aW5nIGh0dHAocykgcmVxdWVzdHMpLlxuICpcbiAqIEBwYXJhbSBkZXNjcmlwdGlvbiBjdXJyZW50IGBkZXNjcmlwdGlvbmAgcHJvcGVydHkgb2YgdGhlIHNwYW4gcmVwcmVzZW50aW5nIHRoZSByZXF1ZXN0XG4gKiBAcGFyYW0gcmVxdWVzdE9wdGlvbnMgQ29uZmlndXJhdGlvbiBkYXRhIGZvciB0aGUgcmVxdWVzdFxuICogQHBhcmFtIFJlcXVlc3QgUmVxdWVzdCBvYmplY3RcbiAqXG4gKiBAcmV0dXJucyBUaGUgY2xlYW5lZCBkZXNjcmlwdGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xlYW5TcGFuRGVzY3JpcHRpb24oXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gIHJlcXVlc3RPcHRpb25zOiBSZXF1ZXN0T3B0aW9ucyxcbiAgcmVxdWVzdDogaHR0cC5DbGllbnRSZXF1ZXN0LFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgLy8gbm90aGluZyB0byBjbGVhblxuICBpZiAoIWRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIGRlc2NyaXB0aW9uO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZWZlci1jb25zdFxuICBsZXQgW21ldGhvZCwgcmVxdWVzdFVybF0gPSBkZXNjcmlwdGlvbi5zcGxpdCgnICcpO1xuXG4gIC8vIHN1cGVyYWdlbnQgc3RpY2tzIHRoZSBwcm90b2NvbCBpbiBhIHdlaXJkIHBsYWNlICh3ZSBjaGVjayBmb3IgaG9zdCBiZWNhdXNlIGlmIGJvdGggaG9zdCAqYW5kKiBwcm90b2NvbCBhcmUgbWlzc2luZyxcbiAgLy8gd2UncmUgbGlrZWx5IGRlYWxpbmcgd2l0aCBhbiBpbnRlcm5hbCByb3V0ZSBhbmQgdGhpcyBkb2Vzbid0IGFwcGx5KVxuICBpZiAocmVxdWVzdE9wdGlvbnMuaG9zdCAmJiAhcmVxdWVzdE9wdGlvbnMucHJvdG9jb2wpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgcmVxdWVzdE9wdGlvbnMucHJvdG9jb2wgPSAocmVxdWVzdCBhcyBhbnkpPy5hZ2VudD8ucHJvdG9jb2w7IC8vIHdvcnN0IGNvbWVzIHRvIHdvcnN0LCB0aGlzIGlzIHVuZGVmaW5lZCBhbmQgbm90aGluZyBjaGFuZ2VzXG4gICAgcmVxdWVzdFVybCA9IGV4dHJhY3RVcmwocmVxdWVzdE9wdGlvbnMpO1xuICB9XG5cbiAgLy8gaW50ZXJuYWwgcm91dGVzIGNhbiBlbmQgdXAgc3RhcnRpbmcgd2l0aCBhIHRyaXBsZSBzbGFzaCByYXRoZXIgdGhhbiBhIHNpbmdsZSBvbmVcbiAgaWYgKHJlcXVlc3RVcmw/LnN0YXJ0c1dpdGgoJy8vLycpKSB7XG4gICAgcmVxdWVzdFVybCA9IHJlcXVlc3RVcmwuc2xpY2UoMik7XG4gIH1cblxuICByZXR1cm4gYCR7bWV0aG9kfSAke3JlcXVlc3RVcmx9YDtcbn1cblxuLy8gdGhlIG5vZGUgdHlwZXMgYXJlIG1pc3NpbmcgYSBmZXcgcHJvcGVydGllcyB3aGljaCBub2RlJ3MgYHVybFRvT3B0aW9uc2AgZnVuY3Rpb24gc3BpdHMgb3V0XG5leHBvcnQgdHlwZSBSZXF1ZXN0T3B0aW9ucyA9IGh0dHAuUmVxdWVzdE9wdGlvbnMgJiB7IGhhc2g/OiBzdHJpbmc7IHNlYXJjaD86IHN0cmluZzsgcGF0aG5hbWU/OiBzdHJpbmc7IGhyZWY/OiBzdHJpbmcgfTtcbnR5cGUgUmVxdWVzdENhbGxiYWNrID0gKHJlc3BvbnNlOiBodHRwLkluY29taW5nTWVzc2FnZSkgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIFJlcXVlc3RNZXRob2RBcmdzID1cbiAgfCBbUmVxdWVzdE9wdGlvbnMgfCBzdHJpbmcgfCBVUkwsIFJlcXVlc3RDYWxsYmFjaz9dXG4gIHwgW3N0cmluZyB8IFVSTCwgUmVxdWVzdE9wdGlvbnMsIFJlcXVlc3RDYWxsYmFjaz9dO1xuZXhwb3J0IHR5cGUgUmVxdWVzdE1ldGhvZCA9ICguLi5hcmdzOiBSZXF1ZXN0TWV0aG9kQXJncykgPT4gaHR0cC5DbGllbnRSZXF1ZXN0O1xuXG4vKipcbiAqIENvbnZlcnQgYSBVUkwgb2JqZWN0IGludG8gYSBSZXF1ZXN0T3B0aW9ucyBvYmplY3QuXG4gKlxuICogQ29waWVkIGZyb20gTm9kZSdzIGludGVybmFscyAod2hlcmUgaXQncyB1c2VkIGluIGh0dHAocykucmVxdWVzdCgpIGFuZCBodHRwKHMpLmdldCgpKSwgbW9kaWZpZWQgb25seSB0byB1c2UgdGhlXG4gKiBSZXF1ZXN0T3B0aW9ucyB0eXBlIGFib3ZlLlxuICpcbiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9tYXN0ZXIvbGliL2ludGVybmFsL3VybC5qcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVybFRvT3B0aW9ucyh1cmw6IFVSTCk6IFJlcXVlc3RPcHRpb25zIHtcbiAgY29uc3Qgb3B0aW9uczogUmVxdWVzdE9wdGlvbnMgPSB7XG4gICAgcHJvdG9jb2w6IHVybC5wcm90b2NvbCxcbiAgICBob3N0bmFtZTpcbiAgICAgIHR5cGVvZiB1cmwuaG9zdG5hbWUgPT09ICdzdHJpbmcnICYmIHVybC5ob3N0bmFtZS5zdGFydHNXaXRoKCdbJykgPyB1cmwuaG9zdG5hbWUuc2xpY2UoMSwgLTEpIDogdXJsLmhvc3RuYW1lLFxuICAgIGhhc2g6IHVybC5oYXNoLFxuICAgIHNlYXJjaDogdXJsLnNlYXJjaCxcbiAgICBwYXRobmFtZTogdXJsLnBhdGhuYW1lLFxuICAgIHBhdGg6IGAke3VybC5wYXRobmFtZSB8fCAnJ30ke3VybC5zZWFyY2ggfHwgJyd9YCxcbiAgICBocmVmOiB1cmwuaHJlZixcbiAgfTtcbiAgaWYgKHVybC5wb3J0ICE9PSAnJykge1xuICAgIG9wdGlvbnMucG9ydCA9IE51bWJlcih1cmwucG9ydCk7XG4gIH1cbiAgaWYgKHVybC51c2VybmFtZSB8fCB1cmwucGFzc3dvcmQpIHtcbiAgICBvcHRpb25zLmF1dGggPSBgJHt1cmwudXNlcm5hbWV9OiR7dXJsLnBhc3N3b3JkfWA7XG4gIH1cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbi8qKlxuICogTm9ybWFsaXplIGlucHV0cyB0byBgaHR0cChzKS5yZXF1ZXN0KClgIGFuZCBgaHR0cChzKS5nZXQoKWAuXG4gKlxuICogTGVnYWwgaW5wdXRzIHRvIGBodHRwKHMpLnJlcXVlc3QoKWAgYW5kIGBodHRwKHMpLmdldCgpYCBjYW4gdGFrZSBvbmUgb2YgdGVuIGZvcm1zOlxuICogICAgIFsgUmVxdWVzdE9wdGlvbnMgfCBzdHJpbmcgfCBVUkwgXSxcbiAqICAgICBbIFJlcXVlc3RPcHRpb25zIHwgc3RyaW5nIHwgVVJMLCBSZXF1ZXN0Q2FsbGJhY2sgXSxcbiAqICAgICBbIHN0cmluZyB8IFVSTCwgUmVxdWVzdE9wdGlvbnMgXSwgYW5kXG4gKiAgICAgWyBzdHJpbmcgfCBVUkwsIFJlcXVlc3RPcHRpb25zLCBSZXF1ZXN0Q2FsbGJhY2sgXS5cbiAqXG4gKiBUaGlzIHN0YW5kYXJkaXplcyB0byBvbmUgb2YgdHdvIGZvcm1zOiBbIFJlcXVlc3RPcHRpb25zIF0gYW5kIFsgUmVxdWVzdE9wdGlvbnMsIFJlcXVlc3RDYWxsYmFjayBdLiBBIHNpbWlsYXIgdGhpbmcgaXNcbiAqIGRvbmUgYXMgdGhlIGZpcnN0IHN0ZXAgb2YgYGh0dHAocykucmVxdWVzdCgpYCBhbmQgYGh0dHAocykuZ2V0KClgOyB0aGlzIGp1c3QgZG9lcyBpdCBlYXJseSBzbyB0aGF0IHdlIGNhbiBpbnRlcmFjdFxuICogd2l0aCB0aGUgYXJncyBpbiBhIHN0YW5kYXJkIHdheS5cbiAqXG4gKiBAcGFyYW0gcmVxdWVzdEFyZ3MgVGhlIGlucHV0cyB0byBgaHR0cChzKS5yZXF1ZXN0KClgIG9yIGBodHRwKHMpLmdldCgpYCwgYXMgYW4gYXJyYXkuXG4gKlxuICogQHJldHVybnMgRXF1aXZhbGVudCBhcmdzIG9mIHRoZSBmb3JtIFsgUmVxdWVzdE9wdGlvbnMgXSBvciBbIFJlcXVlc3RPcHRpb25zLCBSZXF1ZXN0Q2FsbGJhY2sgXS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVJlcXVlc3RBcmdzKFxuICBodHRwTW9kdWxlOiB0eXBlb2YgaHR0cCB8IHR5cGVvZiBodHRwcyxcbiAgcmVxdWVzdEFyZ3M6IFJlcXVlc3RNZXRob2RBcmdzLFxuKTogW1JlcXVlc3RPcHRpb25zXSB8IFtSZXF1ZXN0T3B0aW9ucywgUmVxdWVzdENhbGxiYWNrXSB7XG4gIGxldCBjYWxsYmFjaywgcmVxdWVzdE9wdGlvbnM7XG5cbiAgLy8gcG9wIG9mZiB0aGUgY2FsbGJhY2ssIGlmIHRoZXJlIGlzIG9uZVxuICBpZiAodHlwZW9mIHJlcXVlc3RBcmdzW3JlcXVlc3RBcmdzLmxlbmd0aCAtIDFdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY2FsbGJhY2sgPSByZXF1ZXN0QXJncy5wb3AoKSBhcyBSZXF1ZXN0Q2FsbGJhY2s7XG4gIH1cblxuICAvLyBjcmVhdGUgYSBSZXF1ZXN0T3B0aW9ucyBvYmplY3Qgb2Ygd2hhdGV2ZXIncyBhdCBpbmRleCAwXG4gIGlmICh0eXBlb2YgcmVxdWVzdEFyZ3NbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgcmVxdWVzdE9wdGlvbnMgPSB1cmxUb09wdGlvbnMobmV3IFVSTChyZXF1ZXN0QXJnc1swXSkpO1xuICB9IGVsc2UgaWYgKHJlcXVlc3RBcmdzWzBdIGluc3RhbmNlb2YgVVJMKSB7XG4gICAgcmVxdWVzdE9wdGlvbnMgPSB1cmxUb09wdGlvbnMocmVxdWVzdEFyZ3NbMF0pO1xuICB9IGVsc2Uge1xuICAgIHJlcXVlc3RPcHRpb25zID0gcmVxdWVzdEFyZ3NbMF07XG4gIH1cblxuICAvLyBpZiB0aGUgb3B0aW9ucyB3ZXJlIGdpdmVuIHNlcGFyYXRlbHkgZnJvbSB0aGUgVVJMLCBmb2xkIHRoZW0gaW5cbiAgaWYgKHJlcXVlc3RBcmdzLmxlbmd0aCA9PT0gMikge1xuICAgIHJlcXVlc3RPcHRpb25zID0geyAuLi5yZXF1ZXN0T3B0aW9ucywgLi4ucmVxdWVzdEFyZ3NbMV0gfTtcbiAgfVxuXG4gIC8vIEZpZ3VyZSBvdXQgdGhlIHByb3RvY29sIGlmIGl0J3MgY3VycmVudGx5IG1pc3NpbmdcbiAgaWYgKHJlcXVlc3RPcHRpb25zLnByb3RvY29sID09PSB1bmRlZmluZWQpIHtcbiAgICAvLyBXb3JzdCBjYXNlIHdlIGVuZCB1cCBwb3B1bGF0aW5nIHByb3RvY29sIHdpdGggdW5kZWZpbmVkLCB3aGljaCBpdCBhbHJlYWR5IGlzXG4gICAgLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5cbiAgICAvLyBOT1RFOiBQcmlvciB0byBOb2RlIDksIGBodHRwc2AgdXNlZCBpbnRlcm5hbHMgb2YgYGh0dHBgIG1vZHVsZSwgdGh1cyB3ZSBkb24ndCBwYXRjaCBpdC5cbiAgICAvLyBCZWNhdXNlIG9mIHRoYXQsIHdlIGNhbm5vdCByZWx5IG9uIGBodHRwTW9kdWxlYCB0byBwcm92aWRlIHVzIHdpdGggdmFsaWQgcHJvdG9jb2wsXG4gICAgLy8gYXMgaXQgd2lsbCBhbHdheXMgcmV0dXJuIGBodHRwYCwgZXZlbiB3aGVuIHVzaW5nIGBodHRwc2AgbW9kdWxlLlxuICAgIC8vXG4gICAgLy8gU2VlIHRlc3QvaW50ZWdyYXRpb25zL2h0dHAudGVzdC50cyBmb3IgbW9yZSBkZXRhaWxzIG9uIE5vZGUgPD12OCBwcm90b2NvbCBpc3N1ZS5cbiAgICBpZiAoTk9ERV9WRVJTSU9OLm1ham9yICYmIE5PREVfVkVSU0lPTi5tYWpvciA+IDgpIHtcbiAgICAgIHJlcXVlc3RPcHRpb25zLnByb3RvY29sID1cbiAgICAgICAgKGh0dHBNb2R1bGU/Lmdsb2JhbEFnZW50IGFzIGFueSk/LnByb3RvY29sIHx8XG4gICAgICAgIChyZXF1ZXN0T3B0aW9ucy5hZ2VudCBhcyBhbnkpPy5wcm90b2NvbCB8fFxuICAgICAgICAocmVxdWVzdE9wdGlvbnMuX2RlZmF1bHRBZ2VudCBhcyBhbnkpPy5wcm90b2NvbDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVxdWVzdE9wdGlvbnMucHJvdG9jb2wgPVxuICAgICAgICAocmVxdWVzdE9wdGlvbnMuYWdlbnQgYXMgYW55KT8ucHJvdG9jb2wgfHxcbiAgICAgICAgKHJlcXVlc3RPcHRpb25zLl9kZWZhdWx0QWdlbnQgYXMgYW55KT8ucHJvdG9jb2wgfHxcbiAgICAgICAgKGh0dHBNb2R1bGU/Lmdsb2JhbEFnZW50IGFzIGFueSk/LnByb3RvY29sO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuICB9XG5cbiAgLy8gcmV0dXJuIGFyZ3MgaW4gc3RhbmRhcmRpemVkIGZvcm1cbiAgaWYgKGNhbGxiYWNrKSB7XG4gICAgcmV0dXJuIFtyZXF1ZXN0T3B0aW9ucywgY2FsbGJhY2tdO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBbcmVxdWVzdE9wdGlvbnNdO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgZ2V0Q3VycmVudEh1YiB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyBJbnRlZ3JhdGlvbiwgU3BhbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgZmlsbCwgbG9nZ2VyLCBwYXJzZVNlbXZlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuaW1wb3J0ICogYXMgaHR0cCBmcm9tICdodHRwJztcbmltcG9ydCAqIGFzIGh0dHBzIGZyb20gJ2h0dHBzJztcblxuaW1wb3J0IHtcbiAgY2xlYW5TcGFuRGVzY3JpcHRpb24sXG4gIGV4dHJhY3RVcmwsXG4gIGlzU2VudHJ5UmVxdWVzdCxcbiAgbm9ybWFsaXplUmVxdWVzdEFyZ3MsXG4gIFJlcXVlc3RNZXRob2QsXG4gIFJlcXVlc3RNZXRob2RBcmdzLFxufSBmcm9tICcuL3V0aWxzL2h0dHAnO1xuXG5jb25zdCBOT0RFX1ZFUlNJT04gPSBwYXJzZVNlbXZlcihwcm9jZXNzLnZlcnNpb25zLm5vZGUpO1xuXG4vKiogaHR0cCBtb2R1bGUgaW50ZWdyYXRpb24gKi9cbmV4cG9ydCBjbGFzcyBIdHRwIGltcGxlbWVudHMgSW50ZWdyYXRpb24ge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaWQ6IHN0cmluZyA9ICdIdHRwJztcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSBIdHRwLmlkO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfYnJlYWRjcnVtYnM6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF90cmFjaW5nOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IHsgYnJlYWRjcnVtYnM/OiBib29sZWFuOyB0cmFjaW5nPzogYm9vbGVhbiB9ID0ge30pIHtcbiAgICB0aGlzLl9icmVhZGNydW1icyA9IHR5cGVvZiBvcHRpb25zLmJyZWFkY3J1bWJzID09PSAndW5kZWZpbmVkJyA/IHRydWUgOiBvcHRpb25zLmJyZWFkY3J1bWJzO1xuICAgIHRoaXMuX3RyYWNpbmcgPSB0eXBlb2Ygb3B0aW9ucy50cmFjaW5nID09PSAndW5kZWZpbmVkJyA/IGZhbHNlIDogb3B0aW9ucy50cmFjaW5nO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0dXBPbmNlKCk6IHZvaWQge1xuICAgIC8vIE5vIG5lZWQgdG8gaW5zdHJ1bWVudCBpZiB3ZSBkb24ndCB3YW50IHRvIHRyYWNrIGFueXRoaW5nXG4gICAgaWYgKCF0aGlzLl9icmVhZGNydW1icyAmJiAhdGhpcy5fdHJhY2luZykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHdyYXBwZWRIYW5kbGVyTWFrZXIgPSBfY3JlYXRlV3JhcHBlZFJlcXVlc3RNZXRob2RGYWN0b3J5KHRoaXMuX2JyZWFkY3J1bWJzLCB0aGlzLl90cmFjaW5nKTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgY29uc3QgaHR0cE1vZHVsZSA9IHJlcXVpcmUoJ2h0dHAnKTtcbiAgICBmaWxsKGh0dHBNb2R1bGUsICdnZXQnLCB3cmFwcGVkSGFuZGxlck1ha2VyKTtcbiAgICBmaWxsKGh0dHBNb2R1bGUsICdyZXF1ZXN0Jywgd3JhcHBlZEhhbmRsZXJNYWtlcik7XG5cbiAgICAvLyBOT1RFOiBQcmlvciB0byBOb2RlIDksIGBodHRwc2AgdXNlZCBpbnRlcm5hbHMgb2YgYGh0dHBgIG1vZHVsZSwgdGh1cyB3ZSBkb24ndCBwYXRjaCBpdC5cbiAgICAvLyBJZiB3ZSBkbywgd2UnZCBnZXQgZG91YmxlIGJyZWFkY3J1bWJzIGFuZCBkb3VibGUgc3BhbnMgZm9yIGBodHRwc2AgY2FsbHMuXG4gICAgLy8gSXQgaGFzIGJlZW4gY2hhbmdlZCBpbiBOb2RlIDksIHNvIGZvciBhbGwgdmVyc2lvbnMgZXF1YWwgYW5kIGFib3ZlLCB3ZSBwYXRjaCBgaHR0cHNgIHNlcGFyYXRlbHkuXG4gICAgaWYgKE5PREVfVkVSU0lPTi5tYWpvciAmJiBOT0RFX1ZFUlNJT04ubWFqb3IgPiA4KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICAgICAgY29uc3QgaHR0cHNNb2R1bGUgPSByZXF1aXJlKCdodHRwcycpO1xuICAgICAgZmlsbChodHRwc01vZHVsZSwgJ2dldCcsIHdyYXBwZWRIYW5kbGVyTWFrZXIpO1xuICAgICAgZmlsbChodHRwc01vZHVsZSwgJ3JlcXVlc3QnLCB3cmFwcGVkSGFuZGxlck1ha2VyKTtcbiAgICB9XG4gIH1cbn1cblxuLy8gZm9yIGVhc2Ugb2YgcmVhZGluZyBiZWxvd1xudHlwZSBPcmlnaW5hbFJlcXVlc3RNZXRob2QgPSBSZXF1ZXN0TWV0aG9kO1xudHlwZSBXcmFwcGVkUmVxdWVzdE1ldGhvZCA9IFJlcXVlc3RNZXRob2Q7XG50eXBlIFdyYXBwZWRSZXF1ZXN0TWV0aG9kRmFjdG9yeSA9IChvcmlnaW5hbDogT3JpZ2luYWxSZXF1ZXN0TWV0aG9kKSA9PiBXcmFwcGVkUmVxdWVzdE1ldGhvZDtcblxuLyoqXG4gKiBGdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyB3cmFwcGVkIHZlcnNpb25zIG9mIGludGVybmFsIGByZXF1ZXN0YCBhbmQgYGdldGAgY2FsbHMgd2l0aGluIGBodHRwYFxuICogYW5kIGBodHRwc2AgbW9kdWxlcy4gKE5COiBOb3QgYSB0eXBvIC0gdGhpcyBpcyBhIGNyZWF0b3JeMiEpXG4gKlxuICogQHBhcmFtIGJyZWFkY3J1bWJzRW5hYmxlZCBXaGV0aGVyIG9yIG5vdCB0byByZWNvcmQgb3V0Z29pbmcgcmVxdWVzdHMgYXMgYnJlYWRjcnVtYnNcbiAqIEBwYXJhbSB0cmFjaW5nRW5hYmxlZCBXaGV0aGVyIG9yIG5vdCB0byByZWNvcmQgb3V0Z29pbmcgcmVxdWVzdHMgYXMgdHJhY2luZyBzcGFuc1xuICpcbiAqIEByZXR1cm5zIEEgZnVuY3Rpb24gd2hpY2ggYWNjZXB0cyB0aGUgZXhpdGluZyBoYW5kbGVyIGFuZCByZXR1cm5zIGEgd3JhcHBlZCBoYW5kbGVyXG4gKi9cbmZ1bmN0aW9uIF9jcmVhdGVXcmFwcGVkUmVxdWVzdE1ldGhvZEZhY3RvcnkoXG4gIGJyZWFkY3J1bWJzRW5hYmxlZDogYm9vbGVhbixcbiAgdHJhY2luZ0VuYWJsZWQ6IGJvb2xlYW4sXG4pOiBXcmFwcGVkUmVxdWVzdE1ldGhvZEZhY3Rvcnkge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcHBlZFJlcXVlc3RNZXRob2RGYWN0b3J5KG9yaWdpbmFsUmVxdWVzdE1ldGhvZDogT3JpZ2luYWxSZXF1ZXN0TWV0aG9kKTogV3JhcHBlZFJlcXVlc3RNZXRob2Qge1xuICAgIHJldHVybiBmdW5jdGlvbiB3cmFwcGVkTWV0aG9kKHRoaXM6IHR5cGVvZiBodHRwIHwgdHlwZW9mIGh0dHBzLCAuLi5hcmdzOiBSZXF1ZXN0TWV0aG9kQXJncyk6IGh0dHAuQ2xpZW50UmVxdWVzdCB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICAgIGNvbnN0IGh0dHBNb2R1bGUgPSB0aGlzO1xuXG4gICAgICBjb25zdCByZXF1ZXN0QXJncyA9IG5vcm1hbGl6ZVJlcXVlc3RBcmdzKHRoaXMsIGFyZ3MpO1xuICAgICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSByZXF1ZXN0QXJnc1swXTtcbiAgICAgIGNvbnN0IHJlcXVlc3RVcmwgPSBleHRyYWN0VXJsKHJlcXVlc3RPcHRpb25zKTtcblxuICAgICAgLy8gd2UgZG9uJ3Qgd2FudCB0byByZWNvcmQgcmVxdWVzdHMgdG8gU2VudHJ5IGFzIGVpdGhlciBicmVhZGNydW1icyBvciBzcGFucywgc28ganVzdCB1c2UgdGhlIG9yaWdpbmFsIG1ldGhvZFxuICAgICAgaWYgKGlzU2VudHJ5UmVxdWVzdChyZXF1ZXN0VXJsKSkge1xuICAgICAgICByZXR1cm4gb3JpZ2luYWxSZXF1ZXN0TWV0aG9kLmFwcGx5KGh0dHBNb2R1bGUsIHJlcXVlc3RBcmdzKTtcbiAgICAgIH1cblxuICAgICAgbGV0IHNwYW46IFNwYW4gfCB1bmRlZmluZWQ7XG4gICAgICBsZXQgcGFyZW50U3BhbjogU3BhbiB8IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3Qgc2NvcGUgPSBnZXRDdXJyZW50SHViKCkuZ2V0U2NvcGUoKTtcbiAgICAgIGlmIChzY29wZSAmJiB0cmFjaW5nRW5hYmxlZCkge1xuICAgICAgICBwYXJlbnRTcGFuID0gc2NvcGUuZ2V0U3BhbigpO1xuICAgICAgICBpZiAocGFyZW50U3Bhbikge1xuICAgICAgICAgIHNwYW4gPSBwYXJlbnRTcGFuLnN0YXJ0Q2hpbGQoe1xuICAgICAgICAgICAgZGVzY3JpcHRpb246IGAke3JlcXVlc3RPcHRpb25zLm1ldGhvZCB8fCAnR0VUJ30gJHtyZXF1ZXN0VXJsfWAsXG4gICAgICAgICAgICBvcDogJ2h0dHAuY2xpZW50JyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHNlbnRyeVRyYWNlSGVhZGVyID0gc3Bhbi50b1RyYWNlcGFyZW50KCk7XG4gICAgICAgICAgbG9nZ2VyLmxvZyhcbiAgICAgICAgICAgIGBbVHJhY2luZ10gQWRkaW5nIHNlbnRyeS10cmFjZSBoZWFkZXIgJHtzZW50cnlUcmFjZUhlYWRlcn0gdG8gb3V0Z29pbmcgcmVxdWVzdCB0byAke3JlcXVlc3RVcmx9OiBgLFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVxdWVzdE9wdGlvbnMuaGVhZGVycyA9IHsgLi4ucmVxdWVzdE9wdGlvbnMuaGVhZGVycywgJ3NlbnRyeS10cmFjZSc6IHNlbnRyeVRyYWNlSGVhZGVyIH07XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgcmV0dXJuIG9yaWdpbmFsUmVxdWVzdE1ldGhvZFxuICAgICAgICAuYXBwbHkoaHR0cE1vZHVsZSwgcmVxdWVzdEFyZ3MpXG4gICAgICAgIC5vbmNlKCdyZXNwb25zZScsIGZ1bmN0aW9uKHRoaXM6IGh0dHAuQ2xpZW50UmVxdWVzdCwgcmVzOiBodHRwLkluY29taW5nTWVzc2FnZSk6IHZvaWQge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgICAgIGNvbnN0IHJlcSA9IHRoaXM7XG4gICAgICAgICAgaWYgKGJyZWFkY3J1bWJzRW5hYmxlZCkge1xuICAgICAgICAgICAgYWRkUmVxdWVzdEJyZWFkY3J1bWIoJ3Jlc3BvbnNlJywgcmVxdWVzdFVybCwgcmVxLCByZXMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodHJhY2luZ0VuYWJsZWQgJiYgc3Bhbikge1xuICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXNDb2RlKSB7XG4gICAgICAgICAgICAgIHNwYW4uc2V0SHR0cFN0YXR1cyhyZXMuc3RhdHVzQ29kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzcGFuLmRlc2NyaXB0aW9uID0gY2xlYW5TcGFuRGVzY3JpcHRpb24oc3Bhbi5kZXNjcmlwdGlvbiwgcmVxdWVzdE9wdGlvbnMsIHJlcSk7XG4gICAgICAgICAgICBzcGFuLmZpbmlzaCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLm9uY2UoJ2Vycm9yJywgZnVuY3Rpb24odGhpczogaHR0cC5DbGllbnRSZXF1ZXN0KTogdm9pZCB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgICAgICAgY29uc3QgcmVxID0gdGhpcztcblxuICAgICAgICAgIGlmIChicmVhZGNydW1ic0VuYWJsZWQpIHtcbiAgICAgICAgICAgIGFkZFJlcXVlc3RCcmVhZGNydW1iKCdlcnJvcicsIHJlcXVlc3RVcmwsIHJlcSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh0cmFjaW5nRW5hYmxlZCAmJiBzcGFuKSB7XG4gICAgICAgICAgICBzcGFuLnNldEh0dHBTdGF0dXMoNTAwKTtcbiAgICAgICAgICAgIHNwYW4uZGVzY3JpcHRpb24gPSBjbGVhblNwYW5EZXNjcmlwdGlvbihzcGFuLmRlc2NyaXB0aW9uLCByZXF1ZXN0T3B0aW9ucywgcmVxKTtcbiAgICAgICAgICAgIHNwYW4uZmluaXNoKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9O1xuICB9O1xufVxuXG4vKipcbiAqIENhcHR1cmVzIEJyZWFkY3J1bWIgYmFzZWQgb24gcHJvdmlkZWQgcmVxdWVzdC9yZXNwb25zZSBwYWlyXG4gKi9cbmZ1bmN0aW9uIGFkZFJlcXVlc3RCcmVhZGNydW1iKGV2ZW50OiBzdHJpbmcsIHVybDogc3RyaW5nLCByZXE6IGh0dHAuQ2xpZW50UmVxdWVzdCwgcmVzPzogaHR0cC5JbmNvbWluZ01lc3NhZ2UpOiB2b2lkIHtcbiAgaWYgKCFnZXRDdXJyZW50SHViKCkuZ2V0SW50ZWdyYXRpb24oSHR0cCkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBnZXRDdXJyZW50SHViKCkuYWRkQnJlYWRjcnVtYihcbiAgICB7XG4gICAgICBjYXRlZ29yeTogJ2h0dHAnLFxuICAgICAgZGF0YToge1xuICAgICAgICBtZXRob2Q6IHJlcS5tZXRob2QsXG4gICAgICAgIHN0YXR1c19jb2RlOiByZXMgJiYgcmVzLnN0YXR1c0NvZGUsXG4gICAgICAgIHVybCxcbiAgICAgIH0sXG4gICAgICB0eXBlOiAnaHR0cCcsXG4gICAgfSxcbiAgICB7XG4gICAgICBldmVudCxcbiAgICAgIHJlcXVlc3Q6IHJlcSxcbiAgICAgIHJlc3BvbnNlOiByZXMsXG4gICAgfSxcbiAgKTtcbn1cbiIsICJpbXBvcnQgeyBnZXRDdXJyZW50SHViIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IGZvcmdldCwgbG9nZ2VyIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmltcG9ydCB7IE5vZGVDbGllbnQgfSBmcm9tICcuLi8uLi9jbGllbnQnO1xuXG5jb25zdCBERUZBVUxUX1NIVVRET1dOX1RJTUVPVVQgPSAyMDAwO1xuXG4vKipcbiAqIEBoaWRkZW5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvZ0FuZEV4aXRQcm9jZXNzKGVycm9yOiBFcnJvcik6IHZvaWQge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICBjb25zb2xlLmVycm9yKGVycm9yICYmIGVycm9yLnN0YWNrID8gZXJyb3Iuc3RhY2sgOiBlcnJvcik7XG5cbiAgY29uc3QgY2xpZW50ID0gZ2V0Q3VycmVudEh1YigpLmdldENsaWVudDxOb2RlQ2xpZW50PigpO1xuXG4gIGlmIChjbGllbnQgPT09IHVuZGVmaW5lZCkge1xuICAgIGxvZ2dlci53YXJuKCdObyBOb2RlQ2xpZW50IHdhcyBkZWZpbmVkLCB3ZSBhcmUgZXhpdGluZyB0aGUgcHJvY2VzcyBub3cuJyk7XG4gICAgZ2xvYmFsLnByb2Nlc3MuZXhpdCgxKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBvcHRpb25zID0gY2xpZW50LmdldE9wdGlvbnMoKTtcbiAgY29uc3QgdGltZW91dCA9XG4gICAgKG9wdGlvbnMgJiYgb3B0aW9ucy5zaHV0ZG93blRpbWVvdXQgJiYgb3B0aW9ucy5zaHV0ZG93blRpbWVvdXQgPiAwICYmIG9wdGlvbnMuc2h1dGRvd25UaW1lb3V0KSB8fFxuICAgIERFRkFVTFRfU0hVVERPV05fVElNRU9VVDtcbiAgZm9yZ2V0KFxuICAgIGNsaWVudC5jbG9zZSh0aW1lb3V0KS50aGVuKChyZXN1bHQ6IGJvb2xlYW4pID0+IHtcbiAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgIGxvZ2dlci53YXJuKCdXZSByZWFjaGVkIHRoZSB0aW1lb3V0IGZvciBlbXB0eWluZyB0aGUgcmVxdWVzdCBidWZmZXIsIHN0aWxsIGV4aXRpbmcgbm93IScpO1xuICAgICAgfVxuICAgICAgZ2xvYmFsLnByb2Nlc3MuZXhpdCgxKTtcbiAgICB9KSxcbiAgKTtcbn1cbiIsICJpbXBvcnQgeyBnZXRDdXJyZW50SHViLCBTY29wZSB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyBJbnRlZ3JhdGlvbiwgU2V2ZXJpdHkgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5pbXBvcnQgeyBOb2RlQ2xpZW50IH0gZnJvbSAnLi4vY2xpZW50JztcbmltcG9ydCB7IGxvZ0FuZEV4aXRQcm9jZXNzIH0gZnJvbSAnLi91dGlscy9lcnJvcmhhbmRsaW5nJztcblxudHlwZSBPbkZhdGFsRXJyb3JIYW5kbGVyID0gKGZpcnN0RXJyb3I6IEVycm9yLCBzZWNvbmRFcnJvcj86IEVycm9yKSA9PiB2b2lkO1xuXG4vKiogR2xvYmFsIFByb21pc2UgUmVqZWN0aW9uIGhhbmRsZXIgKi9cbmV4cG9ydCBjbGFzcyBPblVuY2F1Z2h0RXhjZXB0aW9uIGltcGxlbWVudHMgSW50ZWdyYXRpb24ge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaWQ6IHN0cmluZyA9ICdPblVuY2F1Z2h0RXhjZXB0aW9uJztcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSBPblVuY2F1Z2h0RXhjZXB0aW9uLmlkO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGhhbmRsZXI6IChlcnJvcjogRXJyb3IpID0+IHZvaWQgPSB0aGlzLl9tYWtlRXJyb3JIYW5kbGVyKCk7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczoge1xuICAgICAgLyoqXG4gICAgICAgKiBEZWZhdWx0IG9uRmF0YWxFcnJvciBoYW5kbGVyXG4gICAgICAgKiBAcGFyYW0gZmlyc3RFcnJvciBFcnJvciB0aGF0IGhhcyBiZWVuIHRocm93blxuICAgICAgICogQHBhcmFtIHNlY29uZEVycm9yIElmIHRoaXMgd2FzIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyB0aGlzIHdpbGwgYmUgc2V0XG4gICAgICAgKi9cbiAgICAgIG9uRmF0YWxFcnJvcj8oZmlyc3RFcnJvcjogRXJyb3IsIHNlY29uZEVycm9yPzogRXJyb3IpOiB2b2lkO1xuICAgIH0gPSB7fSxcbiAgKSB7fVxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXR1cE9uY2UoKTogdm9pZCB7XG4gICAgZ2xvYmFsLnByb2Nlc3Mub24oJ3VuY2F1Z2h0RXhjZXB0aW9uJywgdGhpcy5oYW5kbGVyLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBoaWRkZW5cbiAgICovXG4gIHByaXZhdGUgX21ha2VFcnJvckhhbmRsZXIoKTogKGVycm9yOiBFcnJvcikgPT4gdm9pZCB7XG4gICAgY29uc3QgdGltZW91dCA9IDIwMDA7XG4gICAgbGV0IGNhdWdodEZpcnN0RXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBsZXQgY2F1Z2h0U2Vjb25kRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBsZXQgY2FsbGVkRmF0YWxFcnJvcjogYm9vbGVhbiA9IGZhbHNlO1xuICAgIGxldCBmaXJzdEVycm9yOiBFcnJvcjtcblxuICAgIHJldHVybiAoZXJyb3I6IEVycm9yKTogdm9pZCA9PiB7XG4gICAgICBsZXQgb25GYXRhbEVycm9yOiBPbkZhdGFsRXJyb3JIYW5kbGVyID0gbG9nQW5kRXhpdFByb2Nlc3M7XG4gICAgICBjb25zdCBjbGllbnQgPSBnZXRDdXJyZW50SHViKCkuZ2V0Q2xpZW50PE5vZGVDbGllbnQ+KCk7XG5cbiAgICAgIGlmICh0aGlzLl9vcHRpb25zLm9uRmF0YWxFcnJvcikge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgICAgIG9uRmF0YWxFcnJvciA9IHRoaXMuX29wdGlvbnMub25GYXRhbEVycm9yO1xuICAgICAgfSBlbHNlIGlmIChjbGllbnQgJiYgY2xpZW50LmdldE9wdGlvbnMoKS5vbkZhdGFsRXJyb3IpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgICAgICBvbkZhdGFsRXJyb3IgPSBjbGllbnQuZ2V0T3B0aW9ucygpLm9uRmF0YWxFcnJvciBhcyBPbkZhdGFsRXJyb3JIYW5kbGVyO1xuICAgICAgfVxuXG4gICAgICBpZiAoIWNhdWdodEZpcnN0RXJyb3IpIHtcbiAgICAgICAgY29uc3QgaHViID0gZ2V0Q3VycmVudEh1YigpO1xuXG4gICAgICAgIC8vIHRoaXMgaXMgdGhlIGZpcnN0IHVuY2F1Z2h0IGVycm9yIGFuZCB0aGUgdWx0aW1hdGUgcmVhc29uIGZvciBzaHV0dGluZyBkb3duXG4gICAgICAgIC8vIHdlIHdhbnQgdG8gZG8gYWJzb2x1dGVseSBldmVyeXRoaW5nIHBvc3NpYmxlIHRvIGVuc3VyZSBpdCBnZXRzIGNhcHR1cmVkXG4gICAgICAgIC8vIGFsc28gd2Ugd2FudCB0byBtYWtlIHN1cmUgd2UgZG9uJ3QgZ28gcmVjdXJzaW9uIGNyYXp5IGlmIG1vcmUgZXJyb3JzIGhhcHBlbiBhZnRlciB0aGlzIG9uZVxuICAgICAgICBmaXJzdEVycm9yID0gZXJyb3I7XG4gICAgICAgIGNhdWdodEZpcnN0RXJyb3IgPSB0cnVlO1xuXG4gICAgICAgIGlmIChodWIuZ2V0SW50ZWdyYXRpb24oT25VbmNhdWdodEV4Y2VwdGlvbikpIHtcbiAgICAgICAgICBodWIud2l0aFNjb3BlKChzY29wZTogU2NvcGUpID0+IHtcbiAgICAgICAgICAgIHNjb3BlLnNldExldmVsKFNldmVyaXR5LkZhdGFsKTtcbiAgICAgICAgICAgIGh1Yi5jYXB0dXJlRXhjZXB0aW9uKGVycm9yLCB7XG4gICAgICAgICAgICAgIG9yaWdpbmFsRXhjZXB0aW9uOiBlcnJvcixcbiAgICAgICAgICAgICAgZGF0YTogeyBtZWNoYW5pc206IHsgaGFuZGxlZDogZmFsc2UsIHR5cGU6ICdvbnVuY2F1Z2h0ZXhjZXB0aW9uJyB9IH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghY2FsbGVkRmF0YWxFcnJvcikge1xuICAgICAgICAgICAgICBjYWxsZWRGYXRhbEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgICAgb25GYXRhbEVycm9yKGVycm9yKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoIWNhbGxlZEZhdGFsRXJyb3IpIHtcbiAgICAgICAgICAgIGNhbGxlZEZhdGFsRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgb25GYXRhbEVycm9yKGVycm9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoY2FsbGVkRmF0YWxFcnJvcikge1xuICAgICAgICAvLyB3ZSBoaXQgYW4gZXJyb3IgKmFmdGVyKiBjYWxsaW5nIG9uRmF0YWxFcnJvciAtIHByZXR0eSBib25lZCBhdCB0aGlzIHBvaW50LCBqdXN0IHNodXQgaXQgZG93blxuICAgICAgICBsb2dnZXIud2FybigndW5jYXVnaHQgZXhjZXB0aW9uIGFmdGVyIGNhbGxpbmcgZmF0YWwgZXJyb3Igc2h1dGRvd24gY2FsbGJhY2sgLSB0aGlzIGlzIGJhZCEgZm9yY2luZyBzaHV0ZG93bicpO1xuICAgICAgICBsb2dBbmRFeGl0UHJvY2VzcyhlcnJvcik7XG4gICAgICB9IGVsc2UgaWYgKCFjYXVnaHRTZWNvbmRFcnJvcikge1xuICAgICAgICAvLyB0d28gY2FzZXMgZm9yIGhvdyB3ZSBjYW4gaGl0IHRoaXMgYnJhbmNoOlxuICAgICAgICAvLyAgIC0gY2FwdHVyaW5nIG9mIGZpcnN0IGVycm9yIGJsZXcgdXAgYW5kIHdlIGp1c3QgY2F1Z2h0IHRoZSBleGNlcHRpb24gZnJvbSB0aGF0XG4gICAgICAgIC8vICAgICAtIHF1aXQgdHJ5aW5nIHRvIGNhcHR1cmUsIHByb2NlZWQgd2l0aCBzaHV0ZG93blxuICAgICAgICAvLyAgIC0gYSBzZWNvbmQgaW5kZXBlbmRlbnQgZXJyb3IgaGFwcGVuZWQgd2hpbGUgd2FpdGluZyBmb3IgZmlyc3QgZXJyb3IgdG8gY2FwdHVyZVxuICAgICAgICAvLyAgICAgLSB3YW50IHRvIGF2b2lkIGNhdXNpbmcgcHJlbWF0dXJlIHNodXRkb3duIGJlZm9yZSBmaXJzdCBlcnJvciBjYXB0dXJlIGZpbmlzaGVzXG4gICAgICAgIC8vIGl0J3MgaGFyZCB0byBpbW1lZGlhdGVseSB0ZWxsIGNhc2UgMSBmcm9tIGNhc2UgMiB3aXRob3V0IGRvaW5nIHNvbWUgZmFuY3kvcXVlc3Rpb25hYmxlIGRvbWFpbiBzdHVmZlxuICAgICAgICAvLyBzbyBsZXQncyBpbnN0ZWFkIGp1c3QgZGVsYXkgYSBiaXQgYmVmb3JlIHdlIHByb2NlZWQgd2l0aCBvdXIgYWN0aW9uIGhlcmVcbiAgICAgICAgLy8gaW4gY2FzZSAxLCB3ZSBqdXN0IHdhaXQgYSBiaXQgdW5uZWNlc3NhcmlseSBidXQgdWx0aW1hdGVseSBkbyB0aGUgc2FtZSB0aGluZ1xuICAgICAgICAvLyBpbiBjYXNlIDIsIHRoZSBkZWxheSBob3BlZnVsbHkgbWFkZSB1cyB3YWl0IGxvbmcgZW5vdWdoIGZvciB0aGUgY2FwdHVyZSB0byBmaW5pc2hcbiAgICAgICAgLy8gdHdvIHBvdGVudGlhbCBub25pZGVhbCBvdXRjb21lczpcbiAgICAgICAgLy8gICBub25pZGVhbCBjYXNlIDE6IGNhcHR1cmluZyBmYWlscyBmYXN0LCB3ZSBzaXQgYXJvdW5kIGZvciBhIGZldyBzZWNvbmRzIHVubmVjZXNzYXJpbHkgYmVmb3JlIHByb2NlZWRpbmcgY29ycmVjdGx5IGJ5IGNhbGxpbmcgb25GYXRhbEVycm9yXG4gICAgICAgIC8vICAgbm9uaWRlYWwgY2FzZSAyOiBjYXNlIDIgaGFwcGVucywgMXN0IGVycm9yIGlzIGNhcHR1cmVkIGJ1dCBzbG93bHksIHRpbWVvdXQgY29tcGxldGVzIGJlZm9yZSBjYXB0dXJlIGFuZCB3ZSB0cmVhdCBzZWNvbmQgZXJyb3IgYXMgdGhlIHNlbmRFcnIgb2YgKG5vbmV4aXN0ZW50KSBmYWlsdXJlIGZyb20gdHJ5aW5nIHRvIGNhcHR1cmUgZmlyc3QgZXJyb3JcbiAgICAgICAgLy8gbm90ZSB0aGF0IGFmdGVyIGhpdHRpbmcgdGhpcyBicmFuY2gsIHdlIG1pZ2h0IGNhdGNoIG1vcmUgZXJyb3JzIHdoZXJlIChjYXVnaHRTZWNvbmRFcnJvciAmJiAhY2FsbGVkRmF0YWxFcnJvcilcbiAgICAgICAgLy8gICB3ZSBpZ25vcmUgdGhlbSAtIHRoZXkgZG9uJ3QgbWF0dGVyIHRvIHVzLCB3ZSdyZSBqdXN0IHdhaXRpbmcgZm9yIHRoZSBzZWNvbmQgZXJyb3IgdGltZW91dCB0byBmaW5pc2hcbiAgICAgICAgY2F1Z2h0U2Vjb25kRXJyb3IgPSB0cnVlO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAoIWNhbGxlZEZhdGFsRXJyb3IpIHtcbiAgICAgICAgICAgIC8vIGl0IHdhcyBwcm9iYWJseSBjYXNlIDEsIGxldCdzIHRyZWF0IGVyciBhcyB0aGUgc2VuZEVyciBhbmQgY2FsbCBvbkZhdGFsRXJyb3JcbiAgICAgICAgICAgIGNhbGxlZEZhdGFsRXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgb25GYXRhbEVycm9yKGZpcnN0RXJyb3IsIGVycm9yKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gaXQgd2FzIHByb2JhYmx5IGNhc2UgMiwgb3VyIGZpcnN0IGVycm9yIGZpbmlzaGVkIGNhcHR1cmluZyB3aGlsZSB3ZSB3YWl0ZWQsIGNvb2wsIGRvIG5vdGhpbmdcbiAgICAgICAgICB9XG4gICAgICAgIH0sIHRpbWVvdXQpOyAvLyBjYXB0dXJpbmcgY291bGQgdGFrZSBhdCBsZWFzdCBzZW5kVGltZW91dCB0byBmYWlsLCBwbHVzIGFuIGFyYml0cmFyeSBzZWNvbmQgZm9yIGhvdyBsb25nIGl0IHRha2VzIHRvIGNvbGxlY3Qgc3Vycm91bmRpbmcgc291cmNlIGV0Y1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBnZXRDdXJyZW50SHViLCBTY29wZSB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyBJbnRlZ3JhdGlvbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgY29uc29sZVNhbmRib3ggfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuaW1wb3J0IHsgbG9nQW5kRXhpdFByb2Nlc3MgfSBmcm9tICcuL3V0aWxzL2Vycm9yaGFuZGxpbmcnO1xuXG50eXBlIFVuaGFuZGxlZFJlamVjdGlvbk1vZGUgPSAnbm9uZScgfCAnd2FybicgfCAnc3RyaWN0JztcblxuLyoqIEdsb2JhbCBQcm9taXNlIFJlamVjdGlvbiBoYW5kbGVyICovXG5leHBvcnQgY2xhc3MgT25VbmhhbmRsZWRSZWplY3Rpb24gaW1wbGVtZW50cyBJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpZDogc3RyaW5nID0gJ09uVW5oYW5kbGVkUmVqZWN0aW9uJztcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSBPblVuaGFuZGxlZFJlamVjdGlvbi5pZDtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiB7XG4gICAgICAvKipcbiAgICAgICAqIE9wdGlvbiBkZWNpZGluZyB3aGF0IHRvIGRvIGFmdGVyIGNhcHR1cmluZyB1bmhhbmRsZWRSZWplY3Rpb24sXG4gICAgICAgKiB0aGF0IG1pbWlja3MgYmVoYXZpb3Igb2Ygbm9kZSdzIC0tdW5oYW5kbGVkLXJlamVjdGlvbiBmbGFnLlxuICAgICAgICovXG4gICAgICBtb2RlOiBVbmhhbmRsZWRSZWplY3Rpb25Nb2RlO1xuICAgIH0gPSB7IG1vZGU6ICd3YXJuJyB9LFxuICApIHt9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0dXBPbmNlKCk6IHZvaWQge1xuICAgIGdsb2JhbC5wcm9jZXNzLm9uKCd1bmhhbmRsZWRSZWplY3Rpb24nLCB0aGlzLnNlbmRVbmhhbmRsZWRQcm9taXNlLmJpbmQodGhpcykpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlbmQgYW4gZXhjZXB0aW9uIHdpdGggcmVhc29uXG4gICAqIEBwYXJhbSByZWFzb24gc3RyaW5nXG4gICAqIEBwYXJhbSBwcm9taXNlIHByb21pc2VcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvZXhwbGljaXQtbW9kdWxlLWJvdW5kYXJ5LXR5cGVzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHB1YmxpYyBzZW5kVW5oYW5kbGVkUHJvbWlzZShyZWFzb246IGFueSwgcHJvbWlzZTogYW55KTogdm9pZCB7XG4gICAgY29uc3QgaHViID0gZ2V0Q3VycmVudEh1YigpO1xuXG4gICAgaWYgKCFodWIuZ2V0SW50ZWdyYXRpb24oT25VbmhhbmRsZWRSZWplY3Rpb24pKSB7XG4gICAgICB0aGlzLl9oYW5kbGVSZWplY3Rpb24ocmVhc29uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi9cbiAgICBjb25zdCBjb250ZXh0ID0gKHByb21pc2UuZG9tYWluICYmIHByb21pc2UuZG9tYWluLnNlbnRyeUNvbnRleHQpIHx8IHt9O1xuXG4gICAgaHViLndpdGhTY29wZSgoc2NvcGU6IFNjb3BlKSA9PiB7XG4gICAgICBzY29wZS5zZXRFeHRyYSgndW5oYW5kbGVkUHJvbWlzZVJlamVjdGlvbicsIHRydWUpO1xuXG4gICAgICAvLyBQcmVzZXJ2ZSBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSB3aXRoIHJhdmVuLW5vZGUgZm9yIG5vd1xuICAgICAgaWYgKGNvbnRleHQudXNlcikge1xuICAgICAgICBzY29wZS5zZXRVc2VyKGNvbnRleHQudXNlcik7XG4gICAgICB9XG4gICAgICBpZiAoY29udGV4dC50YWdzKSB7XG4gICAgICAgIHNjb3BlLnNldFRhZ3MoY29udGV4dC50YWdzKTtcbiAgICAgIH1cbiAgICAgIGlmIChjb250ZXh0LmV4dHJhKSB7XG4gICAgICAgIHNjb3BlLnNldEV4dHJhcyhjb250ZXh0LmV4dHJhKTtcbiAgICAgIH1cblxuICAgICAgaHViLmNhcHR1cmVFeGNlcHRpb24ocmVhc29uLCB7XG4gICAgICAgIG9yaWdpbmFsRXhjZXB0aW9uOiBwcm9taXNlLFxuICAgICAgICBkYXRhOiB7IG1lY2hhbmlzbTogeyBoYW5kbGVkOiBmYWxzZSwgdHlwZTogJ29udW5oYW5kbGVkcmVqZWN0aW9uJyB9IH0sXG4gICAgICB9KTtcbiAgICB9KTtcbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi9cblxuICAgIHRoaXMuX2hhbmRsZVJlamVjdGlvbihyZWFzb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZXIgZm9yIGBtb2RlYCBvcHRpb25cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHByaXZhdGUgX2hhbmRsZVJlamVjdGlvbihyZWFzb246IGFueSk6IHZvaWQge1xuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iLzdjZjZmOWU5NjRhYTAwNzcyOTY1MzkxYzIzYWNkYTZkNzE5NzJhOWEvbGliL2ludGVybmFsL3Byb2Nlc3MvcHJvbWlzZXMuanMjTDIzNC1MMjQwXG4gICAgY29uc3QgcmVqZWN0aW9uV2FybmluZyA9XG4gICAgICAnVGhpcyBlcnJvciBvcmlnaW5hdGVkIGVpdGhlciBieSAnICtcbiAgICAgICd0aHJvd2luZyBpbnNpZGUgb2YgYW4gYXN5bmMgZnVuY3Rpb24gd2l0aG91dCBhIGNhdGNoIGJsb2NrLCAnICtcbiAgICAgICdvciBieSByZWplY3RpbmcgYSBwcm9taXNlIHdoaWNoIHdhcyBub3QgaGFuZGxlZCB3aXRoIC5jYXRjaCgpLicgK1xuICAgICAgJyBUaGUgcHJvbWlzZSByZWplY3RlZCB3aXRoIHRoZSByZWFzb246JztcblxuICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbnNvbGUgKi9cbiAgICBpZiAodGhpcy5fb3B0aW9ucy5tb2RlID09PSAnd2FybicpIHtcbiAgICAgIGNvbnNvbGVTYW5kYm94KCgpID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKHJlamVjdGlvbldhcm5pbmcpO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgICAgIGNvbnNvbGUuZXJyb3IocmVhc29uICYmIHJlYXNvbi5zdGFjayA/IHJlYXNvbi5zdGFjayA6IHJlYXNvbik7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuX29wdGlvbnMubW9kZSA9PT0gJ3N0cmljdCcpIHtcbiAgICAgIGNvbnNvbGVTYW5kYm94KCgpID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKHJlamVjdGlvbldhcm5pbmcpO1xuICAgICAgfSk7XG4gICAgICBsb2dBbmRFeGl0UHJvY2VzcyhyZWFzb24pO1xuICAgIH1cbiAgICAvKiBlc2xpbnQtZW5hYmxlIG5vLWNvbnNvbGUgKi9cbiAgfVxufVxuIiwgImltcG9ydCB7IGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yLCBnZXRDdXJyZW50SHViIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IEV2ZW50LCBFdmVudEhpbnQsIEV4Y2VwdGlvbiwgRXh0ZW5kZWRFcnJvciwgSW50ZWdyYXRpb24gfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGlzSW5zdGFuY2VPZiwgU3luY1Byb21pc2UgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuaW1wb3J0IHsgZ2V0RXhjZXB0aW9uRnJvbUVycm9yIH0gZnJvbSAnLi4vcGFyc2Vycyc7XG5cbmNvbnN0IERFRkFVTFRfS0VZID0gJ2NhdXNlJztcbmNvbnN0IERFRkFVTFRfTElNSVQgPSA1O1xuXG4vKiogQWRkcyBTREsgaW5mbyB0byBhbiBldmVudC4gKi9cbmV4cG9ydCBjbGFzcyBMaW5rZWRFcnJvcnMgaW1wbGVtZW50cyBJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpZDogc3RyaW5nID0gJ0xpbmtlZEVycm9ycyc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nID0gTGlua2VkRXJyb3JzLmlkO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfa2V5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9saW1pdDogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IHsga2V5Pzogc3RyaW5nOyBsaW1pdD86IG51bWJlciB9ID0ge30pIHtcbiAgICB0aGlzLl9rZXkgPSBvcHRpb25zLmtleSB8fCBERUZBVUxUX0tFWTtcbiAgICB0aGlzLl9saW1pdCA9IG9wdGlvbnMubGltaXQgfHwgREVGQVVMVF9MSU1JVDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldHVwT25jZSgpOiB2b2lkIHtcbiAgICBhZGRHbG9iYWxFdmVudFByb2Nlc3NvcigoZXZlbnQ6IEV2ZW50LCBoaW50PzogRXZlbnRIaW50KSA9PiB7XG4gICAgICBjb25zdCBzZWxmID0gZ2V0Q3VycmVudEh1YigpLmdldEludGVncmF0aW9uKExpbmtlZEVycm9ycyk7XG4gICAgICBpZiAoc2VsZikge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gc2VsZi5faGFuZGxlciAmJiBzZWxmLl9oYW5kbGVyLmJpbmQoc2VsZik7XG4gICAgICAgIHJldHVybiB0eXBlb2YgaGFuZGxlciA9PT0gJ2Z1bmN0aW9uJyA/IGhhbmRsZXIoZXZlbnQsIGhpbnQpIDogZXZlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHByaXZhdGUgX2hhbmRsZXIoZXZlbnQ6IEV2ZW50LCBoaW50PzogRXZlbnRIaW50KTogUHJvbWlzZUxpa2U8RXZlbnQ+IHtcbiAgICBpZiAoIWV2ZW50LmV4Y2VwdGlvbiB8fCAhZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyB8fCAhaGludCB8fCAhaXNJbnN0YW5jZU9mKGhpbnQub3JpZ2luYWxFeGNlcHRpb24sIEVycm9yKSkge1xuICAgICAgcmV0dXJuIFN5bmNQcm9taXNlLnJlc29sdmUoZXZlbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgU3luY1Byb21pc2U8RXZlbnQ+KHJlc29sdmUgPT4ge1xuICAgICAgdm9pZCB0aGlzLl93YWxrRXJyb3JUcmVlKGhpbnQub3JpZ2luYWxFeGNlcHRpb24gYXMgRXJyb3IsIHRoaXMuX2tleSlcbiAgICAgICAgLnRoZW4oKGxpbmtlZEVycm9yczogRXhjZXB0aW9uW10pID0+IHtcbiAgICAgICAgICBpZiAoZXZlbnQgJiYgZXZlbnQuZXhjZXB0aW9uICYmIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMpIHtcbiAgICAgICAgICAgIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXMgPSBbLi4ubGlua2VkRXJyb3JzLCAuLi5ldmVudC5leGNlcHRpb24udmFsdWVzXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZShldmVudCk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKG51bGwsICgpID0+IHtcbiAgICAgICAgICByZXNvbHZlKGV2ZW50KTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHByaXZhdGUgX3dhbGtFcnJvclRyZWUoZXJyb3I6IEV4dGVuZGVkRXJyb3IsIGtleTogc3RyaW5nLCBzdGFjazogRXhjZXB0aW9uW10gPSBbXSk6IFByb21pc2VMaWtlPEV4Y2VwdGlvbltdPiB7XG4gICAgaWYgKCFpc0luc3RhbmNlT2YoZXJyb3Jba2V5XSwgRXJyb3IpIHx8IHN0YWNrLmxlbmd0aCArIDEgPj0gdGhpcy5fbGltaXQpIHtcbiAgICAgIHJldHVybiBTeW5jUHJvbWlzZS5yZXNvbHZlKHN0YWNrKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBTeW5jUHJvbWlzZTxFeGNlcHRpb25bXT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdm9pZCBnZXRFeGNlcHRpb25Gcm9tRXJyb3IoZXJyb3Jba2V5XSlcbiAgICAgICAgLnRoZW4oKGV4Y2VwdGlvbjogRXhjZXB0aW9uKSA9PiB7XG4gICAgICAgICAgdm9pZCB0aGlzLl93YWxrRXJyb3JUcmVlKGVycm9yW2tleV0sIGtleSwgW2V4Y2VwdGlvbiwgLi4uc3RhY2tdKVxuICAgICAgICAgICAgLnRoZW4ocmVzb2x2ZSlcbiAgICAgICAgICAgIC50aGVuKG51bGwsICgpID0+IHtcbiAgICAgICAgICAgICAgcmVqZWN0KCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4obnVsbCwgKCkgPT4ge1xuICAgICAgICAgIHJlamVjdCgpO1xuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEV2ZW50UHJvY2Vzc29yLCBIdWIsIEludGVncmF0aW9uIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luIH0gZnJvbSAncGF0aCc7XG5cbmxldCBtb2R1bGVDYWNoZTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuLyoqIEV4dHJhY3QgaW5mb3JtYXRpb24gYWJvdXQgcGF0aHMgKi9cbmZ1bmN0aW9uIGdldFBhdGhzKCk6IHN0cmluZ1tdIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcmVxdWlyZS5jYWNoZSA/IE9iamVjdC5rZXlzKHJlcXVpcmUuY2FjaGUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pIDogW107XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbn1cblxuLyoqIEV4dHJhY3QgaW5mb3JtYXRpb24gYWJvdXQgcGFja2FnZS5qc29uIG1vZHVsZXMgKi9cbmZ1bmN0aW9uIGNvbGxlY3RNb2R1bGVzKCk6IHtcbiAgW25hbWU6IHN0cmluZ106IHN0cmluZztcbn0ge1xuICBjb25zdCBtYWluUGF0aHMgPSAocmVxdWlyZS5tYWluICYmIHJlcXVpcmUubWFpbi5wYXRocykgfHwgW107XG4gIGNvbnN0IHBhdGhzID0gZ2V0UGF0aHMoKTtcbiAgY29uc3QgaW5mb3M6IHtcbiAgICBbbmFtZTogc3RyaW5nXTogc3RyaW5nO1xuICB9ID0ge307XG4gIGNvbnN0IHNlZW46IHtcbiAgICBbcGF0aDogc3RyaW5nXTogYm9vbGVhbjtcbiAgfSA9IHt9O1xuXG4gIHBhdGhzLmZvckVhY2gocGF0aCA9PiB7XG4gICAgbGV0IGRpciA9IHBhdGg7XG5cbiAgICAvKiogVHJhdmVyc2UgZGlyZWN0b3JpZXMgdXB3YXJkIGluIHRoZSBzZWFyY2ggb2YgcGFja2FnZS5qc29uIGZpbGUgKi9cbiAgICBjb25zdCB1cGRpciA9ICgpOiB2b2lkIHwgKCgpID0+IHZvaWQpID0+IHtcbiAgICAgIGNvbnN0IG9yaWcgPSBkaXI7XG4gICAgICBkaXIgPSBkaXJuYW1lKG9yaWcpO1xuXG4gICAgICBpZiAoIWRpciB8fCBvcmlnID09PSBkaXIgfHwgc2VlbltvcmlnXSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgICAgaWYgKG1haW5QYXRocy5pbmRleE9mKGRpcikgPCAwKSB7XG4gICAgICAgIHJldHVybiB1cGRpcigpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBwa2dmaWxlID0gam9pbihvcmlnLCAncGFja2FnZS5qc29uJyk7XG4gICAgICBzZWVuW29yaWddID0gdHJ1ZTtcblxuICAgICAgaWYgKCFleGlzdHNTeW5jKHBrZ2ZpbGUpKSB7XG4gICAgICAgIHJldHVybiB1cGRpcigpO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBpbmZvID0gSlNPTi5wYXJzZShyZWFkRmlsZVN5bmMocGtnZmlsZSwgJ3V0ZjgnKSkgYXMge1xuICAgICAgICAgIG5hbWU6IHN0cmluZztcbiAgICAgICAgICB2ZXJzaW9uOiBzdHJpbmc7XG4gICAgICAgIH07XG4gICAgICAgIGluZm9zW2luZm8ubmFtZV0gPSBpbmZvLnZlcnNpb247XG4gICAgICB9IGNhdGNoIChfb08pIHtcbiAgICAgICAgLy8gbm8tZW1wdHlcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdXBkaXIoKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGluZm9zO1xufVxuXG4vKiogQWRkIG5vZGUgbW9kdWxlcyAvIHBhY2thZ2VzIHRvIHRoZSBldmVudCAqL1xuZXhwb3J0IGNsYXNzIE1vZHVsZXMgaW1wbGVtZW50cyBJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpZDogc3RyaW5nID0gJ01vZHVsZXMnO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIG5hbWU6IHN0cmluZyA9IE1vZHVsZXMuaWQ7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0dXBPbmNlKGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yOiAoY2FsbGJhY2s6IEV2ZW50UHJvY2Vzc29yKSA9PiB2b2lkLCBnZXRDdXJyZW50SHViOiAoKSA9PiBIdWIpOiB2b2lkIHtcbiAgICBhZGRHbG9iYWxFdmVudFByb2Nlc3NvcihldmVudCA9PiB7XG4gICAgICBpZiAoIWdldEN1cnJlbnRIdWIoKS5nZXRJbnRlZ3JhdGlvbihNb2R1bGVzKSkge1xuICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgbW9kdWxlczogdGhpcy5fZ2V0TW9kdWxlcygpLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBGZXRjaGVzIHRoZSBsaXN0IG9mIG1vZHVsZXMgYW5kIHRoZSB2ZXJzaW9ucyBsb2FkZWQgYnkgdGhlIGVudHJ5IGZpbGUgZm9yIHlvdXIgbm9kZS5qcyBhcHAuICovXG4gIHByaXZhdGUgX2dldE1vZHVsZXMoKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gICAgaWYgKCFtb2R1bGVDYWNoZSkge1xuICAgICAgbW9kdWxlQ2FjaGUgPSBjb2xsZWN0TW9kdWxlcygpO1xuICAgIH1cbiAgICByZXR1cm4gbW9kdWxlQ2FjaGU7XG4gIH1cbn1cbiIsICJleHBvcnQgeyBDb25zb2xlIH0gZnJvbSAnLi9jb25zb2xlJztcbmV4cG9ydCB7IEh0dHAgfSBmcm9tICcuL2h0dHAnO1xuZXhwb3J0IHsgT25VbmNhdWdodEV4Y2VwdGlvbiB9IGZyb20gJy4vb251bmNhdWdodGV4Y2VwdGlvbic7XG5leHBvcnQgeyBPblVuaGFuZGxlZFJlamVjdGlvbiB9IGZyb20gJy4vb251bmhhbmRsZWRyZWplY3Rpb24nO1xuZXhwb3J0IHsgTGlua2VkRXJyb3JzIH0gZnJvbSAnLi9saW5rZWRlcnJvcnMnO1xuZXhwb3J0IHsgTW9kdWxlcyB9IGZyb20gJy4vbW9kdWxlcyc7XG4iLCAiaW1wb3J0IHsgZ2V0Q3VycmVudEh1YiwgaW5pdEFuZEJpbmQsIEludGVncmF0aW9ucyBhcyBDb3JlSW50ZWdyYXRpb25zIH0gZnJvbSAnQHNlbnRyeS9jb3JlJztcbmltcG9ydCB7IGdldE1haW5DYXJyaWVyLCBzZXRIdWJPbkNhcnJpZXIgfSBmcm9tICdAc2VudHJ5L2h1Yic7XG5pbXBvcnQgeyBTZXNzaW9uU3RhdHVzIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QsIGxvZ2dlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuaW1wb3J0ICogYXMgZG9tYWluIGZyb20gJ2RvbWFpbic7XG5cbmltcG9ydCB7IE5vZGVDbGllbnQgfSBmcm9tICcuL2NsaWVudCc7XG5pbXBvcnQgeyBDb25zb2xlLCBIdHRwLCBMaW5rZWRFcnJvcnMsIE9uVW5jYXVnaHRFeGNlcHRpb24sIE9uVW5oYW5kbGVkUmVqZWN0aW9uIH0gZnJvbSAnLi9pbnRlZ3JhdGlvbnMnO1xuaW1wb3J0IHsgTm9kZU9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRJbnRlZ3JhdGlvbnMgPSBbXG4gIC8vIENvbW1vblxuICBuZXcgQ29yZUludGVncmF0aW9ucy5JbmJvdW5kRmlsdGVycygpLFxuICBuZXcgQ29yZUludGVncmF0aW9ucy5GdW5jdGlvblRvU3RyaW5nKCksXG4gIC8vIE5hdGl2ZSBXcmFwcGVyc1xuICBuZXcgQ29uc29sZSgpLFxuICBuZXcgSHR0cCgpLFxuICAvLyBHbG9iYWwgSGFuZGxlcnNcbiAgbmV3IE9uVW5jYXVnaHRFeGNlcHRpb24oKSxcbiAgbmV3IE9uVW5oYW5kbGVkUmVqZWN0aW9uKCksXG4gIC8vIE1pc2NcbiAgbmV3IExpbmtlZEVycm9ycygpLFxuXTtcblxuLyoqXG4gKiBUaGUgU2VudHJ5IE5vZGUgU0RLIENsaWVudC5cbiAqXG4gKiBUbyB1c2UgdGhpcyBTREssIGNhbGwgdGhlIHtAbGluayBpbml0fSBmdW5jdGlvbiBhcyBlYXJseSBhcyBwb3NzaWJsZSBpbiB0aGVcbiAqIG1haW4gZW50cnkgbW9kdWxlLiBUbyBzZXQgY29udGV4dCBpbmZvcm1hdGlvbiBvciBzZW5kIG1hbnVhbCBldmVudHMsIHVzZSB0aGVcbiAqIHByb3ZpZGVkIG1ldGhvZHMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICpcbiAqIGNvbnN0IHsgaW5pdCB9ID0gcmVxdWlyZSgnQHNlbnRyeS9ub2RlJyk7XG4gKlxuICogaW5pdCh7XG4gKiAgIGRzbjogJ19fRFNOX18nLFxuICogICAvLyAuLi5cbiAqIH0pO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICpcbiAqIGNvbnN0IHsgY29uZmlndXJlU2NvcGUgfSA9IHJlcXVpcmUoJ0BzZW50cnkvbm9kZScpO1xuICogY29uZmlndXJlU2NvcGUoKHNjb3BlOiBTY29wZSkgPT4ge1xuICogICBzY29wZS5zZXRFeHRyYSh7IGJhdHRlcnk6IDAuNyB9KTtcbiAqICAgc2NvcGUuc2V0VGFnKHsgdXNlcl9tb2RlOiAnYWRtaW4nIH0pO1xuICogICBzY29wZS5zZXRVc2VyKHsgaWQ6ICc0NzExJyB9KTtcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICpcbiAqIGNvbnN0IHsgYWRkQnJlYWRjcnVtYiB9ID0gcmVxdWlyZSgnQHNlbnRyeS9ub2RlJyk7XG4gKiBhZGRCcmVhZGNydW1iKHtcbiAqICAgbWVzc2FnZTogJ015IEJyZWFkY3J1bWInLFxuICogICAvLyAuLi5cbiAqIH0pO1xuICogYGBgXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYFxuICpcbiAqIGNvbnN0IFNlbnRyeSA9IHJlcXVpcmUoJ0BzZW50cnkvbm9kZScpO1xuICogU2VudHJ5LmNhcHR1cmVNZXNzYWdlKCdIZWxsbywgd29ybGQhJyk7XG4gKiBTZW50cnkuY2FwdHVyZUV4Y2VwdGlvbihuZXcgRXJyb3IoJ0dvb2QgYnllJykpO1xuICogU2VudHJ5LmNhcHR1cmVFdmVudCh7XG4gKiAgIG1lc3NhZ2U6ICdNYW51YWwnLFxuICogICBzdGFja3RyYWNlOiBbXG4gKiAgICAgLy8gLi4uXG4gKiAgIF0sXG4gKiB9KTtcbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIE5vZGVPcHRpb25zfSBmb3IgZG9jdW1lbnRhdGlvbiBvbiBjb25maWd1cmF0aW9uIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0KG9wdGlvbnM6IE5vZGVPcHRpb25zID0ge30pOiB2b2lkIHtcbiAgY29uc3QgY2FycmllciA9IGdldE1haW5DYXJyaWVyKCk7XG4gIGNvbnN0IGF1dG9sb2FkZWRJbnRlZ3JhdGlvbnMgPSBjYXJyaWVyLl9fU0VOVFJZX18/LmludGVncmF0aW9ucyB8fCBbXTtcblxuICBvcHRpb25zLmRlZmF1bHRJbnRlZ3JhdGlvbnMgPVxuICAgIG9wdGlvbnMuZGVmYXVsdEludGVncmF0aW9ucyA9PT0gZmFsc2VcbiAgICAgID8gW11cbiAgICAgIDogW1xuICAgICAgICAgIC4uLihBcnJheS5pc0FycmF5KG9wdGlvbnMuZGVmYXVsdEludGVncmF0aW9ucykgPyBvcHRpb25zLmRlZmF1bHRJbnRlZ3JhdGlvbnMgOiBkZWZhdWx0SW50ZWdyYXRpb25zKSxcbiAgICAgICAgICAuLi5hdXRvbG9hZGVkSW50ZWdyYXRpb25zLFxuICAgICAgICBdO1xuXG4gIGlmIChvcHRpb25zLmRzbiA9PT0gdW5kZWZpbmVkICYmIHByb2Nlc3MuZW52LlNFTlRSWV9EU04pIHtcbiAgICBvcHRpb25zLmRzbiA9IHByb2Nlc3MuZW52LlNFTlRSWV9EU047XG4gIH1cblxuICBpZiAob3B0aW9ucy50cmFjZXNTYW1wbGVSYXRlID09PSB1bmRlZmluZWQgJiYgcHJvY2Vzcy5lbnYuU0VOVFJZX1RSQUNFU19TQU1QTEVfUkFURSkge1xuICAgIGNvbnN0IHRyYWNlc1NhbXBsZVJhdGUgPSBwYXJzZUZsb2F0KHByb2Nlc3MuZW52LlNFTlRSWV9UUkFDRVNfU0FNUExFX1JBVEUpO1xuICAgIGlmIChpc0Zpbml0ZSh0cmFjZXNTYW1wbGVSYXRlKSkge1xuICAgICAgb3B0aW9ucy50cmFjZXNTYW1wbGVSYXRlID0gdHJhY2VzU2FtcGxlUmF0ZTtcbiAgICB9XG4gIH1cblxuICBpZiAob3B0aW9ucy5yZWxlYXNlID09PSB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBkZXRlY3RlZFJlbGVhc2UgPSBnZXRTZW50cnlSZWxlYXNlKCk7XG4gICAgaWYgKGRldGVjdGVkUmVsZWFzZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBvcHRpb25zLnJlbGVhc2UgPSBkZXRlY3RlZFJlbGVhc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIElmIHJlbGVhc2UgaXMgbm90IHByb3ZpZGVkLCB0aGVuIHdlIHNob3VsZCBkaXNhYmxlIGF1dG9TZXNzaW9uVHJhY2tpbmdcbiAgICAgIG9wdGlvbnMuYXV0b1Nlc3Npb25UcmFja2luZyA9IGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIGlmIChvcHRpb25zLmVudmlyb25tZW50ID09PSB1bmRlZmluZWQgJiYgcHJvY2Vzcy5lbnYuU0VOVFJZX0VOVklST05NRU5UKSB7XG4gICAgb3B0aW9ucy5lbnZpcm9ubWVudCA9IHByb2Nlc3MuZW52LlNFTlRSWV9FTlZJUk9OTUVOVDtcbiAgfVxuXG4gIGlmIChvcHRpb25zLmF1dG9TZXNzaW9uVHJhY2tpbmcgPT09IHVuZGVmaW5lZCAmJiBvcHRpb25zLmRzbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgb3B0aW9ucy5hdXRvU2Vzc2lvblRyYWNraW5nID0gdHJ1ZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MsIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgaWYgKChkb21haW4gYXMgYW55KS5hY3RpdmUpIHtcbiAgICBzZXRIdWJPbkNhcnJpZXIoY2FycmllciwgZ2V0Q3VycmVudEh1YigpKTtcbiAgfVxuXG4gIGluaXRBbmRCaW5kKE5vZGVDbGllbnQsIG9wdGlvbnMpO1xuXG4gIGlmIChvcHRpb25zLmF1dG9TZXNzaW9uVHJhY2tpbmcpIHtcbiAgICBzdGFydFNlc3Npb25UcmFja2luZygpO1xuICB9XG59XG5cbi8qKlxuICogVGhpcyBpcyB0aGUgZ2V0dGVyIGZvciBsYXN0RXZlbnRJZC5cbiAqXG4gKiBAcmV0dXJucyBUaGUgbGFzdCBldmVudCBpZCBvZiBhIGNhcHR1cmVkIGV2ZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gbGFzdEV2ZW50SWQoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGdldEN1cnJlbnRIdWIoKS5sYXN0RXZlbnRJZCgpO1xufVxuXG4vKipcbiAqIENhbGwgYGZsdXNoKClgIG9uIHRoZSBjdXJyZW50IGNsaWVudCwgaWYgdGhlcmUgaXMgb25lLiBTZWUge0BsaW5rIENsaWVudC5mbHVzaH0uXG4gKlxuICogQHBhcmFtIHRpbWVvdXQgTWF4aW11bSB0aW1lIGluIG1zIHRoZSBjbGllbnQgc2hvdWxkIHdhaXQgdG8gZmx1c2ggaXRzIGV2ZW50IHF1ZXVlLiBPbWl0dGluZyB0aGlzIHBhcmFtZXRlciB3aWxsIGNhdXNlXG4gKiB0aGUgY2xpZW50IHRvIHdhaXQgdW50aWwgYWxsIGV2ZW50cyBhcmUgc2VudCBiZWZvcmUgcmVzb2x2aW5nIHRoZSBwcm9taXNlLlxuICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHRvIGB0cnVlYCBpZiB0aGUgcXVldWUgc3VjY2Vzc2Z1bGx5IGRyYWlucyBiZWZvcmUgdGhlIHRpbWVvdXQsIG9yIGBmYWxzZWAgaWYgaXRcbiAqIGRvZXNuJ3QgKG9yIGlmIHRoZXJlJ3Mgbm8gY2xpZW50IGRlZmluZWQpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmx1c2godGltZW91dD86IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBjbGllbnQgPSBnZXRDdXJyZW50SHViKCkuZ2V0Q2xpZW50PE5vZGVDbGllbnQ+KCk7XG4gIGlmIChjbGllbnQpIHtcbiAgICByZXR1cm4gY2xpZW50LmZsdXNoKHRpbWVvdXQpO1xuICB9XG4gIGxvZ2dlci53YXJuKCdDYW5ub3QgZmx1c2ggZXZlbnRzLiBObyBjbGllbnQgZGVmaW5lZC4nKTtcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShmYWxzZSk7XG59XG5cbi8qKlxuICogQ2FsbCBgY2xvc2UoKWAgb24gdGhlIGN1cnJlbnQgY2xpZW50LCBpZiB0aGVyZSBpcyBvbmUuIFNlZSB7QGxpbmsgQ2xpZW50LmNsb3NlfS5cbiAqXG4gKiBAcGFyYW0gdGltZW91dCBNYXhpbXVtIHRpbWUgaW4gbXMgdGhlIGNsaWVudCBzaG91bGQgd2FpdCB0byBmbHVzaCBpdHMgZXZlbnQgcXVldWUgYmVmb3JlIHNodXR0aW5nIGRvd24uIE9taXR0aW5nIHRoaXNcbiAqIHBhcmFtZXRlciB3aWxsIGNhdXNlIHRoZSBjbGllbnQgdG8gd2FpdCB1bnRpbCBhbGwgZXZlbnRzIGFyZSBzZW50IGJlZm9yZSBkaXNhYmxpbmcgaXRzZWxmLlxuICogQHJldHVybnMgQSBwcm9taXNlIHdoaWNoIHJlc29sdmVzIHRvIGB0cnVlYCBpZiB0aGUgcXVldWUgc3VjY2Vzc2Z1bGx5IGRyYWlucyBiZWZvcmUgdGhlIHRpbWVvdXQsIG9yIGBmYWxzZWAgaWYgaXRcbiAqIGRvZXNuJ3QgKG9yIGlmIHRoZXJlJ3Mgbm8gY2xpZW50IGRlZmluZWQpLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2xvc2UodGltZW91dD86IG51bWJlcik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBjbGllbnQgPSBnZXRDdXJyZW50SHViKCkuZ2V0Q2xpZW50PE5vZGVDbGllbnQ+KCk7XG4gIGlmIChjbGllbnQpIHtcbiAgICByZXR1cm4gY2xpZW50LmNsb3NlKHRpbWVvdXQpO1xuICB9XG4gIGxvZ2dlci53YXJuKCdDYW5ub3QgZmx1c2ggZXZlbnRzIGFuZCBkaXNhYmxlIFNESy4gTm8gY2xpZW50IGRlZmluZWQuJyk7XG4gIHJldHVybiBQcm9taXNlLnJlc29sdmUoZmFsc2UpO1xufVxuXG4vKipcbiAqIEZ1bmN0aW9uIHRoYXQgdGFrZXMgYW4gaW5zdGFuY2Ugb2YgTm9kZUNsaWVudCBhbmQgY2hlY2tzIGlmIGF1dG9TZXNzaW9uVHJhY2tpbmcgb3B0aW9uIGlzIGVuYWJsZWQgZm9yIHRoYXQgY2xpZW50XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0F1dG9TZXNzaW9uVHJhY2tpbmdFbmFibGVkKGNsaWVudD86IE5vZGVDbGllbnQpOiBib29sZWFuIHtcbiAgaWYgKGNsaWVudCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIGNvbnN0IGNsaWVudE9wdGlvbnM6IE5vZGVPcHRpb25zID0gY2xpZW50ICYmIGNsaWVudC5nZXRPcHRpb25zKCk7XG4gIGlmIChjbGllbnRPcHRpb25zICYmIGNsaWVudE9wdGlvbnMuYXV0b1Nlc3Npb25UcmFja2luZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGNsaWVudE9wdGlvbnMuYXV0b1Nlc3Npb25UcmFja2luZztcbiAgfVxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIHJlbGVhc2UgZHluYW1pY2FsbHkgZnJvbSBlbnZpcm9ubWVudCB2YXJpYWJsZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRTZW50cnlSZWxlYXNlKGZhbGxiYWNrPzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgLy8gQWx3YXlzIHJlYWQgZmlyc3QgYXMgU2VudHJ5IHRha2VzIHRoaXMgYXMgcHJlY2VkZW5jZVxuICBpZiAocHJvY2Vzcy5lbnYuU0VOVFJZX1JFTEVBU0UpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYuU0VOVFJZX1JFTEVBU0U7XG4gIH1cblxuICAvLyBUaGlzIHN1cHBvcnRzIHRoZSB2YXJpYWJsZSB0aGF0IHNlbnRyeS13ZWJwYWNrLXBsdWdpbiBpbmplY3RzXG4gIGNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdCgpO1xuICBpZiAoZ2xvYmFsLlNFTlRSWV9SRUxFQVNFICYmIGdsb2JhbC5TRU5UUllfUkVMRUFTRS5pZCkge1xuICAgIHJldHVybiBnbG9iYWwuU0VOVFJZX1JFTEVBU0UuaWQ7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIC8vIEdpdEh1YiBBY3Rpb25zIC0gaHR0cHM6Ly9oZWxwLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy9jb25maWd1cmluZy1hbmQtbWFuYWdpbmctd29ya2Zsb3dzL3VzaW5nLWVudmlyb25tZW50LXZhcmlhYmxlcyNkZWZhdWx0LWVudmlyb25tZW50LXZhcmlhYmxlc1xuICAgIHByb2Nlc3MuZW52LkdJVEhVQl9TSEEgfHxcbiAgICAvLyBOZXRsaWZ5IC0gaHR0cHM6Ly9kb2NzLm5ldGxpZnkuY29tL2NvbmZpZ3VyZS1idWlsZHMvZW52aXJvbm1lbnQtdmFyaWFibGVzLyNidWlsZC1tZXRhZGF0YVxuICAgIHByb2Nlc3MuZW52LkNPTU1JVF9SRUYgfHxcbiAgICAvLyBWZXJjZWwgLSBodHRwczovL3ZlcmNlbC5jb20vZG9jcy92Mi9idWlsZC1zdGVwI3N5c3RlbS1lbnZpcm9ubWVudC12YXJpYWJsZXNcbiAgICBwcm9jZXNzLmVudi5WRVJDRUxfR0lUX0NPTU1JVF9TSEEgfHxcbiAgICBwcm9jZXNzLmVudi5WRVJDRUxfR0lUSFVCX0NPTU1JVF9TSEEgfHxcbiAgICBwcm9jZXNzLmVudi5WRVJDRUxfR0lUTEFCX0NPTU1JVF9TSEEgfHxcbiAgICBwcm9jZXNzLmVudi5WRVJDRUxfQklUQlVDS0VUX0NPTU1JVF9TSEEgfHxcbiAgICAvLyBaZWl0IChub3cga25vd24gYXMgVmVyY2VsKVxuICAgIHByb2Nlc3MuZW52LlpFSVRfR0lUSFVCX0NPTU1JVF9TSEEgfHxcbiAgICBwcm9jZXNzLmVudi5aRUlUX0dJVExBQl9DT01NSVRfU0hBIHx8XG4gICAgcHJvY2Vzcy5lbnYuWkVJVF9CSVRCVUNLRVRfQ09NTUlUX1NIQSB8fFxuICAgIGZhbGxiYWNrXG4gICk7XG59XG5cbi8qKlxuICogRW5hYmxlIGF1dG9tYXRpYyBTZXNzaW9uIFRyYWNraW5nIGZvciB0aGUgbm9kZSBwcm9jZXNzLlxuICovXG5mdW5jdGlvbiBzdGFydFNlc3Npb25UcmFja2luZygpOiB2b2lkIHtcbiAgY29uc3QgaHViID0gZ2V0Q3VycmVudEh1YigpO1xuICBodWIuc3RhcnRTZXNzaW9uKCk7XG4gIC8vIEVtaXR0ZWQgaW4gdGhlIGNhc2Ugb2YgaGVhbHRoeSBzZXNzaW9ucywgZXJyb3Igb2YgYG1lY2hhbmlzbS5oYW5kbGVkOiB0cnVlYCBhbmQgdW5oYW5kbGVkcmVqZWN0aW9ucyBiZWNhdXNlXG4gIC8vIFRoZSAnYmVmb3JlRXhpdCcgZXZlbnQgaXMgbm90IGVtaXR0ZWQgZm9yIGNvbmRpdGlvbnMgY2F1c2luZyBleHBsaWNpdCB0ZXJtaW5hdGlvbixcbiAgLy8gc3VjaCBhcyBjYWxsaW5nIHByb2Nlc3MuZXhpdCgpIG9yIHVuY2F1Z2h0IGV4Y2VwdGlvbnMuXG4gIC8vIFJlZjogaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9wcm9jZXNzLmh0bWwjcHJvY2Vzc19ldmVudF9iZWZvcmVleGl0XG4gIHByb2Nlc3Mub24oJ2JlZm9yZUV4aXQnLCAoKSA9PiB7XG4gICAgY29uc3Qgc2Vzc2lvbiA9IGh1Yi5nZXRTY29wZSgpPy5nZXRTZXNzaW9uKCk7XG4gICAgY29uc3QgdGVybWluYWxTdGF0ZXMgPSBbU2Vzc2lvblN0YXR1cy5FeGl0ZWQsIFNlc3Npb25TdGF0dXMuQ3Jhc2hlZF07XG4gICAgLy8gT25seSBjYWxsIGVuZFNlc3Npb24sIGlmIHRoZSBTZXNzaW9uIGV4aXN0cyBvbiBTY29wZSBhbmQgU2Vzc2lvblN0YXR1cyBpcyBub3QgYVxuICAgIC8vIFRlcm1pbmFsIFN0YXR1cyBpLmUuIEV4aXRlZCBvciBDcmFzaGVkIGJlY2F1c2VcbiAgICAvLyBcIldoZW4gYSBzZXNzaW9uIGlzIG1vdmVkIGF3YXkgZnJvbSBvayBpdCBtdXN0IG5vdCBiZSB1cGRhdGVkIGFueW1vcmUuXCJcbiAgICAvLyBSZWY6IGh0dHBzOi8vZGV2ZWxvcC5zZW50cnkuZGV2L3Nkay9zZXNzaW9ucy9cbiAgICBpZiAoc2Vzc2lvbiAmJiAhdGVybWluYWxTdGF0ZXMuaW5jbHVkZXMoc2Vzc2lvbi5zdGF0dXMpKSBodWIuZW5kU2Vzc2lvbigpO1xuICB9KTtcbn1cbiIsICJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG4vKipcbiAqIFJlY3Vyc2l2ZWx5IHJlYWQgdGhlIGNvbnRlbnRzIG9mIGEgZGlyZWN0b3J5LlxuICpcbiAqIEBwYXJhbSB0YXJnZXREaXIgQWJzb2x1dGUgb3IgcmVsYXRpdmUgcGF0aCBvZiB0aGUgZGlyZWN0b3J5IHRvIHNjYW4uIEFsbCByZXR1cm5lZCBwYXRocyB3aWxsIGJlIHJlbGF0aXZlIHRvIHRoaXNcbiAqIGRpcmVjdG9yeS5cbiAqIEByZXR1cm5zIEFycmF5IGhvbGRpbmcgYWxsIHJlbGF0aXZlIHBhdGhzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWVwUmVhZERpclN5bmModGFyZ2V0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIGNvbnN0IHRhcmdldERpckFic1BhdGggPSBwYXRoLnJlc29sdmUodGFyZ2V0RGlyKTtcblxuICBpZiAoIWZzLmV4aXN0c1N5bmModGFyZ2V0RGlyQWJzUGF0aCkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCByZWFkIGNvbnRlbnRzIG9mICR7dGFyZ2V0RGlyQWJzUGF0aH0uIERpcmVjdG9yeSBkb2VzIG5vdCBleGlzdC5gKTtcbiAgfVxuXG4gIGlmICghZnMuc3RhdFN5bmModGFyZ2V0RGlyQWJzUGF0aCkuaXNEaXJlY3RvcnkoKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IHJlYWQgY29udGVudHMgb2YgJHt0YXJnZXREaXJBYnNQYXRofSwgYmVjYXVzZSBpdCBpcyBub3QgYSBkaXJlY3RvcnkuYCk7XG4gIH1cblxuICAvLyBUaGlzIGRvZXMgdGhlIHNhbWUgdGhpbmcgYXMgaXRzIGNvbnRhaW5pbmcgZnVuY3Rpb24sIGBkZWVwUmVhZERpclN5bmNgIChleGNlcHQgdGhhdCAtIHB1cmVseSBmb3IgY29udmVuaWVuY2UgLSBpdFxuICAvLyBkZWFscyBpbiBhYnNvbHV0ZSBwYXRocyByYXRoZXIgdGhhbiByZWxhdGl2ZSBvbmVzKS4gV2UgbmVlZCB0aGlzIHRvIGJlIHNlcGFyYXRlIGZyb20gdGhlIG91dGVyIGZ1bmN0aW9uIHRvIHByZXNlcnZlXG4gIC8vIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYHRhcmdldERpckFic1BhdGhgIGFuZCBgY3VycmVudERpckFic1BhdGhgLlxuICBjb25zdCBkZWVwUmVhZEN1cnJlbnREaXIgPSAoY3VycmVudERpckFic1BhdGg6IHN0cmluZyk6IHN0cmluZ1tdID0+IHtcbiAgICByZXR1cm4gZnMucmVhZGRpclN5bmMoY3VycmVudERpckFic1BhdGgpLnJlZHVjZSgoYWJzUGF0aHM6IHN0cmluZ1tdLCBpdGVtTmFtZTogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCBpdGVtQWJzUGF0aCA9IHBhdGguam9pbihjdXJyZW50RGlyQWJzUGF0aCwgaXRlbU5hbWUpO1xuXG4gICAgICBpZiAoZnMuc3RhdFN5bmMoaXRlbUFic1BhdGgpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgcmV0dXJuIFsuLi5hYnNQYXRocywgLi4uZGVlcFJlYWRDdXJyZW50RGlyKGl0ZW1BYnNQYXRoKV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbLi4uYWJzUGF0aHMsIGl0ZW1BYnNQYXRoXTtcbiAgICB9LCBbXSk7XG4gIH07XG5cbiAgcmV0dXJuIGRlZXBSZWFkQ3VycmVudERpcih0YXJnZXREaXJBYnNQYXRoKS5tYXAoYWJzUGF0aCA9PiBwYXRoLnJlbGF0aXZlKHRhcmdldERpckFic1BhdGgsIGFic1BhdGgpKTtcbn1cbiIsICIvKiogVGhlIHN0YXR1cyBvZiBhbiBTcGFuLiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9leHBvcnRcbmV4cG9ydCBlbnVtIFNwYW5TdGF0dXMge1xuICAvKiogVGhlIG9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LiAqL1xuICBPayA9ICdvaycsXG4gIC8qKiBEZWFkbGluZSBleHBpcmVkIGJlZm9yZSBvcGVyYXRpb24gY291bGQgY29tcGxldGUuICovXG4gIERlYWRsaW5lRXhjZWVkZWQgPSAnZGVhZGxpbmVfZXhjZWVkZWQnLFxuICAvKiogNDAxIFVuYXV0aG9yaXplZCAoYWN0dWFsbHkgZG9lcyBtZWFuIHVuYXV0aGVudGljYXRlZCBhY2NvcmRpbmcgdG8gUkZDIDcyMzUpICovXG4gIFVuYXV0aGVudGljYXRlZCA9ICd1bmF1dGhlbnRpY2F0ZWQnLFxuICAvKiogNDAzIEZvcmJpZGRlbiAqL1xuICBQZXJtaXNzaW9uRGVuaWVkID0gJ3Blcm1pc3Npb25fZGVuaWVkJyxcbiAgLyoqIDQwNCBOb3QgRm91bmQuIFNvbWUgcmVxdWVzdGVkIGVudGl0eSAoZmlsZSBvciBkaXJlY3RvcnkpIHdhcyBub3QgZm91bmQuICovXG4gIE5vdEZvdW5kID0gJ25vdF9mb3VuZCcsXG4gIC8qKiA0MjkgVG9vIE1hbnkgUmVxdWVzdHMgKi9cbiAgUmVzb3VyY2VFeGhhdXN0ZWQgPSAncmVzb3VyY2VfZXhoYXVzdGVkJyxcbiAgLyoqIENsaWVudCBzcGVjaWZpZWQgYW4gaW52YWxpZCBhcmd1bWVudC4gNHh4LiAqL1xuICBJbnZhbGlkQXJndW1lbnQgPSAnaW52YWxpZF9hcmd1bWVudCcsXG4gIC8qKiA1MDEgTm90IEltcGxlbWVudGVkICovXG4gIFVuaW1wbGVtZW50ZWQgPSAndW5pbXBsZW1lbnRlZCcsXG4gIC8qKiA1MDMgU2VydmljZSBVbmF2YWlsYWJsZSAqL1xuICBVbmF2YWlsYWJsZSA9ICd1bmF2YWlsYWJsZScsXG4gIC8qKiBPdGhlci9nZW5lcmljIDV4eC4gKi9cbiAgSW50ZXJuYWxFcnJvciA9ICdpbnRlcm5hbF9lcnJvcicsXG4gIC8qKiBVbmtub3duLiBBbnkgbm9uLXN0YW5kYXJkIEhUVFAgc3RhdHVzIGNvZGUuICovXG4gIFVua25vd25FcnJvciA9ICd1bmtub3duX2Vycm9yJyxcbiAgLyoqIFRoZSBvcGVyYXRpb24gd2FzIGNhbmNlbGxlZCAodHlwaWNhbGx5IGJ5IHRoZSB1c2VyKS4gKi9cbiAgQ2FuY2VsbGVkID0gJ2NhbmNlbGxlZCcsXG4gIC8qKiBBbHJlYWR5IGV4aXN0cyAoNDA5KSAqL1xuICBBbHJlYWR5RXhpc3RzID0gJ2FscmVhZHlfZXhpc3RzJyxcbiAgLyoqIE9wZXJhdGlvbiB3YXMgcmVqZWN0ZWQgYmVjYXVzZSB0aGUgc3lzdGVtIGlzIG5vdCBpbiBhIHN0YXRlIHJlcXVpcmVkIGZvciB0aGUgb3BlcmF0aW9uJ3MgKi9cbiAgRmFpbGVkUHJlY29uZGl0aW9uID0gJ2ZhaWxlZF9wcmVjb25kaXRpb24nLFxuICAvKiogVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZCwgdHlwaWNhbGx5IGR1ZSB0byBhIGNvbmN1cnJlbmN5IGlzc3VlLiAqL1xuICBBYm9ydGVkID0gJ2Fib3J0ZWQnLFxuICAvKiogT3BlcmF0aW9uIHdhcyBhdHRlbXB0ZWQgcGFzdCB0aGUgdmFsaWQgcmFuZ2UuICovXG4gIE91dE9mUmFuZ2UgPSAnb3V0X29mX3JhbmdlJyxcbiAgLyoqIFVucmVjb3ZlcmFibGUgZGF0YSBsb3NzIG9yIGNvcnJ1cHRpb24gKi9cbiAgRGF0YUxvc3MgPSAnZGF0YV9sb3NzJyxcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1uYW1lc3BhY2UsIGltcG9ydC9leHBvcnRcbmV4cG9ydCBuYW1lc3BhY2UgU3BhblN0YXR1cyB7XG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIEhUVFAgc3RhdHVzIGNvZGUgaW50byBhIHtAbGluayBTcGFuU3RhdHVzfS5cbiAgICpcbiAgICogQHBhcmFtIGh0dHBTdGF0dXMgVGhlIEhUVFAgcmVzcG9uc2Ugc3RhdHVzIGNvZGUuXG4gICAqIEByZXR1cm5zIFRoZSBzcGFuIHN0YXR1cyBvciB7QGxpbmsgU3BhblN0YXR1cy5Vbmtub3duRXJyb3J9LlxuICAgKi9cbiAgZXhwb3J0IGZ1bmN0aW9uIGZyb21IdHRwQ29kZShodHRwU3RhdHVzOiBudW1iZXIpOiBTcGFuU3RhdHVzIHtcbiAgICBpZiAoaHR0cFN0YXR1cyA8IDQwMCAmJiBodHRwU3RhdHVzID49IDEwMCkge1xuICAgICAgcmV0dXJuIFNwYW5TdGF0dXMuT2s7XG4gICAgfVxuXG4gICAgaWYgKGh0dHBTdGF0dXMgPj0gNDAwICYmIGh0dHBTdGF0dXMgPCA1MDApIHtcbiAgICAgIHN3aXRjaCAoaHR0cFN0YXR1cykge1xuICAgICAgICBjYXNlIDQwMTpcbiAgICAgICAgICByZXR1cm4gU3BhblN0YXR1cy5VbmF1dGhlbnRpY2F0ZWQ7XG4gICAgICAgIGNhc2UgNDAzOlxuICAgICAgICAgIHJldHVybiBTcGFuU3RhdHVzLlBlcm1pc3Npb25EZW5pZWQ7XG4gICAgICAgIGNhc2UgNDA0OlxuICAgICAgICAgIHJldHVybiBTcGFuU3RhdHVzLk5vdEZvdW5kO1xuICAgICAgICBjYXNlIDQwOTpcbiAgICAgICAgICByZXR1cm4gU3BhblN0YXR1cy5BbHJlYWR5RXhpc3RzO1xuICAgICAgICBjYXNlIDQxMzpcbiAgICAgICAgICByZXR1cm4gU3BhblN0YXR1cy5GYWlsZWRQcmVjb25kaXRpb247XG4gICAgICAgIGNhc2UgNDI5OlxuICAgICAgICAgIHJldHVybiBTcGFuU3RhdHVzLlJlc291cmNlRXhoYXVzdGVkO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBTcGFuU3RhdHVzLkludmFsaWRBcmd1bWVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaHR0cFN0YXR1cyA+PSA1MDAgJiYgaHR0cFN0YXR1cyA8IDYwMCkge1xuICAgICAgc3dpdGNoIChodHRwU3RhdHVzKSB7XG4gICAgICAgIGNhc2UgNTAxOlxuICAgICAgICAgIHJldHVybiBTcGFuU3RhdHVzLlVuaW1wbGVtZW50ZWQ7XG4gICAgICAgIGNhc2UgNTAzOlxuICAgICAgICAgIHJldHVybiBTcGFuU3RhdHVzLlVuYXZhaWxhYmxlO1xuICAgICAgICBjYXNlIDUwNDpcbiAgICAgICAgICByZXR1cm4gU3BhblN0YXR1cy5EZWFkbGluZUV4Y2VlZGVkO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiBTcGFuU3RhdHVzLkludGVybmFsRXJyb3I7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFNwYW5TdGF0dXMuVW5rbm93bkVycm9yO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgZ2V0Q3VycmVudEh1YiwgSHViIH0gZnJvbSAnQHNlbnRyeS9odWInO1xuaW1wb3J0IHsgT3B0aW9ucywgVHJhY2VwYXJlbnREYXRhLCBUcmFuc2FjdGlvbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgVFJBQ0VQQVJFTlRfUkVHRVhQID0gbmV3IFJlZ0V4cChcbiAgJ15bIFxcXFx0XSonICsgLy8gd2hpdGVzcGFjZVxuICAnKFswLTlhLWZdezMyfSk/JyArIC8vIHRyYWNlX2lkXG4gICctPyhbMC05YS1mXXsxNn0pPycgKyAvLyBzcGFuX2lkXG4gICctPyhbMDFdKT8nICsgLy8gc2FtcGxlZFxuICAgICdbIFxcXFx0XSokJywgLy8gd2hpdGVzcGFjZVxuKTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRyYWNpbmcgaXMgY3VycmVudGx5IGVuYWJsZWQuXG4gKlxuICogVHJhY2luZyBpcyBlbmFibGVkIHdoZW4gYXQgbGVhc3Qgb25lIG9mIGB0cmFjZXNTYW1wbGVSYXRlYCBhbmQgYHRyYWNlc1NhbXBsZXJgIGlzIGRlZmluZWQgaW4gdGhlIFNESyBjb25maWcuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNUcmFjaW5nRW5hYmxlZChcbiAgb3B0aW9uczogT3B0aW9ucyB8IHVuZGVmaW5lZCA9IGdldEN1cnJlbnRIdWIoKVxuICAgIC5nZXRDbGllbnQoKVxuICAgID8uZ2V0T3B0aW9ucygpLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiAhIW9wdGlvbnMgJiYgKCd0cmFjZXNTYW1wbGVSYXRlJyBpbiBvcHRpb25zIHx8ICd0cmFjZXNTYW1wbGVyJyBpbiBvcHRpb25zKTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0IHRyYW5zYWN0aW9uIGNvbnRleHQgZGF0YSBmcm9tIGEgYHNlbnRyeS10cmFjZWAgaGVhZGVyLlxuICpcbiAqIEBwYXJhbSB0cmFjZXBhcmVudCBUcmFjZXBhcmVudCBzdHJpbmdcbiAqXG4gKiBAcmV0dXJucyBPYmplY3QgY29udGFpbmluZyBkYXRhIGZyb20gdGhlIGhlYWRlciwgb3IgdW5kZWZpbmVkIGlmIHRyYWNlcGFyZW50IHN0cmluZyBpcyBtYWxmb3JtZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RUcmFjZXBhcmVudERhdGEodHJhY2VwYXJlbnQ6IHN0cmluZyk6IFRyYWNlcGFyZW50RGF0YSB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IG1hdGNoZXMgPSB0cmFjZXBhcmVudC5tYXRjaChUUkFDRVBBUkVOVF9SRUdFWFApO1xuICBpZiAobWF0Y2hlcykge1xuICAgIGxldCBwYXJlbnRTYW1wbGVkOiBib29sZWFuIHwgdW5kZWZpbmVkO1xuICAgIGlmIChtYXRjaGVzWzNdID09PSAnMScpIHtcbiAgICAgIHBhcmVudFNhbXBsZWQgPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAobWF0Y2hlc1szXSA9PT0gJzAnKSB7XG4gICAgICBwYXJlbnRTYW1wbGVkID0gZmFsc2U7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0cmFjZUlkOiBtYXRjaGVzWzFdLFxuICAgICAgcGFyZW50U2FtcGxlZCxcbiAgICAgIHBhcmVudFNwYW5JZDogbWF0Y2hlc1syXSxcbiAgICB9O1xuICB9XG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKiBHcmFicyBhY3RpdmUgdHJhbnNhY3Rpb24gb2ZmIHNjb3BlLCBpZiBhbnkgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRBY3RpdmVUcmFuc2FjdGlvbjxUIGV4dGVuZHMgVHJhbnNhY3Rpb24+KGh1YjogSHViID0gZ2V0Q3VycmVudEh1YigpKTogVCB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBodWI/LmdldFNjb3BlKCk/LmdldFRyYW5zYWN0aW9uKCkgYXMgVCB8IHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBmcm9tIG1pbGxpc2Vjb25kcyB0byBzZWNvbmRzXG4gKiBAcGFyYW0gdGltZSB0aW1lIGluIG1zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtc1RvU2VjKHRpbWU6IG51bWJlcik6IG51bWJlciB7XG4gIHJldHVybiB0aW1lIC8gMTAwMDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBmcm9tIHNlY29uZHMgdG8gbWlsbGlzZWNvbmRzXG4gKiBAcGFyYW0gdGltZSB0aW1lIGluIHNlY29uZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlY1RvTXModGltZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgcmV0dXJuIHRpbWUgKiAxMDAwO1xufVxuXG4vLyBzbyBpdCBjYW4gYmUgdXNlZCBpbiBtYW51YWwgaW5zdHJ1bWVudGF0aW9uIHdpdGhvdXQgbmVjZXNzaXRhdGluZyBhIGhhcmQgZGVwZW5kZW5jeSBvbiBAc2VudHJ5L3V0aWxzXG5leHBvcnQgeyBzdHJpcFVybFF1ZXJ5QW5kRnJhZ21lbnQgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbiIsICJpbXBvcnQgeyBhZGRJbnN0cnVtZW50YXRpb25IYW5kbGVyLCBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuaW1wb3J0IHsgU3BhblN0YXR1cyB9IGZyb20gJy4vc3BhbnN0YXR1cyc7XG5pbXBvcnQgeyBnZXRBY3RpdmVUcmFuc2FjdGlvbiB9IGZyb20gJy4vdXRpbHMnO1xuXG4vKipcbiAqIENvbmZpZ3VyZXMgZ2xvYmFsIGVycm9yIGxpc3RlbmVyc1xuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJFcnJvckluc3RydW1lbnRhdGlvbigpOiB2b2lkIHtcbiAgYWRkSW5zdHJ1bWVudGF0aW9uSGFuZGxlcih7XG4gICAgY2FsbGJhY2s6IGVycm9yQ2FsbGJhY2ssXG4gICAgdHlwZTogJ2Vycm9yJyxcbiAgfSk7XG4gIGFkZEluc3RydW1lbnRhdGlvbkhhbmRsZXIoe1xuICAgIGNhbGxiYWNrOiBlcnJvckNhbGxiYWNrLFxuICAgIHR5cGU6ICd1bmhhbmRsZWRyZWplY3Rpb24nLFxuICB9KTtcbn1cblxuLyoqXG4gKiBJZiBhbiBlcnJvciBvciB1bmhhbmRsZWQgcHJvbWlzZSBvY2N1cnMsIHdlIG1hcmsgdGhlIGFjdGl2ZSB0cmFuc2FjdGlvbiBhcyBmYWlsZWRcbiAqL1xuZnVuY3Rpb24gZXJyb3JDYWxsYmFjaygpOiB2b2lkIHtcbiAgY29uc3QgYWN0aXZlVHJhbnNhY3Rpb24gPSBnZXRBY3RpdmVUcmFuc2FjdGlvbigpO1xuICBpZiAoYWN0aXZlVHJhbnNhY3Rpb24pIHtcbiAgICBsb2dnZXIubG9nKGBbVHJhY2luZ10gVHJhbnNhY3Rpb246ICR7U3BhblN0YXR1cy5JbnRlcm5hbEVycm9yfSAtPiBHbG9iYWwgZXJyb3Igb2NjdXJlZGApO1xuICAgIGFjdGl2ZVRyYW5zYWN0aW9uLnNldFN0YXR1cyhTcGFuU3RhdHVzLkludGVybmFsRXJyb3IpO1xuICB9XG59XG4iLCAiLy8gU3RvcmUgZmluaXNoIHJlYXNvbnMgaW4gdHVwbGUgdG8gc2F2ZSBvbiBidW5kbGUgc2l6ZVxuLy8gUmVhZG9ubHkgdHlwZSBzaG91bGQgZW5mb3JjZSB0aGF0IHRoaXMgaXMgbm90IG11dGF0ZWQuXG5leHBvcnQgY29uc3QgRklOSVNIX1JFQVNPTl9UQUcgPSAnZmluaXNoUmVhc29uJztcblxuZXhwb3J0IGNvbnN0IElETEVfVFJBTlNBQ1RJT05fRklOSVNIX1JFQVNPTlMgPSBbJ2hlYXJ0YmVhdEZhaWxlZCcsICdpZGxlVGltZW91dCcsICdkb2N1bWVudEhpZGRlbiddIGFzIGNvbnN0O1xuIiwgIi8qIGVzbGludC1kaXNhYmxlIG1heC1saW5lcyAqL1xuaW1wb3J0IHsgUHJpbWl0aXZlLCBTcGFuIGFzIFNwYW5JbnRlcmZhY2UsIFNwYW5Db250ZXh0LCBUcmFuc2FjdGlvbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgZHJvcFVuZGVmaW5lZEtleXMsIHRpbWVzdGFtcFdpdGhNcywgdXVpZDQgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuaW1wb3J0IHsgU3BhblN0YXR1cyB9IGZyb20gJy4vc3BhbnN0YXR1cyc7XG5cbi8qKlxuICogS2VlcHMgdHJhY2sgb2YgZmluaXNoZWQgc3BhbnMgZm9yIGEgZ2l2ZW4gdHJhbnNhY3Rpb25cbiAqIEBpbnRlcm5hbFxuICogQGhpZGVjb25zdHJ1Y3RvclxuICogQGhpZGRlblxuICovXG5leHBvcnQgY2xhc3MgU3BhblJlY29yZGVyIHtcbiAgcHVibGljIHNwYW5zOiBTcGFuW10gPSBbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9tYXhsZW46IG51bWJlcjtcblxuICBwdWJsaWMgY29uc3RydWN0b3IobWF4bGVuOiBudW1iZXIgPSAxMDAwKSB7XG4gICAgdGhpcy5fbWF4bGVuID0gbWF4bGVuO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMganVzdCBzbyB0aGF0IHdlIGRvbid0IHJ1biBvdXQgb2YgbWVtb3J5IHdoaWxlIHJlY29yZGluZyBhIGxvdFxuICAgKiBvZiBzcGFucy4gQXQgc29tZSBwb2ludCB3ZSBqdXN0IHN0b3AgYW5kIGZsdXNoIG91dCB0aGUgc3RhcnQgb2YgdGhlXG4gICAqIHRyYWNlIHRyZWUgKGkuZS50aGUgZmlyc3QgbiBzcGFucyB3aXRoIHRoZSBzbWFsbGVzdFxuICAgKiBzdGFydF90aW1lc3RhbXApLlxuICAgKi9cbiAgcHVibGljIGFkZChzcGFuOiBTcGFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc3BhbnMubGVuZ3RoID4gdGhpcy5fbWF4bGVuKSB7XG4gICAgICBzcGFuLnNwYW5SZWNvcmRlciA9IHVuZGVmaW5lZDtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zcGFucy5wdXNoKHNwYW4pO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNwYW4gY29udGFpbnMgYWxsIGRhdGEgYWJvdXQgYSBzcGFuXG4gKi9cbmV4cG9ydCBjbGFzcyBTcGFuIGltcGxlbWVudHMgU3BhbkludGVyZmFjZSB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHRyYWNlSWQ6IHN0cmluZyA9IHV1aWQ0KCk7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc3BhbklkOiBzdHJpbmcgPSB1dWlkNCgpLnN1YnN0cmluZygxNik7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgcGFyZW50U3BhbklkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBrZWVwZXIgb2YgdGhlIHN0YXR1c1xuICAgKi9cbiAgcHVibGljIHN0YXR1cz86IFNwYW5TdGF0dXMgfCBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2FtcGxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRpbWVzdGFtcCBpbiBzZWNvbmRzIHdoZW4gdGhlIHNwYW4gd2FzIGNyZWF0ZWQuXG4gICAqL1xuICBwdWJsaWMgc3RhcnRUaW1lc3RhbXA6IG51bWJlciA9IHRpbWVzdGFtcFdpdGhNcygpO1xuXG4gIC8qKlxuICAgKiBUaW1lc3RhbXAgaW4gc2Vjb25kcyB3aGVuIHRoZSBzcGFuIGVuZGVkLlxuICAgKi9cbiAgcHVibGljIGVuZFRpbWVzdGFtcD86IG51bWJlcjtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBvcD86IHN0cmluZztcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyB0YWdzOiB7IFtrZXk6IHN0cmluZ106IFByaW1pdGl2ZSB9ID0ge307XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwdWJsaWMgZGF0YTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIHNwYW5zIHRoYXQgd2VyZSBmaW5hbGl6ZWRcbiAgICovXG4gIHB1YmxpYyBzcGFuUmVjb3JkZXI/OiBTcGFuUmVjb3JkZXI7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgdHJhbnNhY3Rpb24/OiBUcmFuc2FjdGlvbjtcblxuICAvKipcbiAgICogWW91IHNob3VsZCBuZXZlciBjYWxsIHRoZSBjb25zdHJ1Y3RvciBtYW51YWxseSwgYWx3YXlzIHVzZSBgU2VudHJ5LnN0YXJ0VHJhbnNhY3Rpb24oKWBcbiAgICogb3IgY2FsbCBgc3RhcnRDaGlsZCgpYCBvbiBhbiBleGlzdGluZyBzcGFuLlxuICAgKiBAaW50ZXJuYWxcbiAgICogQGhpZGVjb25zdHJ1Y3RvclxuICAgKiBAaGlkZGVuXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Ioc3BhbkNvbnRleHQ/OiBTcGFuQ29udGV4dCkge1xuICAgIGlmICghc3BhbkNvbnRleHQpIHtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBpZiAoc3BhbkNvbnRleHQudHJhY2VJZCkge1xuICAgICAgdGhpcy50cmFjZUlkID0gc3BhbkNvbnRleHQudHJhY2VJZDtcbiAgICB9XG4gICAgaWYgKHNwYW5Db250ZXh0LnNwYW5JZCkge1xuICAgICAgdGhpcy5zcGFuSWQgPSBzcGFuQ29udGV4dC5zcGFuSWQ7XG4gICAgfVxuICAgIGlmIChzcGFuQ29udGV4dC5wYXJlbnRTcGFuSWQpIHtcbiAgICAgIHRoaXMucGFyZW50U3BhbklkID0gc3BhbkNvbnRleHQucGFyZW50U3BhbklkO1xuICAgIH1cbiAgICAvLyBXZSB3YW50IHRvIGluY2x1ZGUgYm9vbGVhbnMgYXMgd2VsbCBoZXJlXG4gICAgaWYgKCdzYW1wbGVkJyBpbiBzcGFuQ29udGV4dCkge1xuICAgICAgdGhpcy5zYW1wbGVkID0gc3BhbkNvbnRleHQuc2FtcGxlZDtcbiAgICB9XG4gICAgaWYgKHNwYW5Db250ZXh0Lm9wKSB7XG4gICAgICB0aGlzLm9wID0gc3BhbkNvbnRleHQub3A7XG4gICAgfVxuICAgIGlmIChzcGFuQ29udGV4dC5kZXNjcmlwdGlvbikge1xuICAgICAgdGhpcy5kZXNjcmlwdGlvbiA9IHNwYW5Db250ZXh0LmRlc2NyaXB0aW9uO1xuICAgIH1cbiAgICBpZiAoc3BhbkNvbnRleHQuZGF0YSkge1xuICAgICAgdGhpcy5kYXRhID0gc3BhbkNvbnRleHQuZGF0YTtcbiAgICB9XG4gICAgaWYgKHNwYW5Db250ZXh0LnRhZ3MpIHtcbiAgICAgIHRoaXMudGFncyA9IHNwYW5Db250ZXh0LnRhZ3M7XG4gICAgfVxuICAgIGlmIChzcGFuQ29udGV4dC5zdGF0dXMpIHtcbiAgICAgIHRoaXMuc3RhdHVzID0gc3BhbkNvbnRleHQuc3RhdHVzO1xuICAgIH1cbiAgICBpZiAoc3BhbkNvbnRleHQuc3RhcnRUaW1lc3RhbXApIHtcbiAgICAgIHRoaXMuc3RhcnRUaW1lc3RhbXAgPSBzcGFuQ29udGV4dC5zdGFydFRpbWVzdGFtcDtcbiAgICB9XG4gICAgaWYgKHNwYW5Db250ZXh0LmVuZFRpbWVzdGFtcCkge1xuICAgICAgdGhpcy5lbmRUaW1lc3RhbXAgPSBzcGFuQ29udGV4dC5lbmRUaW1lc3RhbXA7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBwdWJsaWMgY2hpbGQoXG4gICAgc3BhbkNvbnRleHQ/OiBQaWNrPFNwYW5Db250ZXh0LCBFeGNsdWRlPGtleW9mIFNwYW5Db250ZXh0LCAnc3BhbklkJyB8ICdzYW1wbGVkJyB8ICd0cmFjZUlkJyB8ICdwYXJlbnRTcGFuSWQnPj4sXG4gICk6IFNwYW4ge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0Q2hpbGQoc3BhbkNvbnRleHQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc3RhcnRDaGlsZChcbiAgICBzcGFuQ29udGV4dD86IFBpY2s8U3BhbkNvbnRleHQsIEV4Y2x1ZGU8a2V5b2YgU3BhbkNvbnRleHQsICdzcGFuSWQnIHwgJ3NhbXBsZWQnIHwgJ3RyYWNlSWQnIHwgJ3BhcmVudFNwYW5JZCc+PixcbiAgKTogU3BhbiB7XG4gICAgY29uc3QgY2hpbGRTcGFuID0gbmV3IFNwYW4oe1xuICAgICAgLi4uc3BhbkNvbnRleHQsXG4gICAgICBwYXJlbnRTcGFuSWQ6IHRoaXMuc3BhbklkLFxuICAgICAgc2FtcGxlZDogdGhpcy5zYW1wbGVkLFxuICAgICAgdHJhY2VJZDogdGhpcy50cmFjZUlkLFxuICAgIH0pO1xuXG4gICAgY2hpbGRTcGFuLnNwYW5SZWNvcmRlciA9IHRoaXMuc3BhblJlY29yZGVyO1xuICAgIGlmIChjaGlsZFNwYW4uc3BhblJlY29yZGVyKSB7XG4gICAgICBjaGlsZFNwYW4uc3BhblJlY29yZGVyLmFkZChjaGlsZFNwYW4pO1xuICAgIH1cblxuICAgIGNoaWxkU3Bhbi50cmFuc2FjdGlvbiA9IHRoaXMudHJhbnNhY3Rpb247XG5cbiAgICByZXR1cm4gY2hpbGRTcGFuO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0VGFnKGtleTogc3RyaW5nLCB2YWx1ZTogUHJpbWl0aXZlKTogdGhpcyB7XG4gICAgdGhpcy50YWdzID0geyAuLi50aGlzLnRhZ3MsIFtrZXldOiB2YWx1ZSB9O1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L2V4cGxpY2l0LW1vZHVsZS1ib3VuZGFyeS10eXBlc1xuICBwdWJsaWMgc2V0RGF0YShrZXk6IHN0cmluZywgdmFsdWU6IGFueSk6IHRoaXMge1xuICAgIHRoaXMuZGF0YSA9IHsgLi4udGhpcy5kYXRhLCBba2V5XTogdmFsdWUgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldFN0YXR1cyh2YWx1ZTogU3BhblN0YXR1cyk6IHRoaXMge1xuICAgIHRoaXMuc3RhdHVzID0gdmFsdWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXRIdHRwU3RhdHVzKGh0dHBTdGF0dXM6IG51bWJlcik6IHRoaXMge1xuICAgIHRoaXMuc2V0VGFnKCdodHRwLnN0YXR1c19jb2RlJywgU3RyaW5nKGh0dHBTdGF0dXMpKTtcbiAgICBjb25zdCBzcGFuU3RhdHVzID0gU3BhblN0YXR1cy5mcm9tSHR0cENvZGUoaHR0cFN0YXR1cyk7XG4gICAgaWYgKHNwYW5TdGF0dXMgIT09IFNwYW5TdGF0dXMuVW5rbm93bkVycm9yKSB7XG4gICAgICB0aGlzLnNldFN0YXR1cyhzcGFuU3RhdHVzKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBpc1N1Y2Nlc3MoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3RhdHVzID09PSBTcGFuU3RhdHVzLk9rO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgZmluaXNoKGVuZFRpbWVzdGFtcD86IG51bWJlcik6IHZvaWQge1xuICAgIHRoaXMuZW5kVGltZXN0YW1wID0gdHlwZW9mIGVuZFRpbWVzdGFtcCA9PT0gJ251bWJlcicgPyBlbmRUaW1lc3RhbXAgOiB0aW1lc3RhbXBXaXRoTXMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHRvVHJhY2VwYXJlbnQoKTogc3RyaW5nIHtcbiAgICBsZXQgc2FtcGxlZFN0cmluZyA9ICcnO1xuICAgIGlmICh0aGlzLnNhbXBsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2FtcGxlZFN0cmluZyA9IHRoaXMuc2FtcGxlZCA/ICctMScgOiAnLTAnO1xuICAgIH1cbiAgICByZXR1cm4gYCR7dGhpcy50cmFjZUlkfS0ke3RoaXMuc3BhbklkfSR7c2FtcGxlZFN0cmluZ31gO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgdG9Db250ZXh0KCk6IFNwYW5Db250ZXh0IHtcbiAgICByZXR1cm4gZHJvcFVuZGVmaW5lZEtleXMoe1xuICAgICAgZGF0YTogdGhpcy5kYXRhLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBlbmRUaW1lc3RhbXA6IHRoaXMuZW5kVGltZXN0YW1wLFxuICAgICAgb3A6IHRoaXMub3AsXG4gICAgICBwYXJlbnRTcGFuSWQ6IHRoaXMucGFyZW50U3BhbklkLFxuICAgICAgc2FtcGxlZDogdGhpcy5zYW1wbGVkLFxuICAgICAgc3BhbklkOiB0aGlzLnNwYW5JZCxcbiAgICAgIHN0YXJ0VGltZXN0YW1wOiB0aGlzLnN0YXJ0VGltZXN0YW1wLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIHRhZ3M6IHRoaXMudGFncyxcbiAgICAgIHRyYWNlSWQ6IHRoaXMudHJhY2VJZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHVwZGF0ZVdpdGhDb250ZXh0KHNwYW5Db250ZXh0OiBTcGFuQ29udGV4dCk6IHRoaXMge1xuICAgIHRoaXMuZGF0YSA9IHNwYW5Db250ZXh0LmRhdGEgPz8ge307XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IHNwYW5Db250ZXh0LmRlc2NyaXB0aW9uO1xuICAgIHRoaXMuZW5kVGltZXN0YW1wID0gc3BhbkNvbnRleHQuZW5kVGltZXN0YW1wO1xuICAgIHRoaXMub3AgPSBzcGFuQ29udGV4dC5vcDtcbiAgICB0aGlzLnBhcmVudFNwYW5JZCA9IHNwYW5Db250ZXh0LnBhcmVudFNwYW5JZDtcbiAgICB0aGlzLnNhbXBsZWQgPSBzcGFuQ29udGV4dC5zYW1wbGVkO1xuICAgIHRoaXMuc3BhbklkID0gc3BhbkNvbnRleHQuc3BhbklkID8/IHRoaXMuc3BhbklkO1xuICAgIHRoaXMuc3RhcnRUaW1lc3RhbXAgPSBzcGFuQ29udGV4dC5zdGFydFRpbWVzdGFtcCA/PyB0aGlzLnN0YXJ0VGltZXN0YW1wO1xuICAgIHRoaXMuc3RhdHVzID0gc3BhbkNvbnRleHQuc3RhdHVzO1xuICAgIHRoaXMudGFncyA9IHNwYW5Db250ZXh0LnRhZ3MgPz8ge307XG4gICAgdGhpcy50cmFjZUlkID0gc3BhbkNvbnRleHQudHJhY2VJZCA/PyB0aGlzLnRyYWNlSWQ7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGdldFRyYWNlQ29udGV4dCgpOiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBkYXRhPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBvcD86IHN0cmluZztcbiAgICBwYXJlbnRfc3Bhbl9pZD86IHN0cmluZztcbiAgICBzcGFuX2lkOiBzdHJpbmc7XG4gICAgc3RhdHVzPzogc3RyaW5nO1xuICAgIHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IFByaW1pdGl2ZSB9O1xuICAgIHRyYWNlX2lkOiBzdHJpbmc7XG4gIH0ge1xuICAgIHJldHVybiBkcm9wVW5kZWZpbmVkS2V5cyh7XG4gICAgICBkYXRhOiBPYmplY3Qua2V5cyh0aGlzLmRhdGEpLmxlbmd0aCA+IDAgPyB0aGlzLmRhdGEgOiB1bmRlZmluZWQsXG4gICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgIG9wOiB0aGlzLm9wLFxuICAgICAgcGFyZW50X3NwYW5faWQ6IHRoaXMucGFyZW50U3BhbklkLFxuICAgICAgc3Bhbl9pZDogdGhpcy5zcGFuSWQsXG4gICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgdGFnczogT2JqZWN0LmtleXModGhpcy50YWdzKS5sZW5ndGggPiAwID8gdGhpcy50YWdzIDogdW5kZWZpbmVkLFxuICAgICAgdHJhY2VfaWQ6IHRoaXMudHJhY2VJZCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHRvSlNPTigpOiB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBkYXRhPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICBvcD86IHN0cmluZztcbiAgICBwYXJlbnRfc3Bhbl9pZD86IHN0cmluZztcbiAgICBzcGFuX2lkOiBzdHJpbmc7XG4gICAgc3RhcnRfdGltZXN0YW1wOiBudW1iZXI7XG4gICAgc3RhdHVzPzogc3RyaW5nO1xuICAgIHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IFByaW1pdGl2ZSB9O1xuICAgIHRpbWVzdGFtcD86IG51bWJlcjtcbiAgICB0cmFjZV9pZDogc3RyaW5nO1xuICB9IHtcbiAgICByZXR1cm4gZHJvcFVuZGVmaW5lZEtleXMoe1xuICAgICAgZGF0YTogT2JqZWN0LmtleXModGhpcy5kYXRhKS5sZW5ndGggPiAwID8gdGhpcy5kYXRhIDogdW5kZWZpbmVkLFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBvcDogdGhpcy5vcCxcbiAgICAgIHBhcmVudF9zcGFuX2lkOiB0aGlzLnBhcmVudFNwYW5JZCxcbiAgICAgIHNwYW5faWQ6IHRoaXMuc3BhbklkLFxuICAgICAgc3RhcnRfdGltZXN0YW1wOiB0aGlzLnN0YXJ0VGltZXN0YW1wLFxuICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgIHRhZ3M6IE9iamVjdC5rZXlzKHRoaXMudGFncykubGVuZ3RoID4gMCA/IHRoaXMudGFncyA6IHVuZGVmaW5lZCxcbiAgICAgIHRpbWVzdGFtcDogdGhpcy5lbmRUaW1lc3RhbXAsXG4gICAgICB0cmFjZV9pZDogdGhpcy50cmFjZUlkLFxuICAgIH0pO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgZ2V0Q3VycmVudEh1YiwgSHViIH0gZnJvbSAnQHNlbnRyeS9odWInO1xuaW1wb3J0IHtcbiAgRXZlbnQsXG4gIE1lYXN1cmVtZW50cyxcbiAgT3V0Y29tZSxcbiAgVHJhbnNhY3Rpb24gYXMgVHJhbnNhY3Rpb25JbnRlcmZhY2UsXG4gIFRyYW5zYWN0aW9uQ29udGV4dCxcbiAgVHJhbnNhY3Rpb25NZXRhZGF0YSxcbn0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBkcm9wVW5kZWZpbmVkS2V5cywgaXNJbnN0YW5jZU9mLCBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuaW1wb3J0IHsgU3BhbiBhcyBTcGFuQ2xhc3MsIFNwYW5SZWNvcmRlciB9IGZyb20gJy4vc3Bhbic7XG5cbi8qKiBKU0RvYyAqL1xuZXhwb3J0IGNsYXNzIFRyYW5zYWN0aW9uIGV4dGVuZHMgU3BhbkNsYXNzIGltcGxlbWVudHMgVHJhbnNhY3Rpb25JbnRlcmZhY2Uge1xuICBwdWJsaWMgbmFtZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBtZXRhZGF0YTogVHJhbnNhY3Rpb25NZXRhZGF0YTtcblxuICBwcml2YXRlIF9tZWFzdXJlbWVudHM6IE1lYXN1cmVtZW50cyA9IHt9O1xuXG4gIC8qKlxuICAgKiBUaGUgcmVmZXJlbmNlIHRvIHRoZSBjdXJyZW50IGh1Yi5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2h1YjogSHViID0gKGdldEN1cnJlbnRIdWIoKSBhcyB1bmtub3duKSBhcyBIdWI7XG5cbiAgcHJpdmF0ZSBfdHJpbUVuZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoaXMgY29uc3RydWN0b3Igc2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBtYW51YWxseS4gVGhvc2UgaW5zdHJ1bWVudGluZyB0cmFjaW5nIHNob3VsZCB1c2VcbiAgICogYFNlbnRyeS5zdGFydFRyYW5zYWN0aW9uKClgLCBhbmQgaW50ZXJuYWwgbWV0aG9kcyBzaG91bGQgdXNlIGBodWIuc3RhcnRUcmFuc2FjdGlvbigpYC5cbiAgICogQGludGVybmFsXG4gICAqIEBoaWRlY29uc3RydWN0b3JcbiAgICogQGhpZGRlblxuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHRyYW5zYWN0aW9uQ29udGV4dDogVHJhbnNhY3Rpb25Db250ZXh0LCBodWI/OiBIdWIpIHtcbiAgICBzdXBlcih0cmFuc2FjdGlvbkNvbnRleHQpO1xuXG4gICAgaWYgKGlzSW5zdGFuY2VPZihodWIsIEh1YikpIHtcbiAgICAgIHRoaXMuX2h1YiA9IGh1YiBhcyBIdWI7XG4gICAgfVxuXG4gICAgdGhpcy5uYW1lID0gdHJhbnNhY3Rpb25Db250ZXh0Lm5hbWUgfHwgJyc7XG5cbiAgICB0aGlzLm1ldGFkYXRhID0gdHJhbnNhY3Rpb25Db250ZXh0Lm1ldGFkYXRhIHx8IHt9O1xuICAgIHRoaXMuX3RyaW1FbmQgPSB0cmFuc2FjdGlvbkNvbnRleHQudHJpbUVuZDtcblxuICAgIC8vIHRoaXMgaXMgYmVjYXVzZSB0cmFuc2FjdGlvbnMgYXJlIGFsc28gc3BhbnMsIGFuZCBzcGFucyBoYXZlIGEgdHJhbnNhY3Rpb24gcG9pbnRlclxuICAgIHRoaXMudHJhbnNhY3Rpb24gPSB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEpTRG9jXG4gICAqL1xuICBwdWJsaWMgc2V0TmFtZShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaGVzIFNwYW5SZWNvcmRlciB0byB0aGUgc3BhbiBpdHNlbGZcbiAgICogQHBhcmFtIG1heGxlbiBtYXhpbXVtIG51bWJlciBvZiBzcGFucyB0aGF0IGNhbiBiZSByZWNvcmRlZFxuICAgKi9cbiAgcHVibGljIGluaXRTcGFuUmVjb3JkZXIobWF4bGVuOiBudW1iZXIgPSAxMDAwKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNwYW5SZWNvcmRlcikge1xuICAgICAgdGhpcy5zcGFuUmVjb3JkZXIgPSBuZXcgU3BhblJlY29yZGVyKG1heGxlbik7XG4gICAgfVxuICAgIHRoaXMuc3BhblJlY29yZGVyLmFkZCh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgb2JzZXJ2ZWQgbWVhc3VyZW1lbnRzIGZvciB0aGlzIHRyYW5zYWN0aW9uLlxuICAgKiBAaGlkZGVuXG4gICAqL1xuICBwdWJsaWMgc2V0TWVhc3VyZW1lbnRzKG1lYXN1cmVtZW50czogTWVhc3VyZW1lbnRzKTogdm9pZCB7XG4gICAgdGhpcy5fbWVhc3VyZW1lbnRzID0geyAuLi5tZWFzdXJlbWVudHMgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgbWV0YWRhdGEgZm9yIHRoaXMgdHJhbnNhY3Rpb24uXG4gICAqIEBoaWRkZW5cbiAgICovXG4gIHB1YmxpYyBzZXRNZXRhZGF0YShuZXdNZXRhZGF0YTogVHJhbnNhY3Rpb25NZXRhZGF0YSk6IHZvaWQge1xuICAgIHRoaXMubWV0YWRhdGEgPSB7IC4uLnRoaXMubWV0YWRhdGEsIC4uLm5ld01ldGFkYXRhIH07XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBmaW5pc2goZW5kVGltZXN0YW1wPzogbnVtYmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAvLyBUaGlzIHRyYW5zYWN0aW9uIGlzIGFscmVhZHkgZmluaXNoZWQsIHNvIHdlIHNob3VsZCBub3QgZmx1c2ggaXQgYWdhaW4uXG4gICAgaWYgKHRoaXMuZW5kVGltZXN0YW1wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm5hbWUpIHtcbiAgICAgIGxvZ2dlci53YXJuKCdUcmFuc2FjdGlvbiBoYXMgbm8gbmFtZSwgZmFsbGluZyBiYWNrIHRvIGA8dW5sYWJlbGVkIHRyYW5zYWN0aW9uPmAuJyk7XG4gICAgICB0aGlzLm5hbWUgPSAnPHVubGFiZWxlZCB0cmFuc2FjdGlvbj4nO1xuICAgIH1cblxuICAgIC8vIGp1c3Qgc2V0cyB0aGUgZW5kIHRpbWVzdGFtcFxuICAgIHN1cGVyLmZpbmlzaChlbmRUaW1lc3RhbXApO1xuXG4gICAgaWYgKHRoaXMuc2FtcGxlZCAhPT0gdHJ1ZSkge1xuICAgICAgLy8gQXQgdGhpcyBwb2ludCBpZiBgc2FtcGxlZCAhPT0gdHJ1ZWAgd2Ugd2FudCB0byBkaXNjYXJkIHRoZSB0cmFuc2FjdGlvbi5cbiAgICAgIGxvZ2dlci5sb2coJ1tUcmFjaW5nXSBEaXNjYXJkaW5nIHRyYW5zYWN0aW9uIGJlY2F1c2UgaXRzIHRyYWNlIHdhcyBub3QgY2hvc2VuIHRvIGJlIHNhbXBsZWQuJyk7XG5cbiAgICAgIHRoaXMuX2h1YlxuICAgICAgICAuZ2V0Q2xpZW50KClcbiAgICAgICAgPy5nZXRUcmFuc3BvcnQ/LigpXG4gICAgICAgIC5yZWNvcmRMb3N0RXZlbnQ/LihPdXRjb21lLlNhbXBsZVJhdGUsICd0cmFuc2FjdGlvbicpO1xuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmlzaGVkU3BhbnMgPSB0aGlzLnNwYW5SZWNvcmRlciA/IHRoaXMuc3BhblJlY29yZGVyLnNwYW5zLmZpbHRlcihzID0+IHMgIT09IHRoaXMgJiYgcy5lbmRUaW1lc3RhbXApIDogW107XG5cbiAgICBpZiAodGhpcy5fdHJpbUVuZCAmJiBmaW5pc2hlZFNwYW5zLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZW5kVGltZXN0YW1wID0gZmluaXNoZWRTcGFucy5yZWR1Y2UoKHByZXY6IFNwYW5DbGFzcywgY3VycmVudDogU3BhbkNsYXNzKSA9PiB7XG4gICAgICAgIGlmIChwcmV2LmVuZFRpbWVzdGFtcCAmJiBjdXJyZW50LmVuZFRpbWVzdGFtcCkge1xuICAgICAgICAgIHJldHVybiBwcmV2LmVuZFRpbWVzdGFtcCA+IGN1cnJlbnQuZW5kVGltZXN0YW1wID8gcHJldiA6IGN1cnJlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICB9KS5lbmRUaW1lc3RhbXA7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNhY3Rpb246IEV2ZW50ID0ge1xuICAgICAgY29udGV4dHM6IHtcbiAgICAgICAgdHJhY2U6IHRoaXMuZ2V0VHJhY2VDb250ZXh0KCksXG4gICAgICB9LFxuICAgICAgc3BhbnM6IGZpbmlzaGVkU3BhbnMsXG4gICAgICBzdGFydF90aW1lc3RhbXA6IHRoaXMuc3RhcnRUaW1lc3RhbXAsXG4gICAgICB0YWdzOiB0aGlzLnRhZ3MsXG4gICAgICB0aW1lc3RhbXA6IHRoaXMuZW5kVGltZXN0YW1wLFxuICAgICAgdHJhbnNhY3Rpb246IHRoaXMubmFtZSxcbiAgICAgIHR5cGU6ICd0cmFuc2FjdGlvbicsXG4gICAgICBkZWJ1Z19tZXRhOiB0aGlzLm1ldGFkYXRhLFxuICAgIH07XG5cbiAgICBjb25zdCBoYXNNZWFzdXJlbWVudHMgPSBPYmplY3Qua2V5cyh0aGlzLl9tZWFzdXJlbWVudHMpLmxlbmd0aCA+IDA7XG5cbiAgICBpZiAoaGFzTWVhc3VyZW1lbnRzKSB7XG4gICAgICBsb2dnZXIubG9nKCdbTWVhc3VyZW1lbnRzXSBBZGRpbmcgbWVhc3VyZW1lbnRzIHRvIHRyYW5zYWN0aW9uJywgSlNPTi5zdHJpbmdpZnkodGhpcy5fbWVhc3VyZW1lbnRzLCB1bmRlZmluZWQsIDIpKTtcbiAgICAgIHRyYW5zYWN0aW9uLm1lYXN1cmVtZW50cyA9IHRoaXMuX21lYXN1cmVtZW50cztcbiAgICB9XG5cbiAgICBsb2dnZXIubG9nKGBbVHJhY2luZ10gRmluaXNoaW5nICR7dGhpcy5vcH0gdHJhbnNhY3Rpb246ICR7dGhpcy5uYW1lfS5gKTtcblxuICAgIHJldHVybiB0aGlzLl9odWIuY2FwdHVyZUV2ZW50KHRyYW5zYWN0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHRvQ29udGV4dCgpOiBUcmFuc2FjdGlvbkNvbnRleHQge1xuICAgIGNvbnN0IHNwYW5Db250ZXh0ID0gc3VwZXIudG9Db250ZXh0KCk7XG5cbiAgICByZXR1cm4gZHJvcFVuZGVmaW5lZEtleXMoe1xuICAgICAgLi4uc3BhbkNvbnRleHQsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICB0cmltRW5kOiB0aGlzLl90cmltRW5kLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgdXBkYXRlV2l0aENvbnRleHQodHJhbnNhY3Rpb25Db250ZXh0OiBUcmFuc2FjdGlvbkNvbnRleHQpOiB0aGlzIHtcbiAgICBzdXBlci51cGRhdGVXaXRoQ29udGV4dCh0cmFuc2FjdGlvbkNvbnRleHQpO1xuXG4gICAgdGhpcy5uYW1lID0gdHJhbnNhY3Rpb25Db250ZXh0Lm5hbWUgPz8gJyc7XG5cbiAgICB0aGlzLl90cmltRW5kID0gdHJhbnNhY3Rpb25Db250ZXh0LnRyaW1FbmQ7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxufVxuIiwgImltcG9ydCB7IEh1YiB9IGZyb20gJ0BzZW50cnkvaHViJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uQ29udGV4dCB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgbG9nZ2VyLCB0aW1lc3RhbXBXaXRoTXMgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuaW1wb3J0IHsgRklOSVNIX1JFQVNPTl9UQUcsIElETEVfVFJBTlNBQ1RJT05fRklOSVNIX1JFQVNPTlMgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBTcGFuLCBTcGFuUmVjb3JkZXIgfSBmcm9tICcuL3NwYW4nO1xuaW1wb3J0IHsgU3BhblN0YXR1cyB9IGZyb20gJy4vc3BhbnN0YXR1cyc7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuXG5leHBvcnQgY29uc3QgREVGQVVMVF9JRExFX1RJTUVPVVQgPSAxMDAwO1xuZXhwb3J0IGNvbnN0IEhFQVJUQkVBVF9JTlRFUlZBTCA9IDUwMDA7XG5cbi8qKlxuICogQGluaGVyaXREb2NcbiAqL1xuZXhwb3J0IGNsYXNzIElkbGVUcmFuc2FjdGlvblNwYW5SZWNvcmRlciBleHRlbmRzIFNwYW5SZWNvcmRlciB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IF9wdXNoQWN0aXZpdHk6IChpZDogc3RyaW5nKSA9PiB2b2lkLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX3BvcEFjdGl2aXR5OiAoaWQ6IHN0cmluZykgPT4gdm9pZCxcbiAgICBwdWJsaWMgdHJhbnNhY3Rpb25TcGFuSWQ6IHN0cmluZyA9ICcnLFxuICAgIG1heGxlbj86IG51bWJlcixcbiAgKSB7XG4gICAgc3VwZXIobWF4bGVuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGFkZChzcGFuOiBTcGFuKTogdm9pZCB7XG4gICAgLy8gV2Ugc2hvdWxkIG1ha2Ugc3VyZSB3ZSBkbyBub3QgcHVzaCBhbmQgcG9wIGFjdGl2aXRpZXMgZm9yXG4gICAgLy8gdGhlIHRyYW5zYWN0aW9uIHRoYXQgdGhpcyBzcGFuIHJlY29yZGVyIGJlbG9uZ3MgdG8uXG4gICAgaWYgKHNwYW4uc3BhbklkICE9PSB0aGlzLnRyYW5zYWN0aW9uU3BhbklkKSB7XG4gICAgICAvLyBXZSBwYXRjaCBzcGFuLmZpbmlzaCgpIHRvIHBvcCBhbiBhY3Rpdml0eSBhZnRlciBzZXR0aW5nIGFuIGVuZFRpbWVzdGFtcC5cbiAgICAgIHNwYW4uZmluaXNoID0gKGVuZFRpbWVzdGFtcD86IG51bWJlcikgPT4ge1xuICAgICAgICBzcGFuLmVuZFRpbWVzdGFtcCA9IHR5cGVvZiBlbmRUaW1lc3RhbXAgPT09ICdudW1iZXInID8gZW5kVGltZXN0YW1wIDogdGltZXN0YW1wV2l0aE1zKCk7XG4gICAgICAgIHRoaXMuX3BvcEFjdGl2aXR5KHNwYW4uc3BhbklkKTtcbiAgICAgIH07XG5cbiAgICAgIC8vIFdlIHNob3VsZCBvbmx5IHB1c2ggbmV3IGFjdGl2aXRpZXMgaWYgdGhlIHNwYW4gZG9lcyBub3QgaGF2ZSBhbiBlbmQgdGltZXN0YW1wLlxuICAgICAgaWYgKHNwYW4uZW5kVGltZXN0YW1wID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fcHVzaEFjdGl2aXR5KHNwYW4uc3BhbklkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzdXBlci5hZGQoc3Bhbik7XG4gIH1cbn1cblxuZXhwb3J0IHR5cGUgQmVmb3JlRmluaXNoQ2FsbGJhY2sgPSAodHJhbnNhY3Rpb25TcGFuOiBJZGxlVHJhbnNhY3Rpb24sIGVuZFRpbWVzdGFtcDogbnVtYmVyKSA9PiB2b2lkO1xuXG4vKipcbiAqIEFuIElkbGVUcmFuc2FjdGlvbiBpcyBhIHRyYW5zYWN0aW9uIHRoYXQgYXV0b21hdGljYWxseSBmaW5pc2hlcy4gSXQgZG9lcyB0aGlzIGJ5IHRyYWNraW5nIGNoaWxkIHNwYW5zIGFzIGFjdGl2aXRpZXMuXG4gKiBZb3UgY2FuIGhhdmUgbXVsdGlwbGUgSWRsZVRyYW5zYWN0aW9ucyBhY3RpdmUsIGJ1dCBpZiB0aGUgYG9uU2NvcGVgIG9wdGlvbiBpcyBzcGVjaWZpZWQsIHRoZSBpZGxlIHRyYW5zYWN0aW9uIHdpbGxcbiAqIHB1dCBpdHNlbGYgb24gdGhlIHNjb3BlIG9uIGNyZWF0aW9uLlxuICovXG5leHBvcnQgY2xhc3MgSWRsZVRyYW5zYWN0aW9uIGV4dGVuZHMgVHJhbnNhY3Rpb24ge1xuICAvLyBBY3Rpdml0aWVzIHN0b3JlIGEgbGlzdCBvZiBhY3RpdmUgc3BhbnNcbiAgcHVibGljIGFjdGl2aXRpZXM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+ID0ge307XG5cbiAgLy8gVHJhY2sgc3RhdGUgb2YgYWN0aXZpdGllcyBpbiBwcmV2aW91cyBoZWFydGJlYXRcbiAgcHJpdmF0ZSBfcHJldkhlYXJ0YmVhdFN0cmluZzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIC8vIEFtb3VudCBvZiB0aW1lcyBoZWFydGJlYXQgaGFzIGNvdW50ZWQuIFdpbGwgY2F1c2UgdHJhbnNhY3Rpb24gdG8gZmluaXNoIGFmdGVyIDMgYmVhdHMuXG4gIHByaXZhdGUgX2hlYXJ0YmVhdENvdW50ZXI6IG51bWJlciA9IDA7XG5cbiAgLy8gV2Ugc2hvdWxkIG5vdCB1c2UgaGVhcnRiZWF0IGlmIHdlIGZpbmlzaGVkIGEgdHJhbnNhY3Rpb25cbiAgcHJpdmF0ZSBfZmluaXNoZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9iZWZvcmVGaW5pc2hDYWxsYmFja3M6IEJlZm9yZUZpbmlzaENhbGxiYWNrW10gPSBbXTtcblxuICAvKipcbiAgICogSWYgYSB0cmFuc2FjdGlvbiBpcyBjcmVhdGVkIGFuZCBubyBhY3Rpdml0aWVzIGFyZSBhZGRlZCwgd2Ugd2FudCB0byBtYWtlIHN1cmUgdGhhdFxuICAgKiBpdCB0aW1lcyBvdXQgcHJvcGVybHkuIFRoaXMgaXMgY2xlYXJlZCBhbmQgbm90IHVzZWQgd2hlbiBhY3Rpdml0aWVzIGFyZSBhZGRlZC5cbiAgICovXG4gIHByaXZhdGUgX2luaXRUaW1lb3V0OiBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PiB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgdHJhbnNhY3Rpb25Db250ZXh0OiBUcmFuc2FjdGlvbkNvbnRleHQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBfaWRsZUh1Yj86IEh1YixcbiAgICAvKipcbiAgICAgKiBUaGUgdGltZSB0byB3YWl0IGluIG1zIHVudGlsIHRoZSBpZGxlIHRyYW5zYWN0aW9uIHdpbGwgYmUgZmluaXNoZWQuXG4gICAgICogQGRlZmF1bHQgMTAwMFxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX2lkbGVUaW1lb3V0OiBudW1iZXIgPSBERUZBVUxUX0lETEVfVElNRU9VVCxcbiAgICAvLyBJZiBhbiBpZGxlIHRyYW5zYWN0aW9uIHNob3VsZCBiZSBwdXQgaXRzZWxmIG9uIGFuZCBvZmYgdGhlIHNjb3BlIGF1dG9tYXRpY2FsbHkuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfb25TY29wZTogYm9vbGVhbiA9IGZhbHNlLFxuICApIHtcbiAgICBzdXBlcih0cmFuc2FjdGlvbkNvbnRleHQsIF9pZGxlSHViKTtcblxuICAgIGlmIChfaWRsZUh1YiAmJiBfb25TY29wZSkge1xuICAgICAgLy8gVGhlcmUgc2hvdWxkIG9ubHkgYmUgb25lIGFjdGl2ZSB0cmFuc2FjdGlvbiBvbiB0aGUgc2NvcGVcbiAgICAgIGNsZWFyQWN0aXZlVHJhbnNhY3Rpb24oX2lkbGVIdWIpO1xuXG4gICAgICAvLyBXZSBzZXQgdGhlIHRyYW5zYWN0aW9uIGhlcmUgb24gdGhlIHNjb3BlIHNvIGVycm9yIGV2ZW50cyBwaWNrIHVwIHRoZSB0cmFjZVxuICAgICAgLy8gY29udGV4dCBhbmQgYXR0YWNoIGl0IHRvIHRoZSBlcnJvci5cbiAgICAgIGxvZ2dlci5sb2coYFNldHRpbmcgaWRsZSB0cmFuc2FjdGlvbiBvbiBzY29wZS4gU3BhbiBJRDogJHt0aGlzLnNwYW5JZH1gKTtcbiAgICAgIF9pZGxlSHViLmNvbmZpZ3VyZVNjb3BlKHNjb3BlID0+IHNjb3BlLnNldFNwYW4odGhpcykpO1xuICAgIH1cblxuICAgIHRoaXMuX2luaXRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuX2ZpbmlzaGVkKSB7XG4gICAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5faWRsZVRpbWVvdXQpO1xuICB9XG5cbiAgLyoqIHtAaW5oZXJpdERvY30gKi9cbiAgcHVibGljIGZpbmlzaChlbmRUaW1lc3RhbXA6IG51bWJlciA9IHRpbWVzdGFtcFdpdGhNcygpKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICB0aGlzLl9maW5pc2hlZCA9IHRydWU7XG4gICAgdGhpcy5hY3Rpdml0aWVzID0ge307XG5cbiAgICBpZiAodGhpcy5zcGFuUmVjb3JkZXIpIHtcbiAgICAgIGxvZ2dlci5sb2coJ1tUcmFjaW5nXSBmaW5pc2hpbmcgSWRsZVRyYW5zYWN0aW9uJywgbmV3IERhdGUoZW5kVGltZXN0YW1wICogMTAwMCkudG9JU09TdHJpbmcoKSwgdGhpcy5vcCk7XG5cbiAgICAgIGZvciAoY29uc3QgY2FsbGJhY2sgb2YgdGhpcy5fYmVmb3JlRmluaXNoQ2FsbGJhY2tzKSB7XG4gICAgICAgIGNhbGxiYWNrKHRoaXMsIGVuZFRpbWVzdGFtcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3BhblJlY29yZGVyLnNwYW5zID0gdGhpcy5zcGFuUmVjb3JkZXIuc3BhbnMuZmlsdGVyKChzcGFuOiBTcGFuKSA9PiB7XG4gICAgICAgIC8vIElmIHdlIGFyZSBkZWFsaW5nIHdpdGggdGhlIHRyYW5zYWN0aW9uIGl0c2VsZiwgd2UganVzdCByZXR1cm4gaXRcbiAgICAgICAgaWYgKHNwYW4uc3BhbklkID09PSB0aGlzLnNwYW5JZCkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV2UgY2FuY2VsIGFsbCBwZW5kaW5nIHNwYW5zIHdpdGggc3RhdHVzIFwiY2FuY2VsbGVkXCIgdG8gaW5kaWNhdGUgdGhlIGlkbGUgdHJhbnNhY3Rpb24gd2FzIGZpbmlzaGVkIGVhcmx5XG4gICAgICAgIGlmICghc3Bhbi5lbmRUaW1lc3RhbXApIHtcbiAgICAgICAgICBzcGFuLmVuZFRpbWVzdGFtcCA9IGVuZFRpbWVzdGFtcDtcbiAgICAgICAgICBzcGFuLnNldFN0YXR1cyhTcGFuU3RhdHVzLkNhbmNlbGxlZCk7XG4gICAgICAgICAgbG9nZ2VyLmxvZygnW1RyYWNpbmddIGNhbmNlbGxpbmcgc3BhbiBzaW5jZSB0cmFuc2FjdGlvbiBlbmRlZCBlYXJseScsIEpTT04uc3RyaW5naWZ5KHNwYW4sIHVuZGVmaW5lZCwgMikpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qga2VlcFNwYW4gPSBzcGFuLnN0YXJ0VGltZXN0YW1wIDwgZW5kVGltZXN0YW1wO1xuICAgICAgICBpZiAoIWtlZXBTcGFuKSB7XG4gICAgICAgICAgbG9nZ2VyLmxvZyhcbiAgICAgICAgICAgICdbVHJhY2luZ10gZGlzY2FyZGluZyBTcGFuIHNpbmNlIGl0IGhhcHBlbmVkIGFmdGVyIFRyYW5zYWN0aW9uIHdhcyBmaW5pc2hlZCcsXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeShzcGFuLCB1bmRlZmluZWQsIDIpLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGtlZXBTcGFuO1xuICAgICAgfSk7XG5cbiAgICAgIGxvZ2dlci5sb2coJ1tUcmFjaW5nXSBmbHVzaGluZyBJZGxlVHJhbnNhY3Rpb24nKTtcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nZ2VyLmxvZygnW1RyYWNpbmddIE5vIGFjdGl2ZSBJZGxlVHJhbnNhY3Rpb24nKTtcbiAgICB9XG5cbiAgICAvLyB0aGlzLl9vblNjb3BlIGlzIHRydWUgaWYgdGhlIHRyYW5zYWN0aW9uIHdhcyBwcmV2aW91c2x5IG9uIHRoZSBzY29wZS5cbiAgICBpZiAodGhpcy5fb25TY29wZSkge1xuICAgICAgY2xlYXJBY3RpdmVUcmFuc2FjdGlvbih0aGlzLl9pZGxlSHViKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIuZmluaXNoKGVuZFRpbWVzdGFtcCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGdldHMgZXhjZWN1dGVkIGJlZm9yZSB0aGUgdHJhbnNhY3Rpb24gZmluaXNoZXMuXG4gICAqIFVzZWZ1bCBmb3IgY2xlYW51cCBvciBpZiB5b3Ugd2FudCB0byBhZGQgYW55IGFkZGl0aW9uYWwgc3BhbnMgYmFzZWQgb24gY3VycmVudCBjb250ZXh0LlxuICAgKlxuICAgKiBUaGlzIGlzIGV4cG9zZWQgYmVjYXVzZSB1c2VycyBoYXZlIG5vIG90aGVyIHdheSBvZiBydW5uaW5nIHNvbWV0aGluZyBiZWZvcmUgYW4gaWRsZSB0cmFuc2FjdGlvblxuICAgKiBmaW5pc2hlcy5cbiAgICovXG4gIHB1YmxpYyByZWdpc3RlckJlZm9yZUZpbmlzaENhbGxiYWNrKGNhbGxiYWNrOiBCZWZvcmVGaW5pc2hDYWxsYmFjayk6IHZvaWQge1xuICAgIHRoaXMuX2JlZm9yZUZpbmlzaENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGluaXRTcGFuUmVjb3JkZXIobWF4bGVuPzogbnVtYmVyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnNwYW5SZWNvcmRlcikge1xuICAgICAgY29uc3QgcHVzaEFjdGl2aXR5ID0gKGlkOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX2ZpbmlzaGVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3B1c2hBY3Rpdml0eShpZCk7XG4gICAgICB9O1xuICAgICAgY29uc3QgcG9wQWN0aXZpdHkgPSAoaWQ6IHN0cmluZyk6IHZvaWQgPT4ge1xuICAgICAgICBpZiAodGhpcy5fZmluaXNoZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fcG9wQWN0aXZpdHkoaWQpO1xuICAgICAgfTtcblxuICAgICAgdGhpcy5zcGFuUmVjb3JkZXIgPSBuZXcgSWRsZVRyYW5zYWN0aW9uU3BhblJlY29yZGVyKHB1c2hBY3Rpdml0eSwgcG9wQWN0aXZpdHksIHRoaXMuc3BhbklkLCBtYXhsZW4pO1xuXG4gICAgICAvLyBTdGFydCBoZWFydGJlYXQgc28gdGhhdCB0cmFuc2FjdGlvbnMgZG8gbm90IHJ1biBmb3JldmVyLlxuICAgICAgbG9nZ2VyLmxvZygnU3RhcnRpbmcgaGVhcnRiZWF0Jyk7XG4gICAgICB0aGlzLl9waW5nSGVhcnRiZWF0KCk7XG4gICAgfVxuICAgIHRoaXMuc3BhblJlY29yZGVyLmFkZCh0aGlzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdGFydCB0cmFja2luZyBhIHNwZWNpZmljIGFjdGl2aXR5LlxuICAgKiBAcGFyYW0gc3BhbklkIFRoZSBzcGFuIGlkIHRoYXQgcmVwcmVzZW50cyB0aGUgYWN0aXZpdHlcbiAgICovXG4gIHByaXZhdGUgX3B1c2hBY3Rpdml0eShzcGFuSWQ6IHN0cmluZyk6IHZvaWQge1xuICAgIGlmICh0aGlzLl9pbml0VGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX2luaXRUaW1lb3V0KTtcbiAgICAgIHRoaXMuX2luaXRUaW1lb3V0ID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBsb2dnZXIubG9nKGBbVHJhY2luZ10gcHVzaEFjdGl2aXR5OiAke3NwYW5JZH1gKTtcbiAgICB0aGlzLmFjdGl2aXRpZXNbc3BhbklkXSA9IHRydWU7XG4gICAgbG9nZ2VyLmxvZygnW1RyYWNpbmddIG5ldyBhY3Rpdml0aWVzIGNvdW50JywgT2JqZWN0LmtleXModGhpcy5hY3Rpdml0aWVzKS5sZW5ndGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBhY3Rpdml0eSBmcm9tIHVzYWdlXG4gICAqIEBwYXJhbSBzcGFuSWQgVGhlIHNwYW4gaWQgdGhhdCByZXByZXNlbnRzIHRoZSBhY3Rpdml0eVxuICAgKi9cbiAgcHJpdmF0ZSBfcG9wQWN0aXZpdHkoc3BhbklkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5hY3Rpdml0aWVzW3NwYW5JZF0pIHtcbiAgICAgIGxvZ2dlci5sb2coYFtUcmFjaW5nXSBwb3BBY3Rpdml0eSAke3NwYW5JZH1gKTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGVcbiAgICAgIGRlbGV0ZSB0aGlzLmFjdGl2aXRpZXNbc3BhbklkXTtcbiAgICAgIGxvZ2dlci5sb2coJ1tUcmFjaW5nXSBuZXcgYWN0aXZpdGllcyBjb3VudCcsIE9iamVjdC5rZXlzKHRoaXMuYWN0aXZpdGllcykubGVuZ3RoKTtcbiAgICB9XG5cbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5hY3Rpdml0aWVzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN0IHRpbWVvdXQgPSB0aGlzLl9pZGxlVGltZW91dDtcbiAgICAgIC8vIFdlIG5lZWQgdG8gYWRkIHRoZSB0aW1lb3V0IGhlcmUgdG8gaGF2ZSB0aGUgcmVhbCBlbmR0aW1lc3RhbXAgb2YgdGhlIHRyYW5zYWN0aW9uXG4gICAgICAvLyBSZW1lbWJlciB0aW1lc3RhbXBXaXRoTXMgaXMgaW4gc2Vjb25kcywgdGltZW91dCBpcyBpbiBtc1xuICAgICAgY29uc3QgZW5kID0gdGltZXN0YW1wV2l0aE1zKCkgKyB0aW1lb3V0IC8gMTAwMDtcblxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5fZmluaXNoZWQpIHtcbiAgICAgICAgICB0aGlzLnNldFRhZyhGSU5JU0hfUkVBU09OX1RBRywgSURMRV9UUkFOU0FDVElPTl9GSU5JU0hfUkVBU09OU1sxXSk7XG4gICAgICAgICAgdGhpcy5maW5pc2goZW5kKTtcbiAgICAgICAgfVxuICAgICAgfSwgdGltZW91dCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyB3aGVuIGVudHJpZXMgb2YgdGhpcy5hY3Rpdml0aWVzIGFyZSBub3QgY2hhbmdpbmcgZm9yIDMgYmVhdHMuXG4gICAqIElmIHRoaXMgb2NjdXJzIHdlIGZpbmlzaCB0aGUgdHJhbnNhY3Rpb24uXG4gICAqL1xuICBwcml2YXRlIF9iZWF0KCk6IHZvaWQge1xuICAgIC8vIFdlIHNob3VsZCBub3QgYmUgcnVubmluZyBoZWFydGJlYXQgaWYgdGhlIGlkbGUgdHJhbnNhY3Rpb24gaXMgZmluaXNoZWQuXG4gICAgaWYgKHRoaXMuX2ZpbmlzaGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgaGVhcnRiZWF0U3RyaW5nID0gT2JqZWN0LmtleXModGhpcy5hY3Rpdml0aWVzKS5qb2luKCcnKTtcblxuICAgIGlmIChoZWFydGJlYXRTdHJpbmcgPT09IHRoaXMuX3ByZXZIZWFydGJlYXRTdHJpbmcpIHtcbiAgICAgIHRoaXMuX2hlYXJ0YmVhdENvdW50ZXIgKz0gMTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faGVhcnRiZWF0Q291bnRlciA9IDE7XG4gICAgfVxuXG4gICAgdGhpcy5fcHJldkhlYXJ0YmVhdFN0cmluZyA9IGhlYXJ0YmVhdFN0cmluZztcblxuICAgIGlmICh0aGlzLl9oZWFydGJlYXRDb3VudGVyID49IDMpIHtcbiAgICAgIGxvZ2dlci5sb2coYFtUcmFjaW5nXSBUcmFuc2FjdGlvbiBmaW5pc2hlZCBiZWNhdXNlIG9mIG5vIGNoYW5nZSBmb3IgMyBoZWFydCBiZWF0c2ApO1xuICAgICAgdGhpcy5zZXRTdGF0dXMoU3BhblN0YXR1cy5EZWFkbGluZUV4Y2VlZGVkKTtcbiAgICAgIHRoaXMuc2V0VGFnKEZJTklTSF9SRUFTT05fVEFHLCBJRExFX1RSQU5TQUNUSU9OX0ZJTklTSF9SRUFTT05TWzBdKTtcbiAgICAgIHRoaXMuZmluaXNoKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3BpbmdIZWFydGJlYXQoKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUGluZ3MgdGhlIGhlYXJ0YmVhdFxuICAgKi9cbiAgcHJpdmF0ZSBfcGluZ0hlYXJ0YmVhdCgpOiB2b2lkIHtcbiAgICBsb2dnZXIubG9nKGBwaW5naW5nIEhlYXJ0YmVhdCAtPiBjdXJyZW50IGNvdW50ZXI6ICR7dGhpcy5faGVhcnRiZWF0Q291bnRlcn1gKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuX2JlYXQoKTtcbiAgICB9LCBIRUFSVEJFQVRfSU5URVJWQUwpO1xuICB9XG59XG5cbi8qKlxuICogUmVzZXQgYWN0aXZlIHRyYW5zYWN0aW9uIG9uIHNjb3BlXG4gKi9cbmZ1bmN0aW9uIGNsZWFyQWN0aXZlVHJhbnNhY3Rpb24oaHViPzogSHViKTogdm9pZCB7XG4gIGlmIChodWIpIHtcbiAgICBjb25zdCBzY29wZSA9IGh1Yi5nZXRTY29wZSgpO1xuICAgIGlmIChzY29wZSkge1xuICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSBzY29wZS5nZXRUcmFuc2FjdGlvbigpO1xuICAgICAgaWYgKHRyYW5zYWN0aW9uKSB7XG4gICAgICAgIHNjb3BlLnNldFNwYW4odW5kZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBnZXRNYWluQ2FycmllciwgSHViIH0gZnJvbSAnQHNlbnRyeS9odWInO1xuaW1wb3J0IHtcbiAgQ3VzdG9tU2FtcGxpbmdDb250ZXh0LFxuICBJbnRlZ3JhdGlvbixcbiAgSW50ZWdyYXRpb25DbGFzcyxcbiAgT3B0aW9ucyxcbiAgU2FtcGxpbmdDb250ZXh0LFxuICBUcmFuc2FjdGlvbkNvbnRleHQsXG4gIFRyYW5zYWN0aW9uU2FtcGxpbmdNZXRob2QsXG59IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgZHluYW1pY1JlcXVpcmUsIGlzTm9kZUVudiwgbG9hZE1vZHVsZSwgbG9nZ2VyIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmltcG9ydCB7IHJlZ2lzdGVyRXJyb3JJbnN0cnVtZW50YXRpb24gfSBmcm9tICcuL2Vycm9ycyc7XG5pbXBvcnQgeyBJZGxlVHJhbnNhY3Rpb24gfSBmcm9tICcuL2lkbGV0cmFuc2FjdGlvbic7XG5pbXBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgaGFzVHJhY2luZ0VuYWJsZWQgfSBmcm9tICcuL3V0aWxzJztcblxuLyoqIFJldHVybnMgYWxsIHRyYWNlIGhlYWRlcnMgdGhhdCBhcmUgY3VycmVudGx5IG9uIHRoZSB0b3Agc2NvcGUuICovXG5mdW5jdGlvbiB0cmFjZUhlYWRlcnModGhpczogSHViKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSB7XG4gIGNvbnN0IHNjb3BlID0gdGhpcy5nZXRTY29wZSgpO1xuICBpZiAoc2NvcGUpIHtcbiAgICBjb25zdCBzcGFuID0gc2NvcGUuZ2V0U3BhbigpO1xuICAgIGlmIChzcGFuKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAnc2VudHJ5LXRyYWNlJzogc3Bhbi50b1RyYWNlcGFyZW50KCksXG4gICAgICB9O1xuICAgIH1cbiAgfVxuICByZXR1cm4ge307XG59XG5cbi8qKlxuICogTWFrZXMgYSBzYW1wbGluZyBkZWNpc2lvbiBmb3IgdGhlIGdpdmVuIHRyYW5zYWN0aW9uIGFuZCBzdG9yZXMgaXQgb24gdGhlIHRyYW5zYWN0aW9uLlxuICpcbiAqIENhbGxlZCBldmVyeSB0aW1lIGEgdHJhbnNhY3Rpb24gaXMgY3JlYXRlZC4gT25seSB0cmFuc2FjdGlvbnMgd2hpY2ggZW1lcmdlIHdpdGggYSBgc2FtcGxlZGAgdmFsdWUgb2YgYHRydWVgIHdpbGwgYmVcbiAqIHNlbnQgdG8gU2VudHJ5LlxuICpcbiAqIEBwYXJhbSBodWI6IFRoZSBodWIgb2ZmIG9mIHdoaWNoIHRvIHJlYWQgY29uZmlnIG9wdGlvbnNcbiAqIEBwYXJhbSB0cmFuc2FjdGlvbjogVGhlIHRyYW5zYWN0aW9uIG5lZWRpbmcgYSBzYW1wbGluZyBkZWNpc2lvblxuICogQHBhcmFtIHNhbXBsaW5nQ29udGV4dDogRGVmYXVsdCBhbmQgdXNlci1wcm92aWRlZCBkYXRhIHdoaWNoIG1heSBiZSB1c2VkIHRvIGhlbHAgbWFrZSB0aGUgZGVjaXNpb25cbiAqXG4gKiBAcmV0dXJucyBUaGUgZ2l2ZW4gdHJhbnNhY3Rpb24gd2l0aCBpdHMgYHNhbXBsZWRgIHZhbHVlIHNldFxuICovXG5mdW5jdGlvbiBzYW1wbGU8VCBleHRlbmRzIFRyYW5zYWN0aW9uPih0cmFuc2FjdGlvbjogVCwgb3B0aW9uczogT3B0aW9ucywgc2FtcGxpbmdDb250ZXh0OiBTYW1wbGluZ0NvbnRleHQpOiBUIHtcbiAgLy8gbm90aGluZyB0byBkbyBpZiB0cmFjaW5nIGlzIG5vdCBlbmFibGVkXG4gIGlmICghaGFzVHJhY2luZ0VuYWJsZWQob3B0aW9ucykpIHtcbiAgICB0cmFuc2FjdGlvbi5zYW1wbGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLy8gaWYgdGhlIHVzZXIgaGFzIGZvcmNlZCBhIHNhbXBsaW5nIGRlY2lzaW9uIGJ5IHBhc3NpbmcgYSBgc2FtcGxlZGAgdmFsdWUgaW4gdGhlaXIgdHJhbnNhY3Rpb24gY29udGV4dCwgZ28gd2l0aCB0aGF0XG4gIGlmICh0cmFuc2FjdGlvbi5zYW1wbGVkICE9PSB1bmRlZmluZWQpIHtcbiAgICB0cmFuc2FjdGlvbi5zZXRNZXRhZGF0YSh7XG4gICAgICB0cmFuc2FjdGlvblNhbXBsaW5nOiB7IG1ldGhvZDogVHJhbnNhY3Rpb25TYW1wbGluZ01ldGhvZC5FeHBsaWNpdCB9LFxuICAgIH0pO1xuICAgIHJldHVybiB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIC8vIHdlIHdvdWxkIGhhdmUgYmFpbGVkIGFscmVhZHkgaWYgbmVpdGhlciBgdHJhY2VzU2FtcGxlcmAgbm9yIGB0cmFjZXNTYW1wbGVSYXRlYCB3ZXJlIGRlZmluZWQsIHNvIG9uZSBvZiB0aGVzZSBzaG91bGRcbiAgLy8gd29yazsgcHJlZmVyIHRoZSBob29rIGlmIHNvXG4gIGxldCBzYW1wbGVSYXRlO1xuICBpZiAodHlwZW9mIG9wdGlvbnMudHJhY2VzU2FtcGxlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHNhbXBsZVJhdGUgPSBvcHRpb25zLnRyYWNlc1NhbXBsZXIoc2FtcGxpbmdDb250ZXh0KTtcbiAgICB0cmFuc2FjdGlvbi5zZXRNZXRhZGF0YSh7XG4gICAgICB0cmFuc2FjdGlvblNhbXBsaW5nOiB7XG4gICAgICAgIG1ldGhvZDogVHJhbnNhY3Rpb25TYW1wbGluZ01ldGhvZC5TYW1wbGVyLFxuICAgICAgICAvLyBjYXN0IHRvIG51bWJlciBpbiBjYXNlIGl0J3MgYSBib29sZWFuXG4gICAgICAgIHJhdGU6IE51bWJlcihzYW1wbGVSYXRlKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH0gZWxzZSBpZiAoc2FtcGxpbmdDb250ZXh0LnBhcmVudFNhbXBsZWQgIT09IHVuZGVmaW5lZCkge1xuICAgIHNhbXBsZVJhdGUgPSBzYW1wbGluZ0NvbnRleHQucGFyZW50U2FtcGxlZDtcbiAgICB0cmFuc2FjdGlvbi5zZXRNZXRhZGF0YSh7XG4gICAgICB0cmFuc2FjdGlvblNhbXBsaW5nOiB7IG1ldGhvZDogVHJhbnNhY3Rpb25TYW1wbGluZ01ldGhvZC5Jbmhlcml0YW5jZSB9LFxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIHNhbXBsZVJhdGUgPSBvcHRpb25zLnRyYWNlc1NhbXBsZVJhdGU7XG4gICAgdHJhbnNhY3Rpb24uc2V0TWV0YWRhdGEoe1xuICAgICAgdHJhbnNhY3Rpb25TYW1wbGluZzoge1xuICAgICAgICBtZXRob2Q6IFRyYW5zYWN0aW9uU2FtcGxpbmdNZXRob2QuUmF0ZSxcbiAgICAgICAgLy8gY2FzdCB0byBudW1iZXIgaW4gY2FzZSBpdCdzIGEgYm9vbGVhblxuICAgICAgICByYXRlOiBOdW1iZXIoc2FtcGxlUmF0ZSksXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgLy8gU2luY2UgdGhpcyBpcyBjb21pbmcgZnJvbSB0aGUgdXNlciAob3IgZnJvbSBhIGZ1bmN0aW9uIHByb3ZpZGVkIGJ5IHRoZSB1c2VyKSwgd2hvIGtub3dzIHdoYXQgd2UgbWlnaHQgZ2V0LiAoVGhlXG4gIC8vIG9ubHkgdmFsaWQgdmFsdWVzIGFyZSBib29sZWFucyBvciBudW1iZXJzIGJldHdlZW4gMCBhbmQgMS4pXG4gIGlmICghaXNWYWxpZFNhbXBsZVJhdGUoc2FtcGxlUmF0ZSkpIHtcbiAgICBsb2dnZXIud2FybihgW1RyYWNpbmddIERpc2NhcmRpbmcgdHJhbnNhY3Rpb24gYmVjYXVzZSBvZiBpbnZhbGlkIHNhbXBsZSByYXRlLmApO1xuICAgIHRyYW5zYWN0aW9uLnNhbXBsZWQgPSBmYWxzZTtcbiAgICByZXR1cm4gdHJhbnNhY3Rpb247XG4gIH1cblxuICAvLyBpZiB0aGUgZnVuY3Rpb24gcmV0dXJuZWQgMCAob3IgZmFsc2UpLCBvciBpZiBgdHJhY2VzU2FtcGxlUmF0ZWAgaXMgMCwgaXQncyBhIHNpZ24gdGhlIHRyYW5zYWN0aW9uIHNob3VsZCBiZSBkcm9wcGVkXG4gIGlmICghc2FtcGxlUmF0ZSkge1xuICAgIGxvZ2dlci5sb2coXG4gICAgICBgW1RyYWNpbmddIERpc2NhcmRpbmcgdHJhbnNhY3Rpb24gYmVjYXVzZSAke1xuICAgICAgICB0eXBlb2Ygb3B0aW9ucy50cmFjZXNTYW1wbGVyID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgPyAndHJhY2VzU2FtcGxlciByZXR1cm5lZCAwIG9yIGZhbHNlJ1xuICAgICAgICAgIDogJ2EgbmVnYXRpdmUgc2FtcGxpbmcgZGVjaXNpb24gd2FzIGluaGVyaXRlZCBvciB0cmFjZXNTYW1wbGVSYXRlIGlzIHNldCB0byAwJ1xuICAgICAgfWAsXG4gICAgKTtcbiAgICB0cmFuc2FjdGlvbi5zYW1wbGVkID0gZmFsc2U7XG4gICAgcmV0dXJuIHRyYW5zYWN0aW9uO1xuICB9XG5cbiAgLy8gTm93IHdlIHJvbGwgdGhlIGRpY2UuIE1hdGgucmFuZG9tIGlzIGluY2x1c2l2ZSBvZiAwLCBidXQgbm90IG9mIDEsIHNvIHN0cmljdCA8IGlzIHNhZmUgaGVyZS4gSW4gY2FzZSBzYW1wbGVSYXRlIGlzXG4gIC8vIGEgYm9vbGVhbiwgdGhlIDwgY29tcGFyaXNvbiB3aWxsIGNhdXNlIGl0IHRvIGJlIGF1dG9tYXRpY2FsbHkgY2FzdCB0byAxIGlmIGl0J3MgdHJ1ZSBhbmQgMCBpZiBpdCdzIGZhbHNlLlxuICB0cmFuc2FjdGlvbi5zYW1wbGVkID0gTWF0aC5yYW5kb20oKSA8IChzYW1wbGVSYXRlIGFzIG51bWJlciB8IGJvb2xlYW4pO1xuXG4gIC8vIGlmIHdlJ3JlIG5vdCBnb2luZyB0byBrZWVwIGl0LCB3ZSdyZSBkb25lXG4gIGlmICghdHJhbnNhY3Rpb24uc2FtcGxlZCkge1xuICAgIGxvZ2dlci5sb2coXG4gICAgICBgW1RyYWNpbmddIERpc2NhcmRpbmcgdHJhbnNhY3Rpb24gYmVjYXVzZSBpdCdzIG5vdCBpbmNsdWRlZCBpbiB0aGUgcmFuZG9tIHNhbXBsZSAoc2FtcGxpbmcgcmF0ZSA9ICR7TnVtYmVyKFxuICAgICAgICBzYW1wbGVSYXRlLFxuICAgICAgKX0pYCxcbiAgICApO1xuICAgIHJldHVybiB0cmFuc2FjdGlvbjtcbiAgfVxuXG4gIGxvZ2dlci5sb2coYFtUcmFjaW5nXSBzdGFydGluZyAke3RyYW5zYWN0aW9uLm9wfSB0cmFuc2FjdGlvbiAtICR7dHJhbnNhY3Rpb24ubmFtZX1gKTtcbiAgcmV0dXJuIHRyYW5zYWN0aW9uO1xufVxuXG4vKipcbiAqIENoZWNrcyB0aGUgZ2l2ZW4gc2FtcGxlIHJhdGUgdG8gbWFrZSBzdXJlIGl0IGlzIHZhbGlkIHR5cGUgYW5kIHZhbHVlIChhIGJvb2xlYW4sIG9yIGEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMSkuXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRTYW1wbGVSYXRlKHJhdGU6IHVua25vd24pOiBib29sZWFuIHtcbiAgLy8gd2UgbmVlZCB0byBjaGVjayBOYU4gZXhwbGljaXRseSBiZWNhdXNlIGl0J3Mgb2YgdHlwZSAnbnVtYmVyJyBhbmQgdGhlcmVmb3JlIHdvdWxkbid0IGdldCBjYXVnaHQgYnkgdGhpcyB0eXBlY2hlY2tcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgaWYgKGlzTmFOKHJhdGUgYXMgYW55KSB8fCAhKHR5cGVvZiByYXRlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgcmF0ZSA9PT0gJ2Jvb2xlYW4nKSkge1xuICAgIGxvZ2dlci53YXJuKFxuICAgICAgYFtUcmFjaW5nXSBHaXZlbiBzYW1wbGUgcmF0ZSBpcyBpbnZhbGlkLiBTYW1wbGUgcmF0ZSBtdXN0IGJlIGEgYm9vbGVhbiBvciBhIG51bWJlciBiZXR3ZWVuIDAgYW5kIDEuIEdvdCAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICByYXRlLFxuICAgICAgKX0gb2YgdHlwZSAke0pTT04uc3RyaW5naWZ5KHR5cGVvZiByYXRlKX0uYCxcbiAgICApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIC8vIGluIGNhc2Ugc2FtcGxlUmF0ZSBpcyBhIGJvb2xlYW4sIGl0IHdpbGwgZ2V0IGF1dG9tYXRpY2FsbHkgY2FzdCB0byAxIGlmIGl0J3MgdHJ1ZSBhbmQgMCBpZiBpdCdzIGZhbHNlXG4gIGlmIChyYXRlIDwgMCB8fCByYXRlID4gMSkge1xuICAgIGxvZ2dlci53YXJuKGBbVHJhY2luZ10gR2l2ZW4gc2FtcGxlIHJhdGUgaXMgaW52YWxpZC4gU2FtcGxlIHJhdGUgbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDEuIEdvdCAke3JhdGV9LmApO1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHRyYW5zYWN0aW9uIGFuZCBhZGRzIGEgc2FtcGxpbmcgZGVjaXNpb24gaWYgaXQgZG9lc24ndCB5ZXQgaGF2ZSBvbmUuXG4gKlxuICogVGhlIEh1Yi5zdGFydFRyYW5zYWN0aW9uIG1ldGhvZCBkZWxlZ2F0ZXMgdG8gdGhpcyBtZXRob2QgdG8gZG8gaXRzIHdvcmssIHBhc3NpbmcgdGhlIEh1YiBpbnN0YW5jZSBpbiBhcyBgdGhpc2AsIGFzIGlmXG4gKiBpdCBoYWQgYmVlbiBjYWxsZWQgb24gdGhlIGh1YiBkaXJlY3RseS4gRXhpc3RzIGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24gc28gdGhhdCBpdCBjYW4gYmUgaW5qZWN0ZWQgaW50byB0aGUgY2xhc3MgYXMgYW5cbiAqIFwiZXh0ZW5zaW9uIG1ldGhvZC5cIlxuICpcbiAqIEBwYXJhbSB0aGlzOiBUaGUgSHViIHN0YXJ0aW5nIHRoZSB0cmFuc2FjdGlvblxuICogQHBhcmFtIHRyYW5zYWN0aW9uQ29udGV4dDogRGF0YSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgdHJhbnNhY3Rpb25cbiAqIEBwYXJhbSBDdXN0b21TYW1wbGluZ0NvbnRleHQ6IE9wdGlvbmFsIGRhdGEgdG8gYmUgcHJvdmlkZWQgdG8gdGhlIGB0cmFjZXNTYW1wbGVyYCBmdW5jdGlvbiAoaWYgYW55KVxuICpcbiAqIEByZXR1cm5zIFRoZSBuZXcgdHJhbnNhY3Rpb25cbiAqXG4gKiBAc2VlIHtAbGluayBIdWIuc3RhcnRUcmFuc2FjdGlvbn1cbiAqL1xuZnVuY3Rpb24gX3N0YXJ0VHJhbnNhY3Rpb24oXG4gIHRoaXM6IEh1YixcbiAgdHJhbnNhY3Rpb25Db250ZXh0OiBUcmFuc2FjdGlvbkNvbnRleHQsXG4gIGN1c3RvbVNhbXBsaW5nQ29udGV4dD86IEN1c3RvbVNhbXBsaW5nQ29udGV4dCxcbik6IFRyYW5zYWN0aW9uIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHRoaXMuZ2V0Q2xpZW50KCk/LmdldE9wdGlvbnMoKSB8fCB7fTtcblxuICBsZXQgdHJhbnNhY3Rpb24gPSBuZXcgVHJhbnNhY3Rpb24odHJhbnNhY3Rpb25Db250ZXh0LCB0aGlzKTtcbiAgdHJhbnNhY3Rpb24gPSBzYW1wbGUodHJhbnNhY3Rpb24sIG9wdGlvbnMsIHtcbiAgICBwYXJlbnRTYW1wbGVkOiB0cmFuc2FjdGlvbkNvbnRleHQucGFyZW50U2FtcGxlZCxcbiAgICB0cmFuc2FjdGlvbkNvbnRleHQsXG4gICAgLi4uY3VzdG9tU2FtcGxpbmdDb250ZXh0LFxuICB9KTtcbiAgaWYgKHRyYW5zYWN0aW9uLnNhbXBsZWQpIHtcbiAgICB0cmFuc2FjdGlvbi5pbml0U3BhblJlY29yZGVyKG9wdGlvbnMuX2V4cGVyaW1lbnRzPy5tYXhTcGFucyBhcyBudW1iZXIpO1xuICB9XG4gIHJldHVybiB0cmFuc2FjdGlvbjtcbn1cblxuLyoqXG4gKiBDcmVhdGUgbmV3IGlkbGUgdHJhbnNhY3Rpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzdGFydElkbGVUcmFuc2FjdGlvbihcbiAgaHViOiBIdWIsXG4gIHRyYW5zYWN0aW9uQ29udGV4dDogVHJhbnNhY3Rpb25Db250ZXh0LFxuICBpZGxlVGltZW91dD86IG51bWJlcixcbiAgb25TY29wZT86IGJvb2xlYW4sXG4gIGN1c3RvbVNhbXBsaW5nQ29udGV4dD86IEN1c3RvbVNhbXBsaW5nQ29udGV4dCxcbik6IElkbGVUcmFuc2FjdGlvbiB7XG4gIGNvbnN0IG9wdGlvbnMgPSBodWIuZ2V0Q2xpZW50KCk/LmdldE9wdGlvbnMoKSB8fCB7fTtcblxuICBsZXQgdHJhbnNhY3Rpb24gPSBuZXcgSWRsZVRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uQ29udGV4dCwgaHViLCBpZGxlVGltZW91dCwgb25TY29wZSk7XG4gIHRyYW5zYWN0aW9uID0gc2FtcGxlKHRyYW5zYWN0aW9uLCBvcHRpb25zLCB7XG4gICAgcGFyZW50U2FtcGxlZDogdHJhbnNhY3Rpb25Db250ZXh0LnBhcmVudFNhbXBsZWQsXG4gICAgdHJhbnNhY3Rpb25Db250ZXh0LFxuICAgIC4uLmN1c3RvbVNhbXBsaW5nQ29udGV4dCxcbiAgfSk7XG4gIGlmICh0cmFuc2FjdGlvbi5zYW1wbGVkKSB7XG4gICAgdHJhbnNhY3Rpb24uaW5pdFNwYW5SZWNvcmRlcihvcHRpb25zLl9leHBlcmltZW50cz8ubWF4U3BhbnMgYXMgbnVtYmVyKTtcbiAgfVxuICByZXR1cm4gdHJhbnNhY3Rpb247XG59XG5cbi8qKlxuICogQHByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9hZGRUcmFjaW5nRXh0ZW5zaW9ucygpOiB2b2lkIHtcbiAgY29uc3QgY2FycmllciA9IGdldE1haW5DYXJyaWVyKCk7XG4gIGlmICghY2Fycmllci5fX1NFTlRSWV9fKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNhcnJpZXIuX19TRU5UUllfXy5leHRlbnNpb25zID0gY2Fycmllci5fX1NFTlRSWV9fLmV4dGVuc2lvbnMgfHwge307XG4gIGlmICghY2Fycmllci5fX1NFTlRSWV9fLmV4dGVuc2lvbnMuc3RhcnRUcmFuc2FjdGlvbikge1xuICAgIGNhcnJpZXIuX19TRU5UUllfXy5leHRlbnNpb25zLnN0YXJ0VHJhbnNhY3Rpb24gPSBfc3RhcnRUcmFuc2FjdGlvbjtcbiAgfVxuICBpZiAoIWNhcnJpZXIuX19TRU5UUllfXy5leHRlbnNpb25zLnRyYWNlSGVhZGVycykge1xuICAgIGNhcnJpZXIuX19TRU5UUllfXy5leHRlbnNpb25zLnRyYWNlSGVhZGVycyA9IHRyYWNlSGVhZGVycztcbiAgfVxufVxuXG4vKipcbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIF9hdXRvbG9hZERhdGFiYXNlSW50ZWdyYXRpb25zKCk6IHZvaWQge1xuICBjb25zdCBjYXJyaWVyID0gZ2V0TWFpbkNhcnJpZXIoKTtcbiAgaWYgKCFjYXJyaWVyLl9fU0VOVFJZX18pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwYWNrYWdlVG9JbnRlZ3JhdGlvbk1hcHBpbmc6IFJlY29yZDxzdHJpbmcsICgpID0+IEludGVncmF0aW9uPiA9IHtcbiAgICBtb25nb2RiKCkge1xuICAgICAgY29uc3QgaW50ZWdyYXRpb24gPSBkeW5hbWljUmVxdWlyZShtb2R1bGUsICcuL2ludGVncmF0aW9ucy9ub2RlL21vbmdvJykgYXMge1xuICAgICAgICBNb25nbzogSW50ZWdyYXRpb25DbGFzczxJbnRlZ3JhdGlvbj47XG4gICAgICB9O1xuICAgICAgcmV0dXJuIG5ldyBpbnRlZ3JhdGlvbi5Nb25nbygpO1xuICAgIH0sXG4gICAgbW9uZ29vc2UoKSB7XG4gICAgICBjb25zdCBpbnRlZ3JhdGlvbiA9IGR5bmFtaWNSZXF1aXJlKG1vZHVsZSwgJy4vaW50ZWdyYXRpb25zL25vZGUvbW9uZ28nKSBhcyB7XG4gICAgICAgIE1vbmdvOiBJbnRlZ3JhdGlvbkNsYXNzPEludGVncmF0aW9uPjtcbiAgICAgIH07XG4gICAgICByZXR1cm4gbmV3IGludGVncmF0aW9uLk1vbmdvKHsgbW9uZ29vc2U6IHRydWUgfSk7XG4gICAgfSxcbiAgICBteXNxbCgpIHtcbiAgICAgIGNvbnN0IGludGVncmF0aW9uID0gZHluYW1pY1JlcXVpcmUobW9kdWxlLCAnLi9pbnRlZ3JhdGlvbnMvbm9kZS9teXNxbCcpIGFzIHtcbiAgICAgICAgTXlzcWw6IEludGVncmF0aW9uQ2xhc3M8SW50ZWdyYXRpb24+O1xuICAgICAgfTtcbiAgICAgIHJldHVybiBuZXcgaW50ZWdyYXRpb24uTXlzcWwoKTtcbiAgICB9LFxuICAgIHBnKCkge1xuICAgICAgY29uc3QgaW50ZWdyYXRpb24gPSBkeW5hbWljUmVxdWlyZShtb2R1bGUsICcuL2ludGVncmF0aW9ucy9ub2RlL3Bvc3RncmVzJykgYXMge1xuICAgICAgICBQb3N0Z3JlczogSW50ZWdyYXRpb25DbGFzczxJbnRlZ3JhdGlvbj47XG4gICAgICB9O1xuICAgICAgcmV0dXJuIG5ldyBpbnRlZ3JhdGlvbi5Qb3N0Z3JlcygpO1xuICAgIH0sXG4gIH07XG5cbiAgY29uc3QgbWFwcGVkUGFja2FnZXMgPSBPYmplY3Qua2V5cyhwYWNrYWdlVG9JbnRlZ3JhdGlvbk1hcHBpbmcpXG4gICAgLmZpbHRlcihtb2R1bGVOYW1lID0+ICEhbG9hZE1vZHVsZShtb2R1bGVOYW1lKSlcbiAgICAubWFwKHBrZyA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcGFja2FnZVRvSW50ZWdyYXRpb25NYXBwaW5nW3BrZ10oKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9KVxuICAgIC5maWx0ZXIocCA9PiBwKSBhcyBJbnRlZ3JhdGlvbltdO1xuXG4gIGlmIChtYXBwZWRQYWNrYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgY2Fycmllci5fX1NFTlRSWV9fLmludGVncmF0aW9ucyA9IFsuLi4oY2Fycmllci5fX1NFTlRSWV9fLmludGVncmF0aW9ucyB8fCBbXSksIC4uLm1hcHBlZFBhY2thZ2VzXTtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgcGF0Y2hlcyB0aGUgZ2xvYmFsIG9iamVjdCBhbmQgaW5qZWN0cyB0aGUgVHJhY2luZyBleHRlbnNpb25zIG1ldGhvZHNcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEV4dGVuc2lvbk1ldGhvZHMoKTogdm9pZCB7XG4gIF9hZGRUcmFjaW5nRXh0ZW5zaW9ucygpO1xuXG4gIC8vIERldGVjdCBhbmQgYXV0b21hdGljYWxseSBsb2FkIHNwZWNpZmllZCBpbnRlZ3JhdGlvbnMuXG4gIGlmIChpc05vZGVFbnYoKSkge1xuICAgIF9hdXRvbG9hZERhdGFiYXNlSW50ZWdyYXRpb25zKCk7XG4gIH1cblxuICAvLyBJZiBhbiBlcnJvciBoYXBwZW5zIGdsb2JhbGx5LCB3ZSBzaG91bGQgbWFrZSBzdXJlIHRyYW5zYWN0aW9uIHN0YXR1cyBpcyBzZXQgdG8gZXJyb3IuXG4gIHJlZ2lzdGVyRXJyb3JJbnN0cnVtZW50YXRpb24oKTtcbn1cbiIsICJpbXBvcnQgeyBJbnRlZ3JhdGlvbiwgVHJhbnNhY3Rpb24gfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG50eXBlIE1ldGhvZCA9XG4gIHwgJ2FsbCdcbiAgfCAnZ2V0J1xuICB8ICdwb3N0J1xuICB8ICdwdXQnXG4gIHwgJ2RlbGV0ZSdcbiAgfCAncGF0Y2gnXG4gIHwgJ29wdGlvbnMnXG4gIHwgJ2hlYWQnXG4gIHwgJ2NoZWNrb3V0J1xuICB8ICdjb3B5J1xuICB8ICdsb2NrJ1xuICB8ICdtZXJnZSdcbiAgfCAnbWthY3Rpdml0eSdcbiAgfCAnbWtjb2wnXG4gIHwgJ21vdmUnXG4gIHwgJ20tc2VhcmNoJ1xuICB8ICdub3RpZnknXG4gIHwgJ3B1cmdlJ1xuICB8ICdyZXBvcnQnXG4gIHwgJ3NlYXJjaCdcbiAgfCAnc3Vic2NyaWJlJ1xuICB8ICd0cmFjZSdcbiAgfCAndW5sb2NrJ1xuICB8ICd1bnN1YnNjcmliZSdcbiAgfCAndXNlJztcblxudHlwZSBSb3V0ZXIgPSB7XG4gIFttZXRob2QgaW4gTWV0aG9kXTogKC4uLmFyZ3M6IGFueSkgPT4gYW55OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn07XG5cbmludGVyZmFjZSBFeHByZXNzUmVzcG9uc2Uge1xuICBvbmNlKG5hbWU6IHN0cmluZywgY2FsbGJhY2s6ICgpID0+IHZvaWQpOiB2b2lkO1xufVxuXG4vKipcbiAqIEludGVybmFsIGhlbHBlciBmb3IgYF9fc2VudHJ5X3RyYW5zYWN0aW9uYFxuICogQGhpZGRlblxuICovXG5pbnRlcmZhY2UgU2VudHJ5VHJhY2luZ1Jlc3BvbnNlIHtcbiAgX19zZW50cnlfdHJhbnNhY3Rpb24/OiBUcmFuc2FjdGlvbjtcbn1cblxuLyoqXG4gKiBFeHByZXNzIGludGVncmF0aW9uXG4gKlxuICogUHJvdmlkZXMgYW4gcmVxdWVzdCBhbmQgZXJyb3IgaGFuZGxlciBmb3IgRXhwcmVzcyBmcmFtZXdvcmsgYXMgd2VsbCBhcyB0cmFjaW5nIGNhcGFiaWxpdGllc1xuICovXG5leHBvcnQgY2xhc3MgRXhwcmVzcyBpbXBsZW1lbnRzIEludGVncmF0aW9uIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlkOiBzdHJpbmcgPSAnRXhwcmVzcyc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbmFtZTogc3RyaW5nID0gRXhwcmVzcy5pZDtcblxuICAvKipcbiAgICogRXhwcmVzcyBBcHAgaW5zdGFuY2VcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3JvdXRlcj86IFJvdXRlcjtcbiAgcHJpdmF0ZSByZWFkb25seSBfbWV0aG9kcz86IE1ldGhvZFtdO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKG9wdGlvbnM6IHsgYXBwPzogUm91dGVyOyByb3V0ZXI/OiBSb3V0ZXI7IG1ldGhvZHM/OiBNZXRob2RbXSB9ID0ge30pIHtcbiAgICB0aGlzLl9yb3V0ZXIgPSBvcHRpb25zLnJvdXRlciB8fCBvcHRpb25zLmFwcDtcbiAgICB0aGlzLl9tZXRob2RzID0gKEFycmF5LmlzQXJyYXkob3B0aW9ucy5tZXRob2RzKSA/IG9wdGlvbnMubWV0aG9kcyA6IFtdKS5jb25jYXQoJ3VzZScpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0dXBPbmNlKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5fcm91dGVyKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0V4cHJlc3NJbnRlZ3JhdGlvbiBpcyBtaXNzaW5nIGFuIEV4cHJlc3MgaW5zdGFuY2UnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaW5zdHJ1bWVudE1pZGRsZXdhcmVzKHRoaXMuX3JvdXRlciwgdGhpcy5fbWV0aG9kcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBXcmFwcyBvcmlnaW5hbCBtaWRkbGV3YXJlIGZ1bmN0aW9uIGluIGEgdHJhY2luZyBjYWxsLCB3aGljaCBzdG9yZXMgdGhlIGluZm8gYWJvdXQgdGhlIGNhbGwgYXMgYSBzcGFuLFxuICogYW5kIGZpbmlzaGVzIGl0IG9uY2UgdGhlIG1pZGRsZXdhcmUgaXMgZG9uZSBpbnZva2luZy5cbiAqXG4gKiBFeHByZXNzIG1pZGRsZXdhcmVzIGhhdmUgMyB2YXJpb3VzIGZvcm1zLCB0aHVzIHdlIGhhdmUgdG8gdGFrZSBjYXJlIG9mIGFsbCBvZiB0aGVtOlxuICogLy8gc3luY1xuICogYXBwLnVzZShmdW5jdGlvbiAocmVxLCByZXMpIHsgLi4uIH0pXG4gKiAvLyBhc3luY1xuICogYXBwLnVzZShmdW5jdGlvbiAocmVxLCByZXMsIG5leHQpIHsgLi4uIH0pXG4gKiAvLyBlcnJvciBoYW5kbGVyXG4gKiBhcHAudXNlKGZ1bmN0aW9uIChlcnIsIHJlcSwgcmVzLCBuZXh0KSB7IC4uLiB9KVxuICpcbiAqIFRoZXkgYWxsIGludGVybmFsbHkgZGVsZWdhdGUgdG8gdGhlIGByb3V0ZXJbbWV0aG9kXWAgb2YgdGhlIGdpdmVuIGFwcGxpY2F0aW9uIGluc3RhbmNlLlxuICovXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlcywgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuZnVuY3Rpb24gd3JhcChmbjogRnVuY3Rpb24sIG1ldGhvZDogTWV0aG9kKTogKC4uLmFyZ3M6IGFueVtdKSA9PiB2b2lkIHtcbiAgY29uc3QgYXJpdHkgPSBmbi5sZW5ndGg7XG5cbiAgc3dpdGNoIChhcml0eSkge1xuICAgIGNhc2UgMjoge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKHRoaXM6IE5vZGVKUy5HbG9iYWwsIHJlcTogdW5rbm93biwgcmVzOiBFeHByZXNzUmVzcG9uc2UgJiBTZW50cnlUcmFjaW5nUmVzcG9uc2UpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSByZXMuX19zZW50cnlfdHJhbnNhY3Rpb247XG4gICAgICAgIGlmICh0cmFuc2FjdGlvbikge1xuICAgICAgICAgIGNvbnN0IHNwYW4gPSB0cmFuc2FjdGlvbi5zdGFydENoaWxkKHtcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBmbi5uYW1lLFxuICAgICAgICAgICAgb3A6IGBleHByZXNzLm1pZGRsZXdhcmUuJHttZXRob2R9YCxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXMub25jZSgnZmluaXNoJywgKCkgPT4ge1xuICAgICAgICAgICAgc3Bhbi5maW5pc2goKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCByZXEsIHJlcyk7XG4gICAgICB9O1xuICAgIH1cbiAgICBjYXNlIDM6IHtcbiAgICAgIHJldHVybiBmdW5jdGlvbihcbiAgICAgICAgdGhpczogTm9kZUpTLkdsb2JhbCxcbiAgICAgICAgcmVxOiB1bmtub3duLFxuICAgICAgICByZXM6IEV4cHJlc3NSZXNwb25zZSAmIFNlbnRyeVRyYWNpbmdSZXNwb25zZSxcbiAgICAgICAgbmV4dDogKCkgPT4gdm9pZCxcbiAgICAgICk6IHZvaWQge1xuICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IHJlcy5fX3NlbnRyeV90cmFuc2FjdGlvbjtcbiAgICAgICAgY29uc3Qgc3BhbiA9IHRyYW5zYWN0aW9uPy5zdGFydENoaWxkKHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogZm4ubmFtZSxcbiAgICAgICAgICBvcDogYGV4cHJlc3MubWlkZGxld2FyZS4ke21ldGhvZH1gLFxuICAgICAgICB9KTtcbiAgICAgICAgZm4uY2FsbCh0aGlzLCByZXEsIHJlcywgZnVuY3Rpb24odGhpczogTm9kZUpTLkdsb2JhbCwgLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgICAgICAgc3Bhbj8uZmluaXNoKCk7XG4gICAgICAgICAgbmV4dC5jYWxsKHRoaXMsIC4uLmFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfVxuICAgIGNhc2UgNDoge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uKFxuICAgICAgICB0aGlzOiBOb2RlSlMuR2xvYmFsLFxuICAgICAgICBlcnI6IEVycm9yLFxuICAgICAgICByZXE6IFJlcXVlc3QsXG4gICAgICAgIHJlczogUmVzcG9uc2UgJiBTZW50cnlUcmFjaW5nUmVzcG9uc2UsXG4gICAgICAgIG5leHQ6ICgpID0+IHZvaWQsXG4gICAgICApOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSByZXMuX19zZW50cnlfdHJhbnNhY3Rpb247XG4gICAgICAgIGNvbnN0IHNwYW4gPSB0cmFuc2FjdGlvbj8uc3RhcnRDaGlsZCh7XG4gICAgICAgICAgZGVzY3JpcHRpb246IGZuLm5hbWUsXG4gICAgICAgICAgb3A6IGBleHByZXNzLm1pZGRsZXdhcmUuJHttZXRob2R9YCxcbiAgICAgICAgfSk7XG4gICAgICAgIGZuLmNhbGwodGhpcywgZXJyLCByZXEsIHJlcywgZnVuY3Rpb24odGhpczogTm9kZUpTLkdsb2JhbCwgLi4uYXJnczogdW5rbm93bltdKTogdm9pZCB7XG4gICAgICAgICAgc3Bhbj8uZmluaXNoKCk7XG4gICAgICAgICAgbmV4dC5jYWxsKHRoaXMsIC4uLmFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfVxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwcmVzcyBtaWRkbGV3YXJlIHRha2VzIDItNCBhcmd1bWVudHMuIEdvdDogJHthcml0eX1gKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBUYWtlcyBhbGwgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIG9yaWdpbmFsIGBhcHBgIG9yIGByb3V0ZXJgIG1ldGhvZCwgZWcuIGBhcHAudXNlYCBvciBgcm91dGVyLnVzZWBcbiAqIGFuZCB3cmFwcyBldmVyeSBmdW5jdGlvbiwgYXMgd2VsbCBhcyBhcnJheSBvZiBmdW5jdGlvbnMgd2l0aCBhIGNhbGwgdG8gb3VyIGB3cmFwYCBtZXRob2QuXG4gKiBXZSBoYXZlIHRvIHRha2UgY2FyZSBvZiB0aGUgYXJyYXlzIGFzIHdlbGwgYXMgaXRlcmF0ZSBvdmVyIGFsbCBvZiB0aGUgYXJndW1lbnRzLFxuICogYXMgYGFwcC51c2VgIGNhbiBhY2NlcHQgbWlkZGxld2FyZXMgaW4gZmV3IHZhcmlvdXMgZm9ybXMuXG4gKlxuICogYXBwLnVzZShbPHBhdGg+XSwgPGZuPilcbiAqIGFwcC51c2UoWzxwYXRoPl0sIDxmbj4sIC4uLjxmbj4pXG4gKiBhcHAudXNlKFs8cGF0aD5dLCAuLi48Zm4+W10pXG4gKi9cbmZ1bmN0aW9uIHdyYXBNaWRkbGV3YXJlQXJncyhhcmdzOiB1bmtub3duW10sIG1ldGhvZDogTWV0aG9kKTogdW5rbm93bltdIHtcbiAgcmV0dXJuIGFyZ3MubWFwKChhcmc6IHVua25vd24pID0+IHtcbiAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHdyYXAoYXJnLCBtZXRob2QpO1xuICAgIH1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KGFyZykpIHtcbiAgICAgIHJldHVybiBhcmcubWFwKChhOiB1bmtub3duKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgYSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiB3cmFwKGEsIG1ldGhvZCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGE7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gYXJnO1xuICB9KTtcbn1cblxuLyoqXG4gKiBQYXRjaGVzIG9yaWdpbmFsIHJvdXRlciB0byB1dGlsaXplIG91ciB0cmFjaW5nIGZ1bmN0aW9uYWxpdHlcbiAqL1xuZnVuY3Rpb24gcGF0Y2hNaWRkbGV3YXJlKHJvdXRlcjogUm91dGVyLCBtZXRob2Q6IE1ldGhvZCk6IFJvdXRlciB7XG4gIGNvbnN0IG9yaWdpbmFsQ2FsbGJhY2sgPSByb3V0ZXJbbWV0aG9kXTtcblxuICByb3V0ZXJbbWV0aG9kXSA9IGZ1bmN0aW9uKC4uLmFyZ3M6IHVua25vd25bXSk6IHZvaWQge1xuICAgIHJldHVybiBvcmlnaW5hbENhbGxiYWNrLmNhbGwodGhpcywgLi4ud3JhcE1pZGRsZXdhcmVBcmdzKGFyZ3MsIG1ldGhvZCkpO1xuICB9O1xuXG4gIHJldHVybiByb3V0ZXI7XG59XG5cbi8qKlxuICogUGF0Y2hlcyBvcmlnaW5hbCByb3V0ZXIgbWV0aG9kc1xuICovXG5mdW5jdGlvbiBpbnN0cnVtZW50TWlkZGxld2FyZXMocm91dGVyOiBSb3V0ZXIsIG1ldGhvZHM6IE1ldGhvZFtdID0gW10pOiB2b2lkIHtcbiAgbWV0aG9kcy5mb3JFYWNoKChtZXRob2Q6IE1ldGhvZCkgPT4gcGF0Y2hNaWRkbGV3YXJlKHJvdXRlciwgbWV0aG9kKSk7XG59XG4iLCAiaW1wb3J0IHsgSHViIH0gZnJvbSAnQHNlbnRyeS9odWInO1xuaW1wb3J0IHsgRXZlbnRQcm9jZXNzb3IsIEludGVncmF0aW9uIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBmaWxsLCBpc1RoZW5hYmxlLCBsb2FkTW9kdWxlLCBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuaW50ZXJmYWNlIFBnQ2xpZW50IHtcbiAgcHJvdG90eXBlOiB7XG4gICAgcXVlcnk6ICgpID0+IHZvaWQgfCBQcm9taXNlPHVua25vd24+O1xuICB9O1xufVxuXG5pbnRlcmZhY2UgUGdPcHRpb25zIHtcbiAgdXNlUGdOYXRpdmU/OiBib29sZWFuO1xufVxuXG4vKiogVHJhY2luZyBpbnRlZ3JhdGlvbiBmb3Igbm9kZS1wb3N0Z3JlcyBwYWNrYWdlICovXG5leHBvcnQgY2xhc3MgUG9zdGdyZXMgaW1wbGVtZW50cyBJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpZDogc3RyaW5nID0gJ1Bvc3RncmVzJztcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSBQb3N0Z3Jlcy5pZDtcblxuICBwcml2YXRlIF91c2VQZ05hdGl2ZTogYm9vbGVhbjtcblxuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogUGdPcHRpb25zID0ge30pIHtcbiAgICB0aGlzLl91c2VQZ05hdGl2ZSA9ICEhb3B0aW9ucy51c2VQZ05hdGl2ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldHVwT25jZShfOiAoY2FsbGJhY2s6IEV2ZW50UHJvY2Vzc29yKSA9PiB2b2lkLCBnZXRDdXJyZW50SHViOiAoKSA9PiBIdWIpOiB2b2lkIHtcbiAgICBjb25zdCBwa2cgPSBsb2FkTW9kdWxlPHsgQ2xpZW50OiBQZ0NsaWVudDsgbmF0aXZlOiB7IENsaWVudDogUGdDbGllbnQgfSB9PigncGcnKTtcblxuICAgIGlmICghcGtnKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ1Bvc3RncmVzIEludGVncmF0aW9uIHdhcyB1bmFibGUgdG8gcmVxdWlyZSBgcGdgIHBhY2thZ2UuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3VzZVBnTmF0aXZlICYmICFwa2cubmF0aXZlPy5DbGllbnQpIHtcbiAgICAgIGxvZ2dlci5lcnJvcihgUG9zdGdyZXMgSW50ZWdyYXRpb24gd2FzIHVuYWJsZSB0byBhY2Nlc3MgJ3BnLW5hdGl2ZScgYmluZGluZ3MuYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgeyBDbGllbnQgfSA9IHRoaXMuX3VzZVBnTmF0aXZlID8gcGtnLm5hdGl2ZSA6IHBrZztcblxuICAgIC8qKlxuICAgICAqIGZ1bmN0aW9uIChxdWVyeSwgY2FsbGJhY2spID0+IHZvaWRcbiAgICAgKiBmdW5jdGlvbiAocXVlcnksIHBhcmFtcywgY2FsbGJhY2spID0+IHZvaWRcbiAgICAgKiBmdW5jdGlvbiAocXVlcnkpID0+IFByb21pc2VcbiAgICAgKiBmdW5jdGlvbiAocXVlcnksIHBhcmFtcykgPT4gUHJvbWlzZVxuICAgICAqIGZ1bmN0aW9uIChwZy5DdXJzb3IpID0+IHBnLkN1cnNvclxuICAgICAqL1xuICAgIGZpbGwoQ2xpZW50LnByb3RvdHlwZSwgJ3F1ZXJ5JywgZnVuY3Rpb24ob3JpZzogKCkgPT4gdm9pZCB8IFByb21pc2U8dW5rbm93bj4pIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbih0aGlzOiB1bmtub3duLCBjb25maWc6IHVua25vd24sIHZhbHVlczogdW5rbm93biwgY2FsbGJhY2s6IHVua25vd24pIHtcbiAgICAgICAgY29uc3Qgc2NvcGUgPSBnZXRDdXJyZW50SHViKCkuZ2V0U2NvcGUoKTtcbiAgICAgICAgY29uc3QgcGFyZW50U3BhbiA9IHNjb3BlPy5nZXRTcGFuKCk7XG4gICAgICAgIGNvbnN0IHNwYW4gPSBwYXJlbnRTcGFuPy5zdGFydENoaWxkKHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogdHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycgPyBjb25maWcgOiAoY29uZmlnIGFzIHsgdGV4dDogc3RyaW5nIH0pLnRleHQsXG4gICAgICAgICAgb3A6IGBkYmAsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gb3JpZy5jYWxsKHRoaXMsIGNvbmZpZywgdmFsdWVzLCBmdW5jdGlvbihlcnI6IEVycm9yLCByZXN1bHQ6IHVua25vd24pIHtcbiAgICAgICAgICAgIHNwYW4/LmZpbmlzaCgpO1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZXMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gb3JpZy5jYWxsKHRoaXMsIGNvbmZpZywgZnVuY3Rpb24oZXJyOiBFcnJvciwgcmVzdWx0OiB1bmtub3duKSB7XG4gICAgICAgICAgICBzcGFuPy5maW5pc2goKTtcbiAgICAgICAgICAgIHZhbHVlcyhlcnIsIHJlc3VsdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBydiA9IHR5cGVvZiB2YWx1ZXMgIT09ICd1bmRlZmluZWQnID8gb3JpZy5jYWxsKHRoaXMsIGNvbmZpZywgdmFsdWVzKSA6IG9yaWcuY2FsbCh0aGlzLCBjb25maWcpO1xuXG4gICAgICAgIGlmIChpc1RoZW5hYmxlKHJ2KSkge1xuICAgICAgICAgIHJldHVybiAocnYgYXMgUHJvbWlzZTx1bmtub3duPikudGhlbigocmVzOiB1bmtub3duKSA9PiB7XG4gICAgICAgICAgICBzcGFuPy5maW5pc2goKTtcbiAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBzcGFuPy5maW5pc2goKTtcbiAgICAgICAgcmV0dXJuIHJ2O1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEh1YiB9IGZyb20gJ0BzZW50cnkvaHViJztcbmltcG9ydCB7IEV2ZW50UHJvY2Vzc29yLCBJbnRlZ3JhdGlvbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgZmlsbCwgbG9hZE1vZHVsZSwgbG9nZ2VyIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmludGVyZmFjZSBNeXNxbENvbm5lY3Rpb24ge1xuICBjcmVhdGVRdWVyeTogKCkgPT4gdm9pZDtcbn1cblxuLyoqIFRyYWNpbmcgaW50ZWdyYXRpb24gZm9yIG5vZGUtbXlzcWwgcGFja2FnZSAqL1xuZXhwb3J0IGNsYXNzIE15c3FsIGltcGxlbWVudHMgSW50ZWdyYXRpb24ge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaWQ6IHN0cmluZyA9ICdNeXNxbCc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbmFtZTogc3RyaW5nID0gTXlzcWwuaWQ7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0dXBPbmNlKF86IChjYWxsYmFjazogRXZlbnRQcm9jZXNzb3IpID0+IHZvaWQsIGdldEN1cnJlbnRIdWI6ICgpID0+IEh1Yik6IHZvaWQge1xuICAgIGNvbnN0IHBrZyA9IGxvYWRNb2R1bGU8TXlzcWxDb25uZWN0aW9uPignbXlzcWwvbGliL0Nvbm5lY3Rpb24uanMnKTtcblxuICAgIGlmICghcGtnKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ015c3FsIEludGVncmF0aW9uIHdhcyB1bmFibGUgdG8gcmVxdWlyZSBgbXlzcWxgIHBhY2thZ2UuJyk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVGhlIG9yaWdpbmFsIGZ1bmN0aW9uIHdpbGwgaGF2ZSBvbmUgb2YgdGhlc2Ugc2lnbmF0dXJlczpcbiAgICAvLyAgICBmdW5jdGlvbiAoY2FsbGJhY2spID0+IHZvaWRcbiAgICAvLyAgICBmdW5jdGlvbiAob3B0aW9ucywgY2FsbGJhY2spID0+IHZvaWRcbiAgICAvLyAgICBmdW5jdGlvbiAob3B0aW9ucywgdmFsdWVzLCBjYWxsYmFjaykgPT4gdm9pZFxuICAgIGZpbGwocGtnLCAnY3JlYXRlUXVlcnknLCBmdW5jdGlvbihvcmlnOiAoKSA9PiB2b2lkKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24odGhpczogdW5rbm93biwgb3B0aW9uczogdW5rbm93biwgdmFsdWVzOiB1bmtub3duLCBjYWxsYmFjazogdW5rbm93bikge1xuICAgICAgICBjb25zdCBzY29wZSA9IGdldEN1cnJlbnRIdWIoKS5nZXRTY29wZSgpO1xuICAgICAgICBjb25zdCBwYXJlbnRTcGFuID0gc2NvcGU/LmdldFNwYW4oKTtcbiAgICAgICAgY29uc3Qgc3BhbiA9IHBhcmVudFNwYW4/LnN0YXJ0Q2hpbGQoe1xuICAgICAgICAgIGRlc2NyaXB0aW9uOiB0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycgPyBvcHRpb25zIDogKG9wdGlvbnMgYXMgeyBzcWw6IHN0cmluZyB9KS5zcWwsXG4gICAgICAgICAgb3A6IGBkYmAsXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICByZXR1cm4gb3JpZy5jYWxsKHRoaXMsIG9wdGlvbnMsIHZhbHVlcywgZnVuY3Rpb24oZXJyOiBFcnJvciwgcmVzdWx0OiB1bmtub3duLCBmaWVsZHM6IHVua25vd24pIHtcbiAgICAgICAgICAgIHNwYW4/LmZpbmlzaCgpO1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQsIGZpZWxkcyk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiBvcmlnLmNhbGwodGhpcywgb3B0aW9ucywgZnVuY3Rpb24oZXJyOiBFcnJvciwgcmVzdWx0OiB1bmtub3duLCBmaWVsZHM6IHVua25vd24pIHtcbiAgICAgICAgICAgIHNwYW4/LmZpbmlzaCgpO1xuICAgICAgICAgICAgdmFsdWVzKGVyciwgcmVzdWx0LCBmaWVsZHMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG9yaWcuY2FsbCh0aGlzLCBvcHRpb25zLCB2YWx1ZXMsIGNhbGxiYWNrKTtcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBIdWIgfSBmcm9tICdAc2VudHJ5L2h1Yic7XG5pbXBvcnQgeyBFdmVudFByb2Nlc3NvciwgSW50ZWdyYXRpb24sIFNwYW5Db250ZXh0IH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBmaWxsLCBpc1RoZW5hYmxlLCBsb2FkTW9kdWxlLCBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuLy8gVGhpcyBhbGxvd3MgdXMgdG8gdXNlIHRoZSBzYW1lIGFycmF5IGZvciBib3RoIGRlZmF1bHRzIG9wdGlvbnMgYW5kIHRoZSB0eXBlIGl0c2VsZi5cbi8vIChub3RlIGBhcyBjb25zdGAgYXQgdGhlIGVuZCB0byBtYWtlIGl0IGEgdW5pb24gb2Ygc3RyaW5nIGxpdGVyYWwgdHlwZXMgKGkuZS4gXCJhXCIgfCBcImJcIiB8IC4uLiApXG4vLyBhbmQgbm90IGp1c3QgYSBzdHJpbmdbXSlcbnR5cGUgT3BlcmF0aW9uID0gdHlwZW9mIE9QRVJBVElPTlNbbnVtYmVyXTtcbmNvbnN0IE9QRVJBVElPTlMgPSBbXG4gICdhZ2dyZWdhdGUnLCAvLyBhZ2dyZWdhdGUocGlwZWxpbmUsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnYnVsa1dyaXRlJywgLy8gYnVsa1dyaXRlKG9wZXJhdGlvbnMsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnY291bnREb2N1bWVudHMnLCAvLyBjb3VudERvY3VtZW50cyhxdWVyeSwgb3B0aW9ucywgY2FsbGJhY2spXG4gICdjcmVhdGVJbmRleCcsIC8vIGNyZWF0ZUluZGV4KGZpZWxkT3JTcGVjLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2NyZWF0ZUluZGV4ZXMnLCAvLyBjcmVhdGVJbmRleGVzKGluZGV4U3BlY3MsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnZGVsZXRlTWFueScsIC8vIGRlbGV0ZU1hbnkoZmlsdGVyLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2RlbGV0ZU9uZScsIC8vIGRlbGV0ZU9uZShmaWx0ZXIsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnZGlzdGluY3QnLCAvLyBkaXN0aW5jdChrZXksIHF1ZXJ5LCBvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2Ryb3AnLCAvLyBkcm9wKG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnZHJvcEluZGV4JywgLy8gZHJvcEluZGV4KGluZGV4TmFtZSwgb3B0aW9ucywgY2FsbGJhY2spXG4gICdkcm9wSW5kZXhlcycsIC8vIGRyb3BJbmRleGVzKG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnZXN0aW1hdGVkRG9jdW1lbnRDb3VudCcsIC8vIGVzdGltYXRlZERvY3VtZW50Q291bnQob3B0aW9ucywgY2FsbGJhY2spXG4gICdmaW5kJywgLy8gZmluZChxdWVyeSwgb3B0aW9ucywgY2FsbGJhY2spXG4gICdmaW5kT25lJywgLy8gZmluZE9uZShxdWVyeSwgb3B0aW9ucywgY2FsbGJhY2spXG4gICdmaW5kT25lQW5kRGVsZXRlJywgLy8gZmluZE9uZUFuZERlbGV0ZShmaWx0ZXIsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnZmluZE9uZUFuZFJlcGxhY2UnLCAvLyBmaW5kT25lQW5kUmVwbGFjZShmaWx0ZXIsIHJlcGxhY2VtZW50LCBvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2ZpbmRPbmVBbmRVcGRhdGUnLCAvLyBmaW5kT25lQW5kVXBkYXRlKGZpbHRlciwgdXBkYXRlLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2luZGV4ZXMnLCAvLyBpbmRleGVzKG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnaW5kZXhFeGlzdHMnLCAvLyBpbmRleEV4aXN0cyhpbmRleGVzLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2luZGV4SW5mb3JtYXRpb24nLCAvLyBpbmRleEluZm9ybWF0aW9uKG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnaW5pdGlhbGl6ZU9yZGVyZWRCdWxrT3AnLCAvLyBpbml0aWFsaXplT3JkZXJlZEJ1bGtPcChvcHRpb25zLCBjYWxsYmFjaylcbiAgJ2luc2VydE1hbnknLCAvLyBpbnNlcnRNYW55KGRvY3MsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnaW5zZXJ0T25lJywgLy8gaW5zZXJ0T25lKGRvYywgb3B0aW9ucywgY2FsbGJhY2spXG4gICdpc0NhcHBlZCcsIC8vIGlzQ2FwcGVkKG9wdGlvbnMsIGNhbGxiYWNrKVxuICAnbWFwUmVkdWNlJywgLy8gbWFwUmVkdWNlKG1hcCwgcmVkdWNlLCBvcHRpb25zLCBjYWxsYmFjaylcbiAgJ29wdGlvbnMnLCAvLyBvcHRpb25zKG9wdGlvbnMsIGNhbGxiYWNrKVxuICAncGFyYWxsZWxDb2xsZWN0aW9uU2NhbicsIC8vIHBhcmFsbGVsQ29sbGVjdGlvblNjYW4ob3B0aW9ucywgY2FsbGJhY2spXG4gICdyZW5hbWUnLCAvLyByZW5hbWUobmV3TmFtZSwgb3B0aW9ucywgY2FsbGJhY2spXG4gICdyZXBsYWNlT25lJywgLy8gcmVwbGFjZU9uZShmaWx0ZXIsIGRvYywgb3B0aW9ucywgY2FsbGJhY2spXG4gICdzdGF0cycsIC8vIHN0YXRzKG9wdGlvbnMsIGNhbGxiYWNrKVxuICAndXBkYXRlTWFueScsIC8vIHVwZGF0ZU1hbnkoZmlsdGVyLCB1cGRhdGUsIG9wdGlvbnMsIGNhbGxiYWNrKVxuICAndXBkYXRlT25lJywgLy8gdXBkYXRlT25lKGZpbHRlciwgdXBkYXRlLCBvcHRpb25zLCBjYWxsYmFjaylcbl0gYXMgY29uc3Q7XG5cbi8vIEFsbCBvZiB0aGUgb3BlcmF0aW9ucyBhYm92ZSB0YWtlIGBvcHRpb25zYCBhbmQgYGNhbGxiYWNrYCBhcyB0aGVpciBmaW5hbCBwYXJhbWV0ZXJzLCBidXQgc29tZSBvZiB0aGVtXG4vLyB0YWtlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBhcyB3ZWxsLiBGb3IgdGhvc2Ugb3BlcmF0aW9ucywgdGhpcyBpcyBhIG1hcCBvZlxuLy8geyA8b3BlcmF0aW9uIG5hbWU+OiAgWzxuYW1lcyBvZiBhZGRpdGlvbmFsIHBhcmFtZXRlcnM+XSB9LCBhcyBhIHdheSB0byBrbm93IHdoYXQgdG8gY2FsbCB0aGUgb3BlcmF0aW9uJ3Ncbi8vIHBvc2l0aW9uYWwgYXJndW1lbnRzIHdoZW4gd2UgYWRkIHRoZW0gdG8gdGhlIHNwYW4ncyBgZGF0YWAgb2JqZWN0IGxhdGVyXG5jb25zdCBPUEVSQVRJT05fU0lHTkFUVVJFUzoge1xuICBbb3AgaW4gT3BlcmF0aW9uXT86IHN0cmluZ1tdO1xufSA9IHtcbiAgLy8gYWdncmVnYXRlIGludGVudGlvbmFsbHkgbm90IGluY2x1ZGVkIGJlY2F1c2UgYHBpcGVsaW5lYCBhcmd1bWVudHMgYXJlIHRvbyBjb21wbGV4IHRvIHNlcmlhbGl6ZSB3ZWxsXG4gIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vZ2V0c2VudHJ5L3NlbnRyeS1qYXZhc2NyaXB0L3B1bGwvMzEwMlxuICBidWxrV3JpdGU6IFsnb3BlcmF0aW9ucyddLFxuICBjb3VudERvY3VtZW50czogWydxdWVyeSddLFxuICBjcmVhdGVJbmRleDogWydmaWVsZE9yU3BlYyddLFxuICBjcmVhdGVJbmRleGVzOiBbJ2luZGV4U3BlY3MnXSxcbiAgZGVsZXRlTWFueTogWydmaWx0ZXInXSxcbiAgZGVsZXRlT25lOiBbJ2ZpbHRlciddLFxuICBkaXN0aW5jdDogWydrZXknLCAncXVlcnknXSxcbiAgZHJvcEluZGV4OiBbJ2luZGV4TmFtZSddLFxuICBmaW5kOiBbJ3F1ZXJ5J10sXG4gIGZpbmRPbmU6IFsncXVlcnknXSxcbiAgZmluZE9uZUFuZERlbGV0ZTogWydmaWx0ZXInXSxcbiAgZmluZE9uZUFuZFJlcGxhY2U6IFsnZmlsdGVyJywgJ3JlcGxhY2VtZW50J10sXG4gIGZpbmRPbmVBbmRVcGRhdGU6IFsnZmlsdGVyJywgJ3VwZGF0ZSddLFxuICBpbmRleEV4aXN0czogWydpbmRleGVzJ10sXG4gIGluc2VydE1hbnk6IFsnZG9jcyddLFxuICBpbnNlcnRPbmU6IFsnZG9jJ10sXG4gIG1hcFJlZHVjZTogWydtYXAnLCAncmVkdWNlJ10sXG4gIHJlbmFtZTogWyduZXdOYW1lJ10sXG4gIHJlcGxhY2VPbmU6IFsnZmlsdGVyJywgJ2RvYyddLFxuICB1cGRhdGVNYW55OiBbJ2ZpbHRlcicsICd1cGRhdGUnXSxcbiAgdXBkYXRlT25lOiBbJ2ZpbHRlcicsICd1cGRhdGUnXSxcbn07XG5cbmludGVyZmFjZSBNb25nb0NvbGxlY3Rpb24ge1xuICBjb2xsZWN0aW9uTmFtZTogc3RyaW5nO1xuICBkYk5hbWU6IHN0cmluZztcbiAgbmFtZXNwYWNlOiBzdHJpbmc7XG4gIHByb3RvdHlwZToge1xuICAgIFtvcGVyYXRpb24gaW4gT3BlcmF0aW9uXTogKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bjtcbiAgfTtcbn1cblxuaW50ZXJmYWNlIE1vbmdvT3B0aW9ucyB7XG4gIG9wZXJhdGlvbnM/OiBPcGVyYXRpb25bXTtcbiAgZGVzY3JpYmVPcGVyYXRpb25zPzogYm9vbGVhbiB8IE9wZXJhdGlvbltdO1xuICB1c2VNb25nb29zZT86IGJvb2xlYW47XG59XG5cbi8qKiBUcmFjaW5nIGludGVncmF0aW9uIGZvciBtb25nbyBwYWNrYWdlICovXG5leHBvcnQgY2xhc3MgTW9uZ28gaW1wbGVtZW50cyBJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpZDogc3RyaW5nID0gJ01vbmdvJztcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSBNb25nby5pZDtcblxuICBwcml2YXRlIF9vcGVyYXRpb25zOiBPcGVyYXRpb25bXTtcbiAgcHJpdmF0ZSBfZGVzY3JpYmVPcGVyYXRpb25zPzogYm9vbGVhbiB8IE9wZXJhdGlvbltdO1xuICBwcml2YXRlIF91c2VNb25nb29zZTogYm9vbGVhbjtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiBNb25nb09wdGlvbnMgPSB7fSkge1xuICAgIHRoaXMuX29wZXJhdGlvbnMgPSBBcnJheS5pc0FycmF5KG9wdGlvbnMub3BlcmF0aW9ucylcbiAgICAgID8gb3B0aW9ucy5vcGVyYXRpb25zXG4gICAgICA6ICgoT1BFUkFUSU9OUyBhcyB1bmtub3duKSBhcyBPcGVyYXRpb25bXSk7XG4gICAgdGhpcy5fZGVzY3JpYmVPcGVyYXRpb25zID0gJ2Rlc2NyaWJlT3BlcmF0aW9ucycgaW4gb3B0aW9ucyA/IG9wdGlvbnMuZGVzY3JpYmVPcGVyYXRpb25zIDogdHJ1ZTtcbiAgICB0aGlzLl91c2VNb25nb29zZSA9ICEhb3B0aW9ucy51c2VNb25nb29zZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldHVwT25jZShfOiAoY2FsbGJhY2s6IEV2ZW50UHJvY2Vzc29yKSA9PiB2b2lkLCBnZXRDdXJyZW50SHViOiAoKSA9PiBIdWIpOiB2b2lkIHtcbiAgICBjb25zdCBtb2R1bGVOYW1lID0gdGhpcy5fdXNlTW9uZ29vc2UgPyAnbW9uZ29vc2UnIDogJ21vbmdvZGInO1xuICAgIGNvbnN0IHBrZyA9IGxvYWRNb2R1bGU8eyBDb2xsZWN0aW9uOiBNb25nb0NvbGxlY3Rpb24gfT4obW9kdWxlTmFtZSk7XG5cbiAgICBpZiAoIXBrZykge1xuICAgICAgbG9nZ2VyLmVycm9yKGBNb25nbyBJbnRlZ3JhdGlvbiB3YXMgdW5hYmxlIHRvIHJlcXVpcmUgXFxgJHttb2R1bGVOYW1lfVxcYCBwYWNrYWdlLmApO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2luc3RydW1lbnRPcGVyYXRpb25zKHBrZy5Db2xsZWN0aW9uLCB0aGlzLl9vcGVyYXRpb25zLCBnZXRDdXJyZW50SHViKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXRjaGVzIG9yaWdpbmFsIGNvbGxlY3Rpb24gbWV0aG9kc1xuICAgKi9cbiAgcHJpdmF0ZSBfaW5zdHJ1bWVudE9wZXJhdGlvbnMoY29sbGVjdGlvbjogTW9uZ29Db2xsZWN0aW9uLCBvcGVyYXRpb25zOiBPcGVyYXRpb25bXSwgZ2V0Q3VycmVudEh1YjogKCkgPT4gSHViKTogdm9pZCB7XG4gICAgb3BlcmF0aW9ucy5mb3JFYWNoKChvcGVyYXRpb246IE9wZXJhdGlvbikgPT4gdGhpcy5fcGF0Y2hPcGVyYXRpb24oY29sbGVjdGlvbiwgb3BlcmF0aW9uLCBnZXRDdXJyZW50SHViKSk7XG4gIH1cblxuICAvKipcbiAgICogUGF0Y2hlcyBvcmlnaW5hbCBjb2xsZWN0aW9uIHRvIHV0aWxpemUgb3VyIHRyYWNpbmcgZnVuY3Rpb25hbGl0eVxuICAgKi9cbiAgcHJpdmF0ZSBfcGF0Y2hPcGVyYXRpb24oY29sbGVjdGlvbjogTW9uZ29Db2xsZWN0aW9uLCBvcGVyYXRpb246IE9wZXJhdGlvbiwgZ2V0Q3VycmVudEh1YjogKCkgPT4gSHViKTogdm9pZCB7XG4gICAgaWYgKCEob3BlcmF0aW9uIGluIGNvbGxlY3Rpb24ucHJvdG90eXBlKSkgcmV0dXJuO1xuXG4gICAgY29uc3QgZ2V0U3BhbkNvbnRleHQgPSB0aGlzLl9nZXRTcGFuQ29udGV4dEZyb21PcGVyYXRpb25Bcmd1bWVudHMuYmluZCh0aGlzKTtcblxuICAgIGZpbGwoY29sbGVjdGlvbi5wcm90b3R5cGUsIG9wZXJhdGlvbiwgZnVuY3Rpb24ob3JpZzogKCkgPT4gdm9pZCB8IFByb21pc2U8dW5rbm93bj4pIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbih0aGlzOiB1bmtub3duLCAuLi5hcmdzOiB1bmtub3duW10pIHtcbiAgICAgICAgY29uc3QgbGFzdEFyZyA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcbiAgICAgICAgY29uc3Qgc2NvcGUgPSBnZXRDdXJyZW50SHViKCkuZ2V0U2NvcGUoKTtcbiAgICAgICAgY29uc3QgcGFyZW50U3BhbiA9IHNjb3BlPy5nZXRTcGFuKCk7XG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIG9wZXJhdGlvbiB3YXMgcGFzc2VkIGEgY2FsbGJhY2suIChtYXBSZWR1Y2UgcmVxdWlyZXMgYSBkaWZmZXJlbnQgY2hlY2ssIGFzXG4gICAgICAgIC8vIGl0cyAobm9uLWNhbGxiYWNrKSBhcmd1bWVudHMgY2FuIGFsc28gYmUgZnVuY3Rpb25zLilcbiAgICAgICAgaWYgKHR5cGVvZiBsYXN0QXJnICE9PSAnZnVuY3Rpb24nIHx8IChvcGVyYXRpb24gPT09ICdtYXBSZWR1Y2UnICYmIGFyZ3MubGVuZ3RoID09PSAyKSkge1xuICAgICAgICAgIGNvbnN0IHNwYW4gPSBwYXJlbnRTcGFuPy5zdGFydENoaWxkKGdldFNwYW5Db250ZXh0KHRoaXMsIG9wZXJhdGlvbiwgYXJncykpO1xuICAgICAgICAgIGNvbnN0IG1heWJlUHJvbWlzZSA9IG9yaWcuY2FsbCh0aGlzLCAuLi5hcmdzKSBhcyBQcm9taXNlPHVua25vd24+O1xuXG4gICAgICAgICAgaWYgKGlzVGhlbmFibGUobWF5YmVQcm9taXNlKSkge1xuICAgICAgICAgICAgcmV0dXJuIG1heWJlUHJvbWlzZS50aGVuKChyZXM6IHVua25vd24pID0+IHtcbiAgICAgICAgICAgICAgc3Bhbj8uZmluaXNoKCk7XG4gICAgICAgICAgICAgIHJldHVybiByZXM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3Bhbj8uZmluaXNoKCk7XG4gICAgICAgICAgICByZXR1cm4gbWF5YmVQcm9taXNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHNwYW4gPSBwYXJlbnRTcGFuPy5zdGFydENoaWxkKGdldFNwYW5Db250ZXh0KHRoaXMsIG9wZXJhdGlvbiwgYXJncy5zbGljZSgwLCAtMSkpKTtcbiAgICAgICAgcmV0dXJuIG9yaWcuY2FsbCh0aGlzLCAuLi5hcmdzLnNsaWNlKDAsIC0xKSwgZnVuY3Rpb24oZXJyOiBFcnJvciwgcmVzdWx0OiB1bmtub3duKSB7XG4gICAgICAgICAgc3Bhbj8uZmluaXNoKCk7XG4gICAgICAgICAgbGFzdEFyZyhlcnIsIHJlc3VsdCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtIGEgU3BhbkNvbnRleHQgYmFzZWQgb24gdGhlIHVzZXIgaW5wdXQgdG8gYSBnaXZlbiBvcGVyYXRpb24uXG4gICAqL1xuICBwcml2YXRlIF9nZXRTcGFuQ29udGV4dEZyb21PcGVyYXRpb25Bcmd1bWVudHMoXG4gICAgY29sbGVjdGlvbjogTW9uZ29Db2xsZWN0aW9uLFxuICAgIG9wZXJhdGlvbjogT3BlcmF0aW9uLFxuICAgIGFyZ3M6IHVua25vd25bXSxcbiAgKTogU3BhbkNvbnRleHQge1xuICAgIGNvbnN0IGRhdGE6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7XG4gICAgICBjb2xsZWN0aW9uTmFtZTogY29sbGVjdGlvbi5jb2xsZWN0aW9uTmFtZSxcbiAgICAgIGRiTmFtZTogY29sbGVjdGlvbi5kYk5hbWUsXG4gICAgICBuYW1lc3BhY2U6IGNvbGxlY3Rpb24ubmFtZXNwYWNlLFxuICAgIH07XG4gICAgY29uc3Qgc3BhbkNvbnRleHQ6IFNwYW5Db250ZXh0ID0ge1xuICAgICAgb3A6IGBkYmAsXG4gICAgICBkZXNjcmlwdGlvbjogb3BlcmF0aW9uLFxuICAgICAgZGF0YSxcbiAgICB9O1xuXG4gICAgLy8gSWYgdGhlIG9wZXJhdGlvbiB0YWtlcyBubyBhcmd1bWVudHMgYmVzaWRlcyBgb3B0aW9uc2AgYW5kIGBjYWxsYmFja2AsIG9yIGlmIGFyZ3VtZW50XG4gICAgLy8gY29sbGVjdGlvbiBpcyBkaXNhYmxlZCBmb3IgdGhpcyBvcGVyYXRpb24sIGp1c3QgcmV0dXJuIGVhcmx5LlxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IE9QRVJBVElPTl9TSUdOQVRVUkVTW29wZXJhdGlvbl07XG4gICAgY29uc3Qgc2hvdWxkRGVzY3JpYmUgPSBBcnJheS5pc0FycmF5KHRoaXMuX2Rlc2NyaWJlT3BlcmF0aW9ucylcbiAgICAgID8gdGhpcy5fZGVzY3JpYmVPcGVyYXRpb25zLmluY2x1ZGVzKG9wZXJhdGlvbilcbiAgICAgIDogdGhpcy5fZGVzY3JpYmVPcGVyYXRpb25zO1xuXG4gICAgaWYgKCFzaWduYXR1cmUgfHwgIXNob3VsZERlc2NyaWJlKSB7XG4gICAgICByZXR1cm4gc3BhbkNvbnRleHQ7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIFNwZWNpYWwgY2FzZSBmb3IgYG1hcFJlZHVjZWAsIGFzIHRoZSBvbmx5IG9uZSBhY2NlcHRpbmcgZnVuY3Rpb25zIGFzIGFyZ3VtZW50cy5cbiAgICAgIGlmIChvcGVyYXRpb24gPT09ICdtYXBSZWR1Y2UnKSB7XG4gICAgICAgIGNvbnN0IFttYXAsIHJlZHVjZV0gPSBhcmdzIGFzIHsgbmFtZT86IHN0cmluZyB9W107XG4gICAgICAgIGRhdGFbc2lnbmF0dXJlWzBdXSA9IHR5cGVvZiBtYXAgPT09ICdzdHJpbmcnID8gbWFwIDogbWFwLm5hbWUgfHwgJzxhbm9ueW1vdXM+JztcbiAgICAgICAgZGF0YVtzaWduYXR1cmVbMV1dID0gdHlwZW9mIHJlZHVjZSA9PT0gJ3N0cmluZycgPyByZWR1Y2UgOiByZWR1Y2UubmFtZSB8fCAnPGFub255bW91cz4nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaWduYXR1cmUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBkYXRhW3NpZ25hdHVyZVtpXV0gPSBKU09OLnN0cmluZ2lmeShhcmdzW2ldKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKF9vTykge1xuICAgICAgLy8gbm8tZW1wdHlcbiAgICB9XG5cbiAgICByZXR1cm4gc3BhbkNvbnRleHQ7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QsIGxvZ2dlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5pbXBvcnQgeyBGSU5JU0hfUkVBU09OX1RBRywgSURMRV9UUkFOU0FDVElPTl9GSU5JU0hfUkVBU09OUyB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBJZGxlVHJhbnNhY3Rpb24gfSBmcm9tICcuLi9pZGxldHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgU3BhblN0YXR1cyB9IGZyb20gJy4uL3NwYW5zdGF0dXMnO1xuaW1wb3J0IHsgZ2V0QWN0aXZlVHJhbnNhY3Rpb24gfSBmcm9tICcuLi91dGlscyc7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdDxXaW5kb3c+KCk7XG5cbi8qKlxuICogQWRkIGEgbGlzdGVuZXIgdGhhdCBjYW5jZWxzIGFuZCBmaW5pc2hlcyBhIHRyYW5zYWN0aW9uIHdoZW4gdGhlIGdsb2JhbFxuICogZG9jdW1lbnQgaXMgaGlkZGVuLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcmVnaXN0ZXJCYWNrZ3JvdW5kVGFiRGV0ZWN0aW9uKCk6IHZvaWQge1xuICBpZiAoZ2xvYmFsICYmIGdsb2JhbC5kb2N1bWVudCkge1xuICAgIGdsb2JhbC5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgKCkgPT4ge1xuICAgICAgY29uc3QgYWN0aXZlVHJhbnNhY3Rpb24gPSBnZXRBY3RpdmVUcmFuc2FjdGlvbigpIGFzIElkbGVUcmFuc2FjdGlvbjtcbiAgICAgIGlmIChnbG9iYWwuZG9jdW1lbnQuaGlkZGVuICYmIGFjdGl2ZVRyYW5zYWN0aW9uKSB7XG4gICAgICAgIGxvZ2dlci5sb2coXG4gICAgICAgICAgYFtUcmFjaW5nXSBUcmFuc2FjdGlvbjogJHtTcGFuU3RhdHVzLkNhbmNlbGxlZH0gLT4gc2luY2UgdGFiIG1vdmVkIHRvIHRoZSBiYWNrZ3JvdW5kLCBvcDogJHthY3RpdmVUcmFuc2FjdGlvbi5vcH1gLFxuICAgICAgICApO1xuICAgICAgICAvLyBXZSBzaG91bGQgbm90IHNldCBzdGF0dXMgaWYgaXQgaXMgYWxyZWFkeSBzZXQsIHRoaXMgcHJldmVudCBpbXBvcnRhbnQgc3RhdHVzZXMgbGlrZVxuICAgICAgICAvLyBlcnJvciBvciBkYXRhIGxvc3MgZnJvbSBiZWluZyBvdmVyd3JpdHRlbiBvbiB0cmFuc2FjdGlvbi5cbiAgICAgICAgaWYgKCFhY3RpdmVUcmFuc2FjdGlvbi5zdGF0dXMpIHtcbiAgICAgICAgICBhY3RpdmVUcmFuc2FjdGlvbi5zZXRTdGF0dXMoU3BhblN0YXR1cy5DYW5jZWxsZWQpO1xuICAgICAgICB9XG4gICAgICAgIGFjdGl2ZVRyYW5zYWN0aW9uLnNldFRhZygndmlzaWJpbGl0eWNoYW5nZScsICdkb2N1bWVudC5oaWRkZW4nKTtcbiAgICAgICAgYWN0aXZlVHJhbnNhY3Rpb24uc2V0VGFnKEZJTklTSF9SRUFTT05fVEFHLCBJRExFX1RSQU5TQUNUSU9OX0ZJTklTSF9SRUFTT05TWzJdKTtcbiAgICAgICAgYWN0aXZlVHJhbnNhY3Rpb24uZmluaXNoKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0gZWxzZSB7XG4gICAgbG9nZ2VyLndhcm4oJ1tUcmFjaW5nXSBDb3VsZCBub3Qgc2V0IHVwIGJhY2tncm91bmQgdGFiIGRldGVjdGlvbiBkdWUgdG8gbGFjayBvZiBnbG9iYWwgZG9jdW1lbnQnKTtcbiAgfVxufVxuIiwgIi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgeyBNZXRyaWMsIFJlcG9ydEhhbmRsZXIgfSBmcm9tICcuLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBiaW5kUmVwb3J0ZXIgPSAoXG4gIGNhbGxiYWNrOiBSZXBvcnRIYW5kbGVyLFxuICBtZXRyaWM6IE1ldHJpYyxcbiAgcmVwb3J0QWxsQ2hhbmdlcz86IGJvb2xlYW4sXG4pOiAoKGZvcmNlUmVwb3J0PzogYm9vbGVhbikgPT4gdm9pZCkgPT4ge1xuICBsZXQgcHJldlZhbHVlOiBudW1iZXI7XG4gIHJldHVybiAoZm9yY2VSZXBvcnQ/OiBib29sZWFuKSA9PiB7XG4gICAgaWYgKG1ldHJpYy52YWx1ZSA+PSAwKSB7XG4gICAgICBpZiAoZm9yY2VSZXBvcnQgfHwgcmVwb3J0QWxsQ2hhbmdlcykge1xuICAgICAgICBtZXRyaWMuZGVsdGEgPSBtZXRyaWMudmFsdWUgLSAocHJldlZhbHVlIHx8IDApO1xuXG4gICAgICAgIC8vIFJlcG9ydCB0aGUgbWV0cmljIGlmIHRoZXJlJ3MgYSBub24temVybyBkZWx0YSBvciBpZiBubyBwcmV2aW91c1xuICAgICAgICAvLyB2YWx1ZSBleGlzdHMgKHdoaWNoIGNhbiBoYXBwZW4gaW4gdGhlIGNhc2Ugb2YgdGhlIGRvY3VtZW50IGJlY29taW5nXG4gICAgICAgIC8vIGhpZGRlbiB3aGVuIHRoZSBtZXRyaWMgdmFsdWUgaXMgMCkuXG4gICAgICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL0dvb2dsZUNocm9tZS93ZWItdml0YWxzL2lzc3Vlcy8xNFxuICAgICAgICBpZiAobWV0cmljLmRlbHRhIHx8IHByZXZWYWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcHJldlZhbHVlID0gbWV0cmljLnZhbHVlO1xuICAgICAgICAgIGNhbGxiYWNrKG1ldHJpYyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH07XG59O1xuIiwgIi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG4vKipcbiAqIFBlcmZvcm1hbnRseSBnZW5lcmF0ZSBhIHVuaXF1ZSwgMzAtY2hhciBzdHJpbmcgYnkgY29tYmluaW5nIGEgdmVyc2lvblxuICogbnVtYmVyLCB0aGUgY3VycmVudCB0aW1lc3RhbXAgd2l0aCBhIDEzLWRpZ2l0IG51bWJlciBpbnRlZ2VyLlxuICogQHJldHVybiB7c3RyaW5nfVxuICovXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVVbmlxdWVJRCA9ICgpOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gYHYyLSR7RGF0ZS5ub3coKX0tJHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoOWUxMiAtIDEpKSArIDFlMTJ9YDtcbn07XG4iLCAiLypcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IE1ldHJpYyB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGdlbmVyYXRlVW5pcXVlSUQgfSBmcm9tICcuL2dlbmVyYXRlVW5pcXVlSUQnO1xuXG5leHBvcnQgY29uc3QgaW5pdE1ldHJpYyA9IChuYW1lOiBNZXRyaWNbJ25hbWUnXSwgdmFsdWU/OiBudW1iZXIpOiBNZXRyaWMgPT4ge1xuICByZXR1cm4ge1xuICAgIG5hbWUsXG4gICAgdmFsdWU6IHZhbHVlID8/IC0xLFxuICAgIGRlbHRhOiAwLFxuICAgIGVudHJpZXM6IFtdLFxuICAgIGlkOiBnZW5lcmF0ZVVuaXF1ZUlEKCksXG4gIH07XG59O1xuIiwgIi8qXG4gKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIFBlcmZvcm1hbmNlRW50cnlIYW5kbGVyIHtcbiAgKGVudHJ5OiBQZXJmb3JtYW5jZUVudHJ5KTogdm9pZDtcbn1cblxuLyoqXG4gKiBUYWtlcyBhIHBlcmZvcm1hbmNlIGVudHJ5IHR5cGUgYW5kIGEgY2FsbGJhY2sgZnVuY3Rpb24sIGFuZCBjcmVhdGVzIGFcbiAqIGBQZXJmb3JtYW5jZU9ic2VydmVyYCBpbnN0YW5jZSB0aGF0IHdpbGwgb2JzZXJ2ZSB0aGUgc3BlY2lmaWVkIGVudHJ5IHR5cGVcbiAqIHdpdGggYnVmZmVyaW5nIGVuYWJsZWQgYW5kIGNhbGwgdGhlIGNhbGxiYWNrIF9mb3IgZWFjaCBlbnRyeV8uXG4gKlxuICogVGhpcyBmdW5jdGlvbiBhbHNvIGZlYXR1cmUtZGV0ZWN0cyBlbnRyeSBzdXBwb3J0IGFuZCB3cmFwcyB0aGUgbG9naWMgaW4gYVxuICogdHJ5L2NhdGNoIHRvIGF2b2lkIGVycm9ycyBpbiB1bnN1cHBvcnRpbmcgYnJvd3NlcnMuXG4gKi9cbmV4cG9ydCBjb25zdCBvYnNlcnZlID0gKHR5cGU6IHN0cmluZywgY2FsbGJhY2s6IFBlcmZvcm1hbmNlRW50cnlIYW5kbGVyKTogUGVyZm9ybWFuY2VPYnNlcnZlciB8IHVuZGVmaW5lZCA9PiB7XG4gIHRyeSB7XG4gICAgaWYgKFBlcmZvcm1hbmNlT2JzZXJ2ZXIuc3VwcG9ydGVkRW50cnlUeXBlcy5pbmNsdWRlcyh0eXBlKSkge1xuICAgICAgLy8gTW9yZSBleHRlbnNpdmUgZmVhdHVyZSBkZXRlY3QgbmVlZGVkIGZvciBGaXJlZm94IGR1ZSB0bzpcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9Hb29nbGVDaHJvbWUvd2ViLXZpdGFscy9pc3N1ZXMvMTQyXG4gICAgICBpZiAodHlwZSA9PT0gJ2ZpcnN0LWlucHV0JyAmJiAhKCdQZXJmb3JtYW5jZUV2ZW50VGltaW5nJyBpbiBzZWxmKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHBvOiBQZXJmb3JtYW5jZU9ic2VydmVyID0gbmV3IFBlcmZvcm1hbmNlT2JzZXJ2ZXIobCA9PiBsLmdldEVudHJpZXMoKS5tYXAoY2FsbGJhY2spKTtcblxuICAgICAgcG8ub2JzZXJ2ZSh7IHR5cGUsIGJ1ZmZlcmVkOiB0cnVlIH0pO1xuICAgICAgcmV0dXJuIHBvO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIERvIG5vdGhpbmcuXG4gIH1cbiAgcmV0dXJuO1xufTtcbiIsICIvKlxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0IH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgT25IaWRkZW5DYWxsYmFjayB7XG4gIChldmVudDogRXZlbnQpOiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3Qgb25IaWRkZW4gPSAoY2I6IE9uSGlkZGVuQ2FsbGJhY2ssIG9uY2U/OiBib29sZWFuKTogdm9pZCA9PiB7XG4gIGNvbnN0IG9uSGlkZGVuT3JQYWdlSGlkZSA9IChldmVudDogRXZlbnQpOiB2b2lkID0+IHtcbiAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ3BhZ2VoaWRlJyB8fCBnZXRHbG9iYWxPYmplY3Q8V2luZG93PigpLmRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ2hpZGRlbicpIHtcbiAgICAgIGNiKGV2ZW50KTtcbiAgICAgIGlmIChvbmNlKSB7XG4gICAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBvbkhpZGRlbk9yUGFnZUhpZGUsIHRydWUpO1xuICAgICAgICByZW1vdmVFdmVudExpc3RlbmVyKCdwYWdlaGlkZScsIG9uSGlkZGVuT3JQYWdlSGlkZSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuICBhZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgb25IaWRkZW5PclBhZ2VIaWRlLCB0cnVlKTtcbiAgLy8gU29tZSBicm93c2VycyBoYXZlIGJ1Z2d5IGltcGxlbWVudGF0aW9ucyBvZiB2aXNpYmlsaXR5Y2hhbmdlLFxuICAvLyBzbyB3ZSB1c2UgcGFnZWhpZGUgaW4gYWRkaXRpb24sIGp1c3QgdG8gYmUgc2FmZS5cbiAgYWRkRXZlbnRMaXN0ZW5lcigncGFnZWhpZGUnLCBvbkhpZGRlbk9yUGFnZUhpZGUsIHRydWUpO1xufTtcbiIsICIvKlxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgYmluZFJlcG9ydGVyIH0gZnJvbSAnLi9saWIvYmluZFJlcG9ydGVyJztcbmltcG9ydCB7IGluaXRNZXRyaWMgfSBmcm9tICcuL2xpYi9pbml0TWV0cmljJztcbmltcG9ydCB7IG9ic2VydmUsIFBlcmZvcm1hbmNlRW50cnlIYW5kbGVyIH0gZnJvbSAnLi9saWIvb2JzZXJ2ZSc7XG5pbXBvcnQgeyBvbkhpZGRlbiB9IGZyb20gJy4vbGliL29uSGlkZGVuJztcbmltcG9ydCB7IFJlcG9ydEhhbmRsZXIgfSBmcm9tICcuL3R5cGVzJztcblxuLy8gaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9sYXlvdXQtaW5zdGFiaWxpdHkvI3NlYy1sYXlvdXQtc2hpZnRcbmV4cG9ydCBpbnRlcmZhY2UgTGF5b3V0U2hpZnQgZXh0ZW5kcyBQZXJmb3JtYW5jZUVudHJ5IHtcbiAgdmFsdWU6IG51bWJlcjtcbiAgaGFkUmVjZW50SW5wdXQ6IGJvb2xlYW47XG4gIHNvdXJjZXM6IEFycmF5PExheW91dFNoaWZ0QXR0cmlidXRpb24+O1xuICB0b0pTT04oKTogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF5b3V0U2hpZnRBdHRyaWJ1dGlvbiB7XG4gIG5vZGU/OiBOb2RlO1xuICBwcmV2aW91c1JlY3Q6IERPTVJlY3RSZWFkT25seTtcbiAgY3VycmVudFJlY3Q6IERPTVJlY3RSZWFkT25seTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldENMUyA9IChvblJlcG9ydDogUmVwb3J0SGFuZGxlciwgcmVwb3J0QWxsQ2hhbmdlcz86IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgY29uc3QgbWV0cmljID0gaW5pdE1ldHJpYygnQ0xTJywgMCk7XG4gIGxldCByZXBvcnQ6IFJldHVyblR5cGU8dHlwZW9mIGJpbmRSZXBvcnRlcj47XG5cbiAgbGV0IHNlc3Npb25WYWx1ZSA9IDA7XG4gIGxldCBzZXNzaW9uRW50cmllczogUGVyZm9ybWFuY2VFbnRyeVtdID0gW107XG5cbiAgY29uc3QgZW50cnlIYW5kbGVyID0gKGVudHJ5OiBMYXlvdXRTaGlmdCk6IHZvaWQgPT4ge1xuICAgIC8vIE9ubHkgY291bnQgbGF5b3V0IHNoaWZ0cyB3aXRob3V0IHJlY2VudCB1c2VyIGlucHV0LlxuICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgd2h5IGVudHJ5IGNhbiBiZSB1bmRlZmluZWRcbiAgICBpZiAoZW50cnkgJiYgIWVudHJ5LmhhZFJlY2VudElucHV0KSB7XG4gICAgICBjb25zdCBmaXJzdFNlc3Npb25FbnRyeSA9IHNlc3Npb25FbnRyaWVzWzBdO1xuICAgICAgY29uc3QgbGFzdFNlc3Npb25FbnRyeSA9IHNlc3Npb25FbnRyaWVzW3Nlc3Npb25FbnRyaWVzLmxlbmd0aCAtIDFdO1xuXG4gICAgICAvLyBJZiB0aGUgZW50cnkgb2NjdXJyZWQgbGVzcyB0aGFuIDEgc2Vjb25kIGFmdGVyIHRoZSBwcmV2aW91cyBlbnRyeSBhbmRcbiAgICAgIC8vIGxlc3MgdGhhbiA1IHNlY29uZHMgYWZ0ZXIgdGhlIGZpcnN0IGVudHJ5IGluIHRoZSBzZXNzaW9uLCBpbmNsdWRlIHRoZVxuICAgICAgLy8gZW50cnkgaW4gdGhlIGN1cnJlbnQgc2Vzc2lvbi4gT3RoZXJ3aXNlLCBzdGFydCBhIG5ldyBzZXNzaW9uLlxuICAgICAgaWYgKFxuICAgICAgICBzZXNzaW9uVmFsdWUgJiZcbiAgICAgICAgc2Vzc2lvbkVudHJpZXMubGVuZ3RoICE9PSAwICYmXG4gICAgICAgIGVudHJ5LnN0YXJ0VGltZSAtIGxhc3RTZXNzaW9uRW50cnkuc3RhcnRUaW1lIDwgMTAwMCAmJlxuICAgICAgICBlbnRyeS5zdGFydFRpbWUgLSBmaXJzdFNlc3Npb25FbnRyeS5zdGFydFRpbWUgPCA1MDAwXG4gICAgICApIHtcbiAgICAgICAgc2Vzc2lvblZhbHVlICs9IGVudHJ5LnZhbHVlO1xuICAgICAgICBzZXNzaW9uRW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNlc3Npb25WYWx1ZSA9IGVudHJ5LnZhbHVlO1xuICAgICAgICBzZXNzaW9uRW50cmllcyA9IFtlbnRyeV07XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHRoZSBjdXJyZW50IHNlc3Npb24gdmFsdWUgaXMgbGFyZ2VyIHRoYW4gdGhlIGN1cnJlbnQgQ0xTIHZhbHVlLFxuICAgICAgLy8gdXBkYXRlIENMUyBhbmQgdGhlIGVudHJpZXMgY29udHJpYnV0aW5nIHRvIGl0LlxuICAgICAgaWYgKHNlc3Npb25WYWx1ZSA+IG1ldHJpYy52YWx1ZSkge1xuICAgICAgICBtZXRyaWMudmFsdWUgPSBzZXNzaW9uVmFsdWU7XG4gICAgICAgIG1ldHJpYy5lbnRyaWVzID0gc2Vzc2lvbkVudHJpZXM7XG4gICAgICAgIGlmIChyZXBvcnQpIHtcbiAgICAgICAgICByZXBvcnQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfTtcblxuICBjb25zdCBwbyA9IG9ic2VydmUoJ2xheW91dC1zaGlmdCcsIGVudHJ5SGFuZGxlciBhcyBQZXJmb3JtYW5jZUVudHJ5SGFuZGxlcik7XG4gIGlmIChwbykge1xuICAgIHJlcG9ydCA9IGJpbmRSZXBvcnRlcihvblJlcG9ydCwgbWV0cmljLCByZXBvcnRBbGxDaGFuZ2VzKTtcblxuICAgIG9uSGlkZGVuKCgpID0+IHtcbiAgICAgIHBvLnRha2VSZWNvcmRzKCkubWFwKGVudHJ5SGFuZGxlciBhcyBQZXJmb3JtYW5jZUVudHJ5SGFuZGxlcik7XG4gICAgICByZXBvcnQodHJ1ZSk7XG4gICAgfSk7XG4gIH1cbn07XG4iLCAiLypcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5pbXBvcnQgeyBvbkhpZGRlbiB9IGZyb20gJy4vb25IaWRkZW4nO1xuXG5sZXQgZmlyc3RIaWRkZW5UaW1lID0gLTE7XG5cbmNvbnN0IGluaXRIaWRkZW5UaW1lID0gKCk6IG51bWJlciA9PiB7XG4gIHJldHVybiBnZXRHbG9iYWxPYmplY3Q8V2luZG93PigpLmRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA9PT0gJ2hpZGRlbicgPyAwIDogSW5maW5pdHk7XG59O1xuXG5jb25zdCB0cmFja0NoYW5nZXMgPSAoKTogdm9pZCA9PiB7XG4gIC8vIFVwZGF0ZSB0aGUgdGltZSBpZi93aGVuIHRoZSBkb2N1bWVudCBiZWNvbWVzIGhpZGRlbi5cbiAgb25IaWRkZW4oKHsgdGltZVN0YW1wIH0pID0+IHtcbiAgICBmaXJzdEhpZGRlblRpbWUgPSB0aW1lU3RhbXA7XG4gIH0sIHRydWUpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFZpc2liaWxpdHlXYXRjaGVyID0gKCk6IHtcbiAgcmVhZG9ubHkgZmlyc3RIaWRkZW5UaW1lOiBudW1iZXI7XG59ID0+IHtcbiAgaWYgKGZpcnN0SGlkZGVuVGltZSA8IDApIHtcbiAgICAvLyBJZiB0aGUgZG9jdW1lbnQgaXMgaGlkZGVuIHdoZW4gdGhpcyBjb2RlIHJ1bnMsIGFzc3VtZSBpdCB3YXMgaGlkZGVuXG4gICAgLy8gc2luY2UgbmF2aWdhdGlvbiBzdGFydC4gVGhpcyBpc24ndCBhIHBlcmZlY3QgaGV1cmlzdGljLCBidXQgaXQncyB0aGVcbiAgICAvLyBiZXN0IHdlIGNhbiBkbyB1bnRpbCBhbiBBUEkgaXMgYXZhaWxhYmxlIHRvIHN1cHBvcnQgcXVlcnlpbmcgcGFzdFxuICAgIC8vIHZpc2liaWxpdHlTdGF0ZS5cbiAgICBmaXJzdEhpZGRlblRpbWUgPSBpbml0SGlkZGVuVGltZSgpO1xuICAgIHRyYWNrQ2hhbmdlcygpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZ2V0IGZpcnN0SGlkZGVuVGltZSgpIHtcbiAgICAgIHJldHVybiBmaXJzdEhpZGRlblRpbWU7XG4gICAgfSxcbiAgfTtcbn07XG4iLCAiLypcbiAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTENcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG5cbmltcG9ydCB7IGJpbmRSZXBvcnRlciB9IGZyb20gJy4vbGliL2JpbmRSZXBvcnRlcic7XG5pbXBvcnQgeyBnZXRWaXNpYmlsaXR5V2F0Y2hlciB9IGZyb20gJy4vbGliL2dldFZpc2liaWxpdHlXYXRjaGVyJztcbmltcG9ydCB7IGluaXRNZXRyaWMgfSBmcm9tICcuL2xpYi9pbml0TWV0cmljJztcbmltcG9ydCB7IG9ic2VydmUsIFBlcmZvcm1hbmNlRW50cnlIYW5kbGVyIH0gZnJvbSAnLi9saWIvb2JzZXJ2ZSc7XG5pbXBvcnQgeyBvbkhpZGRlbiB9IGZyb20gJy4vbGliL29uSGlkZGVuJztcbmltcG9ydCB7IFBlcmZvcm1hbmNlRXZlbnRUaW1pbmcsIFJlcG9ydEhhbmRsZXIgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IGNvbnN0IGdldEZJRCA9IChvblJlcG9ydDogUmVwb3J0SGFuZGxlciwgcmVwb3J0QWxsQ2hhbmdlcz86IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgY29uc3QgdmlzaWJpbGl0eVdhdGNoZXIgPSBnZXRWaXNpYmlsaXR5V2F0Y2hlcigpO1xuICBjb25zdCBtZXRyaWMgPSBpbml0TWV0cmljKCdGSUQnKTtcbiAgbGV0IHJlcG9ydDogUmV0dXJuVHlwZTx0eXBlb2YgYmluZFJlcG9ydGVyPjtcblxuICBjb25zdCBlbnRyeUhhbmRsZXIgPSAoZW50cnk6IFBlcmZvcm1hbmNlRXZlbnRUaW1pbmcpOiB2b2lkID0+IHtcbiAgICAvLyBPbmx5IHJlcG9ydCBpZiB0aGUgcGFnZSB3YXNuJ3QgaGlkZGVuIHByaW9yIHRvIHRoZSBmaXJzdCBpbnB1dC5cbiAgICBpZiAocmVwb3J0ICYmIGVudHJ5LnN0YXJ0VGltZSA8IHZpc2liaWxpdHlXYXRjaGVyLmZpcnN0SGlkZGVuVGltZSkge1xuICAgICAgbWV0cmljLnZhbHVlID0gZW50cnkucHJvY2Vzc2luZ1N0YXJ0IC0gZW50cnkuc3RhcnRUaW1lO1xuICAgICAgbWV0cmljLmVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgICByZXBvcnQodHJ1ZSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHBvID0gb2JzZXJ2ZSgnZmlyc3QtaW5wdXQnLCBlbnRyeUhhbmRsZXIgYXMgUGVyZm9ybWFuY2VFbnRyeUhhbmRsZXIpO1xuICBpZiAocG8pIHtcbiAgICByZXBvcnQgPSBiaW5kUmVwb3J0ZXIob25SZXBvcnQsIG1ldHJpYywgcmVwb3J0QWxsQ2hhbmdlcyk7XG4gICAgb25IaWRkZW4oKCkgPT4ge1xuICAgICAgcG8udGFrZVJlY29yZHMoKS5tYXAoZW50cnlIYW5kbGVyIGFzIFBlcmZvcm1hbmNlRW50cnlIYW5kbGVyKTtcbiAgICAgIHBvLmRpc2Nvbm5lY3QoKTtcbiAgICB9LCB0cnVlKTtcbiAgfVxufTtcbiIsICIvKlxuICogQ29weXJpZ2h0IDIwMjAgR29vZ2xlIExMQ1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgYmluZFJlcG9ydGVyIH0gZnJvbSAnLi9saWIvYmluZFJlcG9ydGVyJztcbmltcG9ydCB7IGdldFZpc2liaWxpdHlXYXRjaGVyIH0gZnJvbSAnLi9saWIvZ2V0VmlzaWJpbGl0eVdhdGNoZXInO1xuaW1wb3J0IHsgaW5pdE1ldHJpYyB9IGZyb20gJy4vbGliL2luaXRNZXRyaWMnO1xuaW1wb3J0IHsgb2JzZXJ2ZSwgUGVyZm9ybWFuY2VFbnRyeUhhbmRsZXIgfSBmcm9tICcuL2xpYi9vYnNlcnZlJztcbmltcG9ydCB7IG9uSGlkZGVuIH0gZnJvbSAnLi9saWIvb25IaWRkZW4nO1xuaW1wb3J0IHsgUmVwb3J0SGFuZGxlciB9IGZyb20gJy4vdHlwZXMnO1xuXG4vLyBodHRwczovL3dpY2cuZ2l0aHViLmlvL2xhcmdlc3QtY29udGVudGZ1bC1wYWludC8jc2VjLWxhcmdlc3QtY29udGVudGZ1bC1wYWludC1pbnRlcmZhY2VcbmV4cG9ydCBpbnRlcmZhY2UgTGFyZ2VzdENvbnRlbnRmdWxQYWludCBleHRlbmRzIFBlcmZvcm1hbmNlRW50cnkge1xuICByZW5kZXJUaW1lOiBET01IaWdoUmVzVGltZVN0YW1wO1xuICBsb2FkVGltZTogRE9NSGlnaFJlc1RpbWVTdGFtcDtcbiAgc2l6ZTogbnVtYmVyO1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgZWxlbWVudD86IEVsZW1lbnQ7XG4gIHRvSlNPTigpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG5jb25zdCByZXBvcnRlZE1ldHJpY0lEczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPSB7fTtcblxuZXhwb3J0IGNvbnN0IGdldExDUCA9IChvblJlcG9ydDogUmVwb3J0SGFuZGxlciwgcmVwb3J0QWxsQ2hhbmdlcz86IGJvb2xlYW4pOiB2b2lkID0+IHtcbiAgY29uc3QgdmlzaWJpbGl0eVdhdGNoZXIgPSBnZXRWaXNpYmlsaXR5V2F0Y2hlcigpO1xuICBjb25zdCBtZXRyaWMgPSBpbml0TWV0cmljKCdMQ1AnKTtcbiAgbGV0IHJlcG9ydDogUmV0dXJuVHlwZTx0eXBlb2YgYmluZFJlcG9ydGVyPjtcblxuICBjb25zdCBlbnRyeUhhbmRsZXIgPSAoZW50cnk6IFBlcmZvcm1hbmNlRW50cnkpOiB2b2lkID0+IHtcbiAgICAvLyBUaGUgc3RhcnRUaW1lIGF0dHJpYnV0ZSByZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGUgcmVuZGVyVGltZSBpZiBpdCBpcyBub3QgMCxcbiAgICAvLyBhbmQgdGhlIHZhbHVlIG9mIHRoZSBsb2FkVGltZSBvdGhlcndpc2UuXG4gICAgY29uc3QgdmFsdWUgPSBlbnRyeS5zdGFydFRpbWU7XG5cbiAgICAvLyBJZiB0aGUgcGFnZSB3YXMgaGlkZGVuIHByaW9yIHRvIHBhaW50IHRpbWUgb2YgdGhlIGVudHJ5LFxuICAgIC8vIGlnbm9yZSBpdCBhbmQgbWFyayB0aGUgbWV0cmljIGFzIGZpbmFsLCBvdGhlcndpc2UgYWRkIHRoZSBlbnRyeS5cbiAgICBpZiAodmFsdWUgPCB2aXNpYmlsaXR5V2F0Y2hlci5maXJzdEhpZGRlblRpbWUpIHtcbiAgICAgIG1ldHJpYy52YWx1ZSA9IHZhbHVlO1xuICAgICAgbWV0cmljLmVudHJpZXMucHVzaChlbnRyeSk7XG4gICAgfVxuXG4gICAgaWYgKHJlcG9ydCkge1xuICAgICAgcmVwb3J0KCk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IHBvID0gb2JzZXJ2ZSgnbGFyZ2VzdC1jb250ZW50ZnVsLXBhaW50JywgZW50cnlIYW5kbGVyKTtcblxuICBpZiAocG8pIHtcbiAgICByZXBvcnQgPSBiaW5kUmVwb3J0ZXIob25SZXBvcnQsIG1ldHJpYywgcmVwb3J0QWxsQ2hhbmdlcyk7XG5cbiAgICBjb25zdCBzdG9wTGlzdGVuaW5nID0gKCk6IHZvaWQgPT4ge1xuICAgICAgaWYgKCFyZXBvcnRlZE1ldHJpY0lEc1ttZXRyaWMuaWRdKSB7XG4gICAgICAgIHBvLnRha2VSZWNvcmRzKCkubWFwKGVudHJ5SGFuZGxlciBhcyBQZXJmb3JtYW5jZUVudHJ5SGFuZGxlcik7XG4gICAgICAgIHBvLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgcmVwb3J0ZWRNZXRyaWNJRHNbbWV0cmljLmlkXSA9IHRydWU7XG4gICAgICAgIHJlcG9ydCh0cnVlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gU3RvcCBsaXN0ZW5pbmcgYWZ0ZXIgaW5wdXQuIE5vdGU6IHdoaWxlIHNjcm9sbGluZyBpcyBhbiBpbnB1dCB0aGF0XG4gICAgLy8gc3RvcCBMQ1Agb2JzZXJ2YXRpb24sIGl0J3MgdW5yZWxpYWJsZSBzaW5jZSBpdCBjYW4gYmUgcHJvZ3JhbW1hdGljYWxseVxuICAgIC8vIGdlbmVyYXRlZC4gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vR29vZ2xlQ2hyb21lL3dlYi12aXRhbHMvaXNzdWVzLzc1XG4gICAgWydrZXlkb3duJywgJ2NsaWNrJ10uZm9yRWFjaCh0eXBlID0+IHtcbiAgICAgIGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgc3RvcExpc3RlbmluZywgeyBvbmNlOiB0cnVlLCBjYXB0dXJlOiB0cnVlIH0pO1xuICAgIH0pO1xuXG4gICAgb25IaWRkZW4oc3RvcExpc3RlbmluZywgdHJ1ZSk7XG4gIH1cbn07XG4iLCAiLyogZXNsaW50LWRpc2FibGUgbWF4LWxpbmVzICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG5pbXBvcnQgeyBNZWFzdXJlbWVudHMsIFNwYW5Db250ZXh0IH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBicm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luLCBnZXRHbG9iYWxPYmplY3QsIGh0bWxUcmVlQXNTdHJpbmcsIGlzTm9kZUVudiwgbG9nZ2VyIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmltcG9ydCB7IFNwYW4gfSBmcm9tICcuLi9zcGFuJztcbmltcG9ydCB7IFRyYW5zYWN0aW9uIH0gZnJvbSAnLi4vdHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgbXNUb1NlYyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IGdldENMUywgTGF5b3V0U2hpZnQgfSBmcm9tICcuL3dlYi12aXRhbHMvZ2V0Q0xTJztcbmltcG9ydCB7IGdldEZJRCB9IGZyb20gJy4vd2ViLXZpdGFscy9nZXRGSUQnO1xuaW1wb3J0IHsgZ2V0TENQLCBMYXJnZXN0Q29udGVudGZ1bFBhaW50IH0gZnJvbSAnLi93ZWItdml0YWxzL2dldExDUCc7XG5pbXBvcnQgeyBnZXRWaXNpYmlsaXR5V2F0Y2hlciB9IGZyb20gJy4vd2ViLXZpdGFscy9saWIvZ2V0VmlzaWJpbGl0eVdhdGNoZXInO1xuaW1wb3J0IHsgTmF2aWdhdG9yRGV2aWNlTWVtb3J5LCBOYXZpZ2F0b3JOZXR3b3JrSW5mb3JtYXRpb24gfSBmcm9tICcuL3dlYi12aXRhbHMvdHlwZXMnO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWxPYmplY3Q8V2luZG93PigpO1xuXG4vKiogQ2xhc3MgdHJhY2tpbmcgbWV0cmljcyAgKi9cbmV4cG9ydCBjbGFzcyBNZXRyaWNzSW5zdHJ1bWVudGF0aW9uIHtcbiAgcHJpdmF0ZSBfbWVhc3VyZW1lbnRzOiBNZWFzdXJlbWVudHMgPSB7fTtcblxuICBwcml2YXRlIF9wZXJmb3JtYW5jZUN1cnNvcjogbnVtYmVyID0gMDtcbiAgcHJpdmF0ZSBfbGNwRW50cnk6IExhcmdlc3RDb250ZW50ZnVsUGFpbnQgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgX2Nsc0VudHJ5OiBMYXlvdXRTaGlmdCB8IHVuZGVmaW5lZDtcblxuICBwdWJsaWMgY29uc3RydWN0b3IocHJpdmF0ZSBfcmVwb3J0QWxsQ2hhbmdlczogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgaWYgKCFpc05vZGVFbnYoKSAmJiBnbG9iYWw/LnBlcmZvcm1hbmNlICYmIGdsb2JhbD8uZG9jdW1lbnQpIHtcbiAgICAgIGlmIChnbG9iYWwucGVyZm9ybWFuY2UubWFyaykge1xuICAgICAgICBnbG9iYWwucGVyZm9ybWFuY2UubWFyaygnc2VudHJ5LXRyYWNpbmctaW5pdCcpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl90cmFja0NMUygpO1xuICAgICAgdGhpcy5fdHJhY2tMQ1AoKTtcbiAgICAgIHRoaXMuX3RyYWNrRklEKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqIEFkZCBwZXJmb3JtYW5jZSByZWxhdGVkIHNwYW5zIHRvIGEgdHJhbnNhY3Rpb24gKi9cbiAgcHVibGljIGFkZFBlcmZvcm1hbmNlRW50cmllcyh0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBpZiAoIWdsb2JhbCB8fCAhZ2xvYmFsLnBlcmZvcm1hbmNlIHx8ICFnbG9iYWwucGVyZm9ybWFuY2UuZ2V0RW50cmllcyB8fCAhYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbikge1xuICAgICAgLy8gR2F0ZWtlZXBlciBpZiBwZXJmb3JtYW5jZSBBUEkgbm90IGF2YWlsYWJsZVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxvZ2dlci5sb2coJ1tUcmFjaW5nXSBBZGRpbmcgJiBhZGp1c3Rpbmcgc3BhbnMgdXNpbmcgUGVyZm9ybWFuY2UgQVBJJyk7XG5cbiAgICBjb25zdCB0aW1lT3JpZ2luID0gbXNUb1NlYyhicm93c2VyUGVyZm9ybWFuY2VUaW1lT3JpZ2luKTtcbiAgICBsZXQgZW50cnlTY3JpcHRTcmM6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICAgIGlmIChnbG9iYWwuZG9jdW1lbnQgJiYgZ2xvYmFsLmRvY3VtZW50LnNjcmlwdHMpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvcHJlZmVyLWZvci1vZlxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBnbG9iYWwuZG9jdW1lbnQuc2NyaXB0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBXZSBnbyB0aHJvdWdoIGFsbCBzY3JpcHRzIG9uIHRoZSBwYWdlIGFuZCBsb29rIGZvciAnZGF0YS1lbnRyeSdcbiAgICAgICAgLy8gV2UgcmVtZW1iZXIgdGhlIG5hbWUgYW5kIG1lYXN1cmUgdGhlIHRpbWUgYmV0d2VlbiB0aGlzIHNjcmlwdCBmaW5pc2hlZCBsb2FkaW5nIGFuZFxuICAgICAgICAvLyBvdXIgbWFyayAnc2VudHJ5LXRyYWNpbmctaW5pdCdcbiAgICAgICAgaWYgKGdsb2JhbC5kb2N1bWVudC5zY3JpcHRzW2ldLmRhdGFzZXQuZW50cnkgPT09ICd0cnVlJykge1xuICAgICAgICAgIGVudHJ5U2NyaXB0U3JjID0gZ2xvYmFsLmRvY3VtZW50LnNjcmlwdHNbaV0uc3JjO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IGVudHJ5U2NyaXB0U3RhcnRUaW1lc3RhbXA6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICBsZXQgdHJhY2luZ0luaXRNYXJrU3RhcnRUaW1lOiBudW1iZXIgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHJlc3BvbnNlU3RhcnRUaW1lc3RhbXA6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICBsZXQgcmVxdWVzdFN0YXJ0VGltZXN0YW1wOiBudW1iZXIgfCB1bmRlZmluZWQ7XG5cbiAgICBnbG9iYWwucGVyZm9ybWFuY2VcbiAgICAgIC5nZXRFbnRyaWVzKClcbiAgICAgIC5zbGljZSh0aGlzLl9wZXJmb3JtYW5jZUN1cnNvcilcbiAgICAgIC5mb3JFYWNoKChlbnRyeTogUmVjb3JkPHN0cmluZywgYW55PikgPT4ge1xuICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBtc1RvU2VjKGVudHJ5LnN0YXJ0VGltZSBhcyBudW1iZXIpO1xuICAgICAgICBjb25zdCBkdXJhdGlvbiA9IG1zVG9TZWMoZW50cnkuZHVyYXRpb24gYXMgbnVtYmVyKTtcblxuICAgICAgICBpZiAodHJhbnNhY3Rpb24ub3AgPT09ICduYXZpZ2F0aW9uJyAmJiB0aW1lT3JpZ2luICsgc3RhcnRUaW1lIDwgdHJhbnNhY3Rpb24uc3RhcnRUaW1lc3RhbXApIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKGVudHJ5LmVudHJ5VHlwZSkge1xuICAgICAgICAgIGNhc2UgJ25hdmlnYXRpb24nOiB7XG4gICAgICAgICAgICBhZGROYXZpZ2F0aW9uU3BhbnModHJhbnNhY3Rpb24sIGVudHJ5LCB0aW1lT3JpZ2luKTtcbiAgICAgICAgICAgIHJlc3BvbnNlU3RhcnRUaW1lc3RhbXAgPSB0aW1lT3JpZ2luICsgbXNUb1NlYyhlbnRyeS5yZXNwb25zZVN0YXJ0IGFzIG51bWJlcik7XG4gICAgICAgICAgICByZXF1ZXN0U3RhcnRUaW1lc3RhbXAgPSB0aW1lT3JpZ2luICsgbXNUb1NlYyhlbnRyeS5yZXF1ZXN0U3RhcnQgYXMgbnVtYmVyKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjYXNlICdtYXJrJzpcbiAgICAgICAgICBjYXNlICdwYWludCc6XG4gICAgICAgICAgY2FzZSAnbWVhc3VyZSc6IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXJ0VGltZXN0YW1wID0gYWRkTWVhc3VyZVNwYW5zKHRyYW5zYWN0aW9uLCBlbnRyeSwgc3RhcnRUaW1lLCBkdXJhdGlvbiwgdGltZU9yaWdpbik7XG4gICAgICAgICAgICBpZiAodHJhY2luZ0luaXRNYXJrU3RhcnRUaW1lID09PSB1bmRlZmluZWQgJiYgZW50cnkubmFtZSA9PT0gJ3NlbnRyeS10cmFjaW5nLWluaXQnKSB7XG4gICAgICAgICAgICAgIHRyYWNpbmdJbml0TWFya1N0YXJ0VGltZSA9IHN0YXJ0VGltZXN0YW1wO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBjYXB0dXJlIHdlYiB2aXRhbHNcblxuICAgICAgICAgICAgY29uc3QgZmlyc3RIaWRkZW4gPSBnZXRWaXNpYmlsaXR5V2F0Y2hlcigpO1xuICAgICAgICAgICAgLy8gT25seSByZXBvcnQgaWYgdGhlIHBhZ2Ugd2Fzbid0IGhpZGRlbiBwcmlvciB0byB0aGUgd2ViIHZpdGFsLlxuICAgICAgICAgICAgY29uc3Qgc2hvdWxkUmVjb3JkID0gZW50cnkuc3RhcnRUaW1lIDwgZmlyc3RIaWRkZW4uZmlyc3RIaWRkZW5UaW1lO1xuXG4gICAgICAgICAgICBpZiAoZW50cnkubmFtZSA9PT0gJ2ZpcnN0LXBhaW50JyAmJiBzaG91bGRSZWNvcmQpIHtcbiAgICAgICAgICAgICAgbG9nZ2VyLmxvZygnW01lYXN1cmVtZW50c10gQWRkaW5nIEZQJyk7XG4gICAgICAgICAgICAgIHRoaXMuX21lYXN1cmVtZW50c1snZnAnXSA9IHsgdmFsdWU6IGVudHJ5LnN0YXJ0VGltZSB9O1xuICAgICAgICAgICAgICB0aGlzLl9tZWFzdXJlbWVudHNbJ21hcmsuZnAnXSA9IHsgdmFsdWU6IHN0YXJ0VGltZXN0YW1wIH07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbnRyeS5uYW1lID09PSAnZmlyc3QtY29udGVudGZ1bC1wYWludCcgJiYgc2hvdWxkUmVjb3JkKSB7XG4gICAgICAgICAgICAgIGxvZ2dlci5sb2coJ1tNZWFzdXJlbWVudHNdIEFkZGluZyBGQ1AnKTtcbiAgICAgICAgICAgICAgdGhpcy5fbWVhc3VyZW1lbnRzWydmY3AnXSA9IHsgdmFsdWU6IGVudHJ5LnN0YXJ0VGltZSB9O1xuICAgICAgICAgICAgICB0aGlzLl9tZWFzdXJlbWVudHNbJ21hcmsuZmNwJ10gPSB7IHZhbHVlOiBzdGFydFRpbWVzdGFtcCB9O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSAncmVzb3VyY2UnOiB7XG4gICAgICAgICAgICBjb25zdCByZXNvdXJjZU5hbWUgPSAoZW50cnkubmFtZSBhcyBzdHJpbmcpLnJlcGxhY2UoZ2xvYmFsLmxvY2F0aW9uLm9yaWdpbiwgJycpO1xuICAgICAgICAgICAgY29uc3QgZW5kVGltZXN0YW1wID0gYWRkUmVzb3VyY2VTcGFucyh0cmFuc2FjdGlvbiwgZW50cnksIHJlc291cmNlTmFtZSwgc3RhcnRUaW1lLCBkdXJhdGlvbiwgdGltZU9yaWdpbik7XG4gICAgICAgICAgICAvLyBXZSByZW1lbWJlciB0aGUgZW50cnkgc2NyaXB0IGVuZCB0aW1lIHRvIGNhbGN1bGF0ZSB0aGUgZGlmZmVyZW5jZSB0byB0aGUgZmlyc3QgaW5pdCBtYXJrXG4gICAgICAgICAgICBpZiAoZW50cnlTY3JpcHRTdGFydFRpbWVzdGFtcCA9PT0gdW5kZWZpbmVkICYmIChlbnRyeVNjcmlwdFNyYyB8fCAnJykuaW5kZXhPZihyZXNvdXJjZU5hbWUpID4gLTEpIHtcbiAgICAgICAgICAgICAgZW50cnlTY3JpcHRTdGFydFRpbWVzdGFtcCA9IGVuZFRpbWVzdGFtcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIC8vIElnbm9yZSBvdGhlciBlbnRyeSB0eXBlcy5cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICBpZiAoZW50cnlTY3JpcHRTdGFydFRpbWVzdGFtcCAhPT0gdW5kZWZpbmVkICYmIHRyYWNpbmdJbml0TWFya1N0YXJ0VGltZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBfc3RhcnRDaGlsZCh0cmFuc2FjdGlvbiwge1xuICAgICAgICBkZXNjcmlwdGlvbjogJ2V2YWx1YXRpb24nLFxuICAgICAgICBlbmRUaW1lc3RhbXA6IHRyYWNpbmdJbml0TWFya1N0YXJ0VGltZSxcbiAgICAgICAgb3A6ICdzY3JpcHQnLFxuICAgICAgICBzdGFydFRpbWVzdGFtcDogZW50cnlTY3JpcHRTdGFydFRpbWVzdGFtcCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX3BlcmZvcm1hbmNlQ3Vyc29yID0gTWF0aC5tYXgocGVyZm9ybWFuY2UuZ2V0RW50cmllcygpLmxlbmd0aCAtIDEsIDApO1xuXG4gICAgdGhpcy5fdHJhY2tOYXZpZ2F0b3IodHJhbnNhY3Rpb24pO1xuXG4gICAgLy8gTWVhc3VyZW1lbnRzIGFyZSBvbmx5IGF2YWlsYWJsZSBmb3IgcGFnZWxvYWQgdHJhbnNhY3Rpb25zXG4gICAgaWYgKHRyYW5zYWN0aW9uLm9wID09PSAncGFnZWxvYWQnKSB7XG4gICAgICAvLyBub3JtYWxpemUgYXBwbGljYWJsZSB3ZWIgdml0YWwgdmFsdWVzIHRvIGJlIHJlbGF0aXZlIHRvIHRyYW5zYWN0aW9uLnN0YXJ0VGltZXN0YW1wXG5cbiAgICAgIGNvbnN0IHRpbWVPcmlnaW4gPSBtc1RvU2VjKGJyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW4pO1xuXG4gICAgICAvLyBHZW5lcmF0ZSBUVEZCIChUaW1lIHRvIEZpcnN0IEJ5dGUpLCB3aGljaCBtZWFzdXJlZCBhcyB0aGUgdGltZSBiZXR3ZWVuIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHRyYW5zYWN0aW9uIGFuZCB0aGVcbiAgICAgIC8vIHN0YXJ0IG9mIHRoZSByZXNwb25zZSBpbiBtaWxsaXNlY29uZHNcbiAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2VTdGFydFRpbWVzdGFtcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgbG9nZ2VyLmxvZygnW01lYXN1cmVtZW50c10gQWRkaW5nIFRURkInKTtcbiAgICAgICAgdGhpcy5fbWVhc3VyZW1lbnRzWyd0dGZiJ10gPSB7IHZhbHVlOiAocmVzcG9uc2VTdGFydFRpbWVzdGFtcCAtIHRyYW5zYWN0aW9uLnN0YXJ0VGltZXN0YW1wKSAqIDEwMDAgfTtcblxuICAgICAgICBpZiAodHlwZW9mIHJlcXVlc3RTdGFydFRpbWVzdGFtcCA9PT0gJ251bWJlcicgJiYgcmVxdWVzdFN0YXJ0VGltZXN0YW1wIDw9IHJlc3BvbnNlU3RhcnRUaW1lc3RhbXApIHtcbiAgICAgICAgICAvLyBDYXB0dXJlIHRoZSB0aW1lIHNwZW50IG1ha2luZyB0aGUgcmVxdWVzdCBhbmQgcmVjZWl2aW5nIHRoZSBmaXJzdCBieXRlIG9mIHRoZSByZXNwb25zZS5cbiAgICAgICAgICAvLyBUaGlzIGlzIHRoZSB0aW1lIGJldHdlZW4gdGhlIHN0YXJ0IG9mIHRoZSByZXF1ZXN0IGFuZCB0aGUgc3RhcnQgb2YgdGhlIHJlc3BvbnNlIGluIG1pbGxpc2Vjb25kcy5cbiAgICAgICAgICB0aGlzLl9tZWFzdXJlbWVudHNbJ3R0ZmIucmVxdWVzdFRpbWUnXSA9IHsgdmFsdWU6IChyZXNwb25zZVN0YXJ0VGltZXN0YW1wIC0gcmVxdWVzdFN0YXJ0VGltZXN0YW1wKSAqIDEwMDAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBbJ2ZjcCcsICdmcCcsICdsY3AnXS5mb3JFYWNoKG5hbWUgPT4ge1xuICAgICAgICBpZiAoIXRoaXMuX21lYXN1cmVtZW50c1tuYW1lXSB8fCB0aW1lT3JpZ2luID49IHRyYW5zYWN0aW9uLnN0YXJ0VGltZXN0YW1wKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHdlYiB2aXRhbHMsIGZjcCwgZnAsIGxjcCwgYW5kIHR0ZmIsIGFsbCBtZWFzdXJlIHJlbGF0aXZlIHRvIHRpbWVPcmlnaW4uXG4gICAgICAgIC8vIFVuZm9ydHVuYXRlbHksIHRpbWVPcmlnaW4gaXMgbm90IGNhcHR1cmVkIHdpdGhpbiB0aGUgdHJhbnNhY3Rpb24gc3BhbiBkYXRhLCBzbyB0aGVzZSB3ZWIgdml0YWxzIHdpbGwgbmVlZFxuICAgICAgICAvLyB0byBiZSBhZGp1c3RlZCB0byBiZSByZWxhdGl2ZSB0byB0cmFuc2FjdGlvbi5zdGFydFRpbWVzdGFtcC5cblxuICAgICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuX21lYXN1cmVtZW50c1tuYW1lXS52YWx1ZTtcbiAgICAgICAgY29uc3QgbWVhc3VyZW1lbnRUaW1lc3RhbXAgPSB0aW1lT3JpZ2luICsgbXNUb1NlYyhvbGRWYWx1ZSk7XG4gICAgICAgIC8vIG5vcm1hbGl6ZWRWYWx1ZSBzaG91bGQgYmUgaW4gbWlsbGlzZWNvbmRzXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRWYWx1ZSA9IE1hdGguYWJzKChtZWFzdXJlbWVudFRpbWVzdGFtcCAtIHRyYW5zYWN0aW9uLnN0YXJ0VGltZXN0YW1wKSAqIDEwMDApO1xuXG4gICAgICAgIGNvbnN0IGRlbHRhID0gbm9ybWFsaXplZFZhbHVlIC0gb2xkVmFsdWU7XG4gICAgICAgIGxvZ2dlci5sb2coYFtNZWFzdXJlbWVudHNdIE5vcm1hbGl6ZWQgJHtuYW1lfSBmcm9tICR7b2xkVmFsdWV9IHRvICR7bm9ybWFsaXplZFZhbHVlfSAoJHtkZWx0YX0pYCk7XG5cbiAgICAgICAgdGhpcy5fbWVhc3VyZW1lbnRzW25hbWVdLnZhbHVlID0gbm9ybWFsaXplZFZhbHVlO1xuICAgICAgfSk7XG5cbiAgICAgIGlmICh0aGlzLl9tZWFzdXJlbWVudHNbJ21hcmsuZmlkJ10gJiYgdGhpcy5fbWVhc3VyZW1lbnRzWydmaWQnXSkge1xuICAgICAgICAvLyBjcmVhdGUgc3BhbiBmb3IgRklEXG5cbiAgICAgICAgX3N0YXJ0Q2hpbGQodHJhbnNhY3Rpb24sIHtcbiAgICAgICAgICBkZXNjcmlwdGlvbjogJ2ZpcnN0IGlucHV0IGRlbGF5JyxcbiAgICAgICAgICBlbmRUaW1lc3RhbXA6IHRoaXMuX21lYXN1cmVtZW50c1snbWFyay5maWQnXS52YWx1ZSArIG1zVG9TZWModGhpcy5fbWVhc3VyZW1lbnRzWydmaWQnXS52YWx1ZSksXG4gICAgICAgICAgb3A6ICd3ZWIudml0YWxzJyxcbiAgICAgICAgICBzdGFydFRpbWVzdGFtcDogdGhpcy5fbWVhc3VyZW1lbnRzWydtYXJrLmZpZCddLnZhbHVlLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgRkNQIGlzIG5vdCByZWNvcmRlZCB3ZSBzaG91bGQgbm90IHJlY29yZCB0aGUgY2xzIHZhbHVlXG4gICAgICAvLyBhY2NvcmRpbmcgdG8gdGhlIG5ldyBkZWZpbml0aW9uIG9mIENMUy5cbiAgICAgIGlmICghKCdmY3AnIGluIHRoaXMuX21lYXN1cmVtZW50cykpIHtcbiAgICAgICAgZGVsZXRlIHRoaXMuX21lYXN1cmVtZW50cy5jbHM7XG4gICAgICB9XG5cbiAgICAgIHRyYW5zYWN0aW9uLnNldE1lYXN1cmVtZW50cyh0aGlzLl9tZWFzdXJlbWVudHMpO1xuICAgICAgdGhpcy5fdGFnTWV0cmljSW5mbyh0cmFuc2FjdGlvbik7XG5cbiAgICAgIHRyYW5zYWN0aW9uLnNldFRhZygnc2VudHJ5X3JlcG9ydEFsbENoYW5nZXMnLCB0aGlzLl9yZXBvcnRBbGxDaGFuZ2VzKTtcbiAgICB9XG4gIH1cblxuICAvKiogQWRkIExDUCAvIENMUyBkYXRhIHRvIHRyYW5zYWN0aW9uIHRvIGFsbG93IGRlYnVnZ2luZyAqL1xuICBwcml2YXRlIF90YWdNZXRyaWNJbmZvKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbik6IHZvaWQge1xuICAgIGlmICh0aGlzLl9sY3BFbnRyeSkge1xuICAgICAgbG9nZ2VyLmxvZygnW01lYXN1cmVtZW50c10gQWRkaW5nIExDUCBEYXRhJyk7XG4gICAgICAvLyBDYXB0dXJlIFByb3BlcnRpZXMgb2YgdGhlIExDUCBlbGVtZW50IHRoYXQgY29udHJpYnV0ZXMgdG8gdGhlIExDUC5cblxuICAgICAgaWYgKHRoaXMuX2xjcEVudHJ5LmVsZW1lbnQpIHtcbiAgICAgICAgdHJhbnNhY3Rpb24uc2V0VGFnKCdsY3AuZWxlbWVudCcsIGh0bWxUcmVlQXNTdHJpbmcodGhpcy5fbGNwRW50cnkuZWxlbWVudCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fbGNwRW50cnkuaWQpIHtcbiAgICAgICAgdHJhbnNhY3Rpb24uc2V0VGFnKCdsY3AuaWQnLCB0aGlzLl9sY3BFbnRyeS5pZCk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9sY3BFbnRyeS51cmwpIHtcbiAgICAgICAgLy8gVHJpbSBVUkwgdG8gdGhlIGZpcnN0IDIwMCBjaGFyYWN0ZXJzLlxuICAgICAgICB0cmFuc2FjdGlvbi5zZXRUYWcoJ2xjcC51cmwnLCB0aGlzLl9sY3BFbnRyeS51cmwudHJpbSgpLnNsaWNlKDAsIDIwMCkpO1xuICAgICAgfVxuXG4gICAgICB0cmFuc2FjdGlvbi5zZXRUYWcoJ2xjcC5zaXplJywgdGhpcy5fbGNwRW50cnkuc2l6ZSk7XG4gICAgfVxuXG4gICAgLy8gU2VlOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvTGF5b3V0U2hpZnRcbiAgICBpZiAodGhpcy5fY2xzRW50cnkgJiYgdGhpcy5fY2xzRW50cnkuc291cmNlcykge1xuICAgICAgbG9nZ2VyLmxvZygnW01lYXN1cmVtZW50c10gQWRkaW5nIENMUyBEYXRhJyk7XG4gICAgICB0aGlzLl9jbHNFbnRyeS5zb3VyY2VzLmZvckVhY2goKHNvdXJjZSwgaW5kZXgpID0+XG4gICAgICAgIHRyYW5zYWN0aW9uLnNldFRhZyhgY2xzLnNvdXJjZS4ke2luZGV4ICsgMX1gLCBodG1sVHJlZUFzU3RyaW5nKHNvdXJjZS5ub2RlKSksXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBTdGFydHMgdHJhY2tpbmcgdGhlIEN1bXVsYXRpdmUgTGF5b3V0IFNoaWZ0IG9uIHRoZSBjdXJyZW50IHBhZ2UuICovXG4gIHByaXZhdGUgX3RyYWNrQ0xTKCk6IHZvaWQge1xuICAgIC8vIFNlZTpcbiAgICAvLyBodHRwczovL3dlYi5kZXYvZXZvbHZpbmctY2xzL1xuICAgIC8vIGh0dHBzOi8vd2ViLmRldi9jbHMtd2ViLXRvb2xpbmcvXG4gICAgZ2V0Q0xTKG1ldHJpYyA9PiB7XG4gICAgICBjb25zdCBlbnRyeSA9IG1ldHJpYy5lbnRyaWVzLnBvcCgpO1xuICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxvZ2dlci5sb2coJ1tNZWFzdXJlbWVudHNdIEFkZGluZyBDTFMnKTtcbiAgICAgIHRoaXMuX21lYXN1cmVtZW50c1snY2xzJ10gPSB7IHZhbHVlOiBtZXRyaWMudmFsdWUgfTtcbiAgICAgIHRoaXMuX2Nsc0VudHJ5ID0gZW50cnkgYXMgTGF5b3V0U2hpZnQ7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FwdHVyZSB0aGUgaW5mb3JtYXRpb24gb2YgdGhlIHVzZXIgYWdlbnQuXG4gICAqL1xuICBwcml2YXRlIF90cmFja05hdmlnYXRvcih0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb24pOiB2b2lkIHtcbiAgICBjb25zdCBuYXZpZ2F0b3IgPSBnbG9iYWwubmF2aWdhdG9yIGFzIG51bGwgfCAoTmF2aWdhdG9yICYgTmF2aWdhdG9yTmV0d29ya0luZm9ybWF0aW9uICYgTmF2aWdhdG9yRGV2aWNlTWVtb3J5KTtcbiAgICBpZiAoIW5hdmlnYXRvcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHRyYWNrIG5ldHdvcmsgY29ubmVjdGl2aXR5XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IG5hdmlnYXRvci5jb25uZWN0aW9uO1xuICAgIGlmIChjb25uZWN0aW9uKSB7XG4gICAgICBpZiAoY29ubmVjdGlvbi5lZmZlY3RpdmVUeXBlKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uLnNldFRhZygnZWZmZWN0aXZlQ29ubmVjdGlvblR5cGUnLCBjb25uZWN0aW9uLmVmZmVjdGl2ZVR5cGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29ubmVjdGlvbi50eXBlKSB7XG4gICAgICAgIHRyYW5zYWN0aW9uLnNldFRhZygnY29ubmVjdGlvblR5cGUnLCBjb25uZWN0aW9uLnR5cGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAoaXNNZWFzdXJlbWVudFZhbHVlKGNvbm5lY3Rpb24ucnR0KSkge1xuICAgICAgICB0aGlzLl9tZWFzdXJlbWVudHNbJ2Nvbm5lY3Rpb24ucnR0J10gPSB7IHZhbHVlOiBjb25uZWN0aW9uLnJ0dCBhcyBudW1iZXIgfTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTWVhc3VyZW1lbnRWYWx1ZShjb25uZWN0aW9uLmRvd25saW5rKSkge1xuICAgICAgICB0aGlzLl9tZWFzdXJlbWVudHNbJ2Nvbm5lY3Rpb24uZG93bmxpbmsnXSA9IHsgdmFsdWU6IGNvbm5lY3Rpb24uZG93bmxpbmsgYXMgbnVtYmVyIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlzTWVhc3VyZW1lbnRWYWx1ZShuYXZpZ2F0b3IuZGV2aWNlTWVtb3J5KSkge1xuICAgICAgdHJhbnNhY3Rpb24uc2V0VGFnKCdkZXZpY2VNZW1vcnknLCBTdHJpbmcobmF2aWdhdG9yLmRldmljZU1lbW9yeSkpO1xuICAgIH1cblxuICAgIGlmIChpc01lYXN1cmVtZW50VmFsdWUobmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3kpKSB7XG4gICAgICB0cmFuc2FjdGlvbi5zZXRUYWcoJ2hhcmR3YXJlQ29uY3VycmVuY3knLCBTdHJpbmcobmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3kpKTtcbiAgICB9XG4gIH1cblxuICAvKiogU3RhcnRzIHRyYWNraW5nIHRoZSBMYXJnZXN0IENvbnRlbnRmdWwgUGFpbnQgb24gdGhlIGN1cnJlbnQgcGFnZS4gKi9cbiAgcHJpdmF0ZSBfdHJhY2tMQ1AoKTogdm9pZCB7XG4gICAgZ2V0TENQKG1ldHJpYyA9PiB7XG4gICAgICBjb25zdCBlbnRyeSA9IG1ldHJpYy5lbnRyaWVzLnBvcCgpO1xuXG4gICAgICBpZiAoIWVudHJ5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgdGltZU9yaWdpbiA9IG1zVG9TZWMoYnJvd3NlclBlcmZvcm1hbmNlVGltZU9yaWdpbiBhcyBudW1iZXIpO1xuICAgICAgY29uc3Qgc3RhcnRUaW1lID0gbXNUb1NlYyhlbnRyeS5zdGFydFRpbWUgYXMgbnVtYmVyKTtcbiAgICAgIGxvZ2dlci5sb2coJ1tNZWFzdXJlbWVudHNdIEFkZGluZyBMQ1AnKTtcbiAgICAgIHRoaXMuX21lYXN1cmVtZW50c1snbGNwJ10gPSB7IHZhbHVlOiBtZXRyaWMudmFsdWUgfTtcbiAgICAgIHRoaXMuX21lYXN1cmVtZW50c1snbWFyay5sY3AnXSA9IHsgdmFsdWU6IHRpbWVPcmlnaW4gKyBzdGFydFRpbWUgfTtcbiAgICAgIHRoaXMuX2xjcEVudHJ5ID0gZW50cnkgYXMgTGFyZ2VzdENvbnRlbnRmdWxQYWludDtcbiAgICB9LCB0aGlzLl9yZXBvcnRBbGxDaGFuZ2VzKTtcbiAgfVxuXG4gIC8qKiBTdGFydHMgdHJhY2tpbmcgdGhlIEZpcnN0IElucHV0IERlbGF5IG9uIHRoZSBjdXJyZW50IHBhZ2UuICovXG4gIHByaXZhdGUgX3RyYWNrRklEKCk6IHZvaWQge1xuICAgIGdldEZJRChtZXRyaWMgPT4ge1xuICAgICAgY29uc3QgZW50cnkgPSBtZXRyaWMuZW50cmllcy5wb3AoKTtcblxuICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHRpbWVPcmlnaW4gPSBtc1RvU2VjKGJyb3dzZXJQZXJmb3JtYW5jZVRpbWVPcmlnaW4gYXMgbnVtYmVyKTtcbiAgICAgIGNvbnN0IHN0YXJ0VGltZSA9IG1zVG9TZWMoZW50cnkuc3RhcnRUaW1lIGFzIG51bWJlcik7XG4gICAgICBsb2dnZXIubG9nKCdbTWVhc3VyZW1lbnRzXSBBZGRpbmcgRklEJyk7XG4gICAgICB0aGlzLl9tZWFzdXJlbWVudHNbJ2ZpZCddID0geyB2YWx1ZTogbWV0cmljLnZhbHVlIH07XG4gICAgICB0aGlzLl9tZWFzdXJlbWVudHNbJ21hcmsuZmlkJ10gPSB7IHZhbHVlOiB0aW1lT3JpZ2luICsgc3RhcnRUaW1lIH07XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqIEluc3RydW1lbnQgbmF2aWdhdGlvbiBlbnRyaWVzICovXG5mdW5jdGlvbiBhZGROYXZpZ2F0aW9uU3BhbnModHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uLCBlbnRyeTogUmVjb3JkPHN0cmluZywgYW55PiwgdGltZU9yaWdpbjogbnVtYmVyKTogdm9pZCB7XG4gIGFkZFBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWluZyh7IHRyYW5zYWN0aW9uLCBlbnRyeSwgZXZlbnQ6ICd1bmxvYWRFdmVudCcsIHRpbWVPcmlnaW4gfSk7XG4gIGFkZFBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWluZyh7IHRyYW5zYWN0aW9uLCBlbnRyeSwgZXZlbnQ6ICdyZWRpcmVjdCcsIHRpbWVPcmlnaW4gfSk7XG4gIGFkZFBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWluZyh7IHRyYW5zYWN0aW9uLCBlbnRyeSwgZXZlbnQ6ICdkb21Db250ZW50TG9hZGVkRXZlbnQnLCB0aW1lT3JpZ2luIH0pO1xuICBhZGRQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmcoeyB0cmFuc2FjdGlvbiwgZW50cnksIGV2ZW50OiAnbG9hZEV2ZW50JywgdGltZU9yaWdpbiB9KTtcbiAgYWRkUGVyZm9ybWFuY2VOYXZpZ2F0aW9uVGltaW5nKHsgdHJhbnNhY3Rpb24sIGVudHJ5LCBldmVudDogJ2Nvbm5lY3QnLCB0aW1lT3JpZ2luIH0pO1xuICBhZGRQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmcoe1xuICAgIHRyYW5zYWN0aW9uLFxuICAgIGVudHJ5LFxuICAgIGV2ZW50OiAnc2VjdXJlQ29ubmVjdGlvbicsXG4gICAgdGltZU9yaWdpbixcbiAgICBldmVudEVuZDogJ2Nvbm5lY3RFbmQnLFxuICAgIGRlc2NyaXB0aW9uOiAnVExTL1NTTCcsXG4gIH0pO1xuICBhZGRQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmcoe1xuICAgIHRyYW5zYWN0aW9uLFxuICAgIGVudHJ5LFxuICAgIGV2ZW50OiAnZmV0Y2gnLFxuICAgIHRpbWVPcmlnaW4sXG4gICAgZXZlbnRFbmQ6ICdkb21haW5Mb29rdXBTdGFydCcsXG4gICAgZGVzY3JpcHRpb246ICdjYWNoZScsXG4gIH0pO1xuICBhZGRQZXJmb3JtYW5jZU5hdmlnYXRpb25UaW1pbmcoeyB0cmFuc2FjdGlvbiwgZW50cnksIGV2ZW50OiAnZG9tYWluTG9va3VwJywgdGltZU9yaWdpbiwgZGVzY3JpcHRpb246ICdETlMnIH0pO1xuICBhZGRSZXF1ZXN0KHRyYW5zYWN0aW9uLCBlbnRyeSwgdGltZU9yaWdpbik7XG59XG5cbi8qKiBDcmVhdGUgbWVhc3VyZSByZWxhdGVkIHNwYW5zICovXG5mdW5jdGlvbiBhZGRNZWFzdXJlU3BhbnMoXG4gIHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbixcbiAgZW50cnk6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gIHN0YXJ0VGltZTogbnVtYmVyLFxuICBkdXJhdGlvbjogbnVtYmVyLFxuICB0aW1lT3JpZ2luOiBudW1iZXIsXG4pOiBudW1iZXIge1xuICBjb25zdCBtZWFzdXJlU3RhcnRUaW1lc3RhbXAgPSB0aW1lT3JpZ2luICsgc3RhcnRUaW1lO1xuICBjb25zdCBtZWFzdXJlRW5kVGltZXN0YW1wID0gbWVhc3VyZVN0YXJ0VGltZXN0YW1wICsgZHVyYXRpb247XG5cbiAgX3N0YXJ0Q2hpbGQodHJhbnNhY3Rpb24sIHtcbiAgICBkZXNjcmlwdGlvbjogZW50cnkubmFtZSBhcyBzdHJpbmcsXG4gICAgZW5kVGltZXN0YW1wOiBtZWFzdXJlRW5kVGltZXN0YW1wLFxuICAgIG9wOiBlbnRyeS5lbnRyeVR5cGUgYXMgc3RyaW5nLFxuICAgIHN0YXJ0VGltZXN0YW1wOiBtZWFzdXJlU3RhcnRUaW1lc3RhbXAsXG4gIH0pO1xuXG4gIHJldHVybiBtZWFzdXJlU3RhcnRUaW1lc3RhbXA7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUmVzb3VyY2VFbnRyeSBleHRlbmRzIFJlY29yZDxzdHJpbmcsIHVua25vd24+IHtcbiAgaW5pdGlhdG9yVHlwZT86IHN0cmluZztcbiAgdHJhbnNmZXJTaXplPzogbnVtYmVyO1xuICBlbmNvZGVkQm9keVNpemU/OiBudW1iZXI7XG4gIGRlY29kZWRCb2R5U2l6ZT86IG51bWJlcjtcbn1cblxuLyoqIENyZWF0ZSByZXNvdXJjZS1yZWxhdGVkIHNwYW5zICovXG5leHBvcnQgZnVuY3Rpb24gYWRkUmVzb3VyY2VTcGFucyhcbiAgdHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uLFxuICBlbnRyeTogUmVzb3VyY2VFbnRyeSxcbiAgcmVzb3VyY2VOYW1lOiBzdHJpbmcsXG4gIHN0YXJ0VGltZTogbnVtYmVyLFxuICBkdXJhdGlvbjogbnVtYmVyLFxuICB0aW1lT3JpZ2luOiBudW1iZXIsXG4pOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAvLyB3ZSBhbHJlYWR5IGluc3RydW1lbnQgYmFzZWQgb24gZmV0Y2ggYW5kIHhociwgc28gd2UgZG9uJ3QgbmVlZCB0b1xuICAvLyBkdXBsaWNhdGUgc3BhbnMgaGVyZS5cbiAgaWYgKGVudHJ5LmluaXRpYXRvclR5cGUgPT09ICd4bWxodHRwcmVxdWVzdCcgfHwgZW50cnkuaW5pdGlhdG9yVHlwZSA9PT0gJ2ZldGNoJykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG4gIGlmICgndHJhbnNmZXJTaXplJyBpbiBlbnRyeSkge1xuICAgIGRhdGFbJ1RyYW5zZmVyIFNpemUnXSA9IGVudHJ5LnRyYW5zZmVyU2l6ZTtcbiAgfVxuICBpZiAoJ2VuY29kZWRCb2R5U2l6ZScgaW4gZW50cnkpIHtcbiAgICBkYXRhWydFbmNvZGVkIEJvZHkgU2l6ZSddID0gZW50cnkuZW5jb2RlZEJvZHlTaXplO1xuICB9XG4gIGlmICgnZGVjb2RlZEJvZHlTaXplJyBpbiBlbnRyeSkge1xuICAgIGRhdGFbJ0RlY29kZWQgQm9keSBTaXplJ10gPSBlbnRyeS5kZWNvZGVkQm9keVNpemU7XG4gIH1cblxuICBjb25zdCBzdGFydFRpbWVzdGFtcCA9IHRpbWVPcmlnaW4gKyBzdGFydFRpbWU7XG4gIGNvbnN0IGVuZFRpbWVzdGFtcCA9IHN0YXJ0VGltZXN0YW1wICsgZHVyYXRpb247XG5cbiAgX3N0YXJ0Q2hpbGQodHJhbnNhY3Rpb24sIHtcbiAgICBkZXNjcmlwdGlvbjogcmVzb3VyY2VOYW1lLFxuICAgIGVuZFRpbWVzdGFtcCxcbiAgICBvcDogZW50cnkuaW5pdGlhdG9yVHlwZSA/IGByZXNvdXJjZS4ke2VudHJ5LmluaXRpYXRvclR5cGV9YCA6ICdyZXNvdXJjZScsXG4gICAgc3RhcnRUaW1lc3RhbXAsXG4gICAgZGF0YSxcbiAgfSk7XG5cbiAgcmV0dXJuIGVuZFRpbWVzdGFtcDtcbn1cblxuLyoqIENyZWF0ZSBwZXJmb3JtYW5jZSBuYXZpZ2F0aW9uIHJlbGF0ZWQgc3BhbnMgKi9cbmZ1bmN0aW9uIGFkZFBlcmZvcm1hbmNlTmF2aWdhdGlvblRpbWluZyhwcm9wczoge1xuICB0cmFuc2FjdGlvbjogVHJhbnNhY3Rpb247XG4gIGVudHJ5OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBldmVudDogc3RyaW5nO1xuICB0aW1lT3JpZ2luOiBudW1iZXI7XG4gIGV2ZW50RW5kPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbn0pOiB2b2lkIHtcbiAgY29uc3QgeyB0cmFuc2FjdGlvbiwgZW50cnksIGV2ZW50LCB0aW1lT3JpZ2luLCBldmVudEVuZCwgZGVzY3JpcHRpb24gfSA9IHByb3BzO1xuXG4gIGNvbnN0IGVuZCA9IGV2ZW50RW5kID8gKGVudHJ5W2V2ZW50RW5kXSBhcyBudW1iZXIgfCB1bmRlZmluZWQpIDogKGVudHJ5W2Ake2V2ZW50fUVuZGBdIGFzIG51bWJlciB8IHVuZGVmaW5lZCk7XG4gIGNvbnN0IHN0YXJ0ID0gZW50cnlbYCR7ZXZlbnR9U3RhcnRgXSBhcyBudW1iZXIgfCB1bmRlZmluZWQ7XG4gIGlmICghc3RhcnQgfHwgIWVuZCkge1xuICAgIHJldHVybjtcbiAgfVxuICBfc3RhcnRDaGlsZCh0cmFuc2FjdGlvbiwge1xuICAgIG9wOiAnYnJvd3NlcicsXG4gICAgZGVzY3JpcHRpb246IGRlc2NyaXB0aW9uID8/IGV2ZW50LFxuICAgIHN0YXJ0VGltZXN0YW1wOiB0aW1lT3JpZ2luICsgbXNUb1NlYyhzdGFydCksXG4gICAgZW5kVGltZXN0YW1wOiB0aW1lT3JpZ2luICsgbXNUb1NlYyhlbmQpLFxuICB9KTtcbn1cblxuLyoqIENyZWF0ZSByZXF1ZXN0IGFuZCByZXNwb25zZSByZWxhdGVkIHNwYW5zICovXG5mdW5jdGlvbiBhZGRSZXF1ZXN0KHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbiwgZW50cnk6IFJlY29yZDxzdHJpbmcsIGFueT4sIHRpbWVPcmlnaW46IG51bWJlcik6IHZvaWQge1xuICBfc3RhcnRDaGlsZCh0cmFuc2FjdGlvbiwge1xuICAgIG9wOiAnYnJvd3NlcicsXG4gICAgZGVzY3JpcHRpb246ICdyZXF1ZXN0JyxcbiAgICBzdGFydFRpbWVzdGFtcDogdGltZU9yaWdpbiArIG1zVG9TZWMoZW50cnkucmVxdWVzdFN0YXJ0IGFzIG51bWJlciksXG4gICAgZW5kVGltZXN0YW1wOiB0aW1lT3JpZ2luICsgbXNUb1NlYyhlbnRyeS5yZXNwb25zZUVuZCBhcyBudW1iZXIpLFxuICB9KTtcblxuICBfc3RhcnRDaGlsZCh0cmFuc2FjdGlvbiwge1xuICAgIG9wOiAnYnJvd3NlcicsXG4gICAgZGVzY3JpcHRpb246ICdyZXNwb25zZScsXG4gICAgc3RhcnRUaW1lc3RhbXA6IHRpbWVPcmlnaW4gKyBtc1RvU2VjKGVudHJ5LnJlc3BvbnNlU3RhcnQgYXMgbnVtYmVyKSxcbiAgICBlbmRUaW1lc3RhbXA6IHRpbWVPcmlnaW4gKyBtc1RvU2VjKGVudHJ5LnJlc3BvbnNlRW5kIGFzIG51bWJlciksXG4gIH0pO1xufVxuXG4vKipcbiAqIEhlbHBlciBmdW5jdGlvbiB0byBzdGFydCBjaGlsZCBvbiB0cmFuc2FjdGlvbnMuIFRoaXMgZnVuY3Rpb24gd2lsbCBtYWtlIHN1cmUgdGhhdCB0aGUgdHJhbnNhY3Rpb24gd2lsbFxuICogdXNlIHRoZSBzdGFydCB0aW1lc3RhbXAgb2YgdGhlIGNyZWF0ZWQgY2hpbGQgc3BhbiBpZiBpdCBpcyBlYXJsaWVyIHRoYW4gdGhlIHRyYW5zYWN0aW9ucyBhY3R1YWxcbiAqIHN0YXJ0IHRpbWVzdGFtcC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9zdGFydENoaWxkKHRyYW5zYWN0aW9uOiBUcmFuc2FjdGlvbiwgeyBzdGFydFRpbWVzdGFtcCwgLi4uY3R4IH06IFNwYW5Db250ZXh0KTogU3BhbiB7XG4gIGlmIChzdGFydFRpbWVzdGFtcCAmJiB0cmFuc2FjdGlvbi5zdGFydFRpbWVzdGFtcCA+IHN0YXJ0VGltZXN0YW1wKSB7XG4gICAgdHJhbnNhY3Rpb24uc3RhcnRUaW1lc3RhbXAgPSBzdGFydFRpbWVzdGFtcDtcbiAgfVxuXG4gIHJldHVybiB0cmFuc2FjdGlvbi5zdGFydENoaWxkKHtcbiAgICBzdGFydFRpbWVzdGFtcCxcbiAgICAuLi5jdHgsXG4gIH0pO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGdpdmVuIHZhbHVlIGlzIGEgdmFsaWQgbWVhc3VyZW1lbnQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIGlzTWVhc3VyZW1lbnRWYWx1ZSh2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHZhbHVlKTtcbn1cbiIsICJpbXBvcnQgeyBhZGRJbnN0cnVtZW50YXRpb25IYW5kbGVyLCBpc0luc3RhbmNlT2YsIGlzTWF0Y2hpbmdQYXR0ZXJuIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmltcG9ydCB7IFNwYW4gfSBmcm9tICcuLi9zcGFuJztcbmltcG9ydCB7IFNwYW5TdGF0dXMgfSBmcm9tICcuLi9zcGFuc3RhdHVzJztcbmltcG9ydCB7IGdldEFjdGl2ZVRyYW5zYWN0aW9uLCBoYXNUcmFjaW5nRW5hYmxlZCB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGNvbnN0IERFRkFVTFRfVFJBQ0lOR19PUklHSU5TID0gWydsb2NhbGhvc3QnLCAvXlxcLy9dO1xuXG4vKiogT3B0aW9ucyBmb3IgUmVxdWVzdCBJbnN0cnVtZW50YXRpb24gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVxdWVzdEluc3RydW1lbnRhdGlvbk9wdGlvbnMge1xuICAvKipcbiAgICogTGlzdCBvZiBzdHJpbmdzIC8gcmVnZXggd2hlcmUgdGhlIGludGVncmF0aW9uIHNob3VsZCBjcmVhdGUgU3BhbnMgb3V0IG9mLiBBZGRpdGlvbmFsbHkgdGhpcyB3aWxsIGJlIHVzZWRcbiAgICogdG8gZGVmaW5lIHdoaWNoIG91dGdvaW5nIHJlcXVlc3RzIHRoZSBgc2VudHJ5LXRyYWNlYCBoZWFkZXIgd2lsbCBiZSBhdHRhY2hlZCB0by5cbiAgICpcbiAgICogRGVmYXVsdDogWydsb2NhbGhvc3QnLCAvXlxcLy9dIHtAc2VlIERFRkFVTFRfVFJBQ0lOR19PUklHSU5TfVxuICAgKi9cbiAgdHJhY2luZ09yaWdpbnM6IEFycmF5PHN0cmluZyB8IFJlZ0V4cD47XG5cbiAgLyoqXG4gICAqIEZsYWcgdG8gZGlzYWJsZSBwYXRjaGluZyBhbGwgdG9nZXRoZXIgZm9yIGZldGNoIHJlcXVlc3RzLlxuICAgKlxuICAgKiBEZWZhdWx0OiB0cnVlXG4gICAqL1xuICB0cmFjZUZldGNoOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBGbGFnIHRvIGRpc2FibGUgcGF0Y2hpbmcgYWxsIHRvZ2V0aGVyIGZvciB4aHIgcmVxdWVzdHMuXG4gICAqXG4gICAqIERlZmF1bHQ6IHRydWVcbiAgICovXG4gIHRyYWNlWEhSOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSBjcmVhdGluZyBhIHNwYW4gZm9yIGEgcmVxdWVzdCB3aXRoIHRoZSBnaXZlbiB1cmwuXG4gICAqIFJldHVybiBmYWxzZSBpZiB5b3UgZG9uJ3Qgd2FudCBhIHNwYW4gZm9yIHRoZSBnaXZlbiB1cmwuXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQgaXQgdXNlcyB0aGUgYHRyYWNpbmdPcmlnaW5zYCBvcHRpb25zIGFzIGEgdXJsIG1hdGNoLlxuICAgKi9cbiAgc2hvdWxkQ3JlYXRlU3BhbkZvclJlcXVlc3Q/KHVybDogc3RyaW5nKTogYm9vbGVhbjtcbn1cblxuLyoqIERhdGEgcmV0dXJuZWQgZnJvbSBmZXRjaCBjYWxsYmFjayAqL1xuZXhwb3J0IGludGVyZmFjZSBGZXRjaERhdGEge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBhcmdzOiBhbnlbXTsgLy8gdGhlIGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGZldGNoIGNhbGwgaXRzZWxmXG4gIGZldGNoRGF0YT86IHtcbiAgICBtZXRob2Q6IHN0cmluZztcbiAgICB1cmw6IHN0cmluZztcbiAgICAvLyBzcGFuX2lkXG4gICAgX19zcGFuPzogc3RyaW5nO1xuICB9O1xuXG4gIC8vIFRPRE8gU2hvdWxkIHRoaXMgYmUgdW5rbm93biBpbnN0ZWFkPyBJZiB3ZSB2ZW5kb3IgdHlwZXMsIG1ha2UgaXQgYSBSZXNwb25zZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICByZXNwb25zZT86IGFueTtcbiAgZXJyb3I/OiB1bmtub3duO1xuXG4gIHN0YXJ0VGltZXN0YW1wOiBudW1iZXI7XG4gIGVuZFRpbWVzdGFtcD86IG51bWJlcjtcbn1cblxuLyoqIERhdGEgcmV0dXJuZWQgZnJvbSBYSFIgcmVxdWVzdCAqL1xuZXhwb3J0IGludGVyZmFjZSBYSFJEYXRhIHtcbiAgeGhyPzoge1xuICAgIF9fc2VudHJ5X3hocl9fPzoge1xuICAgICAgbWV0aG9kOiBzdHJpbmc7XG4gICAgICB1cmw6IHN0cmluZztcbiAgICAgIHN0YXR1c19jb2RlOiBudW1iZXI7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgZGF0YTogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgICB9O1xuICAgIF9fc2VudHJ5X3hocl9zcGFuX2lkX18/OiBzdHJpbmc7XG4gICAgc2V0UmVxdWVzdEhlYWRlcj86IChrZXk6IHN0cmluZywgdmFsOiBzdHJpbmcpID0+IHZvaWQ7XG4gICAgX19zZW50cnlfb3duX3JlcXVlc3RfXz86IGJvb2xlYW47XG4gIH07XG4gIHN0YXJ0VGltZXN0YW1wOiBudW1iZXI7XG4gIGVuZFRpbWVzdGFtcD86IG51bWJlcjtcbn1cblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uT3B0aW9uczogUmVxdWVzdEluc3RydW1lbnRhdGlvbk9wdGlvbnMgPSB7XG4gIHRyYWNlRmV0Y2g6IHRydWUsXG4gIHRyYWNlWEhSOiB0cnVlLFxuICB0cmFjaW5nT3JpZ2luczogREVGQVVMVF9UUkFDSU5HX09SSUdJTlMsXG59O1xuXG4vKiogUmVnaXN0ZXJzIHNwYW4gY3JlYXRvcnMgZm9yIHhociBhbmQgZmV0Y2ggcmVxdWVzdHMgICovXG5leHBvcnQgZnVuY3Rpb24gaW5zdHJ1bWVudE91dGdvaW5nUmVxdWVzdHMoX29wdGlvbnM/OiBQYXJ0aWFsPFJlcXVlc3RJbnN0cnVtZW50YXRpb25PcHRpb25zPik6IHZvaWQge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gIGNvbnN0IHsgdHJhY2VGZXRjaCwgdHJhY2VYSFIsIHRyYWNpbmdPcmlnaW5zLCBzaG91bGRDcmVhdGVTcGFuRm9yUmVxdWVzdCB9ID0ge1xuICAgIC4uLmRlZmF1bHRSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uT3B0aW9ucyxcbiAgICAuLi5fb3B0aW9ucyxcbiAgfTtcblxuICAvLyBXZSBzaG91bGQgY2FjaGUgdXJsIC0+IGRlY2lzaW9uIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byBjb21wdXRlXG4gIC8vIHJlZ2V4cCBldmVyeXRpbWUgd2UgY3JlYXRlIGEgcmVxdWVzdC5cbiAgY29uc3QgdXJsTWFwOiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXG4gIGNvbnN0IGRlZmF1bHRTaG91bGRDcmVhdGVTcGFuID0gKHVybDogc3RyaW5nKTogYm9vbGVhbiA9PiB7XG4gICAgaWYgKHVybE1hcFt1cmxdKSB7XG4gICAgICByZXR1cm4gdXJsTWFwW3VybF07XG4gICAgfVxuICAgIGNvbnN0IG9yaWdpbnMgPSB0cmFjaW5nT3JpZ2lucztcbiAgICB1cmxNYXBbdXJsXSA9XG4gICAgICBvcmlnaW5zLnNvbWUoKG9yaWdpbjogc3RyaW5nIHwgUmVnRXhwKSA9PiBpc01hdGNoaW5nUGF0dGVybih1cmwsIG9yaWdpbikpICYmXG4gICAgICAhaXNNYXRjaGluZ1BhdHRlcm4odXJsLCAnc2VudHJ5X2tleScpO1xuICAgIHJldHVybiB1cmxNYXBbdXJsXTtcbiAgfTtcblxuICAvLyBXZSB3YW50IHRoYXQgb3VyIHVzZXJzIGRvbid0IGhhdmUgdG8gcmUtaW1wbGVtZW50IHNob3VsZENyZWF0ZVNwYW5Gb3JSZXF1ZXN0IHRoZW1zZWx2ZXNcbiAgLy8gVGhhdCdzIHdoeSB3ZSBmaWx0ZXIgb3V0IGFscmVhZHkgdW53YW50ZWQgU3BhbnMgZnJvbSB0cmFjaW5nT3JpZ2luc1xuICBsZXQgc2hvdWxkQ3JlYXRlU3BhbiA9IGRlZmF1bHRTaG91bGRDcmVhdGVTcGFuO1xuICBpZiAodHlwZW9mIHNob3VsZENyZWF0ZVNwYW5Gb3JSZXF1ZXN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc2hvdWxkQ3JlYXRlU3BhbiA9ICh1cmw6IHN0cmluZykgPT4ge1xuICAgICAgcmV0dXJuIGRlZmF1bHRTaG91bGRDcmVhdGVTcGFuKHVybCkgJiYgc2hvdWxkQ3JlYXRlU3BhbkZvclJlcXVlc3QodXJsKTtcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgc3BhbnM6IFJlY29yZDxzdHJpbmcsIFNwYW4+ID0ge307XG5cbiAgaWYgKHRyYWNlRmV0Y2gpIHtcbiAgICBhZGRJbnN0cnVtZW50YXRpb25IYW5kbGVyKHtcbiAgICAgIGNhbGxiYWNrOiAoaGFuZGxlckRhdGE6IEZldGNoRGF0YSkgPT4ge1xuICAgICAgICBmZXRjaENhbGxiYWNrKGhhbmRsZXJEYXRhLCBzaG91bGRDcmVhdGVTcGFuLCBzcGFucyk7XG4gICAgICB9LFxuICAgICAgdHlwZTogJ2ZldGNoJyxcbiAgICB9KTtcbiAgfVxuXG4gIGlmICh0cmFjZVhIUikge1xuICAgIGFkZEluc3RydW1lbnRhdGlvbkhhbmRsZXIoe1xuICAgICAgY2FsbGJhY2s6IChoYW5kbGVyRGF0YTogWEhSRGF0YSkgPT4ge1xuICAgICAgICB4aHJDYWxsYmFjayhoYW5kbGVyRGF0YSwgc2hvdWxkQ3JlYXRlU3Bhbiwgc3BhbnMpO1xuICAgICAgfSxcbiAgICAgIHR5cGU6ICd4aHInLFxuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuZCB0cmFjayBmZXRjaCByZXF1ZXN0IHNwYW5zXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmZXRjaENhbGxiYWNrKFxuICBoYW5kbGVyRGF0YTogRmV0Y2hEYXRhLFxuICBzaG91bGRDcmVhdGVTcGFuOiAodXJsOiBzdHJpbmcpID0+IGJvb2xlYW4sXG4gIHNwYW5zOiBSZWNvcmQ8c3RyaW5nLCBTcGFuPixcbik6IHZvaWQge1xuICBpZiAoIWhhc1RyYWNpbmdFbmFibGVkKCkgfHwgIShoYW5kbGVyRGF0YS5mZXRjaERhdGEgJiYgc2hvdWxkQ3JlYXRlU3BhbihoYW5kbGVyRGF0YS5mZXRjaERhdGEudXJsKSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoaGFuZGxlckRhdGEuZW5kVGltZXN0YW1wICYmIGhhbmRsZXJEYXRhLmZldGNoRGF0YS5fX3NwYW4pIHtcbiAgICBjb25zdCBzcGFuID0gc3BhbnNbaGFuZGxlckRhdGEuZmV0Y2hEYXRhLl9fc3Bhbl07XG4gICAgaWYgKHNwYW4pIHtcbiAgICAgIGlmIChoYW5kbGVyRGF0YS5yZXNwb25zZSkge1xuICAgICAgICAvLyBUT0RPIChrbWNsYikgcmVtb3ZlIHRoaXMgb25jZSB0eXBlcyBQUiBnb2VzIHRocm91Z2hcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICBzcGFuLnNldEh0dHBTdGF0dXMoaGFuZGxlckRhdGEucmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgIH0gZWxzZSBpZiAoaGFuZGxlckRhdGEuZXJyb3IpIHtcbiAgICAgICAgc3Bhbi5zZXRTdGF0dXMoU3BhblN0YXR1cy5JbnRlcm5hbEVycm9yKTtcbiAgICAgIH1cbiAgICAgIHNwYW4uZmluaXNoKCk7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGVcbiAgICAgIGRlbGV0ZSBzcGFuc1toYW5kbGVyRGF0YS5mZXRjaERhdGEuX19zcGFuXTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgYWN0aXZlVHJhbnNhY3Rpb24gPSBnZXRBY3RpdmVUcmFuc2FjdGlvbigpO1xuICBpZiAoYWN0aXZlVHJhbnNhY3Rpb24pIHtcbiAgICBjb25zdCBzcGFuID0gYWN0aXZlVHJhbnNhY3Rpb24uc3RhcnRDaGlsZCh7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIC4uLmhhbmRsZXJEYXRhLmZldGNoRGF0YSxcbiAgICAgICAgdHlwZTogJ2ZldGNoJyxcbiAgICAgIH0sXG4gICAgICBkZXNjcmlwdGlvbjogYCR7aGFuZGxlckRhdGEuZmV0Y2hEYXRhLm1ldGhvZH0gJHtoYW5kbGVyRGF0YS5mZXRjaERhdGEudXJsfWAsXG4gICAgICBvcDogJ2h0dHAuY2xpZW50JyxcbiAgICB9KTtcblxuICAgIGhhbmRsZXJEYXRhLmZldGNoRGF0YS5fX3NwYW4gPSBzcGFuLnNwYW5JZDtcbiAgICBzcGFuc1tzcGFuLnNwYW5JZF0gPSBzcGFuO1xuXG4gICAgY29uc3QgcmVxdWVzdCA9IChoYW5kbGVyRGF0YS5hcmdzWzBdID0gaGFuZGxlckRhdGEuYXJnc1swXSBhcyBzdHJpbmcgfCBSZXF1ZXN0KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgIGNvbnN0IG9wdGlvbnMgPSAoaGFuZGxlckRhdGEuYXJnc1sxXSA9IChoYW5kbGVyRGF0YS5hcmdzWzFdIGFzIHsgW2tleTogc3RyaW5nXTogYW55IH0pIHx8IHt9KTtcbiAgICBsZXQgaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycztcbiAgICBpZiAoaXNJbnN0YW5jZU9mKHJlcXVlc3QsIFJlcXVlc3QpKSB7XG4gICAgICBoZWFkZXJzID0gKHJlcXVlc3QgYXMgUmVxdWVzdCkuaGVhZGVycztcbiAgICB9XG4gICAgaWYgKGhlYWRlcnMpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgIGlmICh0eXBlb2YgaGVhZGVycy5hcHBlbmQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICBoZWFkZXJzLmFwcGVuZCgnc2VudHJ5LXRyYWNlJywgc3Bhbi50b1RyYWNlcGFyZW50KCkpO1xuICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICAgIGhlYWRlcnMgPSBbLi4uaGVhZGVycywgWydzZW50cnktdHJhY2UnLCBzcGFuLnRvVHJhY2VwYXJlbnQoKV1dO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVycyA9IHsgLi4uaGVhZGVycywgJ3NlbnRyeS10cmFjZSc6IHNwYW4udG9UcmFjZXBhcmVudCgpIH07XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlcnMgPSB7ICdzZW50cnktdHJhY2UnOiBzcGFuLnRvVHJhY2VwYXJlbnQoKSB9O1xuICAgIH1cbiAgICBvcHRpb25zLmhlYWRlcnMgPSBoZWFkZXJzO1xuICB9XG59XG5cbi8qKlxuICogQ3JlYXRlIGFuZCB0cmFjayB4aHIgcmVxdWVzdCBzcGFuc1xuICovXG5leHBvcnQgZnVuY3Rpb24geGhyQ2FsbGJhY2soXG4gIGhhbmRsZXJEYXRhOiBYSFJEYXRhLFxuICBzaG91bGRDcmVhdGVTcGFuOiAodXJsOiBzdHJpbmcpID0+IGJvb2xlYW4sXG4gIHNwYW5zOiBSZWNvcmQ8c3RyaW5nLCBTcGFuPixcbik6IHZvaWQge1xuICBpZiAoXG4gICAgIWhhc1RyYWNpbmdFbmFibGVkKCkgfHxcbiAgICBoYW5kbGVyRGF0YS54aHI/Ll9fc2VudHJ5X293bl9yZXF1ZXN0X18gfHxcbiAgICAhKGhhbmRsZXJEYXRhLnhocj8uX19zZW50cnlfeGhyX18gJiYgc2hvdWxkQ3JlYXRlU3BhbihoYW5kbGVyRGF0YS54aHIuX19zZW50cnlfeGhyX18udXJsKSlcbiAgKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgeGhyID0gaGFuZGxlckRhdGEueGhyLl9fc2VudHJ5X3hocl9fO1xuXG4gIC8vIGNoZWNrIGZpcnN0IGlmIHRoZSByZXF1ZXN0IGhhcyBmaW5pc2hlZCBhbmQgaXMgdHJhY2tlZCBieSBhbiBleGlzdGluZyBzcGFuIHdoaWNoIHNob3VsZCBub3cgZW5kXG4gIGlmIChoYW5kbGVyRGF0YS5lbmRUaW1lc3RhbXAgJiYgaGFuZGxlckRhdGEueGhyLl9fc2VudHJ5X3hocl9zcGFuX2lkX18pIHtcbiAgICBjb25zdCBzcGFuID0gc3BhbnNbaGFuZGxlckRhdGEueGhyLl9fc2VudHJ5X3hocl9zcGFuX2lkX19dO1xuICAgIGlmIChzcGFuKSB7XG4gICAgICBzcGFuLnNldEh0dHBTdGF0dXMoeGhyLnN0YXR1c19jb2RlKTtcbiAgICAgIHNwYW4uZmluaXNoKCk7XG5cbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZHluYW1pYy1kZWxldGVcbiAgICAgIGRlbGV0ZSBzcGFuc1toYW5kbGVyRGF0YS54aHIuX19zZW50cnlfeGhyX3NwYW5faWRfX107XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIC8vIGlmIG5vdCwgY3JlYXRlIGEgbmV3IHNwYW4gdG8gdHJhY2sgaXRcbiAgY29uc3QgYWN0aXZlVHJhbnNhY3Rpb24gPSBnZXRBY3RpdmVUcmFuc2FjdGlvbigpO1xuICBpZiAoYWN0aXZlVHJhbnNhY3Rpb24pIHtcbiAgICBjb25zdCBzcGFuID0gYWN0aXZlVHJhbnNhY3Rpb24uc3RhcnRDaGlsZCh7XG4gICAgICBkYXRhOiB7XG4gICAgICAgIC4uLnhoci5kYXRhLFxuICAgICAgICB0eXBlOiAneGhyJyxcbiAgICAgICAgbWV0aG9kOiB4aHIubWV0aG9kLFxuICAgICAgICB1cmw6IHhoci51cmwsXG4gICAgICB9LFxuICAgICAgZGVzY3JpcHRpb246IGAke3hoci5tZXRob2R9ICR7eGhyLnVybH1gLFxuICAgICAgb3A6ICdodHRwLmNsaWVudCcsXG4gICAgfSk7XG5cbiAgICBoYW5kbGVyRGF0YS54aHIuX19zZW50cnlfeGhyX3NwYW5faWRfXyA9IHNwYW4uc3BhbklkO1xuICAgIHNwYW5zW2hhbmRsZXJEYXRhLnhoci5fX3NlbnRyeV94aHJfc3Bhbl9pZF9fXSA9IHNwYW47XG5cbiAgICBpZiAoaGFuZGxlckRhdGEueGhyLnNldFJlcXVlc3RIZWFkZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGhhbmRsZXJEYXRhLnhoci5zZXRSZXF1ZXN0SGVhZGVyKCdzZW50cnktdHJhY2UnLCBzcGFuLnRvVHJhY2VwYXJlbnQoKSk7XG4gICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgIC8vIEVycm9yOiBJbnZhbGlkU3RhdGVFcnJvcjogRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldFJlcXVlc3RIZWFkZXInIG9uICdYTUxIdHRwUmVxdWVzdCc6IFRoZSBvYmplY3QncyBzdGF0ZSBtdXN0IGJlIE9QRU5FRC5cbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBUcmFuc2FjdGlvbiwgVHJhbnNhY3Rpb25Db250ZXh0IH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBhZGRJbnN0cnVtZW50YXRpb25IYW5kbGVyLCBnZXRHbG9iYWxPYmplY3QsIGxvZ2dlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG5jb25zdCBnbG9iYWwgPSBnZXRHbG9iYWxPYmplY3Q8V2luZG93PigpO1xuXG4vKipcbiAqIERlZmF1bHQgZnVuY3Rpb24gaW1wbGVtZW50aW5nIHBhZ2Vsb2FkIGFuZCBuYXZpZ2F0aW9uIHRyYW5zYWN0aW9uc1xuICovXG5leHBvcnQgZnVuY3Rpb24gaW5zdHJ1bWVudFJvdXRpbmdXaXRoRGVmYXVsdHM8VCBleHRlbmRzIFRyYW5zYWN0aW9uPihcbiAgY3VzdG9tU3RhcnRUcmFuc2FjdGlvbjogKGNvbnRleHQ6IFRyYW5zYWN0aW9uQ29udGV4dCkgPT4gVCB8IHVuZGVmaW5lZCxcbiAgc3RhcnRUcmFuc2FjdGlvbk9uUGFnZUxvYWQ6IGJvb2xlYW4gPSB0cnVlLFxuICBzdGFydFRyYW5zYWN0aW9uT25Mb2NhdGlvbkNoYW5nZTogYm9vbGVhbiA9IHRydWUsXG4pOiB2b2lkIHtcbiAgaWYgKCFnbG9iYWwgfHwgIWdsb2JhbC5sb2NhdGlvbikge1xuICAgIGxvZ2dlci53YXJuKCdDb3VsZCBub3QgaW5pdGlhbGl6ZSByb3V0aW5nIGluc3RydW1lbnRhdGlvbiBkdWUgdG8gaW52YWxpZCBsb2NhdGlvbicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBzdGFydGluZ1VybDogc3RyaW5nIHwgdW5kZWZpbmVkID0gZ2xvYmFsLmxvY2F0aW9uLmhyZWY7XG5cbiAgbGV0IGFjdGl2ZVRyYW5zYWN0aW9uOiBUIHwgdW5kZWZpbmVkO1xuICBpZiAoc3RhcnRUcmFuc2FjdGlvbk9uUGFnZUxvYWQpIHtcbiAgICBhY3RpdmVUcmFuc2FjdGlvbiA9IGN1c3RvbVN0YXJ0VHJhbnNhY3Rpb24oeyBuYW1lOiBnbG9iYWwubG9jYXRpb24ucGF0aG5hbWUsIG9wOiAncGFnZWxvYWQnIH0pO1xuICB9XG5cbiAgaWYgKHN0YXJ0VHJhbnNhY3Rpb25PbkxvY2F0aW9uQ2hhbmdlKSB7XG4gICAgYWRkSW5zdHJ1bWVudGF0aW9uSGFuZGxlcih7XG4gICAgICBjYWxsYmFjazogKHsgdG8sIGZyb20gfTogeyB0bzogc3RyaW5nOyBmcm9tPzogc3RyaW5nIH0pID0+IHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIFRoaXMgZWFybHkgcmV0dXJuIGlzIHRoZXJlIHRvIGFjY291bnQgZm9yIHNvbWUgY2FzZXMgd2hlcmUgYSBuYXZpZ2F0aW9uIHRyYW5zYWN0aW9uIHN0YXJ0cyByaWdodCBhZnRlclxuICAgICAgICAgKiBsb25nLXJ1bm5pbmcgcGFnZWxvYWQuIFdlIG1ha2Ugc3VyZSB0aGF0IGlmIGBmcm9tYCBpcyB1bmRlZmluZWQgYW5kIGEgdmFsaWQgYHN0YXJ0aW5nVVJMYCBleGlzdHMsIHdlIGRvbid0XG4gICAgICAgICAqIGNyZWF0ZSBhbiB1bmVjY2Vzc2FyeSBuYXZpZ2F0aW9uIHRyYW5zYWN0aW9uLlxuICAgICAgICAgKlxuICAgICAgICAgKiBUaGlzIHdhcyBoYXJkIHRvIGR1cGxpY2F0ZSwgYnV0IHRoaXMgYmVoYXZpb3Igc3RvcHBlZCBhcyBzb29uIGFzIHRoaXMgZml4IHdhcyBhcHBsaWVkLiBUaGlzIGlzc3VlIG1pZ2h0IGFsc29cbiAgICAgICAgICogb25seSBiZSBjYXVzZWQgaW4gY2VydGFpbiBkZXZlbG9wbWVudCBlbnZpcm9ubWVudHMgd2hlcmUgdGhlIHVzYWdlIG9mIGEgaG90IG1vZHVsZSByZWxvYWRlciBpcyBjYXVzaW5nXG4gICAgICAgICAqIGVycm9ycy5cbiAgICAgICAgICovXG4gICAgICAgIGlmIChmcm9tID09PSB1bmRlZmluZWQgJiYgc3RhcnRpbmdVcmwgJiYgc3RhcnRpbmdVcmwuaW5kZXhPZih0bykgIT09IC0xKSB7XG4gICAgICAgICAgc3RhcnRpbmdVcmwgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZyb20gIT09IHRvKSB7XG4gICAgICAgICAgc3RhcnRpbmdVcmwgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKGFjdGl2ZVRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgICBsb2dnZXIubG9nKGBbVHJhY2luZ10gRmluaXNoaW5nIGN1cnJlbnQgdHJhbnNhY3Rpb24gd2l0aCBvcDogJHthY3RpdmVUcmFuc2FjdGlvbi5vcH1gKTtcbiAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYW4gb3BlbiB0cmFuc2FjdGlvbiBvbiB0aGUgc2NvcGUsIHdlIG5lZWQgdG8gZmluaXNoIGl0IGJlZm9yZSBjcmVhdGluZyBhbiBuZXcgb25lLlxuICAgICAgICAgICAgYWN0aXZlVHJhbnNhY3Rpb24uZmluaXNoKCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdGl2ZVRyYW5zYWN0aW9uID0gY3VzdG9tU3RhcnRUcmFuc2FjdGlvbih7IG5hbWU6IGdsb2JhbC5sb2NhdGlvbi5wYXRobmFtZSwgb3A6ICduYXZpZ2F0aW9uJyB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHR5cGU6ICdoaXN0b3J5JyxcbiAgICB9KTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEh1YiB9IGZyb20gJ0BzZW50cnkvaHViJztcbmltcG9ydCB7IEV2ZW50UHJvY2Vzc29yLCBJbnRlZ3JhdGlvbiwgVHJhbnNhY3Rpb24sIFRyYW5zYWN0aW9uQ29udGV4dCB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0LCBsb2dnZXIgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuaW1wb3J0IHsgc3RhcnRJZGxlVHJhbnNhY3Rpb24gfSBmcm9tICcuLi9odWJleHRlbnNpb25zJztcbmltcG9ydCB7IERFRkFVTFRfSURMRV9USU1FT1VULCBJZGxlVHJhbnNhY3Rpb24gfSBmcm9tICcuLi9pZGxldHJhbnNhY3Rpb24nO1xuaW1wb3J0IHsgU3BhblN0YXR1cyB9IGZyb20gJy4uL3NwYW5zdGF0dXMnO1xuaW1wb3J0IHsgZXh0cmFjdFRyYWNlcGFyZW50RGF0YSwgc2VjVG9NcyB9IGZyb20gJy4uL3V0aWxzJztcbmltcG9ydCB7IHJlZ2lzdGVyQmFja2dyb3VuZFRhYkRldGVjdGlvbiB9IGZyb20gJy4vYmFja2dyb3VuZHRhYic7XG5pbXBvcnQgeyBNZXRyaWNzSW5zdHJ1bWVudGF0aW9uIH0gZnJvbSAnLi9tZXRyaWNzJztcbmltcG9ydCB7XG4gIGRlZmF1bHRSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uT3B0aW9ucyxcbiAgaW5zdHJ1bWVudE91dGdvaW5nUmVxdWVzdHMsXG4gIFJlcXVlc3RJbnN0cnVtZW50YXRpb25PcHRpb25zLFxufSBmcm9tICcuL3JlcXVlc3QnO1xuaW1wb3J0IHsgaW5zdHJ1bWVudFJvdXRpbmdXaXRoRGVmYXVsdHMgfSBmcm9tICcuL3JvdXRlcic7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX01BWF9UUkFOU0FDVElPTl9EVVJBVElPTl9TRUNPTkRTID0gNjAwO1xuXG4vKiogT3B0aW9ucyBmb3IgQnJvd3NlciBUcmFjaW5nIGludGVncmF0aW9uICovXG5leHBvcnQgaW50ZXJmYWNlIEJyb3dzZXJUcmFjaW5nT3B0aW9ucyBleHRlbmRzIFJlcXVlc3RJbnN0cnVtZW50YXRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSB0aW1lIHRvIHdhaXQgaW4gbXMgdW50aWwgdGhlIHRyYW5zYWN0aW9uIHdpbGwgYmUgZmluaXNoZWQuIFRoZSB0cmFuc2FjdGlvbiB3aWxsIHVzZSB0aGUgZW5kIHRpbWVzdGFtcCBvZlxuICAgKiB0aGUgbGFzdCBmaW5pc2hlZCBzcGFuIGFzIHRoZSBlbmR0aW1lIGZvciB0aGUgdHJhbnNhY3Rpb24uXG4gICAqIFRpbWUgaXMgaW4gbXMuXG4gICAqXG4gICAqIERlZmF1bHQ6IDEwMDBcbiAgICovXG4gIGlkbGVUaW1lb3V0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEZsYWcgdG8gZW5hYmxlL2Rpc2FibGUgY3JlYXRpb24gb2YgYG5hdmlnYXRpb25gIHRyYW5zYWN0aW9uIG9uIGhpc3RvcnkgY2hhbmdlcy5cbiAgICpcbiAgICogRGVmYXVsdDogdHJ1ZVxuICAgKi9cbiAgc3RhcnRUcmFuc2FjdGlvbk9uTG9jYXRpb25DaGFuZ2U6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZsYWcgdG8gZW5hYmxlL2Rpc2FibGUgY3JlYXRpb24gb2YgYHBhZ2Vsb2FkYCB0cmFuc2FjdGlvbiBvbiBmaXJzdCBwYWdlbG9hZC5cbiAgICpcbiAgICogRGVmYXVsdDogdHJ1ZVxuICAgKi9cbiAgc3RhcnRUcmFuc2FjdGlvbk9uUGFnZUxvYWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIGR1cmF0aW9uIG9mIGEgdHJhbnNhY3Rpb24gYmVmb3JlIGl0IHdpbGwgYmUgbWFya2VkIGFzIFwiZGVhZGxpbmVfZXhjZWVkZWRcIi5cbiAgICogSWYgeW91IG5ldmVyIHdhbnQgdG8gbWFyayBhIHRyYW5zYWN0aW9uIHNldCBpdCB0byAwLlxuICAgKiBUaW1lIGlzIGluIHNlY29uZHMuXG4gICAqXG4gICAqIERlZmF1bHQ6IDYwMFxuICAgKi9cbiAgbWF4VHJhbnNhY3Rpb25EdXJhdGlvbjogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBGbGFnIFRyYW5zYWN0aW9ucyB3aGVyZSB0YWJzIG1vdmVkIHRvIGJhY2tncm91bmQgd2l0aCBcImNhbmNlbGxlZFwiLiBCcm93c2VyIGJhY2tncm91bmQgdGFiIHRpbWluZyBpc1xuICAgKiBub3Qgc3VpdGVkIHRvd2FyZHMgZG9pbmcgcHJlY2lzZSBtZWFzdXJlbWVudHMgb2Ygb3BlcmF0aW9ucy4gQnkgZGVmYXVsdCwgd2UgcmVjb21tZW5kIHRoYXQgdGhpcyBvcHRpb25cbiAgICogYmUgZW5hYmxlZCBhcyBiYWNrZ3JvdW5kIHRyYW5zYWN0aW9ucyBjYW4gbWVzcyB1cCB5b3VyIHN0YXRpc3RpY3MgaW4gbm9uZGV0ZXJtaW5pc3RpYyB3YXlzLlxuICAgKlxuICAgKiBEZWZhdWx0OiB0cnVlXG4gICAqL1xuICBtYXJrQmFja2dyb3VuZFRyYW5zYWN0aW9uczogYm9vbGVhbjtcblxuICAvKipcbiAgICogX21ldHJpY09wdGlvbnMgYWxsb3dzIHRoZSB1c2VyIHRvIHNlbmQgb3B0aW9ucyB0byBjaGFuZ2UgaG93IG1ldHJpY3MgYXJlIGNvbGxlY3RlZC5cbiAgICpcbiAgICogX21ldHJpY09wdGlvbnMgaXMgY3VycmVudGx5IGV4cGVyaW1lbnRhbC5cbiAgICpcbiAgICogRGVmYXVsdDogdW5kZWZpbmVkXG4gICAqL1xuICBfbWV0cmljT3B0aW9ucz86IFBhcnRpYWw8eyBfcmVwb3J0QWxsQ2hhbmdlczogYm9vbGVhbiB9PjtcblxuICAvKipcbiAgICogYmVmb3JlTmF2aWdhdGUgaXMgY2FsbGVkIGJlZm9yZSBhIHBhZ2Vsb2FkL25hdmlnYXRpb24gdHJhbnNhY3Rpb24gaXMgY3JlYXRlZCBhbmQgYWxsb3dzIHVzZXJzIHRvIG1vZGlmeSB0cmFuc2FjdGlvblxuICAgKiBjb250ZXh0IGRhdGEsIG9yIGRyb3AgdGhlIHRyYW5zYWN0aW9uIGVudGlyZWx5IChieSBzZXR0aW5nIGBzYW1wbGVkID0gZmFsc2VgIGluIHRoZSBjb250ZXh0KS5cbiAgICpcbiAgICogTm90ZTogRm9yIGxlZ2FjeSByZWFzb25zLCB0cmFuc2FjdGlvbnMgY2FuIGFsc28gYmUgZHJvcHBlZCBieSByZXR1cm5pbmcgYHVuZGVmaW5lZGAuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZXh0OiBUaGUgY29udGV4dCBkYXRhIHdoaWNoIHdpbGwgYmUgcGFzc2VkIHRvIGBzdGFydFRyYW5zYWN0aW9uYCBieSBkZWZhdWx0XG4gICAqXG4gICAqIEByZXR1cm5zIEEgKHBvdGVudGlhbGx5KSBtb2RpZmllZCBjb250ZXh0IG9iamVjdCwgd2l0aCBgc2FtcGxlZCA9IGZhbHNlYCBpZiB0aGUgdHJhbnNhY3Rpb24gc2hvdWxkIGJlIGRyb3BwZWQuXG4gICAqL1xuICBiZWZvcmVOYXZpZ2F0ZT8oY29udGV4dDogVHJhbnNhY3Rpb25Db250ZXh0KTogVHJhbnNhY3Rpb25Db250ZXh0IHwgdW5kZWZpbmVkO1xuXG4gIC8qKlxuICAgKiBJbnN0cnVtZW50YXRpb24gdGhhdCBjcmVhdGVzIHJvdXRpbmcgY2hhbmdlIHRyYW5zYWN0aW9ucy4gQnkgZGVmYXVsdCBjcmVhdGVzXG4gICAqIHBhZ2Vsb2FkIGFuZCBuYXZpZ2F0aW9uIHRyYW5zYWN0aW9ucy5cbiAgICovXG4gIHJvdXRpbmdJbnN0cnVtZW50YXRpb248VCBleHRlbmRzIFRyYW5zYWN0aW9uPihcbiAgICBjdXN0b21TdGFydFRyYW5zYWN0aW9uOiAoY29udGV4dDogVHJhbnNhY3Rpb25Db250ZXh0KSA9PiBUIHwgdW5kZWZpbmVkLFxuICAgIHN0YXJ0VHJhbnNhY3Rpb25PblBhZ2VMb2FkPzogYm9vbGVhbixcbiAgICBzdGFydFRyYW5zYWN0aW9uT25Mb2NhdGlvbkNoYW5nZT86IGJvb2xlYW4sXG4gICk6IHZvaWQ7XG59XG5cbmNvbnN0IERFRkFVTFRfQlJPV1NFUl9UUkFDSU5HX09QVElPTlMgPSB7XG4gIGlkbGVUaW1lb3V0OiBERUZBVUxUX0lETEVfVElNRU9VVCxcbiAgbWFya0JhY2tncm91bmRUcmFuc2FjdGlvbnM6IHRydWUsXG4gIG1heFRyYW5zYWN0aW9uRHVyYXRpb246IERFRkFVTFRfTUFYX1RSQU5TQUNUSU9OX0RVUkFUSU9OX1NFQ09ORFMsXG4gIHJvdXRpbmdJbnN0cnVtZW50YXRpb246IGluc3RydW1lbnRSb3V0aW5nV2l0aERlZmF1bHRzLFxuICBzdGFydFRyYW5zYWN0aW9uT25Mb2NhdGlvbkNoYW5nZTogdHJ1ZSxcbiAgc3RhcnRUcmFuc2FjdGlvbk9uUGFnZUxvYWQ6IHRydWUsXG4gIC4uLmRlZmF1bHRSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uT3B0aW9ucyxcbn07XG5cbi8qKlxuICogVGhlIEJyb3dzZXIgVHJhY2luZyBpbnRlZ3JhdGlvbiBhdXRvbWF0aWNhbGx5IGluc3RydW1lbnRzIGJyb3dzZXIgcGFnZWxvYWQvbmF2aWdhdGlvblxuICogYWN0aW9ucyBhcyB0cmFuc2FjdGlvbnMsIGFuZCBjYXB0dXJlcyByZXF1ZXN0cywgbWV0cmljcyBhbmQgZXJyb3JzIGFzIHNwYW5zLlxuICpcbiAqIFRoZSBpbnRlZ3JhdGlvbiBjYW4gYmUgY29uZmlndXJlZCB3aXRoIGEgdmFyaWV0eSBvZiBvcHRpb25zLCBhbmQgY2FuIGJlIGV4dGVuZGVkIHRvIHVzZVxuICogYW55IHJvdXRpbmcgbGlicmFyeS4gVGhpcyBpbnRlZ3JhdGlvbiB1c2VzIHtAc2VlIElkbGVUcmFuc2FjdGlvbn0gdG8gY3JlYXRlIHRyYW5zYWN0aW9ucy5cbiAqL1xuZXhwb3J0IGNsYXNzIEJyb3dzZXJUcmFjaW5nIGltcGxlbWVudHMgSW50ZWdyYXRpb24ge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaWQ6IHN0cmluZyA9ICdCcm93c2VyVHJhY2luZyc7XG5cbiAgLyoqIEJyb3dzZXIgVHJhY2luZyBpbnRlZ3JhdGlvbiBvcHRpb25zICovXG4gIHB1YmxpYyBvcHRpb25zOiBCcm93c2VyVHJhY2luZ09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbmFtZTogc3RyaW5nID0gQnJvd3NlclRyYWNpbmcuaWQ7XG5cbiAgcHJpdmF0ZSBfZ2V0Q3VycmVudEh1Yj86ICgpID0+IEh1YjtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9tZXRyaWNzOiBNZXRyaWNzSW5zdHJ1bWVudGF0aW9uO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2VtaXRPcHRpb25zV2FybmluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKiBTdG9yZSBjb25maWd1cmVkIGlkbGUgdGltZW91dCBzbyB0aGF0IGl0IGNhbiBiZSBhZGRlZCBhcyBhIHRhZyB0byB0cmFuc2FjdGlvbnMgKi9cbiAgcHJpdmF0ZSBfY29uZmlndXJlZElkbGVUaW1lb3V0OiBCcm93c2VyVHJhY2luZ09wdGlvbnNbJ2lkbGVUaW1lb3V0J10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKF9vcHRpb25zPzogUGFydGlhbDxCcm93c2VyVHJhY2luZ09wdGlvbnM+KSB7XG4gICAgbGV0IHRyYWNpbmdPcmlnaW5zID0gZGVmYXVsdFJlcXVlc3RJbnN0cnVtZW50YXRpb25PcHRpb25zLnRyYWNpbmdPcmlnaW5zO1xuICAgIC8vIE5PVEU6IExvZ2dlciBkb2Vzbid0IHdvcmsgaW4gY29uc3RydWN0b3JzLCBhcyBpdCdzIGluaXRpYWxpemVkIGFmdGVyIGludGVncmF0aW9ucyBpbnN0YW5jZXNcbiAgICBpZiAoX29wdGlvbnMpIHtcbiAgICAgIHRoaXMuX2NvbmZpZ3VyZWRJZGxlVGltZW91dCA9IF9vcHRpb25zLmlkbGVUaW1lb3V0O1xuICAgICAgaWYgKF9vcHRpb25zLnRyYWNpbmdPcmlnaW5zICYmIEFycmF5LmlzQXJyYXkoX29wdGlvbnMudHJhY2luZ09yaWdpbnMpICYmIF9vcHRpb25zLnRyYWNpbmdPcmlnaW5zLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICB0cmFjaW5nT3JpZ2lucyA9IF9vcHRpb25zLnRyYWNpbmdPcmlnaW5zO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5fZW1pdE9wdGlvbnNXYXJuaW5nID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAuLi5ERUZBVUxUX0JST1dTRVJfVFJBQ0lOR19PUFRJT05TLFxuICAgICAgLi4uX29wdGlvbnMsXG4gICAgICB0cmFjaW5nT3JpZ2lucyxcbiAgICB9O1xuXG4gICAgY29uc3QgeyBfbWV0cmljT3B0aW9ucyB9ID0gdGhpcy5vcHRpb25zO1xuICAgIHRoaXMuX21ldHJpY3MgPSBuZXcgTWV0cmljc0luc3RydW1lbnRhdGlvbihfbWV0cmljT3B0aW9ucyAmJiBfbWV0cmljT3B0aW9ucy5fcmVwb3J0QWxsQ2hhbmdlcyk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXR1cE9uY2UoXzogKGNhbGxiYWNrOiBFdmVudFByb2Nlc3NvcikgPT4gdm9pZCwgZ2V0Q3VycmVudEh1YjogKCkgPT4gSHViKTogdm9pZCB7XG4gICAgdGhpcy5fZ2V0Q3VycmVudEh1YiA9IGdldEN1cnJlbnRIdWI7XG5cbiAgICBpZiAodGhpcy5fZW1pdE9wdGlvbnNXYXJuaW5nKSB7XG4gICAgICBsb2dnZXIud2FybihcbiAgICAgICAgJ1tUcmFjaW5nXSBZb3UgbmVlZCB0byBkZWZpbmUgYHRyYWNpbmdPcmlnaW5zYCBpbiB0aGUgb3B0aW9ucy4gU2V0IGFuIGFycmF5IG9mIHVybHMgb3IgcGF0dGVybnMgdG8gdHJhY2UuJyxcbiAgICAgICk7XG4gICAgICBsb2dnZXIud2FybihcbiAgICAgICAgYFtUcmFjaW5nXSBXZSBhZGRlZCBhIHJlYXNvbmFibGUgZGVmYXVsdCBmb3IgeW91OiAke2RlZmF1bHRSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uT3B0aW9ucy50cmFjaW5nT3JpZ2luc31gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgY29uc3Qge1xuICAgICAgcm91dGluZ0luc3RydW1lbnRhdGlvbjogaW5zdHJ1bWVudFJvdXRpbmcsXG4gICAgICBzdGFydFRyYW5zYWN0aW9uT25Mb2NhdGlvbkNoYW5nZSxcbiAgICAgIHN0YXJ0VHJhbnNhY3Rpb25PblBhZ2VMb2FkLFxuICAgICAgbWFya0JhY2tncm91bmRUcmFuc2FjdGlvbnMsXG4gICAgICB0cmFjZUZldGNoLFxuICAgICAgdHJhY2VYSFIsXG4gICAgICB0cmFjaW5nT3JpZ2lucyxcbiAgICAgIHNob3VsZENyZWF0ZVNwYW5Gb3JSZXF1ZXN0LFxuICAgIH0gPSB0aGlzLm9wdGlvbnM7XG5cbiAgICBpbnN0cnVtZW50Um91dGluZyhcbiAgICAgIChjb250ZXh0OiBUcmFuc2FjdGlvbkNvbnRleHQpID0+IHRoaXMuX2NyZWF0ZVJvdXRlVHJhbnNhY3Rpb24oY29udGV4dCksXG4gICAgICBzdGFydFRyYW5zYWN0aW9uT25QYWdlTG9hZCxcbiAgICAgIHN0YXJ0VHJhbnNhY3Rpb25PbkxvY2F0aW9uQ2hhbmdlLFxuICAgICk7XG5cbiAgICBpZiAobWFya0JhY2tncm91bmRUcmFuc2FjdGlvbnMpIHtcbiAgICAgIHJlZ2lzdGVyQmFja2dyb3VuZFRhYkRldGVjdGlvbigpO1xuICAgIH1cblxuICAgIGluc3RydW1lbnRPdXRnb2luZ1JlcXVlc3RzKHsgdHJhY2VGZXRjaCwgdHJhY2VYSFIsIHRyYWNpbmdPcmlnaW5zLCBzaG91bGRDcmVhdGVTcGFuRm9yUmVxdWVzdCB9KTtcbiAgfVxuXG4gIC8qKiBDcmVhdGUgcm91dGluZyBpZGxlIHRyYW5zYWN0aW9uLiAqL1xuICBwcml2YXRlIF9jcmVhdGVSb3V0ZVRyYW5zYWN0aW9uKGNvbnRleHQ6IFRyYW5zYWN0aW9uQ29udGV4dCk6IFRyYW5zYWN0aW9uIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMuX2dldEN1cnJlbnRIdWIpIHtcbiAgICAgIGxvZ2dlci53YXJuKGBbVHJhY2luZ10gRGlkIG5vdCBjcmVhdGUgJHtjb250ZXh0Lm9wfSB0cmFuc2FjdGlvbiBiZWNhdXNlIF9nZXRDdXJyZW50SHViIGlzIGludmFsaWQuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdW5ib3VuZC1tZXRob2RcbiAgICBjb25zdCB7IGJlZm9yZU5hdmlnYXRlLCBpZGxlVGltZW91dCwgbWF4VHJhbnNhY3Rpb25EdXJhdGlvbiB9ID0gdGhpcy5vcHRpb25zO1xuXG4gICAgY29uc3QgcGFyZW50Q29udGV4dEZyb21IZWFkZXIgPSBjb250ZXh0Lm9wID09PSAncGFnZWxvYWQnID8gZ2V0SGVhZGVyQ29udGV4dCgpIDogdW5kZWZpbmVkO1xuXG4gICAgY29uc3QgZXhwYW5kZWRDb250ZXh0ID0ge1xuICAgICAgLi4uY29udGV4dCxcbiAgICAgIC4uLnBhcmVudENvbnRleHRGcm9tSGVhZGVyLFxuICAgICAgdHJpbUVuZDogdHJ1ZSxcbiAgICB9O1xuICAgIGNvbnN0IG1vZGlmaWVkQ29udGV4dCA9IHR5cGVvZiBiZWZvcmVOYXZpZ2F0ZSA9PT0gJ2Z1bmN0aW9uJyA/IGJlZm9yZU5hdmlnYXRlKGV4cGFuZGVkQ29udGV4dCkgOiBleHBhbmRlZENvbnRleHQ7XG5cbiAgICAvLyBGb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgcmVhc29ucywgYmVmb3JlTmF2aWdhdGUgY2FuIHJldHVybiB1bmRlZmluZWQgdG8gXCJkcm9wXCIgdGhlIHRyYW5zYWN0aW9uIChwcmV2ZW50IGl0XG4gICAgLy8gZnJvbSBiZWluZyBzZW50IHRvIFNlbnRyeSkuXG4gICAgY29uc3QgZmluYWxDb250ZXh0ID0gbW9kaWZpZWRDb250ZXh0ID09PSB1bmRlZmluZWQgPyB7IC4uLmV4cGFuZGVkQ29udGV4dCwgc2FtcGxlZDogZmFsc2UgfSA6IG1vZGlmaWVkQ29udGV4dDtcblxuICAgIGlmIChmaW5hbENvbnRleHQuc2FtcGxlZCA9PT0gZmFsc2UpIHtcbiAgICAgIGxvZ2dlci5sb2coYFtUcmFjaW5nXSBXaWxsIG5vdCBzZW5kICR7ZmluYWxDb250ZXh0Lm9wfSB0cmFuc2FjdGlvbiBiZWNhdXNlIG9mIGJlZm9yZU5hdmlnYXRlLmApO1xuICAgIH1cblxuICAgIGxvZ2dlci5sb2coYFtUcmFjaW5nXSBTdGFydGluZyAke2ZpbmFsQ29udGV4dC5vcH0gdHJhbnNhY3Rpb24gb24gc2NvcGVgKTtcblxuICAgIGNvbnN0IGh1YiA9IHRoaXMuX2dldEN1cnJlbnRIdWIoKTtcbiAgICBjb25zdCB7IGxvY2F0aW9uIH0gPSBnZXRHbG9iYWxPYmplY3QoKSBhcyBXaW5kb3dPcldvcmtlckdsb2JhbFNjb3BlICYgeyBsb2NhdGlvbjogTG9jYXRpb24gfTtcblxuICAgIGNvbnN0IGlkbGVUcmFuc2FjdGlvbiA9IHN0YXJ0SWRsZVRyYW5zYWN0aW9uKFxuICAgICAgaHViLFxuICAgICAgZmluYWxDb250ZXh0LFxuICAgICAgaWRsZVRpbWVvdXQsXG4gICAgICB0cnVlLFxuICAgICAgeyBsb2NhdGlvbiB9LCAvLyBmb3IgdXNlIGluIHRoZSB0cmFjZXNTYW1wbGVyXG4gICAgKTtcbiAgICBpZGxlVHJhbnNhY3Rpb24ucmVnaXN0ZXJCZWZvcmVGaW5pc2hDYWxsYmFjaygodHJhbnNhY3Rpb24sIGVuZFRpbWVzdGFtcCkgPT4ge1xuICAgICAgdGhpcy5fbWV0cmljcy5hZGRQZXJmb3JtYW5jZUVudHJpZXModHJhbnNhY3Rpb24pO1xuICAgICAgYWRqdXN0VHJhbnNhY3Rpb25EdXJhdGlvbihzZWNUb01zKG1heFRyYW5zYWN0aW9uRHVyYXRpb24pLCB0cmFuc2FjdGlvbiwgZW5kVGltZXN0YW1wKTtcbiAgICB9KTtcblxuICAgIGlkbGVUcmFuc2FjdGlvbi5zZXRUYWcoJ2lkbGVUaW1lb3V0JywgdGhpcy5fY29uZmlndXJlZElkbGVUaW1lb3V0KTtcblxuICAgIHJldHVybiBpZGxlVHJhbnNhY3Rpb24gYXMgVHJhbnNhY3Rpb247XG4gIH1cbn1cblxuLyoqXG4gKiBHZXRzIHRyYW5zYWN0aW9uIGNvbnRleHQgZnJvbSBhIHNlbnRyeS10cmFjZSBtZXRhLlxuICpcbiAqIEByZXR1cm5zIFRyYW5zYWN0aW9uIGNvbnRleHQgZGF0YSBmcm9tIHRoZSBoZWFkZXIgb3IgdW5kZWZpbmVkIGlmIHRoZXJlJ3Mgbm8gaGVhZGVyIG9yIHRoZSBoZWFkZXIgaXMgbWFsZm9ybWVkXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRIZWFkZXJDb250ZXh0KCk6IFBhcnRpYWw8VHJhbnNhY3Rpb25Db250ZXh0PiB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGhlYWRlciA9IGdldE1ldGFDb250ZW50KCdzZW50cnktdHJhY2UnKTtcbiAgaWYgKGhlYWRlcikge1xuICAgIHJldHVybiBleHRyYWN0VHJhY2VwYXJlbnREYXRhKGhlYWRlcik7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKiogUmV0dXJucyB0aGUgdmFsdWUgb2YgYSBtZXRhIHRhZyAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldE1ldGFDb250ZW50KG1ldGFOYW1lOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgY29uc3QgZWwgPSBnZXRHbG9iYWxPYmplY3Q8V2luZG93PigpLmRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYG1ldGFbbmFtZT0ke21ldGFOYW1lfV1gKTtcbiAgcmV0dXJuIGVsID8gZWwuZ2V0QXR0cmlidXRlKCdjb250ZW50JykgOiBudWxsO1xufVxuXG4vKiogQWRqdXN0cyB0cmFuc2FjdGlvbiB2YWx1ZSBiYXNlZCBvbiBtYXggdHJhbnNhY3Rpb24gZHVyYXRpb24gKi9cbmZ1bmN0aW9uIGFkanVzdFRyYW5zYWN0aW9uRHVyYXRpb24obWF4RHVyYXRpb246IG51bWJlciwgdHJhbnNhY3Rpb246IElkbGVUcmFuc2FjdGlvbiwgZW5kVGltZXN0YW1wOiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc3QgZGlmZiA9IGVuZFRpbWVzdGFtcCAtIHRyYW5zYWN0aW9uLnN0YXJ0VGltZXN0YW1wO1xuICBjb25zdCBpc091dGRhdGVkVHJhbnNhY3Rpb24gPSBlbmRUaW1lc3RhbXAgJiYgKGRpZmYgPiBtYXhEdXJhdGlvbiB8fCBkaWZmIDwgMCk7XG4gIGlmIChpc091dGRhdGVkVHJhbnNhY3Rpb24pIHtcbiAgICB0cmFuc2FjdGlvbi5zZXRTdGF0dXMoU3BhblN0YXR1cy5EZWFkbGluZUV4Y2VlZGVkKTtcbiAgICB0cmFuc2FjdGlvbi5zZXRUYWcoJ21heFRyYW5zYWN0aW9uRHVyYXRpb25FeGNlZWRlZCcsICd0cnVlJyk7XG4gIH1cbn1cbiIsICJleHBvcnQgeyBCcm93c2VyVHJhY2luZyB9IGZyb20gJy4vYnJvd3NlcnRyYWNpbmcnO1xuZXhwb3J0IHtcbiAgaW5zdHJ1bWVudE91dGdvaW5nUmVxdWVzdHMsXG4gIFJlcXVlc3RJbnN0cnVtZW50YXRpb25PcHRpb25zLFxuICBkZWZhdWx0UmVxdWVzdEluc3RydW1lbnRhdGlvbk9wdGlvbnMsXG59IGZyb20gJy4vcmVxdWVzdCc7XG4iLCAiZXhwb3J0IHsgRXhwcmVzcyB9IGZyb20gJy4vbm9kZS9leHByZXNzJztcbmV4cG9ydCB7IFBvc3RncmVzIH0gZnJvbSAnLi9ub2RlL3Bvc3RncmVzJztcbmV4cG9ydCB7IE15c3FsIH0gZnJvbSAnLi9ub2RlL215c3FsJztcbmV4cG9ydCB7IE1vbmdvIH0gZnJvbSAnLi9ub2RlL21vbmdvJztcblxuLy8gVE9ETyh2Nyk6IFJlbW92ZSB0aGlzIGV4cG9ydFxuLy8gUGxlYXNlIHNlZSBgc3JjL2luZGV4LnRzYCBmb3IgbW9yZSBkZXRhaWxzLlxuZXhwb3J0IHsgQnJvd3NlclRyYWNpbmcgfSBmcm9tICcuLi9icm93c2VyJztcbiIsICJpbXBvcnQgeyBhZGRFeHRlbnNpb25NZXRob2RzIH0gZnJvbSAnLi9odWJleHRlbnNpb25zJztcbmltcG9ydCAqIGFzIEludGVncmF0aW9ucyBmcm9tICcuL2ludGVncmF0aW9ucyc7XG5cbmV4cG9ydCB7IEludGVncmF0aW9ucyB9O1xuXG4vLyBUaGlzIGlzIGFscmVhZHkgZXhwb3J0ZWQgYXMgcGFydCBvZiBgSW50ZWdyYXRpb25zYCBhYm92ZSAoYW5kIGZvciB0aGUgbW9tZW50IHdpbGwgcmVtYWluIHNvIGZvclxuLy8gYmFja3dhcmRzIGNvbXBhdGliaWxpdHkpLCBidXQgdGhhdCBpbnRlcmZlcmVzIHdpdGggdHJlZXNoYWtpbmcsIHNvIHdlIGFsc28gZXhwb3J0IGl0IHNlcGFyYXRlbHlcbi8vIGhlcmUuXG4vL1xuLy8gUHJldmlvdXNseSB3ZSBleHBlY3RlZCB1c2VycyB0byBpbXBvcnQgdHJhY2luZyBpbnRlZ3JhdGlvbnMgbGlrZVxuLy9cbi8vIGltcG9ydCB7IEludGVncmF0aW9ucyB9IGZyb20gJ0BzZW50cnkvdHJhY2luZyc7XG4vLyBjb25zdCBpbnN0YW5jZSA9IG5ldyBJbnRlZ3JhdGlvbnMuQnJvd3NlclRyYWNpbmcoKTtcbi8vXG4vLyBUaGlzIG1ha2VzIHRoZSBpbnRlZ3JhdGlvbnMgdW5hYmxlIHRvIGJlIHRyZWVzaGFrZW4gdGhvdWdoLiBUbyBhZGRyZXNzIHRoaXMsIHdlIG5vdyBoYXZlXG4vLyB0aGlzIGluZGl2aWR1YWwgZXhwb3J0LiBXZSBub3cgZXhwZWN0IHVzZXJzIHRvIGNvbnN1bWUgQnJvd3NlclRyYWNpbmcgbGlrZSBzbzpcbi8vXG4vLyBpbXBvcnQgeyBCcm93c2VyVHJhY2luZyB9IGZyb20gJ0BzZW50cnkvdHJhY2luZyc7XG4vLyBjb25zdCBpbnN0YW5jZSA9IG5ldyBCcm93c2VyVHJhY2luZygpO1xuLy9cbi8vIEZvciBhbiBleGFtcGxlIG9mIG9mIHRoZSBuZXcgdXNhZ2Ugb2YgQnJvd3NlclRyYWNpbmcsIHNlZSBAc2VudHJ5L25leHRqcyBpbmRleC5jbGllbnQudHNcbmV4cG9ydCB7IEJyb3dzZXJUcmFjaW5nIH0gZnJvbSAnLi9icm93c2VyJztcblxuZXhwb3J0IHsgU3BhbiB9IGZyb20gJy4vc3Bhbic7XG5leHBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuZXhwb3J0IHtcbiAgLy8gVE9ETyBkZXByZWNhdGUgb2xkIG5hbWUgaW4gdjdcbiAgaW5zdHJ1bWVudE91dGdvaW5nUmVxdWVzdHMgYXMgcmVnaXN0ZXJSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uLFxuICBSZXF1ZXN0SW5zdHJ1bWVudGF0aW9uT3B0aW9ucyxcbiAgZGVmYXVsdFJlcXVlc3RJbnN0cnVtZW50YXRpb25PcHRpb25zLFxufSBmcm9tICcuL2Jyb3dzZXInO1xuZXhwb3J0IHsgU3BhblN0YXR1cyB9IGZyb20gJy4vc3BhbnN0YXR1cyc7XG5leHBvcnQgeyBJZGxlVHJhbnNhY3Rpb24gfSBmcm9tICcuL2lkbGV0cmFuc2FjdGlvbic7XG5leHBvcnQgeyBzdGFydElkbGVUcmFuc2FjdGlvbiB9IGZyb20gJy4vaHViZXh0ZW5zaW9ucyc7XG5cbi8vIFdlIGFyZSBwYXRjaGluZyB0aGUgZ2xvYmFsIG9iamVjdCB3aXRoIG91ciBodWIgZXh0ZW5zaW9uIG1ldGhvZHNcbmFkZEV4dGVuc2lvbk1ldGhvZHMoKTtcblxuZXhwb3J0IHsgYWRkRXh0ZW5zaW9uTWV0aG9kcyB9O1xuXG5leHBvcnQge1xuICBleHRyYWN0VHJhY2VwYXJlbnREYXRhLFxuICBnZXRBY3RpdmVUcmFuc2FjdGlvbixcbiAgaGFzVHJhY2luZ0VuYWJsZWQsXG4gIHN0cmlwVXJsUXVlcnlBbmRGcmFnbWVudCxcbiAgVFJBQ0VQQVJFTlRfUkVHRVhQLFxufSBmcm9tICcuL3V0aWxzJztcbiIsICIvKiFcbiAqIGNvb2tpZVxuICogQ29weXJpZ2h0KGMpIDIwMTItMjAxNCBSb21hbiBTaHR5bG1hblxuICogQ29weXJpZ2h0KGMpIDIwMTUgRG91Z2xhcyBDaHJpc3RvcGhlciBXaWxzb25cbiAqIE1JVCBMaWNlbnNlZFxuICovXG5cbid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLnBhcnNlID0gcGFyc2U7XG5leHBvcnRzLnNlcmlhbGl6ZSA9IHNlcmlhbGl6ZTtcblxuLyoqXG4gKiBNb2R1bGUgdmFyaWFibGVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgZGVjb2RlID0gZGVjb2RlVVJJQ29tcG9uZW50O1xudmFyIGVuY29kZSA9IGVuY29kZVVSSUNvbXBvbmVudDtcbnZhciBwYWlyU3BsaXRSZWdFeHAgPSAvOyAqLztcblxuLyoqXG4gKiBSZWdFeHAgdG8gbWF0Y2ggZmllbGQtY29udGVudCBpbiBSRkMgNzIzMCBzZWMgMy4yXG4gKlxuICogZmllbGQtY29udGVudCA9IGZpZWxkLXZjaGFyIFsgMSooIFNQIC8gSFRBQiApIGZpZWxkLXZjaGFyIF1cbiAqIGZpZWxkLXZjaGFyICAgPSBWQ0hBUiAvIG9icy10ZXh0XG4gKiBvYnMtdGV4dCAgICAgID0gJXg4MC1GRlxuICovXG5cbnZhciBmaWVsZENvbnRlbnRSZWdFeHAgPSAvXltcXHUwMDA5XFx1MDAyMC1cXHUwMDdlXFx1MDA4MC1cXHUwMGZmXSskLztcblxuLyoqXG4gKiBQYXJzZSBhIGNvb2tpZSBoZWFkZXIuXG4gKlxuICogUGFyc2UgdGhlIGdpdmVuIGNvb2tpZSBoZWFkZXIgc3RyaW5nIGludG8gYW4gb2JqZWN0XG4gKiBUaGUgb2JqZWN0IGhhcyB0aGUgdmFyaW91cyBjb29raWVzIGFzIGtleXMobmFtZXMpID0+IHZhbHVlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc11cbiAqIEByZXR1cm4ge29iamVjdH1cbiAqIEBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZShzdHIsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgc3RyIG11c3QgYmUgYSBzdHJpbmcnKTtcbiAgfVxuXG4gIHZhciBvYmogPSB7fVxuICB2YXIgb3B0ID0gb3B0aW9ucyB8fCB7fTtcbiAgdmFyIHBhaXJzID0gc3RyLnNwbGl0KHBhaXJTcGxpdFJlZ0V4cCk7XG4gIHZhciBkZWMgPSBvcHQuZGVjb2RlIHx8IGRlY29kZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBhaXJzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHBhaXIgPSBwYWlyc1tpXTtcbiAgICB2YXIgZXFfaWR4ID0gcGFpci5pbmRleE9mKCc9Jyk7XG5cbiAgICAvLyBza2lwIHRoaW5ncyB0aGF0IGRvbid0IGxvb2sgbGlrZSBrZXk9dmFsdWVcbiAgICBpZiAoZXFfaWR4IDwgMCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIGtleSA9IHBhaXIuc3Vic3RyKDAsIGVxX2lkeCkudHJpbSgpXG4gICAgdmFyIHZhbCA9IHBhaXIuc3Vic3RyKCsrZXFfaWR4LCBwYWlyLmxlbmd0aCkudHJpbSgpO1xuXG4gICAgLy8gcXVvdGVkIHZhbHVlc1xuICAgIGlmICgnXCInID09IHZhbFswXSkge1xuICAgICAgdmFsID0gdmFsLnNsaWNlKDEsIC0xKTtcbiAgICB9XG5cbiAgICAvLyBvbmx5IGFzc2lnbiBvbmNlXG4gICAgaWYgKHVuZGVmaW5lZCA9PSBvYmpba2V5XSkge1xuICAgICAgb2JqW2tleV0gPSB0cnlEZWNvZGUodmFsLCBkZWMpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG5cbi8qKlxuICogU2VyaWFsaXplIGRhdGEgaW50byBhIGNvb2tpZSBoZWFkZXIuXG4gKlxuICogU2VyaWFsaXplIHRoZSBhIG5hbWUgdmFsdWUgcGFpciBpbnRvIGEgY29va2llIHN0cmluZyBzdWl0YWJsZSBmb3JcbiAqIGh0dHAgaGVhZGVycy4gQW4gb3B0aW9uYWwgb3B0aW9ucyBvYmplY3Qgc3BlY2lmaWVkIGNvb2tpZSBwYXJhbWV0ZXJzLlxuICpcbiAqIHNlcmlhbGl6ZSgnZm9vJywgJ2JhcicsIHsgaHR0cE9ubHk6IHRydWUgfSlcbiAqICAgPT4gXCJmb289YmFyOyBodHRwT25seVwiXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcbiAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0aW9uc11cbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBwdWJsaWNcbiAqL1xuXG5mdW5jdGlvbiBzZXJpYWxpemUobmFtZSwgdmFsLCBvcHRpb25zKSB7XG4gIHZhciBvcHQgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgZW5jID0gb3B0LmVuY29kZSB8fCBlbmNvZGU7XG5cbiAgaWYgKHR5cGVvZiBlbmMgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gZW5jb2RlIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIGlmICghZmllbGRDb250ZW50UmVnRXhwLnRlc3QobmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBuYW1lIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIHZhciB2YWx1ZSA9IGVuYyh2YWwpO1xuXG4gIGlmICh2YWx1ZSAmJiAhZmllbGRDb250ZW50UmVnRXhwLnRlc3QodmFsdWUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgdmFsIGlzIGludmFsaWQnKTtcbiAgfVxuXG4gIHZhciBzdHIgPSBuYW1lICsgJz0nICsgdmFsdWU7XG5cbiAgaWYgKG51bGwgIT0gb3B0Lm1heEFnZSkge1xuICAgIHZhciBtYXhBZ2UgPSBvcHQubWF4QWdlIC0gMDtcblxuICAgIGlmIChpc05hTihtYXhBZ2UpIHx8ICFpc0Zpbml0ZShtYXhBZ2UpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gbWF4QWdlIGlzIGludmFsaWQnKVxuICAgIH1cblxuICAgIHN0ciArPSAnOyBNYXgtQWdlPScgKyBNYXRoLmZsb29yKG1heEFnZSk7XG4gIH1cblxuICBpZiAob3B0LmRvbWFpbikge1xuICAgIGlmICghZmllbGRDb250ZW50UmVnRXhwLnRlc3Qob3B0LmRvbWFpbikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBkb21haW4gaXMgaW52YWxpZCcpO1xuICAgIH1cblxuICAgIHN0ciArPSAnOyBEb21haW49JyArIG9wdC5kb21haW47XG4gIH1cblxuICBpZiAob3B0LnBhdGgpIHtcbiAgICBpZiAoIWZpZWxkQ29udGVudFJlZ0V4cC50ZXN0KG9wdC5wYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignb3B0aW9uIHBhdGggaXMgaW52YWxpZCcpO1xuICAgIH1cblxuICAgIHN0ciArPSAnOyBQYXRoPScgKyBvcHQucGF0aDtcbiAgfVxuXG4gIGlmIChvcHQuZXhwaXJlcykge1xuICAgIGlmICh0eXBlb2Ygb3B0LmV4cGlyZXMudG9VVENTdHJpbmcgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ29wdGlvbiBleHBpcmVzIGlzIGludmFsaWQnKTtcbiAgICB9XG5cbiAgICBzdHIgKz0gJzsgRXhwaXJlcz0nICsgb3B0LmV4cGlyZXMudG9VVENTdHJpbmcoKTtcbiAgfVxuXG4gIGlmIChvcHQuaHR0cE9ubHkpIHtcbiAgICBzdHIgKz0gJzsgSHR0cE9ubHknO1xuICB9XG5cbiAgaWYgKG9wdC5zZWN1cmUpIHtcbiAgICBzdHIgKz0gJzsgU2VjdXJlJztcbiAgfVxuXG4gIGlmIChvcHQuc2FtZVNpdGUpIHtcbiAgICB2YXIgc2FtZVNpdGUgPSB0eXBlb2Ygb3B0LnNhbWVTaXRlID09PSAnc3RyaW5nJ1xuICAgICAgPyBvcHQuc2FtZVNpdGUudG9Mb3dlckNhc2UoKSA6IG9wdC5zYW1lU2l0ZTtcblxuICAgIHN3aXRjaCAoc2FtZVNpdGUpIHtcbiAgICAgIGNhc2UgdHJ1ZTpcbiAgICAgICAgc3RyICs9ICc7IFNhbWVTaXRlPVN0cmljdCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbGF4JzpcbiAgICAgICAgc3RyICs9ICc7IFNhbWVTaXRlPUxheCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnc3RyaWN0JzpcbiAgICAgICAgc3RyICs9ICc7IFNhbWVTaXRlPVN0cmljdCc7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnbm9uZSc6XG4gICAgICAgIHN0ciArPSAnOyBTYW1lU2l0ZT1Ob25lJztcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdvcHRpb24gc2FtZVNpdGUgaXMgaW52YWxpZCcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cbi8qKlxuICogVHJ5IGRlY29kaW5nIGEgc3RyaW5nIHVzaW5nIGEgZGVjb2RpbmcgZnVuY3Rpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHBhcmFtIHtmdW5jdGlvbn0gZGVjb2RlXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHRyeURlY29kZShzdHIsIGRlY29kZSkge1xuICB0cnkge1xuICAgIHJldHVybiBkZWNvZGUoc3RyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbn1cbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGluZXMgKi9cbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnkgKi9cbmltcG9ydCB7IGNhcHR1cmVFeGNlcHRpb24sIGdldEN1cnJlbnRIdWIsIHN0YXJ0VHJhbnNhY3Rpb24sIHdpdGhTY29wZSB9IGZyb20gJ0BzZW50cnkvY29yZSc7XG5pbXBvcnQgeyBleHRyYWN0VHJhY2VwYXJlbnREYXRhLCBTcGFuIH0gZnJvbSAnQHNlbnRyeS90cmFjaW5nJztcbmltcG9ydCB7IEV2ZW50LCBFeHRyYWN0ZWROb2RlUmVxdWVzdERhdGEsIFJlcXVlc3RTZXNzaW9uU3RhdHVzLCBUcmFuc2FjdGlvbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCwgaXNTdHJpbmcsIGxvZ2dlciwgbm9ybWFsaXplLCBzdHJpcFVybFF1ZXJ5QW5kRnJhZ21lbnQgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbmltcG9ydCAqIGFzIGNvb2tpZSBmcm9tICdjb29raWUnO1xuaW1wb3J0ICogYXMgZG9tYWluIGZyb20gJ2RvbWFpbic7XG5pbXBvcnQgKiBhcyBodHRwIGZyb20gJ2h0dHAnO1xuaW1wb3J0ICogYXMgb3MgZnJvbSAnb3MnO1xuaW1wb3J0ICogYXMgdXJsIGZyb20gJ3VybCc7XG5cbmltcG9ydCB7IE5vZGVDbGllbnQgfSBmcm9tICcuL2NsaWVudCc7XG5pbXBvcnQgeyBmbHVzaCwgaXNBdXRvU2Vzc2lvblRyYWNraW5nRW5hYmxlZCB9IGZyb20gJy4vc2RrJztcblxuZXhwb3J0IGludGVyZmFjZSBFeHByZXNzUmVxdWVzdCB7XG4gIGJhc2VVcmw/OiBzdHJpbmc7XG4gIGNvbm5lY3Rpb24/OiB7XG4gICAgcmVtb3RlQWRkcmVzcz86IHN0cmluZztcbiAgfTtcbiAgaXA/OiBzdHJpbmc7XG4gIG1ldGhvZD86IHN0cmluZztcbiAgb3JpZ2luYWxVcmw/OiBzdHJpbmc7XG4gIHJvdXRlPzoge1xuICAgIHBhdGg6IHN0cmluZztcbiAgICBzdGFjazogW1xuICAgICAge1xuICAgICAgICBuYW1lOiBzdHJpbmc7XG4gICAgICB9LFxuICAgIF07XG4gIH07XG4gIHF1ZXJ5Pzoge1xuICAgIC8vIEl0IGNhbiBiZTogdW5kZWZpbmVkIHwgc3RyaW5nIHwgc3RyaW5nW10gfCBQYXJzZWRRcyB8IFBhcnNlZFFzW10gKGZyb20gYHFzYCBwYWNrYWdlKSwgYnV0IHdlIGRvbnQgd2FudCB0byBwdWxsIGl0LlxuICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gIH07XG4gIHVybD86IHN0cmluZztcbiAgdXNlcj86IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH07XG59XG5cbi8qKlxuICogRXhwcmVzcy1jb21wYXRpYmxlIHRyYWNpbmcgaGFuZGxlci5cbiAqIEBzZWUgRXhwb3NlZCBhcyBgSGFuZGxlcnMudHJhY2luZ0hhbmRsZXJgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cmFjaW5nSGFuZGxlcigpOiAoXG4gIHJlcTogaHR0cC5JbmNvbWluZ01lc3NhZ2UsXG4gIHJlczogaHR0cC5TZXJ2ZXJSZXNwb25zZSxcbiAgbmV4dDogKGVycm9yPzogYW55KSA9PiB2b2lkLFxuKSA9PiB2b2lkIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHNlbnRyeVRyYWNpbmdNaWRkbGV3YXJlKFxuICAgIHJlcTogaHR0cC5JbmNvbWluZ01lc3NhZ2UsXG4gICAgcmVzOiBodHRwLlNlcnZlclJlc3BvbnNlLFxuICAgIG5leHQ6IChlcnJvcj86IGFueSkgPT4gdm9pZCxcbiAgKTogdm9pZCB7XG4gICAgLy8gSWYgdGhlcmUgaXMgYSB0cmFjZSBoZWFkZXIgc2V0LCB3ZSBleHRyYWN0IHRoZSBkYXRhIGZyb20gaXQgKHBhcmVudFNwYW5JZCwgdHJhY2VJZCwgYW5kIHNhbXBsaW5nIGRlY2lzaW9uKVxuICAgIGxldCB0cmFjZXBhcmVudERhdGE7XG4gICAgaWYgKHJlcS5oZWFkZXJzICYmIGlzU3RyaW5nKHJlcS5oZWFkZXJzWydzZW50cnktdHJhY2UnXSkpIHtcbiAgICAgIHRyYWNlcGFyZW50RGF0YSA9IGV4dHJhY3RUcmFjZXBhcmVudERhdGEocmVxLmhlYWRlcnNbJ3NlbnRyeS10cmFjZSddIGFzIHN0cmluZyk7XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBzdGFydFRyYW5zYWN0aW9uKFxuICAgICAge1xuICAgICAgICBuYW1lOiBleHRyYWN0RXhwcmVzc1RyYW5zYWN0aW9uTmFtZShyZXEsIHsgcGF0aDogdHJ1ZSwgbWV0aG9kOiB0cnVlIH0pLFxuICAgICAgICBvcDogJ2h0dHAuc2VydmVyJyxcbiAgICAgICAgLi4udHJhY2VwYXJlbnREYXRhLFxuICAgICAgfSxcbiAgICAgIC8vIGV4dHJhIGNvbnRleHQgcGFzc2VkIHRvIHRoZSB0cmFjZXNTYW1wbGVyXG4gICAgICB7IHJlcXVlc3Q6IGV4dHJhY3RSZXF1ZXN0RGF0YShyZXEpIH0sXG4gICAgKTtcblxuICAgIC8vIFdlIHB1dCB0aGUgdHJhbnNhY3Rpb24gb24gdGhlIHNjb3BlIHNvIHVzZXJzIGNhbiBhdHRhY2ggY2hpbGRyZW4gdG8gaXRcbiAgICBnZXRDdXJyZW50SHViKCkuY29uZmlndXJlU2NvcGUoc2NvcGUgPT4ge1xuICAgICAgc2NvcGUuc2V0U3Bhbih0cmFuc2FjdGlvbik7XG4gICAgfSk7XG5cbiAgICAvLyBXZSBhbHNvIHNldCBfX3NlbnRyeV90cmFuc2FjdGlvbiBvbiB0aGUgcmVzcG9uc2Ugc28gcGVvcGxlIGNhbiBncmFiIHRoZSB0cmFuc2FjdGlvbiB0aGVyZSB0byBhZGRcbiAgICAvLyBzcGFucyB0byBpdCBsYXRlci5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgKHJlcyBhcyBhbnkpLl9fc2VudHJ5X3RyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb247XG5cbiAgICByZXMub25jZSgnZmluaXNoJywgKCkgPT4ge1xuICAgICAgLy8gUHVzaCBgdHJhbnNhY3Rpb24uZmluaXNoYCB0byB0aGUgbmV4dCBldmVudCBsb29wIHNvIG9wZW4gc3BhbnMgaGF2ZSBhIGNoYW5jZSB0byBmaW5pc2ggYmVmb3JlIHRoZSB0cmFuc2FjdGlvblxuICAgICAgLy8gY2xvc2VzXG4gICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICBhZGRFeHByZXNzUmVxVG9UcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgcmVxKTtcbiAgICAgICAgdHJhbnNhY3Rpb24uc2V0SHR0cFN0YXR1cyhyZXMuc3RhdHVzQ29kZSk7XG4gICAgICAgIHRyYW5zYWN0aW9uLmZpbmlzaCgpO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICBuZXh0KCk7XG4gIH07XG59XG5cbi8qKlxuICogU2V0IHBhcmFtZXRlcml6ZWQgYXMgdHJhbnNhY3Rpb24gbmFtZSBlLmcuOiBgR0VUIC91c2Vycy86aWRgXG4gKiBBbHNvIGFkZHMgbW9yZSBjb250ZXh0IGRhdGEgb24gdGhlIHRyYW5zYWN0aW9uIGZyb20gdGhlIHJlcXVlc3RcbiAqL1xuZnVuY3Rpb24gYWRkRXhwcmVzc1JlcVRvVHJhbnNhY3Rpb24odHJhbnNhY3Rpb246IFRyYW5zYWN0aW9uIHwgdW5kZWZpbmVkLCByZXE6IEV4cHJlc3NSZXF1ZXN0KTogdm9pZCB7XG4gIGlmICghdHJhbnNhY3Rpb24pIHJldHVybjtcbiAgdHJhbnNhY3Rpb24ubmFtZSA9IGV4dHJhY3RFeHByZXNzVHJhbnNhY3Rpb25OYW1lKHJlcSwgeyBwYXRoOiB0cnVlLCBtZXRob2Q6IHRydWUgfSk7XG4gIHRyYW5zYWN0aW9uLnNldERhdGEoJ3VybCcsIHJlcS5vcmlnaW5hbFVybCk7XG4gIHRyYW5zYWN0aW9uLnNldERhdGEoJ2Jhc2VVcmwnLCByZXEuYmFzZVVybCk7XG4gIHRyYW5zYWN0aW9uLnNldERhdGEoJ3F1ZXJ5JywgcmVxLnF1ZXJ5KTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyBjb21wbGV0ZSBnZW5lcmFsaXplZCBwYXRoIGZyb20gdGhlIHJlcXVlc3Qgb2JqZWN0IGFuZCB1c2VzIGl0IHRvIGNvbnN0cnVjdCB0cmFuc2FjdGlvbiBuYW1lLlxuICpcbiAqIGVnLiBHRVQgL21vdW50cG9pbnQvdXNlci86aWRcbiAqXG4gKiBAcGFyYW0gcmVxIFRoZSBFeHByZXNzUmVxdWVzdCBvYmplY3RcbiAqIEBwYXJhbSBvcHRpb25zIFdoYXQgdG8gaW5jbHVkZSBpbiB0aGUgdHJhbnNhY3Rpb24gbmFtZSAobWV0aG9kLCBwYXRoLCBvciBib3RoKVxuICpcbiAqIEByZXR1cm5zIFRoZSBmdWxseSBjb25zdHJ1Y3RlZCB0cmFuc2FjdGlvbiBuYW1lXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3RFeHByZXNzVHJhbnNhY3Rpb25OYW1lKFxuICByZXE6IEV4cHJlc3NSZXF1ZXN0LFxuICBvcHRpb25zOiB7IHBhdGg/OiBib29sZWFuOyBtZXRob2Q/OiBib29sZWFuIH0gPSB7fSxcbik6IHN0cmluZyB7XG4gIGNvbnN0IG1ldGhvZCA9IHJlcS5tZXRob2Q/LnRvVXBwZXJDYXNlKCk7XG5cbiAgbGV0IHBhdGggPSAnJztcbiAgaWYgKHJlcS5yb3V0ZSkge1xuICAgIHBhdGggPSBgJHtyZXEuYmFzZVVybCB8fCAnJ30ke3JlcS5yb3V0ZS5wYXRofWA7XG4gIH0gZWxzZSBpZiAocmVxLm9yaWdpbmFsVXJsIHx8IHJlcS51cmwpIHtcbiAgICBwYXRoID0gc3RyaXBVcmxRdWVyeUFuZEZyYWdtZW50KHJlcS5vcmlnaW5hbFVybCB8fCByZXEudXJsIHx8ICcnKTtcbiAgfVxuXG4gIGxldCBpbmZvID0gJyc7XG4gIGlmIChvcHRpb25zLm1ldGhvZCAmJiBtZXRob2QpIHtcbiAgICBpbmZvICs9IG1ldGhvZDtcbiAgfVxuICBpZiAob3B0aW9ucy5tZXRob2QgJiYgb3B0aW9ucy5wYXRoKSB7XG4gICAgaW5mbyArPSBgIGA7XG4gIH1cbiAgaWYgKG9wdGlvbnMucGF0aCAmJiBwYXRoKSB7XG4gICAgaW5mbyArPSBwYXRoO1xuICB9XG5cbiAgcmV0dXJuIGluZm87XG59XG5cbnR5cGUgVHJhbnNhY3Rpb25OYW1pbmdTY2hlbWUgPSAncGF0aCcgfCAnbWV0aG9kUGF0aCcgfCAnaGFuZGxlcic7XG5cbi8qKiBKU0RvYyAqL1xuZnVuY3Rpb24gZXh0cmFjdFRyYW5zYWN0aW9uKHJlcTogRXhwcmVzc1JlcXVlc3QsIHR5cGU6IGJvb2xlYW4gfCBUcmFuc2FjdGlvbk5hbWluZ1NjaGVtZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ3BhdGgnOiB7XG4gICAgICByZXR1cm4gZXh0cmFjdEV4cHJlc3NUcmFuc2FjdGlvbk5hbWUocmVxLCB7IHBhdGg6IHRydWUgfSk7XG4gICAgfVxuICAgIGNhc2UgJ2hhbmRsZXInOiB7XG4gICAgICByZXR1cm4gcmVxLnJvdXRlPy5zdGFja1swXS5uYW1lIHx8ICc8YW5vbnltb3VzPic7XG4gICAgfVxuICAgIGNhc2UgJ21ldGhvZFBhdGgnOlxuICAgIGRlZmF1bHQ6IHtcbiAgICAgIHJldHVybiBleHRyYWN0RXhwcmVzc1RyYW5zYWN0aW9uTmFtZShyZXEsIHsgcGF0aDogdHJ1ZSwgbWV0aG9kOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxufVxuXG4vKiogRGVmYXVsdCB1c2VyIGtleXMgdGhhdCdsbCBiZSB1c2VkIHRvIGV4dHJhY3QgZGF0YSBmcm9tIHRoZSByZXF1ZXN0ICovXG5jb25zdCBERUZBVUxUX1VTRVJfS0VZUyA9IFsnaWQnLCAndXNlcm5hbWUnLCAnZW1haWwnXTtcblxuLyoqIEpTRG9jICovXG5mdW5jdGlvbiBleHRyYWN0VXNlckRhdGEoXG4gIHVzZXI6IHtcbiAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIH0sXG4gIGtleXM6IGJvb2xlYW4gfCBzdHJpbmdbXSxcbik6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICBjb25zdCBleHRyYWN0ZWRVc2VyOiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XG4gIGNvbnN0IGF0dHJpYnV0ZXMgPSBBcnJheS5pc0FycmF5KGtleXMpID8ga2V5cyA6IERFRkFVTFRfVVNFUl9LRVlTO1xuXG4gIGF0dHJpYnV0ZXMuZm9yRWFjaChrZXkgPT4ge1xuICAgIGlmICh1c2VyICYmIGtleSBpbiB1c2VyKSB7XG4gICAgICBleHRyYWN0ZWRVc2VyW2tleV0gPSB1c2VyW2tleV07XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZXh0cmFjdGVkVXNlcjtcbn1cblxuLyoqIERlZmF1bHQgcmVxdWVzdCBrZXlzIHRoYXQnbGwgYmUgdXNlZCB0byBleHRyYWN0IGRhdGEgZnJvbSB0aGUgcmVxdWVzdCAqL1xuY29uc3QgREVGQVVMVF9SRVFVRVNUX0tFWVMgPSBbJ2Nvb2tpZXMnLCAnZGF0YScsICdoZWFkZXJzJywgJ21ldGhvZCcsICdxdWVyeV9zdHJpbmcnLCAndXJsJ107XG5cbi8qKlxuICogTm9ybWFsaXplcyBkYXRhIGZyb20gdGhlIHJlcXVlc3Qgb2JqZWN0LCBhY2NvdW50aW5nIGZvciBmcmFtZXdvcmsgZGlmZmVyZW5jZXMuXG4gKlxuICogQHBhcmFtIHJlcSBUaGUgcmVxdWVzdCBvYmplY3QgZnJvbSB3aGljaCB0byBleHRyYWN0IGRhdGFcbiAqIEBwYXJhbSBrZXlzIEFuIG9wdGlvbmFsIGFycmF5IG9mIGtleXMgdG8gaW5jbHVkZSBpbiB0aGUgbm9ybWFsaXplZCBkYXRhLiBEZWZhdWx0cyB0byBERUZBVUxUX1JFUVVFU1RfS0VZUyBpZiBub3RcbiAqIHByb3ZpZGVkLlxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgbm9ybWFsaXplZCByZXF1ZXN0IGRhdGFcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4dHJhY3RSZXF1ZXN0RGF0YShcbiAgcmVxOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LFxuICBrZXlzOiBzdHJpbmdbXSA9IERFRkFVTFRfUkVRVUVTVF9LRVlTLFxuKTogRXh0cmFjdGVkTm9kZVJlcXVlc3REYXRhIHtcbiAgY29uc3QgcmVxdWVzdERhdGE6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcblxuICAvLyBoZWFkZXJzOlxuICAvLyAgIG5vZGUsIGV4cHJlc3MsIG5leHRqczogcmVxLmhlYWRlcnNcbiAgLy8gICBrb2E6IHJlcS5oZWFkZXJcbiAgY29uc3QgaGVhZGVycyA9IChyZXEuaGVhZGVycyB8fCByZXEuaGVhZGVyIHx8IHt9KSBhcyB7XG4gICAgaG9zdD86IHN0cmluZztcbiAgICBjb29raWU/OiBzdHJpbmc7XG4gIH07XG4gIC8vIG1ldGhvZDpcbiAgLy8gICBub2RlLCBleHByZXNzLCBrb2EsIG5leHRqczogcmVxLm1ldGhvZFxuICBjb25zdCBtZXRob2QgPSByZXEubWV0aG9kO1xuICAvLyBob3N0OlxuICAvLyAgIGV4cHJlc3M6IHJlcS5ob3N0bmFtZSBpbiA+IDQgYW5kIHJlcS5ob3N0IGluIDwgNFxuICAvLyAgIGtvYTogcmVxLmhvc3RcbiAgLy8gICBub2RlLCBuZXh0anM6IHJlcS5oZWFkZXJzLmhvc3RcbiAgY29uc3QgaG9zdCA9IHJlcS5ob3N0bmFtZSB8fCByZXEuaG9zdCB8fCBoZWFkZXJzLmhvc3QgfHwgJzxubyBob3N0Pic7XG4gIC8vIHByb3RvY29sOlxuICAvLyAgIG5vZGUsIG5leHRqczogPG4vYT5cbiAgLy8gICBleHByZXNzLCBrb2E6IHJlcS5wcm90b2NvbFxuICBjb25zdCBwcm90b2NvbCA9XG4gICAgcmVxLnByb3RvY29sID09PSAnaHR0cHMnIHx8IHJlcS5zZWN1cmUgfHwgKChyZXEuc29ja2V0IHx8IHt9KSBhcyB7IGVuY3J5cHRlZD86IGJvb2xlYW4gfSkuZW5jcnlwdGVkXG4gICAgICA/ICdodHRwcydcbiAgICAgIDogJ2h0dHAnO1xuICAvLyB1cmwgKGluY2x1ZGluZyBwYXRoIGFuZCBxdWVyeSBzdHJpbmcpOlxuICAvLyAgIG5vZGUsIGV4cHJlc3M6IHJlcS5vcmlnaW5hbFVybFxuICAvLyAgIGtvYSwgbmV4dGpzOiByZXEudXJsXG4gIGNvbnN0IG9yaWdpbmFsVXJsID0gKHJlcS5vcmlnaW5hbFVybCB8fCByZXEudXJsIHx8ICcnKSBhcyBzdHJpbmc7XG4gIC8vIGFic29sdXRlIHVybFxuICBjb25zdCBhYnNvbHV0ZVVybCA9IGAke3Byb3RvY29sfTovLyR7aG9zdH0ke29yaWdpbmFsVXJsfWA7XG5cbiAga2V5cy5mb3JFYWNoKGtleSA9PiB7XG4gICAgc3dpdGNoIChrZXkpIHtcbiAgICAgIGNhc2UgJ2hlYWRlcnMnOlxuICAgICAgICByZXF1ZXN0RGF0YS5oZWFkZXJzID0gaGVhZGVycztcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdtZXRob2QnOlxuICAgICAgICByZXF1ZXN0RGF0YS5tZXRob2QgPSBtZXRob2Q7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndXJsJzpcbiAgICAgICAgcmVxdWVzdERhdGEudXJsID0gYWJzb2x1dGVVcmw7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnY29va2llcyc6XG4gICAgICAgIC8vIGNvb2tpZXM6XG4gICAgICAgIC8vICAgbm9kZSwgZXhwcmVzcywga29hOiByZXEuaGVhZGVycy5jb29raWVcbiAgICAgICAgLy8gICB2ZXJjZWwsIHNhaWxzLmpzLCBleHByZXNzICh3LyBjb29raWUgbWlkZGxld2FyZSksIG5leHRqczogcmVxLmNvb2tpZXNcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICByZXF1ZXN0RGF0YS5jb29raWVzID0gcmVxLmNvb2tpZXMgfHwgY29va2llLnBhcnNlKGhlYWRlcnMuY29va2llIHx8ICcnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdxdWVyeV9zdHJpbmcnOlxuICAgICAgICAvLyBxdWVyeSBzdHJpbmc6XG4gICAgICAgIC8vICAgbm9kZTogcmVxLnVybCAocmF3KVxuICAgICAgICAvLyAgIGV4cHJlc3MsIGtvYSwgbmV4dGpzOiByZXEucXVlcnlcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICByZXF1ZXN0RGF0YS5xdWVyeV9zdHJpbmcgPSByZXEucXVlcnkgfHwgdXJsLnBhcnNlKG9yaWdpbmFsVXJsIHx8ICcnLCBmYWxzZSkucXVlcnk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZGF0YSc6XG4gICAgICAgIGlmIChtZXRob2QgPT09ICdHRVQnIHx8IG1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgLy8gYm9keSBkYXRhOlxuICAgICAgICAvLyAgIGV4cHJlc3MsIGtvYSwgbmV4dGpzOiByZXEuYm9keVxuICAgICAgICAvL1xuICAgICAgICAvLyAgIHdoZW4gdXNpbmcgbm9kZSBieSBpdHNlbGYsIHlvdSBoYXZlIHRvIHJlYWQgdGhlIGluY29taW5nIHN0cmVhbShzZWVcbiAgICAgICAgLy8gICBodHRwczovL25vZGVqcy5kZXYvbGVhcm4vZ2V0LWh0dHAtcmVxdWVzdC1ib2R5LWRhdGEtdXNpbmctbm9kZWpzKTsgaWYgYSB1c2VyIGlzIGRvaW5nIHRoYXQsIHdlIGNhbid0IGtub3dcbiAgICAgICAgLy8gICB3aGVyZSB0aGV5J3JlIGdvaW5nIHRvIHN0b3JlIHRoZSBmaW5hbCByZXN1bHQsIHNvIHRoZXknbGwgaGF2ZSB0byBjYXB0dXJlIHRoaXMgZGF0YSB0aGVtc2VsdmVzXG4gICAgICAgIGlmIChyZXEuYm9keSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmVxdWVzdERhdGEuZGF0YSA9IGlzU3RyaW5nKHJlcS5ib2R5KSA/IHJlcS5ib2R5IDogSlNPTi5zdHJpbmdpZnkobm9ybWFsaXplKHJlcS5ib2R5KSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoe30uaGFzT3duUHJvcGVydHkuY2FsbChyZXEsIGtleSkpIHtcbiAgICAgICAgICByZXF1ZXN0RGF0YVtrZXldID0gKHJlcSBhcyB7IFtrZXk6IHN0cmluZ106IGFueSB9KVtrZXldO1xuICAgICAgICB9XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gcmVxdWVzdERhdGE7XG59XG5cbi8qKlxuICogT3B0aW9ucyBkZWNpZGluZyB3aGF0IHBhcnRzIG9mIHRoZSByZXF1ZXN0IHRvIHVzZSB3aGVuIGVuaGFuY2luZyBhbiBldmVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcnNlUmVxdWVzdE9wdGlvbnMge1xuICBpcD86IGJvb2xlYW47XG4gIHJlcXVlc3Q/OiBib29sZWFuIHwgc3RyaW5nW107XG4gIHNlcnZlck5hbWU/OiBib29sZWFuO1xuICB0cmFuc2FjdGlvbj86IGJvb2xlYW4gfCBUcmFuc2FjdGlvbk5hbWluZ1NjaGVtZTtcbiAgdXNlcj86IGJvb2xlYW4gfCBzdHJpbmdbXTtcbiAgdmVyc2lvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogRW5yaWNoZXMgcGFzc2VkIGV2ZW50IHdpdGggcmVxdWVzdCBkYXRhLlxuICpcbiAqIEBwYXJhbSBldmVudCBXaWxsIGJlIG11dGF0ZWQgYW5kIGVucmljaGVkIHdpdGggcmVxIGRhdGFcbiAqIEBwYXJhbSByZXEgUmVxdWVzdCBvYmplY3RcbiAqIEBwYXJhbSBvcHRpb25zIG9iamVjdCBjb250YWluaW5nIGZsYWdzIHRvIGVuYWJsZSBmdW5jdGlvbmFsaXR5XG4gKiBAaGlkZGVuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVJlcXVlc3QoZXZlbnQ6IEV2ZW50LCByZXE6IEV4cHJlc3NSZXF1ZXN0LCBvcHRpb25zPzogUGFyc2VSZXF1ZXN0T3B0aW9ucyk6IEV2ZW50IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIG9wdGlvbnMgPSB7XG4gICAgaXA6IGZhbHNlLFxuICAgIHJlcXVlc3Q6IHRydWUsXG4gICAgc2VydmVyTmFtZTogdHJ1ZSxcbiAgICB0cmFuc2FjdGlvbjogdHJ1ZSxcbiAgICB1c2VyOiB0cnVlLFxuICAgIHZlcnNpb246IHRydWUsXG4gICAgLi4ub3B0aW9ucyxcbiAgfTtcblxuICBpZiAob3B0aW9ucy52ZXJzaW9uKSB7XG4gICAgZXZlbnQuY29udGV4dHMgPSB7XG4gICAgICAuLi5ldmVudC5jb250ZXh0cyxcbiAgICAgIHJ1bnRpbWU6IHtcbiAgICAgICAgbmFtZTogJ25vZGUnLFxuICAgICAgICB2ZXJzaW9uOiBnbG9iYWwucHJvY2Vzcy52ZXJzaW9uLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKG9wdGlvbnMucmVxdWVzdCkge1xuICAgIC8vIGlmIHRoZSBvcHRpb24gdmFsdWUgaXMgYHRydWVgLCB1c2UgdGhlIGRlZmF1bHQgc2V0IG9mIGtleXMgYnkgbm90IHBhc3NpbmcgYW55dGhpbmcgdG8gYGV4dHJhY3RSZXF1ZXN0RGF0YSgpYFxuICAgIGNvbnN0IGV4dHJhY3RlZFJlcXVlc3REYXRhID0gQXJyYXkuaXNBcnJheShvcHRpb25zLnJlcXVlc3QpXG4gICAgICA/IGV4dHJhY3RSZXF1ZXN0RGF0YShyZXEsIG9wdGlvbnMucmVxdWVzdClcbiAgICAgIDogZXh0cmFjdFJlcXVlc3REYXRhKHJlcSk7XG4gICAgZXZlbnQucmVxdWVzdCA9IHtcbiAgICAgIC4uLmV2ZW50LnJlcXVlc3QsXG4gICAgICAuLi5leHRyYWN0ZWRSZXF1ZXN0RGF0YSxcbiAgICB9O1xuICB9XG5cbiAgaWYgKG9wdGlvbnMuc2VydmVyTmFtZSAmJiAhZXZlbnQuc2VydmVyX25hbWUpIHtcbiAgICBldmVudC5zZXJ2ZXJfbmFtZSA9IGdsb2JhbC5wcm9jZXNzLmVudi5TRU5UUllfTkFNRSB8fCBvcy5ob3N0bmFtZSgpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMudXNlcikge1xuICAgIGNvbnN0IGV4dHJhY3RlZFVzZXIgPSByZXEudXNlciAmJiBpc1BsYWluT2JqZWN0KHJlcS51c2VyKSA/IGV4dHJhY3RVc2VyRGF0YShyZXEudXNlciwgb3B0aW9ucy51c2VyKSA6IHt9O1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKGV4dHJhY3RlZFVzZXIpKSB7XG4gICAgICBldmVudC51c2VyID0ge1xuICAgICAgICAuLi5ldmVudC51c2VyLFxuICAgICAgICAuLi5leHRyYWN0ZWRVc2VyLFxuICAgICAgfTtcbiAgICB9XG4gIH1cblxuICAvLyBjbGllbnQgaXA6XG4gIC8vICAgbm9kZSwgbmV4dGpzOiByZXEuY29ubmVjdGlvbi5yZW1vdGVBZGRyZXNzXG4gIC8vICAgZXhwcmVzcywga29hOiByZXEuaXBcbiAgaWYgKG9wdGlvbnMuaXApIHtcbiAgICBjb25zdCBpcCA9IHJlcS5pcCB8fCAocmVxLmNvbm5lY3Rpb24gJiYgcmVxLmNvbm5lY3Rpb24ucmVtb3RlQWRkcmVzcyk7XG4gICAgaWYgKGlwKSB7XG4gICAgICBldmVudC51c2VyID0ge1xuICAgICAgICAuLi5ldmVudC51c2VyLFxuICAgICAgICBpcF9hZGRyZXNzOiBpcCxcbiAgICAgIH07XG4gICAgfVxuICB9XG5cbiAgaWYgKG9wdGlvbnMudHJhbnNhY3Rpb24gJiYgIWV2ZW50LnRyYW5zYWN0aW9uKSB7XG4gICAgLy8gVE9ETyBkbyB3ZSBldmVuIG5lZWQgdGhpcyBhbnltb3JlP1xuICAgIC8vIFRPRE8gbWFrZSB0aGlzIHdvcmsgZm9yIG5leHRqc1xuICAgIGV2ZW50LnRyYW5zYWN0aW9uID0gZXh0cmFjdFRyYW5zYWN0aW9uKHJlcSwgb3B0aW9ucy50cmFuc2FjdGlvbik7XG4gIH1cblxuICByZXR1cm4gZXZlbnQ7XG59XG5cbmV4cG9ydCB0eXBlIFJlcXVlc3RIYW5kbGVyT3B0aW9ucyA9IFBhcnNlUmVxdWVzdE9wdGlvbnMgJiB7XG4gIGZsdXNoVGltZW91dD86IG51bWJlcjtcbn07XG5cbi8qKlxuICogRXhwcmVzcyBjb21wYXRpYmxlIHJlcXVlc3QgaGFuZGxlci5cbiAqIEBzZWUgRXhwb3NlZCBhcyBgSGFuZGxlcnMucmVxdWVzdEhhbmRsZXJgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXF1ZXN0SGFuZGxlcihcbiAgb3B0aW9ucz86IFJlcXVlc3RIYW5kbGVyT3B0aW9ucyxcbik6IChyZXE6IGh0dHAuSW5jb21pbmdNZXNzYWdlLCByZXM6IGh0dHAuU2VydmVyUmVzcG9uc2UsIG5leHQ6IChlcnJvcj86IGFueSkgPT4gdm9pZCkgPT4gdm9pZCB7XG4gIGNvbnN0IGN1cnJlbnRIdWIgPSBnZXRDdXJyZW50SHViKCk7XG4gIGNvbnN0IGNsaWVudCA9IGN1cnJlbnRIdWIuZ2V0Q2xpZW50PE5vZGVDbGllbnQ+KCk7XG4gIC8vIEluaXRpYWxpc2UgYW4gaW5zdGFuY2Ugb2YgU2Vzc2lvbkZsdXNoZXIgb24gdGhlIGNsaWVudCB3aGVuIGBhdXRvU2Vzc2lvblRyYWNraW5nYCBpcyBlbmFibGVkIGFuZCB0aGVcbiAgLy8gYHJlcXVlc3RIYW5kbGVyYCBtaWRkbGV3YXJlIGlzIHVzZWQgaW5kaWNhdGluZyB0aGF0IHdlIGFyZSBydW5uaW5nIGluIFNlc3Npb25BZ2dyZWdhdGVzIG1vZGVcbiAgaWYgKGNsaWVudCAmJiBpc0F1dG9TZXNzaW9uVHJhY2tpbmdFbmFibGVkKGNsaWVudCkpIHtcbiAgICBjbGllbnQuaW5pdFNlc3Npb25GbHVzaGVyKCk7XG5cbiAgICAvLyBJZiBTY29wZSBjb250YWlucyBhIFNpbmdsZSBtb2RlIFNlc3Npb24sIGl0IGlzIHJlbW92ZWQgaW4gZmF2b3Igb2YgdXNpbmcgU2Vzc2lvbiBBZ2dyZWdhdGVzIG1vZGVcbiAgICBjb25zdCBzY29wZSA9IGN1cnJlbnRIdWIuZ2V0U2NvcGUoKTtcbiAgICBpZiAoc2NvcGUgJiYgc2NvcGUuZ2V0U2Vzc2lvbigpKSB7XG4gICAgICBzY29wZS5zZXRTZXNzaW9uKCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBmdW5jdGlvbiBzZW50cnlSZXF1ZXN0TWlkZGxld2FyZShcbiAgICByZXE6IGh0dHAuSW5jb21pbmdNZXNzYWdlLFxuICAgIHJlczogaHR0cC5TZXJ2ZXJSZXNwb25zZSxcbiAgICBuZXh0OiAoZXJyb3I/OiBhbnkpID0+IHZvaWQsXG4gICk6IHZvaWQge1xuICAgIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZmx1c2hUaW1lb3V0ICYmIG9wdGlvbnMuZmx1c2hUaW1lb3V0ID4gMCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuICAgICAgY29uc3QgX2VuZCA9IHJlcy5lbmQ7XG4gICAgICByZXMuZW5kID0gZnVuY3Rpb24oY2h1bms/OiBhbnkgfCAoKCkgPT4gdm9pZCksIGVuY29kaW5nPzogc3RyaW5nIHwgKCgpID0+IHZvaWQpLCBjYj86ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgdm9pZCBmbHVzaChvcHRpb25zLmZsdXNoVGltZW91dClcbiAgICAgICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgICAgICBfZW5kLmNhbGwodGhpcywgY2h1bmssIGVuY29kaW5nLCBjYik7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAudGhlbihudWxsLCBlID0+IHtcbiAgICAgICAgICAgIGxvZ2dlci5lcnJvcihlKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IGxvY2FsID0gZG9tYWluLmNyZWF0ZSgpO1xuICAgIGxvY2FsLmFkZChyZXEpO1xuICAgIGxvY2FsLmFkZChyZXMpO1xuICAgIGxvY2FsLm9uKCdlcnJvcicsIG5leHQpO1xuXG4gICAgbG9jYWwucnVuKCgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRIdWIgPSBnZXRDdXJyZW50SHViKCk7XG5cbiAgICAgIGN1cnJlbnRIdWIuY29uZmlndXJlU2NvcGUoc2NvcGUgPT4ge1xuICAgICAgICBzY29wZS5hZGRFdmVudFByb2Nlc3NvcigoZXZlbnQ6IEV2ZW50KSA9PiBwYXJzZVJlcXVlc3QoZXZlbnQsIHJlcSwgb3B0aW9ucykpO1xuICAgICAgICBjb25zdCBjbGllbnQgPSBjdXJyZW50SHViLmdldENsaWVudDxOb2RlQ2xpZW50PigpO1xuICAgICAgICBpZiAoaXNBdXRvU2Vzc2lvblRyYWNraW5nRW5hYmxlZChjbGllbnQpKSB7XG4gICAgICAgICAgY29uc3Qgc2NvcGUgPSBjdXJyZW50SHViLmdldFNjb3BlKCk7XG4gICAgICAgICAgaWYgKHNjb3BlKSB7XG4gICAgICAgICAgICAvLyBTZXQgYHN0YXR1c2Agb2YgYFJlcXVlc3RTZXNzaW9uYCB0byBPaywgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgcmVxdWVzdFxuICAgICAgICAgICAgc2NvcGUuc2V0UmVxdWVzdFNlc3Npb24oeyBzdGF0dXM6IFJlcXVlc3RTZXNzaW9uU3RhdHVzLk9rIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHJlcy5vbmNlKCdmaW5pc2gnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNsaWVudCA9IGN1cnJlbnRIdWIuZ2V0Q2xpZW50PE5vZGVDbGllbnQ+KCk7XG4gICAgICAgIGlmIChpc0F1dG9TZXNzaW9uVHJhY2tpbmdFbmFibGVkKGNsaWVudCkpIHtcbiAgICAgICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICAgICAgaWYgKGNsaWVudCAmJiAoY2xpZW50IGFzIGFueSkuX2NhcHR1cmVSZXF1ZXN0U2Vzc2lvbikge1xuICAgICAgICAgICAgICAvLyBDYWxsaW5nIF9jYXB0dXJlUmVxdWVzdFNlc3Npb24gdG8gY2FwdHVyZSByZXF1ZXN0IHNlc3Npb24gYXQgdGhlIGVuZCBvZiB0aGUgcmVxdWVzdCBieSBpbmNyZW1lbnRpbmdcbiAgICAgICAgICAgICAgLy8gdGhlIGNvcnJlY3QgU2Vzc2lvbkFnZ3JlZ2F0ZXMgYnVja2V0IGkuZS4gY3Jhc2hlZCwgZXJyb3JlZCBvciBleGl0ZWRcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICAgICAgICAoY2xpZW50IGFzIGFueSkuX2NhcHR1cmVSZXF1ZXN0U2Vzc2lvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIG5leHQoKTtcbiAgICB9KTtcbiAgfTtcbn1cblxuLyoqIEpTRG9jICovXG5pbnRlcmZhY2UgTWlkZGxld2FyZUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBzdGF0dXM/OiBudW1iZXIgfCBzdHJpbmc7XG4gIHN0YXR1c0NvZGU/OiBudW1iZXIgfCBzdHJpbmc7XG4gIHN0YXR1c19jb2RlPzogbnVtYmVyIHwgc3RyaW5nO1xuICBvdXRwdXQ/OiB7XG4gICAgc3RhdHVzQ29kZT86IG51bWJlciB8IHN0cmluZztcbiAgfTtcbn1cblxuLyoqIEpTRG9jICovXG5mdW5jdGlvbiBnZXRTdGF0dXNDb2RlRnJvbVJlc3BvbnNlKGVycm9yOiBNaWRkbGV3YXJlRXJyb3IpOiBudW1iZXIge1xuICBjb25zdCBzdGF0dXNDb2RlID0gZXJyb3Iuc3RhdHVzIHx8IGVycm9yLnN0YXR1c0NvZGUgfHwgZXJyb3Iuc3RhdHVzX2NvZGUgfHwgKGVycm9yLm91dHB1dCAmJiBlcnJvci5vdXRwdXQuc3RhdHVzQ29kZSk7XG4gIHJldHVybiBzdGF0dXNDb2RlID8gcGFyc2VJbnQoc3RhdHVzQ29kZSBhcyBzdHJpbmcsIDEwKSA6IDUwMDtcbn1cblxuLyoqIFJldHVybnMgdHJ1ZSBpZiByZXNwb25zZSBjb2RlIGlzIGludGVybmFsIHNlcnZlciBlcnJvciAqL1xuZnVuY3Rpb24gZGVmYXVsdFNob3VsZEhhbmRsZUVycm9yKGVycm9yOiBNaWRkbGV3YXJlRXJyb3IpOiBib29sZWFuIHtcbiAgY29uc3Qgc3RhdHVzID0gZ2V0U3RhdHVzQ29kZUZyb21SZXNwb25zZShlcnJvcik7XG4gIHJldHVybiBzdGF0dXMgPj0gNTAwO1xufVxuXG4vKipcbiAqIEV4cHJlc3MgY29tcGF0aWJsZSBlcnJvciBoYW5kbGVyLlxuICogQHNlZSBFeHBvc2VkIGFzIGBIYW5kbGVycy5lcnJvckhhbmRsZXJgXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlcnJvckhhbmRsZXIob3B0aW9ucz86IHtcbiAgLyoqXG4gICAqIENhbGxiYWNrIG1ldGhvZCBkZWNpZGluZyB3aGV0aGVyIGVycm9yIHNob3VsZCBiZSBjYXB0dXJlZCBhbmQgc2VudCB0byBTZW50cnlcbiAgICogQHBhcmFtIGVycm9yIENhcHR1cmVkIG1pZGRsZXdhcmUgZXJyb3JcbiAgICovXG4gIHNob3VsZEhhbmRsZUVycm9yPyhlcnJvcjogTWlkZGxld2FyZUVycm9yKTogYm9vbGVhbjtcbn0pOiAoXG4gIGVycm9yOiBNaWRkbGV3YXJlRXJyb3IsXG4gIHJlcTogaHR0cC5JbmNvbWluZ01lc3NhZ2UsXG4gIHJlczogaHR0cC5TZXJ2ZXJSZXNwb25zZSxcbiAgbmV4dDogKGVycm9yOiBNaWRkbGV3YXJlRXJyb3IpID0+IHZvaWQsXG4pID0+IHZvaWQge1xuICByZXR1cm4gZnVuY3Rpb24gc2VudHJ5RXJyb3JNaWRkbGV3YXJlKFxuICAgIGVycm9yOiBNaWRkbGV3YXJlRXJyb3IsXG4gICAgX3JlcTogaHR0cC5JbmNvbWluZ01lc3NhZ2UsXG4gICAgcmVzOiBodHRwLlNlcnZlclJlc3BvbnNlLFxuICAgIG5leHQ6IChlcnJvcjogTWlkZGxld2FyZUVycm9yKSA9PiB2b2lkLFxuICApOiB2b2lkIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgY29uc3Qgc2hvdWxkSGFuZGxlRXJyb3IgPSAob3B0aW9ucyAmJiBvcHRpb25zLnNob3VsZEhhbmRsZUVycm9yKSB8fCBkZWZhdWx0U2hvdWxkSGFuZGxlRXJyb3I7XG5cbiAgICBpZiAoc2hvdWxkSGFuZGxlRXJyb3IoZXJyb3IpKSB7XG4gICAgICB3aXRoU2NvcGUoX3Njb3BlID0+IHtcbiAgICAgICAgLy8gRm9yIHNvbWUgcmVhc29uIHdlIG5lZWQgdG8gc2V0IHRoZSB0cmFuc2FjdGlvbiBvbiB0aGUgc2NvcGUgYWdhaW5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IChyZXMgYXMgYW55KS5fX3NlbnRyeV90cmFuc2FjdGlvbiBhcyBTcGFuO1xuICAgICAgICBpZiAodHJhbnNhY3Rpb24gJiYgX3Njb3BlLmdldFNwYW4oKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgX3Njb3BlLnNldFNwYW4odHJhbnNhY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2xpZW50ID0gZ2V0Q3VycmVudEh1YigpLmdldENsaWVudDxOb2RlQ2xpZW50PigpO1xuICAgICAgICBpZiAoY2xpZW50ICYmIGlzQXV0b1Nlc3Npb25UcmFja2luZ0VuYWJsZWQoY2xpZW50KSkge1xuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBgU2Vzc2lvbkZsdXNoZXJgIGlzIGluc3RhbnRpYXRlZCBvbiB0aGUgY2xpZW50IHRvIGdvIGludG8gdGhpcyBicmFuY2ggdGhhdCBtYXJrcyB0aGVcbiAgICAgICAgICAvLyBgcmVxdWVzdFNlc3Npb24uc3RhdHVzYCBhcyBgQ3Jhc2hlZGAsIGFuZCB0aGlzIGNoZWNrIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBgU2Vzc2lvbkZsdXNoZXJgIGlzIG9ubHlcbiAgICAgICAgICAvLyBpbnN0YW50aWF0ZWQgd2hlbiB0aGUgdGhlYHJlcXVlc3RIYW5kbGVyYCBtaWRkbGV3YXJlIGlzIGluaXRpYWxpc2VkLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGQgYmVcbiAgICAgICAgICAvLyBydW5uaW5nIGluIFNlc3Npb25BZ2dyZWdhdGVzIG1vZGVcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgICAgICAgY29uc3QgaXNTZXNzaW9uQWdncmVnYXRlc01vZGUgPSAoY2xpZW50IGFzIGFueSkuX3Nlc3Npb25GbHVzaGVyICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKGlzU2Vzc2lvbkFnZ3JlZ2F0ZXNNb2RlKSB7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0U2Vzc2lvbiA9IF9zY29wZS5nZXRSZXF1ZXN0U2Vzc2lvbigpO1xuICAgICAgICAgICAgLy8gSWYgYW4gZXJyb3IgYnViYmxlcyB0byB0aGUgYGVycm9ySGFuZGxlcmAsIHRoZW4gdGhpcyBpcyBhbiB1bmhhbmRsZWQgZXJyb3IsIGFuZCBzaG91bGQgYmUgcmVwb3J0ZWQgYXMgYVxuICAgICAgICAgICAgLy8gQ3Jhc2hlZCBzZXNzaW9uLiBUaGUgYF9yZXF1ZXN0U2Vzc2lvbi5zdGF0dXNgIGlzIGNoZWNrZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBlcnJvciBpcyBoYXBwZW5pbmcgd2l0aGluXG4gICAgICAgICAgICAvLyB0aGUgYm91bmRzIG9mIGEgcmVxdWVzdCwgYW5kIGlmIHNvIHRoZSBzdGF0dXMgaXMgdXBkYXRlZFxuICAgICAgICAgICAgaWYgKHJlcXVlc3RTZXNzaW9uICYmIHJlcXVlc3RTZXNzaW9uLnN0YXR1cyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICByZXF1ZXN0U2Vzc2lvbi5zdGF0dXMgPSBSZXF1ZXN0U2Vzc2lvblN0YXR1cy5DcmFzaGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV2ZW50SWQgPSBjYXB0dXJlRXhjZXB0aW9uKGVycm9yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICAocmVzIGFzIGFueSkuc2VudHJ5ID0gZXZlbnRJZDtcbiAgICAgICAgbmV4dChlcnJvcik7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5leHQoZXJyb3IpO1xuICB9O1xufVxuIiwgImV4cG9ydCB7XG4gIEJyZWFkY3J1bWIsXG4gIEJyZWFkY3J1bWJIaW50LFxuICBSZXF1ZXN0LFxuICBTZGtJbmZvLFxuICBFdmVudCxcbiAgRXZlbnRIaW50LFxuICBFeGNlcHRpb24sXG4gIFJlc3BvbnNlLFxuICBTZXZlcml0eSxcbiAgU3RhY2tGcmFtZSxcbiAgU3RhY2t0cmFjZSxcbiAgU3RhdHVzLFxuICBUaHJlYWQsXG4gIFVzZXIsXG59IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuXG5leHBvcnQge1xuICBhZGRHbG9iYWxFdmVudFByb2Nlc3NvcixcbiAgYWRkQnJlYWRjcnVtYixcbiAgY2FwdHVyZUV4Y2VwdGlvbixcbiAgY2FwdHVyZUV2ZW50LFxuICBjYXB0dXJlTWVzc2FnZSxcbiAgY29uZmlndXJlU2NvcGUsXG4gIGdldEh1YkZyb21DYXJyaWVyLFxuICBnZXRDdXJyZW50SHViLFxuICBIdWIsXG4gIG1ha2VNYWluLFxuICBTY29wZSxcbiAgc3RhcnRUcmFuc2FjdGlvbixcbiAgU0RLX1ZFUlNJT04sXG4gIHNldENvbnRleHQsXG4gIHNldEV4dHJhLFxuICBzZXRFeHRyYXMsXG4gIHNldFRhZyxcbiAgc2V0VGFncyxcbiAgc2V0VXNlcixcbiAgd2l0aFNjb3BlLFxufSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuXG5leHBvcnQgeyBOb2RlT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0IHsgTm9kZUJhY2tlbmQgfSBmcm9tICcuL2JhY2tlbmQnO1xuZXhwb3J0IHsgTm9kZUNsaWVudCB9IGZyb20gJy4vY2xpZW50JztcbmV4cG9ydCB7IGRlZmF1bHRJbnRlZ3JhdGlvbnMsIGluaXQsIGxhc3RFdmVudElkLCBmbHVzaCwgY2xvc2UsIGdldFNlbnRyeVJlbGVhc2UgfSBmcm9tICcuL3Nkayc7XG5leHBvcnQgeyBkZWVwUmVhZERpclN5bmMgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB7IFNES19OQU1FIH0gZnJvbSAnLi92ZXJzaW9uJztcblxuaW1wb3J0IHsgSW50ZWdyYXRpb25zIGFzIENvcmVJbnRlZ3JhdGlvbnMgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgZ2V0TWFpbkNhcnJpZXIgfSBmcm9tICdAc2VudHJ5L2h1Yic7XG5pbXBvcnQgKiBhcyBkb21haW4gZnJvbSAnZG9tYWluJztcblxuaW1wb3J0ICogYXMgSGFuZGxlcnMgZnJvbSAnLi9oYW5kbGVycyc7XG5pbXBvcnQgKiBhcyBOb2RlSW50ZWdyYXRpb25zIGZyb20gJy4vaW50ZWdyYXRpb25zJztcbmltcG9ydCAqIGFzIFRyYW5zcG9ydHMgZnJvbSAnLi90cmFuc3BvcnRzJztcblxuY29uc3QgSU5URUdSQVRJT05TID0ge1xuICAuLi5Db3JlSW50ZWdyYXRpb25zLFxuICAuLi5Ob2RlSW50ZWdyYXRpb25zLFxufTtcblxuZXhwb3J0IHsgSU5URUdSQVRJT05TIGFzIEludGVncmF0aW9ucywgVHJhbnNwb3J0cywgSGFuZGxlcnMgfTtcblxuLy8gV2UgbmVlZCB0byBwYXRjaCBkb21haW4gb24gdGhlIGdsb2JhbCBfX1NFTlRSWV9fIG9iamVjdCB0byBtYWtlIGl0IHdvcmsgZm9yIG5vZGUgaW4gY3Jvc3MtcGxhdGZvcm0gcGFja2FnZXMgbGlrZVxuLy8gQHNlbnRyeS9odWIuIElmIHdlIGRvbid0IGRvIHRoaXMsIGJyb3dzZXIgYnVuZGxlcnMgd2lsbCBoYXZlIHRyb3VibGVzIHJlc29sdmluZyBgcmVxdWlyZSgnZG9tYWluJylgLlxuY29uc3QgY2FycmllciA9IGdldE1haW5DYXJyaWVyKCk7XG5pZiAoY2Fycmllci5fX1NFTlRSWV9fKSB7XG4gIGNhcnJpZXIuX19TRU5UUllfXy5leHRlbnNpb25zID0gY2Fycmllci5fX1NFTlRSWV9fLmV4dGVuc2lvbnMgfHwge307XG4gIGNhcnJpZXIuX19TRU5UUllfXy5leHRlbnNpb25zLmRvbWFpbiA9IGNhcnJpZXIuX19TRU5UUllfXy5leHRlbnNpb25zLmRvbWFpbiB8fCBkb21haW47XG59XG4iLCAiaW1wb3J0IHsgRXZlbnQsIEV2ZW50UHJvY2Vzc29yLCBIdWIsIEludGVncmF0aW9uIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QsIGxvZ2dlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG4vLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci5qcy9ibG9iL3YxLjQuNy9zcmMvbWluRXJyLmpzXG5jb25zdCBhbmd1bGFyUGF0dGVybiA9IC9eXFxbKCg/OlskYS16QS1aMC05XSs6KT8oPzpbJGEtekEtWjAtOV0rKSlcXF0gKC4qPylcXG4/KFxcUyspJC87XG5cbi8qKlxuICogQW5ndWxhckpTIGludGVncmF0aW9uXG4gKlxuICogUHJvdmlkZXMgYW4gJGV4Y2VwdGlvbkhhbmRsZXIgZm9yIEFuZ3VsYXJKU1xuICovXG5leHBvcnQgY2xhc3MgQW5ndWxhciBpbXBsZW1lbnRzIEludGVncmF0aW9uIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlkOiBzdHJpbmcgPSAnQW5ndWxhckpTJztcblxuICAvKipcbiAgICogbW9kdWxlTmFtZSB1c2VkIGluIEFuZ3VsYXIncyBESSByZXNvbHV0aW9uIGFsZ29yaXRobVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBtb2R1bGVOYW1lOiBzdHJpbmcgPSAnbmdTZW50cnknO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIG5hbWU6IHN0cmluZyA9IEFuZ3VsYXIuaWQ7XG5cbiAgLyoqXG4gICAqIEFuZ3VsYXIncyBpbnN0YW5jZVxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgcHJpdmF0ZSByZWFkb25seSBfYW5ndWxhcjogYW55O1xuXG4gIC8qKlxuICAgKiBuZ1NlbnRyeSBtb2R1bGUgaW5zdGFuY2VcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHByaXZhdGUgcmVhZG9ubHkgX21vZHVsZTogYW55O1xuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGN1cnJlbnQgaHViLlxuICAgKi9cbiAgcHJpdmF0ZSBfZ2V0Q3VycmVudEh1Yj86ICgpID0+IEh1YjtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiB7IGFuZ3VsYXI/OiBhbnkgfSA9IHt9KSB7XG4gICAgbG9nZ2VyLmxvZygnWW91IGFyZSBzdGlsbCB1c2luZyB0aGUgQW5ndWxhciBpbnRlZ3JhdGlvbiwgY29uc2lkZXIgbW92aW5nIHRvIEBzZW50cnkvYW5ndWxhcicpO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgIHRoaXMuX2FuZ3VsYXIgPSBvcHRpb25zLmFuZ3VsYXIgfHwgZ2V0R2xvYmFsT2JqZWN0PGFueT4oKS5hbmd1bGFyO1xuXG4gICAgaWYgKCF0aGlzLl9hbmd1bGFyKSB7XG4gICAgICBsb2dnZXIuZXJyb3IoJ0FuZ3VsYXJJbnRlZ3JhdGlvbiBpcyBtaXNzaW5nIGFuIEFuZ3VsYXIgaW5zdGFuY2UnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgdGhpcy5fbW9kdWxlID0gdGhpcy5fYW5ndWxhci5tb2R1bGUoQW5ndWxhci5tb2R1bGVOYW1lLCBbXSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXR1cE9uY2UoXzogKGNhbGxiYWNrOiBFdmVudFByb2Nlc3NvcikgPT4gdm9pZCwgZ2V0Q3VycmVudEh1YjogKCkgPT4gSHViKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9tb2R1bGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9nZXRDdXJyZW50SHViID0gZ2V0Q3VycmVudEh1YjtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICB0aGlzLl9tb2R1bGUuY29uZmlnKFtcbiAgICAgICckcHJvdmlkZScsXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgKCRwcm92aWRlOiBhbnkpOiB2b2lkID0+IHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICAkcHJvdmlkZS5kZWNvcmF0b3IoJyRleGNlcHRpb25IYW5kbGVyJywgWyckZGVsZWdhdGUnLCB0aGlzLl8kZXhjZXB0aW9uSGFuZGxlckRlY29yYXRvci5iaW5kKHRoaXMpXSk7XG4gICAgICB9LFxuICAgIF0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFuZ3VsYXIncyBleGNlcHRpb25IYW5kbGVyIGZvciBTZW50cnkgaW50ZWdyYXRpb25cbiAgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHByaXZhdGUgXyRleGNlcHRpb25IYW5kbGVyRGVjb3JhdG9yKCRkZWxlZ2F0ZTogYW55KTogYW55IHtcbiAgICByZXR1cm4gKGV4Y2VwdGlvbjogRXJyb3IsIGNhdXNlPzogc3RyaW5nKTogdm9pZCA9PiB7XG4gICAgICBjb25zdCBodWIgPSB0aGlzLl9nZXRDdXJyZW50SHViICYmIHRoaXMuX2dldEN1cnJlbnRIdWIoKTtcblxuICAgICAgaWYgKGh1YiAmJiBodWIuZ2V0SW50ZWdyYXRpb24oQW5ndWxhcikpIHtcbiAgICAgICAgaHViLndpdGhTY29wZShzY29wZSA9PiB7XG4gICAgICAgICAgaWYgKGNhdXNlKSB7XG4gICAgICAgICAgICBzY29wZS5zZXRFeHRyYSgnY2F1c2UnLCBjYXVzZSk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2NvcGUuYWRkRXZlbnRQcm9jZXNzb3IoKGV2ZW50OiBFdmVudCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZXggPSBldmVudC5leGNlcHRpb24gJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyAmJiBldmVudC5leGNlcHRpb24udmFsdWVzWzBdO1xuXG4gICAgICAgICAgICBpZiAoZXgpIHtcbiAgICAgICAgICAgICAgY29uc3QgbWF0Y2hlcyA9IGFuZ3VsYXJQYXR0ZXJuLmV4ZWMoZXgudmFsdWUgfHwgJycpO1xuXG4gICAgICAgICAgICAgIGlmIChtYXRjaGVzKSB7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyB0eXBlIG5vdyBiZWNvbWVzIHNvbWV0aGluZyBsaWtlOiAkcm9vdFNjb3BlOmlucHJvZ1xuICAgICAgICAgICAgICAgIGV4LnR5cGUgPSBtYXRjaGVzWzFdO1xuICAgICAgICAgICAgICAgIGV4LnZhbHVlID0gbWF0Y2hlc1syXTtcbiAgICAgICAgICAgICAgICBldmVudC5tZXNzYWdlID0gYCR7ZXgudHlwZX06ICR7ZXgudmFsdWV9YDtcbiAgICAgICAgICAgICAgICAvLyBhdXRvIHNldCBhIG5ldyB0YWcgc3BlY2lmaWNhbGx5IGZvciB0aGUgYW5ndWxhciBlcnJvciB1cmxcbiAgICAgICAgICAgICAgICBldmVudC5leHRyYSA9IHtcbiAgICAgICAgICAgICAgICAgIC4uLmV2ZW50LmV4dHJhLFxuICAgICAgICAgICAgICAgICAgYW5ndWxhckRvY3M6IG1hdGNoZXNbM10uc3Vic3RyKDAsIDI1MCksXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gZXZlbnQ7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBodWIuY2FwdHVyZUV4Y2VwdGlvbihleGNlcHRpb24pO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgICRkZWxlZ2F0ZShleGNlcHRpb24sIGNhdXNlKTtcbiAgICB9O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgRXZlbnRQcm9jZXNzb3IsIEh1YiwgSW50ZWdyYXRpb24sIFNldmVyaXR5IH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBmaWxsLCBnZXRHbG9iYWxPYmplY3QsIHNhZmVKb2luIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbmNvbnN0IGdsb2JhbCA9IGdldEdsb2JhbE9iamVjdDxXaW5kb3cgfCBOb2RlSlMuR2xvYmFsPigpO1xuXG4vKiogU2VuZCBDb25zb2xlIEFQSSBjYWxscyBhcyBTZW50cnkgRXZlbnRzICovXG5leHBvcnQgY2xhc3MgQ2FwdHVyZUNvbnNvbGUgaW1wbGVtZW50cyBJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpZDogc3RyaW5nID0gJ0NhcHR1cmVDb25zb2xlJztcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSBDYXB0dXJlQ29uc29sZS5pZDtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX2xldmVsczogc3RyaW5nW10gPSBbJ2xvZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InLCAnZGVidWcnLCAnYXNzZXJ0J107XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogeyBsZXZlbHM/OiBzdHJpbmdbXSB9ID0ge30pIHtcbiAgICBpZiAob3B0aW9ucy5sZXZlbHMpIHtcbiAgICAgIHRoaXMuX2xldmVscyA9IG9wdGlvbnMubGV2ZWxzO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldHVwT25jZShfOiAoY2FsbGJhY2s6IEV2ZW50UHJvY2Vzc29yKSA9PiB2b2lkLCBnZXRDdXJyZW50SHViOiAoKSA9PiBIdWIpOiB2b2lkIHtcbiAgICBpZiAoISgnY29uc29sZScgaW4gZ2xvYmFsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2xldmVscy5mb3JFYWNoKChsZXZlbDogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoIShsZXZlbCBpbiBnbG9iYWwuY29uc29sZSkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAgICAgZmlsbChnbG9iYWwuY29uc29sZSwgbGV2ZWwsIChvcmlnaW5hbENvbnNvbGVMZXZlbDogKCkgPT4gYW55KSA9PiAoLi4uYXJnczogYW55W10pOiB2b2lkID0+IHtcbiAgICAgICAgY29uc3QgaHViID0gZ2V0Q3VycmVudEh1YigpO1xuXG4gICAgICAgIGlmIChodWIuZ2V0SW50ZWdyYXRpb24oQ2FwdHVyZUNvbnNvbGUpKSB7XG4gICAgICAgICAgaHViLndpdGhTY29wZShzY29wZSA9PiB7XG4gICAgICAgICAgICBzY29wZS5zZXRMZXZlbChTZXZlcml0eS5mcm9tU3RyaW5nKGxldmVsKSk7XG4gICAgICAgICAgICBzY29wZS5zZXRFeHRyYSgnYXJndW1lbnRzJywgYXJncyk7XG4gICAgICAgICAgICBzY29wZS5hZGRFdmVudFByb2Nlc3NvcihldmVudCA9PiB7XG4gICAgICAgICAgICAgIGV2ZW50LmxvZ2dlciA9ICdjb25zb2xlJztcbiAgICAgICAgICAgICAgcmV0dXJuIGV2ZW50O1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGxldCBtZXNzYWdlID0gc2FmZUpvaW4oYXJncywgJyAnKTtcbiAgICAgICAgICAgIGlmIChsZXZlbCA9PT0gJ2Fzc2VydCcpIHtcbiAgICAgICAgICAgICAgaWYgKGFyZ3NbMF0gPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBBc3NlcnRpb24gZmFpbGVkOiAke3NhZmVKb2luKGFyZ3Muc2xpY2UoMSksICcgJykgfHwgJ2NvbnNvbGUuYXNzZXJ0J31gO1xuICAgICAgICAgICAgICAgIHNjb3BlLnNldEV4dHJhKCdhcmd1bWVudHMnLCBhcmdzLnNsaWNlKDEpKTtcbiAgICAgICAgICAgICAgICBodWIuY2FwdHVyZU1lc3NhZ2UobWVzc2FnZSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobGV2ZWwgPT09ICdlcnJvcicgJiYgYXJnc1swXSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgICAgIGh1Yi5jYXB0dXJlRXhjZXB0aW9uKGFyZ3NbMF0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaHViLmNhcHR1cmVNZXNzYWdlKG1lc3NhZ2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdGhpcyBmYWlscyBmb3Igc29tZSBicm93c2Vycy4gOihcbiAgICAgICAgaWYgKG9yaWdpbmFsQ29uc29sZUxldmVsKSB7XG4gICAgICAgICAgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LmNhbGwob3JpZ2luYWxDb25zb2xlTGV2ZWwsIGdsb2JhbC5jb25zb2xlLCBhcmdzKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBFdmVudCwgRXZlbnRIaW50LCBFdmVudFByb2Nlc3NvciwgSHViLCBJbnRlZ3JhdGlvbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgY29uc29sZVNhbmRib3ggfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuLyoqIEpTRG9jICovXG5pbnRlcmZhY2UgRGVidWdPcHRpb25zIHtcbiAgc3RyaW5naWZ5PzogYm9vbGVhbjtcbiAgZGVidWdnZXI/OiBib29sZWFuO1xufVxuXG4vKiogSlNEb2MgKi9cbmV4cG9ydCBjbGFzcyBEZWJ1ZyBpbXBsZW1lbnRzIEludGVncmF0aW9uIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlkOiBzdHJpbmcgPSAnRGVidWcnO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIG5hbWU6IHN0cmluZyA9IERlYnVnLmlkO1xuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9vcHRpb25zOiBEZWJ1Z09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9ucz86IERlYnVnT3B0aW9ucykge1xuICAgIHRoaXMuX29wdGlvbnMgPSB7XG4gICAgICBkZWJ1Z2dlcjogZmFsc2UsXG4gICAgICBzdHJpbmdpZnk6IGZhbHNlLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0dXBPbmNlKGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yOiAoY2FsbGJhY2s6IEV2ZW50UHJvY2Vzc29yKSA9PiB2b2lkLCBnZXRDdXJyZW50SHViOiAoKSA9PiBIdWIpOiB2b2lkIHtcbiAgICBhZGRHbG9iYWxFdmVudFByb2Nlc3NvcigoZXZlbnQ6IEV2ZW50LCBoaW50PzogRXZlbnRIaW50KSA9PiB7XG4gICAgICBjb25zdCBzZWxmID0gZ2V0Q3VycmVudEh1YigpLmdldEludGVncmF0aW9uKERlYnVnKTtcbiAgICAgIGlmIChzZWxmKSB7XG4gICAgICAgIGlmIChzZWxmLl9vcHRpb25zLmRlYnVnZ2VyKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWRlYnVnZ2VyXG4gICAgICAgICAgZGVidWdnZXI7XG4gICAgICAgIH1cblxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25zb2xlICovXG4gICAgICAgIGNvbnNvbGVTYW5kYm94KCgpID0+IHtcbiAgICAgICAgICBpZiAoc2VsZi5fb3B0aW9ucy5zdHJpbmdpZnkpIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGV2ZW50LCBudWxsLCAyKSk7XG4gICAgICAgICAgICBpZiAoaGludCkge1xuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShoaW50LCBudWxsLCAyKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGV2ZW50KTtcbiAgICAgICAgICAgIGlmIChoaW50KSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGhpbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIC8qIGVzbGludC1lbmFibGUgbm8tY29uc29sZSAqL1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV2ZW50O1xuICAgIH0pO1xuICB9XG59XG4iLCAiaW1wb3J0IHsgRXZlbnQsIEV2ZW50UHJvY2Vzc29yLCBFeGNlcHRpb24sIEh1YiwgSW50ZWdyYXRpb24sIFN0YWNrRnJhbWUgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG4vKiogRGVkdXBsaWNhdGlvbiBmaWx0ZXIgKi9cbmV4cG9ydCBjbGFzcyBEZWR1cGUgaW1wbGVtZW50cyBJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpZDogc3RyaW5nID0gJ0RlZHVwZSc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbmFtZTogc3RyaW5nID0gRGVkdXBlLmlkO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHJpdmF0ZSBfcHJldmlvdXNFdmVudD86IEV2ZW50O1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldHVwT25jZShhZGRHbG9iYWxFdmVudFByb2Nlc3NvcjogKGNhbGxiYWNrOiBFdmVudFByb2Nlc3NvcikgPT4gdm9pZCwgZ2V0Q3VycmVudEh1YjogKCkgPT4gSHViKTogdm9pZCB7XG4gICAgYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3IoKGN1cnJlbnRFdmVudDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IHNlbGYgPSBnZXRDdXJyZW50SHViKCkuZ2V0SW50ZWdyYXRpb24oRGVkdXBlKTtcbiAgICAgIGlmIChzZWxmKSB7XG4gICAgICAgIC8vIEp1dXVzdCBpbiBjYXNlIHNvbWV0aGluZyBnb2VzIHdyb25nXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKHNlbGYuX3Nob3VsZERyb3BFdmVudChjdXJyZW50RXZlbnQsIHNlbGYuX3ByZXZpb3VzRXZlbnQpKSB7XG4gICAgICAgICAgICBsb2dnZXIud2FybihgRXZlbnQgZHJvcHBlZCBkdWUgdG8gYmVpbmcgYSBkdXBsaWNhdGUgb2YgcHJldmlvdXNseSBjYXB0dXJlZCBldmVudC5gKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoX29PKSB7XG4gICAgICAgICAgcmV0dXJuIChzZWxmLl9wcmV2aW91c0V2ZW50ID0gY3VycmVudEV2ZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAoc2VsZi5fcHJldmlvdXNFdmVudCA9IGN1cnJlbnRFdmVudCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gY3VycmVudEV2ZW50O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgX3Nob3VsZERyb3BFdmVudChjdXJyZW50RXZlbnQ6IEV2ZW50LCBwcmV2aW91c0V2ZW50PzogRXZlbnQpOiBib29sZWFuIHtcbiAgICBpZiAoIXByZXZpb3VzRXZlbnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faXNTYW1lTWVzc2FnZUV2ZW50KGN1cnJlbnRFdmVudCwgcHJldmlvdXNFdmVudCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9pc1NhbWVFeGNlcHRpb25FdmVudChjdXJyZW50RXZlbnQsIHByZXZpb3VzRXZlbnQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSBfaXNTYW1lTWVzc2FnZUV2ZW50KGN1cnJlbnRFdmVudDogRXZlbnQsIHByZXZpb3VzRXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgY29uc3QgY3VycmVudE1lc3NhZ2UgPSBjdXJyZW50RXZlbnQubWVzc2FnZTtcbiAgICBjb25zdCBwcmV2aW91c01lc3NhZ2UgPSBwcmV2aW91c0V2ZW50Lm1lc3NhZ2U7XG5cbiAgICAvLyBJZiBuZWl0aGVyIGV2ZW50IGhhcyBhIG1lc3NhZ2UgcHJvcGVydHksIHRoZXkgd2VyZSBib3RoIGV4Y2VwdGlvbnMsIHNvIGJhaWwgb3V0XG4gICAgaWYgKCFjdXJyZW50TWVzc2FnZSAmJiAhcHJldmlvdXNNZXNzYWdlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gSWYgb25seSBvbmUgZXZlbnQgaGFzIGEgc3RhY2t0cmFjZSwgYnV0IG5vdCB0aGUgb3RoZXIgb25lLCB0aGV5IGFyZSBub3QgdGhlIHNhbWVcbiAgICBpZiAoKGN1cnJlbnRNZXNzYWdlICYmICFwcmV2aW91c01lc3NhZ2UpIHx8ICghY3VycmVudE1lc3NhZ2UgJiYgcHJldmlvdXNNZXNzYWdlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChjdXJyZW50TWVzc2FnZSAhPT0gcHJldmlvdXNNZXNzYWdlKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9pc1NhbWVGaW5nZXJwcmludChjdXJyZW50RXZlbnQsIHByZXZpb3VzRXZlbnQpKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLl9pc1NhbWVTdGFja3RyYWNlKGN1cnJlbnRFdmVudCwgcHJldmlvdXNFdmVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF9nZXRGcmFtZXNGcm9tRXZlbnQoZXZlbnQ6IEV2ZW50KTogU3RhY2tGcmFtZVtdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBleGNlcHRpb24gPSBldmVudC5leGNlcHRpb247XG5cbiAgICBpZiAoZXhjZXB0aW9uKSB7XG4gICAgICB0cnkge1xuICAgICAgICAvLyBAdHMtaWdub3JlIE9iamVjdCBjb3VsZCBiZSB1bmRlZmluZWRcbiAgICAgICAgcmV0dXJuIGV4Y2VwdGlvbi52YWx1ZXNbMF0uc3RhY2t0cmFjZS5mcmFtZXM7XG4gICAgICB9IGNhdGNoIChfb08pIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGV2ZW50LnN0YWNrdHJhY2UpIHtcbiAgICAgIHJldHVybiBldmVudC5zdGFja3RyYWNlLmZyYW1lcztcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF9pc1NhbWVTdGFja3RyYWNlKGN1cnJlbnRFdmVudDogRXZlbnQsIHByZXZpb3VzRXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgbGV0IGN1cnJlbnRGcmFtZXMgPSB0aGlzLl9nZXRGcmFtZXNGcm9tRXZlbnQoY3VycmVudEV2ZW50KTtcbiAgICBsZXQgcHJldmlvdXNGcmFtZXMgPSB0aGlzLl9nZXRGcmFtZXNGcm9tRXZlbnQocHJldmlvdXNFdmVudCk7XG5cbiAgICAvLyBJZiBuZWl0aGVyIGV2ZW50IGhhcyBhIHN0YWNrdHJhY2UsIHRoZXkgYXJlIGFzc3VtZWQgdG8gYmUgdGhlIHNhbWVcbiAgICBpZiAoIWN1cnJlbnRGcmFtZXMgJiYgIXByZXZpb3VzRnJhbWVzKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvLyBJZiBvbmx5IG9uZSBldmVudCBoYXMgYSBzdGFja3RyYWNlLCBidXQgbm90IHRoZSBvdGhlciBvbmUsIHRoZXkgYXJlIG5vdCB0aGUgc2FtZVxuICAgIGlmICgoY3VycmVudEZyYW1lcyAmJiAhcHJldmlvdXNGcmFtZXMpIHx8ICghY3VycmVudEZyYW1lcyAmJiBwcmV2aW91c0ZyYW1lcykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjdXJyZW50RnJhbWVzID0gY3VycmVudEZyYW1lcyBhcyBTdGFja0ZyYW1lW107XG4gICAgcHJldmlvdXNGcmFtZXMgPSBwcmV2aW91c0ZyYW1lcyBhcyBTdGFja0ZyYW1lW107XG5cbiAgICAvLyBJZiBudW1iZXIgb2YgZnJhbWVzIGRpZmZlciwgdGhleSBhcmUgbm90IHRoZSBzYW1lXG4gICAgaWYgKHByZXZpb3VzRnJhbWVzLmxlbmd0aCAhPT0gY3VycmVudEZyYW1lcy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICAvLyBPdGhlcndpc2UsIGNvbXBhcmUgdGhlIHR3b1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJldmlvdXNGcmFtZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGZyYW1lQSA9IHByZXZpb3VzRnJhbWVzW2ldO1xuICAgICAgY29uc3QgZnJhbWVCID0gY3VycmVudEZyYW1lc1tpXTtcblxuICAgICAgaWYgKFxuICAgICAgICBmcmFtZUEuZmlsZW5hbWUgIT09IGZyYW1lQi5maWxlbmFtZSB8fFxuICAgICAgICBmcmFtZUEubGluZW5vICE9PSBmcmFtZUIubGluZW5vIHx8XG4gICAgICAgIGZyYW1lQS5jb2xubyAhPT0gZnJhbWVCLmNvbG5vIHx8XG4gICAgICAgIGZyYW1lQS5mdW5jdGlvbiAhPT0gZnJhbWVCLmZ1bmN0aW9uXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgX2dldEV4Y2VwdGlvbkZyb21FdmVudChldmVudDogRXZlbnQpOiBFeGNlcHRpb24gfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBldmVudC5leGNlcHRpb24gJiYgZXZlbnQuZXhjZXB0aW9uLnZhbHVlcyAmJiBldmVudC5leGNlcHRpb24udmFsdWVzWzBdO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgX2lzU2FtZUV4Y2VwdGlvbkV2ZW50KGN1cnJlbnRFdmVudDogRXZlbnQsIHByZXZpb3VzRXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgY29uc3QgcHJldmlvdXNFeGNlcHRpb24gPSB0aGlzLl9nZXRFeGNlcHRpb25Gcm9tRXZlbnQocHJldmlvdXNFdmVudCk7XG4gICAgY29uc3QgY3VycmVudEV4Y2VwdGlvbiA9IHRoaXMuX2dldEV4Y2VwdGlvbkZyb21FdmVudChjdXJyZW50RXZlbnQpO1xuXG4gICAgaWYgKCFwcmV2aW91c0V4Y2VwdGlvbiB8fCAhY3VycmVudEV4Y2VwdGlvbikge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChwcmV2aW91c0V4Y2VwdGlvbi50eXBlICE9PSBjdXJyZW50RXhjZXB0aW9uLnR5cGUgfHwgcHJldmlvdXNFeGNlcHRpb24udmFsdWUgIT09IGN1cnJlbnRFeGNlcHRpb24udmFsdWUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2lzU2FtZUZpbmdlcnByaW50KGN1cnJlbnRFdmVudCwgcHJldmlvdXNFdmVudCkpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuX2lzU2FtZVN0YWNrdHJhY2UoY3VycmVudEV2ZW50LCBwcmV2aW91c0V2ZW50KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgX2lzU2FtZUZpbmdlcnByaW50KGN1cnJlbnRFdmVudDogRXZlbnQsIHByZXZpb3VzRXZlbnQ6IEV2ZW50KTogYm9vbGVhbiB7XG4gICAgbGV0IGN1cnJlbnRGaW5nZXJwcmludCA9IGN1cnJlbnRFdmVudC5maW5nZXJwcmludDtcbiAgICBsZXQgcHJldmlvdXNGaW5nZXJwcmludCA9IHByZXZpb3VzRXZlbnQuZmluZ2VycHJpbnQ7XG5cbiAgICAvLyBJZiBuZWl0aGVyIGV2ZW50IGhhcyBhIGZpbmdlcnByaW50LCB0aGV5IGFyZSBhc3N1bWVkIHRvIGJlIHRoZSBzYW1lXG4gICAgaWYgKCFjdXJyZW50RmluZ2VycHJpbnQgJiYgIXByZXZpb3VzRmluZ2VycHJpbnQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8vIElmIG9ubHkgb25lIGV2ZW50IGhhcyBhIGZpbmdlcnByaW50LCBidXQgbm90IHRoZSBvdGhlciBvbmUsIHRoZXkgYXJlIG5vdCB0aGUgc2FtZVxuICAgIGlmICgoY3VycmVudEZpbmdlcnByaW50ICYmICFwcmV2aW91c0ZpbmdlcnByaW50KSB8fCAoIWN1cnJlbnRGaW5nZXJwcmludCAmJiBwcmV2aW91c0ZpbmdlcnByaW50KSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGN1cnJlbnRGaW5nZXJwcmludCA9IGN1cnJlbnRGaW5nZXJwcmludCBhcyBzdHJpbmdbXTtcbiAgICBwcmV2aW91c0ZpbmdlcnByaW50ID0gcHJldmlvdXNGaW5nZXJwcmludCBhcyBzdHJpbmdbXTtcblxuICAgIC8vIE90aGVyd2lzZSwgY29tcGFyZSB0aGUgdHdvXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiAhIShjdXJyZW50RmluZ2VycHJpbnQuam9pbignJykgPT09IHByZXZpb3VzRmluZ2VycHJpbnQuam9pbignJykpO1xuICAgIH0gY2F0Y2ggKF9vTykge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IEV2ZW50UHJvY2Vzc29yLCBIdWIsIEludGVncmF0aW9uIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBnZXRHbG9iYWxPYmplY3QsIGlzSW5zdGFuY2VPZiwgbG9nZ2VyIH0gZnJvbSAnQHNlbnRyeS91dGlscyc7XG5cbi8qKiBKU0RvYyAqL1xuZXhwb3J0IGNsYXNzIEVtYmVyIGltcGxlbWVudHMgSW50ZWdyYXRpb24ge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaWQ6IHN0cmluZyA9ICdFbWJlcic7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbmFtZTogc3RyaW5nID0gRW1iZXIuaWQ7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gIHByaXZhdGUgcmVhZG9ubHkgX0VtYmVyOiBhbnk7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogeyBFbWJlcj86IGFueSB9ID0ge30pIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgdGhpcy5fRW1iZXIgPSBvcHRpb25zLkVtYmVyIHx8IGdldEdsb2JhbE9iamVjdDxhbnk+KCkuRW1iZXI7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXR1cE9uY2UoXzogKGNhbGxiYWNrOiBFdmVudFByb2Nlc3NvcikgPT4gdm9pZCwgZ2V0Q3VycmVudEh1YjogKCkgPT4gSHViKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLl9FbWJlcikge1xuICAgICAgbG9nZ2VyLmVycm9yKCdFbWJlckludGVncmF0aW9uIGlzIG1pc3NpbmcgYW4gRW1iZXIgaW5zdGFuY2UnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi9cbiAgICBjb25zdCBvbGRPbkVycm9yID0gdGhpcy5fRW1iZXIub25lcnJvcjtcblxuICAgIHRoaXMuX0VtYmVyLm9uZXJyb3IgPSAoZXJyb3I6IEVycm9yKTogdm9pZCA9PiB7XG4gICAgICBpZiAoZ2V0Q3VycmVudEh1YigpLmdldEludGVncmF0aW9uKEVtYmVyKSkge1xuICAgICAgICBnZXRDdXJyZW50SHViKCkuY2FwdHVyZUV4Y2VwdGlvbihlcnJvciwgeyBvcmlnaW5hbEV4Y2VwdGlvbjogZXJyb3IgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb2xkT25FcnJvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBvbGRPbkVycm9yLmNhbGwodGhpcy5fRW1iZXIsIGVycm9yKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fRW1iZXIudGVzdGluZykge1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICB0aGlzLl9FbWJlci5SU1ZQLm9uKCdlcnJvcicsIChyZWFzb246IHVua25vd24pOiB2b2lkID0+IHtcbiAgICAgIGlmIChnZXRDdXJyZW50SHViKCkuZ2V0SW50ZWdyYXRpb24oRW1iZXIpKSB7XG4gICAgICAgIGdldEN1cnJlbnRIdWIoKS53aXRoU2NvcGUoc2NvcGUgPT4ge1xuICAgICAgICAgIGlmIChpc0luc3RhbmNlT2YocmVhc29uLCBFcnJvcikpIHtcbiAgICAgICAgICAgIHNjb3BlLnNldEV4dHJhKCdjb250ZXh0JywgJ1VuaGFuZGxlZCBQcm9taXNlIGVycm9yIGRldGVjdGVkJyk7XG4gICAgICAgICAgICBnZXRDdXJyZW50SHViKCkuY2FwdHVyZUV4Y2VwdGlvbihyZWFzb24sIHsgb3JpZ2luYWxFeGNlcHRpb246IHJlYXNvbiBhcyBFcnJvciB9KTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2NvcGUuc2V0RXh0cmEoJ3JlYXNvbicsIHJlYXNvbik7XG4gICAgICAgICAgICBnZXRDdXJyZW50SHViKCkuY2FwdHVyZU1lc3NhZ2UoJ1VuaGFuZGxlZCBQcm9taXNlIGVycm9yIGRldGVjdGVkJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICAvKiBlc2xpbnQtZW5hYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAqL1xufVxuIiwgImltcG9ydCB7IEV2ZW50LCBFdmVudEhpbnQsIEV2ZW50UHJvY2Vzc29yLCBFeHRlbmRlZEVycm9yLCBIdWIsIEludGVncmF0aW9uIH0gZnJvbSAnQHNlbnRyeS90eXBlcyc7XG5pbXBvcnQgeyBpc0Vycm9yLCBpc1BsYWluT2JqZWN0LCBsb2dnZXIsIG5vcm1hbGl6ZSB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG4vKiogSlNEb2MgKi9cbmludGVyZmFjZSBFeHRyYUVycm9yRGF0YU9wdGlvbnMge1xuICBkZXB0aD86IG51bWJlcjtcbn1cblxuLyoqIFBhdGNoIHRvU3RyaW5nIGNhbGxzIHRvIHJldHVybiBwcm9wZXIgbmFtZSBmb3Igd3JhcHBlZCBmdW5jdGlvbnMgKi9cbmV4cG9ydCBjbGFzcyBFeHRyYUVycm9yRGF0YSBpbXBsZW1lbnRzIEludGVncmF0aW9uIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlkOiBzdHJpbmcgPSAnRXh0cmFFcnJvckRhdGEnO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIG5hbWU6IHN0cmluZyA9IEV4dHJhRXJyb3JEYXRhLmlkO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IEV4dHJhRXJyb3JEYXRhT3B0aW9ucyA9IHsgZGVwdGg6IDMgfSkge31cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXR1cE9uY2UoYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3I6IChjYWxsYmFjazogRXZlbnRQcm9jZXNzb3IpID0+IHZvaWQsIGdldEN1cnJlbnRIdWI6ICgpID0+IEh1Yik6IHZvaWQge1xuICAgIGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yKChldmVudDogRXZlbnQsIGhpbnQ/OiBFdmVudEhpbnQpID0+IHtcbiAgICAgIGNvbnN0IHNlbGYgPSBnZXRDdXJyZW50SHViKCkuZ2V0SW50ZWdyYXRpb24oRXh0cmFFcnJvckRhdGEpO1xuICAgICAgaWYgKCFzZWxmKSB7XG4gICAgICAgIHJldHVybiBldmVudDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzZWxmLmVuaGFuY2VFdmVudFdpdGhFcnJvckRhdGEoZXZlbnQsIGhpbnQpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEF0dGFjaGVzIGV4dHJhY3RlZCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBFcnJvciBvYmplY3QgdG8gZXh0cmEgZmllbGQgaW4gdGhlIEV2ZW50XG4gICAqL1xuICBwdWJsaWMgZW5oYW5jZUV2ZW50V2l0aEVycm9yRGF0YShldmVudDogRXZlbnQsIGhpbnQ/OiBFdmVudEhpbnQpOiBFdmVudCB7XG4gICAgaWYgKCFoaW50IHx8ICFoaW50Lm9yaWdpbmFsRXhjZXB0aW9uIHx8ICFpc0Vycm9yKGhpbnQub3JpZ2luYWxFeGNlcHRpb24pKSB7XG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSAoaGludC5vcmlnaW5hbEV4Y2VwdGlvbiBhcyBFeHRlbmRlZEVycm9yKS5uYW1lIHx8IGhpbnQub3JpZ2luYWxFeGNlcHRpb24uY29uc3RydWN0b3IubmFtZTtcblxuICAgIGNvbnN0IGVycm9yRGF0YSA9IHRoaXMuX2V4dHJhY3RFcnJvckRhdGEoaGludC5vcmlnaW5hbEV4Y2VwdGlvbiBhcyBFeHRlbmRlZEVycm9yKTtcblxuICAgIGlmIChlcnJvckRhdGEpIHtcbiAgICAgIGxldCBjb250ZXh0cyA9IHtcbiAgICAgICAgLi4uZXZlbnQuY29udGV4dHMsXG4gICAgICB9O1xuXG4gICAgICBjb25zdCBub3JtYWxpemVkRXJyb3JEYXRhID0gbm9ybWFsaXplKGVycm9yRGF0YSwgdGhpcy5fb3B0aW9ucy5kZXB0aCk7XG4gICAgICBpZiAoaXNQbGFpbk9iamVjdChub3JtYWxpemVkRXJyb3JEYXRhKSkge1xuICAgICAgICBjb250ZXh0cyA9IHtcbiAgICAgICAgICAuLi5ldmVudC5jb250ZXh0cyxcbiAgICAgICAgICBbbmFtZV06IHtcbiAgICAgICAgICAgIC4uLm5vcm1hbGl6ZWRFcnJvckRhdGEsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgIGNvbnRleHRzLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXZlbnQ7XG4gIH1cblxuICAvKipcbiAgICogRXh0cmFjdCBleHRyYSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBFcnJvciBvYmplY3RcbiAgICovXG4gIHByaXZhdGUgX2V4dHJhY3RFcnJvckRhdGEoZXJyb3I6IEV4dGVuZGVkRXJyb3IpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IG51bGwge1xuICAgIC8vIFdlIGFyZSB0cnlpbmcgdG8gZW5oYW5jZSBhbHJlYWR5IGV4aXN0aW5nIGV2ZW50LCBzbyBubyBoYXJtIGRvbmUgaWYgaXQgd29uJ3Qgc3VjY2VlZFxuICAgIHRyeSB7XG4gICAgICBjb25zdCBuYXRpdmVLZXlzID0gW1xuICAgICAgICAnbmFtZScsXG4gICAgICAgICdtZXNzYWdlJyxcbiAgICAgICAgJ3N0YWNrJyxcbiAgICAgICAgJ2xpbmUnLFxuICAgICAgICAnY29sdW1uJyxcbiAgICAgICAgJ2ZpbGVOYW1lJyxcbiAgICAgICAgJ2xpbmVOdW1iZXInLFxuICAgICAgICAnY29sdW1uTnVtYmVyJyxcbiAgICAgICAgJ3RvSlNPTicsXG4gICAgICBdO1xuXG4gICAgICBjb25zdCBleHRyYUVycm9ySW5mbzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICAgICAgLy8gV2Ugd2FudCBvbmx5IGVudW1lcmFibGUgcHJvcGVydGllcywgdGh1cyBgZ2V0T3duUHJvcGVydHlOYW1lc2AgaXMgcmVkdW5kYW50IGhlcmUsIGFzIHdlIGZpbHRlciBrZXlzIGFueXdheS5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGVycm9yKSkge1xuICAgICAgICBpZiAobmF0aXZlS2V5cy5pbmRleE9mKGtleSkgIT09IC0xKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWUgPSBlcnJvcltrZXldO1xuICAgICAgICBleHRyYUVycm9ySW5mb1trZXldID0gaXNFcnJvcih2YWx1ZSkgPyAodmFsdWUgYXMgRXJyb3IpLnRvU3RyaW5nKCkgOiB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gQ2hlY2sgaWYgc29tZW9uZSBhdHRhY2hlZCBgdG9KU09OYCBtZXRob2QgdG8gZ3JhYiBldmVuIG1vcmUgcHJvcGVydGllcyAoZWcuIGF4aW9zIGlzIGRvaW5nIHRoYXQpXG4gICAgICBpZiAodHlwZW9mIGVycm9yLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkRXJyb3IgPSBlcnJvci50b0pTT04oKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhzZXJpYWxpemVkRXJyb3IpKSB7XG4gICAgICAgICAgY29uc3QgdmFsdWUgPSBzZXJpYWxpemVkRXJyb3Jba2V5XTtcbiAgICAgICAgICBleHRyYUVycm9ySW5mb1trZXldID0gaXNFcnJvcih2YWx1ZSkgPyAodmFsdWUgYXMgRXJyb3IpLnRvU3RyaW5nKCkgOiB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZXh0cmFFcnJvckluZm87XG4gICAgfSBjYXRjaCAob08pIHtcbiAgICAgIGxvZ2dlci5lcnJvcignVW5hYmxlIHRvIGV4dHJhY3QgZXh0cmEgZGF0YSBmcm9tIHRoZSBFcnJvciBvYmplY3Q6Jywgb08pO1xuICAgIH1cblxuICAgIHJldHVybiBudWxsO1xuICB9XG59XG4iLCAiLyohXG4gICAgbG9jYWxGb3JhZ2UgLS0gT2ZmbGluZSBTdG9yYWdlLCBJbXByb3ZlZFxuICAgIFZlcnNpb24gMS4xMC4wXG4gICAgaHR0cHM6Ly9sb2NhbGZvcmFnZS5naXRodWIuaW8vbG9jYWxGb3JhZ2VcbiAgICAoYykgMjAxMy0yMDE3IE1vemlsbGEsIEFwYWNoZSBMaWNlbnNlIDIuMFxuKi9cbihmdW5jdGlvbihmKXtpZih0eXBlb2YgZXhwb3J0cz09PVwib2JqZWN0XCImJnR5cGVvZiBtb2R1bGUhPT1cInVuZGVmaW5lZFwiKXttb2R1bGUuZXhwb3J0cz1mKCl9ZWxzZSBpZih0eXBlb2YgZGVmaW5lPT09XCJmdW5jdGlvblwiJiZkZWZpbmUuYW1kKXtkZWZpbmUoW10sZil9ZWxzZXt2YXIgZztpZih0eXBlb2Ygd2luZG93IT09XCJ1bmRlZmluZWRcIil7Zz13aW5kb3d9ZWxzZSBpZih0eXBlb2YgZ2xvYmFsIT09XCJ1bmRlZmluZWRcIil7Zz1nbG9iYWx9ZWxzZSBpZih0eXBlb2Ygc2VsZiE9PVwidW5kZWZpbmVkXCIpe2c9c2VsZn1lbHNle2c9dGhpc31nLmxvY2FsZm9yYWdlID0gZigpfX0pKGZ1bmN0aW9uKCl7dmFyIGRlZmluZSxtb2R1bGUsZXhwb3J0cztyZXR1cm4gKGZ1bmN0aW9uIGUodCxuLHIpe2Z1bmN0aW9uIHMobyx1KXtpZighbltvXSl7aWYoIXRbb10pe3ZhciBhPXR5cGVvZiByZXF1aXJlPT1cImZ1bmN0aW9uXCImJnJlcXVpcmU7aWYoIXUmJmEpcmV0dXJuIGEobywhMCk7aWYoaSlyZXR1cm4gaShvLCEwKTt2YXIgZj1uZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK28rXCInXCIpO3Rocm93IChmLmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsIGYpfXZhciBsPW5bb109e2V4cG9ydHM6e319O3Rbb11bMF0uY2FsbChsLmV4cG9ydHMsZnVuY3Rpb24oZSl7dmFyIG49dFtvXVsxXVtlXTtyZXR1cm4gcyhuP246ZSl9LGwsbC5leHBvcnRzLGUsdCxuLHIpfXJldHVybiBuW29dLmV4cG9ydHN9dmFyIGk9dHlwZW9mIHJlcXVpcmU9PVwiZnVuY3Rpb25cIiYmcmVxdWlyZTtmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKylzKHJbb10pO3JldHVybiBzfSkoezE6W2Z1bmN0aW9uKF9kZXJlcV8sbW9kdWxlLGV4cG9ydHMpe1xuKGZ1bmN0aW9uIChnbG9iYWwpe1xuJ3VzZSBzdHJpY3QnO1xudmFyIE11dGF0aW9uID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG5cbnZhciBzY2hlZHVsZURyYWluO1xuXG57XG4gIGlmIChNdXRhdGlvbikge1xuICAgIHZhciBjYWxsZWQgPSAwO1xuICAgIHZhciBvYnNlcnZlciA9IG5ldyBNdXRhdGlvbihuZXh0VGljayk7XG4gICAgdmFyIGVsZW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoJycpO1xuICAgIG9ic2VydmVyLm9ic2VydmUoZWxlbWVudCwge1xuICAgICAgY2hhcmFjdGVyRGF0YTogdHJ1ZVxuICAgIH0pO1xuICAgIHNjaGVkdWxlRHJhaW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBlbGVtZW50LmRhdGEgPSAoY2FsbGVkID0gKytjYWxsZWQgJSAyKTtcbiAgICB9O1xuICB9IGVsc2UgaWYgKCFnbG9iYWwuc2V0SW1tZWRpYXRlICYmIHR5cGVvZiBnbG9iYWwuTWVzc2FnZUNoYW5uZWwgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgdmFyIGNoYW5uZWwgPSBuZXcgZ2xvYmFsLk1lc3NhZ2VDaGFubmVsKCk7XG4gICAgY2hhbm5lbC5wb3J0MS5vbm1lc3NhZ2UgPSBuZXh0VGljaztcbiAgICBzY2hlZHVsZURyYWluID0gZnVuY3Rpb24gKCkge1xuICAgICAgY2hhbm5lbC5wb3J0Mi5wb3N0TWVzc2FnZSgwKTtcbiAgICB9O1xuICB9IGVsc2UgaWYgKCdkb2N1bWVudCcgaW4gZ2xvYmFsICYmICdvbnJlYWR5c3RhdGVjaGFuZ2UnIGluIGdsb2JhbC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKSkge1xuICAgIHNjaGVkdWxlRHJhaW4gPSBmdW5jdGlvbiAoKSB7XG5cbiAgICAgIC8vIENyZWF0ZSBhIDxzY3JpcHQ+IGVsZW1lbnQ7IGl0cyByZWFkeXN0YXRlY2hhbmdlIGV2ZW50IHdpbGwgYmUgZmlyZWQgYXN5bmNocm9ub3VzbHkgb25jZSBpdCBpcyBpbnNlcnRlZFxuICAgICAgLy8gaW50byB0aGUgZG9jdW1lbnQuIERvIHNvLCB0aHVzIHF1ZXVpbmcgdXAgdGhlIHRhc2suIFJlbWVtYmVyIHRvIGNsZWFuIHVwIG9uY2UgaXQncyBiZWVuIGNhbGxlZC5cbiAgICAgIHZhciBzY3JpcHRFbCA9IGdsb2JhbC5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzY3JpcHQnKTtcbiAgICAgIHNjcmlwdEVsLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbmV4dFRpY2soKTtcblxuICAgICAgICBzY3JpcHRFbC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuICAgICAgICBzY3JpcHRFbC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHNjcmlwdEVsKTtcbiAgICAgICAgc2NyaXB0RWwgPSBudWxsO1xuICAgICAgfTtcbiAgICAgIGdsb2JhbC5kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXBwZW5kQ2hpbGQoc2NyaXB0RWwpO1xuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgc2NoZWR1bGVEcmFpbiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIHNldFRpbWVvdXQobmV4dFRpY2ssIDApO1xuICAgIH07XG4gIH1cbn1cblxudmFyIGRyYWluaW5nO1xudmFyIHF1ZXVlID0gW107XG4vL25hbWVkIG5leHRUaWNrIGZvciBsZXNzIGNvbmZ1c2luZyBzdGFjayB0cmFjZXNcbmZ1bmN0aW9uIG5leHRUaWNrKCkge1xuICBkcmFpbmluZyA9IHRydWU7XG4gIHZhciBpLCBvbGRRdWV1ZTtcbiAgdmFyIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgd2hpbGUgKGxlbikge1xuICAgIG9sZFF1ZXVlID0gcXVldWU7XG4gICAgcXVldWUgPSBbXTtcbiAgICBpID0gLTE7XG4gICAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgICAgb2xkUXVldWVbaV0oKTtcbiAgICB9XG4gICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICB9XG4gIGRyYWluaW5nID0gZmFsc2U7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW1tZWRpYXRlO1xuZnVuY3Rpb24gaW1tZWRpYXRlKHRhc2spIHtcbiAgaWYgKHF1ZXVlLnB1c2godGFzaykgPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgc2NoZWR1bGVEcmFpbigpO1xuICB9XG59XG5cbn0pLmNhbGwodGhpcyx0eXBlb2YgZ2xvYmFsICE9PSBcInVuZGVmaW5lZFwiID8gZ2xvYmFsIDogdHlwZW9mIHNlbGYgIT09IFwidW5kZWZpbmVkXCIgPyBzZWxmIDogdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHt9KVxufSx7fV0sMjpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG52YXIgaW1tZWRpYXRlID0gX2RlcmVxXygxKTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmZ1bmN0aW9uIElOVEVSTkFMKCkge31cblxudmFyIGhhbmRsZXJzID0ge307XG5cbnZhciBSRUpFQ1RFRCA9IFsnUkVKRUNURUQnXTtcbnZhciBGVUxGSUxMRUQgPSBbJ0ZVTEZJTExFRCddO1xudmFyIFBFTkRJTkcgPSBbJ1BFTkRJTkcnXTtcblxubW9kdWxlLmV4cG9ydHMgPSBQcm9taXNlO1xuXG5mdW5jdGlvbiBQcm9taXNlKHJlc29sdmVyKSB7XG4gIGlmICh0eXBlb2YgcmVzb2x2ZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdyZXNvbHZlciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuICB0aGlzLnN0YXRlID0gUEVORElORztcbiAgdGhpcy5xdWV1ZSA9IFtdO1xuICB0aGlzLm91dGNvbWUgPSB2b2lkIDA7XG4gIGlmIChyZXNvbHZlciAhPT0gSU5URVJOQUwpIHtcbiAgICBzYWZlbHlSZXNvbHZlVGhlbmFibGUodGhpcywgcmVzb2x2ZXIpO1xuICB9XG59XG5cblByb21pc2UucHJvdG90eXBlW1wiY2F0Y2hcIl0gPSBmdW5jdGlvbiAob25SZWplY3RlZCkge1xuICByZXR1cm4gdGhpcy50aGVuKG51bGwsIG9uUmVqZWN0ZWQpO1xufTtcblByb21pc2UucHJvdG90eXBlLnRoZW4gPSBmdW5jdGlvbiAob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgaWYgKHR5cGVvZiBvbkZ1bGZpbGxlZCAhPT0gJ2Z1bmN0aW9uJyAmJiB0aGlzLnN0YXRlID09PSBGVUxGSUxMRUQgfHxcbiAgICB0eXBlb2Ygb25SZWplY3RlZCAhPT0gJ2Z1bmN0aW9uJyAmJiB0aGlzLnN0YXRlID09PSBSRUpFQ1RFRCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHZhciBwcm9taXNlID0gbmV3IHRoaXMuY29uc3RydWN0b3IoSU5URVJOQUwpO1xuICBpZiAodGhpcy5zdGF0ZSAhPT0gUEVORElORykge1xuICAgIHZhciByZXNvbHZlciA9IHRoaXMuc3RhdGUgPT09IEZVTEZJTExFRCA/IG9uRnVsZmlsbGVkIDogb25SZWplY3RlZDtcbiAgICB1bndyYXAocHJvbWlzZSwgcmVzb2x2ZXIsIHRoaXMub3V0Y29tZSk7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5xdWV1ZS5wdXNoKG5ldyBRdWV1ZUl0ZW0ocHJvbWlzZSwgb25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpKTtcbiAgfVxuXG4gIHJldHVybiBwcm9taXNlO1xufTtcbmZ1bmN0aW9uIFF1ZXVlSXRlbShwcm9taXNlLCBvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCkge1xuICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICBpZiAodHlwZW9mIG9uRnVsZmlsbGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhpcy5vbkZ1bGZpbGxlZCA9IG9uRnVsZmlsbGVkO1xuICAgIHRoaXMuY2FsbEZ1bGZpbGxlZCA9IHRoaXMub3RoZXJDYWxsRnVsZmlsbGVkO1xuICB9XG4gIGlmICh0eXBlb2Ygb25SZWplY3RlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHRoaXMub25SZWplY3RlZCA9IG9uUmVqZWN0ZWQ7XG4gICAgdGhpcy5jYWxsUmVqZWN0ZWQgPSB0aGlzLm90aGVyQ2FsbFJlamVjdGVkO1xuICB9XG59XG5RdWV1ZUl0ZW0ucHJvdG90eXBlLmNhbGxGdWxmaWxsZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgaGFuZGxlcnMucmVzb2x2ZSh0aGlzLnByb21pc2UsIHZhbHVlKTtcbn07XG5RdWV1ZUl0ZW0ucHJvdG90eXBlLm90aGVyQ2FsbEZ1bGZpbGxlZCA9IGZ1bmN0aW9uICh2YWx1ZSkge1xuICB1bndyYXAodGhpcy5wcm9taXNlLCB0aGlzLm9uRnVsZmlsbGVkLCB2YWx1ZSk7XG59O1xuUXVldWVJdGVtLnByb3RvdHlwZS5jYWxsUmVqZWN0ZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgaGFuZGxlcnMucmVqZWN0KHRoaXMucHJvbWlzZSwgdmFsdWUpO1xufTtcblF1ZXVlSXRlbS5wcm90b3R5cGUub3RoZXJDYWxsUmVqZWN0ZWQgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgdW53cmFwKHRoaXMucHJvbWlzZSwgdGhpcy5vblJlamVjdGVkLCB2YWx1ZSk7XG59O1xuXG5mdW5jdGlvbiB1bndyYXAocHJvbWlzZSwgZnVuYywgdmFsdWUpIHtcbiAgaW1tZWRpYXRlKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmV0dXJuVmFsdWU7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVyblZhbHVlID0gZnVuYyh2YWx1ZSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGhhbmRsZXJzLnJlamVjdChwcm9taXNlLCBlKTtcbiAgICB9XG4gICAgaWYgKHJldHVyblZhbHVlID09PSBwcm9taXNlKSB7XG4gICAgICBoYW5kbGVycy5yZWplY3QocHJvbWlzZSwgbmV3IFR5cGVFcnJvcignQ2Fubm90IHJlc29sdmUgcHJvbWlzZSB3aXRoIGl0c2VsZicpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaGFuZGxlcnMucmVzb2x2ZShwcm9taXNlLCByZXR1cm5WYWx1ZSk7XG4gICAgfVxuICB9KTtcbn1cblxuaGFuZGxlcnMucmVzb2x2ZSA9IGZ1bmN0aW9uIChzZWxmLCB2YWx1ZSkge1xuICB2YXIgcmVzdWx0ID0gdHJ5Q2F0Y2goZ2V0VGhlbiwgdmFsdWUpO1xuICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgIHJldHVybiBoYW5kbGVycy5yZWplY3Qoc2VsZiwgcmVzdWx0LnZhbHVlKTtcbiAgfVxuICB2YXIgdGhlbmFibGUgPSByZXN1bHQudmFsdWU7XG5cbiAgaWYgKHRoZW5hYmxlKSB7XG4gICAgc2FmZWx5UmVzb2x2ZVRoZW5hYmxlKHNlbGYsIHRoZW5hYmxlKTtcbiAgfSBlbHNlIHtcbiAgICBzZWxmLnN0YXRlID0gRlVMRklMTEVEO1xuICAgIHNlbGYub3V0Y29tZSA9IHZhbHVlO1xuICAgIHZhciBpID0gLTE7XG4gICAgdmFyIGxlbiA9IHNlbGYucXVldWUubGVuZ3RoO1xuICAgIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICAgIHNlbGYucXVldWVbaV0uY2FsbEZ1bGZpbGxlZCh2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBzZWxmO1xufTtcbmhhbmRsZXJzLnJlamVjdCA9IGZ1bmN0aW9uIChzZWxmLCBlcnJvcikge1xuICBzZWxmLnN0YXRlID0gUkVKRUNURUQ7XG4gIHNlbGYub3V0Y29tZSA9IGVycm9yO1xuICB2YXIgaSA9IC0xO1xuICB2YXIgbGVuID0gc2VsZi5xdWV1ZS5sZW5ndGg7XG4gIHdoaWxlICgrK2kgPCBsZW4pIHtcbiAgICBzZWxmLnF1ZXVlW2ldLmNhbGxSZWplY3RlZChlcnJvcik7XG4gIH1cbiAgcmV0dXJuIHNlbGY7XG59O1xuXG5mdW5jdGlvbiBnZXRUaGVuKG9iaikge1xuICAvLyBNYWtlIHN1cmUgd2Ugb25seSBhY2Nlc3MgdGhlIGFjY2Vzc29yIG9uY2UgYXMgcmVxdWlyZWQgYnkgdGhlIHNwZWNcbiAgdmFyIHRoZW4gPSBvYmogJiYgb2JqLnRoZW47XG4gIGlmIChvYmogJiYgKHR5cGVvZiBvYmogPT09ICdvYmplY3QnIHx8IHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbicpICYmIHR5cGVvZiB0aGVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGFwcHlUaGVuKCkge1xuICAgICAgdGhlbi5hcHBseShvYmosIGFyZ3VtZW50cyk7XG4gICAgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzYWZlbHlSZXNvbHZlVGhlbmFibGUoc2VsZiwgdGhlbmFibGUpIHtcbiAgLy8gRWl0aGVyIGZ1bGZpbGwsIHJlamVjdCBvciByZWplY3Qgd2l0aCBlcnJvclxuICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gIGZ1bmN0aW9uIG9uRXJyb3IodmFsdWUpIHtcbiAgICBpZiAoY2FsbGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNhbGxlZCA9IHRydWU7XG4gICAgaGFuZGxlcnMucmVqZWN0KHNlbGYsIHZhbHVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uU3VjY2Vzcyh2YWx1ZSkge1xuICAgIGlmIChjYWxsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY2FsbGVkID0gdHJ1ZTtcbiAgICBoYW5kbGVycy5yZXNvbHZlKHNlbGYsIHZhbHVlKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHRyeVRvVW53cmFwKCkge1xuICAgIHRoZW5hYmxlKG9uU3VjY2Vzcywgb25FcnJvcik7XG4gIH1cblxuICB2YXIgcmVzdWx0ID0gdHJ5Q2F0Y2godHJ5VG9VbndyYXApO1xuICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gJ2Vycm9yJykge1xuICAgIG9uRXJyb3IocmVzdWx0LnZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0cnlDYXRjaChmdW5jLCB2YWx1ZSkge1xuICB2YXIgb3V0ID0ge307XG4gIHRyeSB7XG4gICAgb3V0LnZhbHVlID0gZnVuYyh2YWx1ZSk7XG4gICAgb3V0LnN0YXR1cyA9ICdzdWNjZXNzJztcbiAgfSBjYXRjaCAoZSkge1xuICAgIG91dC5zdGF0dXMgPSAnZXJyb3InO1xuICAgIG91dC52YWx1ZSA9IGU7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cblxuUHJvbWlzZS5yZXNvbHZlID0gcmVzb2x2ZTtcbmZ1bmN0aW9uIHJlc29sdmUodmFsdWUpIHtcbiAgaWYgKHZhbHVlIGluc3RhbmNlb2YgdGhpcykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gaGFuZGxlcnMucmVzb2x2ZShuZXcgdGhpcyhJTlRFUk5BTCksIHZhbHVlKTtcbn1cblxuUHJvbWlzZS5yZWplY3QgPSByZWplY3Q7XG5mdW5jdGlvbiByZWplY3QocmVhc29uKSB7XG4gIHZhciBwcm9taXNlID0gbmV3IHRoaXMoSU5URVJOQUwpO1xuICByZXR1cm4gaGFuZGxlcnMucmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG59XG5cblByb21pc2UuYWxsID0gYWxsO1xuZnVuY3Rpb24gYWxsKGl0ZXJhYmxlKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChpdGVyYWJsZSkgIT09ICdbb2JqZWN0IEFycmF5XScpIHtcbiAgICByZXR1cm4gdGhpcy5yZWplY3QobmV3IFR5cGVFcnJvcignbXVzdCBiZSBhbiBhcnJheScpKTtcbiAgfVxuXG4gIHZhciBsZW4gPSBpdGVyYWJsZS5sZW5ndGg7XG4gIHZhciBjYWxsZWQgPSBmYWxzZTtcbiAgaWYgKCFsZW4pIHtcbiAgICByZXR1cm4gdGhpcy5yZXNvbHZlKFtdKTtcbiAgfVxuXG4gIHZhciB2YWx1ZXMgPSBuZXcgQXJyYXkobGVuKTtcbiAgdmFyIHJlc29sdmVkID0gMDtcbiAgdmFyIGkgPSAtMTtcbiAgdmFyIHByb21pc2UgPSBuZXcgdGhpcyhJTlRFUk5BTCk7XG5cbiAgd2hpbGUgKCsraSA8IGxlbikge1xuICAgIGFsbFJlc29sdmVyKGl0ZXJhYmxlW2ldLCBpKTtcbiAgfVxuICByZXR1cm4gcHJvbWlzZTtcbiAgZnVuY3Rpb24gYWxsUmVzb2x2ZXIodmFsdWUsIGkpIHtcbiAgICBzZWxmLnJlc29sdmUodmFsdWUpLnRoZW4ocmVzb2x2ZUZyb21BbGwsIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgaGFuZGxlcnMucmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmdW5jdGlvbiByZXNvbHZlRnJvbUFsbChvdXRWYWx1ZSkge1xuICAgICAgdmFsdWVzW2ldID0gb3V0VmFsdWU7XG4gICAgICBpZiAoKytyZXNvbHZlZCA9PT0gbGVuICYmICFjYWxsZWQpIHtcbiAgICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgaGFuZGxlcnMucmVzb2x2ZShwcm9taXNlLCB2YWx1ZXMpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5Qcm9taXNlLnJhY2UgPSByYWNlO1xuZnVuY3Rpb24gcmFjZShpdGVyYWJsZSkge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoaXRlcmFibGUpICE9PSAnW29iamVjdCBBcnJheV0nKSB7XG4gICAgcmV0dXJuIHRoaXMucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ211c3QgYmUgYW4gYXJyYXknKSk7XG4gIH1cblxuICB2YXIgbGVuID0gaXRlcmFibGUubGVuZ3RoO1xuICB2YXIgY2FsbGVkID0gZmFsc2U7XG4gIGlmICghbGVuKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzb2x2ZShbXSk7XG4gIH1cblxuICB2YXIgaSA9IC0xO1xuICB2YXIgcHJvbWlzZSA9IG5ldyB0aGlzKElOVEVSTkFMKTtcblxuICB3aGlsZSAoKytpIDwgbGVuKSB7XG4gICAgcmVzb2x2ZXIoaXRlcmFibGVbaV0pO1xuICB9XG4gIHJldHVybiBwcm9taXNlO1xuICBmdW5jdGlvbiByZXNvbHZlcih2YWx1ZSkge1xuICAgIHNlbGYucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgICAgIGlmICghY2FsbGVkKSB7XG4gICAgICAgIGNhbGxlZCA9IHRydWU7XG4gICAgICAgIGhhbmRsZXJzLnJlc29sdmUocHJvbWlzZSwgcmVzcG9uc2UpO1xuICAgICAgfVxuICAgIH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgICAgY2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgaGFuZGxlcnMucmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG59LHtcIjFcIjoxfV0sMzpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4oZnVuY3Rpb24gKGdsb2JhbCl7XG4ndXNlIHN0cmljdCc7XG5pZiAodHlwZW9mIGdsb2JhbC5Qcm9taXNlICE9PSAnZnVuY3Rpb24nKSB7XG4gIGdsb2JhbC5Qcm9taXNlID0gX2RlcmVxXygyKTtcbn1cblxufSkuY2FsbCh0aGlzLHR5cGVvZiBnbG9iYWwgIT09IFwidW5kZWZpbmVkXCIgPyBnbG9iYWwgOiB0eXBlb2Ygc2VsZiAhPT0gXCJ1bmRlZmluZWRcIiA/IHNlbGYgOiB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDoge30pXG59LHtcIjJcIjoyfV0sNDpbZnVuY3Rpb24oX2RlcmVxXyxtb2R1bGUsZXhwb3J0cyl7XG4ndXNlIHN0cmljdCc7XG5cbnZhciBfdHlwZW9mID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPT09IFwic3ltYm9sXCIgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfTtcblxuZnVuY3Rpb24gX2NsYXNzQ2FsbENoZWNrKGluc3RhbmNlLCBDb25zdHJ1Y3RvcikgeyBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpOyB9IH1cblxuZnVuY3Rpb24gZ2V0SURCKCkge1xuICAgIC8qIGdsb2JhbCBpbmRleGVkREIsd2Via2l0SW5kZXhlZERCLG1vekluZGV4ZWREQixPSW5kZXhlZERCLG1zSW5kZXhlZERCICovXG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBpbmRleGVkREIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICByZXR1cm4gaW5kZXhlZERCO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygd2Via2l0SW5kZXhlZERCICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIHdlYmtpdEluZGV4ZWREQjtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIG1vekluZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBtb3pJbmRleGVkREI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBPSW5kZXhlZERCICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgICAgcmV0dXJuIE9JbmRleGVkREI7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHR5cGVvZiBtc0luZGV4ZWREQiAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgIHJldHVybiBtc0luZGV4ZWREQjtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbn1cblxudmFyIGlkYiA9IGdldElEQigpO1xuXG5mdW5jdGlvbiBpc0luZGV4ZWREQlZhbGlkKCkge1xuICAgIHRyeSB7XG4gICAgICAgIC8vIEluaXRpYWxpemUgSW5kZXhlZERCOyBmYWxsIGJhY2sgdG8gdmVuZG9yLXByZWZpeGVkIHZlcnNpb25zXG4gICAgICAgIC8vIGlmIG5lZWRlZC5cbiAgICAgICAgaWYgKCFpZGIgfHwgIWlkYi5vcGVuKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gV2UgbWltaWMgUG91Y2hEQiBoZXJlO1xuICAgICAgICAvL1xuICAgICAgICAvLyBXZSB0ZXN0IGZvciBvcGVuRGF0YWJhc2UgYmVjYXVzZSBJRSBNb2JpbGUgaWRlbnRpZmllcyBpdHNlbGZcbiAgICAgICAgLy8gYXMgU2FmYXJpLiBPaCB0aGUgbHVsei4uLlxuICAgICAgICB2YXIgaXNTYWZhcmkgPSB0eXBlb2Ygb3BlbkRhdGFiYXNlICE9PSAndW5kZWZpbmVkJyAmJiAvKFNhZmFyaXxpUGhvbmV8aVBhZHxpUG9kKS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAhL0Nocm9tZS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAhL0JsYWNrQmVycnkvLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTtcblxuICAgICAgICB2YXIgaGFzRmV0Y2ggPSB0eXBlb2YgZmV0Y2ggPT09ICdmdW5jdGlvbicgJiYgZmV0Y2gudG9TdHJpbmcoKS5pbmRleE9mKCdbbmF0aXZlIGNvZGUnKSAhPT0gLTE7XG5cbiAgICAgICAgLy8gU2FmYXJpIDwxMC4xIGRvZXMgbm90IG1lZXQgb3VyIHJlcXVpcmVtZW50cyBmb3IgSURCIHN1cHBvcnRcbiAgICAgICAgLy8gKHNlZTogaHR0cHM6Ly9naXRodWIuY29tL3BvdWNoZGIvcG91Y2hkYi9pc3N1ZXMvNTU3MikuXG4gICAgICAgIC8vIFNhZmFyaSAxMC4xIHNoaXBwZWQgd2l0aCBmZXRjaCwgd2UgY2FuIHVzZSB0aGF0IHRvIGRldGVjdCBpdC5cbiAgICAgICAgLy8gTm90ZTogdGhpcyBjcmVhdGVzIGlzc3VlcyB3aXRoIGB3aW5kb3cuZmV0Y2hgIHBvbHlmaWxscyBhbmRcbiAgICAgICAgLy8gb3ZlcnJpZGVzOyBzZWU6XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2NhbEZvcmFnZS9sb2NhbEZvcmFnZS9pc3N1ZXMvODU2XG4gICAgICAgIHJldHVybiAoIWlzU2FmYXJpIHx8IGhhc0ZldGNoKSAmJiB0eXBlb2YgaW5kZXhlZERCICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICAvLyBzb21lIG91dGRhdGVkIGltcGxlbWVudGF0aW9ucyBvZiBJREIgdGhhdCBhcHBlYXIgb24gU2Ftc3VuZ1xuICAgICAgICAvLyBhbmQgSFRDIEFuZHJvaWQgZGV2aWNlcyA8NC40IGFyZSBtaXNzaW5nIElEQktleVJhbmdlXG4gICAgICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvbG9jYWxGb3JhZ2UvaXNzdWVzLzEyOFxuICAgICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2xvY2FsRm9yYWdlL2lzc3Vlcy8yNzJcbiAgICAgICAgdHlwZW9mIElEQktleVJhbmdlICE9PSAndW5kZWZpbmVkJztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbi8vIEFic3RyYWN0cyBjb25zdHJ1Y3RpbmcgYSBCbG9iIG9iamVjdCwgc28gaXQgYWxzbyB3b3JrcyBpbiBvbGRlclxuLy8gYnJvd3NlcnMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZSBuYXRpdmUgQmxvYiBjb25zdHJ1Y3Rvci4gKGkuZS5cbi8vIG9sZCBRdFdlYktpdCB2ZXJzaW9ucywgYXQgbGVhc3QpLlxuLy8gQWJzdHJhY3RzIGNvbnN0cnVjdGluZyBhIEJsb2Igb2JqZWN0LCBzbyBpdCBhbHNvIHdvcmtzIGluIG9sZGVyXG4vLyBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlIG5hdGl2ZSBCbG9iIGNvbnN0cnVjdG9yLiAoaS5lLlxuLy8gb2xkIFF0V2ViS2l0IHZlcnNpb25zLCBhdCBsZWFzdCkuXG5mdW5jdGlvbiBjcmVhdGVCbG9iKHBhcnRzLCBwcm9wZXJ0aWVzKSB7XG4gICAgLyogZ2xvYmFsIEJsb2JCdWlsZGVyLE1TQmxvYkJ1aWxkZXIsTW96QmxvYkJ1aWxkZXIsV2ViS2l0QmxvYkJ1aWxkZXIgKi9cbiAgICBwYXJ0cyA9IHBhcnRzIHx8IFtdO1xuICAgIHByb3BlcnRpZXMgPSBwcm9wZXJ0aWVzIHx8IHt9O1xuICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBuZXcgQmxvYihwYXJ0cywgcHJvcGVydGllcyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoZS5uYW1lICE9PSAnVHlwZUVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgQnVpbGRlciA9IHR5cGVvZiBCbG9iQnVpbGRlciAhPT0gJ3VuZGVmaW5lZCcgPyBCbG9iQnVpbGRlciA6IHR5cGVvZiBNU0Jsb2JCdWlsZGVyICE9PSAndW5kZWZpbmVkJyA/IE1TQmxvYkJ1aWxkZXIgOiB0eXBlb2YgTW96QmxvYkJ1aWxkZXIgIT09ICd1bmRlZmluZWQnID8gTW96QmxvYkJ1aWxkZXIgOiBXZWJLaXRCbG9iQnVpbGRlcjtcbiAgICAgICAgdmFyIGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgICAgICBidWlsZGVyLmFwcGVuZChwYXJ0c1tpXSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJ1aWxkZXIuZ2V0QmxvYihwcm9wZXJ0aWVzLnR5cGUpO1xuICAgIH1cbn1cblxuLy8gVGhpcyBpcyBDb21tb25KUyBiZWNhdXNlIGxpZSBpcyBhbiBleHRlcm5hbCBkZXBlbmRlbmN5LCBzbyBSb2xsdXBcbi8vIGNhbiBqdXN0IGlnbm9yZSBpdC5cbmlmICh0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBJbiB0aGUgXCJub3Byb21pc2VzXCIgYnVpbGQgdGhpcyB3aWxsIGp1c3QgdGhyb3cgaWYgeW91IGRvbid0IGhhdmVcbiAgICAvLyBhIGdsb2JhbCBwcm9taXNlIG9iamVjdCwgYnV0IGl0IHdvdWxkIHRocm93IGFueXdheSBsYXRlci5cbiAgICBfZGVyZXFfKDMpO1xufVxudmFyIFByb21pc2UkMSA9IFByb21pc2U7XG5cbmZ1bmN0aW9uIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjaykge1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKHJlc3VsdCkge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgcmVzdWx0KTtcbiAgICAgICAgfSwgZnVuY3Rpb24gKGVycm9yKSB7XG4gICAgICAgICAgICBjYWxsYmFjayhlcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZXhlY3V0ZVR3b0NhbGxiYWNrcyhwcm9taXNlLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJvbWlzZS50aGVuKGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGVycm9yQ2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgcHJvbWlzZVtcImNhdGNoXCJdKGVycm9yQ2FsbGJhY2spO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplS2V5KGtleSkge1xuICAgIC8vIENhc3QgdGhlIGtleSB0byBhIHN0cmluZywgYXMgdGhhdCdzIGFsbCB3ZSBjYW4gc2V0IGFzIGEga2V5LlxuICAgIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zb2xlLndhcm4oa2V5ICsgJyB1c2VkIGFzIGEga2V5LCBidXQgaXQgaXMgbm90IGEgc3RyaW5nLicpO1xuICAgICAgICBrZXkgPSBTdHJpbmcoa2V5KTtcbiAgICB9XG5cbiAgICByZXR1cm4ga2V5O1xufVxuXG5mdW5jdGlvbiBnZXRDYWxsYmFjaygpIHtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCAmJiB0eXBlb2YgYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gYXJndW1lbnRzW2FyZ3VtZW50cy5sZW5ndGggLSAxXTtcbiAgICB9XG59XG5cbi8vIFNvbWUgY29kZSBvcmlnaW5hbGx5IGZyb20gYXN5bmNfc3RvcmFnZS5qcyBpblxuLy8gW0dhaWFdKGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhLWIyZy9nYWlhKS5cblxudmFyIERFVEVDVF9CTE9CX1NVUFBPUlRfU1RPUkUgPSAnbG9jYWwtZm9yYWdlLWRldGVjdC1ibG9iLXN1cHBvcnQnO1xudmFyIHN1cHBvcnRzQmxvYnMgPSB2b2lkIDA7XG52YXIgZGJDb250ZXh0cyA9IHt9O1xudmFyIHRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZztcblxuLy8gVHJhbnNhY3Rpb24gTW9kZXNcbnZhciBSRUFEX09OTFkgPSAncmVhZG9ubHknO1xudmFyIFJFQURfV1JJVEUgPSAncmVhZHdyaXRlJztcblxuLy8gVHJhbnNmb3JtIGEgYmluYXJ5IHN0cmluZyB0byBhbiBhcnJheSBidWZmZXIsIGJlY2F1c2Ugb3RoZXJ3aXNlXG4vLyB3ZWlyZCBzdHVmZiBoYXBwZW5zIHdoZW4geW91IHRyeSB0byB3b3JrIHdpdGggdGhlIGJpbmFyeSBzdHJpbmcgZGlyZWN0bHkuXG4vLyBJdCBpcyBrbm93bi5cbi8vIEZyb20gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy8xNDk2NzY0Ny8gKGNvbnRpbnVlcyBvbiBuZXh0IGxpbmUpXG4vLyBlbmNvZGUtZGVjb2RlLWltYWdlLXdpdGgtYmFzZTY0LWJyZWFrcy1pbWFnZSAoMjAxMy0wNC0yMSlcbmZ1bmN0aW9uIF9iaW5TdHJpbmdUb0FycmF5QnVmZmVyKGJpbikge1xuICAgIHZhciBsZW5ndGggPSBiaW4ubGVuZ3RoO1xuICAgIHZhciBidWYgPSBuZXcgQXJyYXlCdWZmZXIobGVuZ3RoKTtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoYnVmKTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGFycltpXSA9IGJpbi5jaGFyQ29kZUF0KGkpO1xuICAgIH1cbiAgICByZXR1cm4gYnVmO1xufVxuXG4vL1xuLy8gQmxvYnMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gYWxsIHZlcnNpb25zIG9mIEluZGV4ZWREQiwgbm90YWJseVxuLy8gQ2hyb21lIDwzNyBhbmQgQW5kcm9pZCA8NS4gSW4gdGhvc2UgdmVyc2lvbnMsIHN0b3JpbmcgYSBibG9iIHdpbGwgdGhyb3cuXG4vL1xuLy8gVmFyaW91cyBvdGhlciBibG9iIGJ1Z3MgZXhpc3QgaW4gQ2hyb21lIHYzNy00MiAoaW5jbHVzaXZlKS5cbi8vIERldGVjdGluZyB0aGVtIGlzIGV4cGVuc2l2ZSBhbmQgY29uZnVzaW5nIHRvIHVzZXJzLCBhbmQgQ2hyb21lIDM3LTQyXG4vLyBpcyBhdCB2ZXJ5IGxvdyB1c2FnZSB3b3JsZHdpZGUsIHNvIHdlIGRvIGEgaGFja3kgdXNlckFnZW50IGNoZWNrIGluc3RlYWQuXG4vL1xuLy8gY29udGVudC10eXBlIGJ1ZzogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQwODEyMFxuLy8gNDA0IGJ1ZzogaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ0NzkxNlxuLy8gRmlsZVJlYWRlciBidWc6IGh0dHBzOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDc4MzZcbi8vXG4vLyBDb2RlIGJvcnJvd2VkIGZyb20gUG91Y2hEQi4gU2VlOlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvdWNoZGIvcG91Y2hkYi9ibG9iL21hc3Rlci9wYWNrYWdlcy9ub2RlX21vZHVsZXMvcG91Y2hkYi1hZGFwdGVyLWlkYi9zcmMvYmxvYlN1cHBvcnQuanNcbi8vXG5mdW5jdGlvbiBfY2hlY2tCbG9iU3VwcG9ydFdpdGhvdXRDYWNoaW5nKGlkYikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIHZhciB0eG4gPSBpZGIudHJhbnNhY3Rpb24oREVURUNUX0JMT0JfU1VQUE9SVF9TVE9SRSwgUkVBRF9XUklURSk7XG4gICAgICAgIHZhciBibG9iID0gY3JlYXRlQmxvYihbJyddKTtcbiAgICAgICAgdHhuLm9iamVjdFN0b3JlKERFVEVDVF9CTE9CX1NVUFBPUlRfU1RPUkUpLnB1dChibG9iLCAna2V5Jyk7XG5cbiAgICAgICAgdHhuLm9uYWJvcnQgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgLy8gSWYgdGhlIHRyYW5zYWN0aW9uIGFib3J0cyBub3cgaXRzIGR1ZSB0byBub3QgYmVpbmcgYWJsZSB0b1xuICAgICAgICAgICAgLy8gd3JpdGUgdG8gdGhlIGRhdGFiYXNlLCBsaWtlbHkgZHVlIHRvIHRoZSBkaXNrIGJlaW5nIGZ1bGxcbiAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICByZXNvbHZlKGZhbHNlKTtcbiAgICAgICAgfTtcblxuICAgICAgICB0eG4ub25jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBtYXRjaGVkQ2hyb21lID0gbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQ2hyb21lXFwvKFxcZCspLyk7XG4gICAgICAgICAgICB2YXIgbWF0Y2hlZEVkZ2UgPSBuYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9FZGdlXFwvLyk7XG4gICAgICAgICAgICAvLyBNUyBFZGdlIHByZXRlbmRzIHRvIGJlIENocm9tZSA0MjpcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvaGg4NjkzMDElMjh2PXZzLjg1JTI5LmFzcHhcbiAgICAgICAgICAgIHJlc29sdmUobWF0Y2hlZEVkZ2UgfHwgIW1hdGNoZWRDaHJvbWUgfHwgcGFyc2VJbnQobWF0Y2hlZENocm9tZVsxXSwgMTApID49IDQzKTtcbiAgICAgICAgfTtcbiAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBlcnJvciwgc28gYXNzdW1lIHVuc3VwcG9ydGVkXG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIF9jaGVja0Jsb2JTdXBwb3J0KGlkYikge1xuICAgIGlmICh0eXBlb2Ygc3VwcG9ydHNCbG9icyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlJDEucmVzb2x2ZShzdXBwb3J0c0Jsb2JzKTtcbiAgICB9XG4gICAgcmV0dXJuIF9jaGVja0Jsb2JTdXBwb3J0V2l0aG91dENhY2hpbmcoaWRiKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICBzdXBwb3J0c0Jsb2JzID0gdmFsdWU7XG4gICAgICAgIHJldHVybiBzdXBwb3J0c0Jsb2JzO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBfZGVmZXJSZWFkaW5lc3MoZGJJbmZvKSB7XG4gICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWVdO1xuXG4gICAgLy8gQ3JlYXRlIGEgZGVmZXJyZWQgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgY3VycmVudCBkYXRhYmFzZSBvcGVyYXRpb24uXG4gICAgdmFyIGRlZmVycmVkT3BlcmF0aW9uID0ge307XG5cbiAgICBkZWZlcnJlZE9wZXJhdGlvbi5wcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGRlZmVycmVkT3BlcmF0aW9uLnJlc29sdmUgPSByZXNvbHZlO1xuICAgICAgICBkZWZlcnJlZE9wZXJhdGlvbi5yZWplY3QgPSByZWplY3Q7XG4gICAgfSk7XG5cbiAgICAvLyBFbnF1ZXVlIHRoZSBkZWZlcnJlZCBvcGVyYXRpb24uXG4gICAgZGJDb250ZXh0LmRlZmVycmVkT3BlcmF0aW9ucy5wdXNoKGRlZmVycmVkT3BlcmF0aW9uKTtcblxuICAgIC8vIENoYWluIGl0cyBwcm9taXNlIHRvIHRoZSBkYXRhYmFzZSByZWFkaW5lc3MuXG4gICAgaWYgKCFkYkNvbnRleHQuZGJSZWFkeSkge1xuICAgICAgICBkYkNvbnRleHQuZGJSZWFkeSA9IGRlZmVycmVkT3BlcmF0aW9uLnByb21pc2U7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgZGJDb250ZXh0LmRiUmVhZHkgPSBkYkNvbnRleHQuZGJSZWFkeS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZE9wZXJhdGlvbi5wcm9taXNlO1xuICAgICAgICB9KTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIF9hZHZhbmNlUmVhZGluZXNzKGRiSW5mbykge1xuICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW2RiSW5mby5uYW1lXTtcblxuICAgIC8vIERlcXVldWUgYSBkZWZlcnJlZCBvcGVyYXRpb24uXG4gICAgdmFyIGRlZmVycmVkT3BlcmF0aW9uID0gZGJDb250ZXh0LmRlZmVycmVkT3BlcmF0aW9ucy5wb3AoKTtcblxuICAgIC8vIFJlc29sdmUgaXRzIHByb21pc2UgKHdoaWNoIGlzIHBhcnQgb2YgdGhlIGRhdGFiYXNlIHJlYWRpbmVzc1xuICAgIC8vIGNoYWluIG9mIHByb21pc2VzKS5cbiAgICBpZiAoZGVmZXJyZWRPcGVyYXRpb24pIHtcbiAgICAgICAgZGVmZXJyZWRPcGVyYXRpb24ucmVzb2x2ZSgpO1xuICAgICAgICByZXR1cm4gZGVmZXJyZWRPcGVyYXRpb24ucHJvbWlzZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIF9yZWplY3RSZWFkaW5lc3MoZGJJbmZvLCBlcnIpIHtcbiAgICB2YXIgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tkYkluZm8ubmFtZV07XG5cbiAgICAvLyBEZXF1ZXVlIGEgZGVmZXJyZWQgb3BlcmF0aW9uLlxuICAgIHZhciBkZWZlcnJlZE9wZXJhdGlvbiA9IGRiQ29udGV4dC5kZWZlcnJlZE9wZXJhdGlvbnMucG9wKCk7XG5cbiAgICAvLyBSZWplY3QgaXRzIHByb21pc2UgKHdoaWNoIGlzIHBhcnQgb2YgdGhlIGRhdGFiYXNlIHJlYWRpbmVzc1xuICAgIC8vIGNoYWluIG9mIHByb21pc2VzKS5cbiAgICBpZiAoZGVmZXJyZWRPcGVyYXRpb24pIHtcbiAgICAgICAgZGVmZXJyZWRPcGVyYXRpb24ucmVqZWN0KGVycik7XG4gICAgICAgIHJldHVybiBkZWZlcnJlZE9wZXJhdGlvbi5wcm9taXNlO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gX2dldENvbm5lY3Rpb24oZGJJbmZvLCB1cGdyYWRlTmVlZGVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBkYkNvbnRleHRzW2RiSW5mby5uYW1lXSA9IGRiQ29udGV4dHNbZGJJbmZvLm5hbWVdIHx8IGNyZWF0ZURiQ29udGV4dCgpO1xuXG4gICAgICAgIGlmIChkYkluZm8uZGIpIHtcbiAgICAgICAgICAgIGlmICh1cGdyYWRlTmVlZGVkKSB7XG4gICAgICAgICAgICAgICAgX2RlZmVyUmVhZGluZXNzKGRiSW5mbyk7XG4gICAgICAgICAgICAgICAgZGJJbmZvLmRiLmNsb3NlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKGRiSW5mby5kYik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgZGJBcmdzID0gW2RiSW5mby5uYW1lXTtcblxuICAgICAgICBpZiAodXBncmFkZU5lZWRlZCkge1xuICAgICAgICAgICAgZGJBcmdzLnB1c2goZGJJbmZvLnZlcnNpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIG9wZW5yZXEgPSBpZGIub3Blbi5hcHBseShpZGIsIGRiQXJncyk7XG5cbiAgICAgICAgaWYgKHVwZ3JhZGVOZWVkZWQpIHtcbiAgICAgICAgICAgIG9wZW5yZXEub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgZGIgPSBvcGVucmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBkYi5jcmVhdGVPYmplY3RTdG9yZShkYkluZm8uc3RvcmVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGUub2xkVmVyc2lvbiA8PSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBZGRlZCB3aGVuIHN1cHBvcnQgZm9yIGJsb2Igc2hpbXMgd2FzIGFkZGVkXG4gICAgICAgICAgICAgICAgICAgICAgICBkYi5jcmVhdGVPYmplY3RTdG9yZShERVRFQ1RfQkxPQl9TVVBQT1JUX1NUT1JFKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChleC5uYW1lID09PSAnQ29uc3RyYWludEVycm9yJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgZGF0YWJhc2UgXCInICsgZGJJbmZvLm5hbWUgKyAnXCInICsgJyBoYXMgYmVlbiB1cGdyYWRlZCBmcm9tIHZlcnNpb24gJyArIGUub2xkVmVyc2lvbiArICcgdG8gdmVyc2lvbiAnICsgZS5uZXdWZXJzaW9uICsgJywgYnV0IHRoZSBzdG9yYWdlIFwiJyArIGRiSW5mby5zdG9yZU5hbWUgKyAnXCIgYWxyZWFkeSBleGlzdHMuJyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBleDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICBvcGVucmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgcmVqZWN0KG9wZW5yZXEuZXJyb3IpO1xuICAgICAgICB9O1xuXG4gICAgICAgIG9wZW5yZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRiID0gb3BlbnJlcS5yZXN1bHQ7XG4gICAgICAgICAgICBkYi5vbnZlcnNpb25jaGFuZ2UgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgIC8vIFRyaWdnZXJlZCB3aGVuIHRoZSBkYXRhYmFzZSBpcyBtb2RpZmllZCAoZS5nLiBhZGRpbmcgYW4gb2JqZWN0U3RvcmUpIG9yXG4gICAgICAgICAgICAgICAgLy8gZGVsZXRlZCAoZXZlbiB3aGVuIGluaXRpYXRlZCBieSBvdGhlciBzZXNzaW9ucyBpbiBkaWZmZXJlbnQgdGFicykuXG4gICAgICAgICAgICAgICAgLy8gQ2xvc2luZyB0aGUgY29ubmVjdGlvbiBoZXJlIHByZXZlbnRzIHRob3NlIG9wZXJhdGlvbnMgZnJvbSBiZWluZyBibG9ja2VkLlxuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBkYXRhYmFzZSBpcyBhY2Nlc3NlZCBhZ2FpbiBsYXRlciBieSB0aGlzIGluc3RhbmNlLCB0aGUgY29ubmVjdGlvblxuICAgICAgICAgICAgICAgIC8vIHdpbGwgYmUgcmVvcGVuZWQgb3IgdGhlIGRhdGFiYXNlIHJlY3JlYXRlZCBhcyBuZWVkZWQuXG4gICAgICAgICAgICAgICAgZS50YXJnZXQuY2xvc2UoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICByZXNvbHZlKGRiKTtcbiAgICAgICAgICAgIF9hZHZhbmNlUmVhZGluZXNzKGRiSW5mbyk7XG4gICAgICAgIH07XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIF9nZXRPcmlnaW5hbENvbm5lY3Rpb24oZGJJbmZvKSB7XG4gICAgcmV0dXJuIF9nZXRDb25uZWN0aW9uKGRiSW5mbywgZmFsc2UpO1xufVxuXG5mdW5jdGlvbiBfZ2V0VXBncmFkZWRDb25uZWN0aW9uKGRiSW5mbykge1xuICAgIHJldHVybiBfZ2V0Q29ubmVjdGlvbihkYkluZm8sIHRydWUpO1xufVxuXG5mdW5jdGlvbiBfaXNVcGdyYWRlTmVlZGVkKGRiSW5mbywgZGVmYXVsdFZlcnNpb24pIHtcbiAgICBpZiAoIWRiSW5mby5kYikge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB2YXIgaXNOZXdTdG9yZSA9ICFkYkluZm8uZGIub2JqZWN0U3RvcmVOYW1lcy5jb250YWlucyhkYkluZm8uc3RvcmVOYW1lKTtcbiAgICB2YXIgaXNEb3duZ3JhZGUgPSBkYkluZm8udmVyc2lvbiA8IGRiSW5mby5kYi52ZXJzaW9uO1xuICAgIHZhciBpc1VwZ3JhZGUgPSBkYkluZm8udmVyc2lvbiA+IGRiSW5mby5kYi52ZXJzaW9uO1xuXG4gICAgaWYgKGlzRG93bmdyYWRlKSB7XG4gICAgICAgIC8vIElmIHRoZSB2ZXJzaW9uIGlzIG5vdCB0aGUgZGVmYXVsdCBvbmVcbiAgICAgICAgLy8gdGhlbiB3YXJuIGZvciBpbXBvc3NpYmxlIGRvd25ncmFkZS5cbiAgICAgICAgaWYgKGRiSW5mby52ZXJzaW9uICE9PSBkZWZhdWx0VmVyc2lvbikge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgZGF0YWJhc2UgXCInICsgZGJJbmZvLm5hbWUgKyAnXCInICsgXCIgY2FuJ3QgYmUgZG93bmdyYWRlZCBmcm9tIHZlcnNpb24gXCIgKyBkYkluZm8uZGIudmVyc2lvbiArICcgdG8gdmVyc2lvbiAnICsgZGJJbmZvLnZlcnNpb24gKyAnLicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFsaWduIHRoZSB2ZXJzaW9ucyB0byBwcmV2ZW50IGVycm9ycy5cbiAgICAgICAgZGJJbmZvLnZlcnNpb24gPSBkYkluZm8uZGIudmVyc2lvbjtcbiAgICB9XG5cbiAgICBpZiAoaXNVcGdyYWRlIHx8IGlzTmV3U3RvcmUpIHtcbiAgICAgICAgLy8gSWYgdGhlIHN0b3JlIGlzIG5ldyB0aGVuIGluY3JlbWVudCB0aGUgdmVyc2lvbiAoaWYgbmVlZGVkKS5cbiAgICAgICAgLy8gVGhpcyB3aWxsIHRyaWdnZXIgYW4gXCJ1cGdyYWRlbmVlZGVkXCIgZXZlbnQgd2hpY2ggaXMgcmVxdWlyZWRcbiAgICAgICAgLy8gZm9yIGNyZWF0aW5nIGEgc3RvcmUuXG4gICAgICAgIGlmIChpc05ld1N0b3JlKSB7XG4gICAgICAgICAgICB2YXIgaW5jVmVyc2lvbiA9IGRiSW5mby5kYi52ZXJzaW9uICsgMTtcbiAgICAgICAgICAgIGlmIChpbmNWZXJzaW9uID4gZGJJbmZvLnZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICBkYkluZm8udmVyc2lvbiA9IGluY1ZlcnNpb247XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG59XG5cbi8vIGVuY29kZSBhIGJsb2IgZm9yIGluZGV4ZWRkYiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBibG9ic1xuZnVuY3Rpb24gX2VuY29kZUJsb2IoYmxvYikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgICAgIHJlYWRlci5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgICByZWFkZXIub25sb2FkZW5kID0gZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIHZhciBiYXNlNjQgPSBidG9hKGUudGFyZ2V0LnJlc3VsdCB8fCAnJyk7XG4gICAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgICAgICBfX2xvY2FsX2ZvcmFnZV9lbmNvZGVkX2Jsb2I6IHRydWUsXG4gICAgICAgICAgICAgICAgZGF0YTogYmFzZTY0LFxuICAgICAgICAgICAgICAgIHR5cGU6IGJsb2IudHlwZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcoYmxvYik7XG4gICAgfSk7XG59XG5cbi8vIGRlY29kZSBhbiBlbmNvZGVkIGJsb2JcbmZ1bmN0aW9uIF9kZWNvZGVCbG9iKGVuY29kZWRCbG9iKSB7XG4gICAgdmFyIGFycmF5QnVmZiA9IF9iaW5TdHJpbmdUb0FycmF5QnVmZmVyKGF0b2IoZW5jb2RlZEJsb2IuZGF0YSkpO1xuICAgIHJldHVybiBjcmVhdGVCbG9iKFthcnJheUJ1ZmZdLCB7IHR5cGU6IGVuY29kZWRCbG9iLnR5cGUgfSk7XG59XG5cbi8vIGlzIHRoaXMgb25lIG9mIG91ciBmYW5jeSBlbmNvZGVkIGJsb2JzP1xuZnVuY3Rpb24gX2lzRW5jb2RlZEJsb2IodmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWUgJiYgdmFsdWUuX19sb2NhbF9mb3JhZ2VfZW5jb2RlZF9ibG9iO1xufVxuXG4vLyBTcGVjaWFsaXplIHRoZSBkZWZhdWx0IGByZWFkeSgpYCBmdW5jdGlvbiBieSBtYWtpbmcgaXQgZGVwZW5kZW50XG4vLyBvbiB0aGUgY3VycmVudCBkYXRhYmFzZSBvcGVyYXRpb25zLiBUaHVzLCB0aGUgZHJpdmVyIHdpbGwgYmUgYWN0dWFsbHlcbi8vIHJlYWR5IHdoZW4gaXQncyBiZWVuIGluaXRpYWxpemVkIChkZWZhdWx0KSAqYW5kKiB0aGVyZSBhcmUgbm8gcGVuZGluZ1xuLy8gb3BlcmF0aW9ucyBvbiB0aGUgZGF0YWJhc2UgKGluaXRpYXRlZCBieSBzb21lIG90aGVyIGluc3RhbmNlcykuXG5mdW5jdGlvbiBfZnVsbHlSZWFkeShjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gc2VsZi5faW5pdFJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkYkNvbnRleHQgPSBkYkNvbnRleHRzW3NlbGYuX2RiSW5mby5uYW1lXTtcblxuICAgICAgICBpZiAoZGJDb250ZXh0ICYmIGRiQ29udGV4dC5kYlJlYWR5KSB7XG4gICAgICAgICAgICByZXR1cm4gZGJDb250ZXh0LmRiUmVhZHk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGV4ZWN1dGVUd29DYWxsYmFja3MocHJvbWlzZSwgY2FsbGJhY2ssIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLy8gVHJ5IHRvIGVzdGFibGlzaCBhIG5ldyBkYiBjb25uZWN0aW9uIHRvIHJlcGxhY2UgdGhlXG4vLyBjdXJyZW50IG9uZSB3aGljaCBpcyBicm9rZW4gKGkuZS4gZXhwZXJpZW5jaW5nXG4vLyBJbnZhbGlkU3RhdGVFcnJvciB3aGlsZSBjcmVhdGluZyBhIHRyYW5zYWN0aW9uKS5cbmZ1bmN0aW9uIF90cnlSZWNvbm5lY3QoZGJJbmZvKSB7XG4gICAgX2RlZmVyUmVhZGluZXNzKGRiSW5mbyk7XG5cbiAgICB2YXIgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tkYkluZm8ubmFtZV07XG4gICAgdmFyIGZvcmFnZXMgPSBkYkNvbnRleHQuZm9yYWdlcztcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9yYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgZm9yYWdlID0gZm9yYWdlc1tpXTtcbiAgICAgICAgaWYgKGZvcmFnZS5fZGJJbmZvLmRiKSB7XG4gICAgICAgICAgICBmb3JhZ2UuX2RiSW5mby5kYi5jbG9zZSgpO1xuICAgICAgICAgICAgZm9yYWdlLl9kYkluZm8uZGIgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIGRiSW5mby5kYiA9IG51bGw7XG5cbiAgICByZXR1cm4gX2dldE9yaWdpbmFsQ29ubmVjdGlvbihkYkluZm8pLnRoZW4oZnVuY3Rpb24gKGRiKSB7XG4gICAgICAgIGRiSW5mby5kYiA9IGRiO1xuICAgICAgICBpZiAoX2lzVXBncmFkZU5lZWRlZChkYkluZm8pKSB7XG4gICAgICAgICAgICAvLyBSZW9wZW4gdGhlIGRhdGFiYXNlIGZvciB1cGdyYWRpbmcuXG4gICAgICAgICAgICByZXR1cm4gX2dldFVwZ3JhZGVkQ29ubmVjdGlvbihkYkluZm8pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkYjtcbiAgICB9KS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICAvLyBzdG9yZSB0aGUgbGF0ZXN0IGRiIHJlZmVyZW5jZVxuICAgICAgICAvLyBpbiBjYXNlIHRoZSBkYiB3YXMgdXBncmFkZWRcbiAgICAgICAgZGJJbmZvLmRiID0gZGJDb250ZXh0LmRiID0gZGI7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9yYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgZm9yYWdlc1tpXS5fZGJJbmZvLmRiID0gZGI7XG4gICAgICAgIH1cbiAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgX3JlamVjdFJlYWRpbmVzcyhkYkluZm8sIGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICB9KTtcbn1cblxuLy8gRkYgZG9lc24ndCBsaWtlIFByb21pc2VzIChtaWNyby10YXNrcykgYW5kIElEREIgc3RvcmUgb3BlcmF0aW9ucyxcbi8vIHNvIHdlIGhhdmUgdG8gZG8gaXQgd2l0aCBjYWxsYmFja3NcbmZ1bmN0aW9uIGNyZWF0ZVRyYW5zYWN0aW9uKGRiSW5mbywgbW9kZSwgY2FsbGJhY2ssIHJldHJpZXMpIHtcbiAgICBpZiAocmV0cmllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHJpZXMgPSAxO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAgIHZhciB0eCA9IGRiSW5mby5kYi50cmFuc2FjdGlvbihkYkluZm8uc3RvcmVOYW1lLCBtb2RlKTtcbiAgICAgICAgY2FsbGJhY2sobnVsbCwgdHgpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAocmV0cmllcyA+IDAgJiYgKCFkYkluZm8uZGIgfHwgZXJyLm5hbWUgPT09ICdJbnZhbGlkU3RhdGVFcnJvcicgfHwgZXJyLm5hbWUgPT09ICdOb3RGb3VuZEVycm9yJykpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlJDEucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIGlmICghZGJJbmZvLmRiIHx8IGVyci5uYW1lID09PSAnTm90Rm91bmRFcnJvcicgJiYgIWRiSW5mby5kYi5vYmplY3RTdG9yZU5hbWVzLmNvbnRhaW5zKGRiSW5mby5zdG9yZU5hbWUpICYmIGRiSW5mby52ZXJzaW9uIDw9IGRiSW5mby5kYi52ZXJzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGluY3JlYXNlIHRoZSBkYiB2ZXJzaW9uLCB0byBjcmVhdGUgdGhlIG5ldyBPYmplY3RTdG9yZVxuICAgICAgICAgICAgICAgICAgICBpZiAoZGJJbmZvLmRiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYkluZm8udmVyc2lvbiA9IGRiSW5mby5kYi52ZXJzaW9uICsgMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAvLyBSZW9wZW4gdGhlIGRhdGFiYXNlIGZvciB1cGdyYWRpbmcuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfZ2V0VXBncmFkZWRDb25uZWN0aW9uKGRiSW5mbyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIF90cnlSZWNvbm5lY3QoZGJJbmZvKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgY3JlYXRlVHJhbnNhY3Rpb24oZGJJbmZvLCBtb2RlLCBjYWxsYmFjaywgcmV0cmllcyAtIDEpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShjYWxsYmFjayk7XG4gICAgICAgIH1cblxuICAgICAgICBjYWxsYmFjayhlcnIpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlRGJDb250ZXh0KCkge1xuICAgIHJldHVybiB7XG4gICAgICAgIC8vIFJ1bm5pbmcgbG9jYWxGb3JhZ2VzIHNoYXJpbmcgYSBkYXRhYmFzZS5cbiAgICAgICAgZm9yYWdlczogW10sXG4gICAgICAgIC8vIFNoYXJlZCBkYXRhYmFzZS5cbiAgICAgICAgZGI6IG51bGwsXG4gICAgICAgIC8vIERhdGFiYXNlIHJlYWRpbmVzcyAocHJvbWlzZSkuXG4gICAgICAgIGRiUmVhZHk6IG51bGwsXG4gICAgICAgIC8vIERlZmVycmVkIG9wZXJhdGlvbnMgb24gdGhlIGRhdGFiYXNlLlxuICAgICAgICBkZWZlcnJlZE9wZXJhdGlvbnM6IFtdXG4gICAgfTtcbn1cblxuLy8gT3BlbiB0aGUgSW5kZXhlZERCIGRhdGFiYXNlIChhdXRvbWF0aWNhbGx5IGNyZWF0ZXMgb25lIGlmIG9uZSBkaWRuJ3Rcbi8vIHByZXZpb3VzbHkgZXhpc3QpLCB1c2luZyBhbnkgb3B0aW9ucyBzZXQgaW4gdGhlIGNvbmZpZy5cbmZ1bmN0aW9uIF9pbml0U3RvcmFnZShvcHRpb25zKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBkYkluZm8gPSB7XG4gICAgICAgIGRiOiBudWxsXG4gICAgfTtcblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgZGJJbmZvW2ldID0gb3B0aW9uc1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIEdldCB0aGUgY3VycmVudCBjb250ZXh0IG9mIHRoZSBkYXRhYmFzZTtcbiAgICB2YXIgZGJDb250ZXh0ID0gZGJDb250ZXh0c1tkYkluZm8ubmFtZV07XG5cbiAgICAvLyAuLi5vciBjcmVhdGUgYSBuZXcgY29udGV4dC5cbiAgICBpZiAoIWRiQ29udGV4dCkge1xuICAgICAgICBkYkNvbnRleHQgPSBjcmVhdGVEYkNvbnRleHQoKTtcbiAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIG5ldyBjb250ZXh0IGluIHRoZSBnbG9iYWwgY29udGFpbmVyLlxuICAgICAgICBkYkNvbnRleHRzW2RiSW5mby5uYW1lXSA9IGRiQ29udGV4dDtcbiAgICB9XG5cbiAgICAvLyBSZWdpc3RlciBpdHNlbGYgYXMgYSBydW5uaW5nIGxvY2FsRm9yYWdlIGluIHRoZSBjdXJyZW50IGNvbnRleHQuXG4gICAgZGJDb250ZXh0LmZvcmFnZXMucHVzaChzZWxmKTtcblxuICAgIC8vIFJlcGxhY2UgdGhlIGRlZmF1bHQgYHJlYWR5KClgIGZ1bmN0aW9uIHdpdGggdGhlIHNwZWNpYWxpemVkIG9uZS5cbiAgICBpZiAoIXNlbGYuX2luaXRSZWFkeSkge1xuICAgICAgICBzZWxmLl9pbml0UmVhZHkgPSBzZWxmLnJlYWR5O1xuICAgICAgICBzZWxmLnJlYWR5ID0gX2Z1bGx5UmVhZHk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIGFuIGFycmF5IG9mIGluaXRpYWxpemF0aW9uIHN0YXRlcyBvZiB0aGUgcmVsYXRlZCBsb2NhbEZvcmFnZXMuXG4gICAgdmFyIGluaXRQcm9taXNlcyA9IFtdO1xuXG4gICAgZnVuY3Rpb24gaWdub3JlRXJyb3JzKCkge1xuICAgICAgICAvLyBEb24ndCBoYW5kbGUgZXJyb3JzIGhlcmUsXG4gICAgICAgIC8vIGp1c3QgbWFrZXMgc3VyZSByZWxhdGVkIGxvY2FsRm9yYWdlcyBhcmVuJ3QgcGVuZGluZy5cbiAgICAgICAgcmV0dXJuIFByb21pc2UkMS5yZXNvbHZlKCk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBkYkNvbnRleHQuZm9yYWdlcy5sZW5ndGg7IGorKykge1xuICAgICAgICB2YXIgZm9yYWdlID0gZGJDb250ZXh0LmZvcmFnZXNbal07XG4gICAgICAgIGlmIChmb3JhZ2UgIT09IHNlbGYpIHtcbiAgICAgICAgICAgIC8vIERvbid0IHdhaXQgZm9yIGl0c2VsZi4uLlxuICAgICAgICAgICAgaW5pdFByb21pc2VzLnB1c2goZm9yYWdlLl9pbml0UmVhZHkoKVtcImNhdGNoXCJdKGlnbm9yZUVycm9ycykpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGFrZSBhIHNuYXBzaG90IG9mIHRoZSByZWxhdGVkIGxvY2FsRm9yYWdlcy5cbiAgICB2YXIgZm9yYWdlcyA9IGRiQ29udGV4dC5mb3JhZ2VzLnNsaWNlKDApO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgY29ubmVjdGlvbiBwcm9jZXNzIG9ubHkgd2hlblxuICAgIC8vIGFsbCB0aGUgcmVsYXRlZCBsb2NhbEZvcmFnZXMgYXJlbid0IHBlbmRpbmcuXG4gICAgcmV0dXJuIFByb21pc2UkMS5hbGwoaW5pdFByb21pc2VzKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZGJJbmZvLmRiID0gZGJDb250ZXh0LmRiO1xuICAgICAgICAvLyBHZXQgdGhlIGNvbm5lY3Rpb24gb3Igb3BlbiBhIG5ldyBvbmUgd2l0aG91dCB1cGdyYWRlLlxuICAgICAgICByZXR1cm4gX2dldE9yaWdpbmFsQ29ubmVjdGlvbihkYkluZm8pO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKGRiKSB7XG4gICAgICAgIGRiSW5mby5kYiA9IGRiO1xuICAgICAgICBpZiAoX2lzVXBncmFkZU5lZWRlZChkYkluZm8sIHNlbGYuX2RlZmF1bHRDb25maWcudmVyc2lvbikpIHtcbiAgICAgICAgICAgIC8vIFJlb3BlbiB0aGUgZGF0YWJhc2UgZm9yIHVwZ3JhZGluZy5cbiAgICAgICAgICAgIHJldHVybiBfZ2V0VXBncmFkZWRDb25uZWN0aW9uKGRiSW5mbyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGRiO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKGRiKSB7XG4gICAgICAgIGRiSW5mby5kYiA9IGRiQ29udGV4dC5kYiA9IGRiO1xuICAgICAgICBzZWxmLl9kYkluZm8gPSBkYkluZm87XG4gICAgICAgIC8vIFNoYXJlIHRoZSBmaW5hbCBjb25uZWN0aW9uIGFtb25nc3QgcmVsYXRlZCBsb2NhbEZvcmFnZXMuXG4gICAgICAgIGZvciAodmFyIGsgPSAwOyBrIDwgZm9yYWdlcy5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgdmFyIGZvcmFnZSA9IGZvcmFnZXNba107XG4gICAgICAgICAgICBpZiAoZm9yYWdlICE9PSBzZWxmKSB7XG4gICAgICAgICAgICAgICAgLy8gU2VsZiBpcyBhbHJlYWR5IHVwLXRvLWRhdGUuXG4gICAgICAgICAgICAgICAgZm9yYWdlLl9kYkluZm8uZGIgPSBkYkluZm8uZGI7XG4gICAgICAgICAgICAgICAgZm9yYWdlLl9kYkluZm8udmVyc2lvbiA9IGRiSW5mby52ZXJzaW9uO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGdldEl0ZW0oa2V5LCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGtleSA9IG5vcm1hbGl6ZUtleShrZXkpO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY3JlYXRlVHJhbnNhY3Rpb24oc2VsZi5fZGJJbmZvLCBSRUFEX09OTFksIGZ1bmN0aW9uIChlcnIsIHRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc2VsZi5fZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZS5nZXQoa2V5KTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9pc0VuY29kZWRCbG9iKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gX2RlY29kZUJsb2IodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVxLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLy8gSXRlcmF0ZSBvdmVyIGFsbCBpdGVtcyBzdG9yZWQgaW4gZGF0YWJhc2UuXG5mdW5jdGlvbiBpdGVyYXRlKGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9PTkxZLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUub3BlbkN1cnNvcigpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlcmF0aW9uTnVtYmVyID0gMTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnNvciA9IHJlcS5yZXN1bHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJzb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBjdXJzb3IudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9pc0VuY29kZWRCbG9iKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IF9kZWNvZGVCbG9iKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGl0ZXJhdG9yKHZhbHVlLCBjdXJzb3Iua2V5LCBpdGVyYXRpb25OdW1iZXIrKyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHRoZSBpdGVyYXRvciBjYWxsYmFjayByZXR1cm5zIGFueVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChub24tYHVuZGVmaW5lZGApIHZhbHVlLCB0aGVuIHdlIHN0b3BcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgaXRlcmF0aW9uIGltbWVkaWF0ZWx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3JbXCJjb250aW51ZVwiXSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlcS5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gc2V0SXRlbShrZXksIHZhbHVlLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGtleSA9IG5vcm1hbGl6ZUtleShrZXkpO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgdmFyIGRiSW5mbztcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICAgICAgaWYgKHRvU3RyaW5nLmNhbGwodmFsdWUpID09PSAnW29iamVjdCBCbG9iXScpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gX2NoZWNrQmxvYlN1cHBvcnQoZGJJbmZvLmRiKS50aGVuKGZ1bmN0aW9uIChibG9iU3VwcG9ydCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYmxvYlN1cHBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gX2VuY29kZUJsb2IodmFsdWUpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgICAgY3JlYXRlVHJhbnNhY3Rpb24oc2VsZi5fZGJJbmZvLCBSRUFEX1dSSVRFLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZWFzb24gd2UgZG9uJ3QgX3NhdmVfIG51bGwgaXMgYmVjYXVzZSBJRSAxMCBkb2VzXG4gICAgICAgICAgICAgICAgICAgIC8vIG5vdCBzdXBwb3J0IHNhdmluZyB0aGUgYG51bGxgIHR5cGUgaW4gSW5kZXhlZERCLiBIb3dcbiAgICAgICAgICAgICAgICAgICAgLy8gaXJvbmljLCBnaXZlbiB0aGUgYnVnIGJlbG93IVxuICAgICAgICAgICAgICAgICAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2xvY2FsRm9yYWdlL2lzc3Vlcy8xNjFcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZS5wdXQodmFsdWUsIGtleSk7XG5cbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENhc3QgdG8gdW5kZWZpbmVkIHNvIHRoZSB2YWx1ZSBwYXNzZWQgdG9cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhbGxiYWNrL3Byb21pc2UgaXMgdGhlIHNhbWUgYXMgd2hhdCBvbmUgd291bGQgZ2V0IG91dFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2YgYGdldEl0ZW0oKWAgbGF0ZXIuIFRoaXMgbGVhZHMgdG8gc29tZSB3ZWlyZG5lc3NcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIChzZXRJdGVtKCdmb28nLCB1bmRlZmluZWQpIHdpbGwgcmV0dXJuIGBudWxsYCksIGJ1dFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQncyBub3QgbXkgZmF1bHQgbG9jYWxTdG9yYWdlIGlzIG91ciBiYXNlbGluZSBhbmQgdGhhdFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQncyB3ZWlyZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25hYm9ydCA9IHRyYW5zYWN0aW9uLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyID0gcmVxLmVycm9yID8gcmVxLmVycm9yIDogcmVxLnRyYW5zYWN0aW9uLmVycm9yO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIHJlbW92ZUl0ZW0oa2V5LCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGtleSA9IG5vcm1hbGl6ZUtleShrZXkpO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY3JlYXRlVHJhbnNhY3Rpb24oc2VsZi5fZGJJbmZvLCBSRUFEX1dSSVRFLCBmdW5jdGlvbiAoZXJyLCB0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzdG9yZSA9IHRyYW5zYWN0aW9uLm9iamVjdFN0b3JlKHNlbGYuX2RiSW5mby5zdG9yZU5hbWUpO1xuICAgICAgICAgICAgICAgICAgICAvLyBXZSB1c2UgYSBHcnVudCB0YXNrIHRvIG1ha2UgdGhpcyBzYWZlIGZvciBJRSBhbmQgc29tZVxuICAgICAgICAgICAgICAgICAgICAvLyB2ZXJzaW9ucyBvZiBBbmRyb2lkIChpbmNsdWRpbmcgdGhvc2UgdXNlZCBieSBDb3Jkb3ZhKS5cbiAgICAgICAgICAgICAgICAgICAgLy8gTm9ybWFsbHkgSUUgd29uJ3QgbGlrZSBgLmRlbGV0ZSgpYCBhbmQgd2lsbCBpbnNpc3Qgb25cbiAgICAgICAgICAgICAgICAgICAgLy8gdXNpbmcgYFsnZGVsZXRlJ10oKWAsIGJ1dCB3ZSBoYXZlIGEgYnVpbGQgc3RlcCB0aGF0XG4gICAgICAgICAgICAgICAgICAgIC8vIGZpeGVzIHRoaXMgZm9yIHVzIG5vdy5cbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcSA9IHN0b3JlW1wiZGVsZXRlXCJdKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLm9uY29tcGxldGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZSByZXF1ZXN0IHdpbGwgYmUgYWxzbyBiZSBhYm9ydGVkIGlmIHdlJ3ZlIGV4Y2VlZGVkIG91ciBzdG9yYWdlXG4gICAgICAgICAgICAgICAgICAgIC8vIHNwYWNlLlxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5vbmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVyciA9IHJlcS5lcnJvciA/IHJlcS5lcnJvciA6IHJlcS50cmFuc2FjdGlvbi5lcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBjbGVhcihjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGNyZWF0ZVRyYW5zYWN0aW9uKHNlbGYuX2RiSW5mbywgUkVBRF9XUklURSwgZnVuY3Rpb24gKGVyciwgdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzZWxmLl9kYkluZm8uc3RvcmVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcSA9IHN0b3JlLmNsZWFyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgdHJhbnNhY3Rpb24ub25jb21wbGV0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICB0cmFuc2FjdGlvbi5vbmFib3J0ID0gdHJhbnNhY3Rpb24ub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnIgPSByZXEuZXJyb3IgPyByZXEuZXJyb3IgOiByZXEudHJhbnNhY3Rpb24uZXJyb3I7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gbGVuZ3RoKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY3JlYXRlVHJhbnNhY3Rpb24oc2VsZi5fZGJJbmZvLCBSRUFEX09OTFksIGZ1bmN0aW9uIChlcnIsIHRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc2VsZi5fZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBzdG9yZS5jb3VudCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcS5yZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlcS5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGtleShuLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGlmIChuIDwgMCkge1xuICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcblxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgY3JlYXRlVHJhbnNhY3Rpb24oc2VsZi5fZGJJbmZvLCBSRUFEX09OTFksIGZ1bmN0aW9uIChlcnIsIHRyYW5zYWN0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHN0b3JlID0gdHJhbnNhY3Rpb24ub2JqZWN0U3RvcmUoc2VsZi5fZGJJbmZvLnN0b3JlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhZHZhbmNlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gc3RvcmUub3BlbktleUN1cnNvcigpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY3Vyc29yID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3Vyc29yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBtZWFucyB0aGVyZSB3ZXJlbid0IGVub3VnaCBrZXlzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShudWxsKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG4gPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRoZSBmaXJzdCBrZXksIHJldHVybiBpdCBpZiB0aGF0J3Mgd2hhdCB0aGV5XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2FudGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY3Vyc29yLmtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghYWR2YW5jZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBhc2sgdGhlIGN1cnNvciB0byBza2lwIGFoZWFkIG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVjb3Jkcy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJzb3IuYWR2YW5jZShuKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHdlIGdldCBoZXJlLCB3ZSd2ZSBnb3QgdGhlIG50aCBrZXkuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoY3Vyc29yLmtleSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHJlcS5lcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGtleXMoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBjcmVhdGVUcmFuc2FjdGlvbihzZWxmLl9kYkluZm8sIFJFQURfT05MWSwgZnVuY3Rpb24gKGVyciwgdHJhbnNhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgc3RvcmUgPSB0cmFuc2FjdGlvbi5vYmplY3RTdG9yZShzZWxmLl9kYkluZm8uc3RvcmVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlcSA9IHN0b3JlLm9wZW5LZXlDdXJzb3IoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGtleXMgPSBbXTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1cnNvciA9IHJlcS5yZXN1bHQ7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY3Vyc29yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShrZXlzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChjdXJzb3Iua2V5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnNvcltcImNvbnRpbnVlXCJdKCk7XG4gICAgICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QocmVxLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gZHJvcEluc3RhbmNlKG9wdGlvbnMsIGNhbGxiYWNrKSB7XG4gICAgY2FsbGJhY2sgPSBnZXRDYWxsYmFjay5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgdmFyIGN1cnJlbnRDb25maWcgPSB0aGlzLmNvbmZpZygpO1xuICAgIG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyAhPT0gJ2Z1bmN0aW9uJyAmJiBvcHRpb25zIHx8IHt9O1xuICAgIGlmICghb3B0aW9ucy5uYW1lKSB7XG4gICAgICAgIG9wdGlvbnMubmFtZSA9IG9wdGlvbnMubmFtZSB8fCBjdXJyZW50Q29uZmlnLm5hbWU7XG4gICAgICAgIG9wdGlvbnMuc3RvcmVOYW1lID0gb3B0aW9ucy5zdG9yZU5hbWUgfHwgY3VycmVudENvbmZpZy5zdG9yZU5hbWU7XG4gICAgfVxuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcm9taXNlO1xuICAgIGlmICghb3B0aW9ucy5uYW1lKSB7XG4gICAgICAgIHByb21pc2UgPSBQcm9taXNlJDEucmVqZWN0KCdJbnZhbGlkIGFyZ3VtZW50cycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBpc0N1cnJlbnREYiA9IG9wdGlvbnMubmFtZSA9PT0gY3VycmVudENvbmZpZy5uYW1lICYmIHNlbGYuX2RiSW5mby5kYjtcblxuICAgICAgICB2YXIgZGJQcm9taXNlID0gaXNDdXJyZW50RGIgPyBQcm9taXNlJDEucmVzb2x2ZShzZWxmLl9kYkluZm8uZGIpIDogX2dldE9yaWdpbmFsQ29ubmVjdGlvbihvcHRpb25zKS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICAgICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbb3B0aW9ucy5uYW1lXTtcbiAgICAgICAgICAgIHZhciBmb3JhZ2VzID0gZGJDb250ZXh0LmZvcmFnZXM7XG4gICAgICAgICAgICBkYkNvbnRleHQuZGIgPSBkYjtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9yYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGZvcmFnZXNbaV0uX2RiSW5mby5kYiA9IGRiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRiO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoIW9wdGlvbnMuc3RvcmVOYW1lKSB7XG4gICAgICAgICAgICBwcm9taXNlID0gZGJQcm9taXNlLnRoZW4oZnVuY3Rpb24gKGRiKSB7XG4gICAgICAgICAgICAgICAgX2RlZmVyUmVhZGluZXNzKG9wdGlvbnMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbb3B0aW9ucy5uYW1lXTtcbiAgICAgICAgICAgICAgICB2YXIgZm9yYWdlcyA9IGRiQ29udGV4dC5mb3JhZ2VzO1xuXG4gICAgICAgICAgICAgICAgZGIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvcmFnZSA9IGZvcmFnZXNbaV07XG4gICAgICAgICAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLmRiID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgZHJvcERCUHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVxID0gaWRiLmRlbGV0ZURhdGFiYXNlKG9wdGlvbnMubmFtZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVxLm9uZXJyb3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGIgPSByZXEucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChyZXEuZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmJsb2NrZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBDbG9zaW5nIGFsbCBvcGVuIGNvbm5lY3Rpb25zIGluIG9udmVyc2lvbmNoYW5nZSBoYW5kbGVyIHNob3VsZCBwcmV2ZW50IHRoaXMgc2l0dWF0aW9uLCBidXQgaWZcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGRvIGdldCBoZXJlLCBpdCBqdXN0IG1lYW5zIHRoZSByZXF1ZXN0IHJlbWFpbnMgcGVuZGluZyAtIGV2ZW50dWFsbHkgaXQgd2lsbCBzdWNjZWVkIG9yIGVycm9yXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ2Ryb3BJbnN0YW5jZSBibG9ja2VkIGZvciBkYXRhYmFzZSBcIicgKyBvcHRpb25zLm5hbWUgKyAnXCIgdW50aWwgYWxsIG9wZW4gY29ubmVjdGlvbnMgYXJlIGNsb3NlZCcpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGIgPSByZXEucmVzdWx0O1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoZGIpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRyb3BEQlByb21pc2UudGhlbihmdW5jdGlvbiAoZGIpIHtcbiAgICAgICAgICAgICAgICAgICAgZGJDb250ZXh0LmRiID0gZGI7XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZm9yYWdlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9mb3JhZ2UgPSBmb3JhZ2VzW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2FkdmFuY2VSZWFkaW5lc3MoX2ZvcmFnZS5fZGJJbmZvKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAoX3JlamVjdFJlYWRpbmVzcyhvcHRpb25zLCBlcnIpIHx8IFByb21pc2UkMS5yZXNvbHZlKCkpW1wiY2F0Y2hcIl0oZnVuY3Rpb24gKCkge30pO1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb21pc2UgPSBkYlByb21pc2UudGhlbihmdW5jdGlvbiAoZGIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWRiLm9iamVjdFN0b3JlTmFtZXMuY29udGFpbnMob3B0aW9ucy5zdG9yZU5hbWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgbmV3VmVyc2lvbiA9IGRiLnZlcnNpb24gKyAxO1xuXG4gICAgICAgICAgICAgICAgX2RlZmVyUmVhZGluZXNzKG9wdGlvbnMpO1xuXG4gICAgICAgICAgICAgICAgdmFyIGRiQ29udGV4dCA9IGRiQ29udGV4dHNbb3B0aW9ucy5uYW1lXTtcbiAgICAgICAgICAgICAgICB2YXIgZm9yYWdlcyA9IGRiQ29udGV4dC5mb3JhZ2VzO1xuXG4gICAgICAgICAgICAgICAgZGIuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGZvcmFnZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZvcmFnZSA9IGZvcmFnZXNbaV07XG4gICAgICAgICAgICAgICAgICAgIGZvcmFnZS5fZGJJbmZvLmRiID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgZm9yYWdlLl9kYkluZm8udmVyc2lvbiA9IG5ld1ZlcnNpb247XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGRyb3BPYmplY3RQcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXEgPSBpZGIub3BlbihvcHRpb25zLm5hbWUsIG5ld1ZlcnNpb24pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlcS5vbmVycm9yID0gZnVuY3Rpb24gKGVycikge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRiID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRiID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRiLmRlbGV0ZU9iamVjdFN0b3JlKG9wdGlvbnMuc3RvcmVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICByZXEub25zdWNjZXNzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRiID0gcmVxLnJlc3VsdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRiLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKGRiKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIHJldHVybiBkcm9wT2JqZWN0UHJvbWlzZS50aGVuKGZ1bmN0aW9uIChkYikge1xuICAgICAgICAgICAgICAgICAgICBkYkNvbnRleHQuZGIgPSBkYjtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBmb3JhZ2VzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2ZvcmFnZTIgPSBmb3JhZ2VzW2pdO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2ZvcmFnZTIuX2RiSW5mby5kYiA9IGRiO1xuICAgICAgICAgICAgICAgICAgICAgICAgX2FkdmFuY2VSZWFkaW5lc3MoX2ZvcmFnZTIuX2RiSW5mbyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVtcImNhdGNoXCJdKGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgKF9yZWplY3RSZWFkaW5lc3Mob3B0aW9ucywgZXJyKSB8fCBQcm9taXNlJDEucmVzb2x2ZSgpKVtcImNhdGNoXCJdKGZ1bmN0aW9uICgpIHt9KTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG52YXIgYXN5bmNTdG9yYWdlID0ge1xuICAgIF9kcml2ZXI6ICdhc3luY1N0b3JhZ2UnLFxuICAgIF9pbml0U3RvcmFnZTogX2luaXRTdG9yYWdlLFxuICAgIF9zdXBwb3J0OiBpc0luZGV4ZWREQlZhbGlkKCksXG4gICAgaXRlcmF0ZTogaXRlcmF0ZSxcbiAgICBnZXRJdGVtOiBnZXRJdGVtLFxuICAgIHNldEl0ZW06IHNldEl0ZW0sXG4gICAgcmVtb3ZlSXRlbTogcmVtb3ZlSXRlbSxcbiAgICBjbGVhcjogY2xlYXIsXG4gICAgbGVuZ3RoOiBsZW5ndGgsXG4gICAga2V5OiBrZXksXG4gICAga2V5czoga2V5cyxcbiAgICBkcm9wSW5zdGFuY2U6IGRyb3BJbnN0YW5jZVxufTtcblxuZnVuY3Rpb24gaXNXZWJTUUxWYWxpZCgpIHtcbiAgICByZXR1cm4gdHlwZW9mIG9wZW5EYXRhYmFzZSA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLy8gU2FkbHksIHRoZSBiZXN0IHdheSB0byBzYXZlIGJpbmFyeSBkYXRhIGluIFdlYlNRTC9sb2NhbFN0b3JhZ2UgaXMgc2VyaWFsaXppbmdcbi8vIGl0IHRvIEJhc2U2NCwgc28gdGhpcyBpcyBob3cgd2Ugc3RvcmUgaXQgdG8gcHJldmVudCB2ZXJ5IHN0cmFuZ2UgZXJyb3JzIHdpdGggbGVzc1xuLy8gdmVyYm9zZSB3YXlzIG9mIGJpbmFyeSA8LT4gc3RyaW5nIGRhdGEgc3RvcmFnZS5cbnZhciBCQVNFX0NIQVJTID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8nO1xuXG52YXIgQkxPQl9UWVBFX1BSRUZJWCA9ICd+fmxvY2FsX2ZvcmFnZV90eXBlfic7XG52YXIgQkxPQl9UWVBFX1BSRUZJWF9SRUdFWCA9IC9efn5sb2NhbF9mb3JhZ2VfdHlwZX4oW15+XSspfi87XG5cbnZhciBTRVJJQUxJWkVEX01BUktFUiA9ICdfX2xmc2NfXzonO1xudmFyIFNFUklBTElaRURfTUFSS0VSX0xFTkdUSCA9IFNFUklBTElaRURfTUFSS0VSLmxlbmd0aDtcblxuLy8gT01HIHRoZSBzZXJpYWxpemF0aW9ucyFcbnZhciBUWVBFX0FSUkFZQlVGRkVSID0gJ2FyYmYnO1xudmFyIFRZUEVfQkxPQiA9ICdibG9iJztcbnZhciBUWVBFX0lOVDhBUlJBWSA9ICdzaTA4JztcbnZhciBUWVBFX1VJTlQ4QVJSQVkgPSAndWkwOCc7XG52YXIgVFlQRV9VSU5UOENMQU1QRURBUlJBWSA9ICd1aWM4JztcbnZhciBUWVBFX0lOVDE2QVJSQVkgPSAnc2kxNic7XG52YXIgVFlQRV9JTlQzMkFSUkFZID0gJ3NpMzInO1xudmFyIFRZUEVfVUlOVDE2QVJSQVkgPSAndXIxNic7XG52YXIgVFlQRV9VSU5UMzJBUlJBWSA9ICd1aTMyJztcbnZhciBUWVBFX0ZMT0FUMzJBUlJBWSA9ICdmbDMyJztcbnZhciBUWVBFX0ZMT0FUNjRBUlJBWSA9ICdmbDY0JztcbnZhciBUWVBFX1NFUklBTElaRURfTUFSS0VSX0xFTkdUSCA9IFNFUklBTElaRURfTUFSS0VSX0xFTkdUSCArIFRZUEVfQVJSQVlCVUZGRVIubGVuZ3RoO1xuXG52YXIgdG9TdHJpbmckMSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbmZ1bmN0aW9uIHN0cmluZ1RvQnVmZmVyKHNlcmlhbGl6ZWRTdHJpbmcpIHtcbiAgICAvLyBGaWxsIHRoZSBzdHJpbmcgaW50byBhIEFycmF5QnVmZmVyLlxuICAgIHZhciBidWZmZXJMZW5ndGggPSBzZXJpYWxpemVkU3RyaW5nLmxlbmd0aCAqIDAuNzU7XG4gICAgdmFyIGxlbiA9IHNlcmlhbGl6ZWRTdHJpbmcubGVuZ3RoO1xuICAgIHZhciBpO1xuICAgIHZhciBwID0gMDtcbiAgICB2YXIgZW5jb2RlZDEsIGVuY29kZWQyLCBlbmNvZGVkMywgZW5jb2RlZDQ7XG5cbiAgICBpZiAoc2VyaWFsaXplZFN0cmluZ1tzZXJpYWxpemVkU3RyaW5nLmxlbmd0aCAtIDFdID09PSAnPScpIHtcbiAgICAgICAgYnVmZmVyTGVuZ3RoLS07XG4gICAgICAgIGlmIChzZXJpYWxpemVkU3RyaW5nW3NlcmlhbGl6ZWRTdHJpbmcubGVuZ3RoIC0gMl0gPT09ICc9Jykge1xuICAgICAgICAgICAgYnVmZmVyTGVuZ3RoLS07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGJ1ZmZlckxlbmd0aCk7XG4gICAgdmFyIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcblxuICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgICAgICBlbmNvZGVkMSA9IEJBU0VfQ0hBUlMuaW5kZXhPZihzZXJpYWxpemVkU3RyaW5nW2ldKTtcbiAgICAgICAgZW5jb2RlZDIgPSBCQVNFX0NIQVJTLmluZGV4T2Yoc2VyaWFsaXplZFN0cmluZ1tpICsgMV0pO1xuICAgICAgICBlbmNvZGVkMyA9IEJBU0VfQ0hBUlMuaW5kZXhPZihzZXJpYWxpemVkU3RyaW5nW2kgKyAyXSk7XG4gICAgICAgIGVuY29kZWQ0ID0gQkFTRV9DSEFSUy5pbmRleE9mKHNlcmlhbGl6ZWRTdHJpbmdbaSArIDNdKTtcblxuICAgICAgICAvKmpzbGludCBiaXR3aXNlOiB0cnVlICovXG4gICAgICAgIGJ5dGVzW3ArK10gPSBlbmNvZGVkMSA8PCAyIHwgZW5jb2RlZDIgPj4gNDtcbiAgICAgICAgYnl0ZXNbcCsrXSA9IChlbmNvZGVkMiAmIDE1KSA8PCA0IHwgZW5jb2RlZDMgPj4gMjtcbiAgICAgICAgYnl0ZXNbcCsrXSA9IChlbmNvZGVkMyAmIDMpIDw8IDYgfCBlbmNvZGVkNCAmIDYzO1xuICAgIH1cbiAgICByZXR1cm4gYnVmZmVyO1xufVxuXG4vLyBDb252ZXJ0cyBhIGJ1ZmZlciB0byBhIHN0cmluZyB0byBzdG9yZSwgc2VyaWFsaXplZCwgaW4gdGhlIGJhY2tlbmRcbi8vIHN0b3JhZ2UgbGlicmFyeS5cbmZ1bmN0aW9uIGJ1ZmZlclRvU3RyaW5nKGJ1ZmZlcikge1xuICAgIC8vIGJhc2U2NC1hcnJheWJ1ZmZlclxuICAgIHZhciBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgdmFyIGJhc2U2NFN0cmluZyA9ICcnO1xuICAgIHZhciBpO1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGJ5dGVzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgICAgIC8qanNsaW50IGJpdHdpc2U6IHRydWUgKi9cbiAgICAgICAgYmFzZTY0U3RyaW5nICs9IEJBU0VfQ0hBUlNbYnl0ZXNbaV0gPj4gMl07XG4gICAgICAgIGJhc2U2NFN0cmluZyArPSBCQVNFX0NIQVJTWyhieXRlc1tpXSAmIDMpIDw8IDQgfCBieXRlc1tpICsgMV0gPj4gNF07XG4gICAgICAgIGJhc2U2NFN0cmluZyArPSBCQVNFX0NIQVJTWyhieXRlc1tpICsgMV0gJiAxNSkgPDwgMiB8IGJ5dGVzW2kgKyAyXSA+PiA2XTtcbiAgICAgICAgYmFzZTY0U3RyaW5nICs9IEJBU0VfQ0hBUlNbYnl0ZXNbaSArIDJdICYgNjNdO1xuICAgIH1cblxuICAgIGlmIChieXRlcy5sZW5ndGggJSAzID09PSAyKSB7XG4gICAgICAgIGJhc2U2NFN0cmluZyA9IGJhc2U2NFN0cmluZy5zdWJzdHJpbmcoMCwgYmFzZTY0U3RyaW5nLmxlbmd0aCAtIDEpICsgJz0nO1xuICAgIH0gZWxzZSBpZiAoYnl0ZXMubGVuZ3RoICUgMyA9PT0gMSkge1xuICAgICAgICBiYXNlNjRTdHJpbmcgPSBiYXNlNjRTdHJpbmcuc3Vic3RyaW5nKDAsIGJhc2U2NFN0cmluZy5sZW5ndGggLSAyKSArICc9PSc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2U2NFN0cmluZztcbn1cblxuLy8gU2VyaWFsaXplIGEgdmFsdWUsIGFmdGVyd2FyZHMgZXhlY3V0aW5nIGEgY2FsbGJhY2sgKHdoaWNoIHVzdWFsbHlcbi8vIGluc3RydWN0cyB0aGUgYHNldEl0ZW0oKWAgY2FsbGJhY2svcHJvbWlzZSB0byBiZSBleGVjdXRlZCkuIFRoaXMgaXMgaG93XG4vLyB3ZSBzdG9yZSBiaW5hcnkgZGF0YSB3aXRoIGxvY2FsU3RvcmFnZS5cbmZ1bmN0aW9uIHNlcmlhbGl6ZSh2YWx1ZSwgY2FsbGJhY2spIHtcbiAgICB2YXIgdmFsdWVUeXBlID0gJyc7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHZhbHVlVHlwZSA9IHRvU3RyaW5nJDEuY2FsbCh2YWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gQ2Fubm90IHVzZSBgdmFsdWUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcmAgb3Igc3VjaCBoZXJlLCBhcyB0aGVzZVxuICAgIC8vIGNoZWNrcyBmYWlsIHdoZW4gcnVubmluZyB0aGUgdGVzdHMgdXNpbmcgY2FzcGVyLmpzLi4uXG4gICAgLy9cbiAgICAvLyBUT0RPOiBTZWUgd2h5IHRob3NlIHRlc3RzIGZhaWwgYW5kIHVzZSBhIGJldHRlciBzb2x1dGlvbi5cbiAgICBpZiAodmFsdWUgJiYgKHZhbHVlVHlwZSA9PT0gJ1tvYmplY3QgQXJyYXlCdWZmZXJdJyB8fCB2YWx1ZS5idWZmZXIgJiYgdG9TdHJpbmckMS5jYWxsKHZhbHVlLmJ1ZmZlcikgPT09ICdbb2JqZWN0IEFycmF5QnVmZmVyXScpKSB7XG4gICAgICAgIC8vIENvbnZlcnQgYmluYXJ5IGFycmF5cyB0byBhIHN0cmluZyBhbmQgcHJlZml4IHRoZSBzdHJpbmcgd2l0aFxuICAgICAgICAvLyBhIHNwZWNpYWwgbWFya2VyLlxuICAgICAgICB2YXIgYnVmZmVyO1xuICAgICAgICB2YXIgbWFya2VyID0gU0VSSUFMSVpFRF9NQVJLRVI7XG5cbiAgICAgICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgIGJ1ZmZlciA9IHZhbHVlO1xuICAgICAgICAgICAgbWFya2VyICs9IFRZUEVfQVJSQVlCVUZGRVI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBidWZmZXIgPSB2YWx1ZS5idWZmZXI7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IEludDhBcnJheV0nKSB7XG4gICAgICAgICAgICAgICAgbWFya2VyICs9IFRZUEVfSU5UOEFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IFVpbnQ4QXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX1VJTlQ4QVJSQVk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlVHlwZSA9PT0gJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX1VJTlQ4Q0xBTVBFREFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IEludDE2QXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0lOVDE2QVJSQVk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlVHlwZSA9PT0gJ1tvYmplY3QgVWludDE2QXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX1VJTlQxNkFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IEludDMyQXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX0lOVDMyQVJSQVk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHZhbHVlVHlwZSA9PT0gJ1tvYmplY3QgVWludDMyQXJyYXldJykge1xuICAgICAgICAgICAgICAgIG1hcmtlciArPSBUWVBFX1VJTlQzMkFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nKSB7XG4gICAgICAgICAgICAgICAgbWFya2VyICs9IFRZUEVfRkxPQVQzMkFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh2YWx1ZVR5cGUgPT09ICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nKSB7XG4gICAgICAgICAgICAgICAgbWFya2VyICs9IFRZUEVfRkxPQVQ2NEFSUkFZO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ0ZhaWxlZCB0byBnZXQgdHlwZSBmb3IgQmluYXJ5QXJyYXknKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjYWxsYmFjayhtYXJrZXIgKyBidWZmZXJUb1N0cmluZyhidWZmZXIpKTtcbiAgICB9IGVsc2UgaWYgKHZhbHVlVHlwZSA9PT0gJ1tvYmplY3QgQmxvYl0nKSB7XG4gICAgICAgIC8vIENvbnZlciB0aGUgYmxvYiB0byBhIGJpbmFyeUFycmF5IGFuZCB0aGVuIHRvIGEgc3RyaW5nLlxuICAgICAgICB2YXIgZmlsZVJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgICAgICAgZmlsZVJlYWRlci5vbmxvYWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBCYWNrd2FyZHMtY29tcGF0aWJsZSBwcmVmaXggZm9yIHRoZSBibG9iIHR5cGUuXG4gICAgICAgICAgICB2YXIgc3RyID0gQkxPQl9UWVBFX1BSRUZJWCArIHZhbHVlLnR5cGUgKyAnficgKyBidWZmZXJUb1N0cmluZyh0aGlzLnJlc3VsdCk7XG5cbiAgICAgICAgICAgIGNhbGxiYWNrKFNFUklBTElaRURfTUFSS0VSICsgVFlQRV9CTE9CICsgc3RyKTtcbiAgICAgICAgfTtcblxuICAgICAgICBmaWxlUmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKHZhbHVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgY2FsbGJhY2soSlNPTi5zdHJpbmdpZnkodmFsdWUpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIkNvdWxkbid0IGNvbnZlcnQgdmFsdWUgaW50byBhIEpTT04gc3RyaW5nOiBcIiwgdmFsdWUpO1xuXG4gICAgICAgICAgICBjYWxsYmFjayhudWxsLCBlKTtcbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gRGVzZXJpYWxpemUgZGF0YSB3ZSd2ZSBpbnNlcnRlZCBpbnRvIGEgdmFsdWUgY29sdW1uL2ZpZWxkLiBXZSBwbGFjZVxuLy8gc3BlY2lhbCBtYXJrZXJzIGludG8gb3VyIHN0cmluZ3MgdG8gbWFyayB0aGVtIGFzIGVuY29kZWQ7IHRoaXMgaXNuJ3Rcbi8vIGFzIG5pY2UgYXMgYSBtZXRhIGZpZWxkLCBidXQgaXQncyB0aGUgb25seSBzYW5lIHRoaW5nIHdlIGNhbiBkbyB3aGlsc3Rcbi8vIGtlZXBpbmcgbG9jYWxTdG9yYWdlIHN1cHBvcnQgaW50YWN0LlxuLy9cbi8vIE9mdGVudGltZXMgdGhpcyB3aWxsIGp1c3QgZGVzZXJpYWxpemUgSlNPTiBjb250ZW50LCBidXQgaWYgd2UgaGF2ZSBhXG4vLyBzcGVjaWFsIG1hcmtlciAoU0VSSUFMSVpFRF9NQVJLRVIsIGRlZmluZWQgYWJvdmUpLCB3ZSB3aWxsIGV4dHJhY3Rcbi8vIHNvbWUga2luZCBvZiBhcnJheWJ1ZmZlci9iaW5hcnkgZGF0YS90eXBlZCBhcnJheSBvdXQgb2YgdGhlIHN0cmluZy5cbmZ1bmN0aW9uIGRlc2VyaWFsaXplKHZhbHVlKSB7XG4gICAgLy8gSWYgd2UgaGF2ZW4ndCBtYXJrZWQgdGhpcyBzdHJpbmcgYXMgYmVpbmcgc3BlY2lhbGx5IHNlcmlhbGl6ZWQgKGkuZS5cbiAgICAvLyBzb21ldGhpbmcgb3RoZXIgdGhhbiBzZXJpYWxpemVkIEpTT04pLCB3ZSBjYW4ganVzdCByZXR1cm4gaXQgYW5kIGJlXG4gICAgLy8gZG9uZSB3aXRoIGl0LlxuICAgIGlmICh2YWx1ZS5zdWJzdHJpbmcoMCwgU0VSSUFMSVpFRF9NQVJLRVJfTEVOR1RIKSAhPT0gU0VSSUFMSVpFRF9NQVJLRVIpIHtcbiAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UodmFsdWUpO1xuICAgIH1cblxuICAgIC8vIFRoZSBmb2xsb3dpbmcgY29kZSBkZWFscyB3aXRoIGRlc2VyaWFsaXppbmcgc29tZSBraW5kIG9mIEJsb2Igb3JcbiAgICAvLyBUeXBlZEFycmF5LiBGaXJzdCB3ZSBzZXBhcmF0ZSBvdXQgdGhlIHR5cGUgb2YgZGF0YSB3ZSdyZSBkZWFsaW5nXG4gICAgLy8gd2l0aCBmcm9tIHRoZSBkYXRhIGl0c2VsZi5cbiAgICB2YXIgc2VyaWFsaXplZFN0cmluZyA9IHZhbHVlLnN1YnN0cmluZyhUWVBFX1NFUklBTElaRURfTUFSS0VSX0xFTkdUSCk7XG4gICAgdmFyIHR5cGUgPSB2YWx1ZS5zdWJzdHJpbmcoU0VSSUFMSVpFRF9NQVJLRVJfTEVOR1RILCBUWVBFX1NFUklBTElaRURfTUFSS0VSX0xFTkdUSCk7XG5cbiAgICB2YXIgYmxvYlR5cGU7XG4gICAgLy8gQmFja3dhcmRzLWNvbXBhdGlibGUgYmxvYiB0eXBlIHNlcmlhbGl6YXRpb24gc3RyYXRlZ3kuXG4gICAgLy8gREJzIGNyZWF0ZWQgd2l0aCBvbGRlciB2ZXJzaW9ucyBvZiBsb2NhbEZvcmFnZSB3aWxsIHNpbXBseSBub3QgaGF2ZSB0aGUgYmxvYiB0eXBlLlxuICAgIGlmICh0eXBlID09PSBUWVBFX0JMT0IgJiYgQkxPQl9UWVBFX1BSRUZJWF9SRUdFWC50ZXN0KHNlcmlhbGl6ZWRTdHJpbmcpKSB7XG4gICAgICAgIHZhciBtYXRjaGVyID0gc2VyaWFsaXplZFN0cmluZy5tYXRjaChCTE9CX1RZUEVfUFJFRklYX1JFR0VYKTtcbiAgICAgICAgYmxvYlR5cGUgPSBtYXRjaGVyWzFdO1xuICAgICAgICBzZXJpYWxpemVkU3RyaW5nID0gc2VyaWFsaXplZFN0cmluZy5zdWJzdHJpbmcobWF0Y2hlclswXS5sZW5ndGgpO1xuICAgIH1cbiAgICB2YXIgYnVmZmVyID0gc3RyaW5nVG9CdWZmZXIoc2VyaWFsaXplZFN0cmluZyk7XG5cbiAgICAvLyBSZXR1cm4gdGhlIHJpZ2h0IHR5cGUgYmFzZWQgb24gdGhlIGNvZGUvdHlwZSBzZXQgZHVyaW5nXG4gICAgLy8gc2VyaWFsaXphdGlvbi5cbiAgICBzd2l0Y2ggKHR5cGUpIHtcbiAgICAgICAgY2FzZSBUWVBFX0FSUkFZQlVGRkVSOlxuICAgICAgICAgICAgcmV0dXJuIGJ1ZmZlcjtcbiAgICAgICAgY2FzZSBUWVBFX0JMT0I6XG4gICAgICAgICAgICByZXR1cm4gY3JlYXRlQmxvYihbYnVmZmVyXSwgeyB0eXBlOiBibG9iVHlwZSB9KTtcbiAgICAgICAgY2FzZSBUWVBFX0lOVDhBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGNhc2UgVFlQRV9VSU5UOEFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGNhc2UgVFlQRV9VSU5UOENMQU1QRURBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgVWludDhDbGFtcGVkQXJyYXkoYnVmZmVyKTtcbiAgICAgICAgY2FzZSBUWVBFX0lOVDE2QVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEludDE2QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgY2FzZSBUWVBFX1VJTlQxNkFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBVaW50MTZBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfSU5UMzJBUlJBWTpcbiAgICAgICAgICAgIHJldHVybiBuZXcgSW50MzJBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfVUlOVDMyQVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IFVpbnQzMkFycmF5KGJ1ZmZlcik7XG4gICAgICAgIGNhc2UgVFlQRV9GTE9BVDMyQVJSQVk6XG4gICAgICAgICAgICByZXR1cm4gbmV3IEZsb2F0MzJBcnJheShidWZmZXIpO1xuICAgICAgICBjYXNlIFRZUEVfRkxPQVQ2NEFSUkFZOlxuICAgICAgICAgICAgcmV0dXJuIG5ldyBGbG9hdDY0QXJyYXkoYnVmZmVyKTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rb3duIHR5cGU6ICcgKyB0eXBlKTtcbiAgICB9XG59XG5cbnZhciBsb2NhbGZvcmFnZVNlcmlhbGl6ZXIgPSB7XG4gICAgc2VyaWFsaXplOiBzZXJpYWxpemUsXG4gICAgZGVzZXJpYWxpemU6IGRlc2VyaWFsaXplLFxuICAgIHN0cmluZ1RvQnVmZmVyOiBzdHJpbmdUb0J1ZmZlcixcbiAgICBidWZmZXJUb1N0cmluZzogYnVmZmVyVG9TdHJpbmdcbn07XG5cbi8qXG4gKiBJbmNsdWRlcyBjb2RlIGZyb206XG4gKlxuICogYmFzZTY0LWFycmF5YnVmZmVyXG4gKiBodHRwczovL2dpdGh1Yi5jb20vbmlrbGFzdmgvYmFzZTY0LWFycmF5YnVmZmVyXG4gKlxuICogQ29weXJpZ2h0IChjKSAyMDEyIE5pa2xhcyB2b24gSGVydHplblxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuICovXG5cbmZ1bmN0aW9uIGNyZWF0ZURiVGFibGUodCwgZGJJbmZvLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaykge1xuICAgIHQuZXhlY3V0ZVNxbCgnQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgJyArIGRiSW5mby5zdG9yZU5hbWUgKyAnICcgKyAnKGlkIElOVEVHRVIgUFJJTUFSWSBLRVksIGtleSB1bmlxdWUsIHZhbHVlKScsIFtdLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7XG59XG5cbi8vIE9wZW4gdGhlIFdlYlNRTCBkYXRhYmFzZSAoYXV0b21hdGljYWxseSBjcmVhdGVzIG9uZSBpZiBvbmUgZGlkbid0XG4vLyBwcmV2aW91c2x5IGV4aXN0KSwgdXNpbmcgYW55IG9wdGlvbnMgc2V0IGluIHRoZSBjb25maWcuXG5mdW5jdGlvbiBfaW5pdFN0b3JhZ2UkMShvcHRpb25zKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBkYkluZm8gPSB7XG4gICAgICAgIGRiOiBudWxsXG4gICAgfTtcblxuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAgIGZvciAodmFyIGkgaW4gb3B0aW9ucykge1xuICAgICAgICAgICAgZGJJbmZvW2ldID0gdHlwZW9mIG9wdGlvbnNbaV0gIT09ICdzdHJpbmcnID8gb3B0aW9uc1tpXS50b1N0cmluZygpIDogb3B0aW9uc1tpXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBkYkluZm9Qcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIC8vIE9wZW4gdGhlIGRhdGFiYXNlOyB0aGUgb3BlbkRhdGFiYXNlIEFQSSB3aWxsIGF1dG9tYXRpY2FsbHlcbiAgICAgICAgLy8gY3JlYXRlIGl0IGZvciB1cyBpZiBpdCBkb2Vzbid0IGV4aXN0LlxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgZGJJbmZvLmRiID0gb3BlbkRhdGFiYXNlKGRiSW5mby5uYW1lLCBTdHJpbmcoZGJJbmZvLnZlcnNpb24pLCBkYkluZm8uZGVzY3JpcHRpb24sIGRiSW5mby5zaXplKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENyZWF0ZSBvdXIga2V5L3ZhbHVlIHRhYmxlIGlmIGl0IGRvZXNuJ3QgZXhpc3QuXG4gICAgICAgIGRiSW5mby5kYi50cmFuc2FjdGlvbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgY3JlYXRlRGJUYWJsZSh0LCBkYkluZm8sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICBzZWxmLl9kYkluZm8gPSBkYkluZm87XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHQsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCByZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZGJJbmZvLnNlcmlhbGl6ZXIgPSBsb2NhbGZvcmFnZVNlcmlhbGl6ZXI7XG4gICAgcmV0dXJuIGRiSW5mb1Byb21pc2U7XG59XG5cbmZ1bmN0aW9uIHRyeUV4ZWN1dGVTcWwodCwgZGJJbmZvLCBzcWxTdGF0ZW1lbnQsIGFyZ3MsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKSB7XG4gICAgdC5leGVjdXRlU3FsKHNxbFN0YXRlbWVudCwgYXJncywgY2FsbGJhY2ssIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IuY29kZSA9PT0gZXJyb3IuU1lOVEFYX0VSUikge1xuICAgICAgICAgICAgdC5leGVjdXRlU3FsKCdTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgJyArIFwiV0hFUkUgdHlwZT0ndGFibGUnIEFORCBuYW1lID0gP1wiLCBbZGJJbmZvLnN0b3JlTmFtZV0sIGZ1bmN0aW9uICh0LCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFyZXN1bHRzLnJvd3MubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIGlmIHRoZSB0YWJsZSBpcyBtaXNzaW5nICh3YXMgZGVsZXRlZClcbiAgICAgICAgICAgICAgICAgICAgLy8gcmUtY3JlYXRlIGl0IHRhYmxlIGFuZCByZXRyeVxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVEYlRhYmxlKHQsIGRiSW5mbywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdC5leGVjdXRlU3FsKHNxbFN0YXRlbWVudCwgYXJncywgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spO1xuICAgICAgICAgICAgICAgICAgICB9LCBlcnJvckNhbGxiYWNrKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlcnJvckNhbGxiYWNrKHQsIGVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCBlcnJvckNhbGxiYWNrKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGVycm9yQ2FsbGJhY2sodCwgZXJyb3IpO1xuICAgICAgICB9XG4gICAgfSwgZXJyb3JDYWxsYmFjayk7XG59XG5cbmZ1bmN0aW9uIGdldEl0ZW0kMShrZXksIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICAgICAgZGJJbmZvLmRiLnRyYW5zYWN0aW9uKGZ1bmN0aW9uICh0KSB7XG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdTRUxFQ1QgKiBGUk9NICcgKyBkYkluZm8uc3RvcmVOYW1lICsgJyBXSEVSRSBrZXkgPSA/IExJTUlUIDEnLCBba2V5XSwgZnVuY3Rpb24gKHQsIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHJlc3VsdHMucm93cy5sZW5ndGggPyByZXN1bHRzLnJvd3MuaXRlbSgwKS52YWx1ZSA6IG51bGw7XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgc2VyaWFsaXplZCBjb250ZW50IHdlIG5lZWQgdG9cbiAgICAgICAgICAgICAgICAgICAgLy8gdW5wYWNrLlxuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBkYkluZm8uc2VyaWFsaXplci5kZXNlcmlhbGl6ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGl0ZXJhdGUkMShpdGVyYXRvciwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuXG4gICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICB0cnlFeGVjdXRlU3FsKHQsIGRiSW5mbywgJ1NFTEVDVCAqIEZST00gJyArIGRiSW5mby5zdG9yZU5hbWUsIFtdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcm93cyA9IHJlc3VsdHMucm93cztcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbmd0aCA9IHJvd3MubGVuZ3RoO1xuXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gcm93cy5pdGVtKGkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGl0ZW0udmFsdWU7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIGlzIHNlcmlhbGl6ZWQgY29udGVudFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byB1bnBhY2suXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gZGJJbmZvLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gaXRlcmF0b3IocmVzdWx0LCBpdGVtLmtleSwgaSArIDEpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB2b2lkKDApIHByZXZlbnRzIHByb2JsZW1zIHdpdGggcmVkZWZpbml0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvZiBgdW5kZWZpbmVkYC5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHQsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gX3NldEl0ZW0oa2V5LCB2YWx1ZSwgY2FsbGJhY2ssIHJldHJpZXNMZWZ0KSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAga2V5ID0gbm9ybWFsaXplS2V5KGtleSk7XG5cbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBUaGUgbG9jYWxTdG9yYWdlIEFQSSBkb2Vzbid0IHJldHVybiB1bmRlZmluZWQgdmFsdWVzIGluIGFuXG4gICAgICAgICAgICAvLyBcImV4cGVjdGVkXCIgd2F5LCBzbyB1bmRlZmluZWQgaXMgYWx3YXlzIGNhc3QgdG8gbnVsbCBpbiBhbGxcbiAgICAgICAgICAgIC8vIGRyaXZlcnMuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvbG9jYWxGb3JhZ2UvcHVsbC80MlxuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNhdmUgdGhlIG9yaWdpbmFsIHZhbHVlIHRvIHBhc3MgdG8gdGhlIGNhbGxiYWNrLlxuICAgICAgICAgICAgdmFyIG9yaWdpbmFsVmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGRiSW5mby5zZXJpYWxpemVyLnNlcmlhbGl6ZSh2YWx1ZSwgZnVuY3Rpb24gKHZhbHVlLCBlcnJvcikge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRiSW5mby5kYi50cmFuc2FjdGlvbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdJTlNFUlQgT1IgUkVQTEFDRSBJTlRPICcgKyBkYkluZm8uc3RvcmVOYW1lICsgJyAnICsgJyhrZXksIHZhbHVlKSBWQUxVRVMgKD8sID8pJywgW2tleSwgdmFsdWVdLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShvcmlnaW5hbFZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHNxbEVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgdHJhbnNhY3Rpb24gZmFpbGVkOyBjaGVja1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gc2VlIGlmIGl0J3MgYSBxdW90YSBlcnJvci5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcWxFcnJvci5jb2RlID09PSBzcWxFcnJvci5RVU9UQV9FUlIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSByZWplY3QgdGhlIGNhbGxiYWNrIG91dHJpZ2h0IGZvciBub3csIGJ1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGl0J3Mgd29ydGggdHJ5aW5nIHRvIHJlLXJ1biB0aGUgdHJhbnNhY3Rpb24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRXZlbiBpZiB0aGUgdXNlciBhY2NlcHRzIHRoZSBwcm9tcHQgdG8gdXNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbW9yZSBzdG9yYWdlIG9uIFNhZmFyaSwgdGhpcyBlcnJvciB3aWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmUgY2FsbGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVHJ5IHRvIHJlLXJ1biB0aGUgdHJhbnNhY3Rpb24uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJpZXNMZWZ0ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKF9zZXRJdGVtLmFwcGx5KHNlbGYsIFtrZXksIG9yaWdpbmFsVmFsdWUsIGNhbGxiYWNrLCByZXRyaWVzTGVmdCAtIDFdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHNxbEVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIHNldEl0ZW0kMShrZXksIHZhbHVlLCBjYWxsYmFjaykge1xuICAgIHJldHVybiBfc2V0SXRlbS5hcHBseSh0aGlzLCBba2V5LCB2YWx1ZSwgY2FsbGJhY2ssIDFdKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlSXRlbSQxKGtleSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICB0cnlFeGVjdXRlU3FsKHQsIGRiSW5mbywgJ0RFTEVURSBGUk9NICcgKyBkYkluZm8uc3RvcmVOYW1lICsgJyBXSEVSRSBrZXkgPSA/JywgW2tleV0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIERlbGV0ZXMgZXZlcnkgaXRlbSBpbiB0aGUgdGFibGUuXG4vLyBUT0RPOiBGaW5kIG91dCBpZiB0aGlzIHJlc2V0cyB0aGUgQVVUT19JTkNSRU1FTlQgbnVtYmVyLlxuZnVuY3Rpb24gY2xlYXIkMShjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICB0cnlFeGVjdXRlU3FsKHQsIGRiSW5mbywgJ0RFTEVURSBGUk9NICcgKyBkYkluZm8uc3RvcmVOYW1lLCBbXSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHQsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShyZWplY3QpO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLy8gRG9lcyBhIHNpbXBsZSBgQ09VTlQoa2V5KWAgdG8gZ2V0IHRoZSBudW1iZXIgb2YgaXRlbXMgc3RvcmVkIGluXG4vLyBsb2NhbEZvcmFnZS5cbmZ1bmN0aW9uIGxlbmd0aCQxKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGRiSW5mby5kYi50cmFuc2FjdGlvbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgIC8vIEFoaGgsIFNRTCBtYWtlcyB0aGlzIG9uZSBzb29vb29vIGVhc3kuXG4gICAgICAgICAgICAgICAgdHJ5RXhlY3V0ZVNxbCh0LCBkYkluZm8sICdTRUxFQ1QgQ09VTlQoa2V5KSBhcyBjIEZST00gJyArIGRiSW5mby5zdG9yZU5hbWUsIFtdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gcmVzdWx0cy5yb3dzLml0ZW0oMCkuYztcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIFJldHVybiB0aGUga2V5IGxvY2F0ZWQgYXQga2V5IGluZGV4IFg7IGVzc2VudGlhbGx5IGdldHMgdGhlIGtleSBmcm9tIGFcbi8vIGBXSEVSRSBpZCA9ID9gLiBUaGlzIGlzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgSSBjYW4gdGhpbmsgdG8gaW1wbGVtZW50XG4vLyB0aGlzIHJhcmVseS11c2VkIChpbiBteSBleHBlcmllbmNlKSBwYXJ0IG9mIHRoZSBBUEksIGJ1dCBpdCBjYW4gc2VlbVxuLy8gaW5jb25zaXN0ZW50LCBiZWNhdXNlIHdlIGRvIGBJTlNFUlQgT1IgUkVQTEFDRSBJTlRPYCBvbiBgc2V0SXRlbSgpYCwgc29cbi8vIHRoZSBJRCBvZiBlYWNoIGtleSB3aWxsIGNoYW5nZSBldmVyeSB0aW1lIGl0J3MgdXBkYXRlZC4gUGVyaGFwcyBhIHN0b3JlZFxuLy8gcHJvY2VkdXJlIGZvciB0aGUgYHNldEl0ZW0oKWAgU1FMIHdvdWxkIHNvbHZlIHRoaXMgcHJvYmxlbT9cbi8vIFRPRE86IERvbid0IGNoYW5nZSBJRCBvbiBgc2V0SXRlbSgpYC5cbmZ1bmN0aW9uIGtleSQxKG4sIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgdmFyIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRiSW5mbyA9IHNlbGYuX2RiSW5mbztcbiAgICAgICAgICAgIGRiSW5mby5kYi50cmFuc2FjdGlvbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgICAgIHRyeUV4ZWN1dGVTcWwodCwgZGJJbmZvLCAnU0VMRUNUIGtleSBGUk9NICcgKyBkYkluZm8uc3RvcmVOYW1lICsgJyBXSEVSRSBpZCA9ID8gTElNSVQgMScsIFtuICsgMV0sIGZ1bmN0aW9uICh0LCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciByZXN1bHQgPSByZXN1bHRzLnJvd3MubGVuZ3RoID8gcmVzdWx0cy5yb3dzLml0ZW0oMCkua2V5IDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXN1bHQpO1xuICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pW1wiY2F0Y2hcIl0ocmVqZWN0KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbmZ1bmN0aW9uIGtleXMkMShjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHNlbGYucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgICAgICBkYkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICB0cnlFeGVjdXRlU3FsKHQsIGRiSW5mbywgJ1NFTEVDVCBrZXkgRlJPTSAnICsgZGJJbmZvLnN0b3JlTmFtZSwgW10sIGZ1bmN0aW9uICh0LCByZXN1bHRzKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBrZXlzID0gW107XG5cbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCByZXN1bHRzLnJvd3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXMucHVzaChyZXN1bHRzLnJvd3MuaXRlbShpKS5rZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShrZXlzKTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAodCwgZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KVtcImNhdGNoXCJdKHJlamVjdCk7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvd2ViZGF0YWJhc2UvI2RhdGFiYXNlc1xuLy8gPiBUaGVyZSBpcyBubyB3YXkgdG8gZW51bWVyYXRlIG9yIGRlbGV0ZSB0aGUgZGF0YWJhc2VzIGF2YWlsYWJsZSBmb3IgYW4gb3JpZ2luIGZyb20gdGhpcyBBUEkuXG5mdW5jdGlvbiBnZXRBbGxTdG9yZU5hbWVzKGRiKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBkYi50cmFuc2FjdGlvbihmdW5jdGlvbiAodCkge1xuICAgICAgICAgICAgdC5leGVjdXRlU3FsKCdTRUxFQ1QgbmFtZSBGUk9NIHNxbGl0ZV9tYXN0ZXIgJyArIFwiV0hFUkUgdHlwZT0ndGFibGUnIEFORCBuYW1lIDw+ICdfX1dlYktpdERhdGFiYXNlSW5mb1RhYmxlX18nXCIsIFtdLCBmdW5jdGlvbiAodCwgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIHZhciBzdG9yZU5hbWVzID0gW107XG5cbiAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMucm93cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBzdG9yZU5hbWVzLnB1c2gocmVzdWx0cy5yb3dzLml0ZW0oaSkubmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICAgICAgICAgIGRiOiBkYixcbiAgICAgICAgICAgICAgICAgICAgc3RvcmVOYW1lczogc3RvcmVOYW1lc1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSwgZnVuY3Rpb24gKHQsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9LCBmdW5jdGlvbiAoc3FsRXJyb3IpIHtcbiAgICAgICAgICAgIHJlamVjdChzcWxFcnJvcik7XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBkcm9wSW5zdGFuY2UkMShvcHRpb25zLCBjYWxsYmFjaykge1xuICAgIGNhbGxiYWNrID0gZ2V0Q2FsbGJhY2suYXBwbHkodGhpcywgYXJndW1lbnRzKTtcblxuICAgIHZhciBjdXJyZW50Q29uZmlnID0gdGhpcy5jb25maWcoKTtcbiAgICBvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgIT09ICdmdW5jdGlvbicgJiYgb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICBvcHRpb25zLm5hbWUgPSBvcHRpb25zLm5hbWUgfHwgY3VycmVudENvbmZpZy5uYW1lO1xuICAgICAgICBvcHRpb25zLnN0b3JlTmFtZSA9IG9wdGlvbnMuc3RvcmVOYW1lIHx8IGN1cnJlbnRDb25maWcuc3RvcmVOYW1lO1xuICAgIH1cblxuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgcHJvbWlzZTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICBwcm9taXNlID0gUHJvbWlzZSQxLnJlamVjdCgnSW52YWxpZCBhcmd1bWVudHMnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBwcm9taXNlID0gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgICAgdmFyIGRiO1xuICAgICAgICAgICAgaWYgKG9wdGlvbnMubmFtZSA9PT0gY3VycmVudENvbmZpZy5uYW1lKSB7XG4gICAgICAgICAgICAgICAgLy8gdXNlIHRoZSBkYiByZWZlcmVuY2Ugb2YgdGhlIGN1cnJlbnQgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICBkYiA9IHNlbGYuX2RiSW5mby5kYjtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGIgPSBvcGVuRGF0YWJhc2Uob3B0aW9ucy5uYW1lLCAnJywgJycsIDApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuc3RvcmVOYW1lKSB7XG4gICAgICAgICAgICAgICAgLy8gZHJvcCBhbGwgZGF0YWJhc2UgdGFibGVzXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShnZXRBbGxTdG9yZU5hbWVzKGRiKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICBkYjogZGIsXG4gICAgICAgICAgICAgICAgICAgIHN0b3JlTmFtZXM6IFtvcHRpb25zLnN0b3JlTmFtZV1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSkudGhlbihmdW5jdGlvbiAob3BlcmF0aW9uSW5mbykge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgIG9wZXJhdGlvbkluZm8uZGIudHJhbnNhY3Rpb24oZnVuY3Rpb24gKHQpIHtcbiAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gZHJvcFRhYmxlKHN0b3JlTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQuZXhlY3V0ZVNxbCgnRFJPUCBUQUJMRSBJRiBFWElTVFMgJyArIHN0b3JlTmFtZSwgW10sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGZ1bmN0aW9uICh0LCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgb3BlcmF0aW9ucyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gb3BlcmF0aW9uSW5mby5zdG9yZU5hbWVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25zLnB1c2goZHJvcFRhYmxlKG9wZXJhdGlvbkluZm8uc3RvcmVOYW1lc1tpXSkpO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgUHJvbWlzZSQxLmFsbChvcGVyYXRpb25zKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoc3FsRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KHNxbEVycm9yKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG52YXIgd2ViU1FMU3RvcmFnZSA9IHtcbiAgICBfZHJpdmVyOiAnd2ViU1FMU3RvcmFnZScsXG4gICAgX2luaXRTdG9yYWdlOiBfaW5pdFN0b3JhZ2UkMSxcbiAgICBfc3VwcG9ydDogaXNXZWJTUUxWYWxpZCgpLFxuICAgIGl0ZXJhdGU6IGl0ZXJhdGUkMSxcbiAgICBnZXRJdGVtOiBnZXRJdGVtJDEsXG4gICAgc2V0SXRlbTogc2V0SXRlbSQxLFxuICAgIHJlbW92ZUl0ZW06IHJlbW92ZUl0ZW0kMSxcbiAgICBjbGVhcjogY2xlYXIkMSxcbiAgICBsZW5ndGg6IGxlbmd0aCQxLFxuICAgIGtleToga2V5JDEsXG4gICAga2V5czoga2V5cyQxLFxuICAgIGRyb3BJbnN0YW5jZTogZHJvcEluc3RhbmNlJDFcbn07XG5cbmZ1bmN0aW9uIGlzTG9jYWxTdG9yYWdlVmFsaWQoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBsb2NhbFN0b3JhZ2UgIT09ICd1bmRlZmluZWQnICYmICdzZXRJdGVtJyBpbiBsb2NhbFN0b3JhZ2UgJiZcbiAgICAgICAgLy8gaW4gSUU4IHR5cGVvZiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSA9PT0gJ29iamVjdCdcbiAgICAgICAgISFsb2NhbFN0b3JhZ2Uuc2V0SXRlbTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5cbmZ1bmN0aW9uIF9nZXRLZXlQcmVmaXgob3B0aW9ucywgZGVmYXVsdENvbmZpZykge1xuICAgIHZhciBrZXlQcmVmaXggPSBvcHRpb25zLm5hbWUgKyAnLyc7XG5cbiAgICBpZiAob3B0aW9ucy5zdG9yZU5hbWUgIT09IGRlZmF1bHRDb25maWcuc3RvcmVOYW1lKSB7XG4gICAgICAgIGtleVByZWZpeCArPSBvcHRpb25zLnN0b3JlTmFtZSArICcvJztcbiAgICB9XG4gICAgcmV0dXJuIGtleVByZWZpeDtcbn1cblxuLy8gQ2hlY2sgaWYgbG9jYWxTdG9yYWdlIHRocm93cyB3aGVuIHNhdmluZyBhbiBpdGVtXG5mdW5jdGlvbiBjaGVja0lmTG9jYWxTdG9yYWdlVGhyb3dzKCkge1xuICAgIHZhciBsb2NhbFN0b3JhZ2VUZXN0S2V5ID0gJ19sb2NhbGZvcmFnZV9zdXBwb3J0X3Rlc3QnO1xuXG4gICAgdHJ5IHtcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0obG9jYWxTdG9yYWdlVGVzdEtleSwgdHJ1ZSk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGxvY2FsU3RvcmFnZVRlc3RLZXkpO1xuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cblxuLy8gQ2hlY2sgaWYgbG9jYWxTdG9yYWdlIGlzIHVzYWJsZSBhbmQgYWxsb3dzIHRvIHNhdmUgYW4gaXRlbVxuLy8gVGhpcyBtZXRob2QgY2hlY2tzIGlmIGxvY2FsU3RvcmFnZSBpcyB1c2FibGUgaW4gU2FmYXJpIFByaXZhdGUgQnJvd3Npbmdcbi8vIG1vZGUsIG9yIGluIGFueSBvdGhlciBjYXNlIHdoZXJlIHRoZSBhdmFpbGFibGUgcXVvdGEgZm9yIGxvY2FsU3RvcmFnZVxuLy8gaXMgMCBhbmQgdGhlcmUgd2Fzbid0IGFueSBzYXZlZCBpdGVtcyB5ZXQuXG5mdW5jdGlvbiBfaXNMb2NhbFN0b3JhZ2VVc2FibGUoKSB7XG4gICAgcmV0dXJuICFjaGVja0lmTG9jYWxTdG9yYWdlVGhyb3dzKCkgfHwgbG9jYWxTdG9yYWdlLmxlbmd0aCA+IDA7XG59XG5cbi8vIENvbmZpZyB0aGUgbG9jYWxTdG9yYWdlIGJhY2tlbmQsIHVzaW5nIG9wdGlvbnMgc2V0IGluIHRoZSBjb25maWcuXG5mdW5jdGlvbiBfaW5pdFN0b3JhZ2UkMihvcHRpb25zKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBkYkluZm8gPSB7fTtcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgICBmb3IgKHZhciBpIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGRiSW5mb1tpXSA9IG9wdGlvbnNbaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBkYkluZm8ua2V5UHJlZml4ID0gX2dldEtleVByZWZpeChvcHRpb25zLCBzZWxmLl9kZWZhdWx0Q29uZmlnKTtcblxuICAgIGlmICghX2lzTG9jYWxTdG9yYWdlVXNhYmxlKCkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UkMS5yZWplY3QoKTtcbiAgICB9XG5cbiAgICBzZWxmLl9kYkluZm8gPSBkYkluZm87XG4gICAgZGJJbmZvLnNlcmlhbGl6ZXIgPSBsb2NhbGZvcmFnZVNlcmlhbGl6ZXI7XG5cbiAgICByZXR1cm4gUHJvbWlzZSQxLnJlc29sdmUoKTtcbn1cblxuLy8gUmVtb3ZlIGFsbCBrZXlzIGZyb20gdGhlIGRhdGFzdG9yZSwgZWZmZWN0aXZlbHkgZGVzdHJveWluZyBhbGwgZGF0YSBpblxuLy8gdGhlIGFwcCdzIGtleS92YWx1ZSBzdG9yZSFcbmZ1bmN0aW9uIGNsZWFyJDIoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHByb21pc2UgPSBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBrZXlQcmVmaXggPSBzZWxmLl9kYkluZm8ua2V5UHJlZml4O1xuXG4gICAgICAgIGZvciAodmFyIGkgPSBsb2NhbFN0b3JhZ2UubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBsb2NhbFN0b3JhZ2Uua2V5KGkpO1xuXG4gICAgICAgICAgICBpZiAoa2V5LmluZGV4T2Yoa2V5UHJlZml4KSA9PT0gMCkge1xuICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIFJldHJpZXZlIGFuIGl0ZW0gZnJvbSB0aGUgc3RvcmUuIFVubGlrZSB0aGUgb3JpZ2luYWwgYXN5bmNfc3RvcmFnZVxuLy8gbGlicmFyeSBpbiBHYWlhLCB3ZSBkb24ndCBtb2RpZnkgcmV0dXJuIHZhbHVlcyBhdCBhbGwuIElmIGEga2V5J3MgdmFsdWVcbi8vIGlzIGB1bmRlZmluZWRgLCB3ZSBwYXNzIHRoYXQgdmFsdWUgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uLlxuZnVuY3Rpb24gZ2V0SXRlbSQyKGtleSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICB2YXIgcmVzdWx0ID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oZGJJbmZvLmtleVByZWZpeCArIGtleSk7XG5cbiAgICAgICAgLy8gSWYgYSByZXN1bHQgd2FzIGZvdW5kLCBwYXJzZSBpdCBmcm9tIHRoZSBzZXJpYWxpemVkXG4gICAgICAgIC8vIHN0cmluZyBpbnRvIGEgSlMgb2JqZWN0LiBJZiByZXN1bHQgaXNuJ3QgdHJ1dGh5LCB0aGUga2V5XG4gICAgICAgIC8vIGlzIGxpa2VseSB1bmRlZmluZWQgYW5kIHdlJ2xsIHBhc3MgaXQgc3RyYWlnaHQgdG8gdGhlXG4gICAgICAgIC8vIGNhbGxiYWNrLlxuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICByZXN1bHQgPSBkYkluZm8uc2VyaWFsaXplci5kZXNlcmlhbGl6ZShyZXN1bHQpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIEl0ZXJhdGUgb3ZlciBhbGwgaXRlbXMgaW4gdGhlIHN0b3JlLlxuZnVuY3Rpb24gaXRlcmF0ZSQyKGl0ZXJhdG9yLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICB2YXIga2V5UHJlZml4ID0gZGJJbmZvLmtleVByZWZpeDtcbiAgICAgICAgdmFyIGtleVByZWZpeExlbmd0aCA9IGtleVByZWZpeC5sZW5ndGg7XG4gICAgICAgIHZhciBsZW5ndGggPSBsb2NhbFN0b3JhZ2UubGVuZ3RoO1xuXG4gICAgICAgIC8vIFdlIHVzZSBhIGRlZGljYXRlZCBpdGVyYXRvciBpbnN0ZWFkIG9mIHRoZSBgaWAgdmFyaWFibGUgYmVsb3dcbiAgICAgICAgLy8gc28gb3RoZXIga2V5cyB3ZSBmZXRjaCBpbiBsb2NhbFN0b3JhZ2UgYXJlbid0IGNvdW50ZWQgaW5cbiAgICAgICAgLy8gdGhlIGBpdGVyYXRpb25OdW1iZXJgIGFyZ3VtZW50IHBhc3NlZCB0byB0aGUgYGl0ZXJhdGUoKWBcbiAgICAgICAgLy8gY2FsbGJhY2suXG4gICAgICAgIC8vXG4gICAgICAgIC8vIFNlZTogZ2l0aHViLmNvbS9tb3ppbGxhL2xvY2FsRm9yYWdlL3B1bGwvNDM1I2Rpc2N1c3Npb25fcjM4MDYxNTMwXG4gICAgICAgIHZhciBpdGVyYXRpb25OdW1iZXIgPSAxO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBrZXkgPSBsb2NhbFN0b3JhZ2Uua2V5KGkpO1xuICAgICAgICAgICAgaWYgKGtleS5pbmRleE9mKGtleVByZWZpeCkgIT09IDApIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKGtleSk7XG5cbiAgICAgICAgICAgIC8vIElmIGEgcmVzdWx0IHdhcyBmb3VuZCwgcGFyc2UgaXQgZnJvbSB0aGUgc2VyaWFsaXplZFxuICAgICAgICAgICAgLy8gc3RyaW5nIGludG8gYSBKUyBvYmplY3QuIElmIHJlc3VsdCBpc24ndCB0cnV0aHksIHRoZVxuICAgICAgICAgICAgLy8ga2V5IGlzIGxpa2VseSB1bmRlZmluZWQgYW5kIHdlJ2xsIHBhc3MgaXQgc3RyYWlnaHRcbiAgICAgICAgICAgIC8vIHRvIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gZGJJbmZvLnNlcmlhbGl6ZXIuZGVzZXJpYWxpemUodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB2YWx1ZSA9IGl0ZXJhdG9yKHZhbHVlLCBrZXkuc3Vic3RyaW5nKGtleVByZWZpeExlbmd0aCksIGl0ZXJhdGlvbk51bWJlcisrKTtcblxuICAgICAgICAgICAgaWYgKHZhbHVlICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIFNhbWUgYXMgbG9jYWxTdG9yYWdlJ3Mga2V5KCkgbWV0aG9kLCBleGNlcHQgdGFrZXMgYSBjYWxsYmFjay5cbmZ1bmN0aW9uIGtleSQyKG4sIGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICB2YXIgcmVzdWx0O1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzdWx0ID0gbG9jYWxTdG9yYWdlLmtleShuKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHJlc3VsdCA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZW1vdmUgdGhlIHByZWZpeCBmcm9tIHRoZSBrZXksIGlmIGEga2V5IGlzIGZvdW5kLlxuICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICByZXN1bHQgPSByZXN1bHQuc3Vic3RyaW5nKGRiSW5mby5rZXlQcmVmaXgubGVuZ3RoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBrZXlzJDIoY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG4gICAgdmFyIHByb21pc2UgPSBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkYkluZm8gPSBzZWxmLl9kYkluZm87XG4gICAgICAgIHZhciBsZW5ndGggPSBsb2NhbFN0b3JhZ2UubGVuZ3RoO1xuICAgICAgICB2YXIga2V5cyA9IFtdO1xuXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIHZhciBpdGVtS2V5ID0gbG9jYWxTdG9yYWdlLmtleShpKTtcbiAgICAgICAgICAgIGlmIChpdGVtS2V5LmluZGV4T2YoZGJJbmZvLmtleVByZWZpeCkgPT09IDApIHtcbiAgICAgICAgICAgICAgICBrZXlzLnB1c2goaXRlbUtleS5zdWJzdHJpbmcoZGJJbmZvLmtleVByZWZpeC5sZW5ndGgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBrZXlzO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuLy8gU3VwcGx5IHRoZSBudW1iZXIgb2Yga2V5cyBpbiB0aGUgZGF0YXN0b3JlIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbmZ1bmN0aW9uIGxlbmd0aCQyKGNhbGxiYWNrKSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcm9taXNlID0gc2VsZi5rZXlzKCkudGhlbihmdW5jdGlvbiAoa2V5cykge1xuICAgICAgICByZXR1cm4ga2V5cy5sZW5ndGg7XG4gICAgfSk7XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG4vLyBSZW1vdmUgYW4gaXRlbSBmcm9tIHRoZSBzdG9yZSwgbmljZSBhbmQgc2ltcGxlLlxuZnVuY3Rpb24gcmVtb3ZlSXRlbSQyKGtleSwgY2FsbGJhY2spIHtcbiAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICBrZXkgPSBub3JtYWxpemVLZXkoa2V5KTtcblxuICAgIHZhciBwcm9taXNlID0gc2VsZi5yZWFkeSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbShkYkluZm8ua2V5UHJlZml4ICsga2V5KTtcbiAgICB9KTtcblxuICAgIGV4ZWN1dGVDYWxsYmFjayhwcm9taXNlLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuIHByb21pc2U7XG59XG5cbi8vIFNldCBhIGtleSdzIHZhbHVlIGFuZCBydW4gYW4gb3B0aW9uYWwgY2FsbGJhY2sgb25jZSB0aGUgdmFsdWUgaXMgc2V0LlxuLy8gVW5saWtlIEdhaWEncyBpbXBsZW1lbnRhdGlvbiwgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGlzIHBhc3NlZCB0aGUgdmFsdWUsXG4vLyBpbiBjYXNlIHlvdSB3YW50IHRvIG9wZXJhdGUgb24gdGhhdCB2YWx1ZSBvbmx5IGFmdGVyIHlvdSdyZSBzdXJlIGl0XG4vLyBzYXZlZCwgb3Igc29tZXRoaW5nIGxpa2UgdGhhdC5cbmZ1bmN0aW9uIHNldEl0ZW0kMihrZXksIHZhbHVlLCBjYWxsYmFjaykge1xuICAgIHZhciBzZWxmID0gdGhpcztcblxuICAgIGtleSA9IG5vcm1hbGl6ZUtleShrZXkpO1xuXG4gICAgdmFyIHByb21pc2UgPSBzZWxmLnJlYWR5KCkudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgIC8vIENvbnZlcnQgdW5kZWZpbmVkIHZhbHVlcyB0byBudWxsLlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9sb2NhbEZvcmFnZS9wdWxsLzQyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBTYXZlIHRoZSBvcmlnaW5hbCB2YWx1ZSB0byBwYXNzIHRvIHRoZSBjYWxsYmFjay5cbiAgICAgICAgdmFyIG9yaWdpbmFsVmFsdWUgPSB2YWx1ZTtcblxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UkMShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgZGJJbmZvID0gc2VsZi5fZGJJbmZvO1xuICAgICAgICAgICAgZGJJbmZvLnNlcmlhbGl6ZXIuc2VyaWFsaXplKHZhbHVlLCBmdW5jdGlvbiAodmFsdWUsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGRiSW5mby5rZXlQcmVmaXggKyBrZXksIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUob3JpZ2luYWxWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvY2FsU3RvcmFnZSBjYXBhY2l0eSBleGNlZWRlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IE1ha2UgdGhpcyBhIHNwZWNpZmljIGVycm9yL2V2ZW50LlxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1F1b3RhRXhjZWVkZWRFcnJvcicgfHwgZS5uYW1lID09PSAnTlNfRVJST1JfRE9NX1FVT1RBX1JFQUNIRUQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gcHJvbWlzZTtcbn1cblxuZnVuY3Rpb24gZHJvcEluc3RhbmNlJDIob3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICBjYWxsYmFjayA9IGdldENhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG5cbiAgICBvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgIT09ICdmdW5jdGlvbicgJiYgb3B0aW9ucyB8fCB7fTtcbiAgICBpZiAoIW9wdGlvbnMubmFtZSkge1xuICAgICAgICB2YXIgY3VycmVudENvbmZpZyA9IHRoaXMuY29uZmlnKCk7XG4gICAgICAgIG9wdGlvbnMubmFtZSA9IG9wdGlvbnMubmFtZSB8fCBjdXJyZW50Q29uZmlnLm5hbWU7XG4gICAgICAgIG9wdGlvbnMuc3RvcmVOYW1lID0gb3B0aW9ucy5zdG9yZU5hbWUgfHwgY3VycmVudENvbmZpZy5zdG9yZU5hbWU7XG4gICAgfVxuXG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBwcm9taXNlO1xuICAgIGlmICghb3B0aW9ucy5uYW1lKSB7XG4gICAgICAgIHByb21pc2UgPSBQcm9taXNlJDEucmVqZWN0KCdJbnZhbGlkIGFyZ3VtZW50cycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHByb21pc2UgPSBuZXcgUHJvbWlzZSQxKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgICBpZiAoIW9wdGlvbnMuc3RvcmVOYW1lKSB7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShvcHRpb25zLm5hbWUgKyAnLycpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKF9nZXRLZXlQcmVmaXgob3B0aW9ucywgc2VsZi5fZGVmYXVsdENvbmZpZykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS50aGVuKGZ1bmN0aW9uIChrZXlQcmVmaXgpIHtcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSBsb2NhbFN0b3JhZ2UubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICB2YXIga2V5ID0gbG9jYWxTdG9yYWdlLmtleShpKTtcblxuICAgICAgICAgICAgICAgIGlmIChrZXkuaW5kZXhPZihrZXlQcmVmaXgpID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBleGVjdXRlQ2FsbGJhY2socHJvbWlzZSwgY2FsbGJhY2spO1xuICAgIHJldHVybiBwcm9taXNlO1xufVxuXG52YXIgbG9jYWxTdG9yYWdlV3JhcHBlciA9IHtcbiAgICBfZHJpdmVyOiAnbG9jYWxTdG9yYWdlV3JhcHBlcicsXG4gICAgX2luaXRTdG9yYWdlOiBfaW5pdFN0b3JhZ2UkMixcbiAgICBfc3VwcG9ydDogaXNMb2NhbFN0b3JhZ2VWYWxpZCgpLFxuICAgIGl0ZXJhdGU6IGl0ZXJhdGUkMixcbiAgICBnZXRJdGVtOiBnZXRJdGVtJDIsXG4gICAgc2V0SXRlbTogc2V0SXRlbSQyLFxuICAgIHJlbW92ZUl0ZW06IHJlbW92ZUl0ZW0kMixcbiAgICBjbGVhcjogY2xlYXIkMixcbiAgICBsZW5ndGg6IGxlbmd0aCQyLFxuICAgIGtleToga2V5JDIsXG4gICAga2V5czoga2V5cyQyLFxuICAgIGRyb3BJbnN0YW5jZTogZHJvcEluc3RhbmNlJDJcbn07XG5cbnZhciBzYW1lVmFsdWUgPSBmdW5jdGlvbiBzYW1lVmFsdWUoeCwgeSkge1xuICAgIHJldHVybiB4ID09PSB5IHx8IHR5cGVvZiB4ID09PSAnbnVtYmVyJyAmJiB0eXBlb2YgeSA9PT0gJ251bWJlcicgJiYgaXNOYU4oeCkgJiYgaXNOYU4oeSk7XG59O1xuXG52YXIgaW5jbHVkZXMgPSBmdW5jdGlvbiBpbmNsdWRlcyhhcnJheSwgc2VhcmNoRWxlbWVudCkge1xuICAgIHZhciBsZW4gPSBhcnJheS5sZW5ndGg7XG4gICAgdmFyIGkgPSAwO1xuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICAgIGlmIChzYW1lVmFsdWUoYXJyYXlbaV0sIHNlYXJjaEVsZW1lbnQpKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBpKys7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xufTtcblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIChhcmcpIHtcbiAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG4vLyBEcml2ZXJzIGFyZSBzdG9yZWQgaGVyZSB3aGVuIGBkZWZpbmVEcml2ZXIoKWAgaXMgY2FsbGVkLlxuLy8gVGhleSBhcmUgc2hhcmVkIGFjcm9zcyBhbGwgaW5zdGFuY2VzIG9mIGxvY2FsRm9yYWdlLlxudmFyIERlZmluZWREcml2ZXJzID0ge307XG5cbnZhciBEcml2ZXJTdXBwb3J0ID0ge307XG5cbnZhciBEZWZhdWx0RHJpdmVycyA9IHtcbiAgICBJTkRFWEVEREI6IGFzeW5jU3RvcmFnZSxcbiAgICBXRUJTUUw6IHdlYlNRTFN0b3JhZ2UsXG4gICAgTE9DQUxTVE9SQUdFOiBsb2NhbFN0b3JhZ2VXcmFwcGVyXG59O1xuXG52YXIgRGVmYXVsdERyaXZlck9yZGVyID0gW0RlZmF1bHREcml2ZXJzLklOREVYRUREQi5fZHJpdmVyLCBEZWZhdWx0RHJpdmVycy5XRUJTUUwuX2RyaXZlciwgRGVmYXVsdERyaXZlcnMuTE9DQUxTVE9SQUdFLl9kcml2ZXJdO1xuXG52YXIgT3B0aW9uYWxEcml2ZXJNZXRob2RzID0gWydkcm9wSW5zdGFuY2UnXTtcblxudmFyIExpYnJhcnlNZXRob2RzID0gWydjbGVhcicsICdnZXRJdGVtJywgJ2l0ZXJhdGUnLCAna2V5JywgJ2tleXMnLCAnbGVuZ3RoJywgJ3JlbW92ZUl0ZW0nLCAnc2V0SXRlbSddLmNvbmNhdChPcHRpb25hbERyaXZlck1ldGhvZHMpO1xuXG52YXIgRGVmYXVsdENvbmZpZyA9IHtcbiAgICBkZXNjcmlwdGlvbjogJycsXG4gICAgZHJpdmVyOiBEZWZhdWx0RHJpdmVyT3JkZXIuc2xpY2UoKSxcbiAgICBuYW1lOiAnbG9jYWxmb3JhZ2UnLFxuICAgIC8vIERlZmF1bHQgREIgc2l6ZSBpcyBfSlVTVCBVTkRFUl8gNU1CLCBhcyBpdCdzIHRoZSBoaWdoZXN0IHNpemVcbiAgICAvLyB3ZSBjYW4gdXNlIHdpdGhvdXQgYSBwcm9tcHQuXG4gICAgc2l6ZTogNDk4MDczNixcbiAgICBzdG9yZU5hbWU6ICdrZXl2YWx1ZXBhaXJzJyxcbiAgICB2ZXJzaW9uOiAxLjBcbn07XG5cbmZ1bmN0aW9uIGNhbGxXaGVuUmVhZHkobG9jYWxGb3JhZ2VJbnN0YW5jZSwgbGlicmFyeU1ldGhvZCkge1xuICAgIGxvY2FsRm9yYWdlSW5zdGFuY2VbbGlicmFyeU1ldGhvZF0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBfYXJncyA9IGFyZ3VtZW50cztcbiAgICAgICAgcmV0dXJuIGxvY2FsRm9yYWdlSW5zdGFuY2UucmVhZHkoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBsb2NhbEZvcmFnZUluc3RhbmNlW2xpYnJhcnlNZXRob2RdLmFwcGx5KGxvY2FsRm9yYWdlSW5zdGFuY2UsIF9hcmdzKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbn1cblxuZnVuY3Rpb24gZXh0ZW5kKCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBhcmcgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgICAgaWYgKGFyZykge1xuICAgICAgICAgICAgZm9yICh2YXIgX2tleSBpbiBhcmcpIHtcbiAgICAgICAgICAgICAgICBpZiAoYXJnLmhhc093blByb3BlcnR5KF9rZXkpKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc0FycmF5KGFyZ1tfa2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3VtZW50c1swXVtfa2V5XSA9IGFyZ1tfa2V5XS5zbGljZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXJndW1lbnRzWzBdW19rZXldID0gYXJnW19rZXldO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFyZ3VtZW50c1swXTtcbn1cblxudmFyIExvY2FsRm9yYWdlID0gZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIExvY2FsRm9yYWdlKG9wdGlvbnMpIHtcbiAgICAgICAgX2NsYXNzQ2FsbENoZWNrKHRoaXMsIExvY2FsRm9yYWdlKTtcblxuICAgICAgICBmb3IgKHZhciBkcml2ZXJUeXBlS2V5IGluIERlZmF1bHREcml2ZXJzKSB7XG4gICAgICAgICAgICBpZiAoRGVmYXVsdERyaXZlcnMuaGFzT3duUHJvcGVydHkoZHJpdmVyVHlwZUtleSkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZHJpdmVyID0gRGVmYXVsdERyaXZlcnNbZHJpdmVyVHlwZUtleV07XG4gICAgICAgICAgICAgICAgdmFyIGRyaXZlck5hbWUgPSBkcml2ZXIuX2RyaXZlcjtcbiAgICAgICAgICAgICAgICB0aGlzW2RyaXZlclR5cGVLZXldID0gZHJpdmVyTmFtZTtcblxuICAgICAgICAgICAgICAgIGlmICghRGVmaW5lZERyaXZlcnNbZHJpdmVyTmFtZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgZG9uJ3QgbmVlZCB0byB3YWl0IGZvciB0aGUgcHJvbWlzZSxcbiAgICAgICAgICAgICAgICAgICAgLy8gc2luY2UgdGhlIGRlZmF1bHQgZHJpdmVycyBjYW4gYmUgZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgICAvLyBpbiBhIGJsb2NraW5nIG1hbm5lclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlZmluZURyaXZlcihkcml2ZXIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2RlZmF1bHRDb25maWcgPSBleHRlbmQoe30sIERlZmF1bHRDb25maWcpO1xuICAgICAgICB0aGlzLl9jb25maWcgPSBleHRlbmQoe30sIHRoaXMuX2RlZmF1bHRDb25maWcsIG9wdGlvbnMpO1xuICAgICAgICB0aGlzLl9kcml2ZXJTZXQgPSBudWxsO1xuICAgICAgICB0aGlzLl9pbml0RHJpdmVyID0gbnVsbDtcbiAgICAgICAgdGhpcy5fcmVhZHkgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fZGJJbmZvID0gbnVsbDtcblxuICAgICAgICB0aGlzLl93cmFwTGlicmFyeU1ldGhvZHNXaXRoUmVhZHkoKTtcbiAgICAgICAgdGhpcy5zZXREcml2ZXIodGhpcy5fY29uZmlnLmRyaXZlcilbXCJjYXRjaFwiXShmdW5jdGlvbiAoKSB7fSk7XG4gICAgfVxuXG4gICAgLy8gU2V0IGFueSBjb25maWcgdmFsdWVzIGZvciBsb2NhbEZvcmFnZTsgY2FuIGJlIGNhbGxlZCBhbnl0aW1lIGJlZm9yZVxuICAgIC8vIHRoZSBmaXJzdCBBUEkgY2FsbCAoZS5nLiBgZ2V0SXRlbWAsIGBzZXRJdGVtYCkuXG4gICAgLy8gV2UgbG9vcCB0aHJvdWdoIG9wdGlvbnMgc28gd2UgZG9uJ3Qgb3ZlcndyaXRlIGV4aXN0aW5nIGNvbmZpZ1xuICAgIC8vIHZhbHVlcy5cblxuXG4gICAgTG9jYWxGb3JhZ2UucHJvdG90eXBlLmNvbmZpZyA9IGZ1bmN0aW9uIGNvbmZpZyhvcHRpb25zKSB7XG4gICAgICAgIC8vIElmIHRoZSBvcHRpb25zIGFyZ3VtZW50IGlzIGFuIG9iamVjdCwgd2UgdXNlIGl0IHRvIHNldCB2YWx1ZXMuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgd2UgcmV0dXJuIGVpdGhlciBhIHNwZWNpZmllZCBjb25maWcgdmFsdWUgb3IgYWxsXG4gICAgICAgIC8vIGNvbmZpZyB2YWx1ZXMuXG4gICAgICAgIGlmICgodHlwZW9mIG9wdGlvbnMgPT09ICd1bmRlZmluZWQnID8gJ3VuZGVmaW5lZCcgOiBfdHlwZW9mKG9wdGlvbnMpKSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIC8vIElmIGxvY2FsZm9yYWdlIGlzIHJlYWR5IGFuZCBmdWxseSBpbml0aWFsaXplZCwgd2UgY2FuJ3Qgc2V0XG4gICAgICAgICAgICAvLyBhbnkgbmV3IGNvbmZpZ3VyYXRpb24gdmFsdWVzLiBJbnN0ZWFkLCB3ZSByZXR1cm4gYW4gZXJyb3IuXG4gICAgICAgICAgICBpZiAodGhpcy5fcmVhZHkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKFwiQ2FuJ3QgY2FsbCBjb25maWcoKSBhZnRlciBsb2NhbGZvcmFnZSBcIiArICdoYXMgYmVlbiB1c2VkLicpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoaSA9PT0gJ3N0b3JlTmFtZScpIHtcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uc1tpXSA9IG9wdGlvbnNbaV0ucmVwbGFjZSgvXFxXL2csICdfJyk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGkgPT09ICd2ZXJzaW9uJyAmJiB0eXBlb2Ygb3B0aW9uc1tpXSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFcnJvcignRGF0YWJhc2UgdmVyc2lvbiBtdXN0IGJlIGEgbnVtYmVyLicpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbmZpZ1tpXSA9IG9wdGlvbnNbaV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIGFmdGVyIGFsbCBjb25maWcgb3B0aW9ucyBhcmUgc2V0IGFuZFxuICAgICAgICAgICAgLy8gdGhlIGRyaXZlciBvcHRpb24gaXMgdXNlZCwgdHJ5IHNldHRpbmcgaXRcbiAgICAgICAgICAgIGlmICgnZHJpdmVyJyBpbiBvcHRpb25zICYmIG9wdGlvbnMuZHJpdmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuc2V0RHJpdmVyKHRoaXMuX2NvbmZpZy5kcml2ZXIpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9jb25maWdbb3B0aW9uc107XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fY29uZmlnO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIC8vIFVzZWQgdG8gZGVmaW5lIGEgY3VzdG9tIGRyaXZlciwgc2hhcmVkIGFjcm9zcyBhbGwgaW5zdGFuY2VzIG9mXG4gICAgLy8gbG9jYWxGb3JhZ2UuXG5cblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5kZWZpbmVEcml2ZXIgPSBmdW5jdGlvbiBkZWZpbmVEcml2ZXIoZHJpdmVyT2JqZWN0LCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaykge1xuICAgICAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlJDEoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB2YXIgZHJpdmVyTmFtZSA9IGRyaXZlck9iamVjdC5fZHJpdmVyO1xuICAgICAgICAgICAgICAgIHZhciBjb21wbGlhbmNlRXJyb3IgPSBuZXcgRXJyb3IoJ0N1c3RvbSBkcml2ZXIgbm90IGNvbXBsaWFudDsgc2VlICcgKyAnaHR0cHM6Ly9tb3ppbGxhLmdpdGh1Yi5pby9sb2NhbEZvcmFnZS8jZGVmaW5lZHJpdmVyJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBBIGRyaXZlciBuYW1lIHNob3VsZCBiZSBkZWZpbmVkIGFuZCBub3Qgb3ZlcmxhcCB3aXRoIHRoZVxuICAgICAgICAgICAgICAgIC8vIGxpYnJhcnktZGVmaW5lZCwgZGVmYXVsdCBkcml2ZXJzLlxuICAgICAgICAgICAgICAgIGlmICghZHJpdmVyT2JqZWN0Ll9kcml2ZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGNvbXBsaWFuY2VFcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgZHJpdmVyTWV0aG9kcyA9IExpYnJhcnlNZXRob2RzLmNvbmNhdCgnX2luaXRTdG9yYWdlJyk7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IGRyaXZlck1ldGhvZHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGRyaXZlck1ldGhvZE5hbWUgPSBkcml2ZXJNZXRob2RzW2ldO1xuXG4gICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gdGhlIHByb3BlcnR5IGlzIHRoZXJlLFxuICAgICAgICAgICAgICAgICAgICAvLyBpdCBzaG91bGQgYmUgYSBtZXRob2QgZXZlbiB3aGVuIG9wdGlvbmFsXG4gICAgICAgICAgICAgICAgICAgIHZhciBpc1JlcXVpcmVkID0gIWluY2x1ZGVzKE9wdGlvbmFsRHJpdmVyTWV0aG9kcywgZHJpdmVyTWV0aG9kTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgoaXNSZXF1aXJlZCB8fCBkcml2ZXJPYmplY3RbZHJpdmVyTWV0aG9kTmFtZV0pICYmIHR5cGVvZiBkcml2ZXJPYmplY3RbZHJpdmVyTWV0aG9kTmFtZV0gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChjb21wbGlhbmNlRXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdmFyIGNvbmZpZ3VyZU1pc3NpbmdNZXRob2RzID0gZnVuY3Rpb24gY29uZmlndXJlTWlzc2luZ01ldGhvZHMoKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBtZXRob2ROb3RJbXBsZW1lbnRlZEZhY3RvcnkgPSBmdW5jdGlvbiBtZXRob2ROb3RJbXBsZW1lbnRlZEZhY3RvcnkobWV0aG9kTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoJ01ldGhvZCAnICsgbWV0aG9kTmFtZSArICcgaXMgbm90IGltcGxlbWVudGVkIGJ5IHRoZSBjdXJyZW50IGRyaXZlcicpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwcm9taXNlID0gUHJvbWlzZSQxLnJlamVjdChlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhlY3V0ZUNhbGxiYWNrKHByb21pc2UsIGFyZ3VtZW50c1thcmd1bWVudHMubGVuZ3RoIC0gMV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfaSA9IDAsIF9sZW4gPSBPcHRpb25hbERyaXZlck1ldGhvZHMubGVuZ3RoOyBfaSA8IF9sZW47IF9pKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBvcHRpb25hbERyaXZlck1ldGhvZCA9IE9wdGlvbmFsRHJpdmVyTWV0aG9kc1tfaV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRyaXZlck9iamVjdFtvcHRpb25hbERyaXZlck1ldGhvZF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJPYmplY3Rbb3B0aW9uYWxEcml2ZXJNZXRob2RdID0gbWV0aG9kTm90SW1wbGVtZW50ZWRGYWN0b3J5KG9wdGlvbmFsRHJpdmVyTWV0aG9kKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBjb25maWd1cmVNaXNzaW5nTWV0aG9kcygpO1xuXG4gICAgICAgICAgICAgICAgdmFyIHNldERyaXZlclN1cHBvcnQgPSBmdW5jdGlvbiBzZXREcml2ZXJTdXBwb3J0KHN1cHBvcnQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKERlZmluZWREcml2ZXJzW2RyaXZlck5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmluZm8oJ1JlZGVmaW5pbmcgTG9jYWxGb3JhZ2UgZHJpdmVyOiAnICsgZHJpdmVyTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgRGVmaW5lZERyaXZlcnNbZHJpdmVyTmFtZV0gPSBkcml2ZXJPYmplY3Q7XG4gICAgICAgICAgICAgICAgICAgIERyaXZlclN1cHBvcnRbZHJpdmVyTmFtZV0gPSBzdXBwb3J0O1xuICAgICAgICAgICAgICAgICAgICAvLyBkb24ndCB1c2UgYSB0aGVuLCBzbyB0aGF0IHdlIGNhbiBkZWZpbmVcbiAgICAgICAgICAgICAgICAgICAgLy8gZHJpdmVycyB0aGF0IGhhdmUgc2ltcGxlIF9zdXBwb3J0IG1ldGhvZHNcbiAgICAgICAgICAgICAgICAgICAgLy8gaW4gYSBibG9ja2luZyBtYW5uZXJcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoJ19zdXBwb3J0JyBpbiBkcml2ZXJPYmplY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRyaXZlck9iamVjdC5fc3VwcG9ydCAmJiB0eXBlb2YgZHJpdmVyT2JqZWN0Ll9zdXBwb3J0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXJPYmplY3QuX3N1cHBvcnQoKS50aGVuKHNldERyaXZlclN1cHBvcnQsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXREcml2ZXJTdXBwb3J0KCEhZHJpdmVyT2JqZWN0Ll9zdXBwb3J0KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHNldERyaXZlclN1cHBvcnQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgZXhlY3V0ZVR3b0NhbGxiYWNrcyhwcm9taXNlLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7XG4gICAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH07XG5cbiAgICBMb2NhbEZvcmFnZS5wcm90b3R5cGUuZHJpdmVyID0gZnVuY3Rpb24gZHJpdmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJpdmVyIHx8IG51bGw7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5nZXREcml2ZXIgPSBmdW5jdGlvbiBnZXREcml2ZXIoZHJpdmVyTmFtZSwgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2spIHtcbiAgICAgICAgdmFyIGdldERyaXZlclByb21pc2UgPSBEZWZpbmVkRHJpdmVyc1tkcml2ZXJOYW1lXSA/IFByb21pc2UkMS5yZXNvbHZlKERlZmluZWREcml2ZXJzW2RyaXZlck5hbWVdKSA6IFByb21pc2UkMS5yZWplY3QobmV3IEVycm9yKCdEcml2ZXIgbm90IGZvdW5kLicpKTtcblxuICAgICAgICBleGVjdXRlVHdvQ2FsbGJhY2tzKGdldERyaXZlclByb21pc2UsIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrKTtcbiAgICAgICAgcmV0dXJuIGdldERyaXZlclByb21pc2U7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5nZXRTZXJpYWxpemVyID0gZnVuY3Rpb24gZ2V0U2VyaWFsaXplcihjYWxsYmFjaykge1xuICAgICAgICB2YXIgc2VyaWFsaXplclByb21pc2UgPSBQcm9taXNlJDEucmVzb2x2ZShsb2NhbGZvcmFnZVNlcmlhbGl6ZXIpO1xuICAgICAgICBleGVjdXRlVHdvQ2FsbGJhY2tzKHNlcmlhbGl6ZXJQcm9taXNlLCBjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVyUHJvbWlzZTtcbiAgICB9O1xuXG4gICAgTG9jYWxGb3JhZ2UucHJvdG90eXBlLnJlYWR5ID0gZnVuY3Rpb24gcmVhZHkoY2FsbGJhY2spIHtcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuXG4gICAgICAgIHZhciBwcm9taXNlID0gc2VsZi5fZHJpdmVyU2V0LnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuX3JlYWR5ID09PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgc2VsZi5fcmVhZHkgPSBzZWxmLl9pbml0RHJpdmVyKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBzZWxmLl9yZWFkeTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZXhlY3V0ZVR3b0NhbGxiYWNrcyhwcm9taXNlLCBjYWxsYmFjaywgY2FsbGJhY2spO1xuICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgTG9jYWxGb3JhZ2UucHJvdG90eXBlLnNldERyaXZlciA9IGZ1bmN0aW9uIHNldERyaXZlcihkcml2ZXJzLCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjaykge1xuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgICAgICAgaWYgKCFpc0FycmF5KGRyaXZlcnMpKSB7XG4gICAgICAgICAgICBkcml2ZXJzID0gW2RyaXZlcnNdO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHN1cHBvcnRlZERyaXZlcnMgPSB0aGlzLl9nZXRTdXBwb3J0ZWREcml2ZXJzKGRyaXZlcnMpO1xuXG4gICAgICAgIGZ1bmN0aW9uIHNldERyaXZlclRvQ29uZmlnKCkge1xuICAgICAgICAgICAgc2VsZi5fY29uZmlnLmRyaXZlciA9IHNlbGYuZHJpdmVyKCk7XG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBleHRlbmRTZWxmV2l0aERyaXZlcihkcml2ZXIpIHtcbiAgICAgICAgICAgIHNlbGYuX2V4dGVuZChkcml2ZXIpO1xuICAgICAgICAgICAgc2V0RHJpdmVyVG9Db25maWcoKTtcblxuICAgICAgICAgICAgc2VsZi5fcmVhZHkgPSBzZWxmLl9pbml0U3RvcmFnZShzZWxmLl9jb25maWcpO1xuICAgICAgICAgICAgcmV0dXJuIHNlbGYuX3JlYWR5O1xuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gaW5pdERyaXZlcihzdXBwb3J0ZWREcml2ZXJzKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBjdXJyZW50RHJpdmVySW5kZXggPSAwO1xuXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gZHJpdmVyUHJvbWlzZUxvb3AoKSB7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlIChjdXJyZW50RHJpdmVySW5kZXggPCBzdXBwb3J0ZWREcml2ZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRyaXZlck5hbWUgPSBzdXBwb3J0ZWREcml2ZXJzW2N1cnJlbnREcml2ZXJJbmRleF07XG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50RHJpdmVySW5kZXgrKztcblxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fZGJJbmZvID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuX3JlYWR5ID0gbnVsbDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0RHJpdmVyKGRyaXZlck5hbWUpLnRoZW4oZXh0ZW5kU2VsZldpdGhEcml2ZXIpW1wiY2F0Y2hcIl0oZHJpdmVyUHJvbWlzZUxvb3ApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgc2V0RHJpdmVyVG9Db25maWcoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdObyBhdmFpbGFibGUgc3RvcmFnZSBtZXRob2QgZm91bmQuJyk7XG4gICAgICAgICAgICAgICAgICAgIHNlbGYuX2RyaXZlclNldCA9IFByb21pc2UkMS5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5fZHJpdmVyU2V0O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiBkcml2ZXJQcm9taXNlTG9vcCgpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZXJlIG1pZ2h0IGJlIGEgZHJpdmVyIGluaXRpYWxpemF0aW9uIGluIHByb2dyZXNzXG4gICAgICAgIC8vIHNvIHdhaXQgZm9yIGl0IHRvIGZpbmlzaCBpbiBvcmRlciB0byBhdm9pZCBhIHBvc3NpYmxlXG4gICAgICAgIC8vIHJhY2UgY29uZGl0aW9uIHRvIHNldCBfZGJJbmZvXG4gICAgICAgIHZhciBvbGREcml2ZXJTZXREb25lID0gdGhpcy5fZHJpdmVyU2V0ICE9PSBudWxsID8gdGhpcy5fZHJpdmVyU2V0W1wiY2F0Y2hcIl0oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UkMS5yZXNvbHZlKCk7XG4gICAgICAgIH0pIDogUHJvbWlzZSQxLnJlc29sdmUoKTtcblxuICAgICAgICB0aGlzLl9kcml2ZXJTZXQgPSBvbGREcml2ZXJTZXREb25lLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgdmFyIGRyaXZlck5hbWUgPSBzdXBwb3J0ZWREcml2ZXJzWzBdO1xuICAgICAgICAgICAgc2VsZi5fZGJJbmZvID0gbnVsbDtcbiAgICAgICAgICAgIHNlbGYuX3JlYWR5ID0gbnVsbDtcblxuICAgICAgICAgICAgcmV0dXJuIHNlbGYuZ2V0RHJpdmVyKGRyaXZlck5hbWUpLnRoZW4oZnVuY3Rpb24gKGRyaXZlcikge1xuICAgICAgICAgICAgICAgIHNlbGYuX2RyaXZlciA9IGRyaXZlci5fZHJpdmVyO1xuICAgICAgICAgICAgICAgIHNldERyaXZlclRvQ29uZmlnKCk7XG4gICAgICAgICAgICAgICAgc2VsZi5fd3JhcExpYnJhcnlNZXRob2RzV2l0aFJlYWR5KCk7XG4gICAgICAgICAgICAgICAgc2VsZi5faW5pdERyaXZlciA9IGluaXREcml2ZXIoc3VwcG9ydGVkRHJpdmVycyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSlbXCJjYXRjaFwiXShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBzZXREcml2ZXJUb0NvbmZpZygpO1xuICAgICAgICAgICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCdObyBhdmFpbGFibGUgc3RvcmFnZSBtZXRob2QgZm91bmQuJyk7XG4gICAgICAgICAgICBzZWxmLl9kcml2ZXJTZXQgPSBQcm9taXNlJDEucmVqZWN0KGVycm9yKTtcbiAgICAgICAgICAgIHJldHVybiBzZWxmLl9kcml2ZXJTZXQ7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGV4ZWN1dGVUd29DYWxsYmFja3ModGhpcy5fZHJpdmVyU2V0LCBjYWxsYmFjaywgZXJyb3JDYWxsYmFjayk7XG4gICAgICAgIHJldHVybiB0aGlzLl9kcml2ZXJTZXQ7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5zdXBwb3J0cyA9IGZ1bmN0aW9uIHN1cHBvcnRzKGRyaXZlck5hbWUpIHtcbiAgICAgICAgcmV0dXJuICEhRHJpdmVyU3VwcG9ydFtkcml2ZXJOYW1lXTtcbiAgICB9O1xuXG4gICAgTG9jYWxGb3JhZ2UucHJvdG90eXBlLl9leHRlbmQgPSBmdW5jdGlvbiBfZXh0ZW5kKGxpYnJhcnlNZXRob2RzQW5kUHJvcGVydGllcykge1xuICAgICAgICBleHRlbmQodGhpcywgbGlicmFyeU1ldGhvZHNBbmRQcm9wZXJ0aWVzKTtcbiAgICB9O1xuXG4gICAgTG9jYWxGb3JhZ2UucHJvdG90eXBlLl9nZXRTdXBwb3J0ZWREcml2ZXJzID0gZnVuY3Rpb24gX2dldFN1cHBvcnRlZERyaXZlcnMoZHJpdmVycykge1xuICAgICAgICB2YXIgc3VwcG9ydGVkRHJpdmVycyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gZHJpdmVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgdmFyIGRyaXZlck5hbWUgPSBkcml2ZXJzW2ldO1xuICAgICAgICAgICAgaWYgKHRoaXMuc3VwcG9ydHMoZHJpdmVyTmFtZSkpIHtcbiAgICAgICAgICAgICAgICBzdXBwb3J0ZWREcml2ZXJzLnB1c2goZHJpdmVyTmFtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN1cHBvcnRlZERyaXZlcnM7XG4gICAgfTtcblxuICAgIExvY2FsRm9yYWdlLnByb3RvdHlwZS5fd3JhcExpYnJhcnlNZXRob2RzV2l0aFJlYWR5ID0gZnVuY3Rpb24gX3dyYXBMaWJyYXJ5TWV0aG9kc1dpdGhSZWFkeSgpIHtcbiAgICAgICAgLy8gQWRkIGEgc3R1YiBmb3IgZWFjaCBkcml2ZXIgQVBJIG1ldGhvZCB0aGF0IGRlbGF5cyB0aGUgY2FsbCB0byB0aGVcbiAgICAgICAgLy8gY29ycmVzcG9uZGluZyBkcml2ZXIgbWV0aG9kIHVudGlsIGxvY2FsRm9yYWdlIGlzIHJlYWR5LiBUaGVzZSBzdHVic1xuICAgICAgICAvLyB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSBkcml2ZXIgbWV0aG9kcyBhcyBzb29uIGFzIHRoZSBkcml2ZXIgaXNcbiAgICAgICAgLy8gbG9hZGVkLCBzbyB0aGVyZSBpcyBubyBwZXJmb3JtYW5jZSBpbXBhY3QuXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBsZW4gPSBMaWJyYXJ5TWV0aG9kcy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgICAgY2FsbFdoZW5SZWFkeSh0aGlzLCBMaWJyYXJ5TWV0aG9kc1tpXSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgTG9jYWxGb3JhZ2UucHJvdG90eXBlLmNyZWF0ZUluc3RhbmNlID0gZnVuY3Rpb24gY3JlYXRlSW5zdGFuY2Uob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gbmV3IExvY2FsRm9yYWdlKG9wdGlvbnMpO1xuICAgIH07XG5cbiAgICByZXR1cm4gTG9jYWxGb3JhZ2U7XG59KCk7XG5cbi8vIFRoZSBhY3R1YWwgbG9jYWxGb3JhZ2Ugb2JqZWN0IHRoYXQgd2UgZXhwb3NlIGFzIGEgbW9kdWxlIG9yIHZpYSBhXG4vLyBnbG9iYWwuIEl0J3MgZXh0ZW5kZWQgYnkgcHVsbGluZyBpbiBvbmUgb2Ygb3VyIG90aGVyIGxpYnJhcmllcy5cblxuXG52YXIgbG9jYWxmb3JhZ2VfanMgPSBuZXcgTG9jYWxGb3JhZ2UoKTtcblxubW9kdWxlLmV4cG9ydHMgPSBsb2NhbGZvcmFnZV9qcztcblxufSx7XCIzXCI6M31dfSx7fSxbNF0pKDQpXG59KTtcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55ICovXG4vKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi9cbmltcG9ydCB7IEV2ZW50LCBFdmVudFByb2Nlc3NvciwgSHViLCBJbnRlZ3JhdGlvbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgZ2V0R2xvYmFsT2JqZWN0LCBsb2dnZXIsIG5vcm1hbGl6ZSwgdXVpZDQgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcbmltcG9ydCBsb2NhbEZvcmFnZSBmcm9tICdsb2NhbGZvcmFnZSc7XG5cbnR5cGUgTG9jYWxGb3JhZ2UgPSB7XG4gIHNldEl0ZW08VD4oa2V5OiBzdHJpbmcsIHZhbHVlOiBULCBjYWxsYmFjaz86IChlcnI6IGFueSwgdmFsdWU6IFQpID0+IHZvaWQpOiBQcm9taXNlPFQ+O1xuICBpdGVyYXRlPFQsIFU+KFxuICAgIGl0ZXJhdGVlOiAodmFsdWU6IFQsIGtleTogc3RyaW5nLCBpdGVyYXRpb25OdW1iZXI6IG51bWJlcikgPT4gVSxcbiAgICBjYWxsYmFjaz86IChlcnI6IGFueSwgcmVzdWx0OiBVKSA9PiB2b2lkLFxuICApOiBQcm9taXNlPFU+O1xuICByZW1vdmVJdGVtKGtleTogc3RyaW5nLCBjYWxsYmFjaz86IChlcnI6IGFueSkgPT4gdm9pZCk6IFByb21pc2U8dm9pZD47XG59O1xuXG4vKipcbiAqIGNhY2hlIG9mZmxpbmUgZXJyb3JzIGFuZCBzZW5kIHdoZW4gY29ubmVjdGVkXG4gKi9cbmV4cG9ydCBjbGFzcyBPZmZsaW5lIGltcGxlbWVudHMgSW50ZWdyYXRpb24ge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaWQ6IHN0cmluZyA9ICdPZmZsaW5lJztcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lOiBzdHJpbmcgPSBPZmZsaW5lLmlkO1xuXG4gIC8qKlxuICAgKiB0aGUgZ2xvYmFsIGluc3RhbmNlXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwdWJsaWMgZ2xvYmFsOiBhbnk7XG5cbiAgLyoqXG4gICAqIHRoZSBjdXJyZW50IGh1YiBpbnN0YW5jZVxuICAgKi9cbiAgcHVibGljIGh1Yj86IEh1YjtcblxuICAvKipcbiAgICogbWF4aW11bSBudW1iZXIgb2YgZXZlbnRzIHRvIHN0b3JlIHdoaWxlIG9mZmxpbmVcbiAgICovXG4gIHB1YmxpYyBtYXhTdG9yZWRFdmVudHM6IG51bWJlcjtcblxuICAvKipcbiAgICogZXZlbnQgY2FjaGVcbiAgICovXG4gIHB1YmxpYyBvZmZsaW5lRXZlbnRTdG9yZTogTG9jYWxGb3JhZ2U7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3Iob3B0aW9uczogeyBtYXhTdG9yZWRFdmVudHM/OiBudW1iZXIgfSA9IHt9KSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICB0aGlzLmdsb2JhbCA9IGdldEdsb2JhbE9iamVjdDxhbnk+KCk7XG4gICAgdGhpcy5tYXhTdG9yZWRFdmVudHMgPSBvcHRpb25zLm1heFN0b3JlZEV2ZW50cyB8fCAzMDsgLy8gc2V0IGEgcmVhc29uYWJsZSBkZWZhdWx0XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgIHRoaXMub2ZmbGluZUV2ZW50U3RvcmUgPSBsb2NhbEZvcmFnZS5jcmVhdGVJbnN0YW5jZSh7XG4gICAgICBuYW1lOiAnc2VudHJ5L29mZmxpbmVFdmVudFN0b3JlJyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldHVwT25jZShhZGRHbG9iYWxFdmVudFByb2Nlc3NvcjogKGNhbGxiYWNrOiBFdmVudFByb2Nlc3NvcikgPT4gdm9pZCwgZ2V0Q3VycmVudEh1YjogKCkgPT4gSHViKTogdm9pZCB7XG4gICAgdGhpcy5odWIgPSBnZXRDdXJyZW50SHViKCk7XG5cbiAgICBpZiAoJ2FkZEV2ZW50TGlzdGVuZXInIGluIHRoaXMuZ2xvYmFsKSB7XG4gICAgICB0aGlzLmdsb2JhbC5hZGRFdmVudExpc3RlbmVyKCdvbmxpbmUnLCAoKSA9PiB7XG4gICAgICAgIHZvaWQgdGhpcy5fc2VuZEV2ZW50cygpLmNhdGNoKCgpID0+IHtcbiAgICAgICAgICBsb2dnZXIud2FybignY291bGQgbm90IHNlbmQgY2FjaGVkIGV2ZW50cycpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yKChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIGlmICh0aGlzLmh1YiAmJiB0aGlzLmh1Yi5nZXRJbnRlZ3JhdGlvbihPZmZsaW5lKSkge1xuICAgICAgICAvLyBjYWNoZSBpZiB3ZSBhcmUgcG9zaXRpdmVseSBvZmZsaW5lXG4gICAgICAgIGlmICgnbmF2aWdhdG9yJyBpbiB0aGlzLmdsb2JhbCAmJiAnb25MaW5lJyBpbiB0aGlzLmdsb2JhbC5uYXZpZ2F0b3IgJiYgIXRoaXMuZ2xvYmFsLm5hdmlnYXRvci5vbkxpbmUpIHtcbiAgICAgICAgICB2b2lkIHRoaXMuX2NhY2hlRXZlbnQoZXZlbnQpXG4gICAgICAgICAgICAudGhlbigoX2V2ZW50OiBFdmVudCk6IFByb21pc2U8dm9pZD4gPT4gdGhpcy5fZW5mb3JjZU1heEV2ZW50cygpKVxuICAgICAgICAgICAgLmNhdGNoKChfZXJyb3IpOiB2b2lkID0+IHtcbiAgICAgICAgICAgICAgbG9nZ2VyLndhcm4oJ2NvdWxkIG5vdCBjYWNoZSBldmVudCB3aGlsZSBvZmZsaW5lJyk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgIC8vIHJldHVybiBudWxsIG9uIHN1Y2Nlc3Mgb3IgZmFpbHVyZSwgYmVjYXVzZSBiZWluZyBvZmZsaW5lIHdpbGwgc3RpbGwgcmVzdWx0IGluIGFuIGVycm9yXG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGV2ZW50O1xuICAgIH0pO1xuXG4gICAgLy8gaWYgb25saW5lIG5vdywgc2VuZCBhbnkgZXZlbnRzIHN0b3JlZCBpbiBhIHByZXZpb3VzIG9mZmxpbmUgc2Vzc2lvblxuICAgIGlmICgnbmF2aWdhdG9yJyBpbiB0aGlzLmdsb2JhbCAmJiAnb25MaW5lJyBpbiB0aGlzLmdsb2JhbC5uYXZpZ2F0b3IgJiYgdGhpcy5nbG9iYWwubmF2aWdhdG9yLm9uTGluZSkge1xuICAgICAgdm9pZCB0aGlzLl9zZW5kRXZlbnRzKCkuY2F0Y2goKCkgPT4ge1xuICAgICAgICBsb2dnZXIud2FybignY291bGQgbm90IHNlbmQgY2FjaGVkIGV2ZW50cycpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIGNhY2hlIGFuIGV2ZW50IHRvIHNlbmQgbGF0ZXJcbiAgICogQHBhcmFtIGV2ZW50IGFuIGV2ZW50XG4gICAqL1xuICBwcml2YXRlIGFzeW5jIF9jYWNoZUV2ZW50KGV2ZW50OiBFdmVudCk6IFByb21pc2U8RXZlbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5vZmZsaW5lRXZlbnRTdG9yZS5zZXRJdGVtPEV2ZW50Pih1dWlkNCgpLCBub3JtYWxpemUoZXZlbnQpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBwdXJnZSBleGNlc3MgZXZlbnRzIGlmIG5lY2Vzc2FyeVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBfZW5mb3JjZU1heEV2ZW50cygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBldmVudHM6IEFycmF5PHsgZXZlbnQ6IEV2ZW50OyBjYWNoZUtleTogc3RyaW5nIH0+ID0gW107XG5cbiAgICByZXR1cm4gdGhpcy5vZmZsaW5lRXZlbnRTdG9yZVxuICAgICAgLml0ZXJhdGU8RXZlbnQsIHZvaWQ+KChldmVudDogRXZlbnQsIGNhY2hlS2V5OiBzdHJpbmcsIF9pbmRleDogbnVtYmVyKTogdm9pZCA9PiB7XG4gICAgICAgIC8vIGFnZ3JlZ2F0ZSBldmVudHNcbiAgICAgICAgZXZlbnRzLnB1c2goeyBjYWNoZUtleSwgZXZlbnQgfSk7XG4gICAgICB9KVxuICAgICAgLnRoZW4oXG4gICAgICAgICgpOiBQcm9taXNlPHZvaWQ+ID0+XG4gICAgICAgICAgLy8gdGhpcyBwcm9taXNlIHJlc29sdmVzIHdoZW4gdGhlIGl0ZXJhdGlvbiBpcyBmaW5pc2hlZFxuICAgICAgICAgIHRoaXMuX3B1cmdlRXZlbnRzKFxuICAgICAgICAgICAgLy8gcHVyZ2UgYWxsIGV2ZW50cyBwYXN0IG1heFN0b3JlZEV2ZW50cyBpbiByZXZlcnNlIGNocm9ub2xvZ2ljYWwgb3JkZXJcbiAgICAgICAgICAgIGV2ZW50c1xuICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gKGIuZXZlbnQudGltZXN0YW1wIHx8IDApIC0gKGEuZXZlbnQudGltZXN0YW1wIHx8IDApKVxuICAgICAgICAgICAgICAuc2xpY2UodGhpcy5tYXhTdG9yZWRFdmVudHMgPCBldmVudHMubGVuZ3RoID8gdGhpcy5tYXhTdG9yZWRFdmVudHMgOiBldmVudHMubGVuZ3RoKVxuICAgICAgICAgICAgICAubWFwKGV2ZW50ID0+IGV2ZW50LmNhY2hlS2V5KSxcbiAgICAgICAgICApLFxuICAgICAgKVxuICAgICAgLmNhdGNoKChfZXJyb3IpOiB2b2lkID0+IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ2NvdWxkIG5vdCBlbmZvcmNlIG1heCBldmVudHMnKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIHB1cmdlIGV2ZW50IGZyb20gY2FjaGVcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgX3B1cmdlRXZlbnQoY2FjaGVLZXk6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLm9mZmxpbmVFdmVudFN0b3JlLnJlbW92ZUl0ZW0oY2FjaGVLZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIHB1cmdlIGV2ZW50cyBmcm9tIGNhY2hlXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIF9wdXJnZUV2ZW50cyhjYWNoZUtleXM6IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgLy8gdHJhaWwgd2l0aCAudGhlbiB0byBlbnN1cmUgdGhlIHJldHVybiB0eXBlIGFzIHZvaWQgYW5kIG5vdCB2b2lkfHZvaWRbXVxuICAgIHJldHVybiBQcm9taXNlLmFsbChjYWNoZUtleXMubWFwKGNhY2hlS2V5ID0+IHRoaXMuX3B1cmdlRXZlbnQoY2FjaGVLZXkpKSkudGhlbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIHNlbmQgYWxsIGV2ZW50c1xuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBfc2VuZEV2ZW50cygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5vZmZsaW5lRXZlbnRTdG9yZS5pdGVyYXRlPEV2ZW50LCB2b2lkPigoZXZlbnQ6IEV2ZW50LCBjYWNoZUtleTogc3RyaW5nLCBfaW5kZXg6IG51bWJlcik6IHZvaWQgPT4ge1xuICAgICAgaWYgKHRoaXMuaHViKSB7XG4gICAgICAgIHRoaXMuaHViLmNhcHR1cmVFdmVudChldmVudCk7XG5cbiAgICAgICAgdm9pZCB0aGlzLl9wdXJnZUV2ZW50KGNhY2hlS2V5KS5jYXRjaCgoX2Vycm9yKTogdm9pZCA9PiB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oJ2NvdWxkIG5vdCBwdXJnZSBldmVudCBmcm9tIGNhY2hlJyk7XG4gICAgICAgIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbG9nZ2VyLndhcm4oJ25vIGh1YiBmb3VuZCAtIGNvdWxkIG5vdCBzZW5kIGNhY2hlZCBldmVudCcpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG4iLCAiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgRXZlbnRQcm9jZXNzb3IsIEh1YiwgSW50ZWdyYXRpb24gfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGdldEdsb2JhbE9iamVjdCwgc3VwcG9ydHNSZXBvcnRpbmdPYnNlcnZlciB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG4vKiogSlNEb2MgKi9cbmludGVyZmFjZSBSZXBvcnQge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIHR5cGU6IFJlcG9ydFR5cGVzO1xuICB1cmw6IHN0cmluZztcbiAgYm9keT86IFJlcG9ydEJvZHk7XG59XG5cbi8qKiBKU0RvYyAqL1xuY29uc3QgZW51bSBSZXBvcnRUeXBlcyB7XG4gIC8qKiBKU0RvYyAqL1xuICBDcmFzaCA9ICdjcmFzaCcsXG4gIC8qKiBKU0RvYyAqL1xuICBEZXByZWNhdGlvbiA9ICdkZXByZWNhdGlvbicsXG4gIC8qKiBKU0RvYyAqL1xuICBJbnRlcnZlbnRpb24gPSAnaW50ZXJ2ZW50aW9uJyxcbn1cblxuLyoqIEpTRG9jICovXG50eXBlIFJlcG9ydEJvZHkgPSBDcmFzaFJlcG9ydEJvZHkgfCBEZXByZWNhdGlvblJlcG9ydEJvZHkgfCBJbnRlcnZlbnRpb25SZXBvcnRCb2R5O1xuXG4vKiogSlNEb2MgKi9cbmludGVyZmFjZSBDcmFzaFJlcG9ydEJvZHkge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIGNyYXNoSWQ6IHN0cmluZztcbiAgcmVhc29uPzogc3RyaW5nO1xufVxuXG4vKiogSlNEb2MgKi9cbmludGVyZmFjZSBEZXByZWNhdGlvblJlcG9ydEJvZHkge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIGlkOiBzdHJpbmc7XG4gIGFudGljaXBhdGVkUmVtb3ZhbD86IERhdGU7XG4gIG1lc3NhZ2U6IHN0cmluZztcbiAgc291cmNlRmlsZT86IHN0cmluZztcbiAgbGluZU51bWJlcj86IG51bWJlcjtcbiAgY29sdW1uTnVtYmVyPzogbnVtYmVyO1xufVxuXG4vKiogSlNEb2MgKi9cbmludGVyZmFjZSBJbnRlcnZlbnRpb25SZXBvcnRCb2R5IHtcbiAgW2tleTogc3RyaW5nXTogYW55O1xuICBpZDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHNvdXJjZUZpbGU/OiBzdHJpbmc7XG4gIGxpbmVOdW1iZXI/OiBudW1iZXI7XG4gIGNvbHVtbk51bWJlcj86IG51bWJlcjtcbn1cblxuLyoqIFJlcG9ydGluZyBBUEkgaW50ZWdyYXRpb24gLSBodHRwczovL3czYy5naXRodWIuaW8vcmVwb3J0aW5nLyAqL1xuZXhwb3J0IGNsYXNzIFJlcG9ydGluZ09ic2VydmVyIGltcGxlbWVudHMgSW50ZWdyYXRpb24ge1xuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaWQ6IHN0cmluZyA9ICdSZXBvcnRpbmdPYnNlcnZlcic7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgbmFtZTogc3RyaW5nID0gUmVwb3J0aW5nT2JzZXJ2ZXIuaWQ7XG5cbiAgLyoqXG4gICAqIFJldHVybnMgY3VycmVudCBodWIuXG4gICAqL1xuICBwcml2YXRlIF9nZXRDdXJyZW50SHViPzogKCkgPT4gSHViO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgX29wdGlvbnM6IHtcbiAgICAgIHR5cGVzPzogUmVwb3J0VHlwZXNbXTtcbiAgICB9ID0ge1xuICAgICAgdHlwZXM6IFtSZXBvcnRUeXBlcy5DcmFzaCwgUmVwb3J0VHlwZXMuRGVwcmVjYXRpb24sIFJlcG9ydFR5cGVzLkludGVydmVudGlvbl0sXG4gICAgfSxcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldHVwT25jZShfOiAoY2FsbGJhY2s6IEV2ZW50UHJvY2Vzc29yKSA9PiB2b2lkLCBnZXRDdXJyZW50SHViOiAoKSA9PiBIdWIpOiB2b2lkIHtcbiAgICBpZiAoIXN1cHBvcnRzUmVwb3J0aW5nT2JzZXJ2ZXIoKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2dldEN1cnJlbnRIdWIgPSBnZXRDdXJyZW50SHViO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IChnZXRHbG9iYWxPYmplY3Q8YW55PigpLlJlcG9ydGluZ09ic2VydmVyKSh0aGlzLmhhbmRsZXIuYmluZCh0aGlzKSwge1xuICAgICAgYnVmZmVyZWQ6IHRydWUsXG4gICAgICB0eXBlczogdGhpcy5fb3B0aW9ucy50eXBlcyxcbiAgICB9KTtcblxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICBvYnNlcnZlci5vYnNlcnZlKCk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBoYW5kbGVyKHJlcG9ydHM6IFJlcG9ydFtdKTogdm9pZCB7XG4gICAgY29uc3QgaHViID0gdGhpcy5fZ2V0Q3VycmVudEh1YiAmJiB0aGlzLl9nZXRDdXJyZW50SHViKCk7XG4gICAgaWYgKCFodWIgfHwgIWh1Yi5nZXRJbnRlZ3JhdGlvbihSZXBvcnRpbmdPYnNlcnZlcikpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCByZXBvcnQgb2YgcmVwb3J0cykge1xuICAgICAgaHViLndpdGhTY29wZShzY29wZSA9PiB7XG4gICAgICAgIHNjb3BlLnNldEV4dHJhKCd1cmwnLCByZXBvcnQudXJsKTtcblxuICAgICAgICBjb25zdCBsYWJlbCA9IGBSZXBvcnRpbmdPYnNlcnZlciBbJHtyZXBvcnQudHlwZX1dYDtcbiAgICAgICAgbGV0IGRldGFpbHMgPSAnTm8gZGV0YWlscyBhdmFpbGFibGUnO1xuXG4gICAgICAgIGlmIChyZXBvcnQuYm9keSkge1xuICAgICAgICAgIC8vIE9iamVjdC5rZXlzIGRvZXNuJ3Qgd29yayBvbiBSZXBvcnRCb2R5LCBhcyBhbGwgcHJvcGVydGllcyBhcmUgaW5oZWlydGVkXG4gICAgICAgICAgY29uc3QgcGxhaW5Cb2R5OiB7XG4gICAgICAgICAgICBba2V5OiBzdHJpbmddOiBhbnk7XG4gICAgICAgICAgfSA9IHt9O1xuXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGd1YXJkLWZvci1pblxuICAgICAgICAgIGZvciAoY29uc3QgcHJvcCBpbiByZXBvcnQuYm9keSkge1xuICAgICAgICAgICAgcGxhaW5Cb2R5W3Byb3BdID0gcmVwb3J0LmJvZHlbcHJvcF07XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgc2NvcGUuc2V0RXh0cmEoJ2JvZHknLCBwbGFpbkJvZHkpO1xuXG4gICAgICAgICAgaWYgKHJlcG9ydC50eXBlID09PSBSZXBvcnRUeXBlcy5DcmFzaCkge1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IHJlcG9ydC5ib2R5IGFzIENyYXNoUmVwb3J0Qm9keTtcbiAgICAgICAgICAgIC8vIEEgZmFuY3kgd2F5IHRvIGNyZWF0ZSBhIG1lc3NhZ2Ugb3V0IG9mIGNyYXNoSWQgT1IgcmVhc29uIE9SIGJvdGggT1IgZmFsbGJhY2tcbiAgICAgICAgICAgIGRldGFpbHMgPSBbYm9keS5jcmFzaElkIHx8ICcnLCBib2R5LnJlYXNvbiB8fCAnJ10uam9pbignICcpLnRyaW0oKSB8fCBkZXRhaWxzO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBib2R5ID0gcmVwb3J0LmJvZHkgYXMgRGVwcmVjYXRpb25SZXBvcnRCb2R5IHwgSW50ZXJ2ZW50aW9uUmVwb3J0Qm9keTtcbiAgICAgICAgICAgIGRldGFpbHMgPSBib2R5Lm1lc3NhZ2UgfHwgZGV0YWlscztcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBodWIuY2FwdHVyZU1lc3NhZ2UoYCR7bGFiZWx9OiAke2RldGFpbHN9YCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiIsICJpbXBvcnQgeyBFdmVudCwgRXZlbnRQcm9jZXNzb3IsIEh1YiwgSW50ZWdyYXRpb24sIFN0YWNrRnJhbWUsIFN0YWNrdHJhY2UgfSBmcm9tICdAc2VudHJ5L3R5cGVzJztcbmltcG9ydCB7IGJhc2VuYW1lLCByZWxhdGl2ZSB9IGZyb20gJ0BzZW50cnkvdXRpbHMnO1xuXG50eXBlIFN0YWNrRnJhbWVJdGVyYXRlZSA9IChmcmFtZTogU3RhY2tGcmFtZSkgPT4gU3RhY2tGcmFtZTtcblxuLyoqIFJld3JpdGUgZXZlbnQgZnJhbWVzIHBhdGhzICovXG5leHBvcnQgY2xhc3MgUmV3cml0ZUZyYW1lcyBpbXBsZW1lbnRzIEludGVncmF0aW9uIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlkOiBzdHJpbmcgPSAnUmV3cml0ZUZyYW1lcyc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgbmFtZTogc3RyaW5nID0gUmV3cml0ZUZyYW1lcy5pZDtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgX3Jvb3Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9wcmVmaXg6IHN0cmluZyA9ICdhcHA6Ly8vJztcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihvcHRpb25zOiB7IHJvb3Q/OiBzdHJpbmc7IHByZWZpeD86IHN0cmluZzsgaXRlcmF0ZWU/OiBTdGFja0ZyYW1lSXRlcmF0ZWUgfSA9IHt9KSB7XG4gICAgaWYgKG9wdGlvbnMucm9vdCkge1xuICAgICAgdGhpcy5fcm9vdCA9IG9wdGlvbnMucm9vdDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMucHJlZml4KSB7XG4gICAgICB0aGlzLl9wcmVmaXggPSBvcHRpb25zLnByZWZpeDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMuaXRlcmF0ZWUpIHtcbiAgICAgIHRoaXMuX2l0ZXJhdGVlID0gb3B0aW9ucy5pdGVyYXRlZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXR1cE9uY2UoYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3I6IChjYWxsYmFjazogRXZlbnRQcm9jZXNzb3IpID0+IHZvaWQsIGdldEN1cnJlbnRIdWI6ICgpID0+IEh1Yik6IHZvaWQge1xuICAgIGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yKGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHNlbGYgPSBnZXRDdXJyZW50SHViKCkuZ2V0SW50ZWdyYXRpb24oUmV3cml0ZUZyYW1lcyk7XG4gICAgICBpZiAoc2VsZikge1xuICAgICAgICByZXR1cm4gc2VsZi5wcm9jZXNzKGV2ZW50KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBldmVudDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwdWJsaWMgcHJvY2VzcyhvcmlnaW5hbEV2ZW50OiBFdmVudCk6IEV2ZW50IHtcbiAgICBsZXQgcHJvY2Vzc2VkRXZlbnQgPSBvcmlnaW5hbEV2ZW50O1xuXG4gICAgaWYgKG9yaWdpbmFsRXZlbnQuZXhjZXB0aW9uICYmIEFycmF5LmlzQXJyYXkob3JpZ2luYWxFdmVudC5leGNlcHRpb24udmFsdWVzKSkge1xuICAgICAgcHJvY2Vzc2VkRXZlbnQgPSB0aGlzLl9wcm9jZXNzRXhjZXB0aW9uc0V2ZW50KHByb2Nlc3NlZEV2ZW50KTtcbiAgICB9XG5cbiAgICBpZiAob3JpZ2luYWxFdmVudC5zdGFja3RyYWNlKSB7XG4gICAgICBwcm9jZXNzZWRFdmVudCA9IHRoaXMuX3Byb2Nlc3NTdGFja3RyYWNlRXZlbnQocHJvY2Vzc2VkRXZlbnQpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9jZXNzZWRFdmVudDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfaXRlcmF0ZWU6IFN0YWNrRnJhbWVJdGVyYXRlZSA9IChmcmFtZTogU3RhY2tGcmFtZSkgPT4ge1xuICAgIGlmICghZnJhbWUuZmlsZW5hbWUpIHtcbiAgICAgIHJldHVybiBmcmFtZTtcbiAgICB9XG4gICAgLy8gQ2hlY2sgaWYgdGhlIGZyYW1lIGZpbGVuYW1lIGJlZ2lucyB3aXRoIGAvYCBvciBhIFdpbmRvd3Mtc3R5bGUgcHJlZml4IHN1Y2ggYXMgYEM6XFxgXG4gICAgY29uc3QgaXNXaW5kb3dzRnJhbWUgPSAvXltBLVpdOlxcXFwvLnRlc3QoZnJhbWUuZmlsZW5hbWUpO1xuICAgIGNvbnN0IHN0YXJ0c1dpdGhTbGFzaCA9IC9eXFwvLy50ZXN0KGZyYW1lLmZpbGVuYW1lKTtcbiAgICBpZiAoaXNXaW5kb3dzRnJhbWUgfHwgc3RhcnRzV2l0aFNsYXNoKSB7XG4gICAgICBjb25zdCBmaWxlbmFtZSA9IGlzV2luZG93c0ZyYW1lXG4gICAgICAgID8gZnJhbWUuZmlsZW5hbWVcbiAgICAgICAgICAgIC5yZXBsYWNlKC9eW0EtWl06LywgJycpIC8vIHJlbW92ZSBXaW5kb3dzLXN0eWxlIHByZWZpeFxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcXFwvZywgJy8nKSAvLyByZXBsYWNlIGFsbCBgXFxcXGAgaW5zdGFuY2VzIHdpdGggYC9gXG4gICAgICAgIDogZnJhbWUuZmlsZW5hbWU7XG4gICAgICBjb25zdCBiYXNlID0gdGhpcy5fcm9vdCA/IHJlbGF0aXZlKHRoaXMuX3Jvb3QsIGZpbGVuYW1lKSA6IGJhc2VuYW1lKGZpbGVuYW1lKTtcbiAgICAgIGZyYW1lLmZpbGVuYW1lID0gYCR7dGhpcy5fcHJlZml4fSR7YmFzZX1gO1xuICAgIH1cbiAgICByZXR1cm4gZnJhbWU7XG4gIH07XG5cbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgX3Byb2Nlc3NFeGNlcHRpb25zRXZlbnQoZXZlbnQ6IEV2ZW50KTogRXZlbnQge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgZXhjZXB0aW9uOiB7XG4gICAgICAgICAgLi4uZXZlbnQuZXhjZXB0aW9uLFxuICAgICAgICAgIC8vIFRoZSBjaGVjayBmb3IgdGhpcyBpcyBwZXJmb3JtZWQgaW5zaWRlIGBwcm9jZXNzYCBjYWxsIGl0c2VsZiwgc2FmZSB0byBza2lwIGhlcmVcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICAgIHZhbHVlczogZXZlbnQuZXhjZXB0aW9uIS52YWx1ZXMhLm1hcCh2YWx1ZSA9PiAoe1xuICAgICAgICAgICAgLi4udmFsdWUsXG4gICAgICAgICAgICBzdGFja3RyYWNlOiB0aGlzLl9wcm9jZXNzU3RhY2t0cmFjZSh2YWx1ZS5zdGFja3RyYWNlKSxcbiAgICAgICAgICB9KSksXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKF9vTykge1xuICAgICAgcmV0dXJuIGV2ZW50O1xuICAgIH1cbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF9wcm9jZXNzU3RhY2t0cmFjZUV2ZW50KGV2ZW50OiBFdmVudCk6IEV2ZW50IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgIHN0YWNrdHJhY2U6IHRoaXMuX3Byb2Nlc3NTdGFja3RyYWNlKGV2ZW50LnN0YWNrdHJhY2UpLFxuICAgICAgfTtcbiAgICB9IGNhdGNoIChfb08pIHtcbiAgICAgIHJldHVybiBldmVudDtcbiAgICB9XG4gIH1cblxuICAvKiogSlNEb2MgKi9cbiAgcHJpdmF0ZSBfcHJvY2Vzc1N0YWNrdHJhY2Uoc3RhY2t0cmFjZT86IFN0YWNrdHJhY2UpOiBTdGFja3RyYWNlIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uc3RhY2t0cmFjZSxcbiAgICAgIGZyYW1lczogc3RhY2t0cmFjZSAmJiBzdGFja3RyYWNlLmZyYW1lcyAmJiBzdGFja3RyYWNlLmZyYW1lcy5tYXAoZiA9PiB0aGlzLl9pdGVyYXRlZShmKSksXG4gICAgfTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEV2ZW50LCBFdmVudFByb2Nlc3NvciwgSHViLCBJbnRlZ3JhdGlvbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuXG4vKiogVGhpcyBmdW5jdGlvbiBhZGRzIGR1cmF0aW9uIHNpbmNlIFNlbnRyeSB3YXMgaW5pdGlhbGl6ZWQgdGlsbCB0aGUgdGltZSBldmVudCB3YXMgc2VudCAqL1xuZXhwb3J0IGNsYXNzIFNlc3Npb25UaW1pbmcgaW1wbGVtZW50cyBJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpZDogc3RyaW5nID0gJ1Nlc3Npb25UaW1pbmcnO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIG5hbWU6IHN0cmluZyA9IFNlc3Npb25UaW1pbmcuaWQ7XG5cbiAgLyoqIEV4YWN0IHRpbWUgQ2xpZW50IHdhcyBpbml0aWFsaXplZCBleHByZXNzZWQgaW4gbWlsbGlzZWNvbmRzIHNpbmNlIFVuaXggRXBvY2guICovXG4gIHByb3RlY3RlZCByZWFkb25seSBfc3RhcnRUaW1lOiBudW1iZXIgPSBEYXRlLm5vdygpO1xuXG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHNldHVwT25jZShhZGRHbG9iYWxFdmVudFByb2Nlc3NvcjogKGNhbGxiYWNrOiBFdmVudFByb2Nlc3NvcikgPT4gdm9pZCwgZ2V0Q3VycmVudEh1YjogKCkgPT4gSHViKTogdm9pZCB7XG4gICAgYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3IoZXZlbnQgPT4ge1xuICAgICAgY29uc3Qgc2VsZiA9IGdldEN1cnJlbnRIdWIoKS5nZXRJbnRlZ3JhdGlvbihTZXNzaW9uVGltaW5nKTtcbiAgICAgIGlmIChzZWxmKSB7XG4gICAgICAgIHJldHVybiBzZWxmLnByb2Nlc3MoZXZlbnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV2ZW50O1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgcHJvY2VzcyhldmVudDogRXZlbnQpOiBFdmVudCB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi5ldmVudCxcbiAgICAgIGV4dHJhOiB7XG4gICAgICAgIC4uLmV2ZW50LmV4dHJhLFxuICAgICAgICBbJ3Nlc3Npb246c3RhcnQnXTogdGhpcy5fc3RhcnRUaW1lLFxuICAgICAgICBbJ3Nlc3Npb246ZHVyYXRpb24nXTogbm93IC0gdGhpcy5fc3RhcnRUaW1lLFxuICAgICAgICBbJ3Nlc3Npb246ZW5kJ106IG5vdyxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxufVxuIiwgImltcG9ydCB7IEV2ZW50LCBFdmVudFByb2Nlc3NvciwgSHViLCBJbnRlZ3JhdGlvbiwgU3RhY2tGcmFtZSB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuXG4vKiogQWRkIG5vZGUgdHJhbnNhY3Rpb24gdG8gdGhlIGV2ZW50ICovXG5leHBvcnQgY2xhc3MgVHJhbnNhY3Rpb24gaW1wbGVtZW50cyBJbnRlZ3JhdGlvbiB7XG4gIC8qKlxuICAgKiBAaW5oZXJpdERvY1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpZDogc3RyaW5nID0gJ1RyYW5zYWN0aW9uJztcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSBUcmFuc2FjdGlvbi5pZDtcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBzZXR1cE9uY2UoYWRkR2xvYmFsRXZlbnRQcm9jZXNzb3I6IChjYWxsYmFjazogRXZlbnRQcm9jZXNzb3IpID0+IHZvaWQsIGdldEN1cnJlbnRIdWI6ICgpID0+IEh1Yik6IHZvaWQge1xuICAgIGFkZEdsb2JhbEV2ZW50UHJvY2Vzc29yKGV2ZW50ID0+IHtcbiAgICAgIGNvbnN0IHNlbGYgPSBnZXRDdXJyZW50SHViKCkuZ2V0SW50ZWdyYXRpb24oVHJhbnNhY3Rpb24pO1xuICAgICAgaWYgKHNlbGYpIHtcbiAgICAgICAgcmV0dXJuIHNlbGYucHJvY2VzcyhldmVudCk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXZlbnQ7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBwcm9jZXNzKGV2ZW50OiBFdmVudCk6IEV2ZW50IHtcbiAgICBjb25zdCBmcmFtZXMgPSB0aGlzLl9nZXRGcmFtZXNGcm9tRXZlbnQoZXZlbnQpO1xuXG4gICAgLy8gdXNlIGZvciBsb29wIHNvIHdlIGRvbid0IGhhdmUgdG8gcmV2ZXJzZSB3aG9sZSBmcmFtZXMgYXJyYXlcbiAgICBmb3IgKGxldCBpID0gZnJhbWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICBjb25zdCBmcmFtZSA9IGZyYW1lc1tpXTtcblxuICAgICAgaWYgKGZyYW1lLmluX2FwcCA9PT0gdHJ1ZSkge1xuICAgICAgICBldmVudC50cmFuc2FjdGlvbiA9IHRoaXMuX2dldFRyYW5zYWN0aW9uKGZyYW1lKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGV2ZW50O1xuICB9XG5cbiAgLyoqIEpTRG9jICovXG4gIHByaXZhdGUgX2dldEZyYW1lc0Zyb21FdmVudChldmVudDogRXZlbnQpOiBTdGFja0ZyYW1lW10ge1xuICAgIGNvbnN0IGV4Y2VwdGlvbiA9IGV2ZW50LmV4Y2VwdGlvbiAmJiBldmVudC5leGNlcHRpb24udmFsdWVzICYmIGV2ZW50LmV4Y2VwdGlvbi52YWx1ZXNbMF07XG4gICAgcmV0dXJuIChleGNlcHRpb24gJiYgZXhjZXB0aW9uLnN0YWNrdHJhY2UgJiYgZXhjZXB0aW9uLnN0YWNrdHJhY2UuZnJhbWVzKSB8fCBbXTtcbiAgfVxuXG4gIC8qKiBKU0RvYyAqL1xuICBwcml2YXRlIF9nZXRUcmFuc2FjdGlvbihmcmFtZTogU3RhY2tGcmFtZSk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGZyYW1lLm1vZHVsZSB8fCBmcmFtZS5mdW5jdGlvbiA/IGAke2ZyYW1lLm1vZHVsZSB8fCAnPyd9LyR7ZnJhbWUuZnVuY3Rpb24gfHwgJz8nfWAgOiAnPHVua25vd24+JztcbiAgfVxufVxuIiwgIi8qIGVzbGludC1kaXNhYmxlIG1heC1saW5lcyAqL1xuLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSAqL1xuaW1wb3J0IHsgRXZlbnRQcm9jZXNzb3IsIEh1YiwgSW50ZWdyYXRpb24sIEludGVncmF0aW9uQ2xhc3MsIFNjb3BlLCBTcGFuLCBUcmFuc2FjdGlvbiB9IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuaW1wb3J0IHsgYmFzZW5hbWUsIGdldEdsb2JhbE9iamVjdCwgbG9nZ2VyLCB0aW1lc3RhbXBXaXRoTXMgfSBmcm9tICdAc2VudHJ5L3V0aWxzJztcblxuLyoqXG4gKiBVc2VkIHRvIGV4dHJhY3QgVHJhY2luZyBpbnRlZ3JhdGlvbiBmcm9tIHRoZSBjdXJyZW50IGNsaWVudCxcbiAqIHdpdGhvdXQgdGhlIG5lZWQgdG8gaW1wb3J0IGBUcmFjaW5nYCBpdHNlbGYgZnJvbSB0aGUgQHNlbnRyeS9hcG0gcGFja2FnZS5cbiAqIEBkZXByZWNhdGVkIGFzIEBzZW50cnkvdHJhY2luZyBzaG91bGQgYmUgdXNlZCBvdmVyIEBzZW50cnkvYXBtLlxuICovXG5jb25zdCBUUkFDSU5HX0dFVFRFUiA9ICh7XG4gIGlkOiAnVHJhY2luZycsXG59IGFzIGFueSkgYXMgSW50ZWdyYXRpb25DbGFzczxJbnRlZ3JhdGlvbj47XG5cbi8qKlxuICogVXNlZCB0byBleHRyYWN0IEJyb3dzZXJUcmFjaW5nIGludGVncmF0aW9uIGZyb20gQHNlbnRyeS90cmFjaW5nXG4gKi9cbmNvbnN0IEJST1dTRVJfVFJBQ0lOR19HRVRURVIgPSAoe1xuICBpZDogJ0Jyb3dzZXJUcmFjaW5nJyxcbn0gYXMgYW55KSBhcyBJbnRlZ3JhdGlvbkNsYXNzPEludGVncmF0aW9uPjtcblxuY29uc3QgVlVFX09QID0gJ3VpLnZ1ZSc7XG5cbi8qKiBHbG9iYWwgVnVlIG9iamVjdCBsaW1pdGVkIHRvIHRoZSBtZXRob2RzL2F0dHJpYnV0ZXMgd2UgcmVxdWlyZSAqL1xuaW50ZXJmYWNlIFZ1ZUluc3RhbmNlIHtcbiAgY29uZmlnOiB7XG4gICAgZXJyb3JIYW5kbGVyPyhlcnJvcjogRXJyb3IsIHZtPzogVmlld01vZGVsLCBpbmZvPzogc3RyaW5nKTogdm9pZDtcbiAgfTtcbiAgdXRpbD86IHtcbiAgICB3YXJuKC4uLmlucHV0OiBhbnkpOiB2b2lkO1xuICB9O1xuICBtaXhpbihob29rczogeyBba2V5OiBzdHJpbmddOiAoKSA9PiB2b2lkIH0pOiB2b2lkO1xufVxuXG4vKiogUmVwcmVzZW50YXRpb24gb2YgVnVlIGNvbXBvbmVudCBpbnRlcm5hbHMgKi9cbmludGVyZmFjZSBWaWV3TW9kZWwge1xuICBba2V5OiBzdHJpbmddOiBhbnk7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvYmFuLXR5cGVzXG4gICRyb290OiBvYmplY3Q7XG4gICRvcHRpb25zOiB7XG4gICAgW2tleTogc3RyaW5nXTogYW55O1xuICAgIG5hbWU/OiBzdHJpbmc7XG4gICAgcHJvcHNEYXRhPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgICBfY29tcG9uZW50VGFnPzogc3RyaW5nO1xuICAgIF9fZmlsZT86IHN0cmluZztcbiAgICAkX3NlbnRyeVBlcmZIb29rPzogYm9vbGVhbjtcbiAgfTtcbiAgJG9uY2UoaG9vazogc3RyaW5nLCBjYjogKCkgPT4gdm9pZCk6IHZvaWQ7XG59XG5cbi8qKiBWdWUgSW50ZWdyYXRpb24gY29uZmlndXJhdGlvbiAqL1xuaW50ZXJmYWNlIEludGVncmF0aW9uT3B0aW9ucyB7XG4gIC8qKiBWdWUgaW5zdGFuY2UgdG8gYmUgdXNlZCBpbnNpZGUgdGhlIGludGVncmF0aW9uICovXG4gIFZ1ZTogVnVlSW5zdGFuY2U7XG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIGBmYWxzZWAsIFNlbnRyeSB3aWxsIHN1cHByZXNzIHJlcG9ydGluZyBvZiBhbGwgcHJvcHMgZGF0YVxuICAgKiBmcm9tIHlvdXIgVnVlIGNvbXBvbmVudHMgZm9yIHByaXZhY3kgY29uY2VybnMuXG4gICAqL1xuICBhdHRhY2hQcm9wczogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFdoZW4gc2V0IHRvIGB0cnVlYCwgb3JpZ2luYWwgVnVlJ3MgYGxvZ0Vycm9yYCB3aWxsIGJlIGNhbGxlZCBhcyB3ZWxsLlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vdnVlanMvdnVlL2Jsb2IvYzJiMWNmZTljY2QwODgzNWYyZDk5ZjZjZTYwZjY3YjRkZTU1MTg3Zi9zcmMvY29yZS91dGlsL2Vycm9yLmpzI0wzOC1MNDhcbiAgICovXG4gIGxvZ0Vycm9yczogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hlbiBzZXQgdG8gYHRydWVgLCBlbmFibGVzIHRyYWNraW5nIG9mIGNvbXBvbmVudHMgbGlmZWN5Y2xlIHBlcmZvcm1hbmNlLlxuICAgKiBJdCByZXF1aXJlcyBgVHJhY2luZ2AgaW50ZWdyYXRpb24gdG8gYmUgYWxzbyBlbmFibGVkLlxuICAgKi9cbiAgdHJhY2luZzogYm9vbGVhbjtcblxuICAvKioge0BsaW5rIFRyYWNpbmdPcHRpb25zfSAqL1xuICB0cmFjaW5nT3B0aW9uczogVHJhY2luZ09wdGlvbnM7XG59XG5cbi8qKiBWdWUgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmb3IgVHJhY2luZyBJbnRlZ3JhdGlvbiAgKi9cbmludGVyZmFjZSBUcmFjaW5nT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBEZWNpZGVzIHdoZXRoZXIgdG8gdHJhY2sgY29tcG9uZW50cyBieSBob29raW5nIGludG8gaXRzIGxpZmVjeWNsZSBtZXRob2RzLlxuICAgKiBDYW4gYmUgZWl0aGVyIHNldCB0byBgYm9vbGVhbmAgdG8gZW5hYmxlL2Rpc2FibGUgdHJhY2tpbmcgZm9yIGFsbCBvZiB0aGVtLlxuICAgKiBPciB0byBhbiBhcnJheSBvZiBzcGVjaWZpYyBjb21wb25lbnQgbmFtZXMgKGNhc2Utc2Vuc2l0aXZlKS5cbiAgICovXG4gIHRyYWNrQ29tcG9uZW50czogYm9vbGVhbiB8IHN0cmluZ1tdO1xuICAvKiogSG93IGxvbmcgdG8gd2FpdCB1bnRpbCB0aGUgdHJhY2tlZCByb290IGFjdGl2aXR5IGlzIG1hcmtlZCBhcyBmaW5pc2hlZCBhbmQgc2VudCBvZiB0byBTZW50cnkgKi9cbiAgdGltZW91dDogbnVtYmVyO1xuICAvKipcbiAgICogTGlzdCBvZiBob29rcyB0byBrZWVwIHRyYWNrIG9mIGR1cmluZyBjb21wb25lbnQgbGlmZWN5Y2xlLlxuICAgKiBBdmFpbGFibGUgaG9va3M6ICdhY3RpdmF0ZScgfCAnY3JlYXRlJyB8ICdkZXN0cm95JyB8ICdtb3VudCcgfCAndXBkYXRlJ1xuICAgKiBCYXNlZCBvbiBodHRwczovL3Z1ZWpzLm9yZy92Mi9hcGkvI09wdGlvbnMtTGlmZWN5Y2xlLUhvb2tzXG4gICAqL1xuICBob29rczogT3BlcmF0aW9uW107XG59XG5cbi8qKiBPcHRpb25hbCBtZXRhZGF0YSBhdHRhY2hlZCB0byBTZW50cnkgRXZlbnQgKi9cbmludGVyZmFjZSBNZXRhZGF0YSB7XG4gIFtrZXk6IHN0cmluZ106IGFueTtcbiAgY29tcG9uZW50TmFtZT86IHN0cmluZztcbiAgcHJvcHNEYXRhPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgbGlmZWN5Y2xlSG9vaz86IHN0cmluZztcbn1cblxuLy8gaHR0cHM6Ly92dWVqcy5vcmcvdjIvYXBpLyNPcHRpb25zLUxpZmVjeWNsZS1Ib29rc1xudHlwZSBIb29rID1cbiAgfCAnYWN0aXZhdGVkJ1xuICB8ICdiZWZvcmVDcmVhdGUnXG4gIHwgJ2JlZm9yZURlc3Ryb3knXG4gIHwgJ2JlZm9yZU1vdW50J1xuICB8ICdiZWZvcmVVcGRhdGUnXG4gIHwgJ2NyZWF0ZWQnXG4gIHwgJ2RlYWN0aXZhdGVkJ1xuICB8ICdkZXN0cm95ZWQnXG4gIHwgJ21vdW50ZWQnXG4gIHwgJ3VwZGF0ZWQnO1xuXG50eXBlIE9wZXJhdGlvbiA9ICdhY3RpdmF0ZScgfCAnY3JlYXRlJyB8ICdkZXN0cm95JyB8ICdtb3VudCcgfCAndXBkYXRlJztcblxuLy8gTWFwcGluZ3MgZnJvbSBvcGVyYXRpb24gdG8gY29ycmVzcG9uZGluZyBsaWZlY3ljbGUgaG9vay5cbmNvbnN0IEhPT0tTOiB7IFtrZXkgaW4gT3BlcmF0aW9uXTogSG9va1tdIH0gPSB7XG4gIGFjdGl2YXRlOiBbJ2FjdGl2YXRlZCcsICdkZWFjdGl2YXRlZCddLFxuICBjcmVhdGU6IFsnYmVmb3JlQ3JlYXRlJywgJ2NyZWF0ZWQnXSxcbiAgZGVzdHJveTogWydiZWZvcmVEZXN0cm95JywgJ2Rlc3Ryb3llZCddLFxuICBtb3VudDogWydiZWZvcmVNb3VudCcsICdtb3VudGVkJ10sXG4gIHVwZGF0ZTogWydiZWZvcmVVcGRhdGUnLCAndXBkYXRlZCddLFxufTtcblxuY29uc3QgQ09NUE9ORU5UX05BTUVfUkVHRVhQID0gLyg/Ol58Wy1fL10pKFxcdykvZztcbmNvbnN0IFJPT1RfQ09NUE9ORU5UX05BTUUgPSAncm9vdCc7XG5jb25zdCBBTk9OWU1PVVNfQ09NUE9ORU5UX05BTUUgPSAnYW5vbnltb3VzIGNvbXBvbmVudCc7XG5cbi8qKiBKU0RvYyAqL1xuZXhwb3J0IGNsYXNzIFZ1ZSBpbXBsZW1lbnRzIEludGVncmF0aW9uIHtcbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGlkOiBzdHJpbmcgPSAnVnVlJztcblxuICAvKipcbiAgICogQGluaGVyaXREb2NcbiAgICovXG4gIHB1YmxpYyBuYW1lOiBzdHJpbmcgPSBWdWUuaWQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfb3B0aW9uczogSW50ZWdyYXRpb25PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBDYWNoZSBob2xkaW5nIGFscmVhZHkgcHJvY2Vzc2VkIGNvbXBvbmVudCBuYW1lc1xuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBfY29tcG9uZW50c0NhY2hlOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG4gIHByaXZhdGUgX3Jvb3RTcGFuPzogU3BhbjtcbiAgcHJpdmF0ZSBfcm9vdFNwYW5UaW1lcj86IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+O1xuICBwcml2YXRlIF90cmFjaW5nQWN0aXZpdHk/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgb3B0aW9uczogUGFydGlhbDxPbWl0PEludGVncmF0aW9uT3B0aW9ucywgJ3RyYWNpbmdPcHRpb25zJz4gJiB7IHRyYWNpbmdPcHRpb25zOiBQYXJ0aWFsPFRyYWNpbmdPcHRpb25zPiB9PixcbiAgKSB7XG4gICAgbG9nZ2VyLmxvZygnWW91IGFyZSBzdGlsbCB1c2luZyB0aGUgVnVlLmpzIGludGVncmF0aW9uLCBjb25zaWRlciBtb3ZpbmcgdG8gQHNlbnRyeS92dWUnKTtcbiAgICB0aGlzLl9vcHRpb25zID0ge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgVnVlOiBnZXRHbG9iYWxPYmplY3Q8YW55PigpLlZ1ZSxcbiAgICAgIGF0dGFjaFByb3BzOiB0cnVlLFxuICAgICAgbG9nRXJyb3JzOiBmYWxzZSxcbiAgICAgIHRyYWNpbmc6IGZhbHNlLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHRyYWNpbmdPcHRpb25zOiB7XG4gICAgICAgIGhvb2tzOiBbJ21vdW50JywgJ3VwZGF0ZSddLFxuICAgICAgICB0aW1lb3V0OiAyMDAwLFxuICAgICAgICB0cmFja0NvbXBvbmVudHM6IGZhbHNlLFxuICAgICAgICAuLi5vcHRpb25zLnRyYWNpbmdPcHRpb25zLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEBpbmhlcml0RG9jXG4gICAqL1xuICBwdWJsaWMgc2V0dXBPbmNlKF86IChjYWxsYmFjazogRXZlbnRQcm9jZXNzb3IpID0+IHZvaWQsIGdldEN1cnJlbnRIdWI6ICgpID0+IEh1Yik6IHZvaWQge1xuICAgIGlmICghdGhpcy5fb3B0aW9ucy5WdWUpIHtcbiAgICAgIGxvZ2dlci5lcnJvcignVnVlIGludGVncmF0aW9uIGlzIG1pc3NpbmcgYSBWdWUgaW5zdGFuY2UnKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLl9hdHRhY2hFcnJvckhhbmRsZXIoZ2V0Q3VycmVudEh1Yik7XG5cbiAgICBpZiAodGhpcy5fb3B0aW9ucy50cmFjaW5nKSB7XG4gICAgICB0aGlzLl9zdGFydFRyYWNpbmcoZ2V0Q3VycmVudEh1Yik7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV4dHJhY3QgY29tcG9uZW50IG5hbWUgZnJvbSB0aGUgVmlld01vZGVsXG4gICAqL1xuICBwcml2YXRlIF9nZXRDb21wb25lbnROYW1lKHZtOiBWaWV3TW9kZWwpOiBzdHJpbmcge1xuICAgIC8vIFN1Y2ggbGV2ZWwgb2YgZ3JhbnVsYXJpdHkgaXMgbW9zdCBsaWtlbHkgbm90IG5lY2Vzc2FyeSwgYnV0IGJldHRlciBzYWZlIHRoYW4gc29ycnkuIFx1MjAxNCBLYW1pbFxuICAgIGlmICghdm0pIHtcbiAgICAgIHJldHVybiBBTk9OWU1PVVNfQ09NUE9ORU5UX05BTUU7XG4gICAgfVxuXG4gICAgaWYgKHZtLiRyb290ID09PSB2bSkge1xuICAgICAgcmV0dXJuIFJPT1RfQ09NUE9ORU5UX05BTUU7XG4gICAgfVxuXG4gICAgaWYgKCF2bS4kb3B0aW9ucykge1xuICAgICAgcmV0dXJuIEFOT05ZTU9VU19DT01QT05FTlRfTkFNRTtcbiAgICB9XG5cbiAgICBpZiAodm0uJG9wdGlvbnMubmFtZSkge1xuICAgICAgcmV0dXJuIHZtLiRvcHRpb25zLm5hbWU7XG4gICAgfVxuXG4gICAgaWYgKHZtLiRvcHRpb25zLl9jb21wb25lbnRUYWcpIHtcbiAgICAgIHJldHVybiB2bS4kb3B0aW9ucy5fY29tcG9uZW50VGFnO1xuICAgIH1cblxuICAgIC8vIGluamVjdGVkIGJ5IHZ1ZS1sb2FkZXJcbiAgICBpZiAodm0uJG9wdGlvbnMuX19maWxlKSB7XG4gICAgICBjb25zdCB1bmlmaWVkRmlsZSA9IHZtLiRvcHRpb25zLl9fZmlsZS5yZXBsYWNlKC9eW2EtekEtWl06LywgJycpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgIGNvbnN0IGZpbGVuYW1lID0gYmFzZW5hbWUodW5pZmllZEZpbGUsICcudnVlJyk7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLl9jb21wb25lbnRzQ2FjaGVbZmlsZW5hbWVdIHx8XG4gICAgICAgICh0aGlzLl9jb21wb25lbnRzQ2FjaGVbZmlsZW5hbWVdID0gZmlsZW5hbWUucmVwbGFjZShDT01QT05FTlRfTkFNRV9SRUdFWFAsIChfLCBjOiBzdHJpbmcpID0+XG4gICAgICAgICAgYyA/IGMudG9VcHBlckNhc2UoKSA6ICcnLFxuICAgICAgICApKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQU5PTllNT1VTX0NPTVBPTkVOVF9OQU1FO1xuICB9XG5cbiAgLyoqIEtlZXAgaXQgYXMgYXR0cmlidXRlIGZ1bmN0aW9uLCB0byBrZWVwIGNvcnJlY3QgYHRoaXNgIGJpbmRpbmcgaW5zaWRlIHRoZSBob29rcyBjYWxsYmFja3MgICovXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvdHlwZWRlZlxuICBwcml2YXRlIHJlYWRvbmx5IF9hcHBseVRyYWNpbmdIb29rcyA9ICh2bTogVmlld01vZGVsLCBnZXRDdXJyZW50SHViOiAoKSA9PiBIdWIpOiB2b2lkID0+IHtcbiAgICAvLyBEb24ndCBhdHRhY2ggdHdpY2UsIGp1c3QgaW4gY2FzZVxuICAgIGlmICh2bS4kb3B0aW9ucy4kX3NlbnRyeVBlcmZIb29rKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZtLiRvcHRpb25zLiRfc2VudHJ5UGVyZkhvb2sgPSB0cnVlO1xuXG4gICAgY29uc3QgbmFtZSA9IHRoaXMuX2dldENvbXBvbmVudE5hbWUodm0pO1xuICAgIGNvbnN0IHJvb3RNb3VudCA9IG5hbWUgPT09IFJPT1RfQ09NUE9ORU5UX05BTUU7XG4gICAgY29uc3Qgc3BhbnM6IHsgW2tleTogc3RyaW5nXTogU3BhbiB9ID0ge307XG5cbiAgICAvLyBSZW5kZXIgaG9vayBzdGFydHMgYWZ0ZXIgb25jZSBldmVudCBpcyBlbWl0dGVkLFxuICAgIC8vIGJ1dCBpdCBlbmRzIGJlZm9yZSB0aGUgc2Vjb25kIGV2ZW50IG9mIHRoZSBzYW1lIHR5cGUuXG4gICAgLy9cbiAgICAvLyBCZWNhdXNlIG9mIHRoaXMsIHdlIHN0YXJ0IG1lYXN1cmluZyBpbnNpZGUgdGhlIGZpcnN0IGV2ZW50LFxuICAgIC8vIGJ1dCBmaW5pc2ggaXQgYmVmb3JlIGl0IHRyaWdnZXJzLCB0byBza2lwIHRoZSBldmVudCBlbWl0dGVyIHRpbWluZyBpdHNlbGYuXG4gICAgY29uc3Qgcm9vdEhhbmRsZXIgPSAoaG9vazogSG9vayk6IHZvaWQgPT4ge1xuICAgICAgY29uc3Qgbm93ID0gdGltZXN0YW1wV2l0aE1zKCk7XG5cbiAgICAgIC8vIE9uIHRoZSBmaXJzdCBoYW5kbGVyIGNhbGwgKGJlZm9yZSksIGl0J2xsIGJlIHVuZGVmaW5lZCwgYXMgYCRvbmNlYCB3aWxsIGFkZCBpdCBpbiB0aGUgZnV0dXJlLlxuICAgICAgLy8gSG93ZXZlciwgb24gdGhlIHNlY29uZCBjYWxsIChhZnRlciksIGl0J2xsIGJlIGFscmVhZHkgaW4gcGxhY2UuXG4gICAgICBpZiAodGhpcy5fcm9vdFNwYW4pIHtcbiAgICAgICAgdGhpcy5fZmluaXNoUm9vdFNwYW4obm93LCBnZXRDdXJyZW50SHViKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZtLiRvbmNlKGBob29rOiR7aG9va31gLCAoKSA9PiB7XG4gICAgICAgICAgLy8gQ3JlYXRlIGFuIGFjdGl2aXR5IG9uIHRoZSBmaXJzdCBldmVudCBjYWxsLiBUaGVyZSdsbCBiZSBubyBzZWNvbmQgY2FsbCwgYXMgcm9vdFNwYW4gd2lsbCBiZSBpbiBwbGFjZSxcbiAgICAgICAgICAvLyB0aHVzIG5ldyBldmVudCBoYW5kbGVyIHdvbid0IGJlIGF0dGFjaGVkLlxuXG4gICAgICAgICAgLy8gV2UgZG8gdGhpcyB3aG9sZSBkYW5jZSB3aXRoIGBUUkFDSU5HX0dFVFRFUmAgdG8gcHJldmVudCBgQHNlbnRyeS9hcG1gIGZyb20gYmVjb21pbmcgYSBwZWVyRGVwZW5kZW5jeS5cbiAgICAgICAgICAvLyBXZSBhbHNvIG5lZWQgdG8gYXNrIGZvciB0aGUgYC5jb25zdHJ1Y3RvcmAsIGFzIGBwdXNoQWN0aXZpdHlgIGFuZCBgcG9wQWN0aXZpdHlgIGFyZSBzdGF0aWMsIG5vdCBpbnN0YW5jZSBtZXRob2RzLlxuICAgICAgICAgIC8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2VzcyAqL1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICAgIGNvbnN0IHRyYWNpbmdJbnRlZ3JhdGlvbiA9IGdldEN1cnJlbnRIdWIoKS5nZXRJbnRlZ3JhdGlvbihUUkFDSU5HX0dFVFRFUik7XG4gICAgICAgICAgaWYgKHRyYWNpbmdJbnRlZ3JhdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fdHJhY2luZ0FjdGl2aXR5ID0gKHRyYWNpbmdJbnRlZ3JhdGlvbiBhcyBhbnkpLmNvbnN0cnVjdG9yLnB1c2hBY3Rpdml0eSgnVnVlIEFwcGxpY2F0aW9uIFJlbmRlcicpO1xuICAgICAgICAgICAgY29uc3QgdHJhbnNhY3Rpb24gPSAodHJhY2luZ0ludGVncmF0aW9uIGFzIGFueSkuY29uc3RydWN0b3IuZ2V0VHJhbnNhY3Rpb24oKTtcbiAgICAgICAgICAgIGlmICh0cmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICB0aGlzLl9yb290U3BhbiA9IHRyYW5zYWN0aW9uLnN0YXJ0Q2hpbGQoe1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQXBwbGljYXRpb24gUmVuZGVyJyxcbiAgICAgICAgICAgICAgICBvcDogVlVFX09QLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIFVzZSBmdW5jdGlvbmFsaXR5IGZyb20gQHNlbnRyeS90cmFjaW5nXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGFjdGl2ZVRyYW5zYWN0aW9uID0gZ2V0QWN0aXZlVHJhbnNhY3Rpb24oZ2V0Q3VycmVudEh1YigpKTtcbiAgICAgICAgICAgIGlmIChhY3RpdmVUcmFuc2FjdGlvbikge1xuICAgICAgICAgICAgICB0aGlzLl9yb290U3BhbiA9IGFjdGl2ZVRyYW5zYWN0aW9uLnN0YXJ0Q2hpbGQoe1xuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnQXBwbGljYXRpb24gUmVuZGVyJyxcbiAgICAgICAgICAgICAgICBvcDogVlVFX09QLFxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLyogZXNsaW50LWVuYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3MgKi9cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNoaWxkSGFuZGxlciA9IChob29rOiBIb29rLCBvcGVyYXRpb246IE9wZXJhdGlvbik6IHZvaWQgPT4ge1xuICAgICAgLy8gU2tpcCBjb21wb25lbnRzIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byB0cmFjayB0byBtaW5pbWl6ZSB0aGUgbm9pc2UgYW5kIGdpdmUgYSBtb3JlIGdyYW51bGFyIGNvbnRyb2wgdG8gdGhlIHVzZXJcbiAgICAgIGNvbnN0IHNob3VsZFRyYWNrID0gQXJyYXkuaXNBcnJheSh0aGlzLl9vcHRpb25zLnRyYWNpbmdPcHRpb25zLnRyYWNrQ29tcG9uZW50cylcbiAgICAgICAgPyB0aGlzLl9vcHRpb25zLnRyYWNpbmdPcHRpb25zLnRyYWNrQ29tcG9uZW50cy5pbmRleE9mKG5hbWUpID4gLTFcbiAgICAgICAgOiB0aGlzLl9vcHRpb25zLnRyYWNpbmdPcHRpb25zLnRyYWNrQ29tcG9uZW50cztcblxuICAgICAgaWYgKCF0aGlzLl9yb290U3BhbiB8fCAhc2hvdWxkVHJhY2spIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBub3cgPSB0aW1lc3RhbXBXaXRoTXMoKTtcbiAgICAgIGNvbnN0IHNwYW4gPSBzcGFuc1tvcGVyYXRpb25dO1xuXG4gICAgICAvLyBPbiB0aGUgZmlyc3QgaGFuZGxlciBjYWxsIChiZWZvcmUpLCBpdCdsbCBiZSB1bmRlZmluZWQsIGFzIGAkb25jZWAgd2lsbCBhZGQgaXQgaW4gdGhlIGZ1dHVyZS5cbiAgICAgIC8vIEhvd2V2ZXIsIG9uIHRoZSBzZWNvbmQgY2FsbCAoYWZ0ZXIpLCBpdCdsbCBiZSBhbHJlYWR5IGluIHBsYWNlLlxuICAgICAgaWYgKHNwYW4pIHtcbiAgICAgICAgc3Bhbi5maW5pc2goKTtcbiAgICAgICAgdGhpcy5fZmluaXNoUm9vdFNwYW4obm93LCBnZXRDdXJyZW50SHViKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZtLiRvbmNlKGBob29rOiR7aG9va31gLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX3Jvb3RTcGFuKSB7XG4gICAgICAgICAgICBzcGFuc1tvcGVyYXRpb25dID0gdGhpcy5fcm9vdFNwYW4uc3RhcnRDaGlsZCh7XG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgVnVlIDwke25hbWV9PmAsXG4gICAgICAgICAgICAgIG9wOiBgJHtWVUVfT1B9LiR7b3BlcmF0aW9ufWAsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG5cbiAgICAvLyBFYWNoIGNvbXBvbmVudCBoYXMgaXQncyBvd24gc2NvcGUsIHNvIGFsbCBhY3Rpdml0aWVzIGFyZSBvbmx5IHJlbGF0ZWQgdG8gb25lIG9mIHRoZW1cbiAgICB0aGlzLl9vcHRpb25zLnRyYWNpbmdPcHRpb25zLmhvb2tzLmZvckVhY2gob3BlcmF0aW9uID0+IHtcbiAgICAgIC8vIFJldHJpZXZlIGNvcnJlc3BvbmRpbmcgaG9va3MgZnJvbSBWdWUgbGlmZWN5Y2xlLlxuICAgICAgLy8gZWcuIG1vdW50ID0+IFsnYmVmb3JlTW91bnQnLCAnbW91bnRlZCddXG4gICAgICBjb25zdCBpbnRlcm5hbEhvb2tzID0gSE9PS1Nbb3BlcmF0aW9uXTtcblxuICAgICAgaWYgKCFpbnRlcm5hbEhvb2tzKSB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBVbmtub3duIGhvb2s6ICR7b3BlcmF0aW9ufWApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGludGVybmFsSG9va3MuZm9yRWFjaChpbnRlcm5hbEhvb2sgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVyID0gcm9vdE1vdW50XG4gICAgICAgICAgPyByb290SGFuZGxlci5iaW5kKHRoaXMsIGludGVybmFsSG9vaylcbiAgICAgICAgICA6IGNoaWxkSGFuZGxlci5iaW5kKHRoaXMsIGludGVybmFsSG9vaywgb3BlcmF0aW9uKTtcbiAgICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdm0uJG9wdGlvbnNbaW50ZXJuYWxIb29rXTtcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjdXJyZW50VmFsdWUpKSB7XG4gICAgICAgICAgdm0uJG9wdGlvbnNbaW50ZXJuYWxIb29rXSA9IFtoYW5kbGVyLCAuLi5jdXJyZW50VmFsdWVdO1xuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBjdXJyZW50VmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2bS4kb3B0aW9uc1tpbnRlcm5hbEhvb2tdID0gW2hhbmRsZXIsIGN1cnJlbnRWYWx1ZV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdm0uJG9wdGlvbnNbaW50ZXJuYWxIb29rXSA9IFtoYW5kbGVyXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG5cbiAgLyoqIEZpbmlzaCB0b3AtbGV2ZWwgc3BhbiBhbmQgYWN0aXZpdHkgd2l0aCBhIGRlYm91bmNlIGNvbmZpZ3VyZWQgdXNpbmcgYHRpbWVvdXRgIG9wdGlvbiAqL1xuICBwcml2YXRlIF9maW5pc2hSb290U3Bhbih0aW1lc3RhbXA6IG51bWJlciwgZ2V0Q3VycmVudEh1YjogKCkgPT4gSHViKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuX3Jvb3RTcGFuVGltZXIpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9yb290U3BhblRpbWVyKTtcbiAgICB9XG5cbiAgICB0aGlzLl9yb290U3BhblRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fdHJhY2luZ0FjdGl2aXR5KSB7XG4gICAgICAgIC8vIFdlIGRvIHRoaXMgd2hvbGUgZGFuY2Ugd2l0aCBgVFJBQ0lOR19HRVRURVJgIHRvIHByZXZlbnQgYEBzZW50cnkvYXBtYCBmcm9tIGJlY29taW5nIGEgcGVlckRlcGVuZGVuY3kuXG4gICAgICAgIC8vIFdlIGFsc28gbmVlZCB0byBhc2sgZm9yIHRoZSBgLmNvbnN0cnVjdG9yYCwgYXMgYHB1c2hBY3Rpdml0eWAgYW5kIGBwb3BBY3Rpdml0eWAgYXJlIHN0YXRpYywgbm90IGluc3RhbmNlIG1ldGhvZHMuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBkZXByZWNhdGlvbi9kZXByZWNhdGlvblxuICAgICAgICBjb25zdCB0cmFjaW5nSW50ZWdyYXRpb24gPSBnZXRDdXJyZW50SHViKCkuZ2V0SW50ZWdyYXRpb24oVFJBQ0lOR19HRVRURVIpO1xuICAgICAgICBpZiAodHJhY2luZ0ludGVncmF0aW9uKSB7XG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICAgICh0cmFjaW5nSW50ZWdyYXRpb24gYXMgYW55KS5jb25zdHJ1Y3Rvci5wb3BBY3Rpdml0eSh0aGlzLl90cmFjaW5nQWN0aXZpdHkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFdlIHNob3VsZCBhbHdheXMgZmluaXNoIHRoZSBzcGFuLCBvbmx5IHNob3VsZCBwb3AgYWN0aXZpdHkgaWYgdXNpbmcgQHNlbnRyeS9hcG1cbiAgICAgIGlmICh0aGlzLl9yb290U3Bhbikge1xuICAgICAgICB0aGlzLl9yb290U3Bhbi5maW5pc2godGltZXN0YW1wKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLl9vcHRpb25zLnRyYWNpbmdPcHRpb25zLnRpbWVvdXQpO1xuICB9XG5cbiAgLyoqIEluamVjdCBjb25maWd1cmVkIHRyYWNpbmcgaG9va3MgaW50byBWdWUncyBjb21wb25lbnQgbGlmZWN5Y2xlcyAqL1xuICBwcml2YXRlIF9zdGFydFRyYWNpbmcoZ2V0Q3VycmVudEh1YjogKCkgPT4gSHViKTogdm9pZCB7XG4gICAgY29uc3QgYXBwbHlUcmFjaW5nSG9va3MgPSB0aGlzLl9hcHBseVRyYWNpbmdIb29rcztcblxuICAgIHRoaXMuX29wdGlvbnMuVnVlLm1peGluKHtcbiAgICAgIGJlZm9yZUNyZWF0ZSh0aGlzOiBWaWV3TW9kZWwpOiB2b2lkIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGRlcHJlY2F0aW9uL2RlcHJlY2F0aW9uXG4gICAgICAgIGlmIChnZXRDdXJyZW50SHViKCkuZ2V0SW50ZWdyYXRpb24oVFJBQ0lOR19HRVRURVIpIHx8IGdldEN1cnJlbnRIdWIoKS5nZXRJbnRlZ3JhdGlvbihCUk9XU0VSX1RSQUNJTkdfR0VUVEVSKSkge1xuICAgICAgICAgIC8vIGB0aGlzYCBwb2ludHMgdG8gY3VycmVudGx5IHJlbmRlcmVkIGNvbXBvbmVudFxuICAgICAgICAgIGFwcGx5VHJhY2luZ0hvb2tzKHRoaXMsIGdldEN1cnJlbnRIdWIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGxvZ2dlci5lcnJvcignVnVlIGludGVncmF0aW9uIGhhcyB0cmFjaW5nIGVuYWJsZWQsIGJ1dCBUcmFjaW5nIGludGVncmF0aW9uIGlzIG5vdCBjb25maWd1cmVkJyk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICAvKiogSW5qZWN0IFNlbnRyeSdzIGhhbmRsZXIgaW50byBvd25zIFZ1ZSdzIGVycm9yIGhhbmRsZXIgICovXG4gIHByaXZhdGUgX2F0dGFjaEVycm9ySGFuZGxlcihnZXRDdXJyZW50SHViOiAoKSA9PiBIdWIpOiB2b2lkIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L3VuYm91bmQtbWV0aG9kXG4gICAgY29uc3QgY3VycmVudEVycm9ySGFuZGxlciA9IHRoaXMuX29wdGlvbnMuVnVlLmNvbmZpZy5lcnJvckhhbmRsZXI7XG5cbiAgICB0aGlzLl9vcHRpb25zLlZ1ZS5jb25maWcuZXJyb3JIYW5kbGVyID0gKGVycm9yOiBFcnJvciwgdm0/OiBWaWV3TW9kZWwsIGluZm8/OiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgICAgIGNvbnN0IG1ldGFkYXRhOiBNZXRhZGF0YSA9IHt9O1xuXG4gICAgICBpZiAodm0pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtZXRhZGF0YS5jb21wb25lbnROYW1lID0gdGhpcy5fZ2V0Q29tcG9uZW50TmFtZSh2bSk7XG5cbiAgICAgICAgICBpZiAodGhpcy5fb3B0aW9ucy5hdHRhY2hQcm9wcykge1xuICAgICAgICAgICAgbWV0YWRhdGEucHJvcHNEYXRhID0gdm0uJG9wdGlvbnMucHJvcHNEYXRhO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoX29PKSB7XG4gICAgICAgICAgbG9nZ2VyLndhcm4oJ1VuYWJsZSB0byBleHRyYWN0IG1ldGFkYXRhIGZyb20gVnVlIGNvbXBvbmVudC4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaW5mbykge1xuICAgICAgICBtZXRhZGF0YS5saWZlY3ljbGVIb29rID0gaW5mbztcbiAgICAgIH1cblxuICAgICAgaWYgKGdldEN1cnJlbnRIdWIoKS5nZXRJbnRlZ3JhdGlvbihWdWUpKSB7XG4gICAgICAgIC8vIENhcHR1cmUgZXhjZXB0aW9uIGluIHRoZSBuZXh0IGV2ZW50IGxvb3AsIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbCBicmVhZGNydW1icyBhcmUgcmVjb3JkZWQgaW4gdGltZS5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgZ2V0Q3VycmVudEh1YigpLndpdGhTY29wZShzY29wZSA9PiB7XG4gICAgICAgICAgICBzY29wZS5zZXRDb250ZXh0KCd2dWUnLCBtZXRhZGF0YSk7XG4gICAgICAgICAgICBnZXRDdXJyZW50SHViKCkuY2FwdHVyZUV4Y2VwdGlvbihlcnJvcik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGN1cnJlbnRFcnJvckhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgY3VycmVudEVycm9ySGFuZGxlci5jYWxsKHRoaXMuX29wdGlvbnMuVnVlLCBlcnJvciwgdm0sIGluZm8pO1xuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fb3B0aW9ucy5sb2dFcnJvcnMpIHtcbiAgICAgICAgaWYgKHRoaXMuX29wdGlvbnMuVnVlLnV0aWwpIHtcbiAgICAgICAgICB0aGlzLl9vcHRpb25zLlZ1ZS51dGlsLndhcm4oYEVycm9yIGluICR7aW5mb306IFwiJHtlcnJvciAmJiBlcnJvci50b1N0cmluZygpfVwiYCwgdm0pO1xuICAgICAgICB9XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cblxuaW50ZXJmYWNlIEh1YlR5cGUgZXh0ZW5kcyBIdWIge1xuICBnZXRTY29wZT8oKTogU2NvcGUgfCB1bmRlZmluZWQ7XG59XG5cbi8qKiBHcmFicyBhY3RpdmUgdHJhbnNhY3Rpb24gb2ZmIHNjb3BlICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aXZlVHJhbnNhY3Rpb248VCBleHRlbmRzIFRyYW5zYWN0aW9uPihodWI6IEh1YlR5cGUpOiBUIHwgdW5kZWZpbmVkIHtcbiAgaWYgKGh1YiAmJiBodWIuZ2V0U2NvcGUpIHtcbiAgICBjb25zdCBzY29wZSA9IGh1Yi5nZXRTY29wZSgpIGFzIFNjb3BlO1xuICAgIGlmIChzY29wZSkge1xuICAgICAgcmV0dXJuIHNjb3BlLmdldFRyYW5zYWN0aW9uKCkgYXMgVCB8IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuIiwgImV4cG9ydCB7IEFuZ3VsYXIgfSBmcm9tICcuL2FuZ3VsYXInO1xuZXhwb3J0IHsgQ2FwdHVyZUNvbnNvbGUgfSBmcm9tICcuL2NhcHR1cmVjb25zb2xlJztcbmV4cG9ydCB7IERlYnVnIH0gZnJvbSAnLi9kZWJ1Zyc7XG5leHBvcnQgeyBEZWR1cGUgfSBmcm9tICcuL2RlZHVwZSc7XG5leHBvcnQgeyBFbWJlciB9IGZyb20gJy4vZW1iZXInO1xuZXhwb3J0IHsgRXh0cmFFcnJvckRhdGEgfSBmcm9tICcuL2V4dHJhZXJyb3JkYXRhJztcbmV4cG9ydCB7IE9mZmxpbmUgfSBmcm9tICcuL29mZmxpbmUnO1xuZXhwb3J0IHsgUmVwb3J0aW5nT2JzZXJ2ZXIgfSBmcm9tICcuL3JlcG9ydGluZ29ic2VydmVyJztcbmV4cG9ydCB7IFJld3JpdGVGcmFtZXMgfSBmcm9tICcuL3Jld3JpdGVmcmFtZXMnO1xuZXhwb3J0IHsgU2Vzc2lvblRpbWluZyB9IGZyb20gJy4vc2Vzc2lvbnRpbWluZyc7XG5leHBvcnQgeyBUcmFuc2FjdGlvbiB9IGZyb20gJy4vdHJhbnNhY3Rpb24nO1xuZXhwb3J0IHsgVnVlIH0gZnJvbSAnLi92dWUnO1xuIiwgIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHByb2dyYW0gZnJvbSAnY29tbWFuZGVyJ1xuXG5pbXBvcnQgeyBnZXRDb3VudHJ5RmxhZyB9IGZyb20gJy4vaW5kZXgnXG5pbXBvcnQgKiBhcyBTZW50cnkgZnJvbSBcIkBzZW50cnkvbm9kZVwiO1xuXG4vLyBJbXBvcnRpbmcgQHNlbnRyeS90cmFjaW5nIHBhdGNoZXMgdGhlIGdsb2JhbCBodWIgZm9yIHRyYWNpbmcgdG8gd29yay5cbmltcG9ydCAqIGFzIFRyYWNpbmcgZnJvbSBcIkBzZW50cnkvdHJhY2luZ1wiO1xuaW1wb3J0IHsgUmV3cml0ZUZyYW1lcyB9IGZyb20gJ0BzZW50cnkvaW50ZWdyYXRpb25zJztcblxuU2VudHJ5LmluaXQoe1xuICBkc246IFwiaHR0cHM6Ly9hZWMwODczZTc1MGM0OWIwODJmZTM1OTRkZWYxNWFmMUBvMTExNjEzMi5pbmdlc3Quc2VudHJ5LmlvLzYxNDkyODBcIixcblxuICAvLyBXZSByZWNvbW1lbmQgYWRqdXN0aW5nIHRoaXMgdmFsdWUgaW4gcHJvZHVjdGlvbiwgb3IgdXNpbmcgdHJhY2VzU2FtcGxlclxuICAvLyBmb3IgZmluZXIgY29udHJvbFxuICB0cmFjZXNTYW1wbGVSYXRlOiAxLjAsXG4gIGludGVncmF0aW9uczogW25ldyBSZXdyaXRlRnJhbWVzKHtyb290OiBnbG9iYWwuX19yb290ZGlyX199KV1cbn0pO1xuXG5wcm9ncmFtXG4gIC52ZXJzaW9uKCcwLjEuMCcpXG4gIC5uYW1lKCdjb3VudHJ5LWZsYWctY2xpJylcbiAgLmNvbW1hbmQoJ2dldCA8ZmxhZz4nKVxuICAuYWN0aW9uKChmbGFnKSA9PiB7XG4gICAgY29uc3QgdHJhbnNhY3Rpb24gPSBTZW50cnkuc3RhcnRUcmFuc2FjdGlvbih7XG4gICAgICBvcDogXCJnZXQgZmxhZyBmcm9tIDIgYWxwaGEgY29kZVwiLFxuICAgICAgbmFtZTogXCJHRVQgZmxhZyBmcm9tIDIgYWxwaGEgY29kZVwiXG4gICAgfSlcbiAgICB0cnkge1xuICAgICAgY29uc3QgcmVzdWx0ID0gZ2V0Q291bnRyeUZsYWcoZmxhZyk7XG4gICAgICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHRocm93IG5ldyBFcnJvcihgRmxhZzogJHtmbGFnfSBcXG5SZXN1bHQ6ICR7cmVzdWx0fVxcbmApXG4gICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICBTZW50cnkuY2FwdHVyZUV4Y2VwdGlvbihlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJhbnNhY3Rpb24uZmluaXNoKClcbiAgICB9XG4gIH0pXG5cbnByb2dyYW0ucGFyc2UocHJvY2Vzcy5hcmd2KVxuIiwgImV4cG9ydCBmdW5jdGlvbiBnZXRDb3VudHJ5RmxhZyAoY291bnRyeUNvZGU6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChjb3VudHJ5Q29kZS5sZW5ndGggIT0gMikgeyByZXR1cm4gdW5kZWZpbmVkfVxuICByZXR1cm4gY291bnRyeUNvZGUudG9VcHBlckNhc2UoKS5yZXBsYWNlKC8uL2csIGNoYXIgPT4gXG4gICAgICBTdHJpbmcuZnJvbUNvZGVQb2ludCgxMjczOTcgKyBjaGFyLmNoYXJDb2RlQXQoMCkpKTtcbn1cbiAgIl0sCiAgIm1hcHBpbmdzIjogIjtxbUJBQUEsbUJBSUEsR0FBSSxJQUFlLFFBQVEsVUFBVSxhQUNqQyxHQUFRLFFBQVEsaUJBQWlCLE1BQ2pDLEdBQU8sUUFBUSxRQUNmLEdBQVUsR0FBSyxRQUNmLEdBQVcsR0FBSyxTQUNoQixHQUFLLFFBQVEsTUFNakIsUUFBUSxRQUFRLFNBQVMsRUFBUyxJQU1sQyxHQUFVLEdBQU8sUUFBVSxHQUFJLEdBTS9CLEdBQVEsUUFBVSxFQU1sQixHQUFRLE9BQVMsR0FVakIsWUFBZ0IsRUFBTyxFQUFhLENBQ2xDLEtBQUssTUFBUSxFQUNiLEtBQUssU0FBVyxFQUFNLFFBQVEsTUFBUSxFQUN0QyxLQUFLLFNBQVcsRUFBTSxRQUFRLE1BQVEsRUFDdEMsS0FBSyxLQUFPLEVBQU0sUUFBUSxVQUFZLEdBQ3RDLEVBQVEsRUFBTSxNQUFNLFVBQ2hCLEVBQU0sT0FBUyxHQUFLLENBQUMsUUFBUSxLQUFLLEVBQU0sS0FBSyxNQUFLLE1BQVEsRUFBTSxTQUNwRSxLQUFLLEtBQU8sRUFBTSxRQUNsQixLQUFLLFlBQWMsR0FBZSxHQVVwQyxHQUFPLFVBQVUsS0FBTyxVQUFXLENBQ2pDLE1BQU8sTUFBSyxLQUNULFFBQVEsS0FBTSxJQUNkLFFBQVEsTUFBTyxLQVdwQixHQUFPLFVBQVUsY0FBZ0IsVUFBVyxDQUMxQyxNQUFPLElBQVUsS0FBSyxTQVd4QixHQUFPLFVBQVUsR0FBSyxTQUFTLEVBQUssQ0FDbEMsTUFBTyxNQUFLLFFBQVUsR0FBTyxLQUFLLE9BQVMsR0FVN0MsV0FBaUIsRUFBTSxDQUNyQixL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