country-flag-cli 0.0.16 → 0.0.20

Sign up to get free protection for your applications and to get access to all the features.
package/dist/cli.js CHANGED
@@ -1,36 +1,45 @@
1
1
  #!/usr/bin/env node
2
- var Sc=Object.create;var nn=Object.defineProperty;var Ec=Object.getOwnPropertyDescriptor;var Tc=Object.getOwnPropertyNames;var Oc=Object.getPrototypeOf,wc=Object.prototype.hasOwnProperty;var xc=t=>nn(t,"__esModule",{value:!0});var p=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Cc=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Tc(e))!wc.call(t,i)&&(r||i!=="default")&&nn(t,i,{get:()=>e[i],enumerable:!(n=Ec(e,i))||n.enumerable});return t},Ss=(t,e)=>Cc(xc(nn(t!=null?Sc(Oc(t)):{},"default",!e&&t&&t.__esModule?{get:()=>t.default,enumerable:!0}:{value:t,enumerable:!0})),t);var Cs=p((Yt,xs)=>{var Ic=require("events").EventEmitter,sn=require("child_process").spawn,zt=require("path"),Rc=zt.dirname,Es=zt.basename,Ts=require("fs");require("util").inherits(b,Ic);Yt=xs.exports=new b;Yt.Command=b;Yt.Option=Ke;function Ke(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||""}Ke.prototype.name=function(){return this.long.replace("--","").replace("no-","")};Ke.prototype.attributeName=function(){return qc(this.name())};Ke.prototype.is=function(t){return this.short===t||this.long===t};function b(t){this.commands=[],this.options=[],this._execs={},this._allowUnknownOption=!1,this._args=[],this._name=t||""}b.prototype.command=function(t,e,r){typeof e=="object"&&e!==null&&(r=e,e=null),r=r||{};var n=t.split(/ +/),i=new b(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};b.prototype.arguments=function(t){return this.parseExpectedArgs(t.split(/ +/))};b.prototype.addImplicitHelpCommand=function(){this.command("help [cmd]","display help for [cmd]")};b.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}};b.prototype.action=function(t){var e=this,r=function(s,o){s=s||[],o=o||[];var a=e.parseOptions(o);Os(e,a.unknown),a.unknown.length>0&&e.unknownOption(a.unknown[0]),a.args.length&&(s=a.args.concat(s)),e._args.forEach(function(u,c){u.required&&s[c]==null?e.missingArgument(u.name):u.variadic&&(c!==e._args.length-1&&e.variadicArgNotLast(u.name),s[c]=s.splice(c))}),e._args.length?s[e._args.length]=e:s.push(e),t.apply(e,s)},n=this.parent||this,i=n===this?"*":this._name;return n.on("command:"+i,r),this._alias&&n.on("command:"+this._alias,r),this};b.prototype.option=function(t,e,r,n){var i=this,s=new Ke(t,e),o=s.name(),a=s.attributeName();if(typeof r!="function")if(r instanceof RegExp){var u=r;r=function(c,f){var l=u.exec(c);return l?l[0]:f}}else n=r,r=null;return(!s.bool||s.optional||s.required)&&(s.bool||(n=!0),n!==void 0&&(i[a]=n,s.defaultValue=n)),this.options.push(s),this.on("option:"+o,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]=s.bool?n||!0:!1:i[a]=c:c!==null&&(i[a]=c)}),this};b.prototype.allowUnknownOption=function(t){return this._allowUnknownOption=arguments.length===0||t,this};b.prototype.parse=function(t){this.executables&&this.addImplicitHelpCommand(),this.rawArgs=t,this._name=this._name||Es(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],s=null;return i&&(s=this.commands.filter(function(o){return o.alias()===i})[0]),this._execs[i]===!0?this.executeSubCommand(t,r,e.unknown):s?(r[0]=s._name,this.executeSubCommand(t,r,e.unknown)):this.defaultExecutable?(r.unshift(this.defaultExecutable),this.executeSubCommand(t,r,e.unknown)):n};b.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=Es(n,zt.extname(n))+"-"+e[0],s,o=Ts.realpathSync(n);s=Rc(o);var a=zt.join(s,i),u=!1;on(a+".js")?(i=a+".js",u=!0):on(a+".ts")?(i=a+".ts",u=!0):on(a)&&(i=a),e=e.slice(1);var c;process.platform!=="win32"?u?(e.unshift(i),e=(process.execArgv||[]).concat(e),c=sn(process.argv[0],e,{stdio:"inherit",customFds:[0,1,2]})):c=sn(i,e,{stdio:"inherit",customFds:[0,1,2]}):(e.unshift(i),c=sn(process.execPath,e,{stdio:"inherit"}));var f=["SIGUSR1","SIGUSR2","SIGTERM","SIGINT","SIGHUP"];f.forEach(function(l){process.on(l,function(){c.killed===!1&&c.exitCode===null&&c.kill(l)})}),c.on("close",process.exit.bind(process)),c.on("error",function(l){l.code==="ENOENT"?console.error("error: %s(1) does not exist, try --help",i):l.code==="EACCES"&&console.error("error: %s(1) not executable. try chmod or run with root",i),process.exit(1)}),this.runningCommand=c};b.prototype.normalize=function(t){for(var e=[],r,n,i,s=0,o=t.length;s<o;++s)if(r=t[s],s>0&&(n=this.optionFor(t[s-1])),r==="--"){e=e.concat(t.slice(s));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};b.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)):(Os(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};b.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]};b.prototype.parseOptions=function(t){for(var e=[],r=t.length,n,i,s,o=[],a=0;a<r;++a){if(s=t[a],n){e.push(s);continue}if(s==="--"){n=!0;continue}if(i=this.optionFor(s),i){if(i.required){if(s=t[++a],s==null)return this.optionMissingArgument(i);this.emit("option:"+i.name(),s)}else i.optional?(s=t[a+1],s==null||s[0]==="-"&&s!=="-"?s=null:++a,this.emit("option:"+i.name(),s)):this.emit("option:"+i.name());continue}if(s.length>1&&s[0]==="-"){o.push(s),a+1<t.length&&t[a+1][0]!=="-"&&o.push(t[++a]);continue}e.push(s)}return{args:e,unknown:o}};b.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};b.prototype.missingArgument=function(t){console.error("error: missing required argument `%s'",t),process.exit(1)};b.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)};b.prototype.unknownOption=function(t){this._allowUnknownOption||(console.error("error: unknown option `%s'",t),process.exit(1))};b.prototype.variadicArgNotLast=function(t){console.error("error: variadic arguments must be last `%s'",t),process.exit(1)};b.prototype.version=function(t,e){if(arguments.length===0)return this._version;this._version=t,e=e||"-V, --version";var r=new Ke(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};b.prototype.description=function(t,e){return arguments.length===0?this._description:(this._description=t,this._argsDescription=e,this)};b.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};b.prototype.usage=function(t){var e=this._args.map(function(n){return ws(n)}),r="[options]"+(this.commands.length?" [command]":"")+(this._args.length?" "+e.join(" "):"");return arguments.length===0?this._usage||r:(this._usage=t,this)};b.prototype.name=function(t){return arguments.length===0?this._name:(this._name=t,this)};b.prototype.prepareCommands=function(){return this.commands.filter(function(t){return!t._noHelp}).map(function(t){var e=t._args.map(function(r){return ws(r)}).join(" ");return[t._name+(t._alias?"|"+t._alias:"")+(t.options.length?" [options]":"")+(e?" "+e:""),t._description]})};b.prototype.largestCommandLength=function(){var t=this.prepareCommands();return t.reduce(function(e,r){return Math.max(e,r[0].length)},0)};b.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)};b.prototype.largestArgLength=function(){return this._args.reduce(function(t,e){return Math.max(t,e.name.length)},0)};b.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};b.prototype.optionHelp=function(){var t=this.padWidth();return this.options.map(function(e){return Wt(e.flags,t)+" "+e.description+(e.bool&&e.defaultValue!==void 0?" (default: "+JSON.stringify(e.defaultValue)+")":"")}).concat([Wt("-h, --help",t)+" output usage information"]).join(`
4
- `)};b.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?Wt(r[0],e):r[0])+n}).join(`
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(`
5
5
  `).replace(/^/gm," "),""].join(`
6
- `)};b.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(" "+Wt(u.name,r)+" "+e[u.name])}),t.push("")}}var n=this._name;this._alias&&(n=n+"|"+this._alias);var i=["Usage: "+n+" "+this.usage(),""],s=[],o=this.commandHelp();o&&(s=[o]);var a=["Options:",""+this.optionHelp().replace(/^/gm," "),""];return i.concat(t).concat(a).concat(s).join(`
7
- `)};b.prototype.outputHelp=function(t){t||(t=function(e){return e}),process.stdout.write(t(this.helpInformation())),this.emit("--help")};b.prototype.help=function(t){this.outputHelp(t),process.exit()};function qc(t){return t.split("-").reduce(function(e,r){return e+r[0].toUpperCase()+r.slice(1)})}function Wt(t,e){var r=Math.max(0,e-t.length);return t+Array(r+1).join(" ")}function Os(t,e){e=e||[];for(var r=0;r<e.length;r++)(e[r]==="--help"||e[r]==="-h")&&(t.outputHelp(),process.exit(0))}function ws(t){var e=t.name+(t.variadic===!0?"...":"");return t.required?"<"+e+">":"["+e+"]"}function on(t){try{if(Ts.statSync(t).isFile())return!0}catch{return!1}}});var S=p((Zv,Kt)=>{var Rs,qs,ks,Ps,Ms,As,Ns,js,Fs,Vt,an,Ds,Hs,$e,Us,Ls,Bs,Gs,zs,Ws,Ys,Vs,Ks;(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 Kt=="object"&&typeof Kt.exports=="object"?t(r(e,r(Kt.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(s,o){return n[s]=i?i(s,o):o}}})(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])};Rs=function(r,n){e(r,n);function i(){this.constructor=r}r.prototype=n===null?Object.create(n):(i.prototype=n.prototype,new i)},qs=Object.assign||function(r){for(var n,i=1,s=arguments.length;i<s;i++){n=arguments[i];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(r[o]=n[o])}return r},ks=function(r,n){var i={};for(var s in r)Object.prototype.hasOwnProperty.call(r,s)&&n.indexOf(s)<0&&(i[s]=r[s]);if(r!=null&&typeof Object.getOwnPropertySymbols=="function")for(var o=0,s=Object.getOwnPropertySymbols(r);o<s.length;o++)n.indexOf(s[o])<0&&Object.prototype.propertyIsEnumerable.call(r,s[o])&&(i[s[o]]=r[s[o]]);return i},Ps=function(r,n,i,s){var o=arguments.length,a=o<3?n:s===null?s=Object.getOwnPropertyDescriptor(n,i):s,u;if(typeof Reflect=="object"&&typeof Reflect.decorate=="function")a=Reflect.decorate(r,n,i,s);else for(var c=r.length-1;c>=0;c--)(u=r[c])&&(a=(o<3?u(a):o>3?u(n,i,a):u(n,i))||a);return o>3&&a&&Object.defineProperty(n,i,a),a},Ms=function(r,n){return function(i,s){n(i,s,r)}},As=function(r,n){if(typeof Reflect=="object"&&typeof Reflect.metadata=="function")return Reflect.metadata(r,n)},Ns=function(r,n,i,s){function o(a){return a instanceof i?a:new i(function(u){u(a)})}return new(i||(i=Promise))(function(a,u){function c(d){try{l(s.next(d))}catch(h){u(h)}}function f(d){try{l(s.throw(d))}catch(h){u(h)}}function l(d){d.done?a(d.value):o(d.value).then(c,f)}l((s=s.apply(r,n||[])).next())})},js=function(r,n){var i={label:0,sent:function(){if(a[0]&1)throw a[1];return a[1]},trys:[],ops:[]},s,o,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(l){return function(d){return f([l,d])}}function f(l){if(s)throw new TypeError("Generator is already executing.");for(;i;)try{if(s=1,o&&(a=l[0]&2?o.return:l[0]?o.throw||((a=o.return)&&a.call(o),0):o.next)&&!(a=a.call(o,l[1])).done)return a;switch(o=0,a&&(l=[l[0]&2,a.value]),l[0]){case 0:case 1:a=l;break;case 4:return i.label++,{value:l[1],done:!1};case 5:i.label++,o=l[1],l=[0];continue;case 7:l=i.ops.pop(),i.trys.pop();continue;default:if(a=i.trys,!(a=a.length>0&&a[a.length-1])&&(l[0]===6||l[0]===2)){i=0;continue}if(l[0]===3&&(!a||l[1]>a[0]&&l[1]<a[3])){i.label=l[1];break}if(l[0]===6&&i.label<a[1]){i.label=a[1],a=l;break}if(a&&i.label<a[2]){i.label=a[2],i.ops.push(l);break}a[2]&&i.ops.pop(),i.trys.pop();continue}l=n.call(r,i)}catch(d){l=[6,d],o=0}finally{s=a=0}if(l[0]&5)throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}},Ks=function(r,n,i,s){s===void 0&&(s=i),r[s]=n[i]},Fs=function(r,n){for(var i in r)i!=="default"&&!n.hasOwnProperty(i)&&(n[i]=r[i])},Vt=function(r){var n=typeof Symbol=="function"&&Symbol.iterator,i=n&&r[n],s=0;if(i)return i.call(r);if(r&&typeof r.length=="number")return{next:function(){return r&&s>=r.length&&(r=void 0),{value:r&&r[s++],done:!r}}};throw new TypeError(n?"Object is not iterable.":"Symbol.iterator is not defined.")},an=function(r,n){var i=typeof Symbol=="function"&&r[Symbol.iterator];if(!i)return r;var s=i.call(r),o,a=[],u;try{for(;(n===void 0||n-- >0)&&!(o=s.next()).done;)a.push(o.value)}catch(c){u={error:c}}finally{try{o&&!o.done&&(i=s.return)&&i.call(s)}finally{if(u)throw u.error}}return a},Ds=function(){for(var r=[],n=0;n<arguments.length;n++)r=r.concat(an(arguments[n]));return r},Hs=function(){for(var r=0,n=0,i=arguments.length;n<i;n++)r+=arguments[n].length;for(var s=Array(r),o=0,n=0;n<i;n++)for(var a=arguments[n],u=0,c=a.length;u<c;u++,o++)s[o]=a[u];return s},$e=function(r){return this instanceof $e?(this.v=r,this):new $e(r)},Us=function(r,n,i){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var s=i.apply(r,n||[]),o,a=[];return o={},u("next"),u("throw"),u("return"),o[Symbol.asyncIterator]=function(){return this},o;function u(_){s[_]&&(o[_]=function(v){return new Promise(function(g,w){a.push([_,v,g,w])>1||c(_,v)})})}function c(_,v){try{f(s[_](v))}catch(g){h(a[0][3],g)}}function f(_){_.value instanceof $e?Promise.resolve(_.value.v).then(l,d):h(a[0][2],_)}function l(_){c("next",_)}function d(_){c("throw",_)}function h(_,v){_(v),a.shift(),a.length&&c(a[0][0],a[0][1])}},Ls=function(r){var n,i;return n={},s("next"),s("throw",function(o){throw o}),s("return"),n[Symbol.iterator]=function(){return this},n;function s(o,a){n[o]=r[o]?function(u){return(i=!i)?{value:$e(r[o](u)),done:o==="return"}:a?a(u):u}:a}},Bs=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 Vt=="function"?Vt(r):r[Symbol.iterator](),i={},s("next"),s("throw"),s("return"),i[Symbol.asyncIterator]=function(){return this},i);function s(a){i[a]=r[a]&&function(u){return new Promise(function(c,f){u=r[a](u),o(c,f,u.done,u.value)})}}function o(a,u,c,f){Promise.resolve(f).then(function(l){a({value:l,done:c})},u)}},Gs=function(r,n){return Object.defineProperty?Object.defineProperty(r,"raw",{value:n}):r.raw=n,r},zs=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},Ws=function(r){return r&&r.__esModule?r:{default:r}},Ys=function(r,n){if(!n.has(r))throw new TypeError("attempted to get private field on non-instance");return n.get(r)},Vs=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",Rs),t("__assign",qs),t("__rest",ks),t("__decorate",Ps),t("__param",Ms),t("__metadata",As),t("__awaiter",Ns),t("__generator",js),t("__exportStar",Fs),t("__createBinding",Ks),t("__values",Vt),t("__read",an),t("__spread",Ds),t("__spreadArrays",Hs),t("__await",$e),t("__asyncGenerator",Us),t("__asyncDelegator",Ls),t("__asyncValues",Bs),t("__makeTemplateObject",Gs),t("__importStar",zs),t("__importDefault",Ws),t("__classPrivateFieldGet",Ys),t("__classPrivateFieldSet",Vs)})});var $s=p($t=>{Object.defineProperty($t,"__esModule",{value:!0});var kc;(function(t){t[t.None=0]="None",t[t.Error=1]="Error",t[t.Debug=2]="Debug",t[t.Verbose=3]="Verbose"})(kc=$t.LogLevel||($t.LogLevel={}))});var Js=p(Je=>{Object.defineProperty(Je,"__esModule",{value:!0});var Pc;(function(t){t.Ok="ok",t.Exited="exited",t.Crashed="crashed",t.Abnormal="abnormal"})(Pc=Je.SessionStatus||(Je.SessionStatus={}));var Mc;(function(t){t.Ok="ok",t.Errored="errored",t.Crashed="crashed"})(Mc=Je.RequestSessionStatus||(Je.RequestSessionStatus={}))});var Zs=p(Xe=>{Object.defineProperty(Xe,"__esModule",{value:!0});var Xs;(function(t){t.Fatal="fatal",t.Error="error",t.Warning="warning",t.Log="log",t.Info="info",t.Debug="debug",t.Critical="critical"})(Xs=Xe.Severity||(Xe.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})(Xs=Xe.Severity||(Xe.Severity={}))});var eo=p(Ze=>{Object.defineProperty(Ze,"__esModule",{value:!0});var Qs;(function(t){t.Unknown="unknown",t.Skipped="skipped",t.Success="success",t.RateLimit="rate_limit",t.Invalid="invalid",t.Failed="failed"})(Qs=Ze.Status||(Ze.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})(Qs=Ze.Status||(Ze.Status={}))});var to=p(Jt=>{Object.defineProperty(Jt,"__esModule",{value:!0});var Ac;(function(t){t.Explicit="explicitly_set",t.Sampler="client_sampler",t.Rate="client_rate",t.Inheritance="inheritance"})(Ac=Jt.TransactionSamplingMethod||(Jt.TransactionSamplingMethod={}))});var ro=p(Xt=>{Object.defineProperty(Xt,"__esModule",{value:!0});var Nc;(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"})(Nc=Xt.Outcome||(Xt.Outcome={}))});var D=p(fe=>{Object.defineProperty(fe,"__esModule",{value:!0});var jc=$s();fe.LogLevel=jc.LogLevel;var no=Js();fe.SessionStatus=no.SessionStatus;fe.RequestSessionStatus=no.RequestSessionStatus;var Fc=Zs();fe.Severity=Fc.Severity;var Dc=eo();fe.Status=Dc.Status;var Hc=to();fe.TransactionSamplingMethod=Hc.TransactionSamplingMethod;var Uc=ro();fe.Outcome=Uc.Outcome});var io=p(un=>{Object.defineProperty(un,"__esModule",{value:!0});function Lc(t){t.then(null,function(e){console.error(e)})}un.forget=Lc});var er=p((gt,Qt)=>{Object.defineProperty(gt,"__esModule",{value:!0});function Bc(){return Object.prototype.toString.call(typeof process!="undefined"?process:0)==="[object process]"}gt.isNodeEnv=Bc;function Zt(t,e){return t.require(e)}gt.dynamicRequire=Zt;function Gc(t){var e;try{e=Zt(Qt,t)}catch{}try{var r=Zt(Qt,"process").cwd;e=Zt(Qt,r()+"/node_modules/"+t)}catch{}return e}gt.loadModule=Gc});var Se=p(cn=>{Object.defineProperty(cn,"__esModule",{value:!0});var zc=er(),Wc={};function Yc(){return zc.isNodeEnv()?global:typeof window!="undefined"?window:typeof self!="undefined"?self:Wc}cn.getGlobalObject=Yc});var Me=p(L=>{Object.defineProperty(L,"__esModule",{value:!0});function Vc(t){switch(Object.prototype.toString.call(t)){case"[object Error]":return!0;case"[object Exception]":return!0;case"[object DOMException]":return!0;default:return tr(t,Error)}}L.isError=Vc;function Kc(t){return Object.prototype.toString.call(t)==="[object ErrorEvent]"}L.isErrorEvent=Kc;function $c(t){return Object.prototype.toString.call(t)==="[object DOMError]"}L.isDOMError=$c;function Jc(t){return Object.prototype.toString.call(t)==="[object DOMException]"}L.isDOMException=Jc;function Xc(t){return Object.prototype.toString.call(t)==="[object String]"}L.isString=Xc;function Zc(t){return t===null||typeof t!="object"&&typeof t!="function"}L.isPrimitive=Zc;function so(t){return Object.prototype.toString.call(t)==="[object Object]"}L.isPlainObject=so;function Qc(t){return typeof Event!="undefined"&&tr(t,Event)}L.isEvent=Qc;function el(t){return typeof Element!="undefined"&&tr(t,Element)}L.isElement=el;function tl(t){return Object.prototype.toString.call(t)==="[object RegExp]"}L.isRegExp=tl;function rl(t){return Boolean(t&&t.then&&typeof t.then=="function")}L.isThenable=rl;function nl(t){return so(t)&&"nativeEvent"in t&&"preventDefault"in t&&"stopPropagation"in t}L.isSyntheticEvent=nl;function tr(t,e){try{return t instanceof e}catch{return!1}}L.isInstanceOf=tr});var ln=p(rr=>{Object.defineProperty(rr,"__esModule",{value:!0});var il=Se(),sl=Me();function ol(t,e){try{for(var r=t,n=5,i=80,s=[],o=0,a=0,u=" > ",c=u.length,f=void 0;r&&o++<n&&(f=al(r,e),!(f==="html"||o>1&&a+s.length*c+f.length>=i));)s.push(f),a+=f.length,r=r.parentNode;return s.reverse().join(u)}catch{return"<unknown>"}}rr.htmlTreeAsString=ol;function al(t,e){var r,n,i=t,s=[],o,a,u,c,f;if(!i||!i.tagName)return"";s.push(i.tagName.toLowerCase());var l=((r=e)===null||r===void 0?void 0:r.length)?e.filter(function(h){return i.getAttribute(h)}).map(function(h){return[h,i.getAttribute(h)]}):null;if((n=l)===null||n===void 0?void 0:n.length)l.forEach(function(h){s.push("["+h[0]+'="'+h[1]+'"]')});else if(i.id&&s.push("#"+i.id),o=i.className,o&&sl.isString(o))for(a=o.split(/\s+/),f=0;f<a.length;f++)s.push("."+a[f]);var d=["type","name","title","alt"];for(f=0;f<d.length;f++)u=d[f],c=i.getAttribute(u),c&&s.push("["+u+'="'+c+'"]');return s.join("")}function ul(){var t=il.getGlobalObject();try{return t.document.location.href}catch{return""}}rr.getLocationHref=ul});var oo=p(fn=>{Object.defineProperty(fn,"__esModule",{value:!0});fn.setPrototypeOf=Object.setPrototypeOf||({__proto__:[]}instanceof Array?cl:ll);function cl(t,e){return t.__proto__=e,t}function ll(t,e){for(var r in e)Object.prototype.hasOwnProperty.call(t,r)||(t[r]=e[r]);return t}});var nr=p(dn=>{Object.defineProperty(dn,"__esModule",{value:!0});var fl=S(),dl=oo(),pl=function(t){fl.__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,dl.setPrototypeOf(i,n.prototype),i}return e}(Error);dn.SentryError=pl});var ao=p(pn=>{Object.defineProperty(pn,"__esModule",{value:!0});var hl=S(),mt=nr(),_l=/^(?:(\w+):)\/\/(?:(\w+)(?::(\w+))?@)([\w.-]+)(?::(\d+))?\/(.+)/,yt="Invalid Dsn",vl=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,s=r.pass,o=r.port,a=r.projectId,u=r.protocol,c=r.publicKey;return u+"://"+c+(e&&s?":"+s:"")+("@"+n+(o?":"+o:"")+"/"+(i&&i+"/")+a)},t.prototype._fromString=function(e){var r=_l.exec(e);if(!r)throw new mt.SentryError(yt);var n=hl.__read(r.slice(1),6),i=n[0],s=n[1],o=n[2],a=o===void 0?"":o,u=n[3],c=n[4],f=c===void 0?"":c,l=n[5],d="",h=l,_=h.split("/");if(_.length>1&&(d=_.slice(0,-1).join("/"),h=_.pop()),h){var v=h.match(/^\d+/);v&&(h=v[0])}this._fromComponents({host:u,pass:a,path:d,projectId:h,port:f,protocol:i,publicKey:s})},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 mt.SentryError(yt+": "+r+" missing")}),!this.projectId.match(/^\d+$/))throw new mt.SentryError(yt+": Invalid projectId "+this.projectId);if(this.protocol!=="http"&&this.protocol!=="https")throw new mt.SentryError(yt+": Invalid protocol "+this.protocol);if(this.port&&isNaN(parseInt(this.port,10)))throw new mt.SentryError(yt+": Invalid port "+this.port)},t}();pn.Dsn=vl});var or=p(sr=>{Object.defineProperty(sr,"__esModule",{value:!0});var uo=Se(),Ae=uo.getGlobalObject(),hn="Sentry Logger ";function ir(t){var e=uo.getGlobalObject(),r=["debug","info","warn","error","log","assert"];if(!("console"in e))return t();var n=e.console,i={};r.forEach(function(o){o in e.console&&n[o].__sentry_original__&&(i[o]=n[o],n[o]=n[o].__sentry_original__)});var s=t();return Object.keys(i).forEach(function(o){n[o]=i[o]}),s}sr.consoleSandbox=ir;var gl=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||ir(function(){Ae.console.log(hn+"[Log]: "+e.join(" "))})},t.prototype.warn=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];!this._enabled||ir(function(){Ae.console.warn(hn+"[Warn]: "+e.join(" "))})},t.prototype.error=function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];!this._enabled||ir(function(){Ae.console.error(hn+"[Error]: "+e.join(" "))})},t}();Ae.__SENTRY__=Ae.__SENTRY__||{};var ml=Ae.__SENTRY__.logger||(Ae.__SENTRY__.logger=new gl);sr.logger=ml});var vn=p(_n=>{Object.defineProperty(_n,"__esModule",{value:!0});var yl=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}();_n.Memo=yl});var ar=p(mn=>{Object.defineProperty(mn,"__esModule",{value:!0});var gn="<anonymous>";function bl(t){try{return!t||typeof t!="function"?gn:t.name||gn}catch{return gn}}mn.getFunctionName=bl});var ur=p(Ne=>{Object.defineProperty(Ne,"__esModule",{value:!0});var co=Me();function Sl(t,e){return e===void 0&&(e=0),typeof t!="string"||e===0||t.length<=e?t:t.substr(0,e)+"..."}Ne.truncate=Sl;function El(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 s=Math.min(i+140,n);return s>n-5&&(s=n),s===n&&(i=Math.max(s-140,0)),r=r.slice(i,s),i>0&&(r="'{snip} "+r),s<n&&(r+=" {snip}"),r}Ne.snipLine=El;function Tl(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)}Ne.safeJoin=Tl;function Ol(t,e){return co.isString(t)?co.isRegExp(e)?e.test(t):typeof e=="string"?t.indexOf(e)!==-1:!1:!1}Ne.isMatchingPattern=Ol;function wl(t){return t.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}Ne.escapeStringForRegex=wl});var Sn=p(ae=>{Object.defineProperty(ae,"__esModule",{value:!0});var xl=S(),lo=ln(),oe=Me(),Cl=vn(),Il=ar(),fo=ur();function Rl(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}}ae.fill=Rl;function ql(t){return Object.keys(t).map(function(e){return encodeURIComponent(e)+"="+encodeURIComponent(t[e])}).join("&")}ae.urlEncode=ql;function po(t){if(oe.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(oe.isEvent(t)){var i=t,s={};s.type=i.type;try{s.target=oe.isElement(i.target)?lo.htmlTreeAsString(i.target):Object.prototype.toString.call(i.target)}catch{s.target="<unknown>"}try{s.currentTarget=oe.isElement(i.currentTarget)?lo.htmlTreeAsString(i.currentTarget):Object.prototype.toString.call(i.currentTarget)}catch{s.currentTarget="<unknown>"}typeof CustomEvent!="undefined"&&oe.isInstanceOf(t,CustomEvent)&&(s.detail=i.detail);for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(s[o]=i[o]);return s}return t}function kl(t){return~-encodeURI(t).split(/%..|./).length}function Pl(t){return kl(JSON.stringify(t))}function ho(t,e,r){e===void 0&&(e=3),r===void 0&&(r=100*1024);var n=vo(t,e);return Pl(n)>r?ho(t,e-1,r):n}ae.normalizeToSize=ho;function Ml(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=_o(t);return oe.isPrimitive(r)?r:e}function _o(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]":oe.isSyntheticEvent(t)?"[SyntheticEvent]":typeof t=="number"&&t!==t?"[NaN]":t===void 0?"[undefined]":typeof t=="function"?"[Function: "+Il.getFunctionName(t)+"]":typeof t=="symbol"?"["+String(t)+"]":typeof t=="bigint"?"[BigInt: "+String(t)+"]":t}function yn(t,e,r,n){if(r===void 0&&(r=1/0),n===void 0&&(n=new Cl.Memo),r===0)return Ml(e);if(e!=null&&typeof e.toJSON=="function")return e.toJSON();var i=_o(e,t);if(oe.isPrimitive(i))return i;var s=po(e),o=Array.isArray(e)?[]:{};if(n.memoize(e))return"[Circular ~]";for(var a in s)!Object.prototype.hasOwnProperty.call(s,a)||(o[a]=yn(a,s[a],r-1,n));return n.unmemoize(e),o}ae.walk=yn;function vo(t,e){try{return JSON.parse(JSON.stringify(t,function(r,n){return yn(r,n,e)}))}catch{return"**non-serializable**"}}ae.normalize=vo;function Al(t,e){e===void 0&&(e=40);var r=Object.keys(po(t));if(r.sort(),!r.length)return"[object has no keys]";if(r[0].length>=e)return fo.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:fo.truncate(i,e)}return""}ae.extractExceptionKeysForMessage=Al;function bn(t){var e,r;if(oe.isPlainObject(t)){var n=t,i={};try{for(var s=xl.__values(Object.keys(n)),o=s.next();!o.done;o=s.next()){var a=o.value;typeof n[a]!="undefined"&&(i[a]=bn(n[a]))}}catch(u){e={error:u}}finally{try{o&&!o.done&&(r=s.return)&&r.call(s)}finally{if(e)throw e.error}}return i}return Array.isArray(t)?t.map(bn):t}ae.dropUndefinedKeys=bn;function Nl(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 oe.isPrimitive(t):e=new t.constructor(t);break;default:e=t;break}return e}ae.objectify=Nl});var On=p(te=>{Object.defineProperty(te,"__esModule",{value:!0});var cr=Se(),jl=or();function Fl(){try{return new ErrorEvent(""),!0}catch{return!1}}te.supportsErrorEvent=Fl;function Dl(){try{return new DOMError(""),!0}catch{return!1}}te.supportsDOMError=Dl;function Hl(){try{return new DOMException(""),!0}catch{return!1}}te.supportsDOMException=Hl;function En(){if(!("fetch"in cr.getGlobalObject()))return!1;try{return new Headers,new Request(""),new Response,!0}catch{return!1}}te.supportsFetch=En;function Tn(t){return t&&/^function fetch\(\)\s+\{\s+\[native code\]\s+\}$/.test(t.toString())}te.isNativeFetch=Tn;function Ul(){if(!En())return!1;var t=cr.getGlobalObject();if(Tn(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=Tn(n.contentWindow.fetch)),r.head.removeChild(n)}catch(i){jl.logger.warn("Could not create sandbox iframe for pure fetch check, bailing to window.fetch: ",i)}return e}te.supportsNativeFetch=Ul;function Ll(){return"ReportingObserver"in cr.getGlobalObject()}te.supportsReportingObserver=Ll;function Bl(){if(!En())return!1;try{return new Request("_",{referrerPolicy:"origin"}),!0}catch{return!1}}te.supportsReferrerPolicy=Bl;function Gl(){var t=cr.getGlobalObject(),e=t.chrome,r=e&&e.app&&e.app.runtime,n="history"in t&&!!t.history.pushState&&!!t.history.replaceState;return!r&&n}te.supportsHistory=Gl});var So=p(Cn=>{Object.defineProperty(Cn,"__esModule",{value:!0});var Qe=S(),zl=Se(),lr=Me(),go=or(),de=Sn(),Wl=ar(),mo=On(),x=zl.getGlobalObject(),bt={},yo={};function Yl(t){if(!yo[t])switch(yo[t]=!0,t){case"console":Kl();break;case"dom":nf();break;case"xhr":Zl();break;case"fetch":$l();break;case"history":Ql();break;case"error":sf();break;case"unhandledrejection":of();break;default:go.logger.warn("unknown instrumentation type:",t)}}function Vl(t){!t||typeof t.type!="string"||typeof t.callback!="function"||(bt[t.type]=bt[t.type]||[],bt[t.type].push(t.callback),Yl(t.type))}Cn.addInstrumentationHandler=Vl;function re(t,e){var r,n;if(!(!t||!bt[t]))try{for(var i=Qe.__values(bt[t]||[]),s=i.next();!s.done;s=i.next()){var o=s.value;try{o(e)}catch(a){go.logger.error(`Error while triggering instrumentation handler.
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.
8
8
  Type: `+t+`
9
- Name: `+Wl.getFunctionName(o)+`
10
- Error: `+a)}}}catch(a){r={error:a}}finally{try{s&&!s.done&&(n=i.return)&&n.call(i)}finally{if(r)throw r.error}}}function Kl(){"console"in x&&["debug","info","warn","error","log","assert"].forEach(function(t){t in x.console&&de.fill(x.console,t,function(e){return function(){for(var r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];re("console",{args:r,level:t}),e&&Function.prototype.apply.call(e,x.console,r)}})})}function $l(){!mo.supportsNativeFetch()||de.fill(x,"fetch",function(t){return function(){for(var e=[],r=0;r<arguments.length;r++)e[r]=arguments[r];var n={args:e,fetchData:{method:Jl(e),url:Xl(e)},startTimestamp:Date.now()};return re("fetch",Qe.__assign({},n)),t.apply(x,e).then(function(i){return re("fetch",Qe.__assign(Qe.__assign({},n),{endTimestamp:Date.now(),response:i})),i},function(i){throw re("fetch",Qe.__assign(Qe.__assign({},n),{endTimestamp:Date.now(),error:i})),i})}})}function Jl(t){return t===void 0&&(t=[]),"Request"in x&&lr.isInstanceOf(t[0],Request)&&t[0].method?String(t[0].method).toUpperCase():t[1]&&t[1].method?String(t[1].method).toUpperCase():"GET"}function Xl(t){return t===void 0&&(t=[]),typeof t[0]=="string"?t[0]:"Request"in x&&lr.isInstanceOf(t[0],Request)?t[0].url:String(t[0])}function Zl(){if("XMLHttpRequest"in x){var t=[],e=[],r=XMLHttpRequest.prototype;de.fill(r,"open",function(n){return function(){for(var i=[],s=0;s<arguments.length;s++)i[s]=arguments[s];var o=this,a=i[1];o.__sentry_xhr__={method:lr.isString(i[0])?i[0].toUpperCase():i[0],url:i[1]},lr.isString(a)&&o.__sentry_xhr__.method==="POST"&&a.match(/sentry_key/)&&(o.__sentry_own_request__=!0);var u=function(){if(o.readyState===4){try{o.__sentry_xhr__&&(o.__sentry_xhr__.status_code=o.status)}catch{}try{var c=t.indexOf(o);if(c!==-1){t.splice(c);var f=e.splice(c)[0];o.__sentry_xhr__&&f[0]!==void 0&&(o.__sentry_xhr__.body=f[0])}}catch{}re("xhr",{args:i,endTimestamp:Date.now(),startTimestamp:Date.now(),xhr:o})}};return"onreadystatechange"in o&&typeof o.onreadystatechange=="function"?de.fill(o,"onreadystatechange",function(c){return function(){for(var f=[],l=0;l<arguments.length;l++)f[l]=arguments[l];return u(),c.apply(o,f)}}):o.addEventListener("readystatechange",u),n.apply(o,i)}}),de.fill(r,"send",function(n){return function(){for(var i=[],s=0;s<arguments.length;s++)i[s]=arguments[s];return t.push(this),e.push(i),re("xhr",{args:i,startTimestamp:Date.now(),xhr:this}),n.apply(this,i)}})}}var fr;function Ql(){if(!mo.supportsHistory())return;var t=x.onpopstate;x.onpopstate=function(){for(var r=[],n=0;n<arguments.length;n++)r[n]=arguments[n];var i=x.location.href,s=fr;if(fr=i,re("history",{from:s,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 s=n.length>2?n[2]:void 0;if(s){var o=fr,a=String(s);fr=a,re("history",{from:o,to:a})}return r.apply(this,n)}}de.fill(x.history,"pushState",e),de.fill(x.history,"replaceState",e)}var ef=1e3,dr,pr;function tf(t,e){if(!t||t.type!==e.type)return!0;try{if(t.target!==e.target)return!0}catch{}return!1}function rf(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 bo(t,e){return e===void 0&&(e=!1),function(r){if(!(!r||pr===r)&&!rf(r)){var n=r.type==="keypress"?"input":r.type;dr===void 0?(t({event:r,name:n,global:e}),pr=r):tf(pr,r)&&(t({event:r,name:n,global:e}),pr=r),clearTimeout(dr),dr=x.setTimeout(function(){dr=void 0},ef)}}}function nf(){if("document"in x){var t=re.bind(null,"dom"),e=bo(t,!0);x.document.addEventListener("click",e,!1),x.document.addEventListener("keypress",e,!1),["EventTarget","Node"].forEach(function(r){var n=x[r]&&x[r].prototype;!n||!n.hasOwnProperty||!n.hasOwnProperty("addEventListener")||(de.fill(n,"addEventListener",function(i){return function(s,o,a){if(s==="click"||s=="keypress")try{var u=this,c=u.__sentry_instrumentation_handlers__=u.__sentry_instrumentation_handlers__||{},f=c[s]=c[s]||{refCount:0};if(!f.handler){var l=bo(t);f.handler=l,i.call(this,s,l,a)}f.refCount+=1}catch{}return i.call(this,s,o,a)}}),de.fill(n,"removeEventListener",function(i){return function(s,o,a){if(s==="click"||s=="keypress")try{var u=this,c=u.__sentry_instrumentation_handlers__||{},f=c[s];f&&(f.refCount-=1,f.refCount<=0&&(i.call(this,s,f.handler,a),f.handler=void 0,delete c[s]),Object.keys(c).length===0&&delete u.__sentry_instrumentation_handlers__)}catch{}return i.call(this,s,o,a)}}))})}}var wn=null;function sf(){wn=x.onerror,x.onerror=function(t,e,r,n,i){return re("error",{column:n,error:i,line:r,msg:t,url:e}),wn?wn.apply(this,arguments):!1}}var xn=null;function of(){xn=x.onunhandledrejection,x.onunhandledrejection=function(t){return re("unhandledrejection",t),xn?xn.apply(this,arguments):!0}}});var To=p(X=>{Object.defineProperty(X,"__esModule",{value:!0});var St=S(),af=Se(),In=ur();function uf(){var t=af.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 s=i.toString(16);s.length<4;)s="0"+s;return s};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 s=Math.random()*16|0,o=i==="x"?s:s&3|8;return o.toString(16)})}X.uuid4=uf;function cf(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}}X.parseUrl=cf;function lf(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>"}X.getEventDescription=lf;function ff(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"}X.addExceptionTypeValue=ff;function df(t,e){var r;if(!(!t.exception||!t.exception.values)){var n=t.exception.values[0],i={type:"generic",handled:!0},s=n.mechanism;if(n.mechanism=St.__assign(St.__assign(St.__assign({},i),s),e),e&&"data"in e){var o=St.__assign(St.__assign({},(r=s)===null||r===void 0?void 0:r.data),e.data);n.mechanism.data=o}}}X.addExceptionMechanism=df;var pf=/^(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 hf(t){var e=t.match(pf)||[],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]}}X.parseSemver=hf;var Eo=60*1e3;function _f(t,e){if(!e)return Eo;var r=parseInt(""+e,10);if(!isNaN(r))return r*1e3;var n=Date.parse(""+e);return isNaN(n)?Eo:n-t}X.parseRetryAfterHeader=_f;function vf(t,e,r){r===void 0&&(r=5);var n=e.lineno||0,i=t.length,s=Math.max(Math.min(i,n-1),0);e.pre_context=t.slice(Math.max(0,s-r),s).map(function(o){return In.snipLine(o,0)}),e.context_line=In.snipLine(t[Math.min(i-1,s)],e.colno||0),e.post_context=t.slice(Math.min(s+1,i),s+1+r).map(function(o){return In.snipLine(o,0)})}X.addContextToFrame=vf;function gf(t){return t.split(/[\?#]/,1)[0]}X.stripUrlQueryAndFragment=gf;function mf(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}X.checkOrSetAlreadyCaught=mf});var Ro=p(pe=>{Object.defineProperty(pe,"__esModule",{value:!0});function Oo(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 yf=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^/]+?|)(\.[^./]*|))(?:[/]*)$/;function wo(t){var e=yf.exec(t);return e?e.slice(1):[]}function Rn(){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 s=i>=0?t[i]:"/";!s||(r=s+"/"+r,n=s.charAt(0)==="/")}return r=Oo(r.split("/").filter(function(o){return!!o}),!n).join("/"),(n?"/":"")+r||"."}pe.resolve=Rn;function xo(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 bf(t,e){t=Rn(t).substr(1),e=Rn(e).substr(1);for(var r=xo(t.split("/")),n=xo(e.split("/")),i=Math.min(r.length,n.length),s=i,o=0;o<i;o++)if(r[o]!==n[o]){s=o;break}for(var a=[],o=s;o<r.length;o++)a.push("..");return a=a.concat(n.slice(s)),a.join("/")}pe.relative=bf;function Co(t){var e=Io(t),r=t.substr(-1)==="/",n=Oo(t.split("/").filter(function(i){return!!i}),!e).join("/");return!n&&!e&&(n="."),n&&r&&(n+="/"),(e?"/":"")+n}pe.normalizePath=Co;function Io(t){return t.charAt(0)==="/"}pe.isAbsolute=Io;function Sf(){for(var t=[],e=0;e<arguments.length;e++)t[e]=arguments[e];return Co(t.join("/"))}pe.join=Sf;function Ef(t){var e=wo(t),r=e[0],n=e[1];return!r&&!n?".":(n&&(n=n.substr(0,n.length-1)),r+n)}pe.dirname=Ef;function Tf(t,e){var r=wo(t)[2];return e&&r.substr(e.length*-1)===e&&(r=r.substr(0,r.length-e.length)),r}pe.basename=Tf});var kn=p(qn=>{Object.defineProperty(qn,"__esModule",{value:!0});var Of=Me(),wf=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(Of.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,s=[];e.forEach(function(o,a){t.resolve(o).then(function(u){s[a]=u,i-=1,i===0&&r(s)}).then(null,n)})})},t.prototype.then=function(e,r){var n=this;return new t(function(i,s){n._attachHandler({done:!1,onfulfilled:function(o){if(!e){i(o);return}try{i(e(o));return}catch(a){s(a);return}},onrejected:function(o){if(!r){s(o);return}try{i(r(o));return}catch(a){s(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 s,o;return r.then(function(a){o=!1,s=a,e&&e()},function(a){o=!0,s=a,e&&e()}).then(function(){if(o){i(s);return}n(s)})})},t.prototype.toString=function(){return"[object SyncPromise]"},t}();qn.SyncPromise=wf});var qo=p(Mn=>{Object.defineProperty(Mn,"__esModule",{value:!0});var xf=nr(),Pn=kn(),Cf=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 Pn.SyncPromise.reject(new xf.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 Pn.SyncPromise(function(n){var i=setTimeout(function(){e&&e>0&&n(!1)},e);Pn.SyncPromise.all(r._buffer).then(function(){clearTimeout(i),n(!0)}).then(null,function(){n(!0)})})},t}();Mn.PromiseBuffer=Cf});var No=p((Z,Ao)=>{Object.defineProperty(Z,"__esModule",{value:!0});var ko=Se(),Po=er(),An={nowSeconds:function(){return Date.now()/1e3}};function If(){var t=ko.getGlobalObject().performance;if(!(!t||!t.now)){var e=Date.now()-t.now();return{now:function(){return t.now()},timeOrigin:e}}}function Rf(){try{var t=Po.dynamicRequire(Ao,"perf_hooks");return t.performance}catch{return}}var hr=Po.isNodeEnv()?Rf():If(),Mo=hr===void 0?An:{nowSeconds:function(){return(hr.timeOrigin+hr.now())/1e3}};Z.dateTimestampInSeconds=An.nowSeconds.bind(An);Z.timestampInSeconds=Mo.nowSeconds.bind(Mo);Z.timestampWithMs=Z.timestampInSeconds;Z.usingPerformanceAPI=hr!==void 0;Z.browserPerformanceTimeOrigin=function(){var t=ko.getGlobalObject().performance;if(!t||!t.now){Z._browserPerformanceTimeOriginMode="none";return}var e=3600*1e3,r=t.now(),n=Date.now(),i=t.timeOrigin?Math.abs(t.timeOrigin+r-n):e,s=i<e,o=t.timing&&t.timing.navigationStart,a=typeof o=="number",u=a?Math.abs(o+r-n):e,c=u<e;return s||c?i<=u?(Z._browserPerformanceTimeOriginMode="timeOrigin",t.timeOrigin):(Z._browserPerformanceTimeOriginMode="navigationStart",o):(Z._browserPerformanceTimeOriginMode="dateNow",n)}()});var m=p(R=>{Object.defineProperty(R,"__esModule",{value:!0});var k=S();k.__exportStar(io(),R);k.__exportStar(ln(),R);k.__exportStar(ao(),R);k.__exportStar(nr(),R);k.__exportStar(Se(),R);k.__exportStar(So(),R);k.__exportStar(Me(),R);k.__exportStar(or(),R);k.__exportStar(vn(),R);k.__exportStar(To(),R);k.__exportStar(er(),R);k.__exportStar(Sn(),R);k.__exportStar(Ro(),R);k.__exportStar(qo(),R);k.__exportStar(ar(),R);k.__exportStar(ur(),R);k.__exportStar(On(),R);k.__exportStar(kn(),R);k.__exportStar(No(),R)});var Nn=p(_r=>{Object.defineProperty(_r,"__esModule",{value:!0});var y=S(),Et=m(),jo=100,qf=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=y.__spread(e._breadcrumbs),r._tags=y.__assign({},e._tags),r._extra=y.__assign({},e._extra),r._contexts=y.__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=y.__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=y.__assign(y.__assign({},this._tags),e),this._notifyScopeListeners(),this},t.prototype.setTag=function(e,r){var n;return this._tags=y.__assign(y.__assign({},this._tags),(n={},n[e]=r,n)),this._notifyScopeListeners(),this},t.prototype.setExtras=function(e){return this._extra=y.__assign(y.__assign({},this._extra),e),this._notifyScopeListeners(),this},t.prototype.setExtra=function(e,r){var n;return this._extra=y.__assign(y.__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=y.__assign(y.__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,s=this.getSpan();if((e=s)===null||e===void 0?void 0:e.transaction)return(r=s)===null||r===void 0?void 0:r.transaction;if((i=(n=s)===null||n===void 0?void 0:n.spanRecorder)===null||i===void 0?void 0:i.spans[0])return s.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=y.__assign(y.__assign({},this._tags),e._tags),this._extra=y.__assign(y.__assign({},this._extra),e._extra),this._contexts=y.__assign(y.__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)):Et.isPlainObject(e)&&(e=e,this._tags=y.__assign(y.__assign({},this._tags),e.tags),this._extra=y.__assign(y.__assign({},this._extra),e.extra),this._contexts=y.__assign(y.__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,jo):jo;if(n<=0)return this;var i=y.__assign({timestamp:Et.dateTimestampInSeconds()},e);return this._breadcrumbs=y.__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=y.__assign(y.__assign({},this._extra),e.extra)),this._tags&&Object.keys(this._tags).length&&(e.tags=y.__assign(y.__assign({},this._tags),e.tags)),this._user&&Object.keys(this._user).length&&(e.user=y.__assign(y.__assign({},this._user),e.user)),this._contexts&&Object.keys(this._contexts).length&&(e.contexts=y.__assign(y.__assign({},this._contexts),e.contexts)),this._level&&(e.level=this._level),this._transactionName&&(e.transaction=this._transactionName),this._span){e.contexts=y.__assign({trace:this._span.getTraceContext()},e.contexts);var i=(n=this._span.transaction)===null||n===void 0?void 0:n.name;i&&(e.tags=y.__assign({transaction:i},e.tags))}return this._applyFingerprint(e),e.breadcrumbs=y.__spread(e.breadcrumbs||[],this._breadcrumbs),e.breadcrumbs=e.breadcrumbs.length>0?e.breadcrumbs:void 0,this._notifyEventProcessors(y.__spread(Fo(),this._eventProcessors),e,r)},t.prototype._notifyEventProcessors=function(e,r,n,i){var s=this;return i===void 0&&(i=0),new Et.SyncPromise(function(o,a){var u=e[i];if(r===null||typeof u!="function")o(r);else{var c=u(y.__assign({},r),n);Et.isThenable(c)?c.then(function(f){return s._notifyEventProcessors(e,f,n,i+1).then(o)}).then(null,a):s._notifyEventProcessors(e,c,n,i+1).then(o).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}();_r.Scope=qf;function Fo(){var t=Et.getGlobalObject();return t.__SENTRY__=t.__SENTRY__||{},t.__SENTRY__.globalEventProcessors=t.__SENTRY__.globalEventProcessors||[],t.__SENTRY__.globalEventProcessors}function kf(t){Fo().push(t)}_r.addGlobalEventProcessor=kf});var Dn=p(Fn=>{Object.defineProperty(Fn,"__esModule",{value:!0});var jn=D(),et=m(),Pf=function(){function t(e){this.errors=0,this.sid=et.uuid4(),this.duration=0,this.status=jn.SessionStatus.Ok,this.init=!0,this.ignoreDuration=!1;var r=et.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||et.timestampInSeconds(),e.ignoreDuration&&(this.ignoreDuration=e.ignoreDuration),e.sid&&(this.sid=e.sid.length===32?e.sid:et.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===jn.SessionStatus.Ok?this.update({status:jn.SessionStatus.Exited}):this.update()},t.prototype.toJSON=function(){return et.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:et.dropUndefinedKeys({release:this.release,environment:this.environment,ip_address:this.ipAddress,user_agent:this.userAgent})})},t}();Fn.Session=Pf});var Ln=p(W=>{Object.defineProperty(W,"__esModule",{value:!0});var ne=S(),Do=D(),ie=m(),Hn=Nn(),Mf=Dn();W.API_VERSION=4;var Af=100,vr=function(){function t(e,r,n){r===void 0&&(r=new Hn.Scope),n===void 0&&(n=W.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=Hn.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=ie.uuid4(),i=r;if(!r){var s=void 0;try{throw new Error("Sentry syntheticException")}catch(o){s=o}i={originalException:e,syntheticException:s}}return this._invokeClient("captureException",e,ne.__assign(ne.__assign({},i),{event_id:n})),n},t.prototype.captureMessage=function(e,r,n){var i=this._lastEventId=ie.uuid4(),s=n;if(!n){var o=void 0;try{throw new Error(e)}catch(a){o=a}s={originalException:e,syntheticException:o}}return this._invokeClient("captureMessage",e,r,ne.__assign(ne.__assign({},s),{event_id:i})),i},t.prototype.captureEvent=function(e,r){var n=ie.uuid4();return e.type!=="transaction"&&(this._lastEventId=n),this._invokeClient("captureEvent",e,ne.__assign(ne.__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,s=n.client;if(!(!i||!s)){var o=s.getOptions&&s.getOptions()||{},a=o.beforeBreadcrumb,u=a===void 0?null:a,c=o.maxBreadcrumbs,f=c===void 0?Af:c;if(!(f<=0)){var l=ie.dateTimestampInSeconds(),d=ne.__assign({timestamp:l},e),h=u?ie.consoleSandbox(function(){return u(d,r)}):d;h!==null&&i.addBreadcrumb(h,f)}}},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=Un(this);try{e(this)}finally{Un(r)}},t.prototype.getIntegration=function(e){var r=this.getClient();if(!r)return null;try{return r.getIntegration(e)}catch{return ie.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,s;(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(),(s=(i=this.getStackTop())===null||i===void 0?void 0:i.scope)===null||s===void 0||s.setSession()},t.prototype.startSession=function(e){var r=this.getStackTop(),n=r.scope,i=r.client,s=i&&i.getOptions()||{},o=s.release,a=s.environment,u=ie.getGlobalObject(),c=(u.navigator||{}).userAgent,f=new Mf.Session(ne.__assign(ne.__assign(ne.__assign({release:o,environment:a},n&&{user:n.getUser()}),c&&{userAgent:c}),e));if(n){var l=n.getSession&&n.getSession();l&&l.status===Do.SessionStatus.Ok&&l.update({status:Do.SessionStatus.Exited}),this.endSession(),n.setSession(f)}return f},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 s=this.getStackTop(),o=s.scope,a=s.client;a&&a[e]&&(r=a)[e].apply(r,ne.__spread(n,[o]))},t.prototype._callExtensionMethod=function(e){for(var r=[],n=1;n<arguments.length;n++)r[n-1]=arguments[n];var i=tt(),s=i.__SENTRY__;if(s&&s.extensions&&typeof s.extensions[e]=="function")return s.extensions[e].apply(this,r);ie.logger.warn("Extension method "+e+" couldn't be found, doing nothing.")},t}();W.Hub=vr;function tt(){var t=ie.getGlobalObject();return t.__SENTRY__=t.__SENTRY__||{extensions:{},hub:void 0},t}W.getMainCarrier=tt;function Un(t){var e=tt(),r=he(e);return gr(e,t),r}W.makeMain=Un;function Nf(){var t=tt();return(!Ho(t)||he(t).isOlderThan(W.API_VERSION))&&gr(t,new vr),ie.isNodeEnv()?Ff(t):he(t)}W.getCurrentHub=Nf;function jf(){ie.logger.warn("Function `getActiveDomain` is deprecated and will be removed in a future version.");var t=tt().__SENTRY__;return t&&t.extensions&&t.extensions.domain&&t.extensions.domain.active}W.getActiveDomain=jf;function Ff(t){var e,r,n;try{var i=(n=(r=(e=tt().__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 he(t);if(!Ho(i)||he(i).isOlderThan(W.API_VERSION)){var s=he(t).getStackTop();gr(i,new vr(s.client,Hn.Scope.clone(s.scope)))}return he(i)}catch{return he(t)}}function Ho(t){return!!(t&&t.__SENTRY__&&t.__SENTRY__.hub)}function he(t){return t&&t.__SENTRY__&&t.__SENTRY__.hub||(t.__SENTRY__=t.__SENTRY__||{},t.__SENTRY__.hub=new vr),t.__SENTRY__.hub}W.getHubFromCarrier=he;function gr(t,e){return t?(t.__SENTRY__=t.__SENTRY__||{},t.__SENTRY__.hub=e,!0):!1}W.setHubOnCarrier=gr});var Uo=p(zn=>{Object.defineProperty(zn,"__esModule",{value:!0});var Bn=D(),Gn=m(),Df=Ln(),Hf=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){Gn.logger.warn("Dropping session because custom transport doesn't implement sendSession");return}this._transport.sendSession(e).then(null,function(r){Gn.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 Gn.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=Df.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 Bn.RequestSessionStatus.Errored:return i.errored=(i.errored||0)+1,i.errored;case Bn.RequestSessionStatus.Ok:return i.exited=(i.exited||0)+1,i.exited;case Bn.RequestSessionStatus.Crashed:return i.crashed=(i.crashed||0)+1,i.crashed}},t}();zn.SessionFlusher=Hf});var V=p(Y=>{Object.defineProperty(Y,"__esModule",{value:!0});var Lo=Nn();Y.addGlobalEventProcessor=Lo.addGlobalEventProcessor;Y.Scope=Lo.Scope;var Uf=Dn();Y.Session=Uf.Session;var Lf=Uo();Y.SessionFlusher=Lf.SessionFlusher;var je=Ln();Y.getActiveDomain=je.getActiveDomain;Y.getCurrentHub=je.getCurrentHub;Y.getHubFromCarrier=je.getHubFromCarrier;Y.getMainCarrier=je.getMainCarrier;Y.Hub=je.Hub;Y.makeMain=je.makeMain;Y.setHubOnCarrier=je.setHubOnCarrier});var Bo=p(H=>{Object.defineProperty(H,"__esModule",{value:!0});var mr=S(),Bf=V();function z(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];var n=Bf.getCurrentHub();if(n&&n[t])return n[t].apply(n,mr.__spread(e));throw new Error("No hub defined or "+t+" was not found on the hub, please open a bug report.")}function Gf(t,e){var r;try{throw new Error("Sentry syntheticException")}catch(n){r=n}return z("captureException",t,{captureContext:e,originalException:t,syntheticException:r})}H.captureException=Gf;function zf(t,e){var r;try{throw new Error(t)}catch(s){r=s}var n=typeof e=="string"?e:void 0,i=typeof e!="string"?{captureContext:e}:void 0;return z("captureMessage",t,n,mr.__assign({originalException:t,syntheticException:r},i))}H.captureMessage=zf;function Wf(t){return z("captureEvent",t)}H.captureEvent=Wf;function Yf(t){z("configureScope",t)}H.configureScope=Yf;function Vf(t){z("addBreadcrumb",t)}H.addBreadcrumb=Vf;function Kf(t,e){z("setContext",t,e)}H.setContext=Kf;function $f(t){z("setExtras",t)}H.setExtras=$f;function Jf(t){z("setTags",t)}H.setTags=Jf;function Xf(t,e){z("setExtra",t,e)}H.setExtra=Xf;function Zf(t,e){z("setTag",t,e)}H.setTag=Zf;function Qf(t){z("setUser",t)}H.setUser=Qf;function ed(t){z("withScope",t)}H.withScope=ed;function td(t){for(var e=[],r=1;r<arguments.length;r++)e[r-1]=arguments[r];z.apply(void 0,mr.__spread(["_invokeClient",t],e))}H._callOnClient=td;function rd(t,e){return z("startTransaction",mr.__assign({},t),e)}H.startTransaction=rd});var Wo=p(Wn=>{Object.defineProperty(Wn,"__esModule",{value:!0});var Go=m(),zo="7",nd=function(){function t(e,r,n){r===void 0&&(r={}),this.dsn=e,this._dsnObject=new Go.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="+zo];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 s in e)if(s!=="dsn")if(s==="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(s)+"="+encodeURIComponent(e[s]));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:zo};return Go.urlEncode(r)},t}();Wn.API=nd});var Jo=p(Ee=>{Object.defineProperty(Ee,"__esModule",{value:!0});var yr=S(),Yo=V(),id=m();Ee.installedIntegrations=[];function Vo(t){return t.reduce(function(e,r){return e.every(function(n){return r.name!==n.name})&&e.push(r),e},[])}function Ko(t){var e=t.defaultIntegrations&&yr.__spread(t.defaultIntegrations)||[],r=t.integrations,n=yr.__spread(Vo(e));Array.isArray(r)?n=yr.__spread(n.filter(function(o){return r.every(function(a){return a.name!==o.name})}),Vo(r)):typeof r=="function"&&(n=r(n),n=Array.isArray(n)?n:[n]);var i=n.map(function(o){return o.name}),s="Debug";return i.indexOf(s)!==-1&&n.push.apply(n,yr.__spread(n.splice(i.indexOf(s),1))),n}Ee.getIntegrationsToSetup=Ko;function $o(t){Ee.installedIntegrations.indexOf(t.name)===-1&&(t.setupOnce(Yo.addGlobalEventProcessor,Yo.getCurrentHub),Ee.installedIntegrations.push(t.name),id.logger.log("Integration installed: "+t.name))}Ee.setupIntegration=$o;function sd(t){var e={};return Ko(t).forEach(function(r){e[r.name]=r,$o(r)}),Object.defineProperty(e,"initialized",{value:!0}),e}Ee.setupIntegrations=sd});var Zo=p(Yn=>{Object.defineProperty(Yn,"__esModule",{value:!0});var K=S(),od=V(),Tt=D(),T=m(),ad=Jo(),Xo="Not capturing exception because it's already been captured.",ud=function(){function t(e,r){this._integrations={},this._numProcessing=0,this._backend=new e(r),this._options=r,r.dsn&&(this._dsn=new T.Dsn(r.dsn))}return t.prototype.captureException=function(e,r,n){var i=this;if(T.checkOrSetAlreadyCaught(e)){T.logger.log(Xo);return}var s=r&&r.event_id;return this._process(this._getBackend().eventFromException(e,r).then(function(o){return i._captureEvent(o,r,n)}).then(function(o){s=o})),s},t.prototype.captureMessage=function(e,r,n,i){var s=this,o=n&&n.event_id,a=T.isPrimitive(e)?this._getBackend().eventFromMessage(String(e),r,n):this._getBackend().eventFromException(e,n);return this._process(a.then(function(u){return s._captureEvent(u,n,i)}).then(function(u){o=u})),o},t.prototype.captureEvent=function(e,r,n){var i;if(((i=r)===null||i===void 0?void 0:i.originalException)&&T.checkOrSetAlreadyCaught(r.originalException)){T.logger.log(Xo);return}var s=r&&r.event_id;return this._process(this._captureEvent(e,r,n).then(function(o){s=o})),s},t.prototype.captureSession=function(e){if(!this._isEnabled()){T.logger.warn("SDK not enabled, will not capture session.");return}typeof e.release!="string"?T.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=ad.setupIntegrations(this._options))},t.prototype.getIntegration=function(e){try{return this._integrations[e.id]||null}catch{return T.logger.warn("Cannot retrieve integration "+e.id+" from the current Client"),null}},t.prototype._updateSessionFromEvent=function(e,r){var n,i,s=!1,o=!1,a=r.exception&&r.exception.values;if(a){o=!0;try{for(var u=K.__values(a),c=u.next();!c.done;c=u.next()){var f=c.value,l=f.mechanism;if(l&&l.handled===!1){s=!0;break}}}catch(_){n={error:_}}finally{try{c&&!c.done&&(i=u.return)&&i.call(u)}finally{if(n)throw n.error}}}var d=e.status===Tt.SessionStatus.Ok,h=d&&e.errors===0||d&&s;h&&(e.update(K.__assign(K.__assign({},s&&{status:Tt.SessionStatus.Crashed}),{errors:e.errors||Number(o||s)})),this.captureSession(e))},t.prototype._sendSession=function(e){this._getBackend().sendSession(e)},t.prototype._isClientDoneProcessing=function(e){var r=this;return new T.SyncPromise(function(n){var i=0,s=1,o=setInterval(function(){r._numProcessing==0?(clearInterval(o),n(!0)):(i+=s,e&&i>=e&&(clearInterval(o),n(!1)))},s)})},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,s=this.getOptions().normalizeDepth,o=s===void 0?3:s,a=K.__assign(K.__assign({},e),{event_id:e.event_id||(n&&n.event_id?n.event_id:T.uuid4()),timestamp:e.timestamp||T.dateTimestampInSeconds()});this._applyClientOptions(a),this._applyIntegrationsMetadata(a);var u=r;n&&n.captureContext&&(u=od.Scope.clone(u).update(n.captureContext));var c=T.SyncPromise.resolve(a);return u&&(c=u.applyToEvent(a,n)),c.then(function(f){return typeof o=="number"&&o>0?i._normalizeEvent(f,o):f})},t.prototype._normalizeEvent=function(e,r){if(!e)return null;var n=K.__assign(K.__assign(K.__assign(K.__assign(K.__assign({},e),e.breadcrumbs&&{breadcrumbs:e.breadcrumbs.map(function(o){return K.__assign(K.__assign({},o),o.data&&{data:T.normalize(o.data,r)})})}),e.user&&{user:T.normalize(e.user,r)}),e.contexts&&{contexts:T.normalize(e.contexts,r)}),e.extra&&{extra:T.normalize(e.extra,r)});e.contexts&&e.contexts.trace&&(n.contexts.trace=e.contexts.trace);var i=this.getOptions()._experiments,s=i===void 0?{}:i;return s.ensureNoCircularStructures?T.normalize(n):n},t.prototype._applyClientOptions=function(e){var r=this.getOptions(),n=r.environment,i=r.release,s=r.dist,o=r.maxValueLength,a=o===void 0?250:o;"environment"in e||(e.environment="environment"in r?n:"production"),e.release===void 0&&i!==void 0&&(e.release=i),e.dist===void 0&&s!==void 0&&(e.dist=s),e.message&&(e.message=T.truncate(e.message,a));var u=e.exception&&e.exception.values&&e.exception.values[0];u&&u.value&&(u.value=T.truncate(u.value,a));var c=e.request;c&&c.url&&(c.url=T.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=K.__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){T.logger.error(i)})},t.prototype._processEvent=function(e,r,n){var i=this,s,o,a=this.getOptions(),u=a.beforeSend,c=a.sampleRate,f=this.getTransport();if(!this._isEnabled())return T.SyncPromise.reject(new T.SentryError("SDK not enabled, will not capture event."));var l=e.type==="transaction";return!l&&typeof c=="number"&&Math.random()>c?((o=(s=f).recordLostEvent)===null||o===void 0||o.call(s,Tt.Outcome.SampleRate,"event"),T.SyncPromise.reject(new T.SentryError("Discarding event because it's not included in the random sample (sampling rate = "+c+")"))):this._prepareEvent(e,n,r).then(function(d){var h,_;if(d===null)throw(_=(h=f).recordLostEvent)===null||_===void 0||_.call(h,Tt.Outcome.EventProcessor,e.type||"event"),new T.SentryError("An event processor returned null, will not send event.");var v=r&&r.data&&r.data.__sentry__===!0;if(v||l||!u)return d;var g=u(d,r);return i._ensureBeforeSendRv(g)}).then(function(d){var h,_;if(d===null)throw(_=(h=f).recordLostEvent)===null||_===void 0||_.call(h,Tt.Outcome.BeforeSend,e.type||"event"),new T.SentryError("`beforeSend` returned `null`, will not send event.");var v=n&&n.getSession&&n.getSession();return!l&&v&&i._updateSessionFromEvent(v,d),i._sendEvent(d),d}).then(null,function(d){throw d instanceof T.SentryError?d:(i.captureException(d,{data:{__sentry__:!0},originalException:d}),new T.SentryError(`Event processing pipeline threw an error, original event will not be sent. Details have been sent as a new event.
11
- Reason: `+d))})},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(T.isThenable(e))return e.then(function(n){if(!(T.isPlainObject(n)||n===null))throw new T.SentryError(r);return n},function(n){throw new T.SentryError("beforeSend rejected with "+n)});if(!(T.isPlainObject(e)||e===null))throw new T.SentryError(r);return e},t}();Yn.BaseClient=ud});var Kn=p(Vn=>{Object.defineProperty(Vn,"__esModule",{value:!0});var cd=D(),Qo=m(),ld=function(){function t(){}return t.prototype.sendEvent=function(e){return Qo.SyncPromise.resolve({reason:"NoopTransport: Event has been skipped because no Dsn is configured.",status:cd.Status.Skipped})},t.prototype.close=function(e){return Qo.SyncPromise.resolve(!0)},t}();Vn.NoopTransport=ld});var ea=p($n=>{Object.defineProperty($n,"__esModule",{value:!0});var rt=m(),fd=Kn(),dd=function(){function t(e){this._options=e,this._options.dsn||rt.logger.warn("No DSN provided, backend will not do anything."),this._transport=this._setupTransport()}return t.prototype.eventFromException=function(e,r){throw new rt.SentryError("Backend has to implement `eventFromException` method")},t.prototype.eventFromMessage=function(e,r,n){throw new rt.SentryError("Backend has to implement `eventFromMessage` method")},t.prototype.sendEvent=function(e){this._transport.sendEvent(e).then(null,function(r){rt.logger.error("Error while sending event: "+r)})},t.prototype.sendSession=function(e){if(!this._transport.sendSession){rt.logger.warn("Dropping session because custom transport doesn't implement sendSession");return}this._transport.sendSession(e).then(null,function(r){rt.logger.error("Error while sending session: "+r)})},t.prototype.getTransport=function(){return this._transport},t.prototype._setupTransport=function(){return new fd.NoopTransport},t}();$n.BaseBackend=dd});var ra=p(br=>{Object.defineProperty(br,"__esModule",{value:!0});var Fe=S();function ta(t){if(!(!t.metadata||!t.metadata.sdk)){var e=t.metadata.sdk,r=e.name,n=e.version;return{name:r,version:n}}}function pd(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=Fe.__spread(t.sdk.integrations||[],e.integrations||[]),t.sdk.packages=Fe.__spread(t.sdk.packages||[],e.packages||[])),t}function hd(t,e){var r=ta(e),n=JSON.stringify(Fe.__assign(Fe.__assign({sent_at:new Date().toISOString()},r&&{sdk:r}),e.forceEnvelope()&&{dsn:e.getDsn().toString()})),i="aggregates"in t?"sessions":"session",s=JSON.stringify({type:i});return{body:n+`
12
- `+s+`
13
- `+JSON.stringify(t),type:i,url:e.getEnvelopeEndpointWithUrlEncodedAuth()}}br.sessionToSentryRequest=hd;function _d(t,e){var r=ta(e),n=t.type||"event",i=n==="transaction"||e.forceEnvelope(),s=t.debug_meta||{},o=s.transactionSampling,a=Fe.__rest(s,["transactionSampling"]),u=o||{},c=u.method,f=u.rate;Object.keys(a).length===0?delete t.debug_meta:t.debug_meta=a;var l={body:JSON.stringify(r?pd(t,e.metadata.sdk):t),type:n,url:i?e.getEnvelopeEndpointWithUrlEncodedAuth():e.getStoreEndpointWithUrlEncodedAuth()};if(i){var d=JSON.stringify(Fe.__assign(Fe.__assign({event_id:t.event_id,sent_at:new Date().toISOString()},r&&{sdk:r}),e.forceEnvelope()&&{dsn:e.getDsn().toString()})),h=JSON.stringify({type:n,sample_rates:[{id:c,rate:f}]}),_=d+`
14
- `+h+`
15
- `+l.body;l.body=_}return l}br.eventToSentryRequest=_d});var na=p(Jn=>{Object.defineProperty(Jn,"__esModule",{value:!0});var vd=V(),gd=m();function md(t,e){var r;e.debug===!0&&gd.logger.enable();var n=vd.getCurrentHub();(r=n.getScope())===null||r===void 0||r.update(e.initialScope);var i=new t(e);n.bindClient(i)}Jn.initAndBind=md});var ia=p(Xn=>{Object.defineProperty(Xn,"__esModule",{value:!0});Xn.SDK_VERSION="6.16.1"});var oa=p(Zn=>{Object.defineProperty(Zn,"__esModule",{value:!0});var sa,yd=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(){sa=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 sa.apply(n,e)}},t.id="FunctionToString",t}();Zn.FunctionToString=yd});var ua=p(ei=>{Object.defineProperty(ei,"__esModule",{value:!0});var Qn=S(),aa=V(),B=m(),bd=[/^Script error\.?$/,/^Javascript error: Script error\.? on line 0$/],Sd=function(){function t(e){e===void 0&&(e={}),this._options=e,this.name=t.id}return t.prototype.setupOnce=function(){aa.addGlobalEventProcessor(function(e){var r=aa.getCurrentHub();if(!r)return e;var n=r.getIntegration(t);if(n){var i=r.getClient(),s=i?i.getOptions():{},o=typeof n._mergeOptions=="function"?n._mergeOptions(s):{};return typeof n._shouldDropEvent!="function"?e:n._shouldDropEvent(e,o)?null:e}return e})},t.prototype._shouldDropEvent=function(e,r){return this._isSentryError(e,r)?(B.logger.warn(`Event dropped due to being internal Sentry Error.
16
- Event: `+B.getEventDescription(e)),!0):this._isIgnoredError(e,r)?(B.logger.warn("Event dropped due to being matched by `ignoreErrors` option.\nEvent: "+B.getEventDescription(e)),!0):this._isDeniedUrl(e,r)?(B.logger.warn("Event dropped due to being matched by `denyUrls` option.\nEvent: "+B.getEventDescription(e)+`.
17
- Url: `+this._getEventFilterUrl(e)),!0):this._isAllowedUrl(e,r)?!1:(B.logger.warn("Event dropped due to not being matched by `allowUrls` option.\nEvent: "+B.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 B.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 B.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 B.isMatchingPattern(n,i)}):!0},t.prototype._mergeOptions=function(e){return e===void 0&&(e={}),{allowUrls:Qn.__spread(this._options.whitelistUrls||[],this._options.allowUrls||[],e.whitelistUrls||[],e.allowUrls||[]),denyUrls:Qn.__spread(this._options.blacklistUrls||[],this._options.denyUrls||[],e.blacklistUrls||[],e.denyUrls||[]),ignoreErrors:Qn.__spread(this._options.ignoreErrors||[],e.ignoreErrors||[],bd),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,s=r.value,o=s===void 0?"":s;return[""+o,i+": "+o]}catch{return B.logger.error("Cannot extract message for event "+B.getEventDescription(e)),[]}return[]},t.prototype._getLastValidUrl=function(e){e===void 0&&(e=[]);for(var r,n,i=e.length-1;i>=0;i--){var s=e[i];if(((r=s)===null||r===void 0?void 0:r.filename)!=="<anonymous>"&&((n=s)===null||n===void 0?void 0:n.filename)!=="[native code]")return s.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 B.logger.error("Cannot extract url for event "+B.getEventDescription(e)),null}},t.id="InboundFilters",t}();ei.InboundFilters=Sd});var ca=p(Sr=>{Object.defineProperty(Sr,"__esModule",{value:!0});var Ed=oa();Sr.FunctionToString=Ed.FunctionToString;var Td=ua();Sr.InboundFilters=Td.InboundFilters});var N=p(O=>{Object.defineProperty(O,"__esModule",{value:!0});var $=Bo();O.addBreadcrumb=$.addBreadcrumb;O.captureException=$.captureException;O.captureEvent=$.captureEvent;O.captureMessage=$.captureMessage;O.configureScope=$.configureScope;O.startTransaction=$.startTransaction;O.setContext=$.setContext;O.setExtra=$.setExtra;O.setExtras=$.setExtras;O.setTag=$.setTag;O.setTags=$.setTags;O.setUser=$.setUser;O.withScope=$.withScope;var nt=V();O.addGlobalEventProcessor=nt.addGlobalEventProcessor;O.getCurrentHub=nt.getCurrentHub;O.getHubFromCarrier=nt.getHubFromCarrier;O.Hub=nt.Hub;O.makeMain=nt.makeMain;O.Scope=nt.Scope;var Od=Wo();O.API=Od.API;var wd=Zo();O.BaseClient=wd.BaseClient;var xd=ea();O.BaseBackend=xd.BaseBackend;var la=ra();O.eventToSentryRequest=la.eventToSentryRequest;O.sessionToSentryRequest=la.sessionToSentryRequest;var Cd=na();O.initAndBind=Cd.initAndBind;var Id=Kn();O.NoopTransport=Id.NoopTransport;var Rd=ia();O.SDK_VERSION=Rd.SDK_VERSION;var qd=ca();O.Integrations=qd});var fa=p(Er=>{(function(t,e){let r=typeof Er=="object"?Er:typeof t=="object"?t:{};e(r),typeof define=="function"&&define.amd&&define("lru",r)})(Er,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,f=this.limit||Number.MAX_VALUE;this._keymap.clear();let l=u[Symbol.iterator]();for(let d=l.next();!d.done;d=l.next()){let h=new i(d.value[0],d.value[1]);if(this._keymap.set(h.key,h),c?(c[e]=h,h[r]=c):this.oldest=h,c=h,f--==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 f=this._keymap.get(u);return f?(f.value=c,this._markEntryAsUsed(f),this):(this._keymap.set(u,f=new i(u,c)),this.newest?(this.newest[e]=f,f[r]=this.newest):this.oldest=f,this.newest=f,++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 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,u.value]}):{done:!0,value:void 0}};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}):{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 o(this.oldest)},n.prototype.values=function(){return new a(this.oldest)},n.prototype.entries=function(){return this},n.prototype[Symbol.iterator]=function(){return new s(this.oldest)},n.prototype.forEach=function(u,c){typeof c!="object"&&(c=this);let f=this.oldest;for(;f;)u.call(c,f.value,f.key,this),f=f[e]},n.prototype.toJSON=function(){for(var u=new Array(this.size),c=0,f=this.oldest;f;)u[c++]={key:f.key,value:f.value},f=f[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 da=p(ti=>{Object.defineProperty(ti,"__esModule",{value:!0});function kd(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,s=null,o=null,a=null,u=null,c=n[5]==="native";if(n[1]){o=n[1];var f=o.lastIndexOf(".");if(o[f-1]==="."&&f--,f>0){i=o.substr(0,f),s=o.substr(f+1);var l=i.indexOf(".Module");l>0&&(o=o.substr(l+1),i=i.substr(0,l))}a=null}s&&(a=i,u=s),s==="<anonymous>"&&(u=null,o=null);var d={columnNumber:parseInt(n[4],10)||null,fileName:n[2]||null,functionName:o,lineNumber:parseInt(n[3],10)||null,methodName:u,native:c,typeName:a};return d}}).filter(function(r){return!!r})}ti.parse=kd});var ni=p(Te=>{Object.defineProperty(Te,"__esModule",{value:!0});var se=m(),Pd=require("fs"),Md=fa(),Ad=da(),Nd=7,ri=new Md.LRUMap(100);function jd(){ri.clear()}Te.resetFileContentCache=jd;function Fd(t){try{return t.functionName||t.typeName+"."+(t.methodName||"<anonymous>")}catch{return"<anonymous>"}}var Dd=(require.main&&require.main.filename&&se.dirname(require.main.filename)||global.process.cwd())+"/";function Hd(t,e){e||(e=Dd);var r=se.basename(t,".js");t=se.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 Ud(t){return t.length===0?se.SyncPromise.resolve({}):new se.SyncPromise(function(e){for(var r={},n=0,i=function(o){var a=t[o],u=ri.get(a);if(u!==void 0)return u!==null&&(r[a]=u),n++,n===t.length&&e(r),"continue";Pd.readFile(a,function(c,f){var l=c?null:f.toString();r[a]=l,ri.set(a,l),n++,n===t.length&&e(r)})},s=0;s<t.length;s++)i(s)})}function pa(t){var e=Ad.parse(t);return e||[]}Te.extractStackFromError=pa;function ha(t,e){var r=[],n=e&&e.frameContextLines!==void 0?e.frameContextLines:Nd,i=t.map(function(s){var o,a={colno:s.columnNumber,filename:((o=s.fileName)===null||o===void 0?void 0:o.startsWith("file://"))?s.fileName.substr(7):s.fileName||"",function:Fd(s),lineno:s.lineNumber},u=s.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=Hd(a.filename),!u&&n>0&&r.indexOf(a.filename)===-1&&r.push(a.filename)),a});if(n<=0)return se.SyncPromise.resolve(i);try{return Ld(r,i,n)}catch{return se.SyncPromise.resolve(i)}}Te.parseStack=ha;function Ld(t,e,r){return new se.SyncPromise(function(n){return Ud(t).then(function(i){var s=e.map(function(o){if(o.filename&&i[o.filename])try{var a=i[o.filename].split(`
20
- `);se.addContextToFrame(a,o,r)}catch{}return o});n(s)})})}function _a(t,e){var r=t.name||t.constructor.name,n=pa(t);return new se.SyncPromise(function(i){return ha(n,e).then(function(s){var o={stacktrace:{frames:va(s)},type:r,value:t.message};i(o)})})}Te.getExceptionFromError=_a;function Bd(t,e){return new se.SyncPromise(function(r){return _a(t,e).then(function(n){r({exception:{values:[n]}})})})}Te.parseError=Bd;function va(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()}Te.prepareFramesForEvent=va});var si=p(ii=>{Object.defineProperty(ii,"__esModule",{value:!0});ii.SDK_NAME="sentry.javascript.node"});var Tr=p(ai=>{Object.defineProperty(ai,"__esModule",{value:!0});var _e=S(),ga=N(),ma=D(),De=m(),Gd=require("fs"),zd=require("url"),Wd=si(),oi={event:"error",transaction:"transaction",session:"session",attachment:"attachment"},Yd=function(){function t(e){this.options=e,this._buffer=new De.PromiseBuffer(30),this._rateLimits={},this.urlParser=function(r){return new zd.URL(r)},this._api=new ga.API(e.dsn,e._metadata,e.tunnel)}return t.prototype.sendEvent=function(e){throw new De.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,s=i.no_proxy,o=i.http_proxy,a=i.https_proxy,u=this.options,c=u.httpProxy,f=u.httpsProxy,l=e==="http"?c||o:f||c||a||o;if(!s)return l;var d=this._api.getDsn(),h=d.host,_=d.port;try{for(var v=_e.__values(s.split(",")),g=v.next();!g.done;g=v.next()){var w=g.value;if(h.endsWith(w)||(h+":"+_).endsWith(w))return}}catch(C){r={error:C}}finally{try{g&&!g.done&&(n=v.return)&&n.call(v)}finally{if(r)throw r.error}}return l},t.prototype._getRequestOptions=function(e){var r=_e.__assign(_e.__assign({},this._api.getRequestHeaders(Wd.SDK_NAME,ga.SDK_VERSION)),this.options.headers),n=e.hostname,i=e.pathname,s=e.port,o=e.protocol,a=""+i;return _e.__assign({agent:this.client,headers:r,hostname:n,method:"POST",path:a,port:s,protocol:o},this.options.caCerts&&{ca:Gd.readFileSync(this.options.caCerts)})},t.prototype._disabledUntil=function(e){var r=oi[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,s,o=Date.now(),a=e["x-sentry-rate-limits"],u=e["retry-after"];if(a){try{for(var c=_e.__values(a.trim().split(",")),f=c.next();!f.done;f=c.next()){var l=f.value,d=l.split(":",2),h=parseInt(d[0],10),_=(isNaN(h)?60:h)*1e3;try{for(var v=(i=void 0,_e.__values(d[1]&&d[1].split(";")||["all"])),g=v.next();!g.done;g=v.next()){var w=g.value,C=_e.__spread(Object.keys(oi).map(function(I){return oi[I]}),["all"]);C.includes(w)&&(this._rateLimits[w]=new Date(o+_))}}catch(I){i={error:I}}finally{try{g&&!g.done&&(s=v.return)&&s.call(v)}finally{if(i)throw i.error}}}}catch(I){r={error:I}}finally{try{f&&!f.done&&(n=c.return)&&n.call(c)}finally{if(r)throw r.error}}return!0}else if(u)return this._rateLimits.all=new Date(o+De.parseRetryAfterHeader(o,u)),!0;return!1},t.prototype._send=function(e,r){return _e.__awaiter(this,void 0,void 0,function(){var n=this;return _e.__generator(this,function(i){if(!this.module)throw new De.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(s,o){if(!n.module)throw new De.SentryError("No module available");var a=n._getRequestOptions(n.urlParser(e.url)),u=n.module.request(a,function(c){var f=c.statusCode||500,l=ma.Status.fromHttpCode(f);c.setEncoding("utf8");var d=c.headers?c.headers["retry-after"]:"";d=Array.isArray(d)?d[0]:d;var h=c.headers?c.headers["x-sentry-rate-limits"]:"";h=Array.isArray(h)?h[0]:h;var _={"x-sentry-rate-limits":h,"retry-after":d},v=n._handleRateLimit(_);if(v&&De.logger.warn("Too many "+e.type+" requests, backing off until: "+n._disabledUntil(e.type)),l===ma.Status.Success)s({status:l});else{var g="HTTP Error ("+f+")";c.headers&&c.headers["x-sentry-error"]&&(g+=": "+c.headers["x-sentry-error"]),o(new De.SentryError(g))}c.on("data",function(){}),c.on("end",function(){})});u.on("error",o),u.end(e.body)})})]})})},t}();ai.BaseTransport=Yd});var ba=p((Kg,ya)=>{var it=1e3,st=it*60,ot=st*60,He=ot*24,Vd=He*7,Kd=He*365.25;ya.exports=function(t,e){e=e||{};var r=typeof t;if(r==="string"&&t.length>0)return $d(t);if(r==="number"&&isFinite(t))return e.long?Xd(t):Jd(t);throw new Error("val is not a non-empty string or a valid number. val="+JSON.stringify(t))};function $d(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*Kd;case"weeks":case"week":case"w":return r*Vd;case"days":case"day":case"d":return r*He;case"hours":case"hour":case"hrs":case"hr":case"h":return r*ot;case"minutes":case"minute":case"mins":case"min":case"m":return r*st;case"seconds":case"second":case"secs":case"sec":case"s":return r*it;case"milliseconds":case"millisecond":case"msecs":case"msec":case"ms":return r;default:return}}}}function Jd(t){var e=Math.abs(t);return e>=He?Math.round(t/He)+"d":e>=ot?Math.round(t/ot)+"h":e>=st?Math.round(t/st)+"m":e>=it?Math.round(t/it)+"s":t+"ms"}function Xd(t){var e=Math.abs(t);return e>=He?Or(t,e,He,"day"):e>=ot?Or(t,e,ot,"hour"):e>=st?Or(t,e,st,"minute"):e>=it?Or(t,e,it,"second"):t+" ms"}function Or(t,e,r,n){var i=e>=r*1.5;return Math.round(t/r)+" "+n+(i?"s":"")}});var ui=p(($g,Sa)=>{function Zd(t){r.debug=r,r.default=r,r.coerce=u,r.disable=s,r.enable=i,r.enabled=o,r.humanize=ba(),r.destroy=c,Object.keys(t).forEach(f=>{r[f]=t[f]}),r.names=[],r.skips=[],r.formatters={};function e(f){let l=0;for(let d=0;d<f.length;d++)l=(l<<5)-l+f.charCodeAt(d),l|=0;return r.colors[Math.abs(l)%r.colors.length]}r.selectColor=e;function r(f){let l,d=null,h,_;function v(...g){if(!v.enabled)return;let w=v,C=Number(new Date),I=C-(l||C);w.diff=I,w.prev=l,w.curr=C,l=C,g[0]=r.coerce(g[0]),typeof g[0]!="string"&&g.unshift("%O");let be=0;g[0]=g[0].replace(/%([a-zA-Z%])/g,(rn,yc)=>{if(rn==="%%")return"%";be++;let bs=r.formatters[yc];if(typeof bs=="function"){let bc=g[be];rn=bs.call(w,bc),g.splice(be,1),be--}return rn}),r.formatArgs.call(w,g),(w.log||r.log).apply(w,g)}return v.namespace=f,v.useColors=r.useColors(),v.color=r.selectColor(f),v.extend=n,v.destroy=r.destroy,Object.defineProperty(v,"enabled",{enumerable:!0,configurable:!1,get:()=>d!==null?d:(h!==r.namespaces&&(h=r.namespaces,_=r.enabled(f)),_),set:g=>{d=g}}),typeof r.init=="function"&&r.init(v),v}function n(f,l){let d=r(this.namespace+(typeof l=="undefined"?":":l)+f);return d.log=this.log,d}function i(f){r.save(f),r.namespaces=f,r.names=[],r.skips=[];let l,d=(typeof f=="string"?f:"").split(/[\s,]+/),h=d.length;for(l=0;l<h;l++)!d[l]||(f=d[l].replace(/\*/g,".*?"),f[0]==="-"?r.skips.push(new RegExp("^"+f.substr(1)+"$")):r.names.push(new RegExp("^"+f+"$")))}function s(){let f=[...r.names.map(a),...r.skips.map(a).map(l=>"-"+l)].join(",");return r.enable(""),f}function o(f){if(f[f.length-1]==="*")return!0;let l,d;for(l=0,d=r.skips.length;l<d;l++)if(r.skips[l].test(f))return!1;for(l=0,d=r.names.length;l<d;l++)if(r.names[l].test(f))return!0;return!1}function a(f){return f.toString().substring(2,f.toString().length-2).replace(/\.\*\?$/,"*")}function u(f){return f instanceof Error?f.stack||f.message:f}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}Sa.exports=Zd});var Ea=p((J,wr)=>{J.formatArgs=ep;J.save=tp;J.load=rp;J.useColors=Qd;J.storage=np();J.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`."))}})();J.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 Qd(){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 ep(t){if(t[0]=(this.useColors?"%c":"")+this.namespace+(this.useColors?" %c":" ")+t[0]+(this.useColors?"%c ":" ")+"+"+wr.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)}J.log=console.debug||console.log||(()=>{});function tp(t){try{t?J.storage.setItem("debug",t):J.storage.removeItem("debug")}catch{}}function rp(){let t;try{t=J.storage.getItem("debug")}catch{}return!t&&typeof process!="undefined"&&"env"in process&&(t=process.env.DEBUG),t}function np(){try{return localStorage}catch{}}wr.exports=ui()(J);var{formatters:ip}=wr.exports;ip.j=function(t){try{return JSON.stringify(t)}catch(e){return"[UnexpectedJSONParseError]: "+e.message}}});var Oa=p((Jg,Ta)=>{"use strict";Ta.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 Ca=p((Xg,xa)=>{"use strict";var sp=require("os"),wa=require("tty"),Q=Oa(),{env:M}=process,Oe;Q("no-color")||Q("no-colors")||Q("color=false")||Q("color=never")?Oe=0:(Q("color")||Q("colors")||Q("color=true")||Q("color=always"))&&(Oe=1);"FORCE_COLOR"in M&&(M.FORCE_COLOR==="true"?Oe=1:M.FORCE_COLOR==="false"?Oe=0:Oe=M.FORCE_COLOR.length===0?1:Math.min(parseInt(M.FORCE_COLOR,10),3));function ci(t){return t===0?!1:{level:t,hasBasic:!0,has256:t>=2,has16m:t>=3}}function li(t,e){if(Oe===0)return 0;if(Q("color=16m")||Q("color=full")||Q("color=truecolor"))return 3;if(Q("color=256"))return 2;if(t&&!e&&Oe===void 0)return 0;let r=Oe||0;if(M.TERM==="dumb")return r;if(process.platform==="win32"){let n=sp.release().split(".");return Number(n[0])>=10&&Number(n[2])>=10586?Number(n[2])>=14931?3:2:1}if("CI"in M)return["TRAVIS","CIRCLECI","APPVEYOR","GITLAB_CI","GITHUB_ACTIONS","BUILDKITE"].some(n=>n in M)||M.CI_NAME==="codeship"?1:r;if("TEAMCITY_VERSION"in M)return/^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(M.TEAMCITY_VERSION)?1:0;if(M.COLORTERM==="truecolor")return 3;if("TERM_PROGRAM"in M){let n=parseInt((M.TERM_PROGRAM_VERSION||"").split(".")[0],10);switch(M.TERM_PROGRAM){case"iTerm.app":return n>=3?3:2;case"Apple_Terminal":return 2}}return/-256(color)?$/i.test(M.TERM)?2:/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(M.TERM)||"COLORTERM"in M?1:r}function op(t){let e=li(t,t&&t.isTTY);return ci(e)}xa.exports={supportsColor:op,stdout:ci(li(!0,wa.isatty(1))),stderr:ci(li(!0,wa.isatty(2)))}});var Ra=p((j,Cr)=>{var ap=require("tty"),xr=require("util");j.init=hp;j.log=fp;j.formatArgs=cp;j.save=dp;j.load=pp;j.useColors=up;j.destroy=xr.deprecate(()=>{},"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");j.colors=[6,2,3,4,5,1];try{let t=Ca();t&&(t.stderr||t).level>=2&&(j.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{}j.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,s)=>s.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 up(){return"colors"in j.inspectOpts?Boolean(j.inspectOpts.colors):ap.isatty(process.stderr.fd)}function cp(t){let{namespace:e,useColors:r}=this;if(r){let n=this.color,i="\x1B[3"+(n<8?n:"8;5;"+n),s=` ${i};1m${e} \x1B[0m`;t[0]=s+t[0].split(`
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+`
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(`
21
21
  `).join(`
22
- `+s),t.push(i+"m+"+Cr.exports.humanize(this.diff)+"\x1B[0m")}else t[0]=lp()+e+" "+t[0]}function lp(){return j.inspectOpts.hideDate?"":new Date().toISOString()+" "}function fp(...t){return process.stderr.write(xr.format(...t)+`
23
- `)}function dp(t){t?process.env.DEBUG=t:delete process.env.DEBUG}function pp(){return process.env.DEBUG}function hp(t){t.inspectOpts={};let e=Object.keys(j.inspectOpts);for(let r=0;r<e.length;r++)t.inspectOpts[e[r]]=j.inspectOpts[e[r]]}Cr.exports=ui()(j);var{formatters:Ia}=Cr.exports;Ia.o=function(t){return this.inspectOpts.colors=this.useColors,xr.inspect(t,this.inspectOpts).split(`
24
- `).map(e=>e.trim()).join(" ")};Ia.O=function(t){return this.inspectOpts.colors=this.useColors,xr.inspect(t,this.inspectOpts)}});var Ir=p((Zg,fi)=>{typeof process=="undefined"||process.type==="renderer"||process.browser===!0||process.__nwjs?fi.exports=Ea():fi.exports=Ra()});var qa=p(di=>{"use strict";Object.defineProperty(di,"__esModule",{value:!0});function _p(t){return function(e,r){return new Promise((n,i)=>{t.call(this,e,r,(s,o)=>{s?i(s):n(o)})})}}di.default=_p});var Ma=p((hi,Pa)=>{"use strict";var ka=hi&&hi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},vp=require("events"),gp=ka(Ir()),mp=ka(qa()),Ot=gp.default("agent-base");function yp(t){return Boolean(t)&&typeof t.addRequest=="function"}function pi(){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 Rr(t,e){return new Rr.Agent(t,e)}(function(t){class e extends vp.EventEmitter{constructor(n,i){super();let s=i;typeof n=="function"?this.callback=n:n&&(s=n),this.timeout=null,s&&typeof s.timeout=="number"&&(this.timeout=s.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:pi()?443:80}set defaultPort(n){this.explicitDefaultPort=n}get protocol(){return typeof this.explicitProtocol=="string"?this.explicitProtocol:pi()?"https:":"http:"}set protocol(n){this.explicitProtocol=n}callback(n,i,s){throw new Error('"agent-base" has no default implementation, you must subclass and override `callback()`')}addRequest(n,i){let s=Object.assign({},i);typeof s.secureEndpoint!="boolean"&&(s.secureEndpoint=pi()),s.host==null&&(s.host="localhost"),s.port==null&&(s.port=s.secureEndpoint?443:80),s.protocol==null&&(s.protocol=s.secureEndpoint?"https:":"http:"),s.host&&s.path&&delete s.path,delete s.agent,delete s.hostname,delete s._defaultAgent,delete s.defaultPort,delete s.createConnection,n._last=!0,n.shouldKeepAlive=!1;let o=!1,a=null,u=s.timeout||this.timeout,c=h=>{n._hadError||(n.emit("error",h),n._hadError=!0)},f=()=>{a=null,o=!0;let h=new Error(`A "socket" was not created for HTTP request before ${u}ms`);h.code="ETIMEOUT",c(h)},l=h=>{o||(a!==null&&(clearTimeout(a),a=null),c(h))},d=h=>{if(o)return;if(a!=null&&(clearTimeout(a),a=null),yp(h)){Ot("Callback returned another Agent instance %o",h.constructor.name),h.addRequest(n,s);return}if(h){h.once("free",()=>{this.freeSocket(h,s)}),n.onSocket(h);return}let _=new Error(`no Duplex stream was returned to agent-base for \`${n.method} ${n.path}\``);c(_)};if(typeof this.callback!="function"){c(new Error("`callback` is not defined"));return}this.promisifiedCallback||(this.callback.length>=3?(Ot("Converting legacy callback function to promise"),this.promisifiedCallback=mp.default(this.callback)):this.promisifiedCallback=this.callback),typeof u=="number"&&u>0&&(a=setTimeout(f,u)),"port"in s&&typeof s.port!="number"&&(s.port=Number(s.port));try{Ot("Resolving socket for %o request: %o",s.protocol,`${n.method} ${n.path}`),Promise.resolve(this.promisifiedCallback(n,s)).then(d,l)}catch(h){Promise.reject(h).catch(l)}}freeSocket(n,i){Ot("Freeing socket %o %o",n.constructor.name,i),n.destroy()}destroy(){Ot("Destroying agent %o",this.constructor.name)}}t.Agent=e,t.prototype=t.Agent.prototype})(Rr||(Rr={}));Pa.exports=Rr});var Aa=p(xt=>{"use strict";var bp=xt&&xt.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(xt,"__esModule",{value:!0});var Sp=bp(Ir()),wt=Sp.default("https-proxy-agent:parse-proxy-response");function Ep(t){return new Promise((e,r)=>{let n=0,i=[];function s(){let l=t.read();l?f(l):t.once("readable",s)}function o(){t.removeListener("end",u),t.removeListener("error",c),t.removeListener("close",a),t.removeListener("readable",s)}function a(l){wt("onclose had error %o",l)}function u(){wt("onend")}function c(l){o(),wt("onerror %o",l),r(l)}function f(l){i.push(l),n+=l.length;let d=Buffer.concat(i,n);if(d.indexOf(`\r
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
26
26
  \r
27
- `)===-1){wt("have not received end of HTTP headers yet..."),s();return}let _=d.toString("ascii",0,d.indexOf(`\r
28
- `)),v=+_.split(" ")[1];wt("got proxy server response: %o",_),e({statusCode:v,buffered:d})}t.on("error",c),t.on("close",a),t.on("end",u),s()})}xt.default=Ep});var Da=p(Ue=>{"use strict";var Tp=Ue&&Ue.__awaiter||function(t,e,r,n){function i(s){return s instanceof r?s:new r(function(o){o(s)})}return new(r||(r=Promise))(function(s,o){function a(f){try{c(n.next(f))}catch(l){o(l)}}function u(f){try{c(n.throw(f))}catch(l){o(l)}}function c(f){f.done?s(f.value):i(f.value).then(a,u)}c((n=n.apply(t,e||[])).next())})},at=Ue&&Ue.__importDefault||function(t){return t&&t.__esModule?t:{default:t}};Object.defineProperty(Ue,"__esModule",{value:!0});var Na=at(require("net")),ja=at(require("tls")),Op=at(require("url")),wp=at(require("assert")),xp=at(Ir()),Cp=Ma(),Ip=at(Aa()),Ct=xp.default("https-proxy-agent:agent"),Fa=class extends Cp.Agent{constructor(e){let r;if(typeof e=="string"?r=Op.default.parse(e):r=e,!r)throw new Error("an HTTP(S) proxy server `host` and `port` must be specified!");Ct("creating new HttpsProxyAgent instance: %o",r);super(r);let n=Object.assign({},r);this.secureProxy=r.secureProxy||kp(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 Tp(this,void 0,void 0,function*(){let{proxy:n,secureProxy:i}=this,s;i?(Ct("Creating `tls.Socket`: %o",n),s=ja.default.connect(n)):(Ct("Creating `net.Socket`: %o",n),s=Na.default.connect(n));let o=Object.assign({},n.headers),u=`CONNECT ${`${r.host}:${r.port}`} HTTP/1.1\r
29
- `;n.auth&&(o["Proxy-Authorization"]=`Basic ${Buffer.from(n.auth).toString("base64")}`);let{host:c,port:f,secureEndpoint:l}=r;qp(f,l)||(c+=`:${f}`),o.Host=c,o.Connection="close";for(let g of Object.keys(o))u+=`${g}: ${o[g]}\r
30
- `;let d=Ip.default(s);s.write(`${u}\r
31
- `);let{statusCode:h,buffered:_}=yield d;if(h===200){if(e.once("socket",Rp),r.secureEndpoint){let g=r.servername||r.host;if(!g)throw new Error('Could not determine "servername"');return Ct("Upgrading socket connection to TLS"),ja.default.connect(Object.assign(Object.assign({},Pp(r,"host","hostname","path","port")),{socket:s,servername:g}))}return s}s.destroy();let v=new Na.default.Socket;return v.readable=!0,e.once("socket",g=>{Ct("replaying proxy buffer for failed request"),wp.default(g.listenerCount("data")>0),g.push(_),g.push(null)}),v})}};Ue.default=Fa;function Rp(t){t.resume()}function qp(t,e){return Boolean(!e&&t===80||e&&t===443)}function kp(t){return typeof t=="string"?/^https:?$/i.test(t):!1}function Pp(t,...e){let r={},n;for(n in t)e.includes(n)||(r[n]=t[n]);return r}});var mi=p((gi,Ha)=>{"use strict";var Mp=gi&&gi.__importDefault||function(t){return t&&t.__esModule?t:{default:t}},_i=Mp(Da());function vi(t){return new _i.default(t)}(function(t){t.HttpsProxyAgent=_i.default,t.prototype=_i.default.prototype})(vi||(vi={}));Ha.exports=vi});var Ba=p(yi=>{Object.defineProperty(yi,"__esModule",{value:!0});var Ap=S(),Ua=N(),La=require("http"),Np=Tr(),jp=function(t){Ap.__extends(e,t);function e(r){var n=t.call(this,r)||this;n.options=r;var i=n._getProxy("http");return n.module=La,n.client=i?new(mi())(i):new La.Agent({keepAlive:!1,maxSockets:30,timeout:2e3}),n}return e.prototype.sendEvent=function(r){return this._send(Ua.eventToSentryRequest(r,this._api),r)},e.prototype.sendSession=function(r){return this._send(Ua.sessionToSentryRequest(r,this._api),r)},e}(Np.BaseTransport);yi.HTTPTransport=jp});var Wa=p(bi=>{Object.defineProperty(bi,"__esModule",{value:!0});var Fp=S(),Ga=N(),za=require("https"),Dp=Tr(),Hp=function(t){Fp.__extends(e,t);function e(r){var n=t.call(this,r)||this;n.options=r;var i=n._getProxy("https");return n.module=za,n.client=i?new(mi())(i):new za.Agent({keepAlive:!1,maxSockets:30,timeout:2e3}),n}return e.prototype.sendEvent=function(r){return this._send(Ga.eventToSentryRequest(r,this._api),r)},e.prototype.sendSession=function(r){return this._send(Ga.sessionToSentryRequest(r,this._api),r)},e}(Dp.BaseTransport);bi.HTTPSTransport=Hp});var Si=p(It=>{Object.defineProperty(It,"__esModule",{value:!0});var Up=Tr();It.BaseTransport=Up.BaseTransport;var Lp=Ba();It.HTTPTransport=Lp.HTTPTransport;var Bp=Wa();It.HTTPSTransport=Bp.HTTPSTransport});var Ti=p(Ei=>{Object.defineProperty(Ei,"__esModule",{value:!0});var we=S(),Ya=N(),Gp=D(),ve=m(),qr=ni(),Va=Si(),zp=function(t){we.__extends(e,t);function e(){return t!==null&&t.apply(this,arguments)||this}return e.prototype.eventFromException=function(r,n){var i=this,s=r,o=n&&n.data&&n.data.mechanism,a=o||{handled:!0,type:"generic"};if(!ve.isError(r)){if(ve.isPlainObject(r)){var u="Non-Error exception captured with keys: "+ve.extractExceptionKeysForMessage(r);Ya.getCurrentHub().configureScope(function(c){c.setExtra("__serialized__",ve.normalizeToSize(r))}),s=n&&n.syntheticException||new Error(u),s.message=u}else s=n&&n.syntheticException||new Error(r),s.message=r;a.synthetic=!0}return new ve.SyncPromise(function(c,f){return qr.parseError(s,i._options).then(function(l){ve.addExceptionTypeValue(l,void 0,void 0),ve.addExceptionMechanism(l,a),c(we.__assign(we.__assign({},l),{event_id:n&&n.event_id}))}).then(null,f)})},e.prototype.eventFromMessage=function(r,n,i){var s=this;n===void 0&&(n=Gp.Severity.Info);var o={event_id:i&&i.event_id,level:n,message:r};return new ve.SyncPromise(function(a){if(s._options.attachStacktrace&&i&&i.syntheticException){var u=i.syntheticException?qr.extractStackFromError(i.syntheticException):[];qr.parseStack(u,s._options).then(function(c){o.stacktrace={frames:qr.prepareFramesForEvent(c)},a(o)}).then(null,function(){a(o)})}else a(o)})},e.prototype._setupTransport=function(){if(!this._options.dsn)return t.prototype._setupTransport.call(this);var r=new ve.Dsn(this._options.dsn),n=we.__assign(we.__assign(we.__assign(we.__assign(we.__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 Va.HTTPTransport(n):new Va.HTTPSTransport(n)},e}(Ya.BaseBackend);Ei.NodeBackend=zp});var xi=p(wi=>{Object.defineProperty(wi,"__esModule",{value:!0});var Wp=S(),Oi=N(),Yp=V(),kr=D(),Ka=m(),Vp=Ti(),Kp=function(t){Wp.__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:Oi.SDK_VERSION}],version:Oi.SDK_VERSION},n=t.call(this,Vp.NodeBackend,r)||this,n}return e.prototype.captureException=function(r,n,i){if(this._options.autoSessionTracking&&this._sessionFlusher&&i){var s=i.getRequestSession();s&&s.status===kr.RequestSessionStatus.Ok&&(s.status=kr.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 s=r.type||"exception",o=s==="exception"&&r.exception&&r.exception.values&&r.exception.values.length>0;if(o){var a=i.getRequestSession();a&&a.status===kr.RequestSessionStatus.Ok&&(a.status=kr.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 Yp.SessionFlusher(this.getTransport(),{release:n,environment:i}):Ka.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():Ka.logger.warn("Discarded request mode session because autoSessionTracking option was disabled")},e}(Oi.BaseClient);wi.NodeClient=Kp});var Za=p(Ci=>{Object.defineProperty(Ci,"__esModule",{value:!0});var $a=S(),Ja=N(),Rt=D(),$p=m(),Jp=require("util"),Xa=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(){var e,r;try{for(var n=$a.__values(["debug","info","warn","error","log"]),i=n.next();!i.done;i=n.next()){var s=i.value;$p.fill(console,s,Xp(s))}}catch(o){e={error:o}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(e)throw e.error}}},t.id="Console",t}();Ci.Console=Xa;function Xp(t){return function(r){var n;switch(t){case"debug":n=Rt.Severity.Debug;break;case"error":n=Rt.Severity.Error;break;case"info":n=Rt.Severity.Info;break;case"warn":n=Rt.Severity.Warning;break;default:n=Rt.Severity.Log}return function(){Ja.getCurrentHub().getIntegration(Xa)&&Ja.getCurrentHub().addBreadcrumb({category:"console",level:n,message:Jp.format.apply(void 0,arguments)},{input:$a.__spread(arguments),level:t}),r.apply(this,arguments)}}}});var ru=p(Le=>{Object.defineProperty(Le,"__esModule",{value:!0});var Ii=S(),Zp=N(),Qp=m(),Qa=require("url"),eu=Qp.parseSemver(process.versions.node);function eh(t){var e,r=(e=Zp.getCurrentHub().getClient())===null||e===void 0?void 0:e.getDsn();return r?t.includes(r.host):!1}Le.isSentryRequest=eh;function tu(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}Le.extractUrl=tu;function th(t,e,r){var n,i,s;if(!t)return t;var o=Ii.__read(t.split(" "),2),a=o[0],u=o[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=tu(e)),((s=u)===null||s===void 0?void 0:s.startsWith("///"))&&(u=u.slice(2)),a+" "+u}Le.cleanSpanDescription=th;function Ri(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}Le.urlToOptions=Ri;function rh(t,e){var r,n,i,s,o,a,u,c,f,l;return typeof e[e.length-1]=="function"&&(f=e.pop()),typeof e[0]=="string"?l=Ri(new Qa.URL(e[0])):e[0]instanceof Qa.URL?l=Ri(e[0]):l=e[0],e.length===2&&(l=Ii.__assign(Ii.__assign({},l),e[1])),l.protocol===void 0&&(eu.major&&eu.major>8?l.protocol=((n=(r=t)===null||r===void 0?void 0:r.globalAgent)===null||n===void 0?void 0:n.protocol)||((i=l.agent)===null||i===void 0?void 0:i.protocol)||((s=l._defaultAgent)===null||s===void 0?void 0:s.protocol):l.protocol=((o=l.agent)===null||o===void 0?void 0:o.protocol)||((a=l._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)),f?[l,f]:[l]}Le.normalizeRequestArgs=rh});var au=p(ki=>{Object.defineProperty(ki,"__esModule",{value:!0});var nu=S(),qi=N(),ut=m(),qt=ru(),iu=ut.parseSemver(process.versions.node),su=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=nh(this._breadcrumbs,this._tracing),r=require("http");if(ut.fill(r,"get",e),ut.fill(r,"request",e),iu.major&&iu.major>8){var n=require("https");ut.fill(n,"get",e),ut.fill(n,"request",e)}}},t.id="Http",t}();ki.Http=su;function nh(t,e){return function(n){return function(){for(var s=[],o=0;o<arguments.length;o++)s[o]=arguments[o];var a=this,u=qt.normalizeRequestArgs(this,s),c=u[0],f=qt.extractUrl(c);if(qt.isSentryRequest(f))return n.apply(a,u);var l,d,h=qi.getCurrentHub().getScope();if(h&&e&&(d=h.getSpan(),d)){l=d.startChild({description:(c.method||"GET")+" "+f,op:"http.client"});var _=l.toTraceparent();ut.logger.log("[Tracing] Adding sentry-trace header "+_+" to outgoing request to "+f+": "),c.headers=nu.__assign(nu.__assign({},c.headers),{"sentry-trace":_})}return n.apply(a,u).once("response",function(v){var g=this;t&&ou("response",f,g,v),e&&l&&(v.statusCode&&l.setHttpStatus(v.statusCode),l.description=qt.cleanSpanDescription(l.description,c,g),l.finish())}).once("error",function(){var v=this;t&&ou("error",f,v),e&&l&&(l.setHttpStatus(500),l.description=qt.cleanSpanDescription(l.description,c,v),l.finish())})}}}function ou(t,e,r,n){!qi.getCurrentHub().getIntegration(su)||qi.getCurrentHub().addBreadcrumb({category:"http",data:{method:r.method,status_code:n&&n.statusCode,url:e},type:"http"},{event:t,request:r,response:n})}});var Ai=p(Mi=>{Object.defineProperty(Mi,"__esModule",{value:!0});var ih=N(),Pi=m(),sh=2e3;function oh(t){console.error(t&&t.stack?t.stack:t);var e=ih.getCurrentHub().getClient();if(e===void 0){Pi.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||sh;Pi.forget(e.close(n).then(function(i){i||Pi.logger.warn("We reached the timeout for emptying the request buffer, still exiting now!"),global.process.exit(1)}))}Mi.logAndExitProcess=oh});var lu=p(Ni=>{Object.defineProperty(Ni,"__esModule",{value:!0});var uu=N(),ah=D(),uh=m(),cu=Ai(),ch=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,s=!1,o;return function(a){var u=cu.logAndExitProcess,c=uu.getCurrentHub().getClient();if(e._options.onFatalError?u=e._options.onFatalError:c&&c.getOptions().onFatalError&&(u=c.getOptions().onFatalError),n)s?(uh.logger.warn("uncaught exception after calling fatal error shutdown callback - this is bad! forcing shutdown"),cu.logAndExitProcess(a)):i||(i=!0,setTimeout(function(){s||(s=!0,u(o,a))},r));else{var f=uu.getCurrentHub();o=a,n=!0,f.getIntegration(t)?f.withScope(function(l){l.setLevel(ah.Severity.Fatal),f.captureException(a,{originalException:a,data:{mechanism:{handled:!1,type:"onuncaughtexception"}}}),s||(s=!0,u(a))}):s||(s=!0,u(a))}}},t.id="OnUncaughtException",t}();Ni.OnUncaughtException=ch});var du=p(ji=>{Object.defineProperty(ji,"__esModule",{value:!0});var lh=N(),fu=m(),fh=Ai(),dh=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=lh.getCurrentHub();if(!n.getIntegration(t)){this._handleRejection(e);return}var i=r.domain&&r.domain.sentryContext||{};n.withScope(function(s){s.setExtra("unhandledPromiseRejection",!0),i.user&&s.setUser(i.user),i.tags&&s.setTags(i.tags),i.extra&&s.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"?fu.consoleSandbox(function(){console.warn(r),console.error(e&&e.stack?e.stack:e)}):this._options.mode==="strict"&&(fu.consoleSandbox(function(){console.warn(r)}),fh.logAndExitProcess(e))},t.id="OnUnhandledRejection",t}();ji.OnUnhandledRejection=dh});var _u=p(Fi=>{Object.defineProperty(Fi,"__esModule",{value:!0});var pu=S(),hu=N(),ct=m(),ph=ni(),hh="cause",_h=5,vh=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._key=e.key||hh,this._limit=e.limit||_h}return t.prototype.setupOnce=function(){hu.addGlobalEventProcessor(function(e,r){var n=hu.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||!ct.isInstanceOf(r.originalException,Error)?ct.SyncPromise.resolve(e):new ct.SyncPromise(function(i){n._walkErrorTree(r.originalException,n._key).then(function(s){e&&e.exception&&e.exception.values&&(e.exception.values=pu.__spread(s,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=[]),!ct.isInstanceOf(e[r],Error)||n.length+1>=this._limit?ct.SyncPromise.resolve(n):new ct.SyncPromise(function(s,o){ph.getExceptionFromError(e[r]).then(function(a){i._walkErrorTree(e[r],r,pu.__spread([a],n)).then(s).then(null,function(){o()})}).then(null,function(){o()})})},t.id="LinkedErrors",t}();Fi.LinkedErrors=vh});var yu=p(Hi=>{Object.defineProperty(Hi,"__esModule",{value:!0});var vu=S(),gu=require("fs"),mu=require("path"),Di;function gh(){try{return require.cache?Object.keys(require.cache):[]}catch{return[]}}function mh(){var t=require.main&&require.main.paths||[],e=gh(),r={},n={};return e.forEach(function(i){var s=i,o=function(){var a=s;if(s=mu.dirname(a),!(!s||a===s||n[a])){if(t.indexOf(s)<0)return o();var u=mu.join(a,"package.json");if(n[a]=!0,!gu.existsSync(u))return o();try{var c=JSON.parse(gu.readFileSync(u,"utf8"));r[c.name]=c.version}catch{}}};o()}),r}var yh=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(e,r){var n=this;e(function(i){return r().getIntegration(t)?vu.__assign(vu.__assign({},i),{modules:n._getModules()}):i})},t.prototype._getModules=function(){return Di||(Di=mh()),Di},t.id="Modules",t}();Hi.Modules=yh});var Ui=p(xe=>{Object.defineProperty(xe,"__esModule",{value:!0});var bh=Za();xe.Console=bh.Console;var Sh=au();xe.Http=Sh.Http;var Eh=lu();xe.OnUncaughtException=Eh.OnUncaughtException;var Th=du();xe.OnUnhandledRejection=Th.OnUnhandledRejection;var Oh=_u();xe.LinkedErrors=Oh.LinkedErrors;var wh=yu();xe.Modules=wh.Modules});var Bi=p(ue=>{Object.defineProperty(ue,"__esModule",{value:!0});var kt=S(),Ce=N(),bu=V(),Su=D(),Li=m(),xh=require("domain"),Ch=xi(),Pt=Ui();ue.defaultIntegrations=[new Ce.Integrations.InboundFilters,new Ce.Integrations.FunctionToString,new Pt.Console,new Pt.Http,new Pt.OnUncaughtException,new Pt.OnUnhandledRejection,new Pt.LinkedErrors];function Ih(t){t===void 0&&(t={});var e,r=bu.getMainCarrier(),n=((e=r.__SENTRY__)===null||e===void 0?void 0:e.integrations)||[];if(t.defaultIntegrations=t.defaultIntegrations===!1?[]:kt.__spread(Array.isArray(t.defaultIntegrations)?t.defaultIntegrations:ue.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 s=Eu();s!==void 0?t.release=s: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),xh.active&&bu.setHubOnCarrier(r,Ce.getCurrentHub()),Ce.initAndBind(Ch.NodeClient,t),t.autoSessionTracking&&Mh()}ue.init=Ih;function Rh(){return Ce.getCurrentHub().lastEventId()}ue.lastEventId=Rh;function qh(t){return kt.__awaiter(this,void 0,void 0,function(){var e;return kt.__generator(this,function(r){return e=Ce.getCurrentHub().getClient(),e?[2,e.flush(t)]:(Li.logger.warn("Cannot flush events. No client defined."),[2,Promise.resolve(!1)])})})}ue.flush=qh;function kh(t){return kt.__awaiter(this,void 0,void 0,function(){var e;return kt.__generator(this,function(r){return e=Ce.getCurrentHub().getClient(),e?[2,e.close(t)]:(Li.logger.warn("Cannot flush events and disable SDK. No client defined."),[2,Promise.resolve(!1)])})})}ue.close=kh;function Ph(t){if(t===void 0)return!1;var e=t&&t.getOptions();return e&&e.autoSessionTracking!==void 0?e.autoSessionTracking:!1}ue.isAutoSessionTrackingEnabled=Ph;function Eu(t){if(process.env.SENTRY_RELEASE)return process.env.SENTRY_RELEASE;var e=Li.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}ue.getSentryRelease=Eu;function Mh(){var t=Ce.getCurrentHub();t.startSession(),process.on("beforeExit",function(){var e,r=(e=t.getScope())===null||e===void 0?void 0:e.getSession(),n=[Su.SessionStatus.Exited,Su.SessionStatus.Crashed];r&&!n.includes(r.status)&&t.endSession()})}});var Ou=p(zi=>{Object.defineProperty(zi,"__esModule",{value:!0});var Tu=S(),Pr=require("fs"),Gi=require("path");function Ah(t){var e=Gi.resolve(t);if(!Pr.existsSync(e))throw new Error("Cannot read contents of "+e+". Directory does not exist.");if(!Pr.statSync(e).isDirectory())throw new Error("Cannot read contents of "+e+", because it is not a directory.");var r=function(n){return Pr.readdirSync(n).reduce(function(i,s){var o=Gi.join(n,s);return Pr.statSync(o).isDirectory()?Tu.__spread(i,r(o)):Tu.__spread(i,[o])},[])};return r(e).map(function(n){return Gi.relative(e,n)})}zi.deepReadDirSync=Ah});var Ie=p(lt=>{Object.defineProperty(lt,"__esModule",{value:!0});var wu;(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"})(wu=lt.SpanStatus||(lt.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})(wu=lt.SpanStatus||(lt.SpanStatus={}))});var Re=p(ce=>{Object.defineProperty(ce,"__esModule",{value:!0});var xu=V();ce.TRACEPARENT_REGEXP=new RegExp("^[ \\t]*([0-9a-f]{32})?-?([0-9a-f]{16})?-?([01])?[ \\t]*$");function Nh(t){t===void 0&&(t=(e=xu.getCurrentHub().getClient())===null||e===void 0?void 0:e.getOptions());var e;return!!t&&("tracesSampleRate"in t||"tracesSampler"in t)}ce.hasTracingEnabled=Nh;function jh(t){var e=t.match(ce.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]}}}ce.extractTraceparentData=jh;function Fh(t){t===void 0&&(t=xu.getCurrentHub());var e,r;return(r=(e=t)===null||e===void 0?void 0:e.getScope())===null||r===void 0?void 0:r.getTransaction()}ce.getActiveTransaction=Fh;function Dh(t){return t/1e3}ce.msToSec=Dh;function Hh(t){return t*1e3}ce.secToMs=Hh;var Uh=m();ce.stripUrlQueryAndFragment=Uh.stripUrlQueryAndFragment});var Ru=p(Yi=>{Object.defineProperty(Yi,"__esModule",{value:!0});var Wi=m(),Cu=Ie(),Lh=Re();function Bh(){Wi.addInstrumentationHandler({callback:Iu,type:"error"}),Wi.addInstrumentationHandler({callback:Iu,type:"unhandledrejection"})}Yi.registerErrorInstrumentation=Bh;function Iu(){var t=Lh.getActiveTransaction();t&&(Wi.logger.log("[Tracing] Transaction: "+Cu.SpanStatus.InternalError+" -> Global error occured"),t.setStatus(Cu.SpanStatus.InternalError))}});var Vi=p(Mr=>{Object.defineProperty(Mr,"__esModule",{value:!0});Mr.FINISH_REASON_TAG="finishReason";Mr.IDLE_TRANSACTION_FINISH_REASONS=["heartbeatFailed","idleTimeout","documentHidden"]});var Nr=p(Ar=>{Object.defineProperty(Ar,"__esModule",{value:!0});var ft=S(),Be=m(),Ki=Ie(),Gh=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}();Ar.SpanRecorder=Gh;var zh=function(){function t(e){if(this.traceId=Be.uuid4(),this.spanId=Be.uuid4().substring(16),this.startTimestamp=Be.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(ft.__assign(ft.__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=ft.__assign(ft.__assign({},this.tags),(n={},n[e]=r,n)),this},t.prototype.setData=function(e,r){var n;return this.data=ft.__assign(ft.__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=Ki.SpanStatus.fromHttpCode(e);return r!==Ki.SpanStatus.UnknownError&&this.setStatus(r),this},t.prototype.isSuccess=function(){return this.status===Ki.SpanStatus.Ok},t.prototype.finish=function(e){this.endTimestamp=typeof e=="number"?e:Be.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 Be.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,s,o;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=(s=e.tags,s??{}),this.traceId=(o=e.traceId,o??this.traceId),this},t.prototype.getTraceContext=function(){return Be.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 Be.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}();Ar.Span=zh});var jr=p($i=>{Object.defineProperty($i,"__esModule",{value:!0});var dt=S(),qu=V(),Wh=D(),pt=m(),ku=Nr(),Yh=function(t){dt.__extends(e,t);function e(r,n){var i=t.call(this,r)||this;return i._measurements={},i._hub=qu.getCurrentHub(),pt.isInstanceOf(n,qu.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 ku.SpanRecorder(r)),this.spanRecorder.add(this)},e.prototype.setMeasurements=function(r){this._measurements=dt.__assign({},r)},e.prototype.setMetadata=function(r){this.metadata=dt.__assign(dt.__assign({},this.metadata),r)},e.prototype.finish=function(r){var n=this,i,s,o,a,u;if(this.endTimestamp===void 0){if(this.name||(pt.logger.warn("Transaction has no name, falling back to `<unlabeled transaction>`."),this.name="<unlabeled transaction>"),t.prototype.finish.call(this,r),this.sampled!==!0){pt.logger.log("[Tracing] Discarding transaction because its trace was not chosen to be sampled."),(u=(o=(i=this._hub.getClient())===null||i===void 0?void 0:(s=i).getTransport)===null||o===void 0?void 0:(a=o.call(s)).recordLostEvent)===null||u===void 0||u.call(a,Wh.Outcome.SampleRate,"transaction");return}var c=this.spanRecorder?this.spanRecorder.spans.filter(function(d){return d!==n&&d.endTimestamp}):[];this._trimEnd&&c.length>0&&(this.endTimestamp=c.reduce(function(d,h){return d.endTimestamp&&h.endTimestamp?d.endTimestamp>h.endTimestamp?d:h:d}).endTimestamp);var f={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},l=Object.keys(this._measurements).length>0;return l&&(pt.logger.log("[Measurements] Adding measurements to transaction",JSON.stringify(this._measurements,void 0,2)),f.measurements=this._measurements),pt.logger.log("[Tracing] Finishing "+this.op+" transaction: "+this.name+"."),this._hub.captureEvent(f)}},e.prototype.toContext=function(){var r=t.prototype.toContext.call(this);return pt.dropUndefinedKeys(dt.__assign(dt.__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}(ku.Span);$i.Transaction=Yh});var Dr=p(qe=>{Object.defineProperty(qe,"__esModule",{value:!0});var Ji=S(),U=m(),Fr=Vi(),Vh=Nr(),Pu=Ie(),Kh=jr();qe.DEFAULT_IDLE_TIMEOUT=1e3;qe.HEARTBEAT_INTERVAL=5e3;var Mu=function(t){Ji.__extends(e,t);function e(r,n,i,s){i===void 0&&(i="");var o=t.call(this,s)||this;return o._pushActivity=r,o._popActivity=n,o.transactionSpanId=i,o}return e.prototype.add=function(r){var n=this;r.spanId!==this.transactionSpanId&&(r.finish=function(i){r.endTimestamp=typeof i=="number"?i:U.timestampWithMs(),n._popActivity(r.spanId)},r.endTimestamp===void 0&&this._pushActivity(r.spanId)),t.prototype.add.call(this,r)},e}(Vh.SpanRecorder);qe.IdleTransactionSpanRecorder=Mu;var $h=function(t){Ji.__extends(e,t);function e(r,n,i,s){i===void 0&&(i=qe.DEFAULT_IDLE_TIMEOUT),s===void 0&&(s=!1);var o=t.call(this,r,n)||this;return o._idleHub=n,o._idleTimeout=i,o._onScope=s,o.activities={},o._heartbeatCounter=0,o._finished=!1,o._beforeFinishCallbacks=[],n&&s&&(Au(n),U.logger.log("Setting idle transaction on scope. Span ID: "+o.spanId),n.configureScope(function(a){return a.setSpan(o)})),o._initTimeout=setTimeout(function(){o._finished||o.finish()},o._idleTimeout),o}return e.prototype.finish=function(r){var n,i,s=this;if(r===void 0&&(r=U.timestampWithMs()),this._finished=!0,this.activities={},this.spanRecorder){U.logger.log("[Tracing] finishing IdleTransaction",new Date(r*1e3).toISOString(),this.op);try{for(var o=Ji.__values(this._beforeFinishCallbacks),a=o.next();!a.done;a=o.next()){var u=a.value;u(this,r)}}catch(c){n={error:c}}finally{try{a&&!a.done&&(i=o.return)&&i.call(o)}finally{if(n)throw n.error}}this.spanRecorder.spans=this.spanRecorder.spans.filter(function(c){if(c.spanId===s.spanId)return!0;c.endTimestamp||(c.endTimestamp=r,c.setStatus(Pu.SpanStatus.Cancelled),U.logger.log("[Tracing] cancelling span since transaction ended early",JSON.stringify(c,void 0,2)));var f=c.startTimestamp<r;return f||U.logger.log("[Tracing] discarding Span since it happened after Transaction was finished",JSON.stringify(c,void 0,2)),f}),U.logger.log("[Tracing] flushing IdleTransaction")}else U.logger.log("[Tracing] No active IdleTransaction");return this._onScope&&Au(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(o){n._finished||n._pushActivity(o)},s=function(o){n._finished||n._popActivity(o)};this.spanRecorder=new Mu(i,s,this.spanId,r),U.logger.log("Starting heartbeat"),this._pingHeartbeat()}this.spanRecorder.add(this)},e.prototype._pushActivity=function(r){this._initTimeout&&(clearTimeout(this._initTimeout),this._initTimeout=void 0),U.logger.log("[Tracing] pushActivity: "+r),this.activities[r]=!0,U.logger.log("[Tracing] new activities count",Object.keys(this.activities).length)},e.prototype._popActivity=function(r){var n=this;if(this.activities[r]&&(U.logger.log("[Tracing] popActivity "+r),delete this.activities[r],U.logger.log("[Tracing] new activities count",Object.keys(this.activities).length)),Object.keys(this.activities).length===0){var i=this._idleTimeout,s=U.timestampWithMs()+i/1e3;setTimeout(function(){n._finished||(n.setTag(Fr.FINISH_REASON_TAG,Fr.IDLE_TRANSACTION_FINISH_REASONS[1]),n.finish(s))},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?(U.logger.log("[Tracing] Transaction finished because of no change for 3 heart beats"),this.setStatus(Pu.SpanStatus.DeadlineExceeded),this.setTag(Fr.FINISH_REASON_TAG,Fr.IDLE_TRANSACTION_FINISH_REASONS[0]),this.finish()):this._pingHeartbeat()}},e.prototype._pingHeartbeat=function(){var r=this;U.logger.log("pinging Heartbeat -> current counter: "+this._heartbeatCounter),setTimeout(function(){r._beat()},qe.HEARTBEAT_INTERVAL)},e}(Kh.Transaction);qe.IdleTransaction=$h;function Au(t){if(t){var e=t.getScope();if(e){var r=e.getTransaction();r&&e.setSpan(void 0)}}}});var Ur=p((Mt,At)=>{Object.defineProperty(Mt,"__esModule",{value:!0});var Xi=S(),Nu=V(),Hr=D(),ee=m(),Jh=Ru(),Xh=Dr(),Zh=jr(),Qh=Re();function e_(){var t=this.getScope();if(t){var e=t.getSpan();if(e)return{"sentry-trace":e.toTraceparent()}}return{}}function ju(t,e,r){if(!Qh.hasTracingEnabled(e))return t.sampled=!1,t;if(t.sampled!==void 0)return t.setMetadata({transactionSampling:{method:Hr.TransactionSamplingMethod.Explicit}}),t;var n;return typeof e.tracesSampler=="function"?(n=e.tracesSampler(r),t.setMetadata({transactionSampling:{method:Hr.TransactionSamplingMethod.Sampler,rate:Number(n)}})):r.parentSampled!==void 0?(n=r.parentSampled,t.setMetadata({transactionSampling:{method:Hr.TransactionSamplingMethod.Inheritance}})):(n=e.tracesSampleRate,t.setMetadata({transactionSampling:{method:Hr.TransactionSamplingMethod.Rate,rate:Number(n)}})),t_(n)?n?(t.sampled=Math.random()<n,t.sampled?(ee.logger.log("[Tracing] starting "+t.op+" transaction - "+t.name),t):(ee.logger.log("[Tracing] Discarding transaction because it's not included in the random sample (sampling rate = "+Number(n)+")"),t)):(ee.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):(ee.logger.warn("[Tracing] Discarding transaction because of invalid sample rate."),t.sampled=!1,t)}function t_(t){return isNaN(t)||!(typeof t=="number"||typeof t=="boolean")?(ee.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?(ee.logger.warn("[Tracing] Given sample rate is invalid. Sample rate must be between 0 and 1. Got "+t+"."),!1):!0}function r_(t,e){var r,n,i=((r=this.getClient())===null||r===void 0?void 0:r.getOptions())||{},s=new Zh.Transaction(t,this);return s=ju(s,i,Xi.__assign({parentSampled:t.parentSampled,transactionContext:t},e)),s.sampled&&s.initSpanRecorder((n=i._experiments)===null||n===void 0?void 0:n.maxSpans),s}function n_(t,e,r,n,i){var s,o,a=((s=t.getClient())===null||s===void 0?void 0:s.getOptions())||{},u=new Xh.IdleTransaction(e,t,r,n);return u=ju(u,a,Xi.__assign({parentSampled:e.parentSampled,transactionContext:e},i)),u.sampled&&u.initSpanRecorder((o=a._experiments)===null||o===void 0?void 0:o.maxSpans),u}Mt.startIdleTransaction=n_;function Fu(){var t=Nu.getMainCarrier();!t.__SENTRY__||(t.__SENTRY__.extensions=t.__SENTRY__.extensions||{},t.__SENTRY__.extensions.startTransaction||(t.__SENTRY__.extensions.startTransaction=r_),t.__SENTRY__.extensions.traceHeaders||(t.__SENTRY__.extensions.traceHeaders=e_))}Mt._addTracingExtensions=Fu;function i_(){var t=Nu.getMainCarrier();if(!!t.__SENTRY__){var e={mongodb:function(){var n=ee.dynamicRequire(At,"./integrations/node/mongo");return new n.Mongo},mongoose:function(){var n=ee.dynamicRequire(At,"./integrations/node/mongo");return new n.Mongo({mongoose:!0})},mysql:function(){var n=ee.dynamicRequire(At,"./integrations/node/mysql");return new n.Mysql},pg:function(){var n=ee.dynamicRequire(At,"./integrations/node/postgres");return new n.Postgres}},r=Object.keys(e).filter(function(n){return!!ee.loadModule(n)}).map(function(n){try{return e[n]()}catch{return}}).filter(function(n){return n});r.length>0&&(t.__SENTRY__.integrations=Xi.__spread(t.__SENTRY__.integrations||[],r))}}function s_(){Fu(),ee.isNodeEnv()&&i_(),Jh.registerErrorInstrumentation()}Mt.addExtensionMethods=s_});var Hu=p(Qi=>{Object.defineProperty(Qi,"__esModule",{value:!0});var Zi=S(),o_=m(),a_=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){o_.logger.error("ExpressIntegration is missing an Express instance");return}l_(this._router,this._methods)},t.id="Express",t}();Qi.Express=a_;function Du(t,e){var r=t.length;switch(r){case 2:return function(n,i){var s=i.__sentry_transaction;if(s){var o=s.startChild({description:t.name,op:"express.middleware."+e});i.once("finish",function(){o.finish()})}return t.call(this,n,i)};case 3:return function(n,i,s){var o,a=i.__sentry_transaction,u=(o=a)===null||o===void 0?void 0:o.startChild({description:t.name,op:"express.middleware."+e});t.call(this,n,i,function(){for(var c=[],f=0;f<arguments.length;f++)c[f]=arguments[f];var l;(l=u)===null||l===void 0||l.finish(),s.call.apply(s,Zi.__spread([this],c))})};case 4:return function(n,i,s,o){var a,u=s.__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,s,function(){for(var f=[],l=0;l<arguments.length;l++)f[l]=arguments[l];var d;(d=c)===null||d===void 0||d.finish(),o.call.apply(o,Zi.__spread([this],f))})};default:throw new Error("Express middleware takes 2-4 arguments. Got: "+r)}}function u_(t,e){return t.map(function(r){return typeof r=="function"?Du(r,e):Array.isArray(r)?r.map(function(n){return typeof n=="function"?Du(n,e):n}):r})}function c_(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,Zi.__spread([this],u_(n,e)))},t}function l_(t,e){e===void 0&&(e=[]),e.forEach(function(r){return c_(t,r)})}});var Uu=p(es=>{Object.defineProperty(es,"__esModule",{value:!0});var Nt=m(),f_=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=Nt.loadModule("pg");if(!i){Nt.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)){Nt.logger.error("Postgres Integration was unable to access 'pg-native' bindings.");return}var s=(this._usePgNative?i.native:i).Client;Nt.fill(s.prototype,"query",function(o){return function(a,u,c){var f,l,d,h=r().getScope(),_=(f=h)===null||f===void 0?void 0:f.getSpan(),v=(l=_)===null||l===void 0?void 0:l.startChild({description:typeof a=="string"?a:a.text,op:"db"});if(typeof c=="function")return o.call(this,a,u,function(w,C){var I;(I=v)===null||I===void 0||I.finish(),c(w,C)});if(typeof u=="function")return o.call(this,a,function(w,C){var I;(I=v)===null||I===void 0||I.finish(),u(w,C)});var g=typeof u!="undefined"?o.call(this,a,u):o.call(this,a);return Nt.isThenable(g)?g.then(function(w){var C;return(C=v)===null||C===void 0||C.finish(),w}):((d=v)===null||d===void 0||d.finish(),g)}})},t.id="Postgres",t}();es.Postgres=f_});var Lu=p(rs=>{Object.defineProperty(rs,"__esModule",{value:!0});var ts=m(),d_=function(){function t(){this.name=t.id}return t.prototype.setupOnce=function(e,r){var n=ts.loadModule("mysql/lib/Connection.js");if(!n){ts.logger.error("Mysql Integration was unable to require `mysql` package.");return}ts.fill(n,"createQuery",function(i){return function(s,o,a){var u,c,f=r().getScope(),l=(u=f)===null||u===void 0?void 0:u.getSpan(),d=(c=l)===null||c===void 0?void 0:c.startChild({description:typeof s=="string"?s:s.sql,op:"db"});return typeof a=="function"?i.call(this,s,o,function(h,_,v){var g;(g=d)===null||g===void 0||g.finish(),a(h,_,v)}):typeof o=="function"?i.call(this,s,function(h,_,v){var g;(g=d)===null||g===void 0||g.finish(),o(h,_,v)}):i.call(this,s,o,a)}})},t.id="Mysql",t}();rs.Mysql=d_});var Bu=p(is=>{Object.defineProperty(is,"__esModule",{value:!0});var ns=S(),Lr=m(),p_=["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"],h_={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"]},__=function(){function t(e){e===void 0&&(e={}),this.name=t.id,this._operations=Array.isArray(e.operations)?e.operations:p_,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=Lr.loadModule(n);if(!i){Lr.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(s){return i._patchOperation(e,s,n)})},t.prototype._patchOperation=function(e,r,n){if(r in e.prototype){var i=this._getSpanContextFromOperationArguments.bind(this);Lr.fill(e.prototype,r,function(s){return function(){for(var o=[],a=0;a<arguments.length;a++)o[a]=arguments[a];var u,c,f,l,d=o[o.length-1],h=n().getScope(),_=(u=h)===null||u===void 0?void 0:u.getSpan();if(typeof d!="function"||r==="mapReduce"&&o.length===2){var v=(c=_)===null||c===void 0?void 0:c.startChild(i(this,r,o)),g=s.call.apply(s,ns.__spread([this],o));return Lr.isThenable(g)?g.then(function(C){var I;return(I=v)===null||I===void 0||I.finish(),C}):((f=v)===null||f===void 0||f.finish(),g)}var w=(l=_)===null||l===void 0?void 0:l.startChild(i(this,r,o.slice(0,-1)));return s.call.apply(s,ns.__spread([this],o.slice(0,-1),[function(C,I){var be;(be=w)===null||be===void 0||be.finish(),d(C,I)}]))}})}},t.prototype._getSpanContextFromOperationArguments=function(e,r,n){var i={collectionName:e.collectionName,dbName:e.dbName,namespace:e.namespace},s={op:"db",description:r,data:i},o=h_[r],a=Array.isArray(this._describeOperations)?this._describeOperations.includes(r):this._describeOperations;if(!o||!a)return s;try{if(r==="mapReduce"){var u=ns.__read(n,2),c=u[0],f=u[1];i[o[0]]=typeof c=="string"?c:c.name||"<anonymous>",i[o[1]]=typeof f=="string"?f:f.name||"<anonymous>"}else for(var l=0;l<o.length;l++)i[o[l]]=JSON.stringify(n[l])}catch{}return s},t.id="Mongo",t}();is.Mongo=__});var Wu=p(os=>{Object.defineProperty(os,"__esModule",{value:!0});var ss=m(),Gu=Vi(),zu=Ie(),v_=Re(),Br=ss.getGlobalObject();function g_(){Br&&Br.document?Br.document.addEventListener("visibilitychange",function(){var t=v_.getActiveTransaction();Br.document.hidden&&t&&(ss.logger.log("[Tracing] Transaction: "+zu.SpanStatus.Cancelled+" -> since tab moved to the background, op: "+t.op),t.status||t.setStatus(zu.SpanStatus.Cancelled),t.setTag("visibilitychange","document.hidden"),t.setTag(Gu.FINISH_REASON_TAG,Gu.IDLE_TRANSACTION_FINISH_REASONS[2]),t.finish())}):ss.logger.warn("[Tracing] Could not set up background tab detection due to lack of global document")}os.registerBackgroundTabDetection=g_});var Gr=p(as=>{Object.defineProperty(as,"__esModule",{value:!0});as.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 Yu=p(us=>{Object.defineProperty(us,"__esModule",{value:!0});us.generateUniqueID=function(){return"v2-"+Date.now()+"-"+(Math.floor(Math.random()*(9e12-1))+1e12)}});var zr=p(cs=>{Object.defineProperty(cs,"__esModule",{value:!0});var m_=Yu();cs.initMetric=function(t,e){return{name:t,value:e??-1,delta:0,entries:[],id:m_.generateUniqueID()}}});var Wr=p(ls=>{Object.defineProperty(ls,"__esModule",{value:!0});ls.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 jt=p(fs=>{Object.defineProperty(fs,"__esModule",{value:!0});var y_=m();fs.onHidden=function(t,e){var r=function(n){(n.type==="pagehide"||y_.getGlobalObject().document.visibilityState==="hidden")&&(t(n),e&&(removeEventListener("visibilitychange",r,!0),removeEventListener("pagehide",r,!0)))};addEventListener("visibilitychange",r,!0),addEventListener("pagehide",r,!0)}});var Vu=p(ds=>{Object.defineProperty(ds,"__esModule",{value:!0});var b_=Gr(),S_=zr(),E_=Wr(),T_=jt();ds.getCLS=function(t,e){var r=S_.initMetric("CLS",0),n,i=0,s=[],o=function(u){if(u&&!u.hadRecentInput){var c=s[0],f=s[s.length-1];i&&s.length!==0&&u.startTime-f.startTime<1e3&&u.startTime-c.startTime<5e3?(i+=u.value,s.push(u)):(i=u.value,s=[u]),i>r.value&&(r.value=i,r.entries=s,n&&n())}},a=E_.observe("layout-shift",o);a&&(n=b_.bindReporter(t,r,e),T_.onHidden(function(){a.takeRecords().map(o),n(!0)}))}});var Vr=p(ps=>{Object.defineProperty(ps,"__esModule",{value:!0});var O_=m(),w_=jt(),Yr=-1,x_=function(){return O_.getGlobalObject().document.visibilityState==="hidden"?0:1/0},C_=function(){w_.onHidden(function(t){var e=t.timeStamp;Yr=e},!0)};ps.getVisibilityWatcher=function(){return Yr<0&&(Yr=x_(),C_()),{get firstHiddenTime(){return Yr}}}});var Ku=p(hs=>{Object.defineProperty(hs,"__esModule",{value:!0});var I_=Gr(),R_=Vr(),q_=zr(),k_=Wr(),P_=jt();hs.getFID=function(t,e){var r=R_.getVisibilityWatcher(),n=q_.initMetric("FID"),i,s=function(a){i&&a.startTime<r.firstHiddenTime&&(n.value=a.processingStart-a.startTime,n.entries.push(a),i(!0))},o=k_.observe("first-input",s);o&&(i=I_.bindReporter(t,n,e),P_.onHidden(function(){o.takeRecords().map(s),o.disconnect()},!0))}});var Ju=p(_s=>{Object.defineProperty(_s,"__esModule",{value:!0});var M_=Gr(),A_=Vr(),N_=zr(),j_=Wr(),F_=jt(),$u={};_s.getLCP=function(t,e){var r=A_.getVisibilityWatcher(),n=N_.initMetric("LCP"),i,s=function(u){var c=u.startTime;c<r.firstHiddenTime&&(n.value=c,n.entries.push(u)),i&&i()},o=j_.observe("largest-contentful-paint",s);if(o){i=M_.bindReporter(t,n,e);var a=function(){$u[n.id]||(o.takeRecords().map(s),o.disconnect(),$u[n.id]=!0,i(!0))};["keydown","click"].forEach(function(u){addEventListener(u,a,{once:!0,capture:!0})}),F_.onHidden(a,!0)}}});var Qu=p(Ft=>{Object.defineProperty(Ft,"__esModule",{value:!0});var Xu=S(),P=m(),A=Re(),D_=Vu(),H_=Ku(),U_=Ju(),L_=Vr(),G=P.getGlobalObject(),B_=function(){function t(e){e===void 0&&(e=!1);var r,n;this._reportAllChanges=e,this._measurements={},this._performanceCursor=0,!P.isNodeEnv()&&((r=G)===null||r===void 0?void 0:r.performance)&&((n=G)===null||n===void 0?void 0:n.document)&&(G.performance.mark&&G.performance.mark("sentry-tracing-init"),this._trackCLS(),this._trackLCP(),this._trackFID())}return t.prototype.addPerformanceEntries=function(e){var r=this;if(!(!G||!G.performance||!G.performance.getEntries||!P.browserPerformanceTimeOrigin)){P.logger.log("[Tracing] Adding & adjusting spans using Performance API");var n=A.msToSec(P.browserPerformanceTimeOrigin),i;if(G.document&&G.document.scripts){for(var s=0;s<G.document.scripts.length;s++)if(G.document.scripts[s].dataset.entry==="true"){i=G.document.scripts[s].src;break}}var o,a,u,c;if(G.performance.getEntries().slice(this._performanceCursor).forEach(function(l){var d=A.msToSec(l.startTime),h=A.msToSec(l.duration);if(!(e.op==="navigation"&&n+d<e.startTimestamp))switch(l.entryType){case"navigation":{G_(e,l,n),u=n+A.msToSec(l.responseStart),c=n+A.msToSec(l.requestStart);break}case"mark":case"paint":case"measure":{var _=z_(e,l,d,h,n);a===void 0&&l.name==="sentry-tracing-init"&&(a=_);var v=L_.getVisibilityWatcher(),g=l.startTime<v.firstHiddenTime;l.name==="first-paint"&&g&&(P.logger.log("[Measurements] Adding FP"),r._measurements.fp={value:l.startTime},r._measurements["mark.fp"]={value:_}),l.name==="first-contentful-paint"&&g&&(P.logger.log("[Measurements] Adding FCP"),r._measurements.fcp={value:l.startTime},r._measurements["mark.fcp"]={value:_});break}case"resource":{var w=l.name.replace(G.location.origin,""),C=Zu(e,l,w,d,h,n);o===void 0&&(i||"").indexOf(w)>-1&&(o=C);break}default:}}),o!==void 0&&a!==void 0&&Pe(e,{description:"evaluation",endTimestamp:a,op:"script",startTimestamp:o}),this._performanceCursor=Math.max(performance.getEntries().length-1,0),this._trackNavigator(e),e.op==="pageload"){var f=A.msToSec(P.browserPerformanceTimeOrigin);typeof u=="number"&&(P.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(l){if(!(!r._measurements[l]||f>=e.startTimestamp)){var d=r._measurements[l].value,h=f+A.msToSec(d),_=Math.abs((h-e.startTimestamp)*1e3),v=_-d;P.logger.log("[Measurements] Normalized "+l+" from "+d+" to "+_+" ("+v+")"),r._measurements[l].value=_}}),this._measurements["mark.fid"]&&this._measurements.fid&&Pe(e,{description:"first input delay",endTimestamp:this._measurements["mark.fid"].value+A.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&&(P.logger.log("[Measurements] Adding LCP Data"),this._lcpEntry.element&&e.setTag("lcp.element",P.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&&(P.logger.log("[Measurements] Adding CLS Data"),this._clsEntry.sources.forEach(function(r,n){return e.setTag("cls.source."+(n+1),P.htmlTreeAsString(r.node))}))},t.prototype._trackCLS=function(){var e=this;D_.getCLS(function(r){var n=r.entries.pop();!n||(P.logger.log("[Measurements] Adding CLS"),e._measurements.cls={value:r.value},e._clsEntry=n)})},t.prototype._trackNavigator=function(e){var r=G.navigator;if(!!r){var n=r.connection;n&&(n.effectiveType&&e.setTag("effectiveConnectionType",n.effectiveType),n.type&&e.setTag("connectionType",n.type),Kr(n.rtt)&&(this._measurements["connection.rtt"]={value:n.rtt}),Kr(n.downlink)&&(this._measurements["connection.downlink"]={value:n.downlink})),Kr(r.deviceMemory)&&e.setTag("deviceMemory",String(r.deviceMemory)),Kr(r.hardwareConcurrency)&&e.setTag("hardwareConcurrency",String(r.hardwareConcurrency))}},t.prototype._trackLCP=function(){var e=this;U_.getLCP(function(r){var n=r.entries.pop();if(!!n){var i=A.msToSec(P.browserPerformanceTimeOrigin),s=A.msToSec(n.startTime);P.logger.log("[Measurements] Adding LCP"),e._measurements.lcp={value:r.value},e._measurements["mark.lcp"]={value:i+s},e._lcpEntry=n}},this._reportAllChanges)},t.prototype._trackFID=function(){var e=this;H_.getFID(function(r){var n=r.entries.pop();if(!!n){var i=A.msToSec(P.browserPerformanceTimeOrigin),s=A.msToSec(n.startTime);P.logger.log("[Measurements] Adding FID"),e._measurements.fid={value:r.value},e._measurements["mark.fid"]={value:i+s}}})},t}();Ft.MetricsInstrumentation=B_;function G_(t,e,r){ke({transaction:t,entry:e,event:"unloadEvent",timeOrigin:r}),ke({transaction:t,entry:e,event:"redirect",timeOrigin:r}),ke({transaction:t,entry:e,event:"domContentLoadedEvent",timeOrigin:r}),ke({transaction:t,entry:e,event:"loadEvent",timeOrigin:r}),ke({transaction:t,entry:e,event:"connect",timeOrigin:r}),ke({transaction:t,entry:e,event:"secureConnection",timeOrigin:r,eventEnd:"connectEnd",description:"TLS/SSL"}),ke({transaction:t,entry:e,event:"fetch",timeOrigin:r,eventEnd:"domainLookupStart",description:"cache"}),ke({transaction:t,entry:e,event:"domainLookup",timeOrigin:r,description:"DNS"}),W_(t,e,r)}function z_(t,e,r,n,i){var s=i+r,o=s+n;return Pe(t,{description:e.name,endTimestamp:o,op:e.entryType,startTimestamp:s}),s}function Zu(t,e,r,n,i,s){if(!(e.initiatorType==="xmlhttprequest"||e.initiatorType==="fetch")){var o={};"transferSize"in e&&(o["Transfer Size"]=e.transferSize),"encodedBodySize"in e&&(o["Encoded Body Size"]=e.encodedBodySize),"decodedBodySize"in e&&(o["Decoded Body Size"]=e.decodedBodySize);var a=s+n,u=a+i;return Pe(t,{description:r,endTimestamp:u,op:e.initiatorType?"resource."+e.initiatorType:"resource",startTimestamp:a,data:o}),u}}Ft.addResourceSpans=Zu;function ke(t){var e=t.transaction,r=t.entry,n=t.event,i=t.timeOrigin,s=t.eventEnd,o=t.description,a=s?r[s]:r[n+"End"],u=r[n+"Start"];!u||!a||Pe(e,{op:"browser",description:o??n,startTimestamp:i+A.msToSec(u),endTimestamp:i+A.msToSec(a)})}function W_(t,e,r){Pe(t,{op:"browser",description:"request",startTimestamp:r+A.msToSec(e.requestStart),endTimestamp:r+A.msToSec(e.responseEnd)}),Pe(t,{op:"browser",description:"response",startTimestamp:r+A.msToSec(e.responseStart),endTimestamp:r+A.msToSec(e.responseEnd)})}function Pe(t,e){var r=e.startTimestamp,n=Xu.__rest(e,["startTimestamp"]);return r&&t.startTimestamp>r&&(t.startTimestamp=r),t.startChild(Xu.__assign({startTimestamp:r},n))}Ft._startChild=Pe;function Kr(t){return typeof t=="number"&&isFinite(t)}});var vs=p(me=>{Object.defineProperty(me,"__esModule",{value:!0});var ge=S(),Dt=m(),Y_=Ie(),$r=Re();me.DEFAULT_TRACING_ORIGINS=["localhost",/^\//];me.defaultRequestInstrumentationOptions={traceFetch:!0,traceXHR:!0,tracingOrigins:me.DEFAULT_TRACING_ORIGINS};function V_(t){var e=ge.__assign(ge.__assign({},me.defaultRequestInstrumentationOptions),t),r=e.traceFetch,n=e.traceXHR,i=e.tracingOrigins,s=e.shouldCreateSpanForRequest,o={},a=function(f){if(o[f])return o[f];var l=i;return o[f]=l.some(function(d){return Dt.isMatchingPattern(f,d)})&&!Dt.isMatchingPattern(f,"sentry_key"),o[f]},u=a;typeof s=="function"&&(u=function(f){return a(f)&&s(f)});var c={};r&&Dt.addInstrumentationHandler({callback:function(f){ec(f,u,c)},type:"fetch"}),n&&Dt.addInstrumentationHandler({callback:function(f){tc(f,u,c)},type:"xhr"})}me.instrumentOutgoingRequests=V_;function ec(t,e,r){if(!(!$r.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(Y_.SpanStatus.InternalError),n.finish(),delete r[t.fetchData.__span]);return}var i=$r.getActiveTransaction();if(i){var n=i.startChild({data:ge.__assign(ge.__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 s=t.args[0]=t.args[0],o=t.args[1]=t.args[1]||{},a=o.headers;Dt.isInstanceOf(s,Request)&&(a=s.headers),a?typeof a.append=="function"?a.append("sentry-trace",n.toTraceparent()):Array.isArray(a)?a=ge.__spread(a,[["sentry-trace",n.toTraceparent()]]):a=ge.__assign(ge.__assign({},a),{"sentry-trace":n.toTraceparent()}):a={"sentry-trace":n.toTraceparent()},o.headers=a}}}me.fetchCallback=ec;function tc(t,e,r){var n,i;if(!(!$r.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 s=t.xhr.__sentry_xhr__;if(t.endTimestamp&&t.xhr.__sentry_xhr_span_id__){var o=r[t.xhr.__sentry_xhr_span_id__];o&&(o.setHttpStatus(s.status_code),o.finish(),delete r[t.xhr.__sentry_xhr_span_id__]);return}var a=$r.getActiveTransaction();if(a){var o=a.startChild({data:ge.__assign(ge.__assign({},s.data),{type:"xhr",method:s.method,url:s.url}),description:s.method+" "+s.url,op:"http.client"});if(t.xhr.__sentry_xhr_span_id__=o.spanId,r[t.xhr.__sentry_xhr_span_id__]=o,t.xhr.setRequestHeader)try{t.xhr.setRequestHeader("sentry-trace",o.toTraceparent())}catch{}}}}me.xhrCallback=tc});var rc=p(gs=>{Object.defineProperty(gs,"__esModule",{value:!0});var Jr=m(),Ht=Jr.getGlobalObject();function K_(t,e,r){if(e===void 0&&(e=!0),r===void 0&&(r=!0),!Ht||!Ht.location){Jr.logger.warn("Could not initialize routing instrumentation due to invalid location");return}var n=Ht.location.href,i;e&&(i=t({name:Ht.location.pathname,op:"pageload"})),r&&Jr.addInstrumentationHandler({callback:function(s){var o=s.to,a=s.from;if(a===void 0&&n&&n.indexOf(o)!==-1){n=void 0;return}a!==o&&(n=void 0,i&&(Jr.logger.log("[Tracing] Finishing current transaction with op: "+i.op),i.finish()),i=t({name:Ht.location.pathname,op:"navigation"}))},type:"history"})}gs.instrumentRoutingWithDefaults=K_});var oc=p(ze=>{Object.defineProperty(ze,"__esModule",{value:!0});var ye=S(),Ge=m(),$_=Ur(),J_=Dr(),X_=Ie(),nc=Re(),Z_=Wu(),Q_=Qu(),Xr=vs(),ev=rc();ze.DEFAULT_MAX_TRANSACTION_DURATION_SECONDS=600;var tv=ye.__assign({idleTimeout:J_.DEFAULT_IDLE_TIMEOUT,markBackgroundTransactions:!0,maxTransactionDuration:ze.DEFAULT_MAX_TRANSACTION_DURATION_SECONDS,routingInstrumentation:ev.instrumentRoutingWithDefaults,startTransactionOnLocationChange:!0,startTransactionOnPageLoad:!0},Xr.defaultRequestInstrumentationOptions),rv=function(){function t(e){this.name=t.id,this._emitOptionsWarning=!1,this._configuredIdleTimeout=void 0;var r=Xr.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=ye.__assign(ye.__assign(ye.__assign({},tv),e),{tracingOrigins:r});var n=this.options._metricOptions;this._metrics=new Q_.MetricsInstrumentation(n&&n._reportAllChanges)}return t.prototype.setupOnce=function(e,r){var n=this;this._getCurrentHub=r,this._emitOptionsWarning&&(Ge.logger.warn("[Tracing] You need to define `tracingOrigins` in the options. Set an array of urls or patterns to trace."),Ge.logger.warn("[Tracing] We added a reasonable default for you: "+Xr.defaultRequestInstrumentationOptions.tracingOrigins));var i=this.options,s=i.routingInstrumentation,o=i.startTransactionOnLocationChange,a=i.startTransactionOnPageLoad,u=i.markBackgroundTransactions,c=i.traceFetch,f=i.traceXHR,l=i.tracingOrigins,d=i.shouldCreateSpanForRequest;s(function(h){return n._createRouteTransaction(h)},a,o),u&&Z_.registerBackgroundTabDetection(),Xr.instrumentOutgoingRequests({traceFetch:c,traceXHR:f,tracingOrigins:l,shouldCreateSpanForRequest:d})},t.prototype._createRouteTransaction=function(e){var r=this;if(!this._getCurrentHub){Ge.logger.warn("[Tracing] Did not create "+e.op+" transaction because _getCurrentHub is invalid.");return}var n=this.options,i=n.beforeNavigate,s=n.idleTimeout,o=n.maxTransactionDuration,a=e.op==="pageload"?ic():void 0,u=ye.__assign(ye.__assign(ye.__assign({},e),a),{trimEnd:!0}),c=typeof i=="function"?i(u):u,f=c===void 0?ye.__assign(ye.__assign({},u),{sampled:!1}):c;f.sampled===!1&&Ge.logger.log("[Tracing] Will not send "+f.op+" transaction because of beforeNavigate."),Ge.logger.log("[Tracing] Starting "+f.op+" transaction on scope");var l=this._getCurrentHub(),d=Ge.getGlobalObject().location,h=$_.startIdleTransaction(l,f,s,!0,{location:d});return h.registerBeforeFinishCallback(function(_,v){r._metrics.addPerformanceEntries(_),nv(nc.secToMs(o),_,v)}),h.setTag("idleTimeout",this._configuredIdleTimeout),h},t.id="BrowserTracing",t}();ze.BrowserTracing=rv;function ic(){var t=sc("sentry-trace");if(t)return nc.extractTraceparentData(t)}ze.getHeaderContext=ic;function sc(t){var e=Ge.getGlobalObject().document.querySelector("meta[name="+t+"]");return e?e.getAttribute("content"):null}ze.getMetaContent=sc;function nv(t,e,r){var n=r-e.startTimestamp,i=r&&(n>t||n<0);i&&(e.setStatus(X_.SpanStatus.DeadlineExceeded),e.setTag("maxTransactionDurationExceeded","true"))}});var Zr=p(Ut=>{Object.defineProperty(Ut,"__esModule",{value:!0});var iv=oc();Ut.BrowserTracing=iv.BrowserTracing;var ac=vs();Ut.instrumentOutgoingRequests=ac.instrumentOutgoingRequests;Ut.defaultRequestInstrumentationOptions=ac.defaultRequestInstrumentationOptions});var uc=p(We=>{Object.defineProperty(We,"__esModule",{value:!0});var sv=Hu();We.Express=sv.Express;var ov=Uu();We.Postgres=ov.Postgres;var av=Lu();We.Mysql=av.Mysql;var uv=Bu();We.Mongo=uv.Mongo;var cv=Zr();We.BrowserTracing=cv.BrowserTracing});var fc=p(F=>{Object.defineProperty(F,"__esModule",{value:!0});var cc=Ur();F.addExtensionMethods=cc.addExtensionMethods;var lv=uc();F.Integrations=lv;var fv=Zr();F.BrowserTracing=fv.BrowserTracing;var dv=Nr();F.Span=dv.Span;var pv=jr();F.Transaction=pv.Transaction;var lc=Zr();F.registerRequestInstrumentation=lc.instrumentOutgoingRequests;F.defaultRequestInstrumentationOptions=lc.defaultRequestInstrumentationOptions;var hv=Ie();F.SpanStatus=hv.SpanStatus;var _v=Dr();F.IdleTransaction=_v.IdleTransaction;var vv=Ur();F.startIdleTransaction=vv.startIdleTransaction;cc.addExtensionMethods();var Lt=Re();F.extractTraceparentData=Lt.extractTraceparentData;F.getActiveTransaction=Lt.getActiveTransaction;F.hasTracingEnabled=Lt.hasTracingEnabled;F.stripUrlQueryAndFragment=Lt.stripUrlQueryAndFragment;F.TRACEPARENT_REGEXP=Lt.TRACEPARENT_REGEXP});var dc=p(ms=>{"use strict";ms.parse=bv;ms.serialize=Sv;var gv=decodeURIComponent,mv=encodeURIComponent,yv=/; */,Qr=/^[\u0009\u0020-\u007e\u0080-\u00ff]+$/;function bv(t,e){if(typeof t!="string")throw new TypeError("argument str must be a string");for(var r={},n=e||{},i=t.split(yv),s=n.decode||gv,o=0;o<i.length;o++){var a=i[o],u=a.indexOf("=");if(!(u<0)){var c=a.substr(0,u).trim(),f=a.substr(++u,a.length).trim();f[0]=='"'&&(f=f.slice(1,-1)),r[c]==null&&(r[c]=Ev(f,s))}}return r}function Sv(t,e,r){var n=r||{},i=n.encode||mv;if(typeof i!="function")throw new TypeError("option encode is invalid");if(!Qr.test(t))throw new TypeError("argument name is invalid");var s=i(e);if(s&&!Qr.test(s))throw new TypeError("argument val is invalid");var o=t+"="+s;if(n.maxAge!=null){var a=n.maxAge-0;if(isNaN(a)||!isFinite(a))throw new TypeError("option maxAge is invalid");o+="; Max-Age="+Math.floor(a)}if(n.domain){if(!Qr.test(n.domain))throw new TypeError("option domain is invalid");o+="; Domain="+n.domain}if(n.path){if(!Qr.test(n.path))throw new TypeError("option path is invalid");o+="; Path="+n.path}if(n.expires){if(typeof n.expires.toUTCString!="function")throw new TypeError("option expires is invalid");o+="; Expires="+n.expires.toUTCString()}if(n.httpOnly&&(o+="; HttpOnly"),n.secure&&(o+="; Secure"),n.sameSite){var u=typeof n.sameSite=="string"?n.sameSite.toLowerCase():n.sameSite;switch(u){case!0:o+="; SameSite=Strict";break;case"lax":o+="; SameSite=Lax";break;case"strict":o+="; SameSite=Strict";break;case"none":o+="; SameSite=None";break;default:throw new TypeError("option sameSite is invalid")}}return o}function Ev(t,e){try{return e(t)}catch{return t}}});var _c=p(Ve=>{Object.defineProperty(Ve,"__esModule",{value:!0});var le=S(),Ye=N(),Tv=fc(),pc=D(),ht=m(),Ov=dc(),wv=require("domain"),xv=require("os"),Cv=require("url"),Bt=Bi();function Iv(){return function(e,r,n){var i;e.headers&&ht.isString(e.headers["sentry-trace"])&&(i=Tv.extractTraceparentData(e.headers["sentry-trace"]));var s=Ye.startTransaction(le.__assign({name:en(e,{path:!0,method:!0}),op:"http.server"},i),{request:tn(e)});Ye.getCurrentHub().configureScope(function(o){o.setSpan(s)}),r.__sentry_transaction=s,r.once("finish",function(){setImmediate(function(){Rv(s,e),s.setHttpStatus(r.statusCode),s.finish()})}),n()}}Ve.tracingHandler=Iv;function Rv(t,e){!t||(t.name=en(e,{path:!0,method:!0}),t.setData("url",e.originalUrl),t.setData("baseUrl",e.baseUrl),t.setData("query",e.query))}function en(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=ht.stripUrlQueryAndFragment(t.originalUrl||t.url||""));var s="";return e.method&&n&&(s+=n),e.method&&e.path&&(s+=" "),e.path&&i&&(s+=i),s}function qv(t,e){var r;switch(e){case"path":return en(t,{path:!0});case"handler":return((r=t.route)===null||r===void 0?void 0:r.stack[0].name)||"<anonymous>";case"methodPath":default:return en(t,{path:!0,method:!0})}}var kv=["id","username","email"];function Pv(t,e){var r={},n=Array.isArray(e)?e:kv;return n.forEach(function(i){t&&i in t&&(r[i]=t[i])}),r}var Mv=["cookies","data","headers","method","query_string","url"];function tn(t,e){e===void 0&&(e=Mv);var r={},n=t.headers||t.header||{},i=t.method,s=t.hostname||t.host||n.host||"<no host>",o=t.protocol==="https"||t.secure||(t.socket||{}).encrypted?"https":"http",a=t.originalUrl||t.url||"",u=o+"://"+s+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||Ov.parse(n.cookie||"");break;case"query_string":r.query_string=t.query||Cv.parse(a||"",!1).query;break;case"data":if(i==="GET"||i==="HEAD")break;t.body!==void 0&&(r.data=ht.isString(t.body)?t.body:JSON.stringify(ht.normalize(t.body)));break;default:({}).hasOwnProperty.call(t,c)&&(r[c]=t[c])}}),r}Ve.extractRequestData=tn;function hc(t,e,r){if(r=le.__assign({ip:!1,request:!0,serverName:!0,transaction:!0,user:!0,version:!0},r),r.version&&(t.contexts=le.__assign(le.__assign({},t.contexts),{runtime:{name:"node",version:global.process.version}})),r.request){var n=Array.isArray(r.request)?tn(e,r.request):tn(e);t.request=le.__assign(le.__assign({},t.request),n)}if(r.serverName&&!t.server_name&&(t.server_name=global.process.env.SENTRY_NAME||xv.hostname()),r.user){var i=e.user&&ht.isPlainObject(e.user)?Pv(e.user,r.user):{};Object.keys(i)&&(t.user=le.__assign(le.__assign({},t.user),i))}if(r.ip){var s=e.ip||e.connection&&e.connection.remoteAddress;s&&(t.user=le.__assign(le.__assign({},t.user),{ip_address:s}))}return r.transaction&&!t.transaction&&(t.transaction=qv(e,r.transaction)),t}Ve.parseRequest=hc;function Av(t){var e=Ye.getCurrentHub(),r=e.getClient();if(r&&Bt.isAutoSessionTrackingEnabled(r)){r.initSessionFlusher();var n=e.getScope();n&&n.getSession()&&n.setSession()}return function(s,o,a){if(t&&t.flushTimeout&&t.flushTimeout>0){var u=o.end;o.end=function(f,l,d){var h=this;Bt.flush(t.flushTimeout).then(function(){u.call(h,f,l,d)}).then(null,function(_){ht.logger.error(_)})}}var c=wv.create();c.add(s),c.add(o),c.on("error",a),c.run(function(){var f=Ye.getCurrentHub();f.configureScope(function(l){l.addEventProcessor(function(_){return hc(_,s,t)});var d=f.getClient();if(Bt.isAutoSessionTrackingEnabled(d)){var h=f.getScope();h&&h.setRequestSession({status:pc.RequestSessionStatus.Ok})}}),o.once("finish",function(){var l=f.getClient();Bt.isAutoSessionTrackingEnabled(l)&&setImmediate(function(){l&&l._captureRequestSession&&l._captureRequestSession()})}),a()})}}Ve.requestHandler=Av;function Nv(t){var e=t.status||t.statusCode||t.status_code||t.output&&t.output.statusCode;return e?parseInt(e,10):500}function jv(t){var e=Nv(t);return e>=500}function Fv(t){return function(r,n,i,s){var o=t&&t.shouldHandleError||jv;if(o(r)){Ye.withScope(function(a){var u=i.__sentry_transaction;u&&a.getSpan()===void 0&&a.setSpan(u);var c=Ye.getCurrentHub().getClient();if(c&&Bt.isAutoSessionTrackingEnabled(c)){var f=c._sessionFlusher!==void 0;if(f){var l=a.getRequestSession();l&&l.status!==void 0&&(l.status=pc.RequestSessionStatus.Crashed)}}var d=Ye.captureException(r);i.sentry=d,s(r)});return}s(r)}}Ve.errorHandler=Fv});var mc=p(E=>{Object.defineProperty(E,"__esModule",{value:!0});var vc=S(),gc=D();E.Severity=gc.Severity;E.Status=gc.Status;var q=N();E.addGlobalEventProcessor=q.addGlobalEventProcessor;E.addBreadcrumb=q.addBreadcrumb;E.captureException=q.captureException;E.captureEvent=q.captureEvent;E.captureMessage=q.captureMessage;E.configureScope=q.configureScope;E.getHubFromCarrier=q.getHubFromCarrier;E.getCurrentHub=q.getCurrentHub;E.Hub=q.Hub;E.makeMain=q.makeMain;E.Scope=q.Scope;E.startTransaction=q.startTransaction;E.SDK_VERSION=q.SDK_VERSION;E.setContext=q.setContext;E.setExtra=q.setExtra;E.setExtras=q.setExtras;E.setTag=q.setTag;E.setTags=q.setTags;E.setUser=q.setUser;E.withScope=q.withScope;var Dv=Ti();E.NodeBackend=Dv.NodeBackend;var Hv=xi();E.NodeClient=Hv.NodeClient;var _t=Bi();E.defaultIntegrations=_t.defaultIntegrations;E.init=_t.init;E.lastEventId=_t.lastEventId;E.flush=_t.flush;E.close=_t.close;E.getSentryRelease=_t.getSentryRelease;var Uv=Ou();E.deepReadDirSync=Uv.deepReadDirSync;var Lv=si();E.SDK_NAME=Lv.SDK_NAME;var Bv=N(),Gv=V(),zv=require("domain"),Wv=_c();E.Handlers=Wv;var Yv=Ui(),Vv=Si();E.Transports=Vv;var Kv=vc.__assign(vc.__assign({},Bv.Integrations),Yv);E.Integrations=Kv;var Gt=Gv.getMainCarrier();Gt.__SENTRY__&&(Gt.__SENTRY__.extensions=Gt.__SENTRY__.extensions||{},Gt.__SENTRY__.extensions.domain=Gt.__SENTRY__.extensions.domain||zv)});var ys=Ss(Cs());function Is(t){if(t.length==2)return t.toUpperCase().replace(/./g,e=>String.fromCodePoint(127397+e.charCodeAt(0)))}var vt=Ss(mc());vt.init({dsn:"https://aec0873e750c49b082fe3594def15af1@o1116132.ingest.sentry.io/6149280",tracesSampleRate:1});ys.default.version("0.1.0").name("country-flag-cli").command("get <flag>").action(t=>{let e=vt.startTransaction({op:"get flag from 2 alpha code",name:"GET flag from 2 alpha code"});try{let r=Is(t);if(r===void 0)throw new Error(`Flag: ${t}
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}
32
35
  Result: ${r}
33
- `);console.log(r)}catch(r){vt.captureException(r)}finally{e.finish()}});ys.default.parse(process.argv);
36
+ `);console.log(r)}catch(r){console.error(r),Tr.captureException(r)}finally{e.finish()}});za.default.parse(process.argv);
37
+ /*!
38
+ localForage -- Offline Storage, Improved
39
+ Version 1.10.0
40
+ https://localforage.github.io/localForage
41
+ (c) 2013-2017 Mozilla, Apache License 2.0
42
+ */
34
43
  /*!
35
44
  * cookie
36
45
  * Copyright(c) 2012-2014 Roman Shtylman
@@ -62,4 +71,4 @@ PERFORMANCE OF THIS SOFTWARE.
62
71
  * https://github.com/felixge/node-stack-trace/
63
72
  * @license MIT
64
73
  */
65
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHlwZXMvc3JjL2xvZ2xldmVsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3R5cGVzL3NyYy9zZXNzaW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3R5cGVzL3NyYy9zZXZlcml0eS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90eXBlcy9zcmMvc3RhdHVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3R5cGVzL3NyYy90cmFuc2FjdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90eXBlcy9zcmMvdHJhbnNwb3J0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3R5cGVzL3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvYXN5bmMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL25vZGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL2dsb2JhbC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvaXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL2Jyb3dzZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL3BvbHlmaWxsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL3NyYy9lcnJvci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvZHNuLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL3NyYy9sb2dnZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL21lbW8udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL3N0YWNrdHJhY2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL3N0cmluZy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvb2JqZWN0LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3V0aWxzL3NyYy9zdXBwb3J0cy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvaW5zdHJ1bWVudC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvbWlzYy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvcGF0aC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS91dGlscy9zcmMvc3luY3Byb21pc2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL3Byb21pc2VidWZmZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL3RpbWUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdXRpbHMvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2h1Yi9zcmMvc2NvcGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvaHViL3NyYy9zZXNzaW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2h1Yi9zcmMvaHViLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2h1Yi9zcmMvc2Vzc2lvbmZsdXNoZXIudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvaHViL3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9taW5pbWFsL3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL3NyYy9hcGkudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9zcmMvaW50ZWdyYXRpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9zcmMvYmFzZWNsaWVudC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL3NyYy90cmFuc3BvcnRzL25vb3AudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9zcmMvYmFzZWJhY2tlbmQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9zcmMvcmVxdWVzdC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL3NyYy9zZGsudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9zcmMvdmVyc2lvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL3NyYy9pbnRlZ3JhdGlvbnMvZnVuY3Rpb250b3N0cmluZy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9jb3JlL3NyYy9pbnRlZ3JhdGlvbnMvaW5ib3VuZGZpbHRlcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvY29yZS9zcmMvaW50ZWdyYXRpb25zL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L2NvcmUvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9scnVfbWFwL2xydS5qcyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL3NyYy9zdGFja3RyYWNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvc3JjL3BhcnNlcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvdmVyc2lvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL3NyYy90cmFuc3BvcnRzL2Jhc2UvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL21zL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvY29tbW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvYnJvd3Nlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvaGFzLWZsYWcvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3N1cHBvcnRzLWNvbG9yL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvbm9kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hZ2VudC1iYXNlL3NyYy9wcm9taXNpZnkudHMiLCAiLi4vbm9kZV9tb2R1bGVzL2FnZW50LWJhc2Uvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9odHRwcy1wcm94eS1hZ2VudC9zcmMvcGFyc2UtcHJveHktcmVzcG9uc2UudHMiLCAiLi4vbm9kZV9tb2R1bGVzL2h0dHBzLXByb3h5LWFnZW50L3NyYy9hZ2VudC50cyIsICIuLi9ub2RlX21vZHVsZXMvaHR0cHMtcHJveHktYWdlbnQvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvc3JjL3RyYW5zcG9ydHMvaHR0cC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL3NyYy90cmFuc3BvcnRzL2h0dHBzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvc3JjL3RyYW5zcG9ydHMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvYmFja2VuZC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL3NyYy9jbGllbnQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL2NvbnNvbGUudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL3V0aWxzL2h0dHAudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL2h0dHAudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL3V0aWxzL2Vycm9yaGFuZGxpbmcudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL29udW5jYXVnaHRleGNlcHRpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL29udW5oYW5kbGVkcmVqZWN0aW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvc3JjL2ludGVncmF0aW9ucy9saW5rZWRlcnJvcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL21vZHVsZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW50ZWdyYXRpb25zL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L25vZGUvc3JjL3Nkay50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS9ub2RlL3NyYy91dGlscy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9zcGFuc3RhdHVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL3V0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2Vycm9ycy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9jb25zdGFudHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9zcmMvc3Bhbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy90cmFuc2FjdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9pZGxldHJhbnNhY3Rpb24udHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9zcmMvaHViZXh0ZW5zaW9ucy50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9pbnRlZ3JhdGlvbnMvbm9kZS9leHByZXNzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2ludGVncmF0aW9ucy9ub2RlL3Bvc3RncmVzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2ludGVncmF0aW9ucy9ub2RlL215c3FsLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2ludGVncmF0aW9ucy9ub2RlL21vbmdvLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2Jyb3dzZXIvYmFja2dyb3VuZHRhYi50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9icm93c2VyL3dlYi12aXRhbHMvbGliL2JpbmRSZXBvcnRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9icm93c2VyL3dlYi12aXRhbHMvbGliL2dlbmVyYXRlVW5pcXVlSUQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9zcmMvYnJvd3Nlci93ZWItdml0YWxzL2xpYi9pbml0TWV0cmljLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2Jyb3dzZXIvd2ViLXZpdGFscy9saWIvb2JzZXJ2ZS50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9icm93c2VyL3dlYi12aXRhbHMvbGliL29uSGlkZGVuLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2Jyb3dzZXIvd2ViLXZpdGFscy9nZXRDTFMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9zcmMvYnJvd3Nlci93ZWItdml0YWxzL2xpYi9nZXRWaXNpYmlsaXR5V2F0Y2hlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9icm93c2VyL3dlYi12aXRhbHMvZ2V0RklELnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2Jyb3dzZXIvd2ViLXZpdGFscy9nZXRMQ1AudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9zcmMvYnJvd3Nlci9tZXRyaWNzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2Jyb3dzZXIvcmVxdWVzdC50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9icm93c2VyL3JvdXRlci50cyIsICIuLi9ub2RlX21vZHVsZXMvQHNlbnRyeS90cmFjaW5nL3NyYy9icm93c2VyL2Jyb3dzZXJ0cmFjaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2Jyb3dzZXIvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvdHJhY2luZy9zcmMvaW50ZWdyYXRpb25zL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9Ac2VudHJ5L3RyYWNpbmcvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9jb29raWUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaGFuZGxlcnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL0BzZW50cnkvbm9kZS9zcmMvaW5kZXgudHMiLCAiLi4vc3JjL2NsaS50cyIsICIuLi9zcmMvaW5kZXgudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogTW9kdWxlIGRlcGVuZGVuY2llcy5cbiAqL1xuXG52YXIgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xudmFyIHNwYXduID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpLnNwYXduO1xudmFyIHBhdGggPSByZXF1aXJlKCdwYXRoJyk7XG52YXIgZGlybmFtZSA9IHBhdGguZGlybmFtZTtcbnZhciBiYXNlbmFtZSA9IHBhdGguYmFzZW5hbWU7XG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xuXG4vKipcbiAqIEluaGVyaXQgYENvbW1hbmRgIGZyb20gYEV2ZW50RW1pdHRlci5wcm90b3R5cGVgLlxuICovXG5cbnJlcXVpcmUoJ3V0aWwnKS5pbmhlcml0cyhDb21tYW5kLCBFdmVudEVtaXR0ZXIpO1xuXG4vKipcbiAqIEV4cG9zZSB0aGUgcm9vdCBjb21tYW5kLlxuICovXG5cbmV4cG9ydHMgPSBtb2R1bGUuZXhwb3J0cyA9IG5ldyBDb21tYW5kKCk7XG5cbi8qKlxuICogRXhwb3NlIGBDb21tYW5kYC5cbiAqL1xuXG5leHBvcnRzLkNvbW1hbmQgPSBDb21tYW5kO1xuXG4vKipcbiAqIEV4cG9zZSBgT3B0aW9uYC5cbiAqL1xuXG5leHBvcnRzLk9wdGlvbiA9IE9wdGlvbjtcblxuLyoqXG4gKiBJbml0aWFsaXplIGEgbmV3IGBPcHRpb25gIHdpdGggdGhlIGdpdmVuIGBmbGFnc2AgYW5kIGBkZXNjcmlwdGlvbmAuXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IGZsYWdzXG4gKiBAcGFyYW0ge1N0cmluZ30gZGVzY3JpcHRpb25cbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbikge1xuICB0aGlzLmZsYWdzID0gZmxhZ3M7XG4gIHRoaXMucmVxdWlyZWQgPSBmbGFncy5pbmRleE9mKCc8JykgPj0gMDtcbiAgdGhpcy5vcHRpb25hbCA9IGZsYWdzLmluZGV4T2YoJ1snKSA+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+IHtcbiAgICAgICAgLy8gRm9yIHNvbWUgcmVhc29uIHdlIG5lZWQgdG8gc2V0IHRoZSB0cmFuc2FjdGlvbiBvbiB0aGUgc2NvcGUgYWdhaW5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICBjb25zdCB0cmFuc2FjdGlvbiA9IChyZXMgYXMgYW55KS5fX3NlbnRyeV90cmFuc2FjdGlvbiBhcyBTcGFuO1xuICAgICAgICBpZiAodHJhbnNhY3Rpb24gJiYgX3Njb3BlLmdldFNwYW4oKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgX3Njb3BlLnNldFNwYW4odHJhbnNhY3Rpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2xpZW50ID0gZ2V0Q3VycmVudEh1YigpLmdldENsaWVudDxOb2RlQ2xpZW50PigpO1xuICAgICAgICBpZiAoY2xpZW50ICYmIGlzQXV0b1Nlc3Npb25UcmFja2luZ0VuYWJsZWQoY2xpZW50KSkge1xuICAgICAgICAgIC8vIENoZWNrIGlmIHRoZSBgU2Vzc2lvbkZsdXNoZXJgIGlzIGluc3RhbnRpYXRlZCBvbiB0aGUgY2xpZW50IHRvIGdvIGludG8gdGhpcyBicmFuY2ggdGhhdCBtYXJrcyB0aGVcbiAgICAgICAgICAvLyBgcmVxdWVzdFNlc3Npb24uc3RhdHVzYCBhcyBgQ3Jhc2hlZGAsIGFuZCB0aGlzIGNoZWNrIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHRoZSBgU2Vzc2lvbkZsdXNoZXJgIGlzIG9ubHlcbiAgICAgICAgICAvLyBpbnN0YW50aWF0ZWQgd2hlbiB0aGUgdGhlYHJlcXVlc3RIYW5kbGVyYCBtaWRkbGV3YXJlIGlzIGluaXRpYWxpc2VkLCB3aGljaCBpbmRpY2F0ZXMgdGhhdCB3ZSBzaG91bGQgYmVcbiAgICAgICAgICAvLyBydW5uaW5nIGluIFNlc3Npb25BZ2dyZWdhdGVzIG1vZGVcbiAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgICAgICAgY29uc3QgaXNTZXNzaW9uQWdncmVnYXRlc01vZGUgPSAoY2xpZW50IGFzIGFueSkuX3Nlc3Npb25GbHVzaGVyICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgaWYgKGlzU2Vzc2lvbkFnZ3JlZ2F0ZXNNb2RlKSB7XG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0U2Vzc2lvbiA9IF9zY29wZS5nZXRSZXF1ZXN0U2Vzc2lvbigpO1xuICAgICAgICAgICAgLy8gSWYgYW4gZXJyb3IgYnViYmxlcyB0byB0aGUgYGVycm9ySGFuZGxlcmAsIHRoZW4gdGhpcyBpcyBhbiB1bmhhbmRsZWQgZXJyb3IsIGFuZCBzaG91bGQgYmUgcmVwb3J0ZWQgYXMgYVxuICAgICAgICAgICAgLy8gQ3Jhc2hlZCBzZXNzaW9uLiBUaGUgYF9yZXF1ZXN0U2Vzc2lvbi5zdGF0dXNgIGlzIGNoZWNrZWQgdG8gZW5zdXJlIHRoYXQgdGhpcyBlcnJvciBpcyBoYXBwZW5pbmcgd2l0aGluXG4gICAgICAgICAgICAvLyB0aGUgYm91bmRzIG9mIGEgcmVxdWVzdCwgYW5kIGlmIHNvIHRoZSBzdGF0dXMgaXMgdXBkYXRlZFxuICAgICAgICAgICAgaWYgKHJlcXVlc3RTZXNzaW9uICYmIHJlcXVlc3RTZXNzaW9uLnN0YXR1cyAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICByZXF1ZXN0U2Vzc2lvbi5zdGF0dXMgPSBSZXF1ZXN0U2Vzc2lvblN0YXR1cy5DcmFzaGVkO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV2ZW50SWQgPSBjYXB0dXJlRXhjZXB0aW9uKGVycm9yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICAocmVzIGFzIGFueSkuc2VudHJ5ID0gZXZlbnRJZDtcbiAgICAgICAgbmV4dChlcnJvcik7XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIG5leHQoZXJyb3IpO1xuICB9O1xufVxuIiwgImV4cG9ydCB7XG4gIEJyZWFkY3J1bWIsXG4gIEJyZWFkY3J1bWJIaW50LFxuICBSZXF1ZXN0LFxuICBTZGtJbmZvLFxuICBFdmVudCxcbiAgRXZlbnRIaW50LFxuICBFeGNlcHRpb24sXG4gIFJlc3BvbnNlLFxuICBTZXZlcml0eSxcbiAgU3RhY2tGcmFtZSxcbiAgU3RhY2t0cmFjZSxcbiAgU3RhdHVzLFxuICBUaHJlYWQsXG4gIFVzZXIsXG59IGZyb20gJ0BzZW50cnkvdHlwZXMnO1xuXG5leHBvcnQge1xuICBhZGRHbG9iYWxFdmVudFByb2Nlc3NvcixcbiAgYWRkQnJlYWRjcnVtYixcbiAgY2FwdHVyZUV4Y2VwdGlvbixcbiAgY2FwdHVyZUV2ZW50LFxuICBjYXB0dXJlTWVzc2FnZSxcbiAgY29uZmlndXJlU2NvcGUsXG4gIGdldEh1YkZyb21DYXJyaWVyLFxuICBnZXRDdXJyZW50SHViLFxuICBIdWIsXG4gIG1ha2VNYWluLFxuICBTY29wZSxcbiAgc3RhcnRUcmFuc2FjdGlvbixcbiAgU0RLX1ZFUlNJT04sXG4gIHNldENvbnRleHQsXG4gIHNldEV4dHJhLFxuICBzZXRFeHRyYXMsXG4gIHNldFRhZyxcbiAgc2V0VGFncyxcbiAgc2V0VXNlcixcbiAgd2l0aFNjb3BlLFxufSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuXG5leHBvcnQgeyBOb2RlT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuZXhwb3J0IHsgTm9kZUJhY2tlbmQgfSBmcm9tICcuL2JhY2tlbmQnO1xuZXhwb3J0IHsgTm9kZUNsaWVudCB9IGZyb20gJy4vY2xpZW50JztcbmV4cG9ydCB7IGRlZmF1bHRJbnRlZ3JhdGlvbnMsIGluaXQsIGxhc3RFdmVudElkLCBmbHVzaCwgY2xvc2UsIGdldFNlbnRyeVJlbGVhc2UgfSBmcm9tICcuL3Nkayc7XG5leHBvcnQgeyBkZWVwUmVhZERpclN5bmMgfSBmcm9tICcuL3V0aWxzJztcbmV4cG9ydCB7IFNES19OQU1FIH0gZnJvbSAnLi92ZXJzaW9uJztcblxuaW1wb3J0IHsgSW50ZWdyYXRpb25zIGFzIENvcmVJbnRlZ3JhdGlvbnMgfSBmcm9tICdAc2VudHJ5L2NvcmUnO1xuaW1wb3J0IHsgZ2V0TWFpbkNhcnJpZXIgfSBmcm9tICdAc2VudHJ5L2h1Yic7XG5pbXBvcnQgKiBhcyBkb21haW4gZnJvbSAnZG9tYWluJztcblxuaW1wb3J0ICogYXMgSGFuZGxlcnMgZnJvbSAnLi9oYW5kbGVycyc7XG5pbXBvcnQgKiBhcyBOb2RlSW50ZWdyYXRpb25zIGZyb20gJy4vaW50ZWdyYXRpb25zJztcbmltcG9ydCAqIGFzIFRyYW5zcG9ydHMgZnJvbSAnLi90cmFuc3BvcnRzJztcblxuY29uc3QgSU5URUdSQVRJT05TID0ge1xuICAuLi5Db3JlSW50ZWdyYXRpb25zLFxuICAuLi5Ob2RlSW50ZWdyYXRpb25zLFxufTtcblxuZXhwb3J0IHsgSU5URUdSQVRJT05TIGFzIEludGVncmF0aW9ucywgVHJhbnNwb3J0cywgSGFuZGxlcnMgfTtcblxuLy8gV2UgbmVlZCB0byBwYXRjaCBkb21haW4gb24gdGhlIGdsb2JhbCBfX1NFTlRSWV9fIG9iamVjdCB0byBtYWtlIGl0IHdvcmsgZm9yIG5vZGUgaW4gY3Jvc3MtcGxhdGZvcm0gcGFja2FnZXMgbGlrZVxuLy8gQHNlbnRyeS9odWIuIElmIHdlIGRvbid0IGRvIHRoaXMsIGJyb3dzZXIgYnVuZGxlcnMgd2lsbCBoYXZlIHRyb3VibGVzIHJlc29sdmluZyBgcmVxdWlyZSgnZG9tYWluJylgLlxuY29uc3QgY2FycmllciA9IGdldE1haW5DYXJyaWVyKCk7XG5pZiAoY2Fycmllci5fX1NFTlRSWV9fKSB7XG4gIGNhcnJpZXIuX19TRU5UUllfXy5leHRlbnNpb25zID0gY2Fycmllci5fX1NFTlRSWV9fLmV4dGVuc2lvbnMgfHwge307XG4gIGNhcnJpZXIuX19TRU5UUllfXy5leHRlbnNpb25zLmRvbWFpbiA9IGNhcnJpZXIuX19TRU5UUllfXy5leHRlbnNpb25zLmRvbWFpbiB8fCBkb21haW47XG59XG4iLCAiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgcHJvZ3JhbSBmcm9tICdjb21tYW5kZXInXG5cbmltcG9ydCB7IGdldENvdW50cnlGbGFnIH0gZnJvbSAnLi9pbmRleCdcbmltcG9ydCAqIGFzIFNlbnRyeSBmcm9tIFwiQHNlbnRyeS9ub2RlXCI7XG5cbi8vIEltcG9ydGluZyBAc2VudHJ5L3RyYWNpbmcgcGF0Y2hlcyB0aGUgZ2xvYmFsIGh1YiBmb3IgdHJhY2luZyB0byB3b3JrLlxuaW1wb3J0ICogYXMgVHJhY2luZyBmcm9tIFwiQHNlbnRyeS90cmFjaW5nXCI7XG5cblNlbnRyeS5pbml0KHtcbiAgZHNuOiBcImh0dHBzOi8vYWVjMDg3M2U3NTBjNDliMDgyZmUzNTk0ZGVmMTVhZjFAbzExMTYxMzIuaW5nZXN0LnNlbnRyeS5pby82MTQ5MjgwXCIsXG5cbiAgLy8gV2UgcmVjb21tZW5kIGFkanVzdGluZyB0aGlzIHZhbHVlIGluIHByb2R1Y3Rpb24sIG9yIHVzaW5nIHRyYWNlc1NhbXBsZXJcbiAgLy8gZm9yIGZpbmVyIGNvbnRyb2xcbiAgdHJhY2VzU2FtcGxlUmF0ZTogMS4wLFxufSk7XG5cbnByb2dyYW1cbiAgLnZlcnNpb24oJzAuMS4wJylcbiAgLm5hbWUoJ2NvdW50cnktZmxhZy1jbGknKVxuICAuY29tbWFuZCgnZ2V0IDxmbGFnPicpXG4gIC5hY3Rpb24oKGZsYWcpID0+IHtcbiAgICBjb25zdCB0cmFuc2FjdGlvbiA9IFNlbnRyeS5zdGFydFRyYW5zYWN0aW9uKHtcbiAgICAgIG9wOiBcImdldCBmbGFnIGZyb20gMiBhbHBoYSBjb2RlXCIsXG4gICAgICBuYW1lOiBcIkdFVCBmbGFnIGZyb20gMiBhbHBoYSBjb2RlXCJcbiAgICB9KVxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBnZXRDb3VudHJ5RmxhZyhmbGFnKTtcbiAgICAgIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkgdGhyb3cgbmV3IEVycm9yKGBGbGFnOiAke2ZsYWd9IFxcblJlc3VsdDogJHtyZXN1bHR9XFxuYClcbiAgICAgIGNvbnNvbGUubG9nKHJlc3VsdCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgU2VudHJ5LmNhcHR1cmVFeGNlcHRpb24oZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyYW5zYWN0aW9uLmZpbmlzaCgpXG4gICAgfVxuICB9KVxuXG5wcm9ncmFtLnBhcnNlKHByb2Nlc3MuYXJndilcbiIsICJleHBvcnQgZnVuY3Rpb24gZ2V0Q291bnRyeUZsYWcgKGNvdW50cnlDb2RlOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoY291bnRyeUNvZGUubGVuZ3RoICE9IDIpIHsgcmV0dXJuIHVuZGVmaW5lZH1cbiAgcmV0dXJuIGNvdW50cnlDb2RlLnRvVXBwZXJDYXNlKCkucmVwbGFjZSgvLi9nLCBjaGFyID0+IFxuICAgICAgU3RyaW5nLmZyb21Db2RlUG9pbnQoMTI3Mzk3ICsgY2hhci5jaGFyQ29kZUF0KDApKSk7XG59XG4gICJdLAogICJtYXBwaW5ncyI6ICI7cW1CQUFBLG1CQUlBLEdBQUksSUFBZSxRQUFRLFVBQVUsYUFDakMsR0FBUSxRQUFRLGlCQUFpQixNQUNqQyxHQUFPLFFBQVEsUUFDZixHQUFVLEdBQUssUUFDZixHQUFXLEdBQUssU0FDaEIsR0FBSyxRQUFRLE1BTWpCLFFBQVEsUUFBUSxTQUFTLEVBQVMsSUFNbEMsR0FBVSxHQUFPLFFBQVUsR0FBSSxHQU0vQixHQUFRLFFBQVUsRUFNbEIsR0FBUSxPQUFTLEdBVWpCLFlBQWdCLEVBQU8sRUFBYSxDQUNsQyxLQUFLLE1BQVEsRUFDYixLQUFLLFNBQVcsRUFBTSxRQUFRLE1BQVEsRUFDdEMsS0FBSyxTQUFXLEVBQU0sUUFBUSxNQUFRLEVBQ3RDLEtBQUssS0FBTyxFQUFNLFFBQVEsVUFBWSxHQUN0QyxFQUFRLEVBQU0sTUFBTSxVQUNoQixFQUFNLE9BQVMsR0FBSyxDQUFDLFFBQVEsS0FBSyxFQUFNLEtBQUssTUFBSyxNQUFRLEVBQU0sU0FDcEUsS0FBSyxLQUFPLEVBQU0sUUFDbEIsS0FBSyxZQUFjLEdBQWUsR0FVcEMsR0FBTyxVQUFVLEtBQU8sVUFBVyxDQUNqQyxNQUFPLE1BQUssS0FDVCxRQUFRLEtBQU0sSUFDZCxRQUFRLE1BQU8sS0FXcEIsR0FBTyxVQUFVLGNBQWdCLFVBQVcsQ0FDMUMsTUFBTyxJQUFVLEtBQUssU0FXeEIsR0FBTyxVQUFVLEdBQUssU0FBUyxFQUFLLENBQ2xDLE1BQU8sTUFBSyxRQUFVLEdBQU8sS0FBSyxPQUFTLEdBVTdDLFdBQWlCLEVBQU0sQ0FDckIsS0FBSyxTQUFXLEdBQ2hCLEtBQUssUUFBVSxHQUNmLEtBQUssT0FBUyxHQUNkLEtBQUssb0JBQXNCLEdBQzNCLEtBQUssTUFBUSxHQUNiLEtBQUssTUFBUSxHQUFRLEdBZ0V2QixFQUFRLFVBQVUsUUFBVSxTQUFTLEVBQU0sRUFBTSxFQUFNLENBQ3JELEFBQUksTUFBTyxJQUFTLFVBQVksSUFBUyxNQUN2QyxHQUFPLEVBQ1AsRUFBTyxNQUVULEVBQU8sR0FBUSxHQUNmLEdBQUksR0FBTyxFQUFLLE1BQU0sTUFDbEIsRUFBTSxHQUFJLEdBQVEsRUFBSyxTQWEzQixNQVhJLElBQ0YsR0FBSSxZQUFZLEdBQ2hCLEtBQUssWUFBYyxHQUNuQixLQUFLLE9BQU8sRUFBSSxPQUFTLEdBQ3JCLEVBQUssV0FBVyxNQUFLLGtCQUFvQixFQUFJLFFBRW5ELEVBQUksUUFBVSxDQUFDLENBQUMsRUFBSyxPQUNyQixLQUFLLFNBQVMsS0FBSyxHQUNuQixFQUFJLGtCQUFrQixHQUN0QixFQUFJLE9BQVMsS0FFVCxFQUFhLEtBQ1YsR0FTVCxFQUFRLFVBQVUsVUFBWSxTQUFTLEVBQU0sQ0FDM0MsTUFBTyxNQUFLLGtCQUFrQixFQUFLLE1BQU0sUUFVM0MsRUFBUSxVQUFVLHVCQUF5QixVQUFXLENBQ3BELEtBQUssUUFBUSxhQUFjLDJCQWE3QixFQUFRLFVBQVUsa0JBQW9CLFNBQVMsRUFBTSxDQUNuRCxHQUFJLEVBQUMsRUFBSyxPQUNWLElBQUksR0FBTyxLQUNYLFNBQUssUUFBUSxTQUFTLEVBQUssQ0FDekIsR0FBSSxHQUFhLENBQ2YsU0FBVSxHQUNWLEtBQU0sR0FDTixTQUFVLElBR1osT0FBUSxFQUFJLFFBQ0wsSUFDSCxFQUFXLFNBQVcsR0FDdEIsRUFBVyxLQUFPLEVBQUksTUFBTSxFQUFHLElBQy9CLFVBQ0csSUFDSCxFQUFXLEtBQU8sRUFBSSxNQUFNLEVBQUcsSUFDL0IsTUFHSixBQUFJLEVBQVcsS0FBSyxPQUFTLEdBQUssRUFBVyxLQUFLLE1BQU0sTUFBUSxPQUM5RCxHQUFXLFNBQVcsR0FDdEIsRUFBVyxLQUFPLEVBQVcsS0FBSyxNQUFNLEVBQUcsS0FFekMsRUFBVyxNQUNiLEVBQUssTUFBTSxLQUFLLEtBR2IsT0FvQlQsRUFBUSxVQUFVLE9BQVMsU0FBUyxFQUFJLENBQ3RDLEdBQUksR0FBTyxLQUNQLEVBQVcsU0FBUyxFQUFNLEVBQVMsQ0FFckMsRUFBTyxHQUFRLEdBQ2YsRUFBVSxHQUFXLEdBRXJCLEdBQUksR0FBUyxFQUFLLGFBQWEsR0FHL0IsR0FBc0IsRUFBTSxFQUFPLFNBSy9CLEVBQU8sUUFBUSxPQUFTLEdBQzFCLEVBQUssY0FBYyxFQUFPLFFBQVEsSUFJaEMsRUFBTyxLQUFLLFFBQVEsR0FBTyxFQUFPLEtBQUssT0FBTyxJQUVsRCxFQUFLLE1BQU0sUUFBUSxTQUFTLEVBQUssRUFBRyxDQUNsQyxBQUFJLEVBQUksVUFBWSxFQUFLLElBQU0sS0FDN0IsRUFBSyxnQkFBZ0IsRUFBSSxNQUNoQixFQUFJLFVBQ1QsS0FBTSxFQUFLLE1BQU0sT0FBUyxHQUM1QixFQUFLLG1CQUFtQixFQUFJLE1BRzlCLEVBQUssR0FBSyxFQUFLLE9BQU8sTUFPMUIsQUFBSSxFQUFLLE1BQU0sT0FDYixFQUFLLEVBQUssTUFBTSxRQUFVLEVBRTFCLEVBQUssS0FBSyxHQUdaLEVBQUcsTUFBTSxFQUFNLElBRWIsRUFBUyxLQUFLLFFBQVUsS0FDeEIsRUFBTyxJQUFXLEtBQU8sSUFBTSxLQUFLLE1BQ3hDLFNBQU8sR0FBRyxXQUFhLEVBQU0sR0FDekIsS0FBSyxRQUFRLEVBQU8sR0FBRyxXQUFhLEtBQUssT0FBUSxHQUM5QyxNQW9EVCxFQUFRLFVBQVUsT0FBUyxTQUFTLEVBQU8sRUFBYSxFQUFJLEVBQWMsQ0FDeEUsR0FBSSxHQUFPLEtBQ1QsRUFBUyxHQUFJLElBQU8sRUFBTyxHQUMzQixFQUFRLEVBQU8sT0FDZixFQUFPLEVBQU8sZ0JBR2hCLEdBQUksTUFBTyxJQUFPLFdBQ2hCLEdBQUksWUFBYyxRQUFRLENBQ3hCLEdBQUksR0FBUSxFQUNaLEVBQUssU0FBUyxFQUFLLEVBQUssQ0FDdEIsR0FBSSxHQUFJLEVBQU0sS0FBSyxHQUNuQixNQUFPLEdBQUksRUFBRSxHQUFLLE9BR3BCLEdBQWUsRUFDZixFQUFLLEtBS1QsTUFBSSxFQUFDLEVBQU8sTUFBUSxFQUFPLFVBQVksRUFBTyxXQUV2QyxHQUFPLE1BQU0sR0FBZSxJQUU3QixJQUFpQixRQUNuQixHQUFLLEdBQVEsRUFDYixFQUFPLGFBQWUsSUFLMUIsS0FBSyxRQUFRLEtBQUssR0FJbEIsS0FBSyxHQUFHLFVBQVksRUFBTyxTQUFTLEVBQUssQ0FFdkMsQUFBSSxJQUFRLE1BQVEsR0FDbEIsR0FBTSxFQUFHLEVBQUssRUFBSyxLQUFVLE9BQVksRUFBZSxFQUFLLEtBSS9ELEFBQUksTUFBTyxHQUFLLElBQVUsV0FBYSxNQUFPLEdBQUssSUFBVSxZQUUzRCxBQUFJLEdBQU8sS0FDVCxFQUFLLEdBQVEsRUFBTyxLQUNoQixHQUFnQixHQUNoQixHQUVKLEVBQUssR0FBUSxFQUVOLElBQVEsTUFFakIsR0FBSyxHQUFRLEtBSVYsTUFVVCxFQUFRLFVBQVUsbUJBQXFCLFNBQVMsRUFBSyxDQUNuRCxZQUFLLG9CQUFzQixVQUFVLFNBQVcsR0FBSyxFQUM5QyxNQVdULEVBQVEsVUFBVSxNQUFRLFNBQVMsRUFBTSxDQUV2QyxBQUFJLEtBQUssYUFBYSxLQUFLLHlCQUczQixLQUFLLFFBQVUsRUFHZixLQUFLLE1BQVEsS0FBSyxPQUFTLEdBQVMsRUFBSyxHQUFJLE9BR3pDLEtBQUssYUFBZSxFQUFLLE9BQVMsR0FBSyxDQUFDLEtBQUssbUJBRS9DLEVBQUssS0FBSyxVQUlaLEdBQUksR0FBUyxLQUFLLGFBQWEsS0FBSyxVQUFVLEVBQUssTUFBTSxLQUNyRCxFQUFPLEtBQUssS0FBTyxFQUFPLEtBRTFCLEVBQVMsS0FBSyxVQUFVLEtBQUssS0FBTSxFQUFPLFNBRzFDLEVBQU8sRUFBTyxLQUFLLEdBRW5CLEVBQWUsS0FRbkIsTUFOSSxJQUNGLEdBQWUsS0FBSyxTQUFTLE9BQU8sU0FBUyxFQUFTLENBQ3BELE1BQU8sR0FBUSxVQUFZLElBQzFCLElBR0QsS0FBSyxPQUFPLEtBQVUsR0FDakIsS0FBSyxrQkFBa0IsRUFBTSxFQUFNLEVBQU8sU0FDeEMsRUFFVCxHQUFLLEdBQUssRUFBYSxNQUNoQixLQUFLLGtCQUFrQixFQUFNLEVBQU0sRUFBTyxVQUN4QyxLQUFLLGtCQUVkLEdBQUssUUFBUSxLQUFLLG1CQUNYLEtBQUssa0JBQWtCLEVBQU0sRUFBTSxFQUFPLFVBRzVDLEdBWVQsRUFBUSxVQUFVLGtCQUFvQixTQUFTLEVBQU0sRUFBTSxFQUFTLENBQ2xFLEVBQU8sRUFBSyxPQUFPLEdBRWQsRUFBSyxRQUFRLEtBQUssT0FDbkIsRUFBSyxLQUFPLFFBQVUsRUFBSyxTQUFXLEdBQUcsS0FBSyxPQUc5QyxFQUFLLEtBQU8sUUFDZCxHQUFLLEdBQUssRUFBSyxHQUNmLEVBQUssR0FBSyxVQUlaLEdBQUksR0FBSSxFQUFLLEdBRVQsRUFBTSxHQUFTLEVBQUcsR0FBSyxRQUFRLElBQU0sSUFBTSxFQUFLLEdBSWhELEVBRUEsRUFBZSxHQUFHLGFBQWEsR0FFbkMsRUFBVSxHQUFRLEdBR2xCLEdBQUksR0FBVyxHQUFLLEtBQUssRUFBUyxHQUc5QixFQUFlLEdBQ25CLEFBQUksR0FBTyxFQUFXLE9BQ3BCLEdBQU0sRUFBVyxNQUNqQixFQUFlLElBQ1YsQUFBSSxHQUFPLEVBQVcsT0FDM0IsR0FBTSxFQUFXLE1BQ2pCLEVBQWUsSUFDTixHQUFPLElBQ2hCLEdBQU0sR0FHUixFQUFPLEVBQUssTUFBTSxHQUVsQixHQUFJLEdBQ0osQUFBSSxRQUFRLFdBQWEsUUFDdkIsQUFBSSxFQUNGLEdBQUssUUFBUSxHQUViLEVBQVEsU0FBUSxVQUFZLElBQUksT0FBTyxHQUV2QyxFQUFPLEdBQU0sUUFBUSxLQUFLLEdBQUksRUFBTSxDQUFFLE1BQU8sVUFBVyxVQUFXLENBQUMsRUFBRyxFQUFHLE1BRTFFLEVBQU8sR0FBTSxFQUFLLEVBQU0sQ0FBRSxNQUFPLFVBQVcsVUFBVyxDQUFDLEVBQUcsRUFBRyxLQUdoRSxHQUFLLFFBQVEsR0FDYixFQUFPLEdBQU0sUUFBUSxTQUFVLEVBQU0sQ0FBRSxNQUFPLGFBR2hELEdBQUksR0FBVSxDQUFDLFVBQVcsVUFBVyxVQUFXLFNBQVUsVUFDMUQsRUFBUSxRQUFRLFNBQVMsRUFBUSxDQUMvQixRQUFRLEdBQUcsRUFBUSxVQUFXLENBQzVCLEFBQUksRUFBSyxTQUFXLElBQVMsRUFBSyxXQUFhLE1BQzdDLEVBQUssS0FBSyxPQUloQixFQUFLLEdBQUcsUUFBUyxRQUFRLEtBQUssS0FBSyxVQUNuQyxFQUFLLEdBQUcsUUFBUyxTQUFTLEVBQUssQ0FDN0IsQUFBSSxFQUFJLE9BQVMsU0FDZixRQUFRLE1BQU0sMENBQTJDLEdBQ2hELEVBQUksT0FBUyxVQUN0QixRQUFRLE1BQU0sMERBQTJELEdBRTNFLFFBQVEsS0FBSyxLQUlmLEtBQUssZUFBaUIsR0FheEIsRUFBUSxVQUFVLFVBQVksU0FBUyxFQUFNLENBTTNDLE9BTEksR0FBTSxHQUNSLEVBQ0EsRUFDQSxFQUVPLEVBQUksRUFBRyxFQUFNLEVBQUssT0FBUSxFQUFJLEVBQUssRUFBRSxFQU01QyxHQUxBLEVBQU0sRUFBSyxHQUNQLEVBQUksR0FDTixHQUFVLEtBQUssVUFBVSxFQUFLLEVBQUksS0FHaEMsSUFBUSxLQUFNLENBRWhCLEVBQU0sRUFBSSxPQUFPLEVBQUssTUFBTSxJQUM1QixVQUNLLEFBQUksSUFBVyxFQUFRLFNBQzVCLEVBQUksS0FBSyxHQUNKLEFBQUksRUFBSSxPQUFTLEdBQUssRUFBSSxLQUFPLEtBQU8sRUFBSSxLQUFPLElBQ3hELEVBQUksTUFBTSxHQUFHLE1BQU0sSUFBSSxRQUFRLFNBQVMsRUFBRyxDQUN6QyxFQUFJLEtBQUssSUFBTSxLQUVaLEFBQUksTUFBTSxLQUFLLElBQVEsQ0FBRSxHQUFRLEVBQUksUUFBUSxNQUNsRCxFQUFJLEtBQUssRUFBSSxNQUFNLEVBQUcsR0FBUSxFQUFJLE1BQU0sRUFBUSxJQUVoRCxFQUFJLEtBQUssR0FJYixNQUFPLElBZVQsRUFBUSxVQUFVLFVBQVksU0FBUyxFQUFNLEVBQVMsQ0FDcEQsR0FBSSxHQUVKLE1BQUksR0FBSyxPQUNQLEdBQU8sRUFBSyxHQUNaLEFBQUksS0FBSyxVQUFVLFdBQWEsR0FBTSxPQUNwQyxLQUFLLEtBQUssV0FBYSxFQUFLLFFBQVMsRUFBTSxHQUUzQyxLQUFLLEtBQUssWUFBYSxJQUd6QixJQUFzQixLQUFNLEdBSXhCLEVBQVEsT0FBUyxHQUNuQixLQUFLLGNBQWMsRUFBUSxJQUV6QixLQUFLLFNBQVMsU0FBVyxHQUN6QixLQUFLLE1BQU0sT0FBTyxTQUFTLEVBQUcsQ0FBRSxNQUFPLEdBQUUsV0FBYSxTQUFXLEdBQ25FLEtBQUssS0FBSyxjQUlQLE1BV1QsRUFBUSxVQUFVLFVBQVksU0FBUyxFQUFLLENBQzFDLE9BQVMsR0FBSSxFQUFHLEVBQU0sS0FBSyxRQUFRLE9BQVEsRUFBSSxFQUFLLEVBQUUsRUFDcEQsR0FBSSxLQUFLLFFBQVEsR0FBRyxHQUFHLEdBQ3JCLE1BQU8sTUFBSyxRQUFRLElBYzFCLEVBQVEsVUFBVSxhQUFlLFNBQVMsRUFBTSxDQVU5QyxPQVRJLEdBQU8sR0FDVCxFQUFNLEVBQUssT0FDWCxFQUNBLEVBQ0EsRUFFRSxFQUFpQixHQUdaLEVBQUksRUFBRyxFQUFJLEVBQUssRUFBRSxFQUFHLENBSTVCLEdBSEEsRUFBTSxFQUFLLEdBR1AsRUFBUyxDQUNYLEVBQUssS0FBSyxHQUNWLFNBR0YsR0FBSSxJQUFRLEtBQU0sQ0FDaEIsRUFBVSxHQUNWLFNBT0YsR0FIQSxFQUFTLEtBQUssVUFBVSxHQUdwQixFQUFRLENBRVYsR0FBSSxFQUFPLFNBQVUsQ0FFbkIsR0FEQSxFQUFNLEVBQUssRUFBRSxHQUNULEdBQU8sS0FBTSxNQUFPLE1BQUssc0JBQXNCLEdBQ25ELEtBQUssS0FBSyxVQUFZLEVBQU8sT0FBUSxPQUVoQyxBQUFJLEdBQU8sU0FDaEIsR0FBTSxFQUFLLEVBQUksR0FDZixBQUFJLEdBQU8sTUFBUyxFQUFJLEtBQU8sS0FBTyxJQUFRLElBQzVDLEVBQU0sS0FFTixFQUFFLEVBRUosS0FBSyxLQUFLLFVBQVksRUFBTyxPQUFRLElBR3JDLEtBQUssS0FBSyxVQUFZLEVBQU8sUUFFL0IsU0FJRixHQUFJLEVBQUksT0FBUyxHQUFLLEVBQUksS0FBTyxJQUFLLENBQ3BDLEVBQWUsS0FBSyxHQUtmLEVBQUksRUFBSyxFQUFLLFFBQVUsRUFBSyxFQUFJLEdBQUcsS0FBTyxLQUM5QyxFQUFlLEtBQUssRUFBSyxFQUFFLElBRTdCLFNBSUYsRUFBSyxLQUFLLEdBR1osTUFBTyxDQUFFLEtBQU0sRUFBTSxRQUFTLElBU2hDLEVBQVEsVUFBVSxLQUFPLFVBQVcsQ0FJbEMsT0FISSxHQUFTLEdBQ1gsRUFBTSxLQUFLLFFBQVEsT0FFWixFQUFJLEVBQUcsRUFBSSxFQUFLLElBQUssQ0FDNUIsR0FBSSxHQUFNLEtBQUssUUFBUSxHQUFHLGdCQUMxQixFQUFPLEdBQU8sSUFBUSxLQUFLLG1CQUFxQixLQUFLLFNBQVcsS0FBSyxHQUV2RSxNQUFPLElBVVQsRUFBUSxVQUFVLGdCQUFrQixTQUFTLEVBQU0sQ0FDakQsUUFBUSxNQUFNLHdDQUF5QyxHQUN2RCxRQUFRLEtBQUssSUFXZixFQUFRLFVBQVUsc0JBQXdCLFNBQVMsRUFBUSxFQUFNLENBQy9ELEFBQUksRUFDRixRQUFRLE1BQU0sZ0RBQWlELEVBQU8sTUFBTyxHQUU3RSxRQUFRLE1BQU0sc0NBQXVDLEVBQU8sT0FFOUQsUUFBUSxLQUFLLElBVWYsRUFBUSxVQUFVLGNBQWdCLFNBQVMsRUFBTSxDQUMvQyxBQUFJLEtBQUsscUJBQ1QsU0FBUSxNQUFNLDZCQUE4QixHQUM1QyxRQUFRLEtBQUssS0FVZixFQUFRLFVBQVUsbUJBQXFCLFNBQVMsRUFBTSxDQUNwRCxRQUFRLE1BQU0sOENBQStDLEdBQzdELFFBQVEsS0FBSyxJQWVmLEVBQVEsVUFBVSxRQUFVLFNBQVMsRUFBSyxFQUFPLENBQy9DLEdBQUksVUFBVSxTQUFXLEVBQUcsTUFBTyxNQUFLLFNBQ3hDLEtBQUssU0FBVyxFQUNoQixFQUFRLEdBQVMsZ0JBQ2pCLEdBQUksR0FBZ0IsR0FBSSxJQUFPLEVBQU8sNkJBQ3RDLFlBQUssbUJBQXFCLEVBQWMsS0FBSyxPQUFPLElBQU0sVUFDMUQsS0FBSyxRQUFRLEtBQUssR0FDbEIsS0FBSyxHQUFHLFVBQVksS0FBSyxtQkFBb0IsVUFBVyxDQUN0RCxRQUFRLE9BQU8sTUFBTSxFQUFNO0FBQUEsR0FDM0IsUUFBUSxLQUFLLEtBRVIsTUFZVCxFQUFRLFVBQVUsWUFBYyxTQUFTLEVBQUssRUFBaUIsQ0FDN0QsTUFBSSxXQUFVLFNBQVcsRUFBVSxLQUFLLGFBQ3hDLE1BQUssYUFBZSxFQUNwQixLQUFLLGlCQUFtQixFQUNqQixPQVdULEVBQVEsVUFBVSxNQUFRLFNBQVMsRUFBTyxDQUN4QyxHQUFJLEdBQVUsS0FLZCxHQUpJLEtBQUssU0FBUyxTQUFXLEdBQzNCLEdBQVUsS0FBSyxTQUFTLEtBQUssU0FBUyxPQUFTLElBRzdDLFVBQVUsU0FBVyxFQUFHLE1BQU8sR0FBUSxPQUUzQyxHQUFJLElBQVUsRUFBUSxNQUFPLEtBQU0sSUFBSSxPQUFNLCtDQUU3QyxTQUFRLE9BQVMsRUFDVixNQVdULEVBQVEsVUFBVSxNQUFRLFNBQVMsRUFBSyxDQUN0QyxHQUFJLEdBQU8sS0FBSyxNQUFNLElBQUksU0FBUyxFQUFLLENBQ3RDLE1BQU8sSUFBcUIsS0FHMUIsRUFBUSxZQUNULE1BQUssU0FBUyxPQUFTLGFBQWUsSUFDdEMsTUFBSyxNQUFNLE9BQVMsSUFBTSxFQUFLLEtBQUssS0FBTyxJQUU5QyxNQUFJLFdBQVUsU0FBVyxFQUFVLEtBQUssUUFBVSxFQUNsRCxNQUFLLE9BQVMsRUFFUCxPQVdULEVBQVEsVUFBVSxLQUFPLFNBQVMsRUFBSyxDQUNyQyxNQUFJLFdBQVUsU0FBVyxFQUFVLEtBQUssTUFDeEMsTUFBSyxNQUFRLEVBQ04sT0FVVCxFQUFRLFVBQVUsZ0JBQWtCLFVBQVcsQ0FDN0MsTUFBTyxNQUFLLFNBQVMsT0FBTyxTQUFTLEVBQUssQ0FDeEMsTUFBTyxDQUFDLEVBQUksVUFDWCxJQUFJLFNBQVMsRUFBSyxDQUNuQixHQUFJLEdBQU8sRUFBSSxNQUFNLElBQUksU0FBUyxFQUFLLENBQ3JDLE1BQU8sSUFBcUIsS0FDM0IsS0FBSyxLQUVSLE1BQU8sQ0FDTCxFQUFJLE1BQ0QsR0FBSSxPQUFTLElBQU0sRUFBSSxPQUFTLElBQ2hDLEdBQUksUUFBUSxPQUFTLGFBQWUsSUFDcEMsR0FBTyxJQUFNLEVBQU8sSUFDdkIsRUFBSSxpQkFZVixFQUFRLFVBQVUscUJBQXVCLFVBQVcsQ0FDbEQsR0FBSSxHQUFXLEtBQUssa0JBQ3BCLE1BQU8sR0FBUyxPQUFPLFNBQVMsRUFBSyxFQUFTLENBQzVDLE1BQU8sTUFBSyxJQUFJLEVBQUssRUFBUSxHQUFHLFNBQy9CLElBVUwsRUFBUSxVQUFVLG9CQUFzQixVQUFXLENBQ2pELEdBQUksR0FBVSxHQUFHLE1BQU0sS0FBSyxLQUFLLFNBQ2pDLFNBQVEsS0FBSyxDQUNYLE1BQU8sZUFFRixFQUFRLE9BQU8sU0FBUyxFQUFLLEVBQVEsQ0FDMUMsTUFBTyxNQUFLLElBQUksRUFBSyxFQUFPLE1BQU0sU0FDakMsSUFVTCxFQUFRLFVBQVUsaUJBQW1CLFVBQVcsQ0FDOUMsTUFBTyxNQUFLLE1BQU0sT0FBTyxTQUFTLEVBQUssRUFBSyxDQUMxQyxNQUFPLE1BQUssSUFBSSxFQUFLLEVBQUksS0FBSyxTQUM3QixJQVVMLEVBQVEsVUFBVSxTQUFXLFVBQVcsQ0FDdEMsR0FBSSxHQUFRLEtBQUssc0JBQ2pCLE1BQUksTUFBSyxrQkFBb0IsS0FBSyxNQUFNLFFBQ2xDLEtBQUssbUJBQXFCLEdBQzVCLEdBQVEsS0FBSyxvQkFJYixLQUFLLFVBQVksS0FBSyxTQUFTLFFBQzdCLEtBQUssdUJBQXlCLEdBQ2hDLEdBQVEsS0FBSyx3QkFJVixHQVVULEVBQVEsVUFBVSxXQUFhLFVBQVcsQ0FDeEMsR0FBSSxHQUFRLEtBQUssV0FHakIsTUFBTyxNQUFLLFFBQVEsSUFBSSxTQUFTLEVBQVEsQ0FDdkMsTUFBTyxJQUFJLEVBQU8sTUFBTyxHQUFTLEtBQU8sRUFBTyxZQUM1QyxHQUFPLE1BQVEsRUFBTyxlQUFpQixPQUFhLGNBQWdCLEtBQUssVUFBVSxFQUFPLGNBQWdCLElBQU0sTUFDbkgsT0FBTyxDQUFDLEdBQUksYUFBYyxHQUFTLCtCQUNuQyxLQUFLO0FBQUEsSUFVVixFQUFRLFVBQVUsWUFBYyxVQUFXLENBQ3pDLEdBQUksQ0FBQyxLQUFLLFNBQVMsT0FBUSxNQUFPLEdBRWxDLEdBQUksR0FBVyxLQUFLLGtCQUNoQixFQUFRLEtBQUssV0FFakIsTUFBTyxDQUNMLFlBQ0EsRUFBUyxJQUFJLFNBQVMsRUFBSyxDQUN6QixHQUFJLEdBQU8sRUFBSSxHQUFLLEtBQU8sRUFBSSxHQUFLLEdBQ3BDLE1BQVEsR0FBTyxHQUFJLEVBQUksR0FBSSxHQUFTLEVBQUksSUFBTSxJQUM3QyxLQUFLO0FBQUEsR0FBTSxRQUFRLE1BQU8sTUFDN0IsSUFDQSxLQUFLO0FBQUEsSUFVVCxFQUFRLFVBQVUsZ0JBQWtCLFVBQVcsQ0FDN0MsR0FBSSxHQUFPLEdBQ1gsR0FBSSxLQUFLLGFBQWMsQ0FDckIsRUFBTyxDQUNMLEtBQUssYUFDTCxJQUdGLEdBQUksR0FBa0IsS0FBSyxpQkFDM0IsR0FBSSxHQUFtQixLQUFLLE1BQU0sT0FBUSxDQUN4QyxHQUFJLEdBQVEsS0FBSyxXQUNqQixFQUFLLEtBQUssY0FDVixFQUFLLEtBQUssSUFDVixLQUFLLE1BQU0sUUFBUSxTQUFTLEVBQUssQ0FDL0IsRUFBSyxLQUFLLEtBQU8sR0FBSSxFQUFJLEtBQU0sR0FBUyxLQUFPLEVBQWdCLEVBQUksU0FFckUsRUFBSyxLQUFLLEtBSWQsR0FBSSxHQUFVLEtBQUssTUFDbkIsQUFBSSxLQUFLLFFBQ1AsR0FBVSxFQUFVLElBQU0sS0FBSyxRQUVqQyxHQUFJLEdBQVEsQ0FDVixVQUFZLEVBQVUsSUFBTSxLQUFLLFFBQ2pDLElBR0UsRUFBTyxHQUNQLEVBQWMsS0FBSyxjQUN2QixBQUFJLEdBQWEsR0FBTyxDQUFDLElBRXpCLEdBQUksR0FBVSxDQUNaLFdBQ0EsR0FBSyxLQUFLLGFBQWEsUUFBUSxNQUFPLE1BQ3RDLElBR0YsTUFBTyxHQUNKLE9BQU8sR0FDUCxPQUFPLEdBQ1AsT0FBTyxHQUNQLEtBQUs7QUFBQSxJQVNWLEVBQVEsVUFBVSxXQUFhLFNBQVMsRUFBSSxDQUMxQyxBQUFLLEdBQ0gsR0FBSyxTQUFTLEVBQVUsQ0FDdEIsTUFBTyxLQUdYLFFBQVEsT0FBTyxNQUFNLEVBQUcsS0FBSyxvQkFDN0IsS0FBSyxLQUFLLFdBU1osRUFBUSxVQUFVLEtBQU8sU0FBUyxFQUFJLENBQ3BDLEtBQUssV0FBVyxHQUNoQixRQUFRLFFBV1YsWUFBbUIsRUFBTSxDQUN2QixNQUFPLEdBQUssTUFBTSxLQUFLLE9BQU8sU0FBUyxFQUFLLEVBQU0sQ0FDaEQsTUFBTyxHQUFNLEVBQUssR0FBRyxjQUFnQixFQUFLLE1BQU0sS0FhcEQsWUFBYSxFQUFLLEVBQU8sQ0FDdkIsR0FBSSxHQUFNLEtBQUssSUFBSSxFQUFHLEVBQVEsRUFBSSxRQUNsQyxNQUFPLEdBQU0sTUFBTSxFQUFNLEdBQUcsS0FBSyxLQVduQyxZQUErQixFQUFLLEVBQVMsQ0FDM0MsRUFBVSxHQUFXLEdBQ3JCLE9BQVMsR0FBSSxFQUFHLEVBQUksRUFBUSxPQUFRLElBQ2xDLEFBQUksR0FBUSxLQUFPLFVBQVksRUFBUSxLQUFPLE9BQzVDLEdBQUksYUFDSixRQUFRLEtBQUssSUFhbkIsWUFBOEIsRUFBSyxDQUNqQyxHQUFJLEdBQWEsRUFBSSxLQUFRLEdBQUksV0FBYSxHQUFPLE1BQVEsSUFFN0QsTUFBTyxHQUFJLFNBQ1AsSUFBTSxFQUFhLElBQ25CLElBQU0sRUFBYSxJQUl6QixZQUFnQixFQUFNLENBQ3BCLEdBQUksQ0FDRixHQUFJLEdBQUcsU0FBUyxHQUFNLFNBQ3BCLE1BQU8sUUFFVCxDQUNBLE1BQU8sT0Nyc0NYLGtCQWdCQSxHQUFJLElBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDSixBQUFDLFVBQVUsRUFBUyxDQUNoQixHQUFJLEdBQU8sTUFBTyxTQUFXLFNBQVcsT0FBUyxNQUFPLE9BQVMsU0FBVyxLQUFPLE1BQU8sT0FBUyxTQUFXLEtBQU8sR0FDckgsQUFBSSxNQUFPLFNBQVcsWUFBYyxPQUFPLElBQ3ZDLE9BQU8sUUFBUyxDQUFDLFdBQVksU0FBVSxFQUFTLENBQUUsRUFBUSxFQUFlLEVBQU0sRUFBZSxPQUU3RixBQUFJLE1BQU8sS0FBVyxVQUFZLE1BQU8sSUFBTyxTQUFZLFNBQzdELEVBQVEsRUFBZSxFQUFNLEVBQWUsR0FBTyxXQUduRCxFQUFRLEVBQWUsSUFFM0IsV0FBd0IsRUFBUyxFQUFVLENBQ3ZDLE1BQUksS0FBWSxHQUNaLENBQUksTUFBTyxRQUFPLFFBQVcsV0FDekIsT0FBTyxlQUFlLEVBQVMsYUFBYyxDQUFFLE1BQU8sS0FHdEQsRUFBUSxXQUFhLElBR3RCLFNBQVUsRUFBSSxFQUFHLENBQUUsTUFBTyxHQUFRLEdBQU0sRUFBVyxFQUFTLEVBQUksR0FBSyxNQUduRixTQUFVLEVBQVUsQ0FDakIsR0FBSSxHQUFnQixPQUFPLGdCQUN0QixDQUFFLFVBQVcsYUFBZ0IsUUFBUyxTQUFVLEVBQUcsRUFBRyxDQUFFLEVBQUUsVUFBWSxJQUN2RSxTQUFVLEVBQUcsRUFBRyxDQUFFLE9BQVMsS0FBSyxHQUFHLEFBQUksRUFBRSxlQUFlLElBQUksR0FBRSxHQUFLLEVBQUUsS0FFekUsR0FBWSxTQUFVLEVBQUcsRUFBRyxDQUN4QixFQUFjLEVBQUcsR0FDakIsWUFBYyxDQUFFLEtBQUssWUFBYyxFQUNuQyxFQUFFLFVBQVksSUFBTSxLQUFPLE9BQU8sT0FBTyxHQUFNLEdBQUcsVUFBWSxFQUFFLFVBQVcsR0FBSSxLQUduRixHQUFXLE9BQU8sUUFBVSxTQUFVLEVBQUcsQ0FDckMsT0FBUyxHQUFHLEVBQUksRUFBRyxFQUFJLFVBQVUsT0FBUSxFQUFJLEVBQUcsSUFBSyxDQUNqRCxFQUFJLFVBQVUsR0FDZCxPQUFTLEtBQUssR0FBRyxBQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUssRUFBRyxJQUFJLEdBQUUsR0FBSyxFQUFFLElBRTlFLE1BQU8sSUFHWCxHQUFTLFNBQVUsRUFBRyxFQUFHLENBQ3JCLEdBQUksR0FBSSxHQUNSLE9BQVMsS0FBSyxHQUFHLEFBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxFQUFHLElBQU0sRUFBRSxRQUFRLEdBQUssR0FDOUUsR0FBRSxHQUFLLEVBQUUsSUFDYixHQUFJLEdBQUssTUFBUSxNQUFPLFFBQU8sdUJBQTBCLFdBQ3JELE9BQVMsR0FBSSxFQUFHLEVBQUksT0FBTyxzQkFBc0IsR0FBSSxFQUFJLEVBQUUsT0FBUSxJQUMvRCxBQUFJLEVBQUUsUUFBUSxFQUFFLElBQU0sR0FBSyxPQUFPLFVBQVUscUJBQXFCLEtBQUssRUFBRyxFQUFFLEtBQ3ZFLEdBQUUsRUFBRSxJQUFNLEVBQUUsRUFBRSxLQUUxQixNQUFPLElBR1gsR0FBYSxTQUFVLEVBQVksRUFBUSxFQUFLLEVBQU0sQ0FDbEQsR0FBSSxHQUFJLFVBQVUsT0FBUSxFQUFJLEVBQUksRUFBSSxFQUFTLElBQVMsS0FBTyxFQUFPLE9BQU8seUJBQXlCLEVBQVEsR0FBTyxFQUFNLEVBQzNILEdBQUksTUFBTyxVQUFZLFVBQVksTUFBTyxTQUFRLFVBQWEsV0FBWSxFQUFJLFFBQVEsU0FBUyxFQUFZLEVBQVEsRUFBSyxPQUNwSCxRQUFTLEdBQUksRUFBVyxPQUFTLEVBQUcsR0FBSyxFQUFHLElBQUssQUFBSSxHQUFJLEVBQVcsS0FBSSxHQUFLLEdBQUksRUFBSSxFQUFFLEdBQUssRUFBSSxFQUFJLEVBQUUsRUFBUSxFQUFLLEdBQUssRUFBRSxFQUFRLEtBQVMsR0FDaEosTUFBTyxHQUFJLEdBQUssR0FBSyxPQUFPLGVBQWUsRUFBUSxFQUFLLEdBQUksR0FHaEUsR0FBVSxTQUFVLEVBQVksRUFBVyxDQUN2QyxNQUFPLFVBQVUsRUFBUSxFQUFLLENBQUUsRUFBVSxFQUFRLEVBQUssS0FHM0QsR0FBYSxTQUFVLEVBQWEsRUFBZSxDQUMvQyxHQUFJLE1BQU8sVUFBWSxVQUFZLE1BQU8sU0FBUSxVQUFhLFdBQVksTUFBTyxTQUFRLFNBQVMsRUFBYSxJQUdwSCxHQUFZLFNBQVUsRUFBUyxFQUFZLEVBQUcsRUFBVyxDQUNyRCxXQUFlLEVBQU8sQ0FBRSxNQUFPLGFBQWlCLEdBQUksRUFBUSxHQUFJLEdBQUUsU0FBVSxFQUFTLENBQUUsRUFBUSxLQUMvRixNQUFPLElBQUssSUFBTSxHQUFJLFVBQVUsU0FBVSxFQUFTLEVBQVEsQ0FDdkQsV0FBbUIsRUFBTyxDQUFFLEdBQUksQ0FBRSxFQUFLLEVBQVUsS0FBSyxVQUFrQixFQUFQLENBQVksRUFBTyxJQUNwRixXQUFrQixFQUFPLENBQUUsR0FBSSxDQUFFLEVBQUssRUFBVSxNQUFTLFVBQWtCLEVBQVAsQ0FBWSxFQUFPLElBQ3ZGLFdBQWMsRUFBUSxDQUFFLEVBQU8sS0FBTyxFQUFRLEVBQU8sT0FBUyxFQUFNLEVBQU8sT0FBTyxLQUFLLEVBQVcsR0FDbEcsRUFBTSxHQUFZLEVBQVUsTUFBTSxFQUFTLEdBQWMsS0FBSyxXQUl0RSxHQUFjLFNBQVUsRUFBUyxFQUFNLENBQ25DLEdBQUksR0FBSSxDQUFFLE1BQU8sRUFBRyxLQUFNLFVBQVcsQ0FBRSxHQUFJLEVBQUUsR0FBSyxFQUFHLEtBQU0sR0FBRSxHQUFJLE1BQU8sR0FBRSxJQUFPLEtBQU0sR0FBSSxJQUFLLElBQU0sRUFBRyxFQUFHLEVBQUcsRUFDL0csTUFBTyxHQUFJLENBQUUsS0FBTSxFQUFLLEdBQUksTUFBUyxFQUFLLEdBQUksT0FBVSxFQUFLLElBQU0sTUFBTyxTQUFXLFlBQWUsR0FBRSxPQUFPLFVBQVksVUFBVyxDQUFFLE1BQU8sUUFBVSxFQUN2SixXQUFjLEVBQUcsQ0FBRSxNQUFPLFVBQVUsRUFBRyxDQUFFLE1BQU8sR0FBSyxDQUFDLEVBQUcsS0FDekQsV0FBYyxFQUFJLENBQ2QsR0FBSSxFQUFHLEtBQU0sSUFBSSxXQUFVLG1DQUMzQixLQUFPLEdBQUcsR0FBSSxDQUNWLEdBQUksRUFBSSxFQUFHLEdBQU0sR0FBSSxFQUFHLEdBQUssRUFBSSxFQUFFLE9BQVksRUFBRyxHQUFLLEVBQUUsT0FBYyxJQUFJLEVBQUUsU0FBYyxFQUFFLEtBQUssR0FBSSxHQUFLLEVBQUUsT0FBUyxDQUFFLEdBQUksRUFBRSxLQUFLLEVBQUcsRUFBRyxLQUFLLEtBQU0sTUFBTyxHQUUzSixPQURJLEVBQUksRUFBRyxHQUFHLEdBQUssQ0FBQyxFQUFHLEdBQUssRUFBRyxFQUFFLFFBQ3pCLEVBQUcsUUFDRixPQUFRLEdBQUcsRUFBSSxFQUFJLFVBQ25CLEdBQUcsU0FBRSxRQUFnQixDQUFFLE1BQU8sRUFBRyxHQUFJLEtBQU0sUUFDM0MsR0FBRyxFQUFFLFFBQVMsRUFBSSxFQUFHLEdBQUksRUFBSyxDQUFDLEdBQUksYUFDbkMsR0FBRyxFQUFLLEVBQUUsSUFBSSxNQUFPLEVBQUUsS0FBSyxNQUFPLGlCQUVwQyxHQUFNLEVBQUksRUFBRSxLQUFNLElBQUksRUFBRSxPQUFTLEdBQUssRUFBRSxFQUFFLE9BQVMsS0FBUSxHQUFHLEtBQU8sR0FBSyxFQUFHLEtBQU8sR0FBSSxDQUFFLEVBQUksRUFBRyxTQUNqRyxHQUFJLEVBQUcsS0FBTyxHQUFNLEVBQUMsR0FBTSxFQUFHLEdBQUssRUFBRSxJQUFNLEVBQUcsR0FBSyxFQUFFLElBQU0sQ0FBRSxFQUFFLE1BQVEsRUFBRyxHQUFJLE1BQzlFLEdBQUksRUFBRyxLQUFPLEdBQUssRUFBRSxNQUFRLEVBQUUsR0FBSSxDQUFFLEVBQUUsTUFBUSxFQUFFLEdBQUksRUFBSSxFQUFJLE1BQzdELEdBQUksR0FBSyxFQUFFLE1BQVEsRUFBRSxHQUFJLENBQUUsRUFBRSxNQUFRLEVBQUUsR0FBSSxFQUFFLElBQUksS0FBSyxHQUFLLE1BQzNELEFBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxNQUNoQixFQUFFLEtBQUssTUFBTyxTQUV0QixFQUFLLEVBQUssS0FBSyxFQUFTLFNBQ25CLEVBQVAsQ0FBWSxFQUFLLENBQUMsRUFBRyxHQUFJLEVBQUksU0FBSyxDQUFVLEVBQUksRUFBSSxFQUN0RCxHQUFJLEVBQUcsR0FBSyxFQUFHLEtBQU0sR0FBRyxHQUFJLE1BQU8sQ0FBRSxNQUFPLEVBQUcsR0FBSyxFQUFHLEdBQUssT0FBUSxLQUFNLE1BSWxGLEdBQWtCLFNBQVMsRUFBRyxFQUFHLEVBQUcsRUFBSSxDQUNwQyxBQUFJLElBQU8sUUFBVyxHQUFLLEdBQzNCLEVBQUUsR0FBTSxFQUFFLElBR2QsR0FBZSxTQUFVLEVBQUcsRUFBUyxDQUNqQyxPQUFTLEtBQUssR0FBRyxBQUFJLElBQU0sV0FBYSxDQUFDLEVBQVEsZUFBZSxJQUFJLEdBQVEsR0FBSyxFQUFFLEtBR3ZGLEdBQVcsU0FBVSxFQUFHLENBQ3BCLEdBQUksR0FBSSxNQUFPLFNBQVcsWUFBYyxPQUFPLFNBQVUsRUFBSSxHQUFLLEVBQUUsR0FBSSxFQUFJLEVBQzVFLEdBQUksRUFBRyxNQUFPLEdBQUUsS0FBSyxHQUNyQixHQUFJLEdBQUssTUFBTyxHQUFFLFFBQVcsU0FBVSxNQUFPLENBQzFDLEtBQU0sVUFBWSxDQUNkLE1BQUksSUFBSyxHQUFLLEVBQUUsUUFBUSxHQUFJLFFBQ3JCLENBQUUsTUFBTyxHQUFLLEVBQUUsS0FBTSxLQUFNLENBQUMsS0FHNUMsS0FBTSxJQUFJLFdBQVUsRUFBSSwwQkFBNEIsb0NBR3hELEdBQVMsU0FBVSxFQUFHLEVBQUcsQ0FDckIsR0FBSSxHQUFJLE1BQU8sU0FBVyxZQUFjLEVBQUUsT0FBTyxVQUNqRCxHQUFJLENBQUMsRUFBRyxNQUFPLEdBQ2YsR0FBSSxHQUFJLEVBQUUsS0FBSyxHQUFJLEVBQUcsRUFBSyxHQUFJLEVBQy9CLEdBQUksQ0FDQSxLQUFRLEtBQU0sUUFBVSxLQUFNLElBQU0sQ0FBRSxHQUFJLEVBQUUsUUFBUSxNQUFNLEVBQUcsS0FBSyxFQUFFLGFBRWpFLEVBQVAsQ0FBZ0IsRUFBSSxDQUFFLE1BQU8sVUFDN0IsQ0FDSSxHQUFJLENBQ0EsQUFBSSxHQUFLLENBQUMsRUFBRSxNQUFTLEdBQUksRUFBRSxTQUFZLEVBQUUsS0FBSyxVQUVsRCxDQUFVLEdBQUksRUFBRyxLQUFNLEdBQUUsT0FFN0IsTUFBTyxJQUdYLEdBQVcsVUFBWSxDQUNuQixPQUFTLEdBQUssR0FBSSxFQUFJLEVBQUcsRUFBSSxVQUFVLE9BQVEsSUFDM0MsRUFBSyxFQUFHLE9BQU8sR0FBTyxVQUFVLEtBQ3BDLE1BQU8sSUFHWCxHQUFpQixVQUFZLENBQ3pCLE9BQVMsR0FBSSxFQUFHLEVBQUksRUFBRyxFQUFLLFVBQVUsT0FBUSxFQUFJLEVBQUksSUFBSyxHQUFLLFVBQVUsR0FBRyxPQUM3RSxPQUFTLEdBQUksTUFBTSxHQUFJLEVBQUksRUFBRyxFQUFJLEVBQUcsRUFBSSxFQUFJLElBQ3pDLE9BQVMsR0FBSSxVQUFVLEdBQUksRUFBSSxFQUFHLEVBQUssRUFBRSxPQUFRLEVBQUksRUFBSSxJQUFLLElBQzFELEVBQUUsR0FBSyxFQUFFLEdBQ2pCLE1BQU8sSUFHWCxHQUFVLFNBQVUsRUFBRyxDQUNuQixNQUFPLGdCQUFnQixJQUFXLE1BQUssRUFBSSxFQUFHLE1BQVEsR0FBSSxJQUFRLElBR3RFLEdBQW1CLFNBQVUsRUFBUyxFQUFZLEVBQVcsQ0FDekQsR0FBSSxDQUFDLE9BQU8sY0FBZSxLQUFNLElBQUksV0FBVSx3Q0FDL0MsR0FBSSxHQUFJLEVBQVUsTUFBTSxFQUFTLEdBQWMsSUFBSyxFQUFHLEVBQUksR0FDM0QsTUFBTyxHQUFJLEdBQUksRUFBSyxRQUFTLEVBQUssU0FBVSxFQUFLLFVBQVcsRUFBRSxPQUFPLGVBQWlCLFVBQVksQ0FBRSxNQUFPLE9BQVMsRUFDcEgsV0FBYyxFQUFHLENBQUUsQUFBSSxFQUFFLElBQUksR0FBRSxHQUFLLFNBQVUsRUFBRyxDQUFFLE1BQU8sSUFBSSxTQUFRLFNBQVUsRUFBRyxFQUFHLENBQUUsRUFBRSxLQUFLLENBQUMsRUFBRyxFQUFHLEVBQUcsSUFBTSxHQUFLLEVBQU8sRUFBRyxPQUM5SCxXQUFnQixFQUFHLEVBQUcsQ0FBRSxHQUFJLENBQUUsRUFBSyxFQUFFLEdBQUcsVUFBYyxFQUFQLENBQVksRUFBTyxFQUFFLEdBQUcsR0FBSSxJQUMzRSxXQUFjLEVBQUcsQ0FBRSxFQUFFLGdCQUFpQixJQUFVLFFBQVEsUUFBUSxFQUFFLE1BQU0sR0FBRyxLQUFLLEVBQVMsR0FBVSxFQUFPLEVBQUUsR0FBRyxHQUFJLEdBQ25ILFdBQWlCLEVBQU8sQ0FBRSxFQUFPLE9BQVEsR0FDekMsV0FBZ0IsRUFBTyxDQUFFLEVBQU8sUUFBUyxHQUN6QyxXQUFnQixFQUFHLEVBQUcsQ0FBRSxBQUFJLEVBQUUsR0FBSSxFQUFFLFFBQVMsRUFBRSxRQUFRLEVBQU8sRUFBRSxHQUFHLEdBQUksRUFBRSxHQUFHLE1BR2hGLEdBQW1CLFNBQVUsRUFBRyxDQUM1QixHQUFJLEdBQUcsRUFDUCxNQUFPLEdBQUksR0FBSSxFQUFLLFFBQVMsRUFBSyxRQUFTLFNBQVUsRUFBRyxDQUFFLEtBQU0sS0FBTyxFQUFLLFVBQVcsRUFBRSxPQUFPLFVBQVksVUFBWSxDQUFFLE1BQU8sT0FBUyxFQUMxSSxXQUFjLEVBQUcsRUFBRyxDQUFFLEVBQUUsR0FBSyxFQUFFLEdBQUssU0FBVSxFQUFHLENBQUUsTUFBUSxHQUFJLENBQUMsR0FBSyxDQUFFLE1BQU8sR0FBUSxFQUFFLEdBQUcsSUFBSyxLQUFNLElBQU0sVUFBYSxFQUFJLEVBQUUsR0FBSyxHQUFPLElBRy9JLEdBQWdCLFNBQVUsRUFBRyxDQUN6QixHQUFJLENBQUMsT0FBTyxjQUFlLEtBQU0sSUFBSSxXQUFVLHdDQUMvQyxHQUFJLEdBQUksRUFBRSxPQUFPLGVBQWdCLEVBQ2pDLE1BQU8sR0FBSSxFQUFFLEtBQUssR0FBTSxHQUFJLE1BQU8sS0FBYSxXQUFhLEdBQVMsR0FBSyxFQUFFLE9BQU8sWUFBYSxFQUFJLEdBQUksRUFBSyxRQUFTLEVBQUssU0FBVSxFQUFLLFVBQVcsRUFBRSxPQUFPLGVBQWlCLFVBQVksQ0FBRSxNQUFPLE9BQVMsR0FDOU0sV0FBYyxFQUFHLENBQUUsRUFBRSxHQUFLLEVBQUUsSUFBTSxTQUFVLEVBQUcsQ0FBRSxNQUFPLElBQUksU0FBUSxTQUFVLEVBQVMsRUFBUSxDQUFFLEVBQUksRUFBRSxHQUFHLEdBQUksRUFBTyxFQUFTLEVBQVEsRUFBRSxLQUFNLEVBQUUsVUFDaEosV0FBZ0IsRUFBUyxFQUFRLEVBQUcsRUFBRyxDQUFFLFFBQVEsUUFBUSxHQUFHLEtBQUssU0FBUyxFQUFHLENBQUUsRUFBUSxDQUFFLE1BQU8sRUFBRyxLQUFNLEtBQVMsS0FHdEgsR0FBdUIsU0FBVSxFQUFRLEVBQUssQ0FDMUMsTUFBSSxRQUFPLGVBQWtCLE9BQU8sZUFBZSxFQUFRLE1BQU8sQ0FBRSxNQUFPLElBQWlCLEVBQU8sSUFBTSxFQUNsRyxHQUdYLEdBQWUsU0FBVSxFQUFLLENBQzFCLEdBQUksR0FBTyxFQUFJLFdBQVksTUFBTyxHQUNsQyxHQUFJLEdBQVMsR0FDYixHQUFJLEdBQU8sS0FBTSxPQUFTLEtBQUssR0FBSyxBQUFJLE9BQU8sZUFBZSxLQUFLLEVBQUssSUFBSSxHQUFPLEdBQUssRUFBSSxJQUM1RixTQUFPLFFBQWEsRUFDYixHQUdYLEdBQWtCLFNBQVUsRUFBSyxDQUM3QixNQUFRLElBQU8sRUFBSSxXQUFjLEVBQU0sQ0FBRSxRQUFXLElBR3hELEdBQXlCLFNBQVUsRUFBVSxFQUFZLENBQ3JELEdBQUksQ0FBQyxFQUFXLElBQUksR0FDaEIsS0FBTSxJQUFJLFdBQVUsa0RBRXhCLE1BQU8sR0FBVyxJQUFJLElBRzFCLEdBQXlCLFNBQVUsRUFBVSxFQUFZLEVBQU8sQ0FDNUQsR0FBSSxDQUFDLEVBQVcsSUFBSSxHQUNoQixLQUFNLElBQUksV0FBVSxrREFFeEIsU0FBVyxJQUFJLEVBQVUsR0FDbEIsR0FHWCxFQUFTLFlBQWEsSUFDdEIsRUFBUyxXQUFZLElBQ3JCLEVBQVMsU0FBVSxJQUNuQixFQUFTLGFBQWMsSUFDdkIsRUFBUyxVQUFXLElBQ3BCLEVBQVMsYUFBYyxJQUN2QixFQUFTLFlBQWEsSUFDdEIsRUFBUyxjQUFlLElBQ3hCLEVBQVMsZUFBZ0IsSUFDekIsRUFBUyxrQkFBbUIsSUFDNUIsRUFBUyxXQUFZLElBQ3JCLEVBQVMsU0FBVSxJQUNuQixFQUFTLFdBQVksSUFDckIsRUFBUyxpQkFBa0IsSUFDM0IsRUFBUyxVQUFXLElBQ3BCLEVBQVMsbUJBQW9CLElBQzdCLEVBQVMsbUJBQW9CLElBQzdCLEVBQVMsZ0JBQWlCLElBQzFCLEVBQVMsdUJBQXdCLElBQ2pDLEVBQVMsZUFBZ0IsSUFDekIsRUFBUyxrQkFBbUIsSUFDNUIsRUFBUyx5QkFBMEIsSUFDbkMsRUFBUyx5QkFBMEIsd0VDelJ2QyxHQUFZLElBQVosQUFBQSxVQUFZLEVBQVEsQ0FFbEIsRUFBQSxFQUFBLEtBQUEsR0FBQSxPQUVBLEVBQUEsRUFBQSxNQUFBLEdBQUEsUUFFQSxFQUFBLEVBQUEsTUFBQSxHQUFBLFFBRUEsRUFBQSxFQUFBLFFBQUEsR0FBQSxZQVJVLEdBQUEsR0FBQSxVQUFBLElBQUEsU0FBUSx1RUMyRHBCLEdBQVksSUFBWixBQUFBLFVBQVksRUFBYSxDQUV2QixFQUFBLEdBQUEsS0FFQSxFQUFBLE9BQUEsU0FFQSxFQUFBLFFBQUEsVUFFQSxFQUFBLFNBQUEsYUFSVSxHQUFBLEdBQUEsZUFBQSxJQUFBLGNBQWEsS0FXekIsR0FBWSxJQUFaLEFBQUEsVUFBWSxFQUFvQixDQUU5QixFQUFBLEdBQUEsS0FFQSxFQUFBLFFBQUEsVUFFQSxFQUFBLFFBQUEsWUFOVSxHQUFBLEdBQUEsc0JBQUEsSUFBQSxxQkFBb0IsdUVDckVoQyxHQUFZLElBQVosQUFBQSxVQUFZLEVBQVEsQ0FFbEIsRUFBQSxNQUFBLFFBRUEsRUFBQSxNQUFBLFFBRUEsRUFBQSxRQUFBLFVBRUEsRUFBQSxJQUFBLE1BRUEsRUFBQSxLQUFBLE9BRUEsRUFBQSxNQUFBLFFBRUEsRUFBQSxTQUFBLGFBZFUsR0FBQSxHQUFBLFVBQUEsSUFBQSxTQUFRLEtBa0JwQixBQUFBLFVBQWlCLEVBQVEsQ0FPdkIsV0FBMkIsRUFBYSxDQUN0QyxPQUFRLE9BQ0QsUUFDSCxNQUFPLEdBQVMsVUFDYixPQUNILE1BQU8sR0FBUyxTQUNiLFdBQ0EsVUFDSCxNQUFPLEdBQVMsWUFDYixRQUNILE1BQU8sR0FBUyxVQUNiLFFBQ0gsTUFBTyxHQUFTLFVBQ2IsV0FDSCxNQUFPLEdBQVMsYUFDYixjQUVILE1BQU8sR0FBUyxLQWpCTixFQUFBLFdBQVUsSUFQWCxHQUFBLEdBQUEsVUFBQSxJQUFBLFNBQVEsdUVDbEJ6QixHQUFZLElBQVosQUFBQSxVQUFZLEVBQU0sQ0FFaEIsRUFBQSxRQUFBLFVBRUEsRUFBQSxRQUFBLFVBRUEsRUFBQSxRQUFBLFVBRUEsRUFBQSxVQUFBLGFBRUEsRUFBQSxRQUFBLFVBRUEsRUFBQSxPQUFBLFdBWlUsR0FBQSxHQUFBLFFBQUEsSUFBQSxPQUFNLEtBZ0JsQixBQUFBLFVBQWlCLEVBQU0sQ0FPckIsV0FBNkIsRUFBWSxDQUN2QyxNQUFJLElBQVEsS0FBTyxFQUFPLElBQ2pCLEVBQU8sUUFHWixJQUFTLElBQ0osRUFBTyxVQUdaLEdBQVEsS0FBTyxFQUFPLElBQ2pCLEVBQU8sUUFHWixHQUFRLElBQ0gsRUFBTyxPQUdULEVBQU8sUUFqQkEsRUFBQSxhQUFZLElBUGIsR0FBQSxHQUFBLFFBQUEsSUFBQSxPQUFNLHVFQ3FHdkIsR0FBWSxJQUFaLEFBQUEsVUFBWSxFQUF5QixDQUNuQyxFQUFBLFNBQUEsaUJBQ0EsRUFBQSxRQUFBLGlCQUNBLEVBQUEsS0FBQSxjQUNBLEVBQUEsWUFBQSxnQkFKVSxHQUFBLEdBQUEsMkJBQUEsSUFBQSwwQkFBeUIsdUVDaEhyQyxHQUFZLElBQVosQUFBQSxVQUFZLEVBQU8sQ0FDakIsRUFBQSxXQUFBLGNBQ0EsRUFBQSxlQUFBLGtCQUNBLEVBQUEsYUFBQSxnQkFDQSxFQUFBLGNBQUEsaUJBQ0EsRUFBQSxpQkFBQSxvQkFDQSxFQUFBLFdBQUEsZ0JBTlUsR0FBQSxHQUFBLFNBQUEsSUFBQSxRQUFPLHNFQ0tuQixHQUFBLElBQUEsS0FBUyxHQUFBLFNBQUEsR0FBQSxTQVdULEdBQUEsSUFBQSxLQUtFLEdBQUEsY0FBQSxHQUFBLGNBRUEsR0FBQSxxQkFBQSxHQUFBLHFCQUdGLEdBQUEsSUFBQSxLQUFTLEdBQUEsU0FBQSxHQUFBLFNBSVQsR0FBQSxJQUFBLEtBQVMsR0FBQSxPQUFBLEdBQUEsT0FDVCxHQUFBLElBQUEsS0FRRSxHQUFBLDBCQUFBLEdBQUEsMEJBR0YsR0FBQSxJQUFBLEtBQVMsR0FBQSxRQUFBLEdBQUEsMEVDNUNULFlBQXVCLEVBQXlCLENBQzlDLEFBQUssRUFBUSxLQUFLLEtBQU0sU0FBQSxFQUFDLENBR3ZCLFFBQVEsTUFBTSxLQUpsQixHQUFBLE9BQUEsS0NMQSxxRUFVQSxhQUF5QixDQUN2QixNQUFPLFFBQU8sVUFBVSxTQUFTLEtBQUssTUFBTyxVQUFZLFlBQWMsUUFBVSxLQUFPLG1CQUQxRixHQUFBLFVBQUEsR0FVQSxZQUErQixFQUFVLEVBQWUsQ0FFdEQsTUFBTyxHQUFJLFFBQVEsR0FGckIsR0FBQSxlQUFBLEdBa0JBLFlBQThCLEVBQWtCLENBQzlDLEdBQUksR0FFSixHQUFJLENBQ0YsRUFBTSxHQUFlLEdBQVEsUUFDN0IsRUFJRixHQUFJLENBQ00sR0FBQSxHQUFBLEdBQUEsR0FBQSxXQUFBLElBQ1IsRUFBTSxHQUFlLEdBQVcsSUFBSyxpQkFBaUIsUUFDdEQsRUFJRixNQUFPLEdBaEJULEdBQUEsV0FBQSxLQ3RDQSxnRUFTQSxHQUFBLElBQUEsS0FtQk0sR0FBdUIsR0FPN0IsYUFBK0IsQ0FDN0IsTUFBUSxJQUFBLFlBQ0osT0FDQSxNQUFPLFNBQVcsWUFDbEIsT0FDQSxNQUFPLE9BQVMsWUFDaEIsS0FDQSxHQVBOLEdBQUEsZ0JBQUEsS0NuQ0EsOERBV0EsWUFBd0IsRUFBUSxDQUM5QixPQUFRLE9BQU8sVUFBVSxTQUFTLEtBQUssUUFDaEMsaUJBQ0gsTUFBTyxPQUNKLHFCQUNILE1BQU8sT0FDSix3QkFDSCxNQUFPLFdBRVAsTUFBTyxJQUFhLEVBQUssUUFUL0IsRUFBQSxRQUFBLEdBb0JBLFlBQTZCLEVBQVEsQ0FDbkMsTUFBTyxRQUFPLFVBQVUsU0FBUyxLQUFLLEtBQVMsc0JBRGpELEVBQUEsYUFBQSxHQVdBLFlBQTJCLEVBQVEsQ0FDakMsTUFBTyxRQUFPLFVBQVUsU0FBUyxLQUFLLEtBQVMsb0JBRGpELEVBQUEsV0FBQSxHQVdBLFlBQStCLEVBQVEsQ0FDckMsTUFBTyxRQUFPLFVBQVUsU0FBUyxLQUFLLEtBQVMsd0JBRGpELEVBQUEsZUFBQSxHQVdBLFlBQXlCLEVBQVEsQ0FDL0IsTUFBTyxRQUFPLFVBQVUsU0FBUyxLQUFLLEtBQVMsa0JBRGpELEVBQUEsU0FBQSxHQVdBLFlBQTRCLEVBQVEsQ0FDbEMsTUFBTyxLQUFRLE1BQVMsTUFBTyxJQUFRLFVBQVksTUFBTyxJQUFRLFdBRHBFLEVBQUEsWUFBQSxHQVdBLFlBQThCLEVBQVEsQ0FDcEMsTUFBTyxRQUFPLFVBQVUsU0FBUyxLQUFLLEtBQVMsa0JBRGpELEVBQUEsY0FBQSxHQVdBLFlBQXdCLEVBQVEsQ0FDOUIsTUFBTyxPQUFPLFFBQVUsYUFBZSxHQUFhLEVBQUssT0FEM0QsRUFBQSxRQUFBLEdBV0EsWUFBMEIsRUFBUSxDQUNoQyxNQUFPLE9BQU8sVUFBWSxhQUFlLEdBQWEsRUFBSyxTQUQ3RCxFQUFBLFVBQUEsR0FXQSxZQUF5QixFQUFRLENBQy9CLE1BQU8sUUFBTyxVQUFVLFNBQVMsS0FBSyxLQUFTLGtCQURqRCxFQUFBLFNBQUEsR0FRQSxZQUEyQixFQUFRLENBRWpDLE1BQU8sU0FBUSxHQUFPLEVBQUksTUFBUSxNQUFPLEdBQUksTUFBUyxZQUZ4RCxFQUFBLFdBQUEsR0FZQSxZQUFpQyxFQUFRLENBQ3ZDLE1BQU8sSUFBYyxJQUFRLGVBQWlCLElBQU8sa0JBQW9CLElBQU8sbUJBQXFCLEdBRHZHLEVBQUEsaUJBQUEsR0FXQSxZQUE2QixFQUFVLEVBQVMsQ0FDOUMsR0FBSSxDQUNGLE1BQU8sYUFBZSxRQUN0QixDQUNBLE1BQU8sSUFKWCxFQUFBLGFBQUEscUVDdEpBLEdBQUEsSUFBQSxLQUNBLEdBQUEsS0FRQSxZQUFpQyxFQUFlLEVBQW1CLENBU2pFLEdBQUksQ0FZRixPQVhJLEdBQWMsRUFDWixFQUFzQixFQUN0QixFQUFpQixHQUNqQixFQUFNLEdBQ1IsRUFBUyxFQUNULEVBQU0sRUFDSixFQUFZLE1BQ1osRUFBWSxFQUFVLE9BQ3hCLEVBQU8sT0FHSixHQUFlLElBQVcsR0FDL0IsR0FBVSxHQUFxQixFQUFhLEdBS3hDLE1BQVksUUFBVyxFQUFTLEdBQUssRUFBTSxFQUFJLE9BQVMsRUFBWSxFQUFRLFFBQVUsS0FJMUYsRUFBSSxLQUFLLEdBRVQsR0FBTyxFQUFRLE9BQ2YsRUFBYyxFQUFZLFdBRzVCLE1BQU8sR0FBSSxVQUFVLEtBQUssUUFDMUIsQ0FDQSxNQUFPLGFBdkNYLEdBQUEsaUJBQUEsR0FnREEsWUFBOEIsRUFBYSxFQUFtQixTQUN0RCxFQUFPLEVBT1AsRUFBTSxHQUNSLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFFSixHQUFJLENBQUMsR0FBUSxDQUFDLEVBQUssUUFDakIsTUFBTyxHQUdULEVBQUksS0FBSyxFQUFLLFFBQVEsZUFHdEIsR0FBTSxHQUFlLElBQUEsS0FBUSxNQUFBLElBQUEsT0FBQSxPQUFBLEVBQUUsUUFDM0IsRUFBUyxPQUFPLFNBQUEsRUFBTyxDQUFJLE1BQUEsR0FBSyxhQUFhLEtBQVUsSUFBSSxTQUFBLEVBQU8sQ0FBSSxNQUFBLENBQUMsRUFBUyxFQUFLLGFBQWEsTUFDbEcsS0FFSixHQUFBLEdBQUksS0FBWSxNQUFBLElBQUEsT0FBQSxPQUFBLEVBQUUsT0FDaEIsRUFBYSxRQUFRLFNBQUEsRUFBVyxDQUM5QixFQUFJLEtBQUssSUFBSSxFQUFZLEdBQUUsS0FBSyxFQUFZLEdBQUUsZ0JBRzVDLEVBQUssSUFDUCxFQUFJLEtBQUssSUFBSSxFQUFLLElBSXBCLEVBQVksRUFBSyxVQUNiLEdBQWEsR0FBQSxTQUFTLEdBRXhCLElBREEsRUFBVSxFQUFVLE1BQU0sT0FDckIsRUFBSSxFQUFHLEVBQUksRUFBUSxPQUFRLElBQzlCLEVBQUksS0FBSyxJQUFJLEVBQVEsSUFJM0IsR0FBTSxHQUFlLENBQUMsT0FBUSxPQUFRLFFBQVMsT0FDL0MsSUFBSyxFQUFJLEVBQUcsRUFBSSxFQUFhLE9BQVEsSUFDbkMsRUFBTSxFQUFhLEdBQ25CLEVBQU8sRUFBSyxhQUFhLEdBQ3JCLEdBQ0YsRUFBSSxLQUFLLElBQUksRUFBRyxLQUFLLEVBQUksTUFHN0IsTUFBTyxHQUFJLEtBQUssSUFNbEIsYUFBK0IsQ0FDN0IsR0FBTSxHQUFTLEdBQUEsa0JBQ2YsR0FBSSxDQUNGLE1BQU8sR0FBTyxTQUFTLFNBQVMsVUFDaEMsQ0FDQSxNQUFPLElBTFgsR0FBQSxnQkFBQSxxRUNuSGEsR0FBQSxlQUNYLE9BQU8sZ0JBQW1CLEVBQUUsVUFBVyxhQUFnQixPQUFRLEdBQWEsSUFNOUUsWUFBb0QsRUFBYyxFQUFhLENBRTdFLFNBQUksVUFBWSxFQUNULEVBT1QsWUFBeUQsRUFBYyxFQUFhLENBQ2xGLE9BQVcsS0FBUSxHQUNqQixBQUFLLE9BQU8sVUFBVSxlQUFlLEtBQUssRUFBSyxJQUU3QyxHQUFJLEdBQVEsRUFBTSxJQUl0QixNQUFPLGlGQ3pCVCxHQUFBLEtBR0EsR0FBQSxTQUFBLEVBQUEsQ0FBaUMsR0FBQSxVQUFBLEVBQUEsR0FJL0IsV0FBMEIsRUFBZSx3QkFBekMsRUFDRSxFQUFBLEtBQUEsS0FBTSxJQUFRLEtBRFUsU0FBQSxRQUFBLEVBR3hCLEVBQUssS0FBTyxFQUFXLFVBQVUsWUFBWSxLQUM3QyxHQUFBLGVBQWUsRUFBTSxFQUFXLGFBRXBDLE1BQUEsSUFWaUMsT0FBcEIsR0FBQSxZQUFBLGdGQ0RiLEdBQUEsS0FHTSxHQUFZLGlFQUdaLEdBQWdCLGNBR3RCLEdBQUEsVUFBQSxDQW1CRSxXQUFtQixFQUFhLENBQzlCLEFBQUksTUFBTyxJQUFTLFNBQ2xCLEtBQUssWUFBWSxHQUVqQixLQUFLLGdCQUFnQixHQUd2QixLQUFLLFlBWUEsU0FBQSxVQUFBLFNBQVAsU0FBZ0IsRUFBNkIsQ0FBN0IsQUFBQSxJQUFBLFFBQUEsR0FBQSxJQUNSLEdBQUEsR0FBQSxLQUFFLEVBQUEsRUFBQSxLQUFNLEVBQUEsRUFBQSxLQUFNLEVBQUEsRUFBQSxLQUFNLEVBQUEsRUFBQSxLQUFNLEVBQUEsRUFBQSxVQUFXLEVBQUEsRUFBQSxTQUFVLEVBQUEsRUFBQSxVQUNyRCxNQUNLLEdBQVEsTUFBTSxFQUFZLElBQWdCLEVBQU8sSUFBSSxFQUFTLElBQ2pFLEtBQUksRUFBTyxHQUFPLElBQUksRUFBUyxJQUFFLElBQUksSUFBVSxFQUFJLEtBQWEsSUFLNUQsRUFBQSxVQUFBLFlBQVIsU0FBb0IsRUFBVyxDQUM3QixHQUFNLEdBQVEsR0FBVSxLQUFLLEdBRTdCLEdBQUksQ0FBQyxFQUNILEtBQU0sSUFBSSxJQUFBLFlBQVksSUFHbEIsR0FBQSxHQUFBLEdBQUEsT0FBQSxFQUFBLE1BQUEsR0FBQSxHQUFDLEVBQUEsRUFBQSxHQUFVLEVBQUEsRUFBQSxHQUFXLEVBQUEsRUFBQSxHQUFBLEVBQUEsSUFBQSxPQUFBLEdBQUEsRUFBVyxFQUFBLEVBQUEsR0FBTSxFQUFBLEVBQUEsR0FBQSxFQUFBLElBQUEsT0FBQSxHQUFBLEVBQVcsRUFBQSxFQUFBLEdBQ3BELEVBQU8sR0FDUCxFQUFZLEVBRVYsRUFBUSxFQUFVLE1BQU0sS0FNOUIsR0FMSSxFQUFNLE9BQVMsR0FDakIsR0FBTyxFQUFNLE1BQU0sRUFBRyxJQUFJLEtBQUssS0FDL0IsRUFBWSxFQUFNLE9BR2hCLEVBQVcsQ0FDYixHQUFNLEdBQWUsRUFBVSxNQUFNLFFBQ3JDLEFBQUksR0FDRixHQUFZLEVBQWEsSUFJN0IsS0FBSyxnQkFBZ0IsQ0FBRSxLQUFJLEVBQUUsS0FBSSxFQUFFLEtBQUksRUFBRSxVQUFTLEVBQUUsS0FBSSxFQUFFLFNBQVUsRUFBeUIsVUFBUyxLQUloRyxFQUFBLFVBQUEsZ0JBQVIsU0FBd0IsRUFBeUIsQ0FFL0MsQUFBSSxRQUFVLElBQWMsQ0FBRSxjQUFlLEtBQzNDLEdBQVcsVUFBWSxFQUFXLE1BRXBDLEtBQUssS0FBTyxFQUFXLFdBQWEsR0FFcEMsS0FBSyxTQUFXLEVBQVcsU0FDM0IsS0FBSyxVQUFZLEVBQVcsV0FBYSxHQUN6QyxLQUFLLEtBQU8sRUFBVyxNQUFRLEdBQy9CLEtBQUssS0FBTyxFQUFXLEtBQ3ZCLEtBQUssS0FBTyxFQUFXLE1BQVEsR0FDL0IsS0FBSyxLQUFPLEVBQVcsTUFBUSxHQUMvQixLQUFLLFVBQVksRUFBVyxXQUl0QixFQUFBLFVBQUEsVUFBUixVQUFBLENBQUEsR0FBQSxHQUFBLEtBT0UsR0FOQSxDQUFDLFdBQVksWUFBYSxPQUFRLGFBQWEsUUFBUSxTQUFBLEVBQVMsQ0FDOUQsR0FBSSxDQUFDLEVBQUssR0FDUixLQUFNLElBQUksSUFBQSxZQUFlLEdBQWEsS0FBSyxFQUFTLGNBSXBELENBQUMsS0FBSyxVQUFVLE1BQU0sU0FDeEIsS0FBTSxJQUFJLElBQUEsWUFBZSxHQUFhLHVCQUF1QixLQUFLLFdBR3BFLEdBQUksS0FBSyxXQUFhLFFBQVUsS0FBSyxXQUFhLFFBQ2hELEtBQU0sSUFBSSxJQUFBLFlBQWUsR0FBYSxzQkFBc0IsS0FBSyxVQUduRSxHQUFJLEtBQUssTUFBUSxNQUFNLFNBQVMsS0FBSyxLQUFNLEtBQ3pDLEtBQU0sSUFBSSxJQUFBLFlBQWUsR0FBYSxrQkFBa0IsS0FBSyxPQUduRSxLQS9HYSxHQUFBLElBQUEscUVDUmIsR0FBQSxJQUFBLEtBR00sR0FBUyxHQUFBLGtCQUdULEdBQVMsaUJBY2YsWUFBK0IsRUFBbUIsQ0FDaEQsR0FBTSxHQUFTLEdBQUEsa0JBQ1QsRUFBUyxDQUFDLFFBQVMsT0FBUSxPQUFRLFFBQVMsTUFBTyxVQUV6RCxHQUFJLENBQUUsWUFBYSxJQUNqQixNQUFPLEtBSVQsR0FBTSxHQUFtQixFQUFlLFFBQ2xDLEVBQXdDLEdBRzlDLEVBQU8sUUFBUSxTQUFBLEVBQUssQ0FFbEIsQUFBSSxJQUFVLEdBQWUsU0FBWSxFQUFnQixHQUEyQixxQkFDbEYsR0FBYyxHQUFTLEVBQWdCLEdBQ3ZDLEVBQWdCLEdBQVUsRUFBZ0IsR0FBMkIsdUJBS3pFLEdBQU0sR0FBUyxJQUdmLGNBQU8sS0FBSyxHQUFlLFFBQVEsU0FBQSxFQUFLLENBQ3RDLEVBQWdCLEdBQVMsRUFBYyxLQUdsQyxFQTdCVCxHQUFBLGVBQUEsR0FpQ0EsR0FBQSxJQUFBLFVBQUEsQ0FLRSxZQUFBLENBQ0UsS0FBSyxTQUFXLEdBSVgsU0FBQSxVQUFBLFFBQVAsVUFBQSxDQUNFLEtBQUssU0FBVyxJQUlYLEVBQUEsVUFBQSxPQUFQLFVBQUEsQ0FDRSxLQUFLLFNBQVcsSUFJWCxFQUFBLFVBQUEsSUFBUCxVQUFBLFFBQVcsR0FBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLFVBQUEsT0FBQSxJQUFBLEVBQUEsR0FBQSxVQUFBLEdBQ1QsQUFBSSxDQUFDLEtBQUssVUFHVixHQUFlLFVBQUEsQ0FDYixHQUFPLFFBQVEsSUFBTyxHQUFNLFVBQVUsRUFBSyxLQUFLLFNBSzdDLEVBQUEsVUFBQSxLQUFQLFVBQUEsUUFBWSxHQUFBLEdBQUEsRUFBQSxFQUFBLEVBQUEsVUFBQSxPQUFBLElBQUEsRUFBQSxHQUFBLFVBQUEsR0FDVixBQUFJLENBQUMsS0FBSyxVQUdWLEdBQWUsVUFBQSxDQUNiLEdBQU8sUUFBUSxLQUFRLEdBQU0sV0FBVyxFQUFLLEtBQUssU0FLL0MsRUFBQSxVQUFBLE1BQVAsVUFBQSxRQUFhLEdBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxVQUFBLE9BQUEsSUFBQSxFQUFBLEdBQUEsVUFBQSxHQUNYLEFBQUksQ0FBQyxLQUFLLFVBR1YsR0FBZSxVQUFBLENBQ2IsR0FBTyxRQUFRLE1BQVMsR0FBTSxZQUFZLEVBQUssS0FBSyxTQUcxRCxLQUdBLEdBQU8sV0FBYSxHQUFPLFlBQWMsR0FDekMsR0FBTSxJQUFVLEdBQU8sV0FBVyxRQUFzQixJQUFPLFdBQVcsT0FBUyxHQUFJLEtBRTlFLEdBQUEsT0FBQSxxRUN4R1QsR0FBQSxJQUFBLFVBQUEsQ0FNRSxZQUFBLENBQ0UsS0FBSyxZQUFjLE1BQU8sVUFBWSxXQUN0QyxLQUFLLE9BQVMsS0FBSyxZQUFjLEdBQUksU0FBWSxHQU81QyxTQUFBLFVBQUEsUUFBUCxTQUFlLEVBQVEsQ0FDckIsR0FBSSxLQUFLLFlBQ1AsTUFBSSxNQUFLLE9BQU8sSUFBSSxHQUNYLEdBRVQsTUFBSyxPQUFPLElBQUksR0FDVCxJQUdULE9BQVMsR0FBSSxFQUFHLEVBQUksS0FBSyxPQUFPLE9BQVEsSUFBSyxDQUMzQyxHQUFNLEdBQVEsS0FBSyxPQUFPLEdBQzFCLEdBQUksSUFBVSxFQUNaLE1BQU8sR0FHWCxZQUFLLE9BQU8sS0FBSyxHQUNWLElBT0YsRUFBQSxVQUFBLFVBQVAsU0FBaUIsRUFBUSxDQUN2QixHQUFJLEtBQUssWUFDUCxLQUFLLE9BQU8sT0FBTyxPQUVuQixRQUFTLEdBQUksRUFBRyxFQUFJLEtBQUssT0FBTyxPQUFRLElBQ3RDLEdBQUksS0FBSyxPQUFPLEtBQU8sRUFBSyxDQUMxQixLQUFLLE9BQU8sT0FBTyxFQUFHLEdBQ3RCLFFBS1YsS0FsRGEsR0FBQSxLQUFBLHFFQ05iLEdBQU0sSUFBc0IsY0FLNUIsWUFBZ0MsRUFBVyxDQUN6QyxHQUFJLENBQ0YsTUFBSSxDQUFDLEdBQU0sTUFBTyxJQUFPLFdBQ2hCLEdBRUYsRUFBRyxNQUFRLFFBQ2xCLENBR0EsTUFBTyxLQVRYLEdBQUEsZ0JBQUEscUVDTEEsR0FBQSxJQUFBLEtBU0EsWUFBeUIsRUFBYSxFQUFlLENBQ25ELE1BRG9DLEtBQUEsUUFBQSxHQUFBLEdBQ2hDLE1BQU8sSUFBUSxVQUFZLElBQVEsR0FHaEMsRUFBSSxRQUFVLEVBRlosRUFFMkIsRUFBSSxPQUFPLEVBQUcsR0FBSSxNQUp4RCxHQUFBLFNBQUEsR0FlQSxZQUF5QixFQUFjLEVBQWEsQ0FDbEQsR0FBSSxHQUFVLEVBQ1IsRUFBSyxFQUFRLE9BQ25CLEdBQUksR0FBTSxJQUNSLE1BQU8sR0FFVCxBQUFJLEVBQVEsR0FFVixHQUFRLEdBR1YsR0FBSSxHQUFRLEtBQUssSUFBSSxFQUFRLEdBQUksR0FDakMsQUFBSSxFQUFRLEdBQ1YsR0FBUSxHQUdWLEdBQUksR0FBTSxLQUFLLElBQUksRUFBUSxJQUFLLEdBQ2hDLE1BQUksR0FBTSxFQUFLLEdBQ2IsR0FBTSxHQUVKLElBQVEsR0FDVixHQUFRLEtBQUssSUFBSSxFQUFNLElBQUssSUFHOUIsRUFBVSxFQUFRLE1BQU0sRUFBTyxHQUMzQixFQUFRLEdBQ1YsR0FBVSxXQUFXLEdBRW5CLEVBQU0sR0FDUixJQUFXLFdBR04sRUFoQ1QsR0FBQSxTQUFBLEdBMENBLFlBQXlCLEVBQWMsRUFBa0IsQ0FDdkQsR0FBSSxDQUFDLE1BQU0sUUFBUSxHQUNqQixNQUFPLEdBS1QsT0FGTSxHQUFTLEdBRU4sRUFBSSxFQUFHLEVBQUksRUFBTSxPQUFRLElBQUssQ0FDckMsR0FBTSxHQUFRLEVBQU0sR0FDcEIsR0FBSSxDQUNGLEVBQU8sS0FBSyxPQUFPLFNBQ25CLENBQ0EsRUFBTyxLQUFLLGlDQUloQixNQUFPLEdBQU8sS0FBSyxHQWhCckIsR0FBQSxTQUFBLEdBd0JBLFlBQWtDLEVBQWUsRUFBd0IsQ0FDdkUsTUFBSyxJQUFBLFNBQVMsR0FJVixHQUFBLFNBQVMsR0FDSCxFQUFtQixLQUFLLEdBRTlCLE1BQU8sSUFBWSxTQUNkLEVBQU0sUUFBUSxLQUFhLEdBRTdCLEdBVEUsR0FGWCxHQUFBLGtCQUFBLEdBeUJBLFlBQXFDLEVBQW1CLENBR3RELE1BQU8sR0FBWSxRQUFRLHNCQUF1QixRQUFRLFFBQVEsS0FBTSxTQUgxRSxHQUFBLHFCQUFBLGdGQy9HQSxHQUFBLEtBQ0EsR0FBQSxLQUNBLEdBQUEsS0FDQSxHQUFBLEtBQ0EsR0FBQSxLQWFBLFlBQXFCLEVBQWdDLEVBQWMsRUFBMkMsQ0FDNUcsR0FBTSxJQUFRLEdBSWQsSUFBTSxHQUFXLEVBQU8sR0FDbEIsRUFBVSxFQUFtQixHQUluQyxHQUFJLE1BQU8sSUFBWSxXQUNyQixHQUFJLENBQ0YsRUFBUSxVQUFZLEVBQVEsV0FBYSxHQUN6QyxPQUFPLGlCQUFpQixFQUFTLENBQy9CLG9CQUFxQixDQUNuQixXQUFZLEdBQ1osTUFBTyxVQUdYLEVBTUosRUFBTyxHQUFRLEdBekJqQixHQUFBLEtBQUEsR0FrQ0EsWUFBMEIsRUFBOEIsQ0FDdEQsTUFBTyxRQUFPLEtBQUssR0FDaEIsSUFBSSxTQUFBLEVBQUcsQ0FBSSxNQUFHLG9CQUFtQixHQUFJLElBQUksbUJBQW1CLEVBQU8sTUFDbkUsS0FBSyxLQUhWLEdBQUEsVUFBQSxHQVlBLFlBQ0UsRUFBVSxDQUlWLEdBQUksR0FBQSxRQUFRLEdBQVEsQ0FDbEIsR0FBTSxHQUFRLEVBQ1IsRUFLRixDQUNGLFFBQVMsRUFBTSxRQUNmLEtBQU0sRUFBTSxLQUNaLE1BQU8sRUFBTSxPQUdmLE9BQVcsS0FBSyxHQUNkLEFBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxFQUFPLElBQzlDLEdBQUksR0FBSyxFQUFNLElBSW5CLE1BQU8sR0FHVCxHQUFJLEdBQUEsUUFBUSxHQUFRLENBV2xCLEdBQU0sR0FBUSxFQUVSLEVBRUYsR0FLSixFQUFPLEtBQU8sRUFBTSxLQUVwQixHQUFJLENBQ0YsRUFBTyxPQUFTLEdBQUEsVUFBVSxFQUFNLFFBQzVCLEdBQUEsaUJBQWlCLEVBQU0sUUFDdkIsT0FBTyxVQUFVLFNBQVMsS0FBSyxFQUFNLGFBQ3pDLENBQ0EsRUFBTyxPQUFTLFlBR2xCLEdBQUksQ0FDRixFQUFPLGNBQWdCLEdBQUEsVUFBVSxFQUFNLGVBQ25DLEdBQUEsaUJBQWlCLEVBQU0sZUFDdkIsT0FBTyxVQUFVLFNBQVMsS0FBSyxFQUFNLG9CQUN6QyxDQUNBLEVBQU8sY0FBZ0IsWUFHekIsQUFBSSxNQUFPLGNBQWdCLGFBQWUsR0FBQSxhQUFhLEVBQU8sY0FDNUQsR0FBTyxPQUFTLEVBQU0sUUFHeEIsT0FBVyxLQUFRLEdBQ2pCLEFBQUksT0FBTyxVQUFVLGVBQWUsS0FBSyxFQUFPLElBQzlDLEdBQU8sR0FBUSxFQUFNLElBSXpCLE1BQU8sR0FHVCxNQUFPLEdBTVQsWUFBb0IsRUFBYSxDQUUvQixNQUFPLENBQUMsQ0FBQyxVQUFVLEdBQU8sTUFBTSxTQUFTLE9BSTNDLFlBQWtCLEVBQVUsQ0FDMUIsTUFBTyxJQUFXLEtBQUssVUFBVSxJQUluQyxZQUNFLEVBRUEsRUFFQSxFQUE0QixDQUY1QixBQUFBLElBQUEsUUFBQSxHQUFBLEdBRUEsSUFBQSxRQUFBLEdBQWtCLElBQU0sTUFFeEIsR0FBTSxHQUFhLEdBQVUsRUFBUSxHQUVyQyxNQUFJLElBQVMsR0FBYyxFQUNsQixHQUFnQixFQUFRLEVBQVEsRUFBRyxHQUdyQyxFQWJULEdBQUEsZ0JBQUEsR0F5QkEsWUFBd0IsRUFBVSxDQUNoQyxHQUFNLEdBQU8sT0FBTyxVQUFVLFNBQVMsS0FBSyxHQUc1QyxHQUFJLE1BQU8sSUFBVSxTQUNuQixNQUFPLEdBRVQsR0FBSSxJQUFTLGtCQUNYLE1BQU8sV0FFVCxHQUFJLElBQVMsaUJBQ1gsTUFBTyxVQUdULEdBQU0sR0FBYSxHQUFlLEdBQ2xDLE1BQU8sSUFBQSxZQUFZLEdBQWMsRUFBYSxFQVloRCxZQUEyQixFQUFVLEVBQVMsQ0FDNUMsTUFBSSxLQUFRLFVBQVksR0FBUyxNQUFPLElBQVUsVUFBYyxFQUF1QyxRQUM5RixXQUdMLElBQVEsZ0JBQ0gsa0JBR0wsTUFBUSxTQUFtQixhQUFnQixJQUFzQixPQUM1RCxXQU9MLE1BQVEsU0FBbUIsYUFBZ0IsSUFBc0IsT0FDNUQsV0FJTCxNQUFRLFdBQXFCLGFBQWdCLElBQXNCLFNBQzlELGFBSUwsR0FBQSxpQkFBaUIsR0FDWixtQkFHTCxNQUFPLElBQVUsVUFBWSxJQUFVLEVBQ2xDLFFBR0wsSUFBVSxPQUNMLGNBR0wsTUFBTyxJQUFVLFdBQ1osY0FBYyxHQUFBLGdCQUFnQixHQUFNLElBS3pDLE1BQU8sSUFBVSxTQUNaLElBQUksT0FBTyxHQUFNLElBR3RCLE1BQU8sSUFBVSxTQUNaLFlBQVksT0FBTyxHQUFNLElBRzNCLEVBWVQsWUFBcUIsRUFBYSxFQUFZLEVBQTJCLEVBQXVCLENBRTlGLEdBRjRDLElBQUEsUUFBQSxHQUFBLEtBQTJCLElBQUEsUUFBQSxHQUFBLEdBQWlCLElBQUEsTUFFcEYsSUFBVSxFQUNaLE1BQU8sSUFBZSxHQUt4QixHQUFJLEdBQVUsTUFBK0IsTUFBTyxHQUFNLFFBQVcsV0FDbkUsTUFBTyxHQUFNLFNBS2YsR0FBTSxHQUFhLEdBQWUsRUFBTyxHQUN6QyxHQUFJLEdBQUEsWUFBWSxHQUNkLE1BQU8sR0FJVCxHQUFNLEdBQVMsR0FBYyxHQUd2QixFQUFNLE1BQU0sUUFBUSxHQUFTLEdBQUssR0FHeEMsR0FBSSxFQUFLLFFBQVEsR0FDZixNQUFPLGVBSVQsT0FBVyxLQUFZLEdBRXJCLEFBQUksQ0FBQyxPQUFPLFVBQVUsZUFBZSxLQUFLLEVBQVEsSUFJakQsR0FBK0IsR0FBWSxHQUFLLEVBQVUsRUFBTyxHQUFXLEVBQVEsRUFBRyxJQUkxRixTQUFLLFVBQVUsR0FHUixFQTVDVCxHQUFBLEtBQUEsR0E0REEsWUFBMEIsRUFBWSxFQUFjLENBQ2xELEdBQUksQ0FDRixNQUFPLE1BQUssTUFBTSxLQUFLLFVBQVUsRUFBTyxTQUFDLEVBQWEsRUFBVSxDQUFLLE1BQUEsSUFBSyxFQUFLLEVBQU8sV0FDdEYsQ0FDQSxNQUFPLHdCQUpYLEdBQUEsVUFBQSxHQWNBLFlBQStDLEVBQWdCLEVBQXNCLENBQXRCLEFBQUEsSUFBQSxRQUFBLEdBQUEsSUFDN0QsR0FBTSxHQUFPLE9BQU8sS0FBSyxHQUFjLElBR3ZDLEdBRkEsRUFBSyxPQUVELENBQUMsRUFBSyxPQUNSLE1BQU8sdUJBR1QsR0FBSSxFQUFLLEdBQUcsUUFBVSxFQUNwQixNQUFPLElBQUEsU0FBUyxFQUFLLEdBQUksR0FHM0IsT0FBUyxHQUFlLEVBQUssT0FBUSxFQUFlLEVBQUcsSUFBZ0IsQ0FDckUsR0FBTSxHQUFhLEVBQUssTUFBTSxFQUFHLEdBQWMsS0FBSyxNQUNwRCxHQUFJLElBQVcsT0FBUyxHQUd4QixNQUFJLEtBQWlCLEVBQUssT0FDakIsRUFFRixHQUFBLFNBQVMsRUFBWSxHQUc5QixNQUFPLEdBdkJULEdBQUEsK0JBQUEsR0E4QkEsWUFBcUMsRUFBTSxTQUN6QyxHQUFJLEdBQUEsY0FBYyxHQUFNLENBQ3RCLEdBQU0sR0FBTSxFQUNOLEVBQTZCLE9BQ25DLE9BQWtCLEdBQUEsR0FBQSxTQUFBLE9BQU8sS0FBSyxJQUFJLEVBQUEsRUFBQSxPQUFBLENBQUEsRUFBQSxLQUFBLEVBQUEsRUFBQSxPQUFFLENBQS9CLEdBQU0sR0FBRyxFQUFBLE1BQ1osQUFBSSxNQUFPLEdBQUksSUFBUyxhQUN0QixHQUFHLEdBQU8sR0FBa0IsRUFBSSx1R0FHcEMsTUFBTyxHQUdULE1BQUksT0FBTSxRQUFRLEdBQ1IsRUFBYyxJQUFJLElBR3JCLEVBaEJULEdBQUEsa0JBQUEsR0E0QkEsWUFBMEIsRUFBWSxDQUNwQyxHQUFJLEdBQ0osT0FBUSxRQUNELEFBQXFCLElBQVEsS0FDaEMsRUFBYyxHQUFJLFFBQU8sR0FDekIsVUFLRyxPQUFPLElBQVEsVUFBWSxNQUFPLElBQVEsVUFDN0MsRUFBYyxPQUFPLEdBQ3JCLFVBR0csSUFBQSxZQUFZLEdBRWYsRUFBYyxHQUFLLEdBQVksWUFBWSxHQUMzQyxjQUlBLEVBQWMsRUFDZCxNQUVKLE1BQU8sR0F6QlQsR0FBQSxVQUFBLHFFQzNaQSxHQUFBLElBQUEsS0FDQSxHQUFBLEtBUUEsYUFBa0MsQ0FDaEMsR0FBSSxDQUNGLFVBQUksWUFBVyxJQUNSLFFBQ1AsQ0FDQSxNQUFPLElBTFgsR0FBQSxtQkFBQSxHQWVBLGFBQWdDLENBQzlCLEdBQUksQ0FJRixVQUFJLFVBQVMsSUFDTixRQUNQLENBQ0EsTUFBTyxJQVJYLEdBQUEsaUJBQUEsR0FrQkEsYUFBb0MsQ0FDbEMsR0FBSSxDQUNGLFVBQUksY0FBYSxJQUNWLFFBQ1AsQ0FDQSxNQUFPLElBTFgsR0FBQSxxQkFBQSxHQWVBLGFBQTZCLENBQzNCLEdBQUksQ0FBRSxVQUFXLElBQUEsbUJBQ2YsTUFBTyxHQUdULEdBQUksQ0FDRixVQUFJLFNBQ0osR0FBSSxTQUFRLElBQ1osR0FBSSxVQUNHLFFBQ1AsQ0FDQSxNQUFPLElBWFgsR0FBQSxjQUFBLEdBa0JBLFlBQThCLEVBQWMsQ0FDMUMsTUFBTyxJQUFRLG1EQUFtRCxLQUFLLEVBQUssWUFEOUUsR0FBQSxjQUFBLEdBVUEsYUFBbUMsQ0FDakMsR0FBSSxDQUFDLEtBQ0gsTUFBTyxHQUdULEdBQU0sR0FBUyxHQUFBLGtCQUlmLEdBQUksR0FBYyxFQUFPLE9BQ3ZCLE1BQU8sR0FLVCxHQUFJLEdBQVMsR0FDUCxFQUFNLEVBQU8sU0FFbkIsR0FBSSxHQUFPLE1BQVEsR0FBSSxlQUE4QixXQUNuRCxHQUFJLENBQ0YsR0FBTSxHQUFVLEVBQUksY0FBYyxVQUNsQyxFQUFRLE9BQVMsR0FDakIsRUFBSSxLQUFLLFlBQVksR0FDakIsRUFBUSxlQUFpQixFQUFRLGNBQWMsT0FFakQsR0FBUyxHQUFjLEVBQVEsY0FBYyxRQUUvQyxFQUFJLEtBQUssWUFBWSxTQUNkLEVBQVAsQ0FDQSxHQUFBLE9BQU8sS0FBSyxrRkFBbUYsR0FJbkcsTUFBTyxHQWpDVCxHQUFBLG9CQUFBLEdBMENBLGFBQXlDLENBQ3ZDLE1BQU8scUJBQXVCLElBQUEsa0JBRGhDLEdBQUEsMEJBQUEsR0FVQSxhQUFzQyxDQU1wQyxHQUFJLENBQUMsS0FDSCxNQUFPLEdBR1QsR0FBSSxDQUNGLFVBQUksU0FBUSxJQUFLLENBQ2YsZUFBZ0IsV0FFWCxRQUNQLENBQ0EsTUFBTyxJQWhCWCxHQUFBLHVCQUFBLEdBMEJBLGFBQStCLENBSTdCLEdBQU0sR0FBUyxHQUFBLGtCQUdULEVBQVUsRUFBZSxPQUN6QixFQUFzQixHQUFVLEVBQU8sS0FBTyxFQUFPLElBQUksUUFFekQsRUFBZ0IsV0FBYSxJQUFVLENBQUMsQ0FBQyxFQUFPLFFBQVEsV0FBYSxDQUFDLENBQUMsRUFBTyxRQUFRLGFBRTVGLE1BQU8sQ0FBQyxHQUF1QixFQVpqQyxHQUFBLGdCQUFBLGdGQzlKQSxHQUFBLEtBQ0EsR0FBQSxLQUNBLEdBQUEsS0FDQSxHQUFBLEtBQ0EsR0FBQSxLQUNBLEdBQUEsS0FFTSxFQUFTLEdBQUEsa0JBNkJULEdBQTZFLEdBQzdFLEdBQTZELEdBR25FLFlBQW9CLEVBQTJCLENBQzdDLEdBQUksSUFBYSxHQU1qQixPQUZBLEdBQWEsR0FBUSxHQUViLE9BQ0QsVUFDSCxLQUNBLFVBQ0csTUFDSCxLQUNBLFVBQ0csTUFDSCxLQUNBLFVBQ0csUUFDSCxLQUNBLFVBQ0csVUFDSCxLQUNBLFVBQ0csUUFDSCxLQUNBLFVBQ0cscUJBQ0gsS0FDQSxjQUVBLEdBQUEsT0FBTyxLQUFLLGdDQUFpQyxJQVNuRCxZQUEwQyxFQUEwQixDQUNsRSxBQUFJLENBQUMsR0FBVyxNQUFPLEdBQVEsTUFBUyxVQUFZLE1BQU8sR0FBUSxVQUFhLFlBR2hGLElBQVMsRUFBUSxNQUFRLEdBQVMsRUFBUSxPQUFTLEdBQ2xELEdBQVMsRUFBUSxNQUFzQyxLQUFLLEVBQVEsVUFDckUsR0FBVyxFQUFRLE9BTnJCLEdBQUEsMEJBQUEsR0FVQSxZQUF5QixFQUE2QixFQUFTLFNBQzdELEdBQUksR0FBQyxHQUFRLENBQUMsR0FBUyxRQUl2QixPQUFzQixHQUFBLEdBQUEsU0FBQSxHQUFTLElBQVMsSUFBRSxFQUFBLEVBQUEsT0FBQSxDQUFBLEVBQUEsS0FBQSxFQUFBLEVBQUEsT0FBRSxDQUF2QyxHQUFNLEdBQU8sRUFBQSxNQUNoQixHQUFJLENBQ0YsRUFBUSxTQUNELEVBQVAsQ0FDQSxHQUFBLE9BQU8sTUFDTDtRQUEwRCxFQUFJO1FBQVcsR0FBQSxnQkFDdkUsR0FDRDtTQUFZLHVHQU9yQixhQUEwQixDQUN4QixBQUFNLFdBQWEsSUFJbkIsQ0FBQyxRQUFTLE9BQVEsT0FBUSxRQUFTLE1BQU8sVUFBVSxRQUFRLFNBQVMsRUFBYSxDQUNoRixBQUFNLElBQVMsR0FBTyxTQUl0QixHQUFBLEtBQUssRUFBTyxRQUFTLEVBQU8sU0FBUyxFQUErQixDQUNsRSxNQUFPLFdBQUEsUUFBUyxHQUFBLEdBQUEsRUFBQSxFQUFBLEVBQUEsVUFBQSxPQUFBLElBQUEsRUFBQSxHQUFBLFVBQUEsR0FDZCxHQUFnQixVQUFXLENBQUUsS0FBSSxFQUFFLE1BQUssSUFHcEMsR0FDRixTQUFTLFVBQVUsTUFBTSxLQUFLLEVBQXNCLEVBQU8sUUFBUyxRQVE5RSxhQUF3QixDQUN0QixBQUFJLENBQUMsR0FBQSx1QkFJTCxHQUFBLEtBQUssRUFBUSxRQUFTLFNBQVMsRUFBeUIsQ0FDdEQsTUFBTyxXQUFBLFFBQVMsR0FBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLFVBQUEsT0FBQSxJQUFBLEVBQUEsR0FBQSxVQUFBLEdBQ2QsR0FBTSxHQUFjLENBQ2xCLEtBQUksRUFDSixVQUFXLENBQ1QsT0FBUSxHQUFlLEdBQ3ZCLElBQUssR0FBWSxJQUVuQixlQUFnQixLQUFLLE9BR3ZCLFVBQWdCLFFBQU8sR0FBQSxTQUFBLEdBQ2xCLElBSUUsRUFBYyxNQUFNLEVBQVEsR0FBTSxLQUN2QyxTQUFDLEVBQWtCLENBQ2pCLFVBQWdCLFFBQU8sR0FBQSxTQUFBLEdBQUEsU0FBQSxHQUNsQixHQUFXLENBQ2QsYUFBYyxLQUFLLE1BQ25CLFNBQVEsS0FFSCxHQUVULFNBQUMsRUFBWSxDQUNYLFNBQWdCLFFBQU8sR0FBQSxTQUFBLEdBQUEsU0FBQSxHQUNsQixHQUFXLENBQ2QsYUFBYyxLQUFLLE1BQ25CLE1BQUssS0FLRCxPQXNCaEIsWUFBd0IsRUFBcUIsQ0FDM0MsTUFEc0IsS0FBQSxRQUFBLEdBQUEsSUFDbEIsV0FBYSxJQUFVLEdBQUEsYUFBYSxFQUFVLEdBQUksVUFBWSxFQUFVLEdBQUcsT0FDdEUsT0FBTyxFQUFVLEdBQUcsUUFBUSxjQUVqQyxFQUFVLElBQU0sRUFBVSxHQUFHLE9BQ3hCLE9BQU8sRUFBVSxHQUFHLFFBQVEsY0FFOUIsTUFJVCxZQUFxQixFQUFxQixDQUN4QyxNQURtQixLQUFBLFFBQUEsR0FBQSxJQUNmLE1BQU8sR0FBVSxJQUFPLFNBQ25CLEVBQVUsR0FFZixXQUFhLElBQVUsR0FBQSxhQUFhLEVBQVUsR0FBSSxTQUM3QyxFQUFVLEdBQUcsSUFFZixPQUFPLEVBQVUsSUFLMUIsYUFBc0IsQ0FDcEIsR0FBTSxrQkFBb0IsR0FLMUIsSUFBTSxHQUFnQyxHQUNoQyxFQUE4QixHQUM5QixFQUFXLGVBQWUsVUFFaEMsR0FBQSxLQUFLLEVBQVUsT0FBUSxTQUFTLEVBQXdCLENBQ3RELE1BQU8sV0FBQSxRQUE0QyxHQUFBLEdBQUEsRUFBQSxFQUFBLEVBQUEsVUFBQSxPQUFBLElBQUEsRUFBQSxHQUFBLFVBQUEsR0FFakQsR0FBTSxHQUFNLEtBQ04sRUFBTSxFQUFLLEdBQ2pCLEVBQUksZUFBaUIsQ0FFbkIsT0FBUSxHQUFBLFNBQVMsRUFBSyxJQUFNLEVBQUssR0FBRyxjQUFnQixFQUFLLEdBQ3pELElBQUssRUFBSyxJQUtSLEdBQUEsU0FBUyxJQUFRLEVBQUksZUFBZSxTQUFXLFFBQVUsRUFBSSxNQUFNLGVBQ3JFLEdBQUksdUJBQXlCLElBRy9CLEdBQU0sR0FBNEIsVUFBQSxDQUNoQyxHQUFJLEVBQUksYUFBZSxFQUFHLENBQ3hCLEdBQUksQ0FHRixBQUFJLEVBQUksZ0JBQ04sR0FBSSxlQUFlLFlBQWMsRUFBSSxhQUV2QyxFQUlGLEdBQUksQ0FDRixHQUFNLEdBQWEsRUFBWSxRQUFRLEdBQ3ZDLEdBQUksSUFBZSxHQUFJLENBRXJCLEVBQVksT0FBTyxHQUNuQixHQUFNLEdBQU8sRUFBYyxPQUFPLEdBQVksR0FDOUMsQUFBSSxFQUFJLGdCQUFrQixFQUFLLEtBQU8sUUFDcEMsR0FBSSxlQUFlLEtBQU8sRUFBSyxVQUduQyxFQUlGLEdBQWdCLE1BQU8sQ0FDckIsS0FBSSxFQUNKLGFBQWMsS0FBSyxNQUNuQixlQUFnQixLQUFLLE1BQ3JCLElBQUcsTUFLVCxNQUFJLHNCQUF3QixJQUFPLE1BQU8sR0FBSSxvQkFBdUIsV0FDbkUsR0FBQSxLQUFLLEVBQUsscUJBQXNCLFNBQVMsRUFBeUIsQ0FDaEUsTUFBTyxXQUFBLFFBQVMsR0FBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLFVBQUEsT0FBQSxJQUFBLEVBQUEsR0FBQSxVQUFBLEdBQ2QsV0FDTyxFQUFTLE1BQU0sRUFBSyxNQUkvQixFQUFJLGlCQUFpQixtQkFBb0IsR0FHcEMsRUFBYSxNQUFNLEVBQUssTUFJbkMsR0FBQSxLQUFLLEVBQVUsT0FBUSxTQUFTLEVBQXdCLENBQ3RELE1BQU8sV0FBQSxRQUE0QyxHQUFBLEdBQUEsRUFBQSxFQUFBLEVBQUEsVUFBQSxPQUFBLElBQUEsRUFBQSxHQUFBLFVBQUEsR0FDakQsU0FBWSxLQUFLLE1BQ2pCLEVBQWMsS0FBSyxHQUVuQixHQUFnQixNQUFPLENBQ3JCLEtBQUksRUFDSixlQUFnQixLQUFLLE1BQ3JCLElBQUssT0FHQSxFQUFhLE1BQU0sS0FBTSxPQUt0QyxHQUFJLElBR0osYUFBMEIsQ0FDeEIsR0FBSSxDQUFDLEdBQUEsa0JBQ0gsT0FHRixHQUFNLEdBQWdCLEVBQU8sV0FDN0IsRUFBTyxXQUFhLFVBQUEsUUFBb0MsR0FBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLFVBQUEsT0FBQSxJQUFBLEVBQUEsR0FBQSxVQUFBLEdBQ3RELEdBQU0sR0FBSyxFQUFPLFNBQVMsS0FFckIsRUFBTyxHQU1iLEdBTEEsR0FBVyxFQUNYLEdBQWdCLFVBQVcsQ0FDekIsS0FBSSxFQUNKLEdBQUUsSUFFQSxFQUlGLEdBQUksQ0FDRixNQUFPLEdBQWMsTUFBTSxLQUFNLFFBQ2pDLElBT04sV0FBb0MsRUFBbUMsQ0FDckUsTUFBTyxXQUFBLFFBQXdCLEdBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxVQUFBLE9BQUEsSUFBQSxFQUFBLEdBQUEsVUFBQSxHQUM3QixHQUFNLEdBQU0sRUFBSyxPQUFTLEVBQUksRUFBSyxHQUFLLE9BQ3hDLEdBQUksRUFBSyxDQUVQLEdBQU0sR0FBTyxHQUNQLEVBQUssT0FBTyxHQUVsQixHQUFXLEVBQ1gsR0FBZ0IsVUFBVyxDQUN6QixLQUFJLEVBQ0osR0FBRSxJQUdOLE1BQU8sR0FBd0IsTUFBTSxLQUFNLElBSS9DLEdBQUEsS0FBSyxFQUFPLFFBQVMsWUFBYSxHQUNsQyxHQUFBLEtBQUssRUFBTyxRQUFTLGVBQWdCLEdBR3ZDLEdBQU0sSUFBbUIsSUFDckIsR0FDQSxHQU9KLFlBQTRDLEVBQTZCLEVBQWMsQ0FPckYsR0FMSSxDQUFDLEdBS0QsRUFBUyxPQUFTLEVBQVEsS0FDNUIsTUFBTyxHQUdULEdBQUksQ0FHRixHQUFJLEVBQVMsU0FBVyxFQUFRLE9BQzlCLE1BQU8sUUFFVCxFQVFGLE1BQU8sR0FPVCxZQUE0QixFQUFZLENBRXRDLEdBQUksRUFBTSxPQUFTLFdBQ2pCLE1BQU8sR0FHVCxHQUFJLENBQ0YsR0FBTSxHQUFTLEVBQU0sT0FFckIsR0FBSSxDQUFDLEdBQVUsQ0FBQyxFQUFPLFFBQ3JCLE1BQU8sR0FLVCxHQUFJLEVBQU8sVUFBWSxTQUFXLEVBQU8sVUFBWSxZQUFjLEVBQU8sa0JBQ3hFLE1BQU8sUUFFVCxFQUtGLE1BQU8sR0FVVCxZQUE2QixFQUFtQixFQUErQixDQUEvQixNQUFBLEtBQUEsUUFBQSxHQUFBLElBQ3ZDLFNBQUMsRUFBWSxDQUlsQixHQUFJLEdBQUMsR0FBUyxLQUFzQixJQUtoQyxJQUFtQixHQUl2QixJQUFNLEdBQU8sRUFBTSxPQUFTLFdBQWEsUUFBVSxFQUFNLEtBR3pELEFBQUksS0FBb0IsT0FDdEIsR0FBUSxDQUNOLE1BQU8sRUFDUCxLQUFJLEVBQ0osT0FBUSxJQUVWLEdBQW9CLEdBSWIsR0FBbUMsR0FBbUIsSUFDN0QsR0FBUSxDQUNOLE1BQU8sRUFDUCxLQUFJLEVBQ0osT0FBUSxJQUVWLEdBQW9CLEdBSXRCLGFBQWEsSUFDYixHQUFrQixFQUFPLFdBQVcsVUFBQSxDQUNsQyxHQUFrQixRQUNqQixNQTBCUCxhQUFzQixDQUNwQixHQUFNLFlBQWMsR0FPcEIsSUFBTSxHQUFvQixHQUFnQixLQUFLLEtBQU0sT0FDL0MsRUFBd0IsR0FBb0IsRUFBbUIsSUFDckUsRUFBTyxTQUFTLGlCQUFpQixRQUFTLEVBQXVCLElBQ2pFLEVBQU8sU0FBUyxpQkFBaUIsV0FBWSxFQUF1QixJQU9wRSxDQUFDLGNBQWUsUUFBUSxRQUFRLFNBQUMsRUFBYyxDQUU3QyxHQUFNLEdBQVMsRUFBZSxJQUFZLEVBQWUsR0FBUSxVQUVqRSxBQUFJLENBQUMsR0FBUyxDQUFDLEVBQU0sZ0JBQWtCLENBQUMsRUFBTSxlQUFlLHFCQUk3RCxJQUFBLEtBQUssRUFBTyxtQkFBb0IsU0FBUyxFQUEwQyxDQUNqRixNQUFPLFVBRUwsRUFDQSxFQUNBLEVBQTJDLENBRTNDLEdBQUksSUFBUyxTQUFXLEdBQVEsV0FDOUIsR0FBSSxDQUNGLEdBQU0sR0FBSyxLQUNMLEVBQVksRUFBRyxvQ0FBc0MsRUFBRyxxQ0FBdUMsR0FDL0YsRUFBa0IsRUFBUyxHQUFRLEVBQVMsSUFBUyxDQUFFLFNBQVUsR0FFdkUsR0FBSSxDQUFDLEVBQWUsUUFBUyxDQUMzQixHQUFNLEdBQVUsR0FBb0IsR0FDcEMsRUFBZSxRQUFVLEVBQ3pCLEVBQXlCLEtBQUssS0FBTSxFQUFNLEVBQVMsR0FHckQsRUFBZSxVQUFZLE9BQzNCLEVBTUosTUFBTyxHQUF5QixLQUFLLEtBQU0sRUFBTSxFQUFVLE1BSS9ELEdBQUEsS0FBSyxFQUFPLHNCQUF1QixTQUFTLEVBQWdELENBQzFGLE1BQU8sVUFFTCxFQUNBLEVBQ0EsRUFBd0MsQ0FFeEMsR0FBSSxJQUFTLFNBQVcsR0FBUSxXQUM5QixHQUFJLENBQ0YsR0FBTSxHQUFLLEtBQ0wsRUFBVyxFQUFHLHFDQUF1QyxHQUNyRCxFQUFpQixFQUFTLEdBRWhDLEFBQUksR0FDRixHQUFlLFVBQVksRUFFdkIsRUFBZSxVQUFZLEdBQzdCLEdBQTRCLEtBQUssS0FBTSxFQUFNLEVBQWUsUUFBUyxHQUNyRSxFQUFlLFFBQVUsT0FDekIsTUFBTyxHQUFTLElBSWQsT0FBTyxLQUFLLEdBQVUsU0FBVyxHQUNuQyxNQUFPLEdBQUcsMENBR2QsRUFNSixNQUFPLEdBQTRCLEtBQUssS0FBTSxFQUFNLEVBQVUsVUFNdEUsR0FBSSxJQUEwQyxLQUU5QyxhQUF3QixDQUN0QixHQUFxQixFQUFPLFFBRTVCLEVBQU8sUUFBVSxTQUFTLEVBQVUsRUFBVSxFQUFXLEVBQWEsRUFBVSxDQVM5RSxNQVJBLElBQWdCLFFBQVMsQ0FDdkIsT0FBTSxFQUNOLE1BQUssRUFDTCxLQUFJLEVBQ0osSUFBRyxFQUNILElBQUcsSUFHRCxHQUVLLEdBQW1CLE1BQU0sS0FBTSxXQUdqQyxJQUlYLEdBQUksSUFBNkQsS0FFakUsYUFBcUMsQ0FDbkMsR0FBa0MsRUFBTyxxQkFFekMsRUFBTyxxQkFBdUIsU0FBUyxFQUFNLENBRzNDLE1BRkEsSUFBZ0IscUJBQXNCLEdBRWxDLEdBRUssR0FBZ0MsTUFBTSxLQUFNLFdBRzlDLGdGQzNuQlgsR0FBQSxLQUNBLEdBQUEsS0FjQSxhQUFxQixDQUNuQixHQUFNLEdBQVMsR0FBQSxrQkFDVCxFQUFTLEVBQU8sUUFBVSxFQUFPLFNBRXZDLEdBQUksQUFBRSxJQUFXLFFBQVcsRUFBTyxnQkFBaUIsQ0FFbEQsR0FBTSxHQUFNLEdBQUksYUFBWSxHQUM1QixFQUFPLGdCQUFnQixHQUl2QixFQUFJLEdBQU0sRUFBSSxHQUFLLEtBQVMsTUFHNUIsRUFBSSxHQUFNLEVBQUksR0FBSyxNQUFVLE1BRTdCLEdBQU0sR0FBTSxTQUFDLEVBQVcsQ0FFdEIsT0FESSxHQUFJLEVBQUksU0FBUyxJQUNkLEVBQUUsT0FBUyxHQUNoQixFQUFJLElBQUksRUFFVixNQUFPLElBR1QsTUFDRSxHQUFJLEVBQUksSUFBTSxFQUFJLEVBQUksSUFBTSxFQUFJLEVBQUksSUFBTSxFQUFJLEVBQUksSUFBTSxFQUFJLEVBQUksSUFBTSxFQUFJLEVBQUksSUFBTSxFQUFJLEVBQUksSUFBTSxFQUFJLEVBQUksSUFJOUcsTUFBTyxtQ0FBbUMsUUFBUSxRQUFTLFNBQUEsRUFBQyxDQUUxRCxHQUFNLEdBQUssS0FBSyxTQUFXLEdBQU0sRUFFM0IsRUFBSSxJQUFNLElBQU0sRUFBSyxFQUFJLEVBQU8sRUFDdEMsTUFBTyxHQUFFLFNBQVMsTUFsQ3RCLEVBQUEsTUFBQSxHQTZDQSxZQUNFLEVBQVcsQ0FPWCxHQUFJLENBQUMsRUFDSCxNQUFPLEdBR1QsR0FBTSxHQUFRLEVBQUksTUFBTSxnRUFFeEIsR0FBSSxDQUFDLEVBQ0gsTUFBTyxHQUlULEdBQU0sR0FBUSxFQUFNLElBQU0sR0FDcEIsRUFBVyxFQUFNLElBQU0sR0FDN0IsTUFBTyxDQUNMLEtBQU0sRUFBTSxHQUNaLEtBQU0sRUFBTSxHQUNaLFNBQVUsRUFBTSxHQUNoQixTQUFVLEVBQU0sR0FBSyxFQUFRLEdBekJqQyxFQUFBLFNBQUEsR0FpQ0EsWUFBb0MsRUFBWSxDQUM5QyxHQUFJLEVBQU0sUUFDUixNQUFPLEdBQU0sUUFFZixHQUFJLEVBQU0sV0FBYSxFQUFNLFVBQVUsUUFBVSxFQUFNLFVBQVUsT0FBTyxHQUFJLENBQzFFLEdBQU0sR0FBWSxFQUFNLFVBQVUsT0FBTyxHQUV6QyxNQUFJLEdBQVUsTUFBUSxFQUFVLE1BQ3BCLEVBQVUsS0FBSSxLQUFLLEVBQVUsTUFFbEMsRUFBVSxNQUFRLEVBQVUsT0FBUyxFQUFNLFVBQVksWUFFaEUsTUFBTyxHQUFNLFVBQVksWUFaM0IsRUFBQSxvQkFBQSxHQXNCQSxZQUFzQyxFQUFjLEVBQWdCLEVBQWEsQ0FDL0UsRUFBTSxVQUFZLEVBQU0sV0FBYSxHQUNyQyxFQUFNLFVBQVUsT0FBUyxFQUFNLFVBQVUsUUFBVSxHQUNuRCxFQUFNLFVBQVUsT0FBTyxHQUFLLEVBQU0sVUFBVSxPQUFPLElBQU0sR0FDekQsRUFBTSxVQUFVLE9BQU8sR0FBRyxNQUFRLEVBQU0sVUFBVSxPQUFPLEdBQUcsT0FBUyxHQUFTLEdBQzlFLEVBQU0sVUFBVSxPQUFPLEdBQUcsS0FBTyxFQUFNLFVBQVUsT0FBTyxHQUFHLE1BQVEsR0FBUSxRQUw3RSxFQUFBLHNCQUFBLEdBZUEsWUFBc0MsRUFBYyxFQUFpQyxPQUNuRixHQUFJLEdBQUMsRUFBTSxXQUFhLENBQUMsRUFBTSxVQUFVLFFBR3pDLElBQU0sR0FBa0IsRUFBTSxVQUFVLE9BQU8sR0FFekMsRUFBbUIsQ0FBRSxLQUFNLFVBQVcsUUFBUyxJQUMvQyxFQUFtQixFQUFnQixVQUd6QyxHQUZBLEVBQWdCLFVBQVMsR0FBQSxTQUFBLEdBQUEsU0FBQSxHQUFBLFNBQUEsR0FBUSxHQUFxQixHQUFxQixHQUV2RSxHQUFnQixRQUFVLEdBQWMsQ0FDMUMsR0FBTSxHQUFVLEdBQUEsU0FBQSxHQUFBLFNBQUEsR0FBQSxHQUFRLEtBQWdCLE1BQUEsSUFBQSxPQUFBLE9BQUEsRUFBRSxNQUFTLEVBQWEsTUFDaEUsRUFBZ0IsVUFBVSxLQUFPLElBWnJDLEVBQUEsc0JBQUEsR0FpQkEsR0FBTSxJQUFnQixzTEFpQnRCLFlBQTRCLEVBQWEsQ0FDdkMsR0FBTSxHQUFRLEVBQU0sTUFBTSxLQUFrQixHQUN0QyxFQUFRLFNBQVMsRUFBTSxHQUFJLElBQzNCLEVBQVEsU0FBUyxFQUFNLEdBQUksSUFDM0IsRUFBUSxTQUFTLEVBQU0sR0FBSSxJQUNqQyxNQUFPLENBQ0wsY0FBZSxFQUFNLEdBQ3JCLE1BQU8sTUFBTSxHQUFTLE9BQVksRUFDbEMsTUFBTyxNQUFNLEdBQVMsT0FBWSxFQUNsQyxNQUFPLE1BQU0sR0FBUyxPQUFZLEVBQ2xDLFdBQVksRUFBTSxJQVZ0QixFQUFBLFlBQUEsR0FjQSxHQUFNLElBQW9CLEdBQUssSUFPL0IsWUFBc0MsRUFBYSxFQUErQixDQUNoRixHQUFJLENBQUMsRUFDSCxNQUFPLElBR1QsR0FBTSxHQUFjLFNBQVMsR0FBRyxFQUFVLElBQzFDLEdBQUksQ0FBQyxNQUFNLEdBQ1QsTUFBTyxHQUFjLElBR3ZCLEdBQU0sR0FBYSxLQUFLLE1BQU0sR0FBRyxHQUNqQyxNQUFLLE9BQU0sR0FJSixHQUhFLEVBQWEsRUFaeEIsRUFBQSxzQkFBQSxHQXlCQSxZQUFrQyxFQUFpQixFQUFtQixFQUEwQixDQUExQixBQUFBLElBQUEsUUFBQSxHQUFBLEdBQ3BFLEdBQU0sR0FBUyxFQUFNLFFBQVUsRUFDekIsRUFBVyxFQUFNLE9BQ2pCLEVBQWEsS0FBSyxJQUFJLEtBQUssSUFBSSxFQUFVLEVBQVMsR0FBSSxHQUU1RCxFQUFNLFlBQWMsRUFDakIsTUFBTSxLQUFLLElBQUksRUFBRyxFQUFhLEdBQWlCLEdBQ2hELElBQUksU0FBQyxFQUFZLENBQUssTUFBQSxJQUFBLFNBQVMsRUFBTSxLQUV4QyxFQUFNLGFBQWUsR0FBQSxTQUFTLEVBQU0sS0FBSyxJQUFJLEVBQVcsRUFBRyxJQUFjLEVBQU0sT0FBUyxHQUV4RixFQUFNLGFBQWUsRUFDbEIsTUFBTSxLQUFLLElBQUksRUFBYSxFQUFHLEdBQVcsRUFBYSxFQUFJLEdBQzNELElBQUksU0FBQyxFQUFZLENBQUssTUFBQSxJQUFBLFNBQVMsRUFBTSxLQWIxQyxFQUFBLGtCQUFBLEdBc0JBLFlBQXlDLEVBQWUsQ0FFdEQsTUFBTyxHQUFRLE1BQU0sUUFBUyxHQUFHLEdBRm5DLEVBQUEseUJBQUEsR0EwQkEsWUFBd0MsRUFBa0IsT0FFeEQsR0FBQSxHQUFLLEtBQWlCLE1BQUEsSUFBQSxPQUFBLE9BQUEsRUFBRSxvQkFDdEIsTUFBTyxHQUdULEdBQUksQ0FHRixPQUFPLGVBQWUsRUFBVyxzQkFBdUIsQ0FDdEQsTUFBTyxVQUVULEVBSUYsTUFBTyxHQWhCVCxFQUFBLHdCQUFBLEtDclFBLGdFQUlBLFlBQXdCLEVBQWlCLEVBQXdCLENBRy9ELE9BREksR0FBSyxFQUNBLEVBQUksRUFBTSxPQUFTLEVBQUcsR0FBSyxFQUFHLElBQUssQ0FDMUMsR0FBTSxHQUFPLEVBQU0sR0FDbkIsQUFBSSxJQUFTLElBQ1gsRUFBTSxPQUFPLEVBQUcsR0FDWCxBQUFJLElBQVMsS0FDbEIsR0FBTSxPQUFPLEVBQUcsR0FFaEIsS0FDUyxHQUNULEdBQU0sT0FBTyxFQUFHLEdBRWhCLEtBS0osR0FBSSxFQUVGLEtBQU8sSUFBTSxFQUNYLEVBQU0sUUFBUSxNQUlsQixNQUFPLEdBS1QsR0FBTSxJQUFjLDZEQUVwQixZQUFtQixFQUFnQixDQUNqQyxHQUFNLEdBQVEsR0FBWSxLQUFLLEdBQy9CLE1BQU8sR0FBUSxFQUFNLE1BQU0sR0FBSyxHQU1sQyxhQUF1QixRQUFDLEdBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxVQUFBLE9BQUEsSUFBQSxFQUFBLEdBQUEsVUFBQSxHQUl0QixPQUhJLEdBQWUsR0FDZixFQUFtQixHQUVkLEVBQUksRUFBSyxPQUFTLEVBQUcsR0FBSyxJQUFNLENBQUMsRUFBa0IsSUFBSyxDQUMvRCxHQUFNLEdBQU8sR0FBSyxFQUFJLEVBQUssR0FBSyxJQUdoQyxBQUFJLENBQUMsR0FJTCxHQUFrQixFQUFJLElBQUksRUFDMUIsRUFBbUIsRUFBSyxPQUFPLEtBQU8sS0FPeEMsU0FBZSxHQUNiLEVBQWEsTUFBTSxLQUFLLE9BQU8sU0FBQSxFQUFDLENBQUksTUFBQSxDQUFDLENBQUMsSUFDdEMsQ0FBQyxHQUNELEtBQUssS0FFQyxHQUFtQixJQUFNLElBQU0sR0FBZ0IsSUF6QnpELEdBQUEsUUFBQSxHQTZCQSxZQUFjLEVBQWEsQ0FFekIsT0FESSxHQUFRLEVBQ0wsRUFBUSxFQUFJLFFBQ2IsRUFBSSxLQUFXLEdBRE0sSUFDekIsQ0FNRixPQURJLEdBQU0sRUFBSSxPQUFTLEVBQ2hCLEdBQU8sR0FDUixFQUFJLEtBQVMsR0FERixJQUNmLENBS0YsTUFBSSxHQUFRLEVBQ0gsR0FFRixFQUFJLE1BQU0sRUFBTyxFQUFNLEVBQVEsR0FNeEMsWUFBeUIsRUFBYyxFQUFVLENBRS9DLEVBQU8sR0FBUSxHQUFNLE9BQU8sR0FDNUIsRUFBSyxHQUFRLEdBQUksT0FBTyxHQVF4QixPQUxNLEdBQVksR0FBSyxFQUFLLE1BQU0sTUFDNUIsRUFBVSxHQUFLLEVBQUcsTUFBTSxNQUV4QixFQUFTLEtBQUssSUFBSSxFQUFVLE9BQVEsRUFBUSxRQUM5QyxFQUFrQixFQUNiLEVBQUksRUFBRyxFQUFJLEVBQVEsSUFDMUIsR0FBSSxFQUFVLEtBQU8sRUFBUSxHQUFJLENBQy9CLEVBQWtCLEVBQ2xCLE1BS0osT0FESSxHQUFjLEdBQ1QsRUFBSSxFQUFpQixFQUFJLEVBQVUsT0FBUSxJQUNsRCxFQUFZLEtBQUssTUFHbkIsU0FBYyxFQUFZLE9BQU8sRUFBUSxNQUFNLElBRXhDLEVBQVksS0FBSyxLQXpCMUIsR0FBQSxTQUFBLEdBK0JBLFlBQThCLEVBQVksQ0FDeEMsR0FBTSxHQUFpQixHQUFXLEdBQzVCLEVBQWdCLEVBQUssT0FBTyxNQUFRLElBR3RDLEVBQWlCLEdBQ25CLEVBQUssTUFBTSxLQUFLLE9BQU8sU0FBQSxFQUFDLENBQUksTUFBQSxDQUFDLENBQUMsSUFDOUIsQ0FBQyxHQUNELEtBQUssS0FFUCxNQUFJLENBQUMsR0FBa0IsQ0FBQyxHQUN0QixHQUFpQixLQUVmLEdBQWtCLEdBQ3BCLElBQWtCLEtBR1osR0FBaUIsSUFBTSxJQUFNLEVBakJ2QyxHQUFBLGNBQUEsR0FzQkEsWUFBMkIsRUFBWSxDQUNyQyxNQUFPLEdBQUssT0FBTyxLQUFPLElBRDVCLEdBQUEsV0FBQSxHQU1BLGFBQW9CLFFBQUMsR0FBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLFVBQUEsT0FBQSxJQUFBLEVBQUEsR0FBQSxVQUFBLEdBQ25CLE1BQU8sSUFBYyxFQUFLLEtBQUssTUFEakMsR0FBQSxLQUFBLEdBS0EsWUFBd0IsRUFBWSxDQUNsQyxHQUFNLEdBQVMsR0FBVSxHQUNuQixFQUFPLEVBQU8sR0FDaEIsRUFBTSxFQUFPLEdBRWpCLE1BQUksQ0FBQyxHQUFRLENBQUMsRUFFTCxJQUdMLElBRUYsR0FBTSxFQUFJLE9BQU8sRUFBRyxFQUFJLE9BQVMsSUFHNUIsRUFBTyxHQWZoQixHQUFBLFFBQUEsR0FtQkEsWUFBeUIsRUFBYyxFQUFZLENBQ2pELEdBQUksR0FBSSxHQUFVLEdBQU0sR0FDeEIsTUFBSSxJQUFPLEVBQUUsT0FBTyxFQUFJLE9BQVMsTUFBUSxHQUN2QyxHQUFJLEVBQUUsT0FBTyxFQUFHLEVBQUUsT0FBUyxFQUFJLFNBRTFCLEVBTFQsR0FBQSxTQUFBLHFFQ2pMQSxHQUFBLElBQUEsS0FnQkEsR0FBQSxVQUFBLENBU0UsV0FDRSxFQUF3RyxDQUQxRyxHQUFBLEdBQUEsS0FSUSxLQUFBLE9BQU0sVUFDTixLQUFBLFVBSUgsR0FnSlksS0FBQSxTQUFXLFNBQUMsRUFBaUMsQ0FDNUQsRUFBSyxXQUFVLFdBQWtCLElBSWxCLEtBQUEsUUFBVSxTQUFDLEVBQVksQ0FDdEMsRUFBSyxXQUFVLFdBQWtCLElBSWxCLEtBQUEsV0FBYSxTQUFDLEVBQWUsRUFBZ0MsQ0FDNUUsR0FBSSxFQUFLLFNBQU0sVUFJZixJQUFJLEdBQUEsV0FBVyxHQUFRLENBQ3JCLEFBQU0sRUFBeUIsS0FBSyxFQUFLLFNBQVUsRUFBSyxTQUN4RCxPQUdGLEVBQUssT0FBUyxFQUNkLEVBQUssT0FBUyxFQUVkLEVBQUsscUJBS1UsS0FBQSxlQUFpQixTQUFDLEVBT2xDLENBQ0MsRUFBSyxVQUFZLEVBQUssVUFBVSxPQUFPLEdBQ3ZDLEVBQUssb0JBSVUsS0FBQSxpQkFBbUIsVUFBQSxDQUNsQyxHQUFJLEVBQUssU0FBTSxVQUlmLElBQU0sR0FBaUIsRUFBSyxVQUFVLFFBQ3RDLEVBQUssVUFBWSxHQUVqQixFQUFlLFFBQVEsU0FBQSxFQUFPLENBQzVCLEFBQUksRUFBUSxNQUlSLEdBQUssU0FBTSxZQUNULEVBQVEsYUFFVixFQUFRLFlBQWEsRUFBSyxRQUkxQixFQUFLLFNBQU0sWUFDVCxFQUFRLFlBQ1YsRUFBUSxXQUFXLEVBQUssUUFJNUIsRUFBUSxLQUFPLFFBN01qQixHQUFJLENBQ0YsRUFBUyxLQUFLLFNBQVUsS0FBSyxlQUN0QixFQUFQLENBQ0EsS0FBSyxRQUFRLElBS0gsU0FBQSxRQUFkLFNBQXlCLEVBQXlCLENBQ2hELE1BQU8sSUFBSSxHQUFZLFNBQUEsRUFBTyxDQUM1QixFQUFRLE1BS0UsRUFBQSxPQUFkLFNBQWdDLEVBQVksQ0FDMUMsTUFBTyxJQUFJLEdBQVksU0FBQyxFQUFHLEVBQU0sQ0FDL0IsRUFBTyxNQUtHLEVBQUEsSUFBZCxTQUEyQixFQUFxQyxDQUM5RCxNQUFPLElBQUksR0FBaUIsU0FBQyxFQUFTLEVBQU0sQ0FDMUMsR0FBSSxDQUFDLE1BQU0sUUFBUSxHQUFhLENBQzlCLEVBQU8sR0FBSSxXQUFVLDRDQUNyQixPQUdGLEdBQUksRUFBVyxTQUFXLEVBQUcsQ0FDM0IsRUFBUSxJQUNSLE9BR0YsR0FBSSxHQUFVLEVBQVcsT0FDbkIsRUFBMEIsR0FFaEMsRUFBVyxRQUFRLFNBQUMsRUFBTSxFQUFLLENBQzdCLEFBQUssRUFBWSxRQUFRLEdBQ3RCLEtBQUssU0FBQSxFQUFLLENBSVQsQUFIQSxFQUFtQixHQUFTLEVBQzVCLEdBQVcsRUFFUCxJQUFZLEdBR2hCLEVBQVEsS0FFVCxLQUFLLEtBQU0sUUFNYixFQUFBLFVBQUEsS0FBUCxTQUNFLEVBQ0EsRUFBdUUsQ0FGekUsR0FBQSxHQUFBLEtBSUUsTUFBTyxJQUFJLEdBQVksU0FBQyxFQUFTLEVBQU0sQ0FDckMsRUFBSyxlQUFlLENBQ2xCLEtBQU0sR0FDTixZQUFhLFNBQUEsRUFBTSxDQUNqQixHQUFJLENBQUMsRUFBYSxDQUdoQixFQUFRLEdBQ1IsT0FFRixHQUFJLENBQ0YsRUFBUSxFQUFZLElBQ3BCLGFBQ08sRUFBUCxDQUNBLEVBQU8sR0FDUCxTQUdKLFdBQVksU0FBQSxFQUFNLENBQ2hCLEdBQUksQ0FBQyxFQUFZLENBQ2YsRUFBTyxHQUNQLE9BRUYsR0FBSSxDQUNGLEVBQVEsRUFBVyxJQUNuQixhQUNPLEVBQVAsQ0FDQSxFQUFPLEdBQ1AsY0FRSCxFQUFBLFVBQUEsTUFBUCxTQUNFLEVBQXFFLENBRXJFLE1BQU8sTUFBSyxLQUFLLFNBQUEsRUFBRyxDQUFJLE1BQUEsSUFBSyxJQUl4QixFQUFBLFVBQUEsUUFBUCxTQUF3QixFQUErQixDQUF2RCxHQUFBLEdBQUEsS0FDRSxNQUFPLElBQUksR0FBcUIsU0FBQyxFQUFTLEVBQU0sQ0FDOUMsR0FBSSxHQUNBLEVBRUosTUFBTyxHQUFLLEtBQ1YsU0FBQSxFQUFLLENBQ0gsRUFBYSxHQUNiLEVBQU0sRUFDRixHQUNGLEtBR0osU0FBQSxFQUFNLENBQ0osRUFBYSxHQUNiLEVBQU0sRUFDRixHQUNGLE1BR0osS0FBSyxVQUFBLENBQ0wsR0FBSSxFQUFZLENBQ2QsRUFBTyxHQUNQLE9BR0YsRUFBUyxRQU1SLEVBQUEsVUFBQSxTQUFQLFVBQUEsQ0FDRSxNQUFPLHdCQTBFWCxLQUVTLEdBQUEsWUFBQSxxRUNsUFQsR0FBQSxJQUFBLEtBQ0EsR0FBQSxLQUdBLEdBQUEsVUFBQSxDQUlFLFdBQTZCLEVBQWUsQ0FBZixLQUFBLE9BQUEsRUFGWixLQUFBLFFBQWlDLEdBTzNDLFNBQUEsVUFBQSxRQUFQLFVBQUEsQ0FDRSxNQUFPLE1BQUssU0FBVyxRQUFhLEtBQUssU0FBVyxLQUFLLFFBYXBELEVBQUEsVUFBQSxJQUFQLFNBQVcsRUFBa0MsQ0FBN0MsR0FBQSxHQUFBLEtBQ0UsR0FBSSxDQUFDLEtBQUssVUFDUixNQUFPLElBQUEsWUFBWSxPQUFPLEdBQUksSUFBQSxZQUFZLG9EQUk1QyxHQUFNLEdBQU8sSUFDYixNQUFJLE1BQUssUUFBUSxRQUFRLEtBQVUsSUFDakMsS0FBSyxRQUFRLEtBQUssR0FFZixFQUNGLEtBQUssVUFBQSxDQUFNLE1BQUEsR0FBSyxPQUFPLEtBSXZCLEtBQUssS0FBTSxVQUFBLENBQ1YsTUFBQSxHQUFLLE9BQU8sR0FBTSxLQUFLLEtBQU0sVUFBQSxNQUkxQixHQVNGLEVBQUEsVUFBQSxPQUFQLFNBQWMsRUFBb0IsQ0FDaEMsR0FBTSxHQUFjLEtBQUssUUFBUSxPQUFPLEtBQUssUUFBUSxRQUFRLEdBQU8sR0FBRyxHQUN2RSxNQUFPLElBTUYsRUFBQSxVQUFBLE9BQVAsVUFBQSxDQUNFLE1BQU8sTUFBSyxRQUFRLFFBWWYsRUFBQSxVQUFBLE1BQVAsU0FBYSxFQUFnQixDQUE3QixHQUFBLEdBQUEsS0FDRSxNQUFPLElBQUksSUFBQSxZQUFxQixTQUFBLEVBQU8sQ0FFckMsR0FBTSxHQUFxQixXQUFXLFVBQUEsQ0FDcEMsQUFBSSxHQUFXLEVBQVUsR0FDdkIsRUFBUSxLQUVULEdBR0gsQUFBSyxHQUFBLFlBQVksSUFBSSxFQUFLLFNBQ3ZCLEtBQUssVUFBQSxDQUNKLGFBQWEsR0FDYixFQUFRLE1BRVQsS0FBSyxLQUFNLFVBQUEsQ0FDVixFQUFRLFNBSWxCLEtBN0ZhLEdBQUEsY0FBQSx3RUNKYixHQUFBLElBQUEsS0FDQSxHQUFBLEtBZ0JNLEdBQXVDLENBQzNDLFdBQVksVUFBQSxDQUFNLE1BQUEsTUFBSyxNQUFRLE1Bd0JqQyxhQUE4QixDQUNwQixHQUFBLEdBQUEsR0FBQSxrQkFBQSxZQUNSLEdBQUksR0FBQyxHQUFlLENBQUMsRUFBWSxLQXlCakMsSUFBTSxHQUFhLEtBQUssTUFBUSxFQUFZLE1BRTVDLE1BQU8sQ0FDTCxJQUFLLFVBQUEsQ0FBTSxNQUFBLEdBQVksT0FDdkIsV0FBVSxJQVFkLGFBQTJCLENBQ3pCLEdBQUksQ0FDRixHQUFNLEdBQVksR0FBQSxlQUFlLEdBQVEsY0FDekMsTUFBTyxHQUFVLGlCQUNqQixDQUNBLFFBT0osR0FBTSxJQUErQyxHQUFBLFlBQWMsS0FBdUIsS0FFcEYsR0FDSixLQUF3QixPQUNwQixHQUNBLENBQ0UsV0FBWSxVQUFBLENBQU0sTUFBQyxJQUFvQixXQUFhLEdBQW9CLE9BQVMsTUFNNUUsRUFBQSx1QkFBdUMsR0FBb0IsV0FBVyxLQUFLLElBYTNFLEVBQUEsbUJBQW1DLEdBQWdCLFdBQVcsS0FBSyxJQUduRSxFQUFBLGdCQUFrQixFQUFBLG1CQUtsQixFQUFBLG9CQUFzQixLQUF3QixPQVc5QyxFQUFBLDZCQUFnQyxVQUFBLENBS25DLEdBQUEsR0FBQSxHQUFBLGtCQUFBLFlBQ1IsR0FBSSxDQUFDLEdBQWUsQ0FBQyxFQUFZLElBQUssQ0FDcEMsRUFBQSxrQ0FBb0MsT0FDcEMsT0FHRixHQUFNLEdBQVksS0FBTyxJQUNuQixFQUFpQixFQUFZLE1BQzdCLEVBQVUsS0FBSyxNQUdmLEVBQWtCLEVBQVksV0FDaEMsS0FBSyxJQUFJLEVBQVksV0FBYSxFQUFpQixHQUNuRCxFQUNFLEVBQXVCLEVBQWtCLEVBUXpDLEVBQWtCLEVBQVksUUFBVSxFQUFZLE9BQU8sZ0JBQzNELEVBQXFCLE1BQU8sSUFBb0IsU0FFaEQsRUFBdUIsRUFBcUIsS0FBSyxJQUFJLEVBQWtCLEVBQWlCLEdBQVcsRUFDbkcsRUFBNEIsRUFBdUIsRUFFekQsTUFBSSxJQUF3QixFQUV0QixHQUFtQixFQUNyQixHQUFBLGtDQUFvQyxhQUM3QixFQUFZLFlBRW5CLEdBQUEsa0NBQW9DLGtCQUM3QixHQUtYLEdBQUEsa0NBQW9DLFVBQzdCLCtFQ3ZMVCxFQUFBLGFBQUEsS0FBQSxHQUNBLEVBQUEsYUFBQSxLQUFBLEdBQ0EsRUFBQSxhQUFBLEtBQUEsR0FDQSxFQUFBLGFBQUEsS0FBQSxHQUNBLEVBQUEsYUFBQSxLQUFBLEdBQ0EsRUFBQSxhQUFBLEtBQUEsR0FDQSxFQUFBLGFBQUEsS0FBQSxHQUNBLEVBQUEsYUFBQSxLQUFBLEdBQ0EsRUFBQSxhQUFBLEtBQUEsR0FDQSxFQUFBLGFBQUEsS0FBQSxHQUNBLEVBQUEsYUFBQSxLQUFBLEdBQ0EsRUFBQSxhQUFBLEtBQUEsR0FDQSxFQUFBLGFBQUEsS0FBQSxHQUNBLEVBQUEsYUFBQSxLQUFBLEdBQ0EsRUFBQSxhQUFBLEtBQUEsR0FDQSxFQUFBLGFBQUEsS0FBQSxHQUNBLEVBQUEsYUFBQSxLQUFBLEdBQ0EsRUFBQSxhQUFBLEtBQUEsR0FDQSxFQUFBLGFBQUEsS0FBQSwrRUNFQSxHQUFBLElBUU0sR0FBa0IsSUFNeEIsR0FBQSxVQUFBLENBQUEsWUFBQSxDQUVZLEtBQUEsb0JBQStCLEdBRy9CLEtBQUEsZ0JBQWlELEdBR2pELEtBQUEsaUJBQXFDLEdBR3JDLEtBQUEsYUFBNkIsR0FHN0IsS0FBQSxNQUFjLEdBR2QsS0FBQSxNQUFzQyxHQUd0QyxLQUFBLE9BQWlCLEdBR2pCLEtBQUEsVUFBc0IsR0F3QmxCLFNBQUEsTUFBZCxTQUFvQixFQUFhLENBQy9CLEdBQU0sR0FBVyxHQUFJLEdBQ3JCLE1BQUksSUFDRixHQUFTLGFBQVksRUFBQSxTQUFPLEVBQU0sY0FDbEMsRUFBUyxNQUFLLEVBQUEsU0FBQSxHQUFRLEVBQU0sT0FDNUIsRUFBUyxPQUFNLEVBQUEsU0FBQSxHQUFRLEVBQU0sUUFDN0IsRUFBUyxVQUFTLEVBQUEsU0FBQSxHQUFRLEVBQU0sV0FDaEMsRUFBUyxNQUFRLEVBQU0sTUFDdkIsRUFBUyxPQUFTLEVBQU0sT0FDeEIsRUFBUyxNQUFRLEVBQU0sTUFDdkIsRUFBUyxTQUFXLEVBQU0sU0FDMUIsRUFBUyxpQkFBbUIsRUFBTSxpQkFDbEMsRUFBUyxhQUFlLEVBQU0sYUFDOUIsRUFBUyxpQkFBZ0IsRUFBQSxTQUFPLEVBQU0sa0JBQ3RDLEVBQVMsZ0JBQWtCLEVBQU0saUJBRTVCLEdBT0YsRUFBQSxVQUFBLGlCQUFQLFNBQXdCLEVBQWdDLENBQ3RELEtBQUssZ0JBQWdCLEtBQUssSUFNckIsRUFBQSxVQUFBLGtCQUFQLFNBQXlCLEVBQXdCLENBQy9DLFlBQUssaUJBQWlCLEtBQUssR0FDcEIsTUFNRixFQUFBLFVBQUEsUUFBUCxTQUFlLEVBQWlCLENBQzlCLFlBQUssTUFBUSxHQUFRLEdBQ2pCLEtBQUssVUFDUCxLQUFLLFNBQVMsT0FBTyxDQUFFLEtBQUksSUFFN0IsS0FBSyx3QkFDRSxNQU1GLEVBQUEsVUFBQSxRQUFQLFVBQUEsQ0FDRSxNQUFPLE1BQUssT0FNUCxFQUFBLFVBQUEsa0JBQVAsVUFBQSxDQUNFLE1BQU8sTUFBSyxpQkFNUCxFQUFBLFVBQUEsa0JBQVAsU0FBeUIsRUFBK0IsQ0FDdEQsWUFBSyxnQkFBa0IsRUFDaEIsTUFNRixFQUFBLFVBQUEsUUFBUCxTQUFlLEVBQWtDLENBQy9DLFlBQUssTUFBSyxFQUFBLFNBQUEsRUFBQSxTQUFBLEdBQ0wsS0FBSyxPQUNMLEdBRUwsS0FBSyx3QkFDRSxNQU1GLEVBQUEsVUFBQSxPQUFQLFNBQWMsRUFBYSxFQUFnQixPQUN6QyxZQUFLLE1BQUssRUFBQSxTQUFBLEVBQUEsU0FBQSxHQUFRLEtBQUssT0FBSyxHQUFBLEdBQUEsRUFBRyxHQUFNLEVBQUssSUFDMUMsS0FBSyx3QkFDRSxNQU1GLEVBQUEsVUFBQSxVQUFQLFNBQWlCLEVBQWMsQ0FDN0IsWUFBSyxPQUFNLEVBQUEsU0FBQSxFQUFBLFNBQUEsR0FDTixLQUFLLFFBQ0wsR0FFTCxLQUFLLHdCQUNFLE1BTUYsRUFBQSxVQUFBLFNBQVAsU0FBZ0IsRUFBYSxFQUFZLE9BQ3ZDLFlBQUssT0FBTSxFQUFBLFNBQUEsRUFBQSxTQUFBLEdBQVEsS0FBSyxRQUFNLEdBQUEsR0FBQSxFQUFHLEdBQU0sRUFBSyxJQUM1QyxLQUFLLHdCQUNFLE1BTUYsRUFBQSxVQUFBLGVBQVAsU0FBc0IsRUFBcUIsQ0FDekMsWUFBSyxhQUFlLEVBQ3BCLEtBQUssd0JBQ0UsTUFNRixFQUFBLFVBQUEsU0FBUCxTQUFnQixFQUFlLENBQzdCLFlBQUssT0FBUyxFQUNkLEtBQUssd0JBQ0UsTUFNRixFQUFBLFVBQUEsbUJBQVAsU0FBMEIsRUFBYSxDQUNyQyxZQUFLLGlCQUFtQixFQUN4QixLQUFLLHdCQUNFLE1BT0YsRUFBQSxVQUFBLGVBQVAsU0FBc0IsRUFBYSxDQUNqQyxNQUFPLE1BQUssbUJBQW1CLElBTTFCLEVBQUEsVUFBQSxXQUFQLFNBQWtCLEVBQWEsRUFBdUIsT0FDcEQsTUFBSSxLQUFZLEtBRWQsTUFBTyxNQUFLLFVBQVUsR0FFdEIsS0FBSyxVQUFTLEVBQUEsU0FBQSxFQUFBLFNBQUEsR0FBUSxLQUFLLFdBQVMsR0FBQSxHQUFBLEVBQUcsR0FBTSxFQUFPLElBR3RELEtBQUssd0JBQ0UsTUFNRixFQUFBLFVBQUEsUUFBUCxTQUFlLEVBQVcsQ0FDeEIsWUFBSyxNQUFRLEVBQ2IsS0FBSyx3QkFDRSxNQU1GLEVBQUEsVUFBQSxRQUFQLFVBQUEsQ0FDRSxNQUFPLE1BQUssT0FNUCxFQUFBLFVBQUEsZUFBUCxVQUFBLGFBRVEsRUFBTyxLQUFLLFVBR2xCLEdBQUEsR0FBSSxLQUFJLE1BQUEsSUFBQSxPQUFBLE9BQUEsRUFBRSxZQUNSLE1BQUEsR0FBTyxLQUFJLE1BQUEsSUFBQSxPQUFBLE9BQUEsRUFBRSxZQUlmLEdBQUEsR0FBQSxHQUFJLEtBQUksTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUFFLGdCQUFZLE1BQUEsSUFBQSxPQUFBLE9BQUEsRUFBRSxNQUFNLEdBQzVCLE1BQU8sR0FBSyxhQUFhLE1BQU0sSUFVNUIsRUFBQSxVQUFBLFdBQVAsU0FBa0IsRUFBaUIsQ0FDakMsTUFBSyxHQUdILEtBQUssU0FBVyxFQUZoQixNQUFPLE1BQUssU0FJZCxLQUFLLHdCQUNFLE1BTUYsRUFBQSxVQUFBLFdBQVAsVUFBQSxDQUNFLE1BQU8sTUFBSyxVQU1QLEVBQUEsVUFBQSxPQUFQLFNBQWMsRUFBK0IsQ0FDM0MsR0FBSSxDQUFDLEVBQ0gsTUFBTyxNQUdULEdBQUksTUFBTyxJQUFtQixXQUFZLENBQ3hDLEdBQU0sR0FBZ0IsRUFBc0MsTUFDNUQsTUFBTyxhQUF3QixHQUFRLEVBQWUsS0FHeEQsTUFBSSxhQUEwQixHQUM1QixNQUFLLE1BQUssRUFBQSxTQUFBLEVBQUEsU0FBQSxHQUFRLEtBQUssT0FBVSxFQUFlLE9BQ2hELEtBQUssT0FBTSxFQUFBLFNBQUEsRUFBQSxTQUFBLEdBQVEsS0FBSyxRQUFXLEVBQWUsUUFDbEQsS0FBSyxVQUFTLEVBQUEsU0FBQSxFQUFBLFNBQUEsR0FBUSxLQUFLLFdBQWMsRUFBZSxXQUNwRCxFQUFlLE9BQVMsT0FBTyxLQUFLLEVBQWUsT0FBTyxRQUM1RCxNQUFLLE1BQVEsRUFBZSxPQUUxQixFQUFlLFFBQ2pCLE1BQUssT0FBUyxFQUFlLFFBRTNCLEVBQWUsY0FDakIsTUFBSyxhQUFlLEVBQWUsY0FFakMsRUFBZSxpQkFDakIsTUFBSyxnQkFBa0IsRUFBZSxrQkFFL0IsR0FBQSxjQUFjLElBRXZCLEdBQWlCLEVBQ2pCLEtBQUssTUFBSyxFQUFBLFNBQUEsRUFBQSxTQUFBLEdBQVEsS0FBSyxPQUFVLEVBQWUsTUFDaEQsS0FBSyxPQUFNLEVBQUEsU0FBQSxFQUFBLFNBQUEsR0FBUSxLQUFLLFFBQVcsRUFBZSxPQUNsRCxLQUFLLFVBQVMsRUFBQSxTQUFBLEVBQUEsU0FBQSxHQUFRLEtBQUssV0FBYyxFQUFlLFVBQ3BELEVBQWUsTUFDakIsTUFBSyxNQUFRLEVBQWUsTUFFMUIsRUFBZSxPQUNqQixNQUFLLE9BQVMsRUFBZSxPQUUzQixFQUFlLGFBQ2pCLE1BQUssYUFBZSxFQUFlLGFBRWpDLEVBQWUsZ0JBQ2pCLE1BQUssZ0JBQWtCLEVBQWUsaUJBSW5DLE1BTUYsRUFBQSxVQUFBLE1BQVAsVUFBQSxDQUNFLFlBQUssYUFBZSxHQUNwQixLQUFLLE1BQVEsR0FDYixLQUFLLE9BQVMsR0FDZCxLQUFLLE1BQVEsR0FDYixLQUFLLFVBQVksR0FDakIsS0FBSyxPQUFTLE9BQ2QsS0FBSyxpQkFBbUIsT0FDeEIsS0FBSyxhQUFlLE9BQ3BCLEtBQUssZ0JBQWtCLE9BQ3ZCLEtBQUssTUFBUSxPQUNiLEtBQUssU0FBVyxPQUNoQixLQUFLLHdCQUNFLE1BTUYsRUFBQSxVQUFBLGNBQVAsU0FBcUIsRUFBd0IsRUFBdUIsQ0FDbEUsR0FBTSxHQUFZLE1BQU8sSUFBbUIsU0FBVyxLQUFLLElBQUksRUFBZ0IsSUFBbUIsR0FHbkcsR0FBSSxHQUFhLEVBQ2YsTUFBTyxNQUdULEdBQU0sR0FBZ0IsRUFBQSxTQUFBLENBQ3BCLFVBQVcsR0FBQSwwQkFDUixHQUVMLFlBQUssYUFBZSxFQUFBLFNBQUksS0FBSyxhQUFZLENBQUUsSUFBa0IsTUFBTSxDQUFDLEdBQ3BFLEtBQUssd0JBRUUsTUFNRixFQUFBLFVBQUEsaUJBQVAsVUFBQSxDQUNFLFlBQUssYUFBZSxHQUNwQixLQUFLLHdCQUNFLE1BV0YsRUFBQSxVQUFBLGFBQVAsU0FBb0IsRUFBYyxFQUFnQixPQXNCaEQsR0FyQkksS0FBSyxRQUFVLE9BQU8sS0FBSyxLQUFLLFFBQVEsUUFDMUMsR0FBTSxNQUFLLEVBQUEsU0FBQSxFQUFBLFNBQUEsR0FBUSxLQUFLLFFBQVcsRUFBTSxRQUV2QyxLQUFLLE9BQVMsT0FBTyxLQUFLLEtBQUssT0FBTyxRQUN4QyxHQUFNLEtBQUksRUFBQSxTQUFBLEVBQUEsU0FBQSxHQUFRLEtBQUssT0FBVSxFQUFNLE9BRXJDLEtBQUssT0FBUyxPQUFPLEtBQUssS0FBSyxPQUFPLFFBQ3hDLEdBQU0sS0FBSSxFQUFBLFNBQUEsRUFBQSxTQUFBLEdBQVEsS0FBSyxPQUFVLEVBQU0sT0FFckMsS0FBSyxXQUFhLE9BQU8sS0FBSyxLQUFLLFdBQVcsUUFDaEQsR0FBTSxTQUFRLEVBQUEsU0FBQSxFQUFBLFNBQUEsR0FBUSxLQUFLLFdBQWMsRUFBTSxXQUU3QyxLQUFLLFFBQ1AsR0FBTSxNQUFRLEtBQUssUUFFakIsS0FBSyxrQkFDUCxHQUFNLFlBQWMsS0FBSyxrQkFLdkIsS0FBSyxNQUFPLENBQ2QsRUFBTSxTQUFRLEVBQUEsU0FBQSxDQUFLLE1BQU8sS0FBSyxNQUFNLG1CQUFzQixFQUFNLFVBQ2pFLEdBQU0sR0FBZSxHQUFHLEtBQUssTUFBTSxlQUFXLE1BQUEsSUFBQSxPQUFBLE9BQUEsRUFBRSxLQUNoRCxBQUFJLEdBQ0YsR0FBTSxLQUFJLEVBQUEsU0FBQSxDQUFLLFlBQWEsR0FBb0IsRUFBTSxPQUkxRCxZQUFLLGtCQUFrQixHQUV2QixFQUFNLFlBQVcsRUFBQSxTQUFRLEVBQU0sYUFBZSxHQUFRLEtBQUssY0FDM0QsRUFBTSxZQUFjLEVBQU0sWUFBWSxPQUFTLEVBQUksRUFBTSxZQUFjLE9BRWhFLEtBQUssdUJBQXNCLEVBQUEsU0FBSyxLQUErQixLQUFLLGtCQUFtQixFQUFPLElBTTdGLEVBQUEsVUFBQSx1QkFBVixTQUNFLEVBQ0EsRUFDQSxFQUNBLEVBQWlCLENBSm5CLEdBQUEsR0FBQSxLQUlFLE1BQUEsS0FBQSxRQUFBLEdBQUEsR0FFTyxHQUFJLElBQUEsWUFBMEIsU0FBQyxFQUFTLEVBQU0sQ0FDbkQsR0FBTSxHQUFZLEVBQVcsR0FDN0IsR0FBSSxJQUFVLE1BQVEsTUFBTyxJQUFjLFdBQ3pDLEVBQVEsT0FDSCxDQUNMLEdBQU0sR0FBUyxFQUFTLEVBQUEsU0FBQSxHQUFNLEdBQVMsR0FDdkMsQUFBSSxHQUFBLFdBQVcsR0FDUCxFQUNILEtBQUssU0FBQSxFQUFLLENBQUksTUFBQSxHQUFLLHVCQUF1QixFQUFZLEVBQU8sRUFBTSxFQUFRLEdBQUcsS0FBSyxLQUNuRixLQUFLLEtBQU0sR0FFVCxFQUFLLHVCQUF1QixFQUFZLEVBQVEsRUFBTSxFQUFRLEdBQ2hFLEtBQUssR0FDTCxLQUFLLEtBQU0sT0FTWixFQUFBLFVBQUEsc0JBQVYsVUFBQSxDQUFBLEdBQUEsR0FBQSxLQUlFLEFBQUssS0FBSyxxQkFDUixNQUFLLG9CQUFzQixHQUMzQixLQUFLLGdCQUFnQixRQUFRLFNBQUEsRUFBUSxDQUNuQyxFQUFTLEtBRVgsS0FBSyxvQkFBc0IsS0FRdkIsRUFBQSxVQUFBLGtCQUFSLFNBQTBCLEVBQVksQ0FFcEMsRUFBTSxZQUFjLEVBQU0sWUFDdEIsTUFBTSxRQUFRLEVBQU0sYUFDbEIsRUFBTSxZQUNOLENBQUMsRUFBTSxhQUNULEdBR0EsS0FBSyxjQUNQLEdBQU0sWUFBYyxFQUFNLFlBQVksT0FBTyxLQUFLLGVBSWhELEVBQU0sYUFBZSxDQUFDLEVBQU0sWUFBWSxRQUMxQyxNQUFPLEdBQU0sYUFHbkIsS0E5ZGEsR0FBQSxNQUFBLEdBbWViLGFBQWlDLENBRS9CLEdBQU0sR0FBUyxHQUFBLGtCQUNmLFNBQU8sV0FBYSxFQUFPLFlBQWMsR0FDekMsRUFBTyxXQUFXLHNCQUF3QixFQUFPLFdBQVcsdUJBQXlCLEdBQzlFLEVBQU8sV0FBVyxzQkFRM0IsWUFBd0MsRUFBd0IsQ0FDOUQsS0FBMkIsS0FBSyxHQURsQyxHQUFBLHdCQUFBLHFFQ2xoQkEsR0FBQSxJQUFBLElBQ0EsR0FBQSxJQUtBLEdBQUEsVUFBQSxDQWVFLFdBQW1CLEVBQW9ELENBYmhFLEtBQUEsT0FBaUIsRUFFakIsS0FBQSxJQUFjLEdBQUEsUUFJZCxLQUFBLFNBQW9CLEVBQ3BCLEtBQUEsT0FBd0IsR0FBQSxjQUFjLEdBR3RDLEtBQUEsS0FBZ0IsR0FDaEIsS0FBQSxlQUEwQixHQUkvQixHQUFNLEdBQWUsR0FBQSxxQkFDckIsS0FBSyxVQUFZLEVBQ2pCLEtBQUssUUFBVSxFQUNYLEdBQ0YsS0FBSyxPQUFPLEdBTVQsU0FBQSxVQUFBLE9BQVAsU0FBYyxFQUE0QixDQTRCeEMsR0E1QlksSUFBQSxRQUFBLEdBQUEsSUFDUixFQUFRLE1BQ04sRUFBQyxLQUFLLFdBQWEsRUFBUSxLQUFLLFlBQ2xDLE1BQUssVUFBWSxFQUFRLEtBQUssWUFHNUIsQ0FBQyxLQUFLLEtBQU8sQ0FBQyxFQUFRLEtBQ3hCLE1BQUssSUFBTSxFQUFRLEtBQUssSUFBTSxFQUFRLEtBQUssT0FBUyxFQUFRLEtBQUssV0FJckUsS0FBSyxVQUFZLEVBQVEsV0FBYSxHQUFBLHFCQUNsQyxFQUFRLGdCQUNWLE1BQUssZUFBaUIsRUFBUSxnQkFFNUIsRUFBUSxLQUVWLE1BQUssSUFBTSxFQUFRLElBQUksU0FBVyxHQUFLLEVBQVEsSUFBTSxHQUFBLFNBRW5ELEVBQVEsT0FBUyxRQUNuQixNQUFLLEtBQU8sRUFBUSxNQUVsQixDQUFDLEtBQUssS0FBTyxFQUFRLEtBQ3ZCLE1BQUssSUFBTSxHQUFHLEVBQVEsS0FFcEIsTUFBTyxHQUFRLFNBQVksVUFDN0IsTUFBSyxRQUFVLEVBQVEsU0FFckIsS0FBSyxlQUNQLEtBQUssU0FBVyxlQUNQLE1BQU8sR0FBUSxVQUFhLFNBQ3JDLEtBQUssU0FBVyxFQUFRLGFBQ25CLENBQ0wsR0FBTSxHQUFXLEtBQUssVUFBWSxLQUFLLFFBQ3ZDLEtBQUssU0FBVyxHQUFZLEVBQUksRUFBVyxFQUU3QyxBQUFJLEVBQVEsU0FDVixNQUFLLFFBQVUsRUFBUSxTQUVyQixFQUFRLGFBQ1YsTUFBSyxZQUFjLEVBQVEsYUFFekIsQ0FBQyxLQUFLLFdBQWEsRUFBUSxXQUM3QixNQUFLLFVBQVksRUFBUSxXQUV2QixDQUFDLEtBQUssV0FBYSxFQUFRLFdBQzdCLE1BQUssVUFBWSxFQUFRLFdBRXZCLE1BQU8sR0FBUSxRQUFXLFVBQzVCLE1BQUssT0FBUyxFQUFRLFFBRXBCLEVBQVEsUUFDVixNQUFLLE9BQVMsRUFBUSxTQUtuQixFQUFBLFVBQUEsTUFBUCxTQUFhLEVBQWlELENBQzVELEFBQUksRUFDRixLQUFLLE9BQU8sQ0FBRSxPQUFNLElBQ2YsQUFBSSxLQUFLLFNBQVcsR0FBQSxjQUFjLEdBQ3ZDLEtBQUssT0FBTyxDQUFFLE9BQVEsR0FBQSxjQUFjLFNBRXBDLEtBQUssVUFLRixFQUFBLFVBQUEsT0FBUCxVQUFBLENBZ0JFLE1BQU8sSUFBQSxrQkFBa0IsQ0FDdkIsSUFBSyxHQUFHLEtBQUssSUFDYixLQUFNLEtBQUssS0FFWCxRQUFTLEdBQUksTUFBSyxLQUFLLFFBQVUsS0FBTSxjQUN2QyxVQUFXLEdBQUksTUFBSyxLQUFLLFVBQVksS0FBTSxjQUMzQyxPQUFRLEtBQUssT0FDYixPQUFRLEtBQUssT0FDYixJQUFLLE1BQU8sTUFBSyxLQUFRLFVBQVksTUFBTyxNQUFLLEtBQVEsU0FBVyxHQUFHLEtBQUssSUFBUSxPQUNwRixTQUFVLEtBQUssU0FDZixNQUFPLEdBQUEsa0JBQWtCLENBQ3ZCLFFBQVMsS0FBSyxRQUNkLFlBQWEsS0FBSyxZQUNsQixXQUFZLEtBQUssVUFDakIsV0FBWSxLQUFLLGVBSXpCLEtBaklhLEdBQUEsUUFBQSw4RUNMYixHQUFBLElBc0JBLEdBQUEsSUFFQSxHQUFBLEtBQ0EsR0FBQSxLQVVhLEVBQUEsWUFBYyxFQU0zQixHQUFNLElBQXNCLElBOEM1QixHQUFBLFVBQUEsQ0FlRSxXQUFtQixFQUFpQixFQUE2QyxFQUE4QixDQUEzRSxBQUFBLElBQUEsUUFBQSxHQUFBLEdBQW1CLElBQUEsT0FBMEIsSUFBQSxRQUFBLEdBQW1CLEVBQUEsYUFBbkIsS0FBQSxTQUFBLEVBYmhFLEtBQUEsT0FBa0IsQ0FBQyxJQWNsQyxLQUFLLGNBQWMsTUFBUSxFQUN2QixHQUNGLEtBQUssV0FBVyxHQU9iLFNBQUEsVUFBQSxZQUFQLFNBQW1CLEVBQWUsQ0FDaEMsTUFBTyxNQUFLLFNBQVcsR0FNbEIsRUFBQSxVQUFBLFdBQVAsU0FBa0IsRUFBZSxDQUMvQixHQUFNLEdBQU0sS0FBSyxjQUNqQixFQUFJLE9BQVMsRUFDVCxHQUFVLEVBQU8sbUJBQ25CLEVBQU8scUJBT0osRUFBQSxVQUFBLFVBQVAsVUFBQSxDQUVFLEdBQU0sR0FBUSxHQUFBLE1BQU0sTUFBTSxLQUFLLFlBQy9CLFlBQUssV0FBVyxLQUFLLENBQ25CLE9BQVEsS0FBSyxZQUNiLE1BQUssSUFFQSxHQU1GLEVBQUEsVUFBQSxTQUFQLFVBQUEsQ0FDRSxNQUFJLE1BQUssV0FBVyxRQUFVLEVBQVUsR0FDakMsQ0FBQyxDQUFDLEtBQUssV0FBVyxPQU1wQixFQUFBLFVBQUEsVUFBUCxTQUFpQixFQUFnQyxDQUMvQyxHQUFNLEdBQVEsS0FBSyxZQUNuQixHQUFJLENBQ0YsRUFBUyxXQUVULEtBQUssYUFPRixFQUFBLFVBQUEsVUFBUCxVQUFBLENBQ0UsTUFBTyxNQUFLLGNBQWMsUUFJckIsRUFBQSxVQUFBLFNBQVAsVUFBQSxDQUNFLE1BQU8sTUFBSyxjQUFjLE9BSXJCLEVBQUEsVUFBQSxTQUFQLFVBQUEsQ0FDRSxNQUFPLE1BQUssUUFJUCxFQUFBLFVBQUEsWUFBUCxVQUFBLENBQ0UsTUFBTyxNQUFLLE9BQU8sS0FBSyxPQUFPLE9BQVMsSUFPbkMsRUFBQSxVQUFBLGlCQUFQLFNBQXdCLEVBQWdCLEVBQWdCLENBQ3RELEdBQU0sR0FBVyxLQUFLLGFBQWUsR0FBQSxRQUNqQyxFQUFZLEVBTWhCLEdBQUksQ0FBQyxFQUFNLENBQ1QsR0FBSSxHQUFrQixPQUN0QixHQUFJLENBQ0YsS0FBTSxJQUFJLE9BQU0sbUNBQ1QsRUFBUCxDQUNBLEVBQXFCLEVBRXZCLEVBQVksQ0FDVixrQkFBbUIsRUFDbkIsbUJBQWtCLEdBSXRCLFlBQUssY0FBYyxtQkFBb0IsRUFBUyxHQUFBLFNBQUEsR0FBQSxTQUFBLEdBQzNDLEdBQVMsQ0FDWixTQUFVLEtBRUwsR0FNRixFQUFBLFVBQUEsZUFBUCxTQUFzQixFQUFpQixFQUFrQixFQUFnQixDQUN2RSxHQUFNLEdBQVcsS0FBSyxhQUFlLEdBQUEsUUFDakMsRUFBWSxFQU1oQixHQUFJLENBQUMsRUFBTSxDQUNULEdBQUksR0FBa0IsT0FDdEIsR0FBSSxDQUNGLEtBQU0sSUFBSSxPQUFNLFNBQ1QsRUFBUCxDQUNBLEVBQXFCLEVBRXZCLEVBQVksQ0FDVixrQkFBbUIsRUFDbkIsbUJBQWtCLEdBSXRCLFlBQUssY0FBYyxpQkFBa0IsRUFBUyxFQUFLLEdBQUEsU0FBQSxHQUFBLFNBQUEsR0FDOUMsR0FBUyxDQUNaLFNBQVUsS0FFTCxHQU1GLEVBQUEsVUFBQSxhQUFQLFNBQW9CLEVBQWMsRUFBZ0IsQ0FDaEQsR0FBTSxHQUFVLEdBQUEsUUFDaEIsTUFBSSxHQUFNLE9BQVMsZUFDakIsTUFBSyxhQUFlLEdBR3RCLEtBQUssY0FBYyxlQUFnQixFQUFLLEdBQUEsU0FBQSxHQUFBLFNBQUEsR0FDbkMsR0FBSSxDQUNQLFNBQVUsS0FFTCxHQU1GLEVBQUEsVUFBQSxZQUFQLFVBQUEsQ0FDRSxNQUFPLE1BQUssY0FNUCxFQUFBLFVBQUEsY0FBUCxTQUFxQixFQUF3QixFQUFxQixDQUMxRCxHQUFBLEdBQUEsS0FBQSxjQUFFLEVBQUEsRUFBQSxNQUFPLEVBQUEsRUFBQSxPQUVmLEdBQUksR0FBQyxHQUFTLENBQUMsR0FHVCxJQUFBLEdBQUEsRUFBQSxZQUFBLEVBQUEsY0FBQSxHQUFFLEVBQUEsRUFBQSxpQkFBQSxFQUFBLElBQUEsT0FBQSxLQUFBLEVBQXlCLEVBQUEsRUFBQSxlQUFBLEVBQUEsSUFBQSxPQUFBLEdBQUEsRUFHakMsR0FBSSxLQUFrQixHQUV0QixJQUFNLEdBQVksR0FBQSx5QkFDWixFQUFnQixHQUFBLFNBQUEsQ0FBSyxVQUFTLEdBQUssR0FDbkMsRUFBa0IsRUFDbkIsR0FBQSxlQUFlLFVBQUEsQ0FBTSxNQUFBLEdBQWlCLEVBQWtCLEtBQ3pELEVBRUosQUFBSSxJQUFvQixNQUV4QixFQUFNLGNBQWMsRUFBaUIsTUFNaEMsRUFBQSxVQUFBLFFBQVAsU0FBZSxFQUFpQixDQUM5QixHQUFNLEdBQVEsS0FBSyxXQUNuQixBQUFJLEdBQU8sRUFBTSxRQUFRLElBTXBCLEVBQUEsVUFBQSxRQUFQLFNBQWUsRUFBa0MsQ0FDL0MsR0FBTSxHQUFRLEtBQUssV0FDbkIsQUFBSSxHQUFPLEVBQU0sUUFBUSxJQU1wQixFQUFBLFVBQUEsVUFBUCxTQUFpQixFQUFjLENBQzdCLEdBQU0sR0FBUSxLQUFLLFdBQ25CLEFBQUksR0FBTyxFQUFNLFVBQVUsSUFNdEIsRUFBQSxVQUFBLE9BQVAsU0FBYyxFQUFhLEVBQWdCLENBQ3pDLEdBQU0sR0FBUSxLQUFLLFdBQ25CLEFBQUksR0FBTyxFQUFNLE9BQU8sRUFBSyxJQU14QixFQUFBLFVBQUEsU0FBUCxTQUFnQixFQUFhLEVBQVksQ0FDdkMsR0FBTSxHQUFRLEtBQUssV0FDbkIsQUFBSSxHQUFPLEVBQU0sU0FBUyxFQUFLLElBTzFCLEVBQUEsVUFBQSxXQUFQLFNBQWtCLEVBQWMsRUFBc0MsQ0FDcEUsR0FBTSxHQUFRLEtBQUssV0FDbkIsQUFBSSxHQUFPLEVBQU0sV0FBVyxFQUFNLElBTTdCLEVBQUEsVUFBQSxlQUFQLFNBQXNCLEVBQWdDLENBQzlDLEdBQUEsR0FBQSxLQUFBLGNBQUUsRUFBQSxFQUFBLE1BQU8sRUFBQSxFQUFBLE9BQ2YsQUFBSSxHQUFTLEdBQ1gsRUFBUyxJQU9OLEVBQUEsVUFBQSxJQUFQLFNBQVcsRUFBNEIsQ0FDckMsR0FBTSxHQUFTLEdBQVMsTUFDeEIsR0FBSSxDQUNGLEVBQVMsY0FFVCxHQUFTLEtBT04sRUFBQSxVQUFBLGVBQVAsU0FBNkMsRUFBZ0MsQ0FDM0UsR0FBTSxHQUFTLEtBQUssWUFDcEIsR0FBSSxDQUFDLEVBQVEsTUFBTyxNQUNwQixHQUFJLENBQ0YsTUFBTyxHQUFPLGVBQWUsUUFDN0IsQ0FDQSxVQUFBLE9BQU8sS0FBSywrQkFBK0IsRUFBWSxHQUFFLHlCQUNsRCxPQU9KLEVBQUEsVUFBQSxVQUFQLFNBQWlCLEVBQW9CLENBQ25DLE1BQU8sTUFBSyxxQkFBcUIsWUFBYSxJQU16QyxFQUFBLFVBQUEsaUJBQVAsU0FBd0IsRUFBNkIsRUFBNkMsQ0FDaEcsTUFBTyxNQUFLLHFCQUFxQixtQkFBb0IsRUFBUyxJQU16RCxFQUFBLFVBQUEsYUFBUCxVQUFBLENBQ0UsTUFBTyxNQUFLLHFCQUFnRCxpQkFNdkQsRUFBQSxVQUFBLGVBQVAsU0FBc0IsRUFBMkIsQ0FFL0MsR0FGb0IsSUFBQSxRQUFBLEdBQUEsSUFFaEIsRUFDRixNQUFPLE1BQUssYUFJZCxLQUFLLHNCQU1BLEVBQUEsVUFBQSxXQUFQLFVBQUEsZUFDRSxBQUFBLEdBQUEsR0FBQSxHQUFBLEtBQUssaUJBQWEsTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUNkLFNBQUssTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUFFLGdCQUFVLE1BQUEsSUFBQSxRQUFBLEVBQ2pCLFFBQ0osS0FBSyxxQkFHTCxHQUFBLEdBQUEsS0FBSyxpQkFBYSxNQUFBLElBQUEsT0FBQSxPQUFBLEVBQUUsU0FBSyxNQUFBLElBQUEsUUFBQSxFQUFFLGNBTXRCLEVBQUEsVUFBQSxhQUFQLFNBQW9CLEVBQXdCLENBQ3BDLEdBQUEsR0FBQSxLQUFBLGNBQUUsRUFBQSxFQUFBLE1BQU8sRUFBQSxFQUFBLE9BQ1QsRUFBQSxHQUFBLEVBQUEsY0FBQSxHQUFFLEVBQUEsRUFBQSxRQUFTLEVBQUEsRUFBQSxZQUdYLEVBQVMsR0FBQSxrQkFDUCxFQUFBLEdBQUEsV0FBQSxJQUFBLFVBRUYsRUFBVSxHQUFJLElBQUEsUUFBTyxHQUFBLFNBQUEsR0FBQSxTQUFBLEdBQUEsU0FBQSxDQUN6QixRQUFPLEVBQ1AsWUFBVyxHQUNQLEdBQVMsQ0FBRSxLQUFNLEVBQU0sWUFDdkIsR0FBYSxDQUFFLFVBQVMsSUFDekIsSUFHTCxHQUFJLEVBQU8sQ0FFVCxHQUFNLEdBQWlCLEVBQU0sWUFBYyxFQUFNLGFBQ2pELEFBQUksR0FBa0IsRUFBZSxTQUFXLEdBQUEsY0FBYyxJQUM1RCxFQUFlLE9BQU8sQ0FBRSxPQUFRLEdBQUEsY0FBYyxTQUVoRCxLQUFLLGFBR0wsRUFBTSxXQUFXLEdBR25CLE1BQU8sSUFNRCxFQUFBLFVBQUEsbUJBQVIsVUFBQSxDQUNRLEdBQUEsR0FBQSxLQUFBLGNBQUUsRUFBQSxFQUFBLE1BQU8sRUFBQSxFQUFBLE9BQ2YsR0FBSSxFQUFDLEVBRUwsSUFBTSxHQUFVLEVBQU0sWUFBYyxFQUFNLGFBQzFDLEFBQUksR0FDRSxHQUFVLEVBQU8sZ0JBQ25CLEVBQU8sZUFBZSxLQVlwQixFQUFBLFVBQUEsY0FBUixTQUE4QyxFQUFTLFdBQUUsRUFBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLFVBQUEsT0FBQSxJQUFBLEVBQUEsRUFBQSxHQUFBLFVBQUEsR0FDakQsR0FBQSxHQUFBLEtBQUEsY0FBRSxFQUFBLEVBQUEsTUFBTyxFQUFBLEVBQUEsT0FDZixBQUFJLEdBQVUsRUFBTyxJQUVuQixHQUFDLEdBQWUsR0FBTyxNQUFBLEVBQUEsR0FBQSxTQUFJLEVBQUksQ0FBRSxNQVM3QixFQUFBLFVBQUEscUJBQVIsU0FBZ0MsRUFBYyxRQUFFLEdBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxVQUFBLE9BQUEsSUFBQSxFQUFBLEVBQUEsR0FBQSxVQUFBLEdBQzlDLEdBQU0sR0FBVSxLQUNWLEVBQVMsRUFBUSxXQUN2QixHQUFJLEdBQVUsRUFBTyxZQUFjLE1BQU8sR0FBTyxXQUFXLElBQVksV0FDdEUsTUFBTyxHQUFPLFdBQVcsR0FBUSxNQUFNLEtBQU0sR0FFL0MsR0FBQSxPQUFPLEtBQUssb0JBQW9CLEVBQU0sdUNBRTFDLEtBL1phLEVBQUEsSUFBQSxHQXdhYixhQUE4QixDQUM1QixHQUFNLEdBQVUsR0FBQSxrQkFDaEIsU0FBUSxXQUFhLEVBQVEsWUFBYyxDQUN6QyxXQUFZLEdBQ1osSUFBSyxRQUVBLEVBTlQsRUFBQSxlQUFBLEdBY0EsWUFBeUIsRUFBUSxDQUMvQixHQUFNLEdBQVcsS0FDWCxFQUFTLEdBQWtCLEdBQ2pDLFVBQWdCLEVBQVUsR0FDbkIsRUFKVCxFQUFBLFNBQUEsR0FjQSxhQUE2QixDQUUzQixHQUFNLEdBQVcsS0FRakIsTUFMSSxFQUFDLEdBQWdCLElBQWEsR0FBa0IsR0FBVSxZQUFZLEVBQUEsZUFDeEUsR0FBZ0IsRUFBVSxHQUFJLEtBSTVCLEdBQUEsWUFDSyxHQUF1QixHQUd6QixHQUFrQixHQWQzQixFQUFBLGNBQUEsR0F1QkEsYUFBK0IsQ0FDN0IsR0FBQSxPQUFPLEtBQUsscUZBRVosR0FBTSxHQUFTLEtBQWlCLFdBRWhDLE1BQU8sSUFBVSxFQUFPLFlBQWMsRUFBTyxXQUFXLFFBQVUsRUFBTyxXQUFXLE9BQU8sT0FMN0YsRUFBQSxnQkFBQSxHQVlBLFlBQWdDLEVBQWlCLFdBQy9DLEdBQUksQ0FDRixHQUFNLEdBQVksR0FBQSxHQUFBLEdBQUcsS0FBaUIsY0FBVSxNQUFBLElBQUEsT0FBQSxPQUFBLEVBQUUsY0FBVSxNQUFBLElBQUEsT0FBQSxPQUFBLEVBQUUsVUFBTSxNQUFBLElBQUEsT0FBQSxPQUFBLEVBQUUsT0FHdEUsR0FBSSxDQUFDLEVBQ0gsTUFBTyxJQUFrQixHQUkzQixHQUFJLENBQUMsR0FBZ0IsSUFBaUIsR0FBa0IsR0FBYyxZQUFZLEVBQUEsYUFBYyxDQUM5RixHQUFNLEdBQXNCLEdBQWtCLEdBQVUsY0FDeEQsR0FBZ0IsRUFBYyxHQUFJLElBQUksRUFBb0IsT0FBUSxHQUFBLE1BQU0sTUFBTSxFQUFvQixTQUlwRyxNQUFPLElBQWtCLFFBQ3pCLENBRUEsTUFBTyxJQUFrQixJQVE3QixZQUF5QixFQUFnQixDQUN2QyxNQUFPLENBQUMsQ0FBRSxJQUFXLEVBQVEsWUFBYyxFQUFRLFdBQVcsS0FTaEUsWUFBa0MsRUFBZ0IsQ0FDaEQsTUFBSSxJQUFXLEVBQVEsWUFBYyxFQUFRLFdBQVcsS0FDeEQsR0FBUSxXQUFhLEVBQVEsWUFBYyxHQUMzQyxFQUFRLFdBQVcsSUFBTSxHQUFJLEtBQ3RCLEVBQVEsV0FBVyxJQUo1QixFQUFBLGtCQUFBLEdBYUEsWUFBZ0MsRUFBa0IsRUFBUSxDQUN4RCxNQUFLLEdBQ0wsR0FBUSxXQUFhLEVBQVEsWUFBYyxHQUMzQyxFQUFRLFdBQVcsSUFBTSxFQUNsQixJQUhjLEdBRHZCLEVBQUEsZ0JBQUEscUVDam5CQSxHQUFBLElBQUEsSUFPQSxHQUFBLElBRUEsR0FBQSxLQVVBLEdBQUEsVUFBQSxDQVFFLFdBQW1CLEVBQXNCLEVBQThCLENBQXZFLEdBQUEsR0FBQSxLQVBnQixLQUFBLGFBQXVCLEdBQy9CLEtBQUEsbUJBQXdELEdBR3hELEtBQUEsV0FBc0IsR0FJNUIsS0FBSyxXQUFhLEVBRWxCLEtBQUssWUFBYyxZQUFZLFVBQUEsQ0FBTSxNQUFBLEdBQUssU0FBUyxLQUFLLGFBQWUsS0FDdkUsS0FBSyxjQUFnQixFQUloQixTQUFBLFVBQUEsc0JBQVAsU0FBNkIsRUFBb0MsQ0FDL0QsR0FBSSxDQUFDLEtBQUssV0FBVyxZQUFhLENBQ2hDLEdBQUEsT0FBTyxLQUFLLDJFQUNaLE9BRUYsQUFBSyxLQUFLLFdBQVcsWUFBWSxHQUFtQixLQUFLLEtBQU0sU0FBQSxFQUFNLENBQ25FLEdBQUEsT0FBTyxNQUFNLGdDQUFnQyxNQUsxQyxFQUFBLFVBQUEsTUFBUCxVQUFBLENBQ0UsR0FBTSxHQUFvQixLQUFLLHVCQUMvQixBQUFJLEVBQWtCLFdBQVcsU0FBVyxHQUc1QyxNQUFLLG1CQUFxQixHQUMxQixLQUFLLHNCQUFzQixLQUl0QixFQUFBLFVBQUEscUJBQVAsVUFBQSxDQUFBLEdBQUEsR0FBQSxLQUNRLEVBQWtDLE9BQU8sS0FBSyxLQUFLLG9CQUFvQixJQUFJLFNBQUMsRUFBVyxDQUMzRixNQUFPLEdBQUssbUJBQW1CLFNBQVMsTUFHcEMsRUFBdUMsQ0FDM0MsTUFBTyxLQUFLLGNBQ1osV0FBVSxHQUVaLE1BQU8sSUFBQSxrQkFBa0IsSUFJcEIsRUFBQSxVQUFBLE1BQVAsVUFBQSxDQUNFLGNBQWMsS0FBSyxhQUNuQixLQUFLLFdBQWEsR0FDbEIsS0FBSyxTQVFBLEVBQUEsVUFBQSw0QkFBUCxVQUFBLFNBQ0UsR0FBSSxFQUFDLEtBQUssV0FHVixJQUFNLEdBQVEsR0FBQSxnQkFBZ0IsV0FDeEIsRUFBYyxHQUFHLEtBQUssTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUFFLG9CQUU5QixBQUFJLEdBQWtCLEVBQWUsUUFDbkMsTUFBSyw2QkFBNkIsRUFBZSxPQUFRLEdBQUksT0FHN0QsR0FBQSxLQUFLLE1BQUEsSUFBQSxRQUFBLEVBQUUsa0JBQWtCLFdBVXJCLEVBQUEsVUFBQSw2QkFBUixTQUFxQyxFQUE4QixFQUFVLENBRTNFLEdBQU0sR0FBc0IsR0FBSSxNQUFLLEdBQU0sV0FBVyxFQUFHLEdBQ3pELEtBQUssbUJBQW1CLEdBQXVCLEtBQUssbUJBQW1CLElBQXdCLEdBSS9GLEdBQU0sR0FBdUMsS0FBSyxtQkFBbUIsR0FLckUsT0FKSyxFQUFrQixTQUNyQixHQUFrQixRQUFVLEdBQUksTUFBSyxHQUFxQixlQUdwRCxPQUNELElBQUEscUJBQXFCLFFBQ3hCLFNBQWtCLFFBQVcsR0FBa0IsU0FBVyxHQUFLLEVBQ3hELEVBQWtCLFlBQ3RCLElBQUEscUJBQXFCLEdBQ3hCLFNBQWtCLE9BQVUsR0FBa0IsUUFBVSxHQUFLLEVBQ3RELEVBQWtCLFdBQ3RCLElBQUEscUJBQXFCLFFBQ3hCLFNBQWtCLFFBQVcsR0FBa0IsU0FBVyxHQUFLLEVBQ3hELEVBQWtCLFVBR2pDLEtBMUdhLEdBQUEsZUFBQSxrRUNuQmIsR0FBQSxJQUFBLEtBQVMsRUFBQSx3QkFBQSxHQUFBLHdCQUF5QixFQUFBLE1BQUEsR0FBQSxNQUNsQyxHQUFBLElBQUEsS0FBUyxFQUFBLFFBQUEsR0FBQSxRQUNULEdBQUEsSUFBQSxLQUFTLEVBQUEsZUFBQSxHQUFBLGVBQ1QsR0FBQSxJQUFBLEtBRUUsRUFBQSxnQkFBQSxHQUFBLGdCQUNBLEVBQUEsY0FBQSxHQUFBLGNBQ0EsRUFBQSxrQkFBQSxHQUFBLGtCQUNBLEVBQUEsZUFBQSxHQUFBLGVBQ0EsRUFBQSxJQUFBLEdBQUEsSUFDQSxFQUFBLFNBQUEsR0FBQSxTQUNBLEVBQUEsZ0JBQUEsR0FBQSwyRkNYRixHQUFBLElBcUJBLFdBQXNCLEVBQWMsUUFBRSxHQUFBLEdBQUEsRUFBQSxFQUFBLEVBQUEsVUFBQSxPQUFBLElBQUEsRUFBQSxFQUFBLEdBQUEsVUFBQSxHQUNwQyxHQUFNLEdBQU0sR0FBQSxnQkFDWixHQUFJLEdBQU8sRUFBSSxHQUViLE1BQVEsR0FBSSxHQUFvQixNQUF4QixFQUFHLEdBQUEsU0FBaUMsSUFFOUMsS0FBTSxJQUFJLE9BQU0scUJBQXFCLEVBQU0sd0RBVTdDLFlBQWlDLEVBQWdCLEVBQStCLENBQzlFLEdBQUksR0FDSixHQUFJLENBQ0YsS0FBTSxJQUFJLE9BQU0sbUNBQ1QsRUFBUCxDQUNBLEVBQXFCLEVBRXZCLE1BQU8sR0FBVSxtQkFBb0IsRUFBVyxDQUM5QyxlQUFjLEVBQ2Qsa0JBQW1CLEVBQ25CLG1CQUFrQixJQVZ0QixFQUFBLGlCQUFBLEdBcUJBLFlBQStCLEVBQWlCLEVBQTBDLENBQ3hGLEdBQUksR0FDSixHQUFJLENBQ0YsS0FBTSxJQUFJLE9BQU0sU0FDVCxFQUFQLENBQ0EsRUFBcUIsRUFLdkIsR0FBTSxHQUFRLE1BQU8sSUFBbUIsU0FBVyxFQUFpQixPQUM5RCxFQUFVLE1BQU8sSUFBbUIsU0FBVyxDQUFFLGVBQWMsR0FBSyxPQUUxRSxNQUFPLEdBQVUsaUJBQWtCLEVBQVMsRUFBSyxHQUFBLFNBQUEsQ0FDL0Msa0JBQW1CLEVBQ25CLG1CQUFrQixHQUNmLElBaEJQLEVBQUEsZUFBQSxHQTBCQSxZQUE2QixFQUFZLENBQ3ZDLE1BQU8sR0FBVSxlQUFnQixHQURuQyxFQUFBLGFBQUEsR0FRQSxZQUErQixFQUFnQyxDQUM3RCxFQUFnQixpQkFBa0IsR0FEcEMsRUFBQSxlQUFBLEdBWUEsWUFBOEIsRUFBc0IsQ0FDbEQsRUFBZ0IsZ0JBQWlCLEdBRG5DLEVBQUEsY0FBQSxHQVVBLFlBQTJCLEVBQWMsRUFBc0MsQ0FDN0UsRUFBZ0IsYUFBYyxFQUFNLEdBRHRDLEVBQUEsV0FBQSxHQVFBLFlBQTBCLEVBQWMsQ0FDdEMsRUFBZ0IsWUFBYSxHQUQvQixFQUFBLFVBQUEsR0FRQSxZQUF3QixFQUFrQyxDQUN4RCxFQUFnQixVQUFXLEdBRDdCLEVBQUEsUUFBQSxHQVNBLFlBQXlCLEVBQWEsRUFBWSxDQUNoRCxFQUFnQixXQUFZLEVBQUssR0FEbkMsRUFBQSxTQUFBLEdBWUEsWUFBdUIsRUFBYSxFQUFnQixDQUNsRCxFQUFnQixTQUFVLEVBQUssR0FEakMsRUFBQSxPQUFBLEdBU0EsWUFBd0IsRUFBaUIsQ0FDdkMsRUFBZ0IsVUFBVyxHQUQ3QixFQUFBLFFBQUEsR0FpQkEsWUFBMEIsRUFBZ0MsQ0FDeEQsRUFBZ0IsWUFBYSxHQUQvQixFQUFBLFVBQUEsR0FlQSxZQUE4QixFQUFjLFFBQUUsR0FBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLFVBQUEsT0FBQSxJQUFBLEVBQUEsRUFBQSxHQUFBLFVBQUEsR0FDNUMsRUFBUyxNQUFBLE9BQUEsR0FBQSxTQUFBLENBQU8sZ0JBQWlCLEdBQVcsSUFEOUMsRUFBQSxjQUFBLEdBcUJBLFlBQ0UsRUFDQSxFQUE2QyxDQUU3QyxNQUFPLEdBQVUsbUJBQWtCLEdBQUEsU0FBQSxHQUFPLEdBQVcsR0FKdkQsRUFBQSxpQkFBQSxxRUNwTkEsR0FBQSxJQUFBLElBRU0sR0FBcUIsSUFPM0IsR0FBQSxVQUFBLENBY0UsV0FBbUIsRUFBYyxFQUE0QixFQUFlLENBQTNDLEFBQUEsSUFBQSxRQUFBLEdBQUEsSUFDL0IsS0FBSyxJQUFNLEVBQ1gsS0FBSyxXQUFhLEdBQUksSUFBQSxJQUFJLEdBQzFCLEtBQUssU0FBVyxFQUNoQixLQUFLLFFBQVUsRUFJVixTQUFBLFVBQUEsT0FBUCxVQUFBLENBQ0UsTUFBTyxNQUFLLFlBSVAsRUFBQSxVQUFBLGNBQVAsVUFBQSxDQUNFLE1BQU8sQ0FBQyxDQUFDLEtBQUssU0FJVCxFQUFBLFVBQUEsbUJBQVAsVUFBQSxDQUNFLEdBQU0sR0FBTSxLQUFLLFNBQ1gsRUFBVyxFQUFJLFNBQWMsRUFBSSxTQUFRLElBQU0sR0FDL0MsRUFBTyxFQUFJLEtBQU8sSUFBSSxFQUFJLEtBQVMsR0FDekMsTUFBVSxHQUFRLEtBQUssRUFBSSxLQUFPLEVBQU8sR0FBSSxLQUFPLElBQUksRUFBSSxLQUFTLElBQUUsU0FJbEUsRUFBQSxVQUFBLGlCQUFQLFVBQUEsQ0FDRSxNQUFPLE1BQUssbUJBQW1CLFVBUTFCLEVBQUEsVUFBQSxtQ0FBUCxVQUFBLENBQ0UsTUFBVSxNQUFLLG1CQUFrQixJQUFJLEtBQUssZ0JBUXJDLEVBQUEsVUFBQSxzQ0FBUCxVQUFBLENBQ0UsTUFBSSxNQUFLLGdCQUNBLEtBQUssUUFHSixLQUFLLHVCQUFzQixJQUFJLEtBQUssZ0JBSXpDLEVBQUEsVUFBQSxxQkFBUCxVQUFBLENBQ0UsR0FBTSxHQUFNLEtBQUssU0FDakIsTUFBVSxHQUFJLEtBQU8sSUFBSSxFQUFJLEtBQVMsSUFBRSxRQUFRLEVBQUksVUFBUyxXQU94RCxFQUFBLFVBQUEsa0JBQVAsU0FBeUIsRUFBb0IsRUFBcUIsQ0FFaEUsR0FBTSxHQUFNLEtBQUssU0FDWCxFQUFTLENBQUMseUJBQXlCLElBQ3pDLFNBQU8sS0FBSyxpQkFBaUIsRUFBVSxJQUFJLEdBQzNDLEVBQU8sS0FBSyxjQUFjLEVBQUksV0FDMUIsRUFBSSxNQUNOLEVBQU8sS0FBSyxpQkFBaUIsRUFBSSxNQUU1QixDQUNMLGVBQWdCLG1CQUNoQixnQkFBaUIsRUFBTyxLQUFLLFFBSzFCLEVBQUEsVUFBQSx3QkFBUCxTQUNFLEVBSU0sQ0FKTixBQUFBLElBQUEsUUFBQSxHQUFBLElBTUEsR0FBTSxHQUFNLEtBQUssU0FDWCxFQUFjLEtBQUsscUJBQW9CLG9CQUV2QyxFQUFpQixHQUN2QixFQUFlLEtBQUssT0FBTyxFQUFJLFlBQy9CLE9BQVcsS0FBTyxHQUNoQixHQUFJLElBQVEsTUFJWixHQUFJLElBQVEsT0FBUSxDQUNsQixHQUFJLENBQUMsRUFBYyxLQUNqQixTQUVGLEFBQUksRUFBYyxLQUFLLE1BQ3JCLEVBQWUsS0FBSyxRQUFRLG1CQUFtQixFQUFjLEtBQUssT0FFaEUsRUFBYyxLQUFLLE9BQ3JCLEVBQWUsS0FBSyxTQUFTLG1CQUFtQixFQUFjLEtBQUssWUFHckUsR0FBZSxLQUFRLG1CQUFtQixHQUFJLElBQUksbUJBQW1CLEVBQWMsS0FHdkYsTUFBSSxHQUFlLE9BQ1AsRUFBUSxJQUFJLEVBQWUsS0FBSyxLQUdyQyxHQUlELEVBQUEsVUFBQSxxQkFBUixVQUFBLENBQ0UsTUFBTyxNQUFLLG1CQUFtQixhQUl6QixFQUFBLFVBQUEsbUJBQVIsU0FBMkIsRUFBNEIsQ0FDckQsR0FBSSxLQUFLLFFBQ1AsTUFBTyxNQUFLLFFBRWQsR0FBTSxHQUFPLEtBQUsscUJBQ1osRUFBTSxLQUFLLFNBQ2pCLE1BQU8sR0FBRyxFQUFPLEVBQUksVUFBUyxJQUFJLEVBQU0sS0FJbEMsRUFBQSxVQUFBLGFBQVIsVUFBQSxDQUNFLEdBQU0sR0FBTSxLQUFLLFNBQ1gsRUFBTyxDQUdYLFdBQVksRUFBSSxVQUNoQixlQUFnQixJQUVsQixNQUFPLElBQUEsVUFBVSxJQUVyQixLQTVKYSxHQUFBLElBQUEsZ0ZDVmIsR0FBQSxJQUVBLEdBQUEsSUFFYSxHQUFBLHNCQUFrQyxHQVUvQyxZQUEwQixFQUEyQixDQUNuRCxNQUFPLEdBQWEsT0FBTyxTQUFDLEVBQUssRUFBWSxDQUMzQyxNQUFJLEdBQUksTUFBTSxTQUFBLEVBQWMsQ0FBSSxNQUFBLEdBQWEsT0FBUyxFQUFlLFFBQ25FLEVBQUksS0FBSyxHQUVKLEdBQ04sSUFJTCxZQUF1QyxFQUFnQixDQUNyRCxHQUFNLEdBQXVCLEVBQVEscUJBQW1CLEdBQUEsU0FBUSxFQUFRLHNCQUF5QixHQUMzRixFQUFtQixFQUFRLGFBRTdCLEVBQVksR0FBQSxTQUFzQixHQUFpQixJQUV2RCxBQUFJLE1BQU0sUUFBUSxHQUVoQixFQUFZLEdBQUEsU0FDUCxFQUFhLE9BQU8sU0FBQSxFQUFZLENBQ2pDLE1BQUEsR0FBaUIsTUFBTSxTQUFBLEVBQWUsQ0FBSSxNQUFBLEdBQWdCLE9BQVMsRUFBYSxTQUcvRSxHQUFpQixJQUViLE1BQU8sSUFBcUIsWUFDckMsR0FBZSxFQUFpQixHQUNoQyxFQUFlLE1BQU0sUUFBUSxHQUFnQixFQUFlLENBQUMsSUFJL0QsR0FBTSxHQUFvQixFQUFhLElBQUksU0FBQSxFQUFDLENBQUksTUFBQSxHQUFFLE9BQzVDLEVBQWtCLFFBQ3hCLE1BQUksR0FBa0IsUUFBUSxLQUFxQixJQUNqRCxFQUFhLEtBQUksTUFBakIsRUFBWSxHQUFBLFNBQVMsRUFBYSxPQUFPLEVBQWtCLFFBQVEsR0FBa0IsS0FHaEYsRUEzQlQsR0FBQSx1QkFBQSxHQStCQSxZQUFpQyxFQUF3QixDQUN2RCxBQUFJLEdBQUEsc0JBQXNCLFFBQVEsRUFBWSxRQUFVLElBR3hELEdBQVksVUFBVSxHQUFBLHdCQUF5QixHQUFBLGVBQy9DLEdBQUEsc0JBQXNCLEtBQUssRUFBWSxNQUN2QyxHQUFBLE9BQU8sSUFBSSwwQkFBMEIsRUFBWSxPQU5uRCxHQUFBLGlCQUFBLEdBZUEsWUFBcUQsRUFBVSxDQUM3RCxHQUFNLEdBQWlDLEdBQ3ZDLFVBQXVCLEdBQVMsUUFBUSxTQUFBLEVBQVcsQ0FDakQsRUFBYSxFQUFZLE1BQVEsRUFDakMsR0FBaUIsS0FLbkIsT0FBTyxlQUFlLEVBQWMsY0FBZSxDQUFFLE1BQU8sS0FDckQsRUFWVCxHQUFBLGtCQUFBLCtFQ3JFQSxHQUFBLElBQ0EsR0FBQSxJQVlBLEVBQUEsSUFnQkEsR0FBQSxLQUVNLEdBQXFCLDhEQWtDM0IsR0FBQSxVQUFBLENBMEJFLFdBQXNCLEVBQWtDLEVBQVUsQ0FYeEQsS0FBQSxjQUFrQyxHQUdsQyxLQUFBLGVBQXlCLEVBU2pDLEtBQUssU0FBVyxHQUFJLEdBQWEsR0FDakMsS0FBSyxTQUFXLEVBRVosRUFBUSxLQUNWLE1BQUssS0FBTyxHQUFJLEdBQUEsSUFBSSxFQUFRLE1BUXpCLFNBQUEsVUFBQSxpQkFBUCxTQUF3QixFQUFnQixFQUFrQixFQUFhLENBQXZFLEdBQUEsR0FBQSxLQUVFLEdBQUksRUFBQSx3QkFBd0IsR0FBWSxDQUN0QyxFQUFBLE9BQU8sSUFBSSxJQUNYLE9BR0YsR0FBSSxHQUE4QixHQUFRLEVBQUssU0FFL0MsWUFBSyxTQUNILEtBQUssY0FDRixtQkFBbUIsRUFBVyxHQUM5QixLQUFLLFNBQUEsRUFBSyxDQUFJLE1BQUEsR0FBSyxjQUFjLEVBQU8sRUFBTSxLQUM5QyxLQUFLLFNBQUEsRUFBTSxDQUNWLEVBQVUsS0FJVCxHQU1GLEVBQUEsVUFBQSxlQUFQLFNBQXNCLEVBQWlCLEVBQWtCLEVBQWtCLEVBQWEsQ0FBeEYsR0FBQSxHQUFBLEtBQ00sRUFBOEIsR0FBUSxFQUFLLFNBRXpDLEVBQWdCLEVBQUEsWUFBWSxHQUM5QixLQUFLLGNBQWMsaUJBQWlCLE9BQU8sR0FBVSxFQUFPLEdBQzVELEtBQUssY0FBYyxtQkFBbUIsRUFBUyxHQUVuRCxZQUFLLFNBQ0gsRUFDRyxLQUFLLFNBQUEsRUFBSyxDQUFJLE1BQUEsR0FBSyxjQUFjLEVBQU8sRUFBTSxLQUM5QyxLQUFLLFNBQUEsRUFBTSxDQUNWLEVBQVUsS0FJVCxHQU1GLEVBQUEsVUFBQSxhQUFQLFNBQW9CLEVBQWMsRUFBa0IsRUFBYSxPQUUvRCxHQUFJLElBQUEsS0FBSSxNQUFBLElBQUEsT0FBQSxPQUFBLEVBQUUsb0JBQXFCLEVBQUEsd0JBQXdCLEVBQUssbUJBQW9CLENBQzlFLEVBQUEsT0FBTyxJQUFJLElBQ1gsT0FHRixHQUFJLEdBQThCLEdBQVEsRUFBSyxTQUUvQyxZQUFLLFNBQ0gsS0FBSyxjQUFjLEVBQU8sRUFBTSxHQUFPLEtBQUssU0FBQSxFQUFNLENBQ2hELEVBQVUsS0FJUCxHQU1GLEVBQUEsVUFBQSxlQUFQLFNBQXNCLEVBQWdCLENBQ3BDLEdBQUksQ0FBQyxLQUFLLGFBQWMsQ0FDdEIsRUFBQSxPQUFPLEtBQUssOENBQ1osT0FHRixBQUFNLE1BQU8sR0FBUSxTQUFZLFNBQy9CLEVBQUEsT0FBTyxLQUFLLDhEQUVaLE1BQUssYUFBYSxHQUVsQixFQUFRLE9BQU8sQ0FBRSxLQUFNLE9BT3BCLEVBQUEsVUFBQSxPQUFQLFVBQUEsQ0FDRSxNQUFPLE1BQUssTUFNUCxFQUFBLFVBQUEsV0FBUCxVQUFBLENBQ0UsTUFBTyxNQUFLLFVBTVAsRUFBQSxVQUFBLGFBQVAsVUFBQSxDQUNFLE1BQU8sTUFBSyxjQUFjLGdCQU1yQixFQUFBLFVBQUEsTUFBUCxTQUFhLEVBQWdCLENBQTdCLEdBQUEsR0FBQSxLQUNFLE1BQU8sTUFBSyx3QkFBd0IsR0FBUyxLQUFLLFNBQUEsRUFBYyxDQUM5RCxNQUFPLEdBQUssZUFDVCxNQUFNLEdBQ04sS0FBSyxTQUFBLEVBQWdCLENBQUksTUFBQSxJQUFrQixPQU8zQyxFQUFBLFVBQUEsTUFBUCxTQUFhLEVBQWdCLENBQTdCLEdBQUEsR0FBQSxLQUNFLE1BQU8sTUFBSyxNQUFNLEdBQVMsS0FBSyxTQUFBLEVBQU0sQ0FDcEMsU0FBSyxhQUFhLFFBQVUsR0FDckIsS0FPSixFQUFBLFVBQUEsa0JBQVAsVUFBQSxDQUNFLEFBQUksS0FBSyxjQUFnQixDQUFDLEtBQUssY0FBYyxhQUMzQyxNQUFLLGNBQWdCLEdBQUEsa0JBQWtCLEtBQUssWUFPekMsRUFBQSxVQUFBLGVBQVAsU0FBNkMsRUFBZ0MsQ0FDM0UsR0FBSSxDQUNGLE1BQVEsTUFBSyxjQUFjLEVBQVksS0FBYSxVQUNwRCxDQUNBLFNBQUEsT0FBTyxLQUFLLCtCQUErQixFQUFZLEdBQUUsNEJBQ2xELE9BS0QsRUFBQSxVQUFBLHdCQUFWLFNBQWtDLEVBQWtCLEVBQVksU0FDMUQsRUFBVSxHQUNWLEVBQVUsR0FDUixFQUFhLEVBQU0sV0FBYSxFQUFNLFVBQVUsT0FFdEQsR0FBSSxFQUFZLENBQ2QsRUFBVSxPQUVWLE9BQWlCLEdBQUEsRUFBQSxTQUFBLEdBQVUsRUFBQSxFQUFBLE9BQUEsQ0FBQSxFQUFBLEtBQUEsRUFBQSxFQUFBLE9BQUUsQ0FBeEIsR0FBTSxHQUFFLEVBQUEsTUFDTCxFQUFZLEVBQUcsVUFDckIsR0FBSSxHQUFhLEVBQVUsVUFBWSxHQUFPLENBQzVDLEVBQVUsR0FDViwwR0FRTixHQUFNLEdBQXFCLEVBQVEsU0FBVyxHQUFBLGNBQWMsR0FDdEQsRUFBdUIsR0FBc0IsRUFBUSxTQUFXLEdBQU8sR0FBc0IsRUFFbkcsQUFBSSxHQUNGLEdBQVEsT0FBTSxFQUFBLFNBQUEsRUFBQSxTQUFBLEdBQ1IsR0FBVyxDQUFFLE9BQVEsR0FBQSxjQUFjLFVBQVUsQ0FDakQsT0FBUSxFQUFRLFFBQVUsT0FBTyxHQUFXLE1BRTlDLEtBQUssZUFBZSxLQUtkLEVBQUEsVUFBQSxhQUFWLFNBQXVCLEVBQWdCLENBQ3JDLEtBQUssY0FBYyxZQUFZLElBYXZCLEVBQUEsVUFBQSx3QkFBVixTQUFrQyxFQUFnQixDQUFsRCxHQUFBLEdBQUEsS0FDRSxNQUFPLElBQUksR0FBQSxZQUFZLFNBQUEsRUFBTyxDQUM1QixHQUFJLEdBQWlCLEVBQ2YsRUFBZSxFQUVmLEVBQVcsWUFBWSxVQUFBLENBQzNCLEFBQUksRUFBSyxnQkFBa0IsRUFDekIsZUFBYyxHQUNkLEVBQVEsS0FFUixJQUFVLEVBQ04sR0FBVyxHQUFVLEdBQ3ZCLGVBQWMsR0FDZCxFQUFRLE9BR1gsTUFLRyxFQUFBLFVBQUEsWUFBVixVQUFBLENBQ0UsTUFBTyxNQUFLLFVBSUosRUFBQSxVQUFBLFdBQVYsVUFBQSxDQUNFLE1BQU8sTUFBSyxhQUFhLFVBQVksSUFBUyxLQUFLLE9BQVMsUUFpQnBELEVBQUEsVUFBQSxjQUFWLFNBQXdCLEVBQWMsRUFBZSxFQUFnQixDQUFyRSxHQUFBLEdBQUEsS0FDVSxFQUFBLEtBQUEsYUFBQSxlQUFBLEVBQUEsSUFBQSxPQUFBLEVBQUEsRUFDRixFQUFRLEVBQUEsU0FBQSxFQUFBLFNBQUEsR0FDVCxHQUFLLENBQ1IsU0FBVSxFQUFNLFVBQWEsSUFBUSxFQUFLLFNBQVcsRUFBSyxTQUFXLEVBQUEsU0FDckUsVUFBVyxFQUFNLFdBQWEsRUFBQSwyQkFHaEMsS0FBSyxvQkFBb0IsR0FDekIsS0FBSywyQkFBMkIsR0FJaEMsR0FBSSxHQUFhLEVBQ2pCLEFBQUksR0FBUSxFQUFLLGdCQUNmLEdBQWEsR0FBQSxNQUFNLE1BQU0sR0FBWSxPQUFPLEVBQUssaUJBSW5ELEdBQUksR0FBUyxFQUFBLFlBQVksUUFBc0IsR0FJL0MsTUFBSSxJQUVGLEdBQVMsRUFBVyxhQUFhLEVBQVUsSUFHdEMsRUFBTyxLQUFLLFNBQUEsRUFBRyxDQUNwQixNQUFJLE9BQU8sSUFBbUIsVUFBWSxFQUFpQixFQUNsRCxFQUFLLGdCQUFnQixFQUFLLEdBRTVCLEtBY0QsRUFBQSxVQUFBLGdCQUFWLFNBQTBCLEVBQXFCLEVBQWEsQ0FDMUQsR0FBSSxDQUFDLEVBQ0gsTUFBTyxNQUdULEdBQU0sR0FBVSxFQUFBLFNBQUEsRUFBQSxTQUFBLEVBQUEsU0FBQSxFQUFBLFNBQUEsRUFBQSxTQUFBLEdBQ1gsR0FDQyxFQUFNLGFBQWUsQ0FDdkIsWUFBYSxFQUFNLFlBQVksSUFBSSxTQUFBLEVBQUMsQ0FBSSxNQUFBLEdBQUEsU0FBQSxFQUFBLFNBQUEsR0FDbkMsR0FDQyxFQUFFLE1BQVEsQ0FDWixLQUFNLEVBQUEsVUFBVSxFQUFFLEtBQU0sU0FJMUIsRUFBTSxNQUFRLENBQ2hCLEtBQU0sRUFBQSxVQUFVLEVBQU0sS0FBTSxLQUUxQixFQUFNLFVBQVksQ0FDcEIsU0FBVSxFQUFBLFVBQVUsRUFBTSxTQUFVLEtBRWxDLEVBQU0sT0FBUyxDQUNqQixNQUFPLEVBQUEsVUFBVSxFQUFNLE1BQU8sS0FVbEMsQUFBSSxFQUFNLFVBQVksRUFBTSxTQUFTLE9BRW5DLEdBQVcsU0FBUyxNQUFRLEVBQU0sU0FBUyxPQUdyQyxHQUFBLEdBQUEsS0FBQSxhQUFBLGFBQUEsRUFBQSxJQUFBLE9BQUEsR0FBQSxFQUNSLE1BQUksR0FBYSwyQkFDUixFQUFBLFVBQVUsR0FHWixHQVNDLEVBQUEsVUFBQSxvQkFBVixTQUE4QixFQUFZLENBQ3hDLEdBQU0sR0FBVSxLQUFLLGFBQ2IsRUFBQSxFQUFBLFlBQWEsRUFBQSxFQUFBLFFBQVMsRUFBQSxFQUFBLEtBQU0sRUFBQSxFQUFBLGVBQUEsRUFBQSxJQUFBLE9BQUEsSUFBQSxFQUVwQyxBQUFNLGVBQWlCLElBQ3JCLEdBQU0sWUFBYyxlQUFpQixHQUFVLEVBQWMsY0FHM0QsRUFBTSxVQUFZLFFBQWEsSUFBWSxRQUM3QyxHQUFNLFFBQVUsR0FHZCxFQUFNLE9BQVMsUUFBYSxJQUFTLFFBQ3ZDLEdBQU0sS0FBTyxHQUdYLEVBQU0sU0FDUixHQUFNLFFBQVUsRUFBQSxTQUFTLEVBQU0sUUFBUyxJQUcxQyxHQUFNLEdBQVksRUFBTSxXQUFhLEVBQU0sVUFBVSxRQUFVLEVBQU0sVUFBVSxPQUFPLEdBQ3RGLEFBQUksR0FBYSxFQUFVLE9BQ3pCLEdBQVUsTUFBUSxFQUFBLFNBQVMsRUFBVSxNQUFPLElBRzlDLEdBQU0sR0FBVSxFQUFNLFFBQ3RCLEFBQUksR0FBVyxFQUFRLEtBQ3JCLEdBQVEsSUFBTSxFQUFBLFNBQVMsRUFBUSxJQUFLLEtBUTlCLEVBQUEsVUFBQSwyQkFBVixTQUFxQyxFQUFZLENBQy9DLEdBQU0sR0FBb0IsT0FBTyxLQUFLLEtBQUssZUFDM0MsQUFBSSxFQUFrQixPQUFTLEdBQzdCLEdBQU0sSUFBTSxFQUFNLEtBQU8sR0FDekIsRUFBTSxJQUFJLGFBQVksRUFBQSxTQUFRLEVBQU0sSUFBSSxjQUFnQixHQUFRLEtBUTFELEVBQUEsVUFBQSxXQUFWLFNBQXFCLEVBQVksQ0FDL0IsS0FBSyxjQUFjLFVBQVUsSUFTckIsRUFBQSxVQUFBLGNBQVYsU0FBd0IsRUFBYyxFQUFrQixFQUFhLENBQ25FLE1BQU8sTUFBSyxjQUFjLEVBQU8sRUFBTSxHQUFPLEtBQzVDLFNBQUEsRUFBVSxDQUNSLE1BQU8sR0FBVyxVQUVwQixTQUFBLEVBQU0sQ0FDSixFQUFBLE9BQU8sTUFBTSxNQW1CVCxFQUFBLFVBQUEsY0FBVixTQUF3QixFQUFjLEVBQWtCLEVBQWEsQ0FBckUsR0FBQSxHQUFBLFNBRVEsRUFBQSxLQUFBLGFBQUUsRUFBQSxFQUFBLFdBQVksRUFBQSxFQUFBLFdBQ2QsRUFBWSxLQUFLLGVBRXZCLEdBQUksQ0FBQyxLQUFLLGFBQ1IsTUFBTyxHQUFBLFlBQVksT0FBTyxHQUFJLEdBQUEsWUFBWSw2Q0FHNUMsR0FBTSxHQUFnQixFQUFNLE9BQVMsY0FJckMsTUFBSSxDQUFDLEdBQWlCLE1BQU8sSUFBZSxVQUFZLEtBQUssU0FBVyxFQUN0RSxJQUFBLEdBQUEsR0FBVSxtQkFBZSxNQUFBLElBQUEsUUFBQSxFQUFBLEtBQUEsRUFBRyxHQUFBLFFBQVEsV0FBWSxTQUN6QyxFQUFBLFlBQVksT0FDakIsR0FBSSxHQUFBLFlBQ0Ysb0ZBQW9GLEVBQVUsT0FLN0YsS0FBSyxjQUFjLEVBQU8sRUFBTyxHQUNyQyxLQUFLLFNBQUEsRUFBUSxTQUNaLEdBQUksSUFBYSxLQUNmLEtBQUEsR0FBQSxHQUFBLEdBQVUsbUJBQWUsTUFBQSxJQUFBLFFBQUEsRUFBQSxLQUFBLEVBQUcsR0FBQSxRQUFRLGVBQWdCLEVBQU0sTUFBUSxTQUM1RCxHQUFJLEdBQUEsWUFBWSwwREFHeEIsR0FBTSxHQUFzQixHQUFRLEVBQUssTUFBUyxFQUFLLEtBQWlDLGFBQWUsR0FDdkcsR0FBSSxHQUF1QixHQUFpQixDQUFDLEVBQzNDLE1BQU8sR0FHVCxHQUFNLEdBQW1CLEVBQVcsRUFBVSxHQUM5QyxNQUFPLEdBQUssb0JBQW9CLEtBRWpDLEtBQUssU0FBQSxFQUFjLFNBQ2xCLEdBQUksSUFBbUIsS0FDckIsS0FBQSxHQUFBLEdBQUEsR0FBVSxtQkFBZSxNQUFBLElBQUEsUUFBQSxFQUFBLEtBQUEsRUFBRyxHQUFBLFFBQVEsV0FBWSxFQUFNLE1BQVEsU0FDeEQsR0FBSSxHQUFBLFlBQVksc0RBR3hCLEdBQU0sR0FBVSxHQUFTLEVBQU0sWUFBYyxFQUFNLGFBQ25ELE1BQUksQ0FBQyxHQUFpQixHQUNwQixFQUFLLHdCQUF3QixFQUFTLEdBR3hDLEVBQUssV0FBVyxHQUNULElBRVIsS0FBSyxLQUFNLFNBQUEsRUFBTSxDQUNoQixLQUFJLGFBQWtCLEdBQUEsWUFDZCxFQUdSLEdBQUssaUJBQWlCLEVBQVEsQ0FDNUIsS0FBTSxDQUNKLFdBQVksSUFFZCxrQkFBbUIsSUFFZixHQUFJLEdBQUEsWUFDUjtVQUE4SCxPQVE1SCxFQUFBLFVBQUEsU0FBVixTQUFzQixFQUF1QixDQUE3QyxHQUFBLEdBQUEsS0FDRSxLQUFLLGdCQUFrQixFQUNsQixFQUFRLEtBQ1gsU0FBQSxFQUFLLENBQ0gsU0FBSyxnQkFBa0IsRUFDaEIsR0FFVCxTQUFBLEVBQU0sQ0FDSixTQUFLLGdCQUFrQixFQUNoQixLQVFILEVBQUEsVUFBQSxvQkFBVixTQUNFLEVBQTRDLENBRTVDLEdBQU0sR0FBVSw2REFDaEIsR0FBSSxFQUFBLFdBQVcsR0FDYixNQUFRLEdBQWlDLEtBQ3ZDLFNBQUEsRUFBSyxDQUNILEdBQUksQ0FBRSxHQUFBLGNBQWMsSUFBVSxJQUFVLE1BQ3RDLEtBQU0sSUFBSSxHQUFBLFlBQVksR0FFeEIsTUFBTyxJQUVULFNBQUEsRUFBQyxDQUNDLEtBQU0sSUFBSSxHQUFBLFlBQVksNEJBQTRCLEtBR2pELEdBQUksQ0FBRSxHQUFBLGNBQWMsSUFBTyxJQUFPLE1BQ3ZDLEtBQU0sSUFBSSxHQUFBLFlBQVksR0FFeEIsTUFBTyxJQUVYLEtBbmpCc0IsR0FBQSxXQUFBLHFFQ2xFdEIsR0FBQSxJQUFBLElBQ0EsR0FBQSxJQUdBLEdBQUEsVUFBQSxDQUFBLFlBQUEsRUFJUyxTQUFBLFVBQUEsVUFBUCxTQUFpQixFQUFRLENBQ3ZCLE1BQU8sSUFBQSxZQUFZLFFBQVEsQ0FDekIsT0FBUSxzRUFDUixPQUFRLEdBQUEsT0FBTyxXQU9aLEVBQUEsVUFBQSxNQUFQLFNBQWEsRUFBVSxDQUNyQixNQUFPLElBQUEsWUFBWSxRQUFRLEtBRS9CLEtBakJhLEdBQUEsY0FBQSxxRUNIYixHQUFBLElBQUEsSUFFQSxHQUFBLEtBdURBLEdBQUEsVUFBQSxDQVFFLFdBQW1CLEVBQVUsQ0FDM0IsS0FBSyxTQUFXLEVBQ1gsS0FBSyxTQUFTLEtBQ2pCLEdBQUEsT0FBTyxLQUFLLGtEQUVkLEtBQUssV0FBYSxLQUFLLGtCQU9sQixTQUFBLFVBQUEsbUJBQVAsU0FBMEIsRUFBaUIsRUFBaUIsQ0FDMUQsS0FBTSxJQUFJLElBQUEsWUFBWSx5REFNakIsRUFBQSxVQUFBLGlCQUFQLFNBQXdCLEVBQWtCLEVBQW1CLEVBQWlCLENBQzVFLEtBQU0sSUFBSSxJQUFBLFlBQVksdURBTWpCLEVBQUEsVUFBQSxVQUFQLFNBQWlCLEVBQVksQ0FDM0IsQUFBSyxLQUFLLFdBQVcsVUFBVSxHQUFPLEtBQUssS0FBTSxTQUFBLEVBQU0sQ0FDckQsR0FBQSxPQUFPLE1BQU0sOEJBQThCLE1BT3hDLEVBQUEsVUFBQSxZQUFQLFNBQW1CLEVBQWdCLENBQ2pDLEdBQUksQ0FBQyxLQUFLLFdBQVcsWUFBYSxDQUNoQyxHQUFBLE9BQU8sS0FBSywyRUFDWixPQUdGLEFBQUssS0FBSyxXQUFXLFlBQVksR0FBUyxLQUFLLEtBQU0sU0FBQSxFQUFNLENBQ3pELEdBQUEsT0FBTyxNQUFNLGdDQUFnQyxNQU8xQyxFQUFBLFVBQUEsYUFBUCxVQUFBLENBQ0UsTUFBTyxNQUFLLFlBTUosRUFBQSxVQUFBLGdCQUFWLFVBQUEsQ0FDRSxNQUFPLElBQUksSUFBQSxlQUVmLEtBbkVzQixHQUFBLFlBQUEsZ0ZDckR0QixZQUF5QyxFQUFRLENBQy9DLEdBQUksR0FBQyxFQUFJLFVBQVksQ0FBQyxFQUFJLFNBQVMsS0FHN0IsSUFBQSxHQUFBLEVBQUEsU0FBQSxJQUFFLEVBQUEsRUFBQSxLQUFNLEVBQUEsRUFBQSxRQUNkLE1BQU8sQ0FBRSxLQUFJLEVBQUUsUUFBTyxJQU94QixZQUFpQyxFQUFjLEVBQWlCLENBQzlELE1BQUssSUFHTCxHQUFNLElBQU0sRUFBTSxLQUFPLEdBQ3pCLEVBQU0sSUFBSSxLQUFPLEVBQU0sSUFBSSxNQUFRLEVBQVEsS0FDM0MsRUFBTSxJQUFJLFFBQVUsRUFBTSxJQUFJLFNBQVcsRUFBUSxRQUNqRCxFQUFNLElBQUksYUFBWSxHQUFBLFNBQVEsRUFBTSxJQUFJLGNBQWdCLEdBQVMsRUFBUSxjQUFnQixJQUN6RixFQUFNLElBQUksU0FBUSxHQUFBLFNBQVEsRUFBTSxJQUFJLFVBQVksR0FBUyxFQUFRLFVBQVksS0FDdEUsRUFJVCxZQUF1QyxFQUFzQyxFQUFRLENBQ25GLEdBQU0sR0FBVSxHQUFnQyxHQUMxQyxFQUFrQixLQUFLLFVBQVMsR0FBQSxTQUFBLEdBQUEsU0FBQSxDQUNwQyxRQUFTLEdBQUksUUFBTyxlQUNoQixHQUFXLENBQUUsSUFBSyxJQUNsQixFQUFJLGlCQUFtQixDQUFFLElBQUssRUFBSSxTQUFTLGNBRzNDLEVBQTBCLGNBQWdCLEdBQVcsV0FBbUMsVUFDeEYsRUFBYyxLQUFLLFVBQVUsQ0FDakMsS0FBSSxJQUdOLE1BQU8sQ0FDTCxLQUFTLEVBQWU7RUFBSyxFQUFXO0VBQUssS0FBSyxVQUFVLEdBQzVELEtBQUksRUFDSixJQUFLLEVBQUkseUNBaEJiLEdBQUEsdUJBQUEsR0FxQkEsWUFBcUMsRUFBYyxFQUFRLENBQ3pELEdBQU0sR0FBVSxHQUFnQyxHQUMxQyxFQUFZLEVBQU0sTUFBUSxRQUMxQixFQUFjLElBQWMsZUFBaUIsRUFBSSxnQkFFakQsRUFBQSxFQUFBLFlBQUEsR0FBRSxFQUFBLEVBQUEsb0JBQXFCLEVBQUEsR0FBQSxPQUFBLEVBQUEsQ0FBQSx3QkFDdkIsRUFBQSxHQUFBLEdBQUUsRUFBQSxFQUFBLE9BQXdCLEVBQUEsRUFBQSxLQUNoQyxBQUFJLE9BQU8sS0FBSyxHQUFVLFNBQVcsRUFDbkMsTUFBTyxHQUFNLFdBRWIsRUFBTSxXQUFhLEVBR3JCLEdBQU0sR0FBcUIsQ0FDekIsS0FBTSxLQUFLLFVBQVUsRUFBVSxHQUF3QixFQUFPLEVBQUksU0FBUyxLQUFPLEdBQ2xGLEtBQU0sRUFDTixJQUFLLEVBQWMsRUFBSSx3Q0FBMEMsRUFBSSxzQ0FTdkUsR0FBSSxFQUFhLENBQ2YsR0FBTSxHQUFrQixLQUFLLFVBQVMsR0FBQSxTQUFBLEdBQUEsU0FBQSxDQUNwQyxTQUFVLEVBQU0sU0FDaEIsUUFBUyxHQUFJLFFBQU8sZUFDaEIsR0FBVyxDQUFFLElBQUssSUFDbEIsRUFBSSxpQkFBbUIsQ0FBRSxJQUFLLEVBQUksU0FBUyxjQUUzQyxFQUFjLEtBQUssVUFBVSxDQUNqQyxLQUFNLEVBSU4sYUFBYyxDQUFDLENBQUUsR0FBSSxFQUFnQixLQUFNLE1Bb0J2QyxFQUFjLEVBQWU7RUFBSyxFQUFXO0VBQUssRUFBSSxLQUM1RCxFQUFJLEtBQU8sRUFHYixNQUFPLEdBN0RULEdBQUEscUJBQUEscUVDbkRBLEdBQUEsSUFBQSxJQUVBLEdBQUEsSUFZQSxZQUFpRSxFQUFnQyxFQUFVLE9BQ3pHLEFBQUksRUFBUSxRQUFVLElBQ3BCLEdBQUEsT0FBTyxTQUVULEdBQU0sR0FBTSxHQUFBLGdCQUNaLEFBQUEsR0FBQSxFQUFJLGNBQVUsTUFBQSxJQUFBLFFBQUEsRUFBRSxPQUFPLEVBQVEsY0FDL0IsR0FBTSxHQUFTLEdBQUksR0FBWSxHQUMvQixFQUFJLFdBQVcsR0FQakIsR0FBQSxZQUFBLHFFQ2RhLEdBQUEsWUFBYywyRUNFM0IsR0FBSSxJQUdKLEdBQUEsVUFBQSxDQUFBLFlBQUEsQ0FTUyxLQUFBLEtBQWUsRUFBaUIsR0FLaEMsU0FBQSxVQUFBLFVBQVAsVUFBQSxDQUVFLEdBQTJCLFNBQVMsVUFBVSxTQUc5QyxTQUFTLFVBQVUsU0FBVyxVQUFBLFFBQWdDLEdBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxVQUFBLE9BQUEsSUFBQSxFQUFBLEdBQUEsVUFBQSxHQUM1RCxHQUFNLEdBQVUsS0FBSyxxQkFBdUIsS0FDNUMsTUFBTyxJQUF5QixNQUFNLEVBQVMsS0FqQnJDLEVBQUEsR0FBYSxtQkFvQjdCLEtBeEJhLEdBQUEsaUJBQUEsZ0ZDTGIsR0FBQSxJQUVBLEVBQUEsSUFJTSxHQUF3QixDQUFDLG9CQUFxQixpREFnQnBELEdBQUEsVUFBQSxDQVdFLFdBQW9DLEVBQTZDLENBQTdDLEFBQUEsSUFBQSxRQUFBLEdBQUEsSUFBQSxLQUFBLFNBQUEsRUFGN0IsS0FBQSxLQUFlLEVBQWUsR0FPOUIsU0FBQSxVQUFBLFVBQVAsVUFBQSxDQUNFLEdBQUEsd0JBQXdCLFNBQUMsRUFBWSxDQUNuQyxHQUFNLEdBQU0sR0FBQSxnQkFDWixHQUFJLENBQUMsRUFDSCxNQUFPLEdBRVQsR0FBTSxHQUFPLEVBQUksZUFBZSxHQUNoQyxHQUFJLEVBQU0sQ0FDUixHQUFNLEdBQVMsRUFBSSxZQUNiLEVBQWdCLEVBQVMsRUFBTyxhQUFlLEdBTS9DLEVBQVUsTUFBTyxHQUFLLGVBQWtCLFdBQWEsRUFBSyxjQUFjLEdBQWlCLEdBQy9GLE1BQUksT0FBTyxHQUFLLGtCQUFxQixXQUM1QixFQUVGLEVBQUssaUJBQWlCLEVBQU8sR0FBVyxLQUFPLEVBRXhELE1BQU8sTUFLSCxFQUFBLFVBQUEsaUJBQVIsU0FBeUIsRUFBYyxFQUF1QyxDQUM1RSxNQUFJLE1BQUssZUFBZSxFQUFPLEdBQzdCLEdBQUEsT0FBTyxLQUFLO1NBQTZELEVBQUEsb0JBQW9CLElBQ3RGLElBRUwsS0FBSyxnQkFBZ0IsRUFBTyxHQUM5QixHQUFBLE9BQU8sS0FDTCx3RUFBMEUsRUFBQSxvQkFBb0IsSUFFekYsSUFFTCxLQUFLLGFBQWEsRUFBTyxHQUMzQixHQUFBLE9BQU8sS0FDTCxvRUFBc0UsRUFBQSxvQkFDcEUsR0FDRDtPQUFXLEtBQUssbUJBQW1CLElBRS9CLElBRUosS0FBSyxjQUFjLEVBQU8sR0FReEIsR0FQTCxHQUFBLE9BQU8sS0FDTCx5RUFBMkUsRUFBQSxvQkFDekUsR0FDRDtPQUFXLEtBQUssbUJBQW1CLElBRS9CLEtBTUgsRUFBQSxVQUFBLGVBQVIsU0FBdUIsRUFBYyxFQUF1QyxDQUMxRSxHQUFJLENBQUMsRUFBUSxlQUNYLE1BQU8sR0FHVCxHQUFJLENBQ0YsTUFDRyxJQUNDLEVBQU0sV0FDTixFQUFNLFVBQVUsUUFDaEIsRUFBTSxVQUFVLE9BQU8sSUFDdkIsRUFBTSxVQUFVLE9BQU8sR0FBRyxPQUFTLGVBQ3JDLFFBRUYsQ0FDQSxNQUFPLEtBS0gsRUFBQSxVQUFBLGdCQUFSLFNBQXdCLEVBQWMsRUFBdUMsQ0FDM0UsTUFBSSxDQUFDLEVBQVEsY0FBZ0IsQ0FBQyxFQUFRLGFBQWEsT0FDMUMsR0FHRixLQUFLLDBCQUEwQixHQUFPLEtBQUssU0FBQSxFQUFPLENBRXZELE1BQUMsR0FBUSxhQUF3QyxLQUFLLFNBQUEsRUFBTyxDQUFJLE1BQUEsR0FBQSxrQkFBa0IsRUFBUyxRQUt4RixFQUFBLFVBQUEsYUFBUixTQUFxQixFQUFjLEVBQXVDLENBRXhFLEdBQUksQ0FBQyxFQUFRLFVBQVksQ0FBQyxFQUFRLFNBQVMsT0FDekMsTUFBTyxHQUVULEdBQU0sR0FBTSxLQUFLLG1CQUFtQixHQUNwQyxNQUFPLEFBQUMsR0FBYyxFQUFRLFNBQVMsS0FBSyxTQUFBLEVBQU8sQ0FBSSxNQUFBLEdBQUEsa0JBQWtCLEVBQUssS0FBaEUsSUFJUixFQUFBLFVBQUEsY0FBUixTQUFzQixFQUFjLEVBQXVDLENBRXpFLEdBQUksQ0FBQyxFQUFRLFdBQWEsQ0FBQyxFQUFRLFVBQVUsT0FDM0MsTUFBTyxHQUVULEdBQU0sR0FBTSxLQUFLLG1CQUFtQixHQUNwQyxNQUFPLEFBQUMsR0FBYSxFQUFRLFVBQVUsS0FBSyxTQUFBLEVBQU8sQ0FBSSxNQUFBLEdBQUEsa0JBQWtCLEVBQUssS0FBaEUsSUFJUixFQUFBLFVBQUEsY0FBUixTQUFzQixFQUFrRCxDQUFsRCxNQUFBLEtBQUEsUUFBQSxHQUFBLElBQ2IsQ0FDTCxVQUFTLEdBQUEsU0FFSCxLQUFLLFNBQVMsZUFBaUIsR0FDL0IsS0FBSyxTQUFTLFdBQWEsR0FFM0IsRUFBYyxlQUFpQixHQUMvQixFQUFjLFdBQWEsSUFFakMsU0FBUSxHQUFBLFNBRUYsS0FBSyxTQUFTLGVBQWlCLEdBQy9CLEtBQUssU0FBUyxVQUFZLEdBRTFCLEVBQWMsZUFBaUIsR0FDL0IsRUFBYyxVQUFZLElBRWhDLGFBQVksR0FBQSxTQUNOLEtBQUssU0FBUyxjQUFnQixHQUM5QixFQUFjLGNBQWdCLEdBQy9CLElBRUwsZUFBZ0IsTUFBTyxNQUFLLFNBQVMsZ0JBQW1CLFlBQWMsS0FBSyxTQUFTLGVBQWlCLEtBS2pHLEVBQUEsVUFBQSwwQkFBUixTQUFrQyxFQUFZLENBQzVDLEdBQUksRUFBTSxRQUNSLE1BQU8sQ0FBQyxFQUFNLFNBRWhCLEdBQUksRUFBTSxVQUNSLEdBQUksQ0FDSSxHQUFBLEdBQUEsRUFBQSxVQUFBLFFBQUEsRUFBQSxVQUFBLE9BQUEsSUFBQSxHQUFFLEVBQUEsRUFBQSxLQUFBLEVBQUEsSUFBQSxPQUFBLEdBQUEsRUFBVyxFQUFBLEVBQUEsTUFBQSxFQUFBLElBQUEsT0FBQSxHQUFBLEVBQ25CLE1BQU8sQ0FBQyxHQUFHLEVBQVksRUFBSSxLQUFLLFFBQ2hDLENBQ0EsU0FBQSxPQUFPLE1BQU0sb0NBQW9DLEVBQUEsb0JBQW9CLElBQzlELEdBR1gsTUFBTyxJQUlELEVBQUEsVUFBQSxpQkFBUixTQUF5QixFQUF5QixDQUF6QixBQUFBLElBQUEsUUFBQSxHQUFBLElBQ3ZCLFlBQVMsRUFBSSxFQUFPLE9BQVMsRUFBRyxHQUFLLEVBQUcsSUFBSyxDQUMzQyxHQUFNLEdBQVEsRUFBTyxHQUVyQixHQUFJLElBQUEsS0FBSyxNQUFBLElBQUEsT0FBQSxPQUFBLEVBQUUsWUFBYSxlQUFpQixJQUFBLEtBQUssTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUFFLFlBQWEsZ0JBQzNELE1BQU8sR0FBTSxVQUFZLEtBSTdCLE1BQU8sT0FJRCxFQUFBLFVBQUEsbUJBQVIsU0FBMkIsRUFBWSxDQUNyQyxHQUFJLENBQ0YsR0FBSSxFQUFNLFdBQVksQ0FDcEIsR0FBTSxHQUFTLEVBQU0sV0FBVyxPQUNoQyxNQUFPLE1BQUssaUJBQWlCLEdBRS9CLEdBQUksRUFBTSxVQUFXLENBQ25CLEdBQU0sR0FDSixFQUFNLFVBQVUsUUFBVSxFQUFNLFVBQVUsT0FBTyxHQUFHLFlBQWMsRUFBTSxVQUFVLE9BQU8sR0FBRyxXQUFXLE9BQ3pHLE1BQU8sTUFBSyxpQkFBaUIsR0FFL0IsTUFBTyxXQUNQLENBQ0EsU0FBQSxPQUFPLE1BQU0sZ0NBQWdDLEVBQUEsb0JBQW9CLElBQzFELE9Bak1HLEVBQUEsR0FBYSxpQkFvTTdCLEtBeE1hLEdBQUEsZUFBQSxxRUN0QmIsR0FBQSxJQUFBLEtBQVMsR0FBQSxpQkFBQSxHQUFBLGlCQUNULEdBQUEsSUFBQSxLQUFTLEdBQUEsZUFBQSxHQUFBLDhFQ0RULEdBQUEsR0FBQSxLQUNFLEVBQUEsY0FBQSxFQUFBLGNBQ0EsRUFBQSxpQkFBQSxFQUFBLGlCQUNBLEVBQUEsYUFBQSxFQUFBLGFBQ0EsRUFBQSxlQUFBLEVBQUEsZUFDQSxFQUFBLGVBQUEsRUFBQSxlQUNBLEVBQUEsaUJBQUEsRUFBQSxpQkFDQSxFQUFBLFdBQUEsRUFBQSxXQUNBLEVBQUEsU0FBQSxFQUFBLFNBQ0EsRUFBQSxVQUFBLEVBQUEsVUFDQSxFQUFBLE9BQUEsRUFBQSxPQUNBLEVBQUEsUUFBQSxFQUFBLFFBQ0EsRUFBQSxRQUFBLEVBQUEsUUFDQSxFQUFBLFVBQUEsRUFBQSxVQUVGLEdBQUEsSUFBQSxJQUFTLEVBQUEsd0JBQUEsR0FBQSx3QkFBeUIsRUFBQSxjQUFBLEdBQUEsY0FBZSxFQUFBLGtCQUFBLEdBQUEsa0JBQW1CLEVBQUEsSUFBQSxHQUFBLElBQUssRUFBQSxTQUFBLEdBQUEsU0FBVSxFQUFBLE1BQUEsR0FBQSxNQUNuRixHQUFBLElBQUEsS0FBUyxFQUFBLElBQUEsR0FBQSxJQUNULEdBQUEsSUFBQSxLQUFTLEVBQUEsV0FBQSxHQUFBLFdBQ1QsR0FBQSxJQUFBLEtBQXVCLEVBQUEsWUFBQSxHQUFBLFlBQ3ZCLEdBQUEsSUFBQSxLQUFTLEVBQUEscUJBQUEsR0FBQSxxQkFBc0IsRUFBQSx1QkFBQSxHQUFBLHVCQUMvQixHQUFBLElBQUEsS0FBUyxFQUFBLFlBQUEsR0FBQSxZQUNULEdBQUEsSUFBQSxLQUFTLEVBQUEsY0FBQSxHQUFBLGNBQ1QsR0FBQSxJQUFBLEtBQVMsRUFBQSxZQUFBLEdBQUEsWUFFVCxHQUFBLElBQUEsS0FFUyxFQUFBLGFBQUEsS0MxQlQsY0FrQkEsQUFBQyxVQUFTLEVBQUUsRUFBRSxDQUNaLEdBQU0sR0FBSSxNQUFPLEtBQVcsU0FBVyxHQUFVLE1BQU8sSUFBSyxTQUFXLEVBQUksR0FDNUUsRUFBRSxHQUNFLE1BQU8sU0FBVSxZQUFjLE9BQU8sS0FBTyxPQUFPLE1BQU8sS0FDOUQsR0FBTSxTQUFTLEVBQVMsQ0FFM0IsR0FBTSxHQUFRLE9BQU8sU0FDZixFQUFRLE9BQU8sU0FFckIsV0FBZ0IsRUFBTyxFQUFTLENBQzlCLEFBQUksTUFBTyxJQUFVLFVBRW5CLEdBQVUsRUFDVixFQUFRLEdBR1YsS0FBSyxLQUFPLEVBQ1osS0FBSyxNQUFRLEVBQ2IsS0FBSyxPQUFTLEtBQUssT0FBUyxPQUM1QixLQUFLLFFBQVUsR0FBSSxLQUVmLEdBQ0YsTUFBSyxPQUFPLEdBQ1IsRUFBUSxHQUNWLE1BQUssTUFBUSxLQUFLLE9BS3hCLEVBQVEsT0FBUyxFQUVqQixXQUFlLEVBQUssRUFBTyxDQUN6QixLQUFLLElBQU0sRUFDWCxLQUFLLE1BQVEsRUFDYixLQUFLLEdBQVMsT0FDZCxLQUFLLEdBQVMsT0FJaEIsRUFBTyxVQUFVLGlCQUFtQixTQUFTLEVBQU8sQ0FDbEQsQUFBSSxJQUFVLEtBQUssUUFRZixHQUFNLElBQ0osS0FBVSxLQUFLLFFBQ2pCLE1BQUssT0FBUyxFQUFNLElBRXRCLEVBQU0sR0FBTyxHQUFTLEVBQU0sSUFFMUIsRUFBTSxJQUNSLEdBQU0sR0FBTyxHQUFTLEVBQU0sSUFFOUIsRUFBTSxHQUFTLE9BQ2YsRUFBTSxHQUFTLEtBQUssT0FDaEIsS0FBSyxRQUNQLE1BQUssT0FBTyxHQUFTLEdBRXZCLEtBQUssT0FBUyxJQUdoQixFQUFPLFVBQVUsT0FBUyxTQUFTLEVBQVMsQ0FDMUMsR0FBSSxHQUFPLEVBQVEsS0FBSyxPQUFTLE9BQU8sVUFDeEMsS0FBSyxRQUFRLFFBQ2IsR0FBSSxHQUFLLEVBQVEsT0FBTyxZQUN4QixPQUFTLEdBQU0sRUFBRyxPQUFRLENBQUMsRUFBSSxLQUFNLEVBQU0sRUFBRyxPQUFRLENBQ3BELEdBQUksR0FBSSxHQUFJLEdBQU0sRUFBSSxNQUFNLEdBQUksRUFBSSxNQUFNLElBUzFDLEdBUkEsS0FBSyxRQUFRLElBQUksRUFBRSxJQUFLLEdBQ3hCLEFBQUssRUFHSCxHQUFNLEdBQVMsRUFDZixFQUFFLEdBQVMsR0FIWCxLQUFLLE9BQVMsRUFLaEIsRUFBUSxFQUNKLEtBQVcsRUFDYixLQUFNLElBQUksT0FBTSxZQUdwQixLQUFLLE9BQVMsRUFDZCxLQUFLLEtBQU8sS0FBSyxRQUFRLE1BRzNCLEVBQU8sVUFBVSxJQUFNLFNBQVMsRUFBSyxDQUVuQyxHQUFJLEdBQVEsS0FBSyxRQUFRLElBQUksR0FDN0IsR0FBSSxFQUFDLEVBRUwsWUFBSyxpQkFBaUIsR0FDZixFQUFNLE9BR2YsRUFBTyxVQUFVLElBQU0sU0FBUyxFQUFLLEVBQU8sQ0FDMUMsR0FBSSxHQUFRLEtBQUssUUFBUSxJQUFJLEdBRTdCLE1BQUksR0FFRixHQUFNLE1BQVEsRUFDZCxLQUFLLGlCQUFpQixHQUNmLE1BSVQsTUFBSyxRQUFRLElBQUksRUFBTSxFQUFRLEdBQUksR0FBTSxFQUFLLElBRTlDLEFBQUksS0FBSyxPQUVQLE1BQUssT0FBTyxHQUFTLEVBQ3JCLEVBQU0sR0FBUyxLQUFLLFFBR3BCLEtBQUssT0FBUyxFQUloQixLQUFLLE9BQVMsRUFDZCxFQUFFLEtBQUssS0FDSCxLQUFLLEtBQU8sS0FBSyxPQUVuQixLQUFLLFFBR0EsT0FHVCxFQUFPLFVBQVUsTUFBUSxVQUFXLENBRWxDLEdBQUksR0FBUSxLQUFLLE9BQ2pCLEdBQUksRUFDRixNQUFJLE1BQUssT0FBTyxHQUVkLE1BQUssT0FBUyxLQUFLLE9BQU8sR0FDMUIsS0FBSyxPQUFPLEdBQVMsUUFHckIsTUFBSyxPQUFTLE9BQ2QsS0FBSyxPQUFTLFFBSWhCLEVBQU0sR0FBUyxFQUFNLEdBQVMsT0FDOUIsS0FBSyxRQUFRLE9BQU8sRUFBTSxLQUMxQixFQUFFLEtBQUssS0FDQSxDQUFDLEVBQU0sSUFBSyxFQUFNLFFBUTdCLEVBQU8sVUFBVSxLQUFPLFNBQVMsRUFBSyxDQUNwQyxHQUFJLEdBQUksS0FBSyxRQUFRLElBQUksR0FDekIsTUFBTyxHQUFJLEVBQUUsTUFBUSxRQUd2QixFQUFPLFVBQVUsSUFBTSxTQUFTLEVBQUssQ0FDbkMsTUFBTyxNQUFLLFFBQVEsSUFBSSxJQUcxQixFQUFPLFVBQVUsT0FBWSxTQUFTLEVBQUssQ0FDekMsR0FBSSxHQUFRLEtBQUssUUFBUSxJQUFJLEdBQzdCLEdBQUksRUFBQyxFQUNMLFlBQUssUUFBUSxPQUFPLEVBQU0sS0FDMUIsQUFBSSxFQUFNLElBQVUsRUFBTSxHQUV4QixHQUFNLEdBQU8sR0FBUyxFQUFNLEdBQzVCLEVBQU0sR0FBTyxHQUFTLEVBQU0sSUFDdkIsQUFBSSxFQUFNLEdBRWYsR0FBTSxHQUFPLEdBQVMsT0FFdEIsS0FBSyxPQUFTLEVBQU0sSUFDZixBQUFJLEVBQU0sR0FFZixHQUFNLEdBQU8sR0FBUyxPQUV0QixLQUFLLE9BQVMsRUFBTSxJQUVwQixLQUFLLE9BQVMsS0FBSyxPQUFTLE9BRzlCLEtBQUssT0FDRSxFQUFNLE9BR2YsRUFBTyxVQUFVLE1BQVEsVUFBVyxDQUVsQyxLQUFLLE9BQVMsS0FBSyxPQUFTLE9BQzVCLEtBQUssS0FBTyxFQUNaLEtBQUssUUFBUSxTQUlmLFdBQXVCLEVBQWEsQ0FBRSxLQUFLLE1BQVEsRUFDbkQsRUFBYyxVQUFVLE9BQU8sVUFBWSxVQUFXLENBQUUsTUFBTyxPQUMvRCxFQUFjLFVBQVUsS0FBTyxVQUFXLENBQ3hDLEdBQUksR0FBTSxLQUFLLE1BQ2YsTUFBSSxHQUNGLE1BQUssTUFBUSxFQUFJLEdBQ1YsQ0FBRSxLQUFNLEdBQU8sTUFBTyxDQUFDLEVBQUksSUFBSyxFQUFJLFNBRXBDLENBQUUsS0FBTSxHQUFNLE1BQU8sU0FLaEMsV0FBcUIsRUFBYSxDQUFFLEtBQUssTUFBUSxFQUNqRCxFQUFZLFVBQVUsT0FBTyxVQUFZLFVBQVcsQ0FBRSxNQUFPLE9BQzdELEVBQVksVUFBVSxLQUFPLFVBQVcsQ0FDdEMsR0FBSSxHQUFNLEtBQUssTUFDZixNQUFJLEdBQ0YsTUFBSyxNQUFRLEVBQUksR0FDVixDQUFFLEtBQU0sR0FBTyxNQUFPLEVBQUksTUFFMUIsQ0FBRSxLQUFNLEdBQU0sTUFBTyxTQUloQyxXQUF1QixFQUFhLENBQUUsS0FBSyxNQUFRLEVBQ25ELEVBQWMsVUFBVSxPQUFPLFVBQVksVUFBVyxDQUFFLE1BQU8sT0FDL0QsRUFBYyxVQUFVLEtBQU8sVUFBVyxDQUN4QyxHQUFJLEdBQU0sS0FBSyxNQUNmLE1BQUksR0FDRixNQUFLLE1BQVEsRUFBSSxHQUNWLENBQUUsS0FBTSxHQUFPLE1BQU8sRUFBSSxRQUUxQixDQUFFLEtBQU0sR0FBTSxNQUFPLFNBS2hDLEVBQU8sVUFBVSxLQUFPLFVBQVcsQ0FDakMsTUFBTyxJQUFJLEdBQVksS0FBSyxTQUc5QixFQUFPLFVBQVUsT0FBUyxVQUFXLENBQ25DLE1BQU8sSUFBSSxHQUFjLEtBQUssU0FHaEMsRUFBTyxVQUFVLFFBQVUsVUFBVyxDQUNwQyxNQUFPLE9BR1QsRUFBTyxVQUFVLE9BQU8sVUFBWSxVQUFXLENBQzdDLE1BQU8sSUFBSSxHQUFjLEtBQUssU0FHaEMsRUFBTyxVQUFVLFFBQVUsU0FBUyxFQUFLLEVBQVMsQ0FDaEQsQUFBSSxNQUFPLElBQVksVUFDckIsR0FBVSxNQUVaLEdBQUksR0FBUSxLQUFLLE9BQ2pCLEtBQU8sR0FDTCxFQUFJLEtBQUssRUFBUyxFQUFNLE1BQU8sRUFBTSxJQUFLLE1BQzFDLEVBQVEsRUFBTSxJQUtsQixFQUFPLFVBQVUsT0FBUyxVQUFXLENBRW5DLE9BREksR0FBSSxHQUFJLE9BQU0sS0FBSyxNQUFPLEVBQUksRUFBRyxFQUFRLEtBQUssT0FDM0MsR0FDTCxFQUFFLEtBQU8sQ0FBRSxJQUFLLEVBQU0sSUFBSyxNQUFPLEVBQU0sT0FDeEMsRUFBUSxFQUFNLEdBRWhCLE1BQU8sSUFJVCxFQUFPLFVBQVUsU0FBVyxVQUFXLENBRXJDLE9BREksR0FBSSxHQUFJLEVBQVEsS0FBSyxPQUNsQixHQUNMLEdBQUssT0FBTyxFQUFNLEtBQUssSUFBSSxFQUFNLE1BQ2pDLEVBQVEsRUFBTSxHQUNWLEdBQ0YsSUFBSyxPQUdULE1BQU8sUUM3U1QsZ0VBd0JBLFlBQXNCLEVBQVUsQ0FDOUIsR0FBSSxDQUFDLEVBQUksTUFDUCxNQUFPLEdBR1QsR0FBTSxHQUFRLEVBQUksTUFBTSxNQUFNO0dBQU0sTUFBTSxHQUUxQyxNQUFPLEdBQ0osSUFBSSxTQUFBLEVBQUksQ0FDUCxHQUFJLEVBQUssTUFBTSxnQkFDYixNQUFPLENBQ0wsYUFBYyxLQUNkLFNBQVUsRUFDVixhQUFjLEtBQ2QsV0FBWSxLQUNaLFdBQVksS0FDWixPQUFRLEtBQ1IsU0FBVSxNQUlkLEdBQU0sR0FBWSxFQUFLLE1BQU0sMkRBQzdCLEdBQUksRUFBQyxFQUlMLElBQUksR0FBUyxLQUNULEVBQVMsS0FDVCxFQUFlLEtBQ2YsRUFBVyxLQUNYLEVBQWEsS0FDWCxFQUFXLEVBQVUsS0FBTyxTQUVsQyxHQUFJLEVBQVUsR0FBSSxDQUNoQixFQUFlLEVBQVUsR0FDekIsR0FBSSxHQUFjLEVBQWEsWUFBWSxLQUszQyxHQUpJLEVBQWEsRUFBYyxLQUFPLEtBRXBDLElBRUUsRUFBYyxFQUFHLENBQ25CLEVBQVMsRUFBYSxPQUFPLEVBQUcsR0FDaEMsRUFBUyxFQUFhLE9BQU8sRUFBYyxHQUMzQyxHQUFNLEdBQVksRUFBTyxRQUFRLFdBQ2pDLEFBQUksRUFBWSxHQUNkLEdBQWUsRUFBYSxPQUFPLEVBQVksR0FDL0MsRUFBUyxFQUFPLE9BQU8sRUFBRyxJQUc5QixFQUFXLEtBR2IsQUFBSSxHQUNGLEdBQVcsRUFDWCxFQUFhLEdBR1gsSUFBVyxlQUNiLEdBQWEsS0FDYixFQUFlLE1BR2pCLEdBQU0sR0FBYSxDQUNqQixhQUFjLFNBQVMsRUFBVSxHQUFJLEtBQU8sS0FDNUMsU0FBVSxFQUFVLElBQU0sS0FDMUIsYUFBWSxFQUNaLFdBQVksU0FBUyxFQUFVLEdBQUksS0FBTyxLQUMxQyxXQUFVLEVBQ1YsT0FBUSxFQUNSLFNBQVEsR0FHVixNQUFPLE1BRVIsT0FBTyxTQUFBLEVBQVEsQ0FBSSxNQUFBLENBQUMsQ0FBQyxJQTFFMUIsR0FBQSxNQUFBLHFFQ3ZCQSxHQUFBLElBQUEsSUFDQSxHQUFBLFFBQUEsTUFDQSxHQUFBLEtBRUEsR0FBQSxLQUdNLEdBQW1DLEVBQ25DLEdBQXFCLEdBQUksSUFBQSxPQUE4QixLQU03RCxhQUFxQyxDQUNuQyxHQUFtQixRQURyQixHQUFBLHNCQUFBLEdBS0EsWUFBcUIsRUFBNEIsQ0FDL0MsR0FBSSxDQUNGLE1BQU8sR0FBTSxjQUFtQixFQUFNLFNBQVEsSUFBSSxHQUFNLFlBQWMsb0JBQ3RFLENBSUEsTUFBTyxlQUlYLEdBQU0sSUFBeUIsU0FBUSxNQUFRLFFBQVEsS0FBSyxVQUFZLEdBQUEsUUFBUSxRQUFRLEtBQUssV0FDM0YsT0FBTyxRQUFRLE9BQUssSUFHdEIsWUFBbUIsRUFBa0IsRUFBYSxDQUNoRCxBQUFLLEdBRUgsR0FBTyxJQUlULEdBQU0sR0FBTyxHQUFBLFNBQVMsRUFBVSxPQUVoQyxFQUFXLEdBQUEsUUFBUSxHQUNuQixHQUFJLEdBQUksRUFBUyxZQUFZLGtCQUM3QixHQUFJLEVBQUksR0FFTixNQUFVLEdBQVMsT0FBTyxFQUFJLElBQUksUUFBUSxNQUFPLEtBQUksSUFBSSxFQUszRCxHQURBLEVBQU8sR0FBUSxLQUFJLFlBQVksRUFBTSxHQUNqQyxJQUFNLEVBQUcsQ0FDWCxHQUFJLEdBQWEsRUFBUyxPQUFPLEVBQUssUUFBUSxRQUFRLE1BQU8sS0FDN0QsTUFBSSxJQUNGLElBQWMsS0FFaEIsR0FBYyxFQUNQLEVBRVQsTUFBTyxHQVNULFlBQXlCLEVBQW1CLENBRTFDLE1BQUksR0FBVSxTQUFXLEVBQ2hCLEdBQUEsWUFBWSxRQUFRLElBR3RCLEdBQUksSUFBQSxZQUVSLFNBQUEsRUFBTyxDQU9SLE9BTk0sR0FFRixHQUVBLEVBQVEsYUFFSCxFQUFDLENBQ1IsR0FBTSxHQUFXLEVBQVUsR0FFckIsRUFBUSxHQUFtQixJQUFJLEdBRXJDLEdBQUksSUFBVSxPQUdaLE1BQUksS0FBVSxNQUNaLEdBQVksR0FBWSxHQUcxQixJQUdJLElBQVUsRUFBVSxRQUN0QixFQUFRLGNBS1osR0FBQSxTQUFTLEVBQVUsU0FBQyxFQUFtQixFQUFZLENBQ2pELEdBQU0sR0FBVSxFQUFNLEtBQU8sRUFBSyxXQUNsQyxFQUFZLEdBQVksRUFJeEIsR0FBbUIsSUFBSSxFQUFVLEdBRWpDLElBQ0ksSUFBVSxFQUFVLFFBQ3RCLEVBQVEsTUEvQkwsRUFBSSxFQUFHLEVBQUksRUFBVSxPQUFRLE1BQTdCLEtBeUNiLFlBQXNDLEVBQVksQ0FDaEQsR0FBTSxHQUFRLEdBQVcsTUFBTSxHQUMvQixNQUFLLElBQ0ksR0FIWCxHQUFBLHNCQUFBLEdBV0EsWUFBMkIsRUFBZ0MsRUFBcUIsQ0FDOUUsR0FBTSxHQUF3QixHQUV4QixFQUNKLEdBQVcsRUFBUSxvQkFBc0IsT0FBWSxFQUFRLGtCQUFvQixHQUU3RSxFQUF1QixFQUFNLElBQUksU0FBQSxFQUFLLE9BQ3BDLEVBQTBCLENBQzlCLE1BQU8sRUFBTSxhQUNiLFNBQVUsSUFBQSxFQUFNLFlBQVEsTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUFFLFdBQVcsWUFBYSxFQUFNLFNBQVMsT0FBTyxHQUFLLEVBQU0sVUFBWSxHQUMvRixTQUFVLEdBQVksR0FDdEIsT0FBUSxFQUFNLFlBR1YsRUFDSixFQUFNLFFBQ0wsRUFBWSxVQUNYLENBQUMsRUFBWSxTQUFTLFdBQVcsTUFDakMsQ0FBQyxFQUFZLFNBQVMsV0FBVyxNQUNqQyxFQUFZLFNBQVMsUUFBUSxTQUFXLEVBSzVDLFNBQVksT0FDVixDQUFDLEdBQWMsRUFBWSxXQUFhLFFBQWEsRUFBWSxTQUFTLFFBQVEsbUJBQXFCLEdBR3JHLEVBQVksVUFDZCxHQUFZLE9BQVMsR0FBVSxFQUFZLFVBRXZDLENBQUMsR0FBYyxFQUFpQixHQUFLLEVBQVksUUFBUSxFQUFZLFlBQWMsSUFDckYsRUFBWSxLQUFLLEVBQVksV0FJMUIsSUFJVCxHQUFJLEdBQWtCLEVBQ3BCLE1BQU8sSUFBQSxZQUFZLFFBQVEsR0FHN0IsR0FBSSxDQUNGLE1BQU8sSUFBa0IsRUFBYSxFQUFRLFFBQzlDLENBR0EsTUFBTyxJQUFBLFlBQVksUUFBUSxJQWpEL0IsR0FBQSxXQUFBLEdBMkRBLFlBQ0UsRUFDQSxFQUNBLEVBQXNCLENBRXRCLE1BQU8sSUFBSSxJQUFBLFlBQTBCLFNBQUEsRUFBTyxDQUMxQyxNQUFBLElBQWdCLEdBQWEsS0FBSyxTQUFBLEVBQVcsQ0FDM0MsR0FBTSxHQUFTLEVBQU8sSUFBSSxTQUFBLEVBQUssQ0FDN0IsR0FBSSxFQUFNLFVBQVksRUFBWSxFQUFNLFVBQ3RDLEdBQUksQ0FDRixHQUFNLEdBQVMsRUFBWSxFQUFNLFVBQXFCLE1BQU07R0FFNUQsR0FBQSxrQkFBa0IsRUFBTyxFQUFPLFFBQ2hDLEVBS0osTUFBTyxLQUdULEVBQVEsT0FRZCxZQUFzQyxFQUFjLEVBQXFCLENBQ3ZFLEdBQU0sR0FBTyxFQUFNLE1BQVEsRUFBTSxZQUFZLEtBQ3ZDLEVBQVEsR0FBc0IsR0FDcEMsTUFBTyxJQUFJLElBQUEsWUFBdUIsU0FBQSxFQUFPLENBQ3ZDLE1BQUEsSUFBVyxFQUFPLEdBQVMsS0FBSyxTQUFBLEVBQU0sQ0FDcEMsR0FBTSxHQUFTLENBQ2IsV0FBWSxDQUNWLE9BQVEsR0FBc0IsSUFFaEMsS0FBTSxFQUNOLE1BQU8sRUFBTSxTQUVmLEVBQVEsT0FaZCxHQUFBLHNCQUFBLEdBb0JBLFlBQTJCLEVBQXNCLEVBQXFCLENBQ3BFLE1BQU8sSUFBSSxJQUFBLFlBQW1CLFNBQUEsRUFBTyxDQUNuQyxNQUFBLElBQXNCLEVBQU8sR0FBUyxLQUFLLFNBQUMsRUFBb0IsQ0FDOUQsRUFBUSxDQUNOLFVBQVcsQ0FDVCxPQUFRLENBQUMsVUFMbkIsR0FBQSxXQUFBLEdBZUEsWUFBc0MsRUFBbUIsQ0FDdkQsR0FBSSxDQUFDLEdBQVMsQ0FBQyxFQUFNLE9BQ25CLE1BQU8sR0FHVCxHQUFJLEdBQWEsRUFDWCxFQUFxQixFQUFXLEdBQUcsVUFBWSxHQUVyRCxNQUFJLEdBQW1CLFFBQVEsb0JBQXNCLElBQU0sRUFBbUIsUUFBUSxzQkFBd0IsS0FDNUcsR0FBYSxFQUFXLE1BQU0sSUFJekIsRUFBVyxVQWJwQixHQUFBLHNCQUFBLHFFQ25RYSxHQUFBLFNBQVcsc0dDRHhCLEdBQUEsSUFDQSxHQUFBLElBWUEsR0FBQSxJQUNBLEdBQUEsUUFBQSxNQUdBLEdBQUEsUUFBQSxPQUVBLEdBQUEsS0FNTSxHQUVGLENBQ0YsTUFBTyxRQUNQLFlBQWEsY0FDYixRQUFTLFVBQ1QsV0FBWSxjQUlkLEdBQUEsVUFBQSxDQWlCRSxXQUEwQixFQUF5QixDQUF6QixLQUFBLFFBQUEsRUFOUCxLQUFBLFFBQW1DLEdBQUksSUFBQSxjQUFjLElBR3JELEtBQUEsWUFBb0MsR0FRaEQsS0FBQSxVQUF1QixTQUFBLEVBQUcsQ0FBSSxNQUFBLElBQUksSUFBQSxJQUFJLElBSjNDLEtBQUssS0FBTyxHQUFJLElBQUEsSUFBSSxFQUFRLElBQUssRUFBUSxVQUFXLEVBQVEsUUFTdkQsU0FBQSxVQUFBLFVBQVAsU0FBaUIsRUFBUSxDQUN2QixLQUFNLElBQUksSUFBQSxZQUFZLHlEQU1qQixFQUFBLFVBQUEsTUFBUCxTQUFhLEVBQWdCLENBQzNCLE1BQU8sTUFBSyxRQUFRLE1BQU0sSUFZbEIsRUFBQSxVQUFBLFVBQVYsU0FBb0IsRUFBcUIsU0FDakMsRUFBQSxRQUFBLElBQUUsRUFBQSxFQUFBLFNBQVUsRUFBQSxFQUFBLFdBQVksRUFBQSxFQUFBLFlBQ3hCLEVBQUEsS0FBQSxRQUFFLEVBQUEsRUFBQSxVQUFXLEVBQUEsRUFBQSxXQUNiLEVBQVEsSUFBYSxPQUFTLEdBQWEsRUFBYSxHQUFjLEdBQWEsR0FBZSxFQUV4RyxHQUFJLENBQUMsRUFDSCxNQUFPLEdBR0gsR0FBQSxHQUFBLEtBQUEsS0FBQSxTQUFFLEVBQUEsRUFBQSxLQUFNLEVBQUEsRUFBQSxTQUNkLE9BQWlCLEdBQUEsR0FBQSxTQUFBLEVBQVMsTUFBTSxNQUFJLEVBQUEsRUFBQSxPQUFBLENBQUEsRUFBQSxLQUFBLEVBQUEsRUFBQSxPQUFFLENBQWpDLEdBQU0sR0FBRSxFQUFBLE1BQ1gsR0FBSSxFQUFLLFNBQVMsSUFBVSxHQUFJLElBQUksR0FBTyxTQUFTLEdBQ2xELHlHQUlKLE1BQU8sSUFJQyxFQUFBLFVBQUEsbUJBQVYsU0FBNkIsRUFBa0IsQ0FDN0MsR0FBTSxHQUFPLEdBQUEsU0FBQSxHQUFBLFNBQUEsR0FDUixLQUFLLEtBQUssa0JBQWtCLEdBQUEsU0FBVSxHQUFBLGNBQ3RDLEtBQUssUUFBUSxTQUVWLEVBQUEsRUFBQSxTQUFVLEVBQUEsRUFBQSxTQUFVLEVBQUEsRUFBQSxLQUFNLEVBQUEsRUFBQSxTQUc1QixFQUFPLEdBQUcsRUFFaEIsTUFBQSxJQUFBLFNBQUEsQ0FDRSxNQUFPLEtBQUssT0FDWixRQUFPLEVBQ1AsU0FBUSxFQUNSLE9BQVEsT0FDUixLQUFJLEVBQ0osS0FBSSxFQUNKLFNBQVEsR0FDSixLQUFLLFFBQVEsU0FBVyxDQUMxQixHQUFJLEdBQUcsYUFBYSxLQUFLLFFBQVEsWUFRN0IsRUFBQSxVQUFBLGVBQVYsU0FBeUIsRUFBOEIsQ0FDckQsR0FBTSxHQUFXLEdBQWlCLEdBQ2xDLE1BQU8sTUFBSyxZQUFZLElBQWEsS0FBSyxZQUFZLEtBTTlDLEVBQUEsVUFBQSxlQUFWLFNBQXlCLEVBQThCLENBQ3JELE1BQU8sTUFBSyxlQUFlLEdBQWUsR0FBSSxNQUFLLEtBQUssUUFNaEQsRUFBQSxVQUFBLGlCQUFWLFNBQTJCLEVBQXNDLGFBQ3pELEVBQU0sS0FBSyxNQUNYLEVBQVcsRUFBUSx3QkFDbkIsRUFBVyxFQUFRLGVBRXpCLEdBQUksRUFBVSxLQVdaLE9BQW9CLEdBQUEsR0FBQSxTQUFBLEVBQVMsT0FBTyxNQUFNLE1BQUksRUFBQSxFQUFBLE9BQUEsQ0FBQSxFQUFBLEtBQUEsRUFBQSxFQUFBLE9BQUUsQ0FBM0MsR0FBTSxHQUFLLEVBQUEsTUFDUixFQUFhLEVBQU0sTUFBTSxJQUFLLEdBQzlCLEVBQWMsU0FBUyxFQUFXLEdBQUksSUFDdEMsRUFBUyxDQUFDLE1BQU0sR0FBNkIsR0FBZCxHQUFvQixRQUN6RCxPQUF1QixHQUFBLEdBQUEsT0FBQSxHQUFBLFNBQUMsRUFBVyxJQUFNLEVBQVcsR0FBRyxNQUFNLE1BQVMsQ0FBQyxTQUFNLEVBQUEsRUFBQSxPQUFBLENBQUEsRUFBQSxLQUFBLEVBQUEsRUFBQSxPQUFFLENBQTFFLEdBQU0sR0FBUSxFQUFBLE1BR1gsRUFBaUIsR0FBQSxTQUNqQixPQUFPLEtBQUssSUFBMEMsSUFBSSxTQUFBLEVBQUMsQ0FBSSxNQUFBLElBQWlCLEtBQUcsQ0FDdkYsUUFFRixBQUFJLEVBQWtCLFNBQVMsSUFBVyxNQUFLLFlBQVksR0FBWSxHQUFJLE1BQUssRUFBTSx5TUFHMUYsTUFBTyxXQUNFLEVBQ1QsWUFBSyxZQUFZLElBQU0sR0FBSSxNQUFLLEVBQU0sR0FBQSxzQkFBc0IsRUFBSyxJQUMxRCxHQUVULE1BQU8sSUFJTyxFQUFBLFVBQUEsTUFBaEIsU0FDRSxFQUNBLEVBQXFELHFHQUVyRCxHQUFJLENBQUMsS0FBSyxPQUNSLEtBQU0sSUFBSSxJQUFBLFlBQVksdUJBRXhCLE1BQUksSUFBbUIsS0FBSyxlQUFlLEVBQWMsTUFDdkQsQ0FBQSxFQUFPLFFBQVEsT0FBTyxDQUNwQixRQUFTLEVBQ1QsS0FBTSxFQUFjLEtBQ3BCLE9BQVEsaUJBQWlCLEVBQWMsS0FBSSx5QkFBeUIsS0FBSyxlQUN2RSxFQUFjLE1BQ2YsNkJBQ0QsT0FBUSxPQUlaLENBQUEsRUFBTyxLQUFLLFFBQVEsSUFDbEIsVUFBQSxDQUNFLE1BQUEsSUFBSSxTQUFrQixTQUFDLEVBQVMsRUFBTSxDQUNwQyxHQUFJLENBQUMsRUFBSyxPQUNSLEtBQU0sSUFBSSxJQUFBLFlBQVksdUJBRXhCLEdBQU0sR0FBVSxFQUFLLG1CQUFtQixFQUFLLFVBQVUsRUFBYyxNQUMvRCxFQUFNLEVBQUssT0FBTyxRQUFRLEVBQVMsU0FBQSxFQUFHLENBQzFDLEdBQU0sR0FBYSxFQUFJLFlBQWMsSUFDL0IsRUFBUyxHQUFBLE9BQU8sYUFBYSxHQUVuQyxFQUFJLFlBQVksUUFNaEIsR0FBSSxHQUFtQixFQUFJLFFBQVUsRUFBSSxRQUFRLGVBQWlCLEdBQ2xFLEVBQW9CLE1BQU0sUUFBUSxHQUFvQixFQUFpQixHQUFLLEVBRTVFLEdBQUksR0FBVyxFQUFJLFFBQVUsRUFBSSxRQUFRLHdCQUEwQixHQUNuRSxFQUFZLE1BQU0sUUFBUSxHQUFZLEVBQVMsR0FBSyxFQUVwRCxHQUFNLEdBQVUsQ0FDZCx1QkFBd0IsRUFDeEIsY0FBZSxHQUdYLEVBQVUsRUFBSyxpQkFBaUIsR0FRdEMsR0FQSSxHQUNGLEdBQUEsT0FBTyxLQUNMLFlBQVksRUFBYyxLQUFJLGlDQUFpQyxFQUFLLGVBQ2xFLEVBQWMsT0FJaEIsSUFBVyxHQUFBLE9BQU8sUUFDcEIsRUFBUSxDQUFFLE9BQU0sUUFDWCxDQUNMLEdBQUksR0FBbUIsZUFBZSxFQUFVLElBQ2hELEFBQUksRUFBSSxTQUFXLEVBQUksUUFBUSxtQkFDN0IsSUFBb0IsS0FBSyxFQUFJLFFBQVEsbUJBRXZDLEVBQU8sR0FBSSxJQUFBLFlBQVksSUFJekIsRUFBSSxHQUFHLE9BQVEsVUFBQSxJQUdmLEVBQUksR0FBRyxNQUFPLFVBQUEsTUFJaEIsRUFBSSxHQUFHLFFBQVMsR0FDaEIsRUFBSSxJQUFJLEVBQWMsZ0JBSWhDLEtBak9zQixHQUFBLGNBQUEsS0NuQ3RCLG1CQUlBLEdBQUksSUFBSSxJQUNKLEdBQUksR0FBSSxHQUNSLEdBQUksR0FBSSxHQUNSLEdBQUksR0FBSSxHQUNSLEdBQUksR0FBSSxFQUNSLEdBQUksR0FBSSxPQWdCWixHQUFPLFFBQVUsU0FBUyxFQUFLLEVBQVMsQ0FDdEMsRUFBVSxHQUFXLEdBQ3JCLEdBQUksR0FBTyxNQUFPLEdBQ2xCLEdBQUksSUFBUyxVQUFZLEVBQUksT0FBUyxFQUNwQyxNQUFPLElBQU0sR0FDUixHQUFJLElBQVMsVUFBWSxTQUFTLEdBQ3ZDLE1BQU8sR0FBUSxLQUFPLEdBQVEsR0FBTyxHQUFTLEdBRWhELEtBQU0sSUFBSSxPQUNSLHdEQUNFLEtBQUssVUFBVSxLQVlyQixZQUFlLEVBQUssQ0FFbEIsR0FEQSxFQUFNLE9BQU8sR0FDVCxJQUFJLE9BQVMsS0FHakIsSUFBSSxHQUFRLG1JQUFtSSxLQUM3SSxHQUVGLEdBQUksRUFBQyxFQUdMLElBQUksR0FBSSxXQUFXLEVBQU0sSUFDckIsRUFBUSxHQUFNLElBQU0sTUFBTSxjQUM5QixPQUFRLE9BQ0QsWUFDQSxXQUNBLFVBQ0EsU0FDQSxJQUNILE1BQU8sR0FBSSxPQUNSLFlBQ0EsV0FDQSxJQUNILE1BQU8sR0FBSSxPQUNSLFdBQ0EsVUFDQSxJQUNILE1BQU8sR0FBSSxPQUNSLFlBQ0EsV0FDQSxVQUNBLFNBQ0EsSUFDSCxNQUFPLEdBQUksT0FDUixjQUNBLGFBQ0EsV0FDQSxVQUNBLElBQ0gsTUFBTyxHQUFJLE9BQ1IsY0FDQSxhQUNBLFdBQ0EsVUFDQSxJQUNILE1BQU8sR0FBSSxPQUNSLG1CQUNBLGtCQUNBLFlBQ0EsV0FDQSxLQUNILE1BQU8sV0FFUCxVQVlOLFlBQWtCLEVBQUksQ0FDcEIsR0FBSSxHQUFRLEtBQUssSUFBSSxHQUNyQixNQUFJLElBQVMsR0FDSixLQUFLLE1BQU0sRUFBSyxJQUFLLElBRTFCLEdBQVMsR0FDSixLQUFLLE1BQU0sRUFBSyxJQUFLLElBRTFCLEdBQVMsR0FDSixLQUFLLE1BQU0sRUFBSyxJQUFLLElBRTFCLEdBQVMsR0FDSixLQUFLLE1BQU0sRUFBSyxJQUFLLElBRXZCLEVBQUssS0FXZCxZQUFpQixFQUFJLENBQ25CLEdBQUksR0FBUSxLQUFLLElBQUksR0FDckIsTUFBSSxJQUFTLEdBQ0osR0FBTyxFQUFJLEVBQU8sR0FBRyxPQUUxQixHQUFTLEdBQ0osR0FBTyxFQUFJLEVBQU8sR0FBRyxRQUUxQixHQUFTLEdBQ0osR0FBTyxFQUFJLEVBQU8sR0FBRyxVQUUxQixHQUFTLEdBQ0osR0FBTyxFQUFJLEVBQU8sR0FBRyxVQUV2QixFQUFLLE1BT2QsWUFBZ0IsRUFBSSxFQUFPLEVBQUcsRUFBTSxDQUNsQyxHQUFJLEdBQVcsR0FBUyxFQUFJLElBQzVCLE1BQU8sTUFBSyxNQUFNLEVBQUssR0FBSyxJQUFNLEVBQVEsR0FBVyxJQUFNLE9DaEs3RCxtQkFNQSxZQUFlLEVBQUssQ0FDbkIsRUFBWSxNQUFRLEVBQ3BCLEVBQVksUUFBVSxFQUN0QixFQUFZLE9BQVMsRUFDckIsRUFBWSxRQUFVLEVBQ3RCLEVBQVksT0FBUyxFQUNyQixFQUFZLFFBQVUsRUFDdEIsRUFBWSxTQUFXLEtBQ3ZCLEVBQVksUUFBVSxFQUV0QixPQUFPLEtBQUssR0FBSyxRQUFRLEdBQU8sQ0FDL0IsRUFBWSxHQUFPLEVBQUksS0FPeEIsRUFBWSxNQUFRLEdBQ3BCLEVBQVksTUFBUSxHQU9wQixFQUFZLFdBQWEsR0FRekIsV0FBcUIsRUFBVyxDQUMvQixHQUFJLEdBQU8sRUFFWCxPQUFTLEdBQUksRUFBRyxFQUFJLEVBQVUsT0FBUSxJQUNyQyxFQUFTLElBQVEsR0FBSyxFQUFRLEVBQVUsV0FBVyxHQUNuRCxHQUFRLEVBR1QsTUFBTyxHQUFZLE9BQU8sS0FBSyxJQUFJLEdBQVEsRUFBWSxPQUFPLFFBRS9ELEVBQVksWUFBYyxFQVMxQixXQUFxQixFQUFXLENBQy9CLEdBQUksR0FDQSxFQUFpQixLQUNqQixFQUNBLEVBRUosY0FBa0IsRUFBTSxDQUV2QixHQUFJLENBQUMsRUFBTSxRQUNWLE9BR0QsR0FBTSxHQUFPLEVBR1AsRUFBTyxPQUFPLEdBQUksT0FDbEIsRUFBSyxFQUFRLElBQVksR0FDL0IsRUFBSyxLQUFPLEVBQ1osRUFBSyxLQUFPLEVBQ1osRUFBSyxLQUFPLEVBQ1osRUFBVyxFQUVYLEVBQUssR0FBSyxFQUFZLE9BQU8sRUFBSyxJQUU5QixNQUFPLEdBQUssSUFBTyxVQUV0QixFQUFLLFFBQVEsTUFJZCxHQUFJLElBQVEsRUFDWixFQUFLLEdBQUssRUFBSyxHQUFHLFFBQVEsZ0JBQWlCLENBQUMsR0FBTyxLQUFXLENBRTdELEdBQUksS0FBVSxLQUNiLE1BQU8sSUFFUixLQUNBLEdBQU0sSUFBWSxFQUFZLFdBQVcsSUFDekMsR0FBSSxNQUFPLEtBQWMsV0FBWSxDQUNwQyxHQUFNLElBQU0sRUFBSyxJQUNqQixHQUFRLEdBQVUsS0FBSyxFQUFNLElBRzdCLEVBQUssT0FBTyxHQUFPLEdBQ25CLEtBRUQsTUFBTyxNQUlSLEVBQVksV0FBVyxLQUFLLEVBQU0sR0FHbEMsQUFEYyxHQUFLLEtBQU8sRUFBWSxLQUNoQyxNQUFNLEVBQU0sR0FHbkIsU0FBTSxVQUFZLEVBQ2xCLEVBQU0sVUFBWSxFQUFZLFlBQzlCLEVBQU0sTUFBUSxFQUFZLFlBQVksR0FDdEMsRUFBTSxPQUFTLEVBQ2YsRUFBTSxRQUFVLEVBQVksUUFFNUIsT0FBTyxlQUFlLEVBQU8sVUFBVyxDQUN2QyxXQUFZLEdBQ1osYUFBYyxHQUNkLElBQUssSUFDQSxJQUFtQixLQUNmLEVBRUosS0FBb0IsRUFBWSxZQUNuQyxHQUFrQixFQUFZLFdBQzlCLEVBQWUsRUFBWSxRQUFRLElBRzdCLEdBRVIsSUFBSyxHQUFLLENBQ1QsRUFBaUIsS0FLZixNQUFPLEdBQVksTUFBUyxZQUMvQixFQUFZLEtBQUssR0FHWCxFQUdSLFdBQWdCLEVBQVcsRUFBVyxDQUNyQyxHQUFNLEdBQVcsRUFBWSxLQUFLLFVBQWEsT0FBTyxJQUFjLFlBQWMsSUFBTSxHQUFhLEdBQ3JHLFNBQVMsSUFBTSxLQUFLLElBQ2IsRUFVUixXQUFnQixFQUFZLENBQzNCLEVBQVksS0FBSyxHQUNqQixFQUFZLFdBQWEsRUFFekIsRUFBWSxNQUFRLEdBQ3BCLEVBQVksTUFBUSxHQUVwQixHQUFJLEdBQ0UsRUFBUyxPQUFPLElBQWUsU0FBVyxFQUFhLElBQUksTUFBTSxVQUNqRSxFQUFNLEVBQU0sT0FFbEIsSUFBSyxFQUFJLEVBQUcsRUFBSSxFQUFLLElBQ3BCLEFBQUksQ0FBQyxFQUFNLElBS1gsR0FBYSxFQUFNLEdBQUcsUUFBUSxNQUFPLE9BRXJDLEFBQUksRUFBVyxLQUFPLElBQ3JCLEVBQVksTUFBTSxLQUFLLEdBQUksUUFBTyxJQUFNLEVBQVcsT0FBTyxHQUFLLE1BRS9ELEVBQVksTUFBTSxLQUFLLEdBQUksUUFBTyxJQUFNLEVBQWEsT0FXeEQsWUFBbUIsQ0FDbEIsR0FBTSxHQUFhLENBQ2xCLEdBQUcsRUFBWSxNQUFNLElBQUksR0FDekIsR0FBRyxFQUFZLE1BQU0sSUFBSSxHQUFhLElBQUksR0FBYSxJQUFNLElBQzVELEtBQUssS0FDUCxTQUFZLE9BQU8sSUFDWixFQVVSLFdBQWlCLEVBQU0sQ0FDdEIsR0FBSSxFQUFLLEVBQUssT0FBUyxLQUFPLElBQzdCLE1BQU8sR0FHUixHQUFJLEdBQ0EsRUFFSixJQUFLLEVBQUksRUFBRyxFQUFNLEVBQVksTUFBTSxPQUFRLEVBQUksRUFBSyxJQUNwRCxHQUFJLEVBQVksTUFBTSxHQUFHLEtBQUssR0FDN0IsTUFBTyxHQUlULElBQUssRUFBSSxFQUFHLEVBQU0sRUFBWSxNQUFNLE9BQVEsRUFBSSxFQUFLLElBQ3BELEdBQUksRUFBWSxNQUFNLEdBQUcsS0FBSyxHQUM3QixNQUFPLEdBSVQsTUFBTyxHQVVSLFdBQXFCLEVBQVEsQ0FDNUIsTUFBTyxHQUFPLFdBQ1osVUFBVSxFQUFHLEVBQU8sV0FBVyxPQUFTLEdBQ3hDLFFBQVEsVUFBVyxLQVV0QixXQUFnQixFQUFLLENBQ3BCLE1BQUksYUFBZSxPQUNYLEVBQUksT0FBUyxFQUFJLFFBRWxCLEVBT1IsWUFBbUIsQ0FDbEIsUUFBUSxLQUFLLHlJQUdkLFNBQVksT0FBTyxFQUFZLFFBRXhCLEVBR1IsR0FBTyxRQUFVLEtDalJqQixrQkFNQSxFQUFRLFdBQWEsR0FDckIsRUFBUSxLQUFPLEdBQ2YsRUFBUSxLQUFPLEdBQ2YsRUFBUSxVQUFZLEdBQ3BCLEVBQVEsUUFBVSxLQUNsQixFQUFRLFFBQVcsS0FBTSxDQUN4QixHQUFJLEdBQVMsR0FFYixNQUFPLElBQU0sQ0FDWixBQUFLLEdBQ0osR0FBUyxHQUNULFFBQVEsS0FBSywrSUFTaEIsRUFBUSxPQUFTLENBQ2hCLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFVBQ0EsVUFDQSxVQUNBLFdBWUQsYUFBcUIsQ0FJcEIsTUFBSSxPQUFPLFNBQVcsYUFBZSxPQUFPLFNBQVksUUFBTyxRQUFRLE9BQVMsWUFBYyxPQUFPLFFBQVEsUUFDckcsR0FJSixNQUFPLFlBQWMsYUFBZSxVQUFVLFdBQWEsVUFBVSxVQUFVLGNBQWMsTUFBTSx5QkFDL0YsR0FLQSxNQUFPLFdBQWEsYUFBZSxTQUFTLGlCQUFtQixTQUFTLGdCQUFnQixPQUFTLFNBQVMsZ0JBQWdCLE1BQU0sa0JBRXRJLE1BQU8sU0FBVyxhQUFlLE9BQU8sU0FBWSxRQUFPLFFBQVEsU0FBWSxPQUFPLFFBQVEsV0FBYSxPQUFPLFFBQVEsUUFHMUgsTUFBTyxZQUFjLGFBQWUsVUFBVSxXQUFhLFVBQVUsVUFBVSxjQUFjLE1BQU0sbUJBQXFCLFNBQVMsT0FBTyxHQUFJLEtBQU8sSUFFbkosTUFBTyxZQUFjLGFBQWUsVUFBVSxXQUFhLFVBQVUsVUFBVSxjQUFjLE1BQU0sc0JBU3RHLFlBQW9CLEVBQU0sQ0FRekIsR0FQQSxFQUFLLEdBQU0sTUFBSyxVQUFZLEtBQU8sSUFDbEMsS0FBSyxVQUNKLE1BQUssVUFBWSxNQUFRLEtBQzFCLEVBQUssR0FDSixNQUFLLFVBQVksTUFBUSxLQUMxQixJQUFNLEdBQU8sUUFBUSxTQUFTLEtBQUssTUFFaEMsQ0FBQyxLQUFLLFVBQ1QsT0FHRCxHQUFNLEdBQUksVUFBWSxLQUFLLE1BQzNCLEVBQUssT0FBTyxFQUFHLEVBQUcsRUFBRyxrQkFLckIsR0FBSSxHQUFRLEVBQ1IsRUFBUSxFQUNaLEVBQUssR0FBRyxRQUFRLGNBQWUsR0FBUyxDQUN2QyxBQUFJLElBQVUsTUFHZCxLQUNJLElBQVUsTUFHYixHQUFRLE1BSVYsRUFBSyxPQUFPLEVBQU8sRUFBRyxHQVd2QixFQUFRLElBQU0sUUFBUSxPQUFTLFFBQVEsS0FBUSxLQUFNLElBUXJELFlBQWMsRUFBWSxDQUN6QixHQUFJLENBQ0gsQUFBSSxFQUNILEVBQVEsUUFBUSxRQUFRLFFBQVMsR0FFakMsRUFBUSxRQUFRLFdBQVcsY0FFM0IsR0FZSCxhQUFnQixDQUNmLEdBQUksR0FDSixHQUFJLENBQ0gsRUFBSSxFQUFRLFFBQVEsUUFBUSxjQUMzQixFQU1GLE1BQUksQ0FBQyxHQUFLLE1BQU8sVUFBWSxhQUFlLE9BQVMsVUFDcEQsR0FBSSxRQUFRLElBQUksT0FHVixFQWNSLGFBQXdCLENBQ3ZCLEdBQUksQ0FHSCxNQUFPLG1CQUNOLEdBTUgsR0FBTyxRQUFVLEtBQW9CLEdBRXJDLEdBQU0sQ0FBQyxlQUFjLEdBQU8sUUFNNUIsR0FBVyxFQUFJLFNBQVUsRUFBRyxDQUMzQixHQUFJLENBQ0gsTUFBTyxNQUFLLFVBQVUsU0FDZCxFQUFQLENBQ0QsTUFBTywrQkFBaUMsRUFBTSxZQzFRaEQsZ0NBRUEsR0FBTyxRQUFVLENBQUMsRUFBTSxFQUFPLFFBQVEsT0FBUyxDQUMvQyxHQUFNLEdBQVMsRUFBSyxXQUFXLEtBQU8sR0FBTSxFQUFLLFNBQVcsRUFBSSxJQUFNLEtBQ2hFLEVBQVcsRUFBSyxRQUFRLEVBQVMsR0FDakMsRUFBcUIsRUFBSyxRQUFRLE1BQ3hDLE1BQU8sS0FBYSxJQUFPLEtBQXVCLElBQU0sRUFBVyxNQ05wRSxnQ0FDQSxHQUFNLElBQUssUUFBUSxNQUNiLEdBQU0sUUFBUSxPQUNkLEVBQVUsS0FFVixDQUFDLE9BQU8sUUFFVixHQUNKLEFBQUksRUFBUSxhQUNYLEVBQVEsY0FDUixFQUFRLGdCQUNSLEVBQVEsZUFDUixHQUFhLEVBQ0gsR0FBUSxVQUNsQixFQUFRLFdBQ1IsRUFBUSxlQUNSLEVBQVEsa0JBQ1IsSUFBYSxHQUdkLEFBQUksZUFBaUIsSUFDcEIsQ0FBSSxFQUFJLGNBQWdCLE9BQ3ZCLEdBQWEsRUFDUCxBQUFJLEVBQUksY0FBZ0IsUUFDOUIsR0FBYSxFQUViLEdBQWEsRUFBSSxZQUFZLFNBQVcsRUFBSSxFQUFJLEtBQUssSUFBSSxTQUFTLEVBQUksWUFBYSxJQUFLLElBSTFGLFlBQXdCLEVBQU8sQ0FDOUIsTUFBSSxLQUFVLEVBQ04sR0FHRCxDQUNOLFFBQ0EsU0FBVSxHQUNWLE9BQVEsR0FBUyxFQUNqQixPQUFRLEdBQVMsR0FJbkIsWUFBdUIsRUFBWSxFQUFhLENBQy9DLEdBQUksS0FBZSxFQUNsQixNQUFPLEdBR1IsR0FBSSxFQUFRLGNBQ1gsRUFBUSxlQUNSLEVBQVEsbUJBQ1IsTUFBTyxHQUdSLEdBQUksRUFBUSxhQUNYLE1BQU8sR0FHUixHQUFJLEdBQWMsQ0FBQyxHQUFlLEtBQWUsT0FDaEQsTUFBTyxHQUdSLEdBQU0sR0FBTSxJQUFjLEVBRTFCLEdBQUksRUFBSSxPQUFTLE9BQ2hCLE1BQU8sR0FHUixHQUFJLFFBQVEsV0FBYSxRQUFTLENBR2pDLEdBQU0sR0FBWSxHQUFHLFVBQVUsTUFBTSxLQUNyQyxNQUNDLFFBQU8sRUFBVSxLQUFPLElBQ3hCLE9BQU8sRUFBVSxLQUFPLE1BRWpCLE9BQU8sRUFBVSxLQUFPLE1BQVEsRUFBSSxFQUdyQyxFQUdSLEdBQUksTUFBUSxHQUNYLE1BQUksQ0FBQyxTQUFVLFdBQVksV0FBWSxZQUFhLGlCQUFrQixhQUFhLEtBQUssR0FBUSxJQUFRLEtBQVEsRUFBSSxVQUFZLFdBQ3hILEVBR0QsRUFHUixHQUFJLG9CQUFzQixHQUN6QixNQUFPLGdDQUFnQyxLQUFLLEVBQUksa0JBQW9CLEVBQUksRUFHekUsR0FBSSxFQUFJLFlBQWMsWUFDckIsTUFBTyxHQUdSLEdBQUksZ0JBQWtCLEdBQUssQ0FDMUIsR0FBTSxHQUFVLFNBQVUsR0FBSSxzQkFBd0IsSUFBSSxNQUFNLEtBQUssR0FBSSxJQUV6RSxPQUFRLEVBQUksa0JBQ04sWUFDSixNQUFPLElBQVcsRUFBSSxFQUFJLE1BQ3RCLGlCQUNKLE1BQU8sSUFLVixNQUFJLGlCQUFpQixLQUFLLEVBQUksTUFDdEIsRUFHSiw4REFBOEQsS0FBSyxFQUFJLE9BSXZFLGFBQWUsR0FDWCxFQUdELEVBR1IsWUFBeUIsRUFBUSxDQUNoQyxHQUFNLEdBQVEsR0FBYyxFQUFRLEdBQVUsRUFBTyxPQUNyRCxNQUFPLElBQWUsR0FHdkIsR0FBTyxRQUFVLENBQ2hCLGNBQWUsR0FDZixPQUFRLEdBQWUsR0FBYyxHQUFNLEdBQUksT0FBTyxLQUN0RCxPQUFRLEdBQWUsR0FBYyxHQUFNLEdBQUksT0FBTyxRQ3JJdkQsa0JBSUEsR0FBTSxJQUFNLFFBQVEsT0FDZCxHQUFPLFFBQVEsUUFNckIsRUFBUSxLQUFPLEdBQ2YsRUFBUSxJQUFNLEdBQ2QsRUFBUSxXQUFhLEdBQ3JCLEVBQVEsS0FBTyxHQUNmLEVBQVEsS0FBTyxHQUNmLEVBQVEsVUFBWSxHQUNwQixFQUFRLFFBQVUsR0FBSyxVQUN0QixJQUFNLEdBQ04seUlBT0QsRUFBUSxPQUFTLENBQUMsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEdBRWpDLEdBQUksQ0FHSCxHQUFNLEdBQWdCLEtBRXRCLEFBQUksR0FBa0IsR0FBYyxRQUFVLEdBQWUsT0FBUyxHQUNyRSxHQUFRLE9BQVMsQ0FDaEIsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLEdBQ0EsR0FDQSxHQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsSUFDQSxJQUNBLElBQ0EsV0FHRCxFQVVGLEVBQVEsWUFBYyxPQUFPLEtBQUssUUFBUSxLQUFLLE9BQU8sR0FDOUMsV0FBVyxLQUFLLElBQ3JCLE9BQU8sQ0FBQyxFQUFLLElBQVEsQ0FFdkIsR0FBTSxHQUFPLEVBQ1gsVUFBVSxHQUNWLGNBQ0EsUUFBUSxZQUFhLENBQUMsRUFBRyxJQUNsQixFQUFFLGVBSVAsRUFBTSxRQUFRLElBQUksR0FDdEIsTUFBSSwyQkFBMkIsS0FBSyxHQUNuQyxFQUFNLEdBQ0EsQUFBSSw2QkFBNkIsS0FBSyxHQUM1QyxFQUFNLEdBQ0EsQUFBSSxJQUFRLE9BQ2xCLEVBQU0sS0FFTixFQUFNLE9BQU8sR0FHZCxFQUFJLEdBQVEsRUFDTCxHQUNMLElBTUgsYUFBcUIsQ0FDcEIsTUFBTyxVQUFZLEdBQVEsWUFDMUIsUUFBUSxFQUFRLFlBQVksUUFDNUIsR0FBSSxPQUFPLFFBQVEsT0FBTyxJQVM1QixZQUFvQixFQUFNLENBQ3pCLEdBQU0sQ0FBQyxVQUFXLEVBQU0sYUFBYSxLQUVyQyxHQUFJLEVBQVcsQ0FDZCxHQUFNLEdBQUksS0FBSyxNQUNULEVBQVksU0FBYyxHQUFJLEVBQUksRUFBSSxPQUFTLEdBQy9DLEVBQVMsS0FBSyxPQUFlLFlBRW5DLEVBQUssR0FBSyxFQUFTLEVBQUssR0FBRyxNQUFNO0FBQUEsR0FBTSxLQUFLO0FBQUEsRUFBTyxHQUNuRCxFQUFLLEtBQUssRUFBWSxLQUFPLEdBQU8sUUFBUSxTQUFTLEtBQUssTUFBUSxlQUVsRSxHQUFLLEdBQUssS0FBWSxFQUFPLElBQU0sRUFBSyxHQUkxQyxhQUFtQixDQUNsQixNQUFJLEdBQVEsWUFBWSxTQUNoQixHQUVELEdBQUksUUFBTyxjQUFnQixJQU9uQyxlQUFnQixFQUFNLENBQ3JCLE1BQU8sU0FBUSxPQUFPLE1BQU0sR0FBSyxPQUFPLEdBQUcsR0FBUTtBQUFBLEdBU3BELFlBQWMsRUFBWSxDQUN6QixBQUFJLEVBQ0gsUUFBUSxJQUFJLE1BQVEsRUFJcEIsTUFBTyxTQUFRLElBQUksTUFXckIsYUFBZ0IsQ0FDZixNQUFPLFNBQVEsSUFBSSxNQVVwQixZQUFjLEVBQU8sQ0FDcEIsRUFBTSxZQUFjLEdBRXBCLEdBQU0sR0FBTyxPQUFPLEtBQUssRUFBUSxhQUNqQyxPQUFTLEdBQUksRUFBRyxFQUFJLEVBQUssT0FBUSxJQUNoQyxFQUFNLFlBQVksRUFBSyxJQUFNLEVBQVEsWUFBWSxFQUFLLElBSXhELEdBQU8sUUFBVSxLQUFvQixHQUVyQyxHQUFNLENBQUMsZUFBYyxHQUFPLFFBTTVCLEdBQVcsRUFBSSxTQUFVLEVBQUcsQ0FDM0IsWUFBSyxZQUFZLE9BQVMsS0FBSyxVQUN4QixHQUFLLFFBQVEsRUFBRyxLQUFLLGFBQzFCLE1BQU07QUFBQSxHQUNOLElBQUksR0FBTyxFQUFJLFFBQ2YsS0FBSyxNQU9SLEdBQVcsRUFBSSxTQUFVLEVBQUcsQ0FDM0IsWUFBSyxZQUFZLE9BQVMsS0FBSyxVQUN4QixHQUFLLFFBQVEsRUFBRyxLQUFLLGdCQ3JRN0IsbUJBS0EsQUFBSSxNQUFPLFVBQVksYUFBZSxRQUFRLE9BQVMsWUFBYyxRQUFRLFVBQVksSUFBUSxRQUFRLE9BQ3hHLEdBQU8sUUFBVSxLQUVqQixHQUFPLFFBQVUsb0ZDT2xCLFlBQWtDLEVBQWtCLENBQ25ELE1BQU8sVUFBc0IsRUFBb0IsRUFBb0IsQ0FDcEUsTUFBTyxJQUFJLFNBQVEsQ0FBQyxFQUFTLElBQVUsQ0FDdEMsRUFBRyxLQUNGLEtBQ0EsRUFDQSxFQUNBLENBQUMsRUFBK0IsSUFBNkIsQ0FDNUQsQUFBSSxFQUNILEVBQU8sR0FFUCxFQUFRLFFBWGQsR0FBQSxRQUFBLHNIQ1hBLEdBQUEsUUFBQSxVQUNBLEdBQUEsR0FBQSxNQUNBLEdBQUEsR0FBQSxNQUVNLEdBQVEsR0FBQSxRQUFZLGNBRTFCLFlBQWlCLEVBQU0sQ0FDdEIsTUFBTyxTQUFRLElBQU0sTUFBTyxHQUFFLFlBQWUsV0FHOUMsYUFBeUIsQ0FDeEIsR0FBTSxDQUFFLFNBQVUsR0FBSSxPQUN0QixNQUFJLE9BQU8sSUFBVSxTQUFpQixHQUMvQixFQUFNLE1BQU07R0FBTSxLQUFLLEdBQUssRUFBRSxRQUFRLGdCQUFrQixJQUFPLEVBQUUsUUFBUSxpQkFBbUIsSUFRcEcsWUFDQyxFQUNBLEVBQStCLENBRS9CLE1BQU8sSUFBSSxJQUFZLE1BQU0sRUFBVSxHQUd4QyxBQUFBLFVBQVUsRUFBVyxDQTBEcEIsZUFBMkIsSUFBQSxZQUFZLENBbUJ0QyxZQUNDLEVBQ0EsRUFBZ0MsQ0FFaEMsUUFFQSxHQUFJLEdBQU8sRUFDWCxBQUFJLE1BQU8sSUFBYSxXQUN2QixLQUFLLFNBQVcsRUFDTixHQUNWLEdBQU8sR0FJUixLQUFLLFFBQVUsS0FDWCxHQUFRLE1BQU8sR0FBSyxTQUFZLFVBQ25DLE1BQUssUUFBVSxFQUFLLFNBS3JCLEtBQUssZUFBaUIsRUFDdEIsS0FBSyxXQUFhLEVBQ2xCLEtBQUssZ0JBQWtCLElBQ3ZCLEtBQUssUUFBVSxHQUNmLEtBQUssWUFBYyxHQUNuQixLQUFLLFNBQVcsR0FDaEIsS0FBSyxRQUFVLE1BR1osY0FBVyxDQUNkLE1BQUksT0FBTyxNQUFLLHFCQUF3QixTQUNoQyxLQUFLLG9CQUVOLEtBQXFCLElBQU0sTUFHL0IsYUFBWSxFQUFTLENBQ3hCLEtBQUssb0JBQXNCLEtBR3hCLFdBQVEsQ0FDWCxNQUFJLE9BQU8sTUFBSyxrQkFBcUIsU0FDN0IsS0FBSyxpQkFFTixLQUFxQixTQUFXLFdBR3BDLFVBQVMsRUFBUyxDQUNyQixLQUFLLGlCQUFtQixFQWN6QixTQUNDLEVBQ0EsRUFDQSxFQUFzQyxDQUt0QyxLQUFNLElBQUksT0FDVCwyRkFVRixXQUFXLEVBQW9CLEVBQXFCLENBQ25ELEdBQU0sR0FBSSxPQUFBLE9BQUEsR0FBd0IsR0FFbEMsQUFBSSxNQUFPLEdBQUssZ0JBQW1CLFdBQ2xDLEdBQUssZUFBaUIsTUFHbkIsRUFBSyxNQUFRLE1BQ2hCLEdBQUssS0FBTyxhQUdULEVBQUssTUFBUSxNQUNoQixHQUFLLEtBQU8sRUFBSyxlQUFpQixJQUFNLElBR3JDLEVBQUssVUFBWSxNQUNwQixHQUFLLFNBQVcsRUFBSyxlQUFpQixTQUFXLFNBRzlDLEVBQUssTUFBUSxFQUFLLE1BS3JCLE1BQU8sR0FBSyxLQUdiLE1BQU8sR0FBSyxNQUNaLE1BQU8sR0FBSyxTQUNaLE1BQU8sR0FBSyxjQUNaLE1BQU8sR0FBSyxZQUNaLE1BQU8sR0FBSyxpQkFJWixFQUFJLE1BQVEsR0FDWixFQUFJLGdCQUFrQixHQUV0QixHQUFJLEdBQVcsR0FDWCxFQUFrRCxLQUNoRCxFQUFZLEVBQUssU0FBVyxLQUFLLFFBRWpDLEVBQVUsQUFBQyxHQUE4QixDQUM5QyxBQUFJLEVBQUksV0FDUixHQUFJLEtBQUssUUFBUyxHQUdsQixFQUFJLFVBQVksS0FHWCxFQUFZLElBQUssQ0FDdEIsRUFBWSxLQUNaLEVBQVcsR0FDWCxHQUFNLEdBQTZCLEdBQUksT0FDdEMsc0RBQXNELE9BRXZELEVBQUksS0FBTyxXQUNYLEVBQVEsSUFHSCxFQUFnQixBQUFDLEdBQThCLENBQ3BELEFBQUksR0FDQSxLQUFjLE1BQ2pCLGNBQWEsR0FDYixFQUFZLE1BRWIsRUFBUSxLQUdILEVBQVcsQUFBQyxHQUErQixDQUNoRCxHQUFJLEVBQVUsT0FNZCxHQUxJLEdBQWEsTUFDaEIsY0FBYSxHQUNiLEVBQVksTUFHVCxHQUFRLEdBQVMsQ0FJcEIsR0FDQyw4Q0FDQSxFQUFPLFlBQVksTUFFbkIsRUFBNkIsV0FBVyxFQUFLLEdBQzlDLE9BR0QsR0FBSSxFQUFRLENBQ1gsRUFBTyxLQUFLLE9BQVEsSUFBSyxDQUN4QixLQUFLLFdBQVcsRUFBc0IsS0FFdkMsRUFBSSxTQUFTLEdBQ2IsT0FHRCxHQUFNLEdBQU0sR0FBSSxPQUNmLHFEQUFxRCxFQUFJLFVBQVUsRUFBSSxVQUV4RSxFQUFRLElBR1QsR0FBSSxNQUFPLE1BQUssVUFBYSxXQUFZLENBQ3hDLEVBQVEsR0FBSSxPQUFNLDhCQUNsQixPQUdELEFBQUssS0FBSyxxQkFDVCxDQUFJLEtBQUssU0FBUyxRQUFVLEVBQzNCLElBQU0sa0RBQ04sS0FBSyxvQkFBc0IsR0FBQSxRQUFVLEtBQUssV0FFMUMsS0FBSyxvQkFBc0IsS0FBSyxVQUk5QixNQUFPLElBQWMsVUFBWSxFQUFZLEdBQ2hELEdBQVksV0FBVyxFQUFXLElBRy9CLFFBQVUsSUFBUSxNQUFPLEdBQUssTUFBUyxVQUMxQyxHQUFLLEtBQU8sT0FBTyxFQUFLLE9BR3pCLEdBQUksQ0FDSCxHQUNDLHNDQUNBLEVBQUssU0FDTCxHQUFHLEVBQUksVUFBVSxFQUFJLFFBRXRCLFFBQVEsUUFBUSxLQUFLLG9CQUFvQixFQUFLLElBQU8sS0FDcEQsRUFDQSxTQUVPLEVBQVAsQ0FDRCxRQUFRLE9BQU8sR0FBSyxNQUFNLElBSTVCLFdBQVcsRUFBb0IsRUFBa0IsQ0FDaEQsR0FBTSx1QkFBd0IsRUFBTyxZQUFZLEtBQU0sR0FDdkQsRUFBTyxVQUdSLFNBQU8sQ0FDTixHQUFNLHNCQUF1QixLQUFLLFlBQVksT0F0UG5DLEVBQUEsTUFBSyxFQTJQbEIsRUFBWSxVQUFZLEVBQVksTUFBTSxZQXJUakMsSUFBQSxJQUFXLEtBd1RyQixHQUFBLFFBQVMsbUtDeFZULEdBQUEsSUFBQSxHQUFBLE1BR00sR0FBUSxHQUFBLFFBQVksMENBTzFCLFlBQ0MsRUFBZ0IsQ0FFaEIsTUFBTyxJQUFJLFNBQVEsQ0FBQyxFQUFTLElBQVUsQ0FLdEMsR0FBSSxHQUFnQixFQUNkLEVBQW9CLEdBRTFCLFlBQWEsQ0FDWixHQUFNLEdBQUksRUFBTyxPQUNqQixBQUFJLEVBQUcsRUFBTyxHQUNULEVBQU8sS0FBSyxXQUFZLEdBRzlCLFlBQWdCLENBQ2YsRUFBTyxlQUFlLE1BQU8sR0FDN0IsRUFBTyxlQUFlLFFBQVMsR0FDL0IsRUFBTyxlQUFlLFFBQVMsR0FDL0IsRUFBTyxlQUFlLFdBQVksR0FHbkMsV0FBaUIsRUFBVyxDQUMzQixHQUFNLHVCQUF3QixHQUcvQixZQUFjLENBQ2IsR0FBTSxTQUdQLFdBQWlCLEVBQVUsQ0FDMUIsSUFDQSxHQUFNLGFBQWMsR0FDcEIsRUFBTyxHQUdSLFdBQWdCLEVBQVMsQ0FDeEIsRUFBUSxLQUFLLEdBQ2IsR0FBaUIsRUFBRSxPQUVuQixHQUFNLEdBQVcsT0FBTyxPQUFPLEVBQVMsR0FHeEMsR0FBSSxBQUZpQixFQUFTLFFBQVE7O0tBRWpCLEdBQUksQ0FFeEIsR0FBTSxnREFDTixJQUNBLE9BR0QsR0FBTSxHQUFZLEVBQVMsU0FDMUIsUUFDQSxFQUNBLEVBQVMsUUFBUTtJQUVaLEVBQWEsQ0FBQyxFQUFVLE1BQU0sS0FBSyxHQUN6QyxHQUFNLGdDQUFpQyxHQUN2QyxFQUFRLENBQ1AsYUFDQSxhQUlGLEVBQU8sR0FBRyxRQUFTLEdBQ25CLEVBQU8sR0FBRyxRQUFTLEdBQ25CLEVBQU8sR0FBRyxNQUFPLEdBRWpCLE1BckVGLEdBQUEsUUFBQSxzZUNWQSxHQUFBLElBQUEsR0FBQSxRQUFBLFFBQ0EsR0FBQSxHQUFBLFFBQUEsUUFDQSxHQUFBLEdBQUEsUUFBQSxRQUNBLEdBQUEsR0FBQSxRQUFBLFdBQ0EsR0FBQSxHQUFBLE1BRUEsR0FBQSxLQUVBLEdBQUEsR0FBQSxNQUVNLEdBQVEsR0FBQSxRQUFZLDJCQWdCMUIsZ0JBQTZDLElBQUEsS0FBSyxDQUlqRCxZQUFZLEVBQXNDLENBQ2pELEdBQUksR0FNSixHQUxBLEFBQUksTUFBTyxJQUFVLFNBQ3BCLEVBQU8sR0FBQSxRQUFJLE1BQU0sR0FFakIsRUFBTyxFQUVKLENBQUMsRUFDSixLQUFNLElBQUksT0FDVCxnRUFHRixHQUFNLDRDQUE2QyxHQUNuRCxNQUFNLEdBRU4sR0FBTSxHQUFLLE9BQUEsT0FBQSxHQUFnQyxHQUkzQyxLQUFLLFlBQWMsRUFBSyxhQUFlLEdBQVEsRUFBTSxVQUdyRCxFQUFNLEtBQU8sRUFBTSxVQUFZLEVBQU0sS0FDakMsTUFBTyxHQUFNLE1BQVMsVUFDekIsR0FBTSxLQUFPLFNBQVMsRUFBTSxLQUFNLEtBRS9CLENBQUMsRUFBTSxNQUFRLEVBQU0sTUFDeEIsR0FBTSxLQUFPLEtBQUssWUFBYyxJQUFNLElBS25DLEtBQUssYUFBZSxDQUFFLGtCQUFtQixLQUM1QyxHQUFNLGNBQWdCLENBQUMsYUFHcEIsRUFBTSxNQUFRLEVBQU0sTUFLdkIsT0FBTyxHQUFNLEtBQ2IsTUFBTyxHQUFNLFVBR2QsS0FBSyxNQUFRLEVBU1IsU0FDTCxFQUNBLEVBQW9CLDBDQUVwQixHQUFNLENBQUUsUUFBTyxlQUFnQixLQUczQixFQUNKLEFBQUksRUFDSCxJQUFNLDRCQUE2QixHQUNuQyxFQUFTLEdBQUEsUUFBSSxRQUFRLElBRXJCLElBQU0sNEJBQTZCLEdBQ25DLEVBQVMsR0FBQSxRQUFJLFFBQVEsSUFHdEIsR0FBTSxHQUFPLE9BQUEsT0FBQSxHQUE2QixFQUFNLFNBRTVDLEVBQVUsV0FERyxHQUFHLEVBQUssUUFBUSxFQUFLO0VBSXRDLEFBQUksRUFBTSxNQUNULEdBQVEsdUJBQXlCLFNBQVMsT0FBTyxLQUNoRCxFQUFNLE1BQ0wsU0FBUyxhQUtaLEdBQUksQ0FBRSxPQUFNLE9BQU0sa0JBQW1CLEVBQ3JDLEFBQUssR0FBYyxFQUFNLElBQ3hCLElBQVEsSUFBSSxLQUViLEVBQVEsS0FBTyxFQUVmLEVBQVEsV0FBYSxRQUNyQixPQUFXLEtBQVEsUUFBTyxLQUFLLEdBQzlCLEdBQVcsR0FBRyxNQUFTLEVBQVE7RUFHaEMsR0FBTSxHQUF1QixHQUFBLFFBQW1CLEdBRWhELEVBQU8sTUFBTSxHQUFHO0dBRWhCLEdBQU0sQ0FDTCxhQUNBLFlBQ0csS0FBTSxHQUVWLEdBQUksSUFBZSxJQUFLLENBR3ZCLEdBRkEsRUFBSSxLQUFLLFNBQVUsSUFFZixFQUFLLGVBQWdCLENBQ3hCLEdBQU0sR0FBYSxFQUFLLFlBQWMsRUFBSyxLQUMzQyxHQUFJLENBQUMsRUFDSixLQUFNLElBQUksT0FBTSxvQ0FJakIsVUFBTSxzQ0FDQyxHQUFBLFFBQUksUUFBTyxPQUFBLE9BQUEsT0FBQSxPQUFBLEdBQ2QsR0FBSyxFQUFNLE9BQVEsV0FBWSxPQUFRLFNBQU8sQ0FDakQsU0FDQSxnQkFJRixNQUFPLEdBY1IsRUFBTyxVQUVQLEdBQU0sR0FBYSxHQUFJLElBQUEsUUFBSSxPQUMzQixTQUFXLFNBQVcsR0FHdEIsRUFBSSxLQUFLLFNBQVUsQUFBQyxHQUFpQixDQUNwQyxHQUFNLDZDQUNOLEdBQUEsUUFBTyxFQUFFLGNBQWMsUUFBVSxHQUtqQyxFQUFFLEtBQUssR0FDUCxFQUFFLEtBQUssUUFHRCxNQTVKVCxHQUFBLFFBQUEsR0FnS0EsWUFBZ0IsRUFBa0MsQ0FDakQsRUFBTyxTQUdSLFlBQXVCLEVBQWMsRUFBZSxDQUNuRCxNQUFPLFNBQVMsQ0FBQyxHQUFVLElBQVMsSUFBUSxHQUFVLElBQVMsS0FHaEUsWUFBaUIsRUFBd0IsQ0FDeEMsTUFBTyxPQUFPLElBQWEsU0FBVyxhQUFhLEtBQUssR0FBWSxHQUdyRSxZQUNDLEtBQ0csRUFBTyxDQUlWLEdBQU0sR0FBTSxHQUdSLEVBQ0osSUFBSyxJQUFPLEdBQ1gsQUFBSyxFQUFLLFNBQVMsSUFDbEIsR0FBSSxHQUFPLEVBQUksSUFHakIsTUFBTyx1SENoTlIsR0FBQSxHQUFBLE1BRUEsWUFDQyxFQUEyRCxDQUUzRCxNQUFPLElBQUksSUFBQSxRQUFpQixHQUc3QixBQUFBLFVBQVUsRUFBcUIsQ0FvQmpCLEVBQUEsZ0JBQWtCLEdBQUEsUUFFL0IsRUFBc0IsVUFBWSxHQUFBLFFBQWlCLFlBdEIxQyxJQUFBLElBQXFCLEtBeUIvQixHQUFBLFFBQVMsZ0ZDdENULEdBQUEsSUFFQSxHQUFBLFFBQUEsUUFFQSxHQUFBLEtBR0EsR0FBQSxTQUFBLEVBQUEsQ0FBbUMsR0FBQSxVQUFBLEVBQUEsR0FFakMsV0FBMEIsRUFBeUIsQ0FBbkQsR0FBQSxHQUNFLEVBQUEsS0FBQSxLQUFNLElBQVEsS0FEVSxFQUFBLFFBQUEsRUFFeEIsR0FBTSxHQUFRLEVBQUssVUFBVSxRQUM3QixTQUFLLE9BQVMsR0FDZCxFQUFLLE9BQVMsRUFDVCxHQUFLLE9BQThCLEdBQ3BDLEdBQUksSUFBSyxNQUFNLENBQUUsVUFBVyxHQUFPLFdBQVksR0FBSSxRQUFTLFFBTTNELFNBQUEsVUFBQSxVQUFQLFNBQWlCLEVBQVksQ0FDM0IsTUFBTyxNQUFLLE1BQU0sR0FBQSxxQkFBcUIsRUFBTyxLQUFLLE1BQU8sSUFNckQsRUFBQSxVQUFBLFlBQVAsU0FBbUIsRUFBb0MsQ0FDckQsTUFBTyxNQUFLLE1BQU0sR0FBQSx1QkFBdUIsRUFBUyxLQUFLLE1BQU8sSUFFbEUsR0F4Qm1DLEdBQUEsZUFBdEIsR0FBQSxjQUFBLGdGQ1BiLEdBQUEsSUFFQSxHQUFBLFFBQUEsU0FFQSxHQUFBLEtBR0EsR0FBQSxTQUFBLEVBQUEsQ0FBb0MsR0FBQSxVQUFBLEVBQUEsR0FFbEMsV0FBMEIsRUFBeUIsQ0FBbkQsR0FBQSxHQUNFLEVBQUEsS0FBQSxLQUFNLElBQVEsS0FEVSxFQUFBLFFBQUEsRUFFeEIsR0FBTSxHQUFRLEVBQUssVUFBVSxTQUM3QixTQUFLLE9BQVMsR0FDZCxFQUFLLE9BQVMsRUFDVCxHQUFLLE9BQThCLEdBQ3BDLEdBQUksSUFBTSxNQUFNLENBQUUsVUFBVyxHQUFPLFdBQVksR0FBSSxRQUFTLFFBTTVELFNBQUEsVUFBQSxVQUFQLFNBQWlCLEVBQVksQ0FDM0IsTUFBTyxNQUFLLE1BQU0sR0FBQSxxQkFBcUIsRUFBTyxLQUFLLE1BQU8sSUFNckQsRUFBQSxVQUFBLFlBQVAsU0FBbUIsRUFBb0MsQ0FDckQsTUFBTyxNQUFLLE1BQU0sR0FBQSx1QkFBdUIsRUFBUyxLQUFLLE1BQU8sSUFFbEUsR0F4Qm9DLEdBQUEsZUFBdkIsR0FBQSxlQUFBLHFFQ1BiLEdBQUEsSUFBQSxLQUFTLEdBQUEsY0FBQSxHQUFBLGNBQ1QsR0FBQSxJQUFBLEtBQVMsR0FBQSxjQUFBLEdBQUEsY0FDVCxHQUFBLElBQUEsS0FBUyxHQUFBLGVBQUEsR0FBQSw0RkNGVCxHQUFBLElBQ0EsR0FBQSxJQUNBLEdBQUEsSUFXQSxHQUFBLEtBQ0EsR0FBQSxLQU9BLEdBQUEsU0FBQSxFQUFBLENBQWlDLEdBQUEsVUFBQSxFQUFBLEdBQWpDLFlBQUEsZ0RBS1MsU0FBQSxVQUFBLG1CQUFQLFNBQTBCLEVBQWdCLEVBQWdCLENBQTFELEdBQUEsR0FBQSxLQUVNLEVBQVUsRUFDUixFQUNKLEdBQVEsRUFBSyxNQUFTLEVBQUssS0FBa0MsVUFDekQsRUFBdUIsR0FBcUIsQ0FDaEQsUUFBUyxHQUNULEtBQU0sV0FHUixHQUFJLENBQUMsR0FBQSxRQUFRLEdBQVksQ0FDdkIsR0FBSSxHQUFBLGNBQWMsR0FBWSxDQUc1QixHQUFNLEdBQVUsMkNBQTJDLEdBQUEsK0JBQStCLEdBRTFGLEdBQUEsZ0JBQWdCLGVBQWUsU0FBQSxFQUFLLENBQ2xDLEVBQU0sU0FBUyxpQkFBa0IsR0FBQSxnQkFBZ0IsTUFHbkQsRUFBTSxHQUFRLEVBQUssb0JBQXVCLEdBQUksT0FBTSxHQUNuRCxFQUFhLFFBQVUsTUFJeEIsR0FBTSxHQUFRLEVBQUssb0JBQXVCLEdBQUksT0FBTSxHQUNuRCxFQUFhLFFBQVUsRUFFMUIsRUFBVSxVQUFZLEdBR3hCLE1BQU8sSUFBSSxJQUFBLFlBQW1CLFNBQUMsRUFBUyxFQUFNLENBQzVDLE1BQUEsSUFBQSxXQUFXLEVBQWEsRUFBSyxVQUMxQixLQUFLLFNBQUEsRUFBSyxDQUNULEdBQUEsc0JBQXNCLEVBQU8sT0FBVyxRQUN4QyxHQUFBLHNCQUFzQixFQUFPLEdBRTdCLEVBQU8sR0FBQSxTQUFBLEdBQUEsU0FBQSxHQUNGLEdBQUssQ0FDUixTQUFVLEdBQVEsRUFBSyxjQUcxQixLQUFLLEtBQU0sTUFPWCxFQUFBLFVBQUEsaUJBQVAsU0FBd0IsRUFBaUIsRUFBaUMsRUFBZ0IsQ0FBMUYsR0FBQSxHQUFBLEtBQXlDLEFBQUEsSUFBQSxRQUFBLEdBQWtCLEdBQUEsU0FBUyxNQUNsRSxHQUFNLEdBQWUsQ0FDbkIsU0FBVSxHQUFRLEVBQUssU0FDdkIsTUFBSyxFQUNMLFFBQU8sR0FHVCxNQUFPLElBQUksSUFBQSxZQUFtQixTQUFBLEVBQU8sQ0FDbkMsR0FBSSxFQUFLLFNBQVMsa0JBQW9CLEdBQVEsRUFBSyxtQkFBb0IsQ0FDckUsR0FBTSxHQUFRLEVBQUssbUJBQXFCLEdBQUEsc0JBQXNCLEVBQUssb0JBQXNCLEdBQ3pGLEFBQUssR0FBQSxXQUFXLEVBQU8sRUFBSyxVQUN6QixLQUFLLFNBQUEsRUFBTSxDQUNWLEVBQU0sV0FBYSxDQUNqQixPQUFRLEdBQUEsc0JBQXNCLElBRWhDLEVBQVEsS0FFVCxLQUFLLEtBQU0sVUFBQSxDQUNWLEVBQVEsU0FHWixHQUFRLE1BUUosRUFBQSxVQUFBLGdCQUFWLFVBQUEsQ0FDRSxHQUFJLENBQUMsS0FBSyxTQUFTLElBRWpCLE1BQU8sR0FBQSxVQUFNLGdCQUFlLEtBQUEsTUFHOUIsR0FBTSxHQUFNLEdBQUksSUFBQSxJQUFJLEtBQUssU0FBUyxLQUU1QixFQUFnQixHQUFBLFNBQUEsR0FBQSxTQUFBLEdBQUEsU0FBQSxHQUFBLFNBQUEsR0FBQSxTQUFBLEdBQ2pCLEtBQUssU0FBUyxrQkFDYixLQUFLLFNBQVMsV0FBYSxDQUFFLFVBQVcsS0FBSyxTQUFTLFlBQ3RELEtBQUssU0FBUyxZQUFjLENBQUUsV0FBWSxLQUFLLFNBQVMsYUFDeEQsS0FBSyxTQUFTLFNBQVcsQ0FBRSxRQUFTLEtBQUssU0FBUyxVQUFVLENBQ2hFLElBQUssS0FBSyxTQUFTLElBQ25CLE9BQVEsS0FBSyxTQUFTLE9BQ3RCLFVBQVcsS0FBSyxTQUFTLFlBRzNCLE1BQUksTUFBSyxTQUFTLFVBQ1QsR0FBSSxNQUFLLFNBQVMsVUFBVSxHQUVqQyxFQUFJLFdBQWEsT0FDWixHQUFJLElBQUEsY0FBYyxHQUVwQixHQUFJLElBQUEsZUFBZSxJQUU5QixHQTdHaUMsR0FBQSxhQUFwQixHQUFBLFlBQUEsZ0ZDckJiLEdBQUEsSUFDQSxHQUFBLElBQ0EsR0FBQSxJQUNBLEdBQUEsSUFFQSxHQUFBLEtBU0EsR0FBQSxTQUFBLEVBQUEsQ0FBZ0MsR0FBQSxVQUFBLEVBQUEsR0FPOUIsV0FBbUIsRUFBb0IsQ0FBdkMsR0FBQSxHQUFBLEtBQ0UsU0FBUSxVQUFZLEVBQVEsV0FBYSxHQUN6QyxFQUFRLFVBQVUsSUFBTSxFQUFRLFVBQVUsS0FBTyxDQUMvQyxLQUFNLHlCQUNOLFNBQVUsQ0FDUixDQUNFLEtBQU0sbUJBQ04sUUFBUyxHQUFBLGNBR2IsUUFBUyxHQUFBLGFBR1gsRUFBQSxFQUFBLEtBQUEsS0FBTSxHQUFBLFlBQWEsSUFBUSxPQU90QixTQUFBLFVBQUEsaUJBQVAsU0FBd0IsRUFBZ0IsRUFBa0IsRUFBYSxDQUlyRSxHQUFJLEtBQUssU0FBUyxxQkFBdUIsS0FBSyxpQkFBbUIsRUFBTyxDQUN0RSxHQUFNLEdBQWlCLEVBQU0sb0JBSTdCLEFBQUksR0FBa0IsRUFBZSxTQUFXLEdBQUEscUJBQXFCLElBQ25FLEdBQWUsT0FBUyxHQUFBLHFCQUFxQixTQUlqRCxNQUFPLEdBQUEsVUFBTSxpQkFBZ0IsS0FBQSxLQUFDLEVBQVcsRUFBTSxJQU0xQyxFQUFBLFVBQUEsYUFBUCxTQUFvQixFQUFjLEVBQWtCLEVBQWEsQ0FJL0QsR0FBSSxLQUFLLFNBQVMscUJBQXVCLEtBQUssaUJBQW1CLEVBQU8sQ0FDdEUsR0FBTSxHQUFZLEVBQU0sTUFBUSxZQUMxQixFQUNKLElBQWMsYUFBZSxFQUFNLFdBQWEsRUFBTSxVQUFVLFFBQVUsRUFBTSxVQUFVLE9BQU8sT0FBUyxFQUc1RyxHQUFJLEVBQWEsQ0FDZixHQUFNLEdBQWlCLEVBQU0sb0JBSTdCLEFBQUksR0FBa0IsRUFBZSxTQUFXLEdBQUEscUJBQXFCLElBQ25FLEdBQWUsT0FBUyxHQUFBLHFCQUFxQixVQUtuRCxNQUFPLEdBQUEsVUFBTSxhQUFZLEtBQUEsS0FBQyxFQUFPLEVBQU0sSUFPbEMsRUFBQSxVQUFBLE1BQVAsU0FBYSxFQUFnQixPQUMzQixNQUFBLEdBQUEsS0FBSyxtQkFBZSxNQUFBLElBQUEsUUFBQSxFQUFFLFFBQ2YsRUFBQSxVQUFNLE1BQUssS0FBQSxLQUFDLElBSWQsRUFBQSxVQUFBLG1CQUFQLFVBQUEsQ0FDUSxHQUFBLEdBQUEsS0FBQSxTQUFFLEVBQUEsRUFBQSxRQUFTLEVBQUEsRUFBQSxZQUNqQixBQUFLLEVBR0gsS0FBSyxnQkFBa0IsR0FBSSxJQUFBLGVBQWUsS0FBSyxlQUFnQixDQUM3RCxRQUFPLEVBQ1AsWUFBVyxJQUpiLEdBQUEsT0FBTyxLQUFLLCtFQVlOLEVBQUEsVUFBQSxjQUFWLFNBQXdCLEVBQWMsRUFBZSxFQUFnQixDQUNuRSxTQUFNLFNBQVcsRUFBTSxVQUFZLE9BQy9CLEtBQUssYUFBYSxZQUNwQixHQUFNLFlBQWMsS0FBSyxhQUFhLFlBRWpDLEVBQUEsVUFBTSxjQUFhLEtBQUEsS0FBQyxFQUFPLEVBQU8sSUFPakMsRUFBQSxVQUFBLHVCQUFWLFVBQUEsQ0FDRSxBQUFLLEtBQUssZ0JBR1IsS0FBSyxnQkFBZ0IsOEJBRnJCLEdBQUEsT0FBTyxLQUFLLG1GQUtsQixHQW5IZ0MsR0FBQSxZQUFuQixHQUFBLFdBQUEsZ0ZDZGIsR0FBQSxJQUNBLEdBQUEsSUFDQSxHQUFBLElBQ0EsR0FBQSxRQUFBLFFBR0EsR0FBQSxVQUFBLENBQUEsWUFBQSxDQVNTLEtBQUEsS0FBZSxFQUFRLEdBS3ZCLFNBQUEsVUFBQSxVQUFQLFVBQUEsYUFDRSxPQUFvQixHQUFBLEdBQUEsU0FBQSxDQUFDLFFBQVMsT0FBUSxPQUFRLFFBQVMsUUFBTSxFQUFBLEVBQUEsT0FBQSxDQUFBLEVBQUEsS0FBQSxFQUFBLEVBQUEsT0FBRSxDQUExRCxHQUFNLEdBQUssRUFBQSxNQUNkLEdBQUEsS0FBSyxRQUFTLEVBQU8sR0FBcUIsd0dBWmhDLEVBQUEsR0FBYSxVQWU3QixLQW5CYSxHQUFBLFFBQUEsR0F3QmIsWUFBOEIsRUFBYSxDQUN6QyxNQUFPLFVBQXdCLEVBQWlDLENBQzlELEdBQUksR0FFSixPQUFRLE9BQ0QsUUFDSCxFQUFjLEdBQUEsU0FBUyxNQUN2QixVQUNHLFFBQ0gsRUFBYyxHQUFBLFNBQVMsTUFDdkIsVUFDRyxPQUNILEVBQWMsR0FBQSxTQUFTLEtBQ3ZCLFVBQ0csT0FDSCxFQUFjLEdBQUEsU0FBUyxRQUN2QixjQUVBLEVBQWMsR0FBQSxTQUFTLElBSTNCLE1BQU8sV0FBQSxDQUNMLEFBQUksR0FBQSxnQkFBZ0IsZUFBZSxLQUNqQyxHQUFBLGdCQUFnQixjQUNkLENBQ0UsU0FBVSxVQUNWLE1BQU8sRUFDUCxRQUFTLEdBQUssT0FBTyxNQUFNLE9BQVcsWUFFeEMsQ0FDRSxNQUFLLEdBQUEsU0FBTSxXQUNYLE1BQUssSUFLWCxFQUFzQixNQUFNLEtBQU0sMkZDbkV4QyxHQUFBLElBQ0EsR0FBQSxJQUdBLEdBQUEsUUFBQSxPQUVNLEdBQWUsR0FBQSxZQUFZLFFBQVEsU0FBUyxNQU1sRCxZQUFnQyxFQUFXLE9BQ25DLEVBQUcsR0FBRyxHQUFBLGdCQUNULGVBQVcsTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUNWLFNBQ0osTUFBTyxHQUFNLEVBQUksU0FBUyxFQUFJLE1BQVEsR0FKeEMsR0FBQSxnQkFBQSxHQWFBLFlBQTJCLEVBQThCLENBQ3ZELEdBQU0sR0FBVyxFQUFlLFVBQVksR0FDdEMsRUFBVyxFQUFlLFVBQVksRUFBZSxNQUFRLEdBRTdELEVBQ0osQ0FBQyxFQUFlLE1BQVEsRUFBZSxPQUFTLElBQU0sRUFBZSxPQUFTLElBQU0sR0FBSyxJQUFJLEVBQWUsS0FDeEcsRUFBTyxFQUFlLEtBQU8sRUFBZSxLQUFPLElBRXpELE1BQVUsR0FBUSxLQUFLLEVBQVcsRUFBTyxFQVIzQyxHQUFBLFdBQUEsR0FvQkEsWUFDRSxFQUNBLEVBQ0EsRUFBMkIsV0FHM0IsR0FBSSxDQUFDLEVBQ0gsTUFBTyxHQUlMLEdBQUEsR0FBQSxHQUFBLE9BQUEsRUFBQSxNQUFBLEtBQUEsR0FBQyxFQUFBLEVBQUEsR0FBUSxFQUFBLEVBQUEsR0FJYixNQUFJLEdBQWUsTUFBUSxDQUFDLEVBQWUsVUFFekMsR0FBZSxTQUFRLEdBQUEsR0FBSSxLQUFlLE1BQUEsSUFBQSxPQUFBLE9BQUEsRUFBRSxTQUFLLE1BQUEsSUFBQSxPQUFBLE9BQUEsRUFBRSxTQUNuRCxFQUFhLEdBQVcsSUFJMUIsSUFBSSxLQUFVLE1BQUEsSUFBQSxPQUFBLE9BQUEsRUFBRSxXQUFXLFNBQ3pCLEdBQWEsRUFBVyxNQUFNLElBR3RCLEVBQU0sSUFBSSxFQTFCdEIsR0FBQSxxQkFBQSxHQTZDQSxZQUE2QixFQUFRLENBQ25DLEdBQU0sR0FBMEIsQ0FDOUIsU0FBVSxFQUFJLFNBQ2QsU0FDRSxNQUFPLEdBQUksVUFBYSxVQUFZLEVBQUksU0FBUyxXQUFXLEtBQU8sRUFBSSxTQUFTLE1BQU0sRUFBRyxJQUFNLEVBQUksU0FDckcsS0FBTSxFQUFJLEtBQ1YsT0FBUSxFQUFJLE9BQ1osU0FBVSxFQUFJLFNBQ2QsS0FBTSxHQUFHLEdBQUksVUFBWSxJQUFLLEdBQUksUUFBVSxJQUM1QyxLQUFNLEVBQUksTUFFWixNQUFJLEdBQUksT0FBUyxJQUNmLEdBQVEsS0FBTyxPQUFPLEVBQUksT0FFeEIsR0FBSSxVQUFZLEVBQUksV0FDdEIsR0FBUSxLQUFVLEVBQUksU0FBUSxJQUFJLEVBQUksVUFFakMsRUFqQlQsR0FBQSxhQUFBLEdBcUNBLFlBQ0UsRUFDQSxFQUE4QixxQkFFMUIsRUFBVSxFQThDZCxNQTNDSSxPQUFPLEdBQVksRUFBWSxPQUFTLElBQU8sWUFDakQsR0FBVyxFQUFZLE9BSXpCLEFBQUksTUFBTyxHQUFZLElBQU8sU0FDNUIsRUFBaUIsR0FBYSxHQUFJLElBQUEsSUFBSSxFQUFZLEtBQzdDLEFBQUksRUFBWSxZQUFjLElBQUEsSUFDbkMsRUFBaUIsR0FBYSxFQUFZLElBRTFDLEVBQWlCLEVBQVksR0FJM0IsRUFBWSxTQUFXLEdBQ3pCLEdBQWMsR0FBQSxTQUFBLEdBQUEsU0FBQSxHQUFRLEdBQW1CLEVBQVksS0FJbkQsRUFBZSxXQUFhLFFBUzlCLENBQUksR0FBYSxPQUFTLEdBQWEsTUFBUSxFQUM3QyxFQUFlLFNBQ2IsSUFBQyxHQUFBLEtBQVUsTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUFFLGVBQW1CLE1BQUEsSUFBQSxPQUFBLE9BQUEsRUFBRSxXQUFRLElBQ3pDLEVBQWUsU0FBYSxNQUFBLElBQUEsT0FBQSxPQUFBLEVBQUUsV0FBUSxJQUN0QyxFQUFlLGlCQUFxQixNQUFBLElBQUEsT0FBQSxPQUFBLEVBQUUsVUFFekMsRUFBZSxTQUNiLElBQUMsRUFBZSxTQUFhLE1BQUEsSUFBQSxPQUFBLE9BQUEsRUFBRSxXQUFRLElBQ3RDLEVBQWUsaUJBQXFCLE1BQUEsSUFBQSxPQUFBLE9BQUEsRUFBRSxXQUFRLElBQzlDLEdBQUEsS0FBVSxNQUFBLElBQUEsT0FBQSxPQUFBLEVBQUUsZUFBbUIsTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUFFLFdBTXBDLEVBQ0ssQ0FBQyxFQUFnQixHQUVqQixDQUFDLEdBckRaLEdBQUEscUJBQUEsZ0ZDL0hBLEdBQUEsSUFFQSxHQUFBLElBSUEsR0FBQSxLQVNNLEdBQWUsR0FBQSxZQUFZLFFBQVEsU0FBUyxNQUdsRCxHQUFBLFVBQUEsQ0F3QkUsV0FBbUIsRUFBMEQsQ0FBMUQsQUFBQSxJQUFBLFFBQUEsR0FBQSxJQWZaLEtBQUEsS0FBZSxFQUFLLEdBZ0J6QixLQUFLLGFBQWUsTUFBTyxHQUFRLGFBQWdCLFlBQWMsR0FBTyxFQUFRLFlBQ2hGLEtBQUssU0FBVyxNQUFPLEdBQVEsU0FBWSxZQUFjLEdBQVEsRUFBUSxRQU1wRSxTQUFBLFVBQUEsVUFBUCxVQUFBLENBRUUsR0FBSSxHQUFDLEtBQUssY0FBZ0IsQ0FBQyxLQUFLLFVBSWhDLElBQU0sR0FBc0IsR0FBbUMsS0FBSyxhQUFjLEtBQUssVUFHakYsRUFBYSxRQUFRLFFBTzNCLEdBTkEsR0FBQSxLQUFLLEVBQVksTUFBTyxHQUN4QixHQUFBLEtBQUssRUFBWSxVQUFXLEdBS3hCLEdBQWEsT0FBUyxHQUFhLE1BQVEsRUFBRyxDQUVoRCxHQUFNLEdBQWMsUUFBUSxTQUM1QixHQUFBLEtBQUssRUFBYSxNQUFPLEdBQ3pCLEdBQUEsS0FBSyxFQUFhLFVBQVcsTUFoRG5CLEVBQUEsR0FBYSxPQW1EN0IsS0F2RGEsR0FBQSxLQUFBLEdBdUViLFlBQ0UsRUFDQSxFQUF1QixDQUV2QixNQUFPLFVBQXFDLEVBQTRDLENBQ3RGLE1BQU8sV0FBc0IsUUFBbUMsR0FBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLFVBQUEsT0FBQSxJQUFBLEVBQUEsR0FBQSxVQUFBLEdBRTlELEdBQU0sR0FBYSxLQUViLEVBQWMsR0FBQSxxQkFBcUIsS0FBTSxHQUN6QyxFQUFpQixFQUFZLEdBQzdCLEVBQWEsR0FBQSxXQUFXLEdBRzlCLEdBQUksR0FBQSxnQkFBZ0IsR0FDbEIsTUFBTyxHQUFzQixNQUFNLEVBQVksR0FHakQsR0FBSSxHQUNBLEVBRUUsRUFBUSxHQUFBLGdCQUFnQixXQUM5QixHQUFJLEdBQVMsR0FDWCxHQUFhLEVBQU0sVUFDZixHQUFZLENBQ2QsRUFBTyxFQUFXLFdBQVcsQ0FDM0IsWUFBZ0IsR0FBZSxRQUFVLE9BQUssSUFBSSxFQUNsRCxHQUFJLGdCQUdOLEdBQU0sR0FBb0IsRUFBSyxnQkFDL0IsR0FBQSxPQUFPLElBQ0wsd0NBQXdDLEVBQWlCLDJCQUEyQixFQUFVLE1BRWhHLEVBQWUsUUFBTyxHQUFBLFNBQUEsR0FBQSxTQUFBLEdBQVEsRUFBZSxTQUFPLENBQUUsZUFBZ0IsSUFLMUUsTUFBTyxHQUNKLE1BQU0sRUFBWSxHQUNsQixLQUFLLFdBQVksU0FBbUMsRUFBeUIsQ0FFNUUsR0FBTSxHQUFNLEtBQ1osQUFBSSxHQUNGLEdBQXFCLFdBQVksRUFBWSxFQUFLLEdBRWhELEdBQWtCLEdBQ2hCLEdBQUksWUFDTixFQUFLLGNBQWMsRUFBSSxZQUV6QixFQUFLLFlBQWMsR0FBQSxxQkFBcUIsRUFBSyxZQUFhLEVBQWdCLEdBQzFFLEVBQUssWUFHUixLQUFLLFFBQVMsVUFBQSxDQUViLEdBQU0sR0FBTSxLQUVaLEFBQUksR0FDRixHQUFxQixRQUFTLEVBQVksR0FFeEMsR0FBa0IsR0FDcEIsR0FBSyxjQUFjLEtBQ25CLEVBQUssWUFBYyxHQUFBLHFCQUFxQixFQUFLLFlBQWEsRUFBZ0IsR0FDMUUsRUFBSyxjQVVqQixZQUE4QixFQUFlLEVBQWEsRUFBeUIsRUFBMEIsQ0FDM0csQUFBSSxDQUFDLEdBQUEsZ0JBQWdCLGVBQWUsS0FJcEMsR0FBQSxnQkFBZ0IsY0FDZCxDQUNFLFNBQVUsT0FDVixLQUFNLENBQ0osT0FBUSxFQUFJLE9BQ1osWUFBYSxHQUFPLEVBQUksV0FDeEIsSUFBRyxHQUVMLEtBQU0sUUFFUixDQUNFLE1BQUssRUFDTCxRQUFTLEVBQ1QsU0FBVSx1RUN0TGhCLEdBQUEsSUFBQSxJQUNBLEdBQUEsSUFJTSxHQUEyQixJQUtqQyxZQUFrQyxFQUFZLENBRTVDLFFBQVEsTUFBTSxHQUFTLEVBQU0sTUFBUSxFQUFNLE1BQVEsR0FFbkQsR0FBTSxHQUFTLEdBQUEsZ0JBQWdCLFlBRS9CLEdBQUksSUFBVyxPQUFXLENBQ3hCLEdBQUEsT0FBTyxLQUFLLDhEQUNaLE9BQU8sUUFBUSxLQUFLLEdBQ3BCLE9BR0YsR0FBTSxHQUFVLEVBQU8sYUFDakIsRUFDSCxHQUFXLEVBQVEsaUJBQW1CLEVBQVEsZ0JBQWtCLEdBQUssRUFBUSxpQkFDOUUsR0FDRixHQUFBLE9BQ0UsRUFBTyxNQUFNLEdBQVMsS0FBSyxTQUFDLEVBQWUsQ0FDekMsQUFBSyxHQUNILEdBQUEsT0FBTyxLQUFLLDhFQUVkLE9BQU8sUUFBUSxLQUFLLE1BckIxQixHQUFBLGtCQUFBLHFFQ1ZBLEdBQUEsSUFBQSxJQUNBLEdBQUEsSUFDQSxHQUFBLElBR0EsR0FBQSxLQUtBLEdBQUEsVUFBQSxDQW1CRSxXQUNtQixFQU9YLENBUFcsQUFBQSxJQUFBLFFBQUEsR0FBQSxJQUFBLEtBQUEsU0FBQSxFQVhaLEtBQUEsS0FBZSxFQUFvQixHQUsxQixLQUFBLFFBQWtDLEtBQUssb0JBa0JoRCxTQUFBLFVBQUEsVUFBUCxVQUFBLENBQ0UsT0FBTyxRQUFRLEdBQUcsb0JBQXFCLEtBQUssUUFBUSxLQUFLLFFBTW5ELEVBQUEsVUFBQSxrQkFBUixVQUFBLENBQUEsR0FBQSxHQUFBLEtBQ1EsRUFBVSxJQUNaLEVBQTRCLEdBQzVCLEVBQTZCLEdBQzdCLEVBQTRCLEdBQzVCLEVBRUosTUFBTyxVQUFDLEVBQVksQ0FDbEIsR0FBSSxHQUFvQyxHQUFBLGtCQUNsQyxFQUFTLEdBQUEsZ0JBQWdCLFlBVS9CLEdBUkEsQUFBSSxFQUFLLFNBQVMsYUFFaEIsRUFBZSxFQUFLLFNBQVMsYUFDcEIsR0FBVSxFQUFPLGFBQWEsY0FFdkMsR0FBZSxFQUFPLGFBQWEsY0FHaEMsRUEyQkUsQUFBSSxFQUVULElBQUEsT0FBTyxLQUFLLGtHQUNaLEdBQUEsa0JBQWtCLElBQ1IsR0FlVixHQUFvQixHQUNwQixXQUFXLFVBQUEsQ0FDVCxBQUFLLEdBRUgsR0FBbUIsR0FDbkIsRUFBYSxFQUFZLEtBSTFCLFFBdkRrQixDQUNyQixHQUFNLEdBQU0sR0FBQSxnQkFLWixFQUFhLEVBQ2IsRUFBbUIsR0FFbkIsQUFBSSxFQUFJLGVBQWUsR0FDckIsRUFBSSxVQUFVLFNBQUMsRUFBWSxDQUN6QixFQUFNLFNBQVMsR0FBQSxTQUFTLE9BQ3hCLEVBQUksaUJBQWlCLEVBQU8sQ0FDMUIsa0JBQW1CLEVBQ25CLEtBQU0sQ0FBRSxVQUFXLENBQUUsUUFBUyxHQUFPLEtBQU0sMEJBRXhDLEdBQ0gsR0FBbUIsR0FDbkIsRUFBYSxNQUlaLEdBQ0gsR0FBbUIsR0FDbkIsRUFBYSxPQTlFVCxFQUFBLEdBQWEsc0JBaUg3QixLQXJIYSxHQUFBLG9CQUFBLHFFQ1ZiLEdBQUEsSUFBQSxJQUVBLEdBQUEsSUFFQSxHQUFBLEtBS0EsR0FBQSxVQUFBLENBY0UsV0FDbUIsRUFNRyxDQU5ILEFBQUEsSUFBQSxRQUFBLEdBQUEsQ0FNWCxLQUFNLFNBTkssS0FBQSxTQUFBLEVBTlosS0FBQSxLQUFlLEVBQXFCLEdBa0JwQyxTQUFBLFVBQUEsVUFBUCxVQUFBLENBQ0UsT0FBTyxRQUFRLEdBQUcscUJBQXNCLEtBQUsscUJBQXFCLEtBQUssUUFTbEUsRUFBQSxVQUFBLHFCQUFQLFNBQTRCLEVBQWEsRUFBWSxDQUNuRCxHQUFNLEdBQU0sR0FBQSxnQkFFWixHQUFJLENBQUMsRUFBSSxlQUFlLEdBQXVCLENBQzdDLEtBQUssaUJBQWlCLEdBQ3RCLE9BSUYsR0FBTSxHQUFXLEVBQVEsUUFBVSxFQUFRLE9BQU8sZUFBa0IsR0FFcEUsRUFBSSxVQUFVLFNBQUMsRUFBWSxDQUN6QixFQUFNLFNBQVMsNEJBQTZCLElBR3hDLEVBQVEsTUFDVixFQUFNLFFBQVEsRUFBUSxNQUVwQixFQUFRLE1BQ1YsRUFBTSxRQUFRLEVBQVEsTUFFcEIsRUFBUSxPQUNWLEVBQU0sVUFBVSxFQUFRLE9BRzFCLEVBQUksaUJBQWlCLEVBQVEsQ0FDM0Isa0JBQW1CLEVBQ25CLEtBQU0sQ0FBRSxVQUFXLENBQUUsUUFBUyxHQUFPLEtBQU0sNkJBSy9DLEtBQUssaUJBQWlCLElBT2hCLEVBQUEsVUFBQSxpQkFBUixTQUF5QixFQUFXLENBRWxDLEdBQU0sR0FDSixtTUFNRixBQUFJLEtBQUssU0FBUyxPQUFTLE9BQ3pCLEdBQUEsZUFBZSxVQUFBLENBQ2IsUUFBUSxLQUFLLEdBRWIsUUFBUSxNQUFNLEdBQVUsRUFBTyxNQUFRLEVBQU8sTUFBUSxLQUUvQyxLQUFLLFNBQVMsT0FBUyxVQUNoQyxJQUFBLGVBQWUsVUFBQSxDQUNiLFFBQVEsS0FBSyxLQUVmLEdBQUEsa0JBQWtCLEtBM0ZSLEVBQUEsR0FBYSx1QkErRjdCLEtBbkdhLEdBQUEscUJBQUEsZ0ZDVGIsR0FBQSxJQUVBLEdBQUEsSUFFQSxHQUFBLEtBRU0sR0FBYyxRQUNkLEdBQWdCLEVBR3RCLEdBQUEsVUFBQSxDQXdCRSxXQUFtQixFQUE4QyxDQUE5QyxBQUFBLElBQUEsUUFBQSxHQUFBLElBZkgsS0FBQSxLQUFlLEVBQWEsR0FnQjFDLEtBQUssS0FBTyxFQUFRLEtBQU8sR0FDM0IsS0FBSyxPQUFTLEVBQVEsT0FBUyxHQU0xQixTQUFBLFVBQUEsVUFBUCxVQUFBLENBQ0UsR0FBQSx3QkFBd0IsU0FBQyxFQUFjLEVBQWdCLENBQ3JELEdBQU0sR0FBTyxHQUFBLGdCQUFnQixlQUFlLEdBQzVDLEdBQUksRUFBTSxDQUNSLEdBQU0sR0FBVSxFQUFLLFVBQVksRUFBSyxTQUFTLEtBQUssR0FDcEQsTUFBTyxPQUFPLElBQVksV0FBYSxFQUFRLEVBQU8sR0FBUSxFQUVoRSxNQUFPLE1BT0gsRUFBQSxVQUFBLFNBQVIsU0FBaUIsRUFBYyxFQUFnQixDQUEvQyxHQUFBLEdBQUEsS0FDRSxNQUFJLENBQUMsRUFBTSxXQUFhLENBQUMsRUFBTSxVQUFVLFFBQVUsQ0FBQyxHQUFRLENBQUMsR0FBQSxhQUFhLEVBQUssa0JBQW1CLE9BQ3pGLEdBQUEsWUFBWSxRQUFRLEdBR3RCLEdBQUksSUFBQSxZQUFtQixTQUFBLEVBQU8sQ0FDbkMsQUFBSyxFQUFLLGVBQWUsRUFBSyxrQkFBNEIsRUFBSyxNQUM1RCxLQUFLLFNBQUMsRUFBeUIsQ0FDOUIsQUFBSSxHQUFTLEVBQU0sV0FBYSxFQUFNLFVBQVUsUUFDOUMsR0FBTSxVQUFVLE9BQU0sR0FBQSxTQUFPLEVBQWlCLEVBQU0sVUFBVSxTQUVoRSxFQUFRLEtBRVQsS0FBSyxLQUFNLFVBQUEsQ0FDVixFQUFRLFFBUVIsRUFBQSxVQUFBLGVBQVIsU0FBdUIsRUFBc0IsRUFBYSxFQUF1QixDQUFqRixHQUFBLEdBQUEsS0FDRSxNQUR3RCxLQUFBLFFBQUEsR0FBQSxJQUNwRCxDQUFDLEdBQUEsYUFBYSxFQUFNLEdBQU0sUUFBVSxFQUFNLE9BQVMsR0FBSyxLQUFLLE9BQ3hELEdBQUEsWUFBWSxRQUFRLEdBRXRCLEdBQUksSUFBQSxZQUF5QixTQUFDLEVBQVMsRUFBTSxDQUNsRCxBQUFLLEdBQUEsc0JBQXNCLEVBQU0sSUFDOUIsS0FBSyxTQUFDLEVBQW9CLENBQ3pCLEFBQUssRUFBSyxlQUFlLEVBQU0sR0FBTSxFQUFHLEdBQUEsU0FBQSxDQUFHLEdBQWMsSUFDdEQsS0FBSyxHQUNMLEtBQUssS0FBTSxVQUFBLENBQ1YsUUFHTCxLQUFLLEtBQU0sVUFBQSxDQUNWLFNBOUVNLEVBQUEsR0FBYSxlQWtGN0IsS0F0RmEsR0FBQSxhQUFBLGdGQ1RiLEdBQUEsUUFBQSxNQUNBLEdBQUEsUUFBQSxRQUVJLEdBR0osYUFBaUIsQ0FDZixHQUFJLENBQ0YsTUFBTyxTQUFRLE1BQVEsT0FBTyxLQUFLLFFBQVEsT0FBb0MsUUFDL0UsQ0FDQSxNQUFPLElBS1gsYUFBdUIsQ0FHckIsR0FBTSxHQUFhLFFBQVEsTUFBUSxRQUFRLEtBQUssT0FBVSxHQUNwRCxFQUFRLEtBQ1IsRUFFRixHQUNFLEVBRUYsR0FFSixTQUFNLFFBQVEsU0FBQSxFQUFJLENBQ2hCLEdBQUksR0FBTSxFQUdKLEVBQVEsVUFBQSxDQUNaLEdBQU0sR0FBTyxFQUdiLEdBRkEsRUFBTSxHQUFBLFFBQVEsR0FFVixHQUFDLEdBQU8sSUFBUyxHQUFPLEVBQUssSUFHakMsSUFBSSxFQUFVLFFBQVEsR0FBTyxFQUMzQixNQUFPLEtBR1QsR0FBTSxHQUFVLEdBQUEsS0FBSyxFQUFNLGdCQUczQixHQUZBLEVBQUssR0FBUSxHQUVULENBQUMsR0FBQSxXQUFXLEdBQ2QsTUFBTyxLQUdULEdBQUksQ0FDRixHQUFNLEdBQU8sS0FBSyxNQUFNLEdBQUEsYUFBYSxFQUFTLFNBSTlDLEVBQU0sRUFBSyxNQUFRLEVBQUssYUFDeEIsS0FLSixNQUdLLEVBSVQsR0FBQSxJQUFBLFVBQUEsQ0FBQSxZQUFBLENBU1MsS0FBQSxLQUFlLEVBQVEsR0FLdkIsU0FBQSxVQUFBLFVBQVAsU0FBaUIsRUFBNkQsRUFBd0IsQ0FBdEcsR0FBQSxHQUFBLEtBQ0UsRUFBd0IsU0FBQSxFQUFLLENBQzNCLE1BQUssS0FBZ0IsZUFBZSxHQUdwQyxHQUFBLFNBQUEsR0FBQSxTQUFBLEdBQ0ssR0FBSyxDQUNSLFFBQVMsRUFBSyxnQkFKUCxLQVVMLEVBQUEsVUFBQSxZQUFSLFVBQUEsQ0FDRSxNQUFLLEtBQ0gsSUFBYyxNQUVULElBM0JLLEVBQUEsR0FBYSxVQTZCN0IsS0FqQ2EsR0FBQSxRQUFBLHFFQ3BFYixHQUFBLElBQUEsS0FBUyxHQUFBLFFBQUEsR0FBQSxRQUNULEdBQUEsSUFBQSxLQUFTLEdBQUEsS0FBQSxHQUFBLEtBQ1QsR0FBQSxJQUFBLEtBQVMsR0FBQSxvQkFBQSxHQUFBLG9CQUNULEdBQUEsSUFBQSxLQUFTLEdBQUEscUJBQUEsR0FBQSxxQkFDVCxHQUFBLElBQUEsS0FBUyxHQUFBLGFBQUEsR0FBQSxhQUNULEdBQUEsSUFBQSxLQUFTLEdBQUEsUUFBQSxHQUFBLHFGQ0xULEdBQUEsSUFDQSxHQUFBLElBQ0EsR0FBQSxJQUNBLEdBQUEsSUFDQSxHQUFBLFFBQUEsVUFFQSxHQUFBLEtBQ0EsR0FBQSxLQUdhLEdBQUEsb0JBQXNCLENBRWpDLEdBQUksSUFBQSxhQUFpQixlQUNyQixHQUFJLElBQUEsYUFBaUIsaUJBRXJCLEdBQUksSUFBQSxRQUNKLEdBQUksSUFBQSxLQUVKLEdBQUksSUFBQSxvQkFDSixHQUFJLElBQUEscUJBRUosR0FBSSxJQUFBLGNBMEROLFlBQXFCLEVBQXlCLENBQXpCLEFBQUEsSUFBQSxRQUFBLEdBQUEsVUFDYixFQUFVLEdBQUEsaUJBQ1YsRUFBeUIsSUFBQSxFQUFRLGNBQVUsTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUFFLGVBQWdCLEdBY25FLEdBWkEsRUFBUSxvQkFDTixFQUFRLHNCQUF3QixHQUM1QixHQUNELEdBQUEsU0FDTyxNQUFNLFFBQVEsRUFBUSxxQkFBdUIsRUFBUSxvQkFBc0IsR0FBQSxvQkFDNUUsR0FHUCxFQUFRLE1BQVEsUUFBYSxRQUFRLElBQUksWUFDM0MsR0FBUSxJQUFNLFFBQVEsSUFBSSxZQUd4QixFQUFRLG1CQUFxQixRQUFhLFFBQVEsSUFBSSwwQkFBMkIsQ0FDbkYsR0FBTSxHQUFtQixXQUFXLFFBQVEsSUFBSSwyQkFDaEQsQUFBSSxTQUFTLElBQ1gsR0FBUSxpQkFBbUIsR0FJL0IsR0FBSSxFQUFRLFVBQVksT0FBVyxDQUNqQyxHQUFNLEdBQWtCLEtBQ3hCLEFBQUksSUFBb0IsT0FDdEIsRUFBUSxRQUFVLEVBR2xCLEVBQVEsb0JBQXNCLEdBSWxDLEFBQUksRUFBUSxjQUFnQixRQUFhLFFBQVEsSUFBSSxvQkFDbkQsR0FBUSxZQUFjLFFBQVEsSUFBSSxvQkFHaEMsRUFBUSxzQkFBd0IsUUFBYSxFQUFRLE1BQVEsUUFDL0QsR0FBUSxvQkFBc0IsSUFJM0IsR0FBZSxRQUNsQixHQUFBLGdCQUFnQixFQUFTLEdBQUEsaUJBRzNCLEdBQUEsWUFBWSxHQUFBLFdBQVksR0FFcEIsRUFBUSxxQkFDVixLQWpESixHQUFBLEtBQUEsR0EwREEsYUFBMkIsQ0FDekIsTUFBTyxJQUFBLGdCQUFnQixjQUR6QixHQUFBLFlBQUEsR0FZQSxZQUE0QixFQUFnQixnR0FFMUMsTUFETSxHQUFTLEdBQUEsZ0JBQWdCLFlBQzNCLEVBQ0YsQ0FBQSxFQUFPLEVBQU8sTUFBTSxJQUV0QixJQUFBLE9BQU8sS0FBSywyQ0FDWixDQUFBLEVBQU8sUUFBUSxRQUFRLFVBTnpCLEdBQUEsTUFBQSxHQWlCQSxZQUE0QixFQUFnQixnR0FFMUMsTUFETSxHQUFTLEdBQUEsZ0JBQWdCLFlBQzNCLEVBQ0YsQ0FBQSxFQUFPLEVBQU8sTUFBTSxJQUV0QixJQUFBLE9BQU8sS0FBSywyREFDWixDQUFBLEVBQU8sUUFBUSxRQUFRLFVBTnpCLEdBQUEsTUFBQSxHQVlBLFlBQTZDLEVBQW1CLENBQzlELEdBQUksSUFBVyxPQUNiLE1BQU8sR0FFVCxHQUFNLEdBQTZCLEdBQVUsRUFBTyxhQUNwRCxNQUFJLElBQWlCLEVBQWMsc0JBQXdCLE9BQ2xELEVBQWMsb0JBRWhCLEdBUlQsR0FBQSw2QkFBQSxHQWNBLFlBQWlDLEVBQWlCLENBRWhELEdBQUksUUFBUSxJQUFJLGVBQ2QsTUFBTyxTQUFRLElBQUksZUFJckIsR0FBTSxHQUFTLEdBQUEsa0JBQ2YsTUFBSSxHQUFPLGdCQUFrQixFQUFPLGVBQWUsR0FDMUMsRUFBTyxlQUFlLEdBSzdCLFFBQVEsSUFBSSxZQUVaLFFBQVEsSUFBSSxZQUVaLFFBQVEsSUFBSSx1QkFDWixRQUFRLElBQUksMEJBQ1osUUFBUSxJQUFJLDBCQUNaLFFBQVEsSUFBSSw2QkFFWixRQUFRLElBQUksd0JBQ1osUUFBUSxJQUFJLHdCQUNaLFFBQVEsSUFBSSwyQkFDWixFQTFCSixHQUFBLGlCQUFBLEdBaUNBLGFBQTZCLENBQzNCLEdBQU0sR0FBTSxHQUFBLGdCQUNaLEVBQUksZUFLSixRQUFRLEdBQUcsYUFBYyxVQUFBLE9BQ2pCLEVBQU8sR0FBRyxFQUFJLGNBQVUsTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUFFLGFBQzFCLEVBQWlCLENBQUMsR0FBQSxjQUFjLE9BQVEsR0FBQSxjQUFjLFNBSzVELEFBQUksR0FBVyxDQUFDLEVBQWUsU0FBUyxFQUFRLFNBQVMsRUFBSSw2RkMvT2pFLEdBQUEsUUFBQSxNQUNBLEdBQUEsUUFBQSxRQVNBLFlBQWdDLEVBQWlCLENBQy9DLEdBQU0sR0FBbUIsR0FBSyxRQUFRLEdBRXRDLEdBQUksQ0FBQyxHQUFHLFdBQVcsR0FDakIsS0FBTSxJQUFJLE9BQU0sMkJBQTJCLEVBQWdCLCtCQUc3RCxHQUFJLENBQUMsR0FBRyxTQUFTLEdBQWtCLGNBQ2pDLEtBQU0sSUFBSSxPQUFNLDJCQUEyQixFQUFnQixvQ0FNN0QsR0FBTSxHQUFxQixTQUFDLEVBQXlCLENBQ25ELE1BQU8sSUFBRyxZQUFZLEdBQW1CLE9BQU8sU0FBQyxFQUFvQixFQUFnQixDQUNuRixHQUFNLEdBQWMsR0FBSyxLQUFLLEVBQW1CLEdBRWpELE1BQUksSUFBRyxTQUFTLEdBQWEsY0FDM0IsR0FBQSxTQUFXLEVBQWEsRUFBbUIsSUFHN0MsR0FBQSxTQUFXLEVBQVEsQ0FBRSxLQUNwQixLQUdMLE1BQU8sR0FBbUIsR0FBa0IsSUFBSSxTQUFBLEVBQU8sQ0FBSSxNQUFBLElBQUssU0FBUyxFQUFrQixLQTFCN0YsR0FBQSxnQkFBQSxxRUNSQSxHQUFZLElBQVosQUFBQSxVQUFZLEVBQVUsQ0FFcEIsRUFBQSxHQUFBLEtBRUEsRUFBQSxpQkFBQSxvQkFFQSxFQUFBLGdCQUFBLGtCQUVBLEVBQUEsaUJBQUEsb0JBRUEsRUFBQSxTQUFBLFlBRUEsRUFBQSxrQkFBQSxxQkFFQSxFQUFBLGdCQUFBLG1CQUVBLEVBQUEsY0FBQSxnQkFFQSxFQUFBLFlBQUEsY0FFQSxFQUFBLGNBQUEsaUJBRUEsRUFBQSxhQUFBLGdCQUVBLEVBQUEsVUFBQSxZQUVBLEVBQUEsY0FBQSxpQkFFQSxFQUFBLG1CQUFBLHNCQUVBLEVBQUEsUUFBQSxVQUVBLEVBQUEsV0FBQSxlQUVBLEVBQUEsU0FBQSxjQWxDVSxHQUFBLEdBQUEsWUFBQSxJQUFBLFdBQVUsS0FzQ3RCLEFBQUEsVUFBaUIsRUFBVSxDQU96QixXQUE2QixFQUFrQixDQUM3QyxHQUFJLEVBQWEsS0FBTyxHQUFjLElBQ3BDLE1BQU8sR0FBVyxHQUdwQixHQUFJLEdBQWMsS0FBTyxFQUFhLElBQ3BDLE9BQVEsT0FDRCxLQUNILE1BQU8sR0FBVyxvQkFDZixLQUNILE1BQU8sR0FBVyxxQkFDZixLQUNILE1BQU8sR0FBVyxhQUNmLEtBQ0gsTUFBTyxHQUFXLGtCQUNmLEtBQ0gsTUFBTyxHQUFXLHVCQUNmLEtBQ0gsTUFBTyxHQUFXLDBCQUVsQixNQUFPLEdBQVcsZ0JBSXhCLEdBQUksR0FBYyxLQUFPLEVBQWEsSUFDcEMsT0FBUSxPQUNELEtBQ0gsTUFBTyxHQUFXLGtCQUNmLEtBQ0gsTUFBTyxHQUFXLGdCQUNmLEtBQ0gsTUFBTyxHQUFXLHlCQUVsQixNQUFPLEdBQVcsY0FJeEIsTUFBTyxHQUFXLGFBckNKLEVBQUEsYUFBWSxJQVBiLEdBQUEsR0FBQSxZQUFBLElBQUEsV0FBVSx1RUN4QzNCLEdBQUEsSUFBQSxJQUdhLEdBQUEsbUJBQXFCLEdBQUksUUFDcEMsNkRBWUYsWUFDRSxFQUVnQixDQUZoQixBQUFBLElBQUEsUUFBQSxHQUFBLEdBQStCLEdBQUEsZ0JBQzVCLGVBQVcsTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUNWLG9CQUVKLE1BQU8sQ0FBQyxDQUFDLEdBQVkscUJBQXNCLElBQVcsaUJBQW1CLElBTDNFLEdBQUEsa0JBQUEsR0FlQSxZQUF1QyxFQUFtQixDQUN4RCxHQUFNLEdBQVUsRUFBWSxNQUFNLEdBQUEsb0JBQ2xDLEdBQUksRUFBUyxDQUNYLEdBQUksR0FBYSxPQUNqQixNQUFJLEdBQVEsS0FBTyxJQUNqQixFQUFnQixHQUNQLEVBQVEsS0FBTyxLQUN4QixHQUFnQixJQUVYLENBQ0wsUUFBUyxFQUFRLEdBQ2pCLGNBQWEsRUFDYixhQUFjLEVBQVEsS0FaNUIsR0FBQSx1QkFBQSxHQW1CQSxZQUE0RCxFQUEwQixDQUExQixBQUFBLElBQUEsUUFBQSxHQUFXLEdBQUEseUJBQ3JFLE1BQU8sR0FBQSxHQUFBLEtBQUcsTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUFFLGNBQVEsTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUFJLGlCQUQxQixHQUFBLHFCQUFBLEdBUUEsWUFBd0IsRUFBWSxDQUNsQyxNQUFPLEdBQU8sSUFEaEIsR0FBQSxRQUFBLEdBUUEsWUFBd0IsRUFBWSxDQUNsQyxNQUFPLEdBQU8sSUFEaEIsR0FBQSxRQUFBLEdBS0EsR0FBQSxJQUFBLElBQVMsR0FBQSx5QkFBQSxHQUFBLDJGQ3ZFVCxHQUFBLElBQUEsSUFFQSxHQUFBLEtBQ0EsR0FBQSxLQUtBLGFBQTRDLENBQzFDLEdBQUEsMEJBQTBCLENBQ3hCLFNBQVUsR0FDVixLQUFNLFVBRVIsR0FBQSwwQkFBMEIsQ0FDeEIsU0FBVSxHQUNWLEtBQU0sdUJBUFYsR0FBQSw2QkFBQSxHQWNBLGFBQXNCLENBQ3BCLEdBQU0sR0FBb0IsR0FBQSx1QkFDMUIsQUFBSSxHQUNGLElBQUEsT0FBTyxJQUFJLDBCQUEwQixHQUFBLFdBQVcsY0FBYSw0QkFDN0QsRUFBa0IsVUFBVSxHQUFBLFdBQVcsbUZDeEI5QixHQUFBLGtCQUFvQixlQUVwQixHQUFBLGdDQUFrQyxDQUFDLGtCQUFtQixjQUFlLCtGQ0ZsRixHQUFBLElBRUEsR0FBQSxLQVFBLEdBQUEsVUFBQSxDQUtFLFdBQW1CLEVBQXFCLENBQXJCLEFBQUEsSUFBQSxRQUFBLEdBQUEsS0FKWixLQUFBLE1BQWdCLEdBS3JCLEtBQUssUUFBVSxFQVNWLFNBQUEsVUFBQSxJQUFQLFNBQVcsRUFBVSxDQUNuQixBQUFJLEtBQUssTUFBTSxPQUFTLEtBQUssUUFDM0IsRUFBSyxhQUFlLE9BRXBCLEtBQUssTUFBTSxLQUFLLElBR3RCLEtBdEJhLEdBQUEsYUFBQSxHQTJCYixHQUFBLElBQUEsVUFBQSxDQTBFRSxXQUFtQixFQUF5QixDQUMxQyxHQXZFSyxLQUFBLFFBQWtCLEdBQUEsUUFLbEIsS0FBQSxPQUFpQixHQUFBLFFBQVEsVUFBVSxJQW9CbkMsS0FBQSxlQUF5QixHQUFBLGtCQW9CekIsS0FBQSxLQUFxQyxHQU1yQyxLQUFBLEtBQStCLEdBb0JoQyxDQUFDLEVBQ0gsTUFBTyxNQUVULEFBQUksRUFBWSxTQUNkLE1BQUssUUFBVSxFQUFZLFNBRXpCLEVBQVksUUFDZCxNQUFLLE9BQVMsRUFBWSxRQUV4QixFQUFZLGNBQ2QsTUFBSyxhQUFlLEVBQVksY0FHOUIsV0FBYSxJQUNmLE1BQUssUUFBVSxFQUFZLFNBRXpCLEVBQVksSUFDZCxNQUFLLEdBQUssRUFBWSxJQUVwQixFQUFZLGFBQ2QsTUFBSyxZQUFjLEVBQVksYUFFN0IsRUFBWSxNQUNkLE1BQUssS0FBTyxFQUFZLE1BRXRCLEVBQVksTUFDZCxNQUFLLEtBQU8sRUFBWSxNQUV0QixFQUFZLFFBQ2QsTUFBSyxPQUFTLEVBQVksUUFFeEIsRUFBWSxnQkFDZCxNQUFLLGVBQWlCLEVBQVksZ0JBRWhDLEVBQVksY0FDZCxNQUFLLGFBQWUsRUFBWSxjQVE3QixTQUFBLFVBQUEsTUFBUCxTQUNFLEVBQThHLENBRTlHLE1BQU8sTUFBSyxXQUFXLElBTWxCLEVBQUEsVUFBQSxXQUFQLFNBQ0UsRUFBOEcsQ0FFOUcsR0FBTSxHQUFZLEdBQUksR0FBSSxHQUFBLFNBQUEsR0FBQSxTQUFBLEdBQ3JCLEdBQVcsQ0FDZCxhQUFjLEtBQUssT0FDbkIsUUFBUyxLQUFLLFFBQ2QsUUFBUyxLQUFLLFdBR2hCLFNBQVUsYUFBZSxLQUFLLGFBQzFCLEVBQVUsY0FDWixFQUFVLGFBQWEsSUFBSSxHQUc3QixFQUFVLFlBQWMsS0FBSyxZQUV0QixHQU1GLEVBQUEsVUFBQSxPQUFQLFNBQWMsRUFBYSxFQUFnQixPQUN6QyxZQUFLLEtBQUksR0FBQSxTQUFBLEdBQUEsU0FBQSxHQUFRLEtBQUssTUFBSSxHQUFBLEdBQUEsRUFBRyxHQUFNLEVBQUssSUFDakMsTUFPRixFQUFBLFVBQUEsUUFBUCxTQUFlLEVBQWEsRUFBVSxPQUNwQyxZQUFLLEtBQUksR0FBQSxTQUFBLEdBQUEsU0FBQSxHQUFRLEtBQUssTUFBSSxHQUFBLEdBQUEsRUFBRyxHQUFNLEVBQUssSUFDakMsTUFNRixFQUFBLFVBQUEsVUFBUCxTQUFpQixFQUFpQixDQUNoQyxZQUFLLE9BQVMsRUFDUCxNQU1GLEVBQUEsVUFBQSxjQUFQLFNBQXFCLEVBQWtCLENBQ3JDLEtBQUssT0FBTyxtQkFBb0IsT0FBTyxJQUN2QyxHQUFNLEdBQWEsR0FBQSxXQUFXLGFBQWEsR0FDM0MsTUFBSSxLQUFlLEdBQUEsV0FBVyxjQUM1QixLQUFLLFVBQVUsR0FFVixNQU1GLEVBQUEsVUFBQSxVQUFQLFVBQUEsQ0FDRSxNQUFPLE1BQUssU0FBVyxHQUFBLFdBQVcsSUFNN0IsRUFBQSxVQUFBLE9BQVAsU0FBYyxFQUFxQixDQUNqQyxLQUFLLGFBQWUsTUFBTyxJQUFpQixTQUFXLEVBQWUsR0FBQSxtQkFNakUsRUFBQSxVQUFBLGNBQVAsVUFBQSxDQUNFLEdBQUksR0FBZ0IsR0FDcEIsTUFBSSxNQUFLLFVBQVksUUFDbkIsR0FBZ0IsS0FBSyxRQUFVLEtBQU8sTUFFOUIsS0FBSyxRQUFPLElBQUksS0FBSyxPQUFTLEdBTW5DLEVBQUEsVUFBQSxVQUFQLFVBQUEsQ0FDRSxNQUFPLElBQUEsa0JBQWtCLENBQ3ZCLEtBQU0sS0FBSyxLQUNYLFlBQWEsS0FBSyxZQUNsQixhQUFjLEtBQUssYUFDbkIsR0FBSSxLQUFLLEdBQ1QsYUFBYyxLQUFLLGFBQ25CLFFBQVMsS0FBSyxRQUNkLE9BQVEsS0FBSyxPQUNiLGVBQWdCLEtBQUssZUFDckIsT0FBUSxLQUFLLE9BQ2IsS0FBTSxLQUFLLEtBQ1gsUUFBUyxLQUFLLFdBT1gsRUFBQSxVQUFBLGtCQUFQLFNBQXlCLEVBQXdCLGVBQy9DLFlBQUssS0FBSSxHQUFHLEVBQVksS0FBSSxHQUFJLElBQ2hDLEtBQUssWUFBYyxFQUFZLFlBQy9CLEtBQUssYUFBZSxFQUFZLGFBQ2hDLEtBQUssR0FBSyxFQUFZLEdBQ3RCLEtBQUssYUFBZSxFQUFZLGFBQ2hDLEtBQUssUUFBVSxFQUFZLFFBQzNCLEtBQUssT0FBTSxHQUFHLEVBQVksT0FBTSxHQUFJLEtBQUssUUFDekMsS0FBSyxlQUFjLEdBQUcsRUFBWSxlQUFjLEdBQUksS0FBSyxnQkFDekQsS0FBSyxPQUFTLEVBQVksT0FDMUIsS0FBSyxLQUFJLEdBQUcsRUFBWSxLQUFJLEdBQUksSUFDaEMsS0FBSyxRQUFPLEdBQUcsRUFBWSxRQUFPLEdBQUksS0FBSyxTQUVwQyxNQU1GLEVBQUEsVUFBQSxnQkFBUCxVQUFBLENBV0UsTUFBTyxJQUFBLGtCQUFrQixDQUN2QixLQUFNLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBUyxFQUFJLEtBQUssS0FBTyxPQUN0RCxZQUFhLEtBQUssWUFDbEIsR0FBSSxLQUFLLEdBQ1QsZUFBZ0IsS0FBSyxhQUNyQixRQUFTLEtBQUssT0FDZCxPQUFRLEtBQUssT0FDYixLQUFNLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBUyxFQUFJLEtBQUssS0FBTyxPQUN0RCxTQUFVLEtBQUssV0FPWixFQUFBLFVBQUEsT0FBUCxVQUFBLENBYUUsTUFBTyxJQUFBLGtCQUFrQixDQUN2QixLQUFNLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBUyxFQUFJLEtBQUssS0FBTyxPQUN0RCxZQUFhLEtBQUssWUFDbEIsR0FBSSxLQUFLLEdBQ1QsZUFBZ0IsS0FBSyxhQUNyQixRQUFTLEtBQUssT0FDZCxnQkFBaUIsS0FBSyxlQUN0QixPQUFRLEtBQUssT0FDYixLQUFNLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBUyxFQUFJLEtBQUssS0FBTyxPQUN0RCxVQUFXLEtBQUssYUFDaEIsU0FBVSxLQUFLLFdBR3JCLEtBOVNhLEdBQUEsS0FBQSxnRkN2Q2IsR0FBQSxJQUNBLEdBQUEsSUFRQSxHQUFBLElBRUEsR0FBQSxLQUdBLEdBQUEsU0FBQSxFQUFBLENBQWlDLEdBQUEsVUFBQSxFQUFBLEdBcUIvQixXQUFtQixFQUF3QyxFQUFTLENBQXBFLEdBQUEsR0FDRSxFQUFBLEtBQUEsS0FBTSxJQUFtQixLQWpCbkIsU0FBQSxjQUE4QixHQUtyQixFQUFBLEtBQWEsR0FBQSxnQkFjeEIsR0FBQSxhQUFhLEVBQUssR0FBQSxNQUNwQixHQUFLLEtBQU8sR0FHZCxFQUFLLEtBQU8sRUFBbUIsTUFBUSxHQUV2QyxFQUFLLFNBQVcsRUFBbUIsVUFBWSxHQUMvQyxFQUFLLFNBQVcsRUFBbUIsUUFHbkMsRUFBSyxZQUFjLElBTWQsU0FBQSxVQUFBLFFBQVAsU0FBZSxFQUFZLENBQ3pCLEtBQUssS0FBTyxHQU9QLEVBQUEsVUFBQSxpQkFBUCxTQUF3QixFQUFxQixDQUFyQixBQUFBLElBQUEsUUFBQSxHQUFBLEtBQ2pCLEtBQUssY0FDUixNQUFLLGFBQWUsR0FBSSxJQUFBLGFBQWEsSUFFdkMsS0FBSyxhQUFhLElBQUksT0FPakIsRUFBQSxVQUFBLGdCQUFQLFNBQXVCLEVBQTBCLENBQy9DLEtBQUssY0FBYSxHQUFBLFNBQUEsR0FBUSxJQU9yQixFQUFBLFVBQUEsWUFBUCxTQUFtQixFQUFnQyxDQUNqRCxLQUFLLFNBQVEsR0FBQSxTQUFBLEdBQUEsU0FBQSxHQUFRLEtBQUssVUFBYSxJQU1sQyxFQUFBLFVBQUEsT0FBUCxTQUFjLEVBQXFCLENBQW5DLEdBQUEsR0FBQSxlQUVFLEdBQUksS0FBSyxlQUFpQixPQVkxQixJQVJLLEtBQUssTUFDUixJQUFBLE9BQU8sS0FBSyx1RUFDWixLQUFLLEtBQU8sMkJBSWQsRUFBQSxVQUFNLE9BQU0sS0FBQSxLQUFDLEdBRVQsS0FBSyxVQUFZLEdBQU0sQ0FFekIsR0FBQSxPQUFPLElBQUksb0ZBRVgsR0FBQSxHQUFBLEdBQUEsS0FBSyxLQUNGLGVBQVcsTUFBQSxJQUFBLE9BQUEsT0FBQSxHQUFBLEdBQ1YsZ0JBQVksTUFBQSxJQUFBLE9BQUEsT0FBQSxHQUFBLEVBQUEsS0FBQSxJQUNiLG1CQUFlLE1BQUEsSUFBQSxRQUFBLEVBQUEsS0FBQSxFQUFHLEdBQUEsUUFBUSxXQUFZLGVBRXpDLE9BR0YsR0FBTSxHQUFnQixLQUFLLGFBQWUsS0FBSyxhQUFhLE1BQU0sT0FBTyxTQUFBLEVBQUMsQ0FBSSxNQUFBLEtBQU0sR0FBUSxFQUFFLGVBQWdCLEdBRTlHLEFBQUksS0FBSyxVQUFZLEVBQWMsT0FBUyxHQUMxQyxNQUFLLGFBQWUsRUFBYyxPQUFPLFNBQUMsRUFBaUIsRUFBa0IsQ0FDM0UsTUFBSSxHQUFLLGNBQWdCLEVBQVEsYUFDeEIsRUFBSyxhQUFlLEVBQVEsYUFBZSxFQUFPLEVBRXBELElBQ04sY0FHTCxHQUFNLEdBQXFCLENBQ3pCLFNBQVUsQ0FDUixNQUFPLEtBQUssbUJBRWQsTUFBTyxFQUNQLGdCQUFpQixLQUFLLGVBQ3RCLEtBQU0sS0FBSyxLQUNYLFVBQVcsS0FBSyxhQUNoQixZQUFhLEtBQUssS0FDbEIsS0FBTSxjQUNOLFdBQVksS0FBSyxVQUdiLEVBQWtCLE9BQU8sS0FBSyxLQUFLLGVBQWUsT0FBUyxFQUVqRSxNQUFJLElBQ0YsSUFBQSxPQUFPLElBQUksb0RBQXFELEtBQUssVUFBVSxLQUFLLGNBQWUsT0FBVyxJQUM5RyxFQUFZLGFBQWUsS0FBSyxlQUdsQyxHQUFBLE9BQU8sSUFBSSx1QkFBdUIsS0FBSyxHQUFFLGlCQUFpQixLQUFLLEtBQUksS0FFNUQsS0FBSyxLQUFLLGFBQWEsS0FNekIsRUFBQSxVQUFBLFVBQVAsVUFBQSxDQUNFLEdBQU0sR0FBYyxFQUFBLFVBQU0sVUFBUyxLQUFBLE1BRW5DLE1BQU8sSUFBQSxrQkFBaUIsR0FBQSxTQUFBLEdBQUEsU0FBQSxHQUNuQixHQUFXLENBQ2QsS0FBTSxLQUFLLEtBQ1gsUUFBUyxLQUFLLGFBT1gsRUFBQSxVQUFBLGtCQUFQLFNBQXlCLEVBQXNDLE9BQzdELFNBQUEsVUFBTSxrQkFBaUIsS0FBQSxLQUFDLEdBRXhCLEtBQUssS0FBSSxHQUFHLEVBQW1CLEtBQUksR0FBSSxJQUV2QyxLQUFLLFNBQVcsRUFBbUIsUUFFNUIsTUFFWCxHQWpLaUMsR0FBQSxNQUFwQixHQUFBLFlBQUEsZ0ZDWmIsRUFBQSxJQUVBLEdBQUEsS0FDQSxHQUFBLEtBQ0EsR0FBQSxLQUNBLEdBQUEsS0FFYSxHQUFBLHFCQUF1QixJQUN2QixHQUFBLG1CQUFxQixJQUtsQyxHQUFBLElBQUEsU0FBQSxFQUFBLENBQWlELEdBQUEsVUFBQSxFQUFBLEdBQy9DLFdBQ21CLEVBQ0EsRUFDVixFQUNQLEVBQWUsQ0FEUixBQUFBLElBQUEsUUFBQSxHQUFBLElBSFQsR0FBQSxHQU1FLEVBQUEsS0FBQSxLQUFNLElBQU8sS0FMSSxTQUFBLGNBQUEsRUFDQSxFQUFBLGFBQUEsRUFDVixFQUFBLGtCQUFBLElBU0YsU0FBQSxVQUFBLElBQVAsU0FBVyxFQUFVLENBQXJCLEdBQUEsR0FBQSxLQUdFLEFBQUksRUFBSyxTQUFXLEtBQUssbUJBRXZCLEdBQUssT0FBUyxTQUFDLEVBQXFCLENBQ2xDLEVBQUssYUFBZSxNQUFPLElBQWlCLFNBQVcsRUFBZSxFQUFBLGtCQUN0RSxFQUFLLGFBQWEsRUFBSyxTQUlyQixFQUFLLGVBQWlCLFFBQ3hCLEtBQUssY0FBYyxFQUFLLFNBSTVCLEVBQUEsVUFBTSxJQUFHLEtBQUEsS0FBQyxJQUVkLEdBL0JpRCxHQUFBLGNBQXBDLEdBQUEsNEJBQUEsR0F3Q2IsR0FBQSxJQUFBLFNBQUEsRUFBQSxDQUFxQyxHQUFBLFVBQUEsRUFBQSxHQXFCbkMsV0FDRSxFQUNpQixFQUtBLEVBRUEsRUFBeUIsQ0FGekIsQUFBQSxJQUFBLFFBQUEsR0FBdUIsR0FBQSxzQkFFdkIsSUFBQSxRQUFBLEdBQUEsSUFUbkIsR0FBQSxHQVdFLEVBQUEsS0FBQSxLQUFNLEVBQW9CLElBQVMsS0FUbEIsU0FBQSxTQUFBLEVBS0EsRUFBQSxhQUFBLEVBRUEsRUFBQSxTQUFBLEVBNUJaLEVBQUEsV0FBc0MsR0FNckMsRUFBQSxrQkFBNEIsRUFHNUIsRUFBQSxVQUFxQixHQUVaLEVBQUEsdUJBQWlELEdBcUI1RCxHQUFZLEdBRWQsSUFBdUIsR0FJdkIsRUFBQSxPQUFPLElBQUksK0NBQStDLEVBQUssUUFDL0QsRUFBUyxlQUFlLFNBQUEsRUFBSyxDQUFJLE1BQUEsR0FBTSxRQUFRLE1BR2pELEVBQUssYUFBZSxXQUFXLFVBQUEsQ0FDN0IsQUFBSyxFQUFLLFdBQ1IsRUFBSyxVQUVOLEVBQUssZ0JBSUgsU0FBQSxVQUFBLE9BQVAsU0FBYyxFQUF3QyxTQUF0RCxFQUFBLEtBSUUsR0FKWSxJQUFBLFFBQUEsR0FBdUIsRUFBQSxtQkFDbkMsS0FBSyxVQUFZLEdBQ2pCLEtBQUssV0FBYSxHQUVkLEtBQUssYUFBYyxDQUNyQixFQUFBLE9BQU8sSUFBSSxzQ0FBdUMsR0FBSSxNQUFLLEVBQWUsS0FBTSxjQUFlLEtBQUssUUFFcEcsT0FBdUIsR0FBQSxHQUFBLFNBQUEsS0FBSyx3QkFBc0IsRUFBQSxFQUFBLE9BQUEsQ0FBQSxFQUFBLEtBQUEsRUFBQSxFQUFBLE9BQUUsQ0FBL0MsR0FBTSxHQUFRLEVBQUEsTUFDakIsRUFBUyxLQUFNLHFHQUdqQixLQUFLLGFBQWEsTUFBUSxLQUFLLGFBQWEsTUFBTSxPQUFPLFNBQUMsRUFBVSxDQUVsRSxHQUFJLEVBQUssU0FBVyxFQUFLLE9BQ3ZCLE1BQU8sR0FJVCxBQUFLLEVBQUssY0FDUixHQUFLLGFBQWUsRUFDcEIsRUFBSyxVQUFVLEdBQUEsV0FBVyxXQUMxQixFQUFBLE9BQU8sSUFBSSwwREFBMkQsS0FBSyxVQUFVLEVBQU0sT0FBVyxLQUd4RyxHQUFNLEdBQVcsRUFBSyxlQUFpQixFQUN2QyxNQUFLLElBQ0gsRUFBQSxPQUFPLElBQ0wsNkVBQ0EsS0FBSyxVQUFVLEVBQU0sT0FBVyxJQUc3QixJQUdULEVBQUEsT0FBTyxJQUFJLDBDQUVYLEdBQUEsT0FBTyxJQUFJLHVDQUliLE1BQUksTUFBSyxVQUNQLEdBQXVCLEtBQUssVUFHdkIsRUFBQSxVQUFNLE9BQU0sS0FBQSxLQUFDLElBVWYsRUFBQSxVQUFBLDZCQUFQLFNBQW9DLEVBQThCLENBQ2hFLEtBQUssdUJBQXVCLEtBQUssSUFNNUIsRUFBQSxVQUFBLGlCQUFQLFNBQXdCLEVBQWUsQ0FBdkMsR0FBQSxHQUFBLEtBQ0UsR0FBSSxDQUFDLEtBQUssYUFBYyxDQUN0QixHQUFNLEdBQWUsU0FBQyxFQUFVLENBQzlCLEFBQUksRUFBSyxXQUdULEVBQUssY0FBYyxJQUVmLEVBQWMsU0FBQyxFQUFVLENBQzdCLEFBQUksRUFBSyxXQUdULEVBQUssYUFBYSxJQUdwQixLQUFLLGFBQWUsR0FBSSxJQUE0QixFQUFjLEVBQWEsS0FBSyxPQUFRLEdBRzVGLEVBQUEsT0FBTyxJQUFJLHNCQUNYLEtBQUssaUJBRVAsS0FBSyxhQUFhLElBQUksT0FPaEIsRUFBQSxVQUFBLGNBQVIsU0FBc0IsRUFBYyxDQUNsQyxBQUFJLEtBQUssY0FDUCxjQUFhLEtBQUssY0FDbEIsS0FBSyxhQUFlLFFBRXRCLEVBQUEsT0FBTyxJQUFJLDJCQUEyQixHQUN0QyxLQUFLLFdBQVcsR0FBVSxHQUMxQixFQUFBLE9BQU8sSUFBSSxpQ0FBa0MsT0FBTyxLQUFLLEtBQUssWUFBWSxTQU9wRSxFQUFBLFVBQUEsYUFBUixTQUFxQixFQUFjLENBQW5DLEdBQUEsR0FBQSxLQVFFLEdBUEksS0FBSyxXQUFXLElBQ2xCLEdBQUEsT0FBTyxJQUFJLHlCQUF5QixHQUVwQyxNQUFPLE1BQUssV0FBVyxHQUN2QixFQUFBLE9BQU8sSUFBSSxpQ0FBa0MsT0FBTyxLQUFLLEtBQUssWUFBWSxTQUd4RSxPQUFPLEtBQUssS0FBSyxZQUFZLFNBQVcsRUFBRyxDQUM3QyxHQUFNLEdBQVUsS0FBSyxhQUdmLEVBQU0sRUFBQSxrQkFBb0IsRUFBVSxJQUUxQyxXQUFXLFVBQUEsQ0FDVCxBQUFLLEVBQUssV0FDUixHQUFLLE9BQU8sR0FBQSxrQkFBbUIsR0FBQSxnQ0FBZ0MsSUFDL0QsRUFBSyxPQUFPLEtBRWIsS0FRQyxFQUFBLFVBQUEsTUFBUixVQUFBLENBRUUsR0FBSSxNQUFLLFVBSVQsSUFBTSxHQUFrQixPQUFPLEtBQUssS0FBSyxZQUFZLEtBQUssSUFFMUQsQUFBSSxJQUFvQixLQUFLLHFCQUMzQixLQUFLLG1CQUFxQixFQUUxQixLQUFLLGtCQUFvQixFQUczQixLQUFLLHFCQUF1QixFQUU1QixBQUFJLEtBQUssbUJBQXFCLEVBQzVCLEdBQUEsT0FBTyxJQUFJLHlFQUNYLEtBQUssVUFBVSxHQUFBLFdBQVcsa0JBQzFCLEtBQUssT0FBTyxHQUFBLGtCQUFtQixHQUFBLGdDQUFnQyxJQUMvRCxLQUFLLFVBRUwsS0FBSyxtQkFPRCxFQUFBLFVBQUEsZUFBUixVQUFBLENBQUEsR0FBQSxHQUFBLEtBQ0UsRUFBQSxPQUFPLElBQUkseUNBQXlDLEtBQUssbUJBQ3pELFdBQVcsVUFBQSxDQUNULEVBQUssU0FDSixHQUFBLHFCQUVQLEdBek5xQyxHQUFBLGFBQXhCLEdBQUEsZ0JBQUEsR0E4TmIsWUFBZ0MsRUFBUyxDQUN2QyxHQUFJLEVBQUssQ0FDUCxHQUFNLEdBQVEsRUFBSSxXQUNsQixHQUFJLEVBQU8sQ0FDVCxHQUFNLEdBQWMsRUFBTSxpQkFDMUIsQUFBSSxHQUNGLEVBQU0sUUFBUSw2RkMzUnRCLEdBQUEsSUFDQSxHQUFBLElBU0EsR0FBQSxJQUVBLEdBQUEsS0FDQSxHQUFBLEtBQ0EsR0FBQSxLQUNBLEdBQUEsS0FHQSxhQUFxQixDQUNuQixHQUFNLEdBQVEsS0FBSyxXQUNuQixHQUFJLEVBQU8sQ0FDVCxHQUFNLEdBQU8sRUFBTSxVQUNuQixHQUFJLEVBQ0YsTUFBTyxDQUNMLGVBQWdCLEVBQUssaUJBSTNCLE1BQU8sR0FlVCxZQUF1QyxFQUFnQixFQUFrQixFQUFnQyxDQUV2RyxHQUFJLENBQUMsR0FBQSxrQkFBa0IsR0FDckIsU0FBWSxRQUFVLEdBQ2YsRUFJVCxHQUFJLEVBQVksVUFBWSxPQUMxQixTQUFZLFlBQVksQ0FDdEIsb0JBQXFCLENBQUUsT0FBUSxHQUFBLDBCQUEwQixZQUVwRCxFQUtULEdBQUksR0E0QkosTUEzQkEsQUFBSSxPQUFPLEdBQVEsZUFBa0IsV0FDbkMsR0FBYSxFQUFRLGNBQWMsR0FDbkMsRUFBWSxZQUFZLENBQ3RCLG9CQUFxQixDQUNuQixPQUFRLEdBQUEsMEJBQTBCLFFBRWxDLEtBQU0sT0FBTyxPQUdaLEFBQUksRUFBZ0IsZ0JBQWtCLE9BQzNDLEdBQWEsRUFBZ0IsY0FDN0IsRUFBWSxZQUFZLENBQ3RCLG9CQUFxQixDQUFFLE9BQVEsR0FBQSwwQkFBMEIsZ0JBRzNELEdBQWEsRUFBUSxpQkFDckIsRUFBWSxZQUFZLENBQ3RCLG9CQUFxQixDQUNuQixPQUFRLEdBQUEsMEJBQTBCLEtBRWxDLEtBQU0sT0FBTyxPQU9mLEFBQUMsR0FBa0IsR0FPbEIsRUFjTCxHQUFZLFFBQVUsS0FBSyxTQUFZLEVBR25DLEFBQUMsRUFBWSxRQVNqQixJQUFBLE9BQU8sSUFBSSxzQkFBc0IsRUFBWSxHQUFFLGtCQUFrQixFQUFZLE1BQ3RFLEdBVEwsSUFBQSxPQUFPLElBQ0wsb0dBQW9HLE9BQ2xHLEdBQ0QsS0FFSSxJQXRCUCxJQUFBLE9BQU8sSUFDTCw0Q0FDRSxPQUFPLEdBQVEsZUFBa0IsV0FDN0Isb0NBQ0EsK0VBR1IsRUFBWSxRQUFVLEdBQ2YsR0FmUCxJQUFBLE9BQU8sS0FBSyxvRUFDWixFQUFZLFFBQVUsR0FDZixHQXFDWCxZQUEyQixFQUFhLENBR3RDLE1BQUksT0FBTSxJQUFnQixDQUFFLE9BQU8sSUFBUyxVQUFZLE1BQU8sSUFBUyxXQUN0RSxJQUFBLE9BQU8sS0FDTCwwR0FBMEcsS0FBSyxVQUM3RyxHQUNELFlBQVksS0FBSyxVQUFVLE1BQU8sSUFBSyxLQUVuQyxJQUlMLEVBQU8sR0FBSyxFQUFPLEVBQ3JCLElBQUEsT0FBTyxLQUFLLG9GQUFvRixFQUFJLEtBQzdGLElBRUYsR0FrQlQsWUFFRSxFQUNBLEVBQTZDLFNBRXZDLEVBQVUsSUFBQSxLQUFLLGVBQVcsTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUFFLGVBQWdCLEdBRTlDLEVBQWMsR0FBSSxJQUFBLFlBQVksRUFBb0IsTUFDdEQsU0FBYyxHQUFPLEVBQWEsRUFBTyxHQUFBLFNBQUEsQ0FDdkMsY0FBZSxFQUFtQixjQUNsQyxtQkFBa0IsR0FDZixJQUVELEVBQVksU0FDZCxFQUFZLGlCQUFpQixHQUFBLEVBQVEsZ0JBQVksTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUFFLFVBRTlDLEVBTVQsWUFDRSxFQUNBLEVBQ0EsRUFDQSxFQUNBLEVBQTZDLFNBRXZDLEVBQVUsSUFBQSxFQUFJLGVBQVcsTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUFFLGVBQWdCLEdBRTdDLEVBQWMsR0FBSSxJQUFBLGdCQUFnQixFQUFvQixFQUFLLEVBQWEsR0FDNUUsU0FBYyxHQUFPLEVBQWEsRUFBTyxHQUFBLFNBQUEsQ0FDdkMsY0FBZSxFQUFtQixjQUNsQyxtQkFBa0IsR0FDZixJQUVELEVBQVksU0FDZCxFQUFZLGlCQUFpQixHQUFBLEVBQVEsZ0JBQVksTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUFFLFVBRTlDLEVBbEJULEdBQUEscUJBQUEsR0F3QkEsYUFBcUMsQ0FDbkMsR0FBTSxHQUFVLEdBQUEsaUJBQ2hCLEFBQUksQ0FBQyxFQUFRLFlBR2IsR0FBUSxXQUFXLFdBQWEsRUFBUSxXQUFXLFlBQWMsR0FDNUQsRUFBUSxXQUFXLFdBQVcsa0JBQ2pDLEdBQVEsV0FBVyxXQUFXLGlCQUFtQixJQUU5QyxFQUFRLFdBQVcsV0FBVyxjQUNqQyxHQUFRLFdBQVcsV0FBVyxhQUFlLEtBVmpELEdBQUEsc0JBQUEsR0FpQkEsYUFBc0MsQ0FDcEMsR0FBTSxHQUFVLEdBQUEsaUJBQ2hCLEdBQUksRUFBQyxFQUFRLFdBSWIsSUFBTSxHQUFpRSxDQUNyRSxRQUFBLFVBQUEsQ0FDRSxHQUFNLEdBQWMsR0FBQSxlQUFlLEdBQVEsNkJBRzNDLE1BQU8sSUFBSSxHQUFZLE9BRXpCLFNBQUEsVUFBQSxDQUNFLEdBQU0sR0FBYyxHQUFBLGVBQWUsR0FBUSw2QkFHM0MsTUFBTyxJQUFJLEdBQVksTUFBTSxDQUFFLFNBQVUsTUFFM0MsTUFBQSxVQUFBLENBQ0UsR0FBTSxHQUFjLEdBQUEsZUFBZSxHQUFRLDZCQUczQyxNQUFPLElBQUksR0FBWSxPQUV6QixHQUFBLFVBQUEsQ0FDRSxHQUFNLEdBQWMsR0FBQSxlQUFlLEdBQVEsZ0NBRzNDLE1BQU8sSUFBSSxHQUFZLFdBSXJCLEVBQWlCLE9BQU8sS0FBSyxHQUNoQyxPQUFPLFNBQUEsRUFBVSxDQUFJLE1BQUEsQ0FBQyxDQUFDLEdBQUEsV0FBVyxLQUNsQyxJQUFJLFNBQUEsRUFBRyxDQUNOLEdBQUksQ0FDRixNQUFPLEdBQTRCLFVBQ25DLENBQ0EsVUFHSCxPQUFPLFNBQUEsRUFBQyxDQUFJLE1BQUEsS0FFZixBQUFJLEVBQWUsT0FBUyxHQUMxQixHQUFRLFdBQVcsYUFBWSxHQUFBLFNBQVEsRUFBUSxXQUFXLGNBQWdCLEdBQVEsS0FPdEYsYUFBbUMsQ0FDakMsS0FHSSxHQUFBLGFBQ0YsS0FJRixHQUFBLCtCQVRGLEdBQUEsb0JBQUEsZ0ZDclJBLEdBQUEsSUFrREEsR0FBQSxVQUFBLENBb0JFLFdBQW1CLEVBQW1FLENBQW5FLEFBQUEsSUFBQSxRQUFBLEdBQUEsSUFYWixLQUFBLEtBQWUsRUFBUSxHQVk1QixLQUFLLFFBQVUsRUFBUSxRQUFVLEVBQVEsSUFDekMsS0FBSyxTQUFZLE9BQU0sUUFBUSxFQUFRLFNBQVcsRUFBUSxRQUFVLElBQUksT0FBTyxPQU0xRSxTQUFBLFVBQUEsVUFBUCxVQUFBLENBQ0UsR0FBSSxDQUFDLEtBQUssUUFBUyxDQUNqQixHQUFBLE9BQU8sTUFBTSxxREFDYixPQUVGLEdBQXNCLEtBQUssUUFBUyxLQUFLLFdBN0I3QixFQUFBLEdBQWEsVUErQjdCLEtBbkNhLEdBQUEsUUFBQSxHQW9EYixZQUFjLEVBQWMsRUFBYyxDQUN4QyxHQUFNLEdBQVEsRUFBRyxPQUVqQixPQUFRLE9BQ0QsR0FDSCxNQUFPLFVBQThCLEVBQWMsRUFBNEMsQ0FDN0YsR0FBTSxHQUFjLEVBQUkscUJBQ3hCLEdBQUksRUFBYSxDQUNmLEdBQU0sR0FBTyxFQUFZLFdBQVcsQ0FDbEMsWUFBYSxFQUFHLEtBQ2hCLEdBQUksc0JBQXNCLElBRTVCLEVBQUksS0FBSyxTQUFVLFVBQUEsQ0FDakIsRUFBSyxXQUdULE1BQU8sR0FBRyxLQUFLLEtBQU0sRUFBSyxRQUd6QixHQUNILE1BQU8sVUFFTCxFQUNBLEVBQ0EsRUFBZ0IsT0FFVixFQUFjLEVBQUkscUJBQ2xCLEVBQUksR0FBRyxLQUFXLE1BQUEsSUFBQSxPQUFBLE9BQUEsRUFBRSxXQUFXLENBQ25DLFlBQWEsRUFBRyxLQUNoQixHQUFJLHNCQUFzQixJQUU1QixFQUFHLEtBQUssS0FBTSxFQUFLLEVBQUssVUFBQSxRQUE4QixHQUFBLEdBQUEsRUFBQSxFQUFBLEVBQUEsVUFBQSxPQUFBLElBQUEsRUFBQSxHQUFBLFVBQUEsU0FDcEQsQUFBQSxHQUFBLEtBQUksTUFBQSxJQUFBLFFBQUEsRUFBRSxTQUNOLEVBQUssS0FBSSxNQUFULEVBQUksR0FBQSxTQUFBLENBQU0sTUFBUyxXQUlwQixHQUNILE1BQU8sVUFFTCxFQUNBLEVBQ0EsRUFDQSxFQUFnQixPQUVWLEVBQWMsRUFBSSxxQkFDbEIsRUFBSSxHQUFHLEtBQVcsTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUFFLFdBQVcsQ0FDbkMsWUFBYSxFQUFHLEtBQ2hCLEdBQUksc0JBQXNCLElBRTVCLEVBQUcsS0FBSyxLQUFNLEVBQUssRUFBSyxFQUFLLFVBQUEsUUFBOEIsR0FBQSxHQUFBLEVBQUEsRUFBQSxFQUFBLFVBQUEsT0FBQSxJQUFBLEVBQUEsR0FBQSxVQUFBLFNBQ3pELEFBQUEsR0FBQSxLQUFJLE1BQUEsSUFBQSxRQUFBLEVBQUUsU0FDTixFQUFLLEtBQUksTUFBVCxFQUFJLEdBQUEsU0FBQSxDQUFNLE1BQVMsZUFLdkIsS0FBTSxJQUFJLE9BQU0sZ0RBQWdELElBZXRFLFlBQTRCLEVBQWlCLEVBQWMsQ0FDekQsTUFBTyxHQUFLLElBQUksU0FBQyxFQUFZLENBQzNCLE1BQUksT0FBTyxJQUFRLFdBQ1YsR0FBSyxFQUFLLEdBR2YsTUFBTSxRQUFRLEdBQ1QsRUFBSSxJQUFJLFNBQUMsRUFBVSxDQUN4QixNQUFJLE9BQU8sSUFBTSxXQUNSLEdBQUssRUFBRyxHQUVWLElBSUosSUFPWCxZQUF5QixFQUFnQixFQUFjLENBQ3JELEdBQU0sR0FBbUIsRUFBTyxHQUVoQyxTQUFPLEdBQVUsVUFBQSxRQUFTLEdBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxVQUFBLE9BQUEsSUFBQSxFQUFBLEdBQUEsVUFBQSxHQUN4QixNQUFPLEdBQWlCLEtBQUksTUFBckIsRUFBZ0IsR0FBQSxTQUFBLENBQU0sTUFBUyxHQUFtQixFQUFNLE1BRzFELEVBTVQsWUFBK0IsRUFBZ0IsRUFBc0IsQ0FBdEIsQUFBQSxJQUFBLFFBQUEsR0FBQSxJQUM3QyxFQUFRLFFBQVEsU0FBQyxFQUFjLENBQUssTUFBQSxJQUFnQixFQUFRLHdFQ2pOOUQsR0FBQSxJQUFBLElBYUEsR0FBQSxVQUFBLENBYUUsV0FBbUIsRUFBdUIsQ0FBdkIsQUFBQSxJQUFBLFFBQUEsR0FBQSxJQUpaLEtBQUEsS0FBZSxFQUFTLEdBSzdCLEtBQUssYUFBZSxDQUFDLENBQUMsRUFBUSxZQU16QixTQUFBLFVBQUEsVUFBUCxTQUFpQixFQUF1QyxFQUF3QixPQUN4RSxFQUFNLEdBQUEsV0FBK0QsTUFFM0UsR0FBSSxDQUFDLEVBQUssQ0FDUixHQUFBLE9BQU8sTUFBTSw0REFDYixPQUdGLEdBQUksS0FBSyxjQUFnQixDQUFBLElBQUMsRUFBSSxVQUFNLE1BQUEsSUFBQSxPQUFBLE9BQUEsRUFBRSxRQUFRLENBQzVDLEdBQUEsT0FBTyxNQUFNLG1FQUNiLE9BR00sR0FBQSxHQUFBLE1BQUEsYUFBQSxFQUFBLE9BQUEsR0FBQSxPQVNSLEdBQUEsS0FBSyxFQUFPLFVBQVcsUUFBUyxTQUFTLEVBQW1DLENBQzFFLE1BQU8sVUFBd0IsRUFBaUIsRUFBaUIsRUFBaUIsV0FDMUUsRUFBUSxJQUFnQixXQUN4QixFQUFVLEdBQUcsS0FBSyxNQUFBLElBQUEsT0FBQSxPQUFBLEVBQUUsVUFDcEIsRUFBSSxHQUFHLEtBQVUsTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUFFLFdBQVcsQ0FDbEMsWUFBYSxNQUFPLElBQVcsU0FBVyxFQUFVLEVBQTRCLEtBQ2hGLEdBQUksT0FHTixHQUFJLE1BQU8sSUFBYSxXQUN0QixNQUFPLEdBQUssS0FBSyxLQUFNLEVBQVEsRUFBUSxTQUFTLEVBQVksRUFBZSxPQUN6RSxBQUFBLEdBQUEsS0FBSSxNQUFBLElBQUEsUUFBQSxFQUFFLFNBQ04sRUFBUyxFQUFLLEtBSWxCLEdBQUksTUFBTyxJQUFXLFdBQ3BCLE1BQU8sR0FBSyxLQUFLLEtBQU0sRUFBUSxTQUFTLEVBQVksRUFBZSxPQUNqRSxBQUFBLEdBQUEsS0FBSSxNQUFBLElBQUEsUUFBQSxFQUFFLFNBQ04sRUFBTyxFQUFLLEtBSWhCLEdBQU0sR0FBSyxNQUFPLElBQVcsWUFBYyxFQUFLLEtBQUssS0FBTSxFQUFRLEdBQVUsRUFBSyxLQUFLLEtBQU0sR0FFN0YsTUFBSSxJQUFBLFdBQVcsR0FDTCxFQUF3QixLQUFLLFNBQUMsRUFBWSxPQUNoRCxNQUFBLEdBQUEsS0FBSSxNQUFBLElBQUEsUUFBQSxFQUFFLFNBQ0MsSUFJWCxJQUFBLEtBQUksTUFBQSxJQUFBLFFBQUEsRUFBRSxTQUNDLE9BdkVDLEVBQUEsR0FBYSxXQTJFN0IsS0EvRWEsR0FBQSxTQUFBLHFFQ2JiLEdBQUEsSUFBQSxJQU9BLEdBQUEsVUFBQSxDQUFBLFlBQUEsQ0FTUyxLQUFBLEtBQWUsRUFBTSxHQUtyQixTQUFBLFVBQUEsVUFBUCxTQUFpQixFQUF1QyxFQUF3QixDQUM5RSxHQUFNLEdBQU0sR0FBQSxXQUE0QiwyQkFFeEMsR0FBSSxDQUFDLEVBQUssQ0FDUixHQUFBLE9BQU8sTUFBTSw0REFDYixPQU9GLEdBQUEsS0FBSyxFQUFLLGNBQWUsU0FBUyxFQUFnQixDQUNoRCxNQUFPLFVBQXdCLEVBQWtCLEVBQWlCLEVBQWlCLFNBQzNFLEVBQVEsSUFBZ0IsV0FDeEIsRUFBVSxHQUFHLEtBQUssTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUFFLFVBQ3BCLEVBQUksR0FBRyxLQUFVLE1BQUEsSUFBQSxPQUFBLE9BQUEsRUFBRSxXQUFXLENBQ2xDLFlBQWEsTUFBTyxJQUFZLFNBQVcsRUFBVyxFQUE0QixJQUNsRixHQUFJLE9BR04sTUFBSSxPQUFPLElBQWEsV0FDZixFQUFLLEtBQUssS0FBTSxFQUFTLEVBQVEsU0FBUyxFQUFZLEVBQWlCLEVBQWUsT0FDM0YsQUFBQSxHQUFBLEtBQUksTUFBQSxJQUFBLFFBQUEsRUFBRSxTQUNOLEVBQVMsRUFBSyxFQUFRLEtBSXRCLE1BQU8sSUFBVyxXQUNiLEVBQUssS0FBSyxLQUFNLEVBQVMsU0FBUyxFQUFZLEVBQWlCLEVBQWUsT0FDbkYsQUFBQSxHQUFBLEtBQUksTUFBQSxJQUFBLFFBQUEsRUFBRSxTQUNOLEVBQU8sRUFBSyxFQUFRLEtBSWpCLEVBQUssS0FBSyxLQUFNLEVBQVMsRUFBUSxPQTdDaEMsRUFBQSxHQUFhLFFBaUQ3QixLQXJEYSxHQUFBLE1BQUEsZ0ZDUGIsR0FBQSxJQU1NLEdBQWEsQ0FDakIsWUFDQSxZQUNBLGlCQUNBLGNBQ0EsZ0JBQ0EsYUFDQSxZQUNBLFdBQ0EsT0FDQSxZQUNBLGNBQ0EseUJBQ0EsT0FDQSxVQUNBLG1CQUNBLG9CQUNBLG1CQUNBLFVBQ0EsY0FDQSxtQkFDQSwwQkFDQSxhQUNBLFlBQ0EsV0FDQSxZQUNBLFVBQ0EseUJBQ0EsU0FDQSxhQUNBLFFBQ0EsYUFDQSxhQU9JLEdBRUYsQ0FHRixVQUFXLENBQUMsY0FDWixlQUFnQixDQUFDLFNBQ2pCLFlBQWEsQ0FBQyxlQUNkLGNBQWUsQ0FBQyxjQUNoQixXQUFZLENBQUMsVUFDYixVQUFXLENBQUMsVUFDWixTQUFVLENBQUMsTUFBTyxTQUNsQixVQUFXLENBQUMsYUFDWixLQUFNLENBQUMsU0FDUCxRQUFTLENBQUMsU0FDVixpQkFBa0IsQ0FBQyxVQUNuQixrQkFBbUIsQ0FBQyxTQUFVLGVBQzlCLGlCQUFrQixDQUFDLFNBQVUsVUFDN0IsWUFBYSxDQUFDLFdBQ2QsV0FBWSxDQUFDLFFBQ2IsVUFBVyxDQUFDLE9BQ1osVUFBVyxDQUFDLE1BQU8sVUFDbkIsT0FBUSxDQUFDLFdBQ1QsV0FBWSxDQUFDLFNBQVUsT0FDdkIsV0FBWSxDQUFDLFNBQVUsVUFDdkIsVUFBVyxDQUFDLFNBQVUsV0FtQnhCLEdBQUEsVUFBQSxDQWtCRSxXQUFtQixFQUEwQixDQUExQixBQUFBLElBQUEsUUFBQSxHQUFBLElBVFosS0FBQSxLQUFlLEVBQU0sR0FVMUIsS0FBSyxZQUFjLE1BQU0sUUFBUSxFQUFRLFlBQ3JDLEVBQVEsV0FDTixHQUNOLEtBQUssb0JBQXNCLHNCQUF3QixHQUFVLEVBQVEsbUJBQXFCLEdBQzFGLEtBQUssYUFBZSxDQUFDLENBQUMsRUFBUSxZQU16QixTQUFBLFVBQUEsVUFBUCxTQUFpQixFQUF1QyxFQUF3QixDQUM5RSxHQUFNLEdBQWEsS0FBSyxhQUFlLFdBQWEsVUFDOUMsRUFBTSxHQUFBLFdBQTRDLEdBRXhELEdBQUksQ0FBQyxFQUFLLENBQ1IsR0FBQSxPQUFPLE1BQU0sNENBQTZDLEVBQVUsY0FDcEUsT0FHRixLQUFLLHNCQUFzQixFQUFJLFdBQVksS0FBSyxZQUFhLElBTXZELEVBQUEsVUFBQSxzQkFBUixTQUE4QixFQUE2QixFQUF5QixFQUF3QixDQUE1RyxHQUFBLEdBQUEsS0FDRSxFQUFXLFFBQVEsU0FBQyxFQUFvQixDQUFLLE1BQUEsR0FBSyxnQkFBZ0IsRUFBWSxFQUFXLE1BTW5GLEVBQUEsVUFBQSxnQkFBUixTQUF3QixFQUE2QixFQUFzQixFQUF3QixDQUNqRyxHQUFNLElBQWEsR0FBVyxVQUU5QixJQUFNLEdBQWlCLEtBQUssc0NBQXNDLEtBQUssTUFFdkUsR0FBQSxLQUFLLEVBQVcsVUFBVyxFQUFXLFNBQVMsRUFBbUMsQ0FDaEYsTUFBTyxXQUFBLFFBQXdCLEdBQUEsR0FBQSxFQUFBLEVBQUEsRUFBQSxVQUFBLE9BQUEsSUFBQSxFQUFBLEdBQUEsVUFBQSxlQUN2QixFQUFVLEVBQUssRUFBSyxPQUFTLEdBQzdCLEVBQVEsSUFBZ0IsV0FDeEIsRUFBVSxHQUFHLEtBQUssTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUFFLFVBSTFCLEdBQUksTUFBTyxJQUFZLFlBQWUsSUFBYyxhQUFlLEVBQUssU0FBVyxFQUFJLENBQ3JGLEdBQU0sR0FBSSxHQUFHLEtBQVUsTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUFFLFdBQVcsRUFBZSxLQUFNLEVBQVcsSUFDOUQsRUFBZSxFQUFLLEtBQUksTUFBVCxFQUFJLEdBQUEsU0FBQSxDQUFNLE1BQVMsSUFFeEMsTUFBSSxJQUFBLFdBQVcsR0FDTixFQUFhLEtBQUssU0FBQyxFQUFZLE9BQ3BDLE1BQUEsR0FBQSxLQUFJLE1BQUEsSUFBQSxRQUFBLEVBQUUsU0FDQyxJQUdULElBQUEsS0FBSSxNQUFBLElBQUEsUUFBQSxFQUFFLFNBQ0MsR0FJWCxHQUFNLEdBQUksR0FBRyxLQUFVLE1BQUEsSUFBQSxPQUFBLE9BQUEsRUFBRSxXQUFXLEVBQWUsS0FBTSxFQUFXLEVBQUssTUFBTSxFQUFHLE1BQ2xGLE1BQU8sR0FBSyxLQUFJLE1BQVQsRUFBSSxHQUFBLFNBQUEsQ0FBTSxNQUFTLEVBQUssTUFBTSxFQUFHLElBQUcsQ0FBRSxTQUFTLEVBQVksRUFBZSxRQUMvRSxBQUFBLElBQUEsS0FBSSxNQUFBLEtBQUEsUUFBQSxHQUFFLFNBQ04sRUFBUSxFQUFLLFlBU2IsRUFBQSxVQUFBLHNDQUFSLFNBQ0UsRUFDQSxFQUNBLEVBQWUsQ0FFZixHQUFNLEdBQWtDLENBQ3RDLGVBQWdCLEVBQVcsZUFDM0IsT0FBUSxFQUFXLE9BQ25CLFVBQVcsRUFBVyxXQUVsQixFQUEyQixDQUMvQixHQUFJLEtBQ0osWUFBYSxFQUNiLEtBQUksR0FLQSxFQUFZLEdBQXFCLEdBQ2pDLEVBQWlCLE1BQU0sUUFBUSxLQUFLLHFCQUN0QyxLQUFLLG9CQUFvQixTQUFTLEdBQ2xDLEtBQUssb0JBRVQsR0FBSSxDQUFDLEdBQWEsQ0FBQyxFQUNqQixNQUFPLEdBR1QsR0FBSSxDQUVGLEdBQUksSUFBYyxZQUFhLENBQ3ZCLEdBQUEsR0FBQSxHQUFBLE9BQUEsRUFBQSxHQUFDLEVBQUEsRUFBQSxHQUFLLEVBQUEsRUFBQSxHQUNaLEVBQUssRUFBVSxJQUFNLE1BQU8sSUFBUSxTQUFXLEVBQU0sRUFBSSxNQUFRLGNBQ2pFLEVBQUssRUFBVSxJQUFNLE1BQU8sSUFBVyxTQUFXLEVBQVMsRUFBTyxNQUFRLGtCQUUxRSxRQUFTLEdBQUksRUFBRyxFQUFJLEVBQVUsT0FBUSxJQUNwQyxFQUFLLEVBQVUsSUFBTSxLQUFLLFVBQVUsRUFBSyxTQUc3QyxFQUlGLE1BQU8sSUFqSUssRUFBQSxHQUFhLFFBbUk3QixLQXZJYSxHQUFBLE1BQUEscUVDM0ZiLEdBQUEsSUFBQSxJQUVBLEdBQUEsS0FFQSxHQUFBLEtBQ0EsR0FBQSxLQUVNLEdBQVMsR0FBQSxrQkFNZixhQUE4QyxDQUM1QyxBQUFJLElBQVUsR0FBTyxTQUNuQixHQUFPLFNBQVMsaUJBQWlCLG1CQUFvQixVQUFBLENBQ25ELEdBQU0sR0FBb0IsR0FBQSx1QkFDMUIsQUFBSSxHQUFPLFNBQVMsUUFBVSxHQUM1QixJQUFBLE9BQU8sSUFDTCwwQkFBMEIsR0FBQSxXQUFXLFVBQVMsOENBQThDLEVBQWtCLElBSTNHLEVBQWtCLFFBQ3JCLEVBQWtCLFVBQVUsR0FBQSxXQUFXLFdBRXpDLEVBQWtCLE9BQU8sbUJBQW9CLG1CQUM3QyxFQUFrQixPQUFPLEdBQUEsa0JBQW1CLEdBQUEsZ0NBQWdDLElBQzVFLEVBQWtCLFlBSXRCLEdBQUEsT0FBTyxLQUFLLHNGQW5CaEIsR0FBQSwrQkFBQSxLQ2JBLGdFQWtCYSxHQUFBLGFBQWUsU0FDMUIsRUFDQSxFQUNBLEVBQTBCLENBRTFCLEdBQUksR0FDSixNQUFPLFVBQUMsRUFBcUIsQ0FDM0IsQUFBSSxFQUFPLE9BQVMsR0FDZCxJQUFlLElBQ2pCLEdBQU8sTUFBUSxFQUFPLE1BQVMsSUFBYSxHQU14QyxHQUFPLE9BQVMsSUFBYyxTQUNoQyxHQUFZLEVBQU8sTUFDbkIsRUFBUyxTQ25DbkIsZ0VBcUJhLEdBQUEsaUJBQW1CLFVBQUEsQ0FDOUIsTUFBTyxNQUFNLEtBQUssTUFBSyxJQUFJLE1BQUssTUFBTSxLQUFLLFNBQVksTUFBTyxJQUFNLFNDdEJ0RSxnRUFpQkEsR0FBQSxJQUFBLEtBRWEsR0FBQSxXQUFhLFNBQUMsRUFBc0IsRUFBYyxDQUM3RCxNQUFPLENBQ0wsS0FBSSxFQUNKLE1BQU8sR0FBUyxHQUNoQixNQUFPLEVBQ1AsUUFBUyxHQUNULEdBQUksR0FBQSx1QkN6QlIsZ0VBNEJhLEdBQUEsUUFBVSxTQUFDLEVBQWMsRUFBaUMsQ0FDckUsR0FBSSxDQUNGLEdBQUksb0JBQW9CLG9CQUFvQixTQUFTLEdBQU8sQ0FHMUQsR0FBSSxJQUFTLGVBQWlCLENBQUUsMkJBQTRCLE9BQzFELE9BR0YsR0FBTSxHQUEwQixHQUFJLHFCQUFvQixTQUFBLEVBQUMsQ0FBSSxNQUFBLEdBQUUsYUFBYSxJQUFJLEtBRWhGLFNBQUcsUUFBUSxDQUFFLEtBQUksRUFBRSxTQUFVLEtBQ3RCLFFBRVQsTUMxQ0osZ0VBZ0JBLEdBQUEsSUFBQSxJQU1hLEdBQUEsU0FBVyxTQUFDLEVBQXNCLEVBQWMsQ0FDM0QsR0FBTSxHQUFxQixTQUFDLEVBQVksQ0FDdEMsQUFBSSxHQUFNLE9BQVMsWUFBYyxHQUFBLGtCQUEwQixTQUFTLGtCQUFvQixXQUN0RixHQUFHLEdBQ0MsR0FDRixxQkFBb0IsbUJBQW9CLEVBQW9CLElBQzVELG9CQUFvQixXQUFZLEVBQW9CLE9BSTFELGlCQUFpQixtQkFBb0IsRUFBb0IsSUFHekQsaUJBQWlCLFdBQVksRUFBb0IsT0NuQ25ELGdFQWdCQSxHQUFBLElBQUEsS0FDQSxHQUFBLEtBQ0EsR0FBQSxLQUNBLEdBQUEsS0FpQmEsR0FBQSxPQUFTLFNBQUMsRUFBeUIsRUFBMEIsQ0FDeEUsR0FBTSxHQUFTLEdBQUEsV0FBVyxNQUFPLEdBQzdCLEVBRUEsRUFBZSxFQUNmLEVBQXFDLEdBRW5DLEVBQWUsU0FBQyxFQUFrQixDQUd0QyxHQUFJLEdBQVMsQ0FBQyxFQUFNLGVBQWdCLENBQ2xDLEdBQU0sR0FBb0IsRUFBZSxHQUNuQyxFQUFtQixFQUFlLEVBQWUsT0FBUyxHQUtoRSxBQUNFLEdBQ0EsRUFBZSxTQUFXLEdBQzFCLEVBQU0sVUFBWSxFQUFpQixVQUFZLEtBQy9DLEVBQU0sVUFBWSxFQUFrQixVQUFZLElBRWhELElBQWdCLEVBQU0sTUFDdEIsRUFBZSxLQUFLLElBRXBCLEdBQWUsRUFBTSxNQUNyQixFQUFpQixDQUFDLElBS2hCLEVBQWUsRUFBTyxPQUN4QixHQUFPLE1BQVEsRUFDZixFQUFPLFFBQVUsRUFDYixHQUNGLE9BTUYsRUFBSyxHQUFBLFFBQVEsZUFBZ0IsR0FDbkMsQUFBSSxHQUNGLEdBQVMsR0FBQSxhQUFhLEVBQVUsRUFBUSxHQUV4QyxHQUFBLFNBQVMsVUFBQSxDQUNQLEVBQUcsY0FBYyxJQUFJLEdBQ3JCLEVBQU8sVUNwRmIsZ0VBZ0JBLEdBQUEsSUFBQSxJQUVBLEdBQUEsS0FFSSxHQUFrQixHQUVoQixHQUFpQixVQUFBLENBQ3JCLE1BQU8sSUFBQSxrQkFBMEIsU0FBUyxrQkFBb0IsU0FBVyxFQUFJLEtBR3pFLEdBQWUsVUFBQSxDQUVuQixHQUFBLFNBQVMsU0FBQyxFQUFhLElBQVgsR0FBQSxFQUFBLFVBQ1YsR0FBa0IsR0FDakIsS0FHUSxHQUFBLHFCQUF1QixVQUFBLENBR2xDLE1BQUksSUFBa0IsR0FLcEIsSUFBa0IsS0FDbEIsTUFFSyxJQUNELGtCQUFlLENBQ2pCLE1BQU8sU0M5Q2IsZ0VBZ0JBLEdBQUEsSUFBQSxLQUNBLEdBQUEsS0FDQSxHQUFBLEtBQ0EsR0FBQSxLQUNBLEdBQUEsS0FHYSxHQUFBLE9BQVMsU0FBQyxFQUF5QixFQUEwQixDQUN4RSxHQUFNLEdBQW9CLEdBQUEsdUJBQ3BCLEVBQVMsR0FBQSxXQUFXLE9BQ3RCLEVBRUUsRUFBZSxTQUFDLEVBQTZCLENBRWpELEFBQUksR0FBVSxFQUFNLFVBQVksRUFBa0IsaUJBQ2hELEdBQU8sTUFBUSxFQUFNLGdCQUFrQixFQUFNLFVBQzdDLEVBQU8sUUFBUSxLQUFLLEdBQ3BCLEVBQU8sTUFJTCxFQUFLLEdBQUEsUUFBUSxjQUFlLEdBQ2xDLEFBQUksR0FDRixHQUFTLEdBQUEsYUFBYSxFQUFVLEVBQVEsR0FDeEMsR0FBQSxTQUFTLFVBQUEsQ0FDUCxFQUFHLGNBQWMsSUFBSSxHQUNyQixFQUFHLGNBQ0YsUUMzQ1AsZ0VBZ0JBLEdBQUEsSUFBQSxLQUNBLEdBQUEsS0FDQSxHQUFBLEtBQ0EsR0FBQSxLQUNBLEdBQUEsS0FjTSxHQUE2QyxHQUV0QyxHQUFBLE9BQVMsU0FBQyxFQUF5QixFQUEwQixDQUN4RSxHQUFNLEdBQW9CLEdBQUEsdUJBQ3BCLEVBQVMsR0FBQSxXQUFXLE9BQ3RCLEVBRUUsRUFBZSxTQUFDLEVBQXVCLENBRzNDLEdBQU0sR0FBUSxFQUFNLFVBSXBCLEFBQUksRUFBUSxFQUFrQixpQkFDNUIsR0FBTyxNQUFRLEVBQ2YsRUFBTyxRQUFRLEtBQUssSUFHbEIsR0FDRixLQUlFLEVBQUssR0FBQSxRQUFRLDJCQUE0QixHQUUvQyxHQUFJLEVBQUksQ0FDTixFQUFTLEdBQUEsYUFBYSxFQUFVLEVBQVEsR0FFeEMsR0FBTSxHQUFnQixVQUFBLENBQ3BCLEFBQUssR0FBa0IsRUFBTyxLQUM1QixHQUFHLGNBQWMsSUFBSSxHQUNyQixFQUFHLGFBQ0gsR0FBa0IsRUFBTyxJQUFNLEdBQy9CLEVBQU8sTUFPWCxDQUFDLFVBQVcsU0FBUyxRQUFRLFNBQUEsRUFBSSxDQUMvQixpQkFBaUIsRUFBTSxFQUFlLENBQUUsS0FBTSxHQUFNLFFBQVMsT0FHL0QsR0FBQSxTQUFTLEVBQWUsbUZDNUU1QixFQUFBLElBSUEsRUFBQSxLQUNBLEdBQUEsS0FDQSxHQUFBLEtBQ0EsR0FBQSxLQUNBLEdBQUEsS0FHTSxFQUFTLEVBQUEsa0JBR2YsR0FBQSxVQUFBLENBT0UsV0FBMkIsRUFBa0MsQ0FBbEMsQUFBQSxJQUFBLFFBQUEsR0FBQSxZQUFBLEtBQUEsa0JBQUEsRUFObkIsS0FBQSxjQUE4QixHQUU5QixLQUFBLG1CQUE2QixFQUsvQixDQUFDLEVBQUEsYUFBVyxJQUFJLEtBQU0sTUFBQSxJQUFBLE9BQUEsT0FBQSxFQUFFLGNBQVcsSUFBSSxLQUFNLE1BQUEsSUFBQSxPQUFBLE9BQUEsRUFBRSxXQUM3QyxHQUFPLFlBQVksTUFDckIsRUFBTyxZQUFZLEtBQUssdUJBRzFCLEtBQUssWUFDTCxLQUFLLFlBQ0wsS0FBSyxhQUtGLFNBQUEsVUFBQSxzQkFBUCxTQUE2QixFQUF3QixDQUFyRCxHQUFBLEdBQUEsS0FDRSxHQUFJLEdBQUMsR0FBVSxDQUFDLEVBQU8sYUFBZSxDQUFDLEVBQU8sWUFBWSxZQUFjLENBQUMsRUFBQSw4QkFLekUsR0FBQSxPQUFPLElBQUksNERBRVgsR0FBTSxHQUFhLEVBQUEsUUFBUSxFQUFBLDhCQUN2QixFQUVKLEdBQUksRUFBTyxVQUFZLEVBQU8sU0FBUyxTQUVyQyxPQUFTLEdBQUksRUFBRyxFQUFJLEVBQU8sU0FBUyxRQUFRLE9BQVEsSUFJbEQsR0FBSSxFQUFPLFNBQVMsUUFBUSxHQUFHLFFBQVEsUUFBVSxPQUFRLENBQ3ZELEVBQWlCLEVBQU8sU0FBUyxRQUFRLEdBQUcsSUFDNUMsT0FLTixHQUFJLEdBQ0EsRUFDQSxFQUNBLEVBNEVKLEdBMUVBLEVBQU8sWUFDSixhQUNBLE1BQU0sS0FBSyxvQkFDWCxRQUFRLFNBQUMsRUFBMEIsQ0FDbEMsR0FBTSxHQUFZLEVBQUEsUUFBUSxFQUFNLFdBQzFCLEVBQVcsRUFBQSxRQUFRLEVBQU0sVUFFL0IsR0FBSSxJQUFZLEtBQU8sY0FBZ0IsRUFBYSxFQUFZLEVBQVksZ0JBSTVFLE9BQVEsRUFBTSxlQUNQLGFBQWMsQ0FDakIsR0FBbUIsRUFBYSxFQUFPLEdBQ3ZDLEVBQXlCLEVBQWEsRUFBQSxRQUFRLEVBQU0sZUFDcEQsRUFBd0IsRUFBYSxFQUFBLFFBQVEsRUFBTSxjQUNuRCxVQUVHLFdBQ0EsWUFDQSxVQUFXLENBQ2QsR0FBTSxHQUFpQixHQUFnQixFQUFhLEVBQU8sRUFBVyxFQUFVLEdBQ2hGLEFBQUksSUFBNkIsUUFBYSxFQUFNLE9BQVMsdUJBQzNELEdBQTJCLEdBSzdCLEdBQU0sR0FBYyxHQUFBLHVCQUVkLEVBQWUsRUFBTSxVQUFZLEVBQVksZ0JBRW5ELEFBQUksRUFBTSxPQUFTLGVBQWlCLEdBQ2xDLEdBQUEsT0FBTyxJQUFJLDRCQUNYLEVBQUssY0FBYyxHQUFRLENBQUUsTUFBTyxFQUFNLFdBQzFDLEVBQUssY0FBYyxXQUFhLENBQUUsTUFBTyxJQUd2QyxFQUFNLE9BQVMsMEJBQTRCLEdBQzdDLEdBQUEsT0FBTyxJQUFJLDZCQUNYLEVBQUssY0FBYyxJQUFTLENBQUUsTUFBTyxFQUFNLFdBQzNDLEVBQUssY0FBYyxZQUFjLENBQUUsTUFBTyxJQUc1QyxVQUVHLFdBQVksQ0FDZixHQUFNLEdBQWdCLEVBQU0sS0FBZ0IsUUFBUSxFQUFPLFNBQVMsT0FBUSxJQUN0RSxFQUFlLEdBQWlCLEVBQWEsRUFBTyxFQUFjLEVBQVcsRUFBVSxHQUU3RixBQUFJLElBQThCLFFBQWMsSUFBa0IsSUFBSSxRQUFRLEdBQWdCLElBQzVGLEdBQTRCLEdBRTlCLGtCQU9KLElBQThCLFFBQWEsSUFBNkIsUUFDMUUsR0FBWSxFQUFhLENBQ3ZCLFlBQWEsYUFDYixhQUFjLEVBQ2QsR0FBSSxTQUNKLGVBQWdCLElBSXBCLEtBQUssbUJBQXFCLEtBQUssSUFBSSxZQUFZLGFBQWEsT0FBUyxFQUFHLEdBRXhFLEtBQUssZ0JBQWdCLEdBR2pCLEVBQVksS0FBTyxXQUFZLENBR2pDLEdBQU0sR0FBYSxFQUFBLFFBQVEsRUFBQSw4QkFJM0IsQUFBSSxNQUFPLElBQTJCLFVBQ3BDLEdBQUEsT0FBTyxJQUFJLDhCQUNYLEtBQUssY0FBYyxLQUFVLENBQUUsTUFBUSxHQUF5QixFQUFZLGdCQUFrQixLQUUxRixNQUFPLElBQTBCLFVBQVksR0FBeUIsR0FHeEUsTUFBSyxjQUFjLG9CQUFzQixDQUFFLE1BQVEsR0FBeUIsR0FBeUIsT0FJekcsQ0FBQyxNQUFPLEtBQU0sT0FBTyxRQUFRLFNBQUEsRUFBSSxDQUMvQixHQUFJLEdBQUMsRUFBSyxjQUFjLElBQVMsR0FBYyxFQUFZLGdCQVEzRCxJQUFNLEdBQVcsRUFBSyxjQUFjLEdBQU0sTUFDcEMsRUFBdUIsRUFBYSxFQUFBLFFBQVEsR0FFNUMsRUFBa0IsS0FBSyxJQUFLLEdBQXVCLEVBQVksZ0JBQWtCLEtBRWpGLEVBQVEsRUFBa0IsRUFDaEMsRUFBQSxPQUFPLElBQUksNkJBQTZCLEVBQUksU0FBUyxFQUFRLE9BQU8sRUFBZSxLQUFLLEVBQUssS0FFN0YsRUFBSyxjQUFjLEdBQU0sTUFBUSxLQUcvQixLQUFLLGNBQWMsYUFBZSxLQUFLLGNBQWMsS0FHdkQsR0FBWSxFQUFhLENBQ3ZCLFlBQWEsb0JBQ2IsYUFBYyxLQUFLLGNBQWMsWUFBWSxNQUFRLEVBQUEsUUFBUSxLQUFLLGNBQWMsSUFBTyxPQUN2RixHQUFJLGFBQ0osZUFBZ0IsS0FBSyxjQUFjLFlBQVksUUFNN0MsT0FBUyxNQUFLLGVBQ2xCLE1BQU8sTUFBSyxjQUFjLElBRzVCLEVBQVksZ0JBQWdCLEtBQUssZUFDakMsS0FBSyxlQUFlLEdBRXBCLEVBQVksT0FBTywwQkFBMkIsS0FBSyxzQkFLL0MsRUFBQSxVQUFBLGVBQVIsU0FBdUIsRUFBd0IsQ0FDN0MsQUFBSSxLQUFLLFdBQ1AsR0FBQSxPQUFPLElBQUksa0NBR1AsS0FBSyxVQUFVLFNBQ2pCLEVBQVksT0FBTyxjQUFlLEVBQUEsaUJBQWlCLEtBQUssVUFBVSxVQUdoRSxLQUFLLFVBQVUsSUFDakIsRUFBWSxPQUFPLFNBQVUsS0FBSyxVQUFVLElBRzFDLEtBQUssVUFBVSxLQUVqQixFQUFZLE9BQU8sVUFBVyxLQUFLLFVBQVUsSUFBSSxPQUFPLE1BQU0sRUFBRyxNQUduRSxFQUFZLE9BQU8sV0FBWSxLQUFLLFVBQVUsT0FJNUMsS0FBSyxXQUFhLEtBQUssVUFBVSxTQUNuQyxHQUFBLE9BQU8sSUFBSSxrQ0FDWCxLQUFLLFVBQVUsUUFBUSxRQUFRLFNBQUMsRUFBUSxFQUFLLENBQzNDLE1BQUEsR0FBWSxPQUFPLGNBQWMsR0FBUSxHQUFLLEVBQUEsaUJBQWlCLEVBQU8sV0FNcEUsRUFBQSxVQUFBLFVBQVIsVUFBQSxDQUFBLEdBQUEsR0FBQSxLQUlFLEdBQUEsT0FBTyxTQUFBLEVBQU0sQ0FDWCxHQUFNLEdBQVEsRUFBTyxRQUFRLE1BQzdCLEFBQUksQ0FBQyxHQUlMLEdBQUEsT0FBTyxJQUFJLDZCQUNYLEVBQUssY0FBYyxJQUFTLENBQUUsTUFBTyxFQUFPLE9BQzVDLEVBQUssVUFBWSxNQU9iLEVBQUEsVUFBQSxnQkFBUixTQUF3QixFQUF3QixDQUM5QyxHQUFNLEdBQVksRUFBTyxVQUN6QixHQUFJLEVBQUMsRUFLTCxJQUFNLEdBQWEsRUFBVSxXQUM3QixBQUFJLEdBQ0UsR0FBVyxlQUNiLEVBQVksT0FBTywwQkFBMkIsRUFBVyxlQUd2RCxFQUFXLE1BQ2IsRUFBWSxPQUFPLGlCQUFrQixFQUFXLE1BRzlDLEdBQW1CLEVBQVcsTUFDaEMsTUFBSyxjQUFjLGtCQUFvQixDQUFFLE1BQU8sRUFBVyxNQUd6RCxHQUFtQixFQUFXLFdBQ2hDLE1BQUssY0FBYyx1QkFBeUIsQ0FBRSxNQUFPLEVBQVcsWUFJaEUsR0FBbUIsRUFBVSxlQUMvQixFQUFZLE9BQU8sZUFBZ0IsT0FBTyxFQUFVLGVBR2xELEdBQW1CLEVBQVUsc0JBQy9CLEVBQVksT0FBTyxzQkFBdUIsT0FBTyxFQUFVLHdCQUt2RCxFQUFBLFVBQUEsVUFBUixVQUFBLENBQUEsR0FBQSxHQUFBLEtBQ0UsR0FBQSxPQUFPLFNBQUEsRUFBTSxDQUNYLEdBQU0sR0FBUSxFQUFPLFFBQVEsTUFFN0IsR0FBSSxFQUFDLEVBSUwsSUFBTSxHQUFhLEVBQUEsUUFBUSxFQUFBLDhCQUNyQixFQUFZLEVBQUEsUUFBUSxFQUFNLFdBQ2hDLEVBQUEsT0FBTyxJQUFJLDZCQUNYLEVBQUssY0FBYyxJQUFTLENBQUUsTUFBTyxFQUFPLE9BQzVDLEVBQUssY0FBYyxZQUFjLENBQUUsTUFBTyxFQUFhLEdBQ3ZELEVBQUssVUFBWSxJQUNoQixLQUFLLG9CQUlGLEVBQUEsVUFBQSxVQUFSLFVBQUEsQ0FBQSxHQUFBLEdBQUEsS0FDRSxHQUFBLE9BQU8sU0FBQSxFQUFNLENBQ1gsR0FBTSxHQUFRLEVBQU8sUUFBUSxNQUU3QixHQUFJLEVBQUMsRUFJTCxJQUFNLEdBQWEsRUFBQSxRQUFRLEVBQUEsOEJBQ3JCLEVBQVksRUFBQSxRQUFRLEVBQU0sV0FDaEMsRUFBQSxPQUFPLElBQUksNkJBQ1gsRUFBSyxjQUFjLElBQVMsQ0FBRSxNQUFPLEVBQU8sT0FDNUMsRUFBSyxjQUFjLFlBQWMsQ0FBRSxNQUFPLEVBQWEsT0FHN0QsS0FqVGEsR0FBQSx1QkFBQSxHQW9UYixZQUE0QixFQUEwQixFQUE0QixFQUFrQixDQUNsRyxHQUErQixDQUFFLFlBQVcsRUFBRSxNQUFLLEVBQUUsTUFBTyxjQUFlLFdBQVUsSUFDckYsR0FBK0IsQ0FBRSxZQUFXLEVBQUUsTUFBSyxFQUFFLE1BQU8sV0FBWSxXQUFVLElBQ2xGLEdBQStCLENBQUUsWUFBVyxFQUFFLE1BQUssRUFBRSxNQUFPLHdCQUF5QixXQUFVLElBQy9GLEdBQStCLENBQUUsWUFBVyxFQUFFLE1BQUssRUFBRSxNQUFPLFlBQWEsV0FBVSxJQUNuRixHQUErQixDQUFFLFlBQVcsRUFBRSxNQUFLLEVBQUUsTUFBTyxVQUFXLFdBQVUsSUFDakYsR0FBK0IsQ0FDN0IsWUFBVyxFQUNYLE1BQUssRUFDTCxNQUFPLG1CQUNQLFdBQVUsRUFDVixTQUFVLGFBQ1YsWUFBYSxZQUVmLEdBQStCLENBQzdCLFlBQVcsRUFDWCxNQUFLLEVBQ0wsTUFBTyxRQUNQLFdBQVUsRUFDVixTQUFVLG9CQUNWLFlBQWEsVUFFZixHQUErQixDQUFFLFlBQVcsRUFBRSxNQUFLLEVBQUUsTUFBTyxlQUFnQixXQUFVLEVBQUUsWUFBYSxRQUNyRyxHQUFXLEVBQWEsRUFBTyxHQUlqQyxZQUNFLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFBa0IsQ0FFbEIsR0FBTSxHQUF3QixFQUFhLEVBQ3JDLEVBQXNCLEVBQXdCLEVBRXBELFVBQVksRUFBYSxDQUN2QixZQUFhLEVBQU0sS0FDbkIsYUFBYyxFQUNkLEdBQUksRUFBTSxVQUNWLGVBQWdCLElBR1gsRUFXVCxZQUNFLEVBQ0EsRUFDQSxFQUNBLEVBQ0EsRUFDQSxFQUFrQixDQUlsQixHQUFJLElBQU0sZ0JBQWtCLGtCQUFvQixFQUFNLGdCQUFrQixTQUl4RSxJQUFNLEdBQTRCLEdBQ2xDLEFBQUksZ0JBQWtCLElBQ3BCLEdBQUssaUJBQW1CLEVBQU0sY0FFNUIsbUJBQXFCLElBQ3ZCLEdBQUsscUJBQXVCLEVBQU0saUJBRWhDLG1CQUFxQixJQUN2QixHQUFLLHFCQUF1QixFQUFNLGlCQUdwQyxHQUFNLEdBQWlCLEVBQWEsRUFDOUIsRUFBZSxFQUFpQixFQUV0QyxVQUFZLEVBQWEsQ0FDdkIsWUFBYSxFQUNiLGFBQVksRUFDWixHQUFJLEVBQU0sY0FBZ0IsWUFBWSxFQUFNLGNBQWtCLFdBQzlELGVBQWMsRUFDZCxLQUFJLElBR0MsR0FwQ1QsR0FBQSxpQkFBQSxHQXdDQSxZQUF3QyxFQU92QyxDQUNTLEdBQUEsR0FBQSxFQUFBLFlBQWEsRUFBQSxFQUFBLE1BQU8sRUFBQSxFQUFBLE1BQU8sRUFBQSxFQUFBLFdBQVksRUFBQSxFQUFBLFNBQVUsRUFBQSxFQUFBLFlBRW5ELEVBQU0sRUFBWSxFQUFNLEdBQW9DLEVBQVMsRUFBSyxPQUMxRSxFQUFRLEVBQVMsRUFBSyxTQUM1QixBQUFJLENBQUMsR0FBUyxDQUFDLEdBR2YsR0FBWSxFQUFhLENBQ3ZCLEdBQUksVUFDSixZQUFhLEdBQWUsRUFDNUIsZUFBZ0IsRUFBYSxFQUFBLFFBQVEsR0FDckMsYUFBYyxFQUFhLEVBQUEsUUFBUSxLQUt2QyxZQUFvQixFQUEwQixFQUE0QixFQUFrQixDQUMxRixHQUFZLEVBQWEsQ0FDdkIsR0FBSSxVQUNKLFlBQWEsVUFDYixlQUFnQixFQUFhLEVBQUEsUUFBUSxFQUFNLGNBQzNDLGFBQWMsRUFBYSxFQUFBLFFBQVEsRUFBTSxlQUczQyxHQUFZLEVBQWEsQ0FDdkIsR0FBSSxVQUNKLFlBQWEsV0FDYixlQUFnQixFQUFhLEVBQUEsUUFBUSxFQUFNLGVBQzNDLGFBQWMsRUFBYSxFQUFBLFFBQVEsRUFBTSxlQVM3QyxZQUE0QixFQUEwQixFQUF1QyxDQUFyQyxHQUFBLEdBQUEsRUFBQSxlQUFnQixFQUFBLEdBQUEsT0FBQSxFQUFBLENBQUEsbUJBQ3RFLE1BQUksSUFBa0IsRUFBWSxlQUFpQixHQUNqRCxHQUFZLGVBQWlCLEdBR3hCLEVBQVksV0FBVSxHQUFBLFNBQUEsQ0FDM0IsZUFBYyxHQUNYLElBUFAsR0FBQSxZQUFBLEdBY0EsWUFBNEIsRUFBVSxDQUNwQyxNQUFPLE9BQU8sSUFBVSxVQUFZLFNBQVMsaUZDaGUvQyxHQUFBLElBR0EsR0FBQSxLQUNBLEdBQUEsS0FFYSxHQUFBLHdCQUEwQixDQUFDLFlBQWEsT0F5RXhDLEdBQUEscUNBQXNFLENBQ2pGLFdBQVksR0FDWixTQUFVLEdBQ1YsZUFBZ0IsR0FBQSx5QkFJbEIsWUFBMkMsRUFBaUQsQ0FFcEYsR0FBQSxHQUFBLEdBQUEsU0FBQSxHQUFBLFNBQUEsR0FBQSxHQUFBLHNDQUFBLEdBQUUsRUFBQSxFQUFBLFdBQVksRUFBQSxFQUFBLFNBQVUsRUFBQSxFQUFBLGVBQWdCLEVBQUEsRUFBQSwyQkFPeEMsRUFBa0MsR0FFbEMsRUFBMEIsU0FBQyxFQUFXLENBQzFDLEdBQUksRUFBTyxHQUNULE1BQU8sR0FBTyxHQUVoQixHQUFNLEdBQVUsRUFDaEIsU0FBTyxHQUNMLEVBQVEsS0FBSyxTQUFDLEVBQXVCLENBQUssTUFBQSxJQUFBLGtCQUFrQixFQUFLLE1BQ2pFLENBQUMsR0FBQSxrQkFBa0IsRUFBSyxjQUNuQixFQUFPLElBS1osRUFBbUIsRUFDdkIsQUFBSSxNQUFPLElBQStCLFlBQ3hDLEdBQW1CLFNBQUMsRUFBVyxDQUM3QixNQUFPLEdBQXdCLElBQVEsRUFBMkIsS0FJdEUsR0FBTSxHQUE4QixHQUVwQyxBQUFJLEdBQ0YsR0FBQSwwQkFBMEIsQ0FDeEIsU0FBVSxTQUFDLEVBQXNCLENBQy9CLEdBQWMsRUFBYSxFQUFrQixJQUUvQyxLQUFNLFVBSU4sR0FDRixHQUFBLDBCQUEwQixDQUN4QixTQUFVLFNBQUMsRUFBb0IsQ0FDN0IsR0FBWSxFQUFhLEVBQWtCLElBRTdDLEtBQU0sUUEvQ1osR0FBQSwyQkFBQSxHQXVEQSxZQUNFLEVBQ0EsRUFDQSxFQUEyQixDQUUzQixHQUFJLEdBQUMsR0FBQSxxQkFBdUIsQ0FBRSxHQUFZLFdBQWEsRUFBaUIsRUFBWSxVQUFVLE9BSTlGLElBQUksRUFBWSxjQUFnQixFQUFZLFVBQVUsT0FBUSxDQUM1RCxHQUFNLEdBQU8sRUFBTSxFQUFZLFVBQVUsUUFDekMsQUFBSSxHQUNGLENBQUksRUFBWSxTQUdkLEVBQUssY0FBYyxFQUFZLFNBQVMsUUFDL0IsRUFBWSxPQUNyQixFQUFLLFVBQVUsR0FBQSxXQUFXLGVBRTVCLEVBQUssU0FHTCxNQUFPLEdBQU0sRUFBWSxVQUFVLFNBRXJDLE9BR0YsR0FBTSxHQUFvQixHQUFBLHVCQUMxQixHQUFJLEVBQW1CLENBQ3JCLEdBQU0sR0FBTyxFQUFrQixXQUFXLENBQ3hDLEtBQUksR0FBQSxTQUFBLEdBQUEsU0FBQSxHQUNDLEVBQVksV0FBUyxDQUN4QixLQUFNLFVBRVIsWUFBZ0IsRUFBWSxVQUFVLE9BQU0sSUFBSSxFQUFZLFVBQVUsSUFDdEUsR0FBSSxnQkFHTixFQUFZLFVBQVUsT0FBUyxFQUFLLE9BQ3BDLEVBQU0sRUFBSyxRQUFVLEVBRXJCLEdBQU0sR0FBVyxFQUFZLEtBQUssR0FBSyxFQUFZLEtBQUssR0FFbEQsRUFBVyxFQUFZLEtBQUssR0FBTSxFQUFZLEtBQUssSUFBaUMsR0FDdEYsRUFBVSxFQUFRLFFBQ3RCLEFBQUksR0FBQSxhQUFhLEVBQVMsVUFDeEIsR0FBVyxFQUFvQixTQUVqQyxBQUFJLEVBRUYsQUFBSSxNQUFPLEdBQVEsUUFBVyxXQUU1QixFQUFRLE9BQU8sZUFBZ0IsRUFBSyxpQkFDL0IsQUFBSSxNQUFNLFFBQVEsR0FDdkIsRUFBTyxHQUFBLFNBQU8sRUFBTyxDQUFFLENBQUMsZUFBZ0IsRUFBSyxtQkFFN0MsRUFBTyxHQUFBLFNBQUEsR0FBQSxTQUFBLEdBQVEsR0FBTyxDQUFFLGVBQWdCLEVBQUssa0JBRy9DLEVBQVUsQ0FBRSxlQUFnQixFQUFLLGlCQUVuQyxFQUFRLFFBQVUsSUE3RHRCLEdBQUEsY0FBQSxHQW9FQSxZQUNFLEVBQ0EsRUFDQSxFQUEyQixTQUUzQixHQUNFLEdBQUMsR0FBQSxxQkFBbUIsSUFDcEIsRUFBWSxPQUFHLE1BQUEsSUFBQSxPQUFBLE9BQUEsRUFBRSx5QkFDakIsQ0FBRSxLQUFBLEVBQVksT0FBRyxNQUFBLElBQUEsT0FBQSxPQUFBLEVBQUUsaUJBQWtCLEVBQWlCLEVBQVksSUFBSSxlQUFlLE9BS3ZGLElBQU0sR0FBTSxFQUFZLElBQUksZUFHNUIsR0FBSSxFQUFZLGNBQWdCLEVBQVksSUFBSSx1QkFBd0IsQ0FDdEUsR0FBTSxHQUFPLEVBQU0sRUFBWSxJQUFJLHdCQUNuQyxBQUFJLEdBQ0YsR0FBSyxjQUFjLEVBQUksYUFDdkIsRUFBSyxTQUdMLE1BQU8sR0FBTSxFQUFZLElBQUkseUJBRS9CLE9BSUYsR0FBTSxHQUFvQixHQUFBLHVCQUMxQixHQUFJLEVBQW1CLENBQ3JCLEdBQU0sR0FBTyxFQUFrQixXQUFXLENBQ3hDLEtBQUksR0FBQSxTQUFBLEdBQUEsU0FBQSxHQUNDLEVBQUksTUFBSSxDQUNYLEtBQU0sTUFDTixPQUFRLEVBQUksT0FDWixJQUFLLEVBQUksTUFFWCxZQUFnQixFQUFJLE9BQU0sSUFBSSxFQUFJLElBQ2xDLEdBQUksZ0JBTU4sR0FIQSxFQUFZLElBQUksdUJBQXlCLEVBQUssT0FDOUMsRUFBTSxFQUFZLElBQUksd0JBQTBCLEVBRTVDLEVBQVksSUFBSSxpQkFDbEIsR0FBSSxDQUNGLEVBQVksSUFBSSxpQkFBaUIsZUFBZ0IsRUFBSyxzQkFDdEQsS0FoRFIsR0FBQSxZQUFBLHFFQ2hOQSxHQUFBLElBQUEsSUFFTSxHQUFTLEdBQUEsa0JBS2YsWUFDRSxFQUNBLEVBQ0EsRUFBZ0QsQ0FFaEQsR0FIQSxJQUFBLFFBQUEsR0FBQSxJQUNBLElBQUEsUUFBQSxHQUFBLElBRUksQ0FBQyxJQUFVLENBQUMsR0FBTyxTQUFVLENBQy9CLEdBQUEsT0FBTyxLQUFLLHdFQUNaLE9BR0YsR0FBSSxHQUFrQyxHQUFPLFNBQVMsS0FFbEQsRUFDSixBQUFJLEdBQ0YsR0FBb0IsRUFBdUIsQ0FBRSxLQUFNLEdBQU8sU0FBUyxTQUFVLEdBQUksY0FHL0UsR0FDRixHQUFBLDBCQUEwQixDQUN4QixTQUFVLFNBQUMsRUFBMkMsSUFBekMsR0FBQSxFQUFBLEdBQUksRUFBQSxFQUFBLEtBVWYsR0FBSSxJQUFTLFFBQWEsR0FBZSxFQUFZLFFBQVEsS0FBUSxHQUFJLENBQ3ZFLEVBQWMsT0FDZCxPQUdGLEFBQUksSUFBUyxHQUNYLEdBQWMsT0FDVixHQUNGLElBQUEsT0FBTyxJQUFJLG9EQUFvRCxFQUFrQixJQUVqRixFQUFrQixVQUVwQixFQUFvQixFQUF1QixDQUFFLEtBQU0sR0FBTyxTQUFTLFNBQVUsR0FBSSxpQkFHckYsS0FBTSxZQTVDWixHQUFBLDhCQUFBLGdGQ05BLEdBQUEsSUFFQSxHQUFBLEtBQ0EsR0FBQSxLQUNBLEdBQUEsS0FDQSxHQUFBLEtBQ0EsR0FBQSxLQUNBLEdBQUEsS0FDQSxHQUFBLEtBS0EsR0FBQSxLQUVhLEdBQUEseUNBQTJDLElBNkV4RCxHQUFNLElBQStCLEdBQUEsU0FBQSxDQUNuQyxZQUFhLEdBQUEscUJBQ2IsMkJBQTRCLEdBQzVCLHVCQUF3QixHQUFBLHlDQUN4Qix1QkFBd0IsR0FBQSw4QkFDeEIsaUNBQWtDLEdBQ2xDLDJCQUE0QixJQUN6QixHQUFBLHNDQVVMLEdBQUEsVUFBQSxDQXVCRSxXQUFtQixFQUF5QyxDQVhyRCxLQUFBLEtBQWUsRUFBZSxHQU1wQixLQUFBLG9CQUErQixHQUd4QyxLQUFBLHVCQUEyRSxPQUdqRixHQUFJLEdBQWlCLEdBQUEscUNBQXFDLGVBRTFELEFBQUksR0FDRixNQUFLLHVCQUF5QixFQUFTLFlBQ3ZDLEFBQUksRUFBUyxnQkFBa0IsTUFBTSxRQUFRLEVBQVMsaUJBQW1CLEVBQVMsZUFBZSxTQUFXLEVBQzFHLEVBQWlCLEVBQVMsZUFFMUIsS0FBSyxvQkFBc0IsSUFJL0IsS0FBSyxRQUFPLEdBQUEsU0FBQSxHQUFBLFNBQUEsR0FBQSxTQUFBLEdBQ1AsSUFDQSxHQUFRLENBQ1gsZUFBYyxJQUdSLEdBQUEsR0FBQSxLQUFBLFFBQUEsZUFDUixLQUFLLFNBQVcsR0FBSSxJQUFBLHVCQUF1QixHQUFrQixFQUFlLG1CQU12RSxTQUFBLFVBQUEsVUFBUCxTQUFpQixFQUF1QyxFQUF3QixDQUFoRixHQUFBLEdBQUEsS0FDRSxLQUFLLGVBQWlCLEVBRWxCLEtBQUsscUJBQ1AsSUFBQSxPQUFPLEtBQ0wsNEdBRUYsR0FBQSxPQUFPLEtBQ0wsb0RBQW9ELEdBQUEscUNBQXFDLGlCQUt2RixHQUFBLEdBQUEsS0FBQSxRQUNKLEVBQUEsRUFBQSx1QkFDQSxFQUFBLEVBQUEsaUNBQ0EsRUFBQSxFQUFBLDJCQUNBLEVBQUEsRUFBQSwyQkFDQSxFQUFBLEVBQUEsV0FDQSxFQUFBLEVBQUEsU0FDQSxFQUFBLEVBQUEsZUFDQSxFQUFBLEVBQUEsMkJBR0YsRUFDRSxTQUFDLEVBQTJCLENBQUssTUFBQSxHQUFLLHdCQUF3QixJQUM5RCxFQUNBLEdBR0UsR0FDRixHQUFBLGlDQUdGLEdBQUEsMkJBQTJCLENBQUUsV0FBVSxFQUFFLFNBQVEsRUFBRSxlQUFjLEVBQUUsMkJBQTBCLEtBSXZGLEVBQUEsVUFBQSx3QkFBUixTQUFnQyxFQUEyQixDQUEzRCxHQUFBLEdBQUEsS0FDRSxHQUFJLENBQUMsS0FBSyxlQUFnQixDQUN4QixHQUFBLE9BQU8sS0FBSyw0QkFBNEIsRUFBUSxHQUFFLG1EQUNsRCxPQUlJLEdBQUEsR0FBQSxLQUFBLFFBQUUsRUFBQSxFQUFBLGVBQWdCLEVBQUEsRUFBQSxZQUFhLEVBQUEsRUFBQSx1QkFFL0IsRUFBMEIsRUFBUSxLQUFPLFdBQWEsS0FBcUIsT0FFM0UsRUFBZSxHQUFBLFNBQUEsR0FBQSxTQUFBLEdBQUEsU0FBQSxHQUNoQixHQUNBLEdBQXVCLENBQzFCLFFBQVMsS0FFTCxFQUFrQixNQUFPLElBQW1CLFdBQWEsRUFBZSxHQUFtQixFQUkzRixFQUFlLElBQW9CLE9BQVcsR0FBQSxTQUFBLEdBQUEsU0FBQSxHQUFNLEdBQWUsQ0FBRSxRQUFTLEtBQVUsRUFFOUYsQUFBSSxFQUFhLFVBQVksSUFDM0IsR0FBQSxPQUFPLElBQUksMkJBQTJCLEVBQWEsR0FBRSwyQ0FHdkQsR0FBQSxPQUFPLElBQUksc0JBQXNCLEVBQWEsR0FBRSx5QkFFaEQsR0FBTSxHQUFNLEtBQUssaUJBQ1QsRUFBQSxHQUFBLGtCQUFBLFNBRUYsRUFBa0IsR0FBQSxxQkFDdEIsRUFDQSxFQUNBLEVBQ0EsR0FDQSxDQUFFLFNBQVEsSUFFWixTQUFnQiw2QkFBNkIsU0FBQyxFQUFhLEVBQVksQ0FDckUsRUFBSyxTQUFTLHNCQUFzQixHQUNwQyxHQUEwQixHQUFBLFFBQVEsR0FBeUIsRUFBYSxLQUcxRSxFQUFnQixPQUFPLGNBQWUsS0FBSyx3QkFFcEMsR0EvSEssRUFBQSxHQUFhLGlCQWlJN0IsS0FySWEsR0FBQSxlQUFBLEdBNEliLGFBQWdDLENBQzlCLEdBQU0sR0FBUyxHQUFlLGdCQUM5QixHQUFJLEVBQ0YsTUFBTyxJQUFBLHVCQUF1QixHQUhsQyxHQUFBLGlCQUFBLEdBVUEsWUFBK0IsRUFBZ0IsQ0FDN0MsR0FBTSxHQUFLLEdBQUEsa0JBQTBCLFNBQVMsY0FBYyxhQUFhLEVBQVEsS0FDakYsTUFBTyxHQUFLLEVBQUcsYUFBYSxXQUFhLEtBRjNDLEdBQUEsZUFBQSxHQU1BLFlBQW1DLEVBQXFCLEVBQThCLEVBQW9CLENBQ3hHLEdBQU0sR0FBTyxFQUFlLEVBQVksZUFDbEMsRUFBd0IsR0FBaUIsR0FBTyxHQUFlLEVBQU8sR0FDNUUsQUFBSSxHQUNGLEdBQVksVUFBVSxHQUFBLFdBQVcsa0JBQ2pDLEVBQVksT0FBTyxpQ0FBa0MsNEVDaFJ6RCxHQUFBLElBQUEsS0FBUyxHQUFBLGVBQUEsR0FBQSxlQUNULEdBQUEsSUFBQSxLQUNFLEdBQUEsMkJBQUEsR0FBQSwyQkFFQSxHQUFBLHFDQUFBLEdBQUEsdUdDSkYsR0FBQSxJQUFBLEtBQVMsR0FBQSxRQUFBLEdBQUEsUUFDVCxHQUFBLElBQUEsS0FBUyxHQUFBLFNBQUEsR0FBQSxTQUNULEdBQUEsSUFBQSxLQUFTLEdBQUEsTUFBQSxHQUFBLE1BQ1QsR0FBQSxJQUFBLEtBQVMsR0FBQSxNQUFBLEdBQUEsTUFJVCxHQUFBLElBQUEsS0FBUyxHQUFBLGVBQUEsR0FBQSwrRUNQVCxHQUFBLElBQUEsS0FzQ1MsRUFBQSxvQkF0Q0EsR0FBQSxvQkFDVCxHQUFBLElBQUEsS0FFUyxFQUFBLGFBQUEsR0FrQlQsR0FBQSxJQUFBLEtBQVMsRUFBQSxlQUFBLEdBQUEsZUFFVCxHQUFBLElBQUEsS0FBUyxFQUFBLEtBQUEsR0FBQSxLQUNULEdBQUEsSUFBQSxLQUFTLEVBQUEsWUFBQSxHQUFBLFlBQ1QsR0FBQSxJQUFBLEtBRUUsRUFBQSwrQkFBQSxHQUFBLDJCQUVBLEVBQUEscUNBQUEsR0FBQSxxQ0FFRixHQUFBLElBQUEsS0FBUyxFQUFBLFdBQUEsR0FBQSxXQUNULEdBQUEsSUFBQSxLQUFTLEVBQUEsZ0JBQUEsR0FBQSxnQkFDVCxHQUFBLElBQUEsS0FBUyxFQUFBLHFCQUFBLEdBQUEscUJBR1QsR0FBQSxzQkFJQSxHQUFBLElBQUEsS0FDRSxFQUFBLHVCQUFBLEdBQUEsdUJBQ0EsRUFBQSxxQkFBQSxHQUFBLHFCQUNBLEVBQUEsa0JBQUEsR0FBQSxrQkFDQSxFQUFBLHlCQUFBLEdBQUEseUJBQ0EsRUFBQSxtQkFBQSxHQUFBLHFCQzdDRiwyQkFjQSxHQUFRLE1BQVEsR0FDaEIsR0FBUSxVQUFZLEdBT3BCLEdBQUksSUFBUyxtQkFDVCxHQUFTLG1CQUNULEdBQWtCLE1BVWxCLEdBQXFCLHdDQWN6QixZQUFlLEVBQUssRUFBUyxDQUMzQixHQUFJLE1BQU8sSUFBUSxTQUNqQixLQUFNLElBQUksV0FBVSxpQ0FRdEIsT0FMSSxHQUFNLEdBQ04sRUFBTSxHQUFXLEdBQ2pCLEVBQVEsRUFBSSxNQUFNLElBQ2xCLEVBQU0sRUFBSSxRQUFVLEdBRWYsRUFBSSxFQUFHLEVBQUksRUFBTSxPQUFRLElBQUssQ0FDckMsR0FBSSxHQUFPLEVBQU0sR0FDYixFQUFTLEVBQUssUUFBUSxLQUcxQixHQUFJLElBQVMsR0FJYixJQUFJLEdBQU0sRUFBSyxPQUFPLEVBQUcsR0FBUSxPQUM3QixFQUFNLEVBQUssT0FBTyxFQUFFLEVBQVEsRUFBSyxRQUFRLE9BRzdDLEFBQUksQUFBTyxFQUFJLElBQVgsS0FDRixHQUFNLEVBQUksTUFBTSxFQUFHLEtBSWpCLEFBQWEsRUFBSSxJQUFqQixNQUNGLEdBQUksR0FBTyxHQUFVLEVBQUssS0FJOUIsTUFBTyxHQW1CVCxZQUFtQixFQUFNLEVBQUssRUFBUyxDQUNyQyxHQUFJLEdBQU0sR0FBVyxHQUNqQixFQUFNLEVBQUksUUFBVSxHQUV4QixHQUFJLE1BQU8sSUFBUSxXQUNqQixLQUFNLElBQUksV0FBVSw0QkFHdEIsR0FBSSxDQUFDLEdBQW1CLEtBQUssR0FDM0IsS0FBTSxJQUFJLFdBQVUsNEJBR3RCLEdBQUksR0FBUSxFQUFJLEdBRWhCLEdBQUksR0FBUyxDQUFDLEdBQW1CLEtBQUssR0FDcEMsS0FBTSxJQUFJLFdBQVUsMkJBR3RCLEdBQUksR0FBTSxFQUFPLElBQU0sRUFFdkIsR0FBSSxBQUFRLEVBQUksUUFBWixLQUFvQixDQUN0QixHQUFJLEdBQVMsRUFBSSxPQUFTLEVBRTFCLEdBQUksTUFBTSxJQUFXLENBQUMsU0FBUyxHQUM3QixLQUFNLElBQUksV0FBVSw0QkFHdEIsR0FBTyxhQUFlLEtBQUssTUFBTSxHQUduQyxHQUFJLEVBQUksT0FBUSxDQUNkLEdBQUksQ0FBQyxHQUFtQixLQUFLLEVBQUksUUFDL0IsS0FBTSxJQUFJLFdBQVUsNEJBR3RCLEdBQU8sWUFBYyxFQUFJLE9BRzNCLEdBQUksRUFBSSxLQUFNLENBQ1osR0FBSSxDQUFDLEdBQW1CLEtBQUssRUFBSSxNQUMvQixLQUFNLElBQUksV0FBVSwwQkFHdEIsR0FBTyxVQUFZLEVBQUksS0FHekIsR0FBSSxFQUFJLFFBQVMsQ0FDZixHQUFJLE1BQU8sR0FBSSxRQUFRLGFBQWdCLFdBQ3JDLEtBQU0sSUFBSSxXQUFVLDZCQUd0QixHQUFPLGFBQWUsRUFBSSxRQUFRLGNBV3BDLEdBUkksRUFBSSxVQUNOLElBQU8sY0FHTCxFQUFJLFFBQ04sSUFBTyxZQUdMLEVBQUksU0FBVSxDQUNoQixHQUFJLEdBQVcsTUFBTyxHQUFJLFVBQWEsU0FDbkMsRUFBSSxTQUFTLGNBQWdCLEVBQUksU0FFckMsT0FBUSxPQUNELEdBQ0gsR0FBTyxvQkFDUCxVQUNHLE1BQ0gsR0FBTyxpQkFDUCxVQUNHLFNBQ0gsR0FBTyxvQkFDUCxVQUNHLE9BQ0gsR0FBTyxrQkFDUCxjQUVBLEtBQU0sSUFBSSxXQUFVLCtCQUkxQixNQUFPLEdBV1QsWUFBbUIsRUFBSyxFQUFRLENBQzlCLEdBQUksQ0FDRixNQUFPLEdBQU8sUUFDZCxDQUNBLE1BQU8sa0ZDck1YLEdBQUEsSUFDQSxHQUFBLEtBQ0EsR0FBQSxJQUNBLEdBQUEsSUFDQSxHQUFBLEtBQ0EsR0FBQSxRQUFBLFVBRUEsR0FBQSxRQUFBLE1BQ0EsR0FBQSxRQUFBLE9BR0EsR0FBQSxLQWdDQSxhQUE4QixDQUs1QixNQUFPLFVBQ0wsRUFDQSxFQUNBLEVBQTJCLENBRzNCLEdBQUksR0FDSixBQUFJLEVBQUksU0FBVyxHQUFBLFNBQVMsRUFBSSxRQUFRLGtCQUN0QyxHQUFrQixHQUFBLHVCQUF1QixFQUFJLFFBQVEsa0JBR3ZELEdBQU0sR0FBYyxHQUFBLGlCQUFnQixHQUFBLFNBQUEsQ0FFaEMsS0FBTSxHQUE4QixFQUFLLENBQUUsS0FBTSxHQUFNLE9BQVEsS0FDL0QsR0FBSSxlQUNELEdBR0wsQ0FBRSxRQUFTLEdBQW1CLEtBSWhDLEdBQUEsZ0JBQWdCLGVBQWUsU0FBQSxFQUFLLENBQ2xDLEVBQU0sUUFBUSxLQU1mLEVBQVkscUJBQXVCLEVBRXBDLEVBQUksS0FBSyxTQUFVLFVBQUEsQ0FHakIsYUFBYSxVQUFBLENBQ1gsR0FBMkIsRUFBYSxHQUN4QyxFQUFZLGNBQWMsRUFBSSxZQUM5QixFQUFZLGFBSWhCLEtBOUNKLEdBQUEsZUFBQSxHQXNEQSxZQUFvQyxFQUFzQyxFQUFtQixDQUMzRixBQUFJLENBQUMsR0FDTCxHQUFZLEtBQU8sR0FBOEIsRUFBSyxDQUFFLEtBQU0sR0FBTSxPQUFRLEtBQzVFLEVBQVksUUFBUSxNQUFPLEVBQUksYUFDL0IsRUFBWSxRQUFRLFVBQVcsRUFBSSxTQUNuQyxFQUFZLFFBQVEsUUFBUyxFQUFJLFFBYW5DLFlBQ0UsRUFDQSxFQUFrRCxDQUFsRCxBQUFBLElBQUEsUUFBQSxHQUFBLFVBRU0sRUFBTSxHQUFHLEVBQUksVUFBTSxNQUFBLElBQUEsT0FBQSxPQUFBLEVBQUUsY0FFdkIsRUFBTyxHQUNYLEFBQUksRUFBSSxNQUNOLEVBQU8sR0FBRyxHQUFJLFNBQVcsSUFBSyxFQUFJLE1BQU0sS0FDL0IsR0FBSSxhQUFlLEVBQUksTUFDaEMsR0FBTyxHQUFBLHlCQUF5QixFQUFJLGFBQWUsRUFBSSxLQUFPLEtBR2hFLEdBQUksR0FBTyxHQUNYLE1BQUksR0FBUSxRQUFVLEdBQ3BCLElBQVEsR0FFTixFQUFRLFFBQVUsRUFBUSxNQUM1QixJQUFRLEtBRU4sRUFBUSxNQUFRLEdBQ2xCLElBQVEsR0FHSCxFQU1ULFlBQTRCLEVBQXFCLEVBQXVDLE9BQ3RGLE9BQVEsT0FDRCxPQUNILE1BQU8sSUFBOEIsRUFBSyxDQUFFLEtBQU0sU0FFL0MsVUFDSCxNQUFPLElBQUEsRUFBSSxTQUFLLE1BQUEsSUFBQSxPQUFBLE9BQUEsRUFBRSxNQUFNLEdBQUcsT0FBUSxrQkFFaEMscUJBRUgsTUFBTyxJQUE4QixFQUFLLENBQUUsS0FBTSxHQUFNLE9BQVEsTUFNdEUsR0FBTSxJQUFvQixDQUFDLEtBQU0sV0FBWSxTQUc3QyxZQUNFLEVBR0EsRUFBd0IsQ0FFeEIsR0FBTSxHQUF3QyxHQUN4QyxFQUFhLE1BQU0sUUFBUSxHQUFRLEVBQU8sR0FFaEQsU0FBVyxRQUFRLFNBQUEsRUFBRyxDQUNwQixBQUFJLEdBQVEsSUFBTyxJQUNqQixHQUFjLEdBQU8sRUFBSyxNQUl2QixFQUlULEdBQU0sSUFBdUIsQ0FBQyxVQUFXLE9BQVEsVUFBVyxTQUFVLGVBQWdCLE9BVXRGLFlBQ0UsRUFDQSxFQUFxQyxDQUFyQyxBQUFBLElBQUEsUUFBQSxHQUFBLElBRUEsR0FBTSxHQUFzQyxHQUt0QyxFQUFXLEVBQUksU0FBVyxFQUFJLFFBQVUsR0FNeEMsRUFBUyxFQUFJLE9BS2IsRUFBTyxFQUFJLFVBQVksRUFBSSxNQUFRLEVBQVEsTUFBUSxZQUluRCxFQUNKLEVBQUksV0FBYSxTQUFXLEVBQUksUUFBWSxHQUFJLFFBQVUsSUFBZ0MsVUFDdEYsUUFDQSxPQUlBLEVBQWUsRUFBSSxhQUFlLEVBQUksS0FBTyxHQUU3QyxFQUFpQixFQUFRLE1BQU0sRUFBTyxFQUU1QyxTQUFLLFFBQVEsU0FBQSxFQUFHLENBQ2QsT0FBUSxPQUNELFVBQ0gsRUFBWSxRQUFVLEVBQ3RCLFVBQ0csU0FDSCxFQUFZLE9BQVMsRUFDckIsVUFDRyxNQUNILEVBQVksSUFBTSxFQUNsQixVQUNHLFVBS0gsRUFBWSxRQUFVLEVBQUksU0FBVyxHQUFPLE1BQU0sRUFBUSxRQUFVLElBQ3BFLFVBQ0csZUFLSCxFQUFZLGFBQWUsRUFBSSxPQUFTLEdBQUksTUFBTSxHQUFlLEdBQUksSUFBTyxNQUM1RSxVQUNHLE9BQ0gsR0FBSSxJQUFXLE9BQVMsSUFBVyxPQUNqQyxNQVFGLEFBQUksRUFBSSxPQUFTLFFBQ2YsR0FBWSxLQUFPLEdBQUEsU0FBUyxFQUFJLE1BQVEsRUFBSSxLQUFPLEtBQUssVUFBVSxHQUFBLFVBQVUsRUFBSSxRQUVsRixjQUVBLEFBQUksS0FBRyxlQUFlLEtBQUssRUFBSyxJQUM5QixHQUFZLEdBQVEsRUFBK0IsT0FLcEQsRUFqRlQsR0FBQSxtQkFBQSxHQXdHQSxZQUE2QixFQUFjLEVBQXFCLEVBQTZCLENBc0IzRixHQXBCQSxFQUFPLEdBQUEsU0FBQSxDQUNMLEdBQUksR0FDSixRQUFTLEdBQ1QsV0FBWSxHQUNaLFlBQWEsR0FDYixLQUFNLEdBQ04sUUFBUyxJQUNOLEdBR0QsRUFBUSxTQUNWLEdBQU0sU0FBUSxHQUFBLFNBQUEsR0FBQSxTQUFBLEdBQ1QsRUFBTSxVQUFRLENBQ2pCLFFBQVMsQ0FDUCxLQUFNLE9BQ04sUUFBUyxPQUFPLFFBQVEsWUFLMUIsRUFBUSxRQUFTLENBRW5CLEdBQU0sR0FBdUIsTUFBTSxRQUFRLEVBQVEsU0FDL0MsR0FBbUIsRUFBSyxFQUFRLFNBQ2hDLEdBQW1CLEdBQ3ZCLEVBQU0sUUFBTyxHQUFBLFNBQUEsR0FBQSxTQUFBLEdBQ1IsRUFBTSxTQUNOLEdBUVAsR0FKSSxFQUFRLFlBQWMsQ0FBQyxFQUFNLGFBQy9CLEdBQU0sWUFBYyxPQUFPLFFBQVEsSUFBSSxhQUFlLEdBQUcsWUFHdkQsRUFBUSxLQUFNLENBQ2hCLEdBQU0sR0FBZ0IsRUFBSSxNQUFRLEdBQUEsY0FBYyxFQUFJLE1BQVEsR0FBZ0IsRUFBSSxLQUFNLEVBQVEsTUFBUSxHQUV0RyxBQUFJLE9BQU8sS0FBSyxJQUNkLEdBQU0sS0FBSSxHQUFBLFNBQUEsR0FBQSxTQUFBLEdBQ0wsRUFBTSxNQUNOLElBUVQsR0FBSSxFQUFRLEdBQUksQ0FDZCxHQUFNLEdBQUssRUFBSSxJQUFPLEVBQUksWUFBYyxFQUFJLFdBQVcsY0FDdkQsQUFBSSxHQUNGLEdBQU0sS0FBSSxHQUFBLFNBQUEsR0FBQSxTQUFBLEdBQ0wsRUFBTSxNQUFJLENBQ2IsV0FBWSxLQUtsQixNQUFJLEdBQVEsYUFBZSxDQUFDLEVBQU0sYUFHaEMsR0FBTSxZQUFjLEdBQW1CLEVBQUssRUFBUSxjQUcvQyxFQW5FVCxHQUFBLGFBQUEsR0E4RUEsWUFDRSxFQUErQixDQUUvQixHQUFNLEdBQWEsR0FBQSxnQkFDYixFQUFTLEVBQVcsWUFHMUIsR0FBSSxHQUFVLEdBQUEsNkJBQTZCLEdBQVMsQ0FDbEQsRUFBTyxxQkFHUCxHQUFNLEdBQVEsRUFBVyxXQUN6QixBQUFJLEdBQVMsRUFBTSxjQUNqQixFQUFNLGFBR1YsTUFBTyxVQUNMLEVBQ0EsRUFDQSxFQUEyQixDQUUzQixHQUFJLEdBQVcsRUFBUSxjQUFnQixFQUFRLGFBQWUsRUFBRyxDQUUvRCxHQUFNLEdBQU8sRUFBSSxJQUNqQixFQUFJLElBQU0sU0FBUyxFQUE0QixFQUFrQyxFQUFlLENBQXRGLEdBQUEsR0FBQSxLQUNSLEFBQUssR0FBQSxNQUFNLEVBQVEsY0FDaEIsS0FBSyxVQUFBLENBQ0osRUFBSyxLQUFLLEVBQU0sRUFBTyxFQUFVLEtBRWxDLEtBQUssS0FBTSxTQUFBLEVBQUMsQ0FDWCxHQUFBLE9BQU8sTUFBTSxNQUlyQixHQUFNLEdBQVEsR0FBTyxTQUNyQixFQUFNLElBQUksR0FDVixFQUFNLElBQUksR0FDVixFQUFNLEdBQUcsUUFBUyxHQUVsQixFQUFNLElBQUksVUFBQSxDQUNSLEdBQU0sR0FBYSxHQUFBLGdCQUVuQixFQUFXLGVBQWUsU0FBQSxFQUFLLENBQzdCLEVBQU0sa0JBQWtCLFNBQUMsRUFBWSxDQUFLLE1BQUEsSUFBYSxFQUFPLEVBQUssS0FDbkUsR0FBTSxHQUFTLEVBQVcsWUFDMUIsR0FBSSxHQUFBLDZCQUE2QixHQUFTLENBQ3hDLEdBQU0sR0FBUSxFQUFXLFdBQ3pCLEFBQUksR0FFRixFQUFNLGtCQUFrQixDQUFFLE9BQVEsR0FBQSxxQkFBcUIsUUFLN0QsRUFBSSxLQUFLLFNBQVUsVUFBQSxDQUNqQixHQUFNLEdBQVMsRUFBVyxZQUMxQixBQUFJLEdBQUEsNkJBQTZCLElBQy9CLGFBQWEsVUFBQSxDQUVYLEFBQUksR0FBVyxFQUFlLHdCQUkzQixFQUFlLDZCQUt4QixPQXBFTixHQUFBLGVBQUEsR0FvRkEsWUFBbUMsRUFBc0IsQ0FDdkQsR0FBTSxHQUFhLEVBQU0sUUFBVSxFQUFNLFlBQWMsRUFBTSxhQUFnQixFQUFNLFFBQVUsRUFBTSxPQUFPLFdBQzFHLE1BQU8sR0FBYSxTQUFTLEVBQXNCLElBQU0sSUFJM0QsWUFBa0MsRUFBc0IsQ0FDdEQsR0FBTSxHQUFTLEdBQTBCLEdBQ3pDLE1BQU8sSUFBVSxJQU9uQixZQUE2QixFQU01QixDQU1DLE1BQU8sVUFDTCxFQUNBLEVBQ0EsRUFDQSxFQUFzQyxDQUd0QyxHQUFNLEdBQXFCLEdBQVcsRUFBUSxtQkFBc0IsR0FFcEUsR0FBSSxFQUFrQixHQUFRLENBQzVCLEdBQUEsVUFBVSxTQUFBLEVBQU0sQ0FHZCxHQUFNLEdBQWUsRUFBWSxxQkFDakMsQUFBSSxHQUFlLEVBQU8sWUFBYyxRQUN0QyxFQUFPLFFBQVEsR0FHakIsR0FBTSxHQUFTLEdBQUEsZ0JBQWdCLFlBQy9CLEdBQUksR0FBVSxHQUFBLDZCQUE2QixHQUFTLENBTWxELEdBQU0sR0FBMkIsRUFBZSxrQkFBb0IsT0FDcEUsR0FBSSxFQUF5QixDQUMzQixHQUFNLEdBQWlCLEVBQU8sb0JBSTlCLEFBQUksR0FBa0IsRUFBZSxTQUFXLFFBQzlDLEdBQWUsT0FBUyxHQUFBLHFCQUFxQixVQUluRCxHQUFNLEdBQVUsR0FBQSxpQkFBaUIsR0FFaEMsRUFBWSxPQUFTLEVBQ3RCLEVBQUssS0FHUCxPQUdGLEVBQUssSUF6RFQsR0FBQSxhQUFBLDhFQzVkQSxHQUFBLElBU0UsRUFBQSxTQUFBLEdBQUEsU0FHQSxFQUFBLE9BQUEsR0FBQSxPQUtGLEdBQUEsR0FBQSxJQUNFLEVBQUEsd0JBQUEsRUFBQSx3QkFDQSxFQUFBLGNBQUEsRUFBQSxjQUNBLEVBQUEsaUJBQUEsRUFBQSxpQkFDQSxFQUFBLGFBQUEsRUFBQSxhQUNBLEVBQUEsZUFBQSxFQUFBLGVBQ0EsRUFBQSxlQUFBLEVBQUEsZUFDQSxFQUFBLGtCQUFBLEVBQUEsa0JBQ0EsRUFBQSxjQUFBLEVBQUEsY0FDQSxFQUFBLElBQUEsRUFBQSxJQUNBLEVBQUEsU0FBQSxFQUFBLFNBQ0EsRUFBQSxNQUFBLEVBQUEsTUFDQSxFQUFBLGlCQUFBLEVBQUEsaUJBQ0EsRUFBQSxZQUFBLEVBQUEsWUFDQSxFQUFBLFdBQUEsRUFBQSxXQUNBLEVBQUEsU0FBQSxFQUFBLFNBQ0EsRUFBQSxVQUFBLEVBQUEsVUFDQSxFQUFBLE9BQUEsRUFBQSxPQUNBLEVBQUEsUUFBQSxFQUFBLFFBQ0EsRUFBQSxRQUFBLEVBQUEsUUFDQSxFQUFBLFVBQUEsRUFBQSxVQUlGLEdBQUEsSUFBQSxLQUFTLEVBQUEsWUFBQSxHQUFBLFlBQ1QsR0FBQSxJQUFBLEtBQVMsRUFBQSxXQUFBLEdBQUEsV0FDVCxHQUFBLElBQUEsS0FBUyxFQUFBLG9CQUFBLEdBQUEsb0JBQXFCLEVBQUEsS0FBQSxHQUFBLEtBQU0sRUFBQSxZQUFBLEdBQUEsWUFBYSxFQUFBLE1BQUEsR0FBQSxNQUFPLEVBQUEsTUFBQSxHQUFBLE1BQU8sRUFBQSxpQkFBQSxHQUFBLGlCQUMvRCxHQUFBLElBQUEsS0FBUyxFQUFBLGdCQUFBLEdBQUEsZ0JBQ1QsR0FBQSxJQUFBLEtBQVMsRUFBQSxTQUFBLEdBQUEsU0FFVCxHQUFBLElBQUEsSUFDQSxHQUFBLElBQ0EsR0FBQSxRQUFBLFVBRUEsR0FBQSxLQVNtRCxFQUFBLFNBQUEsR0FSbkQsR0FBQSxJQUFBLEtBQ0EsR0FBQSxLQU91QyxFQUFBLFdBQUEsR0FMdkMsR0FBTSxJQUFZLEdBQUEsU0FBQSxHQUFBLFNBQUEsR0FDYixHQUFBLGNBQ0EsSUFHb0IsRUFBQSxhQUFBLEdBSXpCLEdBQU0sSUFBVSxHQUFBLGlCQUNoQixBQUFJLEdBQVEsWUFDVixJQUFRLFdBQVcsV0FBYSxHQUFRLFdBQVcsWUFBYyxHQUNqRSxHQUFRLFdBQVcsV0FBVyxPQUFTLEdBQVEsV0FBVyxXQUFXLFFBQVUsTUNqRWpGLE9BQW9CLFNDRmIsWUFBeUIsRUFBeUMsQ0FDdkUsR0FBSSxFQUFZLFFBQVUsRUFDMUIsTUFBTyxHQUFZLGNBQWMsUUFBUSxLQUFNLEdBQzNDLE9BQU8sY0FBYyxPQUFTLEVBQUssV0FBVyxLREVwRCxPQUF3QixTQUt4QixBQUFPLFFBQUssQ0FDVixJQUFLLDZFQUlMLGlCQUFrQixJQUdwQixXQUNHLFFBQVEsU0FDUixLQUFLLG9CQUNMLFFBQVEsY0FDUixPQUFPLEFBQUMsR0FBUyxDQUNoQixHQUFNLEdBQWMsQUFBTyxvQkFBaUIsQ0FDMUMsR0FBSSw2QkFDSixLQUFNLCtCQUVSLEdBQUksQ0FDRixHQUFNLEdBQVMsR0FBZSxHQUM5QixHQUFJLElBQVcsT0FBVyxLQUFNLElBQUksT0FBTSxTQUFTO0FBQUEsVUFBa0I7QUFBQSxHQUNyRSxRQUFRLElBQUksU0FDTCxFQUFQLENBQ0EsQUFBTyxvQkFBaUIsVUFDeEIsQ0FDQSxFQUFZLFlBSWxCLFdBQVEsTUFBTSxRQUFRIiwKICAibmFtZXMiOiBbXQp9Cg==
74
+ //# sourceMappingURL=cli.js.map