@willbooster/agent-skills 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import{Command as e}from"commander";import{spawn as n}from"node:child_process";import{stdin as r,stderr as t}from"node:process";import{setTimeout as o}from"node:timers/promises";import{stringify as a}from"yaml";function i(e,n){(null==n||n>e.length)&&(n=e.length);for(var r=0,t=Array(n);r<n;r++)t[r]=e[r];return t}function c(e){var n,r,t,o=2;for("undefined"!=typeof Symbol&&(r=Symbol.asyncIterator,t=Symbol.iterator);o--;){if(r&&null!=(n=e[r]))return n.call(e);if(t&&null!=(n=e[t]))return new u(n.call(e));r="@@asyncIterator",t="@@iterator"}throw new TypeError("Object is not async iterable")}function u(e){function n(e){if(Object(e)!==e)return Promise.reject(new TypeError(e+" is not an object."));var n=e.done;return Promise.resolve(e.value).then(function(e){return{value:e,done:n}})}return u=function(e){this.s=e,this.n=e.next},u.prototype={s:null,n:null,next:function(){return n(this.n.apply(this.s,arguments))},return:function(e){var r=this.s.return;return void 0===r?Promise.resolve({value:e,done:!0}):n(r.apply(this.s,arguments))},throw:function(e){var r=this.s.return;return void 0===r?Promise.reject(e):n(r.apply(this.s,arguments))}},new u(e)}function s(e,n,r,t,o,a,i){try{var c=e[a](i),u=c.value}catch(e){return void r(e)}c.done?n(u):Promise.resolve(u).then(t,o)}function l(e){return function(){var n=this,r=arguments;return new Promise(function(t,o){var a=e.apply(n,r);function i(e){s(a,t,o,i,c,"next",e)}function c(e){s(a,t,o,i,c,"throw",e)}i(void 0)})}}function f(e,n){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=k(e))||n){r&&(e=r);var t=0,o=function(){};return{s:o,n:function(){return t>=e.length?{done:!0}:{done:!1,value:e[t++]}},e:function(e){throw e},f:o}}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,i=!0,c=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return i=e.done,e},e:function(e){c=!0,a=e},f:function(){try{i||null==r.return||r.return()}finally{if(c)throw a}}}}function p(e,n,r){return(n=function(e){var n=function(e,n){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var t=r.call(e,n);if("object"!=typeof t)return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===n?String:Number)(e)}(e,"string");return"symbol"==typeof n?n:n+""}(n))in e?Object.defineProperty(e,n,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[n]=r,e}function d(e,n){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(e);n&&(t=t.filter(function(n){return Object.getOwnPropertyDescriptor(e,n).enumerable})),r.push.apply(r,t)}return r}function h(e){for(var n=1;n<arguments.length;n++){var r=null!=arguments[n]?arguments[n]:{};n%2?d(Object(r),!0).forEach(function(n){p(e,n,r[n])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(r)):d(Object(r)).forEach(function(n){Object.defineProperty(e,n,Object.getOwnPropertyDescriptor(r,n))})}return e}function m(){
|
|
3
|
+
/*! regenerator-runtime -- Copyright (c) 2014-present, Facebook, Inc. -- license (MIT): https://github.com/babel/babel/blob/main/packages/babel-helpers/LICENSE */
|
|
4
|
+
var e,n,r="function"==typeof Symbol?Symbol:{},t=r.iterator||"@@iterator",o=r.toStringTag||"@@toStringTag";function a(r,t,o,a){var u=t&&t.prototype instanceof c?t:c,s=Object.create(u.prototype);return v(s,"_invoke",function(r,t,o){var a,c,u,s=0,l=o||[],f=!1,p={p:0,n:0,v:e,a:d,f:d.bind(e,4),d:function(n,r){return a=n,c=0,u=e,p.n=r,i}};function d(r,t){for(c=r,u=t,n=0;!f&&s&&!o&&n<l.length;n++){var o,a=l[n],d=p.p,h=a[2];r>3?(o=h===t)&&(u=a[(c=a[4])?5:(c=3,3)],a[4]=a[5]=e):a[0]<=d&&((o=r<2&&d<a[1])?(c=0,p.v=t,p.n=a[1]):d<h&&(o=r<3||a[0]>t||t>h)&&(a[4]=r,a[5]=t,p.n=h,c=0))}if(o||r>1)return i;throw f=!0,t}return function(o,l,h){if(s>1)throw TypeError("Generator is already running");for(f&&1===l&&d(l,h),c=l,u=h;(n=c<2?e:u)||!f;){a||(c?c<3?(c>1&&(p.n=-1),d(c,u)):p.n=u:p.v=u);try{if(s=2,a){if(c||(o="next"),n=a[o]){if(!(n=n.call(a,u)))throw TypeError("iterator result is not an object");if(!n.done)return n;u=n.value,c<2&&(c=0)}else 1===c&&(n=a.return)&&n.call(a),c<2&&(u=TypeError("The iterator does not provide a '"+o+"' method"),c=1);a=e}else if((n=(f=p.n<0)?u:r.call(t,p))!==i)break}catch(n){a=e,c=1,u=n}finally{s=1}}return{value:n,done:f}}}(r,o,a),!0),s}var i={};function c(){}function u(){}function s(){}n=Object.getPrototypeOf;var l=[][t]?n(n([][t]())):(v(n={},t,function(){return this}),n),f=s.prototype=c.prototype=Object.create(l);function p(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,s):(e.__proto__=s,v(e,o,"GeneratorFunction")),e.prototype=Object.create(f),e}return u.prototype=s,v(f,"constructor",s),v(s,"constructor",u),u.displayName="GeneratorFunction",v(s,o,"GeneratorFunction"),v(f),v(f,o,"Generator"),v(f,t,function(){return this}),v(f,"toString",function(){return"[object Generator]"}),(m=function(){return{w:a,m:p}})()}function v(e,n,r,t){var o=Object.defineProperty;try{o({},"",{})}catch(e){o=0}v=function(e,n,r,t){function a(n,r){v(e,n,function(e){return this._invoke(n,r,e)})}n?o?o(e,n,{value:r,enumerable:!t,configurable:!t,writable:!t}):e[n]=r:(a("next",0),a("throw",1),a("return",2))},v(e,n,r,t)}function w(e){if(null!=e){var n=e["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],r=0;if(n)return n.call(e);if("function"==typeof e.next)return e;if(!isNaN(e.length))return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}}throw new TypeError(typeof e+" is not iterable")}function y(e,n){return function(e){if(Array.isArray(e))return e}(e)||function(e,n){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var t,o,a,i,c=[],u=!0,s=!1;try{if(a=(r=r.call(e)).next,0===n){if(Object(r)!==r)return;u=!1}else for(;!(u=(t=a.call(r)).done)&&(c.push(t.value),c.length!==n);u=!0);}catch(e){s=!0,o=e}finally{try{if(!u&&null!=r.return&&(i=r.return(),Object(i)!==i))return}finally{if(s)throw o}}return c}}(e,n)||k(e,n)||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 b(e){return function(e){if(Array.isArray(e))return i(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||k(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function g(e){"@babel/helpers - typeof";return g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},g(e)}function k(e,n){if(e){if("string"==typeof e)return i(e,n);var r={}.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(e,n):void 0}}var j={blockQuote:"literal",lineWidth:0},O=/\btest\b/i,S=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","name","number","startedAt","status","updatedAt","url","workflowName"];function x(e){t.write("".concat(e,"\n"))}function I(e,n){void 0===n&&(n=1),t.write("".concat(e,"\n")),process.exit(n)}function E(e,n,r){return"gh"===e[0]&&0!==n&&/(HTTP 50[0234]\b|We had issues producing the response to your request)/i.test(r)}function A(){return P.apply(this,arguments)}function P(){return(P=l(m().m(function e(){return m().w(function(e){for(;;)switch(e.n){case 0:if(!r.isTTY){e.n=1;break}return e.a(2,"");case 1:return e.n=2,he(r);case 2:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function _(){return R.apply(this,arguments)}function R(){return(R=l(m().m(function e(){var n;return m().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,A();case 1:if(!((n=e.v).length>0)){e.n=2;break}return e.a(2,n);case 2:I("Error: JSON input is required on stdin",2);case 3:return e.a(2)}},e)}))).apply(this,arguments)}function C(e,n){return T.apply(this,arguments)}function T(){return T=l(m().m(function e(r,t){var a,i,c,u,s;return m().w(function(e){for(;;)switch(e.n){case 0:void 0===t&&(t={}),i=null!=(a=t.allowedExitCodes)?a:[],c=m().m(function e(){var a,c,u,l,f,p,d,h;return m().w(function(e){for(;;)switch(e.n){case 0:return c=n(null!=(a=r[0])?a:"",r.slice(1),{stdio:["pipe","pipe","pipe"]}),void 0!==t.stdinData?c.stdin.end(t.stdinData):c.stdin.end(),e.n=1,Promise.all([he(c.stdout),he(c.stderr),new Promise(function(e,n){c.once("error",n),c.once("close",function(n){return e(null!=n?n:1)})})]);case 1:if(u=e.v,l=y(u,3),f=l[0],p=l[1],d=l[2],h="".concat(f).concat(p),0!==d&&!i.includes(d)){e.n=2;break}return e.a(2,{v:h});case 2:if(!(E(r,d,h)&&s<3)){e.n=4;break}return x("Transient GitHub CLI failure; retrying... (attempt ".concat(s," of ").concat(2,")")),e.n=3,o(1e3*s);case 3:return e.a(2,0);case 4:I(h||"Command failed: ".concat(r.join(" ")));case 5:return e.a(2)}},e)}),s=1;case 1:if(!(s<=3)){e.n=5;break}return e.d(w(c()),2);case 2:if(0!==(u=e.v)){e.n=3;break}return e.a(3,4);case 3:if(!u){e.n=4;break}return e.a(2,u.v);case 4:s+=1,e.n=1;break;case 5:I("Command failed after ".concat(3," attempts: ").concat(r.join(" ")));case 6:return e.a(2)}},e)})),T.apply(this,arguments)}function $(e,n){return N.apply(this,arguments)}function N(){return(N=l(m().m(function e(n,r){return m().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,C(["gh"].concat(b(n)),{stdinData:r});case 1:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function q(e,n,r){return L.apply(this,arguments)}function L(){return(L=l(m().m(function e(n,r,t){return m().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,C(["gh"].concat(b(n)),{stdinData:t,allowedExitCodes:r});case 1:return e.a(2,e.v)}},e)}))).apply(this,arguments)}function G(){return D.apply(this,arguments)}function D(){return(D=l(m().m(function e(){var n,r,t,o,a;return m().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,$(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return n=e.v.trim(),r=n.split("/",2),t=y(r,2),o=t[0],a=t[1],o&&a||I("Error: could not determine current repository"),e.a(2,[o,a])}},e)}))).apply(this,arguments)}function J(){return F.apply(this,arguments)}function F(){return(F=l(m().m(function e(){return m().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,$(["pr","view","--json","number","--jq",".number"]);case 1:return e.a(2,e.v.trim())}},e)}))).apply(this,arguments)}function B(e,n){return H.apply(this,arguments)}function H(){return(H=l(m().m(function e(n,r){var t,o,a,i,c,u,s,l,f;return m().w(function(e){for(;;)switch(e.n){case 0:void 0===r&&(r={}),t=["api","graphql","-F","query=@-"],o=0,a=Object.entries(r);case 1:if(!(o<a.length)){e.n=4;break}if(i=y(a[o],2),c=i[0],void 0!==(u=i[1])&&""!==u){e.n=2;break}return e.a(3,3);case 2:t.push("-F","".concat(c,"=").concat(u));case 3:o++,e.n=1;break;case 4:return f=JSON,e.n=5,$(t,n);case 5:if(s=f.parse.call(f,e.v),Array.isArray(s.errors)){e.n=6;break}return e.a(2,s);case 6:l=s.errors.map(function(e){var n;return null!=(n=e.message)?n:"Unknown GraphQL error"}).join("\n"),I("GraphQL API error:\n".concat(l));case 7:return e.a(2)}},e)}))).apply(this,arguments)}function W(e){var n,r;return h(h({},e),{},{author:"string"==typeof e.author?e.author:null!=(n=null==(r=e.author)?void 0:r.login)?n:null})}function Q(e,n,r,t,o){return U.apply(this,arguments)}function U(){return(U=l(m().m(function e(n,r,t,o,a){var i,c,u,s,l,p,d,h,v,w,y,b;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,B(n,{owner:r,name:t,number:Number(o),cursor:i});case 1:if(w=c=e.v.data,v=null==w){e.n=2;break}v=null==(c=c.repository);case 2:if(h=v){e.n=3;break}h=null==(c=c.pullRequest);case 3:if(!h){e.n=4;break}y=void 0,e.n=5;break;case 4:y=c.reviewThreads;case 5:(s=y)||I("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),l=f(s.nodes),e.p=6,l.s();case 7:if((p=l.n()).done){e.n=9;break}return d=p.value,e.n=8,a(d);case 8:e.n=7;break;case 9:e.n=11;break;case 10:e.p=10,b=e.v,l.e(b);case 11:return e.p=11,l.f(),e.f(11);case 12:if(s.pageInfo.hasNextPage){e.n=13;break}return e.a(2);case 13:i=null!=(u=s.pageInfo.endCursor)?u:void 0;case 14:e.n=0;break;case 15:return e.a(2)}},e,null,[[6,10,11,12]])}))).apply(this,arguments)}function M(e,n,r){return Y.apply(this,arguments)}function Y(){return(Y=l(m().m(function e(n,r,t){var o;return m().w(function(e){for(;;)switch(e.n){case 0:return o=[],e.n=1,Q("\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",n,r,t,function(e){e.isResolved||o.push(e.id)});case 1:return e.a(2,o)}},e)}))).apply(this,arguments)}function Z(e,n,r){return z.apply(this,arguments)}function z(){return(z=l(m().m(function e(n,r,t){var o;return m().w(function(e){for(;;)switch(e.n){case 0:return o=[],e.n=1,Q("\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",n,r,t,l(m().m(function e(n){var r,t,a,i,c,u,s,l,f,p;return m().w(function(e){for(;;)switch(e.n){case 0:if(!n.isResolved){e.n=1;break}return e.a(2);case 1:t=n.comments.nodes.map(W),a=n.comments.pageInfo,i=null!=(r=a.endCursor)?r:void 0;case 2:if(!a.hasNextPage){e.n=7;break}return e.n=3,B("\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:n.id,cursor:i});case 3:if(f=c=e.v.data,l=null==f){e.n=4;break}l=null==(c=c.node);case 4:if(!l){e.n=5;break}p=void 0,e.n=6;break;case 5:p=c.comments;case 6:(s=p)||I("Could not find comments in GraphQL response for thread ".concat(n.id,".")),t.push.apply(t,b(s.nodes.map(W))),a=s.pageInfo,i=null!=(u=a.endCursor)?u:void 0,e.n=2;break;case 7:o.push({id:n.id,isResolved:n.isResolved,isOutdated:n.isOutdated,path:n.path,line:n.line,originalLine:n.originalLine,startLine:n.startLine,originalStartLine:n.originalStartLine,comments:t});case 8:return e.a(2)}},e)})));case 1:return e.a(2,o)}},e)}))).apply(this,arguments)}function K(e){return a(e,j)}function V(e){return JSON.parse(JSON.stringify(e))}function X(e){return ee.apply(this,arguments)}function ee(){return(ee=l(m().m(function e(n){var r,t,o,a,i,c,u,s,l,f;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:return c=["pr","checks"],n&&c.push(n),c.push("--json","bucket,completedAt,description,event,link,name,startedAt,state,workflow"),u=[],e.p=1,e.n=2,q(c,[8]);case 2:s=e.v,u=s.trim().length>0?JSON.parse(s):[],e.n=5;break;case 3:if(e.p=3,!((f=e.v)instanceof SyntaxError)){e.n=4;break}u=[],e.n=5;break;case 4:throw f;case 5:return l=u.reduce(function(e,n){var r,t,o=null!=(r=n.bucket)?r:"";return e[o]=(null!=(t=e[o])?t:0)+1,e},{}),e.a(2,{summary:{total:u.length,pass:null!=(r=l.pass)?r:0,fail:null!=(t=l.fail)?t:0,pending:null!=(o=l.pending)?o:0,skipping:null!=(a=l.skipping)?a:0,cancel:null!=(i=l.cancel)?i:0},checks:u})}},e,null,[[1,3]])}))).apply(this,arguments)}function ne(e){var n=e.checks.reduce(function(e,n){var r=n.workflow||n.name||"unknown_workflow";return null!=e[r]||(e[r]=[]),e[r].push(n),e},{});return Object.fromEntries(Object.entries(n).map(function(e){var n,r=y(e,2),t=r[0],o=function(e){var n=e.reduce(function(e,n){var r=function(e){var n=ae(e);return n?"run:".concat(n):"unknown_run"}(n),t=e.get(r);return t?(t.push(n),e):(e.set(r,[n]),e)},new Map);return Array.from(n.values()).reduce(function(e,n){return 0===e.length||le(n)>le(e)?n:e},[])}(r[1]),a=o[0];a||I("Error: no checks found for workflow ".concat(t));var i=null!=(n=o.reduce(function(e,n){return e?se(n)>se(e)?n:e:n},void 0))?n:a;return[t,{classification:ue(o),check:i,checks:o}]}))}function re(e){for(var n={},r={},t=0,o=Object.entries(e);t<o.length;t++){var a=y(o[t],2),i=a[0],c=a[1];"failed"!==c.classification?"running"===c.classification&&c.checks.some(function(e){return fe(e)})&&(r[i]=c):n[i]=c}return[n,r]}function te(e,n,r,t){return oe.apply(this,arguments)}function oe(){return(oe=l(m().m(function e(n,r,t,o){var a,i,c,u,s,l,f;return m().w(function(e){for(;;)switch(e.n){case 0:return void 0===r&&(r=pe),void 0===t&&(t=X),void 0===o&&(o=x),a=0,e.n=1,t(n);case 1:i=e.v;case 2:if(c=ne(i),u=re(c),s=y(u,2),l=s[0],f=s[1],!(Object.keys(l).length>0)){e.n=3;break}return e.a(2,[i,a,!1]);case 3:if(0!==Object.keys(f).length){e.n=4;break}return e.a(2,[i,a,!1]);case 4:if(!(a>=360)){e.n=5;break}return e.a(2,[i,a,!0]);case 5:return o("Waiting for test-related workflows to finish (attempt ".concat(a+=1,"/").concat(360,"): ").concat(Object.keys(f).join(", "))),e.n=6,r(10);case 6:return e.n=7,t(n);case 7:i=e.v;case 8:e.n=2;break;case 9:return e.a(2)}},e)}))).apply(this,arguments)}function ae(e){var n,r=null==e?void 0:e.link;if(r)return null==(n=r.match(/\/actions\/runs\/(\d+)/))?void 0:n[1]}function ie(e){return ce.apply(this,arguments)}function ce(){return(ce=l(m().m(function e(n){var r,o;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:if(n){e.n=1;break}return e.a(2,void 0);case 1:return e.n=2,q(["run","view",n,"--json",S.join(",")],[1]);case 2:if(0!==(r=e.v).trim().length){e.n=3;break}return e.a(2,void 0);case 3:return e.p=3,e.a(2,JSON.parse(r));case 4:if(e.p=4,!((o=e.v)instanceof SyntaxError)){e.n=5;break}return t.write("Warning: Could not parse JSON for workflow run ".concat(n,": ").concat(o.message,"\n")),e.a(2,void 0);case 5:throw o;case 6:return e.a(2)}},e,null,[[3,4]])}))).apply(this,arguments)}function ue(e){var n=e.map(function(e){var n;return null!=(n=e.bucket)?n:""});return n.some(function(e){return!["pass","skipping","pending"].includes(e)})?"failed":n.includes("pending")?"running":"successful"}function se(e){var n,r=e.completedAt;return r&&"0001-01-01T00:00:00Z"!==r?r:null!=(n=e.startedAt)?n:""}function le(e){return e.reduce(function(e,n){var r=se(n);return r>e?r:e},"")}function fe(e){return[e.name,e.workflow].some(function(e){return"string"==typeof e&&O.test(e)})}function pe(e){return de.apply(this,arguments)}function de(){return(de=l(m().m(function e(n){return m().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,o(1e3*n);case 1:return e.a(2)}},e)}))).apply(this,arguments)}function he(e){return me.apply(this,arguments)}function me(){return(me=l(m().m(function e(n){var r,t,o,a,i,u,s,l;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:if(n){e.n=1;break}return e.a(2,"");case 1:r=[],t=!1,o=!1,e.p=2,i=c(n);case 3:return e.n=4,i.next();case 4:if(!(t=!(u=e.v).done)){e.n=6;break}s=u.value,r.push(Buffer.from(s));case 5:t=!1,e.n=3;break;case 6:e.n=8;break;case 7:e.p=7,l=e.v,o=!0,a=l;case 8:if(e.p=8,e.p=9,!t||null==i.return){e.n=10;break}return e.n=10,i.return();case 10:if(e.p=10,!o){e.n=11;break}throw a;case 11:return e.f(10);case 12:return e.f(8);case 13:return e.a(2,Buffer.concat(r).toString("utf8"))}},e,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function ve(){return we.apply(this,arguments)}function we(){return(we=l(m().m(function e(){var n,r,t,o,a,i,c,u,s,l;return m().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,_();case 1:for(r=e.v,t=Ie(r),o=null!=(n=t.replies)?n:{},a={},i=0,c=Object.entries(o);i<c.length;i++)u=y(c[i],2),s=u[0],"string"==typeof(l=u[1])&&l.length>0&&(a[s]=l);return e.a(2,a)}},e)}))).apply(this,arguments)}function ye(e){return be.apply(this,arguments)}function be(){return(be=l(m().m(function e(n){var r,t,o;return m().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,C(["git","branch","--show-current"]);case 1:return r=e.v.trim(),e.n=2,$(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return t=e.v.trim(),r||I("Error: could not determine current branch"),t||I("Error: could not determine default branch"),r===t&&I("Error: current branch is the default branch (".concat(t,")")),o=["pr","create","--base",t,"--head",r,"--fill"],n&&n.length>0&&o.push("--body-file","-"),x("Creating pull request..."),e.n=3,$(o,n);case 3:return e.n=4,$(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return e.a(2,e.v.trim())}},e)}))).apply(this,arguments)}function ge(){return ke.apply(this,arguments)}function ke(){return(ke=l(m().m(function e(){var n,r,t,o,a,i,c;return m().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,G();case 1:return n=e.v,r=y(n,2),t=r[0],o=r[1],e.n=2,J();case 2:return a=e.v,x("Fetching unresolved review threads..."),i=K,e.n=3,Z(t,o,a);case 3:return c=e.v,e.a(2,i({unresolved_threads:c}))}},e)}))).apply(this,arguments)}function je(e){return Oe.apply(this,arguments)}function Oe(){return(Oe=l(m().m(function e(n){var r,t,o,a,i,c,u,s,l,p,d,h,v,w,b,g,k,j,O,S;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:return e.n=1,G();case 1:return r=e.v,t=y(r,2),o=t[0],a=t[1],e.n=2,J();case 2:return i=e.v,j=Set,e.n=3,M(o,a,i);case 3:O=e.v,c=new j(O),x("Replying to ".concat(Object.keys(n).length," review threads...")),u=[],s=Object.entries(n),l=f(s.entries()),e.p=4,l.s();case 5:if((p=l.n()).done){e.n=9;break}if(h=y(p.value,2),v=h[0],w=y(h[1],2),b=w[0],g=w[1],x("Processing ".concat(v+1,"/").concat(s.length,": ").concat(b)),c.has(b)){e.n=6;break}return e.a(3,8);case 6:return e.n=7,B("\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:b,body:g});case 7:k=e.v,null!=(d=k.data)&&null!=(d=d.resolveReviewThread)&&null!=(d=d.thread)&&d.isResolved?u.push(b):x("Warning: failed to resolve thread ".concat(b,"."));case 8:e.n=5;break;case 9:e.n=11;break;case 10:e.p=10,S=e.v,l.e(S);case 11:return e.p=11,l.f(),e.f(11);case 12:return x("Done."),e.a(2,K({resolved_thread_ids:u}))}},e,null,[[4,10,11,12]])}))).apply(this,arguments)}function Se(){return xe.apply(this,arguments)}function xe(){return(xe=l(m().m(function e(){var n,r,t,o,a,i,c,u,s,f,p,d,h,v,w;return m().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,J();case 1:return n=e.v,x("Fetching latest CI results..."),e.n=2,te(n);case 2:return r=e.v,t=y(r,3),o=t[0],a=t[1],i=t[2],c=ne(o),u=re(c),s=y(u,2),f=s[0],p=s[1],v=Object,e.n=3,Promise.all(Object.entries(c).map(l(m().m(function e(n){var r,t,o,a,i;return m().w(function(e){for(;;)switch(e.n){case 0:return r=y(n,2),t=r[0],o=r[1],a=o.check,e.n=1,ie(ae(a));case 1:return i=e.v,e.a(2,[t,{classification:o.classification,check:V(a),workflowRun:i&&V(i)}])}},e)}))));case 3:if(d=v.fromEntries.call(v,e.v),h={latest_ci_results:o,waited_for_test_related_checks:a>0,test_related_check_wait_attempts:a,test_related_check_wait_timed_out:i,latest_workflow_results:d},!(Object.keys(f).length>0)){e.n=5;break}return w=Object,e.n=4,Promise.all(Object.entries(f).map(l(m().m(function e(n){var r,t,o,a,i,c;return m().w(function(e){for(;;)switch(e.n){case 0:if(r=y(n,2),t=r[0],o=r[1],a=ae(o.check)){e.n=1;break}return e.a(2,[t,"Failed latest result has no GitHub Actions run link."]);case 1:return i=t,e.n=2,q(["run","view",a,"--log-failed"],[1]);case 2:return c=e.v,e.a(2,[i,c])}},e)}))));case 4:return h.failed_workflow_outputs=w.fromEntries.call(w,e.v),e.a(2,{output:K(h),exitCode:1});case 5:if(!(Object.keys(p).length>0)){e.n=6;break}return h.test_workflow_output="Timed out waiting for test-related workflows to finish.",h.running_test_related_workflows=Object.keys(p),e.a(2,{output:K(h),exitCode:1});case 6:return h.test_workflow_output="All workflows are successful.",e.a(2,{output:K(h),exitCode:0})}},e)}))).apply(this,arguments)}function Ie(e){try{var n=JSON.parse(e);return function(e){if("object"!==g(e)||null===e||Array.isArray(e))return!1;var n=e.replies;if(void 0===n)return!0;if("object"!==g(n)||null===n||Array.isArray(n))return!1;return Object.values(n).every(function(e){return null==e||"string"==typeof e})}(n)||I("".concat("Error: Invalid input format on stdin",": expected an object with an optional string-valued `replies` map"),2),n}catch(e){throw e instanceof SyntaxError&&I("Error: Invalid JSON provided on stdin: ".concat(e.message),2),e}}function Ee(e){return Ae.apply(this,arguments)}function Ae(){return(Ae=l(m().m(function e(n){var r,t,o;return m().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,Pe();case 1:r=e.v,t=Re(r),o=n,e.n="codex"===o?2:"claude"===o?4:"gemini"===o?6:8;break;case 2:return e.n=3,Ce(["npx","--yes","@openai/codex@latest","--yolo","-p",t]);case 3:case 5:case 7:return e.a(2,e.v);case 4:return e.n=5,Ce(["claude","--dangerously-skip-permissions","-p",t]);case 6:return e.n=7,Ce(["npx","--yes","@google/gemini-cli@preview","--approval-mode","yolo","--model","gemini-3.1-pro-preview","-p",t]);case 8:return e.a(2)}},e)}))).apply(this,arguments)}function Pe(){return _e.apply(this,arguments)}function _e(){return(_e=l(m().m(function e(){var n;return m().w(function(e){for(;;)switch(e.n){case 0:return n=qe,e.n=1,Ce(["gh","repo","view","--json","defaultBranchRef","--template","{{.defaultBranchRef.name}}"]);case 1:return e.a(2,n(e.v.trim(),"Error: could not determine the default branch"))}},e)}))).apply(this,arguments)}function Re(e){return"Review the current branch against the repository's default branch ".concat(e,' via `git diff "$(git merge-base "').concat(e,'" HEAD)"`.\nFor each review comment, do the following before moving to the next comment:\n1. Collect the information you need:\n - Read the comment carefully and identify the exact claim being made.\n - Inspect the referenced code and the surrounding call sites, related types, tests, configuration, and recent diffs when they affect the claim.\n2. Gather supporting evidence:\n - If code inspection is enough, use the current codebase as the primary evidence.\n - If the claim 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 claim depends on framework, library, platform, or language behavior, confirm it against the latest official documentation or another primary source instead of relying on memory.\n3. Judge whether the comment 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.\nReport only the comments you judged valid, and include a short basis for each one that cites the evidence you used, such as the failing scenario, experiment result, or relevant official documentation. Do not modify code.\nIf there are no valid review comments, respond with exactly: No valid review comments.')}function Ce(e){return Te.apply(this,arguments)}function Te(){return Te=l(m().m(function e(r){var t,o,a,i,c,u,s;return m().w(function(e){for(;;)switch(e.n){case 0:return o=n(null!=(t=r[0])?t:"",r.slice(1),{stdio:["ignore","pipe","pipe"]}),e.n=1,Promise.all([$e(o.stdout),$e(o.stderr),new Promise(function(e,n){o.once("error",n),o.once("close",function(n){return e(null!=n?n:1)})})]);case 1:if(a=e.v,i=y(a,3),c=i[0],u=i[1],0!==i[2]){e.n=2;break}return e.a(2,c);case 2:throw s="".concat(c).concat(u),new Error(s||"Command failed: ".concat(r.join(" ")));case 3:return e.a(2)}},e)})),Te.apply(this,arguments)}function $e(e){return Ne.apply(this,arguments)}function Ne(){return(Ne=l(m().m(function e(n){var r,t,o,a,i,u,s,l;return m().w(function(e){for(;;)switch(e.p=e.n){case 0:if(n){e.n=1;break}return e.a(2,"");case 1:r="",t=!1,o=!1,e.p=2,i=c(n);case 3:return e.n=4,i.next();case 4:if(!(t=!(u=e.v).done)){e.n=6;break}s=u.value,r+="string"==typeof s?s:s.toString("utf8");case 5:t=!1,e.n=3;break;case 6:e.n=8;break;case 7:e.p=7,l=e.v,o=!0,a=l;case 8:if(e.p=8,e.p=9,!t||null==i.return){e.n=10;break}return e.n=10,i.return();case 10:if(e.p=10,!o){e.n=11;break}throw a;case 11:return e.f(10);case 12:return e.f(8);case 13:return e.a(2,r)}},e,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function qe(e,n){if(e.length>0)return e;throw new Error(n)}var Le=new e;function Ge(e,n,r){Le.command(e).description(n).allowExcessArguments(!1).action(l(m().m(function e(){var n;return m().w(function(e){for(;;)switch(e.n){case 0:return n=process.stdout,e.n=1,Ee(r);case 1:n.write.call(n,e.v);case 2:return e.a(2)}},e)})))}function De(e){var n=[e.codex?"codex":void 0,e.claude?"claude":void 0,e.gemini?"gemini":void 0].filter(function(e){return void 0!==e});if(1!==n.length)throw new Error("Specify exactly one of --codex, --claude, or --gemini.");var r=n[0];if(!r)throw new Error("Specify exactly one of --codex, --claude, or --gemini.");return r}Le.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),Le.command("review").description("Run review against the current branch with the selected agent").allowExcessArguments(!1).option("--codex","Use Codex").option("--claude","Use Claude Code").option("--gemini","Use Gemini CLI").action(l(m().m(function e(n){var r;return m().w(function(e){for(;;)switch(e.n){case 0:return r=process.stdout,e.n=1,Ee(De(n));case 1:r.write.call(r,e.v);case 2:return e.a(2)}},e)}))),Ge("codex-review","Run Codex review against the current branch","codex"),Ge("claude-review","Run Claude Code review against the current branch","claude"),Ge("gemini-review","Run Gemini CLI review against the current branch","gemini"),Le.command("open-pr").description("Create a pull request for the current branch").allowExcessArguments(!1).action(l(m().m(function e(){var n,r;return m().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,A();case 1:return n=e.v,e.n=2,ye(n||void 0);case 2:r=e.v,process.stdout.write("".concat(r,"\n"));case 3:return e.a(2)}},e)}))),Le.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(l(m().m(function e(){var n;return m().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,Se();case 1:n=e.v,process.stdout.write(n.output),process.exit(n.exitCode);case 2:return e.a(2)}},e)}))),Le.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(l(m().m(function e(){var n;return m().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,ge();case 1:n=e.v,process.stdout.write(n);case 2:return e.a(2)}},e)}))),Le.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(l(m().m(function e(){var n,r;return m().w(function(e){for(;;)switch(e.n){case 0:return e.n=1,ve();case 1:return n=e.v,e.n=2,je(n);case 2:r=e.v,process.stdout.write(r);case 3:return e.a(2)}},e)}))),await Le.parseAsync(process.argv);
|
|
5
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQtc2tpbGxzLWNsaS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3lhbWwudHMiLCIuLi9zcmMvcHIvcHItY29tbWFuZHMudHMiLCIuLi9zcmMvcmV2aWV3L3Jldmlldy1jb21tYW5kcy50cyIsIi4uL3NyYy9jbGkvYWdlbnQtc2tpbGxzLWNsaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIGBibG9ja1F1b3RlOiAnbGl0ZXJhbCdgOiBVc2VzIGEgcGlwZSAoYHByb3A6IHxgKSB0byByZXByZXNlbnQgbXVsdGlsaW5lIHN0cmluZ3MuXG4gKiBgbGluZVdpZHRoOiAwYDogRGlzYWJsZXMgbGluZSB3cmFwcGluZy5cbiAqL1xuZXhwb3J0IGNvbnN0IHlhbWxTdHJpbmdpZnlPcHRpb25zID0geyBibG9ja1F1b3RlOiAnbGl0ZXJhbCcsIGxpbmVXaWR0aDogMCB9IGFzIGNvbnN0O1xuIiwiaW1wb3J0IHsgc3Bhd24gfSBmcm9tICdub2RlOmNoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgc3RkZXJyIGFzIHByb2Nlc3NTdGRlcnIsIHN0ZGluIGFzIHByb2Nlc3NTdGRpbiB9IGZyb20gJ25vZGU6cHJvY2Vzcyc7XG5pbXBvcnQgeyBzZXRUaW1lb3V0IGFzIHNsZWVwIH0gZnJvbSAnbm9kZTp0aW1lcnMvcHJvbWlzZXMnO1xuaW1wb3J0IHsgc3RyaW5naWZ5IGFzIHN0cmluZ2lmeVlhbWwgfSBmcm9tICd5YW1sJztcbmltcG9ydCB7IHlhbWxTdHJpbmdpZnlPcHRpb25zIH0gZnJvbSAnLi4veWFtbC5qcyc7XG5cbmV4cG9ydCBjb25zdCBURVNUX1JFTEFURURfUEFUVEVSTiA9IC9cXGJ0ZXN0XFxiL2k7XG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX0lOVEVSVkFMX1NFQ09ORFMgPSAxMDtcbmV4cG9ydCBjb25zdCBURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTID0gMzYwO1xuZXhwb3J0IGNvbnN0IFpFUk9fVElNRVNUQU1QID0gJzAwMDEtMDEtMDFUMDA6MDA6MDBaJztcbmV4cG9ydCBjb25zdCBXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMgPSBbXG4gICdhdHRlbXB0JyxcbiAgJ2NvbmNsdXNpb24nLFxuICAnY3JlYXRlZEF0JyxcbiAgJ2RhdGFiYXNlSWQnLFxuICAnZGlzcGxheVRpdGxlJyxcbiAgJ2V2ZW50JyxcbiAgJ2hlYWRCcmFuY2gnLFxuICAnaGVhZFNoYScsXG4gICduYW1lJyxcbiAgJ251bWJlcicsXG4gICdzdGFydGVkQXQnLFxuICAnc3RhdHVzJyxcbiAgJ3VwZGF0ZWRBdCcsXG4gICd1cmwnLFxuICAnd29ya2Zsb3dOYW1lJyxcbl0gYXMgY29uc3Q7XG5cbmV4cG9ydCB0eXBlIEpzb25PYmplY3QgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcblxuZXhwb3J0IHR5cGUgQ2hlY2sgPSB7XG4gIGJ1Y2tldD86IHN0cmluZztcbiAgY29tcGxldGVkQXQ/OiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuICBldmVudD86IHN0cmluZztcbiAgbGluaz86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgc3RhcnRlZEF0Pzogc3RyaW5nO1xuICBzdGF0ZT86IHN0cmluZztcbiAgd29ya2Zsb3c/OiBzdHJpbmc7XG4gIFtrZXk6IHN0cmluZ106IHVua25vd247XG59O1xuXG5leHBvcnQgdHlwZSBDaVJlc3VsdHMgPSB7XG4gIHN1bW1hcnk6IHtcbiAgICB0b3RhbDogbnVtYmVyO1xuICAgIHBhc3M6IG51bWJlcjtcbiAgICBmYWlsOiBudW1iZXI7XG4gICAgcGVuZGluZzogbnVtYmVyO1xuICAgIHNraXBwaW5nOiBudW1iZXI7XG4gICAgY2FuY2VsOiBudW1iZXI7XG4gIH07XG4gIGNoZWNrczogQ2hlY2tbXTtcbn07XG5cbmV4cG9ydCB0eXBlIFdvcmtmbG93Q2xhc3NpZmljYXRpb24gPSAnZmFpbGVkJyB8ICdydW5uaW5nJyB8ICdzdWNjZXNzZnVsJztcblxuZXhwb3J0IHR5cGUgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0ID0ge1xuICBjbGFzc2lmaWNhdGlvbjogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbjtcbiAgY2hlY2s6IENoZWNrO1xuICBjaGVja3M6IENoZWNrW107XG59O1xuXG50eXBlIFJldmlld0NvbW1lbnROb2RlID0ge1xuICBpZDogc3RyaW5nO1xuICB1cmw6IHN0cmluZztcbiAgYm9keTogc3RyaW5nO1xuICBjcmVhdGVkQXQ6IHN0cmluZztcbiAgZGlmZkh1bms/OiBzdHJpbmcgfCBudWxsO1xuICBhdXRob3I/OiB7IGxvZ2luPzogc3RyaW5nIHwgbnVsbCB9IHwgc3RyaW5nIHwgbnVsbDtcbn07XG5cbnR5cGUgUmV2aWV3VGhyZWFkTm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgaXNPdXRkYXRlZD86IGJvb2xlYW4gfCBudWxsO1xuICBwYXRoPzogc3RyaW5nIHwgbnVsbDtcbiAgbGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsTGluZT86IG51bWJlciB8IG51bGw7XG4gIHN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIG9yaWdpbmFsU3RhcnRMaW5lPzogbnVtYmVyIHwgbnVsbDtcbiAgY29tbWVudHM6IHtcbiAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICBwYWdlSW5mbzoge1xuICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgIH07XG4gIH07XG59O1xuXG50eXBlIFJ1bkNvbW1hbmRPcHRpb25zID0ge1xuICBzdGRpbkRhdGE/OiBzdHJpbmc7XG4gIGFsbG93ZWRFeGl0Q29kZXM/OiBudW1iZXJbXTtcbn07XG5cbmNvbnN0IEdIX1JFVFJZX01BWF9BVFRFTVBUUyA9IDM7XG5jb25zdCBHSF9SRVRSWV9CQVNFX0RFTEFZX01TID0gMTAwMDtcblxuZXhwb3J0IGZ1bmN0aW9uIHByb2dyZXNzKG1lc3NhZ2U6IHN0cmluZyk6IHZvaWQge1xuICBwcm9jZXNzU3RkZXJyLndyaXRlKGAke21lc3NhZ2V9XFxuYCk7XG59XG5cbmZ1bmN0aW9uIGV4aXRXaXRoRXJyb3IobWVzc2FnZTogc3RyaW5nLCBjb2RlID0gMSk6IG5ldmVyIHtcbiAgcHJvY2Vzc1N0ZGVyci53cml0ZShgJHttZXNzYWdlfVxcbmApO1xuICBwcm9jZXNzLmV4aXQoY29kZSk7XG59XG5cbmZ1bmN0aW9uIGlzVHJhbnNpZW50R2hGYWlsdXJlKGNvbW1hbmQ6IHN0cmluZ1tdLCBleGl0Q29kZTogbnVtYmVyLCBvdXRwdXQ6IHN0cmluZyk6IGJvb2xlYW4ge1xuICBpZiAoY29tbWFuZFswXSAhPT0gJ2doJyB8fCBleGl0Q29kZSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiAvKEhUVFAgNTBbMDIzNF1cXGJ8V2UgaGFkIGlzc3VlcyBwcm9kdWNpbmcgdGhlIHJlc3BvbnNlIHRvIHlvdXIgcmVxdWVzdCkvaS50ZXN0KG91dHB1dCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkU3RkaW5UZXh0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChwcm9jZXNzU3RkaW4uaXNUVFkpIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cbiAgcmV0dXJuIGF3YWl0IHN0cmVhbVRvVGV4dChwcm9jZXNzU3RkaW4pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFJlcXVpcmVkU3RkaW5UZXh0KCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGlucHV0ID0gYXdhaXQgcmVhZFN0ZGluVGV4dCgpO1xuICBpZiAoaW5wdXQubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBpbnB1dDtcbiAgfVxuICBleGl0V2l0aEVycm9yKCdFcnJvcjogSlNPTiBpbnB1dCBpcyByZXF1aXJlZCBvbiBzdGRpbicsIDIpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQ29tbWFuZChjb21tYW5kOiBzdHJpbmdbXSwgb3B0aW9uczogUnVuQ29tbWFuZE9wdGlvbnMgPSB7fSk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IGFsbG93ZWRFeGl0Q29kZXMgPSBvcHRpb25zLmFsbG93ZWRFeGl0Q29kZXMgPz8gW107XG5cbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDE7IGF0dGVtcHQgPD0gR0hfUkVUUllfTUFYX0FUVEVNUFRTOyBhdHRlbXB0ICs9IDEpIHtcbiAgICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgICAgc3RkaW86IFsncGlwZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgICB9KTtcbiAgICBpZiAob3B0aW9ucy5zdGRpbkRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcHJvYy5zdGRpbi5lbmQob3B0aW9ucy5zdGRpbkRhdGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9jLnN0ZGluLmVuZCgpO1xuICAgIH1cblxuICAgIGNvbnN0IFtzdGRvdXQsIHN0ZGVyciwgZXhpdENvZGVdID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xuICAgICAgc3RyZWFtVG9UZXh0KHByb2Muc3Rkb3V0KSxcbiAgICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZGVyciksXG4gICAgICBuZXcgUHJvbWlzZTxudW1iZXI+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgcHJvYy5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICAgIHByb2Mub25jZSgnY2xvc2UnLCAoY29kZSkgPT4gcmVzb2x2ZShjb2RlID8/IDEpKTtcbiAgICAgIH0pLFxuICAgIF0pO1xuICAgIGNvbnN0IG91dHB1dCA9IGAke3N0ZG91dH0ke3N0ZGVycn1gO1xuXG4gICAgaWYgKGV4aXRDb2RlID09PSAwIHx8IGFsbG93ZWRFeGl0Q29kZXMuaW5jbHVkZXMoZXhpdENvZGUpKSB7XG4gICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cblxuICAgIGlmIChpc1RyYW5zaWVudEdoRmFpbHVyZShjb21tYW5kLCBleGl0Q29kZSwgb3V0cHV0KSAmJiBhdHRlbXB0IDwgR0hfUkVUUllfTUFYX0FUVEVNUFRTKSB7XG4gICAgICBwcm9ncmVzcyhgVHJhbnNpZW50IEdpdEh1YiBDTEkgZmFpbHVyZTsgcmV0cnlpbmcuLi4gKGF0dGVtcHQgJHthdHRlbXB0fSBvZiAke0dIX1JFVFJZX01BWF9BVFRFTVBUUyAtIDF9KWApO1xuICAgICAgYXdhaXQgc2xlZXAoR0hfUkVUUllfQkFTRV9ERUxBWV9NUyAqIGF0dGVtcHQpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgZXhpdFdpdGhFcnJvcihvdXRwdXQgfHwgYENvbW1hbmQgZmFpbGVkOiAke2NvbW1hbmQuam9pbignICcpfWApO1xuICB9XG4gIGV4aXRXaXRoRXJyb3IoYENvbW1hbmQgZmFpbGVkIGFmdGVyICR7R0hfUkVUUllfTUFYX0FUVEVNUFRTfSBhdHRlbXB0czogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdoKGFyZ3M6IHN0cmluZ1tdLCBzdGRpbkRhdGE/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgcnVuQ29tbWFuZChbJ2doJywgLi4uYXJnc10sIHsgc3RkaW5EYXRhIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2hBbGxvd0V4aXRDb2RlcyhcbiAgYXJnczogc3RyaW5nW10sXG4gIGFsbG93ZWRFeGl0Q29kZXM6IG51bWJlcltdLFxuICBzdGRpbkRhdGE/OiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiBhd2FpdCBydW5Db21tYW5kKFsnZ2gnLCAuLi5hcmdzXSwgeyBzdGRpbkRhdGEsIGFsbG93ZWRFeGl0Q29kZXMgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjdXJyZW50UmVwb1BhcnRzKCk6IFByb21pc2U8W3N0cmluZywgc3RyaW5nXT4ge1xuICBjb25zdCBuYW1lV2l0aE93bmVyID0gKGF3YWl0IGdoKFsncmVwbycsICd2aWV3JywgJy0tanNvbicsICduYW1lV2l0aE93bmVyJywgJy0tanEnLCAnLm5hbWVXaXRoT3duZXInXSkpLnRyaW0oKTtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IG5hbWVXaXRoT3duZXIuc3BsaXQoJy8nLCAyKTtcbiAgaWYgKCFvd25lciB8fCAhbmFtZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgcmVwb3NpdG9yeScpO1xuICB9XG4gIHJldHVybiBbb3duZXIsIG5hbWVdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudFByTnVtYmVyKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiAoYXdhaXQgZ2goWydwcicsICd2aWV3JywgJy0tanNvbicsICdudW1iZXInLCAnLS1qcScsICcubnVtYmVyJ10pKS50cmltKCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBncmFwaHFsPFQgZXh0ZW5kcyBKc29uT2JqZWN0PihcbiAgcXVlcnk6IHN0cmluZyxcbiAgdmFyczogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVtYmVyIHwgdW5kZWZpbmVkPiA9IHt9XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3QgYXJncyA9IFsnYXBpJywgJ2dyYXBocWwnLCAnLUYnLCAncXVlcnk9QC0nXTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXModmFycykpIHtcbiAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gJycpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBhcmdzLnB1c2goJy1GJywgYCR7a2V5fT0ke3ZhbHVlfWApO1xuICB9XG5cbiAgY29uc3QgcmVzcG9uc2UgPSBKU09OLnBhcnNlKGF3YWl0IGdoKGFyZ3MsIHF1ZXJ5KSkgYXMgSnNvbk9iamVjdCAmIHsgZXJyb3JzPzogQXJyYXk8eyBtZXNzYWdlPzogc3RyaW5nIH0+IH07XG4gIGlmICghQXJyYXkuaXNBcnJheShyZXNwb25zZS5lcnJvcnMpKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlIGFzIFQ7XG4gIH1cblxuICBjb25zdCBlcnJvck1lc3NhZ2VzID0gcmVzcG9uc2UuZXJyb3JzLm1hcCgoZXJyb3IpID0+IGVycm9yLm1lc3NhZ2UgPz8gJ1Vua25vd24gR3JhcGhRTCBlcnJvcicpLmpvaW4oJ1xcbicpO1xuICBleGl0V2l0aEVycm9yKGBHcmFwaFFMIEFQSSBlcnJvcjpcXG4ke2Vycm9yTWVzc2FnZXN9YCk7XG59XG5cbmNvbnN0IFJFVklFV19USFJFQURfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdUaHJlYWRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICAgIGlzT3V0ZGF0ZWRcbiAgICAgICAgICAgIHBhdGhcbiAgICAgICAgICAgIGxpbmVcbiAgICAgICAgICAgIG9yaWdpbmFsTGluZVxuICAgICAgICAgICAgc3RhcnRMaW5lXG4gICAgICAgICAgICBvcmlnaW5hbFN0YXJ0TGluZVxuICAgICAgICAgICAgY29tbWVudHMoZmlyc3Q6IDEwMCkge1xuICAgICAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgICAgICBib2R5XG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICAgICAgZGlmZkh1bmtcbiAgICAgICAgICAgICAgICBhdXRob3IgeyBsb2dpbiB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUkVWSUVXX0NPTU1FTlRfUVVFUlkgPSBgXG4gIHF1ZXJ5KCR0aHJlYWRJZDogSUQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICBub2RlKGlkOiAkdGhyZWFkSWQpIHtcbiAgICAgIC4uLiBvbiBQdWxsUmVxdWVzdFJldmlld1RocmVhZCB7XG4gICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIHVybFxuICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgY3JlYXRlZEF0XG4gICAgICAgICAgICBkaWZmSHVua1xuICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5jb25zdCBSRVZJRVdfVEhSRUFEX0lEU19RVUVSWSA9IGBcbiAgcXVlcnkoJG93bmVyOiBTdHJpbmchLCAkbmFtZTogU3RyaW5nISwgJG51bWJlcjogSW50ISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgcmVwb3NpdG9yeShvd25lcjogJG93bmVyLCBuYW1lOiAkbmFtZSkge1xuICAgICAgcHVsbFJlcXVlc3QobnVtYmVyOiAkbnVtYmVyKSB7XG4gICAgICAgIHJldmlld1RocmVhZHMoZmlyc3Q6IDEwMCwgYWZ0ZXI6ICRjdXJzb3IpIHtcbiAgICAgICAgICBub2RlcyB7XG4gICAgICAgICAgICBpZFxuICAgICAgICAgICAgaXNSZXNvbHZlZFxuICAgICAgICAgIH1cbiAgICAgICAgICBwYWdlSW5mbyB7XG4gICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgZW5kQ3Vyc29yXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5gO1xuXG5mdW5jdGlvbiBub3JtYWxpemVDb21tZW50QXV0aG9yKGNvbW1lbnQ6IFJldmlld0NvbW1lbnROb2RlKTogUmV2aWV3Q29tbWVudE5vZGUgJiB7IGF1dGhvcj86IHN0cmluZyB8IG51bGwgfSB7XG4gIHJldHVybiB7XG4gICAgLi4uY29tbWVudCxcbiAgICBhdXRob3I6IHR5cGVvZiBjb21tZW50LmF1dGhvciA9PT0gJ3N0cmluZycgPyBjb21tZW50LmF1dGhvciA6IChjb21tZW50LmF1dGhvcj8ubG9naW4gPz8gbnVsbCksXG4gIH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBwYWdpbmF0ZVJldmlld1RocmVhZHMoXG4gIHF1ZXJ5OiBzdHJpbmcsXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlcixcbiAgb25UaHJlYWQ6ICh0aHJlYWQ6IFJldmlld1RocmVhZE5vZGUpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IGN1cnNvcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGZvciAoOzspIHtcbiAgICBjb25zdCByZXZpZXdUaHJlYWRzID0gKFxuICAgICAgYXdhaXQgZ3JhcGhxbDx7XG4gICAgICAgIGRhdGE/OiB7XG4gICAgICAgICAgcmVwb3NpdG9yeT86IHtcbiAgICAgICAgICAgIHB1bGxSZXF1ZXN0Pzoge1xuICAgICAgICAgICAgICByZXZpZXdUaHJlYWRzPzoge1xuICAgICAgICAgICAgICAgIG5vZGVzOiBSZXZpZXdUaHJlYWROb2RlW107XG4gICAgICAgICAgICAgICAgcGFnZUluZm86IHtcbiAgICAgICAgICAgICAgICAgIGhhc05leHRQYWdlOiBib29sZWFuO1xuICAgICAgICAgICAgICAgICAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfT4ocXVlcnksIHtcbiAgICAgICAgb3duZXIsXG4gICAgICAgIG5hbWUsXG4gICAgICAgIG51bWJlcjogTnVtYmVyKHByTnVtYmVyKSxcbiAgICAgICAgY3Vyc29yLFxuICAgICAgfSlcbiAgICApLmRhdGE/LnJlcG9zaXRvcnk/LnB1bGxSZXF1ZXN0Py5yZXZpZXdUaHJlYWRzO1xuXG4gICAgaWYgKCFyZXZpZXdUaHJlYWRzKSB7XG4gICAgICBleGl0V2l0aEVycm9yKFxuICAgICAgICAnQ291bGQgbm90IGZpbmQgcmV2aWV3VGhyZWFkcyBpbiBHcmFwaFFMIHJlc3BvbnNlLiBUaGUgcHVsbCByZXF1ZXN0IG1heSBub3QgZXhpc3Qgb3IgdGhlcmUgd2FzIGFuIEFQSSBlcnJvci4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgdGhyZWFkIG9mIHJldmlld1RocmVhZHMubm9kZXMpIHtcbiAgICAgIGF3YWl0IG9uVGhyZWFkKHRocmVhZCk7XG4gICAgfVxuXG4gICAgaWYgKCFyZXZpZXdUaHJlYWRzLnBhZ2VJbmZvLmhhc05leHRQYWdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGN1cnNvciA9IHJldmlld1RocmVhZHMucGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgfVxufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyhcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyXG4pOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gIGNvbnN0IGlkczogc3RyaW5nW10gPSBbXTtcbiAgYXdhaXQgcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFJFVklFV19USFJFQURfSURTX1FVRVJZLCBvd25lciwgbmFtZSwgcHJOdW1iZXIsICh0aHJlYWQpID0+IHtcbiAgICBpZiAoIXRocmVhZC5pc1Jlc29sdmVkKSB7XG4gICAgICBpZHMucHVzaCh0aHJlYWQuaWQpO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBpZHM7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyhcbiAgb3duZXI6IHN0cmluZyxcbiAgbmFtZTogc3RyaW5nLFxuICBwck51bWJlcjogc3RyaW5nIHwgbnVtYmVyXG4pOiBQcm9taXNlPFJlY29yZDxzdHJpbmcsIHVua25vd24+W10+IHtcbiAgY29uc3QgdGhyZWFkczogUmVjb3JkPHN0cmluZywgdW5rbm93bj5bXSA9IFtdO1xuXG4gIGF3YWl0IHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhSRVZJRVdfVEhSRUFEX1FVRVJZLCBvd25lciwgbmFtZSwgcHJOdW1iZXIsIGFzeW5jICh0aHJlYWQpID0+IHtcbiAgICBpZiAodGhyZWFkLmlzUmVzb2x2ZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBjb21tZW50cyA9IHRocmVhZC5jb21tZW50cy5ub2Rlcy5tYXAobm9ybWFsaXplQ29tbWVudEF1dGhvcik7XG4gICAgbGV0IHBhZ2VJbmZvID0gdGhyZWFkLmNvbW1lbnRzLnBhZ2VJbmZvO1xuICAgIGxldCBjdXJzb3IgPSBwYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuXG4gICAgd2hpbGUgKHBhZ2VJbmZvLmhhc05leHRQYWdlKSB7XG4gICAgICBjb25zdCBjb21tZW50Q29ubmVjdGlvbiA9IChcbiAgICAgICAgYXdhaXQgZ3JhcGhxbDx7XG4gICAgICAgICAgZGF0YT86IHtcbiAgICAgICAgICAgIG5vZGU/OiB7XG4gICAgICAgICAgICAgIGNvbW1lbnRzPzoge1xuICAgICAgICAgICAgICAgIG5vZGVzOiBSZXZpZXdDb21tZW50Tm9kZVtdO1xuICAgICAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfTtcbiAgICAgICAgfT4oUkVWSUVXX0NPTU1FTlRfUVVFUlksIHsgdGhyZWFkSWQ6IHRocmVhZC5pZCwgY3Vyc29yIH0pXG4gICAgICApLmRhdGE/Lm5vZGU/LmNvbW1lbnRzO1xuXG4gICAgICBpZiAoIWNvbW1lbnRDb25uZWN0aW9uKSB7XG4gICAgICAgIGV4aXRXaXRoRXJyb3IoYENvdWxkIG5vdCBmaW5kIGNvbW1lbnRzIGluIEdyYXBoUUwgcmVzcG9uc2UgZm9yIHRocmVhZCAke3RocmVhZC5pZH0uYCk7XG4gICAgICB9XG5cbiAgICAgIGNvbW1lbnRzLnB1c2goLi4uY29tbWVudENvbm5lY3Rpb24ubm9kZXMubWFwKG5vcm1hbGl6ZUNvbW1lbnRBdXRob3IpKTtcbiAgICAgIHBhZ2VJbmZvID0gY29tbWVudENvbm5lY3Rpb24ucGFnZUluZm87XG4gICAgICBjdXJzb3IgPSBwYWdlSW5mby5lbmRDdXJzb3IgPz8gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHRocmVhZHMucHVzaCh7XG4gICAgICBpZDogdGhyZWFkLmlkLFxuICAgICAgaXNSZXNvbHZlZDogdGhyZWFkLmlzUmVzb2x2ZWQsXG4gICAgICBpc091dGRhdGVkOiB0aHJlYWQuaXNPdXRkYXRlZCxcbiAgICAgIHBhdGg6IHRocmVhZC5wYXRoLFxuICAgICAgbGluZTogdGhyZWFkLmxpbmUsXG4gICAgICBvcmlnaW5hbExpbmU6IHRocmVhZC5vcmlnaW5hbExpbmUsXG4gICAgICBzdGFydExpbmU6IHRocmVhZC5zdGFydExpbmUsXG4gICAgICBvcmlnaW5hbFN0YXJ0TGluZTogdGhyZWFkLm9yaWdpbmFsU3RhcnRMaW5lLFxuICAgICAgY29tbWVudHMsXG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiB0aHJlYWRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24geWFtbER1bXAoZGF0YTogdW5rbm93bik6IHN0cmluZyB7XG4gIHJldHVybiBzdHJpbmdpZnlZYW1sKGRhdGEsIHlhbWxTdHJpbmdpZnlPcHRpb25zKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRlZXBDb3B5PFQ+KGRhdGE6IFQpOiBUIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZGF0YSkpIGFzIFQ7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsYXRlc3RQckNpUmVzdWx0cyhwck51bWJlcj86IHN0cmluZyk6IFByb21pc2U8Q2lSZXN1bHRzPiB7XG4gIGNvbnN0IGFyZ3MgPSBbJ3ByJywgJ2NoZWNrcyddO1xuICBpZiAocHJOdW1iZXIpIHtcbiAgICBhcmdzLnB1c2gocHJOdW1iZXIpO1xuICB9XG4gIGFyZ3MucHVzaCgnLS1qc29uJywgJ2J1Y2tldCxjb21wbGV0ZWRBdCxkZXNjcmlwdGlvbixldmVudCxsaW5rLG5hbWUsc3RhcnRlZEF0LHN0YXRlLHdvcmtmbG93Jyk7XG5cbiAgbGV0IGNoZWNrczogQ2hlY2tbXSA9IFtdO1xuICB0cnkge1xuICAgIGNvbnN0IHJhdyA9IGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoYXJncywgWzhdKTtcbiAgICBjaGVja3MgPSByYXcudHJpbSgpLmxlbmd0aCA+IDAgPyAoSlNPTi5wYXJzZShyYXcpIGFzIENoZWNrW10pIDogW107XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgIGNoZWNrcyA9IFtdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICBjb25zdCBzdW1tYXJ5ID0gY2hlY2tzLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBudW1iZXI+PigoY291bnRzLCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IGJ1Y2tldCA9IGNoZWNrLmJ1Y2tldCA/PyAnJztcbiAgICBjb3VudHNbYnVja2V0XSA9IChjb3VudHNbYnVja2V0XSA/PyAwKSArIDE7XG4gICAgcmV0dXJuIGNvdW50cztcbiAgfSwge30pO1xuXG4gIHJldHVybiB7XG4gICAgc3VtbWFyeToge1xuICAgICAgdG90YWw6IGNoZWNrcy5sZW5ndGgsXG4gICAgICBwYXNzOiBzdW1tYXJ5LnBhc3MgPz8gMCxcbiAgICAgIGZhaWw6IHN1bW1hcnkuZmFpbCA/PyAwLFxuICAgICAgcGVuZGluZzogc3VtbWFyeS5wZW5kaW5nID8/IDAsXG4gICAgICBza2lwcGluZzogc3VtbWFyeS5za2lwcGluZyA/PyAwLFxuICAgICAgY2FuY2VsOiBzdW1tYXJ5LmNhbmNlbCA/PyAwLFxuICAgIH0sXG4gICAgY2hlY2tzLFxuICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzOiBDaVJlc3VsdHMpOiBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+IHtcbiAgY29uc3QgbGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3cgPSBjaVJlc3VsdHMuY2hlY2tzLnJlZHVjZTxSZWNvcmQ8c3RyaW5nLCBDaGVja1tdPj4oKGdyb3VwZWRSZXN1bHRzLCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IHdvcmtmbG93S2V5ID0gY2hlY2sud29ya2Zsb3cgfHwgY2hlY2submFtZSB8fCAndW5rbm93bl93b3JrZmxvdyc7XG4gICAgZ3JvdXBlZFJlc3VsdHNbd29ya2Zsb3dLZXldID8/PSBbXTtcbiAgICBncm91cGVkUmVzdWx0c1t3b3JrZmxvd0tleV0ucHVzaChjaGVjayk7XG4gICAgcmV0dXJuIGdyb3VwZWRSZXN1bHRzO1xuICB9LCB7fSk7XG5cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhsYXRlc3RSZXN1bHRzQnlXb3JrZmxvdykubWFwKChbd29ya2Zsb3dLZXksIGNoZWNrc10pID0+IHtcbiAgICAgIGNvbnN0IGxhdGVzdEF0dGVtcHRDaGVja3MgPSBsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyhjaGVja3MpO1xuICAgICAgY29uc3QgZmlyc3RDaGVjayA9IGxhdGVzdEF0dGVtcHRDaGVja3NbMF07XG4gICAgICBpZiAoIWZpcnN0Q2hlY2spIHtcbiAgICAgICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IG5vIGNoZWNrcyBmb3VuZCBmb3Igd29ya2Zsb3cgJHt3b3JrZmxvd0tleX1gKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGxhdGVzdENoZWNrID1cbiAgICAgICAgbGF0ZXN0QXR0ZW1wdENoZWNrcy5yZWR1Y2U8Q2hlY2sgfCB1bmRlZmluZWQ+KChjdXJyZW50TGF0ZXN0LCBjaGVjaykgPT4ge1xuICAgICAgICAgIGlmICghY3VycmVudExhdGVzdCkge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2spID4gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY3VycmVudExhdGVzdCkgPyBjaGVjayA6IGN1cnJlbnRMYXRlc3Q7XG4gICAgICAgIH0sIHVuZGVmaW5lZCkgPz8gZmlyc3RDaGVjaztcblxuICAgICAgcmV0dXJuIFtcbiAgICAgICAgd29ya2Zsb3dLZXksXG4gICAgICAgIHtcbiAgICAgICAgICBjbGFzc2lmaWNhdGlvbjogd29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbihsYXRlc3RBdHRlbXB0Q2hlY2tzKSxcbiAgICAgICAgICBjaGVjazogbGF0ZXN0Q2hlY2ssXG4gICAgICAgICAgY2hlY2tzOiBsYXRlc3RBdHRlbXB0Q2hlY2tzLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9KVxuICApO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKFxuICBjbGFzc2lmaWVkUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PlxuKTogW1JlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4sIFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD5dIHtcbiAgY29uc3QgZmFpbGVkUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiA9IHt9O1xuICBjb25zdCBydW5uaW5nUmVzdWx0czogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiA9IHt9O1xuXG4gIGZvciAoY29uc3QgW3dvcmtmbG93S2V5LCByZXN1bHRdIG9mIE9iamVjdC5lbnRyaWVzKGNsYXNzaWZpZWRSZXN1bHRzKSkge1xuICAgIGlmIChyZXN1bHQuY2xhc3NpZmljYXRpb24gPT09ICdmYWlsZWQnKSB7XG4gICAgICBmYWlsZWRSZXN1bHRzW3dvcmtmbG93S2V5XSA9IHJlc3VsdDtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAocmVzdWx0LmNsYXNzaWZpY2F0aW9uID09PSAncnVubmluZycgJiYgcmVzdWx0LmNoZWNrcy5zb21lKChjaGVjaykgPT4gdGVzdFJlbGF0ZWRDaGVjayhjaGVjaykpKSB7XG4gICAgICBydW5uaW5nUmVzdWx0c1t3b3JrZmxvd0tleV0gPSByZXN1bHQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c107XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzKFxuICBwck51bWJlcjogc3RyaW5nLFxuICBzbGVlcEZuOiAoc2Vjb25kczogbnVtYmVyKSA9PiBQcm9taXNlPHZvaWQ+ID0gc2xlZXBTZWNvbmRzLFxuICBsYXRlc3RDaVJlc3VsdHNGbjogKHByTnVtYmVyPzogc3RyaW5nKSA9PiBDaVJlc3VsdHMgfCBQcm9taXNlPENpUmVzdWx0cz4gPSBsYXRlc3RQckNpUmVzdWx0cyxcbiAgcHJvZ3Jlc3NGbjogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZCA9IHByb2dyZXNzXG4pOiBQcm9taXNlPFtDaVJlc3VsdHMsIG51bWJlciwgYm9vbGVhbl0+IHtcbiAgbGV0IGF0dGVtcHRzID0gMDtcbiAgbGV0IGNpUmVzdWx0cyA9IGF3YWl0IGxhdGVzdENpUmVzdWx0c0ZuKHByTnVtYmVyKTtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgY2xhc3NpZmllZFJlc3VsdHMgPSBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHMpO1xuICAgIGNvbnN0IFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c10gPSBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoY2xhc3NpZmllZFJlc3VsdHMpO1xuXG4gICAgaWYgKE9iamVjdC5rZXlzKGZhaWxlZFJlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBbY2lSZXN1bHRzLCBhdHRlbXB0cywgZmFsc2VdO1xuICAgIH1cbiAgICBpZiAoT2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtjaVJlc3VsdHMsIGF0dGVtcHRzLCBmYWxzZV07XG4gICAgfVxuICAgIGlmIChhdHRlbXB0cyA+PSBURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTKSB7XG4gICAgICByZXR1cm4gW2NpUmVzdWx0cywgYXR0ZW1wdHMsIHRydWVdO1xuICAgIH1cblxuICAgIGF0dGVtcHRzICs9IDE7XG4gICAgcHJvZ3Jlc3NGbihcbiAgICAgIGBXYWl0aW5nIGZvciB0ZXN0LXJlbGF0ZWQgd29ya2Zsb3dzIHRvIGZpbmlzaCAoYXR0ZW1wdCAke2F0dGVtcHRzfS8ke1RFU1RfQ0hFQ0tfV0FJVF9NQVhfQVRURU1QVFN9KTogJHtPYmplY3Qua2V5cyhydW5uaW5nUmVzdWx0cykuam9pbignLCAnKX1gXG4gICAgKTtcbiAgICBhd2FpdCBzbGVlcEZuKFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTKTtcbiAgICBjaVJlc3VsdHMgPSBhd2FpdCBsYXRlc3RDaVJlc3VsdHNGbihwck51bWJlcik7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrOiBDaGVjayB8IHVuZGVmaW5lZCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGNvbnN0IGxpbmsgPSBjaGVjaz8ubGluaztcbiAgaWYgKCFsaW5rKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuICByZXR1cm4gbGluay5tYXRjaCgvXFwvYWN0aW9uc1xcL3J1bnNcXC8oXFxkKykvKT8uWzFdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd29ya2Zsb3dSdW4ocnVuSWQ6IHN0cmluZyB8IHVuZGVmaW5lZCk6IFByb21pc2U8SnNvbk9iamVjdCB8IHVuZGVmaW5lZD4ge1xuICBpZiAoIXJ1bklkKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIGNvbnN0IHJ1bkpzb24gPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKFsncnVuJywgJ3ZpZXcnLCBydW5JZCwgJy0tanNvbicsIFdPUktGTE9XX1JVTl9KU09OX0ZJRUxEUy5qb2luKCcsJyldLCBbMV0pO1xuICBpZiAocnVuSnNvbi50cmltKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UocnVuSnNvbikgYXMgSnNvbk9iamVjdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBTeW50YXhFcnJvcikge1xuICAgICAgcHJvY2Vzc1N0ZGVyci53cml0ZShgV2FybmluZzogQ291bGQgbm90IHBhcnNlIEpTT04gZm9yIHdvcmtmbG93IHJ1biAke3J1bklkfTogJHtlcnJvci5tZXNzYWdlfVxcbmApO1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhdGVzdENoZWNrc0ZvcldvcmtmbG93KGNoZWNrczogQ2hlY2tbXSk6IENoZWNrW10ge1xuICBjb25zdCBncm91cHMgPSBjaGVja3MucmVkdWNlKChncm91cGVkQ2hlY2tzLCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IGtleSA9IHdvcmtmbG93QXR0ZW1wdEtleShjaGVjayk7XG4gICAgY29uc3QgZ3JvdXAgPSBncm91cGVkQ2hlY2tzLmdldChrZXkpO1xuICAgIGlmIChncm91cCkge1xuICAgICAgZ3JvdXAucHVzaChjaGVjayk7XG4gICAgICByZXR1cm4gZ3JvdXBlZENoZWNrcztcbiAgICB9XG4gICAgZ3JvdXBlZENoZWNrcy5zZXQoa2V5LCBbY2hlY2tdKTtcbiAgICByZXR1cm4gZ3JvdXBlZENoZWNrcztcbiAgfSwgbmV3IE1hcDxzdHJpbmcsIENoZWNrW10+KCkpO1xuXG4gIHJldHVybiBBcnJheS5mcm9tKGdyb3Vwcy52YWx1ZXMoKSkucmVkdWNlPENoZWNrW10+KChsYXRlc3RHcm91cCwgY3VycmVudEdyb3VwKSA9PiB7XG4gICAgaWYgKGxhdGVzdEdyb3VwLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIGN1cnJlbnRHcm91cDtcbiAgICB9XG5cbiAgICByZXR1cm4gbGF0ZXN0R3JvdXBUaW1lc3RhbXAoY3VycmVudEdyb3VwKSA+IGxhdGVzdEdyb3VwVGltZXN0YW1wKGxhdGVzdEdyb3VwKSA/IGN1cnJlbnRHcm91cCA6IGxhdGVzdEdyb3VwO1xuICB9LCBbXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd0F0dGVtcHRLZXkoY2hlY2s6IENoZWNrKTogc3RyaW5nIHtcbiAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjayk7XG4gIHJldHVybiBydW5JZCA/IGBydW46JHtydW5JZH1gIDogJ3Vua25vd25fcnVuJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24oY2hlY2tzOiBDaGVja1tdKTogV29ya2Zsb3dDbGFzc2lmaWNhdGlvbiB7XG4gIGNvbnN0IGJ1Y2tldHMgPSBjaGVja3MubWFwKChjaGVjaykgPT4gY2hlY2suYnVja2V0ID8/ICcnKTtcbiAgaWYgKGJ1Y2tldHMuc29tZSgoYnVja2V0KSA9PiAhWydwYXNzJywgJ3NraXBwaW5nJywgJ3BlbmRpbmcnXS5pbmNsdWRlcyhidWNrZXQpKSkge1xuICAgIHJldHVybiAnZmFpbGVkJztcbiAgfVxuICBpZiAoYnVja2V0cy5pbmNsdWRlcygncGVuZGluZycpKSB7XG4gICAgcmV0dXJuICdydW5uaW5nJztcbiAgfVxuICByZXR1cm4gJ3N1Y2Nlc3NmdWwnO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2s6IENoZWNrKTogc3RyaW5nIHtcbiAgY29uc3QgdGltZXN0YW1wID0gY2hlY2suY29tcGxldGVkQXQ7XG4gIGlmICghdGltZXN0YW1wIHx8IHRpbWVzdGFtcCA9PT0gWkVST19USU1FU1RBTVApIHtcbiAgICByZXR1cm4gY2hlY2suc3RhcnRlZEF0ID8/ICcnO1xuICB9XG4gIHJldHVybiB0aW1lc3RhbXA7XG59XG5cbmZ1bmN0aW9uIGxhdGVzdEdyb3VwVGltZXN0YW1wKGNoZWNrczogQ2hlY2tbXSk6IHN0cmluZyB7XG4gIHJldHVybiBjaGVja3MucmVkdWNlKChsYXRlc3QsIGNoZWNrKSA9PiB7XG4gICAgY29uc3QgdGltZXN0YW1wID0gbGF0ZXN0Q2hlY2tUaW1lc3RhbXAoY2hlY2spO1xuICAgIHJldHVybiB0aW1lc3RhbXAgPiBsYXRlc3QgPyB0aW1lc3RhbXAgOiBsYXRlc3Q7XG4gIH0sICcnKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRlc3RSZWxhdGVkQ2hlY2soY2hlY2s6IENoZWNrKTogYm9vbGVhbiB7XG4gIHJldHVybiBbY2hlY2submFtZSwgY2hlY2sud29ya2Zsb3ddLnNvbWUoKHZhbHVlKSA9PiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnICYmIFRFU1RfUkVMQVRFRF9QQVRURVJOLnRlc3QodmFsdWUpKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNsZWVwU2Vjb25kcyhzZWNvbmRzOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgc2xlZXAoc2Vjb25kcyAqIDEwMDApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHJlYW1Ub1RleHQoc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0gfCBudWxsKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKCFzdHJlYW0pIHtcbiAgICByZXR1cm4gJyc7XG4gIH1cblxuICBjb25zdCBjaHVua3M6IEJ1ZmZlcltdID0gW107XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgY2h1bmtzLnB1c2godHlwZW9mIGNodW5rID09PSAnc3RyaW5nJyA/IEJ1ZmZlci5mcm9tKGNodW5rKSA6IEJ1ZmZlci5mcm9tKGNodW5rKSk7XG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoY2h1bmtzKS50b1N0cmluZygndXRmOCcpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFJlcGxpZXNGcm9tU3RkaW4oKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PiB7XG4gIGNvbnN0IGlucHV0ID0gYXdhaXQgcmVhZFJlcXVpcmVkU3RkaW5UZXh0KCk7XG4gIGNvbnN0IHBheWxvYWQgPSBwYXJzZVJlcGx5SW5wdXQoaW5wdXQpO1xuICBjb25zdCByZXBsaWVzID0gcGF5bG9hZC5yZXBsaWVzID8/IHt9O1xuICBjb25zdCBub3JtYWxpemVkUmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9O1xuICBmb3IgKGNvbnN0IFt0aHJlYWRJZCwgYm9keV0gb2YgT2JqZWN0LmVudHJpZXMocmVwbGllcykpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnICYmIGJvZHkubGVuZ3RoID4gMCkge1xuICAgICAgbm9ybWFsaXplZFJlcGxpZXNbdGhyZWFkSWRdID0gYm9keTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG5vcm1hbGl6ZWRSZXBsaWVzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlblByKGJvZHk/OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBoZWFkID0gKGF3YWl0IHJ1bkNvbW1hbmQoWydnaXQnLCAnYnJhbmNoJywgJy0tc2hvdy1jdXJyZW50J10pKS50cmltKCk7XG4gIGNvbnN0IGJhc2UgPSAoYXdhaXQgZ2goWydyZXBvJywgJ3ZpZXcnLCAnLS1qc29uJywgJ2RlZmF1bHRCcmFuY2hSZWYnLCAnLS1qcScsICcuZGVmYXVsdEJyYW5jaFJlZi5uYW1lJ10pKS50cmltKCk7XG5cbiAgaWYgKCFoZWFkKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgY3VycmVudCBicmFuY2gnKTtcbiAgfVxuICBpZiAoIWJhc2UpIHtcbiAgICBleGl0V2l0aEVycm9yKCdFcnJvcjogY291bGQgbm90IGRldGVybWluZSBkZWZhdWx0IGJyYW5jaCcpO1xuICB9XG4gIGlmIChoZWFkID09PSBiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcihgRXJyb3I6IGN1cnJlbnQgYnJhbmNoIGlzIHRoZSBkZWZhdWx0IGJyYW5jaCAoJHtiYXNlfSlgKTtcbiAgfVxuXG4gIGNvbnN0IGNyZWF0ZUFyZ3MgPSBbJ3ByJywgJ2NyZWF0ZScsICctLWJhc2UnLCBiYXNlLCAnLS1oZWFkJywgaGVhZCwgJy0tZmlsbCddO1xuICBpZiAoYm9keSAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICBjcmVhdGVBcmdzLnB1c2goJy0tYm9keS1maWxlJywgJy0nKTtcbiAgfVxuXG4gIHByb2dyZXNzKCdDcmVhdGluZyBwdWxsIHJlcXVlc3QuLi4nKTtcbiAgYXdhaXQgZ2goY3JlYXRlQXJncywgYm9keSk7XG5cbiAgcmV0dXJuIChcbiAgICBhd2FpdCBnaChbJ3ByJywgJ3ZpZXcnLCAnLS1qc29uJywgJ2lkLG51bWJlcix0aXRsZSx1cmwsc3RhdGUsaXNEcmFmdCxiYXNlUmVmTmFtZSxoZWFkUmVmTmFtZSxhdXRob3InXSlcbiAgKS50cmltKCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsaXN0UHJSZXZpZXdUaHJlYWRzKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG5cbiAgcHJvZ3Jlc3MoJ0ZldGNoaW5nIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMuLi4nKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgdW5yZXNvbHZlZF90aHJlYWRzOiBhd2FpdCB1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgW293bmVyLCBuYW1lXSA9IGF3YWl0IGN1cnJlbnRSZXBvUGFydHMoKTtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcbiAgY29uc3QgdW5yZXNvbHZlZElkcyA9IG5ldyBTZXQoYXdhaXQgdW5yZXNvbHZlZFJldmlld1RocmVhZElkcyhvd25lciwgbmFtZSwgcHJOdW1iZXIpKTtcblxuICBwcm9ncmVzcyhgUmVwbHlpbmcgdG8gJHtPYmplY3Qua2V5cyhyZXBsaWVzKS5sZW5ndGh9IHJldmlldyB0aHJlYWRzLi4uYCk7XG5cbiAgY29uc3QgcmVzb2x2ZWRUaHJlYWRJZHM6IHN0cmluZ1tdID0gW107XG4gIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhyZXBsaWVzKTtcblxuICBmb3IgKGNvbnN0IFtpbmRleCwgW3RocmVhZElkLCBib2R5XV0gb2YgZW50cmllcy5lbnRyaWVzKCkpIHtcbiAgICBwcm9ncmVzcyhgUHJvY2Vzc2luZyAke2luZGV4ICsgMX0vJHtlbnRyaWVzLmxlbmd0aH06ICR7dGhyZWFkSWR9YCk7XG4gICAgaWYgKCF1bnJlc29sdmVkSWRzLmhhcyh0aHJlYWRJZCkpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZ3JhcGhxbDx7XG4gICAgICBkYXRhPzoge1xuICAgICAgICByZXNvbHZlUmV2aWV3VGhyZWFkPzoge1xuICAgICAgICAgIHRocmVhZD86IHtcbiAgICAgICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgICAgICBpc1Jlc29sdmVkOiBib29sZWFuO1xuICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH0+KFxuICAgICAgYFxuICAgICAgICBtdXRhdGlvbigkdGhyZWFkSWQ6IElEISwgJGJvZHk6IFN0cmluZyEpIHtcbiAgICAgICAgICBhZGRQdWxsUmVxdWVzdFJldmlld1RocmVhZFJlcGx5KGlucHV0OiB7cHVsbFJlcXVlc3RSZXZpZXdUaHJlYWRJZDogJHRocmVhZElkLCBib2R5OiAkYm9keX0pIHtcbiAgICAgICAgICAgIGNvbW1lbnQge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcmVzb2x2ZVJldmlld1RocmVhZChpbnB1dDoge3RocmVhZElkOiAkdGhyZWFkSWR9KSB7XG4gICAgICAgICAgICB0aHJlYWQge1xuICAgICAgICAgICAgICBpZFxuICAgICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBgLFxuICAgICAgeyB0aHJlYWRJZCwgYm9keSB9XG4gICAgKTtcblxuICAgIGlmIChyZXNwb25zZS5kYXRhPy5yZXNvbHZlUmV2aWV3VGhyZWFkPy50aHJlYWQ/LmlzUmVzb2x2ZWQpIHtcbiAgICAgIHJlc29sdmVkVGhyZWFkSWRzLnB1c2godGhyZWFkSWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBwcm9ncmVzcyhgV2FybmluZzogZmFpbGVkIHRvIHJlc29sdmUgdGhyZWFkICR7dGhyZWFkSWR9LmApO1xuICAgIH1cbiAgfVxuXG4gIHByb2dyZXNzKCdEb25lLicpO1xuICByZXR1cm4geWFtbER1bXAoeyByZXNvbHZlZF90aHJlYWRfaWRzOiByZXNvbHZlZFRocmVhZElkcyB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNoZWNrUHJDaSgpOiBQcm9taXNlPHsgb3V0cHV0OiBzdHJpbmc7IGV4aXRDb2RlOiBudW1iZXIgfT4ge1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuXG4gIHByb2dyZXNzKCdGZXRjaGluZyBsYXRlc3QgQ0kgcmVzdWx0cy4uLicpO1xuICBjb25zdCBbY2lSZXN1bHRzLCB3YWl0QXR0ZW1wdHMsIHdhaXRUaW1lZE91dF0gPSBhd2FpdCB3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzKHByTnVtYmVyKTtcbiAgY29uc3QgY2xhc3NpZmllZExhdGVzdCA9IGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0cyk7XG4gIGNvbnN0IFtmYWlsZWRSZXN1bHRzLCBydW5uaW5nUmVzdWx0c10gPSBmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQoY2xhc3NpZmllZExhdGVzdCk7XG5cbiAgY29uc3QgbGF0ZXN0V29ya2Zsb3dSZXN1bHRzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxuICAgICAgT2JqZWN0LmVudHJpZXMoY2xhc3NpZmllZExhdGVzdCkubWFwKGFzeW5jIChbd29ya2Zsb3dLZXksIHJlc3VsdF0pID0+IHtcbiAgICAgICAgY29uc3QgY2hlY2sgPSByZXN1bHQuY2hlY2s7XG4gICAgICAgIGNvbnN0IHJ1biA9IGF3YWl0IHdvcmtmbG93UnVuKHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKGNoZWNrKSk7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgd29ya2Zsb3dLZXksXG4gICAgICAgICAge1xuICAgICAgICAgICAgY2xhc3NpZmljYXRpb246IHJlc3VsdC5jbGFzc2lmaWNhdGlvbixcbiAgICAgICAgICAgIGNoZWNrOiBkZWVwQ29weShjaGVjayksXG4gICAgICAgICAgICB3b3JrZmxvd1J1bjogcnVuICYmIGRlZXBDb3B5KHJ1biksXG4gICAgICAgICAgfSxcbiAgICAgICAgXTtcbiAgICAgIH0pXG4gICAgKVxuICApO1xuXG4gIGNvbnN0IHBheWxvYWQ6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge1xuICAgIGxhdGVzdF9jaV9yZXN1bHRzOiBjaVJlc3VsdHMsXG4gICAgd2FpdGVkX2Zvcl90ZXN0X3JlbGF0ZWRfY2hlY2tzOiB3YWl0QXR0ZW1wdHMgPiAwLFxuICAgIHRlc3RfcmVsYXRlZF9jaGVja193YWl0X2F0dGVtcHRzOiB3YWl0QXR0ZW1wdHMsXG4gICAgdGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfdGltZWRfb3V0OiB3YWl0VGltZWRPdXQsXG4gICAgbGF0ZXN0X3dvcmtmbG93X3Jlc3VsdHM6IGxhdGVzdFdvcmtmbG93UmVzdWx0cyxcbiAgfTtcblxuICBpZiAoT2JqZWN0LmtleXMoZmFpbGVkUmVzdWx0cykubGVuZ3RoID4gMCkge1xuICAgIHBheWxvYWQuZmFpbGVkX3dvcmtmbG93X291dHB1dHMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoZmFpbGVkUmVzdWx0cykubWFwKGFzeW5jIChbd29ya2Zsb3dLZXksIHJlc3VsdF0pID0+IHtcbiAgICAgICAgICBjb25zdCBydW5JZCA9IHdvcmtmbG93UnVuSWRGcm9tQ2hlY2tMaW5rKHJlc3VsdC5jaGVjayk7XG4gICAgICAgICAgaWYgKCFydW5JZCkge1xuICAgICAgICAgICAgcmV0dXJuIFt3b3JrZmxvd0tleSwgJ0ZhaWxlZCBsYXRlc3QgcmVzdWx0IGhhcyBubyBHaXRIdWIgQWN0aW9ucyBydW4gbGluay4nXTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIFt3b3JrZmxvd0tleSwgYXdhaXQgZ2hBbGxvd0V4aXRDb2RlcyhbJ3J1bicsICd2aWV3JywgcnVuSWQsICctLWxvZy1mYWlsZWQnXSwgWzFdKV07XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgKTtcbiAgICByZXR1cm4geyBvdXRwdXQ6IHlhbWxEdW1wKHBheWxvYWQpLCBleGl0Q29kZTogMSB9O1xuICB9XG5cbiAgaWYgKE9iamVjdC5rZXlzKHJ1bm5pbmdSZXN1bHRzKS5sZW5ndGggPiAwKSB7XG4gICAgcGF5bG9hZC50ZXN0X3dvcmtmbG93X291dHB1dCA9ICdUaW1lZCBvdXQgd2FpdGluZyBmb3IgdGVzdC1yZWxhdGVkIHdvcmtmbG93cyB0byBmaW5pc2guJztcbiAgICBwYXlsb2FkLnJ1bm5pbmdfdGVzdF9yZWxhdGVkX3dvcmtmbG93cyA9IE9iamVjdC5rZXlzKHJ1bm5pbmdSZXN1bHRzKTtcbiAgICByZXR1cm4geyBvdXRwdXQ6IHlhbWxEdW1wKHBheWxvYWQpLCBleGl0Q29kZTogMSB9O1xuICB9XG5cbiAgcGF5bG9hZC50ZXN0X3dvcmtmbG93X291dHB1dCA9ICdBbGwgd29ya2Zsb3dzIGFyZSBzdWNjZXNzZnVsLic7XG4gIHJldHVybiB7IG91dHB1dDogeWFtbER1bXAocGF5bG9hZCksIGV4aXRDb2RlOiAwIH07XG59XG5cbmZ1bmN0aW9uIHBhcnNlUmVwbHlJbnB1dChpbnB1dDogc3RyaW5nKTogeyByZXBsaWVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfSB7XG4gIGNvbnN0IGVycm9yUHJlZml4ID0gJ0Vycm9yOiBJbnZhbGlkIGlucHV0IGZvcm1hdCBvbiBzdGRpbic7XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBwYXJzZWQgPSBKU09OLnBhcnNlKGlucHV0KSBhcyB1bmtub3duO1xuICAgIGlmICghaXNSZXBseUlucHV0KHBhcnNlZCkpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoYCR7ZXJyb3JQcmVmaXh9OiBleHBlY3RlZCBhbiBvYmplY3Qgd2l0aCBhbiBvcHRpb25hbCBzdHJpbmctdmFsdWVkIFxcYHJlcGxpZXNcXGAgbWFwYCwgMik7XG4gICAgfVxuICAgIHJldHVybiBwYXJzZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBJbnZhbGlkIEpTT04gcHJvdmlkZWQgb24gc3RkaW46ICR7ZXJyb3IubWVzc2FnZX1gLCAyKTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNSZXBseUlucHV0KHZhbHVlOiB1bmtub3duKTogdmFsdWUgaXMgeyByZXBsaWVzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZD4gfSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09ICdvYmplY3QnIHx8IHZhbHVlID09PSBudWxsIHx8IEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgY29uc3QgcmVwbGllcyA9ICh2YWx1ZSBhcyB7IHJlcGxpZXM/OiB1bmtub3duIH0pLnJlcGxpZXM7XG4gIGlmIChyZXBsaWVzID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuICBpZiAodHlwZW9mIHJlcGxpZXMgIT09ICdvYmplY3QnIHx8IHJlcGxpZXMgPT09IG51bGwgfHwgQXJyYXkuaXNBcnJheShyZXBsaWVzKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QudmFsdWVzKHJlcGxpZXMpLmV2ZXJ5KChyZXBseSkgPT4gcmVwbHkgPT09IG51bGwgfHwgcmVwbHkgPT09IHVuZGVmaW5lZCB8fCB0eXBlb2YgcmVwbHkgPT09ICdzdHJpbmcnKTtcbn1cbiIsImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcblxuZXhwb3J0IHR5cGUgUmV2aWV3QWdlbnQgPSAnY29kZXgnIHwgJ2NsYXVkZScgfCAnZ2VtaW5pJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1blJldmlldyhhZ2VudDogUmV2aWV3QWdlbnQpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBkZWZhdWx0QnJhbmNoID0gYXdhaXQgY3VycmVudERlZmF1bHRCcmFuY2goKTtcbiAgY29uc3QgcHJvbXB0ID0gYnVpbGRSZXZpZXdQcm9tcHQoZGVmYXVsdEJyYW5jaCk7XG5cbiAgc3dpdGNoIChhZ2VudCkge1xuICAgIGNhc2UgJ2NvZGV4JzpcbiAgICAgIHJldHVybiBhd2FpdCBydW5Db21tYW5kKFsnbnB4JywgJy0teWVzJywgJ0BvcGVuYWkvY29kZXhAbGF0ZXN0JywgJy0teW9sbycsICctcCcsIHByb21wdF0pO1xuICAgIGNhc2UgJ2NsYXVkZSc6XG4gICAgICByZXR1cm4gYXdhaXQgcnVuQ29tbWFuZChbJ2NsYXVkZScsICctLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnMnLCAnLXAnLCBwcm9tcHRdKTtcbiAgICBjYXNlICdnZW1pbmknOlxuICAgICAgcmV0dXJuIGF3YWl0IHJ1bkNvbW1hbmQoW1xuICAgICAgICAnbnB4JyxcbiAgICAgICAgJy0teWVzJyxcbiAgICAgICAgJ0Bnb29nbGUvZ2VtaW5pLWNsaUBwcmV2aWV3JyxcbiAgICAgICAgJy0tYXBwcm92YWwtbW9kZScsXG4gICAgICAgICd5b2xvJyxcbiAgICAgICAgJy0tbW9kZWwnLFxuICAgICAgICAnZ2VtaW5pLTMuMS1wcm8tcHJldmlldycsXG4gICAgICAgICctcCcsXG4gICAgICAgIHByb21wdCxcbiAgICAgIF0pO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGN1cnJlbnREZWZhdWx0QnJhbmNoKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIHJldHVybiByZXF1aXJlTm9uRW1wdHkoXG4gICAgKFxuICAgICAgYXdhaXQgcnVuQ29tbWFuZChbJ2doJywgJ3JlcG8nLCAndmlldycsICctLWpzb24nLCAnZGVmYXVsdEJyYW5jaFJlZicsICctLXRlbXBsYXRlJywgJ3t7LmRlZmF1bHRCcmFuY2hSZWYubmFtZX19J10pXG4gICAgKS50cmltKCksXG4gICAgJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGJyYW5jaCdcbiAgKTtcbn1cblxuZnVuY3Rpb24gYnVpbGRSZXZpZXdQcm9tcHQoZGVmYXVsdEJyYW5jaDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBSZXZpZXcgdGhlIGN1cnJlbnQgYnJhbmNoIGFnYWluc3QgdGhlIHJlcG9zaXRvcnkncyBkZWZhdWx0IGJyYW5jaCAke2RlZmF1bHRCcmFuY2h9IHZpYSBcXGBnaXQgZGlmZiBcIiQoZ2l0IG1lcmdlLWJhc2UgXCIke2RlZmF1bHRCcmFuY2h9XCIgSEVBRClcIlxcYC5cbkZvciBlYWNoIHJldmlldyBjb21tZW50LCBkbyB0aGUgZm9sbG93aW5nIGJlZm9yZSBtb3ZpbmcgdG8gdGhlIG5leHQgY29tbWVudDpcbjEuIENvbGxlY3QgdGhlIGluZm9ybWF0aW9uIHlvdSBuZWVkOlxuICAgLSBSZWFkIHRoZSBjb21tZW50IGNhcmVmdWxseSBhbmQgaWRlbnRpZnkgdGhlIGV4YWN0IGNsYWltIGJlaW5nIG1hZGUuXG4gICAtIEluc3BlY3QgdGhlIHJlZmVyZW5jZWQgY29kZSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNhbGwgc2l0ZXMsIHJlbGF0ZWQgdHlwZXMsIHRlc3RzLCBjb25maWd1cmF0aW9uLCBhbmQgcmVjZW50IGRpZmZzIHdoZW4gdGhleSBhZmZlY3QgdGhlIGNsYWltLlxuMi4gR2F0aGVyIHN1cHBvcnRpbmcgZXZpZGVuY2U6XG4gICAtIElmIGNvZGUgaW5zcGVjdGlvbiBpcyBlbm91Z2gsIHVzZSB0aGUgY3VycmVudCBjb2RlYmFzZSBhcyB0aGUgcHJpbWFyeSBldmlkZW5jZS5cbiAgIC0gSWYgdGhlIGNsYWltIGlzIGFib3V0IHJ1bnRpbWUgYmVoYXZpb3IsIHJlcHJvZHVjZSBpdCB3aXRoIHRoZSBzbWFsbGVzdCBwcmFjdGljYWwgZXhwZXJpbWVudCwgc3VjaCBhcyBhIGZvY3VzZWQgY29tbWFuZCwgYSB0aW55IHNjcmlwdCwgYSB0ZW1wb3JhcnkgbG9jYWwgYXNzZXJ0aW9uLCBvciBhbm90aGVyIG5hcnJvdyBjaGVjayB0aGF0IGRvZXMgbm90IGNoYW5nZSB0aGUgaW50ZW5kZWQgYmVoYXZpb3IuXG4gICAtIElmIHRoZSBjbGFpbSBkZXBlbmRzIG9uIGZyYW1ld29yaywgbGlicmFyeSwgcGxhdGZvcm0sIG9yIGxhbmd1YWdlIGJlaGF2aW9yLCBjb25maXJtIGl0IGFnYWluc3QgdGhlIGxhdGVzdCBvZmZpY2lhbCBkb2N1bWVudGF0aW9uIG9yIGFub3RoZXIgcHJpbWFyeSBzb3VyY2UgaW5zdGVhZCBvZiByZWx5aW5nIG9uIG1lbW9yeS5cbjMuIEp1ZGdlIHdoZXRoZXIgdGhlIGNvbW1lbnQgaXMgdmFsaWQ6XG4gICAtIE1hcmsgaXQgdmFsaWQgb25seSB3aGVuIHRoZSBhdmFpbGFibGUgZXZpZGVuY2Ugc2hvd3MgdGhlIHJlcG9ydGVkIGlzc3VlIGlzIHN0aWxsIHJlYWwgaW4gdGhlIGN1cnJlbnQgY29kZWJhc2UuXG4gICAtIE90aGVyd2lzZSwgbWFyayBpdCBub3QgdmFsaWQuXG5SZXBvcnQgb25seSB0aGUgY29tbWVudHMgeW91IGp1ZGdlZCB2YWxpZCwgYW5kIGluY2x1ZGUgYSBzaG9ydCBiYXNpcyBmb3IgZWFjaCBvbmUgdGhhdCBjaXRlcyB0aGUgZXZpZGVuY2UgeW91IHVzZWQsIHN1Y2ggYXMgdGhlIGZhaWxpbmcgc2NlbmFyaW8sIGV4cGVyaW1lbnQgcmVzdWx0LCBvciByZWxldmFudCBvZmZpY2lhbCBkb2N1bWVudGF0aW9uLiBEbyBub3QgbW9kaWZ5IGNvZGUuXG5JZiB0aGVyZSBhcmUgbm8gdmFsaWQgcmV2aWV3IGNvbW1lbnRzLCByZXNwb25kIHdpdGggZXhhY3RseTogTm8gdmFsaWQgcmV2aWV3IGNvbW1lbnRzLmA7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmQoY29tbWFuZDogc3RyaW5nW10pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBwcm9jID0gc3Bhd24oY29tbWFuZFswXSA/PyAnJywgY29tbWFuZC5zbGljZSgxKSwge1xuICAgIHN0ZGlvOiBbJ2lnbm9yZScsICdwaXBlJywgJ3BpcGUnXSxcbiAgfSk7XG5cbiAgY29uc3QgW3N0ZG91dCwgc3RkZXJyLCBleGl0Q29kZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbXG4gICAgc3RyZWFtVG9UZXh0KHByb2Muc3Rkb3V0KSxcbiAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRlcnIpLFxuICAgIG5ldyBQcm9taXNlPG51bWJlcj4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcHJvYy5vbmNlKCdlcnJvcicsIHJlamVjdCk7XG4gICAgICBwcm9jLm9uY2UoJ2Nsb3NlJywgKGNvZGUpID0+IHJlc29sdmUoY29kZSA/PyAxKSk7XG4gICAgfSksXG4gIF0pO1xuXG4gIGlmIChleGl0Q29kZSA9PT0gMCkge1xuICAgIHJldHVybiBzdGRvdXQ7XG4gIH1cblxuICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcbiAgdGhyb3cgbmV3IEVycm9yKG91dHB1dCB8fCBgQ29tbWFuZCBmYWlsZWQ6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHN0cmVhbVRvVGV4dChzdHJlYW06IE5vZGVKUy5SZWFkYWJsZVN0cmVhbSB8IG51bGwgfCB1bmRlZmluZWQpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAoIXN0cmVhbSkge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGxldCB0ZXh0ID0gJyc7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtKSB7XG4gICAgdGV4dCArPSB0eXBlb2YgY2h1bmsgPT09ICdzdHJpbmcnID8gY2h1bmsgOiBjaHVuay50b1N0cmluZygndXRmOCcpO1xuICB9XG4gIHJldHVybiB0ZXh0O1xufVxuXG5mdW5jdGlvbiByZXF1aXJlTm9uRW1wdHkodmFsdWU6IHN0cmluZywgbWVzc2FnZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufVxuIiwiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSAnY29tbWFuZGVyJztcbmltcG9ydCB7XG4gIGNoZWNrUHJDaSxcbiAgbGlzdFByUmV2aWV3VGhyZWFkcyxcbiAgb3BlblByLFxuICByZWFkUmVwbGllc0Zyb21TdGRpbixcbiAgcmVhZFN0ZGluVGV4dCxcbiAgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyxcbn0gZnJvbSAnLi4vcHIvcHItY29tbWFuZHMuanMnO1xuaW1wb3J0IHsgdHlwZSBSZXZpZXdBZ2VudCwgcnVuUmV2aWV3IH0gZnJvbSAnLi4vcmV2aWV3L3Jldmlldy1jb21tYW5kcy5qcyc7XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtLm5hbWUoJ2FnZW50LXNraWxscycpLmRlc2NyaXB0aW9uKCdDTEkgY29tbWFuZHMgZm9yIHRoZSBza2lsbHMgaW4gdGhpcyByZXBvc2l0b3J5Jykuc2hvd0hlbHBBZnRlckVycm9yKCk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3JldmlldycpXG4gIC5kZXNjcmlwdGlvbignUnVuIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCB3aXRoIHRoZSBzZWxlY3RlZCBhZ2VudCcpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLm9wdGlvbignLS1jb2RleCcsICdVc2UgQ29kZXgnKVxuICAub3B0aW9uKCctLWNsYXVkZScsICdVc2UgQ2xhdWRlIENvZGUnKVxuICAub3B0aW9uKCctLWdlbWluaScsICdVc2UgR2VtaW5pIENMSScpXG4gIC5hY3Rpb24oYXN5bmMgKG9wdGlvbnM6IHsgY29kZXg/OiBib29sZWFuOyBjbGF1ZGU/OiBib29sZWFuOyBnZW1pbmk/OiBib29sZWFuIH0pID0+IHtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShhd2FpdCBydW5SZXZpZXcoc2VsZWN0UmV2aWV3QWdlbnQob3B0aW9ucykpKTtcbiAgfSk7XG5cbmFkZFJldmlld0NvbW1hbmQoJ2NvZGV4LXJldmlldycsICdSdW4gQ29kZXggcmV2aWV3IGFnYWluc3QgdGhlIGN1cnJlbnQgYnJhbmNoJywgJ2NvZGV4Jyk7XG5hZGRSZXZpZXdDb21tYW5kKCdjbGF1ZGUtcmV2aWV3JywgJ1J1biBDbGF1ZGUgQ29kZSByZXZpZXcgYWdhaW5zdCB0aGUgY3VycmVudCBicmFuY2gnLCAnY2xhdWRlJyk7XG5hZGRSZXZpZXdDb21tYW5kKCdnZW1pbmktcmV2aWV3JywgJ1J1biBHZW1pbmkgQ0xJIHJldmlldyBhZ2FpbnN0IHRoZSBjdXJyZW50IGJyYW5jaCcsICdnZW1pbmknKTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnb3Blbi1wcicpXG4gIC5kZXNjcmlwdGlvbignQ3JlYXRlIGEgcHVsbCByZXF1ZXN0IGZvciB0aGUgY3VycmVudCBicmFuY2gnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IGJvZHkgPSBhd2FpdCByZWFkU3RkaW5UZXh0KCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgb3BlblByKGJvZHkgfHwgdW5kZWZpbmVkKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShgJHtvdXRwdXR9XFxuYCk7XG4gIH0pO1xuXG5wcm9ncmFtXG4gIC5jb21tYW5kKCdjaGVjay1wci1jaScpXG4gIC5kZXNjcmlwdGlvbignU2hvdyB0aGUgbGF0ZXN0IHRlc3QtcmVsYXRlZCBDSSByZXN1bHRzIGZvciB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGNoZWNrUHJDaSgpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKHJlc3VsdC5vdXRwdXQpO1xuICAgIHByb2Nlc3MuZXhpdChyZXN1bHQuZXhpdENvZGUpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnbGlzdC1wci1yZXZpZXctdGhyZWFkcycpXG4gIC5kZXNjcmlwdGlvbignTGlzdCB1bnJlc29sdmVkIHJldmlldyB0aHJlYWRzIGZvciB0aGUgY3VycmVudCBwdWxsIHJlcXVlc3QnKVxuICAuYWxsb3dFeGNlc3NBcmd1bWVudHMoZmFsc2UpXG4gIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IGxpc3RQclJldmlld1RocmVhZHMoKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgncmVzb2x2ZS1wci1yZXZpZXctdGhyZWFkcycpXG4gIC5kZXNjcmlwdGlvbignUmVwbHkgdG8gdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcyBhbmQgcmVzb2x2ZSB0aGVtJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXBsaWVzID0gYXdhaXQgcmVhZFJlcGxpZXNGcm9tU3RkaW4oKTtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCByZXNvbHZlUHJSZXZpZXdUaHJlYWRzKHJlcGxpZXMpO1xuICAgIHByb2Nlc3Muc3Rkb3V0LndyaXRlKG91dHB1dCk7XG4gIH0pO1xuXG5hd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMocHJvY2Vzcy5hcmd2KTtcblxuZnVuY3Rpb24gYWRkUmV2aWV3Q29tbWFuZChuYW1lOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcsIGFnZW50OiBSZXZpZXdBZ2VudCk6IHZvaWQge1xuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQobmFtZSlcbiAgICAuZGVzY3JpcHRpb24oZGVzY3JpcHRpb24pXG4gICAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAgIC5hY3Rpb24oYXN5bmMgKCkgPT4ge1xuICAgICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYXdhaXQgcnVuUmV2aWV3KGFnZW50KSk7XG4gICAgfSk7XG59XG5cbmZ1bmN0aW9uIHNlbGVjdFJldmlld0FnZW50KG9wdGlvbnM6IHsgY29kZXg/OiBib29sZWFuOyBjbGF1ZGU/OiBib29sZWFuOyBnZW1pbmk/OiBib29sZWFuIH0pOiBSZXZpZXdBZ2VudCB7XG4gIGNvbnN0IHNlbGVjdGVkID0gW1xuICAgIG9wdGlvbnMuY29kZXggPyAnY29kZXgnIDogdW5kZWZpbmVkLFxuICAgIG9wdGlvbnMuY2xhdWRlID8gJ2NsYXVkZScgOiB1bmRlZmluZWQsXG4gICAgb3B0aW9ucy5nZW1pbmkgPyAnZ2VtaW5pJyA6IHVuZGVmaW5lZCxcbiAgXS5maWx0ZXIoKGFnZW50KTogYWdlbnQgaXMgUmV2aWV3QWdlbnQgPT4gYWdlbnQgIT09IHVuZGVmaW5lZCk7XG5cbiAgaWYgKHNlbGVjdGVkLmxlbmd0aCAhPT0gMSkge1xuICAgIHRocm93IG5ldyBFcnJvcignU3BlY2lmeSBleGFjdGx5IG9uZSBvZiAtLWNvZGV4LCAtLWNsYXVkZSwgb3IgLS1nZW1pbmkuJyk7XG4gIH1cblxuICBjb25zdCBhZ2VudCA9IHNlbGVjdGVkWzBdO1xuICBpZiAoIWFnZW50KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdTcGVjaWZ5IGV4YWN0bHkgb25lIG9mIC0tY29kZXgsIC0tY2xhdWRlLCBvciAtLWdlbWluaS4nKTtcbiAgfVxuXG4gIHJldHVybiBhZ2VudDtcbn1cbiJdLCJuYW1lcyI6WyJ5YW1sU3RyaW5naWZ5T3B0aW9ucyIsImJsb2NrUXVvdGUiLCJsaW5lV2lkdGgiLCJURVNUX1JFTEFURURfUEFUVEVSTiIsIldPUktGTE9XX1JVTl9KU09OX0ZJRUxEUyIsInByb2dyZXNzIiwibWVzc2FnZSIsInByb2Nlc3NTdGRlcnIiLCJ3cml0ZSIsImNvbmNhdCIsImV4aXRXaXRoRXJyb3IiLCJjb2RlIiwicHJvY2VzcyIsImV4aXQiLCJpc1RyYW5zaWVudEdoRmFpbHVyZSIsImNvbW1hbmQiLCJleGl0Q29kZSIsIm91dHB1dCIsInRlc3QiLCJyZWFkU3RkaW5UZXh0IiwiX3JlYWRTdGRpblRleHQiLCJhcHBseSIsInRoaXMiLCJhcmd1bWVudHMiLCJfYXN5bmNUb0dlbmVyYXRvciIsIl9yZWdlbmVyYXRvciIsIm0iLCJfY2FsbGVlIiwidyIsIl9jb250ZXh0IiwibiIsInByb2Nlc3NTdGRpbiIsImlzVFRZIiwiYSIsInN0cmVhbVRvVGV4dCIsInYiLCJyZWFkUmVxdWlyZWRTdGRpblRleHQiLCJfcmVhZFJlcXVpcmVkU3RkaW5UZXh0IiwiX2NhbGxlZTIiLCJpbnB1dCIsIl9jb250ZXh0MiIsImxlbmd0aCIsInJ1bkNvbW1hbmQiLCJfeCIsIl94MiIsIl9ydW5Db21tYW5kIiwiX2NhbGxlZTMiLCJvcHRpb25zIiwiX29wdGlvbnMkYWxsb3dlZEV4aXRDIiwiYWxsb3dlZEV4aXRDb2RlcyIsIl9sb29wIiwiX3JldCIsImF0dGVtcHQiLCJfY29udGV4dDQiLCJfY29tbWFuZCQiLCJwcm9jIiwiX3lpZWxkJFByb21pc2UkYWxsIiwiX3lpZWxkJFByb21pc2UkYWxsMiIsInN0ZG91dCIsInN0ZGVyciIsIl9jb250ZXh0MyIsInNwYXduIiwic2xpY2UiLCJzdGRpbyIsInVuZGVmaW5lZCIsInN0ZGluRGF0YSIsInN0ZGluIiwiZW5kIiwiUHJvbWlzZSIsImFsbCIsInJlc29sdmUiLCJyZWplY3QiLCJvbmNlIiwiX3NsaWNlZFRvQXJyYXkiLCJpbmNsdWRlcyIsIkdIX1JFVFJZX01BWF9BVFRFTVBUUyIsInNsZWVwIiwiam9pbiIsImQiLCJfcmVnZW5lcmF0b3JWYWx1ZXMiLCJnaCIsIl94MyIsIl94NCIsIl9naCIsIl9jYWxsZWU0IiwiYXJncyIsIl9jb250ZXh0NSIsIl90b0NvbnN1bWFibGVBcnJheSIsImdoQWxsb3dFeGl0Q29kZXMiLCJfeDUiLCJfeDYiLCJfeDciLCJfZ2hBbGxvd0V4aXRDb2RlcyIsIl9jYWxsZWU1IiwiX2NvbnRleHQ2IiwiY3VycmVudFJlcG9QYXJ0cyIsIl9jdXJyZW50UmVwb1BhcnRzIiwiX2NhbGxlZTYiLCJuYW1lV2l0aE93bmVyIiwiX25hbWVXaXRoT3duZXIkc3BsaXQiLCJfbmFtZVdpdGhPd25lciRzcGxpdDIiLCJvd25lciIsIm5hbWUiLCJfY29udGV4dDciLCJ0cmltIiwic3BsaXQiLCJjdXJyZW50UHJOdW1iZXIiLCJfY3VycmVudFByTnVtYmVyIiwiX2NhbGxlZTciLCJfY29udGV4dDgiLCJncmFwaHFsIiwiX3g4IiwiX3g5IiwiX2dyYXBocWwiLCJfY2FsbGVlOCIsInF1ZXJ5IiwidmFycyIsIl9pMiIsIl9PYmplY3QkZW50cmllczIiLCJfT2JqZWN0JGVudHJpZXMyJF9pIiwiX2tleSIsInZhbHVlIiwicmVzcG9uc2UiLCJlcnJvck1lc3NhZ2VzIiwiX3QiLCJfY29udGV4dDkiLCJPYmplY3QiLCJlbnRyaWVzIiwia2V5IiwicHVzaCIsIkpTT04iLCJwYXJzZSIsImNhbGwiLCJBcnJheSIsImlzQXJyYXkiLCJlcnJvcnMiLCJtYXAiLCJlcnJvciIsIl9lcnJvciRtZXNzYWdlIiwibm9ybWFsaXplQ29tbWVudEF1dGhvciIsImNvbW1lbnQiLCJfY29tbWVudCRhdXRob3IkbG9naW4iLCJfY29tbWVudCRhdXRob3IiLCJfb2JqZWN0U3ByZWFkIiwiYXV0aG9yIiwibG9naW4iLCJwYWdpbmF0ZVJldmlld1RocmVhZHMiLCJfeDAiLCJfeDEiLCJfeDEwIiwiX3gxMSIsIl94MTIiLCJfcGFnaW5hdGVSZXZpZXdUaHJlYWRzIiwiX2NhbGxlZTkiLCJwck51bWJlciIsIm9uVGhyZWFkIiwiY3Vyc29yIiwiX3lpZWxkJGdyYXBocWwkZGF0YSIsIl9yZXZpZXdUaHJlYWRzJHBhZ2VJbiIsInJldmlld1RocmVhZHMiLCJfaXRlcmF0b3IyIiwiX3N0ZXAyIiwidGhyZWFkIiwiX3QyIiwiX3QzIiwiX3Q0IiwiX3Q1IiwiX3Q2IiwiX2NvbnRleHQwIiwicCIsIm51bWJlciIsIk51bWJlciIsImRhdGEiLCJyZXBvc2l0b3J5IiwicHVsbFJlcXVlc3QiLCJfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlciIsIm5vZGVzIiwicyIsImRvbmUiLCJlIiwiZiIsInBhZ2VJbmZvIiwiaGFzTmV4dFBhZ2UiLCJlbmRDdXJzb3IiLCJ1bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzIiwiX3gxMyIsIl94MTQiLCJfeDE1IiwiX3VucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMiLCJfY2FsbGVlMCIsImlkcyIsIl9jb250ZXh0MSIsImlzUmVzb2x2ZWQiLCJpZCIsInVucmVzb2x2ZWRSZXZpZXdUaHJlYWRzIiwiX3gxNiIsIl94MTciLCJfeDE4IiwiX3VucmVzb2x2ZWRSZXZpZXdUaHJlYWRzIiwiX2NhbGxlZTEwIiwidGhyZWFkcyIsIl9jb250ZXh0MTEiLCJfY2FsbGVlMSIsIl9wYWdlSW5mbyRlbmRDdXJzb3IiLCJjb21tZW50cyIsIl95aWVsZCRncmFwaHFsJGRhdGEyIiwiX3BhZ2VJbmZvJGVuZEN1cnNvcjIiLCJjb21tZW50Q29ubmVjdGlvbiIsIl90NyIsIl90OCIsIl90OSIsIl9jb250ZXh0MTAiLCJ0aHJlYWRJZCIsIm5vZGUiLCJpc091dGRhdGVkIiwicGF0aCIsImxpbmUiLCJvcmlnaW5hbExpbmUiLCJzdGFydExpbmUiLCJvcmlnaW5hbFN0YXJ0TGluZSIsInlhbWxEdW1wIiwic3RyaW5naWZ5WWFtbCIsImRlZXBDb3B5Iiwic3RyaW5naWZ5IiwibGF0ZXN0UHJDaVJlc3VsdHMiLCJfeDE5IiwiX2xhdGVzdFByQ2lSZXN1bHRzIiwiX2NhbGxlZTExIiwiX3N1bW1hcnkkcGFzcyIsIl9zdW1tYXJ5JGZhaWwiLCJfc3VtbWFyeSRwZW5kaW5nIiwiX3N1bW1hcnkkc2tpcHBpbmciLCJfc3VtbWFyeSRjYW5jZWwiLCJjaGVja3MiLCJyYXciLCJzdW1tYXJ5IiwiX3QwIiwiX2NvbnRleHQxMiIsIlN5bnRheEVycm9yIiwicmVkdWNlIiwiY291bnRzIiwiY2hlY2siLCJfY2hlY2skYnVja2V0MiIsIl9jb3VudHMkYnVja2V0IiwiYnVja2V0IiwidG90YWwiLCJwYXNzIiwiZmFpbCIsInBlbmRpbmciLCJza2lwcGluZyIsImNhbmNlbCIsImNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzIiwiY2lSZXN1bHRzIiwibGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3ciLCJncm91cGVkUmVzdWx0cyIsIndvcmtmbG93S2V5Iiwid29ya2Zsb3ciLCJmcm9tRW50cmllcyIsIl9yZWYiLCJfbGF0ZXN0QXR0ZW1wdENoZWNrcyQiLCJfcmVmMiIsImxhdGVzdEF0dGVtcHRDaGVja3MiLCJncm91cHMiLCJncm91cGVkQ2hlY2tzIiwicnVuSWQiLCJ3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayIsIndvcmtmbG93QXR0ZW1wdEtleSIsImdyb3VwIiwiZ2V0Iiwic2V0IiwiTWFwIiwiZnJvbSIsInZhbHVlcyIsImxhdGVzdEdyb3VwIiwiY3VycmVudEdyb3VwIiwibGF0ZXN0R3JvdXBUaW1lc3RhbXAiLCJsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyIsImZpcnN0Q2hlY2siLCJsYXRlc3RDaGVjayIsImN1cnJlbnRMYXRlc3QiLCJsYXRlc3RDaGVja1RpbWVzdGFtcCIsImNsYXNzaWZpY2F0aW9uIiwid29ya2Zsb3dSZXN1bHRDbGFzc2lmaWNhdGlvbiIsImZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZCIsImNsYXNzaWZpZWRSZXN1bHRzIiwiZmFpbGVkUmVzdWx0cyIsInJ1bm5pbmdSZXN1bHRzIiwiX2kiLCJfT2JqZWN0JGVudHJpZXMiLCJfT2JqZWN0JGVudHJpZXMkX2kiLCJyZXN1bHQiLCJzb21lIiwidGVzdFJlbGF0ZWRDaGVjayIsIndhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MiLCJfeDIwIiwiX3gyMSIsIl94MjIiLCJfeDIzIiwiX3dhaXRGb3JSdW5uaW5nVGVzdFJlbGF0ZWRXb3JrZmxvd3MiLCJfY2FsbGVlMTIiLCJzbGVlcEZuIiwibGF0ZXN0Q2lSZXN1bHRzRm4iLCJwcm9ncmVzc0ZuIiwiYXR0ZW1wdHMiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3QyIiwiX2NvbnRleHQxMyIsInNsZWVwU2Vjb25kcyIsImtleXMiLCJfbGluayRtYXRjaCIsImxpbmsiLCJtYXRjaCIsIndvcmtmbG93UnVuIiwiX3gyNCIsIl93b3JrZmxvd1J1biIsIl9jYWxsZWUxMyIsInJ1bkpzb24iLCJfdDEiLCJfY29udGV4dDE0IiwiYnVja2V0cyIsIl9jaGVjayRidWNrZXQiLCJfY2hlY2skc3RhcnRlZEF0IiwidGltZXN0YW1wIiwiY29tcGxldGVkQXQiLCJzdGFydGVkQXQiLCJsYXRlc3QiLCJfeDI1IiwiX3NsZWVwU2Vjb25kcyIsIl9jYWxsZWUxNCIsInNlY29uZHMiLCJfY29udGV4dDE1IiwiX3gyNiIsIl9zdHJlYW1Ub1RleHQiLCJfY2FsbGVlMTUiLCJzdHJlYW0iLCJjaHVua3MiLCJfaXRlcmF0b3JBYnJ1cHRDb21wbGV0aW9uIiwiX2RpZEl0ZXJhdG9yRXJyb3IiLCJfaXRlcmF0b3JFcnJvciIsIl9pdGVyYXRvciIsIl9zdGVwIiwiY2h1bmsiLCJfdDEwIiwiX2NvbnRleHQxNiIsIl9hc3luY0l0ZXJhdG9yIiwibmV4dCIsIkJ1ZmZlciIsInRvU3RyaW5nIiwicmVhZFJlcGxpZXNGcm9tU3RkaW4iLCJfcmVhZFJlcGxpZXNGcm9tU3RkaW4iLCJfY2FsbGVlMTYiLCJfcGF5bG9hZCRyZXBsaWVzIiwicGF5bG9hZCIsInJlcGxpZXMiLCJub3JtYWxpemVkUmVwbGllcyIsIl9pMyIsIl9PYmplY3QkZW50cmllczMiLCJfT2JqZWN0JGVudHJpZXMzJF9pIiwiYm9keSIsIl9jb250ZXh0MTciLCJwYXJzZVJlcGx5SW5wdXQiLCJvcGVuUHIiLCJfeDI3IiwiX29wZW5QciIsIl9jYWxsZWUxNyIsImhlYWQiLCJiYXNlIiwiY3JlYXRlQXJncyIsIl9jb250ZXh0MTgiLCJsaXN0UHJSZXZpZXdUaHJlYWRzIiwiX2xpc3RQclJldmlld1RocmVhZHMiLCJfY2FsbGVlMTgiLCJfeWllbGQkY3VycmVudFJlcG9QYXIiLCJfeWllbGQkY3VycmVudFJlcG9QYXIyIiwiX3QxMSIsIl90MTIiLCJfY29udGV4dDE5IiwidW5yZXNvbHZlZF90aHJlYWRzIiwicmVzb2x2ZVByUmV2aWV3VGhyZWFkcyIsIl94MjgiLCJfcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyIsIl9jYWxsZWUxOSIsIl95aWVsZCRjdXJyZW50UmVwb1BhcjMiLCJfeWllbGQkY3VycmVudFJlcG9QYXI0IiwidW5yZXNvbHZlZElkcyIsInJlc29sdmVkVGhyZWFkSWRzIiwiX2l0ZXJhdG9yMyIsIl9zdGVwMyIsIl9yZXNwb25zZSRkYXRhIiwiX3N0ZXAzJHZhbHVlIiwiaW5kZXgiLCJfc3RlcDMkdmFsdWUkIiwiX3QxMyIsIl90MTQiLCJfdDE1IiwiX2NvbnRleHQyMCIsIlNldCIsImhhcyIsInJlc29sdmVSZXZpZXdUaHJlYWQiLCJyZXNvbHZlZF90aHJlYWRfaWRzIiwiY2hlY2tQckNpIiwiX2NoZWNrUHJDaSIsIl9jYWxsZWUyMiIsIl95aWVsZCR3YWl0Rm9yUnVubmluZyIsIl95aWVsZCR3YWl0Rm9yUnVubmluZzIiLCJ3YWl0QXR0ZW1wdHMiLCJ3YWl0VGltZWRPdXQiLCJjbGFzc2lmaWVkTGF0ZXN0IiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0MyIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDQiLCJsYXRlc3RXb3JrZmxvd1Jlc3VsdHMiLCJfdDE4IiwiX3QxOSIsIl9jb250ZXh0MjMiLCJfY2FsbGVlMjAiLCJfcmVmNCIsIl9yZWY2IiwicnVuIiwiX2NvbnRleHQyMSIsImxhdGVzdF9jaV9yZXN1bHRzIiwid2FpdGVkX2Zvcl90ZXN0X3JlbGF0ZWRfY2hlY2tzIiwidGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfYXR0ZW1wdHMiLCJ0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF90aW1lZF9vdXQiLCJsYXRlc3Rfd29ya2Zsb3dfcmVzdWx0cyIsIl9jYWxsZWUyMSIsIl9yZWY3IiwiX3JlZjkiLCJfdDE2IiwiX3QxNyIsIl9jb250ZXh0MjIiLCJmYWlsZWRfd29ya2Zsb3dfb3V0cHV0cyIsInRlc3Rfd29ya2Zsb3dfb3V0cHV0IiwicnVubmluZ190ZXN0X3JlbGF0ZWRfd29ya2Zsb3dzIiwicGFyc2VkIiwiX3R5cGVvZiIsImV2ZXJ5IiwicmVwbHkiLCJpc1JlcGx5SW5wdXQiLCJydW5SZXZpZXciLCJfcnVuUmV2aWV3IiwiYWdlbnQiLCJkZWZhdWx0QnJhbmNoIiwicHJvbXB0IiwiY3VycmVudERlZmF1bHRCcmFuY2giLCJidWlsZFJldmlld1Byb21wdCIsIl9jdXJyZW50RGVmYXVsdEJyYW5jaCIsInJlcXVpcmVOb25FbXB0eSIsIkVycm9yIiwidGV4dCIsInByb2dyYW0iLCJDb21tYW5kIiwiYWRkUmV2aWV3Q29tbWFuZCIsImRlc2NyaXB0aW9uIiwiYWxsb3dFeGNlc3NBcmd1bWVudHMiLCJhY3Rpb24iLCJzZWxlY3RSZXZpZXdBZ2VudCIsInNlbGVjdGVkIiwiY29kZXgiLCJjbGF1ZGUiLCJnZW1pbmkiLCJmaWx0ZXIiLCJzaG93SGVscEFmdGVyRXJyb3IiLCJvcHRpb24iLCJwYXJzZUFzeW5jIiwi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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@willbooster/agent-skills",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "A collection of agent skills for WillBooster Inc.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
"author": "WillBooster Inc.",
|
|
11
11
|
"type": "module",
|
|
12
12
|
"bin": {
|
|
13
|
-
"agent-skills": "./dist/agent-skills-
|
|
13
|
+
"agent-skills": "./dist/agent-skills-cli.js"
|
|
14
14
|
},
|
|
15
15
|
"files": [
|
|
16
16
|
"dist/"
|
|
17
17
|
],
|
|
18
18
|
"scripts": {
|
|
19
|
-
"build": "build-ts app --input src/cli/agent-skills-
|
|
19
|
+
"build": "build-ts app --input src/cli/agent-skills-cli.ts && chmod +x dist/agent-skills-cli.js",
|
|
20
20
|
"check-all-for-ai": "bun run check-for-ai && bun run test --silent",
|
|
21
21
|
"check-for-ai": "bun install > /dev/null && bun run cleanup && bun run typecheck",
|
|
22
22
|
"cleanup": "bun --bun wb lint --fix --format",
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
"prepublishOnly": "bun run build",
|
|
30
30
|
"release": "semantic-release",
|
|
31
31
|
"test": "bun wb test",
|
|
32
|
-
"test:integration": "RUN_GITHUB_INTEGRATION=1 bun test test/
|
|
32
|
+
"test:integration": "RUN_GITHUB_INTEGRATION=1 bun test test/cli/agent-skills-cli.e2e.test.ts",
|
|
33
33
|
"typecheck": "bun --bun wb typecheck"
|
|
34
34
|
},
|
|
35
35
|
"prettier": "@willbooster/prettier-config",
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import{Command as n}from"commander";import{spawn as r}from"node:child_process";import{stdin as e,stderr as t}from"node:process";import{setTimeout as o}from"node:timers/promises";import{stringify as a}from"yaml";function i(n,r){(null==r||r>n.length)&&(r=n.length);for(var e=0,t=Array(r);e<r;e++)t[e]=n[e];return t}function u(n){var r,e,t,o=2;for("undefined"!=typeof Symbol&&(e=Symbol.asyncIterator,t=Symbol.iterator);o--;){if(e&&null!=(r=n[e]))return r.call(n);if(t&&null!=(r=n[t]))return new c(r.call(n));e="@@asyncIterator",t="@@iterator"}throw new TypeError("Object is not async iterable")}function c(n){function r(n){if(Object(n)!==n)return Promise.reject(new TypeError(n+" is not an object."));var r=n.done;return Promise.resolve(n.value).then(function(n){return{value:n,done:r}})}return c=function(n){this.s=n,this.n=n.next},c.prototype={s:null,n:null,next:function(){return r(this.n.apply(this.s,arguments))},return:function(n){var e=this.s.return;return void 0===e?Promise.resolve({value:n,done:!0}):r(e.apply(this.s,arguments))},throw:function(n){var e=this.s.return;return void 0===e?Promise.reject(n):r(e.apply(this.s,arguments))}},new c(n)}function s(n,r,e,t,o,a,i){try{var u=n[a](i),c=u.value}catch(n){return void e(n)}u.done?r(c):Promise.resolve(c).then(t,o)}function l(n){return function(){var r=this,e=arguments;return new Promise(function(t,o){var a=n.apply(r,e);function i(n){s(a,t,o,i,u,"next",n)}function u(n){s(a,t,o,i,u,"throw",n)}i(void 0)})}}function f(n,r){var e="undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(!e){if(Array.isArray(n)||(e=k(n))||r){e&&(n=e);var t=0,o=function(){};return{s:o,n:function(){return t>=n.length?{done:!0}:{done:!1,value:n[t++]}},e:function(n){throw n},f:o}}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,i=!0,u=!1;return{s:function(){e=e.call(n)},n:function(){var n=e.next();return i=n.done,n},e:function(n){u=!0,a=n},f:function(){try{i||null==e.return||e.return()}finally{if(u)throw a}}}}function p(n,r,e){return(r=function(n){var r=function(n,r){if("object"!=typeof n||!n)return n;var e=n[Symbol.toPrimitive];if(void 0!==e){var t=e.call(n,r);if("object"!=typeof t)return t;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(n)}(n,"string");return"symbol"==typeof r?r:r+""}(r))in n?Object.defineProperty(n,r,{value:e,enumerable:!0,configurable:!0,writable:!0}):n[r]=e,n}function d(n,r){var e=Object.keys(n);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(n);r&&(t=t.filter(function(r){return Object.getOwnPropertyDescriptor(n,r).enumerable})),e.push.apply(e,t)}return e}function h(n){for(var r=1;r<arguments.length;r++){var e=null!=arguments[r]?arguments[r]:{};r%2?d(Object(e),!0).forEach(function(r){p(n,r,e[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(n,Object.getOwnPropertyDescriptors(e)):d(Object(e)).forEach(function(r){Object.defineProperty(n,r,Object.getOwnPropertyDescriptor(e,r))})}return n}function v(){
|
|
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,r,e="function"==typeof Symbol?Symbol:{},t=e.iterator||"@@iterator",o=e.toStringTag||"@@toStringTag";function a(e,t,o,a){var c=t&&t.prototype instanceof u?t:u,s=Object.create(c.prototype);return m(s,"_invoke",function(e,t,o){var a,u,c,s=0,l=o||[],f=!1,p={p:0,n:0,v:n,a:d,f:d.bind(n,4),d:function(r,e){return a=r,u=0,c=n,p.n=e,i}};function d(e,t){for(u=e,c=t,r=0;!f&&s&&!o&&r<l.length;r++){var o,a=l[r],d=p.p,h=a[2];e>3?(o=h===t)&&(c=a[(u=a[4])?5:(u=3,3)],a[4]=a[5]=n):a[0]<=d&&((o=e<2&&d<a[1])?(u=0,p.v=t,p.n=a[1]):d<h&&(o=e<3||a[0]>t||t>h)&&(a[4]=e,a[5]=t,p.n=h,u=0))}if(o||e>1)return i;throw f=!0,t}return function(o,l,h){if(s>1)throw TypeError("Generator is already running");for(f&&1===l&&d(l,h),u=l,c=h;(r=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||(o="next"),r=a[o]){if(!(r=r.call(a,c)))throw TypeError("iterator result is not an object");if(!r.done)return r;c=r.value,u<2&&(u=0)}else 1===u&&(r=a.return)&&r.call(a),u<2&&(c=TypeError("The iterator does not provide a '"+o+"' method"),u=1);a=n}else if((r=(f=p.n<0)?c:e.call(t,p))!==i)break}catch(r){a=n,u=1,c=r}finally{s=1}}return{value:r,done:f}}}(e,o,a),!0),s}var i={};function u(){}function c(){}function s(){}r=Object.getPrototypeOf;var l=[][t]?r(r([][t]())):(m(r={},t,function(){return this}),r),f=s.prototype=u.prototype=Object.create(l);function p(n){return Object.setPrototypeOf?Object.setPrototypeOf(n,s):(n.__proto__=s,m(n,o,"GeneratorFunction")),n.prototype=Object.create(f),n}return c.prototype=s,m(f,"constructor",s),m(s,"constructor",c),c.displayName="GeneratorFunction",m(s,o,"GeneratorFunction"),m(f),m(f,o,"Generator"),m(f,t,function(){return this}),m(f,"toString",function(){return"[object Generator]"}),(v=function(){return{w:a,m:p}})()}function m(n,r,e,t){var o=Object.defineProperty;try{o({},"",{})}catch(n){o=0}m=function(n,r,e,t){function a(r,e){m(n,r,function(n){return this._invoke(r,e,n)})}r?o?o(n,r,{value:e,enumerable:!t,configurable:!t,writable:!t}):n[r]=e:(a("next",0),a("throw",1),a("return",2))},m(n,r,e,t)}function y(n){if(null!=n){var r=n["function"==typeof Symbol&&Symbol.iterator||"@@iterator"],e=0;if(r)return r.call(n);if("function"==typeof n.next)return n;if(!isNaN(n.length))return{next:function(){return n&&e>=n.length&&(n=void 0),{value:n&&n[e++],done:!n}}}}throw new TypeError(typeof n+" is not iterable")}function b(n,r){return function(n){if(Array.isArray(n))return n}(n)||function(n,r){var e=null==n?null:"undefined"!=typeof Symbol&&n[Symbol.iterator]||n["@@iterator"];if(null!=e){var t,o,a,i,u=[],c=!0,s=!1;try{if(a=(e=e.call(n)).next,0===r){if(Object(e)!==e)return;c=!1}else for(;!(c=(t=a.call(e)).done)&&(u.push(t.value),u.length!==r);c=!0);}catch(n){s=!0,o=n}finally{try{if(!c&&null!=e.return&&(i=e.return(),Object(i)!==i))return}finally{if(s)throw o}}return u}}(n,r)||k(n,r)||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 w(n){return function(n){if(Array.isArray(n))return i(n)}(n)||function(n){if("undefined"!=typeof Symbol&&null!=n[Symbol.iterator]||null!=n["@@iterator"])return Array.from(n)}(n)||k(n)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function g(n){"@babel/helpers - typeof";return g="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n},g(n)}function k(n,r){if(n){if("string"==typeof n)return i(n,r);var e={}.toString.call(n).slice(8,-1);return"Object"===e&&n.constructor&&(e=n.constructor.name),"Map"===e||"Set"===e?Array.from(n):"Arguments"===e||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(e)?i(n,r):void 0}}var j={blockQuote:"literal",lineWidth:0},O=/\btest\b/i,S=["attempt","conclusion","createdAt","databaseId","displayTitle","event","headBranch","headSha","name","number","startedAt","status","updatedAt","url","workflowName"];function I(n){t.write("".concat(n,"\n"))}function _(n,r){void 0===r&&(r=1),t.write("".concat(n,"\n")),process.exit(r)}function A(n,r,e){return"gh"===n[0]&&0!==r&&/(HTTP 50[0234]\b|We had issues producing the response to your request)/i.test(e)}function P(){return x.apply(this,arguments)}function x(){return(x=l(v().m(function n(){return v().w(function(n){for(;;)switch(n.n){case 0:if(!e.isTTY){n.n=1;break}return n.a(2,"");case 1:return n.n=2,vn(e);case 2:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function E(){return T.apply(this,arguments)}function T(){return(T=l(v().m(function n(){var r;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,P();case 1:if(!((r=n.v).length>0)){n.n=2;break}return n.a(2,r);case 2:_("Error: JSON input is required on stdin",2);case 3:return n.a(2)}},n)}))).apply(this,arguments)}function R(n,r){return $.apply(this,arguments)}function $(){return $=l(v().m(function n(e,t){var a,i,u,c,s;return v().w(function(n){for(;;)switch(n.n){case 0:void 0===t&&(t={}),i=null!=(a=t.allowedExitCodes)?a:[],u=v().m(function n(){var a,u,c,l,f,p,d,h;return v().w(function(n){for(;;)switch(n.n){case 0:return u=r(null!=(a=e[0])?a:"",e.slice(1),{stdio:["pipe","pipe","pipe"]}),void 0!==t.stdinData?u.stdin.end(t.stdinData):u.stdin.end(),n.n=1,Promise.all([vn(u.stdout),vn(u.stderr),new Promise(function(n,r){u.once("error",r),u.once("close",function(r){return n(null!=r?r:1)})})]);case 1:if(c=n.v,l=b(c,3),f=l[0],p=l[1],d=l[2],h="".concat(f).concat(p),0!==d&&!i.includes(d)){n.n=2;break}return n.a(2,{v:h});case 2:if(!(A(e,d,h)&&s<3)){n.n=4;break}return I("Transient GitHub CLI failure; retrying... (attempt ".concat(s," of ").concat(2,")")),n.n=3,o(1e3*s);case 3:return n.a(2,0);case 4:_(h||"Command failed: ".concat(e.join(" ")));case 5:return n.a(2)}},n)}),s=1;case 1:if(!(s<=3)){n.n=5;break}return n.d(y(u()),2);case 2:if(0!==(c=n.v)){n.n=3;break}return n.a(3,4);case 3:if(!c){n.n=4;break}return n.a(2,c.v);case 4:s+=1,n.n=1;break;case 5:_("Command failed after ".concat(3," attempts: ").concat(e.join(" ")));case 6:return n.a(2)}},n)})),$.apply(this,arguments)}function C(n,r){return N.apply(this,arguments)}function N(){return(N=l(v().m(function n(r,e){return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,R(["gh"].concat(w(r)),{stdinData:e});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function q(n,r,e){return L.apply(this,arguments)}function L(){return(L=l(v().m(function n(r,e,t){return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,R(["gh"].concat(w(r)),{stdinData:t,allowedExitCodes:e});case 1:return n.a(2,n.v)}},n)}))).apply(this,arguments)}function D(){return G.apply(this,arguments)}function G(){return(G=l(v().m(function n(){var r,e,t,o,a;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,C(["repo","view","--json","nameWithOwner","--jq",".nameWithOwner"]);case 1:return r=n.v.trim(),e=r.split("/",2),t=b(e,2),o=t[0],a=t[1],o&&a||_("Error: could not determine current repository"),n.a(2,[o,a])}},n)}))).apply(this,arguments)}function J(){return F.apply(this,arguments)}function F(){return(F=l(v().m(function n(){return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,C(["pr","view","--json","number","--jq",".number"]);case 1:return n.a(2,n.v.trim())}},n)}))).apply(this,arguments)}function W(n,r){return H.apply(this,arguments)}function H(){return(H=l(v().m(function n(r,e){var t,o,a,i,u,c,s,l,f;return v().w(function(n){for(;;)switch(n.n){case 0:void 0===e&&(e={}),t=["api","graphql","-F","query=@-"],o=0,a=Object.entries(e);case 1:if(!(o<a.length)){n.n=4;break}if(i=b(a[o],2),u=i[0],void 0!==(c=i[1])&&""!==c){n.n=2;break}return n.a(3,3);case 2:t.push("-F","".concat(u,"=").concat(c));case 3:o++,n.n=1;break;case 4:return f=JSON,n.n=5,C(t,r);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 r;return null!=(r=n.message)?r:"Unknown GraphQL error"}).join("\n"),_("GraphQL API error:\n".concat(l));case 7:return n.a(2)}},n)}))).apply(this,arguments)}function B(n){var r,e;return h(h({},n),{},{author:"string"==typeof n.author?n.author:null!=(r=null==(e=n.author)?void 0:e.login)?r:null})}function Q(n,r,e,t,o){return M.apply(this,arguments)}function M(){return(M=l(v().m(function n(r,e,t,o,a){var i,u,c,s,l,p,d,h,m,y,b,w;return v().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,W(r,{owner:e,name:t,number:Number(o),cursor:i});case 1:if(y=u=n.v.data,m=null==y){n.n=2;break}m=null==(u=u.repository);case 2:if(h=m){n.n=3;break}h=null==(u=u.pullRequest);case 3:if(!h){n.n=4;break}b=void 0,n.n=5;break;case 4:b=u.reviewThreads;case 5:(s=b)||_("Could not find reviewThreads in GraphQL response. The pull request may not exist or there was an API error."),l=f(s.nodes),n.p=6,l.s();case 7:if((p=l.n()).done){n.n=9;break}return d=p.value,n.n=8,a(d);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:i=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 U(n,r,e){return Y.apply(this,arguments)}function Y(){return(Y=l(v().m(function n(r,e,t){var o;return v().w(function(n){for(;;)switch(n.n){case 0:return o=[],n.n=1,Q("\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",r,e,t,function(n){n.isResolved||o.push(n.id)});case 1:return n.a(2,o)}},n)}))).apply(this,arguments)}function Z(n,r,e){return z.apply(this,arguments)}function z(){return(z=l(v().m(function n(r,e,t){var o;return v().w(function(n){for(;;)switch(n.n){case 0:return o=[],n.n=1,Q("\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",r,e,t,l(v().m(function n(r){var e,t,a,i,u,c,s,l,f,p;return v().w(function(n){for(;;)switch(n.n){case 0:if(!r.isResolved){n.n=1;break}return n.a(2);case 1:t=r.comments.nodes.map(B),a=r.comments.pageInfo,i=null!=(e=a.endCursor)?e:void 0;case 2:if(!a.hasNextPage){n.n=7;break}return n.n=3,W("\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:r.id,cursor:i});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)||_("Could not find comments in GraphQL response for thread ".concat(r.id,".")),t.push.apply(t,w(s.nodes.map(B))),a=s.pageInfo,i=null!=(c=a.endCursor)?c:void 0,n.n=2;break;case 7:o.push({id:r.id,isResolved:r.isResolved,isOutdated:r.isOutdated,path:r.path,line:r.line,originalLine:r.originalLine,startLine:r.startLine,originalStartLine:r.originalStartLine,comments:t});case 8:return n.a(2)}},n)})));case 1:return n.a(2,o)}},n)}))).apply(this,arguments)}function K(n){return a(n,j)}function V(n){return JSON.parse(JSON.stringify(n))}function X(n){return nn.apply(this,arguments)}function nn(){return(nn=l(v().m(function n(r){var e,t,o,a,i,u,c,s,l,f;return v().w(function(n){for(;;)switch(n.p=n.n){case 0:return u=["pr","checks"],r&&u.push(r),u.push("--json","bucket,completedAt,description,event,link,name,startedAt,state,workflow"),c=[],n.p=1,n.n=2,q(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,r){var e,t,o=null!=(e=r.bucket)?e:"";return n[o]=(null!=(t=n[o])?t:0)+1,n},{}),n.a(2,{summary:{total:c.length,pass:null!=(e=l.pass)?e:0,fail:null!=(t=l.fail)?t:0,pending:null!=(o=l.pending)?o:0,skipping:null!=(a=l.skipping)?a:0,cancel:null!=(i=l.cancel)?i:0},checks:c})}},n,null,[[1,3]])}))).apply(this,arguments)}function rn(n){var r=n.checks.reduce(function(n,r){var e=r.workflow||r.name||"unknown_workflow";return null!=n[e]||(n[e]=[]),n[e].push(r),n},{});return Object.fromEntries(Object.entries(r).map(function(n){var r,e=b(n,2),t=e[0],o=function(n){var r=n.reduce(function(n,r){var e=function(n){var r=an(n);return r?"run:".concat(r):"unknown_run"}(r),t=n.get(e);return t?(t.push(r),n):(n.set(e,[r]),n)},new Map);return Array.from(r.values()).reduce(function(n,r){return 0===n.length||fn(r)>fn(n)?r:n},[])}(e[1]),a=o[0];a||_("Error: no checks found for workflow ".concat(t));var i=null!=(r=o.reduce(function(n,r){return n?ln(r)>ln(n)?r:n:r},void 0))?r:a;return[t,{classification:sn(o),check:i,checks:o}]}))}function en(n){for(var r={},e={},t=0,o=Object.entries(n);t<o.length;t++){var a=b(o[t],2),i=a[0],u=a[1];"failed"!==u.classification?"running"===u.classification&&u.checks.some(function(n){return pn(n)})&&(e[i]=u):r[i]=u}return[r,e]}function tn(n,r,e,t){return on.apply(this,arguments)}function on(){return(on=l(v().m(function n(r,e,t,o){var a,i,u,c,s,l,f;return v().w(function(n){for(;;)switch(n.n){case 0:return void 0===e&&(e=dn),void 0===t&&(t=X),void 0===o&&(o=I),a=0,n.n=1,t(r);case 1:i=n.v;case 2:if(u=rn(i),c=en(u),s=b(c,2),l=s[0],f=s[1],!(Object.keys(l).length>0)){n.n=3;break}return n.a(2,[i,a,!1]);case 3:if(0!==Object.keys(f).length){n.n=4;break}return n.a(2,[i,a,!1]);case 4:if(!(a>=360)){n.n=5;break}return n.a(2,[i,a,!0]);case 5:return o("Waiting for test-related workflows to finish (attempt ".concat(a+=1,"/").concat(360,"): ").concat(Object.keys(f).join(", "))),n.n=6,e(10);case 6:return n.n=7,t(r);case 7:i=n.v;case 8:n.n=2;break;case 9:return n.a(2)}},n)}))).apply(this,arguments)}function an(n){var r,e=null==n?void 0:n.link;if(e)return null==(r=e.match(/\/actions\/runs\/(\d+)/))?void 0:r[1]}function un(n){return cn.apply(this,arguments)}function cn(){return(cn=l(v().m(function n(r){var e,o;return v().w(function(n){for(;;)switch(n.p=n.n){case 0:if(r){n.n=1;break}return n.a(2,void 0);case 1:return n.n=2,q(["run","view",r,"--json",S.join(",")],[1]);case 2:if(0!==(e=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(e));case 4:if(n.p=4,!((o=n.v)instanceof SyntaxError)){n.n=5;break}return t.write("Warning: Could not parse JSON for workflow run ".concat(r,": ").concat(o.message,"\n")),n.a(2,void 0);case 5:throw o;case 6:return n.a(2)}},n,null,[[3,4]])}))).apply(this,arguments)}function sn(n){var r=n.map(function(n){var r;return null!=(r=n.bucket)?r:""});return r.some(function(n){return!["pass","skipping","pending"].includes(n)})?"failed":r.includes("pending")?"running":"successful"}function ln(n){var r,e=n.completedAt;return e&&"0001-01-01T00:00:00Z"!==e?e:null!=(r=n.startedAt)?r:""}function fn(n){return n.reduce(function(n,r){var e=ln(r);return e>n?e:n},"")}function pn(n){return[n.name,n.workflow].some(function(n){return"string"==typeof n&&O.test(n)})}function dn(n){return hn.apply(this,arguments)}function hn(){return(hn=l(v().m(function n(r){return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,o(1e3*r);case 1:return n.a(2)}},n)}))).apply(this,arguments)}function vn(n){return mn.apply(this,arguments)}function mn(){return(mn=l(v().m(function n(r){var e,t,o,a,i,c,s,l;return v().w(function(n){for(;;)switch(n.p=n.n){case 0:if(r){n.n=1;break}return n.a(2,"");case 1:e=[],t=!1,o=!1,n.p=2,i=u(r);case 3:return n.n=4,i.next();case 4:if(!(t=!(c=n.v).done)){n.n=6;break}s=c.value,e.push(Buffer.from(s));case 5:t=!1,n.n=3;break;case 6:n.n=8;break;case 7:n.p=7,l=n.v,o=!0,a=l;case 8:if(n.p=8,n.p=9,!t||null==i.return){n.n=10;break}return n.n=10,i.return();case 10:if(n.p=10,!o){n.n=11;break}throw a;case 11:return n.f(10);case 12:return n.f(8);case 13:return n.a(2,Buffer.concat(e).toString("utf8"))}},n,null,[[9,,10,12],[2,7,8,13]])}))).apply(this,arguments)}function yn(){return bn.apply(this,arguments)}function bn(){return(bn=l(v().m(function n(){var r,e,t,o,a,i,u,c,s,l;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,E();case 1:for(e=n.v,t=An(e),o=null!=(r=t.replies)?r:{},a={},i=0,u=Object.entries(o);i<u.length;i++)c=b(u[i],2),s=c[0],"string"==typeof(l=c[1])&&l.length>0&&(a[s]=l);return n.a(2,a)}},n)}))).apply(this,arguments)}function wn(n){return gn.apply(this,arguments)}function gn(){return(gn=l(v().m(function n(r){var e,t,o;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,R(["git","branch","--show-current"]);case 1:return e=n.v.trim(),n.n=2,C(["repo","view","--json","defaultBranchRef","--jq",".defaultBranchRef.name"]);case 2:return t=n.v.trim(),e||_("Error: could not determine current branch"),t||_("Error: could not determine default branch"),e===t&&_("Error: current branch is the default branch (".concat(t,")")),o=["pr","create","--base",t,"--head",e,"--fill"],r&&r.length>0&&o.push("--body-file","-"),I("Creating pull request..."),n.n=3,C(o,r);case 3:return n.n=4,C(["pr","view","--json","id,number,title,url,state,isDraft,baseRefName,headRefName,author"]);case 4:return n.a(2,n.v.trim())}},n)}))).apply(this,arguments)}function kn(){return jn.apply(this,arguments)}function jn(){return(jn=l(v().m(function n(){var r,e,t,o,a,i,u;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,D();case 1:return r=n.v,e=b(r,2),t=e[0],o=e[1],n.n=2,J();case 2:return a=n.v,I("Fetching unresolved review threads..."),i=K,n.n=3,Z(t,o,a);case 3:return u=n.v,n.a(2,i({unresolved_threads:u}))}},n)}))).apply(this,arguments)}function On(n){return Sn.apply(this,arguments)}function Sn(){return(Sn=l(v().m(function n(r){var e,t,o,a,i,u,c,s,l,p,d,h,m,y,w,g,k,j,O,S;return v().w(function(n){for(;;)switch(n.p=n.n){case 0:return n.n=1,D();case 1:return e=n.v,t=b(e,2),o=t[0],a=t[1],n.n=2,J();case 2:return i=n.v,j=Set,n.n=3,U(o,a,i);case 3:O=n.v,u=new j(O),I("Replying to ".concat(Object.keys(r).length," review threads...")),c=[],s=Object.entries(r),l=f(s.entries()),n.p=4,l.s();case 5:if((p=l.n()).done){n.n=9;break}if(h=b(p.value,2),m=h[0],y=b(h[1],2),w=y[0],g=y[1],I("Processing ".concat(m+1,"/").concat(s.length,": ").concat(w)),u.has(w)){n.n=6;break}return n.a(3,8);case 6:return n.n=7,W("\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:w,body:g});case 7:k=n.v,null!=(d=k.data)&&null!=(d=d.resolveReviewThread)&&null!=(d=d.thread)&&d.isResolved?c.push(w):I("Warning: failed to resolve thread ".concat(w,"."));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 I("Done."),n.a(2,K({resolved_thread_ids:c}))}},n,null,[[4,10,11,12]])}))).apply(this,arguments)}function In(){return _n.apply(this,arguments)}function _n(){return(_n=l(v().m(function n(){var r,e,t,o,a,i,u,c,s,f,p,d,h,m,y;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,J();case 1:return r=n.v,I("Fetching latest CI results..."),n.n=2,tn(r);case 2:return e=n.v,t=b(e,3),o=t[0],a=t[1],i=t[2],u=rn(o),c=en(u),s=b(c,2),f=s[0],p=s[1],m=Object,n.n=3,Promise.all(Object.entries(u).map(l(v().m(function n(r){var e,t,o,a,i;return v().w(function(n){for(;;)switch(n.n){case 0:return e=b(r,2),t=e[0],o=e[1],a=o.check,n.n=1,un(an(a));case 1:return i=n.v,n.a(2,[t,{classification:o.classification,check:V(a),workflowRun:i&&V(i)}])}},n)}))));case 3:if(d=m.fromEntries.call(m,n.v),h={latest_ci_results:o,waited_for_test_related_checks:a>0,test_related_check_wait_attempts:a,test_related_check_wait_timed_out:i,latest_workflow_results:d},!(Object.keys(f).length>0)){n.n=5;break}return y=Object,n.n=4,Promise.all(Object.entries(f).map(l(v().m(function n(r){var e,t,o,a,i,u;return v().w(function(n){for(;;)switch(n.n){case 0:if(e=b(r,2),t=e[0],o=e[1],a=an(o.check)){n.n=1;break}return n.a(2,[t,"Failed latest result has no GitHub Actions run link."]);case 1:return i=t,n.n=2,q(["run","view",a,"--log-failed"],[1]);case 2:return u=n.v,n.a(2,[i,u])}},n)}))));case 4:return h.failed_workflow_outputs=y.fromEntries.call(y,n.v),n.a(2,{output:K(h),exitCode:1});case 5:if(!(Object.keys(p).length>0)){n.n=6;break}return h.test_workflow_output="Timed out waiting for test-related workflows to finish.",h.running_test_related_workflows=Object.keys(p),n.a(2,{output:K(h),exitCode:1});case 6:return h.test_workflow_output="All workflows are successful.",n.a(2,{output:K(h),exitCode:0})}},n)}))).apply(this,arguments)}function An(n){try{var r=JSON.parse(n);return function(n){if("object"!==g(n)||null===n||Array.isArray(n))return!1;var r=n.replies;if(void 0===r)return!0;if("object"!==g(r)||null===r||Array.isArray(r))return!1;return Object.values(r).every(function(n){return null==n||"string"==typeof n})}(r)||_("".concat("Error: Invalid input format on stdin",": expected an object with an optional string-valued `replies` map"),2),r}catch(n){throw n instanceof SyntaxError&&_("Error: Invalid JSON provided on stdin: ".concat(n.message),2),n}}var Pn=new n;Pn.name("agent-skills").description("CLI commands for the skills in this repository").showHelpAfterError(),Pn.command("open-pr").description("Create a pull request for the current branch").allowExcessArguments(!1).action(l(v().m(function n(){var r,e;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,P();case 1:return r=n.v,n.n=2,wn(r||void 0);case 2:e=n.v,process.stdout.write("".concat(e,"\n"));case 3:return n.a(2)}},n)}))),Pn.command("check-pr-ci").description("Show the latest test-related CI results for the current pull request").allowExcessArguments(!1).action(l(v().m(function n(){var r;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,In();case 1:r=n.v,process.stdout.write(r.output),process.exit(r.exitCode);case 2:return n.a(2)}},n)}))),Pn.command("list-pr-review-threads").description("List unresolved review threads for the current pull request").allowExcessArguments(!1).action(l(v().m(function n(){var r;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,kn();case 1:r=n.v,process.stdout.write(r);case 2:return n.a(2)}},n)}))),Pn.command("resolve-pr-review-threads").description("Reply to unresolved review threads and resolve them").allowExcessArguments(!1).action(l(v().m(function n(){var r,e;return v().w(function(n){for(;;)switch(n.n){case 0:return n.n=1,yn();case 1:return r=n.v,n.n=2,On(r);case 2:e=n.v,process.stdout.write(e);case 3:return n.a(2)}},n)}))),await Pn.parseAsync(process.argv);
|
|
5
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQtc2tpbGxzLXByLWNsaS5qcyIsInNvdXJjZXMiOlsiLi4vc3JjL3lhbWwudHMiLCIuLi9zcmMvcHIvcHItY29tbWFuZHMudHMiLCIuLi9zcmMvY2xpL2FnZW50LXNraWxscy1wci1jbGkudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBgYmxvY2tRdW90ZTogJ2xpdGVyYWwnYDogVXNlcyBhIHBpcGUgKGBwcm9wOiB8YCkgdG8gcmVwcmVzZW50IG11bHRpbGluZSBzdHJpbmdzLlxuICogYGxpbmVXaWR0aDogMGA6IERpc2FibGVzIGxpbmUgd3JhcHBpbmcuXG4gKi9cbmV4cG9ydCBjb25zdCB5YW1sU3RyaW5naWZ5T3B0aW9ucyA9IHsgYmxvY2tRdW90ZTogJ2xpdGVyYWwnLCBsaW5lV2lkdGg6IDAgfSBhcyBjb25zdDtcbiIsImltcG9ydCB7IHNwYXduIH0gZnJvbSAnbm9kZTpjaGlsZF9wcm9jZXNzJztcbmltcG9ydCB7IHN0ZGVyciBhcyBwcm9jZXNzU3RkZXJyLCBzdGRpbiBhcyBwcm9jZXNzU3RkaW4gfSBmcm9tICdub2RlOnByb2Nlc3MnO1xuaW1wb3J0IHsgc2V0VGltZW91dCBhcyBzbGVlcCB9IGZyb20gJ25vZGU6dGltZXJzL3Byb21pc2VzJztcbmltcG9ydCB7IHN0cmluZ2lmeSBhcyBzdHJpbmdpZnlZYW1sIH0gZnJvbSAneWFtbCc7XG5pbXBvcnQgeyB5YW1sU3RyaW5naWZ5T3B0aW9ucyB9IGZyb20gJy4uL3lhbWwuanMnO1xuXG5leHBvcnQgY29uc3QgVEVTVF9SRUxBVEVEX1BBVFRFUk4gPSAvXFxidGVzdFxcYi9pO1xuZXhwb3J0IGNvbnN0IFRFU1RfQ0hFQ0tfV0FJVF9JTlRFUlZBTF9TRUNPTkRTID0gMTA7XG5leHBvcnQgY29uc3QgVEVTVF9DSEVDS19XQUlUX01BWF9BVFRFTVBUUyA9IDM2MDtcbmV4cG9ydCBjb25zdCBaRVJPX1RJTUVTVEFNUCA9ICcwMDAxLTAxLTAxVDAwOjAwOjAwWic7XG5leHBvcnQgY29uc3QgV09SS0ZMT1dfUlVOX0pTT05fRklFTERTID0gW1xuICAnYXR0ZW1wdCcsXG4gICdjb25jbHVzaW9uJyxcbiAgJ2NyZWF0ZWRBdCcsXG4gICdkYXRhYmFzZUlkJyxcbiAgJ2Rpc3BsYXlUaXRsZScsXG4gICdldmVudCcsXG4gICdoZWFkQnJhbmNoJyxcbiAgJ2hlYWRTaGEnLFxuICAnbmFtZScsXG4gICdudW1iZXInLFxuICAnc3RhcnRlZEF0JyxcbiAgJ3N0YXR1cycsXG4gICd1cGRhdGVkQXQnLFxuICAndXJsJyxcbiAgJ3dvcmtmbG93TmFtZScsXG5dIGFzIGNvbnN0O1xuXG5leHBvcnQgdHlwZSBKc29uT2JqZWN0ID0gUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG5cbmV4cG9ydCB0eXBlIENoZWNrID0ge1xuICBidWNrZXQ/OiBzdHJpbmc7XG4gIGNvbXBsZXRlZEF0Pzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgZXZlbnQ/OiBzdHJpbmc7XG4gIGxpbms/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHN0YXJ0ZWRBdD86IHN0cmluZztcbiAgc3RhdGU/OiBzdHJpbmc7XG4gIHdvcmtmbG93Pzogc3RyaW5nO1xuICBba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgQ2lSZXN1bHRzID0ge1xuICBzdW1tYXJ5OiB7XG4gICAgdG90YWw6IG51bWJlcjtcbiAgICBwYXNzOiBudW1iZXI7XG4gICAgZmFpbDogbnVtYmVyO1xuICAgIHBlbmRpbmc6IG51bWJlcjtcbiAgICBza2lwcGluZzogbnVtYmVyO1xuICAgIGNhbmNlbDogbnVtYmVyO1xuICB9O1xuICBjaGVja3M6IENoZWNrW107XG59O1xuXG5leHBvcnQgdHlwZSBXb3JrZmxvd0NsYXNzaWZpY2F0aW9uID0gJ2ZhaWxlZCcgfCAncnVubmluZycgfCAnc3VjY2Vzc2Z1bCc7XG5cbmV4cG9ydCB0eXBlIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdCA9IHtcbiAgY2xhc3NpZmljYXRpb246IFdvcmtmbG93Q2xhc3NpZmljYXRpb247XG4gIGNoZWNrOiBDaGVjaztcbiAgY2hlY2tzOiBDaGVja1tdO1xufTtcblxudHlwZSBSZXZpZXdDb21tZW50Tm9kZSA9IHtcbiAgaWQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGJvZHk6IHN0cmluZztcbiAgY3JlYXRlZEF0OiBzdHJpbmc7XG4gIGRpZmZIdW5rPzogc3RyaW5nIHwgbnVsbDtcbiAgYXV0aG9yPzogeyBsb2dpbj86IHN0cmluZyB8IG51bGwgfSB8IHN0cmluZyB8IG51bGw7XG59O1xuXG50eXBlIFJldmlld1RocmVhZE5vZGUgPSB7XG4gIGlkOiBzdHJpbmc7XG4gIGlzUmVzb2x2ZWQ6IGJvb2xlYW47XG4gIGlzT3V0ZGF0ZWQ/OiBib29sZWFuIHwgbnVsbDtcbiAgcGF0aD86IHN0cmluZyB8IG51bGw7XG4gIGxpbmU/OiBudW1iZXIgfCBudWxsO1xuICBvcmlnaW5hbExpbmU/OiBudW1iZXIgfCBudWxsO1xuICBzdGFydExpbmU/OiBudW1iZXIgfCBudWxsO1xuICBvcmlnaW5hbFN0YXJ0TGluZT86IG51bWJlciB8IG51bGw7XG4gIGNvbW1lbnRzOiB7XG4gICAgbm9kZXM6IFJldmlld0NvbW1lbnROb2RlW107XG4gICAgcGFnZUluZm86IHtcbiAgICAgIGhhc05leHRQYWdlOiBib29sZWFuO1xuICAgICAgZW5kQ3Vyc29yPzogc3RyaW5nIHwgbnVsbDtcbiAgICB9O1xuICB9O1xufTtcblxudHlwZSBSdW5Db21tYW5kT3B0aW9ucyA9IHtcbiAgc3RkaW5EYXRhPzogc3RyaW5nO1xuICBhbGxvd2VkRXhpdENvZGVzPzogbnVtYmVyW107XG59O1xuXG5jb25zdCBHSF9SRVRSWV9NQVhfQVRURU1QVFMgPSAzO1xuY29uc3QgR0hfUkVUUllfQkFTRV9ERUxBWV9NUyA9IDEwMDA7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9ncmVzcyhtZXNzYWdlOiBzdHJpbmcpOiB2b2lkIHtcbiAgcHJvY2Vzc1N0ZGVyci53cml0ZShgJHttZXNzYWdlfVxcbmApO1xufVxuXG5mdW5jdGlvbiBleGl0V2l0aEVycm9yKG1lc3NhZ2U6IHN0cmluZywgY29kZSA9IDEpOiBuZXZlciB7XG4gIHByb2Nlc3NTdGRlcnIud3JpdGUoYCR7bWVzc2FnZX1cXG5gKTtcbiAgcHJvY2Vzcy5leGl0KGNvZGUpO1xufVxuXG5mdW5jdGlvbiBpc1RyYW5zaWVudEdoRmFpbHVyZShjb21tYW5kOiBzdHJpbmdbXSwgZXhpdENvZGU6IG51bWJlciwgb3V0cHV0OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgaWYgKGNvbW1hbmRbMF0gIT09ICdnaCcgfHwgZXhpdENvZGUgPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gLyhIVFRQIDUwWzAyMzRdXFxifFdlIGhhZCBpc3N1ZXMgcHJvZHVjaW5nIHRoZSByZXNwb25zZSB0byB5b3VyIHJlcXVlc3QpL2kudGVzdChvdXRwdXQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFN0ZGluVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBpZiAocHJvY2Vzc1N0ZGluLmlzVFRZKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG4gIHJldHVybiBhd2FpdCBzdHJlYW1Ub1RleHQocHJvY2Vzc1N0ZGluKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRTdGRpblRleHQoKTtcbiAgaWYgKGlucHV0Lmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gaW5wdXQ7XG4gIH1cbiAgZXhpdFdpdGhFcnJvcignRXJyb3I6IEpTT04gaW5wdXQgaXMgcmVxdWlyZWQgb24gc3RkaW4nLCAyKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvbW1hbmQoY29tbWFuZDogc3RyaW5nW10sIG9wdGlvbnM6IFJ1bkNvbW1hbmRPcHRpb25zID0ge30pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBhbGxvd2VkRXhpdENvZGVzID0gb3B0aW9ucy5hbGxvd2VkRXhpdENvZGVzID8/IFtdO1xuXG4gIGZvciAobGV0IGF0dGVtcHQgPSAxOyBhdHRlbXB0IDw9IEdIX1JFVFJZX01BWF9BVFRFTVBUUzsgYXR0ZW1wdCArPSAxKSB7XG4gICAgY29uc3QgcHJvYyA9IHNwYXduKGNvbW1hbmRbMF0gPz8gJycsIGNvbW1hbmQuc2xpY2UoMSksIHtcbiAgICAgIHN0ZGlvOiBbJ3BpcGUnLCAncGlwZScsICdwaXBlJ10sXG4gICAgfSk7XG4gICAgaWYgKG9wdGlvbnMuc3RkaW5EYXRhICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHByb2Muc3RkaW4uZW5kKG9wdGlvbnMuc3RkaW5EYXRhKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvYy5zdGRpbi5lbmQoKTtcbiAgICB9XG5cbiAgICBjb25zdCBbc3Rkb3V0LCBzdGRlcnIsIGV4aXRDb2RlXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHN0cmVhbVRvVGV4dChwcm9jLnN0ZG91dCksXG4gICAgICBzdHJlYW1Ub1RleHQocHJvYy5zdGRlcnIpLFxuICAgICAgbmV3IFByb21pc2U8bnVtYmVyPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHByb2Mub25jZSgnZXJyb3InLCByZWplY3QpO1xuICAgICAgICBwcm9jLm9uY2UoJ2Nsb3NlJywgKGNvZGUpID0+IHJlc29sdmUoY29kZSA/PyAxKSk7XG4gICAgICB9KSxcbiAgICBdKTtcbiAgICBjb25zdCBvdXRwdXQgPSBgJHtzdGRvdXR9JHtzdGRlcnJ9YDtcblxuICAgIGlmIChleGl0Q29kZSA9PT0gMCB8fCBhbGxvd2VkRXhpdENvZGVzLmluY2x1ZGVzKGV4aXRDb2RlKSkge1xuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG5cbiAgICBpZiAoaXNUcmFuc2llbnRHaEZhaWx1cmUoY29tbWFuZCwgZXhpdENvZGUsIG91dHB1dCkgJiYgYXR0ZW1wdCA8IEdIX1JFVFJZX01BWF9BVFRFTVBUUykge1xuICAgICAgcHJvZ3Jlc3MoYFRyYW5zaWVudCBHaXRIdWIgQ0xJIGZhaWx1cmU7IHJldHJ5aW5nLi4uIChhdHRlbXB0ICR7YXR0ZW1wdH0gb2YgJHtHSF9SRVRSWV9NQVhfQVRURU1QVFMgLSAxfSlgKTtcbiAgICAgIGF3YWl0IHNsZWVwKEdIX1JFVFJZX0JBU0VfREVMQVlfTVMgKiBhdHRlbXB0KTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIGV4aXRXaXRoRXJyb3Iob3V0cHV0IHx8IGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kLmpvaW4oJyAnKX1gKTtcbiAgfVxuICBleGl0V2l0aEVycm9yKGBDb21tYW5kIGZhaWxlZCBhZnRlciAke0dIX1JFVFJZX01BWF9BVFRFTVBUU30gYXR0ZW1wdHM6ICR7Y29tbWFuZC5qb2luKCcgJyl9YCk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnaChhcmdzOiBzdHJpbmdbXSwgc3RkaW5EYXRhPzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgcmV0dXJuIGF3YWl0IHJ1bkNvbW1hbmQoWydnaCcsIC4uLmFyZ3NdLCB7IHN0ZGluRGF0YSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdoQWxsb3dFeGl0Q29kZXMoXG4gIGFyZ3M6IHN0cmluZ1tdLFxuICBhbGxvd2VkRXhpdENvZGVzOiBudW1iZXJbXSxcbiAgc3RkaW5EYXRhPzogc3RyaW5nXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gYXdhaXQgcnVuQ29tbWFuZChbJ2doJywgLi4uYXJnc10sIHsgc3RkaW5EYXRhLCBhbGxvd2VkRXhpdENvZGVzIH0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gY3VycmVudFJlcG9QYXJ0cygpOiBQcm9taXNlPFtzdHJpbmcsIHN0cmluZ10+IHtcbiAgY29uc3QgbmFtZVdpdGhPd25lciA9IChhd2FpdCBnaChbJ3JlcG8nLCAndmlldycsICctLWpzb24nLCAnbmFtZVdpdGhPd25lcicsICctLWpxJywgJy5uYW1lV2l0aE93bmVyJ10pKS50cmltKCk7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBuYW1lV2l0aE93bmVyLnNwbGl0KCcvJywgMik7XG4gIGlmICghb3duZXIgfHwgIW5hbWUpIHtcbiAgICBleGl0V2l0aEVycm9yKCdFcnJvcjogY291bGQgbm90IGRldGVybWluZSBjdXJyZW50IHJlcG9zaXRvcnknKTtcbiAgfVxuICByZXR1cm4gW293bmVyLCBuYW1lXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGN1cnJlbnRQck51bWJlcigpOiBQcm9taXNlPHN0cmluZz4ge1xuICByZXR1cm4gKGF3YWl0IGdoKFsncHInLCAndmlldycsICctLWpzb24nLCAnbnVtYmVyJywgJy0tanEnLCAnLm51bWJlciddKSkudHJpbSgpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ3JhcGhxbDxUIGV4dGVuZHMgSnNvbk9iamVjdD4oXG4gIHF1ZXJ5OiBzdHJpbmcsXG4gIHZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bWJlciB8IHVuZGVmaW5lZD4gPSB7fVxuKTogUHJvbWlzZTxUPiB7XG4gIGNvbnN0IGFyZ3MgPSBbJ2FwaScsICdncmFwaHFsJywgJy1GJywgJ3F1ZXJ5PUAtJ107XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKHZhcnMpKSB7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09ICcnKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgYXJncy5wdXNoKCctRicsIGAke2tleX09JHt2YWx1ZX1gKTtcbiAgfVxuXG4gIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShhd2FpdCBnaChhcmdzLCBxdWVyeSkpIGFzIEpzb25PYmplY3QgJiB7IGVycm9ycz86IEFycmF5PHsgbWVzc2FnZT86IHN0cmluZyB9PiB9O1xuICBpZiAoIUFycmF5LmlzQXJyYXkocmVzcG9uc2UuZXJyb3JzKSkge1xuICAgIHJldHVybiByZXNwb25zZSBhcyBUO1xuICB9XG5cbiAgY29uc3QgZXJyb3JNZXNzYWdlcyA9IHJlc3BvbnNlLmVycm9ycy5tYXAoKGVycm9yKSA9PiBlcnJvci5tZXNzYWdlID8/ICdVbmtub3duIEdyYXBoUUwgZXJyb3InKS5qb2luKCdcXG4nKTtcbiAgZXhpdFdpdGhFcnJvcihgR3JhcGhRTCBBUEkgZXJyb3I6XFxuJHtlcnJvck1lc3NhZ2VzfWApO1xufVxuXG5jb25zdCBSRVZJRVdfVEhSRUFEX1FVRVJZID0gYFxuICBxdWVyeSgkb3duZXI6IFN0cmluZyEsICRuYW1lOiBTdHJpbmchLCAkbnVtYmVyOiBJbnQhLCAkY3Vyc29yOiBTdHJpbmcpIHtcbiAgICByZXBvc2l0b3J5KG93bmVyOiAkb3duZXIsIG5hbWU6ICRuYW1lKSB7XG4gICAgICBwdWxsUmVxdWVzdChudW1iZXI6ICRudW1iZXIpIHtcbiAgICAgICAgcmV2aWV3VGhyZWFkcyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICBpc1Jlc29sdmVkXG4gICAgICAgICAgICBpc091dGRhdGVkXG4gICAgICAgICAgICBwYXRoXG4gICAgICAgICAgICBsaW5lXG4gICAgICAgICAgICBvcmlnaW5hbExpbmVcbiAgICAgICAgICAgIHN0YXJ0TGluZVxuICAgICAgICAgICAgb3JpZ2luYWxTdGFydExpbmVcbiAgICAgICAgICAgIGNvbW1lbnRzKGZpcnN0OiAxMDApIHtcbiAgICAgICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgICAgIGlkXG4gICAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICAgICAgYm9keVxuICAgICAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgICAgIGRpZmZIdW5rXG4gICAgICAgICAgICAgICAgYXV0aG9yIHsgbG9naW4gfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZVxuICAgICAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhZ2VJbmZvIHtcbiAgICAgICAgICAgIGhhc05leHRQYWdlXG4gICAgICAgICAgICBlbmRDdXJzb3JcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbmA7XG5cbmNvbnN0IFJFVklFV19DT01NRU5UX1FVRVJZID0gYFxuICBxdWVyeSgkdGhyZWFkSWQ6IElEISwgJGN1cnNvcjogU3RyaW5nKSB7XG4gICAgbm9kZShpZDogJHRocmVhZElkKSB7XG4gICAgICAuLi4gb24gUHVsbFJlcXVlc3RSZXZpZXdUaHJlYWQge1xuICAgICAgICBjb21tZW50cyhmaXJzdDogMTAwLCBhZnRlcjogJGN1cnNvcikge1xuICAgICAgICAgIG5vZGVzIHtcbiAgICAgICAgICAgIGlkXG4gICAgICAgICAgICB1cmxcbiAgICAgICAgICAgIGJvZHlcbiAgICAgICAgICAgIGNyZWF0ZWRBdFxuICAgICAgICAgICAgZGlmZkh1bmtcbiAgICAgICAgICAgIGF1dGhvciB7IGxvZ2luIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuY29uc3QgUkVWSUVXX1RIUkVBRF9JRFNfUVVFUlkgPSBgXG4gIHF1ZXJ5KCRvd25lcjogU3RyaW5nISwgJG5hbWU6IFN0cmluZyEsICRudW1iZXI6IEludCEsICRjdXJzb3I6IFN0cmluZykge1xuICAgIHJlcG9zaXRvcnkob3duZXI6ICRvd25lciwgbmFtZTogJG5hbWUpIHtcbiAgICAgIHB1bGxSZXF1ZXN0KG51bWJlcjogJG51bWJlcikge1xuICAgICAgICByZXZpZXdUaHJlYWRzKGZpcnN0OiAxMDAsIGFmdGVyOiAkY3Vyc29yKSB7XG4gICAgICAgICAgbm9kZXMge1xuICAgICAgICAgICAgaWRcbiAgICAgICAgICAgIGlzUmVzb2x2ZWRcbiAgICAgICAgICB9XG4gICAgICAgICAgcGFnZUluZm8ge1xuICAgICAgICAgICAgaGFzTmV4dFBhZ2VcbiAgICAgICAgICAgIGVuZEN1cnNvclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuYDtcblxuZnVuY3Rpb24gbm9ybWFsaXplQ29tbWVudEF1dGhvcihjb21tZW50OiBSZXZpZXdDb21tZW50Tm9kZSk6IFJldmlld0NvbW1lbnROb2RlICYgeyBhdXRob3I/OiBzdHJpbmcgfCBudWxsIH0ge1xuICByZXR1cm4ge1xuICAgIC4uLmNvbW1lbnQsXG4gICAgYXV0aG9yOiB0eXBlb2YgY29tbWVudC5hdXRob3IgPT09ICdzdHJpbmcnID8gY29tbWVudC5hdXRob3IgOiAoY29tbWVudC5hdXRob3I/LmxvZ2luID8/IG51bGwpLFxuICB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcGFnaW5hdGVSZXZpZXdUaHJlYWRzKFxuICBxdWVyeTogc3RyaW5nLFxuICBvd25lcjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIHByTnVtYmVyOiBzdHJpbmcgfCBudW1iZXIsXG4gIG9uVGhyZWFkOiAodGhyZWFkOiBSZXZpZXdUaHJlYWROb2RlKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPlxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBjdXJzb3I6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBmb3IgKDs7KSB7XG4gICAgY29uc3QgcmV2aWV3VGhyZWFkcyA9IChcbiAgICAgIGF3YWl0IGdyYXBocWw8e1xuICAgICAgICBkYXRhPzoge1xuICAgICAgICAgIHJlcG9zaXRvcnk/OiB7XG4gICAgICAgICAgICBwdWxsUmVxdWVzdD86IHtcbiAgICAgICAgICAgICAgcmV2aWV3VGhyZWFkcz86IHtcbiAgICAgICAgICAgICAgICBub2RlczogUmV2aWV3VGhyZWFkTm9kZVtdO1xuICAgICAgICAgICAgICAgIHBhZ2VJbmZvOiB7XG4gICAgICAgICAgICAgICAgICBoYXNOZXh0UGFnZTogYm9vbGVhbjtcbiAgICAgICAgICAgICAgICAgIGVuZEN1cnNvcj86IHN0cmluZyB8IG51bGw7XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgIH0+KHF1ZXJ5LCB7XG4gICAgICAgIG93bmVyLFxuICAgICAgICBuYW1lLFxuICAgICAgICBudW1iZXI6IE51bWJlcihwck51bWJlciksXG4gICAgICAgIGN1cnNvcixcbiAgICAgIH0pXG4gICAgKS5kYXRhPy5yZXBvc2l0b3J5Py5wdWxsUmVxdWVzdD8ucmV2aWV3VGhyZWFkcztcblxuICAgIGlmICghcmV2aWV3VGhyZWFkcykge1xuICAgICAgZXhpdFdpdGhFcnJvcihcbiAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIHJldmlld1RocmVhZHMgaW4gR3JhcGhRTCByZXNwb25zZS4gVGhlIHB1bGwgcmVxdWVzdCBtYXkgbm90IGV4aXN0IG9yIHRoZXJlIHdhcyBhbiBBUEkgZXJyb3IuJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHRocmVhZCBvZiByZXZpZXdUaHJlYWRzLm5vZGVzKSB7XG4gICAgICBhd2FpdCBvblRocmVhZCh0aHJlYWQpO1xuICAgIH1cblxuICAgIGlmICghcmV2aWV3VGhyZWFkcy5wYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjdXJzb3IgPSByZXZpZXdUaHJlYWRzLnBhZ2VJbmZvLmVuZEN1cnNvciA/PyB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICBjb25zdCBpZHM6IHN0cmluZ1tdID0gW107XG4gIGF3YWl0IHBhZ2luYXRlUmV2aWV3VGhyZWFkcyhSRVZJRVdfVEhSRUFEX0lEU19RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCAodGhyZWFkKSA9PiB7XG4gICAgaWYgKCF0aHJlYWQuaXNSZXNvbHZlZCkge1xuICAgICAgaWRzLnB1c2godGhyZWFkLmlkKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gaWRzO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdW5yZXNvbHZlZFJldmlld1RocmVhZHMoXG4gIG93bmVyOiBzdHJpbmcsXG4gIG5hbWU6IHN0cmluZyxcbiAgcHJOdW1iZXI6IHN0cmluZyB8IG51bWJlclxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdPiB7XG4gIGNvbnN0IHRocmVhZHM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+W10gPSBbXTtcblxuICBhd2FpdCBwYWdpbmF0ZVJldmlld1RocmVhZHMoUkVWSUVXX1RIUkVBRF9RVUVSWSwgb3duZXIsIG5hbWUsIHByTnVtYmVyLCBhc3luYyAodGhyZWFkKSA9PiB7XG4gICAgaWYgKHRocmVhZC5pc1Jlc29sdmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgY29tbWVudHMgPSB0aHJlYWQuY29tbWVudHMubm9kZXMubWFwKG5vcm1hbGl6ZUNvbW1lbnRBdXRob3IpO1xuICAgIGxldCBwYWdlSW5mbyA9IHRocmVhZC5jb21tZW50cy5wYWdlSW5mbztcbiAgICBsZXQgY3Vyc29yID0gcGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcblxuICAgIHdoaWxlIChwYWdlSW5mby5oYXNOZXh0UGFnZSkge1xuICAgICAgY29uc3QgY29tbWVudENvbm5lY3Rpb24gPSAoXG4gICAgICAgIGF3YWl0IGdyYXBocWw8e1xuICAgICAgICAgIGRhdGE/OiB7XG4gICAgICAgICAgICBub2RlPzoge1xuICAgICAgICAgICAgICBjb21tZW50cz86IHtcbiAgICAgICAgICAgICAgICBub2RlczogUmV2aWV3Q29tbWVudE5vZGVbXTtcbiAgICAgICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgICAgaGFzTmV4dFBhZ2U6IGJvb2xlYW47XG4gICAgICAgICAgICAgICAgICBlbmRDdXJzb3I/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9O1xuICAgICAgICAgIH07XG4gICAgICAgIH0+KFJFVklFV19DT01NRU5UX1FVRVJZLCB7IHRocmVhZElkOiB0aHJlYWQuaWQsIGN1cnNvciB9KVxuICAgICAgKS5kYXRhPy5ub2RlPy5jb21tZW50cztcblxuICAgICAgaWYgKCFjb21tZW50Q29ubmVjdGlvbikge1xuICAgICAgICBleGl0V2l0aEVycm9yKGBDb3VsZCBub3QgZmluZCBjb21tZW50cyBpbiBHcmFwaFFMIHJlc3BvbnNlIGZvciB0aHJlYWQgJHt0aHJlYWQuaWR9LmApO1xuICAgICAgfVxuXG4gICAgICBjb21tZW50cy5wdXNoKC4uLmNvbW1lbnRDb25uZWN0aW9uLm5vZGVzLm1hcChub3JtYWxpemVDb21tZW50QXV0aG9yKSk7XG4gICAgICBwYWdlSW5mbyA9IGNvbW1lbnRDb25uZWN0aW9uLnBhZ2VJbmZvO1xuICAgICAgY3Vyc29yID0gcGFnZUluZm8uZW5kQ3Vyc29yID8/IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICB0aHJlYWRzLnB1c2goe1xuICAgICAgaWQ6IHRocmVhZC5pZCxcbiAgICAgIGlzUmVzb2x2ZWQ6IHRocmVhZC5pc1Jlc29sdmVkLFxuICAgICAgaXNPdXRkYXRlZDogdGhyZWFkLmlzT3V0ZGF0ZWQsXG4gICAgICBwYXRoOiB0aHJlYWQucGF0aCxcbiAgICAgIGxpbmU6IHRocmVhZC5saW5lLFxuICAgICAgb3JpZ2luYWxMaW5lOiB0aHJlYWQub3JpZ2luYWxMaW5lLFxuICAgICAgc3RhcnRMaW5lOiB0aHJlYWQuc3RhcnRMaW5lLFxuICAgICAgb3JpZ2luYWxTdGFydExpbmU6IHRocmVhZC5vcmlnaW5hbFN0YXJ0TGluZSxcbiAgICAgIGNvbW1lbnRzLFxuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gdGhyZWFkcztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHlhbWxEdW1wKGRhdGE6IHVua25vd24pOiBzdHJpbmcge1xuICByZXR1cm4gc3RyaW5naWZ5WWFtbChkYXRhLCB5YW1sU3RyaW5naWZ5T3B0aW9ucyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBkZWVwQ29weTxUPihkYXRhOiBUKTogVCB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGRhdGEpKSBhcyBUO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGF0ZXN0UHJDaVJlc3VsdHMocHJOdW1iZXI/OiBzdHJpbmcpOiBQcm9taXNlPENpUmVzdWx0cz4ge1xuICBjb25zdCBhcmdzID0gWydwcicsICdjaGVja3MnXTtcbiAgaWYgKHByTnVtYmVyKSB7XG4gICAgYXJncy5wdXNoKHByTnVtYmVyKTtcbiAgfVxuICBhcmdzLnB1c2goJy0tanNvbicsICdidWNrZXQsY29tcGxldGVkQXQsZGVzY3JpcHRpb24sZXZlbnQsbGluayxuYW1lLHN0YXJ0ZWRBdCxzdGF0ZSx3b3JrZmxvdycpO1xuXG4gIGxldCBjaGVja3M6IENoZWNrW10gPSBbXTtcbiAgdHJ5IHtcbiAgICBjb25zdCByYXcgPSBhd2FpdCBnaEFsbG93RXhpdENvZGVzKGFyZ3MsIFs4XSk7XG4gICAgY2hlY2tzID0gcmF3LnRyaW0oKS5sZW5ndGggPiAwID8gKEpTT04ucGFyc2UocmF3KSBhcyBDaGVja1tdKSA6IFtdO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBjaGVja3MgPSBbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgc3VtbWFyeSA9IGNoZWNrcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgbnVtYmVyPj4oKGNvdW50cywgY2hlY2spID0+IHtcbiAgICBjb25zdCBidWNrZXQgPSBjaGVjay5idWNrZXQgPz8gJyc7XG4gICAgY291bnRzW2J1Y2tldF0gPSAoY291bnRzW2J1Y2tldF0gPz8gMCkgKyAxO1xuICAgIHJldHVybiBjb3VudHM7XG4gIH0sIHt9KTtcblxuICByZXR1cm4ge1xuICAgIHN1bW1hcnk6IHtcbiAgICAgIHRvdGFsOiBjaGVja3MubGVuZ3RoLFxuICAgICAgcGFzczogc3VtbWFyeS5wYXNzID8/IDAsXG4gICAgICBmYWlsOiBzdW1tYXJ5LmZhaWwgPz8gMCxcbiAgICAgIHBlbmRpbmc6IHN1bW1hcnkucGVuZGluZyA/PyAwLFxuICAgICAgc2tpcHBpbmc6IHN1bW1hcnkuc2tpcHBpbmcgPz8gMCxcbiAgICAgIGNhbmNlbDogc3VtbWFyeS5jYW5jZWwgPz8gMCxcbiAgICB9LFxuICAgIGNoZWNrcyxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNsYXNzaWZpZWRMYXRlc3RSZXN1bHRzKGNpUmVzdWx0czogQ2lSZXN1bHRzKTogUmVjb3JkPHN0cmluZywgQ2xhc3NpZmllZFdvcmtmbG93UmVzdWx0PiB7XG4gIGNvbnN0IGxhdGVzdFJlc3VsdHNCeVdvcmtmbG93ID0gY2lSZXN1bHRzLmNoZWNrcy5yZWR1Y2U8UmVjb3JkPHN0cmluZywgQ2hlY2tbXT4+KChncm91cGVkUmVzdWx0cywgY2hlY2spID0+IHtcbiAgICBjb25zdCB3b3JrZmxvd0tleSA9IGNoZWNrLndvcmtmbG93IHx8IGNoZWNrLm5hbWUgfHwgJ3Vua25vd25fd29ya2Zsb3cnO1xuICAgIGdyb3VwZWRSZXN1bHRzW3dvcmtmbG93S2V5XSA/Pz0gW107XG4gICAgZ3JvdXBlZFJlc3VsdHNbd29ya2Zsb3dLZXldLnB1c2goY2hlY2spO1xuICAgIHJldHVybiBncm91cGVkUmVzdWx0cztcbiAgfSwge30pO1xuXG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMobGF0ZXN0UmVzdWx0c0J5V29ya2Zsb3cpLm1hcCgoW3dvcmtmbG93S2V5LCBjaGVja3NdKSA9PiB7XG4gICAgICBjb25zdCBsYXRlc3RBdHRlbXB0Q2hlY2tzID0gbGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3coY2hlY2tzKTtcbiAgICAgIGNvbnN0IGZpcnN0Q2hlY2sgPSBsYXRlc3RBdHRlbXB0Q2hlY2tzWzBdO1xuICAgICAgaWYgKCFmaXJzdENoZWNrKSB7XG4gICAgICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBubyBjaGVja3MgZm91bmQgZm9yIHdvcmtmbG93ICR7d29ya2Zsb3dLZXl9YCk7XG4gICAgICB9XG4gICAgICBjb25zdCBsYXRlc3RDaGVjayA9XG4gICAgICAgIGxhdGVzdEF0dGVtcHRDaGVja3MucmVkdWNlPENoZWNrIHwgdW5kZWZpbmVkPigoY3VycmVudExhdGVzdCwgY2hlY2spID0+IHtcbiAgICAgICAgICBpZiAoIWN1cnJlbnRMYXRlc3QpIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVjaztcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrKSA+IGxhdGVzdENoZWNrVGltZXN0YW1wKGN1cnJlbnRMYXRlc3QpID8gY2hlY2sgOiBjdXJyZW50TGF0ZXN0O1xuICAgICAgICB9LCB1bmRlZmluZWQpID8/IGZpcnN0Q2hlY2s7XG5cbiAgICAgIHJldHVybiBbXG4gICAgICAgIHdvcmtmbG93S2V5LFxuICAgICAgICB7XG4gICAgICAgICAgY2xhc3NpZmljYXRpb246IHdvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24obGF0ZXN0QXR0ZW1wdENoZWNrcyksXG4gICAgICAgICAgY2hlY2s6IGxhdGVzdENoZWNrLFxuICAgICAgICAgIGNoZWNrczogbGF0ZXN0QXR0ZW1wdENoZWNrcyxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSlcbiAgKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZhaWxlZEFuZFJ1bm5pbmdUZXN0UmVsYXRlZFJlc3VsdHNGcm9tQ2xhc3NpZmllZChcbiAgY2xhc3NpZmllZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD5cbik6IFtSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+LCBSZWNvcmQ8c3RyaW5nLCBDbGFzc2lmaWVkV29ya2Zsb3dSZXN1bHQ+XSB7XG4gIGNvbnN0IGZhaWxlZFJlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4gPSB7fTtcbiAgY29uc3QgcnVubmluZ1Jlc3VsdHM6IFJlY29yZDxzdHJpbmcsIENsYXNzaWZpZWRXb3JrZmxvd1Jlc3VsdD4gPSB7fTtcblxuICBmb3IgKGNvbnN0IFt3b3JrZmxvd0tleSwgcmVzdWx0XSBvZiBPYmplY3QuZW50cmllcyhjbGFzc2lmaWVkUmVzdWx0cykpIHtcbiAgICBpZiAocmVzdWx0LmNsYXNzaWZpY2F0aW9uID09PSAnZmFpbGVkJykge1xuICAgICAgZmFpbGVkUmVzdWx0c1t3b3JrZmxvd0tleV0gPSByZXN1bHQ7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHJlc3VsdC5jbGFzc2lmaWNhdGlvbiA9PT0gJ3J1bm5pbmcnICYmIHJlc3VsdC5jaGVja3Muc29tZSgoY2hlY2spID0+IHRlc3RSZWxhdGVkQ2hlY2soY2hlY2spKSkge1xuICAgICAgcnVubmluZ1Jlc3VsdHNbd29ya2Zsb3dLZXldID0gcmVzdWx0O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyhcbiAgcHJOdW1iZXI6IHN0cmluZyxcbiAgc2xlZXBGbjogKHNlY29uZHM6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiA9IHNsZWVwU2Vjb25kcyxcbiAgbGF0ZXN0Q2lSZXN1bHRzRm46IChwck51bWJlcj86IHN0cmluZykgPT4gQ2lSZXN1bHRzIHwgUHJvbWlzZTxDaVJlc3VsdHM+ID0gbGF0ZXN0UHJDaVJlc3VsdHMsXG4gIHByb2dyZXNzRm46IChtZXNzYWdlOiBzdHJpbmcpID0+IHZvaWQgPSBwcm9ncmVzc1xuKTogUHJvbWlzZTxbQ2lSZXN1bHRzLCBudW1iZXIsIGJvb2xlYW5dPiB7XG4gIGxldCBhdHRlbXB0cyA9IDA7XG4gIGxldCBjaVJlc3VsdHMgPSBhd2FpdCBsYXRlc3RDaVJlc3VsdHNGbihwck51bWJlcik7XG5cbiAgZm9yICg7Oykge1xuICAgIGNvbnN0IGNsYXNzaWZpZWRSZXN1bHRzID0gY2xhc3NpZmllZExhdGVzdFJlc3VsdHMoY2lSZXN1bHRzKTtcbiAgICBjb25zdCBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdID0gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKGNsYXNzaWZpZWRSZXN1bHRzKTtcblxuICAgIGlmIChPYmplY3Qua2V5cyhmYWlsZWRSZXN1bHRzKS5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gW2NpUmVzdWx0cywgYXR0ZW1wdHMsIGZhbHNlXTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKHJ1bm5pbmdSZXN1bHRzKS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBbY2lSZXN1bHRzLCBhdHRlbXB0cywgZmFsc2VdO1xuICAgIH1cbiAgICBpZiAoYXR0ZW1wdHMgPj0gVEVTVF9DSEVDS19XQUlUX01BWF9BVFRFTVBUUykge1xuICAgICAgcmV0dXJuIFtjaVJlc3VsdHMsIGF0dGVtcHRzLCB0cnVlXTtcbiAgICB9XG5cbiAgICBhdHRlbXB0cyArPSAxO1xuICAgIHByb2dyZXNzRm4oXG4gICAgICBgV2FpdGluZyBmb3IgdGVzdC1yZWxhdGVkIHdvcmtmbG93cyB0byBmaW5pc2ggKGF0dGVtcHQgJHthdHRlbXB0c30vJHtURVNUX0NIRUNLX1dBSVRfTUFYX0FUVEVNUFRTfSk6ICR7T2JqZWN0LmtleXMocnVubmluZ1Jlc3VsdHMpLmpvaW4oJywgJyl9YFxuICAgICk7XG4gICAgYXdhaXQgc2xlZXBGbihURVNUX0NIRUNLX1dBSVRfSU5URVJWQUxfU0VDT05EUyk7XG4gICAgY2lSZXN1bHRzID0gYXdhaXQgbGF0ZXN0Q2lSZXN1bHRzRm4ocHJOdW1iZXIpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjazogQ2hlY2sgfCB1bmRlZmluZWQpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBsaW5rID0gY2hlY2s/Lmxpbms7XG4gIGlmICghbGluaykge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGxpbmsubWF0Y2goL1xcL2FjdGlvbnNcXC9ydW5zXFwvKFxcZCspLyk/LlsxXTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdvcmtmbG93UnVuKHJ1bklkOiBzdHJpbmcgfCB1bmRlZmluZWQpOiBQcm9taXNlPEpzb25PYmplY3QgfCB1bmRlZmluZWQ+IHtcbiAgaWYgKCFydW5JZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBjb25zdCBydW5Kc29uID0gYXdhaXQgZ2hBbGxvd0V4aXRDb2RlcyhbJ3J1bicsICd2aWV3JywgcnVuSWQsICctLWpzb24nLCBXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMuam9pbignLCcpXSwgWzFdKTtcbiAgaWYgKHJ1bkpzb24udHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICB0cnkge1xuICAgIHJldHVybiBKU09OLnBhcnNlKHJ1bkpzb24pIGFzIEpzb25PYmplY3Q7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU3ludGF4RXJyb3IpIHtcbiAgICAgIHByb2Nlc3NTdGRlcnIud3JpdGUoYFdhcm5pbmc6IENvdWxkIG5vdCBwYXJzZSBKU09OIGZvciB3b3JrZmxvdyBydW4gJHtydW5JZH06ICR7ZXJyb3IubWVzc2FnZX1cXG5gKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsYXRlc3RDaGVja3NGb3JXb3JrZmxvdyhjaGVja3M6IENoZWNrW10pOiBDaGVja1tdIHtcbiAgY29uc3QgZ3JvdXBzID0gY2hlY2tzLnJlZHVjZSgoZ3JvdXBlZENoZWNrcywgY2hlY2spID0+IHtcbiAgICBjb25zdCBrZXkgPSB3b3JrZmxvd0F0dGVtcHRLZXkoY2hlY2spO1xuICAgIGNvbnN0IGdyb3VwID0gZ3JvdXBlZENoZWNrcy5nZXQoa2V5KTtcbiAgICBpZiAoZ3JvdXApIHtcbiAgICAgIGdyb3VwLnB1c2goY2hlY2spO1xuICAgICAgcmV0dXJuIGdyb3VwZWRDaGVja3M7XG4gICAgfVxuICAgIGdyb3VwZWRDaGVja3Muc2V0KGtleSwgW2NoZWNrXSk7XG4gICAgcmV0dXJuIGdyb3VwZWRDaGVja3M7XG4gIH0sIG5ldyBNYXA8c3RyaW5nLCBDaGVja1tdPigpKTtcblxuICByZXR1cm4gQXJyYXkuZnJvbShncm91cHMudmFsdWVzKCkpLnJlZHVjZTxDaGVja1tdPigobGF0ZXN0R3JvdXAsIGN1cnJlbnRHcm91cCkgPT4ge1xuICAgIGlmIChsYXRlc3RHcm91cC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBjdXJyZW50R3JvdXA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGxhdGVzdEdyb3VwVGltZXN0YW1wKGN1cnJlbnRHcm91cCkgPiBsYXRlc3RHcm91cFRpbWVzdGFtcChsYXRlc3RHcm91cCkgPyBjdXJyZW50R3JvdXAgOiBsYXRlc3RHcm91cDtcbiAgfSwgW10pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gd29ya2Zsb3dBdHRlbXB0S2V5KGNoZWNrOiBDaGVjayk6IHN0cmluZyB7XG4gIGNvbnN0IHJ1bklkID0gd29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsoY2hlY2spO1xuICByZXR1cm4gcnVuSWQgPyBgcnVuOiR7cnVuSWR9YCA6ICd1bmtub3duX3J1bic7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3b3JrZmxvd1Jlc3VsdENsYXNzaWZpY2F0aW9uKGNoZWNrczogQ2hlY2tbXSk6IFdvcmtmbG93Q2xhc3NpZmljYXRpb24ge1xuICBjb25zdCBidWNrZXRzID0gY2hlY2tzLm1hcCgoY2hlY2spID0+IGNoZWNrLmJ1Y2tldCA/PyAnJyk7XG4gIGlmIChidWNrZXRzLnNvbWUoKGJ1Y2tldCkgPT4gIVsncGFzcycsICdza2lwcGluZycsICdwZW5kaW5nJ10uaW5jbHVkZXMoYnVja2V0KSkpIHtcbiAgICByZXR1cm4gJ2ZhaWxlZCc7XG4gIH1cbiAgaWYgKGJ1Y2tldHMuaW5jbHVkZXMoJ3BlbmRpbmcnKSkge1xuICAgIHJldHVybiAncnVubmluZyc7XG4gIH1cbiAgcmV0dXJuICdzdWNjZXNzZnVsJztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrOiBDaGVjayk6IHN0cmluZyB7XG4gIGNvbnN0IHRpbWVzdGFtcCA9IGNoZWNrLmNvbXBsZXRlZEF0O1xuICBpZiAoIXRpbWVzdGFtcCB8fCB0aW1lc3RhbXAgPT09IFpFUk9fVElNRVNUQU1QKSB7XG4gICAgcmV0dXJuIGNoZWNrLnN0YXJ0ZWRBdCA/PyAnJztcbiAgfVxuICByZXR1cm4gdGltZXN0YW1wO1xufVxuXG5mdW5jdGlvbiBsYXRlc3RHcm91cFRpbWVzdGFtcChjaGVja3M6IENoZWNrW10pOiBzdHJpbmcge1xuICByZXR1cm4gY2hlY2tzLnJlZHVjZSgobGF0ZXN0LCBjaGVjaykgPT4ge1xuICAgIGNvbnN0IHRpbWVzdGFtcCA9IGxhdGVzdENoZWNrVGltZXN0YW1wKGNoZWNrKTtcbiAgICByZXR1cm4gdGltZXN0YW1wID4gbGF0ZXN0ID8gdGltZXN0YW1wIDogbGF0ZXN0O1xuICB9LCAnJyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0ZXN0UmVsYXRlZENoZWNrKGNoZWNrOiBDaGVjayk6IGJvb2xlYW4ge1xuICByZXR1cm4gW2NoZWNrLm5hbWUsIGNoZWNrLndvcmtmbG93XS5zb21lKCh2YWx1ZSkgPT4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBURVNUX1JFTEFURURfUEFUVEVSTi50ZXN0KHZhbHVlKSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzbGVlcFNlY29uZHMoc2Vjb25kczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IHNsZWVwKHNlY29uZHMgKiAxMDAwKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gc3RyZWFtVG9UZXh0KHN0cmVhbTogTm9kZUpTLlJlYWRhYmxlU3RyZWFtIHwgbnVsbCk6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmICghc3RyZWFtKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgY29uc3QgY2h1bmtzOiBCdWZmZXJbXSA9IFtdO1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIHN0cmVhbSkge1xuICAgIGNodW5rcy5wdXNoKHR5cGVvZiBjaHVuayA9PT0gJ3N0cmluZycgPyBCdWZmZXIuZnJvbShjaHVuaykgOiBCdWZmZXIuZnJvbShjaHVuaykpO1xuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGNodW5rcykudG9TdHJpbmcoJ3V0ZjgnKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk6IFByb21pc2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4ge1xuICBjb25zdCBpbnB1dCA9IGF3YWl0IHJlYWRSZXF1aXJlZFN0ZGluVGV4dCgpO1xuICBjb25zdCBwYXlsb2FkID0gcGFyc2VSZXBseUlucHV0KGlucHV0KTtcbiAgY29uc3QgcmVwbGllcyA9IHBheWxvYWQucmVwbGllcyA/PyB7fTtcbiAgY29uc3Qgbm9ybWFsaXplZFJlcGxpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcbiAgZm9yIChjb25zdCBbdGhyZWFkSWQsIGJvZHldIG9mIE9iamVjdC5lbnRyaWVzKHJlcGxpZXMpKSB7XG4gICAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJyAmJiBib2R5Lmxlbmd0aCA+IDApIHtcbiAgICAgIG5vcm1hbGl6ZWRSZXBsaWVzW3RocmVhZElkXSA9IGJvZHk7XG4gICAgfVxuICB9XG4gIHJldHVybiBub3JtYWxpemVkUmVwbGllcztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9wZW5Qcihib2R5Pzogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaGVhZCA9IChhd2FpdCBydW5Db21tYW5kKFsnZ2l0JywgJ2JyYW5jaCcsICctLXNob3ctY3VycmVudCddKSkudHJpbSgpO1xuICBjb25zdCBiYXNlID0gKGF3YWl0IGdoKFsncmVwbycsICd2aWV3JywgJy0tanNvbicsICdkZWZhdWx0QnJhbmNoUmVmJywgJy0tanEnLCAnLmRlZmF1bHRCcmFuY2hSZWYubmFtZSddKSkudHJpbSgpO1xuXG4gIGlmICghaGVhZCkge1xuICAgIGV4aXRXaXRoRXJyb3IoJ0Vycm9yOiBjb3VsZCBub3QgZGV0ZXJtaW5lIGN1cnJlbnQgYnJhbmNoJyk7XG4gIH1cbiAgaWYgKCFiYXNlKSB7XG4gICAgZXhpdFdpdGhFcnJvcignRXJyb3I6IGNvdWxkIG5vdCBkZXRlcm1pbmUgZGVmYXVsdCBicmFuY2gnKTtcbiAgfVxuICBpZiAoaGVhZCA9PT0gYmFzZSkge1xuICAgIGV4aXRXaXRoRXJyb3IoYEVycm9yOiBjdXJyZW50IGJyYW5jaCBpcyB0aGUgZGVmYXVsdCBicmFuY2ggKCR7YmFzZX0pYCk7XG4gIH1cblxuICBjb25zdCBjcmVhdGVBcmdzID0gWydwcicsICdjcmVhdGUnLCAnLS1iYXNlJywgYmFzZSwgJy0taGVhZCcsIGhlYWQsICctLWZpbGwnXTtcbiAgaWYgKGJvZHkgJiYgYm9keS5sZW5ndGggPiAwKSB7XG4gICAgY3JlYXRlQXJncy5wdXNoKCctLWJvZHktZmlsZScsICctJyk7XG4gIH1cblxuICBwcm9ncmVzcygnQ3JlYXRpbmcgcHVsbCByZXF1ZXN0Li4uJyk7XG4gIGF3YWl0IGdoKGNyZWF0ZUFyZ3MsIGJvZHkpO1xuXG4gIHJldHVybiAoXG4gICAgYXdhaXQgZ2goWydwcicsICd2aWV3JywgJy0tanNvbicsICdpZCxudW1iZXIsdGl0bGUsdXJsLHN0YXRlLGlzRHJhZnQsYmFzZVJlZk5hbWUsaGVhZFJlZk5hbWUsYXV0aG9yJ10pXG4gICkudHJpbSgpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbGlzdFByUmV2aWV3VGhyZWFkcygpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbb3duZXIsIG5hbWVdID0gYXdhaXQgY3VycmVudFJlcG9QYXJ0cygpO1xuICBjb25zdCBwck51bWJlciA9IGF3YWl0IGN1cnJlbnRQck51bWJlcigpO1xuXG4gIHByb2dyZXNzKCdGZXRjaGluZyB1bnJlc29sdmVkIHJldmlldyB0aHJlYWRzLi4uJyk7XG4gIHJldHVybiB5YW1sRHVtcCh7IHVucmVzb2x2ZWRfdGhyZWFkczogYXdhaXQgdW5yZXNvbHZlZFJldmlld1RocmVhZHMob3duZXIsIG5hbWUsIHByTnVtYmVyKSB9KTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlc29sdmVQclJldmlld1RocmVhZHMocmVwbGllczogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGNvbnN0IFtvd25lciwgbmFtZV0gPSBhd2FpdCBjdXJyZW50UmVwb1BhcnRzKCk7XG4gIGNvbnN0IHByTnVtYmVyID0gYXdhaXQgY3VycmVudFByTnVtYmVyKCk7XG4gIGNvbnN0IHVucmVzb2x2ZWRJZHMgPSBuZXcgU2V0KGF3YWl0IHVucmVzb2x2ZWRSZXZpZXdUaHJlYWRJZHMob3duZXIsIG5hbWUsIHByTnVtYmVyKSk7XG5cbiAgcHJvZ3Jlc3MoYFJlcGx5aW5nIHRvICR7T2JqZWN0LmtleXMocmVwbGllcykubGVuZ3RofSByZXZpZXcgdGhyZWFkcy4uLmApO1xuXG4gIGNvbnN0IHJlc29sdmVkVGhyZWFkSWRzOiBzdHJpbmdbXSA9IFtdO1xuICBjb25zdCBlbnRyaWVzID0gT2JqZWN0LmVudHJpZXMocmVwbGllcyk7XG5cbiAgZm9yIChjb25zdCBbaW5kZXgsIFt0aHJlYWRJZCwgYm9keV1dIG9mIGVudHJpZXMuZW50cmllcygpKSB7XG4gICAgcHJvZ3Jlc3MoYFByb2Nlc3NpbmcgJHtpbmRleCArIDF9LyR7ZW50cmllcy5sZW5ndGh9OiAke3RocmVhZElkfWApO1xuICAgIGlmICghdW5yZXNvbHZlZElkcy5oYXModGhyZWFkSWQpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGdyYXBocWw8e1xuICAgICAgZGF0YT86IHtcbiAgICAgICAgcmVzb2x2ZVJldmlld1RocmVhZD86IHtcbiAgICAgICAgICB0aHJlYWQ/OiB7XG4gICAgICAgICAgICBpZDogc3RyaW5nO1xuICAgICAgICAgICAgaXNSZXNvbHZlZDogYm9vbGVhbjtcbiAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgfTtcbiAgICB9PihcbiAgICAgIGBcbiAgICAgICAgbXV0YXRpb24oJHRocmVhZElkOiBJRCEsICRib2R5OiBTdHJpbmchKSB7XG4gICAgICAgICAgYWRkUHVsbFJlcXVlc3RSZXZpZXdUaHJlYWRSZXBseShpbnB1dDoge3B1bGxSZXF1ZXN0UmV2aWV3VGhyZWFkSWQ6ICR0aHJlYWRJZCwgYm9keTogJGJvZHl9KSB7XG4gICAgICAgICAgICBjb21tZW50IHtcbiAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgdXJsXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc29sdmVSZXZpZXdUaHJlYWQoaW5wdXQ6IHt0aHJlYWRJZDogJHRocmVhZElkfSkge1xuICAgICAgICAgICAgdGhyZWFkIHtcbiAgICAgICAgICAgICAgaWRcbiAgICAgICAgICAgICAgaXNSZXNvbHZlZFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgYCxcbiAgICAgIHsgdGhyZWFkSWQsIGJvZHkgfVxuICAgICk7XG5cbiAgICBpZiAocmVzcG9uc2UuZGF0YT8ucmVzb2x2ZVJldmlld1RocmVhZD8udGhyZWFkPy5pc1Jlc29sdmVkKSB7XG4gICAgICByZXNvbHZlZFRocmVhZElkcy5wdXNoKHRocmVhZElkKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvZ3Jlc3MoYFdhcm5pbmc6IGZhaWxlZCB0byByZXNvbHZlIHRocmVhZCAke3RocmVhZElkfS5gKTtcbiAgICB9XG4gIH1cblxuICBwcm9ncmVzcygnRG9uZS4nKTtcbiAgcmV0dXJuIHlhbWxEdW1wKHsgcmVzb2x2ZWRfdGhyZWFkX2lkczogcmVzb2x2ZWRUaHJlYWRJZHMgfSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja1ByQ2koKTogUHJvbWlzZTx7IG91dHB1dDogc3RyaW5nOyBleGl0Q29kZTogbnVtYmVyIH0+IHtcbiAgY29uc3QgcHJOdW1iZXIgPSBhd2FpdCBjdXJyZW50UHJOdW1iZXIoKTtcblxuICBwcm9ncmVzcygnRmV0Y2hpbmcgbGF0ZXN0IENJIHJlc3VsdHMuLi4nKTtcbiAgY29uc3QgW2NpUmVzdWx0cywgd2FpdEF0dGVtcHRzLCB3YWl0VGltZWRPdXRdID0gYXdhaXQgd2FpdEZvclJ1bm5pbmdUZXN0UmVsYXRlZFdvcmtmbG93cyhwck51bWJlcik7XG4gIGNvbnN0IGNsYXNzaWZpZWRMYXRlc3QgPSBjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyhjaVJlc3VsdHMpO1xuICBjb25zdCBbZmFpbGVkUmVzdWx0cywgcnVubmluZ1Jlc3VsdHNdID0gZmFpbGVkQW5kUnVubmluZ1Rlc3RSZWxhdGVkUmVzdWx0c0Zyb21DbGFzc2lmaWVkKGNsYXNzaWZpZWRMYXRlc3QpO1xuXG4gIGNvbnN0IGxhdGVzdFdvcmtmbG93UmVzdWx0cyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcbiAgICAgIE9iamVjdC5lbnRyaWVzKGNsYXNzaWZpZWRMYXRlc3QpLm1hcChhc3luYyAoW3dvcmtmbG93S2V5LCByZXN1bHRdKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoZWNrID0gcmVzdWx0LmNoZWNrO1xuICAgICAgICBjb25zdCBydW4gPSBhd2FpdCB3b3JrZmxvd1J1bih3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhjaGVjaykpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgIHdvcmtmbG93S2V5LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGNsYXNzaWZpY2F0aW9uOiByZXN1bHQuY2xhc3NpZmljYXRpb24sXG4gICAgICAgICAgICBjaGVjazogZGVlcENvcHkoY2hlY2spLFxuICAgICAgICAgICAgd29ya2Zsb3dSdW46IHJ1biAmJiBkZWVwQ29weShydW4pLFxuICAgICAgICAgIH0sXG4gICAgICAgIF07XG4gICAgICB9KVxuICAgIClcbiAgKTtcblxuICBjb25zdCBwYXlsb2FkOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHtcbiAgICBsYXRlc3RfY2lfcmVzdWx0czogY2lSZXN1bHRzLFxuICAgIHdhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrczogd2FpdEF0dGVtcHRzID4gMCxcbiAgICB0ZXN0X3JlbGF0ZWRfY2hlY2tfd2FpdF9hdHRlbXB0czogd2FpdEF0dGVtcHRzLFxuICAgIHRlc3RfcmVsYXRlZF9jaGVja193YWl0X3RpbWVkX291dDogd2FpdFRpbWVkT3V0LFxuICAgIGxhdGVzdF93b3JrZmxvd19yZXN1bHRzOiBsYXRlc3RXb3JrZmxvd1Jlc3VsdHMsXG4gIH07XG5cbiAgaWYgKE9iamVjdC5rZXlzKGZhaWxlZFJlc3VsdHMpLmxlbmd0aCA+IDApIHtcbiAgICBwYXlsb2FkLmZhaWxlZF93b3JrZmxvd19vdXRwdXRzID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIE9iamVjdC5lbnRyaWVzKGZhaWxlZFJlc3VsdHMpLm1hcChhc3luYyAoW3dvcmtmbG93S2V5LCByZXN1bHRdKSA9PiB7XG4gICAgICAgICAgY29uc3QgcnVuSWQgPSB3b3JrZmxvd1J1bklkRnJvbUNoZWNrTGluayhyZXN1bHQuY2hlY2spO1xuICAgICAgICAgIGlmICghcnVuSWQpIHtcbiAgICAgICAgICAgIHJldHVybiBbd29ya2Zsb3dLZXksICdGYWlsZWQgbGF0ZXN0IHJlc3VsdCBoYXMgbm8gR2l0SHViIEFjdGlvbnMgcnVuIGxpbmsuJ107XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBbd29ya2Zsb3dLZXksIGF3YWl0IGdoQWxsb3dFeGl0Q29kZXMoWydydW4nLCAndmlldycsIHJ1bklkLCAnLS1sb2ctZmFpbGVkJ10sIFsxXSldO1xuICAgICAgICB9KVxuICAgICAgKVxuICAgICk7XG4gICAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDEgfTtcbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyhydW5uaW5nUmVzdWx0cykubGVuZ3RoID4gMCkge1xuICAgIHBheWxvYWQudGVzdF93b3JrZmxvd19vdXRwdXQgPSAnVGltZWQgb3V0IHdhaXRpbmcgZm9yIHRlc3QtcmVsYXRlZCB3b3JrZmxvd3MgdG8gZmluaXNoLic7XG4gICAgcGF5bG9hZC5ydW5uaW5nX3Rlc3RfcmVsYXRlZF93b3JrZmxvd3MgPSBPYmplY3Qua2V5cyhydW5uaW5nUmVzdWx0cyk7XG4gICAgcmV0dXJuIHsgb3V0cHV0OiB5YW1sRHVtcChwYXlsb2FkKSwgZXhpdENvZGU6IDEgfTtcbiAgfVxuXG4gIHBheWxvYWQudGVzdF93b3JrZmxvd19vdXRwdXQgPSAnQWxsIHdvcmtmbG93cyBhcmUgc3VjY2Vzc2Z1bC4nO1xuICByZXR1cm4geyBvdXRwdXQ6IHlhbWxEdW1wKHBheWxvYWQpLCBleGl0Q29kZTogMCB9O1xufVxuXG5mdW5jdGlvbiBwYXJzZVJlcGx5SW5wdXQoaW5wdXQ6IHN0cmluZyk6IHsgcmVwbGllcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+IH0ge1xuICBjb25zdCBlcnJvclByZWZpeCA9ICdFcnJvcjogSW52YWxpZCBpbnB1dCBmb3JtYXQgb24gc3RkaW4nO1xuXG4gIHRyeSB7XG4gICAgY29uc3QgcGFyc2VkID0gSlNPTi5wYXJzZShpbnB1dCkgYXMgdW5rbm93bjtcbiAgICBpZiAoIWlzUmVwbHlJbnB1dChwYXJzZWQpKSB7XG4gICAgICBleGl0V2l0aEVycm9yKGAke2Vycm9yUHJlZml4fTogZXhwZWN0ZWQgYW4gb2JqZWN0IHdpdGggYW4gb3B0aW9uYWwgc3RyaW5nLXZhbHVlZCBcXGByZXBsaWVzXFxgIG1hcGAsIDIpO1xuICAgIH1cbiAgICByZXR1cm4gcGFyc2VkO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFN5bnRheEVycm9yKSB7XG4gICAgICBleGl0V2l0aEVycm9yKGBFcnJvcjogSW52YWxpZCBKU09OIHByb3ZpZGVkIG9uIHN0ZGluOiAke2Vycm9yLm1lc3NhZ2V9YCwgMik7XG4gICAgfVxuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmZ1bmN0aW9uIGlzUmVwbHlJbnB1dCh2YWx1ZTogdW5rbm93bik6IHZhbHVlIGlzIHsgcmVwbGllcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ+IH0ge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnb2JqZWN0JyB8fCB2YWx1ZSA9PT0gbnVsbCB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGNvbnN0IHJlcGxpZXMgPSAodmFsdWUgYXMgeyByZXBsaWVzPzogdW5rbm93biB9KS5yZXBsaWVzO1xuICBpZiAocmVwbGllcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKHR5cGVvZiByZXBsaWVzICE9PSAnb2JqZWN0JyB8fCByZXBsaWVzID09PSBudWxsIHx8IEFycmF5LmlzQXJyYXkocmVwbGllcykpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LnZhbHVlcyhyZXBsaWVzKS5ldmVyeSgocmVwbHkpID0+IHJlcGx5ID09PSBudWxsIHx8IHJlcGx5ID09PSB1bmRlZmluZWQgfHwgdHlwZW9mIHJlcGx5ID09PSAnc3RyaW5nJyk7XG59XG4iLCIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tICdjb21tYW5kZXInO1xuaW1wb3J0IHtcbiAgY2hlY2tQckNpLFxuICBsaXN0UHJSZXZpZXdUaHJlYWRzLFxuICBvcGVuUHIsXG4gIHJlYWRSZXBsaWVzRnJvbVN0ZGluLFxuICByZWFkU3RkaW5UZXh0LFxuICByZXNvbHZlUHJSZXZpZXdUaHJlYWRzLFxufSBmcm9tICcuLi9wci9wci1jb21tYW5kcy5qcyc7XG5cbmNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG5wcm9ncmFtLm5hbWUoJ2FnZW50LXNraWxscycpLmRlc2NyaXB0aW9uKCdDTEkgY29tbWFuZHMgZm9yIHRoZSBza2lsbHMgaW4gdGhpcyByZXBvc2l0b3J5Jykuc2hvd0hlbHBBZnRlckVycm9yKCk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ29wZW4tcHInKVxuICAuZGVzY3JpcHRpb24oJ0NyZWF0ZSBhIHB1bGwgcmVxdWVzdCBmb3IgdGhlIGN1cnJlbnQgYnJhbmNoJylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBib2R5ID0gYXdhaXQgcmVhZFN0ZGluVGV4dCgpO1xuICAgIGNvbnN0IG91dHB1dCA9IGF3YWl0IG9wZW5Qcihib2R5IHx8IHVuZGVmaW5lZCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUoYCR7b3V0cHV0fVxcbmApO1xuICB9KTtcblxucHJvZ3JhbVxuICAuY29tbWFuZCgnY2hlY2stcHItY2knKVxuICAuZGVzY3JpcHRpb24oJ1Nob3cgdGhlIGxhdGVzdCB0ZXN0LXJlbGF0ZWQgQ0kgcmVzdWx0cyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBjaGVja1ByQ2koKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShyZXN1bHQub3V0cHV0KTtcbiAgICBwcm9jZXNzLmV4aXQocmVzdWx0LmV4aXRDb2RlKTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ2xpc3QtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ0xpc3QgdW5yZXNvbHZlZCByZXZpZXcgdGhyZWFkcyBmb3IgdGhlIGN1cnJlbnQgcHVsbCByZXF1ZXN0JylcbiAgLmFsbG93RXhjZXNzQXJndW1lbnRzKGZhbHNlKVxuICAuYWN0aW9uKGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBhd2FpdCBsaXN0UHJSZXZpZXdUaHJlYWRzKCk7XG4gICAgcHJvY2Vzcy5zdGRvdXQud3JpdGUob3V0cHV0KTtcbiAgfSk7XG5cbnByb2dyYW1cbiAgLmNvbW1hbmQoJ3Jlc29sdmUtcHItcmV2aWV3LXRocmVhZHMnKVxuICAuZGVzY3JpcHRpb24oJ1JlcGx5IHRvIHVucmVzb2x2ZWQgcmV2aWV3IHRocmVhZHMgYW5kIHJlc29sdmUgdGhlbScpXG4gIC5hbGxvd0V4Y2Vzc0FyZ3VtZW50cyhmYWxzZSlcbiAgLmFjdGlvbihhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgcmVwbGllcyA9IGF3YWl0IHJlYWRSZXBsaWVzRnJvbVN0ZGluKCk7XG4gICAgY29uc3Qgb3V0cHV0ID0gYXdhaXQgcmVzb2x2ZVByUmV2aWV3VGhyZWFkcyhyZXBsaWVzKTtcbiAgICBwcm9jZXNzLnN0ZG91dC53cml0ZShvdXRwdXQpO1xuICB9KTtcblxuYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHByb2Nlc3MuYXJndik7XG4iXSwibmFtZXMiOlsieWFtbFN0cmluZ2lmeU9wdGlvbnMiLCJibG9ja1F1b3RlIiwibGluZVdpZHRoIiwiVEVTVF9SRUxBVEVEX1BBVFRFUk4iLCJXT1JLRkxPV19SVU5fSlNPTl9GSUVMRFMiLCJwcm9ncmVzcyIsIm1lc3NhZ2UiLCJwcm9jZXNzU3RkZXJyIiwid3JpdGUiLCJjb25jYXQiLCJleGl0V2l0aEVycm9yIiwiY29kZSIsInByb2Nlc3MiLCJleGl0IiwiaXNUcmFuc2llbnRHaEZhaWx1cmUiLCJjb21tYW5kIiwiZXhpdENvZGUiLCJvdXRwdXQiLCJ0ZXN0IiwicmVhZFN0ZGluVGV4dCIsIl9yZWFkU3RkaW5UZXh0IiwiYXBwbHkiLCJ0aGlzIiwiYXJndW1lbnRzIiwiX2FzeW5jVG9HZW5lcmF0b3IiLCJfcmVnZW5lcmF0b3IiLCJtIiwiX2NhbGxlZSIsInciLCJfY29udGV4dCIsIm4iLCJwcm9jZXNzU3RkaW4iLCJpc1RUWSIsImEiLCJzdHJlYW1Ub1RleHQiLCJ2IiwicmVhZFJlcXVpcmVkU3RkaW5UZXh0IiwiX3JlYWRSZXF1aXJlZFN0ZGluVGV4dCIsIl9jYWxsZWUyIiwiaW5wdXQiLCJfY29udGV4dDIiLCJsZW5ndGgiLCJydW5Db21tYW5kIiwiX3giLCJfeDIiLCJfcnVuQ29tbWFuZCIsIl9jYWxsZWUzIiwib3B0aW9ucyIsIl9vcHRpb25zJGFsbG93ZWRFeGl0QyIsImFsbG93ZWRFeGl0Q29kZXMiLCJfbG9vcCIsIl9yZXQiLCJhdHRlbXB0IiwiX2NvbnRleHQ0IiwiX2NvbW1hbmQkIiwicHJvYyIsIl95aWVsZCRQcm9taXNlJGFsbCIsIl95aWVsZCRQcm9taXNlJGFsbDIiLCJzdGRvdXQiLCJzdGRlcnIiLCJfY29udGV4dDMiLCJzcGF3biIsInNsaWNlIiwic3RkaW8iLCJ1bmRlZmluZWQiLCJzdGRpbkRhdGEiLCJzdGRpbiIsImVuZCIsIlByb21pc2UiLCJhbGwiLCJyZXNvbHZlIiwicmVqZWN0Iiwib25jZSIsIl9zbGljZWRUb0FycmF5IiwiaW5jbHVkZXMiLCJHSF9SRVRSWV9NQVhfQVRURU1QVFMiLCJzbGVlcCIsImpvaW4iLCJkIiwiX3JlZ2VuZXJhdG9yVmFsdWVzIiwiZ2giLCJfeDMiLCJfeDQiLCJfZ2giLCJfY2FsbGVlNCIsImFyZ3MiLCJfY29udGV4dDUiLCJfdG9Db25zdW1hYmxlQXJyYXkiLCJnaEFsbG93RXhpdENvZGVzIiwiX3g1IiwiX3g2IiwiX3g3IiwiX2doQWxsb3dFeGl0Q29kZXMiLCJfY2FsbGVlNSIsIl9jb250ZXh0NiIsImN1cnJlbnRSZXBvUGFydHMiLCJfY3VycmVudFJlcG9QYXJ0cyIsIl9jYWxsZWU2IiwibmFtZVdpdGhPd25lciIsIl9uYW1lV2l0aE93bmVyJHNwbGl0IiwiX25hbWVXaXRoT3duZXIkc3BsaXQyIiwib3duZXIiLCJuYW1lIiwiX2NvbnRleHQ3IiwidHJpbSIsInNwbGl0IiwiY3VycmVudFByTnVtYmVyIiwiX2N1cnJlbnRQck51bWJlciIsIl9jYWxsZWU3IiwiX2NvbnRleHQ4IiwiZ3JhcGhxbCIsIl94OCIsIl94OSIsIl9ncmFwaHFsIiwiX2NhbGxlZTgiLCJxdWVyeSIsInZhcnMiLCJfaTIiLCJfT2JqZWN0JGVudHJpZXMyIiwiX09iamVjdCRlbnRyaWVzMiRfaSIsIl9rZXkiLCJ2YWx1ZSIsInJlc3BvbnNlIiwiZXJyb3JNZXNzYWdlcyIsIl90IiwiX2NvbnRleHQ5IiwiT2JqZWN0IiwiZW50cmllcyIsImtleSIsInB1c2giLCJKU09OIiwicGFyc2UiLCJjYWxsIiwiQXJyYXkiLCJpc0FycmF5IiwiZXJyb3JzIiwibWFwIiwiZXJyb3IiLCJfZXJyb3IkbWVzc2FnZSIsIm5vcm1hbGl6ZUNvbW1lbnRBdXRob3IiLCJjb21tZW50IiwiX2NvbW1lbnQkYXV0aG9yJGxvZ2luIiwiX2NvbW1lbnQkYXV0aG9yIiwiX29iamVjdFNwcmVhZCIsImF1dGhvciIsImxvZ2luIiwicGFnaW5hdGVSZXZpZXdUaHJlYWRzIiwiX3gwIiwiX3gxIiwiX3gxMCIsIl94MTEiLCJfeDEyIiwiX3BhZ2luYXRlUmV2aWV3VGhyZWFkcyIsIl9jYWxsZWU5IiwicHJOdW1iZXIiLCJvblRocmVhZCIsImN1cnNvciIsIl95aWVsZCRncmFwaHFsJGRhdGEiLCJfcmV2aWV3VGhyZWFkcyRwYWdlSW4iLCJyZXZpZXdUaHJlYWRzIiwiX2l0ZXJhdG9yMiIsIl9zdGVwMiIsInRocmVhZCIsIl90MiIsIl90MyIsIl90NCIsIl90NSIsIl90NiIsIl9jb250ZXh0MCIsInAiLCJudW1iZXIiLCJOdW1iZXIiLCJkYXRhIiwicmVwb3NpdG9yeSIsInB1bGxSZXF1ZXN0IiwiX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIiLCJub2RlcyIsInMiLCJkb25lIiwiZSIsImYiLCJwYWdlSW5mbyIsImhhc05leHRQYWdlIiwiZW5kQ3Vyc29yIiwidW5yZXNvbHZlZFJldmlld1RocmVhZElkcyIsIl94MTMiLCJfeDE0IiwiX3gxNSIsIl91bnJlc29sdmVkUmV2aWV3VGhyZWFkSWRzIiwiX2NhbGxlZTAiLCJpZHMiLCJfY29udGV4dDEiLCJpc1Jlc29sdmVkIiwiaWQiLCJ1bnJlc29sdmVkUmV2aWV3VGhyZWFkcyIsIl94MTYiLCJfeDE3IiwiX3gxOCIsIl91bnJlc29sdmVkUmV2aWV3VGhyZWFkcyIsIl9jYWxsZWUxMCIsInRocmVhZHMiLCJfY29udGV4dDExIiwiX2NhbGxlZTEiLCJfcGFnZUluZm8kZW5kQ3Vyc29yIiwiY29tbWVudHMiLCJfeWllbGQkZ3JhcGhxbCRkYXRhMiIsIl9wYWdlSW5mbyRlbmRDdXJzb3IyIiwiY29tbWVudENvbm5lY3Rpb24iLCJfdDciLCJfdDgiLCJfdDkiLCJfY29udGV4dDEwIiwidGhyZWFkSWQiLCJub2RlIiwiaXNPdXRkYXRlZCIsInBhdGgiLCJsaW5lIiwib3JpZ2luYWxMaW5lIiwic3RhcnRMaW5lIiwib3JpZ2luYWxTdGFydExpbmUiLCJ5YW1sRHVtcCIsInN0cmluZ2lmeVlhbWwiLCJkZWVwQ29weSIsInN0cmluZ2lmeSIsImxhdGVzdFByQ2lSZXN1bHRzIiwiX3gxOSIsIl9sYXRlc3RQckNpUmVzdWx0cyIsIl9jYWxsZWUxMSIsIl9zdW1tYXJ5JHBhc3MiLCJfc3VtbWFyeSRmYWlsIiwiX3N1bW1hcnkkcGVuZGluZyIsIl9zdW1tYXJ5JHNraXBwaW5nIiwiX3N1bW1hcnkkY2FuY2VsIiwiY2hlY2tzIiwicmF3Iiwic3VtbWFyeSIsIl90MCIsIl9jb250ZXh0MTIiLCJTeW50YXhFcnJvciIsInJlZHVjZSIsImNvdW50cyIsImNoZWNrIiwiX2NoZWNrJGJ1Y2tldDIiLCJfY291bnRzJGJ1Y2tldCIsImJ1Y2tldCIsInRvdGFsIiwicGFzcyIsImZhaWwiLCJwZW5kaW5nIiwic2tpcHBpbmciLCJjYW5jZWwiLCJjbGFzc2lmaWVkTGF0ZXN0UmVzdWx0cyIsImNpUmVzdWx0cyIsImxhdGVzdFJlc3VsdHNCeVdvcmtmbG93IiwiZ3JvdXBlZFJlc3VsdHMiLCJ3b3JrZmxvd0tleSIsIndvcmtmbG93IiwiZnJvbUVudHJpZXMiLCJfcmVmIiwiX2xhdGVzdEF0dGVtcHRDaGVja3MkIiwiX3JlZjIiLCJsYXRlc3RBdHRlbXB0Q2hlY2tzIiwiZ3JvdXBzIiwiZ3JvdXBlZENoZWNrcyIsInJ1bklkIiwid29ya2Zsb3dSdW5JZEZyb21DaGVja0xpbmsiLCJ3b3JrZmxvd0F0dGVtcHRLZXkiLCJncm91cCIsImdldCIsInNldCIsIk1hcCIsImZyb20iLCJ2YWx1ZXMiLCJsYXRlc3RHcm91cCIsImN1cnJlbnRHcm91cCIsImxhdGVzdEdyb3VwVGltZXN0YW1wIiwibGF0ZXN0Q2hlY2tzRm9yV29ya2Zsb3ciLCJmaXJzdENoZWNrIiwibGF0ZXN0Q2hlY2siLCJjdXJyZW50TGF0ZXN0IiwibGF0ZXN0Q2hlY2tUaW1lc3RhbXAiLCJjbGFzc2lmaWNhdGlvbiIsIndvcmtmbG93UmVzdWx0Q2xhc3NpZmljYXRpb24iLCJmYWlsZWRBbmRSdW5uaW5nVGVzdFJlbGF0ZWRSZXN1bHRzRnJvbUNsYXNzaWZpZWQiLCJjbGFzc2lmaWVkUmVzdWx0cyIsImZhaWxlZFJlc3VsdHMiLCJydW5uaW5nUmVzdWx0cyIsIl9pIiwiX09iamVjdCRlbnRyaWVzIiwiX09iamVjdCRlbnRyaWVzJF9pIiwicmVzdWx0Iiwic29tZSIsInRlc3RSZWxhdGVkQ2hlY2siLCJ3YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzIiwiX3gyMCIsIl94MjEiLCJfeDIyIiwiX3gyMyIsIl93YWl0Rm9yUnVubmluZ1Rlc3RSZWxhdGVkV29ya2Zsb3dzIiwiX2NhbGxlZTEyIiwic2xlZXBGbiIsImxhdGVzdENpUmVzdWx0c0ZuIiwicHJvZ3Jlc3NGbiIsImF0dGVtcHRzIiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0IiwiX2ZhaWxlZEFuZFJ1bm5pbmdUZXN0MiIsIl9jb250ZXh0MTMiLCJzbGVlcFNlY29uZHMiLCJrZXlzIiwiX2xpbmskbWF0Y2giLCJsaW5rIiwibWF0Y2giLCJ3b3JrZmxvd1J1biIsIl94MjQiLCJfd29ya2Zsb3dSdW4iLCJfY2FsbGVlMTMiLCJydW5Kc29uIiwiX3QxIiwiX2NvbnRleHQxNCIsImJ1Y2tldHMiLCJfY2hlY2skYnVja2V0IiwiX2NoZWNrJHN0YXJ0ZWRBdCIsInRpbWVzdGFtcCIsImNvbXBsZXRlZEF0Iiwic3RhcnRlZEF0IiwibGF0ZXN0IiwiX3gyNSIsIl9zbGVlcFNlY29uZHMiLCJfY2FsbGVlMTQiLCJzZWNvbmRzIiwiX2NvbnRleHQxNSIsIl94MjYiLCJfc3RyZWFtVG9UZXh0IiwiX2NhbGxlZTE1Iiwic3RyZWFtIiwiY2h1bmtzIiwiX2l0ZXJhdG9yQWJydXB0Q29tcGxldGlvbiIsIl9kaWRJdGVyYXRvckVycm9yIiwiX2l0ZXJhdG9yRXJyb3IiLCJfaXRlcmF0b3IiLCJfc3RlcCIsImNodW5rIiwiX3QxMCIsIl9jb250ZXh0MTYiLCJfYXN5bmNJdGVyYXRvciIsIm5leHQiLCJCdWZmZXIiLCJ0b1N0cmluZyIsInJlYWRSZXBsaWVzRnJvbVN0ZGluIiwiX3JlYWRSZXBsaWVzRnJvbVN0ZGluIiwiX2NhbGxlZTE2IiwiX3BheWxvYWQkcmVwbGllcyIsInBheWxvYWQiLCJyZXBsaWVzIiwibm9ybWFsaXplZFJlcGxpZXMiLCJfaTMiLCJfT2JqZWN0JGVudHJpZXMzIiwiX09iamVjdCRlbnRyaWVzMyRfaSIsImJvZHkiLCJfY29udGV4dDE3IiwicGFyc2VSZXBseUlucHV0Iiwib3BlblByIiwiX3gyNyIsIl9vcGVuUHIiLCJfY2FsbGVlMTciLCJoZWFkIiwiYmFzZSIsImNyZWF0ZUFyZ3MiLCJfY29udGV4dDE4IiwibGlzdFByUmV2aWV3VGhyZWFkcyIsIl9saXN0UHJSZXZpZXdUaHJlYWRzIiwiX2NhbGxlZTE4IiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyMiIsIl90MTEiLCJfdDEyIiwiX2NvbnRleHQxOSIsInVucmVzb2x2ZWRfdGhyZWFkcyIsInJlc29sdmVQclJldmlld1RocmVhZHMiLCJfeDI4IiwiX3Jlc29sdmVQclJldmlld1RocmVhZHMiLCJfY2FsbGVlMTkiLCJfeWllbGQkY3VycmVudFJlcG9QYXIzIiwiX3lpZWxkJGN1cnJlbnRSZXBvUGFyNCIsInVucmVzb2x2ZWRJZHMiLCJyZXNvbHZlZFRocmVhZElkcyIsIl9pdGVyYXRvcjMiLCJfc3RlcDMiLCJfcmVzcG9uc2UkZGF0YSIsIl9zdGVwMyR2YWx1ZSIsImluZGV4IiwiX3N0ZXAzJHZhbHVlJCIsIl90MTMiLCJfdDE0IiwiX3QxNSIsIl9jb250ZXh0MjAiLCJTZXQiLCJoYXMiLCJyZXNvbHZlUmV2aWV3VGhyZWFkIiwicmVzb2x2ZWRfdGhyZWFkX2lkcyIsImNoZWNrUHJDaSIsIl9jaGVja1ByQ2kiLCJfY2FsbGVlMjIiLCJfeWllbGQkd2FpdEZvclJ1bm5pbmciLCJfeWllbGQkd2FpdEZvclJ1bm5pbmcyIiwid2FpdEF0dGVtcHRzIiwid2FpdFRpbWVkT3V0IiwiY2xhc3NpZmllZExhdGVzdCIsIl9mYWlsZWRBbmRSdW5uaW5nVGVzdDMiLCJfZmFpbGVkQW5kUnVubmluZ1Rlc3Q0IiwibGF0ZXN0V29ya2Zsb3dSZXN1bHRzIiwiX3QxOCIsIl90MTkiLCJfY29udGV4dDIzIiwiX2NhbGxlZTIwIiwiX3JlZjQiLCJfcmVmNiIsInJ1biIsIl9jb250ZXh0MjEiLCJsYXRlc3RfY2lfcmVzdWx0cyIsIndhaXRlZF9mb3JfdGVzdF9yZWxhdGVkX2NoZWNrcyIsInRlc3RfcmVsYXRlZF9jaGVja193YWl0X2F0dGVtcHRzIiwidGVzdF9yZWxhdGVkX2NoZWNrX3dhaXRfdGltZWRfb3V0IiwibGF0ZXN0X3dvcmtmbG93X3Jlc3VsdHMiLCJfY2FsbGVlMjEiLCJfcmVmNyIsIl9yZWY5IiwiX3QxNiIsIl90MTciLCJfY29udGV4dDIyIiwiZmFpbGVkX3dvcmtmbG93X291dHB1dHMiLCJ0ZXN0X3dvcmtmbG93X291dHB1dCIsInJ1bm5pbmdfdGVzdF9yZWxhdGVkX3dvcmtmbG93cyIsInBhcnNlZCIsIl90eXBlb2YiLCJldmVyeSIsInJlcGx5IiwiaXNSZXBseUlucHV0IiwicHJvZ3JhbSIsIkNvbW1hbmQiLCJkZXNjcmlwdGlvbiIsInNob3dIZWxwQWZ0ZXJFcnJvciIsImFsbG93RXhjZXNzQXJndW1lbnRzIiwiYWN0aW9uIiwicGFyc2VBc3luYyIsImFyZ3YiXSwibWFwcGluZ3MiOiI7OzttekhBSU8sSUFBTUEsRUFBdUIsQ0FBRUMsV0FBWSxVQUFXQyxVQUFXLEdDRTNEQyxFQUF1QixZQUl2QkMsRUFBMkIsQ0FDdEMsVUFDQSxhQUNBLFlBQ0EsYUFDQSxlQUNBLFFBQ0EsYUFDQSxVQUNBLE9BQ0EsU0FDQSxZQUNBLFNBQ0EsWUFDQSxNQUNBLGdCQXlFSyxTQUFTQyxFQUFTQyxHQUN2QkMsRUFBY0MsTUFBSyxHQUFBQyxPQUFJSCxRQUN6QixDQUVBLFNBQVNJLEVBQWNKLEVBQWlCSyxRQUFJLElBQUpBLElBQUFBLEVBQU8sR0FDN0NKLEVBQWNDLE1BQUssR0FBQUMsT0FBSUgsU0FDdkJNLFFBQVFDLEtBQUtGLEVBQ2YsQ0FFQSxTQUFTRyxFQUFxQkMsRUFBbUJDLEVBQWtCQyxHQUNqRSxNQUFt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
|