@willbooster/agent-skills 1.16.0 → 1.17.1
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 +6 -0
- package/dist/cli.js +3 -3
- package/package.json +3 -2
- package/skills/check-pr-ci/SKILL.md +12 -0
- package/skills/complete-pr/SKILL.md +32 -0
- package/skills/fetch-issue/SKILL.md +9 -0
- package/skills/fetch-pr/SKILL.md +9 -0
- package/skills/fix-bug/SKILL.md +21 -0
- package/skills/manage-pr-review-threads/SKILL.md +35 -0
- package/skills/open-pr/SKILL.md +39 -0
- package/skills/plan-issue-claude/SKILL.md +10 -0
- package/skills/plan-issue-codex/SKILL.md +10 -0
- package/skills/plan-issue-gemini/SKILL.md +10 -0
- package/skills/playwright-cli/SKILL.md +331 -0
- package/skills/playwright-cli/references/element-attributes.md +23 -0
- package/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/skills/playwright-cli/references/request-mocking.md +87 -0
- package/skills/playwright-cli/references/running-code.md +231 -0
- package/skills/playwright-cli/references/session-management.md +170 -0
- package/skills/playwright-cli/references/storage-state.md +275 -0
- package/skills/playwright-cli/references/test-generation.md +88 -0
- package/skills/playwright-cli/references/tracing.md +142 -0
- package/skills/playwright-cli/references/video-recording.md +146 -0
- package/skills/refactor-structure/SKILL.md +12 -0
- package/skills/review-all/SKILL.md +13 -0
- package/skills/review-claude/SKILL.md +10 -0
- package/skills/review-codex/SKILL.md +10 -0
- package/skills/review-fix-all/SKILL.md +17 -0
- package/skills/review-fix-claude/SKILL.md +15 -0
- package/skills/review-fix-codex/SKILL.md +15 -0
- package/skills/review-fix-gemini/SKILL.md +15 -0
- package/skills/review-gemini/SKILL.md +10 -0
- package/skills/screenshot-claude/SKILL.md +13 -0
- package/skills/screenshot-codex/SKILL.md +13 -0
- package/skills/screenshot-gemini/SKILL.md +13 -0
- package/skills/simplify-pr-claude/SKILL.md +10 -0
- package/skills/simplify-pr-codex/SKILL.md +10 -0
- package/skills/simplify-pr-gemini/SKILL.md +10 -0
- package/skills/update-pr/SKILL.md +60 -0
- package/skills/wbfy/SKILL.md +17 -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 i}from"node:fs";import{mkdir as a}from"node:fs/promises";import{dirname as o}from"node:path";import{stdin as u,stderr as c}from"node:process";import{setTimeout as s}from"node:timers/promises";import{stripVTControlCharacters as l}from"node:util";import{stringify as f}from"yaml";function
|
|
2
|
+
import{Command as n,Option as e}from"commander";import{spawn as t,spawnSync as r}from"node:child_process";import{createWriteStream as i}from"node:fs";import{mkdir as a}from"node:fs/promises";import{dirname as o}from"node:path";import{stdin as u,stderr as c}from"node:process";import{setTimeout as s}from"node:timers/promises";import{stripVTControlCharacters as l}from"node:util";import{stringify as f}from"yaml";import{fileURLToPath as p}from"node:url";function d(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 h(n){var e,t,r,i=2;for("undefined"!=typeof Symbol&&(t=Symbol.asyncIterator,r=Symbol.iterator);i--;){if(t&&null!=(e=n[t]))return e.call(n);if(r&&null!=(e=n[r]))return new m(e.call(n));t="@@asyncIterator",r="@@iterator"}throw new TypeError("Object is not async iterable")}function m(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 m=function(n){this.s=n,this.n=n.next},m.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 m(n)}function v(n,e,t,r,i,a,o){try{var u=n[a](o),c=u.value}catch(n){return void t(n)}u.done?e(c):Promise.resolve(c).then(r,i)}function g(n){return function(){var e=this,t=arguments;return new Promise(function(r,i){var a=n.apply(e,t);function o(n){v(a,r,i,o,u,"next",n)}function u(n){v(a,r,i,o,u,"throw",n)}o(void 0)})}}function w(n,e){var t="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(!t){if(Array.isArray(n)||(t=R(n))||e){t&&(n=t);var r=0,i=function(){};return{s:i,n:function(){return r>=n.length?{done:!0}:{done:!1,value:n[r++]}},e:function(n){throw n},f:i}}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 a,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,a=n},f:function(){try{o||null==t.return||t.return()}finally{if(u)throw a}}}}function y(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 b(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 k(n){for(var e=1;e<arguments.length;e++){var t=null!=arguments[e]?arguments[e]:{};e%2?b(Object(t),!0).forEach(function(e){y(n,e,t[e])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(t)):b(Object(t)).forEach(function(e){Object.defineProperty(n,e,Object.getOwnPropertyDescriptor(t,e))})}return n}function x(){
|
|
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 x(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]())):(x(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,x(n,i,"GeneratorFunction")),n.prototype=Object.create(f),n}return c.prototype=s,x(f,"constructor",s),x(s,"constructor",c),c.displayName="GeneratorFunction",x(s,i,"GeneratorFunction"),x(f),x(f,i,"Generator"),x(f,r,function(){return this}),x(f,"toString",function(){return"[object Generator]"}),(k=function(){return{w:a,m:p}})()}function x(n,e,t,r){var i=Object.defineProperty;try{i({},"",{})}catch(n){i=0}x=function(n,e,t,r){function a(e,t){x(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))},x(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 I(n){return function(n){if(Array.isArray(n))return p(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 O(n){"@babel/helpers - typeof";return O="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},O(n)}function A(n,e){if(n){if("string"==typeof n)return p(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)?p(n,e):void 0}}var R="PLEASE WAIT FOR UP TO 1 HOUR.";function $(n,e){return P.apply(this,arguments)}function P(){return P=v(k().m(function n(e,r){var i,a,o,u,c,s,l,f,p;return k().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),{stdio:["ignore","pipe","pipe"]}),o=E(r.waitMessage,r.waitIntervalSeconds),n.n=1,N(r.logFilePath);case 1:return u=n.v,n.p=2,n.n=3,Promise.all([C(a.stdout,function(n){return u.write(n)}),C(a.stderr,function(n){return u.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(c=n.v,s=j(c,3),l=s[0],f=s[1],0!==s[2]){n.n=4;break}return n.a(2,l);case 4:throw p="".concat(l).concat(f),new Error(p||"Command failed: ".concat(e.join(" ")));case 5:return n.p=5,n.n=6,u.close();case 6:return o(),n.f(5);case 7:return n.a(2)}},n,null,[[2,,5,7]])})),P.apply(this,arguments)}function C(n,e){return q.apply(this,arguments)}function q(){return(q=v(k().m(function n(e,t){var r,i,a,o,u,c,s,l,f;return k().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=!1,a=!1,n.p=2,u=d(e);case 3:return n.n=4,u.next();case 4:if(!(i=!(c=n.v).done)){n.n=6;break}s=c.value,l="string"==typeof s?s:s.toString("utf8"),r.push(l),null==t||t(l);case 5:i=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,f=n.v,a=!0,o=f;case 8:if(n.p=8,n.p=9,!i||null==u.return){n.n=10;break}return n.n=10,u.return();case 10:if(n.p=10,!a){n.n=11;break}throw o;case 11:return n.f(10);case 12:return n.f(8);case 13:return n.a(2,r.join(""))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function E(n,e,t){if(void 0===e&&(e=10),void 0===t&&(t=function(n){return process.stderr.write(n)}),!n)return function(){};var r=setInterval(function(){t(".")},1e3*e);return t("".concat(n," One dot represents ").concat(e," seconds: ")),function(){clearInterval(r),t("\n")}}function N(n){return T.apply(this,arguments)}function T(){return T=v(k().m(function n(e){var t,r,u;return k().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=v(k().m(function n(){return k().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=v(k().m(function n(){return k().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=v(k().m(function n(){return k().w(function(n){for(;;)if(0===n.n)return n.a(2)},n)}));return function(){return n.apply(this,arguments)}}()})}},n,null,[[2,4]])})),T.apply(this,arguments)}var L="There is no concern.",_=["codex","claude","gemini"],D=new RegExp("\\b".concat("there is no concern","\\b"),"i");function G(n,e){return U.apply(this,arguments)}function U(){return(U=v(k().m(function n(e,t){var r,i,a;return k().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=E(J(t.allAgentsLabel)),n.p=2,n.n=3,Promise.all(_.map(v(k().m(function n(e){var i,a,o,u;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,F(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(W(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"):L);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 F(n,e,t){return H.apply(this,arguments)}function H(){return(H=v(k().m(function n(e,t,r){var i,a,o;return k().w(function(n){for(;;)switch(n.n){case 0:return void 0===r&&(r={}),i=$,a=M,o=e,n.n=1,t;case 1:return n.a(2,i(a(o,n.v),{logFilePath:B(e),waitMessage:void 0===r.waitMessage?J(W(e)):r.waitMessage}))}},n)}))).apply(this,arguments)}function M(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 W(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function J(n){return"Waiting for ".concat(n," to finish. ").concat(R)}function B(n){return"logs/".concat(n,"-").concat((e=new Date,t=j([e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds()].map(Q),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 Q(n){return n.toString().padStart(2,"0")}var Y={blockQuote:"literal",lineWidth:0};function z(n){c.write("".concat(n,"\n"))}function K(n,e){void 0===e&&(e=1),c.write("".concat(n,"\n")),process.exit(e)}function Z(){return V.apply(this,arguments)}function V(){return(V=v(k().m(function n(){return k().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,wn(u);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function X(n){return nn.apply(this,arguments)}function nn(){return(nn=v(k().m(function n(e){var t;return k().w(function(n){for(;;)switch(n.n){case 0:return void 0===e&&(e="Error: input is required on stdin"),n.n=1,Z();case 1:if(!((t=n.v).length>0)){n.n=2;break}return n.a(2,t);case 2:K(e,2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function en(n,e){return tn.apply(this,arguments)}function tn(){return tn=v(k().m(function n(e,r){var i,a,o,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:void 0===r&&(r={}),a=null!=(i=r.allowedExitCodes)?i:[],o=k().m(function n(){var i,o,u,l,f,p,d,h;return k().w(function(n){for(;;)switch(n.n){case 0:return o=t(null!=(i=e[0])?i:"",e.slice(1),{stdio:["pipe","pipe","pipe"]}),void 0!==r.stdinData?o.stdin.end(r.stdinData):o.stdin.end(),n.n=1,Promise.all([wn(o.stdout),wn(o.stderr),new Promise(function(n,e){o.once("error",e),o.once("close",function(e){return n(null!=e?e:1)})})]);case 1:if(u=n.v,l=j(u,3),f=l[0],p=l[1],d=l[2],h="".concat(f).concat(p),0!==d&&!a.includes(d)){n.n=2;break}return n.a(2,{v:h});case 2:if(!(gn(e,d,h)&&c<3)){n.n=4;break}return z("Transient GitHub CLI failure; retrying... (attempt ".concat(c," of ").concat(2,")")),n.n=3,s(1e3*c);case 3:return n.a(2,0);case 4:K(h||"Command failed: ".concat(e.join(" ")));case 5:return n.a(2)}},n)}),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:K("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),tn.apply(this,arguments)}function rn(n,e){return an.apply(this,arguments)}function an(){return(an=v(k().m(function n(e,t){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,en(["gh"].concat(I(e)),{stdinData:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function on(n,e,t){return un.apply(this,arguments)}function un(){return(un=v(k().m(function n(e,t,r){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,en(["gh"].concat(I(e)),{stdinData:r,allowedExitCodes:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function cn(){return sn.apply(this,arguments)}function sn(){return(sn=v(k().m(function n(){var e,t,r,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,rn(["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||K("Error: could not determine current repository"),n.a(2,[i,a])}},n)}))).apply(this,arguments)}function ln(){return fn.apply(this,arguments)}function fn(){return(fn=v(k().m(function n(){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,rn(["pr","view","--json","number","--jq",".number"]);case 1:return n.a(2,n.v.trim())}},n)}))).apply(this,arguments)}function pn(n,e){return dn.apply(this,arguments)}function dn(){return(dn=v(k().m(function n(e,t){var r,i,a,o,u,c,s,l,f;return k().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,rn(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"),K("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function hn(n){return f(n,Y)}function mn(n){return JSON.parse(JSON.stringify(n))}function vn(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 gn(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)}function wn(n){return yn.apply(this,arguments)}function yn(){return(yn=v(k().m(function n(e){var t,r,i,a,o,u,c,s,l;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:t=[],r=new TextDecoder,i=!1,a=!1,n.p=2,u=d(e);case 3:return n.n=4,u.next();case 4:if(!(i=!(c=n.v).done)){n.n=6;break}s=c.value,t.push("string"==typeof s?s:r.decode(new Uint8Array(s),{stream:!0}));case 5:i=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,l=n.v,a=!0,o=l;case 8:if(n.p=8,n.p=9,!i||null==u.return){n.n=10;break}return n.n=10,u.return();case 10:if(n.p=10,!a){n.n=11;break}throw o;case 11:return n.f(10);case 12:return n.f(8);case 13:return t.push(r.decode()),n.a(2,t.join(""))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}var bn=/\btest\b/i,kn="Waiting for test-related workflows to finish. ".concat(R),xn=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","jobs","name","number","startedAt","status","updatedAt","url","workflowName"],Sn=/^.*?\tUNKNOWN STEP\t\d{4}-\d{2}-\d{2}T[^Z]+Z\s*/,jn=0===vn(["rtk","--version"]).exitCode;function In(n){return On.apply(this,arguments)}function On(){return(On=v(k().m(function n(e){var t,r,i,a,o,u,c,s,l,f;return k().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,on(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 An(n,e,t,r){return Rn.apply(this,arguments)}function Rn(){return(Rn=v(k().m(function n(e,t,r,i){var a,o,u,s,l,f,p,d;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return void 0===t&&(t=_n),void 0===r&&(r=In),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=$n(o),l=Pn(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>=360)){n.n=5;break}return n.a(2,[o,a,!0]);case 5:return 1===(a+=1)&&(u=E(kn,10,i)),n.n=6,t(10);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 $n(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=Cn(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||Fn(e)>Fn(n)?e:n},[])}(t[1]),a=i[0];a||K("Error: no checks found for workflow ".concat(r));var o=null!=(e=i.reduce(function(n,e){return n?Tn(e)>Tn(n)?e:n:e},void 0))?e:a;return[r,{classification:Nn(i),check:o,checks:i}]}))}function Pn(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 Ln(n)})&&(t[o]=u):e[o]=u}return[e,t]}function Cn(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 qn(n){return En.apply(this,arguments)}function En(){return(En=v(k().m(function n(e){var t,r;return k().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,on(["run","view",e,"--json",xn.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 Nn(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 Tn(n){var e,t=n.completedAt;return t&&"0001-01-01T00:00:00Z"!==t?t:null!=(e=n.startedAt)?e:""}function Ln(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&bn.test(n)})}function _n(n){return Dn.apply(this,arguments)}function Dn(){return(Dn=v(k().m(function n(e){return k().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 Gn(){return Un.apply(this,arguments)}function Un(){return(Un=v(k().m(function n(){var e,t,r,i,a,o,u,c,s,l,f,p;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln();case 1:return e=n.v,z("Fetching latest CI results..."),n.n=2,An(e);case 2:if(t=n.v,r=j(t,3),i=r[0],a=r[1],o=r[2],u=$n(i),c=Pn(u),s=j(c,2),l=s[0],f=s[1],p={summary:mn(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(v(k().m(function n(e){var t,r,i,a,o,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return t=j(e,2),r=t[0],i=t[1],n.n=1,Hn(r,i);case 1:return a=n.v,o=b,u=b({},a),c=Bn,n.n=2,Wn(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:hn(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 Hn(e[0],e[1])}));case 5:return p.running_test_related_workflows=n.v,n.a(2,{output:hn(p),exitCode:1});case 6:return n.a(2,{output:"All CI workflows passed.\n",exitCode:0})}},n)}))).apply(this,arguments)}function Fn(n){return n.reduce(function(n,e){var t=Tn(e);return t>n?t:n},"")}function Hn(n,e){return Mn.apply(this,arguments)}function Mn(){return(Mn=v(k().m(function n(e,t){var r,i,a,o;return k().w(function(n){for(;;)switch(n.n){case 0:return i=Cn(t.check),n.n=1,qn(i);case 1:return a=n.v,o=Kn(a,zn(t.check.name)),n.a(2,{classification:t.classification,workflow:e,job:zn(t.check.name),job_url:zn(null==o?void 0:o.url),failed_step:Zn(o),run_id:i,run_url:null!=(r=zn(null==a?void 0:a.url))?r:zn(t.check.link),branch:zn(null==a?void 0:a.headBranch),sha:zn(null==a?void 0:a.headSha),conclusion:zn(null==a?void 0:a.conclusion)})}},n)}))).apply(this,arguments)}function Wn(n){return Jn.apply(this,arguments)}function Jn(){return(Jn=v(k().m(function n(e){var t;return k().w(function(n){for(;;)switch(n.n){case 0:if(t=Cn(e)){n.n=1;break}return n.a(2,"Failed latest result has no GitHub Actions run link.");case 1:return n.n=2,on(["run","view",t,"--log-failed"],[1]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Bn(n){return{failed_log:Qn(n)}}function Qn(n){var e=Yn(l(n));if(!jn)return e;var t=vn(["rtk","log"],e);return 0===t.exitCode&&t.output.trim().length>0?Yn(t.output):e}function Yn(n){return n.split("\n").map(function(n){return n.replace(Sn,"")}).join("\n").trim()}function zn(n){return"string"==typeof n&&n.length>0?n:void 0}function Kn(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 Zn(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 Vn(){return Xn.apply(this,arguments)}function Xn(){return(Xn=v(k().m(function n(){var e,t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,te();case 1:if(null==(e=n.v)){n.n=2;break}t=e,n.n=4;break;case 2:return n.n=3,ne();case 3:t=n.v;case 4:return n.a(2,t)}},n)}))).apply(this,arguments)}function ne(){return ee.apply(this,arguments)}function ee(){return(ee=v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return e=ae,n.n=1,$(["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 te(){return re.apply(this,arguments)}function re(){return(re=v(k().m(function n(){var e,t;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.p=0,n.n=1,$(["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,!ie(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 ie(n){return/no pull requests? found for branch/i.test(String(n))}function ae(n,e){if(n.length>0)return n;throw new Error(e)}function oe(n){return ve(n,"issue")}function ue(n){return ve(n,"pull request")}function ce(n){return se.apply(this,arguments)}function se(){return(se=v(k().m(function n(e){var t,r,i,a,o;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,cn();case 1:return t=n.v,r=j(t,2),i=r[0],a=r[1],n.n=2,ge(i,a,oe(e));case 2:return o=n.v,z("Fetched issue #".concat(o.number," messages.")),n.a(2,hn({issue:o}))}},n)}))).apply(this,arguments)}function le(n){return fe.apply(this,arguments)}function fe(){return(fe=v(k().m(function n(e){var t,r,i;return k().w(function(n){for(;;)switch(n.n){case 0:if(void 0!==e){n.n=2;break}return n.n=1,ln();case 1:i=n.v,n.n=3;break;case 2:i=ue(e);case 3:return t=i,n.n=4,he(t);case 4:return r=n.v,z("Fetched pull request #".concat(r.number," messages.")),n.a(2,hn({pull_request:r}))}},n)}))).apply(this,arguments)}function pe(){return de.apply(this,arguments)}function de(){return(de=v(k().m(function n(){var e,t,r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,on(["pr","view","--json","number","--jq",".number"],[1]);case 1:if(e=n.v,t=e.trim(),!ie(e)&&/^\d+$/.test(t)){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,he(t);case 3:return r=n.v,n.a(2,hn({pull_request:r}))}},n)}))).apply(this,arguments)}function he(n){return me.apply(this,arguments)}function me(){return(me=v(k().m(function n(e){var t,r,i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,cn();case 1:return t=n.v,r=j(t,2),i=r[0],a=r[1],n.n=2,ye(i,a,e);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function ve(n,e){var t=String(n).trim();if(0===t.length&&K("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];K("Error: expected a GitHub ".concat(e,' number or URL, received "').concat(t,'"'),2)}function ge(n,e,t){return we.apply(this,arguments)}function we(){return(we=v(k().m(function n(e,t,r){var i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Re({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,Oe({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:Pe});case 2:return a=n.v,n.a(2,b(b({},i),{},{messages:a}))}},n)}))).apply(this,arguments)}function ye(n,e,t){return be.apply(this,arguments)}function be(){return(be=v(k().m(function n(e,t,r){var i,a,o,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Re({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([xe(e,t,r),je(e,t,r)]);case 2:return a=n.v,o=j(a,2),u=o[0],c=o[1],n.a(2,b(b({},i),{},{messages:[].concat(I(u),I(c)).sort(ke)}))}},n)}))).apply(this,arguments)}function ke(n,e){var t="string"==typeof n.createdAt?n.createdAt:"",r="string"==typeof e.createdAt?e.createdAt:"";return t.localeCompare(r)}function xe(n,e,t){return Se.apply(this,arguments)}function Se(){return(Se=v(k().m(function n(e,t,r){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Oe({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:Pe});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function je(n,e,t){return Ie.apply(this,arguments)}function Ie(){return(Ie=v(k().m(function n(e,t,r){return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Oe({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:Ce});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Oe(n){return Ae.apply(this,arguments)}function Ae(){return(Ae=v(k().m(function n(e){var t,r,i,a,o;return k().w(function(n){for(;;)switch(n.n){case 0:r=[];case 1:return o=e,n.n=2,pn(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,I(a.nodes.map(e.mapNode).filter(qe))),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 Re(n){return $e.apply(this,arguments)}function $e(){return($e=v(k().m(function n(e){var t,r,i,a,o;return k().w(function(n){for(;;)switch(n.n){case 0:return o=e,n.n=1,pn(e.query,{owner:e.owner,name:e.name,number:Number(e.number)});case 1:return(a=o.selectMetadata.call(o,n.v))||K("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 Pe(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 Ce(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 qe(n){return"string"==typeof n.body&&n.body.length>0}function Ee(n){return Ne.apply(this,arguments)}function Ne(){return(Ne=v(k().m(function n(e){var t,r,i,a,o;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,en(["git","branch","--show-current"]);case 1:return t=n.v.trim(),n.n=2,rn(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return r=n.v.trim(),t||K("Error: could not determine current branch"),r||K("Error: could not determine default branch"),t===r&&K("Error: current branch is the default branch (".concat(r,")")),i=["pr","create","--base",r,"--head",t,"--fill"],e&&e.length>0&&i.push("--body-file","-"),z("Creating pull request..."),n.n=3,rn(i,e);case 3:return a=hn,o=JSON,n.n=4,rn(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,a(o.parse.call(o,n.v)))}},n)}))).apply(this,arguments)}function Te(n){return Le.apply(this,arguments)}function Le(){return(Le=v(k().m(function n(e){var t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln();case 1:return t=n.v,z("Updating pull request #".concat(t," body...")),n.n=2,Ge(t,["--body-file","-"],e);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function _e(n){return De.apply(this,arguments)}function De(){return(De=v(k().m(function n(e){var t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln();case 1:return t=n.v,z("Updating pull request #".concat(t," title...")),n.n=2,Ge(t,["--title",e]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Ge(n,e,t){return Ue.apply(this,arguments)}function Ue(){return(Ue=v(k().m(function n(e,t,r){var i,a;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,rn(["pr","edit",e].concat(I(t)),r);case 1:return i=hn,a=JSON,n.n=2,rn(["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=v(k().m(function n(){var e,t,r,i,a,o,u,c;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,X("Error: JSON input is required on stdin");case 1:for(e=n.v,t=nt(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 Me(n,e,t,r,i){return We.apply(this,arguments)}function We(){return(We=v(k().m(function n(e,t,r,i,a){var o,u,c,s,l,f,p,d,h,m,v,w;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,pn(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)||K("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),l=g(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,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 Je(n,e,t){return Be.apply(this,arguments)}function Be(){return(Be=v(k().m(function n(e,t,r){var i;return k().w(function(n){for(;;)switch(n.n){case 0:return i=[],n.n=1,Me("\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 Qe(n,e,t){return Ye.apply(this,arguments)}function Ye(){return(Ye=v(k().m(function n(e,t,r){var i;return k().w(function(n){for(;;)switch(n.n){case 0:return i=[],n.n=1,Me("\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,v(k().m(function n(e){var t,r,a,o,u,c,s,l,f,p;return k().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(Xe),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,pn("\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)||K("Could not find comments in GraphQL response for thread ".concat(e.id,".")),r.push.apply(r,I(s.nodes.map(Xe))),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 ze(){return Ke.apply(this,arguments)}function Ke(){return(Ke=v(k().m(function n(){var e,t,r,i,a,o,u;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,cn();case 1:return e=n.v,t=j(e,2),r=t[0],i=t[1],n.n=2,ln();case 2:return a=n.v,z("Fetching unresolved review threads..."),o=hn,n.n=3,Qe(r,i,a);case 3:return u=n.v,n.a(2,o({unresolved_threads:u}))}},n)}))).apply(this,arguments)}function Ze(n){return Ve.apply(this,arguments)}function Ve(){return(Ve=v(k().m(function n(e){var t,r,i,a,o,u,c,s,l,f,p,d,h,m,v,w,y,b,x,S;return k().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,cn();case 1:return t=n.v,r=j(t,2),i=r[0],a=r[1],n.n=2,ln();case 2:return o=n.v,b=Set,n.n=3,Je(i,a,o);case 3:x=n.v,u=new b(x),z("Replying to ".concat(Object.keys(e).length," review threads...")),c=[],s=Object.entries(e),l=g(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],w=m[1],z("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,pn("\n mutation($threadId: ID!, $body: String!) {\n addPullRequestReviewThreadReply(input: {pullRequestReviewThreadId: $threadId, body: $body}) {\n comment {\n id\n url\n }\n }\n resolveReviewThread(input: {threadId: $threadId}) {\n thread {\n id\n isResolved\n }\n }\n }\n ",{threadId:v,body:w});case 7:y=n.v,null!=(p=y.data)&&null!=(p=p.resolveReviewThread)&&null!=(p=p.thread)&&p.isResolved?c.push(v):z("Warning: failed to resolve thread ".concat(v,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,S=n.v,l.e(S);case 11:return n.p=11,l.f(),n.f(11);case 12:return z("Done."),n.a(2,hn({resolved_thread_ids:c}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function Xe(n){var e,t;return b(b({},n),{},{author:"string"==typeof n.author?n.author:null!=(e=null==(t=n.author)?void 0:t.login)?e:null})}function nt(n){try{var e=JSON.parse(n);return function(n){if("object"!==O(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==O(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||K("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&K("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function et(n){return tt.apply(this,arguments)}function tt(){return(tt=v(k().m(function n(e){var t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ce(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 - Don't forget to clean up any temporary files.\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 rt(n){return"git merge-base ".concat(it("origin/".concat(n))," HEAD 2>/dev/null || git merge-base ").concat(it(n)," HEAD")}function it(n){return"'".concat(n.replaceAll("'","'\"'\"'"),"'")}function at(){return ot.apply(this,arguments)}function ot(){return(ot=v(k().m(function n(){var e,t,r;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Vn();case 1:return e=n.v,t=rt(e),n.n=2,pe();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. 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(L,"`\n\n").concat(ut(r),"\n").trim())}},n)}))).apply(this,arguments)}function ut(n){return n?"Current pull request context:\n~~~~yaml\n".concat(n.trim(),"\n~~~~\n").trim():""}function ct(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 st(){return lt.apply(this,arguments)}function lt(){return(lt=v(k().m(function n(){var e,t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Vn();case 1:return e=n.v,t=rt(e),n.a(2,'\nSimplify the current 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").trim())}},n)}))).apply(this,arguments)}var ft=new n;function pt(n){var t=ft.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(v(k().m(function e(){var t,r,i,a,o,u,c,s,l,f=arguments;return k().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 dt(n,e,t){var r=ft.command(n).description(e).allowExcessArguments(!1);"function"!=typeof t?r.argument(t.argumentName,t.argumentDescription).action(v(k().m(function n(e){var r;return k().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(v(k().m(function n(){var e;return k().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)})))}ft.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),pt({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?G(at(),{allAgentsLabel:"review agents",mapOutput:function(n,e){if(!function(n){return D.test(n)}(e))return"## ".concat(W(n),"\n\n").concat(e)}}):F(n,at())}}),dt("review-codex","Run Codex review against the current branch",function(){return F("codex",at())}),dt("review-claude","Run Claude Code review against the current branch",function(){return F("claude",at())}),dt("review-gemini","Run Gemini CLI review against the current branch",function(){return F("gemini",at())}),pt({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?G(et(oe(e)),{allAgentsLabel:"planning agents"}):F(n,et(oe(e)))}}),dt("plan-codex","Run Codex planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return F("codex",et(oe(n)))}}),dt("plan-claude","Run Claude Code planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return F("claude",et(oe(n)))}}),dt("plan-gemini","Run Gemini CLI planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return F("gemini",et(oe(n)))}}),ft.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(v(k().m(function n(e,t,r,i){var a;return k().w(function(n){for(;;)switch(n.n){case 0:return a=process.stdout,n.n=1,F(i.agent,ct(e,t,r));case 1:a.write.call(a,n.v);case 2:return n.a(2)}},n)}))),pt({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 F(n,st())}}),dt("simplify-codex","Run Codex PR simplification against the current branch",function(){return F("codex",st())}),dt("simplify-claude","Run Claude Code PR simplification against the current branch",function(){return F("claude",st())}),dt("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(){return F("gemini",st())}),ft.command("open-pr").description("Create a pull request for the current branch").allowExcessArguments(!1).action(v(k().m(function n(){var e,t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Z();case 1:return e=n.v,n.n=2,Ee(e||void 0);case 2:t=n.v,process.stdout.write("".concat(t,"\n"));case 3:return n.a(2)}},n)}))),ft.command("update-pr-body").description("Update the current pull request body").allowExcessArguments(!1).action(v(k().m(function n(){var e,t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,X("Error: PR body input is required on stdin");case 1:return e=n.v,n.n=2,Te(e);case 2:t=n.v,process.stdout.write("".concat(t,"\n"));case 3:return n.a(2)}},n)}))),ft.command("update-pr-title").description("Update the current pull request title").allowExcessArguments(!1).action(v(k().m(function n(){var e,t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,X("Error: PR title input is required on stdin");case 1:return e=n.v,n.n=2,_e(e);case 2:t=n.v,process.stdout.write("".concat(t,"\n"));case 3:return n.a(2)}},n)}))),ft.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Gn();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),ft.command("fetch-issue").description("Fetch an issue body and timeline messages as YAML").argument("<issue>","GitHub issue number or URL").allowExcessArguments(!1).action(v(k().m(function n(e){var t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ce(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),ft.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(v(k().m(function n(e){var t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,le(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),ft.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(v(k().m(function n(){var e;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ze();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),ft.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(v(k().m(function n(){var e,t;return k().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Fe();case 1:return e=n.v,n.n=2,Ze(e);case 2:t=n.v,process.stdout.write(t);case 3:return n.a(2)}},n)}))),await ft.parseAsync(process.argv);
|
|
5
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy95YW1sLnRzIiwiLi4vc3JjL3ByL3NoYXJlZC50cyIsIi4uL3NyYy9wci9jaS50cyIsIi4uL3NyYy9yZXBvL2RlZmF1bHRCcmFuY2gudHMiLCIuLi9zcmMvcHIvbWVzc2FnZXMudHMiLCIuLi9zcmMvcHIvcHVsbFJlcXVlc3QudHMiLCIuLi9zcmMvcHIvcmV2aWV3VGhyZWFkcy50cyIsIi4uL3NyYy9wcm9tcHRzL3BsYW5Qcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9iYXNlQnJhbmNoRGlmZkNvbW1hbmQudHMiLCIuLi9zcmMvcHJvbXB0cy9yZXZpZXdQcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9zY3JlZW5zaG90UHJvbXB0LnRzIiwiLi4vc3JjL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQudHMiLCIuLi9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbnR5cGUgUnVuQ29tbWFuZE9wdGlvbnMgPSB7XG4gIGxvZ0ZpbGVQYXRoPzogc3RyaW5nO1xuICB3YWl0TWVzc2FnZT86IHN0cmluZyB8IGZhbHNlO1xuICB3YWl0SW50ZXJ2YWxTZWNvbmRzPzogbnVtYmVyO1xufTtcblxudHlwZSBQcm9ncmVzc1dyaXRlciA9IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQ7XG5cbmNvbnN0IERFRkFVTFRfV0FJVF9JTlRFUlZBTF9TRUNPTkRTID0gMTA7XG5leHBvcnQgY29uc3QgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HID0gJ1BMRUFTRSBXQUlUIEZPUiBVUCBUTyAxIEhPVVIuJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgfSk7XG4gIGNvbnN0IHN0b3BXYWl0UHJvZ3Jlc3MgPSBjcmVhdGVXYWl0UHJvZ3Jlc3Mob3B0aW9ucy53YWl0TWVzc2FnZSwgb3B0aW9ucy53YWl0SW50ZXJ2YWxTZWNvbmRzKTtcbiAgY29uc3QgY29tbWFuZExvZ2dlciA9IGF3YWl0IGNyZWF0ZUNvbW1hbmRMb2dnZXIob3B0aW9ucy5sb2dGaWxlUGF0aCk7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBbc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZG91dCwgKGNodW5rKSA9PiBjb21tYW5kTG9nZ2VyLndyaXRlKGNodW5rKSksXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRlcnIsIChjaHVuaykgPT4gY29tbWFuZExvZ2dlci53cml0ZShjaHVuaykpLFxuICAgICAgbmV3IFByb21pc2U8bnVtYmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHByb2Mub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgICAgICBwcm9jLm9uY2UoJ2Nsb3NlJywgKGNvZGUpID0+IHJlc29sdmUoY29kZSA/PyAxKSk7XG4gICAgICB9KSxcbiAgICBdKTtcblxuICAgIGlmIChleGl0Q29kZSA9PT0gMCkge1xuICAgICAgcmV0dXJuIHN0ZG91dDtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcbiAgICB0aHJvdyBuZXcgRXJyb3Iob3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBjb21tYW5kTG9nZ2VyLmNsb3NlKCk7XG4gICAgc3RvcFdhaXRQcm9ncmVzcygpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvVGV4dChcbiAgc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0gfCBudWxsIHwgdW5kZWZpbmVkLFxuICBvbkNodW5rPzogKGNodW5rOiBzdHJpbmcpID0+IHZvaWRcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBzdHJpbmdbXSA9IFtdO1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHN0cmVhbSkge1xuICAgIGNvbnN0IGNodW5rVGV4dCA9IHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycgPyBjaHVuayA6IGNodW5rLnRvU3RyaW5nKCd1dGY4Jyk7XG4gICAgY2h1bmtzLnB1c2goY2h1bmtUZXh0KTtcbiAgICBvbkNodW5rPy4oY2h1bmtUZXh0KTtcbiAgfVxuICByZXR1cm4gY2h1bmtzLmpvaW4oJycpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlV2FpdFByb2dyZXNzKFxuICB3YWl0TWVzc2FnZTogc3RyaW5nIHwgZmFsc2UgfCB1bmRlZmluZWQsXG4gIHdhaXRJbnRlcnZhbFNlY29uZHMgPSBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyxcbiAgd3JpdGVQcm9ncmVzczogUHJvZ3Jlc3NXcml0ZXIgPSAobWVzc2FnZSkgPT4gcHJvY2Vzcy5zdGRlcnIud3JpdGUobWVzc2FnZSlcbik6ICgpID0+IHZvaWQge1xuICBpZiAoIXdhaXRNZXNzYWdlKSB7XG4gICAgcmV0dXJuICgpID0+IHt9O1xuICB9XG5cbiAgY29uc3QgdGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgd3JpdGVQcm9ncmVzcygnLicpO1xuICB9LCB3YWl0SW50ZXJ2YWxTZWNvbmRzICogMTAwMCk7XG5cbiAgd3JpdGVQcm9ncmVzcyhgJHt3YWl0TWVzc2FnZX0gT25lIGRvdCByZXByZXNlbnRzICR7d2FpdEludGVydmFsU2Vjb25kc30gc2Vjb25kczogYCk7XG5cbiAgcmV0dXJuICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICB3cml0ZVByb2dyZXNzKCdcXG4nKTtcbiAgfTtcbn1cblxudHlwZSBDb21tYW5kTG9nZ2VyID0ge1xuICB3cml0ZTogKGNodW5rOiBzdHJpbmcpID0+IHZvaWQ7XG4gIGNsb3NlOiAoKSA9PiBQcm9taXNlPHZvaWQ+O1xufTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQ29tbWFuZExvZ2dlcihsb2dGaWxlUGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxDb21tYW5kTG9nZ2VyPiB7XG4gIGlmICghbG9nRmlsZVBhdGgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6ICgpID0+IHt9LFxuICAgICAgY2xvc2U6IGFzeW5jICgpID0+IHt9LFxuICAgIH07XG4gIH1cblxuICBjb25zdCB3YXJuID0gKGVycm9yOiB1bmtub3duKSA9PiB7XG4gICAgcHJvY2Vzcy5zdGRlcnIud3JpdGUoYFdhcm5pbmc6IEZhaWxlZCB0byB3cml0ZSBjb21tYW5kIGxvZyB0byAke2xvZ0ZpbGVQYXRofTogJHtTdHJpbmcoZXJyb3IpfVxcbmApO1xuICB9O1xuXG4gIHRyeSB7XG4gICAgYXdhaXQgbWtkaXIoZGlybmFtZShsb2dGaWxlUGF0aCksIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGNvbnN0IHN0cmVhbSA9IGNyZWF0ZVdyaXRlU3RyZWFtKGxvZ0ZpbGVQYXRoLCB7IGZsYWdzOiAndycgfSk7XG5cbiAgICBzdHJlYW0ub24oJ2Vycm9yJywgd2Fybik7XG5cbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6IChjaHVuaykgPT4ge1xuICAgICAgICBpZiAoc3RyZWFtLndyaXRhYmxlKSB7XG4gICAgICAgICAgc3RyZWFtLndyaXRlKGNodW5rKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PlxuICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSkgPT4ge1xuICAgICAgICAgIHN0cmVhbS5lbmQoKCkgPT4gcmVzb2x2ZSgpKTtcbiAgICAgICAgfSksXG4gICAgfTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB3YXJuKGVycm9yKTtcbiAgICByZXR1cm4ge1xuICAgICAgd3JpdGU6ICgpID0+IHt9LFxuICAgICAgY2xvc2U6IGFzeW5jICgpID0+IHt9LFxuICAgIH07XG4gIH1cbn1cbiIsImV4cG9ydCBjb25zdCBOT19DT05DRVJOX1BIUkFTRSA9ICd0aGVyZSBpcyBubyBjb25jZXJuJztcbmV4cG9ydCBjb25zdCBOT19DT05DRVJOX01FU1NBR0UgPSAnVGhlcmUgaXMgbm8gY29uY2Vybi4nO1xuIiwiaW1wb3J0IHsgY3JlYXRlV2FpdFByb2dyZXNzLCBydW5Db21tYW5kV2l0aFByb2dyZXNzLCBXQUlUX1VQX1RPX09ORV9IT1VSX1dBUk5JTkcgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuaW1wb3J0IHsgTk9fQ09OQ0VSTl9NRVNTQUdFLCBOT19DT05DRVJOX1BIUkFTRSB9IGZyb20gJy4uL3Jldmlldy9ub0NvbmNlcm4uanMnO1xuXG5leHBvcnQgY29uc3QgQUdFTlRfTkFNRVMgPSBbJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSBhcyBjb25zdDtcbmNvbnN0IENPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVggPSBuZXcgUmVnRXhwKGBcXFxcYiR7Tk9fQ09OQ0VSTl9QSFJBU0V9XFxcXGJgLCAnaScpO1xuZXhwb3J0IHR5cGUgQWdlbnROYW1lID0gKHR5cGVvZiBBR0VOVF9OQU1FUylbbnVtYmVyXTtcblxudHlwZSBBZ2VudENvbW1hbmRPcHRpb25zID0ge1xuICB3YWl0TWVzc2FnZT86IHN0cmluZyB8IGZhbHNlO1xufTtcblxudHlwZSBBbGxBZ2VudENvbW1hbmRPcHRpb25zID0ge1xuICBhbGxBZ2VudHNMYWJlbDogc3RyaW5nO1xuICBtYXBPdXRwdXQ/OiAoYWdlbnQ6IEFnZW50TmFtZSwgb3V0cHV0OiBzdHJpbmcpID0+IHN0cmluZyB8IHVuZGVmaW5lZDtcbn07XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5BbGxBZ2VudENvbW1hbmRzKFxuICBwcm9tcHQ6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPixcbiAgb3B0aW9uczogQWxsQWdlbnRDb21tYW5kT3B0aW9ucyA9IHsgYWxsQWdlbnRzTGFiZWw6ICdhZ2VudHMnIH1cbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJlc29sdmVkUHJvbXB0ID0gYXdhaXQgcHJvbXB0O1xuICBjb25zdCBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKHdhaXRNZXNzYWdlRm9yKG9wdGlvbnMuYWxsQWdlbnRzTGFiZWwpKTtcblxuICB0cnkge1xuICAgIGNvbnN0IG91dHB1dHMgPSAoXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgQUdFTlRfTkFNRVMubWFwKGFzeW5jIChhZ2VudCkgPT4ge1xuICAgICAgICAgIGNvbnN0IG91dHB1dCA9IChcbiAgICAgICAgICAgIGF3YWl0IHJ1bkFnZW50Q29tbWFuZChhZ2VudCwgcmVzb2x2ZWRQcm9tcHQsIHtcbiAgICAgICAgICAgICAgd2FpdE1lc3NhZ2U6IGZhbHNlLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICApLnRyaW0oKTtcbiAgICAgICAgICByZXR1cm4gb3B0aW9ucy5tYXBPdXRwdXQ/LihhZ2VudCwgb3V0cHV0KSA/PyBgIyMgJHtkaXNwbGF5QWdlbnROYW1lKGFnZW50KX1cXG5cXG4ke291dHB1dH1gO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICkuZmlsdGVyKChvdXRwdXQpOiBvdXRwdXQgaXMgc3RyaW5nID0+IG91dHB1dCAhPT0gdW5kZWZpbmVkKTtcbiAgICByZXR1cm4gb3V0cHV0cy5sZW5ndGggPiAwID8gb3V0cHV0cy5qb2luKCdcXG5cXG4nKSA6IE5PX0NPTkNFUk5fTUVTU0FHRTtcbiAgfSBmaW5hbGx5IHtcbiAgICBzdG9wV2FpdFByb2dyZXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkFnZW50Q29tbWFuZChcbiAgYWdlbnQ6IEFnZW50TmFtZSxcbiAgcHJvbXB0OiBzdHJpbmcgfCBQcm9taXNlPHN0cmluZz4sXG4gIG9wdGlvbnM6IEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MoY3JlYXRlQWdlbnRDb21tYW5kKGFnZW50LCBhd2FpdCBwcm9tcHQpLCB7XG4gICAgbG9nRmlsZVBhdGg6IGFnZW50TG9nRmlsZVBhdGgoYWdlbnQpLFxuICAgIHdhaXRNZXNzYWdlOiBvcHRpb25zLndhaXRNZXNzYWdlID09PSB1bmRlZmluZWQgPyB3YWl0TWVzc2FnZUZvcihkaXNwbGF5QWdlbnROYW1lKGFnZW50KSkgOiBvcHRpb25zLndhaXRNZXNzYWdlLFxuICB9KTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQWdlbnRDb21tYW5kKGFnZW50OiBBZ2VudE5hbWUsIHByb21wdDogc3RyaW5nKTogc3RyaW5nW10ge1xuICBzd2l0Y2ggKGFnZW50KSB7XG4gICAgY2FzZSAnY29kZXgnOlxuICAgICAgcmV0dXJuIFsnbnB4JywgJy0teWVzJywgJ0BvcGVuYWkvY29kZXhAbGF0ZXN0JywgJ2V4ZWMnLCAnLS1kYW5nZXJvdXNseS1ieXBhc3MtYXBwcm92YWxzLWFuZC1zYW5kYm94JywgcHJvbXB0XTtcbiAgICBjYXNlICdjbGF1ZGUnOlxuICAgICAgcmV0dXJuIFsnY2xhdWRlJywgJy0tZGFuZ2Vyb3VzbHktc2tpcC1wZXJtaXNzaW9ucycsICctcCcsIHByb21wdF07XG4gICAgY2FzZSAnZ2VtaW5pJzpcbiAgICAgIHJldHVybiBbXG4gICAgICAgICducHgnLFxuICAgICAgICAnLS15ZXMnLFxuICAgICAgICAnQGdvb2dsZS9nZW1pbmktY2xpQHByZXZpZXcnLFxuICAgICAgICAnLS1hcHByb3ZhbC1tb2RlJyxcbiAgICAgICAgJ3lvbG8nLFxuICAgICAgICAnLS1tb2RlbCcsXG4gICAgICAgICdnZW1pbmktMy4xLXByby1wcmV2aWV3JyxcbiAgICAgICAgJy1wJyxcbiAgICAgICAgcHJvbXB0LFxuICAgICAgXTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZGlzcGxheUFnZW50TmFtZShhZ2VudDogQWdlbnROYW1lKTogc3RyaW5nIHtcbiAgc3dpdGNoIChhZ2VudCkge1xuICAgIGNhc2UgJ2NvZGV4JzpcbiAgICAgIHJldHVybiAnQ29kZXgnO1xuICAgIGNhc2UgJ2NsYXVkZSc6XG4gICAgICByZXR1cm4gJ0NsYXVkZSBDb2RlJztcbiAgICBjYXNlICdnZW1pbmknOlxuICAgICAgcmV0dXJuICdHZW1pbmkgQ0xJJztcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZShvdXRwdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gQ09OVEFJTlNfTk9fQ09OQ0VSTl9TRU5URU5DRV9SRUdFWC50ZXN0KG91dHB1dCk7XG59XG5cbmZ1bmN0aW9uIHdhaXRNZXNzYWdlRm9yKHRhcmdldDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBXYWl0aW5nIGZvciAke3RhcmdldH0gdG8gZmluaXNoLiAke1dBSVRfVVBfVE9fT05FX0hPVVJfV0FSTklOR31gO1xufVxuXG5mdW5jdGlvbiBhZ2VudExvZ0ZpbGVQYXRoKGFnZW50OiBBZ2VudE5hbWUpOiBzdHJpbmcge1xuICByZXR1cm4gYGxvZ3MvJHthZ2VudH0tJHt0aW1lc3RhbXBGb3JMb2dGaWxlKCl9LmxvZ2A7XG59XG5cbmZ1bmN0aW9uIHRpbWVzdGFtcEZvckxvZ0ZpbGUoKTogc3RyaW5nIHtcbiAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgY29uc3QgW21vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kXSA9IFtcbiAgICBub3cuZ2V0TW9udGgoKSArIDEsXG4gICAgbm93LmdldERhdGUoKSxcbiAgICBub3cuZ2V0SG91cnMoKSxcbiAgICBub3cuZ2V0TWludXRlcygpLFxuICAgIG5vdy5nZXRTZWNvbmRzKCksXG4gIF0ubWFwKHR3b0RpZ2l0cyk7XG4gIHJldHVybiBgJHttb250aH0ke2RheX0tJHtob3VyfSR7bWludXRlfSR7c2Vjb25kfWA7XG59XG5cbmZ1bmN0aW9uIHR3b0RpZ2l0cyh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKTtcbn1cbiIsIi8qKlxuICogYGJsb2NrUXVvdGU6ICdsaXRlcmFsJ2A6IFVzZXMgYSBwaXBlIChgcHJvcDogfGApIHRvIHJlcHJlc2VudCBtdWx0aWxpbmUgc3RyaW5ncy5cbiAqIGBsaW5lV2lkdGg6IDBgOiBEaXNhYmxlcyBsaW5lIHdyYXBwaW5nLlxuICovXG5leHBvcnQgY29uc3QgeWFtbFN0cmluZ2lmeU9wdGlvbnMgPSB7IGJsb2NrUXVvdGU6ICdsaXRlcmFsJywgbGluZVdpZHRoOiAwIH0gYXMgY29uc3Q7XG4iLCJpbXBvcnQgeyBzcGF3biwgc3Bhd25TeW5jIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHN0ZGVyciBhcyBwcm9jZXNzU3RkZXJyLCBzdGRpbiBhcyBwcm9jZXNzU3RkaW4gfSBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgc2V0VGltZW91dCBhcyBzbGVlcCB9IGZyb20gJ25vZGU6dGltZXJzL3Byb21pc2VzJztcbmltcG9ydCB7IHN0cmluZ2lmeSBhcyBzdHJpbmdpZnlZYW1sIH0gZnJvbSAneWFtbCc7XG5pbXBvcnQgeyB5YW1sU3RyaW5naWZ5T3B0aW9ucyB9IGZyb20gJy4uL3lhbWwuanMnO1xuXG5leHBvcnQgdHlwZSBKc29uT2JqZWN0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2UgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuZXhwb3J0IHR5cGUgTWV0YWRhdGFOb2RlID0ge1xuICBudW1iZXI6IG51bWJlcjtcbiAgdGl0bGU6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGJvZHk/OiBzdHJpbmcgfCBudWxsO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIFBhZ2VJbmZvID0ge1xuICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbn07XG5cbmV4cG9ydCB0eXBlIE1lc3NhZ2VDb25uZWN0aW9uPFROb2RlPiA9IHtcbiAgbm9kZXM6IFROb2RlW107XG4gIHBhZ2VJbmZvOiBQYWdlSW5mbztcbn07XG5cbnR5cGUgUnVuQ29tbWFuZE9wdGlvbnMgPSB7XG4gIHN0ZGluRGF0YT86IHN0cmluZztcbiAgYWxsb3dlZEV4aXRDb2Rlcz86IG51bWJlcltdO1xufTtcblxuY29uc3QgR0hfUkVUUllfTUFYX0FUVEVNUFRTID0gMztcbmNvbnN0IEdIX1JFVFJZX0JBU0VfREVMQVlfTVMgPSAxMDAwO1xuXG5leHBvcnQgZnVuY3Rpb24gcHJvZ3Jlc3MobWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XG4gIHByb2Nlc3NTdGRlcnIud3JpdGUoYCR7bWVzc2FnZX1cXG5gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4aXRXaXRoRXJyb3IobWVzc2FnZTogc3RyaW5nLCBjb2RlID0gMSk6IG5ldmVyIHtcbiAgcHJvY2Vzc1N0ZGVyci53cml0ZShgJHttZXNzYWdlfVxcbmApO1xuICBwcm9jZXNzLmV4aXQoY29kZSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkU3RkaW5UZXh0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChwcm9jZXNzU3RkaW4uaXNUVFkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHN0cmVhbVRvVGV4dChwcm9jZXNzU3RkaW4pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFJlcXVpcmVkU3RkaW5UZXh0KGVycm9yTWVzc2FnZSA9ICdFcnJvcjogaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaW5wdXQgPSBhd2FpdCByZWFkU3RkaW5UZXh0KCk7XG4gIGlmIChpbnB1dC5sZW5ndGggPiAwKSB7XG4gICAgcmV0dXJuIGlucHV0O1xuICB9XG4gIGV4aXRXaXRoRXJyb3IoZXJyb3JNZXNzYWdlLCAyKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmQoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBhbGxvd2VkRXhpdENvZGVzID0gb3B0aW9ucy5hbGxvd2VkRXhpdENvZGVzID8/IFtdO1xuXG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IEdIX1JFVFJZX01BWF9BVFRFTVBUUzsgYXR0ZW1wdCArPSAxKSB7XG4gICAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICAgIHN0ZGlvOiBbJ3BpcGUnLCAncGlwZScsICdwaXBlJ10sXG4gICAgfSk7XG4gICAgaWYgKG9wdGlvbnMuc3RkaW5EYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByb2Muc3RkaW4uZW5kKG9wdGlvbnMuc3RkaW5EYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvYy5zdGRpbi5lbmQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBbc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZG91dCksXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRlcnIpLFxuICAgICAgbmV3IFByb21pc2U8bnVtYmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHByb2Mub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgICAgICBwcm9jLm9uY2UoJ2Nsb3NlJywgKGNvZGUpID0+IHJlc29sdmUoY29kZSA/PyAxKSk7XG4gICAgICB9KSxcbiAgICBdKTtcbiAgICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcblxuICAgIGlmIChleGl0Q29kZSA9PT0gMCB8fCBhbGxvd2VkRXhpdENvZGVzLmluY2x1ZGVzKGV4aXRDb2RlKSkge1xuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG5cbiAgICBpZiAoaXNUcmFuc2llbnRHaEZhaWx1cmUoY29tbWFuZCwgZXhpdENvZGUsIG91dHB1dCkgJiYgYXR0ZW1wdCA8IEdIX1JFVFJZX01BWF9BVFRFTVBUUykge1xuICAgICAgcHJvZ3Jlc3MoYFRyYW5zaWVudCBHaXRIdWIgQ0xJIGZhaWx1cmU7IHJldHJ5aW5nLi4uIChhdHRlbXB0ICR7YXR0ZW1wdH0gb2YgJHtHSF9SRVRSWV9NQVhfQVRURU1QVFMgLSAxfSlgKTtcbiAgICAgIGF3YWl0IHNsZWVwKEdIX1JFVFJZX0JBU0VfREVMQVlfTVMgKiBhdHRlbXB0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGV4aXRXaXRoRXJyb3Iob3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbiAgfVxuICBleGl0V2l0aEVycm9yKGBDb21tYW5kIGZhaWxlZCBhZnRlciAke0dIX1JFVFJZX01BWF9BVFRFTVBUU30gYXR0ZW1wdHM6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaChhcmdzOiBzdHJpbmdbXSwgc3RkaW5EYXRhPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHJ1bkNvbW1hbmQoWydnaCcsIC4uLmFyZ3NdLCB7IHN0ZGluRGF0YSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdoQWxsb3dFeGl0Q29kZXMoXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBhbGxvd2VkRXhpdENvZGVzOiBudW1iZXJbXSxcbiAgc3RkaW5EYXRhPzogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgcnVuQ29tbWFuZChbJ2doJywgLi4uYXJnc10sIHsgc3RkaW5EYXRhLCBhbGxvd2VkRXhpdENvZGVzIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudFJlcG9QYXJ0cygpOiBQcm9taXNlPFtzdHJpbmcsIHN0cmluZ10+IHtcbiAgY29uc3QgbmFtZVdpdGhPd25lciA9IChhd2FpdCBnaChbJ3JlcG8nLCAndmlldycsICctLWpzb24nLCAnbmFtZVdpdGhPd25lcicsICctLWpxJywgJy5uYW1lV2l0aE93bmVyJ10pKS50cmltKCk7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBuYW1lV2l0aE93bmVyLnNwbGl0KCcvJywgMik7XG4gIGlmICghb3duZXIgfHwgIW5hbWUpIHtcbiAgICBleGl0V2l0aEVycm9yKCdFcnJvcjogY291bGQgbm90IGRldGVybWluZSBjdXJyZW50IHJlcG9zaXRvcnknKTtcbiAgfVxuICByZXR1cm4gW293bmVyLCBuYW1lXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRQck51bWJlcigpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gKGF3YWl0IGdoKFsncHInLCAndmlldycsICctLWpzb24nLCAnbnVtYmVyJywgJy0tanEnLCAnLm51bWJlciddKSkudHJpbSgpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ3JhcGhxbDxUIGV4dGVuZHMgSnNvbk9iamVjdD4oXG4gIHF1ZXJ5OiBzdHJpbmcsXG4gIHZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZD4gPSB7fVxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IGFyZ3MgPSBbJ2FwaScsICdncmFwaHFsJywgJy1GJywgJ3F1ZXJ5PUAtJ107XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcnMpKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgYXJncy5wdXNoKCctRicsIGAke2tleX09JHt2YWx1ZX1gKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShhd2FpdCBnaChhcmdzLCBxdWVyeSkpIGFzIEpzb25PYmplY3QgJiB7IGVycm9ycz86IEFycmF5PHsgbWVzc2FnZT86IHN0cmluZyB9PiB9O1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSkge1xuICAgIHJldHVybiByZXNwb25zZSBhcyBUO1xuICB9XG5cbiAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IHJlc3BvbnNlLmVycm9ycy5tYXAoKGVycm9yKSA9PiBlcnJvci5tZXNzYWdlID8/ICdVbmtub3duIEdyYXBoUUwgZXJyb3InKS5qb2luKCdcXG4nKTtcbiAgZXhpdFdpdGhFcnJvcihgR3JhcGhRTCBBUEkgZXJyb3I6XFxuJHtlcnJvck1lc3NhZ2VzfWApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24geWFtbER1bXAoZGF0YTogdW5rbm93bik6IHN0cmluZyB7XG4gIHJldHVybiBzdHJpbmdpZnlZYW1sKGRhdGEsIHlhbWxTdHJpbmdpZnlPcHRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBDb3B5PFQ+KGRhdGE6IFQpOiBUIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpIGFzIFQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21tYW5kQXZhaWxhYmxlKGNvbW1hbmQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gc3Bhd25TeW5jU2FmZShbY29tbWFuZCwgJy0tdmVyc2lvbiddKS5leGl0Q29kZSA9PT0gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwYXduU3luY1NhZmUoY29tbWFuZDogc3RyaW5nW10sIHN0ZGluRGF0YT86IHN0cmluZyk6IHsgZXhpdENvZGU6IG51bWJlcjsgb3V0cHV0OiBzdHJpbmcgfSB7XG4gIGNvbnN0IHJlc3VsdCA9IHNwYXduU3luYyhjb21tYW5kWzBdID8/ICcnLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgZW5jb2Rpbmc6ICd1dGY4JyxcbiAgICBpbnB1dDogc3RkaW5EYXRhLFxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIGV4aXRDb2RlOiByZXN1bHQuc3RhdHVzID8/IChyZXN1bHQuZXJyb3IgPyAxIDogMCksXG4gICAgb3V0cHV0OiBgJHtyZXN1bHQuc3Rkb3V0ID8/ICcnfSR7cmVzdWx0LnN0ZGVyciA/PyAnJ31gLFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc1RyYW5zaWVudEdoRmFpbHVyZShjb21tYW5kOiBzdHJpbmdbXSwgZXhpdENvZGU6IG51bWJlciwgb3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGNvbW1hbmRbMF0gIT09ICdnaCcgfHwgZXhpdENvZGUgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gLyhIVFRQIDUwWzAyMzRdXFxifFdlIGhhZCBpc3N1ZXMgcHJvZHVjaW5nIHRoZSByZXNwb25zZSB0byB5b3VyIHJlcXVlc3QpL2kudGVzdChvdXRwdXQpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHJlYW1Ub1RleHQoc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0gfCBudWxsKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKCFzdHJlYW0pIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBjaHVua3M6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGRlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKTtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICBjaHVua3MucHVzaCh0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnID8gY2h1bmsgOiBkZWNvZGVyLmRlY29kZShuZXcgVWludDhBcnJheShjaHVuayksIHsgc3RyZWFtOiB0cnVlIH0pKTtcbiAgfVxuICBjaHVua3MucHVzaChkZWNvZGVyLmRlY29kZSgpKTtcbiAgcmV0dXJuIGNodW5rcy5qb2luKCcnKTtcbn1cbiIsImltcG9ydCB7IHN0ZGVyciBhcyBwcm9jZXNzU3RkZXJyIH0gZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7IHNldFRpbWVvdXQgYXMgc2xlZXAgfSBmcm9tICdub2RlOnRpbWVycy9wcm9taXNlcyc7XG5pbXBvcnQgeyBzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHsgY3JlYXRlV2FpdFByb2dyZXNzLCBXQUlUX1VQX1RPX09ORV9IT1VSX1dBUk5JTkcgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuaW1wb3J0IHtcbiAgY29tbWFuZEF2YWlsYWJsZSxcbiAgY3VycmVudFByTnVtYmVyLFxuICBkZWVwQ29weSxcbiAgZXhpdFdpdGhFcnJvcixcbiAgZ2hBbGxvd0V4aXRDb2RlcyxcbiAgcHJvZ3Jlc3MsXG4gIHNwYXduU3luY1NhZmUsXG4gIHlhbWxEdW1wLFxufSBmcm9tICcuL3NoYXJlZC5qcyc7XG5cbmV4cG9ydCBjb25zdCBURVNUX1JFTEFURURfUEFUVEVSTiA9IC9cXGJ0ZXN0XFxiL2k7XG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMgPSAxMDtcbmV4cG9ydCBjb25zdCBURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTID0gMzYwO1xuY29uc3QgVEVTVF9DSEVDS19XQUlUX01FU1NBR0UgPSBgV2FpdGluZyBmb3IgdGVzdC1yZWxhdGVkIHdvcmtmbG93cyB0byBmaW5pc2guICR7V0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HfWA7XG5leHBvcnQgY29uc3QgWkVST19USU1FU1RBTVAgPSAnMDAwMS0wMS0wMVQwMDowMDowMFonO1xuZXhwb3J0IGNvbnN0IFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyA9IFtcbiAgJ2F0dGVtcHQnLFxuICAnY29uY2x1c2lvbicsXG4gICdjcmVhdGVkQXQnLFxuICAnZGF0YWJhc2VJZCcsXG4gICdkaXNwbGF5VGl0bGUnLFxuICAnZXZlbnQnLFxuICAnaGVhZEJyYW5jaCcsXG4gICdoZWFkU2hhJyxcbiAgJ2pvYnMnLFxuICAnbmFtZScsXG4gICdudW1iZXInLFxuICAnc3RhcnRlZEF0JyxcbiAgJ3N0YXR1cycsXG4gICd1cGRhdGVkQXQnLFxuICAndXJsJyxcbiAgJ3dvcmtmbG93TmFtZScsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBDaGVjayA9IHtcbiAgYnVja2V0Pzogc3RyaW5nO1xuICBjb21wbGV0ZWRBdD86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/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+IDA7XG59XG4iLCJpbXBvcnQgeyBjdXJyZW50UHJOdW1iZXIsIGV4aXRXaXRoRXJyb3IsIGdoLCBwcm9ncmVzcywgcnVuQ29tbWFuZCwgeWFtbER1bXAgfSBmcm9tICcuL3NoYXJlZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBvcGVuUHIoYm9keT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGhlYWQgPSAoYXdhaXQgcnVuQ29tbWFuZChbJ2dpdCcsICdicmFuY2gnLCAnLS1zaG93LWN1cnJlbnQnXSkpLnRyaW0oKTtcbiAgY29uc3QgYmFzZSA9IChhd2FpdCBnaChbJ3JlcG8nLCAndmlldycsICctLWpzb24nLCAnZGVmYXVsdEJyYW5jaFJlZicsICctLWpxJywgJy5kZWZhdWx0QnJhbmNoUmVmLm5hbWUnXSkpLnRyaW0oKTtcblxuICBpZiAoIWhlYWQpIHtcbiAgICBleGl0V2l0aEVycm9yKCdFcnJvcjogY291bGQgbm90IGRldGVybWluZSBjdXJyZW50IGJyYW5jaCcpO1xuICB9XG4gIGlmICghYmFzZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGRlZmF1bHQgYnJhbmNoJyk7XG4gIH1cbiAgaWYgKGhlYWQgPT09IGJhc2UpIHtcbiAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogY3VycmVudCBicmFuY2ggaXMgdGhlIGRlZmF1bHQgYnJhbmNoICgke2Jhc2V9KWApO1xuICB9XG5cbiAgY29uc3QgY3JlYXRlQXJncyA9IFsncHInLCAnY3JlYXRlJywgJy0tYmFzZScsIGJhc2UsICctLWhlYWQnLCBoZWFkLCAnLS1maWxsJ107XG4gIGlmIChib2R5ICYmIGJvZHkubGVuZ3RoID4gMCkge1xuICAgIGNyZWF0ZUFyZ3MucHVzaCgnLS1ib2R5LWZpbGUnLCAnLScpO1xuICB9XG5cbiAgcHJvZ3Jlc3MoJ0NyZWF0aW5nIHB1bGwgcmVxdWVzdC4uLicpO1xuICBhd2FpdCBnaChjcmVhdGVBcmdzLCBib2R5KTtcblxuICByZXR1cm4geWFtbER1bXAoXG4gICAgSlNPTi5wYXJzZShhd2FpdCBnaChbJ3ByJywgJ3ZpZXcnLCAnLS1qc29uJywgJ2lkLG51bWJlcix0aXRsZSx1cmwsc3RhdGUsaXNEcmFmdCxiYXNlUmVmTmFtZSxoZWFkUmVmTmFtZSxhdXRob3InXSkpXG4gICk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cGRhdGVQckJvZHkoYm9keTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcyhgVXBkYXRpbmcgcHVsbCByZXF1ZXN0ICMke3ByTnVtYmVyfSBib2R5Li4uYCk7XG4gIHJldHVybiBhd2FpdCB1cGRhdGVQcihwck51bWJlciwgWyctLWJvZHktZmlsZScsICctJ10sIGJvZHkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlUHJUaXRsZSh0aXRsZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcyhgVXBkYXRpbmcgcHVsbCByZXF1ZXN0ICMke3ByTnVtYmVyfSB0aXRsZS4uLmApO1xuICByZXR1cm4gYXdhaXQgdXBkYXRlUHIocHJOdW1iZXIsIFsnLS10aXRsZScsIHRpdGxlXSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByKHByTnVtYmVyOiBzdHJpbmcsIGVkaXRBcmdzOiBzdHJpbmdbXSwgc3RkaW5EYXRhPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgYXdhaXQgZ2goWydwcicsICdlZGl0JywgcHJOdW1iZXIsIC4uLmVkaXRBcmdzXSwgc3RkaW5EYXRhKTtcblxuICByZXR1cm4geWFtbER1bXAoXG4gICAgSlNPTi5wYXJzZShcbiAgICAgIGF3YWl0IGdoKFtcbiAgICAgICAgJ3ByJyxcbiAgICAgICAgJ3ZpZXcnLFxuICAgICAgICBwck51bWJlcixcbiAgICAgICAgJy0tanNvbicsXG4gICAgICAgICdpZCxudW1iZXIsdGl0bGUsdXJsLHN0YXRlLGlzRHJhZnQsYmFzZVJlZk5hbWUsaGVhZFJlZk5hbWUsYXV0aG9yLGJvZHknLFxuICAgICAgXSlcbiAgICApXG4gICk7XG59XG4iLCJpbXBvcnQge1xuICBjdXJyZW50UHJOdW1iZXIsXG4gIGN1cnJlbnRSZXBvUGFydHMsXG4gIGV4aXRXaXRoRXJyb3IsXG4gIGdyYXBocWwsXG4gIHByb2dyZXNzLFxuICByZWFkUmVxdWlyZWRTdGRpblRleHQsXG4gIHlhbWxEdW1wLFxufSBmcm9tICcuL3NoYXJlZC5qcyc7XG5cbnR5cGUgUmV2aWV3Q29tbWVudE5vZGUgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICBkaWZmSHVuaz86IHN0cmluZyB8IG51bGw7XG4gIGF1dGhvcj86IHsgbG9naW4/OiBzdHJpbmcgfCBudWxsIH0gfCBzdHJpbmcgfCBudWxsO1xufTtcblxudHlwZSBSZXZpZXdUaHJlYWROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICBpc1Jlc29sdmVkOiBib29sZWFuO1xuICBpc091dGRhdGVkPzogYm9vbGVhbiB8IG51bGw7XG4gIHBhdGg/OiBzdHJpbmcgfCBudWxsO1xuICBsaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgb3JpZ2luYWxMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgc3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgb3JpZ2luYWxTdGFydExpbmU/OiBudW1iZXIgfCBudWxsO1xuICBjb21tZW50czoge1xuICAgIG5vZGVzOiBSZXZpZXdDb21tZW50Tm9kZVtdO1xuICAgIHBhZ2VJbmZvOiB7XG4gICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG4gICAgfTtcbiAgfTtcbn07XG5cbmNvbnN0IFJFVklFV19USFJFQURfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdUaHJlYWRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICAgIGlzT3V0ZGF0ZWRcbiAgICAgICAgICAgIHBhdGhcbiAgICAgICAgICAgIGxpbmVcbiAgICAgICAgICAgIG9yaWdpbmFsTGluZVxuICAgICAgICAgICAgc3RhcnRMaW5lXG4gICAgICAgICAgICBvcmlnaW5hbFN0YXJ0TGluZVxuICAgICAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCkge1xuICAgICAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgICAgICBib2R5XG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICAgICAgZGlmZkh1bmtcbiAgICAgICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUkVWSUVXX0NPTU1FTlRfUVVFUlkgPSBgXG4gIHF1ZXJ5KCR0aHJlYWRJZDogSUQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICBub2RlKGlkOiAkdGhyZWFkSWQpIHtcbiAgICAgIC4uLiBvbiBQdWxsUmVxdWVzdFJldmlld1RocmVhZCB7XG4gICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICBkaWZmSHVua1xuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBSRVZJRVdfVEhSRUFEX0lEU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIHJldmlld1RocmVhZHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgaXNSZXNvbHZlZFxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFJlcGxpZXNGcm9tU3RkaW4oKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gIGNvbnN0IGlucHV0ID0gYXdhaXQgcmVhZFJlcXVpcmVkU3RkaW5UZXh0KCdFcnJvcjogSlNPTiBpbnB1dCBpcyByZXF1aXJlZCBvbiBzdGRpbicpO1xuICBjb25zdCBwYXlsb2FkID0gcGFyc2VSZXBseUlucHV0KGlucHV0KTtcbiAgY29uc3Qgbm9ybWFsaXplZFJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBbdGhyZWFkSWQsIGJvZHldIG9mIE9iamVjdC5lbnRyaWVzKHBheWxvYWQucmVwbGllcykpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnICYmIGJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgbm9ybWFsaXplZFJlcGxpZXNbdGhyZWFkSWRdID0gYm9keTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWRSZXBsaWVzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFxuICBxdWVyeTogc3RyaW5nLFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIsXG4gIG9uVGhyZWFkOiAodGhyZWFkOiBSZXZpZXdUaHJlYWROb2RlKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPlxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgcmV2aWV3VGhyZWFkcyA9IChcbiAgICAgIGF3YWl0IGdyYXBocWw8e1xuICAgICAgICBkYXRhPzoge1xuICAgICAgICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICAgICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgICAgICAgcmV2aWV3VGhyZWFkcz86IHtcbiAgICAgICAgICAgICAgICBub2RlczogUmV2aWV3VGhyZWFkTm9kZVtdO1xuICAgICAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KHF1ZXJ5LCB7XG4gICAgICAgIG93bmVyLFxuICAgICAgICBuYW1lLFxuICAgICAgICBudW1iZXI6IE51bWJlcihwck51bWJlciksXG4gICAgICAgIGN1cnNvcixcbiAgICAgIH0pXG4gICAgKS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8ucmV2aWV3VGhyZWFkcztcblxuICAgIGlmICghcmV2aWV3VGhyZWFkcykge1xuICAgICAgZXhpdFdpdGhFcnJvcihcbiAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIHJldmlld1RocmVhZHMgaW4gR3JhcGhRTCByZXNwb25zZS4gVGhlIHB1bGwgcmVxdWVzdCBtYXkgbm90IGV4aXN0IG9yIHRoZXJlIHdhcyBhbiBBUEkgZXJyb3IuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRocmVhZCBvZiByZXZpZXdUaHJlYWRzLm5vZGVzKSB7XG4gICAgICBhd2FpdCBvblRocmVhZCh0aHJlYWQpO1xuICAgIH1cblxuICAgIGlmICghcmV2aWV3VGhyZWFkcy5wYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdXJzb3IgPSByZXZpZXdUaHJlYWRzLnBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBpZHM6IHN0cmluZ1tdID0gW107XG4gIGF3YWl0IHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhSRVZJRVdfVEhSRUFEX0lEU19RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCAodGhyZWFkKSA9PiB7XG4gICAgaWYgKCF0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgaWRzLnB1c2godGhyZWFkLmlkKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaWRzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5yZXNvbHZlZFJldmlld1RocmVhZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPiB7XG4gIGNvbnN0IHRocmVhZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gPSBbXTtcblxuICBhd2FpdCBwYWdpbmF0ZVJldmlld1RocmVhZHMoUkVWSUVXX1RIUkVBRF9RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCBhc3luYyAodGhyZWFkKSA9PiB7XG4gICAgaWYgKHRocmVhZC5pc1Jlc29sdmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tbWVudHMgPSB0aHJlYWQuY29tbWVudHMubm9kZXMubWFwKG5vcm1hbGl6ZUNvbW1lbnRBdXRob3IpO1xuICAgIGxldCBwYWdlSW5mbyA9IHRocmVhZC5jb21tZW50cy5wYWdlSW5mbztcbiAgICBsZXQgY3Vyc29yID0gcGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcblxuICAgIHdoaWxlIChwYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgY29uc3QgY29tbWVudENvbm5lY3Rpb24gPSAoXG4gICAgICAgIGF3YWl0IGdyYXBocWw8e1xuICAgICAgICAgIGRhdGE/OiB7XG4gICAgICAgICAgICBub2RlPzoge1xuICAgICAgICAgICAgICBjb21tZW50cz86IHtcbiAgICAgICAgICAgICAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH0+KFJFVklFV19DT01NRU5UX1FVRVJZLCB7IHRocmVhZElkOiB0aHJlYWQuaWQsIGN1cnNvciB9KVxuICAgICAgKS5kYXRhPy5ub2RlPy5jb21tZW50cztcblxuICAgICAgaWYgKCFjb21tZW50Q29ubmVjdGlvbikge1xuICAgICAgICBleGl0V2l0aEVycm9yKGBDb3VsZCBub3QgZmluZCBjb21tZW50cyBpbiBHcmFwaFFMIHJlc3BvbnNlIGZvciB0aHJlYWQgJHt0aHJlYWQuaWR9LmApO1xuICAgICAgfVxuXG4gICAgICBjb21tZW50cy5wdXNoKC4uLmNvbW1lbnRDb25uZWN0aW9uLm5vZGVzLm1hcChub3JtYWxpemVDb21tZW50QXV0aG9yKSk7XG4gICAgICBwYWdlSW5mbyA9IGNvbW1lbnRDb25uZWN0aW9uLnBhZ2VJbmZvO1xuICAgICAgY3Vyc29yID0gcGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aHJlYWRzLnB1c2goe1xuICAgICAgaWQ6IHRocmVhZC5pZCxcbiAgICAgIGlzUmVzb2x2ZWQ6IHRocmVhZC5pc1Jlc29sdmVkLFxuICAgICAgaXNPdXRkYXRlZDogdGhyZWFkLmlzT3V0ZGF0ZWQsXG4gICAgICBwYXRoOiB0aHJlYWQucGF0aCxcbiAgICAgIGxpbmU6IHRocmVhZC5saW5lLFxuICAgICAgb3JpZ2luYWxMaW5lOiB0aHJlYWQub3JpZ2luYWxMaW5lLFxuICAgICAgc3RhcnRMaW5lOiB0aHJlYWQuc3RhcnRMaW5lLFxuICAgICAgb3JpZ2luYWxTdGFydExpbmU6IHRocmVhZC5vcmlnaW5hbFN0YXJ0TGluZSxcbiAgICAgIGNvbW1lbnRzLFxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gdGhyZWFkcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxpc3RQclJldmlld1RocmVhZHMoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcygnRmV0Y2hpbmcgdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcy4uLicpO1xuICByZXR1cm4geWFtbER1bXAoeyB1bnJlc29sdmVkX3RocmVhZHM6IGF3YWl0IHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzKG93bmVyLCBuYW1lLCBwck51bWJlcikgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZXNvbHZlUHJSZXZpZXdUaHJlYWRzKHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuICBjb25zdCB1bnJlc29sdmVkSWRzID0gbmV3IFNldChhd2FpdCB1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzKG93bmVyLCBuYW1lLCBwck51bWJlcikpO1xuXG4gIHByb2dyZXNzKGBSZXBseWluZyB0byAke09iamVjdC5rZXlzKHJlcGxpZXMpLmxlbmd0aH0gcmV2aWV3IHRocmVhZHMuLi5gKTtcblxuICBjb25zdCByZXNvbHZlZFRocmVhZElkczogc3RyaW5nW10gPSBbXTtcbiAgY29uc3QgZW50cmllcyA9IE9iamVjdC5lbnRyaWVzKHJlcGxpZXMpO1xuXG4gIGZvciAoY29uc3QgW2luZGV4LCBbdGhyZWFkSWQsIGJvZHldXSBvZiBlbnRyaWVzLmVudHJpZXMoKSkge1xuICAgIHByb2dyZXNzKGBQcm9jZXNzaW5nICR7aW5kZXggKyAxfS8ke2VudHJpZXMubGVuZ3RofTogJHt0aHJlYWRJZH1gKTtcbiAgICBpZiAoIXVucmVzb2x2ZWRJZHMuaGFzKHRocmVhZElkKSkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBncmFwaHFsPHtcbiAgICAgIGRhdGE/OiB7XG4gICAgICAgIHJlc29sdmVSZXZpZXdUaHJlYWQ/OiB7XG4gICAgICAgICAgdGhyZWFkPzoge1xuICAgICAgICAgICAgaWQ6IHN0cmluZztcbiAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IGJvb2xlYW47XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH07XG4gICAgfT4oXG4gICAgICBgXG4gICAgICAgIG11dGF0aW9uKCR0aHJlYWRJZDogSUQhLCAkYm9keTogU3RyaW5nISkge1xuICAgICAgICAgIGFkZFB1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkUmVwbHkoaW5wdXQ6IHtwdWxsUmVxdWVzdFJldmlld1RocmVhZElkOiAkdGhyZWFkSWQsIGJvZHk6ICRib2R5fSkge1xuICAgICAgICAgICAgY29tbWVudCB7XG4gICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXNvbHZlUmV2aWV3VGhyZWFkKGlucHV0OiB7dGhyZWFkSWQ6ICR0aHJlYWRJZH0pIHtcbiAgICAgICAgICAgIHRocmVhZCB7XG4gICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIGAsXG4gICAgICB7IHRocmVhZElkLCBib2R5IH1cbiAgICApO1xuXG4gICAgaWYgKHJlc3BvbnNlLmRhdGE/LnJlc29sdmVSZXZpZXdUaHJlYWQ/LnRocmVhZD8uaXNSZXNvbHZlZCkge1xuICAgICAgcmVzb2x2ZWRUaHJlYWRJZHMucHVzaCh0aHJlYWRJZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2dyZXNzKGBXYXJuaW5nOiBmYWlsZWQgdG8gcmVzb2x2ZSB0aHJlYWQgJHt0aHJlYWRJZH0uYCk7XG4gICAgfVxuICB9XG5cbiAgcHJvZ3Jlc3MoJ0RvbmUuJyk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHJlc29sdmVkX3RocmVhZF9pZHM6IHJlc29sdmVkVGhyZWFkSWRzIH0pO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVDb21tZW50QXV0aG9yKGNvbW1lbnQ6IFJldmlld0NvbW1lbnROb2RlKTogUmV2aWV3Q29tbWVudE5vZGUgJiB7IGF1dGhvcj86IHN0cmluZyB8IG51bGwgfSB7XG4gIHJldHVybiB7XG4gICAgLi4uY29tbWVudCxcbiAgICBhdXRob3I6IHR5cGVvZiBjb21tZW50LmF1dGhvciA9PT0gJ3N0cmluZycgPyBjb21tZW50LmF1dGhvciA6IChjb21tZW50LmF1dGhvcj8ubG9naW4gPz8gbnVsbCksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVwbHlJbnB1dChpbnB1dDogc3RyaW5nKTogeyByZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkPiB9IHtcbiAgY29uc3QgZXJyb3JQcmVmaXggPSAnRXJyb3I6IEludmFsaWQgaW5wdXQgZm9ybWF0IG9uIHN0ZGluJztcblxuICB0cnkge1xuICAgIGNvbnN0IHBhcnNlZCA9IEpTT04ucGFyc2UoaW5wdXQpIGFzIHVua25vd247XG4gICAgaWYgKCFpc1JlcGx5SW5wdXQocGFyc2VkKSkge1xuICAgICAgZXhpdFdpdGhFcnJvcihgJHtlcnJvclByZWZpeH06IGV4cGVjdGVkIGFuIG9iamVjdCB3aXRoIGEgc3RyaW5nLXZhbHVlZCBcXGByZXBsaWVzXFxgIG1hcGAsIDIpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogSW52YWxpZCBKU09OIHByb3ZpZGVkIG9uIHN0ZGluOiAke2Vycm9yLm1lc3NhZ2V9YCwgMik7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzUmVwbHlJbnB1dCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHsgcmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcmVwbGllcyA9ICh2YWx1ZSBhcyB7IHJlcGxpZXM/OiB1bmtub3duIH0pLnJlcGxpZXM7XG4gIGlmICh0eXBlb2YgcmVwbGllcyAhPT0gJ29iamVjdCcgfHwgcmVwbGllcyA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHJlcGxpZXMpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC52YWx1ZXMocmVwbGllcykuZXZlcnkoKHJlcGx5KSA9PiByZXBseSA9PT0gbnVsbCB8fCByZXBseSA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiByZXBseSA9PT0gJ3N0cmluZycpO1xufVxuIiwiaW1wb3J0IHsgZmV0Y2hJc3N1ZU1lc3NhZ2VzIH0gZnJvbSAnLi4vcHIvcHJDb21tYW5kcy5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBidWlsZFBsYW5Qcm9tcHQoaXNzdWVOdW1iZXI6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGlzc3VlWWFtbCA9IGF3YWl0IGZldGNoSXNzdWVNZXNzYWdlcyhpc3N1ZU51bWJlcik7XG5cbiAgcmV0dXJuIGBcblBsYW4gYSBHaXRIdWIgaXNzdWUgYnkgZ2F0aGVyaW5nIGNvbnRleHQsIHdyaXRpbmcgYSBzcGVjaWZpY2F0aW9uIGZvciBzb2Z0d2FyZSBlbmdpbmVlcnMsIGFuZCBwb3N0aW5nIG9yIHVwZGF0aW5nIHRoYXQgc3BlY2lmaWNhdGlvbiBiYWNrIHRvIHRoZSBpc3N1ZS5cblRoZSB0YXJnZXQgaXNzdWUgbnVtYmVyIGlzICMke2lzc3VlTnVtYmVyfS4gSGVyZSBpcyB0aGUgZmV0Y2hlZCBpc3N1ZSBjb250ZXh0IGFzIFlBTUw6XG5+fn5+eWFtbFxuJHtpc3N1ZVlhbWwudHJpbSgpfVxufn5+flxuXG5Gb2xsb3cgdGhpcyB3b3JrZmxvdzpcbjEuIFJlYWQgdGhlIGFib3ZlIGlzc3VlIGJvZHkgYW5kIHRpbWVsaW5lIG1lc3NhZ2VzIGNhcmVmdWxseS5cbjIuIENvbGxlY3QgZW5vdWdoIHN1cHBvcnRpbmcgaW5mb3JtYXRpb24gYmVmb3JlIHdyaXRpbmcgdGhlIHNwZWNpZmljYXRpb246XG4gICAtIEluc3BlY3QgdGhlIHJlbGV2YW50IGNvZGUsIHN1cnJvdW5kaW5nIGNhbGwgc2l0ZXMsIHJlbGF0ZWQgdHlwZXMsIHRlc3RzLCBjb25maWd1cmF0aW9uLCByZWNlbnQgZGlmZnMsIGFuZCBhbnkgb3RoZXIgbG9jYWwgY29udGV4dCBuZWVkZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlLlxuICAgLSBJZiBjb2RlIGluc3BlY3Rpb24gaXMgZW5vdWdoLCB1c2UgdGhlIGN1cnJlbnQgY29kZWJhc2UgYXMgdGhlIHByaW1hcnkgZXZpZGVuY2UuXG4gICAtIElmIHRoZSBpc3N1ZSBkZXBlbmRzIG9uIHJ1bnRpbWUgYmVoYXZpb3IsIHJlcHJvZHVjZSBpdCB3aXRoIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgZXhwZXJpbWVudCwgc3VjaCBhcyBhIGZvY3VzZWQgY29tbWFuZCwgYSB0aW55IHNjcmlwdCwgYSB0ZW1wb3JhcnkgbG9jYWwgYXNzZXJ0aW9uLCBvciBhbm90aGVyIG5hcnJvdyBjaGVjayB0aGF0IGRvZXMgbm90IGNoYW5nZSB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuXG4gICAgIC0gRG9uJ3QgZm9yZ2V0IHRvIGNsZWFuIHVwIGFueSB0ZW1wb3JhcnkgZmlsZXMuXG4gICAtIElmIHRoZSBpc3N1ZSBkZXBlbmRzIG9uIGEgbGlicmFyeSwgQVBJLCBvciBsYW5ndWFnZSBmZWF0dXJlLCBjb25maXJtIGl0IGFnYWluc3QgdGhlIGxhdGVzdCBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIG9yIGFub3RoZXIgcHJpbWFyeSBzb3VyY2UgaW5zdGVhZCBvZiByZWx5aW5nIG9uIG1lbW9yeS5cbjMuIFdyaXRlIHRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgaXNzdWUgY29tbWVudC5cbiAgIC0gV3JpdGUgdGhlIGJhY2tncm91bmQgYmFzZWQgb24gdGhlIGNvbGxlY3RlZCBpbmZvcm1hdGlvbi5cbiAgIC0gRGVmaW5lIGEgZ29hbCB0aGF0IGNsZWFybHkgZ3VpZGVzIG91ciBpbXBsZW1lbnRhdGlvbiBpbiB0aGUgcmlnaHQgZGlyZWN0aW9uLlxuICAgLSBXcml0ZSBhIGRldGFpbGVkIHNwZWNpZmljYXRpb24gaW5jb3Jwb3JhdGluZyB0aGUgZXZpZGVuY2UgeW91IGNvbGxlY3RlZC5cbiAgIC0gSWYgbmVlZGVkLCBpbmNsdWRlIGNvZGUgc25pcHBldHMgdGhhdCBleHBsYWluIGhvdyB0byB1c2UgbGlicmFyaWVzIG9yIEFQSXMsIGFsb25nIHdpdGggcmVmZXJlbmNlcyB0byB0aGVpciBkb2N1bWVudGF0aW9uLlxuNC4gUG9zdCB0aGUgc3BlY2lmaWNhdGlvbiBiYWNrIHRvIGlzc3VlICMke2lzc3VlTnVtYmVyfSwgdGhlbiBwcmludCB0aGUgaXNzdWUgVVJMLlxuICAgLSBJZiB0aGUgaXNzdWUgYWxyZWFkeSBoYXMgYSBzcGVjaWZpY2F0aW9uLCB1cGRhdGUgdGhlIGV4aXN0aW5nIGNvbW1lbnQgaW5zdGVhZCBvZiBwb3N0aW5nIGEgbmV3IG9uZS5cblxuRm9ybWF0IHRoZSBpc3N1ZSBjb21tZW50IGV4YWN0bHkgbGlrZSB0aGlzLCBidXQgZG8gbm90IGluY2x1ZGUgdGhlIHN1cnJvdW5kaW5nIFxcYH5+fn5cXGAgZmVuY2VzIGluIHRoZSBhY3R1YWwgY29tbWVudDpcbn5+fn5cbiMjIEJhY2tncm91bmRcblxuW1N1bW1hcml6ZSB0aGUgY3VycmVudCBiZWhhdmlvciBhbmQgZXhwbGFpbiB0aGUgbW90aXZhdGlvbiBiZWhpbmQgdGhpcyBpc3N1ZV1cblxuIyMgR29hbFxuXG5bRGVmaW5lIHRoZSBnb2FsIHdlIHdhbnQgdG8gYWNoaWV2ZSBpbiB0aGlzIGlzc3VlXVxuXG4jIyBTcGVjaWZpY2F0aW9uXG5cbltEZXRhaWxlZCBzcGVjaWZpY2F0aW9uIGZvciBzb2Z0d2FyZSBlbmdpbmVlcnNdXG5cbiMjIEtleSBUZWNobm9sb2dpZXMgKE9OTFkgaWYgZXh0ZXJuYWwgcmVzb3VyY2VzIGFyZSBuZWVkZWQpXG5cbltEZXNjcmliZSB3aGF0IGxpYnJhcmllcyBvciBBUElzIHdlIHNob3VsZCB1c2UsIGluY2x1ZGluZyBjb25jcmV0ZSB2ZXJzaW9ucyBhbmQgY29kZSBzbmlwcGV0cy5dXG5cbn5+fn5cbmAudHJpbSgpO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZChiYXNlQnJhbmNoOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYGdpdCBtZXJnZS1iYXNlICR7c2hlbGxRdW90ZShgb3JpZ2luLyR7YmFzZUJyYW5jaH1gKX0gSEVBRCAyPi9kZXYvbnVsbCB8fCBnaXQgbWVyZ2UtYmFzZSAke3NoZWxsUXVvdGUoYmFzZUJyYW5jaCl9IEhFQURgO1xufVxuXG5mdW5jdGlvbiBzaGVsbFF1b3RlKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYCcke3ZhbHVlLnJlcGxhY2VBbGwoXCInXCIsIFwiJ1xcXCInXFxcIidcIil9J2A7XG59XG4iLCJpbXBvcnQgeyBmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUgfSBmcm9tICcuLi9wci9wckNvbW1hbmRzLmpzJztcbmltcG9ydCB7IGN1cnJlbnRCYXNlQnJhbmNoIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7IE5PX0NPTkNFUk5fTUVTU0FHRSB9IGZyb20gJy4uL3Jldmlldy9ub0NvbmNlcm4uanMnO1xuaW1wb3J0IHsgYnVpbGRNZXJnZUJhc2VDb21tYW5kIH0gZnJvbSAnLi9iYXNlQnJhbmNoRGlmZkNvbW1hbmQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRSZXZpZXdQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYmFzZUJyYW5jaCA9IGF3YWl0IGN1cnJlbnRCYXNlQnJhbmNoKCk7XG4gIGNvbnN0IG1lcmdlQmFzZUNvbW1hbmQgPSBidWlsZE1lcmdlQmFzZUNvbW1hbmQoYmFzZUJyYW5jaCk7XG4gIGNvbnN0IHByQ29udGV4dCA9IGF3YWl0IGZldGNoQ3VycmVudFByTWVzc2FnZXNJZkF2YWlsYWJsZSgpO1xuICByZXR1cm4gYFxuUmV2aWV3IHRoZSBjdXJyZW50ICR7cHJDb250ZXh0ID8gJ3B1bGwgcmVxdWVzdCcgOiAnYnJhbmNoJ30gYWdhaW5zdCBpdHMgYmFzZSBicmFuY2ggJHtiYXNlQnJhbmNofSB2aWEgXFxgZ2l0IGRpZmYgXCIkKCR7bWVyZ2VCYXNlQ29tbWFuZH0pXCJcXGAuXG5Gb3IgZWFjaCBmaW5kaW5nLCBkbyB0aGUgZm9sbG93aW5nIHRocmVlIHN0ZXBzOlxuMS4gR2F0aGVyIHN1cHBvcnRpbmcgZXZpZGVuY2U6XG4gICAtIEluc3BlY3QgdGhlIHJlZmVyZW5jZWQgY29kZSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNhbGwgc2l0ZXMsIHJlbGF0ZWQgdHlwZXMsIHRlc3RzLCBjb25maWd1cmF0aW9uLCBhbmQgcmVjZW50IGRpZmZzIHdoZW4gdGhleSBhZmZlY3QgdGhlIGNsYWltLlxuICAgLSBJZiBjb2RlIGluc3BlY3Rpb24gaXMgZW5vdWdoLCB1c2UgdGhlIGN1cnJlbnQgY29kZWJhc2UgYXMgdGhlIHByaW1hcnkgZXZpZGVuY2UuXG4gICAtIElmIHRoZSBmaW5kaW5nIGlzIGFib3V0IHJ1bnRpbWUgYmVoYXZpb3IsIHJlcHJvZHVjZSBpdCB3aXRoIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgZXhwZXJpbWVudCwgc3VjaCBhcyBhIGZvY3VzZWQgY29tbWFuZCwgYSB0aW55IHNjcmlwdCwgYSB0ZW1wb3JhcnkgbG9jYWwgYXNzZXJ0aW9uLCBvciBhbm90aGVyIG5hcnJvdyBjaGVjayB0aGF0IGRvZXMgbm90IGNoYW5nZSB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuXG4gICAtIElmIHRoZSBmaW5kaW5nIGRlcGVuZHMgb24gZnJhbWV3b3JrLCBsaWJyYXJ5LCBwbGF0Zm9ybSwgb3IgbGFuZ3VhZ2UgYmVoYXZpb3IsIGNvbmZpcm0gaXQgYWdhaW5zdCB0aGUgbGF0ZXN0IG9mZmljaWFsIGRvY3VtZW50YXRpb24gb3IgYW5vdGhlciBwcmltYXJ5IHNvdXJjZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gbWVtb3J5LlxuMi4gSnVkZ2Ugd2hldGhlciB0aGUgZmluZGluZyBpcyB2YWxpZDpcbiAgIC0gTWFyayBpdCB2YWxpZCBvbmx5IHdoZW4gdGhlIGF2YWlsYWJsZSBldmlkZW5jZSBzaG93cyB0aGUgcmVwb3J0ZWQgaXNzdWUgaXMgc3RpbGwgcmVhbCBpbiB0aGUgY3VycmVudCBjb2RlYmFzZS5cbiAgIC0gT3RoZXJ3aXNlLCBtYXJrIGl0IG5vdCB2YWxpZC5cbjMuIFByb3Bvc2UgYSBmaXggd2l0aG91dCBtb2RpZnlpbmcgdGhlIGNvZGU6XG4gICAtIERlc2NyaWJlIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgY2hhbmdlIHRoYXQgd291bGQgYWRkcmVzcyB0aGUgZmluZGluZy5cbiAgIC0gSW52ZXN0aWdhdGUgdGhlIGxpa2VseSBpbXBhY3Qgb2YgdGhhdCBjaGFuZ2UgYnkgaW5zcGVjdGluZyB0aGUgYWZmZWN0ZWQgY2FsbCBzaXRlcywgcmVsYXRlZCB0eXBlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb24sIGFuZCBhZGphY2VudCBiZWhhdmlvciwgYW5kIG5vdGUgYW55IGZvbGxvdy11cCBjaGFuZ2VzIG9yIHJpc2tzIHRoZSBmaXggd291bGQgbmVlZCB0byBhY2NvdW50IGZvci5cblxuUmVwb3J0IG9ubHkgdGhlIHZhbGlkIGZpbmRpbmdzLCB0aGUgZXZpZGVuY2UgZm9yIGVhY2ggb25lLCBhbmQgdGhlIHByb3Bvc2VkIGZpeCB3aXRoIGl0cyBsaWtlbHkgaW1wYWN0LiBJbmNsdWRlIGEgYnJpZWYganVzdGlmaWNhdGlvbiBmb3IgZWFjaCwgY2l0aW5nIHRoZSBldmlkZW5jZSB1c2VkIChlLmcuLCBhIGZhaWxpbmcgc2NlbmFyaW8sIGV4cGVyaW1lbnQgcmVzdWx0LCBvciBvZmZpY2lhbCBkb2N1bWVudGF0aW9uKS4gRG8gbm90IG1vZGlmeSB0aGUgY29kZS5cbklmIHRoZXJlIGFyZSBubyB2YWxpZCBmaW5kaW5ncywgcmVzcG9uZCBleGFjdGx5IHdpdGg6IFxcYCR7Tk9fQ09OQ0VSTl9NRVNTQUdFfVxcYFxuXG4ke2J1aWxkUHJDb250ZXh0SW5zdHJ1Y3Rpb25zKHByQ29udGV4dCl9XG5gLnRyaW0oKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRQckNvbnRleHRJbnN0cnVjdGlvbnMocHJDb250ZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQpOiBzdHJpbmcge1xuICByZXR1cm4gcHJDb250ZXh0XG4gICAgPyBgQ3VycmVudCBwdWxsIHJlcXVlc3QgY29udGV4dDpcbn5+fn55YW1sXG4ke3ByQ29udGV4dC50cmltKCl9XG5+fn5+XG5gLnRyaW0oKVxuICAgIDogJyc7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gYnVpbGRTY3JlZW5zaG90UHJvbXB0KGluaXRpYWxVcmw6IHN0cmluZywgcGFnZU5hbWU6IHN0cmluZywgc2NyZWVuc2hvdERlc2NyaXB0aW9uOiBzdHJpbmcpOiBzdHJpbmcge1xuICBjb25zdCBzYW5pdGl6ZWREZXNjcmlwdGlvbiA9IHNjcmVlbnNob3REZXNjcmlwdGlvbi5yZXBsYWNlQWxsKCdcXG4nLCAnICcpLnJlcGxhY2VBbGwoJ1wiJywgXCInXCIpO1xuICByZXR1cm4gYFxuVXNlIFxcYHBsYXl3cmlnaHQtY2xpXFxgIHNraWxsIHRvIHRha2UgYSBzY3JlZW5zaG90IG9mIFwiJHtzYW5pdGl6ZWREZXNjcmlwdGlvbn1cIiBieSBuYXZpZ2F0aW5nIGZyb20gJHtpbml0aWFsVXJsfSB0byBcIiR7cGFnZU5hbWV9XCIgcGFnZS5cblxuRm9sbG93IHRoaXMgd29ya2Zsb3c6XG4xLiBPcGVuIHRoZSBpbml0aWFsIHBhZ2UgYXQgJHtpbml0aWFsVXJsfS5cbjIuIE5hdmlnYXRlIGZyb20gdGhhdCBpbml0aWFsIHBhZ2UgdW50aWwgeW91IHJlYWNoIHRoZSBwYWdlIGlkZW50aWZpZWQgYXMgJHtwYWdlTmFtZX0uXG4gICAtIElmIGNvZGUgZXJyb3JzLCBydW50aW1lIGZhaWx1cmVzLCBvciBicm9rZW4gVUkgZmxvd3MgcHJldmVudCBuYXZpZ2F0aW9uLCBpbnZlc3RpZ2F0ZSB0aGUgY2F1c2UgaW4gdGhlIGxvY2FsIGNvZGViYXNlLCBtYWtlIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgY29kZSBmaXgsIGFuZCB2ZXJpZnkgdGhhdCB0aGUgcGFnZSBjYW4gbm93IGJlIHJlYWNoZWQgYmVmb3JlIGNvbnRpbnVpbmcuXG4gICAtIElmIHlvdSBjYW5ub3QgZml4IHRoZSBlcnJvcnMsIHJlcG9ydCBvbiB0aGUgZXJyb3JzIHRoZW4gc3RvcC5cbjMuIENhcHR1cmUgYSBzY3JlZW5zaG90IHRoYXQgZm9jdXNlcyBvbiB0aGlzIHRhcmdldDogXCIke3Nhbml0aXplZERlc2NyaXB0aW9ufVwiLlxuNC4gS2VlcCB0aGUgZ2VuZXJhdGVkIGltYWdlIGFydGlmYWN0IGFuZCByZXBvcnQgdGhlIHNjcmVlbnNob3QgZmlsZSBwYXRoIHBsdXMgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB3aGF0IHdhcyBjYXB0dXJlZC4gSWYgeW91IGhhZCB0byBmaXggY29kZSBmaXJzdCwgYWxzbyBzdW1tYXJpemUgdGhlIGZpeC5cbmAudHJpbSgpO1xufVxuIiwiaW1wb3J0IHsgY3VycmVudEJhc2VCcmFuY2ggfSBmcm9tICcuLi9yZXBvL2RlZmF1bHRCcmFuY2guanMnO1xuaW1wb3J0IHsgYnVpbGRNZXJnZUJhc2VDb21tYW5kIH0gZnJvbSAnLi9iYXNlQnJhbmNoRGlmZkNvbW1hbmQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRTaW1wbGlmeVByb21wdCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBiYXNlQnJhbmNoID0gYXdhaXQgY3VycmVudEJhc2VCcmFuY2goKTtcbiAgY29uc3QgbWVyZ2VCYXNlQ29tbWFuZCA9IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZChiYXNlQnJhbmNoKTtcbiAgcmV0dXJuIGBcblNpbXBsaWZ5IHRoZSBjdXJyZW50IGJyYW5jaCBhZ2FpbnN0IGl0cyBiYXNlIGJyYW5jaCB1c2luZyBcXGBnaXQgZGlmZiBcIiQoJHttZXJnZUJhc2VDb21tYW5kfSlcIlxcYC5cbkZpcnN0LCBpbnNwZWN0IHRoZSBkaWZmIGFuZCByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgZm9yIGVhY2ggY2hhbmdlZCBhcmVhLiBUaGlzIGluY2x1ZGVzIG5lYXJieSBmdW5jdGlvbnMsIHR5cGVzLCBjYWxsIHNpdGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbnMsIGFuZCBhbnkgb3RoZXIgZmlsZXMgdGhhdCBoZWxwIGRldGVybWluZSBpZiB0aGUgY2hhbmdlIGlzIHRydWx5IG5lY2Vzc2FyeS5cbkxldmVyYWdlIHRoaXMgY29udGV4dCB0byBpZGVudGlmeSByZWR1bmRhbmNpZXMgdGhhdCBjYW4gYmUgc2FmZWx5IHJlbW92ZWQgb3Igc2ltcGxpZmllZC4gTG9vayBmb3IgZHVwbGljYXRlIGxvZ2ljLCByZXBlYXRlZCBjb25kaXRpb25hbHMsIHVubmVjZXNzYXJ5IGFic3RyYWN0aW9ucywgb3ZlcmxhcHBpbmcgY29kZSBwYXRocywgZGVhZCBjb2RlLCBvciBlZGl0cyBtYWRlIG9ic29sZXRlIHVwb24gdW5kZXJzdGFuZGluZyB0aGUgYnJvYWRlciBjb250ZXh0LlxuXG5Qcmlvcml0aXplIHNpbXBsaWZpY2F0aW9ucyB0aGF0IHJlZHVjZSB0aGUgcmV2aWV3ZXIncyBidXJkZW4sIHN1Y2ggYXM6XG4tIFJlbW92aW5nIHJlZHVuZGFudCBlZGl0cyBvciBkZWFkIGNvZGUuXG4tIEVsaW1pbmF0aW5nIG9yIG1lcmdpbmcgZHVwbGljYXRlZCBsb2dpYyBkaXNjb3ZlcmVkIGJ5IGNvbXBhcmluZyB0aGUgZGlmZiB3aXRoIHJlbGF0ZWQgY29kZS5cbi0gRmxhdHRlbmluZyB1bm5lY2Vzc2FyaWx5IGNvbXBsZXggbG9naWMgaW50cm9kdWNlZCBpbiB0aGUgZGlmZiAoZS5nLiwgdXNpbmcgZWFybHkgcmV0dXJucyB0byByZWR1Y2UgbmVzdGluZywgc2ltcGxpZnlpbmcgYm9vbGVhbiBleHByZXNzaW9ucywgb3IgcmVtb3ZpbmcgcmVkdW5kYW50IHdyYXBwZXIgZnVuY3Rpb25zKS5cblxuQ29tbWl0IGFuZCBwdXNoIHlvdXIgY2hhbmdlcy4gQWZ0ZXJ3YXJkLCBzdW1tYXJpemUgdGhlIHJlZHVuZGFuY2llcyBvciB1bm5lY2Vzc2FyeSBjb21wbGV4aXR5IHlvdSBoYXZlIHJlbW92ZWQuXG5gLnRyaW0oKTtcbn1cbiIsIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgQ29tbWFuZCwgT3B0aW9uIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7XG4gIGNvbnRhaW5zTm9Db25jZXJuU2VudGVuY2UsXG4gIGRpc3BsYXlBZ2VudE5hbWUsXG4gIHJ1bkFnZW50Q29tbWFuZCxcbiAgcnVuQWxsQWdlbnRDb21tYW5kcyxcbn0gZnJvbSAnLi9hZ2VudC9hZ2VudENvbW1hbmRzLmpzJztcbmltcG9ydCB7XG4gIGNoZWNrUHJDaSxcbiAgZmV0Y2hJc3N1ZU1lc3NhZ2VzLFxuICBmZXRjaFByTWVzc2FnZXMsXG4gIGxpc3RQclJldmlld1RocmVhZHMsXG4gIG5vcm1hbGl6ZUlzc3VlTnVtYmVyLFxuICBvcGVuUHIsXG4gIHJlYWRSZXBsaWVzRnJvbVN0ZGluLFxuICByZWFkUmVxdWlyZWRTdGRpblRleHQsXG4gIHJlYWRTdGRpblRleHQsXG4gIHJlc29sdmVQclJldmlld1RocmVhZHMsXG4gIHVwZGF0ZVByQm9keSxcbiAgdXBkYXRlUHJUaXRsZSxcbn0gZnJvbSAnLi9wci9wckNvbW1hbmRzLmpzJztcbmltcG9ydCB7IGJ1aWxkUGxhblByb21wdCB9IGZyb20gJy4vcHJvbXB0cy9wbGFuUHJvbXB0LmpzJztcbmltcG9ydCB7IGJ1aWxkUmV2aWV3UHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3Jldmlld1Byb21wdC5qcyc7XG5pbXBvcnQgeyBidWlsZFNjcmVlbnNob3RQcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvc2NyZWVuc2hvdFByb21wdC5qcyc7XG5pbXBvcnQgeyBidWlsZFNpbXBsaWZ5UHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3NpbXBsaWZ5UHJvbXB0LmpzJztcblxuY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbnByb2dyYW0ubmFtZSgnYWdlbnQtc2tpbGxzJykuZGVzY3JpcHRpb24oJ0NMSSBjb21tYW5kcyBmb3IgdGhlIHNraWxscyBpbiB0aGlzIHJlcG9zaXRvcnknKS5zaG93SGVscEFmdGVyRXJyb3IoKTtcblxuYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCh7XG4gIG5hbWU6ICdyZXZpZXcnLFxuICBkZXNjcmlwdGlvbjogJ1J1biByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2ggd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQnLFxuICBvcHRpb25EZXNjcmlwdGlvbjogJ1VzZSBhIHJldmlldyBhZ2VudCcsXG4gIGNob2ljZXM6IFsnYWxsJywgJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgcnVuOiAobW9kZSkgPT5cbiAgICBtb2RlID09PSAnYWxsJ1xuICAgICAgPyBydW5BbGxBZ2VudENvbW1hbmRzKGJ1aWxkUmV2aWV3UHJvbXB0KCksIHtcbiAgICAgICAgICBhbGxBZ2VudHNMYWJlbDogJ3JldmlldyBhZ2VudHMnLFxuICAgICAgICAgIG1hcE91dHB1dDogKGFnZW50LCBvdXRwdXQpID0+IHtcbiAgICAgICAgICAgIGlmIChjb250YWluc05vQ29uY2VyblNlbnRlbmNlKG91dHB1dCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBgIyMgJHtkaXNwbGF5QWdlbnROYW1lKGFnZW50KX1cXG5cXG4ke291dHB1dH1gO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICA6IHJ1bkFnZW50Q29tbWFuZChtb2RlLCBidWlsZFJldmlld1Byb21wdCgpKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1jb2RleCcsICdSdW4gQ29kZXggcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjb2RleCcsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctZ2VtaW5pJywgJ1J1biBHZW1pbmkgQ0xJIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnZ2VtaW5pJywgYnVpbGRSZXZpZXdQcm9tcHQoKSlcbik7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAncGxhbicsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZSB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgcGxhbm5pbmcgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2FsbCcsICdjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChtb2RlLCBpc3N1ZVJlZmVyZW5jZSkgPT5cbiAgICBtb2RlID09PSAnYWxsJ1xuICAgICAgPyBydW5BbGxBZ2VudENvbW1hbmRzKGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpLCB7XG4gICAgICAgICAgYWxsQWdlbnRzTGFiZWw6ICdwbGFubmluZyBhZ2VudHMnLFxuICAgICAgICB9KVxuICAgICAgOiBydW5BZ2VudENvbW1hbmQobW9kZSwgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSkpLFxufSk7XG5cbmFkZEFnZW50Q29tbWFuZCgncGxhbi1jb2RleCcsICdSdW4gQ29kZXggcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlJywge1xuICBhcmd1bWVudE5hbWU6ICc8aXNzdWU+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJyxcbiAgcnVuOiAoaXNzdWVSZWZlcmVuY2UpID0+IHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcbmFkZEFnZW50Q29tbWFuZCgncGxhbi1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZScsIHtcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcsXG4gIHJ1bjogKGlzc3VlUmVmZXJlbmNlKSA9PiBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpKSxcbn0pO1xuYWRkQWdlbnRDb21tYW5kKCdwbGFuLWdlbWluaScsICdSdW4gR2VtaW5pIENMSSBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChpc3N1ZVJlZmVyZW5jZSkgPT4gcnVuQWdlbnRDb21tYW5kKCdnZW1pbmknLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnc2NyZWVuc2hvdCcpXG4gIC5kZXNjcmlwdGlvbignVGFrZSBhIHNjcmVlbnNob3Qgd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQgdmlhIHBsYXl3cmlnaHQtY2xpJylcbiAgLmFyZ3VtZW50KCc8aW5pdGlhbC11cmw+JywgJ0luaXRpYWwgVVJMIHRvIG9wZW4gYmVmb3JlIG5hdmlnYXRpbmcnKVxuICAuYXJndW1lbnQoJzxwYWdlLW5hbWU+JywgJ1BhZ2UgbmFtZSB0byBuYXZpZ2F0ZSB0byBmcm9tIHRoZSBpbml0aWFsIHBhZ2UnKVxuICAuYXJndW1lbnQoJzxkZXNjcmlwdGlvbj4nLCAnRGVzY3JpcHRpb24gb2YgdGhlIHBhcnQgdG8gY2FwdHVyZSBpbiB0aGUgc2NyZWVuc2hvdCcpXG4gIC5hZGRPcHRpb24oXG4gICAgbmV3IE9wdGlvbignLS1hZ2VudCA8YWdlbnQ+JywgJ1VzZSBhIHNjcmVlbnNob3QgYWdlbnQnKS5jaG9pY2VzKFsnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddKS5tYWtlT3B0aW9uTWFuZGF0b3J5KClcbiAgKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oXG4gICAgYXN5bmMgKFxuICAgICAgaW5pdGlhbFVybDogc3RyaW5nLFxuICAgICAgcGFnZU5hbWU6IHN0cmluZyxcbiAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgICBvcHRpb25zOiB7IGFnZW50OiAnY29kZXgnIHwgJ2NsYXVkZScgfCAnZ2VtaW5pJyB9XG4gICAgKSA9PiB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShcbiAgICAgICAgYXdhaXQgcnVuQWdlbnRDb21tYW5kKG9wdGlvbnMuYWdlbnQsIGJ1aWxkU2NyZWVuc2hvdFByb21wdChpbml0aWFsVXJsLCBwYWdlTmFtZSwgZGVzY3JpcHRpb24pKVxuICAgICAgKTtcbiAgICB9XG4gICk7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAnc2ltcGxpZnknLFxuICBkZXNjcmlwdGlvbjogJ1J1biBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgc2ltcGxpZnkgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgcnVuOiAoYWdlbnQpID0+IHJ1bkFnZW50Q29tbWFuZChhZ2VudCwgYnVpbGRTaW1wbGlmeVByb21wdCgpKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWNvZGV4JywgJ1J1biBDb2RleCBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjbGF1ZGUnLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2dlbWluaScsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSlcbik7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ29wZW4tcHInKVxuICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIHB1bGwgcmVxdWVzdCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVhZFN0ZGluVGV4dCgpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IG9wZW5Qcihib2R5IHx8IHVuZGVmaW5lZCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7b3V0cHV0fVxcbmApO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgndXBkYXRlLXByLWJvZHknKVxuICAuZGVzY3JpcHRpb24oJ1VwZGF0ZSB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QgYm9keScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYm9keSA9IGF3YWl0IHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgnRXJyb3I6IFBSIGJvZHkgaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCB1cGRhdGVQckJvZHkoYm9keSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7b3V0cHV0fVxcbmApO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgndXBkYXRlLXByLXRpdGxlJylcbiAgLmRlc2NyaXB0aW9uKCdVcGRhdGUgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0IHRpdGxlJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0aXRsZSA9IGF3YWl0IHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgnRXJyb3I6IFBSIHRpdGxlIGlucHV0IGlzIHJlcXVpcmVkIG9uIHN0ZGluJyk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgdXBkYXRlUHJUaXRsZSh0aXRsZSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7b3V0cHV0fVxcbmApO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnY2hlY2stcHItY2knKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgdGhlIGxhdGVzdCB0ZXN0LXJlbGF0ZWQgQ0kgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja1ByQ2koKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShyZXN1bHQub3V0cHV0KTtcbiAgICBwcm9jZXNzLmV4aXQocmVzdWx0LmV4aXRDb2RlKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2ZldGNoLWlzc3VlJylcbiAgLmRlc2NyaXB0aW9uKCdGZXRjaCBhbiBpc3N1ZSBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBhcyBZQU1MJylcbiAgLmFyZ3VtZW50KCc8aXNzdWU+JywgJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChpc3N1ZVJlZmVyZW5jZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlUmVmZXJlbmNlKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnZmV0Y2gtcHInKVxuICAuZGVzY3JpcHRpb24oJ0ZldGNoIGEgcHVsbCByZXF1ZXN0IGJvZHkgYW5kIHRpbWVsaW5lIG1lc3NhZ2VzIGFzIFlBTUwsIGV4Y2x1ZGluZyBpbmxpbmUgY29tbWVudHMnKVxuICAuYXJndW1lbnQoJ1twcl0nLCAnR2l0SHViIHB1bGwgcmVxdWVzdCBudW1iZXIgb3IgVVJMOyBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBicmFuY2ggcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChwclJlZmVyZW5jZT86IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZldGNoUHJNZXNzYWdlcyhwclJlZmVyZW5jZSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2xpc3QtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBsaXN0UHJSZXZpZXdUaHJlYWRzKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3Jlc29sdmUtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ1JlcGx5IHRvIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMgYW5kIHJlc29sdmUgdGhlbScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVwbGllcyA9IGF3YWl0IHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxuYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHByb2Nlc3MuYXJndik7XG5cbmZ1bmN0aW9uIGFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQ8VE1vZGUgZXh0ZW5kcyBzdHJpbmc+KGNvbmZpZzoge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIG9wdGlvbkRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNob2ljZXM6IFtUTW9kZSwgLi4uVE1vZGVbXV07XG4gIGFyZ3VtZW50TmFtZT86IHN0cmluZztcbiAgYXJndW1lbnREZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcnVuOiAobW9kZTogVE1vZGUsIGFyZ3VtZW50OiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPjtcbn0pOiB2b2lkIHtcbiAgY29uc3QgY29tbWFuZCA9IHByb2dyYW0uY29tbWFuZChjb25maWcubmFtZSkuZGVzY3JpcHRpb24oY29uZmlnLmRlc2NyaXB0aW9uKS5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSk7XG4gIGlmIChjb25maWcuYXJndW1lbnROYW1lKSB7XG4gICAgY29tbWFuZC5hcmd1bWVudChjb25maWcuYXJndW1lbnROYW1lLCBjb25maWcuYXJndW1lbnREZXNjcmlwdGlvbik7XG4gIH1cblxuICBjb21tYW5kXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFnZW50IDxhZ2VudD4nLCBjb25maWcub3B0aW9uRGVzY3JpcHRpb24pLmNob2ljZXMoY29uZmlnLmNob2ljZXMpLm1ha2VPcHRpb25NYW5kYXRvcnkoKSlcbiAgICAuYWN0aW9uKGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgIGNvbnN0IFthcmd1bWVudE9yT3B0aW9ucywgbWF5YmVPcHRpb25zXSA9IGFyZ3MgYXMgW3N0cmluZyB8IHsgYWdlbnQ6IFRNb2RlIH0sIHsgYWdlbnQ6IFRNb2RlIH0gfCB1bmRlZmluZWRdO1xuICAgICAgY29uc3QgYXJndW1lbnQgPSB0eXBlb2YgYXJndW1lbnRPck9wdGlvbnMgPT09ICdzdHJpbmcnID8gYXJndW1lbnRPck9wdGlvbnMgOiAnJztcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSAodHlwZW9mIGFyZ3VtZW50T3JPcHRpb25zID09PSAnc3RyaW5nJyA/IG1heWJlT3B0aW9ucyA6IGFyZ3VtZW50T3JPcHRpb25zKSBhcyB7IGFnZW50OiBUTW9kZSB9O1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnLnJ1bihvcHRpb25zLmFnZW50LCBhcmd1bWVudCkpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRBZ2VudENvbW1hbmQoXG4gIG5hbWU6IHN0cmluZyxcbiAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgY29uZmlnT3JSdW46XG4gICAgfCAoKCkgPT4gUHJvbWlzZTxzdHJpbmc+KVxuICAgIHwge1xuICAgICAgICBhcmd1bWVudE5hbWU6IHN0cmluZztcbiAgICAgICAgYXJndW1lbnREZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICAgICAgcnVuOiAoYXJndW1lbnQ6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xuICAgICAgfVxuKTogdm9pZCB7XG4gIGNvbnN0IGNvbW1hbmQgPSBwcm9ncmFtLmNvbW1hbmQobmFtZSkuZGVzY3JpcHRpb24oZGVzY3JpcHRpb24pLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKTtcblxuICBpZiAodHlwZW9mIGNvbmZpZ09yUnVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29tbWFuZC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnT3JSdW4oKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29tbWFuZC5hcmd1bWVudChjb25maWdPclJ1bi5hcmd1bWVudE5hbWUsIGNvbmZpZ09yUnVuLmFyZ3VtZW50RGVzY3JpcHRpb24pLmFjdGlvbihhc3luYyAoYXJndW1lbnQ6IHN0cmluZykgPT4ge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IGNvbmZpZ09yUnVuLnJ1bihhcmd1bWVudCkpO1xuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJXQUlUX1VQX1RPX09ORV9IT1VSX1dBUk5JTkciLCJydW5Db21tYW5kV2l0aFByb2dyZXNzIiwiX3giLCJfeDIiLCJfcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyIsImFwcGx5IiwidGhpcyIsImFyZ3VtZW50cyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yIiwibSIsIl9jYWxsZWUiLCJjb21tYW5kIiwib3B0aW9ucyIsIl9jb21tYW5kJCIsInByb2MiLCJzdG9wV2FpdFByb2dyZXNzIiwiY29tbWFuZExvZ2dlciIsIl95aWVsZCRQcm9taXNlJGFsbCIsIl95aWVsZCRQcm9taXNlJGFsbDIiLCJzdGRvdXQiLCJzdGRlcnIiLCJvdXRwdXQiLCJ3IiwiX2NvbnRleHQiLCJwIiwibiIsInNwYXduIiwic2xpY2UiLCJzdGRpbyIsImNyZWF0ZVdhaXRQcm9ncmVzcyIsIndhaXRNZXNzYWdlIiwid2FpdEludGVydmFsU2Vjb25kcyIsImNyZWF0ZUNvbW1hbmRMb2dnZXIiLCJsb2dGaWxlUGF0aCIsInYiLCJQcm9taXNlIiwiYWxsIiwic3RyZWFtVG9UZXh0IiwiY2h1bmsiLCJ3cml0ZSIsInJlc29sdmUiLCJyZWplY3QiLCJvbmNlIiwiY29kZSIsIl9zbGljZWRUb0FycmF5IiwiYSIsImNvbmNhdCIsIkVycm9yIiwiam9pbiIsImNsb3NlIiwiZiIsIl94MyIsIl94NCIsIl9zdHJlYW1Ub1RleHQiLCJfY2FsbGVlMiIsInN0cmVhbSIsIm9uQ2h1bmsiLCJjaHVua3MiLCJfaXRlcmF0b3JBYnJ1cHRDb21wbGV0aW9uIiwiX2RpZEl0ZXJhdG9yRXJyb3IiLCJfaXRlcmF0b3JFcnJvciIsIl9pdGVyYXRvciIsIl9zdGVwIiwiY2h1bmtUZXh0IiwiX3QiLCJfY29udGV4dDIiLCJfYXN5bmNJdGVyYXRvciIsIm5leHQiLCJkb25lIiwidmFsdWUiLCJ0b1N0cmluZyIsInB1c2giLCJ3cml0ZVByb2dyZXNzIiwibWVzc2FnZSIsInByb2Nlc3MiLCJ0aW1lciIsInNldEludGVydmFsIiwiY2xlYXJJbnRlcnZhbCIsIl94NSIsIl9jcmVhdGVDb21tYW5kTG9nZ2VyIiwiX2NhbGxlZTYiLCJ3YXJuIiwiX3QyIiwiX2NvbnRleHQ2IiwiX2Nsb3NlIiwiX2NhbGxlZTMiLCJfY29udGV4dDMiLCJlcnJvciIsIlN0cmluZyIsIm1rZGlyIiwiZGlybmFtZSIsInJlY3Vyc2l2ZSIsImNyZWF0ZVdyaXRlU3RyZWFtIiwiZmxhZ3MiLCJvbiIsIndyaXRhYmxlIiwiX2Nsb3NlMiIsIl9jYWxsZWU0IiwiX2NvbnRleHQ0IiwiZW5kIiwiX2Nsb3NlMyIsIl9jYWxsZWU1IiwiX2NvbnRleHQ1IiwiTk9fQ09OQ0VSTl9NRVNTQUdFIiwiQUdFTlRfTkFNRVMiLCJDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYIiwiUmVnRXhwIiwicnVuQWxsQWdlbnRDb21tYW5kcyIsIl9ydW5BbGxBZ2VudENvbW1hbmRzIiwicHJvbXB0IiwicmVzb2x2ZWRQcm9tcHQiLCJvdXRwdXRzIiwiYWxsQWdlbnRzTGFiZWwiLCJ3YWl0TWVzc2FnZUZvciIsIm1hcCIsImFnZW50IiwiX29wdGlvbnMkbWFwT3V0cHV0IiwiX29wdGlvbnMkbWFwT3V0cHV0MiIsIl9vcHRpb25zIiwicnVuQWdlbnRDb21tYW5kIiwidHJpbSIsIm1hcE91dHB1dCIsImNhbGwiLCJkaXNwbGF5QWdlbnROYW1lIiwiZmlsdGVyIiwidW5kZWZpbmVkIiwibGVuZ3RoIiwiX3J1bkFnZW50Q29tbWFuZCIsIl90MyIsImNyZWF0ZUFnZW50Q29tbWFuZCIsImFnZW50TG9nRmlsZVBhdGgiLCJ0YXJnZXQiLCJub3ciLCJEYXRlIiwiX21hcDIiLCJnZXRNb250aCIsImdldERhdGUiLCJnZXRIb3VycyIsImdldE1pbnV0ZXMiLCJnZXRTZWNvbmRzIiwidHdvRGlnaXRzIiwibW9udGgiLCJkYXkiLCJob3VyIiwibWludXRlIiwic2Vjb25kIiwicGFkU3RhcnQiLCJ5YW1sU3RyaW5naWZ5T3B0aW9ucyIsImJsb2NrUXVvdGUiLCJsaW5lV2lkdGgiLCJwcm9ncmVzcyIsInByb2Nlc3NTdGRlcnIiLCJleGl0V2l0aEVycm9yIiwiZXhpdCIsInJlYWRTdGRpblRleHQiLCJfcmVhZFN0ZGluVGV4dCIsInByb2Nlc3NTdGRpbiIsImlzVFRZIiwicmVhZFJlcXVpcmVkU3RkaW5UZXh0IiwiX3JlYWRSZXF1aXJlZFN0ZGluVGV4dCIsImVycm9yTWVzc2FnZSIsImlucHV0IiwicnVuQ29tbWFuZCIsIl9ydW5Db21tYW5kIiwiX29wdGlvbnMkYWxsb3dlZEV4aXRDIiwiYWxsb3dlZEV4aXRDb2RlcyIsIl9sb29wIiwiX3JldCIsImF0dGVtcHQiLCJfY29tbWFuZCQyIiwiZXhpdENvZGUiLCJzdGRpbkRhdGEiLCJzdGRpbiIsImluY2x1ZGVzIiwiaXNUcmFuc2llbnRHaEZhaWx1cmUiLCJHSF9SRVRSWV9NQVhfQVRURU1QVFMiLCJzbGVlcCIsImQiLCJfcmVnZW5lcmF0b3JWYWx1ZXMiLCJnaCIsIl9naCIsImFyZ3MiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJnaEFsbG93RXhpdENvZGVzIiwiX3g2IiwiX3g3IiwiX3g4IiwiX2doQWxsb3dFeGl0Q29kZXMiLCJjdXJyZW50UmVwb1BhcnRzIiwiX2N1cnJlbnRSZXBvUGFydHMiLCJuYW1lV2l0aE93bmVyIiwiX25hbWVXaXRoT3duZXIkc3BsaXQiLCJfbmFtZVdpdGhPd25lciRzcGxpdDIiLCJvd25lciIsIm5hbWUiLCJfY29udGV4dDciLCJzcGxpdCIsImN1cnJlbnRQck51bWJlciIsIl9jdXJyZW50UHJOdW1iZXIiLCJfY2FsbGVlNyIsIl9jb250ZXh0OCIsImdyYXBocWwiLCJfeDkiLCJfeDAiLCJfZ3JhcGhxbCIsIl9jYWxsZWU4IiwicXVlcnkiLCJ2YXJzIiwiX2kiLCJfT2JqZWN0JGVudHJpZXMiLCJfT2JqZWN0JGVudHJpZXMkX2kiLCJrZXkiLCJyZXNwb25zZSIsImVycm9yTWVzc2FnZXMiLCJfY29udGV4dDkiLCJPYmplY3QiLCJlbnRyaWVzIiwiSlNPTiIsInBhcnNlIiwiQXJyYXkiLCJpc0FycmF5IiwiZXJyb3JzIiwiX2Vycm9yJG1lc3NhZ2UiLCJ5YW1sRHVtcCIsImRhdGEiLCJzdHJpbmdpZnlZYW1sIiwiZGVlcENvcHkiLCJzdHJpbmdpZnkiLCJzcGF3blN5bmNTYWZlIiwiX3Jlc3VsdCRzdGF0dXMiLCJfcmVzdWx0JHN0ZG91dCIsIl9yZXN1bHQkc3RkZXJyIiwicmVzdWx0Iiwic3Bhd25TeW5jIiwiZW5jb2RpbmciLCJzdGF0dXMiLCJ0ZXN0IiwiX3gxIiwiX2NhbGxlZTkiLCJkZWNvZGVyIiwiX2NvbnRleHQwIiwiVGV4dERlY29kZXIiLCJkZWNvZGUiLCJVaW50OEFycmF5IiwiVEVTVF9SRUxBVEVEX1BBVFRFUk4iLCJURVNUX0NIRUNLX1dBSVRfTUVTU0FHRSIsIldPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyIsIkZBSUxFRF9MT0dfTElORV9QUkVGSVhfUEFUVEVSTiIsInJ0a0F2YWlsYWJsZSIsImxhdGVzdFByQ2lSZXN1bHRzIiwiX2xhdGVzdFByQ2lSZXN1bHRzIiwicHJOdW1iZXIiLCJfc3VtbWFyeSRwYXNzIiwiX3N1bW1hcnkkZmFpbCIsIl9zdW1tYXJ5JHBlbmRpbmciLCJfc3VtbWFyeSRza2lwcGluZyIsIl9zdW1tYXJ5JGNhbmNlbCIsImNoZWNrcyIsInJhdyIsInN1bW1hcnkiLCJTeW50YXhFcnJvciIsInJlZHVjZSIsImNvdW50cyIsImNoZWNrIiwiX2NoZWNrJGJ1Y2tldDIiLCJfY291bnRzJGJ1Y2tldCIsImJ1Y2tldCIsInRvdGFsIiwicGFzcyIsImZhaWwiLCJwZW5kaW5nIiwic2tpcHBpbmciLCJjYW5jZWwiLCJ3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzIiwiX3dhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MiLCJzbGVlcEZuIiwibGF0ZXN0Q2lSZXN1bHRzRm4iLCJ3cml0ZVByb2dyZXNzRm4iLCJhdHRlbXB0cyIsImNpUmVzdWx0cyIsImNsYXNzaWZpZWRSZXN1bHRzIiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0IiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0MiIsImZhaWxlZFJlc3VsdHMiLCJydW5uaW5nUmVzdWx0cyIsInNsZWVwU2Vjb25kcyIsImNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzIiwiZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkIiwia2V5cyIsImxhdGVzdFJlc3VsdHNCeVdvcmtmbG93IiwiZ3JvdXBlZFJlc3VsdHMiLCJ3b3JrZmxvd0tleSIsIndvcmtmbG93IiwiZnJvbUVudHJpZXMiLCJfcmVmIiwiX2xhdGVzdEF0dGVtcHRDaGVja3MkIiwiX3JlZjIiLCJsYXRlc3RBdHRlbXB0Q2hlY2tzIiwiZ3JvdXBzIiwiZ3JvdXBlZENoZWNrcyIsInJ1bklkIiwid29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsiLCJ3b3JrZmxvd0F0dGVtcHRLZXkiLCJncm91cCIsImdldCIsInNldCIsIk1hcCIsImZyb20iLCJ2YWx1ZXMiLCJsYXRlc3RHcm91cCIsImN1cnJlbnRHcm91cCIsImxhdGVzdEdyb3VwVGltZXN0YW1wIiwibGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3ciLCJmaXJzdENoZWNrIiwibGF0ZXN0Q2hlY2siLCJjdXJyZW50TGF0ZXN0IiwibGF0ZXN0Q2hlY2tUaW1lc3RhbXAiLCJjbGFzc2lmaWNhdGlvbiIsIndvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24iLCJzb21lIiwidGVzdFJlbGF0ZWRDaGVjayIsIl9saW5rJG1hdGNoIiwibGluayIsIm1hdGNoIiwid29ya2Zsb3dSdW4iLCJfd29ya2Zsb3dSdW4iLCJydW5Kc29uIiwiYnVja2V0cyIsIl9jaGVjayRidWNrZXQiLCJfY2hlY2skc3RhcnRlZEF0IiwidGltZXN0YW1wIiwiY29tcGxldGVkQXQiLCJzdGFydGVkQXQiLCJfc2xlZXBTZWNvbmRzIiwic2Vjb25kcyIsImNoZWNrUHJDaSIsIl9jaGVja1ByQ2kiLCJfeWllbGQkd2FpdEZvclJ1bm5pbmciLCJfeWllbGQkd2FpdEZvclJ1bm5pbmcyIiwid2FpdEF0dGVtcHRzIiwid2FpdFRpbWVkT3V0IiwiY2xhc3NpZmllZExhdGVzdCIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDMiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3Q0IiwicGF5bG9hZCIsIndhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrcyIsInRlc3RfcmVsYXRlZF9jaGVja193YWl0X2F0dGVtcHRzIiwidGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfdGltZWRfb3V0IiwiX3JlZjQiLCJfcmVmNiIsImNvbXBhY3RXb3JrZmxvdyIsIl90NCIsIl90NSIsImNvbXBhY3RXb3JrZmxvd1Jlc3VsdCIsIl9vYmplY3RTcHJlYWQiLCJidWlsZEZhaWxlZFdvcmtmbG93RGV0YWlscyIsImZhaWxlZFdvcmtmbG93TG9nIiwiZmFpbGVkX3dvcmtmbG93cyIsInRlc3Rfd29ya2Zsb3dfb3V0cHV0IiwiX3JlZjciLCJfcmVmOCIsInJ1bm5pbmdfdGVzdF9yZWxhdGVkX3dvcmtmbG93cyIsImxhdGVzdCIsIl9jb21wYWN0V29ya2Zsb3dSZXN1bHQiLCJfc3RyaW5nT3JVbmRlZmluZWQiLCJydW4iLCJmYWlsZWRKb2IiLCJmYWlsZWRXb3JrZmxvd1J1bkpvYiIsInN0cmluZ09yVW5kZWZpbmVkIiwiam9iIiwiam9iX3VybCIsInVybCIsImZhaWxlZF9zdGVwIiwiZmFpbGVkV29ya2Zsb3dSdW5TdGVwTmFtZSIsInJ1bl9pZCIsInJ1bl91cmwiLCJicmFuY2giLCJoZWFkQnJhbmNoIiwic2hhIiwiaGVhZFNoYSIsImNvbmNsdXNpb24iLCJfZmFpbGVkV29ya2Zsb3dMb2ciLCJsb2ciLCJmYWlsZWRfbG9nIiwicmVmaW5lRmFpbGVkV29ya2Zsb3dMb2ciLCJzYW5pdGl6ZWRJbnB1dCIsInNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2ciLCJzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMiLCJsaW5lIiwicmVwbGFjZSIsImpvYk5hbWUiLCJfcmVmMyIsIl9ydW4kam9icyRmaW5kIiwiam9icyIsImZpbmQiLCJfam9iJHN0ZXBzJGZpbmQkbmFtZSIsIl9qb2Ikc3RlcHMkZmluZCIsIl9qb2Ikc3RlcHMkZmluZDIiLCJzdGVwcyIsInN0ZXAiLCJjdXJyZW50QmFzZUJyYW5jaCIsIl9jdXJyZW50QmFzZUJyYW5jaCIsIl95aWVsZCRjdXJyZW50UHVsbFJlcSIsImN1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2giLCJjdXJyZW50RGVmYXVsdEJyYW5jaCIsIl9jdXJyZW50RGVmYXVsdEJyYW5jaCIsInJlcXVpcmVOb25FbXB0eSIsIl9jdXJyZW50UHVsbFJlcXVlc3RCYXNlQnJhbmNoIiwiYmFzZUJyYW5jaCIsImlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyIsIm5vcm1hbGl6ZUlzc3VlTnVtYmVyIiwicmVmZXJlbmNlIiwiZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlciIsIm5vcm1hbGl6ZVByTnVtYmVyIiwiZmV0Y2hJc3N1ZU1lc3NhZ2VzIiwiX2ZldGNoSXNzdWVNZXNzYWdlcyIsImlzc3VlTnVtYmVyIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyMiIsImlzc3VlIiwiaXNzdWVNZXNzYWdlcyIsIm51bWJlciIsImZldGNoUHJNZXNzYWdlcyIsIl9mZXRjaFByTWVzc2FnZXMiLCJyZXNvbHZlZFByTnVtYmVyIiwicHVsbFJlcXVlc3QiLCJjdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMiLCJwdWxsX3JlcXVlc3QiLCJmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUiLCJfZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlIiwicHJOdW1iZXJPdXRwdXQiLCJfY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyMyIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjQiLCJwck1lc3NhZ2VzIiwibGFiZWwiLCJyZWZlcmVuY2VUZXh0Iiwia2luZFNlZ21lbnQiLCJfaXNzdWVNZXNzYWdlcyIsIm1lc3NhZ2VzIiwiZmV0Y2hNZXRhZGF0YSIsIm5vdW4iLCJzZWxlY3RNZXRhZGF0YSIsIl9yZXNwb25zZSRkYXRhIiwicmVwb3NpdG9yeSIsInBhZ2luYXRlTWVzc2FnZXMiLCJzZWxlY3RDb25uZWN0aW9uIiwiX3Jlc3BvbnNlJGRhdGEyIiwiY29tbWVudHMiLCJtYXBOb2RlIiwiY29tbWVudE1lc3NhZ2UiLCJfcHJNZXNzYWdlcyIsImlzc3VlQ29tbWVudHMiLCJyZXZpZXdzIiwiX3Jlc3BvbnNlJGRhdGEzIiwicHJJc3N1ZUNvbW1lbnRzIiwicHJSZXZpZXdzIiwic29ydCIsImNvbXBhcmVNZXNzYWdlc0J5Q3JlYXRlZEF0IiwibGVmdCIsInJpZ2h0IiwibGVmdENyZWF0ZWRBdCIsImNyZWF0ZWRBdCIsInJpZ2h0Q3JlYXRlZEF0IiwibG9jYWxlQ29tcGFyZSIsIl94MTAiLCJfcHJJc3N1ZUNvbW1lbnRzIiwiX3Jlc3BvbnNlJGRhdGE0IiwiX3gxMSIsIl94MTIiLCJfeDEzIiwiX3ByUmV2aWV3cyIsIl9yZXNwb25zZSRkYXRhNSIsInJldmlld01lc3NhZ2UiLCJfeDE0IiwiX3BhZ2luYXRlTWVzc2FnZXMiLCJjb25maWciLCJjdXJzb3IiLCJfY29ubmVjdGlvbiRwYWdlSW5mbyQiLCJjb25uZWN0aW9uIiwiTnVtYmVyIiwibm9kZXMiLCJoYXNNZXNzYWdlQm9keSIsInBhZ2VJbmZvIiwiaGFzTmV4dFBhZ2UiLCJlbmRDdXJzb3IiLCJfeDE1IiwiX2ZldGNoTWV0YWRhdGEiLCJfY2FsbGVlMCIsIl9tZXRhZGF0YSRhdXRob3IkbG9naSIsIl9tZXRhZGF0YSRhdXRob3IiLCJfbWV0YWRhdGEkYm9keSIsIm1ldGFkYXRhIiwidGl0bGUiLCJhdXRob3IiLCJsb2dpbiIsImJvZHkiLCJjb21tZW50IiwiX2NvbW1lbnQkYXV0aG9yJGxvZ2luIiwiX2NvbW1lbnQkYXV0aG9yIiwidHlwZSIsInJldmlldyIsIl9yZXZpZXckYXV0aG9yJGxvZ2luIiwiX3JldmlldyRhdXRob3IiLCJfcmV2aWV3JHN0YXRlIiwiX3JldmlldyRzdWJtaXR0ZWRBdCIsIl9yZXZpZXckYm9keSIsInN0YXRlIiwic3VibWl0dGVkQXQiLCJvcGVuUHIiLCJfb3BlblByIiwiaGVhZCIsImJhc2UiLCJjcmVhdGVBcmdzIiwidXBkYXRlUHJCb2R5IiwiX3VwZGF0ZVByQm9keSIsInVwZGF0ZVByIiwidXBkYXRlUHJUaXRsZSIsIl91cGRhdGVQclRpdGxlIiwiX3VwZGF0ZVByIiwiZWRpdEFyZ3MiLCJyZWFkUmVwbGllc0Zyb21TdGRpbiIsIl9yZWFkUmVwbGllc0Zyb21TdGRpbiIsIm5vcm1hbGl6ZWRSZXBsaWVzIiwidGhyZWFkSWQiLCJwYXJzZVJlcGx5SW5wdXQiLCJyZXBsaWVzIiwicGFnaW5hdGVSZXZpZXdUaHJlYWRzIiwiX3BhZ2luYXRlUmV2aWV3VGhyZWFkcyIsIm9uVGhyZWFkIiwiX3lpZWxkJGdyYXBocWwkZGF0YSIsIl9yZXZpZXdUaHJlYWRzJHBhZ2VJbiIsInJldmlld1RocmVhZHMiLCJ0aHJlYWQiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInMiLCJlIiwidW5yZXNvbHZlZFJldmlld1RocmVhZElkcyIsIl91bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzIiwiaWRzIiwiaXNSZXNvbHZlZCIsImlkIiwidW5yZXNvbHZlZFJldmlld1RocmVhZHMiLCJfdW5yZXNvbHZlZFJldmlld1RocmVhZHMiLCJ0aHJlYWRzIiwiX3BhZ2VJbmZvJGVuZEN1cnNvciIsIl95aWVsZCRncmFwaHFsJGRhdGEyIiwiX3BhZ2VJbmZvJGVuZEN1cnNvcjIiLCJjb21tZW50Q29ubmVjdGlvbiIsIl90NiIsIl90NyIsIl90OCIsIm5vcm1hbGl6ZUNvbW1lbnRBdXRob3IiLCJub2RlIiwiaXNPdXRkYXRlZCIsInBhdGgiLCJvcmlnaW5hbExpbmUiLCJzdGFydExpbmUiLCJvcmlnaW5hbFN0YXJ0TGluZSIsImxpc3RQclJldmlld1RocmVhZHMiLCJfbGlzdFByUmV2aWV3VGhyZWFkcyIsIl90OSIsIl90MCIsInVucmVzb2x2ZWRfdGhyZWFkcyIsInJlc29sdmVQclJldmlld1RocmVhZHMiLCJfcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyIsInVucmVzb2x2ZWRJZHMiLCJyZXNvbHZlZFRocmVhZElkcyIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJfc3RlcDIkdmFsdWUiLCJpbmRleCIsIl9zdGVwMiR2YWx1ZSQiLCJfdDEiLCJfdDEwIiwiX3QxMSIsIlNldCIsImhhcyIsInJlc29sdmVSZXZpZXdUaHJlYWQiLCJyZXNvbHZlZF90aHJlYWRfaWRzIiwicGFyc2VkIiwiX3R5cGVvZiIsImV2ZXJ5IiwicmVwbHkiLCJpc1JlcGx5SW5wdXQiLCJidWlsZFBsYW5Qcm9tcHQiLCJfYnVpbGRQbGFuUHJvbXB0IiwiaXNzdWVZYW1sIiwiYnVpbGRNZXJnZUJhc2VDb21tYW5kIiwic2hlbGxRdW90ZSIsInJlcGxhY2VBbGwiLCJidWlsZFJldmlld1Byb21wdCIsIl9idWlsZFJldmlld1Byb21wdCIsIm1lcmdlQmFzZUNvbW1hbmQiLCJwckNvbnRleHQiLCJidWlsZFByQ29udGV4dEluc3RydWN0aW9ucyIsImJ1aWxkU2NyZWVuc2hvdFByb21wdCIsImluaXRpYWxVcmwiLCJwYWdlTmFtZSIsInNjcmVlbnNob3REZXNjcmlwdGlvbiIsInNhbml0aXplZERlc2NyaXB0aW9uIiwiYnVpbGRTaW1wbGlmeVByb21wdCIsIl9idWlsZFNpbXBsaWZ5UHJvbXB0IiwicHJvZ3JhbSIsIkNvbW1hbmQiLCJhZGRQYXJhbWV0ZXJpemVkQWdlbnRDb21tYW5kIiwiZGVzY3JpcHRpb24iLCJhbGxvd0V4Y2Vzc0FyZ3VtZW50cyIsImFyZ3VtZW50TmFtZSIsImFyZ3VtZW50IiwiYXJndW1lbnREZXNjcmlwdGlvbiIsImFkZE9wdGlvbiIsIk9wdGlvbiIsIm9wdGlvbkRlc2NyaXB0aW9uIiwiY2hvaWNlcyIsIm1ha2VPcHRpb25NYW5kYXRvcnkiLCJhY3Rpb24iLCJfbGVuIiwiX2tleSIsIl9yZWYxMCIsImFyZ3VtZW50T3JPcHRpb25zIiwibWF5YmVPcHRpb25zIiwiX2FyZ3MwIiwiYWRkQWdlbnRDb21tYW5kIiwiY29uZmlnT3JSdW4iLCJfY2FsbGVlMTAiLCJfY29udGV4dDEwIiwiX2NhbGxlZTEiLCJfY29udGV4dDEiLCJzaG93SGVscEFmdGVyRXJyb3IiLCJtb2RlIiwiY29udGFpbnNOb0NvbmNlcm5TZW50ZW5jZSIsImlzc3VlUmVmZXJlbmNlIiwicHJSZWZlcmVuY2UiLCJwYXJzZUFzeW5jIiwiYXJndiJdLCJtYXBwaW5ncyI6Ijs7O216SEFhQSxJQUNhQSxFQUE4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
|
|
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 j(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]())):(j(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,j(n,i,"GeneratorFunction")),n.prototype=Object.create(f),n}return c.prototype=s,j(f,"constructor",s),j(s,"constructor",c),c.displayName="GeneratorFunction",j(s,i,"GeneratorFunction"),j(f),j(f,i,"Generator"),j(f,r,function(){return this}),j(f,"toString",function(){return"[object Generator]"}),(x=function(){return{w:a,m:p}})()}function j(n,e,t,r){var i=Object.defineProperty;try{i({},"",{})}catch(n){i=0}j=function(n,e,t,r){function a(e,t){j(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))},j(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 I(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)||R(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 A(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)||R(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 O(n){"@babel/helpers - typeof";return O="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},O(n)}function R(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}}function $(n,e){return C.apply(this,arguments)}function C(){return C=g(x().m(function n(e,r){var i,a,o,u,c,s,l,f,p;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),{stdio:["ignore","pipe","pipe"]}),o=E(r.waitMessage,r.waitIntervalSeconds),n.n=1,N(r.logFilePath);case 1:return u=n.v,n.p=2,n.n=3,Promise.all([P(a.stdout,function(n){return u.write(n)}),P(a.stderr,function(n){return u.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(c=n.v,s=I(c,3),l=s[0],f=s[1],0!==s[2]){n.n=4;break}return n.a(2,l);case 4:throw p="".concat(l).concat(f),new Error(p||"Command failed: ".concat(e.join(" ")));case 5:return n.p=5,n.n=6,u.close();case 6:return o(),n.f(5);case 7:return n.a(2)}},n,null,[[2,,5,7]])})),C.apply(this,arguments)}function P(n,e){return q.apply(this,arguments)}function q(){return(q=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.p=n.n){case 0:if(e){n.n=1;break}return n.a(2,"");case 1:r=[],i=!1,a=!1,n.p=2,u=h(e);case 3:return n.n=4,u.next();case 4:if(!(i=!(c=n.v).done)){n.n=6;break}s=c.value,l="string"==typeof s?s:s.toString("utf8"),r.push(l),null==t||t(l);case 5:i=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,f=n.v,a=!0,o=f;case 8:if(n.p=8,n.p=9,!i||null==u.return){n.n=10;break}return n.n=10,u.return();case 10:if(n.p=10,!a){n.n=11;break}throw o;case 11:return n.f(10);case 12:return n.f(8);case 13:return n.a(2,r.join(""))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function E(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("It takes 1 hour and printing . per 36 secs",": ")),function(){clearInterval(i),t("\n")}}function N(n){return L.apply(this,arguments)}function L(){return L=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]])})),L.apply(this,arguments)}var T="There is no concern.",_=["codex","claude","gemini"],D=new RegExp("\\b".concat("there is no concern","\\b"),"i");function G(n,e){return U.apply(this,arguments)}function U(){return(U=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=E(J(t.allAgentsLabel)),n.p=2,n.n=3,Promise.all(_.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,F(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(W(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"):T);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 F(n,e,t){return M.apply(this,arguments)}function M(){return(M=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=$,a=H,o=e,n.n=1,t;case 1:return n.a(2,i(a(o,n.v),{logFilePath:B(e),waitMessage:void 0===r.waitMessage?J(W(e)):r.waitMessage}))}},n)}))).apply(this,arguments)}function H(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 W(n){switch(n){case"codex":return"Codex";case"claude":return"Claude Code";case"gemini":return"Gemini CLI"}}function J(n){return"Waiting for ".concat(n," to finish.")}function B(n){return"logs/".concat(n,"-").concat((e=new Date,t=I([e.getMonth()+1,e.getDate(),e.getHours(),e.getMinutes(),e.getSeconds()].map(Q),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 Q(n){return n.toString().padStart(2,"0")}var Y={blockQuote:"literal",lineWidth:0};function z(n){c.write("".concat(n,"\n"))}function K(n,e){void 0===e&&(e=1),c.write("".concat(n,"\n")),process.exit(e)}function Z(){return V.apply(this,arguments)}function V(){return(V=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,wn(u);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function X(n){return nn.apply(this,arguments)}function nn(){return(nn=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,Z();case 1:if(!((t=n.v).length>0)){n.n=2;break}return n.a(2,t);case 2:K(e,2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function en(n,e){return tn.apply(this,arguments)}function tn(){return tn=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;return x().w(function(n){for(;;)switch(n.n){case 0:return o=t(null!=(i=e[0])?i:"",e.slice(1),{stdio:["pipe","pipe","pipe"]}),void 0!==r.stdinData?o.stdin.end(r.stdinData):o.stdin.end(),n.n=1,Promise.all([wn(o.stdout),wn(o.stderr),new Promise(function(n,e){o.once("error",e),o.once("close",function(e){return n(null!=e?e:1)})})]);case 1:if(u=n.v,l=I(u,3),f=l[0],p=l[1],d=l[2],h="".concat(f).concat(p),0!==d&&!a.includes(d)){n.n=2;break}return n.a(2,{v:h});case 2:if(!(gn(e,d,h)&&c<3)){n.n=4;break}return z("Transient GitHub CLI failure; retrying... (attempt ".concat(c," of ").concat(2,")")),n.n=3,s(1e3*c);case 3:return n.a(2,0);case 4:K(h||"Command failed: ".concat(e.join(" ")));case 5:return n.a(2)}},n)}),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:K("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),tn.apply(this,arguments)}function rn(n,e){return an.apply(this,arguments)}function an(){return(an=g(x().m(function n(e,t){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,en(["gh"].concat(A(e)),{stdinData:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function on(n,e,t){return un.apply(this,arguments)}function un(){return(un=g(x().m(function n(e,t,r){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,en(["gh"].concat(A(e)),{stdinData:r,allowedExitCodes:t});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function cn(){return sn.apply(this,arguments)}function sn(){return(sn=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,rn(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return e=n.v.trim(),t=e.split("/",2),r=I(t,2),i=r[0],a=r[1],i&&a||K("Error: could not determine current repository"),n.a(2,[i,a])}},n)}))).apply(this,arguments)}function ln(){return fn.apply(this,arguments)}function fn(){return(fn=g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,rn(["pr","view","--json","number","--jq",".number"]);case 1:return n.a(2,n.v.trim())}},n)}))).apply(this,arguments)}function pn(n,e){return dn.apply(this,arguments)}function dn(){return(dn=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=I(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,rn(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"),K("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function hn(n){return f(n,Y)}function mn(n){return JSON.parse(JSON.stringify(n))}function vn(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 gn(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)}function wn(n){return yn.apply(this,arguments)}function yn(){return(yn=g(x().m(function n(e){var t,r,i,a,o,u,c,s,l;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:t=[],r=new TextDecoder,i=!1,a=!1,n.p=2,u=h(e);case 3:return n.n=4,u.next();case 4:if(!(i=!(c=n.v).done)){n.n=6;break}s=c.value,t.push("string"==typeof s?s:r.decode(new Uint8Array(s),{stream:!0}));case 5:i=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,l=n.v,a=!0,o=l;case 8:if(n.p=8,n.p=9,!i||null==u.return){n.n=10;break}return n.n=10,u.return();case 10:if(n.p=10,!a){n.n=11;break}throw o;case 11:return n.f(10);case 12:return n.f(8);case 13:return t.push(r.decode()),n.a(2,t.join(""))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}var bn=/\btest\b/i,kn=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","jobs","name","number","startedAt","status","updatedAt","url","workflowName"],xn=/^.*?\tUNKNOWN STEP\t\d{4}-\d{2}-\d{2}T[^Z]+Z\s*/,jn=0===vn(["rtk","--version"]).exitCode;function Sn(n){return In.apply(this,arguments)}function In(){return(In=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,on(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 An(n,e,t,r){return On.apply(this,arguments)}function On(){return(On=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=Tn),void 0===r&&(r=Sn),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=Rn(o),l=$n(s),f=I(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=E("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 Rn(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=I(n,2),r=t[0],i=function(n){var e=n.reduce(function(n,e){var t=function(n){var e=Cn(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||Un(e)>Un(n)?e:n},[])}(t[1]),a=i[0];a||K("Error: no checks found for workflow ".concat(r));var o=null!=(e=i.reduce(function(n,e){return n?Nn(e)>Nn(n)?e:n:e},void 0))?e:a;return[r,{classification:En(i),check:o,checks:i}]}))}function $n(n){for(var e={},t={},r=0,i=Object.entries(n);r<i.length;r++){var a=I(i[r],2),o=a[0],u=a[1];"failed"!==u.classification?"running"===u.classification&&u.checks.some(function(n){return Ln(n)})&&(t[o]=u):e[o]=u}return[e,t]}function Cn(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 Pn(n){return qn.apply(this,arguments)}function qn(){return(qn=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,on(["run","view",e,"--json",kn.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 En(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 Nn(n){var e,t=n.completedAt;return t&&"0001-01-01T00:00:00Z"!==t?t:null!=(e=n.startedAt)?e:""}function Ln(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&bn.test(n)})}function Tn(n){return _n.apply(this,arguments)}function _n(){return(_n=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 Dn(){return Gn.apply(this,arguments)}function Gn(){return(Gn=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,ln();case 1:return e=n.v,z("Fetching latest CI results..."),n.n=2,An(e);case 2:if(t=n.v,r=I(t,3),i=r[0],a=r[1],o=r[2],u=Rn(i),c=$n(u),s=I(c,2),l=s[0],f=s[1],p={summary:mn(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=I(e,2),r=t[0],i=t[1],n.n=1,Fn(r,i);case 1:return a=n.v,o=k,u=k({},a),c=Jn,n.n=2,Hn(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:hn(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=I(n,2);return Fn(e[0],e[1])}));case 5:return p.running_test_related_workflows=n.v,n.a(2,{output:hn(p),exitCode:1});case 6:return n.a(2,{output:"All CI workflows passed.\n",exitCode:0})}},n)}))).apply(this,arguments)}function Un(n){return n.reduce(function(n,e){var t=Nn(e);return t>n?t:n},"")}function Fn(n,e){return Mn.apply(this,arguments)}function Mn(){return(Mn=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=Cn(t.check),n.n=1,Pn(i);case 1:return a=n.v,o=zn(a,Yn(t.check.name)),n.a(2,{classification:t.classification,workflow:e,job:Yn(t.check.name),job_url:Yn(null==o?void 0:o.url),failed_step:Kn(o),run_id:i,run_url:null!=(r=Yn(null==a?void 0:a.url))?r:Yn(t.check.link),branch:Yn(null==a?void 0:a.headBranch),sha:Yn(null==a?void 0:a.headSha),conclusion:Yn(null==a?void 0:a.conclusion)})}},n)}))).apply(this,arguments)}function Hn(n){return Wn.apply(this,arguments)}function Wn(){return(Wn=g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:if(t=Cn(e)){n.n=1;break}return n.a(2,"Failed latest result has no GitHub Actions run link.");case 1:return n.n=2,on(["run","view",t,"--log-failed"],[1]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Jn(n){return{failed_log:Bn(n)}}function Bn(n){var e=Qn(l(n));if(!jn)return e;var t=vn(["rtk","log"],e);return 0===t.exitCode&&t.output.trim().length>0?Qn(t.output):e}function Qn(n){return n.split("\n").map(function(n){return n.replace(xn,"")}).join("\n").trim()}function Yn(n){return"string"==typeof n&&n.length>0?n:void 0}function zn(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 Kn(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 Zn(){return Vn.apply(this,arguments)}function Vn(){return(Vn=g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ee();case 1:if(null==(e=n.v)){n.n=2;break}t=e,n.n=4;break;case 2:return n.n=3,Xn();case 3:t=n.v;case 4:return n.a(2,t)}},n)}))).apply(this,arguments)}function Xn(){return ne.apply(this,arguments)}function ne(){return(ne=g(x().m(function n(){var e;return x().w(function(n){for(;;)switch(n.n){case 0:return e=ie,n.n=1,$(["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 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.p=n.n){case 0:return n.p=0,n.n=1,$(["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,!re(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 re(n){return/no pull requests? found for branch/i.test(String(n))}function ie(n,e){if(n.length>0)return n;throw new Error(e)}function ae(n){return me(n,"issue")}function oe(n){return me(n,"pull request")}function ue(n){return ce.apply(this,arguments)}function ce(){return(ce=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,cn();case 1:return t=n.v,r=I(t,2),i=r[0],a=r[1],n.n=2,ve(i,a,ae(e));case 2:return o=n.v,z("Fetched issue #".concat(o.number," messages.")),n.a(2,hn({issue:o}))}},n)}))).apply(this,arguments)}function se(n){return le.apply(this,arguments)}function le(){return(le=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,ln();case 1:i=n.v,n.n=3;break;case 2:i=oe(e);case 3:return t=i,n.n=4,de(t);case 4:return r=n.v,z("Fetched pull request #".concat(r.number," messages.")),n.a(2,hn({pull_request:r}))}},n)}))).apply(this,arguments)}function fe(){return pe.apply(this,arguments)}function pe(){return(pe=g(x().m(function n(){var e,t,r;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,on(["pr","view","--json","number","--jq",".number"],[1]);case 1:if(e=n.v,t=e.trim(),!re(e)&&/^\d+$/.test(t)){n.n=2;break}return n.a(2,void 0);case 2:return n.n=3,de(t);case 3:return r=n.v,n.a(2,hn({pull_request:r}))}},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,a;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,cn();case 1:return t=n.v,r=I(t,2),i=r[0],a=r[1],n.n=2,we(i,a,e);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function me(n,e){var t=String(n).trim();if(0===t.length&&K("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];K("Error: expected a GitHub ".concat(e,' number or URL, received "').concat(t,'"'),2)}function ve(n,e,t){return ge.apply(this,arguments)}function ge(){return(ge=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,Oe({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,Ie({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:$e});case 2:return a=n.v,n.a(2,k(k({},i),{},{messages:a}))}},n)}))).apply(this,arguments)}function we(n,e,t){return ye.apply(this,arguments)}function ye(){return(ye=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,Oe({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([ke(e,t,r),je(e,t,r)]);case 2:return a=n.v,o=I(a,2),u=o[0],c=o[1],n.a(2,k(k({},i),{},{messages:[].concat(A(u),A(c)).sort(be)}))}},n)}))).apply(this,arguments)}function be(n,e){var t="string"==typeof n.createdAt?n.createdAt:"",r="string"==typeof e.createdAt?e.createdAt:"";return t.localeCompare(r)}function ke(n,e,t){return xe.apply(this,arguments)}function xe(){return(xe=g(x().m(function n(e,t,r){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ie({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:$e});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function je(n,e,t){return Se.apply(this,arguments)}function Se(){return(Se=g(x().m(function n(e,t,r){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Ie({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:Ce});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Ie(n){return Ae.apply(this,arguments)}function Ae(){return(Ae=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,pn(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,A(a.nodes.map(e.mapNode).filter(Pe))),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 Oe(n){return Re.apply(this,arguments)}function Re(){return(Re=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,pn(e.query,{owner:e.owner,name:e.name,number:Number(e.number)});case 1:return(a=o.selectMetadata.call(o,n.v))||K("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 $e(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 Ce(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 Pe(n){return"string"==typeof n.body&&n.body.length>0}function qe(n){return Ee.apply(this,arguments)}function Ee(){return(Ee=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,en(["git","branch","--show-current"]);case 1:return t=n.v.trim(),n.n=2,rn(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return r=n.v.trim(),t||K("Error: could not determine current branch"),r||K("Error: could not determine default branch"),t===r&&K("Error: current branch is the default branch (".concat(r,")")),i=["pr","create","--base",r,"--head",t,"--fill"],e&&e.length>0&&i.push("--body-file","-"),z("Creating pull request..."),n.n=3,rn(i,e);case 3:return a=hn,o=JSON,n.n=4,rn(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,a(o.parse.call(o,n.v)))}},n)}))).apply(this,arguments)}function Ne(n){return Le.apply(this,arguments)}function Le(){return(Le=g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln();case 1:return t=n.v,z("Updating pull request #".concat(t," body...")),n.n=2,De(t,["--body-file","-"],e);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function Te(n){return _e.apply(this,arguments)}function _e(){return(_e=g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ln();case 1:return t=n.v,z("Updating pull request #".concat(t," title...")),n.n=2,De(t,["--title",e]);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function De(n,e,t){return Ge.apply(this,arguments)}function Ge(){return(Ge=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,rn(["pr","edit",e].concat(A(t)),r);case 1:return i=hn,a=JSON,n.n=2,rn(["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 Ue(){return Fe.apply(this,arguments)}function Fe(){return(Fe=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,X("Error: JSON input is required on stdin");case 1:for(e=n.v,t=Xe(e),r={},i=0,a=Object.entries(t.replies);i<a.length;i++)o=I(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 Me(n,e,t,r,i){return He.apply(this,arguments)}function He(){return(He=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,pn(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)||K("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 We(n,e,t){return Je.apply(this,arguments)}function Je(){return(Je=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,Me("\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 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,Me("\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(Ve),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,pn("\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)||K("Could not find comments in GraphQL response for thread ".concat(e.id,".")),r.push.apply(r,A(s.nodes.map(Ve))),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 Ye(){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,cn();case 1:return e=n.v,t=I(e,2),r=t[0],i=t[1],n.n=2,ln();case 2:return a=n.v,z("Fetching unresolved review threads..."),o=hn,n.n=3,Be(r,i,a);case 3:return u=n.v,n.a(2,o({unresolved_threads:u}))}},n)}))).apply(this,arguments)}function Ke(n){return Ze.apply(this,arguments)}function Ze(){return(Ze=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,j;return x().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,cn();case 1:return t=n.v,r=I(t,2),i=r[0],a=r[1],n.n=2,ln();case 2:return o=n.v,b=Set,n.n=3,We(i,a,o);case 3:k=n.v,u=new b(k),z("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=I(f.value,2),h=d[0],m=I(d[1],2),v=m[0],g=m[1],z("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,pn("\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):z("Warning: failed to resolve thread ".concat(v,"."));case 8:n.n=5;break;case 9:n.n=11;break;case 10:n.p=10,j=n.v,l.e(j);case 11:return n.p=11,l.f(),n.f(11);case 12:return z("Done."),n.a(2,hn({resolved_thread_ids:c}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function Ve(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 Xe(n){try{var e=JSON.parse(n);return function(n){if("object"!==O(n)||null===n||Array.isArray(n))return!1;var e=n.replies;if("object"!==O(e)||null===e||Array.isArray(e))return!1;return Object.values(e).every(function(n){return null==n||"string"==typeof n})}(e)||K("".concat("Error: Invalid input format on stdin",": expected an object with a string-valued `replies` map"),2),e}catch(n){throw n instanceof SyntaxError&&K("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}function nt(n){return et.apply(this,arguments)}function et(){return(et=g(x().m(function n(e){var t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,ue(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 - Don't forget to clean up any temporary files.\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 tt(n){return"git merge-base ".concat(rt("origin/".concat(n))," HEAD 2>/dev/null || git merge-base ").concat(rt(n)," HEAD")}function rt(n){return"'".concat(n.replaceAll("'","'\"'\"'"),"'")}function it(){return at.apply(this,arguments)}function at(){return(at=g(x().m(function n(){var e,t,r;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Zn();case 1:return e=n.v,t=tt(e),n.n=2,fe();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. 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(T,"`\n\n").concat(ot(r),"\n").trim())}},n)}))).apply(this,arguments)}function ot(n){return n?"Current pull request context:\n~~~~yaml\n".concat(n.trim(),"\n~~~~\n").trim():""}function ut(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 ct(){return st.apply(this,arguments)}function st(){return(st=g(x().m(function n(){var e,t;return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,Zn();case 1:return e=n.v,t=tt(e),n.a(2,'\nSimplify the current 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").trim())}},n)}))).apply(this,arguments)}function lt(){return ft.apply(this,arguments)}function ft(){return(ft=g(x().m(function n(){return x().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,$(["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 pt=new n;function dt(n){var t=pt.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=I(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 ht(n,e,t){var r=pt.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)})))}pt.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),pt.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,lt();case 1:process.stdout.write("Done\n");case 2:return n.a(2)}},n)}))),dt({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?G(it(),{allAgentsLabel:"review agents",mapOutput:function(n,e){if(!function(n){return D.test(n)}(e))return"## ".concat(W(n),"\n\n").concat(e)}}):F(n,it())}}),ht("review-codex","Run Codex review against the current branch",function(){return F("codex",it())}),ht("review-claude","Run Claude Code review against the current branch",function(){return F("claude",it())}),ht("review-gemini","Run Gemini CLI review against the current branch",function(){return F("gemini",it())}),dt({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?G(nt(ae(e)),{allAgentsLabel:"planning agents"}):F(n,nt(ae(e)))}}),ht("plan-codex","Run Codex planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return F("codex",nt(ae(n)))}}),ht("plan-claude","Run Claude Code planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return F("claude",nt(ae(n)))}}),ht("plan-gemini","Run Gemini CLI planning against the specified issue",{argumentName:"<issue>",argumentDescription:"GitHub issue number or URL",run:function(n){return F("gemini",nt(ae(n)))}}),pt.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,F(i.agent,ut(e,t,r));case 1:a.write.call(a,n.v);case 2:return n.a(2)}},n)}))),dt({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 F(n,ct())}}),ht("simplify-codex","Run Codex PR simplification against the current branch",function(){return F("codex",ct())}),ht("simplify-claude","Run Claude Code PR simplification against the current branch",function(){return F("claude",ct())}),ht("simplify-gemini","Run Gemini CLI PR simplification against the current branch",function(){return F("gemini",ct())}),pt.command("open-pr").description("Create a pull request for the current branch").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,Z();case 1:return e=n.v,n.n=2,qe(e||void 0);case 2:t=n.v,process.stdout.write("".concat(t,"\n"));case 3:return n.a(2)}},n)}))),pt.command("update-pr-body").description("Update the current pull request body").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,X("Error: PR body input is required on stdin");case 1:return e=n.v,n.n=2,Ne(e);case 2:t=n.v,process.stdout.write("".concat(t,"\n"));case 3:return n.a(2)}},n)}))),pt.command("update-pr-title").description("Update the current pull request title").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,X("Error: PR title input is required on stdin");case 1:return e=n.v,n.n=2,Te(e);case 2:t=n.v,process.stdout.write("".concat(t,"\n"));case 3:return n.a(2)}},n)}))),pt.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,Dn();case 1:e=n.v,process.stdout.write(e.output),process.exit(e.exitCode);case 2:return n.a(2)}},n)}))),pt.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,ue(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),pt.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,se(e);case 1:t=n.v,process.stdout.write(t);case 2:return n.a(2)}},n)}))),pt.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,Ye();case 1:e=n.v,process.stdout.write(e);case 2:return n.a(2)}},n)}))),pt.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,Ue();case 1:return e=n.v,n.n=2,Ke(e);case 2:t=n.v,process.stdout.write(t);case 3:return n.a(2)}},n)}))),await pt.parseAsync(process.argv);
|
|
5
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlcyI6WyIuLi9zcmMvcHJvY2Vzcy9ydW5Db21tYW5kLnRzIiwiLi4vc3JjL3Jldmlldy9ub0NvbmNlcm4udHMiLCIuLi9zcmMvYWdlbnQvYWdlbnRDb21tYW5kcy50cyIsIi4uL3NyYy95YW1sLnRzIiwiLi4vc3JjL3ByL3NoYXJlZC50cyIsIi4uL3NyYy9wci9jaS50cyIsIi4uL3NyYy9yZXBvL2RlZmF1bHRCcmFuY2gudHMiLCIuLi9zcmMvcHIvbWVzc2FnZXMudHMiLCIuLi9zcmMvcHIvcHVsbFJlcXVlc3QudHMiLCIuLi9zcmMvcHIvcmV2aWV3VGhyZWFkcy50cyIsIi4uL3NyYy9wcm9tcHRzL3BsYW5Qcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9iYXNlQnJhbmNoRGlmZkNvbW1hbmQudHMiLCIuLi9zcmMvcHJvbXB0cy9yZXZpZXdQcm9tcHQudHMiLCIuLi9zcmMvcHJvbXB0cy9zY3JlZW5zaG90UHJvbXB0LnRzIiwiLi4vc3JjL3Byb21wdHMvc2ltcGxpZnlQcm9tcHQudHMiLCIuLi9zcmMvc2tpbGxzL2luc3RhbGxTa2lsbHMudHMiLCIuLi9zcmMvY2xpLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IGNyZWF0ZVdyaXRlU3RyZWFtIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBta2RpciB9IGZyb20gJ25vZGU6ZnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgZGlybmFtZSB9IGZyb20gJ25vZGU6cGF0aCc7XG5cbnR5cGUgUnVuQ29tbWFuZE9wdGlvbnMgPSB7XG4gIGxvZ0ZpbGVQYXRoPzogc3RyaW5nO1xuICB3YWl0TWVzc2FnZT86IHN0cmluZyB8IGZhbHNlO1xuICB3YWl0SW50ZXJ2YWxTZWNvbmRzPzogbnVtYmVyO1xufTtcblxudHlwZSBQcm9ncmVzc1dyaXRlciA9IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQ7XG5cbi8vIFRoZSBvbmUtaG91ciBidWRnZXQga2VlcHMgYWdlbnRzIHdhaXRpbmcgZm9yIGxvbmctcnVubmluZyBjb21tYW5kcyB3aXRob3V0IHJlcXVpcmluZyB0aGUgcHJvY2VzcyB0byB1c2UgdGhlIGZ1bGwgaG91ci5cbmV4cG9ydCBjb25zdCBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUyA9IDM2O1xuY29uc3QgRE9UU19QRVJfUFJPR1JFU1NfUEVSQ0VOVF9TVEVQID0gNTtcbmNvbnN0IE1BWF9QUk9HUkVTU19QRVJDRU5UID0gMTAwO1xuLy8gS2VlcCB0aGUgQ0xJIHRleHQgZXhhY3RseSBhcyByZXF1ZXN0ZWQgc28gZG93bnN0cmVhbSBwcm9tcHRzIGNhbiBtYXRjaCBpdCBjb25zaXN0ZW50bHkuXG5leHBvcnQgY29uc3QgV0FJVF9VUF9UT19PTkVfSE9VUl9XQVJOSU5HID0gJ0l0IHRha2VzIDEgaG91ciBhbmQgcHJpbnRpbmcgLiBwZXIgMzYgc2Vjcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Db21tYW5kV2l0aFByb2dyZXNzKGNvbW1hbmQ6IHN0cmluZ1tdLCBvcHRpb25zOiBSdW5Db21tYW5kT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICBzdGRpbzogWydpZ25vcmUnLCAncGlwZScsICdwaXBlJ10sXG4gIH0pO1xuICBjb25zdCBzdG9wV2FpdFByb2dyZXNzID0gY3JlYXRlV2FpdFByb2dyZXNzKG9wdGlvbnMud2FpdE1lc3NhZ2UsIG9wdGlvbnMud2FpdEludGVydmFsU2Vjb25kcyk7XG4gIGNvbnN0IGNvbW1hbmRMb2dnZXIgPSBhd2FpdCBjcmVhdGVDb21tYW5kTG9nZ2VyKG9wdGlvbnMubG9nRmlsZVBhdGgpO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQsIChjaHVuaykgPT4gY29tbWFuZExvZ2dlci53cml0ZShjaHVuaykpLFxuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyLCAoY2h1bmspID0+IGNvbW1hbmRMb2dnZXIud3JpdGUoY2h1bmspKSxcbiAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgfSksXG4gICAgXSk7XG5cbiAgICBpZiAoZXhpdENvZGUgPT09IDApIHtcbiAgICAgIHJldHVybiBzdGRvdXQ7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0ID0gYCR7c3Rkb3V0fSR7c3RkZXJyfWA7XG4gICAgdGhyb3cgbmV3IEVycm9yKG91dHB1dCB8fCBgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgY29tbWFuZExvZ2dlci5jbG9zZSgpO1xuICAgIHN0b3BXYWl0UHJvZ3Jlc3MoKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBzdHJlYW1Ub1RleHQoXG4gIHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtIHwgbnVsbCB8IHVuZGVmaW5lZCxcbiAgb25DaHVuaz86IChjaHVuazogc3RyaW5nKSA9PiB2b2lkXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGNvbnN0IGNodW5rczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBzdHJlYW0pIHtcbiAgICBjb25zdCBjaHVua1RleHQgPSB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnID8gY2h1bmsgOiBjaHVuay50b1N0cmluZygndXRmOCcpO1xuICAgIGNodW5rcy5wdXNoKGNodW5rVGV4dCk7XG4gICAgb25DaHVuaz8uKGNodW5rVGV4dCk7XG4gIH1cbiAgcmV0dXJuIGNodW5rcy5qb2luKCcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdhaXRQcm9ncmVzcyhcbiAgd2FpdE1lc3NhZ2U6IHN0cmluZyB8IGZhbHNlIHwgdW5kZWZpbmVkLFxuICB3YWl0SW50ZXJ2YWxTZWNvbmRzID0gREVGQVVMVF9XQUlUX0lOVEVSVkFMX1NFQ09ORFMsXG4gIHdyaXRlUHJvZ3Jlc3M6IFByb2dyZXNzV3JpdGVyID0gKG1lc3NhZ2UpID0+IHByb2Nlc3Muc3RkZXJyLndyaXRlKG1lc3NhZ2UpXG4pOiAoKSA9PiB2b2lkIHtcbiAgaWYgKCF3YWl0TWVzc2FnZSkge1xuICAgIHJldHVybiAoKSA9PiB7fTtcbiAgfVxuXG4gIGxldCBkb3RDb3VudCA9IDA7XG4gIGNvbnN0IHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIHdyaXRlUHJvZ3Jlc3MoJy4nKTtcbiAgICBkb3RDb3VudCArPSAxO1xuICAgIGlmIChkb3RDb3VudCA8PSBNQVhfUFJPR1JFU1NfUEVSQ0VOVCAmJiBkb3RDb3VudCAlIERPVFNfUEVSX1BST0dSRVNTX1BFUkNFTlRfU1RFUCA9PT0gMCkge1xuICAgICAgLy8gVGhpcyB0cmFja3MgZWxhcHNlZCB3YWl0IGJ1ZGdldCwgbm90IHRoZSBjaGlsZCBwcm9jZXNzIGNvbXBsZXRpb24gcGVyY2VudGFnZS5cbiAgICAgIHdyaXRlUHJvZ3Jlc3MoYCAke2RvdENvdW50fSUgZG9uZSBgKTtcbiAgICB9XG4gIH0sIHdhaXRJbnRlcnZhbFNlY29uZHMgKiAxMDAwKTtcblxuICB3cml0ZVByb2dyZXNzKGAke3dhaXRNZXNzYWdlfSAke1dBSVRfVVBfVE9fT05FX0hPVVJfV0FSTklOR306IGApO1xuXG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xlYXJJbnRlcnZhbCh0aW1lcik7XG4gICAgd3JpdGVQcm9ncmVzcygnXFxuJyk7XG4gIH07XG59XG5cbnR5cGUgQ29tbWFuZExvZ2dlciA9IHtcbiAgd3JpdGU6IChjaHVuazogc3RyaW5nKSA9PiB2b2lkO1xuICBjbG9zZTogKCkgPT4gUHJvbWlzZTx2b2lkPjtcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUNvbW1hbmRMb2dnZXIobG9nRmlsZVBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8Q29tbWFuZExvZ2dlcj4ge1xuICBpZiAoIWxvZ0ZpbGVQYXRoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoKSA9PiB7fSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PiB7fSxcbiAgICB9O1xuICB9XG5cbiAgY29uc3Qgd2FybiA9IChlcnJvcjogdW5rbm93bikgPT4ge1xuICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGBXYXJuaW5nOiBGYWlsZWQgdG8gd3JpdGUgY29tbWFuZCBsb2cgdG8gJHtsb2dGaWxlUGF0aH06ICR7U3RyaW5nKGVycm9yKX1cXG5gKTtcbiAgfTtcblxuICB0cnkge1xuICAgIGF3YWl0IG1rZGlyKGRpcm5hbWUobG9nRmlsZVBhdGgpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICBjb25zdCBzdHJlYW0gPSBjcmVhdGVXcml0ZVN0cmVhbShsb2dGaWxlUGF0aCwgeyBmbGFnczogJ3cnIH0pO1xuXG4gICAgc3RyZWFtLm9uKCdlcnJvcicsIHdhcm4pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoY2h1bmspID0+IHtcbiAgICAgICAgaWYgKHN0cmVhbS53cml0YWJsZSkge1xuICAgICAgICAgIHN0cmVhbS53cml0ZShjaHVuayk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBjbG9zZTogYXN5bmMgKCkgPT5cbiAgICAgICAgYXdhaXQgbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUpID0+IHtcbiAgICAgICAgICBzdHJlYW0uZW5kKCgpID0+IHJlc29sdmUoKSk7XG4gICAgICAgIH0pLFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgd2FybihlcnJvcik7XG4gICAgcmV0dXJuIHtcbiAgICAgIHdyaXRlOiAoKSA9PiB7fSxcbiAgICAgIGNsb3NlOiBhc3luYyAoKSA9PiB7fSxcbiAgICB9O1xuICB9XG59XG4iLCJleHBvcnQgY29uc3QgTk9fQ09OQ0VSTl9QSFJBU0UgPSAndGhlcmUgaXMgbm8gY29uY2Vybic7XG5leHBvcnQgY29uc3QgTk9fQ09OQ0VSTl9NRVNTQUdFID0gJ1RoZXJlIGlzIG5vIGNvbmNlcm4uJztcbiIsImltcG9ydCB7IGNyZWF0ZVdhaXRQcm9ncmVzcywgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5pbXBvcnQgeyBOT19DT05DRVJOX01FU1NBR0UsIE5PX0NPTkNFUk5fUEhSQVNFIH0gZnJvbSAnLi4vcmV2aWV3L25vQ29uY2Vybi5qcyc7XG5cbmV4cG9ydCBjb25zdCBBR0VOVF9OQU1FUyA9IFsnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddIGFzIGNvbnN0O1xuY29uc3QgQ09OVEFJTlNfTk9fQ09OQ0VSTl9TRU5URU5DRV9SRUdFWCA9IG5ldyBSZWdFeHAoYFxcXFxiJHtOT19DT05DRVJOX1BIUkFTRX1cXFxcYmAsICdpJyk7XG5leHBvcnQgdHlwZSBBZ2VudE5hbWUgPSAodHlwZW9mIEFHRU5UX05BTUVTKVtudW1iZXJdO1xuXG50eXBlIEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7XG4gIHdhaXRNZXNzYWdlPzogc3RyaW5nIHwgZmFsc2U7XG59O1xuXG50eXBlIEFsbEFnZW50Q29tbWFuZE9wdGlvbnMgPSB7XG4gIGFsbEFnZW50c0xhYmVsOiBzdHJpbmc7XG4gIG1hcE91dHB1dD86IChhZ2VudDogQWdlbnROYW1lLCBvdXRwdXQ6IHN0cmluZykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkO1xufTtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkFsbEFnZW50Q29tbWFuZHMoXG4gIHByb21wdDogc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+LFxuICBvcHRpb25zOiBBbGxBZ2VudENvbW1hbmRPcHRpb25zID0geyBhbGxBZ2VudHNMYWJlbDogJ2FnZW50cycgfVxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgcmVzb2x2ZWRQcm9tcHQgPSBhd2FpdCBwcm9tcHQ7XG4gIGNvbnN0IHN0b3BXYWl0UHJvZ3Jlc3MgPSBjcmVhdGVXYWl0UHJvZ3Jlc3Mod2FpdE1lc3NhZ2VGb3Iob3B0aW9ucy5hbGxBZ2VudHNMYWJlbCkpO1xuXG4gIHRyeSB7XG4gICAgY29uc3Qgb3V0cHV0cyA9IChcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgICBBR0VOVF9OQU1FUy5tYXAoYXN5bmMgKGFnZW50KSA9PiB7XG4gICAgICAgICAgY29uc3Qgb3V0cHV0ID0gKFxuICAgICAgICAgICAgYXdhaXQgcnVuQWdlbnRDb21tYW5kKGFnZW50LCByZXNvbHZlZFByb21wdCwge1xuICAgICAgICAgICAgICB3YWl0TWVzc2FnZTogZmFsc2UsXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICkudHJpbSgpO1xuICAgICAgICAgIHJldHVybiBvcHRpb25zLm1hcE91dHB1dD8uKGFnZW50LCBvdXRwdXQpID8/IGAjIyAke2Rpc3BsYXlBZ2VudE5hbWUoYWdlbnQpfVxcblxcbiR7b3V0cHV0fWA7XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKS5maWx0ZXIoKG91dHB1dCk6IG91dHB1dCBpcyBzdHJpbmcgPT4gb3V0cHV0ICE9PSB1bmRlZmluZWQpO1xuICAgIHJldHVybiBvdXRwdXRzLmxlbmd0aCA+IDAgPyBvdXRwdXRzLmpvaW4oJ1xcblxcbicpIDogTk9fQ09OQ0VSTl9NRVNTQUdFO1xuICB9IGZpbmFsbHkge1xuICAgIHN0b3BXYWl0UHJvZ3Jlc3MoKTtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQWdlbnRDb21tYW5kKFxuICBhZ2VudDogQWdlbnROYW1lLFxuICBwcm9tcHQ6IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPixcbiAgb3B0aW9uczogQWdlbnRDb21tYW5kT3B0aW9ucyA9IHt9XG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyhjcmVhdGVBZ2VudENvbW1hbmQoYWdlbnQsIGF3YWl0IHByb21wdCksIHtcbiAgICBsb2dGaWxlUGF0aDogYWdlbnRMb2dGaWxlUGF0aChhZ2VudCksXG4gICAgd2FpdE1lc3NhZ2U6IG9wdGlvbnMud2FpdE1lc3NhZ2UgPT09IHVuZGVmaW5lZCA/IHdhaXRNZXNzYWdlRm9yKGRpc3BsYXlBZ2VudE5hbWUoYWdlbnQpKSA6IG9wdGlvbnMud2FpdE1lc3NhZ2UsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVBZ2VudENvbW1hbmQoYWdlbnQ6IEFnZW50TmFtZSwgcHJvbXB0OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHN3aXRjaCAoYWdlbnQpIHtcbiAgICBjYXNlICdjb2RleCc6XG4gICAgICByZXR1cm4gWyducHgnLCAnLS15ZXMnLCAnQG9wZW5haS9jb2RleEBsYXRlc3QnLCAnZXhlYycsICctLWRhbmdlcm91c2x5LWJ5cGFzcy1hcHByb3ZhbHMtYW5kLXNhbmRib3gnLCBwcm9tcHRdO1xuICAgIGNhc2UgJ2NsYXVkZSc6XG4gICAgICByZXR1cm4gWydjbGF1ZGUnLCAnLS1kYW5nZXJvdXNseS1za2lwLXBlcm1pc3Npb25zJywgJy1wJywgcHJvbXB0XTtcbiAgICBjYXNlICdnZW1pbmknOlxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgJ25weCcsXG4gICAgICAgICctLXllcycsXG4gICAgICAgICdAZ29vZ2xlL2dlbWluaS1jbGlAcHJldmlldycsXG4gICAgICAgICctLWFwcHJvdmFsLW1vZGUnLFxuICAgICAgICAneW9sbycsXG4gICAgICAgICctLW1vZGVsJyxcbiAgICAgICAgJ2dlbWluaS0zLjEtcHJvLXByZXZpZXcnLFxuICAgICAgICAnLXAnLFxuICAgICAgICBwcm9tcHQsXG4gICAgICBdO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkaXNwbGF5QWdlbnROYW1lKGFnZW50OiBBZ2VudE5hbWUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKGFnZW50KSB7XG4gICAgY2FzZSAnY29kZXgnOlxuICAgICAgcmV0dXJuICdDb2RleCc7XG4gICAgY2FzZSAnY2xhdWRlJzpcbiAgICAgIHJldHVybiAnQ2xhdWRlIENvZGUnO1xuICAgIGNhc2UgJ2dlbWluaSc6XG4gICAgICByZXR1cm4gJ0dlbWluaSBDTEknO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb250YWluc05vQ29uY2VyblNlbnRlbmNlKG91dHB1dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBDT05UQUlOU19OT19DT05DRVJOX1NFTlRFTkNFX1JFR0VYLnRlc3Qob3V0cHV0KTtcbn1cblxuZnVuY3Rpb24gd2FpdE1lc3NhZ2VGb3IodGFyZ2V0OiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gYFdhaXRpbmcgZm9yICR7dGFyZ2V0fSB0byBmaW5pc2guYDtcbn1cblxuZnVuY3Rpb24gYWdlbnRMb2dGaWxlUGF0aChhZ2VudDogQWdlbnROYW1lKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBsb2dzLyR7YWdlbnR9LSR7dGltZXN0YW1wRm9yTG9nRmlsZSgpfS5sb2dgO1xufVxuXG5mdW5jdGlvbiB0aW1lc3RhbXBGb3JMb2dGaWxlKCk6IHN0cmluZyB7XG4gIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gIGNvbnN0IFttb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZF0gPSBbXG4gICAgbm93LmdldE1vbnRoKCkgKyAxLFxuICAgIG5vdy5nZXREYXRlKCksXG4gICAgbm93LmdldEhvdXJzKCksXG4gICAgbm93LmdldE1pbnV0ZXMoKSxcbiAgICBub3cuZ2V0U2Vjb25kcygpLFxuICBdLm1hcCh0d29EaWdpdHMpO1xuICByZXR1cm4gYCR7bW9udGh9JHtkYXl9LSR7aG91cn0ke21pbnV0ZX0ke3NlY29uZH1gO1xufVxuXG5mdW5jdGlvbiB0d29EaWdpdHModmFsdWU6IG51bWJlcik6IHN0cmluZyB7XG4gIHJldHVybiB2YWx1ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJyk7XG59XG4iLCIvKipcbiAqIGBibG9ja1F1b3RlOiAnbGl0ZXJhbCdgOiBVc2VzIGEgcGlwZSAoYHByb3A6IHxgKSB0byByZXByZXNlbnQgbXVsdGlsaW5lIHN0cmluZ3MuXG4gKiBgbGluZVdpZHRoOiAwYDogRGlzYWJsZXMgbGluZSB3cmFwcGluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IHlhbWxTdHJpbmdpZnlPcHRpb25zID0geyBibG9ja1F1b3RlOiAnbGl0ZXJhbCcsIGxpbmVXaWR0aDogMCB9IGFzIGNvbnN0O1xuIiwiaW1wb3J0IHsgc3Bhd24sIHNwYXduU3luYyB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyBzdGRlcnIgYXMgcHJvY2Vzc1N0ZGVyciwgc3RkaW4gYXMgcHJvY2Vzc1N0ZGluIH0gZnJvbSAnbm9kZTpwcm9jZXNzJztcbmltcG9ydCB7IHNldFRpbWVvdXQgYXMgc2xlZXAgfSBmcm9tICdub2RlOnRpbWVycy9wcm9taXNlcyc7XG5pbXBvcnQgeyBzdHJpbmdpZnkgYXMgc3RyaW5naWZ5WWFtbCB9IGZyb20gJ3lhbWwnO1xuaW1wb3J0IHsgeWFtbFN0cmluZ2lmeU9wdGlvbnMgfSBmcm9tICcuLi95YW1sLmpzJztcblxuZXhwb3J0IHR5cGUgSnNvbk9iamVjdCA9IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCB0eXBlIE1ldGFkYXRhTm9kZSA9IHtcbiAgbnVtYmVyOiBudW1iZXI7XG4gIHRpdGxlOiBzdHJpbmc7XG4gIHVybDogc3RyaW5nO1xuICBib2R5Pzogc3RyaW5nIHwgbnVsbDtcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBQYWdlSW5mbyA9IHtcbiAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG59O1xuXG5leHBvcnQgdHlwZSBNZXNzYWdlQ29ubmVjdGlvbjxUTm9kZT4gPSB7XG4gIG5vZGVzOiBUTm9kZVtdO1xuICBwYWdlSW5mbzogUGFnZUluZm87XG59O1xuXG50eXBlIFJ1bkNvbW1hbmRPcHRpb25zID0ge1xuICBzdGRpbkRhdGE/OiBzdHJpbmc7XG4gIGFsbG93ZWRFeGl0Q29kZXM/OiBudW1iZXJbXTtcbn07XG5cbmNvbnN0IEdIX1JFVFJZX01BWF9BVFRFTVBUUyA9IDM7XG5jb25zdCBHSF9SRVRSWV9CQVNFX0RFTEFZX01TID0gMTAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb2dyZXNzKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICBwcm9jZXNzU3RkZXJyLndyaXRlKGAke21lc3NhZ2V9XFxuYCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGl0V2l0aEVycm9yKG1lc3NhZ2U6IHN0cmluZywgY29kZSA9IDEpOiBuZXZlciB7XG4gIHByb2Nlc3NTdGRlcnIud3JpdGUoYCR7bWVzc2FnZX1cXG5gKTtcbiAgcHJvY2Vzcy5leGl0KGNvZGUpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFN0ZGluVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAocHJvY2Vzc1N0ZGluLmlzVFRZKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBhd2FpdCBzdHJlYW1Ub1RleHQocHJvY2Vzc1N0ZGluKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXF1aXJlZFN0ZGluVGV4dChlcnJvck1lc3NhZ2UgPSAnRXJyb3I6IGlucHV0IGlzIHJlcXVpcmVkIG9uIHN0ZGluJyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGlucHV0ID0gYXdhaXQgcmVhZFN0ZGluVGV4dCgpO1xuICBpZiAoaW5wdXQubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICBleGl0V2l0aEVycm9yKGVycm9yTWVzc2FnZSwgMik7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBydW5Db21tYW5kKGNvbW1hbmQ6IHN0cmluZ1tdLCBvcHRpb25zOiBSdW5Db21tYW5kT3B0aW9ucyA9IHt9KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYWxsb3dlZEV4aXRDb2RlcyA9IG9wdGlvbnMuYWxsb3dlZEV4aXRDb2RlcyA/PyBbXTtcblxuICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBHSF9SRVRSWV9NQVhfQVRURU1QVFM7IGF0dGVtcHQgKz0gMSkge1xuICAgIGNvbnN0IHByb2MgPSBzcGF3bihjb21tYW5kWzBdID8/ICcnLCBjb21tYW5kLnNsaWNlKDEpLCB7XG4gICAgICBzdGRpbzogWydwaXBlJywgJ3BpcGUnLCAncGlwZSddLFxuICAgIH0pO1xuICAgIGlmIChvcHRpb25zLnN0ZGluRGF0YSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBwcm9jLnN0ZGluLmVuZChvcHRpb25zLnN0ZGluRGF0YSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHByb2Muc3RkaW4uZW5kKCk7XG4gICAgfVxuXG4gICAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRvdXQpLFxuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3RkZXJyKSxcbiAgICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBwcm9jLm9uY2UoJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgICAgcHJvYy5vbmNlKCdjbG9zZScsIChjb2RlKSA9PiByZXNvbHZlKGNvZGUgPz8gMSkpO1xuICAgICAgfSksXG4gICAgXSk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYCR7c3Rkb3V0fSR7c3RkZXJyfWA7XG5cbiAgICBpZiAoZXhpdENvZGUgPT09IDAgfHwgYWxsb3dlZEV4aXRDb2Rlcy5pbmNsdWRlcyhleGl0Q29kZSkpIHtcbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgfVxuXG4gICAgaWYgKGlzVHJhbnNpZW50R2hGYWlsdXJlKGNvbW1hbmQsIGV4aXRDb2RlLCBvdXRwdXQpICYmIGF0dGVtcHQgPCBHSF9SRVRSWV9NQVhfQVRURU1QVFMpIHtcbiAgICAgIHByb2dyZXNzKGBUcmFuc2llbnQgR2l0SHViIENMSSBmYWlsdXJlOyByZXRyeWluZy4uLiAoYXR0ZW1wdCAke2F0dGVtcHR9IG9mICR7R0hfUkVUUllfTUFYX0FUVEVNUFRTIC0gMX0pYCk7XG4gICAgICBhd2FpdCBzbGVlcChHSF9SRVRSWV9CQVNFX0RFTEFZX01TICogYXR0ZW1wdCk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBleGl0V2l0aEVycm9yKG91dHB1dCB8fCBgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG4gIH1cbiAgZXhpdFdpdGhFcnJvcihgQ29tbWFuZCBmYWlsZWQgYWZ0ZXIgJHtHSF9SRVRSWV9NQVhfQVRURU1QVFN9IGF0dGVtcHRzOiAke2NvbW1hbmQuam9pbignICcpfWApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2goYXJnczogc3RyaW5nW10sIHN0ZGluRGF0YT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBydW5Db21tYW5kKFsnZ2gnLCAuLi5hcmdzXSwgeyBzdGRpbkRhdGEgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaEFsbG93RXhpdENvZGVzKFxuICBhcmdzOiBzdHJpbmdbXSxcbiAgYWxsb3dlZEV4aXRDb2RlczogbnVtYmVyW10sXG4gIHN0ZGluRGF0YT86IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHJ1bkNvbW1hbmQoWydnaCcsIC4uLmFyZ3NdLCB7IHN0ZGluRGF0YSwgYWxsb3dlZEV4aXRDb2RlcyB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRSZXBvUGFydHMoKTogUHJvbWlzZTxbc3RyaW5nLCBzdHJpbmddPiB7XG4gIGNvbnN0IG5hbWVXaXRoT3duZXIgPSAoYXdhaXQgZ2goWydyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ25hbWVXaXRoT3duZXInLCAnLS1qcScsICcubmFtZVdpdGhPd25lciddKSkudHJpbSgpO1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gbmFtZVdpdGhPd25lci5zcGxpdCgnLycsIDIpO1xuICBpZiAoIW93bmVyIHx8ICFuYW1lKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCByZXBvc2l0b3J5Jyk7XG4gIH1cbiAgcmV0dXJuIFtvd25lciwgbmFtZV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50UHJOdW1iZXIoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIChhd2FpdCBnaChbJ3ByJywgJ3ZpZXcnLCAnLS1qc29uJywgJ251bWJlcicsICctLWpxJywgJy5udW1iZXInXSkpLnRyaW0oKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdyYXBocWw8VCBleHRlbmRzIEpzb25PYmplY3Q+KFxuICBxdWVyeTogc3RyaW5nLFxuICB2YXJzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCB1bmRlZmluZWQ+ID0ge31cbik6IFByb21pc2U8VD4ge1xuICBjb25zdCBhcmdzID0gWydhcGknLCAnZ3JhcGhxbCcsICctRicsICdxdWVyeT1ALSddO1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyh2YXJzKSkge1xuICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSAnJykge1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGFyZ3MucHVzaCgnLUYnLCBgJHtrZXl9PSR7dmFsdWV9YCk7XG4gIH1cblxuICBjb25zdCByZXNwb25zZSA9IEpTT04ucGFyc2UoYXdhaXQgZ2goYXJncywgcXVlcnkpKSBhcyBKc29uT2JqZWN0ICYgeyBlcnJvcnM/OiBBcnJheTx7IG1lc3NhZ2U/OiBzdHJpbmcgfT4gfTtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3BvbnNlLmVycm9ycykpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UgYXMgVDtcbiAgfVxuXG4gIGNvbnN0IGVycm9yTWVzc2FnZXMgPSByZXNwb25zZS5lcnJvcnMubWFwKChlcnJvcikgPT4gZXJyb3IubWVzc2FnZSA/PyAnVW5rbm93biBHcmFwaFFMIGVycm9yJykuam9pbignXFxuJyk7XG4gIGV4aXRXaXRoRXJyb3IoYEdyYXBoUUwgQVBJIGVycm9yOlxcbiR7ZXJyb3JNZXNzYWdlc31gKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHlhbWxEdW1wKGRhdGE6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5naWZ5WWFtbChkYXRhLCB5YW1sU3RyaW5naWZ5T3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ29weTxUPihkYXRhOiBUKTogVCB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKSBhcyBUO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tbWFuZEF2YWlsYWJsZShjb21tYW5kOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgcmV0dXJuIHNwYXduU3luY1NhZmUoW2NvbW1hbmQsICctLXZlcnNpb24nXSkuZXhpdENvZGUgPT09IDA7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzcGF3blN5bmNTYWZlKGNvbW1hbmQ6IHN0cmluZ1tdLCBzdGRpbkRhdGE/OiBzdHJpbmcpOiB7IGV4aXRDb2RlOiBudW1iZXI7IG91dHB1dDogc3RyaW5nIH0ge1xuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmMoY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIGVuY29kaW5nOiAndXRmOCcsXG4gICAgaW5wdXQ6IHN0ZGluRGF0YSxcbiAgfSk7XG5cbiAgcmV0dXJuIHtcbiAgICBleGl0Q29kZTogcmVzdWx0LnN0YXR1cyA/PyAocmVzdWx0LmVycm9yID8gMSA6IDApLFxuICAgIG91dHB1dDogYCR7cmVzdWx0LnN0ZG91dCA/PyAnJ30ke3Jlc3VsdC5zdGRlcnIgPz8gJyd9YCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNUcmFuc2llbnRHaEZhaWx1cmUoY29tbWFuZDogc3RyaW5nW10sIGV4aXRDb2RlOiBudW1iZXIsIG91dHB1dDogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGlmIChjb21tYW5kWzBdICE9PSAnZ2gnIHx8IGV4aXRDb2RlID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIC8oSFRUUCA1MFswMjM0XVxcYnxXZSBoYWQgaXNzdWVzIHByb2R1Y2luZyB0aGUgcmVzcG9uc2UgdG8geW91ciByZXF1ZXN0KS9pLnRlc3Qob3V0cHV0KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RyZWFtVG9UZXh0KHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtIHwgbnVsbCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgY2h1bmtzLnB1c2godHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyA/IGNodW5rIDogZGVjb2Rlci5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoY2h1bmspLCB7IHN0cmVhbTogdHJ1ZSB9KSk7XG4gIH1cbiAgY2h1bmtzLnB1c2goZGVjb2Rlci5kZWNvZGUoKSk7XG4gIHJldHVybiBjaHVua3Muam9pbignJyk7XG59XG4iLCJpbXBvcnQgeyBzdGRlcnIgYXMgcHJvY2Vzc1N0ZGVyciB9IGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBzZXRUaW1lb3V0IGFzIHNsZWVwIH0gZnJvbSAnbm9kZTp0aW1lcnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgc3RyaXBWVENvbnRyb2xDaGFyYWN0ZXJzIH0gZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCB7IGNyZWF0ZVdhaXRQcm9ncmVzcywgREVGQVVMVF9XQUlUX0lOVEVSVkFMX1NFQ09ORFMgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuaW1wb3J0IHtcbiAgY29tbWFuZEF2YWlsYWJsZSxcbiAgY3VycmVudFByTnVtYmVyLFxuICBkZWVwQ29weSxcbiAgZXhpdFdpdGhFcnJvcixcbiAgZ2hBbGxvd0V4aXRDb2RlcyxcbiAgcHJvZ3Jlc3MsXG4gIHNwYXduU3luY1NhZmUsXG4gIHlhbWxEdW1wLFxufSBmcm9tICcuL3NoYXJlZC5qcyc7XG5cbmV4cG9ydCBjb25zdCBURVNUX1JFTEFURURfUEFUVEVSTiA9IC9cXGJ0ZXN0XFxiL2k7XG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMgPSBERUZBVUxUX1dBSVRfSU5URVJWQUxfU0VDT05EUztcbi8vIE9uZSBodW5kcmVkIDM2LXNlY29uZCBjaGVja3MgcHJlc2VydmVzIHRoZSBtYXhpbXVtIG9uZS1ob3VyIENJIHdhaXQgYnVkZ2V0LlxuZXhwb3J0IGNvbnN0IFRFU1RfQ0hFQ0tfV0FJVF9NQVhfQVRURU1QVFMgPSAxMDA7XG5jb25zdCBURVNUX0NIRUNLX1dBSVRfTUVTU0FHRSA9ICdXYWl0aW5nIGZvciB0ZXN0LXJlbGF0ZWQgd29ya2Zsb3dzIHRvIGZpbmlzaC4nO1xuZXhwb3J0IGNvbnN0IFpFUk9fVElNRVNUQU1QID0gJzAwMDEtMDEtMDFUMDA6MDA6MDBaJztcbmV4cG9ydCBjb25zdCBXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMgPSBbXG4gICdhdHRlbXB0JyxcbiAgJ2NvbmNsdXNpb24nLFxuICAnY3JlYXRlZEF0JyxcbiAgJ2RhdGFiYXNlSWQnLFxuICAnZGlzcGxheVRpdGxlJyxcbiAgJ2V2ZW50JyxcbiAgJ2hlYWRCcmFuY2gnLFxuICAnaGVhZFNoYScsXG4gICdqb2JzJyxcbiAgJ25hbWUnLFxuICAnbnVtYmVyJyxcbiAgJ3N0YXJ0ZWRBdCcsXG4gICdzdGF0dXMnLFxuICAndXBkYXRlZEF0JyxcbiAgJ3VybCcsXG4gICd3b3JrZmxvd05hbWUnLFxuXSBhcyBjb25zdDtcblxuZXhwb3J0IHR5cGUgQ2hlY2sgPSB7XG4gIGJ1Y2tldD86IHN0cmluZztcbiAgY29tcGxldGVkQXQ/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBldmVudD86IHN0cmluZztcbiAgbGluaz86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgc3RhcnRlZEF0Pzogc3RyaW5nO1xuICBzdGF0ZT86IHN0cmluZztcbiAgd29ya2Zsb3c/OiBzdHJpbmc7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59O1xuXG5leHBvcnQgdHlwZSBDaVJlc3VsdHMgPSB7XG4gIHN1bW1hcnk6IHtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIHBhc3M6IG51bWJlcjtcbiAgICBmYWlsOiBudW1iZXI7XG4gICAgcGVuZGluZzogbnVtYmVyO1xuICAgIHNraXBwaW5nOiBudW1iZXI7XG4gICAgY2FuY2VsOiBudW1iZXI7XG4gIH07XG4gIGNoZWNrczogQ2hlY2tbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFdvcmtmbG93Q2xhc3NpZmljYXRpb24gPSAnZmFpbGVkJyB8ICdydW5uaW5nJyB8ICdzdWNjZXNzZnVsJztcblxuZXhwb3J0IHR5cGUgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0ID0ge1xuICBjbGFzc2lmaWNhdGlvbjogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbjtcbiAgY2hlY2s6IENoZWNrO1xuICBjaGVja3M6IENoZWNrW107XG59O1xuXG50eXBlIENvbXBhY3RXb3JrZmxvd1J1biA9IHtcbiAgYnJhbmNoPzogc3RyaW5nO1xuICBjb25jbHVzaW9uPzogc3RyaW5nO1xuICBmYWlsZWRfc3RlcD86IHN0cmluZztcbiAgam9iPzogc3RyaW5nO1xuICBqb2JfdXJsPzogc3RyaW5nO1xuICBydW5faWQ/OiBzdHJpbmc7XG4gIHJ1bl91cmw/OiBzdHJpbmc7XG4gIHNoYT86IHN0cmluZztcbiAgd29ya2Zsb3c/OiBzdHJpbmc7XG59O1xuXG50eXBlIFdvcmtmbG93UnVuU3RlcCA9IHtcbiAgY29uY2x1c2lvbj86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgbnVtYmVyPzogbnVtYmVyO1xuICBzdGF0dXM/OiBzdHJpbmc7XG59O1xuXG50eXBlIFdvcmtmbG93UnVuSm9iID0ge1xuICBjb25jbHVzaW9uPzogc3RyaW5nO1xuICBkYXRhYmFzZUlkPzogbnVtYmVyO1xuICBuYW1lPzogc3RyaW5nO1xuICBzdGF0dXM/OiBzdHJpbmc7XG4gIHN0ZXBzPzogV29ya2Zsb3dSdW5TdGVwW107XG4gIHVybD86IHN0cmluZztcbn07XG5cbnR5cGUgV29ya2Zsb3dSdW5EZXRhaWxzID0ge1xuICBjb25jbHVzaW9uPzogc3RyaW5nO1xuICBoZWFkQnJhbmNoPzogc3RyaW5nO1xuICBoZWFkU2hhPzogc3RyaW5nO1xuICBqb2JzPzogV29ya2Zsb3dSdW5Kb2JbXTtcbiAgdXJsPzogc3RyaW5nO1xufTtcblxuY29uc3QgRkFJTEVEX0xPR19MSU5FX1BSRUZJWF9QQVRURVJOID0gL14uKj9cXHRVTktOT1dOIFNURVBcXHRcXGR7NH0tXFxkezJ9LVxcZHsyfVRbXlpdK1pcXHMqLztcbmNvbnN0IHJ0a0F2YWlsYWJsZSA9IGNvbW1hbmRBdmFpbGFibGUoJ3J0aycpO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGF0ZXN0UHJDaVJlc3VsdHMocHJOdW1iZXI/OiBzdHJpbmcpOiBQcm9taXNlPENpUmVzdWx0cz4ge1xuICBjb25zdCBhcmdzID0gWydwcicsICdjaGVja3MnXTtcbiAgaWYgKHByTnVtYmVyKSB7XG4gICAgYXJncy5wdXNoKHByTnVtYmVyKTtcbiAgfVxuICBhcmdzLnB1c2goJy0tanNvbicsICdidWNrZXQsY29tcGxldGVkQXQsZGVzY3JpcHRpb24sZXZlbnQsbGluayxuYW1lLHN0YXJ0ZWRBdCxzdGF0ZSx3b3JrZmxvdycpO1xuXG4gIGxldCBjaGVja3M6IENoZWNrW10gPSBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKGFyZ3MsIFs4XSk7XG4gICAgY2hlY2tzID0gcmF3LnRyaW0oKS5sZW5ndGggPiAwID8gKEpTT04ucGFyc2UocmF3KSBhcyBDaGVja1tdKSA6IFtdO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBjaGVja3MgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3VtbWFyeSA9IGNoZWNrcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj4oKGNvdW50cywgY2hlY2spID0+IHtcbiAgICBjb25zdCBidWNrZXQgPSBjaGVjay5idWNrZXQgPz8gJyc7XG4gICAgY291bnRzW2J1Y2tldF0gPSAoY291bnRzW2J1Y2tldF0gPz8gMCkgKyAxO1xuICAgIHJldHVybiBjb3VudHM7XG4gIH0sIHt9KTtcblxuICByZXR1cm4ge1xuICAgIHN1bW1hcnk6IHtcbiAgICAgIHRvdGFsOiBjaGVja3MubGVuZ3RoLFxuICAgICAgcGFzczogc3VtbWFyeS5wYXNzID8/IDAsXG4gICAgICBmYWlsOiBzdW1tYXJ5LmZhaWwgPz8gMCxcbiAgICAgIHBlbmRpbmc6IHN1bW1hcnkucGVuZGluZyA/PyAwLFxuICAgICAgc2tpcHBpbmc6IHN1bW1hcnkuc2tpcHBpbmcgPz8gMCxcbiAgICAgIGNhbmNlbDogc3VtbWFyeS5jYW5jZWwgPz8gMCxcbiAgICB9LFxuICAgIGNoZWNrcyxcbiAgfTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MoXG4gIHByTnVtYmVyOiBzdHJpbmcsXG4gIHNsZWVwRm46IChzZWNvbmRzOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD4gPSBzbGVlcFNlY29uZHMsXG4gIGxhdGVzdENpUmVzdWx0c0ZuOiAocHJOdW1iZXI/OiBzdHJpbmcpID0+IENpUmVzdWx0cyB8IFByb21pc2U8Q2lSZXN1bHRzPiA9IGxhdGVzdFByQ2lSZXN1bHRzLFxuICB3cml0ZVByb2dyZXNzRm46IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQgPSAobWVzc2FnZSkgPT4gcHJvY2Vzc1N0ZGVyci53cml0ZShtZXNzYWdlKVxuKTogUHJvbWlzZTxbQ2lSZXN1bHRzLCBudW1iZXIsIGJvb2xlYW5dPiB7XG4gIGxldCBhdHRlbXB0cyA9IDA7XG4gIGxldCBjaVJlc3VsdHMgPSBhd2FpdCBsYXRlc3RDaVJlc3VsdHNGbihwck51bWJlcik7XG4gIGxldCBzdG9wV2FpdFByb2dyZXNzID0gKCkgPT4ge307XG5cbiAgdHJ5IHtcbiAgICBmb3IgKDs7KSB7XG4gICAgICBjb25zdCBjbGFzc2lmaWVkUmVzdWx0cyA9IGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0cyk7XG4gICAgICBjb25zdCBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdID0gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKGNsYXNzaWZpZWRSZXN1bHRzKTtcblxuICAgICAgaWYgKE9iamVjdC5rZXlzKGZhaWxlZFJlc3VsdHMpLmxlbmd0aCA+IDAgfHwgT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gW2NpUmVzdWx0cywgYXR0ZW1wdHMsIGZhbHNlXTtcbiAgICAgIH1cbiAgICAgIGlmIChhdHRlbXB0cyA+PSBURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTKSB7XG4gICAgICAgIHJldHVybiBbY2lSZXN1bHRzLCBhdHRlbXB0cywgdHJ1ZV07XG4gICAgICB9XG5cbiAgICAgIGF0dGVtcHRzICs9IDE7XG4gICAgICBpZiAoYXR0ZW1wdHMgPT09IDEpIHtcbiAgICAgICAgc3RvcFdhaXRQcm9ncmVzcyA9IGNyZWF0ZVdhaXRQcm9ncmVzcyhcbiAgICAgICAgICBURVNUX0NIRUNLX1dBSVRfTUVTU0FHRSxcbiAgICAgICAgICBURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyxcbiAgICAgICAgICB3cml0ZVByb2dyZXNzRm5cbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IHNsZWVwRm4oVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMpO1xuICAgICAgY2lSZXN1bHRzID0gYXdhaXQgbGF0ZXN0Q2lSZXN1bHRzRm4ocHJOdW1iZXIpO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBzdG9wV2FpdFByb2dyZXNzKCk7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0czogQ2lSZXN1bHRzKTogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiB7XG4gIGNvbnN0IGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93ID0gY2lSZXN1bHRzLmNoZWNrcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgQ2hlY2tbXT4+KChncm91cGVkUmVzdWx0cywgY2hlY2spID0+IHtcbiAgICBjb25zdCB3b3JrZmxvd0tleSA9IGNoZWNrLndvcmtmbG93IHx8IGNoZWNrLm5hbWUgfHwgJ3Vua25vd25fd29ya2Zsb3cnO1xuICAgIGdyb3VwZWRSZXN1bHRzW3dvcmtmbG93S2V5XSA/Pz0gW107XG4gICAgZ3JvdXBlZFJlc3VsdHNbd29ya2Zsb3dLZXldLnB1c2goY2hlY2spO1xuICAgIHJldHVybiBncm91cGVkUmVzdWx0cztcbiAgfSwge30pO1xuXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMobGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3cpLm1hcCgoW3dvcmtmbG93S2V5LCBjaGVja3NdKSA9PiB7XG4gICAgICBjb25zdCBsYXRlc3RBdHRlbXB0Q2hlY2tzID0gbGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3coY2hlY2tzKTtcbiAgICAgIGNvbnN0IGZpcnN0Q2hlY2sgPSBsYXRlc3RBdHRlbXB0Q2hlY2tzWzBdO1xuICAgICAgaWYgKCFmaXJzdENoZWNrKSB7XG4gICAgICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBubyBjaGVja3MgZm91bmQgZm9yIHdvcmtmbG93ICR7d29ya2Zsb3dLZXl9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXRlc3RDaGVjayA9XG4gICAgICAgIGxhdGVzdEF0dGVtcHRDaGVja3MucmVkdWNlPENoZWNrIHwgdW5kZWZpbmVkPigoY3VycmVudExhdGVzdCwgY2hlY2spID0+IHtcbiAgICAgICAgICBpZiAoIWN1cnJlbnRMYXRlc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVjaztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrKSA+IGxhdGVzdENoZWNrVGltZXN0YW1wKGN1cnJlbnRMYXRlc3QpID8gY2hlY2sgOiBjdXJyZW50TGF0ZXN0O1xuICAgICAgICB9LCB1bmRlZmluZWQpID8/IGZpcnN0Q2hlY2s7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIHdvcmtmbG93S2V5LFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NpZmljYXRpb246IHdvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24obGF0ZXN0QXR0ZW1wdENoZWNrcyksXG4gICAgICAgICAgY2hlY2s6IGxhdGVzdENoZWNrLFxuICAgICAgICAgIGNoZWNrczogbGF0ZXN0QXR0ZW1wdENoZWNrcyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChcbiAgY2xhc3NpZmllZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD5cbik6IFtSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+LCBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+XSB7XG4gIGNvbnN0IGZhaWxlZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4gPSB7fTtcbiAgY29uc3QgcnVubmluZ1Jlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4gPSB7fTtcblxuICBmb3IgKGNvbnN0IFt3b3JrZmxvd0tleSwgcmVzdWx0XSBvZiBPYmplY3QuZW50cmllcyhjbGFzc2lmaWVkUmVzdWx0cykpIHtcbiAgICBpZiAocmVzdWx0LmNsYXNzaWZpY2F0aW9uID09PSAnZmFpbGVkJykge1xuICAgICAgZmFpbGVkUmVzdWx0c1t3b3JrZmxvd0tleV0gPSByZXN1bHQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5jbGFzc2lmaWNhdGlvbiA9PT0gJ3J1bm5pbmcnICYmIHJlc3VsdC5jaGVja3Muc29tZSgoY2hlY2spID0+IHRlc3RSZWxhdGVkQ2hlY2soY2hlY2spKSkge1xuICAgICAgcnVubmluZ1Jlc3VsdHNbd29ya2Zsb3dLZXldID0gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2s6IENoZWNrIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgY29uc3QgbGluayA9IGNoZWNrPy5saW5rO1xuICBpZiAoIWxpbmspIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBsaW5rLm1hdGNoKC9cXC9hY3Rpb25zXFwvcnVuc1xcLyhcXGQrKS8pPy5bMV07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3b3JrZmxvd1J1bihydW5JZDogc3RyaW5nIHwgdW5kZWZpbmVkKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB8IHVuZGVmaW5lZD4ge1xuICBpZiAoIXJ1bklkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHJ1bkpzb24gPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncnVuJywgJ3ZpZXcnLCBydW5JZCwgJy0tanNvbicsIFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUy5qb2luKCcsJyldLCBbMV0pO1xuICBpZiAocnVuSnNvbi50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UocnVuSnNvbikgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgIHByb2Nlc3NTdGRlcnIud3JpdGUoYFdhcm5pbmc6IENvdWxkIG5vdCBwYXJzZSBKU09OIGZvciB3b3JrZmxvdyBydW4gJHtydW5JZH06ICR7ZXJyb3IubWVzc2FnZX1cXG5gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyhjaGVja3M6IENoZWNrW10pOiBDaGVja1tdIHtcbiAgY29uc3QgZ3JvdXBzID0gY2hlY2tzLnJlZHVjZSgoZ3JvdXBlZENoZWNrcywgY2hlY2spID0+IHtcbiAgICBjb25zdCBrZXkgPSB3b3JrZmxvd0F0dGVtcHRLZXkoY2hlY2spO1xuICAgIGNvbnN0IGdyb3VwID0gZ3JvdXBlZENoZWNrcy5nZXQoa2V5KTtcbiAgICBpZiAoZ3JvdXApIHtcbiAgICAgIGdyb3VwLnB1c2goY2hlY2spO1xuICAgICAgcmV0dXJuIGdyb3VwZWRDaGVja3M7XG4gICAgfVxuICAgIGdyb3VwZWRDaGVja3Muc2V0KGtleSwgW2NoZWNrXSk7XG4gICAgcmV0dXJuIGdyb3VwZWRDaGVja3M7XG4gIH0sIG5ldyBNYXA8c3RyaW5nLCBDaGVja1tdPigpKTtcblxuICByZXR1cm4gQXJyYXkuZnJvbShncm91cHMudmFsdWVzKCkpLnJlZHVjZTxDaGVja1tdPigobGF0ZXN0R3JvdXAsIGN1cnJlbnRHcm91cCkgPT4ge1xuICAgIGlmIChsYXRlc3RHcm91cC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBjdXJyZW50R3JvdXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhdGVzdEdyb3VwVGltZXN0YW1wKGN1cnJlbnRHcm91cCkgPiBsYXRlc3RHcm91cFRpbWVzdGFtcChsYXRlc3RHcm91cCkgPyBjdXJyZW50R3JvdXAgOiBsYXRlc3RHcm91cDtcbiAgfSwgW10pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dBdHRlbXB0S2V5KGNoZWNrOiBDaGVjayk6IHN0cmluZyB7XG4gIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2spO1xuICByZXR1cm4gcnVuSWQgPyBgcnVuOiR7cnVuSWR9YCA6ICd1bmtub3duX3J1bic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd1Jlc3VsdENsYXNzaWZpY2F0aW9uKGNoZWNrczogQ2hlY2tbXSk6IFdvcmtmbG93Q2xhc3NpZmljYXRpb24ge1xuICBjb25zdCBidWNrZXRzID0gY2hlY2tzLm1hcCgoY2hlY2spID0+IGNoZWNrLmJ1Y2tldCA/PyAnJyk7XG4gIGlmIChidWNrZXRzLnNvbWUoKGJ1Y2tldCkgPT4gIVsncGFzcycsICdza2lwcGluZycsICdwZW5kaW5nJ10uaW5jbHVkZXMoYnVja2V0KSkpIHtcbiAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gIH1cbiAgaWYgKGJ1Y2tldHMuaW5jbHVkZXMoJ3BlbmRpbmcnKSkge1xuICAgIHJldHVybiAncnVubmluZyc7XG4gIH1cbiAgcmV0dXJuICdzdWNjZXNzZnVsJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrOiBDaGVjayk6IHN0cmluZyB7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IGNoZWNrLmNvbXBsZXRlZEF0O1xuICBpZiAoIXRpbWVzdGFtcCB8fCB0aW1lc3RhbXAgPT09IFpFUk9fVElNRVNUQU1QKSB7XG4gICAgcmV0dXJuIGNoZWNrLnN0YXJ0ZWRBdCA/PyAnJztcbiAgfVxuICByZXR1cm4gdGltZXN0YW1wO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdGVzdFJlbGF0ZWRDaGVjayhjaGVjazogQ2hlY2spOiBib29sZWFuIHtcbiAgcmV0dXJuIFtjaGVjay5uYW1lLCBjaGVjay53b3JrZmxvd10uc29tZSgodmFsdWUpID0+IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgJiYgVEVTVF9SRUxBVEVEX1BBVFRFUk4udGVzdCh2YWx1ZSkpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2xlZXBTZWNvbmRzKHNlY29uZHM6IG51bWJlcik6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBzbGVlcChzZWNvbmRzICogMTAwMCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja1ByQ2koKTogUHJvbWlzZTx7IG91dHB1dDogc3RyaW5nOyBleGl0Q29kZTogbnVtYmVyIH0+IHtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcygnRmV0Y2hpbmcgbGF0ZXN0IENJIHJlc3VsdHMuLi4nKTtcbiAgY29uc3QgW2NpUmVzdWx0cywgd2FpdEF0dGVtcHRzLCB3YWl0VGltZWRPdXRdID0gYXdhaXQgd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyhwck51bWJlcik7XG4gIGNvbnN0IGNsYXNzaWZpZWRMYXRlc3QgPSBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHMpO1xuICBjb25zdCBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdID0gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKGNsYXNzaWZpZWRMYXRlc3QpO1xuXG4gIGNvbnN0IHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIHN1bW1hcnk6IGRlZXBDb3B5KGNpUmVzdWx0cy5zdW1tYXJ5KSxcbiAgICB3YWl0ZWRfZm9yX3Rlc3RfcmVsYXRlZF9jaGVja3M6IHdhaXRBdHRlbXB0cyA+IDAsXG4gICAgdGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfYXR0ZW1wdHM6IHdhaXRBdHRlbXB0cyxcbiAgICB0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF90aW1lZF9vdXQ6IHdhaXRUaW1lZE91dCxcbiAgfTtcblxuICBpZiAoT2JqZWN0LmtleXMoZmFpbGVkUmVzdWx0cykubGVuZ3RoID4gMCkge1xuICAgIHBheWxvYWQuZmFpbGVkX3dvcmtmbG93cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgT2JqZWN0LmVudHJpZXMoZmFpbGVkUmVzdWx0cykubWFwKGFzeW5jIChbd29ya2Zsb3dLZXksIHJlc3VsdF0pID0+IHtcbiAgICAgICAgY29uc3QgY29tcGFjdFdvcmtmbG93ID0gYXdhaXQgY29tcGFjdFdvcmtmbG93UmVzdWx0KHdvcmtmbG93S2V5LCByZXN1bHQpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmNvbXBhY3RXb3JrZmxvdyxcbiAgICAgICAgICAuLi5idWlsZEZhaWxlZFdvcmtmbG93RGV0YWlscyhhd2FpdCBmYWlsZWRXb3JrZmxvd0xvZyhyZXN1bHQuY2hlY2spKSxcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgKTtcbiAgICByZXR1cm4geyBvdXRwdXQ6IHlhbWxEdW1wKHBheWxvYWQpLCBleGl0Q29kZTogMSB9O1xuICB9XG5cbiAgaWYgKE9iamVjdC5rZXlzKHJ1bm5pbmdSZXN1bHRzKS5sZW5ndGggPiAwKSB7XG4gICAgcGF5bG9hZC50ZXN0X3dvcmtmbG93X291dHB1dCA9ICdUaW1lZCBvdXQgd2FpdGluZyBmb3IgdGVzdC1yZWxhdGVkIHdvcmtmbG93cyB0byBmaW5pc2guJztcbiAgICBwYXlsb2FkLnJ1bm5pbmdfdGVzdF9yZWxhdGVkX3dvcmtmbG93cyA9IGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgT2JqZWN0LmVudHJpZXMocnVubmluZ1Jlc3VsdHMpLm1hcCgoW3dvcmtmbG93S2V5LCByZXN1bHRdKSA9PiBjb21wYWN0V29ya2Zsb3dSZXN1bHQod29ya2Zsb3dLZXksIHJlc3VsdCkpXG4gICAgKTtcbiAgICByZXR1cm4geyBvdXRwdXQ6IHlhbWxEdW1wKHBheWxvYWQpLCBleGl0Q29kZTogMSB9O1xuICB9XG5cbiAgcmV0dXJuIHsgb3V0cHV0OiAnQWxsIENJIHdvcmtmbG93cyBwYXNzZWQuXFxuJywgZXhpdENvZGU6IDAgfTtcbn1cblxuZnVuY3Rpb24gbGF0ZXN0R3JvdXBUaW1lc3RhbXAoY2hlY2tzOiBDaGVja1tdKTogc3RyaW5nIHtcbiAgcmV0dXJuIGNoZWNrcy5yZWR1Y2UoKGxhdGVzdCwgY2hlY2spID0+IHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBsYXRlc3RDaGVja1RpbWVzdGFtcChjaGVjayk7XG4gICAgcmV0dXJuIHRpbWVzdGFtcCA+IGxhdGVzdCA/IHRpbWVzdGFtcCA6IGxhdGVzdDtcbiAgfSwgJycpO1xufVxuXG5hc3luYyBmdW5jdGlvbiBjb21wYWN0V29ya2Zsb3dSZXN1bHQoXG4gIHdvcmtmbG93S2V5OiBzdHJpbmcsXG4gIHJlc3VsdDogQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0XG4pOiBQcm9taXNlPHsgY2xhc3NpZmljYXRpb246IFdvcmtmbG93Q2xhc3NpZmljYXRpb24gfSAmIENvbXBhY3RXb3JrZmxvd1J1bj4ge1xuICBjb25zdCBydW5JZCA9IHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKHJlc3VsdC5jaGVjayk7XG4gIGNvbnN0IHJ1biA9IChhd2FpdCB3b3JrZmxvd1J1bihydW5JZCkpIGFzIFdvcmtmbG93UnVuRGV0YWlscyB8IHVuZGVmaW5lZDtcbiAgY29uc3QgZmFpbGVkSm9iID0gZmFpbGVkV29ya2Zsb3dSdW5Kb2IocnVuLCBzdHJpbmdPclVuZGVmaW5lZChyZXN1bHQuY2hlY2submFtZSkpO1xuICByZXR1cm4ge1xuICAgIGNsYXNzaWZpY2F0aW9uOiByZXN1bHQuY2xhc3NpZmljYXRpb24sXG4gICAgd29ya2Zsb3c6IHdvcmtmbG93S2V5LFxuICAgIGpvYjogc3RyaW5nT3JVbmRlZmluZWQocmVzdWx0LmNoZWNrLm5hbWUpLFxuICAgIGpvYl91cmw6IHN0cmluZ09yVW5kZWZpbmVkKGZhaWxlZEpvYj8udXJsKSxcbiAgICBmYWlsZWRfc3RlcDogZmFpbGVkV29ya2Zsb3dSdW5TdGVwTmFtZShmYWlsZWRKb2IpLFxuICAgIHJ1bl9pZDogcnVuSWQsXG4gICAgcnVuX3VybDogc3RyaW5nT3JVbmRlZmluZWQocnVuPy51cmwpID8/IHN0cmluZ09yVW5kZWZpbmVkKHJlc3VsdC5jaGVjay5saW5rKSxcbiAgICBicmFuY2g6IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8uaGVhZEJyYW5jaCksXG4gICAgc2hhOiBzdHJpbmdPclVuZGVmaW5lZChydW4/LmhlYWRTaGEpLFxuICAgIGNvbmNsdXNpb246IHN0cmluZ09yVW5kZWZpbmVkKHJ1bj8uY29uY2x1c2lvbiksXG4gIH07XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGZhaWxlZFdvcmtmbG93TG9nKGNoZWNrOiBDaGVjayk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2spO1xuICBpZiAoIXJ1bklkKSB7XG4gICAgcmV0dXJuICdGYWlsZWQgbGF0ZXN0IHJlc3VsdCBoYXMgbm8gR2l0SHViIEFjdGlvbnMgcnVuIGxpbmsuJztcbiAgfVxuICByZXR1cm4gYXdhaXQgZ2hBbGxvd0V4aXRDb2RlcyhbJ3J1bicsICd2aWV3JywgcnVuSWQsICctLWxvZy1mYWlsZWQnXSwgWzFdKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRGYWlsZWRXb3JrZmxvd0RldGFpbHMobG9nOiBzdHJpbmcpOiB7XG4gIGZhaWxlZF9sb2c6IHN0cmluZztcbn0ge1xuICByZXR1cm4ge1xuICAgIGZhaWxlZF9sb2c6IHJlZmluZUZhaWxlZFdvcmtmbG93TG9nKGxvZyksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlZmluZUZhaWxlZFdvcmtmbG93TG9nKGxvZzogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc2FuaXRpemVkSW5wdXQgPSBzYW5pdGl6ZUZhaWxlZFdvcmtmbG93TG9nKHN0cmlwVlRDb250cm9sQ2hhcmFjdGVycyhsb2cpKTtcbiAgaWYgKCFydGtBdmFpbGFibGUpIHtcbiAgICByZXR1cm4gc2FuaXRpemVkSW5wdXQ7XG4gIH1cblxuICBjb25zdCByZXN1bHQgPSBzcGF3blN5bmNTYWZlKFsncnRrJywgJ2xvZyddLCBzYW5pdGl6ZWRJbnB1dCk7XG4gIHJldHVybiByZXN1bHQuZXhpdENvZGUgPT09IDAgJiYgcmVzdWx0Lm91dHB1dC50cmltKCkubGVuZ3RoID4gMFxuICAgID8gc2FuaXRpemVGYWlsZWRXb3JrZmxvd0xvZyhyZXN1bHQub3V0cHV0KVxuICAgIDogc2FuaXRpemVkSW5wdXQ7XG59XG5cbmZ1bmN0aW9uIHNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2cobG9nOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbG9nXG4gICAgLnNwbGl0KCdcXG4nKVxuICAgIC5tYXAoKGxpbmUpID0+IGxpbmUucmVwbGFjZShGQUlMRURfTE9HX0xJTkVfUFJFRklYX1BBVFRFUk4sICcnKSlcbiAgICAuam9pbignXFxuJylcbiAgICAudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBzdHJpbmdPclVuZGVmaW5lZCh2YWx1ZTogdW5rbm93bik6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIHZhbHVlLmxlbmd0aCA+IDAgPyB2YWx1ZSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gZmFpbGVkV29ya2Zsb3dSdW5Kb2IoXG4gIHJ1bjogV29ya2Zsb3dSdW5EZXRhaWxzIHwgdW5kZWZpbmVkLFxuICBqb2JOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWRcbik6IFdvcmtmbG93UnVuSm9iIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFydW4/LmpvYnMgfHwgcnVuLmpvYnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgcnVuLmpvYnMuZmluZCgoam9iKSA9PiBqb2IubmFtZSA9PT0gam9iTmFtZSkgPz9cbiAgICBydW4uam9icy5maW5kKChqb2IpID0+IGpvYi5jb25jbHVzaW9uID09PSAnZmFpbHVyZScpID8/XG4gICAgcnVuLmpvYnMuZmluZCgoam9iKSA9PiBqb2Iuc3RhdHVzICE9PSAnY29tcGxldGVkJylcbiAgKTtcbn1cblxuZnVuY3Rpb24gZmFpbGVkV29ya2Zsb3dSdW5TdGVwTmFtZShqb2I6IFdvcmtmbG93UnVuSm9iIHwgdW5kZWZpbmVkKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFqb2I/LnN0ZXBzIHx8IGpvYi5zdGVwcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICBqb2Iuc3RlcHMuZmluZCgoc3RlcCkgPT4gc3RlcC5jb25jbHVzaW9uID09PSAnZmFpbHVyZScpPy5uYW1lID8/XG4gICAgam9iLnN0ZXBzLmZpbmQoKHN0ZXApID0+IHN0ZXAuc3RhdHVzICE9PSAnY29tcGxldGVkJyk/Lm5hbWVcbiAgKTtcbn1cbiIsImltcG9ydCB7IHJ1bkNvbW1hbmRXaXRoUHJvZ3Jlc3MgfSBmcm9tICcuLi9wcm9jZXNzL3J1bkNvbW1hbmQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudEJhc2VCcmFuY2goKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIChhd2FpdCBjdXJyZW50UHVsbFJlcXVlc3RCYXNlQnJhbmNoKCkpID8/IChhd2FpdCBjdXJyZW50RGVmYXVsdEJyYW5jaCgpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnREZWZhdWx0QnJhbmNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiByZXF1aXJlTm9uRW1wdHkoXG4gICAgKFxuICAgICAgYXdhaXQgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyhbXG4gICAgICAgICdnaCcsXG4gICAgICAgICdyZXBvJyxcbiAgICAgICAgJ3ZpZXcnLFxuICAgICAgICAnLS1qc29uJyxcbiAgICAgICAgJ2RlZmF1bHRCcmFuY2hSZWYnLFxuICAgICAgICAnLS10ZW1wbGF0ZScsXG4gICAgICAgICd7ey5kZWZhdWx0QnJhbmNoUmVmLm5hbWV9fScsXG4gICAgICBdKVxuICAgICkudHJpbSgpLFxuICAgICdFcnJvcjogY291bGQgbm90IGRldGVybWluZSB0aGUgZGVmYXVsdCBicmFuY2gnXG4gICk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2goKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBiYXNlQnJhbmNoID0gKFxuICAgICAgYXdhaXQgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyhbJ2doJywgJ3ByJywgJ3ZpZXcnLCAnLS1qc29uJywgJ2Jhc2VSZWZOYW1lJywgJy0tdGVtcGxhdGUnLCAne3suYmFzZVJlZk5hbWV9fSddKVxuICAgICkudHJpbSgpO1xuICAgIHJldHVybiBiYXNlQnJhbmNoLmxlbmd0aCA+IDAgPyBiYXNlQnJhbmNoIDogdW5kZWZpbmVkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChpc0N1cnJlbnRQdWxsUmVxdWVzdE1pc3NpbmcoZXJyb3IpKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaXNDdXJyZW50UHVsbFJlcXVlc3RNaXNzaW5nKGVycm9yOiB1bmtub3duKTogYm9vbGVhbiB7XG4gIHJldHVybiAvbm8gcHVsbCByZXF1ZXN0cz8gZm91bmQgZm9yIGJyYW5jaC9pLnRlc3QoU3RyaW5nKGVycm9yKSk7XG59XG5cbmZ1bmN0aW9uIHJlcXVpcmVOb25FbXB0eSh2YWx1ZTogc3RyaW5nLCBtZXNzYWdlOiBzdHJpbmcpOiBzdHJpbmcge1xuICBpZiAodmFsdWUubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IobWVzc2FnZSk7XG59XG4iLCJpbXBvcnQgeyBpc0N1cnJlbnRQdWxsUmVxdWVzdE1pc3NpbmcgfSBmcm9tICcuLi9yZXBvL2RlZmF1bHRCcmFuY2guanMnO1xuaW1wb3J0IHtcbiAgY3VycmVudFByTnVtYmVyLFxuICBjdXJyZW50UmVwb1BhcnRzLFxuICBleGl0V2l0aEVycm9yLFxuICBnaEFsbG93RXhpdENvZGVzLFxuICBncmFwaHFsLFxuICB0eXBlIEpzb25PYmplY3QsXG4gIHR5cGUgTWVzc2FnZSxcbiAgdHlwZSBNZXNzYWdlQ29ubmVjdGlvbixcbiAgdHlwZSBNZXRhZGF0YU5vZGUsXG4gIHByb2dyZXNzLFxuICB5YW1sRHVtcCxcbn0gZnJvbSAnLi9zaGFyZWQuanMnO1xuXG50eXBlIElzc3VlTWVzc2FnZUNvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICBib2R5OiBzdHJpbmc7XG4gIGNyZWF0ZWRBdDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG50eXBlIFByUmV2aWV3Tm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgYm9keT86IHN0cmluZyB8IG51bGw7XG4gIHN0YXRlPzogc3RyaW5nIHwgbnVsbDtcbiAgc3VibWl0dGVkQXQ/OiBzdHJpbmcgfCBudWxsO1xuICB1cmw6IHN0cmluZztcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IG51bGw7XG59O1xuXG50eXBlIFB1bGxSZXF1ZXN0TWVzc2FnZXNSZXNwb25zZSA9IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgcHVsbFJlcXVlc3Q/OiB7XG4gICAgICAgIGNvbW1lbnRzPzogTWVzc2FnZUNvbm5lY3Rpb248SXNzdWVNZXNzYWdlQ29tbWVudE5vZGU+O1xuICAgICAgICByZXZpZXdzPzogTWVzc2FnZUNvbm5lY3Rpb248UHJSZXZpZXdOb2RlPjtcbiAgICAgIH07XG4gICAgfTtcbiAgfTtcbn07XG5cbnR5cGUgSXNzdWVNZXNzYWdlc1Jlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBpc3N1ZT86IHtcbiAgICAgICAgY29tbWVudHM/OiBNZXNzYWdlQ29ubmVjdGlvbjxJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZT47XG4gICAgICB9O1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIFB1bGxSZXF1ZXN0TWV0YWRhdGFSZXNwb25zZSA9IHtcbiAgZGF0YT86IHtcbiAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgcHVsbFJlcXVlc3Q/OiBNZXRhZGF0YU5vZGU7XG4gICAgfTtcbiAgfTtcbn07XG5cbnR5cGUgSXNzdWVNZXRhZGF0YVJlc3BvbnNlID0ge1xuICBkYXRhPzoge1xuICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICBpc3N1ZT86IE1ldGFkYXRhTm9kZTtcbiAgICB9O1xuICB9O1xufTtcblxuY29uc3QgSVNTVUVfTUVTU0FHRVNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIGlzc3VlKG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBJU1NVRV9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISkge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIGlzc3VlKG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBudW1iZXJcbiAgICAgICAgdGl0bGVcbiAgICAgICAgdXJsXG4gICAgICAgIGJvZHlcbiAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUFJfQ09NTUVOVFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBib2R5XG4gICAgICAgICAgICBjcmVhdGVkQXRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBQUl9RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISkge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICBudW1iZXJcbiAgICAgICAgdGl0bGVcbiAgICAgICAgdXJsXG4gICAgICAgIGJvZHlcbiAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUFJfUkVWSUVXU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIHJldmlld3MoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgc3RhdGVcbiAgICAgICAgICAgIHN1Ym1pdHRlZEF0XG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZUlzc3VlTnVtYmVyKHJlZmVyZW5jZTogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIocmVmZXJlbmNlLCAnaXNzdWUnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZVByTnVtYmVyKHJlZmVyZW5jZTogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcbiAgcmV0dXJuIGV4dHJhY3RHaXRIdWJSZWZlcmVuY2VOdW1iZXIocmVmZXJlbmNlLCAncHVsbCByZXF1ZXN0Jyk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaElzc3VlTWVzc2FnZXMoaXNzdWVOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IGlzc3VlID0gYXdhaXQgaXNzdWVNZXNzYWdlcyhvd25lciwgbmFtZSwgbm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVOdW1iZXIpKTtcbiAgcHJvZ3Jlc3MoYEZldGNoZWQgaXNzdWUgIyR7aXNzdWUubnVtYmVyfSBtZXNzYWdlcy5gKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgaXNzdWUgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaFByTWVzc2FnZXMocHJOdW1iZXI/OiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCByZXNvbHZlZFByTnVtYmVyID0gcHJOdW1iZXIgPT09IHVuZGVmaW5lZCA/IGF3YWl0IGN1cnJlbnRQck51bWJlcigpIDogbm9ybWFsaXplUHJOdW1iZXIocHJOdW1iZXIpO1xuICBjb25zdCBwdWxsUmVxdWVzdCA9IGF3YWl0IGN1cnJlbnRSZXBvUHVsbFJlcXVlc3RNZXNzYWdlcyhyZXNvbHZlZFByTnVtYmVyKTtcbiAgcHJvZ3Jlc3MoYEZldGNoZWQgcHVsbCByZXF1ZXN0ICMke3B1bGxSZXF1ZXN0Lm51bWJlcn0gbWVzc2FnZXMuYCk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHB1bGxfcmVxdWVzdDogcHVsbFJlcXVlc3QgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUoKTogUHJvbWlzZTxzdHJpbmcgfCB1bmRlZmluZWQ+IHtcbiAgY29uc3QgcHJOdW1iZXJPdXRwdXQgPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncHInLCAndmlldycsICctLWpzb24nLCAnbnVtYmVyJywgJy0tanEnLCAnLm51bWJlciddLCBbMV0pO1xuICBjb25zdCBwck51bWJlciA9IHByTnVtYmVyT3V0cHV0LnRyaW0oKTtcbiAgaWYgKGlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyhwck51bWJlck91dHB1dCkgfHwgIS9eXFxkKyQvLnRlc3QocHJOdW1iZXIpKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHB1bGxSZXF1ZXN0ID0gYXdhaXQgY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzKHByTnVtYmVyKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgcHVsbF9yZXF1ZXN0OiBwdWxsUmVxdWVzdCB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzKHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIpOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgcmV0dXJuIGF3YWl0IHByTWVzc2FnZXMob3duZXIsIG5hbWUsIHByTnVtYmVyKTtcbn1cblxuZnVuY3Rpb24gZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlcihyZWZlcmVuY2U6IHN0cmluZyB8IG51bWJlciwgbGFiZWw6ICdpc3N1ZScgfCAncHVsbCByZXF1ZXN0Jyk6IHN0cmluZyB7XG4gIGNvbnN0IHJlZmVyZW5jZVRleHQgPSBTdHJpbmcocmVmZXJlbmNlKS50cmltKCk7XG4gIGlmIChyZWZlcmVuY2VUZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiAke2xhYmVsfSByZWZlcmVuY2UgaXMgcmVxdWlyZWRgLCAyKTtcbiAgfVxuXG4gIGlmICgvXlxcZCskLy50ZXN0KHJlZmVyZW5jZVRleHQpKSB7XG4gICAgcmV0dXJuIHJlZmVyZW5jZVRleHQ7XG4gIH1cblxuICBjb25zdCBraW5kU2VnbWVudCA9IGxhYmVsID09PSAnaXNzdWUnID8gJ2lzc3VlcycgOiAncHVsbCc7XG4gIGNvbnN0IG1hdGNoID0gcmVmZXJlbmNlVGV4dC5tYXRjaChcbiAgICBuZXcgUmVnRXhwKGBeaHR0cHM/Oi8vKD86d3d3XFxcXC4pP2dpdGh1YlxcXFwuY29tL1teL10rL1teL10rLyR7a2luZFNlZ21lbnR9LyhcXFxcZCspKD86L3wkKWApXG4gICk7XG4gIGlmIChtYXRjaD8uWzFdKSB7XG4gICAgcmV0dXJuIG1hdGNoWzFdO1xuICB9XG5cbiAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IGV4cGVjdGVkIGEgR2l0SHViICR7bGFiZWx9IG51bWJlciBvciBVUkwsIHJlY2VpdmVkIFwiJHtyZWZlcmVuY2VUZXh0fVwiYCwgMik7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGlzc3VlTWVzc2FnZXMob3duZXI6IHN0cmluZywgbmFtZTogc3RyaW5nLCBpc3N1ZU51bWJlcjogc3RyaW5nIHwgbnVtYmVyKTogUHJvbWlzZTxNZXNzYWdlPiB7XG4gIGNvbnN0IGlzc3VlID0gYXdhaXQgZmV0Y2hNZXRhZGF0YTxJc3N1ZU1ldGFkYXRhUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogSVNTVUVfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IGlzc3VlTnVtYmVyLFxuICAgIG5vdW46ICdpc3N1ZScsXG4gICAgc2VsZWN0TWV0YWRhdGE6IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8uaXNzdWUsXG4gIH0pO1xuICBjb25zdCBtZXNzYWdlcyA9IGF3YWl0IHBhZ2luYXRlTWVzc2FnZXM8SXNzdWVNZXNzYWdlQ29tbWVudE5vZGUsIElzc3VlTWVzc2FnZXNSZXNwb25zZT4oe1xuICAgIHF1ZXJ5OiBJU1NVRV9NRVNTQUdFU19RVUVSWSxcbiAgICBvd25lcixcbiAgICBuYW1lLFxuICAgIG51bWJlcjogaXNzdWVOdW1iZXIsXG4gICAgc2VsZWN0Q29ubmVjdGlvbjogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5pc3N1ZT8uY29tbWVudHMsXG4gICAgbWFwTm9kZTogY29tbWVudE1lc3NhZ2UsXG4gIH0pO1xuXG4gIHJldHVybiB7IC4uLmlzc3VlLCBtZXNzYWdlcyB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBwck1lc3NhZ2VzKG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZT4ge1xuICBjb25zdCBwdWxsUmVxdWVzdCA9IGF3YWl0IGZldGNoTWV0YWRhdGE8UHVsbFJlcXVlc3RNZXRhZGF0YVJlc3BvbnNlPih7XG4gICAgcXVlcnk6IFBSX1FVRVJZLFxuICAgIG93bmVyLFxuICAgIG5hbWUsXG4gICAgbnVtYmVyOiBwck51bWJlcixcbiAgICBub3VuOiAncHVsbCByZXF1ZXN0JyxcbiAgICBzZWxlY3RNZXRhZGF0YTogKHJlc3BvbnNlKSA9PiByZXNwb25zZS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdCxcbiAgfSk7XG4gIGNvbnN0IFtpc3N1ZUNvbW1lbnRzLCByZXZpZXdzXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICBwcklzc3VlQ29tbWVudHMob3duZXIsIG5hbWUsIHByTnVtYmVyKSxcbiAgICBwclJldmlld3Mob3duZXIsIG5hbWUsIHByTnVtYmVyKSxcbiAgXSk7XG5cbiAgcmV0dXJuIHtcbiAgICAuLi5wdWxsUmVxdWVzdCxcbiAgICBtZXNzYWdlczogWy4uLmlzc3VlQ29tbWVudHMsIC4uLnJldmlld3NdLnNvcnQoY29tcGFyZU1lc3NhZ2VzQnlDcmVhdGVkQXQpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21wYXJlTWVzc2FnZXNCeUNyZWF0ZWRBdChsZWZ0OiBNZXNzYWdlLCByaWdodDogTWVzc2FnZSk6IG51bWJlciB7XG4gIGNvbnN0IGxlZnRDcmVhdGVkQXQgPSB0eXBlb2YgbGVmdC5jcmVhdGVkQXQgPT09ICdzdHJpbmcnID8gbGVmdC5jcmVhdGVkQXQgOiAnJztcbiAgY29uc3QgcmlnaHRDcmVhdGVkQXQgPSB0eXBlb2YgcmlnaHQuY3JlYXRlZEF0ID09PSAnc3RyaW5nJyA/IHJpZ2h0LmNyZWF0ZWRBdCA6ICcnO1xuICByZXR1cm4gbGVmdENyZWF0ZWRBdC5sb2NhbGVDb21wYXJlKHJpZ2h0Q3JlYXRlZEF0KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJJc3N1ZUNvbW1lbnRzKG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZVtdPiB7XG4gIHJldHVybiBhd2FpdCBwYWdpbmF0ZU1lc3NhZ2VzPElzc3VlTWVzc2FnZUNvbW1lbnROb2RlLCBQdWxsUmVxdWVzdE1lc3NhZ2VzUmVzcG9uc2U+KHtcbiAgICBxdWVyeTogUFJfQ09NTUVOVFNfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3Q/LmNvbW1lbnRzLFxuICAgIG1hcE5vZGU6IGNvbW1lbnRNZXNzYWdlLFxuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcHJSZXZpZXdzKG93bmVyOiBzdHJpbmcsIG5hbWU6IHN0cmluZywgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcik6IFByb21pc2U8TWVzc2FnZVtdPiB7XG4gIHJldHVybiBhd2FpdCBwYWdpbmF0ZU1lc3NhZ2VzPFByUmV2aWV3Tm9kZSwgUHVsbFJlcXVlc3RNZXNzYWdlc1Jlc3BvbnNlPih7XG4gICAgcXVlcnk6IFBSX1JFVklFV1NfUVVFUlksXG4gICAgb3duZXIsXG4gICAgbmFtZSxcbiAgICBudW1iZXI6IHByTnVtYmVyLFxuICAgIHNlbGVjdENvbm5lY3Rpb246IChyZXNwb25zZSkgPT4gcmVzcG9uc2UuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3Q/LnJldmlld3MsXG4gICAgbWFwTm9kZTogcmV2aWV3TWVzc2FnZSxcbiAgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHBhZ2luYXRlTWVzc2FnZXM8VE5vZGUsIFRSZXNwb25zZSBleHRlbmRzIEpzb25PYmplY3Q+KGNvbmZpZzoge1xuICBxdWVyeTogc3RyaW5nO1xuICBvd25lcjogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIG51bWJlcjogc3RyaW5nIHwgbnVtYmVyO1xuICBzZWxlY3RDb25uZWN0aW9uOiAocmVzcG9uc2U6IFRSZXNwb25zZSkgPT4gTWVzc2FnZUNvbm5lY3Rpb248VE5vZGU+IHwgdW5kZWZpbmVkO1xuICBtYXBOb2RlOiAobm9kZTogVE5vZGUpID0+IE1lc3NhZ2U7XG59KTogUHJvbWlzZTxNZXNzYWdlW10+IHtcbiAgbGV0IGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBjb25zdCBtZXNzYWdlczogTWVzc2FnZVtdID0gW107XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IGNvbm5lY3Rpb24gPSBjb25maWcuc2VsZWN0Q29ubmVjdGlvbihcbiAgICAgIGF3YWl0IGdyYXBocWw8VFJlc3BvbnNlPihjb25maWcucXVlcnksIHtcbiAgICAgICAgb3duZXI6IGNvbmZpZy5vd25lcixcbiAgICAgICAgbmFtZTogY29uZmlnLm5hbWUsXG4gICAgICAgIG51bWJlcjogTnVtYmVyKGNvbmZpZy5udW1iZXIpLFxuICAgICAgICBjdXJzb3IsXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBpZiAoIWNvbm5lY3Rpb24pIHtcbiAgICAgIHJldHVybiBtZXNzYWdlcztcbiAgICB9XG5cbiAgICBtZXNzYWdlcy5wdXNoKC4uLmNvbm5lY3Rpb24ubm9kZXMubWFwKGNvbmZpZy5tYXBOb2RlKS5maWx0ZXIoaGFzTWVzc2FnZUJvZHkpKTtcblxuICAgIGlmICghY29ubmVjdGlvbi5wYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgcmV0dXJuIG1lc3NhZ2VzO1xuICAgIH1cbiAgICBjdXJzb3IgPSBjb25uZWN0aW9uLnBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZmV0Y2hNZXRhZGF0YTxUUmVzcG9uc2UgZXh0ZW5kcyBKc29uT2JqZWN0Pihjb25maWc6IHtcbiAgcXVlcnk6IHN0cmluZztcbiAgb3duZXI6IHN0cmluZztcbiAgbmFtZTogc3RyaW5nO1xuICBudW1iZXI6IHN0cmluZyB8IG51bWJlcjtcbiAgbm91bjogc3RyaW5nO1xuICBzZWxlY3RNZXRhZGF0YTogKHJlc3BvbnNlOiBUUmVzcG9uc2UpID0+IE1ldGFkYXRhTm9kZSB8IHVuZGVmaW5lZDtcbn0pOiBQcm9taXNlPE1lc3NhZ2U+IHtcbiAgY29uc3QgbWV0YWRhdGEgPSBjb25maWcuc2VsZWN0TWV0YWRhdGEoXG4gICAgYXdhaXQgZ3JhcGhxbDxUUmVzcG9uc2U+KGNvbmZpZy5xdWVyeSwge1xuICAgICAgb3duZXI6IGNvbmZpZy5vd25lcixcbiAgICAgIG5hbWU6IGNvbmZpZy5uYW1lLFxuICAgICAgbnVtYmVyOiBOdW1iZXIoY29uZmlnLm51bWJlciksXG4gICAgfSlcbiAgKTtcblxuICBpZiAoIW1ldGFkYXRhKSB7XG4gICAgZXhpdFdpdGhFcnJvcihgQ291bGQgbm90IGZpbmQgJHtjb25maWcubm91bn0gIyR7Y29uZmlnLm51bWJlcn0gaW4gJHtjb25maWcub3duZXJ9LyR7Y29uZmlnLm5hbWV9LmApO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBudW1iZXI6IG1ldGFkYXRhLm51bWJlcixcbiAgICB0aXRsZTogbWV0YWRhdGEudGl0bGUsXG4gICAgdXJsOiBtZXRhZGF0YS51cmwsXG4gICAgYXV0aG9yOiBtZXRhZGF0YS5hdXRob3I/LmxvZ2luID8/IHVuZGVmaW5lZCxcbiAgICBib2R5OiBtZXRhZGF0YS5ib2R5ID8/ICcnLFxuICB9O1xufVxuXG5mdW5jdGlvbiBjb21tZW50TWVzc2FnZShjb21tZW50OiBJc3N1ZU1lc3NhZ2VDb21tZW50Tm9kZSk6IE1lc3NhZ2Uge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdjb21tZW50JyxcbiAgICBhdXRob3I6IGNvbW1lbnQuYXV0aG9yPy5sb2dpbiA/PyB1bmRlZmluZWQsXG4gICAgY3JlYXRlZEF0OiBjb21tZW50LmNyZWF0ZWRBdCxcbiAgICB1cmw6IGNvbW1lbnQudXJsLFxuICAgIGJvZHk6IGNvbW1lbnQuYm9keSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmV2aWV3TWVzc2FnZShyZXZpZXc6IFByUmV2aWV3Tm9kZSk6IE1lc3NhZ2Uge1xuICByZXR1cm4ge1xuICAgIHR5cGU6ICdyZXZpZXcnLFxuICAgIGF1dGhvcjogcmV2aWV3LmF1dGhvcj8ubG9naW4gPz8gdW5kZWZpbmVkLFxuICAgIHN0YXRlOiByZXZpZXcuc3RhdGUgPz8gdW5kZWZpbmVkLFxuICAgIGNyZWF0ZWRBdDogcmV2aWV3LnN1Ym1pdHRlZEF0ID8/IHVuZGVmaW5lZCxcbiAgICB1cmw6IHJldmlldy51cmwsXG4gICAgYm9keTogcmV2aWV3LmJvZHkgPz8gJycsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGhhc01lc3NhZ2VCb2R5KG1lc3NhZ2U6IE1lc3NhZ2UpOiBib29sZWFuIHtcbiAgcmV0dXJuIHR5cGVvZiBtZXNzYWdlLmJvZHkgPT09ICdzdHJpbmcnICYmIG1lc3NhZ2UuYm9keS5sZW5ndGggPiAwO1xufVxuIiwiaW1wb3J0IHsgY3VycmVudFByTnVtYmVyLCBleGl0V2l0aEVycm9yLCBnaCwgcHJvZ3Jlc3MsIHJ1bkNvbW1hbmQsIHlhbWxEdW1wIH0gZnJvbSAnLi9zaGFyZWQuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblByKGJvZHk/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBoZWFkID0gKGF3YWl0IHJ1bkNvbW1hbmQoWydnaXQnLCAnYnJhbmNoJywgJy0tc2hvdy1jdXJyZW50J10pKS50cmltKCk7XG4gIGNvbnN0IGJhc2UgPSAoYXdhaXQgZ2goWydyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ2RlZmF1bHRCcmFuY2hSZWYnLCAnLS1qcScsICcuZGVmYXVsdEJyYW5jaFJlZi5uYW1lJ10pKS50cmltKCk7XG5cbiAgaWYgKCFoZWFkKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCBicmFuY2gnKTtcbiAgfVxuICBpZiAoIWJhc2UpIHtcbiAgICBleGl0V2l0aEVycm9yKCdFcnJvcjogY291bGQgbm90IGRldGVybWluZSBkZWZhdWx0IGJyYW5jaCcpO1xuICB9XG4gIGlmIChoZWFkID09PSBiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IGN1cnJlbnQgYnJhbmNoIGlzIHRoZSBkZWZhdWx0IGJyYW5jaCAoJHtiYXNlfSlgKTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZUFyZ3MgPSBbJ3ByJywgJ2NyZWF0ZScsICctLWJhc2UnLCBiYXNlLCAnLS1oZWFkJywgaGVhZCwgJy0tZmlsbCddO1xuICBpZiAoYm9keSAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICBjcmVhdGVBcmdzLnB1c2goJy0tYm9keS1maWxlJywgJy0nKTtcbiAgfVxuXG4gIHByb2dyZXNzKCdDcmVhdGluZyBwdWxsIHJlcXVlc3QuLi4nKTtcbiAgYXdhaXQgZ2goY3JlYXRlQXJncywgYm9keSk7XG5cbiAgcmV0dXJuIHlhbWxEdW1wKFxuICAgIEpTT04ucGFyc2UoYXdhaXQgZ2goWydwcicsICd2aWV3JywgJy0tanNvbicsICdpZCxudW1iZXIsdGl0bGUsdXJsLHN0YXRlLGlzRHJhZnQsYmFzZVJlZk5hbWUsaGVhZFJlZk5hbWUsYXV0aG9yJ10pKVxuICApO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlUHJCb2R5KGJvZHk6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoYFVwZGF0aW5nIHB1bGwgcmVxdWVzdCAjJHtwck51bWJlcn0gYm9keS4uLmApO1xuICByZXR1cm4gYXdhaXQgdXBkYXRlUHIocHJOdW1iZXIsIFsnLS1ib2R5LWZpbGUnLCAnLSddLCBib2R5KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwZGF0ZVByVGl0bGUodGl0bGU6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoYFVwZGF0aW5nIHB1bGwgcmVxdWVzdCAjJHtwck51bWJlcn0gdGl0bGUuLi5gKTtcbiAgcmV0dXJuIGF3YWl0IHVwZGF0ZVByKHByTnVtYmVyLCBbJy0tdGl0bGUnLCB0aXRsZV0pO1xufVxuXG5hc3luYyBmdW5jdGlvbiB1cGRhdGVQcihwck51bWJlcjogc3RyaW5nLCBlZGl0QXJnczogc3RyaW5nW10sIHN0ZGluRGF0YT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGF3YWl0IGdoKFsncHInLCAnZWRpdCcsIHByTnVtYmVyLCAuLi5lZGl0QXJnc10sIHN0ZGluRGF0YSk7XG5cbiAgcmV0dXJuIHlhbWxEdW1wKFxuICAgIEpTT04ucGFyc2UoXG4gICAgICBhd2FpdCBnaChbXG4gICAgICAgICdwcicsXG4gICAgICAgICd2aWV3JyxcbiAgICAgICAgcHJOdW1iZXIsXG4gICAgICAgICctLWpzb24nLFxuICAgICAgICAnaWQsbnVtYmVyLHRpdGxlLHVybCxzdGF0ZSxpc0RyYWZ0LGJhc2VSZWZOYW1lLGhlYWRSZWZOYW1lLGF1dGhvcixib2R5JyxcbiAgICAgIF0pXG4gICAgKVxuICApO1xufVxuIiwiaW1wb3J0IHtcbiAgY3VycmVudFByTnVtYmVyLFxuICBjdXJyZW50UmVwb1BhcnRzLFxuICBleGl0V2l0aEVycm9yLFxuICBncmFwaHFsLFxuICBwcm9ncmVzcyxcbiAgcmVhZFJlcXVpcmVkU3RkaW5UZXh0LFxuICB5YW1sRHVtcCxcbn0gZnJvbSAnLi9zaGFyZWQuanMnO1xuXG50eXBlIFJldmlld0NvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgZGlmZkh1bms/OiBzdHJpbmcgfCBudWxsO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgUmV2aWV3VGhyZWFkTm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgaXNPdXRkYXRlZD86IGJvb2xlYW4gfCBudWxsO1xuICBwYXRoPzogc3RyaW5nIHwgbnVsbDtcbiAgbGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsTGluZT86IG51bWJlciB8IG51bGw7XG4gIHN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsU3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgY29tbWVudHM6IHtcbiAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICBwYWdlSW5mbzoge1xuICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgIH07XG4gIH07XG59O1xuXG5jb25zdCBSRVZJRVdfVEhSRUFEX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3VGhyZWFkcyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICBpc091dGRhdGVkXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgICBsaW5lXG4gICAgICAgICAgICBvcmlnaW5hbExpbmVcbiAgICAgICAgICAgIHN0YXJ0TGluZVxuICAgICAgICAgICAgb3JpZ2luYWxTdGFydExpbmVcbiAgICAgICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDApIHtcbiAgICAgICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgICAgIGRpZmZIdW5rXG4gICAgICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFJFVklFV19DT01NRU5UX1FVRVJZID0gYFxuICBxdWVyeSgkdGhyZWFkSWQ6IElEISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgbm9kZShpZDogJHRocmVhZElkKSB7XG4gICAgICAuLi4gb24gUHVsbFJlcXVlc3RSZXZpZXdUaHJlYWQge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgZGlmZkh1bmtcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdUaHJlYWRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgnRXJyb3I6IEpTT04gaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nKTtcbiAgY29uc3QgcGF5bG9hZCA9IHBhcnNlUmVwbHlJbnB1dChpbnB1dCk7XG4gIGNvbnN0IG5vcm1hbGl6ZWRSZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gIGZvciAoY29uc3QgW3RocmVhZElkLCBib2R5XSBvZiBPYmplY3QuZW50cmllcyhwYXlsb2FkLnJlcGxpZXMpKSB7XG4gICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgIG5vcm1hbGl6ZWRSZXBsaWVzW3RocmVhZElkXSA9IGJvZHk7XG4gICAgfVxuICB9XG4gIHJldHVybiBub3JtYWxpemVkUmVwbGllcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhcbiAgcXVlcnk6IHN0cmluZyxcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyLFxuICBvblRocmVhZDogKHRocmVhZDogUmV2aWV3VGhyZWFkTm9kZSkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD5cbik6IFByb21pc2U8dm9pZD4ge1xuICBsZXQgY3Vyc29yOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IHJldmlld1RocmVhZHMgPSAoXG4gICAgICBhd2FpdCBncmFwaHFsPHtcbiAgICAgICAgZGF0YT86IHtcbiAgICAgICAgICByZXBvc2l0b3J5Pzoge1xuICAgICAgICAgICAgcHVsbFJlcXVlc3Q/OiB7XG4gICAgICAgICAgICAgIHJldmlld1RocmVhZHM/OiB7XG4gICAgICAgICAgICAgICAgbm9kZXM6IFJldmlld1RocmVhZE5vZGVbXTtcbiAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9PihxdWVyeSwge1xuICAgICAgICBvd25lcixcbiAgICAgICAgbmFtZSxcbiAgICAgICAgbnVtYmVyOiBOdW1iZXIocHJOdW1iZXIpLFxuICAgICAgICBjdXJzb3IsXG4gICAgICB9KVxuICAgICkuZGF0YT8ucmVwb3NpdG9yeT8ucHVsbFJlcXVlc3Q/LnJldmlld1RocmVhZHM7XG5cbiAgICBpZiAoIXJldmlld1RocmVhZHMpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoXG4gICAgICAgICdDb3VsZCBub3QgZmluZCByZXZpZXdUaHJlYWRzIGluIEdyYXBoUUwgcmVzcG9uc2UuIFRoZSBwdWxsIHJlcXVlc3QgbWF5IG5vdCBleGlzdCBvciB0aGVyZSB3YXMgYW4gQVBJIGVycm9yLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCB0aHJlYWQgb2YgcmV2aWV3VGhyZWFkcy5ub2Rlcykge1xuICAgICAgYXdhaXQgb25UaHJlYWQodGhyZWFkKTtcbiAgICB9XG5cbiAgICBpZiAoIXJldmlld1RocmVhZHMucGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY3Vyc29yID0gcmV2aWV3VGhyZWFkcy5wYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuICB9XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzKFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXJcbik6IFByb21pc2U8c3RyaW5nW10+IHtcbiAgY29uc3QgaWRzOiBzdHJpbmdbXSA9IFtdO1xuICBhd2FpdCBwYWdpbmF0ZVJldmlld1RocmVhZHMoUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlksIG93bmVyLCBuYW1lLCBwck51bWJlciwgKHRocmVhZCkgPT4ge1xuICAgIGlmICghdGhyZWFkLmlzUmVzb2x2ZWQpIHtcbiAgICAgIGlkcy5wdXNoKHRocmVhZC5pZCk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGlkcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzKFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXJcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgdW5rbm93bj5bXT4ge1xuICBjb25zdCB0aHJlYWRzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdID0gW107XG5cbiAgYXdhaXQgcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFJFVklFV19USFJFQURfUVVFUlksIG93bmVyLCBuYW1lLCBwck51bWJlciwgYXN5bmMgKHRocmVhZCkgPT4ge1xuICAgIGlmICh0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbW1lbnRzID0gdGhyZWFkLmNvbW1lbnRzLm5vZGVzLm1hcChub3JtYWxpemVDb21tZW50QXV0aG9yKTtcbiAgICBsZXQgcGFnZUluZm8gPSB0aHJlYWQuY29tbWVudHMucGFnZUluZm87XG4gICAgbGV0IGN1cnNvciA9IHBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG5cbiAgICB3aGlsZSAocGFnZUluZm8uaGFzTmV4dFBhZ2UpIHtcbiAgICAgIGNvbnN0IGNvbW1lbnRDb25uZWN0aW9uID0gKFxuICAgICAgICBhd2FpdCBncmFwaHFsPHtcbiAgICAgICAgICBkYXRhPzoge1xuICAgICAgICAgICAgbm9kZT86IHtcbiAgICAgICAgICAgICAgY29tbWVudHM/OiB7XG4gICAgICAgICAgICAgICAgbm9kZXM6IFJldmlld0NvbW1lbnROb2RlW107XG4gICAgICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICAgIGhhc05leHRQYWdlOiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9PihSRVZJRVdfQ09NTUVOVF9RVUVSWSwgeyB0aHJlYWRJZDogdGhyZWFkLmlkLCBjdXJzb3IgfSlcbiAgICAgICkuZGF0YT8ubm9kZT8uY29tbWVudHM7XG5cbiAgICAgIGlmICghY29tbWVudENvbm5lY3Rpb24pIHtcbiAgICAgICAgZXhpdFdpdGhFcnJvcihgQ291bGQgbm90IGZpbmQgY29tbWVudHMgaW4gR3JhcGhRTCByZXNwb25zZSBmb3IgdGhyZWFkICR7dGhyZWFkLmlkfS5gKTtcbiAgICAgIH1cblxuICAgICAgY29tbWVudHMucHVzaCguLi5jb21tZW50Q29ubmVjdGlvbi5ub2Rlcy5tYXAobm9ybWFsaXplQ29tbWVudEF1dGhvcikpO1xuICAgICAgcGFnZUluZm8gPSBjb21tZW50Q29ubmVjdGlvbi5wYWdlSW5mbztcbiAgICAgIGN1cnNvciA9IHBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgdGhyZWFkcy5wdXNoKHtcbiAgICAgIGlkOiB0aHJlYWQuaWQsXG4gICAgICBpc1Jlc29sdmVkOiB0aHJlYWQuaXNSZXNvbHZlZCxcbiAgICAgIGlzT3V0ZGF0ZWQ6IHRocmVhZC5pc091dGRhdGVkLFxuICAgICAgcGF0aDogdGhyZWFkLnBhdGgsXG4gICAgICBsaW5lOiB0aHJlYWQubGluZSxcbiAgICAgIG9yaWdpbmFsTGluZTogdGhyZWFkLm9yaWdpbmFsTGluZSxcbiAgICAgIHN0YXJ0TGluZTogdGhyZWFkLnN0YXJ0TGluZSxcbiAgICAgIG9yaWdpbmFsU3RhcnRMaW5lOiB0aHJlYWQub3JpZ2luYWxTdGFydExpbmUsXG4gICAgICBjb21tZW50cyxcbiAgICB9KTtcbiAgfSk7XG5cbiAgcmV0dXJuIHRocmVhZHM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0UHJSZXZpZXdUaHJlYWRzKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoJ0ZldGNoaW5nIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMuLi4nKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgdW5yZXNvbHZlZF90aHJlYWRzOiBhd2FpdCB1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcbiAgY29uc3QgdW5yZXNvbHZlZElkcyA9IG5ldyBTZXQoYXdhaXQgdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpKTtcblxuICBwcm9ncmVzcyhgUmVwbHlpbmcgdG8gJHtPYmplY3Qua2V5cyhyZXBsaWVzKS5sZW5ndGh9IHJldmlldyB0aHJlYWRzLi4uYCk7XG5cbiAgY29uc3QgcmVzb2x2ZWRUaHJlYWRJZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhyZXBsaWVzKTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgW3RocmVhZElkLCBib2R5XV0gb2YgZW50cmllcy5lbnRyaWVzKCkpIHtcbiAgICBwcm9ncmVzcyhgUHJvY2Vzc2luZyAke2luZGV4ICsgMX0vJHtlbnRyaWVzLmxlbmd0aH06ICR7dGhyZWFkSWR9YCk7XG4gICAgaWYgKCF1bnJlc29sdmVkSWRzLmhhcyh0aHJlYWRJZCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ3JhcGhxbDx7XG4gICAgICBkYXRhPzoge1xuICAgICAgICByZXNvbHZlUmV2aWV3VGhyZWFkPzoge1xuICAgICAgICAgIHRocmVhZD86IHtcbiAgICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgICBpc1Jlc29sdmVkOiBib29sZWFuO1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH0+KFxuICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkdGhyZWFkSWQ6IElEISwgJGJvZHk6IFN0cmluZyEpIHtcbiAgICAgICAgICBhZGRQdWxsUmVxdWVzdFJldmlld1RocmVhZFJlcGx5KGlucHV0OiB7cHVsbFJlcXVlc3RSZXZpZXdUaHJlYWRJZDogJHRocmVhZElkLCBib2R5OiAkYm9keX0pIHtcbiAgICAgICAgICAgIGNvbW1lbnQge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZVJldmlld1RocmVhZChpbnB1dDoge3RocmVhZElkOiAkdGhyZWFkSWR9KSB7XG4gICAgICAgICAgICB0aHJlYWQge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgeyB0aHJlYWRJZCwgYm9keSB9XG4gICAgKTtcblxuICAgIGlmIChyZXNwb25zZS5kYXRhPy5yZXNvbHZlUmV2aWV3VGhyZWFkPy50aHJlYWQ/LmlzUmVzb2x2ZWQpIHtcbiAgICAgIHJlc29sdmVkVGhyZWFkSWRzLnB1c2godGhyZWFkSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9ncmVzcyhgV2FybmluZzogZmFpbGVkIHRvIHJlc29sdmUgdGhyZWFkICR7dGhyZWFkSWR9LmApO1xuICAgIH1cbiAgfVxuXG4gIHByb2dyZXNzKCdEb25lLicpO1xuICByZXR1cm4geWFtbER1bXAoeyByZXNvbHZlZF90aHJlYWRfaWRzOiByZXNvbHZlZFRocmVhZElkcyB9KTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tbWVudEF1dGhvcihjb21tZW50OiBSZXZpZXdDb21tZW50Tm9kZSk6IFJldmlld0NvbW1lbnROb2RlICYgeyBhdXRob3I/OiBzdHJpbmcgfCBudWxsIH0ge1xuICByZXR1cm4ge1xuICAgIC4uLmNvbW1lbnQsXG4gICAgYXV0aG9yOiB0eXBlb2YgY29tbWVudC5hdXRob3IgPT09ICdzdHJpbmcnID8gY29tbWVudC5hdXRob3IgOiAoY29tbWVudC5hdXRob3I/LmxvZ2luID8/IG51bGwpLFxuICB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlcGx5SW5wdXQoaW5wdXQ6IHN0cmluZyk6IHsgcmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfSB7XG4gIGNvbnN0IGVycm9yUHJlZml4ID0gJ0Vycm9yOiBJbnZhbGlkIGlucHV0IGZvcm1hdCBvbiBzdGRpbic7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGlucHV0KSBhcyB1bmtub3duO1xuICAgIGlmICghaXNSZXBseUlucHV0KHBhcnNlZCkpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoYCR7ZXJyb3JQcmVmaXh9OiBleHBlY3RlZCBhbiBvYmplY3Qgd2l0aCBhIHN0cmluZy12YWx1ZWQgXFxgcmVwbGllc1xcYCBtYXBgLCAyKTtcbiAgICB9XG4gICAgcmV0dXJuIHBhcnNlZDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IEludmFsaWQgSlNPTiBwcm92aWRlZCBvbiBzdGRpbjogJHtlcnJvci5tZXNzYWdlfWAsIDIpO1xuICAgIH1cbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1JlcGx5SW5wdXQodmFsdWU6IHVua25vd24pOiB2YWx1ZSBpcyB7IHJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+IH0ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJlcGxpZXMgPSAodmFsdWUgYXMgeyByZXBsaWVzPzogdW5rbm93biB9KS5yZXBsaWVzO1xuICBpZiAodHlwZW9mIHJlcGxpZXMgIT09ICdvYmplY3QnIHx8IHJlcGxpZXMgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShyZXBsaWVzKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QudmFsdWVzKHJlcGxpZXMpLmV2ZXJ5KChyZXBseSkgPT4gcmVwbHkgPT09IG51bGwgfHwgcmVwbHkgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgcmVwbHkgPT09ICdzdHJpbmcnKTtcbn1cbiIsImltcG9ydCB7IGZldGNoSXNzdWVNZXNzYWdlcyB9IGZyb20gJy4uL3ByL3ByQ29tbWFuZHMuanMnO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gYnVpbGRQbGFuUHJvbXB0KGlzc3VlTnVtYmVyOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBpc3N1ZVlhbWwgPSBhd2FpdCBmZXRjaElzc3VlTWVzc2FnZXMoaXNzdWVOdW1iZXIpO1xuXG4gIHJldHVybiBgXG5QbGFuIGEgR2l0SHViIGlzc3VlIGJ5IGdhdGhlcmluZyBjb250ZXh0LCB3cml0aW5nIGEgc3BlY2lmaWNhdGlvbiBmb3Igc29mdHdhcmUgZW5naW5lZXJzLCBhbmQgcG9zdGluZyBvciB1cGRhdGluZyB0aGF0IHNwZWNpZmljYXRpb24gYmFjayB0byB0aGUgaXNzdWUuXG5UaGUgdGFyZ2V0IGlzc3VlIG51bWJlciBpcyAjJHtpc3N1ZU51bWJlcn0uIEhlcmUgaXMgdGhlIGZldGNoZWQgaXNzdWUgY29udGV4dCBhcyBZQU1MOlxufn5+fnlhbWxcbiR7aXNzdWVZYW1sLnRyaW0oKX1cbn5+fn5cblxuRm9sbG93IHRoaXMgd29ya2Zsb3c6XG4xLiBSZWFkIHRoZSBhYm92ZSBpc3N1ZSBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBjYXJlZnVsbHkuXG4yLiBDb2xsZWN0IGVub3VnaCBzdXBwb3J0aW5nIGluZm9ybWF0aW9uIGJlZm9yZSB3cml0aW5nIHRoZSBzcGVjaWZpY2F0aW9uOlxuICAgLSBJbnNwZWN0IHRoZSByZWxldmFudCBjb2RlLCBzdXJyb3VuZGluZyBjYWxsIHNpdGVzLCByZWxhdGVkIHR5cGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbiwgcmVjZW50IGRpZmZzLCBhbmQgYW55IG90aGVyIGxvY2FsIGNvbnRleHQgbmVlZGVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZS5cbiAgIC0gSWYgY29kZSBpbnNwZWN0aW9uIGlzIGVub3VnaCwgdXNlIHRoZSBjdXJyZW50IGNvZGViYXNlIGFzIHRoZSBwcmltYXJ5IGV2aWRlbmNlLlxuICAgLSBJZiB0aGUgaXNzdWUgZGVwZW5kcyBvbiBydW50aW1lIGJlaGF2aW9yLCByZXByb2R1Y2UgaXQgd2l0aCB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGV4cGVyaW1lbnQsIHN1Y2ggYXMgYSBmb2N1c2VkIGNvbW1hbmQsIGEgdGlueSBzY3JpcHQsIGEgdGVtcG9yYXJ5IGxvY2FsIGFzc2VydGlvbiwgb3IgYW5vdGhlciBuYXJyb3cgY2hlY2sgdGhhdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGludGVuZGVkIGJlaGF2aW9yLlxuICAgICAtIERvbid0IGZvcmdldCB0byBjbGVhbiB1cCBhbnkgdGVtcG9yYXJ5IGZpbGVzLlxuICAgLSBJZiB0aGUgaXNzdWUgZGVwZW5kcyBvbiBhIGxpYnJhcnksIEFQSSwgb3IgbGFuZ3VhZ2UgZmVhdHVyZSwgY29uZmlybSBpdCBhZ2FpbnN0IHRoZSBsYXRlc3Qgb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBvciBhbm90aGVyIHByaW1hcnkgc291cmNlIGluc3RlYWQgb2YgcmVseWluZyBvbiBtZW1vcnkuXG4zLiBXcml0ZSB0aGUgc3BlY2lmaWNhdGlvbiBmb3IgdGhlIGlzc3VlIGNvbW1lbnQuXG4gICAtIFdyaXRlIHRoZSBiYWNrZ3JvdW5kIGJhc2VkIG9uIHRoZSBjb2xsZWN0ZWQgaW5mb3JtYXRpb24uXG4gICAtIERlZmluZSBhIGdvYWwgdGhhdCBjbGVhcmx5IGd1aWRlcyBvdXIgaW1wbGVtZW50YXRpb24gaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbi5cbiAgIC0gV3JpdGUgYSBkZXRhaWxlZCBzcGVjaWZpY2F0aW9uIGluY29ycG9yYXRpbmcgdGhlIGV2aWRlbmNlIHlvdSBjb2xsZWN0ZWQuXG4gICAtIElmIG5lZWRlZCwgaW5jbHVkZSBjb2RlIHNuaXBwZXRzIHRoYXQgZXhwbGFpbiBob3cgdG8gdXNlIGxpYnJhcmllcyBvciBBUElzLCBhbG9uZyB3aXRoIHJlZmVyZW5jZXMgdG8gdGhlaXIgZG9jdW1lbnRhdGlvbi5cbjQuIFBvc3QgdGhlIHNwZWNpZmljYXRpb24gYmFjayB0byBpc3N1ZSAjJHtpc3N1ZU51bWJlcn0sIHRoZW4gcHJpbnQgdGhlIGlzc3VlIFVSTC5cbiAgIC0gSWYgdGhlIGlzc3VlIGFscmVhZHkgaGFzIGEgc3BlY2lmaWNhdGlvbiwgdXBkYXRlIHRoZSBleGlzdGluZyBjb21tZW50IGluc3RlYWQgb2YgcG9zdGluZyBhIG5ldyBvbmUuXG5cbkZvcm1hdCB0aGUgaXNzdWUgY29tbWVudCBleGFjdGx5IGxpa2UgdGhpcywgYnV0IGRvIG5vdCBpbmNsdWRlIHRoZSBzdXJyb3VuZGluZyBcXGB+fn5+XFxgIGZlbmNlcyBpbiB0aGUgYWN0dWFsIGNvbW1lbnQ6XG5+fn5+XG4jIyBCYWNrZ3JvdW5kXG5cbltTdW1tYXJpemUgdGhlIGN1cnJlbnQgYmVoYXZpb3IgYW5kIGV4cGxhaW4gdGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoaXMgaXNzdWVdXG5cbiMjIEdvYWxcblxuW0RlZmluZSB0aGUgZ29hbCB3ZSB3YW50IHRvIGFjaGlldmUgaW4gdGhpcyBpc3N1ZV1cblxuIyMgU3BlY2lmaWNhdGlvblxuXG5bRGV0YWlsZWQgc3BlY2lmaWNhdGlvbiBmb3Igc29mdHdhcmUgZW5naW5lZXJzXVxuXG4jIyBLZXkgVGVjaG5vbG9naWVzIChPTkxZIGlmIGV4dGVybmFsIHJlc291cmNlcyBhcmUgbmVlZGVkKVxuXG5bRGVzY3JpYmUgd2hhdCBsaWJyYXJpZXMgb3IgQVBJcyB3ZSBzaG91bGQgdXNlLCBpbmNsdWRpbmcgY29uY3JldGUgdmVyc2lvbnMgYW5kIGNvZGUgc25pcHBldHMuXVxuXG5+fn5+XG5gLnRyaW0oKTtcbn1cbiIsImV4cG9ydCBmdW5jdGlvbiBidWlsZE1lcmdlQmFzZUNvbW1hbmQoYmFzZUJyYW5jaDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBnaXQgbWVyZ2UtYmFzZSAke3NoZWxsUXVvdGUoYG9yaWdpbi8ke2Jhc2VCcmFuY2h9YCl9IEhFQUQgMj4vZGV2L251bGwgfHwgZ2l0IG1lcmdlLWJhc2UgJHtzaGVsbFF1b3RlKGJhc2VCcmFuY2gpfSBIRUFEYDtcbn1cblxuZnVuY3Rpb24gc2hlbGxRdW90ZSh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGAnJHt2YWx1ZS5yZXBsYWNlQWxsKFwiJ1wiLCBcIidcXFwiJ1xcXCInXCIpfSdgO1xufVxuIiwiaW1wb3J0IHsgZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlIH0gZnJvbSAnLi4vcHIvcHJDb21tYW5kcy5qcyc7XG5pbXBvcnQgeyBjdXJyZW50QmFzZUJyYW5jaCB9IGZyb20gJy4uL3JlcG8vZGVmYXVsdEJyYW5jaC5qcyc7XG5pbXBvcnQgeyBOT19DT05DRVJOX01FU1NBR0UgfSBmcm9tICcuLi9yZXZpZXcvbm9Db25jZXJuLmpzJztcbmltcG9ydCB7IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZCB9IGZyb20gJy4vYmFzZUJyYW5jaERpZmZDb21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkUmV2aWV3UHJvbXB0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGJhc2VCcmFuY2ggPSBhd2FpdCBjdXJyZW50QmFzZUJyYW5jaCgpO1xuICBjb25zdCBtZXJnZUJhc2VDb21tYW5kID0gYnVpbGRNZXJnZUJhc2VDb21tYW5kKGJhc2VCcmFuY2gpO1xuICBjb25zdCBwckNvbnRleHQgPSBhd2FpdCBmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUoKTtcbiAgcmV0dXJuIGBcblJldmlldyB0aGUgY3VycmVudCAke3ByQ29udGV4dCA/ICdwdWxsIHJlcXVlc3QnIDogJ2JyYW5jaCd9IGFnYWluc3QgaXRzIGJhc2UgYnJhbmNoICR7YmFzZUJyYW5jaH0gdmlhIFxcYGdpdCBkaWZmIFwiJCgke21lcmdlQmFzZUNvbW1hbmR9KVwiXFxgLlxuRm9yIGVhY2ggZmluZGluZywgZG8gdGhlIGZvbGxvd2luZyB0aHJlZSBzdGVwczpcbjEuIEdhdGhlciBzdXBwb3J0aW5nIGV2aWRlbmNlOlxuICAgLSBJbnNwZWN0IHRoZSByZWZlcmVuY2VkIGNvZGUgYW5kIHRoZSBzdXJyb3VuZGluZyBjYWxsIHNpdGVzLCByZWxhdGVkIHR5cGVzLCB0ZXN0cywgY29uZmlndXJhdGlvbiwgYW5kIHJlY2VudCBkaWZmcyB3aGVuIHRoZXkgYWZmZWN0IHRoZSBjbGFpbS5cbiAgIC0gSWYgY29kZSBpbnNwZWN0aW9uIGlzIGVub3VnaCwgdXNlIHRoZSBjdXJyZW50IGNvZGViYXNlIGFzIHRoZSBwcmltYXJ5IGV2aWRlbmNlLlxuICAgLSBJZiB0aGUgZmluZGluZyBpcyBhYm91dCBydW50aW1lIGJlaGF2aW9yLCByZXByb2R1Y2UgaXQgd2l0aCB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGV4cGVyaW1lbnQsIHN1Y2ggYXMgYSBmb2N1c2VkIGNvbW1hbmQsIGEgdGlueSBzY3JpcHQsIGEgdGVtcG9yYXJ5IGxvY2FsIGFzc2VydGlvbiwgb3IgYW5vdGhlciBuYXJyb3cgY2hlY2sgdGhhdCBkb2VzIG5vdCBjaGFuZ2UgdGhlIGludGVuZGVkIGJlaGF2aW9yLlxuICAgLSBJZiB0aGUgZmluZGluZyBkZXBlbmRzIG9uIGZyYW1ld29yaywgbGlicmFyeSwgcGxhdGZvcm0sIG9yIGxhbmd1YWdlIGJlaGF2aW9yLCBjb25maXJtIGl0IGFnYWluc3QgdGhlIGxhdGVzdCBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIG9yIGFub3RoZXIgcHJpbWFyeSBzb3VyY2UgaW5zdGVhZCBvZiByZWx5aW5nIG9uIG1lbW9yeS5cbjIuIEp1ZGdlIHdoZXRoZXIgdGhlIGZpbmRpbmcgaXMgdmFsaWQ6XG4gICAtIE1hcmsgaXQgdmFsaWQgb25seSB3aGVuIHRoZSBhdmFpbGFibGUgZXZpZGVuY2Ugc2hvd3MgdGhlIHJlcG9ydGVkIGlzc3VlIGlzIHN0aWxsIHJlYWwgaW4gdGhlIGN1cnJlbnQgY29kZWJhc2UuXG4gICAtIE90aGVyd2lzZSwgbWFyayBpdCBub3QgdmFsaWQuXG4zLiBQcm9wb3NlIGEgZml4IHdpdGhvdXQgbW9kaWZ5aW5nIHRoZSBjb2RlOlxuICAgLSBEZXNjcmliZSB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGNoYW5nZSB0aGF0IHdvdWxkIGFkZHJlc3MgdGhlIGZpbmRpbmcuXG4gICAtIEludmVzdGlnYXRlIHRoZSBsaWtlbHkgaW1wYWN0IG9mIHRoYXQgY2hhbmdlIGJ5IGluc3BlY3RpbmcgdGhlIGFmZmVjdGVkIGNhbGwgc2l0ZXMsIHJlbGF0ZWQgdHlwZXMsIHRlc3RzLCBjb25maWd1cmF0aW9uLCBhbmQgYWRqYWNlbnQgYmVoYXZpb3IsIGFuZCBub3RlIGFueSBmb2xsb3ctdXAgY2hhbmdlcyBvciByaXNrcyB0aGUgZml4IHdvdWxkIG5lZWQgdG8gYWNjb3VudCBmb3IuXG5cblJlcG9ydCBvbmx5IHRoZSB2YWxpZCBmaW5kaW5ncywgdGhlIGV2aWRlbmNlIGZvciBlYWNoIG9uZSwgYW5kIHRoZSBwcm9wb3NlZCBmaXggd2l0aCBpdHMgbGlrZWx5IGltcGFjdC4gSW5jbHVkZSBhIGJyaWVmIGp1c3RpZmljYXRpb24gZm9yIGVhY2gsIGNpdGluZyB0aGUgZXZpZGVuY2UgdXNlZCAoZS5nLiwgYSBmYWlsaW5nIHNjZW5hcmlvLCBleHBlcmltZW50IHJlc3VsdCwgb3Igb2ZmaWNpYWwgZG9jdW1lbnRhdGlvbikuIERvIG5vdCBtb2RpZnkgdGhlIGNvZGUuXG5JZiB0aGVyZSBhcmUgbm8gdmFsaWQgZmluZGluZ3MsIHJlc3BvbmQgZXhhY3RseSB3aXRoOiBcXGAke05PX0NPTkNFUk5fTUVTU0FHRX1cXGBcblxuJHtidWlsZFByQ29udGV4dEluc3RydWN0aW9ucyhwckNvbnRleHQpfVxuYC50cmltKCk7XG59XG5cbmZ1bmN0aW9uIGJ1aWxkUHJDb250ZXh0SW5zdHJ1Y3Rpb25zKHByQ29udGV4dDogc3RyaW5nIHwgdW5kZWZpbmVkKTogc3RyaW5nIHtcbiAgcmV0dXJuIHByQ29udGV4dFxuICAgID8gYEN1cnJlbnQgcHVsbCByZXF1ZXN0IGNvbnRleHQ6XG5+fn5+eWFtbFxuJHtwckNvbnRleHQudHJpbSgpfVxufn5+flxuYC50cmltKClcbiAgICA6ICcnO1xufVxuIiwiZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkU2NyZWVuc2hvdFByb21wdChpbml0aWFsVXJsOiBzdHJpbmcsIHBhZ2VOYW1lOiBzdHJpbmcsIHNjcmVlbnNob3REZXNjcmlwdGlvbjogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3Qgc2FuaXRpemVkRGVzY3JpcHRpb24gPSBzY3JlZW5zaG90RGVzY3JpcHRpb24ucmVwbGFjZUFsbCgnXFxuJywgJyAnKS5yZXBsYWNlQWxsKCdcIicsIFwiJ1wiKTtcbiAgcmV0dXJuIGBcblVzZSBcXGBwbGF5d3JpZ2h0LWNsaVxcYCBza2lsbCB0byB0YWtlIGEgc2NyZWVuc2hvdCBvZiBcIiR7c2FuaXRpemVkRGVzY3JpcHRpb259XCIgYnkgbmF2aWdhdGluZyBmcm9tICR7aW5pdGlhbFVybH0gdG8gXCIke3BhZ2VOYW1lfVwiIHBhZ2UuXG5cbkZvbGxvdyB0aGlzIHdvcmtmbG93OlxuMS4gT3BlbiB0aGUgaW5pdGlhbCBwYWdlIGF0ICR7aW5pdGlhbFVybH0uXG4yLiBOYXZpZ2F0ZSBmcm9tIHRoYXQgaW5pdGlhbCBwYWdlIHVudGlsIHlvdSByZWFjaCB0aGUgcGFnZSBpZGVudGlmaWVkIGFzICR7cGFnZU5hbWV9LlxuICAgLSBJZiBjb2RlIGVycm9ycywgcnVudGltZSBmYWlsdXJlcywgb3IgYnJva2VuIFVJIGZsb3dzIHByZXZlbnQgbmF2aWdhdGlvbiwgaW52ZXN0aWdhdGUgdGhlIGNhdXNlIGluIHRoZSBsb2NhbCBjb2RlYmFzZSwgbWFrZSB0aGUgc21hbGxlc3QgcHJhY3RpY2FsIGNvZGUgZml4LCBhbmQgdmVyaWZ5IHRoYXQgdGhlIHBhZ2UgY2FuIG5vdyBiZSByZWFjaGVkIGJlZm9yZSBjb250aW51aW5nLlxuICAgLSBJZiB5b3UgY2Fubm90IGZpeCB0aGUgZXJyb3JzLCByZXBvcnQgb24gdGhlIGVycm9ycyB0aGVuIHN0b3AuXG4zLiBDYXB0dXJlIGEgc2NyZWVuc2hvdCB0aGF0IGZvY3VzZXMgb24gdGhpcyB0YXJnZXQ6IFwiJHtzYW5pdGl6ZWREZXNjcmlwdGlvbn1cIi5cbjQuIEtlZXAgdGhlIGdlbmVyYXRlZCBpbWFnZSBhcnRpZmFjdCBhbmQgcmVwb3J0IHRoZSBzY3JlZW5zaG90IGZpbGUgcGF0aCBwbHVzIGEgYnJpZWYgZGVzY3JpcHRpb24gb2Ygd2hhdCB3YXMgY2FwdHVyZWQuIElmIHlvdSBoYWQgdG8gZml4IGNvZGUgZmlyc3QsIGFsc28gc3VtbWFyaXplIHRoZSBmaXguXG5gLnRyaW0oKTtcbn1cbiIsImltcG9ydCB7IGN1cnJlbnRCYXNlQnJhbmNoIH0gZnJvbSAnLi4vcmVwby9kZWZhdWx0QnJhbmNoLmpzJztcbmltcG9ydCB7IGJ1aWxkTWVyZ2VCYXNlQ29tbWFuZCB9IGZyb20gJy4vYmFzZUJyYW5jaERpZmZDb21tYW5kLmpzJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgYmFzZUJyYW5jaCA9IGF3YWl0IGN1cnJlbnRCYXNlQnJhbmNoKCk7XG4gIGNvbnN0IG1lcmdlQmFzZUNvbW1hbmQgPSBidWlsZE1lcmdlQmFzZUNvbW1hbmQoYmFzZUJyYW5jaCk7XG4gIHJldHVybiBgXG5TaW1wbGlmeSB0aGUgY3VycmVudCBicmFuY2ggYWdhaW5zdCBpdHMgYmFzZSBicmFuY2ggdXNpbmcgXFxgZ2l0IGRpZmYgXCIkKCR7bWVyZ2VCYXNlQ29tbWFuZH0pXCJcXGAuXG5GaXJzdCwgaW5zcGVjdCB0aGUgZGlmZiBhbmQgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBlYWNoIGNoYW5nZWQgYXJlYS4gVGhpcyBpbmNsdWRlcyBuZWFyYnkgZnVuY3Rpb25zLCB0eXBlcywgY2FsbCBzaXRlcywgdGVzdHMsIGNvbmZpZ3VyYXRpb25zLCBhbmQgYW55IG90aGVyIGZpbGVzIHRoYXQgaGVscCBkZXRlcm1pbmUgaWYgdGhlIGNoYW5nZSBpcyB0cnVseSBuZWNlc3NhcnkuXG5MZXZlcmFnZSB0aGlzIGNvbnRleHQgdG8gaWRlbnRpZnkgcmVkdW5kYW5jaWVzIHRoYXQgY2FuIGJlIHNhZmVseSByZW1vdmVkIG9yIHNpbXBsaWZpZWQuIExvb2sgZm9yIGR1cGxpY2F0ZSBsb2dpYywgcmVwZWF0ZWQgY29uZGl0aW9uYWxzLCB1bm5lY2Vzc2FyeSBhYnN0cmFjdGlvbnMsIG92ZXJsYXBwaW5nIGNvZGUgcGF0aHMsIGRlYWQgY29kZSwgb3IgZWRpdHMgbWFkZSBvYnNvbGV0ZSB1cG9uIHVuZGVyc3RhbmRpbmcgdGhlIGJyb2FkZXIgY29udGV4dC5cblxuUHJpb3JpdGl6ZSBzaW1wbGlmaWNhdGlvbnMgdGhhdCByZWR1Y2UgdGhlIHJldmlld2VyJ3MgYnVyZGVuLCBzdWNoIGFzOlxuLSBSZW1vdmluZyByZWR1bmRhbnQgZWRpdHMgb3IgZGVhZCBjb2RlLlxuLSBFbGltaW5hdGluZyBvciBtZXJnaW5nIGR1cGxpY2F0ZWQgbG9naWMgZGlzY292ZXJlZCBieSBjb21wYXJpbmcgdGhlIGRpZmYgd2l0aCByZWxhdGVkIGNvZGUuXG4tIEZsYXR0ZW5pbmcgdW5uZWNlc3NhcmlseSBjb21wbGV4IGxvZ2ljIGludHJvZHVjZWQgaW4gdGhlIGRpZmYgKGUuZy4sIHVzaW5nIGVhcmx5IHJldHVybnMgdG8gcmVkdWNlIG5lc3RpbmcsIHNpbXBsaWZ5aW5nIGJvb2xlYW4gZXhwcmVzc2lvbnMsIG9yIHJlbW92aW5nIHJlZHVuZGFudCB3cmFwcGVyIGZ1bmN0aW9ucykuXG5cbkNvbW1pdCBhbmQgcHVzaCB5b3VyIGNoYW5nZXMuIEFmdGVyd2FyZCwgc3VtbWFyaXplIHRoZSByZWR1bmRhbmNpZXMgb3IgdW5uZWNlc3NhcnkgY29tcGxleGl0eSB5b3UgaGF2ZSByZW1vdmVkLlxuYC50cmltKCk7XG59XG4iLCJpbXBvcnQgeyBmaWxlVVJMVG9QYXRoIH0gZnJvbSAnbm9kZTp1cmwnO1xuaW1wb3J0IHsgcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyB9IGZyb20gJy4uL3Byb2Nlc3MvcnVuQ29tbWFuZC5qcyc7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpbnN0YWxsUGFja2VkU2tpbGxzKCk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBydW5Db21tYW5kV2l0aFByb2dyZXNzKFxuICAgIFtcbiAgICAgICdidW54JyxcbiAgICAgICdza2lsbHNAbGF0ZXN0JyxcbiAgICAgICdhZGQnLFxuICAgICAgZmlsZVVSTFRvUGF0aChuZXcgVVJMKCcuLi8uLicsIGltcG9ydC5tZXRhLnVybCkpLFxuICAgICAgJy0tZ2xvYmFsJyxcbiAgICAgICctLXllcycsXG4gICAgICAnLS1za2lsbCcsXG4gICAgICAnKicsXG4gICAgICAnLS1hZ2VudCcsXG4gICAgICAnY2xhdWRlLWNvZGUnLFxuICAgICAgJy0tYWdlbnQnLFxuICAgICAgJ2NvZGV4JyxcbiAgICAgICctLWFnZW50JyxcbiAgICAgICdnZW1pbmktY2xpJyxcbiAgICBdLFxuICAgIHtcbiAgICAgIHdhaXRNZXNzYWdlOiAnSW5zdGFsbGluZyBwYWNrYWdlZCBza2lsbHMgZ2xvYmFsbHkuJyxcbiAgICB9XG4gICk7XG59XG4iLCIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gJ2NvbW1hbmRlcic7XG5pbXBvcnQge1xuICBjb250YWluc05vQ29uY2VyblNlbnRlbmNlLFxuICBkaXNwbGF5QWdlbnROYW1lLFxuICBydW5BZ2VudENvbW1hbmQsXG4gIHJ1bkFsbEFnZW50Q29tbWFuZHMsXG59IGZyb20gJy4vYWdlbnQvYWdlbnRDb21tYW5kcy5qcyc7XG5pbXBvcnQge1xuICBjaGVja1ByQ2ksXG4gIGZldGNoSXNzdWVNZXNzYWdlcyxcbiAgZmV0Y2hQck1lc3NhZ2VzLFxuICBsaXN0UHJSZXZpZXdUaHJlYWRzLFxuICBub3JtYWxpemVJc3N1ZU51bWJlcixcbiAgb3BlblByLFxuICByZWFkUmVwbGllc0Zyb21TdGRpbixcbiAgcmVhZFJlcXVpcmVkU3RkaW5UZXh0LFxuICByZWFkU3RkaW5UZXh0LFxuICByZXNvbHZlUHJSZXZpZXdUaHJlYWRzLFxuICB1cGRhdGVQckJvZHksXG4gIHVwZGF0ZVByVGl0bGUsXG59IGZyb20gJy4vcHIvcHJDb21tYW5kcy5qcyc7XG5pbXBvcnQgeyBidWlsZFBsYW5Qcm9tcHQgfSBmcm9tICcuL3Byb21wdHMvcGxhblByb21wdC5qcyc7XG5pbXBvcnQgeyBidWlsZFJldmlld1Byb21wdCB9IGZyb20gJy4vcHJvbXB0cy9yZXZpZXdQcm9tcHQuanMnO1xuaW1wb3J0IHsgYnVpbGRTY3JlZW5zaG90UHJvbXB0IH0gZnJvbSAnLi9wcm9tcHRzL3NjcmVlbnNob3RQcm9tcHQuanMnO1xuaW1wb3J0IHsgYnVpbGRTaW1wbGlmeVByb21wdCB9IGZyb20gJy4vcHJvbXB0cy9zaW1wbGlmeVByb21wdC5qcyc7XG5pbXBvcnQgeyBpbnN0YWxsUGFja2VkU2tpbGxzIH0gZnJvbSAnLi9za2lsbHMvaW5zdGFsbFNraWxscy5qcyc7XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtLm5hbWUoJ2FnZW50LXNraWxscycpLmRlc2NyaXB0aW9uKCdDTEkgY29tbWFuZHMgZm9yIHRoZSBza2lsbHMgaW4gdGhpcyByZXBvc2l0b3J5Jykuc2hvd0hlbHBBZnRlckVycm9yKCk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2luc3RhbGwtc2tpbGxzJylcbiAgLmRlc2NyaXB0aW9uKCdJbnN0YWxsIGFsbCBwYWNrYWdlZCBza2lsbHMgZ2xvYmFsbHkgZm9yIENsYXVkZSBDb2RlLCBDb2RleCwgYW5kIEdlbWluaSBDTEknKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGluc3RhbGxQYWNrZWRTa2lsbHMoKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZSgnRG9uZVxcbicpO1xuICB9KTtcblxuYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCh7XG4gIG5hbWU6ICdyZXZpZXcnLFxuICBkZXNjcmlwdGlvbjogJ1J1biByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2ggd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQnLFxuICBvcHRpb25EZXNjcmlwdGlvbjogJ1VzZSBhIHJldmlldyBhZ2VudCcsXG4gIGNob2ljZXM6IFsnYWxsJywgJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgcnVuOiAobW9kZSkgPT5cbiAgICBtb2RlID09PSAnYWxsJ1xuICAgICAgPyBydW5BbGxBZ2VudENvbW1hbmRzKGJ1aWxkUmV2aWV3UHJvbXB0KCksIHtcbiAgICAgICAgICBhbGxBZ2VudHNMYWJlbDogJ3JldmlldyBhZ2VudHMnLFxuICAgICAgICAgIG1hcE91dHB1dDogKGFnZW50LCBvdXRwdXQpID0+IHtcbiAgICAgICAgICAgIGlmIChjb250YWluc05vQ29uY2VyblNlbnRlbmNlKG91dHB1dCkpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBgIyMgJHtkaXNwbGF5QWdlbnROYW1lKGFnZW50KX1cXG5cXG4ke291dHB1dH1gO1xuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICA6IHJ1bkFnZW50Q29tbWFuZChtb2RlLCBidWlsZFJldmlld1Byb21wdCgpKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3Jldmlldy1jb2RleCcsICdSdW4gQ29kZXggcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjb2RleCcsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctY2xhdWRlJywgJ1J1biBDbGF1ZGUgQ29kZSByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkUmV2aWV3UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdyZXZpZXctZ2VtaW5pJywgJ1J1biBHZW1pbmkgQ0xJIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnZ2VtaW5pJywgYnVpbGRSZXZpZXdQcm9tcHQoKSlcbik7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAncGxhbicsXG4gIGRlc2NyaXB0aW9uOiAnUnVuIHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZSB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgcGxhbm5pbmcgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2FsbCcsICdjb2RleCcsICdjbGF1ZGUnLCAnZ2VtaW5pJ10sXG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChtb2RlLCBpc3N1ZVJlZmVyZW5jZSkgPT5cbiAgICBtb2RlID09PSAnYWxsJ1xuICAgICAgPyBydW5BbGxBZ2VudENvbW1hbmRzKGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpLCB7XG4gICAgICAgICAgYWxsQWdlbnRzTGFiZWw6ICdwbGFubmluZyBhZ2VudHMnLFxuICAgICAgICB9KVxuICAgICAgOiBydW5BZ2VudENvbW1hbmQobW9kZSwgYnVpbGRQbGFuUHJvbXB0KG5vcm1hbGl6ZUlzc3VlTnVtYmVyKGlzc3VlUmVmZXJlbmNlKSkpLFxufSk7XG5cbmFkZEFnZW50Q29tbWFuZCgncGxhbi1jb2RleCcsICdSdW4gQ29kZXggcGxhbm5pbmcgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGlzc3VlJywge1xuICBhcmd1bWVudE5hbWU6ICc8aXNzdWU+JyxcbiAgYXJndW1lbnREZXNjcmlwdGlvbjogJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJyxcbiAgcnVuOiAoaXNzdWVSZWZlcmVuY2UpID0+IHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcbmFkZEFnZW50Q29tbWFuZCgncGxhbi1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIHBsYW5uaW5nIGFnYWluc3QgdGhlIHNwZWNpZmllZCBpc3N1ZScsIHtcbiAgYXJndW1lbnROYW1lOiAnPGlzc3VlPicsXG4gIGFyZ3VtZW50RGVzY3JpcHRpb246ICdHaXRIdWIgaXNzdWUgbnVtYmVyIG9yIFVSTCcsXG4gIHJ1bjogKGlzc3VlUmVmZXJlbmNlKSA9PiBydW5BZ2VudENvbW1hbmQoJ2NsYXVkZScsIGJ1aWxkUGxhblByb21wdChub3JtYWxpemVJc3N1ZU51bWJlcihpc3N1ZVJlZmVyZW5jZSkpKSxcbn0pO1xuYWRkQWdlbnRDb21tYW5kKCdwbGFuLWdlbWluaScsICdSdW4gR2VtaW5pIENMSSBwbGFubmluZyBhZ2FpbnN0IHRoZSBzcGVjaWZpZWQgaXNzdWUnLCB7XG4gIGFyZ3VtZW50TmFtZTogJzxpc3N1ZT4nLFxuICBhcmd1bWVudERlc2NyaXB0aW9uOiAnR2l0SHViIGlzc3VlIG51bWJlciBvciBVUkwnLFxuICBydW46IChpc3N1ZVJlZmVyZW5jZSkgPT4gcnVuQWdlbnRDb21tYW5kKCdnZW1pbmknLCBidWlsZFBsYW5Qcm9tcHQobm9ybWFsaXplSXNzdWVOdW1iZXIoaXNzdWVSZWZlcmVuY2UpKSksXG59KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnc2NyZWVuc2hvdCcpXG4gIC5kZXNjcmlwdGlvbignVGFrZSBhIHNjcmVlbnNob3Qgd2l0aCB0aGUgc2VsZWN0ZWQgYWdlbnQgdmlhIHBsYXl3cmlnaHQtY2xpJylcbiAgLmFyZ3VtZW50KCc8aW5pdGlhbC11cmw+JywgJ0luaXRpYWwgVVJMIHRvIG9wZW4gYmVmb3JlIG5hdmlnYXRpbmcnKVxuICAuYXJndW1lbnQoJzxwYWdlLW5hbWU+JywgJ1BhZ2UgbmFtZSB0byBuYXZpZ2F0ZSB0byBmcm9tIHRoZSBpbml0aWFsIHBhZ2UnKVxuICAuYXJndW1lbnQoJzxkZXNjcmlwdGlvbj4nLCAnRGVzY3JpcHRpb24gb2YgdGhlIHBhcnQgdG8gY2FwdHVyZSBpbiB0aGUgc2NyZWVuc2hvdCcpXG4gIC5hZGRPcHRpb24oXG4gICAgbmV3IE9wdGlvbignLS1hZ2VudCA8YWdlbnQ+JywgJ1VzZSBhIHNjcmVlbnNob3QgYWdlbnQnKS5jaG9pY2VzKFsnY29kZXgnLCAnY2xhdWRlJywgJ2dlbWluaSddKS5tYWtlT3B0aW9uTWFuZGF0b3J5KClcbiAgKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oXG4gICAgYXN5bmMgKFxuICAgICAgaW5pdGlhbFVybDogc3RyaW5nLFxuICAgICAgcGFnZU5hbWU6IHN0cmluZyxcbiAgICAgIGRlc2NyaXB0aW9uOiBzdHJpbmcsXG4gICAgICBvcHRpb25zOiB7IGFnZW50OiAnY29kZXgnIHwgJ2NsYXVkZScgfCAnZ2VtaW5pJyB9XG4gICAgKSA9PiB7XG4gICAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShcbiAgICAgICAgYXdhaXQgcnVuQWdlbnRDb21tYW5kKG9wdGlvbnMuYWdlbnQsIGJ1aWxkU2NyZWVuc2hvdFByb21wdChpbml0aWFsVXJsLCBwYWdlTmFtZSwgZGVzY3JpcHRpb24pKVxuICAgICAgKTtcbiAgICB9XG4gICk7XG5cbmFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQoe1xuICBuYW1lOiAnc2ltcGxpZnknLFxuICBkZXNjcmlwdGlvbjogJ1J1biBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcsXG4gIG9wdGlvbkRlc2NyaXB0aW9uOiAnVXNlIGEgc2ltcGxpZnkgYWdlbnQnLFxuICBjaG9pY2VzOiBbJ2NvZGV4JywgJ2NsYXVkZScsICdnZW1pbmknXSxcbiAgcnVuOiAoYWdlbnQpID0+IHJ1bkFnZW50Q29tbWFuZChhZ2VudCwgYnVpbGRTaW1wbGlmeVByb21wdCgpKSxcbn0pO1xuXG5hZGRBZ2VudENvbW1hbmQoJ3NpbXBsaWZ5LWNvZGV4JywgJ1J1biBDb2RleCBQUiBzaW1wbGlmaWNhdGlvbiBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICgpID0+XG4gIHJ1bkFnZW50Q29tbWFuZCgnY29kZXgnLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1jbGF1ZGUnLCAnUnVuIENsYXVkZSBDb2RlIFBSIHNpbXBsaWZpY2F0aW9uIGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgKCkgPT5cbiAgcnVuQWdlbnRDb21tYW5kKCdjbGF1ZGUnLCBidWlsZFNpbXBsaWZ5UHJvbXB0KCkpXG4pO1xuYWRkQWdlbnRDb21tYW5kKCdzaW1wbGlmeS1nZW1pbmknLCAnUnVuIEdlbWluaSBDTEkgUFIgc2ltcGxpZmljYXRpb24gYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAoKSA9PlxuICBydW5BZ2VudENvbW1hbmQoJ2dlbWluaScsIGJ1aWxkU2ltcGxpZnlQcm9tcHQoKSlcbik7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ29wZW4tcHInKVxuICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIHB1bGwgcmVxdWVzdCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVhZFN0ZGluVGV4dCgpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IG9wZW5Qcihib2R5IHx8IHVuZGVmaW5lZCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7b3V0cHV0fVxcbmApO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgndXBkYXRlLXByLWJvZHknKVxuICAuZGVzY3JpcHRpb24oJ1VwZGF0ZSB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QgYm9keScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgYm9keSA9IGF3YWl0IHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgnRXJyb3I6IFBSIGJvZHkgaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCB1cGRhdGVQckJvZHkoYm9keSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7b3V0cHV0fVxcbmApO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgndXBkYXRlLXByLXRpdGxlJylcbiAgLmRlc2NyaXB0aW9uKCdVcGRhdGUgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0IHRpdGxlJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB0aXRsZSA9IGF3YWl0IHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgnRXJyb3I6IFBSIHRpdGxlIGlucHV0IGlzIHJlcXVpcmVkIG9uIHN0ZGluJyk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgdXBkYXRlUHJUaXRsZSh0aXRsZSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7b3V0cHV0fVxcbmApO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnY2hlY2stcHItY2knKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgdGhlIGxhdGVzdCB0ZXN0LXJlbGF0ZWQgQ0kgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja1ByQ2koKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShyZXN1bHQub3V0cHV0KTtcbiAgICBwcm9jZXNzLmV4aXQocmVzdWx0LmV4aXRDb2RlKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2ZldGNoLWlzc3VlJylcbiAgLmRlc2NyaXB0aW9uKCdGZXRjaCBhbiBpc3N1ZSBib2R5IGFuZCB0aW1lbGluZSBtZXNzYWdlcyBhcyBZQU1MJylcbiAgLmFyZ3VtZW50KCc8aXNzdWU+JywgJ0dpdEh1YiBpc3N1ZSBudW1iZXIgb3IgVVJMJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChpc3N1ZVJlZmVyZW5jZTogc3RyaW5nKSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgZmV0Y2hJc3N1ZU1lc3NhZ2VzKGlzc3VlUmVmZXJlbmNlKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnZmV0Y2gtcHInKVxuICAuZGVzY3JpcHRpb24oJ0ZldGNoIGEgcHVsbCByZXF1ZXN0IGJvZHkgYW5kIHRpbWVsaW5lIG1lc3NhZ2VzIGFzIFlBTUwsIGV4Y2x1ZGluZyBpbmxpbmUgY29tbWVudHMnKVxuICAuYXJndW1lbnQoJ1twcl0nLCAnR2l0SHViIHB1bGwgcmVxdWVzdCBudW1iZXIgb3IgVVJMOyBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBicmFuY2ggcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jIChwclJlZmVyZW5jZT86IHN0cmluZykgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGZldGNoUHJNZXNzYWdlcyhwclJlZmVyZW5jZSk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2xpc3QtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBsaXN0UHJSZXZpZXdUaHJlYWRzKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3Jlc29sdmUtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ1JlcGx5IHRvIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMgYW5kIHJlc29sdmUgdGhlbScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVwbGllcyA9IGF3YWl0IHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxuYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHByb2Nlc3MuYXJndik7XG5cbmZ1bmN0aW9uIGFkZFBhcmFtZXRlcml6ZWRBZ2VudENvbW1hbmQ8VE1vZGUgZXh0ZW5kcyBzdHJpbmc+KGNvbmZpZzoge1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIG9wdGlvbkRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIGNob2ljZXM6IFtUTW9kZSwgLi4uVE1vZGVbXV07XG4gIGFyZ3VtZW50TmFtZT86IHN0cmluZztcbiAgYXJndW1lbnREZXNjcmlwdGlvbj86IHN0cmluZztcbiAgcnVuOiAobW9kZTogVE1vZGUsIGFyZ3VtZW50OiBzdHJpbmcpID0+IFByb21pc2U8c3RyaW5nPjtcbn0pOiB2b2lkIHtcbiAgY29uc3QgY29tbWFuZCA9IHByb2dyYW0uY29tbWFuZChjb25maWcubmFtZSkuZGVzY3JpcHRpb24oY29uZmlnLmRlc2NyaXB0aW9uKS5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSk7XG4gIGlmIChjb25maWcuYXJndW1lbnROYW1lKSB7XG4gICAgY29tbWFuZC5hcmd1bWVudChjb25maWcuYXJndW1lbnROYW1lLCBjb25maWcuYXJndW1lbnREZXNjcmlwdGlvbik7XG4gIH1cblxuICBjb21tYW5kXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWFnZW50IDxhZ2VudD4nLCBjb25maWcub3B0aW9uRGVzY3JpcHRpb24pLmNob2ljZXMoY29uZmlnLmNob2ljZXMpLm1ha2VPcHRpb25NYW5kYXRvcnkoKSlcbiAgICAuYWN0aW9uKGFzeW5jICguLi5hcmdzOiB1bmtub3duW10pID0+IHtcbiAgICAgIGNvbnN0IFthcmd1bWVudE9yT3B0aW9ucywgbWF5YmVPcHRpb25zXSA9IGFyZ3MgYXMgW3N0cmluZyB8IHsgYWdlbnQ6IFRNb2RlIH0sIHsgYWdlbnQ6IFRNb2RlIH0gfCB1bmRlZmluZWRdO1xuICAgICAgY29uc3QgYXJndW1lbnQgPSB0eXBlb2YgYXJndW1lbnRPck9wdGlvbnMgPT09ICdzdHJpbmcnID8gYXJndW1lbnRPck9wdGlvbnMgOiAnJztcbiAgICAgIGNvbnN0IG9wdGlvbnMgPSAodHlwZW9mIGFyZ3VtZW50T3JPcHRpb25zID09PSAnc3RyaW5nJyA/IG1heWJlT3B0aW9ucyA6IGFyZ3VtZW50T3JPcHRpb25zKSBhcyB7IGFnZW50OiBUTW9kZSB9O1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnLnJ1bihvcHRpb25zLmFnZW50LCBhcmd1bWVudCkpO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBhZGRBZ2VudENvbW1hbmQoXG4gIG5hbWU6IHN0cmluZyxcbiAgZGVzY3JpcHRpb246IHN0cmluZyxcbiAgY29uZmlnT3JSdW46XG4gICAgfCAoKCkgPT4gUHJvbWlzZTxzdHJpbmc+KVxuICAgIHwge1xuICAgICAgICBhcmd1bWVudE5hbWU6IHN0cmluZztcbiAgICAgICAgYXJndW1lbnREZXNjcmlwdGlvbj86IHN0cmluZztcbiAgICAgICAgcnVuOiAoYXJndW1lbnQ6IHN0cmluZykgPT4gUHJvbWlzZTxzdHJpbmc+O1xuICAgICAgfVxuKTogdm9pZCB7XG4gIGNvbnN0IGNvbW1hbmQgPSBwcm9ncmFtLmNvbW1hbmQobmFtZSkuZGVzY3JpcHRpb24oZGVzY3JpcHRpb24pLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKTtcblxuICBpZiAodHlwZW9mIGNvbmZpZ09yUnVuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29tbWFuZC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgY29uZmlnT3JSdW4oKSk7XG4gICAgfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29tbWFuZC5hcmd1bWVudChjb25maWdPclJ1bi5hcmd1bWVudE5hbWUsIGNvbmZpZ09yUnVuLmFyZ3VtZW50RGVzY3JpcHRpb24pLmFjdGlvbihhc3luYyAoYXJndW1lbnQ6IHN0cmluZykgPT4ge1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKGF3YWl0IGNvbmZpZ09yUnVuLnJ1bihhcmd1bWVudCkpO1xuICB9KTtcbn1cbiJdLCJuYW1lcyI6WyJydW5Db21tYW5kV2l0aFByb2dyZXNzIiwiX3giLCJfeDIiLCJfcnVuQ29tbWFuZFdpdGhQcm9ncmVzcyIsImFwcGx5IiwidGhpcyIsImFyZ3VtZW50cyIsIl9hc3luY1RvR2VuZXJhdG9yIiwiX3JlZ2VuZXJhdG9yIiwibSIsIl9jYWxsZWUiLCJjb21tYW5kIiwib3B0aW9ucyIsIl9jb21tYW5kJCIsInByb2MiLCJzdG9wV2FpdFByb2dyZXNzIiwiY29tbWFuZExvZ2dlciIsIl95aWVsZCRQcm9taXNlJGFsbCIsIl95aWVsZCRQcm9taXNlJGFsbDIiLCJzdGRvdXQiLCJzdGRlcnIiLCJvdXRwdXQiLCJ3IiwiX2NvbnRleHQiLCJwIiwibiIsInNwYXduIiwic2xpY2UiLCJzdGRpbyIsImNyZWF0ZVdhaXRQcm9ncmVzcyIsIndhaXRNZXNzYWdlIiwid2FpdEludGVydmFsU2Vjb25kcyIsImNyZWF0ZUNvbW1hbmRMb2dnZXIiLCJsb2dGaWxlUGF0aCIsInYiLCJQcm9taXNlIiwiYWxsIiwic3RyZWFtVG9UZXh0IiwiY2h1bmsiLCJ3cml0ZSIsInJlc29sdmUiLCJyZWplY3QiLCJvbmNlIiwiY29kZSIsIl9zbGljZWRUb0FycmF5IiwiYSIsImNvbmNhdCIsIkVycm9yIiwiam9pbiIsImNsb3NlIiwiZiIsIl94MyIsIl94NCIsIl9zdHJlYW1Ub1RleHQiLCJfY2FsbGVlMiIsInN0cmVhbSIsIm9uQ2h1bmsiLCJjaHVua3MiLCJfaXRlcmF0b3JBYnJ1cHRDb21wbGV0aW9uIiwiX2RpZEl0ZXJhdG9yRXJyb3IiLCJfaXRlcmF0b3JFcnJvciIsIl9pdGVyYXRvciIsIl9zdGVwIiwiY2h1bmtUZXh0IiwiX3QiLCJfY29udGV4dDIiLCJfYXN5bmNJdGVyYXRvciIsIm5leHQiLCJkb25lIiwidmFsdWUiLCJ0b1N0cmluZyIsInB1c2giLCJ3cml0ZVByb2dyZXNzIiwibWVzc2FnZSIsInByb2Nlc3MiLCJkb3RDb3VudCIsInRpbWVyIiwic2V0SW50ZXJ2YWwiLCJjbGVhckludGVydmFsIiwiX3g1IiwiX2NyZWF0ZUNvbW1hbmRMb2dnZXIiLCJfY2FsbGVlNiIsIndhcm4iLCJfdDIiLCJfY29udGV4dDYiLCJfY2xvc2UiLCJfY2FsbGVlMyIsIl9jb250ZXh0MyIsImVycm9yIiwiU3RyaW5nIiwibWtkaXIiLCJkaXJuYW1lIiwicmVjdXJzaXZlIiwiY3JlYXRlV3JpdGVTdHJlYW0iLCJmbGFncyIsIm9uIiwid3JpdGFibGUiLCJfY2xvc2UyIiwiX2NhbGxlZTQiLCJfY29udGV4dDQiLCJlbmQiLCJfY2xvc2UzIiwiX2NhbGxlZTUiLCJfY29udGV4dDUiLCJOT19DT05DRVJOX01FU1NBR0UiLCJBR0VOVF9OQU1FUyIsIkNPTlRBSU5TX05PX0NPTkNFUk5fU0VOVEVOQ0VfUkVHRVgiLCJSZWdFeHAiLCJydW5BbGxBZ2VudENvbW1hbmRzIiwiX3J1bkFsbEFnZW50Q29tbWFuZHMiLCJwcm9tcHQiLCJyZXNvbHZlZFByb21wdCIsIm91dHB1dHMiLCJhbGxBZ2VudHNMYWJlbCIsIndhaXRNZXNzYWdlRm9yIiwibWFwIiwiYWdlbnQiLCJfb3B0aW9ucyRtYXBPdXRwdXQiLCJfb3B0aW9ucyRtYXBPdXRwdXQyIiwiX29wdGlvbnMiLCJydW5BZ2VudENvbW1hbmQiLCJ0cmltIiwibWFwT3V0cHV0IiwiY2FsbCIsImRpc3BsYXlBZ2VudE5hbWUiLCJmaWx0ZXIiLCJ1bmRlZmluZWQiLCJsZW5ndGgiLCJfcnVuQWdlbnRDb21tYW5kIiwiX3QzIiwiY3JlYXRlQWdlbnRDb21tYW5kIiwiYWdlbnRMb2dGaWxlUGF0aCIsInRhcmdldCIsIm5vdyIsIkRhdGUiLCJfbWFwMiIsImdldE1vbnRoIiwiZ2V0RGF0ZSIsImdldEhvdXJzIiwiZ2V0TWludXRlcyIsImdldFNlY29uZHMiLCJ0d29EaWdpdHMiLCJtb250aCIsImRheSIsImhvdXIiLCJtaW51dGUiLCJzZWNvbmQiLCJwYWRTdGFydCIsInlhbWxTdHJpbmdpZnlPcHRpb25zIiwiYmxvY2tRdW90ZSIsImxpbmVXaWR0aCIsInByb2dyZXNzIiwicHJvY2Vzc1N0ZGVyciIsImV4aXRXaXRoRXJyb3IiLCJleGl0IiwicmVhZFN0ZGluVGV4dCIsIl9yZWFkU3RkaW5UZXh0IiwicHJvY2Vzc1N0ZGluIiwiaXNUVFkiLCJyZWFkUmVxdWlyZWRTdGRpblRleHQiLCJfcmVhZFJlcXVpcmVkU3RkaW5UZXh0IiwiZXJyb3JNZXNzYWdlIiwiaW5wdXQiLCJydW5Db21tYW5kIiwiX3J1bkNvbW1hbmQiLCJfb3B0aW9ucyRhbGxvd2VkRXhpdEMiLCJhbGxvd2VkRXhpdENvZGVzIiwiX2xvb3AiLCJfcmV0IiwiYXR0ZW1wdCIsIl9jb21tYW5kJDIiLCJleGl0Q29kZSIsInN0ZGluRGF0YSIsInN0ZGluIiwiaW5jbHVkZXMiLCJpc1RyYW5zaWVudEdoRmFpbHVyZSIsIkdIX1JFVFJZX01BWF9BVFRFTVBUUyIsInNsZWVwIiwiZCIsIl9yZWdlbmVyYXRvclZhbHVlcyIsImdoIiwiX2doIiwiYXJncyIsIl90b0NvbnN1bWFibGVBcnJheSIsImdoQWxsb3dFeGl0Q29kZXMiLCJfeDYiLCJfeDciLCJfeDgiLCJfZ2hBbGxvd0V4aXRDb2RlcyIsImN1cnJlbnRSZXBvUGFydHMiLCJfY3VycmVudFJlcG9QYXJ0cyIsIm5hbWVXaXRoT3duZXIiLCJfbmFtZVdpdGhPd25lciRzcGxpdCIsIl9uYW1lV2l0aE93bmVyJHNwbGl0MiIsIm93bmVyIiwibmFtZSIsIl9jb250ZXh0NyIsInNwbGl0IiwiY3VycmVudFByTnVtYmVyIiwiX2N1cnJlbnRQck51bWJlciIsIl9jYWxsZWU3IiwiX2NvbnRleHQ4IiwiZ3JhcGhxbCIsIl94OSIsIl94MCIsIl9ncmFwaHFsIiwiX2NhbGxlZTgiLCJxdWVyeSIsInZhcnMiLCJfaSIsIl9PYmplY3QkZW50cmllcyIsIl9PYmplY3QkZW50cmllcyRfaSIsImtleSIsInJlc3BvbnNlIiwiZXJyb3JNZXNzYWdlcyIsIl9jb250ZXh0OSIsIk9iamVjdCIsImVudHJpZXMiLCJKU09OIiwicGFyc2UiLCJBcnJheSIsImlzQXJyYXkiLCJlcnJvcnMiLCJfZXJyb3IkbWVzc2FnZSIsInlhbWxEdW1wIiwiZGF0YSIsInN0cmluZ2lmeVlhbWwiLCJkZWVwQ29weSIsInN0cmluZ2lmeSIsInNwYXduU3luY1NhZmUiLCJfcmVzdWx0JHN0YXR1cyIsIl9yZXN1bHQkc3Rkb3V0IiwiX3Jlc3VsdCRzdGRlcnIiLCJyZXN1bHQiLCJzcGF3blN5bmMiLCJlbmNvZGluZyIsInN0YXR1cyIsInRlc3QiLCJfeDEiLCJfY2FsbGVlOSIsImRlY29kZXIiLCJfY29udGV4dDAiLCJUZXh0RGVjb2RlciIsImRlY29kZSIsIlVpbnQ4QXJyYXkiLCJURVNUX1JFTEFURURfUEFUVEVSTiIsIldPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyIsIkZBSUxFRF9MT0dfTElORV9QUkVGSVhfUEFUVEVSTiIsInJ0a0F2YWlsYWJsZSIsImxhdGVzdFByQ2lSZXN1bHRzIiwiX2xhdGVzdFByQ2lSZXN1bHRzIiwicHJOdW1iZXIiLCJfc3VtbWFyeSRwYXNzIiwiX3N1bW1hcnkkZmFpbCIsIl9zdW1tYXJ5JHBlbmRpbmciLCJfc3VtbWFyeSRza2lwcGluZyIsIl9zdW1tYXJ5JGNhbmNlbCIsImNoZWNrcyIsInJhdyIsInN1bW1hcnkiLCJTeW50YXhFcnJvciIsInJlZHVjZSIsImNvdW50cyIsImNoZWNrIiwiX2NoZWNrJGJ1Y2tldDIiLCJfY291bnRzJGJ1Y2tldCIsImJ1Y2tldCIsInRvdGFsIiwicGFzcyIsImZhaWwiLCJwZW5kaW5nIiwic2tpcHBpbmciLCJjYW5jZWwiLCJ3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzIiwiX3dhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MiLCJzbGVlcEZuIiwibGF0ZXN0Q2lSZXN1bHRzRm4iLCJ3cml0ZVByb2dyZXNzRm4iLCJhdHRlbXB0cyIsImNpUmVzdWx0cyIsImNsYXNzaWZpZWRSZXN1bHRzIiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0IiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0MiIsImZhaWxlZFJlc3VsdHMiLCJydW5uaW5nUmVzdWx0cyIsInNsZWVwU2Vjb25kcyIsImNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzIiwiZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkIiwia2V5cyIsImxhdGVzdFJlc3VsdHNCeVdvcmtmbG93IiwiZ3JvdXBlZFJlc3VsdHMiLCJ3b3JrZmxvd0tleSIsIndvcmtmbG93IiwiZnJvbUVudHJpZXMiLCJfcmVmIiwiX2xhdGVzdEF0dGVtcHRDaGVja3MkIiwiX3JlZjIiLCJsYXRlc3RBdHRlbXB0Q2hlY2tzIiwiZ3JvdXBzIiwiZ3JvdXBlZENoZWNrcyIsInJ1bklkIiwid29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsiLCJ3b3JrZmxvd0F0dGVtcHRLZXkiLCJncm91cCIsImdldCIsInNldCIsIk1hcCIsImZyb20iLCJ2YWx1ZXMiLCJsYXRlc3RHcm91cCIsImN1cnJlbnRHcm91cCIsImxhdGVzdEdyb3VwVGltZXN0YW1wIiwibGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3ciLCJmaXJzdENoZWNrIiwibGF0ZXN0Q2hlY2siLCJjdXJyZW50TGF0ZXN0IiwibGF0ZXN0Q2hlY2tUaW1lc3RhbXAiLCJjbGFzc2lmaWNhdGlvbiIsIndvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24iLCJzb21lIiwidGVzdFJlbGF0ZWRDaGVjayIsIl9saW5rJG1hdGNoIiwibGluayIsIm1hdGNoIiwid29ya2Zsb3dSdW4iLCJfd29ya2Zsb3dSdW4iLCJydW5Kc29uIiwiYnVja2V0cyIsIl9jaGVjayRidWNrZXQiLCJfY2hlY2skc3RhcnRlZEF0IiwidGltZXN0YW1wIiwiY29tcGxldGVkQXQiLCJzdGFydGVkQXQiLCJfc2xlZXBTZWNvbmRzIiwic2Vjb25kcyIsImNoZWNrUHJDaSIsIl9jaGVja1ByQ2kiLCJfeWllbGQkd2FpdEZvclJ1bm5pbmciLCJfeWllbGQkd2FpdEZvclJ1bm5pbmcyIiwid2FpdEF0dGVtcHRzIiwid2FpdFRpbWVkT3V0IiwiY2xhc3NpZmllZExhdGVzdCIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDMiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3Q0IiwicGF5bG9hZCIsIndhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrcyIsInRlc3RfcmVsYXRlZF9jaGVja193YWl0X2F0dGVtcHRzIiwidGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfdGltZWRfb3V0IiwiX3JlZjQiLCJfcmVmNiIsImNvbXBhY3RXb3JrZmxvdyIsIl90NCIsIl90NSIsImNvbXBhY3RXb3JrZmxvd1Jlc3VsdCIsIl9vYmplY3RTcHJlYWQiLCJidWlsZEZhaWxlZFdvcmtmbG93RGV0YWlscyIsImZhaWxlZFdvcmtmbG93TG9nIiwiZmFpbGVkX3dvcmtmbG93cyIsInRlc3Rfd29ya2Zsb3dfb3V0cHV0IiwiX3JlZjciLCJfcmVmOCIsInJ1bm5pbmdfdGVzdF9yZWxhdGVkX3dvcmtmbG93cyIsImxhdGVzdCIsIl9jb21wYWN0V29ya2Zsb3dSZXN1bHQiLCJfc3RyaW5nT3JVbmRlZmluZWQiLCJydW4iLCJmYWlsZWRKb2IiLCJmYWlsZWRXb3JrZmxvd1J1bkpvYiIsInN0cmluZ09yVW5kZWZpbmVkIiwiam9iIiwiam9iX3VybCIsInVybCIsImZhaWxlZF9zdGVwIiwiZmFpbGVkV29ya2Zsb3dSdW5TdGVwTmFtZSIsInJ1bl9pZCIsInJ1bl91cmwiLCJicmFuY2giLCJoZWFkQnJhbmNoIiwic2hhIiwiaGVhZFNoYSIsImNvbmNsdXNpb24iLCJfZmFpbGVkV29ya2Zsb3dMb2ciLCJsb2ciLCJmYWlsZWRfbG9nIiwicmVmaW5lRmFpbGVkV29ya2Zsb3dMb2ciLCJzYW5pdGl6ZWRJbnB1dCIsInNhbml0aXplRmFpbGVkV29ya2Zsb3dMb2ciLCJzdHJpcFZUQ29udHJvbENoYXJhY3RlcnMiLCJsaW5lIiwicmVwbGFjZSIsImpvYk5hbWUiLCJfcmVmMyIsIl9ydW4kam9icyRmaW5kIiwiam9icyIsImZpbmQiLCJfam9iJHN0ZXBzJGZpbmQkbmFtZSIsIl9qb2Ikc3RlcHMkZmluZCIsIl9qb2Ikc3RlcHMkZmluZDIiLCJzdGVwcyIsInN0ZXAiLCJjdXJyZW50QmFzZUJyYW5jaCIsIl9jdXJyZW50QmFzZUJyYW5jaCIsIl95aWVsZCRjdXJyZW50UHVsbFJlcSIsImN1cnJlbnRQdWxsUmVxdWVzdEJhc2VCcmFuY2giLCJjdXJyZW50RGVmYXVsdEJyYW5jaCIsIl9jdXJyZW50RGVmYXVsdEJyYW5jaCIsInJlcXVpcmVOb25FbXB0eSIsIl9jdXJyZW50UHVsbFJlcXVlc3RCYXNlQnJhbmNoIiwiYmFzZUJyYW5jaCIsImlzQ3VycmVudFB1bGxSZXF1ZXN0TWlzc2luZyIsIm5vcm1hbGl6ZUlzc3VlTnVtYmVyIiwicmVmZXJlbmNlIiwiZXh0cmFjdEdpdEh1YlJlZmVyZW5jZU51bWJlciIsIm5vcm1hbGl6ZVByTnVtYmVyIiwiZmV0Y2hJc3N1ZU1lc3NhZ2VzIiwiX2ZldGNoSXNzdWVNZXNzYWdlcyIsImlzc3VlTnVtYmVyIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyMiIsImlzc3VlIiwiaXNzdWVNZXNzYWdlcyIsIm51bWJlciIsImZldGNoUHJNZXNzYWdlcyIsIl9mZXRjaFByTWVzc2FnZXMiLCJyZXNvbHZlZFByTnVtYmVyIiwicHVsbFJlcXVlc3QiLCJjdXJyZW50UmVwb1B1bGxSZXF1ZXN0TWVzc2FnZXMiLCJwdWxsX3JlcXVlc3QiLCJmZXRjaEN1cnJlbnRQck1lc3NhZ2VzSWZBdmFpbGFibGUiLCJfZmV0Y2hDdXJyZW50UHJNZXNzYWdlc0lmQXZhaWxhYmxlIiwicHJOdW1iZXJPdXRwdXQiLCJfY3VycmVudFJlcG9QdWxsUmVxdWVzdE1lc3NhZ2VzIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyMyIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjQiLCJwck1lc3NhZ2VzIiwibGFiZWwiLCJyZWZlcmVuY2VUZXh0Iiwia2luZFNlZ21lbnQiLCJfaXNzdWVNZXNzYWdlcyIsIm1lc3NhZ2VzIiwiZmV0Y2hNZXRhZGF0YSIsIm5vdW4iLCJzZWxlY3RNZXRhZGF0YSIsIl9yZXNwb25zZSRkYXRhIiwicmVwb3NpdG9yeSIsInBhZ2luYXRlTWVzc2FnZXMiLCJzZWxlY3RDb25uZWN0aW9uIiwiX3Jlc3BvbnNlJGRhdGEyIiwiY29tbWVudHMiLCJtYXBOb2RlIiwiY29tbWVudE1lc3NhZ2UiLCJfcHJNZXNzYWdlcyIsImlzc3VlQ29tbWVudHMiLCJyZXZpZXdzIiwiX3Jlc3BvbnNlJGRhdGEzIiwicHJJc3N1ZUNvbW1lbnRzIiwicHJSZXZpZXdzIiwic29ydCIsImNvbXBhcmVNZXNzYWdlc0J5Q3JlYXRlZEF0IiwibGVmdCIsInJpZ2h0IiwibGVmdENyZWF0ZWRBdCIsImNyZWF0ZWRBdCIsInJpZ2h0Q3JlYXRlZEF0IiwibG9jYWxlQ29tcGFyZSIsIl94MTAiLCJfcHJJc3N1ZUNvbW1lbnRzIiwiX3Jlc3BvbnNlJGRhdGE0IiwiX3gxMSIsIl94MTIiLCJfeDEzIiwiX3ByUmV2aWV3cyIsIl9yZXNwb25zZSRkYXRhNSIsInJldmlld01lc3NhZ2UiLCJfeDE0IiwiX3BhZ2luYXRlTWVzc2FnZXMiLCJjb25maWciLCJjdXJzb3IiLCJfY29ubmVjdGlvbiRwYWdlSW5mbyQiLCJjb25uZWN0aW9uIiwiTnVtYmVyIiwibm9kZXMiLCJoYXNNZXNzYWdlQm9keSIsInBhZ2VJbmZvIiwiaGFzTmV4dFBhZ2UiLCJlbmRDdXJzb3IiLCJfeDE1IiwiX2ZldGNoTWV0YWRhdGEiLCJfY2FsbGVlMCIsIl9tZXRhZGF0YSRhdXRob3IkbG9naSIsIl9tZXRhZGF0YSRhdXRob3IiLCJfbWV0YWRhdGEkYm9keSIsIm1ldGFkYXRhIiwidGl0bGUiLCJhdXRob3IiLCJsb2dpbiIsImJvZHkiLCJjb21tZW50IiwiX2NvbW1lbnQkYXV0aG9yJGxvZ2luIiwiX2NvbW1lbnQkYXV0aG9yIiwidHlwZSIsInJldmlldyIsIl9yZXZpZXckYXV0aG9yJGxvZ2luIiwiX3JldmlldyRhdXRob3IiLCJfcmV2aWV3JHN0YXRlIiwiX3JldmlldyRzdWJtaXR0ZWRBdCIsIl9yZXZpZXckYm9keSIsInN0YXRlIiwic3VibWl0dGVkQXQiLCJvcGVuUHIiLCJfb3BlblByIiwiaGVhZCIsImJhc2UiLCJjcmVhdGVBcmdzIiwidXBkYXRlUHJCb2R5IiwiX3VwZGF0ZVByQm9keSIsInVwZGF0ZVByIiwidXBkYXRlUHJUaXRsZSIsIl91cGRhdGVQclRpdGxlIiwiX3VwZGF0ZVByIiwiZWRpdEFyZ3MiLCJyZWFkUmVwbGllc0Zyb21TdGRpbiIsIl9yZWFkUmVwbGllc0Zyb21TdGRpbiIsIm5vcm1hbGl6ZWRSZXBsaWVzIiwidGhyZWFkSWQiLCJwYXJzZVJlcGx5SW5wdXQiLCJyZXBsaWVzIiwicGFnaW5hdGVSZXZpZXdUaHJlYWRzIiwiX3BhZ2luYXRlUmV2aWV3VGhyZWFkcyIsIm9uVGhyZWFkIiwiX3lpZWxkJGdyYXBocWwkZGF0YSIsIl9yZXZpZXdUaHJlYWRzJHBhZ2VJbiIsInJldmlld1RocmVhZHMiLCJ0aHJlYWQiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsInMiLCJlIiwidW5yZXNvbHZlZFJldmlld1RocmVhZElkcyIsIl91bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzIiwiaWRzIiwiaXNSZXNvbHZlZCIsImlkIiwidW5yZXNvbHZlZFJldmlld1RocmVhZHMiLCJfdW5yZXNvbHZlZFJldmlld1RocmVhZHMiLCJ0aHJlYWRzIiwiX3BhZ2VJbmZvJGVuZEN1cnNvciIsIl95aWVsZCRncmFwaHFsJGRhdGEyIiwiX3BhZ2VJbmZvJGVuZEN1cnNvcjIiLCJjb21tZW50Q29ubmVjdGlvbiIsIl90NiIsIl90NyIsIl90OCIsIm5vcm1hbGl6ZUNvbW1lbnRBdXRob3IiLCJub2RlIiwiaXNPdXRkYXRlZCIsInBhdGgiLCJvcmlnaW5hbExpbmUiLCJzdGFydExpbmUiLCJvcmlnaW5hbFN0YXJ0TGluZSIsImxpc3RQclJldmlld1RocmVhZHMiLCJfbGlzdFByUmV2aWV3VGhyZWFkcyIsIl90OSIsIl90MCIsInVucmVzb2x2ZWRfdGhyZWFkcyIsInJlc29sdmVQclJldmlld1RocmVhZHMiLCJfcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyIsInVucmVzb2x2ZWRJZHMiLCJyZXNvbHZlZFRocmVhZElkcyIsIl9pdGVyYXRvcjIiLCJfc3RlcDIiLCJfc3RlcDIkdmFsdWUiLCJpbmRleCIsIl9zdGVwMiR2YWx1ZSQiLCJfdDEiLCJfdDEwIiwiX3QxMSIsIlNldCIsImhhcyIsInJlc29sdmVSZXZpZXdUaHJlYWQiLCJyZXNvbHZlZF90aHJlYWRfaWRzIiwicGFyc2VkIiwiX3R5cGVvZiIsImV2ZXJ5IiwicmVwbHkiLCJpc1JlcGx5SW5wdXQiLCJidWlsZFBsYW5Qcm9tcHQiLCJfYnVpbGRQbGFuUHJvbXB0IiwiaXNzdWVZYW1sIiwiYnVpbGRNZXJnZUJhc2VDb21tYW5kIiwic2hlbGxRdW90ZSIsInJlcGxhY2VBbGwiLCJidWlsZFJldmlld1Byb21wdCIsIl9idWlsZFJldmlld1Byb21wdCIsIm1lcmdlQmFzZUNvbW1hbmQiLCJwckNvbnRleHQiLCJidWlsZFByQ29udGV4dEluc3RydWN0aW9ucyIsImJ1aWxkU2NyZWVuc2hvdFByb21wdCIsImluaXRpYWxVcmwiLCJwYWdlTmFtZSIsInNjcmVlbnNob3REZXNjcmlwdGlvbiIsInNhbml0aXplZERlc2NyaXB0aW9uIiwiYnVpbGRTaW1wbGlmeVByb21wdCIsIl9idWlsZFNpbXBsaWZ5UHJvbXB0IiwiaW5zdGFsbFBhY2tlZFNraWxscyIsIl9pbnN0YWxsUGFja2VkU2tpbGxzIiwiZmlsZVVSTFRvUGF0aCIsIlVSTCIsInByb2dyYW0iLCJDb21tYW5kIiwiYWRkUGFyYW1ldGVyaXplZEFnZW50Q29tbWFuZCIsImRlc2NyaXB0aW9uIiwiYWxsb3dFeGNlc3NBcmd1bWVudHMiLCJhcmd1bWVudE5hbWUiLCJhcmd1bWVudCIsImFyZ3VtZW50RGVzY3JpcHRpb24iLCJhZGRPcHRpb24iLCJPcHRpb24iLCJvcHRpb25EZXNjcmlwdGlvbiIsImNob2ljZXMiLCJtYWtlT3B0aW9uTWFuZGF0b3J5IiwiYWN0aW9uIiwiX2NhbGxlZTEiLCJfbGVuIiwiX2tleSIsIl9yZWYxMSIsImFyZ3VtZW50T3JPcHRpb25zIiwibWF5YmVPcHRpb25zIiwiX2FyZ3MxIiwiX2NvbnRleHQxIiwiYWRkQWdlbnRDb21tYW5kIiwiY29uZmlnT3JSdW4iLCJfY2FsbGVlMTEiLCJfY29udGV4dDExIiwiX2NhbGxlZTEwIiwiX2NvbnRleHQxMCIsInNob3dIZWxwQWZ0ZXJFcnJvciIsIm1vZGUiLCJjb250YWluc05vQ29uY2VyblNlbnRlbmNlIiwiaXNzdWVSZWZlcmVuY2UiLCJwclJlZmVyZW5jZSIsInBhcnNlQXN5bmMiLCJhcmd2Il0sIm1hcHBpbmdzIjoiOzs7bXpIQW9CQSxTQUFzQkEsRUFBc0JDLEVBQUFDLEdBQUEsT0FBQUMsRUFBQUMsTUFBQUMsS0FBQUMsVUFBQSxDQTJCM0MsU0FBQUgsSUFBQSxPQUFBQSxFQUFBSSxFQUFBQyxJQUFBQyxFQTNCTSxTQUFBQyxFQUFzQ0MsRUFBbUJDLEdBQTBCLElBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUFDLEVBQUEsT0FBQWIsSUFBQWMsRUFBQSxT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
|