@willbooster/agent-skills 1.28.1 → 1.28.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +3 -3
- package/package.json +5 -5
- package/skills/wbfy/SKILL.md +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import{Command as n,Option as e}from"commander";import{stdin as t,stderr as r}from"node:process";import{spawn as a,spawnSync as i}from"node:child_process";import{createWriteStream as o}from"node:fs";import{mkdir as c,readFile as u,stat as s,readdir as l,rm as f,cp as p,mkdtemp as d,writeFile as h}from"node:fs/promises";import{dirname as m,join as v,relative as w,sep as y}from"node:path";import{minimatch as g,braceExpand as b}from"minimatch";import{setTimeout as k}from"node:timers/promises";import{stripVTControlCharacters as x}from"node:util";import{stringify as S}from"yaml";import
|
|
2
|
+
import{Command as n,Option as e}from"commander";import{stdin as t,stderr as r}from"node:process";import{spawn as a,spawnSync as i}from"node:child_process";import{createWriteStream as o}from"node:fs";import{mkdir as c,readFile as u,stat as s,readdir as l,rm as f,cp as p,mkdtemp as d,writeFile as h}from"node:fs/promises";import{dirname as m,join as v,relative as w,sep as y}from"node:path";import{minimatch as g,braceExpand as b}from"minimatch";import{setTimeout as k}from"node:timers/promises";import{stripVTControlCharacters as x}from"node:util";import{stringify as S}from"yaml";import I from"node:assert";import{tmpdir as j}from"node:os";import{fileURLToPath as O}from"node:url";function R(n,e){(null==e||e>n.length)&&(e=n.length);for(var t=0,r=Array(e);t<e;t++)r[t]=n[t];return r}function A(n){var e,t,r,a=2;for("undefined"!=typeof Symbol&&(t=Symbol.asyncIterator,r=Symbol.iterator);a--;){if(t&&null!=(e=n[t]))return e.call(n);if(r&&null!=(e=n[r]))return new C(e.call(n));t="@@asyncIterator",r="@@iterator"}throw new TypeError("Object is not async iterable")}function C(n){function e(n){if(Object(n)!==n)return Promise.reject(new TypeError(n+" is not an object."));var e=n.done;return Promise.resolve(n.value).then(function(n){return{value:n,done:e}})}return C=function(n){this.s=n,this.n=n.next},C.prototype={s:null,n:null,next:function(){return e(this.n.apply(this.s,arguments))},return:function(n){var t=this.s.return;return void 0===t?Promise.resolve({value:n,done:!0}):e(t.apply(this.s,arguments))},throw:function(n){var t=this.s.return;return void 0===t?Promise.reject(n):e(t.apply(this.s,arguments))}},new C(n)}function P(n,e,t,r,a,i,o){try{var c=n[i](o),u=c.value}catch(n){return void t(n)}c.done?e(u):Promise.resolve(u).then(r,a)}function $(n){return function(){var e=this,t=arguments;return new Promise(function(r,a){var i=n.apply(e,t);function o(n){P(i,r,a,o,c,"next",n)}function c(n){P(i,r,a,o,c,"throw",n)}o(void 0)})}}function E(n,e){var t="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(!t){if(Array.isArray(n)||(t=F(n))||e&&n&&"number"==typeof n.length){t&&(n=t);var r=0,a=function(){};return{s:a,n:function(){return r>=n.length?{done:!0}:{done:!1,value:n[r++]}},e:function(n){throw n},f:a}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o=!0,c=!1;return{s:function(){t=t.call(n)},n:function(){var n=t.next();return o=n.done,n},e:function(n){c=!0,i=n},f:function(){try{o||null==t.return||t.return()}finally{if(c)throw i}}}}function T(n,e,t){return(e=function(n){var e=function(n,e){if("object"!=typeof n||!n)return n;var t=n[Symbol.toPrimitive];if(void 0!==t){var r=t.call(n,e);if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===e?String:Number)(n)}(n,"string");return"symbol"==typeof e?e:e+""}(e))in n?Object.defineProperty(n,e,{value:t,enumerable:!0,configurable:!0,writable:!0}):n[e]=t,n}function q(n,e){var t=Object.keys(n);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(n);e&&(r=r.filter(function(e){return Object.getOwnPropertyDescriptor(n,e).enumerable})),t.push.apply(t,r)}return t}function N(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?q(Object(t),!0).forEach(function(e){T(n,e,t[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):q(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))})}return n}function L(){
|
|
3
3
|
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
|
|
4
|
-
var n,e,t="function"==typeof Symbol?Symbol:{},r=t.iterator||"@@iterator",a=t.toStringTag||"@@toStringTag";function i(t,r,a,i){var u=r&&r.prototype instanceof c?r:c,s=Object.create(u.prototype);return D(s,"_invoke",function(t,r,a){var i,c,u,s=0,l=a||[],f=!1,p={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,t){return i=e,c=0,u=n,p.n=t,o}};function d(t,r){for(c=t,u=r,e=0;!f&&s&&!a&&e<l.length;e++){var a,i=l[e],d=p.p,h=i[2];t>3?(a=h===r)&&(u=i[(c=i[4])?5:(c=3,3)],i[4]=i[5]=n):i[0]<=d&&((a=t<2&&d<i[1])?(c=0,p.v=r,p.n=i[1]):d<h&&(a=t<3||i[0]>r||r>h)&&(i[4]=t,i[5]=r,p.n=h,c=0))}if(a||t>1)return o;throw f=!0,r}return function(a,l,h){if(s>1)throw TypeError("Generator is already running");for(f&&1===l&&d(l,h),c=l,u=h;(e=c<2?n:u)||!f;){i||(c?c<3?(c>1&&(p.n=-1),d(c,u)):p.n=u:p.v=u);try{if(s=2,i){if(c||(a="next"),e=i[a]){if(!(e=e.call(i,u)))throw TypeError("iterator result is not an object");if(!e.done)return e;u=e.value,c<2&&(c=0)}else 1===c&&(e=i.return)&&e.call(i),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);i=n}else if((e=(f=p.n<0)?u:t.call(r,p))!==o)break}catch(e){i=n,c=1,u=e}finally{s=1}}return{value:e,done:f}}}(t,a,i),!0),s}var o={};function c(){}function u(){}function s(){}e=Object.getPrototypeOf;var l=[][r]?e(e([][r]())):(D(e={},r,function(){return this}),e),f=s.prototype=c.prototype=Object.create(l);function p(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,s):(n.__proto__=s,D(n,a,"GeneratorFunction")),n.prototype=Object.create(f),n}return u.prototype=s,D(f,"constructor",s),D(s,"constructor",u),u.displayName="GeneratorFunction",D(s,a,"GeneratorFunction"),D(f),D(f,a,"Generator"),D(f,r,function(){return this}),D(f,"toString",function(){return"[object Generator]"}),(L=function(){return{w:i,m:p}})()}function D(n,e,t,r){var a=Object.defineProperty;try{a({},"",{})}catch(n){a=0}D=function(n,e,t,r){function i(e,t){D(n,e,function(n){return this._invoke(e,t,n)})}e?a?a(n,e,{value:t,enumerable:!r,configurable:!r,writable:!r}):n[e]=t:(i("next",0),i("throw",1),i("return",2))},D(n,e,t,r)}function M(n){if(null!=n){var e=n["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],t=0;if(e)return e.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length))return{next:function(){return n&&t>=n.length&&(n=void 0),{value:n&&n[t++],done:!n}}}}throw new TypeError(typeof n+" is not iterable")}function _(n,e){return function(n){if(Array.isArray(n))return n}(n)||function(n,e){var t=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null!=t){var r,a,i,o,c=[],u=!0,s=!1;try{if(i=(t=t.call(n)).next,0===e){if(Object(t)!==t)return;u=!1}else for(;!(u=(r=i.call(t)).done)&&(c.push(r.value),c.length!==e);u=!0);}catch(n){s=!0,a=n}finally{try{if(!u&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(s)throw a}}return c}}(n,e)||F(n,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function U(n){return function(n){if(Array.isArray(n))return R(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||F(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function G(n){"@babel/helpers - typeof";return G="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},G(n)}function F(n,e){if(n){if("string"==typeof n)return R(n,e);var t={}.toString.call(n).slice(8,-1);return"Object"===t&&n.constructor&&(t=n.constructor.name),"Map"===t||"Set"===t?Array.from(n):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?R(n,e):void 0}}var H=36e5,W=["SIGINT","SIGTERM","SIGHUP"],J=new Set,B=!1;function Y(n,e){return K.apply(this,arguments)}function K(){return K=$(L().m(function n(e,t){var r,i,o,c,u,s,l,f,p,d,h;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t={}),i=a(null!=(r=e[0])?r:"",e.slice(1),{detached:!0,stdio:["ignore","pipe","pipe"]}),o=Z(i,t.timeoutMs),c=en(t.waitMessage,t.waitIntervalSeconds),n.n=1,tn(t.logFilePath);case 1:return u=n.v,n.p=2,n.n=3,Promise.all([X(i.stdout,function(n){return u.write(n)}),X(i.stderr,function(n){return u.write(n)}),new Promise(function(n,e){i.once("error",e),i.once("close",function(e){return n(null!=e?e:1)})})]);case 3:if(s=n.v,l=_(s,3),f=l[0],p=l[1],d=l[2],!o.timedOut()){n.n=4;break}throw new Error(Q("".concat(f).concat(p),o.timeoutMs,e));case 4:if(0!==d){n.n=5;break}return n.a(2,f);case 5:throw h="".concat(f).concat(p),new Error(h||"Command failed: ".concat(e.join(" ")));case 6:return n.p=6,n.n=7,u.close();case 7:return o.clear(),c(),n.f(6);case 8:return n.a(2)}},n,null,[[2,,6,8]])})),K.apply(this,arguments)}function Q(n,e,t){var r="Command timed out after ".concat(z(e),": ").concat(t.join(" "));return n.length>0?"".concat(n,"\n").concat(r):r}function z(n){return n%36e5==0?"".concat(n/36e5,"h"):n%6e4==0?"".concat(n/6e4,"m"):n%1e3==0?"".concat(n/1e3,"s"):"".concat(n,"ms")}function Z(n,e){void 0===e&&(e=H);var t,r=!1;J.add(n),function(){if(B)return;B=!0;var n,e=E(W);try{var t=function(){var e=n.value;process.once(e,function(){var n,t=E(J);try{for(t.s();!(n=t.n()).done;){V(n.value,e)}}catch(n){t.e(n)}finally{t.f()}process.exit(128+function(n){switch(n){case"SIGINT":return 2;case"SIGTERM":return 15;case"SIGHUP":return 1}}(e))})};for(e.s();!(n=e.n()).done;)t()}catch(n){e.e(n)}finally{e.f()}}();var a=setTimeout(function(){r=!0,V(n,"SIGTERM"),(t=setTimeout(function(){return V(n,"SIGKILL")},5e3)).unref()},e);return a.unref(),{clear:function(){clearTimeout(a),t&&clearTimeout(t),J.delete(n)},timedOut:function(){return r},timeoutMs:e}}function V(n,e){if(n.pid&&n.pid>0)try{return void process.kill(-n.pid,e)}catch(n){}n.kill(e)}function X(n,e){return nn.apply(this,arguments)}function nn(){return(nn=$(L().m(function n(e,t){var r,a,i,o,c,u,s,l,f,p,d;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:r=[],a=new TextDecoder,i=!1,o=!1,n.p=2,u=A(e);case 3:return n.n=4,u.next();case 4:if(!(i=!(s=n.v).done)){n.n=6;break}l=s.value,f="string"==typeof l?l:a.decode(new Uint8Array(l),{stream:!0}),r.push(f),null==t||t(f);case 5:i=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,d=n.v,o=!0,c=d;case 8:if(n.p=8,n.p=9,!i||null==u.return){n.n=10;break}return n.n=10,u.return();case 10:if(n.p=10,!o){n.n=11;break}throw c;case 11:return n.f(10);case 12:return n.f(8);case 13:return(p=a.decode())&&(r.push(p),null==t||t(p)),n.a(2,r.join(""))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function en(n,e,t){if(void 0===e&&(e=36),void 0===t&&(t=function(n){return process.stderr.write(n)}),!n)return function(){};var r=0,a=setInterval(function(){t("."),(r+=1)<=100&&r%5==0&&t(" ".concat(r,"% done "))},1e3*e);return t("".concat(n," ").concat("This can take up to 1 hour; dots indicate progress",": ")),function(){clearInterval(a),t("\n")}}function tn(n){return rn.apply(this,arguments)}function rn(){return rn=$(L().m(function n(e){var t,r,a;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,{write:function(){},close:function(){var n=$(L().m(function n(){return L().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()});case 1:return t=function(n){process.stderr.write("Warning: Failed to write command log to ".concat(e,": ").concat(String(n),"\n"))},n.p=2,n.n=3,c(m(e),{recursive:!0});case 3:return(r=o(e,{flags:"w"})).on("error",t),n.a(2,{write:function(n){r.writable&&r.write(n)},close:function(){var n=$(L().m(function n(){return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,new Promise(function(n){r.end(function(){return n()})});case 1:return n.a(2,n.v)}},n)}));return function(){return n.apply(this,arguments)}}()});case 4:return n.p=4,a=n.v,t(a),n.a(2,{write:function(){},close:function(){var n=$(L().m(function n(){return L().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()})}},n,null,[[2,4]])})),rn.apply(this,arguments)}var an="There is no concern.",on=["codex","claude","gemini"],cn=new RegExp("\\b".concat("there is no concern","\\b"),"i"),un={allAgentsLabel:"agents"},sn=String.fromCodePoint(7),ln=String.fromCodePoint(27),fn=new RegExp("".concat(ln,"\\[(\\d*)C"),"g"),pn=new RegExp("".concat(ln,"\\[[\\d;?]*[ -/]*[@-~]"),"g"),dn=new RegExp("".concat(ln,"\\][^").concat(sn,"]*(?:").concat(sn,"|").concat(ln,"\\\\)"),"g"),hn="gemini-3.1-pro-preview",mn=[/Type\s*your\s*message/i,/@path\/to\/file/i,/bypass\s*permissions/i,/YOLO\s+mode/i,/permissions:/i],vn=[{input:"\r",key:"workspace-trust",pattern:/(?:trust|trusted|untrusted|safety\s*check)[\s\S]*(?:Yes|continue|confirm|Press\s*enter)/i},{input:"\r",key:"model-selection",pattern:/(?:model|proceed|upgrade)[\s\S]*(?:continue|confirm|Try\s*new|Use\s*existing|Press\s*enter)/i}];function wn(n,e){return yn.apply(this,arguments)}function yn(){return(yn=$(L().m(function n(e,t){var r,a,i,o;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t=un),n.n=1,e;case 1:return r=n.v,a=en(Gn(t.allAgentsLabel)),n.p=2,n.n=3,Promise.all(on.map($(L().m(function n(e){var a,i,o,c,u;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,gn(e,r,{interactive:t.interactive,waitMessage:!1});case 1:if(o=n.v,c=o.trim(),u=null==(a=(i=t).mapOutput)?void 0:a.call(i,e,c),!t.mapOutput||void 0!==u){n.n=2;break}return n.a(2);case 2:return n.a(2,_n(e,null!=u?u:Mn(e,c)));case 3:return n.p=3,n.v,n.a(2,_n(e,Un(e)))}},n,null,[[0,3]])}))));case 3:return i=n.v,o=i.filter(function(n){return void 0!==n}),n.a(2,o.join("\n\n"));case 4:return n.p=4,a(),n.f(4);case 5:return n.a(2)}},n,null,[[2,,4,5]])}))).apply(this,arguments)}function gn(n,e,t){return bn.apply(this,arguments)}function bn(){return(bn=$(L().m(function n(e,t,r){var a,i,o,c,u,s,l;return L().w(function(n){for(;;)switch(n.n){case 0:if(void 0===r&&(r={}),!r.interactive){n.n=2;break}return o=kn,c=e,n.n=1,t;case 1:return n.a(2,o(c,n.v,{waitMessage:null!=(i=r.waitMessage)?i:Gn(Ln(e))}));case 2:return u=Y,s=Cn,l=e,n.n=3,t;case 3:return n.a(2,u(s(l,n.v),{logFilePath:Fn(e),waitMessage:null!=(a=r.waitMessage)?a:Gn(Ln(e))}))}},n)}))).apply(this,arguments)}function kn(n,e,t){return xn.apply(this,arguments)}function xn(){return(xn=$(L().m(function n(e,t,r){var a,i,o,c,u,s,l,f,p,d,h,m,v,w,y,g,b;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===r&&(r={}),a=Tn(),n.n=1,tn(Fn(e));case 1:if(i=n.v,o=en(r.waitMessage),c=new TextDecoder,f=Rn(e),n.p=2,s=Bun.spawn(Pn(e,a.callbackUrl),{env:N(N({},process.env),{},{TERM:null!=(p=process.env.TERM)?p:"xterm-256color"}),terminal:{cols:120,rows:40,data:function(n,e){var t=c.decode(e,{stream:!0});i.write(t),f.observe(t,n)}}}),l=s.terminal){n.n=3;break}throw new Error("Failed to start ".concat(Ln(e)," in a Bun terminal."));case 3:return u=Z({kill:function(n){var e;return null==(e=s)||e.kill(n),!0},pid:s.pid}),d=s.exited.then(function(n){throw new Error("".concat(Ln(e)," exited before posting a result with exit code ").concat(n,"."))}),n.n=4,Promise.race([f.wait(),d]);case 4:return n.n=5,In(1e3);case 5:return n.n=6,Sn(l,$n(e,t,a.callbackUrl));case 6:return n.n=7,Promise.race([a.result,d]);case 7:if(h=n.v,d.catch(function(){}),!u.timedOut()){n.n=8;break}throw new Error("Interactive ".concat(Ln(e)," command timed out after ").concat(z(H),"."));case 8:return n.a(2,h);case 9:if(n.p=9,b=n.v,null==(m=u)||!m.timedOut()){n.n=10;break}throw new Error("Interactive ".concat(Ln(e)," command timed out after ").concat(z(H),"."));case 10:throw b;case 11:return n.p=11,null==(v=l)||v.close(),null==(w=s)||w.kill("SIGTERM"),n.n=12,Promise.allSettled([null==(y=s)?void 0:y.exited,a.close(),i.close()]);case 12:return null==(g=u)||g.clear(),o(),n.f(11);case 13:return n.a(2)}},n,null,[[2,9,11,13]])}))).apply(this,arguments)}function Sn(n,e){return jn.apply(this,arguments)}function jn(){return(jn=$(L().m(function n(e,t){return L().w(function(n){for(;;)switch(n.n){case 0:return e.write(An(t)),n.n=1,In(250);case 1:e.write("\r");case 2:return n.a(2)}},n)}))).apply(this,arguments)}function In(n){return On.apply(this,arguments)}function On(){return(On=$(L().m(function n(e){return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,new Promise(function(n){return setTimeout(n,e)});case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Rn(n){var e,t="",r=new Set,a=!1,i=new Promise(function(n){e=n}),o=setTimeout(function(){a=!0,e()},function(n){switch(n){case"codex":case"claude":case"gemini":return 3e4}}(n));return o.unref(),{observe:function(i,c){if(!a){var u=function(n){return n.replaceAll(fn,function(n,e){return" ".repeat(Number(e||"1"))}).replaceAll(pn,"").replaceAll(dn,"")}(t="".concat(t).concat(i).slice(-4e3)),s=function(n,e){var t=function(n){return vn.find(function(e){return e.pattern.test(n)})}(e);if(t)return N(N({},t),{},{key:"".concat(n,"-").concat(t.key)});switch(n){case"codex":return/Choose\s*how\s*you'd\s*like\s*Codex\s*to\s*proceed/i.test(e)?{input:"\r",key:"codex-model-selection"}:/Do\s*you\s*trust\s*the\s*contents\s*of\s*this\s*directory/i.test(e)?{input:"\r",key:"codex-workspace-trust"}:void 0;case"claude":return/Quick\s*safety\s*check|Enter\s*to\s*confirm/i.test(e)?{input:"\r",key:"claude-workspace-trust"}:void 0;case"gemini":return}}(n,u);if(s&&!r.has(s.key))return r.add(s.key),void c.write(s.input);(function(n){var e=new RegExp(mn.map(function(n){return n.source}).join("|"),"i");switch(n){case"codex":return new RegExp("".concat(e.source,"|OpenAI\\s+Codex[\\s\\S]*permissions"),"i");case"claude":return new RegExp("".concat(e.source,'|Try\\s+"'),"i");case"gemini":return e}})(n).test(u)&&(a=!0,clearTimeout(o),e())}},wait:function(){return i}}}function An(n){return"[200~".concat(n,"[201~")}function Cn(n,e){switch(n){case"codex":return["npx","--yes","@openai/codex@latest","exec","--dangerously-bypass-approvals-and-sandbox",e];case"claude":return["claude","--dangerously-skip-permissions","-p",e];case"gemini":return["npx","--yes","@google/gemini-cli@preview","--approval-mode","yolo","--skip-trust","--model",hn,"-p",e]}}function Pn(n,e){switch(n){case"codex":return["npx","--yes","@openai/codex@latest","--dangerously-bypass-approvals-and-sandbox"];case"claude":return["claude","--dangerously-skip-permissions","--append-system-prompt",En(e)];case"gemini":return["npx","--yes","@google/gemini-cli@preview","--approval-mode","yolo","--skip-trust","--model",hn]}}function $n(n,e,t){return"claude"===n?e:"".concat(e,"\n\n").concat(En(t),"\n")}function En(n){return"After completing the request, send the final answer to this local callback server and do not include any extra wrapper text:\n\ncurl -sS -X POST '".concat(n,'\' \\\n -H \'content-type: application/json\' \\\n --data-binary @- <<\'JSON\'\n{"result":"replace this value with your final answer"}\nJSON\n\nThe CLI wrapper waits for that POST request and will read the "result" JSON field as the command output.\nDo not create any files in the repository for this callback payload.\n')}function Tn(){var n,e,t=new Promise(function(t,r){n=t,e=r}),r=Bun.serve({hostname:"127.0.0.1",port:0,fetch:function(t){return $(L().m(function r(){var a,i,o;return L().w(function(r){for(;;)switch(r.p=r.n){case 0:if(a=new URL(t.url),"POST"===t.method&&"/result"===a.pathname){r.n=1;break}return r.a(2,new Response("Not found",{status:404}));case 1:return r.p=1,i=n,r.n=2,qn(t);case 2:return i(r.v),r.a(2,new Response("OK\n"));case 3:return r.p=3,o=r.v,e(o instanceof Error?o:new Error(String(o))),r.a(2,new Response("Invalid result payload\n",{status:400}))}},r,null,[[1,3]])}))()}});return{callbackUrl:new URL("/result",r.url).toString(),close:function(){return r.stop(!0)},result:t}}function qn(n){return Nn.apply(this,arguments)}function Nn(){return(Nn=$(L().m(function n(e){var t,r;return L().w(function(n){for(;;)switch(n.n){case 0:if(!(null!=(t=e.headers.get("content-type"))?t:"").includes("application/json")){n.n=3;break}return n.n=1,e.json();case 1:if("string"==typeof(r=n.v).result){n.n=2;break}throw new TypeError('Interactive agent result JSON must include a string "result" field.');case 2:return n.a(2,r.result);case 3:return n.a(2,e.text())}},n)}))).apply(this,arguments)}function Ln(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function Dn(n){return cn.test(n)}function Mn(n,e){return 0===e.length?Un(n):Dn(e)?an:e}function _n(n,e){return"## ".concat(Ln(n),"\n\n").concat(e)}function Un(n){return"".concat(Ln(n)," did not return a review result.")}function Gn(n){return"Waiting for ".concat(n," to finish.")}function Fn(n){return"logs/".concat(n,"-").concat((e=new Date,t=_([e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds()].map(Hn),5),r=t[0],a=t[1],i=t[2],o=t[3],c=t[4],"".concat(r).concat(a,"-").concat(i).concat(o).concat(c)),".log");var e,t,r,a,i,o,c}function Hn(n){return n.toString().padStart(2,"0")}var Wn=["dependencies","devDependencies","peerDependencies","optionalDependencies"],Jn=new Set([".git","node_modules"]),Bn=["bun","update","--latest"];function Yn(n){return Kn.apply(this,arguments)}function Kn(){return(Kn=$(L().m(function n(e){var t,r,a,i,o;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===e&&(e=process.cwd()),n.n=1,Qn(e);case 1:return t=n.v,n.n=2,we(e,t);case 2:return n.n=3,xe(e,"root");case 3:r=E(t),n.p=4,r.s();case 5:if((a=r.n()).done){n.n=7;break}return i=a.value,n.n=6,xe(v(e,i),i);case 6:n.n=5;break;case 7:n.n=9;break;case 8:n.p=8,o=n.v,r.e(o);case 9:return n.p=9,r.f(),n.f(9);case 10:return n.a(2)}},n,null,[[4,8,9,10]])}))).apply(this,arguments)}function Qn(n){return zn.apply(this,arguments)}function zn(){return(zn=$(L().m(function n(e){var t,r,a,i,o,c,u,s,l,f,p,d,h,m;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return h=Zn,n.n=1,ge(e);case 1:return t=h(n.v),n.n=2,Vn(e,t);case 2:r=n.v,a=new Set,i=new Set,o=E(t),n.p=3,o.s();case 4:if((c=o.n()).done){n.n=7;break}return u=c.value,s=u.startsWith("!"),n.n=5,fe(e,r,s?u.slice(1):u);case 5:l=n.v,f=E(l);try{for(f.s();!(p=f.n()).done;)d=p.value,s?i.add(d):a.add(d)}catch(n){f.e(n)}finally{f.f()}case 6:n.n=4;break;case 7:n.n=9;break;case 8:n.p=8,m=n.v,o.e(m);case 9:return n.p=9,o.f(),n.f(9);case 10:return n.a(2,U(a).filter(function(n){return"."!==n&&!i.has(n)}).toSorted(function(n,e){return n.localeCompare(e)}))}},n,null,[[3,8,9,10]])}))).apply(this,arguments)}function Zn(n){var e,t=n.workspaces,r=void 0===t?[]:t;return Array.isArray(r)?r:null!=(e=r.packages)?e:[]}function Vn(n,e){return Xn.apply(this,arguments)}function Xn(){return(Xn=$(L().m(function n(e,t){var r,a,i,o,c,u,s,l,f,p,d,h;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:r=new Set,a=ne(t),i=E(a),n.p=1,i.s();case 2:if((o=i.n()).done){n.n=7;break}return c=o.value,u=c.maxDepth,s=c.root,n.n=3,oe(e,s);case 3:if(n.v){n.n=4;break}return n.a(3,6);case 4:return d=E,n.n=5,ue(e,s,u);case 5:l=d(n.v);try{for(l.s();!(f=l.n()).done;)p=f.value,r.add(p)}catch(n){l.e(n)}finally{l.f()}case 6:n.n=2;break;case 7:n.n=9;break;case 8:n.p=8,h=n.v,i.e(h);case 9:return n.p=9,i.f(),n.f(9);case 10:return n.a(2,U(r))}},n,null,[[1,8,9,10]])}))).apply(this,arguments)}function ne(n){var e,t=new Map,r=E(n);try{for(r.s();!(e=r.n()).done;){var a=e.value;if(!a.startsWith("!"))for(var i=0,o=ee(a);i<o.length;i++){var c=o[i];t.set(c.root,t.has(c.root)?te(t.get(c.root),c.maxDepth):c.maxDepth)}}}catch(n){r.e(n)}finally{r.f()}return U(t.entries()).map(function(n){var e=_(n,2),t=e[0];return{maxDepth:e[1],root:t}}).filter(function(n){return!function(n,e){return U(e.entries()).some(function(e){var t,r,a=_(e,2),i=a[0],o=a[1];return i!==n.root&&("."===i||n.root.startsWith("".concat(i,"/")))&&(t=o,r=n.maxDepth,void 0===t||void 0!==r&&t>=r)})}(n,t)}).toSorted(function(n,e){return n.root.localeCompare(e.root)})}function ee(n){return b(de(n)).map(function(n){return{maxDepth:ie(n),root:re(n)}})}function te(n,e){return void 0===n||void 0===e?void 0:Math.max(n,e)}function re(n){var e,t=[],r=E(n.split("/"));try{for(r.s();!(e=r.n()).done;){var a=e.value;if(""===a||ae(a))break;t.push(a)}}catch(n){r.e(n)}finally{r.f()}return 0===t.length?".":t.join("/")}function ae(n){return/[*?[\]{}()!+]/.test(n)}function ie(n){if(!n.split("/").includes("**"))return le(n)}function oe(n,e){return ce.apply(this,arguments)}function ce(){return(ce=$(L().m(function n(e,t){var r;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,s(v(e,t));case 1:return r=n.v,n.a(2,r.isDirectory());case 2:return n.p=2,n.v,n.a(2,!1)}},n,null,[[0,2]])}))).apply(this,arguments)}function ue(n,e,t){return se.apply(this,arguments)}function se(){return(se=$(L().m(function n(e,t,r){var a,i,o,c,u,s,f,p,d,h;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:if(void 0===t&&(t="."),a=[t],!(void 0!==r&&le(t)>=r)){n.n=1;break}return n.a(2,a);case 1:return n.n=2,l(v(e,t),{withFileTypes:!0});case 2:i=n.v,o=E(i),n.p=3,o.s();case 4:if((c=o.n()).done){n.n=9;break}if((u=c.value).isDirectory()&&!Jn.has(u.name)){n.n=5;break}return n.a(3,8);case 5:if(s=v(t,u.name).split(y).join("/"),!(void 0!==r&&le(s)>r)){n.n=6;break}return n.a(3,8);case 6:return f=a.push,p=a,d=U,n.n=7,ue(e,s,r);case 7:f.apply.call(f,p,d(n.v));case 8:n.n=4;break;case 9:n.n=11;break;case 10:n.p=10,h=n.v,o.e(h);case 11:return n.p=11,o.f(),n.f(11);case 12:return n.a(2,a)}},n,null,[[3,10,11,12]])}))).apply(this,arguments)}function le(n){return"."===n?0:n.split("/").length}function fe(n,e,t){return pe.apply(this,arguments)}function pe(){return(pe=$(L().m(function n(e,t,r){var a,i,o,c,u,s,l;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:a=he(de(r)),i=[],o=E(t),n.p=1,o.s();case 2:if((c=o.n()).done){n.n=6;break}if(u=c.value,!(s=a(u))){n.n=4;break}return n.n=3,me(e,u);case 3:s=n.v;case 4:if(!s){n.n=5;break}i.push(u);case 5:n.n=2;break;case 6:n.n=8;break;case 7:n.p=7,l=n.v,o.e(l);case 8:return n.p=8,o.f(),n.f(8);case 9:return n.a(2,i)}},n,null,[[1,7,8,9]])}))).apply(this,arguments)}function de(n){var e=function(n){var e=n.split(y).join("/");return""===e?".":e}(n).replace(/\/$/,"");return"."===e?e:e.startsWith("./")?e.slice(2):e}function he(n){return function(e){return g(e,n,{dot:!0})}}function me(n,e){return ve.apply(this,arguments)}function ve(){return(ve=$(L().m(function n(e,t){var r;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,s(v(e,t,"package.json"));case 1:return r=n.v,n.a(2,r.isFile());case 2:return n.p=2,n.v,n.a(2,!1)}},n,null,[[0,2]])}))).apply(this,arguments)}function we(n,e){return ye.apply(this,arguments)}function ye(){return(ye=$(L().m(function n(e,t){var r,a,i,o,c,u,s,l;return L().w(function(n){for(;;)switch(n.n){case 0:r=[],a=0,i=["."].concat(U(t));case 1:if(!(a<i.length)){n.n=4;break}return o=i[a],n.n=2,ge("."===o?e:v(e,o));case 2:c=n.v,u=E(ke(c));try{for(u.s();!(s=u.n()).done;)l=s.value,r.push("".concat("."===o?"root":o,": ").concat(l))}catch(n){u.e(n)}finally{u.f()}case 3:a++,n.n=1;break;case 4:if(0!==r.length){n.n=5;break}return n.a(2);case 5:throw new Error(["Cannot safely update Bun workspace dependencies with catalog references.","Update catalog versions in the root package.json, then run bun install.","Catalog-managed dependencies: ".concat(r.join(", "))].join("\n"));case 6:return n.a(2)}},n)}))).apply(this,arguments)}function ge(n){return be.apply(this,arguments)}function be(){return(be=$(L().m(function n(e){var t,r,a;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return t=v(e,"package.json"),n.p=1,r=JSON,n.n=2,u(t,"utf8");case 2:return n.a(2,r.parse.call(r,n.v));case 3:throw n.p=3,a=n.v,new Error("Failed to read ".concat(t,": ").concat(String(a)));case 4:return n.a(2)}},n,null,[[1,3]])}))).apply(this,arguments)}function ke(n){var e,t=[],r=E(Wn);try{for(r.s();!(e=r.n()).done;){var a=n[e.value];if(a)for(var i=0,o=Object.entries(a);i<o.length;i++){var c=_(o[i],2),u=c[0];c[1].startsWith("catalog:")&&t.push(u)}}}catch(n){r.e(n)}finally{r.f()}return t}function xe(n,e){return Se.apply(this,arguments)}function Se(){return(Se=$(L().m(function n(e,t){return L().w(function(n){for(;;)switch(n.n){case 0:return process.stdout.write("\n# ".concat(t,"\n")),n.n=1,je(Bn,e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function je(n,e){return Ie.apply(this,arguments)}function Ie(){return(Ie=$(L().m(function n(e,t){var r;return L().w(function(n){for(;;)switch(n.n){case 0:return r=a(e[0],e.slice(1),{cwd:t,stdio:"inherit"}),n.n=1,new Promise(function(n,a){r.once("error",a),r.once("close",function(r){0!==r?a(new Error("Command failed in ".concat(w(process.cwd(),t)||".",": ").concat(e.join(" ")))):n()})});case 1:return n.a(2)}},n)}))).apply(this,arguments)}var Oe={blockQuote:"literal",lineWidth:0};function Re(n){r.write("".concat(n,"\n"))}function Ae(n,e){void 0===e&&(e=1),r.write("".concat(n,"\n")),process.exit(e)}function Ce(){return Pe.apply(this,arguments)}function Pe(){return(Pe=$(L().m(function n(){return L().w(function(n){for(;;)switch(n.n){case 0:if(!t.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,X(t);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function $e(n){return Ee.apply(this,arguments)}function Ee(){return(Ee=$(L().m(function n(e){var t;return L().w(function(n){for(;;)switch(n.n){case 0:return void 0===e&&(e="Error: input is required on stdin"),n.n=1,Ce();case 1:if(!((t=n.v).length>0)){n.n=2;break}return n.a(2,t);case 2:Ae(e,2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function Te(n,e){return qe.apply(this,arguments)}function qe(){return qe=$(L().m(function n(e,t){var r,i,o,c,u;return L().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),i=null!=(r=t.allowedExitCodes)?r:[],o=L().m(function n(){var r,o,c,s,l,f,p,d,h,m,v;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return o=a(null!=(r=e[0])?r:"",e.slice(1),{detached:!0,stdio:["pipe","pipe","pipe"]}),s=!1,l=Z(o),n.p=1,void 0!==t.stdinData?o.stdin.end(t.stdinData):o.stdin.end(),n.n=2,Promise.all([X(o.stdout),X(o.stderr),new Promise(function(n,e){o.once("error",e),o.once("close",function(e){return n(null!=e?e:1)})})]);case 2:if(f=n.v,p=_(f,3),d=p[0],h=p[1],m=p[2],v="".concat(d).concat(h),!l.timedOut()){n.n=3;break}c=Q(v,l.timeoutMs,e),n.n=5;break;case 3:if(0!==m&&!i.includes(m)){n.n=4;break}return n.a(2,{v:v});case 4:Ke(e,m,v)&&u<3?s=!0:c=v||"Command failed: ".concat(e.join(" "));case 5:return n.p=5,l.clear(),n.f(5);case 6:if(!s){n.n=8;break}return Re("Transient GitHub CLI failure; retrying... (attempt ".concat(u," of ").concat(2,")")),n.n=7,k(1e3*u);case 7:return n.a(2,0);case 8:c&&Ae(c);case 9:return n.a(2)}},n,null,[[1,,5,6]])}),u=1;case 1:if(!(u<=3)){n.n=5;break}return n.d(M(o()),2);case 2:if(0!==(c=n.v)){n.n=3;break}return n.a(3,4);case 3:if(!c){n.n=4;break}return n.a(2,c.v);case 4:u+=1,n.n=1;break;case 5:Ae("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),qe.apply(this,arguments)}function Ne(n,e){return Le.apply(this,arguments)}function Le(){return(Le=$(L().m(function n(e,t){return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Te(["gh"].concat(U(e)),{stdinData:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function De(n,e,t){return Me.apply(this,arguments)}function Me(){return(Me=$(L().m(function n(e,t,r){return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Te(["gh"].concat(U(e)),{stdinData:r,allowedExitCodes:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function _e(){return Ue.apply(this,arguments)}function Ue(){return(Ue=$(L().m(function n(){var e,t,r,a,i,o;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ne(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v,t=e.trim(),r=t.split("/",2),a=_(r,2),i=a[0],o=a[1],i&&o||Ae("Error: could not determine current repository"),n.a(2,[i,o])}},n)}))).apply(this,arguments)}function Ge(){return Fe.apply(this,arguments)}function Fe(){return(Fe=$(L().m(function n(){var e;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ne(["pr","view","--json","number","--jq",".number"]);case 1:return e=n.v,n.a(2,e.trim())}},n)}))).apply(this,arguments)}function He(n,e){return We.apply(this,arguments)}function We(){return(We=$(L().m(function n(e,t){var r,a,i,o,c,u,s,l,f;return L().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),r=["api","graphql","-F","query=@-"],a=0,i=Object.entries(t);case 1:if(!(a<i.length)){n.n=4;break}if(o=_(i[a],2),c=o[0],void 0!==(u=o[1])&&""!==u){n.n=2;break}return n.a(3,3);case 2:r.push("-F","".concat(c,"=").concat(u));case 3:a++,n.n=1;break;case 4:return f=JSON,n.n=5,Ne(r,e);case 5:if(s=f.parse.call(f,n.v),Array.isArray(s.errors)){n.n=6;break}return n.a(2,s);case 6:l=s.errors.map(function(n){var e;return null!=(e=n.message)?e:"Unknown GraphQL error"}).join("\n"),Ae("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function Je(n){return S(n,Oe)}function Be(n){return structuredClone(n)}function Ye(n,e){var t,r,a,o,c=i(null!=(t=n[0])?t:"",n.slice(1),{encoding:"utf8",input:e});return{exitCode:null!=(r=c.status)?r:c.error?1:0,output:"".concat(null!=(a=c.stdout)?a:"").concat(null!=(o=c.stderr)?o:"")}}function Ke(n,e,t){return"gh"===n[0]&&0!==e&&/(HTTP 50[0234]\b|We had issues producing the response to your request)/i.test(t)}var Qe=/\btest\b/i,ze=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","jobs","name","number","startedAt","status","updatedAt","url","workflowName"],Ze=/^.*?\tUNKNOWN STEP\t\d{4}-\d{2}-\d{2}T[^Z]+Z\s*/,Ve=0===Ye(["rtk","--version"]).exitCode,Xe=function(){};function nt(n){return et.apply(this,arguments)}function et(){return(et=$(L().m(function n(e){var t,r,a,i,o,c,u,s,l,f,p,d,h,m,v,w;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return c=["pr","checks"],e&&c.push(e),c.push("--json","bucket,completedAt,description,event,link,name,startedAt,state,workflow"),u=[],n.p=1,n.n=2,De(c,[8]);case 2:s=n.v,u=s.trim().length>0?JSON.parse(s):[],n.n=5;break;case 3:if(n.p=3,!((w=n.v)instanceof SyntaxError)){n.n=4;break}u=[],n.n=5;break;case 4:throw w;case 5:l={},f=E(u);try{for(f.s();!(p=f.n()).done;)m=p.value,v=null!=(d=m.bucket)?d:"",l[v]=(null!=(h=l[v])?h:0)+1}catch(n){f.e(n)}finally{f.f()}return n.a(2,{summary:{total:u.length,pass:null!=(t=l.pass)?t:0,fail:null!=(r=l.fail)?r:0,pending:null!=(a=l.pending)?a:0,skipping:null!=(i=l.skipping)?i:0,cancel:null!=(o=l.cancel)?o:0},checks:u})}},n,null,[[1,3]])}))).apply(this,arguments)}function tt(n,e,t,r){return rt.apply(this,arguments)}function rt(){return(rt=$(L().m(function n(e,t,a,i){var o,c,u,s,l,f,p,d;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t=dt),void 0===a&&(a=nt),void 0===i&&(i=function(n){return r.write(n)}),o=0,n.n=1,a(e);case 1:c=n.v,u=Xe,n.p=2;case 3:if(s=at(c),l=it(s),f=_(l,2),p=f[0],d=f[1],!(Object.keys(p).length>0||0===Object.keys(d).length)){n.n=4;break}return n.a(2,[c,o,!1]);case 4:if(!(o>=100)){n.n=5;break}return n.a(2,[c,o,!0]);case 5:return 1===(o+=1)&&(u=en("Waiting for test-related workflows to finish.",36,i)),n.n=6,t(36);case 6:return n.n=7,a(e);case 7:c=n.v;case 8:n.n=3;break;case 9:return n.p=9,u(),n.f(9);case 10:return n.a(2)}},n,null,[[2,,9,10]])}))).apply(this,arguments)}function at(n){var e,t={},r=E(n.checks);try{for(r.s();!(e=r.n()).done;){var a=e.value,i=a.workflow||a.name||"unknown_workflow";null!=t[i]||(t[i]=[]),t[i].push(a)}}catch(n){r.e(n)}finally{r.f()}return Object.fromEntries(Object.entries(t).map(function(n){var e=_(n,2),t=e[0],r=function(n){var e,t=new Map,r=E(n);try{for(r.s();!(e=r.n()).done;){var a=e.value,i=st(a),o=t.get(i);o?o.push(a):t.set(i,[a])}}catch(n){r.e(n)}finally{r.f()}var c,u=[],s=E(t.values());try{for(s.s();!(c=s.n()).done;){var l=c.value;0!==u.length?wt(l)>wt(u)&&(u=l):u=l}}catch(n){s.e(n)}finally{s.f()}return u}(e[1]),a=r[0];a||Ae("Error: no checks found for workflow ".concat(t));for(var i=a,o=0,c=r;o<c.length;o++){var u=c[o];ft(u)>ft(i)&&(i=u)}return[t,{classification:lt(r),check:i,checks:r}]}))}function it(n){for(var e={},t={},r=0,a=Object.entries(n);r<a.length;r++){var i=_(a[r],2),o=i[0],c=i[1];"failed"!==c.classification?"running"===c.classification&&c.checks.some(function(n){return pt(n)})&&(t[o]=c):e[o]=c}return[e,t]}function ot(n){var e,t=null==n?void 0:n.link;if(t)return null==(e=t.match(/\/actions\/runs\/(\d+)/))?void 0:e[1]}function ct(n){return ut.apply(this,arguments)}function ut(){return(ut=$(L().m(function n(e){var t,a;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,void 0);case 1:return n.n=2,De(["run","view",e,"--json",ze.join(",")],[1]);case 2:if(0!==(t=n.v).trim().length){n.n=3;break}return n.a(2,void 0);case 3:return n.p=3,n.a(2,JSON.parse(t));case 4:if(n.p=4,!((a=n.v)instanceof SyntaxError)){n.n=5;break}return r.write("Warning: Could not parse JSON for workflow run ".concat(e,": ").concat(a.message,"\n")),n.a(2,void 0);case 5:throw a;case 6:return n.a(2)}},n,null,[[3,4]])}))).apply(this,arguments)}function st(n){var e=ot(n);return e?"run:".concat(e):"unknown_run"}function lt(n){var e=n.map(function(n){var e;return null!=(e=n.bucket)?e:""});return e.some(function(n){return!["pass","skipping","pending"].includes(n)})?"failed":e.includes("pending")?"running":"successful"}function ft(n){var e,t=n.completedAt;return t&&"0001-01-01T00:00:00Z"!==t?t:null!=(e=n.startedAt)?e:""}function pt(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&Qe.test(n)})}function dt(n){return ht.apply(this,arguments)}function ht(){return(ht=$(L().m(function n(e){return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,k(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function mt(){return vt.apply(this,arguments)}function vt(){return(vt=$(L().m(function n(){var e,t,r,a,i,o,c,u,s,l,f,p,d;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ge();case 1:return e=n.v,n.n=2,yt(e);case 2:return t=n.v,Re("Fetching latest CI results..."),n.n=3,tt(e);case 3:if(r=n.v,a=_(r,3),i=a[0],o=a[1],c=a[2],u=at(i),s=it(u),l=_(s,2),f=l[0],p=l[1],d={summary:Be(i.summary),waited_for_test_related_checks:o>0,test_related_check_wait_attempts:o,test_related_check_wait_timed_out:c,latestCommits:t},!(Object.keys(f).length>0)){n.n=5;break}return n.n=4,Promise.all(Object.entries(f).map($(L().m(function n(e){var t,r,a,i,o,c,u;return L().w(function(n){for(;;)switch(n.n){case 0:return t=_(e,2),r=t[0],a=t[1],n.n=1,kt(r,a);case 1:return i=n.v,o=N,c=N({},i),u=It,n.n=2,St(a.check);case 2:return n.a(2,o(c,u(n.v)))}},n)}))));case 4:return d.failed_workflows=n.v,n.a(2,{output:Je(d),exitCode:1});case 5:if(!(Object.keys(p).length>0)){n.n=7;break}return d.test_workflow_output="Timed out waiting for test-related workflows to finish.",n.n=6,Promise.all(Object.entries(p).map(function(n){var e=_(n,2);return kt(e[0],e[1])}));case 6:return d.running_test_related_workflows=n.v,n.a(2,{output:Je(d),exitCode:1});case 7:return n.a(2,{output:bt(t),exitCode:0})}},n)}))).apply(this,arguments)}function wt(n){var e,t="",r=E(n);try{for(r.s();!(e=r.n()).done;){var a=ft(e.value);a>t&&(t=a)}}catch(n){r.e(n)}finally{r.f()}return t}function yt(n){return gt.apply(this,arguments)}function gt(){return(gt=$(L().m(function n(e){var t,r,a,i,o,c,u;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,_e();case 1:return a=n.v,i=_(a,2),o=i[0],c=i[1],n.n=2,He("\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n commits(last: 3) {\n nodes {\n commit {\n committedDate\n abbreviatedOid\n messageHeadline\n }\n }\n }\n }\n }\n }\n",{owner:o,name:c,number:Number(e)});case 2:return u=n.v,n.a(2,(null!=(t=null==(r=u.data)||null==(r=r.repository)||null==(r=r.pullRequest)||null==(r=r.commits)?void 0:r.nodes)?t:[]).flatMap(function(n){var e,t,r,a=At(null==(e=n.commit)?void 0:e.committedDate),i=At(null==(t=n.commit)?void 0:t.abbreviatedOid),o=At(null==(r=n.commit)?void 0:r.messageHeadline);return a&&i&&o?[{date:a,hash:i,title:o}]:[]}).toReversed())}},n)}))).apply(this,arguments)}function bt(n){return"All CI workflows passed.\n".concat(function(n){if(0===n.length)return"Latest commits: unavailable.\n";return Je({latestCommits:n})}(n))}function kt(n,e){return xt.apply(this,arguments)}function xt(){return(xt=$(L().m(function n(e,t){var r,a,i,o;return L().w(function(n){for(;;)switch(n.n){case 0:return a=ot(t.check),n.n=1,ct(a);case 1:return i=n.v,o=Ct(i,At(t.check.name)),n.a(2,{classification:t.classification,workflow:e,job:At(t.check.name),job_url:At(null==o?void 0:o.url),failed_step:Pt(o),run_id:a,run_url:null!=(r=At(null==i?void 0:i.url))?r:At(t.check.link),branch:At(null==i?void 0:i.headBranch),sha:At(null==i?void 0:i.headSha),conclusion:At(null==i?void 0:i.conclusion)})}},n)}))).apply(this,arguments)}function St(n){return jt.apply(this,arguments)}function jt(){return(jt=$(L().m(function n(e){var t;return L().w(function(n){for(;;)switch(n.n){case 0:if(t=ot(e)){n.n=1;break}return n.a(2,"Failed latest result has no GitHub Actions run link.");case 1:return n.n=2,De(["run","view",t,"--log-failed"],[1]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function It(n){return{failed_log:Ot(n)}}function Ot(n){var e=Rt(x(n));if(!Ve)return e;var t=Ye(["rtk","log"],e);return 0===t.exitCode&&t.output.trim().length>0?Rt(t.output):e}function Rt(n){return n.split("\n").map(function(n){return n.replace(Ze,"")}).join("\n").trim()}function At(n){return"string"==typeof n&&n.length>0?n:void 0}function Ct(n,e){var t,r;if(null!=n&&n.jobs&&0!==n.jobs.length)return null!=(t=null!=(r=n.jobs.find(function(n){return n.name===e}))?r:n.jobs.find(function(n){return"failure"===n.conclusion}))?t:n.jobs.find(function(n){return"completed"!==n.status})}function Pt(n){var e,t,r;if(null!=n&&n.steps&&0!==n.steps.length)return null!=(e=null==(t=n.steps.find(function(n){return"failure"===n.conclusion}))?void 0:t.name)?e:null==(r=n.steps.find(function(n){return"completed"!==n.status}))?void 0:r.name}function $t(){return Et.apply(this,arguments)}function Et(){return(Et=$(L().m(function n(){var e,t;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Nt();case 1:if(null==(e=n.v)){n.n=2;break}t=e,n.n=4;break;case 2:return n.n=3,Tt();case 3:t=n.v;case 4:return n.a(2,t)}},n)}))).apply(this,arguments)}function Tt(){return qt.apply(this,arguments)}function qt(){return(qt=$(L().m(function n(){var e;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Y(["gh","repo","view","--json","defaultBranchRef","--template","{{.defaultBranchRef.name}}"]);case 1:return e=n.v,n.a(2,Mt(e.trim(),"Error: could not determine the default branch"))}},n)}))).apply(this,arguments)}function Nt(){return Lt.apply(this,arguments)}function Lt(){return(Lt=$(L().m(function n(){var e,t,r;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,Y(["gh","pr","view","--json","baseRefName","--template","{{.baseRefName}}"]);case 1:return e=n.v,t=e.trim(),n.a(2,t.length>0?t:void 0);case 2:if(n.p=2,!Dt(r=n.v)){n.n=3;break}return n.a(2,void 0);case 3:throw r;case 4:return n.a(2)}},n,null,[[0,2]])}))).apply(this,arguments)}function Dt(n){return/no pull requests? found for branch/i.test(String(n))}function Mt(n,e){if(n.length>0)return n;throw new Error(e)}function _t(n){return Qt(n,"issue")}function Ut(n){return Qt(n,"pull request")}function Gt(n){return Ft.apply(this,arguments)}function Ft(){return(Ft=$(L().m(function n(e){var t,r,a,i,o;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,_e();case 1:return t=n.v,r=_(t,2),a=r[0],i=r[1],n.n=2,zt(a,i,_t(e));case 2:return o=n.v,Re("Fetched issue #".concat(o.number," messages.")),n.a(2,Je({issue:o}))}},n)}))).apply(this,arguments)}function Ht(n){return Wt.apply(this,arguments)}function Wt(){return(Wt=$(L().m(function n(e){var t,r,a;return L().w(function(n){for(;;)switch(n.n){case 0:if(void 0!==e){n.n=2;break}return n.n=1,Ge();case 1:a=n.v,n.n=3;break;case 2:a=Ut(e);case 3:return t=a,n.n=4,Yt(t);case 4:return r=n.v,Re("Fetched pull request #".concat(r.number," messages.")),n.a(2,Je({pull_request:r}))}},n)}))).apply(this,arguments)}function Jt(){return Bt.apply(this,arguments)}function Bt(){return(Bt=$(L().m(function n(){var e,t,r;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,De(["pr","view","--json","number","--jq",".number"],[1]);case 1:if(e=n.v,t=e.trim(),!Dt(e)&&/^\d+$/.test(t)){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,Yt(t);case 3:return r=n.v,n.a(2,Je({pull_request:r}))}},n)}))).apply(this,arguments)}function Yt(n){return Kt.apply(this,arguments)}function Kt(){return(Kt=$(L().m(function n(e){var t,r,a,i;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,_e();case 1:return t=n.v,r=_(t,2),a=r[0],i=r[1],n.n=2,Vt(a,i,e);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Qt(n,e){var t=String(n).trim();if(0===t.length&&Ae("Error: ".concat(e," reference is required"),2),/^\d+$/.test(t))return t;var r="issue"===e?"issues":"pull",a=t.match(new RegExp("^https?://(?:www\\.)?github\\.com/[^/]+/[^/]+/".concat(r,"/(\\d+)(?:/|$)")));if(null!=a&&a[1])return a[1];Ae("Error: expected a GitHub ".concat(e,' number or URL, received "').concat(t,'"'),2)}function zt(n,e,t){return Zt.apply(this,arguments)}function Zt(){return(Zt=$(L().m(function n(e,t,r){var a,i;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,cr({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:t,number:r,noun:"issue",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.issue}});case 1:return a=n.v,n.n=2,ir({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.issue)?void 0:e.comments},mapNode:sr});case 2:return i=n.v,n.a(2,N(N({},a),{},{messages:i}))}},n)}))).apply(this,arguments)}function Vt(n,e,t){return Xt.apply(this,arguments)}function Xt(){return(Xt=$(L().m(function n(e,t,r){var a,i,o,c,u;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,cr({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:t,number:r,noun:"pull request",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.pullRequest}});case 1:return a=n.v,n.n=2,Promise.all([er(e,t,r),rr(e,t,r)]);case 2:return i=n.v,o=_(i,2),c=o[0],u=o[1],n.a(2,N(N({},a),{},{messages:[].concat(U(c),U(u)).toSorted(nr)}))}},n)}))).apply(this,arguments)}function nr(n,e){var t="string"==typeof n.createdAt?n.createdAt:"",r="string"==typeof e.createdAt?e.createdAt:"";return t.localeCompare(r)}function er(n,e,t){return tr.apply(this,arguments)}function tr(){return(tr=$(L().m(function n(e,t,r){return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ir({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.comments},mapNode:sr});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function rr(n,e,t){return ar.apply(this,arguments)}function ar(){return(ar=$(L().m(function n(e,t,r){return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ir({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviews(first: 100, after: $cursor) {\n nodes {\n id\n body\n state\n submittedAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.reviews},mapNode:lr});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function ir(n){return or.apply(this,arguments)}function or(){return(or=$(L().m(function n(e){var t,r,a,i,o;return L().w(function(n){for(;;)switch(n.n){case 0:r=[];case 1:return o=e,n.n=2,He(e.query,{owner:e.owner,name:e.name,number:Number(e.number),cursor:t});case 2:if(i=o.selectConnection.call(o,n.v)){n.n=3;break}return n.a(2,r);case 3:if(r.push.apply(r,U(i.nodes.map(e.mapNode).filter(fr))),i.pageInfo.hasNextPage){n.n=4;break}return n.a(2,r);case 4:t=null!=(a=i.pageInfo.endCursor)?a:void 0;case 5:n.n=1;break;case 6:return n.a(2)}},n)}))).apply(this,arguments)}function cr(n){return ur.apply(this,arguments)}function ur(){return(ur=$(L().m(function n(e){var t,r,a,i,o;return L().w(function(n){for(;;)switch(n.n){case 0:return o=e,n.n=1,He(e.query,{owner:e.owner,name:e.name,number:Number(e.number)});case 1:return(i=o.selectMetadata.call(o,n.v))||Ae("Could not find ".concat(e.noun," #").concat(e.number," in ").concat(e.owner,"/").concat(e.name,".")),n.a(2,{number:i.number,title:i.title,url:i.url,author:null!=(t=null==(r=i.author)?void 0:r.login)?t:void 0,body:null!=(a=i.body)?a:""})}},n)}))).apply(this,arguments)}function sr(n){var e,t;return{type:"comment",author:null!=(e=null==(t=n.author)?void 0:t.login)?e:void 0,createdAt:n.createdAt,url:n.url,body:n.body}}function lr(n){var e,t,r,a,i;return{type:"review",author:null!=(e=null==(t=n.author)?void 0:t.login)?e:void 0,state:null!=(r=n.state)?r:void 0,createdAt:null!=(a=n.submittedAt)?a:void 0,url:n.url,body:null!=(i=n.body)?i:""}}function fr(n){return"string"==typeof n.body&&n.body.length>0}function pr(n){return dr.apply(this,arguments)}function dr(){return(dr=$(L().m(function n(e){var t,r,a,i,o,c,u,s,l,f;return L().w(function(n){for(;;)switch(n.n){case 0:return r=(t=void 0===e?{}:e).body,a=t.title,n.n=1,Te(["git","branch","--show-current"]);case 1:return i=n.v,o=i.trim(),n.n=2,Ne(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return c=n.v,u=c.trim(),o||Ae("Error: could not determine current branch"),u||Ae("Error: could not determine default branch"),o===u&&Ae("Error: current branch is the default branch (".concat(u,")")),s=["pr","create","--base",u,"--head",o,"--fill"],a&&s.push("--title",a),r&&s.push("--body-file","-"),Re("Creating pull request..."),n.n=3,Ne(s,r);case 3:return l=Je,f=JSON,n.n=4,Ne(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,l(f.parse.call(f,n.v)))}},n)}))).apply(this,arguments)}function hr(n){return mr.apply(this,arguments)}function mr(){return(mr=$(L().m(function n(e){var t,r,a;return L().w(function(n){for(;;)switch(n.n){case 0:return t=e.body,r=e.title,n.n=1,Ge();case 1:return a=n.v,Re("Updating pull request #".concat(a,"...")),n.n=2,vr(a,["--title",r,"--body-file","-"],t);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function vr(n,e,t){return wr.apply(this,arguments)}function wr(){return(wr=$(L().m(function n(e,t,r){var a,i;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ne(["pr","edit",e].concat(U(t)),r);case 1:return a=Je,i=JSON,n.n=2,Ne(["pr","view",e,"--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author,body"]);case 2:return n.a(2,a(i.parse.call(i,n.v)))}},n)}))).apply(this,arguments)}function yr(){return gr.apply(this,arguments)}function gr(){return(gr=$(L().m(function n(){var e,t,r,a,i,o,c,u;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,$e("Error: JSON input is required on stdin");case 1:for(e=n.v,t=Er(e),r={},a=0,i=Object.entries(t.replies);a<i.length;a++)o=_(i[a],2),c=o[0],"string"==typeof(u=o[1])&&u.length>0&&(r[c]=u);return n.a(2,r)}},n)}))).apply(this,arguments)}function br(n,e,t,r,a){return kr.apply(this,arguments)}function kr(){return(kr=$(L().m(function n(e,t,r,a,i){var o,c,u,s,l,f,p,d,h;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,He(e,{owner:t,name:r,number:Number(a),cursor:o});case 1:s=n.v,(l=null==(c=s.data)||null==(c=c.repository)||null==(c=c.pullRequest)?void 0:c.reviewThreads)||Ae("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),f=E(l.nodes),n.p=2,f.s();case 3:if((p=f.n()).done){n.n=5;break}return d=p.value,n.n=4,i(d);case 4:n.n=3;break;case 5:n.n=7;break;case 6:n.p=6,h=n.v,f.e(h);case 7:return n.p=7,f.f(),n.f(7);case 8:if(l.pageInfo.hasNextPage){n.n=9;break}return n.a(2);case 9:o=null!=(u=l.pageInfo.endCursor)?u:void 0;case 10:n.n=0;break;case 11:return n.a(2)}},n,null,[[2,6,7,8]])}))).apply(this,arguments)}function xr(n,e,t){return Sr.apply(this,arguments)}function Sr(){return(Sr=$(L().m(function n(e,t,r){var a;return L().w(function(n){for(;;)switch(n.n){case 0:return a=[],n.n=1,br("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,t,r,function(n){n.isResolved||a.push(n.id)});case 1:return n.a(2,a)}},n)}))).apply(this,arguments)}function jr(n,e,t){return Ir.apply(this,arguments)}function Ir(){return(Ir=$(L().m(function n(e,t,r){var a,i;return L().w(function(n){for(;;)switch(n.n){case 0:return a=[],i=new Map,n.n=1,br("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n isOutdated\n path\n line\n originalLine\n startLine\n originalStartLine\n comments(first: 100) {\n nodes {\n id\n url\n body\n createdAt\n line\n originalLine\n startLine\n originalStartLine\n commit { oid }\n originalCommit { oid }\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,t,r,$(L().m(function n(r){var o,c,u,s,l,f,p,d,h,m,v;return L().w(function(n){for(;;)switch(n.n){case 0:if(!r.isResolved){n.n=1;break}return n.a(2);case 1:return n.n=2,Promise.all(r.comments.nodes.map(function(n){var a,o;return Pr(n,null!=(a=r.path)?a:void 0,null!=(o=r.isOutdated)&&o,e,t,i)}));case 2:c=n.v,u=r.comments.pageInfo,s=null!=(o=u.endCursor)?o:void 0;case 3:if(!u.hasNextPage){n.n=6;break}return n.n=4,He("\n query($threadId: ID!, $cursor: String) {\n node(id: $threadId) {\n ... on PullRequestReviewThread {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n url\n body\n createdAt\n line\n originalLine\n startLine\n originalStartLine\n commit { oid }\n originalCommit { oid }\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",{threadId:r.id,cursor:s});case 4:return p=n.v,(d=null==(l=p.data)||null==(l=l.node)?void 0:l.comments)||Ae("Could not find comments in GraphQL response for thread ".concat(r.id,".")),h=c.push,m=c,v=U,n.n=5,Promise.all(d.nodes.map(function(n){var a,o;return Pr(n,null!=(a=r.path)?a:void 0,null!=(o=r.isOutdated)&&o,e,t,i)}));case 5:h.apply.call(h,m,v(n.v)),u=d.pageInfo,s=null!=(f=u.endCursor)?f:void 0,n.n=3;break;case 6:a.push({id:r.id,isResolved:r.isResolved,isOutdated:r.isOutdated,path:r.path,line:r.line,originalLine:r.originalLine,startLine:r.startLine,originalStartLine:r.originalStartLine,comments:c});case 7:return n.a(2)}},n)})));case 1:return n.a(2,a)}},n)}))).apply(this,arguments)}function Or(){return Rr.apply(this,arguments)}function Rr(){return(Rr=$(L().m(function n(){var e,t,r,a,i,o,c;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,_e();case 1:return e=n.v,t=_(e,2),r=t[0],a=t[1],n.n=2,Ge();case 2:return i=n.v,Re("Fetching unresolved review threads..."),o=Je,n.n=3,jr(r,a,i);case 3:return c=n.v,n.a(2,o({unresolved_threads:c}))}},n)}))).apply(this,arguments)}function Ar(n){return Cr.apply(this,arguments)}function Cr(){return(Cr=$(L().m(function n(e){var t,r,a,i,o,c,u,s,l,f,p,d,h,m,v,w,y,g,b,k;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,_e();case 1:return t=n.v,r=_(t,2),a=r[0],i=r[1],n.n=2,Ge();case 2:return o=n.v,g=Set,n.n=3,xr(a,i,o);case 3:b=n.v,c=new g(b),Re("Replying to ".concat(Object.keys(e).length," review threads...")),u=[],s=Object.entries(e),l=E(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(d=_(f.value,2),h=d[0],m=_(d[1],2),v=m[0],w=m[1],Re("Processing ".concat(h+1,"/").concat(s.length,": ").concat(v)),c.has(v)){n.n=6;break}return n.a(3,8);case 6:return n.n=7,He("\n mutation ($threadId: ID!, $body: String!) {\n addPullRequestReviewThreadReply(input: { pullRequestReviewThreadId: $threadId, body: $body }) {\n comment {\n id\n url\n }\n }\n resolveReviewThread(input: { threadId: $threadId }) {\n thread {\n id\n isResolved\n }\n }\n }\n ",{threadId:v,body:w});case 7:y=n.v,null!=(p=y.data)&&null!=(p=p.resolveReviewThread)&&null!=(p=p.thread)&&p.isResolved?u.push(v):Re("Warning: failed to resolve thread ".concat(v,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,k=n.v,l.e(k);case 11:return n.p=11,l.f(),n.f(11);case 12:return Re("Done."),n.a(2,Je({resolved_thread_ids:u}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function Pr(n,e,t,r,a,i){return $r.apply(this,arguments)}function $r(){return($r=$(L().m(function n(e,t,r,a,i,o){var c,u,s,l,f,p,d,h;return L().w(function(n){for(;;)switch(n.n){case 0:return u=e.author,s=e.id,l=e.url,f=e.body,p=e.createdAt,d="string"==typeof u?u:null!=(c=null==u?void 0:u.login)?c:void 0,n.n=1,Tr(e,t,r,a,i,o);case 1:return h=n.v,n.a(2,{id:s,url:l,body:f,createdAt:p,author:d,snippet:h})}},n)}))).apply(this,arguments)}function Er(n){try{var e=JSON.parse(n);return function(n){if("object"!==G(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==G(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||Ae("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&Ae("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function Tr(n,e,t,r,a,i){return qr.apply(this,arguments)}function qr(){return(qr=$(L().m(function n(e,t,r,a,i,o){var c,u,s,l;return L().w(function(n){for(;;)switch(n.n){case 0:if(t){n.n=1;break}return n.a(2,void 0);case 1:if(c=r?Lr(e,t):Nr(e,t),u=r?Nr(e,t):Lr(e,t),s=null!=c?c:u){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,Mr(a,i,s.expression,o);case 3:if(void 0!==(l=n.v)){n.n=4;break}return n.a(2,void 0);case 4:return n.a(2,Fr(l,s.startLine,s.endLine))}},n)}))).apply(this,arguments)}function Nr(n,e){var t;return Dr(null==(t=n.commit)?void 0:t.oid,e,n.startLine,n.line)}function Lr(n,e){var t;return Dr(null==(t=n.originalCommit)?void 0:t.oid,e,n.originalStartLine,n.originalLine)}function Dr(n,e,t,r){if(n&&r)return{expression:"".concat(n,":").concat(e),startLine:null!=t?t:r,endLine:r}}function Mr(n,e,t,r){return _r.apply(this,arguments)}function _r(){return(_r=$(L().m(function n(e,t,r,a){var i,o;return L().w(function(n){for(;;)switch(n.n){case 0:return i="".concat(e,"/").concat(t,":").concat(r),(o=a.get(i))||(o=Ur(e,t,r),a.set(i,o)),n.n=1,o;case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Ur(n,e,t){return Gr.apply(this,arguments)}function Gr(){return(Gr=$(L().m(function n(e,t,r){var a,i,o;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,He("\n query($owner: String!, $name: String!, $expression: String!) {\n repository(owner: $owner, name: $name) {\n object(expression: $expression) {\n ... on Blob {\n isBinary\n text\n }\n }\n }\n }\n",{owner:e,name:t,expression:r});case 1:if(i=n.v,(o=null==(a=i.data)||null==(a=a.repository)?void 0:a.object)&&!o.isBinary&&"string"==typeof o.text){n.n=2;break}return n.a(2,void 0);case 2:return n.a(2,o.text)}},n)}))).apply(this,arguments)}function Fr(n,e,t){var r=n.split("\n");if(r.length>0&&""===r.at(-1)&&r.pop(),0!==r.length){for(var a=Hr(e,r.length),i=Hr(t,r.length),o=Math.max(1,a-2),c=Math.min(r.length,i+2),u=String(c).length,s=[],l=o;l<=c;l+=1){var f,p=l>=a&&l<=i?">":" ";s.push("".concat(p," ").concat(String(l).padStart(u," ")," | ").concat(null!=(f=r[l-1])?f:""))}return s.join("\n")}}function Hr(n,e){return Math.min(Math.max(n,1),e)}var Wr="Other agents may be working concurrently; delete only temporary files you created, verify that those paths no longer exist, then run `git status --porcelain=v1 --untracked-files=all`.";function Jr(n){return Br.apply(this,arguments)}function Br(){return(Br=$(L().m(function n(e){var t;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Gt(e);case 1:return t=n.v,n.a(2,"\nPlan a GitHub issue by gathering context, writing a specification for software engineers, and posting or updating that specification back to the issue.\nThe target issue number is #".concat(e,". Here is the fetched issue context as YAML:\n~~~~yaml\n").concat(t.trim(),"\n~~~~\n\nFollow this workflow:\n1. Read the above issue body and timeline messages carefully.\n2. Collect enough supporting information before writing the specification:\n - Inspect the relevant code, surrounding call sites, related types, tests, configuration, recent diffs, and any other local context needed to understand the change.\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the issue depends on runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - If the issue depends on a library, API, or language feature, confirm it against the latest official documentation or another primary source instead of relying on memory.\n3. Write the specification for the issue comment.\n - Write the background based on the collected information.\n - Define a goal that clearly guides our implementation in the right direction.\n - Write a detailed specification incorporating the evidence you collected.\n - If needed, include code snippets that explain how to use libraries or APIs, along with references to their documentation.\n4. ").concat(Wr,"\n5. Post the specification back to issue #").concat(e,", then print the issue URL.\n - If the issue already has a specification, update the existing comment instead of posting a new one.\n\nFormat the issue comment exactly like this, but do not include the surrounding `~~~~` fences in the actual comment:\n~~~~\n## Background\n\n[Summarize the current behavior and explain the motivation behind this issue]\n\n## Goal\n\n[Define the goal we want to achieve in this issue]\n\n## Specification\n\n[Detailed specification for software engineers]\n\n## Key Technologies (ONLY if external resources are needed)\n\n[Describe what libraries or APIs we should use, including concrete versions and code snippets.]\n\n~~~~\n").trim())}},n)}))).apply(this,arguments)}function Yr(n){return"git merge-base ".concat(Kr("origin/".concat(n))," HEAD 2>/dev/null || git merge-base ").concat(Kr(n)," HEAD")}function Kr(n){return"'".concat(n.replaceAll("'","'\"'\"'"),"'")}function Qr(n){return zr.apply(this,arguments)}function zr(){return(zr=$(L().m(function n(e){var t,r,a;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,$t();case 1:return t=n.v,r=Yr(t),n.n=2,Jt();case 2:return a=n.v,n.a(2,"\nReview the current ".concat(a?"pull request":"branch"," against its base branch ").concat(t,' via `git diff "$(').concat(r,')"`.\nUse the known facts, if provided, to avoid repeating fact checks and findings. Reuse a known fact only when the same current-code evidence, command result, or primary-source evidence still applies. If the current code or source context may have changed enough to invalidate a known fact, refresh only that affected fact.\nFollow this workflow:\n1. Review each finding:\n 1. Gather supporting evidence:\n - Inspect the referenced code and the surrounding call sites, related types, tests, configuration, and recent diffs when they affect the claim.\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the finding is about runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - If the finding depends on framework, library, platform, or language behavior, confirm it against the latest official documentation or another primary source instead of relying on memory.\n 2. Judge whether the finding is valid:\n - Mark it valid only when the available evidence shows the reported issue is still real in the current codebase.\n - Otherwise, mark it not valid.\n 3. Propose a fix without modifying the code:\n - Describe the smallest practical change that would address the finding.\n - Investigate the likely impact of that change by inspecting the affected call sites, related types, tests, configuration, and adjacent behavior, and note any follow-up changes or risks the fix would need to account for.\n2. ').concat(Wr,"\n3. Report only new valid findings that are not already covered by the known facts. For each finding, include the evidence, proposed fix, and likely impact. Do not modify the code.\n - When reporting valid findings, include a `## Verified Facts` section after the findings. Include only concise, review-relevant facts: what was verified, why it matters to the review, and how it was verified.\n - If there are no new valid findings, respond exactly with: `").concat(an,"`\n\n").concat(Zr(e),"\n\n").concat(Vr(a),"\n").trim())}},n)}))).apply(this,arguments)}function Zr(n){var e=null==n?void 0:n.trim();return e?"Known facts:\n~~~~markdown\n".concat(e,"\n~~~~\n").trim():""}function Vr(n){return n?"Current pull request context:\n~~~~yaml\n".concat(n.trim(),"\n~~~~\n").trim():""}function Xr(n,e,t){var r=t.replaceAll("\n"," ").replaceAll('"',"'");return'\nUse `playwright-cli` skill to take a screenshot of "'.concat(r,'" by navigating from ').concat(n,' to "').concat(e,'" page.\n\nFollow this workflow:\n1. Open the initial page at ').concat(n,".\n2. Navigate from that initial page until you reach the page identified as ").concat(e,'.\n - If code errors, runtime failures, or broken UI flows prevent navigation, investigate the cause in the local codebase, make the smallest practical code fix, and verify that the page can now be reached before continuing.\n - If you cannot fix the errors, report on the errors then stop.\n3. Capture a screenshot that focuses on this target: "').concat(r,'".\n4. Keep the generated image artifact and report the screenshot file path plus a brief description of what was captured. If you had to fix code first, also summarize the fix.\n').trim()}function na(){return ea.apply(this,arguments)}function ea(){return(ea=$(L().m(function n(){var e,t,r;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,$t();case 1:return e=n.v,t=Yr(e),n.n=2,Jt();case 2:return r=n.v,n.a(2,"\nSimplify the current ".concat(r?"pull request":"branch",' against its base branch using `git diff "$(').concat(t,")\"`.\nFirst, inspect the diff and review the surrounding code for each changed area. This includes nearby functions, types, call sites, tests, configurations, and any other files that help determine if the change is truly necessary.\nLeverage this context to identify redundancies that can be safely removed or simplified. Look for duplicate logic, repeated conditionals, unnecessary abstractions, overlapping code paths, dead code, or edits made obsolete upon understanding the broader context.\n\nPrioritize simplifications that reduce the reviewer's burden, such as:\n- Removing redundant edits or dead code.\n- Eliminating or merging duplicated logic discovered by comparing the diff with related code.\n- Flattening unnecessarily complex logic introduced in the diff (e.g., using early returns to reduce nesting, simplifying boolean expressions, or removing redundant wrapper functions).\n\nCommit and push your changes. Afterward, summarize the redundancies or unnecessary complexity you have removed.\n\n").concat(r?"Current pull request context:\n~~~~yaml\n".concat(r.trim(),"\n~~~~"):"","\n").trim())}},n)}))).apply(this,arguments)}var ta="@willbooster/agent-skills",ra=/\.(?:[cm]?[jt]s|json|md|ya?ml)$/i;function aa(){return ia.apply(this,arguments)}function ia(){return(ia=$(L().m(function n(){var e,t;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,oa();case 1:return e=n.v,n.n=2,d(v(I(),"agent-skills-install-"));case 2:return t=n.v,n.p=3,n.n=4,p(v(e.path,"package.json"),v(t,"package.json"));case 4:return n.n=5,p(v(e.path,"skills"),v(t,"skills"),{recursive:!0});case 5:return n.n=6,sa(t,e.metadata);case 6:return n.n=7,Y(["bunx","skills@latest","add",t,"--global","--yes","--skill","*","--agent","claude-code","--agent","codex","--agent","gemini-cli"],{waitMessage:"Installing packaged skills globally."});case 7:return n.p=7,n.n=8,f(t,{recursive:!0,force:!0});case 8:return n.f(7);case 9:return n.a(2)}},n,null,[[3,,7,9]])}))).apply(this,arguments)}function oa(){return ca.apply(this,arguments)}function ca(){return(ca=$(L().m(function n(){var e,t,r,a,i,o;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:e=m(O(import.meta.url));case 1:return t=v(e,"package.json"),n.p=2,i=ua,o=t,n.n=3,u(t,"utf8");case 3:if((r=i(o,n.v)).name!==ta){n.n=4;break}return n.a(2,{metadata:r,path:e});case 4:n.n=6;break;case 5:n.p=5,n.v;case 6:a=m(e),j.notStrictEqual(e,a,"Failed to find ".concat(ta," package root")),e=a,n.n=1;break;case 7:return n.a(2)}},n,null,[[2,5]])}))).apply(this,arguments)}function ua(n,e){var t=JSON.parse(e);return j.ok(t.name&&t.version,"Failed to read name or version from ".concat(n)),t}function sa(n,e){return la.apply(this,arguments)}function la(){return(la=$(L().m(function n(e,t){var r,a;return L().w(function(n){for(;;)switch(n.n){case 0:return r="".concat(t.name,"@latest"),a="".concat(t.name,"@").concat(t.version),n.n=1,fa(e,function(n){return n.replaceAll(r,a)});case 1:return n.a(2)}},n)}))).apply(this,arguments)}function fa(n,e){return pa.apply(this,arguments)}function pa(){return(pa=$(L().m(function n(e,t){var r,a,i,o,c,s,f,p;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,l(e,{recursive:!0,withFileTypes:!0});case 1:r=n.v,a=E(r),n.p=2,a.s();case 3:if((i=a.n()).done){n.n=7;break}if((o=i.value).isFile()&&ra.test(o.name)){n.n=4;break}return n.a(3,6);case 4:return c=v(o.parentPath,o.name),n.n=5,u(c,"utf8");case 5:if(s=n.v,(f=t(s))===s){n.n=6;break}return n.n=6,h(c,f);case 6:n.n=3;break;case 7:n.n=9;break;case 8:n.p=8,p=n.v,a.e(p);case 9:return n.p=9,a.f(),n.f(9);case 10:return n.a(2)}},n,null,[[2,8,9,10]])}))).apply(this,arguments)}var da=new n;function ha(n,e){return ma.apply(this,arguments)}function ma(){return(ma=$(L().m(function n(e,t){var r,a;return L().w(function(n){for(;;)switch(n.n){case 0:return void 0===t&&(t={}),n.n=1,va();case 1:return r=n.v,a=Qr(r),n.a(2,"all"===e?wn(a,{allAgentsLabel:"review agents",interactive:t.interactive,mapOutput:function(n,e){return Dn(e)?void 0:e}}):gn(e,a,t))}},n)}))).apply(this,arguments)}function va(){return wa.apply(this,arguments)}function wa(){return(wa=$(L().m(function n(){var e;return L().w(function(n){for(;;)switch(n.n){case 0:if(!t.isTTY){n.n=1;break}return n.a(2,void 0);case 1:return n.n=2,Ce();case 2:return e=n.v,n.a(2,e.length>0?e:void 0)}},n)}))).apply(this,arguments)}function ya(n){var t=da.command(n.name).description(n.description).allowExcessArguments(!1);n.argumentName&&t.argument(n.argumentName,n.argumentDescription),t.addOption(new e("--agent <agent>",n.optionDescription).choices(n.choices).makeOptionMandatory()).option("--interactive","Run the selected agent through its interactive terminal UI").action($(L().m(function e(){var t,r,a,i,o,c,u,s,l,f=arguments;return L().w(function(e){for(;;)switch(e.n){case 0:for(t=f.length,r=new Array(t),a=0;a<t;a++)r[a]=f[a];return i=_(r,2),o=i[0],c=i[1],u="string"==typeof o?o:"",s="string"==typeof o?c:o,l=process.stdout,e.n=1,n.run(s.agent,u,s);case 1:l.write.call(l,e.v);case 2:return e.a(2)}},e)})))}function ga(n,e,t){var r=da.command(n).description(e).option("--interactive","Run the selected agent through its interactive terminal UI").allowExcessArguments(!1);"function"!=typeof t?r.argument(t.argumentName,t.argumentDescription).action($(L().m(function n(e,r){var a;return L().w(function(n){for(;;)switch(n.n){case 0:return a=process.stdout,n.n=1,t.run(e,r);case 1:a.write.call(a,n.v);case 2:return n.a(2)}},n)}))):r.action($(L().m(function n(e){var r;return L().w(function(n){for(;;)switch(n.n){case 0:return r=process.stdout,n.n=1,t(e);case 1:r.write.call(r,n.v);case 2:return n.a(2)}},n)})))}function ba(){return(ba=$(L().m(function n(e,t,r){var a;return L().w(function(n){for(;;)switch(n.n){case 0:return void 0===r&&(r={}),a=xa,n.n=1,gn(e,ka(t),r);case 1:return n.a(2,a(n.v,{fallbackToOutput:!0===r.interactive}))}},n)}))).apply(this,arguments)}function ka(n){return"".concat(n,"\n\nReport on the result with a markdown code block with triple backticks.")}function xa(n,e){var t;void 0===e&&(e={});var r=null==(t=U(n.matchAll(/```[^\n`]*\n?([\s\S]*?)```/g)).at(-1))?void 0:t[1];if(!r){if(e.fallbackToOutput)return n;throw new Error("Agent output did not contain a markdown code block with triple backticks.")}return r}da.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),da.command("install-skills").description("Install all packaged skills globally for Claude Code, Codex, and Gemini CLI").allowExcessArguments(!1).action($(L().m(function n(){return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,aa();case 1:process.stdout.write("Done\n");case 2:return n.a(2)}},n)}))),da.command("update-bun-deps").description("Update all Bun dependencies in the root package and workspace packages").allowExcessArguments(!1).action($(L().m(function n(){return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Yn();case 1:return n.a(2)}},n)}))),ya({name:"agent",description:"Run the selected agent with the specified prompt",optionDescription:"Use an agent",choices:["codex","claude","gemini"],argumentName:"<prompt>",argumentDescription:"Prompt to pass to the agent",run:function(n,e,t){return function(n,e,t){return ba.apply(this,arguments)}(n,e,t)}}),da.command("review").description("Run review against the current branch with the selected agent").addOption(new e("--agent <agent>","Use a review agent").choices(["all","codex","claude","gemini"]).makeOptionMandatory()).option("--interactive","Run the selected agent through its interactive terminal UI").allowExcessArguments(!1).action($(L().m(function n(e){var t;return L().w(function(n){for(;;)switch(n.n){case 0:return t=process.stdout,n.n=1,ha(e.agent,e);case 1:t.write.call(t,n.v);case 2:return n.a(2)}},n)}))),ga("review-codex","Run Codex review against the current branch",function(n){return ha("codex",n)}),ga("review-claude","Run Claude Code review against the current branch",function(n){return ha("claude",n)}),ga("review-gemini","Run Gemini CLI review against the current branch",function(n){return ha("gemini",n)}),ya({name:"plan",description:"Run planning against the specified issue with the selected agent",optionDescription:"Use a planning agent",choices:["all","codex","claude","gemini"],argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n,e,t){return"all"===n?wn(Jr(_t(e)),{allAgentsLabel:"planning agents",interactive:t.interactive}):gn(n,Jr(_t(e)),t)}}),ga("plan-codex","Run Codex planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n,e){return gn("codex",Jr(_t(n)),e)}}),ga("plan-claude","Run Claude Code planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n,e){return gn("claude",Jr(_t(n)),e)}}),ga("plan-gemini","Run Gemini CLI planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n,e){return gn("gemini",Jr(_t(n)),e)}}),da.command("screenshot").description("Take a screenshot with the selected agent via playwright-cli").argument("<initial-url>","Initial URL to open before navigating").argument("<page-name>","Page name to navigate to from the initial page").argument("<description>","Description of the part to capture in the screenshot").addOption(new e("--agent <agent>","Use a screenshot agent").choices(["codex","claude","gemini"]).makeOptionMandatory()).option("--interactive","Run the selected agent through its interactive terminal UI").allowExcessArguments(!1).action($(L().m(function n(e,t,r,a){var i;return L().w(function(n){for(;;)switch(n.n){case 0:return i=process.stdout,n.n=1,gn(a.agent,Xr(e,t,r),a);case 1:i.write.call(i,n.v);case 2:return n.a(2)}},n)}))),ya({name:"simplify",description:"Run PR simplification against the current branch with the selected agent",optionDescription:"Use a simplify agent",choices:["codex","claude","gemini"],run:function(n,e,t){return gn(n,na(),t)}}),ga("simplify-codex","Run Codex PR simplification against the current branch",function(n){return gn("codex",na(),n)}),ga("simplify-claude","Run Claude Code PR simplification against the current branch",function(n){return gn("claude",na(),n)}),ga("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(n){return gn("gemini",na(),n)}),da.command("open-pr").description("Create a pull request for the current branch").argument("<title>","Pull request title").allowExcessArguments(!1).action($(L().m(function n(e){var t,r;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ce();case 1:return t=n.v,n.n=2,pr({body:t||void 0,title:e});case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),da.command("update-pr").description("Update the current pull request title and body").argument("<title>","Pull request title").allowExcessArguments(!1).action($(L().m(function n(e){var t,r;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,$e("Error: PR body input is required on stdin");case 1:return t=n.v,n.n=2,hr({body:t,title:e});case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),da.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action($(L().m(function n(){var e;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,mt();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),da.command("fetch-issue").description("Fetch an issue body and timeline messages as YAML").argument("<issue>","GitHub issue number or URL").allowExcessArguments(!1).action($(L().m(function n(e){var t;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Gt(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),da.command("fetch-pr").description("Fetch a pull request body and timeline messages as YAML, excluding inline comments").argument("[pr]","GitHub pull request number or URL; defaults to the current branch pull request").allowExcessArguments(!1).action($(L().m(function n(e){var t;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ht(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),da.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action($(L().m(function n(){var e;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Or();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),da.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action($(L().m(function n(){var e,t;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,yr();case 1:return e=n.v,n.n=2,Ar(e);case 2:t=n.v,process.stdout.write(t);case 3:return n.a(2)}},n)}))),await da.parseAsync(process.argv);
|
|
5
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy9kZXBzL3VwZGF0ZUJ1bkRlcGVuZGVuY2llcy50cyIsIi4uL3NyYy95YW1sLnRzIiwiLi4vc3JjL3ByL3NoYXJlZC50cyIsIi4uL3NyYy9wci9jaS50cyIsIi4uL3NyYy9yZXBvL2RlZmF1bHRCcmFuY2gudHMiLCIuLi9zcmMvcHIvbWVzc2FnZXMudHMiLCIuLi9zcmMvcHIvcHVsbFJlcXVlc3QudHMiLCIuLi9zcmMvcHIvcmV2aWV3VGhyZWFkcy50cyIsIi4uL3NyYy9wcm9tcHRzL2NsZWFudXBJbnN0cnVjdGlvbi50cyIsIi4uL3NyYy9wcm9tcHRzL3BsYW5Qcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9iYXNlQnJhbmNoRGlmZkNvbW1hbmQudHMiLCIuLi9zcmMvcHJvbXB0cy9yZXZpZXdQcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9zY3JlZW5zaG90UHJvbXB0LnRzIiwiLi4vc3JjL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQudHMiLCIuLi9zcmMvc2tpbGxzL2luc3RhbGxTa2lsbHMudHMiLCIuLi9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmludGVyZmFjZSBSdW5Db21tYW5kT3B0aW9ucyB7XG4gIGxvZ0ZpbGVQYXRoPzogc3RyaW5nO1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIHdhaXRNZXNzYWdlPzogc3RyaW5nIHwgZmFsc2U7XG4gIHdhaXRJbnRlcnZhbFNlY29uZHM/OiBudW1iZXI7XG59XG5cbnR5cGUgUHJvZ3Jlc3NXcml0ZXIgPSAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkO1xuZXhwb3J0IGludGVyZmFjZSBLaWxsYWJsZVByb2Nlc3Mge1xuICBraWxsOiAoc2lnbmFsPzogTm9kZUpTLlNpZ25hbHMpID0+IGJvb2xlYW47XG4gIHBpZD86IG51bWJlcjtcbn1cblxuLy8gVGhlIG9uZS1ob3VyIGJ1ZGdldCBrZWVwcyBhZ2VudHMgd2FpdGluZyBmb3IgbG9uZy1ydW5uaW5nIGNvbW1hbmRzIHdpdGhvdXQgcmVxdWlyaW5nIHRoZSBwcm9jZXNzIHRvIHVzZSB0aGUgZnVsbCBob3VyLlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTID0gMzY7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QUk9DRVNTX1RJTUVPVVRfTVMgPSA2MCAqIDYwICogMTAwMDtcbmNvbnN0IERPVFNfUEVSX1BST0dSRVNTX1BFUkNFTlRfU1RFUCA9IDU7XG5jb25zdCBGT1JDRV9LSUxMX1RJTUVPVVRfTVMgPSA1MDAwO1xuY29uc3QgTUFYX1BST0dSRVNTX1BFUkNFTlQgPSAxMDA7XG5jb25zdCBQUk9DRVNTX0NMRUFOVVBfU0lHTkFMUyA9IFsnU0lHSU5UJywgJ1NJR1RFUk0nLCAnU0lHSFVQJ10gYXMgY29uc3Q7XG5jb25zdCBhY3RpdmVQcm9jZXNzZXMgPSBuZXcgU2V0PEtpbGxhYmxlUHJvY2Vzcz4oKTtcbmxldCBjbGVhbnVwSGFuZGxlcnNJbnN0YWxsZWQgPSBmYWxzZTtcbi8vIEtlZXAgdGhlIENMSSB0ZXh0IGNvbmNpc2Ugc28gZG93bnN0cmVhbSBwcm9tcHRzIGNhbiBtYXRjaCBpdCBjb25zaXN0ZW50bHkuXG5leHBvcnQgY29uc3QgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HID0gJ1RoaXMgY2FuIHRha2UgdXAgdG8gMSBob3VyOyBkb3RzIGluZGljYXRlIHByb2dyZXNzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIGRldGFjaGVkOiB0cnVlLFxuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgfSk7XG4gIGNvbnN0IHByb2Nlc3NUaW1lb3V0ID0gY3JlYXRlUHJvY2Vzc1RpbWVvdXQocHJvYywgb3B0aW9ucy50aW1lb3V0TXMpO1xuICBjb25zdCBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKG9wdGlvbnMud2FpdE1lc3NhZ2UsIG9wdGlvbnMud2FpdEludGVydmFsU2Vjb25kcyk7XG4gIGNvbnN0IGNvbW1hbmRMb2dnZXIgPSBhd2FpdCBjcmVhdGVDb21tYW5kTG9nZ2VyKG9wdGlvbnMubG9nRmlsZVBhdGgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQsIChjaHVuaykgPT4gY29tbWFuZExvZ2dlci53cml0ZShjaHVuaykpLFxuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyLCAoY2h1bmspID0+IGNvbW1hbmRMb2dnZXIud3JpdGUoY2h1bmspKSxcbiAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgfSksXG4gICAgXSk7XG5cbiAgICBpZiAocHJvY2Vzc1RpbWVvdXQudGltZWRPdXQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRpbWVvdXRFcnJvck1lc3NhZ2UoYCR7c3Rkb3V0fSR7c3RkZXJyfWAsIHByb2Nlc3NUaW1lb3V0LnRpbWVvdXRNcywgY29tbWFuZCkpO1xuICAgIH1cblxuICAgIGlmIChleGl0Q29kZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHN0ZG91dDtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcbiAgICB0aHJvdyBuZXcgRXJyb3Iob3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBjb21tYW5kTG9nZ2VyLmNsb3NlKCk7XG4gICAgcHJvY2Vzc1RpbWVvdXQuY2xlYXIoKTtcbiAgICBzdG9wV2FpdFByb2dyZXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVvdXRFcnJvck1lc3NhZ2Uob3V0cHV0OiBzdHJpbmcsIHRpbWVvdXRNczogbnVtYmVyLCBjb21tYW5kOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBgQ29tbWFuZCB0aW1lZCBvdXQgYWZ0ZXIgJHtmb3JtYXREdXJhdGlvbih0aW1lb3V0TXMpfTogJHtjb21tYW5kLmpvaW4oJyAnKX1gO1xuICByZXR1cm4gb3V0cHV0Lmxlbmd0aCA+IDAgPyBgJHtvdXRwdXR9XFxuJHttZXNzYWdlfWAgOiBtZXNzYWdlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RHVyYXRpb24obWlsbGlzZWNvbmRzOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAobWlsbGlzZWNvbmRzICUgKDYwICogNjAgKiAxMDAwKSA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAoNjAgKiA2MCAqIDEwMDApfWhgO1xuICB9XG4gIGlmIChtaWxsaXNlY29uZHMgJSAoNjAgKiAxMDAwKSA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAoNjAgKiAxMDAwKX1tYDtcbiAgfVxuICBpZiAobWlsbGlzZWNvbmRzICUgMTAwMCA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAxMDAwfXNgO1xuICB9XG4gIHJldHVybiBgJHttaWxsaXNlY29uZHN9bXNgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvY2Vzc1RpbWVvdXQoXG4gIHByb2M6IEtpbGxhYmxlUHJvY2VzcyxcbiAgdGltZW91dE1zID0gREVGQVVMVF9QUk9DRVNTX1RJTUVPVVRfTVNcbik6IHsgY2xlYXI6ICgpID0+IHZvaWQ7IHRpbWVkT3V0OiAoKSA9PiBib29sZWFuOyB0aW1lb3V0TXM6IG51bWJlciB9IHtcbiAgbGV0IHRpbWVkT3V0ID0gZmFsc2U7XG4gIGxldCBmb3JjZUtpbGxUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG4gIGFjdGl2ZVByb2Nlc3Nlcy5hZGQocHJvYyk7XG4gIGluc3RhbGxDbGVhbnVwSGFuZGxlcnMoKTtcbiAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHRpbWVkT3V0ID0gdHJ1ZTtcbiAgICBraWxsUHJvY2Vzcyhwcm9jLCAnU0lHVEVSTScpO1xuICAgIGZvcmNlS2lsbFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBraWxsUHJvY2Vzcyhwcm9jLCAnU0lHS0lMTCcpLCBGT1JDRV9LSUxMX1RJTUVPVVRfTVMpO1xuICAgIGZvcmNlS2lsbFRpbWVyLnVucmVmKCk7XG4gIH0sIHRpbWVvdXRNcyk7XG4gIHRpbWVvdXQudW5yZWYoKTtcblxuICByZXR1cm4ge1xuICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBpZiAoZm9yY2VLaWxsVGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGZvcmNlS2lsbFRpbWVyKTtcbiAgICAgIH1cbiAgICAgIGFjdGl2ZVByb2Nlc3Nlcy5kZWxldGUocHJvYyk7XG4gICAgfSxcbiAgICB0aW1lZE91dDogKCkgPT4gdGltZWRPdXQsXG4gICAgdGltZW91dE1zLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsQ2xlYW51cEhhbmRsZXJzKCk6IHZvaWQge1xuICBpZiAoY2xlYW51cEhhbmRsZXJzSW5zdGFsbGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNsZWFudXBIYW5kbGVyc0luc3RhbGxlZCA9IHRydWU7XG5cbiAgZm9yIChjb25zdCBzaWduYWwgb2YgUFJPQ0VTU19DTEVBTlVQX1NJR05BTFMpIHtcbiAgICBwcm9jZXNzLm9uY2Uoc2lnbmFsLCAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHByb2Mgb2YgYWN0aXZlUHJvY2Vzc2VzKSB7XG4gICAgICAgIGtpbGxQcm9jZXNzKHByb2MsIHNpZ25hbCk7XG4gICAgICB9XG4gICAgICBwcm9jZXNzLmV4aXQoMTI4ICsgc2lnbmFsTnVtYmVyKHNpZ25hbCkpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNpZ25hbE51bWJlcihzaWduYWw6ICh0eXBlb2YgUFJPQ0VTU19DTEVBTlVQX1NJR05BTFMpW251bWJlcl0pOiBudW1iZXIge1xuICBzd2l0Y2ggKHNpZ25hbCkge1xuICAgIGNhc2UgJ1NJR0lOVCc6IHtcbiAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBjYXNlICdTSUdURVJNJzoge1xuICAgICAgcmV0dXJuIDE1O1xuICAgIH1cbiAgICBjYXNlICdTSUdIVVAnOiB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24ga2lsbFByb2Nlc3MocHJvYzogS2lsbGFibGVQcm9jZXNzLCBzaWduYWw6IE5vZGVKUy5TaWduYWxzKTogdm9pZCB7XG4gIGlmIChwcm9jLnBpZCAmJiBwcm9jLnBpZCA+IDApIHtcbiAgICB0cnkge1xuICAgICAgcHJvY2Vzcy5raWxsKC1wcm9jLnBpZCwgc2lnbmFsKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEZhbGwgYmFjayB0byBraWxsaW5nIHRoZSBkaXJlY3QgY2hpbGQgd2hlbiBwcm9jZXNzLWdyb3VwIHRlcm1pbmF0aW9uIGlzIHVuYXZhaWxhYmxlLlxuICAgIH1cbiAgfVxuICBwcm9jLmtpbGwoc2lnbmFsKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvVGV4dChcbiAgc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBvbkNodW5rPzogKGNodW5rOiBzdHJpbmcpID0+IHZvaWRcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgY29uc3QgY2h1bmtUZXh0ID0gdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyA/IGNodW5rIDogZGVjb2Rlci5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoY2h1bmspLCB7IHN0cmVhbTogdHJ1ZSB9KTtcbiAgICBjaHVua3MucHVzaChjaHVua1RleHQpO1xuICAgIG9uQ2h1bms/LihjaHVua1RleHQpO1xuICB9XG4gIGNvbnN0IGZpbmFsQ2h1bmsgPSBkZWNvZGVyLmRlY29kZSgpO1xuICBpZiAoZmluYWxDaHVuaykge1xuICAgIGNodW5rcy5wdXNoKGZpbmFsQ2h1bmspO1xuICAgIG9uQ2h1bms/LihmaW5hbENodW5rKTtcbiAgfVxuICByZXR1cm4gY2h1bmtzLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2FpdFByb2dyZXNzKFxuICB3YWl0TWVzc2FnZTogc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQsXG4gIHdhaXRJbnRlcnZhbFNlY29uZHMgPSBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyxcbiAgd3JpdGVQcm9ncmVzczogUHJvZ3Jlc3NXcml0ZXIgPSAobWVzc2FnZSkgPT4gcHJvY2Vzcy5zdGRlcnIud3JpdGUobWVzc2FnZSlcbik6ICgpID0+IHZvaWQge1xuICBpZiAoIXdhaXRNZXNzYWdlKSB7XG4gICAgcmV0dXJuICgpID0+IHt9O1xuICB9XG5cbiAgbGV0IGRvdENvdW50ID0gMDtcbiAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgd3JpdGVQcm9ncmVzcygnLicpO1xuICAgIGRvdENvdW50ICs9IDE7XG4gICAgaWYgKGRvdENvdW50IDw9IE1BWF9QUk9HUkVTU19QRVJDRU5UICYmIGRvdENvdW50ICUgRE9UU19QRVJfUFJPR1JFU1NfUEVSQ0VOVF9TVEVQID09PSAwKSB7XG4gICAgICAvLyBUaGlzIHRyYWNrcyBlbGFwc2VkIHdhaXQgYnVkZ2V0LCBub3QgdGhlIGNoaWxkIHByb2Nlc3MgY29tcGxldGlvbiBwZXJjZW50YWdlLlxuICAgICAgd3JpdGVQcm9ncmVzcyhgICR7ZG90Q291bnR9JSBkb25lIGApO1xuICAgIH1cbiAgfSwgd2FpdEludGVydmFsU2Vjb25kcyAqIDEwMDApO1xuXG4gIHdyaXRlUHJvZ3Jlc3MoYCR7d2FpdE1lc3NhZ2V9ICR7V0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HfTogYCk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICB3cml0ZVByb2dyZXNzKCdcXG4nKTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kTG9nZ2VyIHtcbiAgd3JpdGU6IChjaHVuazogc3RyaW5nKSA9PiB2b2lkO1xuICBjbG9zZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbW1hbmRMb2dnZXIobG9nRmlsZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8Q29tbWFuZExvZ2dlcj4ge1xuICBpZiAoIWxvZ0ZpbGVQYXRoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoKSA9PiB7fSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PiB7fSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgd2FybiA9IChlcnJvcjogdW5rbm93bik6IHZvaWQgPT4ge1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBXYXJuaW5nOiBGYWlsZWQgdG8gd3JpdGUgY29tbWFuZCBsb2cgdG8gJHtsb2dGaWxlUGF0aH06ICR7U3RyaW5nKGVycm9yKX1cXG5gKTtcbiAgfTtcblxuICB0cnkge1xuICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUobG9nRmlsZVBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBjb25zdCBzdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbShsb2dGaWxlUGF0aCwgeyBmbGFnczogJ3cnIH0pO1xuXG4gICAgc3RyZWFtLm9uKCdlcnJvcicsIHdhcm4pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoY2h1bmspID0+IHtcbiAgICAgICAgaWYgKHN0cmVhbS53cml0YWJsZSkge1xuICAgICAgICAgIHN0cmVhbS53cml0ZShjaHVuayk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjbG9zZTogYXN5bmMgKCkgPT5cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBzdHJlYW0uZW5kKCgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIH0pLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgd2FybihlcnJvcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoKSA9PiB7fSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PiB7fSxcbiAgICB9O1xuICB9XG59XG4iLCJleHBvcnQgY29uc3QgTk9fQ09OQ0VSTl9QSFJBU0UgPSAndGhlcmUgaXMgbm8gY29uY2Vybic7XG5leHBvcnQgY29uc3QgTk9fQ09OQ0VSTl9NRVNTQUdFID0gJ1RoZXJlIGlzIG5vIGNvbmNlcm4uJztcbiIsImltcG9ydCB7XG4gIERFRkFVTFRfUFJPQ0VTU19USU1FT1VUX01TLFxuICBjcmVhdGVDb21tYW5kTG9nZ2VyLFxuICBjcmVhdGVQcm9jZXNzVGltZW91dCxcbiAgY3JlYXRlV2FpdFByb2dyZXNzLFxuICBmb3JtYXREdXJhdGlvbixcbiAgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyxcbn0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSwgTk9fQ09OQ0VSTl9QSFJBU0UgfSBmcm9tICcuLi9yZXZpZXcvbm9Db25jZXJuLmpzJztcblxuZXhwb3J0IGNvbnN0IEFHRU5UX05BTUVTID0gWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10gYXMgY29uc3Q7XG5jb25zdCBDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYID0gbmV3IFJlZ0V4cChgXFxcXGIke05PX0NPTkNFUk5fUEhSQVNFfVxcXFxiYCwgJ2knKTtcbmV4cG9ydCB0eXBlIEFnZW50TmFtZSA9ICh0eXBlb2YgQUdFTlRfTkFNRVMpW251bWJlcl07XG5cbmludGVyZmFjZSBBZ2VudENvbW1hbmRPcHRpb25zIHtcbiAgaW50ZXJhY3RpdmU/OiBib29sZWFuO1xuICB3YWl0TWVzc2FnZT86IHN0cmluZyB8IGZhbHNlO1xufVxuXG5pbnRlcmZhY2UgQWxsQWdlbnRDb21tYW5kT3B0aW9ucyB7XG4gIGFsbEFnZW50c0xhYmVsOiBzdHJpbmc7XG4gIGludGVyYWN0aXZlPzogYm9vbGVhbjtcbiAgbWFwT3V0cHV0PzogKGFnZW50OiBBZ2VudE5hbWUsIG91dHB1dDogc3RyaW5nKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IERFRkFVTFRfQUxMX0FHRU5UX0NPTU1BTkRfT1BUSU9OUzogQWxsQWdlbnRDb21tYW5kT3B0aW9ucyA9IHsgYWxsQWdlbnRzTGFiZWw6ICdhZ2VudHMnIH07XG5jb25zdCBJTlRFUkFDVElWRV9BR0VOVF9SRUFEWV9USU1FT1VUX01TID0gMzBfMDAwO1xuY29uc3QgSU5URVJBQ1RJVkVfQUdFTlRfSU5QVVRfU0VUVExFX01TID0gMTAwMDtcbmNvbnN0IFRFUk1JTkFMX0JFTEwgPSBTdHJpbmcuZnJvbUNvZGVQb2ludCg3KTtcbmNvbnN0IFRFUk1JTkFMX0VTQ0FQRSA9IFN0cmluZy5mcm9tQ29kZVBvaW50KDI3KTtcbmNvbnN0IFRFUk1JTkFMX0NTSV9DVVJTT1JfRk9SV0FSRF9SRUdFWCA9IG5ldyBSZWdFeHAoYCR7VEVSTUlOQUxfRVNDQVBFfVxcXFxbKFxcXFxkKilDYCwgJ2cnKTtcbmNvbnN0IFRFUk1JTkFMX0NTSV9SRUdFWCA9IG5ldyBSZWdFeHAoYCR7VEVSTUlOQUxfRVNDQVBFfVxcXFxbW1xcXFxkOz9dKlsgLS9dKltALX5dYCwgJ2cnKTtcbmNvbnN0IFRFUk1JTkFMX09TQ19SRUdFWCA9IG5ldyBSZWdFeHAoXG4gIGAke1RFUk1JTkFMX0VTQ0FQRX1cXFxcXVteJHtURVJNSU5BTF9CRUxMfV0qKD86JHtURVJNSU5BTF9CRUxMfXwke1RFUk1JTkFMX0VTQ0FQRX1cXFxcXFxcXClgLFxuICAnZydcbik7XG5jb25zdCBHRU1JTklfTU9ERUwgPSAnZ2VtaW5pLTMuMS1wcm8tcHJldmlldyc7XG5jb25zdCBJTlRFUkFDVElWRV9SRUFEWV9QQVRURVJOUyA9IFtcbiAgL1R5cGVcXHMqeW91clxccyptZXNzYWdlL2ksXG4gIC9AcGF0aFxcL3RvXFwvZmlsZS9pLFxuICAvYnlwYXNzXFxzKnBlcm1pc3Npb25zL2ksXG4gIC9ZT0xPXFxzK21vZGUvaSxcbiAgL3Blcm1pc3Npb25zOi9pLFxuXTtcbmNvbnN0IElOVEVSQUNUSVZFX1NFVFVQX1NDUkVFTlMgPSBbXG4gIHtcbiAgICBpbnB1dDogJ1xccicsXG4gICAga2V5OiAnd29ya3NwYWNlLXRydXN0JyxcbiAgICBwYXR0ZXJuOiAvKD86dHJ1c3R8dHJ1c3RlZHx1bnRydXN0ZWR8c2FmZXR5XFxzKmNoZWNrKVtcXHNcXFNdKig/Olllc3xjb250aW51ZXxjb25maXJtfFByZXNzXFxzKmVudGVyKS9pLFxuICB9LFxuICB7XG4gICAgaW5wdXQ6ICdcXHInLFxuICAgIGtleTogJ21vZGVsLXNlbGVjdGlvbicsXG4gICAgcGF0dGVybjogLyg/Om1vZGVsfHByb2NlZWR8dXBncmFkZSlbXFxzXFxTXSooPzpjb250aW51ZXxjb25maXJtfFRyeVxccypuZXd8VXNlXFxzKmV4aXN0aW5nfFByZXNzXFxzKmVudGVyKS9pLFxuICB9LFxuXTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkFsbEFnZW50Q29tbWFuZHMoXG4gIHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+LFxuICBvcHRpb25zOiBBbGxBZ2VudENvbW1hbmRPcHRpb25zID0gREVGQVVMVF9BTExfQUdFTlRfQ09NTUFORF9PUFRJT05TXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNvbHZlZFByb21wdCA9IGF3YWl0IHByb21wdDtcbiAgY29uc3Qgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyh3YWl0TWVzc2FnZUZvcihvcHRpb25zLmFsbEFnZW50c0xhYmVsKSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBhZ2VudE91dHB1dHNXaXRoU2tpcHBlZFJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIEFHRU5UX05BTUVTLm1hcChhc3luYyAoYWdlbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBydW5BZ2VudENvbW1hbmQoYWdlbnQsIHJlc29sdmVkUHJvbXB0LCB7XG4gICAgICAgICAgICBpbnRlcmFjdGl2ZTogb3B0aW9ucy5pbnRlcmFjdGl2ZSxcbiAgICAgICAgICAgIHdhaXRNZXNzYWdlOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCB0cmltbWVkT3V0cHV0ID0gb3V0cHV0LnRyaW0oKTtcbiAgICAgICAgICBjb25zdCBtYXBwZWRPdXRwdXQgPSBvcHRpb25zLm1hcE91dHB1dD8uKGFnZW50LCB0cmltbWVkT3V0cHV0KTtcbiAgICAgICAgICBpZiAob3B0aW9ucy5tYXBPdXRwdXQgJiYgbWFwcGVkT3V0cHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdEFnZW50U2VjdGlvbihhZ2VudCwgbWFwcGVkT3V0cHV0ID8/IHN1bW1hcml6ZUFnZW50T3V0cHV0KGFnZW50LCB0cmltbWVkT3V0cHV0KSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBmb3JtYXRBZ2VudFNlY3Rpb24oYWdlbnQsIGFnZW50RmFpbHVyZU1lc3NhZ2UoYWdlbnQpKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIGNvbnN0IGFnZW50T3V0cHV0cyA9IGFnZW50T3V0cHV0c1dpdGhTa2lwcGVkUmVzdWx0cy5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0ICE9PSB1bmRlZmluZWQpO1xuICAgIHJldHVybiBhZ2VudE91dHB1dHMuam9pbignXFxuXFxuJyk7XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5BZ2VudENvbW1hbmQoXG4gIGFnZW50OiBBZ2VudE5hbWUsXG4gIHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+LFxuICBvcHRpb25zOiBBZ2VudENvbW1hbmRPcHRpb25zID0ge31cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChvcHRpb25zLmludGVyYWN0aXZlKSB7XG4gICAgcmV0dXJuIHJ1bkludGVyYWN0aXZlQWdlbnRDb21tYW5kKGFnZW50LCBhd2FpdCBwcm9tcHQsIHtcbiAgICAgIHdhaXRNZXNzYWdlOiBvcHRpb25zLndhaXRNZXNzYWdlID8/IHdhaXRNZXNzYWdlRm9yKGRpc3BsYXlBZ2VudE5hbWUoYWdlbnQpKSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBydW5Db21tYW5kV2l0aFByb2dyZXNzKGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudCwgYXdhaXQgcHJvbXB0KSwge1xuICAgIGxvZ0ZpbGVQYXRoOiBhZ2VudExvZ0ZpbGVQYXRoKGFnZW50KSxcbiAgICB3YWl0TWVzc2FnZTogb3B0aW9ucy53YWl0TWVzc2FnZSA/PyB3YWl0TWVzc2FnZUZvcihkaXNwbGF5QWdlbnROYW1lKGFnZW50KSksXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5JbnRlcmFjdGl2ZUFnZW50Q29tbWFuZChcbiAgYWdlbnQ6IEFnZW50TmFtZSxcbiAgcHJvbXB0OiBzdHJpbmcsXG4gIG9wdGlvbnM6IEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVzdWx0UmVjZWl2ZXIgPSBjcmVhdGVBZ2VudFJlc3VsdFJlY2VpdmVyKCk7XG4gIGNvbnN0IGNvbW1hbmRMb2dnZXIgPSBhd2FpdCBjcmVhdGVDb21tYW5kTG9nZ2VyKGFnZW50TG9nRmlsZVBhdGgoYWdlbnQpKTtcbiAgY29uc3Qgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyhvcHRpb25zLndhaXRNZXNzYWdlKTtcbiAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICBsZXQgcHJvY2Vzc1RpbWVvdXQ6IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZVByb2Nlc3NUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgbGV0IHByb2M6IFJldHVyblR5cGU8dHlwZW9mIEJ1bi5zcGF3bj4gfCB1bmRlZmluZWQ7XG4gIGxldCB0ZXJtaW5hbDogQnVuLlRlcm1pbmFsIHwgdW5kZWZpbmVkO1xuICBjb25zdCB0ZXJtaW5hbFJlYWR5ID0gY3JlYXRlVGVybWluYWxSZWFkeVNpZ25hbChhZ2VudCk7XG5cbiAgdHJ5IHtcbiAgICBwcm9jID0gQnVuLnNwYXduKGNyZWF0ZUludGVyYWN0aXZlQWdlbnRDb21tYW5kKGFnZW50LCByZXN1bHRSZWNlaXZlci5jYWxsYmFja1VybCksIHtcbiAgICAgIGVudjogeyAuLi5wcm9jZXNzLmVudiwgVEVSTTogcHJvY2Vzcy5lbnYuVEVSTSA/PyAneHRlcm0tMjU2Y29sb3InIH0sXG4gICAgICB0ZXJtaW5hbDoge1xuICAgICAgICBjb2xzOiAxMjAsXG4gICAgICAgIHJvd3M6IDQwLFxuICAgICAgICBkYXRhKGN1cnJlbnRUZXJtaW5hbCwgZGF0YSkge1xuICAgICAgICAgIGNvbnN0IG91dHB1dCA9IGRlY29kZXIuZGVjb2RlKGRhdGEsIHsgc3RyZWFtOiB0cnVlIH0pO1xuICAgICAgICAgIGNvbW1hbmRMb2dnZXIud3JpdGUob3V0cHV0KTtcbiAgICAgICAgICB0ZXJtaW5hbFJlYWR5Lm9ic2VydmUob3V0cHV0LCBjdXJyZW50VGVybWluYWwpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0ZXJtaW5hbCA9IHByb2MudGVybWluYWw7XG4gICAgaWYgKCF0ZXJtaW5hbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc3RhcnQgJHtkaXNwbGF5QWdlbnROYW1lKGFnZW50KX0gaW4gYSBCdW4gdGVybWluYWwuYCk7XG4gICAgfVxuICAgIHByb2Nlc3NUaW1lb3V0ID0gY3JlYXRlUHJvY2Vzc1RpbWVvdXQoe1xuICAgICAga2lsbDogKHNpZ25hbCkgPT4ge1xuICAgICAgICBwcm9jPy5raWxsKHNpZ25hbCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSxcbiAgICAgIHBpZDogcHJvYy5waWQsXG4gICAgfSk7XG5cbiAgICBjb25zdCBleGl0UHJvbWlzZSA9IHByb2MuZXhpdGVkLnRoZW4oKGV4aXRDb2RlKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZGlzcGxheUFnZW50TmFtZShhZ2VudCl9IGV4aXRlZCBiZWZvcmUgcG9zdGluZyBhIHJlc3VsdCB3aXRoIGV4aXQgY29kZSAke2V4aXRDb2RlfS5gKTtcbiAgICB9KTtcbiAgICBhd2FpdCBQcm9taXNlLnJhY2UoW3Rlcm1pbmFsUmVhZHkud2FpdCgpLCBleGl0UHJvbWlzZV0pO1xuICAgIGF3YWl0IHNsZWVwKElOVEVSQUNUSVZFX0FHRU5UX0lOUFVUX1NFVFRMRV9NUyk7XG4gICAgYXdhaXQgc3VibWl0SW50ZXJhY3RpdmVQcm9tcHQodGVybWluYWwsIGJ1aWxkSW50ZXJhY3RpdmVBZ2VudFByb21wdChhZ2VudCwgcHJvbXB0LCByZXN1bHRSZWNlaXZlci5jYWxsYmFja1VybCkpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbcmVzdWx0UmVjZWl2ZXIucmVzdWx0LCBleGl0UHJvbWlzZV0pO1xuICAgIGV4aXRQcm9taXNlLmNhdGNoKCgpID0+IHt9KTtcblxuICAgIGlmIChwcm9jZXNzVGltZW91dC50aW1lZE91dCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnRlcmFjdGl2ZSAke2Rpc3BsYXlBZ2VudE5hbWUoYWdlbnQpfSBjb21tYW5kIHRpbWVkIG91dCBhZnRlciAke2Zvcm1hdER1cmF0aW9uKERFRkFVTFRfUFJPQ0VTU19USU1FT1VUX01TKX0uYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChwcm9jZXNzVGltZW91dD8udGltZWRPdXQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW50ZXJhY3RpdmUgJHtkaXNwbGF5QWdlbnROYW1lKGFnZW50KX0gY29tbWFuZCB0aW1lZCBvdXQgYWZ0ZXIgJHtmb3JtYXREdXJhdGlvbihERUZBVUxUX1BST0NFU1NfVElNRU9VVF9NUyl9LmBcbiAgICAgICk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9IGZpbmFsbHkge1xuICAgIHRlcm1pbmFsPy5jbG9zZSgpO1xuICAgIHByb2M/LmtpbGwoJ1NJR1RFUk0nKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW3Byb2M/LmV4aXRlZCwgcmVzdWx0UmVjZWl2ZXIuY2xvc2UoKSwgY29tbWFuZExvZ2dlci5jbG9zZSgpXSk7XG4gICAgcHJvY2Vzc1RpbWVvdXQ/LmNsZWFyKCk7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN1Ym1pdEludGVyYWN0aXZlUHJvbXB0KHRlcm1pbmFsOiBCdW4uVGVybWluYWwsIHByb21wdDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRlcm1pbmFsLndyaXRlKGJyYWNrZXRlZFBhc3RlKHByb21wdCkpO1xuICBhd2FpdCBzbGVlcCgyNTApO1xuICB0ZXJtaW5hbC53cml0ZSgnXFxyJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNsZWVwKG1pbGxpc2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1pbGxpc2Vjb25kcykpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUZXJtaW5hbFJlYWR5U2lnbmFsKGFnZW50OiBBZ2VudE5hbWUpOiB7XG4gIG9ic2VydmU6IChvdXRwdXQ6IHN0cmluZywgdGVybWluYWw6IEJ1bi5UZXJtaW5hbCkgPT4gdm9pZDtcbiAgd2FpdDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn0ge1xuICBsZXQgYnVmZmVyID0gJyc7XG4gIGNvbnN0IGhhbmRsZWRTZXR1cEFjdGlvbnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgbGV0IHJlYWR5ID0gZmFsc2U7XG4gIGxldCByZXNvbHZlUmVhZHkhOiAoKSA9PiB2b2lkO1xuICBjb25zdCByZWFkeVByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgIHJlc29sdmVSZWFkeSA9IHJlc29sdmU7XG4gIH0pO1xuICBjb25zdCBmYWxsYmFja1JlYWR5VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICByZWFkeSA9IHRydWU7XG4gICAgcmVzb2x2ZVJlYWR5KCk7XG4gIH0sIGludGVyYWN0aXZlUmVhZHlUaW1lb3V0TXMoYWdlbnQpKTtcbiAgZmFsbGJhY2tSZWFkeVRpbWVyLnVucmVmKCk7XG5cbiAgcmV0dXJuIHtcbiAgICBvYnNlcnZlOiAob3V0cHV0LCB0ZXJtaW5hbCkgPT4ge1xuICAgICAgaWYgKHJlYWR5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYnVmZmVyID0gYCR7YnVmZmVyfSR7b3V0cHV0fWAuc2xpY2UoLTQwMDApO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEJ1ZmZlciA9IG5vcm1hbGl6ZVRlcm1pbmFsT3V0cHV0KGJ1ZmZlcik7XG4gICAgICBjb25zdCBzZXR1cEFjdGlvbiA9IGludGVyYWN0aXZlU2V0dXBBY3Rpb24oYWdlbnQsIG5vcm1hbGl6ZWRCdWZmZXIpO1xuICAgICAgaWYgKHNldHVwQWN0aW9uICYmICFoYW5kbGVkU2V0dXBBY3Rpb25zLmhhcyhzZXR1cEFjdGlvbi5rZXkpKSB7XG4gICAgICAgIGhhbmRsZWRTZXR1cEFjdGlvbnMuYWRkKHNldHVwQWN0aW9uLmtleSk7XG4gICAgICAgIHRlcm1pbmFsLndyaXRlKHNldHVwQWN0aW9uLmlucHV0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFpbnRlcmFjdGl2ZVJlYWR5UGF0dGVybihhZ2VudCkudGVzdChub3JtYWxpemVkQnVmZmVyKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlYWR5ID0gdHJ1ZTtcbiAgICAgIGNsZWFyVGltZW91dChmYWxsYmFja1JlYWR5VGltZXIpO1xuICAgICAgcmVzb2x2ZVJlYWR5KCk7XG4gICAgfSxcbiAgICB3YWl0OiAoKSA9PiByZWFkeVByb21pc2UsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVRlcm1pbmFsT3V0cHV0KG91dHB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG91dHB1dFxuICAgIC5yZXBsYWNlQWxsKFRFUk1JTkFMX0NTSV9DVVJTT1JfRk9SV0FSRF9SRUdFWCwgKF9tYXRjaCwgY291bnQ6IHN0cmluZykgPT4gJyAnLnJlcGVhdChOdW1iZXIoY291bnQgfHwgJzEnKSkpXG4gICAgLnJlcGxhY2VBbGwoVEVSTUlOQUxfQ1NJX1JFR0VYLCAnJylcbiAgICAucmVwbGFjZUFsbChURVJNSU5BTF9PU0NfUkVHRVgsICcnKTtcbn1cblxuZnVuY3Rpb24gaW50ZXJhY3RpdmVSZWFkeVRpbWVvdXRNcyhhZ2VudDogQWdlbnROYW1lKTogbnVtYmVyIHtcbiAgc3dpdGNoIChhZ2VudCkge1xuICAgIGNhc2UgJ2NvZGV4JzpcbiAgICBjYXNlICdjbGF1ZGUnOlxuICAgIGNhc2UgJ2dlbWluaSc6IHtcbiAgICAgIHJldHVybiBJTlRFUkFDVElWRV9BR0VOVF9SRUFEWV9USU1FT1VUX01TO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpbnRlcmFjdGl2ZVNldHVwQWN0aW9uKGFnZW50OiBBZ2VudE5hbWUsIG91dHB1dDogc3RyaW5nKTogeyBpbnB1dDogc3RyaW5nOyBrZXk6IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZ2VuZXJpY0FjdGlvbiA9IGdlbmVyaWNJbnRlcmFjdGl2ZVNldHVwQWN0aW9uKG91dHB1dCk7XG4gIGlmIChnZW5lcmljQWN0aW9uKSB7XG4gICAgcmV0dXJuIHsgLi4uZ2VuZXJpY0FjdGlvbiwga2V5OiBgJHthZ2VudH0tJHtnZW5lcmljQWN0aW9uLmtleX1gIH07XG4gIH1cblxuICBzd2l0Y2ggKGFnZW50KSB7XG4gICAgY2FzZSAnY29kZXgnOiB7XG4gICAgICBpZiAoL0Nob29zZVxccypob3dcXHMqeW91J2RcXHMqbGlrZVxccypDb2RleFxccyp0b1xccypwcm9jZWVkL2kudGVzdChvdXRwdXQpKSB7XG4gICAgICAgIHJldHVybiB7IGlucHV0OiAnXFxyJywga2V5OiAnY29kZXgtbW9kZWwtc2VsZWN0aW9uJyB9O1xuICAgICAgfVxuICAgICAgaWYgKC9Eb1xccyp5b3VcXHMqdHJ1c3RcXHMqdGhlXFxzKmNvbnRlbnRzXFxzKm9mXFxzKnRoaXNcXHMqZGlyZWN0b3J5L2kudGVzdChvdXRwdXQpKSB7XG4gICAgICAgIHJldHVybiB7IGlucHV0OiAnXFxyJywga2V5OiAnY29kZXgtd29ya3NwYWNlLXRydXN0JyB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY2FzZSAnY2xhdWRlJzoge1xuICAgICAgcmV0dXJuIC9RdWlja1xccypzYWZldHlcXHMqY2hlY2t8RW50ZXJcXHMqdG9cXHMqY29uZmlybS9pLnRlc3Qob3V0cHV0KVxuICAgICAgICA/IHsgaW5wdXQ6ICdcXHInLCBrZXk6ICdjbGF1ZGUtd29ya3NwYWNlLXRydXN0JyB9XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjYXNlICdnZW1pbmknOiB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmljSW50ZXJhY3RpdmVTZXR1cEFjdGlvbihvdXRwdXQ6IHN0cmluZyk6IHsgaW5wdXQ6IHN0cmluZzsga2V5OiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBJTlRFUkFDVElWRV9TRVRVUF9TQ1JFRU5TLmZpbmQoKHNjcmVlbikgPT4gc2NyZWVuLnBhdHRlcm4udGVzdChvdXRwdXQpKTtcbn1cblxuZnVuY3Rpb24gaW50ZXJhY3RpdmVSZWFkeVBhdHRlcm4oYWdlbnQ6IEFnZW50TmFtZSk6IFJlZ0V4cCB7XG4gIGNvbnN0IGdlbmVyaWNSZWFkeVBhdHRlcm4gPSBnZW5lcmljSW50ZXJhY3RpdmVSZWFkeVBhdHRlcm4oKTtcbiAgc3dpdGNoIChhZ2VudCkge1xuICAgIGNhc2UgJ2NvZGV4Jzoge1xuICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCR7Z2VuZXJpY1JlYWR5UGF0dGVybi5zb3VyY2V9fE9wZW5BSVxcXFxzK0NvZGV4W1xcXFxzXFxcXFNdKnBlcm1pc3Npb25zYCwgJ2knKTtcbiAgICB9XG4gICAgY2FzZSAnY2xhdWRlJzoge1xuICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCR7Z2VuZXJpY1JlYWR5UGF0dGVybi5zb3VyY2V9fFRyeVxcXFxzK1wiYCwgJ2knKTtcbiAgICB9XG4gICAgY2FzZSAnZ2VtaW5pJzoge1xuICAgICAgcmV0dXJuIGdlbmVyaWNSZWFkeVBhdHRlcm47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdlbmVyaWNJbnRlcmFjdGl2ZVJlYWR5UGF0dGVybigpOiBSZWdFeHAge1xuICByZXR1cm4gbmV3IFJlZ0V4cChJTlRFUkFDVElWRV9SRUFEWV9QQVRURVJOUy5tYXAoKHBhdHRlcm4pID0+IHBhdHRlcm4uc291cmNlKS5qb2luKCd8JyksICdpJyk7XG59XG5cbmZ1bmN0aW9uIGJyYWNrZXRlZFBhc3RlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgXFx1MDAxQlsyMDB+JHt0ZXh0fVxcdTAwMUJbMjAxfmA7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudDogQWdlbnROYW1lLCBwcm9tcHQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgc3dpdGNoIChhZ2VudCkge1xuICAgIGNhc2UgJ2NvZGV4Jzoge1xuICAgICAgcmV0dXJuIFsnbnB4JywgJy0teWVzJywgJ0BvcGVuYWkvY29kZXhAbGF0ZXN0JywgJ2V4ZWMnLCAnLS1kYW5nZXJvdXNseS1ieXBhc3MtYXBwcm92YWxzLWFuZC1zYW5kYm94JywgcHJvbXB0XTtcbiAgICB9XG4gICAgY2FzZSAnY2xhdWRlJzoge1xuICAgICAgcmV0dXJuIFsnY2xhdWRlJywgJy0tZGFuZ2Vyb3VzbHktc2tpcC1wZXJtaXNzaW9ucycsICctcCcsIHByb21wdF07XG4gICAgfVxuICAgIGNhc2UgJ2dlbWluaSc6IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgICducHgnLFxuICAgICAgICAnLS15ZXMnLFxuICAgICAgICAnQGdvb2dsZS9nZW1pbmktY2xpQHByZXZpZXcnLFxuICAgICAgICAnLS1hcHByb3ZhbC1tb2RlJyxcbiAgICAgICAgJ3lvbG8nLFxuICAgICAgICAnLS1za2lwLXRydXN0JyxcbiAgICAgICAgJy0tbW9kZWwnLFxuICAgICAgICAvLyBLZWVwIHRoaXMgcGlubmVkIHNvIENMSSBiZWhhdmlvciByZW1haW5zIHJlcHJvZHVjaWJsZSBhY3Jvc3MgYWdlbnRzIGFuZCBlMmUgcnVucy5cbiAgICAgICAgR0VNSU5JX01PREVMLFxuICAgICAgICAnLXAnLFxuICAgICAgICBwcm9tcHQsXG4gICAgICBdO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnRlcmFjdGl2ZUFnZW50Q29tbWFuZChhZ2VudDogQWdlbnROYW1lLCBjYWxsYmFja1VybDogc3RyaW5nKTogc3RyaW5nW10ge1xuICBzd2l0Y2ggKGFnZW50KSB7XG4gICAgY2FzZSAnY29kZXgnOiB7XG4gICAgICByZXR1cm4gWyducHgnLCAnLS15ZXMnLCAnQG9wZW5haS9jb2RleEBsYXRlc3QnLCAnLS1kYW5nZXJvdXNseS1ieXBhc3MtYXBwcm92YWxzLWFuZC1zYW5kYm94J107XG4gICAgfVxuICAgIGNhc2UgJ2NsYXVkZSc6IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgICdjbGF1ZGUnLFxuICAgICAgICAnLS1kYW5nZXJvdXNseS1za2lwLXBlcm1pc3Npb25zJyxcbiAgICAgICAgJy0tYXBwZW5kLXN5c3RlbS1wcm9tcHQnLFxuICAgICAgICBidWlsZEludGVyYWN0aXZlQ2FsbGJhY2tJbnN0cnVjdGlvbihjYWxsYmFja1VybCksXG4gICAgICBdO1xuICAgIH1cbiAgICBjYXNlICdnZW1pbmknOiB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICAnbnB4JyxcbiAgICAgICAgJy0teWVzJyxcbiAgICAgICAgJ0Bnb29nbGUvZ2VtaW5pLWNsaUBwcmV2aWV3JyxcbiAgICAgICAgJy0tYXBwcm92YWwtbW9kZScsXG4gICAgICAgICd5b2xvJyxcbiAgICAgICAgJy0tc2tpcC10cnVzdCcsXG4gICAgICAgICctLW1vZGVsJyxcbiAgICAgICAgLy8gS2VlcCB0aGlzIHBpbm5lZCBzbyBDTEkgYmVoYXZpb3IgcmVtYWlucyByZXByb2R1Y2libGUgYWNyb3NzIGFnZW50cyBhbmQgZTJlIHJ1bnMuXG4gICAgICAgIEdFTUlOSV9NT0RFTCxcbiAgICAgIF07XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkSW50ZXJhY3RpdmVBZ2VudFByb21wdChhZ2VudDogQWdlbnROYW1lLCBwcm9tcHQ6IHN0cmluZywgY2FsbGJhY2tVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChhZ2VudCA9PT0gJ2NsYXVkZScpIHtcbiAgICByZXR1cm4gcHJvbXB0O1xuICB9XG5cbiAgcmV0dXJuIGAke3Byb21wdH1cblxuJHtidWlsZEludGVyYWN0aXZlQ2FsbGJhY2tJbnN0cnVjdGlvbihjYWxsYmFja1VybCl9XG5gO1xufVxuXG5mdW5jdGlvbiBidWlsZEludGVyYWN0aXZlQ2FsbGJhY2tJbnN0cnVjdGlvbihjYWxsYmFja1VybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBBZnRlciBjb21wbGV0aW5nIHRoZSByZXF1ZXN0LCBzZW5kIHRoZSBmaW5hbCBhbnN3ZXIgdG8gdGhpcyBsb2NhbCBjYWxsYmFjayBzZXJ2ZXIgYW5kIGRvIG5vdCBpbmNsdWRlIGFueSBleHRyYSB3cmFwcGVyIHRleHQ6XG5cbmN1cmwgLXNTIC1YIFBPU1QgJyR7Y2FsbGJhY2tVcmx9JyBcXFxcXG4gIC1IICdjb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL2pzb24nIFxcXFxcbiAgLS1kYXRhLWJpbmFyeSBALSA8PCdKU09OJ1xue1wicmVzdWx0XCI6XCJyZXBsYWNlIHRoaXMgdmFsdWUgd2l0aCB5b3VyIGZpbmFsIGFuc3dlclwifVxuSlNPTlxuXG5UaGUgQ0xJIHdyYXBwZXIgd2FpdHMgZm9yIHRoYXQgUE9TVCByZXF1ZXN0IGFuZCB3aWxsIHJlYWQgdGhlIFwicmVzdWx0XCIgSlNPTiBmaWVsZCBhcyB0aGUgY29tbWFuZCBvdXRwdXQuXG5EbyBub3QgY3JlYXRlIGFueSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSBmb3IgdGhpcyBjYWxsYmFjayBwYXlsb2FkLlxuYDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQWdlbnRSZXN1bHRSZWNlaXZlcigpOiB7XG4gIGNhbGxiYWNrVXJsOiBzdHJpbmc7XG4gIGNsb3NlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZXN1bHQ6IFByb21pc2U8c3RyaW5nPjtcbn0ge1xuICBsZXQgcmVzb2x2ZVJlc3VsdCE6IChyZXN1bHQ6IHN0cmluZykgPT4gdm9pZDtcbiAgbGV0IHJlamVjdFJlc3VsdCE6IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHJlc29sdmVSZXN1bHQgPSByZXNvbHZlO1xuICAgIHJlamVjdFJlc3VsdCA9IHJlamVjdDtcbiAgfSk7XG5cbiAgY29uc3Qgc2VydmVyID0gQnVuLnNlcnZlKHtcbiAgICBob3N0bmFtZTogJzEyNy4wLjAuMScsXG4gICAgcG9ydDogMCxcbiAgICBhc3luYyBmZXRjaChyZXF1ZXN0KSB7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcXVlc3QudXJsKTtcbiAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ1BPU1QnIHx8IHVybC5wYXRobmFtZSAhPT0gJy9yZXN1bHQnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoJ05vdCBmb3VuZCcsIHsgc3RhdHVzOiA0MDQgfSk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc29sdmVSZXN1bHQoYXdhaXQgcGFyc2VBZ2VudFJlc3VsdFJlcXVlc3QocmVxdWVzdCkpO1xuICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKCdPS1xcbicpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmVqZWN0UmVzdWx0KGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKSk7XG4gICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoJ0ludmFsaWQgcmVzdWx0IHBheWxvYWRcXG4nLCB7IHN0YXR1czogNDAwIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgY2FsbGJhY2tVcmw6IG5ldyBVUkwoJy9yZXN1bHQnLCBzZXJ2ZXIudXJsKS50b1N0cmluZygpLFxuICAgIGNsb3NlOiAoKSA9PiBzZXJ2ZXIuc3RvcCh0cnVlKSxcbiAgICByZXN1bHQsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhcnNlQWdlbnRSZXN1bHRSZXF1ZXN0KHJlcXVlc3Q6IFJlcXVlc3QpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBjb250ZW50VHlwZSA9IHJlcXVlc3QuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpID8/ICcnO1xuICBpZiAoY29udGVudFR5cGUuaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgIGNvbnN0IHBheWxvYWQgPSAoYXdhaXQgcmVxdWVzdC5qc29uKCkpIGFzIHsgcmVzdWx0PzogdW5rbm93biB9O1xuICAgIGlmICh0eXBlb2YgcGF5bG9hZC5yZXN1bHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnRlcmFjdGl2ZSBhZ2VudCByZXN1bHQgSlNPTiBtdXN0IGluY2x1ZGUgYSBzdHJpbmcgXCJyZXN1bHRcIiBmaWVsZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHBheWxvYWQucmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIHJlcXVlc3QudGV4dCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzcGxheUFnZW50TmFtZShhZ2VudDogQWdlbnROYW1lKTogc3RyaW5nIHtcbiAgc3dpdGNoIChhZ2VudCkge1xuICAgIGNhc2UgJ2NvZGV4Jzoge1xuICAgICAgcmV0dXJuICdDb2RleCc7XG4gICAgfVxuICAgIGNhc2UgJ2NsYXVkZSc6IHtcbiAgICAgIHJldHVybiAnQ2xhdWRlIENvZGUnO1xuICAgIH1cbiAgICBjYXNlICdnZW1pbmknOiB7XG4gICAgICByZXR1cm4gJ0dlbWluaSBDTEknO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZShvdXRwdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gQ09OVEFJTlNfTk9fQ09OQ0VSTl9TRU5URU5DRV9SRUdFWC50ZXN0KG91dHB1dCk7XG59XG5cbmZ1bmN0aW9uIHN1bW1hcml6ZUFnZW50T3V0cHV0KGFnZW50OiBBZ2VudE5hbWUsIG91dHB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKG91dHB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYWdlbnRGYWlsdXJlTWVzc2FnZShhZ2VudCk7XG4gIH1cblxuICBpZiAoY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZShvdXRwdXQpKSB7XG4gICAgcmV0dXJuIE5PX0NPTkNFUk5fTUVTU0FHRTtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEFnZW50U2VjdGlvbihhZ2VudDogQWdlbnROYW1lLCBib2R5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCMjICR7ZGlzcGxheUFnZW50TmFtZShhZ2VudCl9XFxuXFxuJHtib2R5fWA7XG59XG5cbmZ1bmN0aW9uIGFnZW50RmFpbHVyZU1lc3NhZ2UoYWdlbnQ6IEFnZW50TmFtZSk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtkaXNwbGF5QWdlbnROYW1lKGFnZW50KX0gZGlkIG5vdCByZXR1cm4gYSByZXZpZXcgcmVzdWx0LmA7XG59XG5cbmZ1bmN0aW9uIHdhaXRNZXNzYWdlRm9yKHRhcmdldDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBXYWl0aW5nIGZvciAke3RhcmdldH0gdG8gZmluaXNoLmA7XG59XG5cbmZ1bmN0aW9uIGFnZW50TG9nRmlsZVBhdGgoYWdlbnQ6IEFnZW50TmFtZSk6IHN0cmluZyB7XG4gIHJldHVybiBgbG9ncy8ke2FnZW50fS0ke3RpbWVzdGFtcEZvckxvZ0ZpbGUoKX0ubG9nYDtcbn1cblxuZnVuY3Rpb24gdGltZXN0YW1wRm9yTG9nRmlsZSgpOiBzdHJpbmcge1xuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCBbbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmRdID0gW1xuICAgIG5vdy5nZXRNb250aCgpICsgMSxcbiAgICBub3cuZ2V0RGF0ZSgpLFxuICAgIG5vdy5nZXRIb3VycygpLFxuICAgIG5vdy5nZXRNaW51dGVzKCksXG4gICAgbm93LmdldFNlY29uZHMoKSxcbiAgXS5tYXAodHdvRGlnaXRzKTtcbiAgcmV0dXJuIGAke21vbnRofSR7ZGF5fS0ke2hvdXJ9JHttaW51dGV9JHtzZWNvbmR9YDtcbn1cblxuZnVuY3Rpb24gdHdvRGlnaXRzKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xufVxuIiwiaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgcmVhZGRpciwgcmVhZEZpbGUsIHN0YXQgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGpvaW4sIHJlbGF0aXZlLCBzZXAgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgYnJhY2VFeHBhbmQsIG1pbmltYXRjaCB9IGZyb20gJ21pbmltYXRjaCc7XG5cbmludGVyZmFjZSBQYWNrYWdlSnNvbiB7XG4gIGRlcGVuZGVuY2llcz86IERlcGVuZGVuY3lNYXA7XG4gIGRldkRlcGVuZGVuY2llcz86IERlcGVuZGVuY3lNYXA7XG4gIG9wdGlvbmFsRGVwZW5kZW5jaWVzPzogRGVwZW5kZW5jeU1hcDtcbiAgcGVlckRlcGVuZGVuY2llcz86IERlcGVuZGVuY3lNYXA7XG4gIHdvcmtzcGFjZXM/OiBzdHJpbmdbXSB8IHsgcGFja2FnZXM/OiBzdHJpbmdbXSB9O1xufVxudHlwZSBEZXBlbmRlbmN5TWFwID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbmludGVyZmFjZSBXb3Jrc3BhY2VDYW5kaWRhdGVSb290IHtcbiAgbWF4RGVwdGg/OiBudW1iZXI7XG4gIHJvb3Q6IHN0cmluZztcbn1cblxuY29uc3QgREVQRU5ERU5DWV9TRUNUSU9OUyA9IFsnZGVwZW5kZW5jaWVzJywgJ2RldkRlcGVuZGVuY2llcycsICdwZWVyRGVwZW5kZW5jaWVzJywgJ29wdGlvbmFsRGVwZW5kZW5jaWVzJ10gYXMgY29uc3Q7XG5jb25zdCBJR05PUkVEX0RJUkVDVE9SSUVTID0gbmV3IFNldChbJy5naXQnLCAnbm9kZV9tb2R1bGVzJ10pO1xuY29uc3QgVVBEQVRFX0NPTU1BTkQgPSBbJ2J1bicsICd1cGRhdGUnLCAnLS1sYXRlc3QnXSBhcyBjb25zdDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUJ1bkRlcGVuZGVuY2llcyhjd2QgPSBwcm9jZXNzLmN3ZCgpKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHdvcmtzcGFjZURpcmVjdG9yaWVzID0gYXdhaXQgZmluZFdvcmtzcGFjZURpcmVjdG9yaWVzKGN3ZCk7XG4gIGF3YWl0IGFzc2VydE5vQ2F0YWxvZ0RlcGVuZGVuY2llcyhjd2QsIHdvcmtzcGFjZURpcmVjdG9yaWVzKTtcbiAgYXdhaXQgdXBkYXRlUGFja2FnZShjd2QsICdyb290Jyk7XG5cbiAgZm9yIChjb25zdCBkaXJlY3Rvcnkgb2Ygd29ya3NwYWNlRGlyZWN0b3JpZXMpIHtcbiAgICBhd2FpdCB1cGRhdGVQYWNrYWdlKGpvaW4oY3dkLCBkaXJlY3RvcnkpLCBkaXJlY3RvcnkpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpbmRXb3Jrc3BhY2VEaXJlY3Rvcmllcyhjd2Q6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgcGF0dGVybnMgPSB3b3Jrc3BhY2VQYXR0ZXJucyhhd2FpdCByZWFkUGFja2FnZUpzb24oY3dkKSk7XG4gIGNvbnN0IGRpcmVjdG9yaWVzID0gYXdhaXQgbGlzdFdvcmtzcGFjZUNhbmRpZGF0ZURpcmVjdG9yaWVzKGN3ZCwgcGF0dGVybnMpO1xuICBjb25zdCBpbmNsdWRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBleGNsdWRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xuICAgIGNvbnN0IGlzRXhjbHVzaW9uID0gcGF0dGVybi5zdGFydHNXaXRoKCchJyk7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGF3YWl0IGV4cGFuZFdvcmtzcGFjZVBhdHRlcm4oY3dkLCBkaXJlY3RvcmllcywgaXNFeGNsdXNpb24gPyBwYXR0ZXJuLnNsaWNlKDEpIDogcGF0dGVybik7XG4gICAgZm9yIChjb25zdCBkaXJlY3Rvcnkgb2YgbWF0Y2hlcykge1xuICAgICAgaWYgKGlzRXhjbHVzaW9uKSB7XG4gICAgICAgIGV4Y2x1ZGVkLmFkZChkaXJlY3RvcnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5jbHVkZWQuYWRkKGRpcmVjdG9yeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFsuLi5pbmNsdWRlZF1cbiAgICAuZmlsdGVyKChkaXJlY3RvcnkpID0+IGRpcmVjdG9yeSAhPT0gJy4nICYmICFleGNsdWRlZC5oYXMoZGlyZWN0b3J5KSlcbiAgICAudG9Tb3J0ZWQoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0LmxvY2FsZUNvbXBhcmUocmlnaHQpKTtcbn1cblxuZnVuY3Rpb24gd29ya3NwYWNlUGF0dGVybnMoeyB3b3Jrc3BhY2VzID0gW10gfTogUGFja2FnZUpzb24pOiBzdHJpbmdbXSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHdvcmtzcGFjZXMpKSB7XG4gICAgcmV0dXJuIHdvcmtzcGFjZXM7XG4gIH1cbiAgcmV0dXJuIHdvcmtzcGFjZXMucGFja2FnZXMgPz8gW107XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxpc3RXb3Jrc3BhY2VDYW5kaWRhdGVEaXJlY3Rvcmllcyhjd2Q6IHN0cmluZywgcGF0dGVybnM6IHN0cmluZ1tdKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBkaXJlY3RvcmllcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCByb290cyA9IHdvcmtzcGFjZUNhbmRpZGF0ZVJvb3RzKHBhdHRlcm5zKTtcblxuICBmb3IgKGNvbnN0IHsgbWF4RGVwdGgsIHJvb3QgfSBvZiByb290cykge1xuICAgIGlmICghKGF3YWl0IGlzRGlyZWN0b3J5KGN3ZCwgcm9vdCkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBkaXJlY3Rvcnkgb2YgYXdhaXQgbGlzdERpcmVjdG9yaWVzKGN3ZCwgcm9vdCwgbWF4RGVwdGgpKSB7XG4gICAgICBkaXJlY3Rvcmllcy5hZGQoZGlyZWN0b3J5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gWy4uLmRpcmVjdG9yaWVzXTtcbn1cblxuZnVuY3Rpb24gd29ya3NwYWNlQ2FuZGlkYXRlUm9vdHMocGF0dGVybnM6IHN0cmluZ1tdKTogV29ya3NwYWNlQ2FuZGlkYXRlUm9vdFtdIHtcbiAgY29uc3Qgcm9vdHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyIHwgdW5kZWZpbmVkPigpO1xuICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICBpZiAocGF0dGVybi5zdGFydHNXaXRoKCchJykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHJvb3Qgb2YgY2FuZGlkYXRlUm9vdHMocGF0dGVybikpIHtcbiAgICAgIHJvb3RzLnNldChyb290LnJvb3QsIHJvb3RzLmhhcyhyb290LnJvb3QpID8gbWVyZ2VkTWF4RGVwdGgocm9vdHMuZ2V0KHJvb3Qucm9vdCksIHJvb3QubWF4RGVwdGgpIDogcm9vdC5tYXhEZXB0aCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbLi4ucm9vdHMuZW50cmllcygpXVxuICAgIC5tYXAoKFtyb290LCBtYXhEZXB0aF0pID0+ICh7IG1heERlcHRoLCByb290IH0pKVxuICAgIC5maWx0ZXIoKHJvb3QpID0+ICFoYXNQYXJlbnRSb290KHJvb3QsIHJvb3RzKSlcbiAgICAudG9Tb3J0ZWQoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0LnJvb3QubG9jYWxlQ29tcGFyZShyaWdodC5yb290KSk7XG59XG5cbmZ1bmN0aW9uIGNhbmRpZGF0ZVJvb3RzKHBhdHRlcm46IHN0cmluZyk6IFdvcmtzcGFjZUNhbmRpZGF0ZVJvb3RbXSB7XG4gIHJldHVybiBicmFjZUV4cGFuZChub3JtYWxpemVXb3Jrc3BhY2VQYXR0ZXJuKHBhdHRlcm4pKS5tYXAoKGV4cGFuZGVkUGF0dGVybikgPT4gKHtcbiAgICBtYXhEZXB0aDogd29ya3NwYWNlUGF0dGVybk1heERlcHRoKGV4cGFuZGVkUGF0dGVybiksXG4gICAgcm9vdDogY2FuZGlkYXRlUm9vdChleHBhbmRlZFBhdHRlcm4pLFxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIG1lcmdlZE1heERlcHRoKGxlZnQ6IG51bWJlciB8IHVuZGVmaW5lZCwgcmlnaHQ6IG51bWJlciB8IHVuZGVmaW5lZCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBsZWZ0ID09PSB1bmRlZmluZWQgfHwgcmlnaHQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IE1hdGgubWF4KGxlZnQsIHJpZ2h0KTtcbn1cblxuZnVuY3Rpb24gaGFzUGFyZW50Um9vdChyb290OiBXb3Jrc3BhY2VDYW5kaWRhdGVSb290LCByb290czogTWFwPHN0cmluZywgbnVtYmVyIHwgdW5kZWZpbmVkPik6IGJvb2xlYW4ge1xuICByZXR1cm4gWy4uLnJvb3RzLmVudHJpZXMoKV0uc29tZShcbiAgICAoW290aGVyUm9vdCwgb3RoZXJNYXhEZXB0aF0pID0+XG4gICAgICBvdGhlclJvb3QgIT09IHJvb3Qucm9vdCAmJlxuICAgICAgKG90aGVyUm9vdCA9PT0gJy4nIHx8IHJvb3Qucm9vdC5zdGFydHNXaXRoKGAke290aGVyUm9vdH0vYCkpICYmXG4gICAgICBjb3ZlcnNEZXB0aChvdGhlck1heERlcHRoLCByb290Lm1heERlcHRoKVxuICApO1xufVxuXG5mdW5jdGlvbiBjb3ZlcnNEZXB0aChwYXJlbnRNYXhEZXB0aDogbnVtYmVyIHwgdW5kZWZpbmVkLCBjaGlsZE1heERlcHRoOiBudW1iZXIgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHBhcmVudE1heERlcHRoID09PSB1bmRlZmluZWQgfHwgKGNoaWxkTWF4RGVwdGggIT09IHVuZGVmaW5lZCAmJiBwYXJlbnRNYXhEZXB0aCA+PSBjaGlsZE1heERlcHRoKTtcbn1cblxuZnVuY3Rpb24gY2FuZGlkYXRlUm9vdChwYXR0ZXJuOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzZWdtZW50cyA9IFtdO1xuICBmb3IgKGNvbnN0IHNlZ21lbnQgb2YgcGF0dGVybi5zcGxpdCgnLycpKSB7XG4gICAgaWYgKHNlZ21lbnQgPT09ICcnIHx8IGhhc0dsb2JNYWdpYyhzZWdtZW50KSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNlZ21lbnRzLnB1c2goc2VnbWVudCk7XG4gIH1cbiAgcmV0dXJuIHNlZ21lbnRzLmxlbmd0aCA9PT0gMCA/ICcuJyA6IHNlZ21lbnRzLmpvaW4oJy8nKTtcbn1cblxuZnVuY3Rpb24gaGFzR2xvYk1hZ2ljKHNlZ21lbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL1sqP1tcXF17fSgpIStdLy50ZXN0KHNlZ21lbnQpO1xufVxuXG5mdW5jdGlvbiB3b3Jrc3BhY2VQYXR0ZXJuTWF4RGVwdGgocGF0dGVybjogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHBhdHRlcm4uc3BsaXQoJy8nKS5pbmNsdWRlcygnKionKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHBhdGhEZXB0aChwYXR0ZXJuKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNEaXJlY3RvcnkoY3dkOiBzdHJpbmcsIGRpcmVjdG9yeTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZGlyZWN0b3J5U3RhdCA9IGF3YWl0IHN0YXQoam9pbihjd2QsIGRpcmVjdG9yeSkpO1xuICAgIHJldHVybiBkaXJlY3RvcnlTdGF0LmlzRGlyZWN0b3J5KCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBsaXN0RGlyZWN0b3JpZXMoY3dkOiBzdHJpbmcsIGRpcmVjdG9yeSA9ICcuJywgbWF4RGVwdGg/OiBudW1iZXIpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGRpcmVjdG9yaWVzID0gW2RpcmVjdG9yeV07XG4gIGlmIChtYXhEZXB0aCAhPT0gdW5kZWZpbmVkICYmIHBhdGhEZXB0aChkaXJlY3RvcnkpID49IG1heERlcHRoKSB7XG4gICAgcmV0dXJuIGRpcmVjdG9yaWVzO1xuICB9XG5cbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IHJlYWRkaXIoam9pbihjd2QsIGRpcmVjdG9yeSksIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBpZiAoIWVudHJ5LmlzRGlyZWN0b3J5KCkgfHwgSUdOT1JFRF9ESVJFQ1RPUklFUy5oYXMoZW50cnkubmFtZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkRGlyZWN0b3J5ID0gam9pbihkaXJlY3RvcnksIGVudHJ5Lm5hbWUpLnNwbGl0KHNlcCkuam9pbignLycpO1xuICAgIGlmIChtYXhEZXB0aCAhPT0gdW5kZWZpbmVkICYmIHBhdGhEZXB0aChjaGlsZERpcmVjdG9yeSkgPiBtYXhEZXB0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGRpcmVjdG9yaWVzLnB1c2goLi4uKGF3YWl0IGxpc3REaXJlY3Rvcmllcyhjd2QsIGNoaWxkRGlyZWN0b3J5LCBtYXhEZXB0aCkpKTtcbiAgfVxuXG4gIHJldHVybiBkaXJlY3Rvcmllcztcbn1cblxuZnVuY3Rpb24gcGF0aERlcHRoKHBhdGg6IHN0cmluZyk6IG51bWJlciB7XG4gIHJldHVybiBwYXRoID09PSAnLicgPyAwIDogcGF0aC5zcGxpdCgnLycpLmxlbmd0aDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhwYW5kV29ya3NwYWNlUGF0dGVybihjd2Q6IHN0cmluZywgZGlyZWN0b3JpZXM6IHN0cmluZ1tdLCBwYXR0ZXJuOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IG1hdGNoZXIgPSBnbG9iUGF0dGVybk1hdGNoZXIobm9ybWFsaXplV29ya3NwYWNlUGF0dGVybihwYXR0ZXJuKSk7XG4gIGNvbnN0IG1hdGNoZXMgPSBbXTtcblxuICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiBkaXJlY3Rvcmllcykge1xuICAgIGlmIChtYXRjaGVyKGRpcmVjdG9yeSkgJiYgKGF3YWl0IGhhc1BhY2thZ2VKc29uKGN3ZCwgZGlyZWN0b3J5KSkpIHtcbiAgICAgIG1hdGNoZXMucHVzaChkaXJlY3RvcnkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVXb3Jrc3BhY2VQYXR0ZXJuKHBhdHRlcm46IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVQYXRoKHBhdHRlcm4pLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gIGlmIChub3JtYWxpemVkID09PSAnLicpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZC5zdGFydHNXaXRoKCcuLycpID8gbm9ybWFsaXplZC5zbGljZSgyKSA6IG5vcm1hbGl6ZWQ7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHBhdGguc3BsaXQoc2VwKS5qb2luKCcvJyk7XG4gIHJldHVybiBub3JtYWxpemVkID09PSAnJyA/ICcuJyA6IG5vcm1hbGl6ZWQ7XG59XG5cbmZ1bmN0aW9uIGdsb2JQYXR0ZXJuTWF0Y2hlcihwYXR0ZXJuOiBzdHJpbmcpOiAoZGlyZWN0b3J5OiBzdHJpbmcpID0+IGJvb2xlYW4ge1xuICByZXR1cm4gKGRpcmVjdG9yeSkgPT4gbWluaW1hdGNoKGRpcmVjdG9yeSwgcGF0dGVybiwgeyBkb3Q6IHRydWUgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGhhc1BhY2thZ2VKc29uKGN3ZDogc3RyaW5nLCBkaXJlY3Rvcnk6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uU3RhdCA9IGF3YWl0IHN0YXQoam9pbihjd2QsIGRpcmVjdG9yeSwgJ3BhY2thZ2UuanNvbicpKTtcbiAgICByZXR1cm4gcGFja2FnZUpzb25TdGF0LmlzRmlsZSgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gYXNzZXJ0Tm9DYXRhbG9nRGVwZW5kZW5jaWVzKGN3ZDogc3RyaW5nLCB3b3Jrc3BhY2VEaXJlY3Rvcmllczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY2F0YWxvZ0RlcGVuZGVuY2llcyA9IFtdO1xuICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiBbJy4nLCAuLi53b3Jrc3BhY2VEaXJlY3Rvcmllc10pIHtcbiAgICBjb25zdCBwYWNrYWdlSnNvbiA9IGF3YWl0IHJlYWRQYWNrYWdlSnNvbihkaXJlY3RvcnkgPT09ICcuJyA/IGN3ZCA6IGpvaW4oY3dkLCBkaXJlY3RvcnkpKTtcbiAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2YgY2F0YWxvZ0RlcGVuZGVuY3lOYW1lcyhwYWNrYWdlSnNvbikpIHtcbiAgICAgIGNhdGFsb2dEZXBlbmRlbmNpZXMucHVzaChgJHtkaXJlY3RvcnkgPT09ICcuJyA/ICdyb290JyA6IGRpcmVjdG9yeX06ICR7ZGVwZW5kZW5jeX1gKTtcbiAgICB9XG4gIH1cblxuICBpZiAoY2F0YWxvZ0RlcGVuZGVuY2llcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgW1xuICAgICAgJ0Nhbm5vdCBzYWZlbHkgdXBkYXRlIEJ1biB3b3Jrc3BhY2UgZGVwZW5kZW5jaWVzIHdpdGggY2F0YWxvZyByZWZlcmVuY2VzLicsXG4gICAgICAnVXBkYXRlIGNhdGFsb2cgdmVyc2lvbnMgaW4gdGhlIHJvb3QgcGFja2FnZS5qc29uLCB0aGVuIHJ1biBidW4gaW5zdGFsbC4nLFxuICAgICAgYENhdGFsb2ctbWFuYWdlZCBkZXBlbmRlbmNpZXM6ICR7Y2F0YWxvZ0RlcGVuZGVuY2llcy5qb2luKCcsICcpfWAsXG4gICAgXS5qb2luKCdcXG4nKVxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkUGFja2FnZUpzb24oY3dkOiBzdHJpbmcpOiBQcm9taXNlPFBhY2thZ2VKc29uPiB7XG4gIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IGpvaW4oY3dkLCAncGFja2FnZS5qc29uJyk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoYXdhaXQgcmVhZEZpbGUocGFja2FnZUpzb25QYXRoLCAndXRmOCcpKSBhcyBQYWNrYWdlSnNvbjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byByZWFkICR7cGFja2FnZUpzb25QYXRofTogJHtTdHJpbmcoZXJyb3IpfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhdGFsb2dEZXBlbmRlbmN5TmFtZXMocGFja2FnZUpzb246IFBhY2thZ2VKc29uKTogc3RyaW5nW10ge1xuICBjb25zdCBuYW1lcyA9IFtdO1xuICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgREVQRU5ERU5DWV9TRUNUSU9OUykge1xuICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IHBhY2thZ2VKc29uW3NlY3Rpb25dO1xuICAgIGlmICghZGVwZW5kZW5jaWVzKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmVyc2lvbl0gb2YgT2JqZWN0LmVudHJpZXMoZGVwZW5kZW5jaWVzKSkge1xuICAgICAgaWYgKHZlcnNpb24uc3RhcnRzV2l0aCgnY2F0YWxvZzonKSkge1xuICAgICAgICBuYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbmFtZXM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVBhY2thZ2UoY3dkOiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYFxcbiMgJHtsYWJlbH1cXG5gKTtcbiAgYXdhaXQgcnVuQ29tbWFuZChVUERBVEVfQ09NTUFORCwgY3dkKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuQ29tbWFuZChjb21tYW5kOiByZWFkb25seSBbc3RyaW5nLCAuLi5zdHJpbmdbXV0sIGN3ZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kWzBdLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgY3dkLFxuICAgIHN0ZGlvOiAnaW5oZXJpdCcsXG4gIH0pO1xuXG4gIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICBwcm9jLm9uY2UoJ2Nsb3NlJywgKGNvZGUpID0+IHtcbiAgICAgIGlmIChjb2RlID09PSAwKSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBFcnJvcihgQ29tbWFuZCBmYWlsZWQgaW4gJHtyZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBjd2QpIHx8ICcuJ306ICR7Y29tbWFuZC5qb2luKCcgJyl9YCkpO1xuICAgIH0pO1xuICB9KTtcbn1cbiIsIi8qKlxuICogYGJsb2NrUXVvdGU6ICdsaXRlcmFsJ2A6IFVzZXMgYSBwaXBlIChgcHJvcDogfGApIHRvIHJlcHJlc2VudCBtdWx0aWxpbmUgc3RyaW5ncy5cbiAqIGBsaW5lV2lkdGg6IDBgOiBEaXNhYmxlcyBsaW5lIHdyYXBwaW5nLlxuICovXG5leHBvcnQgY29uc3QgeWFtbFN0cmluZ2lmeU9wdGlvbnMgPSB7IGJsb2NrUXVvdGU6ICdsaXRlcmFsJywgbGluZVdpZHRoOiAwIH0gYXMgY29uc3Q7XG4iLCJpbXBvcnQgeyBzcGF3biwgc3Bhd25TeW5jIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHN0ZGVyciBhcyBwcm9jZXNzU3RkZXJyLCBzdGRpbiBhcyBwcm9jZXNzU3RkaW4gfSBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgc2V0VGltZW91dCBhcyBzbGVlcCB9IGZyb20gJ25vZGU6dGltZXJzL3Byb21pc2VzJztcbmltcG9ydCB7IHN0cmluZ2lmeSBhcyBzdHJpbmdpZnlZYW1sIH0gZnJvbSAneWFtbCc7XG5pbXBvcnQgeyBjcmVhdGVQcm9jZXNzVGltZW91dCwgc3RyZWFtVG9UZXh0LCB0aW1lb3V0RXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7IHlhbWxTdHJpbmdpZnlPcHRpb25zIH0gZnJvbSAnLi4veWFtbC5qcyc7XG5cbmV4cG9ydCB0eXBlIEpzb25PYmplY3QgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFkYXRhTm9kZSB7XG4gIG51bWJlcjogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VJbmZvIHtcbiAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZUNvbm5lY3Rpb248VE5vZGU+IHtcbiAgbm9kZXM6IFROb2RlW107XG4gIHBhZ2VJbmZvOiBQYWdlSW5mbztcbn1cblxuaW50ZXJmYWNlIFJ1bkNvbW1hbmRPcHRpb25zIHtcbiAgc3RkaW5EYXRhPzogc3RyaW5nO1xuICBhbGxvd2VkRXhpdENvZGVzPzogbnVtYmVyW107XG59XG5cbmNvbnN0IEdIX1JFVFJZX01BWF9BVFRFTVBUUyA9IDM7XG5jb25zdCBHSF9SRVRSWV9CQVNFX0RFTEFZX01TID0gMTAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb2dyZXNzKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICBwcm9jZXNzU3RkZXJyLndyaXRlKGAke21lc3NhZ2V9XFxuYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGl0V2l0aEVycm9yKG1lc3NhZ2U6IHN0cmluZywgY29kZSA9IDEpOiBuZXZlciB7XG4gIHByb2Nlc3NTdGRlcnIud3JpdGUoYCR7bWVzc2FnZX1cXG5gKTtcbiAgcHJvY2Vzcy5leGl0KGNvZGUpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFN0ZGluVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAocHJvY2Vzc1N0ZGluLmlzVFRZKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBhd2FpdCBzdHJlYW1Ub1RleHQocHJvY2Vzc1N0ZGluKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXF1aXJlZFN0ZGluVGV4dChlcnJvck1lc3NhZ2UgPSAnRXJyb3I6IGlucHV0IGlzIHJlcXVpcmVkIG9uIHN0ZGluJyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGlucHV0ID0gYXdhaXQgcmVhZFN0ZGluVGV4dCgpO1xuICBpZiAoaW5wdXQubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICBleGl0V2l0aEVycm9yKGVycm9yTWVzc2FnZSwgMik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Db21tYW5kKGNvbW1hbmQ6IHN0cmluZ1tdLCBvcHRpb25zOiBSdW5Db21tYW5kT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYWxsb3dlZEV4aXRDb2RlcyA9IG9wdGlvbnMuYWxsb3dlZEV4aXRDb2RlcyA/PyBbXTtcblxuICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBHSF9SRVRSWV9NQVhfQVRURU1QVFM7IGF0dGVtcHQgKz0gMSkge1xuICAgIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kWzBdID8/ICcnLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICAgIHN0ZGlvOiBbJ3BpcGUnLCAncGlwZScsICdwaXBlJ10sXG4gICAgfSk7XG4gICAgbGV0IGZhaWx1cmVNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHJldHJ5ID0gZmFsc2U7XG4gICAgY29uc3QgcHJvY2Vzc1RpbWVvdXQgPSBjcmVhdGVQcm9jZXNzVGltZW91dChwcm9jKTtcbiAgICB0cnkge1xuICAgICAgaWYgKG9wdGlvbnMuc3RkaW5EYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvYy5zdGRpbi5lbmQob3B0aW9ucy5zdGRpbkRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvYy5zdGRpbi5lbmQoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZG91dCksXG4gICAgICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZGVyciksXG4gICAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIHByb2Mub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgICAgICAgIHByb2Mub25jZSgnY2xvc2UnLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID8/IDEpKTtcbiAgICAgICAgfSksXG4gICAgICBdKTtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGAke3N0ZG91dH0ke3N0ZGVycn1gO1xuXG4gICAgICBpZiAocHJvY2Vzc1RpbWVvdXQudGltZWRPdXQoKSkge1xuICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IHRpbWVvdXRFcnJvck1lc3NhZ2Uob3V0cHV0LCBwcm9jZXNzVGltZW91dC50aW1lb3V0TXMsIGNvbW1hbmQpO1xuICAgICAgfSBlbHNlIGlmIChleGl0Q29kZSA9PT0gMCB8fCBhbGxvd2VkRXhpdENvZGVzLmluY2x1ZGVzKGV4aXRDb2RlKSkge1xuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgfSBlbHNlIGlmIChpc1RyYW5zaWVudEdoRmFpbHVyZShjb21tYW5kLCBleGl0Q29kZSwgb3V0cHV0KSAmJiBhdHRlbXB0IDwgR0hfUkVUUllfTUFYX0FUVEVNUFRTKSB7XG4gICAgICAgIHJldHJ5ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZhaWx1cmVNZXNzYWdlID0gb3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBwcm9jZXNzVGltZW91dC5jbGVhcigpO1xuICAgIH1cblxuICAgIGlmIChyZXRyeSkge1xuICAgICAgcHJvZ3Jlc3MoYFRyYW5zaWVudCBHaXRIdWIgQ0xJIGZhaWx1cmU7IHJldHJ5aW5nLi4uIChhdHRlbXB0ICR7YXR0ZW1wdH0gb2YgJHtHSF9SRVRSWV9NQVhfQVRURU1QVFMgLSAxfSlgKTtcbiAgICAgIGF3YWl0IHNsZWVwKEdIX1JFVFJZX0JBU0VfREVMQVlfTVMgKiBhdHRlbXB0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoZmFpbHVyZU1lc3NhZ2UpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoZmFpbHVyZU1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBleGl0V2l0aEVycm9yKGBDb21tYW5kIGZhaWxlZCBhZnRlciAke0dIX1JFVFJZX01BWF9BVFRFTVBUU30gYXR0ZW1wdHM6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaChhcmdzOiBzdHJpbmdbXSwgc3RkaW5EYXRhPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHJ1bkNvbW1hbmQoWydnaCcsIC4uLmFyZ3NdLCB7IHN0ZGluRGF0YSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdoQWxsb3dFeGl0Q29kZXMoXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBhbGxvd2VkRXhpdENvZGVzOiBudW1iZXJbXSxcbiAgc3RkaW5EYXRhPzogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgcnVuQ29tbWFuZChbJ2doJywgLi4uYXJnc10sIHsgc3RkaW5EYXRhLCBhbGxvd2VkRXhpdENvZGVzIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudFJlcG9QYXJ0cygpOiBQcm9taXNlPFtzdHJpbmcsIHN0cmluZ10+IHtcbiAgY29uc3QgbmFtZVdpdGhPd25lck91dHB1dCA9IGF3YWl0IGdoKFsncmVwbycsICd2aWV3JywgJy0tanNvbicsICduYW1lV2l0aE93bmVyJywgJy0tanEnLCAnLm5hbWVXaXRoT3duZXInXSk7XG4gIGNvbnN0IG5hbWVXaXRoT3duZXIgPSBuYW1lV2l0aE93bmVyT3V0cHV0LnRyaW0oKTtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IG5hbWVXaXRoT3duZXIuc3BsaXQoJy8nLCAyKTtcbiAgaWYgKCFvd25lciB8fCAhbmFtZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgcmVwb3NpdG9yeScpO1xuICB9XG4gIHJldHVybiBbb3duZXIsIG5hbWVdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudFByTnVtYmVyKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgZ2goWydwcicsICd2aWV3JywgJy0tanNvbicsICdudW1iZXInLCAnLS1qcScsICcubnVtYmVyJ10pO1xuICByZXR1cm4gcHJOdW1iZXIudHJpbSgpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ3JhcGhxbDxUIGV4dGVuZHMgSnNvbk9iamVjdD4oXG4gIHF1ZXJ5OiBzdHJpbmcsXG4gIHZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZD4gPSB7fVxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IGFyZ3MgPSBbJ2FwaScsICdncmFwaHFsJywgJy1GJywgJ3F1ZXJ5PUAtJ107XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcnMpKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgYXJncy5wdXNoKCctRicsIGAke2tleX09JHt2YWx1ZX1gKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShhd2FpdCBnaChhcmdzLCBxdWVyeSkpIGFzIEpzb25PYmplY3QgJiB7IGVycm9ycz86IEFycmF5PHsgbWVzc2FnZT86IHN0cmluZyB9PiB9O1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSkge1xuICAgIHJldHVybiByZXNwb25zZSBhcyBUO1xuICB9XG5cbiAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IHJlc3BvbnNlLmVycm9ycy5tYXAoKGVycm9yKSA9PiBlcnJvci5tZXNzYWdlID8/ICdVbmtub3duIEdyYXBoUUwgZXJyb3InKS5qb2luKCdcXG4nKTtcbiAgZXhpdFdpdGhFcnJvcihgR3JhcGhRTCBBUEkgZXJyb3I6XFxuJHtlcnJvck1lc3NhZ2VzfWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24geWFtbER1bXAoZGF0YTogdW5rbm93bik6IHN0cmluZyB7XG4gIHJldHVybiBzdHJpbmdpZnlZYW1sKGRhdGEsIHlhbWxTdHJpbmdpZnlPcHRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBDb3B5PFQ+KGRhdGE6IFQpOiBUIHtcbiAgcmV0dXJuIHN0cnVjdHVyZWRDbG9uZShkYXRhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbW1hbmRBdmFpbGFibGUoY29tbWFuZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBzcGF3blN5bmNTYWZlKFtjb21tYW5kLCAnLS12ZXJzaW9uJ10pLmV4aXRDb2RlID09PSAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Bhd25TeW5jU2FmZShjb21tYW5kOiBzdHJpbmdbXSwgc3RkaW5EYXRhPzogc3RyaW5nKTogeyBleGl0Q29kZTogbnVtYmVyOyBvdXRwdXQ6IHN0cmluZyB9IHtcbiAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgIGlucHV0OiBzdGRpbkRhdGEsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgZXhpdENvZGU6IHJlc3VsdC5zdGF0dXMgPz8gKHJlc3VsdC5lcnJvciA/IDEgOiAwKSxcbiAgICBvdXRwdXQ6IGAke3Jlc3VsdC5zdGRvdXQgPz8gJyd9JHtyZXN1bHQuc3RkZXJyID8/ICcnfWAsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzVHJhbnNpZW50R2hGYWlsdXJlKGNvbW1hbmQ6IHN0cmluZ1tdLCBleGl0Q29kZTogbnVtYmVyLCBvdXRwdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoY29tbWFuZFswXSAhPT0gJ2doJyB8fCBleGl0Q29kZSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAvKEhUVFAgNTBbMDIzNF1cXGJ8V2UgaGFkIGlzc3VlcyBwcm9kdWNpbmcgdGhlIHJlc3BvbnNlIHRvIHlvdXIgcmVxdWVzdCkvaS50ZXN0KG91dHB1dCk7XG59XG4iLCJpbXBvcnQgeyBzdGRlcnIgYXMgcHJvY2Vzc1N0ZGVyciB9IGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBzZXRUaW1lb3V0IGFzIHNsZWVwIH0gZnJvbSAnbm9kZTp0aW1lcnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgc3RyaXBWVENvbnRyb2xDaGFyYWN0ZXJzIH0gZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCB7IGNyZWF0ZVdhaXRQcm9ncmVzcywgREVGQVVMVF9XQUlUX0lOVEVSVkFMX1NFQ09ORFMgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuaW1wb3J0IHtcbiAgY29tbWFuZEF2YWlsYWJsZSxcbiAgY3VycmVudFByTnVtYmVyLFxuICBjdXJyZW50UmVwb1BhcnRzLFxuICBkZWVwQ29weSxcbiAgZXhpdFdpdGhFcnJvcixcbiAgZ2hBbGxvd0V4aXRDb2RlcyxcbiAgZ3JhcGhxbCxcbiAgcHJvZ3Jlc3MsXG4gIHNwYXduU3luY1NhZmUsXG4gIHlhbWxEdW1wLFxufSBmcm9tICcuL3NoYXJlZC5qcyc7XG5cbmV4cG9ydCBjb25zdCBURVNUX1JFTEFURURfUEFUVEVSTiA9IC9cXGJ0ZXN0XFxiL2k7XG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMgPSBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUztcbi8vIE9uZSBodW5kcmVkIDM2LXNlY29uZCBjaGVja3MgcHJlc2VydmVzIHRoZSBtYXhpbXVtIG9uZS1ob3VyIENJIHdhaXQgYnVkZ2V0LlxuZXhwb3J0IGNvbnN0IFRFU1RfQ0hFQ0tfV0FJVF9NQVhfQVRURU1QVFMgPSAxMDA7XG5jb25zdCBURVNUX0NIRUNLX1dBSVRfTUVTU0FHRSA9ICdXYWl0aW5nIGZvciB0ZXN0LXJlbGF0ZWQgd29ya2Zsb3dzIHRvIGZpbmlzaC4nO1xuZXhwb3J0IGNvbnN0IFpFUk9fVElNRVNUQU1QID0gJzAwMDEtMDEtMDFUMDA6MDA6MDBaJztcbmV4cG9ydCBjb25zdCBXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMgPSBbXG4gICdhdHRlbXB0JyxcbiAgJ2NvbmNsdXNpb24nLFxuICAnY3JlYXRlZEF0JyxcbiAgJ2RhdGFiYXNlSWQnLFxuICAnZGlzcGxheVRpdGxlJyxcbiAgJ2V2ZW50JyxcbiAgJ2hlYWRCcmFuY2gnLFxuICAnaGVhZFNoYScsXG4gICdqb2JzJyxcbiAgJ25hbWUnLFxuICAnbnVtYmVyJyxcbiAgJ3N0YXJ0ZWRBdCcsXG4gICdzdGF0dXMnLFxuICAndXBkYXRlZEF0JyxcbiAgJ3VybCcsXG4gICd3b3JrZmxvd05hbWUnLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IGludGVyZmFjZSBDaGVjayB7XG4gIGJ1Y2tldD86IHN0cmluZztcbiAgY29tcGxldGVkQXQ/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBldmVudD86IHN0cmluZztcbiAgbGluaz86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgc3RhcnRlZEF0Pzogc3RyaW5nO1xuICBzdGF0ZT86IHN0cmluZztcbiAgd29ya2Zsb3c/OiBzdHJpbmc7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2lSZXN1bHRzIHtcbiAgc3VtbWFyeToge1xuICAgIHRvdGFsOiBudW1iZXI7XG4gICAgcGFzczogbnVtYmVyO1xuICAgIGZhaWw6IG51bWJlcjtcbiAgICBwZW5kaW5nOiBudW1iZXI7XG4gICAgc2tpcHBpbmc6IG51bWJlcjtcbiAgICBjYW5jZWw6IG51bWJlcjtcbiAgfTtcbiAgY2hlY2tzOiBDaGVja1tdO1xufVxuXG5leHBvcnQgdHlwZSBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uID0gJ2ZhaWxlZCcgfCAncnVubmluZycgfCAnc3VjY2Vzc2Z1bCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0IHtcbiAgY2xhc3NpZmljYXRpb246IFdvcmtmbG93Q2xhc3NpZmljYXRpb247XG4gIGNoZWNrOiBDaGVjaztcbiAgY2hlY2tzOiBDaGVja1tdO1xufVxuXG5pbnRlcmZhY2UgQ29tcGFjdFdvcmtmbG93UnVuIHtcbiAgYnJhbmNoPzogc3RyaW5nO1xuICBjb25jbHVzaW9uPzogc3RyaW5nO1xuICBmYWlsZWRfc3RlcD86IHN0cmluZztcbiAgam9iPzogc3RyaW5nO1xuICBqb2JfdXJsPzogc3RyaW5nO1xuICBydW5faWQ/OiBzdHJpbmc7XG4gIHJ1bl91cmw/OiBzdHJpbmc7XG4gIHNoYT86IHN0cmluZztcbiAgd29ya2Zsb3c/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBXb3JrZmxvd1J1blN0ZXAge1xuICBjb25jbHVzaW9uPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBudW1iZXI/OiBudW1iZXI7XG4gIHN0YXR1cz86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFdvcmtmbG93UnVuSm9iIHtcbiAgY29uY2x1c2lvbj86IHN0cmluZztcbiAgZGF0YWJhc2VJZD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgc3RhdHVzPzogc3RyaW5nO1xuICBzdGVwcz86IFdvcmtmbG93UnVuU3RlcFtdO1xuICB1cmw/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBXb3JrZmxvd1J1bkRldGFpbHMge1xuICBjb25jbHVzaW9uPzogc3RyaW5nO1xuICBoZWFkQnJhbmNoPzogc3RyaW5nO1xuICBoZWFkU2hhPzogc3RyaW5nO1xuICBqb2JzPzogV29ya2Zsb3dSdW5Kb2JbXTtcbiAgdXJsPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUHJDb21taXROb2RlIHtcbiAgY29tbWl0Pzoge1xuICAgIGNvbW1pdHRlZERhdGU/OiBzdHJpbmc7XG4gICAgYWJicmV2aWF0ZWRPaWQ/OiBzdHJpbmc7XG4gICAgbWVzc2FnZUhlYWRsaW5lPzogc3RyaW5nO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgUHJDb21taXRzUmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIHB1bGxSZXF1ZXN0Pzoge1xuICAgICAgICBjb21taXRzPzoge1xuICAgICAgICAgIG5vZGVzPzogUHJDb21taXROb2RlW107XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF0ZXN0Q29tbWl0U3VtbWFyeSB7XG4gIGRhdGU6IHN0cmluZztcbiAgaGFzaDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xufVxuXG5jb25zdCBGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4gPSAvXi4qP1xcdFVOS05PV04gU1RFUFxcdFxcZHs0fS1cXGR7Mn0tXFxkezJ9VFteWl0rWlxccyovO1xuY29uc3QgcnRrQXZhaWxhYmxlID0gY29tbWFuZEF2YWlsYWJsZSgncnRrJyk7XG5jb25zdCBub29wID0gKCk6IHZvaWQgPT4ge307XG5jb25zdCBQUl9DT01NSVRTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIGNvbW1pdHMobGFzdDogMykge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGNvbW1pdCB7XG4gICAgICAgICAgICAgIGNvbW1pdHRlZERhdGVcbiAgICAgICAgICAgICAgYWJicmV2aWF0ZWRPaWRcbiAgICAgICAgICAgICAgbWVzc2FnZUhlYWRsaW5lXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGF0ZXN0UHJDaVJlc3VsdHMocHJOdW1iZXI/OiBzdHJpbmcpOiBQcm9taXNlPENpUmVzdWx0cz4ge1xuICBjb25zdCBhcmdzID0gWydwcicsICdjaGVja3MnXTtcbiAgaWYgKHByTnVtYmVyKSB7XG4gICAgYXJncy5wdXNoKHByTnVtYmVyKTtcbiAgfVxuICBhcmdzLnB1c2goJy0tanNvbicsICdidWNrZXQsY29tcGxldGVkQXQsZGVzY3JpcHRpb24sZXZlbnQsbGluayxuYW1lLHN0YXJ0ZWRBdCxzdGF0ZSx3b3JrZmxvdycpO1xuXG4gIGxldCBjaGVja3M6IENoZWNrW10gPSBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKGFyZ3MsIFs4XSk7XG4gICAgY2hlY2tzID0gcmF3LnRyaW0oKS5sZW5ndGggPiAwID8gKEpTT04ucGFyc2UocmF3KSBhcyBDaGVja1tdKSA6IFtdO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBjaGVja3MgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3VtbWFyeTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICBmb3IgKGNvbnN0IGNoZWNrIG9mIGNoZWNrcykge1xuICAgIGNvbnN0IGJ1Y2tldCA9IGNoZWNrLmJ1Y2tldCA/PyAnJztcbiAgICBzdW1tYXJ5W2J1Y2tldF0gPSAoc3VtbWFyeVtidWNrZXRdID8/IDApICsgMTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3VtbWFyeToge1xuICAgICAgdG90YWw6IGNoZWNrcy5sZW5ndGgsXG4gICAgICBwYXNzOiBzdW1tYXJ5LnBhc3MgPz8gMCxcbiAgICAgIGZhaWw6IHN1bW1hcnkuZmFpbCA/PyAwLFxuICAgICAgcGVuZGluZzogc3VtbWFyeS5wZW5kaW5nID8/IDAsXG4gICAgICBza2lwcGluZzogc3VtbWFyeS5za2lwcGluZyA/PyAwLFxuICAgICAgY2FuY2VsOiBzdW1tYXJ5LmNhbmNlbCA/PyAwLFxuICAgIH0sXG4gICAgY2hlY2tzLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyhcbiAgcHJOdW1iZXI6IHN0cmluZyxcbiAgc2xlZXBGbjogKHNlY29uZHM6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiA9IHNsZWVwU2Vjb25kcyxcbiAgbGF0ZXN0Q2lSZXN1bHRzRm46IChwck51bWJlcj86IHN0cmluZykgPT4gQ2lSZXN1bHRzIHwgUHJvbWlzZTxDaVJlc3VsdHM+ID0gbGF0ZXN0UHJDaVJlc3VsdHMsXG4gIHdyaXRlUHJvZ3Jlc3NGbjogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCA9IChtZXNzYWdlKSA9PiBwcm9jZXNzU3RkZXJyLndyaXRlKG1lc3NhZ2UpXG4pOiBQcm9taXNlPFtDaVJlc3VsdHMsIG51bWJlciwgYm9vbGVhbl0+IHtcbiAgbGV0IGF0dGVtcHRzID0gMDtcbiAgbGV0IGNpUmVzdWx0cyA9IGF3YWl0IGxhdGVzdENpUmVzdWx0c0ZuKHByTnVtYmVyKTtcbiAgbGV0IHN0b3BXYWl0UHJvZ3Jlc3MgPSBub29wO1xuXG4gIHRyeSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgY29uc3QgY2xhc3NpZmllZFJlc3VsdHMgPSBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHMpO1xuICAgICAgY29uc3QgW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXSA9IGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChjbGFzc2lmaWVkUmVzdWx0cyk7XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwIHx8IE9iamVjdC5rZXlzKHJ1bm5pbmdSZXN1bHRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFtjaVJlc3VsdHMsIGF0dGVtcHRzLCBmYWxzZV07XG4gICAgICB9XG4gICAgICBpZiAoYXR0ZW1wdHMgPj0gVEVTVF9DSEVDS19XQUlUX01BWF9BVFRFTVBUUykge1xuICAgICAgICByZXR1cm4gW2NpUmVzdWx0cywgYXR0ZW1wdHMsIHRydWVdO1xuICAgICAgfVxuXG4gICAgICBhdHRlbXB0cyArPSAxO1xuICAgICAgaWYgKGF0dGVtcHRzID09PSAxKSB7XG4gICAgICAgIHN0b3BXYWl0UHJvZ3Jlc3MgPSBjcmVhdGVXYWl0UHJvZ3Jlc3MoXG4gICAgICAgICAgVEVTVF9DSEVDS19XQUlUX01FU1NBR0UsXG4gICAgICAgICAgVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMsXG4gICAgICAgICAgd3JpdGVQcm9ncmVzc0ZuXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBhd2FpdCBzbGVlcEZuKFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTKTtcbiAgICAgIGNpUmVzdWx0cyA9IGF3YWl0IGxhdGVzdENpUmVzdWx0c0ZuKHByTnVtYmVyKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHM6IENpUmVzdWx0cyk6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4ge1xuICBjb25zdCBsYXRlc3RSZXN1bHRzQnlXb3JrZmxvdzogUmVjb3JkPHN0cmluZywgQ2hlY2tbXT4gPSB7fTtcbiAgZm9yIChjb25zdCBjaGVjayBvZiBjaVJlc3VsdHMuY2hlY2tzKSB7XG4gICAgY29uc3Qgd29ya2Zsb3dLZXkgPSBjaGVjay53b3JrZmxvdyB8fCBjaGVjay5uYW1lIHx8ICd1bmtub3duX3dvcmtmbG93JztcbiAgICBsYXRlc3RSZXN1bHRzQnlXb3JrZmxvd1t3b3JrZmxvd0tleV0gPz89IFtdO1xuICAgIGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93W3dvcmtmbG93S2V5XS5wdXNoKGNoZWNrKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMobGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3cpLm1hcCgoW3dvcmtmbG93S2V5LCBjaGVja3NdKSA9PiB7XG4gICAgICBjb25zdCBsYXRlc3RBdHRlbXB0Q2hlY2tzID0gbGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3coY2hlY2tzKTtcbiAgICAgIGNvbnN0IGZpcnN0Q2hlY2sgPSBsYXRlc3RBdHRlbXB0Q2hlY2tzWzBdO1xuICAgICAgaWYgKCFmaXJzdENoZWNrKSB7XG4gICAgICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBubyBjaGVja3MgZm91bmQgZm9yIHdvcmtmbG93ICR7d29ya2Zsb3dLZXl9YCk7XG4gICAgICB9XG4gICAgICBsZXQgbGF0ZXN0Q2hlY2sgPSBmaXJzdENoZWNrO1xuICAgICAgZm9yIChjb25zdCBjaGVjayBvZiBsYXRlc3RBdHRlbXB0Q2hlY2tzKSB7XG4gICAgICAgIGlmIChsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjaykgPiBsYXRlc3RDaGVja1RpbWVzdGFtcChsYXRlc3RDaGVjaykpIHtcbiAgICAgICAgICBsYXRlc3RDaGVjayA9IGNoZWNrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIHdvcmtmbG93S2V5LFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NpZmljYXRpb246IHdvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24obGF0ZXN0QXR0ZW1wdENoZWNrcyksXG4gICAgICAgICAgY2hlY2s6IGxhdGVzdENoZWNrLFxuICAgICAgICAgIGNoZWNrczogbGF0ZXN0QXR0ZW1wdENoZWNrcyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChcbiAgY2xhc3NpZmllZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD5cbik6IFtSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+LCBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+XSB7XG4gIGNvbnN0IGZhaWxlZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4gPSB7fTtcbiAgY29uc3QgcnVubmluZ1Jlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4gPSB7fTtcblxuICBmb3IgKGNvbnN0IFt3b3JrZmxvd0tleSwgcmVzdWx0XSBvZiBPYmplY3QuZW50cmllcyhjbGFzc2lmaWVkUmVzdWx0cykpIHtcbiAgICBpZiAocmVzdWx0LmNsYXNzaWZpY2F0aW9uID09PSAnZmFpbGVkJykge1xuICAgICAgZmFpbGVkUmVzdWx0c1t3b3JrZmxvd0tleV0gPSByZXN1bHQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5jbGFzc2lmaWNhdGlvbiA9PT0gJ3J1bm5pbmcnICYmIHJlc3VsdC5jaGVja3Muc29tZSgoY2hlY2spID0+IHRlc3RSZWxhdGVkQ2hlY2soY2hlY2spKSkge1xuICAgICAgcnVubmluZ1Jlc3VsdHNbd29ya2Zsb3dLZXldID0gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2s6IENoZWNrIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbGluayA9IGNoZWNrPy5saW5rO1xuICBpZiAoIWxpbmspIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBsaW5rLm1hdGNoKC9cXC9hY3Rpb25zXFwvcnVuc1xcLyhcXGQrKS8pPy5bMV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3b3JrZmxvd1J1bihydW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZD4ge1xuICBpZiAoIXJ1bklkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHJ1bkpzb24gPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncnVuJywgJ3ZpZXcnLCBydW5JZCwgJy0tanNvbicsIFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUy5qb2luKCcsJyldLCBbMV0pO1xuICBpZiAocnVuSnNvbi50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UocnVuSnNvbikgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgIHByb2Nlc3NTdGRlcnIud3JpdGUoYFdhcm5pbmc6IENvdWxkIG5vdCBwYXJzZSBKU09OIGZvciB3b3JrZmxvdyBydW4gJHtydW5JZH06ICR7ZXJyb3IubWVzc2FnZX1cXG5gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyhjaGVja3M6IENoZWNrW10pOiBDaGVja1tdIHtcbiAgY29uc3QgZ3JvdXBzID0gbmV3IE1hcDxzdHJpbmcsIENoZWNrW10+KCk7XG4gIGZvciAoY29uc3QgY2hlY2sgb2YgY2hlY2tzKSB7XG4gICAgY29uc3Qga2V5ID0gd29ya2Zsb3dBdHRlbXB0S2V5KGNoZWNrKTtcbiAgICBjb25zdCBncm91cCA9IGdyb3Vwcy5nZXQoa2V5KTtcbiAgICBpZiAoZ3JvdXApIHtcbiAgICAgIGdyb3VwLnB1c2goY2hlY2spO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGdyb3Vwcy5zZXQoa2V5LCBbY2hlY2tdKTtcbiAgfVxuXG4gIGxldCBsYXRlc3RHcm91cDogQ2hlY2tbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGN1cnJlbnRHcm91cCBvZiBncm91cHMudmFsdWVzKCkpIHtcbiAgICBpZiAobGF0ZXN0R3JvdXAubGVuZ3RoID09PSAwKSB7XG4gICAgICBsYXRlc3RHcm91cCA9IGN1cnJlbnRHcm91cDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChsYXRlc3RHcm91cFRpbWVzdGFtcChjdXJyZW50R3JvdXApID4gbGF0ZXN0R3JvdXBUaW1lc3RhbXAobGF0ZXN0R3JvdXApKSB7XG4gICAgICBsYXRlc3RHcm91cCA9IGN1cnJlbnRHcm91cDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxhdGVzdEdyb3VwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dBdHRlbXB0S2V5KGNoZWNrOiBDaGVjayk6IHN0cmluZyB7XG4gIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2spO1xuICByZXR1cm4gcnVuSWQgPyBgcnVuOiR7cnVuSWR9YCA6ICd1bmtub3duX3J1bic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd1Jlc3VsdENsYXNzaWZpY2F0aW9uKGNoZWNrczogQ2hlY2tbXSk6IFdvcmtmbG93Q2xhc3NpZmljYXRpb24ge1xuICBjb25zdCBidWNrZXRzID0gY2hlY2tzLm1hcCgoY2hlY2spID0+IGNoZWNrLmJ1Y2tldCA/PyAnJyk7XG4gIGlmIChidWNrZXRzLnNvbWUoKGJ1Y2tldCkgPT4gIVsncGFzcycsICdza2lwcGluZycsICdwZW5kaW5nJ10uaW5jbHVkZXMoYnVja2V0KSkpIHtcbiAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gIH1cbiAgaWYgKGJ1Y2tldHMuaW5jbHVkZXMoJ3BlbmRpbmcnKSkge1xuICAgIHJldHVybiAncnVubmluZyc7XG4gIH1cbiAgcmV0dXJuICdzdWNjZXNzZnVsJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrOiBDaGVjayk6IHN0cmluZyB7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IGNoZWNrLmNvbXBsZXRlZEF0O1xuICBpZiAoIXRpbWVzdGFtcCB8fCB0aW1lc3RhbXAgPT09IFpFUk9fVElNRVNUQU1QKSB7XG4gICAgcmV0dXJuIGNoZWNrLnN0YXJ0ZWRBdCA/PyAnJztcbiAgfVxuICByZXR1cm4gdGltZXN0YW1wO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVzdFJlbGF0ZWRDaGVjayhjaGVjazogQ2hlY2spOiBib29sZWFuIHtcbiAgcmV0dXJuIFtjaGVjay5uYW1lLCBjaGVjay53b3JrZmxvd10uc29tZSgodmFsdWUpID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgVEVTVF9SRUxBVEVEX1BBVFRFUk4udGVzdCh2YWx1ZSkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2xlZXBTZWNvbmRzKHNlY29uZHM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzbGVlcChzZWNvbmRzICogMTAwMCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja1ByQ2koKTogUHJvbWlzZTx7IG91dHB1dDogc3RyaW5nOyBleGl0Q29kZTogbnVtYmVyIH0+IHtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcbiAgY29uc3QgbGF0ZXN0Q29tbWl0cyA9IGF3YWl0IGxhdGVzdFByQ29tbWl0U3VtbWFyaWVzKHByTnVtYmVyKTtcblxuICBwcm9ncmVzcygnRmV0Y2hpbmcgbGF0ZXN0IENJIHJlc3VsdHMuLi4nKTtcbiAgY29uc3QgW2NpUmVzdWx0cywgd2FpdEF0dGVtcHRzLCB3YWl0VGltZWRPdXRdID0gYXdhaXQgd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyhwck51bWJlcik7XG4gIGNvbnN0IGNsYXNzaWZpZWRMYXRlc3QgPSBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHMpO1xuICBjb25zdCBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdID0gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKGNsYXNzaWZpZWRMYXRlc3QpO1xuXG4gIGNvbnN0IHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIHN1bW1hcnk6IGRlZXBDb3B5KGNpUmVzdWx0cy5zdW1tYXJ5KSxcbiAgICB3YWl0ZWRfZm9yX3Rlc3RfcmVsYXRlZF9jaGVja3M6IHdhaXRBdHRlbXB0cyA+IDAsXG4gICAgdGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfYXR0ZW1wdHM6IHdhaXRBdHRlbXB0cyxcbiAgICB0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF90aW1lZF9vdXQ6IHdhaXRUaW1lZE91dCxcbiAgICBsYXRlc3RDb21taXRzLFxuICB9O1xuXG4gIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwKSB7XG4gICAgcGF5bG9hZC5mYWlsZWRfd29ya2Zsb3dzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhmYWlsZWRSZXN1bHRzKS5tYXAoYXN5bmMgKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4ge1xuICAgICAgICBjb25zdCBjb21wYWN0V29ya2Zsb3cgPSBhd2FpdCBjb21wYWN0V29ya2Zsb3dSZXN1bHQod29ya2Zsb3dLZXksIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY29tcGFjdFdvcmtmbG93LFxuICAgICAgICAgIC4uLmJ1aWxkRmFpbGVkV29ya2Zsb3dEZXRhaWxzKGF3YWl0IGZhaWxlZFdvcmtmbG93TG9nKHJlc3VsdC5jaGVjaykpLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICBwYXlsb2FkLnRlc3Rfd29ya2Zsb3dfb3V0cHV0ID0gJ1RpbWVkIG91dCB3YWl0aW5nIGZvciB0ZXN0LXJlbGF0ZWQgd29ya2Zsb3dzIHRvIGZpbmlzaC4nO1xuICAgIHBheWxvYWQucnVubmluZ190ZXN0X3JlbGF0ZWRfd29ya2Zsb3dzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhydW5uaW5nUmVzdWx0cykubWFwKChbd29ya2Zsb3dLZXksIHJlc3VsdF0pID0+IGNvbXBhY3RXb3JrZmxvd1Jlc3VsdCh3b3JrZmxvd0tleSwgcmVzdWx0KSlcbiAgICApO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICByZXR1cm4geyBvdXRwdXQ6IHN1Y2Nlc3NmdWxDaU91dHB1dChsYXRlc3RDb21taXRzKSwgZXhpdENvZGU6IDAgfTtcbn1cblxuZnVuY3Rpb24gbGF0ZXN0R3JvdXBUaW1lc3RhbXAoY2hlY2tzOiBDaGVja1tdKTogc3RyaW5nIHtcbiAgbGV0IGxhdGVzdCA9ICcnO1xuICBmb3IgKGNvbnN0IGNoZWNrIG9mIGNoZWNrcykge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrKTtcbiAgICBpZiAodGltZXN0YW1wID4gbGF0ZXN0KSB7XG4gICAgICBsYXRlc3QgPSB0aW1lc3RhbXA7XG4gICAgfVxuICB9XG4gIHJldHVybiBsYXRlc3Q7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxhdGVzdFByQ29tbWl0U3VtbWFyaWVzKHByTnVtYmVyOiBzdHJpbmcpOiBQcm9taXNlPExhdGVzdENvbW1pdFN1bW1hcnlbXT4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdyYXBocWw8UHJDb21taXRzUmVzcG9uc2U+KFBSX0NPTU1JVFNfUVVFUlksIHtcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogTnVtYmVyKHByTnVtYmVyKSxcbiAgfSk7XG5cbiAgcmV0dXJuIChyZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8uY29tbWl0cz8ubm9kZXMgPz8gW10pXG4gICAgLmZsYXRNYXAoKG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IGRhdGUgPSBzdHJpbmdPclVuZGVmaW5lZChub2RlLmNvbW1pdD8uY29tbWl0dGVkRGF0ZSk7XG4gICAgICBjb25zdCBoYXNoID0gc3RyaW5nT3JVbmRlZmluZWQobm9kZS5jb21taXQ/LmFiYnJldmlhdGVkT2lkKTtcbiAgICAgIGNvbnN0IHRpdGxlID0gc3RyaW5nT3JVbmRlZmluZWQobm9kZS5jb21taXQ/Lm1lc3NhZ2VIZWFkbGluZSk7XG4gICAgICByZXR1cm4gZGF0ZSAmJiBoYXNoICYmIHRpdGxlID8gW3sgZGF0ZSwgaGFzaCwgdGl0bGUgfV0gOiBbXTtcbiAgICB9KVxuICAgIC50b1JldmVyc2VkKCk7XG59XG5cbmZ1bmN0aW9uIHN1Y2Nlc3NmdWxDaU91dHB1dChsYXRlc3RDb21taXRzOiBMYXRlc3RDb21taXRTdW1tYXJ5W10pOiBzdHJpbmcge1xuICByZXR1cm4gYEFsbCBDSSB3b3JrZmxvd3MgcGFzc2VkLlxuJHtmb3JtYXRMYXRlc3RDb21taXRTZWN0aW9uKGxhdGVzdENvbW1pdHMpfWA7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExhdGVzdENvbW1pdFNlY3Rpb24obGF0ZXN0Q29tbWl0czogTGF0ZXN0Q29tbWl0U3VtbWFyeVtdKTogc3RyaW5nIHtcbiAgaWYgKGxhdGVzdENvbW1pdHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICdMYXRlc3QgY29tbWl0czogdW5hdmFpbGFibGUuXFxuJztcbiAgfVxuXG4gIHJldHVybiB5YW1sRHVtcCh7IGxhdGVzdENvbW1pdHMgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbXBhY3RXb3JrZmxvd1Jlc3VsdChcbiAgd29ya2Zsb3dLZXk6IHN0cmluZyxcbiAgcmVzdWx0OiBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHRcbik6IFByb21pc2U8eyBjbGFzc2lmaWNhdGlvbjogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbiB9ICYgQ29tcGFjdFdvcmtmbG93UnVuPiB7XG4gIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsocmVzdWx0LmNoZWNrKTtcbiAgY29uc3QgcnVuID0gKGF3YWl0IHdvcmtmbG93UnVuKHJ1bklkKSkgYXMgV29ya2Zsb3dSdW5EZXRhaWxzIHwgdW5kZWZpbmVkO1xuICBjb25zdCBmYWlsZWRKb2IgPSBmYWlsZWRXb3JrZmxvd1J1bkpvYihydW4sIHN0cmluZ09yVW5kZWZpbmVkKHJlc3VsdC5jaGVjay5uYW1lKSk7XG4gIHJldHVybiB7XG4gICAgY2xhc3NpZmljYXRpb246IHJlc3VsdC5jbGFzc2lmaWNhdGlvbixcbiAgICB3b3JrZmxvdzogd29ya2Zsb3dLZXksXG4gICAgam9iOiBzdHJpbmdPclVuZGVmaW5lZChyZXN1bHQuY2hlY2submFtZSksXG4gICAgam9iX3VybDogc3RyaW5nT3JVbmRlZmluZWQoZmFpbGVkSm9iPy51cmwpLFxuICAgIGZhaWxlZF9zdGVwOiBmYWlsZWRXb3JrZmxvd1J1blN0ZXBOYW1lKGZhaWxlZEpvYiksXG4gICAgcnVuX2lkOiBydW5JZCxcbiAgICBydW5fdXJsOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LnVybCkgPz8gc3RyaW5nT3JVbmRlZmluZWQocmVzdWx0LmNoZWNrLmxpbmspLFxuICAgIGJyYW5jaDogc3RyaW5nT3JVbmRlZmluZWQocnVuPy5oZWFkQnJhbmNoKSxcbiAgICBzaGE6IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8uaGVhZFNoYSksXG4gICAgY29uY2x1c2lvbjogc3RyaW5nT3JVbmRlZmluZWQocnVuPy5jb25jbHVzaW9uKSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmFpbGVkV29ya2Zsb3dMb2coY2hlY2s6IENoZWNrKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjayk7XG4gIGlmICghcnVuSWQpIHtcbiAgICByZXR1cm4gJ0ZhaWxlZCBsYXRlc3QgcmVzdWx0IGhhcyBubyBHaXRIdWIgQWN0aW9ucyBydW4gbGluay4nO1xuICB9XG4gIHJldHVybiBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncnVuJywgJ3ZpZXcnLCBydW5JZCwgJy0tbG9nLWZhaWxlZCddLCBbMV0pO1xufVxuXG5mdW5jdGlvbiBidWlsZEZhaWxlZFdvcmtmbG93RGV0YWlscyhsb2c6IHN0cmluZyk6IHtcbiAgZmFpbGVkX2xvZzogc3RyaW5nO1xufSB7XG4gIHJldHVybiB7XG4gICAgZmFpbGVkX2xvZzogcmVmaW5lRmFpbGVkV29ya2Zsb3dMb2cobG9nKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVmaW5lRmFpbGVkV29ya2Zsb3dMb2cobG9nOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzYW5pdGl6ZWRJbnB1dCA9IHNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2coc3RyaXBWVENvbnRyb2xDaGFyYWN0ZXJzKGxvZykpO1xuICBpZiAoIXJ0a0F2YWlsYWJsZSkge1xuICAgIHJldHVybiBzYW5pdGl6ZWRJbnB1dDtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHNwYXduU3luY1NhZmUoWydydGsnLCAnbG9nJ10sIHNhbml0aXplZElucHV0KTtcbiAgcmV0dXJuIHJlc3VsdC5leGl0Q29kZSA9PT0gMCAmJiByZXN1bHQub3V0cHV0LnRyaW0oKS5sZW5ndGggPiAwXG4gICAgPyBzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nKHJlc3VsdC5vdXRwdXQpXG4gICAgOiBzYW5pdGl6ZWRJbnB1dDtcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyhsb2c6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBsb2dcbiAgICAuc3BsaXQoJ1xcbicpXG4gICAgLm1hcCgobGluZSkgPT4gbGluZS5yZXBsYWNlKEZBSUxFRF9MT0dfTElORV9QUkVGSVhfUEFUVEVSTiwgJycpKVxuICAgIC5qb2luKCdcXG4nKVxuICAgIC50cmltKCk7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ09yVW5kZWZpbmVkKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gMCA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBmYWlsZWRXb3JrZmxvd1J1bkpvYihcbiAgcnVuOiBXb3JrZmxvd1J1bkRldGFpbHMgfCB1bmRlZmluZWQsXG4gIGpvYk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogV29ya2Zsb3dSdW5Kb2IgfCB1bmRlZmluZWQge1xuICBpZiAoIXJ1bj8uam9icyB8fCBydW4uam9icy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBydW4uam9icy5maW5kKChqb2IpID0+IGpvYi5uYW1lID09PSBqb2JOYW1lKSA/P1xuICAgIHJ1bi5qb2JzLmZpbmQoKGpvYikgPT4gam9iLmNvbmNsdXNpb24gPT09ICdmYWlsdXJlJykgPz9cbiAgICBydW4uam9icy5maW5kKChqb2IpID0+IGpvYi5zdGF0dXMgIT09ICdjb21wbGV0ZWQnKVxuICApO1xufVxuXG5mdW5jdGlvbiBmYWlsZWRXb3JrZmxvd1J1blN0ZXBOYW1lKGpvYjogV29ya2Zsb3dSdW5Kb2IgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWpvYj8uc3RlcHMgfHwgam9iLnN0ZXBzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGpvYi5zdGVwcy5maW5kKChzdGVwKSA9PiBzdGVwLmNvbmNsdXNpb24gPT09ICdmYWlsdXJlJyk/Lm5hbWUgPz9cbiAgICBqb2Iuc3RlcHMuZmluZCgoc3RlcCkgPT4gc3RlcC5zdGF0dXMgIT09ICdjb21wbGV0ZWQnKT8ubmFtZVxuICApO1xufVxuIiwiaW1wb3J0IHsgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50QmFzZUJyYW5jaCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gKGF3YWl0IGN1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2goKSkgPz8gKGF3YWl0IGN1cnJlbnREZWZhdWx0QnJhbmNoKCkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudERlZmF1bHRCcmFuY2goKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZGVmYXVsdEJyYW5jaCA9IGF3YWl0IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoW1xuICAgICdnaCcsXG4gICAgJ3JlcG8nLFxuICAgICd2aWV3JyxcbiAgICAnLS1qc29uJyxcbiAgICAnZGVmYXVsdEJyYW5jaFJlZicsXG4gICAgJy0tdGVtcGxhdGUnLFxuICAgICd7ey5kZWZhdWx0QnJhbmNoUmVmLm5hbWV9fScsXG4gIF0pO1xuICByZXR1cm4gcmVxdWlyZU5vbkVtcHR5KGRlZmF1bHRCcmFuY2gudHJpbSgpLCAnRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgYnJhbmNoJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2goKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBiYXNlQnJhbmNoT3V0cHV0ID0gYXdhaXQgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyhbXG4gICAgICAnZ2gnLFxuICAgICAgJ3ByJyxcbiAgICAgICd2aWV3JyxcbiAgICAgICctLWpzb24nLFxuICAgICAgJ2Jhc2VSZWZOYW1lJyxcbiAgICAgICctLXRlbXBsYXRlJyxcbiAgICAgICd7ey5iYXNlUmVmTmFtZX19JyxcbiAgICBdKTtcbiAgICBjb25zdCBiYXNlQnJhbmNoID0gYmFzZUJyYW5jaE91dHB1dC50cmltKCk7XG4gICAgcmV0dXJuIGJhc2VCcmFuY2gubGVuZ3RoID4gMCA/IGJhc2VCcmFuY2ggOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyhlcnJvcikpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0N1cnJlbnRQdWxsUmVxdWVzdE1pc3NpbmcoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIC9ubyBwdWxsIHJlcXVlc3RzPyBmb3VuZCBmb3IgYnJhbmNoL2kudGVzdChTdHJpbmcoZXJyb3IpKTtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZU5vbkVtcHR5KHZhbHVlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbiIsImltcG9ydCB7IGlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyB9IGZyb20gJy4uL3JlcG8vZGVmYXVsdEJyYW5jaC5qcyc7XG5pbXBvcnQge1xuICBjdXJyZW50UHJOdW1iZXIsXG4gIGN1cnJlbnRSZXBvUGFydHMsXG4gIGV4aXRXaXRoRXJyb3IsXG4gIGdoQWxsb3dFeGl0Q29kZXMsXG4gIGdyYXBocWwsXG4gIHR5cGUgSnNvbk9iamVjdCxcbiAgdHlwZSBNZXNzYWdlLFxuICB0eXBlIE1lc3NhZ2VDb25uZWN0aW9uLFxuICB0eXBlIE1ldGFkYXRhTm9kZSxcbiAgcHJvZ3Jlc3MsXG4gIHlhbWxEdW1wLFxufSBmcm9tICcuL3NoYXJlZC5qcyc7XG5cbmludGVyZmFjZSBJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbDtcbn1cblxuaW50ZXJmYWNlIFByUmV2aWV3Tm9kZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGJvZHk/OiBzdHJpbmcgfCBudWxsO1xuICBzdGF0ZT86IHN0cmluZyB8IG51bGw7XG4gIHN1Ym1pdHRlZEF0Pzogc3RyaW5nIHwgbnVsbDtcbiAgdXJsOiBzdHJpbmc7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xufVxuXG5pbnRlcmZhY2UgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlIGV4dGVuZHMgSnNvbk9iamVjdCB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIHB1bGxSZXF1ZXN0Pzoge1xuICAgICAgICBjb21tZW50cz86IE1lc3NhZ2VDb25uZWN0aW9uPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlPjtcbiAgICAgICAgcmV2aWV3cz86IE1lc3NhZ2VDb25uZWN0aW9uPFByUmV2aWV3Tm9kZT47XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59XG5cbmludGVyZmFjZSBJc3N1ZU1lc3NhZ2VzUmVzcG9uc2UgZXh0ZW5kcyBKc29uT2JqZWN0IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgaXNzdWU/OiB7XG4gICAgICAgIGNvbW1lbnRzPzogTWVzc2FnZUNvbm5lY3Rpb248SXNzdWVNZXNzYWdlQ29tbWVudE5vZGU+O1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufVxuXG5pbnRlcmZhY2UgUHVsbFJlcXVlc3RNZXRhZGF0YVJlc3BvbnNlIGV4dGVuZHMgSnNvbk9iamVjdCB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIHB1bGxSZXF1ZXN0PzogTWV0YWRhdGFOb2RlO1xuICAgIH07XG4gIH07XG59XG5cbmludGVyZmFjZSBJc3N1ZU1ldGFkYXRhUmVzcG9uc2UgZXh0ZW5kcyBKc29uT2JqZWN0IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgaXNzdWU/OiBNZXRhZGF0YU5vZGU7XG4gICAgfTtcbiAgfTtcbn1cblxuY29uc3QgSVNTVUVfTUVTU0FHRVNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIGlzc3VlKG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBJU1NVRV9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISkge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIGlzc3VlKG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBudW1iZXJcbiAgICAgICAgdGl0bGVcbiAgICAgICAgdXJsXG4gICAgICAgIGJvZHlcbiAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUFJfQ09NTUVOVFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBQUl9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISkge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBudW1iZXJcbiAgICAgICAgdGl0bGVcbiAgICAgICAgdXJsXG4gICAgICAgIGJvZHlcbiAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUFJfUkVWSUVXU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIHJldmlld3MoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgIHN1Ym1pdHRlZEF0XG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUlzc3VlTnVtYmVyKHJlZmVyZW5jZTogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIocmVmZXJlbmNlLCAnaXNzdWUnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVByTnVtYmVyKHJlZmVyZW5jZTogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIocmVmZXJlbmNlLCAncHVsbCByZXF1ZXN0Jyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaElzc3VlTWVzc2FnZXMoaXNzdWVOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IGlzc3VlID0gYXdhaXQgaXNzdWVNZXNzYWdlcyhvd25lciwgbmFtZSwgbm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVOdW1iZXIpKTtcbiAgcHJvZ3Jlc3MoYEZldGNoZWQgaXNzdWUgIyR7aXNzdWUubnVtYmVyfSBtZXNzYWdlcy5gKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgaXNzdWUgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFByTWVzc2FnZXMocHJOdW1iZXI/OiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNvbHZlZFByTnVtYmVyID0gcHJOdW1iZXIgPT09IHVuZGVmaW5lZCA/IGF3YWl0IGN1cnJlbnRQck51bWJlcigpIDogbm9ybWFsaXplUHJOdW1iZXIocHJOdW1iZXIpO1xuICBjb25zdCBwdWxsUmVxdWVzdCA9IGF3YWl0IGN1cnJlbnRSZXBvUHVsbFJlcXVlc3RNZXNzYWdlcyhyZXNvbHZlZFByTnVtYmVyKTtcbiAgcHJvZ3Jlc3MoYEZldGNoZWQgcHVsbCByZXF1ZXN0ICMke3B1bGxSZXF1ZXN0Lm51bWJlcn0gbWVzc2FnZXMuYCk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHB1bGxfcmVxdWVzdDogcHVsbFJlcXVlc3QgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUoKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgcHJOdW1iZXJPdXRwdXQgPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncHInLCAndmlldycsICctLWpzb24nLCAnbnVtYmVyJywgJy0tanEnLCAnLm51bWJlciddLCBbMV0pO1xuICBjb25zdCBwck51bWJlciA9IHByTnVtYmVyT3V0cHV0LnRyaW0oKTtcbiAgaWYgKGlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyhwck51bWJlck91dHB1dCkgfHwgIS9eXFxkKyQvLnRlc3QocHJOdW1iZXIpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzKHByTnVtYmVyKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgcHVsbF9yZXF1ZXN0OiBwdWxsUmVxdWVzdCB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzKHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgcmV0dXJuIGF3YWl0IHByTWVzc2FnZXMob3duZXIsIG5hbWUsIHByTnVtYmVyKTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlcihyZWZlcmVuY2U6IHN0cmluZyB8IG51bWJlciwgbGFiZWw6ICdpc3N1ZScgfCAncHVsbCByZXF1ZXN0Jyk6IHN0cmluZyB7XG4gIGNvbnN0IHJlZmVyZW5jZVRleHQgPSBTdHJpbmcocmVmZXJlbmNlKS50cmltKCk7XG4gIGlmIChyZWZlcmVuY2VUZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiAke2xhYmVsfSByZWZlcmVuY2UgaXMgcmVxdWlyZWRgLCAyKTtcbiAgfVxuXG4gIGlmICgvXlxcZCskLy50ZXN0KHJlZmVyZW5jZVRleHQpKSB7XG4gICAgcmV0dXJuIHJlZmVyZW5jZVRleHQ7XG4gIH1cblxuICBjb25zdCBraW5kU2VnbWVudCA9IGxhYmVsID09PSAnaXNzdWUnID8gJ2lzc3VlcycgOiAncHVsbCc7XG4gIGNvbnN0IG1hdGNoID0gcmVmZXJlbmNlVGV4dC5tYXRjaChcbiAgICBuZXcgUmVnRXhwKGBeaHR0cHM/Oi8vKD86d3d3XFxcXC4pP2dpdGh1YlxcXFwuY29tL1teL10rL1teL10rLyR7a2luZFNlZ21lbnR9LyhcXFxcZCspKD86L3wkKWApXG4gICk7XG4gIGlmIChtYXRjaD8uWzFdKSB7XG4gICAgcmV0dXJuIG1hdGNoWzFdO1xuICB9XG5cbiAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IGV4cGVjdGVkIGEgR2l0SHViICR7bGFiZWx9IG51bWJlciBvciBVUkwsIHJlY2VpdmVkIFwiJHtyZWZlcmVuY2VUZXh0fVwiYCwgMik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGlzc3VlTWVzc2FnZXMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBpc3N1ZU51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IGlzc3VlID0gYXdhaXQgZmV0Y2hNZXRhZGF0YTxJc3N1ZU1ldGFkYXRhUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogSVNTVUVfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IGlzc3VlTnVtYmVyLFxuICAgIG5vdW46ICdpc3N1ZScsXG4gICAgc2VsZWN0TWV0YWRhdGE6IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8uaXNzdWUsXG4gIH0pO1xuICBjb25zdCBtZXNzYWdlcyA9IGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8SXNzdWVNZXNzYWdlQ29tbWVudE5vZGUsIElzc3VlTWVzc2FnZXNSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBJU1NVRV9NRVNTQUdFU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogaXNzdWVOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5pc3N1ZT8uY29tbWVudHMsXG4gICAgbWFwTm9kZTogY29tbWVudE1lc3NhZ2UsXG4gIH0pO1xuXG4gIHJldHVybiB7IC4uLmlzc3VlLCBtZXNzYWdlcyB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBwck1lc3NhZ2VzKG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBwdWxsUmVxdWVzdCA9IGF3YWl0IGZldGNoTWV0YWRhdGE8UHVsbFJlcXVlc3RNZXRhZGF0YVJlc3BvbnNlPih7XG4gICAgcXVlcnk6IFBSX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBwck51bWJlcixcbiAgICBub3VuOiAncHVsbCByZXF1ZXN0JyxcbiAgICBzZWxlY3RNZXRhZGF0YTogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdCxcbiAgfSk7XG4gIGNvbnN0IFtpc3N1ZUNvbW1lbnRzLCByZXZpZXdzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBwcklzc3VlQ29tbWVudHMob3duZXIsIG5hbWUsIHByTnVtYmVyKSxcbiAgICBwclJldmlld3Mob3duZXIsIG5hbWUsIHByTnVtYmVyKSxcbiAgXSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5wdWxsUmVxdWVzdCxcbiAgICBtZXNzYWdlczogWy4uLmlzc3VlQ29tbWVudHMsIC4uLnJldmlld3NdLnRvU29ydGVkKGNvbXBhcmVNZXNzYWdlc0J5Q3JlYXRlZEF0KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZU1lc3NhZ2VzQnlDcmVhdGVkQXQobGVmdDogTWVzc2FnZSwgcmlnaHQ6IE1lc3NhZ2UpOiBudW1iZXIge1xuICBjb25zdCBsZWZ0Q3JlYXRlZEF0ID0gdHlwZW9mIGxlZnQuY3JlYXRlZEF0ID09PSAnc3RyaW5nJyA/IGxlZnQuY3JlYXRlZEF0IDogJyc7XG4gIGNvbnN0IHJpZ2h0Q3JlYXRlZEF0ID0gdHlwZW9mIHJpZ2h0LmNyZWF0ZWRBdCA9PT0gJ3N0cmluZycgPyByaWdodC5jcmVhdGVkQXQgOiAnJztcbiAgcmV0dXJuIGxlZnRDcmVhdGVkQXQubG9jYWxlQ29tcGFyZShyaWdodENyZWF0ZWRBdCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBySXNzdWVDb21tZW50cyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICByZXR1cm4gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSwgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IFBSX0NPTU1FTlRTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBwck51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0Py5jb21tZW50cyxcbiAgICBtYXBOb2RlOiBjb21tZW50TWVzc2FnZSxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByUmV2aWV3cyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICByZXR1cm4gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxQclJldmlld05vZGUsIFB1bGxSZXF1ZXN0TWVzc2FnZXNSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBQUl9SRVZJRVdTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBwck51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0Py5yZXZpZXdzLFxuICAgIG1hcE5vZGU6IHJldmlld01lc3NhZ2UsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYWdpbmF0ZU1lc3NhZ2VzPFROb2RlLCBUUmVzcG9uc2UgZXh0ZW5kcyBKc29uT2JqZWN0Pihjb25maWc6IHtcbiAgcXVlcnk6IHN0cmluZztcbiAgb3duZXI6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBudW1iZXI6IHN0cmluZyB8IG51bWJlcjtcbiAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlOiBUUmVzcG9uc2UpID0+IE1lc3NhZ2VDb25uZWN0aW9uPFROb2RlPiB8IHVuZGVmaW5lZDtcbiAgbWFwTm9kZTogKG5vZGU6IFROb2RlKSA9PiBNZXNzYWdlO1xufSk6IFByb21pc2U8TWVzc2FnZVtdPiB7XG4gIGxldCBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgY29uc3QgbWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXG4gIGZvciAoOzspIHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gY29uZmlnLnNlbGVjdENvbm5lY3Rpb24oXG4gICAgICBhd2FpdCBncmFwaHFsPFRSZXNwb25zZT4oY29uZmlnLnF1ZXJ5LCB7XG4gICAgICAgIG93bmVyOiBjb25maWcub3duZXIsXG4gICAgICAgIG5hbWU6IGNvbmZpZy5uYW1lLFxuICAgICAgICBudW1iZXI6IE51bWJlcihjb25maWcubnVtYmVyKSxcbiAgICAgICAgY3Vyc29yLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgaWYgKCFjb25uZWN0aW9uKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZXM7XG4gICAgfVxuXG4gICAgbWVzc2FnZXMucHVzaCguLi5jb25uZWN0aW9uLm5vZGVzLm1hcChjb25maWcubWFwTm9kZSkuZmlsdGVyKGhhc01lc3NhZ2VCb2R5KSk7XG5cbiAgICBpZiAoIWNvbm5lY3Rpb24ucGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIHJldHVybiBtZXNzYWdlcztcbiAgICB9XG4gICAgY3Vyc29yID0gY29ubmVjdGlvbi5wYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoTWV0YWRhdGE8VFJlc3BvbnNlIGV4dGVuZHMgSnNvbk9iamVjdD4oY29uZmlnOiB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIG93bmVyOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVtYmVyOiBzdHJpbmcgfCBudW1iZXI7XG4gIG5vdW46IHN0cmluZztcbiAgc2VsZWN0TWV0YWRhdGE6IChyZXNwb25zZTogVFJlc3BvbnNlKSA9PiBNZXRhZGF0YU5vZGUgfCB1bmRlZmluZWQ7XG59KTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gY29uZmlnLnNlbGVjdE1ldGFkYXRhKFxuICAgIGF3YWl0IGdyYXBocWw8VFJlc3BvbnNlPihjb25maWcucXVlcnksIHtcbiAgICAgIG93bmVyOiBjb25maWcub3duZXIsXG4gICAgICBuYW1lOiBjb25maWcubmFtZSxcbiAgICAgIG51bWJlcjogTnVtYmVyKGNvbmZpZy5udW1iZXIpLFxuICAgIH0pXG4gICk7XG5cbiAgaWYgKCFtZXRhZGF0YSkge1xuICAgIGV4aXRXaXRoRXJyb3IoYENvdWxkIG5vdCBmaW5kICR7Y29uZmlnLm5vdW59ICMke2NvbmZpZy5udW1iZXJ9IGluICR7Y29uZmlnLm93bmVyfS8ke2NvbmZpZy5uYW1lfS5gKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbnVtYmVyOiBtZXRhZGF0YS5udW1iZXIsXG4gICAgdGl0bGU6IG1ldGFkYXRhLnRpdGxlLFxuICAgIHVybDogbWV0YWRhdGEudXJsLFxuICAgIGF1dGhvcjogbWV0YWRhdGEuYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQsXG4gICAgYm9keTogbWV0YWRhdGEuYm9keSA/PyAnJyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tbWVudE1lc3NhZ2UoY29tbWVudDogSXNzdWVNZXNzYWdlQ29tbWVudE5vZGUpOiBNZXNzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnY29tbWVudCcsXG4gICAgYXV0aG9yOiBjb21tZW50LmF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkLFxuICAgIGNyZWF0ZWRBdDogY29tbWVudC5jcmVhdGVkQXQsXG4gICAgdXJsOiBjb21tZW50LnVybCxcbiAgICBib2R5OiBjb21tZW50LmJvZHksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJldmlld01lc3NhZ2UocmV2aWV3OiBQclJldmlld05vZGUpOiBNZXNzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAncmV2aWV3JyxcbiAgICBhdXRob3I6IHJldmlldy5hdXRob3I/LmxvZ2luID8/IHVuZGVmaW5lZCxcbiAgICBzdGF0ZTogcmV2aWV3LnN0YXRlID8/IHVuZGVmaW5lZCxcbiAgICBjcmVhdGVkQXQ6IHJldmlldy5zdWJtaXR0ZWRBdCA/PyB1bmRlZmluZWQsXG4gICAgdXJsOiByZXZpZXcudXJsLFxuICAgIGJvZHk6IHJldmlldy5ib2R5ID8/ICcnLFxuICB9O1xufVxuXG5mdW5jdGlvbiBoYXNNZXNzYWdlQm9keShtZXNzYWdlOiBNZXNzYWdlKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgbWVzc2FnZS5ib2R5ID09PSAnc3RyaW5nJyAmJiBtZXNzYWdlLmJvZHkubGVuZ3RoID4gMDtcbn1cbiIsImltcG9ydCB7IGN1cnJlbnRQck51bWJlciwgZXhpdFdpdGhFcnJvciwgZ2gsIHByb2dyZXNzLCBydW5Db21tYW5kLCB5YW1sRHVtcCB9IGZyb20gJy4vc2hhcmVkLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBPcGVuUHJPcHRpb25zIHtcbiAgYm9keT86IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlUHJPcHRpb25zIHtcbiAgYm9keTogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblByKHsgYm9keSwgdGl0bGUgfTogT3BlblByT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaGVhZE91dHB1dCA9IGF3YWl0IHJ1bkNvbW1hbmQoWydnaXQnLCAnYnJhbmNoJywgJy0tc2hvdy1jdXJyZW50J10pO1xuICBjb25zdCBoZWFkID0gaGVhZE91dHB1dC50cmltKCk7XG4gIGNvbnN0IGJhc2VPdXRwdXQgPSBhd2FpdCBnaChbJ3JlcG8nLCAndmlldycsICctLWpzb24nLCAnZGVmYXVsdEJyYW5jaFJlZicsICctLWpxJywgJy5kZWZhdWx0QnJhbmNoUmVmLm5hbWUnXSk7XG4gIGNvbnN0IGJhc2UgPSBiYXNlT3V0cHV0LnRyaW0oKTtcblxuICBpZiAoIWhlYWQpIHtcbiAgICBleGl0V2l0aEVycm9yKCdFcnJvcjogY291bGQgbm90IGRldGVybWluZSBjdXJyZW50IGJyYW5jaCcpO1xuICB9XG4gIGlmICghYmFzZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGRlZmF1bHQgYnJhbmNoJyk7XG4gIH1cbiAgaWYgKGhlYWQgPT09IGJhc2UpIHtcbiAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogY3VycmVudCBicmFuY2ggaXMgdGhlIGRlZmF1bHQgYnJhbmNoICgke2Jhc2V9KWApO1xuICB9XG5cbiAgY29uc3QgY3JlYXRlQXJncyA9IFsncHInLCAnY3JlYXRlJywgJy0tYmFzZScsIGJhc2UsICctLWhlYWQnLCBoZWFkLCAnLS1maWxsJ107XG4gIGlmICh0aXRsZSkge1xuICAgIGNyZWF0ZUFyZ3MucHVzaCgnLS10aXRsZScsIHRpdGxlKTtcbiAgfVxuICBpZiAoYm9keSkge1xuICAgIGNyZWF0ZUFyZ3MucHVzaCgnLS1ib2R5LWZpbGUnLCAnLScpO1xuICB9XG5cbiAgcHJvZ3Jlc3MoJ0NyZWF0aW5nIHB1bGwgcmVxdWVzdC4uLicpO1xuICBhd2FpdCBnaChjcmVhdGVBcmdzLCBib2R5KTtcblxuICByZXR1cm4geWFtbER1bXAoXG4gICAgSlNPTi5wYXJzZShhd2FpdCBnaChbJ3ByJywgJ3ZpZXcnLCAnLS1qc29uJywgJ2lkLG51bWJlcix0aXRsZSx1cmwsc3RhdGUsaXNEcmFmdCxiYXNlUmVmTmFtZSxoZWFkUmVmTmFtZSxhdXRob3InXSkpXG4gICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVQcih7IGJvZHksIHRpdGxlIH06IFVwZGF0ZVByT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoYFVwZGF0aW5nIHB1bGwgcmVxdWVzdCAjJHtwck51bWJlcn0uLi5gKTtcbiAgcmV0dXJuIGF3YWl0IGVkaXRQcihwck51bWJlciwgWyctLXRpdGxlJywgdGl0bGUsICctLWJvZHktZmlsZScsICctJ10sIGJvZHkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBlZGl0UHIocHJOdW1iZXI6IHN0cmluZywgZWRpdEFyZ3M6IHN0cmluZ1tdLCBzdGRpbkRhdGE/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBhd2FpdCBnaChbJ3ByJywgJ2VkaXQnLCBwck51bWJlciwgLi4uZWRpdEFyZ3NdLCBzdGRpbkRhdGEpO1xuXG4gIHJldHVybiB5YW1sRHVtcChcbiAgICBKU09OLnBhcnNlKFxuICAgICAgYXdhaXQgZ2goW1xuICAgICAgICAncHInLFxuICAgICAgICAndmlldycsXG4gICAgICAgIHByTnVtYmVyLFxuICAgICAgICAnLS1qc29uJyxcbiAgICAgICAgJ2lkLG51bWJlcix0aXRsZSx1cmwsc3RhdGUsaXNEcmFmdCxiYXNlUmVmTmFtZSxoZWFkUmVmTmFtZSxhdXRob3IsYm9keScsXG4gICAgICBdKVxuICAgIClcbiAgKTtcbn1cbiIsImltcG9ydCB7XG4gIGN1cnJlbnRQck51bWJlcixcbiAgY3VycmVudFJlcG9QYXJ0cyxcbiAgZXhpdFdpdGhFcnJvcixcbiAgZ3JhcGhxbCxcbiAgcHJvZ3Jlc3MsXG4gIHJlYWRSZXF1aXJlZFN0ZGluVGV4dCxcbiAgeWFtbER1bXAsXG59IGZyb20gJy4vc2hhcmVkLmpzJztcblxuY29uc3QgUkVWSUVXX1NOSVBQRVRfQ09OVEVYVF9MSU5FUyA9IDI7XG5cbmludGVyZmFjZSBDb21taXRSZWYge1xuICBvaWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFJldmlld0NvbW1lbnROb2RlIHtcbiAgaWQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIGxpbmU/OiBudW1iZXIgfCBudWxsO1xuICBvcmlnaW5hbExpbmU/OiBudW1iZXIgfCBudWxsO1xuICBzdGFydExpbmU/OiBudW1iZXIgfCBudWxsO1xuICBvcmlnaW5hbFN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIGNvbW1pdD86IENvbW1pdFJlZiB8IG51bGw7XG4gIG9yaWdpbmFsQ29tbWl0PzogQ29tbWl0UmVmIHwgbnVsbDtcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IHN0cmluZyB8IG51bGw7XG59XG5cbmludGVyZmFjZSBSZXZpZXdUaHJlYWROb2RlIHtcbiAgaWQ6IHN0cmluZztcbiAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgaXNPdXRkYXRlZD86IGJvb2xlYW4gfCBudWxsO1xuICBwYXRoPzogc3RyaW5nIHwgbnVsbDtcbiAgbGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsTGluZT86IG51bWJlciB8IG51bGw7XG4gIHN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsU3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgY29tbWVudHM6IHtcbiAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICBwYWdlSW5mbzoge1xuICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgIH07XG4gIH07XG59XG5cbmNvbnN0IFJFVklFV19USFJFQURfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdUaHJlYWRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICAgIGlzT3V0ZGF0ZWRcbiAgICAgICAgICAgIHBhdGhcbiAgICAgICAgICAgIGxpbmVcbiAgICAgICAgICAgIG9yaWdpbmFsTGluZVxuICAgICAgICAgICAgc3RhcnRMaW5lXG4gICAgICAgICAgICBvcmlnaW5hbFN0YXJ0TGluZVxuICAgICAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCkge1xuICAgICAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgICAgICBib2R5XG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICAgICAgbGluZVxuICAgICAgICAgICAgICAgIG9yaWdpbmFsTGluZVxuICAgICAgICAgICAgICAgIHN0YXJ0TGluZVxuICAgICAgICAgICAgICAgIG9yaWdpbmFsU3RhcnRMaW5lXG4gICAgICAgICAgICAgICAgY29tbWl0IHsgb2lkIH1cbiAgICAgICAgICAgICAgICBvcmlnaW5hbENvbW1pdCB7IG9pZCB9XG4gICAgICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFJFVklFV19DT01NRU5UX1FVRVJZID0gYFxuICBxdWVyeSgkdGhyZWFkSWQ6IElEISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgbm9kZShpZDogJHRocmVhZElkKSB7XG4gICAgICAuLi4gb24gUHVsbFJlcXVlc3RSZXZpZXdUaHJlYWQge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgbGluZVxuICAgICAgICAgICAgb3JpZ2luYWxMaW5lXG4gICAgICAgICAgICBzdGFydExpbmVcbiAgICAgICAgICAgIG9yaWdpbmFsU3RhcnRMaW5lXG4gICAgICAgICAgICBjb21taXQgeyBvaWQgfVxuICAgICAgICAgICAgb3JpZ2luYWxDb21taXQgeyBvaWQgfVxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBGSUxFX1RFWFRfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRleHByZXNzaW9uOiBTdHJpbmchKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgb2JqZWN0KGV4cHJlc3Npb246ICRleHByZXNzaW9uKSB7XG4gICAgICAgIC4uLiBvbiBCbG9iIHtcbiAgICAgICAgICBpc0JpbmFyeVxuICAgICAgICAgIHRleHRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdUaHJlYWRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgnRXJyb3I6IEpTT04gaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nKTtcbiAgY29uc3QgcGF5bG9hZCA9IHBhcnNlUmVwbHlJbnB1dChpbnB1dCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRSZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgW3RocmVhZElkLCBib2R5XSBvZiBPYmplY3QuZW50cmllcyhwYXlsb2FkLnJlcGxpZXMpKSB7XG4gICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgIG5vcm1hbGl6ZWRSZXBsaWVzW3RocmVhZElkXSA9IGJvZHk7XG4gICAgfVxuICB9XG4gIHJldHVybiBub3JtYWxpemVkUmVwbGllcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhcbiAgcXVlcnk6IHN0cmluZyxcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyLFxuICBvblRocmVhZDogKHRocmVhZDogUmV2aWV3VGhyZWFkTm9kZSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD5cbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ3JhcGhxbDx7XG4gICAgICBkYXRhPzoge1xuICAgICAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgICAgIHB1bGxSZXF1ZXN0Pzoge1xuICAgICAgICAgICAgcmV2aWV3VGhyZWFkcz86IHtcbiAgICAgICAgICAgICAgbm9kZXM6IFJldmlld1RocmVhZE5vZGVbXTtcbiAgICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9PihxdWVyeSwge1xuICAgICAgb3duZXIsXG4gICAgICBuYW1lLFxuICAgICAgbnVtYmVyOiBOdW1iZXIocHJOdW1iZXIpLFxuICAgICAgY3Vyc29yLFxuICAgIH0pO1xuICAgIGNvbnN0IHJldmlld1RocmVhZHMgPSByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8ucmV2aWV3VGhyZWFkcztcblxuICAgIGlmICghcmV2aWV3VGhyZWFkcykge1xuICAgICAgZXhpdFdpdGhFcnJvcihcbiAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIHJldmlld1RocmVhZHMgaW4gR3JhcGhRTCByZXNwb25zZS4gVGhlIHB1bGwgcmVxdWVzdCBtYXkgbm90IGV4aXN0IG9yIHRoZXJlIHdhcyBhbiBBUEkgZXJyb3IuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRocmVhZCBvZiByZXZpZXdUaHJlYWRzLm5vZGVzKSB7XG4gICAgICBhd2FpdCBvblRocmVhZCh0aHJlYWQpO1xuICAgIH1cblxuICAgIGlmICghcmV2aWV3VGhyZWFkcy5wYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdXJzb3IgPSByZXZpZXdUaHJlYWRzLnBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBpZHM6IHN0cmluZ1tdID0gW107XG4gIGF3YWl0IHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhSRVZJRVdfVEhSRUFEX0lEU19RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCAodGhyZWFkKSA9PiB7XG4gICAgaWYgKCF0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgaWRzLnB1c2godGhyZWFkLmlkKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaWRzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5yZXNvbHZlZFJldmlld1RocmVhZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPiB7XG4gIGNvbnN0IHRocmVhZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gPSBbXTtcbiAgY29uc3QgZmlsZVRleHRDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4+KCk7XG5cbiAgYXdhaXQgcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFJFVklFV19USFJFQURfUVVFUlksIG93bmVyLCBuYW1lLCBwck51bWJlciwgYXN5bmMgKHRocmVhZCkgPT4ge1xuICAgIGlmICh0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbW1lbnRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB0aHJlYWQuY29tbWVudHMubm9kZXMubWFwKChjb21tZW50KSA9PlxuICAgICAgICBub3JtYWxpemVDb21tZW50KGNvbW1lbnQsIHRocmVhZC5wYXRoID8/IHVuZGVmaW5lZCwgdGhyZWFkLmlzT3V0ZGF0ZWQgPz8gZmFsc2UsIG93bmVyLCBuYW1lLCBmaWxlVGV4dENhY2hlKVxuICAgICAgKVxuICAgICk7XG4gICAgbGV0IHBhZ2VJbmZvID0gdGhyZWFkLmNvbW1lbnRzLnBhZ2VJbmZvO1xuICAgIGxldCBjdXJzb3IgPSBwYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuXG4gICAgd2hpbGUgKHBhZ2VJbmZvLmhhc05leHRQYWdlKSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdyYXBocWw8e1xuICAgICAgICBkYXRhPzoge1xuICAgICAgICAgIG5vZGU/OiB7XG4gICAgICAgICAgICBjb21tZW50cz86IHtcbiAgICAgICAgICAgICAgbm9kZXM6IFJldmlld0NvbW1lbnROb2RlW107XG4gICAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFJFVklFV19DT01NRU5UX1FVRVJZLCB7IHRocmVhZElkOiB0aHJlYWQuaWQsIGN1cnNvciB9KTtcbiAgICAgIGNvbnN0IGNvbW1lbnRDb25uZWN0aW9uID0gcmVzcG9uc2UuZGF0YT8ubm9kZT8uY29tbWVudHM7XG5cbiAgICAgIGlmICghY29tbWVudENvbm5lY3Rpb24pIHtcbiAgICAgICAgZXhpdFdpdGhFcnJvcihgQ291bGQgbm90IGZpbmQgY29tbWVudHMgaW4gR3JhcGhRTCByZXNwb25zZSBmb3IgdGhyZWFkICR7dGhyZWFkLmlkfS5gKTtcbiAgICAgIH1cblxuICAgICAgY29tbWVudHMucHVzaChcbiAgICAgICAgLi4uKGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIGNvbW1lbnRDb25uZWN0aW9uLm5vZGVzLm1hcCgoY29tbWVudCkgPT5cbiAgICAgICAgICAgIG5vcm1hbGl6ZUNvbW1lbnQoY29tbWVudCwgdGhyZWFkLnBhdGggPz8gdW5kZWZpbmVkLCB0aHJlYWQuaXNPdXRkYXRlZCA/PyBmYWxzZSwgb3duZXIsIG5hbWUsIGZpbGVUZXh0Q2FjaGUpXG4gICAgICAgICAgKVxuICAgICAgICApKVxuICAgICAgKTtcbiAgICAgIHBhZ2VJbmZvID0gY29tbWVudENvbm5lY3Rpb24ucGFnZUluZm87XG4gICAgICBjdXJzb3IgPSBwYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRocmVhZHMucHVzaCh7XG4gICAgICBpZDogdGhyZWFkLmlkLFxuICAgICAgaXNSZXNvbHZlZDogdGhyZWFkLmlzUmVzb2x2ZWQsXG4gICAgICBpc091dGRhdGVkOiB0aHJlYWQuaXNPdXRkYXRlZCxcbiAgICAgIHBhdGg6IHRocmVhZC5wYXRoLFxuICAgICAgbGluZTogdGhyZWFkLmxpbmUsXG4gICAgICBvcmlnaW5hbExpbmU6IHRocmVhZC5vcmlnaW5hbExpbmUsXG4gICAgICBzdGFydExpbmU6IHRocmVhZC5zdGFydExpbmUsXG4gICAgICBvcmlnaW5hbFN0YXJ0TGluZTogdGhyZWFkLm9yaWdpbmFsU3RhcnRMaW5lLFxuICAgICAgY29tbWVudHMsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiB0aHJlYWRzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFByUmV2aWV3VGhyZWFkcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuXG4gIHByb2dyZXNzKCdGZXRjaGluZyB1bnJlc29sdmVkIHJldmlldyB0aHJlYWRzLi4uJyk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHVucmVzb2x2ZWRfdGhyZWFkczogYXdhaXQgdW5yZXNvbHZlZFJldmlld1RocmVhZHMob3duZXIsIG5hbWUsIHByTnVtYmVyKSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQclJldmlld1RocmVhZHMocmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG4gIGNvbnN0IHVucmVzb2x2ZWRJZHMgPSBuZXcgU2V0KGF3YWl0IHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMob3duZXIsIG5hbWUsIHByTnVtYmVyKSk7XG5cbiAgcHJvZ3Jlc3MoYFJlcGx5aW5nIHRvICR7T2JqZWN0LmtleXMocmVwbGllcykubGVuZ3RofSByZXZpZXcgdGhyZWFkcy4uLmApO1xuXG4gIGNvbnN0IHJlc29sdmVkVGhyZWFkSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMocmVwbGllcyk7XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIFt0aHJlYWRJZCwgYm9keV1dIG9mIGVudHJpZXMuZW50cmllcygpKSB7XG4gICAgcHJvZ3Jlc3MoYFByb2Nlc3NpbmcgJHtpbmRleCArIDF9LyR7ZW50cmllcy5sZW5ndGh9OiAke3RocmVhZElkfWApO1xuICAgIGlmICghdW5yZXNvbHZlZElkcy5oYXModGhyZWFkSWQpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdyYXBocWw8e1xuICAgICAgZGF0YT86IHtcbiAgICAgICAgcmVzb2x2ZVJldmlld1RocmVhZD86IHtcbiAgICAgICAgICB0aHJlYWQ/OiB7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9PihcbiAgICAgIGBcbiAgICAgICAgbXV0YXRpb24gKCR0aHJlYWRJZDogSUQhLCAkYm9keTogU3RyaW5nISkge1xuICAgICAgICAgIGFkZFB1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkUmVwbHkoaW5wdXQ6IHsgcHVsbFJlcXVlc3RSZXZpZXdUaHJlYWRJZDogJHRocmVhZElkLCBib2R5OiAkYm9keSB9KSB7XG4gICAgICAgICAgICBjb21tZW50IHtcbiAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc29sdmVSZXZpZXdUaHJlYWQoaW5wdXQ6IHsgdGhyZWFkSWQ6ICR0aHJlYWRJZCB9KSB7XG4gICAgICAgICAgICB0aHJlYWQge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgeyB0aHJlYWRJZCwgYm9keSB9XG4gICAgKTtcblxuICAgIGlmIChyZXNwb25zZS5kYXRhPy5yZXNvbHZlUmV2aWV3VGhyZWFkPy50aHJlYWQ/LmlzUmVzb2x2ZWQpIHtcbiAgICAgIHJlc29sdmVkVGhyZWFkSWRzLnB1c2godGhyZWFkSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9ncmVzcyhgV2FybmluZzogZmFpbGVkIHRvIHJlc29sdmUgdGhyZWFkICR7dGhyZWFkSWR9LmApO1xuICAgIH1cbiAgfVxuXG4gIHByb2dyZXNzKCdEb25lLicpO1xuICByZXR1cm4geWFtbER1bXAoeyByZXNvbHZlZF90aHJlYWRfaWRzOiByZXNvbHZlZFRocmVhZElkcyB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbm9ybWFsaXplQ29tbWVudChcbiAgY29tbWVudDogUmV2aWV3Q29tbWVudE5vZGUsXG4gIHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgaXNUaHJlYWRPdXRkYXRlZDogYm9vbGVhbixcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBmaWxlVGV4dENhY2hlOiBNYXA8c3RyaW5nLCBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4+XG4pOiBQcm9taXNlPHtcbiAgaWQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIGF1dGhvcj86IHN0cmluZztcbiAgc25pcHBldD86IHN0cmluZztcbn0+IHtcbiAgY29uc3QgeyBhdXRob3IgfSA9IGNvbW1lbnQ7XG4gIHJldHVybiB7XG4gICAgaWQ6IGNvbW1lbnQuaWQsXG4gICAgdXJsOiBjb21tZW50LnVybCxcbiAgICBib2R5OiBjb21tZW50LmJvZHksXG4gICAgY3JlYXRlZEF0OiBjb21tZW50LmNyZWF0ZWRBdCxcbiAgICBhdXRob3I6IHR5cGVvZiBhdXRob3IgPT09ICdzdHJpbmcnID8gYXV0aG9yIDogKGF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkKSxcbiAgICBzbmlwcGV0OiBhd2FpdCBidWlsZFJldmlld1NuaXBwZXQoY29tbWVudCwgcGF0aCwgaXNUaHJlYWRPdXRkYXRlZCwgb3duZXIsIG5hbWUsIGZpbGVUZXh0Q2FjaGUpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlcGx5SW5wdXQoaW5wdXQ6IHN0cmluZyk6IHsgcmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfSB7XG4gIGNvbnN0IGVycm9yUHJlZml4ID0gJ0Vycm9yOiBJbnZhbGlkIGlucHV0IGZvcm1hdCBvbiBzdGRpbic7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGlucHV0KSBhcyB1bmtub3duO1xuICAgIGlmICghaXNSZXBseUlucHV0KHBhcnNlZCkpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoYCR7ZXJyb3JQcmVmaXh9OiBleHBlY3RlZCBhbiBvYmplY3Qgd2l0aCBhIHN0cmluZy12YWx1ZWQgXFxgcmVwbGllc1xcYCBtYXBgLCAyKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IEludmFsaWQgSlNPTiBwcm92aWRlZCBvbiBzdGRpbjogJHtlcnJvci5tZXNzYWdlfWAsIDIpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1JlcGx5SW5wdXQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyB7IHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+IH0ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJlcGxpZXMgPSAodmFsdWUgYXMgeyByZXBsaWVzPzogdW5rbm93biB9KS5yZXBsaWVzO1xuICBpZiAodHlwZW9mIHJlcGxpZXMgIT09ICdvYmplY3QnIHx8IHJlcGxpZXMgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShyZXBsaWVzKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QudmFsdWVzKHJlcGxpZXMpLmV2ZXJ5KChyZXBseSkgPT4gcmVwbHkgPT09IG51bGwgfHwgcmVwbHkgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgcmVwbHkgPT09ICdzdHJpbmcnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYnVpbGRSZXZpZXdTbmlwcGV0KFxuICBjb21tZW50OiBSZXZpZXdDb21tZW50Tm9kZSxcbiAgcGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBpc1RocmVhZE91dGRhdGVkOiBib29sZWFuLFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIGZpbGVUZXh0Q2FjaGU6IE1hcDxzdHJpbmcsIFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPj5cbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGlmICghcGF0aCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwcmltYXJ5TG9jYXRpb24gPSBpc1RocmVhZE91dGRhdGVkXG4gICAgPyBvcmlnaW5hbENvbW1lbnRMb2NhdGlvbihjb21tZW50LCBwYXRoKVxuICAgIDogY3VycmVudENvbW1lbnRMb2NhdGlvbihjb21tZW50LCBwYXRoKTtcbiAgY29uc3QgZmFsbGJhY2tMb2NhdGlvbiA9IGlzVGhyZWFkT3V0ZGF0ZWRcbiAgICA/IGN1cnJlbnRDb21tZW50TG9jYXRpb24oY29tbWVudCwgcGF0aClcbiAgICA6IG9yaWdpbmFsQ29tbWVudExvY2F0aW9uKGNvbW1lbnQsIHBhdGgpO1xuICBjb25zdCBsb2NhdGlvbiA9IHByaW1hcnlMb2NhdGlvbiA/PyBmYWxsYmFja0xvY2F0aW9uO1xuXG4gIGlmICghbG9jYXRpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZmlsZVRleHQgPSBhd2FpdCBmZXRjaEZpbGVUZXh0QXRFeHByZXNzaW9uKG93bmVyLCBuYW1lLCBsb2NhdGlvbi5leHByZXNzaW9uLCBmaWxlVGV4dENhY2hlKTtcbiAgaWYgKGZpbGVUZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHJlbmRlckxpbmVTbmlwcGV0KGZpbGVUZXh0LCBsb2NhdGlvbi5zdGFydExpbmUsIGxvY2F0aW9uLmVuZExpbmUpO1xufVxuXG5mdW5jdGlvbiBjdXJyZW50Q29tbWVudExvY2F0aW9uKFxuICBjb21tZW50OiBSZXZpZXdDb21tZW50Tm9kZSxcbiAgcGF0aDogc3RyaW5nXG4pOiB7IGV4cHJlc3Npb246IHN0cmluZzsgc3RhcnRMaW5lOiBudW1iZXI7IGVuZExpbmU6IG51bWJlciB9IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGNvbW1lbnRMb2NhdGlvbihjb21tZW50LmNvbW1pdD8ub2lkLCBwYXRoLCBjb21tZW50LnN0YXJ0TGluZSwgY29tbWVudC5saW5lKTtcbn1cblxuZnVuY3Rpb24gb3JpZ2luYWxDb21tZW50TG9jYXRpb24oXG4gIGNvbW1lbnQ6IFJldmlld0NvbW1lbnROb2RlLFxuICBwYXRoOiBzdHJpbmdcbik6IHsgZXhwcmVzc2lvbjogc3RyaW5nOyBzdGFydExpbmU6IG51bWJlcjsgZW5kTGluZTogbnVtYmVyIH0gfCB1bmRlZmluZWQge1xuICByZXR1cm4gY29tbWVudExvY2F0aW9uKGNvbW1lbnQub3JpZ2luYWxDb21taXQ/Lm9pZCwgcGF0aCwgY29tbWVudC5vcmlnaW5hbFN0YXJ0TGluZSwgY29tbWVudC5vcmlnaW5hbExpbmUpO1xufVxuXG5mdW5jdGlvbiBjb21tZW50TG9jYXRpb24oXG4gIG9pZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBwYXRoOiBzdHJpbmcsXG4gIHN0YXJ0TGluZTogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgZW5kTGluZTogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogeyBleHByZXNzaW9uOiBzdHJpbmc7IHN0YXJ0TGluZTogbnVtYmVyOyBlbmRMaW5lOiBudW1iZXIgfSB8IHVuZGVmaW5lZCB7XG4gIGlmICghb2lkIHx8ICFlbmRMaW5lKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXhwcmVzc2lvbjogYCR7b2lkfToke3BhdGh9YCxcbiAgICBzdGFydExpbmU6IHN0YXJ0TGluZSA/PyBlbmRMaW5lLFxuICAgIGVuZExpbmUsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoRmlsZVRleHRBdEV4cHJlc3Npb24oXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgZXhwcmVzc2lvbjogc3RyaW5nLFxuICBmaWxlVGV4dENhY2hlOiBNYXA8c3RyaW5nLCBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4+XG4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBjYWNoZUtleSA9IGAke293bmVyfS8ke25hbWV9OiR7ZXhwcmVzc2lvbn1gO1xuICBsZXQgcGVuZGluZyA9IGZpbGVUZXh0Q2FjaGUuZ2V0KGNhY2hlS2V5KTtcblxuICBpZiAoIXBlbmRpbmcpIHtcbiAgICBwZW5kaW5nID0gZmV0Y2hGaWxlVGV4dChvd25lciwgbmFtZSwgZXhwcmVzc2lvbik7XG4gICAgZmlsZVRleHRDYWNoZS5zZXQoY2FjaGVLZXksIHBlbmRpbmcpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHBlbmRpbmc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoRmlsZVRleHQob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBleHByZXNzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdyYXBocWw8e1xuICAgIGRhdGE/OiB7XG4gICAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgICBvYmplY3Q/OiB7XG4gICAgICAgICAgaXNCaW5hcnk/OiBib29sZWFuIHwgbnVsbDtcbiAgICAgICAgICB0ZXh0Pzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgfSB8IG51bGw7XG4gICAgICB9O1xuICAgIH07XG4gIH0+KEZJTEVfVEVYVF9RVUVSWSwgeyBvd25lciwgbmFtZSwgZXhwcmVzc2lvbiB9KTtcbiAgY29uc3QgYmxvYiA9IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/Lm9iamVjdDtcblxuICBpZiAoIWJsb2IgfHwgYmxvYi5pc0JpbmFyeSB8fCB0eXBlb2YgYmxvYi50ZXh0ICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gYmxvYi50ZXh0O1xufVxuXG5mdW5jdGlvbiByZW5kZXJMaW5lU25pcHBldChmaWxlVGV4dDogc3RyaW5nLCBzdGFydExpbmU6IG51bWJlciwgZW5kTGluZTogbnVtYmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbGluZXMgPSBmaWxlVGV4dC5zcGxpdCgnXFxuJyk7XG4gIC8vIFJlbW92ZSBvbmx5IHRoZSBzeW50aGV0aWMgZW1wdHkgc2VnbWVudCBjcmVhdGVkIGJ5IGEgdHJhaWxpbmcgbmV3bGluZSB3aXRob3V0IHRyaW1taW5nIG1lYW5pbmdmdWwgc3BhY2VzLlxuICBpZiAobGluZXMubGVuZ3RoID4gMCAmJiBsaW5lcy5hdCgtMSkgPT09ICcnKSB7XG4gICAgbGluZXMucG9wKCk7XG4gIH1cblxuICBpZiAobGluZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGNsYW1wZWRTdGFydExpbmUgPSBjbGFtcExpbmVOdW1iZXIoc3RhcnRMaW5lLCBsaW5lcy5sZW5ndGgpO1xuICBjb25zdCBjbGFtcGVkRW5kTGluZSA9IGNsYW1wTGluZU51bWJlcihlbmRMaW5lLCBsaW5lcy5sZW5ndGgpO1xuICBjb25zdCBmaXJzdExpbmUgPSBNYXRoLm1heCgxLCBjbGFtcGVkU3RhcnRMaW5lIC0gUkVWSUVXX1NOSVBQRVRfQ09OVEVYVF9MSU5FUyk7XG4gIGNvbnN0IGxhc3RMaW5lID0gTWF0aC5taW4obGluZXMubGVuZ3RoLCBjbGFtcGVkRW5kTGluZSArIFJFVklFV19TTklQUEVUX0NPTlRFWFRfTElORVMpO1xuICBjb25zdCBsaW5lTnVtYmVyV2lkdGggPSBTdHJpbmcobGFzdExpbmUpLmxlbmd0aDtcbiAgY29uc3Qgc25pcHBldExpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAobGV0IGxpbmVOdW1iZXIgPSBmaXJzdExpbmU7IGxpbmVOdW1iZXIgPD0gbGFzdExpbmU7IGxpbmVOdW1iZXIgKz0gMSkge1xuICAgIGNvbnN0IG1hcmtlciA9IGxpbmVOdW1iZXIgPj0gY2xhbXBlZFN0YXJ0TGluZSAmJiBsaW5lTnVtYmVyIDw9IGNsYW1wZWRFbmRMaW5lID8gJz4nIDogJyAnO1xuICAgIHNuaXBwZXRMaW5lcy5wdXNoKFxuICAgICAgYCR7bWFya2VyfSAke1N0cmluZyhsaW5lTnVtYmVyKS5wYWRTdGFydChsaW5lTnVtYmVyV2lkdGgsICcgJyl9IHwgJHtsaW5lc1tsaW5lTnVtYmVyIC0gMV0gPz8gJyd9YFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gc25pcHBldExpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiBjbGFtcExpbmVOdW1iZXIobGluZU51bWJlcjogbnVtYmVyLCBtYXhMaW5lTnVtYmVyOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgobGluZU51bWJlciwgMSksIG1heExpbmVOdW1iZXIpO1xufVxuIiwiZXhwb3J0IGNvbnN0IHRlbXBvcmFyeUZpbGVzQ2xlYW51cEluc3RydWN0aW9uID1cbiAgJ090aGVyIGFnZW50cyBtYXkgYmUgd29ya2luZyBjb25jdXJyZW50bHk7IGRlbGV0ZSBvbmx5IHRlbXBvcmFyeSBmaWxlcyB5b3UgY3JlYXRlZCwgdmVyaWZ5IHRoYXQgdGhvc2UgcGF0aHMgbm8gbG9uZ2VyIGV4aXN0LCB0aGVuIHJ1biBgZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MSAtLXVudHJhY2tlZC1maWxlcz1hbGxgLic7XG4iLCJpbXBvcnQgeyBmZXRjaElzc3VlTWVzc2FnZXMgfSBmcm9tICcuLi9wci9wckNvbW1hbmRzLmpzJztcbmltcG9ydCB7IHRlbXBvcmFyeUZpbGVzQ2xlYW51cEluc3RydWN0aW9uIH0gZnJvbSAnLi9jbGVhbnVwSW5zdHJ1Y3Rpb24uanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRQbGFuUHJvbXB0KGlzc3VlTnVtYmVyOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBpc3N1ZVlhbWwgPSBhd2FpdCBmZXRjaElzc3VlTWVzc2FnZXMoaXNzdWVOdW1iZXIpO1xuXG4gIHJldHVybiBgXG5QbGFuIGEgR2l0SHViIGlzc3VlIGJ5IGdhdGhlcmluZyBjb250ZXh0LCB3cml0aW5nIGEgc3BlY2lmaWNhdGlvbiBmb3Igc29mdHdhcmUgZW5naW5lZXJzLCBhbmQgcG9zdGluZyBvciB1cGRhdGluZyB0aGF0IHNwZWNpZmljYXRpb24gYmFjayB0byB0aGUgaXNzdWUuXG5UaGUgdGFyZ2V0IGlzc3VlIG51bWJlciBpcyAjJHtpc3N1ZU51bWJlcn0uIEhlcmUgaXMgdGhlIGZldGNoZWQgaXNzdWUgY29udGV4dCBhcyBZQU1MOlxufn5+fnlhbWxcbiR7aXNzdWVZYW1sLnRyaW0oKX1cbn5+fn5cblxuRm9sbG93IHRoaXMgd29ya2Zsb3c6XG4xLiBSZWFkIHRoZSBhYm92ZSBpc3N1ZSBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBjYXJlZnVsbHkuXG4yLiBDb2xsZWN0IGVub3VnaCBzdXBwb3J0aW5nIGluZm9ybWF0aW9uIGJlZm9yZSB3cml0aW5nIHRoZSBzcGVjaWZpY2F0aW9uOlxuICAgLSBJbnNwZWN0IHRoZSByZWxldmFudCBjb2RlLCBzdXJyb3VuZGluZyBjYWxsIHNpdGVzLCByZWxhdGVkIHR5cGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbiwgcmVjZW50IGRpZmZzLCBhbmQgYW55IG90aGVyIGxvY2FsIGNvbnRleHQgbmVlZGVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZS5cbiAgIC0gSWYgY29kZSBpbnNwZWN0aW9uIGlzIGVub3VnaCwgdXNlIHRoZSBjdXJyZW50IGNvZGViYXNlIGFzIHRoZSBwcmltYXJ5IGV2aWRlbmNlLlxuICAgLSBJZiB0aGUgaXNzdWUgZGVwZW5kcyBvbiBydW50aW1lIGJlaGF2aW9yLCByZXByb2R1Y2UgaXQgd2l0aCB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGV4cGVyaW1lbnQsIHN1Y2ggYXMgYSBmb2N1c2VkIGNvbW1hbmQsIGEgdGlueSBzY3JpcHQsIGEgdGVtcG9yYXJ5IGxvY2FsIGFzc2VydGlvbiwgb3IgYW5vdGhlciBuYXJyb3cgY2hlY2sgdGhhdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGludGVuZGVkIGJlaGF2aW9yLlxuICAgLSBJZiB0aGUgaXNzdWUgZGVwZW5kcyBvbiBhIGxpYnJhcnksIEFQSSwgb3IgbGFuZ3VhZ2UgZmVhdHVyZSwgY29uZmlybSBpdCBhZ2FpbnN0IHRoZSBsYXRlc3Qgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBvciBhbm90aGVyIHByaW1hcnkgc291cmNlIGluc3RlYWQgb2YgcmVseWluZyBvbiBtZW1vcnkuXG4zLiBXcml0ZSB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGlzc3VlIGNvbW1lbnQuXG4gICAtIFdyaXRlIHRoZSBiYWNrZ3JvdW5kIGJhc2VkIG9uIHRoZSBjb2xsZWN0ZWQgaW5mb3JtYXRpb24uXG4gICAtIERlZmluZSBhIGdvYWwgdGhhdCBjbGVhcmx5IGd1aWRlcyBvdXIgaW1wbGVtZW50YXRpb24gaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi5cbiAgIC0gV3JpdGUgYSBkZXRhaWxlZCBzcGVjaWZpY2F0aW9uIGluY29ycG9yYXRpbmcgdGhlIGV2aWRlbmNlIHlvdSBjb2xsZWN0ZWQuXG4gICAtIElmIG5lZWRlZCwgaW5jbHVkZSBjb2RlIHNuaXBwZXRzIHRoYXQgZXhwbGFpbiBob3cgdG8gdXNlIGxpYnJhcmllcyBvciBBUElzLCBhbG9uZyB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlaXIgZG9jdW1lbnRhdGlvbi5cbjQuICR7dGVtcG9yYXJ5RmlsZXNDbGVhbnVwSW5zdHJ1Y3Rpb259XG41LiBQb3N0IHRoZSBzcGVjaWZpY2F0aW9uIGJhY2sgdG8gaXNzdWUgIyR7aXNzdWVOdW1iZXJ9LCB0aGVuIHByaW50IHRoZSBpc3N1ZSBVUkwuXG4gICAtIElmIHRoZSBpc3N1ZSBhbHJlYWR5IGhhcyBhIHNwZWNpZmljYXRpb24sIHVwZGF0ZSB0aGUgZXhpc3RpbmcgY29tbWVudCBpbnN0ZWFkIG9mIHBvc3RpbmcgYSBuZXcgb25lLlxuXG5Gb3JtYXQgdGhlIGlzc3VlIGNvbW1lbnQgZXhhY3RseSBsaWtlIHRoaXMsIGJ1dCBkbyBub3QgaW5jbHVkZSB0aGUgc3Vycm91bmRpbmcgXFxgfn5+flxcYCBmZW5jZXMgaW4gdGhlIGFjdHVhbCBjb21tZW50Olxufn5+flxuIyMgQmFja2dyb3VuZFxuXG5bU3VtbWFyaXplIHRoZSBjdXJyZW50IGJlaGF2aW9yIGFuZCBleHBsYWluIHRoZSBtb3RpdmF0aW9uIGJlaGluZCB0aGlzIGlzc3VlXVxuXG4jIyBHb2FsXG5cbltEZWZpbmUgdGhlIGdvYWwgd2Ugd2FudCB0byBhY2hpZXZlIGluIHRoaXMgaXNzdWVdXG5cbiMjIFNwZWNpZmljYXRpb25cblxuW0RldGFpbGVkIHNwZWNpZmljYXRpb24gZm9yIHNvZnR3YXJlIGVuZ2luZWVyc11cblxuIyMgS2V5IFRlY2hub2xvZ2llcyAoT05MWSBpZiBleHRlcm5hbCByZXNvdXJjZXMgYXJlIG5lZWRlZClcblxuW0Rlc2NyaWJlIHdoYXQgbGlicmFyaWVzIG9yIEFQSXMgd2Ugc2hvdWxkIHVzZSwgaW5jbHVkaW5nIGNvbmNyZXRlIHZlcnNpb25zIGFuZCBjb2RlIHNuaXBwZXRzLl1cblxufn5+flxuYC50cmltKCk7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gYnVpbGRNZXJnZUJhc2VDb21tYW5kKGJhc2VCcmFuY2g6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgZ2l0IG1lcmdlLWJhc2UgJHtzaGVsbFF1b3RlKGBvcmlnaW4vJHtiYXNlQnJhbmNofWApfSBIRUFEIDI+L2Rldi9udWxsIHx8IGdpdCBtZXJnZS1iYXNlICR7c2hlbGxRdW90ZShiYXNlQnJhbmNoKX0gSEVBRGA7XG59XG5cbmZ1bmN0aW9uIHNoZWxsUXVvdGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJyR7dmFsdWUucmVwbGFjZUFsbChcIidcIiwgXCInXFxcIidcXFwiJ1wiKX0nYDtcbn1cbiIsImltcG9ydCB7IGZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSB9IGZyb20gJy4uL3ByL3ByQ29tbWFuZHMuanMnO1xuaW1wb3J0IHsgY3VycmVudEJhc2VCcmFuY2ggfSBmcm9tICcuLi9yZXBvL2RlZmF1bHRCcmFuY2guanMnO1xuaW1wb3J0IHsgTk9fQ09OQ0VSTl9NRVNTQUdFIH0gZnJvbSAnLi4vcmV2aWV3L25vQ29uY2Vybi5qcyc7XG5pbXBvcnQgeyBidWlsZE1lcmdlQmFzZUNvbW1hbmQgfSBmcm9tICcuL2Jhc2VCcmFuY2hEaWZmQ29tbWFuZC5qcyc7XG5pbXBvcnQgeyB0ZW1wb3JhcnlGaWxlc0NsZWFudXBJbnN0cnVjdGlvbiB9IGZyb20gJy4vY2xlYW51cEluc3RydWN0aW9uLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkUmV2aWV3UHJvbXB0KGtub3duRmFjdHM/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBiYXNlQnJhbmNoID0gYXdhaXQgY3VycmVudEJhc2VCcmFuY2goKTtcbiAgY29uc3QgbWVyZ2VCYXNlQ29tbWFuZCA9IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZChiYXNlQnJhbmNoKTtcbiAgY29uc3QgcHJDb250ZXh0ID0gYXdhaXQgZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlKCk7XG4gIHJldHVybiBgXG5SZXZpZXcgdGhlIGN1cnJlbnQgJHtwckNvbnRleHQgPyAncHVsbCByZXF1ZXN0JyA6ICdicmFuY2gnfSBhZ2FpbnN0IGl0cyBiYXNlIGJyYW5jaCAke2Jhc2VCcmFuY2h9IHZpYSBcXGBnaXQgZGlmZiBcIiQoJHttZXJnZUJhc2VDb21tYW5kfSlcIlxcYC5cblVzZSB0aGUga25vd24gZmFjdHMsIGlmIHByb3ZpZGVkLCB0byBhdm9pZCByZXBlYXRpbmcgZmFjdCBjaGVja3MgYW5kIGZpbmRpbmdzLiBSZXVzZSBhIGtub3duIGZhY3Qgb25seSB3aGVuIHRoZSBzYW1lIGN1cnJlbnQtY29kZSBldmlkZW5jZSwgY29tbWFuZCByZXN1bHQsIG9yIHByaW1hcnktc291cmNlIGV2aWRlbmNlIHN0aWxsIGFwcGxpZXMuIElmIHRoZSBjdXJyZW50IGNvZGUgb3Igc291cmNlIGNvbnRleHQgbWF5IGhhdmUgY2hhbmdlZCBlbm91Z2ggdG8gaW52YWxpZGF0ZSBhIGtub3duIGZhY3QsIHJlZnJlc2ggb25seSB0aGF0IGFmZmVjdGVkIGZhY3QuXG5Gb2xsb3cgdGhpcyB3b3JrZmxvdzpcbjEuIFJldmlldyBlYWNoIGZpbmRpbmc6XG4gICAxLiBHYXRoZXIgc3VwcG9ydGluZyBldmlkZW5jZTpcbiAgICAgLSBJbnNwZWN0IHRoZSByZWZlcmVuY2VkIGNvZGUgYW5kIHRoZSBzdXJyb3VuZGluZyBjYWxsIHNpdGVzLCByZWxhdGVkIHR5cGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbiwgYW5kIHJlY2VudCBkaWZmcyB3aGVuIHRoZXkgYWZmZWN0IHRoZSBjbGFpbS5cbiAgICAgLSBJZiBjb2RlIGluc3BlY3Rpb24gaXMgZW5vdWdoLCB1c2UgdGhlIGN1cnJlbnQgY29kZWJhc2UgYXMgdGhlIHByaW1hcnkgZXZpZGVuY2UuXG4gICAgIC0gSWYgdGhlIGZpbmRpbmcgaXMgYWJvdXQgcnVudGltZSBiZWhhdmlvciwgcmVwcm9kdWNlIGl0IHdpdGggdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBleHBlcmltZW50LCBzdWNoIGFzIGEgZm9jdXNlZCBjb21tYW5kLCBhIHRpbnkgc2NyaXB0LCBhIHRlbXBvcmFyeSBsb2NhbCBhc3NlcnRpb24sIG9yIGFub3RoZXIgbmFycm93IGNoZWNrIHRoYXQgZG9lcyBub3QgY2hhbmdlIHRoZSBpbnRlbmRlZCBiZWhhdmlvci5cbiAgICAgLSBJZiB0aGUgZmluZGluZyBkZXBlbmRzIG9uIGZyYW1ld29yaywgbGlicmFyeSwgcGxhdGZvcm0sIG9yIGxhbmd1YWdlIGJlaGF2aW9yLCBjb25maXJtIGl0IGFnYWluc3QgdGhlIGxhdGVzdCBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIG9yIGFub3RoZXIgcHJpbWFyeSBzb3VyY2UgaW5zdGVhZCBvZiByZWx5aW5nIG9uIG1lbW9yeS5cbiAgIDIuIEp1ZGdlIHdoZXRoZXIgdGhlIGZpbmRpbmcgaXMgdmFsaWQ6XG4gICAgIC0gTWFyayBpdCB2YWxpZCBvbmx5IHdoZW4gdGhlIGF2YWlsYWJsZSBldmlkZW5jZSBzaG93cyB0aGUgcmVwb3J0ZWQgaXNzdWUgaXMgc3RpbGwgcmVhbCBpbiB0aGUgY3VycmVudCBjb2RlYmFzZS5cbiAgICAgLSBPdGhlcndpc2UsIG1hcmsgaXQgbm90IHZhbGlkLlxuICAgMy4gUHJvcG9zZSBhIGZpeCB3aXRob3V0IG1vZGlmeWluZyB0aGUgY29kZTpcbiAgICAgLSBEZXNjcmliZSB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGNoYW5nZSB0aGF0IHdvdWxkIGFkZHJlc3MgdGhlIGZpbmRpbmcuXG4gICAgIC0gSW52ZXN0aWdhdGUgdGhlIGxpa2VseSBpbXBhY3Qgb2YgdGhhdCBjaGFuZ2UgYnkgaW5zcGVjdGluZyB0aGUgYWZmZWN0ZWQgY2FsbCBzaXRlcywgcmVsYXRlZCB0eXBlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb24sIGFuZCBhZGphY2VudCBiZWhhdmlvciwgYW5kIG5vdGUgYW55IGZvbGxvdy11cCBjaGFuZ2VzIG9yIHJpc2tzIHRoZSBmaXggd291bGQgbmVlZCB0byBhY2NvdW50IGZvci5cbjIuICR7dGVtcG9yYXJ5RmlsZXNDbGVhbnVwSW5zdHJ1Y3Rpb259XG4zLiBSZXBvcnQgb25seSBuZXcgdmFsaWQgZmluZGluZ3MgdGhhdCBhcmUgbm90IGFscmVhZHkgY292ZXJlZCBieSB0aGUga25vd24gZmFjdHMuIEZvciBlYWNoIGZpbmRpbmcsIGluY2x1ZGUgdGhlIGV2aWRlbmNlLCBwcm9wb3NlZCBmaXgsIGFuZCBsaWtlbHkgaW1wYWN0LiBEbyBub3QgbW9kaWZ5IHRoZSBjb2RlLlxuICAgLSBXaGVuIHJlcG9ydGluZyB2YWxpZCBmaW5kaW5ncywgaW5jbHVkZSBhIFxcYCMjIFZlcmlmaWVkIEZhY3RzXFxgIHNlY3Rpb24gYWZ0ZXIgdGhlIGZpbmRpbmdzLiBJbmNsdWRlIG9ubHkgY29uY2lzZSwgcmV2aWV3LXJlbGV2YW50IGZhY3RzOiB3aGF0IHdhcyB2ZXJpZmllZCwgd2h5IGl0IG1hdHRlcnMgdG8gdGhlIHJldmlldywgYW5kIGhvdyBpdCB3YXMgdmVyaWZpZWQuXG4gICAtIElmIHRoZXJlIGFyZSBubyBuZXcgdmFsaWQgZmluZGluZ3MsIHJlc3BvbmQgZXhhY3RseSB3aXRoOiBcXGAke05PX0NPTkNFUk5fTUVTU0FHRX1cXGBcblxuJHtidWlsZEtub3duRmFjdHNJbnN0cnVjdGlvbnMoa25vd25GYWN0cyl9XG5cbiR7YnVpbGRQckNvbnRleHRJbnN0cnVjdGlvbnMocHJDb250ZXh0KX1cbmAudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBidWlsZEtub3duRmFjdHNJbnN0cnVjdGlvbnMoa25vd25GYWN0czogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgY29uc3QgdHJpbW1lZEZhY3RzID0ga25vd25GYWN0cz8udHJpbSgpO1xuICByZXR1cm4gdHJpbW1lZEZhY3RzXG4gICAgPyBgS25vd24gZmFjdHM6XG5+fn5+bWFya2Rvd25cbiR7dHJpbW1lZEZhY3RzfVxufn5+flxuYC50cmltKClcbiAgICA6ICcnO1xufVxuXG5mdW5jdGlvbiBidWlsZFByQ29udGV4dEluc3RydWN0aW9ucyhwckNvbnRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIHJldHVybiBwckNvbnRleHRcbiAgICA/IGBDdXJyZW50IHB1bGwgcmVxdWVzdCBjb250ZXh0Olxufn5+fnlhbWxcbiR7cHJDb250ZXh0LnRyaW0oKX1cbn5+fn5cbmAudHJpbSgpXG4gICAgOiAnJztcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBidWlsZFNjcmVlbnNob3RQcm9tcHQoaW5pdGlhbFVybDogc3RyaW5nLCBwYWdlTmFtZTogc3RyaW5nLCBzY3JlZW5zaG90RGVzY3JpcHRpb246IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNhbml0aXplZERlc2NyaXB0aW9uID0gc2NyZWVuc2hvdERlc2NyaXB0aW9uLnJlcGxhY2VBbGwoJ1xcbicsICcgJykucmVwbGFjZUFsbCgnXCInLCBcIidcIik7XG4gIHJldHVybiBgXG5Vc2UgXFxgcGxheXdyaWdodC1jbGlcXGAgc2tpbGwgdG8gdGFrZSBhIHNjcmVlbnNob3Qgb2YgXCIke3Nhbml0aXplZERlc2NyaXB0aW9ufVwiIGJ5IG5hdmlnYXRpbmcgZnJvbSAke2luaXRpYWxVcmx9IHRvIFwiJHtwYWdlTmFtZX1cIiBwYWdlLlxuXG5Gb2xsb3cgdGhpcyB3b3JrZmxvdzpcbjEuIE9wZW4gdGhlIGluaXRpYWwgcGFnZSBhdCAke2luaXRpYWxVcmx9LlxuMi4gTmF2aWdhdGUgZnJvbSB0aGF0IGluaXRpYWwgcGFnZSB1bnRpbCB5b3UgcmVhY2ggdGhlIHBhZ2UgaWRlbnRpZmllZCBhcyAke3BhZ2VOYW1lfS5cbiAgIC0gSWYgY29kZSBlcnJvcnMsIHJ1bnRpbWUgZmFpbHVyZXMsIG9yIGJyb2tlbiBVSSBmbG93cyBwcmV2ZW50IG5hdmlnYXRpb24sIGludmVzdGlnYXRlIHRoZSBjYXVzZSBpbiB0aGUgbG9jYWwgY29kZWJhc2UsIG1ha2UgdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBjb2RlIGZpeCwgYW5kIHZlcmlmeSB0aGF0IHRoZSBwYWdlIGNhbiBub3cgYmUgcmVhY2hlZCBiZWZvcmUgY29udGludWluZy5cbiAgIC0gSWYgeW91IGNhbm5vdCBmaXggdGhlIGVycm9ycywgcmVwb3J0IG9uIHRoZSBlcnJvcnMgdGhlbiBzdG9wLlxuMy4gQ2FwdHVyZSBhIHNjcmVlbnNob3QgdGhhdCBmb2N1c2VzIG9uIHRoaXMgdGFyZ2V0OiBcIiR7c2FuaXRpemVkRGVzY3JpcHRpb259XCIuXG40LiBLZWVwIHRoZSBnZW5lcmF0ZWQgaW1hZ2UgYXJ0aWZhY3QgYW5kIHJlcG9ydCB0aGUgc2NyZWVuc2hvdCBmaWxlIHBhdGggcGx1cyBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHdoYXQgd2FzIGNhcHR1cmVkLiBJZiB5b3UgaGFkIHRvIGZpeCBjb2RlIGZpcnN0LCBhbHNvIHN1bW1hcml6ZSB0aGUgZml4LlxuYC50cmltKCk7XG59XG4iLCJpbXBvcnQgeyBmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUgfSBmcm9tICcuLi9wci9wckNvbW1hbmRzLmpzJztcbmltcG9ydCB7IGN1cnJlbnRCYXNlQnJhbmNoIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZCB9IGZyb20gJy4vYmFzZUJyYW5jaERpZmZDb21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYmFzZUJyYW5jaCA9IGF3YWl0IGN1cnJlbnRCYXNlQnJhbmNoKCk7XG4gIGNvbnN0IG1lcmdlQmFzZUNvbW1hbmQgPSBidWlsZE1lcmdlQmFzZUNvbW1hbmQoYmFzZUJyYW5jaCk7XG4gIGNvbnN0IHByQ29udGV4dCA9IGF3YWl0IGZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSgpO1xuICByZXR1cm4gYFxuU2ltcGxpZnkgdGhlIGN1cnJlbnQgJHtwckNvbnRleHQgPyAncHVsbCByZXF1ZXN0JyA6ICdicmFuY2gnfSBhZ2FpbnN0IGl0cyBiYXNlIGJyYW5jaCB1c2luZyBcXGBnaXQgZGlmZiBcIiQoJHttZXJnZUJhc2VDb21tYW5kfSlcIlxcYC5cbkZpcnN0LCBpbnNwZWN0IHRoZSBkaWZmIGFuZCByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGVhY2ggY2hhbmdlZCBhcmVhLiBUaGlzIGluY2x1ZGVzIG5lYXJieSBmdW5jdGlvbnMsIHR5cGVzLCBjYWxsIHNpdGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbnMsIGFuZCBhbnkgb3RoZXIgZmlsZXMgdGhhdCBoZWxwIGRldGVybWluZSBpZiB0aGUgY2hhbmdlIGlzIHRydWx5IG5lY2Vzc2FyeS5cbkxldmVyYWdlIHRoaXMgY29udGV4dCB0byBpZGVudGlmeSByZWR1bmRhbmNpZXMgdGhhdCBjYW4gYmUgc2FmZWx5IHJlbW92ZWQgb3Igc2ltcGxpZmllZC4gTG9vayBmb3IgZHVwbGljYXRlIGxvZ2ljLCByZXBlYXRlZCBjb25kaXRpb25hbHMsIHVubmVjZXNzYXJ5IGFic3RyYWN0aW9ucywgb3ZlcmxhcHBpbmcgY29kZSBwYXRocywgZGVhZCBjb2RlLCBvciBlZGl0cyBtYWRlIG9ic29sZXRlIHVwb24gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5Qcmlvcml0aXplIHNpbXBsaWZpY2F0aW9ucyB0aGF0IHJlZHVjZSB0aGUgcmV2aWV3ZXIncyBidXJkZW4sIHN1Y2ggYXM6XG4tIFJlbW92aW5nIHJlZHVuZGFudCBlZGl0cyBvciBkZWFkIGNvZGUuXG4tIEVsaW1pbmF0aW5nIG9yIG1lcmdpbmcgZHVwbGljYXRlZCBsb2dpYyBkaXNjb3ZlcmVkIGJ5IGNvbXBhcmluZyB0aGUgZGlmZiB3aXRoIHJlbGF0ZWQgY29kZS5cbi0gRmxhdHRlbmluZyB1bm5lY2Vzc2FyaWx5IGNvbXBsZXggbG9naWMgaW50cm9kdWNlZCBpbiB0aGUgZGlmZiAoZS5nLiwgdXNpbmcgZWFybHkgcmV0dXJucyB0byByZWR1Y2UgbmVzdGluZywgc2ltcGxpZnlpbmcgYm9vbGVhbiBleHByZXNzaW9ucywgb3IgcmVtb3ZpbmcgcmVkdW5kYW50IHdyYXBwZXIgZnVuY3Rpb25zKS5cblxuQ29tbWl0IGFuZCBwdXNoIHlvdXIgY2hhbmdlcy4gQWZ0ZXJ3YXJkLCBzdW1tYXJpemUgdGhlIHJlZHVuZGFuY2llcyBvciB1bm5lY2Vzc2FyeSBjb21wbGV4aXR5IHlvdSBoYXZlIHJlbW92ZWQuXG5cbiR7cHJDb250ZXh0ID8gYEN1cnJlbnQgcHVsbCByZXF1ZXN0IGNvbnRleHQ6XFxufn5+fnlhbWxcXG4ke3ByQ29udGV4dC50cmltKCl9XFxufn5+fmAgOiAnJ31cbmAudHJpbSgpO1xufVxuIiwiaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydCc7XG5pbXBvcnQgeyBjcCwgbWtkdGVtcCwgcmVhZEZpbGUsIHJlYWRkaXIsIHJtLCB3cml0ZUZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5cbmNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAd2lsbGJvb3N0ZXIvYWdlbnQtc2tpbGxzJztcbmNvbnN0IFRFWFRfRklMRV9FWFRFTlNJT05fUkVHRVggPSAvXFwuKD86W2NtXT9banRdc3xqc29ufG1kfHlhP21sKSQvaTtcblxuaW50ZXJmYWNlIFBhY2thZ2VNZXRhZGF0YSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGFja2FnZVJvb3Qge1xuICBtZXRhZGF0YTogUGFja2FnZU1ldGFkYXRhO1xuICBwYXRoOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnN0YWxsUGFja2VkU2tpbGxzKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwYWNrYWdlUm9vdCA9IGF3YWl0IGZpbmRQYWNrYWdlUm9vdCgpO1xuICBjb25zdCBpbnN0YWxsU291cmNlUm9vdCA9IGF3YWl0IG1rZHRlbXAoam9pbih0bXBkaXIoKSwgJ2FnZW50LXNraWxscy1pbnN0YWxsLScpKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGNwKGpvaW4ocGFja2FnZVJvb3QucGF0aCwgJ3BhY2thZ2UuanNvbicpLCBqb2luKGluc3RhbGxTb3VyY2VSb290LCAncGFja2FnZS5qc29uJykpO1xuICAgIGF3YWl0IGNwKGpvaW4ocGFja2FnZVJvb3QucGF0aCwgJ3NraWxscycpLCBqb2luKGluc3RhbGxTb3VyY2VSb290LCAnc2tpbGxzJyksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHJlcGxhY2VMYXRlc3RTcGVjaWZpZXJXaXRoUGFja2FnZVZlcnNpb24oaW5zdGFsbFNvdXJjZVJvb3QsIHBhY2thZ2VSb290Lm1ldGFkYXRhKTtcblxuICAgIGF3YWl0IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoXG4gICAgICBbXG4gICAgICAgICdidW54JyxcbiAgICAgICAgJ3NraWxsc0BsYXRlc3QnLFxuICAgICAgICAnYWRkJyxcbiAgICAgICAgaW5zdGFsbFNvdXJjZVJvb3QsXG4gICAgICAgICctLWdsb2JhbCcsXG4gICAgICAgICctLXllcycsXG4gICAgICAgICctLXNraWxsJyxcbiAgICAgICAgJyonLFxuICAgICAgICAnLS1hZ2VudCcsXG4gICAgICAgICdjbGF1ZGUtY29kZScsXG4gICAgICAgICctLWFnZW50JyxcbiAgICAgICAgJ2NvZGV4JyxcbiAgICAgICAgJy0tYWdlbnQnLFxuICAgICAgICAnZ2VtaW5pLWNsaScsXG4gICAgICBdLFxuICAgICAge1xuICAgICAgICB3YWl0TWVzc2FnZTogJ0luc3RhbGxpbmcgcGFja2FnZWQgc2tpbGxzIGdsb2JhbGx5LicsXG4gICAgICB9XG4gICAgKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBybShpbnN0YWxsU291cmNlUm9vdCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpbmRQYWNrYWdlUm9vdCgpOiBQcm9taXNlPFBhY2thZ2VSb290PiB7XG4gIGxldCBjdXJyZW50RGlyID0gZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gam9pbihjdXJyZW50RGlyLCAncGFja2FnZS5qc29uJyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhY2thZ2VNZXRhZGF0YSA9IHJlYWRQYWNrYWdlTWV0YWRhdGEocGFja2FnZUpzb25QYXRoLCBhd2FpdCByZWFkRmlsZShwYWNrYWdlSnNvblBhdGgsICd1dGY4JykpO1xuICAgICAgaWYgKHBhY2thZ2VNZXRhZGF0YS5uYW1lID09PSBQQUNLQUdFX05BTUUpIHtcbiAgICAgICAgcmV0dXJuIHsgbWV0YWRhdGE6IHBhY2thZ2VNZXRhZGF0YSwgcGF0aDogY3VycmVudERpciB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gS2VlcCB3YWxraW5nIHVwIHVudGlsIHRoZSBwdWJsaXNoZWQgcGFja2FnZSByb290IGlzIGZvdW5kLlxuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudERpciA9IGRpcm5hbWUoY3VycmVudERpcik7XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGN1cnJlbnREaXIsIHBhcmVudERpciwgYEZhaWxlZCB0byBmaW5kICR7UEFDS0FHRV9OQU1FfSBwYWNrYWdlIHJvb3RgKTtcbiAgICBjdXJyZW50RGlyID0gcGFyZW50RGlyO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRQYWNrYWdlTWV0YWRhdGEocGFja2FnZUpzb25QYXRoOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZyk6IFBhY2thZ2VNZXRhZGF0YSB7XG4gIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBQYWNrYWdlTWV0YWRhdGE7XG4gIGFzc2VydC5vayhwYWNrYWdlSnNvbi5uYW1lICYmIHBhY2thZ2VKc29uLnZlcnNpb24sIGBGYWlsZWQgdG8gcmVhZCBuYW1lIG9yIHZlcnNpb24gZnJvbSAke3BhY2thZ2VKc29uUGF0aH1gKTtcbiAgcmV0dXJuIHBhY2thZ2VKc29uO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXBsYWNlTGF0ZXN0U3BlY2lmaWVyV2l0aFBhY2thZ2VWZXJzaW9uKHJvb3Q6IHN0cmluZywgcGFja2FnZU1ldGFkYXRhOiBQYWNrYWdlTWV0YWRhdGEpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgbGF0ZXN0SW5zdGFsbFNwZWNpZmllciA9IGAke3BhY2thZ2VNZXRhZGF0YS5uYW1lfUBsYXRlc3RgO1xuICBjb25zdCB2ZXJzaW9uZWRJbnN0YWxsU3BlY2lmaWVyID0gYCR7cGFja2FnZU1ldGFkYXRhLm5hbWV9QCR7cGFja2FnZU1ldGFkYXRhLnZlcnNpb259YDtcbiAgYXdhaXQgcmVwbGFjZUluRmlsZXMocm9vdCwgKGNvbnRlbnQpID0+IGNvbnRlbnQucmVwbGFjZUFsbChsYXRlc3RJbnN0YWxsU3BlY2lmaWVyLCB2ZXJzaW9uZWRJbnN0YWxsU3BlY2lmaWVyKSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VJbkZpbGVzKHBhdGg6IHN0cmluZywgcmVwbGFjZUNvbnRlbnQ6IChjb250ZW50OiBzdHJpbmcpID0+IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgcmVhZGRpcihwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcblxuICAvLyBLZWVwIGluc3RhbGwtdGltZSBmaWxlIGRlc2NyaXB0b3JzIGJvdW5kZWQgd2hpbGUgc3RhZ2luZyB0aGUgbG9jYWwgc2tpbGwgZmlsZXMuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGlmICghZW50cnkuaXNGaWxlKCkgfHwgIVRFWFRfRklMRV9FWFRFTlNJT05fUkVHRVgudGVzdChlbnRyeS5uYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgZW50cnlQYXRoID0gam9pbihlbnRyeS5wYXJlbnRQYXRoLCBlbnRyeS5uYW1lKTtcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoZW50cnlQYXRoLCAndXRmOCcpO1xuICAgIGNvbnN0IHJlcGxhY2VkQ29udGVudCA9IHJlcGxhY2VDb250ZW50KGNvbnRlbnQpO1xuICAgIGlmIChyZXBsYWNlZENvbnRlbnQgIT09IGNvbnRlbnQpIHtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShlbnRyeVBhdGgsIHJlcGxhY2VkQ29udGVudCk7XG4gICAgfVxuICB9XG59XG4iLCIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBzdGRpbiBhcyBwcm9jZXNzU3RkaW4gfSBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZSwgcnVuQWdlbnRDb21tYW5kLCBydW5BbGxBZ2VudENvbW1hbmRzIH0gZnJvbSAnLi9hZ2VudC9hZ2VudENvbW1hbmRzLmpzJztcbmltcG9ydCB7IHVwZGF0ZUJ1bkRlcGVuZGVuY2llcyB9IGZyb20gJy4vZGVwcy91cGRhdGVCdW5EZXBlbmRlbmNpZXMuanMnO1xuaW1wb3J0IHtcbiAgY2hlY2tQckNpLFxuICBmZXRjaElzc3VlTWVzc2FnZXMsXG4gIGZldGNoUHJNZXNzYWdlcyxcbiAgbGlzdFByUmV2aWV3VGhyZWFkcyxcbiAgbm9ybWFsaXplSXNzdWVOdW1iZXIsXG4gIG9wZW5QcixcbiAgcmVhZFJlcGxpZXNGcm9tU3RkaW4sXG4gIHJlYWRSZXF1aXJlZFN0ZGluVGV4dCxcbiAgcmVhZFN0ZGluVGV4dCxcbiAgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyxcbiAgdXBkYXRlUHIsXG59IGZyb20gJy4vcHIvcHJDb21tYW5kcy5qcyc7XG5pbXBvcnQgeyBidWlsZFBsYW5Qcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvcGxhblByb21wdC5qcyc7XG5pbXBvcnQgeyBidWlsZFJldmlld1Byb21wdCB9IGZyb20gJy4vcHJvbXB0cy9yZXZpZXdQcm9tcHQuanMnO1xuaW1wb3J0IHsgYnVpbGRTY3JlZW5zaG90UHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3NjcmVlbnNob3RQcm9tcHQuanMnO1xuaW1wb3J0IHsgYnVpbGRTaW1wbGlmeVByb21wdCB9IGZyb20gJy4vcHJvbXB0cy9zaW1wbGlmeVByb21wdC5qcyc7XG5pbXBvcnQgeyBpbnN0YWxsUGFja2VkU2tpbGxzIH0gZnJvbSAnLi9za2lsbHMvaW5zdGFsbFNraWxscy5qcyc7XG5cbnR5cGUgUmV2aWV3QWdlbnRNb2RlID0gJ2FsbCcgfCAnY29kZXgnIHwgJ2NsYXVkZScgfCAnZ2VtaW5pJztcblxuaW50ZXJmYWNlIFJldmlld0NvbW1hbmRPcHRpb25zIHtcbiAgYWdlbnQ6IFJldmlld0FnZW50TW9kZTtcbiAgaW50ZXJhY3RpdmU/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSW50ZXJhY3RpdmVDb21tYW5kT3B0aW9ucyB7XG4gIGludGVyYWN0aXZlPzogYm9vbGVhbjtcbn1cblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW0ubmFtZSgnYWdlbnQtc2tpbGxzJykuZGVzY3JpcHRpb24oJ0NMSSBjb21tYW5kcyBmb3IgdGhlIHNraWxscyBpbiB0aGlzIHJlcG9zaXRvcnknKS5zaG93SGVscEFmdGVyRXJyb3IoKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnaW5zdGFsbC1za2lsbHMnKVxuICAuZGVzY3JpcHRpb24oJ0luc3RhbGwgYWxsIHBhY2thZ2VkIHNraWxscyBnbG9iYWxseSBmb3IgQ2xhdWRlIENvZGUsIENvZGV4LCBhbmQgR2VtaW5pIENMSScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgaW5zdGFsbFBhY2tlZFNraWxscygpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCdEb25lXFxuJyk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCd1cGRhdGUtYnVuLWRlcHMnKVxuICAuZGVzY3JpcHRpb24oJ1VwZGF0ZSBhbGwgQnVuIGRlcGVuZGVuY2llcyBpbiB0aGUgcm9vdCBwYWNrYWdlIGFuZCB3b3Jrc3BhY2UgcGFja2FnZXMnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHVwZGF0ZUJ1bkRlcGVuZGVuY2llcygpO1xuICB9KTtcblxuYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCh7XG4gIG5hbWU6ICdhZ2VudCcsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIHRoZSBzZWxlY3RlZCBhZ2VudCB3aXRoIHRoZSBzcGVjaWZpZWQgcHJvbXB0JyxcbiAgb3B0aW9uRGVzY3JpcHRpb246ICdVc2UgYW4gYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgYXJndW1lbnROYW1lOiAnPHByb21wdD4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnUHJvbXB0IHRvIHBhc3MgdG8gdGhlIGFnZW50JyxcbiAgcnVuOiAoYWdlbnQsIHByb21wdCwgb3B0aW9ucykgPT4gcnVuUHJvbXB0QWdlbnRDb21tYW5kKGFnZW50LCBwcm9tcHQsIG9wdGlvbnMpLFxufSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3JldmlldycpXG4gIC5kZXNjcmlwdGlvbignUnVuIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcpXG4gIC5hZGRPcHRpb24oXG4gICAgbmV3IE9wdGlvbignLS1hZ2VudCA8YWdlbnQ+JywgJ1VzZSBhIHJldmlldyBhZ2VudCcpXG4gICAgICAuY2hvaWNlcyhbJ2FsbCcsICdjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10pXG4gICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeSgpXG4gIClcbiAgLm9wdGlvbignLS1pbnRlcmFjdGl2ZScsICdSdW4gdGhlIHNlbGVjdGVkIGFnZW50IHRocm91Z2ggaXRzIGludGVyYWN0aXZlIHRlcm1pbmFsIFVJJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiBSZXZpZXdDb21tYW5kT3B0aW9ucykgPT4ge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IHJ1blJldmlld0NvbW1hbmQob3B0aW9ucy5hZ2VudCwgb3B0aW9ucykpO1xuICB9KTtcblxuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctY29kZXgnLCAnUnVuIENvZGV4IHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsIChvcHRpb25zKSA9PlxuICBydW5SZXZpZXdDb21tYW5kKCdjb2RleCcsIG9wdGlvbnMpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAob3B0aW9ucykgPT5cbiAgcnVuUmV2aWV3Q29tbWFuZCgnY2xhdWRlJywgb3B0aW9ucylcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKG9wdGlvbnMpID0+XG4gIHJ1blJldmlld0NvbW1hbmQoJ2dlbWluaScsIG9wdGlvbnMpXG4pO1xuXG5hc3luYyBmdW5jdGlvbiBydW5SZXZpZXdDb21tYW5kKG1vZGU6IFJldmlld0FnZW50TW9kZSwgb3B0aW9uczogSW50ZXJhY3RpdmVDb21tYW5kT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJldmlvdXNWZXJpZmllZEZhY3RzID0gYXdhaXQgcmVhZFJldmlld1ZlcmlmaWVkRmFjdHMoKTtcbiAgY29uc3QgcHJvbXB0ID0gYnVpbGRSZXZpZXdQcm9tcHQocHJldmlvdXNWZXJpZmllZEZhY3RzKTtcbiAgcmV0dXJuIG1vZGUgPT09ICdhbGwnXG4gICAgPyBydW5BbGxBZ2VudENvbW1hbmRzKHByb21wdCwge1xuICAgICAgICBhbGxBZ2VudHNMYWJlbDogJ3JldmlldyBhZ2VudHMnLFxuICAgICAgICBpbnRlcmFjdGl2ZTogb3B0aW9ucy5pbnRlcmFjdGl2ZSxcbiAgICAgICAgbWFwT3V0cHV0OiAoX2FnZW50LCBvdXRwdXQpID0+IChjb250YWluc05vQ29uY2VyblNlbnRlbmNlKG91dHB1dCkgPyB1bmRlZmluZWQgOiBvdXRwdXQpLFxuICAgICAgfSlcbiAgICA6IHJ1bkFnZW50Q29tbWFuZChtb2RlLCBwcm9tcHQsIG9wdGlvbnMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkUmV2aWV3VmVyaWZpZWRGYWN0cygpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBpZiAocHJvY2Vzc1N0ZGluLmlzVFRZKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRTdGRpblRleHQoKTtcbiAgcmV0dXJuIGlucHV0Lmxlbmd0aCA+IDAgPyBpbnB1dCA6IHVuZGVmaW5lZDtcbn1cblxuYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCh7XG4gIG5hbWU6ICdwbGFuJyxcbiAgZGVzY3JpcHRpb246ICdSdW4gcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlIHdpdGggdGhlIHNlbGVjdGVkIGFnZW50JyxcbiAgb3B0aW9uRGVzY3JpcHRpb246ICdVc2UgYSBwbGFubmluZyBhZ2VudCcsXG4gIGNob2ljZXM6IFsnYWxsJywgJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcsXG4gIHJ1bjogKG1vZGUsIGlzc3VlUmVmZXJlbmNlLCBvcHRpb25zKSA9PlxuICAgIG1vZGUgPT09ICdhbGwnXG4gICAgICA/IHJ1bkFsbEFnZW50Q29tbWFuZHMoYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSksIHtcbiAgICAgICAgICBhbGxBZ2VudHNMYWJlbDogJ3BsYW5uaW5nIGFnZW50cycsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IG9wdGlvbnMuaW50ZXJhY3RpdmUsXG4gICAgICAgIH0pXG4gICAgICA6IHJ1bkFnZW50Q29tbWFuZChtb2RlLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSwgb3B0aW9ucyksXG59KTtcblxuYWRkQWdlbnRDb21tYW5kKCdwbGFuLWNvZGV4JywgJ1J1biBDb2RleCBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChpc3N1ZVJlZmVyZW5jZSwgb3B0aW9ucykgPT5cbiAgICBydW5BZ2VudENvbW1hbmQoJ2NvZGV4JywgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSksIG9wdGlvbnMpLFxufSk7XG5hZGRBZ2VudENvbW1hbmQoJ3BsYW4tY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChpc3N1ZVJlZmVyZW5jZSwgb3B0aW9ucykgPT5cbiAgICBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpLCBvcHRpb25zKSxcbn0pO1xuYWRkQWdlbnRDb21tYW5kKCdwbGFuLWdlbWluaScsICdSdW4gR2VtaW5pIENMSSBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChpc3N1ZVJlZmVyZW5jZSwgb3B0aW9ucykgPT5cbiAgICBydW5BZ2VudENvbW1hbmQoJ2dlbWluaScsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpLCBvcHRpb25zKSxcbn0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdzY3JlZW5zaG90JylcbiAgLmRlc2NyaXB0aW9uKCdUYWtlIGEgc2NyZWVuc2hvdCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCB2aWEgcGxheXdyaWdodC1jbGknKVxuICAuYXJndW1lbnQoJzxpbml0aWFsLXVybD4nLCAnSW5pdGlhbCBVUkwgdG8gb3BlbiBiZWZvcmUgbmF2aWdhdGluZycpXG4gIC5hcmd1bWVudCgnPHBhZ2UtbmFtZT4nLCAnUGFnZSBuYW1lIHRvIG5hdmlnYXRlIHRvIGZyb20gdGhlIGluaXRpYWwgcGFnZScpXG4gIC5hcmd1bWVudCgnPGRlc2NyaXB0aW9uPicsICdEZXNjcmlwdGlvbiBvZiB0aGUgcGFydCB0byBjYXB0dXJlIGluIHRoZSBzY3JlZW5zaG90JylcbiAgLmFkZE9wdGlvbihcbiAgICBuZXcgT3B0aW9uKCctLWFnZW50IDxhZ2VudD4nLCAnVXNlIGEgc2NyZWVuc2hvdCBhZ2VudCcpLmNob2ljZXMoWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10pLm1ha2VPcHRpb25NYW5kYXRvcnkoKVxuICApXG4gIC5vcHRpb24oJy0taW50ZXJhY3RpdmUnLCAnUnVuIHRoZSBzZWxlY3RlZCBhZ2VudCB0aHJvdWdoIGl0cyBpbnRlcmFjdGl2ZSB0ZXJtaW5hbCBVSScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihcbiAgICBhc3luYyAoXG4gICAgICBpbml0aWFsVXJsOiBzdHJpbmcsXG4gICAgICBwYWdlTmFtZTogc3RyaW5nLFxuICAgICAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgICAgIG9wdGlvbnM6IHsgYWdlbnQ6ICdjb2RleCcgfCAnY2xhdWRlJyB8ICdnZW1pbmknOyBpbnRlcmFjdGl2ZT86IGJvb2xlYW4gfVxuICAgICkgPT4ge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoXG4gICAgICAgIGF3YWl0IHJ1bkFnZW50Q29tbWFuZChvcHRpb25zLmFnZW50LCBidWlsZFNjcmVlbnNob3RQcm9tcHQoaW5pdGlhbFVybCwgcGFnZU5hbWUsIGRlc2NyaXB0aW9uKSwgb3B0aW9ucylcbiAgICAgICk7XG4gICAgfVxuICApO1xuXG5hZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kKHtcbiAgbmFtZTogJ3NpbXBsaWZ5JyxcbiAgZGVzY3JpcHRpb246ICdSdW4gUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2ggd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQnLFxuICBvcHRpb25EZXNjcmlwdGlvbjogJ1VzZSBhIHNpbXBsaWZ5IGFnZW50JyxcbiAgY2hvaWNlczogWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIHJ1bjogKGFnZW50LCBfYXJndW1lbnQsIG9wdGlvbnMpID0+IHJ1bkFnZW50Q29tbWFuZChhZ2VudCwgYnVpbGRTaW1wbGlmeVByb21wdCgpLCBvcHRpb25zKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWNvZGV4JywgJ1J1biBDb2RleCBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsIChvcHRpb25zKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NvZGV4JywgYnVpbGRTaW1wbGlmeVByb21wdCgpLCBvcHRpb25zKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgnc2ltcGxpZnktY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsIChvcHRpb25zKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSwgb3B0aW9ucylcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWdlbWluaScsICdSdW4gR2VtaW5pIENMSSBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsIChvcHRpb25zKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2dlbWluaScsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSwgb3B0aW9ucylcbik7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ29wZW4tcHInKVxuICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIHB1bGwgcmVxdWVzdCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoJylcbiAgLmFyZ3VtZW50KCc8dGl0bGU+JywgJ1B1bGwgcmVxdWVzdCB0aXRsZScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAodGl0bGU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZWFkU3RkaW5UZXh0KCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgb3BlblByKHsgYm9keTogYm9keSB8fCB1bmRlZmluZWQsIHRpdGxlIH0pO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAke291dHB1dH1cXG5gKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3VwZGF0ZS1wcicpXG4gIC5kZXNjcmlwdGlvbignVXBkYXRlIHRoZSBjdXJyZW50IHB1bGwgcmVxdWVzdCB0aXRsZSBhbmQgYm9keScpXG4gIC5hcmd1bWVudCgnPHRpdGxlPicsICdQdWxsIHJlcXVlc3QgdGl0bGUnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKHRpdGxlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVhZFJlcXVpcmVkU3RkaW5UZXh0KCdFcnJvcjogUFIgYm9keSBpbnB1dCBpcyByZXF1aXJlZCBvbiBzdGRpbicpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHVwZGF0ZVByKHsgYm9keSwgdGl0bGUgfSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7b3V0cHV0fVxcbmApO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnY2hlY2stcHItY2knKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgdGhlIGxhdGVzdCB0ZXN0LXJlbGF0ZWQgQ0kgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja1ByQ2koKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShyZXN1bHQub3V0cHV0KTtcbiAgICBwcm9jZXNzLmV4aXQocmVzdWx0LmV4aXRDb2RlKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2ZldGNoLWlzc3VlJylcbiAgLmRlc2NyaXB0aW9uKCdGZXRjaCBhbiBpc3N1ZSBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBhcyBZQU1MJylcbiAgLmFyZ3VtZW50KCc8aXNzdWU+JywgJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChpc3N1ZVJlZmVyZW5jZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlUmVmZXJlbmNlKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnZmV0Y2gtcHInKVxuICAuZGVzY3JpcHRpb24oJ0ZldGNoIGEgcHVsbCByZXF1ZXN0IGJvZHkgYW5kIHRpbWVsaW5lIG1lc3NhZ2VzIGFzIFlBTUwsIGV4Y2x1ZGluZyBpbmxpbmUgY29tbWVudHMnKVxuICAuYXJndW1lbnQoJ1twcl0nLCAnR2l0SHViIHB1bGwgcmVxdWVzdCBudW1iZXIgb3IgVVJMOyBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBicmFuY2ggcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChwclJlZmVyZW5jZT86IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZldGNoUHJNZXNzYWdlcyhwclJlZmVyZW5jZSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2xpc3QtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBsaXN0UHJSZXZpZXdUaHJlYWRzKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3Jlc29sdmUtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ1JlcGx5IHRvIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMgYW5kIHJlc29sdmUgdGhlbScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVwbGllcyA9IGF3YWl0IHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxuYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHByb2Nlc3MuYXJndik7XG5cbmZ1bmN0aW9uIGFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQ8VE1vZGUgZXh0ZW5kcyBzdHJpbmc+KGNvbmZpZzoge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIG9wdGlvbkRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNob2ljZXM6IFtUTW9kZSwgLi4uVE1vZGVbXV07XG4gIGFyZ3VtZW50TmFtZT86IHN0cmluZztcbiAgYXJndW1lbnREZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcnVuOiAobW9kZTogVE1vZGUsIGFyZ3VtZW50OiBzdHJpbmcsIG9wdGlvbnM6IEludGVyYWN0aXZlQ29tbWFuZE9wdGlvbnMpID0+IFByb21pc2U8c3RyaW5nPjtcbn0pOiB2b2lkIHtcbiAgY29uc3QgY29tbWFuZCA9IHByb2dyYW0uY29tbWFuZChjb25maWcubmFtZSkuZGVzY3JpcHRpb24oY29uZmlnLmRlc2NyaXB0aW9uKS5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSk7XG4gIGlmIChjb25maWcuYXJndW1lbnROYW1lKSB7XG4gICAgY29tbWFuZC5hcmd1bWVudChjb25maWcuYXJndW1lbnROYW1lLCBjb25maWcuYXJndW1lbnREZXNjcmlwdGlvbik7XG4gIH1cblxuICBjb21tYW5kXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFnZW50IDxhZ2VudD4nLCBjb25maWcub3B0aW9uRGVzY3JpcHRpb24pLmNob2ljZXMoY29uZmlnLmNob2ljZXMpLm1ha2VPcHRpb25NYW5kYXRvcnkoKSlcbiAgICAub3B0aW9uKCctLWludGVyYWN0aXZlJywgJ1J1biB0aGUgc2VsZWN0ZWQgYWdlbnQgdGhyb3VnaCBpdHMgaW50ZXJhY3RpdmUgdGVybWluYWwgVUknKVxuICAgIC5hY3Rpb24oYXN5bmMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgICAgY29uc3QgW2FyZ3VtZW50T3JPcHRpb25zLCBtYXliZU9wdGlvbnNdID0gYXJncyBhcyBbXG4gICAgICAgIHN0cmluZyB8IHsgYWdlbnQ6IFRNb2RlOyBpbnRlcmFjdGl2ZT86IGJvb2xlYW4gfSxcbiAgICAgICAgeyBhZ2VudDogVE1vZGU7IGludGVyYWN0aXZlPzogYm9vbGVhbiB9IHwgdW5kZWZpbmVkLFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGFyZ3VtZW50ID0gdHlwZW9mIGFyZ3VtZW50T3JPcHRpb25zID09PSAnc3RyaW5nJyA/IGFyZ3VtZW50T3JPcHRpb25zIDogJyc7XG4gICAgICBjb25zdCBvcHRpb25zID0gKHR5cGVvZiBhcmd1bWVudE9yT3B0aW9ucyA9PT0gJ3N0cmluZycgPyBtYXliZU9wdGlvbnMgOiBhcmd1bWVudE9yT3B0aW9ucykgYXMge1xuICAgICAgICBhZ2VudDogVE1vZGU7XG4gICAgICAgIGludGVyYWN0aXZlPzogYm9vbGVhbjtcbiAgICAgIH07XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBjb25maWcucnVuKG9wdGlvbnMuYWdlbnQsIGFyZ3VtZW50LCBvcHRpb25zKSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEFnZW50Q29tbWFuZChcbiAgbmFtZTogc3RyaW5nLFxuICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICBjb25maWdPclJ1bjpcbiAgICB8ICgob3B0aW9uczogSW50ZXJhY3RpdmVDb21tYW5kT3B0aW9ucykgPT4gUHJvbWlzZTxzdHJpbmc+KVxuICAgIHwge1xuICAgICAgICBhcmd1bWVudE5hbWU6IHN0cmluZztcbiAgICAgICAgYXJndW1lbnREZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICAgICAgcnVuOiAoYXJndW1lbnQ6IHN0cmluZywgb3B0aW9uczogSW50ZXJhY3RpdmVDb21tYW5kT3B0aW9ucykgPT4gUHJvbWlzZTxzdHJpbmc+O1xuICAgICAgfVxuKTogdm9pZCB7XG4gIGNvbnN0IGNvbW1hbmQgPSBwcm9ncmFtXG4gICAgLmNvbW1hbmQobmFtZSlcbiAgICAuZGVzY3JpcHRpb24oZGVzY3JpcHRpb24pXG4gICAgLm9wdGlvbignLS1pbnRlcmFjdGl2ZScsICdSdW4gdGhlIHNlbGVjdGVkIGFnZW50IHRocm91Z2ggaXRzIGludGVyYWN0aXZlIHRlcm1pbmFsIFVJJylcbiAgICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpO1xuXG4gIGlmICh0eXBlb2YgY29uZmlnT3JSdW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb21tYW5kLmFjdGlvbihhc3luYyAob3B0aW9uczogSW50ZXJhY3RpdmVDb21tYW5kT3B0aW9ucykgPT4ge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnT3JSdW4ob3B0aW9ucykpO1xuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbW1hbmRcbiAgICAuYXJndW1lbnQoY29uZmlnT3JSdW4uYXJndW1lbnROYW1lLCBjb25maWdPclJ1bi5hcmd1bWVudERlc2NyaXB0aW9uKVxuICAgIC5hY3Rpb24oYXN5bmMgKGFyZ3VtZW50OiBzdHJpbmcsIG9wdGlvbnM6IEludGVyYWN0aXZlQ29tbWFuZE9wdGlvbnMpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IGNvbmZpZ09yUnVuLnJ1bihhcmd1bWVudCwgb3B0aW9ucykpO1xuICAgIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5Qcm9tcHRBZ2VudENvbW1hbmQoXG4gIGFnZW50OiAnY29kZXgnIHwgJ2NsYXVkZScgfCAnZ2VtaW5pJyxcbiAgcHJvbXB0OiBzdHJpbmcsXG4gIG9wdGlvbnM6IEludGVyYWN0aXZlQ29tbWFuZE9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGV4dHJhY3RNYXJrZG93bkNvZGVCbG9jayhhd2FpdCBydW5BZ2VudENvbW1hbmQoYWdlbnQsIGJ1aWxkQWdlbnRQcm9tcHQocHJvbXB0KSwgb3B0aW9ucyksIHtcbiAgICBmYWxsYmFja1RvT3V0cHV0OiBvcHRpb25zLmludGVyYWN0aXZlID09PSB0cnVlLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBZ2VudFByb21wdChwcm9tcHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtwcm9tcHR9XG5cblJlcG9ydCBvbiB0aGUgcmVzdWx0IHdpdGggYSBtYXJrZG93biBjb2RlIGJsb2NrIHdpdGggdHJpcGxlIGJhY2t0aWNrcy5gO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0TWFya2Rvd25Db2RlQmxvY2sob3V0cHV0OiBzdHJpbmcsIG9wdGlvbnM6IHsgZmFsbGJhY2tUb091dHB1dD86IGJvb2xlYW4gfSA9IHt9KTogc3RyaW5nIHtcbiAgY29uc3QgY29kZUJsb2NrTWF0Y2hlcyA9IFsuLi5vdXRwdXQubWF0Y2hBbGwoL2BgYFteXFxuYF0qXFxuPyhbXFxzXFxTXSo/KWBgYC9nKV07XG4gIGNvbnN0IGxhc3RDb2RlQmxvY2tDb250ZW50ID0gY29kZUJsb2NrTWF0Y2hlcy5hdCgtMSk/LlsxXTtcbiAgaWYgKCFsYXN0Q29kZUJsb2NrQ29udGVudCkge1xuICAgIGlmIChvcHRpb25zLmZhbGxiYWNrVG9PdXRwdXQpIHtcbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignQWdlbnQgb3V0cHV0IGRpZCBub3QgY29udGFpbiBhIG1hcmtkb3duIGNvZGUgYmxvY2sgd2l0aCB0cmlwbGUgYmFja3RpY2tzLicpO1xuICB9XG4gIHJldHVybiBsYXN0Q29kZUJsb2NrQ29udGVudDtcbn1cbiJdLCJuYW1lcyI6WyJERUZBVUxUX1BST0NFU1NfVElNRU9VVF9NUyIsIlBST0NFU1NfQ0xFQU5VUF9TSUdOQUxTIiwiYWN0aXZlUHJvY2Vzc2VzIiwiU2V0IiwiY2xlYW51cEhhbmRsZXJzSW5zdGFsbGVkIiwicnVuQ29tbWFuZFdpdGhQcm9ncmVzcyIsIl94IiwiX3gyIiwiX3J1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MiLCJhcHBseSIsInRoaXMiLCJhcmd1bWVudHMiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvciIsIm0iLCJfY2FsbGVlIiwiY29tbWFuZCIsIm9wdGlvbnMiLCJfY29tbWFuZCQiLCJwcm9jIiwicHJvY2Vzc1RpbWVvdXQiLCJzdG9wV2FpdFByb2dyZXNzIiwiY29tbWFuZExvZ2dlciIsIl95aWVsZCRQcm9taXNlJGFsbCIsIl95aWVsZCRQcm9taXNlJGFsbDIiLCJzdGRvdXQiLCJzdGRlcnIiLCJleGl0Q29kZSIsIm91dHB1dCIsInciLCJfY29udGV4dCIsInAiLCJuIiwic3Bhd24iLCJzbGljZSIsImRldGFjaGVkIiwic3RkaW8iLCJjcmVhdGVQcm9jZXNzVGltZW91dCIsInRpbWVvdXRNcyIsImNyZWF0ZVdhaXRQcm9ncmVzcyIsIndhaXRNZXNzYWdlIiwid2FpdEludGVydmFsU2Vjb25kcyIsImNyZWF0ZUNvbW1hbmRMb2dnZXIiLCJsb2dGaWxlUGF0aCIsInYiLCJQcm9taXNlIiwiYWxsIiwic3RyZWFtVG9UZXh0IiwiY2h1bmsiLCJ3cml0ZSIsInJlc29sdmUiLCJyZWplY3QiLCJvbmNlIiwiY29kZSIsIl9zbGljZWRUb0FycmF5IiwidGltZWRPdXQiLCJFcnJvciIsInRpbWVvdXRFcnJvck1lc3NhZ2UiLCJjb25jYXQiLCJhIiwiam9pbiIsImNsb3NlIiwiY2xlYXIiLCJmIiwibWVzc2FnZSIsImZvcm1hdER1cmF0aW9uIiwibGVuZ3RoIiwibWlsbGlzZWNvbmRzIiwiZm9yY2VLaWxsVGltZXIiLCJhZGQiLCJfc3RlcDIiLCJfaXRlcmF0b3IyIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfbG9vcCIsInNpZ25hbCIsInZhbHVlIiwicHJvY2VzcyIsIl9zdGVwMyIsIl9pdGVyYXRvcjMiLCJzIiwiZG9uZSIsImtpbGxQcm9jZXNzIiwiZXJyIiwiZSIsImV4aXQiLCJzaWduYWxOdW1iZXIiLCJpbnN0YWxsQ2xlYW51cEhhbmRsZXJzIiwidGltZW91dCIsInNldFRpbWVvdXQiLCJ1bnJlZiIsImNsZWFyVGltZW91dCIsInBpZCIsImtpbGwiLCJfdW51c2VkIiwiX3gzIiwiX3g0IiwiX3N0cmVhbVRvVGV4dCIsIl9jYWxsZWUyIiwic3RyZWFtIiwib25DaHVuayIsImNodW5rcyIsImRlY29kZXIiLCJfaXRlcmF0b3JBYnJ1cHRDb21wbGV0aW9uIiwiX2RpZEl0ZXJhdG9yRXJyb3IiLCJfaXRlcmF0b3JFcnJvciIsIl9pdGVyYXRvciIsIl9zdGVwIiwiY2h1bmtUZXh0IiwiZmluYWxDaHVuayIsIl90IiwiX2NvbnRleHQyIiwiVGV4dERlY29kZXIiLCJfYXN5bmNJdGVyYXRvciIsIm5leHQiLCJkZWNvZGUiLCJVaW50OEFycmF5IiwicHVzaCIsIndyaXRlUHJvZ3Jlc3MiLCJkb3RDb3VudCIsInRpbWVyIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwiX3g1IiwiX2NyZWF0ZUNvbW1hbmRMb2dnZXIiLCJfY2FsbGVlNiIsIndhcm4iLCJfdDIiLCJfY29udGV4dDYiLCJfY2xvc2UiLCJfY2FsbGVlMyIsIl9jb250ZXh0MyIsImVycm9yIiwiU3RyaW5nIiwibWtkaXIiLCJkaXJuYW1lIiwicmVjdXJzaXZlIiwiY3JlYXRlV3JpdGVTdHJlYW0iLCJmbGFncyIsIm9uIiwid3JpdGFibGUiLCJfY2xvc2UyIiwiX2NhbGxlZTQiLCJfY29udGV4dDQiLCJlbmQiLCJfY2xvc2UzIiwiX2NhbGxlZTUiLCJfY29udGV4dDUiLCJOT19DT05DRVJOX01FU1NBR0UiLCJBR0VOVF9OQU1FUyIsIkNPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVgiLCJSZWdFeHAiLCJERUZBVUxUX0FMTF9BR0VOVF9DT01NQU5EX09QVElPTlMiLCJhbGxBZ2VudHNMYWJlbCIsIlRFUk1JTkFMX0JFTEwiLCJmcm9tQ29kZVBvaW50IiwiVEVSTUlOQUxfRVNDQVBFIiwiVEVSTUlOQUxfQ1NJX0NVUlNPUl9GT1JXQVJEX1JFR0VYIiwiVEVSTUlOQUxfQ1NJX1JFR0VYIiwiVEVSTUlOQUxfT1NDX1JFR0VYIiwiR0VNSU5JX01PREVMIiwiSU5URVJBQ1RJVkVfUkVBRFlfUEFUVEVSTlMiLCJJTlRFUkFDVElWRV9TRVRVUF9TQ1JFRU5TIiwiaW5wdXQiLCJrZXkiLCJwYXR0ZXJuIiwicnVuQWxsQWdlbnRDb21tYW5kcyIsIl9ydW5BbGxBZ2VudENvbW1hbmRzIiwicHJvbXB0IiwicmVzb2x2ZWRQcm9tcHQiLCJhZ2VudE91dHB1dHNXaXRoU2tpcHBlZFJlc3VsdHMiLCJhZ2VudE91dHB1dHMiLCJ3YWl0TWVzc2FnZUZvciIsIm1hcCIsImFnZW50IiwiX29wdGlvbnMkbWFwT3V0cHV0IiwiX29wdGlvbnMiLCJ0cmltbWVkT3V0cHV0IiwibWFwcGVkT3V0cHV0IiwicnVuQWdlbnRDb21tYW5kIiwiaW50ZXJhY3RpdmUiLCJ0cmltIiwibWFwT3V0cHV0IiwiY2FsbCIsInVuZGVmaW5lZCIsImZvcm1hdEFnZW50U2VjdGlvbiIsInN1bW1hcml6ZUFnZW50T3V0cHV0IiwiYWdlbnRGYWlsdXJlTWVzc2FnZSIsImZpbHRlciIsIl9ydW5BZ2VudENvbW1hbmQiLCJfb3B0aW9ucyR3YWl0TWVzc2FnZTIiLCJfb3B0aW9ucyR3YWl0TWVzc2FnZSIsIl90NCIsIl90NSIsIl90NiIsIl90NyIsIl90OCIsInJ1bkludGVyYWN0aXZlQWdlbnRDb21tYW5kIiwiZGlzcGxheUFnZW50TmFtZSIsImNyZWF0ZUFnZW50Q29tbWFuZCIsImFnZW50TG9nRmlsZVBhdGgiLCJfeDYiLCJfeDciLCJfeDgiLCJfcnVuSW50ZXJhY3RpdmVBZ2VudENvbW1hbmQiLCJyZXN1bHRSZWNlaXZlciIsInRlcm1pbmFsIiwidGVybWluYWxSZWFkeSIsIl9wcm9jZXNzJGVudiRURVJNIiwiZXhpdFByb21pc2UiLCJyZXN1bHQiLCJfcHJvY2Vzc1RpbWVvdXQiLCJfdGVybWluYWwiLCJfcHJvYzIiLCJfcHJvYzMiLCJfcHJvY2Vzc1RpbWVvdXQyIiwiX3Q5IiwiY3JlYXRlQWdlbnRSZXN1bHRSZWNlaXZlciIsImNyZWF0ZVRlcm1pbmFsUmVhZHlTaWduYWwiLCJCdW4iLCJjcmVhdGVJbnRlcmFjdGl2ZUFnZW50Q29tbWFuZCIsImNhbGxiYWNrVXJsIiwiZW52IiwiX29iamVjdFNwcmVhZCIsIlRFUk0iLCJjb2xzIiwicm93cyIsImRhdGEiLCJjdXJyZW50VGVybWluYWwiLCJvYnNlcnZlIiwiX3Byb2MiLCJleGl0ZWQiLCJ0aGVuIiwicmFjZSIsIndhaXQiLCJzbGVlcCIsInN1Ym1pdEludGVyYWN0aXZlUHJvbXB0IiwiYnVpbGRJbnRlcmFjdGl2ZUFnZW50UHJvbXB0IiwiYWxsU2V0dGxlZCIsIl94OSIsIl94MCIsIl9zdWJtaXRJbnRlcmFjdGl2ZVByb21wdCIsImJyYWNrZXRlZFBhc3RlIiwiX3gxIiwiX3NsZWVwIiwiX2NhbGxlZTciLCJfY29udGV4dDciLCJyZXNvbHZlUmVhZHkiLCJidWZmZXIiLCJoYW5kbGVkU2V0dXBBY3Rpb25zIiwicmVhZHkiLCJyZWFkeVByb21pc2UiLCJmYWxsYmFja1JlYWR5VGltZXIiLCJpbnRlcmFjdGl2ZVJlYWR5VGltZW91dE1zIiwibm9ybWFsaXplZEJ1ZmZlciIsInJlcGxhY2VBbGwiLCJfbWF0Y2giLCJjb3VudCIsInJlcGVhdCIsIk51bWJlciIsIm5vcm1hbGl6ZVRlcm1pbmFsT3V0cHV0Iiwic2V0dXBBY3Rpb24iLCJnZW5lcmljQWN0aW9uIiwiZmluZCIsInNjcmVlbiIsInRlc3QiLCJnZW5lcmljSW50ZXJhY3RpdmVTZXR1cEFjdGlvbiIsImludGVyYWN0aXZlU2V0dXBBY3Rpb24iLCJoYXMiLCJnZW5lcmljUmVhZHlQYXR0ZXJuIiwic291cmNlIiwiaW50ZXJhY3RpdmVSZWFkeVBhdHRlcm4iLCJ0ZXh0IiwiYnVpbGRJbnRlcmFjdGl2ZUNhbGxiYWNrSW5zdHJ1Y3Rpb24iLCJyZXNvbHZlUmVzdWx0IiwicmVqZWN0UmVzdWx0Iiwic2VydmVyIiwic2VydmUiLCJob3N0bmFtZSIsInBvcnQiLCJmZXRjaCIsInJlcXVlc3QiLCJ1cmwiLCJVUkwiLCJtZXRob2QiLCJwYXRobmFtZSIsIlJlc3BvbnNlIiwic3RhdHVzIiwicGFyc2VBZ2VudFJlc3VsdFJlcXVlc3QiLCJ0b1N0cmluZyIsInN0b3AiLCJfeDEwIiwiX3BhcnNlQWdlbnRSZXN1bHRSZXF1ZXN0IiwiX2NhbGxlZTgiLCJfcmVxdWVzdCRoZWFkZXJzJGdldCIsInBheWxvYWQiLCJfY29udGV4dDgiLCJoZWFkZXJzIiwiZ2V0IiwiaW5jbHVkZXMiLCJqc29uIiwiVHlwZUVycm9yIiwiY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZSIsImJvZHkiLCJ0YXJnZXQiLCJub3ciLCJEYXRlIiwiX21hcDIiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwidHdvRGlnaXRzIiwibW9udGgiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwicGFkU3RhcnQiLCJERVBFTkRFTkNZX1NFQ1RJT05TIiwiSUdOT1JFRF9ESVJFQ1RPUklFUyIsIlVQREFURV9DT01NQU5EIiwidXBkYXRlQnVuRGVwZW5kZW5jaWVzIiwiX3VwZGF0ZUJ1bkRlcGVuZGVuY2llcyIsImN3ZCIsIndvcmtzcGFjZURpcmVjdG9yaWVzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImRpcmVjdG9yeSIsImZpbmRXb3Jrc3BhY2VEaXJlY3RvcmllcyIsImFzc2VydE5vQ2F0YWxvZ0RlcGVuZGVuY2llcyIsInVwZGF0ZVBhY2thZ2UiLCJfZmluZFdvcmtzcGFjZURpcmVjdG9yaWVzIiwicGF0dGVybnMiLCJkaXJlY3RvcmllcyIsImluY2x1ZGVkIiwiZXhjbHVkZWQiLCJfaXRlcmF0b3I1IiwiX3N0ZXA1IiwiaXNFeGNsdXNpb24iLCJtYXRjaGVzIiwiX2l0ZXJhdG9yNiIsIl9zdGVwNiIsIl90MyIsIndvcmtzcGFjZVBhdHRlcm5zIiwicmVhZFBhY2thZ2VKc29uIiwibGlzdFdvcmtzcGFjZUNhbmRpZGF0ZURpcmVjdG9yaWVzIiwic3RhcnRzV2l0aCIsImV4cGFuZFdvcmtzcGFjZVBhdHRlcm4iLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJ0b1NvcnRlZCIsImxlZnQiLCJyaWdodCIsImxvY2FsZUNvbXBhcmUiLCJfcmVmIiwiX3dvcmtzcGFjZXMkcGFja2FnZXMiLCJfcmVmJHdvcmtzcGFjZXMiLCJ3b3Jrc3BhY2VzIiwiQXJyYXkiLCJpc0FycmF5IiwicGFja2FnZXMiLCJfbGlzdFdvcmtzcGFjZUNhbmRpZGF0ZURpcmVjdG9yaWVzIiwicm9vdHMiLCJfaXRlcmF0b3I3IiwiX3N0ZXA3IiwiX3N0ZXA3JHZhbHVlIiwibWF4RGVwdGgiLCJyb290IiwiX2l0ZXJhdG9yOCIsIl9zdGVwOCIsIndvcmtzcGFjZUNhbmRpZGF0ZVJvb3RzIiwiaXNEaXJlY3RvcnkiLCJsaXN0RGlyZWN0b3JpZXMiLCJNYXAiLCJfaSIsIl9jYW5kaWRhdGVSb290cyIsImNhbmRpZGF0ZVJvb3RzIiwic2V0IiwibWVyZ2VkTWF4RGVwdGgiLCJlbnRyaWVzIiwiX3JlZjIiLCJfcmVmMyIsInNvbWUiLCJfcmVmNCIsInBhcmVudE1heERlcHRoIiwiY2hpbGRNYXhEZXB0aCIsIl9yZWY1Iiwib3RoZXJSb290Iiwib3RoZXJNYXhEZXB0aCIsImhhc1BhcmVudFJvb3QiLCJicmFjZUV4cGFuZCIsIm5vcm1hbGl6ZVdvcmtzcGFjZVBhdHRlcm4iLCJleHBhbmRlZFBhdHRlcm4iLCJ3b3Jrc3BhY2VQYXR0ZXJuTWF4RGVwdGgiLCJjYW5kaWRhdGVSb290IiwiTWF0aCIsIm1heCIsInNlZ21lbnRzIiwic3BsaXQiLCJzZWdtZW50IiwiaGFzR2xvYk1hZ2ljIiwicGF0aERlcHRoIiwiX2lzRGlyZWN0b3J5IiwiZGlyZWN0b3J5U3RhdCIsInN0YXQiLCJfbGlzdERpcmVjdG9yaWVzIiwiX2l0ZXJhdG9yOSIsIl9zdGVwOSIsImVudHJ5IiwiY2hpbGREaXJlY3RvcnkiLCJfdDAiLCJyZWFkZGlyIiwid2l0aEZpbGVUeXBlcyIsIm5hbWUiLCJzZXAiLCJwYXRoIiwiX2V4cGFuZFdvcmtzcGFjZVBhdHRlcm4iLCJtYXRjaGVyIiwiX2l0ZXJhdG9yMCIsIl9zdGVwMCIsIl90MSIsIl90MTAiLCJnbG9iUGF0dGVybk1hdGNoZXIiLCJoYXNQYWNrYWdlSnNvbiIsIm5vcm1hbGl6ZWQiLCJub3JtYWxpemVQYXRoIiwicmVwbGFjZSIsIm1pbmltYXRjaCIsImRvdCIsIl94MTEiLCJfeDEyIiwiX2hhc1BhY2thZ2VKc29uIiwicGFja2FnZUpzb25TdGF0IiwiaXNGaWxlIiwiX3gxMyIsIl94MTQiLCJfYXNzZXJ0Tm9DYXRhbG9nRGVwZW5kZW5jaWVzIiwiY2F0YWxvZ0RlcGVuZGVuY2llcyIsIl9pMyIsIl9hcnIiLCJwYWNrYWdlSnNvbiIsIl9pdGVyYXRvcjEiLCJfc3RlcDEiLCJkZXBlbmRlbmN5IiwiY2F0YWxvZ0RlcGVuZGVuY3lOYW1lcyIsIl94MTUiLCJfcmVhZFBhY2thZ2VKc29uIiwiX2NhbGxlZTkiLCJwYWNrYWdlSnNvblBhdGgiLCJfdDEyIiwiX3QxMyIsIl9jb250ZXh0OSIsIkpTT04iLCJyZWFkRmlsZSIsInBhcnNlIiwibmFtZXMiLCJkZXBlbmRlbmNpZXMiLCJfaTIiLCJfT2JqZWN0JGVudHJpZXMiLCJPYmplY3QiLCJfT2JqZWN0JGVudHJpZXMkX2kiLCJfeDE2IiwiX3gxNyIsIl91cGRhdGVQYWNrYWdlIiwiX2NhbGxlZTAiLCJsYWJlbCIsIl9jb250ZXh0MCIsInJ1bkNvbW1hbmQiLCJfeDE4IiwiX3gxOSIsIl9ydW5Db21tYW5kIiwiX2NhbGxlZTEiLCJfY29udGV4dDEiLCJyZWxhdGl2ZSIsInlhbWxTdHJpbmdpZnlPcHRpb25zIiwiYmxvY2tRdW90ZSIsImxpbmVXaWR0aCIsInByb2dyZXNzIiwicHJvY2Vzc1N0ZGVyciIsImV4aXRXaXRoRXJyb3IiLCJyZWFkU3RkaW5UZXh0IiwiX3JlYWRTdGRpblRleHQiLCJwcm9jZXNzU3RkaW4iLCJpc1RUWSIsInJlYWRSZXF1aXJlZFN0ZGluVGV4dCIsIl9yZWFkUmVxdWlyZWRTdGRpblRleHQiLCJlcnJvck1lc3NhZ2UiLCJfb3B0aW9ucyRhbGxvd2VkRXhpdEMiLCJhbGxvd2VkRXhpdENvZGVzIiwiX3JldCIsImF0dGVtcHQiLCJfY29tbWFuZCQyIiwiZmFpbHVyZU1lc3NhZ2UiLCJyZXRyeSIsInN0ZGluRGF0YSIsInN0ZGluIiwiaXNUcmFuc2llbnRHaEZhaWx1cmUiLCJHSF9SRVRSWV9NQVhfQVRURU1QVFMiLCJkIiwiX3JlZ2VuZXJhdG9yVmFsdWVzIiwiZ2giLCJfZ2giLCJhcmdzIiwiZ2hBbGxvd0V4aXRDb2RlcyIsIl9naEFsbG93RXhpdENvZGVzIiwiY3VycmVudFJlcG9QYXJ0cyIsIl9jdXJyZW50UmVwb1BhcnRzIiwibmFtZVdpdGhPd25lck91dHB1dCIsIm5hbWVXaXRoT3duZXIiLCJfbmFtZVdpdGhPd25lciRzcGxpdCIsIl9uYW1lV2l0aE93bmVyJHNwbGl0MiIsIm93bmVyIiwiY3VycmVudFByTnVtYmVyIiwiX2N1cnJlbnRQck51bWJlciIsInByTnVtYmVyIiwiZ3JhcGhxbCIsIl9ncmFwaHFsIiwicXVlcnkiLCJ2YXJzIiwicmVzcG9uc2UiLCJlcnJvck1lc3NhZ2VzIiwiZXJyb3JzIiwiX2Vycm9yJG1lc3NhZ2UiLCJ5YW1sRHVtcCIsInN0cmluZ2lmeVlhbWwiLCJkZWVwQ29weSIsInN0cnVjdHVyZWRDbG9uZSIsInNwYXduU3luY1NhZmUiLCJfcmVzdWx0JHN0YXR1cyIsIl9yZXN1bHQkc3Rkb3V0IiwiX3Jlc3VsdCRzdGRlcnIiLCJzcGF3blN5bmMiLCJlbmNvZGluZyIsIlRFU1RfUkVMQVRFRF9QQVRURVJOIiwiV09SS0ZMT1dfUlVOX0pTT05fRklFTERTIiwiRkFJTEVEX0xPR19MSU5FX1BSRUZJWF9QQVRURVJOIiwicnRrQXZhaWxhYmxlIiwibm9vcCIsImxhdGVzdFByQ2lSZXN1bHRzIiwiX2xhdGVzdFByQ2lSZXN1bHRzIiwiX3N1bW1hcnkkcGFzcyIsIl9zdW1tYXJ5JGZhaWwiLCJfc3VtbWFyeSRwZW5kaW5nIiwiX3N1bW1hcnkkc2tpcHBpbmciLCJfc3VtbWFyeSRjYW5jZWwiLCJjaGVja3MiLCJyYXciLCJzdW1tYXJ5IiwiX2NoZWNrJGJ1Y2tldDIiLCJfc3VtbWFyeSRidWNrZXQiLCJjaGVjayIsImJ1Y2tldCIsIlN5bnRheEVycm9yIiwidG90YWwiLCJwYXNzIiwiZmFpbCIsInBlbmRpbmciLCJza2lwcGluZyIsImNhbmNlbCIsIndhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MiLCJfd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyIsInNsZWVwRm4iLCJsYXRlc3RDaVJlc3VsdHNGbiIsIndyaXRlUHJvZ3Jlc3NGbiIsImF0dGVtcHRzIiwiY2lSZXN1bHRzIiwiY2xhc3NpZmllZFJlc3VsdHMiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QyIiwiZmFpbGVkUmVzdWx0cyIsInJ1bm5pbmdSZXN1bHRzIiwic2xlZXBTZWNvbmRzIiwiY2xhc3NpZmllZExhdGVzdFJlc3VsdHMiLCJmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQiLCJrZXlzIiwibGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3ciLCJ3b3JrZmxvd0tleSIsIndvcmtmbG93IiwiZnJvbUVudHJpZXMiLCJsYXRlc3RBdHRlbXB0Q2hlY2tzIiwiZ3JvdXBzIiwid29ya2Zsb3dBdHRlbXB0S2V5IiwiZ3JvdXAiLCJsYXRlc3RHcm91cCIsInZhbHVlcyIsImN1cnJlbnRHcm91cCIsImxhdGVzdEdyb3VwVGltZXN0YW1wIiwibGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3ciLCJmaXJzdENoZWNrIiwibGF0ZXN0Q2hlY2siLCJfbGF0ZXN0QXR0ZW1wdENoZWNrcyIsImxhdGVzdENoZWNrVGltZXN0YW1wIiwiY2xhc3NpZmljYXRpb24iLCJ3b3JrZmxvd1Jlc3VsdENsYXNzaWZpY2F0aW9uIiwidGVzdFJlbGF0ZWRDaGVjayIsIndvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rIiwiX2xpbmskbWF0Y2giLCJsaW5rIiwibWF0Y2giLCJ3b3JrZmxvd1J1biIsIl93b3JrZmxvd1J1biIsInJ1bklkIiwicnVuSnNvbiIsImJ1Y2tldHMiLCJfY2hlY2skYnVja2V0IiwiX2NoZWNrJHN0YXJ0ZWRBdCIsInRpbWVzdGFtcCIsImNvbXBsZXRlZEF0Iiwic3RhcnRlZEF0IiwiX3NsZWVwU2Vjb25kcyIsInNlY29uZHMiLCJjaGVja1ByQ2kiLCJfY2hlY2tQckNpIiwibGF0ZXN0Q29tbWl0cyIsIl95aWVsZCR3YWl0Rm9yUnVubmluZyIsIl95aWVsZCR3YWl0Rm9yUnVubmluZzIiLCJ3YWl0QXR0ZW1wdHMiLCJ3YWl0VGltZWRPdXQiLCJjbGFzc2lmaWVkTGF0ZXN0IiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0MyIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDQiLCJsYXRlc3RQckNvbW1pdFN1bW1hcmllcyIsIndhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrcyIsInRlc3RfcmVsYXRlZF9jaGVja193YWl0X2F0dGVtcHRzIiwidGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfdGltZWRfb3V0IiwiX3JlZjYiLCJjb21wYWN0V29ya2Zsb3ciLCJjb21wYWN0V29ya2Zsb3dSZXN1bHQiLCJidWlsZEZhaWxlZFdvcmtmbG93RGV0YWlscyIsImZhaWxlZFdvcmtmbG93TG9nIiwiZmFpbGVkX3dvcmtmbG93cyIsInRlc3Rfd29ya2Zsb3dfb3V0cHV0IiwiX3JlZjciLCJfcmVmOCIsInJ1bm5pbmdfdGVzdF9yZWxhdGVkX3dvcmtmbG93cyIsInN1Y2Nlc3NmdWxDaU91dHB1dCIsImxhdGVzdCIsIl9sYXRlc3RQckNvbW1pdFN1bW1hcmllcyIsIl9yZXNwb25zZSRkYXRhJHJlcG9zaSIsIl9yZXNwb25zZSRkYXRhIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyMiIsIm51bWJlciIsInJlcG9zaXRvcnkiLCJwdWxsUmVxdWVzdCIsImNvbW1pdHMiLCJub2RlcyIsImZsYXRNYXAiLCJub2RlIiwiX25vZGUkY29tbWl0IiwiX25vZGUkY29tbWl0MiIsIl9ub2RlJGNvbW1pdDMiLCJkYXRlIiwic3RyaW5nT3JVbmRlZmluZWQiLCJjb21taXQiLCJjb21taXR0ZWREYXRlIiwiaGFzaCIsImFiYnJldmlhdGVkT2lkIiwidGl0bGUiLCJtZXNzYWdlSGVhZGxpbmUiLCJ0b1JldmVyc2VkIiwiZm9ybWF0TGF0ZXN0Q29tbWl0U2VjdGlvbiIsIl9jb21wYWN0V29ya2Zsb3dSZXN1bHQiLCJfc3RyaW5nT3JVbmRlZmluZWQiLCJydW4iLCJmYWlsZWRKb2IiLCJmYWlsZWRXb3JrZmxvd1J1bkpvYiIsImpvYiIsImpvYl91cmwiLCJmYWlsZWRfc3RlcCIsImZhaWxlZFdvcmtmbG93UnVuU3RlcE5hbWUiLCJydW5faWQiLCJydW5fdXJsIiwiYnJhbmNoIiwiaGVhZEJyYW5jaCIsInNoYSIsImhlYWRTaGEiLCJjb25jbHVzaW9uIiwiX2ZhaWxlZFdvcmtmbG93TG9nIiwibG9nIiwiZmFpbGVkX2xvZyIsInJlZmluZUZhaWxlZFdvcmtmbG93TG9nIiwic2FuaXRpemVkSW5wdXQiLCJzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nIiwic3RyaXBWVENvbnRyb2xDaGFyYWN0ZXJzIiwibGluZSIsImpvYk5hbWUiLCJfcnVuJGpvYnMkZmluZCIsImpvYnMiLCJfam9iJHN0ZXBzJGZpbmQkbmFtZSIsIl9qb2Ikc3RlcHMkZmluZCIsIl9qb2Ikc3RlcHMkZmluZDIiLCJzdGVwcyIsInN0ZXAiLCJjdXJyZW50QmFzZUJyYW5jaCIsIl9jdXJyZW50QmFzZUJyYW5jaCIsIl95aWVsZCRjdXJyZW50UHVsbFJlcSIsImN1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2giLCJjdXJyZW50RGVmYXVsdEJyYW5jaCIsIl9jdXJyZW50RGVmYXVsdEJyYW5jaCIsImRlZmF1bHRCcmFuY2giLCJyZXF1aXJlTm9uRW1wdHkiLCJfY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCIsImJhc2VCcmFuY2hPdXRwdXQiLCJiYXNlQnJhbmNoIiwiaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nIiwibm9ybWFsaXplSXNzdWVOdW1iZXIiLCJyZWZlcmVuY2UiLCJleHRyYWN0R2l0SHViUmVmZXJlbmNlTnVtYmVyIiwibm9ybWFsaXplUHJOdW1iZXIiLCJmZXRjaElzc3VlTWVzc2FnZXMiLCJfZmV0Y2hJc3N1ZU1lc3NhZ2VzIiwiaXNzdWVOdW1iZXIiLCJpc3N1ZSIsImlzc3VlTWVzc2FnZXMiLCJmZXRjaFByTWVzc2FnZXMiLCJfZmV0Y2hQck1lc3NhZ2VzIiwicmVzb2x2ZWRQck51bWJlciIsImN1cnJlbnRSZXBvUHVsbFJlcXVlc3RNZXNzYWdlcyIsInB1bGxfcmVxdWVzdCIsImZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSIsIl9mZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUiLCJwck51bWJlck91dHB1dCIsIl9jdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMiLCJfeWllbGQkY3VycmVudFJlcG9QYXIzIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyNCIsInByTWVzc2FnZXMiLCJyZWZlcmVuY2VUZXh0Iiwia2luZFNlZ21lbnQiLCJfaXNzdWVNZXNzYWdlcyIsIm1lc3NhZ2VzIiwiZmV0Y2hNZXRhZGF0YSIsIm5vdW4iLCJzZWxlY3RNZXRhZGF0YSIsInBhZ2luYXRlTWVzc2FnZXMiLCJzZWxlY3RDb25uZWN0aW9uIiwiX3Jlc3BvbnNlJGRhdGEyIiwiY29tbWVudHMiLCJtYXBOb2RlIiwiY29tbWVudE1lc3NhZ2UiLCJfcHJNZXNzYWdlcyIsImlzc3VlQ29tbWVudHMiLCJyZXZpZXdzIiwiX3Jlc3BvbnNlJGRhdGEzIiwicHJJc3N1ZUNvbW1lbnRzIiwicHJSZXZpZXdzIiwiY29tcGFyZU1lc3NhZ2VzQnlDcmVhdGVkQXQiLCJsZWZ0Q3JlYXRlZEF0IiwiY3JlYXRlZEF0IiwicmlnaHRDcmVhdGVkQXQiLCJfcHJJc3N1ZUNvbW1lbnRzIiwiX3Jlc3BvbnNlJGRhdGE0IiwiX3ByUmV2aWV3cyIsIl9yZXNwb25zZSRkYXRhNSIsInJldmlld01lc3NhZ2UiLCJfcGFnaW5hdGVNZXNzYWdlcyIsImNvbmZpZyIsImN1cnNvciIsIl9jb25uZWN0aW9uJHBhZ2VJbmZvJCIsImNvbm5lY3Rpb24iLCJoYXNNZXNzYWdlQm9keSIsInBhZ2VJbmZvIiwiaGFzTmV4dFBhZ2UiLCJlbmRDdXJzb3IiLCJfZmV0Y2hNZXRhZGF0YSIsIl9tZXRhZGF0YSRhdXRob3IkbG9naSIsIl9tZXRhZGF0YSRhdXRob3IiLCJfbWV0YWRhdGEkYm9keSIsIm1ldGFkYXRhIiwiYXV0aG9yIiwibG9naW4iLCJjb21tZW50IiwiX2NvbW1lbnQkYXV0aG9yJGxvZ2luIiwiX2NvbW1lbnQkYXV0aG9yIiwidHlwZSIsInJldmlldyIsIl9yZXZpZXckYXV0aG9yJGxvZ2luIiwiX3JldmlldyRhdXRob3IiLCJfcmV2aWV3JHN0YXRlIiwiX3JldmlldyRzdWJtaXR0ZWRBdCIsIl9yZXZpZXckYm9keSIsInN0YXRlIiwic3VibWl0dGVkQXQiLCJvcGVuUHIiLCJfb3BlblByIiwiX3RlbXAiLCJoZWFkT3V0cHV0IiwiaGVhZCIsImJhc2VPdXRwdXQiLCJiYXNlIiwiY3JlYXRlQXJncyIsInVwZGF0ZVByIiwiX3VwZGF0ZVByIiwiZWRpdFByIiwiX2VkaXRQciIsImVkaXRBcmdzIiwicmVhZFJlcGxpZXNGcm9tU3RkaW4iLCJfcmVhZFJlcGxpZXNGcm9tU3RkaW4iLCJub3JtYWxpemVkUmVwbGllcyIsInRocmVhZElkIiwicGFyc2VSZXBseUlucHV0IiwicmVwbGllcyIsInBhZ2luYXRlUmV2aWV3VGhyZWFkcyIsIl9wYWdpbmF0ZVJldmlld1RocmVhZHMiLCJvblRocmVhZCIsIl9yZXZpZXdUaHJlYWRzJHBhZ2VJbiIsInJldmlld1RocmVhZHMiLCJ0aHJlYWQiLCJ1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzIiwiX3VucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMiLCJpZHMiLCJpc1Jlc29sdmVkIiwiaWQiLCJ1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyIsIl91bnJlc29sdmVkUmV2aWV3VGhyZWFkcyIsInRocmVhZHMiLCJmaWxlVGV4dENhY2hlIiwiX3BhZ2VJbmZvJGVuZEN1cnNvciIsIl9wYWdlSW5mbyRlbmRDdXJzb3IyIiwiY29tbWVudENvbm5lY3Rpb24iLCJfdGhyZWFkJHBhdGgiLCJfdGhyZWFkJGlzT3V0ZGF0ZWQiLCJub3JtYWxpemVDb21tZW50IiwiaXNPdXRkYXRlZCIsIl90aHJlYWQkcGF0aDIiLCJfdGhyZWFkJGlzT3V0ZGF0ZWQyIiwib3JpZ2luYWxMaW5lIiwic3RhcnRMaW5lIiwib3JpZ2luYWxTdGFydExpbmUiLCJsaXN0UHJSZXZpZXdUaHJlYWRzIiwiX2xpc3RQclJldmlld1RocmVhZHMiLCJ1bnJlc29sdmVkX3RocmVhZHMiLCJyZXNvbHZlUHJSZXZpZXdUaHJlYWRzIiwiX3Jlc29sdmVQclJldmlld1RocmVhZHMiLCJ1bnJlc29sdmVkSWRzIiwicmVzb2x2ZWRUaHJlYWRJZHMiLCJfc3RlcDIkdmFsdWUiLCJpbmRleCIsIl9zdGVwMiR2YWx1ZSQiLCJyZXNvbHZlUmV2aWV3VGhyZWFkIiwicmVzb2x2ZWRfdGhyZWFkX2lkcyIsIl9ub3JtYWxpemVDb21tZW50IiwiaXNUaHJlYWRPdXRkYXRlZCIsIl9hdXRob3IkbG9naW4iLCJfdDExIiwiYnVpbGRSZXZpZXdTbmlwcGV0Iiwic25pcHBldCIsInBhcnNlZCIsIl90eXBlb2YiLCJldmVyeSIsInJlcGx5IiwiaXNSZXBseUlucHV0IiwiX3gyMCIsIl94MjEiLCJfeDIyIiwiX2J1aWxkUmV2aWV3U25pcHBldCIsInByaW1hcnlMb2NhdGlvbiIsImZhbGxiYWNrTG9jYXRpb24iLCJsb2NhdGlvbiIsImZpbGVUZXh0Iiwib3JpZ2luYWxDb21tZW50TG9jYXRpb24iLCJjdXJyZW50Q29tbWVudExvY2F0aW9uIiwiZmV0Y2hGaWxlVGV4dEF0RXhwcmVzc2lvbiIsImV4cHJlc3Npb24iLCJyZW5kZXJMaW5lU25pcHBldCIsImVuZExpbmUiLCJfY29tbWVudCRjb21taXQiLCJjb21tZW50TG9jYXRpb24iLCJvaWQiLCJfY29tbWVudCRvcmlnaW5hbENvbW0iLCJvcmlnaW5hbENvbW1pdCIsIl94MjMiLCJfeDI0IiwiX3gyNSIsIl94MjYiLCJfZmV0Y2hGaWxlVGV4dEF0RXhwcmVzc2lvbiIsImNhY2hlS2V5IiwiZmV0Y2hGaWxlVGV4dCIsIl94MjciLCJfeDI4IiwiX3gyOSIsIl9mZXRjaEZpbGVUZXh0IiwiYmxvYiIsIm9iamVjdCIsImlzQmluYXJ5IiwibGluZXMiLCJhdCIsInBvcCIsImNsYW1wZWRTdGFydExpbmUiLCJjbGFtcExpbmVOdW1iZXIiLCJjbGFtcGVkRW5kTGluZSIsImZpcnN0TGluZSIsImxhc3RMaW5lIiwibWluIiwibGluZU51bWJlcldpZHRoIiwic25pcHBldExpbmVzIiwibGluZU51bWJlciIsIl9saW5lcyIsIm1hcmtlciIsIm1heExpbmVOdW1iZXIiLCJ0ZW1wb3JhcnlGaWxlc0NsZWFudXBJbnN0cnVjdGlvbiIsImJ1aWxkUGxhblByb21wdCIsIl9idWlsZFBsYW5Qcm9tcHQiLCJpc3N1ZVlhbWwiLCJidWlsZE1lcmdlQmFzZUNvbW1hbmQiLCJzaGVsbFF1b3RlIiwiYnVpbGRSZXZpZXdQcm9tcHQiLCJfYnVpbGRSZXZpZXdQcm9tcHQiLCJrbm93bkZhY3RzIiwibWVyZ2VCYXNlQ29tbWFuZCIsInByQ29udGV4dCIsImJ1aWxkS25vd25GYWN0c0luc3RydWN0aW9ucyIsImJ1aWxkUHJDb250ZXh0SW5zdHJ1Y3Rpb25zIiwidHJpbW1lZEZhY3RzIiwiYnVpbGRTY3JlZW5zaG90UHJvbXB0IiwiaW5pdGlhbFVybCIsInBhZ2VOYW1lIiwic2NyZWVuc2hvdERlc2NyaXB0aW9uIiwic2FuaXRpemVkRGVzY3JpcHRpb24iLCJidWlsZFNpbXBsaWZ5UHJvbXB0IiwiX2J1aWxkU2ltcGxpZnlQcm9tcHQiLCJQQUNLQUdFX05BTUUiLCJURVhUX0ZJTEVfRVhURU5TSU9OX1JFR0VYIiwiaW5zdGFsbFBhY2tlZFNraWxscyIsIl9pbnN0YWxsUGFja2VkU2tpbGxzIiwicGFja2FnZVJvb3QiLCJpbnN0YWxsU291cmNlUm9vdCIsImZpbmRQYWNrYWdlUm9vdCIsIm1rZHRlbXAiLCJ0bXBkaXIiLCJjcCIsInJlcGxhY2VMYXRlc3RTcGVjaWZpZXJXaXRoUGFja2FnZVZlcnNpb24iLCJybSIsImZvcmNlIiwiX2ZpbmRQYWNrYWdlUm9vdCIsImN1cnJlbnREaXIiLCJwYWNrYWdlTWV0YWRhdGEiLCJwYXJlbnREaXIiLCJmaWxlVVJMVG9QYXRoIiwicmVhZFBhY2thZ2VNZXRhZGF0YSIsImFzc2VydCIsIm5vdFN0cmljdEVxdWFsIiwiY29udGVudCIsIm9rIiwidmVyc2lvbiIsIl9yZXBsYWNlTGF0ZXN0U3BlY2lmaWVyV2l0aFBhY2thZ2VWZXJzaW9uIiwibGF0ZXN0SW5zdGFsbFNwZWNpZmllciIsInZlcnNpb25lZEluc3RhbGxTcGVjaWZpZXIiLCJyZXBsYWNlSW5GaWxlcyIsIl9yZXBsYWNlSW5GaWxlcyIsInJlcGxhY2VDb250ZW50IiwiZW50cnlQYXRoIiwicmVwbGFjZWRDb250ZW50IiwicGFyZW50UGF0aCIsIndyaXRlRmlsZSIsInByb2dyYW0iLCJDb21tYW5kIiwicnVuUmV2aWV3Q29tbWFuZCIsIl9ydW5SZXZpZXdDb21tYW5kIiwiX2NhbGxlZTEzIiwibW9kZSIsInByZXZpb3VzVmVyaWZpZWRGYWN0cyIsIl9jb250ZXh0MTMiLCJyZWFkUmV2aWV3VmVyaWZpZWRGYWN0cyIsIl9hZ2VudCIsIl9yZWFkUmV2aWV3VmVyaWZpZWRGYWN0cyIsIl9jYWxsZWUxNCIsIl9jb250ZXh0MTQiLCJhZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kIiwiZGVzY3JpcHRpb24iLCJhbGxvd0V4Y2Vzc0FyZ3VtZW50cyIsImFyZ3VtZW50TmFtZSIsImFyZ3VtZW50IiwiYXJndW1lbnREZXNjcmlwdGlvbiIsImFkZE9wdGlvbiIsIk9wdGlvbiIsIm9wdGlvbkRlc2NyaXB0aW9uIiwiY2hvaWNlcyIsIm1ha2VPcHRpb25NYW5kYXRvcnkiLCJvcHRpb24iLCJhY3Rpb24iLCJfY2FsbGVlMTAiLCJfbGVuIiwiX2tleSIsIl9yZWYxMiIsImFyZ3VtZW50T3JPcHRpb25zIiwibWF5YmVPcHRpb25zIiwiX2FyZ3MxMCIsIl9jb250ZXh0MTAiLCJhZGRBZ2VudENvbW1hbmQiLCJjb25maWdPclJ1biIsIl9jYWxsZWUxMiIsIl9jb250ZXh0MTIiLCJfY2FsbGVlMTEiLCJfY29udGV4dDExIiwiX3J1blByb21wdEFnZW50Q29tbWFuZCIsIl9jYWxsZWUxNSIsIl9jb250ZXh0MTUiLCJleHRyYWN0TWFya2Rvd25Db2RlQmxvY2siLCJidWlsZEFnZW50UHJvbXB0IiwiZmFsbGJhY2tUb091dHB1dCIsIl9jb2RlQmxvY2tNYXRjaGVzJGF0IiwibGFzdENvZGVCbG9ja0NvbnRlbnQiLCJtYXRjaEFsbCIsInNob3dIZWxwQWZ0ZXJFcnJvciIsInJ1blByb21wdEFnZW50Q29tbWFuZCIsImlzc3VlUmVmZXJlbmNlIiwiX2FyZ3VtZW50IiwicHJSZWZlcmVuY2UiLCJwYXJzZUFzeW5jIiwiYXJndiJdLCJtYXBwaW5ncyI6Ijs7O216SEFtQk8sSUFDTUEsRUFBNkIsS0FJcENDLEVBQTBCLENBQUMsU0FBVSxVQUFXLFVBQ2hEQyxFQUFrQixJQUFJQyxJQUN4QkMsR0FBMkIsRUFJL0IsU0FBc0JDLEVB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
|
|
4
|
+
var n,e,t="function"==typeof Symbol?Symbol:{},r=t.iterator||"@@iterator",a=t.toStringTag||"@@toStringTag";function i(t,r,a,i){var u=r&&r.prototype instanceof c?r:c,s=Object.create(u.prototype);return D(s,"_invoke",function(t,r,a){var i,c,u,s=0,l=a||[],f=!1,p={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,t){return i=e,c=0,u=n,p.n=t,o}};function d(t,r){for(c=t,u=r,e=0;!f&&s&&!a&&e<l.length;e++){var a,i=l[e],d=p.p,h=i[2];t>3?(a=h===r)&&(u=i[(c=i[4])?5:(c=3,3)],i[4]=i[5]=n):i[0]<=d&&((a=t<2&&d<i[1])?(c=0,p.v=r,p.n=i[1]):d<h&&(a=t<3||i[0]>r||r>h)&&(i[4]=t,i[5]=r,p.n=h,c=0))}if(a||t>1)return o;throw f=!0,r}return function(a,l,h){if(s>1)throw TypeError("Generator is already running");for(f&&1===l&&d(l,h),c=l,u=h;(e=c<2?n:u)||!f;){i||(c?c<3?(c>1&&(p.n=-1),d(c,u)):p.n=u:p.v=u);try{if(s=2,i){if(c||(a="next"),e=i[a]){if(!(e=e.call(i,u)))throw TypeError("iterator result is not an object");if(!e.done)return e;u=e.value,c<2&&(c=0)}else 1===c&&(e=i.return)&&e.call(i),c<2&&(u=TypeError("The iterator does not provide a '"+a+"' method"),c=1);i=n}else if((e=(f=p.n<0)?u:t.call(r,p))!==o)break}catch(e){i=n,c=1,u=e}finally{s=1}}return{value:e,done:f}}}(t,a,i),!0),s}var o={};function c(){}function u(){}function s(){}e=Object.getPrototypeOf;var l=[][r]?e(e([][r]())):(D(e={},r,function(){return this}),e),f=s.prototype=c.prototype=Object.create(l);function p(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,s):(n.__proto__=s,D(n,a,"GeneratorFunction")),n.prototype=Object.create(f),n}return u.prototype=s,D(f,"constructor",s),D(s,"constructor",u),u.displayName="GeneratorFunction",D(s,a,"GeneratorFunction"),D(f),D(f,a,"Generator"),D(f,r,function(){return this}),D(f,"toString",function(){return"[object Generator]"}),(L=function(){return{w:i,m:p}})()}function D(n,e,t,r){var a=Object.defineProperty;try{a({},"",{})}catch(n){a=0}D=function(n,e,t,r){function i(e,t){D(n,e,function(n){return this._invoke(e,t,n)})}e?a?a(n,e,{value:t,enumerable:!r,configurable:!r,writable:!r}):n[e]=t:(i("next",0),i("throw",1),i("return",2))},D(n,e,t,r)}function M(n){if(null!=n){var e=n["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],t=0;if(e)return e.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length))return{next:function(){return n&&t>=n.length&&(n=void 0),{value:n&&n[t++],done:!n}}}}throw new TypeError(typeof n+" is not iterable")}function _(n,e){return function(n){if(Array.isArray(n))return n}(n)||function(n,e){var t=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null!=t){var r,a,i,o,c=[],u=!0,s=!1;try{if(i=(t=t.call(n)).next,0===e){if(Object(t)!==t)return;u=!1}else for(;!(u=(r=i.call(t)).done)&&(c.push(r.value),c.length!==e);u=!0);}catch(n){s=!0,a=n}finally{try{if(!u&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(s)throw a}}return c}}(n,e)||F(n,e)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function U(n){return function(n){if(Array.isArray(n))return R(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||F(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function G(n){"@babel/helpers - typeof";return G="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},G(n)}function F(n,e){if(n){if("string"==typeof n)return R(n,e);var t={}.toString.call(n).slice(8,-1);return"Object"===t&&n.constructor&&(t=n.constructor.name),"Map"===t||"Set"===t?Array.from(n):"Arguments"===t||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t)?R(n,e):void 0}}var H=36e5,W=["SIGINT","SIGTERM","SIGHUP"],J=new Set,B=!1;function Y(n,e){return K.apply(this,arguments)}function K(){return K=$(L().m(function n(e,t){var r,i,o,c,u,s,l,f,p,d,h;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t={}),i=a(null!=(r=e[0])?r:"",e.slice(1),{detached:!0,stdio:["ignore","pipe","pipe"]}),o=Z(i,t.timeoutMs),c=en(t.waitMessage,t.waitIntervalSeconds),n.n=1,tn(t.logFilePath);case 1:return u=n.v,n.p=2,n.n=3,Promise.all([X(i.stdout,function(n){return u.write(n)}),X(i.stderr,function(n){return u.write(n)}),new Promise(function(n,e){i.once("error",e),i.once("close",function(e){return n(null!=e?e:1)})})]);case 3:if(s=n.v,l=_(s,3),f=l[0],p=l[1],d=l[2],!o.timedOut()){n.n=4;break}throw new Error(Q("".concat(f).concat(p),o.timeoutMs,e));case 4:if(0!==d){n.n=5;break}return n.a(2,f);case 5:throw h="".concat(f).concat(p),new Error(h||"Command failed: ".concat(e.join(" ")));case 6:return n.p=6,n.n=7,u.close();case 7:return o.clear(),c(),n.f(6);case 8:return n.a(2)}},n,null,[[2,,6,8]])})),K.apply(this,arguments)}function Q(n,e,t){var r="Command timed out after ".concat(z(e),": ").concat(t.join(" "));return n.length>0?"".concat(n,"\n").concat(r):r}function z(n){return n%36e5==0?"".concat(n/36e5,"h"):n%6e4==0?"".concat(n/6e4,"m"):n%1e3==0?"".concat(n/1e3,"s"):"".concat(n,"ms")}function Z(n,e){void 0===e&&(e=H);var t,r=!1;J.add(n),function(){if(B)return;B=!0;var n,e=E(W);try{var t=function(){var e=n.value;process.once(e,function(){var n,t=E(J);try{for(t.s();!(n=t.n()).done;){V(n.value,e)}}catch(n){t.e(n)}finally{t.f()}process.exit(128+function(n){switch(n){case"SIGINT":return 2;case"SIGTERM":return 15;case"SIGHUP":return 1}}(e))})};for(e.s();!(n=e.n()).done;)t()}catch(n){e.e(n)}finally{e.f()}}();var a=setTimeout(function(){r=!0,V(n,"SIGTERM"),(t=setTimeout(function(){return V(n,"SIGKILL")},5e3)).unref()},e);return a.unref(),{clear:function(){clearTimeout(a),t&&clearTimeout(t),J.delete(n)},timedOut:function(){return r},timeoutMs:e}}function V(n,e){if(n.pid&&n.pid>0)try{return void process.kill(-n.pid,e)}catch(n){}n.kill(e)}function X(n,e){return nn.apply(this,arguments)}function nn(){return(nn=$(L().m(function n(e,t){var r,a,i,o,c,u,s,l,f,p,d;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:r=[],a=new TextDecoder,i=!1,o=!1,n.p=2,u=A(e);case 3:return n.n=4,u.next();case 4:if(!(i=!(s=n.v).done)){n.n=6;break}l=s.value,f="string"==typeof l?l:a.decode(new Uint8Array(l),{stream:!0}),r.push(f),null==t||t(f);case 5:i=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,d=n.v,o=!0,c=d;case 8:if(n.p=8,n.p=9,!i||null==u.return){n.n=10;break}return n.n=10,u.return();case 10:if(n.p=10,!o){n.n=11;break}throw c;case 11:return n.f(10);case 12:return n.f(8);case 13:return(p=a.decode())&&(r.push(p),null==t||t(p)),n.a(2,r.join(""))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function en(n,e,t){if(void 0===e&&(e=36),void 0===t&&(t=function(n){return process.stderr.write(n)}),!n)return function(){};var r=0,a=setInterval(function(){t("."),(r+=1)<=100&&r%5==0&&t(" ".concat(r,"% done "))},1e3*e);return t("".concat(n," ").concat("This can take up to 1 hour; dots indicate progress",": ")),function(){clearInterval(a),t("\n")}}function tn(n){return rn.apply(this,arguments)}function rn(){return rn=$(L().m(function n(e){var t,r,a;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,{write:function(){},close:function(){var n=$(L().m(function n(){return L().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()});case 1:return t=function(n){process.stderr.write("Warning: Failed to write command log to ".concat(e,": ").concat(String(n),"\n"))},n.p=2,n.n=3,c(m(e),{recursive:!0});case 3:return(r=o(e,{flags:"w"})).on("error",t),n.a(2,{write:function(n){r.writable&&r.write(n)},close:function(){var n=$(L().m(function n(){return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,new Promise(function(n){r.end(function(){return n()})});case 1:return n.a(2,n.v)}},n)}));return function(){return n.apply(this,arguments)}}()});case 4:return n.p=4,a=n.v,t(a),n.a(2,{write:function(){},close:function(){var n=$(L().m(function n(){return L().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()})}},n,null,[[2,4]])})),rn.apply(this,arguments)}var an="There is no concern.",on=["codex","claude","gemini"],cn=new RegExp("\\b".concat("there is no concern","\\b"),"i"),un={allAgentsLabel:"agents"},sn=String.fromCodePoint(7),ln=String.fromCodePoint(27),fn=new RegExp("".concat(ln,"\\[(\\d*)C"),"g"),pn=new RegExp("".concat(ln,"\\[[\\d;?]*[ -/]*[@-~]"),"g"),dn=new RegExp("".concat(ln,"\\][^").concat(sn,"]*(?:").concat(sn,"|").concat(ln,"\\\\)"),"g"),hn="gemini-3.1-pro-preview",mn=[/Type\s*your\s*message/i,/@path\/to\/file/i,/bypass\s*permissions/i,/YOLO\s+mode/i,/permissions:/i],vn=[{input:"\r",key:"workspace-trust",pattern:/(?:trust|trusted|untrusted|safety\s*check)[\s\S]*(?:Yes|continue|confirm|Press\s*enter)/i},{input:"\r",key:"model-selection",pattern:/(?:model|proceed|upgrade)[\s\S]*(?:continue|confirm|Try\s*new|Use\s*existing|Press\s*enter)/i}];function wn(n,e){return yn.apply(this,arguments)}function yn(){return(yn=$(L().m(function n(e,t){var r,a,i,o;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t=un),n.n=1,e;case 1:return r=n.v,a=en(Gn(t.allAgentsLabel)),n.p=2,n.n=3,Promise.all(on.map($(L().m(function n(e){var a,i,o,c,u;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,gn(e,r,{interactive:t.interactive,waitMessage:!1});case 1:if(o=n.v,c=o.trim(),u=null==(a=(i=t).mapOutput)?void 0:a.call(i,e,c),!t.mapOutput||void 0!==u){n.n=2;break}return n.a(2);case 2:return n.a(2,_n(e,null!=u?u:Mn(e,c)));case 3:return n.p=3,n.v,n.a(2,_n(e,Un(e)))}},n,null,[[0,3]])}))));case 3:return i=n.v,o=i.filter(function(n){return void 0!==n}),n.a(2,o.join("\n\n"));case 4:return n.p=4,a(),n.f(4);case 5:return n.a(2)}},n,null,[[2,,4,5]])}))).apply(this,arguments)}function gn(n,e,t){return bn.apply(this,arguments)}function bn(){return(bn=$(L().m(function n(e,t,r){var a,i,o,c,u,s,l;return L().w(function(n){for(;;)switch(n.n){case 0:if(void 0===r&&(r={}),!r.interactive){n.n=2;break}return o=kn,c=e,n.n=1,t;case 1:return n.a(2,o(c,n.v,{waitMessage:null!=(i=r.waitMessage)?i:Gn(Ln(e))}));case 2:return u=Y,s=Cn,l=e,n.n=3,t;case 3:return n.a(2,u(s(l,n.v),{logFilePath:Fn(e),waitMessage:null!=(a=r.waitMessage)?a:Gn(Ln(e))}))}},n)}))).apply(this,arguments)}function kn(n,e,t){return xn.apply(this,arguments)}function xn(){return(xn=$(L().m(function n(e,t,r){var a,i,o,c,u,s,l,f,p,d,h,m,v,w,y,g,b;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===r&&(r={}),a=Tn(),n.n=1,tn(Fn(e));case 1:if(i=n.v,o=en(r.waitMessage),c=new TextDecoder,f=Rn(e),n.p=2,s=Bun.spawn(Pn(e,a.callbackUrl),{env:N(N({},process.env),{},{TERM:null!=(p=process.env.TERM)?p:"xterm-256color"}),terminal:{cols:120,rows:40,data:function(n,e){var t=c.decode(e,{stream:!0});i.write(t),f.observe(t,n)}}}),l=s.terminal){n.n=3;break}throw new Error("Failed to start ".concat(Ln(e)," in a Bun terminal."));case 3:return u=Z({kill:function(n){var e;return null==(e=s)||e.kill(n),!0},pid:s.pid}),d=s.exited.then(function(n){throw new Error("".concat(Ln(e)," exited before posting a result with exit code ").concat(n,"."))}),n.n=4,Promise.race([f.wait(),d]);case 4:return n.n=5,jn(1e3);case 5:return n.n=6,Sn(l,$n(e,t,a.callbackUrl));case 6:return n.n=7,Promise.race([a.result,d]);case 7:if(h=n.v,d.catch(function(){}),!u.timedOut()){n.n=8;break}throw new Error("Interactive ".concat(Ln(e)," command timed out after ").concat(z(H),"."));case 8:return n.a(2,h);case 9:if(n.p=9,b=n.v,null==(m=u)||!m.timedOut()){n.n=10;break}throw new Error("Interactive ".concat(Ln(e)," command timed out after ").concat(z(H),"."));case 10:throw b;case 11:return n.p=11,null==(v=l)||v.close(),null==(w=s)||w.kill("SIGTERM"),n.n=12,Promise.allSettled([null==(y=s)?void 0:y.exited,a.close(),i.close()]);case 12:return null==(g=u)||g.clear(),o(),n.f(11);case 13:return n.a(2)}},n,null,[[2,9,11,13]])}))).apply(this,arguments)}function Sn(n,e){return In.apply(this,arguments)}function In(){return(In=$(L().m(function n(e,t){return L().w(function(n){for(;;)switch(n.n){case 0:return e.write(An(t)),n.n=1,jn(250);case 1:e.write("\r");case 2:return n.a(2)}},n)}))).apply(this,arguments)}function jn(n){return On.apply(this,arguments)}function On(){return(On=$(L().m(function n(e){return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,new Promise(function(n){return setTimeout(n,e)});case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Rn(n){var e,t="",r=new Set,a=!1,i=new Promise(function(n){e=n}),o=setTimeout(function(){a=!0,e()},function(n){switch(n){case"codex":case"claude":case"gemini":return 3e4}}(n));return o.unref(),{observe:function(i,c){if(!a){var u=function(n){return n.replaceAll(fn,function(n,e){return" ".repeat(Number(e||"1"))}).replaceAll(pn,"").replaceAll(dn,"")}(t="".concat(t).concat(i).slice(-4e3)),s=function(n,e){var t=function(n){return vn.find(function(e){return e.pattern.test(n)})}(e);if(t)return N(N({},t),{},{key:"".concat(n,"-").concat(t.key)});switch(n){case"codex":return/Choose\s*how\s*you'd\s*like\s*Codex\s*to\s*proceed/i.test(e)?{input:"\r",key:"codex-model-selection"}:/Do\s*you\s*trust\s*the\s*contents\s*of\s*this\s*directory/i.test(e)?{input:"\r",key:"codex-workspace-trust"}:void 0;case"claude":return/Quick\s*safety\s*check|Enter\s*to\s*confirm/i.test(e)?{input:"\r",key:"claude-workspace-trust"}:void 0;case"gemini":return}}(n,u);if(s&&!r.has(s.key))return r.add(s.key),void c.write(s.input);(function(n){var e=new RegExp(mn.map(function(n){return n.source}).join("|"),"i");switch(n){case"codex":return new RegExp("".concat(e.source,"|OpenAI\\s+Codex[\\s\\S]*permissions"),"i");case"claude":return new RegExp("".concat(e.source,'|Try\\s+"'),"i");case"gemini":return e}})(n).test(u)&&(a=!0,clearTimeout(o),e())}},wait:function(){return i}}}function An(n){return"[200~".concat(n,"[201~")}function Cn(n,e){switch(n){case"codex":return["npx","--yes","@openai/codex@latest","exec","--dangerously-bypass-approvals-and-sandbox",e];case"claude":return["claude","--dangerously-skip-permissions","-p",e];case"gemini":return["npx","--yes","@google/gemini-cli@preview","--approval-mode","yolo","--skip-trust","--model",hn,"-p",e]}}function Pn(n,e){switch(n){case"codex":return["npx","--yes","@openai/codex@latest","--dangerously-bypass-approvals-and-sandbox"];case"claude":return["claude","--dangerously-skip-permissions","--append-system-prompt",En(e)];case"gemini":return["npx","--yes","@google/gemini-cli@preview","--approval-mode","yolo","--skip-trust","--model",hn]}}function $n(n,e,t){return"claude"===n?e:"".concat(e,"\n\n").concat(En(t),"\n")}function En(n){return"After completing the request, send the final answer to this local callback server and do not include any extra wrapper text:\n\ncurl -sS -X POST '".concat(n,'\' \\\n -H \'content-type: application/json\' \\\n --data-binary @- <<\'JSON\'\n{"result":"replace this value with your final answer"}\nJSON\n\nThe CLI wrapper waits for that POST request and will read the "result" JSON field as the command output.\nDo not create any files in the repository for this callback payload.\n')}function Tn(){var n,e,t=new Promise(function(t,r){n=t,e=r}),r=Bun.serve({hostname:"127.0.0.1",port:0,fetch:function(t){return $(L().m(function r(){var a,i,o;return L().w(function(r){for(;;)switch(r.p=r.n){case 0:if(a=new URL(t.url),"POST"===t.method&&"/result"===a.pathname){r.n=1;break}return r.a(2,new Response("Not found",{status:404}));case 1:return r.p=1,i=n,r.n=2,qn(t);case 2:return i(r.v),r.a(2,new Response("OK\n"));case 3:return r.p=3,o=r.v,e(o instanceof Error?o:new Error(String(o))),r.a(2,new Response("Invalid result payload\n",{status:400}))}},r,null,[[1,3]])}))()}});return{callbackUrl:new URL("/result",r.url).toString(),close:function(){return r.stop(!0)},result:t}}function qn(n){return Nn.apply(this,arguments)}function Nn(){return(Nn=$(L().m(function n(e){var t,r;return L().w(function(n){for(;;)switch(n.n){case 0:if(!(null!=(t=e.headers.get("content-type"))?t:"").includes("application/json")){n.n=3;break}return n.n=1,e.json();case 1:if("string"==typeof(r=n.v).result){n.n=2;break}throw new TypeError('Interactive agent result JSON must include a string "result" field.');case 2:return n.a(2,r.result);case 3:return n.a(2,e.text())}},n)}))).apply(this,arguments)}function Ln(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function Dn(n){return cn.test(n)}function Mn(n,e){return 0===e.length?Un(n):Dn(e)?an:e}function _n(n,e){return"## ".concat(Ln(n),"\n\n").concat(e)}function Un(n){return"".concat(Ln(n)," did not return a review result.")}function Gn(n){return"Waiting for ".concat(n," to finish.")}function Fn(n){return"logs/".concat(n,"-").concat((e=new Date,t=_([e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds()].map(Hn),5),r=t[0],a=t[1],i=t[2],o=t[3],c=t[4],"".concat(r).concat(a,"-").concat(i).concat(o).concat(c)),".log");var e,t,r,a,i,o,c}function Hn(n){return n.toString().padStart(2,"0")}var Wn=["dependencies","devDependencies","peerDependencies","optionalDependencies"],Jn=new Set([".git","node_modules"]),Bn=["bun","update","--latest"];function Yn(n){return Kn.apply(this,arguments)}function Kn(){return(Kn=$(L().m(function n(e){var t,r,a,i,o;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===e&&(e=process.cwd()),n.n=1,Qn(e);case 1:return t=n.v,n.n=2,we(e,t);case 2:return n.n=3,xe(e,"root");case 3:r=E(t),n.p=4,r.s();case 5:if((a=r.n()).done){n.n=7;break}return i=a.value,n.n=6,xe(v(e,i),i);case 6:n.n=5;break;case 7:n.n=9;break;case 8:n.p=8,o=n.v,r.e(o);case 9:return n.p=9,r.f(),n.f(9);case 10:return n.a(2)}},n,null,[[4,8,9,10]])}))).apply(this,arguments)}function Qn(n){return zn.apply(this,arguments)}function zn(){return(zn=$(L().m(function n(e){var t,r,a,i,o,c,u,s,l,f,p,d,h,m;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return h=Zn,n.n=1,ge(e);case 1:return t=h(n.v),n.n=2,Vn(e,t);case 2:r=n.v,a=new Set,i=new Set,o=E(t),n.p=3,o.s();case 4:if((c=o.n()).done){n.n=7;break}return u=c.value,s=u.startsWith("!"),n.n=5,fe(e,r,s?u.slice(1):u);case 5:l=n.v,f=E(l);try{for(f.s();!(p=f.n()).done;)d=p.value,s?i.add(d):a.add(d)}catch(n){f.e(n)}finally{f.f()}case 6:n.n=4;break;case 7:n.n=9;break;case 8:n.p=8,m=n.v,o.e(m);case 9:return n.p=9,o.f(),n.f(9);case 10:return n.a(2,U(a).filter(function(n){return"."!==n&&!i.has(n)}).toSorted(function(n,e){return n.localeCompare(e)}))}},n,null,[[3,8,9,10]])}))).apply(this,arguments)}function Zn(n){var e,t=n.workspaces,r=void 0===t?[]:t;return Array.isArray(r)?r:null!=(e=r.packages)?e:[]}function Vn(n,e){return Xn.apply(this,arguments)}function Xn(){return(Xn=$(L().m(function n(e,t){var r,a,i,o,c,u,s,l,f,p,d,h;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:r=new Set,a=ne(t),i=E(a),n.p=1,i.s();case 2:if((o=i.n()).done){n.n=7;break}return c=o.value,u=c.maxDepth,s=c.root,n.n=3,oe(e,s);case 3:if(n.v){n.n=4;break}return n.a(3,6);case 4:return d=E,n.n=5,ue(e,s,u);case 5:l=d(n.v);try{for(l.s();!(f=l.n()).done;)p=f.value,r.add(p)}catch(n){l.e(n)}finally{l.f()}case 6:n.n=2;break;case 7:n.n=9;break;case 8:n.p=8,h=n.v,i.e(h);case 9:return n.p=9,i.f(),n.f(9);case 10:return n.a(2,U(r))}},n,null,[[1,8,9,10]])}))).apply(this,arguments)}function ne(n){var e,t=new Map,r=E(n);try{for(r.s();!(e=r.n()).done;){var a=e.value;if(!a.startsWith("!"))for(var i=0,o=ee(a);i<o.length;i++){var c=o[i];t.set(c.root,t.has(c.root)?te(t.get(c.root),c.maxDepth):c.maxDepth)}}}catch(n){r.e(n)}finally{r.f()}return U(t.entries()).map(function(n){var e=_(n,2),t=e[0];return{maxDepth:e[1],root:t}}).filter(function(n){return!function(n,e){return U(e.entries()).some(function(e){var t,r,a=_(e,2),i=a[0],o=a[1];return i!==n.root&&("."===i||n.root.startsWith("".concat(i,"/")))&&(t=o,r=n.maxDepth,void 0===t||void 0!==r&&t>=r)})}(n,t)}).toSorted(function(n,e){return n.root.localeCompare(e.root)})}function ee(n){return b(de(n)).map(function(n){return{maxDepth:ie(n),root:re(n)}})}function te(n,e){return void 0===n||void 0===e?void 0:Math.max(n,e)}function re(n){var e,t=[],r=E(n.split("/"));try{for(r.s();!(e=r.n()).done;){var a=e.value;if(""===a||ae(a))break;t.push(a)}}catch(n){r.e(n)}finally{r.f()}return 0===t.length?".":t.join("/")}function ae(n){return/[*?[\]{}()!+]/.test(n)}function ie(n){if(!n.split("/").includes("**"))return le(n)}function oe(n,e){return ce.apply(this,arguments)}function ce(){return(ce=$(L().m(function n(e,t){var r;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,s(v(e,t));case 1:return r=n.v,n.a(2,r.isDirectory());case 2:return n.p=2,n.v,n.a(2,!1)}},n,null,[[0,2]])}))).apply(this,arguments)}function ue(n,e,t){return se.apply(this,arguments)}function se(){return(se=$(L().m(function n(e,t,r){var a,i,o,c,u,s,f,p,d,h;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:if(void 0===t&&(t="."),a=[t],!(void 0!==r&&le(t)>=r)){n.n=1;break}return n.a(2,a);case 1:return n.n=2,l(v(e,t),{withFileTypes:!0});case 2:i=n.v,o=E(i),n.p=3,o.s();case 4:if((c=o.n()).done){n.n=9;break}if((u=c.value).isDirectory()&&!Jn.has(u.name)){n.n=5;break}return n.a(3,8);case 5:if(s=v(t,u.name).split(y).join("/"),!(void 0!==r&&le(s)>r)){n.n=6;break}return n.a(3,8);case 6:return f=a.push,p=a,d=U,n.n=7,ue(e,s,r);case 7:f.apply.call(f,p,d(n.v));case 8:n.n=4;break;case 9:n.n=11;break;case 10:n.p=10,h=n.v,o.e(h);case 11:return n.p=11,o.f(),n.f(11);case 12:return n.a(2,a)}},n,null,[[3,10,11,12]])}))).apply(this,arguments)}function le(n){return"."===n?0:n.split("/").length}function fe(n,e,t){return pe.apply(this,arguments)}function pe(){return(pe=$(L().m(function n(e,t,r){var a,i,o,c,u,s,l;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:a=he(de(r)),i=[],o=E(t),n.p=1,o.s();case 2:if((c=o.n()).done){n.n=6;break}if(u=c.value,!(s=a(u))){n.n=4;break}return n.n=3,me(e,u);case 3:s=n.v;case 4:if(!s){n.n=5;break}i.push(u);case 5:n.n=2;break;case 6:n.n=8;break;case 7:n.p=7,l=n.v,o.e(l);case 8:return n.p=8,o.f(),n.f(8);case 9:return n.a(2,i)}},n,null,[[1,7,8,9]])}))).apply(this,arguments)}function de(n){var e=function(n){var e=n.split(y).join("/");return""===e?".":e}(n).replace(/\/$/,"");return"."===e?e:e.startsWith("./")?e.slice(2):e}function he(n){return function(e){return g(e,n,{dot:!0})}}function me(n,e){return ve.apply(this,arguments)}function ve(){return(ve=$(L().m(function n(e,t){var r;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,s(v(e,t,"package.json"));case 1:return r=n.v,n.a(2,r.isFile());case 2:return n.p=2,n.v,n.a(2,!1)}},n,null,[[0,2]])}))).apply(this,arguments)}function we(n,e){return ye.apply(this,arguments)}function ye(){return(ye=$(L().m(function n(e,t){var r,a,i,o,c,u,s,l;return L().w(function(n){for(;;)switch(n.n){case 0:r=[],a=0,i=["."].concat(U(t));case 1:if(!(a<i.length)){n.n=4;break}return o=i[a],n.n=2,ge("."===o?e:v(e,o));case 2:c=n.v,u=E(ke(c));try{for(u.s();!(s=u.n()).done;)l=s.value,r.push("".concat("."===o?"root":o,": ").concat(l))}catch(n){u.e(n)}finally{u.f()}case 3:a++,n.n=1;break;case 4:if(0!==r.length){n.n=5;break}return n.a(2);case 5:throw new Error(["Cannot safely update Bun workspace dependencies with catalog references.","Update catalog versions in the root package.json, then run bun install.","Catalog-managed dependencies: ".concat(r.join(", "))].join("\n"));case 6:return n.a(2)}},n)}))).apply(this,arguments)}function ge(n){return be.apply(this,arguments)}function be(){return(be=$(L().m(function n(e){var t,r,a;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return t=v(e,"package.json"),n.p=1,r=JSON,n.n=2,u(t,"utf8");case 2:return n.a(2,r.parse.call(r,n.v));case 3:throw n.p=3,a=n.v,new Error("Failed to read ".concat(t,": ").concat(String(a)));case 4:return n.a(2)}},n,null,[[1,3]])}))).apply(this,arguments)}function ke(n){var e,t=[],r=E(Wn);try{for(r.s();!(e=r.n()).done;){var a=n[e.value];if(a)for(var i=0,o=Object.entries(a);i<o.length;i++){var c=_(o[i],2),u=c[0];c[1].startsWith("catalog:")&&t.push(u)}}}catch(n){r.e(n)}finally{r.f()}return t}function xe(n,e){return Se.apply(this,arguments)}function Se(){return(Se=$(L().m(function n(e,t){return L().w(function(n){for(;;)switch(n.n){case 0:return process.stdout.write("\n# ".concat(t,"\n")),n.n=1,Ie(Bn,e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Ie(n,e){return je.apply(this,arguments)}function je(){return(je=$(L().m(function n(e,t){var r;return L().w(function(n){for(;;)switch(n.n){case 0:return r=a(e[0],e.slice(1),{cwd:t,stdio:"inherit"}),n.n=1,new Promise(function(n,a){r.once("error",a),r.once("close",function(r){0!==r?a(new Error("Command failed in ".concat(w(process.cwd(),t)||".",": ").concat(e.join(" ")))):n()})});case 1:return n.a(2)}},n)}))).apply(this,arguments)}var Oe={blockQuote:"literal",lineWidth:0};function Re(n){r.write("".concat(n,"\n"))}function Ae(n,e){void 0===e&&(e=1),r.write("".concat(n,"\n")),process.exit(e)}function Ce(){return Pe.apply(this,arguments)}function Pe(){return(Pe=$(L().m(function n(){return L().w(function(n){for(;;)switch(n.n){case 0:if(!t.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,X(t);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function $e(n){return Ee.apply(this,arguments)}function Ee(){return(Ee=$(L().m(function n(e){var t;return L().w(function(n){for(;;)switch(n.n){case 0:return void 0===e&&(e="Error: input is required on stdin"),n.n=1,Ce();case 1:if(!((t=n.v).length>0)){n.n=2;break}return n.a(2,t);case 2:Ae(e,2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function Te(n,e){return qe.apply(this,arguments)}function qe(){return qe=$(L().m(function n(e,t){var r,i,o,c,u;return L().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),i=null!=(r=t.allowedExitCodes)?r:[],o=L().m(function n(){var r,o,c,s,l,f,p,d,h,m,v;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return o=a(null!=(r=e[0])?r:"",e.slice(1),{detached:!0,stdio:["pipe","pipe","pipe"]}),s=!1,l=Z(o),n.p=1,void 0!==t.stdinData?o.stdin.end(t.stdinData):o.stdin.end(),n.n=2,Promise.all([X(o.stdout),X(o.stderr),new Promise(function(n,e){o.once("error",e),o.once("close",function(e){return n(null!=e?e:1)})})]);case 2:if(f=n.v,p=_(f,3),d=p[0],h=p[1],m=p[2],v="".concat(d).concat(h),!l.timedOut()){n.n=3;break}c=Q(v,l.timeoutMs,e),n.n=5;break;case 3:if(0!==m&&!i.includes(m)){n.n=4;break}return n.a(2,{v:v});case 4:Ke(e,m,v)&&u<3?s=!0:c=v||"Command failed: ".concat(e.join(" "));case 5:return n.p=5,l.clear(),n.f(5);case 6:if(!s){n.n=8;break}return Re("Transient GitHub CLI failure; retrying... (attempt ".concat(u," of ").concat(2,")")),n.n=7,k(1e3*u);case 7:return n.a(2,0);case 8:c&&Ae(c);case 9:return n.a(2)}},n,null,[[1,,5,6]])}),u=1;case 1:if(!(u<=3)){n.n=5;break}return n.d(M(o()),2);case 2:if(0!==(c=n.v)){n.n=3;break}return n.a(3,4);case 3:if(!c){n.n=4;break}return n.a(2,c.v);case 4:u+=1,n.n=1;break;case 5:Ae("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),qe.apply(this,arguments)}function Ne(n,e){return Le.apply(this,arguments)}function Le(){return(Le=$(L().m(function n(e,t){return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Te(["gh"].concat(U(e)),{stdinData:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function De(n,e,t){return Me.apply(this,arguments)}function Me(){return(Me=$(L().m(function n(e,t,r){return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Te(["gh"].concat(U(e)),{stdinData:r,allowedExitCodes:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function _e(){return Ue.apply(this,arguments)}function Ue(){return(Ue=$(L().m(function n(){var e,t,r,a,i,o;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ne(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v,t=e.trim(),r=t.split("/",2),a=_(r,2),i=a[0],o=a[1],i&&o||Ae("Error: could not determine current repository"),n.a(2,[i,o])}},n)}))).apply(this,arguments)}function Ge(){return Fe.apply(this,arguments)}function Fe(){return(Fe=$(L().m(function n(){var e;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ne(["pr","view","--json","number","--jq",".number"]);case 1:return e=n.v,n.a(2,e.trim())}},n)}))).apply(this,arguments)}function He(n,e){return We.apply(this,arguments)}function We(){return(We=$(L().m(function n(e,t){var r,a,i,o,c,u,s,l,f;return L().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),r=["api","graphql","-F","query=@-"],a=0,i=Object.entries(t);case 1:if(!(a<i.length)){n.n=4;break}if(o=_(i[a],2),c=o[0],void 0!==(u=o[1])&&""!==u){n.n=2;break}return n.a(3,3);case 2:r.push("-F","".concat(c,"=").concat(u));case 3:a++,n.n=1;break;case 4:return f=JSON,n.n=5,Ne(r,e);case 5:if(s=f.parse.call(f,n.v),Array.isArray(s.errors)){n.n=6;break}return n.a(2,s);case 6:l=s.errors.map(function(n){var e;return null!=(e=n.message)?e:"Unknown GraphQL error"}).join("\n"),Ae("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function Je(n){return S(n,Oe)}function Be(n){return structuredClone(n)}function Ye(n,e){var t,r,a,o,c=i(null!=(t=n[0])?t:"",n.slice(1),{encoding:"utf8",input:e});return{exitCode:null!=(r=c.status)?r:c.error?1:0,output:"".concat(null!=(a=c.stdout)?a:"").concat(null!=(o=c.stderr)?o:"")}}function Ke(n,e,t){return"gh"===n[0]&&0!==e&&/(HTTP 50[0234]\b|We had issues producing the response to your request)/i.test(t)}var Qe=/\btest\b/i,ze=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","jobs","name","number","startedAt","status","updatedAt","url","workflowName"],Ze=/^.*?\tUNKNOWN STEP\t\d{4}-\d{2}-\d{2}T[^Z]+Z\s*/,Ve=0===Ye(["rtk","--version"]).exitCode,Xe=function(){};function nt(n){return et.apply(this,arguments)}function et(){return(et=$(L().m(function n(e){var t,r,a,i,o,c,u,s,l,f,p,d,h,m,v,w;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return c=["pr","checks"],e&&c.push(e),c.push("--json","bucket,completedAt,description,event,link,name,startedAt,state,workflow"),u=[],n.p=1,n.n=2,De(c,[8]);case 2:s=n.v,u=s.trim().length>0?JSON.parse(s):[],n.n=5;break;case 3:if(n.p=3,!((w=n.v)instanceof SyntaxError)){n.n=4;break}u=[],n.n=5;break;case 4:throw w;case 5:l={},f=E(u);try{for(f.s();!(p=f.n()).done;)m=p.value,v=null!=(d=m.bucket)?d:"",l[v]=(null!=(h=l[v])?h:0)+1}catch(n){f.e(n)}finally{f.f()}return n.a(2,{summary:{total:u.length,pass:null!=(t=l.pass)?t:0,fail:null!=(r=l.fail)?r:0,pending:null!=(a=l.pending)?a:0,skipping:null!=(i=l.skipping)?i:0,cancel:null!=(o=l.cancel)?o:0},checks:u})}},n,null,[[1,3]])}))).apply(this,arguments)}function tt(n,e,t,r){return rt.apply(this,arguments)}function rt(){return(rt=$(L().m(function n(e,t,a,i){var o,c,u,s,l,f,p,d;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t=dt),void 0===a&&(a=nt),void 0===i&&(i=function(n){return r.write(n)}),o=0,n.n=1,a(e);case 1:c=n.v,u=Xe,n.p=2;case 3:if(s=at(c),l=it(s),f=_(l,2),p=f[0],d=f[1],!(Object.keys(p).length>0||0===Object.keys(d).length)){n.n=4;break}return n.a(2,[c,o,!1]);case 4:if(!(o>=100)){n.n=5;break}return n.a(2,[c,o,!0]);case 5:return 1===(o+=1)&&(u=en("Waiting for test-related workflows to finish.",36,i)),n.n=6,t(36);case 6:return n.n=7,a(e);case 7:c=n.v;case 8:n.n=3;break;case 9:return n.p=9,u(),n.f(9);case 10:return n.a(2)}},n,null,[[2,,9,10]])}))).apply(this,arguments)}function at(n){var e,t={},r=E(n.checks);try{for(r.s();!(e=r.n()).done;){var a=e.value,i=a.workflow||a.name||"unknown_workflow";null!=t[i]||(t[i]=[]),t[i].push(a)}}catch(n){r.e(n)}finally{r.f()}return Object.fromEntries(Object.entries(t).map(function(n){var e=_(n,2),t=e[0],r=function(n){var e,t=new Map,r=E(n);try{for(r.s();!(e=r.n()).done;){var a=e.value,i=st(a),o=t.get(i);o?o.push(a):t.set(i,[a])}}catch(n){r.e(n)}finally{r.f()}var c,u=[],s=E(t.values());try{for(s.s();!(c=s.n()).done;){var l=c.value;0!==u.length?wt(l)>wt(u)&&(u=l):u=l}}catch(n){s.e(n)}finally{s.f()}return u}(e[1]),a=r[0];a||Ae("Error: no checks found for workflow ".concat(t));for(var i=a,o=0,c=r;o<c.length;o++){var u=c[o];ft(u)>ft(i)&&(i=u)}return[t,{classification:lt(r),check:i,checks:r}]}))}function it(n){for(var e={},t={},r=0,a=Object.entries(n);r<a.length;r++){var i=_(a[r],2),o=i[0],c=i[1];"failed"!==c.classification?"running"===c.classification&&c.checks.some(function(n){return pt(n)})&&(t[o]=c):e[o]=c}return[e,t]}function ot(n){var e,t=null==n?void 0:n.link;if(t)return null==(e=t.match(/\/actions\/runs\/(\d+)/))?void 0:e[1]}function ct(n){return ut.apply(this,arguments)}function ut(){return(ut=$(L().m(function n(e){var t,a;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,void 0);case 1:return n.n=2,De(["run","view",e,"--json",ze.join(",")],[1]);case 2:if(0!==(t=n.v).trim().length){n.n=3;break}return n.a(2,void 0);case 3:return n.p=3,n.a(2,JSON.parse(t));case 4:if(n.p=4,!((a=n.v)instanceof SyntaxError)){n.n=5;break}return r.write("Warning: Could not parse JSON for workflow run ".concat(e,": ").concat(a.message,"\n")),n.a(2,void 0);case 5:throw a;case 6:return n.a(2)}},n,null,[[3,4]])}))).apply(this,arguments)}function st(n){var e=ot(n);return e?"run:".concat(e):"unknown_run"}function lt(n){var e=n.map(function(n){var e;return null!=(e=n.bucket)?e:""});return e.some(function(n){return!["pass","skipping","pending"].includes(n)})?"failed":e.includes("pending")?"running":"successful"}function ft(n){var e,t=n.completedAt;return t&&"0001-01-01T00:00:00Z"!==t?t:null!=(e=n.startedAt)?e:""}function pt(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&Qe.test(n)})}function dt(n){return ht.apply(this,arguments)}function ht(){return(ht=$(L().m(function n(e){return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,k(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function mt(){return vt.apply(this,arguments)}function vt(){return(vt=$(L().m(function n(){var e,t,r,a,i,o,c,u,s,l,f,p,d;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ge();case 1:return e=n.v,n.n=2,yt(e);case 2:return t=n.v,Re("Fetching latest CI results..."),n.n=3,tt(e);case 3:if(r=n.v,a=_(r,3),i=a[0],o=a[1],c=a[2],u=at(i),s=it(u),l=_(s,2),f=l[0],p=l[1],d={summary:Be(i.summary),waited_for_test_related_checks:o>0,test_related_check_wait_attempts:o,test_related_check_wait_timed_out:c,latestCommits:t},!(Object.keys(f).length>0)){n.n=5;break}return n.n=4,Promise.all(Object.entries(f).map($(L().m(function n(e){var t,r,a,i,o,c,u;return L().w(function(n){for(;;)switch(n.n){case 0:return t=_(e,2),r=t[0],a=t[1],n.n=1,kt(r,a);case 1:return i=n.v,o=N,c=N({},i),u=jt,n.n=2,St(a.check);case 2:return n.a(2,o(c,u(n.v)))}},n)}))));case 4:return d.failed_workflows=n.v,n.a(2,{output:Je(d),exitCode:1});case 5:if(!(Object.keys(p).length>0)){n.n=7;break}return d.test_workflow_output="Timed out waiting for test-related workflows to finish.",n.n=6,Promise.all(Object.entries(p).map(function(n){var e=_(n,2);return kt(e[0],e[1])}));case 6:return d.running_test_related_workflows=n.v,n.a(2,{output:Je(d),exitCode:1});case 7:return n.a(2,{output:bt(t),exitCode:0})}},n)}))).apply(this,arguments)}function wt(n){var e,t="",r=E(n);try{for(r.s();!(e=r.n()).done;){var a=ft(e.value);a>t&&(t=a)}}catch(n){r.e(n)}finally{r.f()}return t}function yt(n){return gt.apply(this,arguments)}function gt(){return(gt=$(L().m(function n(e){var t,r,a,i,o,c,u;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,_e();case 1:return a=n.v,i=_(a,2),o=i[0],c=i[1],n.n=2,He("\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n commits(last: 3) {\n nodes {\n commit {\n committedDate\n abbreviatedOid\n messageHeadline\n }\n }\n }\n }\n }\n }\n",{owner:o,name:c,number:Number(e)});case 2:return u=n.v,n.a(2,(null!=(t=null==(r=u.data)||null==(r=r.repository)||null==(r=r.pullRequest)||null==(r=r.commits)?void 0:r.nodes)?t:[]).flatMap(function(n){var e,t,r,a=At(null==(e=n.commit)?void 0:e.committedDate),i=At(null==(t=n.commit)?void 0:t.abbreviatedOid),o=At(null==(r=n.commit)?void 0:r.messageHeadline);return a&&i&&o?[{date:a,hash:i,title:o}]:[]}).toReversed())}},n)}))).apply(this,arguments)}function bt(n){return"All CI workflows passed.\n".concat(function(n){if(0===n.length)return"Latest commits: unavailable.\n";return Je({latestCommits:n})}(n))}function kt(n,e){return xt.apply(this,arguments)}function xt(){return(xt=$(L().m(function n(e,t){var r,a,i,o;return L().w(function(n){for(;;)switch(n.n){case 0:return a=ot(t.check),n.n=1,ct(a);case 1:return i=n.v,o=Ct(i,At(t.check.name)),n.a(2,{classification:t.classification,workflow:e,job:At(t.check.name),job_url:At(null==o?void 0:o.url),failed_step:Pt(o),run_id:a,run_url:null!=(r=At(null==i?void 0:i.url))?r:At(t.check.link),branch:At(null==i?void 0:i.headBranch),sha:At(null==i?void 0:i.headSha),conclusion:At(null==i?void 0:i.conclusion)})}},n)}))).apply(this,arguments)}function St(n){return It.apply(this,arguments)}function It(){return(It=$(L().m(function n(e){var t;return L().w(function(n){for(;;)switch(n.n){case 0:if(t=ot(e)){n.n=1;break}return n.a(2,"Failed latest result has no GitHub Actions run link.");case 1:return n.n=2,De(["run","view",t,"--log-failed"],[1]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function jt(n){return{failed_log:Ot(n)}}function Ot(n){var e=Rt(x(n));if(!Ve)return e;var t=Ye(["rtk","log"],e);return 0===t.exitCode&&t.output.trim().length>0?Rt(t.output):e}function Rt(n){return n.split("\n").map(function(n){return n.replace(Ze,"")}).join("\n").trim()}function At(n){return"string"==typeof n&&n.length>0?n:void 0}function Ct(n,e){var t,r;if(null!=n&&n.jobs&&0!==n.jobs.length)return null!=(t=null!=(r=n.jobs.find(function(n){return n.name===e}))?r:n.jobs.find(function(n){return"failure"===n.conclusion}))?t:n.jobs.find(function(n){return"completed"!==n.status})}function Pt(n){var e,t,r;if(null!=n&&n.steps&&0!==n.steps.length)return null!=(e=null==(t=n.steps.find(function(n){return"failure"===n.conclusion}))?void 0:t.name)?e:null==(r=n.steps.find(function(n){return"completed"!==n.status}))?void 0:r.name}function $t(){return Et.apply(this,arguments)}function Et(){return(Et=$(L().m(function n(){var e,t;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Nt();case 1:if(null==(e=n.v)){n.n=2;break}t=e,n.n=4;break;case 2:return n.n=3,Tt();case 3:t=n.v;case 4:return n.a(2,t)}},n)}))).apply(this,arguments)}function Tt(){return qt.apply(this,arguments)}function qt(){return(qt=$(L().m(function n(){var e;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Y(["gh","repo","view","--json","defaultBranchRef","--template","{{.defaultBranchRef.name}}"]);case 1:return e=n.v,n.a(2,Mt(e.trim(),"Error: could not determine the default branch"))}},n)}))).apply(this,arguments)}function Nt(){return Lt.apply(this,arguments)}function Lt(){return(Lt=$(L().m(function n(){var e,t,r;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,Y(["gh","pr","view","--json","baseRefName","--template","{{.baseRefName}}"]);case 1:return e=n.v,t=e.trim(),n.a(2,t.length>0?t:void 0);case 2:if(n.p=2,!Dt(r=n.v)){n.n=3;break}return n.a(2,void 0);case 3:throw r;case 4:return n.a(2)}},n,null,[[0,2]])}))).apply(this,arguments)}function Dt(n){return/no pull requests? found for branch/i.test(String(n))}function Mt(n,e){if(n.length>0)return n;throw new Error(e)}function _t(n){return Qt(n,"issue")}function Ut(n){return Qt(n,"pull request")}function Gt(n){return Ft.apply(this,arguments)}function Ft(){return(Ft=$(L().m(function n(e){var t,r,a,i,o;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,_e();case 1:return t=n.v,r=_(t,2),a=r[0],i=r[1],n.n=2,zt(a,i,_t(e));case 2:return o=n.v,Re("Fetched issue #".concat(o.number," messages.")),n.a(2,Je({issue:o}))}},n)}))).apply(this,arguments)}function Ht(n){return Wt.apply(this,arguments)}function Wt(){return(Wt=$(L().m(function n(e){var t,r,a;return L().w(function(n){for(;;)switch(n.n){case 0:if(void 0!==e){n.n=2;break}return n.n=1,Ge();case 1:a=n.v,n.n=3;break;case 2:a=Ut(e);case 3:return t=a,n.n=4,Yt(t);case 4:return r=n.v,Re("Fetched pull request #".concat(r.number," messages.")),n.a(2,Je({pull_request:r}))}},n)}))).apply(this,arguments)}function Jt(){return Bt.apply(this,arguments)}function Bt(){return(Bt=$(L().m(function n(){var e,t,r;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,De(["pr","view","--json","number","--jq",".number"],[1]);case 1:if(e=n.v,t=e.trim(),!Dt(e)&&/^\d+$/.test(t)){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,Yt(t);case 3:return r=n.v,n.a(2,Je({pull_request:r}))}},n)}))).apply(this,arguments)}function Yt(n){return Kt.apply(this,arguments)}function Kt(){return(Kt=$(L().m(function n(e){var t,r,a,i;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,_e();case 1:return t=n.v,r=_(t,2),a=r[0],i=r[1],n.n=2,Vt(a,i,e);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Qt(n,e){var t=String(n).trim();if(0===t.length&&Ae("Error: ".concat(e," reference is required"),2),/^\d+$/.test(t))return t;var r="issue"===e?"issues":"pull",a=t.match(new RegExp("^https?://(?:www\\.)?github\\.com/[^/]+/[^/]+/".concat(r,"/(\\d+)(?:/|$)")));if(null!=a&&a[1])return a[1];Ae("Error: expected a GitHub ".concat(e,' number or URL, received "').concat(t,'"'),2)}function zt(n,e,t){return Zt.apply(this,arguments)}function Zt(){return(Zt=$(L().m(function n(e,t,r){var a,i;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,cr({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:t,number:r,noun:"issue",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.issue}});case 1:return a=n.v,n.n=2,ir({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n issue(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.issue)?void 0:e.comments},mapNode:sr});case 2:return i=n.v,n.a(2,N(N({},a),{},{messages:i}))}},n)}))).apply(this,arguments)}function Vt(n,e,t){return Xt.apply(this,arguments)}function Xt(){return(Xt=$(L().m(function n(e,t,r){var a,i,o,c,u;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,cr({query:"\n query($owner: String!, $name: String!, $number: Int!) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n number\n title\n url\n body\n author { login }\n }\n }\n }\n",owner:e,name:t,number:r,noun:"pull request",selectMetadata:function(n){var e;return null==(e=n.data)||null==(e=e.repository)?void 0:e.pullRequest}});case 1:return a=n.v,n.n=2,Promise.all([er(e,t,r),rr(e,t,r)]);case 2:return i=n.v,o=_(i,2),c=o[0],u=o[1],n.a(2,N(N({},a),{},{messages:[].concat(U(c),U(u)).toSorted(nr)}))}},n)}))).apply(this,arguments)}function nr(n,e){var t="string"==typeof n.createdAt?n.createdAt:"",r="string"==typeof e.createdAt?e.createdAt:"";return t.localeCompare(r)}function er(n,e,t){return tr.apply(this,arguments)}function tr(){return(tr=$(L().m(function n(e,t,r){return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ir({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n body\n createdAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.comments},mapNode:sr});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function rr(n,e,t){return ar.apply(this,arguments)}function ar(){return(ar=$(L().m(function n(e,t,r){return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ir({query:"\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviews(first: 100, after: $cursor) {\n nodes {\n id\n body\n state\n submittedAt\n url\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",owner:e,name:t,number:r,selectConnection:function(n){var e;return null==(e=n.data)||null==(e=e.repository)||null==(e=e.pullRequest)?void 0:e.reviews},mapNode:lr});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function ir(n){return or.apply(this,arguments)}function or(){return(or=$(L().m(function n(e){var t,r,a,i,o;return L().w(function(n){for(;;)switch(n.n){case 0:r=[];case 1:return o=e,n.n=2,He(e.query,{owner:e.owner,name:e.name,number:Number(e.number),cursor:t});case 2:if(i=o.selectConnection.call(o,n.v)){n.n=3;break}return n.a(2,r);case 3:if(r.push.apply(r,U(i.nodes.map(e.mapNode).filter(fr))),i.pageInfo.hasNextPage){n.n=4;break}return n.a(2,r);case 4:t=null!=(a=i.pageInfo.endCursor)?a:void 0;case 5:n.n=1;break;case 6:return n.a(2)}},n)}))).apply(this,arguments)}function cr(n){return ur.apply(this,arguments)}function ur(){return(ur=$(L().m(function n(e){var t,r,a,i,o;return L().w(function(n){for(;;)switch(n.n){case 0:return o=e,n.n=1,He(e.query,{owner:e.owner,name:e.name,number:Number(e.number)});case 1:return(i=o.selectMetadata.call(o,n.v))||Ae("Could not find ".concat(e.noun," #").concat(e.number," in ").concat(e.owner,"/").concat(e.name,".")),n.a(2,{number:i.number,title:i.title,url:i.url,author:null!=(t=null==(r=i.author)?void 0:r.login)?t:void 0,body:null!=(a=i.body)?a:""})}},n)}))).apply(this,arguments)}function sr(n){var e,t;return{type:"comment",author:null!=(e=null==(t=n.author)?void 0:t.login)?e:void 0,createdAt:n.createdAt,url:n.url,body:n.body}}function lr(n){var e,t,r,a,i;return{type:"review",author:null!=(e=null==(t=n.author)?void 0:t.login)?e:void 0,state:null!=(r=n.state)?r:void 0,createdAt:null!=(a=n.submittedAt)?a:void 0,url:n.url,body:null!=(i=n.body)?i:""}}function fr(n){return"string"==typeof n.body&&n.body.length>0}function pr(n){return dr.apply(this,arguments)}function dr(){return(dr=$(L().m(function n(e){var t,r,a,i,o,c,u,s,l,f;return L().w(function(n){for(;;)switch(n.n){case 0:return r=(t=void 0===e?{}:e).body,a=t.title,n.n=1,Te(["git","branch","--show-current"]);case 1:return i=n.v,o=i.trim(),n.n=2,Ne(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return c=n.v,u=c.trim(),o||Ae("Error: could not determine current branch"),u||Ae("Error: could not determine default branch"),o===u&&Ae("Error: current branch is the default branch (".concat(u,")")),s=["pr","create","--base",u,"--head",o,"--fill"],a&&s.push("--title",a),r&&s.push("--body-file","-"),Re("Creating pull request..."),n.n=3,Ne(s,r);case 3:return l=Je,f=JSON,n.n=4,Ne(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,l(f.parse.call(f,n.v)))}},n)}))).apply(this,arguments)}function hr(n){return mr.apply(this,arguments)}function mr(){return(mr=$(L().m(function n(e){var t,r,a;return L().w(function(n){for(;;)switch(n.n){case 0:return t=e.body,r=e.title,n.n=1,Ge();case 1:return a=n.v,Re("Updating pull request #".concat(a,"...")),n.n=2,vr(a,["--title",r,"--body-file","-"],t);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function vr(n,e,t){return wr.apply(this,arguments)}function wr(){return(wr=$(L().m(function n(e,t,r){var a,i;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ne(["pr","edit",e].concat(U(t)),r);case 1:return a=Je,i=JSON,n.n=2,Ne(["pr","view",e,"--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author,body"]);case 2:return n.a(2,a(i.parse.call(i,n.v)))}},n)}))).apply(this,arguments)}function yr(){return gr.apply(this,arguments)}function gr(){return(gr=$(L().m(function n(){var e,t,r,a,i,o,c,u;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,$e("Error: JSON input is required on stdin");case 1:for(e=n.v,t=Er(e),r={},a=0,i=Object.entries(t.replies);a<i.length;a++)o=_(i[a],2),c=o[0],"string"==typeof(u=o[1])&&u.length>0&&(r[c]=u);return n.a(2,r)}},n)}))).apply(this,arguments)}function br(n,e,t,r,a){return kr.apply(this,arguments)}function kr(){return(kr=$(L().m(function n(e,t,r,a,i){var o,c,u,s,l,f,p,d,h;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,He(e,{owner:t,name:r,number:Number(a),cursor:o});case 1:s=n.v,(l=null==(c=s.data)||null==(c=c.repository)||null==(c=c.pullRequest)?void 0:c.reviewThreads)||Ae("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),f=E(l.nodes),n.p=2,f.s();case 3:if((p=f.n()).done){n.n=5;break}return d=p.value,n.n=4,i(d);case 4:n.n=3;break;case 5:n.n=7;break;case 6:n.p=6,h=n.v,f.e(h);case 7:return n.p=7,f.f(),n.f(7);case 8:if(l.pageInfo.hasNextPage){n.n=9;break}return n.a(2);case 9:o=null!=(u=l.pageInfo.endCursor)?u:void 0;case 10:n.n=0;break;case 11:return n.a(2)}},n,null,[[2,6,7,8]])}))).apply(this,arguments)}function xr(n,e,t){return Sr.apply(this,arguments)}function Sr(){return(Sr=$(L().m(function n(e,t,r){var a;return L().w(function(n){for(;;)switch(n.n){case 0:return a=[],n.n=1,br("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,t,r,function(n){n.isResolved||a.push(n.id)});case 1:return n.a(2,a)}},n)}))).apply(this,arguments)}function Ir(n,e,t){return jr.apply(this,arguments)}function jr(){return(jr=$(L().m(function n(e,t,r){var a,i;return L().w(function(n){for(;;)switch(n.n){case 0:return a=[],i=new Map,n.n=1,br("\n query($owner: String!, $name: String!, $number: Int!, $cursor: String) {\n repository(owner: $owner, name: $name) {\n pullRequest(number: $number) {\n reviewThreads(first: 100, after: $cursor) {\n nodes {\n id\n isResolved\n isOutdated\n path\n line\n originalLine\n startLine\n originalStartLine\n comments(first: 100) {\n nodes {\n id\n url\n body\n createdAt\n line\n originalLine\n startLine\n originalStartLine\n commit { oid }\n originalCommit { oid }\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",e,t,r,$(L().m(function n(r){var o,c,u,s,l,f,p,d,h,m,v;return L().w(function(n){for(;;)switch(n.n){case 0:if(!r.isResolved){n.n=1;break}return n.a(2);case 1:return n.n=2,Promise.all(r.comments.nodes.map(function(n){var a,o;return Pr(n,null!=(a=r.path)?a:void 0,null!=(o=r.isOutdated)&&o,e,t,i)}));case 2:c=n.v,u=r.comments.pageInfo,s=null!=(o=u.endCursor)?o:void 0;case 3:if(!u.hasNextPage){n.n=6;break}return n.n=4,He("\n query($threadId: ID!, $cursor: String) {\n node(id: $threadId) {\n ... on PullRequestReviewThread {\n comments(first: 100, after: $cursor) {\n nodes {\n id\n url\n body\n createdAt\n line\n originalLine\n startLine\n originalStartLine\n commit { oid }\n originalCommit { oid }\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",{threadId:r.id,cursor:s});case 4:return p=n.v,(d=null==(l=p.data)||null==(l=l.node)?void 0:l.comments)||Ae("Could not find comments in GraphQL response for thread ".concat(r.id,".")),h=c.push,m=c,v=U,n.n=5,Promise.all(d.nodes.map(function(n){var a,o;return Pr(n,null!=(a=r.path)?a:void 0,null!=(o=r.isOutdated)&&o,e,t,i)}));case 5:h.apply.call(h,m,v(n.v)),u=d.pageInfo,s=null!=(f=u.endCursor)?f:void 0,n.n=3;break;case 6:a.push({id:r.id,isResolved:r.isResolved,isOutdated:r.isOutdated,path:r.path,line:r.line,originalLine:r.originalLine,startLine:r.startLine,originalStartLine:r.originalStartLine,comments:c});case 7:return n.a(2)}},n)})));case 1:return n.a(2,a)}},n)}))).apply(this,arguments)}function Or(){return Rr.apply(this,arguments)}function Rr(){return(Rr=$(L().m(function n(){var e,t,r,a,i,o,c;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,_e();case 1:return e=n.v,t=_(e,2),r=t[0],a=t[1],n.n=2,Ge();case 2:return i=n.v,Re("Fetching unresolved review threads..."),o=Je,n.n=3,Ir(r,a,i);case 3:return c=n.v,n.a(2,o({unresolved_threads:c}))}},n)}))).apply(this,arguments)}function Ar(n){return Cr.apply(this,arguments)}function Cr(){return(Cr=$(L().m(function n(e){var t,r,a,i,o,c,u,s,l,f,p,d,h,m,v,w,y,g,b,k;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,_e();case 1:return t=n.v,r=_(t,2),a=r[0],i=r[1],n.n=2,Ge();case 2:return o=n.v,g=Set,n.n=3,xr(a,i,o);case 3:b=n.v,c=new g(b),Re("Replying to ".concat(Object.keys(e).length," review threads...")),u=[],s=Object.entries(e),l=E(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(d=_(f.value,2),h=d[0],m=_(d[1],2),v=m[0],w=m[1],Re("Processing ".concat(h+1,"/").concat(s.length,": ").concat(v)),c.has(v)){n.n=6;break}return n.a(3,8);case 6:return n.n=7,He("\n mutation ($threadId: ID!, $body: String!) {\n addPullRequestReviewThreadReply(input: { pullRequestReviewThreadId: $threadId, body: $body }) {\n comment {\n id\n url\n }\n }\n resolveReviewThread(input: { threadId: $threadId }) {\n thread {\n id\n isResolved\n }\n }\n }\n ",{threadId:v,body:w});case 7:y=n.v,null!=(p=y.data)&&null!=(p=p.resolveReviewThread)&&null!=(p=p.thread)&&p.isResolved?u.push(v):Re("Warning: failed to resolve thread ".concat(v,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,k=n.v,l.e(k);case 11:return n.p=11,l.f(),n.f(11);case 12:return Re("Done."),n.a(2,Je({resolved_thread_ids:u}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function Pr(n,e,t,r,a,i){return $r.apply(this,arguments)}function $r(){return($r=$(L().m(function n(e,t,r,a,i,o){var c,u,s,l,f,p,d,h;return L().w(function(n){for(;;)switch(n.n){case 0:return u=e.author,s=e.id,l=e.url,f=e.body,p=e.createdAt,d="string"==typeof u?u:null!=(c=null==u?void 0:u.login)?c:void 0,n.n=1,Tr(e,t,r,a,i,o);case 1:return h=n.v,n.a(2,{id:s,url:l,body:f,createdAt:p,author:d,snippet:h})}},n)}))).apply(this,arguments)}function Er(n){try{var e=JSON.parse(n);return function(n){if("object"!==G(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==G(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||Ae("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&Ae("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function Tr(n,e,t,r,a,i){return qr.apply(this,arguments)}function qr(){return(qr=$(L().m(function n(e,t,r,a,i,o){var c,u,s,l;return L().w(function(n){for(;;)switch(n.n){case 0:if(t){n.n=1;break}return n.a(2,void 0);case 1:if(c=r?Lr(e,t):Nr(e,t),u=r?Nr(e,t):Lr(e,t),s=null!=c?c:u){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,Mr(a,i,s.expression,o);case 3:if(void 0!==(l=n.v)){n.n=4;break}return n.a(2,void 0);case 4:return n.a(2,Fr(l,s.startLine,s.endLine))}},n)}))).apply(this,arguments)}function Nr(n,e){var t;return Dr(null==(t=n.commit)?void 0:t.oid,e,n.startLine,n.line)}function Lr(n,e){var t;return Dr(null==(t=n.originalCommit)?void 0:t.oid,e,n.originalStartLine,n.originalLine)}function Dr(n,e,t,r){if(n&&r)return{expression:"".concat(n,":").concat(e),startLine:null!=t?t:r,endLine:r}}function Mr(n,e,t,r){return _r.apply(this,arguments)}function _r(){return(_r=$(L().m(function n(e,t,r,a){var i,o;return L().w(function(n){for(;;)switch(n.n){case 0:return i="".concat(e,"/").concat(t,":").concat(r),(o=a.get(i))||(o=Ur(e,t,r),a.set(i,o)),n.n=1,o;case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Ur(n,e,t){return Gr.apply(this,arguments)}function Gr(){return(Gr=$(L().m(function n(e,t,r){var a,i,o;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,He("\n query($owner: String!, $name: String!, $expression: String!) {\n repository(owner: $owner, name: $name) {\n object(expression: $expression) {\n ... on Blob {\n isBinary\n text\n }\n }\n }\n }\n",{owner:e,name:t,expression:r});case 1:if(i=n.v,(o=null==(a=i.data)||null==(a=a.repository)?void 0:a.object)&&!o.isBinary&&"string"==typeof o.text){n.n=2;break}return n.a(2,void 0);case 2:return n.a(2,o.text)}},n)}))).apply(this,arguments)}function Fr(n,e,t){var r=n.split("\n");if(r.length>0&&""===r.at(-1)&&r.pop(),0!==r.length){for(var a=Hr(e,r.length),i=Hr(t,r.length),o=Math.max(1,a-2),c=Math.min(r.length,i+2),u=String(c).length,s=[],l=o;l<=c;l+=1){var f,p=l>=a&&l<=i?">":" ";s.push("".concat(p," ").concat(String(l).padStart(u," ")," | ").concat(null!=(f=r[l-1])?f:""))}return s.join("\n")}}function Hr(n,e){return Math.min(Math.max(n,1),e)}var Wr="Other agents may be working concurrently; delete only temporary files you created, verify that those paths no longer exist, then run `git status --porcelain=v1 --untracked-files=all`.";function Jr(n){return Br.apply(this,arguments)}function Br(){return(Br=$(L().m(function n(e){var t;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Gt(e);case 1:return t=n.v,n.a(2,"\nPlan a GitHub issue by gathering context, writing a specification for software engineers, and posting or updating that specification back to the issue.\nThe target issue number is #".concat(e,". Here is the fetched issue context as YAML:\n~~~~yaml\n").concat(t.trim(),"\n~~~~\n\nFollow this workflow:\n1. Read the above issue body and timeline messages carefully.\n2. Collect enough supporting information before writing the specification:\n - Inspect the relevant code, surrounding call sites, related types, tests, configuration, recent diffs, and any other local context needed to understand the change.\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the issue depends on runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - If the issue depends on a library, API, or language feature, confirm it against the latest official documentation or another primary source instead of relying on memory.\n3. Write the specification for the issue comment.\n - Write the background based on the collected information.\n - Define a goal that clearly guides our implementation in the right direction.\n - Write a detailed specification incorporating the evidence you collected.\n - If needed, include code snippets that explain how to use libraries or APIs, along with references to their documentation.\n4. ").concat(Wr,"\n5. Post the specification back to issue #").concat(e,", then print the issue URL.\n - If the issue already has a specification, update the existing comment instead of posting a new one.\n\nFormat the issue comment exactly like this, but do not include the surrounding `~~~~` fences in the actual comment:\n~~~~\n## Background\n\n[Summarize the current behavior and explain the motivation behind this issue]\n\n## Goal\n\n[Define the goal we want to achieve in this issue]\n\n## Specification\n\n[Detailed specification for software engineers]\n\n## Key Technologies (ONLY if external resources are needed)\n\n[Describe what libraries or APIs we should use, including concrete versions and code snippets.]\n\n~~~~\n").trim())}},n)}))).apply(this,arguments)}function Yr(n){return"git merge-base ".concat(Kr("origin/".concat(n))," HEAD 2>/dev/null || git merge-base ").concat(Kr(n)," HEAD")}function Kr(n){return"'".concat(n.replaceAll("'","'\"'\"'"),"'")}function Qr(n){return zr.apply(this,arguments)}function zr(){return(zr=$(L().m(function n(e){var t,r,a;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,$t();case 1:return t=n.v,r=Yr(t),n.n=2,Jt();case 2:return a=n.v,n.a(2,"\nReview the current ".concat(a?"pull request":"branch"," against its base branch ").concat(t,' via `git diff "$(').concat(r,')"`.\nUse the known facts, if provided, to avoid repeating fact checks and findings. Reuse a known fact only when the same current-code evidence, command result, or primary-source evidence still applies. If the current code or source context may have changed enough to invalidate a known fact, refresh only that affected fact.\nFollow this workflow:\n1. Review each finding:\n 1. Gather supporting evidence:\n - Inspect the referenced code and the surrounding call sites, related types, tests, configuration, and recent diffs when they affect the claim.\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the finding is about runtime behavior, reproduce it with the smallest practical experiment, such as a focused command, a tiny script, a temporary local assertion, or another narrow check that does not change the intended behavior.\n - If the finding depends on framework, library, platform, or language behavior, confirm it against the latest official documentation or another primary source instead of relying on memory.\n 2. Judge whether the finding is valid:\n - Mark it valid only when the available evidence shows the reported issue is still real in the current codebase.\n - Otherwise, mark it not valid.\n 3. Propose a fix without modifying the code:\n - Describe the smallest practical change that would address the finding.\n - Investigate the likely impact of that change by inspecting the affected call sites, related types, tests, configuration, and adjacent behavior, and note any follow-up changes or risks the fix would need to account for.\n2. ').concat(Wr,"\n3. Report only new valid findings that are not already covered by the known facts. For each finding, include the evidence, proposed fix, and likely impact. Do not modify the code.\n - When reporting valid findings, include a `## Verified Facts` section after the findings. Include only concise, review-relevant facts: what was verified, why it matters to the review, and how it was verified.\n - If there are no new valid findings, respond exactly with: `").concat(an,"`\n\n").concat(Zr(e),"\n\n").concat(Vr(a),"\n").trim())}},n)}))).apply(this,arguments)}function Zr(n){var e=null==n?void 0:n.trim();return e?"Known facts:\n~~~~markdown\n".concat(e,"\n~~~~\n").trim():""}function Vr(n){return n?"Current pull request context:\n~~~~yaml\n".concat(n.trim(),"\n~~~~\n").trim():""}function Xr(n,e,t){var r=t.replaceAll("\n"," ").replaceAll('"',"'");return'\nUse `playwright-cli` skill to take a screenshot of "'.concat(r,'" by navigating from ').concat(n,' to "').concat(e,'" page.\n\nFollow this workflow:\n1. Open the initial page at ').concat(n,".\n2. Navigate from that initial page until you reach the page identified as ").concat(e,'.\n - If code errors, runtime failures, or broken UI flows prevent navigation, investigate the cause in the local codebase, make the smallest practical code fix, and verify that the page can now be reached before continuing.\n - If you cannot fix the errors, report on the errors then stop.\n3. Capture a screenshot that focuses on this target: "').concat(r,'".\n4. Keep the generated image artifact and report the screenshot file path plus a brief description of what was captured. If you had to fix code first, also summarize the fix.\n').trim()}function na(){return ea.apply(this,arguments)}function ea(){return(ea=$(L().m(function n(){var e,t,r;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,$t();case 1:return e=n.v,t=Yr(e),n.n=2,Jt();case 2:return r=n.v,n.a(2,"\nSimplify the current ".concat(r?"pull request":"branch",' against its base branch using `git diff "$(').concat(t,")\"`.\nFirst, inspect the diff and review the surrounding code for each changed area. This includes nearby functions, types, call sites, tests, configurations, and any other files that help determine if the change is truly necessary.\nLeverage this context to identify redundancies that can be safely removed or simplified. Look for duplicate logic, repeated conditionals, unnecessary abstractions, overlapping code paths, dead code, or edits made obsolete upon understanding the broader context.\n\nPrioritize simplifications that reduce the reviewer's burden, such as:\n- Removing redundant edits or dead code.\n- Eliminating or merging duplicated logic discovered by comparing the diff with related code.\n- Flattening unnecessarily complex logic introduced in the diff (e.g., using early returns to reduce nesting, simplifying boolean expressions, or removing redundant wrapper functions).\n\nCommit and push your changes. Afterward, summarize the redundancies or unnecessary complexity you have removed.\n\n").concat(r?"Current pull request context:\n~~~~yaml\n".concat(r.trim(),"\n~~~~"):"","\n").trim())}},n)}))).apply(this,arguments)}var ta="@willbooster/agent-skills",ra=/\.(?:[cm]?[jt]s|json|md|ya?ml)$/i;function aa(){return ia.apply(this,arguments)}function ia(){return(ia=$(L().m(function n(){var e,t;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,oa();case 1:return e=n.v,process.stdout.write("Installing ".concat(e.metadata.name,"@").concat(e.metadata.version,"\n")),n.n=2,d(v(j(),"agent-skills-install-"));case 2:return t=n.v,n.p=3,n.n=4,p(v(e.path,"package.json"),v(t,"package.json"));case 4:return n.n=5,p(v(e.path,"skills"),v(t,"skills"),{recursive:!0});case 5:return n.n=6,sa(t,e.metadata);case 6:return n.n=7,Y(["bunx","skills@latest","add",t,"--global","--yes","--skill","*","--agent","claude-code","--agent","codex","--agent","gemini-cli"],{waitMessage:"Installing packaged skills globally."});case 7:return n.p=7,n.n=8,f(t,{recursive:!0,force:!0});case 8:return n.f(7);case 9:return n.a(2)}},n,null,[[3,,7,9]])}))).apply(this,arguments)}function oa(){return ca.apply(this,arguments)}function ca(){return(ca=$(L().m(function n(){var e,t,r,a,i,o;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:e=m(O(import.meta.url));case 1:return t=v(e,"package.json"),n.p=2,i=ua,o=t,n.n=3,u(t,"utf8");case 3:if((r=i(o,n.v)).name!==ta){n.n=4;break}return n.a(2,{metadata:r,path:e});case 4:n.n=6;break;case 5:n.p=5,n.v;case 6:a=m(e),I.notStrictEqual(e,a,"Failed to find ".concat(ta," package root")),e=a,n.n=1;break;case 7:return n.a(2)}},n,null,[[2,5]])}))).apply(this,arguments)}function ua(n,e){var t=JSON.parse(e);return I.ok(t.name&&t.version,"Failed to read name or version from ".concat(n)),t}function sa(n,e){return la.apply(this,arguments)}function la(){return(la=$(L().m(function n(e,t){var r,a;return L().w(function(n){for(;;)switch(n.n){case 0:return r="".concat(t.name,"@latest"),a="".concat(t.name,"@").concat(t.version),n.n=1,fa(e,function(n){return n.replaceAll(r,a)});case 1:return n.a(2)}},n)}))).apply(this,arguments)}function fa(n,e){return pa.apply(this,arguments)}function pa(){return(pa=$(L().m(function n(e,t){var r,a,i,o,c,s,f,p;return L().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,l(e,{recursive:!0,withFileTypes:!0});case 1:r=n.v,a=E(r),n.p=2,a.s();case 3:if((i=a.n()).done){n.n=7;break}if((o=i.value).isFile()&&ra.test(o.name)){n.n=4;break}return n.a(3,6);case 4:return c=v(o.parentPath,o.name),n.n=5,u(c,"utf8");case 5:if(s=n.v,(f=t(s))===s){n.n=6;break}return n.n=6,h(c,f);case 6:n.n=3;break;case 7:n.n=9;break;case 8:n.p=8,p=n.v,a.e(p);case 9:return n.p=9,a.f(),n.f(9);case 10:return n.a(2)}},n,null,[[2,8,9,10]])}))).apply(this,arguments)}var da=new n;function ha(n,e){return ma.apply(this,arguments)}function ma(){return(ma=$(L().m(function n(e,t){var r,a;return L().w(function(n){for(;;)switch(n.n){case 0:return void 0===t&&(t={}),n.n=1,va();case 1:return r=n.v,a=Qr(r),n.a(2,"all"===e?wn(a,{allAgentsLabel:"review agents",interactive:t.interactive,mapOutput:function(n,e){return Dn(e)?void 0:e}}):gn(e,a,t))}},n)}))).apply(this,arguments)}function va(){return wa.apply(this,arguments)}function wa(){return(wa=$(L().m(function n(){var e;return L().w(function(n){for(;;)switch(n.n){case 0:if(!t.isTTY){n.n=1;break}return n.a(2,void 0);case 1:return n.n=2,Ce();case 2:return e=n.v,n.a(2,e.length>0?e:void 0)}},n)}))).apply(this,arguments)}function ya(n){var t=da.command(n.name).description(n.description).allowExcessArguments(!1);n.argumentName&&t.argument(n.argumentName,n.argumentDescription),t.addOption(new e("--agent <agent>",n.optionDescription).choices(n.choices).makeOptionMandatory()).option("--interactive","Run the selected agent through its interactive terminal UI").action($(L().m(function e(){var t,r,a,i,o,c,u,s,l,f=arguments;return L().w(function(e){for(;;)switch(e.n){case 0:for(t=f.length,r=new Array(t),a=0;a<t;a++)r[a]=f[a];return i=_(r,2),o=i[0],c=i[1],u="string"==typeof o?o:"",s="string"==typeof o?c:o,l=process.stdout,e.n=1,n.run(s.agent,u,s);case 1:l.write.call(l,e.v);case 2:return e.a(2)}},e)})))}function ga(n,e,t){var r=da.command(n).description(e).option("--interactive","Run the selected agent through its interactive terminal UI").allowExcessArguments(!1);"function"!=typeof t?r.argument(t.argumentName,t.argumentDescription).action($(L().m(function n(e,r){var a;return L().w(function(n){for(;;)switch(n.n){case 0:return a=process.stdout,n.n=1,t.run(e,r);case 1:a.write.call(a,n.v);case 2:return n.a(2)}},n)}))):r.action($(L().m(function n(e){var r;return L().w(function(n){for(;;)switch(n.n){case 0:return r=process.stdout,n.n=1,t(e);case 1:r.write.call(r,n.v);case 2:return n.a(2)}},n)})))}function ba(){return(ba=$(L().m(function n(e,t,r){var a;return L().w(function(n){for(;;)switch(n.n){case 0:return void 0===r&&(r={}),a=xa,n.n=1,gn(e,ka(t),r);case 1:return n.a(2,a(n.v,{fallbackToOutput:!0===r.interactive}))}},n)}))).apply(this,arguments)}function ka(n){return"".concat(n,"\n\nReport on the result with a markdown code block with triple backticks.")}function xa(n,e){var t;void 0===e&&(e={});var r=null==(t=U(n.matchAll(/```[^\n`]*\n?([\s\S]*?)```/g)).at(-1))?void 0:t[1];if(!r){if(e.fallbackToOutput)return n;throw new Error("Agent output did not contain a markdown code block with triple backticks.")}return r}da.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),da.command("install-skills").description("Install all packaged skills globally for Claude Code, Codex, and Gemini CLI").allowExcessArguments(!1).action($(L().m(function n(){return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,aa();case 1:process.stdout.write("Done\n");case 2:return n.a(2)}},n)}))),da.command("update-bun-deps").description("Update all Bun dependencies in the root package and workspace packages").allowExcessArguments(!1).action($(L().m(function n(){return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Yn();case 1:return n.a(2)}},n)}))),ya({name:"agent",description:"Run the selected agent with the specified prompt",optionDescription:"Use an agent",choices:["codex","claude","gemini"],argumentName:"<prompt>",argumentDescription:"Prompt to pass to the agent",run:function(n,e,t){return function(n,e,t){return ba.apply(this,arguments)}(n,e,t)}}),da.command("review").description("Run review against the current branch with the selected agent").addOption(new e("--agent <agent>","Use a review agent").choices(["all","codex","claude","gemini"]).makeOptionMandatory()).option("--interactive","Run the selected agent through its interactive terminal UI").allowExcessArguments(!1).action($(L().m(function n(e){var t;return L().w(function(n){for(;;)switch(n.n){case 0:return t=process.stdout,n.n=1,ha(e.agent,e);case 1:t.write.call(t,n.v);case 2:return n.a(2)}},n)}))),ga("review-codex","Run Codex review against the current branch",function(n){return ha("codex",n)}),ga("review-claude","Run Claude Code review against the current branch",function(n){return ha("claude",n)}),ga("review-gemini","Run Gemini CLI review against the current branch",function(n){return ha("gemini",n)}),ya({name:"plan",description:"Run planning against the specified issue with the selected agent",optionDescription:"Use a planning agent",choices:["all","codex","claude","gemini"],argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n,e,t){return"all"===n?wn(Jr(_t(e)),{allAgentsLabel:"planning agents",interactive:t.interactive}):gn(n,Jr(_t(e)),t)}}),ga("plan-codex","Run Codex planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n,e){return gn("codex",Jr(_t(n)),e)}}),ga("plan-claude","Run Claude Code planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n,e){return gn("claude",Jr(_t(n)),e)}}),ga("plan-gemini","Run Gemini CLI planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n,e){return gn("gemini",Jr(_t(n)),e)}}),da.command("screenshot").description("Take a screenshot with the selected agent via playwright-cli").argument("<initial-url>","Initial URL to open before navigating").argument("<page-name>","Page name to navigate to from the initial page").argument("<description>","Description of the part to capture in the screenshot").addOption(new e("--agent <agent>","Use a screenshot agent").choices(["codex","claude","gemini"]).makeOptionMandatory()).option("--interactive","Run the selected agent through its interactive terminal UI").allowExcessArguments(!1).action($(L().m(function n(e,t,r,a){var i;return L().w(function(n){for(;;)switch(n.n){case 0:return i=process.stdout,n.n=1,gn(a.agent,Xr(e,t,r),a);case 1:i.write.call(i,n.v);case 2:return n.a(2)}},n)}))),ya({name:"simplify",description:"Run PR simplification against the current branch with the selected agent",optionDescription:"Use a simplify agent",choices:["codex","claude","gemini"],run:function(n,e,t){return gn(n,na(),t)}}),ga("simplify-codex","Run Codex PR simplification against the current branch",function(n){return gn("codex",na(),n)}),ga("simplify-claude","Run Claude Code PR simplification against the current branch",function(n){return gn("claude",na(),n)}),ga("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(n){return gn("gemini",na(),n)}),da.command("open-pr").description("Create a pull request for the current branch").argument("<title>","Pull request title").allowExcessArguments(!1).action($(L().m(function n(e){var t,r;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ce();case 1:return t=n.v,n.n=2,pr({body:t||void 0,title:e});case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),da.command("update-pr").description("Update the current pull request title and body").argument("<title>","Pull request title").allowExcessArguments(!1).action($(L().m(function n(e){var t,r;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,$e("Error: PR body input is required on stdin");case 1:return t=n.v,n.n=2,hr({body:t,title:e});case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),da.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action($(L().m(function n(){var e;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,mt();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),da.command("fetch-issue").description("Fetch an issue body and timeline messages as YAML").argument("<issue>","GitHub issue number or URL").allowExcessArguments(!1).action($(L().m(function n(e){var t;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Gt(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),da.command("fetch-pr").description("Fetch a pull request body and timeline messages as YAML, excluding inline comments").argument("[pr]","GitHub pull request number or URL; defaults to the current branch pull request").allowExcessArguments(!1).action($(L().m(function n(e){var t;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ht(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),da.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action($(L().m(function n(){var e;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Or();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),da.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action($(L().m(function n(){var e,t;return L().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,yr();case 1:return e=n.v,n.n=2,Ar(e);case 2:t=n.v,process.stdout.write(t);case 3:return n.a(2)}},n)}))),await da.parseAsync(process.argv);
|
|
5
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy9kZXBzL3VwZGF0ZUJ1bkRlcGVuZGVuY2llcy50cyIsIi4uL3NyYy95YW1sLnRzIiwiLi4vc3JjL3ByL3NoYXJlZC50cyIsIi4uL3NyYy9wci9jaS50cyIsIi4uL3NyYy9yZXBvL2RlZmF1bHRCcmFuY2gudHMiLCIuLi9zcmMvcHIvbWVzc2FnZXMudHMiLCIuLi9zcmMvcHIvcHVsbFJlcXVlc3QudHMiLCIuLi9zcmMvcHIvcmV2aWV3VGhyZWFkcy50cyIsIi4uL3NyYy9wcm9tcHRzL2NsZWFudXBJbnN0cnVjdGlvbi50cyIsIi4uL3NyYy9wcm9tcHRzL3BsYW5Qcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9iYXNlQnJhbmNoRGlmZkNvbW1hbmQudHMiLCIuLi9zcmMvcHJvbXB0cy9yZXZpZXdQcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9zY3JlZW5zaG90UHJvbXB0LnRzIiwiLi4vc3JjL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQudHMiLCIuLi9zcmMvc2tpbGxzL2luc3RhbGxTa2lsbHMudHMiLCIuLi9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbmludGVyZmFjZSBSdW5Db21tYW5kT3B0aW9ucyB7XG4gIGxvZ0ZpbGVQYXRoPzogc3RyaW5nO1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIHdhaXRNZXNzYWdlPzogc3RyaW5nIHwgZmFsc2U7XG4gIHdhaXRJbnRlcnZhbFNlY29uZHM/OiBudW1iZXI7XG59XG5cbnR5cGUgUHJvZ3Jlc3NXcml0ZXIgPSAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkO1xuZXhwb3J0IGludGVyZmFjZSBLaWxsYWJsZVByb2Nlc3Mge1xuICBraWxsOiAoc2lnbmFsPzogTm9kZUpTLlNpZ25hbHMpID0+IGJvb2xlYW47XG4gIHBpZD86IG51bWJlcjtcbn1cblxuLy8gVGhlIG9uZS1ob3VyIGJ1ZGdldCBrZWVwcyBhZ2VudHMgd2FpdGluZyBmb3IgbG9uZy1ydW5uaW5nIGNvbW1hbmRzIHdpdGhvdXQgcmVxdWlyaW5nIHRoZSBwcm9jZXNzIHRvIHVzZSB0aGUgZnVsbCBob3VyLlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTID0gMzY7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QUk9DRVNTX1RJTUVPVVRfTVMgPSA2MCAqIDYwICogMTAwMDtcbmNvbnN0IERPVFNfUEVSX1BST0dSRVNTX1BFUkNFTlRfU1RFUCA9IDU7XG5jb25zdCBGT1JDRV9LSUxMX1RJTUVPVVRfTVMgPSA1MDAwO1xuY29uc3QgTUFYX1BST0dSRVNTX1BFUkNFTlQgPSAxMDA7XG5jb25zdCBQUk9DRVNTX0NMRUFOVVBfU0lHTkFMUyA9IFsnU0lHSU5UJywgJ1NJR1RFUk0nLCAnU0lHSFVQJ10gYXMgY29uc3Q7XG5jb25zdCBhY3RpdmVQcm9jZXNzZXMgPSBuZXcgU2V0PEtpbGxhYmxlUHJvY2Vzcz4oKTtcbmxldCBjbGVhbnVwSGFuZGxlcnNJbnN0YWxsZWQgPSBmYWxzZTtcbi8vIEtlZXAgdGhlIENMSSB0ZXh0IGNvbmNpc2Ugc28gZG93bnN0cmVhbSBwcm9tcHRzIGNhbiBtYXRjaCBpdCBjb25zaXN0ZW50bHkuXG5leHBvcnQgY29uc3QgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HID0gJ1RoaXMgY2FuIHRha2UgdXAgdG8gMSBob3VyOyBkb3RzIGluZGljYXRlIHByb2dyZXNzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIGRldGFjaGVkOiB0cnVlLFxuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgfSk7XG4gIGNvbnN0IHByb2Nlc3NUaW1lb3V0ID0gY3JlYXRlUHJvY2Vzc1RpbWVvdXQocHJvYywgb3B0aW9ucy50aW1lb3V0TXMpO1xuICBjb25zdCBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKG9wdGlvbnMud2FpdE1lc3NhZ2UsIG9wdGlvbnMud2FpdEludGVydmFsU2Vjb25kcyk7XG4gIGNvbnN0IGNvbW1hbmRMb2dnZXIgPSBhd2FpdCBjcmVhdGVDb21tYW5kTG9nZ2VyKG9wdGlvbnMubG9nRmlsZVBhdGgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQsIChjaHVuaykgPT4gY29tbWFuZExvZ2dlci53cml0ZShjaHVuaykpLFxuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyLCAoY2h1bmspID0+IGNvbW1hbmRMb2dnZXIud3JpdGUoY2h1bmspKSxcbiAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgfSksXG4gICAgXSk7XG5cbiAgICBpZiAocHJvY2Vzc1RpbWVvdXQudGltZWRPdXQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRpbWVvdXRFcnJvck1lc3NhZ2UoYCR7c3Rkb3V0fSR7c3RkZXJyfWAsIHByb2Nlc3NUaW1lb3V0LnRpbWVvdXRNcywgY29tbWFuZCkpO1xuICAgIH1cblxuICAgIGlmIChleGl0Q29kZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHN0ZG91dDtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcbiAgICB0aHJvdyBuZXcgRXJyb3Iob3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBjb21tYW5kTG9nZ2VyLmNsb3NlKCk7XG4gICAgcHJvY2Vzc1RpbWVvdXQuY2xlYXIoKTtcbiAgICBzdG9wV2FpdFByb2dyZXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVvdXRFcnJvck1lc3NhZ2Uob3V0cHV0OiBzdHJpbmcsIHRpbWVvdXRNczogbnVtYmVyLCBjb21tYW5kOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBgQ29tbWFuZCB0aW1lZCBvdXQgYWZ0ZXIgJHtmb3JtYXREdXJhdGlvbih0aW1lb3V0TXMpfTogJHtjb21tYW5kLmpvaW4oJyAnKX1gO1xuICByZXR1cm4gb3V0cHV0Lmxlbmd0aCA+IDAgPyBgJHtvdXRwdXR9XFxuJHttZXNzYWdlfWAgOiBtZXNzYWdlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RHVyYXRpb24obWlsbGlzZWNvbmRzOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAobWlsbGlzZWNvbmRzICUgKDYwICogNjAgKiAxMDAwKSA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAoNjAgKiA2MCAqIDEwMDApfWhgO1xuICB9XG4gIGlmIChtaWxsaXNlY29uZHMgJSAoNjAgKiAxMDAwKSA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAoNjAgKiAxMDAwKX1tYDtcbiAgfVxuICBpZiAobWlsbGlzZWNvbmRzICUgMTAwMCA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAxMDAwfXNgO1xuICB9XG4gIHJldHVybiBgJHttaWxsaXNlY29uZHN9bXNgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvY2Vzc1RpbWVvdXQoXG4gIHByb2M6IEtpbGxhYmxlUHJvY2VzcyxcbiAgdGltZW91dE1zID0gREVGQVVMVF9QUk9DRVNTX1RJTUVPVVRfTVNcbik6IHsgY2xlYXI6ICgpID0+IHZvaWQ7IHRpbWVkT3V0OiAoKSA9PiBib29sZWFuOyB0aW1lb3V0TXM6IG51bWJlciB9IHtcbiAgbGV0IHRpbWVkT3V0ID0gZmFsc2U7XG4gIGxldCBmb3JjZUtpbGxUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG4gIGFjdGl2ZVByb2Nlc3Nlcy5hZGQocHJvYyk7XG4gIGluc3RhbGxDbGVhbnVwSGFuZGxlcnMoKTtcbiAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHRpbWVkT3V0ID0gdHJ1ZTtcbiAgICBraWxsUHJvY2Vzcyhwcm9jLCAnU0lHVEVSTScpO1xuICAgIGZvcmNlS2lsbFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBraWxsUHJvY2Vzcyhwcm9jLCAnU0lHS0lMTCcpLCBGT1JDRV9LSUxMX1RJTUVPVVRfTVMpO1xuICAgIGZvcmNlS2lsbFRpbWVyLnVucmVmKCk7XG4gIH0sIHRpbWVvdXRNcyk7XG4gIHRpbWVvdXQudW5yZWYoKTtcblxuICByZXR1cm4ge1xuICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBpZiAoZm9yY2VLaWxsVGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGZvcmNlS2lsbFRpbWVyKTtcbiAgICAgIH1cbiAgICAgIGFjdGl2ZVByb2Nlc3Nlcy5kZWxldGUocHJvYyk7XG4gICAgfSxcbiAgICB0aW1lZE91dDogKCkgPT4gdGltZWRPdXQsXG4gICAgdGltZW91dE1zLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsQ2xlYW51cEhhbmRsZXJzKCk6IHZvaWQge1xuICBpZiAoY2xlYW51cEhhbmRsZXJzSW5zdGFsbGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNsZWFudXBIYW5kbGVyc0luc3RhbGxlZCA9IHRydWU7XG5cbiAgZm9yIChjb25zdCBzaWduYWwgb2YgUFJPQ0VTU19DTEVBTlVQX1NJR05BTFMpIHtcbiAgICBwcm9jZXNzLm9uY2Uoc2lnbmFsLCAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHByb2Mgb2YgYWN0aXZlUHJvY2Vzc2VzKSB7XG4gICAgICAgIGtpbGxQcm9jZXNzKHByb2MsIHNpZ25hbCk7XG4gICAgICB9XG4gICAgICBwcm9jZXNzLmV4aXQoMTI4ICsgc2lnbmFsTnVtYmVyKHNpZ25hbCkpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNpZ25hbE51bWJlcihzaWduYWw6ICh0eXBlb2YgUFJPQ0VTU19DTEVBTlVQX1NJR05BTFMpW251bWJlcl0pOiBudW1iZXIge1xuICBzd2l0Y2ggKHNpZ25hbCkge1xuICAgIGNhc2UgJ1NJR0lOVCc6IHtcbiAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgICBjYXNlICdTSUdURVJNJzoge1xuICAgICAgcmV0dXJuIDE1O1xuICAgIH1cbiAgICBjYXNlICdTSUdIVVAnOiB7XG4gICAgICByZXR1cm4gMTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24ga2lsbFByb2Nlc3MocHJvYzogS2lsbGFibGVQcm9jZXNzLCBzaWduYWw6IE5vZGVKUy5TaWduYWxzKTogdm9pZCB7XG4gIGlmIChwcm9jLnBpZCAmJiBwcm9jLnBpZCA+IDApIHtcbiAgICB0cnkge1xuICAgICAgcHJvY2Vzcy5raWxsKC1wcm9jLnBpZCwgc2lnbmFsKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEZhbGwgYmFjayB0byBraWxsaW5nIHRoZSBkaXJlY3QgY2hpbGQgd2hlbiBwcm9jZXNzLWdyb3VwIHRlcm1pbmF0aW9uIGlzIHVuYXZhaWxhYmxlLlxuICAgIH1cbiAgfVxuICBwcm9jLmtpbGwoc2lnbmFsKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvVGV4dChcbiAgc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBvbkNodW5rPzogKGNodW5rOiBzdHJpbmcpID0+IHZvaWRcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgY29uc3QgY2h1bmtUZXh0ID0gdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyA/IGNodW5rIDogZGVjb2Rlci5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoY2h1bmspLCB7IHN0cmVhbTogdHJ1ZSB9KTtcbiAgICBjaHVua3MucHVzaChjaHVua1RleHQpO1xuICAgIG9uQ2h1bms/LihjaHVua1RleHQpO1xuICB9XG4gIGNvbnN0IGZpbmFsQ2h1bmsgPSBkZWNvZGVyLmRlY29kZSgpO1xuICBpZiAoZmluYWxDaHVuaykge1xuICAgIGNodW5rcy5wdXNoKGZpbmFsQ2h1bmspO1xuICAgIG9uQ2h1bms/LihmaW5hbENodW5rKTtcbiAgfVxuICByZXR1cm4gY2h1bmtzLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2FpdFByb2dyZXNzKFxuICB3YWl0TWVzc2FnZTogc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQsXG4gIHdhaXRJbnRlcnZhbFNlY29uZHMgPSBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyxcbiAgd3JpdGVQcm9ncmVzczogUHJvZ3Jlc3NXcml0ZXIgPSAobWVzc2FnZSkgPT4gcHJvY2Vzcy5zdGRlcnIud3JpdGUobWVzc2FnZSlcbik6ICgpID0+IHZvaWQge1xuICBpZiAoIXdhaXRNZXNzYWdlKSB7XG4gICAgcmV0dXJuICgpID0+IHt9O1xuICB9XG5cbiAgbGV0IGRvdENvdW50ID0gMDtcbiAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgd3JpdGVQcm9ncmVzcygnLicpO1xuICAgIGRvdENvdW50ICs9IDE7XG4gICAgaWYgKGRvdENvdW50IDw9IE1BWF9QUk9HUkVTU19QRVJDRU5UICYmIGRvdENvdW50ICUgRE9UU19QRVJfUFJPR1JFU1NfUEVSQ0VOVF9TVEVQID09PSAwKSB7XG4gICAgICAvLyBUaGlzIHRyYWNrcyBlbGFwc2VkIHdhaXQgYnVkZ2V0LCBub3QgdGhlIGNoaWxkIHByb2Nlc3MgY29tcGxldGlvbiBwZXJjZW50YWdlLlxuICAgICAgd3JpdGVQcm9ncmVzcyhgICR7ZG90Q291bnR9JSBkb25lIGApO1xuICAgIH1cbiAgfSwgd2FpdEludGVydmFsU2Vjb25kcyAqIDEwMDApO1xuXG4gIHdyaXRlUHJvZ3Jlc3MoYCR7d2FpdE1lc3NhZ2V9ICR7V0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HfTogYCk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICB3cml0ZVByb2dyZXNzKCdcXG4nKTtcbiAgfTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb21tYW5kTG9nZ2VyIHtcbiAgd3JpdGU6IChjaHVuazogc3RyaW5nKSA9PiB2b2lkO1xuICBjbG9zZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbW1hbmRMb2dnZXIobG9nRmlsZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8Q29tbWFuZExvZ2dlcj4ge1xuICBpZiAoIWxvZ0ZpbGVQYXRoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoKSA9PiB7fSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PiB7fSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgd2FybiA9IChlcnJvcjogdW5rbm93bik6IHZvaWQgPT4ge1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBXYXJuaW5nOiBGYWlsZWQgdG8gd3JpdGUgY29tbWFuZCBsb2cgdG8gJHtsb2dGaWxlUGF0aH06ICR7U3RyaW5nKGVycm9yKX1cXG5gKTtcbiAgfTtcblxuICB0cnkge1xuICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUobG9nRmlsZVBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBjb25zdCBzdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbShsb2dGaWxlUGF0aCwgeyBmbGFnczogJ3cnIH0pO1xuXG4gICAgc3RyZWFtLm9uKCdlcnJvcicsIHdhcm4pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoY2h1bmspID0+IHtcbiAgICAgICAgaWYgKHN0cmVhbS53cml0YWJsZSkge1xuICAgICAgICAgIHN0cmVhbS53cml0ZShjaHVuayk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjbG9zZTogYXN5bmMgKCkgPT5cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBzdHJlYW0uZW5kKCgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIH0pLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgd2FybihlcnJvcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoKSA9PiB7fSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PiB7fSxcbiAgICB9O1xuICB9XG59XG4iLCJleHBvcnQgY29uc3QgTk9fQ09OQ0VSTl9QSFJBU0UgPSAndGhlcmUgaXMgbm8gY29uY2Vybic7XG5leHBvcnQgY29uc3QgTk9fQ09OQ0VSTl9NRVNTQUdFID0gJ1RoZXJlIGlzIG5vIGNvbmNlcm4uJztcbiIsImltcG9ydCB7XG4gIERFRkFVTFRfUFJPQ0VTU19USU1FT1VUX01TLFxuICBjcmVhdGVDb21tYW5kTG9nZ2VyLFxuICBjcmVhdGVQcm9jZXNzVGltZW91dCxcbiAgY3JlYXRlV2FpdFByb2dyZXNzLFxuICBmb3JtYXREdXJhdGlvbixcbiAgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyxcbn0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSwgTk9fQ09OQ0VSTl9QSFJBU0UgfSBmcm9tICcuLi9yZXZpZXcvbm9Db25jZXJuLmpzJztcblxuZXhwb3J0IGNvbnN0IEFHRU5UX05BTUVTID0gWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10gYXMgY29uc3Q7XG5jb25zdCBDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYID0gbmV3IFJlZ0V4cChgXFxcXGIke05PX0NPTkNFUk5fUEhSQVNFfVxcXFxiYCwgJ2knKTtcbmV4cG9ydCB0eXBlIEFnZW50TmFtZSA9ICh0eXBlb2YgQUdFTlRfTkFNRVMpW251bWJlcl07XG5cbmludGVyZmFjZSBBZ2VudENvbW1hbmRPcHRpb25zIHtcbiAgaW50ZXJhY3RpdmU/OiBib29sZWFuO1xuICB3YWl0TWVzc2FnZT86IHN0cmluZyB8IGZhbHNlO1xufVxuXG5pbnRlcmZhY2UgQWxsQWdlbnRDb21tYW5kT3B0aW9ucyB7XG4gIGFsbEFnZW50c0xhYmVsOiBzdHJpbmc7XG4gIGludGVyYWN0aXZlPzogYm9vbGVhbjtcbiAgbWFwT3V0cHV0PzogKGFnZW50OiBBZ2VudE5hbWUsIG91dHB1dDogc3RyaW5nKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59XG5cbmNvbnN0IERFRkFVTFRfQUxMX0FHRU5UX0NPTU1BTkRfT1BUSU9OUzogQWxsQWdlbnRDb21tYW5kT3B0aW9ucyA9IHsgYWxsQWdlbnRzTGFiZWw6ICdhZ2VudHMnIH07XG5jb25zdCBJTlRFUkFDVElWRV9BR0VOVF9SRUFEWV9USU1FT1VUX01TID0gMzBfMDAwO1xuY29uc3QgSU5URVJBQ1RJVkVfQUdFTlRfSU5QVVRfU0VUVExFX01TID0gMTAwMDtcbmNvbnN0IFRFUk1JTkFMX0JFTEwgPSBTdHJpbmcuZnJvbUNvZGVQb2ludCg3KTtcbmNvbnN0IFRFUk1JTkFMX0VTQ0FQRSA9IFN0cmluZy5mcm9tQ29kZVBvaW50KDI3KTtcbmNvbnN0IFRFUk1JTkFMX0NTSV9DVVJTT1JfRk9SV0FSRF9SRUdFWCA9IG5ldyBSZWdFeHAoYCR7VEVSTUlOQUxfRVNDQVBFfVxcXFxbKFxcXFxkKilDYCwgJ2cnKTtcbmNvbnN0IFRFUk1JTkFMX0NTSV9SRUdFWCA9IG5ldyBSZWdFeHAoYCR7VEVSTUlOQUxfRVNDQVBFfVxcXFxbW1xcXFxkOz9dKlsgLS9dKltALX5dYCwgJ2cnKTtcbmNvbnN0IFRFUk1JTkFMX09TQ19SRUdFWCA9IG5ldyBSZWdFeHAoXG4gIGAke1RFUk1JTkFMX0VTQ0FQRX1cXFxcXVteJHtURVJNSU5BTF9CRUxMfV0qKD86JHtURVJNSU5BTF9CRUxMfXwke1RFUk1JTkFMX0VTQ0FQRX1cXFxcXFxcXClgLFxuICAnZydcbik7XG5jb25zdCBHRU1JTklfTU9ERUwgPSAnZ2VtaW5pLTMuMS1wcm8tcHJldmlldyc7XG5jb25zdCBJTlRFUkFDVElWRV9SRUFEWV9QQVRURVJOUyA9IFtcbiAgL1R5cGVcXHMqeW91clxccyptZXNzYWdlL2ksXG4gIC9AcGF0aFxcL3RvXFwvZmlsZS9pLFxuICAvYnlwYXNzXFxzKnBlcm1pc3Npb25zL2ksXG4gIC9ZT0xPXFxzK21vZGUvaSxcbiAgL3Blcm1pc3Npb25zOi9pLFxuXTtcbmNvbnN0IElOVEVSQUNUSVZFX1NFVFVQX1NDUkVFTlMgPSBbXG4gIHtcbiAgICBpbnB1dDogJ1xccicsXG4gICAga2V5OiAnd29ya3NwYWNlLXRydXN0JyxcbiAgICBwYXR0ZXJuOiAvKD86dHJ1c3R8dHJ1c3RlZHx1bnRydXN0ZWR8c2FmZXR5XFxzKmNoZWNrKVtcXHNcXFNdKig/Olllc3xjb250aW51ZXxjb25maXJtfFByZXNzXFxzKmVudGVyKS9pLFxuICB9LFxuICB7XG4gICAgaW5wdXQ6ICdcXHInLFxuICAgIGtleTogJ21vZGVsLXNlbGVjdGlvbicsXG4gICAgcGF0dGVybjogLyg/Om1vZGVsfHByb2NlZWR8dXBncmFkZSlbXFxzXFxTXSooPzpjb250aW51ZXxjb25maXJtfFRyeVxccypuZXd8VXNlXFxzKmV4aXN0aW5nfFByZXNzXFxzKmVudGVyKS9pLFxuICB9LFxuXTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkFsbEFnZW50Q29tbWFuZHMoXG4gIHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+LFxuICBvcHRpb25zOiBBbGxBZ2VudENvbW1hbmRPcHRpb25zID0gREVGQVVMVF9BTExfQUdFTlRfQ09NTUFORF9PUFRJT05TXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNvbHZlZFByb21wdCA9IGF3YWl0IHByb21wdDtcbiAgY29uc3Qgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyh3YWl0TWVzc2FnZUZvcihvcHRpb25zLmFsbEFnZW50c0xhYmVsKSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBhZ2VudE91dHB1dHNXaXRoU2tpcHBlZFJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIEFHRU5UX05BTUVTLm1hcChhc3luYyAoYWdlbnQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBydW5BZ2VudENvbW1hbmQoYWdlbnQsIHJlc29sdmVkUHJvbXB0LCB7XG4gICAgICAgICAgICBpbnRlcmFjdGl2ZTogb3B0aW9ucy5pbnRlcmFjdGl2ZSxcbiAgICAgICAgICAgIHdhaXRNZXNzYWdlOiBmYWxzZSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBjb25zdCB0cmltbWVkT3V0cHV0ID0gb3V0cHV0LnRyaW0oKTtcbiAgICAgICAgICBjb25zdCBtYXBwZWRPdXRwdXQgPSBvcHRpb25zLm1hcE91dHB1dD8uKGFnZW50LCB0cmltbWVkT3V0cHV0KTtcbiAgICAgICAgICBpZiAob3B0aW9ucy5tYXBPdXRwdXQgJiYgbWFwcGVkT3V0cHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGZvcm1hdEFnZW50U2VjdGlvbihhZ2VudCwgbWFwcGVkT3V0cHV0ID8/IHN1bW1hcml6ZUFnZW50T3V0cHV0KGFnZW50LCB0cmltbWVkT3V0cHV0KSk7XG4gICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgIHJldHVybiBmb3JtYXRBZ2VudFNlY3Rpb24oYWdlbnQsIGFnZW50RmFpbHVyZU1lc3NhZ2UoYWdlbnQpKTtcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuICAgIGNvbnN0IGFnZW50T3V0cHV0cyA9IGFnZW50T3V0cHV0c1dpdGhTa2lwcGVkUmVzdWx0cy5maWx0ZXIoKG91dHB1dCkgPT4gb3V0cHV0ICE9PSB1bmRlZmluZWQpO1xuICAgIHJldHVybiBhZ2VudE91dHB1dHMuam9pbignXFxuXFxuJyk7XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5BZ2VudENvbW1hbmQoXG4gIGFnZW50OiBBZ2VudE5hbWUsXG4gIHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+LFxuICBvcHRpb25zOiBBZ2VudENvbW1hbmRPcHRpb25zID0ge31cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChvcHRpb25zLmludGVyYWN0aXZlKSB7XG4gICAgcmV0dXJuIHJ1bkludGVyYWN0aXZlQWdlbnRDb21tYW5kKGFnZW50LCBhd2FpdCBwcm9tcHQsIHtcbiAgICAgIHdhaXRNZXNzYWdlOiBvcHRpb25zLndhaXRNZXNzYWdlID8/IHdhaXRNZXNzYWdlRm9yKGRpc3BsYXlBZ2VudE5hbWUoYWdlbnQpKSxcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBydW5Db21tYW5kV2l0aFByb2dyZXNzKGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudCwgYXdhaXQgcHJvbXB0KSwge1xuICAgIGxvZ0ZpbGVQYXRoOiBhZ2VudExvZ0ZpbGVQYXRoKGFnZW50KSxcbiAgICB3YWl0TWVzc2FnZTogb3B0aW9ucy53YWl0TWVzc2FnZSA/PyB3YWl0TWVzc2FnZUZvcihkaXNwbGF5QWdlbnROYW1lKGFnZW50KSksXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5JbnRlcmFjdGl2ZUFnZW50Q29tbWFuZChcbiAgYWdlbnQ6IEFnZW50TmFtZSxcbiAgcHJvbXB0OiBzdHJpbmcsXG4gIG9wdGlvbnM6IEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVzdWx0UmVjZWl2ZXIgPSBjcmVhdGVBZ2VudFJlc3VsdFJlY2VpdmVyKCk7XG4gIGNvbnN0IGNvbW1hbmRMb2dnZXIgPSBhd2FpdCBjcmVhdGVDb21tYW5kTG9nZ2VyKGFnZW50TG9nRmlsZVBhdGgoYWdlbnQpKTtcbiAgY29uc3Qgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyhvcHRpb25zLndhaXRNZXNzYWdlKTtcbiAgY29uc3QgZGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpO1xuICBsZXQgcHJvY2Vzc1RpbWVvdXQ6IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZVByb2Nlc3NUaW1lb3V0PiB8IHVuZGVmaW5lZDtcbiAgbGV0IHByb2M6IFJldHVyblR5cGU8dHlwZW9mIEJ1bi5zcGF3bj4gfCB1bmRlZmluZWQ7XG4gIGxldCB0ZXJtaW5hbDogQnVuLlRlcm1pbmFsIHwgdW5kZWZpbmVkO1xuICBjb25zdCB0ZXJtaW5hbFJlYWR5ID0gY3JlYXRlVGVybWluYWxSZWFkeVNpZ25hbChhZ2VudCk7XG5cbiAgdHJ5IHtcbiAgICBwcm9jID0gQnVuLnNwYXduKGNyZWF0ZUludGVyYWN0aXZlQWdlbnRDb21tYW5kKGFnZW50LCByZXN1bHRSZWNlaXZlci5jYWxsYmFja1VybCksIHtcbiAgICAgIGVudjogeyAuLi5wcm9jZXNzLmVudiwgVEVSTTogcHJvY2Vzcy5lbnYuVEVSTSA/PyAneHRlcm0tMjU2Y29sb3InIH0sXG4gICAgICB0ZXJtaW5hbDoge1xuICAgICAgICBjb2xzOiAxMjAsXG4gICAgICAgIHJvd3M6IDQwLFxuICAgICAgICBkYXRhKGN1cnJlbnRUZXJtaW5hbCwgZGF0YSkge1xuICAgICAgICAgIGNvbnN0IG91dHB1dCA9IGRlY29kZXIuZGVjb2RlKGRhdGEsIHsgc3RyZWFtOiB0cnVlIH0pO1xuICAgICAgICAgIGNvbW1hbmRMb2dnZXIud3JpdGUob3V0cHV0KTtcbiAgICAgICAgICB0ZXJtaW5hbFJlYWR5Lm9ic2VydmUob3V0cHV0LCBjdXJyZW50VGVybWluYWwpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0ZXJtaW5hbCA9IHByb2MudGVybWluYWw7XG4gICAgaWYgKCF0ZXJtaW5hbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gc3RhcnQgJHtkaXNwbGF5QWdlbnROYW1lKGFnZW50KX0gaW4gYSBCdW4gdGVybWluYWwuYCk7XG4gICAgfVxuICAgIHByb2Nlc3NUaW1lb3V0ID0gY3JlYXRlUHJvY2Vzc1RpbWVvdXQoe1xuICAgICAga2lsbDogKHNpZ25hbCkgPT4ge1xuICAgICAgICBwcm9jPy5raWxsKHNpZ25hbCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSxcbiAgICAgIHBpZDogcHJvYy5waWQsXG4gICAgfSk7XG5cbiAgICBjb25zdCBleGl0UHJvbWlzZSA9IHByb2MuZXhpdGVkLnRoZW4oKGV4aXRDb2RlKSA9PiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7ZGlzcGxheUFnZW50TmFtZShhZ2VudCl9IGV4aXRlZCBiZWZvcmUgcG9zdGluZyBhIHJlc3VsdCB3aXRoIGV4aXQgY29kZSAke2V4aXRDb2RlfS5gKTtcbiAgICB9KTtcbiAgICBhd2FpdCBQcm9taXNlLnJhY2UoW3Rlcm1pbmFsUmVhZHkud2FpdCgpLCBleGl0UHJvbWlzZV0pO1xuICAgIGF3YWl0IHNsZWVwKElOVEVSQUNUSVZFX0FHRU5UX0lOUFVUX1NFVFRMRV9NUyk7XG4gICAgYXdhaXQgc3VibWl0SW50ZXJhY3RpdmVQcm9tcHQodGVybWluYWwsIGJ1aWxkSW50ZXJhY3RpdmVBZ2VudFByb21wdChhZ2VudCwgcHJvbXB0LCByZXN1bHRSZWNlaXZlci5jYWxsYmFja1VybCkpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbcmVzdWx0UmVjZWl2ZXIucmVzdWx0LCBleGl0UHJvbWlzZV0pO1xuICAgIGV4aXRQcm9taXNlLmNhdGNoKCgpID0+IHt9KTtcblxuICAgIGlmIChwcm9jZXNzVGltZW91dC50aW1lZE91dCgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnRlcmFjdGl2ZSAke2Rpc3BsYXlBZ2VudE5hbWUoYWdlbnQpfSBjb21tYW5kIHRpbWVkIG91dCBhZnRlciAke2Zvcm1hdER1cmF0aW9uKERFRkFVTFRfUFJPQ0VTU19USU1FT1VUX01TKX0uYFxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChwcm9jZXNzVGltZW91dD8udGltZWRPdXQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW50ZXJhY3RpdmUgJHtkaXNwbGF5QWdlbnROYW1lKGFnZW50KX0gY29tbWFuZCB0aW1lZCBvdXQgYWZ0ZXIgJHtmb3JtYXREdXJhdGlvbihERUZBVUxUX1BST0NFU1NfVElNRU9VVF9NUyl9LmBcbiAgICAgICk7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9IGZpbmFsbHkge1xuICAgIHRlcm1pbmFsPy5jbG9zZSgpO1xuICAgIHByb2M/LmtpbGwoJ1NJR1RFUk0nKTtcbiAgICBhd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW3Byb2M/LmV4aXRlZCwgcmVzdWx0UmVjZWl2ZXIuY2xvc2UoKSwgY29tbWFuZExvZ2dlci5jbG9zZSgpXSk7XG4gICAgcHJvY2Vzc1RpbWVvdXQ/LmNsZWFyKCk7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN1Ym1pdEludGVyYWN0aXZlUHJvbXB0KHRlcm1pbmFsOiBCdW4uVGVybWluYWwsIHByb21wdDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIHRlcm1pbmFsLndyaXRlKGJyYWNrZXRlZFBhc3RlKHByb21wdCkpO1xuICBhd2FpdCBzbGVlcCgyNTApO1xuICB0ZXJtaW5hbC53cml0ZSgnXFxyJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNsZWVwKG1pbGxpc2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1pbGxpc2Vjb25kcykpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUZXJtaW5hbFJlYWR5U2lnbmFsKGFnZW50OiBBZ2VudE5hbWUpOiB7XG4gIG9ic2VydmU6IChvdXRwdXQ6IHN0cmluZywgdGVybWluYWw6IEJ1bi5UZXJtaW5hbCkgPT4gdm9pZDtcbiAgd2FpdDogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn0ge1xuICBsZXQgYnVmZmVyID0gJyc7XG4gIGNvbnN0IGhhbmRsZWRTZXR1cEFjdGlvbnMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgbGV0IHJlYWR5ID0gZmFsc2U7XG4gIGxldCByZXNvbHZlUmVhZHkhOiAoKSA9PiB2b2lkO1xuICBjb25zdCByZWFkeVByb21pc2UgPSBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgIHJlc29sdmVSZWFkeSA9IHJlc29sdmU7XG4gIH0pO1xuICBjb25zdCBmYWxsYmFja1JlYWR5VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICByZWFkeSA9IHRydWU7XG4gICAgcmVzb2x2ZVJlYWR5KCk7XG4gIH0sIGludGVyYWN0aXZlUmVhZHlUaW1lb3V0TXMoYWdlbnQpKTtcbiAgZmFsbGJhY2tSZWFkeVRpbWVyLnVucmVmKCk7XG5cbiAgcmV0dXJuIHtcbiAgICBvYnNlcnZlOiAob3V0cHV0LCB0ZXJtaW5hbCkgPT4ge1xuICAgICAgaWYgKHJlYWR5KSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYnVmZmVyID0gYCR7YnVmZmVyfSR7b3V0cHV0fWAuc2xpY2UoLTQwMDApO1xuICAgICAgY29uc3Qgbm9ybWFsaXplZEJ1ZmZlciA9IG5vcm1hbGl6ZVRlcm1pbmFsT3V0cHV0KGJ1ZmZlcik7XG4gICAgICBjb25zdCBzZXR1cEFjdGlvbiA9IGludGVyYWN0aXZlU2V0dXBBY3Rpb24oYWdlbnQsIG5vcm1hbGl6ZWRCdWZmZXIpO1xuICAgICAgaWYgKHNldHVwQWN0aW9uICYmICFoYW5kbGVkU2V0dXBBY3Rpb25zLmhhcyhzZXR1cEFjdGlvbi5rZXkpKSB7XG4gICAgICAgIGhhbmRsZWRTZXR1cEFjdGlvbnMuYWRkKHNldHVwQWN0aW9uLmtleSk7XG4gICAgICAgIHRlcm1pbmFsLndyaXRlKHNldHVwQWN0aW9uLmlucHV0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCFpbnRlcmFjdGl2ZVJlYWR5UGF0dGVybihhZ2VudCkudGVzdChub3JtYWxpemVkQnVmZmVyKSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlYWR5ID0gdHJ1ZTtcbiAgICAgIGNsZWFyVGltZW91dChmYWxsYmFja1JlYWR5VGltZXIpO1xuICAgICAgcmVzb2x2ZVJlYWR5KCk7XG4gICAgfSxcbiAgICB3YWl0OiAoKSA9PiByZWFkeVByb21pc2UsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVRlcm1pbmFsT3V0cHV0KG91dHB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIG91dHB1dFxuICAgIC5yZXBsYWNlQWxsKFRFUk1JTkFMX0NTSV9DVVJTT1JfRk9SV0FSRF9SRUdFWCwgKF9tYXRjaCwgY291bnQ6IHN0cmluZykgPT4gJyAnLnJlcGVhdChOdW1iZXIoY291bnQgfHwgJzEnKSkpXG4gICAgLnJlcGxhY2VBbGwoVEVSTUlOQUxfQ1NJX1JFR0VYLCAnJylcbiAgICAucmVwbGFjZUFsbChURVJNSU5BTF9PU0NfUkVHRVgsICcnKTtcbn1cblxuZnVuY3Rpb24gaW50ZXJhY3RpdmVSZWFkeVRpbWVvdXRNcyhhZ2VudDogQWdlbnROYW1lKTogbnVtYmVyIHtcbiAgc3dpdGNoIChhZ2VudCkge1xuICAgIGNhc2UgJ2NvZGV4JzpcbiAgICBjYXNlICdjbGF1ZGUnOlxuICAgIGNhc2UgJ2dlbWluaSc6IHtcbiAgICAgIHJldHVybiBJTlRFUkFDVElWRV9BR0VOVF9SRUFEWV9USU1FT1VUX01TO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBpbnRlcmFjdGl2ZVNldHVwQWN0aW9uKGFnZW50OiBBZ2VudE5hbWUsIG91dHB1dDogc3RyaW5nKTogeyBpbnB1dDogc3RyaW5nOyBrZXk6IHN0cmluZyB9IHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgZ2VuZXJpY0FjdGlvbiA9IGdlbmVyaWNJbnRlcmFjdGl2ZVNldHVwQWN0aW9uKG91dHB1dCk7XG4gIGlmIChnZW5lcmljQWN0aW9uKSB7XG4gICAgcmV0dXJuIHsgLi4uZ2VuZXJpY0FjdGlvbiwga2V5OiBgJHthZ2VudH0tJHtnZW5lcmljQWN0aW9uLmtleX1gIH07XG4gIH1cblxuICBzd2l0Y2ggKGFnZW50KSB7XG4gICAgY2FzZSAnY29kZXgnOiB7XG4gICAgICBpZiAoL0Nob29zZVxccypob3dcXHMqeW91J2RcXHMqbGlrZVxccypDb2RleFxccyp0b1xccypwcm9jZWVkL2kudGVzdChvdXRwdXQpKSB7XG4gICAgICAgIHJldHVybiB7IGlucHV0OiAnXFxyJywga2V5OiAnY29kZXgtbW9kZWwtc2VsZWN0aW9uJyB9O1xuICAgICAgfVxuICAgICAgaWYgKC9Eb1xccyp5b3VcXHMqdHJ1c3RcXHMqdGhlXFxzKmNvbnRlbnRzXFxzKm9mXFxzKnRoaXNcXHMqZGlyZWN0b3J5L2kudGVzdChvdXRwdXQpKSB7XG4gICAgICAgIHJldHVybiB7IGlucHV0OiAnXFxyJywga2V5OiAnY29kZXgtd29ya3NwYWNlLXRydXN0JyB9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY2FzZSAnY2xhdWRlJzoge1xuICAgICAgcmV0dXJuIC9RdWlja1xccypzYWZldHlcXHMqY2hlY2t8RW50ZXJcXHMqdG9cXHMqY29uZmlybS9pLnRlc3Qob3V0cHV0KVxuICAgICAgICA/IHsgaW5wdXQ6ICdcXHInLCBrZXk6ICdjbGF1ZGUtd29ya3NwYWNlLXRydXN0JyB9XG4gICAgICAgIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjYXNlICdnZW1pbmknOiB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBnZW5lcmljSW50ZXJhY3RpdmVTZXR1cEFjdGlvbihvdXRwdXQ6IHN0cmluZyk6IHsgaW5wdXQ6IHN0cmluZzsga2V5OiBzdHJpbmcgfSB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBJTlRFUkFDVElWRV9TRVRVUF9TQ1JFRU5TLmZpbmQoKHNjcmVlbikgPT4gc2NyZWVuLnBhdHRlcm4udGVzdChvdXRwdXQpKTtcbn1cblxuZnVuY3Rpb24gaW50ZXJhY3RpdmVSZWFkeVBhdHRlcm4oYWdlbnQ6IEFnZW50TmFtZSk6IFJlZ0V4cCB7XG4gIGNvbnN0IGdlbmVyaWNSZWFkeVBhdHRlcm4gPSBnZW5lcmljSW50ZXJhY3RpdmVSZWFkeVBhdHRlcm4oKTtcbiAgc3dpdGNoIChhZ2VudCkge1xuICAgIGNhc2UgJ2NvZGV4Jzoge1xuICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCR7Z2VuZXJpY1JlYWR5UGF0dGVybi5zb3VyY2V9fE9wZW5BSVxcXFxzK0NvZGV4W1xcXFxzXFxcXFNdKnBlcm1pc3Npb25zYCwgJ2knKTtcbiAgICB9XG4gICAgY2FzZSAnY2xhdWRlJzoge1xuICAgICAgcmV0dXJuIG5ldyBSZWdFeHAoYCR7Z2VuZXJpY1JlYWR5UGF0dGVybi5zb3VyY2V9fFRyeVxcXFxzK1wiYCwgJ2knKTtcbiAgICB9XG4gICAgY2FzZSAnZ2VtaW5pJzoge1xuICAgICAgcmV0dXJuIGdlbmVyaWNSZWFkeVBhdHRlcm47XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGdlbmVyaWNJbnRlcmFjdGl2ZVJlYWR5UGF0dGVybigpOiBSZWdFeHAge1xuICByZXR1cm4gbmV3IFJlZ0V4cChJTlRFUkFDVElWRV9SRUFEWV9QQVRURVJOUy5tYXAoKHBhdHRlcm4pID0+IHBhdHRlcm4uc291cmNlKS5qb2luKCd8JyksICdpJyk7XG59XG5cbmZ1bmN0aW9uIGJyYWNrZXRlZFBhc3RlKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgXFx1MDAxQlsyMDB+JHt0ZXh0fVxcdTAwMUJbMjAxfmA7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudDogQWdlbnROYW1lLCBwcm9tcHQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgc3dpdGNoIChhZ2VudCkge1xuICAgIGNhc2UgJ2NvZGV4Jzoge1xuICAgICAgcmV0dXJuIFsnbnB4JywgJy0teWVzJywgJ0BvcGVuYWkvY29kZXhAbGF0ZXN0JywgJ2V4ZWMnLCAnLS1kYW5nZXJvdXNseS1ieXBhc3MtYXBwcm92YWxzLWFuZC1zYW5kYm94JywgcHJvbXB0XTtcbiAgICB9XG4gICAgY2FzZSAnY2xhdWRlJzoge1xuICAgICAgcmV0dXJuIFsnY2xhdWRlJywgJy0tZGFuZ2Vyb3VzbHktc2tpcC1wZXJtaXNzaW9ucycsICctcCcsIHByb21wdF07XG4gICAgfVxuICAgIGNhc2UgJ2dlbWluaSc6IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgICducHgnLFxuICAgICAgICAnLS15ZXMnLFxuICAgICAgICAnQGdvb2dsZS9nZW1pbmktY2xpQHByZXZpZXcnLFxuICAgICAgICAnLS1hcHByb3ZhbC1tb2RlJyxcbiAgICAgICAgJ3lvbG8nLFxuICAgICAgICAnLS1za2lwLXRydXN0JyxcbiAgICAgICAgJy0tbW9kZWwnLFxuICAgICAgICAvLyBLZWVwIHRoaXMgcGlubmVkIHNvIENMSSBiZWhhdmlvciByZW1haW5zIHJlcHJvZHVjaWJsZSBhY3Jvc3MgYWdlbnRzIGFuZCBlMmUgcnVucy5cbiAgICAgICAgR0VNSU5JX01PREVMLFxuICAgICAgICAnLXAnLFxuICAgICAgICBwcm9tcHQsXG4gICAgICBdO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVJbnRlcmFjdGl2ZUFnZW50Q29tbWFuZChhZ2VudDogQWdlbnROYW1lLCBjYWxsYmFja1VybDogc3RyaW5nKTogc3RyaW5nW10ge1xuICBzd2l0Y2ggKGFnZW50KSB7XG4gICAgY2FzZSAnY29kZXgnOiB7XG4gICAgICByZXR1cm4gWyducHgnLCAnLS15ZXMnLCAnQG9wZW5haS9jb2RleEBsYXRlc3QnLCAnLS1kYW5nZXJvdXNseS1ieXBhc3MtYXBwcm92YWxzLWFuZC1zYW5kYm94J107XG4gICAgfVxuICAgIGNhc2UgJ2NsYXVkZSc6IHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgICdjbGF1ZGUnLFxuICAgICAgICAnLS1kYW5nZXJvdXNseS1za2lwLXBlcm1pc3Npb25zJyxcbiAgICAgICAgJy0tYXBwZW5kLXN5c3RlbS1wcm9tcHQnLFxuICAgICAgICBidWlsZEludGVyYWN0aXZlQ2FsbGJhY2tJbnN0cnVjdGlvbihjYWxsYmFja1VybCksXG4gICAgICBdO1xuICAgIH1cbiAgICBjYXNlICdnZW1pbmknOiB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICAnbnB4JyxcbiAgICAgICAgJy0teWVzJyxcbiAgICAgICAgJ0Bnb29nbGUvZ2VtaW5pLWNsaUBwcmV2aWV3JyxcbiAgICAgICAgJy0tYXBwcm92YWwtbW9kZScsXG4gICAgICAgICd5b2xvJyxcbiAgICAgICAgJy0tc2tpcC10cnVzdCcsXG4gICAgICAgICctLW1vZGVsJyxcbiAgICAgICAgLy8gS2VlcCB0aGlzIHBpbm5lZCBzbyBDTEkgYmVoYXZpb3IgcmVtYWlucyByZXByb2R1Y2libGUgYWNyb3NzIGFnZW50cyBhbmQgZTJlIHJ1bnMuXG4gICAgICAgIEdFTUlOSV9NT0RFTCxcbiAgICAgIF07XG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkSW50ZXJhY3RpdmVBZ2VudFByb21wdChhZ2VudDogQWdlbnROYW1lLCBwcm9tcHQ6IHN0cmluZywgY2FsbGJhY2tVcmw6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChhZ2VudCA9PT0gJ2NsYXVkZScpIHtcbiAgICByZXR1cm4gcHJvbXB0O1xuICB9XG5cbiAgcmV0dXJuIGAke3Byb21wdH1cblxuJHtidWlsZEludGVyYWN0aXZlQ2FsbGJhY2tJbnN0cnVjdGlvbihjYWxsYmFja1VybCl9XG5gO1xufVxuXG5mdW5jdGlvbiBidWlsZEludGVyYWN0aXZlQ2FsbGJhY2tJbnN0cnVjdGlvbihjYWxsYmFja1VybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBBZnRlciBjb21wbGV0aW5nIHRoZSByZXF1ZXN0LCBzZW5kIHRoZSBmaW5hbCBhbnN3ZXIgdG8gdGhpcyBsb2NhbCBjYWxsYmFjayBzZXJ2ZXIgYW5kIGRvIG5vdCBpbmNsdWRlIGFueSBleHRyYSB3cmFwcGVyIHRleHQ6XG5cbmN1cmwgLXNTIC1YIFBPU1QgJyR7Y2FsbGJhY2tVcmx9JyBcXFxcXG4gIC1IICdjb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL2pzb24nIFxcXFxcbiAgLS1kYXRhLWJpbmFyeSBALSA8PCdKU09OJ1xue1wicmVzdWx0XCI6XCJyZXBsYWNlIHRoaXMgdmFsdWUgd2l0aCB5b3VyIGZpbmFsIGFuc3dlclwifVxuSlNPTlxuXG5UaGUgQ0xJIHdyYXBwZXIgd2FpdHMgZm9yIHRoYXQgUE9TVCByZXF1ZXN0IGFuZCB3aWxsIHJlYWQgdGhlIFwicmVzdWx0XCIgSlNPTiBmaWVsZCBhcyB0aGUgY29tbWFuZCBvdXRwdXQuXG5EbyBub3QgY3JlYXRlIGFueSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSBmb3IgdGhpcyBjYWxsYmFjayBwYXlsb2FkLlxuYDtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQWdlbnRSZXN1bHRSZWNlaXZlcigpOiB7XG4gIGNhbGxiYWNrVXJsOiBzdHJpbmc7XG4gIGNsb3NlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xuICByZXN1bHQ6IFByb21pc2U8c3RyaW5nPjtcbn0ge1xuICBsZXQgcmVzb2x2ZVJlc3VsdCE6IChyZXN1bHQ6IHN0cmluZykgPT4gdm9pZDtcbiAgbGV0IHJlamVjdFJlc3VsdCE6IChlcnJvcjogRXJyb3IpID0+IHZvaWQ7XG4gIGNvbnN0IHJlc3VsdCA9IG5ldyBQcm9taXNlPHN0cmluZz4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHJlc29sdmVSZXN1bHQgPSByZXNvbHZlO1xuICAgIHJlamVjdFJlc3VsdCA9IHJlamVjdDtcbiAgfSk7XG5cbiAgY29uc3Qgc2VydmVyID0gQnVuLnNlcnZlKHtcbiAgICBob3N0bmFtZTogJzEyNy4wLjAuMScsXG4gICAgcG9ydDogMCxcbiAgICBhc3luYyBmZXRjaChyZXF1ZXN0KSB7XG4gICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHJlcXVlc3QudXJsKTtcbiAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ1BPU1QnIHx8IHVybC5wYXRobmFtZSAhPT0gJy9yZXN1bHQnKSB7XG4gICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoJ05vdCBmb3VuZCcsIHsgc3RhdHVzOiA0MDQgfSk7XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc29sdmVSZXN1bHQoYXdhaXQgcGFyc2VBZ2VudFJlc3VsdFJlcXVlc3QocmVxdWVzdCkpO1xuICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKCdPS1xcbicpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmVqZWN0UmVzdWx0KGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IG5ldyBFcnJvcihTdHJpbmcoZXJyb3IpKSk7XG4gICAgICAgIHJldHVybiBuZXcgUmVzcG9uc2UoJ0ludmFsaWQgcmVzdWx0IHBheWxvYWRcXG4nLCB7IHN0YXR1czogNDAwIH0pO1xuICAgICAgfVxuICAgIH0sXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgY2FsbGJhY2tVcmw6IG5ldyBVUkwoJy9yZXN1bHQnLCBzZXJ2ZXIudXJsKS50b1N0cmluZygpLFxuICAgIGNsb3NlOiAoKSA9PiBzZXJ2ZXIuc3RvcCh0cnVlKSxcbiAgICByZXN1bHQsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhcnNlQWdlbnRSZXN1bHRSZXF1ZXN0KHJlcXVlc3Q6IFJlcXVlc3QpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBjb250ZW50VHlwZSA9IHJlcXVlc3QuaGVhZGVycy5nZXQoJ2NvbnRlbnQtdHlwZScpID8/ICcnO1xuICBpZiAoY29udGVudFR5cGUuaW5jbHVkZXMoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgIGNvbnN0IHBheWxvYWQgPSAoYXdhaXQgcmVxdWVzdC5qc29uKCkpIGFzIHsgcmVzdWx0PzogdW5rbm93biB9O1xuICAgIGlmICh0eXBlb2YgcGF5bG9hZC5yZXN1bHQgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnRlcmFjdGl2ZSBhZ2VudCByZXN1bHQgSlNPTiBtdXN0IGluY2x1ZGUgYSBzdHJpbmcgXCJyZXN1bHRcIiBmaWVsZC4nKTtcbiAgICB9XG4gICAgcmV0dXJuIHBheWxvYWQucmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIHJlcXVlc3QudGV4dCgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzcGxheUFnZW50TmFtZShhZ2VudDogQWdlbnROYW1lKTogc3RyaW5nIHtcbiAgc3dpdGNoIChhZ2VudCkge1xuICAgIGNhc2UgJ2NvZGV4Jzoge1xuICAgICAgcmV0dXJuICdDb2RleCc7XG4gICAgfVxuICAgIGNhc2UgJ2NsYXVkZSc6IHtcbiAgICAgIHJldHVybiAnQ2xhdWRlIENvZGUnO1xuICAgIH1cbiAgICBjYXNlICdnZW1pbmknOiB7XG4gICAgICByZXR1cm4gJ0dlbWluaSBDTEknO1xuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZShvdXRwdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gQ09OVEFJTlNfTk9fQ09OQ0VSTl9TRU5URU5DRV9SRUdFWC50ZXN0KG91dHB1dCk7XG59XG5cbmZ1bmN0aW9uIHN1bW1hcml6ZUFnZW50T3V0cHV0KGFnZW50OiBBZ2VudE5hbWUsIG91dHB1dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKG91dHB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYWdlbnRGYWlsdXJlTWVzc2FnZShhZ2VudCk7XG4gIH1cblxuICBpZiAoY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZShvdXRwdXQpKSB7XG4gICAgcmV0dXJuIE5PX0NPTkNFUk5fTUVTU0FHRTtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdEFnZW50U2VjdGlvbihhZ2VudDogQWdlbnROYW1lLCBib2R5OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCMjICR7ZGlzcGxheUFnZW50TmFtZShhZ2VudCl9XFxuXFxuJHtib2R5fWA7XG59XG5cbmZ1bmN0aW9uIGFnZW50RmFpbHVyZU1lc3NhZ2UoYWdlbnQ6IEFnZW50TmFtZSk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtkaXNwbGF5QWdlbnROYW1lKGFnZW50KX0gZGlkIG5vdCByZXR1cm4gYSByZXZpZXcgcmVzdWx0LmA7XG59XG5cbmZ1bmN0aW9uIHdhaXRNZXNzYWdlRm9yKHRhcmdldDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBXYWl0aW5nIGZvciAke3RhcmdldH0gdG8gZmluaXNoLmA7XG59XG5cbmZ1bmN0aW9uIGFnZW50TG9nRmlsZVBhdGgoYWdlbnQ6IEFnZW50TmFtZSk6IHN0cmluZyB7XG4gIHJldHVybiBgbG9ncy8ke2FnZW50fS0ke3RpbWVzdGFtcEZvckxvZ0ZpbGUoKX0ubG9nYDtcbn1cblxuZnVuY3Rpb24gdGltZXN0YW1wRm9yTG9nRmlsZSgpOiBzdHJpbmcge1xuICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICBjb25zdCBbbW9udGgsIGRheSwgaG91ciwgbWludXRlLCBzZWNvbmRdID0gW1xuICAgIG5vdy5nZXRNb250aCgpICsgMSxcbiAgICBub3cuZ2V0RGF0ZSgpLFxuICAgIG5vdy5nZXRIb3VycygpLFxuICAgIG5vdy5nZXRNaW51dGVzKCksXG4gICAgbm93LmdldFNlY29uZHMoKSxcbiAgXS5tYXAodHdvRGlnaXRzKTtcbiAgcmV0dXJuIGAke21vbnRofSR7ZGF5fS0ke2hvdXJ9JHttaW51dGV9JHtzZWNvbmR9YDtcbn1cblxuZnVuY3Rpb24gdHdvRGlnaXRzKHZhbHVlOiBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpO1xufVxuIiwiaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgcmVhZGRpciwgcmVhZEZpbGUsIHN0YXQgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IGpvaW4sIHJlbGF0aXZlLCBzZXAgfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgYnJhY2VFeHBhbmQsIG1pbmltYXRjaCB9IGZyb20gJ21pbmltYXRjaCc7XG5cbmludGVyZmFjZSBQYWNrYWdlSnNvbiB7XG4gIGRlcGVuZGVuY2llcz86IERlcGVuZGVuY3lNYXA7XG4gIGRldkRlcGVuZGVuY2llcz86IERlcGVuZGVuY3lNYXA7XG4gIG9wdGlvbmFsRGVwZW5kZW5jaWVzPzogRGVwZW5kZW5jeU1hcDtcbiAgcGVlckRlcGVuZGVuY2llcz86IERlcGVuZGVuY3lNYXA7XG4gIHdvcmtzcGFjZXM/OiBzdHJpbmdbXSB8IHsgcGFja2FnZXM/OiBzdHJpbmdbXSB9O1xufVxudHlwZSBEZXBlbmRlbmN5TWFwID0gUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbmludGVyZmFjZSBXb3Jrc3BhY2VDYW5kaWRhdGVSb290IHtcbiAgbWF4RGVwdGg/OiBudW1iZXI7XG4gIHJvb3Q6IHN0cmluZztcbn1cblxuY29uc3QgREVQRU5ERU5DWV9TRUNUSU9OUyA9IFsnZGVwZW5kZW5jaWVzJywgJ2RldkRlcGVuZGVuY2llcycsICdwZWVyRGVwZW5kZW5jaWVzJywgJ29wdGlvbmFsRGVwZW5kZW5jaWVzJ10gYXMgY29uc3Q7XG5jb25zdCBJR05PUkVEX0RJUkVDVE9SSUVTID0gbmV3IFNldChbJy5naXQnLCAnbm9kZV9tb2R1bGVzJ10pO1xuY29uc3QgVVBEQVRFX0NPTU1BTkQgPSBbJ2J1bicsICd1cGRhdGUnLCAnLS1sYXRlc3QnXSBhcyBjb25zdDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZUJ1bkRlcGVuZGVuY2llcyhjd2QgPSBwcm9jZXNzLmN3ZCgpKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHdvcmtzcGFjZURpcmVjdG9yaWVzID0gYXdhaXQgZmluZFdvcmtzcGFjZURpcmVjdG9yaWVzKGN3ZCk7XG4gIGF3YWl0IGFzc2VydE5vQ2F0YWxvZ0RlcGVuZGVuY2llcyhjd2QsIHdvcmtzcGFjZURpcmVjdG9yaWVzKTtcbiAgYXdhaXQgdXBkYXRlUGFja2FnZShjd2QsICdyb290Jyk7XG5cbiAgZm9yIChjb25zdCBkaXJlY3Rvcnkgb2Ygd29ya3NwYWNlRGlyZWN0b3JpZXMpIHtcbiAgICBhd2FpdCB1cGRhdGVQYWNrYWdlKGpvaW4oY3dkLCBkaXJlY3RvcnkpLCBkaXJlY3RvcnkpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpbmRXb3Jrc3BhY2VEaXJlY3Rvcmllcyhjd2Q6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgcGF0dGVybnMgPSB3b3Jrc3BhY2VQYXR0ZXJucyhhd2FpdCByZWFkUGFja2FnZUpzb24oY3dkKSk7XG4gIGNvbnN0IGRpcmVjdG9yaWVzID0gYXdhaXQgbGlzdFdvcmtzcGFjZUNhbmRpZGF0ZURpcmVjdG9yaWVzKGN3ZCwgcGF0dGVybnMpO1xuICBjb25zdCBpbmNsdWRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBleGNsdWRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJucykge1xuICAgIGNvbnN0IGlzRXhjbHVzaW9uID0gcGF0dGVybi5zdGFydHNXaXRoKCchJyk7XG4gICAgY29uc3QgbWF0Y2hlcyA9IGF3YWl0IGV4cGFuZFdvcmtzcGFjZVBhdHRlcm4oY3dkLCBkaXJlY3RvcmllcywgaXNFeGNsdXNpb24gPyBwYXR0ZXJuLnNsaWNlKDEpIDogcGF0dGVybik7XG4gICAgZm9yIChjb25zdCBkaXJlY3Rvcnkgb2YgbWF0Y2hlcykge1xuICAgICAgaWYgKGlzRXhjbHVzaW9uKSB7XG4gICAgICAgIGV4Y2x1ZGVkLmFkZChkaXJlY3RvcnkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5jbHVkZWQuYWRkKGRpcmVjdG9yeSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFsuLi5pbmNsdWRlZF1cbiAgICAuZmlsdGVyKChkaXJlY3RvcnkpID0+IGRpcmVjdG9yeSAhPT0gJy4nICYmICFleGNsdWRlZC5oYXMoZGlyZWN0b3J5KSlcbiAgICAudG9Tb3J0ZWQoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0LmxvY2FsZUNvbXBhcmUocmlnaHQpKTtcbn1cblxuZnVuY3Rpb24gd29ya3NwYWNlUGF0dGVybnMoeyB3b3Jrc3BhY2VzID0gW10gfTogUGFja2FnZUpzb24pOiBzdHJpbmdbXSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHdvcmtzcGFjZXMpKSB7XG4gICAgcmV0dXJuIHdvcmtzcGFjZXM7XG4gIH1cbiAgcmV0dXJuIHdvcmtzcGFjZXMucGFja2FnZXMgPz8gW107XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxpc3RXb3Jrc3BhY2VDYW5kaWRhdGVEaXJlY3Rvcmllcyhjd2Q6IHN0cmluZywgcGF0dGVybnM6IHN0cmluZ1tdKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBkaXJlY3RvcmllcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCByb290cyA9IHdvcmtzcGFjZUNhbmRpZGF0ZVJvb3RzKHBhdHRlcm5zKTtcblxuICBmb3IgKGNvbnN0IHsgbWF4RGVwdGgsIHJvb3QgfSBvZiByb290cykge1xuICAgIGlmICghKGF3YWl0IGlzRGlyZWN0b3J5KGN3ZCwgcm9vdCkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBkaXJlY3Rvcnkgb2YgYXdhaXQgbGlzdERpcmVjdG9yaWVzKGN3ZCwgcm9vdCwgbWF4RGVwdGgpKSB7XG4gICAgICBkaXJlY3Rvcmllcy5hZGQoZGlyZWN0b3J5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gWy4uLmRpcmVjdG9yaWVzXTtcbn1cblxuZnVuY3Rpb24gd29ya3NwYWNlQ2FuZGlkYXRlUm9vdHMocGF0dGVybnM6IHN0cmluZ1tdKTogV29ya3NwYWNlQ2FuZGlkYXRlUm9vdFtdIHtcbiAgY29uc3Qgcm9vdHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyIHwgdW5kZWZpbmVkPigpO1xuICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICBpZiAocGF0dGVybi5zdGFydHNXaXRoKCchJykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHJvb3Qgb2YgY2FuZGlkYXRlUm9vdHMocGF0dGVybikpIHtcbiAgICAgIHJvb3RzLnNldChyb290LnJvb3QsIHJvb3RzLmhhcyhyb290LnJvb3QpID8gbWVyZ2VkTWF4RGVwdGgocm9vdHMuZ2V0KHJvb3Qucm9vdCksIHJvb3QubWF4RGVwdGgpIDogcm9vdC5tYXhEZXB0aCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbLi4ucm9vdHMuZW50cmllcygpXVxuICAgIC5tYXAoKFtyb290LCBtYXhEZXB0aF0pID0+ICh7IG1heERlcHRoLCByb290IH0pKVxuICAgIC5maWx0ZXIoKHJvb3QpID0+ICFoYXNQYXJlbnRSb290KHJvb3QsIHJvb3RzKSlcbiAgICAudG9Tb3J0ZWQoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0LnJvb3QubG9jYWxlQ29tcGFyZShyaWdodC5yb290KSk7XG59XG5cbmZ1bmN0aW9uIGNhbmRpZGF0ZVJvb3RzKHBhdHRlcm46IHN0cmluZyk6IFdvcmtzcGFjZUNhbmRpZGF0ZVJvb3RbXSB7XG4gIHJldHVybiBicmFjZUV4cGFuZChub3JtYWxpemVXb3Jrc3BhY2VQYXR0ZXJuKHBhdHRlcm4pKS5tYXAoKGV4cGFuZGVkUGF0dGVybikgPT4gKHtcbiAgICBtYXhEZXB0aDogd29ya3NwYWNlUGF0dGVybk1heERlcHRoKGV4cGFuZGVkUGF0dGVybiksXG4gICAgcm9vdDogY2FuZGlkYXRlUm9vdChleHBhbmRlZFBhdHRlcm4pLFxuICB9KSk7XG59XG5cbmZ1bmN0aW9uIG1lcmdlZE1heERlcHRoKGxlZnQ6IG51bWJlciB8IHVuZGVmaW5lZCwgcmlnaHQ6IG51bWJlciB8IHVuZGVmaW5lZCk6IG51bWJlciB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiBsZWZ0ID09PSB1bmRlZmluZWQgfHwgcmlnaHQgPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IE1hdGgubWF4KGxlZnQsIHJpZ2h0KTtcbn1cblxuZnVuY3Rpb24gaGFzUGFyZW50Um9vdChyb290OiBXb3Jrc3BhY2VDYW5kaWRhdGVSb290LCByb290czogTWFwPHN0cmluZywgbnVtYmVyIHwgdW5kZWZpbmVkPik6IGJvb2xlYW4ge1xuICByZXR1cm4gWy4uLnJvb3RzLmVudHJpZXMoKV0uc29tZShcbiAgICAoW290aGVyUm9vdCwgb3RoZXJNYXhEZXB0aF0pID0+XG4gICAgICBvdGhlclJvb3QgIT09IHJvb3Qucm9vdCAmJlxuICAgICAgKG90aGVyUm9vdCA9PT0gJy4nIHx8IHJvb3Qucm9vdC5zdGFydHNXaXRoKGAke290aGVyUm9vdH0vYCkpICYmXG4gICAgICBjb3ZlcnNEZXB0aChvdGhlck1heERlcHRoLCByb290Lm1heERlcHRoKVxuICApO1xufVxuXG5mdW5jdGlvbiBjb3ZlcnNEZXB0aChwYXJlbnRNYXhEZXB0aDogbnVtYmVyIHwgdW5kZWZpbmVkLCBjaGlsZE1heERlcHRoOiBudW1iZXIgfCB1bmRlZmluZWQpOiBib29sZWFuIHtcbiAgcmV0dXJuIHBhcmVudE1heERlcHRoID09PSB1bmRlZmluZWQgfHwgKGNoaWxkTWF4RGVwdGggIT09IHVuZGVmaW5lZCAmJiBwYXJlbnRNYXhEZXB0aCA+PSBjaGlsZE1heERlcHRoKTtcbn1cblxuZnVuY3Rpb24gY2FuZGlkYXRlUm9vdChwYXR0ZXJuOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzZWdtZW50cyA9IFtdO1xuICBmb3IgKGNvbnN0IHNlZ21lbnQgb2YgcGF0dGVybi5zcGxpdCgnLycpKSB7XG4gICAgaWYgKHNlZ21lbnQgPT09ICcnIHx8IGhhc0dsb2JNYWdpYyhzZWdtZW50KSkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICAgIHNlZ21lbnRzLnB1c2goc2VnbWVudCk7XG4gIH1cbiAgcmV0dXJuIHNlZ21lbnRzLmxlbmd0aCA9PT0gMCA/ICcuJyA6IHNlZ21lbnRzLmpvaW4oJy8nKTtcbn1cblxuZnVuY3Rpb24gaGFzR2xvYk1hZ2ljKHNlZ21lbnQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL1sqP1tcXF17fSgpIStdLy50ZXN0KHNlZ21lbnQpO1xufVxuXG5mdW5jdGlvbiB3b3Jrc3BhY2VQYXR0ZXJuTWF4RGVwdGgocGF0dGVybjogc3RyaW5nKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgaWYgKHBhdHRlcm4uc3BsaXQoJy8nKS5pbmNsdWRlcygnKionKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIHBhdGhEZXB0aChwYXR0ZXJuKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNEaXJlY3RvcnkoY3dkOiBzdHJpbmcsIGRpcmVjdG9yeTogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZGlyZWN0b3J5U3RhdCA9IGF3YWl0IHN0YXQoam9pbihjd2QsIGRpcmVjdG9yeSkpO1xuICAgIHJldHVybiBkaXJlY3RvcnlTdGF0LmlzRGlyZWN0b3J5KCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBsaXN0RGlyZWN0b3JpZXMoY3dkOiBzdHJpbmcsIGRpcmVjdG9yeSA9ICcuJywgbWF4RGVwdGg/OiBudW1iZXIpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGRpcmVjdG9yaWVzID0gW2RpcmVjdG9yeV07XG4gIGlmIChtYXhEZXB0aCAhPT0gdW5kZWZpbmVkICYmIHBhdGhEZXB0aChkaXJlY3RvcnkpID49IG1heERlcHRoKSB7XG4gICAgcmV0dXJuIGRpcmVjdG9yaWVzO1xuICB9XG5cbiAgY29uc3QgZW50cmllcyA9IGF3YWl0IHJlYWRkaXIoam9pbihjd2QsIGRpcmVjdG9yeSksIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcblxuICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHtcbiAgICBpZiAoIWVudHJ5LmlzRGlyZWN0b3J5KCkgfHwgSUdOT1JFRF9ESVJFQ1RPUklFUy5oYXMoZW50cnkubmFtZSkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IGNoaWxkRGlyZWN0b3J5ID0gam9pbihkaXJlY3RvcnksIGVudHJ5Lm5hbWUpLnNwbGl0KHNlcCkuam9pbignLycpO1xuICAgIGlmIChtYXhEZXB0aCAhPT0gdW5kZWZpbmVkICYmIHBhdGhEZXB0aChjaGlsZERpcmVjdG9yeSkgPiBtYXhEZXB0aCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGRpcmVjdG9yaWVzLnB1c2goLi4uKGF3YWl0IGxpc3REaXJlY3Rvcmllcyhjd2QsIGNoaWxkRGlyZWN0b3J5LCBtYXhEZXB0aCkpKTtcbiAgfVxuXG4gIHJldHVybiBkaXJlY3Rvcmllcztcbn1cblxuZnVuY3Rpb24gcGF0aERlcHRoKHBhdGg6IHN0cmluZyk6IG51bWJlciB7XG4gIHJldHVybiBwYXRoID09PSAnLicgPyAwIDogcGF0aC5zcGxpdCgnLycpLmxlbmd0aDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhwYW5kV29ya3NwYWNlUGF0dGVybihjd2Q6IHN0cmluZywgZGlyZWN0b3JpZXM6IHN0cmluZ1tdLCBwYXR0ZXJuOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IG1hdGNoZXIgPSBnbG9iUGF0dGVybk1hdGNoZXIobm9ybWFsaXplV29ya3NwYWNlUGF0dGVybihwYXR0ZXJuKSk7XG4gIGNvbnN0IG1hdGNoZXMgPSBbXTtcblxuICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiBkaXJlY3Rvcmllcykge1xuICAgIGlmIChtYXRjaGVyKGRpcmVjdG9yeSkgJiYgKGF3YWl0IGhhc1BhY2thZ2VKc29uKGN3ZCwgZGlyZWN0b3J5KSkpIHtcbiAgICAgIG1hdGNoZXMucHVzaChkaXJlY3RvcnkpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtYXRjaGVzO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVXb3Jrc3BhY2VQYXR0ZXJuKHBhdHRlcm46IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBub3JtYWxpemVQYXRoKHBhdHRlcm4pLnJlcGxhY2UoL1xcLyQvLCAnJyk7XG4gIGlmIChub3JtYWxpemVkID09PSAnLicpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplZDtcbiAgfVxuICByZXR1cm4gbm9ybWFsaXplZC5zdGFydHNXaXRoKCcuLycpID8gbm9ybWFsaXplZC5zbGljZSgyKSA6IG5vcm1hbGl6ZWQ7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHBhdGguc3BsaXQoc2VwKS5qb2luKCcvJyk7XG4gIHJldHVybiBub3JtYWxpemVkID09PSAnJyA/ICcuJyA6IG5vcm1hbGl6ZWQ7XG59XG5cbmZ1bmN0aW9uIGdsb2JQYXR0ZXJuTWF0Y2hlcihwYXR0ZXJuOiBzdHJpbmcpOiAoZGlyZWN0b3J5OiBzdHJpbmcpID0+IGJvb2xlYW4ge1xuICByZXR1cm4gKGRpcmVjdG9yeSkgPT4gbWluaW1hdGNoKGRpcmVjdG9yeSwgcGF0dGVybiwgeyBkb3Q6IHRydWUgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGhhc1BhY2thZ2VKc29uKGN3ZDogc3RyaW5nLCBkaXJlY3Rvcnk6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICB0cnkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uU3RhdCA9IGF3YWl0IHN0YXQoam9pbihjd2QsIGRpcmVjdG9yeSwgJ3BhY2thZ2UuanNvbicpKTtcbiAgICByZXR1cm4gcGFja2FnZUpzb25TdGF0LmlzRmlsZSgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gYXNzZXJ0Tm9DYXRhbG9nRGVwZW5kZW5jaWVzKGN3ZDogc3RyaW5nLCB3b3Jrc3BhY2VEaXJlY3Rvcmllczogc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY2F0YWxvZ0RlcGVuZGVuY2llcyA9IFtdO1xuICBmb3IgKGNvbnN0IGRpcmVjdG9yeSBvZiBbJy4nLCAuLi53b3Jrc3BhY2VEaXJlY3Rvcmllc10pIHtcbiAgICBjb25zdCBwYWNrYWdlSnNvbiA9IGF3YWl0IHJlYWRQYWNrYWdlSnNvbihkaXJlY3RvcnkgPT09ICcuJyA/IGN3ZCA6IGpvaW4oY3dkLCBkaXJlY3RvcnkpKTtcbiAgICBmb3IgKGNvbnN0IGRlcGVuZGVuY3kgb2YgY2F0YWxvZ0RlcGVuZGVuY3lOYW1lcyhwYWNrYWdlSnNvbikpIHtcbiAgICAgIGNhdGFsb2dEZXBlbmRlbmNpZXMucHVzaChgJHtkaXJlY3RvcnkgPT09ICcuJyA/ICdyb290JyA6IGRpcmVjdG9yeX06ICR7ZGVwZW5kZW5jeX1gKTtcbiAgICB9XG4gIH1cblxuICBpZiAoY2F0YWxvZ0RlcGVuZGVuY2llcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgW1xuICAgICAgJ0Nhbm5vdCBzYWZlbHkgdXBkYXRlIEJ1biB3b3Jrc3BhY2UgZGVwZW5kZW5jaWVzIHdpdGggY2F0YWxvZyByZWZlcmVuY2VzLicsXG4gICAgICAnVXBkYXRlIGNhdGFsb2cgdmVyc2lvbnMgaW4gdGhlIHJvb3QgcGFja2FnZS5qc29uLCB0aGVuIHJ1biBidW4gaW5zdGFsbC4nLFxuICAgICAgYENhdGFsb2ctbWFuYWdlZCBkZXBlbmRlbmNpZXM6ICR7Y2F0YWxvZ0RlcGVuZGVuY2llcy5qb2luKCcsICcpfWAsXG4gICAgXS5qb2luKCdcXG4nKVxuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkUGFja2FnZUpzb24oY3dkOiBzdHJpbmcpOiBQcm9taXNlPFBhY2thZ2VKc29uPiB7XG4gIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IGpvaW4oY3dkLCAncGFja2FnZS5qc29uJyk7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoYXdhaXQgcmVhZEZpbGUocGFja2FnZUpzb25QYXRoLCAndXRmOCcpKSBhcyBQYWNrYWdlSnNvbjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byByZWFkICR7cGFja2FnZUpzb25QYXRofTogJHtTdHJpbmcoZXJyb3IpfWApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNhdGFsb2dEZXBlbmRlbmN5TmFtZXMocGFja2FnZUpzb246IFBhY2thZ2VKc29uKTogc3RyaW5nW10ge1xuICBjb25zdCBuYW1lcyA9IFtdO1xuICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgREVQRU5ERU5DWV9TRUNUSU9OUykge1xuICAgIGNvbnN0IGRlcGVuZGVuY2llcyA9IHBhY2thZ2VKc29uW3NlY3Rpb25dO1xuICAgIGlmICghZGVwZW5kZW5jaWVzKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmVyc2lvbl0gb2YgT2JqZWN0LmVudHJpZXMoZGVwZW5kZW5jaWVzKSkge1xuICAgICAgaWYgKHZlcnNpb24uc3RhcnRzV2l0aCgnY2F0YWxvZzonKSkge1xuICAgICAgICBuYW1lcy5wdXNoKG5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gbmFtZXM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVBhY2thZ2UoY3dkOiBzdHJpbmcsIGxhYmVsOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYFxcbiMgJHtsYWJlbH1cXG5gKTtcbiAgYXdhaXQgcnVuQ29tbWFuZChVUERBVEVfQ09NTUFORCwgY3dkKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuQ29tbWFuZChjb21tYW5kOiByZWFkb25seSBbc3RyaW5nLCAuLi5zdHJpbmdbXV0sIGN3ZDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kWzBdLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgY3dkLFxuICAgIHN0ZGlvOiAnaW5oZXJpdCcsXG4gIH0pO1xuXG4gIGF3YWl0IG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICBwcm9jLm9uY2UoJ2Nsb3NlJywgKGNvZGUpID0+IHtcbiAgICAgIGlmIChjb2RlID09PSAwKSB7XG4gICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBFcnJvcihgQ29tbWFuZCBmYWlsZWQgaW4gJHtyZWxhdGl2ZShwcm9jZXNzLmN3ZCgpLCBjd2QpIHx8ICcuJ306ICR7Y29tbWFuZC5qb2luKCcgJyl9YCkpO1xuICAgIH0pO1xuICB9KTtcbn1cbiIsIi8qKlxuICogYGJsb2NrUXVvdGU6ICdsaXRlcmFsJ2A6IFVzZXMgYSBwaXBlIChgcHJvcDogfGApIHRvIHJlcHJlc2VudCBtdWx0aWxpbmUgc3RyaW5ncy5cbiAqIGBsaW5lV2lkdGg6IDBgOiBEaXNhYmxlcyBsaW5lIHdyYXBwaW5nLlxuICovXG5leHBvcnQgY29uc3QgeWFtbFN0cmluZ2lmeU9wdGlvbnMgPSB7IGJsb2NrUXVvdGU6ICdsaXRlcmFsJywgbGluZVdpZHRoOiAwIH0gYXMgY29uc3Q7XG4iLCJpbXBvcnQgeyBzcGF3biwgc3Bhd25TeW5jIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHN0ZGVyciBhcyBwcm9jZXNzU3RkZXJyLCBzdGRpbiBhcyBwcm9jZXNzU3RkaW4gfSBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgc2V0VGltZW91dCBhcyBzbGVlcCB9IGZyb20gJ25vZGU6dGltZXJzL3Byb21pc2VzJztcbmltcG9ydCB7IHN0cmluZ2lmeSBhcyBzdHJpbmdpZnlZYW1sIH0gZnJvbSAneWFtbCc7XG5pbXBvcnQgeyBjcmVhdGVQcm9jZXNzVGltZW91dCwgc3RyZWFtVG9UZXh0LCB0aW1lb3V0RXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7IHlhbWxTdHJpbmdpZnlPcHRpb25zIH0gZnJvbSAnLi4veWFtbC5qcyc7XG5cbmV4cG9ydCB0eXBlIEpzb25PYmplY3QgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgaW50ZXJmYWNlIE1ldGFkYXRhTm9kZSB7XG4gIG51bWJlcjogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhZ2VJbmZvIHtcbiAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWVzc2FnZUNvbm5lY3Rpb248VE5vZGU+IHtcbiAgbm9kZXM6IFROb2RlW107XG4gIHBhZ2VJbmZvOiBQYWdlSW5mbztcbn1cblxuaW50ZXJmYWNlIFJ1bkNvbW1hbmRPcHRpb25zIHtcbiAgc3RkaW5EYXRhPzogc3RyaW5nO1xuICBhbGxvd2VkRXhpdENvZGVzPzogbnVtYmVyW107XG59XG5cbmNvbnN0IEdIX1JFVFJZX01BWF9BVFRFTVBUUyA9IDM7XG5jb25zdCBHSF9SRVRSWV9CQVNFX0RFTEFZX01TID0gMTAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb2dyZXNzKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICBwcm9jZXNzU3RkZXJyLndyaXRlKGAke21lc3NhZ2V9XFxuYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGl0V2l0aEVycm9yKG1lc3NhZ2U6IHN0cmluZywgY29kZSA9IDEpOiBuZXZlciB7XG4gIHByb2Nlc3NTdGRlcnIud3JpdGUoYCR7bWVzc2FnZX1cXG5gKTtcbiAgcHJvY2Vzcy5leGl0KGNvZGUpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFN0ZGluVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAocHJvY2Vzc1N0ZGluLmlzVFRZKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBhd2FpdCBzdHJlYW1Ub1RleHQocHJvY2Vzc1N0ZGluKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXF1aXJlZFN0ZGluVGV4dChlcnJvck1lc3NhZ2UgPSAnRXJyb3I6IGlucHV0IGlzIHJlcXVpcmVkIG9uIHN0ZGluJyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGlucHV0ID0gYXdhaXQgcmVhZFN0ZGluVGV4dCgpO1xuICBpZiAoaW5wdXQubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICBleGl0V2l0aEVycm9yKGVycm9yTWVzc2FnZSwgMik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Db21tYW5kKGNvbW1hbmQ6IHN0cmluZ1tdLCBvcHRpb25zOiBSdW5Db21tYW5kT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYWxsb3dlZEV4aXRDb2RlcyA9IG9wdGlvbnMuYWxsb3dlZEV4aXRDb2RlcyA/PyBbXTtcblxuICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBHSF9SRVRSWV9NQVhfQVRURU1QVFM7IGF0dGVtcHQgKz0gMSkge1xuICAgIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kWzBdID8/ICcnLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICAgIHN0ZGlvOiBbJ3BpcGUnLCAncGlwZScsICdwaXBlJ10sXG4gICAgfSk7XG4gICAgbGV0IGZhaWx1cmVNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHJldHJ5ID0gZmFsc2U7XG4gICAgY29uc3QgcHJvY2Vzc1RpbWVvdXQgPSBjcmVhdGVQcm9jZXNzVGltZW91dChwcm9jKTtcbiAgICB0cnkge1xuICAgICAgaWYgKG9wdGlvbnMuc3RkaW5EYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvYy5zdGRpbi5lbmQob3B0aW9ucy5zdGRpbkRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvYy5zdGRpbi5lbmQoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZG91dCksXG4gICAgICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZGVyciksXG4gICAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIHByb2Mub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgICAgICAgIHByb2Mub25jZSgnY2xvc2UnLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID8/IDEpKTtcbiAgICAgICAgfSksXG4gICAgICBdKTtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGAke3N0ZG91dH0ke3N0ZGVycn1gO1xuXG4gICAgICBpZiAocHJvY2Vzc1RpbWVvdXQudGltZWRPdXQoKSkge1xuICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IHRpbWVvdXRFcnJvck1lc3NhZ2Uob3V0cHV0LCBwcm9jZXNzVGltZW91dC50aW1lb3V0TXMsIGNvbW1hbmQpO1xuICAgICAgfSBlbHNlIGlmIChleGl0Q29kZSA9PT0gMCB8fCBhbGxvd2VkRXhpdENvZGVzLmluY2x1ZGVzKGV4aXRDb2RlKSkge1xuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgfSBlbHNlIGlmIChpc1RyYW5zaWVudEdoRmFpbHVyZShjb21tYW5kLCBleGl0Q29kZSwgb3V0cHV0KSAmJiBhdHRlbXB0IDwgR0hfUkVUUllfTUFYX0FUVEVNUFRTKSB7XG4gICAgICAgIHJldHJ5ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZhaWx1cmVNZXNzYWdlID0gb3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBwcm9jZXNzVGltZW91dC5jbGVhcigpO1xuICAgIH1cblxuICAgIGlmIChyZXRyeSkge1xuICAgICAgcHJvZ3Jlc3MoYFRyYW5zaWVudCBHaXRIdWIgQ0xJIGZhaWx1cmU7IHJldHJ5aW5nLi4uIChhdHRlbXB0ICR7YXR0ZW1wdH0gb2YgJHtHSF9SRVRSWV9NQVhfQVRURU1QVFMgLSAxfSlgKTtcbiAgICAgIGF3YWl0IHNsZWVwKEdIX1JFVFJZX0JBU0VfREVMQVlfTVMgKiBhdHRlbXB0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoZmFpbHVyZU1lc3NhZ2UpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoZmFpbHVyZU1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBleGl0V2l0aEVycm9yKGBDb21tYW5kIGZhaWxlZCBhZnRlciAke0dIX1JFVFJZX01BWF9BVFRFTVBUU30gYXR0ZW1wdHM6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaChhcmdzOiBzdHJpbmdbXSwgc3RkaW5EYXRhPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHJ1bkNvbW1hbmQoWydnaCcsIC4uLmFyZ3NdLCB7IHN0ZGluRGF0YSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdoQWxsb3dFeGl0Q29kZXMoXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBhbGxvd2VkRXhpdENvZGVzOiBudW1iZXJbXSxcbiAgc3RkaW5EYXRhPzogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgcnVuQ29tbWFuZChbJ2doJywgLi4uYXJnc10sIHsgc3RkaW5EYXRhLCBhbGxvd2VkRXhpdENvZGVzIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudFJlcG9QYXJ0cygpOiBQcm9taXNlPFtzdHJpbmcsIHN0cmluZ10+IHtcbiAgY29uc3QgbmFtZVdpdGhPd25lck91dHB1dCA9IGF3YWl0IGdoKFsncmVwbycsICd2aWV3JywgJy0tanNvbicsICduYW1lV2l0aE93bmVyJywgJy0tanEnLCAnLm5hbWVXaXRoT3duZXInXSk7XG4gIGNvbnN0IG5hbWVXaXRoT3duZXIgPSBuYW1lV2l0aE93bmVyT3V0cHV0LnRyaW0oKTtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IG5hbWVXaXRoT3duZXIuc3BsaXQoJy8nLCAyKTtcbiAgaWYgKCFvd25lciB8fCAhbmFtZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgcmVwb3NpdG9yeScpO1xuICB9XG4gIHJldHVybiBbb3duZXIsIG5hbWVdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudFByTnVtYmVyKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgZ2goWydwcicsICd2aWV3JywgJy0tanNvbicsICdudW1iZXInLCAnLS1qcScsICcubnVtYmVyJ10pO1xuICByZXR1cm4gcHJOdW1iZXIudHJpbSgpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ3JhcGhxbDxUIGV4dGVuZHMgSnNvbk9iamVjdD4oXG4gIHF1ZXJ5OiBzdHJpbmcsXG4gIHZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZD4gPSB7fVxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IGFyZ3MgPSBbJ2FwaScsICdncmFwaHFsJywgJy1GJywgJ3F1ZXJ5PUAtJ107XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcnMpKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgYXJncy5wdXNoKCctRicsIGAke2tleX09JHt2YWx1ZX1gKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShhd2FpdCBnaChhcmdzLCBxdWVyeSkpIGFzIEpzb25PYmplY3QgJiB7IGVycm9ycz86IEFycmF5PHsgbWVzc2FnZT86IHN0cmluZyB9PiB9O1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSkge1xuICAgIHJldHVybiByZXNwb25zZSBhcyBUO1xuICB9XG5cbiAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IHJlc3BvbnNlLmVycm9ycy5tYXAoKGVycm9yKSA9PiBlcnJvci5tZXNzYWdlID8/ICdVbmtub3duIEdyYXBoUUwgZXJyb3InKS5qb2luKCdcXG4nKTtcbiAgZXhpdFdpdGhFcnJvcihgR3JhcGhRTCBBUEkgZXJyb3I6XFxuJHtlcnJvck1lc3NhZ2VzfWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24geWFtbER1bXAoZGF0YTogdW5rbm93bik6IHN0cmluZyB7XG4gIHJldHVybiBzdHJpbmdpZnlZYW1sKGRhdGEsIHlhbWxTdHJpbmdpZnlPcHRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBDb3B5PFQ+KGRhdGE6IFQpOiBUIHtcbiAgcmV0dXJuIHN0cnVjdHVyZWRDbG9uZShkYXRhKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbW1hbmRBdmFpbGFibGUoY29tbWFuZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBzcGF3blN5bmNTYWZlKFtjb21tYW5kLCAnLS12ZXJzaW9uJ10pLmV4aXRDb2RlID09PSAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3Bhd25TeW5jU2FmZShjb21tYW5kOiBzdHJpbmdbXSwgc3RkaW5EYXRhPzogc3RyaW5nKTogeyBleGl0Q29kZTogbnVtYmVyOyBvdXRwdXQ6IHN0cmluZyB9IHtcbiAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICBlbmNvZGluZzogJ3V0ZjgnLFxuICAgIGlucHV0OiBzdGRpbkRhdGEsXG4gIH0pO1xuXG4gIHJldHVybiB7XG4gICAgZXhpdENvZGU6IHJlc3VsdC5zdGF0dXMgPz8gKHJlc3VsdC5lcnJvciA/IDEgOiAwKSxcbiAgICBvdXRwdXQ6IGAke3Jlc3VsdC5zdGRvdXQgPz8gJyd9JHtyZXN1bHQuc3RkZXJyID8/ICcnfWAsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzVHJhbnNpZW50R2hGYWlsdXJlKGNvbW1hbmQ6IHN0cmluZ1tdLCBleGl0Q29kZTogbnVtYmVyLCBvdXRwdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoY29tbWFuZFswXSAhPT0gJ2doJyB8fCBleGl0Q29kZSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAvKEhUVFAgNTBbMDIzNF1cXGJ8V2UgaGFkIGlzc3VlcyBwcm9kdWNpbmcgdGhlIHJlc3BvbnNlIHRvIHlvdXIgcmVxdWVzdCkvaS50ZXN0KG91dHB1dCk7XG59XG4iLCJpbXBvcnQgeyBzdGRlcnIgYXMgcHJvY2Vzc1N0ZGVyciB9IGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBzZXRUaW1lb3V0IGFzIHNsZWVwIH0gZnJvbSAnbm9kZTp0aW1lcnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgc3RyaXBWVENvbnRyb2xDaGFyYWN0ZXJzIH0gZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCB7IGNyZWF0ZVdhaXRQcm9ncmVzcywgREVGQVVMVF9XQUlUX0lOVEVSVkFMX1NFQ09ORFMgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuaW1wb3J0IHtcbiAgY29tbWFuZEF2YWlsYWJsZSxcbiAgY3VycmVudFByTnVtYmVyLFxuICBjdXJyZW50UmVwb1BhcnRzLFxuICBkZWVwQ29weSxcbiAgZXhpdFdpdGhFcnJvcixcbiAgZ2hBbGxvd0V4aXRDb2RlcyxcbiAgZ3JhcGhxbCxcbiAgcHJvZ3Jlc3MsXG4gIHNwYXduU3luY1NhZmUsXG4gIHlhbWxEdW1wLFxufSBmcm9tICcuL3NoYXJlZC5qcyc7XG5cbmV4cG9ydCBjb25zdCBURVNUX1JFTEFURURfUEFUVEVSTiA9IC9cXGJ0ZXN0XFxiL2k7XG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMgPSBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUztcbi8vIE9uZSBodW5kcmVkIDM2LXNlY29uZCBjaGVja3MgcHJlc2VydmVzIHRoZSBtYXhpbXVtIG9uZS1ob3VyIENJIHdhaXQgYnVkZ2V0LlxuZXhwb3J0IGNvbnN0IFRFU1RfQ0hFQ0tfV0FJVF9NQVhfQVRURU1QVFMgPSAxMDA7XG5jb25zdCBURVNUX0NIRUNLX1dBSVRfTUVTU0FHRSA9ICdXYWl0aW5nIGZvciB0ZXN0LXJlbGF0ZWQgd29ya2Zsb3dzIHRvIGZpbmlzaC4nO1xuZXhwb3J0IGNvbnN0IFpFUk9fVElNRVNUQU1QID0gJzAwMDEtMDEtMDFUMDA6MDA6MDBaJztcbmV4cG9ydCBjb25zdCBXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMgPSBbXG4gICdhdHRlbXB0JyxcbiAgJ2NvbmNsdXNpb24nLFxuICAnY3JlYXRlZEF0JyxcbiAgJ2RhdGFiYXNlSWQnLFxuICAnZGlzcGxheVRpdGxlJyxcbiAgJ2V2ZW50JyxcbiAgJ2hlYWRCcmFuY2gnLFxuICAnaGVhZFNoYScsXG4gICdqb2JzJyxcbiAgJ25hbWUnLFxuICAnbnVtYmVyJyxcbiAgJ3N0YXJ0ZWRBdCcsXG4gICdzdGF0dXMnLFxuICAndXBkYXRlZEF0JyxcbiAgJ3VybCcsXG4gICd3b3JrZmxvd05hbWUnLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IGludGVyZmFjZSBDaGVjayB7XG4gIGJ1Y2tldD86IHN0cmluZztcbiAgY29tcGxldGVkQXQ/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBldmVudD86IHN0cmluZztcbiAgbGluaz86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgc3RhcnRlZEF0Pzogc3RyaW5nO1xuICBzdGF0ZT86IHN0cmluZztcbiAgd29ya2Zsb3c/OiBzdHJpbmc7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2lSZXN1bHRzIHtcbiAgc3VtbWFyeToge1xuICAgIHRvdGFsOiBudW1iZXI7XG4gICAgcGFzczogbnVtYmVyO1xuICAgIGZhaWw6IG51bWJlcjtcbiAgICBwZW5kaW5nOiBudW1iZXI7XG4gICAgc2tpcHBpbmc6IG51bWJlcjtcbiAgICBjYW5jZWw6IG51bWJlcjtcbiAgfTtcbiAgY2hlY2tzOiBDaGVja1tdO1xufVxuXG5leHBvcnQgdHlwZSBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uID0gJ2ZhaWxlZCcgfCAncnVubmluZycgfCAnc3VjY2Vzc2Z1bCc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0IHtcbiAgY2xhc3NpZmljYXRpb246IFdvcmtmbG93Q2xhc3NpZmljYXRpb247XG4gIGNoZWNrOiBDaGVjaztcbiAgY2hlY2tzOiBDaGVja1tdO1xufVxuXG5pbnRlcmZhY2UgQ29tcGFjdFdvcmtmbG93UnVuIHtcbiAgYnJhbmNoPzogc3RyaW5nO1xuICBjb25jbHVzaW9uPzogc3RyaW5nO1xuICBmYWlsZWRfc3RlcD86IHN0cmluZztcbiAgam9iPzogc3RyaW5nO1xuICBqb2JfdXJsPzogc3RyaW5nO1xuICBydW5faWQ/OiBzdHJpbmc7XG4gIHJ1bl91cmw/OiBzdHJpbmc7XG4gIHNoYT86IHN0cmluZztcbiAgd29ya2Zsb3c/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBXb3JrZmxvd1J1blN0ZXAge1xuICBjb25jbHVzaW9uPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBudW1iZXI/OiBudW1iZXI7XG4gIHN0YXR1cz86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFdvcmtmbG93UnVuSm9iIHtcbiAgY29uY2x1c2lvbj86IHN0cmluZztcbiAgZGF0YWJhc2VJZD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgc3RhdHVzPzogc3RyaW5nO1xuICBzdGVwcz86IFdvcmtmbG93UnVuU3RlcFtdO1xuICB1cmw/OiBzdHJpbmc7XG59XG5cbmludGVyZmFjZSBXb3JrZmxvd1J1bkRldGFpbHMge1xuICBjb25jbHVzaW9uPzogc3RyaW5nO1xuICBoZWFkQnJhbmNoPzogc3RyaW5nO1xuICBoZWFkU2hhPzogc3RyaW5nO1xuICBqb2JzPzogV29ya2Zsb3dSdW5Kb2JbXTtcbiAgdXJsPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUHJDb21taXROb2RlIHtcbiAgY29tbWl0Pzoge1xuICAgIGNvbW1pdHRlZERhdGU/OiBzdHJpbmc7XG4gICAgYWJicmV2aWF0ZWRPaWQ/OiBzdHJpbmc7XG4gICAgbWVzc2FnZUhlYWRsaW5lPzogc3RyaW5nO1xuICB9O1xufVxuXG5pbnRlcmZhY2UgUHJDb21taXRzUmVzcG9uc2UgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIHB1bGxSZXF1ZXN0Pzoge1xuICAgICAgICBjb21taXRzPzoge1xuICAgICAgICAgIG5vZGVzPzogUHJDb21taXROb2RlW107XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTGF0ZXN0Q29tbWl0U3VtbWFyeSB7XG4gIGRhdGU6IHN0cmluZztcbiAgaGFzaDogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xufVxuXG5jb25zdCBGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4gPSAvXi4qP1xcdFVOS05PV04gU1RFUFxcdFxcZHs0fS1cXGR7Mn0tXFxkezJ9VFteWl0rWlxccyovO1xuY29uc3QgcnRrQXZhaWxhYmxlID0gY29tbWFuZEF2YWlsYWJsZSgncnRrJyk7XG5jb25zdCBub29wID0gKCk6IHZvaWQgPT4ge307XG5jb25zdCBQUl9DT01NSVRTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIGNvbW1pdHMobGFzdDogMykge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGNvbW1pdCB7XG4gICAgICAgICAgICAgIGNvbW1pdHRlZERhdGVcbiAgICAgICAgICAgICAgYWJicmV2aWF0ZWRPaWRcbiAgICAgICAgICAgICAgbWVzc2FnZUhlYWRsaW5lXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGF0ZXN0UHJDaVJlc3VsdHMocHJOdW1iZXI/OiBzdHJpbmcpOiBQcm9taXNlPENpUmVzdWx0cz4ge1xuICBjb25zdCBhcmdzID0gWydwcicsICdjaGVja3MnXTtcbiAgaWYgKHByTnVtYmVyKSB7XG4gICAgYXJncy5wdXNoKHByTnVtYmVyKTtcbiAgfVxuICBhcmdzLnB1c2goJy0tanNvbicsICdidWNrZXQsY29tcGxldGVkQXQsZGVzY3JpcHRpb24sZXZlbnQsbGluayxuYW1lLHN0YXJ0ZWRBdCxzdGF0ZSx3b3JrZmxvdycpO1xuXG4gIGxldCBjaGVja3M6IENoZWNrW10gPSBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKGFyZ3MsIFs4XSk7XG4gICAgY2hlY2tzID0gcmF3LnRyaW0oKS5sZW5ndGggPiAwID8gKEpTT04ucGFyc2UocmF3KSBhcyBDaGVja1tdKSA6IFtdO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBjaGVja3MgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3VtbWFyeTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICBmb3IgKGNvbnN0IGNoZWNrIG9mIGNoZWNrcykge1xuICAgIGNvbnN0IGJ1Y2tldCA9IGNoZWNrLmJ1Y2tldCA/PyAnJztcbiAgICBzdW1tYXJ5W2J1Y2tldF0gPSAoc3VtbWFyeVtidWNrZXRdID8/IDApICsgMTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgc3VtbWFyeToge1xuICAgICAgdG90YWw6IGNoZWNrcy5sZW5ndGgsXG4gICAgICBwYXNzOiBzdW1tYXJ5LnBhc3MgPz8gMCxcbiAgICAgIGZhaWw6IHN1bW1hcnkuZmFpbCA/PyAwLFxuICAgICAgcGVuZGluZzogc3VtbWFyeS5wZW5kaW5nID8/IDAsXG4gICAgICBza2lwcGluZzogc3VtbWFyeS5za2lwcGluZyA/PyAwLFxuICAgICAgY2FuY2VsOiBzdW1tYXJ5LmNhbmNlbCA/PyAwLFxuICAgIH0sXG4gICAgY2hlY2tzLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyhcbiAgcHJOdW1iZXI6IHN0cmluZyxcbiAgc2xlZXBGbjogKHNlY29uZHM6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiA9IHNsZWVwU2Vjb25kcyxcbiAgbGF0ZXN0Q2lSZXN1bHRzRm46IChwck51bWJlcj86IHN0cmluZykgPT4gQ2lSZXN1bHRzIHwgUHJvbWlzZTxDaVJlc3VsdHM+ID0gbGF0ZXN0UHJDaVJlc3VsdHMsXG4gIHdyaXRlUHJvZ3Jlc3NGbjogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCA9IChtZXNzYWdlKSA9PiBwcm9jZXNzU3RkZXJyLndyaXRlKG1lc3NhZ2UpXG4pOiBQcm9taXNlPFtDaVJlc3VsdHMsIG51bWJlciwgYm9vbGVhbl0+IHtcbiAgbGV0IGF0dGVtcHRzID0gMDtcbiAgbGV0IGNpUmVzdWx0cyA9IGF3YWl0IGxhdGVzdENpUmVzdWx0c0ZuKHByTnVtYmVyKTtcbiAgbGV0IHN0b3BXYWl0UHJvZ3Jlc3MgPSBub29wO1xuXG4gIHRyeSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgY29uc3QgY2xhc3NpZmllZFJlc3VsdHMgPSBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHMpO1xuICAgICAgY29uc3QgW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXSA9IGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChjbGFzc2lmaWVkUmVzdWx0cyk7XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwIHx8IE9iamVjdC5rZXlzKHJ1bm5pbmdSZXN1bHRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFtjaVJlc3VsdHMsIGF0dGVtcHRzLCBmYWxzZV07XG4gICAgICB9XG4gICAgICBpZiAoYXR0ZW1wdHMgPj0gVEVTVF9DSEVDS19XQUlUX01BWF9BVFRFTVBUUykge1xuICAgICAgICByZXR1cm4gW2NpUmVzdWx0cywgYXR0ZW1wdHMsIHRydWVdO1xuICAgICAgfVxuXG4gICAgICBhdHRlbXB0cyArPSAxO1xuICAgICAgaWYgKGF0dGVtcHRzID09PSAxKSB7XG4gICAgICAgIHN0b3BXYWl0UHJvZ3Jlc3MgPSBjcmVhdGVXYWl0UHJvZ3Jlc3MoXG4gICAgICAgICAgVEVTVF9DSEVDS19XQUlUX01FU1NBR0UsXG4gICAgICAgICAgVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMsXG4gICAgICAgICAgd3JpdGVQcm9ncmVzc0ZuXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBhd2FpdCBzbGVlcEZuKFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTKTtcbiAgICAgIGNpUmVzdWx0cyA9IGF3YWl0IGxhdGVzdENpUmVzdWx0c0ZuKHByTnVtYmVyKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHM6IENpUmVzdWx0cyk6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4ge1xuICBjb25zdCBsYXRlc3RSZXN1bHRzQnlXb3JrZmxvdzogUmVjb3JkPHN0cmluZywgQ2hlY2tbXT4gPSB7fTtcbiAgZm9yIChjb25zdCBjaGVjayBvZiBjaVJlc3VsdHMuY2hlY2tzKSB7XG4gICAgY29uc3Qgd29ya2Zsb3dLZXkgPSBjaGVjay53b3JrZmxvdyB8fCBjaGVjay5uYW1lIHx8ICd1bmtub3duX3dvcmtmbG93JztcbiAgICBsYXRlc3RSZXN1bHRzQnlXb3JrZmxvd1t3b3JrZmxvd0tleV0gPz89IFtdO1xuICAgIGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93W3dvcmtmbG93S2V5XS5wdXNoKGNoZWNrKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMobGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3cpLm1hcCgoW3dvcmtmbG93S2V5LCBjaGVja3NdKSA9PiB7XG4gICAgICBjb25zdCBsYXRlc3RBdHRlbXB0Q2hlY2tzID0gbGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3coY2hlY2tzKTtcbiAgICAgIGNvbnN0IGZpcnN0Q2hlY2sgPSBsYXRlc3RBdHRlbXB0Q2hlY2tzWzBdO1xuICAgICAgaWYgKCFmaXJzdENoZWNrKSB7XG4gICAgICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBubyBjaGVja3MgZm91bmQgZm9yIHdvcmtmbG93ICR7d29ya2Zsb3dLZXl9YCk7XG4gICAgICB9XG4gICAgICBsZXQgbGF0ZXN0Q2hlY2sgPSBmaXJzdENoZWNrO1xuICAgICAgZm9yIChjb25zdCBjaGVjayBvZiBsYXRlc3RBdHRlbXB0Q2hlY2tzKSB7XG4gICAgICAgIGlmIChsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjaykgPiBsYXRlc3RDaGVja1RpbWVzdGFtcChsYXRlc3RDaGVjaykpIHtcbiAgICAgICAgICBsYXRlc3RDaGVjayA9IGNoZWNrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIHdvcmtmbG93S2V5LFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NpZmljYXRpb246IHdvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24obGF0ZXN0QXR0ZW1wdENoZWNrcyksXG4gICAgICAgICAgY2hlY2s6IGxhdGVzdENoZWNrLFxuICAgICAgICAgIGNoZWNrczogbGF0ZXN0QXR0ZW1wdENoZWNrcyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChcbiAgY2xhc3NpZmllZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD5cbik6IFtSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+LCBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+XSB7XG4gIGNvbnN0IGZhaWxlZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4gPSB7fTtcbiAgY29uc3QgcnVubmluZ1Jlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4gPSB7fTtcblxuICBmb3IgKGNvbnN0IFt3b3JrZmxvd0tleSwgcmVzdWx0XSBvZiBPYmplY3QuZW50cmllcyhjbGFzc2lmaWVkUmVzdWx0cykpIHtcbiAgICBpZiAocmVzdWx0LmNsYXNzaWZpY2F0aW9uID09PSAnZmFpbGVkJykge1xuICAgICAgZmFpbGVkUmVzdWx0c1t3b3JrZmxvd0tleV0gPSByZXN1bHQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5jbGFzc2lmaWNhdGlvbiA9PT0gJ3J1bm5pbmcnICYmIHJlc3VsdC5jaGVja3Muc29tZSgoY2hlY2spID0+IHRlc3RSZWxhdGVkQ2hlY2soY2hlY2spKSkge1xuICAgICAgcnVubmluZ1Jlc3VsdHNbd29ya2Zsb3dLZXldID0gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2s6IENoZWNrIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbGluayA9IGNoZWNrPy5saW5rO1xuICBpZiAoIWxpbmspIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBsaW5rLm1hdGNoKC9cXC9hY3Rpb25zXFwvcnVuc1xcLyhcXGQrKS8pPy5bMV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3b3JrZmxvd1J1bihydW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZD4ge1xuICBpZiAoIXJ1bklkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHJ1bkpzb24gPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncnVuJywgJ3ZpZXcnLCBydW5JZCwgJy0tanNvbicsIFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUy5qb2luKCcsJyldLCBbMV0pO1xuICBpZiAocnVuSnNvbi50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UocnVuSnNvbikgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgIHByb2Nlc3NTdGRlcnIud3JpdGUoYFdhcm5pbmc6IENvdWxkIG5vdCBwYXJzZSBKU09OIGZvciB3b3JrZmxvdyBydW4gJHtydW5JZH06ICR7ZXJyb3IubWVzc2FnZX1cXG5gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyhjaGVja3M6IENoZWNrW10pOiBDaGVja1tdIHtcbiAgY29uc3QgZ3JvdXBzID0gbmV3IE1hcDxzdHJpbmcsIENoZWNrW10+KCk7XG4gIGZvciAoY29uc3QgY2hlY2sgb2YgY2hlY2tzKSB7XG4gICAgY29uc3Qga2V5ID0gd29ya2Zsb3dBdHRlbXB0S2V5KGNoZWNrKTtcbiAgICBjb25zdCBncm91cCA9IGdyb3Vwcy5nZXQoa2V5KTtcbiAgICBpZiAoZ3JvdXApIHtcbiAgICAgIGdyb3VwLnB1c2goY2hlY2spO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGdyb3Vwcy5zZXQoa2V5LCBbY2hlY2tdKTtcbiAgfVxuXG4gIGxldCBsYXRlc3RHcm91cDogQ2hlY2tbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGN1cnJlbnRHcm91cCBvZiBncm91cHMudmFsdWVzKCkpIHtcbiAgICBpZiAobGF0ZXN0R3JvdXAubGVuZ3RoID09PSAwKSB7XG4gICAgICBsYXRlc3RHcm91cCA9IGN1cnJlbnRHcm91cDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGlmIChsYXRlc3RHcm91cFRpbWVzdGFtcChjdXJyZW50R3JvdXApID4gbGF0ZXN0R3JvdXBUaW1lc3RhbXAobGF0ZXN0R3JvdXApKSB7XG4gICAgICBsYXRlc3RHcm91cCA9IGN1cnJlbnRHcm91cDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGxhdGVzdEdyb3VwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dBdHRlbXB0S2V5KGNoZWNrOiBDaGVjayk6IHN0cmluZyB7XG4gIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2spO1xuICByZXR1cm4gcnVuSWQgPyBgcnVuOiR7cnVuSWR9YCA6ICd1bmtub3duX3J1bic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd1Jlc3VsdENsYXNzaWZpY2F0aW9uKGNoZWNrczogQ2hlY2tbXSk6IFdvcmtmbG93Q2xhc3NpZmljYXRpb24ge1xuICBjb25zdCBidWNrZXRzID0gY2hlY2tzLm1hcCgoY2hlY2spID0+IGNoZWNrLmJ1Y2tldCA/PyAnJyk7XG4gIGlmIChidWNrZXRzLnNvbWUoKGJ1Y2tldCkgPT4gIVsncGFzcycsICdza2lwcGluZycsICdwZW5kaW5nJ10uaW5jbHVkZXMoYnVja2V0KSkpIHtcbiAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gIH1cbiAgaWYgKGJ1Y2tldHMuaW5jbHVkZXMoJ3BlbmRpbmcnKSkge1xuICAgIHJldHVybiAncnVubmluZyc7XG4gIH1cbiAgcmV0dXJuICdzdWNjZXNzZnVsJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrOiBDaGVjayk6IHN0cmluZyB7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IGNoZWNrLmNvbXBsZXRlZEF0O1xuICBpZiAoIXRpbWVzdGFtcCB8fCB0aW1lc3RhbXAgPT09IFpFUk9fVElNRVNUQU1QKSB7XG4gICAgcmV0dXJuIGNoZWNrLnN0YXJ0ZWRBdCA/PyAnJztcbiAgfVxuICByZXR1cm4gdGltZXN0YW1wO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVzdFJlbGF0ZWRDaGVjayhjaGVjazogQ2hlY2spOiBib29sZWFuIHtcbiAgcmV0dXJuIFtjaGVjay5uYW1lLCBjaGVjay53b3JrZmxvd10uc29tZSgodmFsdWUpID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgVEVTVF9SRUxBVEVEX1BBVFRFUk4udGVzdCh2YWx1ZSkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2xlZXBTZWNvbmRzKHNlY29uZHM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzbGVlcChzZWNvbmRzICogMTAwMCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja1ByQ2koKTogUHJvbWlzZTx7IG91dHB1dDogc3RyaW5nOyBleGl0Q29kZTogbnVtYmVyIH0+IHtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcbiAgY29uc3QgbGF0ZXN0Q29tbWl0cyA9IGF3YWl0IGxhdGVzdFByQ29tbWl0U3VtbWFyaWVzKHByTnVtYmVyKTtcblxuICBwcm9ncmVzcygnRmV0Y2hpbmcgbGF0ZXN0IENJIHJlc3VsdHMuLi4nKTtcbiAgY29uc3QgW2NpUmVzdWx0cywgd2FpdEF0dGVtcHRzLCB3YWl0VGltZWRPdXRdID0gYXdhaXQgd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyhwck51bWJlcik7XG4gIGNvbnN0IGNsYXNzaWZpZWRMYXRlc3QgPSBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHMpO1xuICBjb25zdCBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdID0gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKGNsYXNzaWZpZWRMYXRlc3QpO1xuXG4gIGNvbnN0IHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIHN1bW1hcnk6IGRlZXBDb3B5KGNpUmVzdWx0cy5zdW1tYXJ5KSxcbiAgICB3YWl0ZWRfZm9yX3Rlc3RfcmVsYXRlZF9jaGVja3M6IHdhaXRBdHRlbXB0cyA+IDAsXG4gICAgdGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfYXR0ZW1wdHM6IHdhaXRBdHRlbXB0cyxcbiAgICB0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF90aW1lZF9vdXQ6IHdhaXRUaW1lZE91dCxcbiAgICBsYXRlc3RDb21taXRzLFxuICB9O1xuXG4gIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwKSB7XG4gICAgcGF5bG9hZC5mYWlsZWRfd29ya2Zsb3dzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhmYWlsZWRSZXN1bHRzKS5tYXAoYXN5bmMgKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4ge1xuICAgICAgICBjb25zdCBjb21wYWN0V29ya2Zsb3cgPSBhd2FpdCBjb21wYWN0V29ya2Zsb3dSZXN1bHQod29ya2Zsb3dLZXksIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY29tcGFjdFdvcmtmbG93LFxuICAgICAgICAgIC4uLmJ1aWxkRmFpbGVkV29ya2Zsb3dEZXRhaWxzKGF3YWl0IGZhaWxlZFdvcmtmbG93TG9nKHJlc3VsdC5jaGVjaykpLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICBwYXlsb2FkLnRlc3Rfd29ya2Zsb3dfb3V0cHV0ID0gJ1RpbWVkIG91dCB3YWl0aW5nIGZvciB0ZXN0LXJlbGF0ZWQgd29ya2Zsb3dzIHRvIGZpbmlzaC4nO1xuICAgIHBheWxvYWQucnVubmluZ190ZXN0X3JlbGF0ZWRfd29ya2Zsb3dzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhydW5uaW5nUmVzdWx0cykubWFwKChbd29ya2Zsb3dLZXksIHJlc3VsdF0pID0+IGNvbXBhY3RXb3JrZmxvd1Jlc3VsdCh3b3JrZmxvd0tleSwgcmVzdWx0KSlcbiAgICApO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICByZXR1cm4geyBvdXRwdXQ6IHN1Y2Nlc3NmdWxDaU91dHB1dChsYXRlc3RDb21taXRzKSwgZXhpdENvZGU6IDAgfTtcbn1cblxuZnVuY3Rpb24gbGF0ZXN0R3JvdXBUaW1lc3RhbXAoY2hlY2tzOiBDaGVja1tdKTogc3RyaW5nIHtcbiAgbGV0IGxhdGVzdCA9ICcnO1xuICBmb3IgKGNvbnN0IGNoZWNrIG9mIGNoZWNrcykge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrKTtcbiAgICBpZiAodGltZXN0YW1wID4gbGF0ZXN0KSB7XG4gICAgICBsYXRlc3QgPSB0aW1lc3RhbXA7XG4gICAgfVxuICB9XG4gIHJldHVybiBsYXRlc3Q7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxhdGVzdFByQ29tbWl0U3VtbWFyaWVzKHByTnVtYmVyOiBzdHJpbmcpOiBQcm9taXNlPExhdGVzdENvbW1pdFN1bW1hcnlbXT4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdyYXBocWw8UHJDb21taXRzUmVzcG9uc2U+KFBSX0NPTU1JVFNfUVVFUlksIHtcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogTnVtYmVyKHByTnVtYmVyKSxcbiAgfSk7XG5cbiAgcmV0dXJuIChyZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8uY29tbWl0cz8ubm9kZXMgPz8gW10pXG4gICAgLmZsYXRNYXAoKG5vZGUpID0+IHtcbiAgICAgIGNvbnN0IGRhdGUgPSBzdHJpbmdPclVuZGVmaW5lZChub2RlLmNvbW1pdD8uY29tbWl0dGVkRGF0ZSk7XG4gICAgICBjb25zdCBoYXNoID0gc3RyaW5nT3JVbmRlZmluZWQobm9kZS5jb21taXQ/LmFiYnJldmlhdGVkT2lkKTtcbiAgICAgIGNvbnN0IHRpdGxlID0gc3RyaW5nT3JVbmRlZmluZWQobm9kZS5jb21taXQ/Lm1lc3NhZ2VIZWFkbGluZSk7XG4gICAgICByZXR1cm4gZGF0ZSAmJiBoYXNoICYmIHRpdGxlID8gW3sgZGF0ZSwgaGFzaCwgdGl0bGUgfV0gOiBbXTtcbiAgICB9KVxuICAgIC50b1JldmVyc2VkKCk7XG59XG5cbmZ1bmN0aW9uIHN1Y2Nlc3NmdWxDaU91dHB1dChsYXRlc3RDb21taXRzOiBMYXRlc3RDb21taXRTdW1tYXJ5W10pOiBzdHJpbmcge1xuICByZXR1cm4gYEFsbCBDSSB3b3JrZmxvd3MgcGFzc2VkLlxuJHtmb3JtYXRMYXRlc3RDb21taXRTZWN0aW9uKGxhdGVzdENvbW1pdHMpfWA7XG59XG5cbmZ1bmN0aW9uIGZvcm1hdExhdGVzdENvbW1pdFNlY3Rpb24obGF0ZXN0Q29tbWl0czogTGF0ZXN0Q29tbWl0U3VtbWFyeVtdKTogc3RyaW5nIHtcbiAgaWYgKGxhdGVzdENvbW1pdHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICdMYXRlc3QgY29tbWl0czogdW5hdmFpbGFibGUuXFxuJztcbiAgfVxuXG4gIHJldHVybiB5YW1sRHVtcCh7IGxhdGVzdENvbW1pdHMgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbXBhY3RXb3JrZmxvd1Jlc3VsdChcbiAgd29ya2Zsb3dLZXk6IHN0cmluZyxcbiAgcmVzdWx0OiBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHRcbik6IFByb21pc2U8eyBjbGFzc2lmaWNhdGlvbjogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbiB9ICYgQ29tcGFjdFdvcmtmbG93UnVuPiB7XG4gIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsocmVzdWx0LmNoZWNrKTtcbiAgY29uc3QgcnVuID0gKGF3YWl0IHdvcmtmbG93UnVuKHJ1bklkKSkgYXMgV29ya2Zsb3dSdW5EZXRhaWxzIHwgdW5kZWZpbmVkO1xuICBjb25zdCBmYWlsZWRKb2IgPSBmYWlsZWRXb3JrZmxvd1J1bkpvYihydW4sIHN0cmluZ09yVW5kZWZpbmVkKHJlc3VsdC5jaGVjay5uYW1lKSk7XG4gIHJldHVybiB7XG4gICAgY2xhc3NpZmljYXRpb246IHJlc3VsdC5jbGFzc2lmaWNhdGlvbixcbiAgICB3b3JrZmxvdzogd29ya2Zsb3dLZXksXG4gICAgam9iOiBzdHJpbmdPclVuZGVmaW5lZChyZXN1bHQuY2hlY2submFtZSksXG4gICAgam9iX3VybDogc3RyaW5nT3JVbmRlZmluZWQoZmFpbGVkSm9iPy51cmwpLFxuICAgIGZhaWxlZF9zdGVwOiBmYWlsZWRXb3JrZmxvd1J1blN0ZXBOYW1lKGZhaWxlZEpvYiksXG4gICAgcnVuX2lkOiBydW5JZCxcbiAgICBydW5fdXJsOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LnVybCkgPz8gc3RyaW5nT3JVbmRlZmluZWQocmVzdWx0LmNoZWNrLmxpbmspLFxuICAgIGJyYW5jaDogc3RyaW5nT3JVbmRlZmluZWQocnVuPy5oZWFkQnJhbmNoKSxcbiAgICBzaGE6IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8uaGVhZFNoYSksXG4gICAgY29uY2x1c2lvbjogc3RyaW5nT3JVbmRlZmluZWQocnVuPy5jb25jbHVzaW9uKSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmFpbGVkV29ya2Zsb3dMb2coY2hlY2s6IENoZWNrKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjayk7XG4gIGlmICghcnVuSWQpIHtcbiAgICByZXR1cm4gJ0ZhaWxlZCBsYXRlc3QgcmVzdWx0IGhhcyBubyBHaXRIdWIgQWN0aW9ucyBydW4gbGluay4nO1xuICB9XG4gIHJldHVybiBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncnVuJywgJ3ZpZXcnLCBydW5JZCwgJy0tbG9nLWZhaWxlZCddLCBbMV0pO1xufVxuXG5mdW5jdGlvbiBidWlsZEZhaWxlZFdvcmtmbG93RGV0YWlscyhsb2c6IHN0cmluZyk6IHtcbiAgZmFpbGVkX2xvZzogc3RyaW5nO1xufSB7XG4gIHJldHVybiB7XG4gICAgZmFpbGVkX2xvZzogcmVmaW5lRmFpbGVkV29ya2Zsb3dMb2cobG9nKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVmaW5lRmFpbGVkV29ya2Zsb3dMb2cobG9nOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzYW5pdGl6ZWRJbnB1dCA9IHNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2coc3RyaXBWVENvbnRyb2xDaGFyYWN0ZXJzKGxvZykpO1xuICBpZiAoIXJ0a0F2YWlsYWJsZSkge1xuICAgIHJldHVybiBzYW5pdGl6ZWRJbnB1dDtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHNwYXduU3luY1NhZmUoWydydGsnLCAnbG9nJ10sIHNhbml0aXplZElucHV0KTtcbiAgcmV0dXJuIHJlc3VsdC5leGl0Q29kZSA9PT0gMCAmJiByZXN1bHQub3V0cHV0LnRyaW0oKS5sZW5ndGggPiAwXG4gICAgPyBzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nKHJlc3VsdC5vdXRwdXQpXG4gICAgOiBzYW5pdGl6ZWRJbnB1dDtcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyhsb2c6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBsb2dcbiAgICAuc3BsaXQoJ1xcbicpXG4gICAgLm1hcCgobGluZSkgPT4gbGluZS5yZXBsYWNlKEZBSUxFRF9MT0dfTElORV9QUkVGSVhfUEFUVEVSTiwgJycpKVxuICAgIC5qb2luKCdcXG4nKVxuICAgIC50cmltKCk7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ09yVW5kZWZpbmVkKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gMCA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBmYWlsZWRXb3JrZmxvd1J1bkpvYihcbiAgcnVuOiBXb3JrZmxvd1J1bkRldGFpbHMgfCB1bmRlZmluZWQsXG4gIGpvYk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogV29ya2Zsb3dSdW5Kb2IgfCB1bmRlZmluZWQge1xuICBpZiAoIXJ1bj8uam9icyB8fCBydW4uam9icy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBydW4uam9icy5maW5kKChqb2IpID0+IGpvYi5uYW1lID09PSBqb2JOYW1lKSA/P1xuICAgIHJ1bi5qb2JzLmZpbmQoKGpvYikgPT4gam9iLmNvbmNsdXNpb24gPT09ICdmYWlsdXJlJykgPz9cbiAgICBydW4uam9icy5maW5kKChqb2IpID0+IGpvYi5zdGF0dXMgIT09ICdjb21wbGV0ZWQnKVxuICApO1xufVxuXG5mdW5jdGlvbiBmYWlsZWRXb3JrZmxvd1J1blN0ZXBOYW1lKGpvYjogV29ya2Zsb3dSdW5Kb2IgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWpvYj8uc3RlcHMgfHwgam9iLnN0ZXBzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGpvYi5zdGVwcy5maW5kKChzdGVwKSA9PiBzdGVwLmNvbmNsdXNpb24gPT09ICdmYWlsdXJlJyk/Lm5hbWUgPz9cbiAgICBqb2Iuc3RlcHMuZmluZCgoc3RlcCkgPT4gc3RlcC5zdGF0dXMgIT09ICdjb21wbGV0ZWQnKT8ubmFtZVxuICApO1xufVxuIiwiaW1wb3J0IHsgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50QmFzZUJyYW5jaCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gKGF3YWl0IGN1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2goKSkgPz8gKGF3YWl0IGN1cnJlbnREZWZhdWx0QnJhbmNoKCkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudERlZmF1bHRCcmFuY2goKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZGVmYXVsdEJyYW5jaCA9IGF3YWl0IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoW1xuICAgICdnaCcsXG4gICAgJ3JlcG8nLFxuICAgICd2aWV3JyxcbiAgICAnLS1qc29uJyxcbiAgICAnZGVmYXVsdEJyYW5jaFJlZicsXG4gICAgJy0tdGVtcGxhdGUnLFxuICAgICd7ey5kZWZhdWx0QnJhbmNoUmVmLm5hbWV9fScsXG4gIF0pO1xuICByZXR1cm4gcmVxdWlyZU5vbkVtcHR5KGRlZmF1bHRCcmFuY2gudHJpbSgpLCAnRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgYnJhbmNoJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2goKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBiYXNlQnJhbmNoT3V0cHV0ID0gYXdhaXQgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyhbXG4gICAgICAnZ2gnLFxuICAgICAgJ3ByJyxcbiAgICAgICd2aWV3JyxcbiAgICAgICctLWpzb24nLFxuICAgICAgJ2Jhc2VSZWZOYW1lJyxcbiAgICAgICctLXRlbXBsYXRlJyxcbiAgICAgICd7ey5iYXNlUmVmTmFtZX19JyxcbiAgICBdKTtcbiAgICBjb25zdCBiYXNlQnJhbmNoID0gYmFzZUJyYW5jaE91dHB1dC50cmltKCk7XG4gICAgcmV0dXJuIGJhc2VCcmFuY2gubGVuZ3RoID4gMCA/IGJhc2VCcmFuY2ggOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyhlcnJvcikpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0N1cnJlbnRQdWxsUmVxdWVzdE1pc3NpbmcoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIC9ubyBwdWxsIHJlcXVlc3RzPyBmb3VuZCBmb3IgYnJhbmNoL2kudGVzdChTdHJpbmcoZXJyb3IpKTtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZU5vbkVtcHR5KHZhbHVlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbiIsImltcG9ydCB7IGlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyB9IGZyb20gJy4uL3JlcG8vZGVmYXVsdEJyYW5jaC5qcyc7XG5pbXBvcnQge1xuICBjdXJyZW50UHJOdW1iZXIsXG4gIGN1cnJlbnRSZXBvUGFydHMsXG4gIGV4aXRXaXRoRXJyb3IsXG4gIGdoQWxsb3dFeGl0Q29kZXMsXG4gIGdyYXBocWwsXG4gIHR5cGUgSnNvbk9iamVjdCxcbiAgdHlwZSBNZXNzYWdlLFxuICB0eXBlIE1lc3NhZ2VDb25uZWN0aW9uLFxuICB0eXBlIE1ldGFkYXRhTm9kZSxcbiAgcHJvZ3Jlc3MsXG4gIHlhbWxEdW1wLFxufSBmcm9tICcuL3NoYXJlZC5qcyc7XG5cbmludGVyZmFjZSBJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbDtcbn1cblxuaW50ZXJmYWNlIFByUmV2aWV3Tm9kZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGJvZHk/OiBzdHJpbmcgfCBudWxsO1xuICBzdGF0ZT86IHN0cmluZyB8IG51bGw7XG4gIHN1Ym1pdHRlZEF0Pzogc3RyaW5nIHwgbnVsbDtcbiAgdXJsOiBzdHJpbmc7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xufVxuXG5pbnRlcmZhY2UgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlIGV4dGVuZHMgSnNvbk9iamVjdCB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIHB1bGxSZXF1ZXN0Pzoge1xuICAgICAgICBjb21tZW50cz86IE1lc3NhZ2VDb25uZWN0aW9uPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlPjtcbiAgICAgICAgcmV2aWV3cz86IE1lc3NhZ2VDb25uZWN0aW9uPFByUmV2aWV3Tm9kZT47XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59XG5cbmludGVyZmFjZSBJc3N1ZU1lc3NhZ2VzUmVzcG9uc2UgZXh0ZW5kcyBKc29uT2JqZWN0IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgaXNzdWU/OiB7XG4gICAgICAgIGNvbW1lbnRzPzogTWVzc2FnZUNvbm5lY3Rpb248SXNzdWVNZXNzYWdlQ29tbWVudE5vZGU+O1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufVxuXG5pbnRlcmZhY2UgUHVsbFJlcXVlc3RNZXRhZGF0YVJlc3BvbnNlIGV4dGVuZHMgSnNvbk9iamVjdCB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIHB1bGxSZXF1ZXN0PzogTWV0YWRhdGFOb2RlO1xuICAgIH07XG4gIH07XG59XG5cbmludGVyZmFjZSBJc3N1ZU1ldGFkYXRhUmVzcG9uc2UgZXh0ZW5kcyBKc29uT2JqZWN0IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgaXNzdWU/OiBNZXRhZGF0YU5vZGU7XG4gICAgfTtcbiAgfTtcbn1cblxuY29uc3QgSVNTVUVfTUVTU0FHRVNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIGlzc3VlKG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBJU1NVRV9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISkge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIGlzc3VlKG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBudW1iZXJcbiAgICAgICAgdGl0bGVcbiAgICAgICAgdXJsXG4gICAgICAgIGJvZHlcbiAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUFJfQ09NTUVOVFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBQUl9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISkge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBudW1iZXJcbiAgICAgICAgdGl0bGVcbiAgICAgICAgdXJsXG4gICAgICAgIGJvZHlcbiAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUFJfUkVWSUVXU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIHJldmlld3MoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgIHN1Ym1pdHRlZEF0XG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUlzc3VlTnVtYmVyKHJlZmVyZW5jZTogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIocmVmZXJlbmNlLCAnaXNzdWUnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVByTnVtYmVyKHJlZmVyZW5jZTogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIocmVmZXJlbmNlLCAncHVsbCByZXF1ZXN0Jyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaElzc3VlTWVzc2FnZXMoaXNzdWVOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IGlzc3VlID0gYXdhaXQgaXNzdWVNZXNzYWdlcyhvd25lciwgbmFtZSwgbm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVOdW1iZXIpKTtcbiAgcHJvZ3Jlc3MoYEZldGNoZWQgaXNzdWUgIyR7aXNzdWUubnVtYmVyfSBtZXNzYWdlcy5gKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgaXNzdWUgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFByTWVzc2FnZXMocHJOdW1iZXI/OiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNvbHZlZFByTnVtYmVyID0gcHJOdW1iZXIgPT09IHVuZGVmaW5lZCA/IGF3YWl0IGN1cnJlbnRQck51bWJlcigpIDogbm9ybWFsaXplUHJOdW1iZXIocHJOdW1iZXIpO1xuICBjb25zdCBwdWxsUmVxdWVzdCA9IGF3YWl0IGN1cnJlbnRSZXBvUHVsbFJlcXVlc3RNZXNzYWdlcyhyZXNvbHZlZFByTnVtYmVyKTtcbiAgcHJvZ3Jlc3MoYEZldGNoZWQgcHVsbCByZXF1ZXN0ICMke3B1bGxSZXF1ZXN0Lm51bWJlcn0gbWVzc2FnZXMuYCk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHB1bGxfcmVxdWVzdDogcHVsbFJlcXVlc3QgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUoKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgcHJOdW1iZXJPdXRwdXQgPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncHInLCAndmlldycsICctLWpzb24nLCAnbnVtYmVyJywgJy0tanEnLCAnLm51bWJlciddLCBbMV0pO1xuICBjb25zdCBwck51bWJlciA9IHByTnVtYmVyT3V0cHV0LnRyaW0oKTtcbiAgaWYgKGlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyhwck51bWJlck91dHB1dCkgfHwgIS9eXFxkKyQvLnRlc3QocHJOdW1iZXIpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzKHByTnVtYmVyKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgcHVsbF9yZXF1ZXN0OiBwdWxsUmVxdWVzdCB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzKHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgcmV0dXJuIGF3YWl0IHByTWVzc2FnZXMob3duZXIsIG5hbWUsIHByTnVtYmVyKTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlcihyZWZlcmVuY2U6IHN0cmluZyB8IG51bWJlciwgbGFiZWw6ICdpc3N1ZScgfCAncHVsbCByZXF1ZXN0Jyk6IHN0cmluZyB7XG4gIGNvbnN0IHJlZmVyZW5jZVRleHQgPSBTdHJpbmcocmVmZXJlbmNlKS50cmltKCk7XG4gIGlmIChyZWZlcmVuY2VUZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiAke2xhYmVsfSByZWZlcmVuY2UgaXMgcmVxdWlyZWRgLCAyKTtcbiAgfVxuXG4gIGlmICgvXlxcZCskLy50ZXN0KHJlZmVyZW5jZVRleHQpKSB7XG4gICAgcmV0dXJuIHJlZmVyZW5jZVRleHQ7XG4gIH1cblxuICBjb25zdCBraW5kU2VnbWVudCA9IGxhYmVsID09PSAnaXNzdWUnID8gJ2lzc3VlcycgOiAncHVsbCc7XG4gIGNvbnN0IG1hdGNoID0gcmVmZXJlbmNlVGV4dC5tYXRjaChcbiAgICBuZXcgUmVnRXhwKGBeaHR0cHM/Oi8vKD86d3d3XFxcXC4pP2dpdGh1YlxcXFwuY29tL1teL10rL1teL10rLyR7a2luZFNlZ21lbnR9LyhcXFxcZCspKD86L3wkKWApXG4gICk7XG4gIGlmIChtYXRjaD8uWzFdKSB7XG4gICAgcmV0dXJuIG1hdGNoWzFdO1xuICB9XG5cbiAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IGV4cGVjdGVkIGEgR2l0SHViICR7bGFiZWx9IG51bWJlciBvciBVUkwsIHJlY2VpdmVkIFwiJHtyZWZlcmVuY2VUZXh0fVwiYCwgMik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGlzc3VlTWVzc2FnZXMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBpc3N1ZU51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IGlzc3VlID0gYXdhaXQgZmV0Y2hNZXRhZGF0YTxJc3N1ZU1ldGFkYXRhUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogSVNTVUVfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IGlzc3VlTnVtYmVyLFxuICAgIG5vdW46ICdpc3N1ZScsXG4gICAgc2VsZWN0TWV0YWRhdGE6IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8uaXNzdWUsXG4gIH0pO1xuICBjb25zdCBtZXNzYWdlcyA9IGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8SXNzdWVNZXNzYWdlQ29tbWVudE5vZGUsIElzc3VlTWVzc2FnZXNSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBJU1NVRV9NRVNTQUdFU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogaXNzdWVOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5pc3N1ZT8uY29tbWVudHMsXG4gICAgbWFwTm9kZTogY29tbWVudE1lc3NhZ2UsXG4gIH0pO1xuXG4gIHJldHVybiB7IC4uLmlzc3VlLCBtZXNzYWdlcyB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBwck1lc3NhZ2VzKG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBwdWxsUmVxdWVzdCA9IGF3YWl0IGZldGNoTWV0YWRhdGE8UHVsbFJlcXVlc3RNZXRhZGF0YVJlc3BvbnNlPih7XG4gICAgcXVlcnk6IFBSX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBwck51bWJlcixcbiAgICBub3VuOiAncHVsbCByZXF1ZXN0JyxcbiAgICBzZWxlY3RNZXRhZGF0YTogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdCxcbiAgfSk7XG4gIGNvbnN0IFtpc3N1ZUNvbW1lbnRzLCByZXZpZXdzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBwcklzc3VlQ29tbWVudHMob3duZXIsIG5hbWUsIHByTnVtYmVyKSxcbiAgICBwclJldmlld3Mob3duZXIsIG5hbWUsIHByTnVtYmVyKSxcbiAgXSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5wdWxsUmVxdWVzdCxcbiAgICBtZXNzYWdlczogWy4uLmlzc3VlQ29tbWVudHMsIC4uLnJldmlld3NdLnRvU29ydGVkKGNvbXBhcmVNZXNzYWdlc0J5Q3JlYXRlZEF0KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZU1lc3NhZ2VzQnlDcmVhdGVkQXQobGVmdDogTWVzc2FnZSwgcmlnaHQ6IE1lc3NhZ2UpOiBudW1iZXIge1xuICBjb25zdCBsZWZ0Q3JlYXRlZEF0ID0gdHlwZW9mIGxlZnQuY3JlYXRlZEF0ID09PSAnc3RyaW5nJyA/IGxlZnQuY3JlYXRlZEF0IDogJyc7XG4gIGNvbnN0IHJpZ2h0Q3JlYXRlZEF0ID0gdHlwZW9mIHJpZ2h0LmNyZWF0ZWRBdCA9PT0gJ3N0cmluZycgPyByaWdodC5jcmVhdGVkQXQgOiAnJztcbiAgcmV0dXJuIGxlZnRDcmVhdGVkQXQubG9jYWxlQ29tcGFyZShyaWdodENyZWF0ZWRBdCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBySXNzdWVDb21tZW50cyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICByZXR1cm4gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSwgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IFBSX0NPTU1FTlRTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBwck51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0Py5jb21tZW50cyxcbiAgICBtYXBOb2RlOiBjb21tZW50TWVzc2FnZSxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByUmV2aWV3cyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICByZXR1cm4gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxQclJldmlld05vZGUsIFB1bGxSZXF1ZXN0TWVzc2FnZXNSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBQUl9SRVZJRVdTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBwck51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0Py5yZXZpZXdzLFxuICAgIG1hcE5vZGU6IHJldmlld01lc3NhZ2UsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYWdpbmF0ZU1lc3NhZ2VzPFROb2RlLCBUUmVzcG9uc2UgZXh0ZW5kcyBKc29uT2JqZWN0Pihjb25maWc6IHtcbiAgcXVlcnk6IHN0cmluZztcbiAgb3duZXI6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBudW1iZXI6IHN0cmluZyB8IG51bWJlcjtcbiAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlOiBUUmVzcG9uc2UpID0+IE1lc3NhZ2VDb25uZWN0aW9uPFROb2RlPiB8IHVuZGVmaW5lZDtcbiAgbWFwTm9kZTogKG5vZGU6IFROb2RlKSA9PiBNZXNzYWdlO1xufSk6IFByb21pc2U8TWVzc2FnZVtdPiB7XG4gIGxldCBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgY29uc3QgbWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXG4gIGZvciAoOzspIHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gY29uZmlnLnNlbGVjdENvbm5lY3Rpb24oXG4gICAgICBhd2FpdCBncmFwaHFsPFRSZXNwb25zZT4oY29uZmlnLnF1ZXJ5LCB7XG4gICAgICAgIG93bmVyOiBjb25maWcub3duZXIsXG4gICAgICAgIG5hbWU6IGNvbmZpZy5uYW1lLFxuICAgICAgICBudW1iZXI6IE51bWJlcihjb25maWcubnVtYmVyKSxcbiAgICAgICAgY3Vyc29yLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgaWYgKCFjb25uZWN0aW9uKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZXM7XG4gICAgfVxuXG4gICAgbWVzc2FnZXMucHVzaCguLi5jb25uZWN0aW9uLm5vZGVzLm1hcChjb25maWcubWFwTm9kZSkuZmlsdGVyKGhhc01lc3NhZ2VCb2R5KSk7XG5cbiAgICBpZiAoIWNvbm5lY3Rpb24ucGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIHJldHVybiBtZXNzYWdlcztcbiAgICB9XG4gICAgY3Vyc29yID0gY29ubmVjdGlvbi5wYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoTWV0YWRhdGE8VFJlc3BvbnNlIGV4dGVuZHMgSnNvbk9iamVjdD4oY29uZmlnOiB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIG93bmVyOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVtYmVyOiBzdHJpbmcgfCBudW1iZXI7XG4gIG5vdW46IHN0cmluZztcbiAgc2VsZWN0TWV0YWRhdGE6IChyZXNwb25zZTogVFJlc3BvbnNlKSA9PiBNZXRhZGF0YU5vZGUgfCB1bmRlZmluZWQ7XG59KTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gY29uZmlnLnNlbGVjdE1ldGFkYXRhKFxuICAgIGF3YWl0IGdyYXBocWw8VFJlc3BvbnNlPihjb25maWcucXVlcnksIHtcbiAgICAgIG93bmVyOiBjb25maWcub3duZXIsXG4gICAgICBuYW1lOiBjb25maWcubmFtZSxcbiAgICAgIG51bWJlcjogTnVtYmVyKGNvbmZpZy5udW1iZXIpLFxuICAgIH0pXG4gICk7XG5cbiAgaWYgKCFtZXRhZGF0YSkge1xuICAgIGV4aXRXaXRoRXJyb3IoYENvdWxkIG5vdCBmaW5kICR7Y29uZmlnLm5vdW59ICMke2NvbmZpZy5udW1iZXJ9IGluICR7Y29uZmlnLm93bmVyfS8ke2NvbmZpZy5uYW1lfS5gKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbnVtYmVyOiBtZXRhZGF0YS5udW1iZXIsXG4gICAgdGl0bGU6IG1ldGFkYXRhLnRpdGxlLFxuICAgIHVybDogbWV0YWRhdGEudXJsLFxuICAgIGF1dGhvcjogbWV0YWRhdGEuYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQsXG4gICAgYm9keTogbWV0YWRhdGEuYm9keSA/PyAnJyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tbWVudE1lc3NhZ2UoY29tbWVudDogSXNzdWVNZXNzYWdlQ29tbWVudE5vZGUpOiBNZXNzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnY29tbWVudCcsXG4gICAgYXV0aG9yOiBjb21tZW50LmF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkLFxuICAgIGNyZWF0ZWRBdDogY29tbWVudC5jcmVhdGVkQXQsXG4gICAgdXJsOiBjb21tZW50LnVybCxcbiAgICBib2R5OiBjb21tZW50LmJvZHksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJldmlld01lc3NhZ2UocmV2aWV3OiBQclJldmlld05vZGUpOiBNZXNzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAncmV2aWV3JyxcbiAgICBhdXRob3I6IHJldmlldy5hdXRob3I/LmxvZ2luID8/IHVuZGVmaW5lZCxcbiAgICBzdGF0ZTogcmV2aWV3LnN0YXRlID8/IHVuZGVmaW5lZCxcbiAgICBjcmVhdGVkQXQ6IHJldmlldy5zdWJtaXR0ZWRBdCA/PyB1bmRlZmluZWQsXG4gICAgdXJsOiByZXZpZXcudXJsLFxuICAgIGJvZHk6IHJldmlldy5ib2R5ID8/ICcnLFxuICB9O1xufVxuXG5mdW5jdGlvbiBoYXNNZXNzYWdlQm9keShtZXNzYWdlOiBNZXNzYWdlKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgbWVzc2FnZS5ib2R5ID09PSAnc3RyaW5nJyAmJiBtZXNzYWdlLmJvZHkubGVuZ3RoID4gMDtcbn1cbiIsImltcG9ydCB7IGN1cnJlbnRQck51bWJlciwgZXhpdFdpdGhFcnJvciwgZ2gsIHByb2dyZXNzLCBydW5Db21tYW5kLCB5YW1sRHVtcCB9IGZyb20gJy4vc2hhcmVkLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBPcGVuUHJPcHRpb25zIHtcbiAgYm9keT86IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVXBkYXRlUHJPcHRpb25zIHtcbiAgYm9keTogc3RyaW5nO1xuICB0aXRsZTogc3RyaW5nO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblByKHsgYm9keSwgdGl0bGUgfTogT3BlblByT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaGVhZE91dHB1dCA9IGF3YWl0IHJ1bkNvbW1hbmQoWydnaXQnLCAnYnJhbmNoJywgJy0tc2hvdy1jdXJyZW50J10pO1xuICBjb25zdCBoZWFkID0gaGVhZE91dHB1dC50cmltKCk7XG4gIGNvbnN0IGJhc2VPdXRwdXQgPSBhd2FpdCBnaChbJ3JlcG8nLCAndmlldycsICctLWpzb24nLCAnZGVmYXVsdEJyYW5jaFJlZicsICctLWpxJywgJy5kZWZhdWx0QnJhbmNoUmVmLm5hbWUnXSk7XG4gIGNvbnN0IGJhc2UgPSBiYXNlT3V0cHV0LnRyaW0oKTtcblxuICBpZiAoIWhlYWQpIHtcbiAgICBleGl0V2l0aEVycm9yKCdFcnJvcjogY291bGQgbm90IGRldGVybWluZSBjdXJyZW50IGJyYW5jaCcpO1xuICB9XG4gIGlmICghYmFzZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGRlZmF1bHQgYnJhbmNoJyk7XG4gIH1cbiAgaWYgKGhlYWQgPT09IGJhc2UpIHtcbiAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogY3VycmVudCBicmFuY2ggaXMgdGhlIGRlZmF1bHQgYnJhbmNoICgke2Jhc2V9KWApO1xuICB9XG5cbiAgY29uc3QgY3JlYXRlQXJncyA9IFsncHInLCAnY3JlYXRlJywgJy0tYmFzZScsIGJhc2UsICctLWhlYWQnLCBoZWFkLCAnLS1maWxsJ107XG4gIGlmICh0aXRsZSkge1xuICAgIGNyZWF0ZUFyZ3MucHVzaCgnLS10aXRsZScsIHRpdGxlKTtcbiAgfVxuICBpZiAoYm9keSkge1xuICAgIGNyZWF0ZUFyZ3MucHVzaCgnLS1ib2R5LWZpbGUnLCAnLScpO1xuICB9XG5cbiAgcHJvZ3Jlc3MoJ0NyZWF0aW5nIHB1bGwgcmVxdWVzdC4uLicpO1xuICBhd2FpdCBnaChjcmVhdGVBcmdzLCBib2R5KTtcblxuICByZXR1cm4geWFtbER1bXAoXG4gICAgSlNPTi5wYXJzZShhd2FpdCBnaChbJ3ByJywgJ3ZpZXcnLCAnLS1qc29uJywgJ2lkLG51bWJlcix0aXRsZSx1cmwsc3RhdGUsaXNEcmFmdCxiYXNlUmVmTmFtZSxoZWFkUmVmTmFtZSxhdXRob3InXSkpXG4gICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVQcih7IGJvZHksIHRpdGxlIH06IFVwZGF0ZVByT3B0aW9ucyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoYFVwZGF0aW5nIHB1bGwgcmVxdWVzdCAjJHtwck51bWJlcn0uLi5gKTtcbiAgcmV0dXJuIGF3YWl0IGVkaXRQcihwck51bWJlciwgWyctLXRpdGxlJywgdGl0bGUsICctLWJvZHktZmlsZScsICctJ10sIGJvZHkpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBlZGl0UHIocHJOdW1iZXI6IHN0cmluZywgZWRpdEFyZ3M6IHN0cmluZ1tdLCBzdGRpbkRhdGE/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBhd2FpdCBnaChbJ3ByJywgJ2VkaXQnLCBwck51bWJlciwgLi4uZWRpdEFyZ3NdLCBzdGRpbkRhdGEpO1xuXG4gIHJldHVybiB5YW1sRHVtcChcbiAgICBKU09OLnBhcnNlKFxuICAgICAgYXdhaXQgZ2goW1xuICAgICAgICAncHInLFxuICAgICAgICAndmlldycsXG4gICAgICAgIHByTnVtYmVyLFxuICAgICAgICAnLS1qc29uJyxcbiAgICAgICAgJ2lkLG51bWJlcix0aXRsZSx1cmwsc3RhdGUsaXNEcmFmdCxiYXNlUmVmTmFtZSxoZWFkUmVmTmFtZSxhdXRob3IsYm9keScsXG4gICAgICBdKVxuICAgIClcbiAgKTtcbn1cbiIsImltcG9ydCB7XG4gIGN1cnJlbnRQck51bWJlcixcbiAgY3VycmVudFJlcG9QYXJ0cyxcbiAgZXhpdFdpdGhFcnJvcixcbiAgZ3JhcGhxbCxcbiAgcHJvZ3Jlc3MsXG4gIHJlYWRSZXF1aXJlZFN0ZGluVGV4dCxcbiAgeWFtbER1bXAsXG59IGZyb20gJy4vc2hhcmVkLmpzJztcblxuY29uc3QgUkVWSUVXX1NOSVBQRVRfQ09OVEVYVF9MSU5FUyA9IDI7XG5cbmludGVyZmFjZSBDb21taXRSZWYge1xuICBvaWQ6IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIFJldmlld0NvbW1lbnROb2RlIHtcbiAgaWQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIGxpbmU/OiBudW1iZXIgfCBudWxsO1xuICBvcmlnaW5hbExpbmU/OiBudW1iZXIgfCBudWxsO1xuICBzdGFydExpbmU/OiBudW1iZXIgfCBudWxsO1xuICBvcmlnaW5hbFN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIGNvbW1pdD86IENvbW1pdFJlZiB8IG51bGw7XG4gIG9yaWdpbmFsQ29tbWl0PzogQ29tbWl0UmVmIHwgbnVsbDtcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IHN0cmluZyB8IG51bGw7XG59XG5cbmludGVyZmFjZSBSZXZpZXdUaHJlYWROb2RlIHtcbiAgaWQ6IHN0cmluZztcbiAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgaXNPdXRkYXRlZD86IGJvb2xlYW4gfCBudWxsO1xuICBwYXRoPzogc3RyaW5nIHwgbnVsbDtcbiAgbGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsTGluZT86IG51bWJlciB8IG51bGw7XG4gIHN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsU3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgY29tbWVudHM6IHtcbiAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICBwYWdlSW5mbzoge1xuICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgIH07XG4gIH07XG59XG5cbmNvbnN0IFJFVklFV19USFJFQURfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdUaHJlYWRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICAgIGlzT3V0ZGF0ZWRcbiAgICAgICAgICAgIHBhdGhcbiAgICAgICAgICAgIGxpbmVcbiAgICAgICAgICAgIG9yaWdpbmFsTGluZVxuICAgICAgICAgICAgc3RhcnRMaW5lXG4gICAgICAgICAgICBvcmlnaW5hbFN0YXJ0TGluZVxuICAgICAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCkge1xuICAgICAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgICAgICBib2R5XG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICAgICAgbGluZVxuICAgICAgICAgICAgICAgIG9yaWdpbmFsTGluZVxuICAgICAgICAgICAgICAgIHN0YXJ0TGluZVxuICAgICAgICAgICAgICAgIG9yaWdpbmFsU3RhcnRMaW5lXG4gICAgICAgICAgICAgICAgY29tbWl0IHsgb2lkIH1cbiAgICAgICAgICAgICAgICBvcmlnaW5hbENvbW1pdCB7IG9pZCB9XG4gICAgICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFJFVklFV19DT01NRU5UX1FVRVJZID0gYFxuICBxdWVyeSgkdGhyZWFkSWQ6IElEISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgbm9kZShpZDogJHRocmVhZElkKSB7XG4gICAgICAuLi4gb24gUHVsbFJlcXVlc3RSZXZpZXdUaHJlYWQge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgbGluZVxuICAgICAgICAgICAgb3JpZ2luYWxMaW5lXG4gICAgICAgICAgICBzdGFydExpbmVcbiAgICAgICAgICAgIG9yaWdpbmFsU3RhcnRMaW5lXG4gICAgICAgICAgICBjb21taXQgeyBvaWQgfVxuICAgICAgICAgICAgb3JpZ2luYWxDb21taXQgeyBvaWQgfVxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBGSUxFX1RFWFRfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRleHByZXNzaW9uOiBTdHJpbmchKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgb2JqZWN0KGV4cHJlc3Npb246ICRleHByZXNzaW9uKSB7XG4gICAgICAgIC4uLiBvbiBCbG9iIHtcbiAgICAgICAgICBpc0JpbmFyeVxuICAgICAgICAgIHRleHRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdUaHJlYWRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgnRXJyb3I6IEpTT04gaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nKTtcbiAgY29uc3QgcGF5bG9hZCA9IHBhcnNlUmVwbHlJbnB1dChpbnB1dCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRSZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgW3RocmVhZElkLCBib2R5XSBvZiBPYmplY3QuZW50cmllcyhwYXlsb2FkLnJlcGxpZXMpKSB7XG4gICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgIG5vcm1hbGl6ZWRSZXBsaWVzW3RocmVhZElkXSA9IGJvZHk7XG4gICAgfVxuICB9XG4gIHJldHVybiBub3JtYWxpemVkUmVwbGllcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhcbiAgcXVlcnk6IHN0cmluZyxcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyLFxuICBvblRocmVhZDogKHRocmVhZDogUmV2aWV3VGhyZWFkTm9kZSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD5cbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ3JhcGhxbDx7XG4gICAgICBkYXRhPzoge1xuICAgICAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgICAgIHB1bGxSZXF1ZXN0Pzoge1xuICAgICAgICAgICAgcmV2aWV3VGhyZWFkcz86IHtcbiAgICAgICAgICAgICAgbm9kZXM6IFJldmlld1RocmVhZE5vZGVbXTtcbiAgICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9PihxdWVyeSwge1xuICAgICAgb3duZXIsXG4gICAgICBuYW1lLFxuICAgICAgbnVtYmVyOiBOdW1iZXIocHJOdW1iZXIpLFxuICAgICAgY3Vyc29yLFxuICAgIH0pO1xuICAgIGNvbnN0IHJldmlld1RocmVhZHMgPSByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8ucmV2aWV3VGhyZWFkcztcblxuICAgIGlmICghcmV2aWV3VGhyZWFkcykge1xuICAgICAgZXhpdFdpdGhFcnJvcihcbiAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIHJldmlld1RocmVhZHMgaW4gR3JhcGhRTCByZXNwb25zZS4gVGhlIHB1bGwgcmVxdWVzdCBtYXkgbm90IGV4aXN0IG9yIHRoZXJlIHdhcyBhbiBBUEkgZXJyb3IuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRocmVhZCBvZiByZXZpZXdUaHJlYWRzLm5vZGVzKSB7XG4gICAgICBhd2FpdCBvblRocmVhZCh0aHJlYWQpO1xuICAgIH1cblxuICAgIGlmICghcmV2aWV3VGhyZWFkcy5wYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdXJzb3IgPSByZXZpZXdUaHJlYWRzLnBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBpZHM6IHN0cmluZ1tdID0gW107XG4gIGF3YWl0IHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhSRVZJRVdfVEhSRUFEX0lEU19RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCAodGhyZWFkKSA9PiB7XG4gICAgaWYgKCF0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgaWRzLnB1c2godGhyZWFkLmlkKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaWRzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5yZXNvbHZlZFJldmlld1RocmVhZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPiB7XG4gIGNvbnN0IHRocmVhZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gPSBbXTtcbiAgY29uc3QgZmlsZVRleHRDYWNoZSA9IG5ldyBNYXA8c3RyaW5nLCBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4+KCk7XG5cbiAgYXdhaXQgcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFJFVklFV19USFJFQURfUVVFUlksIG93bmVyLCBuYW1lLCBwck51bWJlciwgYXN5bmMgKHRocmVhZCkgPT4ge1xuICAgIGlmICh0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbW1lbnRzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICB0aHJlYWQuY29tbWVudHMubm9kZXMubWFwKChjb21tZW50KSA9PlxuICAgICAgICBub3JtYWxpemVDb21tZW50KGNvbW1lbnQsIHRocmVhZC5wYXRoID8/IHVuZGVmaW5lZCwgdGhyZWFkLmlzT3V0ZGF0ZWQgPz8gZmFsc2UsIG93bmVyLCBuYW1lLCBmaWxlVGV4dENhY2hlKVxuICAgICAgKVxuICAgICk7XG4gICAgbGV0IHBhZ2VJbmZvID0gdGhyZWFkLmNvbW1lbnRzLnBhZ2VJbmZvO1xuICAgIGxldCBjdXJzb3IgPSBwYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuXG4gICAgd2hpbGUgKHBhZ2VJbmZvLmhhc05leHRQYWdlKSB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdyYXBocWw8e1xuICAgICAgICBkYXRhPzoge1xuICAgICAgICAgIG5vZGU/OiB7XG4gICAgICAgICAgICBjb21tZW50cz86IHtcbiAgICAgICAgICAgICAgbm9kZXM6IFJldmlld0NvbW1lbnROb2RlW107XG4gICAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KFJFVklFV19DT01NRU5UX1FVRVJZLCB7IHRocmVhZElkOiB0aHJlYWQuaWQsIGN1cnNvciB9KTtcbiAgICAgIGNvbnN0IGNvbW1lbnRDb25uZWN0aW9uID0gcmVzcG9uc2UuZGF0YT8ubm9kZT8uY29tbWVudHM7XG5cbiAgICAgIGlmICghY29tbWVudENvbm5lY3Rpb24pIHtcbiAgICAgICAgZXhpdFdpdGhFcnJvcihgQ291bGQgbm90IGZpbmQgY29tbWVudHMgaW4gR3JhcGhRTCByZXNwb25zZSBmb3IgdGhyZWFkICR7dGhyZWFkLmlkfS5gKTtcbiAgICAgIH1cblxuICAgICAgY29tbWVudHMucHVzaChcbiAgICAgICAgLi4uKGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICAgIGNvbW1lbnRDb25uZWN0aW9uLm5vZGVzLm1hcCgoY29tbWVudCkgPT5cbiAgICAgICAgICAgIG5vcm1hbGl6ZUNvbW1lbnQoY29tbWVudCwgdGhyZWFkLnBhdGggPz8gdW5kZWZpbmVkLCB0aHJlYWQuaXNPdXRkYXRlZCA/PyBmYWxzZSwgb3duZXIsIG5hbWUsIGZpbGVUZXh0Q2FjaGUpXG4gICAgICAgICAgKVxuICAgICAgICApKVxuICAgICAgKTtcbiAgICAgIHBhZ2VJbmZvID0gY29tbWVudENvbm5lY3Rpb24ucGFnZUluZm87XG4gICAgICBjdXJzb3IgPSBwYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRocmVhZHMucHVzaCh7XG4gICAgICBpZDogdGhyZWFkLmlkLFxuICAgICAgaXNSZXNvbHZlZDogdGhyZWFkLmlzUmVzb2x2ZWQsXG4gICAgICBpc091dGRhdGVkOiB0aHJlYWQuaXNPdXRkYXRlZCxcbiAgICAgIHBhdGg6IHRocmVhZC5wYXRoLFxuICAgICAgbGluZTogdGhyZWFkLmxpbmUsXG4gICAgICBvcmlnaW5hbExpbmU6IHRocmVhZC5vcmlnaW5hbExpbmUsXG4gICAgICBzdGFydExpbmU6IHRocmVhZC5zdGFydExpbmUsXG4gICAgICBvcmlnaW5hbFN0YXJ0TGluZTogdGhyZWFkLm9yaWdpbmFsU3RhcnRMaW5lLFxuICAgICAgY29tbWVudHMsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiB0aHJlYWRzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFByUmV2aWV3VGhyZWFkcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuXG4gIHByb2dyZXNzKCdGZXRjaGluZyB1bnJlc29sdmVkIHJldmlldyB0aHJlYWRzLi4uJyk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHVucmVzb2x2ZWRfdGhyZWFkczogYXdhaXQgdW5yZXNvbHZlZFJldmlld1RocmVhZHMob3duZXIsIG5hbWUsIHByTnVtYmVyKSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQclJldmlld1RocmVhZHMocmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG4gIGNvbnN0IHVucmVzb2x2ZWRJZHMgPSBuZXcgU2V0KGF3YWl0IHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMob3duZXIsIG5hbWUsIHByTnVtYmVyKSk7XG5cbiAgcHJvZ3Jlc3MoYFJlcGx5aW5nIHRvICR7T2JqZWN0LmtleXMocmVwbGllcykubGVuZ3RofSByZXZpZXcgdGhyZWFkcy4uLmApO1xuXG4gIGNvbnN0IHJlc29sdmVkVGhyZWFkSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMocmVwbGllcyk7XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIFt0aHJlYWRJZCwgYm9keV1dIG9mIGVudHJpZXMuZW50cmllcygpKSB7XG4gICAgcHJvZ3Jlc3MoYFByb2Nlc3NpbmcgJHtpbmRleCArIDF9LyR7ZW50cmllcy5sZW5ndGh9OiAke3RocmVhZElkfWApO1xuICAgIGlmICghdW5yZXNvbHZlZElkcy5oYXModGhyZWFkSWQpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdyYXBocWw8e1xuICAgICAgZGF0YT86IHtcbiAgICAgICAgcmVzb2x2ZVJldmlld1RocmVhZD86IHtcbiAgICAgICAgICB0aHJlYWQ/OiB7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9PihcbiAgICAgIGBcbiAgICAgICAgbXV0YXRpb24gKCR0aHJlYWRJZDogSUQhLCAkYm9keTogU3RyaW5nISkge1xuICAgICAgICAgIGFkZFB1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkUmVwbHkoaW5wdXQ6IHsgcHVsbFJlcXVlc3RSZXZpZXdUaHJlYWRJZDogJHRocmVhZElkLCBib2R5OiAkYm9keSB9KSB7XG4gICAgICAgICAgICBjb21tZW50IHtcbiAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc29sdmVSZXZpZXdUaHJlYWQoaW5wdXQ6IHsgdGhyZWFkSWQ6ICR0aHJlYWRJZCB9KSB7XG4gICAgICAgICAgICB0aHJlYWQge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgeyB0aHJlYWRJZCwgYm9keSB9XG4gICAgKTtcblxuICAgIGlmIChyZXNwb25zZS5kYXRhPy5yZXNvbHZlUmV2aWV3VGhyZWFkPy50aHJlYWQ/LmlzUmVzb2x2ZWQpIHtcbiAgICAgIHJlc29sdmVkVGhyZWFkSWRzLnB1c2godGhyZWFkSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9ncmVzcyhgV2FybmluZzogZmFpbGVkIHRvIHJlc29sdmUgdGhyZWFkICR7dGhyZWFkSWR9LmApO1xuICAgIH1cbiAgfVxuXG4gIHByb2dyZXNzKCdEb25lLicpO1xuICByZXR1cm4geWFtbER1bXAoeyByZXNvbHZlZF90aHJlYWRfaWRzOiByZXNvbHZlZFRocmVhZElkcyB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbm9ybWFsaXplQ29tbWVudChcbiAgY29tbWVudDogUmV2aWV3Q29tbWVudE5vZGUsXG4gIHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgaXNUaHJlYWRPdXRkYXRlZDogYm9vbGVhbixcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBmaWxlVGV4dENhY2hlOiBNYXA8c3RyaW5nLCBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4+XG4pOiBQcm9taXNlPHtcbiAgaWQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIGF1dGhvcj86IHN0cmluZztcbiAgc25pcHBldD86IHN0cmluZztcbn0+IHtcbiAgY29uc3QgeyBhdXRob3IgfSA9IGNvbW1lbnQ7XG4gIHJldHVybiB7XG4gICAgaWQ6IGNvbW1lbnQuaWQsXG4gICAgdXJsOiBjb21tZW50LnVybCxcbiAgICBib2R5OiBjb21tZW50LmJvZHksXG4gICAgY3JlYXRlZEF0OiBjb21tZW50LmNyZWF0ZWRBdCxcbiAgICBhdXRob3I6IHR5cGVvZiBhdXRob3IgPT09ICdzdHJpbmcnID8gYXV0aG9yIDogKGF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkKSxcbiAgICBzbmlwcGV0OiBhd2FpdCBidWlsZFJldmlld1NuaXBwZXQoY29tbWVudCwgcGF0aCwgaXNUaHJlYWRPdXRkYXRlZCwgb3duZXIsIG5hbWUsIGZpbGVUZXh0Q2FjaGUpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlcGx5SW5wdXQoaW5wdXQ6IHN0cmluZyk6IHsgcmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfSB7XG4gIGNvbnN0IGVycm9yUHJlZml4ID0gJ0Vycm9yOiBJbnZhbGlkIGlucHV0IGZvcm1hdCBvbiBzdGRpbic7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGlucHV0KSBhcyB1bmtub3duO1xuICAgIGlmICghaXNSZXBseUlucHV0KHBhcnNlZCkpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoYCR7ZXJyb3JQcmVmaXh9OiBleHBlY3RlZCBhbiBvYmplY3Qgd2l0aCBhIHN0cmluZy12YWx1ZWQgXFxgcmVwbGllc1xcYCBtYXBgLCAyKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IEludmFsaWQgSlNPTiBwcm92aWRlZCBvbiBzdGRpbjogJHtlcnJvci5tZXNzYWdlfWAsIDIpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1JlcGx5SW5wdXQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyB7IHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+IH0ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJlcGxpZXMgPSAodmFsdWUgYXMgeyByZXBsaWVzPzogdW5rbm93biB9KS5yZXBsaWVzO1xuICBpZiAodHlwZW9mIHJlcGxpZXMgIT09ICdvYmplY3QnIHx8IHJlcGxpZXMgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShyZXBsaWVzKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QudmFsdWVzKHJlcGxpZXMpLmV2ZXJ5KChyZXBseSkgPT4gcmVwbHkgPT09IG51bGwgfHwgcmVwbHkgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgcmVwbHkgPT09ICdzdHJpbmcnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gYnVpbGRSZXZpZXdTbmlwcGV0KFxuICBjb21tZW50OiBSZXZpZXdDb21tZW50Tm9kZSxcbiAgcGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBpc1RocmVhZE91dGRhdGVkOiBib29sZWFuLFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIGZpbGVUZXh0Q2FjaGU6IE1hcDxzdHJpbmcsIFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPj5cbik6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGlmICghcGF0aCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwcmltYXJ5TG9jYXRpb24gPSBpc1RocmVhZE91dGRhdGVkXG4gICAgPyBvcmlnaW5hbENvbW1lbnRMb2NhdGlvbihjb21tZW50LCBwYXRoKVxuICAgIDogY3VycmVudENvbW1lbnRMb2NhdGlvbihjb21tZW50LCBwYXRoKTtcbiAgY29uc3QgZmFsbGJhY2tMb2NhdGlvbiA9IGlzVGhyZWFkT3V0ZGF0ZWRcbiAgICA/IGN1cnJlbnRDb21tZW50TG9jYXRpb24oY29tbWVudCwgcGF0aClcbiAgICA6IG9yaWdpbmFsQ29tbWVudExvY2F0aW9uKGNvbW1lbnQsIHBhdGgpO1xuICBjb25zdCBsb2NhdGlvbiA9IHByaW1hcnlMb2NhdGlvbiA/PyBmYWxsYmFja0xvY2F0aW9uO1xuXG4gIGlmICghbG9jYXRpb24pIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgZmlsZVRleHQgPSBhd2FpdCBmZXRjaEZpbGVUZXh0QXRFeHByZXNzaW9uKG93bmVyLCBuYW1lLCBsb2NhdGlvbi5leHByZXNzaW9uLCBmaWxlVGV4dENhY2hlKTtcbiAgaWYgKGZpbGVUZXh0ID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIHJlbmRlckxpbmVTbmlwcGV0KGZpbGVUZXh0LCBsb2NhdGlvbi5zdGFydExpbmUsIGxvY2F0aW9uLmVuZExpbmUpO1xufVxuXG5mdW5jdGlvbiBjdXJyZW50Q29tbWVudExvY2F0aW9uKFxuICBjb21tZW50OiBSZXZpZXdDb21tZW50Tm9kZSxcbiAgcGF0aDogc3RyaW5nXG4pOiB7IGV4cHJlc3Npb246IHN0cmluZzsgc3RhcnRMaW5lOiBudW1iZXI7IGVuZExpbmU6IG51bWJlciB9IHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGNvbW1lbnRMb2NhdGlvbihjb21tZW50LmNvbW1pdD8ub2lkLCBwYXRoLCBjb21tZW50LnN0YXJ0TGluZSwgY29tbWVudC5saW5lKTtcbn1cblxuZnVuY3Rpb24gb3JpZ2luYWxDb21tZW50TG9jYXRpb24oXG4gIGNvbW1lbnQ6IFJldmlld0NvbW1lbnROb2RlLFxuICBwYXRoOiBzdHJpbmdcbik6IHsgZXhwcmVzc2lvbjogc3RyaW5nOyBzdGFydExpbmU6IG51bWJlcjsgZW5kTGluZTogbnVtYmVyIH0gfCB1bmRlZmluZWQge1xuICByZXR1cm4gY29tbWVudExvY2F0aW9uKGNvbW1lbnQub3JpZ2luYWxDb21taXQ/Lm9pZCwgcGF0aCwgY29tbWVudC5vcmlnaW5hbFN0YXJ0TGluZSwgY29tbWVudC5vcmlnaW5hbExpbmUpO1xufVxuXG5mdW5jdGlvbiBjb21tZW50TG9jYXRpb24oXG4gIG9pZDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICBwYXRoOiBzdHJpbmcsXG4gIHN0YXJ0TGluZTogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgZW5kTGluZTogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZFxuKTogeyBleHByZXNzaW9uOiBzdHJpbmc7IHN0YXJ0TGluZTogbnVtYmVyOyBlbmRMaW5lOiBudW1iZXIgfSB8IHVuZGVmaW5lZCB7XG4gIGlmICghb2lkIHx8ICFlbmRMaW5lKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZXhwcmVzc2lvbjogYCR7b2lkfToke3BhdGh9YCxcbiAgICBzdGFydExpbmU6IHN0YXJ0TGluZSA/PyBlbmRMaW5lLFxuICAgIGVuZExpbmUsXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoRmlsZVRleHRBdEV4cHJlc3Npb24oXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgZXhwcmVzc2lvbjogc3RyaW5nLFxuICBmaWxlVGV4dENhY2hlOiBNYXA8c3RyaW5nLCBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4+XG4pOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBjYWNoZUtleSA9IGAke293bmVyfS8ke25hbWV9OiR7ZXhwcmVzc2lvbn1gO1xuICBsZXQgcGVuZGluZyA9IGZpbGVUZXh0Q2FjaGUuZ2V0KGNhY2hlS2V5KTtcblxuICBpZiAoIXBlbmRpbmcpIHtcbiAgICBwZW5kaW5nID0gZmV0Y2hGaWxlVGV4dChvd25lciwgbmFtZSwgZXhwcmVzc2lvbik7XG4gICAgZmlsZVRleHRDYWNoZS5zZXQoY2FjaGVLZXksIHBlbmRpbmcpO1xuICB9XG5cbiAgcmV0dXJuIGF3YWl0IHBlbmRpbmc7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoRmlsZVRleHQob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBleHByZXNzaW9uOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdyYXBocWw8e1xuICAgIGRhdGE/OiB7XG4gICAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgICBvYmplY3Q/OiB7XG4gICAgICAgICAgaXNCaW5hcnk/OiBib29sZWFuIHwgbnVsbDtcbiAgICAgICAgICB0ZXh0Pzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgfSB8IG51bGw7XG4gICAgICB9O1xuICAgIH07XG4gIH0+KEZJTEVfVEVYVF9RVUVSWSwgeyBvd25lciwgbmFtZSwgZXhwcmVzc2lvbiB9KTtcbiAgY29uc3QgYmxvYiA9IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/Lm9iamVjdDtcblxuICBpZiAoIWJsb2IgfHwgYmxvYi5pc0JpbmFyeSB8fCB0eXBlb2YgYmxvYi50ZXh0ICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gYmxvYi50ZXh0O1xufVxuXG5mdW5jdGlvbiByZW5kZXJMaW5lU25pcHBldChmaWxlVGV4dDogc3RyaW5nLCBzdGFydExpbmU6IG51bWJlciwgZW5kTGluZTogbnVtYmVyKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbGluZXMgPSBmaWxlVGV4dC5zcGxpdCgnXFxuJyk7XG4gIC8vIFJlbW92ZSBvbmx5IHRoZSBzeW50aGV0aWMgZW1wdHkgc2VnbWVudCBjcmVhdGVkIGJ5IGEgdHJhaWxpbmcgbmV3bGluZSB3aXRob3V0IHRyaW1taW5nIG1lYW5pbmdmdWwgc3BhY2VzLlxuICBpZiAobGluZXMubGVuZ3RoID4gMCAmJiBsaW5lcy5hdCgtMSkgPT09ICcnKSB7XG4gICAgbGluZXMucG9wKCk7XG4gIH1cblxuICBpZiAobGluZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IGNsYW1wZWRTdGFydExpbmUgPSBjbGFtcExpbmVOdW1iZXIoc3RhcnRMaW5lLCBsaW5lcy5sZW5ndGgpO1xuICBjb25zdCBjbGFtcGVkRW5kTGluZSA9IGNsYW1wTGluZU51bWJlcihlbmRMaW5lLCBsaW5lcy5sZW5ndGgpO1xuICBjb25zdCBmaXJzdExpbmUgPSBNYXRoLm1heCgxLCBjbGFtcGVkU3RhcnRMaW5lIC0gUkVWSUVXX1NOSVBQRVRfQ09OVEVYVF9MSU5FUyk7XG4gIGNvbnN0IGxhc3RMaW5lID0gTWF0aC5taW4obGluZXMubGVuZ3RoLCBjbGFtcGVkRW5kTGluZSArIFJFVklFV19TTklQUEVUX0NPTlRFWFRfTElORVMpO1xuICBjb25zdCBsaW5lTnVtYmVyV2lkdGggPSBTdHJpbmcobGFzdExpbmUpLmxlbmd0aDtcbiAgY29uc3Qgc25pcHBldExpbmVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZvciAobGV0IGxpbmVOdW1iZXIgPSBmaXJzdExpbmU7IGxpbmVOdW1iZXIgPD0gbGFzdExpbmU7IGxpbmVOdW1iZXIgKz0gMSkge1xuICAgIGNvbnN0IG1hcmtlciA9IGxpbmVOdW1iZXIgPj0gY2xhbXBlZFN0YXJ0TGluZSAmJiBsaW5lTnVtYmVyIDw9IGNsYW1wZWRFbmRMaW5lID8gJz4nIDogJyAnO1xuICAgIHNuaXBwZXRMaW5lcy5wdXNoKFxuICAgICAgYCR7bWFya2VyfSAke1N0cmluZyhsaW5lTnVtYmVyKS5wYWRTdGFydChsaW5lTnVtYmVyV2lkdGgsICcgJyl9IHwgJHtsaW5lc1tsaW5lTnVtYmVyIC0gMV0gPz8gJyd9YFxuICAgICk7XG4gIH1cblxuICByZXR1cm4gc25pcHBldExpbmVzLmpvaW4oJ1xcbicpO1xufVxuXG5mdW5jdGlvbiBjbGFtcExpbmVOdW1iZXIobGluZU51bWJlcjogbnVtYmVyLCBtYXhMaW5lTnVtYmVyOiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgobGluZU51bWJlciwgMSksIG1heExpbmVOdW1iZXIpO1xufVxuIiwiZXhwb3J0IGNvbnN0IHRlbXBvcmFyeUZpbGVzQ2xlYW51cEluc3RydWN0aW9uID1cbiAgJ090aGVyIGFnZW50cyBtYXkgYmUgd29ya2luZyBjb25jdXJyZW50bHk7IGRlbGV0ZSBvbmx5IHRlbXBvcmFyeSBmaWxlcyB5b3UgY3JlYXRlZCwgdmVyaWZ5IHRoYXQgdGhvc2UgcGF0aHMgbm8gbG9uZ2VyIGV4aXN0LCB0aGVuIHJ1biBgZ2l0IHN0YXR1cyAtLXBvcmNlbGFpbj12MSAtLXVudHJhY2tlZC1maWxlcz1hbGxgLic7XG4iLCJpbXBvcnQgeyBmZXRjaElzc3VlTWVzc2FnZXMgfSBmcm9tICcuLi9wci9wckNvbW1hbmRzLmpzJztcbmltcG9ydCB7IHRlbXBvcmFyeUZpbGVzQ2xlYW51cEluc3RydWN0aW9uIH0gZnJvbSAnLi9jbGVhbnVwSW5zdHJ1Y3Rpb24uanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRQbGFuUHJvbXB0KGlzc3VlTnVtYmVyOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBpc3N1ZVlhbWwgPSBhd2FpdCBmZXRjaElzc3VlTWVzc2FnZXMoaXNzdWVOdW1iZXIpO1xuXG4gIHJldHVybiBgXG5QbGFuIGEgR2l0SHViIGlzc3VlIGJ5IGdhdGhlcmluZyBjb250ZXh0LCB3cml0aW5nIGEgc3BlY2lmaWNhdGlvbiBmb3Igc29mdHdhcmUgZW5naW5lZXJzLCBhbmQgcG9zdGluZyBvciB1cGRhdGluZyB0aGF0IHNwZWNpZmljYXRpb24gYmFjayB0byB0aGUgaXNzdWUuXG5UaGUgdGFyZ2V0IGlzc3VlIG51bWJlciBpcyAjJHtpc3N1ZU51bWJlcn0uIEhlcmUgaXMgdGhlIGZldGNoZWQgaXNzdWUgY29udGV4dCBhcyBZQU1MOlxufn5+fnlhbWxcbiR7aXNzdWVZYW1sLnRyaW0oKX1cbn5+fn5cblxuRm9sbG93IHRoaXMgd29ya2Zsb3c6XG4xLiBSZWFkIHRoZSBhYm92ZSBpc3N1ZSBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBjYXJlZnVsbHkuXG4yLiBDb2xsZWN0IGVub3VnaCBzdXBwb3J0aW5nIGluZm9ybWF0aW9uIGJlZm9yZSB3cml0aW5nIHRoZSBzcGVjaWZpY2F0aW9uOlxuICAgLSBJbnNwZWN0IHRoZSByZWxldmFudCBjb2RlLCBzdXJyb3VuZGluZyBjYWxsIHNpdGVzLCByZWxhdGVkIHR5cGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbiwgcmVjZW50IGRpZmZzLCBhbmQgYW55IG90aGVyIGxvY2FsIGNvbnRleHQgbmVlZGVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZS5cbiAgIC0gSWYgY29kZSBpbnNwZWN0aW9uIGlzIGVub3VnaCwgdXNlIHRoZSBjdXJyZW50IGNvZGViYXNlIGFzIHRoZSBwcmltYXJ5IGV2aWRlbmNlLlxuICAgLSBJZiB0aGUgaXNzdWUgZGVwZW5kcyBvbiBydW50aW1lIGJlaGF2aW9yLCByZXByb2R1Y2UgaXQgd2l0aCB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGV4cGVyaW1lbnQsIHN1Y2ggYXMgYSBmb2N1c2VkIGNvbW1hbmQsIGEgdGlueSBzY3JpcHQsIGEgdGVtcG9yYXJ5IGxvY2FsIGFzc2VydGlvbiwgb3IgYW5vdGhlciBuYXJyb3cgY2hlY2sgdGhhdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGludGVuZGVkIGJlaGF2aW9yLlxuICAgLSBJZiB0aGUgaXNzdWUgZGVwZW5kcyBvbiBhIGxpYnJhcnksIEFQSSwgb3IgbGFuZ3VhZ2UgZmVhdHVyZSwgY29uZmlybSBpdCBhZ2FpbnN0IHRoZSBsYXRlc3Qgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBvciBhbm90aGVyIHByaW1hcnkgc291cmNlIGluc3RlYWQgb2YgcmVseWluZyBvbiBtZW1vcnkuXG4zLiBXcml0ZSB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGlzc3VlIGNvbW1lbnQuXG4gICAtIFdyaXRlIHRoZSBiYWNrZ3JvdW5kIGJhc2VkIG9uIHRoZSBjb2xsZWN0ZWQgaW5mb3JtYXRpb24uXG4gICAtIERlZmluZSBhIGdvYWwgdGhhdCBjbGVhcmx5IGd1aWRlcyBvdXIgaW1wbGVtZW50YXRpb24gaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi5cbiAgIC0gV3JpdGUgYSBkZXRhaWxlZCBzcGVjaWZpY2F0aW9uIGluY29ycG9yYXRpbmcgdGhlIGV2aWRlbmNlIHlvdSBjb2xsZWN0ZWQuXG4gICAtIElmIG5lZWRlZCwgaW5jbHVkZSBjb2RlIHNuaXBwZXRzIHRoYXQgZXhwbGFpbiBob3cgdG8gdXNlIGxpYnJhcmllcyBvciBBUElzLCBhbG9uZyB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlaXIgZG9jdW1lbnRhdGlvbi5cbjQuICR7dGVtcG9yYXJ5RmlsZXNDbGVhbnVwSW5zdHJ1Y3Rpb259XG41LiBQb3N0IHRoZSBzcGVjaWZpY2F0aW9uIGJhY2sgdG8gaXNzdWUgIyR7aXNzdWVOdW1iZXJ9LCB0aGVuIHByaW50IHRoZSBpc3N1ZSBVUkwuXG4gICAtIElmIHRoZSBpc3N1ZSBhbHJlYWR5IGhhcyBhIHNwZWNpZmljYXRpb24sIHVwZGF0ZSB0aGUgZXhpc3RpbmcgY29tbWVudCBpbnN0ZWFkIG9mIHBvc3RpbmcgYSBuZXcgb25lLlxuXG5Gb3JtYXQgdGhlIGlzc3VlIGNvbW1lbnQgZXhhY3RseSBsaWtlIHRoaXMsIGJ1dCBkbyBub3QgaW5jbHVkZSB0aGUgc3Vycm91bmRpbmcgXFxgfn5+flxcYCBmZW5jZXMgaW4gdGhlIGFjdHVhbCBjb21tZW50Olxufn5+flxuIyMgQmFja2dyb3VuZFxuXG5bU3VtbWFyaXplIHRoZSBjdXJyZW50IGJlaGF2aW9yIGFuZCBleHBsYWluIHRoZSBtb3RpdmF0aW9uIGJlaGluZCB0aGlzIGlzc3VlXVxuXG4jIyBHb2FsXG5cbltEZWZpbmUgdGhlIGdvYWwgd2Ugd2FudCB0byBhY2hpZXZlIGluIHRoaXMgaXNzdWVdXG5cbiMjIFNwZWNpZmljYXRpb25cblxuW0RldGFpbGVkIHNwZWNpZmljYXRpb24gZm9yIHNvZnR3YXJlIGVuZ2luZWVyc11cblxuIyMgS2V5IFRlY2hub2xvZ2llcyAoT05MWSBpZiBleHRlcm5hbCByZXNvdXJjZXMgYXJlIG5lZWRlZClcblxuW0Rlc2NyaWJlIHdoYXQgbGlicmFyaWVzIG9yIEFQSXMgd2Ugc2hvdWxkIHVzZSwgaW5jbHVkaW5nIGNvbmNyZXRlIHZlcnNpb25zIGFuZCBjb2RlIHNuaXBwZXRzLl1cblxufn5+flxuYC50cmltKCk7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gYnVpbGRNZXJnZUJhc2VDb21tYW5kKGJhc2VCcmFuY2g6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgZ2l0IG1lcmdlLWJhc2UgJHtzaGVsbFF1b3RlKGBvcmlnaW4vJHtiYXNlQnJhbmNofWApfSBIRUFEIDI+L2Rldi9udWxsIHx8IGdpdCBtZXJnZS1iYXNlICR7c2hlbGxRdW90ZShiYXNlQnJhbmNoKX0gSEVBRGA7XG59XG5cbmZ1bmN0aW9uIHNoZWxsUXVvdGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJyR7dmFsdWUucmVwbGFjZUFsbChcIidcIiwgXCInXFxcIidcXFwiJ1wiKX0nYDtcbn1cbiIsImltcG9ydCB7IGZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSB9IGZyb20gJy4uL3ByL3ByQ29tbWFuZHMuanMnO1xuaW1wb3J0IHsgY3VycmVudEJhc2VCcmFuY2ggfSBmcm9tICcuLi9yZXBvL2RlZmF1bHRCcmFuY2guanMnO1xuaW1wb3J0IHsgTk9fQ09OQ0VSTl9NRVNTQUdFIH0gZnJvbSAnLi4vcmV2aWV3L25vQ29uY2Vybi5qcyc7XG5pbXBvcnQgeyBidWlsZE1lcmdlQmFzZUNvbW1hbmQgfSBmcm9tICcuL2Jhc2VCcmFuY2hEaWZmQ29tbWFuZC5qcyc7XG5pbXBvcnQgeyB0ZW1wb3JhcnlGaWxlc0NsZWFudXBJbnN0cnVjdGlvbiB9IGZyb20gJy4vY2xlYW51cEluc3RydWN0aW9uLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkUmV2aWV3UHJvbXB0KGtub3duRmFjdHM/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBiYXNlQnJhbmNoID0gYXdhaXQgY3VycmVudEJhc2VCcmFuY2goKTtcbiAgY29uc3QgbWVyZ2VCYXNlQ29tbWFuZCA9IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZChiYXNlQnJhbmNoKTtcbiAgY29uc3QgcHJDb250ZXh0ID0gYXdhaXQgZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlKCk7XG4gIHJldHVybiBgXG5SZXZpZXcgdGhlIGN1cnJlbnQgJHtwckNvbnRleHQgPyAncHVsbCByZXF1ZXN0JyA6ICdicmFuY2gnfSBhZ2FpbnN0IGl0cyBiYXNlIGJyYW5jaCAke2Jhc2VCcmFuY2h9IHZpYSBcXGBnaXQgZGlmZiBcIiQoJHttZXJnZUJhc2VDb21tYW5kfSlcIlxcYC5cblVzZSB0aGUga25vd24gZmFjdHMsIGlmIHByb3ZpZGVkLCB0byBhdm9pZCByZXBlYXRpbmcgZmFjdCBjaGVja3MgYW5kIGZpbmRpbmdzLiBSZXVzZSBhIGtub3duIGZhY3Qgb25seSB3aGVuIHRoZSBzYW1lIGN1cnJlbnQtY29kZSBldmlkZW5jZSwgY29tbWFuZCByZXN1bHQsIG9yIHByaW1hcnktc291cmNlIGV2aWRlbmNlIHN0aWxsIGFwcGxpZXMuIElmIHRoZSBjdXJyZW50IGNvZGUgb3Igc291cmNlIGNvbnRleHQgbWF5IGhhdmUgY2hhbmdlZCBlbm91Z2ggdG8gaW52YWxpZGF0ZSBhIGtub3duIGZhY3QsIHJlZnJlc2ggb25seSB0aGF0IGFmZmVjdGVkIGZhY3QuXG5Gb2xsb3cgdGhpcyB3b3JrZmxvdzpcbjEuIFJldmlldyBlYWNoIGZpbmRpbmc6XG4gICAxLiBHYXRoZXIgc3VwcG9ydGluZyBldmlkZW5jZTpcbiAgICAgLSBJbnNwZWN0IHRoZSByZWZlcmVuY2VkIGNvZGUgYW5kIHRoZSBzdXJyb3VuZGluZyBjYWxsIHNpdGVzLCByZWxhdGVkIHR5cGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbiwgYW5kIHJlY2VudCBkaWZmcyB3aGVuIHRoZXkgYWZmZWN0IHRoZSBjbGFpbS5cbiAgICAgLSBJZiBjb2RlIGluc3BlY3Rpb24gaXMgZW5vdWdoLCB1c2UgdGhlIGN1cnJlbnQgY29kZWJhc2UgYXMgdGhlIHByaW1hcnkgZXZpZGVuY2UuXG4gICAgIC0gSWYgdGhlIGZpbmRpbmcgaXMgYWJvdXQgcnVudGltZSBiZWhhdmlvciwgcmVwcm9kdWNlIGl0IHdpdGggdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBleHBlcmltZW50LCBzdWNoIGFzIGEgZm9jdXNlZCBjb21tYW5kLCBhIHRpbnkgc2NyaXB0LCBhIHRlbXBvcmFyeSBsb2NhbCBhc3NlcnRpb24sIG9yIGFub3RoZXIgbmFycm93IGNoZWNrIHRoYXQgZG9lcyBub3QgY2hhbmdlIHRoZSBpbnRlbmRlZCBiZWhhdmlvci5cbiAgICAgLSBJZiB0aGUgZmluZGluZyBkZXBlbmRzIG9uIGZyYW1ld29yaywgbGlicmFyeSwgcGxhdGZvcm0sIG9yIGxhbmd1YWdlIGJlaGF2aW9yLCBjb25maXJtIGl0IGFnYWluc3QgdGhlIGxhdGVzdCBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIG9yIGFub3RoZXIgcHJpbWFyeSBzb3VyY2UgaW5zdGVhZCBvZiByZWx5aW5nIG9uIG1lbW9yeS5cbiAgIDIuIEp1ZGdlIHdoZXRoZXIgdGhlIGZpbmRpbmcgaXMgdmFsaWQ6XG4gICAgIC0gTWFyayBpdCB2YWxpZCBvbmx5IHdoZW4gdGhlIGF2YWlsYWJsZSBldmlkZW5jZSBzaG93cyB0aGUgcmVwb3J0ZWQgaXNzdWUgaXMgc3RpbGwgcmVhbCBpbiB0aGUgY3VycmVudCBjb2RlYmFzZS5cbiAgICAgLSBPdGhlcndpc2UsIG1hcmsgaXQgbm90IHZhbGlkLlxuICAgMy4gUHJvcG9zZSBhIGZpeCB3aXRob3V0IG1vZGlmeWluZyB0aGUgY29kZTpcbiAgICAgLSBEZXNjcmliZSB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGNoYW5nZSB0aGF0IHdvdWxkIGFkZHJlc3MgdGhlIGZpbmRpbmcuXG4gICAgIC0gSW52ZXN0aWdhdGUgdGhlIGxpa2VseSBpbXBhY3Qgb2YgdGhhdCBjaGFuZ2UgYnkgaW5zcGVjdGluZyB0aGUgYWZmZWN0ZWQgY2FsbCBzaXRlcywgcmVsYXRlZCB0eXBlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb24sIGFuZCBhZGphY2VudCBiZWhhdmlvciwgYW5kIG5vdGUgYW55IGZvbGxvdy11cCBjaGFuZ2VzIG9yIHJpc2tzIHRoZSBmaXggd291bGQgbmVlZCB0byBhY2NvdW50IGZvci5cbjIuICR7dGVtcG9yYXJ5RmlsZXNDbGVhbnVwSW5zdHJ1Y3Rpb259XG4zLiBSZXBvcnQgb25seSBuZXcgdmFsaWQgZmluZGluZ3MgdGhhdCBhcmUgbm90IGFscmVhZHkgY292ZXJlZCBieSB0aGUga25vd24gZmFjdHMuIEZvciBlYWNoIGZpbmRpbmcsIGluY2x1ZGUgdGhlIGV2aWRlbmNlLCBwcm9wb3NlZCBmaXgsIGFuZCBsaWtlbHkgaW1wYWN0LiBEbyBub3QgbW9kaWZ5IHRoZSBjb2RlLlxuICAgLSBXaGVuIHJlcG9ydGluZyB2YWxpZCBmaW5kaW5ncywgaW5jbHVkZSBhIFxcYCMjIFZlcmlmaWVkIEZhY3RzXFxgIHNlY3Rpb24gYWZ0ZXIgdGhlIGZpbmRpbmdzLiBJbmNsdWRlIG9ubHkgY29uY2lzZSwgcmV2aWV3LXJlbGV2YW50IGZhY3RzOiB3aGF0IHdhcyB2ZXJpZmllZCwgd2h5IGl0IG1hdHRlcnMgdG8gdGhlIHJldmlldywgYW5kIGhvdyBpdCB3YXMgdmVyaWZpZWQuXG4gICAtIElmIHRoZXJlIGFyZSBubyBuZXcgdmFsaWQgZmluZGluZ3MsIHJlc3BvbmQgZXhhY3RseSB3aXRoOiBcXGAke05PX0NPTkNFUk5fTUVTU0FHRX1cXGBcblxuJHtidWlsZEtub3duRmFjdHNJbnN0cnVjdGlvbnMoa25vd25GYWN0cyl9XG5cbiR7YnVpbGRQckNvbnRleHRJbnN0cnVjdGlvbnMocHJDb250ZXh0KX1cbmAudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBidWlsZEtub3duRmFjdHNJbnN0cnVjdGlvbnMoa25vd25GYWN0czogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgY29uc3QgdHJpbW1lZEZhY3RzID0ga25vd25GYWN0cz8udHJpbSgpO1xuICByZXR1cm4gdHJpbW1lZEZhY3RzXG4gICAgPyBgS25vd24gZmFjdHM6XG5+fn5+bWFya2Rvd25cbiR7dHJpbW1lZEZhY3RzfVxufn5+flxuYC50cmltKClcbiAgICA6ICcnO1xufVxuXG5mdW5jdGlvbiBidWlsZFByQ29udGV4dEluc3RydWN0aW9ucyhwckNvbnRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IHN0cmluZyB7XG4gIHJldHVybiBwckNvbnRleHRcbiAgICA/IGBDdXJyZW50IHB1bGwgcmVxdWVzdCBjb250ZXh0Olxufn5+fnlhbWxcbiR7cHJDb250ZXh0LnRyaW0oKX1cbn5+fn5cbmAudHJpbSgpXG4gICAgOiAnJztcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBidWlsZFNjcmVlbnNob3RQcm9tcHQoaW5pdGlhbFVybDogc3RyaW5nLCBwYWdlTmFtZTogc3RyaW5nLCBzY3JlZW5zaG90RGVzY3JpcHRpb246IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNhbml0aXplZERlc2NyaXB0aW9uID0gc2NyZWVuc2hvdERlc2NyaXB0aW9uLnJlcGxhY2VBbGwoJ1xcbicsICcgJykucmVwbGFjZUFsbCgnXCInLCBcIidcIik7XG4gIHJldHVybiBgXG5Vc2UgXFxgcGxheXdyaWdodC1jbGlcXGAgc2tpbGwgdG8gdGFrZSBhIHNjcmVlbnNob3Qgb2YgXCIke3Nhbml0aXplZERlc2NyaXB0aW9ufVwiIGJ5IG5hdmlnYXRpbmcgZnJvbSAke2luaXRpYWxVcmx9IHRvIFwiJHtwYWdlTmFtZX1cIiBwYWdlLlxuXG5Gb2xsb3cgdGhpcyB3b3JrZmxvdzpcbjEuIE9wZW4gdGhlIGluaXRpYWwgcGFnZSBhdCAke2luaXRpYWxVcmx9LlxuMi4gTmF2aWdhdGUgZnJvbSB0aGF0IGluaXRpYWwgcGFnZSB1bnRpbCB5b3UgcmVhY2ggdGhlIHBhZ2UgaWRlbnRpZmllZCBhcyAke3BhZ2VOYW1lfS5cbiAgIC0gSWYgY29kZSBlcnJvcnMsIHJ1bnRpbWUgZmFpbHVyZXMsIG9yIGJyb2tlbiBVSSBmbG93cyBwcmV2ZW50IG5hdmlnYXRpb24sIGludmVzdGlnYXRlIHRoZSBjYXVzZSBpbiB0aGUgbG9jYWwgY29kZWJhc2UsIG1ha2UgdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBjb2RlIGZpeCwgYW5kIHZlcmlmeSB0aGF0IHRoZSBwYWdlIGNhbiBub3cgYmUgcmVhY2hlZCBiZWZvcmUgY29udGludWluZy5cbiAgIC0gSWYgeW91IGNhbm5vdCBmaXggdGhlIGVycm9ycywgcmVwb3J0IG9uIHRoZSBlcnJvcnMgdGhlbiBzdG9wLlxuMy4gQ2FwdHVyZSBhIHNjcmVlbnNob3QgdGhhdCBmb2N1c2VzIG9uIHRoaXMgdGFyZ2V0OiBcIiR7c2FuaXRpemVkRGVzY3JpcHRpb259XCIuXG40LiBLZWVwIHRoZSBnZW5lcmF0ZWQgaW1hZ2UgYXJ0aWZhY3QgYW5kIHJlcG9ydCB0aGUgc2NyZWVuc2hvdCBmaWxlIHBhdGggcGx1cyBhIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHdoYXQgd2FzIGNhcHR1cmVkLiBJZiB5b3UgaGFkIHRvIGZpeCBjb2RlIGZpcnN0LCBhbHNvIHN1bW1hcml6ZSB0aGUgZml4LlxuYC50cmltKCk7XG59XG4iLCJpbXBvcnQgeyBmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUgfSBmcm9tICcuLi9wci9wckNvbW1hbmRzLmpzJztcbmltcG9ydCB7IGN1cnJlbnRCYXNlQnJhbmNoIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZCB9IGZyb20gJy4vYmFzZUJyYW5jaERpZmZDb21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYmFzZUJyYW5jaCA9IGF3YWl0IGN1cnJlbnRCYXNlQnJhbmNoKCk7XG4gIGNvbnN0IG1lcmdlQmFzZUNvbW1hbmQgPSBidWlsZE1lcmdlQmFzZUNvbW1hbmQoYmFzZUJyYW5jaCk7XG4gIGNvbnN0IHByQ29udGV4dCA9IGF3YWl0IGZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSgpO1xuICByZXR1cm4gYFxuU2ltcGxpZnkgdGhlIGN1cnJlbnQgJHtwckNvbnRleHQgPyAncHVsbCByZXF1ZXN0JyA6ICdicmFuY2gnfSBhZ2FpbnN0IGl0cyBiYXNlIGJyYW5jaCB1c2luZyBcXGBnaXQgZGlmZiBcIiQoJHttZXJnZUJhc2VDb21tYW5kfSlcIlxcYC5cbkZpcnN0LCBpbnNwZWN0IHRoZSBkaWZmIGFuZCByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGVhY2ggY2hhbmdlZCBhcmVhLiBUaGlzIGluY2x1ZGVzIG5lYXJieSBmdW5jdGlvbnMsIHR5cGVzLCBjYWxsIHNpdGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbnMsIGFuZCBhbnkgb3RoZXIgZmlsZXMgdGhhdCBoZWxwIGRldGVybWluZSBpZiB0aGUgY2hhbmdlIGlzIHRydWx5IG5lY2Vzc2FyeS5cbkxldmVyYWdlIHRoaXMgY29udGV4dCB0byBpZGVudGlmeSByZWR1bmRhbmNpZXMgdGhhdCBjYW4gYmUgc2FmZWx5IHJlbW92ZWQgb3Igc2ltcGxpZmllZC4gTG9vayBmb3IgZHVwbGljYXRlIGxvZ2ljLCByZXBlYXRlZCBjb25kaXRpb25hbHMsIHVubmVjZXNzYXJ5IGFic3RyYWN0aW9ucywgb3ZlcmxhcHBpbmcgY29kZSBwYXRocywgZGVhZCBjb2RlLCBvciBlZGl0cyBtYWRlIG9ic29sZXRlIHVwb24gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5Qcmlvcml0aXplIHNpbXBsaWZpY2F0aW9ucyB0aGF0IHJlZHVjZSB0aGUgcmV2aWV3ZXIncyBidXJkZW4sIHN1Y2ggYXM6XG4tIFJlbW92aW5nIHJlZHVuZGFudCBlZGl0cyBvciBkZWFkIGNvZGUuXG4tIEVsaW1pbmF0aW5nIG9yIG1lcmdpbmcgZHVwbGljYXRlZCBsb2dpYyBkaXNjb3ZlcmVkIGJ5IGNvbXBhcmluZyB0aGUgZGlmZiB3aXRoIHJlbGF0ZWQgY29kZS5cbi0gRmxhdHRlbmluZyB1bm5lY2Vzc2FyaWx5IGNvbXBsZXggbG9naWMgaW50cm9kdWNlZCBpbiB0aGUgZGlmZiAoZS5nLiwgdXNpbmcgZWFybHkgcmV0dXJucyB0byByZWR1Y2UgbmVzdGluZywgc2ltcGxpZnlpbmcgYm9vbGVhbiBleHByZXNzaW9ucywgb3IgcmVtb3ZpbmcgcmVkdW5kYW50IHdyYXBwZXIgZnVuY3Rpb25zKS5cblxuQ29tbWl0IGFuZCBwdXNoIHlvdXIgY2hhbmdlcy4gQWZ0ZXJ3YXJkLCBzdW1tYXJpemUgdGhlIHJlZHVuZGFuY2llcyBvciB1bm5lY2Vzc2FyeSBjb21wbGV4aXR5IHlvdSBoYXZlIHJlbW92ZWQuXG5cbiR7cHJDb250ZXh0ID8gYEN1cnJlbnQgcHVsbCByZXF1ZXN0IGNvbnRleHQ6XFxufn5+fnlhbWxcXG4ke3ByQ29udGV4dC50cmltKCl9XFxufn5+fmAgOiAnJ31cbmAudHJpbSgpO1xufVxuIiwiaW1wb3J0IGFzc2VydCBmcm9tICdub2RlOmFzc2VydCc7XG5pbXBvcnQgeyBjcCwgbWtkdGVtcCwgcmVhZEZpbGUsIHJlYWRkaXIsIHJtLCB3cml0ZUZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJztcbmltcG9ydCB7IHRtcGRpciB9IGZyb20gJ25vZGU6b3MnO1xuaW1wb3J0IHsgZGlybmFtZSwgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5cbmNvbnN0IFBBQ0tBR0VfTkFNRSA9ICdAd2lsbGJvb3N0ZXIvYWdlbnQtc2tpbGxzJztcbmNvbnN0IFRFWFRfRklMRV9FWFRFTlNJT05fUkVHRVggPSAvXFwuKD86W2NtXT9banRdc3xqc29ufG1kfHlhP21sKSQvaTtcblxuaW50ZXJmYWNlIFBhY2thZ2VNZXRhZGF0YSB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgUGFja2FnZVJvb3Qge1xuICBtZXRhZGF0YTogUGFja2FnZU1ldGFkYXRhO1xuICBwYXRoOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnN0YWxsUGFja2VkU2tpbGxzKCk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBwYWNrYWdlUm9vdCA9IGF3YWl0IGZpbmRQYWNrYWdlUm9vdCgpO1xuICBwcm9jZXNzLnN0ZG91dC53cml0ZShgSW5zdGFsbGluZyAke3BhY2thZ2VSb290Lm1ldGFkYXRhLm5hbWV9QCR7cGFja2FnZVJvb3QubWV0YWRhdGEudmVyc2lvbn1cXG5gKTtcblxuICBjb25zdCBpbnN0YWxsU291cmNlUm9vdCA9IGF3YWl0IG1rZHRlbXAoam9pbih0bXBkaXIoKSwgJ2FnZW50LXNraWxscy1pbnN0YWxsLScpKTtcblxuICB0cnkge1xuICAgIGF3YWl0IGNwKGpvaW4ocGFja2FnZVJvb3QucGF0aCwgJ3BhY2thZ2UuanNvbicpLCBqb2luKGluc3RhbGxTb3VyY2VSb290LCAncGFja2FnZS5qc29uJykpO1xuICAgIGF3YWl0IGNwKGpvaW4ocGFja2FnZVJvb3QucGF0aCwgJ3NraWxscycpLCBqb2luKGluc3RhbGxTb3VyY2VSb290LCAnc2tpbGxzJyksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IHJlcGxhY2VMYXRlc3RTcGVjaWZpZXJXaXRoUGFja2FnZVZlcnNpb24oaW5zdGFsbFNvdXJjZVJvb3QsIHBhY2thZ2VSb290Lm1ldGFkYXRhKTtcblxuICAgIGF3YWl0IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoXG4gICAgICBbXG4gICAgICAgICdidW54JyxcbiAgICAgICAgJ3NraWxsc0BsYXRlc3QnLFxuICAgICAgICAnYWRkJyxcbiAgICAgICAgaW5zdGFsbFNvdXJjZVJvb3QsXG4gICAgICAgICctLWdsb2JhbCcsXG4gICAgICAgICctLXllcycsXG4gICAgICAgICctLXNraWxsJyxcbiAgICAgICAgJyonLFxuICAgICAgICAnLS1hZ2VudCcsXG4gICAgICAgICdjbGF1ZGUtY29kZScsXG4gICAgICAgICctLWFnZW50JyxcbiAgICAgICAgJ2NvZGV4JyxcbiAgICAgICAgJy0tYWdlbnQnLFxuICAgICAgICAnZ2VtaW5pLWNsaScsXG4gICAgICBdLFxuICAgICAge1xuICAgICAgICB3YWl0TWVzc2FnZTogJ0luc3RhbGxpbmcgcGFja2FnZWQgc2tpbGxzIGdsb2JhbGx5LicsXG4gICAgICB9XG4gICAgKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBybShpbnN0YWxsU291cmNlUm9vdCwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZpbmRQYWNrYWdlUm9vdCgpOiBQcm9taXNlPFBhY2thZ2VSb290PiB7XG4gIGxldCBjdXJyZW50RGlyID0gZGlybmFtZShmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCkpO1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gam9pbihjdXJyZW50RGlyLCAncGFja2FnZS5qc29uJyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhY2thZ2VNZXRhZGF0YSA9IHJlYWRQYWNrYWdlTWV0YWRhdGEocGFja2FnZUpzb25QYXRoLCBhd2FpdCByZWFkRmlsZShwYWNrYWdlSnNvblBhdGgsICd1dGY4JykpO1xuICAgICAgaWYgKHBhY2thZ2VNZXRhZGF0YS5uYW1lID09PSBQQUNLQUdFX05BTUUpIHtcbiAgICAgICAgcmV0dXJuIHsgbWV0YWRhdGE6IHBhY2thZ2VNZXRhZGF0YSwgcGF0aDogY3VycmVudERpciB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gS2VlcCB3YWxraW5nIHVwIHVudGlsIHRoZSBwdWJsaXNoZWQgcGFja2FnZSByb290IGlzIGZvdW5kLlxuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudERpciA9IGRpcm5hbWUoY3VycmVudERpcik7XG4gICAgYXNzZXJ0Lm5vdFN0cmljdEVxdWFsKGN1cnJlbnREaXIsIHBhcmVudERpciwgYEZhaWxlZCB0byBmaW5kICR7UEFDS0FHRV9OQU1FfSBwYWNrYWdlIHJvb3RgKTtcbiAgICBjdXJyZW50RGlyID0gcGFyZW50RGlyO1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlYWRQYWNrYWdlTWV0YWRhdGEocGFja2FnZUpzb25QYXRoOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZyk6IFBhY2thZ2VNZXRhZGF0YSB7XG4gIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShjb250ZW50KSBhcyBQYWNrYWdlTWV0YWRhdGE7XG4gIGFzc2VydC5vayhwYWNrYWdlSnNvbi5uYW1lICYmIHBhY2thZ2VKc29uLnZlcnNpb24sIGBGYWlsZWQgdG8gcmVhZCBuYW1lIG9yIHZlcnNpb24gZnJvbSAke3BhY2thZ2VKc29uUGF0aH1gKTtcbiAgcmV0dXJuIHBhY2thZ2VKc29uO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZXBsYWNlTGF0ZXN0U3BlY2lmaWVyV2l0aFBhY2thZ2VWZXJzaW9uKHJvb3Q6IHN0cmluZywgcGFja2FnZU1ldGFkYXRhOiBQYWNrYWdlTWV0YWRhdGEpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgbGF0ZXN0SW5zdGFsbFNwZWNpZmllciA9IGAke3BhY2thZ2VNZXRhZGF0YS5uYW1lfUBsYXRlc3RgO1xuICBjb25zdCB2ZXJzaW9uZWRJbnN0YWxsU3BlY2lmaWVyID0gYCR7cGFja2FnZU1ldGFkYXRhLm5hbWV9QCR7cGFja2FnZU1ldGFkYXRhLnZlcnNpb259YDtcbiAgYXdhaXQgcmVwbGFjZUluRmlsZXMocm9vdCwgKGNvbnRlbnQpID0+IGNvbnRlbnQucmVwbGFjZUFsbChsYXRlc3RJbnN0YWxsU3BlY2lmaWVyLCB2ZXJzaW9uZWRJbnN0YWxsU3BlY2lmaWVyKSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlcGxhY2VJbkZpbGVzKHBhdGg6IHN0cmluZywgcmVwbGFjZUNvbnRlbnQ6IChjb250ZW50OiBzdHJpbmcpID0+IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBlbnRyaWVzID0gYXdhaXQgcmVhZGRpcihwYXRoLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcblxuICAvLyBLZWVwIGluc3RhbGwtdGltZSBmaWxlIGRlc2NyaXB0b3JzIGJvdW5kZWQgd2hpbGUgc3RhZ2luZyB0aGUgbG9jYWwgc2tpbGwgZmlsZXMuXG4gIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykge1xuICAgIGlmICghZW50cnkuaXNGaWxlKCkgfHwgIVRFWFRfRklMRV9FWFRFTlNJT05fUkVHRVgudGVzdChlbnRyeS5uYW1lKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgZW50cnlQYXRoID0gam9pbihlbnRyeS5wYXJlbnRQYXRoLCBlbnRyeS5uYW1lKTtcbiAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoZW50cnlQYXRoLCAndXRmOCcpO1xuICAgIGNvbnN0IHJlcGxhY2VkQ29udGVudCA9IHJlcGxhY2VDb250ZW50KGNvbnRlbnQpO1xuICAgIGlmIChyZXBsYWNlZENvbnRlbnQgIT09IGNvbnRlbnQpIHtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShlbnRyeVBhdGgsIHJlcGxhY2VkQ29udGVudCk7XG4gICAgfVxuICB9XG59XG4iLCIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQgeyBzdGRpbiBhcyBwcm9jZXNzU3RkaW4gfSBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZSwgcnVuQWdlbnRDb21tYW5kLCBydW5BbGxBZ2VudENvbW1hbmRzIH0gZnJvbSAnLi9hZ2VudC9hZ2VudENvbW1hbmRzLmpzJztcbmltcG9ydCB7IHVwZGF0ZUJ1bkRlcGVuZGVuY2llcyB9IGZyb20gJy4vZGVwcy91cGRhdGVCdW5EZXBlbmRlbmNpZXMuanMnO1xuaW1wb3J0IHtcbiAgY2hlY2tQckNpLFxuICBmZXRjaElzc3VlTWVzc2FnZXMsXG4gIGZldGNoUHJNZXNzYWdlcyxcbiAgbGlzdFByUmV2aWV3VGhyZWFkcyxcbiAgbm9ybWFsaXplSXNzdWVOdW1iZXIsXG4gIG9wZW5QcixcbiAgcmVhZFJlcGxpZXNGcm9tU3RkaW4sXG4gIHJlYWRSZXF1aXJlZFN0ZGluVGV4dCxcbiAgcmVhZFN0ZGluVGV4dCxcbiAgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyxcbiAgdXBkYXRlUHIsXG59IGZyb20gJy4vcHIvcHJDb21tYW5kcy5qcyc7XG5pbXBvcnQgeyBidWlsZFBsYW5Qcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvcGxhblByb21wdC5qcyc7XG5pbXBvcnQgeyBidWlsZFJldmlld1Byb21wdCB9IGZyb20gJy4vcHJvbXB0cy9yZXZpZXdQcm9tcHQuanMnO1xuaW1wb3J0IHsgYnVpbGRTY3JlZW5zaG90UHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3NjcmVlbnNob3RQcm9tcHQuanMnO1xuaW1wb3J0IHsgYnVpbGRTaW1wbGlmeVByb21wdCB9IGZyb20gJy4vcHJvbXB0cy9zaW1wbGlmeVByb21wdC5qcyc7XG5pbXBvcnQgeyBpbnN0YWxsUGFja2VkU2tpbGxzIH0gZnJvbSAnLi9za2lsbHMvaW5zdGFsbFNraWxscy5qcyc7XG5cbnR5cGUgUmV2aWV3QWdlbnRNb2RlID0gJ2FsbCcgfCAnY29kZXgnIHwgJ2NsYXVkZScgfCAnZ2VtaW5pJztcblxuaW50ZXJmYWNlIFJldmlld0NvbW1hbmRPcHRpb25zIHtcbiAgYWdlbnQ6IFJldmlld0FnZW50TW9kZTtcbiAgaW50ZXJhY3RpdmU/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgSW50ZXJhY3RpdmVDb21tYW5kT3B0aW9ucyB7XG4gIGludGVyYWN0aXZlPzogYm9vbGVhbjtcbn1cblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW0ubmFtZSgnYWdlbnQtc2tpbGxzJykuZGVzY3JpcHRpb24oJ0NMSSBjb21tYW5kcyBmb3IgdGhlIHNraWxscyBpbiB0aGlzIHJlcG9zaXRvcnknKS5zaG93SGVscEFmdGVyRXJyb3IoKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnaW5zdGFsbC1za2lsbHMnKVxuICAuZGVzY3JpcHRpb24oJ0luc3RhbGwgYWxsIHBhY2thZ2VkIHNraWxscyBnbG9iYWxseSBmb3IgQ2xhdWRlIENvZGUsIENvZGV4LCBhbmQgR2VtaW5pIENMSScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgaW5zdGFsbFBhY2tlZFNraWxscygpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCdEb25lXFxuJyk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCd1cGRhdGUtYnVuLWRlcHMnKVxuICAuZGVzY3JpcHRpb24oJ1VwZGF0ZSBhbGwgQnVuIGRlcGVuZGVuY2llcyBpbiB0aGUgcm9vdCBwYWNrYWdlIGFuZCB3b3Jrc3BhY2UgcGFja2FnZXMnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHVwZGF0ZUJ1bkRlcGVuZGVuY2llcygpO1xuICB9KTtcblxuYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCh7XG4gIG5hbWU6ICdhZ2VudCcsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIHRoZSBzZWxlY3RlZCBhZ2VudCB3aXRoIHRoZSBzcGVjaWZpZWQgcHJvbXB0JyxcbiAgb3B0aW9uRGVzY3JpcHRpb246ICdVc2UgYW4gYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgYXJndW1lbnROYW1lOiAnPHByb21wdD4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnUHJvbXB0IHRvIHBhc3MgdG8gdGhlIGFnZW50JyxcbiAgcnVuOiAoYWdlbnQsIHByb21wdCwgb3B0aW9ucykgPT4gcnVuUHJvbXB0QWdlbnRDb21tYW5kKGFnZW50LCBwcm9tcHQsIG9wdGlvbnMpLFxufSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3JldmlldycpXG4gIC5kZXNjcmlwdGlvbignUnVuIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcpXG4gIC5hZGRPcHRpb24oXG4gICAgbmV3IE9wdGlvbignLS1hZ2VudCA8YWdlbnQ+JywgJ1VzZSBhIHJldmlldyBhZ2VudCcpXG4gICAgICAuY2hvaWNlcyhbJ2FsbCcsICdjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10pXG4gICAgICAubWFrZU9wdGlvbk1hbmRhdG9yeSgpXG4gIClcbiAgLm9wdGlvbignLS1pbnRlcmFjdGl2ZScsICdSdW4gdGhlIHNlbGVjdGVkIGFnZW50IHRocm91Z2ggaXRzIGludGVyYWN0aXZlIHRlcm1pbmFsIFVJJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChvcHRpb25zOiBSZXZpZXdDb21tYW5kT3B0aW9ucykgPT4ge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IHJ1blJldmlld0NvbW1hbmQob3B0aW9ucy5hZ2VudCwgb3B0aW9ucykpO1xuICB9KTtcblxuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctY29kZXgnLCAnUnVuIENvZGV4IHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsIChvcHRpb25zKSA9PlxuICBydW5SZXZpZXdDb21tYW5kKCdjb2RleCcsIG9wdGlvbnMpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAob3B0aW9ucykgPT5cbiAgcnVuUmV2aWV3Q29tbWFuZCgnY2xhdWRlJywgb3B0aW9ucylcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKG9wdGlvbnMpID0+XG4gIHJ1blJldmlld0NvbW1hbmQoJ2dlbWluaScsIG9wdGlvbnMpXG4pO1xuXG5hc3luYyBmdW5jdGlvbiBydW5SZXZpZXdDb21tYW5kKG1vZGU6IFJldmlld0FnZW50TW9kZSwgb3B0aW9uczogSW50ZXJhY3RpdmVDb21tYW5kT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJldmlvdXNWZXJpZmllZEZhY3RzID0gYXdhaXQgcmVhZFJldmlld1ZlcmlmaWVkRmFjdHMoKTtcbiAgY29uc3QgcHJvbXB0ID0gYnVpbGRSZXZpZXdQcm9tcHQocHJldmlvdXNWZXJpZmllZEZhY3RzKTtcbiAgcmV0dXJuIG1vZGUgPT09ICdhbGwnXG4gICAgPyBydW5BbGxBZ2VudENvbW1hbmRzKHByb21wdCwge1xuICAgICAgICBhbGxBZ2VudHNMYWJlbDogJ3JldmlldyBhZ2VudHMnLFxuICAgICAgICBpbnRlcmFjdGl2ZTogb3B0aW9ucy5pbnRlcmFjdGl2ZSxcbiAgICAgICAgbWFwT3V0cHV0OiAoX2FnZW50LCBvdXRwdXQpID0+IChjb250YWluc05vQ29uY2VyblNlbnRlbmNlKG91dHB1dCkgPyB1bmRlZmluZWQgOiBvdXRwdXQpLFxuICAgICAgfSlcbiAgICA6IHJ1bkFnZW50Q29tbWFuZChtb2RlLCBwcm9tcHQsIG9wdGlvbnMpO1xufVxuXG5hc3luYyBmdW5jdGlvbiByZWFkUmV2aWV3VmVyaWZpZWRGYWN0cygpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBpZiAocHJvY2Vzc1N0ZGluLmlzVFRZKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRTdGRpblRleHQoKTtcbiAgcmV0dXJuIGlucHV0Lmxlbmd0aCA+IDAgPyBpbnB1dCA6IHVuZGVmaW5lZDtcbn1cblxuYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCh7XG4gIG5hbWU6ICdwbGFuJyxcbiAgZGVzY3JpcHRpb246ICdSdW4gcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlIHdpdGggdGhlIHNlbGVjdGVkIGFnZW50JyxcbiAgb3B0aW9uRGVzY3JpcHRpb246ICdVc2UgYSBwbGFubmluZyBhZ2VudCcsXG4gIGNob2ljZXM6IFsnYWxsJywgJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcsXG4gIHJ1bjogKG1vZGUsIGlzc3VlUmVmZXJlbmNlLCBvcHRpb25zKSA9PlxuICAgIG1vZGUgPT09ICdhbGwnXG4gICAgICA/IHJ1bkFsbEFnZW50Q29tbWFuZHMoYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSksIHtcbiAgICAgICAgICBhbGxBZ2VudHNMYWJlbDogJ3BsYW5uaW5nIGFnZW50cycsXG4gICAgICAgICAgaW50ZXJhY3RpdmU6IG9wdGlvbnMuaW50ZXJhY3RpdmUsXG4gICAgICAgIH0pXG4gICAgICA6IHJ1bkFnZW50Q29tbWFuZChtb2RlLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSwgb3B0aW9ucyksXG59KTtcblxuYWRkQWdlbnRDb21tYW5kKCdwbGFuLWNvZGV4JywgJ1J1biBDb2RleCBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChpc3N1ZVJlZmVyZW5jZSwgb3B0aW9ucykgPT5cbiAgICBydW5BZ2VudENvbW1hbmQoJ2NvZGV4JywgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSksIG9wdGlvbnMpLFxufSk7XG5hZGRBZ2VudENvbW1hbmQoJ3BsYW4tY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChpc3N1ZVJlZmVyZW5jZSwgb3B0aW9ucykgPT5cbiAgICBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpLCBvcHRpb25zKSxcbn0pO1xuYWRkQWdlbnRDb21tYW5kKCdwbGFuLWdlbWluaScsICdSdW4gR2VtaW5pIENMSSBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChpc3N1ZVJlZmVyZW5jZSwgb3B0aW9ucykgPT5cbiAgICBydW5BZ2VudENvbW1hbmQoJ2dlbWluaScsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpLCBvcHRpb25zKSxcbn0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdzY3JlZW5zaG90JylcbiAgLmRlc2NyaXB0aW9uKCdUYWtlIGEgc2NyZWVuc2hvdCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCB2aWEgcGxheXdyaWdodC1jbGknKVxuICAuYXJndW1lbnQoJzxpbml0aWFsLXVybD4nLCAnSW5pdGlhbCBVUkwgdG8gb3BlbiBiZWZvcmUgbmF2aWdhdGluZycpXG4gIC5hcmd1bWVudCgnPHBhZ2UtbmFtZT4nLCAnUGFnZSBuYW1lIHRvIG5hdmlnYXRlIHRvIGZyb20gdGhlIGluaXRpYWwgcGFnZScpXG4gIC5hcmd1bWVudCgnPGRlc2NyaXB0aW9uPicsICdEZXNjcmlwdGlvbiBvZiB0aGUgcGFydCB0byBjYXB0dXJlIGluIHRoZSBzY3JlZW5zaG90JylcbiAgLmFkZE9wdGlvbihcbiAgICBuZXcgT3B0aW9uKCctLWFnZW50IDxhZ2VudD4nLCAnVXNlIGEgc2NyZWVuc2hvdCBhZ2VudCcpLmNob2ljZXMoWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10pLm1ha2VPcHRpb25NYW5kYXRvcnkoKVxuICApXG4gIC5vcHRpb24oJy0taW50ZXJhY3RpdmUnLCAnUnVuIHRoZSBzZWxlY3RlZCBhZ2VudCB0aHJvdWdoIGl0cyBpbnRlcmFjdGl2ZSB0ZXJtaW5hbCBVSScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihcbiAgICBhc3luYyAoXG4gICAgICBpbml0aWFsVXJsOiBzdHJpbmcsXG4gICAgICBwYWdlTmFtZTogc3RyaW5nLFxuICAgICAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgICAgIG9wdGlvbnM6IHsgYWdlbnQ6ICdjb2RleCcgfCAnY2xhdWRlJyB8ICdnZW1pbmknOyBpbnRlcmFjdGl2ZT86IGJvb2xlYW4gfVxuICAgICkgPT4ge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoXG4gICAgICAgIGF3YWl0IHJ1bkFnZW50Q29tbWFuZChvcHRpb25zLmFnZW50LCBidWlsZFNjcmVlbnNob3RQcm9tcHQoaW5pdGlhbFVybCwgcGFnZU5hbWUsIGRlc2NyaXB0aW9uKSwgb3B0aW9ucylcbiAgICAgICk7XG4gICAgfVxuICApO1xuXG5hZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kKHtcbiAgbmFtZTogJ3NpbXBsaWZ5JyxcbiAgZGVzY3JpcHRpb246ICdSdW4gUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2ggd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQnLFxuICBvcHRpb25EZXNjcmlwdGlvbjogJ1VzZSBhIHNpbXBsaWZ5IGFnZW50JyxcbiAgY2hvaWNlczogWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIHJ1bjogKGFnZW50LCBfYXJndW1lbnQsIG9wdGlvbnMpID0+IHJ1bkFnZW50Q29tbWFuZChhZ2VudCwgYnVpbGRTaW1wbGlmeVByb21wdCgpLCBvcHRpb25zKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWNvZGV4JywgJ1J1biBDb2RleCBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsIChvcHRpb25zKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NvZGV4JywgYnVpbGRTaW1wbGlmeVByb21wdCgpLCBvcHRpb25zKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgnc2ltcGxpZnktY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsIChvcHRpb25zKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSwgb3B0aW9ucylcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWdlbWluaScsICdSdW4gR2VtaW5pIENMSSBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsIChvcHRpb25zKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2dlbWluaScsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSwgb3B0aW9ucylcbik7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ29wZW4tcHInKVxuICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIHB1bGwgcmVxdWVzdCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoJylcbiAgLmFyZ3VtZW50KCc8dGl0bGU+JywgJ1B1bGwgcmVxdWVzdCB0aXRsZScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAodGl0bGU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZWFkU3RkaW5UZXh0KCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgb3BlblByKHsgYm9keTogYm9keSB8fCB1bmRlZmluZWQsIHRpdGxlIH0pO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAke291dHB1dH1cXG5gKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3VwZGF0ZS1wcicpXG4gIC5kZXNjcmlwdGlvbignVXBkYXRlIHRoZSBjdXJyZW50IHB1bGwgcmVxdWVzdCB0aXRsZSBhbmQgYm9keScpXG4gIC5hcmd1bWVudCgnPHRpdGxlPicsICdQdWxsIHJlcXVlc3QgdGl0bGUnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKHRpdGxlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVhZFJlcXVpcmVkU3RkaW5UZXh0KCdFcnJvcjogUFIgYm9keSBpbnB1dCBpcyByZXF1aXJlZCBvbiBzdGRpbicpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHVwZGF0ZVByKHsgYm9keSwgdGl0bGUgfSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7b3V0cHV0fVxcbmApO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnY2hlY2stcHItY2knKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgdGhlIGxhdGVzdCB0ZXN0LXJlbGF0ZWQgQ0kgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja1ByQ2koKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShyZXN1bHQub3V0cHV0KTtcbiAgICBwcm9jZXNzLmV4aXQocmVzdWx0LmV4aXRDb2RlKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2ZldGNoLWlzc3VlJylcbiAgLmRlc2NyaXB0aW9uKCdGZXRjaCBhbiBpc3N1ZSBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBhcyBZQU1MJylcbiAgLmFyZ3VtZW50KCc8aXNzdWU+JywgJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChpc3N1ZVJlZmVyZW5jZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlUmVmZXJlbmNlKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnZmV0Y2gtcHInKVxuICAuZGVzY3JpcHRpb24oJ0ZldGNoIGEgcHVsbCByZXF1ZXN0IGJvZHkgYW5kIHRpbWVsaW5lIG1lc3NhZ2VzIGFzIFlBTUwsIGV4Y2x1ZGluZyBpbmxpbmUgY29tbWVudHMnKVxuICAuYXJndW1lbnQoJ1twcl0nLCAnR2l0SHViIHB1bGwgcmVxdWVzdCBudW1iZXIgb3IgVVJMOyBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBicmFuY2ggcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChwclJlZmVyZW5jZT86IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZldGNoUHJNZXNzYWdlcyhwclJlZmVyZW5jZSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2xpc3QtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBsaXN0UHJSZXZpZXdUaHJlYWRzKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3Jlc29sdmUtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ1JlcGx5IHRvIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMgYW5kIHJlc29sdmUgdGhlbScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVwbGllcyA9IGF3YWl0IHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxuYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHByb2Nlc3MuYXJndik7XG5cbmZ1bmN0aW9uIGFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQ8VE1vZGUgZXh0ZW5kcyBzdHJpbmc+KGNvbmZpZzoge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIG9wdGlvbkRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNob2ljZXM6IFtUTW9kZSwgLi4uVE1vZGVbXV07XG4gIGFyZ3VtZW50TmFtZT86IHN0cmluZztcbiAgYXJndW1lbnREZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcnVuOiAobW9kZTogVE1vZGUsIGFyZ3VtZW50OiBzdHJpbmcsIG9wdGlvbnM6IEludGVyYWN0aXZlQ29tbWFuZE9wdGlvbnMpID0+IFByb21pc2U8c3RyaW5nPjtcbn0pOiB2b2lkIHtcbiAgY29uc3QgY29tbWFuZCA9IHByb2dyYW0uY29tbWFuZChjb25maWcubmFtZSkuZGVzY3JpcHRpb24oY29uZmlnLmRlc2NyaXB0aW9uKS5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSk7XG4gIGlmIChjb25maWcuYXJndW1lbnROYW1lKSB7XG4gICAgY29tbWFuZC5hcmd1bWVudChjb25maWcuYXJndW1lbnROYW1lLCBjb25maWcuYXJndW1lbnREZXNjcmlwdGlvbik7XG4gIH1cblxuICBjb21tYW5kXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFnZW50IDxhZ2VudD4nLCBjb25maWcub3B0aW9uRGVzY3JpcHRpb24pLmNob2ljZXMoY29uZmlnLmNob2ljZXMpLm1ha2VPcHRpb25NYW5kYXRvcnkoKSlcbiAgICAub3B0aW9uKCctLWludGVyYWN0aXZlJywgJ1J1biB0aGUgc2VsZWN0ZWQgYWdlbnQgdGhyb3VnaCBpdHMgaW50ZXJhY3RpdmUgdGVybWluYWwgVUknKVxuICAgIC5hY3Rpb24oYXN5bmMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgICAgY29uc3QgW2FyZ3VtZW50T3JPcHRpb25zLCBtYXliZU9wdGlvbnNdID0gYXJncyBhcyBbXG4gICAgICAgIHN0cmluZyB8IHsgYWdlbnQ6IFRNb2RlOyBpbnRlcmFjdGl2ZT86IGJvb2xlYW4gfSxcbiAgICAgICAgeyBhZ2VudDogVE1vZGU7IGludGVyYWN0aXZlPzogYm9vbGVhbiB9IHwgdW5kZWZpbmVkLFxuICAgICAgXTtcbiAgICAgIGNvbnN0IGFyZ3VtZW50ID0gdHlwZW9mIGFyZ3VtZW50T3JPcHRpb25zID09PSAnc3RyaW5nJyA/IGFyZ3VtZW50T3JPcHRpb25zIDogJyc7XG4gICAgICBjb25zdCBvcHRpb25zID0gKHR5cGVvZiBhcmd1bWVudE9yT3B0aW9ucyA9PT0gJ3N0cmluZycgPyBtYXliZU9wdGlvbnMgOiBhcmd1bWVudE9yT3B0aW9ucykgYXMge1xuICAgICAgICBhZ2VudDogVE1vZGU7XG4gICAgICAgIGludGVyYWN0aXZlPzogYm9vbGVhbjtcbiAgICAgIH07XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBjb25maWcucnVuKG9wdGlvbnMuYWdlbnQsIGFyZ3VtZW50LCBvcHRpb25zKSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEFnZW50Q29tbWFuZChcbiAgbmFtZTogc3RyaW5nLFxuICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICBjb25maWdPclJ1bjpcbiAgICB8ICgob3B0aW9uczogSW50ZXJhY3RpdmVDb21tYW5kT3B0aW9ucykgPT4gUHJvbWlzZTxzdHJpbmc+KVxuICAgIHwge1xuICAgICAgICBhcmd1bWVudE5hbWU6IHN0cmluZztcbiAgICAgICAgYXJndW1lbnREZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICAgICAgcnVuOiAoYXJndW1lbnQ6IHN0cmluZywgb3B0aW9uczogSW50ZXJhY3RpdmVDb21tYW5kT3B0aW9ucykgPT4gUHJvbWlzZTxzdHJpbmc+O1xuICAgICAgfVxuKTogdm9pZCB7XG4gIGNvbnN0IGNvbW1hbmQgPSBwcm9ncmFtXG4gICAgLmNvbW1hbmQobmFtZSlcbiAgICAuZGVzY3JpcHRpb24oZGVzY3JpcHRpb24pXG4gICAgLm9wdGlvbignLS1pbnRlcmFjdGl2ZScsICdSdW4gdGhlIHNlbGVjdGVkIGFnZW50IHRocm91Z2ggaXRzIGludGVyYWN0aXZlIHRlcm1pbmFsIFVJJylcbiAgICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpO1xuXG4gIGlmICh0eXBlb2YgY29uZmlnT3JSdW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb21tYW5kLmFjdGlvbihhc3luYyAob3B0aW9uczogSW50ZXJhY3RpdmVDb21tYW5kT3B0aW9ucykgPT4ge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnT3JSdW4ob3B0aW9ucykpO1xuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbW1hbmRcbiAgICAuYXJndW1lbnQoY29uZmlnT3JSdW4uYXJndW1lbnROYW1lLCBjb25maWdPclJ1bi5hcmd1bWVudERlc2NyaXB0aW9uKVxuICAgIC5hY3Rpb24oYXN5bmMgKGFyZ3VtZW50OiBzdHJpbmcsIG9wdGlvbnM6IEludGVyYWN0aXZlQ29tbWFuZE9wdGlvbnMpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IGNvbmZpZ09yUnVuLnJ1bihhcmd1bWVudCwgb3B0aW9ucykpO1xuICAgIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5Qcm9tcHRBZ2VudENvbW1hbmQoXG4gIGFnZW50OiAnY29kZXgnIHwgJ2NsYXVkZScgfCAnZ2VtaW5pJyxcbiAgcHJvbXB0OiBzdHJpbmcsXG4gIG9wdGlvbnM6IEludGVyYWN0aXZlQ29tbWFuZE9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGV4dHJhY3RNYXJrZG93bkNvZGVCbG9jayhhd2FpdCBydW5BZ2VudENvbW1hbmQoYWdlbnQsIGJ1aWxkQWdlbnRQcm9tcHQocHJvbXB0KSwgb3B0aW9ucyksIHtcbiAgICBmYWxsYmFja1RvT3V0cHV0OiBvcHRpb25zLmludGVyYWN0aXZlID09PSB0cnVlLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gYnVpbGRBZ2VudFByb21wdChwcm9tcHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJHtwcm9tcHR9XG5cblJlcG9ydCBvbiB0aGUgcmVzdWx0IHdpdGggYSBtYXJrZG93biBjb2RlIGJsb2NrIHdpdGggdHJpcGxlIGJhY2t0aWNrcy5gO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0TWFya2Rvd25Db2RlQmxvY2sob3V0cHV0OiBzdHJpbmcsIG9wdGlvbnM6IHsgZmFsbGJhY2tUb091dHB1dD86IGJvb2xlYW4gfSA9IHt9KTogc3RyaW5nIHtcbiAgY29uc3QgY29kZUJsb2NrTWF0Y2hlcyA9IFsuLi5vdXRwdXQubWF0Y2hBbGwoL2BgYFteXFxuYF0qXFxuPyhbXFxzXFxTXSo/KWBgYC9nKV07XG4gIGNvbnN0IGxhc3RDb2RlQmxvY2tDb250ZW50ID0gY29kZUJsb2NrTWF0Y2hlcy5hdCgtMSk/LlsxXTtcbiAgaWYgKCFsYXN0Q29kZUJsb2NrQ29udGVudCkge1xuICAgIGlmIChvcHRpb25zLmZhbGxiYWNrVG9PdXRwdXQpIHtcbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcignQWdlbnQgb3V0cHV0IGRpZCBub3QgY29udGFpbiBhIG1hcmtkb3duIGNvZGUgYmxvY2sgd2l0aCB0cmlwbGUgYmFja3RpY2tzLicpO1xuICB9XG4gIHJldHVybiBsYXN0Q29kZUJsb2NrQ29udGVudDtcbn1cbiJdLCJuYW1lcyI6WyJERUZBVUxUX1BST0NFU1NfVElNRU9VVF9NUyIsIlBST0NFU1NfQ0xFQU5VUF9TSUdOQUxTIiwiYWN0aXZlUHJvY2Vzc2VzIiwiU2V0IiwiY2xlYW51cEhhbmRsZXJzSW5zdGFsbGVkIiwicnVuQ29tbWFuZFdpdGhQcm9ncmVzcyIsIl94IiwiX3gyIiwiX3J1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MiLCJhcHBseSIsInRoaXMiLCJhcmd1bWVudHMiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvciIsIm0iLCJfY2FsbGVlIiwiY29tbWFuZCIsIm9wdGlvbnMiLCJfY29tbWFuZCQiLCJwcm9jIiwicHJvY2Vzc1RpbWVvdXQiLCJzdG9wV2FpdFByb2dyZXNzIiwiY29tbWFuZExvZ2dlciIsIl95aWVsZCRQcm9taXNlJGFsbCIsIl95aWVsZCRQcm9taXNlJGFsbDIiLCJzdGRvdXQiLCJzdGRlcnIiLCJleGl0Q29kZSIsIm91dHB1dCIsInciLCJfY29udGV4dCIsInAiLCJuIiwic3Bhd24iLCJzbGljZSIsImRldGFjaGVkIiwic3RkaW8iLCJjcmVhdGVQcm9jZXNzVGltZW91dCIsInRpbWVvdXRNcyIsImNyZWF0ZVdhaXRQcm9ncmVzcyIsIndhaXRNZXNzYWdlIiwid2FpdEludGVydmFsU2Vjb25kcyIsImNyZWF0ZUNvbW1hbmRMb2dnZXIiLCJsb2dGaWxlUGF0aCIsInYiLCJQcm9taXNlIiwiYWxsIiwic3RyZWFtVG9UZXh0IiwiY2h1bmsiLCJ3cml0ZSIsInJlc29sdmUiLCJyZWplY3QiLCJvbmNlIiwiY29kZSIsIl9zbGljZWRUb0FycmF5IiwidGltZWRPdXQiLCJFcnJvciIsInRpbWVvdXRFcnJvck1lc3NhZ2UiLCJjb25jYXQiLCJhIiwiam9pbiIsImNsb3NlIiwiY2xlYXIiLCJmIiwibWVzc2FnZSIsImZvcm1hdER1cmF0aW9uIiwibGVuZ3RoIiwibWlsbGlzZWNvbmRzIiwiZm9yY2VLaWxsVGltZXIiLCJhZGQiLCJfc3RlcDIiLCJfaXRlcmF0b3IyIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfbG9vcCIsInNpZ25hbCIsInZhbHVlIiwicHJvY2VzcyIsIl9zdGVwMyIsIl9pdGVyYXRvcjMiLCJzIiwiZG9uZSIsImtpbGxQcm9jZXNzIiwiZXJyIiwiZSIsImV4aXQiLCJzaWduYWxOdW1iZXIiLCJpbnN0YWxsQ2xlYW51cEhhbmRsZXJzIiwidGltZW91dCIsInNldFRpbWVvdXQiLCJ1bnJlZiIsImNsZWFyVGltZW91dCIsInBpZCIsImtpbGwiLCJfdW51c2VkIiwiX3gzIiwiX3g0IiwiX3N0cmVhbVRvVGV4dCIsIl9jYWxsZWUyIiwic3RyZWFtIiwib25DaHVuayIsImNodW5rcyIsImRlY29kZXIiLCJfaXRlcmF0b3JBYnJ1cHRDb21wbGV0aW9uIiwiX2RpZEl0ZXJhdG9yRXJyb3IiLCJfaXRlcmF0b3JFcnJvciIsIl9pdGVyYXRvciIsIl9zdGVwIiwiY2h1bmtUZXh0IiwiZmluYWxDaHVuayIsIl90IiwiX2NvbnRleHQyIiwiVGV4dERlY29kZXIiLCJfYXN5bmNJdGVyYXRvciIsIm5leHQiLCJkZWNvZGUiLCJVaW50OEFycmF5IiwicHVzaCIsIndyaXRlUHJvZ3Jlc3MiLCJkb3RDb3VudCIsInRpbWVyIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwiX3g1IiwiX2NyZWF0ZUNvbW1hbmRMb2dnZXIiLCJfY2FsbGVlNiIsIndhcm4iLCJfdDIiLCJfY29udGV4dDYiLCJfY2xvc2UiLCJfY2FsbGVlMyIsIl9jb250ZXh0MyIsImVycm9yIiwiU3RyaW5nIiwibWtkaXIiLCJkaXJuYW1lIiwicmVjdXJzaXZlIiwiY3JlYXRlV3JpdGVTdHJlYW0iLCJmbGFncyIsIm9uIiwid3JpdGFibGUiLCJfY2xvc2UyIiwiX2NhbGxlZTQiLCJfY29udGV4dDQiLCJlbmQiLCJfY2xvc2UzIiwiX2NhbGxlZTUiLCJfY29udGV4dDUiLCJOT19DT05DRVJOX01FU1NBR0UiLCJBR0VOVF9OQU1FUyIsIkNPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVgiLCJSZWdFeHAiLCJERUZBVUxUX0FMTF9BR0VOVF9DT01NQU5EX09QVElPTlMiLCJhbGxBZ2VudHNMYWJlbCIsIlRFUk1JTkFMX0JFTEwiLCJmcm9tQ29kZVBvaW50IiwiVEVSTUlOQUxfRVNDQVBFIiwiVEVSTUlOQUxfQ1NJX0NVUlNPUl9GT1JXQVJEX1JFR0VYIiwiVEVSTUlOQUxfQ1NJX1JFR0VYIiwiVEVSTUlOQUxfT1NDX1JFR0VYIiwiR0VNSU5JX01PREVMIiwiSU5URVJBQ1RJVkVfUkVBRFlfUEFUVEVSTlMiLCJJTlRFUkFDVElWRV9TRVRVUF9TQ1JFRU5TIiwiaW5wdXQiLCJrZXkiLCJwYXR0ZXJuIiwicnVuQWxsQWdlbnRDb21tYW5kcyIsIl9ydW5BbGxBZ2VudENvbW1hbmRzIiwicHJvbXB0IiwicmVzb2x2ZWRQcm9tcHQiLCJhZ2VudE91dHB1dHNXaXRoU2tpcHBlZFJlc3VsdHMiLCJhZ2VudE91dHB1dHMiLCJ3YWl0TWVzc2FnZUZvciIsIm1hcCIsImFnZW50IiwiX29wdGlvbnMkbWFwT3V0cHV0IiwiX29wdGlvbnMiLCJ0cmltbWVkT3V0cHV0IiwibWFwcGVkT3V0cHV0IiwicnVuQWdlbnRDb21tYW5kIiwiaW50ZXJhY3RpdmUiLCJ0cmltIiwibWFwT3V0cHV0IiwiY2FsbCIsInVuZGVmaW5lZCIsImZvcm1hdEFnZW50U2VjdGlvbiIsInN1bW1hcml6ZUFnZW50T3V0cHV0IiwiYWdlbnRGYWlsdXJlTWVzc2FnZSIsImZpbHRlciIsIl9ydW5BZ2VudENvbW1hbmQiLCJfb3B0aW9ucyR3YWl0TWVzc2FnZTIiLCJfb3B0aW9ucyR3YWl0TWVzc2FnZSIsIl90NCIsIl90NSIsIl90NiIsIl90NyIsIl90OCIsInJ1bkludGVyYWN0aXZlQWdlbnRDb21tYW5kIiwiZGlzcGxheUFnZW50TmFtZSIsImNyZWF0ZUFnZW50Q29tbWFuZCIsImFnZW50TG9nRmlsZVBhdGgiLCJfeDYiLCJfeDciLCJfeDgiLCJfcnVuSW50ZXJhY3RpdmVBZ2VudENvbW1hbmQiLCJyZXN1bHRSZWNlaXZlciIsInRlcm1pbmFsIiwidGVybWluYWxSZWFkeSIsIl9wcm9jZXNzJGVudiRURVJNIiwiZXhpdFByb21pc2UiLCJyZXN1bHQiLCJfcHJvY2Vzc1RpbWVvdXQiLCJfdGVybWluYWwiLCJfcHJvYzIiLCJfcHJvYzMiLCJfcHJvY2Vzc1RpbWVvdXQyIiwiX3Q5IiwiY3JlYXRlQWdlbnRSZXN1bHRSZWNlaXZlciIsImNyZWF0ZVRlcm1pbmFsUmVhZHlTaWduYWwiLCJCdW4iLCJjcmVhdGVJbnRlcmFjdGl2ZUFnZW50Q29tbWFuZCIsImNhbGxiYWNrVXJsIiwiZW52IiwiX29iamVjdFNwcmVhZCIsIlRFUk0iLCJjb2xzIiwicm93cyIsImRhdGEiLCJjdXJyZW50VGVybWluYWwiLCJvYnNlcnZlIiwiX3Byb2MiLCJleGl0ZWQiLCJ0aGVuIiwicmFjZSIsIndhaXQiLCJzbGVlcCIsInN1Ym1pdEludGVyYWN0aXZlUHJvbXB0IiwiYnVpbGRJbnRlcmFjdGl2ZUFnZW50UHJvbXB0IiwiYWxsU2V0dGxlZCIsIl94OSIsIl94MCIsIl9zdWJtaXRJbnRlcmFjdGl2ZVByb21wdCIsImJyYWNrZXRlZFBhc3RlIiwiX3gxIiwiX3NsZWVwIiwiX2NhbGxlZTciLCJfY29udGV4dDciLCJyZXNvbHZlUmVhZHkiLCJidWZmZXIiLCJoYW5kbGVkU2V0dXBBY3Rpb25zIiwicmVhZHkiLCJyZWFkeVByb21pc2UiLCJmYWxsYmFja1JlYWR5VGltZXIiLCJpbnRlcmFjdGl2ZVJlYWR5VGltZW91dE1zIiwibm9ybWFsaXplZEJ1ZmZlciIsInJlcGxhY2VBbGwiLCJfbWF0Y2giLCJjb3VudCIsInJlcGVhdCIsIk51bWJlciIsIm5vcm1hbGl6ZVRlcm1pbmFsT3V0cHV0Iiwic2V0dXBBY3Rpb24iLCJnZW5lcmljQWN0aW9uIiwiZmluZCIsInNjcmVlbiIsInRlc3QiLCJnZW5lcmljSW50ZXJhY3RpdmVTZXR1cEFjdGlvbiIsImludGVyYWN0aXZlU2V0dXBBY3Rpb24iLCJoYXMiLCJnZW5lcmljUmVhZHlQYXR0ZXJuIiwic291cmNlIiwiaW50ZXJhY3RpdmVSZWFkeVBhdHRlcm4iLCJ0ZXh0IiwiYnVpbGRJbnRlcmFjdGl2ZUNhbGxiYWNrSW5zdHJ1Y3Rpb24iLCJyZXNvbHZlUmVzdWx0IiwicmVqZWN0UmVzdWx0Iiwic2VydmVyIiwic2VydmUiLCJob3N0bmFtZSIsInBvcnQiLCJmZXRjaCIsInJlcXVlc3QiLCJ1cmwiLCJVUkwiLCJtZXRob2QiLCJwYXRobmFtZSIsIlJlc3BvbnNlIiwic3RhdHVzIiwicGFyc2VBZ2VudFJlc3VsdFJlcXVlc3QiLCJ0b1N0cmluZyIsInN0b3AiLCJfeDEwIiwiX3BhcnNlQWdlbnRSZXN1bHRSZXF1ZXN0IiwiX2NhbGxlZTgiLCJfcmVxdWVzdCRoZWFkZXJzJGdldCIsInBheWxvYWQiLCJfY29udGV4dDgiLCJoZWFkZXJzIiwiZ2V0IiwiaW5jbHVkZXMiLCJqc29uIiwiVHlwZUVycm9yIiwiY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZSIsImJvZHkiLCJ0YXJnZXQiLCJub3ciLCJEYXRlIiwiX21hcDIiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwidHdvRGlnaXRzIiwibW9udGgiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwicGFkU3RhcnQiLCJERVBFTkRFTkNZX1NFQ1RJT05TIiwiSUdOT1JFRF9ESVJFQ1RPUklFUyIsIlVQREFURV9DT01NQU5EIiwidXBkYXRlQnVuRGVwZW5kZW5jaWVzIiwiX3VwZGF0ZUJ1bkRlcGVuZGVuY2llcyIsImN3ZCIsIndvcmtzcGFjZURpcmVjdG9yaWVzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImRpcmVjdG9yeSIsImZpbmRXb3Jrc3BhY2VEaXJlY3RvcmllcyIsImFzc2VydE5vQ2F0YWxvZ0RlcGVuZGVuY2llcyIsInVwZGF0ZVBhY2thZ2UiLCJfZmluZFdvcmtzcGFjZURpcmVjdG9yaWVzIiwicGF0dGVybnMiLCJkaXJlY3RvcmllcyIsImluY2x1ZGVkIiwiZXhjbHVkZWQiLCJfaXRlcmF0b3I1IiwiX3N0ZXA1IiwiaXNFeGNsdXNpb24iLCJtYXRjaGVzIiwiX2l0ZXJhdG9yNiIsIl9zdGVwNiIsIl90MyIsIndvcmtzcGFjZVBhdHRlcm5zIiwicmVhZFBhY2thZ2VKc29uIiwibGlzdFdvcmtzcGFjZUNhbmRpZGF0ZURpcmVjdG9yaWVzIiwic3RhcnRzV2l0aCIsImV4cGFuZFdvcmtzcGFjZVBhdHRlcm4iLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJ0b1NvcnRlZCIsImxlZnQiLCJyaWdodCIsImxvY2FsZUNvbXBhcmUiLCJfcmVmIiwiX3dvcmtzcGFjZXMkcGFja2FnZXMiLCJfcmVmJHdvcmtzcGFjZXMiLCJ3b3Jrc3BhY2VzIiwiQXJyYXkiLCJpc0FycmF5IiwicGFja2FnZXMiLCJfbGlzdFdvcmtzcGFjZUNhbmRpZGF0ZURpcmVjdG9yaWVzIiwicm9vdHMiLCJfaXRlcmF0b3I3IiwiX3N0ZXA3IiwiX3N0ZXA3JHZhbHVlIiwibWF4RGVwdGgiLCJyb290IiwiX2l0ZXJhdG9yOCIsIl9zdGVwOCIsIndvcmtzcGFjZUNhbmRpZGF0ZVJvb3RzIiwiaXNEaXJlY3RvcnkiLCJsaXN0RGlyZWN0b3JpZXMiLCJNYXAiLCJfaSIsIl9jYW5kaWRhdGVSb290cyIsImNhbmRpZGF0ZVJvb3RzIiwic2V0IiwibWVyZ2VkTWF4RGVwdGgiLCJlbnRyaWVzIiwiX3JlZjIiLCJfcmVmMyIsInNvbWUiLCJfcmVmNCIsInBhcmVudE1heERlcHRoIiwiY2hpbGRNYXhEZXB0aCIsIl9yZWY1Iiwib3RoZXJSb290Iiwib3RoZXJNYXhEZXB0aCIsImhhc1BhcmVudFJvb3QiLCJicmFjZUV4cGFuZCIsIm5vcm1hbGl6ZVdvcmtzcGFjZVBhdHRlcm4iLCJleHBhbmRlZFBhdHRlcm4iLCJ3b3Jrc3BhY2VQYXR0ZXJuTWF4RGVwdGgiLCJjYW5kaWRhdGVSb290IiwiTWF0aCIsIm1heCIsInNlZ21lbnRzIiwic3BsaXQiLCJzZWdtZW50IiwiaGFzR2xvYk1hZ2ljIiwicGF0aERlcHRoIiwiX2lzRGlyZWN0b3J5IiwiZGlyZWN0b3J5U3RhdCIsInN0YXQiLCJfbGlzdERpcmVjdG9yaWVzIiwiX2l0ZXJhdG9yOSIsIl9zdGVwOSIsImVudHJ5IiwiY2hpbGREaXJlY3RvcnkiLCJfdDAiLCJyZWFkZGlyIiwid2l0aEZpbGVUeXBlcyIsIm5hbWUiLCJzZXAiLCJwYXRoIiwiX2V4cGFuZFdvcmtzcGFjZVBhdHRlcm4iLCJtYXRjaGVyIiwiX2l0ZXJhdG9yMCIsIl9zdGVwMCIsIl90MSIsIl90MTAiLCJnbG9iUGF0dGVybk1hdGNoZXIiLCJoYXNQYWNrYWdlSnNvbiIsIm5vcm1hbGl6ZWQiLCJub3JtYWxpemVQYXRoIiwicmVwbGFjZSIsIm1pbmltYXRjaCIsImRvdCIsIl94MTEiLCJfeDEyIiwiX2hhc1BhY2thZ2VKc29uIiwicGFja2FnZUpzb25TdGF0IiwiaXNGaWxlIiwiX3gxMyIsIl94MTQiLCJfYXNzZXJ0Tm9DYXRhbG9nRGVwZW5kZW5jaWVzIiwiY2F0YWxvZ0RlcGVuZGVuY2llcyIsIl9pMyIsIl9hcnIiLCJwYWNrYWdlSnNvbiIsIl9pdGVyYXRvcjEiLCJfc3RlcDEiLCJkZXBlbmRlbmN5IiwiY2F0YWxvZ0RlcGVuZGVuY3lOYW1lcyIsIl94MTUiLCJfcmVhZFBhY2thZ2VKc29uIiwiX2NhbGxlZTkiLCJwYWNrYWdlSnNvblBhdGgiLCJfdDEyIiwiX3QxMyIsIl9jb250ZXh0OSIsIkpTT04iLCJyZWFkRmlsZSIsInBhcnNlIiwibmFtZXMiLCJkZXBlbmRlbmNpZXMiLCJfaTIiLCJfT2JqZWN0JGVudHJpZXMiLCJPYmplY3QiLCJfT2JqZWN0JGVudHJpZXMkX2kiLCJfeDE2IiwiX3gxNyIsIl91cGRhdGVQYWNrYWdlIiwiX2NhbGxlZTAiLCJsYWJlbCIsIl9jb250ZXh0MCIsInJ1bkNvbW1hbmQiLCJfeDE4IiwiX3gxOSIsIl9ydW5Db21tYW5kIiwiX2NhbGxlZTEiLCJfY29udGV4dDEiLCJyZWxhdGl2ZSIsInlhbWxTdHJpbmdpZnlPcHRpb25zIiwiYmxvY2tRdW90ZSIsImxpbmVXaWR0aCIsInByb2dyZXNzIiwicHJvY2Vzc1N0ZGVyciIsImV4aXRXaXRoRXJyb3IiLCJyZWFkU3RkaW5UZXh0IiwiX3JlYWRTdGRpblRleHQiLCJwcm9jZXNzU3RkaW4iLCJpc1RUWSIsInJlYWRSZXF1aXJlZFN0ZGluVGV4dCIsIl9yZWFkUmVxdWlyZWRTdGRpblRleHQiLCJlcnJvck1lc3NhZ2UiLCJfb3B0aW9ucyRhbGxvd2VkRXhpdEMiLCJhbGxvd2VkRXhpdENvZGVzIiwiX3JldCIsImF0dGVtcHQiLCJfY29tbWFuZCQyIiwiZmFpbHVyZU1lc3NhZ2UiLCJyZXRyeSIsInN0ZGluRGF0YSIsInN0ZGluIiwiaXNUcmFuc2llbnRHaEZhaWx1cmUiLCJHSF9SRVRSWV9NQVhfQVRURU1QVFMiLCJkIiwiX3JlZ2VuZXJhdG9yVmFsdWVzIiwiZ2giLCJfZ2giLCJhcmdzIiwiZ2hBbGxvd0V4aXRDb2RlcyIsIl9naEFsbG93RXhpdENvZGVzIiwiY3VycmVudFJlcG9QYXJ0cyIsIl9jdXJyZW50UmVwb1BhcnRzIiwibmFtZVdpdGhPd25lck91dHB1dCIsIm5hbWVXaXRoT3duZXIiLCJfbmFtZVdpdGhPd25lciRzcGxpdCIsIl9uYW1lV2l0aE93bmVyJHNwbGl0MiIsIm93bmVyIiwiY3VycmVudFByTnVtYmVyIiwiX2N1cnJlbnRQck51bWJlciIsInByTnVtYmVyIiwiZ3JhcGhxbCIsIl9ncmFwaHFsIiwicXVlcnkiLCJ2YXJzIiwicmVzcG9uc2UiLCJlcnJvck1lc3NhZ2VzIiwiZXJyb3JzIiwiX2Vycm9yJG1lc3NhZ2UiLCJ5YW1sRHVtcCIsInN0cmluZ2lmeVlhbWwiLCJkZWVwQ29weSIsInN0cnVjdHVyZWRDbG9uZSIsInNwYXduU3luY1NhZmUiLCJfcmVzdWx0JHN0YXR1cyIsIl9yZXN1bHQkc3Rkb3V0IiwiX3Jlc3VsdCRzdGRlcnIiLCJzcGF3blN5bmMiLCJlbmNvZGluZyIsIlRFU1RfUkVMQVRFRF9QQVRURVJOIiwiV09SS0ZMT1dfUlVOX0pTT05fRklFTERTIiwiRkFJTEVEX0xPR19MSU5FX1BSRUZJWF9QQVRURVJOIiwicnRrQXZhaWxhYmxlIiwibm9vcCIsImxhdGVzdFByQ2lSZXN1bHRzIiwiX2xhdGVzdFByQ2lSZXN1bHRzIiwiX3N1bW1hcnkkcGFzcyIsIl9zdW1tYXJ5JGZhaWwiLCJfc3VtbWFyeSRwZW5kaW5nIiwiX3N1bW1hcnkkc2tpcHBpbmciLCJfc3VtbWFyeSRjYW5jZWwiLCJjaGVja3MiLCJyYXciLCJzdW1tYXJ5IiwiX2NoZWNrJGJ1Y2tldDIiLCJfc3VtbWFyeSRidWNrZXQiLCJjaGVjayIsImJ1Y2tldCIsIlN5bnRheEVycm9yIiwidG90YWwiLCJwYXNzIiwiZmFpbCIsInBlbmRpbmciLCJza2lwcGluZyIsImNhbmNlbCIsIndhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MiLCJfd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyIsInNsZWVwRm4iLCJsYXRlc3RDaVJlc3VsdHNGbiIsIndyaXRlUHJvZ3Jlc3NGbiIsImF0dGVtcHRzIiwiY2lSZXN1bHRzIiwiY2xhc3NpZmllZFJlc3VsdHMiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QyIiwiZmFpbGVkUmVzdWx0cyIsInJ1bm5pbmdSZXN1bHRzIiwic2xlZXBTZWNvbmRzIiwiY2xhc3NpZmllZExhdGVzdFJlc3VsdHMiLCJmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQiLCJrZXlzIiwibGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3ciLCJ3b3JrZmxvd0tleSIsIndvcmtmbG93IiwiZnJvbUVudHJpZXMiLCJsYXRlc3RBdHRlbXB0Q2hlY2tzIiwiZ3JvdXBzIiwid29ya2Zsb3dBdHRlbXB0S2V5IiwiZ3JvdXAiLCJsYXRlc3RHcm91cCIsInZhbHVlcyIsImN1cnJlbnRHcm91cCIsImxhdGVzdEdyb3VwVGltZXN0YW1wIiwibGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3ciLCJmaXJzdENoZWNrIiwibGF0ZXN0Q2hlY2siLCJfbGF0ZXN0QXR0ZW1wdENoZWNrcyIsImxhdGVzdENoZWNrVGltZXN0YW1wIiwiY2xhc3NpZmljYXRpb24iLCJ3b3JrZmxvd1Jlc3VsdENsYXNzaWZpY2F0aW9uIiwidGVzdFJlbGF0ZWRDaGVjayIsIndvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rIiwiX2xpbmskbWF0Y2giLCJsaW5rIiwibWF0Y2giLCJ3b3JrZmxvd1J1biIsIl93b3JrZmxvd1J1biIsInJ1bklkIiwicnVuSnNvbiIsImJ1Y2tldHMiLCJfY2hlY2skYnVja2V0IiwiX2NoZWNrJHN0YXJ0ZWRBdCIsInRpbWVzdGFtcCIsImNvbXBsZXRlZEF0Iiwic3RhcnRlZEF0IiwiX3NsZWVwU2Vjb25kcyIsInNlY29uZHMiLCJjaGVja1ByQ2kiLCJfY2hlY2tQckNpIiwibGF0ZXN0Q29tbWl0cyIsIl95aWVsZCR3YWl0Rm9yUnVubmluZyIsIl95aWVsZCR3YWl0Rm9yUnVubmluZzIiLCJ3YWl0QXR0ZW1wdHMiLCJ3YWl0VGltZWRPdXQiLCJjbGFzc2lmaWVkTGF0ZXN0IiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0MyIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDQiLCJsYXRlc3RQckNvbW1pdFN1bW1hcmllcyIsIndhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrcyIsInRlc3RfcmVsYXRlZF9jaGVja193YWl0X2F0dGVtcHRzIiwidGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfdGltZWRfb3V0IiwiX3JlZjYiLCJjb21wYWN0V29ya2Zsb3ciLCJjb21wYWN0V29ya2Zsb3dSZXN1bHQiLCJidWlsZEZhaWxlZFdvcmtmbG93RGV0YWlscyIsImZhaWxlZFdvcmtmbG93TG9nIiwiZmFpbGVkX3dvcmtmbG93cyIsInRlc3Rfd29ya2Zsb3dfb3V0cHV0IiwiX3JlZjciLCJfcmVmOCIsInJ1bm5pbmdfdGVzdF9yZWxhdGVkX3dvcmtmbG93cyIsInN1Y2Nlc3NmdWxDaU91dHB1dCIsImxhdGVzdCIsIl9sYXRlc3RQckNvbW1pdFN1bW1hcmllcyIsIl9yZXNwb25zZSRkYXRhJHJlcG9zaSIsIl9yZXNwb25zZSRkYXRhIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyMiIsIm51bWJlciIsInJlcG9zaXRvcnkiLCJwdWxsUmVxdWVzdCIsImNvbW1pdHMiLCJub2RlcyIsImZsYXRNYXAiLCJub2RlIiwiX25vZGUkY29tbWl0IiwiX25vZGUkY29tbWl0MiIsIl9ub2RlJGNvbW1pdDMiLCJkYXRlIiwic3RyaW5nT3JVbmRlZmluZWQiLCJjb21taXQiLCJjb21taXR0ZWREYXRlIiwiaGFzaCIsImFiYnJldmlhdGVkT2lkIiwidGl0bGUiLCJtZXNzYWdlSGVhZGxpbmUiLCJ0b1JldmVyc2VkIiwiZm9ybWF0TGF0ZXN0Q29tbWl0U2VjdGlvbiIsIl9jb21wYWN0V29ya2Zsb3dSZXN1bHQiLCJfc3RyaW5nT3JVbmRlZmluZWQiLCJydW4iLCJmYWlsZWRKb2IiLCJmYWlsZWRXb3JrZmxvd1J1bkpvYiIsImpvYiIsImpvYl91cmwiLCJmYWlsZWRfc3RlcCIsImZhaWxlZFdvcmtmbG93UnVuU3RlcE5hbWUiLCJydW5faWQiLCJydW5fdXJsIiwiYnJhbmNoIiwiaGVhZEJyYW5jaCIsInNoYSIsImhlYWRTaGEiLCJjb25jbHVzaW9uIiwiX2ZhaWxlZFdvcmtmbG93TG9nIiwibG9nIiwiZmFpbGVkX2xvZyIsInJlZmluZUZhaWxlZFdvcmtmbG93TG9nIiwic2FuaXRpemVkSW5wdXQiLCJzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nIiwic3RyaXBWVENvbnRyb2xDaGFyYWN0ZXJzIiwibGluZSIsImpvYk5hbWUiLCJfcnVuJGpvYnMkZmluZCIsImpvYnMiLCJfam9iJHN0ZXBzJGZpbmQkbmFtZSIsIl9qb2Ikc3RlcHMkZmluZCIsIl9qb2Ikc3RlcHMkZmluZDIiLCJzdGVwcyIsInN0ZXAiLCJjdXJyZW50QmFzZUJyYW5jaCIsIl9jdXJyZW50QmFzZUJyYW5jaCIsIl95aWVsZCRjdXJyZW50UHVsbFJlcSIsImN1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2giLCJjdXJyZW50RGVmYXVsdEJyYW5jaCIsIl9jdXJyZW50RGVmYXVsdEJyYW5jaCIsImRlZmF1bHRCcmFuY2giLCJyZXF1aXJlTm9uRW1wdHkiLCJfY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCIsImJhc2VCcmFuY2hPdXRwdXQiLCJiYXNlQnJhbmNoIiwiaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nIiwibm9ybWFsaXplSXNzdWVOdW1iZXIiLCJyZWZlcmVuY2UiLCJleHRyYWN0R2l0SHViUmVmZXJlbmNlTnVtYmVyIiwibm9ybWFsaXplUHJOdW1iZXIiLCJmZXRjaElzc3VlTWVzc2FnZXMiLCJfZmV0Y2hJc3N1ZU1lc3NhZ2VzIiwiaXNzdWVOdW1iZXIiLCJpc3N1ZSIsImlzc3VlTWVzc2FnZXMiLCJmZXRjaFByTWVzc2FnZXMiLCJfZmV0Y2hQck1lc3NhZ2VzIiwicmVzb2x2ZWRQck51bWJlciIsImN1cnJlbnRSZXBvUHVsbFJlcXVlc3RNZXNzYWdlcyIsInB1bGxfcmVxdWVzdCIsImZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSIsIl9mZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUiLCJwck51bWJlck91dHB1dCIsIl9jdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMiLCJfeWllbGQkY3VycmVudFJlcG9QYXIzIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyNCIsInByTWVzc2FnZXMiLCJyZWZlcmVuY2VUZXh0Iiwia2luZFNlZ21lbnQiLCJfaXNzdWVNZXNzYWdlcyIsIm1lc3NhZ2VzIiwiZmV0Y2hNZXRhZGF0YSIsIm5vdW4iLCJzZWxlY3RNZXRhZGF0YSIsInBhZ2luYXRlTWVzc2FnZXMiLCJzZWxlY3RDb25uZWN0aW9uIiwiX3Jlc3BvbnNlJGRhdGEyIiwiY29tbWVudHMiLCJtYXBOb2RlIiwiY29tbWVudE1lc3NhZ2UiLCJfcHJNZXNzYWdlcyIsImlzc3VlQ29tbWVudHMiLCJyZXZpZXdzIiwiX3Jlc3BvbnNlJGRhdGEzIiwicHJJc3N1ZUNvbW1lbnRzIiwicHJSZXZpZXdzIiwiY29tcGFyZU1lc3NhZ2VzQnlDcmVhdGVkQXQiLCJsZWZ0Q3JlYXRlZEF0IiwiY3JlYXRlZEF0IiwicmlnaHRDcmVhdGVkQXQiLCJfcHJJc3N1ZUNvbW1lbnRzIiwiX3Jlc3BvbnNlJGRhdGE0IiwiX3ByUmV2aWV3cyIsIl9yZXNwb25zZSRkYXRhNSIsInJldmlld01lc3NhZ2UiLCJfcGFnaW5hdGVNZXNzYWdlcyIsImNvbmZpZyIsImN1cnNvciIsIl9jb25uZWN0aW9uJHBhZ2VJbmZvJCIsImNvbm5lY3Rpb24iLCJoYXNNZXNzYWdlQm9keSIsInBhZ2VJbmZvIiwiaGFzTmV4dFBhZ2UiLCJlbmRDdXJzb3IiLCJfZmV0Y2hNZXRhZGF0YSIsIl9tZXRhZGF0YSRhdXRob3IkbG9naSIsIl9tZXRhZGF0YSRhdXRob3IiLCJfbWV0YWRhdGEkYm9keSIsIm1ldGFkYXRhIiwiYXV0aG9yIiwibG9naW4iLCJjb21tZW50IiwiX2NvbW1lbnQkYXV0aG9yJGxvZ2luIiwiX2NvbW1lbnQkYXV0aG9yIiwidHlwZSIsInJldmlldyIsIl9yZXZpZXckYXV0aG9yJGxvZ2luIiwiX3JldmlldyRhdXRob3IiLCJfcmV2aWV3JHN0YXRlIiwiX3JldmlldyRzdWJtaXR0ZWRBdCIsIl9yZXZpZXckYm9keSIsInN0YXRlIiwic3VibWl0dGVkQXQiLCJvcGVuUHIiLCJfb3BlblByIiwiX3RlbXAiLCJoZWFkT3V0cHV0IiwiaGVhZCIsImJhc2VPdXRwdXQiLCJiYXNlIiwiY3JlYXRlQXJncyIsInVwZGF0ZVByIiwiX3VwZGF0ZVByIiwiZWRpdFByIiwiX2VkaXRQciIsImVkaXRBcmdzIiwicmVhZFJlcGxpZXNGcm9tU3RkaW4iLCJfcmVhZFJlcGxpZXNGcm9tU3RkaW4iLCJub3JtYWxpemVkUmVwbGllcyIsInRocmVhZElkIiwicGFyc2VSZXBseUlucHV0IiwicmVwbGllcyIsInBhZ2luYXRlUmV2aWV3VGhyZWFkcyIsIl9wYWdpbmF0ZVJldmlld1RocmVhZHMiLCJvblRocmVhZCIsIl9yZXZpZXdUaHJlYWRzJHBhZ2VJbiIsInJldmlld1RocmVhZHMiLCJ0aHJlYWQiLCJ1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzIiwiX3VucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMiLCJpZHMiLCJpc1Jlc29sdmVkIiwiaWQiLCJ1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyIsIl91bnJlc29sdmVkUmV2aWV3VGhyZWFkcyIsInRocmVhZHMiLCJmaWxlVGV4dENhY2hlIiwiX3BhZ2VJbmZvJGVuZEN1cnNvciIsIl9wYWdlSW5mbyRlbmRDdXJzb3IyIiwiY29tbWVudENvbm5lY3Rpb24iLCJfdGhyZWFkJHBhdGgiLCJfdGhyZWFkJGlzT3V0ZGF0ZWQiLCJub3JtYWxpemVDb21tZW50IiwiaXNPdXRkYXRlZCIsIl90aHJlYWQkcGF0aDIiLCJfdGhyZWFkJGlzT3V0ZGF0ZWQyIiwib3JpZ2luYWxMaW5lIiwic3RhcnRMaW5lIiwib3JpZ2luYWxTdGFydExpbmUiLCJsaXN0UHJSZXZpZXdUaHJlYWRzIiwiX2xpc3RQclJldmlld1RocmVhZHMiLCJ1bnJlc29sdmVkX3RocmVhZHMiLCJyZXNvbHZlUHJSZXZpZXdUaHJlYWRzIiwiX3Jlc29sdmVQclJldmlld1RocmVhZHMiLCJ1bnJlc29sdmVkSWRzIiwicmVzb2x2ZWRUaHJlYWRJZHMiLCJfc3RlcDIkdmFsdWUiLCJpbmRleCIsIl9zdGVwMiR2YWx1ZSQiLCJyZXNvbHZlUmV2aWV3VGhyZWFkIiwicmVzb2x2ZWRfdGhyZWFkX2lkcyIsIl9ub3JtYWxpemVDb21tZW50IiwiaXNUaHJlYWRPdXRkYXRlZCIsIl9hdXRob3IkbG9naW4iLCJfdDExIiwiYnVpbGRSZXZpZXdTbmlwcGV0Iiwic25pcHBldCIsInBhcnNlZCIsIl90eXBlb2YiLCJldmVyeSIsInJlcGx5IiwiaXNSZXBseUlucHV0IiwiX3gyMCIsIl94MjEiLCJfeDIyIiwiX2J1aWxkUmV2aWV3U25pcHBldCIsInByaW1hcnlMb2NhdGlvbiIsImZhbGxiYWNrTG9jYXRpb24iLCJsb2NhdGlvbiIsImZpbGVUZXh0Iiwib3JpZ2luYWxDb21tZW50TG9jYXRpb24iLCJjdXJyZW50Q29tbWVudExvY2F0aW9uIiwiZmV0Y2hGaWxlVGV4dEF0RXhwcmVzc2lvbiIsImV4cHJlc3Npb24iLCJyZW5kZXJMaW5lU25pcHBldCIsImVuZExpbmUiLCJfY29tbWVudCRjb21taXQiLCJjb21tZW50TG9jYXRpb24iLCJvaWQiLCJfY29tbWVudCRvcmlnaW5hbENvbW0iLCJvcmlnaW5hbENvbW1pdCIsIl94MjMiLCJfeDI0IiwiX3gyNSIsIl94MjYiLCJfZmV0Y2hGaWxlVGV4dEF0RXhwcmVzc2lvbiIsImNhY2hlS2V5IiwiZmV0Y2hGaWxlVGV4dCIsIl94MjciLCJfeDI4IiwiX3gyOSIsIl9mZXRjaEZpbGVUZXh0IiwiYmxvYiIsIm9iamVjdCIsImlzQmluYXJ5IiwibGluZXMiLCJhdCIsInBvcCIsImNsYW1wZWRTdGFydExpbmUiLCJjbGFtcExpbmVOdW1iZXIiLCJjbGFtcGVkRW5kTGluZSIsImZpcnN0TGluZSIsImxhc3RMaW5lIiwibWluIiwibGluZU51bWJlcldpZHRoIiwic25pcHBldExpbmVzIiwibGluZU51bWJlciIsIl9saW5lcyIsIm1hcmtlciIsIm1heExpbmVOdW1iZXIiLCJ0ZW1wb3JhcnlGaWxlc0NsZWFudXBJbnN0cnVjdGlvbiIsImJ1aWxkUGxhblByb21wdCIsIl9idWlsZFBsYW5Qcm9tcHQiLCJpc3N1ZVlhbWwiLCJidWlsZE1lcmdlQmFzZUNvbW1hbmQiLCJzaGVsbFF1b3RlIiwiYnVpbGRSZXZpZXdQcm9tcHQiLCJfYnVpbGRSZXZpZXdQcm9tcHQiLCJrbm93bkZhY3RzIiwibWVyZ2VCYXNlQ29tbWFuZCIsInByQ29udGV4dCIsImJ1aWxkS25vd25GYWN0c0luc3RydWN0aW9ucyIsImJ1aWxkUHJDb250ZXh0SW5zdHJ1Y3Rpb25zIiwidHJpbW1lZEZhY3RzIiwiYnVpbGRTY3JlZW5zaG90UHJvbXB0IiwiaW5pdGlhbFVybCIsInBhZ2VOYW1lIiwic2NyZWVuc2hvdERlc2NyaXB0aW9uIiwic2FuaXRpemVkRGVzY3JpcHRpb24iLCJidWlsZFNpbXBsaWZ5UHJvbXB0IiwiX2J1aWxkU2ltcGxpZnlQcm9tcHQiLCJQQUNLQUdFX05BTUUiLCJURVhUX0ZJTEVfRVhURU5TSU9OX1JFR0VYIiwiaW5zdGFsbFBhY2tlZFNraWxscyIsIl9pbnN0YWxsUGFja2VkU2tpbGxzIiwicGFja2FnZVJvb3QiLCJpbnN0YWxsU291cmNlUm9vdCIsImZpbmRQYWNrYWdlUm9vdCIsInZlcnNpb24iLCJta2R0ZW1wIiwidG1wZGlyIiwiY3AiLCJyZXBsYWNlTGF0ZXN0U3BlY2lmaWVyV2l0aFBhY2thZ2VWZXJzaW9uIiwicm0iLCJmb3JjZSIsIl9maW5kUGFja2FnZVJvb3QiLCJjdXJyZW50RGlyIiwicGFja2FnZU1ldGFkYXRhIiwicGFyZW50RGlyIiwiZmlsZVVSTFRvUGF0aCIsInJlYWRQYWNrYWdlTWV0YWRhdGEiLCJhc3NlcnQiLCJub3RTdHJpY3RFcXVhbCIsImNvbnRlbnQiLCJvayIsIl9yZXBsYWNlTGF0ZXN0U3BlY2lmaWVyV2l0aFBhY2thZ2VWZXJzaW9uIiwibGF0ZXN0SW5zdGFsbFNwZWNpZmllciIsInZlcnNpb25lZEluc3RhbGxTcGVjaWZpZXIiLCJyZXBsYWNlSW5GaWxlcyIsIl9yZXBsYWNlSW5GaWxlcyIsInJlcGxhY2VDb250ZW50IiwiZW50cnlQYXRoIiwicmVwbGFjZWRDb250ZW50IiwicGFyZW50UGF0aCIsIndyaXRlRmlsZSIsInByb2dyYW0iLCJDb21tYW5kIiwicnVuUmV2aWV3Q29tbWFuZCIsIl9ydW5SZXZpZXdDb21tYW5kIiwiX2NhbGxlZTEzIiwibW9kZSIsInByZXZpb3VzVmVyaWZpZWRGYWN0cyIsIl9jb250ZXh0MTMiLCJyZWFkUmV2aWV3VmVyaWZpZWRGYWN0cyIsIl9hZ2VudCIsIl9yZWFkUmV2aWV3VmVyaWZpZWRGYWN0cyIsIl9jYWxsZWUxNCIsIl9jb250ZXh0MTQiLCJhZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kIiwiZGVzY3JpcHRpb24iLCJhbGxvd0V4Y2Vzc0FyZ3VtZW50cyIsImFyZ3VtZW50TmFtZSIsImFyZ3VtZW50IiwiYXJndW1lbnREZXNjcmlwdGlvbiIsImFkZE9wdGlvbiIsIk9wdGlvbiIsIm9wdGlvbkRlc2NyaXB0aW9uIiwiY2hvaWNlcyIsIm1ha2VPcHRpb25NYW5kYXRvcnkiLCJvcHRpb24iLCJhY3Rpb24iLCJfY2FsbGVlMTAiLCJfbGVuIiwiX2tleSIsIl9yZWYxMiIsImFyZ3VtZW50T3JPcHRpb25zIiwibWF5YmVPcHRpb25zIiwiX2FyZ3MxMCIsIl9jb250ZXh0MTAiLCJhZGRBZ2VudENvbW1hbmQiLCJjb25maWdPclJ1biIsIl9jYWxsZWUxMiIsIl9jb250ZXh0MTIiLCJfY2FsbGVlMTEiLCJfY29udGV4dDExIiwiX3J1blByb21wdEFnZW50Q29tbWFuZCIsIl9jYWxsZWUxNSIsIl9jb250ZXh0MTUiLCJleHRyYWN0TWFya2Rvd25Db2RlQmxvY2siLCJidWlsZEFnZW50UHJvbXB0IiwiZmFsbGJhY2tUb091dHB1dCIsIl9jb2RlQmxvY2tNYXRjaGVzJGF0IiwibGFzdENvZGVCbG9ja0NvbnRlbnQiLCJtYXRjaEFsbCIsInNob3dIZWxwQWZ0ZXJFcnJvciIsInJ1blByb21wdEFnZW50Q29tbWFuZCIsImlzc3VlUmVmZXJlbmNlIiwiX2FyZ3VtZW50IiwicHJSZWZlcmVuY2UiLCJwYXJzZUFzeW5jIiwiYXJndiJdLCJtYXBw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
|