@willbooster/agent-skills 1.19.0 → 1.20.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/cli.js +3 -3
- package/package.json +2 -1
- package/skills/update-deps/SKILL.md +19 -0
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{spawn as t,spawnSync as r}from"node:child_process";import{createWriteStream as
|
|
2
|
+
import{Command as n,Option as e}from"commander";import{spawn as t,spawnSync as r}from"node:child_process";import{createWriteStream as a}from"node:fs";import{mkdir as i,readFile as o,stat as u,readdir as c}from"node:fs/promises";import{dirname as s,join as l,relative as f,sep as p}from"node:path";import{minimatch as d,braceExpand as h}from"minimatch";import{stdin as m,stderr as v}from"node:process";import{setTimeout as w}from"node:timers/promises";import{stripVTControlCharacters as g}from"node:util";import{stringify as y}from"yaml";import{fileURLToPath as b}from"node:url";function k(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 x(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 S(e.call(n));t="@@asyncIterator",r="@@iterator"}throw new TypeError("Object is not async iterable")}function S(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 S=function(n){this.s=n,this.n=n.next},S.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 S(n)}function j(n,e,t,r,a,i,o){try{var u=n[i](o),c=u.value}catch(n){return void t(n)}u.done?e(c):Promise.resolve(c).then(r,a)}function I(n){return function(){var e=this,t=arguments;return new Promise(function(r,a){var i=n.apply(e,t);function o(n){j(i,r,a,o,u,"next",n)}function u(n){j(i,r,a,o,u,"throw",n)}o(void 0)})}}function O(n,e){var t="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(!t){if(Array.isArray(n)||(t=D(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,u=!1;return{s:function(){t=t.call(n)},n:function(){var n=t.next();return o=n.done,n},e:function(n){u=!0,i=n},f:function(){try{o||null==t.return||t.return()}finally{if(u)throw i}}}}function A(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 R(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 C(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?R(Object(t),!0).forEach(function(e){A(n,e,t[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):R(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))})}return n}function $(){
|
|
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",i=t.toStringTag||"@@toStringTag";function a(t,r,i,a){var c=r&&r.prototype instanceof u?r:u,s=Object.create(c.prototype);return I(s,"_invoke",function(t,r,i){var a,u,c,s=0,l=i||[],f=!1,p={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(e,t){return a=e,u=0,c=n,p.n=t,o}};function d(t,r){for(u=t,c=r,e=0;!f&&s&&!i&&e<l.length;e++){var i,a=l[e],d=p.p,h=a[2];t>3?(i=h===r)&&(c=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=n):a[0]<=d&&((i=t<2&&d<a[1])?(u=0,p.v=r,p.n=a[1]):d<h&&(i=t<3||a[0]>r||r>h)&&(a[4]=t,a[5]=r,p.n=h,u=0))}if(i||t>1)return o;throw f=!0,r}return function(i,l,h){if(s>1)throw TypeError("Generator is already running");for(f&&1===l&&d(l,h),u=l,c=h;(e=u<2?n:c)||!f;){a||(u?u<3?(u>1&&(p.n=-1),d(u,c)):p.n=c:p.v=c);try{if(s=2,a){if(u||(i="next"),e=a[i]){if(!(e=e.call(a,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,u<2&&(u=0)}else 1===u&&(e=a.return)&&e.call(a),u<2&&(c=TypeError("The iterator does not provide a '"+i+"' method"),u=1);a=n}else if((e=(f=p.n<0)?c:t.call(r,p))!==o)break}catch(e){a=n,u=1,c=e}finally{s=1}}return{value:e,done:f}}}(t,i,a),!0),s}var o={};function u(){}function c(){}function s(){}e=Object.getPrototypeOf;var l=[][r]?e(e([][r]())):(I(e={},r,function(){return this}),e),f=s.prototype=u.prototype=Object.create(l);function p(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,s):(n.__proto__=s,I(n,i,"GeneratorFunction")),n.prototype=Object.create(f),n}return c.prototype=s,I(f,"constructor",s),I(s,"constructor",c),c.displayName="GeneratorFunction",I(s,i,"GeneratorFunction"),I(f),I(f,i,"Generator"),I(f,r,function(){return this}),I(f,"toString",function(){return"[object Generator]"}),(x=function(){return{w:a,m:p}})()}function I(n,e,t,r){var i=Object.defineProperty;try{i({},"",{})}catch(n){i=0}I=function(n,e,t,r){function a(e,t){I(n,e,function(n){return this._invoke(e,t,n)})}e?i?i(n,e,{value:t,enumerable:!r,configurable:!r,writable:!r}):n[e]=t:(a("next",0),a("throw",1),a("return",2))},I(n,e,t,r)}function S(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 j(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,i,a,o,u=[],c=!0,s=!1;try{if(a=(t=t.call(n)).next,0===e){if(Object(t)!==t)return;c=!1}else for(;!(c=(r=a.call(t)).done)&&(u.push(r.value),u.length!==e);c=!0);}catch(n){s=!0,i=n}finally{try{if(!c&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(s)throw i}}return u}}(n,e)||A(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 O(n){return function(n){if(Array.isArray(n))return d(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||A(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 R(n){"@babel/helpers - typeof";return R="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},R(n)}function A(n,e){if(n){if("string"==typeof n)return d(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)?d(n,e):void 0}}var C=["SIGINT","SIGTERM","SIGHUP"],$=new Set,P=!1;function q(n,e){return E.apply(this,arguments)}function E(){return E=g(x().m(function n(e,r){var i,a,o,u,c,s,l,f,p,d,h;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===r&&(r={}),a=t(null!=(i=e[0])?i:"",e.slice(1),{detached:!0,stdio:["ignore","pipe","pipe"]}),o=T(a,r.timeoutMs),u=G(r.waitMessage,r.waitIntervalSeconds),n.n=1,M(r.logFilePath);case 1:return c=n.v,n.p=2,n.n=3,Promise.all([_(a.stdout,function(n){return c.write(n)}),_(a.stderr,function(n){return c.write(n)}),new Promise(function(n,e){a.once("error",e),a.once("close",function(e){return n(null!=e?e:1)})})]);case 3:if(s=n.v,l=j(s,3),f=l[0],p=l[1],d=l[2],!o.timedOut()){n.n=4;break}throw new Error(N("".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,c.close();case 7:return o.clear(),u(),n.f(6);case 8:return n.a(2)}},n,null,[[2,,6,8]])})),E.apply(this,arguments)}function N(n,e,t){var r="Command timed out after ".concat(function(n){if(n%36e5==0)return"".concat(n/36e5,"h");if(n%6e4==0)return"".concat(n/6e4,"m");if(n%1e3==0)return"".concat(n/1e3,"s");return"".concat(n,"ms")}(e),": ").concat(t.join(" "));return n.length>0?"".concat(n,"\n").concat(r):r}function T(n,e){void 0===e&&(e=36e5);var t,r=!1;$.add(n),function(){if(P)return;P=!0;var n,e=w(C);try{var t=function(){var e=n.value;process.once(e,function(){var n,t=w($);try{for(t.s();!(n=t.n()).done;){L(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 i=setTimeout(function(){r=!0,L(n,"SIGTERM"),(t=setTimeout(function(){return L(n,"SIGKILL")},5e3)).unref()},e);return i.unref(),{clear:function(){clearTimeout(i),t&&clearTimeout(t),$.delete(n)},timedOut:function(){return r},timeoutMs:e}}function L(n,e){if(n.pid&&n.pid>0)try{return void process.kill(-n.pid,e)}catch(n){}n.kill(e)}function _(n,e){return D.apply(this,arguments)}function D(){return(D=g(x().m(function n(e,t){var r,i,a,o,u,c,s,l,f,p,d;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:r=[],i=new TextDecoder,a=!1,o=!1,n.p=2,c=h(e);case 3:return n.n=4,c.next();case 4:if(!(a=!(s=n.v).done)){n.n=6;break}l=s.value,f="string"==typeof l?l:i.decode(new Uint8Array(l),{stream:!0}),r.push(f),null==t||t(f);case 5:a=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,d=n.v,o=!0,u=d;case 8:if(n.p=8,n.p=9,!a||null==c.return){n.n=10;break}return n.n=10,c.return();case 10:if(n.p=10,!o){n.n=11;break}throw u;case 11:return n.f(10);case 12:return n.f(8);case 13:return(p=i.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 G(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,i=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(i),t("\n")}}function M(n){return U.apply(this,arguments)}function U(){return U=g(x().m(function n(e){var t,r,u;return x().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=g(x().m(function n(){return x().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,a(o(e),{recursive:!0});case 3:return(r=i(e,{flags:"w"})).on("error",t),n.a(2,{write:function(n){r.writable&&r.write(n)},close:function(){var n=g(x().m(function n(){return x().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,u=n.v,t(u),n.a(2,{write:function(){},close:function(){var n=g(x().m(function n(){return x().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()})}},n,null,[[2,4]])})),U.apply(this,arguments)}var F="There is no concern.",H=["codex","claude","gemini"],W=new RegExp("\\b".concat("there is no concern","\\b"),"i");function J(n,e){return B.apply(this,arguments)}function B(){return(B=g(x().m(function n(e,t){var r,i,a;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t={allAgentsLabel:"agents"}),n.n=1,e;case 1:return r=n.v,i=G(Z(t.allAgentsLabel)),n.p=2,n.n=3,Promise.all(H.map(g(x().m(function n(e){var i,a,o,u;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Q(e,r,{waitMessage:!1});case 1:return u=n.v.trim(),n.a(2,null!=(i=null==(a=(o=t).mapOutput)?void 0:a.call(o,e,u))?i:"## ".concat(K(e),"\n\n").concat(u))}},n)}))));case 3:return a=n.v.filter(function(n){return void 0!==n}),n.a(2,a.length>0?a.join("\n\n"):F);case 4:return n.p=4,i(),n.f(4);case 5:return n.a(2)}},n,null,[[2,,4,5]])}))).apply(this,arguments)}function Q(n,e,t){return Y.apply(this,arguments)}function Y(){return(Y=g(x().m(function n(e,t,r){var i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:return void 0===r&&(r={}),i=q,a=z,o=e,n.n=1,t;case 1:return n.a(2,i(a(o,n.v),{logFilePath:V(e),waitMessage:void 0===r.waitMessage?Z(K(e)):r.waitMessage}))}},n)}))).apply(this,arguments)}function z(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","--model","gemini-3.1-pro-preview","-p",e]}}function K(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function Z(n){return"Waiting for ".concat(n," to finish.")}function V(n){return"logs/".concat(n,"-").concat((e=new Date,t=j([e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds()].map(X),5),r=t[0],i=t[1],a=t[2],o=t[3],u=t[4],"".concat(r).concat(i,"-").concat(a).concat(o).concat(u)),".log");var e,t,r,i,a,o,u}function X(n){return n.toString().padStart(2,"0")}var nn={blockQuote:"literal",lineWidth:0};function en(n){c.write("".concat(n,"\n"))}function tn(n,e){void 0===e&&(e=1),c.write("".concat(n,"\n")),process.exit(e)}function rn(){return an.apply(this,arguments)}function an(){return(an=g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:if(!u.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,_(u);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function on(n){return un.apply(this,arguments)}function un(){return(un=g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return void 0===e&&(e="Error: input is required on stdin"),n.n=1,rn();case 1:if(!((t=n.v).length>0)){n.n=2;break}return n.a(2,t);case 2:tn(e,2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function cn(n,e){return sn.apply(this,arguments)}function sn(){return sn=g(x().m(function n(e,r){var i,a,o,u,c;return x().w(function(n){for(;;)switch(n.n){case 0:void 0===r&&(r={}),a=null!=(i=r.allowedExitCodes)?i:[],o=x().m(function n(){var i,o,u,l,f,p,d,h,m,v,g;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return o=t(null!=(i=e[0])?i:"",e.slice(1),{detached:!0,stdio:["pipe","pipe","pipe"]}),l=!1,f=T(o),n.p=1,void 0!==r.stdinData?o.stdin.end(r.stdinData):o.stdin.end(),n.n=2,Promise.all([_(o.stdout),_(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(p=n.v,d=j(p,3),h=d[0],m=d[1],v=d[2],g="".concat(h).concat(m),!f.timedOut()){n.n=3;break}u=N(g,f.timeoutMs,e),n.n=5;break;case 3:if(0!==v&&!a.includes(v)){n.n=4;break}return n.a(2,{v:g});case 4:In(e,v,g)&&c<3?l=!0:u=g||"Command failed: ".concat(e.join(" "));case 5:return n.p=5,f.clear(),n.f(5);case 6:if(!l){n.n=8;break}return en("Transient GitHub CLI failure; retrying... (attempt ".concat(c," of ").concat(2,")")),n.n=7,s(1e3*c);case 7:return n.a(2,0);case 8:u&&tn(u);case 9:return n.a(2)}},n,null,[[1,,5,6]])}),c=1;case 1:if(!(c<=3)){n.n=5;break}return n.d(S(o()),2);case 2:if(0!==(u=n.v)){n.n=3;break}return n.a(3,4);case 3:if(!u){n.n=4;break}return n.a(2,u.v);case 4:c+=1,n.n=1;break;case 5:tn("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),sn.apply(this,arguments)}function ln(n,e){return fn.apply(this,arguments)}function fn(){return(fn=g(x().m(function n(e,t){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,cn(["gh"].concat(O(e)),{stdinData:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function pn(n,e,t){return dn.apply(this,arguments)}function dn(){return(dn=g(x().m(function n(e,t,r){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,cn(["gh"].concat(O(e)),{stdinData:r,allowedExitCodes:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function hn(){return mn.apply(this,arguments)}function mn(){return(mn=g(x().m(function n(){var e,t,r,i,a;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v.trim(),t=e.split("/",2),r=j(t,2),i=r[0],a=r[1],i&&a||tn("Error: could not determine current repository"),n.a(2,[i,a])}},n)}))).apply(this,arguments)}function vn(){return gn.apply(this,arguments)}function gn(){return(gn=g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln(["pr","view","--json","number","--jq",".number"]);case 1:return n.a(2,n.v.trim())}},n)}))).apply(this,arguments)}function wn(n,e){return yn.apply(this,arguments)}function yn(){return(yn=g(x().m(function n(e,t){var r,i,a,o,u,c,s,l,f;return x().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),r=["api","graphql","-F","query=@-"],i=0,a=Object.entries(t);case 1:if(!(i<a.length)){n.n=4;break}if(o=j(a[i],2),u=o[0],void 0!==(c=o[1])&&""!==c){n.n=2;break}return n.a(3,3);case 2:r.push("-F","".concat(u,"=").concat(c));case 3:i++,n.n=1;break;case 4:return f=JSON,n.n=5,ln(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"),tn("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function bn(n){return f(n,nn)}function kn(n){return JSON.parse(JSON.stringify(n))}function xn(n,e){var t,i,a,o,u=r(null!=(t=n[0])?t:"",n.slice(1),{encoding:"utf8",input:e});return{exitCode:null!=(i=u.status)?i:u.error?1:0,output:"".concat(null!=(a=u.stdout)?a:"").concat(null!=(o=u.stderr)?o:"")}}function In(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 Sn=/\btest\b/i,jn=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","jobs","name","number","startedAt","status","updatedAt","url","workflowName"],On=/^.*?\tUNKNOWN STEP\t\d{4}-\d{2}-\d{2}T[^Z]+Z\s*/,Rn=0===xn(["rtk","--version"]).exitCode;function An(n){return Cn.apply(this,arguments)}function Cn(){return(Cn=g(x().m(function n(e){var t,r,i,a,o,u,c,s,l,f;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return u=["pr","checks"],e&&u.push(e),u.push("--json","bucket,completedAt,description,event,link,name,startedAt,state,workflow"),c=[],n.p=1,n.n=2,pn(u,[8]);case 2:s=n.v,c=s.trim().length>0?JSON.parse(s):[],n.n=5;break;case 3:if(n.p=3,!((f=n.v)instanceof SyntaxError)){n.n=4;break}c=[],n.n=5;break;case 4:throw f;case 5:return l=c.reduce(function(n,e){var t,r,i=null!=(t=e.bucket)?t:"";return n[i]=(null!=(r=n[i])?r:0)+1,n},{}),n.a(2,{summary:{total:c.length,pass:null!=(t=l.pass)?t:0,fail:null!=(r=l.fail)?r:0,pending:null!=(i=l.pending)?i:0,skipping:null!=(a=l.skipping)?a:0,cancel:null!=(o=l.cancel)?o:0},checks:c})}},n,null,[[1,3]])}))).apply(this,arguments)}function $n(n,e,t,r){return Pn.apply(this,arguments)}function Pn(){return(Pn=g(x().m(function n(e,t,r,i){var a,o,u,s,l,f,p,d;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t=Mn),void 0===r&&(r=An),void 0===i&&(i=function(n){return c.write(n)}),a=0,n.n=1,r(e);case 1:o=n.v,u=function(){},n.p=2;case 3:if(s=qn(o),l=En(s),f=j(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,[o,a,!1]);case 4:if(!(a>=100)){n.n=5;break}return n.a(2,[o,a,!0]);case 5:return 1===(a+=1)&&(u=G("Waiting for test-related workflows to finish.",36,i)),n.n=6,t(36);case 6:return n.n=7,r(e);case 7:o=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 qn(n){var e=n.checks.reduce(function(n,e){var t=e.workflow||e.name||"unknown_workflow";return null!=n[t]||(n[t]=[]),n[t].push(e),n},{});return Object.fromEntries(Object.entries(e).map(function(n){var e,t=j(n,2),r=t[0],i=function(n){var e=n.reduce(function(n,e){var t=function(n){var e=Nn(n);return e?"run:".concat(e):"unknown_run"}(e),r=n.get(t);return r?(r.push(e),n):(n.set(t,[e]),n)},new Map);return Array.from(e.values()).reduce(function(n,e){return 0===n.length||Wn(e)>Wn(n)?e:n},[])}(t[1]),a=i[0];a||tn("Error: no checks found for workflow ".concat(r));var o=null!=(e=i.reduce(function(n,e){return n?Dn(e)>Dn(n)?e:n:e},void 0))?e:a;return[r,{classification:_n(i),check:o,checks:i}]}))}function En(n){for(var e={},t={},r=0,i=Object.entries(n);r<i.length;r++){var a=j(i[r],2),o=a[0],u=a[1];"failed"!==u.classification?"running"===u.classification&&u.checks.some(function(n){return Gn(n)})&&(t[o]=u):e[o]=u}return[e,t]}function Nn(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 Tn(n){return Ln.apply(this,arguments)}function Ln(){return(Ln=g(x().m(function n(e){var t,r;return x().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,pn(["run","view",e,"--json",jn.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,!((r=n.v)instanceof SyntaxError)){n.n=5;break}return c.write("Warning: Could not parse JSON for workflow run ".concat(e,": ").concat(r.message,"\n")),n.a(2,void 0);case 5:throw r;case 6:return n.a(2)}},n,null,[[3,4]])}))).apply(this,arguments)}function _n(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 Dn(n){var e,t=n.completedAt;return t&&"0001-01-01T00:00:00Z"!==t?t:null!=(e=n.startedAt)?e:""}function Gn(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&Sn.test(n)})}function Mn(n){return Un.apply(this,arguments)}function Un(){return(Un=g(x().m(function n(e){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,s(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Fn(){return Hn.apply(this,arguments)}function Hn(){return(Hn=g(x().m(function n(){var e,t,r,i,a,o,u,c,s,l,f,p;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,vn();case 1:return e=n.v,en("Fetching latest CI results..."),n.n=2,$n(e);case 2:if(t=n.v,r=j(t,3),i=r[0],a=r[1],o=r[2],u=qn(i),c=En(u),s=j(c,2),l=s[0],f=s[1],p={summary:kn(i.summary),waited_for_test_related_checks:a>0,test_related_check_wait_attempts:a,test_related_check_wait_timed_out:o},!(Object.keys(l).length>0)){n.n=4;break}return n.n=3,Promise.all(Object.entries(l).map(g(x().m(function n(e){var t,r,i,a,o,u,c;return x().w(function(n){for(;;)switch(n.n){case 0:return t=j(e,2),r=t[0],i=t[1],n.n=1,Jn(r,i);case 1:return a=n.v,o=k,u=k({},a),c=zn,n.n=2,Qn(i.check);case 2:return n.a(2,o(u,c(n.v)))}},n)}))));case 3:return p.failed_workflows=n.v,n.a(2,{output:bn(p),exitCode:1});case 4:if(!(Object.keys(f).length>0)){n.n=6;break}return p.test_workflow_output="Timed out waiting for test-related workflows to finish.",n.n=5,Promise.all(Object.entries(f).map(function(n){var e=j(n,2);return Jn(e[0],e[1])}));case 5:return p.running_test_related_workflows=n.v,n.a(2,{output:bn(p),exitCode:1});case 6:return n.a(2,{output:"All CI workflows passed.\n",exitCode:0})}},n)}))).apply(this,arguments)}function Wn(n){return n.reduce(function(n,e){var t=Dn(e);return t>n?t:n},"")}function Jn(n,e){return Bn.apply(this,arguments)}function Bn(){return(Bn=g(x().m(function n(e,t){var r,i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:return i=Nn(t.check),n.n=1,Tn(i);case 1:return a=n.v,o=Xn(a,Vn(t.check.name)),n.a(2,{classification:t.classification,workflow:e,job:Vn(t.check.name),job_url:Vn(null==o?void 0:o.url),failed_step:ne(o),run_id:i,run_url:null!=(r=Vn(null==a?void 0:a.url))?r:Vn(t.check.link),branch:Vn(null==a?void 0:a.headBranch),sha:Vn(null==a?void 0:a.headSha),conclusion:Vn(null==a?void 0:a.conclusion)})}},n)}))).apply(this,arguments)}function Qn(n){return Yn.apply(this,arguments)}function Yn(){return(Yn=g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:if(t=Nn(e)){n.n=1;break}return n.a(2,"Failed latest result has no GitHub Actions run link.");case 1:return n.n=2,pn(["run","view",t,"--log-failed"],[1]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function zn(n){return{failed_log:Kn(n)}}function Kn(n){var e=Zn(l(n));if(!Rn)return e;var t=xn(["rtk","log"],e);return 0===t.exitCode&&t.output.trim().length>0?Zn(t.output):e}function Zn(n){return n.split("\n").map(function(n){return n.replace(On,"")}).join("\n").trim()}function Vn(n){return"string"==typeof n&&n.length>0?n:void 0}function Xn(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 ne(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 ee(){return te.apply(this,arguments)}function te(){return(te=g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ae();case 1:if(null==(e=n.v)){n.n=2;break}t=e,n.n=4;break;case 2:return n.n=3,re();case 3:t=n.v;case 4:return n.a(2,t)}},n)}))).apply(this,arguments)}function re(){return ie.apply(this,arguments)}function ie(){return(ie=g(x().m(function n(){var e;return x().w(function(n){for(;;)switch(n.n){case 0:return e=ce,n.n=1,q(["gh","repo","view","--json","defaultBranchRef","--template","{{.defaultBranchRef.name}}"]);case 1:return n.a(2,e(n.v.trim(),"Error: could not determine the default branch"))}},n)}))).apply(this,arguments)}function ae(){return oe.apply(this,arguments)}function oe(){return(oe=g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,q(["gh","pr","view","--json","baseRefName","--template","{{.baseRefName}}"]);case 1:return e=n.v.trim(),n.a(2,e.length>0?e:void 0);case 2:if(n.p=2,!ue(t=n.v)){n.n=3;break}return n.a(2,void 0);case 3:throw t;case 4:return n.a(2)}},n,null,[[0,2]])}))).apply(this,arguments)}function ue(n){return/no pull requests? found for branch/i.test(String(n))}function ce(n,e){if(n.length>0)return n;throw new Error(e)}function se(n){return ye(n,"issue")}function le(n){return ye(n,"pull request")}function fe(n){return pe.apply(this,arguments)}function pe(){return(pe=g(x().m(function n(e){var t,r,i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,hn();case 1:return t=n.v,r=j(t,2),i=r[0],a=r[1],n.n=2,be(i,a,se(e));case 2:return o=n.v,en("Fetched issue #".concat(o.number," messages.")),n.a(2,bn({issue:o}))}},n)}))).apply(this,arguments)}function de(n){return he.apply(this,arguments)}function he(){return(he=g(x().m(function n(e){var t,r,i;return x().w(function(n){for(;;)switch(n.n){case 0:if(void 0!==e){n.n=2;break}return n.n=1,vn();case 1:i=n.v,n.n=3;break;case 2:i=le(e);case 3:return t=i,n.n=4,ge(t);case 4:return r=n.v,en("Fetched pull request #".concat(r.number," messages.")),n.a(2,bn({pull_request:r}))}},n)}))).apply(this,arguments)}function me(){return ve.apply(this,arguments)}function ve(){return(ve=g(x().m(function n(){var e,t,r;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,pn(["pr","view","--json","number","--jq",".number"],[1]);case 1:if(e=n.v,t=e.trim(),!ue(e)&&/^\d+$/.test(t)){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,ge(t);case 3:return r=n.v,n.a(2,bn({pull_request:r}))}},n)}))).apply(this,arguments)}function ge(n){return we.apply(this,arguments)}function we(){return(we=g(x().m(function n(e){var t,r,i,a;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,hn();case 1:return t=n.v,r=j(t,2),i=r[0],a=r[1],n.n=2,xe(i,a,e);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function ye(n,e){var t=String(n).trim();if(0===t.length&&tn("Error: ".concat(e," reference is required"),2),/^\d+$/.test(t))return t;var r="issue"===e?"issues":"pull",i=t.match(new RegExp("^https?://(?:www\\.)?github\\.com/[^/]+/[^/]+/".concat(r,"/(\\d+)(?:/|$)")));if(null!=i&&i[1])return i[1];tn("Error: expected a GitHub ".concat(e,' number or URL, received "').concat(t,'"'),2)}function be(n,e,t){return ke.apply(this,arguments)}function ke(){return(ke=g(x().m(function n(e,t,r){var i,a;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Pe({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 i=n.v,n.n=2,Ce({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:Ee});case 2:return a=n.v,n.a(2,k(k({},i),{},{messages:a}))}},n)}))).apply(this,arguments)}function xe(n,e,t){return Ie.apply(this,arguments)}function Ie(){return(Ie=g(x().m(function n(e,t,r){var i,a,o,u,c;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Pe({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 i=n.v,n.n=2,Promise.all([je(e,t,r),Re(e,t,r)]);case 2:return a=n.v,o=j(a,2),u=o[0],c=o[1],n.a(2,k(k({},i),{},{messages:[].concat(O(u),O(c)).sort(Se)}))}},n)}))).apply(this,arguments)}function Se(n,e){var t="string"==typeof n.createdAt?n.createdAt:"",r="string"==typeof e.createdAt?e.createdAt:"";return t.localeCompare(r)}function je(n,e,t){return Oe.apply(this,arguments)}function Oe(){return(Oe=g(x().m(function n(e,t,r){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ce({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:Ee});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Re(n,e,t){return Ae.apply(this,arguments)}function Ae(){return(Ae=g(x().m(function n(e,t,r){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ce({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:Ne});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Ce(n){return $e.apply(this,arguments)}function $e(){return($e=g(x().m(function n(e){var t,r,i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:r=[];case 1:return o=e,n.n=2,wn(e.query,{owner:e.owner,name:e.name,number:Number(e.number),cursor:t});case 2:if(a=o.selectConnection.call(o,n.v)){n.n=3;break}return n.a(2,r);case 3:if(r.push.apply(r,O(a.nodes.map(e.mapNode).filter(Te))),a.pageInfo.hasNextPage){n.n=4;break}return n.a(2,r);case 4:t=null!=(i=a.pageInfo.endCursor)?i:void 0;case 5:n.n=1;break;case 6:return n.a(2)}},n)}))).apply(this,arguments)}function Pe(n){return qe.apply(this,arguments)}function qe(){return(qe=g(x().m(function n(e){var t,r,i,a,o;return x().w(function(n){for(;;)switch(n.n){case 0:return o=e,n.n=1,wn(e.query,{owner:e.owner,name:e.name,number:Number(e.number)});case 1:return(a=o.selectMetadata.call(o,n.v))||tn("Could not find ".concat(e.noun," #").concat(e.number," in ").concat(e.owner,"/").concat(e.name,".")),n.a(2,{number:a.number,title:a.title,url:a.url,author:null!=(t=null==(r=a.author)?void 0:r.login)?t:void 0,body:null!=(i=a.body)?i:""})}},n)}))).apply(this,arguments)}function Ee(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 Ne(n){var e,t,r,i,a;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!=(i=n.submittedAt)?i:void 0,url:n.url,body:null!=(a=n.body)?a:""}}function Te(n){return"string"==typeof n.body&&n.body.length>0}function Le(n){return _e.apply(this,arguments)}function _e(){return(_e=g(x().m(function n(e){var t,r,i,a,o,u,c,s;return x().w(function(n){for(;;)switch(n.n){case 0:return r=(t=void 0===e?{}:e).body,i=t.title,n.n=1,cn(["git","branch","--show-current"]);case 1:return a=n.v.trim(),n.n=2,ln(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return o=n.v.trim(),a||tn("Error: could not determine current branch"),o||tn("Error: could not determine default branch"),a===o&&tn("Error: current branch is the default branch (".concat(o,")")),u=["pr","create","--base",o,"--head",a,"--fill"],i&&u.push("--title",i),r&&u.push("--body-file","-"),en("Creating pull request..."),n.n=3,ln(u,r);case 3:return c=bn,s=JSON,n.n=4,ln(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,c(s.parse.call(s,n.v)))}},n)}))).apply(this,arguments)}function De(n){return Ge.apply(this,arguments)}function Ge(){return(Ge=g(x().m(function n(e){var t,r,i;return x().w(function(n){for(;;)switch(n.n){case 0:return t=e.body,r=e.title,n.n=1,vn();case 1:return i=n.v,en("Updating pull request #".concat(i,"...")),n.n=2,Me(i,["--title",r,"--body-file","-"],t);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Me(n,e,t){return Ue.apply(this,arguments)}function Ue(){return(Ue=g(x().m(function n(e,t,r){var i,a;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln(["pr","edit",e].concat(O(t)),r);case 1:return i=bn,a=JSON,n.n=2,ln(["pr","view",e,"--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author,body"]);case 2:return n.a(2,i(a.parse.call(a,n.v)))}},n)}))).apply(this,arguments)}function Fe(){return He.apply(this,arguments)}function He(){return(He=g(x().m(function n(){var e,t,r,i,a,o,u,c;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,on("Error: JSON input is required on stdin");case 1:for(e=n.v,t=et(e),r={},i=0,a=Object.entries(t.replies);i<a.length;i++)o=j(a[i],2),u=o[0],"string"==typeof(c=o[1])&&c.length>0&&(r[u]=c);return n.a(2,r)}},n)}))).apply(this,arguments)}function We(n,e,t,r,i){return Je.apply(this,arguments)}function Je(){return(Je=g(x().m(function n(e,t,r,i,a){var o,u,c,s,l,f,p,d,h,m,v,g;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,wn(e,{owner:t,name:r,number:Number(i),cursor:o});case 1:if(m=u=n.v.data,h=null==m){n.n=2;break}h=null==(u=u.repository);case 2:if(d=h){n.n=3;break}d=null==(u=u.pullRequest);case 3:if(!d){n.n=4;break}v=void 0,n.n=5;break;case 4:v=u.reviewThreads;case 5:(s=v)||tn("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),l=w(s.nodes),n.p=6,l.s();case 7:if((f=l.n()).done){n.n=9;break}return p=f.value,n.n=8,a(p);case 8:n.n=7;break;case 9:n.n=11;break;case 10:n.p=10,g=n.v,l.e(g);case 11:return n.p=11,l.f(),n.f(11);case 12:if(s.pageInfo.hasNextPage){n.n=13;break}return n.a(2);case 13:o=null!=(c=s.pageInfo.endCursor)?c:void 0;case 14:n.n=0;break;case 15:return n.a(2)}},n,null,[[6,10,11,12]])}))).apply(this,arguments)}function Be(n,e,t){return Qe.apply(this,arguments)}function Qe(){return(Qe=g(x().m(function n(e,t,r){var i;return x().w(function(n){for(;;)switch(n.n){case 0:return i=[],n.n=1,We("\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||i.push(n.id)});case 1:return n.a(2,i)}},n)}))).apply(this,arguments)}function Ye(n,e,t){return ze.apply(this,arguments)}function ze(){return(ze=g(x().m(function n(e,t,r){var i;return x().w(function(n){for(;;)switch(n.n){case 0:return i=[],n.n=1,We("\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 diffHunk\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,g(x().m(function n(e){var t,r,a,o,u,c,s,l,f,p;return x().w(function(n){for(;;)switch(n.n){case 0:if(!e.isResolved){n.n=1;break}return n.a(2);case 1:r=e.comments.nodes.map(nt),a=e.comments.pageInfo,o=null!=(t=a.endCursor)?t:void 0;case 2:if(!a.hasNextPage){n.n=7;break}return n.n=3,wn("\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 diffHunk\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",{threadId:e.id,cursor:o});case 3:if(f=u=n.v.data,l=null==f){n.n=4;break}l=null==(u=u.node);case 4:if(!l){n.n=5;break}p=void 0,n.n=6;break;case 5:p=u.comments;case 6:(s=p)||tn("Could not find comments in GraphQL response for thread ".concat(e.id,".")),r.push.apply(r,O(s.nodes.map(nt))),a=s.pageInfo,o=null!=(c=a.endCursor)?c:void 0,n.n=2;break;case 7:i.push({id:e.id,isResolved:e.isResolved,isOutdated:e.isOutdated,path:e.path,line:e.line,originalLine:e.originalLine,startLine:e.startLine,originalStartLine:e.originalStartLine,comments:r});case 8:return n.a(2)}},n)})));case 1:return n.a(2,i)}},n)}))).apply(this,arguments)}function Ke(){return Ze.apply(this,arguments)}function Ze(){return(Ze=g(x().m(function n(){var e,t,r,i,a,o,u;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,hn();case 1:return e=n.v,t=j(e,2),r=t[0],i=t[1],n.n=2,vn();case 2:return a=n.v,en("Fetching unresolved review threads..."),o=bn,n.n=3,Ye(r,i,a);case 3:return u=n.v,n.a(2,o({unresolved_threads:u}))}},n)}))).apply(this,arguments)}function Ve(n){return Xe.apply(this,arguments)}function Xe(){return(Xe=g(x().m(function n(e){var t,r,i,a,o,u,c,s,l,f,p,d,h,m,v,g,y,b,k,I;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,hn();case 1:return t=n.v,r=j(t,2),i=r[0],a=r[1],n.n=2,vn();case 2:return o=n.v,b=Set,n.n=3,Be(i,a,o);case 3:k=n.v,u=new b(k),en("Replying to ".concat(Object.keys(e).length," review threads...")),c=[],s=Object.entries(e),l=w(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(d=j(f.value,2),h=d[0],m=j(d[1],2),v=m[0],g=m[1],en("Processing ".concat(h+1,"/").concat(s.length,": ").concat(v)),u.has(v)){n.n=6;break}return n.a(3,8);case 6:return n.n=7,wn("\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:g});case 7:y=n.v,null!=(p=y.data)&&null!=(p=p.resolveReviewThread)&&null!=(p=p.thread)&&p.isResolved?c.push(v):en("Warning: failed to resolve thread ".concat(v,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,I=n.v,l.e(I);case 11:return n.p=11,l.f(),n.f(11);case 12:return en("Done."),n.a(2,bn({resolved_thread_ids:c}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function nt(n){var e,t;return k(k({},n),{},{author:"string"==typeof n.author?n.author:null!=(e=null==(t=n.author)?void 0:t.login)?e:null})}function et(n){try{var e=JSON.parse(n);return function(n){if("object"!==R(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==R(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||tn("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&tn("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function tt(n){return rt.apply(this,arguments)}function rt(){return(rt=g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,fe(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 - Clean up any temporary files after the experiment.\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. 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 it(n){return"git merge-base ".concat(at("origin/".concat(n))," HEAD 2>/dev/null || git merge-base ").concat(at(n)," HEAD")}function at(n){return"'".concat(n.replaceAll("'","'\"'\"'"),"'")}function ot(){return ut.apply(this,arguments)}function ut(){return(ut=g(x().m(function n(){var e,t,r;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ee();case 1:return e=n.v,t=it(e),n.n=2,me();case 2:return r=n.v,n.a(2,"\nReview the current ".concat(r?"pull request":"branch"," against its base branch ").concat(e,' via `git diff "$(').concat(t,')"`.\nFor each finding, do the following three steps:\n1. 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.\n2. 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.\n3. Clean up any temporary files created during the experiment.\n4. 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.\n\nReport only the valid findings, the evidence for each one, and the proposed fix with its likely impact. Include a brief justification for each, citing the evidence used (e.g., a failing scenario, experiment result, or official documentation). Do not modify the code.\nIf there are no valid findings, respond exactly with: `').concat(F,"`\n\n").concat(ct(r),"\n").trim())}},n)}))).apply(this,arguments)}function ct(n){return n?"Current pull request context:\n~~~~yaml\n".concat(n.trim(),"\n~~~~\n").trim():""}function st(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 lt(){return ft.apply(this,arguments)}function ft(){return(ft=g(x().m(function n(){var e,t,r;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ee();case 1:return e=n.v,t=it(e),n.n=2,me();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)}function pt(){return dt.apply(this,arguments)}function dt(){return(dt=g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,q(["bunx","skills@latest","add",p(new URL("../..",import.meta.url)),"--global","--yes","--skill","*","--agent","claude-code","--agent","codex","--agent","gemini-cli"],{waitMessage:"Installing packaged skills globally."});case 1:return n.a(2)}},n)}))).apply(this,arguments)}var ht=new n;function mt(n){var t=ht.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()).action(g(x().m(function e(){var t,r,i,a,o,u,c,s,l,f=arguments;return x().w(function(e){for(;;)switch(e.n){case 0:for(t=f.length,r=new Array(t),i=0;i<t;i++)r[i]=f[i];return a=j(r,2),o=a[0],u=a[1],c="string"==typeof o?o:"",s="string"==typeof o?u:o,l=process.stdout,e.n=1,n.run(s.agent,c);case 1:l.write.call(l,e.v);case 2:return e.a(2)}},e)})))}function vt(n,e,t){var r=ht.command(n).description(e).allowExcessArguments(!1);"function"!=typeof t?r.argument(t.argumentName,t.argumentDescription).action(g(x().m(function n(e){var r;return x().w(function(n){for(;;)switch(n.n){case 0:return r=process.stdout,n.n=1,t.run(e);case 1:r.write.call(r,n.v);case 2:return n.a(2)}},n)}))):r.action(g(x().m(function n(){var e;return x().w(function(n){for(;;)switch(n.n){case 0:return e=process.stdout,n.n=1,t();case 1:e.write.call(e,n.v);case 2:return n.a(2)}},n)})))}ht.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),ht.command("install-skills").description("Install all packaged skills globally for Claude Code, Codex, and Gemini CLI").allowExcessArguments(!1).action(g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,pt();case 1:process.stdout.write("Done\n");case 2:return n.a(2)}},n)}))),mt({name:"review",description:"Run review against the current branch with the selected agent",optionDescription:"Use a review agent",choices:["all","codex","claude","gemini"],run:function(n){return"all"===n?J(ot(),{allAgentsLabel:"review agents",mapOutput:function(n,e){if(!function(n){return W.test(n)}(e))return"## ".concat(K(n),"\n\n").concat(e)}}):Q(n,ot())}}),vt("review-codex","Run Codex review against the current branch",function(){return Q("codex",ot())}),vt("review-claude","Run Claude Code review against the current branch",function(){return Q("claude",ot())}),vt("review-gemini","Run Gemini CLI review against the current branch",function(){return Q("gemini",ot())}),mt({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){return"all"===n?J(tt(se(e)),{allAgentsLabel:"planning agents"}):Q(n,tt(se(e)))}}),vt("plan-codex","Run Codex planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return Q("codex",tt(se(n)))}}),vt("plan-claude","Run Claude Code planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return Q("claude",tt(se(n)))}}),vt("plan-gemini","Run Gemini CLI planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return Q("gemini",tt(se(n)))}}),ht.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()).allowExcessArguments(!1).action(g(x().m(function n(e,t,r,i){var a;return x().w(function(n){for(;;)switch(n.n){case 0:return a=process.stdout,n.n=1,Q(i.agent,st(e,t,r));case 1:a.write.call(a,n.v);case 2:return n.a(2)}},n)}))),mt({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){return Q(n,lt())}}),vt("simplify-codex","Run Codex PR simplification against the current branch",function(){return Q("codex",lt())}),vt("simplify-claude","Run Claude Code PR simplification against the current branch",function(){return Q("claude",lt())}),vt("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(){return Q("gemini",lt())}),ht.command("open-pr").description("Create a pull request for the current branch").argument("<title>","Pull request title").allowExcessArguments(!1).action(g(x().m(function n(e){var t,r;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,rn();case 1:return t=n.v,n.n=2,Le({body:t||void 0,title:e});case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),ht.command("update-pr").description("Update the current pull request title and body").argument("<title>","Pull request title").allowExcessArguments(!1).action(g(x().m(function n(e){var t,r;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,on("Error: PR body input is required on stdin");case 1:return t=n.v,n.n=2,De({body:t,title:e});case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),ht.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(g(x().m(function n(){var e;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Fn();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),ht.command("fetch-issue").description("Fetch an issue body and timeline messages as YAML").argument("<issue>","GitHub issue number or URL").allowExcessArguments(!1).action(g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,fe(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),ht.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(g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,de(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),ht.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(g(x().m(function n(){var e;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ke();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),ht.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Fe();case 1:return e=n.v,n.n=2,Ve(e);case 2:t=n.v,process.stdout.write(t);case 3:return n.a(2)}},n)}))),await ht.parseAsync(process.argv);
|
|
5
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy95YW1sLnRzIiwiLi4vc3JjL3ByL3NoYXJlZC50cyIsIi4uL3NyYy9wci9jaS50cyIsIi4uL3NyYy9yZXBvL2RlZmF1bHRCcmFuY2gudHMiLCIuLi9zcmMvcHIvbWVzc2FnZXMudHMiLCIuLi9zcmMvcHIvcHVsbFJlcXVlc3QudHMiLCIuLi9zcmMvcHIvcmV2aWV3VGhyZWFkcy50cyIsIi4uL3NyYy9wcm9tcHRzL3BsYW5Qcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9iYXNlQnJhbmNoRGlmZkNvbW1hbmQudHMiLCIuLi9zcmMvcHJvbXB0cy9yZXZpZXdQcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9zY3JlZW5zaG90UHJvbXB0LnRzIiwiLi4vc3JjL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQudHMiLCIuLi9zcmMvc2tpbGxzL2luc3RhbGxTa2lsbHMudHMiLCIuLi9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbnR5cGUgUnVuQ29tbWFuZE9wdGlvbnMgPSB7XG4gIGxvZ0ZpbGVQYXRoPzogc3RyaW5nO1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIHdhaXRNZXNzYWdlPzogc3RyaW5nIHwgZmFsc2U7XG4gIHdhaXRJbnRlcnZhbFNlY29uZHM/OiBudW1iZXI7XG59O1xuXG50eXBlIFByb2dyZXNzV3JpdGVyID0gKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIEtpbGxhYmxlUHJvY2VzcyA9IHsga2lsbDogKHNpZ25hbD86IE5vZGVKUy5TaWduYWxzKSA9PiBib29sZWFuOyBwaWQ/OiBudW1iZXIgfTtcblxuLy8gVGhlIG9uZS1ob3VyIGJ1ZGdldCBrZWVwcyBhZ2VudHMgd2FpdGluZyBmb3IgbG9uZy1ydW5uaW5nIGNvbW1hbmRzIHdpdGhvdXQgcmVxdWlyaW5nIHRoZSBwcm9jZXNzIHRvIHVzZSB0aGUgZnVsbCBob3VyLlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTID0gMzY7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QUk9DRVNTX1RJTUVPVVRfTVMgPSA2MCAqIDYwICogMTAwMDtcbmNvbnN0IERPVFNfUEVSX1BST0dSRVNTX1BFUkNFTlRfU1RFUCA9IDU7XG5jb25zdCBGT1JDRV9LSUxMX1RJTUVPVVRfTVMgPSA1MDAwO1xuY29uc3QgTUFYX1BST0dSRVNTX1BFUkNFTlQgPSAxMDA7XG5jb25zdCBQUk9DRVNTX0NMRUFOVVBfU0lHTkFMUyA9IFsnU0lHSU5UJywgJ1NJR1RFUk0nLCAnU0lHSFVQJ10gYXMgY29uc3Q7XG5jb25zdCBhY3RpdmVQcm9jZXNzZXMgPSBuZXcgU2V0PEtpbGxhYmxlUHJvY2Vzcz4oKTtcbmxldCBjbGVhbnVwSGFuZGxlcnNJbnN0YWxsZWQgPSBmYWxzZTtcbi8vIEtlZXAgdGhlIENMSSB0ZXh0IGNvbmNpc2Ugc28gZG93bnN0cmVhbSBwcm9tcHRzIGNhbiBtYXRjaCBpdCBjb25zaXN0ZW50bHkuXG5leHBvcnQgY29uc3QgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HID0gJ1RoaXMgY2FuIHRha2UgdXAgdG8gMSBob3VyOyBkb3RzIGluZGljYXRlIHByb2dyZXNzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIGRldGFjaGVkOiB0cnVlLFxuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgfSk7XG4gIGNvbnN0IHByb2Nlc3NUaW1lb3V0ID0gY3JlYXRlUHJvY2Vzc1RpbWVvdXQocHJvYywgb3B0aW9ucy50aW1lb3V0TXMpO1xuICBjb25zdCBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKG9wdGlvbnMud2FpdE1lc3NhZ2UsIG9wdGlvbnMud2FpdEludGVydmFsU2Vjb25kcyk7XG4gIGNvbnN0IGNvbW1hbmRMb2dnZXIgPSBhd2FpdCBjcmVhdGVDb21tYW5kTG9nZ2VyKG9wdGlvbnMubG9nRmlsZVBhdGgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQsIChjaHVuaykgPT4gY29tbWFuZExvZ2dlci53cml0ZShjaHVuaykpLFxuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyLCAoY2h1bmspID0+IGNvbW1hbmRMb2dnZXIud3JpdGUoY2h1bmspKSxcbiAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgfSksXG4gICAgXSk7XG5cbiAgICBpZiAocHJvY2Vzc1RpbWVvdXQudGltZWRPdXQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRpbWVvdXRFcnJvck1lc3NhZ2UoYCR7c3Rkb3V0fSR7c3RkZXJyfWAsIHByb2Nlc3NUaW1lb3V0LnRpbWVvdXRNcywgY29tbWFuZCkpO1xuICAgIH1cblxuICAgIGlmIChleGl0Q29kZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHN0ZG91dDtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcbiAgICB0aHJvdyBuZXcgRXJyb3Iob3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBjb21tYW5kTG9nZ2VyLmNsb3NlKCk7XG4gICAgcHJvY2Vzc1RpbWVvdXQuY2xlYXIoKTtcbiAgICBzdG9wV2FpdFByb2dyZXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVvdXRFcnJvck1lc3NhZ2Uob3V0cHV0OiBzdHJpbmcsIHRpbWVvdXRNczogbnVtYmVyLCBjb21tYW5kOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBgQ29tbWFuZCB0aW1lZCBvdXQgYWZ0ZXIgJHtmb3JtYXREdXJhdGlvbih0aW1lb3V0TXMpfTogJHtjb21tYW5kLmpvaW4oJyAnKX1gO1xuICByZXR1cm4gb3V0cHV0Lmxlbmd0aCA+IDAgPyBgJHtvdXRwdXR9XFxuJHttZXNzYWdlfWAgOiBtZXNzYWdlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RHVyYXRpb24obWlsbGlzZWNvbmRzOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAobWlsbGlzZWNvbmRzICUgKDYwICogNjAgKiAxMDAwKSA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAoNjAgKiA2MCAqIDEwMDApfWhgO1xuICB9XG4gIGlmIChtaWxsaXNlY29uZHMgJSAoNjAgKiAxMDAwKSA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAoNjAgKiAxMDAwKX1tYDtcbiAgfVxuICBpZiAobWlsbGlzZWNvbmRzICUgMTAwMCA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAxMDAwfXNgO1xuICB9XG4gIHJldHVybiBgJHttaWxsaXNlY29uZHN9bXNgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvY2Vzc1RpbWVvdXQoXG4gIHByb2M6IEtpbGxhYmxlUHJvY2VzcyxcbiAgdGltZW91dE1zID0gREVGQVVMVF9QUk9DRVNTX1RJTUVPVVRfTVNcbik6IHsgY2xlYXI6ICgpID0+IHZvaWQ7IHRpbWVkT3V0OiAoKSA9PiBib29sZWFuOyB0aW1lb3V0TXM6IG51bWJlciB9IHtcbiAgbGV0IHRpbWVkT3V0ID0gZmFsc2U7XG4gIGxldCBmb3JjZUtpbGxUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG4gIGFjdGl2ZVByb2Nlc3Nlcy5hZGQocHJvYyk7XG4gIGluc3RhbGxDbGVhbnVwSGFuZGxlcnMoKTtcbiAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHRpbWVkT3V0ID0gdHJ1ZTtcbiAgICBraWxsUHJvY2Vzcyhwcm9jLCAnU0lHVEVSTScpO1xuICAgIGZvcmNlS2lsbFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBraWxsUHJvY2Vzcyhwcm9jLCAnU0lHS0lMTCcpLCBGT1JDRV9LSUxMX1RJTUVPVVRfTVMpO1xuICAgIGZvcmNlS2lsbFRpbWVyLnVucmVmKCk7XG4gIH0sIHRpbWVvdXRNcyk7XG4gIHRpbWVvdXQudW5yZWYoKTtcblxuICByZXR1cm4ge1xuICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBpZiAoZm9yY2VLaWxsVGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGZvcmNlS2lsbFRpbWVyKTtcbiAgICAgIH1cbiAgICAgIGFjdGl2ZVByb2Nlc3Nlcy5kZWxldGUocHJvYyk7XG4gICAgfSxcbiAgICB0aW1lZE91dDogKCkgPT4gdGltZWRPdXQsXG4gICAgdGltZW91dE1zLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsQ2xlYW51cEhhbmRsZXJzKCk6IHZvaWQge1xuICBpZiAoY2xlYW51cEhhbmRsZXJzSW5zdGFsbGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNsZWFudXBIYW5kbGVyc0luc3RhbGxlZCA9IHRydWU7XG5cbiAgZm9yIChjb25zdCBzaWduYWwgb2YgUFJPQ0VTU19DTEVBTlVQX1NJR05BTFMpIHtcbiAgICBwcm9jZXNzLm9uY2Uoc2lnbmFsLCAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHByb2Mgb2YgYWN0aXZlUHJvY2Vzc2VzKSB7XG4gICAgICAgIGtpbGxQcm9jZXNzKHByb2MsIHNpZ25hbCk7XG4gICAgICB9XG4gICAgICBwcm9jZXNzLmV4aXQoMTI4ICsgc2lnbmFsTnVtYmVyKHNpZ25hbCkpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNpZ25hbE51bWJlcihzaWduYWw6ICh0eXBlb2YgUFJPQ0VTU19DTEVBTlVQX1NJR05BTFMpW251bWJlcl0pOiBudW1iZXIge1xuICBzd2l0Y2ggKHNpZ25hbCkge1xuICAgIGNhc2UgJ1NJR0lOVCc6XG4gICAgICByZXR1cm4gMjtcbiAgICBjYXNlICdTSUdURVJNJzpcbiAgICAgIHJldHVybiAxNTtcbiAgICBjYXNlICdTSUdIVVAnOlxuICAgICAgcmV0dXJuIDE7XG4gIH1cbn1cblxuZnVuY3Rpb24ga2lsbFByb2Nlc3MocHJvYzogS2lsbGFibGVQcm9jZXNzLCBzaWduYWw6IE5vZGVKUy5TaWduYWxzKTogdm9pZCB7XG4gIGlmIChwcm9jLnBpZCAmJiBwcm9jLnBpZCA+IDApIHtcbiAgICB0cnkge1xuICAgICAgcHJvY2Vzcy5raWxsKC1wcm9jLnBpZCwgc2lnbmFsKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEZhbGwgYmFjayB0byBraWxsaW5nIHRoZSBkaXJlY3QgY2hpbGQgd2hlbiBwcm9jZXNzLWdyb3VwIHRlcm1pbmF0aW9uIGlzIHVuYXZhaWxhYmxlLlxuICAgIH1cbiAgfVxuICBwcm9jLmtpbGwoc2lnbmFsKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvVGV4dChcbiAgc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBvbkNodW5rPzogKGNodW5rOiBzdHJpbmcpID0+IHZvaWRcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgY29uc3QgY2h1bmtUZXh0ID0gdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyA/IGNodW5rIDogZGVjb2Rlci5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoY2h1bmspLCB7IHN0cmVhbTogdHJ1ZSB9KTtcbiAgICBjaHVua3MucHVzaChjaHVua1RleHQpO1xuICAgIG9uQ2h1bms/LihjaHVua1RleHQpO1xuICB9XG4gIGNvbnN0IGZpbmFsQ2h1bmsgPSBkZWNvZGVyLmRlY29kZSgpO1xuICBpZiAoZmluYWxDaHVuaykge1xuICAgIGNodW5rcy5wdXNoKGZpbmFsQ2h1bmspO1xuICAgIG9uQ2h1bms/LihmaW5hbENodW5rKTtcbiAgfVxuICByZXR1cm4gY2h1bmtzLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2FpdFByb2dyZXNzKFxuICB3YWl0TWVzc2FnZTogc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQsXG4gIHdhaXRJbnRlcnZhbFNlY29uZHMgPSBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyxcbiAgd3JpdGVQcm9ncmVzczogUHJvZ3Jlc3NXcml0ZXIgPSAobWVzc2FnZSkgPT4gcHJvY2Vzcy5zdGRlcnIud3JpdGUobWVzc2FnZSlcbik6ICgpID0+IHZvaWQge1xuICBpZiAoIXdhaXRNZXNzYWdlKSB7XG4gICAgcmV0dXJuICgpID0+IHt9O1xuICB9XG5cbiAgbGV0IGRvdENvdW50ID0gMDtcbiAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgd3JpdGVQcm9ncmVzcygnLicpO1xuICAgIGRvdENvdW50ICs9IDE7XG4gICAgaWYgKGRvdENvdW50IDw9IE1BWF9QUk9HUkVTU19QRVJDRU5UICYmIGRvdENvdW50ICUgRE9UU19QRVJfUFJPR1JFU1NfUEVSQ0VOVF9TVEVQID09PSAwKSB7XG4gICAgICAvLyBUaGlzIHRyYWNrcyBlbGFwc2VkIHdhaXQgYnVkZ2V0LCBub3QgdGhlIGNoaWxkIHByb2Nlc3MgY29tcGxldGlvbiBwZXJjZW50YWdlLlxuICAgICAgd3JpdGVQcm9ncmVzcyhgICR7ZG90Q291bnR9JSBkb25lIGApO1xuICAgIH1cbiAgfSwgd2FpdEludGVydmFsU2Vjb25kcyAqIDEwMDApO1xuXG4gIHdyaXRlUHJvZ3Jlc3MoYCR7d2FpdE1lc3NhZ2V9ICR7V0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HfTogYCk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICB3cml0ZVByb2dyZXNzKCdcXG4nKTtcbiAgfTtcbn1cblxudHlwZSBDb21tYW5kTG9nZ2VyID0ge1xuICB3cml0ZTogKGNodW5rOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNsb3NlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ29tbWFuZExvZ2dlcihsb2dGaWxlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxDb21tYW5kTG9nZ2VyPiB7XG4gIGlmICghbG9nRmlsZVBhdGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6ICgpID0+IHt9LFxuICAgICAgY2xvc2U6IGFzeW5jICgpID0+IHt9LFxuICAgIH07XG4gIH1cblxuICBjb25zdCB3YXJuID0gKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYFdhcm5pbmc6IEZhaWxlZCB0byB3cml0ZSBjb21tYW5kIGxvZyB0byAke2xvZ0ZpbGVQYXRofTogJHtTdHJpbmcoZXJyb3IpfVxcbmApO1xuICB9O1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgbWtkaXIoZGlybmFtZShsb2dGaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGNvbnN0IHN0cmVhbSA9IGNyZWF0ZVdyaXRlU3RyZWFtKGxvZ0ZpbGVQYXRoLCB7IGZsYWdzOiAndycgfSk7XG5cbiAgICBzdHJlYW0ub24oJ2Vycm9yJywgd2Fybik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6IChjaHVuaykgPT4ge1xuICAgICAgICBpZiAoc3RyZWFtLndyaXRhYmxlKSB7XG4gICAgICAgICAgc3RyZWFtLndyaXRlKGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PlxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIHN0cmVhbS5lbmQoKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgfSksXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB3YXJuKGVycm9yKTtcbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6ICgpID0+IHt9LFxuICAgICAgY2xvc2U6IGFzeW5jICgpID0+IHt9LFxuICAgIH07XG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBOT19DT05DRVJOX1BIUkFTRSA9ICd0aGVyZSBpcyBubyBjb25jZXJuJztcbmV4cG9ydCBjb25zdCBOT19DT05DRVJOX01FU1NBR0UgPSAnVGhlcmUgaXMgbm8gY29uY2Vybi4nO1xuIiwiaW1wb3J0IHsgY3JlYXRlV2FpdFByb2dyZXNzLCBydW5Db21tYW5kV2l0aFByb2dyZXNzIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSwgTk9fQ09OQ0VSTl9QSFJBU0UgfSBmcm9tICcuLi9yZXZpZXcvbm9Db25jZXJuLmpzJztcblxuZXhwb3J0IGNvbnN0IEFHRU5UX05BTUVTID0gWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10gYXMgY29uc3Q7XG5jb25zdCBDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYID0gbmV3IFJlZ0V4cChgXFxcXGIke05PX0NPTkNFUk5fUEhSQVNFfVxcXFxiYCwgJ2knKTtcbmV4cG9ydCB0eXBlIEFnZW50TmFtZSA9ICh0eXBlb2YgQUdFTlRfTkFNRVMpW251bWJlcl07XG5cbnR5cGUgQWdlbnRDb21tYW5kT3B0aW9ucyA9IHtcbiAgd2FpdE1lc3NhZ2U/OiBzdHJpbmcgfCBmYWxzZTtcbn07XG5cbnR5cGUgQWxsQWdlbnRDb21tYW5kT3B0aW9ucyA9IHtcbiAgYWxsQWdlbnRzTGFiZWw6IHN0cmluZztcbiAgbWFwT3V0cHV0PzogKGFnZW50OiBBZ2VudE5hbWUsIG91dHB1dDogc3RyaW5nKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQWxsQWdlbnRDb21tYW5kcyhcbiAgcHJvbXB0OiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4sXG4gIG9wdGlvbnM6IEFsbEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7IGFsbEFnZW50c0xhYmVsOiAnYWdlbnRzJyB9XG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNvbHZlZFByb21wdCA9IGF3YWl0IHByb21wdDtcbiAgY29uc3Qgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyh3YWl0TWVzc2FnZUZvcihvcHRpb25zLmFsbEFnZW50c0xhYmVsKSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBvdXRwdXRzID0gKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIEFHRU5UX05BTUVTLm1hcChhc3luYyAoYWdlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSAoXG4gICAgICAgICAgICBhd2FpdCBydW5BZ2VudENvbW1hbmQoYWdlbnQsIHJlc29sdmVkUHJvbXB0LCB7XG4gICAgICAgICAgICAgIHdhaXRNZXNzYWdlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKS50cmltKCk7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbnMubWFwT3V0cHV0Py4oYWdlbnQsIG91dHB1dCkgPz8gYCMjICR7ZGlzcGxheUFnZW50TmFtZShhZ2VudCl9XFxuXFxuJHtvdXRwdXR9YDtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApLmZpbHRlcigob3V0cHV0KTogb3V0cHV0IGlzIHN0cmluZyA9PiBvdXRwdXQgIT09IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIG91dHB1dHMubGVuZ3RoID4gMCA/IG91dHB1dHMuam9pbignXFxuXFxuJykgOiBOT19DT05DRVJOX01FU1NBR0U7XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5BZ2VudENvbW1hbmQoXG4gIGFnZW50OiBBZ2VudE5hbWUsXG4gIHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+LFxuICBvcHRpb25zOiBBZ2VudENvbW1hbmRPcHRpb25zID0ge31cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBydW5Db21tYW5kV2l0aFByb2dyZXNzKGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudCwgYXdhaXQgcHJvbXB0KSwge1xuICAgIGxvZ0ZpbGVQYXRoOiBhZ2VudExvZ0ZpbGVQYXRoKGFnZW50KSxcbiAgICB3YWl0TWVzc2FnZTogb3B0aW9ucy53YWl0TWVzc2FnZSA9PT0gdW5kZWZpbmVkID8gd2FpdE1lc3NhZ2VGb3IoZGlzcGxheUFnZW50TmFtZShhZ2VudCkpIDogb3B0aW9ucy53YWl0TWVzc2FnZSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudDogQWdlbnROYW1lLCBwcm9tcHQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgc3dpdGNoIChhZ2VudCkge1xuICAgIGNhc2UgJ2NvZGV4JzpcbiAgICAgIHJldHVybiBbJ25weCcsICctLXllcycsICdAb3BlbmFpL2NvZGV4QGxhdGVzdCcsICdleGVjJywgJy0tZGFuZ2Vyb3VzbHktYnlwYXNzLWFwcHJvdmFscy1hbmQtc2FuZGJveCcsIHByb21wdF07XG4gICAgY2FzZSAnY2xhdWRlJzpcbiAgICAgIHJldHVybiBbJ2NsYXVkZScsICctLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnMnLCAnLXAnLCBwcm9tcHRdO1xuICAgIGNhc2UgJ2dlbWluaSc6XG4gICAgICByZXR1cm4gW1xuICAgICAgICAnbnB4JyxcbiAgICAgICAgJy0teWVzJyxcbiAgICAgICAgJ0Bnb29nbGUvZ2VtaW5pLWNsaUBwcmV2aWV3JyxcbiAgICAgICAgJy0tYXBwcm92YWwtbW9kZScsXG4gICAgICAgICd5b2xvJyxcbiAgICAgICAgJy0tbW9kZWwnLFxuICAgICAgICAnZ2VtaW5pLTMuMS1wcm8tcHJldmlldycsXG4gICAgICAgICctcCcsXG4gICAgICAgIHByb21wdCxcbiAgICAgIF07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BsYXlBZ2VudE5hbWUoYWdlbnQ6IEFnZW50TmFtZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAoYWdlbnQpIHtcbiAgICBjYXNlICdjb2RleCc6XG4gICAgICByZXR1cm4gJ0NvZGV4JztcbiAgICBjYXNlICdjbGF1ZGUnOlxuICAgICAgcmV0dXJuICdDbGF1ZGUgQ29kZSc7XG4gICAgY2FzZSAnZ2VtaW5pJzpcbiAgICAgIHJldHVybiAnR2VtaW5pIENMSSc7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2Uob3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIENPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVgudGVzdChvdXRwdXQpO1xufVxuXG5mdW5jdGlvbiB3YWl0TWVzc2FnZUZvcih0YXJnZXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgV2FpdGluZyBmb3IgJHt0YXJnZXR9IHRvIGZpbmlzaC5gO1xufVxuXG5mdW5jdGlvbiBhZ2VudExvZ0ZpbGVQYXRoKGFnZW50OiBBZ2VudE5hbWUpOiBzdHJpbmcge1xuICByZXR1cm4gYGxvZ3MvJHthZ2VudH0tJHt0aW1lc3RhbXBGb3JMb2dGaWxlKCl9LmxvZ2A7XG59XG5cbmZ1bmN0aW9uIHRpbWVzdGFtcEZvckxvZ0ZpbGUoKTogc3RyaW5nIHtcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgY29uc3QgW21vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kXSA9IFtcbiAgICBub3cuZ2V0TW9udGgoKSArIDEsXG4gICAgbm93LmdldERhdGUoKSxcbiAgICBub3cuZ2V0SG91cnMoKSxcbiAgICBub3cuZ2V0TWludXRlcygpLFxuICAgIG5vdy5nZXRTZWNvbmRzKCksXG4gIF0ubWFwKHR3b0RpZ2l0cyk7XG4gIHJldHVybiBgJHttb250aH0ke2RheX0tJHtob3VyfSR7bWludXRlfSR7c2Vjb25kfWA7XG59XG5cbmZ1bmN0aW9uIHR3b0RpZ2l0cyh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbn1cbiIsIi8qKlxuICogYGJsb2NrUXVvdGU6ICdsaXRlcmFsJ2A6IFVzZXMgYSBwaXBlIChgcHJvcDogfGApIHRvIHJlcHJlc2VudCBtdWx0aWxpbmUgc3RyaW5ncy5cbiAqIGBsaW5lV2lkdGg6IDBgOiBEaXNhYmxlcyBsaW5lIHdyYXBwaW5nLlxuICovXG5leHBvcnQgY29uc3QgeWFtbFN0cmluZ2lmeU9wdGlvbnMgPSB7IGJsb2NrUXVvdGU6ICdsaXRlcmFsJywgbGluZVdpZHRoOiAwIH0gYXMgY29uc3Q7XG4iLCJpbXBvcnQgeyBzcGF3biwgc3Bhd25TeW5jIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHN0ZGVyciBhcyBwcm9jZXNzU3RkZXJyLCBzdGRpbiBhcyBwcm9jZXNzU3RkaW4gfSBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgc2V0VGltZW91dCBhcyBzbGVlcCB9IGZyb20gJ25vZGU6dGltZXJzL3Byb21pc2VzJztcbmltcG9ydCB7IHN0cmluZ2lmeSBhcyBzdHJpbmdpZnlZYW1sIH0gZnJvbSAneWFtbCc7XG5pbXBvcnQgeyBjcmVhdGVQcm9jZXNzVGltZW91dCwgc3RyZWFtVG9UZXh0LCB0aW1lb3V0RXJyb3JNZXNzYWdlIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7IHlhbWxTdHJpbmdpZnlPcHRpb25zIH0gZnJvbSAnLi4veWFtbC5qcyc7XG5cbmV4cG9ydCB0eXBlIEpzb25PYmplY3QgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZSA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgdHlwZSBNZXRhZGF0YU5vZGUgPSB7XG4gIG51bWJlcjogbnVtYmVyO1xuICB0aXRsZTogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgUGFnZUluZm8gPSB7XG4gIGhhc05leHRQYWdlOiBib29sZWFuO1xuICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xufTtcblxuZXhwb3J0IHR5cGUgTWVzc2FnZUNvbm5lY3Rpb248VE5vZGU+ID0ge1xuICBub2RlczogVE5vZGVbXTtcbiAgcGFnZUluZm86IFBhZ2VJbmZvO1xufTtcblxudHlwZSBSdW5Db21tYW5kT3B0aW9ucyA9IHtcbiAgc3RkaW5EYXRhPzogc3RyaW5nO1xuICBhbGxvd2VkRXhpdENvZGVzPzogbnVtYmVyW107XG59O1xuXG5jb25zdCBHSF9SRVRSWV9NQVhfQVRURU1QVFMgPSAzO1xuY29uc3QgR0hfUkVUUllfQkFTRV9ERUxBWV9NUyA9IDEwMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9ncmVzcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgcHJvY2Vzc1N0ZGVyci53cml0ZShgJHttZXNzYWdlfVxcbmApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhpdFdpdGhFcnJvcihtZXNzYWdlOiBzdHJpbmcsIGNvZGUgPSAxKTogbmV2ZXIge1xuICBwcm9jZXNzU3RkZXJyLndyaXRlKGAke21lc3NhZ2V9XFxuYCk7XG4gIHByb2Nlc3MuZXhpdChjb2RlKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRTdGRpblRleHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKHByb2Nlc3NTdGRpbi5pc1RUWSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuICByZXR1cm4gYXdhaXQgc3RyZWFtVG9UZXh0KHByb2Nlc3NTdGRpbik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkUmVxdWlyZWRTdGRpblRleHQoZXJyb3JNZXNzYWdlID0gJ0Vycm9yOiBpbnB1dCBpcyByZXF1aXJlZCBvbiBzdGRpbicpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRTdGRpblRleHQoKTtcbiAgaWYgKGlucHV0Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cbiAgZXhpdFdpdGhFcnJvcihlcnJvck1lc3NhZ2UsIDIpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQ29tbWFuZChjb21tYW5kOiBzdHJpbmdbXSwgb3B0aW9uczogUnVuQ29tbWFuZE9wdGlvbnMgPSB7fSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGFsbG93ZWRFeGl0Q29kZXMgPSBvcHRpb25zLmFsbG93ZWRFeGl0Q29kZXMgPz8gW107XG5cbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gR0hfUkVUUllfTUFYX0FUVEVNUFRTOyBhdHRlbXB0ICs9IDEpIHtcbiAgICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgICAgZGV0YWNoZWQ6IHRydWUsXG4gICAgICBzdGRpbzogWydwaXBlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgIH0pO1xuICAgIGxldCBmYWlsdXJlTWVzc2FnZTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIGxldCByZXRyeSA9IGZhbHNlO1xuICAgIGNvbnN0IHByb2Nlc3NUaW1lb3V0ID0gY3JlYXRlUHJvY2Vzc1RpbWVvdXQocHJvYyk7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChvcHRpb25zLnN0ZGluRGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHByb2Muc3RkaW4uZW5kKG9wdGlvbnMuc3RkaW5EYXRhKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Muc3RkaW4uZW5kKCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IFtzdGRvdXQsIHN0ZGVyciwgZXhpdENvZGVdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQpLFxuICAgICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRlcnIpLFxuICAgICAgICBuZXcgUHJvbWlzZTxudW1iZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgICBwcm9jLm9uY2UoJ2Nsb3NlJywgKGNvZGUpID0+IHJlc29sdmUoY29kZSA/PyAxKSk7XG4gICAgICAgIH0pLFxuICAgICAgXSk7XG4gICAgICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcblxuICAgICAgaWYgKHByb2Nlc3NUaW1lb3V0LnRpbWVkT3V0KCkpIHtcbiAgICAgICAgZmFpbHVyZU1lc3NhZ2UgPSB0aW1lb3V0RXJyb3JNZXNzYWdlKG91dHB1dCwgcHJvY2Vzc1RpbWVvdXQudGltZW91dE1zLCBjb21tYW5kKTtcbiAgICAgIH0gZWxzZSBpZiAoZXhpdENvZGUgPT09IDAgfHwgYWxsb3dlZEV4aXRDb2Rlcy5pbmNsdWRlcyhleGl0Q29kZSkpIHtcbiAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgIH0gZWxzZSBpZiAoaXNUcmFuc2llbnRHaEZhaWx1cmUoY29tbWFuZCwgZXhpdENvZGUsIG91dHB1dCkgJiYgYXR0ZW1wdCA8IEdIX1JFVFJZX01BWF9BVFRFTVBUUykge1xuICAgICAgICByZXRyeSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG91dHB1dCB8fCBgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZC5qb2luKCcgJyl9YDtcbiAgICAgIH1cbiAgICB9IGZpbmFsbHkge1xuICAgICAgcHJvY2Vzc1RpbWVvdXQuY2xlYXIoKTtcbiAgICB9XG5cbiAgICBpZiAocmV0cnkpIHtcbiAgICAgIHByb2dyZXNzKGBUcmFuc2llbnQgR2l0SHViIENMSSBmYWlsdXJlOyByZXRyeWluZy4uLiAoYXR0ZW1wdCAke2F0dGVtcHR9IG9mICR7R0hfUkVUUllfTUFYX0FUVEVNUFRTIC0gMX0pYCk7XG4gICAgICBhd2FpdCBzbGVlcChHSF9SRVRSWV9CQVNFX0RFTEFZX01TICogYXR0ZW1wdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGZhaWx1cmVNZXNzYWdlKSB7XG4gICAgICBleGl0V2l0aEVycm9yKGZhaWx1cmVNZXNzYWdlKTtcbiAgICB9XG4gIH1cbiAgZXhpdFdpdGhFcnJvcihgQ29tbWFuZCBmYWlsZWQgYWZ0ZXIgJHtHSF9SRVRSWV9NQVhfQVRURU1QVFN9IGF0dGVtcHRzOiAke2NvbW1hbmQuam9pbignICcpfWApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2goYXJnczogc3RyaW5nW10sIHN0ZGluRGF0YT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBydW5Db21tYW5kKFsnZ2gnLCAuLi5hcmdzXSwgeyBzdGRpbkRhdGEgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaEFsbG93RXhpdENvZGVzKFxuICBhcmdzOiBzdHJpbmdbXSxcbiAgYWxsb3dlZEV4aXRDb2RlczogbnVtYmVyW10sXG4gIHN0ZGluRGF0YT86IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHJ1bkNvbW1hbmQoWydnaCcsIC4uLmFyZ3NdLCB7IHN0ZGluRGF0YSwgYWxsb3dlZEV4aXRDb2RlcyB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRSZXBvUGFydHMoKTogUHJvbWlzZTxbc3RyaW5nLCBzdHJpbmddPiB7XG4gIGNvbnN0IG5hbWVXaXRoT3duZXIgPSAoYXdhaXQgZ2goWydyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ25hbWVXaXRoT3duZXInLCAnLS1qcScsICcubmFtZVdpdGhPd25lciddKSkudHJpbSgpO1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gbmFtZVdpdGhPd25lci5zcGxpdCgnLycsIDIpO1xuICBpZiAoIW93bmVyIHx8ICFuYW1lKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCByZXBvc2l0b3J5Jyk7XG4gIH1cbiAgcmV0dXJuIFtvd25lciwgbmFtZV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50UHJOdW1iZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIChhd2FpdCBnaChbJ3ByJywgJ3ZpZXcnLCAnLS1qc29uJywgJ251bWJlcicsICctLWpxJywgJy5udW1iZXInXSkpLnRyaW0oKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdyYXBocWw8VCBleHRlbmRzIEpzb25PYmplY3Q+KFxuICBxdWVyeTogc3RyaW5nLFxuICB2YXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQ+ID0ge31cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBhcmdzID0gWydhcGknLCAnZ3JhcGhxbCcsICctRicsICdxdWVyeT1ALSddO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YXJzKSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLUYnLCBgJHtrZXl9PSR7dmFsdWV9YCk7XG4gIH1cblxuICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UoYXdhaXQgZ2goYXJncywgcXVlcnkpKSBhcyBKc29uT2JqZWN0ICYgeyBlcnJvcnM/OiBBcnJheTx7IG1lc3NhZ2U/OiBzdHJpbmcgfT4gfTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UgYXMgVDtcbiAgfVxuXG4gIGNvbnN0IGVycm9yTWVzc2FnZXMgPSByZXNwb25zZS5lcnJvcnMubWFwKChlcnJvcikgPT4gZXJyb3IubWVzc2FnZSA/PyAnVW5rbm93biBHcmFwaFFMIGVycm9yJykuam9pbignXFxuJyk7XG4gIGV4aXRXaXRoRXJyb3IoYEdyYXBoUUwgQVBJIGVycm9yOlxcbiR7ZXJyb3JNZXNzYWdlc31gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHlhbWxEdW1wKGRhdGE6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5naWZ5WWFtbChkYXRhLCB5YW1sU3RyaW5naWZ5T3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ29weTxUPihkYXRhOiBUKTogVCB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKSBhcyBUO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZEF2YWlsYWJsZShjb21tYW5kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNwYXduU3luY1NhZmUoW2NvbW1hbmQsICctLXZlcnNpb24nXSkuZXhpdENvZGUgPT09IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGF3blN5bmNTYWZlKGNvbW1hbmQ6IHN0cmluZ1tdLCBzdGRpbkRhdGE/OiBzdHJpbmcpOiB7IGV4aXRDb2RlOiBudW1iZXI7IG91dHB1dDogc3RyaW5nIH0ge1xuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgaW5wdXQ6IHN0ZGluRGF0YSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBleGl0Q29kZTogcmVzdWx0LnN0YXR1cyA/PyAocmVzdWx0LmVycm9yID8gMSA6IDApLFxuICAgIG91dHB1dDogYCR7cmVzdWx0LnN0ZG91dCA/PyAnJ30ke3Jlc3VsdC5zdGRlcnIgPz8gJyd9YCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNUcmFuc2llbnRHaEZhaWx1cmUoY29tbWFuZDogc3RyaW5nW10sIGV4aXRDb2RlOiBudW1iZXIsIG91dHB1dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChjb21tYW5kWzBdICE9PSAnZ2gnIHx8IGV4aXRDb2RlID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIC8oSFRUUCA1MFswMjM0XVxcYnxXZSBoYWQgaXNzdWVzIHByb2R1Y2luZyB0aGUgcmVzcG9uc2UgdG8geW91ciByZXF1ZXN0KS9pLnRlc3Qob3V0cHV0KTtcbn1cbiIsImltcG9ydCB7IHN0ZGVyciBhcyBwcm9jZXNzU3RkZXJyIH0gZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7IHNldFRpbWVvdXQgYXMgc2xlZXAgfSBmcm9tICdub2RlOnRpbWVycy9wcm9taXNlcyc7XG5pbXBvcnQgeyBzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgY3JlYXRlV2FpdFByb2dyZXNzLCBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5pbXBvcnQge1xuICBjb21tYW5kQXZhaWxhYmxlLFxuICBjdXJyZW50UHJOdW1iZXIsXG4gIGRlZXBDb3B5LFxuICBleGl0V2l0aEVycm9yLFxuICBnaEFsbG93RXhpdENvZGVzLFxuICBwcm9ncmVzcyxcbiAgc3Bhd25TeW5jU2FmZSxcbiAgeWFtbER1bXAsXG59IGZyb20gJy4vc2hhcmVkLmpzJztcblxuZXhwb3J0IGNvbnN0IFRFU1RfUkVMQVRFRF9QQVRURVJOID0gL1xcYnRlc3RcXGIvaTtcbmV4cG9ydCBjb25zdCBURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyA9IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTO1xuLy8gT25lIGh1bmRyZWQgMzYtc2Vjb25kIGNoZWNrcyBwcmVzZXJ2ZXMgdGhlIG1heGltdW0gb25lLWhvdXIgQ0kgd2FpdCBidWRnZXQuXG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX01BWF9BVFRFTVBUUyA9IDEwMDtcbmNvbnN0IFRFU1RfQ0hFQ0tfV0FJVF9NRVNTQUdFID0gJ1dhaXRpbmcgZm9yIHRlc3QtcmVsYXRlZCB3b3JrZmxvd3MgdG8gZmluaXNoLic7XG5leHBvcnQgY29uc3QgWkVST19USU1FU1RBTVAgPSAnMDAwMS0wMS0wMVQwMDowMDowMFonO1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyA9IFtcbiAgJ2F0dGVtcHQnLFxuICAnY29uY2x1c2lvbicsXG4gICdjcmVhdGVkQXQnLFxuICAnZGF0YWJhc2VJZCcsXG4gICdkaXNwbGF5VGl0bGUnLFxuICAnZXZlbnQnLFxuICAnaGVhZEJyYW5jaCcsXG4gICdoZWFkU2hhJyxcbiAgJ2pvYnMnLFxuICAnbmFtZScsXG4gICdudW1iZXInLFxuICAnc3RhcnRlZEF0JyxcbiAgJ3N0YXR1cycsXG4gICd1cGRhdGVkQXQnLFxuICAndXJsJyxcbiAgJ3dvcmtmbG93TmFtZScsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBDaGVjayA9IHtcbiAgYnVja2V0Pzogc3RyaW5nO1xuICBjb21wbGV0ZWRBdD86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIGV2ZW50Pzogc3RyaW5nO1xuICBsaW5rPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBzdGFydGVkQXQ/OiBzdHJpbmc7XG4gIHN0YXRlPzogc3RyaW5nO1xuICB3b3JrZmxvdz86IHN0cmluZztcbiAgW2tleTogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIENpUmVzdWx0cyA9IHtcbiAgc3VtbWFyeToge1xuICAgIHRvdGFsOiBudW1iZXI7XG4gICAgcGFzczogbnVtYmVyO1xuICAgIGZhaWw6IG51bWJlcjtcbiAgICBwZW5kaW5nOiBudW1iZXI7XG4gICAgc2tpcHBpbmc6IG51bWJlcjtcbiAgICBjYW5jZWw6IG51bWJlcjtcbiAgfTtcbiAgY2hlY2tzOiBDaGVja1tdO1xufTtcblxuZXhwb3J0IHR5cGUgV29ya2Zsb3dDbGFzc2lmaWNhdGlvbiA9ICdmYWlsZWQnIHwgJ3J1bm5pbmcnIHwgJ3N1Y2Nlc3NmdWwnO1xuXG5leHBvcnQgdHlwZSBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQgPSB7XG4gIGNsYXNzaWZpY2F0aW9uOiBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uO1xuICBjaGVjazogQ2hlY2s7XG4gIGNoZWNrczogQ2hlY2tbXTtcbn07XG5cbnR5cGUgQ29tcGFjdFdvcmtmbG93UnVuID0ge1xuICBicmFuY2g/OiBzdHJpbmc7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIGZhaWxlZF9zdGVwPzogc3RyaW5nO1xuICBqb2I/OiBzdHJpbmc7XG4gIGpvYl91cmw/OiBzdHJpbmc7XG4gIHJ1bl9pZD86IHN0cmluZztcbiAgcnVuX3VybD86IHN0cmluZztcbiAgc2hhPzogc3RyaW5nO1xuICB3b3JrZmxvdz86IHN0cmluZztcbn07XG5cbnR5cGUgV29ya2Zsb3dSdW5TdGVwID0ge1xuICBjb25jbHVzaW9uPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBudW1iZXI/OiBudW1iZXI7XG4gIHN0YXR1cz86IHN0cmluZztcbn07XG5cbnR5cGUgV29ya2Zsb3dSdW5Kb2IgPSB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIGRhdGFiYXNlSWQ/OiBudW1iZXI7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN0YXR1cz86IHN0cmluZztcbiAgc3RlcHM/OiBXb3JrZmxvd1J1blN0ZXBbXTtcbiAgdXJsPzogc3RyaW5nO1xufTtcblxudHlwZSBXb3JrZmxvd1J1bkRldGFpbHMgPSB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIGhlYWRCcmFuY2g/OiBzdHJpbmc7XG4gIGhlYWRTaGE/OiBzdHJpbmc7XG4gIGpvYnM/OiBXb3JrZmxvd1J1bkpvYltdO1xuICB1cmw/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4gPSAvXi4qP1xcdFVOS05PV04gU1RFUFxcdFxcZHs0fS1cXGR7Mn0tXFxkezJ9VFteWl0rWlxccyovO1xuY29uc3QgcnRrQXZhaWxhYmxlID0gY29tbWFuZEF2YWlsYWJsZSgncnRrJyk7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsYXRlc3RQckNpUmVzdWx0cyhwck51bWJlcj86IHN0cmluZyk6IFByb21pc2U8Q2lSZXN1bHRzPiB7XG4gIGNvbnN0IGFyZ3MgPSBbJ3ByJywgJ2NoZWNrcyddO1xuICBpZiAocHJOdW1iZXIpIHtcbiAgICBhcmdzLnB1c2gocHJOdW1iZXIpO1xuICB9XG4gIGFyZ3MucHVzaCgnLS1qc29uJywgJ2J1Y2tldCxjb21wbGV0ZWRBdCxkZXNjcmlwdGlvbixldmVudCxsaW5rLG5hbWUsc3RhcnRlZEF0LHN0YXRlLHdvcmtmbG93Jyk7XG5cbiAgbGV0IGNoZWNrczogQ2hlY2tbXSA9IFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoYXJncywgWzhdKTtcbiAgICBjaGVja3MgPSByYXcudHJpbSgpLmxlbmd0aCA+IDAgPyAoSlNPTi5wYXJzZShyYXcpIGFzIENoZWNrW10pIDogW107XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgIGNoZWNrcyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdW1tYXJ5ID0gY2hlY2tzLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+PigoY291bnRzLCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IGJ1Y2tldCA9IGNoZWNrLmJ1Y2tldCA/PyAnJztcbiAgICBjb3VudHNbYnVja2V0XSA9IChjb3VudHNbYnVja2V0XSA/PyAwKSArIDE7XG4gICAgcmV0dXJuIGNvdW50cztcbiAgfSwge30pO1xuXG4gIHJldHVybiB7XG4gICAgc3VtbWFyeToge1xuICAgICAgdG90YWw6IGNoZWNrcy5sZW5ndGgsXG4gICAgICBwYXNzOiBzdW1tYXJ5LnBhc3MgPz8gMCxcbiAgICAgIGZhaWw6IHN1bW1hcnkuZmFpbCA/PyAwLFxuICAgICAgcGVuZGluZzogc3VtbWFyeS5wZW5kaW5nID8/IDAsXG4gICAgICBza2lwcGluZzogc3VtbWFyeS5za2lwcGluZyA/PyAwLFxuICAgICAgY2FuY2VsOiBzdW1tYXJ5LmNhbmNlbCA/PyAwLFxuICAgIH0sXG4gICAgY2hlY2tzLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyhcbiAgcHJOdW1iZXI6IHN0cmluZyxcbiAgc2xlZXBGbjogKHNlY29uZHM6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiA9IHNsZWVwU2Vjb25kcyxcbiAgbGF0ZXN0Q2lSZXN1bHRzRm46IChwck51bWJlcj86IHN0cmluZykgPT4gQ2lSZXN1bHRzIHwgUHJvbWlzZTxDaVJlc3VsdHM+ID0gbGF0ZXN0UHJDaVJlc3VsdHMsXG4gIHdyaXRlUHJvZ3Jlc3NGbjogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCA9IChtZXNzYWdlKSA9PiBwcm9jZXNzU3RkZXJyLndyaXRlKG1lc3NhZ2UpXG4pOiBQcm9taXNlPFtDaVJlc3VsdHMsIG51bWJlciwgYm9vbGVhbl0+IHtcbiAgbGV0IGF0dGVtcHRzID0gMDtcbiAgbGV0IGNpUmVzdWx0cyA9IGF3YWl0IGxhdGVzdENpUmVzdWx0c0ZuKHByTnVtYmVyKTtcbiAgbGV0IHN0b3BXYWl0UHJvZ3Jlc3MgPSAoKSA9PiB7fTtcblxuICB0cnkge1xuICAgIGZvciAoOzspIHtcbiAgICAgIGNvbnN0IGNsYXNzaWZpZWRSZXN1bHRzID0gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzKTtcbiAgICAgIGNvbnN0IFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c10gPSBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoY2xhc3NpZmllZFJlc3VsdHMpO1xuXG4gICAgICBpZiAoT2JqZWN0LmtleXMoZmFpbGVkUmVzdWx0cykubGVuZ3RoID4gMCB8fCBPYmplY3Qua2V5cyhydW5uaW5nUmVzdWx0cykubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbY2lSZXN1bHRzLCBhdHRlbXB0cywgZmFsc2VdO1xuICAgICAgfVxuICAgICAgaWYgKGF0dGVtcHRzID49IFRFU1RfQ0hFQ0tfV0FJVF9NQVhfQVRURU1QVFMpIHtcbiAgICAgICAgcmV0dXJuIFtjaVJlc3VsdHMsIGF0dGVtcHRzLCB0cnVlXTtcbiAgICAgIH1cblxuICAgICAgYXR0ZW1wdHMgKz0gMTtcbiAgICAgIGlmIChhdHRlbXB0cyA9PT0gMSkge1xuICAgICAgICBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKFxuICAgICAgICAgIFRFU1RfQ0hFQ0tfV0FJVF9NRVNTQUdFLFxuICAgICAgICAgIFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTLFxuICAgICAgICAgIHdyaXRlUHJvZ3Jlc3NGblxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgYXdhaXQgc2xlZXBGbihURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyk7XG4gICAgICBjaVJlc3VsdHMgPSBhd2FpdCBsYXRlc3RDaVJlc3VsdHNGbihwck51bWJlcik7XG4gICAgfVxuICB9IGZpbmFsbHkge1xuICAgIHN0b3BXYWl0UHJvZ3Jlc3MoKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzOiBDaVJlc3VsdHMpOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+IHtcbiAgY29uc3QgbGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3cgPSBjaVJlc3VsdHMuY2hlY2tzLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBDaGVja1tdPj4oKGdyb3VwZWRSZXN1bHRzLCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IHdvcmtmbG93S2V5ID0gY2hlY2sud29ya2Zsb3cgfHwgY2hlY2submFtZSB8fCAndW5rbm93bl93b3JrZmxvdyc7XG4gICAgZ3JvdXBlZFJlc3VsdHNbd29ya2Zsb3dLZXldID8/PSBbXTtcbiAgICBncm91cGVkUmVzdWx0c1t3b3JrZmxvd0tleV0ucHVzaChjaGVjayk7XG4gICAgcmV0dXJuIGdyb3VwZWRSZXN1bHRzO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhsYXRlc3RSZXN1bHRzQnlXb3JrZmxvdykubWFwKChbd29ya2Zsb3dLZXksIGNoZWNrc10pID0+IHtcbiAgICAgIGNvbnN0IGxhdGVzdEF0dGVtcHRDaGVja3MgPSBsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyhjaGVja3MpO1xuICAgICAgY29uc3QgZmlyc3RDaGVjayA9IGxhdGVzdEF0dGVtcHRDaGVja3NbMF07XG4gICAgICBpZiAoIWZpcnN0Q2hlY2spIHtcbiAgICAgICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IG5vIGNoZWNrcyBmb3VuZCBmb3Igd29ya2Zsb3cgJHt3b3JrZmxvd0tleX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxhdGVzdENoZWNrID1cbiAgICAgICAgbGF0ZXN0QXR0ZW1wdENoZWNrcy5yZWR1Y2U8Q2hlY2sgfCB1bmRlZmluZWQ+KChjdXJyZW50TGF0ZXN0LCBjaGVjaykgPT4ge1xuICAgICAgICAgIGlmICghY3VycmVudExhdGVzdCkge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2spID4gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY3VycmVudExhdGVzdCkgPyBjaGVjayA6IGN1cnJlbnRMYXRlc3Q7XG4gICAgICAgIH0sIHVuZGVmaW5lZCkgPz8gZmlyc3RDaGVjaztcblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgd29ya2Zsb3dLZXksXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc2lmaWNhdGlvbjogd29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbihsYXRlc3RBdHRlbXB0Q2hlY2tzKSxcbiAgICAgICAgICBjaGVjazogbGF0ZXN0Q2hlY2ssXG4gICAgICAgICAgY2hlY2tzOiBsYXRlc3RBdHRlbXB0Q2hlY2tzLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9KVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKFxuICBjbGFzc2lmaWVkUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PlxuKTogW1JlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4sIFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD5dIHtcbiAgY29uc3QgZmFpbGVkUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiA9IHt9O1xuICBjb25zdCBydW5uaW5nUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiA9IHt9O1xuXG4gIGZvciAoY29uc3QgW3dvcmtmbG93S2V5LCByZXN1bHRdIG9mIE9iamVjdC5lbnRyaWVzKGNsYXNzaWZpZWRSZXN1bHRzKSkge1xuICAgIGlmIChyZXN1bHQuY2xhc3NpZmljYXRpb24gPT09ICdmYWlsZWQnKSB7XG4gICAgICBmYWlsZWRSZXN1bHRzW3dvcmtmbG93S2V5XSA9IHJlc3VsdDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAocmVzdWx0LmNsYXNzaWZpY2F0aW9uID09PSAncnVubmluZycgJiYgcmVzdWx0LmNoZWNrcy5zb21lKChjaGVjaykgPT4gdGVzdFJlbGF0ZWRDaGVjayhjaGVjaykpKSB7XG4gICAgICBydW5uaW5nUmVzdWx0c1t3b3JrZmxvd0tleV0gPSByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjazogQ2hlY2sgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBsaW5rID0gY2hlY2s/Lmxpbms7XG4gIGlmICghbGluaykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGxpbmsubWF0Y2goL1xcL2FjdGlvbnNcXC9ydW5zXFwvKFxcZCspLyk/LlsxXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdvcmtmbG93UnVuKHJ1bklkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+IHwgdW5kZWZpbmVkPiB7XG4gIGlmICghcnVuSWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcnVuSnNvbiA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydydW4nLCAndmlldycsIHJ1bklkLCAnLS1qc29uJywgV09SS0ZMT1dfUlVOX0pTT05fRklFTERTLmpvaW4oJywnKV0sIFsxXSk7XG4gIGlmIChydW5Kc29uLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShydW5Kc29uKSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgcHJvY2Vzc1N0ZGVyci53cml0ZShgV2FybmluZzogQ291bGQgbm90IHBhcnNlIEpTT04gZm9yIHdvcmtmbG93IHJ1biAke3J1bklkfTogJHtlcnJvci5tZXNzYWdlfVxcbmApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhdGVzdENoZWNrc0ZvcldvcmtmbG93KGNoZWNrczogQ2hlY2tbXSk6IENoZWNrW10ge1xuICBjb25zdCBncm91cHMgPSBjaGVja3MucmVkdWNlKChncm91cGVkQ2hlY2tzLCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IGtleSA9IHdvcmtmbG93QXR0ZW1wdEtleShjaGVjayk7XG4gICAgY29uc3QgZ3JvdXAgPSBncm91cGVkQ2hlY2tzLmdldChrZXkpO1xuICAgIGlmIChncm91cCkge1xuICAgICAgZ3JvdXAucHVzaChjaGVjayk7XG4gICAgICByZXR1cm4gZ3JvdXBlZENoZWNrcztcbiAgICB9XG4gICAgZ3JvdXBlZENoZWNrcy5zZXQoa2V5LCBbY2hlY2tdKTtcbiAgICByZXR1cm4gZ3JvdXBlZENoZWNrcztcbiAgfSwgbmV3IE1hcDxzdHJpbmcsIENoZWNrW10+KCkpO1xuXG4gIHJldHVybiBBcnJheS5mcm9tKGdyb3Vwcy52YWx1ZXMoKSkucmVkdWNlPENoZWNrW10+KChsYXRlc3RHcm91cCwgY3VycmVudEdyb3VwKSA9PiB7XG4gICAgaWYgKGxhdGVzdEdyb3VwLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRHcm91cDtcbiAgICB9XG5cbiAgICByZXR1cm4gbGF0ZXN0R3JvdXBUaW1lc3RhbXAoY3VycmVudEdyb3VwKSA+IGxhdGVzdEdyb3VwVGltZXN0YW1wKGxhdGVzdEdyb3VwKSA/IGN1cnJlbnRHcm91cCA6IGxhdGVzdEdyb3VwO1xuICB9LCBbXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd0F0dGVtcHRLZXkoY2hlY2s6IENoZWNrKTogc3RyaW5nIHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjayk7XG4gIHJldHVybiBydW5JZCA/IGBydW46JHtydW5JZH1gIDogJ3Vua25vd25fcnVuJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24oY2hlY2tzOiBDaGVja1tdKTogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbiB7XG4gIGNvbnN0IGJ1Y2tldHMgPSBjaGVja3MubWFwKChjaGVjaykgPT4gY2hlY2suYnVja2V0ID8/ICcnKTtcbiAgaWYgKGJ1Y2tldHMuc29tZSgoYnVja2V0KSA9PiAhWydwYXNzJywgJ3NraXBwaW5nJywgJ3BlbmRpbmcnXS5pbmNsdWRlcyhidWNrZXQpKSkge1xuICAgIHJldHVybiAnZmFpbGVkJztcbiAgfVxuICBpZiAoYnVja2V0cy5pbmNsdWRlcygncGVuZGluZycpKSB7XG4gICAgcmV0dXJuICdydW5uaW5nJztcbiAgfVxuICByZXR1cm4gJ3N1Y2Nlc3NmdWwnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2s6IENoZWNrKTogc3RyaW5nIHtcbiAgY29uc3QgdGltZXN0YW1wID0gY2hlY2suY29tcGxldGVkQXQ7XG4gIGlmICghdGltZXN0YW1wIHx8IHRpbWVzdGFtcCA9PT0gWkVST19USU1FU1RBTVApIHtcbiAgICByZXR1cm4gY2hlY2suc3RhcnRlZEF0ID8/ICcnO1xuICB9XG4gIHJldHVybiB0aW1lc3RhbXA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0UmVsYXRlZENoZWNrKGNoZWNrOiBDaGVjayk6IGJvb2xlYW4ge1xuICByZXR1cm4gW2NoZWNrLm5hbWUsIGNoZWNrLndvcmtmbG93XS5zb21lKCh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBURVNUX1JFTEFURURfUEFUVEVSTi50ZXN0KHZhbHVlKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbGVlcFNlY29uZHMoc2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHNsZWVwKHNlY29uZHMgKiAxMDAwKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrUHJDaSgpOiBQcm9taXNlPHsgb3V0cHV0OiBzdHJpbmc7IGV4aXRDb2RlOiBudW1iZXIgfT4ge1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuXG4gIHByb2dyZXNzKCdGZXRjaGluZyBsYXRlc3QgQ0kgcmVzdWx0cy4uLicpO1xuICBjb25zdCBbY2lSZXN1bHRzLCB3YWl0QXR0ZW1wdHMsIHdhaXRUaW1lZE91dF0gPSBhd2FpdCB3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzKHByTnVtYmVyKTtcbiAgY29uc3QgY2xhc3NpZmllZExhdGVzdCA9IGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0cyk7XG4gIGNvbnN0IFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c10gPSBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoY2xhc3NpZmllZExhdGVzdCk7XG5cbiAgY29uc3QgcGF5bG9hZDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7XG4gICAgc3VtbWFyeTogZGVlcENvcHkoY2lSZXN1bHRzLnN1bW1hcnkpLFxuICAgIHdhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrczogd2FpdEF0dGVtcHRzID4gMCxcbiAgICB0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF9hdHRlbXB0czogd2FpdEF0dGVtcHRzLFxuICAgIHRlc3RfcmVsYXRlZF9jaGVja193YWl0X3RpbWVkX291dDogd2FpdFRpbWVkT3V0LFxuICB9O1xuXG4gIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwKSB7XG4gICAgcGF5bG9hZC5mYWlsZWRfd29ya2Zsb3dzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhmYWlsZWRSZXN1bHRzKS5tYXAoYXN5bmMgKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4ge1xuICAgICAgICBjb25zdCBjb21wYWN0V29ya2Zsb3cgPSBhd2FpdCBjb21wYWN0V29ya2Zsb3dSZXN1bHQod29ya2Zsb3dLZXksIHJlc3VsdCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uY29tcGFjdFdvcmtmbG93LFxuICAgICAgICAgIC4uLmJ1aWxkRmFpbGVkV29ya2Zsb3dEZXRhaWxzKGF3YWl0IGZhaWxlZFdvcmtmbG93TG9nKHJlc3VsdC5jaGVjaykpLFxuICAgICAgICB9O1xuICAgICAgfSlcbiAgICApO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICBpZiAoT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICBwYXlsb2FkLnRlc3Rfd29ya2Zsb3dfb3V0cHV0ID0gJ1RpbWVkIG91dCB3YWl0aW5nIGZvciB0ZXN0LXJlbGF0ZWQgd29ya2Zsb3dzIHRvIGZpbmlzaC4nO1xuICAgIHBheWxvYWQucnVubmluZ190ZXN0X3JlbGF0ZWRfd29ya2Zsb3dzID0gYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBPYmplY3QuZW50cmllcyhydW5uaW5nUmVzdWx0cykubWFwKChbd29ya2Zsb3dLZXksIHJlc3VsdF0pID0+IGNvbXBhY3RXb3JrZmxvd1Jlc3VsdCh3b3JrZmxvd0tleSwgcmVzdWx0KSlcbiAgICApO1xuICAgIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAxIH07XG4gIH1cblxuICByZXR1cm4geyBvdXRwdXQ6ICdBbGwgQ0kgd29ya2Zsb3dzIHBhc3NlZC5cXG4nLCBleGl0Q29kZTogMCB9O1xufVxuXG5mdW5jdGlvbiBsYXRlc3RHcm91cFRpbWVzdGFtcChjaGVja3M6IENoZWNrW10pOiBzdHJpbmcge1xuICByZXR1cm4gY2hlY2tzLnJlZHVjZSgobGF0ZXN0LCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrKTtcbiAgICByZXR1cm4gdGltZXN0YW1wID4gbGF0ZXN0ID8gdGltZXN0YW1wIDogbGF0ZXN0O1xuICB9LCAnJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbXBhY3RXb3JrZmxvd1Jlc3VsdChcbiAgd29ya2Zsb3dLZXk6IHN0cmluZyxcbiAgcmVzdWx0OiBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHRcbik6IFByb21pc2U8eyBjbGFzc2lmaWNhdGlvbjogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbiB9ICYgQ29tcGFjdFdvcmtmbG93UnVuPiB7XG4gIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsocmVzdWx0LmNoZWNrKTtcbiAgY29uc3QgcnVuID0gKGF3YWl0IHdvcmtmbG93UnVuKHJ1bklkKSkgYXMgV29ya2Zsb3dSdW5EZXRhaWxzIHwgdW5kZWZpbmVkO1xuICBjb25zdCBmYWlsZWRKb2IgPSBmYWlsZWRXb3JrZmxvd1J1bkpvYihydW4sIHN0cmluZ09yVW5kZWZpbmVkKHJlc3VsdC5jaGVjay5uYW1lKSk7XG4gIHJldHVybiB7XG4gICAgY2xhc3NpZmljYXRpb246IHJlc3VsdC5jbGFzc2lmaWNhdGlvbixcbiAgICB3b3JrZmxvdzogd29ya2Zsb3dLZXksXG4gICAgam9iOiBzdHJpbmdPclVuZGVmaW5lZChyZXN1bHQuY2hlY2submFtZSksXG4gICAgam9iX3VybDogc3RyaW5nT3JVbmRlZmluZWQoZmFpbGVkSm9iPy51cmwpLFxuICAgIGZhaWxlZF9zdGVwOiBmYWlsZWRXb3JrZmxvd1J1blN0ZXBOYW1lKGZhaWxlZEpvYiksXG4gICAgcnVuX2lkOiBydW5JZCxcbiAgICBydW5fdXJsOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LnVybCkgPz8gc3RyaW5nT3JVbmRlZmluZWQocmVzdWx0LmNoZWNrLmxpbmspLFxuICAgIGJyYW5jaDogc3RyaW5nT3JVbmRlZmluZWQocnVuPy5oZWFkQnJhbmNoKSxcbiAgICBzaGE6IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8uaGVhZFNoYSksXG4gICAgY29uY2x1c2lvbjogc3RyaW5nT3JVbmRlZmluZWQocnVuPy5jb25jbHVzaW9uKSxcbiAgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmFpbGVkV29ya2Zsb3dMb2coY2hlY2s6IENoZWNrKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjayk7XG4gIGlmICghcnVuSWQpIHtcbiAgICByZXR1cm4gJ0ZhaWxlZCBsYXRlc3QgcmVzdWx0IGhhcyBubyBHaXRIdWIgQWN0aW9ucyBydW4gbGluay4nO1xuICB9XG4gIHJldHVybiBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncnVuJywgJ3ZpZXcnLCBydW5JZCwgJy0tbG9nLWZhaWxlZCddLCBbMV0pO1xufVxuXG5mdW5jdGlvbiBidWlsZEZhaWxlZFdvcmtmbG93RGV0YWlscyhsb2c6IHN0cmluZyk6IHtcbiAgZmFpbGVkX2xvZzogc3RyaW5nO1xufSB7XG4gIHJldHVybiB7XG4gICAgZmFpbGVkX2xvZzogcmVmaW5lRmFpbGVkV29ya2Zsb3dMb2cobG9nKSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmVmaW5lRmFpbGVkV29ya2Zsb3dMb2cobG9nOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzYW5pdGl6ZWRJbnB1dCA9IHNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2coc3RyaXBWVENvbnRyb2xDaGFyYWN0ZXJzKGxvZykpO1xuICBpZiAoIXJ0a0F2YWlsYWJsZSkge1xuICAgIHJldHVybiBzYW5pdGl6ZWRJbnB1dDtcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHNwYXduU3luY1NhZmUoWydydGsnLCAnbG9nJ10sIHNhbml0aXplZElucHV0KTtcbiAgcmV0dXJuIHJlc3VsdC5leGl0Q29kZSA9PT0gMCAmJiByZXN1bHQub3V0cHV0LnRyaW0oKS5sZW5ndGggPiAwXG4gICAgPyBzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nKHJlc3VsdC5vdXRwdXQpXG4gICAgOiBzYW5pdGl6ZWRJbnB1dDtcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyhsb2c6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBsb2dcbiAgICAuc3BsaXQoJ1xcbicpXG4gICAgLm1hcCgobGluZSkgPT4gbGluZS5yZXBsYWNlKEZBSUxFRF9MT0dfTElORV9QUkVGSVhfUEFUVEVSTiwgJycpKVxuICAgIC5qb2luKCdcXG4nKVxuICAgIC50cmltKCk7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ09yVW5kZWZpbmVkKHZhbHVlOiB1bmtub3duKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUubGVuZ3RoID4gMCA/IHZhbHVlIDogdW5kZWZpbmVkO1xufVxuXG5mdW5jdGlvbiBmYWlsZWRXb3JrZmxvd1J1bkpvYihcbiAgcnVuOiBXb3JrZmxvd1J1bkRldGFpbHMgfCB1bmRlZmluZWQsXG4gIGpvYk5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZFxuKTogV29ya2Zsb3dSdW5Kb2IgfCB1bmRlZmluZWQge1xuICBpZiAoIXJ1bj8uam9icyB8fCBydW4uam9icy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBydW4uam9icy5maW5kKChqb2IpID0+IGpvYi5uYW1lID09PSBqb2JOYW1lKSA/P1xuICAgIHJ1bi5qb2JzLmZpbmQoKGpvYikgPT4gam9iLmNvbmNsdXNpb24gPT09ICdmYWlsdXJlJykgPz9cbiAgICBydW4uam9icy5maW5kKChqb2IpID0+IGpvYi5zdGF0dXMgIT09ICdjb21wbGV0ZWQnKVxuICApO1xufVxuXG5mdW5jdGlvbiBmYWlsZWRXb3JrZmxvd1J1blN0ZXBOYW1lKGpvYjogV29ya2Zsb3dSdW5Kb2IgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWpvYj8uc3RlcHMgfHwgam9iLnN0ZXBzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIGpvYi5zdGVwcy5maW5kKChzdGVwKSA9PiBzdGVwLmNvbmNsdXNpb24gPT09ICdmYWlsdXJlJyk/Lm5hbWUgPz9cbiAgICBqb2Iuc3RlcHMuZmluZCgoc3RlcCkgPT4gc3RlcC5zdGF0dXMgIT09ICdjb21wbGV0ZWQnKT8ubmFtZVxuICApO1xufVxuIiwiaW1wb3J0IHsgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50QmFzZUJyYW5jaCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gKGF3YWl0IGN1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2goKSkgPz8gKGF3YWl0IGN1cnJlbnREZWZhdWx0QnJhbmNoKCkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudERlZmF1bHRCcmFuY2goKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIHJlcXVpcmVOb25FbXB0eShcbiAgICAoXG4gICAgICBhd2FpdCBydW5Db21tYW5kV2l0aFByb2dyZXNzKFtcbiAgICAgICAgJ2doJyxcbiAgICAgICAgJ3JlcG8nLFxuICAgICAgICAndmlldycsXG4gICAgICAgICctLWpzb24nLFxuICAgICAgICAnZGVmYXVsdEJyYW5jaFJlZicsXG4gICAgICAgICctLXRlbXBsYXRlJyxcbiAgICAgICAgJ3t7LmRlZmF1bHRCcmFuY2hSZWYubmFtZX19JyxcbiAgICAgIF0pXG4gICAgKS50cmltKCksXG4gICAgJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGJyYW5jaCdcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGJhc2VCcmFuY2ggPSAoXG4gICAgICBhd2FpdCBydW5Db21tYW5kV2l0aFByb2dyZXNzKFsnZ2gnLCAncHInLCAndmlldycsICctLWpzb24nLCAnYmFzZVJlZk5hbWUnLCAnLS10ZW1wbGF0ZScsICd7ey5iYXNlUmVmTmFtZX19J10pXG4gICAgKS50cmltKCk7XG4gICAgcmV0dXJuIGJhc2VCcmFuY2gubGVuZ3RoID4gMCA/IGJhc2VCcmFuY2ggOiB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyhlcnJvcikpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc0N1cnJlbnRQdWxsUmVxdWVzdE1pc3NpbmcoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIC9ubyBwdWxsIHJlcXVlc3RzPyBmb3VuZCBmb3IgYnJhbmNoL2kudGVzdChTdHJpbmcoZXJyb3IpKTtcbn1cblxuZnVuY3Rpb24gcmVxdWlyZU5vbkVtcHR5KHZhbHVlOiBzdHJpbmcsIG1lc3NhZ2U6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG4gIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbn1cbiIsImltcG9ydCB7IGlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyB9IGZyb20gJy4uL3JlcG8vZGVmYXVsdEJyYW5jaC5qcyc7XG5pbXBvcnQge1xuICBjdXJyZW50UHJOdW1iZXIsXG4gIGN1cnJlbnRSZXBvUGFydHMsXG4gIGV4aXRXaXRoRXJyb3IsXG4gIGdoQWxsb3dFeGl0Q29kZXMsXG4gIGdyYXBocWwsXG4gIHR5cGUgSnNvbk9iamVjdCxcbiAgdHlwZSBNZXNzYWdlLFxuICB0eXBlIE1lc3NhZ2VDb25uZWN0aW9uLFxuICB0eXBlIE1ldGFkYXRhTm9kZSxcbiAgcHJvZ3Jlc3MsXG4gIHlhbWxEdW1wLFxufSBmcm9tICcuL3NoYXJlZC5qcyc7XG5cbnR5cGUgSXNzdWVNZXNzYWdlQ29tbWVudE5vZGUgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbDtcbn07XG5cbnR5cGUgUHJSZXZpZXdOb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nIHwgbnVsbDtcbiAgc3RhdGU/OiBzdHJpbmcgfCBudWxsO1xuICBzdWJtaXR0ZWRBdD86IHN0cmluZyB8IG51bGw7XG4gIHVybDogc3RyaW5nO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbDtcbn07XG5cbnR5cGUgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgY29tbWVudHM/OiBNZXNzYWdlQ29ubmVjdGlvbjxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZT47XG4gICAgICAgIHJldmlld3M/OiBNZXNzYWdlQ29ubmVjdGlvbjxQclJldmlld05vZGU+O1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBJc3N1ZU1lc3NhZ2VzUmVzcG9uc2UgPSB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIGlzc3VlPzoge1xuICAgICAgICBjb21tZW50cz86IE1lc3NhZ2VDb25uZWN0aW9uPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlPjtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn07XG5cbnR5cGUgUHVsbFJlcXVlc3RNZXRhZGF0YVJlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBwdWxsUmVxdWVzdD86IE1ldGFkYXRhTm9kZTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBJc3N1ZU1ldGFkYXRhUmVzcG9uc2UgPSB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIGlzc3VlPzogTWV0YWRhdGFOb2RlO1xuICAgIH07XG4gIH07XG59O1xuXG5jb25zdCBJU1NVRV9NRVNTQUdFU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgaXNzdWUobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IElTU1VFX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgaXNzdWUobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIG51bWJlclxuICAgICAgICB0aXRsZVxuICAgICAgICB1cmxcbiAgICAgICAgYm9keVxuICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBQUl9DT01NRU5UU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFBSX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIG51bWJlclxuICAgICAgICB0aXRsZVxuICAgICAgICB1cmxcbiAgICAgICAgYm9keVxuICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBQUl9SRVZJRVdTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBzdGF0ZVxuICAgICAgICAgICAgc3VibWl0dGVkQXRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplSXNzdWVOdW1iZXIocmVmZXJlbmNlOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlcihyZWZlcmVuY2UsICdpc3N1ZScpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplUHJOdW1iZXIocmVmZXJlbmNlOiBzdHJpbmcgfCBudW1iZXIpOiBzdHJpbmcge1xuICByZXR1cm4gZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlcihyZWZlcmVuY2UsICdwdWxsIHJlcXVlc3QnKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoSXNzdWVNZXNzYWdlcyhpc3N1ZU51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgaXNzdWUgPSBhd2FpdCBpc3N1ZU1lc3NhZ2VzKG93bmVyLCBuYW1lLCBub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZU51bWJlcikpO1xuICBwcm9ncmVzcyhgRmV0Y2hlZCBpc3N1ZSAjJHtpc3N1ZS5udW1iZXJ9IG1lc3NhZ2VzLmApO1xuICByZXR1cm4geWFtbER1bXAoeyBpc3N1ZSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoUHJNZXNzYWdlcyhwck51bWJlcj86IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc29sdmVkUHJOdW1iZXIgPSBwck51bWJlciA9PT0gdW5kZWZpbmVkID8gYXdhaXQgY3VycmVudFByTnVtYmVyKCkgOiBub3JtYWxpemVQck51bWJlcihwck51bWJlcik7XG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzKHJlc29sdmVkUHJOdW1iZXIpO1xuICBwcm9ncmVzcyhgRmV0Y2hlZCBwdWxsIHJlcXVlc3QgIyR7cHVsbFJlcXVlc3QubnVtYmVyfSBtZXNzYWdlcy5gKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgcHVsbF9yZXF1ZXN0OiBwdWxsUmVxdWVzdCB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSgpOiBQcm9taXNlPHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBjb25zdCBwck51bWJlck91dHB1dCA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydwcicsICd2aWV3JywgJy0tanNvbicsICdudW1iZXInLCAnLS1qcScsICcubnVtYmVyJ10sIFsxXSk7XG4gIGNvbnN0IHByTnVtYmVyID0gcHJOdW1iZXJPdXRwdXQudHJpbSgpO1xuICBpZiAoaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nKHByTnVtYmVyT3V0cHV0KSB8fCAhL15cXGQrJC8udGVzdChwck51bWJlcikpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgY29uc3QgcHVsbFJlcXVlc3QgPSBhd2FpdCBjdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMocHJOdW1iZXIpO1xuICByZXR1cm4geWFtbER1bXAoeyBwdWxsX3JlcXVlc3Q6IHB1bGxSZXF1ZXN0IH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMocHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICByZXR1cm4gYXdhaXQgcHJNZXNzYWdlcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpO1xufVxuXG5mdW5jdGlvbiBleHRyYWN0R2l0SHViUmVmZXJlbmNlTnVtYmVyKHJlZmVyZW5jZTogc3RyaW5nIHwgbnVtYmVyLCBsYWJlbDogJ2lzc3VlJyB8ICdwdWxsIHJlcXVlc3QnKTogc3RyaW5nIHtcbiAgY29uc3QgcmVmZXJlbmNlVGV4dCA9IFN0cmluZyhyZWZlcmVuY2UpLnRyaW0oKTtcbiAgaWYgKHJlZmVyZW5jZVRleHQubGVuZ3RoID09PSAwKSB7XG4gICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6ICR7bGFiZWx9IHJlZmVyZW5jZSBpcyByZXF1aXJlZGAsIDIpO1xuICB9XG5cbiAgaWYgKC9eXFxkKyQvLnRlc3QocmVmZXJlbmNlVGV4dCkpIHtcbiAgICByZXR1cm4gcmVmZXJlbmNlVGV4dDtcbiAgfVxuXG4gIGNvbnN0IGtpbmRTZWdtZW50ID0gbGFiZWwgPT09ICdpc3N1ZScgPyAnaXNzdWVzJyA6ICdwdWxsJztcbiAgY29uc3QgbWF0Y2ggPSByZWZlcmVuY2VUZXh0Lm1hdGNoKFxuICAgIG5ldyBSZWdFeHAoYF5odHRwcz86Ly8oPzp3d3dcXFxcLik/Z2l0aHViXFxcXC5jb20vW14vXSsvW14vXSsvJHtraW5kU2VnbWVudH0vKFxcXFxkKykoPzovfCQpYClcbiAgKTtcbiAgaWYgKG1hdGNoPy5bMV0pIHtcbiAgICByZXR1cm4gbWF0Y2hbMV07XG4gIH1cblxuICBleGl0V2l0aEVycm9yKGBFcnJvcjogZXhwZWN0ZWQgYSBHaXRIdWIgJHtsYWJlbH0gbnVtYmVyIG9yIFVSTCwgcmVjZWl2ZWQgXCIke3JlZmVyZW5jZVRleHR9XCJgLCAyKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNzdWVNZXNzYWdlcyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIGlzc3VlTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgaXNzdWUgPSBhd2FpdCBmZXRjaE1ldGFkYXRhPElzc3VlTWV0YWRhdGFSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBJU1NVRV9RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogaXNzdWVOdW1iZXIsXG4gICAgbm91bjogJ2lzc3VlJyxcbiAgICBzZWxlY3RNZXRhZGF0YTogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5pc3N1ZSxcbiAgfSk7XG4gIGNvbnN0IG1lc3NhZ2VzID0gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSwgSXNzdWVNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IElTU1VFX01FU1NBR0VTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBpc3N1ZU51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/Lmlzc3VlPy5jb21tZW50cyxcbiAgICBtYXBOb2RlOiBjb21tZW50TWVzc2FnZSxcbiAgfSk7XG5cbiAgcmV0dXJuIHsgLi4uaXNzdWUsIG1lc3NhZ2VzIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByTWVzc2FnZXMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgZmV0Y2hNZXRhZGF0YTxQdWxsUmVxdWVzdE1ldGFkYXRhUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIG5vdW46ICdwdWxsIHJlcXVlc3QnLFxuICAgIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0LFxuICB9KTtcbiAgY29uc3QgW2lzc3VlQ29tbWVudHMsIHJldmlld3NdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgIHBySXNzdWVDb21tZW50cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICAgIHByUmV2aWV3cyhvd25lciwgbmFtZSwgcHJOdW1iZXIpLFxuICBdKTtcblxuICByZXR1cm4ge1xuICAgIC4uLnB1bGxSZXF1ZXN0LFxuICAgIG1lc3NhZ2VzOiBbLi4uaXNzdWVDb21tZW50cywgLi4ucmV2aWV3c10uc29ydChjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbXBhcmVNZXNzYWdlc0J5Q3JlYXRlZEF0KGxlZnQ6IE1lc3NhZ2UsIHJpZ2h0OiBNZXNzYWdlKTogbnVtYmVyIHtcbiAgY29uc3QgbGVmdENyZWF0ZWRBdCA9IHR5cGVvZiBsZWZ0LmNyZWF0ZWRBdCA9PT0gJ3N0cmluZycgPyBsZWZ0LmNyZWF0ZWRBdCA6ICcnO1xuICBjb25zdCByaWdodENyZWF0ZWRBdCA9IHR5cGVvZiByaWdodC5jcmVhdGVkQXQgPT09ICdzdHJpbmcnID8gcmlnaHQuY3JlYXRlZEF0IDogJyc7XG4gIHJldHVybiBsZWZ0Q3JlYXRlZEF0LmxvY2FsZUNvbXBhcmUocmlnaHRDcmVhdGVkQXQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwcklzc3VlQ29tbWVudHMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgcmV0dXJuIGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8SXNzdWVNZXNzYWdlQ29tbWVudE5vZGUsIFB1bGxSZXF1ZXN0TWVzc2FnZXNSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBQUl9DT01NRU5UU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8uY29tbWVudHMsXG4gICAgbWFwTm9kZTogY29tbWVudE1lc3NhZ2UsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwclJldmlld3Mob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgcmV0dXJuIGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8UHJSZXZpZXdOb2RlLCBQdWxsUmVxdWVzdE1lc3NhZ2VzUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfUkVWSUVXU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8ucmV2aWV3cyxcbiAgICBtYXBOb2RlOiByZXZpZXdNZXNzYWdlLFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVNZXNzYWdlczxUTm9kZSwgVFJlc3BvbnNlIGV4dGVuZHMgSnNvbk9iamVjdD4oY29uZmlnOiB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIG93bmVyOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVtYmVyOiBzdHJpbmcgfCBudW1iZXI7XG4gIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZTogVFJlc3BvbnNlKSA9PiBNZXNzYWdlQ29ubmVjdGlvbjxUTm9kZT4gfCB1bmRlZmluZWQ7XG4gIG1hcE5vZGU6IChub2RlOiBUTm9kZSkgPT4gTWVzc2FnZTtcbn0pOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICBsZXQgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IG1lc3NhZ2VzOiBNZXNzYWdlW10gPSBbXTtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgY29ubmVjdGlvbiA9IGNvbmZpZy5zZWxlY3RDb25uZWN0aW9uKFxuICAgICAgYXdhaXQgZ3JhcGhxbDxUUmVzcG9uc2U+KGNvbmZpZy5xdWVyeSwge1xuICAgICAgICBvd25lcjogY29uZmlnLm93bmVyLFxuICAgICAgICBuYW1lOiBjb25maWcubmFtZSxcbiAgICAgICAgbnVtYmVyOiBOdW1iZXIoY29uZmlnLm51bWJlciksXG4gICAgICAgIGN1cnNvcixcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGlmICghY29ubmVjdGlvbikge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgIH1cblxuICAgIG1lc3NhZ2VzLnB1c2goLi4uY29ubmVjdGlvbi5ub2Rlcy5tYXAoY29uZmlnLm1hcE5vZGUpLmZpbHRlcihoYXNNZXNzYWdlQm9keSkpO1xuXG4gICAgaWYgKCFjb25uZWN0aW9uLnBhZ2VJbmZvLmhhc05leHRQYWdlKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZXM7XG4gICAgfVxuICAgIGN1cnNvciA9IGNvbm5lY3Rpb24ucGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBmZXRjaE1ldGFkYXRhPFRSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Q+KGNvbmZpZzoge1xuICBxdWVyeTogc3RyaW5nO1xuICBvd25lcjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bWJlcjogc3RyaW5nIHwgbnVtYmVyO1xuICBub3VuOiBzdHJpbmc7XG4gIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2U6IFRSZXNwb25zZSkgPT4gTWV0YWRhdGFOb2RlIHwgdW5kZWZpbmVkO1xufSk6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBtZXRhZGF0YSA9IGNvbmZpZy5zZWxlY3RNZXRhZGF0YShcbiAgICBhd2FpdCBncmFwaHFsPFRSZXNwb25zZT4oY29uZmlnLnF1ZXJ5LCB7XG4gICAgICBvd25lcjogY29uZmlnLm93bmVyLFxuICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICBudW1iZXI6IE51bWJlcihjb25maWcubnVtYmVyKSxcbiAgICB9KVxuICApO1xuXG4gIGlmICghbWV0YWRhdGEpIHtcbiAgICBleGl0V2l0aEVycm9yKGBDb3VsZCBub3QgZmluZCAke2NvbmZpZy5ub3VufSAjJHtjb25maWcubnVtYmVyfSBpbiAke2NvbmZpZy5vd25lcn0vJHtjb25maWcubmFtZX0uYCk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIG51bWJlcjogbWV0YWRhdGEubnVtYmVyLFxuICAgIHRpdGxlOiBtZXRhZGF0YS50aXRsZSxcbiAgICB1cmw6IG1ldGFkYXRhLnVybCxcbiAgICBhdXRob3I6IG1ldGFkYXRhLmF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkLFxuICAgIGJvZHk6IG1ldGFkYXRhLmJvZHkgPz8gJycsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGNvbW1lbnRNZXNzYWdlKGNvbW1lbnQ6IElzc3VlTWVzc2FnZUNvbW1lbnROb2RlKTogTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ2NvbW1lbnQnLFxuICAgIGF1dGhvcjogY29tbWVudC5hdXRob3I/LmxvZ2luID8/IHVuZGVmaW5lZCxcbiAgICBjcmVhdGVkQXQ6IGNvbW1lbnQuY3JlYXRlZEF0LFxuICAgIHVybDogY29tbWVudC51cmwsXG4gICAgYm9keTogY29tbWVudC5ib2R5LFxuICB9O1xufVxuXG5mdW5jdGlvbiByZXZpZXdNZXNzYWdlKHJldmlldzogUHJSZXZpZXdOb2RlKTogTWVzc2FnZSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ3JldmlldycsXG4gICAgYXV0aG9yOiByZXZpZXcuYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQsXG4gICAgc3RhdGU6IHJldmlldy5zdGF0ZSA/PyB1bmRlZmluZWQsXG4gICAgY3JlYXRlZEF0OiByZXZpZXcuc3VibWl0dGVkQXQgPz8gdW5kZWZpbmVkLFxuICAgIHVybDogcmV2aWV3LnVybCxcbiAgICBib2R5OiByZXZpZXcuYm9keSA/PyAnJyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaGFzTWVzc2FnZUJvZHkobWVzc2FnZTogTWVzc2FnZSk6IGJvb2xlYW4ge1xuICByZXR1cm4gdHlwZW9mIG1lc3NhZ2UuYm9keSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZS5ib2R5Lmxlbmd0aCA+IDA7XG59XG4iLCJpbXBvcnQgeyBjdXJyZW50UHJOdW1iZXIsIGV4aXRXaXRoRXJyb3IsIGdoLCBwcm9ncmVzcywgcnVuQ29tbWFuZCwgeWFtbER1bXAgfSBmcm9tICcuL3NoYXJlZC5qcyc7XG5cbmV4cG9ydCB0eXBlIE9wZW5Qck9wdGlvbnMgPSB7XG4gIGJvZHk/OiBzdHJpbmc7XG4gIHRpdGxlPzogc3RyaW5nO1xufTtcblxuZXhwb3J0IHR5cGUgVXBkYXRlUHJPcHRpb25zID0ge1xuICBib2R5OiBzdHJpbmc7XG4gIHRpdGxlOiBzdHJpbmc7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblByKHsgYm9keSwgdGl0bGUgfTogT3BlblByT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaGVhZCA9IChhd2FpdCBydW5Db21tYW5kKFsnZ2l0JywgJ2JyYW5jaCcsICctLXNob3ctY3VycmVudCddKSkudHJpbSgpO1xuICBjb25zdCBiYXNlID0gKGF3YWl0IGdoKFsncmVwbycsICd2aWV3JywgJy0tanNvbicsICdkZWZhdWx0QnJhbmNoUmVmJywgJy0tanEnLCAnLmRlZmF1bHRCcmFuY2hSZWYubmFtZSddKSkudHJpbSgpO1xuXG4gIGlmICghaGVhZCkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgYnJhbmNoJyk7XG4gIH1cbiAgaWYgKCFiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgZGVmYXVsdCBicmFuY2gnKTtcbiAgfVxuICBpZiAoaGVhZCA9PT0gYmFzZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBjdXJyZW50IGJyYW5jaCBpcyB0aGUgZGVmYXVsdCBicmFuY2ggKCR7YmFzZX0pYCk7XG4gIH1cblxuICBjb25zdCBjcmVhdGVBcmdzID0gWydwcicsICdjcmVhdGUnLCAnLS1iYXNlJywgYmFzZSwgJy0taGVhZCcsIGhlYWQsICctLWZpbGwnXTtcbiAgaWYgKHRpdGxlKSB7XG4gICAgY3JlYXRlQXJncy5wdXNoKCctLXRpdGxlJywgdGl0bGUpO1xuICB9XG4gIGlmIChib2R5KSB7XG4gICAgY3JlYXRlQXJncy5wdXNoKCctLWJvZHktZmlsZScsICctJyk7XG4gIH1cblxuICBwcm9ncmVzcygnQ3JlYXRpbmcgcHVsbCByZXF1ZXN0Li4uJyk7XG4gIGF3YWl0IGdoKGNyZWF0ZUFyZ3MsIGJvZHkpO1xuXG4gIHJldHVybiB5YW1sRHVtcChcbiAgICBKU09OLnBhcnNlKGF3YWl0IGdoKFsncHInLCAndmlldycsICctLWpzb24nLCAnaWQsbnVtYmVyLHRpdGxlLHVybCxzdGF0ZSxpc0RyYWZ0LGJhc2VSZWZOYW1lLGhlYWRSZWZOYW1lLGF1dGhvciddKSlcbiAgKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByKHsgYm9keSwgdGl0bGUgfTogVXBkYXRlUHJPcHRpb25zKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcyhgVXBkYXRpbmcgcHVsbCByZXF1ZXN0ICMke3ByTnVtYmVyfS4uLmApO1xuICByZXR1cm4gYXdhaXQgZWRpdFByKHByTnVtYmVyLCBbJy0tdGl0bGUnLCB0aXRsZSwgJy0tYm9keS1maWxlJywgJy0nXSwgYm9keSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGVkaXRQcihwck51bWJlcjogc3RyaW5nLCBlZGl0QXJnczogc3RyaW5nW10sIHN0ZGluRGF0YT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGF3YWl0IGdoKFsncHInLCAnZWRpdCcsIHByTnVtYmVyLCAuLi5lZGl0QXJnc10sIHN0ZGluRGF0YSk7XG5cbiAgcmV0dXJuIHlhbWxEdW1wKFxuICAgIEpTT04ucGFyc2UoXG4gICAgICBhd2FpdCBnaChbXG4gICAgICAgICdwcicsXG4gICAgICAgICd2aWV3JyxcbiAgICAgICAgcHJOdW1iZXIsXG4gICAgICAgICctLWpzb24nLFxuICAgICAgICAnaWQsbnVtYmVyLHRpdGxlLHVybCxzdGF0ZSxpc0RyYWZ0LGJhc2VSZWZOYW1lLGhlYWRSZWZOYW1lLGF1dGhvcixib2R5JyxcbiAgICAgIF0pXG4gICAgKVxuICApO1xufVxuIiwiaW1wb3J0IHtcbiAgY3VycmVudFByTnVtYmVyLFxuICBjdXJyZW50UmVwb1BhcnRzLFxuICBleGl0V2l0aEVycm9yLFxuICBncmFwaHFsLFxuICBwcm9ncmVzcyxcbiAgcmVhZFJlcXVpcmVkU3RkaW5UZXh0LFxuICB5YW1sRHVtcCxcbn0gZnJvbSAnLi9zaGFyZWQuanMnO1xuXG50eXBlIFJldmlld0NvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgZGlmZkh1bms/OiBzdHJpbmcgfCBudWxsO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgUmV2aWV3VGhyZWFkTm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgaXNPdXRkYXRlZD86IGJvb2xlYW4gfCBudWxsO1xuICBwYXRoPzogc3RyaW5nIHwgbnVsbDtcbiAgbGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsTGluZT86IG51bWJlciB8IG51bGw7XG4gIHN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsU3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgY29tbWVudHM6IHtcbiAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICBwYWdlSW5mbzoge1xuICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgIH07XG4gIH07XG59O1xuXG5jb25zdCBSRVZJRVdfVEhSRUFEX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3VGhyZWFkcyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICBpc091dGRhdGVkXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgICBsaW5lXG4gICAgICAgICAgICBvcmlnaW5hbExpbmVcbiAgICAgICAgICAgIHN0YXJ0TGluZVxuICAgICAgICAgICAgb3JpZ2luYWxTdGFydExpbmVcbiAgICAgICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDApIHtcbiAgICAgICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgICAgIGRpZmZIdW5rXG4gICAgICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFJFVklFV19DT01NRU5UX1FVRVJZID0gYFxuICBxdWVyeSgkdGhyZWFkSWQ6IElEISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgbm9kZShpZDogJHRocmVhZElkKSB7XG4gICAgICAuLi4gb24gUHVsbFJlcXVlc3RSZXZpZXdUaHJlYWQge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgZGlmZkh1bmtcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdUaHJlYWRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgnRXJyb3I6IEpTT04gaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nKTtcbiAgY29uc3QgcGF5bG9hZCA9IHBhcnNlUmVwbHlJbnB1dChpbnB1dCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRSZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgW3RocmVhZElkLCBib2R5XSBvZiBPYmplY3QuZW50cmllcyhwYXlsb2FkLnJlcGxpZXMpKSB7XG4gICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgIG5vcm1hbGl6ZWRSZXBsaWVzW3RocmVhZElkXSA9IGJvZHk7XG4gICAgfVxuICB9XG4gIHJldHVybiBub3JtYWxpemVkUmVwbGllcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhcbiAgcXVlcnk6IHN0cmluZyxcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyLFxuICBvblRocmVhZDogKHRocmVhZDogUmV2aWV3VGhyZWFkTm9kZSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD5cbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IHJldmlld1RocmVhZHMgPSAoXG4gICAgICBhd2FpdCBncmFwaHFsPHtcbiAgICAgICAgZGF0YT86IHtcbiAgICAgICAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgICAgICAgcHVsbFJlcXVlc3Q/OiB7XG4gICAgICAgICAgICAgIHJldmlld1RocmVhZHM/OiB7XG4gICAgICAgICAgICAgICAgbm9kZXM6IFJldmlld1RocmVhZE5vZGVbXTtcbiAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9PihxdWVyeSwge1xuICAgICAgICBvd25lcixcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbnVtYmVyOiBOdW1iZXIocHJOdW1iZXIpLFxuICAgICAgICBjdXJzb3IsXG4gICAgICB9KVxuICAgICkuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3Q/LnJldmlld1RocmVhZHM7XG5cbiAgICBpZiAoIXJldmlld1RocmVhZHMpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoXG4gICAgICAgICdDb3VsZCBub3QgZmluZCByZXZpZXdUaHJlYWRzIGluIEdyYXBoUUwgcmVzcG9uc2UuIFRoZSBwdWxsIHJlcXVlc3QgbWF5IG5vdCBleGlzdCBvciB0aGVyZSB3YXMgYW4gQVBJIGVycm9yLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0aHJlYWQgb2YgcmV2aWV3VGhyZWFkcy5ub2Rlcykge1xuICAgICAgYXdhaXQgb25UaHJlYWQodGhyZWFkKTtcbiAgICB9XG5cbiAgICBpZiAoIXJldmlld1RocmVhZHMucGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3Vyc29yID0gcmV2aWV3VGhyZWFkcy5wYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzKFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXJcbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgaWRzOiBzdHJpbmdbXSA9IFtdO1xuICBhd2FpdCBwYWdpbmF0ZVJldmlld1RocmVhZHMoUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlksIG93bmVyLCBuYW1lLCBwck51bWJlciwgKHRocmVhZCkgPT4ge1xuICAgIGlmICghdGhyZWFkLmlzUmVzb2x2ZWQpIHtcbiAgICAgIGlkcy5wdXNoKHRocmVhZC5pZCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlkcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzKFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXJcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4ge1xuICBjb25zdCB0aHJlYWRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdID0gW107XG5cbiAgYXdhaXQgcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFJFVklFV19USFJFQURfUVVFUlksIG93bmVyLCBuYW1lLCBwck51bWJlciwgYXN5bmMgKHRocmVhZCkgPT4ge1xuICAgIGlmICh0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbW1lbnRzID0gdGhyZWFkLmNvbW1lbnRzLm5vZGVzLm1hcChub3JtYWxpemVDb21tZW50QXV0aG9yKTtcbiAgICBsZXQgcGFnZUluZm8gPSB0aHJlYWQuY29tbWVudHMucGFnZUluZm87XG4gICAgbGV0IGN1cnNvciA9IHBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG5cbiAgICB3aGlsZSAocGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIGNvbnN0IGNvbW1lbnRDb25uZWN0aW9uID0gKFxuICAgICAgICBhd2FpdCBncmFwaHFsPHtcbiAgICAgICAgICBkYXRhPzoge1xuICAgICAgICAgICAgbm9kZT86IHtcbiAgICAgICAgICAgICAgY29tbWVudHM/OiB7XG4gICAgICAgICAgICAgICAgbm9kZXM6IFJldmlld0NvbW1lbnROb2RlW107XG4gICAgICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICAgIGhhc05leHRQYWdlOiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9PihSRVZJRVdfQ09NTUVOVF9RVUVSWSwgeyB0aHJlYWRJZDogdGhyZWFkLmlkLCBjdXJzb3IgfSlcbiAgICAgICkuZGF0YT8ubm9kZT8uY29tbWVudHM7XG5cbiAgICAgIGlmICghY29tbWVudENvbm5lY3Rpb24pIHtcbiAgICAgICAgZXhpdFdpdGhFcnJvcihgQ291bGQgbm90IGZpbmQgY29tbWVudHMgaW4gR3JhcGhRTCByZXNwb25zZSBmb3IgdGhyZWFkICR7dGhyZWFkLmlkfS5gKTtcbiAgICAgIH1cblxuICAgICAgY29tbWVudHMucHVzaCguLi5jb21tZW50Q29ubmVjdGlvbi5ub2Rlcy5tYXAobm9ybWFsaXplQ29tbWVudEF1dGhvcikpO1xuICAgICAgcGFnZUluZm8gPSBjb21tZW50Q29ubmVjdGlvbi5wYWdlSW5mbztcbiAgICAgIGN1cnNvciA9IHBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhyZWFkcy5wdXNoKHtcbiAgICAgIGlkOiB0aHJlYWQuaWQsXG4gICAgICBpc1Jlc29sdmVkOiB0aHJlYWQuaXNSZXNvbHZlZCxcbiAgICAgIGlzT3V0ZGF0ZWQ6IHRocmVhZC5pc091dGRhdGVkLFxuICAgICAgcGF0aDogdGhyZWFkLnBhdGgsXG4gICAgICBsaW5lOiB0aHJlYWQubGluZSxcbiAgICAgIG9yaWdpbmFsTGluZTogdGhyZWFkLm9yaWdpbmFsTGluZSxcbiAgICAgIHN0YXJ0TGluZTogdGhyZWFkLnN0YXJ0TGluZSxcbiAgICAgIG9yaWdpbmFsU3RhcnRMaW5lOiB0aHJlYWQub3JpZ2luYWxTdGFydExpbmUsXG4gICAgICBjb21tZW50cyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRocmVhZHM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0UHJSZXZpZXdUaHJlYWRzKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoJ0ZldGNoaW5nIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMuLi4nKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgdW5yZXNvbHZlZF90aHJlYWRzOiBhd2FpdCB1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcbiAgY29uc3QgdW5yZXNvbHZlZElkcyA9IG5ldyBTZXQoYXdhaXQgdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpKTtcblxuICBwcm9ncmVzcyhgUmVwbHlpbmcgdG8gJHtPYmplY3Qua2V5cyhyZXBsaWVzKS5sZW5ndGh9IHJldmlldyB0aHJlYWRzLi4uYCk7XG5cbiAgY29uc3QgcmVzb2x2ZWRUaHJlYWRJZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhyZXBsaWVzKTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgW3RocmVhZElkLCBib2R5XV0gb2YgZW50cmllcy5lbnRyaWVzKCkpIHtcbiAgICBwcm9ncmVzcyhgUHJvY2Vzc2luZyAke2luZGV4ICsgMX0vJHtlbnRyaWVzLmxlbmd0aH06ICR7dGhyZWFkSWR9YCk7XG4gICAgaWYgKCF1bnJlc29sdmVkSWRzLmhhcyh0aHJlYWRJZCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ3JhcGhxbDx7XG4gICAgICBkYXRhPzoge1xuICAgICAgICByZXNvbHZlUmV2aWV3VGhyZWFkPzoge1xuICAgICAgICAgIHRocmVhZD86IHtcbiAgICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgICBpc1Jlc29sdmVkOiBib29sZWFuO1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH0+KFxuICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkdGhyZWFkSWQ6IElEISwgJGJvZHk6IFN0cmluZyEpIHtcbiAgICAgICAgICBhZGRQdWxsUmVxdWVzdFJldmlld1RocmVhZFJlcGx5KGlucHV0OiB7cHVsbFJlcXVlc3RSZXZpZXdUaHJlYWRJZDogJHRocmVhZElkLCBib2R5OiAkYm9keX0pIHtcbiAgICAgICAgICAgIGNvbW1lbnQge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZVJldmlld1RocmVhZChpbnB1dDoge3RocmVhZElkOiAkdGhyZWFkSWR9KSB7XG4gICAgICAgICAgICB0aHJlYWQge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgeyB0aHJlYWRJZCwgYm9keSB9XG4gICAgKTtcblxuICAgIGlmIChyZXNwb25zZS5kYXRhPy5yZXNvbHZlUmV2aWV3VGhyZWFkPy50aHJlYWQ/LmlzUmVzb2x2ZWQpIHtcbiAgICAgIHJlc29sdmVkVGhyZWFkSWRzLnB1c2godGhyZWFkSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9ncmVzcyhgV2FybmluZzogZmFpbGVkIHRvIHJlc29sdmUgdGhyZWFkICR7dGhyZWFkSWR9LmApO1xuICAgIH1cbiAgfVxuXG4gIHByb2dyZXNzKCdEb25lLicpO1xuICByZXR1cm4geWFtbER1bXAoeyByZXNvbHZlZF90aHJlYWRfaWRzOiByZXNvbHZlZFRocmVhZElkcyB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tbWVudEF1dGhvcihjb21tZW50OiBSZXZpZXdDb21tZW50Tm9kZSk6IFJldmlld0NvbW1lbnROb2RlICYgeyBhdXRob3I/OiBzdHJpbmcgfCBudWxsIH0ge1xuICByZXR1cm4ge1xuICAgIC4uLmNvbW1lbnQsXG4gICAgYXV0aG9yOiB0eXBlb2YgY29tbWVudC5hdXRob3IgPT09ICdzdHJpbmcnID8gY29tbWVudC5hdXRob3IgOiAoY29tbWVudC5hdXRob3I/LmxvZ2luID8/IG51bGwpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlcGx5SW5wdXQoaW5wdXQ6IHN0cmluZyk6IHsgcmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfSB7XG4gIGNvbnN0IGVycm9yUHJlZml4ID0gJ0Vycm9yOiBJbnZhbGlkIGlucHV0IGZvcm1hdCBvbiBzdGRpbic7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGlucHV0KSBhcyB1bmtub3duO1xuICAgIGlmICghaXNSZXBseUlucHV0KHBhcnNlZCkpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoYCR7ZXJyb3JQcmVmaXh9OiBleHBlY3RlZCBhbiBvYmplY3Qgd2l0aCBhIHN0cmluZy12YWx1ZWQgXFxgcmVwbGllc1xcYCBtYXBgLCAyKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IEludmFsaWQgSlNPTiBwcm92aWRlZCBvbiBzdGRpbjogJHtlcnJvci5tZXNzYWdlfWAsIDIpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1JlcGx5SW5wdXQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyB7IHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+IH0ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJlcGxpZXMgPSAodmFsdWUgYXMgeyByZXBsaWVzPzogdW5rbm93biB9KS5yZXBsaWVzO1xuICBpZiAodHlwZW9mIHJlcGxpZXMgIT09ICdvYmplY3QnIHx8IHJlcGxpZXMgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShyZXBsaWVzKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QudmFsdWVzKHJlcGxpZXMpLmV2ZXJ5KChyZXBseSkgPT4gcmVwbHkgPT09IG51bGwgfHwgcmVwbHkgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgcmVwbHkgPT09ICdzdHJpbmcnKTtcbn1cbiIsImltcG9ydCB7IGZldGNoSXNzdWVNZXNzYWdlcyB9IGZyb20gJy4uL3ByL3ByQ29tbWFuZHMuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRQbGFuUHJvbXB0KGlzc3VlTnVtYmVyOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBpc3N1ZVlhbWwgPSBhd2FpdCBmZXRjaElzc3VlTWVzc2FnZXMoaXNzdWVOdW1iZXIpO1xuXG4gIHJldHVybiBgXG5QbGFuIGEgR2l0SHViIGlzc3VlIGJ5IGdhdGhlcmluZyBjb250ZXh0LCB3cml0aW5nIGEgc3BlY2lmaWNhdGlvbiBmb3Igc29mdHdhcmUgZW5naW5lZXJzLCBhbmQgcG9zdGluZyBvciB1cGRhdGluZyB0aGF0IHNwZWNpZmljYXRpb24gYmFjayB0byB0aGUgaXNzdWUuXG5UaGUgdGFyZ2V0IGlzc3VlIG51bWJlciBpcyAjJHtpc3N1ZU51bWJlcn0uIEhlcmUgaXMgdGhlIGZldGNoZWQgaXNzdWUgY29udGV4dCBhcyBZQU1MOlxufn5+fnlhbWxcbiR7aXNzdWVZYW1sLnRyaW0oKX1cbn5+fn5cblxuRm9sbG93IHRoaXMgd29ya2Zsb3c6XG4xLiBSZWFkIHRoZSBhYm92ZSBpc3N1ZSBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBjYXJlZnVsbHkuXG4yLiBDb2xsZWN0IGVub3VnaCBzdXBwb3J0aW5nIGluZm9ybWF0aW9uIGJlZm9yZSB3cml0aW5nIHRoZSBzcGVjaWZpY2F0aW9uOlxuICAgLSBJbnNwZWN0IHRoZSByZWxldmFudCBjb2RlLCBzdXJyb3VuZGluZyBjYWxsIHNpdGVzLCByZWxhdGVkIHR5cGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbiwgcmVjZW50IGRpZmZzLCBhbmQgYW55IG90aGVyIGxvY2FsIGNvbnRleHQgbmVlZGVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZS5cbiAgIC0gSWYgY29kZSBpbnNwZWN0aW9uIGlzIGVub3VnaCwgdXNlIHRoZSBjdXJyZW50IGNvZGViYXNlIGFzIHRoZSBwcmltYXJ5IGV2aWRlbmNlLlxuICAgLSBJZiB0aGUgaXNzdWUgZGVwZW5kcyBvbiBydW50aW1lIGJlaGF2aW9yLCByZXByb2R1Y2UgaXQgd2l0aCB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGV4cGVyaW1lbnQsIHN1Y2ggYXMgYSBmb2N1c2VkIGNvbW1hbmQsIGEgdGlueSBzY3JpcHQsIGEgdGVtcG9yYXJ5IGxvY2FsIGFzc2VydGlvbiwgb3IgYW5vdGhlciBuYXJyb3cgY2hlY2sgdGhhdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGludGVuZGVkIGJlaGF2aW9yLlxuICAgICAtIENsZWFuIHVwIGFueSB0ZW1wb3JhcnkgZmlsZXMgYWZ0ZXIgdGhlIGV4cGVyaW1lbnQuXG4gICAtIElmIHRoZSBpc3N1ZSBkZXBlbmRzIG9uIGEgbGlicmFyeSwgQVBJLCBvciBsYW5ndWFnZSBmZWF0dXJlLCBjb25maXJtIGl0IGFnYWluc3QgdGhlIGxhdGVzdCBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIG9yIGFub3RoZXIgcHJpbWFyeSBzb3VyY2UgaW5zdGVhZCBvZiByZWx5aW5nIG9uIG1lbW9yeS5cbjMuIFdyaXRlIHRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgaXNzdWUgY29tbWVudC5cbiAgIC0gV3JpdGUgdGhlIGJhY2tncm91bmQgYmFzZWQgb24gdGhlIGNvbGxlY3RlZCBpbmZvcm1hdGlvbi5cbiAgIC0gRGVmaW5lIGEgZ29hbCB0aGF0IGNsZWFybHkgZ3VpZGVzIG91ciBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLlxuICAgLSBXcml0ZSBhIGRldGFpbGVkIHNwZWNpZmljYXRpb24gaW5jb3Jwb3JhdGluZyB0aGUgZXZpZGVuY2UgeW91IGNvbGxlY3RlZC5cbiAgIC0gSWYgbmVlZGVkLCBpbmNsdWRlIGNvZGUgc25pcHBldHMgdGhhdCBleHBsYWluIGhvdyB0byB1c2UgbGlicmFyaWVzIG9yIEFQSXMsIGFsb25nIHdpdGggcmVmZXJlbmNlcyB0byB0aGVpciBkb2N1bWVudGF0aW9uLlxuNC4gUG9zdCB0aGUgc3BlY2lmaWNhdGlvbiBiYWNrIHRvIGlzc3VlICMke2lzc3VlTnVtYmVyfSwgdGhlbiBwcmludCB0aGUgaXNzdWUgVVJMLlxuICAgLSBJZiB0aGUgaXNzdWUgYWxyZWFkeSBoYXMgYSBzcGVjaWZpY2F0aW9uLCB1cGRhdGUgdGhlIGV4aXN0aW5nIGNvbW1lbnQgaW5zdGVhZCBvZiBwb3N0aW5nIGEgbmV3IG9uZS5cblxuRm9ybWF0IHRoZSBpc3N1ZSBjb21tZW50IGV4YWN0bHkgbGlrZSB0aGlzLCBidXQgZG8gbm90IGluY2x1ZGUgdGhlIHN1cnJvdW5kaW5nIFxcYH5+fn5cXGAgZmVuY2VzIGluIHRoZSBhY3R1YWwgY29tbWVudDpcbn5+fn5cbiMjIEJhY2tncm91bmRcblxuW1N1bW1hcml6ZSB0aGUgY3VycmVudCBiZWhhdmlvciBhbmQgZXhwbGFpbiB0aGUgbW90aXZhdGlvbiBiZWhpbmQgdGhpcyBpc3N1ZV1cblxuIyMgR29hbFxuXG5bRGVmaW5lIHRoZSBnb2FsIHdlIHdhbnQgdG8gYWNoaWV2ZSBpbiB0aGlzIGlzc3VlXVxuXG4jIyBTcGVjaWZpY2F0aW9uXG5cbltEZXRhaWxlZCBzcGVjaWZpY2F0aW9uIGZvciBzb2Z0d2FyZSBlbmdpbmVlcnNdXG5cbiMjIEtleSBUZWNobm9sb2dpZXMgKE9OTFkgaWYgZXh0ZXJuYWwgcmVzb3VyY2VzIGFyZSBuZWVkZWQpXG5cbltEZXNjcmliZSB3aGF0IGxpYnJhcmllcyBvciBBUElzIHdlIHNob3VsZCB1c2UsIGluY2x1ZGluZyBjb25jcmV0ZSB2ZXJzaW9ucyBhbmQgY29kZSBzbmlwcGV0cy5dXG5cbn5+fn5cbmAudHJpbSgpO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZChiYXNlQnJhbmNoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYGdpdCBtZXJnZS1iYXNlICR7c2hlbGxRdW90ZShgb3JpZ2luLyR7YmFzZUJyYW5jaH1gKX0gSEVBRCAyPi9kZXYvbnVsbCB8fCBnaXQgbWVyZ2UtYmFzZSAke3NoZWxsUXVvdGUoYmFzZUJyYW5jaCl9IEhFQURgO1xufVxuXG5mdW5jdGlvbiBzaGVsbFF1b3RlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCcke3ZhbHVlLnJlcGxhY2VBbGwoXCInXCIsIFwiJ1xcXCInXFxcIidcIil9J2A7XG59XG4iLCJpbXBvcnQgeyBmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUgfSBmcm9tICcuLi9wci9wckNvbW1hbmRzLmpzJztcbmltcG9ydCB7IGN1cnJlbnRCYXNlQnJhbmNoIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSB9IGZyb20gJy4uL3Jldmlldy9ub0NvbmNlcm4uanMnO1xuaW1wb3J0IHsgYnVpbGRNZXJnZUJhc2VDb21tYW5kIH0gZnJvbSAnLi9iYXNlQnJhbmNoRGlmZkNvbW1hbmQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRSZXZpZXdQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYmFzZUJyYW5jaCA9IGF3YWl0IGN1cnJlbnRCYXNlQnJhbmNoKCk7XG4gIGNvbnN0IG1lcmdlQmFzZUNvbW1hbmQgPSBidWlsZE1lcmdlQmFzZUNvbW1hbmQoYmFzZUJyYW5jaCk7XG4gIGNvbnN0IHByQ29udGV4dCA9IGF3YWl0IGZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSgpO1xuICByZXR1cm4gYFxuUmV2aWV3IHRoZSBjdXJyZW50ICR7cHJDb250ZXh0ID8gJ3B1bGwgcmVxdWVzdCcgOiAnYnJhbmNoJ30gYWdhaW5zdCBpdHMgYmFzZSBicmFuY2ggJHtiYXNlQnJhbmNofSB2aWEgXFxgZ2l0IGRpZmYgXCIkKCR7bWVyZ2VCYXNlQ29tbWFuZH0pXCJcXGAuXG5Gb3IgZWFjaCBmaW5kaW5nLCBkbyB0aGUgZm9sbG93aW5nIHRocmVlIHN0ZXBzOlxuMS4gR2F0aGVyIHN1cHBvcnRpbmcgZXZpZGVuY2U6XG4gICAtIEluc3BlY3QgdGhlIHJlZmVyZW5jZWQgY29kZSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNhbGwgc2l0ZXMsIHJlbGF0ZWQgdHlwZXMsIHRlc3RzLCBjb25maWd1cmF0aW9uLCBhbmQgcmVjZW50IGRpZmZzIHdoZW4gdGhleSBhZmZlY3QgdGhlIGNsYWltLlxuICAgLSBJZiBjb2RlIGluc3BlY3Rpb24gaXMgZW5vdWdoLCB1c2UgdGhlIGN1cnJlbnQgY29kZWJhc2UgYXMgdGhlIHByaW1hcnkgZXZpZGVuY2UuXG4gICAtIElmIHRoZSBmaW5kaW5nIGlzIGFib3V0IHJ1bnRpbWUgYmVoYXZpb3IsIHJlcHJvZHVjZSBpdCB3aXRoIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgZXhwZXJpbWVudCwgc3VjaCBhcyBhIGZvY3VzZWQgY29tbWFuZCwgYSB0aW55IHNjcmlwdCwgYSB0ZW1wb3JhcnkgbG9jYWwgYXNzZXJ0aW9uLCBvciBhbm90aGVyIG5hcnJvdyBjaGVjayB0aGF0IGRvZXMgbm90IGNoYW5nZSB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuXG4gICAtIElmIHRoZSBmaW5kaW5nIGRlcGVuZHMgb24gZnJhbWV3b3JrLCBsaWJyYXJ5LCBwbGF0Zm9ybSwgb3IgbGFuZ3VhZ2UgYmVoYXZpb3IsIGNvbmZpcm0gaXQgYWdhaW5zdCB0aGUgbGF0ZXN0IG9mZmljaWFsIGRvY3VtZW50YXRpb24gb3IgYW5vdGhlciBwcmltYXJ5IHNvdXJjZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gbWVtb3J5LlxuMi4gSnVkZ2Ugd2hldGhlciB0aGUgZmluZGluZyBpcyB2YWxpZDpcbiAgIC0gTWFyayBpdCB2YWxpZCBvbmx5IHdoZW4gdGhlIGF2YWlsYWJsZSBldmlkZW5jZSBzaG93cyB0aGUgcmVwb3J0ZWQgaXNzdWUgaXMgc3RpbGwgcmVhbCBpbiB0aGUgY3VycmVudCBjb2RlYmFzZS5cbiAgIC0gT3RoZXJ3aXNlLCBtYXJrIGl0IG5vdCB2YWxpZC5cbjMuIENsZWFuIHVwIGFueSB0ZW1wb3JhcnkgZmlsZXMgY3JlYXRlZCBkdXJpbmcgdGhlIGV4cGVyaW1lbnQuXG40LiBQcm9wb3NlIGEgZml4IHdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBjb2RlOlxuICAgLSBEZXNjcmliZSB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGNoYW5nZSB0aGF0IHdvdWxkIGFkZHJlc3MgdGhlIGZpbmRpbmcuXG4gICAtIEludmVzdGlnYXRlIHRoZSBsaWtlbHkgaW1wYWN0IG9mIHRoYXQgY2hhbmdlIGJ5IGluc3BlY3RpbmcgdGhlIGFmZmVjdGVkIGNhbGwgc2l0ZXMsIHJlbGF0ZWQgdHlwZXMsIHRlc3RzLCBjb25maWd1cmF0aW9uLCBhbmQgYWRqYWNlbnQgYmVoYXZpb3IsIGFuZCBub3RlIGFueSBmb2xsb3ctdXAgY2hhbmdlcyBvciByaXNrcyB0aGUgZml4IHdvdWxkIG5lZWQgdG8gYWNjb3VudCBmb3IuXG5cblJlcG9ydCBvbmx5IHRoZSB2YWxpZCBmaW5kaW5ncywgdGhlIGV2aWRlbmNlIGZvciBlYWNoIG9uZSwgYW5kIHRoZSBwcm9wb3NlZCBmaXggd2l0aCBpdHMgbGlrZWx5IGltcGFjdC4gSW5jbHVkZSBhIGJyaWVmIGp1c3RpZmljYXRpb24gZm9yIGVhY2gsIGNpdGluZyB0aGUgZXZpZGVuY2UgdXNlZCAoZS5nLiwgYSBmYWlsaW5nIHNjZW5hcmlvLCBleHBlcmltZW50IHJlc3VsdCwgb3Igb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbikuIERvIG5vdCBtb2RpZnkgdGhlIGNvZGUuXG5JZiB0aGVyZSBhcmUgbm8gdmFsaWQgZmluZGluZ3MsIHJlc3BvbmQgZXhhY3RseSB3aXRoOiBcXGAke05PX0NPTkNFUk5fTUVTU0FHRX1cXGBcblxuJHtidWlsZFByQ29udGV4dEluc3RydWN0aW9ucyhwckNvbnRleHQpfVxuYC50cmltKCk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkUHJDb250ZXh0SW5zdHJ1Y3Rpb25zKHByQ29udGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgcmV0dXJuIHByQ29udGV4dFxuICAgID8gYEN1cnJlbnQgcHVsbCByZXF1ZXN0IGNvbnRleHQ6XG5+fn5+eWFtbFxuJHtwckNvbnRleHQudHJpbSgpfVxufn5+flxuYC50cmltKClcbiAgICA6ICcnO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU2NyZWVuc2hvdFByb21wdChpbml0aWFsVXJsOiBzdHJpbmcsIHBhZ2VOYW1lOiBzdHJpbmcsIHNjcmVlbnNob3REZXNjcmlwdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc2FuaXRpemVkRGVzY3JpcHRpb24gPSBzY3JlZW5zaG90RGVzY3JpcHRpb24ucmVwbGFjZUFsbCgnXFxuJywgJyAnKS5yZXBsYWNlQWxsKCdcIicsIFwiJ1wiKTtcbiAgcmV0dXJuIGBcblVzZSBcXGBwbGF5d3JpZ2h0LWNsaVxcYCBza2lsbCB0byB0YWtlIGEgc2NyZWVuc2hvdCBvZiBcIiR7c2FuaXRpemVkRGVzY3JpcHRpb259XCIgYnkgbmF2aWdhdGluZyBmcm9tICR7aW5pdGlhbFVybH0gdG8gXCIke3BhZ2VOYW1lfVwiIHBhZ2UuXG5cbkZvbGxvdyB0aGlzIHdvcmtmbG93OlxuMS4gT3BlbiB0aGUgaW5pdGlhbCBwYWdlIGF0ICR7aW5pdGlhbFVybH0uXG4yLiBOYXZpZ2F0ZSBmcm9tIHRoYXQgaW5pdGlhbCBwYWdlIHVudGlsIHlvdSByZWFjaCB0aGUgcGFnZSBpZGVudGlmaWVkIGFzICR7cGFnZU5hbWV9LlxuICAgLSBJZiBjb2RlIGVycm9ycywgcnVudGltZSBmYWlsdXJlcywgb3IgYnJva2VuIFVJIGZsb3dzIHByZXZlbnQgbmF2aWdhdGlvbiwgaW52ZXN0aWdhdGUgdGhlIGNhdXNlIGluIHRoZSBsb2NhbCBjb2RlYmFzZSwgbWFrZSB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGNvZGUgZml4LCBhbmQgdmVyaWZ5IHRoYXQgdGhlIHBhZ2UgY2FuIG5vdyBiZSByZWFjaGVkIGJlZm9yZSBjb250aW51aW5nLlxuICAgLSBJZiB5b3UgY2Fubm90IGZpeCB0aGUgZXJyb3JzLCByZXBvcnQgb24gdGhlIGVycm9ycyB0aGVuIHN0b3AuXG4zLiBDYXB0dXJlIGEgc2NyZWVuc2hvdCB0aGF0IGZvY3VzZXMgb24gdGhpcyB0YXJnZXQ6IFwiJHtzYW5pdGl6ZWREZXNjcmlwdGlvbn1cIi5cbjQuIEtlZXAgdGhlIGdlbmVyYXRlZCBpbWFnZSBhcnRpZmFjdCBhbmQgcmVwb3J0IHRoZSBzY3JlZW5zaG90IGZpbGUgcGF0aCBwbHVzIGEgYnJpZWYgZGVzY3JpcHRpb24gb2Ygd2hhdCB3YXMgY2FwdHVyZWQuIElmIHlvdSBoYWQgdG8gZml4IGNvZGUgZmlyc3QsIGFsc28gc3VtbWFyaXplIHRoZSBmaXguXG5gLnRyaW0oKTtcbn1cbiIsImltcG9ydCB7IGZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSB9IGZyb20gJy4uL3ByL3ByQ29tbWFuZHMuanMnO1xuaW1wb3J0IHsgY3VycmVudEJhc2VCcmFuY2ggfSBmcm9tICcuLi9yZXBvL2RlZmF1bHRCcmFuY2guanMnO1xuaW1wb3J0IHsgYnVpbGRNZXJnZUJhc2VDb21tYW5kIH0gZnJvbSAnLi9iYXNlQnJhbmNoRGlmZkNvbW1hbmQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRTaW1wbGlmeVByb21wdCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBiYXNlQnJhbmNoID0gYXdhaXQgY3VycmVudEJhc2VCcmFuY2goKTtcbiAgY29uc3QgbWVyZ2VCYXNlQ29tbWFuZCA9IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZChiYXNlQnJhbmNoKTtcbiAgY29uc3QgcHJDb250ZXh0ID0gYXdhaXQgZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlKCk7XG4gIHJldHVybiBgXG5TaW1wbGlmeSB0aGUgY3VycmVudCAke3ByQ29udGV4dCA/ICdwdWxsIHJlcXVlc3QnIDogJ2JyYW5jaCd9IGFnYWluc3QgaXRzIGJhc2UgYnJhbmNoIHVzaW5nIFxcYGdpdCBkaWZmIFwiJCgke21lcmdlQmFzZUNvbW1hbmR9KVwiXFxgLlxuRmlyc3QsIGluc3BlY3QgdGhlIGRpZmYgYW5kIHJldmlldyB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgZWFjaCBjaGFuZ2VkIGFyZWEuIFRoaXMgaW5jbHVkZXMgbmVhcmJ5IGZ1bmN0aW9ucywgdHlwZXMsIGNhbGwgc2l0ZXMsIHRlc3RzLCBjb25maWd1cmF0aW9ucywgYW5kIGFueSBvdGhlciBmaWxlcyB0aGF0IGhlbHAgZGV0ZXJtaW5lIGlmIHRoZSBjaGFuZ2UgaXMgdHJ1bHkgbmVjZXNzYXJ5LlxuTGV2ZXJhZ2UgdGhpcyBjb250ZXh0IHRvIGlkZW50aWZ5IHJlZHVuZGFuY2llcyB0aGF0IGNhbiBiZSBzYWZlbHkgcmVtb3ZlZCBvciBzaW1wbGlmaWVkLiBMb29rIGZvciBkdXBsaWNhdGUgbG9naWMsIHJlcGVhdGVkIGNvbmRpdGlvbmFscywgdW5uZWNlc3NhcnkgYWJzdHJhY3Rpb25zLCBvdmVybGFwcGluZyBjb2RlIHBhdGhzLCBkZWFkIGNvZGUsIG9yIGVkaXRzIG1hZGUgb2Jzb2xldGUgdXBvbiB1bmRlcnN0YW5kaW5nIHRoZSBicm9hZGVyIGNvbnRleHQuXG5cblByaW9yaXRpemUgc2ltcGxpZmljYXRpb25zIHRoYXQgcmVkdWNlIHRoZSByZXZpZXdlcidzIGJ1cmRlbiwgc3VjaCBhczpcbi0gUmVtb3ZpbmcgcmVkdW5kYW50IGVkaXRzIG9yIGRlYWQgY29kZS5cbi0gRWxpbWluYXRpbmcgb3IgbWVyZ2luZyBkdXBsaWNhdGVkIGxvZ2ljIGRpc2NvdmVyZWQgYnkgY29tcGFyaW5nIHRoZSBkaWZmIHdpdGggcmVsYXRlZCBjb2RlLlxuLSBGbGF0dGVuaW5nIHVubmVjZXNzYXJpbHkgY29tcGxleCBsb2dpYyBpbnRyb2R1Y2VkIGluIHRoZSBkaWZmIChlLmcuLCB1c2luZyBlYXJseSByZXR1cm5zIHRvIHJlZHVjZSBuZXN0aW5nLCBzaW1wbGlmeWluZyBib29sZWFuIGV4cHJlc3Npb25zLCBvciByZW1vdmluZyByZWR1bmRhbnQgd3JhcHBlciBmdW5jdGlvbnMpLlxuXG5Db21taXQgYW5kIHB1c2ggeW91ciBjaGFuZ2VzLiBBZnRlcndhcmQsIHN1bW1hcml6ZSB0aGUgcmVkdW5kYW5jaWVzIG9yIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkgeW91IGhhdmUgcmVtb3ZlZC5cblxuJHtwckNvbnRleHQgPyBgQ3VycmVudCBwdWxsIHJlcXVlc3QgY29udGV4dDpcXG5+fn5+eWFtbFxcbiR7cHJDb250ZXh0LnRyaW0oKX1cXG5+fn5+YCA6ICcnfVxuYC50cmltKCk7XG59XG4iLCJpbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnN0YWxsUGFja2VkU2tpbGxzKCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBydW5Db21tYW5kV2l0aFByb2dyZXNzKFxuICAgIFtcbiAgICAgICdidW54JyxcbiAgICAgICdza2lsbHNAbGF0ZXN0JyxcbiAgICAgICdhZGQnLFxuICAgICAgZmlsZVVSTFRvUGF0aChuZXcgVVJMKCcuLi8uLicsIGltcG9ydC5tZXRhLnVybCkpLFxuICAgICAgJy0tZ2xvYmFsJyxcbiAgICAgICctLXllcycsXG4gICAgICAnLS1za2lsbCcsXG4gICAgICAnKicsXG4gICAgICAnLS1hZ2VudCcsXG4gICAgICAnY2xhdWRlLWNvZGUnLFxuICAgICAgJy0tYWdlbnQnLFxuICAgICAgJ2NvZGV4JyxcbiAgICAgICctLWFnZW50JyxcbiAgICAgICdnZW1pbmktY2xpJyxcbiAgICBdLFxuICAgIHtcbiAgICAgIHdhaXRNZXNzYWdlOiAnSW5zdGFsbGluZyBwYWNrYWdlZCBza2lsbHMgZ2xvYmFsbHkuJyxcbiAgICB9XG4gICk7XG59XG4iLCIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQge1xuICBjb250YWluc05vQ29uY2VyblNlbnRlbmNlLFxuICBkaXNwbGF5QWdlbnROYW1lLFxuICBydW5BZ2VudENvbW1hbmQsXG4gIHJ1bkFsbEFnZW50Q29tbWFuZHMsXG59IGZyb20gJy4vYWdlbnQvYWdlbnRDb21tYW5kcy5qcyc7XG5pbXBvcnQge1xuICBjaGVja1ByQ2ksXG4gIGZldGNoSXNzdWVNZXNzYWdlcyxcbiAgZmV0Y2hQck1lc3NhZ2VzLFxuICBsaXN0UHJSZXZpZXdUaHJlYWRzLFxuICBub3JtYWxpemVJc3N1ZU51bWJlcixcbiAgb3BlblByLFxuICByZWFkUmVwbGllc0Zyb21TdGRpbixcbiAgcmVhZFJlcXVpcmVkU3RkaW5UZXh0LFxuICByZWFkU3RkaW5UZXh0LFxuICByZXNvbHZlUHJSZXZpZXdUaHJlYWRzLFxuICB1cGRhdGVQcixcbn0gZnJvbSAnLi9wci9wckNvbW1hbmRzLmpzJztcbmltcG9ydCB7IGJ1aWxkUGxhblByb21wdCB9IGZyb20gJy4vcHJvbXB0cy9wbGFuUHJvbXB0LmpzJztcbmltcG9ydCB7IGJ1aWxkUmV2aWV3UHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3Jldmlld1Byb21wdC5qcyc7XG5pbXBvcnQgeyBidWlsZFNjcmVlbnNob3RQcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvc2NyZWVuc2hvdFByb21wdC5qcyc7XG5pbXBvcnQgeyBidWlsZFNpbXBsaWZ5UHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3NpbXBsaWZ5UHJvbXB0LmpzJztcbmltcG9ydCB7IGluc3RhbGxQYWNrZWRTa2lsbHMgfSBmcm9tICcuL3NraWxscy9pbnN0YWxsU2tpbGxzLmpzJztcblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW0ubmFtZSgnYWdlbnQtc2tpbGxzJykuZGVzY3JpcHRpb24oJ0NMSSBjb21tYW5kcyBmb3IgdGhlIHNraWxscyBpbiB0aGlzIHJlcG9zaXRvcnknKS5zaG93SGVscEFmdGVyRXJyb3IoKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnaW5zdGFsbC1za2lsbHMnKVxuICAuZGVzY3JpcHRpb24oJ0luc3RhbGwgYWxsIHBhY2thZ2VkIHNraWxscyBnbG9iYWxseSBmb3IgQ2xhdWRlIENvZGUsIENvZGV4LCBhbmQgR2VtaW5pIENMSScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgaW5zdGFsbFBhY2tlZFNraWxscygpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKCdEb25lXFxuJyk7XG4gIH0pO1xuXG5hZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kKHtcbiAgbmFtZTogJ3JldmlldycsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgcmV2aWV3IGFnZW50JyxcbiAgY2hvaWNlczogWydhbGwnLCAnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddLFxuICBydW46IChtb2RlKSA9PlxuICAgIG1vZGUgPT09ICdhbGwnXG4gICAgICA/IHJ1bkFsbEFnZW50Q29tbWFuZHMoYnVpbGRSZXZpZXdQcm9tcHQoKSwge1xuICAgICAgICAgIGFsbEFnZW50c0xhYmVsOiAncmV2aWV3IGFnZW50cycsXG4gICAgICAgICAgbWFwT3V0cHV0OiAoYWdlbnQsIG91dHB1dCkgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2Uob3V0cHV0KSkge1xuICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGAjIyAke2Rpc3BsYXlBZ2VudE5hbWUoYWdlbnQpfVxcblxcbiR7b3V0cHV0fWA7XG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIDogcnVuQWdlbnRDb21tYW5kKG1vZGUsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpLFxufSk7XG5cbmFkZEFnZW50Q29tbWFuZCgncmV2aWV3LWNvZGV4JywgJ1J1biBDb2RleCByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NvZGV4JywgYnVpbGRSZXZpZXdQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY2xhdWRlJywgYnVpbGRSZXZpZXdQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdnZW1pbmknLCBidWlsZFJldmlld1Byb21wdCgpKVxuKTtcblxuYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCh7XG4gIG5hbWU6ICdwbGFuJyxcbiAgZGVzY3JpcHRpb246ICdSdW4gcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlIHdpdGggdGhlIHNlbGVjdGVkIGFnZW50JyxcbiAgb3B0aW9uRGVzY3JpcHRpb246ICdVc2UgYSBwbGFubmluZyBhZ2VudCcsXG4gIGNob2ljZXM6IFsnYWxsJywgJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcsXG4gIHJ1bjogKG1vZGUsIGlzc3VlUmVmZXJlbmNlKSA9PlxuICAgIG1vZGUgPT09ICdhbGwnXG4gICAgICA/IHJ1bkFsbEFnZW50Q29tbWFuZHMoYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSksIHtcbiAgICAgICAgICBhbGxBZ2VudHNMYWJlbDogJ3BsYW5uaW5nIGFnZW50cycsXG4gICAgICAgIH0pXG4gICAgICA6IHJ1bkFnZW50Q29tbWFuZChtb2RlLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcblxuYWRkQWdlbnRDb21tYW5kKCdwbGFuLWNvZGV4JywgJ1J1biBDb2RleCBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChpc3N1ZVJlZmVyZW5jZSkgPT4gcnVuQWdlbnRDb21tYW5kKCdjb2RleCcsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpKSxcbn0pO1xuYWRkQWdlbnRDb21tYW5kKCdwbGFuLWNsYXVkZScsICdSdW4gQ2xhdWRlIENvZGUgcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlJywge1xuICBhcmd1bWVudE5hbWU6ICc8aXNzdWU+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJyxcbiAgcnVuOiAoaXNzdWVSZWZlcmVuY2UpID0+IHJ1bkFnZW50Q29tbWFuZCgnY2xhdWRlJywgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSkpLFxufSk7XG5hZGRBZ2VudENvbW1hbmQoJ3BsYW4tZ2VtaW5pJywgJ1J1biBHZW1pbmkgQ0xJIHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZScsIHtcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcsXG4gIHJ1bjogKGlzc3VlUmVmZXJlbmNlKSA9PiBydW5BZ2VudENvbW1hbmQoJ2dlbWluaScsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpKSxcbn0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdzY3JlZW5zaG90JylcbiAgLmRlc2NyaXB0aW9uKCdUYWtlIGEgc2NyZWVuc2hvdCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCB2aWEgcGxheXdyaWdodC1jbGknKVxuICAuYXJndW1lbnQoJzxpbml0aWFsLXVybD4nLCAnSW5pdGlhbCBVUkwgdG8gb3BlbiBiZWZvcmUgbmF2aWdhdGluZycpXG4gIC5hcmd1bWVudCgnPHBhZ2UtbmFtZT4nLCAnUGFnZSBuYW1lIHRvIG5hdmlnYXRlIHRvIGZyb20gdGhlIGluaXRpYWwgcGFnZScpXG4gIC5hcmd1bWVudCgnPGRlc2NyaXB0aW9uPicsICdEZXNjcmlwdGlvbiBvZiB0aGUgcGFydCB0byBjYXB0dXJlIGluIHRoZSBzY3JlZW5zaG90JylcbiAgLmFkZE9wdGlvbihcbiAgICBuZXcgT3B0aW9uKCctLWFnZW50IDxhZ2VudD4nLCAnVXNlIGEgc2NyZWVuc2hvdCBhZ2VudCcpLmNob2ljZXMoWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10pLm1ha2VPcHRpb25NYW5kYXRvcnkoKVxuICApXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihcbiAgICBhc3luYyAoXG4gICAgICBpbml0aWFsVXJsOiBzdHJpbmcsXG4gICAgICBwYWdlTmFtZTogc3RyaW5nLFxuICAgICAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgICAgIG9wdGlvbnM6IHsgYWdlbnQ6ICdjb2RleCcgfCAnY2xhdWRlJyB8ICdnZW1pbmknIH1cbiAgICApID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKFxuICAgICAgICBhd2FpdCBydW5BZ2VudENvbW1hbmQob3B0aW9ucy5hZ2VudCwgYnVpbGRTY3JlZW5zaG90UHJvbXB0KGluaXRpYWxVcmwsIHBhZ2VOYW1lLCBkZXNjcmlwdGlvbikpXG4gICAgICApO1xuICAgIH1cbiAgKTtcblxuYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCh7XG4gIG5hbWU6ICdzaW1wbGlmeScsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoIHdpdGggdGhlIHNlbGVjdGVkIGFnZW50JyxcbiAgb3B0aW9uRGVzY3JpcHRpb246ICdVc2UgYSBzaW1wbGlmeSBhZ2VudCcsXG4gIGNob2ljZXM6IFsnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddLFxuICBydW46IChhZ2VudCkgPT4gcnVuQWdlbnRDb21tYW5kKGFnZW50LCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpLFxufSk7XG5cbmFkZEFnZW50Q29tbWFuZCgnc2ltcGxpZnktY29kZXgnLCAnUnVuIENvZGV4IFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjb2RleCcsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWNsYXVkZScsICdSdW4gQ2xhdWRlIENvZGUgUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSlcbik7XG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWdlbWluaScsICdSdW4gR2VtaW5pIENMSSBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnZ2VtaW5pJywgYnVpbGRTaW1wbGlmeVByb21wdCgpKVxuKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnb3Blbi1wcicpXG4gIC5kZXNjcmlwdGlvbignQ3JlYXRlIGEgcHVsbCByZXF1ZXN0IGZvciB0aGUgY3VycmVudCBicmFuY2gnKVxuICAuYXJndW1lbnQoJzx0aXRsZT4nLCAnUHVsbCByZXF1ZXN0IHRpdGxlJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICh0aXRsZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgYm9keSA9IGF3YWl0IHJlYWRTdGRpblRleHQoKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBvcGVuUHIoeyBib2R5OiBib2R5IHx8IHVuZGVmaW5lZCwgdGl0bGUgfSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7b3V0cHV0fVxcbmApO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgndXBkYXRlLXByJylcbiAgLmRlc2NyaXB0aW9uKCdVcGRhdGUgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0IHRpdGxlIGFuZCBib2R5JylcbiAgLmFyZ3VtZW50KCc8dGl0bGU+JywgJ1B1bGwgcmVxdWVzdCB0aXRsZScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAodGl0bGU6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZWFkUmVxdWlyZWRTdGRpblRleHQoJ0Vycm9yOiBQUiBib2R5IGlucHV0IGlzIHJlcXVpcmVkIG9uIHN0ZGluJyk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgdXBkYXRlUHIoeyBib2R5LCB0aXRsZSB9KTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtvdXRwdXR9XFxuYCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdjaGVjay1wci1jaScpXG4gIC5kZXNjcmlwdGlvbignU2hvdyB0aGUgbGF0ZXN0IHRlc3QtcmVsYXRlZCBDSSByZXN1bHRzIGZvciB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrUHJDaSgpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHJlc3VsdC5vdXRwdXQpO1xuICAgIHByb2Nlc3MuZXhpdChyZXN1bHQuZXhpdENvZGUpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnZmV0Y2gtaXNzdWUnKVxuICAuZGVzY3JpcHRpb24oJ0ZldGNoIGFuIGlzc3VlIGJvZHkgYW5kIHRpbWVsaW5lIG1lc3NhZ2VzIGFzIFlBTUwnKVxuICAuYXJndW1lbnQoJzxpc3N1ZT4nLCAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKGlzc3VlUmVmZXJlbmNlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmZXRjaElzc3VlTWVzc2FnZXMoaXNzdWVSZWZlcmVuY2UpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdmZXRjaC1wcicpXG4gIC5kZXNjcmlwdGlvbignRmV0Y2ggYSBwdWxsIHJlcXVlc3QgYm9keSBhbmQgdGltZWxpbmUgbWVzc2FnZXMgYXMgWUFNTCwgZXhjbHVkaW5nIGlubGluZSBjb21tZW50cycpXG4gIC5hcmd1bWVudCgnW3ByXScsICdHaXRIdWIgcHVsbCByZXF1ZXN0IG51bWJlciBvciBVUkw7IGRlZmF1bHRzIHRvIHRoZSBjdXJyZW50IGJyYW5jaCBwdWxsIHJlcXVlc3QnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKHByUmVmZXJlbmNlPzogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZmV0Y2hQck1lc3NhZ2VzKHByUmVmZXJlbmNlKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnbGlzdC1wci1yZXZpZXctdGhyZWFkcycpXG4gIC5kZXNjcmlwdGlvbignTGlzdCB1bnJlc29sdmVkIHJldmlldyB0aHJlYWRzIGZvciB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGxpc3RQclJldmlld1RocmVhZHMoKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgncmVzb2x2ZS1wci1yZXZpZXctdGhyZWFkcycpXG4gIC5kZXNjcmlwdGlvbignUmVwbHkgdG8gdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcyBhbmQgcmVzb2x2ZSB0aGVtJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXBsaWVzID0gYXdhaXQgcmVhZFJlcGxpZXNGcm9tU3RkaW4oKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCByZXNvbHZlUHJSZXZpZXdUaHJlYWRzKHJlcGxpZXMpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5hd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMocHJvY2Vzcy5hcmd2KTtcblxuZnVuY3Rpb24gYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZDxUTW9kZSBleHRlbmRzIHN0cmluZz4oY29uZmlnOiB7XG4gIG5hbWU6IHN0cmluZztcbiAgZGVzY3JpcHRpb246IHN0cmluZztcbiAgb3B0aW9uRGVzY3JpcHRpb246IHN0cmluZztcbiAgY2hvaWNlczogW1RNb2RlLCAuLi5UTW9kZVtdXTtcbiAgYXJndW1lbnROYW1lPzogc3RyaW5nO1xuICBhcmd1bWVudERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBydW46IChtb2RlOiBUTW9kZSwgYXJndW1lbnQ6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xufSk6IHZvaWQge1xuICBjb25zdCBjb21tYW5kID0gcHJvZ3JhbS5jb21tYW5kKGNvbmZpZy5uYW1lKS5kZXNjcmlwdGlvbihjb25maWcuZGVzY3JpcHRpb24pLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKTtcbiAgaWYgKGNvbmZpZy5hcmd1bWVudE5hbWUpIHtcbiAgICBjb21tYW5kLmFyZ3VtZW50KGNvbmZpZy5hcmd1bWVudE5hbWUsIGNvbmZpZy5hcmd1bWVudERlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIGNvbW1hbmRcbiAgICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tYWdlbnQgPGFnZW50PicsIGNvbmZpZy5vcHRpb25EZXNjcmlwdGlvbikuY2hvaWNlcyhjb25maWcuY2hvaWNlcykubWFrZU9wdGlvbk1hbmRhdG9yeSgpKVxuICAgIC5hY3Rpb24oYXN5bmMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4ge1xuICAgICAgY29uc3QgW2FyZ3VtZW50T3JPcHRpb25zLCBtYXliZU9wdGlvbnNdID0gYXJncyBhcyBbc3RyaW5nIHwgeyBhZ2VudDogVE1vZGUgfSwgeyBhZ2VudDogVE1vZGUgfSB8IHVuZGVmaW5lZF07XG4gICAgICBjb25zdCBhcmd1bWVudCA9IHR5cGVvZiBhcmd1bWVudE9yT3B0aW9ucyA9PT0gJ3N0cmluZycgPyBhcmd1bWVudE9yT3B0aW9ucyA6ICcnO1xuICAgICAgY29uc3Qgb3B0aW9ucyA9ICh0eXBlb2YgYXJndW1lbnRPck9wdGlvbnMgPT09ICdzdHJpbmcnID8gbWF5YmVPcHRpb25zIDogYXJndW1lbnRPck9wdGlvbnMpIGFzIHsgYWdlbnQ6IFRNb2RlIH07XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBjb25maWcucnVuKG9wdGlvbnMuYWdlbnQsIGFyZ3VtZW50KSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIGFkZEFnZW50Q29tbWFuZChcbiAgbmFtZTogc3RyaW5nLFxuICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICBjb25maWdPclJ1bjpcbiAgICB8ICgoKSA9PiBQcm9taXNlPHN0cmluZz4pXG4gICAgfCB7XG4gICAgICAgIGFyZ3VtZW50TmFtZTogc3RyaW5nO1xuICAgICAgICBhcmd1bWVudERlc2NyaXB0aW9uPzogc3RyaW5nO1xuICAgICAgICBydW46IChhcmd1bWVudDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz47XG4gICAgICB9XG4pOiB2b2lkIHtcbiAgY29uc3QgY29tbWFuZCA9IHByb2dyYW0uY29tbWFuZChuYW1lKS5kZXNjcmlwdGlvbihkZXNjcmlwdGlvbikuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpO1xuXG4gIGlmICh0eXBlb2YgY29uZmlnT3JSdW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb21tYW5kLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBjb25maWdPclJ1bigpKTtcbiAgICB9KTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb21tYW5kLmFyZ3VtZW50KGNvbmZpZ09yUnVuLmFyZ3VtZW50TmFtZSwgY29uZmlnT3JSdW4uYXJndW1lbnREZXNjcmlwdGlvbikuYWN0aW9uKGFzeW5jIChhcmd1bWVudDogc3RyaW5nKSA9PiB7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnT3JSdW4ucnVuKGFyZ3VtZW50KSk7XG4gIH0pO1xufVxuIl0sIm5hbWVzIjpbIlBST0NFU1NfQ0xFQU5VUF9TSUdOQUxTIiwiYWN0aXZlUHJvY2Vzc2VzIiwiU2V0IiwiY2xlYW51cEhhbmRsZXJzSW5zdGFsbGVkIiwicnVuQ29tbWFuZFdpdGhQcm9ncmVzcyIsIl94IiwiX3gyIiwiX3J1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MiLCJhcHBseSIsInRoaXMiLCJhcmd1bWVudHMiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvciIsIm0iLCJfY2FsbGVlIiwiY29tbWFuZCIsIm9wdGlvbnMiLCJfY29tbWFuZCQiLCJwcm9jIiwicHJvY2Vzc1RpbWVvdXQiLCJzdG9wV2FpdFByb2dyZXNzIiwiY29tbWFuZExvZ2dlciIsIl95aWVsZCRQcm9taXNlJGFsbCIsIl95aWVsZCRQcm9taXNlJGFsbDIiLCJzdGRvdXQiLCJzdGRlcnIiLCJleGl0Q29kZSIsIm91dHB1dCIsInciLCJfY29udGV4dCIsInAiLCJuIiwic3Bhd24iLCJzbGljZSIsImRldGFjaGVkIiwic3RkaW8iLCJjcmVhdGVQcm9jZXNzVGltZW91dCIsInRpbWVvdXRNcyIsImNyZWF0ZVdhaXRQcm9ncmVzcyIsIndhaXRNZXNzYWdlIiwid2FpdEludGVydmFsU2Vjb25kcyIsImNyZWF0ZUNvbW1hbmRMb2dnZXIiLCJsb2dGaWxlUGF0aCIsInYiLCJQcm9taXNlIiwiYWxsIiwic3RyZWFtVG9UZXh0IiwiY2h1bmsiLCJ3cml0ZSIsInJlc29sdmUiLCJyZWplY3QiLCJvbmNlIiwiY29kZSIsIl9zbGljZWRUb0FycmF5IiwidGltZWRPdXQiLCJFcnJvciIsInRpbWVvdXRFcnJvck1lc3NhZ2UiLCJjb25jYXQiLCJhIiwiam9pbiIsImNsb3NlIiwiY2xlYXIiLCJmIiwibWVzc2FnZSIsIm1pbGxpc2Vjb25kcyIsImZvcm1hdER1cmF0aW9uIiwibGVuZ3RoIiwiZm9yY2VLaWxsVGltZXIiLCJhZGQiLCJfc3RlcDIiLCJfaXRlcmF0b3IyIiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJfbG9vcCIsInNpZ25hbCIsInZhbHVlIiwicHJvY2VzcyIsIl9zdGVwMyIsIl9pdGVyYXRvcjMiLCJzIiwiZG9uZSIsImtpbGxQcm9jZXNzIiwiZXJyIiwiZSIsImV4aXQiLCJzaWduYWxOdW1iZXIiLCJpbnN0YWxsQ2xlYW51cEhhbmRsZXJzIiwidGltZW91dCIsInNldFRpbWVvdXQiLCJ1bnJlZiIsImNsZWFyVGltZW91dCIsInBpZCIsImtpbGwiLCJfdW51c2VkIiwiX3gzIiwiX3g0IiwiX3N0cmVhbVRvVGV4dCIsIl9jYWxsZWUyIiwic3RyZWFtIiwib25DaHVuayIsImNodW5rcyIsImRlY29kZXIiLCJfaXRlcmF0b3JBYnJ1cHRDb21wbGV0aW9uIiwiX2RpZEl0ZXJhdG9yRXJyb3IiLCJfaXRlcmF0b3JFcnJvciIsIl9pdGVyYXRvciIsIl9zdGVwIiwiY2h1bmtUZXh0IiwiZmluYWxDaHVuayIsIl90IiwiX2NvbnRleHQyIiwiVGV4dERlY29kZXIiLCJfYXN5bmNJdGVyYXRvciIsIm5leHQiLCJkZWNvZGUiLCJVaW50OEFycmF5IiwicHVzaCIsIndyaXRlUHJvZ3Jlc3MiLCJkb3RDb3VudCIsInRpbWVyIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwiX3g1IiwiX2NyZWF0ZUNvbW1hbmRMb2dnZXIiLCJfY2FsbGVlNiIsIndhcm4iLCJfdDIiLCJfY29udGV4dDYiLCJfY2xvc2UiLCJfY2FsbGVlMyIsIl9jb250ZXh0MyIsImVycm9yIiwiU3RyaW5nIiwibWtkaXIiLCJkaXJuYW1lIiwicmVjdXJzaXZlIiwiY3JlYXRlV3JpdGVTdHJlYW0iLCJmbGFncyIsIm9uIiwid3JpdGFibGUiLCJfY2xvc2UyIiwiX2NhbGxlZTQiLCJfY29udGV4dDQiLCJlbmQiLCJfY2xvc2UzIiwiX2NhbGxlZTUiLCJfY29udGV4dDUiLCJOT19DT05DRVJOX01FU1NBR0UiLCJBR0VOVF9OQU1FUyIsIkNPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVgiLCJSZWdFeHAiLCJydW5BbGxBZ2VudENvbW1hbmRzIiwiX3J1bkFsbEFnZW50Q29tbWFuZHMiLCJwcm9tcHQiLCJyZXNvbHZlZFByb21wdCIsIm91dHB1dHMiLCJhbGxBZ2VudHNMYWJlbCIsIndhaXRNZXNzYWdlRm9yIiwibWFwIiwiYWdlbnQiLCJfb3B0aW9ucyRtYXBPdXRwdXQiLCJfb3B0aW9ucyRtYXBPdXRwdXQyIiwiX29wdGlvbnMiLCJydW5BZ2VudENvbW1hbmQiLCJ0cmltIiwibWFwT3V0cHV0IiwiY2FsbCIsImRpc3BsYXlBZ2VudE5hbWUiLCJmaWx0ZXIiLCJ1bmRlZmluZWQiLCJfcnVuQWdlbnRDb21tYW5kIiwiX3QzIiwiY3JlYXRlQWdlbnRDb21tYW5kIiwiYWdlbnRMb2dGaWxlUGF0aCIsInRhcmdldCIsIm5vdyIsIkRhdGUiLCJfbWFwMiIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJ0d29EaWdpdHMiLCJtb250aCIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJ0b1N0cmluZyIsInBhZFN0YXJ0IiwieWFtbFN0cmluZ2lmeU9wdGlvbnMiLCJibG9ja1F1b3RlIiwibGluZVdpZHRoIiwicHJvZ3Jlc3MiLCJwcm9jZXNzU3RkZXJyIiwiZXhpdFdpdGhFcnJvciIsInJlYWRTdGRpblRleHQiLCJfcmVhZFN0ZGluVGV4dCIsInByb2Nlc3NTdGRpbiIsImlzVFRZIiwicmVhZFJlcXVpcmVkU3RkaW5UZXh0IiwiX3JlYWRSZXF1aXJlZFN0ZGluVGV4dCIsImVycm9yTWVzc2FnZSIsImlucHV0IiwicnVuQ29tbWFuZCIsIl9ydW5Db21tYW5kIiwiX29wdGlvbnMkYWxsb3dlZEV4aXRDIiwiYWxsb3dlZEV4aXRDb2RlcyIsIl9yZXQiLCJhdHRlbXB0IiwiX2NvbW1hbmQkMiIsImZhaWx1cmVNZXNzYWdlIiwicmV0cnkiLCJzdGRpbkRhdGEiLCJzdGRpbiIsImluY2x1ZGVzIiwiaXNUcmFuc2llbnRHaEZhaWx1cmUiLCJHSF9SRVRSWV9NQVhfQVRURU1QVFMiLCJzbGVlcCIsImQiLCJfcmVnZW5lcmF0b3JWYWx1ZXMiLCJnaCIsIl9naCIsImFyZ3MiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJnaEFsbG93RXhpdENvZGVzIiwiX3g2IiwiX3g3IiwiX3g4IiwiX2doQWxsb3dFeGl0Q29kZXMiLCJjdXJyZW50UmVwb1BhcnRzIiwiX2N1cnJlbnRSZXBvUGFydHMiLCJuYW1lV2l0aE93bmVyIiwiX25hbWVXaXRoT3duZXIkc3BsaXQiLCJfbmFtZVdpdGhPd25lciRzcGxpdDIiLCJvd25lciIsIm5hbWUiLCJfY29udGV4dDciLCJzcGxpdCIsImN1cnJlbnRQck51bWJlciIsIl9jdXJyZW50UHJOdW1iZXIiLCJfY2FsbGVlNyIsIl9jb250ZXh0OCIsImdyYXBocWwiLCJfeDkiLCJfeDAiLCJfZ3JhcGhxbCIsIl9jYWxsZWU4IiwicXVlcnkiLCJ2YXJzIiwiX2kiLCJfT2JqZWN0JGVudHJpZXMiLCJfT2JqZWN0JGVudHJpZXMkX2kiLCJrZXkiLCJyZXNwb25zZSIsImVycm9yTWVzc2FnZXMiLCJfY29udGV4dDkiLCJPYmplY3QiLCJlbnRyaWVzIiwiSlNPTiIsInBhcnNlIiwiQXJyYXkiLCJpc0FycmF5IiwiZXJyb3JzIiwiX2Vycm9yJG1lc3NhZ2UiLCJ5YW1sRHVtcCIsImRhdGEiLCJzdHJpbmdpZnlZYW1sIiwiZGVlcENvcHkiLCJzdHJpbmdpZnkiLCJzcGF3blN5bmNTYWZlIiwiX3Jlc3VsdCRzdGF0dXMiLCJfcmVzdWx0JHN0ZG91dCIsIl9yZXN1bHQkc3RkZXJyIiwicmVzdWx0Iiwic3Bhd25TeW5jIiwiZW5jb2RpbmciLCJzdGF0dXMiLCJ0ZXN0IiwiVEVTVF9SRUxBVEVEX1BBVFRFUk4iLCJXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMiLCJGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4iLCJydGtBdmFpbGFibGUiLCJsYXRlc3RQckNpUmVzdWx0cyIsIl9sYXRlc3RQckNpUmVzdWx0cyIsInByTnVtYmVyIiwiX3N1bW1hcnkkcGFzcyIsIl9zdW1tYXJ5JGZhaWwiLCJfc3VtbWFyeSRwZW5kaW5nIiwiX3N1bW1hcnkkc2tpcHBpbmciLCJfc3VtbWFyeSRjYW5jZWwiLCJjaGVja3MiLCJyYXciLCJzdW1tYXJ5IiwiU3ludGF4RXJyb3IiLCJyZWR1Y2UiLCJjb3VudHMiLCJjaGVjayIsIl9jaGVjayRidWNrZXQyIiwiX2NvdW50cyRidWNrZXQiLCJidWNrZXQiLCJ0b3RhbCIsInBhc3MiLCJmYWlsIiwicGVuZGluZyIsInNraXBwaW5nIiwiY2FuY2VsIiwid2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyIsIl93YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzIiwic2xlZXBGbiIsImxhdGVzdENpUmVzdWx0c0ZuIiwid3JpdGVQcm9ncmVzc0ZuIiwiYXR0ZW1wdHMiLCJjaVJlc3VsdHMiLCJjbGFzc2lmaWVkUmVzdWx0cyIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdCIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDIiLCJmYWlsZWRSZXN1bHRzIiwicnVubmluZ1Jlc3VsdHMiLCJzbGVlcFNlY29uZHMiLCJjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyIsImZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZCIsImtleXMiLCJsYXRlc3RSZXN1bHRzQnlXb3JrZmxvdyIsImdyb3VwZWRSZXN1bHRzIiwid29ya2Zsb3dLZXkiLCJ3b3JrZmxvdyIsImZyb21FbnRyaWVzIiwiX3JlZiIsIl9sYXRlc3RBdHRlbXB0Q2hlY2tzJCIsIl9yZWYyIiwibGF0ZXN0QXR0ZW1wdENoZWNrcyIsImdyb3VwcyIsImdyb3VwZWRDaGVja3MiLCJydW5JZCIsIndvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rIiwid29ya2Zsb3dBdHRlbXB0S2V5IiwiZ3JvdXAiLCJnZXQiLCJzZXQiLCJNYXAiLCJmcm9tIiwidmFsdWVzIiwibGF0ZXN0R3JvdXAiLCJjdXJyZW50R3JvdXAiLCJsYXRlc3RHcm91cFRpbWVzdGFtcCIsImxhdGVzdENoZWNrc0ZvcldvcmtmbG93IiwiZmlyc3RDaGVjayIsImxhdGVzdENoZWNrIiwiY3VycmVudExhdGVzdCIsImxhdGVzdENoZWNrVGltZXN0YW1wIiwiY2xhc3NpZmljYXRpb24iLCJ3b3JrZmxvd1Jlc3VsdENsYXNzaWZpY2F0aW9uIiwic29tZSIsInRlc3RSZWxhdGVkQ2hlY2siLCJfbGluayRtYXRjaCIsImxpbmsiLCJtYXRjaCIsIndvcmtmbG93UnVuIiwiX3dvcmtmbG93UnVuIiwicnVuSnNvbiIsImJ1Y2tldHMiLCJfY2hlY2skYnVja2V0IiwiX2NoZWNrJHN0YXJ0ZWRBdCIsInRpbWVzdGFtcCIsImNvbXBsZXRlZEF0Iiwic3RhcnRlZEF0IiwiX3NsZWVwU2Vjb25kcyIsInNlY29uZHMiLCJjaGVja1ByQ2kiLCJfY2hlY2tQckNpIiwiX3lpZWxkJHdhaXRGb3JSdW5uaW5nIiwiX3lpZWxkJHdhaXRGb3JSdW5uaW5nMiIsIndhaXRBdHRlbXB0cyIsIndhaXRUaW1lZE91dCIsImNsYXNzaWZpZWRMYXRlc3QiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QzIiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0NCIsInBheWxvYWQiLCJ3YWl0ZWRfZm9yX3Rlc3RfcmVsYXRlZF9jaGVja3MiLCJ0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF9hdHRlbXB0cyIsInRlc3RfcmVsYXRlZF9jaGVja193YWl0X3RpbWVkX291dCIsIl9yZWY0IiwiX3JlZjYiLCJjb21wYWN0V29ya2Zsb3ciLCJfdDQiLCJfdDUiLCJjb21wYWN0V29ya2Zsb3dSZXN1bHQiLCJfb2JqZWN0U3ByZWFkIiwiYnVpbGRGYWlsZWRXb3JrZmxvd0RldGFpbHMiLCJmYWlsZWRXb3JrZmxvd0xvZyIsImZhaWxlZF93b3JrZmxvd3MiLCJ0ZXN0X3dvcmtmbG93X291dHB1dCIsIl9yZWY3IiwiX3JlZjgiLCJydW5uaW5nX3Rlc3RfcmVsYXRlZF93b3JrZmxvd3MiLCJsYXRlc3QiLCJfY29tcGFjdFdvcmtmbG93UmVzdWx0IiwiX3N0cmluZ09yVW5kZWZpbmVkIiwicnVuIiwiZmFpbGVkSm9iIiwiZmFpbGVkV29ya2Zsb3dSdW5Kb2IiLCJzdHJpbmdPclVuZGVmaW5lZCIsImpvYiIsImpvYl91cmwiLCJ1cmwiLCJmYWlsZWRfc3RlcCIsImZhaWxlZFdvcmtmbG93UnVuU3RlcE5hbWUiLCJydW5faWQiLCJydW5fdXJsIiwiYnJhbmNoIiwiaGVhZEJyYW5jaCIsInNoYSIsImhlYWRTaGEiLCJjb25jbHVzaW9uIiwiX2ZhaWxlZFdvcmtmbG93TG9nIiwibG9nIiwiZmFpbGVkX2xvZyIsInJlZmluZUZhaWxlZFdvcmtmbG93TG9nIiwic2FuaXRpemVkSW5wdXQiLCJzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nIiwic3RyaXBWVENvbnRyb2xDaGFyYWN0ZXJzIiwibGluZSIsInJlcGxhY2UiLCJqb2JOYW1lIiwiX3JlZjMiLCJfcnVuJGpvYnMkZmluZCIsImpvYnMiLCJmaW5kIiwiX2pvYiRzdGVwcyRmaW5kJG5hbWUiLCJfam9iJHN0ZXBzJGZpbmQiLCJfam9iJHN0ZXBzJGZpbmQyIiwic3RlcHMiLCJzdGVwIiwiY3VycmVudEJhc2VCcmFuY2giLCJfY3VycmVudEJhc2VCcmFuY2giLCJfeWllbGQkY3VycmVudFB1bGxSZXEiLCJjdXJyZW50UHVsbFJlcXVlc3RCYXNlQnJhbmNoIiwiY3VycmVudERlZmF1bHRCcmFuY2giLCJfY3VycmVudERlZmF1bHRCcmFuY2giLCJyZXF1aXJlTm9uRW1wdHkiLCJfY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCIsImJhc2VCcmFuY2giLCJpc0N1cnJlbnRQdWxsUmVxdWVzdE1pc3NpbmciLCJub3JtYWxpemVJc3N1ZU51bWJlciIsInJlZmVyZW5jZSIsImV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIiLCJub3JtYWxpemVQck51bWJlciIsImZldGNoSXNzdWVNZXNzYWdlcyIsIl9mZXRjaElzc3VlTWVzc2FnZXMiLCJpc3N1ZU51bWJlciIsIl95aWVsZCRjdXJyZW50UmVwb1BhciIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjIiLCJpc3N1ZSIsImlzc3VlTWVzc2FnZXMiLCJudW1iZXIiLCJmZXRjaFByTWVzc2FnZXMiLCJfZmV0Y2hQck1lc3NhZ2VzIiwicmVzb2x2ZWRQck51bWJlciIsInB1bGxSZXF1ZXN0IiwiY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzIiwicHVsbF9yZXF1ZXN0IiwiZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlIiwiX2ZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSIsInByTnVtYmVyT3V0cHV0IiwiX2N1cnJlbnRSZXBvUHVsbFJlcXVlc3RNZXNzYWdlcyIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjMiLCJfeWllbGQkY3VycmVudFJlcG9QYXI0IiwicHJNZXNzYWdlcyIsImxhYmVsIiwicmVmZXJlbmNlVGV4dCIsImtpbmRTZWdtZW50IiwiX2lzc3VlTWVzc2FnZXMiLCJtZXNzYWdlcyIsImZldGNoTWV0YWRhdGEiLCJub3VuIiwic2VsZWN0TWV0YWRhdGEiLCJfcmVzcG9uc2UkZGF0YSIsInJlcG9zaXRvcnkiLCJwYWdpbmF0ZU1lc3NhZ2VzIiwic2VsZWN0Q29ubmVjdGlvbiIsIl9yZXNwb25zZSRkYXRhMiIsImNvbW1lbnRzIiwibWFwTm9kZSIsImNvbW1lbnRNZXNzYWdlIiwiX3ByTWVzc2FnZXMiLCJpc3N1ZUNvbW1lbnRzIiwicmV2aWV3cyIsIl9yZXNwb25zZSRkYXRhMyIsInBySXNzdWVDb21tZW50cyIsInByUmV2aWV3cyIsInNvcnQiLCJjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdCIsImxlZnQiLCJyaWdodCIsImxlZnRDcmVhdGVkQXQiLCJjcmVhdGVkQXQiLCJyaWdodENyZWF0ZWRBdCIsImxvY2FsZUNvbXBhcmUiLCJfeDEiLCJfeDEwIiwiX3BySXNzdWVDb21tZW50cyIsIl9yZXNwb25zZSRkYXRhNCIsIl94MTEiLCJfeDEyIiwiX3gxMyIsIl9wclJldmlld3MiLCJfcmVzcG9uc2UkZGF0YTUiLCJyZXZpZXdNZXNzYWdlIiwiX3gxNCIsIl9wYWdpbmF0ZU1lc3NhZ2VzIiwiX2NhbGxlZTkiLCJjb25maWciLCJjdXJzb3IiLCJfY29ubmVjdGlvbiRwYWdlSW5mbyQiLCJjb25uZWN0aW9uIiwiTnVtYmVyIiwibm9kZXMiLCJoYXNNZXNzYWdlQm9keSIsInBhZ2VJbmZvIiwiaGFzTmV4dFBhZ2UiLCJlbmRDdXJzb3IiLCJfeDE1IiwiX2ZldGNoTWV0YWRhdGEiLCJfY2FsbGVlMCIsIl9tZXRhZGF0YSRhdXRob3IkbG9naSIsIl9tZXRhZGF0YSRhdXRob3IiLCJfbWV0YWRhdGEkYm9keSIsIm1ldGFkYXRhIiwiX2NvbnRleHQwIiwidGl0bGUiLCJhdXRob3IiLCJsb2dpbiIsImJvZHkiLCJjb21tZW50IiwiX2NvbW1lbnQkYXV0aG9yJGxvZ2luIiwiX2NvbW1lbnQkYXV0aG9yIiwidHlwZSIsInJldmlldyIsIl9yZXZpZXckYXV0aG9yJGxvZ2luIiwiX3JldmlldyRhdXRob3IiLCJfcmV2aWV3JHN0YXRlIiwiX3JldmlldyRzdWJtaXR0ZWRBdCIsIl9yZXZpZXckYm9keSIsInN0YXRlIiwic3VibWl0dGVkQXQiLCJvcGVuUHIiLCJfb3BlblByIiwiX3RlbXAiLCJoZWFkIiwiYmFzZSIsImNyZWF0ZUFyZ3MiLCJ1cGRhdGVQciIsIl91cGRhdGVQciIsImVkaXRQciIsIl9lZGl0UHIiLCJlZGl0QXJncyIsInJlYWRSZXBsaWVzRnJvbVN0ZGluIiwiX3JlYWRSZXBsaWVzRnJvbVN0ZGluIiwibm9ybWFsaXplZFJlcGxpZXMiLCJ0aHJlYWRJZCIsInBhcnNlUmVwbHlJbnB1dCIsInJlcGxpZXMiLCJwYWdpbmF0ZVJldmlld1RocmVhZHMiLCJfcGFnaW5hdGVSZXZpZXdUaHJlYWRzIiwib25UaHJlYWQiLCJfeWllbGQkZ3JhcGhxbCRkYXRhIiwiX3Jldmlld1RocmVhZHMkcGFnZUluIiwicmV2aWV3VGhyZWFkcyIsInRocmVhZCIsInVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMiLCJfdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyIsImlkcyIsImlzUmVzb2x2ZWQiLCJpZCIsInVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzIiwiX3VucmVzb2x2ZWRSZXZpZXdUaHJlYWRzIiwidGhyZWFkcyIsIl9wYWdlSW5mbyRlbmRDdXJzb3IiLCJfeWllbGQkZ3JhcGhxbCRkYXRhMiIsIl9wYWdlSW5mbyRlbmRDdXJzb3IyIiwiY29tbWVudENvbm5lY3Rpb24iLCJfdDYiLCJfdDciLCJfdDgiLCJub3JtYWxpemVDb21tZW50QXV0aG9yIiwibm9kZSIsImlzT3V0ZGF0ZWQiLCJwYXRoIiwib3JpZ2luYWxMaW5lIiwic3RhcnRMaW5lIiwib3JpZ2luYWxTdGFydExpbmUiLCJsaXN0UHJSZXZpZXdUaHJlYWRzIiwiX2xpc3RQclJldmlld1RocmVhZHMiLCJfdDkiLCJfdDAiLCJ1bnJlc29sdmVkX3RocmVhZHMiLCJyZXNvbHZlUHJSZXZpZXdUaHJlYWRzIiwiX3Jlc29sdmVQclJldmlld1RocmVhZHMiLCJ1bnJlc29sdmVkSWRzIiwicmVzb2x2ZWRUaHJlYWRJZHMiLCJfc3RlcDIkdmFsdWUiLCJpbmRleCIsIl9zdGVwMiR2YWx1ZSQiLCJfdDEiLCJfdDEwIiwiX3QxMSIsImhhcyIsInJlc29sdmVSZXZpZXdUaHJlYWQiLCJyZXNvbHZlZF90aHJlYWRfaWRzIiwicGFyc2VkIiwiX3R5cGVvZiIsImV2ZXJ5IiwicmVwbHkiLCJpc1JlcGx5SW5wdXQiLCJidWlsZFBsYW5Qcm9tcHQiLCJfYnVpbGRQbGFuUHJvbXB0IiwiaXNzdWVZYW1sIiwiYnVpbGRNZXJnZUJhc2VDb21tYW5kIiwic2hlbGxRdW90ZSIsInJlcGxhY2VBbGwiLCJidWlsZFJldmlld1Byb21wdCIsIl9idWlsZFJldmlld1Byb21wdCIsIm1lcmdlQmFzZUNvbW1hbmQiLCJwckNvbnRleHQiLCJidWlsZFByQ29udGV4dEluc3RydWN0aW9ucyIsImJ1aWxkU2NyZWVuc2hvdFByb21wdCIsImluaXRpYWxVcmwiLCJwYWdlTmFtZSIsInNjcmVlbnNob3REZXNjcmlwdGlvbiIsInNhbml0aXplZERlc2NyaXB0aW9uIiwiYnVpbGRTaW1wbGlmeVByb21wdCIsIl9idWlsZFNpbXBsaWZ5UHJvbXB0IiwiaW5zdGFsbFBhY2tlZFNraWxscyIsIl9pbnN0YWxsUGFja2VkU2tpbGxzIiwiZmlsZVVSTFRvUGF0aCIsIlVSTCIsInByb2dyYW0iLCJDb21tYW5kIiwiYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCIsImRlc2NyaXB0aW9uIiwiYWxsb3dFeGNlc3NBcmd1bWVudHMiLCJhcmd1bWVudE5hbWUiLCJhcmd1bWVudCIsImFyZ3VtZW50RGVzY3JpcHRpb24iLCJhZGRPcHRpb24iLCJPcHRpb24iLCJvcHRpb25EZXNjcmlwdGlvbiIsImNob2ljZXMiLCJtYWtlT3B0aW9uTWFuZGF0b3J5IiwiYWN0aW9uIiwiX2xlbiIsIl9rZXkiLCJfcmVmMTAiLCJhcmd1bWVudE9yT3B0aW9ucyIsIm1heWJlT3B0aW9ucyIsIl9hcmdzMCIsImFkZEFnZW50Q29tbWFuZCIsImNvbmZpZ09yUnVuIiwiX2NhbGxlZTEwIiwiX2NvbnRleHQxMCIsIl9jYWxsZWUxIiwiX2NvbnRleHQxIiwic2hvd0hlbHBBZnRlckVycm9yIiwibW9kZSIsImNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2UiLCJpc3N1ZVJlZmVyZW5jZSIsInByUmVmZXJlbmNlIiwicGFyc2VBc3luYyIsImFyZ3YiXSwibWFwcGluZ3MiOiI7OzttekhBZ0JPLElBS0RBLEVBQTBCLENBQUMsU0FBVSxVQUFXLFVBQ2hEQyxFQUFrQixJQUFJQyxJQUN4QkMsR0FBMkIsRUFJL0IsU0FBc0JDLEVBQXNCQyxFQUFBQyxHQUFBLE9BQUFDLEVBQUFDLE1BQUFDLEtBQUFDLFVBQUEsQ0FrQzNDLFNBQUFILElBQUEsT0FBQUEsRUFBQUksRUFBQUMsSUFBQUMsRUFsQ00sU0FBQUMsRUFBc0NDLEVBQW1CQyxHQUEwQixJQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBLE9BQUFmLElBQUFnQixFQUFBLFNBQUFDLEdBQUEsY0FBQUEsRUFBQUMsRUFBQUQsRUFBQUUsR0FBQSxLQUFBLEVBTUssWUFOTCxJQUExQmYsSUFBQUEsRUFBNkIsQ0FBQSxHQUNyRkUsRUFBT2MsRUFBZ0IsT0FBWGYsRUFBQ0YsRUFBUSxJQUFFRSxFQUFJLEdBQUlGLEVBQVFrQixNQUFNLEdBQUksQ0FDckRDLFVBQVUsRUFDVkMsTUFBTyxDQUFDLFNBQVUsT0FBUSxVQUV0QmhCLEVBQWlCaUIsRUFBcUJsQixFQUFNRixFQUFRcUIsV0FDcERqQixFQUFtQmtCLEVBQW1CdEIsRUFBUXVCLFlBQWF2QixFQUFRd0IscUJBQW9CWCxFQUFBRSxFQUFBLEVBQ2pFVSxFQUFvQnpCLEVBQVEwQixhQUFZLEtBQUEsRUFBakQsT0FBYnJCLEVBQWFRLEVBQUFjLEVBQUFkLEVBQUFDLEVBQUEsRUFBQUQsRUFBQUUsRUFBQSxFQUd3QmEsUUFBUUMsSUFBSSxDQUNuREMsRUFBYTVCLEVBQUtNLE9BQVEsU0FBQ3VCLEdBQUssT0FBSzFCLEVBQWMyQixNQUFNRCxFQUFNLEdBQy9ERCxFQUFhNUIsRUFBS08sT0FBUSxTQUFDc0IsR0FBSyxPQUFLMUIsRUFBYzJCLE1BQU1ELEVBQU0sR0FDL0QsSUFBSUgsUUFBZ0IsU0FBQ0ssRUFBU0MsR0FDNUJoQyxFQUFLaUMsS0FBSyxRQUFTRCxHQUNuQmhDLEVBQUtpQyxLQUFLLFFBQVMsU0FBQ0MsR0FBSSxPQUFLSCxRQUFRRyxFQUFBQSxFQUFRLEVBQUUsRUFDakQsS0FDQSxLQUFBLEVBUDZCLEdBTzdCOUIsRUFBQU8sRUFBQWMsRUFBQXBCLEVBQUE4QixFQUFBL0IsRUFBQSxHQVBLRSxFQUFNRCxFQUFBLEdBQUVFLEVBQU1GLEVBQUEsR0FBRUcsRUFBUUgsRUFBQSxJQVMzQkosRUFBZW1DLFdBQVUsQ0FBQXpCLEVBQUFFLEVBQUEsRUFBQSxLQUFBLENBQUEsTUFDckIsSUFBSXdCLE1BQU1DLEVBQW1CLEdBQUFDLE9BQUlqQyxHQUFNaUMsT0FBR2hDLEdBQVVOLEVBQWVrQixVQUFXdEIsSUFBUyxLQUFBLEVBQUEsR0FHOUUsSUFBYlcsRUFBYyxDQUFBRyxFQUFBRSxFQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUFGLEVBQUE2QixFQUFBLEVBQ1RsQyxHQUFNLEtBQUEsRUFHa0IsTUFBM0JHLEtBQU04QixPQUFNakMsR0FBTWlDLE9BQUdoQyxHQUNyQixJQUFJOEIsTUFBTTVCLHNCQUFNOEIsT0FBdUIxQyxFQUFRNEMsS0FBSyxPQUFPLEtBQUEsRUFBQSxPQUFBOUIsRUFBQUMsRUFBQSxFQUFBRCxFQUFBRSxFQUFBLEVBRTNEVixFQUFjdUMsUUFBTyxLQUFBLEVBRVIsT0FEbkJ6QyxFQUFlMEMsUUFDZnpDLElBQW1CUyxFQUFBaUMsRUFBQSxHQUFBLEtBQUEsRUFBQSxPQUFBakMsRUFBQTZCLEVBQUEsR0FBQSxFQUFBNUMsRUFBQSxLQUFBLENBQUEsQ0FBQSxHQUFBLEVBQUEsSUFBQSxJQUV0QlAsRUFBQUMsTUFBQUMsS0FBQUMsVUFBQSxDQUVNLFNBQVM4QyxFQUFvQjdCLEVBQWdCVSxFQUFtQnRCLEdBQ3JFLElBQU1nRCxFQUFPLDJCQUFBTixPQUlSLFNBQXdCTyxHQUM3QixHQUFJQSxFQUFZLE1BQXdCLEVBQ3RDLE1BQUEsR0FBQVAsT0FBVU8sRUFBWSxLQUFtQixLQUUzQyxHQUFJQSxFQUFZLEtBQW1CLEVBQ2pDLE1BQUEsR0FBQVAsT0FBVU8sRUFBWSxJQUFjLEtBRXRDLEdBQUlBLEVBQWUsS0FBUyxFQUMxQixNQUFBLEdBQUFQLE9BQVVPLEVBQWUsSUFBSSxLQUUvQixNQUFBLEdBQUFQLE9BQVVPLEVBQVksS0FDeEIsQ0FmNkNDLENBQWU1QixHQUFVLE1BQUFvQixPQUFLMUMsRUFBUTRDLEtBQUssTUFDdEYsT0FBT2hDLEVBQU91QyxPQUFTLEVBQUMsR0FBQVQsT0FBTTlCLEVBQU0sTUFBQThCLE9BQUtNLEdBQVlBLENBQ3ZELENBZU8sU0FBUzNCLEVBQ2RsQixFQUNBbUIsUUFBUyxJQUFUQSxJQUFBQSxFQWxFd0MsTUFvRXhDLElBQ0k4QixFQURBYixHQUFXLEVBRWZyRCxFQUFnQm1FLElBQUlsRCxHQXVCdEIsV0FDRSxHQUFJZixFQUNGLE9BRUZBLEdBQTJCLEVBQUssSUFFWWtFLEVBRlpDLEVBQUFDLEVBRVh2RSxHQUF1QixJQUFBLElBQUF3RSxFQUFBLFdBQUUsSUFBbkNDLEVBQU1KLEVBQUFLLE1BQ2ZDLFFBQVF4QixLQUFLc0IsRUFBUSxXQUFNLElBQ1NHLEVBRFRDLEVBQUFOLEVBQ050RSxHQUFlLElBQWxDLElBQUE0RSxFQUFBQyxNQUFBRixFQUFBQyxFQUFBOUMsS0FBQWdELE1BQW9DLENBQ2xDQyxFQURhSixFQUFBRixNQUNLRCxFQUNwQixDQUFDLENBQUEsTUFBQVEsR0FBQUosRUFBQUssRUFBQUQsRUFBQSxDQUFBLFFBQUFKLEVBQUFmLEdBQUEsQ0FDRGEsUUFBUVEsS0FBSyxJQUtuQixTQUFzQlYsR0FDcEIsT0FBUUEsR0FDTixJQUFLLFNBQ0gsT0FBTyxFQUNULElBQUssVUFDSCxPQUFPLEdBQ1QsSUFBSyxTQUNILE9BQU8sRUFFYixDQWR5QlcsQ0FBYVgsR0FDbEMsRUFDRixFQVBBLElBQUFILEVBQUFRLE1BQUFULEVBQUFDLEVBQUF2QyxLQUFBZ0QsTUFBQVAsR0FPQyxDQUFBLE1BQUFTLEdBQUFYLEVBQUFZLEVBQUFELEVBQUEsQ0FBQSxRQUFBWCxFQUFBUixHQUFBLENBQ0gsQ0FwQ0V1QixHQUNBLElBQU1DLEVBQVVDLFdBQVcsV0FDekJqQyxHQUFXLEVBQ1gwQixFQUFZOUQsRUFBTSxZQUNsQmlELEVBQWlCb0IsV0FBVyxXQUFBLE9BQU1QLEVBQVk5RCxFQUFNLFVBQVUsRUF6RXBDLE1BMEVYc0UsT0FDakIsRUFBR25ELEdBR0gsT0FGQWlELEVBQVFFLFFBRUQsQ0FDTDNCLE1BQU8sV0FDTDRCLGFBQWFILEdBQ1RuQixHQUNGc0IsYUFBYXRCLEdBRWZsRSxFQUFlLE9BQVFpQixFQUN6QixFQUNBb0MsU0FBVSxXQUFGLE9BQVFBLENBQVEsRUFDeEJqQixVQUFBQSxFQUVKLENBNkJBLFNBQVMyQyxFQUFZOUQsRUFBdUJ1RCxHQUMxQyxHQUFJdkQsRUFBS3dFLEtBQU94RSxFQUFLd0UsSUFBTSxFQUN6QixJQUVFLFlBREFmLFFBQVFnQixNQUFNekUsRUFBS3dFLElBQUtqQixFQUUxQixDQUFFLE1BQUFtQixHQUNBLENBR0oxRSxFQUFLeUUsS0FBS2xCLEVBQ1osQ0FFQSxTQUFzQjNCLEVBQVkrQyxFQUFBQyxHQUFBLE9BQUFDLEVBQUF2RixNQUFBQyxLQUFBQyxVQUFBLENBcUJqQyxTQUFBcUYsSUFBQSxPQUFBQSxFQUFBcEYsRUFBQUMsSUFBQUMsRUFyQk0sU0FBQW1GLEVBQ0xDLEVBQ0FDLEdBQWlDLElBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUExRCxFQUFBMkQsRUFBQUMsRUFBQUMsRUFBQSxPQUFBaEcsSUFBQWdCLEVBQUEsU0FBQWlGLEdBQUEsY0FBQUEsRUFBQS9FLEVBQUErRSxFQUFBOUUsR0FBQSxLQUFBLEVBQUEsR0FFNUJrRSxFQUFNLENBQUFZLEVBQUE5RSxFQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUE4RSxFQUFBbkQsRUFBQSxFQUNGLElBQUUsS0FBQSxFQUdMeUMsRUFBbUIsR0FDbkJDLEVBQVUsSUFBSVUsWUFBYVQsR0FBQSxFQUFBQyxHQUFBLEVBQUFPLEVBQUEvRSxFQUFBLEVBQUEwRSxFQUFBTyxFQUNQZCxHQUFNLEtBQUEsRUFBQSxPQUFBWSxFQUFBOUUsRUFBQSxFQUFBeUUsRUFBQVEsT0FBQSxLQUFBLEVBQUEsS0FBQVgsSUFBQUksRUFBQUksRUFBQWxFLEdBQUFvQyxNQUFBLENBQUE4QixFQUFBOUUsRUFBQSxFQUFBLEtBQUEsQ0FBZmdCLEVBQUswRCxFQUFBL0IsTUFDZGdDLEVBQTZCLGlCQUFWM0QsRUFBcUJBLEVBQVFxRCxFQUFRYSxPQUFPLElBQUlDLFdBQVduRSxHQUFRLENBQUVrRCxRQUFRLElBQ3RHRSxFQUFPZ0IsS0FBS1QsR0FDTCxNQUFQUixHQUFBQSxFQUFVUSxHQUFXLEtBQUEsRUFBQUwsR0FBQSxFQUFBUSxFQUFBOUUsRUFBQSxFQUFBLE1BQUEsS0FBQSxFQUFBOEUsRUFBQTlFLEVBQUEsRUFBQSxNQUFBLEtBQUEsRUFBQThFLEVBQUEvRSxFQUFBLEVBQUE4RSxFQUFBQyxFQUFBbEUsRUFBQTJELEdBQUEsRUFBQUMsRUFBQUssRUFBQSxLQUFBLEVBQUEsR0FBQUMsRUFBQS9FLEVBQUEsRUFBQStFLEVBQUEvRSxFQUFBLEdBQUF1RSxHQUFBLE1BQUFHLEVBQUEsT0FBQSxDQUFBSyxFQUFBOUUsRUFBQSxHQUFBLEtBQUEsQ0FBQSxPQUFBOEUsRUFBQTlFLEVBQUEsR0FBQXlFLEVBQUEsU0FBQSxLQUFBLEdBQUEsR0FBQUssRUFBQS9FLEVBQUEsSUFBQXdFLEVBQUEsQ0FBQU8sRUFBQTlFLEVBQUEsR0FBQSxLQUFBLENBQUEsTUFBQXdFLEVBQUEsS0FBQSxHQUFBLE9BQUFNLEVBQUEvQyxFQUFBLElBQUEsS0FBQSxHQUFBLE9BQUErQyxFQUFBL0MsRUFBQSxHQUFBLEtBQUEsR0FNdEIsT0FKSzZDLEVBQWFQLEVBQVFhLFlBRXpCZCxFQUFPZ0IsS0FBS1IsR0FDTCxNQUFQVCxHQUFBQSxFQUFVUyxJQUNYRSxFQUFBbkQsRUFBQSxFQUNNeUMsRUFBT3hDLEtBQUssS0FBRyxFQUFBcUMsRUFBQSxLQUFBLENBQUEsQ0FBQSxFQUFBLENBQUEsR0FBQSxJQUFBLENBQUEsRUFBQSxFQUFBLEVBQUEsS0FBQSxLQUN2QnhGLE1BQUFDLEtBQUFDLFVBQUEsQ0FFTSxTQUFTNEIsRUFDZEMsRUFDQUMsRUFDQTRFLEdBRUEsUUFIbUIsSUFBbkI1RSxJQUFBQSxFQTlKMkMsU0ErSmQsSUFBN0I0RSxJQUFBQSxFQUFnQyxTQUFDckQsR0FBTyxPQUFLWSxRQUFRbEQsT0FBT3VCLE1BQU1lLEVBQVEsSUFFckV4QixFQUNILE9BQU8sV0FBTyxFQUdoQixJQUFJOEUsRUFBVyxFQUNUQyxFQUFRQyxZQUFZLFdBQ3hCSCxFQUFjLE1BQ2RDLEdBQVksSUFwS2EsS0FxS2VBLEVBdktMLEdBdUttRCxHQUVwRkQsRUFBYSxJQUFBM0QsT0FBSzRELGFBRXRCLEVBQXlCLElBQXRCN0UsR0FJSCxPQUZBNEUsRUFBYSxHQUFBM0QsT0FBSWxCLE9BQVdrQixPQXRLYSxxREFzS2tCLE9BRXBELFdBQ0wrRCxjQUFjRixHQUNkRixFQUFjLEtBQ2hCLENBQ0YsQ0FBQyxTQU9jM0UsRUFBbUJnRixHQUFBLE9BQUFDLEVBQUFsSCxNQUFBQyxLQUFBQyxVQUFBLENBQUEsU0FBQWdILElBb0NqQyxPQXBDaUNBLEVBQUEvRyxFQUFBQyxJQUFBQyxFQUFsQyxTQUFBOEcsRUFBbUNqRixHQUErQixJQUFBa0YsRUFBQTNCLEVBQUE0QixFQUFBLE9BQUFqSCxJQUFBZ0IsRUFBQSxTQUFBa0csR0FBQSxjQUFBQSxFQUFBaEcsRUFBQWdHLEVBQUEvRixHQUFBLEtBQUEsRUFBQSxHQUMzRFcsRUFBVyxDQUFBb0YsRUFBQS9GLEVBQUEsRUFBQSxLQUFBLENBQUEsT0FBQStGLEVBQUFwRSxFQUFBLEVBQ1AsQ0FDTFYsTUFBTyxXQUFPLEVBQ2RZLE1BQUssV0FBQSxJQUFBbUUsRUFBQXBILEVBQUFDLElBQUFDLEVBQUUsU0FBQW1ILElBQUEsT0FBQXBILElBQUFnQixFQUFBLFNBQUFxRyxHQUFBLFVBQUEsSUFBQUEsRUFBQWxHLEVBQUEsT0FBQWtHLEVBQUF2RSxFQUFBLEVBQUEsRUFBQXNFLEVBQUEsSUFBRixPQUFnQixXQUFoQixPQUFBRCxFQUFBdkgsTUFBQUMsS0FBQUMsVUFBQSxDQUFBLENBQUEsS0FDTixLQUFBLEVBS0YsT0FGS2tILEVBQU8sU0FBQ00sR0FDWnZELFFBQVFsRCxPQUFPdUIsTUFBSywyQ0FBQVMsT0FBNENmLEVBQVcsTUFBQWUsT0FBSzBFLE9BQU9ELFNBQ3pGLEVBQUNKLEVBQUFoRyxFQUFBLEVBQUFnRyxFQUFBL0YsRUFBQSxFQUdPcUcsRUFBTUMsRUFBUTNGLEdBQWMsQ0FBRTRGLFdBQVcsSUFBTyxLQUFBLEVBRzdCLE9BRm5CckMsRUFBU3NDLEVBQWtCN0YsRUFBYSxDQUFFOEYsTUFBTyxPQUVoREMsR0FBRyxRQUFTYixHQUFNRSxFQUFBcEUsRUFBQSxFQUVsQixDQUNMVixNQUFPLFNBQUNELEdBQ0ZrRCxFQUFPeUMsVUFDVHpDLEVBQU9qRCxNQUFNRCxFQUVqQixFQUNBYSxNQUFLLFdBQUEsSUFBQStFLEVBQUFoSSxFQUFBQyxJQUFBQyxFQUFFLFNBQUErSCxJQUFBLE9BQUFoSSxJQUFBZ0IsRUFBQSxTQUFBaUgsR0FBQSxjQUFBQSxFQUFBOUcsR0FBQSxLQUFBLEVBQUEsT0FBQThHLEVBQUE5RyxFQUFBLEVBQ0MsSUFBSWEsUUFBYyxTQUFDSyxHQUN2QmdELEVBQU82QyxJQUFJLFdBQUEsT0FBTTdGLEdBQVMsRUFDNUIsR0FBRSxLQUFBLEVBQUEsT0FBQTRGLEVBQUFuRixFQUFBLEVBQUFtRixFQUFBbEcsR0FBQSxFQUFBaUcsRUFBQSxJQUhDLE9BR0QsV0FIQyxPQUFBRCxFQUFBbkksTUFBQUMsS0FBQUMsVUFBQSxDQUFBLENBQUEsS0FJTixLQUFBLEVBRVcsT0FGWG9ILEVBQUFoRyxFQUFBLEVBQUErRixFQUFBQyxFQUFBbkYsRUFFRGlGLEVBQUlDLEdBQVFDLEVBQUFwRSxFQUFBLEVBQ0wsQ0FDTFYsTUFBTyxXQUFPLEVBQ2RZLE1BQUssV0FBQSxJQUFBbUYsRUFBQXBJLEVBQUFDLElBQUFDLEVBQUUsU0FBQW1JLElBQUEsT0FBQXBJLElBQUFnQixFQUFBLFNBQUFxSCxHQUFBLFVBQUEsSUFBQUEsRUFBQWxILEVBQUEsT0FBQWtILEVBQUF2RixFQUFBLEVBQUEsRUFBQXNGLEVBQUEsSUFBRixPQUFnQixXQUFoQixPQUFBRCxFQUFBdkksTUFBQUMsS0FBQUMsVUFBQSxDQUFBLENBQUEsS0FDTixFQUFBaUgsRUFBQSxLQUFBLENBQUEsQ0FBQSxFQUFBLElBQUEsSUFFSkQsRUFBQWxILE1BQUFDLEtBQUFDLFVBQUEsQ0NoUE0sSUFDTXdJLEVBQXFCLHVCQ0VyQkMsRUFBYyxDQUFDLFFBQVMsU0FBVSxVQUN6Q0MsRUFBcUMsSUFBSUMsT0FBTSxNQUFBNUYsT0RKcEIsc0JDSTRDLE9BQU8sS0FZcEYsU0FBc0I2RixFQUFtQmpKLEVBQUFDLEdBQUEsT0FBQWlKLEVBQUEvSSxNQUFBQyxLQUFBQyxVQUFBLENBd0J4QyxTQUFBNkksSUFBQSxPQUFBQSxFQUFBNUksRUFBQUMsSUFBQUMsRUF4Qk0sU0FBQW1GLEVBQ0x3RCxFQUNBeEksR0FBK0IsSUFBQXlJLEVBQUFySSxFQUFBc0ksRUFBQSxPQUFBOUksSUFBQWdCLEVBQUEsU0FBQWlGLEdBQUEsY0FBQUEsRUFBQS9FLEVBQUErRSxFQUFBOUUsR0FBQSxLQUFBLEVBQStCLFlBQS9CLElBQS9CZixJQUFBQSxFQUFrQyxDQUFFMkksZUFBZ0IsV0FBVTlDLEVBQUE5RSxFQUFBLEVBRWpDeUgsRUFBTSxLQUFBLEVBQ2dELE9BRDdFQyxFQUFjNUMsRUFBQWxFLEVBQ2R2QixFQUFtQmtCLEVBQW1Cc0gsRUFBZTVJLEVBQVEySSxpQkFBZ0I5QyxFQUFBL0UsRUFBQSxFQUFBK0UsRUFBQTlFLEVBQUEsRUFJekVhLFFBQVFDLElBQ1pzRyxFQUFZVSxJQUFHbEosRUFBQUMsSUFBQUMsRUFBQyxTQUFBQyxFQUFPZ0osR0FBSyxJQUFBQyxFQUFBQyxFQUFBQyxFQUFBdEksRUFBQSxPQUFBZixJQUFBZ0IsRUFBQSxTQUFBQyxHQUFBLGNBQUFBLEVBQUFFLEdBQUEsS0FBQSxFQUFBLE9BQUFGLEVBQUFFLEVBQUEsRUFFbEJtSSxFQUFnQkosRUFBT0wsRUFBZ0IsQ0FDM0NsSCxhQUFhLElBQ2IsS0FBQSxFQUNFLE9BSkFaLEVBQU1FLEVBQUFjLEVBSVZ3SCxPQUFJdEksRUFBQTZCLEVBQUEsU0FBQXFHLEVBQ2tCLE9BRGxCQyxHQUNDQyxFQUFBakosR0FBUW9KLGdCQUFTLEVBQWpCSixFQUFBSyxLQUFBSixFQUFvQkgsRUFBT25JLElBQU9vSSxFQUFBLE1BQUF0RyxPQUFVNkcsRUFBaUJSLEdBQU0sUUFBQXJHLE9BQU85QixJQUFNLEVBQUFiLEVBQUEsTUFFMUYsS0FBQSxFQUN3RCxPQVhyRDRJLEVBQU83QyxFQUFBbEUsRUFXWDRILE9BQU8sU0FBQzVJLEdBQU0sWUFBa0M2SSxJQUFYN0ksQ0FBb0IsR0FBQWtGLEVBQUFuRCxFQUFBLEVBQ3BEZ0csRUFBUXhGLE9BQVMsRUFBSXdGLEVBQVEvRixLQUFLLFFBQVV1RixHQUFrQixLQUFBLEVBRWxELE9BRmtEckMsRUFBQS9FLEVBQUEsRUFFckVWLElBQW1CeUYsRUFBQS9DLEVBQUEsR0FBQSxLQUFBLEVBQUEsT0FBQStDLEVBQUFuRCxFQUFBLEdBQUEsRUFBQXNDLEVBQUEsS0FBQSxDQUFBLENBQUEsR0FBQSxFQUFBLElBQUEsS0FFdEJ4RixNQUFBQyxLQUFBQyxVQUFBLENBRUQsU0FBc0J3SixFQUFlckUsRUFBQUMsRUFBQTJCLEdBQUEsT0FBQWdELEVBQUFqSyxNQUFBQyxLQUFBQyxVQUFBLENBU3BDLFNBQUErSixJQUFBLE9BQUFBLEVBQUE5SixFQUFBQyxJQUFBQyxFQVRNLFNBQUFtSCxFQUNMOEIsRUFDQU4sRUFDQXhJLEdBQTRCLElBQUE0RixFQUFBaUIsRUFBQTZDLEVBQUEsT0FBQTlKLElBQUFnQixFQUFBLFNBQUFxRyxHQUFBLGNBQUFBLEVBQUFsRyxHQUFBLEtBQUEsRUFFMEIsWUFGMUIsSUFBNUJmLElBQUFBLEVBQStCLENBQUEsR0FBRTRGLEVBRTFCeEcsRUFBc0J5SCxFQUFDOEMsRUFBa0JELEVBQUNaLEVBQUs3QixFQUFBbEcsRUFBQSxFQUFReUgsRUFBTSxLQUFBLEVBQUEsT0FBQXZCLEVBQUF2RSxFQUFBLEVBQUFrRCxFQUFBaUIsRUFBQTZDLEVBQUF6QyxFQUFBdEYsR0FBRyxDQUNyRUQsWUFBYWtJLEVBQWlCZCxHQUM5QnZILGlCQUFxQ2lJLElBQXhCeEosRUFBUXVCLFlBQTRCcUgsRUFBZVUsRUFBaUJSLElBQVU5SSxFQUFRdUIsZUFDcEcsRUFBQXlGLEVBQUEsS0FDRnhILE1BQUFDLEtBQUFDLFVBQUEsQ0FFRCxTQUFTaUssRUFBbUJiLEVBQWtCTixHQUM1QyxPQUFRTSxHQUNOLElBQUssUUFDSCxNQUFPLENBQUMsTUFBTyxRQUFTLHVCQUF3QixPQUFRLDZDQUE4Q04sR0FDeEcsSUFBSyxTQUNILE1BQU8sQ0FBQyxTQUFVLGlDQUFrQyxLQUFNQSxHQUM1RCxJQUFLLFNBQ0gsTUFBTyxDQUNMLE1BQ0EsUUFDQSw2QkFDQSxrQkFDQSxPQUNBLFVBQ0EseUJBQ0EsS0FDQUEsR0FHUixDQUVPLFNBQVNjLEVBQWlCUixHQUMvQixPQUFRQSxHQUNOLElBQUssUUFDSCxNQUFPLFFBQ1QsSUFBSyxTQUNILE1BQU8sY0FDVCxJQUFLLFNBQ0gsTUFBTyxhQUViLENBTUEsU0FBU0YsRUFBZWlCLEdBQ3RCLE1BQUEsZUFBQXBILE9BQXNCb0gsRUFBTSxjQUM5QixDQUVBLFNBQVNELEVBQWlCZCxHQUN4QixNQUFBLFFBQUFyRyxPQUFlcUcsRUFBSyxLQUFBckcsUUFJZHFILEVBQU0sSUFBSUMsS0FPQUMsRUFBQTNILEVBTjJCLENBQ3pDeUgsRUFBSUcsV0FBYSxFQUNqQkgsRUFBSUksVUFDSkosRUFBSUssV0FDSkwsRUFBSU0sYUFDSk4sRUFBSU8sY0FDSnhCLElBQUl5QixHQUFVLEdBTlRDLEVBQUtQLEVBQUEsR0FBRVEsRUFBR1IsRUFBQSxHQUFFUyxFQUFJVCxFQUFBLEdBQUVVLEVBQU1WLEVBQUEsR0FBRVcsRUFBTVgsRUFBQSxHQU92QyxHQUFBdkgsT0FBVThILEdBQUs5SCxPQUFHK0gsRUFBRyxLQUFBL0gsT0FBSWdJLEdBQUloSSxPQUFHaUksR0FBTWpJLE9BQUdrSSxJQVpJLFFBRy9DLElBQ1FiLEVBT1VFLEVBTlRPLEVBQU9DLEVBQUtDLEVBQU1DLEVBQVFDLENBSm5DLENBY0EsU0FBU0wsRUFBVTVHLEdBQ2pCLE9BQU9BLEVBQU1rSCxXQUFXQyxTQUFTLEVBQUcsSUFDdEMsQ0MzR08sSUFBTUMsR0FBdUIsQ0FBRUMsV0FBWSxVQUFXQyxVQUFXLEdDaUNqRSxTQUFTQyxHQUFTbEksR0FDdkJtSSxFQUFjbEosTUFBSyxHQUFBUyxPQUFJTSxRQUN6QixDQUVPLFNBQVNvSSxHQUFjcEksRUFBaUJYLFFBQUksSUFBSkEsSUFBQUEsRUFBTyxHQUNwRDhJLEVBQWNsSixNQUFLLEdBQUFTLE9BQUlNLFNBQ3ZCWSxRQUFRUSxLQUFLL0IsRUFDZixDQUVBLFNBQXNCZ0osS0FBYSxPQUFBQyxHQUFBN0wsTUFBQUMsS0FBQUMsVUFBQSxDQUtsQyxTQUFBMkwsS0FBQSxPQUFBQSxHQUFBMUwsRUFBQUMsSUFBQUMsRUFMTSxTQUFBQyxJQUFBLE9BQUFGLElBQUFnQixFQUFBLFNBQUFDLEdBQUEsY0FBQUEsRUFBQUUsR0FBQSxLQUFBLEVBQUEsSUFDRHVLLEVBQWFDLE1BQUssQ0FBQTFLLEVBQUFFLEVBQUEsRUFBQSxLQUFBLENBQUEsT0FBQUYsRUFBQTZCLEVBQUEsRUFDYixJQUFFLEtBQUEsRUFBQSxPQUFBN0IsRUFBQUUsRUFBQSxFQUVFZSxFQUFhd0osR0FBYSxLQUFBLEVBQUEsT0FBQXpLLEVBQUE2QixFQUFBLEVBQUE3QixFQUFBYyxHQUFBLEVBQUE3QixFQUFBLEtBQ3hDTixNQUFBQyxLQUFBQyxVQUFBLENBRUQsU0FBc0I4TCxHQUFxQm5NLEdBQUEsT0FBQW9NLEdBQUFqTSxNQUFBQyxLQUFBQyxVQUFBLENBTTFDLFNBQUErTCxLQUFBLE9BQUFBLEdBQUE5TCxFQUFBQyxJQUFBQyxFQU5NLFNBQUFtRixFQUFxQzBHLEdBQVksSUFBQUMsRUFBQSxPQUFBL0wsSUFBQWdCLEVBQUEsU0FBQWlGLEdBQUEsY0FBQUEsRUFBQTlFLEdBQUEsS0FBQSxFQUFzQyxZQUF0QyxJQUFaMkssSUFBQUEsRUFBZSxxQ0FBbUM3RixFQUFBOUUsRUFBQSxFQUN4RXFLLEtBQWUsS0FBQSxFQUF4QixNQUFMTyxFQUFLOUYsRUFBQWxFLEdBQ0R1QixPQUFTLEdBQUMsQ0FBQTJDLEVBQUE5RSxFQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUE4RSxFQUFBbkQsRUFBQSxFQUNYaUosR0FBSyxLQUFBLEVBRWRSLEdBQWNPLEVBQWMsR0FBRyxLQUFBLEVBQUEsT0FBQTdGLEVBQUFuRCxFQUFBLEdBQUEsRUFBQXNDLEVBQUEsS0FDaEN4RixNQUFBQyxLQUFBQyxVQUFBLENBRUQsU0FBc0JrTSxHQUFVdE0sRUFBQXVGLEdBQUEsT0FBQWdILEdBQUFyTSxNQUFBQyxLQUFBQyxVQUFBLENBbUQvQixTQUFBbU0sS0FBQSxPQUFBQSxHQUFBbE0sRUFBQUMsSUFBQUMsRUFuRE0sU0FBQW1ILEVBQTBCakgsRUFBbUJDLEdBQTBCLElBQUE4TCxFQUFBQyxFQUFBdkksRUFBQXdJLEVBQUFDLEVBQUEsT0FBQXJNLElBQUFnQixFQUFBLFNBQUFpSCxHQUFBLGNBQUFBLEVBQUE5RyxHQUFBLEtBQUEsT0FBQSxJQUExQmYsSUFBQUEsRUFBNkIsQ0FBQSxHQUN6RStMLEVBQTJDLE9BQTNCRCxFQUFHOUwsRUFBUStMLGtCQUFnQkQsRUFBSSxHQUFFdEksRUFBQTVELElBQUFDLFdBQUEyRCxJQUFBLElBQUEwSSxFQUFBaE0sRUFBQWlNLEVBQUFDLEVBQUFqTSxFQUFBRyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBLE9BQUFmLElBQUFnQixFQUFBLFNBQUFxRyxHQUFBLGNBQUFBLEVBQUFuRyxFQUFBbUcsRUFBQWxHLEdBQUEsS0FBQSxFQWVsRCxPQVpHYixFQUFPYyxFQUFnQixPQUFYa0wsRUFBQ25NLEVBQVEsSUFBRW1NLEVBQUksR0FBSW5NLEVBQVFrQixNQUFNLEdBQUksQ0FDckRDLFVBQVUsRUFDVkMsTUFBTyxDQUFDLE9BQVEsT0FBUSxVQUd0QmlMLEdBQVEsRUFDTmpNLEVBQWlCaUIsRUFBcUJsQixHQUFLK0csRUFBQW5HLEVBQUEsT0FFckIwSSxJQUF0QnhKLEVBQVFxTSxVQUNWbk0sRUFBS29NLE1BQU14RSxJQUFJOUgsRUFBUXFNLFdBRXZCbk0sRUFBS29NLE1BQU14RSxNQUNaYixFQUFBbEcsRUFBQSxFQUV3Q2EsUUFBUUMsSUFBSSxDQUNuREMsRUFBYTVCLEVBQUtNLFFBQ2xCc0IsRUFBYTVCLEVBQUtPLFFBQ2xCLElBQUltQixRQUFnQixTQUFDSyxFQUFTQyxHQUM1QmhDLEVBQUtpQyxLQUFLLFFBQVNELEdBQ25CaEMsRUFBS2lDLEtBQUssUUFBUyxTQUFDQyxHQUFJLE9BQUtILFFBQVFHLEVBQUFBLEVBQVEsRUFBRSxFQUNqRCxLQUNBLEtBQUEsRUFDK0IsR0FEL0I5QixFQUFBMkcsRUFBQXRGLEVBQUFwQixFQUFBOEIsRUFBQS9CLEVBQUEsR0FQS0UsRUFBTUQsRUFBQSxHQUFFRSxFQUFNRixFQUFBLEdBQUVHLEVBQVFILEVBQUEsR0FRekJJLEtBQU04QixPQUFNakMsR0FBTWlDLE9BQUdoQyxJQUV2Qk4sRUFBZW1DLFdBQVUsQ0FBQTJFLEVBQUFsRyxFQUFBLEVBQUEsS0FBQSxDQUMzQm9MLEVBQWlCM0osRUFBb0I3QixFQUFRUixFQUFla0IsVUFBV3RCLEdBQVNrSCxFQUFBbEcsRUFBQSxFQUFBLE1BQUEsS0FBQSxFQUFBLEdBQzFELElBQWJMLElBQWtCcUwsRUFBaUJRLFNBQVM3TCxHQUFTLENBQUF1RyxFQUFBbEcsRUFBQSxFQUFBLEtBQUEsQ0FBQSxPQUFBa0csRUFBQXZFLEVBQUEsRUFBQSxDQUFBZixFQUN2RGhCLElBQU0sS0FBQSxFQUNKNkwsR0FBcUJ6TSxFQUFTVyxFQUFVQyxJQUFXc0wsRUEzRHRDLEVBNER0QkcsR0FBUSxFQUVSRCxFQUFpQnhMLEdBQU0sbUJBQUE4QixPQUF1QjFDLEVBQVE0QyxLQUFLLE1BQzVELEtBQUEsRUFFc0IsT0FGdEJzRSxFQUFBbkcsRUFBQSxFQUVEWCxFQUFlMEMsUUFBUW9FLEVBQUFuRSxFQUFBLEdBQUEsS0FBQSxFQUFBLElBR3JCc0osRUFBSyxDQUFBbkYsRUFBQWxHLEVBQUEsRUFBQSxLQUFBLENBQ29HLE9BQTNHa0ssR0FBUSxzREFBQXhJLE9BQXVEd0osRUFBTyxRQUFBeEosT0FBT2dLLEVBQXlCLE1BQUt4RixFQUFBbEcsRUFBQSxFQUNyRzJMLEVBckVtQixJQXFFWVQsR0FBUSxLQUFBLEVBQUEsT0FBQWhGLEVBQUF2RSxFQUFBLEVBQUEsR0FBQSxLQUFBLEVBRzNDeUosR0FDRmhCLEdBQWNnQixHQUNmLEtBQUEsRUFBQSxPQUFBbEYsRUFBQXZFLEVBQUEsR0FBQSxFQUFBYyxFQUFBLEtBQUEsQ0FBQSxDQUFBLEdBQUEsRUFBQSxJQUFBLEdBN0NNeUksRUFBVSxFQUFDLEtBQUEsRUFBQSxLQUFFQSxHQTlCTSxHQThCMEIsQ0FBQXBFLEVBQUE5RyxFQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUE4RyxFQUFBOEUsRUFBQUMsRUFBQXBKLEtBQUEsR0FBQSxLQUFBLEVBQUEsR0FBQSxLQUFBd0ksRUFBQW5FLEVBQUFsRyxHQUFBLENBQUFrRyxFQUFBOUcsRUFBQSxFQUFBLEtBQUEsQ0FBQSxPQUFBOEcsRUFBQW5GLEVBQUEsRUFBQSxHQUFBLEtBQUEsRUFBQSxJQUFBc0osRUFBQSxDQUFBbkUsRUFBQTlHLEVBQUEsRUFBQSxLQUFBLENBQUEsT0FBQThHLEVBQUFuRixFQUFBLEVBQUFzSixFQUFBckssR0FBQSxLQUFBLEVBQUVzSyxHQUFXLEVBQUNwRSxFQUFBOUcsRUFBQSxFQUFBLE1BQUEsS0FBQSxFQStDcEVvSyxHQUFhLHdCQUFBMUksT0E3RWUsaUJBNkUrQkEsT0FBYzFDLEVBQVE0QyxLQUFLLE9BQVEsS0FBQSxFQUFBLE9BQUFrRixFQUFBbkYsRUFBQSxHQUFBLEVBQUFzRSxFQUFBLElBQy9GNkUsR0FBQXJNLE1BQUFDLEtBQUFDLFVBQUEsQ0FFRCxTQUFzQm1OLEdBQUUvSCxFQUFBMkIsR0FBQSxPQUFBcUcsR0FBQXROLE1BQUFDLEtBQUFDLFVBQUEsQ0FFdkIsU0FBQW9OLEtBQUEsT0FBQUEsR0FBQW5OLEVBQUFDLElBQUFDLEVBRk0sU0FBQStILEVBQWtCbUYsRUFBZ0JWLEdBQWtCLE9BQUF6TSxJQUFBZ0IsRUFBQSxTQUFBcUgsR0FBQSxjQUFBQSxFQUFBbEgsR0FBQSxLQUFBLEVBQUEsT0FBQWtILEVBQUFsSCxFQUFBLEVBQzVDNkssSUFBWSxNQUFJbkosT0FBQXVLLEVBQUtELElBQU8sQ0FBRVYsVUFBQUEsSUFBWSxLQUFBLEVBQUEsT0FBQXBFLEVBQUF2RixFQUFBLEVBQUF1RixFQUFBdEcsR0FBQSxFQUFBaUcsRUFBQSxLQUN4RHBJLE1BQUFDLEtBQUFDLFVBQUEsQ0FFRCxTQUFzQnVOLEdBQWdCQyxFQUFBQyxFQUFBQyxHQUFBLE9BQUFDLEdBQUE3TixNQUFBQyxLQUFBQyxVQUFBLENBTXJDLFNBQUEyTixLQUFBLE9BQUFBLEdBQUExTixFQUFBQyxJQUFBQyxFQU5NLFNBQUFtSSxFQUNMK0UsRUFDQWhCLEVBQ0FNLEdBQWtCLE9BQUF6TSxJQUFBZ0IsRUFBQSxTQUFBa0csR0FBQSxjQUFBQSxFQUFBL0YsR0FBQSxLQUFBLEVBQUEsT0FBQStGLEVBQUEvRixFQUFBLEVBRUw2SyxJQUFZLE1BQUluSixPQUFBdUssRUFBS0QsSUFBTyxDQUFFVixVQUFBQSxFQUFXTixpQkFBQUEsSUFBbUIsS0FBQSxFQUFBLE9BQUFqRixFQUFBcEUsRUFBQSxFQUFBb0UsRUFBQW5GLEdBQUEsRUFBQXFHLEVBQUEsS0FDMUV4SSxNQUFBQyxLQUFBQyxVQUFBLENBRUQsU0FBc0I0TixLQUFnQixPQUFBQyxHQUFBL04sTUFBQUMsS0FBQUMsVUFBQSxDQU9yQyxTQUFBNk4sS0FBQSxPQUFBQSxHQUFBNU4sRUFBQUMsSUFBQUMsRUFQTSxTQUFBOEcsSUFBQSxJQUFBNkcsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQSxPQUFBaE8sSUFBQWdCLEVBQUEsU0FBQWlOLEdBQUEsY0FBQUEsRUFBQTlNLEdBQUEsS0FBQSxFQUFBLE9BQUE4TSxFQUFBOU0sRUFBQSxFQUN3QjhMLEdBQUcsQ0FBQyxPQUFRLE9BQVEsU0FBVSxnQkFBaUIsT0FBUSxtQkFBa0IsS0FBQSxFQUlyRyxPQUpLVyxFQUFhSyxFQUFBbE0sRUFBcUZ3SCxPQUFJc0UsRUFDdEZELEVBQWNNLE1BQU0sSUFBSyxHQUFFSixFQUFBckwsRUFBQW9MLEVBQUEsR0FBMUNFLEVBQUtELEVBQUEsR0FBRUUsRUFBSUYsRUFBQSxHQUNiQyxHQUFVQyxHQUNiekMsR0FBYyxpREFDZjBDLEVBQUFuTCxFQUFBLEVBQ00sQ0FBQ2lMLEVBQU9DLElBQUssRUFBQWpILEVBQUEsS0FDckJuSCxNQUFBQyxLQUFBQyxVQUFBLENBRUQsU0FBc0JxTyxLQUFlLE9BQUFDLEdBQUF4TyxNQUFBQyxLQUFBQyxVQUFBLENBRXBDLFNBQUFzTyxLQUFBLE9BQUFBLEdBQUFyTyxFQUFBQyxJQUFBQyxFQUZNLFNBQUFvTyxJQUFBLE9BQUFyTyxJQUFBZ0IsRUFBQSxTQUFBc04sR0FBQSxjQUFBQSxFQUFBbk4sR0FBQSxLQUFBLEVBQUEsT0FBQW1OLEVBQUFuTixFQUFBLEVBQ1M4TCxHQUFHLENBQUMsS0FBTSxPQUFRLFNBQVUsU0FBVSxPQUFRLFlBQVcsS0FBQSxFQUFBLE9BQUFxQixFQUFBeEwsRUFBQSxFQUFBd0wsRUFBQXZNLEVBQUV3SCxRQUFJLEVBQUE4RSxFQUFBLEtBQzlFek8sTUFBQUMsS0FBQUMsVUFBQSxDQUVELFNBQXNCeU8sR0FBT0MsRUFBQUMsR0FBQSxPQUFBQyxHQUFBOU8sTUFBQUMsS0FBQUMsVUFBQSxDQW1CNUIsU0FBQTRPLEtBQUEsT0FBQUEsR0FBQTNPLEVBQUFDLElBQUFDLEVBbkJNLFNBQUEwTyxFQUNMQyxFQUNBQyxHQUFpRCxJQUFBMUIsRUFBQTJCLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFuTCxFQUFBb0wsRUFBQUMsRUFBQW5KLEVBQUEsT0FBQWhHLElBQUFnQixFQUFBLFNBQUFvTyxHQUFBLGNBQUFBLEVBQUFqTyxHQUFBLEtBQUEsT0FBQSxJQUFqRDBOLElBQUFBLEVBQW9ELENBQUEsR0FFOUMxQixFQUFPLENBQUMsTUFBTyxVQUFXLEtBQU0sWUFBVzJCLEVBQUEsRUFBQUMsRUFDdEJNLE9BQU9DLFFBQVFULEdBQUssS0FBQSxFQUFBLEtBQUFDLEVBQUFDLEVBQUF6TCxRQUFBLENBQUE4TCxFQUFBak8sRUFBQSxFQUFBLEtBQUEsQ0FBekIsR0FBeUI2TixFQUFBdk0sRUFBQXNNLEVBQUFELEdBQUEsR0FBbkNHLEVBQUdELEVBQUEsUUFDQ3BGLEtBREM5RixFQUFLa0wsRUFBQSxLQUNpQixLQUFWbEwsRUFBWSxDQUFBc0wsRUFBQWpPLEVBQUEsRUFBQSxLQUFBLENBQUEsT0FBQWlPLEVBQUF0TSxFQUFBLEVBQUEsR0FBQSxLQUFBLEVBR3ZDcUssRUFBSzVHLEtBQUssS0FBSSxHQUFBMUQsT0FBS29NLEVBQUcsS0FBQXBNLE9BQUlpQixJQUFTLEtBQUEsRUFBQWdMLElBQUFNLEVBQUFqTyxFQUFBLEVBQUEsTUFBQSxLQUFBLEVBR2hCLE9BSGdCNkUsRUFHcEJ1SixLQUFJSCxFQUFBak8sRUFBQSxFQUFhOEwsR0FBR0UsRUFBTXlCLEdBQU0sS0FBQSxFQUF0QixHQUFyQk0sRUFBUWxKLEVBQVF3SixNQUFLL0YsS0FBQXpELEVBQUFvSixFQUFBck4sR0FDdEIwTixNQUFNQyxRQUFRUixFQUFTUyxRQUFPLENBQUFQLEVBQUFqTyxFQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUFpTyxFQUFBdE0sRUFBQSxFQUMxQm9NLEdBQVEsS0FBQSxFQUdYQyxFQUFnQkQsRUFBU1MsT0FBTzFHLElBQUksU0FBQzNCLEdBQUssSUFBQXNJLEVBQUEsT0FBa0IsT0FBbEJBLEVBQUt0SSxFQUFNbkUsU0FBT3lNLEVBQUksdUJBQXVCLEdBQUU3TSxLQUFLLE1BQ3BHd0ksR0FBYSx1QkFBQTFJLE9BQXdCc00sSUFBaUIsS0FBQSxFQUFBLE9BQUFDLEVBQUF0TSxFQUFBLEdBQUEsRUFBQTZMLEVBQUEsS0FDdkQvTyxNQUFBQyxLQUFBQyxVQUFBLENBRU0sU0FBUytQLEdBQVNDLEdBQ3ZCLE9BQU9DLEVBQWNELEVBQU01RSxHQUM3QixDQUVPLFNBQVM4RSxHQUFZRixHQUMxQixPQUFPUCxLQUFLQyxNQUFNRCxLQUFLVSxVQUFVSCxHQUNuQyxDQU1PLFNBQVNJLEdBQWMvUCxFQUFtQnNNLEdBQTBELElBQUFwTSxFQUFBOFAsRUFBQUMsRUFBQUMsRUFDbkdDLEVBQVNDLFNBQVNsUSxFQUFDRixFQUFRLElBQUVFLEVBQUksR0FBSUYsRUFBUWtCLE1BQU0sR0FBSSxDQUMzRG1QLFNBQVUsT0FDVnpFLE1BQU9VLElBR1QsTUFBTyxDQUNMM0wsU0FBdUIsT0FBZnFQLEVBQUVHLEVBQU9HLFFBQU1OLEVBQUtHLEVBQU9oSixNQUFRLEVBQUksRUFDL0N2RyxPQUFNLEdBQUE4QixPQUFrQixPQUFsQnVOLEVBQUtFLEVBQU8xUCxRQUFNd1AsRUFBSSxJQUFFdk4sT0FBZ0IsT0FBaEJ3TixFQUFHQyxFQUFPelAsUUFBTXdQLEVBQUksSUFFdEQsQ0FFQSxTQUFTekQsR0FBcUJ6TSxFQUFtQlcsRUFBa0JDLEdBQ2pFLE1BQW1CLE9BQWZaLEVBQVEsSUFBNEIsSUFBYlcsR0FJcEIsMEVBQTBFNFAsS0FBSzNQLEVBQ3hGLENDL0tPLElBQU00UCxHQUF1QixZQU12QkMsR0FBMkIsQ0FDdEMsVUFDQSxhQUNBLFlBQ0EsYUFDQSxlQUNBLFFBQ0EsYUFDQSxVQUNBLE9BQ0EsT0FDQSxTQUNBLFlBQ0EsU0FDQSxZQUNBLE1BQ0EsZ0JBd0VJQyxHQUFpQyxrREFDakNDLEdEMkRzRCxJQUFuRFosR0FBYyxDQzNEZSxNRDJETCxjQUFjcFAsU0N6RC9DLFNBQXNCaVEsR0FBaUJ0UixHQUFBLE9BQUF1UixHQUFBcFIsTUFBQUMsS0FBQUMsVUFBQSxDQW9DdEMsU0FBQWtSLEtBQUEsT0FBQUEsR0FBQWpSLEVBQUFDLElBQUFDLEVBcENNLFNBQUFDLEVBQWlDK1EsR0FBaUIsSUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQW5FLEVBQUFvRSxFQUFBQyxFQUFBQyxFQUFBekwsRUFBQSxPQUFBaEcsSUFBQWdCLEVBQUEsU0FBQUMsR0FBQSxjQUFBQSxFQUFBQyxFQUFBRCxFQUFBRSxHQUFBLEtBQUEsRUFPL0IsT0FObEJnTSxFQUFPLENBQUMsS0FBTSxVQUNoQjhELEdBQ0Y5RCxFQUFLNUcsS0FBSzBLLEdBRVo5RCxFQUFLNUcsS0FBSyxTQUFVLDJFQUVoQmdMLEVBQWtCLEdBQUV0USxFQUFBQyxFQUFBLEVBQUFELEVBQUFFLEVBQUEsRUFFSmtNLEdBQWlCRixFQUFNLENBQUMsSUFBRyxLQUFBLEVBQXZDcUUsRUFBR3ZRLEVBQUFjLEVBQ1R3UCxFQUFTQyxFQUFJakksT0FBT2pHLE9BQVMsRUFBS2lNLEtBQUtDLE1BQU1nQyxHQUFtQixHQUFHdlEsRUFBQUUsRUFBQSxFQUFBLE1BQUEsS0FBQSxFQUFBLEdBQUFGLEVBQUFDLEVBQUEsS0FBQThFLEVBQUEvRSxFQUFBYyxhQUU5QzJQLGFBQVcsQ0FBQXpRLEVBQUFFLEVBQUEsRUFBQSxLQUFBLENBQzlCb1EsRUFBUyxHQUFHdFEsRUFBQUUsRUFBQSxFQUFBLE1BQUEsS0FBQSxFQUFBLE1BQUE2RSxFQUFBLEtBQUEsRUFVVixPQUpBeUwsRUFBVUYsRUFBT0ksT0FBK0IsU0FBQ0MsRUFBUUMsR0FBVSxJQUFBQyxFQUFBQyxFQUNqRUMsRUFBcUIsT0FBZkYsRUFBR0QsRUFBTUcsUUFBTUYsRUFBSSxHQUUvQixPQURBRixFQUFPSSxJQUF5QixPQUFmRCxFQUFDSCxFQUFPSSxJQUFPRCxFQUFJLEdBQUssRUFDbENILENBQ1QsRUFBRyxDQUFBLEdBQUczUSxFQUFBNkIsRUFBQSxFQUVDLENBQ0wyTyxRQUFTLENBQ1BRLE1BQU9WLEVBQU9qTyxPQUNkNE8sS0FBa0IsT0FBZGhCLEVBQUVPLEVBQVFTLE1BQUloQixFQUFJLEVBQ3RCaUIsS0FBa0IsT0FBZGhCLEVBQUVNLEVBQVFVLE1BQUloQixFQUFJLEVBQ3RCaUIsUUFBd0IsT0FBakJoQixFQUFFSyxFQUFRVyxTQUFPaEIsRUFBSSxFQUM1QmlCLFNBQTBCLE9BQWxCaEIsRUFBRUksRUFBUVksVUFBUWhCLEVBQUksRUFDOUJpQixPQUFzQixPQUFoQmhCLEVBQUVHLEVBQVFhLFFBQU1oQixFQUFJLEdBRTVCQyxPQUFBQSxJQUNELEVBQUFyUixFQUFBLEtBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxLQUNGTixNQUFBQyxLQUFBQyxVQUFBLENBRUQsU0FBc0J5UyxHQUFrQzdTLEVBQUF1RixFQUFBQyxFQUFBMkIsR0FBQSxPQUFBMkwsR0FBQTVTLE1BQUFDLEtBQUFDLFVBQUEsQ0FvQ3ZELFNBQUEwUyxLQUFBLE9BQUFBLEdBQUF6UyxFQUFBQyxJQUFBQyxFQXBDTSxTQUFBbUYsRUFDTDZMLEVBQ0F3QixFQUNBQyxFQUNBQyxHQUEwQyxJQUFBQyxFQUFBQyxFQUFBclMsRUFBQXNTLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUEsT0FBQWxULElBQUFnQixFQUFBLFNBQUFpRixHQUFBLGNBQUFBLEVBQUEvRSxFQUFBK0UsRUFBQTlFLEdBQUEsS0FBQSxFQUUxQixZQUoyQixJQUEzQ3NSLElBQUFBLEVBQThDVSxTQUMwQixJQUF4RVQsSUFBQUEsRUFBMkUzQixTQUNqQyxJQUExQzRCLElBQUFBLEVBQTZDLFNBQUN4UCxHQUFPLE9BQUttSSxFQUFjbEosTUFBTWUsRUFBUSxHQUVsRnlQLEVBQVcsRUFBQzNNLEVBQUE5RSxFQUFBLEVBQ011UixFQUFrQnpCLEdBQVMsS0FBQSxFQUE3QzRCLEVBQVM1TSxFQUFBbEUsRUFDVHZCLEVBQW1CLFdBQU8sRUFBQ3lGLEVBQUEvRSxFQUFBLEVBQUEsS0FBQSxFQUtTLEdBRDlCNFIsRUFBb0JNLEdBQXdCUCxHQUFVRSxFQUNwQk0sR0FBaURQLEdBQWtCRSxFQUFBdlEsRUFBQXNRLEtBQXBHRSxFQUFhRCxFQUFBLEdBQUVFLEVBQWNGLEVBQUEsS0FFaEMzRCxPQUFPaUUsS0FBS0wsR0FBZTNQLE9BQVMsR0FBNEMsSUFBdkMrTCxPQUFPaUUsS0FBS0osR0FBZ0I1UCxRQUFZLENBQUEyQyxFQUFBOUUsRUFBQSxFQUFBLEtBQUEsQ0FBQSxPQUFBOEUsRUFBQW5ELEVBQUEsRUFDNUUsQ0FBQytQLEVBQVdELEdBQVUsSUFBTSxLQUFBLEVBQUEsS0FFakNBLEdBdEprQyxLQXNKTSxDQUFBM00sRUFBQTlFLEVBQUEsRUFBQSxLQUFBLENBQUEsT0FBQThFLEVBQUFuRCxFQUFBLEVBQ25DLENBQUMrUCxFQUFXRCxHQUFVLElBQUssS0FBQSxFQVVuQyxPQU5nQixLQURqQkEsR0FBWSxLQUVWcFMsRUFBbUJrQixFQTNKSyxnRExIYSxHS2lLbkNpUixJQUVIMU0sRUFBQTlFLEVBQUEsRUFDS3NSLEVMcEtpQyxJS29LUSxLQUFBLEVBQUEsT0FBQXhNLEVBQUE5RSxFQUFBLEVBQzdCdVIsRUFBa0J6QixHQUFTLEtBQUEsRUFBN0M0QixFQUFTNU0sRUFBQWxFLEVBQUEsS0FBQSxFQUFBa0UsRUFBQTlFLEVBQUEsRUFBQSxNQUFBLEtBQUEsRUFHUSxPQUhSOEUsRUFBQS9FLEVBQUEsRUFHWFYsSUFBbUJ5RixFQUFBL0MsRUFBQSxHQUFBLEtBQUEsR0FBQSxPQUFBK0MsRUFBQW5ELEVBQUEsR0FBQSxFQUFBc0MsRUFBQSxLQUFBLENBQUEsQ0FBQSxHQUFBLEVBQUEsS0FBQSxLQUV0QnhGLE1BQUFDLEtBQUFDLFVBQUEsQ0FFTSxTQUFTc1QsR0FBd0JQLEdBQ3RDLElBQU1VLEVBQTBCVixFQUFVdEIsT0FBT0ksT0FBZ0MsU0FBQzZCLEVBQWdCM0IsR0FBVSxJQUNwRzRCLEVBQWM1QixFQUFNNkIsVUFBWTdCLEVBQU03RCxNQUFRLG1CQUdwRCxPQUYyQixNQUEzQndGLEVBQWVDLEtBQWZELEVBQWVDLEdBQWlCLElBQ2hDRCxFQUFlQyxHQUFhbE4sS0FBS3NMLEdBQzFCMkIsQ0FDVCxFQUFHLENBQUEsR0FFSCxPQUFPbkUsT0FBT3NFLFlBQ1p0RSxPQUFPQyxRQUFRaUUsR0FBeUJ0SyxJQUFJLFNBQUEySyxHQUEyQixJQUFBQyxFQUFBQyxFQUFBclIsRUFBQW1SLEVBQUEsR0FBekJILEVBQVdLLEVBQUEsR0FDakRDLEVBeUVMLFNBQWlDeEMsR0FDdEMsSUFBTXlDLEVBQVN6QyxFQUFPSSxPQUFPLFNBQUNzQyxFQUFlcEMsR0FDM0MsSUFBTTVDLEVBbUJILFNBQTRCNEMsR0FDakMsSUFBTXFDLEVBQVFDLEdBQTJCdEMsR0FDekMsT0FBT3FDLEVBQUssT0FBQXJSLE9BQVVxUixHQUFVLGFBQ2xDLENBdEJnQkUsQ0FBbUJ2QyxHQUN6QndDLEVBQVFKLEVBQWNLLElBQUlyRixHQUNoQyxPQUFJb0YsR0FDRkEsRUFBTTlOLEtBQUtzTCxHQUNKb0MsSUFFVEEsRUFBY00sSUFBSXRGLEVBQUssQ0FBQzRDLElBQ2pCb0MsRUFDVCxFQUFHLElBQUlPLEtBRVAsT0FBTy9FLE1BQU1nRixLQUFLVCxFQUFPVSxVQUFVL0MsT0FBZ0IsU0FBQ2dELEVBQWFDLEdBQy9ELE9BQTJCLElBQXZCRCxFQUFZclIsUUFJVHVSLEdBQXFCRCxHQUFnQkMsR0FBcUJGLEdBSHhEQyxFQUdzRkQsQ0FDakcsRUFBRyxHQUNMLENBNUZrQ0csQ0FEbUNoQixFQUFBLElBRXpEaUIsRUFBYWhCLEVBQW9CLEdBQ2xDZ0IsR0FDSHhKLEdBQWEsdUNBQUExSSxPQUF3QzRRLElBRXZELElBQU11QixFQU1TLE9BTkVuQixFQUNmRSxFQUFvQnBDLE9BQTBCLFNBQUNzRCxFQUFlcEQsR0FDNUQsT0FBS29ELEVBR0VDLEdBQXFCckQsR0FBU3FELEdBQXFCRCxHQUFpQnBELEVBQVFvRCxFQUYxRXBELENBR1gsT0FBR2pJLElBQVVpSyxFQUFJa0IsRUFFbkIsTUFBTyxDQUNMdEIsRUFDQSxDQUNFMEIsZUFBZ0JDLEdBQTZCckIsR0FDN0NsQyxNQUFPbUQsRUFDUHpELE9BQVF3QyxHQUdkLEdBRUosQ0FFTyxTQUFTVixHQUNkUCxHQUtBLElBSEEsSUFBTUcsRUFBMEQsQ0FBQSxFQUMxREMsRUFBMkQsQ0FBQSxFQUVqRXBFLEVBQUEsRUFBQUMsRUFBb0NNLE9BQU9DLFFBQVF3RCxHQUFrQmhFLEVBQUFDLEVBQUF6TCxPQUFBd0wsSUFBRSxDQUFsRSxJQUFBRSxFQUFBdk0sRUFBQXNNLEVBQUFELEdBQUEsR0FBTzJFLEVBQVd6RSxFQUFBLEdBQUVzQixFQUFNdEIsRUFBQSxHQUNDLFdBQTFCc0IsRUFBTzZFLGVBSW1CLFlBQTFCN0UsRUFBTzZFLGdCQUFnQzdFLEVBQU9pQixPQUFPOEQsS0FBSyxTQUFDeEQsR0FBSyxPQUFLeUQsR0FBaUJ6RCxFQUFNLEtBQzlGcUIsRUFBZU8sR0FBZW5ELEdBSjlCMkMsRUFBY1EsR0FBZW5ELENBTWpDLENBRUEsTUFBTyxDQUFDMkMsRUFBZUMsRUFDekIsQ0FFTyxTQUFTaUIsR0FBMkJ0QyxHQUE4QyxJQUFBMEQsRUFDakZDLEVBQVksTUFBTDNELE9BQUssRUFBTEEsRUFBTzJELEtBQ3BCLEdBQUtBLEVBR0wsT0FBMkMsT0FBM0NELEVBQU9DLEVBQUtDLE1BQU0sZ0NBQXlCLEVBQXBDRixFQUF1QyxFQUNoRCxDQUVBLFNBQXNCRyxHQUFXcEksR0FBQSxPQUFBcUksR0FBQS9WLE1BQUFDLEtBQUFDLFVBQUEsQ0FtQmhDLFNBQUE2VixLQUFBLE9BQUFBLEdBQUE1VixFQUFBQyxJQUFBQyxFQW5CTSxTQUFBbUgsRUFBMkI4TSxHQUF5QixJQUFBMEIsRUFBQTNPLEVBQUEsT0FBQWpILElBQUFnQixFQUFBLFNBQUFxRyxHQUFBLGNBQUFBLEVBQUFuRyxFQUFBbUcsRUFBQWxHLEdBQUEsS0FBQSxFQUFBLEdBQ3BEK1MsRUFBSyxDQUFBN00sRUFBQWxHLEVBQUEsRUFBQSxLQUFBLENBQUEsT0FBQWtHLEVBQUF2RSxFQUFBLE9BQ0Q4RyxHQUFTLEtBQUEsRUFBQSxPQUFBdkMsRUFBQWxHLEVBQUEsRUFHSWtNLEdBQWlCLENBQUMsTUFBTyxPQUFRNkcsRUFBTyxTQUFVdEQsR0FBeUI3TixLQUFLLE1BQU8sQ0FBQyxJQUFHLEtBQUEsRUFBcEcsR0FDaUIsS0FEeEI2UyxFQUFPdk8sRUFBQXRGLEdBQ0R3SCxPQUFPakcsT0FBWSxDQUFBK0QsRUFBQWxHLEVBQUEsRUFBQSxLQUFBLENBQUEsT0FBQWtHLEVBQUF2RSxFQUFBLE9BQ3RCOEcsR0FBUyxLQUFBLEVBQUEsT0FBQXZDLEVBQUFuRyxFQUFBLEVBQUFtRyxFQUFBdkUsRUFBQSxFQUlUeU0sS0FBS0MsTUFBTW9HLElBQVEsS0FBQSxFQUFBLEdBQUF2TyxFQUFBbkcsRUFBQSxLQUFBK0YsRUFBQUksRUFBQXRGLGFBRUwyUCxhQUFXLENBQUFySyxFQUFBbEcsRUFBQSxFQUFBLEtBQUEsQ0FDcUUsT0FBbkdtSyxFQUFjbEosTUFBSyxrREFBQVMsT0FBbURxUixFQUFLLE1BQUFyUixPQUFLb0UsRUFBTTlELGVBQWFrRSxFQUFBdkUsRUFBQSxPQUM1RjhHLEdBQVMsS0FBQSxFQUFBLE1BQUEzQyxFQUFBLEtBQUEsRUFBQSxPQUFBSSxFQUFBdkUsRUFBQSxHQUFBLEVBQUFzRSxFQUFBLEtBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxLQUlyQnhILE1BQUFDLEtBQUFDLFVBQUEsQ0E0Qk0sU0FBU3NWLEdBQTZCN0QsR0FDM0MsSUFBTXNFLEVBQVV0RSxFQUFPdEksSUFBSSxTQUFDNEksR0FBSyxJQUFBaUUsRUFBQSxPQUFpQixPQUFqQkEsRUFBS2pFLEVBQU1HLFFBQU04RCxFQUFJLEVBQUUsR0FDeEQsT0FBSUQsRUFBUVIsS0FBSyxTQUFDckQsR0FBTSxPQUFNLENBQUMsT0FBUSxXQUFZLFdBQVdyRixTQUFTcUYsRUFBTyxHQUNyRSxTQUVMNkQsRUFBUWxKLFNBQVMsV0FDWixVQUVGLFlBQ1QsQ0FFTyxTQUFTdUksR0FBcUJyRCxHQUNuQyxJQUNnRGtFLEVBRDFDQyxFQUFZbkUsRUFBTW9FLFlBQ3hCLE9BQUtELEdBbFN1Qix5QkFrU1ZBLEVBR1hBLEVBRmlCLE9BQXRCRCxFQUFPbEUsRUFBTXFFLFdBQVNILEVBQUksRUFHOUIsQ0FFTyxTQUFTVCxHQUFpQnpELEdBQy9CLE1BQU8sQ0FBQ0EsRUFBTTdELEtBQU02RCxFQUFNNkIsVUFBVTJCLEtBQUssU0FBQ3ZSLEdBQUssTUFBc0IsaUJBQVZBLEdBQXNCNk0sR0FBcUJELEtBQUs1TSxFQUFNLEVBQ25ILENBRUEsU0FBc0JxUCxHQUFZNUYsR0FBQSxPQUFBNEksR0FBQXZXLE1BQUFDLEtBQUFDLFVBQUEsQ0FFakMsU0FBQXFXLEtBQUEsT0FBQUEsR0FBQXBXLEVBQUFDLElBQUFDLEVBRk0sU0FBQStILEVBQTRCb08sR0FBZSxPQUFBcFcsSUFBQWdCLEVBQUEsU0FBQWlILEdBQUEsY0FBQUEsRUFBQTlHLEdBQUEsS0FBQSxFQUFBLE9BQUE4RyxFQUFBOUcsRUFBQSxFQUMxQzJMLEVBQWdCLElBQVZzSixHQUFlLEtBQUEsRUFBQSxPQUFBbk8sRUFBQW5GLEVBQUEsR0FBQSxFQUFBa0YsRUFBQSxLQUM1QnBJLE1BQUFDLEtBQUFDLFVBQUEsQ0FFRCxTQUFzQnVXLEtBQVMsT0FBQUMsR0FBQTFXLE1BQUFDLEtBQUFDLFVBQUEsQ0FxQzlCLFNBQUF3VyxLQUFBLE9BQUFBLEdBQUF2VyxFQUFBQyxJQUFBQyxFQXJDTSxTQUFBOEcsSUFBQSxJQUFBa0ssRUFBQXNGLEVBQUFDLEVBQUEzRCxFQUFBNEQsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQTVELEVBQUFDLEVBQUE0RCxFQUFBLE9BQUE5VyxJQUFBZ0IsRUFBQSxTQUFBa0csR0FBQSxjQUFBQSxFQUFBL0YsR0FBQSxLQUFBLEVBQUEsT0FBQStGLEVBQUEvRixFQUFBLEVBQ2tCZ04sS0FBaUIsS0FBQSxFQUVFLE9BRnBDOEMsRUFBUS9KLEVBQUFuRixFQUVkc0osR0FBUyxpQ0FBaUNuRSxFQUFBL0YsRUFBQSxFQUNZb1IsR0FBbUN0QixHQUFTLEtBQUEsRUFTakcsR0FUaUdzRixFQUFBclAsRUFBQW5GLEVBQUF5VSxFQUFBL1QsRUFBQThULEVBQUEsR0FBM0YxRCxFQUFTMkQsRUFBQSxHQUFFQyxFQUFZRCxFQUFBLEdBQUVFLEVBQVlGLEVBQUEsR0FDdENHLEVBQW1CdkQsR0FBd0JQLEdBQVUrRCxFQUNuQnZELEdBQWlEc0QsR0FBaUJFLEVBQUFwVSxFQUFBbVUsS0FBbkczRCxFQUFhNEQsRUFBQSxHQUFFM0QsRUFBYzJELEVBQUEsR0FFOUJDLEVBQW1DLENBQ3ZDckYsUUFBU3pCLEdBQVM2QyxFQUFVcEIsU0FDNUJzRiwrQkFBZ0NOLEVBQWUsRUFDL0NPLGlDQUFrQ1AsRUFDbENRLGtDQUFtQ1AsS0FHakNySCxPQUFPaUUsS0FBS0wsR0FBZTNQLE9BQVMsR0FBQyxDQUFBNEQsRUFBQS9GLEVBQUEsRUFBQSxLQUFBLENBQUEsT0FBQStGLEVBQUEvRixFQUFBLEVBQ05hLFFBQVFDLElBQ3ZDb04sT0FBT0MsUUFBUTJELEdBQWVoSyxJQUFHbEosRUFBQUMsSUFBQUMsRUFBQyxTQUFBbUksRUFBQThPLEdBQUEsSUFBQUMsRUFBQTFELEVBQUFuRCxFQUFBOEcsRUFBQXROLEVBQUF1TixFQUFBQyxFQUFBLE9BQUF0WCxJQUFBZ0IsRUFBQSxTQUFBcUgsR0FBQSxjQUFBQSxFQUFBbEgsR0FBQSxLQUFBLEVBQTJCLE9BQTNCZ1csRUFBQTFVLEVBQUF5VSxFQUFBLEdBQVF6RCxFQUFXMEQsRUFBQSxHQUFFN0csRUFBTTZHLEVBQUEsR0FBQTlPLEVBQUFsSCxFQUFBLEVBQzdCb1csR0FBc0I5RCxFQUFhbkQsR0FBTyxLQUFBLEVBR3pDLE9BSHpCOEcsRUFBZS9PLEVBQUF0RyxFQUFBK0gsRUFBQTBOLEVBQUFILEVBQUFHLEVBQUEsQ0FBQSxFQUVoQkosR0FBZUUsRUFDZkcsR0FBMEJwUCxFQUFBbEgsRUFBQSxFQUFPdVcsR0FBa0JwSCxFQUFPdUIsT0FBTSxLQUFBLEVBQUEsT0FBQXhKLEVBQUF2RixFQUFBLEVBQUFnSCxFQUFBdU4sRUFBQUMsRUFBQWpQLEVBQUF0RyxLQUFBLEVBQUFxRyxFQUFBLE1BR3hFLEtBQUEsRUFSdUIsT0FBeEIwTyxFQUFRYSxpQkFBZ0J6USxFQUFBbkYsRUFBQW1GLEVBQUFwRSxFQUFBLEVBU2pCLENBQUUvQixPQUFROE8sR0FBU2lILEdBQVVoVyxTQUFVLElBQUcsS0FBQSxFQUFBLEtBRy9DdU8sT0FBT2lFLEtBQUtKLEdBQWdCNVAsT0FBUyxHQUFDLENBQUE0RCxFQUFBL0YsRUFBQSxFQUFBLEtBQUEsQ0FDaUQsT0FBekYyVixFQUFRYyxxQkFBdUIsMERBQTBEMVEsRUFBQS9GLEVBQUEsRUFDMUNhLFFBQVFDLElBQ3JEb04sT0FBT0MsUUFBUTRELEdBQWdCakssSUFBSSxTQUFBNE8sR0FBQSxJQUFBQyxFQUFBclYsRUFBQW9WLEVBQUEsR0FBcUIsT0FBTU4sR0FBZE8sRUFBQSxHQUFRQSxFQUFBLEdBQWdELElBQ3pHLEtBQUEsRUFGcUMsT0FBdENoQixFQUFRaUIsK0JBQThCN1EsRUFBQW5GLEVBQUFtRixFQUFBcEUsRUFBQSxFQUcvQixDQUFFL0IsT0FBUThPLEdBQVNpSCxHQUFVaFcsU0FBVSxJQUFHLEtBQUEsRUFBQSxPQUFBb0csRUFBQXBFLEVBQUEsRUFHNUMsQ0FBRS9CLE9BQVEsNkJBQThCRCxTQUFVLElBQUcsRUFBQWlHLEVBQUEsS0FDN0RuSCxNQUFBQyxLQUFBQyxVQUFBLENBRUQsU0FBUytVLEdBQXFCdEQsR0FDNUIsT0FBT0EsRUFBT0ksT0FBTyxTQUFDcUcsRUFBUW5HLEdBQzVCLElBQU1tRSxFQUFZZCxHQUFxQnJELEdBQ3ZDLE9BQU9tRSxFQUFZZ0MsRUFBU2hDLEVBQVlnQyxDQUMxQyxFQUFHLEdBQ0wsQ0FBQyxTQUVjVCxHQUFxQi9KLEVBQUFnQixHQUFBLE9BQUF5SixHQUFBclksTUFBQUMsS0FBQUMsVUFBQSxDQUFBLFNBQUFtWSxLQW1CbkMsT0FuQm1DQSxHQUFBbFksRUFBQUMsSUFBQUMsRUFBcEMsU0FBQW9PLEVBQ0VvRixFQUNBbkQsR0FBZ0MsSUFBQTRILEVBQUFoRSxFQUFBaUUsRUFBQUMsRUFBQSxPQUFBcFksSUFBQWdCLEVBQUEsU0FBQWlOLEdBQUEsY0FBQUEsRUFBQTlNLEdBQUEsS0FBQSxFQUVzQixPQUFoRCtTLEVBQVFDLEdBQTJCN0QsRUFBT3VCLE9BQU01RCxFQUFBOU0sRUFBQSxFQUNuQ3VVLEdBQVl4QixHQUFNLEtBQUEsRUFDNEMsT0FEM0VpRSxFQUFHbEssRUFBQWxNLEVBQ0hxVyxFQUFZQyxHQUFxQkYsRUFBS0csR0FBa0JoSSxFQUFPdUIsTUFBTTdELE9BQU1DLEVBQUFuTCxFQUFBLEVBQzFFLENBQ0xxUyxlQUFnQjdFLEVBQU82RSxlQUN2QnpCLFNBQVVELEVBQ1Y4RSxJQUFLRCxHQUFrQmhJLEVBQU91QixNQUFNN0QsTUFDcEN3SyxRQUFTRixTQUFrQkYsU0FBQUEsRUFBV0ssS0FDdENDLFlBQWFDLEdBQTBCUCxHQUN2Q1EsT0FBUTFFLEVBQ1IyRSxRQUFvQyxPQUE3QlgsRUFBRUksR0FBcUIsTUFBSEgsT0FBRyxFQUFIQSxFQUFLTSxNQUFJUCxFQUFJSSxHQUFrQmhJLEVBQU91QixNQUFNMkQsTUFDdkVzRCxPQUFRUixTQUFrQkgsU0FBQUEsRUFBS1ksWUFDL0JDLElBQUtWLFNBQWtCSCxTQUFBQSxFQUFLYyxTQUM1QkMsV0FBWVosR0FBcUIsTUFBSEgsT0FBRyxFQUFIQSxFQUFLZSxjQUNwQyxFQUFBN0ssRUFBQSxLQUNGek8sTUFBQUMsS0FBQUMsVUFBQSxDQUFBLFNBRWM0WCxHQUFpQmpKLEdBQUEsT0FBQTBLLEdBQUF2WixNQUFBQyxLQUFBQyxVQUFBLENBQUEsU0FBQXFaLEtBTS9CLE9BTitCQSxHQUFBcFosRUFBQUMsSUFBQUMsRUFBaEMsU0FBQTBPLEVBQWlDa0QsR0FBWSxJQUFBcUMsRUFBQSxPQUFBbFUsSUFBQWdCLEVBQUEsU0FBQXNOLEdBQUEsY0FBQUEsRUFBQW5OLEdBQUEsS0FBQSxFQUNJLEdBQXpDK1MsRUFBUUMsR0FBMkJ0QyxHQUMvQixDQUFBdkQsRUFBQW5OLEVBQUEsRUFBQSxLQUFBLENBQUEsT0FBQW1OLEVBQUF4TCxFQUFBLEVBQ0Qsd0RBQXNELEtBQUEsRUFBQSxPQUFBd0wsRUFBQW5OLEVBQUEsRUFFbERrTSxHQUFpQixDQUFDLE1BQU8sT0FBUTZHLEVBQU8sZ0JBQWlCLENBQUMsSUFBRyxLQUFBLEVBQUEsT0FBQTVGLEVBQUF4TCxFQUFBLEVBQUF3TCxFQUFBdk0sR0FBQSxFQUFBNE0sRUFBQSxLQUMzRS9PLE1BQUFDLEtBQUFDLFVBQUEsQ0FFRCxTQUFTMlgsR0FBMkIyQixHQUdsQyxNQUFPLENBQ0xDLFdBQVlDLEdBQXdCRixHQUV4QyxDQUVBLFNBQVNFLEdBQXdCRixHQUMvQixJQUFNRyxFQUFpQkMsR0FBMEJDLEVBQXlCTCxJQUMxRSxJQUFLdEksR0FDSCxPQUFPeUksRUFHVCxJQUFNakosRUFBU0osR0FBYyxDQUFDLE1BQU8sT0FBUXFKLEdBQzdDLE9BQTJCLElBQXBCakosRUFBT3hQLFVBQWtCd1AsRUFBT3ZQLE9BQU93SSxPQUFPakcsT0FBUyxFQUMxRGtXLEdBQTBCbEosRUFBT3ZQLFFBQ2pDd1ksQ0FDTixDQUVBLFNBQVNDLEdBQTBCSixHQUNqQyxPQUFPQSxFQUNKbEwsTUFBTSxNQUNOakYsSUFBSSxTQUFDeVEsR0FBSSxPQUFLQSxFQUFLQyxRQUFROUksR0FBZ0MsR0FBRyxHQUM5RDlOLEtBQUssTUFDTHdHLE1BQ0wsQ0FFQSxTQUFTK08sR0FBa0J4VSxHQUN6QixNQUF3QixpQkFBVkEsR0FBc0JBLEVBQU1SLE9BQVMsRUFBSVEsT0FBUThGLENBQ2pFLENBRUEsU0FBU3lPLEdBQ1BGLEVBQ0F5QixHQUM0QixJQUFBQyxFQUFBQyxFQUM1QixHQUFRLE1BQUgzQixHQUFBQSxFQUFLNEIsTUFBNEIsSUFBcEI1QixFQUFJNEIsS0FBS3pXLE9BSTNCLE9BRXNELE9BRnREdVcsRUFDOEMsT0FEOUNDLEVBQ0UzQixFQUFJNEIsS0FBS0MsS0FBSyxTQUFDekIsR0FBRyxPQUFLQSxFQUFJdkssT0FBUzRMLENBQU8sSUFBQ0UsRUFDNUMzQixFQUFJNEIsS0FBS0MsS0FBSyxTQUFDekIsR0FBRyxNQUF3QixZQUFuQkEsRUFBSVcsVUFBd0IsSUFBQ1csRUFDcEQxQixFQUFJNEIsS0FBS0MsS0FBSyxTQUFDekIsR0FBRyxNQUFvQixjQUFmQSxFQUFJOUgsTUFBc0IsRUFFckQsQ0FFQSxTQUFTa0ksR0FBMEJKLEdBQXFELElBQUEwQixFQUFBQyxFQUFBQyxFQUN0RixHQUFRLE1BQUg1QixHQUFBQSxFQUFLNkIsT0FBOEIsSUFBckI3QixFQUFJNkIsTUFBTTlXLE9BSTdCLE9BQytELE9BRC9EMlcsU0FBQUMsRUFDRTNCLEVBQUk2QixNQUFNSixLQUFLLFNBQUNLLEdBQUksTUFBeUIsWUFBcEJBLEVBQUtuQixVQUF3QixXQUF0RGdCLEVBQXlEbE0sTUFBSWlNLEVBQ1IsT0FEUUUsRUFDN0Q1QixFQUFJNkIsTUFBTUosS0FBSyxTQUFDSyxHQUFJLE1BQXFCLGNBQWhCQSxFQUFLNUosTUFBc0IsU0FBQyxFQUFyRDBKLEVBQXVEbk0sSUFFM0QsQ0NyY0EsU0FBc0JzTSxLQUFpQixPQUFBQyxHQUFBM2EsTUFBQUMsS0FBQUMsVUFBQSxDQUV0QyxTQUFBeWEsS0FBQSxPQUFBQSxHQUFBeGEsRUFBQUMsSUFBQUMsRUFGTSxTQUFBQyxJQUFBLElBQUFzYSxFQUFBdlQsRUFBQSxPQUFBakgsSUFBQWdCLEVBQUEsU0FBQUMsR0FBQSxjQUFBQSxFQUFBRSxHQUFBLEtBQUEsRUFBQSxPQUFBRixFQUFBRSxFQUFBLEVBQ1NzWixLQUE4QixLQUFBLEVBQUEsR0FBQSxPQUFBRCxFQUFBdlosRUFBQWMsR0FBQSxDQUFBZCxFQUFBRSxFQUFBLEVBQUEsS0FBQSxDQUFBOEYsRUFBQXVULEVBQUF2WixFQUFBRSxFQUFBLEVBQUEsTUFBQSxLQUFBLEVBQUEsT0FBQUYsRUFBQUUsRUFBQSxFQUFZdVosS0FBc0IsS0FBQSxFQUFBelQsRUFBQWhHLEVBQUFjLEVBQUEsS0FBQSxFQUFBLE9BQUFkLEVBQUE2QixFQUFBLEVBQUFtRSxHQUFBLEVBQUEvRyxFQUFBLEtBQy9FTixNQUFBQyxLQUFBQyxVQUFBLENBRUQsU0FBc0I0YSxLQUFvQixPQUFBQyxHQUFBL2EsTUFBQUMsS0FBQUMsVUFBQSxDQWV6QyxTQUFBNmEsS0FBQSxPQUFBQSxHQUFBNWEsRUFBQUMsSUFBQUMsRUFmTSxTQUFBbUYsSUFBQSxJQUFBMEUsRUFBQSxPQUFBOUosSUFBQWdCLEVBQUEsU0FBQWlGLEdBQUEsY0FBQUEsRUFBQTlFLEdBQUEsS0FBQSxFQUNpQixPQURqQjJJLEVBQ0U4USxHQUFlM1UsRUFBQTlFLEVBQUEsRUFFWjNCLEVBQXVCLENBQzNCLEtBQ0EsT0FDQSxPQUNBLFNBQ0EsbUJBQ0EsYUFDQSwrQkFDQSxLQUFBLEVBQUEsT0FBQXlHLEVBQUFuRCxFQUFBLEVBQUFnSCxFQUFBN0QsRUFBQWxFLEVBQ0Z3SCxPQUNGLGtEQUErQyxFQUFBbkUsRUFBQSxLQUVsRHhGLE1BQUFDLEtBQUFDLFVBQUEsQ0FBQSxTQUVjMmEsS0FBNEIsT0FBQUksR0FBQWpiLE1BQUFDLEtBQUFDLFVBQUEsQ0FBQSxTQUFBK2EsS0FZMUMsT0FaMENBLEdBQUE5YSxFQUFBQyxJQUFBQyxFQUEzQyxTQUFBbUgsSUFBQSxJQUFBMFQsRUFBQXpELEVBQUEsT0FBQXJYLElBQUFnQixFQUFBLFNBQUFxRyxHQUFBLGNBQUFBLEVBQUFuRyxFQUFBbUcsRUFBQWxHLEdBQUEsS0FBQSxFQUFBLE9BQUFrRyxFQUFBbkcsRUFBQSxFQUFBbUcsRUFBQWxHLEVBQUEsRUFHWTNCLEVBQXVCLENBQUMsS0FBTSxLQUFNLE9BQVEsU0FBVSxjQUFlLGFBQWMscUJBQW9CLEtBQUEsRUFDekcsT0FGQXNiLEVBQVV6VCxFQUFBdEYsRUFFZHdILE9BQUlsQyxFQUFBdkUsRUFBQSxFQUNDZ1ksRUFBV3hYLE9BQVMsRUFBSXdYLE9BQWFsUixHQUFTLEtBQUEsRUFBQSxHQUFBdkMsRUFBQW5HLEVBQUEsR0FFakQ2WixHQUZpRDFELEVBQUFoUSxFQUFBdEYsR0FFZixDQUFBc0YsRUFBQWxHLEVBQUEsRUFBQSxLQUFBLENBQUEsT0FBQWtHLEVBQUF2RSxFQUFBLE9BQzdCOEcsR0FBUyxLQUFBLEVBQUEsTUFBQXlOLEVBQUEsS0FBQSxFQUFBLE9BQUFoUSxFQUFBdkUsRUFBQSxHQUFBLEVBQUFzRSxFQUFBLEtBQUEsQ0FBQSxDQUFBLEVBQUEsSUFBQSxLQUlyQnhILE1BQUFDLEtBQUFDLFVBQUEsQ0FFTSxTQUFTaWIsR0FBNEJ6VCxHQUMxQyxNQUFPLHNDQUFzQ29KLEtBQUtuSixPQUFPRCxHQUMzRCxDQUVBLFNBQVNzVCxHQUFnQjlXLEVBQWVYLEdBQ3RDLEdBQUlXLEVBQU1SLE9BQVMsRUFDakIsT0FBT1EsRUFFVCxNQUFNLElBQUluQixNQUFNUSxFQUNsQixDQ3NITyxTQUFTNlgsR0FBcUJDLEdBQ25DLE9BQU9DLEdBQTZCRCxFQUFXLFFBQ2pELENBRU8sU0FBU0UsR0FBa0JGLEdBQ2hDLE9BQU9DLEdBQTZCRCxFQUFXLGVBQ2pELENBRUEsU0FBc0JHLEdBQWtCM2IsR0FBQSxPQUFBNGIsR0FBQXpiLE1BQUFDLEtBQUFDLFVBQUEsQ0FLdkMsU0FBQXViLEtBQUEsT0FBQUEsR0FBQXRiLEVBQUFDLElBQUFDLEVBTE0sU0FBQUMsRUFBa0NvYixHQUE0QixJQUFBQyxFQUFBQyxFQUFBek4sRUFBQUMsRUFBQXlOLEVBQUEsT0FBQXpiLElBQUFnQixFQUFBLFNBQUFDLEdBQUEsY0FBQUEsRUFBQUUsR0FBQSxLQUFBLEVBQUEsT0FBQUYsRUFBQUUsRUFBQSxFQUN2Q3VNLEtBQWtCLEtBQUEsRUFBNUIsT0FBNEI2TixFQUFBdGEsRUFBQWMsRUFBQXlaLEVBQUEvWSxFQUFBOFksRUFBQSxHQUF2Q3hOLEVBQUt5TixFQUFBLEdBQUV4TixFQUFJd04sRUFBQSxHQUFBdmEsRUFBQUUsRUFBQSxFQUNFdWEsR0FBYzNOLEVBQU9DLEVBQU1nTixHQUFxQk0sSUFBYSxLQUFBLEVBQzVCLE9BRC9DRyxFQUFLeGEsRUFBQWMsRUFDWHNKLHFCQUFReEksT0FBbUI0WSxFQUFNRSxzQkFBb0IxYSxFQUFBNkIsRUFBQSxFQUM5QytNLEdBQVMsQ0FBRTRMLE1BQUFBLEtBQVEsRUFBQXZiLEVBQUEsS0FDM0JOLE1BQUFDLEtBQUFDLFVBQUEsQ0FFRCxTQUFzQjhiLEdBQWVsYyxHQUFBLE9BQUFtYyxHQUFBamMsTUFBQUMsS0FBQUMsVUFBQSxDQUtwQyxTQUFBK2IsS0FBQSxPQUFBQSxHQUFBOWIsRUFBQUMsSUFBQUMsRUFMTSxTQUFBbUYsRUFBK0I2TCxHQUEwQixJQUFBNkssRUFBQUMsRUFBQS9WLEVBQUEsT0FBQWhHLElBQUFnQixFQUFBLFNBQUFpRixHQUFBLGNBQUFBLEVBQUE5RSxHQUFBLEtBQUEsRUFBQSxRQUN4QnlJLElBQWJxSCxFQUFzQixDQUFBaEwsRUFBQTlFLEVBQUEsRUFBQSxLQUFBLENBQUEsT0FBQThFLEVBQUE5RSxFQUFBLEVBQVNnTixLQUFpQixLQUFBLEVBQUFuSSxFQUFBQyxFQUFBbEUsRUFBQWtFLEVBQUE5RSxFQUFBLEVBQUEsTUFBQSxLQUFBLEVBQUE2RSxFQUFHbVYsR0FBa0JsSyxHQUFTLEtBQUEsRUFBakYsT0FBaEI2SyxFQUFnQjlWLEVBQUFDLEVBQUE5RSxFQUFBLEVBQ0k2YSxHQUErQkYsR0FBaUIsS0FBQSxFQUNSLE9BRDVEQyxFQUFXOVYsRUFBQWxFLEVBQ2pCc0osNEJBQVF4SSxPQUEwQmtaLEVBQVlKLHNCQUFvQjFWLEVBQUFuRCxFQUFBLEVBQzNEK00sR0FBUyxDQUFFb00sYUFBY0YsS0FBYyxFQUFBM1csRUFBQSxLQUMvQ3hGLE1BQUFDLEtBQUFDLFVBQUEsQ0FFRCxTQUFzQm9jLEtBQWlDLE9BQUFDLEdBQUF2YyxNQUFBQyxLQUFBQyxVQUFBLENBU3RELFNBQUFxYyxLQUFBLE9BQUFBLEdBQUFwYyxFQUFBQyxJQUFBQyxFQVRNLFNBQUFtSCxJQUFBLElBQUFnVixFQUFBbkwsRUFBQThLLEVBQUEsT0FBQS9iLElBQUFnQixFQUFBLFNBQUFxRyxHQUFBLGNBQUFBLEVBQUFsRyxHQUFBLEtBQUEsRUFBQSxPQUFBa0csRUFBQWxHLEVBQUEsRUFDd0JrTSxHQUFpQixDQUFDLEtBQU0sT0FBUSxTQUFVLFNBQVUsT0FBUSxXQUFZLENBQUMsSUFBRyxLQUFBLEVBQ25FLEdBRGhDK08sRUFBYy9VLEVBQUF0RixFQUNka1AsRUFBV21MLEVBQWU3UyxRQUM1QndSLEdBQTRCcUIsSUFBb0IsUUFBUTFMLEtBQUtPLEdBQVMsQ0FBQTVKLEVBQUFsRyxFQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUFrRyxFQUFBdkUsRUFBQSxPQUNqRThHLEdBQVMsS0FBQSxFQUFBLE9BQUF2QyxFQUFBbEcsRUFBQSxFQUdRNmEsR0FBK0IvSyxHQUFTLEtBQUEsRUFBakQsT0FBWDhLLEVBQVcxVSxFQUFBdEYsRUFBQXNGLEVBQUF2RSxFQUFBLEVBQ1YrTSxHQUFTLENBQUVvTSxhQUFjRixLQUFjLEVBQUEzVSxFQUFBLEtBQy9DeEgsTUFBQUMsS0FBQUMsVUFBQSxDQUFBLFNBRWNrYyxHQUE4Qi9XLEdBQUEsT0FBQW9YLEdBQUF6YyxNQUFBQyxLQUFBQyxVQUFBLENBQUEsU0FBQXVjLEtBRzVDLE9BSDRDQSxHQUFBdGMsRUFBQUMsSUFBQUMsRUFBN0MsU0FBQStILEVBQThDaUosR0FBeUIsSUFBQXFMLEVBQUFDLEVBQUF4TyxFQUFBQyxFQUFBLE9BQUFoTyxJQUFBZ0IsRUFBQSxTQUFBaUgsR0FBQSxjQUFBQSxFQUFBOUcsR0FBQSxLQUFBLEVBQUEsT0FBQThHLEVBQUE5RyxFQUFBLEVBQ3pDdU0sS0FBa0IsS0FBQSxFQUE1QixPQUE0QjRPLEVBQUFyVSxFQUFBbEcsRUFBQXdhLEVBQUE5WixFQUFBNlosRUFBQSxHQUF2Q3ZPLEVBQUt3TyxFQUFBLEdBQUV2TyxFQUFJdU8sRUFBQSxHQUFBdFUsRUFBQTlHLEVBQUEsRUFDTHFiLEdBQVd6TyxFQUFPQyxFQUFNaUQsR0FBUyxLQUFBLEVBQUEsT0FBQWhKLEVBQUFuRixFQUFBLEVBQUFtRixFQUFBbEcsR0FBQSxFQUFBaUcsRUFBQSxLQUMvQ3BJLE1BQUFDLEtBQUFDLFVBQUEsQ0FFRCxTQUFTb2IsR0FBNkJELEVBQTRCd0IsR0FDaEUsSUFBTUMsRUFBZ0JuVixPQUFPMFQsR0FBVzFSLE9BS3hDLEdBSjZCLElBQXpCbVQsRUFBY3BaLFFBQ2hCaUksYUFBYTFJLE9BQVc0WixFQUFLLDBCQUEwQixHQUdyRCxRQUFRL0wsS0FBS2dNLEdBQ2YsT0FBT0EsRUFHVCxJQUFNQyxFQUF3QixVQUFWRixFQUFvQixTQUFXLE9BQzdDaEgsRUFBUWlILEVBQWNqSCxNQUMxQixJQUFJaE4sT0FBTSxpREFBQTVGLE9BQWtEOFosRUFBVyxvQkFFekUsR0FBUyxNQUFMbEgsR0FBQUEsRUFBUSxHQUNWLE9BQU9BLEVBQU0sR0FHZmxLLEdBQWEsNEJBQUExSSxPQUE2QjRaLEVBQUssOEJBQUE1WixPQUE2QjZaLEVBQWEsS0FBSyxFQUNoRyxDQUFDLFNBRWNoQixHQUFheFcsRUFBQTJCLEVBQUF5RyxHQUFBLE9BQUFzUCxHQUFBaGQsTUFBQUMsS0FBQUMsVUFBQSxDQUFBLFNBQUE4YyxLQW1CM0IsT0FuQjJCQSxHQUFBN2MsRUFBQUMsSUFBQUMsRUFBNUIsU0FBQW1JLEVBQTZCMkYsRUFBZUMsRUFBY3NOLEdBQTRCLElBQUFHLEVBQUFvQixFQUFBLE9BQUE3YyxJQUFBZ0IsRUFBQSxTQUFBcUgsR0FBQSxjQUFBQSxFQUFBbEgsR0FBQSxLQUFBLEVBQUEsT0FBQWtILEVBQUFsSCxFQUFBLEVBQ2hFMmIsR0FBcUMsQ0FDdkRsTyxNQXRJYSx1UEF1SWJiLE1BQUFBLEVBQ0FDLEtBQUFBLEVBQ0EyTixPQUFRTCxFQUNSeUIsS0FBTSxRQUNOQyxlQUFnQixTQUFDOU4sR0FBUSxJQUFBK04sRUFBQSxPQUFrQixPQUFsQkEsRUFBSy9OLEVBQVNZLE9BQWdCLE9BQVptTixFQUFiQSxFQUFlQyxpQkFBVSxFQUF6QkQsRUFBMkJ4QixLQUFLLElBQzlELEtBQUEsRUFQUyxPQUFMQSxFQUFLcFQsRUFBQXRHLEVBQUFzRyxFQUFBbEgsRUFBQSxFQVFZZ2MsR0FBaUUsQ0FDdEZ2TyxNQXBLc0IsMGNBcUt0QmIsTUFBQUEsRUFDQUMsS0FBQUEsRUFDQTJOLE9BQVFMLEVBQ1I4QixpQkFBa0IsU0FBQ2xPLEdBQVEsSUFBQW1PLEVBQUEsT0FBa0IsT0FBbEJBLEVBQUtuTyxFQUFTWSxPQUFnQixPQUFadU4sRUFBYkEsRUFBZUgsYUFBaUIsT0FBUEcsRUFBekJBLEVBQTJCNUIsWUFBSyxFQUFoQzRCLEVBQWtDQyxRQUFRLEVBQzFFQyxRQUFTQyxLQUNULEtBQUEsRUFQWSxPQUFSWCxFQUFReFUsRUFBQXRHLEVBQUFzRyxFQUFBdkYsRUFBQSxFQUFBMFUsRUFBQUEsS0FTRmlFLEdBQUssR0FBQSxDQUFFb0IsU0FBQUEsS0FBUSxFQUFBelUsRUFBQSxLQUM1QnhJLE1BQUFDLEtBQUFDLFVBQUEsQ0FBQSxTQUVjMGMsR0FBVWpQLEVBQUFDLEVBQUFnQixHQUFBLE9BQUFpUCxHQUFBN2QsTUFBQUMsS0FBQUMsVUFBQSxDQUFBLFNBQUEyZCxLQWtCeEIsT0FsQndCQSxHQUFBMWQsRUFBQUMsSUFBQUMsRUFBekIsU0FBQThHLEVBQTBCZ0gsRUFBZUMsRUFBY2lELEdBQXlCLElBQUE4SyxFQUFBcmIsRUFBQUMsRUFBQStjLEVBQUFDLEVBQUEsT0FBQTNkLElBQUFnQixFQUFBLFNBQUFrRyxHQUFBLGNBQUFBLEVBQUEvRixHQUFBLEtBQUEsRUFBQSxPQUFBK0YsRUFBQS9GLEVBQUEsRUFDcEQyYixHQUEyQyxDQUNuRWxPLE1BdkhVLDZQQXdIVmIsTUFBQUEsRUFDQUMsS0FBQUEsRUFDQTJOLE9BQVExSyxFQUNSOEwsS0FBTSxlQUNOQyxlQUFnQixTQUFDOU4sR0FBUSxJQUFBME8sRUFBQSxPQUFrQixPQUFsQkEsRUFBSzFPLEVBQVNZLE9BQWdCLE9BQVo4TixFQUFiQSxFQUFlVixpQkFBVSxFQUF6QlUsRUFBMkI3QixXQUFXLElBQ3BFLEtBQUEsRUFQZSxPQUFYQSxFQUFXN1UsRUFBQW5GLEVBQUFtRixFQUFBL0YsRUFBQSxFQVFzQmEsUUFBUUMsSUFBSSxDQUNqRDRiLEdBQWdCOVAsRUFBT0MsRUFBTWlELEdBQzdCNk0sR0FBVS9QLEVBQU9DLEVBQU1pRCxLQUN2QixLQUFBLEVBSDJCLE9BRzNCdlEsRUFBQXdHLEVBQUFuRixFQUFBcEIsRUFBQThCLEVBQUEvQixFQUFBLEdBSEtnZCxFQUFhL2MsRUFBQSxHQUFFZ2QsRUFBT2hkLEVBQUEsR0FBQXVHLEVBQUFwRSxFQUFBLEVBQUEwVSxFQUFBQSxLQU14QnVFLEdBQVcsR0FBQSxDQUNkYyxTQUFVLEdBQUFoYSxPQUFBdUssRUFBSXNRLEdBQWF0USxFQUFLdVEsSUFBU0ksS0FBS0MsT0FBMkIsRUFBQWpYLEVBQUEsS0FFNUVuSCxNQUFBQyxLQUFBQyxVQUFBLENBRUQsU0FBU2tlLEdBQTJCQyxFQUFlQyxHQUNqRCxJQUFNQyxFQUEwQyxpQkFBbkJGLEVBQUtHLFVBQXlCSCxFQUFLRyxVQUFZLEdBQ3RFQyxFQUE0QyxpQkFBcEJILEVBQU1FLFVBQXlCRixFQUFNRSxVQUFZLEdBQy9FLE9BQU9ELEVBQWNHLGNBQWNELEVBQ3JDLENBQUMsU0FFY1IsR0FBZXBQLEVBQUE4UCxFQUFBQyxHQUFBLE9BQUFDLEdBQUE3ZSxNQUFBQyxLQUFBQyxVQUFBLENBQUEsU0FBQTJlLEtBUzdCLE9BVDZCQSxHQUFBMWUsRUFBQUMsSUFBQUMsRUFBOUIsU0FBQW9PLEVBQStCTixFQUFlQyxFQUFjaUQsR0FBeUIsT0FBQWpSLElBQUFnQixFQUFBLFNBQUFpTixHQUFBLGNBQUFBLEVBQUE5TSxHQUFBLEtBQUEsRUFBQSxPQUFBOE0sRUFBQTlNLEVBQUEsRUFDdEVnYyxHQUF1RSxDQUNsRnZPLE1BdkttQixnZEF3S25CYixNQUFBQSxFQUNBQyxLQUFBQSxFQUNBMk4sT0FBUTFLLEVBQ1JtTSxpQkFBa0IsU0FBQ2xPLEdBQVEsSUFBQXdQLEVBQUEsT0FBa0IsT0FBbEJBLEVBQUt4UCxFQUFTWSxPQUFnQixPQUFaNE8sRUFBYkEsRUFBZXhCLGFBQXVCLE9BQWJ3QixFQUF6QkEsRUFBMkIzQyxrQkFBVyxFQUF0QzJDLEVBQXdDcEIsUUFBUSxFQUNoRkMsUUFBU0MsS0FDVCxLQUFBLEVBQUEsT0FBQXZQLEVBQUFuTCxFQUFBLEVBQUFtTCxFQUFBbE0sR0FBQSxFQUFBc00sRUFBQSxLQUNIek8sTUFBQUMsS0FBQUMsVUFBQSxDQUFBLFNBRWNnZSxHQUFTYSxFQUFBQyxFQUFBQyxHQUFBLE9BQUFDLEdBQUFsZixNQUFBQyxLQUFBQyxVQUFBLENBQUEsU0FBQWdmLEtBU3ZCLE9BVHVCQSxHQUFBL2UsRUFBQUMsSUFBQUMsRUFBeEIsU0FBQTBPLEVBQXlCWixFQUFlQyxFQUFjaUQsR0FBeUIsT0FBQWpSLElBQUFnQixFQUFBLFNBQUFzTixHQUFBLGNBQUFBLEVBQUFuTixHQUFBLEtBQUEsRUFBQSxPQUFBbU4sRUFBQW5OLEVBQUEsRUFDaEVnYyxHQUE0RCxDQUN2RXZPLE1BOUlrQixvZUErSWxCYixNQUFBQSxFQUNBQyxLQUFBQSxFQUNBMk4sT0FBUTFLLEVBQ1JtTSxpQkFBa0IsU0FBQ2xPLEdBQVEsSUFBQTZQLEVBQUEsT0FBa0IsT0FBbEJBLEVBQUs3UCxFQUFTWSxPQUFnQixPQUFaaVAsRUFBYkEsRUFBZTdCLGFBQXVCLE9BQWI2QixFQUF6QkEsRUFBMkJoRCxrQkFBVyxFQUF0Q2dELEVBQXdDcEIsT0FBTyxFQUMvRUosUUFBU3lCLEtBQ1QsS0FBQSxFQUFBLE9BQUExUSxFQUFBeEwsRUFBQSxFQUFBd0wsRUFBQXZNLEdBQUEsRUFBQTRNLEVBQUEsS0FDSC9PLE1BQUFDLEtBQUFDLFVBQUEsQ0FBQSxTQUVjcWQsR0FBZ0I4QixHQUFBLE9BQUFDLEdBQUF0ZixNQUFBQyxLQUFBQyxVQUFBLENBQUEsU0FBQW9mLEtBZ0M5QixPQWhDOEJBLEdBQUFuZixFQUFBQyxJQUFBQyxFQUEvQixTQUFBa2YsRUFBcUVDLEdBT3BFLElBQUFDLEVBQUF4QyxFQUFBeUMsRUFBQUMsRUFBQXRZLEVBQUEsT0FBQWpILElBQUFnQixFQUFBLFNBQUFvTyxHQUFBLGNBQUFBLEVBQUFqTyxHQUFBLEtBQUEsRUFFTzBiLEVBQXNCLEdBQUUsS0FBQSxFQUdILE9BSEc1VixFQUdUbVksRUFBTWhRLEVBQUFqTyxFQUFBLEVBQ2pCb04sR0FBbUI2USxFQUFPeFEsTUFBTyxDQUNyQ2IsTUFBT3FSLEVBQU9yUixNQUNkQyxLQUFNb1IsRUFBT3BSLEtBQ2IyTixPQUFRNkQsT0FBT0osRUFBT3pELFFBQ3RCMEQsT0FBQUEsSUFDQSxLQUFBLEVBTnNDLEdBQXBDRSxFQUFVdFksRUFBVW1XLGlCQUFnQjNULEtBQUF4QyxFQUFBbUksRUFBQXJOLEdBUzNCLENBQUFxTixFQUFBak8sRUFBQSxFQUFBLEtBQUEsQ0FBQSxPQUFBaU8sRUFBQXRNLEVBQUEsRUFDTitaLEdBQVEsS0FBQSxFQUc2RCxHQUE5RUEsRUFBU3RXLEtBQUkzRyxNQUFiaWQsRUFBUXpQLEVBQVNtUyxFQUFXRSxNQUFNeFcsSUFBSW1XLEVBQU83QixTQUFTNVQsT0FBTytWLE1BRXhESCxFQUFXSSxTQUFTQyxZQUFXLENBQUF4USxFQUFBak8sRUFBQSxFQUFBLEtBQUEsQ0FBQSxPQUFBaU8sRUFBQXRNLEVBQUEsRUFDM0IrWixHQUFRLEtBQUEsRUFFakJ3QyxFQUFzQyxPQUFoQ0MsRUFBR0MsRUFBV0ksU0FBU0UsV0FBU1AsT0FBSTFWLEVBQVUsS0FBQSxFQUFBd0YsRUFBQWpPLEVBQUEsRUFBQSxNQUFBLEtBQUEsRUFBQSxPQUFBaU8sRUFBQXRNLEVBQUEsR0FBQSxFQUFBcWMsRUFBQSxLQUV2RHZmLE1BQUFDLEtBQUFDLFVBQUEsQ0FBQSxTQUVjZ2QsR0FBYWdELEdBQUEsT0FBQUMsR0FBQW5nQixNQUFBQyxLQUFBQyxVQUFBLENBQUEsU0FBQWlnQixLQTJCM0IsT0EzQjJCQSxHQUFBaGdCLEVBQUFDLElBQUFDLEVBQTVCLFNBQUErZixFQUEyRFosR0FPMUQsSUFBQWEsRUFBQUMsRUFBQUMsRUFBQUMsRUFBQXRXLEVBQUEsT0FBQTlKLElBQUFnQixFQUFBLFNBQUFxZixHQUFBLGNBQUFBLEVBQUFsZixHQUFBLEtBQUEsRUFDd0IsT0FEeEIySSxFQUNrQnNWLEVBQU1pQixFQUFBbGYsRUFBQSxFQUNmb04sR0FBbUI2USxFQUFPeFEsTUFBTyxDQUNyQ2IsTUFBT3FSLEVBQU9yUixNQUNkQyxLQUFNb1IsRUFBT3BSLEtBQ2IyTixPQUFRNkQsT0FBT0osRUFBT3pELFVBQ3RCLEtBQUEsRUFLSCxPQVZLeUUsRUFBUXRXLEVBQVVrVCxlQUFjdlQsS0FBQUssRUFBQXVXLEVBQUF0ZSxLQVNwQ3dKLEdBQWEsa0JBQUExSSxPQUFtQnVjLEVBQU9yQyxLQUFJLE1BQUFsYSxPQUFLdWMsRUFBT3pELGVBQU05WSxPQUFPdWMsRUFBT3JSLE1BQUssS0FBQWxMLE9BQUl1YyxFQUFPcFIsS0FBSSxNQUNoR3FTLEVBQUF2ZCxFQUFBLEVBRU0sQ0FDTDZZLE9BQVF5RSxFQUFTekUsT0FDakIyRSxNQUFPRixFQUFTRSxNQUNoQjdILElBQUsySCxFQUFTM0gsSUFDZDhILE9BQThCLE9BQXhCTixFQUFpQixPQUFqQkMsRUFBRUUsRUFBU0csYUFBTSxFQUFmTCxFQUFpQk0sT0FBS1AsT0FBSXJXLEVBQ2xDNlcsS0FBbUIsT0FBZk4sRUFBRUMsRUFBU0ssTUFBSU4sRUFBSSxLQUN4QixFQUFBSCxFQUFBLEtBQ0ZwZ0IsTUFBQUMsS0FBQUMsVUFBQSxDQUVELFNBQVMwZCxHQUFla0QsR0FBMkMsSUFBQUMsRUFBQUMsRUFDakUsTUFBTyxDQUNMQyxLQUFNLFVBQ05OLE9BQTZCLE9BQXZCSSxFQUFnQixPQUFoQkMsRUFBRUYsRUFBUUgsYUFBTSxFQUFkSyxFQUFnQkosT0FBS0csT0FBSS9XLEVBQ2pDd1UsVUFBV3NDLEVBQVF0QyxVQUNuQjNGLElBQUtpSSxFQUFRakksSUFDYmdJLEtBQU1DLEVBQVFELEtBRWxCLENBRUEsU0FBU3pCLEdBQWM4QixHQUErQixJQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUNwRCxNQUFPLENBQ0xOLEtBQU0sU0FDTk4sT0FBNEIsT0FBdEJRLEVBQWUsT0FBZkMsRUFBRUYsRUFBT1AsYUFBTSxFQUFiUyxFQUFlUixPQUFLTyxPQUFJblgsRUFDaEN3WCxNQUFtQixPQUFkSCxFQUFFSCxFQUFPTSxPQUFLSCxPQUFJclgsRUFDdkJ3VSxVQUE2QixPQUFwQjhDLEVBQUVKLEVBQU9PLGFBQVdILE9BQUl0WCxFQUNqQzZPLElBQUtxSSxFQUFPckksSUFDWmdJLEtBQWlCLE9BQWJVLEVBQUVMLEVBQU9MLE1BQUlVLEVBQUksR0FFekIsQ0FFQSxTQUFTekIsR0FBZXZjLEdBQ3RCLE1BQStCLGlCQUFqQkEsRUFBUXNkLE1BQXFCdGQsRUFBUXNkLEtBQUtuZCxPQUFTLENBQ25FLENDOVdBLFNBQXNCZ2UsR0FBTTdoQixHQUFBLE9BQUE4aEIsR0FBQTNoQixNQUFBQyxLQUFBQyxVQUFBLENBNEIzQixTQUFBeWhCLEtBQUEsT0FBQUEsR0FBQXhoQixFQUFBQyxJQUFBQyxFQTVCTSxTQUFBQyxFQUFBc2hCLEdBQUEsSUFBQTVOLEVBQUE2TSxFQUFBSCxFQUFBbUIsRUFBQUMsRUFBQUMsRUFBQTNiLEVBQUFpQixFQUFBLE9BQUFqSCxJQUFBZ0IsRUFBQSxTQUFBQyxHQUFBLGNBQUFBLEVBQUFFLEdBQUEsS0FBQSxFQUFtQyxPQUFYc2YsR0FBeEI3TSxXQUFBNE4sRUFBdUQsQ0FBQSxFQUFFQSxHQUFqQ2YsS0FBTUgsRUFBSzFNLEVBQUwwTSxNQUFLcmYsRUFBQUUsRUFBQSxFQUNwQjZLLEdBQVcsQ0FBQyxNQUFPLFNBQVUsbUJBQWtCLEtBQUEsRUFBTSxPQUFuRXlWLEVBQUl4Z0IsRUFBQWMsRUFBMkR3SCxPQUFJdEksRUFBQUUsRUFBQSxFQUNyRDhMLEdBQUcsQ0FBQyxPQUFRLE9BQVEsU0FBVSxtQkFBb0IsT0FBUSwyQkFBMEIsS0FBQSxFQW9CbkUsT0FwQi9CeVUsRUFBSXpnQixFQUFBYyxFQUFnR3dILE9BRXJHa1ksR0FDSGxXLEdBQWMsNkNBRVhtVyxHQUNIblcsR0FBYyw2Q0FFWmtXLElBQVNDLEdBQ1huVyxHQUFhLGdEQUFBMUksT0FBaUQ2ZSxRQUcxREMsRUFBYSxDQUFDLEtBQU0sU0FBVSxTQUFVRCxFQUFNLFNBQVVELEVBQU0sVUFDaEVuQixHQUNGcUIsRUFBV3BiLEtBQUssVUFBVytaLEdBRXpCRyxHQUNGa0IsRUFBV3BiLEtBQUssY0FBZSxLQUdqQzhFLEdBQVMsNEJBQTRCcEssRUFBQUUsRUFBQSxFQUMvQjhMLEdBQUcwVSxFQUFZbEIsR0FBSyxLQUFBLEVBR3BCLE9BSG9CemEsRUFFbkI2SixHQUFRNUksRUFDYnNJLEtBQUl0TyxFQUFBRSxFQUFBLEVBQWE4TCxHQUFHLENBQUMsS0FBTSxPQUFRLFNBQVUscUVBQW9FLEtBQUEsRUFBQSxPQUFBaE0sRUFBQTZCLEVBQUEsRUFBQWtELEVBQUFpQixFQUE1R3VJLE1BQUsvRixLQUFBeEMsRUFBQWhHLEVBQUFjLEtBQUEsRUFBQTdCLEVBQUEsS0FFYk4sTUFBQUMsS0FBQUMsVUFBQSxDQUVELFNBQXNCOGhCLEdBQVFsaUIsR0FBQSxPQUFBbWlCLEdBQUFqaUIsTUFBQUMsS0FBQUMsVUFBQSxDQUs3QixTQUFBK2hCLEtBQUEsT0FBQUEsR0FBQTloQixFQUFBQyxJQUFBQyxFQUxNLFNBQUFtRixFQUFBME8sR0FBQSxJQUFBMk0sRUFBQUgsRUFBQXJQLEVBQUEsT0FBQWpSLElBQUFnQixFQUFBLFNBQUFpRixHQUFBLGNBQUFBLEVBQUE5RSxHQUFBLEtBQUEsRUFBcUMsT0FBWHNmLEVBQUkzTSxFQUFKMk0sS0FBTUgsRUFBS3hNLEVBQUx3TSxNQUFLcmEsRUFBQTlFLEVBQUEsRUFDbkJnTixLQUFpQixLQUFBLEVBRVUsT0FGNUM4QyxFQUFRaEwsRUFBQWxFLEVBRWRzSixHQUFRLDBCQUFBeEksT0FBMkJvTyxVQUFlaEwsRUFBQTlFLEVBQUEsRUFDckMyZ0IsR0FBTzdRLEVBQVUsQ0FBQyxVQUFXcVAsRUFBTyxjQUFlLEtBQU1HLEdBQUssS0FBQSxFQUFBLE9BQUF4YSxFQUFBbkQsRUFBQSxFQUFBbUQsRUFBQWxFLEdBQUEsRUFBQXFELEVBQUEsS0FDNUV4RixNQUFBQyxLQUFBQyxVQUFBLENBQUEsU0FFY2dpQixHQUFNN2MsRUFBQUMsRUFBQTJCLEdBQUEsT0FBQWtiLEdBQUFuaUIsTUFBQUMsS0FBQUMsVUFBQSxDQUFBLFNBQUFpaUIsS0FjcEIsT0Fkb0JBLEdBQUFoaUIsRUFBQUMsSUFBQUMsRUFBckIsU0FBQW1ILEVBQXNCNkosRUFBa0IrUSxFQUFvQnZWLEdBQWtCLElBQUEzQyxFQUFBdU4sRUFBQSxPQUFBclgsSUFBQWdCLEVBQUEsU0FBQXFHLEdBQUEsY0FBQUEsRUFBQWxHLEdBQUEsS0FBQSxFQUFBLE9BQUFrRyxFQUFBbEcsRUFBQSxFQUN0RThMLEdBQUUsQ0FBRSxLQUFNLE9BQVFnRSxHQUFRcE8sT0FBQXVLLEVBQUs0VSxJQUFXdlYsR0FBVSxLQUFBLEVBR3BELE9BSG9EM0MsRUFFbkQrRixHQUFRd0gsRUFDYjlILEtBQUlsSSxFQUFBbEcsRUFBQSxFQUNJOEwsR0FBRyxDQUNQLEtBQ0EsT0FDQWdFLEVBQ0EsU0FDQSwwRUFDQSxLQUFBLEVBQUEsT0FBQTVKLEVBQUF2RSxFQUFBLEVBQUFnSCxFQUFBdU4sRUFQQzdILE1BQUsvRixLQUFBNE4sRUFBQWhRLEVBQUF0RixLQUFBLEVBQUFxRixFQUFBLEtBVWJ4SCxNQUFBQyxLQUFBQyxVQUFBLENDdURELFNBQXNCbWlCLEtBQW9CLE9BQUFDLEdBQUF0aUIsTUFBQUMsS0FBQUMsVUFBQSxDQVV6QyxTQUFBb2lCLEtBQUEsT0FBQUEsR0FBQW5pQixFQUFBQyxJQUFBQyxFQVZNLFNBQUFDLElBQUEsSUFBQTZMLEVBQUErSyxFQUFBcUwsRUFBQXJULEVBQUFDLEVBQUFDLEVBQUFvVCxFQUFBM0IsRUFBQSxPQUFBemdCLElBQUFnQixFQUFBLFNBQUFDLEdBQUEsY0FBQUEsRUFBQUUsR0FBQSxLQUFBLEVBQUEsT0FBQUYsRUFBQUUsRUFBQSxFQUNleUssR0FBc0IsMENBQXlDLEtBQUEsRUFHbkYsSUFITUcsRUFBSzlLLEVBQUFjLEVBQ0wrVSxFQUFVdUwsR0FBZ0J0VyxHQUMxQm9XLEVBQTRDLENBQUEsRUFDbERyVCxJQUFBQyxFQUErQk0sT0FBT0MsUUFBUXdILEVBQVF3TCxTQUFReFQsRUFBQUMsRUFBQXpMLE9BQUF3TCxJQUFFRSxFQUFBdk0sRUFBQXNNLEVBQUFELEdBQUEsR0FBcERzVCxFQUFRcFQsRUFBQSxHQUNFLGlCQURBeVIsRUFBSXpSLEVBQUEsS0FDUXlSLEVBQUtuZCxPQUFTLElBQzVDNmUsRUFBa0JDLEdBQVkzQixHQUVqQyxPQUFBeGYsRUFBQTZCLEVBQUEsRUFDTXFmLEdBQWlCLEVBQUFqaUIsRUFBQSxLQUN6Qk4sTUFBQUMsS0FBQUMsVUFBQSxDQUVELFNBQXNCeWlCLEdBQXFCOWlCLEVBQUFDLEVBQUF1RixFQUFBQyxFQUFBMkIsR0FBQSxPQUFBMmIsR0FBQTVpQixNQUFBQyxLQUFBQyxVQUFBLENBZ0QxQyxTQUFBMGlCLEtBQUEsT0FBQUEsR0FBQXppQixFQUFBQyxJQUFBQyxFQWhETSxTQUFBbUYsRUFDTHdKLEVBQ0FiLEVBQ0FDLEVBQ0FpRCxFQUNBd1IsR0FBNEQsSUFBQXBELEVBQUFxRCxFQUFBQyxFQUFBQyxFQUFBaGQsRUFBQUMsRUFBQWdkLEVBQUE3YyxFQUFBaUIsRUFBQTZDLEVBQUF1TixFQUFBQyxFQUFBLE9BQUF0WCxJQUFBZ0IsRUFBQSxTQUFBaUYsR0FBQSxjQUFBQSxFQUFBL0UsRUFBQStFLEVBQUE5RSxHQUFBLEtBQUEsRUFBQSxPQUFBOEUsRUFBQTlFLEVBQUEsRUFNbERvTixHQWNISyxFQUFPLENBQ1JiLE1BQUFBLEVBQ0FDLEtBQUFBLEVBQ0EyTixPQUFRNkQsT0FBT3ZPLEdBQ2ZvTyxPQUFBQSxJQUNBLEtBQUEsRUFDRSxHQURGdlYsRUFBQTRZLEVBQUF6YyxFQUFBbEUsRUFDRitOLEtBQUk3SSxFQUFBLE1BQUE2QyxFQUFBLENBQUE3RCxFQUFBOUUsRUFBQSxFQUFBLEtBQUEsQ0FBQThGLEVBQVksT0FBWnliLEVBckJnQkEsRUFxQmR4RixZQUFVLEtBQUEsRUFBQSxHQUFBbFgsRUFBQWlCLEVBQUEsQ0FBQWhCLEVBQUE5RSxFQUFBLEVBQUEsS0FBQSxDQUFBNkUsRUFBYSxPQUFiMGMsRUFyQklBLEVBcUJGM0csYUFBVyxLQUFBLEVBQUEsSUFBQS9WLEVBQUEsQ0FBQUMsRUFBQTlFLEVBQUEsRUFBQSxLQUFBLENBQUFrVyxPQUFBLEVBQUFwUixFQUFBOUUsRUFBQSxFQUFBLE1BQUEsS0FBQSxFQUFBa1csRUFyQlRxTCxFQXFCV0UsY0FBYSxLQUFBLEdBckJ4Q0EsRUFBYXZMLElBd0JqQjlMLEdBQ0UsK0dBRUgzRixFQUFBakMsRUFFb0JpZixFQUFjbkQsT0FBS3haLEVBQUEvRSxFQUFBLEVBQUEwRSxFQUFBMUIsSUFBQSxLQUFBLEVBQUEsSUFBQTJCLEVBQUFELEVBQUF6RSxLQUFBZ0QsS0FBQSxDQUFBOEIsRUFBQTlFLEVBQUEsRUFBQSxLQUFBLENBQXZCLE9BQU4waEIsRUFBTWhkLEVBQUEvQixNQUFBbUMsRUFBQTlFLEVBQUEsRUFDVHNoQixFQUFTSSxHQUFPLEtBQUEsRUFBQTVjLEVBQUE5RSxFQUFBLEVBQUEsTUFBQSxLQUFBLEVBQUE4RSxFQUFBOUUsRUFBQSxHQUFBLE1BQUEsS0FBQSxHQUFBOEUsRUFBQS9FLEVBQUEsR0FBQW9XLEVBQUFyUixFQUFBbEUsRUFBQTZELEVBQUF0QixFQUFBZ1QsR0FBQSxLQUFBLEdBQUEsT0FBQXJSLEVBQUEvRSxFQUFBLEdBQUEwRSxFQUFBMUMsSUFBQStDLEVBQUEvQyxFQUFBLElBQUEsS0FBQSxHQUFBLEdBR25CMGYsRUFBY2pELFNBQVNDLFlBQVcsQ0FBQTNaLEVBQUE5RSxFQUFBLEdBQUEsS0FBQSxDQUFBLE9BQUE4RSxFQUFBbkQsRUFBQSxHQUFBLEtBQUEsR0FHdkN1YyxFQUF5QyxPQUFuQ3NELEVBQUdDLEVBQWNqRCxTQUFTRSxXQUFTOEMsT0FBSS9ZLEVBQVUsS0FBQSxHQUFBM0QsRUFBQTlFLEVBQUEsRUFBQSxNQUFBLEtBQUEsR0FBQSxPQUFBOEUsRUFBQW5ELEVBQUEsR0FBQSxFQUFBc0MsRUFBQSxLQUFBLENBQUEsQ0FBQSxFQUFBLEdBQUEsR0FBQSxLQUFBLEtBRTFEeEYsTUFBQUMsS0FBQUMsVUFBQSxDQUVELFNBQXNCZ2pCLEdBQXlCeFYsRUFBQUMsRUFBQUMsR0FBQSxPQUFBdVYsR0FBQW5qQixNQUFBQyxLQUFBQyxVQUFBLENBWTlDLFNBQUFpakIsS0FBQSxPQUFBQSxHQUFBaGpCLEVBQUFDLElBQUFDLEVBWk0sU0FBQW1ILEVBQ0wyRyxFQUNBQyxFQUNBaUQsR0FBeUIsSUFBQStSLEVBQUEsT0FBQWhqQixJQUFBZ0IsRUFBQSxTQUFBcUcsR0FBQSxjQUFBQSxFQUFBbEcsR0FBQSxLQUFBLEVBRUQsT0FBbEI2aEIsRUFBZ0IsR0FBRTNiLEVBQUFsRyxFQUFBLEVBQ2xCb2hCLEdBdkZxQixxWkF1RjBCeFUsRUFBT0MsRUFBTWlELEVBQVUsU0FBQzRSLEdBQ3RFQSxFQUFPSSxZQUNWRCxFQUFJemMsS0FBS3NjLEVBQU9LLEdBRXBCLEdBQUUsS0FBQSxFQUFBLE9BQUE3YixFQUFBdkUsRUFBQSxFQUNLa2dCLEdBQUcsRUFBQTViLEVBQUEsS0FDWHhILE1BQUFDLEtBQUFDLFVBQUEsQ0FFRCxTQUFzQnFqQixHQUF1QjNVLEVBQUFDLEVBQUE4UCxHQUFBLE9BQUE2RSxHQUFBeGpCLE1BQUFDLEtBQUFDLFVBQUEsQ0F3RDVDLFNBQUFzakIsS0FBQSxPQUFBQSxHQUFBcmpCLEVBQUFDLElBQUFDLEVBeERNLFNBQUFtSSxFQUNMMkYsRUFDQUMsRUFDQWlELEdBQXlCLElBQUFvUyxFQUFBLE9BQUFyakIsSUFBQWdCLEVBQUEsU0FBQXFILEdBQUEsY0FBQUEsRUFBQWxILEdBQUEsS0FBQSxFQUVvQixPQUF2Q2tpQixFQUFxQyxHQUFFaGIsRUFBQWxILEVBQUEsRUFFdkNvaEIsR0FwS2lCLHEzQkFvSzBCeFUsRUFBT0MsRUFBTWlELEVBQVFsUixFQUFBQyxJQUFBQyxFQUFFLFNBQUErSCxFQUFPNmEsR0FBTSxJQUFBUyxFQUFBaEcsRUFBQXFDLEVBQUFOLEVBQUFrRSxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBLE9BQUE1akIsSUFBQWdCLEVBQUEsU0FBQWlILEdBQUEsY0FBQUEsRUFBQTlHLEdBQUEsS0FBQSxFQUFBLElBQy9FMGhCLEVBQU9JLFdBQVUsQ0FBQWhiLEVBQUE5RyxFQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUE4RyxFQUFBbkYsRUFBQSxHQUFBLEtBQUEsRUFJZndhLEVBQVd1RixFQUFPdkYsU0FBU21DLE1BQU14VyxJQUFJNGEsSUFDdkNsRSxFQUFXa0QsRUFBT3ZGLFNBQVNxQyxTQUMzQk4sRUFBMkIsT0FBckJpRSxFQUFHM0QsRUFBU0UsV0FBU3lELE9BQUkxWixFQUFTLEtBQUEsRUFBQSxJQUVyQytWLEVBQVNDLFlBQVcsQ0FBQTNYLEVBQUE5RyxFQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUE4RyxFQUFBOUcsRUFBQSxFQUVqQm9OLEdBeElZLHFiQW9KTyxDQUFFNlQsU0FBVVMsRUFBT0ssR0FBSTdELE9BQUFBLElBQVMsS0FBQSxFQUNyRCxHQURxRHNFLEVBQUFKLEVBQUF0YixFQUFBbEcsRUFDekQrTixLQUFJNFQsRUFBQSxNQUFBQyxFQUFBLENBQUExYixFQUFBOUcsRUFBQSxFQUFBLEtBQUEsQ0FBQXVpQixFQUFNLE9BQU5ILEVBZG9CQSxFQWNsQk8sTUFBSSxLQUFBLEVBQUEsSUFBQUosRUFBQSxDQUFBemIsRUFBQTlHLEVBQUEsRUFBQSxLQUFBLENBQUF5aUIsT0FBQSxFQUFBM2IsRUFBQTlHLEVBQUEsRUFBQSxNQUFBLEtBQUEsRUFBQXlpQixFQWRjTCxFQWNaakcsU0FBUSxLQUFBLEdBZGhCbUcsRUFBaUJHLElBaUJyQnJZLDZEQUFhMUksT0FBMkRnZ0IsRUFBT0ssU0FHakY1RixFQUFTL1csS0FBSTNHLE1BQWIwZCxFQUFRbFEsRUFBU3FXLEVBQWtCaEUsTUFBTXhXLElBQUk0YSxNQUM3Q2xFLEVBQVc4RCxFQUFrQjlELFNBQzdCTixFQUEyQixPQUFyQm1FLEVBQUc3RCxFQUFTRSxXQUFTMkQsT0FBSTVaLEVBQVUzQixFQUFBOUcsRUFBQSxFQUFBLE1BQUEsS0FBQSxFQUczQ2tpQixFQUFROWMsS0FBSyxDQUNYMmMsR0FBSUwsRUFBT0ssR0FDWEQsV0FBWUosRUFBT0ksV0FDbkJjLFdBQVlsQixFQUFPa0IsV0FDbkJDLEtBQU1uQixFQUFPbUIsS0FDYnRLLEtBQU1tSixFQUFPbkosS0FDYnVLLGFBQWNwQixFQUFPb0IsYUFDckJDLFVBQVdyQixFQUFPcUIsVUFDbEJDLGtCQUFtQnRCLEVBQU9zQixrQkFDMUI3RyxTQUFBQSxJQUNDLEtBQUEsRUFBQSxPQUFBclYsRUFBQW5GLEVBQUEsR0FBQSxFQUFBa0YsRUFBQSxLQUNILEtBQUEsRUFBQSxPQUFBSyxFQUFBdkYsRUFBQSxFQUVLdWdCLEdBQU8sRUFBQWpiLEVBQUEsS0FDZnhJLE1BQUFDLEtBQUFDLFVBQUEsQ0FFRCxTQUFzQnNrQixLQUFtQixPQUFBQyxHQUFBemtCLE1BQUFDLEtBQUFDLFVBQUEsQ0FNeEMsU0FBQXVrQixLQUFBLE9BQUFBLEdBQUF0a0IsRUFBQUMsSUFBQUMsRUFOTSxTQUFBOEcsSUFBQSxJQUFBd1UsRUFBQUMsRUFBQXpOLEVBQUFDLEVBQUFpRCxFQUFBcVQsRUFBQUMsRUFBQSxPQUFBdmtCLElBQUFnQixFQUFBLFNBQUFrRyxHQUFBLGNBQUFBLEVBQUEvRixHQUFBLEtBQUEsRUFBQSxPQUFBK0YsRUFBQS9GLEVBQUEsRUFDdUJ1TSxLQUFrQixLQUFBLEVBQTVCLE9BQTRCNk4sRUFBQXJVLEVBQUFuRixFQUFBeVosRUFBQS9ZLEVBQUE4WSxFQUFBLEdBQXZDeE4sRUFBS3lOLEVBQUEsR0FBRXhOLEVBQUl3TixFQUFBLEdBQUF0VSxFQUFBL0YsRUFBQSxFQUNLZ04sS0FBaUIsS0FBQSxFQUd6QixPQUhUOEMsRUFBUS9KLEVBQUFuRixFQUVkc0osR0FBUyx5Q0FBeUNpWixFQUMzQ3pVLEdBQVEzSSxFQUFBL0YsRUFBQSxFQUE2QmdpQixHQUF3QnBWLEVBQU9DLEVBQU1pRCxHQUFTLEtBQUEsRUFBQSxPQUFBc1QsRUFBQXJkLEVBQUFuRixFQUFBbUYsRUFBQXBFLEVBQUEsRUFBQXdoQixFQUFBLENBQXhFRSxtQkFBa0JELEtBQUEsRUFBQXhkLEVBQUEsS0FDckNuSCxNQUFBQyxLQUFBQyxVQUFBLENBRUQsU0FBc0Iya0IsR0FBc0JqRyxHQUFBLE9BQUFrRyxHQUFBOWtCLE1BQUFDLEtBQUFDLFVBQUEsQ0FzRDNDLFNBQUE0a0IsS0FBQSxPQUFBQSxHQUFBM2tCLEVBQUFDLElBQUFDLEVBdERNLFNBQUFvTyxFQUFzQ2lVLEdBQStCLElBQUFoRyxFQUFBQyxFQUFBeE8sRUFBQUMsRUFBQWlELEVBQUEwVCxFQUFBQyxFQUFBdFYsRUFBQTVMLEVBQUFELEVBQUF3WixFQUFBNEgsRUFBQUMsRUFBQUMsRUFBQTNDLEVBQUEzQixFQUFBdlIsRUFBQThWLEVBQUFDLEVBQUFDLEVBQUEsT0FBQWxsQixJQUFBZ0IsRUFBQSxTQUFBaU4sR0FBQSxjQUFBQSxFQUFBL00sRUFBQStNLEVBQUE5TSxHQUFBLEtBQUEsRUFBQSxPQUFBOE0sRUFBQTlNLEVBQUEsRUFDOUN1TSxLQUFrQixLQUFBLEVBQTVCLE9BQTRCNE8sRUFBQXJPLEVBQUFsTSxFQUFBd2EsRUFBQTlaLEVBQUE2WixFQUFBLEdBQXZDdk8sRUFBS3dPLEVBQUEsR0FBRXZPLEVBQUl1TyxFQUFBLEdBQUF0TyxFQUFBOU0sRUFBQSxFQUNLZ04sS0FBaUIsS0FBQSxFQUNYLE9BRHZCOEMsRUFBUWhELEVBQUFsTSxFQUFBaWpCLEVBQ1kxbEIsSUFBRzJPLEVBQUE5TSxFQUFBLEVBQU8yaEIsR0FBMEIvVSxFQUFPQyxFQUFNaUQsR0FBUyxLQUFBLEVBQUFnVSxFQUFBaFgsRUFBQWxNLEVBQTlFNGlCLEVBQWEsSUFBQUssRUFBQUMsR0FFbkI1WixHQUFRLGVBQUF4SSxPQUFnQndNLE9BQU9pRSxLQUFLZ1AsR0FBU2hmLE9BQU0sdUJBRTdDc2hCLEVBQThCLEdBQzlCdFYsRUFBVUQsT0FBT0MsUUFBUWdULEdBQVE1ZSxFQUFBQyxFQUVDMkwsRUFBUUEsV0FBU3JCLEVBQUEvTSxFQUFBLEVBQUF3QyxFQUFBUSxJQUFBLEtBQUEsRUFBQSxJQUFBVCxFQUFBQyxFQUFBdkMsS0FBQWdELEtBQUEsQ0FBQThKLEVBQUE5TSxFQUFBLEVBQUEsS0FBQSxDQUNZLEdBRFowakIsRUFBQXBpQixFQUFBZ0IsRUFBQUssTUFBQSxHQUE3Q2doQixFQUFLRCxFQUFBLEdBQUFFLEVBQUF0aUIsRUFBQW9pQixFQUFBLEdBQUEsR0FBR3pDLEVBQVEyQyxFQUFBLEdBQUV0RSxFQUFJc0UsRUFBQSxHQUNoQzFaLGlCQUFReEksT0FBZWlpQixFQUFRLEVBQUMsS0FBQWppQixPQUFJeU0sRUFBUWhNLE9BQU0sTUFBQVQsT0FBS3VmLElBQ2xEdUMsRUFBY1EsSUFBSS9DLEdBQVMsQ0FBQW5VLEVBQUE5TSxFQUFBLEVBQUEsS0FBQSxDQUFBLE9BQUE4TSxFQUFBbkwsRUFBQSxFQUFBLEdBQUEsS0FBQSxFQUFBLE9BQUFtTCxFQUFBOU0sRUFBQSxFQUlUb04sR0FBTyx3YUEwQjVCLENBQUU2VCxTQUFBQSxFQUFVM0IsS0FBQUEsSUFDYixLQUFBLEVBM0JLdlIsRUFBUWpCLEVBQUFsTSxFQTZCRyxPQUFqQmtiLEVBQUkvTixFQUFTWSxPQUF5QixPQUFyQm1OLEVBQWJBLEVBQWVtSSxzQkFBMkIsT0FBUm5JLEVBQWxDQSxFQUFvQzRGLFNBQXBDNUYsRUFBNENnRyxXQUM5QzJCLEVBQWtCcmUsS0FBSzZiLEdBRXZCL1csR0FBUSxxQ0FBQXhJLE9BQXNDdWYsUUFDL0MsS0FBQSxFQUFBblUsRUFBQTlNLEVBQUEsRUFBQSxNQUFBLEtBQUEsRUFBQThNLEVBQUE5TSxFQUFBLEdBQUEsTUFBQSxLQUFBLEdBQUE4TSxFQUFBL00sRUFBQSxHQUFBZ2tCLEVBQUFqWCxFQUFBbE0sRUFBQTJCLEVBQUFZLEVBQUE0Z0IsR0FBQSxLQUFBLEdBQUEsT0FBQWpYLEVBQUEvTSxFQUFBLEdBQUF3QyxFQUFBUixJQUFBK0ssRUFBQS9LLEVBQUEsSUFBQSxLQUFBLEdBR2UsT0FBbEJtSSxHQUFTLFNBQVM0QyxFQUFBbkwsRUFBQSxFQUNYK00sR0FBUyxDQUFFd1Ysb0JBQXFCVCxLQUFvQixFQUFBdlcsRUFBQSxLQUFBLENBQUEsQ0FBQSxFQUFBLEdBQUEsR0FBQSxLQUFBLEtBQzVEek8sTUFBQUMsS0FBQUMsVUFBQSxDQUVELFNBQVMrakIsR0FBdUJuRCxHQUE0RSxJQUFBQyxFQUFBQyxFQUMxRyxPQUFBcEosRUFBQUEsRUFBQSxDQUFBLEVBQ0trSixHQUFPLENBQUEsRUFBQSxDQUNWSCxPQUFrQyxpQkFBbkJHLEVBQVFILE9BQXNCRyxFQUFRSCxPQUErQixPQUF6QkksRUFBa0IsT0FBbEJDLEVBQUlGLEVBQVFILGFBQU0sRUFBZEssRUFBZ0JKLE9BQUtHLEVBQUksTUFFNUYsQ0FFQSxTQUFTMEIsR0FBZ0J0VyxHQUd2QixJQUNFLElBQU11WixFQUFTL1YsS0FBS0MsTUFBTXpELEdBSTFCLE9BU0osU0FBc0JqSSxHQUNwQixHQUFxQixXQUFqQnloQixFQUFPemhCLElBQWdDLE9BQVZBLEdBQWtCMkwsTUFBTUMsUUFBUTVMLEdBQy9ELE9BQU8sRUFHVCxJQUFNd2UsRUFBV3hlLEVBQWdDd2UsUUFDakQsR0FBdUIsV0FBbkJpRCxFQUFPakQsSUFBb0MsT0FBWkEsR0FBb0I3UyxNQUFNQyxRQUFRNFMsR0FDbkUsT0FBTyxFQUdULE9BQU9qVCxPQUFPcUYsT0FBTzROLEdBQVNrRCxNQUFNLFNBQUNDLEdBQUssT0FBS0EsU0FBMEQsaUJBQVZBLENBQWtCLEVBQ25ILENBdkJTQyxDQUFhSixJQUNoQi9aLE1BQWExSSxPQUxHLHVDQUtZLDJEQUE2RCxHQUVwRnlpQixDQUNULENBQUUsTUFBT2hlLEdBSVAsTUFISUEsYUFBaUJvSyxhQUNuQm5HLEdBQWEsMENBQUExSSxPQUEyQ3lFLEVBQU1uRSxTQUFXLEdBRXJFbUUsQ0FDUixDQUNGLENDaFZBLFNBQXNCcWUsR0FBZWxtQixHQUFBLE9BQUFtbUIsR0FBQWhtQixNQUFBQyxLQUFBQyxVQUFBLENBOENwQyxTQUFBOGxCLEtBQUEsT0FBQUEsR0FBQTdsQixFQUFBQyxJQUFBQyxFQTlDTSxTQUFBQyxFQUErQm9iLEdBQW1CLElBQUF1SyxFQUFBLE9BQUE3bEIsSUFBQWdCLEVBQUEsU0FBQUMsR0FBQSxjQUFBQSxFQUFBRSxHQUFBLEtBQUEsRUFBQSxPQUFBRixFQUFBRSxFQUFBLEVBQy9CaWEsR0FBbUJFLEdBQVksS0FBQSxFQUF4QyxPQUFUdUssRUFBUzVrQixFQUFBYyxFQUFBZCxFQUFBNkIsRUFBQSxFQUVSLDBMQUFBRCxPQUVxQnlZLEVBQVcsNERBQUF6WSxPQUV2Q2dqQixFQUFVdGMsT0FBTSx1MENBQUExRyxPQWdCeUJ5WSxFQUFXLDBwQkFzQnBEL1IsUUFBTSxFQUFBckosRUFBQSxLQUNQTixNQUFBQyxLQUFBQyxVQUFBLENDaERNLFNBQVNnbUIsR0FBc0JoTCxHQUNwQyxNQUFBLGtCQUFBalksT0FBeUJrakIsR0FBVSxVQUFBbGpCLE9BQVdpWSw0Q0FBYWpZLE9BQXVDa2pCLEdBQVdqTCxHQUFXLFFBQzFILENBRUEsU0FBU2lMLEdBQVdqaUIsR0FDbEIsTUFBQSxJQUFBakIsT0FBV2lCLEVBQU1raUIsV0FBVyxJQUFLLFdBQVUsSUFDN0MsQ0NEQSxTQUFzQkMsS0FBaUIsT0FBQUMsR0FBQXRtQixNQUFBQyxLQUFBQyxVQUFBLENBeUJ0QyxTQUFBb21CLEtBQUEsT0FBQUEsR0FBQW5tQixFQUFBQyxJQUFBQyxFQXpCTSxTQUFBQyxJQUFBLElBQUE0YSxFQUFBcUwsRUFBQUMsRUFBQSxPQUFBcG1CLElBQUFnQixFQUFBLFNBQUFDLEdBQUEsY0FBQUEsRUFBQUUsR0FBQSxLQUFBLEVBQUEsT0FBQUYsRUFBQUUsRUFBQSxFQUNvQm1aLEtBQW1CLEtBQUEsRUFDYyxPQURwRFEsRUFBVTdaLEVBQUFjLEVBQ1Zva0IsRUFBbUJMLEdBQXNCaEwsR0FBVzdaLEVBQUFFLEVBQUEsRUFDbEMrYSxLQUFtQyxLQUFBLEVBQTVDLE9BQVRrSyxFQUFTbmxCLEVBQUFjLEVBQUFkLEVBQUE2QixFQUFBLEVBQ1Isd0JBQUFELE9BQ1l1akIsRUFBWSxlQUFpQixTQUFRLDZCQUFBdmpCLE9BQTRCaVksRUFBVSxzQkFBQWpZLE9BQXNCc2pCLEVBQWdCLHdwREFBQXRqQixPQWdCNUV5RixFQUFrQixTQUFBekYsT0FFMUV3akIsR0FBMkJELEdBQVUsTUFDckM3YyxRQUFNLEVBQUFySixFQUFBLEtBQ1BOLE1BQUFDLEtBQUFDLFVBQUEsQ0FFRCxTQUFTdW1CLEdBQTJCRCxHQUNsQyxPQUFPQSxFQUNILDRDQUFBdmpCLE9BRUp1akIsRUFBVTdjLE9BQU0sWUFFaEJBLE9BQ0ksRUFDTixDQ3hDTyxTQUFTK2MsR0FBc0JDLEVBQW9CQyxFQUFrQkMsR0FDMUUsSUFBTUMsRUFBdUJELEVBQXNCVCxXQUFXLEtBQU0sS0FBS0EsV0FBVyxJQUFLLEtBQ3pGLE1BQU8seURBQUFuakIsT0FDK0M2akIsRUFBb0IseUJBQUE3akIsT0FBd0IwakIsRUFBVSxTQUFBMWpCLE9BQVEyakIsRUFBUSxrRUFBQTNqQixPQUdoRzBqQixFQUFVLGlGQUFBMWpCLE9BQ29DMmpCLEVBQVEsa1dBQUEzakIsT0FHNUI2akIsRUFBb0IsdUxBRTFFbmQsTUFDRixDQ1RBLFNBQXNCb2QsS0FBbUIsT0FBQUMsR0FBQWhuQixNQUFBQyxLQUFBQyxVQUFBLENBa0J4QyxTQUFBOG1CLEtBQUEsT0FBQUEsR0FBQTdtQixFQUFBQyxJQUFBQyxFQWxCTSxTQUFBQyxJQUFBLElBQUE0YSxFQUFBcUwsRUFBQUMsRUFBQSxPQUFBcG1CLElBQUFnQixFQUFBLFNBQUFDLEdBQUEsY0FBQUEsRUFBQUUsR0FBQSxLQUFBLEVBQUEsT0FBQUYsRUFBQUUsRUFBQSxFQUNvQm1aLEtBQW1CLEtBQUEsRUFDYyxPQURwRFEsRUFBVTdaLEVBQUFjLEVBQ1Zva0IsRUFBbUJMLEdBQXNCaEwsR0FBVzdaLEVBQUFFLEVBQUEsRUFDbEMrYSxLQUFtQyxLQUFBLEVBQTVDLE9BQVRrSyxFQUFTbmxCLEVBQUFjLEVBQUFkLEVBQUE2QixFQUFBLEVBQ1IsMEJBQUFELE9BQ2N1akIsRUFBWSxlQUFpQixTQUFRLGdEQUFBdmpCLE9BQWdEc2pCLEVBQWdCLHcvQkFBQXRqQixPQVcxSHVqQixFQUFTLDRDQUFBdmpCLE9BQStDdWpCLEVBQVU3YyxPQUFNLFVBQVcsR0FBRSxNQUNyRkEsUUFBTSxFQUFBckosRUFBQSxLQUNQTixNQUFBQyxLQUFBQyxVQUFBLENDbkJELFNBQXNCK21CLEtBQW1CLE9BQUFDLEdBQUFsbkIsTUFBQUMsS0FBQUMsVUFBQSxDQXNCeEMsU0FBQWduQixLQUFBLE9BQUFBLEdBQUEvbUIsRUFBQUMsSUFBQUMsRUF0Qk0sU0FBQUMsSUFBQSxPQUFBRixJQUFBZ0IsRUFBQSxTQUFBQyxHQUFBLGNBQUFBLEVBQUFFLEdBQUEsS0FBQSxFQUFBLE9BQUFGLEVBQUFFLEVBQUEsRUFDQzNCLEVBQ0osQ0FDRSxPQUNBLGdCQUNBLE1BQ0F1bkIsRUFBYyxJQUFJQyxJQUFJLG9CQUFxQnZPLE1BQzNDLFdBQ0EsUUFDQSxVQUNBLElBQ0EsVUFDQSxjQUNBLFVBQ0EsUUFDQSxVQUNBLGNBRUYsQ0FDRTlXLFlBQWEseUNBRWhCLEtBQUEsRUFBQSxPQUFBVixFQUFBNkIsRUFBQSxHQUFBLEVBQUE1QyxFQUFBLEtBQ0ZOLE1BQUFDLEtBQUFDLFVBQUEsQ0NHRCxJQUFNbW5CLEdBQVUsSUFBSUMsRUEyTHBCLFNBQVNDLEdBQW1EL0gsR0FTMUQsSUFBTWpmLEVBQVU4bUIsR0FBUTltQixRQUFRaWYsRUFBT3BSLE1BQU1vWixZQUFZaEksRUFBT2dJLGFBQWFDLHNCQUFxQixHQUM5RmpJLEVBQU9rSSxjQUNUbm5CLEVBQVFvbkIsU0FBU25JLEVBQU9rSSxhQUFjbEksRUFBT29JLHFCQUcvQ3JuQixFQUNHc25CLFVBQVUsSUFBSUMsRUFBTyxrQkFBbUJ0SSxFQUFPdUksbUJBQW1CQyxRQUFReEksRUFBT3dJLFNBQVNDLHVCQUMxRkMsT0FBTS9uQixFQUFBQyxJQUFBQyxFQUFDLFNBQUErZixJQUFBLElBQUErSCxFQUFBNWEsRUFBQTZhLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFaLEVBQUFubkIsRUFBQTZHLEVBQUFtaEIsRUFBQXRvQixVQUFBLE9BQUFFLElBQUFnQixFQUFBLFNBQUFxZixHQUFBLGNBQUFBLEVBQUFsZixHQUFBLEtBQUEsRUFBQSxJQUFBNG1CLEVBQUFLLEVBQUE5a0IsT0FBVTZKLEVBQUksSUFBQXNDLE1BQUFzWSxHQUFBQyxFQUFBLEVBQUFBLEVBQUFELEVBQUFDLElBQUo3YSxFQUFJNmEsR0FBQUksRUFBQUosR0FJTixPQUhnQ0MsRUFBQXhsQixFQUFKMEssRUFBSSxHQUF2QythLEVBQWlCRCxFQUFBLEdBQUVFLEVBQVlGLEVBQUEsR0FDaENWLEVBQXdDLGlCQUF0QlcsRUFBaUNBLEVBQW9CLEdBQ3ZFOW5CLEVBQXdDLGlCQUF0QjhuQixFQUFpQ0MsRUFBZUQsRUFBaUJqaEIsRUFDekZsRCxRQUFRbkQsT0FBTXlmLEVBQUFsZixFQUFBLEVBQWFpZSxFQUFPakgsSUFBSS9YLEVBQVE4SSxNQUFPcWUsR0FBUyxLQUFBLEVBQUF0Z0IsRUFBL0M3RSxNQUFLcUgsS0FBQXhDLEVBQUFvWixFQUFBdGUsR0FBQSxLQUFBLEVBQUEsT0FBQXNlLEVBQUF2ZCxFQUFBLEdBQUEsRUFBQWtkLEVBQUEsSUFFMUIsQ0FFQSxTQUFTcUksR0FDUHJhLEVBQ0FvWixFQUNBa0IsR0FRQSxJQUFNbm9CLEVBQVU4bUIsR0FBUTltQixRQUFRNk4sR0FBTW9aLFlBQVlBLEdBQWFDLHNCQUFxQixHQUV6RCxtQkFBaEJpQixFQU9Ybm9CLEVBQVFvbkIsU0FBU2UsRUFBWWhCLGFBQWNnQixFQUFZZCxxQkFBcUJNLE9BQU0vbkIsRUFBQUMsSUFBQUMsRUFBQyxTQUFBc29CLEVBQU9oQixHQUFnQixJQUFBbFEsRUFBQSxPQUFBclgsSUFBQWdCLEVBQUEsU0FBQXduQixHQUFBLGNBQUFBLEVBQUFybkIsR0FBQSxLQUFBLEVBQzFGLE9BRDBGa1csRUFDeEd0VCxRQUFRbkQsT0FBTTRuQixFQUFBcm5CLEVBQUEsRUFBYW1uQixFQUFZblEsSUFBSW9QLEdBQVMsS0FBQSxFQUFBbFEsRUFBckNqVixNQUFLcUgsS0FBQTROLEVBQUFtUixFQUFBem1CLEdBQUEsS0FBQSxFQUFBLE9BQUF5bUIsRUFBQTFsQixFQUFBLEdBQUEsRUFBQXlsQixFQUFBLEtBUHBCcG9CLEVBQVEybkIsT0FBTS9uQixFQUFBQyxJQUFBQyxFQUFDLFNBQUF3b0IsSUFBQSxJQUFBM2UsRUFBQSxPQUFBOUosSUFBQWdCLEVBQUEsU0FBQTBuQixHQUFBLGNBQUFBLEVBQUF2bkIsR0FBQSxLQUFBLEVBQ0MsT0FERDJJLEVBQ2IvRixRQUFRbkQsT0FBTThuQixFQUFBdm5CLEVBQUEsRUFBYW1uQixJQUFhLEtBQUEsRUFBQXhlLEVBQXpCMUgsTUFBS3FILEtBQUFLLEVBQUE0ZSxFQUFBM21CLEdBQUEsS0FBQSxFQUFBLE9BQUEybUIsRUFBQTVsQixFQUFBLEdBQUEsRUFBQTJsQixFQUFBLElBUTFCLENBeE9BeEIsR0FBUWpaLEtBQUssZ0JBQWdCb1osWUFBWSxrREFBa0R1QixxQkFFM0YxQixHQUNHOW1CLFFBQVEsa0JBQ1JpbkIsWUFBWSwrRUFDWkMsc0JBQXFCLEdBQ3JCUyxPQUFNL25CLEVBQUFDLElBQUFDLEVBQUMsU0FBQUMsSUFBQSxPQUFBRixJQUFBZ0IsRUFBQSxTQUFBQyxHQUFBLGNBQUFBLEVBQUFFLEdBQUEsS0FBQSxFQUFBLE9BQUFGLEVBQUFFLEVBQUEsRUFDQTBsQixLQUFxQixLQUFBLEVBQzNCOWlCLFFBQVFuRCxPQUFPd0IsTUFBTSxVQUFVLEtBQUEsRUFBQSxPQUFBbkIsRUFBQTZCLEVBQUEsR0FBQSxFQUFBNUMsRUFBQSxLQUduQ2luQixHQUE2QixDQUMzQm5aLEtBQU0sU0FDTm9aLFlBQWEsZ0VBQ2JPLGtCQUFtQixxQkFDbkJDLFFBQVMsQ0FBQyxNQUFPLFFBQVMsU0FBVSxVQUNwQ3pQLElBQUssU0FBQ3lRLEdBQUksTUFDQyxRQUFUQSxFQUNJbGdCLEVBQW9CdWQsS0FBcUIsQ0FDdkNsZCxlQUFnQixnQkFDaEJTLFVBQVcsU0FBQ04sRUFBT25JLEdBQ2pCLElka0NMLFNBQW1DQSxHQUN4QyxPQUFPeUgsRUFBbUNrSSxLQUFLM1AsRUFDakQsQ2NwQ2dCOG5CLENBQTBCOW5CLEdBRzlCLE1BQUEsTUFBQThCLE9BQWE2RyxFQUFpQlIsR0FBTSxRQUFBckcsT0FBTzlCLEVBQzdDLElBRUZ1SSxFQUFnQnNmLEVBQU0zQyxLQUFvQixJQUdsRG9DLEdBQWdCLGVBQWdCLDhDQUErQyxXQUFBLE9BQzdFL2UsRUFBZ0IsUUFBUzJjLEtBQW9CLEdBRS9Db0MsR0FBZ0IsZ0JBQWlCLG9EQUFxRCxXQUFBLE9BQ3BGL2UsRUFBZ0IsU0FBVTJjLEtBQW9CLEdBRWhEb0MsR0FBZ0IsZ0JBQWlCLG1EQUFvRCxXQUFBLE9BQ25GL2UsRUFBZ0IsU0FBVTJjLEtBQW9CLEdBR2hEa0IsR0FBNkIsQ0FDM0JuWixLQUFNLE9BQ05vWixZQUFhLG1FQUNiTyxrQkFBbUIsdUJBQ25CQyxRQUFTLENBQUMsTUFBTyxRQUFTLFNBQVUsVUFDcENOLGFBQWMsVUFDZEUsb0JBQXFCLDZCQUNyQnJQLElBQUssU0FBQ3lRLEVBQU1FLEdBQWMsTUFDZixRQUFURixFQUNJbGdCLEVBQW9CaWQsR0FBZ0IzSyxHQUFxQjhOLElBQWtCLENBQ3pFL2YsZUFBZ0Isb0JBRWxCTyxFQUFnQnNmLEVBQU1qRCxHQUFnQjNLLEdBQXFCOE4sSUFBaUIsSUFHcEZULEdBQWdCLGFBQWMsaURBQWtELENBQzlFZixhQUFjLFVBQ2RFLG9CQUFxQiw2QkFDckJyUCxJQUFLLFNBQUMyUSxHQUFjLE9BQUt4ZixFQUFnQixRQUFTcWMsR0FBZ0IzSyxHQUFxQjhOLElBQWlCLElBRTFHVCxHQUFnQixjQUFlLHVEQUF3RCxDQUNyRmYsYUFBYyxVQUNkRSxvQkFBcUIsNkJBQ3JCclAsSUFBSyxTQUFDMlEsR0FBYyxPQUFLeGYsRUFBZ0IsU0FBVXFjLEdBQWdCM0ssR0FBcUI4TixJQUFpQixJQUUzR1QsR0FBZ0IsY0FBZSxzREFBdUQsQ0FDcEZmLGFBQWMsVUFDZEUsb0JBQXFCLDZCQUNyQnJQLElBQUssU0FBQzJRLEdBQWMsT0FBS3hmLEVBQWdCLFNBQVVxYyxHQUFnQjNLLEdBQXFCOE4sSUFBaUIsSUFHM0c3QixHQUNHOW1CLFFBQVEsY0FDUmluQixZQUFZLGdFQUNaRyxTQUFTLGdCQUFpQix5Q0FDMUJBLFNBQVMsY0FBZSxrREFDeEJBLFNBQVMsZ0JBQWlCLHdEQUMxQkUsVUFDQyxJQUFJQyxFQUFPLGtCQUFtQiwwQkFBMEJFLFFBQVEsQ0FBQyxRQUFTLFNBQVUsV0FBV0MsdUJBRWhHUixzQkFBcUIsR0FDckJTLE9BQU0vbkIsRUFBQUMsSUFBQUMsRUFDTCxTQUFBbUYsRUFDRW1oQixFQUNBQyxFQUNBWSxFQUNBaG5CLEdBQWlELElBQUE0RixFQUFBLE9BQUFoRyxJQUFBZ0IsRUFBQSxTQUFBaUYsR0FBQSxjQUFBQSxFQUFBOUUsR0FBQSxLQUFBLEVBRW5DLE9BRm1DNkUsRUFFakRqQyxRQUFRbkQsT0FBTXFGLEVBQUE5RSxFQUFBLEVBQ05tSSxFQUFnQmxKLEVBQVE4SSxNQUFPb2QsR0FBc0JDLEVBQVlDLEVBQVVZLElBQWEsS0FBQSxFQUFBcGhCLEVBRGpGNUQsTUFBS3FILEtBQUF6RCxFQUFBQyxFQUFBbEUsR0FBQSxLQUFBLEVBQUEsT0FBQWtFLEVBQUFuRCxFQUFBLEdBQUEsRUFBQXNDLEVBQUEsS0FNMUIraEIsR0FBNkIsQ0FDM0JuWixLQUFNLFdBQ05vWixZQUFhLDJFQUNiTyxrQkFBbUIsdUJBQ25CQyxRQUFTLENBQUMsUUFBUyxTQUFVLFVBQzdCelAsSUFBSyxTQUFDalAsR0FBSyxPQUFLSSxFQUFnQkosRUFBT3lkLEtBQXNCLElBRy9EMEIsR0FBZ0IsaUJBQWtCLHlEQUEwRCxXQUFBLE9BQzFGL2UsRUFBZ0IsUUFBU3FkLEtBQXNCLEdBRWpEMEIsR0FBZ0Isa0JBQW1CLCtEQUFnRSxXQUFBLE9BQ2pHL2UsRUFBZ0IsU0FBVXFkLEtBQXNCLEdBRWxEMEIsR0FBZ0Isa0JBQW1CLDhEQUErRCxXQUFBLE9BQ2hHL2UsRUFBZ0IsU0FBVXFkLEtBQXNCLEdBR2xETSxHQUNHOW1CLFFBQVEsV0FDUmluQixZQUFZLGdEQUNaRyxTQUFTLFVBQVcsc0JBQ3BCRixzQkFBcUIsR0FDckJTLE9BQU0vbkIsRUFBQUMsSUFBQUMsRUFBQyxTQUFBbUgsRUFBT2taLEdBQWEsSUFBQUcsRUFBQTFmLEVBQUEsT0FBQWYsSUFBQWdCLEVBQUEsU0FBQXFHLEdBQUEsY0FBQUEsRUFBQWxHLEdBQUEsS0FBQSxFQUFBLE9BQUFrRyxFQUFBbEcsRUFBQSxFQUNQcUssS0FBZSxLQUFBLEVBQXhCLE9BQUppVixFQUFJcFosRUFBQXRGLEVBQUFzRixFQUFBbEcsRUFBQSxFQUNXbWdCLEdBQU8sQ0FBRWIsS0FBTUEsUUFBUTdXLEVBQVcwVyxNQUFBQSxJQUFRLEtBQUEsRUFBekR2ZixFQUFNc0csRUFBQXRGLEVBQ1pnQyxRQUFRbkQsT0FBT3dCLFNBQUtTLE9BQUk5QixFQUFNLE9BQU0sS0FBQSxFQUFBLE9BQUFzRyxFQUFBdkUsRUFBQSxHQUFBLEVBQUFzRSxFQUFBLEtBR3hDNmYsR0FDRzltQixRQUFRLGFBQ1JpbkIsWUFBWSxrREFDWkcsU0FBUyxVQUFXLHNCQUNwQkYsc0JBQXFCLEdBQ3JCUyxPQUFNL25CLEVBQUFDLElBQUFDLEVBQUMsU0FBQStILEVBQU9zWSxHQUFhLElBQUFHLEVBQUExZixFQUFBLE9BQUFmLElBQUFnQixFQUFBLFNBQUFpSCxHQUFBLGNBQUFBLEVBQUE5RyxHQUFBLEtBQUEsRUFBQSxPQUFBOEcsRUFBQTlHLEVBQUEsRUFDUHlLLEdBQXNCLDZDQUE0QyxLQUFBLEVBQTNFLE9BQUo2VSxFQUFJeFksRUFBQWxHLEVBQUFrRyxFQUFBOUcsRUFBQSxFQUNXeWdCLEdBQVMsQ0FBRW5CLEtBQUFBLEVBQU1ILE1BQUFBLElBQVEsS0FBQSxFQUF4Q3ZmLEVBQU1rSCxFQUFBbEcsRUFDWmdDLFFBQVFuRCxPQUFPd0IsU0FBS1MsT0FBSTlCLEVBQU0sT0FBTSxLQUFBLEVBQUEsT0FBQWtILEVBQUFuRixFQUFBLEdBQUEsRUFBQWtGLEVBQUEsS0FHeENpZixHQUNHOW1CLFFBQVEsZUFDUmluQixZQUFZLHdFQUNaQyxzQkFBcUIsR0FDckJTLE9BQU0vbkIsRUFBQUMsSUFBQUMsRUFBQyxTQUFBbUksSUFBQSxJQUFBa0ksRUFBQSxPQUFBdFEsSUFBQWdCLEVBQUEsU0FBQXFILEdBQUEsY0FBQUEsRUFBQWxILEdBQUEsS0FBQSxFQUFBLE9BQUFrSCxFQUFBbEgsRUFBQSxFQUNla1YsS0FBVyxLQUFBLEVBQTFCL0YsRUFBTWpJLEVBQUF0RyxFQUNaZ0MsUUFBUW5ELE9BQU93QixNQUFNa08sRUFBT3ZQLFFBQzVCZ0QsUUFBUVEsS0FBSytMLEVBQU94UCxVQUFVLEtBQUEsRUFBQSxPQUFBdUgsRUFBQXZGLEVBQUEsR0FBQSxFQUFBc0YsRUFBQSxLQUdsQzZlLEdBQ0c5bUIsUUFBUSxlQUNSaW5CLFlBQVkscURBQ1pHLFNBQVMsVUFBVyw4QkFDcEJGLHNCQUFxQixHQUNyQlMsT0FBTS9uQixFQUFBQyxJQUFBQyxFQUFDLFNBQUE4RyxFQUFPK2hCLEdBQXNCLElBQUEvbkIsRUFBQSxPQUFBZixJQUFBZ0IsRUFBQSxTQUFBa0csR0FBQSxjQUFBQSxFQUFBL0YsR0FBQSxLQUFBLEVBQUEsT0FBQStGLEVBQUEvRixFQUFBLEVBQ2RpYSxHQUFtQjBOLEdBQWUsS0FBQSxFQUFqRC9uQixFQUFNbUcsRUFBQW5GLEVBQ1pnQyxRQUFRbkQsT0FBT3dCLE1BQU1yQixHQUFRLEtBQUEsRUFBQSxPQUFBbUcsRUFBQXBFLEVBQUEsR0FBQSxFQUFBaUUsRUFBQSxLQUdqQ2tnQixHQUNHOW1CLFFBQVEsWUFDUmluQixZQUFZLHNGQUNaRyxTQUFTLE9BQVEsa0ZBQ2pCRixzQkFBcUIsR0FDckJTLE9BQU0vbkIsRUFBQUMsSUFBQUMsRUFBQyxTQUFBb08sRUFBTzBhLEdBQW9CLElBQUFob0IsRUFBQSxPQUFBZixJQUFBZ0IsRUFBQSxTQUFBaU4sR0FBQSxjQUFBQSxFQUFBOU0sR0FBQSxLQUFBLEVBQUEsT0FBQThNLEVBQUE5TSxFQUFBLEVBQ1p5YSxHQUFnQm1OLEdBQVksS0FBQSxFQUEzQ2hvQixFQUFNa04sRUFBQWxNLEVBQ1pnQyxRQUFRbkQsT0FBT3dCLE1BQU1yQixHQUFRLEtBQUEsRUFBQSxPQUFBa04sRUFBQW5MLEVBQUEsR0FBQSxFQUFBdUwsRUFBQSxLQUdqQzRZLEdBQ0c5bUIsUUFBUSwwQkFDUmluQixZQUFZLCtEQUNaQyxzQkFBcUIsR0FDckJTLE9BQU0vbkIsRUFBQUMsSUFBQUMsRUFBQyxTQUFBME8sSUFBQSxJQUFBNU4sRUFBQSxPQUFBZixJQUFBZ0IsRUFBQSxTQUFBc04sR0FBQSxjQUFBQSxFQUFBbk4sR0FBQSxLQUFBLEVBQUEsT0FBQW1OLEVBQUFuTixFQUFBLEVBQ2VpakIsS0FBcUIsS0FBQSxFQUFwQ3JqQixFQUFNdU4sRUFBQXZNLEVBQ1pnQyxRQUFRbkQsT0FBT3dCLE1BQU1yQixHQUFRLEtBQUEsRUFBQSxPQUFBdU4sRUFBQXhMLEVBQUEsR0FBQSxFQUFBNkwsRUFBQSxLQUdqQ3NZLEdBQ0c5bUIsUUFBUSw2QkFDUmluQixZQUFZLHVEQUNaQyxzQkFBcUIsR0FDckJTLE9BQU0vbkIsRUFBQUMsSUFBQUMsRUFBQyxTQUFBa2YsSUFBQSxJQUFBbUQsRUFBQXZoQixFQUFBLE9BQUFmLElBQUFnQixFQUFBLFNBQUFvTyxHQUFBLGNBQUFBLEVBQUFqTyxHQUFBLEtBQUEsRUFBQSxPQUFBaU8sRUFBQWpPLEVBQUEsRUFDZ0I4Z0IsS0FBc0IsS0FBQSxFQUEvQixPQUFQSyxFQUFPbFQsRUFBQXJOLEVBQUFxTixFQUFBak8sRUFBQSxFQUNRc2pCLEdBQXVCbkMsR0FBUSxLQUFBLEVBQTlDdmhCLEVBQU1xTyxFQUFBck4sRUFDWmdDLFFBQVFuRCxPQUFPd0IsTUFBTXJCLEdBQVEsS0FBQSxFQUFBLE9BQUFxTyxFQUFBdE0sRUFBQSxHQUFBLEVBQUFxYyxFQUFBLFdBRzNCOEgsR0FBUStCLFdBQVdqbEIsUUFBUWtsQiJ9
|
|
4
|
+
var n,e,t="function"==typeof Symbol?Symbol:{},r=t.iterator||"@@iterator",a=t.toStringTag||"@@toStringTag";function i(t,r,a,i){var c=r&&r.prototype instanceof u?r:u,s=Object.create(c.prototype);return P(s,"_invoke",function(t,r,a){var i,u,c,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,u=0,c=n,p.n=t,o}};function d(t,r){for(u=t,c=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)&&(c=i[(u=i[4])?5:(u=3,3)],i[4]=i[5]=n):i[0]<=d&&((a=t<2&&d<i[1])?(u=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,u=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),u=l,c=h;(e=u<2?n:c)||!f;){i||(u?u<3?(u>1&&(p.n=-1),d(u,c)):p.n=c:p.v=c);try{if(s=2,i){if(u||(a="next"),e=i[a]){if(!(e=e.call(i,c)))throw TypeError("iterator result is not an object");if(!e.done)return e;c=e.value,u<2&&(u=0)}else 1===u&&(e=i.return)&&e.call(i),u<2&&(c=TypeError("The iterator does not provide a '"+a+"' method"),u=1);i=n}else if((e=(f=p.n<0)?c:t.call(r,p))!==o)break}catch(e){i=n,u=1,c=e}finally{s=1}}return{value:e,done:f}}}(t,a,i),!0),s}var o={};function u(){}function c(){}function s(){}e=Object.getPrototypeOf;var l=[][r]?e(e([][r]())):(P(e={},r,function(){return this}),e),f=s.prototype=u.prototype=Object.create(l);function p(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,s):(n.__proto__=s,P(n,a,"GeneratorFunction")),n.prototype=Object.create(f),n}return c.prototype=s,P(f,"constructor",s),P(s,"constructor",c),c.displayName="GeneratorFunction",P(s,a,"GeneratorFunction"),P(f),P(f,a,"Generator"),P(f,r,function(){return this}),P(f,"toString",function(){return"[object Generator]"}),($=function(){return{w:i,m:p}})()}function P(n,e,t,r){var a=Object.defineProperty;try{a({},"",{})}catch(n){a=0}P=function(n,e,t,r){function i(e,t){P(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))},P(n,e,t,r)}function q(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 E(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,u=[],c=!0,s=!1;try{if(i=(t=t.call(n)).next,0===e){if(Object(t)!==t)return;c=!1}else for(;!(c=(r=i.call(t)).done)&&(u.push(r.value),u.length!==e);c=!0);}catch(n){s=!0,a=n}finally{try{if(!c&&null!=t.return&&(o=t.return(),Object(o)!==o))return}finally{if(s)throw a}}return u}}(n,e)||D(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 N(n){return function(n){if(Array.isArray(n))return k(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||D(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 T(n){"@babel/helpers - typeof";return T="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},T(n)}function D(n,e){if(n){if("string"==typeof n)return k(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)?k(n,e):void 0}}var L=["SIGINT","SIGTERM","SIGHUP"],_=new Set,G=!1;function M(n,e){return U.apply(this,arguments)}function U(){return U=I($().m(function n(e,r){var a,i,o,u,c,s,l,f,p,d,h;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===r&&(r={}),i=t(null!=(a=e[0])?a:"",e.slice(1),{detached:!0,stdio:["ignore","pipe","pipe"]}),o=H(i,r.timeoutMs),u=Q(r.waitMessage,r.waitIntervalSeconds),n.n=1,Y(r.logFilePath);case 1:return c=n.v,n.p=2,n.n=3,Promise.all([J(i.stdout,function(n){return c.write(n)}),J(i.stderr,function(n){return c.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=E(s,3),f=l[0],p=l[1],d=l[2],!o.timedOut()){n.n=4;break}throw new Error(F("".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,c.close();case 7:return o.clear(),u(),n.f(6);case 8:return n.a(2)}},n,null,[[2,,6,8]])})),U.apply(this,arguments)}function F(n,e,t){var r="Command timed out after ".concat(function(n){if(n%36e5==0)return"".concat(n/36e5,"h");if(n%6e4==0)return"".concat(n/6e4,"m");if(n%1e3==0)return"".concat(n/1e3,"s");return"".concat(n,"ms")}(e),": ").concat(t.join(" "));return n.length>0?"".concat(n,"\n").concat(r):r}function H(n,e){void 0===e&&(e=36e5);var t,r=!1;_.add(n),function(){if(G)return;G=!0;var n,e=O(L);try{var t=function(){var e=n.value;process.once(e,function(){var n,t=O(_);try{for(t.s();!(n=t.n()).done;){W(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,W(n,"SIGTERM"),(t=setTimeout(function(){return W(n,"SIGKILL")},5e3)).unref()},e);return a.unref(),{clear:function(){clearTimeout(a),t&&clearTimeout(t),_.delete(n)},timedOut:function(){return r},timeoutMs:e}}function W(n,e){if(n.pid&&n.pid>0)try{return void process.kill(-n.pid,e)}catch(n){}n.kill(e)}function J(n,e){return B.apply(this,arguments)}function B(){return(B=I($().m(function n(e,t){var r,a,i,o,u,c,s,l,f,p,d;return $().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,c=x(e);case 3:return n.n=4,c.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,u=d;case 8:if(n.p=8,n.p=9,!i||null==c.return){n.n=10;break}return n.n=10,c.return();case 10:if(n.p=10,!o){n.n=11;break}throw u;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 Q(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 Y(n){return z.apply(this,arguments)}function z(){return z=I($().m(function n(e){var t,r,o;return $().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=I($().m(function n(){return $().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,i(s(e),{recursive:!0});case 3:return(r=a(e,{flags:"w"})).on("error",t),n.a(2,{write:function(n){r.writable&&r.write(n)},close:function(){var n=I($().m(function n(){return $().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,o=n.v,t(o),n.a(2,{write:function(){},close:function(){var n=I($().m(function n(){return $().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()})}},n,null,[[2,4]])})),z.apply(this,arguments)}var K="There is no concern.",Z=["codex","claude","gemini"],V=new RegExp("\\b".concat("there is no concern","\\b"),"i");function X(n,e){return nn.apply(this,arguments)}function nn(){return(nn=I($().m(function n(e,t){var r,a,i;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t={allAgentsLabel:"agents"}),n.n=1,e;case 1:return r=n.v,a=Q(on(t.allAgentsLabel)),n.p=2,n.n=3,Promise.all(Z.map(I($().m(function n(e){var a,i,o,u;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,en(e,r,{waitMessage:!1});case 1:return u=n.v.trim(),n.a(2,null!=(a=null==(i=(o=t).mapOutput)?void 0:i.call(o,e,u))?a:"## ".concat(an(e),"\n\n").concat(u))}},n)}))));case 3:return i=n.v.filter(function(n){return void 0!==n}),n.a(2,i.length>0?i.join("\n\n"):K);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 en(n,e,t){return tn.apply(this,arguments)}function tn(){return(tn=I($().m(function n(e,t,r){var a,i,o;return $().w(function(n){for(;;)switch(n.n){case 0:return void 0===r&&(r={}),a=M,i=rn,o=e,n.n=1,t;case 1:return n.a(2,a(i(o,n.v),{logFilePath:un(e),waitMessage:void 0===r.waitMessage?on(an(e)):r.waitMessage}))}},n)}))).apply(this,arguments)}function rn(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","--model","gemini-3.1-pro-preview","-p",e]}}function an(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function on(n){return"Waiting for ".concat(n," to finish.")}function un(n){return"logs/".concat(n,"-").concat((e=new Date,t=E([e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds()].map(cn),5),r=t[0],a=t[1],i=t[2],o=t[3],u=t[4],"".concat(r).concat(a,"-").concat(i).concat(o).concat(u)),".log");var e,t,r,a,i,o,u}function cn(n){return n.toString().padStart(2,"0")}var sn=["dependencies","devDependencies","peerDependencies","optionalDependencies"],ln=new Set([".git","node_modules"]),fn=["bun","update","--latest"];function pn(n){return dn.apply(this,arguments)}function dn(){return(dn=I($().m(function n(e){var t,r,a,i,o;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===e&&(e=process.cwd()),n.n=1,hn(e);case 1:return t=n.v,n.n=2,Dn(e,t);case 2:return n.n=3,Un(e,"root");case 3:r=O(t),n.p=4,r.s();case 5:if((a=r.n()).done){n.n=7;break}return i=a.value,n.n=6,Un(l(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 hn(n){return mn.apply(this,arguments)}function mn(){return(mn=I($().m(function n(e){var t,r,a,i,o,u,c,s,l,f,p,d,h,m;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return h=vn,n.n=1,_n(e);case 1:return t=h(n.v),n.n=2,wn(e,t);case 2:r=n.v,a=new Set,i=new Set,o=O(t),n.p=3,o.s();case 4:if((u=o.n()).done){n.n=7;break}return c=u.value,s=c.startsWith("!"),n.n=5,$n(e,r,s?c.slice(1):c);case 5:l=n.v,f=O(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,N(a).filter(function(n){return"."!==n&&!i.has(n)}).sort(function(n,e){return n.localeCompare(e)}))}},n,null,[[3,8,9,10]])}))).apply(this,arguments)}function vn(n){var e=n.workspaces,t=void 0===e?[]:e;return Array.isArray(t)?t:t.packages||[]}function wn(n,e){return gn.apply(this,arguments)}function gn(){return(gn=I($().m(function n(e,t){var r,a,i,o,u,c,s,l,f,p,d,h;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:r=new Set,a=yn(t),i=O(a),n.p=1,i.s();case 2:if((o=i.n()).done){n.n=7;break}return u=o.value,c=u.maxDepth,s=u.root,n.n=3,In(e,s);case 3:if(n.v){n.n=4;break}return n.a(3,6);case 4:return d=O,n.n=5,An(e,s,c);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,N(r))}},n,null,[[1,8,9,10]])}))).apply(this,arguments)}function yn(n){var e,t=new Map,r=O(n);try{for(r.s();!(e=r.n()).done;){var a=e.value;if(!a.startsWith("!"))for(var i=0,o=bn(a);i<o.length;i++){var u=o[i];t.set(u.root,t.has(u.root)?kn(t.get(u.root),u.maxDepth):u.maxDepth)}}}catch(n){r.e(n)}finally{r.f()}return N(t.entries()).map(function(n){var e=E(n,2),t=e[0];return{maxDepth:e[1],root:t}}).filter(function(n){return!function(n,e){return N(e.entries()).some(function(e){var t,r,a=E(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)}).sort(function(n,e){return n.root.localeCompare(e.root)})}function bn(n){return h(qn(n)).map(function(n){return{maxDepth:jn(n),root:xn(n)}})}function kn(n,e){return void 0===n||void 0===e?void 0:Math.max(n,e)}function xn(n){var e,t=[],r=O(n.split("/"));try{for(r.s();!(e=r.n()).done;){var a=e.value;if(""===a||Sn(a))break;t.push(a)}}catch(n){r.e(n)}finally{r.f()}return 0===t.length?".":t.join("/")}function Sn(n){return/[*?[\]{}()!+]/.test(n)}function jn(n){if(!n.split("/").includes("**"))return Cn(n)}function In(n,e){return On.apply(this,arguments)}function On(){return(On=I($().m(function n(e,t){return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,u(l(e,t));case 1:return n.a(2,n.v.isDirectory());case 2:return n.p=2,n.v,n.a(2,!1)}},n,null,[[0,2]])}))).apply(this,arguments)}function An(n,e,t){return Rn.apply(this,arguments)}function Rn(){return(Rn=I($().m(function n(e,t,r){var a,i,o,u,s,f,d,h,m,v;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:if(void 0===t&&(t="."),a=[t],!(void 0!==r&&Cn(t)>=r)){n.n=1;break}return n.a(2,a);case 1:return n.n=2,c(l(e,t),{withFileTypes:!0});case 2:i=n.v,o=O(i),n.p=3,o.s();case 4:if((u=o.n()).done){n.n=9;break}if((s=u.value).isDirectory()&&!ln.has(s.name)){n.n=5;break}return n.a(3,8);case 5:if(f=l(t,s.name).split(p).join("/"),!(void 0!==r&&Cn(f)>r)){n.n=6;break}return n.a(3,8);case 6:return d=a.push,h=a,m=N,n.n=7,An(e,f,r);case 7:d.apply.call(d,h,m(n.v));case 8:n.n=4;break;case 9:n.n=11;break;case 10:n.p=10,v=n.v,o.e(v);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 Cn(n){return"."===n?0:n.split("/").length}function $n(n,e,t){return Pn.apply(this,arguments)}function Pn(){return(Pn=I($().m(function n(e,t,r){var a,i,o,u,c,s,l;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:a=En(qn(r)),i=[],o=O(t),n.p=1,o.s();case 2:if((u=o.n()).done){n.n=6;break}if(c=u.value,!(s=a(c))){n.n=4;break}return n.n=3,Nn(e,c);case 3:s=n.v;case 4:if(!s){n.n=5;break}i.push(c);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 qn(n){var e=function(n){var e=n.split(p).join("/");return""===e?".":e}(n).replace(/\/$/,"");return"."===e?e:e.startsWith("./")?e.slice(2):e}function En(n){return function(e){return d(e,n,{dot:!0})}}function Nn(n,e){return Tn.apply(this,arguments)}function Tn(){return(Tn=I($().m(function n(e,t){return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,u(l(e,t,"package.json"));case 1:return n.a(2,n.v.isFile());case 2:return n.p=2,n.v,n.a(2,!1)}},n,null,[[0,2]])}))).apply(this,arguments)}function Dn(n,e){return Ln.apply(this,arguments)}function Ln(){return(Ln=I($().m(function n(e,t){var r,a,i,o,u,c,s,f;return $().w(function(n){for(;;)switch(n.n){case 0:r=[],a=0,i=["."].concat(N(t));case 1:if(!(a<i.length)){n.n=4;break}return o=i[a],n.n=2,_n("."===o?e:l(e,o));case 2:u=n.v,c=O(Mn(u));try{for(c.s();!(s=c.n()).done;)f=s.value,r.push("".concat("."===o?"root":o,": ").concat(f))}catch(n){c.e(n)}finally{c.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 _n(n){return Gn.apply(this,arguments)}function Gn(){return(Gn=I($().m(function n(e){var t,r,a;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return t=l(e,"package.json"),n.p=1,r=JSON,n.n=2,o(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 Mn(n){var e,t=[],r=O(sn);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 u=E(o[i],2),c=u[0];u[1].startsWith("catalog:")&&t.push(c)}}}catch(n){r.e(n)}finally{r.f()}return t}function Un(n,e){return Fn.apply(this,arguments)}function Fn(){return(Fn=I($().m(function n(e,t){return $().w(function(n){for(;;)switch(n.n){case 0:return process.stdout.write("\n# ".concat(t,"\n")),n.n=1,Hn(fn,e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function Hn(n,e){return Wn.apply(this,arguments)}function Wn(){return(Wn=I($().m(function n(e,r){var a;return $().w(function(n){for(;;)switch(n.n){case 0:return a=t(e[0],e.slice(1),{cwd:r,stdio:"inherit"}),n.n=1,new Promise(function(n,t){a.once("error",t),a.once("close",function(a){0!==a?t(new Error("Command failed in ".concat(f(process.cwd(),r)||".",": ").concat(e.join(" ")))):n()})});case 1:return n.a(2)}},n)}))).apply(this,arguments)}var Jn={blockQuote:"literal",lineWidth:0};function Bn(n){v.write("".concat(n,"\n"))}function Qn(n,e){void 0===e&&(e=1),v.write("".concat(n,"\n")),process.exit(e)}function Yn(){return zn.apply(this,arguments)}function zn(){return(zn=I($().m(function n(){return $().w(function(n){for(;;)switch(n.n){case 0:if(!m.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,J(m);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Kn(n){return Zn.apply(this,arguments)}function Zn(){return(Zn=I($().m(function n(e){var t;return $().w(function(n){for(;;)switch(n.n){case 0:return void 0===e&&(e="Error: input is required on stdin"),n.n=1,Yn();case 1:if(!((t=n.v).length>0)){n.n=2;break}return n.a(2,t);case 2:Qn(e,2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function Vn(n,e){return Xn.apply(this,arguments)}function Xn(){return Xn=I($().m(function n(e,r){var a,i,o,u,c;return $().w(function(n){for(;;)switch(n.n){case 0:void 0===r&&(r={}),i=null!=(a=r.allowedExitCodes)?a:[],o=$().m(function n(){var a,o,u,s,l,f,p,d,h,m,v;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return o=t(null!=(a=e[0])?a:"",e.slice(1),{detached:!0,stdio:["pipe","pipe","pipe"]}),s=!1,l=H(o),n.p=1,void 0!==r.stdinData?o.stdin.end(r.stdinData):o.stdin.end(),n.n=2,Promise.all([J(o.stdout),J(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=E(f,3),d=p[0],h=p[1],m=p[2],v="".concat(d).concat(h),!l.timedOut()){n.n=3;break}u=F(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:de(e,m,v)&&c<3?s=!0:u=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 Bn("Transient GitHub CLI failure; retrying... (attempt ".concat(c," of ").concat(2,")")),n.n=7,w(1e3*c);case 7:return n.a(2,0);case 8:u&&Qn(u);case 9:return n.a(2)}},n,null,[[1,,5,6]])}),c=1;case 1:if(!(c<=3)){n.n=5;break}return n.d(q(o()),2);case 2:if(0!==(u=n.v)){n.n=3;break}return n.a(3,4);case 3:if(!u){n.n=4;break}return n.a(2,u.v);case 4:c+=1,n.n=1;break;case 5:Qn("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),Xn.apply(this,arguments)}function ne(n,e){return ee.apply(this,arguments)}function ee(){return(ee=I($().m(function n(e,t){return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Vn(["gh"].concat(N(e)),{stdinData:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function te(n,e,t){return re.apply(this,arguments)}function re(){return(re=I($().m(function n(e,t,r){return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Vn(["gh"].concat(N(e)),{stdinData:r,allowedExitCodes:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function ae(){return ie.apply(this,arguments)}function ie(){return(ie=I($().m(function n(){var e,t,r,a,i;return $().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.trim(),t=e.split("/",2),r=E(t,2),a=r[0],i=r[1],a&&i||Qn("Error: could not determine current repository"),n.a(2,[a,i])}},n)}))).apply(this,arguments)}function oe(){return ue.apply(this,arguments)}function ue(){return(ue=I($().m(function n(){return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ne(["pr","view","--json","number","--jq",".number"]);case 1:return n.a(2,n.v.trim())}},n)}))).apply(this,arguments)}function ce(n,e){return se.apply(this,arguments)}function se(){return(se=I($().m(function n(e,t){var r,a,i,o,u,c,s,l,f;return $().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=E(i[a],2),u=o[0],void 0!==(c=o[1])&&""!==c){n.n=2;break}return n.a(3,3);case 2:r.push("-F","".concat(u,"=").concat(c));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"),Qn("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function le(n){return y(n,Jn)}function fe(n){return JSON.parse(JSON.stringify(n))}function pe(n,e){var t,a,i,o,u=r(null!=(t=n[0])?t:"",n.slice(1),{encoding:"utf8",input:e});return{exitCode:null!=(a=u.status)?a:u.error?1:0,output:"".concat(null!=(i=u.stdout)?i:"").concat(null!=(o=u.stderr)?o:"")}}function de(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 he=/\btest\b/i,me=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","jobs","name","number","startedAt","status","updatedAt","url","workflowName"],ve=/^.*?\tUNKNOWN STEP\t\d{4}-\d{2}-\d{2}T[^Z]+Z\s*/,we=0===pe(["rtk","--version"]).exitCode;function ge(n){return ye.apply(this,arguments)}function ye(){return(ye=I($().m(function n(e){var t,r,a,i,o,u,c,s,l,f;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return u=["pr","checks"],e&&u.push(e),u.push("--json","bucket,completedAt,description,event,link,name,startedAt,state,workflow"),c=[],n.p=1,n.n=2,te(u,[8]);case 2:s=n.v,c=s.trim().length>0?JSON.parse(s):[],n.n=5;break;case 3:if(n.p=3,!((f=n.v)instanceof SyntaxError)){n.n=4;break}c=[],n.n=5;break;case 4:throw f;case 5:return l=c.reduce(function(n,e){var t,r,a=null!=(t=e.bucket)?t:"";return n[a]=(null!=(r=n[a])?r:0)+1,n},{}),n.a(2,{summary:{total:c.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:c})}},n,null,[[1,3]])}))).apply(this,arguments)}function be(n,e,t,r){return ke.apply(this,arguments)}function ke(){return(ke=I($().m(function n(e,t,r,a){var i,o,u,c,s,l,f,p;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t=$e),void 0===r&&(r=ge),void 0===a&&(a=function(n){return v.write(n)}),i=0,n.n=1,r(e);case 1:o=n.v,u=function(){},n.p=2;case 3:if(c=xe(o),s=Se(c),l=E(s,2),f=l[0],p=l[1],!(Object.keys(f).length>0||0===Object.keys(p).length)){n.n=4;break}return n.a(2,[o,i,!1]);case 4:if(!(i>=100)){n.n=5;break}return n.a(2,[o,i,!0]);case 5:return 1===(i+=1)&&(u=Q("Waiting for test-related workflows to finish.",36,a)),n.n=6,t(36);case 6:return n.n=7,r(e);case 7:o=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 xe(n){var e=n.checks.reduce(function(n,e){var t=e.workflow||e.name||"unknown_workflow";return null!=n[t]||(n[t]=[]),n[t].push(e),n},{});return Object.fromEntries(Object.entries(e).map(function(n){var e,t=E(n,2),r=t[0],a=function(n){var e=n.reduce(function(n,e){var t=function(n){var e=je(n);return e?"run:".concat(e):"unknown_run"}(e),r=n.get(t);return r?(r.push(e),n):(n.set(t,[e]),n)},new Map);return Array.from(e.values()).reduce(function(n,e){return 0===n.length||Ne(e)>Ne(n)?e:n},[])}(t[1]),i=a[0];i||Qn("Error: no checks found for workflow ".concat(r));var o=null!=(e=a.reduce(function(n,e){return n?Re(e)>Re(n)?e:n:e},void 0))?e:i;return[r,{classification:Ae(a),check:o,checks:a}]}))}function Se(n){for(var e={},t={},r=0,a=Object.entries(n);r<a.length;r++){var i=E(a[r],2),o=i[0],u=i[1];"failed"!==u.classification?"running"===u.classification&&u.checks.some(function(n){return Ce(n)})&&(t[o]=u):e[o]=u}return[e,t]}function je(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 Ie(n){return Oe.apply(this,arguments)}function Oe(){return(Oe=I($().m(function n(e){var t,r;return $().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,te(["run","view",e,"--json",me.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,!((r=n.v)instanceof SyntaxError)){n.n=5;break}return v.write("Warning: Could not parse JSON for workflow run ".concat(e,": ").concat(r.message,"\n")),n.a(2,void 0);case 5:throw r;case 6:return n.a(2)}},n,null,[[3,4]])}))).apply(this,arguments)}function Ae(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 Re(n){var e,t=n.completedAt;return t&&"0001-01-01T00:00:00Z"!==t?t:null!=(e=n.startedAt)?e:""}function Ce(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&he.test(n)})}function $e(n){return Pe.apply(this,arguments)}function Pe(){return(Pe=I($().m(function n(e){return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,w(1e3*e);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function qe(){return Ee.apply(this,arguments)}function Ee(){return(Ee=I($().m(function n(){var e,t,r,a,i,o,u,c,s,l,f,p;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,oe();case 1:return e=n.v,Bn("Fetching latest CI results..."),n.n=2,be(e);case 2:if(t=n.v,r=E(t,3),a=r[0],i=r[1],o=r[2],u=xe(a),c=Se(u),s=E(c,2),l=s[0],f=s[1],p={summary:fe(a.summary),waited_for_test_related_checks:i>0,test_related_check_wait_attempts:i,test_related_check_wait_timed_out:o},!(Object.keys(l).length>0)){n.n=4;break}return n.n=3,Promise.all(Object.entries(l).map(I($().m(function n(e){var t,r,a,i,o,u,c;return $().w(function(n){for(;;)switch(n.n){case 0:return t=E(e,2),r=t[0],a=t[1],n.n=1,Te(r,a);case 1:return i=n.v,o=C,u=C({},i),c=Ge,n.n=2,Le(a.check);case 2:return n.a(2,o(u,c(n.v)))}},n)}))));case 3:return p.failed_workflows=n.v,n.a(2,{output:le(p),exitCode:1});case 4:if(!(Object.keys(f).length>0)){n.n=6;break}return p.test_workflow_output="Timed out waiting for test-related workflows to finish.",n.n=5,Promise.all(Object.entries(f).map(function(n){var e=E(n,2);return Te(e[0],e[1])}));case 5:return p.running_test_related_workflows=n.v,n.a(2,{output:le(p),exitCode:1});case 6:return n.a(2,{output:"All CI workflows passed.\n",exitCode:0})}},n)}))).apply(this,arguments)}function Ne(n){return n.reduce(function(n,e){var t=Re(e);return t>n?t:n},"")}function Te(n,e){return De.apply(this,arguments)}function De(){return(De=I($().m(function n(e,t){var r,a,i,o;return $().w(function(n){for(;;)switch(n.n){case 0:return a=je(t.check),n.n=1,Ie(a);case 1:return i=n.v,o=He(i,Fe(t.check.name)),n.a(2,{classification:t.classification,workflow:e,job:Fe(t.check.name),job_url:Fe(null==o?void 0:o.url),failed_step:We(o),run_id:a,run_url:null!=(r=Fe(null==i?void 0:i.url))?r:Fe(t.check.link),branch:Fe(null==i?void 0:i.headBranch),sha:Fe(null==i?void 0:i.headSha),conclusion:Fe(null==i?void 0:i.conclusion)})}},n)}))).apply(this,arguments)}function Le(n){return _e.apply(this,arguments)}function _e(){return(_e=I($().m(function n(e){var t;return $().w(function(n){for(;;)switch(n.n){case 0:if(t=je(e)){n.n=1;break}return n.a(2,"Failed latest result has no GitHub Actions run link.");case 1:return n.n=2,te(["run","view",t,"--log-failed"],[1]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Ge(n){return{failed_log:Me(n)}}function Me(n){var e=Ue(g(n));if(!we)return e;var t=pe(["rtk","log"],e);return 0===t.exitCode&&t.output.trim().length>0?Ue(t.output):e}function Ue(n){return n.split("\n").map(function(n){return n.replace(ve,"")}).join("\n").trim()}function Fe(n){return"string"==typeof n&&n.length>0?n:void 0}function He(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 We(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 Je(){return Be.apply(this,arguments)}function Be(){return(Be=I($().m(function n(){var e,t;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ze();case 1:if(null==(e=n.v)){n.n=2;break}t=e,n.n=4;break;case 2:return n.n=3,Qe();case 3:t=n.v;case 4:return n.a(2,t)}},n)}))).apply(this,arguments)}function Qe(){return Ye.apply(this,arguments)}function Ye(){return(Ye=I($().m(function n(){var e;return $().w(function(n){for(;;)switch(n.n){case 0:return e=Ve,n.n=1,M(["gh","repo","view","--json","defaultBranchRef","--template","{{.defaultBranchRef.name}}"]);case 1:return n.a(2,e(n.v.trim(),"Error: could not determine the default branch"))}},n)}))).apply(this,arguments)}function ze(){return Ke.apply(this,arguments)}function Ke(){return(Ke=I($().m(function n(){var e,t;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,M(["gh","pr","view","--json","baseRefName","--template","{{.baseRefName}}"]);case 1:return e=n.v.trim(),n.a(2,e.length>0?e:void 0);case 2:if(n.p=2,!Ze(t=n.v)){n.n=3;break}return n.a(2,void 0);case 3:throw t;case 4:return n.a(2)}},n,null,[[0,2]])}))).apply(this,arguments)}function Ze(n){return/no pull requests? found for branch/i.test(String(n))}function Ve(n,e){if(n.length>0)return n;throw new Error(e)}function Xe(n){return st(n,"issue")}function nt(n){return st(n,"pull request")}function et(n){return tt.apply(this,arguments)}function tt(){return(tt=I($().m(function n(e){var t,r,a,i,o;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ae();case 1:return t=n.v,r=E(t,2),a=r[0],i=r[1],n.n=2,lt(a,i,Xe(e));case 2:return o=n.v,Bn("Fetched issue #".concat(o.number," messages.")),n.a(2,le({issue:o}))}},n)}))).apply(this,arguments)}function rt(n){return at.apply(this,arguments)}function at(){return(at=I($().m(function n(e){var t,r,a;return $().w(function(n){for(;;)switch(n.n){case 0:if(void 0!==e){n.n=2;break}return n.n=1,oe();case 1:a=n.v,n.n=3;break;case 2:a=nt(e);case 3:return t=a,n.n=4,ut(t);case 4:return r=n.v,Bn("Fetched pull request #".concat(r.number," messages.")),n.a(2,le({pull_request:r}))}},n)}))).apply(this,arguments)}function it(){return ot.apply(this,arguments)}function ot(){return(ot=I($().m(function n(){var e,t,r;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,te(["pr","view","--json","number","--jq",".number"],[1]);case 1:if(e=n.v,t=e.trim(),!Ze(e)&&/^\d+$/.test(t)){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,ut(t);case 3:return r=n.v,n.a(2,le({pull_request:r}))}},n)}))).apply(this,arguments)}function ut(n){return ct.apply(this,arguments)}function ct(){return(ct=I($().m(function n(e){var t,r,a,i;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ae();case 1:return t=n.v,r=E(t,2),a=r[0],i=r[1],n.n=2,pt(a,i,e);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function st(n,e){var t=String(n).trim();if(0===t.length&&Qn("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];Qn("Error: expected a GitHub ".concat(e,' number or URL, received "').concat(t,'"'),2)}function lt(n,e,t){return ft.apply(this,arguments)}function ft(){return(ft=I($().m(function n(e,t,r){var a,i;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,kt({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,yt({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:St});case 2:return i=n.v,n.a(2,C(C({},a),{},{messages:i}))}},n)}))).apply(this,arguments)}function pt(n,e,t){return dt.apply(this,arguments)}function dt(){return(dt=I($().m(function n(e,t,r){var a,i,o,u,c;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,kt({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([mt(e,t,r),wt(e,t,r)]);case 2:return i=n.v,o=E(i,2),u=o[0],c=o[1],n.a(2,C(C({},a),{},{messages:[].concat(N(u),N(c)).sort(ht)}))}},n)}))).apply(this,arguments)}function ht(n,e){var t="string"==typeof n.createdAt?n.createdAt:"",r="string"==typeof e.createdAt?e.createdAt:"";return t.localeCompare(r)}function mt(n,e,t){return vt.apply(this,arguments)}function vt(){return(vt=I($().m(function n(e,t,r){return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,yt({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:St});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function wt(n,e,t){return gt.apply(this,arguments)}function gt(){return(gt=I($().m(function n(e,t,r){return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,yt({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:jt});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function yt(n){return bt.apply(this,arguments)}function bt(){return(bt=I($().m(function n(e){var t,r,a,i,o;return $().w(function(n){for(;;)switch(n.n){case 0:r=[];case 1:return o=e,n.n=2,ce(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,N(i.nodes.map(e.mapNode).filter(It))),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 kt(n){return xt.apply(this,arguments)}function xt(){return(xt=I($().m(function n(e){var t,r,a,i,o;return $().w(function(n){for(;;)switch(n.n){case 0:return o=e,n.n=1,ce(e.query,{owner:e.owner,name:e.name,number:Number(e.number)});case 1:return(i=o.selectMetadata.call(o,n.v))||Qn("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 St(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 jt(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 It(n){return"string"==typeof n.body&&n.body.length>0}function Ot(n){return At.apply(this,arguments)}function At(){return(At=I($().m(function n(e){var t,r,a,i,o,u,c,s;return $().w(function(n){for(;;)switch(n.n){case 0:return r=(t=void 0===e?{}:e).body,a=t.title,n.n=1,Vn(["git","branch","--show-current"]);case 1:return i=n.v.trim(),n.n=2,ne(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return o=n.v.trim(),i||Qn("Error: could not determine current branch"),o||Qn("Error: could not determine default branch"),i===o&&Qn("Error: current branch is the default branch (".concat(o,")")),u=["pr","create","--base",o,"--head",i,"--fill"],a&&u.push("--title",a),r&&u.push("--body-file","-"),Bn("Creating pull request..."),n.n=3,ne(u,r);case 3:return c=le,s=JSON,n.n=4,ne(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,c(s.parse.call(s,n.v)))}},n)}))).apply(this,arguments)}function Rt(n){return Ct.apply(this,arguments)}function Ct(){return(Ct=I($().m(function n(e){var t,r,a;return $().w(function(n){for(;;)switch(n.n){case 0:return t=e.body,r=e.title,n.n=1,oe();case 1:return a=n.v,Bn("Updating pull request #".concat(a,"...")),n.n=2,$t(a,["--title",r,"--body-file","-"],t);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function $t(n,e,t){return Pt.apply(this,arguments)}function Pt(){return(Pt=I($().m(function n(e,t,r){var a,i;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ne(["pr","edit",e].concat(N(t)),r);case 1:return a=le,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 qt(){return Et.apply(this,arguments)}function Et(){return(Et=I($().m(function n(){var e,t,r,a,i,o,u,c;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Kn("Error: JSON input is required on stdin");case 1:for(e=n.v,t=Jt(e),r={},a=0,i=Object.entries(t.replies);a<i.length;a++)o=E(i[a],2),u=o[0],"string"==typeof(c=o[1])&&c.length>0&&(r[u]=c);return n.a(2,r)}},n)}))).apply(this,arguments)}function Nt(n,e,t,r,a){return Tt.apply(this,arguments)}function Tt(){return(Tt=I($().m(function n(e,t,r,a,i){var o,u,c,s,l,f,p,d,h,m,v,w;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,ce(e,{owner:t,name:r,number:Number(a),cursor:o});case 1:if(m=u=n.v.data,h=null==m){n.n=2;break}h=null==(u=u.repository);case 2:if(d=h){n.n=3;break}d=null==(u=u.pullRequest);case 3:if(!d){n.n=4;break}v=void 0,n.n=5;break;case 4:v=u.reviewThreads;case 5:(s=v)||Qn("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),l=O(s.nodes),n.p=6,l.s();case 7:if((f=l.n()).done){n.n=9;break}return p=f.value,n.n=8,i(p);case 8:n.n=7;break;case 9:n.n=11;break;case 10:n.p=10,w=n.v,l.e(w);case 11:return n.p=11,l.f(),n.f(11);case 12:if(s.pageInfo.hasNextPage){n.n=13;break}return n.a(2);case 13:o=null!=(c=s.pageInfo.endCursor)?c:void 0;case 14:n.n=0;break;case 15:return n.a(2)}},n,null,[[6,10,11,12]])}))).apply(this,arguments)}function Dt(n,e,t){return Lt.apply(this,arguments)}function Lt(){return(Lt=I($().m(function n(e,t,r){var a;return $().w(function(n){for(;;)switch(n.n){case 0:return a=[],n.n=1,Nt("\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 _t(n,e,t){return Gt.apply(this,arguments)}function Gt(){return(Gt=I($().m(function n(e,t,r){var a;return $().w(function(n){for(;;)switch(n.n){case 0:return a=[],n.n=1,Nt("\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 diffHunk\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,I($().m(function n(e){var t,r,i,o,u,c,s,l,f,p;return $().w(function(n){for(;;)switch(n.n){case 0:if(!e.isResolved){n.n=1;break}return n.a(2);case 1:r=e.comments.nodes.map(Wt),i=e.comments.pageInfo,o=null!=(t=i.endCursor)?t:void 0;case 2:if(!i.hasNextPage){n.n=7;break}return n.n=3,ce("\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 diffHunk\n author { login }\n }\n pageInfo {\n hasNextPage\n endCursor\n }\n }\n }\n }\n }\n",{threadId:e.id,cursor:o});case 3:if(f=u=n.v.data,l=null==f){n.n=4;break}l=null==(u=u.node);case 4:if(!l){n.n=5;break}p=void 0,n.n=6;break;case 5:p=u.comments;case 6:(s=p)||Qn("Could not find comments in GraphQL response for thread ".concat(e.id,".")),r.push.apply(r,N(s.nodes.map(Wt))),i=s.pageInfo,o=null!=(c=i.endCursor)?c:void 0,n.n=2;break;case 7:a.push({id:e.id,isResolved:e.isResolved,isOutdated:e.isOutdated,path:e.path,line:e.line,originalLine:e.originalLine,startLine:e.startLine,originalStartLine:e.originalStartLine,comments:r});case 8:return n.a(2)}},n)})));case 1:return n.a(2,a)}},n)}))).apply(this,arguments)}function Mt(){return Ut.apply(this,arguments)}function Ut(){return(Ut=I($().m(function n(){var e,t,r,a,i,o,u;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ae();case 1:return e=n.v,t=E(e,2),r=t[0],a=t[1],n.n=2,oe();case 2:return i=n.v,Bn("Fetching unresolved review threads..."),o=le,n.n=3,_t(r,a,i);case 3:return u=n.v,n.a(2,o({unresolved_threads:u}))}},n)}))).apply(this,arguments)}function Ft(n){return Ht.apply(this,arguments)}function Ht(){return(Ht=I($().m(function n(e){var t,r,a,i,o,u,c,s,l,f,p,d,h,m,v,w,g,y,b,k;return $().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,ae();case 1:return t=n.v,r=E(t,2),a=r[0],i=r[1],n.n=2,oe();case 2:return o=n.v,y=Set,n.n=3,Dt(a,i,o);case 3:b=n.v,u=new y(b),Bn("Replying to ".concat(Object.keys(e).length," review threads...")),c=[],s=Object.entries(e),l=O(s.entries()),n.p=4,l.s();case 5:if((f=l.n()).done){n.n=9;break}if(d=E(f.value,2),h=d[0],m=E(d[1],2),v=m[0],w=m[1],Bn("Processing ".concat(h+1,"/").concat(s.length,": ").concat(v)),u.has(v)){n.n=6;break}return n.a(3,8);case 6:return n.n=7,ce("\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:g=n.v,null!=(p=g.data)&&null!=(p=p.resolveReviewThread)&&null!=(p=p.thread)&&p.isResolved?c.push(v):Bn("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 Bn("Done."),n.a(2,le({resolved_thread_ids:c}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function Wt(n){var e,t;return C(C({},n),{},{author:"string"==typeof n.author?n.author:null!=(e=null==(t=n.author)?void 0:t.login)?e:null})}function Jt(n){try{var e=JSON.parse(n);return function(n){if("object"!==T(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==T(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||Qn("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&Qn("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function Bt(n){return Qt.apply(this,arguments)}function Qt(){return(Qt=I($().m(function n(e){var t;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,et(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 - Clean up any temporary files after the experiment.\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. 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 Yt(n){return"git merge-base ".concat(zt("origin/".concat(n))," HEAD 2>/dev/null || git merge-base ").concat(zt(n)," HEAD")}function zt(n){return"'".concat(n.replaceAll("'","'\"'\"'"),"'")}function Kt(){return Zt.apply(this,arguments)}function Zt(){return(Zt=I($().m(function n(){var e,t,r;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Je();case 1:return e=n.v,t=Yt(e),n.n=2,it();case 2:return r=n.v,n.a(2,"\nReview the current ".concat(r?"pull request":"branch"," against its base branch ").concat(e,' via `git diff "$(').concat(t,')"`.\nFor each finding, do the following three steps:\n1. 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.\n2. 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.\n3. Clean up any temporary files created during the experiment.\n4. 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.\n\nReport only the valid findings, the evidence for each one, and the proposed fix with its likely impact. Include a brief justification for each, citing the evidence used (e.g., a failing scenario, experiment result, or official documentation). Do not modify the code.\nIf there are no valid findings, respond exactly with: `').concat(K,"`\n\n").concat(Vt(r),"\n").trim())}},n)}))).apply(this,arguments)}function Vt(n){return n?"Current pull request context:\n~~~~yaml\n".concat(n.trim(),"\n~~~~\n").trim():""}function Xt(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 nr(){return er.apply(this,arguments)}function er(){return(er=I($().m(function n(){var e,t,r;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Je();case 1:return e=n.v,t=Yt(e),n.n=2,it();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)}function tr(){return rr.apply(this,arguments)}function rr(){return(rr=I($().m(function n(){return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,M(["bunx","skills@latest","add",b(new URL("../..",import.meta.url)),"--global","--yes","--skill","*","--agent","claude-code","--agent","codex","--agent","gemini-cli"],{waitMessage:"Installing packaged skills globally."});case 1:return n.a(2)}},n)}))).apply(this,arguments)}var ar=new n;function ir(n){var t=ar.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()).action(I($().m(function e(){var t,r,a,i,o,u,c,s,l,f=arguments;return $().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=E(r,2),o=i[0],u=i[1],c="string"==typeof o?o:"",s="string"==typeof o?u:o,l=process.stdout,e.n=1,n.run(s.agent,c);case 1:l.write.call(l,e.v);case 2:return e.a(2)}},e)})))}function or(n,e,t){var r=ar.command(n).description(e).allowExcessArguments(!1);"function"!=typeof t?r.argument(t.argumentName,t.argumentDescription).action(I($().m(function n(e){var r;return $().w(function(n){for(;;)switch(n.n){case 0:return r=process.stdout,n.n=1,t.run(e);case 1:r.write.call(r,n.v);case 2:return n.a(2)}},n)}))):r.action(I($().m(function n(){var e;return $().w(function(n){for(;;)switch(n.n){case 0:return e=process.stdout,n.n=1,t();case 1:e.write.call(e,n.v);case 2:return n.a(2)}},n)})))}ar.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),ar.command("install-skills").description("Install all packaged skills globally for Claude Code, Codex, and Gemini CLI").allowExcessArguments(!1).action(I($().m(function n(){return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,tr();case 1:process.stdout.write("Done\n");case 2:return n.a(2)}},n)}))),ar.command("update-bun-deps").description("Update all Bun dependencies in the root package and workspace packages").allowExcessArguments(!1).action(I($().m(function n(){return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,pn();case 1:return n.a(2)}},n)}))),ir({name:"review",description:"Run review against the current branch with the selected agent",optionDescription:"Use a review agent",choices:["all","codex","claude","gemini"],run:function(n){return"all"===n?X(Kt(),{allAgentsLabel:"review agents",mapOutput:function(n,e){if(!function(n){return V.test(n)}(e))return"## ".concat(an(n),"\n\n").concat(e)}}):en(n,Kt())}}),or("review-codex","Run Codex review against the current branch",function(){return en("codex",Kt())}),or("review-claude","Run Claude Code review against the current branch",function(){return en("claude",Kt())}),or("review-gemini","Run Gemini CLI review against the current branch",function(){return en("gemini",Kt())}),ir({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){return"all"===n?X(Bt(Xe(e)),{allAgentsLabel:"planning agents"}):en(n,Bt(Xe(e)))}}),or("plan-codex","Run Codex planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return en("codex",Bt(Xe(n)))}}),or("plan-claude","Run Claude Code planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return en("claude",Bt(Xe(n)))}}),or("plan-gemini","Run Gemini CLI planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return en("gemini",Bt(Xe(n)))}}),ar.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()).allowExcessArguments(!1).action(I($().m(function n(e,t,r,a){var i;return $().w(function(n){for(;;)switch(n.n){case 0:return i=process.stdout,n.n=1,en(a.agent,Xt(e,t,r));case 1:i.write.call(i,n.v);case 2:return n.a(2)}},n)}))),ir({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){return en(n,nr())}}),or("simplify-codex","Run Codex PR simplification against the current branch",function(){return en("codex",nr())}),or("simplify-claude","Run Claude Code PR simplification against the current branch",function(){return en("claude",nr())}),or("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(){return en("gemini",nr())}),ar.command("open-pr").description("Create a pull request for the current branch").argument("<title>","Pull request title").allowExcessArguments(!1).action(I($().m(function n(e){var t,r;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Yn();case 1:return t=n.v,n.n=2,Ot({body:t||void 0,title:e});case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),ar.command("update-pr").description("Update the current pull request title and body").argument("<title>","Pull request title").allowExcessArguments(!1).action(I($().m(function n(e){var t,r;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Kn("Error: PR body input is required on stdin");case 1:return t=n.v,n.n=2,Rt({body:t,title:e});case 2:r=n.v,process.stdout.write("".concat(r,"\n"));case 3:return n.a(2)}},n)}))),ar.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(I($().m(function n(){var e;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,qe();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),ar.command("fetch-issue").description("Fetch an issue body and timeline messages as YAML").argument("<issue>","GitHub issue number or URL").allowExcessArguments(!1).action(I($().m(function n(e){var t;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,et(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),ar.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(I($().m(function n(e){var t;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,rt(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),ar.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(I($().m(function n(){var e;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Mt();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),ar.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(I($().m(function n(){var e,t;return $().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,qt();case 1:return e=n.v,n.n=2,Ft(e);case 2:t=n.v,process.stdout.write(t);case 3:return n.a(2)}},n)}))),await ar.parseAsync(process.argv);
|
|
5
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy9kZXBzL3VwZGF0ZUJ1bkRlcGVuZGVuY2llcy50cyIsIi4uL3NyYy95YW1sLnRzIiwiLi4vc3JjL3ByL3NoYXJlZC50cyIsIi4uL3NyYy9wci9jaS50cyIsIi4uL3NyYy9yZXBvL2RlZmF1bHRCcmFuY2gudHMiLCIuLi9zcmMvcHIvbWVzc2FnZXMudHMiLCIuLi9zcmMvcHIvcHVsbFJlcXVlc3QudHMiLCIuLi9zcmMvcHIvcmV2aWV3VGhyZWFkcy50cyIsIi4uL3NyYy9wcm9tcHRzL3BsYW5Qcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9iYXNlQnJhbmNoRGlmZkNvbW1hbmQudHMiLCIuLi9zcmMvcHJvbXB0cy9yZXZpZXdQcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9zY3JlZW5zaG90UHJvbXB0LnRzIiwiLi4vc3JjL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQudHMiLCIuLi9zcmMvc2tpbGxzL2luc3RhbGxTa2lsbHMudHMiLCIuLi9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbnR5cGUgUnVuQ29tbWFuZE9wdGlvbnMgPSB7XG4gIGxvZ0ZpbGVQYXRoPzogc3RyaW5nO1xuICB0aW1lb3V0TXM/OiBudW1iZXI7XG4gIHdhaXRNZXNzYWdlPzogc3RyaW5nIHwgZmFsc2U7XG4gIHdhaXRJbnRlcnZhbFNlY29uZHM/OiBudW1iZXI7XG59O1xuXG50eXBlIFByb2dyZXNzV3JpdGVyID0gKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIEtpbGxhYmxlUHJvY2VzcyA9IHsga2lsbDogKHNpZ25hbD86IE5vZGVKUy5TaWduYWxzKSA9PiBib29sZWFuOyBwaWQ/OiBudW1iZXIgfTtcblxuLy8gVGhlIG9uZS1ob3VyIGJ1ZGdldCBrZWVwcyBhZ2VudHMgd2FpdGluZyBmb3IgbG9uZy1ydW5uaW5nIGNvbW1hbmRzIHdpdGhvdXQgcmVxdWlyaW5nIHRoZSBwcm9jZXNzIHRvIHVzZSB0aGUgZnVsbCBob3VyLlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTID0gMzY7XG5leHBvcnQgY29uc3QgREVGQVVMVF9QUk9DRVNTX1RJTUVPVVRfTVMgPSA2MCAqIDYwICogMTAwMDtcbmNvbnN0IERPVFNfUEVSX1BST0dSRVNTX1BFUkNFTlRfU1RFUCA9IDU7XG5jb25zdCBGT1JDRV9LSUxMX1RJTUVPVVRfTVMgPSA1MDAwO1xuY29uc3QgTUFYX1BST0dSRVNTX1BFUkNFTlQgPSAxMDA7XG5jb25zdCBQUk9DRVNTX0NMRUFOVVBfU0lHTkFMUyA9IFsnU0lHSU5UJywgJ1NJR1RFUk0nLCAnU0lHSFVQJ10gYXMgY29uc3Q7XG5jb25zdCBhY3RpdmVQcm9jZXNzZXMgPSBuZXcgU2V0PEtpbGxhYmxlUHJvY2Vzcz4oKTtcbmxldCBjbGVhbnVwSGFuZGxlcnNJbnN0YWxsZWQgPSBmYWxzZTtcbi8vIEtlZXAgdGhlIENMSSB0ZXh0IGNvbmNpc2Ugc28gZG93bnN0cmVhbSBwcm9tcHRzIGNhbiBtYXRjaCBpdCBjb25zaXN0ZW50bHkuXG5leHBvcnQgY29uc3QgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HID0gJ1RoaXMgY2FuIHRha2UgdXAgdG8gMSBob3VyOyBkb3RzIGluZGljYXRlIHByb2dyZXNzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIGRldGFjaGVkOiB0cnVlLFxuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgfSk7XG4gIGNvbnN0IHByb2Nlc3NUaW1lb3V0ID0gY3JlYXRlUHJvY2Vzc1RpbWVvdXQocHJvYywgb3B0aW9ucy50aW1lb3V0TXMpO1xuICBjb25zdCBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKG9wdGlvbnMud2FpdE1lc3NhZ2UsIG9wdGlvbnMud2FpdEludGVydmFsU2Vjb25kcyk7XG4gIGNvbnN0IGNvbW1hbmRMb2dnZXIgPSBhd2FpdCBjcmVhdGVDb21tYW5kTG9nZ2VyKG9wdGlvbnMubG9nRmlsZVBhdGgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQsIChjaHVuaykgPT4gY29tbWFuZExvZ2dlci53cml0ZShjaHVuaykpLFxuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyLCAoY2h1bmspID0+IGNvbW1hbmRMb2dnZXIud3JpdGUoY2h1bmspKSxcbiAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgfSksXG4gICAgXSk7XG5cbiAgICBpZiAocHJvY2Vzc1RpbWVvdXQudGltZWRPdXQoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHRpbWVvdXRFcnJvck1lc3NhZ2UoYCR7c3Rkb3V0fSR7c3RkZXJyfWAsIHByb2Nlc3NUaW1lb3V0LnRpbWVvdXRNcywgY29tbWFuZCkpO1xuICAgIH1cblxuICAgIGlmIChleGl0Q29kZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHN0ZG91dDtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcbiAgICB0aHJvdyBuZXcgRXJyb3Iob3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBjb21tYW5kTG9nZ2VyLmNsb3NlKCk7XG4gICAgcHJvY2Vzc1RpbWVvdXQuY2xlYXIoKTtcbiAgICBzdG9wV2FpdFByb2dyZXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRpbWVvdXRFcnJvck1lc3NhZ2Uob3V0cHV0OiBzdHJpbmcsIHRpbWVvdXRNczogbnVtYmVyLCBjb21tYW5kOiBzdHJpbmdbXSk6IHN0cmluZyB7XG4gIGNvbnN0IG1lc3NhZ2UgPSBgQ29tbWFuZCB0aW1lZCBvdXQgYWZ0ZXIgJHtmb3JtYXREdXJhdGlvbih0aW1lb3V0TXMpfTogJHtjb21tYW5kLmpvaW4oJyAnKX1gO1xuICByZXR1cm4gb3V0cHV0Lmxlbmd0aCA+IDAgPyBgJHtvdXRwdXR9XFxuJHttZXNzYWdlfWAgOiBtZXNzYWdlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9ybWF0RHVyYXRpb24obWlsbGlzZWNvbmRzOiBudW1iZXIpOiBzdHJpbmcge1xuICBpZiAobWlsbGlzZWNvbmRzICUgKDYwICogNjAgKiAxMDAwKSA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAoNjAgKiA2MCAqIDEwMDApfWhgO1xuICB9XG4gIGlmIChtaWxsaXNlY29uZHMgJSAoNjAgKiAxMDAwKSA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAoNjAgKiAxMDAwKX1tYDtcbiAgfVxuICBpZiAobWlsbGlzZWNvbmRzICUgMTAwMCA9PT0gMCkge1xuICAgIHJldHVybiBgJHttaWxsaXNlY29uZHMgLyAxMDAwfXNgO1xuICB9XG4gIHJldHVybiBgJHttaWxsaXNlY29uZHN9bXNgO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlUHJvY2Vzc1RpbWVvdXQoXG4gIHByb2M6IEtpbGxhYmxlUHJvY2VzcyxcbiAgdGltZW91dE1zID0gREVGQVVMVF9QUk9DRVNTX1RJTUVPVVRfTVNcbik6IHsgY2xlYXI6ICgpID0+IHZvaWQ7IHRpbWVkT3V0OiAoKSA9PiBib29sZWFuOyB0aW1lb3V0TXM6IG51bWJlciB9IHtcbiAgbGV0IHRpbWVkT3V0ID0gZmFsc2U7XG4gIGxldCBmb3JjZUtpbGxUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG4gIGFjdGl2ZVByb2Nlc3Nlcy5hZGQocHJvYyk7XG4gIGluc3RhbGxDbGVhbnVwSGFuZGxlcnMoKTtcbiAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIHRpbWVkT3V0ID0gdHJ1ZTtcbiAgICBraWxsUHJvY2Vzcyhwcm9jLCAnU0lHVEVSTScpO1xuICAgIGZvcmNlS2lsbFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiBraWxsUHJvY2Vzcyhwcm9jLCAnU0lHS0lMTCcpLCBGT1JDRV9LSUxMX1RJTUVPVVRfTVMpO1xuICAgIGZvcmNlS2lsbFRpbWVyLnVucmVmKCk7XG4gIH0sIHRpbWVvdXRNcyk7XG4gIHRpbWVvdXQudW5yZWYoKTtcblxuICByZXR1cm4ge1xuICAgIGNsZWFyOiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dCk7XG4gICAgICBpZiAoZm9yY2VLaWxsVGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KGZvcmNlS2lsbFRpbWVyKTtcbiAgICAgIH1cbiAgICAgIGFjdGl2ZVByb2Nlc3Nlcy5kZWxldGUocHJvYyk7XG4gICAgfSxcbiAgICB0aW1lZE91dDogKCkgPT4gdGltZWRPdXQsXG4gICAgdGltZW91dE1zLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpbnN0YWxsQ2xlYW51cEhhbmRsZXJzKCk6IHZvaWQge1xuICBpZiAoY2xlYW51cEhhbmRsZXJzSW5zdGFsbGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGNsZWFudXBIYW5kbGVyc0luc3RhbGxlZCA9IHRydWU7XG5cbiAgZm9yIChjb25zdCBzaWduYWwgb2YgUFJPQ0VTU19DTEVBTlVQX1NJR05BTFMpIHtcbiAgICBwcm9jZXNzLm9uY2Uoc2lnbmFsLCAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IHByb2Mgb2YgYWN0aXZlUHJvY2Vzc2VzKSB7XG4gICAgICAgIGtpbGxQcm9jZXNzKHByb2MsIHNpZ25hbCk7XG4gICAgICB9XG4gICAgICBwcm9jZXNzLmV4aXQoMTI4ICsgc2lnbmFsTnVtYmVyKHNpZ25hbCkpO1xuICAgIH0pO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNpZ25hbE51bWJlcihzaWduYWw6ICh0eXBlb2YgUFJPQ0VTU19DTEVBTlVQX1NJR05BTFMpW251bWJlcl0pOiBudW1iZXIge1xuICBzd2l0Y2ggKHNpZ25hbCkge1xuICAgIGNhc2UgJ1NJR0lOVCc6XG4gICAgICByZXR1cm4gMjtcbiAgICBjYXNlICdTSUdURVJNJzpcbiAgICAgIHJldHVybiAxNTtcbiAgICBjYXNlICdTSUdIVVAnOlxuICAgICAgcmV0dXJuIDE7XG4gIH1cbn1cblxuZnVuY3Rpb24ga2lsbFByb2Nlc3MocHJvYzogS2lsbGFibGVQcm9jZXNzLCBzaWduYWw6IE5vZGVKUy5TaWduYWxzKTogdm9pZCB7XG4gIGlmIChwcm9jLnBpZCAmJiBwcm9jLnBpZCA+IDApIHtcbiAgICB0cnkge1xuICAgICAgcHJvY2Vzcy5raWxsKC1wcm9jLnBpZCwgc2lnbmFsKTtcbiAgICAgIHJldHVybjtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8vIEZhbGwgYmFjayB0byBraWxsaW5nIHRoZSBkaXJlY3QgY2hpbGQgd2hlbiBwcm9jZXNzLWdyb3VwIHRlcm1pbmF0aW9uIGlzIHVuYXZhaWxhYmxlLlxuICAgIH1cbiAgfVxuICBwcm9jLmtpbGwoc2lnbmFsKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvVGV4dChcbiAgc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBvbkNodW5rPzogKGNodW5rOiBzdHJpbmcpID0+IHZvaWRcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgY29uc3QgY2h1bmtUZXh0ID0gdHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyA/IGNodW5rIDogZGVjb2Rlci5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoY2h1bmspLCB7IHN0cmVhbTogdHJ1ZSB9KTtcbiAgICBjaHVua3MucHVzaChjaHVua1RleHQpO1xuICAgIG9uQ2h1bms/LihjaHVua1RleHQpO1xuICB9XG4gIGNvbnN0IGZpbmFsQ2h1bmsgPSBkZWNvZGVyLmRlY29kZSgpO1xuICBpZiAoZmluYWxDaHVuaykge1xuICAgIGNodW5rcy5wdXNoKGZpbmFsQ2h1bmspO1xuICAgIG9uQ2h1bms/LihmaW5hbENodW5rKTtcbiAgfVxuICByZXR1cm4gY2h1bmtzLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2FpdFByb2dyZXNzKFxuICB3YWl0TWVzc2FnZTogc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQsXG4gIHdhaXRJbnRlcnZhbFNlY29uZHMgPSBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyxcbiAgd3JpdGVQcm9ncmVzczogUHJvZ3Jlc3NXcml0ZXIgPSAobWVzc2FnZSkgPT4gcHJvY2Vzcy5zdGRlcnIud3JpdGUobWVzc2FnZSlcbik6ICgpID0+IHZvaWQge1xuICBpZiAoIXdhaXRNZXNzYWdlKSB7XG4gICAgcmV0dXJuICgpID0+IHt9O1xuICB9XG5cbiAgbGV0IGRvdENvdW50ID0gMDtcbiAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgd3JpdGVQcm9ncmVzcygnLicpO1xuICAgIGRvdENvdW50ICs9IDE7XG4gICAgaWYgKGRvdENvdW50IDw9IE1BWF9QUk9HUkVTU19QRVJDRU5UICYmIGRvdENvdW50ICUgRE9UU19QRVJfUFJPR1JFU1NfUEVSQ0VOVF9TVEVQID09PSAwKSB7XG4gICAgICAvLyBUaGlzIHRyYWNrcyBlbGFwc2VkIHdhaXQgYnVkZ2V0LCBub3QgdGhlIGNoaWxkIHByb2Nlc3MgY29tcGxldGlvbiBwZXJjZW50YWdlLlxuICAgICAgd3JpdGVQcm9ncmVzcyhgICR7ZG90Q291bnR9JSBkb25lIGApO1xuICAgIH1cbiAgfSwgd2FpdEludGVydmFsU2Vjb25kcyAqIDEwMDApO1xuXG4gIHdyaXRlUHJvZ3Jlc3MoYCR7d2FpdE1lc3NhZ2V9ICR7V0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HfTogYCk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICB3cml0ZVByb2dyZXNzKCdcXG4nKTtcbiAgfTtcbn1cblxudHlwZSBDb21tYW5kTG9nZ2VyID0ge1xuICB3cml0ZTogKGNodW5rOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNsb3NlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ29tbWFuZExvZ2dlcihsb2dGaWxlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxDb21tYW5kTG9nZ2VyPiB7XG4gIGlmICghbG9nRmlsZVBhdGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6ICgpID0+IHt9LFxuICAgICAgY2xvc2U6IGFzeW5jICgpID0+IHt9LFxuICAgIH07XG4gIH1cblxuICBjb25zdCB3YXJuID0gKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYFdhcm5pbmc6IEZhaWxlZCB0byB3cml0ZSBjb21tYW5kIGxvZyB0byAke2xvZ0ZpbGVQYXRofTogJHtTdHJpbmcoZXJyb3IpfVxcbmApO1xuICB9O1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgbWtkaXIoZGlybmFtZShsb2dGaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGNvbnN0IHN0cmVhbSA9IGNyZWF0ZVdyaXRlU3RyZWFtKGxvZ0ZpbGVQYXRoLCB7IGZsYWdzOiAndycgfSk7XG5cbiAgICBzdHJlYW0ub24oJ2Vycm9yJywgd2Fybik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6IChjaHVuaykgPT4ge1xuICAgICAgICBpZiAoc3RyZWFtLndyaXRhYmxlKSB7XG4gICAgICAgICAgc3RyZWFtLndyaXRlKGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PlxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIHN0cmVhbS5lbmQoKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgfSksXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB3YXJuKGVycm9yKTtcbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6ICgpID0+IHt9LFxuICAgICAgY2xvc2U6IGFzeW5jICgpID0+IHt9LFxuICAgIH07XG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBOT19DT05DRVJOX1BIUkFTRSA9ICd0aGVyZSBpcyBubyBjb25jZXJuJztcbmV4cG9ydCBjb25zdCBOT19DT05DRVJOX01FU1NBR0UgPSAnVGhlcmUgaXMgbm8gY29uY2Vybi4nO1xuIiwiaW1wb3J0IHsgY3JlYXRlV2FpdFByb2dyZXNzLCBydW5Db21tYW5kV2l0aFByb2dyZXNzIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSwgTk9fQ09OQ0VSTl9QSFJBU0UgfSBmcm9tICcuLi9yZXZpZXcvbm9Db25jZXJuLmpzJztcblxuZXhwb3J0IGNvbnN0IEFHRU5UX05BTUVTID0gWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10gYXMgY29uc3Q7XG5jb25zdCBDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYID0gbmV3IFJlZ0V4cChgXFxcXGIke05PX0NPTkNFUk5fUEhSQVNFfVxcXFxiYCwgJ2knKTtcbmV4cG9ydCB0eXBlIEFnZW50TmFtZSA9ICh0eXBlb2YgQUdFTlRfTkFNRVMpW251bWJlcl07XG5cbnR5cGUgQWdlbnRDb21tYW5kT3B0aW9ucyA9IHtcbiAgd2FpdE1lc3NhZ2U/OiBzdHJpbmcgfCBmYWxzZTtcbn07XG5cbnR5cGUgQWxsQWdlbnRDb21tYW5kT3B0aW9ucyA9IHtcbiAgYWxsQWdlbnRzTGFiZWw6IHN0cmluZztcbiAgbWFwT3V0cHV0PzogKGFnZW50OiBBZ2VudE5hbWUsIG91dHB1dDogc3RyaW5nKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQ7XG59O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQWxsQWdlbnRDb21tYW5kcyhcbiAgcHJvbXB0OiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4sXG4gIG9wdGlvbnM6IEFsbEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7IGFsbEFnZW50c0xhYmVsOiAnYWdlbnRzJyB9XG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNvbHZlZFByb21wdCA9IGF3YWl0IHByb21wdDtcbiAgY29uc3Qgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyh3YWl0TWVzc2FnZUZvcihvcHRpb25zLmFsbEFnZW50c0xhYmVsKSk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBvdXRwdXRzID0gKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIEFHRU5UX05BTUVTLm1hcChhc3luYyAoYWdlbnQpID0+IHtcbiAgICAgICAgICBjb25zdCBvdXRwdXQgPSAoXG4gICAgICAgICAgICBhd2FpdCBydW5BZ2VudENvbW1hbmQoYWdlbnQsIHJlc29sdmVkUHJvbXB0LCB7XG4gICAgICAgICAgICAgIHdhaXRNZXNzYWdlOiBmYWxzZSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKS50cmltKCk7XG4gICAgICAgICAgcmV0dXJuIG9wdGlvbnMubWFwT3V0cHV0Py4oYWdlbnQsIG91dHB1dCkgPz8gYCMjICR7ZGlzcGxheUFnZW50TmFtZShhZ2VudCl9XFxuXFxuJHtvdXRwdXR9YDtcbiAgICAgICAgfSlcbiAgICAgIClcbiAgICApLmZpbHRlcigob3V0cHV0KTogb3V0cHV0IGlzIHN0cmluZyA9PiBvdXRwdXQgIT09IHVuZGVmaW5lZCk7XG4gICAgcmV0dXJuIG91dHB1dHMubGVuZ3RoID4gMCA/IG91dHB1dHMuam9pbignXFxuXFxuJykgOiBOT19DT05DRVJOX01FU1NBR0U7XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5BZ2VudENvbW1hbmQoXG4gIGFnZW50OiBBZ2VudE5hbWUsXG4gIHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+LFxuICBvcHRpb25zOiBBZ2VudENvbW1hbmRPcHRpb25zID0ge31cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBydW5Db21tYW5kV2l0aFByb2dyZXNzKGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudCwgYXdhaXQgcHJvbXB0KSwge1xuICAgIGxvZ0ZpbGVQYXRoOiBhZ2VudExvZ0ZpbGVQYXRoKGFnZW50KSxcbiAgICB3YWl0TWVzc2FnZTogb3B0aW9ucy53YWl0TWVzc2FnZSA9PT0gdW5kZWZpbmVkID8gd2FpdE1lc3NhZ2VGb3IoZGlzcGxheUFnZW50TmFtZShhZ2VudCkpIDogb3B0aW9ucy53YWl0TWVzc2FnZSxcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUFnZW50Q29tbWFuZChhZ2VudDogQWdlbnROYW1lLCBwcm9tcHQ6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgc3dpdGNoIChhZ2VudCkge1xuICAgIGNhc2UgJ2NvZGV4JzpcbiAgICAgIHJldHVybiBbJ25weCcsICctLXllcycsICdAb3BlbmFpL2NvZGV4QGxhdGVzdCcsICdleGVjJywgJy0tZGFuZ2Vyb3VzbHktYnlwYXNzLWFwcHJvdmFscy1hbmQtc2FuZGJveCcsIHByb21wdF07XG4gICAgY2FzZSAnY2xhdWRlJzpcbiAgICAgIHJldHVybiBbJ2NsYXVkZScsICctLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnMnLCAnLXAnLCBwcm9tcHRdO1xuICAgIGNhc2UgJ2dlbWluaSc6XG4gICAgICByZXR1cm4gW1xuICAgICAgICAnbnB4JyxcbiAgICAgICAgJy0teWVzJyxcbiAgICAgICAgJ0Bnb29nbGUvZ2VtaW5pLWNsaUBwcmV2aWV3JyxcbiAgICAgICAgJy0tYXBwcm92YWwtbW9kZScsXG4gICAgICAgICd5b2xvJyxcbiAgICAgICAgJy0tbW9kZWwnLFxuICAgICAgICAnZ2VtaW5pLTMuMS1wcm8tcHJldmlldycsXG4gICAgICAgICctcCcsXG4gICAgICAgIHByb21wdCxcbiAgICAgIF07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpc3BsYXlBZ2VudE5hbWUoYWdlbnQ6IEFnZW50TmFtZSk6IHN0cmluZyB7XG4gIHN3aXRjaCAoYWdlbnQpIHtcbiAgICBjYXNlICdjb2RleCc6XG4gICAgICByZXR1cm4gJ0NvZGV4JztcbiAgICBjYXNlICdjbGF1ZGUnOlxuICAgICAgcmV0dXJuICdDbGF1ZGUgQ29kZSc7XG4gICAgY2FzZSAnZ2VtaW5pJzpcbiAgICAgIHJldHVybiAnR2VtaW5pIENMSSc7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2Uob3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIENPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVgudGVzdChvdXRwdXQpO1xufVxuXG5mdW5jdGlvbiB3YWl0TWVzc2FnZUZvcih0YXJnZXQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgV2FpdGluZyBmb3IgJHt0YXJnZXR9IHRvIGZpbmlzaC5gO1xufVxuXG5mdW5jdGlvbiBhZ2VudExvZ0ZpbGVQYXRoKGFnZW50OiBBZ2VudE5hbWUpOiBzdHJpbmcge1xuICByZXR1cm4gYGxvZ3MvJHthZ2VudH0tJHt0aW1lc3RhbXBGb3JMb2dGaWxlKCl9LmxvZ2A7XG59XG5cbmZ1bmN0aW9uIHRpbWVzdGFtcEZvckxvZ0ZpbGUoKTogc3RyaW5nIHtcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgY29uc3QgW21vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kXSA9IFtcbiAgICBub3cuZ2V0TW9udGgoKSArIDEsXG4gICAgbm93LmdldERhdGUoKSxcbiAgICBub3cuZ2V0SG91cnMoKSxcbiAgICBub3cuZ2V0TWludXRlcygpLFxuICAgIG5vdy5nZXRTZWNvbmRzKCksXG4gIF0ubWFwKHR3b0RpZ2l0cyk7XG4gIHJldHVybiBgJHttb250aH0ke2RheX0tJHtob3VyfSR7bWludXRlfSR7c2Vjb25kfWA7XG59XG5cbmZ1bmN0aW9uIHR3b0RpZ2l0cyh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbn1cbiIsImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHJlYWRkaXIsIHJlYWRGaWxlLCBzdGF0IH0gZnJvbSAnbm9kZTpmcy9wcm9taXNlcyc7XG5pbXBvcnQgeyBqb2luLCByZWxhdGl2ZSwgc2VwIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGJyYWNlRXhwYW5kLCBtaW5pbWF0Y2ggfSBmcm9tICdtaW5pbWF0Y2gnO1xuXG50eXBlIFBhY2thZ2VKc29uID0ge1xuICBkZXBlbmRlbmNpZXM/OiBEZXBlbmRlbmN5TWFwO1xuICBkZXZEZXBlbmRlbmNpZXM/OiBEZXBlbmRlbmN5TWFwO1xuICBvcHRpb25hbERlcGVuZGVuY2llcz86IERlcGVuZGVuY3lNYXA7XG4gIHBlZXJEZXBlbmRlbmNpZXM/OiBEZXBlbmRlbmN5TWFwO1xuICB3b3Jrc3BhY2VzPzogc3RyaW5nW10gfCB7IHBhY2thZ2VzPzogc3RyaW5nW10gfTtcbn07XG50eXBlIERlcGVuZGVuY3lNYXAgPSBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xudHlwZSBXb3Jrc3BhY2VDYW5kaWRhdGVSb290ID0geyBtYXhEZXB0aD86IG51bWJlcjsgcm9vdDogc3RyaW5nIH07XG5cbmNvbnN0IERFUEVOREVOQ1lfU0VDVElPTlMgPSBbJ2RlcGVuZGVuY2llcycsICdkZXZEZXBlbmRlbmNpZXMnLCAncGVlckRlcGVuZGVuY2llcycsICdvcHRpb25hbERlcGVuZGVuY2llcyddIGFzIGNvbnN0O1xuY29uc3QgSUdOT1JFRF9ESVJFQ1RPUklFUyA9IG5ldyBTZXQoWycuZ2l0JywgJ25vZGVfbW9kdWxlcyddKTtcbmNvbnN0IFVQREFURV9DT01NQU5EID0gWydidW4nLCAndXBkYXRlJywgJy0tbGF0ZXN0J10gYXMgY29uc3Q7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVCdW5EZXBlbmRlbmNpZXMoY3dkID0gcHJvY2Vzcy5jd2QoKSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCB3b3Jrc3BhY2VEaXJlY3RvcmllcyA9IGF3YWl0IGZpbmRXb3Jrc3BhY2VEaXJlY3Rvcmllcyhjd2QpO1xuICBhd2FpdCBhc3NlcnROb0NhdGFsb2dEZXBlbmRlbmNpZXMoY3dkLCB3b3Jrc3BhY2VEaXJlY3Rvcmllcyk7XG4gIGF3YWl0IHVwZGF0ZVBhY2thZ2UoY3dkLCAncm9vdCcpO1xuXG4gIGZvciAoY29uc3QgZGlyZWN0b3J5IG9mIHdvcmtzcGFjZURpcmVjdG9yaWVzKSB7XG4gICAgYXdhaXQgdXBkYXRlUGFja2FnZShqb2luKGN3ZCwgZGlyZWN0b3J5KSwgZGlyZWN0b3J5KTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBmaW5kV29ya3NwYWNlRGlyZWN0b3JpZXMoY3dkOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IHBhdHRlcm5zID0gd29ya3NwYWNlUGF0dGVybnMoYXdhaXQgcmVhZFBhY2thZ2VKc29uKGN3ZCkpO1xuICBjb25zdCBkaXJlY3RvcmllcyA9IGF3YWl0IGxpc3RXb3Jrc3BhY2VDYW5kaWRhdGVEaXJlY3Rvcmllcyhjd2QsIHBhdHRlcm5zKTtcbiAgY29uc3QgaW5jbHVkZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgZXhjbHVkZWQgPSBuZXcgU2V0PHN0cmluZz4oKTtcblxuICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICBjb25zdCBpc0V4Y2x1c2lvbiA9IHBhdHRlcm4uc3RhcnRzV2l0aCgnIScpO1xuICAgIGNvbnN0IG1hdGNoZXMgPSBhd2FpdCBleHBhbmRXb3Jrc3BhY2VQYXR0ZXJuKGN3ZCwgZGlyZWN0b3JpZXMsIGlzRXhjbHVzaW9uID8gcGF0dGVybi5zbGljZSgxKSA6IHBhdHRlcm4pO1xuICAgIGZvciAoY29uc3QgZGlyZWN0b3J5IG9mIG1hdGNoZXMpIHtcbiAgICAgIGlmIChpc0V4Y2x1c2lvbikge1xuICAgICAgICBleGNsdWRlZC5hZGQoZGlyZWN0b3J5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGluY2x1ZGVkLmFkZChkaXJlY3RvcnkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbLi4uaW5jbHVkZWRdXG4gICAgLmZpbHRlcigoZGlyZWN0b3J5KSA9PiBkaXJlY3RvcnkgIT09ICcuJyAmJiAhZXhjbHVkZWQuaGFzKGRpcmVjdG9yeSkpXG4gICAgLnNvcnQoKGxlZnQsIHJpZ2h0KSA9PiBsZWZ0LmxvY2FsZUNvbXBhcmUocmlnaHQpKTtcbn1cblxuZnVuY3Rpb24gd29ya3NwYWNlUGF0dGVybnMoeyB3b3Jrc3BhY2VzID0gW10gfTogUGFja2FnZUpzb24pOiBzdHJpbmdbXSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHdvcmtzcGFjZXMpKSB7XG4gICAgcmV0dXJuIHdvcmtzcGFjZXM7XG4gIH1cbiAgcmV0dXJuIHdvcmtzcGFjZXMucGFja2FnZXMgfHwgW107XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGxpc3RXb3Jrc3BhY2VDYW5kaWRhdGVEaXJlY3Rvcmllcyhjd2Q6IHN0cmluZywgcGF0dGVybnM6IHN0cmluZ1tdKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBkaXJlY3RvcmllcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCByb290cyA9IHdvcmtzcGFjZUNhbmRpZGF0ZVJvb3RzKHBhdHRlcm5zKTtcblxuICBmb3IgKGNvbnN0IHsgbWF4RGVwdGgsIHJvb3QgfSBvZiByb290cykge1xuICAgIGlmICghKGF3YWl0IGlzRGlyZWN0b3J5KGN3ZCwgcm9vdCkpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBkaXJlY3Rvcnkgb2YgYXdhaXQgbGlzdERpcmVjdG9yaWVzKGN3ZCwgcm9vdCwgbWF4RGVwdGgpKSB7XG4gICAgICBkaXJlY3Rvcmllcy5hZGQoZGlyZWN0b3J5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gWy4uLmRpcmVjdG9yaWVzXTtcbn1cblxuZnVuY3Rpb24gd29ya3NwYWNlQ2FuZGlkYXRlUm9vdHMocGF0dGVybnM6IHN0cmluZ1tdKTogV29ya3NwYWNlQ2FuZGlkYXRlUm9vdFtdIHtcbiAgY29uc3Qgcm9vdHMgPSBuZXcgTWFwPHN0cmluZywgbnVtYmVyIHwgdW5kZWZpbmVkPigpO1xuICBmb3IgKGNvbnN0IHBhdHRlcm4gb2YgcGF0dGVybnMpIHtcbiAgICBpZiAocGF0dGVybi5zdGFydHNXaXRoKCchJykpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHJvb3Qgb2YgY2FuZGlkYXRlUm9vdHMocGF0dGVybikpIHtcbiAgICAgIHJvb3RzLnNldChyb290LnJvb3QsIHJvb3RzLmhhcyhyb290LnJvb3QpID8gbWVyZ2VkTWF4RGVwdGgocm9vdHMuZ2V0KHJvb3Qucm9vdCksIHJvb3QubWF4RGVwdGgpIDogcm9vdC5tYXhEZXB0aCk7XG4gICAgfVxuICB9XG4gIHJldHVybiBbLi4ucm9vdHMuZW50cmllcygpXVxuICAgIC5tYXAoKFtyb290LCBtYXhEZXB0aF0pID0+ICh7IG1heERlcHRoLCByb290IH0pKVxuICAgIC5maWx0ZXIoKHJvb3QpID0+ICFoYXNQYXJlbnRSb290KHJvb3QsIHJvb3RzKSlcbiAgICAuc29ydCgobGVmdCwgcmlnaHQpID0+IGxlZnQucm9vdC5sb2NhbGVDb21wYXJlKHJpZ2h0LnJvb3QpKTtcbn1cblxuZnVuY3Rpb24gY2FuZGlkYXRlUm9vdHMocGF0dGVybjogc3RyaW5nKTogV29ya3NwYWNlQ2FuZGlkYXRlUm9vdFtdIHtcbiAgcmV0dXJuIGJyYWNlRXhwYW5kKG5vcm1hbGl6ZVdvcmtzcGFjZVBhdHRlcm4ocGF0dGVybikpLm1hcCgoZXhwYW5kZWRQYXR0ZXJuKSA9PiAoe1xuICAgIG1heERlcHRoOiB3b3Jrc3BhY2VQYXR0ZXJuTWF4RGVwdGgoZXhwYW5kZWRQYXR0ZXJuKSxcbiAgICByb290OiBjYW5kaWRhdGVSb290KGV4cGFuZGVkUGF0dGVybiksXG4gIH0pKTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VkTWF4RGVwdGgobGVmdDogbnVtYmVyIHwgdW5kZWZpbmVkLCByaWdodDogbnVtYmVyIHwgdW5kZWZpbmVkKTogbnVtYmVyIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIGxlZnQgPT09IHVuZGVmaW5lZCB8fCByaWdodCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogTWF0aC5tYXgobGVmdCwgcmlnaHQpO1xufVxuXG5mdW5jdGlvbiBoYXNQYXJlbnRSb290KHJvb3Q6IFdvcmtzcGFjZUNhbmRpZGF0ZVJvb3QsIHJvb3RzOiBNYXA8c3RyaW5nLCBudW1iZXIgfCB1bmRlZmluZWQ+KTogYm9vbGVhbiB7XG4gIHJldHVybiBbLi4ucm9vdHMuZW50cmllcygpXS5zb21lKFxuICAgIChbb3RoZXJSb290LCBvdGhlck1heERlcHRoXSkgPT5cbiAgICAgIG90aGVyUm9vdCAhPT0gcm9vdC5yb290ICYmXG4gICAgICAob3RoZXJSb290ID09PSAnLicgfHwgcm9vdC5yb290LnN0YXJ0c1dpdGgoYCR7b3RoZXJSb290fS9gKSkgJiZcbiAgICAgIGNvdmVyc0RlcHRoKG90aGVyTWF4RGVwdGgsIHJvb3QubWF4RGVwdGgpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGNvdmVyc0RlcHRoKHBhcmVudE1heERlcHRoOiBudW1iZXIgfCB1bmRlZmluZWQsIGNoaWxkTWF4RGVwdGg6IG51bWJlciB8IHVuZGVmaW5lZCk6IGJvb2xlYW4ge1xuICByZXR1cm4gcGFyZW50TWF4RGVwdGggPT09IHVuZGVmaW5lZCB8fCAoY2hpbGRNYXhEZXB0aCAhPT0gdW5kZWZpbmVkICYmIHBhcmVudE1heERlcHRoID49IGNoaWxkTWF4RGVwdGgpO1xufVxuXG5mdW5jdGlvbiBjYW5kaWRhdGVSb290KHBhdHRlcm46IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNlZ21lbnRzID0gW107XG4gIGZvciAoY29uc3Qgc2VnbWVudCBvZiBwYXR0ZXJuLnNwbGl0KCcvJykpIHtcbiAgICBpZiAoc2VnbWVudCA9PT0gJycgfHwgaGFzR2xvYk1hZ2ljKHNlZ21lbnQpKSB7XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgc2VnbWVudHMucHVzaChzZWdtZW50KTtcbiAgfVxuICByZXR1cm4gc2VnbWVudHMubGVuZ3RoID09PSAwID8gJy4nIDogc2VnbWVudHMuam9pbignLycpO1xufVxuXG5mdW5jdGlvbiBoYXNHbG9iTWFnaWMoc2VnbWVudDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiAvWyo/W1xcXXt9KCkhK10vLnRlc3Qoc2VnbWVudCk7XG59XG5cbmZ1bmN0aW9uIHdvcmtzcGFjZVBhdHRlcm5NYXhEZXB0aChwYXR0ZXJuOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICBpZiAocGF0dGVybi5zcGxpdCgnLycpLmluY2x1ZGVzKCcqKicpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gcGF0aERlcHRoKHBhdHRlcm4pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc0RpcmVjdG9yeShjd2Q6IHN0cmluZywgZGlyZWN0b3J5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IHN0YXQoam9pbihjd2QsIGRpcmVjdG9yeSkpKS5pc0RpcmVjdG9yeSgpO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gbGlzdERpcmVjdG9yaWVzKGN3ZDogc3RyaW5nLCBkaXJlY3RvcnkgPSAnLicsIG1heERlcHRoPzogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBkaXJlY3RvcmllcyA9IFtkaXJlY3RvcnldO1xuICBpZiAobWF4RGVwdGggIT09IHVuZGVmaW5lZCAmJiBwYXRoRGVwdGgoZGlyZWN0b3J5KSA+PSBtYXhEZXB0aCkge1xuICAgIHJldHVybiBkaXJlY3RvcmllcztcbiAgfVxuXG4gIGNvbnN0IGVudHJpZXMgPSBhd2FpdCByZWFkZGlyKGpvaW4oY3dkLCBkaXJlY3RvcnkpLCB7IHdpdGhGaWxlVHlwZXM6IHRydWUgfSk7XG5cbiAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7XG4gICAgaWYgKCFlbnRyeS5pc0RpcmVjdG9yeSgpIHx8IElHTk9SRURfRElSRUNUT1JJRVMuaGFzKGVudHJ5Lm5hbWUpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZERpcmVjdG9yeSA9IGpvaW4oZGlyZWN0b3J5LCBlbnRyeS5uYW1lKS5zcGxpdChzZXApLmpvaW4oJy8nKTtcbiAgICBpZiAobWF4RGVwdGggIT09IHVuZGVmaW5lZCAmJiBwYXRoRGVwdGgoY2hpbGREaXJlY3RvcnkpID4gbWF4RGVwdGgpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBkaXJlY3Rvcmllcy5wdXNoKC4uLihhd2FpdCBsaXN0RGlyZWN0b3JpZXMoY3dkLCBjaGlsZERpcmVjdG9yeSwgbWF4RGVwdGgpKSk7XG4gIH1cblxuICByZXR1cm4gZGlyZWN0b3JpZXM7XG59XG5cbmZ1bmN0aW9uIHBhdGhEZXB0aChwYXRoOiBzdHJpbmcpOiBudW1iZXIge1xuICByZXR1cm4gcGF0aCA9PT0gJy4nID8gMCA6IHBhdGguc3BsaXQoJy8nKS5sZW5ndGg7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGV4cGFuZFdvcmtzcGFjZVBhdHRlcm4oY3dkOiBzdHJpbmcsIGRpcmVjdG9yaWVzOiBzdHJpbmdbXSwgcGF0dGVybjogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBtYXRjaGVyID0gZ2xvYlBhdHRlcm5NYXRjaGVyKG5vcm1hbGl6ZVdvcmtzcGFjZVBhdHRlcm4ocGF0dGVybikpO1xuICBjb25zdCBtYXRjaGVzID0gW107XG5cbiAgZm9yIChjb25zdCBkaXJlY3Rvcnkgb2YgZGlyZWN0b3JpZXMpIHtcbiAgICBpZiAobWF0Y2hlcihkaXJlY3RvcnkpICYmIChhd2FpdCBoYXNQYWNrYWdlSnNvbihjd2QsIGRpcmVjdG9yeSkpKSB7XG4gICAgICBtYXRjaGVzLnB1c2goZGlyZWN0b3J5KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWF0Y2hlcztcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplV29ya3NwYWNlUGF0dGVybihwYXR0ZXJuOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplUGF0aChwYXR0ZXJuKS5yZXBsYWNlKC9cXC8kLywgJycpO1xuICBpZiAobm9ybWFsaXplZCA9PT0gJy4nKSB7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWQ7XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWQuc3RhcnRzV2l0aCgnLi8nKSA/IG5vcm1hbGl6ZWQuc2xpY2UoMikgOiBub3JtYWxpemVkO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQYXRoKHBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSBwYXRoLnNwbGl0KHNlcCkuam9pbignLycpO1xuICByZXR1cm4gbm9ybWFsaXplZCA9PT0gJycgPyAnLicgOiBub3JtYWxpemVkO1xufVxuXG5mdW5jdGlvbiBnbG9iUGF0dGVybk1hdGNoZXIocGF0dGVybjogc3RyaW5nKTogKGRpcmVjdG9yeTogc3RyaW5nKSA9PiBib29sZWFuIHtcbiAgcmV0dXJuIChkaXJlY3RvcnkpID0+IG1pbmltYXRjaChkaXJlY3RvcnksIHBhdHRlcm4sIHsgZG90OiB0cnVlIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBoYXNQYWNrYWdlSnNvbihjd2Q6IHN0cmluZywgZGlyZWN0b3J5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gKGF3YWl0IHN0YXQoam9pbihjd2QsIGRpcmVjdG9yeSwgJ3BhY2thZ2UuanNvbicpKSkuaXNGaWxlKCk7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBhc3NlcnROb0NhdGFsb2dEZXBlbmRlbmNpZXMoY3dkOiBzdHJpbmcsIHdvcmtzcGFjZURpcmVjdG9yaWVzOiBzdHJpbmdbXSk6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjYXRhbG9nRGVwZW5kZW5jaWVzID0gW107XG4gIGZvciAoY29uc3QgZGlyZWN0b3J5IG9mIFsnLicsIC4uLndvcmtzcGFjZURpcmVjdG9yaWVzXSkge1xuICAgIGNvbnN0IHBhY2thZ2VKc29uID0gYXdhaXQgcmVhZFBhY2thZ2VKc29uKGRpcmVjdG9yeSA9PT0gJy4nID8gY3dkIDogam9pbihjd2QsIGRpcmVjdG9yeSkpO1xuICAgIGZvciAoY29uc3QgZGVwZW5kZW5jeSBvZiBjYXRhbG9nRGVwZW5kZW5jeU5hbWVzKHBhY2thZ2VKc29uKSkge1xuICAgICAgY2F0YWxvZ0RlcGVuZGVuY2llcy5wdXNoKGAke2RpcmVjdG9yeSA9PT0gJy4nID8gJ3Jvb3QnIDogZGlyZWN0b3J5fTogJHtkZXBlbmRlbmN5fWApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChjYXRhbG9nRGVwZW5kZW5jaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihcbiAgICBbXG4gICAgICAnQ2Fubm90IHNhZmVseSB1cGRhdGUgQnVuIHdvcmtzcGFjZSBkZXBlbmRlbmNpZXMgd2l0aCBjYXRhbG9nIHJlZmVyZW5jZXMuJyxcbiAgICAgICdVcGRhdGUgY2F0YWxvZyB2ZXJzaW9ucyBpbiB0aGUgcm9vdCBwYWNrYWdlLmpzb24sIHRoZW4gcnVuIGJ1biBpbnN0YWxsLicsXG4gICAgICBgQ2F0YWxvZy1tYW5hZ2VkIGRlcGVuZGVuY2llczogJHtjYXRhbG9nRGVwZW5kZW5jaWVzLmpvaW4oJywgJyl9YCxcbiAgICBdLmpvaW4oJ1xcbicpXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlYWRQYWNrYWdlSnNvbihjd2Q6IHN0cmluZyk6IFByb21pc2U8UGFja2FnZUpzb24+IHtcbiAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gam9pbihjd2QsICdwYWNrYWdlLmpzb24nKTtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShhd2FpdCByZWFkRmlsZShwYWNrYWdlSnNvblBhdGgsICd1dGY4JykpIGFzIFBhY2thZ2VKc29uO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIHJlYWQgJHtwYWNrYWdlSnNvblBhdGh9OiAke1N0cmluZyhlcnJvcil9YCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2F0YWxvZ0RlcGVuZGVuY3lOYW1lcyhwYWNrYWdlSnNvbjogUGFja2FnZUpzb24pOiBzdHJpbmdbXSB7XG4gIGNvbnN0IG5hbWVzID0gW107XG4gIGZvciAoY29uc3Qgc2VjdGlvbiBvZiBERVBFTkRFTkNZX1NFQ1RJT05TKSB7XG4gICAgY29uc3QgZGVwZW5kZW5jaWVzID0gcGFja2FnZUpzb25bc2VjdGlvbl07XG4gICAgaWYgKCFkZXBlbmRlbmNpZXMpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2ZXJzaW9uXSBvZiBPYmplY3QuZW50cmllcyhkZXBlbmRlbmNpZXMpKSB7XG4gICAgICBpZiAodmVyc2lvbi5zdGFydHNXaXRoKCdjYXRhbG9nOicpKSB7XG4gICAgICAgIG5hbWVzLnB1c2gobmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBuYW1lcztcbn1cblxuYXN5bmMgZnVuY3Rpb24gdXBkYXRlUGFja2FnZShjd2Q6IHN0cmluZywgbGFiZWw6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBwcm9jZXNzLnN0ZG91dC53cml0ZShgXFxuIyAke2xhYmVsfVxcbmApO1xuICBhd2FpdCBydW5Db21tYW5kKFVQREFURV9DT01NQU5ELCBjd2QpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5Db21tYW5kKGNvbW1hbmQ6IHJlYWRvbmx5IFtzdHJpbmcsIC4uLnN0cmluZ1tdXSwgY3dkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0sIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICBjd2QsXG4gICAgc3RkaW86ICdpbmhlcml0JyxcbiAgfSk7XG5cbiAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHByb2Mub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgIHByb2Mub25jZSgnY2xvc2UnLCAoY29kZSkgPT4ge1xuICAgICAgaWYgKGNvZGUgPT09IDApIHtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZWplY3QobmV3IEVycm9yKGBDb21tYW5kIGZhaWxlZCBpbiAke3JlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGN3ZCkgfHwgJy4nfTogJHtjb21tYW5kLmpvaW4oJyAnKX1gKSk7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwiLyoqXG4gKiBgYmxvY2tRdW90ZTogJ2xpdGVyYWwnYDogVXNlcyBhIHBpcGUgKGBwcm9wOiB8YCkgdG8gcmVwcmVzZW50IG11bHRpbGluZSBzdHJpbmdzLlxuICogYGxpbmVXaWR0aDogMGA6IERpc2FibGVzIGxpbmUgd3JhcHBpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCB5YW1sU3RyaW5naWZ5T3B0aW9ucyA9IHsgYmxvY2tRdW90ZTogJ2xpdGVyYWwnLCBsaW5lV2lkdGg6IDAgfSBhcyBjb25zdDtcbiIsImltcG9ydCB7IHNwYXduLCBzcGF3blN5bmMgfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgc3RkZXJyIGFzIHByb2Nlc3NTdGRlcnIsIHN0ZGluIGFzIHByb2Nlc3NTdGRpbiB9IGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBzZXRUaW1lb3V0IGFzIHNsZWVwIH0gZnJvbSAnbm9kZTp0aW1lcnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5IGFzIHN0cmluZ2lmeVlhbWwgfSBmcm9tICd5YW1sJztcbmltcG9ydCB7IGNyZWF0ZVByb2Nlc3NUaW1lb3V0LCBzdHJlYW1Ub1RleHQsIHRpbWVvdXRFcnJvck1lc3NhZ2UgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuaW1wb3J0IHsgeWFtbFN0cmluZ2lmeU9wdGlvbnMgfSBmcm9tICcuLi95YW1sLmpzJztcblxuZXhwb3J0IHR5cGUgSnNvbk9iamVjdCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCB0eXBlIE1ldGFkYXRhTm9kZSA9IHtcbiAgbnVtYmVyOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nIHwgbnVsbDtcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBQYWdlSW5mbyA9IHtcbiAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlQ29ubmVjdGlvbjxUTm9kZT4gPSB7XG4gIG5vZGVzOiBUTm9kZVtdO1xuICBwYWdlSW5mbzogUGFnZUluZm87XG59O1xuXG50eXBlIFJ1bkNvbW1hbmRPcHRpb25zID0ge1xuICBzdGRpbkRhdGE/OiBzdHJpbmc7XG4gIGFsbG93ZWRFeGl0Q29kZXM/OiBudW1iZXJbXTtcbn07XG5cbmNvbnN0IEdIX1JFVFJZX01BWF9BVFRFTVBUUyA9IDM7XG5jb25zdCBHSF9SRVRSWV9CQVNFX0RFTEFZX01TID0gMTAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb2dyZXNzKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICBwcm9jZXNzU3RkZXJyLndyaXRlKGAke21lc3NhZ2V9XFxuYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGl0V2l0aEVycm9yKG1lc3NhZ2U6IHN0cmluZywgY29kZSA9IDEpOiBuZXZlciB7XG4gIHByb2Nlc3NTdGRlcnIud3JpdGUoYCR7bWVzc2FnZX1cXG5gKTtcbiAgcHJvY2Vzcy5leGl0KGNvZGUpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFN0ZGluVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAocHJvY2Vzc1N0ZGluLmlzVFRZKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBhd2FpdCBzdHJlYW1Ub1RleHQocHJvY2Vzc1N0ZGluKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXF1aXJlZFN0ZGluVGV4dChlcnJvck1lc3NhZ2UgPSAnRXJyb3I6IGlucHV0IGlzIHJlcXVpcmVkIG9uIHN0ZGluJyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGlucHV0ID0gYXdhaXQgcmVhZFN0ZGluVGV4dCgpO1xuICBpZiAoaW5wdXQubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICBleGl0V2l0aEVycm9yKGVycm9yTWVzc2FnZSwgMik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Db21tYW5kKGNvbW1hbmQ6IHN0cmluZ1tdLCBvcHRpb25zOiBSdW5Db21tYW5kT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYWxsb3dlZEV4aXRDb2RlcyA9IG9wdGlvbnMuYWxsb3dlZEV4aXRDb2RlcyA/PyBbXTtcblxuICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBHSF9SRVRSWV9NQVhfQVRURU1QVFM7IGF0dGVtcHQgKz0gMSkge1xuICAgIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kWzBdID8/ICcnLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgICBkZXRhY2hlZDogdHJ1ZSxcbiAgICAgIHN0ZGlvOiBbJ3BpcGUnLCAncGlwZScsICdwaXBlJ10sXG4gICAgfSk7XG4gICAgbGV0IGZhaWx1cmVNZXNzYWdlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgbGV0IHJldHJ5ID0gZmFsc2U7XG4gICAgY29uc3QgcHJvY2Vzc1RpbWVvdXQgPSBjcmVhdGVQcm9jZXNzVGltZW91dChwcm9jKTtcbiAgICB0cnkge1xuICAgICAgaWYgKG9wdGlvbnMuc3RkaW5EYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcHJvYy5zdGRpbi5lbmQob3B0aW9ucy5zdGRpbkRhdGEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvYy5zdGRpbi5lbmQoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZG91dCksXG4gICAgICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZGVyciksXG4gICAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIHByb2Mub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgICAgICAgIHByb2Mub25jZSgnY2xvc2UnLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID8/IDEpKTtcbiAgICAgICAgfSksXG4gICAgICBdKTtcbiAgICAgIGNvbnN0IG91dHB1dCA9IGAke3N0ZG91dH0ke3N0ZGVycn1gO1xuXG4gICAgICBpZiAocHJvY2Vzc1RpbWVvdXQudGltZWRPdXQoKSkge1xuICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IHRpbWVvdXRFcnJvck1lc3NhZ2Uob3V0cHV0LCBwcm9jZXNzVGltZW91dC50aW1lb3V0TXMsIGNvbW1hbmQpO1xuICAgICAgfSBlbHNlIGlmIChleGl0Q29kZSA9PT0gMCB8fCBhbGxvd2VkRXhpdENvZGVzLmluY2x1ZGVzKGV4aXRDb2RlKSkge1xuICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgfSBlbHNlIGlmIChpc1RyYW5zaWVudEdoRmFpbHVyZShjb21tYW5kLCBleGl0Q29kZSwgb3V0cHV0KSAmJiBhdHRlbXB0IDwgR0hfUkVUUllfTUFYX0FUVEVNUFRTKSB7XG4gICAgICAgIHJldHJ5ID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZhaWx1cmVNZXNzYWdlID0gb3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBwcm9jZXNzVGltZW91dC5jbGVhcigpO1xuICAgIH1cblxuICAgIGlmIChyZXRyeSkge1xuICAgICAgcHJvZ3Jlc3MoYFRyYW5zaWVudCBHaXRIdWIgQ0xJIGZhaWx1cmU7IHJldHJ5aW5nLi4uIChhdHRlbXB0ICR7YXR0ZW1wdH0gb2YgJHtHSF9SRVRSWV9NQVhfQVRURU1QVFMgLSAxfSlgKTtcbiAgICAgIGF3YWl0IHNsZWVwKEdIX1JFVFJZX0JBU0VfREVMQVlfTVMgKiBhdHRlbXB0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoZmFpbHVyZU1lc3NhZ2UpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoZmFpbHVyZU1lc3NhZ2UpO1xuICAgIH1cbiAgfVxuICBleGl0V2l0aEVycm9yKGBDb21tYW5kIGZhaWxlZCBhZnRlciAke0dIX1JFVFJZX01BWF9BVFRFTVBUU30gYXR0ZW1wdHM6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaChhcmdzOiBzdHJpbmdbXSwgc3RkaW5EYXRhPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHJ1bkNvbW1hbmQoWydnaCcsIC4uLmFyZ3NdLCB7IHN0ZGluRGF0YSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdoQWxsb3dFeGl0Q29kZXMoXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBhbGxvd2VkRXhpdENvZGVzOiBudW1iZXJbXSxcbiAgc3RkaW5EYXRhPzogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgcnVuQ29tbWFuZChbJ2doJywgLi4uYXJnc10sIHsgc3RkaW5EYXRhLCBhbGxvd2VkRXhpdENvZGVzIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudFJlcG9QYXJ0cygpOiBQcm9taXNlPFtzdHJpbmcsIHN0cmluZ10+IHtcbiAgY29uc3QgbmFtZVdpdGhPd25lciA9IChhd2FpdCBnaChbJ3JlcG8nLCAndmlldycsICctLWpzb24nLCAnbmFtZVdpdGhPd25lcicsICctLWpxJywgJy5uYW1lV2l0aE93bmVyJ10pKS50cmltKCk7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBuYW1lV2l0aE93bmVyLnNwbGl0KCcvJywgMik7XG4gIGlmICghb3duZXIgfHwgIW5hbWUpIHtcbiAgICBleGl0V2l0aEVycm9yKCdFcnJvcjogY291bGQgbm90IGRldGVybWluZSBjdXJyZW50IHJlcG9zaXRvcnknKTtcbiAgfVxuICByZXR1cm4gW293bmVyLCBuYW1lXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRQck51bWJlcigpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gKGF3YWl0IGdoKFsncHInLCAndmlldycsICctLWpzb24nLCAnbnVtYmVyJywgJy0tanEnLCAnLm51bWJlciddKSkudHJpbSgpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ3JhcGhxbDxUIGV4dGVuZHMgSnNvbk9iamVjdD4oXG4gIHF1ZXJ5OiBzdHJpbmcsXG4gIHZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZD4gPSB7fVxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IGFyZ3MgPSBbJ2FwaScsICdncmFwaHFsJywgJy1GJywgJ3F1ZXJ5PUAtJ107XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcnMpKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgYXJncy5wdXNoKCctRicsIGAke2tleX09JHt2YWx1ZX1gKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShhd2FpdCBnaChhcmdzLCBxdWVyeSkpIGFzIEpzb25PYmplY3QgJiB7IGVycm9ycz86IEFycmF5PHsgbWVzc2FnZT86IHN0cmluZyB9PiB9O1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSkge1xuICAgIHJldHVybiByZXNwb25zZSBhcyBUO1xuICB9XG5cbiAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IHJlc3BvbnNlLmVycm9ycy5tYXAoKGVycm9yKSA9PiBlcnJvci5tZXNzYWdlID8/ICdVbmtub3duIEdyYXBoUUwgZXJyb3InKS5qb2luKCdcXG4nKTtcbiAgZXhpdFdpdGhFcnJvcihgR3JhcGhRTCBBUEkgZXJyb3I6XFxuJHtlcnJvck1lc3NhZ2VzfWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24geWFtbER1bXAoZGF0YTogdW5rbm93bik6IHN0cmluZyB7XG4gIHJldHVybiBzdHJpbmdpZnlZYW1sKGRhdGEsIHlhbWxTdHJpbmdpZnlPcHRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBDb3B5PFQ+KGRhdGE6IFQpOiBUIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpIGFzIFQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21tYW5kQXZhaWxhYmxlKGNvbW1hbmQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gc3Bhd25TeW5jU2FmZShbY29tbWFuZCwgJy0tdmVyc2lvbiddKS5leGl0Q29kZSA9PT0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwYXduU3luY1NhZmUoY29tbWFuZDogc3RyaW5nW10sIHN0ZGluRGF0YT86IHN0cmluZyk6IHsgZXhpdENvZGU6IG51bWJlcjsgb3V0cHV0OiBzdHJpbmcgfSB7XG4gIGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhjb21tYW5kWzBdID8/ICcnLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgZW5jb2Rpbmc6ICd1dGY4JyxcbiAgICBpbnB1dDogc3RkaW5EYXRhLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGV4aXRDb2RlOiByZXN1bHQuc3RhdHVzID8/IChyZXN1bHQuZXJyb3IgPyAxIDogMCksXG4gICAgb3V0cHV0OiBgJHtyZXN1bHQuc3Rkb3V0ID8/ICcnfSR7cmVzdWx0LnN0ZGVyciA/PyAnJ31gLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1RyYW5zaWVudEdoRmFpbHVyZShjb21tYW5kOiBzdHJpbmdbXSwgZXhpdENvZGU6IG51bWJlciwgb3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGNvbW1hbmRbMF0gIT09ICdnaCcgfHwgZXhpdENvZGUgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gLyhIVFRQIDUwWzAyMzRdXFxifFdlIGhhZCBpc3N1ZXMgcHJvZHVjaW5nIHRoZSByZXNwb25zZSB0byB5b3VyIHJlcXVlc3QpL2kudGVzdChvdXRwdXQpO1xufVxuIiwiaW1wb3J0IHsgc3RkZXJyIGFzIHByb2Nlc3NTdGRlcnIgfSBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgc2V0VGltZW91dCBhcyBzbGVlcCB9IGZyb20gJ25vZGU6dGltZXJzL3Byb21pc2VzJztcbmltcG9ydCB7IHN0cmlwVlRDb250cm9sQ2hhcmFjdGVycyB9IGZyb20gJ25vZGU6dXRpbCc7XG5pbXBvcnQgeyBjcmVhdGVXYWl0UHJvZ3Jlc3MsIERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcbmltcG9ydCB7XG4gIGNvbW1hbmRBdmFpbGFibGUsXG4gIGN1cnJlbnRQck51bWJlcixcbiAgZGVlcENvcHksXG4gIGV4aXRXaXRoRXJyb3IsXG4gIGdoQWxsb3dFeGl0Q29kZXMsXG4gIHByb2dyZXNzLFxuICBzcGF3blN5bmNTYWZlLFxuICB5YW1sRHVtcCxcbn0gZnJvbSAnLi9zaGFyZWQuanMnO1xuXG5leHBvcnQgY29uc3QgVEVTVF9SRUxBVEVEX1BBVFRFUk4gPSAvXFxidGVzdFxcYi9pO1xuZXhwb3J0IGNvbnN0IFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTID0gREVGQVVMVF9XQUlUX0lOVEVSVkFMX1NFQ09ORFM7XG4vLyBPbmUgaHVuZHJlZCAzNi1zZWNvbmQgY2hlY2tzIHByZXNlcnZlcyB0aGUgbWF4aW11bSBvbmUtaG91ciBDSSB3YWl0IGJ1ZGdldC5cbmV4cG9ydCBjb25zdCBURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTID0gMTAwO1xuY29uc3QgVEVTVF9DSEVDS19XQUlUX01FU1NBR0UgPSAnV2FpdGluZyBmb3IgdGVzdC1yZWxhdGVkIHdvcmtmbG93cyB0byBmaW5pc2guJztcbmV4cG9ydCBjb25zdCBaRVJPX1RJTUVTVEFNUCA9ICcwMDAxLTAxLTAxVDAwOjAwOjAwWic7XG5leHBvcnQgY29uc3QgV09SS0ZMT1dfUlVOX0pTT05fRklFTERTID0gW1xuICAnYXR0ZW1wdCcsXG4gICdjb25jbHVzaW9uJyxcbiAgJ2NyZWF0ZWRBdCcsXG4gICdkYXRhYmFzZUlkJyxcbiAgJ2Rpc3BsYXlUaXRsZScsXG4gICdldmVudCcsXG4gICdoZWFkQnJhbmNoJyxcbiAgJ2hlYWRTaGEnLFxuICAnam9icycsXG4gICduYW1lJyxcbiAgJ251bWJlcicsXG4gICdzdGFydGVkQXQnLFxuICAnc3RhdHVzJyxcbiAgJ3VwZGF0ZWRBdCcsXG4gICd1cmwnLFxuICAnd29ya2Zsb3dOYW1lJyxcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIENoZWNrID0ge1xuICBidWNrZXQ/OiBzdHJpbmc7XG4gIGNvbXBsZXRlZEF0Pzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZXZlbnQ/OiBzdHJpbmc7XG4gIGxpbms/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN0YXJ0ZWRBdD86IHN0cmluZztcbiAgc3RhdGU/OiBzdHJpbmc7XG4gIHdvcmtmbG93Pzogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgQ2lSZXN1bHRzID0ge1xuICBzdW1tYXJ5OiB7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBwYXNzOiBudW1iZXI7XG4gICAgZmFpbDogbnVtYmVyO1xuICAgIHBlbmRpbmc6IG51bWJlcjtcbiAgICBza2lwcGluZzogbnVtYmVyO1xuICAgIGNhbmNlbDogbnVtYmVyO1xuICB9O1xuICBjaGVja3M6IENoZWNrW107XG59O1xuXG5leHBvcnQgdHlwZSBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uID0gJ2ZhaWxlZCcgfCAncnVubmluZycgfCAnc3VjY2Vzc2Z1bCc7XG5cbmV4cG9ydCB0eXBlIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdCA9IHtcbiAgY2xhc3NpZmljYXRpb246IFdvcmtmbG93Q2xhc3NpZmljYXRpb247XG4gIGNoZWNrOiBDaGVjaztcbiAgY2hlY2tzOiBDaGVja1tdO1xufTtcblxudHlwZSBDb21wYWN0V29ya2Zsb3dSdW4gPSB7XG4gIGJyYW5jaD86IHN0cmluZztcbiAgY29uY2x1c2lvbj86IHN0cmluZztcbiAgZmFpbGVkX3N0ZXA/OiBzdHJpbmc7XG4gIGpvYj86IHN0cmluZztcbiAgam9iX3VybD86IHN0cmluZztcbiAgcnVuX2lkPzogc3RyaW5nO1xuICBydW5fdXJsPzogc3RyaW5nO1xuICBzaGE/OiBzdHJpbmc7XG4gIHdvcmtmbG93Pzogc3RyaW5nO1xufTtcblxudHlwZSBXb3JrZmxvd1J1blN0ZXAgPSB7XG4gIGNvbmNsdXNpb24/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIG51bWJlcj86IG51bWJlcjtcbiAgc3RhdHVzPzogc3RyaW5nO1xufTtcblxudHlwZSBXb3JrZmxvd1J1bkpvYiA9IHtcbiAgY29uY2x1c2lvbj86IHN0cmluZztcbiAgZGF0YWJhc2VJZD86IG51bWJlcjtcbiAgbmFtZT86IHN0cmluZztcbiAgc3RhdHVzPzogc3RyaW5nO1xuICBzdGVwcz86IFdvcmtmbG93UnVuU3RlcFtdO1xuICB1cmw/OiBzdHJpbmc7XG59O1xuXG50eXBlIFdvcmtmbG93UnVuRGV0YWlscyA9IHtcbiAgY29uY2x1c2lvbj86IHN0cmluZztcbiAgaGVhZEJyYW5jaD86IHN0cmluZztcbiAgaGVhZFNoYT86IHN0cmluZztcbiAgam9icz86IFdvcmtmbG93UnVuSm9iW107XG4gIHVybD86IHN0cmluZztcbn07XG5cbmNvbnN0IEZBSUxFRF9MT0dfTElORV9QUkVGSVhfUEFUVEVSTiA9IC9eLio/XFx0VU5LTk9XTiBTVEVQXFx0XFxkezR9LVxcZHsyfS1cXGR7Mn1UW15aXStaXFxzKi87XG5jb25zdCBydGtBdmFpbGFibGUgPSBjb21tYW5kQXZhaWxhYmxlKCdydGsnKTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxhdGVzdFByQ2lSZXN1bHRzKHByTnVtYmVyPzogc3RyaW5nKTogUHJvbWlzZTxDaVJlc3VsdHM+IHtcbiAgY29uc3QgYXJncyA9IFsncHInLCAnY2hlY2tzJ107XG4gIGlmIChwck51bWJlcikge1xuICAgIGFyZ3MucHVzaChwck51bWJlcik7XG4gIH1cbiAgYXJncy5wdXNoKCctLWpzb24nLCAnYnVja2V0LGNvbXBsZXRlZEF0LGRlc2NyaXB0aW9uLGV2ZW50LGxpbmssbmFtZSxzdGFydGVkQXQsc3RhdGUsd29ya2Zsb3cnKTtcblxuICBsZXQgY2hlY2tzOiBDaGVja1tdID0gW107XG4gIHRyeSB7XG4gICAgY29uc3QgcmF3ID0gYXdhaXQgZ2hBbGxvd0V4aXRDb2RlcyhhcmdzLCBbOF0pO1xuICAgIGNoZWNrcyA9IHJhdy50cmltKCkubGVuZ3RoID4gMCA/IChKU09OLnBhcnNlKHJhdykgYXMgQ2hlY2tbXSkgOiBbXTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgY2hlY2tzID0gW107XG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHN1bW1hcnkgPSBjaGVja3MucmVkdWNlPFJlY29yZDxzdHJpbmcsIG51bWJlcj4+KChjb3VudHMsIGNoZWNrKSA9PiB7XG4gICAgY29uc3QgYnVja2V0ID0gY2hlY2suYnVja2V0ID8/ICcnO1xuICAgIGNvdW50c1tidWNrZXRdID0gKGNvdW50c1tidWNrZXRdID8/IDApICsgMTtcbiAgICByZXR1cm4gY291bnRzO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIHtcbiAgICBzdW1tYXJ5OiB7XG4gICAgICB0b3RhbDogY2hlY2tzLmxlbmd0aCxcbiAgICAgIHBhc3M6IHN1bW1hcnkucGFzcyA/PyAwLFxuICAgICAgZmFpbDogc3VtbWFyeS5mYWlsID8/IDAsXG4gICAgICBwZW5kaW5nOiBzdW1tYXJ5LnBlbmRpbmcgPz8gMCxcbiAgICAgIHNraXBwaW5nOiBzdW1tYXJ5LnNraXBwaW5nID8/IDAsXG4gICAgICBjYW5jZWw6IHN1bW1hcnkuY2FuY2VsID8/IDAsXG4gICAgfSxcbiAgICBjaGVja3MsXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzKFxuICBwck51bWJlcjogc3RyaW5nLFxuICBzbGVlcEZuOiAoc2Vjb25kczogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+ID0gc2xlZXBTZWNvbmRzLFxuICBsYXRlc3RDaVJlc3VsdHNGbjogKHByTnVtYmVyPzogc3RyaW5nKSA9PiBDaVJlc3VsdHMgfCBQcm9taXNlPENpUmVzdWx0cz4gPSBsYXRlc3RQckNpUmVzdWx0cyxcbiAgd3JpdGVQcm9ncmVzc0ZuOiAobWVzc2FnZTogc3RyaW5nKSA9PiB2b2lkID0gKG1lc3NhZ2UpID0+IHByb2Nlc3NTdGRlcnIud3JpdGUobWVzc2FnZSlcbik6IFByb21pc2U8W0NpUmVzdWx0cywgbnVtYmVyLCBib29sZWFuXT4ge1xuICBsZXQgYXR0ZW1wdHMgPSAwO1xuICBsZXQgY2lSZXN1bHRzID0gYXdhaXQgbGF0ZXN0Q2lSZXN1bHRzRm4ocHJOdW1iZXIpO1xuICBsZXQgc3RvcFdhaXRQcm9ncmVzcyA9ICgpID0+IHt9O1xuXG4gIHRyeSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgY29uc3QgY2xhc3NpZmllZFJlc3VsdHMgPSBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHMpO1xuICAgICAgY29uc3QgW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXSA9IGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChjbGFzc2lmaWVkUmVzdWx0cyk7XG5cbiAgICAgIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwIHx8IE9iamVjdC5rZXlzKHJ1bm5pbmdSZXN1bHRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFtjaVJlc3VsdHMsIGF0dGVtcHRzLCBmYWxzZV07XG4gICAgICB9XG4gICAgICBpZiAoYXR0ZW1wdHMgPj0gVEVTVF9DSEVDS19XQUlUX01BWF9BVFRFTVBUUykge1xuICAgICAgICByZXR1cm4gW2NpUmVzdWx0cywgYXR0ZW1wdHMsIHRydWVdO1xuICAgICAgfVxuXG4gICAgICBhdHRlbXB0cyArPSAxO1xuICAgICAgaWYgKGF0dGVtcHRzID09PSAxKSB7XG4gICAgICAgIHN0b3BXYWl0UHJvZ3Jlc3MgPSBjcmVhdGVXYWl0UHJvZ3Jlc3MoXG4gICAgICAgICAgVEVTVF9DSEVDS19XQUlUX01FU1NBR0UsXG4gICAgICAgICAgVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMsXG4gICAgICAgICAgd3JpdGVQcm9ncmVzc0ZuXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBhd2FpdCBzbGVlcEZuKFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTKTtcbiAgICAgIGNpUmVzdWx0cyA9IGF3YWl0IGxhdGVzdENpUmVzdWx0c0ZuKHByTnVtYmVyKTtcbiAgICB9XG4gIH0gZmluYWxseSB7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHM6IENpUmVzdWx0cyk6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4ge1xuICBjb25zdCBsYXRlc3RSZXN1bHRzQnlXb3JrZmxvdyA9IGNpUmVzdWx0cy5jaGVja3MucmVkdWNlPFJlY29yZDxzdHJpbmcsIENoZWNrW10+PigoZ3JvdXBlZFJlc3VsdHMsIGNoZWNrKSA9PiB7XG4gICAgY29uc3Qgd29ya2Zsb3dLZXkgPSBjaGVjay53b3JrZmxvdyB8fCBjaGVjay5uYW1lIHx8ICd1bmtub3duX3dvcmtmbG93JztcbiAgICBncm91cGVkUmVzdWx0c1t3b3JrZmxvd0tleV0gPz89IFtdO1xuICAgIGdyb3VwZWRSZXN1bHRzW3dvcmtmbG93S2V5XS5wdXNoKGNoZWNrKTtcbiAgICByZXR1cm4gZ3JvdXBlZFJlc3VsdHM7XG4gIH0sIHt9KTtcblxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93KS5tYXAoKFt3b3JrZmxvd0tleSwgY2hlY2tzXSkgPT4ge1xuICAgICAgY29uc3QgbGF0ZXN0QXR0ZW1wdENoZWNrcyA9IGxhdGVzdENoZWNrc0ZvcldvcmtmbG93KGNoZWNrcyk7XG4gICAgICBjb25zdCBmaXJzdENoZWNrID0gbGF0ZXN0QXR0ZW1wdENoZWNrc1swXTtcbiAgICAgIGlmICghZmlyc3RDaGVjaykge1xuICAgICAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogbm8gY2hlY2tzIGZvdW5kIGZvciB3b3JrZmxvdyAke3dvcmtmbG93S2V5fWApO1xuICAgICAgfVxuICAgICAgY29uc3QgbGF0ZXN0Q2hlY2sgPVxuICAgICAgICBsYXRlc3RBdHRlbXB0Q2hlY2tzLnJlZHVjZTxDaGVjayB8IHVuZGVmaW5lZD4oKGN1cnJlbnRMYXRlc3QsIGNoZWNrKSA9PiB7XG4gICAgICAgICAgaWYgKCFjdXJyZW50TGF0ZXN0KSB7XG4gICAgICAgICAgICByZXR1cm4gY2hlY2s7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjaykgPiBsYXRlc3RDaGVja1RpbWVzdGFtcChjdXJyZW50TGF0ZXN0KSA/IGNoZWNrIDogY3VycmVudExhdGVzdDtcbiAgICAgICAgfSwgdW5kZWZpbmVkKSA/PyBmaXJzdENoZWNrO1xuXG4gICAgICByZXR1cm4gW1xuICAgICAgICB3b3JrZmxvd0tleSxcbiAgICAgICAge1xuICAgICAgICAgIGNsYXNzaWZpY2F0aW9uOiB3b3JrZmxvd1Jlc3VsdENsYXNzaWZpY2F0aW9uKGxhdGVzdEF0dGVtcHRDaGVja3MpLFxuICAgICAgICAgIGNoZWNrOiBsYXRlc3RDaGVjayxcbiAgICAgICAgICBjaGVja3M6IGxhdGVzdEF0dGVtcHRDaGVja3MsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH0pXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoXG4gIGNsYXNzaWZpZWRSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+XG4pOiBbUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiwgUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0Pl0ge1xuICBjb25zdCBmYWlsZWRSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+ID0ge307XG4gIGNvbnN0IHJ1bm5pbmdSZXN1bHRzOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+ID0ge307XG5cbiAgZm9yIChjb25zdCBbd29ya2Zsb3dLZXksIHJlc3VsdF0gb2YgT2JqZWN0LmVudHJpZXMoY2xhc3NpZmllZFJlc3VsdHMpKSB7XG4gICAgaWYgKHJlc3VsdC5jbGFzc2lmaWNhdGlvbiA9PT0gJ2ZhaWxlZCcpIHtcbiAgICAgIGZhaWxlZFJlc3VsdHNbd29ya2Zsb3dLZXldID0gcmVzdWx0O1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGlmIChyZXN1bHQuY2xhc3NpZmljYXRpb24gPT09ICdydW5uaW5nJyAmJiByZXN1bHQuY2hlY2tzLnNvbWUoKGNoZWNrKSA9PiB0ZXN0UmVsYXRlZENoZWNrKGNoZWNrKSkpIHtcbiAgICAgIHJ1bm5pbmdSZXN1bHRzW3dvcmtmbG93S2V5XSA9IHJlc3VsdDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrOiBDaGVjayB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGxpbmsgPSBjaGVjaz8ubGluaztcbiAgaWYgKCFsaW5rKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gbGluay5tYXRjaCgvXFwvYWN0aW9uc1xcL3J1bnNcXC8oXFxkKykvKT8uWzFdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd29ya2Zsb3dSdW4ocnVuSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj4gfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCFydW5JZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBydW5Kc29uID0gYXdhaXQgZ2hBbGxvd0V4aXRDb2RlcyhbJ3J1bicsICd2aWV3JywgcnVuSWQsICctLWpzb24nLCBXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMuam9pbignLCcpXSwgWzFdKTtcbiAgaWYgKHJ1bkpzb24udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHJ1bkpzb24pIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBwcm9jZXNzU3RkZXJyLndyaXRlKGBXYXJuaW5nOiBDb3VsZCBub3QgcGFyc2UgSlNPTiBmb3Igd29ya2Zsb3cgcnVuICR7cnVuSWR9OiAke2Vycm9yLm1lc3NhZ2V9XFxuYCk7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3coY2hlY2tzOiBDaGVja1tdKTogQ2hlY2tbXSB7XG4gIGNvbnN0IGdyb3VwcyA9IGNoZWNrcy5yZWR1Y2UoKGdyb3VwZWRDaGVja3MsIGNoZWNrKSA9PiB7XG4gICAgY29uc3Qga2V5ID0gd29ya2Zsb3dBdHRlbXB0S2V5KGNoZWNrKTtcbiAgICBjb25zdCBncm91cCA9IGdyb3VwZWRDaGVja3MuZ2V0KGtleSk7XG4gICAgaWYgKGdyb3VwKSB7XG4gICAgICBncm91cC5wdXNoKGNoZWNrKTtcbiAgICAgIHJldHVybiBncm91cGVkQ2hlY2tzO1xuICAgIH1cbiAgICBncm91cGVkQ2hlY2tzLnNldChrZXksIFtjaGVja10pO1xuICAgIHJldHVybiBncm91cGVkQ2hlY2tzO1xuICB9LCBuZXcgTWFwPHN0cmluZywgQ2hlY2tbXT4oKSk7XG5cbiAgcmV0dXJuIEFycmF5LmZyb20oZ3JvdXBzLnZhbHVlcygpKS5yZWR1Y2U8Q2hlY2tbXT4oKGxhdGVzdEdyb3VwLCBjdXJyZW50R3JvdXApID0+IHtcbiAgICBpZiAobGF0ZXN0R3JvdXAubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gY3VycmVudEdyb3VwO1xuICAgIH1cblxuICAgIHJldHVybiBsYXRlc3RHcm91cFRpbWVzdGFtcChjdXJyZW50R3JvdXApID4gbGF0ZXN0R3JvdXBUaW1lc3RhbXAobGF0ZXN0R3JvdXApID8gY3VycmVudEdyb3VwIDogbGF0ZXN0R3JvdXA7XG4gIH0sIFtdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93QXR0ZW1wdEtleShjaGVjazogQ2hlY2spOiBzdHJpbmcge1xuICBjb25zdCBydW5JZCA9IHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrKTtcbiAgcmV0dXJuIHJ1bklkID8gYHJ1bjoke3J1bklkfWAgOiAndW5rbm93bl9ydW4nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbihjaGVja3M6IENoZWNrW10pOiBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uIHtcbiAgY29uc3QgYnVja2V0cyA9IGNoZWNrcy5tYXAoKGNoZWNrKSA9PiBjaGVjay5idWNrZXQgPz8gJycpO1xuICBpZiAoYnVja2V0cy5zb21lKChidWNrZXQpID0+ICFbJ3Bhc3MnLCAnc2tpcHBpbmcnLCAncGVuZGluZyddLmluY2x1ZGVzKGJ1Y2tldCkpKSB7XG4gICAgcmV0dXJuICdmYWlsZWQnO1xuICB9XG4gIGlmIChidWNrZXRzLmluY2x1ZGVzKCdwZW5kaW5nJykpIHtcbiAgICByZXR1cm4gJ3J1bm5pbmcnO1xuICB9XG4gIHJldHVybiAnc3VjY2Vzc2Z1bCc7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjazogQ2hlY2spOiBzdHJpbmcge1xuICBjb25zdCB0aW1lc3RhbXAgPSBjaGVjay5jb21wbGV0ZWRBdDtcbiAgaWYgKCF0aW1lc3RhbXAgfHwgdGltZXN0YW1wID09PSBaRVJPX1RJTUVTVEFNUCkge1xuICAgIHJldHVybiBjaGVjay5zdGFydGVkQXQgPz8gJyc7XG4gIH1cbiAgcmV0dXJuIHRpbWVzdGFtcDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlc3RSZWxhdGVkQ2hlY2soY2hlY2s6IENoZWNrKTogYm9vbGVhbiB7XG4gIHJldHVybiBbY2hlY2submFtZSwgY2hlY2sud29ya2Zsb3ddLnNvbWUoKHZhbHVlKSA9PiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIFRFU1RfUkVMQVRFRF9QQVRURVJOLnRlc3QodmFsdWUpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwU2Vjb25kcyhzZWNvbmRzOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgc2xlZXAoc2Vjb25kcyAqIDEwMDApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY2hlY2tQckNpKCk6IFByb21pc2U8eyBvdXRwdXQ6IHN0cmluZzsgZXhpdENvZGU6IG51bWJlciB9PiB7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoJ0ZldGNoaW5nIGxhdGVzdCBDSSByZXN1bHRzLi4uJyk7XG4gIGNvbnN0IFtjaVJlc3VsdHMsIHdhaXRBdHRlbXB0cywgd2FpdFRpbWVkT3V0XSA9IGF3YWl0IHdhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MocHJOdW1iZXIpO1xuICBjb25zdCBjbGFzc2lmaWVkTGF0ZXN0ID0gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzKTtcbiAgY29uc3QgW2ZhaWxlZFJlc3VsdHMsIHJ1bm5pbmdSZXN1bHRzXSA9IGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChjbGFzc2lmaWVkTGF0ZXN0KTtcblxuICBjb25zdCBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBzdW1tYXJ5OiBkZWVwQ29weShjaVJlc3VsdHMuc3VtbWFyeSksXG4gICAgd2FpdGVkX2Zvcl90ZXN0X3JlbGF0ZWRfY2hlY2tzOiB3YWl0QXR0ZW1wdHMgPiAwLFxuICAgIHRlc3RfcmVsYXRlZF9jaGVja193YWl0X2F0dGVtcHRzOiB3YWl0QXR0ZW1wdHMsXG4gICAgdGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfdGltZWRfb3V0OiB3YWl0VGltZWRPdXQsXG4gIH07XG5cbiAgaWYgKE9iamVjdC5rZXlzKGZhaWxlZFJlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICBwYXlsb2FkLmZhaWxlZF93b3JrZmxvd3MgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKGZhaWxlZFJlc3VsdHMpLm1hcChhc3luYyAoW3dvcmtmbG93S2V5LCByZXN1bHRdKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbXBhY3RXb3JrZmxvdyA9IGF3YWl0IGNvbXBhY3RXb3JrZmxvd1Jlc3VsdCh3b3JrZmxvd0tleSwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi5jb21wYWN0V29ya2Zsb3csXG4gICAgICAgICAgLi4uYnVpbGRGYWlsZWRXb3JrZmxvd0RldGFpbHMoYXdhaXQgZmFpbGVkV29ya2Zsb3dMb2cocmVzdWx0LmNoZWNrKSksXG4gICAgICAgIH07XG4gICAgICB9KVxuICAgICk7XG4gICAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDEgfTtcbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyhydW5uaW5nUmVzdWx0cykubGVuZ3RoID4gMCkge1xuICAgIHBheWxvYWQudGVzdF93b3JrZmxvd19vdXRwdXQgPSAnVGltZWQgb3V0IHdhaXRpbmcgZm9yIHRlc3QtcmVsYXRlZCB3b3JrZmxvd3MgdG8gZmluaXNoLic7XG4gICAgcGF5bG9hZC5ydW5uaW5nX3Rlc3RfcmVsYXRlZF93b3JrZmxvd3MgPSBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJ1bm5pbmdSZXN1bHRzKS5tYXAoKFt3b3JrZmxvd0tleSwgcmVzdWx0XSkgPT4gY29tcGFjdFdvcmtmbG93UmVzdWx0KHdvcmtmbG93S2V5LCByZXN1bHQpKVxuICAgICk7XG4gICAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDEgfTtcbiAgfVxuXG4gIHJldHVybiB7IG91dHB1dDogJ0FsbCBDSSB3b3JrZmxvd3MgcGFzc2VkLlxcbicsIGV4aXRDb2RlOiAwIH07XG59XG5cbmZ1bmN0aW9uIGxhdGVzdEdyb3VwVGltZXN0YW1wKGNoZWNrczogQ2hlY2tbXSk6IHN0cmluZyB7XG4gIHJldHVybiBjaGVja3MucmVkdWNlKChsYXRlc3QsIGNoZWNrKSA9PiB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2spO1xuICAgIHJldHVybiB0aW1lc3RhbXAgPiBsYXRlc3QgPyB0aW1lc3RhbXAgOiBsYXRlc3Q7XG4gIH0sICcnKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29tcGFjdFdvcmtmbG93UmVzdWx0KFxuICB3b3JrZmxvd0tleTogc3RyaW5nLFxuICByZXN1bHQ6IENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdFxuKTogUHJvbWlzZTx7IGNsYXNzaWZpY2F0aW9uOiBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uIH0gJiBDb21wYWN0V29ya2Zsb3dSdW4+IHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhyZXN1bHQuY2hlY2spO1xuICBjb25zdCBydW4gPSAoYXdhaXQgd29ya2Zsb3dSdW4ocnVuSWQpKSBhcyBXb3JrZmxvd1J1bkRldGFpbHMgfCB1bmRlZmluZWQ7XG4gIGNvbnN0IGZhaWxlZEpvYiA9IGZhaWxlZFdvcmtmbG93UnVuSm9iKHJ1biwgc3RyaW5nT3JVbmRlZmluZWQocmVzdWx0LmNoZWNrLm5hbWUpKTtcbiAgcmV0dXJuIHtcbiAgICBjbGFzc2lmaWNhdGlvbjogcmVzdWx0LmNsYXNzaWZpY2F0aW9uLFxuICAgIHdvcmtmbG93OiB3b3JrZmxvd0tleSxcbiAgICBqb2I6IHN0cmluZ09yVW5kZWZpbmVkKHJlc3VsdC5jaGVjay5uYW1lKSxcbiAgICBqb2JfdXJsOiBzdHJpbmdPclVuZGVmaW5lZChmYWlsZWRKb2I/LnVybCksXG4gICAgZmFpbGVkX3N0ZXA6IGZhaWxlZFdvcmtmbG93UnVuU3RlcE5hbWUoZmFpbGVkSm9iKSxcbiAgICBydW5faWQ6IHJ1bklkLFxuICAgIHJ1bl91cmw6IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8udXJsKSA/PyBzdHJpbmdPclVuZGVmaW5lZChyZXN1bHQuY2hlY2subGluayksXG4gICAgYnJhbmNoOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LmhlYWRCcmFuY2gpLFxuICAgIHNoYTogc3RyaW5nT3JVbmRlZmluZWQocnVuPy5oZWFkU2hhKSxcbiAgICBjb25jbHVzaW9uOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LmNvbmNsdXNpb24pLFxuICB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBmYWlsZWRXb3JrZmxvd0xvZyhjaGVjazogQ2hlY2spOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBydW5JZCA9IHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrKTtcbiAgaWYgKCFydW5JZCkge1xuICAgIHJldHVybiAnRmFpbGVkIGxhdGVzdCByZXN1bHQgaGFzIG5vIEdpdEh1YiBBY3Rpb25zIHJ1biBsaW5rLic7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydydW4nLCAndmlldycsIHJ1bklkLCAnLS1sb2ctZmFpbGVkJ10sIFsxXSk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkRmFpbGVkV29ya2Zsb3dEZXRhaWxzKGxvZzogc3RyaW5nKToge1xuICBmYWlsZWRfbG9nOiBzdHJpbmc7XG59IHtcbiAgcmV0dXJuIHtcbiAgICBmYWlsZWRfbG9nOiByZWZpbmVGYWlsZWRXb3JrZmxvd0xvZyhsb2cpLFxuICB9O1xufVxuXG5mdW5jdGlvbiByZWZpbmVGYWlsZWRXb3JrZmxvd0xvZyhsb2c6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IHNhbml0aXplZElucHV0ID0gc2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyhzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMobG9nKSk7XG4gIGlmICghcnRrQXZhaWxhYmxlKSB7XG4gICAgcmV0dXJuIHNhbml0aXplZElucHV0O1xuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0gc3Bhd25TeW5jU2FmZShbJ3J0aycsICdsb2cnXSwgc2FuaXRpemVkSW5wdXQpO1xuICByZXR1cm4gcmVzdWx0LmV4aXRDb2RlID09PSAwICYmIHJlc3VsdC5vdXRwdXQudHJpbSgpLmxlbmd0aCA+IDBcbiAgICA/IHNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2cocmVzdWx0Lm91dHB1dClcbiAgICA6IHNhbml0aXplZElucHV0O1xufVxuXG5mdW5jdGlvbiBzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nKGxvZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGxvZ1xuICAgIC5zcGxpdCgnXFxuJylcbiAgICAubWFwKChsaW5lKSA9PiBsaW5lLnJlcGxhY2UoRkFJTEVEX0xPR19MSU5FX1BSRUZJWF9QQVRURVJOLCAnJykpXG4gICAgLmpvaW4oJ1xcbicpXG4gICAgLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5nT3JVbmRlZmluZWQodmFsdWU6IHVua25vd24pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWUgOiB1bmRlZmluZWQ7XG59XG5cbmZ1bmN0aW9uIGZhaWxlZFdvcmtmbG93UnVuSm9iKFxuICBydW46IFdvcmtmbG93UnVuRGV0YWlscyB8IHVuZGVmaW5lZCxcbiAgam9iTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkXG4pOiBXb3JrZmxvd1J1bkpvYiB8IHVuZGVmaW5lZCB7XG4gIGlmICghcnVuPy5qb2JzIHx8IHJ1bi5qb2JzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIHJ1bi5qb2JzLmZpbmQoKGpvYikgPT4gam9iLm5hbWUgPT09IGpvYk5hbWUpID8/XG4gICAgcnVuLmpvYnMuZmluZCgoam9iKSA9PiBqb2IuY29uY2x1c2lvbiA9PT0gJ2ZhaWx1cmUnKSA/P1xuICAgIHJ1bi5qb2JzLmZpbmQoKGpvYikgPT4gam9iLnN0YXR1cyAhPT0gJ2NvbXBsZXRlZCcpXG4gICk7XG59XG5cbmZ1bmN0aW9uIGZhaWxlZFdvcmtmbG93UnVuU3RlcE5hbWUoam9iOiBXb3JrZmxvd1J1bkpvYiB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmICgham9iPy5zdGVwcyB8fCBqb2Iuc3RlcHMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgam9iLnN0ZXBzLmZpbmQoKHN0ZXApID0+IHN0ZXAuY29uY2x1c2lvbiA9PT0gJ2ZhaWx1cmUnKT8ubmFtZSA/P1xuICAgIGpvYi5zdGVwcy5maW5kKChzdGVwKSA9PiBzdGVwLnN0YXR1cyAhPT0gJ2NvbXBsZXRlZCcpPy5uYW1lXG4gICk7XG59XG4iLCJpbXBvcnQgeyBydW5Db21tYW5kV2l0aFByb2dyZXNzIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRCYXNlQnJhbmNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiAoYXdhaXQgY3VycmVudFB1bGxSZXF1ZXN0QmFzZUJyYW5jaCgpKSA/PyAoYXdhaXQgY3VycmVudERlZmF1bHRCcmFuY2goKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50RGVmYXVsdEJyYW5jaCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gcmVxdWlyZU5vbkVtcHR5KFxuICAgIChcbiAgICAgIGF3YWl0IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoW1xuICAgICAgICAnZ2gnLFxuICAgICAgICAncmVwbycsXG4gICAgICAgICd2aWV3JyxcbiAgICAgICAgJy0tanNvbicsXG4gICAgICAgICdkZWZhdWx0QnJhbmNoUmVmJyxcbiAgICAgICAgJy0tdGVtcGxhdGUnLFxuICAgICAgICAne3suZGVmYXVsdEJyYW5jaFJlZi5uYW1lfX0nLFxuICAgICAgXSlcbiAgICApLnRyaW0oKSxcbiAgICAnRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGRlZmF1bHQgYnJhbmNoJ1xuICApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjdXJyZW50UHVsbFJlcXVlc3RCYXNlQnJhbmNoKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgYmFzZUJyYW5jaCA9IChcbiAgICAgIGF3YWl0IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoWydnaCcsICdwcicsICd2aWV3JywgJy0tanNvbicsICdiYXNlUmVmTmFtZScsICctLXRlbXBsYXRlJywgJ3t7LmJhc2VSZWZOYW1lfX0nXSlcbiAgICApLnRyaW0oKTtcbiAgICByZXR1cm4gYmFzZUJyYW5jaC5sZW5ndGggPiAwID8gYmFzZUJyYW5jaCA6IHVuZGVmaW5lZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nKGVycm9yKSkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyhlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gL25vIHB1bGwgcmVxdWVzdHM/IGZvdW5kIGZvciBicmFuY2gvaS50ZXN0KFN0cmluZyhlcnJvcikpO1xufVxuXG5mdW5jdGlvbiByZXF1aXJlTm9uRW1wdHkodmFsdWU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufVxuIiwiaW1wb3J0IHsgaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7XG4gIGN1cnJlbnRQck51bWJlcixcbiAgY3VycmVudFJlcG9QYXJ0cyxcbiAgZXhpdFdpdGhFcnJvcixcbiAgZ2hBbGxvd0V4aXRDb2RlcyxcbiAgZ3JhcGhxbCxcbiAgdHlwZSBKc29uT2JqZWN0LFxuICB0eXBlIE1lc3NhZ2UsXG4gIHR5cGUgTWVzc2FnZUNvbm5lY3Rpb24sXG4gIHR5cGUgTWV0YWRhdGFOb2RlLFxuICBwcm9ncmVzcyxcbiAgeWFtbER1bXAsXG59IGZyb20gJy4vc2hhcmVkLmpzJztcblxudHlwZSBJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xufTtcblxudHlwZSBQclJldmlld05vZGUgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGJvZHk/OiBzdHJpbmcgfCBudWxsO1xuICBzdGF0ZT86IHN0cmluZyB8IG51bGw7XG4gIHN1Ym1pdHRlZEF0Pzogc3RyaW5nIHwgbnVsbDtcbiAgdXJsOiBzdHJpbmc7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBudWxsO1xufTtcblxudHlwZSBQdWxsUmVxdWVzdE1lc3NhZ2VzUmVzcG9uc2UgPSB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIHB1bGxSZXF1ZXN0Pzoge1xuICAgICAgICBjb21tZW50cz86IE1lc3NhZ2VDb25uZWN0aW9uPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlPjtcbiAgICAgICAgcmV2aWV3cz86IE1lc3NhZ2VDb25uZWN0aW9uPFByUmV2aWV3Tm9kZT47XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIElzc3VlTWVzc2FnZXNSZXNwb25zZSA9IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgaXNzdWU/OiB7XG4gICAgICAgIGNvbW1lbnRzPzogTWVzc2FnZUNvbm5lY3Rpb248SXNzdWVNZXNzYWdlQ29tbWVudE5vZGU+O1xuICAgICAgfTtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBQdWxsUmVxdWVzdE1ldGFkYXRhUmVzcG9uc2UgPSB7XG4gIGRhdGE/OiB7XG4gICAgcmVwb3NpdG9yeT86IHtcbiAgICAgIHB1bGxSZXF1ZXN0PzogTWV0YWRhdGFOb2RlO1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIElzc3VlTWV0YWRhdGFSZXNwb25zZSA9IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgaXNzdWU/OiBNZXRhZGF0YU5vZGU7XG4gICAgfTtcbiAgfTtcbn07XG5cbmNvbnN0IElTU1VFX01FU1NBR0VTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBpc3N1ZShudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgSVNTVUVfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBpc3N1ZShudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgbnVtYmVyXG4gICAgICAgIHRpdGxlXG4gICAgICAgIHVybFxuICAgICAgICBib2R5XG4gICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFBSX0NPTU1FTlRTX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUFJfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgbnVtYmVyXG4gICAgICAgIHRpdGxlXG4gICAgICAgIHVybFxuICAgICAgICBib2R5XG4gICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFBSX1JFVklFV1NfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIHN0YXRlXG4gICAgICAgICAgICBzdWJtaXR0ZWRBdFxuICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVJc3N1ZU51bWJlcihyZWZlcmVuY2U6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBleHRyYWN0R2l0SHViUmVmZXJlbmNlTnVtYmVyKHJlZmVyZW5jZSwgJ2lzc3VlJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemVQck51bWJlcihyZWZlcmVuY2U6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiBleHRyYWN0R2l0SHViUmVmZXJlbmNlTnVtYmVyKHJlZmVyZW5jZSwgJ3B1bGwgcmVxdWVzdCcpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCBpc3N1ZSA9IGF3YWl0IGlzc3VlTWVzc2FnZXMob3duZXIsIG5hbWUsIG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlTnVtYmVyKSk7XG4gIHByb2dyZXNzKGBGZXRjaGVkIGlzc3VlICMke2lzc3VlLm51bWJlcn0gbWVzc2FnZXMuYCk7XG4gIHJldHVybiB5YW1sRHVtcCh7IGlzc3VlIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hQck1lc3NhZ2VzKHByTnVtYmVyPzogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVzb2x2ZWRQck51bWJlciA9IHByTnVtYmVyID09PSB1bmRlZmluZWQgPyBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKSA6IG5vcm1hbGl6ZVByTnVtYmVyKHByTnVtYmVyKTtcbiAgY29uc3QgcHVsbFJlcXVlc3QgPSBhd2FpdCBjdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMocmVzb2x2ZWRQck51bWJlcik7XG4gIHByb2dyZXNzKGBGZXRjaGVkIHB1bGwgcmVxdWVzdCAjJHtwdWxsUmVxdWVzdC5udW1iZXJ9IG1lc3NhZ2VzLmApO1xuICByZXR1cm4geWFtbER1bXAoeyBwdWxsX3JlcXVlc3Q6IHB1bGxSZXF1ZXN0IH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlKCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gIGNvbnN0IHByTnVtYmVyT3V0cHV0ID0gYXdhaXQgZ2hBbGxvd0V4aXRDb2RlcyhbJ3ByJywgJ3ZpZXcnLCAnLS1qc29uJywgJ251bWJlcicsICctLWpxJywgJy5udW1iZXInXSwgWzFdKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBwck51bWJlck91dHB1dC50cmltKCk7XG4gIGlmIChpc0N1cnJlbnRQdWxsUmVxdWVzdE1pc3NpbmcocHJOdW1iZXJPdXRwdXQpIHx8ICEvXlxcZCskLy50ZXN0KHByTnVtYmVyKSkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBwdWxsUmVxdWVzdCA9IGF3YWl0IGN1cnJlbnRSZXBvUHVsbFJlcXVlc3RNZXNzYWdlcyhwck51bWJlcik7XG4gIHJldHVybiB5YW1sRHVtcCh7IHB1bGxfcmVxdWVzdDogcHVsbFJlcXVlc3QgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRSZXBvUHVsbFJlcXVlc3RNZXNzYWdlcyhwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIHJldHVybiBhd2FpdCBwck1lc3NhZ2VzKG93bmVyLCBuYW1lLCBwck51bWJlcik7XG59XG5cbmZ1bmN0aW9uIGV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIocmVmZXJlbmNlOiBzdHJpbmcgfCBudW1iZXIsIGxhYmVsOiAnaXNzdWUnIHwgJ3B1bGwgcmVxdWVzdCcpOiBzdHJpbmcge1xuICBjb25zdCByZWZlcmVuY2VUZXh0ID0gU3RyaW5nKHJlZmVyZW5jZSkudHJpbSgpO1xuICBpZiAocmVmZXJlbmNlVGV4dC5sZW5ndGggPT09IDApIHtcbiAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogJHtsYWJlbH0gcmVmZXJlbmNlIGlzIHJlcXVpcmVkYCwgMik7XG4gIH1cblxuICBpZiAoL15cXGQrJC8udGVzdChyZWZlcmVuY2VUZXh0KSkge1xuICAgIHJldHVybiByZWZlcmVuY2VUZXh0O1xuICB9XG5cbiAgY29uc3Qga2luZFNlZ21lbnQgPSBsYWJlbCA9PT0gJ2lzc3VlJyA/ICdpc3N1ZXMnIDogJ3B1bGwnO1xuICBjb25zdCBtYXRjaCA9IHJlZmVyZW5jZVRleHQubWF0Y2goXG4gICAgbmV3IFJlZ0V4cChgXmh0dHBzPzovLyg/Ond3d1xcXFwuKT9naXRodWJcXFxcLmNvbS9bXi9dKy9bXi9dKy8ke2tpbmRTZWdtZW50fS8oXFxcXGQrKSg/Oi98JClgKVxuICApO1xuICBpZiAobWF0Y2g/LlsxXSkge1xuICAgIHJldHVybiBtYXRjaFsxXTtcbiAgfVxuXG4gIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBleHBlY3RlZCBhIEdpdEh1YiAke2xhYmVsfSBudW1iZXIgb3IgVVJMLCByZWNlaXZlZCBcIiR7cmVmZXJlbmNlVGV4dH1cImAsIDIpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBpc3N1ZU1lc3NhZ2VzKG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgaXNzdWVOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBpc3N1ZSA9IGF3YWl0IGZldGNoTWV0YWRhdGE8SXNzdWVNZXRhZGF0YVJlc3BvbnNlPih7XG4gICAgcXVlcnk6IElTU1VFX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBpc3N1ZU51bWJlcixcbiAgICBub3VuOiAnaXNzdWUnLFxuICAgIHNlbGVjdE1ldGFkYXRhOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/Lmlzc3VlLFxuICB9KTtcbiAgY29uc3QgbWVzc2FnZXMgPSBhd2FpdCBwYWdpbmF0ZU1lc3NhZ2VzPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlLCBJc3N1ZU1lc3NhZ2VzUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogSVNTVUVfTUVTU0FHRVNfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IGlzc3VlTnVtYmVyLFxuICAgIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8uaXNzdWU/LmNvbW1lbnRzLFxuICAgIG1hcE5vZGU6IGNvbW1lbnRNZXNzYWdlLFxuICB9KTtcblxuICByZXR1cm4geyAuLi5pc3N1ZSwgbWVzc2FnZXMgfTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJNZXNzYWdlcyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgcHVsbFJlcXVlc3QgPSBhd2FpdCBmZXRjaE1ldGFkYXRhPFB1bGxSZXF1ZXN0TWV0YWRhdGFSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBQUl9RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogcHJOdW1iZXIsXG4gICAgbm91bjogJ3B1bGwgcmVxdWVzdCcsXG4gICAgc2VsZWN0TWV0YWRhdGE6IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3QsXG4gIH0pO1xuICBjb25zdCBbaXNzdWVDb21tZW50cywgcmV2aWV3c10gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgcHJJc3N1ZUNvbW1lbnRzKG93bmVyLCBuYW1lLCBwck51bWJlciksXG4gICAgcHJSZXZpZXdzKG93bmVyLCBuYW1lLCBwck51bWJlciksXG4gIF0pO1xuXG4gIHJldHVybiB7XG4gICAgLi4ucHVsbFJlcXVlc3QsXG4gICAgbWVzc2FnZXM6IFsuLi5pc3N1ZUNvbW1lbnRzLCAuLi5yZXZpZXdzXS5zb3J0KGNvbXBhcmVNZXNzYWdlc0J5Q3JlYXRlZEF0KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tcGFyZU1lc3NhZ2VzQnlDcmVhdGVkQXQobGVmdDogTWVzc2FnZSwgcmlnaHQ6IE1lc3NhZ2UpOiBudW1iZXIge1xuICBjb25zdCBsZWZ0Q3JlYXRlZEF0ID0gdHlwZW9mIGxlZnQuY3JlYXRlZEF0ID09PSAnc3RyaW5nJyA/IGxlZnQuY3JlYXRlZEF0IDogJyc7XG4gIGNvbnN0IHJpZ2h0Q3JlYXRlZEF0ID0gdHlwZW9mIHJpZ2h0LmNyZWF0ZWRBdCA9PT0gJ3N0cmluZycgPyByaWdodC5jcmVhdGVkQXQgOiAnJztcbiAgcmV0dXJuIGxlZnRDcmVhdGVkQXQubG9jYWxlQ29tcGFyZShyaWdodENyZWF0ZWRBdCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBySXNzdWVDb21tZW50cyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICByZXR1cm4gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSwgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IFBSX0NPTU1FTlRTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBwck51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0Py5jb21tZW50cyxcbiAgICBtYXBOb2RlOiBjb21tZW50TWVzc2FnZSxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHByUmV2aWV3cyhvd25lcjogc3RyaW5nLCBuYW1lOiBzdHJpbmcsIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2VbXT4ge1xuICByZXR1cm4gYXdhaXQgcGFnaW5hdGVNZXNzYWdlczxQclJldmlld05vZGUsIFB1bGxSZXF1ZXN0TWVzc2FnZXNSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBQUl9SRVZJRVdTX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBwck51bWJlcixcbiAgICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2UpID0+IHJlc3BvbnNlLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0Py5yZXZpZXdzLFxuICAgIG1hcE5vZGU6IHJldmlld01lc3NhZ2UsXG4gIH0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiBwYWdpbmF0ZU1lc3NhZ2VzPFROb2RlLCBUUmVzcG9uc2UgZXh0ZW5kcyBKc29uT2JqZWN0Pihjb25maWc6IHtcbiAgcXVlcnk6IHN0cmluZztcbiAgb3duZXI6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBudW1iZXI6IHN0cmluZyB8IG51bWJlcjtcbiAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlOiBUUmVzcG9uc2UpID0+IE1lc3NhZ2VDb25uZWN0aW9uPFROb2RlPiB8IHVuZGVmaW5lZDtcbiAgbWFwTm9kZTogKG5vZGU6IFROb2RlKSA9PiBNZXNzYWdlO1xufSk6IFByb21pc2U8TWVzc2FnZVtdPiB7XG4gIGxldCBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgY29uc3QgbWVzc2FnZXM6IE1lc3NhZ2VbXSA9IFtdO1xuXG4gIGZvciAoOzspIHtcbiAgICBjb25zdCBjb25uZWN0aW9uID0gY29uZmlnLnNlbGVjdENvbm5lY3Rpb24oXG4gICAgICBhd2FpdCBncmFwaHFsPFRSZXNwb25zZT4oY29uZmlnLnF1ZXJ5LCB7XG4gICAgICAgIG93bmVyOiBjb25maWcub3duZXIsXG4gICAgICAgIG5hbWU6IGNvbmZpZy5uYW1lLFxuICAgICAgICBudW1iZXI6IE51bWJlcihjb25maWcubnVtYmVyKSxcbiAgICAgICAgY3Vyc29yLFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgaWYgKCFjb25uZWN0aW9uKSB7XG4gICAgICByZXR1cm4gbWVzc2FnZXM7XG4gICAgfVxuXG4gICAgbWVzc2FnZXMucHVzaCguLi5jb25uZWN0aW9uLm5vZGVzLm1hcChjb25maWcubWFwTm9kZSkuZmlsdGVyKGhhc01lc3NhZ2VCb2R5KSk7XG5cbiAgICBpZiAoIWNvbm5lY3Rpb24ucGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIHJldHVybiBtZXNzYWdlcztcbiAgICB9XG4gICAgY3Vyc29yID0gY29ubmVjdGlvbi5wYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZldGNoTWV0YWRhdGE8VFJlc3BvbnNlIGV4dGVuZHMgSnNvbk9iamVjdD4oY29uZmlnOiB7XG4gIHF1ZXJ5OiBzdHJpbmc7XG4gIG93bmVyOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgbnVtYmVyOiBzdHJpbmcgfCBudW1iZXI7XG4gIG5vdW46IHN0cmluZztcbiAgc2VsZWN0TWV0YWRhdGE6IChyZXNwb25zZTogVFJlc3BvbnNlKSA9PiBNZXRhZGF0YU5vZGUgfCB1bmRlZmluZWQ7XG59KTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IG1ldGFkYXRhID0gY29uZmlnLnNlbGVjdE1ldGFkYXRhKFxuICAgIGF3YWl0IGdyYXBocWw8VFJlc3BvbnNlPihjb25maWcucXVlcnksIHtcbiAgICAgIG93bmVyOiBjb25maWcub3duZXIsXG4gICAgICBuYW1lOiBjb25maWcubmFtZSxcbiAgICAgIG51bWJlcjogTnVtYmVyKGNvbmZpZy5udW1iZXIpLFxuICAgIH0pXG4gICk7XG5cbiAgaWYgKCFtZXRhZGF0YSkge1xuICAgIGV4aXRXaXRoRXJyb3IoYENvdWxkIG5vdCBmaW5kICR7Y29uZmlnLm5vdW59ICMke2NvbmZpZy5udW1iZXJ9IGluICR7Y29uZmlnLm93bmVyfS8ke2NvbmZpZy5uYW1lfS5gKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbnVtYmVyOiBtZXRhZGF0YS5udW1iZXIsXG4gICAgdGl0bGU6IG1ldGFkYXRhLnRpdGxlLFxuICAgIHVybDogbWV0YWRhdGEudXJsLFxuICAgIGF1dGhvcjogbWV0YWRhdGEuYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQsXG4gICAgYm9keTogbWV0YWRhdGEuYm9keSA/PyAnJyxcbiAgfTtcbn1cblxuZnVuY3Rpb24gY29tbWVudE1lc3NhZ2UoY29tbWVudDogSXNzdWVNZXNzYWdlQ29tbWVudE5vZGUpOiBNZXNzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnY29tbWVudCcsXG4gICAgYXV0aG9yOiBjb21tZW50LmF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkLFxuICAgIGNyZWF0ZWRBdDogY29tbWVudC5jcmVhdGVkQXQsXG4gICAgdXJsOiBjb21tZW50LnVybCxcbiAgICBib2R5OiBjb21tZW50LmJvZHksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJldmlld01lc3NhZ2UocmV2aWV3OiBQclJldmlld05vZGUpOiBNZXNzYWdlIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAncmV2aWV3JyxcbiAgICBhdXRob3I6IHJldmlldy5hdXRob3I/LmxvZ2luID8/IHVuZGVmaW5lZCxcbiAgICBzdGF0ZTogcmV2aWV3LnN0YXRlID8/IHVuZGVmaW5lZCxcbiAgICBjcmVhdGVkQXQ6IHJldmlldy5zdWJtaXR0ZWRBdCA/PyB1bmRlZmluZWQsXG4gICAgdXJsOiByZXZpZXcudXJsLFxuICAgIGJvZHk6IHJldmlldy5ib2R5ID8/ICcnLFxuICB9O1xufVxuXG5mdW5jdGlvbiBoYXNNZXNzYWdlQm9keShtZXNzYWdlOiBNZXNzYWdlKTogYm9vbGVhbiB7XG4gIHJldHVybiB0eXBlb2YgbWVzc2FnZS5ib2R5ID09PSAnc3RyaW5nJyAmJiBtZXNzYWdlLmJvZHkubGVuZ3RoID4gMDtcbn1cbiIsImltcG9ydCB7IGN1cnJlbnRQck51bWJlciwgZXhpdFdpdGhFcnJvciwgZ2gsIHByb2dyZXNzLCBydW5Db21tYW5kLCB5YW1sRHVtcCB9IGZyb20gJy4vc2hhcmVkLmpzJztcblxuZXhwb3J0IHR5cGUgT3BlblByT3B0aW9ucyA9IHtcbiAgYm9keT86IHN0cmluZztcbiAgdGl0bGU/OiBzdHJpbmc7XG59O1xuXG5leHBvcnQgdHlwZSBVcGRhdGVQck9wdGlvbnMgPSB7XG4gIGJvZHk6IHN0cmluZztcbiAgdGl0bGU6IHN0cmluZztcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuUHIoeyBib2R5LCB0aXRsZSB9OiBPcGVuUHJPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBoZWFkID0gKGF3YWl0IHJ1bkNvbW1hbmQoWydnaXQnLCAnYnJhbmNoJywgJy0tc2hvdy1jdXJyZW50J10pKS50cmltKCk7XG4gIGNvbnN0IGJhc2UgPSAoYXdhaXQgZ2goWydyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ2RlZmF1bHRCcmFuY2hSZWYnLCAnLS1qcScsICcuZGVmYXVsdEJyYW5jaFJlZi5uYW1lJ10pKS50cmltKCk7XG5cbiAgaWYgKCFoZWFkKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCBicmFuY2gnKTtcbiAgfVxuICBpZiAoIWJhc2UpIHtcbiAgICBleGl0V2l0aEVycm9yKCdFcnJvcjogY291bGQgbm90IGRldGVybWluZSBkZWZhdWx0IGJyYW5jaCcpO1xuICB9XG4gIGlmIChoZWFkID09PSBiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IGN1cnJlbnQgYnJhbmNoIGlzIHRoZSBkZWZhdWx0IGJyYW5jaCAoJHtiYXNlfSlgKTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZUFyZ3MgPSBbJ3ByJywgJ2NyZWF0ZScsICctLWJhc2UnLCBiYXNlLCAnLS1oZWFkJywgaGVhZCwgJy0tZmlsbCddO1xuICBpZiAodGl0bGUpIHtcbiAgICBjcmVhdGVBcmdzLnB1c2goJy0tdGl0bGUnLCB0aXRsZSk7XG4gIH1cbiAgaWYgKGJvZHkpIHtcbiAgICBjcmVhdGVBcmdzLnB1c2goJy0tYm9keS1maWxlJywgJy0nKTtcbiAgfVxuXG4gIHByb2dyZXNzKCdDcmVhdGluZyBwdWxsIHJlcXVlc3QuLi4nKTtcbiAgYXdhaXQgZ2goY3JlYXRlQXJncywgYm9keSk7XG5cbiAgcmV0dXJuIHlhbWxEdW1wKFxuICAgIEpTT04ucGFyc2UoYXdhaXQgZ2goWydwcicsICd2aWV3JywgJy0tanNvbicsICdpZCxudW1iZXIsdGl0bGUsdXJsLHN0YXRlLGlzRHJhZnQsYmFzZVJlZk5hbWUsaGVhZFJlZk5hbWUsYXV0aG9yJ10pKVxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlUHIoeyBib2R5LCB0aXRsZSB9OiBVcGRhdGVQck9wdGlvbnMpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuXG4gIHByb2dyZXNzKGBVcGRhdGluZyBwdWxsIHJlcXVlc3QgIyR7cHJOdW1iZXJ9Li4uYCk7XG4gIHJldHVybiBhd2FpdCBlZGl0UHIocHJOdW1iZXIsIFsnLS10aXRsZScsIHRpdGxlLCAnLS1ib2R5LWZpbGUnLCAnLSddLCBib2R5KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZWRpdFByKHByTnVtYmVyOiBzdHJpbmcsIGVkaXRBcmdzOiBzdHJpbmdbXSwgc3RkaW5EYXRhPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgYXdhaXQgZ2goWydwcicsICdlZGl0JywgcHJOdW1iZXIsIC4uLmVkaXRBcmdzXSwgc3RkaW5EYXRhKTtcblxuICByZXR1cm4geWFtbER1bXAoXG4gICAgSlNPTi5wYXJzZShcbiAgICAgIGF3YWl0IGdoKFtcbiAgICAgICAgJ3ByJyxcbiAgICAgICAgJ3ZpZXcnLFxuICAgICAgICBwck51bWJlcixcbiAgICAgICAgJy0tanNvbicsXG4gICAgICAgICdpZCxudW1iZXIsdGl0bGUsdXJsLHN0YXRlLGlzRHJhZnQsYmFzZVJlZk5hbWUsaGVhZFJlZk5hbWUsYXV0aG9yLGJvZHknLFxuICAgICAgXSlcbiAgICApXG4gICk7XG59XG4iLCJpbXBvcnQge1xuICBjdXJyZW50UHJOdW1iZXIsXG4gIGN1cnJlbnRSZXBvUGFydHMsXG4gIGV4aXRXaXRoRXJyb3IsXG4gIGdyYXBocWwsXG4gIHByb2dyZXNzLFxuICByZWFkUmVxdWlyZWRTdGRpblRleHQsXG4gIHlhbWxEdW1wLFxufSBmcm9tICcuL3NoYXJlZC5qcyc7XG5cbnR5cGUgUmV2aWV3Q29tbWVudE5vZGUgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICBkaWZmSHVuaz86IHN0cmluZyB8IG51bGw7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBzdHJpbmcgfCBudWxsO1xufTtcblxudHlwZSBSZXZpZXdUaHJlYWROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICBpc1Jlc29sdmVkOiBib29sZWFuO1xuICBpc091dGRhdGVkPzogYm9vbGVhbiB8IG51bGw7XG4gIHBhdGg/OiBzdHJpbmcgfCBudWxsO1xuICBsaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgb3JpZ2luYWxMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgc3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgb3JpZ2luYWxTdGFydExpbmU/OiBudW1iZXIgfCBudWxsO1xuICBjb21tZW50czoge1xuICAgIG5vZGVzOiBSZXZpZXdDb21tZW50Tm9kZVtdO1xuICAgIHBhZ2VJbmZvOiB7XG4gICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbiAgfTtcbn07XG5cbmNvbnN0IFJFVklFV19USFJFQURfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdUaHJlYWRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICAgIGlzT3V0ZGF0ZWRcbiAgICAgICAgICAgIHBhdGhcbiAgICAgICAgICAgIGxpbmVcbiAgICAgICAgICAgIG9yaWdpbmFsTGluZVxuICAgICAgICAgICAgc3RhcnRMaW5lXG4gICAgICAgICAgICBvcmlnaW5hbFN0YXJ0TGluZVxuICAgICAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCkge1xuICAgICAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgICAgICBib2R5XG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICAgICAgZGlmZkh1bmtcbiAgICAgICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUkVWSUVXX0NPTU1FTlRfUVVFUlkgPSBgXG4gIHF1ZXJ5KCR0aHJlYWRJZDogSUQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICBub2RlKGlkOiAkdGhyZWFkSWQpIHtcbiAgICAgIC4uLiBvbiBQdWxsUmVxdWVzdFJldmlld1RocmVhZCB7XG4gICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICBkaWZmSHVua1xuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBSRVZJRVdfVEhSRUFEX0lEU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIHJldmlld1RocmVhZHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgaXNSZXNvbHZlZFxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFJlcGxpZXNGcm9tU3RkaW4oKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gIGNvbnN0IGlucHV0ID0gYXdhaXQgcmVhZFJlcXVpcmVkU3RkaW5UZXh0KCdFcnJvcjogSlNPTiBpbnB1dCBpcyByZXF1aXJlZCBvbiBzdGRpbicpO1xuICBjb25zdCBwYXlsb2FkID0gcGFyc2VSZXBseUlucHV0KGlucHV0KTtcbiAgY29uc3Qgbm9ybWFsaXplZFJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBbdGhyZWFkSWQsIGJvZHldIG9mIE9iamVjdC5lbnRyaWVzKHBheWxvYWQucmVwbGllcykpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnICYmIGJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgbm9ybWFsaXplZFJlcGxpZXNbdGhyZWFkSWRdID0gYm9keTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWRSZXBsaWVzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFxuICBxdWVyeTogc3RyaW5nLFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIsXG4gIG9uVGhyZWFkOiAodGhyZWFkOiBSZXZpZXdUaHJlYWROb2RlKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPlxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgcmV2aWV3VGhyZWFkcyA9IChcbiAgICAgIGF3YWl0IGdyYXBocWw8e1xuICAgICAgICBkYXRhPzoge1xuICAgICAgICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICAgICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgICAgICAgcmV2aWV3VGhyZWFkcz86IHtcbiAgICAgICAgICAgICAgICBub2RlczogUmV2aWV3VGhyZWFkTm9kZVtdO1xuICAgICAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KHF1ZXJ5LCB7XG4gICAgICAgIG93bmVyLFxuICAgICAgICBuYW1lLFxuICAgICAgICBudW1iZXI6IE51bWJlcihwck51bWJlciksXG4gICAgICAgIGN1cnNvcixcbiAgICAgIH0pXG4gICAgKS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8ucmV2aWV3VGhyZWFkcztcblxuICAgIGlmICghcmV2aWV3VGhyZWFkcykge1xuICAgICAgZXhpdFdpdGhFcnJvcihcbiAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIHJldmlld1RocmVhZHMgaW4gR3JhcGhRTCByZXNwb25zZS4gVGhlIHB1bGwgcmVxdWVzdCBtYXkgbm90IGV4aXN0IG9yIHRoZXJlIHdhcyBhbiBBUEkgZXJyb3IuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRocmVhZCBvZiByZXZpZXdUaHJlYWRzLm5vZGVzKSB7XG4gICAgICBhd2FpdCBvblRocmVhZCh0aHJlYWQpO1xuICAgIH1cblxuICAgIGlmICghcmV2aWV3VGhyZWFkcy5wYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdXJzb3IgPSByZXZpZXdUaHJlYWRzLnBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBpZHM6IHN0cmluZ1tdID0gW107XG4gIGF3YWl0IHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhSRVZJRVdfVEhSRUFEX0lEU19RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCAodGhyZWFkKSA9PiB7XG4gICAgaWYgKCF0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgaWRzLnB1c2godGhyZWFkLmlkKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaWRzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5yZXNvbHZlZFJldmlld1RocmVhZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPiB7XG4gIGNvbnN0IHRocmVhZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gPSBbXTtcblxuICBhd2FpdCBwYWdpbmF0ZVJldmlld1RocmVhZHMoUkVWSUVXX1RIUkVBRF9RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCBhc3luYyAodGhyZWFkKSA9PiB7XG4gICAgaWYgKHRocmVhZC5pc1Jlc29sdmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tbWVudHMgPSB0aHJlYWQuY29tbWVudHMubm9kZXMubWFwKG5vcm1hbGl6ZUNvbW1lbnRBdXRob3IpO1xuICAgIGxldCBwYWdlSW5mbyA9IHRocmVhZC5jb21tZW50cy5wYWdlSW5mbztcbiAgICBsZXQgY3Vyc29yID0gcGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcblxuICAgIHdoaWxlIChwYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgY29uc3QgY29tbWVudENvbm5lY3Rpb24gPSAoXG4gICAgICAgIGF3YWl0IGdyYXBocWw8e1xuICAgICAgICAgIGRhdGE/OiB7XG4gICAgICAgICAgICBub2RlPzoge1xuICAgICAgICAgICAgICBjb21tZW50cz86IHtcbiAgICAgICAgICAgICAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH0+KFJFVklFV19DT01NRU5UX1FVRVJZLCB7IHRocmVhZElkOiB0aHJlYWQuaWQsIGN1cnNvciB9KVxuICAgICAgKS5kYXRhPy5ub2RlPy5jb21tZW50cztcblxuICAgICAgaWYgKCFjb21tZW50Q29ubmVjdGlvbikge1xuICAgICAgICBleGl0V2l0aEVycm9yKGBDb3VsZCBub3QgZmluZCBjb21tZW50cyBpbiBHcmFwaFFMIHJlc3BvbnNlIGZvciB0aHJlYWQgJHt0aHJlYWQuaWR9LmApO1xuICAgICAgfVxuXG4gICAgICBjb21tZW50cy5wdXNoKC4uLmNvbW1lbnRDb25uZWN0aW9uLm5vZGVzLm1hcChub3JtYWxpemVDb21tZW50QXV0aG9yKSk7XG4gICAgICBwYWdlSW5mbyA9IGNvbW1lbnRDb25uZWN0aW9uLnBhZ2VJbmZvO1xuICAgICAgY3Vyc29yID0gcGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aHJlYWRzLnB1c2goe1xuICAgICAgaWQ6IHRocmVhZC5pZCxcbiAgICAgIGlzUmVzb2x2ZWQ6IHRocmVhZC5pc1Jlc29sdmVkLFxuICAgICAgaXNPdXRkYXRlZDogdGhyZWFkLmlzT3V0ZGF0ZWQsXG4gICAgICBwYXRoOiB0aHJlYWQucGF0aCxcbiAgICAgIGxpbmU6IHRocmVhZC5saW5lLFxuICAgICAgb3JpZ2luYWxMaW5lOiB0aHJlYWQub3JpZ2luYWxMaW5lLFxuICAgICAgc3RhcnRMaW5lOiB0aHJlYWQuc3RhcnRMaW5lLFxuICAgICAgb3JpZ2luYWxTdGFydExpbmU6IHRocmVhZC5vcmlnaW5hbFN0YXJ0TGluZSxcbiAgICAgIGNvbW1lbnRzLFxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gdGhyZWFkcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RQclJldmlld1RocmVhZHMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcygnRmV0Y2hpbmcgdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcy4uLicpO1xuICByZXR1cm4geWFtbER1bXAoeyB1bnJlc29sdmVkX3RocmVhZHM6IGF3YWl0IHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzKG93bmVyLCBuYW1lLCBwck51bWJlcikgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUHJSZXZpZXdUaHJlYWRzKHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuICBjb25zdCB1bnJlc29sdmVkSWRzID0gbmV3IFNldChhd2FpdCB1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzKG93bmVyLCBuYW1lLCBwck51bWJlcikpO1xuXG4gIHByb2dyZXNzKGBSZXBseWluZyB0byAke09iamVjdC5rZXlzKHJlcGxpZXMpLmxlbmd0aH0gcmV2aWV3IHRocmVhZHMuLi5gKTtcblxuICBjb25zdCByZXNvbHZlZFRocmVhZElkczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHJlcGxpZXMpO1xuXG4gIGZvciAoY29uc3QgW2luZGV4LCBbdGhyZWFkSWQsIGJvZHldXSBvZiBlbnRyaWVzLmVudHJpZXMoKSkge1xuICAgIHByb2dyZXNzKGBQcm9jZXNzaW5nICR7aW5kZXggKyAxfS8ke2VudHJpZXMubGVuZ3RofTogJHt0aHJlYWRJZH1gKTtcbiAgICBpZiAoIXVucmVzb2x2ZWRJZHMuaGFzKHRocmVhZElkKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBncmFwaHFsPHtcbiAgICAgIGRhdGE/OiB7XG4gICAgICAgIHJlc29sdmVSZXZpZXdUaHJlYWQ/OiB7XG4gICAgICAgICAgdGhyZWFkPzoge1xuICAgICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IGJvb2xlYW47XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfT4oXG4gICAgICBgXG4gICAgICAgIG11dGF0aW9uKCR0aHJlYWRJZDogSUQhLCAkYm9keTogU3RyaW5nISkge1xuICAgICAgICAgIGFkZFB1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkUmVwbHkoaW5wdXQ6IHtwdWxsUmVxdWVzdFJldmlld1RocmVhZElkOiAkdGhyZWFkSWQsIGJvZHk6ICRib2R5fSkge1xuICAgICAgICAgICAgY29tbWVudCB7XG4gICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXNvbHZlUmV2aWV3VGhyZWFkKGlucHV0OiB7dGhyZWFkSWQ6ICR0aHJlYWRJZH0pIHtcbiAgICAgICAgICAgIHRocmVhZCB7XG4gICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICB7IHRocmVhZElkLCBib2R5IH1cbiAgICApO1xuXG4gICAgaWYgKHJlc3BvbnNlLmRhdGE/LnJlc29sdmVSZXZpZXdUaHJlYWQ/LnRocmVhZD8uaXNSZXNvbHZlZCkge1xuICAgICAgcmVzb2x2ZWRUaHJlYWRJZHMucHVzaCh0aHJlYWRJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyZXNzKGBXYXJuaW5nOiBmYWlsZWQgdG8gcmVzb2x2ZSB0aHJlYWQgJHt0aHJlYWRJZH0uYCk7XG4gICAgfVxuICB9XG5cbiAgcHJvZ3Jlc3MoJ0RvbmUuJyk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHJlc29sdmVkX3RocmVhZF9pZHM6IHJlc29sdmVkVGhyZWFkSWRzIH0pO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVDb21tZW50QXV0aG9yKGNvbW1lbnQ6IFJldmlld0NvbW1lbnROb2RlKTogUmV2aWV3Q29tbWVudE5vZGUgJiB7IGF1dGhvcj86IHN0cmluZyB8IG51bGwgfSB7XG4gIHJldHVybiB7XG4gICAgLi4uY29tbWVudCxcbiAgICBhdXRob3I6IHR5cGVvZiBjb21tZW50LmF1dGhvciA9PT0gJ3N0cmluZycgPyBjb21tZW50LmF1dGhvciA6IChjb21tZW50LmF1dGhvcj8ubG9naW4gPz8gbnVsbCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVwbHlJbnB1dChpbnB1dDogc3RyaW5nKTogeyByZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPiB9IHtcbiAgY29uc3QgZXJyb3JQcmVmaXggPSAnRXJyb3I6IEludmFsaWQgaW5wdXQgZm9ybWF0IG9uIHN0ZGluJztcblxuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoaW5wdXQpIGFzIHVua25vd247XG4gICAgaWYgKCFpc1JlcGx5SW5wdXQocGFyc2VkKSkge1xuICAgICAgZXhpdFdpdGhFcnJvcihgJHtlcnJvclByZWZpeH06IGV4cGVjdGVkIGFuIG9iamVjdCB3aXRoIGEgc3RyaW5nLXZhbHVlZCBcXGByZXBsaWVzXFxgIG1hcGAsIDIpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogSW52YWxpZCBKU09OIHByb3ZpZGVkIG9uIHN0ZGluOiAke2Vycm9yLm1lc3NhZ2V9YCwgMik7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzUmVwbHlJbnB1dCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHsgcmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcmVwbGllcyA9ICh2YWx1ZSBhcyB7IHJlcGxpZXM/OiB1bmtub3duIH0pLnJlcGxpZXM7XG4gIGlmICh0eXBlb2YgcmVwbGllcyAhPT0gJ29iamVjdCcgfHwgcmVwbGllcyA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHJlcGxpZXMpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVwbGllcykuZXZlcnkoKHJlcGx5KSA9PiByZXBseSA9PT0gbnVsbCB8fCByZXBseSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiByZXBseSA9PT0gJ3N0cmluZycpO1xufVxuIiwiaW1wb3J0IHsgZmV0Y2hJc3N1ZU1lc3NhZ2VzIH0gZnJvbSAnLi4vcHIvcHJDb21tYW5kcy5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFBsYW5Qcm9tcHQoaXNzdWVOdW1iZXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGlzc3VlWWFtbCA9IGF3YWl0IGZldGNoSXNzdWVNZXNzYWdlcyhpc3N1ZU51bWJlcik7XG5cbiAgcmV0dXJuIGBcblBsYW4gYSBHaXRIdWIgaXNzdWUgYnkgZ2F0aGVyaW5nIGNvbnRleHQsIHdyaXRpbmcgYSBzcGVjaWZpY2F0aW9uIGZvciBzb2Z0d2FyZSBlbmdpbmVlcnMsIGFuZCBwb3N0aW5nIG9yIHVwZGF0aW5nIHRoYXQgc3BlY2lmaWNhdGlvbiBiYWNrIHRvIHRoZSBpc3N1ZS5cblRoZSB0YXJnZXQgaXNzdWUgbnVtYmVyIGlzICMke2lzc3VlTnVtYmVyfS4gSGVyZSBpcyB0aGUgZmV0Y2hlZCBpc3N1ZSBjb250ZXh0IGFzIFlBTUw6XG5+fn5+eWFtbFxuJHtpc3N1ZVlhbWwudHJpbSgpfVxufn5+flxuXG5Gb2xsb3cgdGhpcyB3b3JrZmxvdzpcbjEuIFJlYWQgdGhlIGFib3ZlIGlzc3VlIGJvZHkgYW5kIHRpbWVsaW5lIG1lc3NhZ2VzIGNhcmVmdWxseS5cbjIuIENvbGxlY3QgZW5vdWdoIHN1cHBvcnRpbmcgaW5mb3JtYXRpb24gYmVmb3JlIHdyaXRpbmcgdGhlIHNwZWNpZmljYXRpb246XG4gICAtIEluc3BlY3QgdGhlIHJlbGV2YW50IGNvZGUsIHN1cnJvdW5kaW5nIGNhbGwgc2l0ZXMsIHJlbGF0ZWQgdHlwZXMsIHRlc3RzLCBjb25maWd1cmF0aW9uLCByZWNlbnQgZGlmZnMsIGFuZCBhbnkgb3RoZXIgbG9jYWwgY29udGV4dCBuZWVkZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlLlxuICAgLSBJZiBjb2RlIGluc3BlY3Rpb24gaXMgZW5vdWdoLCB1c2UgdGhlIGN1cnJlbnQgY29kZWJhc2UgYXMgdGhlIHByaW1hcnkgZXZpZGVuY2UuXG4gICAtIElmIHRoZSBpc3N1ZSBkZXBlbmRzIG9uIHJ1bnRpbWUgYmVoYXZpb3IsIHJlcHJvZHVjZSBpdCB3aXRoIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgZXhwZXJpbWVudCwgc3VjaCBhcyBhIGZvY3VzZWQgY29tbWFuZCwgYSB0aW55IHNjcmlwdCwgYSB0ZW1wb3JhcnkgbG9jYWwgYXNzZXJ0aW9uLCBvciBhbm90aGVyIG5hcnJvdyBjaGVjayB0aGF0IGRvZXMgbm90IGNoYW5nZSB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuXG4gICAgIC0gQ2xlYW4gdXAgYW55IHRlbXBvcmFyeSBmaWxlcyBhZnRlciB0aGUgZXhwZXJpbWVudC5cbiAgIC0gSWYgdGhlIGlzc3VlIGRlcGVuZHMgb24gYSBsaWJyYXJ5LCBBUEksIG9yIGxhbmd1YWdlIGZlYXR1cmUsIGNvbmZpcm0gaXQgYWdhaW5zdCB0aGUgbGF0ZXN0IG9mZmljaWFsIGRvY3VtZW50YXRpb24gb3IgYW5vdGhlciBwcmltYXJ5IHNvdXJjZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gbWVtb3J5LlxuMy4gV3JpdGUgdGhlIHNwZWNpZmljYXRpb24gZm9yIHRoZSBpc3N1ZSBjb21tZW50LlxuICAgLSBXcml0ZSB0aGUgYmFja2dyb3VuZCBiYXNlZCBvbiB0aGUgY29sbGVjdGVkIGluZm9ybWF0aW9uLlxuICAgLSBEZWZpbmUgYSBnb2FsIHRoYXQgY2xlYXJseSBndWlkZXMgb3VyIGltcGxlbWVudGF0aW9uIGluIHRoZSByaWdodCBkaXJlY3Rpb24uXG4gICAtIFdyaXRlIGEgZGV0YWlsZWQgc3BlY2lmaWNhdGlvbiBpbmNvcnBvcmF0aW5nIHRoZSBldmlkZW5jZSB5b3UgY29sbGVjdGVkLlxuICAgLSBJZiBuZWVkZWQsIGluY2x1ZGUgY29kZSBzbmlwcGV0cyB0aGF0IGV4cGxhaW4gaG93IHRvIHVzZSBsaWJyYXJpZXMgb3IgQVBJcywgYWxvbmcgd2l0aCByZWZlcmVuY2VzIHRvIHRoZWlyIGRvY3VtZW50YXRpb24uXG40LiBQb3N0IHRoZSBzcGVjaWZpY2F0aW9uIGJhY2sgdG8gaXNzdWUgIyR7aXNzdWVOdW1iZXJ9LCB0aGVuIHByaW50IHRoZSBpc3N1ZSBVUkwuXG4gICAtIElmIHRoZSBpc3N1ZSBhbHJlYWR5IGhhcyBhIHNwZWNpZmljYXRpb24sIHVwZGF0ZSB0aGUgZXhpc3RpbmcgY29tbWVudCBpbnN0ZWFkIG9mIHBvc3RpbmcgYSBuZXcgb25lLlxuXG5Gb3JtYXQgdGhlIGlzc3VlIGNvbW1lbnQgZXhhY3RseSBsaWtlIHRoaXMsIGJ1dCBkbyBub3QgaW5jbHVkZSB0aGUgc3Vycm91bmRpbmcgXFxgfn5+flxcYCBmZW5jZXMgaW4gdGhlIGFjdHVhbCBjb21tZW50Olxufn5+flxuIyMgQmFja2dyb3VuZFxuXG5bU3VtbWFyaXplIHRoZSBjdXJyZW50IGJlaGF2aW9yIGFuZCBleHBsYWluIHRoZSBtb3RpdmF0aW9uIGJlaGluZCB0aGlzIGlzc3VlXVxuXG4jIyBHb2FsXG5cbltEZWZpbmUgdGhlIGdvYWwgd2Ugd2FudCB0byBhY2hpZXZlIGluIHRoaXMgaXNzdWVdXG5cbiMjIFNwZWNpZmljYXRpb25cblxuW0RldGFpbGVkIHNwZWNpZmljYXRpb24gZm9yIHNvZnR3YXJlIGVuZ2luZWVyc11cblxuIyMgS2V5IFRlY2hub2xvZ2llcyAoT05MWSBpZiBleHRlcm5hbCByZXNvdXJjZXMgYXJlIG5lZWRlZClcblxuW0Rlc2NyaWJlIHdoYXQgbGlicmFyaWVzIG9yIEFQSXMgd2Ugc2hvdWxkIHVzZSwgaW5jbHVkaW5nIGNvbmNyZXRlIHZlcnNpb25zIGFuZCBjb2RlIHNuaXBwZXRzLl1cblxufn5+flxuYC50cmltKCk7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gYnVpbGRNZXJnZUJhc2VDb21tYW5kKGJhc2VCcmFuY2g6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgZ2l0IG1lcmdlLWJhc2UgJHtzaGVsbFF1b3RlKGBvcmlnaW4vJHtiYXNlQnJhbmNofWApfSBIRUFEIDI+L2Rldi9udWxsIHx8IGdpdCBtZXJnZS1iYXNlICR7c2hlbGxRdW90ZShiYXNlQnJhbmNoKX0gSEVBRGA7XG59XG5cbmZ1bmN0aW9uIHNoZWxsUXVvdGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBgJyR7dmFsdWUucmVwbGFjZUFsbChcIidcIiwgXCInXFxcIidcXFwiJ1wiKX0nYDtcbn1cbiIsImltcG9ydCB7IGZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSB9IGZyb20gJy4uL3ByL3ByQ29tbWFuZHMuanMnO1xuaW1wb3J0IHsgY3VycmVudEJhc2VCcmFuY2ggfSBmcm9tICcuLi9yZXBvL2RlZmF1bHRCcmFuY2guanMnO1xuaW1wb3J0IHsgTk9fQ09OQ0VSTl9NRVNTQUdFIH0gZnJvbSAnLi4vcmV2aWV3L25vQ29uY2Vybi5qcyc7XG5pbXBvcnQgeyBidWlsZE1lcmdlQmFzZUNvbW1hbmQgfSBmcm9tICcuL2Jhc2VCcmFuY2hEaWZmQ29tbWFuZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFJldmlld1Byb21wdCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBiYXNlQnJhbmNoID0gYXdhaXQgY3VycmVudEJhc2VCcmFuY2goKTtcbiAgY29uc3QgbWVyZ2VCYXNlQ29tbWFuZCA9IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZChiYXNlQnJhbmNoKTtcbiAgY29uc3QgcHJDb250ZXh0ID0gYXdhaXQgZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlKCk7XG4gIHJldHVybiBgXG5SZXZpZXcgdGhlIGN1cnJlbnQgJHtwckNvbnRleHQgPyAncHVsbCByZXF1ZXN0JyA6ICdicmFuY2gnfSBhZ2FpbnN0IGl0cyBiYXNlIGJyYW5jaCAke2Jhc2VCcmFuY2h9IHZpYSBcXGBnaXQgZGlmZiBcIiQoJHttZXJnZUJhc2VDb21tYW5kfSlcIlxcYC5cbkZvciBlYWNoIGZpbmRpbmcsIGRvIHRoZSBmb2xsb3dpbmcgdGhyZWUgc3RlcHM6XG4xLiBHYXRoZXIgc3VwcG9ydGluZyBldmlkZW5jZTpcbiAgIC0gSW5zcGVjdCB0aGUgcmVmZXJlbmNlZCBjb2RlIGFuZCB0aGUgc3Vycm91bmRpbmcgY2FsbCBzaXRlcywgcmVsYXRlZCB0eXBlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb24sIGFuZCByZWNlbnQgZGlmZnMgd2hlbiB0aGV5IGFmZmVjdCB0aGUgY2xhaW0uXG4gICAtIElmIGNvZGUgaW5zcGVjdGlvbiBpcyBlbm91Z2gsIHVzZSB0aGUgY3VycmVudCBjb2RlYmFzZSBhcyB0aGUgcHJpbWFyeSBldmlkZW5jZS5cbiAgIC0gSWYgdGhlIGZpbmRpbmcgaXMgYWJvdXQgcnVudGltZSBiZWhhdmlvciwgcmVwcm9kdWNlIGl0IHdpdGggdGhlIHNtYWxsZXN0IHByYWN0aWNhbCBleHBlcmltZW50LCBzdWNoIGFzIGEgZm9jdXNlZCBjb21tYW5kLCBhIHRpbnkgc2NyaXB0LCBhIHRlbXBvcmFyeSBsb2NhbCBhc3NlcnRpb24sIG9yIGFub3RoZXIgbmFycm93IGNoZWNrIHRoYXQgZG9lcyBub3QgY2hhbmdlIHRoZSBpbnRlbmRlZCBiZWhhdmlvci5cbiAgIC0gSWYgdGhlIGZpbmRpbmcgZGVwZW5kcyBvbiBmcmFtZXdvcmssIGxpYnJhcnksIHBsYXRmb3JtLCBvciBsYW5ndWFnZSBiZWhhdmlvciwgY29uZmlybSBpdCBhZ2FpbnN0IHRoZSBsYXRlc3Qgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBvciBhbm90aGVyIHByaW1hcnkgc291cmNlIGluc3RlYWQgb2YgcmVseWluZyBvbiBtZW1vcnkuXG4yLiBKdWRnZSB3aGV0aGVyIHRoZSBmaW5kaW5nIGlzIHZhbGlkOlxuICAgLSBNYXJrIGl0IHZhbGlkIG9ubHkgd2hlbiB0aGUgYXZhaWxhYmxlIGV2aWRlbmNlIHNob3dzIHRoZSByZXBvcnRlZCBpc3N1ZSBpcyBzdGlsbCByZWFsIGluIHRoZSBjdXJyZW50IGNvZGViYXNlLlxuICAgLSBPdGhlcndpc2UsIG1hcmsgaXQgbm90IHZhbGlkLlxuMy4gQ2xlYW4gdXAgYW55IHRlbXBvcmFyeSBmaWxlcyBjcmVhdGVkIGR1cmluZyB0aGUgZXhwZXJpbWVudC5cbjQuIFByb3Bvc2UgYSBmaXggd2l0aG91dCBtb2RpZnlpbmcgdGhlIGNvZGU6XG4gICAtIERlc2NyaWJlIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgY2hhbmdlIHRoYXQgd291bGQgYWRkcmVzcyB0aGUgZmluZGluZy5cbiAgIC0gSW52ZXN0aWdhdGUgdGhlIGxpa2VseSBpbXBhY3Qgb2YgdGhhdCBjaGFuZ2UgYnkgaW5zcGVjdGluZyB0aGUgYWZmZWN0ZWQgY2FsbCBzaXRlcywgcmVsYXRlZCB0eXBlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb24sIGFuZCBhZGphY2VudCBiZWhhdmlvciwgYW5kIG5vdGUgYW55IGZvbGxvdy11cCBjaGFuZ2VzIG9yIHJpc2tzIHRoZSBmaXggd291bGQgbmVlZCB0byBhY2NvdW50IGZvci5cblxuUmVwb3J0IG9ubHkgdGhlIHZhbGlkIGZpbmRpbmdzLCB0aGUgZXZpZGVuY2UgZm9yIGVhY2ggb25lLCBhbmQgdGhlIHByb3Bvc2VkIGZpeCB3aXRoIGl0cyBsaWtlbHkgaW1wYWN0LiBJbmNsdWRlIGEgYnJpZWYganVzdGlmaWNhdGlvbiBmb3IgZWFjaCwgY2l0aW5nIHRoZSBldmlkZW5jZSB1c2VkIChlLmcuLCBhIGZhaWxpbmcgc2NlbmFyaW8sIGV4cGVyaW1lbnQgcmVzdWx0LCBvciBvZmZpY2lhbCBkb2N1bWVudGF0aW9uKS4gRG8gbm90IG1vZGlmeSB0aGUgY29kZS5cbklmIHRoZXJlIGFyZSBubyB2YWxpZCBmaW5kaW5ncywgcmVzcG9uZCBleGFjdGx5IHdpdGg6IFxcYCR7Tk9fQ09OQ0VSTl9NRVNTQUdFfVxcYFxuXG4ke2J1aWxkUHJDb250ZXh0SW5zdHJ1Y3Rpb25zKHByQ29udGV4dCl9XG5gLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRQckNvbnRleHRJbnN0cnVjdGlvbnMocHJDb250ZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICByZXR1cm4gcHJDb250ZXh0XG4gICAgPyBgQ3VycmVudCBwdWxsIHJlcXVlc3QgY29udGV4dDpcbn5+fn55YW1sXG4ke3ByQ29udGV4dC50cmltKCl9XG5+fn5+XG5gLnRyaW0oKVxuICAgIDogJyc7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gYnVpbGRTY3JlZW5zaG90UHJvbXB0KGluaXRpYWxVcmw6IHN0cmluZywgcGFnZU5hbWU6IHN0cmluZywgc2NyZWVuc2hvdERlc2NyaXB0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzYW5pdGl6ZWREZXNjcmlwdGlvbiA9IHNjcmVlbnNob3REZXNjcmlwdGlvbi5yZXBsYWNlQWxsKCdcXG4nLCAnICcpLnJlcGxhY2VBbGwoJ1wiJywgXCInXCIpO1xuICByZXR1cm4gYFxuVXNlIFxcYHBsYXl3cmlnaHQtY2xpXFxgIHNraWxsIHRvIHRha2UgYSBzY3JlZW5zaG90IG9mIFwiJHtzYW5pdGl6ZWREZXNjcmlwdGlvbn1cIiBieSBuYXZpZ2F0aW5nIGZyb20gJHtpbml0aWFsVXJsfSB0byBcIiR7cGFnZU5hbWV9XCIgcGFnZS5cblxuRm9sbG93IHRoaXMgd29ya2Zsb3c6XG4xLiBPcGVuIHRoZSBpbml0aWFsIHBhZ2UgYXQgJHtpbml0aWFsVXJsfS5cbjIuIE5hdmlnYXRlIGZyb20gdGhhdCBpbml0aWFsIHBhZ2UgdW50aWwgeW91IHJlYWNoIHRoZSBwYWdlIGlkZW50aWZpZWQgYXMgJHtwYWdlTmFtZX0uXG4gICAtIElmIGNvZGUgZXJyb3JzLCBydW50aW1lIGZhaWx1cmVzLCBvciBicm9rZW4gVUkgZmxvd3MgcHJldmVudCBuYXZpZ2F0aW9uLCBpbnZlc3RpZ2F0ZSB0aGUgY2F1c2UgaW4gdGhlIGxvY2FsIGNvZGViYXNlLCBtYWtlIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgY29kZSBmaXgsIGFuZCB2ZXJpZnkgdGhhdCB0aGUgcGFnZSBjYW4gbm93IGJlIHJlYWNoZWQgYmVmb3JlIGNvbnRpbnVpbmcuXG4gICAtIElmIHlvdSBjYW5ub3QgZml4IHRoZSBlcnJvcnMsIHJlcG9ydCBvbiB0aGUgZXJyb3JzIHRoZW4gc3RvcC5cbjMuIENhcHR1cmUgYSBzY3JlZW5zaG90IHRoYXQgZm9jdXNlcyBvbiB0aGlzIHRhcmdldDogXCIke3Nhbml0aXplZERlc2NyaXB0aW9ufVwiLlxuNC4gS2VlcCB0aGUgZ2VuZXJhdGVkIGltYWdlIGFydGlmYWN0IGFuZCByZXBvcnQgdGhlIHNjcmVlbnNob3QgZmlsZSBwYXRoIHBsdXMgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB3aGF0IHdhcyBjYXB0dXJlZC4gSWYgeW91IGhhZCB0byBmaXggY29kZSBmaXJzdCwgYWxzbyBzdW1tYXJpemUgdGhlIGZpeC5cbmAudHJpbSgpO1xufVxuIiwiaW1wb3J0IHsgZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlIH0gZnJvbSAnLi4vcHIvcHJDb21tYW5kcy5qcyc7XG5pbXBvcnQgeyBjdXJyZW50QmFzZUJyYW5jaCB9IGZyb20gJy4uL3JlcG8vZGVmYXVsdEJyYW5jaC5qcyc7XG5pbXBvcnQgeyBidWlsZE1lcmdlQmFzZUNvbW1hbmQgfSBmcm9tICcuL2Jhc2VCcmFuY2hEaWZmQ29tbWFuZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFNpbXBsaWZ5UHJvbXB0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGJhc2VCcmFuY2ggPSBhd2FpdCBjdXJyZW50QmFzZUJyYW5jaCgpO1xuICBjb25zdCBtZXJnZUJhc2VDb21tYW5kID0gYnVpbGRNZXJnZUJhc2VDb21tYW5kKGJhc2VCcmFuY2gpO1xuICBjb25zdCBwckNvbnRleHQgPSBhd2FpdCBmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUoKTtcbiAgcmV0dXJuIGBcblNpbXBsaWZ5IHRoZSBjdXJyZW50ICR7cHJDb250ZXh0ID8gJ3B1bGwgcmVxdWVzdCcgOiAnYnJhbmNoJ30gYWdhaW5zdCBpdHMgYmFzZSBicmFuY2ggdXNpbmcgXFxgZ2l0IGRpZmYgXCIkKCR7bWVyZ2VCYXNlQ29tbWFuZH0pXCJcXGAuXG5GaXJzdCwgaW5zcGVjdCB0aGUgZGlmZiBhbmQgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBlYWNoIGNoYW5nZWQgYXJlYS4gVGhpcyBpbmNsdWRlcyBuZWFyYnkgZnVuY3Rpb25zLCB0eXBlcywgY2FsbCBzaXRlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb25zLCBhbmQgYW55IG90aGVyIGZpbGVzIHRoYXQgaGVscCBkZXRlcm1pbmUgaWYgdGhlIGNoYW5nZSBpcyB0cnVseSBuZWNlc3NhcnkuXG5MZXZlcmFnZSB0aGlzIGNvbnRleHQgdG8gaWRlbnRpZnkgcmVkdW5kYW5jaWVzIHRoYXQgY2FuIGJlIHNhZmVseSByZW1vdmVkIG9yIHNpbXBsaWZpZWQuIExvb2sgZm9yIGR1cGxpY2F0ZSBsb2dpYywgcmVwZWF0ZWQgY29uZGl0aW9uYWxzLCB1bm5lY2Vzc2FyeSBhYnN0cmFjdGlvbnMsIG92ZXJsYXBwaW5nIGNvZGUgcGF0aHMsIGRlYWQgY29kZSwgb3IgZWRpdHMgbWFkZSBvYnNvbGV0ZSB1cG9uIHVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgY29udGV4dC5cblxuUHJpb3JpdGl6ZSBzaW1wbGlmaWNhdGlvbnMgdGhhdCByZWR1Y2UgdGhlIHJldmlld2VyJ3MgYnVyZGVuLCBzdWNoIGFzOlxuLSBSZW1vdmluZyByZWR1bmRhbnQgZWRpdHMgb3IgZGVhZCBjb2RlLlxuLSBFbGltaW5hdGluZyBvciBtZXJnaW5nIGR1cGxpY2F0ZWQgbG9naWMgZGlzY292ZXJlZCBieSBjb21wYXJpbmcgdGhlIGRpZmYgd2l0aCByZWxhdGVkIGNvZGUuXG4tIEZsYXR0ZW5pbmcgdW5uZWNlc3NhcmlseSBjb21wbGV4IGxvZ2ljIGludHJvZHVjZWQgaW4gdGhlIGRpZmYgKGUuZy4sIHVzaW5nIGVhcmx5IHJldHVybnMgdG8gcmVkdWNlIG5lc3RpbmcsIHNpbXBsaWZ5aW5nIGJvb2xlYW4gZXhwcmVzc2lvbnMsIG9yIHJlbW92aW5nIHJlZHVuZGFudCB3cmFwcGVyIGZ1bmN0aW9ucykuXG5cbkNvbW1pdCBhbmQgcHVzaCB5b3VyIGNoYW5nZXMuIEFmdGVyd2FyZCwgc3VtbWFyaXplIHRoZSByZWR1bmRhbmNpZXMgb3IgdW5uZWNlc3NhcnkgY29tcGxleGl0eSB5b3UgaGF2ZSByZW1vdmVkLlxuXG4ke3ByQ29udGV4dCA/IGBDdXJyZW50IHB1bGwgcmVxdWVzdCBjb250ZXh0Olxcbn5+fn55YW1sXFxuJHtwckNvbnRleHQudHJpbSgpfVxcbn5+fn5gIDogJyd9XG5gLnRyaW0oKTtcbn1cbiIsImltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgeyBydW5Db21tYW5kV2l0aFByb2dyZXNzIH0gZnJvbSAnLi4vcHJvY2Vzcy9ydW5Db21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGluc3RhbGxQYWNrZWRTa2lsbHMoKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoXG4gICAgW1xuICAgICAgJ2J1bngnLFxuICAgICAgJ3NraWxsc0BsYXRlc3QnLFxuICAgICAgJ2FkZCcsXG4gICAgICBmaWxlVVJMVG9QYXRoKG5ldyBVUkwoJy4uLy4uJywgaW1wb3J0Lm1ldGEudXJsKSksXG4gICAgICAnLS1nbG9iYWwnLFxuICAgICAgJy0teWVzJyxcbiAgICAgICctLXNraWxsJyxcbiAgICAgICcqJyxcbiAgICAgICctLWFnZW50JyxcbiAgICAgICdjbGF1ZGUtY29kZScsXG4gICAgICAnLS1hZ2VudCcsXG4gICAgICAnY29kZXgnLFxuICAgICAgJy0tYWdlbnQnLFxuICAgICAgJ2dlbWluaS1jbGknLFxuICAgIF0sXG4gICAge1xuICAgICAgd2FpdE1lc3NhZ2U6ICdJbnN0YWxsaW5nIHBhY2thZ2VkIHNraWxscyBnbG9iYWxseS4nLFxuICAgIH1cbiAgKTtcbn1cbiIsIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7XG4gIGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2UsXG4gIGRpc3BsYXlBZ2VudE5hbWUsXG4gIHJ1bkFnZW50Q29tbWFuZCxcbiAgcnVuQWxsQWdlbnRDb21tYW5kcyxcbn0gZnJvbSAnLi9hZ2VudC9hZ2VudENvbW1hbmRzLmpzJztcbmltcG9ydCB7IHVwZGF0ZUJ1bkRlcGVuZGVuY2llcyB9IGZyb20gJy4vZGVwcy91cGRhdGVCdW5EZXBlbmRlbmNpZXMuanMnO1xuaW1wb3J0IHtcbiAgY2hlY2tQckNpLFxuICBmZXRjaElzc3VlTWVzc2FnZXMsXG4gIGZldGNoUHJNZXNzYWdlcyxcbiAgbGlzdFByUmV2aWV3VGhyZWFkcyxcbiAgbm9ybWFsaXplSXNzdWVOdW1iZXIsXG4gIG9wZW5QcixcbiAgcmVhZFJlcGxpZXNGcm9tU3RkaW4sXG4gIHJlYWRSZXF1aXJlZFN0ZGluVGV4dCxcbiAgcmVhZFN0ZGluVGV4dCxcbiAgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyxcbiAgdXBkYXRlUHIsXG59IGZyb20gJy4vcHIvcHJDb21tYW5kcy5qcyc7XG5pbXBvcnQgeyBidWlsZFBsYW5Qcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvcGxhblByb21wdC5qcyc7XG5pbXBvcnQgeyBidWlsZFJldmlld1Byb21wdCB9IGZyb20gJy4vcHJvbXB0cy9yZXZpZXdQcm9tcHQuanMnO1xuaW1wb3J0IHsgYnVpbGRTY3JlZW5zaG90UHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3NjcmVlbnNob3RQcm9tcHQuanMnO1xuaW1wb3J0IHsgYnVpbGRTaW1wbGlmeVByb21wdCB9IGZyb20gJy4vcHJvbXB0cy9zaW1wbGlmeVByb21wdC5qcyc7XG5pbXBvcnQgeyBpbnN0YWxsUGFja2VkU2tpbGxzIH0gZnJvbSAnLi9za2lsbHMvaW5zdGFsbFNraWxscy5qcyc7XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtLm5hbWUoJ2FnZW50LXNraWxscycpLmRlc2NyaXB0aW9uKCdDTEkgY29tbWFuZHMgZm9yIHRoZSBza2lsbHMgaW4gdGhpcyByZXBvc2l0b3J5Jykuc2hvd0hlbHBBZnRlckVycm9yKCk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2luc3RhbGwtc2tpbGxzJylcbiAgLmRlc2NyaXB0aW9uKCdJbnN0YWxsIGFsbCBwYWNrYWdlZCBza2lsbHMgZ2xvYmFsbHkgZm9yIENsYXVkZSBDb2RlLCBDb2RleCwgYW5kIEdlbWluaSBDTEknKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGluc3RhbGxQYWNrZWRTa2lsbHMoKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnRG9uZVxcbicpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgndXBkYXRlLWJ1bi1kZXBzJylcbiAgLmRlc2NyaXB0aW9uKCdVcGRhdGUgYWxsIEJ1biBkZXBlbmRlbmNpZXMgaW4gdGhlIHJvb3QgcGFja2FnZSBhbmQgd29ya3NwYWNlIHBhY2thZ2VzJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCB1cGRhdGVCdW5EZXBlbmRlbmNpZXMoKTtcbiAgfSk7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAncmV2aWV3JyxcbiAgZGVzY3JpcHRpb246ICdSdW4gcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoIHdpdGggdGhlIHNlbGVjdGVkIGFnZW50JyxcbiAgb3B0aW9uRGVzY3JpcHRpb246ICdVc2UgYSByZXZpZXcgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2FsbCcsICdjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIHJ1bjogKG1vZGUpID0+XG4gICAgbW9kZSA9PT0gJ2FsbCdcbiAgICAgID8gcnVuQWxsQWdlbnRDb21tYW5kcyhidWlsZFJldmlld1Byb21wdCgpLCB7XG4gICAgICAgICAgYWxsQWdlbnRzTGFiZWw6ICdyZXZpZXcgYWdlbnRzJyxcbiAgICAgICAgICBtYXBPdXRwdXQ6IChhZ2VudCwgb3V0cHV0KSA9PiB7XG4gICAgICAgICAgICBpZiAoY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZShvdXRwdXQpKSB7XG4gICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYCMjICR7ZGlzcGxheUFnZW50TmFtZShhZ2VudCl9XFxuXFxuJHtvdXRwdXR9YDtcbiAgICAgICAgICB9LFxuICAgICAgICB9KVxuICAgICAgOiBydW5BZ2VudENvbW1hbmQobW9kZSwgYnVpbGRSZXZpZXdQcm9tcHQoKSksXG59KTtcblxuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctY29kZXgnLCAnUnVuIENvZGV4IHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFJldmlld1Byb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgncmV2aWV3LWNsYXVkZScsICdSdW4gQ2xhdWRlIENvZGUgcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjbGF1ZGUnLCBidWlsZFJldmlld1Byb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgncmV2aWV3LWdlbWluaScsICdSdW4gR2VtaW5pIENMSSByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2dlbWluaScsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpXG4pO1xuXG5hZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kKHtcbiAgbmFtZTogJ3BsYW4nLFxuICBkZXNjcmlwdGlvbjogJ1J1biBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUgd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQnLFxuICBvcHRpb25EZXNjcmlwdGlvbjogJ1VzZSBhIHBsYW5uaW5nIGFnZW50JyxcbiAgY2hvaWNlczogWydhbGwnLCAnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddLFxuICBhcmd1bWVudE5hbWU6ICc8aXNzdWU+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJyxcbiAgcnVuOiAobW9kZSwgaXNzdWVSZWZlcmVuY2UpID0+XG4gICAgbW9kZSA9PT0gJ2FsbCdcbiAgICAgID8gcnVuQWxsQWdlbnRDb21tYW5kcyhidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSwge1xuICAgICAgICAgIGFsbEFnZW50c0xhYmVsOiAncGxhbm5pbmcgYWdlbnRzJyxcbiAgICAgICAgfSlcbiAgICAgIDogcnVuQWdlbnRDb21tYW5kKG1vZGUsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3BsYW4tY29kZXgnLCAnUnVuIENvZGV4IHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZScsIHtcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcsXG4gIHJ1bjogKGlzc3VlUmVmZXJlbmNlKSA9PiBydW5BZ2VudENvbW1hbmQoJ2NvZGV4JywgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSkpLFxufSk7XG5hZGRBZ2VudENvbW1hbmQoJ3BsYW4tY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChpc3N1ZVJlZmVyZW5jZSkgPT4gcnVuQWdlbnRDb21tYW5kKCdjbGF1ZGUnLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcbmFkZEFnZW50Q29tbWFuZCgncGxhbi1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlJywge1xuICBhcmd1bWVudE5hbWU6ICc8aXNzdWU+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJyxcbiAgcnVuOiAoaXNzdWVSZWZlcmVuY2UpID0+IHJ1bkFnZW50Q29tbWFuZCgnZ2VtaW5pJywgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSkpLFxufSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3NjcmVlbnNob3QnKVxuICAuZGVzY3JpcHRpb24oJ1Rha2UgYSBzY3JlZW5zaG90IHdpdGggdGhlIHNlbGVjdGVkIGFnZW50IHZpYSBwbGF5d3JpZ2h0LWNsaScpXG4gIC5hcmd1bWVudCgnPGluaXRpYWwtdXJsPicsICdJbml0aWFsIFVSTCB0byBvcGVuIGJlZm9yZSBuYXZpZ2F0aW5nJylcbiAgLmFyZ3VtZW50KCc8cGFnZS1uYW1lPicsICdQYWdlIG5hbWUgdG8gbmF2aWdhdGUgdG8gZnJvbSB0aGUgaW5pdGlhbCBwYWdlJylcbiAgLmFyZ3VtZW50KCc8ZGVzY3JpcHRpb24+JywgJ0Rlc2NyaXB0aW9uIG9mIHRoZSBwYXJ0IHRvIGNhcHR1cmUgaW4gdGhlIHNjcmVlbnNob3QnKVxuICAuYWRkT3B0aW9uKFxuICAgIG5ldyBPcHRpb24oJy0tYWdlbnQgPGFnZW50PicsICdVc2UgYSBzY3JlZW5zaG90IGFnZW50JykuY2hvaWNlcyhbJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSkubWFrZU9wdGlvbk1hbmRhdG9yeSgpXG4gIClcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKFxuICAgIGFzeW5jIChcbiAgICAgIGluaXRpYWxVcmw6IHN0cmluZyxcbiAgICAgIHBhZ2VOYW1lOiBzdHJpbmcsXG4gICAgICBkZXNjcmlwdGlvbjogc3RyaW5nLFxuICAgICAgb3B0aW9uczogeyBhZ2VudDogJ2NvZGV4JyB8ICdjbGF1ZGUnIHwgJ2dlbWluaScgfVxuICAgICkgPT4ge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoXG4gICAgICAgIGF3YWl0IHJ1bkFnZW50Q29tbWFuZChvcHRpb25zLmFnZW50LCBidWlsZFNjcmVlbnNob3RQcm9tcHQoaW5pdGlhbFVybCwgcGFnZU5hbWUsIGRlc2NyaXB0aW9uKSlcbiAgICAgICk7XG4gICAgfVxuICApO1xuXG5hZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kKHtcbiAgbmFtZTogJ3NpbXBsaWZ5JyxcbiAgZGVzY3JpcHRpb246ICdSdW4gUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2ggd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQnLFxuICBvcHRpb25EZXNjcmlwdGlvbjogJ1VzZSBhIHNpbXBsaWZ5IGFnZW50JyxcbiAgY2hvaWNlczogWydjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIHJ1bjogKGFnZW50KSA9PiBydW5BZ2VudENvbW1hbmQoYWdlbnQsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSksXG59KTtcblxuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1jb2RleCcsICdSdW4gQ29kZXggUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NvZGV4JywgYnVpbGRTaW1wbGlmeVByb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgnc2ltcGxpZnktY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY2xhdWRlJywgYnVpbGRTaW1wbGlmeVByb21wdCgpKVxuKTtcbmFkZEFnZW50Q29tbWFuZCgnc2ltcGxpZnktZ2VtaW5pJywgJ1J1biBHZW1pbmkgQ0xJIFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdnZW1pbmknLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdvcGVuLXByJylcbiAgLmRlc2NyaXB0aW9uKCdDcmVhdGUgYSBwdWxsIHJlcXVlc3QgZm9yIHRoZSBjdXJyZW50IGJyYW5jaCcpXG4gIC5hcmd1bWVudCgnPHRpdGxlPicsICdQdWxsIHJlcXVlc3QgdGl0bGUnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKHRpdGxlOiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVhZFN0ZGluVGV4dCgpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IG9wZW5Qcih7IGJvZHk6IGJvZHkgfHwgdW5kZWZpbmVkLCB0aXRsZSB9KTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtvdXRwdXR9XFxuYCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCd1cGRhdGUtcHInKVxuICAuZGVzY3JpcHRpb24oJ1VwZGF0ZSB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QgdGl0bGUgYW5kIGJvZHknKVxuICAuYXJndW1lbnQoJzx0aXRsZT4nLCAnUHVsbCByZXF1ZXN0IHRpdGxlJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICh0aXRsZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3QgYm9keSA9IGF3YWl0IHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgnRXJyb3I6IFBSIGJvZHkgaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCB1cGRhdGVQcih7IGJvZHksIHRpdGxlIH0pO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGAke291dHB1dH1cXG5gKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2NoZWNrLXByLWNpJylcbiAgLmRlc2NyaXB0aW9uKCdTaG93IHRoZSBsYXRlc3QgdGVzdC1yZWxhdGVkIENJIHJlc3VsdHMgZm9yIHRoZSBjdXJyZW50IHB1bGwgcmVxdWVzdCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY2hlY2tQckNpKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUocmVzdWx0Lm91dHB1dCk7XG4gICAgcHJvY2Vzcy5leGl0KHJlc3VsdC5leGl0Q29kZSk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdmZXRjaC1pc3N1ZScpXG4gIC5kZXNjcmlwdGlvbignRmV0Y2ggYW4gaXNzdWUgYm9keSBhbmQgdGltZWxpbmUgbWVzc2FnZXMgYXMgWUFNTCcpXG4gIC5hcmd1bWVudCgnPGlzc3VlPicsICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoaXNzdWVSZWZlcmVuY2U6IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZldGNoSXNzdWVNZXNzYWdlcyhpc3N1ZVJlZmVyZW5jZSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2ZldGNoLXByJylcbiAgLmRlc2NyaXB0aW9uKCdGZXRjaCBhIHB1bGwgcmVxdWVzdCBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBhcyBZQU1MLCBleGNsdWRpbmcgaW5saW5lIGNvbW1lbnRzJylcbiAgLmFyZ3VtZW50KCdbcHJdJywgJ0dpdEh1YiBwdWxsIHJlcXVlc3QgbnVtYmVyIG9yIFVSTDsgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgYnJhbmNoIHB1bGwgcmVxdWVzdCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAocHJSZWZlcmVuY2U/OiBzdHJpbmcpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBmZXRjaFByTWVzc2FnZXMocHJSZWZlcmVuY2UpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdsaXN0LXByLXJldmlldy10aHJlYWRzJylcbiAgLmRlc2NyaXB0aW9uKCdMaXN0IHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMgZm9yIHRoZSBjdXJyZW50IHB1bGwgcmVxdWVzdCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgbGlzdFByUmV2aWV3VGhyZWFkcygpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdyZXNvbHZlLXByLXJldmlldy10aHJlYWRzJylcbiAgLmRlc2NyaXB0aW9uKCdSZXBseSB0byB1bnJlc29sdmVkIHJldmlldyB0aHJlYWRzIGFuZCByZXNvbHZlIHRoZW0nKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlcGxpZXMgPSBhd2FpdCByZWFkUmVwbGllc0Zyb21TdGRpbigpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IHJlc29sdmVQclJldmlld1RocmVhZHMocmVwbGllcyk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbmF3YWl0IHByb2dyYW0ucGFyc2VBc3luYyhwcm9jZXNzLmFyZ3YpO1xuXG5mdW5jdGlvbiBhZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kPFRNb2RlIGV4dGVuZHMgc3RyaW5nPihjb25maWc6IHtcbiAgbmFtZTogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBvcHRpb25EZXNjcmlwdGlvbjogc3RyaW5nO1xuICBjaG9pY2VzOiBbVE1vZGUsIC4uLlRNb2RlW11dO1xuICBhcmd1bWVudE5hbWU/OiBzdHJpbmc7XG4gIGFyZ3VtZW50RGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHJ1bjogKG1vZGU6IFRNb2RlLCBhcmd1bWVudDogc3RyaW5nKSA9PiBQcm9taXNlPHN0cmluZz47XG59KTogdm9pZCB7XG4gIGNvbnN0IGNvbW1hbmQgPSBwcm9ncmFtLmNvbW1hbmQoY29uZmlnLm5hbWUpLmRlc2NyaXB0aW9uKGNvbmZpZy5kZXNjcmlwdGlvbikuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpO1xuICBpZiAoY29uZmlnLmFyZ3VtZW50TmFtZSkge1xuICAgIGNvbW1hbmQuYXJndW1lbnQoY29uZmlnLmFyZ3VtZW50TmFtZSwgY29uZmlnLmFyZ3VtZW50RGVzY3JpcHRpb24pO1xuICB9XG5cbiAgY29tbWFuZFxuICAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1hZ2VudCA8YWdlbnQ+JywgY29uZmlnLm9wdGlvbkRlc2NyaXB0aW9uKS5jaG9pY2VzKGNvbmZpZy5jaG9pY2VzKS5tYWtlT3B0aW9uTWFuZGF0b3J5KCkpXG4gICAgLmFjdGlvbihhc3luYyAoLi4uYXJnczogdW5rbm93bltdKSA9PiB7XG4gICAgICBjb25zdCBbYXJndW1lbnRPck9wdGlvbnMsIG1heWJlT3B0aW9uc10gPSBhcmdzIGFzIFtzdHJpbmcgfCB7IGFnZW50OiBUTW9kZSB9LCB7IGFnZW50OiBUTW9kZSB9IHwgdW5kZWZpbmVkXTtcbiAgICAgIGNvbnN0IGFyZ3VtZW50ID0gdHlwZW9mIGFyZ3VtZW50T3JPcHRpb25zID09PSAnc3RyaW5nJyA/IGFyZ3VtZW50T3JPcHRpb25zIDogJyc7XG4gICAgICBjb25zdCBvcHRpb25zID0gKHR5cGVvZiBhcmd1bWVudE9yT3B0aW9ucyA9PT0gJ3N0cmluZycgPyBtYXliZU9wdGlvbnMgOiBhcmd1bWVudE9yT3B0aW9ucykgYXMgeyBhZ2VudDogVE1vZGUgfTtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IGNvbmZpZy5ydW4ob3B0aW9ucy5hZ2VudCwgYXJndW1lbnQpKTtcbiAgICB9KTtcbn1cblxuZnVuY3Rpb24gYWRkQWdlbnRDb21tYW5kKFxuICBuYW1lOiBzdHJpbmcsXG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gIGNvbmZpZ09yUnVuOlxuICAgIHwgKCgpID0+IFByb21pc2U8c3RyaW5nPilcbiAgICB8IHtcbiAgICAgICAgYXJndW1lbnROYW1lOiBzdHJpbmc7XG4gICAgICAgIGFyZ3VtZW50RGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gICAgICAgIHJ1bjogKGFyZ3VtZW50OiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPjtcbiAgICAgIH1cbik6IHZvaWQge1xuICBjb25zdCBjb21tYW5kID0gcHJvZ3JhbS5jb21tYW5kKG5hbWUpLmRlc2NyaXB0aW9uKGRlc2NyaXB0aW9uKS5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSk7XG5cbiAgaWYgKHR5cGVvZiBjb25maWdPclJ1biA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNvbW1hbmQuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IGNvbmZpZ09yUnVuKCkpO1xuICAgIH0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbW1hbmQuYXJndW1lbnQoY29uZmlnT3JSdW4uYXJndW1lbnROYW1lLCBjb25maWdPclJ1bi5hcmd1bWVudERlc2NyaXB0aW9uKS5hY3Rpb24oYXN5bmMgKGFyZ3VtZW50OiBzdHJpbmcpID0+IHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBjb25maWdPclJ1bi5ydW4oYXJndW1lbnQpKTtcbiAgfSk7XG59XG4iXSwibmFtZXMiOlsiUFJPQ0VTU19DTEVBTlVQX1NJR05BTFMiLCJhY3RpdmVQcm9jZXNzZXMiLCJTZXQiLCJjbGVhbnVwSGFuZGxlcnNJbnN0YWxsZWQiLCJydW5Db21tYW5kV2l0aFByb2dyZXNzIiwiX3giLCJfeDIiLCJfcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyIsImFwcGx5IiwidGhpcyIsImFyZ3VtZW50cyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yIiwibSIsIl9jYWxsZWUiLCJjb21tYW5kIiwib3B0aW9ucyIsIl9jb21tYW5kJCIsInByb2MiLCJwcm9jZXNzVGltZW91dCIsInN0b3BXYWl0UHJvZ3Jlc3MiLCJjb21tYW5kTG9nZ2VyIiwiX3lpZWxkJFByb21pc2UkYWxsIiwiX3lpZWxkJFByb21pc2UkYWxsMiIsInN0ZG91dCIsInN0ZGVyciIsImV4aXRDb2RlIiwib3V0cHV0IiwidyIsIl9jb250ZXh0IiwicCIsIm4iLCJzcGF3biIsInNsaWNlIiwiZGV0YWNoZWQiLCJzdGRpbyIsImNyZWF0ZVByb2Nlc3NUaW1lb3V0IiwidGltZW91dE1zIiwiY3JlYXRlV2FpdFByb2dyZXNzIiwid2FpdE1lc3NhZ2UiLCJ3YWl0SW50ZXJ2YWxTZWNvbmRzIiwiY3JlYXRlQ29tbWFuZExvZ2dlciIsImxvZ0ZpbGVQYXRoIiwidiIsIlByb21pc2UiLCJhbGwiLCJzdHJlYW1Ub1RleHQiLCJjaHVuayIsIndyaXRlIiwicmVzb2x2ZSIsInJlamVjdCIsIm9uY2UiLCJjb2RlIiwiX3NsaWNlZFRvQXJyYXkiLCJ0aW1lZE91dCIsIkVycm9yIiwidGltZW91dEVycm9yTWVzc2FnZSIsImNvbmNhdCIsImEiLCJqb2luIiwiY2xvc2UiLCJjbGVhciIsImYiLCJtZXNzYWdlIiwibWlsbGlzZWNvbmRzIiwiZm9ybWF0RHVyYXRpb24iLCJsZW5ndGgiLCJmb3JjZUtpbGxUaW1lciIsImFkZCIsIl9zdGVwMiIsIl9pdGVyYXRvcjIiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIl9sb29wIiwic2lnbmFsIiwidmFsdWUiLCJwcm9jZXNzIiwiX3N0ZXAzIiwiX2l0ZXJhdG9yMyIsInMiLCJkb25lIiwia2lsbFByb2Nlc3MiLCJlcnIiLCJlIiwiZXhpdCIsInNpZ25hbE51bWJlciIsImluc3RhbGxDbGVhbnVwSGFuZGxlcnMiLCJ0aW1lb3V0Iiwic2V0VGltZW91dCIsInVucmVmIiwiY2xlYXJUaW1lb3V0IiwicGlkIiwia2lsbCIsIl91bnVzZWQiLCJfeDMiLCJfeDQiLCJfc3RyZWFtVG9UZXh0IiwiX2NhbGxlZTIiLCJzdHJlYW0iLCJvbkNodW5rIiwiY2h1bmtzIiwiZGVjb2RlciIsIl9pdGVyYXRvckFicnVwdENvbXBsZXRpb24iLCJfZGlkSXRlcmF0b3JFcnJvciIsIl9pdGVyYXRvckVycm9yIiwiX2l0ZXJhdG9yIiwiX3N0ZXAiLCJjaHVua1RleHQiLCJmaW5hbENodW5rIiwiX3QiLCJfY29udGV4dDIiLCJUZXh0RGVjb2RlciIsIl9hc3luY0l0ZXJhdG9yIiwibmV4dCIsImRlY29kZSIsIlVpbnQ4QXJyYXkiLCJwdXNoIiwid3JpdGVQcm9ncmVzcyIsImRvdENvdW50IiwidGltZXIiLCJzZXRJbnRlcnZhbCIsImNsZWFySW50ZXJ2YWwiLCJfeDUiLCJfY3JlYXRlQ29tbWFuZExvZ2dlciIsIl9jYWxsZWU2Iiwid2FybiIsIl90MiIsIl9jb250ZXh0NiIsIl9jbG9zZSIsIl9jYWxsZWUzIiwiX2NvbnRleHQzIiwiZXJyb3IiLCJTdHJpbmciLCJta2RpciIsImRpcm5hbWUiLCJyZWN1cnNpdmUiLCJjcmVhdGVXcml0ZVN0cmVhbSIsImZsYWdzIiwib24iLCJ3cml0YWJsZSIsIl9jbG9zZTIiLCJfY2FsbGVlNCIsIl9jb250ZXh0NCIsImVuZCIsIl9jbG9zZTMiLCJfY2FsbGVlNSIsIl9jb250ZXh0NSIsIk5PX0NPTkNFUk5fTUVTU0FHRSIsIkFHRU5UX05BTUVTIiwiQ09OVEFJTlNfTk9fQ09OQ0VSTl9TRU5URU5DRV9SRUdFWCIsIlJlZ0V4cCIsInJ1bkFsbEFnZW50Q29tbWFuZHMiLCJfcnVuQWxsQWdlbnRDb21tYW5kcyIsInByb21wdCIsInJlc29sdmVkUHJvbXB0Iiwib3V0cHV0cyIsImFsbEFnZW50c0xhYmVsIiwid2FpdE1lc3NhZ2VGb3IiLCJtYXAiLCJhZ2VudCIsIl9vcHRpb25zJG1hcE91dHB1dCIsIl9vcHRpb25zJG1hcE91dHB1dDIiLCJfb3B0aW9ucyIsInJ1bkFnZW50Q29tbWFuZCIsInRyaW0iLCJtYXBPdXRwdXQiLCJjYWxsIiwiZGlzcGxheUFnZW50TmFtZSIsImZpbHRlciIsInVuZGVmaW5lZCIsIl9ydW5BZ2VudENvbW1hbmQiLCJfdDMiLCJjcmVhdGVBZ2VudENvbW1hbmQiLCJhZ2VudExvZ0ZpbGVQYXRoIiwidGFyZ2V0Iiwibm93IiwiRGF0ZSIsIl9tYXAyIiwiZ2V0TW9udGgiLCJnZXREYXRlIiwiZ2V0SG91cnMiLCJnZXRNaW51dGVzIiwiZ2V0U2Vjb25kcyIsInR3b0RpZ2l0cyIsIm1vbnRoIiwiZGF5IiwiaG91ciIsIm1pbnV0ZSIsInNlY29uZCIsInRvU3RyaW5nIiwicGFkU3RhcnQiLCJERVBFTkRFTkNZX1NFQ1RJT05TIiwiSUdOT1JFRF9ESVJFQ1RPUklFUyIsIlVQREFURV9DT01NQU5EIiwidXBkYXRlQnVuRGVwZW5kZW5jaWVzIiwiX3VwZGF0ZUJ1bkRlcGVuZGVuY2llcyIsImN3ZCIsIndvcmtzcGFjZURpcmVjdG9yaWVzIiwiX2l0ZXJhdG9yNCIsIl9zdGVwNCIsImRpcmVjdG9yeSIsImZpbmRXb3Jrc3BhY2VEaXJlY3RvcmllcyIsImFzc2VydE5vQ2F0YWxvZ0RlcGVuZGVuY2llcyIsInVwZGF0ZVBhY2thZ2UiLCJfZmluZFdvcmtzcGFjZURpcmVjdG9yaWVzIiwicGF0dGVybnMiLCJkaXJlY3RvcmllcyIsImluY2x1ZGVkIiwiZXhjbHVkZWQiLCJfaXRlcmF0b3I1IiwiX3N0ZXA1IiwicGF0dGVybiIsImlzRXhjbHVzaW9uIiwibWF0Y2hlcyIsIl9pdGVyYXRvcjYiLCJfc3RlcDYiLCJ3b3Jrc3BhY2VQYXR0ZXJucyIsInJlYWRQYWNrYWdlSnNvbiIsImxpc3RXb3Jrc3BhY2VDYW5kaWRhdGVEaXJlY3RvcmllcyIsInN0YXJ0c1dpdGgiLCJleHBhbmRXb3Jrc3BhY2VQYXR0ZXJuIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiaGFzIiwic29ydCIsImxlZnQiLCJyaWdodCIsImxvY2FsZUNvbXBhcmUiLCJfcmVmIiwiX3JlZiR3b3Jrc3BhY2VzIiwid29ya3NwYWNlcyIsIkFycmF5IiwiaXNBcnJheSIsInBhY2thZ2VzIiwiX2xpc3RXb3Jrc3BhY2VDYW5kaWRhdGVEaXJlY3RvcmllcyIsInJvb3RzIiwiX2l0ZXJhdG9yNyIsIl9zdGVwNyIsIl9zdGVwNyR2YWx1ZSIsIm1heERlcHRoIiwicm9vdCIsIl9pdGVyYXRvcjgiLCJfc3RlcDgiLCJfdDQiLCJfdDUiLCJ3b3Jrc3BhY2VDYW5kaWRhdGVSb290cyIsImlzRGlyZWN0b3J5IiwibGlzdERpcmVjdG9yaWVzIiwiTWFwIiwiX2kiLCJfY2FuZGlkYXRlUm9vdHMiLCJjYW5kaWRhdGVSb290cyIsInNldCIsIm1lcmdlZE1heERlcHRoIiwiZ2V0IiwiZW50cmllcyIsIl9yZWYyIiwiX3JlZjMiLCJzb21lIiwiX3JlZjQiLCJwYXJlbnRNYXhEZXB0aCIsImNoaWxkTWF4RGVwdGgiLCJfcmVmNSIsIm90aGVyUm9vdCIsIm90aGVyTWF4RGVwdGgiLCJoYXNQYXJlbnRSb290IiwiYnJhY2VFeHBhbmQiLCJub3JtYWxpemVXb3Jrc3BhY2VQYXR0ZXJuIiwiZXhwYW5kZWRQYXR0ZXJuIiwid29ya3NwYWNlUGF0dGVybk1heERlcHRoIiwiY2FuZGlkYXRlUm9vdCIsIk1hdGgiLCJtYXgiLCJzZWdtZW50cyIsInNwbGl0Iiwic2VnbWVudCIsImhhc0dsb2JNYWdpYyIsInRlc3QiLCJpbmNsdWRlcyIsInBhdGhEZXB0aCIsIl94NiIsIl9pc0RpcmVjdG9yeSIsInN0YXQiLCJfeDciLCJfeDgiLCJfeDkiLCJfbGlzdERpcmVjdG9yaWVzIiwiX2l0ZXJhdG9yOSIsIl9zdGVwOSIsImVudHJ5IiwiY2hpbGREaXJlY3RvcnkiLCJfdDciLCJfdDgiLCJfdDkiLCJfdDAiLCJyZWFkZGlyIiwid2l0aEZpbGVUeXBlcyIsIm5hbWUiLCJzZXAiLCJwYXRoIiwiX3gwIiwiX3gxIiwiX3gxMCIsIl9leHBhbmRXb3Jrc3BhY2VQYXR0ZXJuIiwibWF0Y2hlciIsIl9pdGVyYXRvcjAiLCJfc3RlcDAiLCJfdDEiLCJfdDEwIiwiZ2xvYlBhdHRlcm5NYXRjaGVyIiwiaGFzUGFja2FnZUpzb24iLCJub3JtYWxpemVkIiwibm9ybWFsaXplUGF0aCIsInJlcGxhY2UiLCJtaW5pbWF0Y2giLCJkb3QiLCJfeDExIiwiX3gxMiIsIl9oYXNQYWNrYWdlSnNvbiIsIl9jYWxsZWU3IiwiX2NvbnRleHQ3IiwiaXNGaWxlIiwiX3gxMyIsIl94MTQiLCJfYXNzZXJ0Tm9DYXRhbG9nRGVwZW5kZW5jaWVzIiwiX2NhbGxlZTgiLCJjYXRhbG9nRGVwZW5kZW5jaWVzIiwiX2kzIiwiX2FyciIsInBhY2thZ2VKc29uIiwiX2l0ZXJhdG9yMSIsIl9zdGVwMSIsImRlcGVuZGVuY3kiLCJfY29udGV4dDgiLCJjYXRhbG9nRGVwZW5kZW5jeU5hbWVzIiwiX3gxNSIsIl9yZWFkUGFja2FnZUpzb24iLCJfY2FsbGVlOSIsInBhY2thZ2VKc29uUGF0aCIsIl90MTIiLCJfdDEzIiwiX2NvbnRleHQ5IiwiSlNPTiIsInJlYWRGaWxlIiwicGFyc2UiLCJuYW1lcyIsImRlcGVuZGVuY2llcyIsIl9pMiIsIl9PYmplY3QkZW50cmllcyIsIk9iamVjdCIsIl9PYmplY3QkZW50cmllcyRfaSIsIl94MTYiLCJfeDE3IiwiX3VwZGF0ZVBhY2thZ2UiLCJfY2FsbGVlMCIsImxhYmVsIiwiX2NvbnRleHQwIiwicnVuQ29tbWFuZCIsIl94MTgiLCJfeDE5IiwiX3J1bkNvbW1hbmQiLCJfY2FsbGVlMSIsIl9jb250ZXh0MSIsInJlbGF0aXZlIiwieWFtbFN0cmluZ2lmeU9wdGlvbnMiLCJibG9ja1F1b3RlIiwibGluZVdpZHRoIiwicHJvZ3Jlc3MiLCJwcm9jZXNzU3RkZXJyIiwiZXhpdFdpdGhFcnJvciIsInJlYWRTdGRpblRleHQiLCJfcmVhZFN0ZGluVGV4dCIsInByb2Nlc3NTdGRpbiIsImlzVFRZIiwicmVhZFJlcXVpcmVkU3RkaW5UZXh0IiwiX3JlYWRSZXF1aXJlZFN0ZGluVGV4dCIsImVycm9yTWVzc2FnZSIsImlucHV0IiwiX29wdGlvbnMkYWxsb3dlZEV4aXRDIiwiYWxsb3dlZEV4aXRDb2RlcyIsIl9yZXQiLCJhdHRlbXB0IiwiX2NvbW1hbmQkMiIsImZhaWx1cmVNZXNzYWdlIiwicmV0cnkiLCJzdGRpbkRhdGEiLCJzdGRpbiIsImlzVHJhbnNpZW50R2hGYWlsdXJlIiwiR0hfUkVUUllfTUFYX0FUVEVNUFRTIiwic2xlZXAiLCJkIiwiX3JlZ2VuZXJhdG9yVmFsdWVzIiwiZ2giLCJfZ2giLCJhcmdzIiwiZ2hBbGxvd0V4aXRDb2RlcyIsIl9naEFsbG93RXhpdENvZGVzIiwiY3VycmVudFJlcG9QYXJ0cyIsIl9jdXJyZW50UmVwb1BhcnRzIiwibmFtZVdpdGhPd25lciIsIl9uYW1lV2l0aE93bmVyJHNwbGl0IiwiX25hbWVXaXRoT3duZXIkc3BsaXQyIiwib3duZXIiLCJjdXJyZW50UHJOdW1iZXIiLCJfY3VycmVudFByTnVtYmVyIiwiZ3JhcGhxbCIsIl9ncmFwaHFsIiwicXVlcnkiLCJ2YXJzIiwia2V5IiwicmVzcG9uc2UiLCJlcnJvck1lc3NhZ2VzIiwiZXJyb3JzIiwiX2Vycm9yJG1lc3NhZ2UiLCJ5YW1sRHVtcCIsImRhdGEiLCJzdHJpbmdpZnlZYW1sIiwiZGVlcENvcHkiLCJzdHJpbmdpZnkiLCJzcGF3blN5bmNTYWZlIiwiX3Jlc3VsdCRzdGF0dXMiLCJfcmVzdWx0JHN0ZG91dCIsIl9yZXN1bHQkc3RkZXJyIiwicmVzdWx0Iiwic3Bhd25TeW5jIiwiZW5jb2RpbmciLCJzdGF0dXMiLCJURVNUX1JFTEFURURfUEFUVEVSTiIsIldPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyIsIkZBSUxFRF9MT0dfTElORV9QUkVGSVhfUEFUVEVSTiIsInJ0a0F2YWlsYWJsZSIsImxhdGVzdFByQ2lSZXN1bHRzIiwiX2xhdGVzdFByQ2lSZXN1bHRzIiwicHJOdW1iZXIiLCJfc3VtbWFyeSRwYXNzIiwiX3N1bW1hcnkkZmFpbCIsIl9zdW1tYXJ5JHBlbmRpbmciLCJfc3VtbWFyeSRza2lwcGluZyIsIl9zdW1tYXJ5JGNhbmNlbCIsImNoZWNrcyIsInJhdyIsInN1bW1hcnkiLCJTeW50YXhFcnJvciIsInJlZHVjZSIsImNvdW50cyIsImNoZWNrIiwiX2NoZWNrJGJ1Y2tldDIiLCJfY291bnRzJGJ1Y2tldCIsImJ1Y2tldCIsInRvdGFsIiwicGFzcyIsImZhaWwiLCJwZW5kaW5nIiwic2tpcHBpbmciLCJjYW5jZWwiLCJ3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzIiwiX3dhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MiLCJzbGVlcEZuIiwibGF0ZXN0Q2lSZXN1bHRzRm4iLCJ3cml0ZVByb2dyZXNzRm4iLCJhdHRlbXB0cyIsImNpUmVzdWx0cyIsImNsYXNzaWZpZWRSZXN1bHRzIiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0IiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0MiIsImZhaWxlZFJlc3VsdHMiLCJydW5uaW5nUmVzdWx0cyIsInNsZWVwU2Vjb25kcyIsImNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzIiwiZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkIiwia2V5cyIsImxhdGVzdFJlc3VsdHNCeVdvcmtmbG93IiwiZ3JvdXBlZFJlc3VsdHMiLCJ3b3JrZmxvd0tleSIsIndvcmtmbG93IiwiZnJvbUVudHJpZXMiLCJfbGF0ZXN0QXR0ZW1wdENoZWNrcyQiLCJsYXRlc3RBdHRlbXB0Q2hlY2tzIiwiZ3JvdXBzIiwiZ3JvdXBlZENoZWNrcyIsInJ1bklkIiwid29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsiLCJ3b3JrZmxvd0F0dGVtcHRLZXkiLCJncm91cCIsImZyb20iLCJ2YWx1ZXMiLCJsYXRlc3RHcm91cCIsImN1cnJlbnRHcm91cCIsImxhdGVzdEdyb3VwVGltZXN0YW1wIiwibGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3ciLCJmaXJzdENoZWNrIiwibGF0ZXN0Q2hlY2siLCJjdXJyZW50TGF0ZXN0IiwibGF0ZXN0Q2hlY2tUaW1lc3RhbXAiLCJjbGFzc2lmaWNhdGlvbiIsIndvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24iLCJ0ZXN0UmVsYXRlZENoZWNrIiwiX2xpbmskbWF0Y2giLCJsaW5rIiwibWF0Y2giLCJ3b3JrZmxvd1J1biIsIl93b3JrZmxvd1J1biIsInJ1bkpzb24iLCJidWNrZXRzIiwiX2NoZWNrJGJ1Y2tldCIsIl9jaGVjayRzdGFydGVkQXQiLCJ0aW1lc3RhbXAiLCJjb21wbGV0ZWRBdCIsInN0YXJ0ZWRBdCIsIl9zbGVlcFNlY29uZHMiLCJzZWNvbmRzIiwiY2hlY2tQckNpIiwiX2NoZWNrUHJDaSIsIl95aWVsZCR3YWl0Rm9yUnVubmluZyIsIl95aWVsZCR3YWl0Rm9yUnVubmluZzIiLCJ3YWl0QXR0ZW1wdHMiLCJ3YWl0VGltZWRPdXQiLCJjbGFzc2lmaWVkTGF0ZXN0IiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0MyIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDQiLCJwYXlsb2FkIiwid2FpdGVkX2Zvcl90ZXN0X3JlbGF0ZWRfY2hlY2tzIiwidGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfYXR0ZW1wdHMiLCJ0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF90aW1lZF9vdXQiLCJfcmVmNiIsImNvbXBhY3RXb3JrZmxvdyIsImNvbXBhY3RXb3JrZmxvd1Jlc3VsdCIsIl9vYmplY3RTcHJlYWQiLCJidWlsZEZhaWxlZFdvcmtmbG93RGV0YWlscyIsImZhaWxlZFdvcmtmbG93TG9nIiwiZmFpbGVkX3dvcmtmbG93cyIsInRlc3Rfd29ya2Zsb3dfb3V0cHV0IiwiX3JlZjciLCJfcmVmOCIsInJ1bm5pbmdfdGVzdF9yZWxhdGVkX3dvcmtmbG93cyIsImxhdGVzdCIsIl9jb21wYWN0V29ya2Zsb3dSZXN1bHQiLCJfc3RyaW5nT3JVbmRlZmluZWQiLCJydW4iLCJmYWlsZWRKb2IiLCJmYWlsZWRXb3JrZmxvd1J1bkpvYiIsInN0cmluZ09yVW5kZWZpbmVkIiwiam9iIiwiam9iX3VybCIsInVybCIsImZhaWxlZF9zdGVwIiwiZmFpbGVkV29ya2Zsb3dSdW5TdGVwTmFtZSIsInJ1bl9pZCIsInJ1bl91cmwiLCJicmFuY2giLCJoZWFkQnJhbmNoIiwic2hhIiwiaGVhZFNoYSIsImNvbmNsdXNpb24iLCJfZmFpbGVkV29ya2Zsb3dMb2ciLCJsb2ciLCJmYWlsZWRfbG9nIiwicmVmaW5lRmFpbGVkV29ya2Zsb3dMb2ciLCJzYW5pdGl6ZWRJbnB1dCIsInNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2ciLCJzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMiLCJsaW5lIiwiam9iTmFtZSIsIl9ydW4kam9icyRmaW5kIiwiam9icyIsImZpbmQiLCJfam9iJHN0ZXBzJGZpbmQkbmFtZSIsIl9qb2Ikc3RlcHMkZmluZCIsIl9qb2Ikc3RlcHMkZmluZDIiLCJzdGVwcyIsInN0ZXAiLCJjdXJyZW50QmFzZUJyYW5jaCIsIl9jdXJyZW50QmFzZUJyYW5jaCIsIl95aWVsZCRjdXJyZW50UHVsbFJlcSIsImN1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2giLCJjdXJyZW50RGVmYXVsdEJyYW5jaCIsIl9jdXJyZW50RGVmYXVsdEJyYW5jaCIsInJlcXVpcmVOb25FbXB0eSIsIl9jdXJyZW50UHVsbFJlcXVlc3RCYXNlQnJhbmNoIiwiYmFzZUJyYW5jaCIsImlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyIsIm5vcm1hbGl6ZUlzc3VlTnVtYmVyIiwicmVmZXJlbmNlIiwiZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlciIsIm5vcm1hbGl6ZVByTnVtYmVyIiwiZmV0Y2hJc3N1ZU1lc3NhZ2VzIiwiX2ZldGNoSXNzdWVNZXNzYWdlcyIsImlzc3VlTnVtYmVyIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyMiIsImlzc3VlIiwiaXNzdWVNZXNzYWdlcyIsIm51bWJlciIsImZldGNoUHJNZXNzYWdlcyIsIl9mZXRjaFByTWVzc2FnZXMiLCJyZXNvbHZlZFByTnVtYmVyIiwicHVsbFJlcXVlc3QiLCJjdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMiLCJwdWxsX3JlcXVlc3QiLCJmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUiLCJfZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlIiwicHJOdW1iZXJPdXRwdXQiLCJfY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyMyIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjQiLCJwck1lc3NhZ2VzIiwicmVmZXJlbmNlVGV4dCIsImtpbmRTZWdtZW50IiwiX2lzc3VlTWVzc2FnZXMiLCJtZXNzYWdlcyIsImZldGNoTWV0YWRhdGEiLCJub3VuIiwic2VsZWN0TWV0YWRhdGEiLCJfcmVzcG9uc2UkZGF0YSIsInJlcG9zaXRvcnkiLCJwYWdpbmF0ZU1lc3NhZ2VzIiwic2VsZWN0Q29ubmVjdGlvbiIsIl9yZXNwb25zZSRkYXRhMiIsImNvbW1lbnRzIiwibWFwTm9kZSIsImNvbW1lbnRNZXNzYWdlIiwiX3ByTWVzc2FnZXMiLCJpc3N1ZUNvbW1lbnRzIiwicmV2aWV3cyIsIl9yZXNwb25zZSRkYXRhMyIsInBySXNzdWVDb21tZW50cyIsInByUmV2aWV3cyIsImNvbXBhcmVNZXNzYWdlc0J5Q3JlYXRlZEF0IiwibGVmdENyZWF0ZWRBdCIsImNyZWF0ZWRBdCIsInJpZ2h0Q3JlYXRlZEF0IiwiX3BySXNzdWVDb21tZW50cyIsIl9yZXNwb25zZSRkYXRhNCIsIl9wclJldmlld3MiLCJfcmVzcG9uc2UkZGF0YTUiLCJyZXZpZXdNZXNzYWdlIiwiX3BhZ2luYXRlTWVzc2FnZXMiLCJjb25maWciLCJjdXJzb3IiLCJfY29ubmVjdGlvbiRwYWdlSW5mbyQiLCJjb25uZWN0aW9uIiwiTnVtYmVyIiwibm9kZXMiLCJoYXNNZXNzYWdlQm9keSIsInBhZ2VJbmZvIiwiaGFzTmV4dFBhZ2UiLCJlbmRDdXJzb3IiLCJfZmV0Y2hNZXRhZGF0YSIsIl9tZXRhZGF0YSRhdXRob3IkbG9naSIsIl9tZXRhZGF0YSRhdXRob3IiLCJfbWV0YWRhdGEkYm9keSIsIm1ldGFkYXRhIiwidGl0bGUiLCJhdXRob3IiLCJsb2dpbiIsImJvZHkiLCJjb21tZW50IiwiX2NvbW1lbnQkYXV0aG9yJGxvZ2luIiwiX2NvbW1lbnQkYXV0aG9yIiwidHlwZSIsInJldmlldyIsIl9yZXZpZXckYXV0aG9yJGxvZ2luIiwiX3JldmlldyRhdXRob3IiLCJfcmV2aWV3JHN0YXRlIiwiX3JldmlldyRzdWJtaXR0ZWRBdCIsIl9yZXZpZXckYm9keSIsInN0YXRlIiwic3VibWl0dGVkQXQiLCJvcGVuUHIiLCJfb3BlblByIiwiX3RlbXAiLCJoZWFkIiwiYmFzZSIsImNyZWF0ZUFyZ3MiLCJ1cGRhdGVQciIsIl91cGRhdGVQciIsImVkaXRQciIsIl9lZGl0UHIiLCJlZGl0QXJncyIsInJlYWRSZXBsaWVzRnJvbVN0ZGluIiwiX3JlYWRSZXBsaWVzRnJvbVN0ZGluIiwibm9ybWFsaXplZFJlcGxpZXMiLCJ0aHJlYWRJZCIsInBhcnNlUmVwbHlJbnB1dCIsInJlcGxpZXMiLCJwYWdpbmF0ZVJldmlld1RocmVhZHMiLCJfcGFnaW5hdGVSZXZpZXdUaHJlYWRzIiwib25UaHJlYWQiLCJfeWllbGQkZ3JhcGhxbCRkYXRhIiwiX3Jldmlld1RocmVhZHMkcGFnZUluIiwicmV2aWV3VGhyZWFkcyIsInRocmVhZCIsInVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMiLCJfdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyIsImlkcyIsImlzUmVzb2x2ZWQiLCJpZCIsInVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzIiwiX3VucmVzb2x2ZWRSZXZpZXdUaHJlYWRzIiwidGhyZWFkcyIsIl9wYWdlSW5mbyRlbmRDdXJzb3IiLCJfeWllbGQkZ3JhcGhxbCRkYXRhMiIsIl9wYWdlSW5mbyRlbmRDdXJzb3IyIiwiY29tbWVudENvbm5lY3Rpb24iLCJfdDYiLCJub3JtYWxpemVDb21tZW50QXV0aG9yIiwibm9kZSIsImlzT3V0ZGF0ZWQiLCJvcmlnaW5hbExpbmUiLCJzdGFydExpbmUiLCJvcmlnaW5hbFN0YXJ0TGluZSIsImxpc3RQclJldmlld1RocmVhZHMiLCJfbGlzdFByUmV2aWV3VGhyZWFkcyIsInVucmVzb2x2ZWRfdGhyZWFkcyIsInJlc29sdmVQclJldmlld1RocmVhZHMiLCJfcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyIsInVucmVzb2x2ZWRJZHMiLCJyZXNvbHZlZFRocmVhZElkcyIsIl9zdGVwMiR2YWx1ZSIsImluZGV4IiwiX3N0ZXAyJHZhbHVlJCIsIl90MTEiLCJyZXNvbHZlUmV2aWV3VGhyZWFkIiwicmVzb2x2ZWRfdGhyZWFkX2lkcyIsInBhcnNlZCIsIl90eXBlb2YiLCJldmVyeSIsInJlcGx5IiwiaXNSZXBseUlucHV0IiwiYnVpbGRQbGFuUHJvbXB0IiwiX2J1aWxkUGxhblByb21wdCIsImlzc3VlWWFtbCIsImJ1aWxkTWVyZ2VCYXNlQ29tbWFuZCIsInNoZWxsUXVvdGUiLCJyZXBsYWNlQWxsIiwiYnVpbGRSZXZpZXdQcm9tcHQiLCJfYnVpbGRSZXZpZXdQcm9tcHQiLCJtZXJnZUJhc2VDb21tYW5kIiwicHJDb250ZXh0IiwiYnVpbGRQckNvbnRleHRJbnN0cnVjdGlvbnMiLCJidWlsZFNjcmVlbnNob3RQcm9tcHQiLCJpbml0aWFsVXJsIiwicGFnZU5hbWUiLCJzY3JlZW5zaG90RGVzY3JpcHRpb24iLCJzYW5pdGl6ZWREZXNjcmlwdGlvbiIsImJ1aWxkU2ltcGxpZnlQcm9tcHQiLCJfYnVpbGRTaW1wbGlmeVByb21wdCIsImluc3RhbGxQYWNrZWRTa2lsbHMiLCJfaW5zdGFsbFBhY2tlZFNraWxscyIsImZpbGVVUkxUb1BhdGgiLCJVUkwiLCJwcm9ncmFtIiwiQ29tbWFuZCIsImFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQiLCJkZXNjcmlwdGlvbiIsImFsbG93RXhjZXNzQXJndW1lbnRzIiwiYXJndW1lbnROYW1lIiwiYXJndW1lbnQiLCJhcmd1bWVudERlc2NyaXB0aW9uIiwiYWRkT3B0aW9uIiwiT3B0aW9uIiwib3B0aW9uRGVzY3JpcHRpb24iLCJjaG9pY2VzIiwibWFrZU9wdGlvbk1hbmRhdG9yeSIsImFjdGlvbiIsIl9sZW4iLCJfa2V5IiwiX3JlZjExIiwiYXJndW1lbnRPck9wdGlvbnMiLCJtYXliZU9wdGlvbnMiLCJfYXJnczEiLCJhZGRBZ2VudENvbW1hbmQiLCJjb25maWdPclJ1biIsIl9jYWxsZWUxMSIsIl9jb250ZXh0MTEiLCJfY2FsbGVlMTAiLCJfY29udGV4dDEwIiwic2hvd0hlbHBBZnRlckVycm9yIiwibW9kZSIsImNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2UiLCJpc3N1ZVJlZmVyZW5jZSIsInByUmVmZXJlbmNlIiwicGFyc2VBc3luYyIsImFyZ3YiXSwibWFwcGluZ3MiOiI7OzttekhBZ0JPLElBS0RBLEVBQTBCLENBQUMsU0FBVSxVQUFXLFVBQ2hEQyxFQUFrQixJQUFJQyxJQUN4QkMsR0FBMkIsRUFJL0IsU0FBc0JDLEVBQXNCQyxFQUFBQyxHQUFBLE9BQUFDLEVBQUFDLE1BQUFDLEtBQUFDLFVBQUEsQ0FrQzNDLFNBQUFILElBQUEsT0FBQUEsRUFBQUksRUFBQUMsSUFBQUMsRUFsQ00sU0FBQUMsRUFBc0NDLEVBQW1CQyxHQUEwQixJQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFBQyxFQUFB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
|